Deleting unused or broken files

The tests removed from luni/src/test are testing files that no
longer exist. It's possible that they provided some coverage of
the code which is not provided for the OpenJDK code.

The classes removed from ojluni/src/main are the ones not
explicitly mentioned in the openjdk_java_files.mk.

Change-Id: Id52d65d9b1f06e1a6e7afbd93336c7d12e0c3083
diff --git a/luni/src/test/java/libcore/io/StrictLineReaderTest.java b/luni/src/test/java/libcore/io/StrictLineReaderTest.java
deleted file mode 100644
index db88a6b..0000000
--- a/luni/src/test/java/libcore/io/StrictLineReaderTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package libcore.io;
-
-import junit.framework.TestCase;
-
-import java.io.ByteArrayInputStream;
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-
-public class StrictLineReaderTest extends TestCase {
-
-    public void testLineReaderConsistencyWithReadAsciiLine () {
-        try {
-            // Testing with LineReader buffer capacity 32 to check some corner cases.
-            StrictLineReader lineReader = new StrictLineReader(createTestInputStream(), 32,
-                                                               StandardCharsets.US_ASCII);
-            InputStream refStream = createTestInputStream();
-            while (true) {
-                try {
-                    String refLine = Streams.readAsciiLine(refStream);
-                    try {
-                        String line = lineReader.readLine();
-                        if (!refLine.equals(line)) {
-                            fail("line (\""+line+"\") differs from expected (\""+refLine+"\").");
-                        }
-                    } catch (EOFException eof) {
-                        fail("line reader threw EOFException too early.");
-                    }
-                } catch (EOFException refEof) {
-                    try {
-                        lineReader.readLine();
-                        fail("line reader didn't throw the expected EOFException.");
-                    } catch (EOFException eof) {
-                        // OK
-                        break;
-                    }
-                }
-            }
-            refStream.close();
-            lineReader.close();
-        } catch (IOException ioe) {
-            fail("Unexpected IOException " + ioe.toString());
-        }
-    }
-
-    private InputStream createTestInputStream() {
-        return new ByteArrayInputStream((
-                /* each source lines below should represent 32 bytes, until the next comment */
-                "12 byte line\n18 byte line......\n" +
-                "pad\nline spanning two 32-byte bu" +
-                "ffers\npad......................\n" +
-                "pad\nline spanning three 32-byte " +
-                "buffers and ending with LF at th" +
-                "e end of a 32 byte buffer......\n" +
-                "pad\nLine ending with CRLF split" +
-                " at the end of a 32-byte buffer\r" +
-                "\npad...........................\n" +
-                /* end of 32-byte lines */
-                "line ending with CRLF\r\n" +
-                "this is a long line with embedded CR \r ending with CRLF and having more than " +
-                "32 characters\r\n" +
-                "unterminated line - should be dropped"
-                ).getBytes());
-    }
-}
diff --git a/luni/src/test/java/libcore/java/util/zip/Zip64Test.java b/luni/src/test/java/libcore/java/util/zip/Zip64Test.java
deleted file mode 100644
index e4b5baf..0000000
--- a/luni/src/test/java/libcore/java/util/zip/Zip64Test.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package libcore.java.util.zip;
-
-import junit.framework.TestCase;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.zip.Zip64;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipException;
-
-public class Zip64Test extends TestCase {
-
-    // We shouldn't attempt to look inside the extended info if we have valid fields
-    // in the regular file header / central directory entry.
-    public void testParseZip64ExtendedInfo_noFieldsPresent() throws Exception {
-        ZipEntry ze = createZipEntry(null, 100, 200, ZipEntry.STORED, 300);
-        Zip64.parseZip64ExtendedInfo(ze, false /* fromCentralDirectory */);
-        Zip64.parseZip64ExtendedInfo(ze, true /* fromCentralDirectory */);
-    }
-
-    // We *should* attempt to look in the extended info if the local file header / central
-    // directory entry don't have the correct values.
-    public void testParseZip64ExtendedInfo_missingExtendedInfo() throws Exception {
-        ZipEntry ze = createZipEntry(null, Zip64.MAX_ZIP_ENTRY_AND_ARCHIVE_SIZE,
-                Zip64.MAX_ZIP_ENTRY_AND_ARCHIVE_SIZE, ZipEntry.STORED, 300);
-        try {
-            Zip64.parseZip64ExtendedInfo(ze, false /* fromCentralDirectory */);
-            fail();
-        } catch (ZipException expected) {
-        }
-
-        try {
-            Zip64.parseZip64ExtendedInfo(ze, true /* fromCentralDirectory */);
-            fail();
-        } catch (ZipException expected) {
-        }
-    }
-
-    // Test the case where the compressed / uncompressed sizes are in the extended info
-    // but the header offset isn't.
-    public void testParseZip64ExtendedInfo_partialInfo() throws Exception {
-        byte[] extras = new byte[20];
-        ByteBuffer buf = ByteBuffer.wrap(extras);
-        buf.order(ByteOrder.LITTLE_ENDIAN);
-        buf.putShort((short) 0x0001);
-        buf.putShort((short) 16);
-        buf.putLong(50);
-        buf.putLong(100);
-
-        ZipEntry ze = createZipEntry(extras, Zip64.MAX_ZIP_ENTRY_AND_ARCHIVE_SIZE,
-                Zip64.MAX_ZIP_ENTRY_AND_ARCHIVE_SIZE, ZipEntry.STORED, 300);
-
-        Zip64.parseZip64ExtendedInfo(ze, false /*fromCentralDirectory */);
-        assertEquals(50, ze.getSize());
-        assertEquals(100, ze.getCompressedSize());
-
-        ze = createZipEntry(extras, Zip64.MAX_ZIP_ENTRY_AND_ARCHIVE_SIZE,
-                Zip64.MAX_ZIP_ENTRY_AND_ARCHIVE_SIZE, ZipEntry.STORED, 300);
-        Zip64.parseZip64ExtendedInfo(ze, true /*fromCentralDirectory */);
-        assertEquals(50, ze.getSize());
-        assertEquals(100, ze.getCompressedSize());
-    }
-
-    public void testInsertZip64ExtendedInfo() throws Exception {
-        ZipEntry ze = createZipEntry(null, Zip64.MAX_ZIP_ENTRY_AND_ARCHIVE_SIZE + 300,
-                Zip64.MAX_ZIP_ENTRY_AND_ARCHIVE_SIZE + 500, ZipEntry.STORED, 300);
-        Zip64.insertZip64ExtendedInfoToExtras(ze);
-
-        assertNotNull(ze.getExtra());
-        ByteBuffer buf = ByteBuffer.wrap(ze.getExtra());
-        buf.order(ByteOrder.LITTLE_ENDIAN);
-        assertEquals(0x0001, buf.getShort());
-        assertEquals(24, buf.getShort());
-        assertEquals(Zip64.MAX_ZIP_ENTRY_AND_ARCHIVE_SIZE + 300, buf.getLong());
-        assertEquals(Zip64.MAX_ZIP_ENTRY_AND_ARCHIVE_SIZE + 500, buf.getLong());
-    }
-
-    private static ZipEntry createZipEntry(byte[] extras, long size, long compressedSize,
-                                           int compressionMethod, long headerOffset) {
-        return new ZipEntry("name", "comment", 42 /* crc */, compressedSize, size,
-                compressionMethod, 42 /* time */, 42 /* modDate */, extras, headerOffset,
-                42 /* data offset */);
-    }
-}
diff --git a/luni/src/test/java/libcore/javax/security/auth/x500/GeneralNameTest.java b/luni/src/test/java/libcore/javax/security/auth/x500/GeneralNameTest.java
deleted file mode 100644
index aac5e84..0000000
--- a/luni/src/test/java/libcore/javax/security/auth/x500/GeneralNameTest.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package libcore.javax.security.auth.x500;
-
-import org.apache.harmony.security.x509.GeneralName;
-import junit.framework.TestCase;
-
-public final class GeneralNameTest extends TestCase {
-    // http://code.google.com/p/android/issues/detail?id=21311
-    public void testWildcardsInDnsName() throws Exception {
-        // examples of potential DNS wildcard locations from RFC 6125 section 7.2
-        new GeneralName(GeneralName.DNS_NAME, "*.example.com");
-        new GeneralName(GeneralName.DNS_NAME, "fo*.example.com");
-        new GeneralName(GeneralName.DNS_NAME, "f*o.example.com");
-        new GeneralName(GeneralName.DNS_NAME, "*oo.example.com");
-        new GeneralName(GeneralName.DNS_NAME, "www.*.example.com");
-        new GeneralName(GeneralName.DNS_NAME, "www.foo*.example.com");
-        new GeneralName(GeneralName.DNS_NAME, "*.co.uk");
-        new GeneralName(GeneralName.DNS_NAME, "*.com");
-        new GeneralName(GeneralName.DNS_NAME, "f*b*r.example.com");
-        new GeneralName(GeneralName.DNS_NAME, "*.*.example.com");
-    }
-}
diff --git a/luni/src/test/java/libcore/net/url/UrlUtilsTest.java b/luni/src/test/java/libcore/net/url/UrlUtilsTest.java
deleted file mode 100644
index c984e22..0000000
--- a/luni/src/test/java/libcore/net/url/UrlUtilsTest.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package libcore.net.url;
-
-import junit.framework.TestCase;
-
-public final class UrlUtilsTest extends TestCase {
-    public void testCanonicalizePath() {
-        assertEquals("", UrlUtils.canonicalizePath("", true));
-        assertEquals("", UrlUtils.canonicalizePath(".", true));
-        assertEquals("", UrlUtils.canonicalizePath("..", true));
-        assertEquals("...", UrlUtils.canonicalizePath("...", true));
-        assertEquals("", UrlUtils.canonicalizePath("./", true));
-        assertEquals("", UrlUtils.canonicalizePath("../", true));
-        assertEquals("a", UrlUtils.canonicalizePath("../a", true));
-        assertEquals("a", UrlUtils.canonicalizePath("a", true));
-        assertEquals("a/", UrlUtils.canonicalizePath("a/", true));
-        assertEquals("a/", UrlUtils.canonicalizePath("a/.", true));
-        assertEquals("a/b", UrlUtils.canonicalizePath("a/./b", true));
-        assertEquals("", UrlUtils.canonicalizePath("a/..", true));
-        assertEquals("b", UrlUtils.canonicalizePath("a/../b", true));
-        assertEquals("a/.../b", UrlUtils.canonicalizePath("a/.../b", true));
-        assertEquals("a/b", UrlUtils.canonicalizePath("a/b", true));
-        assertEquals("a/b/", UrlUtils.canonicalizePath("a/b/.", true));
-        assertEquals("a/b/", UrlUtils.canonicalizePath("a/b/./", true));
-        assertEquals("a/b/c", UrlUtils.canonicalizePath("a/b/./c", true));
-        assertEquals("a/", UrlUtils.canonicalizePath("a/b/..", true));
-        assertEquals("a/", UrlUtils.canonicalizePath("a/b/../", true));
-        assertEquals("a//", UrlUtils.canonicalizePath("a/b/..//", true));
-        assertEquals("a/c", UrlUtils.canonicalizePath("a/b/../c", true));
-        assertEquals("a//c", UrlUtils.canonicalizePath("a/b/..//c", true));
-        assertEquals("c", UrlUtils.canonicalizePath("a/b/../../c", true));
-        assertEquals("/", UrlUtils.canonicalizePath("/", true));
-        assertEquals("//", UrlUtils.canonicalizePath("//", true));
-        assertEquals("/", UrlUtils.canonicalizePath("/.", true));
-        assertEquals("/", UrlUtils.canonicalizePath("/./", true));
-        assertEquals("", UrlUtils.canonicalizePath("/..", true));
-        assertEquals("c", UrlUtils.canonicalizePath("/../c", true));
-        assertEquals("/a/b/c", UrlUtils.canonicalizePath("/a/b/c", true));
-    }
-
-    public void testGetProtocolPrefix() {
-        assertEquals("http", UrlUtils.getSchemePrefix("http:"));
-        assertEquals("http", UrlUtils.getSchemePrefix("HTTP:"));
-        assertEquals("http", UrlUtils.getSchemePrefix("http:x"));
-        assertEquals("a", UrlUtils.getSchemePrefix("a:"));
-        assertEquals("z", UrlUtils.getSchemePrefix("z:"));
-        assertEquals("a", UrlUtils.getSchemePrefix("A:"));
-        assertEquals("z", UrlUtils.getSchemePrefix("Z:"));
-        assertEquals("h0", UrlUtils.getSchemePrefix("h0:"));
-        assertEquals("h5", UrlUtils.getSchemePrefix("h5:"));
-        assertEquals("h9", UrlUtils.getSchemePrefix("h9:"));
-        assertEquals("h+", UrlUtils.getSchemePrefix("h+:"));
-        assertEquals("h-", UrlUtils.getSchemePrefix("h-:"));
-        assertEquals("h.", UrlUtils.getSchemePrefix("h.:"));
-    }
-
-    public void testGetProtocolPrefixInvalidScheme() {
-        assertNull(UrlUtils.getSchemePrefix(""));
-        assertNull(UrlUtils.getSchemePrefix("http"));
-        assertNull(UrlUtils.getSchemePrefix(":"));
-        assertNull(UrlUtils.getSchemePrefix("+:"));
-        assertNull(UrlUtils.getSchemePrefix("-:"));
-        assertNull(UrlUtils.getSchemePrefix(".:"));
-        assertNull(UrlUtils.getSchemePrefix("0:"));
-        assertNull(UrlUtils.getSchemePrefix("5:"));
-        assertNull(UrlUtils.getSchemePrefix("9:"));
-        assertNull(UrlUtils.getSchemePrefix("http//"));
-        assertNull(UrlUtils.getSchemePrefix("http/:"));
-        assertNull(UrlUtils.getSchemePrefix("ht tp://"));
-        assertNull(UrlUtils.getSchemePrefix(" http://"));
-        assertNull(UrlUtils.getSchemePrefix("http ://"));
-        assertNull(UrlUtils.getSchemePrefix(":://"));
-    }
-}
diff --git a/luni/src/test/java/org/apache/harmony/security/tests/AlgNameMapperTest.java b/luni/src/test/java/org/apache/harmony/security/tests/AlgNameMapperTest.java
deleted file mode 100644
index 943eb43..0000000
--- a/luni/src/test/java/org/apache/harmony/security/tests/AlgNameMapperTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.harmony.security.tests;
-
-import org.apache.harmony.security.utils.AlgNameMapper;
-
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-import java.util.Locale;
-
-import junit.framework.TestCase;
-
-public class AlgNameMapperTest extends TestCase {
-    private final String[][] HARDCODED_ALIASES = {
-            {"1.2.840.10040.4.1",       "DSA"},
-            {"1.2.840.10040.4.3",       "SHA1withDSA"},
-            {"1.2.840.113549.1.1.1",    "RSA"},
-            {"1.2.840.113549.1.1.4",    "MD5withRSA"},
-            {"1.2.840.113549.1.1.5",    "SHA1withRSA"},
-            {"1.2.840.113549.1.3.1",    "DiffieHellman"},
-            {"1.2.840.113549.1.5.3",    "pbeWithMD5AndDES-CBC"},
-            {"1.2.840.113549.1.12.1.3", "pbeWithSHAAnd3-KeyTripleDES-CBC"},
-            {"1.2.840.113549.1.12.1.6", "pbeWithSHAAnd40BitRC2-CBC"},
-            {"1.2.840.113549.3.2",      "RC2-CBC"},
-            {"1.2.840.113549.3.3",      "RC2-EBC"},
-            {"1.2.840.113549.3.4",      "RC4"},
-            {"1.2.840.113549.3.5",      "RC4WithMAC"},
-            {"1.2.840.113549.3.6",      "DESx-CBC"},
-            {"1.2.840.113549.3.7",      "TripleDES-CBC"},
-            {"1.2.840.113549.3.8",      "rc5CBC"},
-            {"1.2.840.113549.3.9",      "RC5-CBC"},
-            {"1.2.840.113549.3.10",     "DESCDMF"},
-            {"2.23.42.9.11.4.1",        "ECDSA"},
-    };
-
-    public void testHardcodedAliases() throws Exception {
-        final ByteArrayOutputStream errBuffer = new ByteArrayOutputStream();
-        PrintStream out = new PrintStream(errBuffer);
-
-        for (int i = 0; i < HARDCODED_ALIASES.length; i++) {
-            try {
-                assertEquals(HARDCODED_ALIASES[i][1].toUpperCase(Locale.US),
-                        AlgNameMapper.map2AlgName(HARDCODED_ALIASES[i][0]).toUpperCase(Locale.US));
-
-                assertEquals(HARDCODED_ALIASES[i][0],
-                        AlgNameMapper.map2OID(HARDCODED_ALIASES[i][1]));
-
-                assertEquals(HARDCODED_ALIASES[i][1].toUpperCase(Locale.US),
-                        AlgNameMapper.getStandardName(HARDCODED_ALIASES[i][1]
-                                .toUpperCase(Locale.US)).toUpperCase(Locale.US));
-
-                assertTrue(AlgNameMapper.isOID(HARDCODED_ALIASES[i][0]));
-            } catch (Throwable e) {
-                out.append("Error encountered checking " + HARDCODED_ALIASES[i][1] + "\n");
-                e.printStackTrace(out);
-            }
-        }
-
-        out.flush();
-        if (errBuffer.size() > 0) {
-            throw new Exception("Errors encountered:\n\n" + errBuffer.toString() + "\n\n");
-        }
-    }
-
-    private final String[][] NON_HARDCODED_ALIASES = {
-            {"2.16.840.1.101.3.4.2.3", "SHA512"}, // This isn't currently hardcoded in AlgNameMapper
-            {"1.2.840.10045.3.1.7", "prime256v1"}, // No provider provides EC curves
-    };
-
-    public void testNon_Hardcoded_Aliases_Exist() throws Exception {
-        final ByteArrayOutputStream errBuffer = new ByteArrayOutputStream();
-        PrintStream out = new PrintStream(errBuffer);
-
-        for (int i = 0; i < NON_HARDCODED_ALIASES.length; i++) {
-            try {
-                String algName = AlgNameMapper.map2AlgName(NON_HARDCODED_ALIASES[i][0]);
-                assertNotNull(algName);
-                assertEquals(NON_HARDCODED_ALIASES[i][1].toUpperCase(Locale.US),
-                        algName.toUpperCase(Locale.US));
-
-                String oid = AlgNameMapper.map2OID(algName);
-                assertNotNull(oid);
-                assertEquals(NON_HARDCODED_ALIASES[i][0], oid);
-            } catch (Throwable e) {
-                out.append("Error encountered checking " + HARDCODED_ALIASES[i][1] + "\n");
-                e.printStackTrace(out);
-            }
-        }
-
-        out.flush();
-        if (errBuffer.size() > 0) {
-            throw new Exception("Errors encountered:\n\n" + errBuffer.toString() + "\n\n");
-        }
-    }
-}
diff --git a/luni/src/test/java/org/apache/harmony/security/tests/x509/SubjectPublicKeyInfoTest.java b/luni/src/test/java/org/apache/harmony/security/tests/x509/SubjectPublicKeyInfoTest.java
deleted file mode 100644
index ade1069..0000000
--- a/luni/src/test/java/org/apache/harmony/security/tests/x509/SubjectPublicKeyInfoTest.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.harmony.security.tests.x509;
-
-import org.apache.harmony.security.asn1.ASN1Integer;
-import org.apache.harmony.security.asn1.ASN1Sequence;
-import org.apache.harmony.security.asn1.ASN1Type;
-import org.apache.harmony.security.x509.AlgorithmIdentifier;
-import org.apache.harmony.security.x509.SubjectPublicKeyInfo;
-import org.apache.harmony.security.x509.X509PublicKey;
-
-import java.nio.charset.Charset;
-import java.security.InvalidKeyException;
-import java.security.Key;
-import java.security.KeyFactorySpi;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.PrivateKey;
-import java.security.Provider;
-import java.security.PublicKey;
-import java.security.Security;
-import java.security.interfaces.RSAPublicKey;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.KeySpec;
-import java.security.spec.X509EncodedKeySpec;
-import java.util.Arrays;
-
-import junit.framework.TestCase;
-
-public class SubjectPublicKeyInfoTest extends TestCase {
-    private static final byte[] ENCODED_BROKEN = "BROKEN!".getBytes(Charset.forName("ASCII"));
-
-    public void test_getPublicKey_WellKnownOid() throws Exception {
-        KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
-        KeyPair pair = kpg.generateKeyPair();
-
-        final RSAPublicKey rsaPubKey = (RSAPublicKey) pair.getPublic();
-
-        /* Do some fancy footwork to get an ASN.1 SubjectPublicKey for RSA */
-        final ASN1Sequence rsaPubKeyInfo = new ASN1Sequence(new ASN1Type[] {
-                ASN1Integer.getInstance(), ASN1Integer.getInstance(),
-        }) {
-            @Override
-            protected void getValues(Object object, Object[] values) {
-                values[0] = rsaPubKey.getModulus().toByteArray();
-                values[1] = rsaPubKey.getPublicExponent().toByteArray();
-            }
-        };
-
-        /* The algorithm ID for RSA encryption */
-        AlgorithmIdentifier algid = new AlgorithmIdentifier("1.2.840.113549.1.1.1");
-
-        SubjectPublicKeyInfo spki = new SubjectPublicKeyInfo(algid, rsaPubKeyInfo.encode(null));
-
-        PublicKey pubKey = spki.getPublicKey();
-        assertNotNull(pubKey);
-        assertTrue(pubKey instanceof RSAPublicKey);
-    }
-
-    public void test_getPublicKey_Unknown_OID() throws Exception {
-        AlgorithmIdentifier algid = new AlgorithmIdentifier("1.30.9999999999.8734878");
-        SubjectPublicKeyInfo spki = new SubjectPublicKeyInfo(algid, ENCODED_BROKEN);
-        PublicKey pubKey = spki.getPublicKey();
-        assertNotNull(pubKey);
-        assertEquals(X509PublicKey.class, pubKey.getClass());
-    }
-
-    private static final String MY_TEST_KEY_OID = "1.30.987654321.1.1.1.2.2.2";
-
-    public void test_getPublicKey_NameKnownButOnlyOIDFactoryRegistered() throws Exception {
-        Security.addProvider(new MyTestProvider());
-        try {
-            AlgorithmIdentifier algid = new AlgorithmIdentifier(MY_TEST_KEY_OID, "UnknownKey");
-            SubjectPublicKeyInfo spki = new SubjectPublicKeyInfo(algid, ENCODED_BROKEN);
-            PublicKey pubKey = spki.getPublicKey();
-            assertNotNull(pubKey);
-            assertEquals(MyTestPublicKey.class, pubKey.getClass());
-            byte[] encoded = pubKey.getEncoded();
-            assertEquals(
-                    Arrays.toString(ENCODED_BROKEN),
-                    Arrays.toString(Arrays.copyOfRange(encoded, encoded.length
-                            - ENCODED_BROKEN.length, encoded.length)));
-        } finally {
-            Security.removeProvider(MyTestProvider.NAME);
-        }
-    }
-
-    public static class MyTestProvider extends Provider {
-        public static final String NAME = "MyTestProvider";
-
-        protected MyTestProvider() {
-            super(NAME, 1.0, "MyTestProvider");
-
-            put("KeyFactory." + MY_TEST_KEY_OID, MyTestKeyFactory.class.getName());
-        }
-    }
-
-    public static class MyTestKeyFactory extends KeyFactorySpi {
-        @Override
-        protected PublicKey engineGeneratePublic(KeySpec keySpec) throws InvalidKeySpecException {
-            if (!(keySpec instanceof X509EncodedKeySpec)) {
-                throw new InvalidKeySpecException("Only X509EncodedKeySpec supported");
-            }
-
-            X509EncodedKeySpec x509ks = (X509EncodedKeySpec) keySpec;
-            return new MyTestPublicKey(x509ks.getEncoded());
-        }
-
-        @Override
-        protected PrivateKey engineGeneratePrivate(KeySpec keySpec) throws InvalidKeySpecException {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        protected <T extends KeySpec> T engineGetKeySpec(Key key, Class<T> keySpec)
-                throws InvalidKeySpecException {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        protected Key engineTranslateKey(Key key) throws InvalidKeyException {
-            throw new UnsupportedOperationException();
-        }
-    }
-
-    public static class MyTestPublicKey implements PublicKey {
-        private final byte[] data;
-
-        public MyTestPublicKey(byte[] data) {
-            this.data = data;
-        }
-
-        @Override
-        public String getAlgorithm() {
-            return "MyTestPublicKey";
-        }
-
-        @Override
-        public String getFormat() {
-            return null;
-        }
-
-        @Override
-        public byte[] getEncoded() {
-            return data;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/AppletInitializer.java b/ojluni/src/main/java/java/beans/AppletInitializer.java
deleted file mode 100755
index 9e4b723..0000000
--- a/ojluni/src/main/java/java/beans/AppletInitializer.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package java.beans;
-
-import java.applet.Applet;
-
-import java.beans.beancontext.BeanContext;
-
-/**
- * <p>
- * This interface is designed to work in collusion with java.beans.Beans.instantiate.
- * The interafce is intended to provide mechanism to allow the proper
- * initialization of JavaBeans that are also Applets, during their
- * instantiation by java.beans.Beans.instantiate().
- * </p>
- *
- * @see java.beans.Beans#instantiate
- *
- * @since 1.2
- *
- */
-
-
-public interface AppletInitializer {
-
-    /**
-     * <p>
-     * If passed to the appropriate variant of java.beans.Beans.instantiate
-     * this method will be called in order to associate the newly instantiated
-     * Applet (JavaBean) with its AppletContext, AppletStub, and Container.
-     * </p>
-     * <p>
-     * Conformant implementations shall:
-     * <ol>
-     * <li> Associate the newly instantiated Applet with the appropriate
-     * AppletContext.
-     *
-     * <li> Instantiate an AppletStub() and associate that AppletStub with
-     * the Applet via an invocation of setStub().
-     *
-     * <li> If BeanContext parameter is null, then it shall associate the
-     * Applet with its appropriate Container by adding that Applet to its
-     * Container via an invocation of add(). If the BeanContext parameter is
-     * non-null, then it is the responsibility of the BeanContext to associate
-     * the Applet with its Container during the subsequent invocation of its
-     * addChildren() method.
-     * </ol>
-     * </p>
-     *
-     * @param newAppletBean  The newly instantiated JavaBean
-     * @param bCtxt          The BeanContext intended for this Applet, or
-     *                       null.
-     */
-
-    void initialize(Applet newAppletBean, BeanContext bCtxt);
-
-    /**
-     * <p>
-     * Activate, and/or mark Applet active. Implementors of this interface
-     * shall mark this Applet as active, and optionally invoke its start()
-     * method.
-     * </p>
-     *
-     * @param newApplet  The newly instantiated JavaBean
-     */
-
-    void activate(Applet newApplet);
-}
diff --git a/ojluni/src/main/java/java/beans/BeanDescriptor.java b/ojluni/src/main/java/java/beans/BeanDescriptor.java
deleted file mode 100755
index 08d5b70..0000000
--- a/ojluni/src/main/java/java/beans/BeanDescriptor.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, 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.
- */
-
-package java.beans;
-
-import java.lang.ref.Reference;
-
-/**
- * A BeanDescriptor provides global information about a "bean",
- * including its Java class, its displayName, etc.
- * <p>
- * This is one of the kinds of descriptor returned by a BeanInfo object,
- * which also returns descriptors for properties, method, and events.
- */
-
-public class BeanDescriptor extends FeatureDescriptor {
-
-    private Reference<Class> beanClassRef;
-    private Reference<Class> customizerClassRef;
-
-    /**
-     * Create a BeanDescriptor for a bean that doesn't have a customizer.
-     *
-     * @param beanClass  The Class object of the Java class that implements
-     *          the bean.  For example sun.beans.OurButton.class.
-     */
-    public BeanDescriptor(Class<?> beanClass) {
-        this(beanClass, null);
-    }
-
-    /**
-     * Create a BeanDescriptor for a bean that has a customizer.
-     *
-     * @param beanClass  The Class object of the Java class that implements
-     *          the bean.  For example sun.beans.OurButton.class.
-     * @param customizerClass  The Class object of the Java class that implements
-     *          the bean's Customizer.  For example sun.beans.OurButtonCustomizer.class.
-     */
-    public BeanDescriptor(Class<?> beanClass, Class<?> customizerClass) {
-        this.beanClassRef = getWeakReference((Class)beanClass);
-        this.customizerClassRef = getWeakReference((Class)customizerClass);
-
-        String name = beanClass.getName();
-        while (name.indexOf('.') >= 0) {
-            name = name.substring(name.indexOf('.')+1);
-        }
-        setName(name);
-    }
-
-    /**
-     * Gets the bean's Class object.
-     *
-     * @return The Class object for the bean.
-     */
-    public Class<?> getBeanClass() {
-        return (this.beanClassRef != null)
-                ? this.beanClassRef.get()
-                : null;
-    }
-
-    /**
-     * Gets the Class object for the bean's customizer.
-     *
-     * @return The Class object for the bean's customizer.  This may
-     * be null if the bean doesn't have a customizer.
-     */
-    public Class<?> getCustomizerClass() {
-        return (this.customizerClassRef != null)
-                ? this.customizerClassRef.get()
-                : null;
-    }
-
-    /*
-     * Package-private dup constructor
-     * This must isolate the new object from any changes to the old object.
-     */
-    BeanDescriptor(BeanDescriptor old) {
-        super(old);
-        beanClassRef = old.beanClassRef;
-        customizerClassRef = old.customizerClassRef;
-    }
-
-    void appendTo(StringBuilder sb) {
-        appendTo(sb, "beanClass", this.beanClassRef);
-        appendTo(sb, "customizerClass", this.customizerClassRef);
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/BeanInfo.java b/ojluni/src/main/java/java/beans/BeanInfo.java
deleted file mode 100755
index e584264..0000000
--- a/ojluni/src/main/java/java/beans/BeanInfo.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-package java.beans;
-
-/**
- * A bean implementor who wishes to provide explicit information about
- * their bean may provide a BeanInfo class that implements this BeanInfo
- * interface and provides explicit information about the methods,
- * properties, events, etc, of their  bean.
- * <p>
- * A bean implementor doesn't need to provide a complete set of
- * explicit information.  You can pick and choose which information
- * you want to provide and the rest will be obtained by automatic
- * analysis using low-level reflection of the bean classes' methods
- * and applying standard design patterns.
- * <p>
- * You get the opportunity to provide lots and lots of different
- * information as part of the various XyZDescriptor classes.  But
- * don't panic, you only really need to provide the minimal core
- * information required by the various constructors.
- * <P>
- * See also the SimpleBeanInfo class which provides a convenient
- * "noop" base class for BeanInfo classes, which you can override
- * for those specific places where you want to return explicit info.
- * <P>
- * To learn about all the behaviour of a bean see the Introspector class.
- */
-
-public interface BeanInfo {
-
-    /**
-     * Gets the beans <code>BeanDescriptor</code>.
-     *
-     * @return  A BeanDescriptor providing overall information about
-     * the bean, such as its displayName, its customizer, etc.  May
-     * return null if the information should be obtained by automatic
-     * analysis.
-     */
-    BeanDescriptor getBeanDescriptor();
-
-    /**
-     * Gets the beans <code>EventSetDescriptor</code>s.
-     *
-     * @return  An array of EventSetDescriptors describing the kinds of
-     * events fired by this bean.  May return null if the information
-     * should be obtained by automatic analysis.
-     */
-    EventSetDescriptor[] getEventSetDescriptors();
-
-    /**
-     * A bean may have a "default" event that is the event that will
-     * mostly commonly be used by humans when using the bean.
-     * @return Index of default event in the EventSetDescriptor array
-     *          returned by getEventSetDescriptors.
-     * <P>      Returns -1 if there is no default event.
-     */
-    int getDefaultEventIndex();
-
-    /**
-     * Returns descriptors for all properties of the bean.
-     * May return {@code null} if the information
-     * should be obtained by automatic analysis.
-     * <p>
-     * If a property is indexed, then its entry in the result array
-     * will belong to the {@link IndexedPropertyDescriptor} subclass
-     * of the {@link PropertyDescriptor} class.
-     * A client of the {@code getPropertyDescriptors} method
-     * can use "{@code instanceof}" to check
-     * whether a given {@code PropertyDescriptor}
-     * is an {@code IndexedPropertyDescriptor}.
-     *
-     * @return an array of {@code PropertyDescriptor}s
-     *         describing all properties supported by the bean
-     *         or {@code null}
-     */
-    PropertyDescriptor[] getPropertyDescriptors();
-
-    /**
-     * A bean may have a "default" property that is the property that will
-     * mostly commonly be initially chosen for update by human's who are
-     * customizing the bean.
-     * @return  Index of default property in the PropertyDescriptor array
-     *          returned by getPropertyDescriptors.
-     * <P>      Returns -1 if there is no default property.
-     */
-    int getDefaultPropertyIndex();
-
-    /**
-     * Gets the beans <code>MethodDescriptor</code>s.
-     *
-     * @return An array of MethodDescriptors describing the externally
-     * visible methods supported by this bean.  May return null if
-     * the information should be obtained by automatic analysis.
-     */
-    MethodDescriptor[] getMethodDescriptors();
-
-    /**
-     * This method allows a BeanInfo object to return an arbitrary collection
-     * of other BeanInfo objects that provide additional information on the
-     * current bean.
-     * <P>
-     * If there are conflicts or overlaps between the information provided
-     * by different BeanInfo objects, then the current BeanInfo takes precedence
-     * over the getAdditionalBeanInfo objects, and later elements in the array
-     * take precedence over earlier ones.
-     *
-     * @return an array of BeanInfo objects.  May return null.
-     */
-    BeanInfo[] getAdditionalBeanInfo();
-
-    /**
-     * This method returns an image object that can be used to
-     * represent the bean in toolboxes, toolbars, etc.   Icon images
-     * will typically be GIFs, but may in future include other formats.
-     * <p>
-     * Beans aren't required to provide icons and may return null from
-     * this method.
-     * <p>
-     * There are four possible flavors of icons (16x16 color,
-     * 32x32 color, 16x16 mono, 32x32 mono).  If a bean choses to only
-     * support a single icon we recommend supporting 16x16 color.
-     * <p>
-     * We recommend that icons have a "transparent" background
-     * so they can be rendered onto an existing background.
-     *
-     * @param  iconKind  The kind of icon requested.  This should be
-     *    one of the constant values ICON_COLOR_16x16, ICON_COLOR_32x32,
-     *    ICON_MONO_16x16, or ICON_MONO_32x32.
-     * @return  An image object representing the requested icon.  May
-     *    return null if no suitable icon is available.
-     */
-    java.awt.Image getIcon(int iconKind);
-
-    /**
-     * Constant to indicate a 16 x 16 color icon.
-     */
-    final static int ICON_COLOR_16x16 = 1;
-
-    /**
-     * Constant to indicate a 32 x 32 color icon.
-     */
-    final static int ICON_COLOR_32x32 = 2;
-
-    /**
-     * Constant to indicate a 16 x 16 monochrome icon.
-     */
-    final static int ICON_MONO_16x16 = 3;
-
-    /**
-     * Constant to indicate a 32 x 32 monochrome icon.
-     */
-    final static int ICON_MONO_32x32 = 4;
-}
diff --git a/ojluni/src/main/java/java/beans/Beans.java b/ojluni/src/main/java/java/beans/Beans.java
deleted file mode 100755
index 03f0dc8..0000000
--- a/ojluni/src/main/java/java/beans/Beans.java
+++ /dev/null
@@ -1,630 +0,0 @@
-/*
- * Copyright (c) 1996, 2009, 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.
- */
-
-package java.beans;
-
-import com.sun.beans.finder.ClassFinder;
-
-import java.applet.Applet;
-import java.applet.AppletContext;
-import java.applet.AppletStub;
-import java.applet.AudioClip;
-
-import java.awt.Image;
-
-import java.beans.beancontext.BeanContext;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectStreamClass;
-import java.io.StreamCorruptedException;
-
-import java.net.URL;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Vector;
-
-/**
- * This class provides some general purpose beans control methods.
- */
-
-public class Beans {
-
-    /**
-     * <p>
-     * Instantiate a JavaBean.
-     * </p>
-     *
-     * @param     cls         the class-loader from which we should create
-     *                        the bean.  If this is null, then the system
-     *                        class-loader is used.
-     * @param     beanName    the name of the bean within the class-loader.
-     *                        For example "sun.beanbox.foobah"
-     *
-     * @exception ClassNotFoundException if the class of a serialized
-     *              object could not be found.
-     * @exception IOException if an I/O error occurs.
-     */
-
-    public static Object instantiate(ClassLoader cls, String beanName) throws IOException, ClassNotFoundException {
-        return Beans.instantiate(cls, beanName, null, null);
-    }
-
-    /**
-     * <p>
-     * Instantiate a JavaBean.
-     * </p>
-     *
-     * @param     cls         the class-loader from which we should create
-     *                        the bean.  If this is null, then the system
-     *                        class-loader is used.
-     * @param     beanName    the name of the bean within the class-loader.
-     *                        For example "sun.beanbox.foobah"
-     * @param     beanContext The BeanContext in which to nest the new bean
-     *
-     * @exception ClassNotFoundException if the class of a serialized
-     *              object could not be found.
-     * @exception IOException if an I/O error occurs.
-     */
-
-    public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext) throws IOException, ClassNotFoundException {
-        return Beans.instantiate(cls, beanName, beanContext, null);
-    }
-
-    /**
-     * Instantiate a bean.
-     * <p>
-     * The bean is created based on a name relative to a class-loader.
-     * This name should be a dot-separated name such as "a.b.c".
-     * <p>
-     * In Beans 1.0 the given name can indicate either a serialized object
-     * or a class.  Other mechanisms may be added in the future.  In
-     * beans 1.0 we first try to treat the beanName as a serialized object
-     * name then as a class name.
-     * <p>
-     * When using the beanName as a serialized object name we convert the
-     * given beanName to a resource pathname and add a trailing ".ser" suffix.
-     * We then try to load a serialized object from that resource.
-     * <p>
-     * For example, given a beanName of "x.y", Beans.instantiate would first
-     * try to read a serialized object from the resource "x/y.ser" and if
-     * that failed it would try to load the class "x.y" and create an
-     * instance of that class.
-     * <p>
-     * If the bean is a subtype of java.applet.Applet, then it is given
-     * some special initialization.  First, it is supplied with a default
-     * AppletStub and AppletContext.  Second, if it was instantiated from
-     * a classname the applet's "init" method is called.  (If the bean was
-     * deserialized this step is skipped.)
-     * <p>
-     * Note that for beans which are applets, it is the caller's responsiblity
-     * to call "start" on the applet.  For correct behaviour, this should be done
-     * after the applet has been added into a visible AWT container.
-     * <p>
-     * Note that applets created via beans.instantiate run in a slightly
-     * different environment than applets running inside browsers.  In
-     * particular, bean applets have no access to "parameters", so they may
-     * wish to provide property get/set methods to set parameter values.  We
-     * advise bean-applet developers to test their bean-applets against both
-     * the JDK appletviewer (for a reference browser environment) and the
-     * BDK BeanBox (for a reference bean container).
-     *
-     * @param     cls         the class-loader from which we should create
-     *                        the bean.  If this is null, then the system
-     *                        class-loader is used.
-     * @param     beanName    the name of the bean within the class-loader.
-     *                        For example "sun.beanbox.foobah"
-     * @param     beanContext The BeanContext in which to nest the new bean
-     * @param     initializer The AppletInitializer for the new bean
-     *
-     * @exception ClassNotFoundException if the class of a serialized
-     *              object could not be found.
-     * @exception IOException if an I/O error occurs.
-     */
-
-    public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext, AppletInitializer initializer)
-                        throws IOException, ClassNotFoundException {
-
-        InputStream ins;
-        ObjectInputStream oins = null;
-        Object result = null;
-        boolean serialized = false;
-        IOException serex = null;
-
-        // If the given classloader is null, we check if an
-        // system classloader is available and (if so)
-        // use that instead.
-        // Note that calls on the system class loader will
-        // look in the bootstrap class loader first.
-        if (cls == null) {
-            try {
-                cls = ClassLoader.getSystemClassLoader();
-            } catch (SecurityException ex) {
-                // We're not allowed to access the system class loader.
-                // Drop through.
-            }
-        }
-
-        // Try to find a serialized object with this name
-        final String serName = beanName.replace('.','/').concat(".ser");
-        final ClassLoader loader = cls;
-        ins = (InputStream)AccessController.doPrivileged
-            (new PrivilegedAction() {
-                public Object run() {
-                    if (loader == null)
-                        return ClassLoader.getSystemResourceAsStream(serName);
-                    else
-                        return loader.getResourceAsStream(serName);
-                }
-        });
-        if (ins != null) {
-            try {
-                if (cls == null) {
-                    oins = new ObjectInputStream(ins);
-                } else {
-                    oins = new ObjectInputStreamWithLoader(ins, cls);
-                }
-                result = oins.readObject();
-                serialized = true;
-                oins.close();
-            } catch (IOException ex) {
-                ins.close();
-                // Drop through and try opening the class.  But remember
-                // the exception in case we can't find the class either.
-                serex = ex;
-            } catch (ClassNotFoundException ex) {
-                ins.close();
-                throw ex;
-            }
-        }
-
-        if (result == null) {
-            // No serialized object, try just instantiating the class
-            Class cl;
-
-            try {
-                cl = ClassFinder.findClass(beanName, cls);
-            } catch (ClassNotFoundException ex) {
-                // There is no appropriate class.  If we earlier tried to
-                // deserialize an object and got an IO exception, throw that,
-                // otherwise rethrow the ClassNotFoundException.
-                if (serex != null) {
-                    throw serex;
-                }
-                throw ex;
-            }
-
-            /*
-             * Try to instantiate the class.
-             */
-
-            try {
-                result = cl.newInstance();
-            } catch (Exception ex) {
-                // We have to remap the exception to one in our signature.
-                // But we pass extra information in the detail message.
-                throw new ClassNotFoundException("" + cl + " : " + ex, ex);
-            }
-        }
-
-        if (result != null) {
-
-            // Ok, if the result is an applet initialize it.
-
-            AppletStub stub = null;
-
-            if (result instanceof Applet) {
-                Applet  applet      = (Applet) result;
-                boolean needDummies = initializer == null;
-
-                if (needDummies) {
-
-                    // Figure our the codebase and docbase URLs.  We do this
-                    // by locating the URL for a known resource, and then
-                    // massaging the URL.
-
-                    // First find the "resource name" corresponding to the bean
-                    // itself.  So a serialzied bean "a.b.c" would imply a
-                    // resource name of "a/b/c.ser" and a classname of "x.y"
-                    // would imply a resource name of "x/y.class".
-
-                    final String resourceName;
-
-                    if (serialized) {
-                        // Serialized bean
-                        resourceName = beanName.replace('.','/').concat(".ser");
-                    } else {
-                        // Regular class
-                        resourceName = beanName.replace('.','/').concat(".class");
-                    }
-
-                    URL objectUrl = null;
-                    URL codeBase  = null;
-                    URL docBase   = null;
-
-                    // Now get the URL correponding to the resource name.
-
-                    final ClassLoader cloader = cls;
-                    objectUrl = (URL)
-                        AccessController.doPrivileged
-                        (new PrivilegedAction() {
-                            public Object run() {
-                                if (cloader == null)
-                                    return ClassLoader.getSystemResource
-                                                                (resourceName);
-                                else
-                                    return cloader.getResource(resourceName);
-                            }
-                    });
-
-                    // If we found a URL, we try to locate the docbase by taking
-                    // of the final path name component, and the code base by taking
-                    // of the complete resourceName.
-                    // So if we had a resourceName of "a/b/c.class" and we got an
-                    // objectURL of "file://bert/classes/a/b/c.class" then we would
-                    // want to set the codebase to "file://bert/classes/" and the
-                    // docbase to "file://bert/classes/a/b/"
-
-                    if (objectUrl != null) {
-                        String s = objectUrl.toExternalForm();
-
-                        if (s.endsWith(resourceName)) {
-                            int ix   = s.length() - resourceName.length();
-                            codeBase = new URL(s.substring(0,ix));
-                            docBase  = codeBase;
-
-                            ix = s.lastIndexOf('/');
-
-                            if (ix >= 0) {
-                                docBase = new URL(s.substring(0,ix+1));
-                            }
-                        }
-                    }
-
-                    // Setup a default context and stub.
-                    BeansAppletContext context = new BeansAppletContext(applet);
-
-                    stub = (AppletStub)new BeansAppletStub(applet, context, codeBase, docBase);
-                    applet.setStub(stub);
-                } else {
-                    initializer.initialize(applet, beanContext);
-                }
-
-                // now, if there is a BeanContext, add the bean, if applicable.
-
-                if (beanContext != null) {
-                    beanContext.add(result);
-                }
-
-                // If it was deserialized then it was already init-ed.
-                // Otherwise we need to initialize it.
-
-                if (!serialized) {
-                    // We need to set a reasonable initial size, as many
-                    // applets are unhappy if they are started without
-                    // having been explicitly sized.
-                    applet.setSize(100,100);
-                    applet.init();
-                }
-
-                if (needDummies) {
-                  ((BeansAppletStub)stub).active = true;
-                } else initializer.activate(applet);
-
-            } else if (beanContext != null) beanContext.add(result);
-        }
-
-        return result;
-    }
-
-
-    /**
-     * From a given bean, obtain an object representing a specified
-     * type view of that source object.
-     * <p>
-     * The result may be the same object or a different object.  If
-     * the requested target view isn't available then the given
-     * bean is returned.
-     * <p>
-     * This method is provided in Beans 1.0 as a hook to allow the
-     * addition of more flexible bean behaviour in the future.
-     *
-     * @param bean        Object from which we want to obtain a view.
-     * @param targetType  The type of view we'd like to get.
-     *
-     */
-    public static Object getInstanceOf(Object bean, Class<?> targetType) {
-        return bean;
-    }
-
-    /**
-     * Check if a bean can be viewed as a given target type.
-     * The result will be true if the Beans.getInstanceof method
-     * can be used on the given bean to obtain an object that
-     * represents the specified targetType type view.
-     *
-     * @param bean  Bean from which we want to obtain a view.
-     * @param targetType  The type of view we'd like to get.
-     * @return "true" if the given bean supports the given targetType.
-     *
-     */
-    public static boolean isInstanceOf(Object bean, Class<?> targetType) {
-        return Introspector.isSubclass(bean.getClass(), targetType);
-    }
-
-
-    /**
-     * Test if we are in design-mode.
-     *
-     * @return  True if we are running in an application construction
-     *          environment.
-     *
-     * @see DesignMode
-     */
-    public static boolean isDesignTime() {
-        return ThreadGroupContext.getContext().isDesignTime();
-    }
-
-    /**
-     * Determines whether beans can assume a GUI is available.
-     *
-     * @return  True if we are running in an environment where beans
-     *     can assume that an interactive GUI is available, so they
-     *     can pop up dialog boxes, etc.  This will normally return
-     *     true in a windowing environment, and will normally return
-     *     false in a server environment or if an application is
-     *     running as part of a batch job.
-     *
-     * @see Visibility
-     *
-     */
-    public static boolean isGuiAvailable() {
-        return ThreadGroupContext.getContext().isGuiAvailable();
-    }
-
-    /**
-     * Used to indicate whether of not we are running in an application
-     * builder environment.
-     *
-     * <p>Note that this method is security checked
-     * and is not available to (for example) untrusted applets.
-     * More specifically, if there is a security manager,
-     * its <code>checkPropertiesAccess</code>
-     * method is called. This could result in a SecurityException.
-     *
-     * @param isDesignTime  True if we're in an application builder tool.
-     * @exception  SecurityException  if a security manager exists and its
-     *             <code>checkPropertiesAccess</code> method doesn't allow setting
-     *              of system properties.
-     * @see SecurityManager#checkPropertiesAccess
-     */
-
-    public static void setDesignTime(boolean isDesignTime)
-                        throws SecurityException {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            sm.checkPropertiesAccess();
-        }
-        ThreadGroupContext.getContext().setDesignTime(isDesignTime);
-    }
-
-    /**
-     * Used to indicate whether of not we are running in an environment
-     * where GUI interaction is available.
-     *
-     * <p>Note that this method is security checked
-     * and is not available to (for example) untrusted applets.
-     * More specifically, if there is a security manager,
-     * its <code>checkPropertiesAccess</code>
-     * method is called. This could result in a SecurityException.
-     *
-     * @param isGuiAvailable  True if GUI interaction is available.
-     * @exception  SecurityException  if a security manager exists and its
-     *             <code>checkPropertiesAccess</code> method doesn't allow setting
-     *              of system properties.
-     * @see SecurityManager#checkPropertiesAccess
-     */
-
-    public static void setGuiAvailable(boolean isGuiAvailable)
-                        throws SecurityException {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            sm.checkPropertiesAccess();
-        }
-        ThreadGroupContext.getContext().setGuiAvailable(isGuiAvailable);
-    }
-}
-
-/**
- * This subclass of ObjectInputStream delegates loading of classes to
- * an existing ClassLoader.
- */
-
-class ObjectInputStreamWithLoader extends ObjectInputStream
-{
-    private ClassLoader loader;
-
-    /**
-     * Loader must be non-null;
-     */
-
-    public ObjectInputStreamWithLoader(InputStream in, ClassLoader loader)
-            throws IOException, StreamCorruptedException {
-
-        super(in);
-        if (loader == null) {
-            throw new IllegalArgumentException("Illegal null argument to ObjectInputStreamWithLoader");
-        }
-        this.loader = loader;
-    }
-
-    /**
-     * Use the given ClassLoader rather than using the system class
-     */
-    protected Class resolveClass(ObjectStreamClass classDesc)
-        throws IOException, ClassNotFoundException {
-
-        String cname = classDesc.getName();
-        return ClassFinder.resolveClass(cname, this.loader);
-    }
-}
-
-/**
- * Package private support class.  This provides a default AppletContext
- * for beans which are applets.
- */
-
-class BeansAppletContext implements AppletContext {
-    Applet target;
-    Hashtable imageCache = new Hashtable();
-
-    BeansAppletContext(Applet target) {
-        this.target = target;
-    }
-
-    public AudioClip getAudioClip(URL url) {
-        // We don't currently support audio clips in the Beans.instantiate
-        // applet context, unless by some luck there exists a URL content
-        // class that can generate an AudioClip from the audio URL.
-        try {
-            return (AudioClip) url.getContent();
-        } catch (Exception ex) {
-            return null;
-        }
-    }
-
-    public synchronized Image getImage(URL url) {
-        Object o = imageCache.get(url);
-        if (o != null) {
-            return (Image)o;
-        }
-        try {
-            o = url.getContent();
-            if (o == null) {
-                return null;
-            }
-            if (o instanceof Image) {
-                imageCache.put(url, o);
-                return (Image) o;
-            }
-            // Otherwise it must be an ImageProducer.
-            Image img = target.createImage((java.awt.image.ImageProducer)o);
-            imageCache.put(url, img);
-            return img;
-
-        } catch (Exception ex) {
-            return null;
-        }
-    }
-
-    public Applet getApplet(String name) {
-        return null;
-    }
-
-    public Enumeration getApplets() {
-        Vector applets = new Vector();
-        applets.addElement(target);
-        return applets.elements();
-    }
-
-    public void showDocument(URL url) {
-        // We do nothing.
-    }
-
-    public void showDocument(URL url, String target) {
-        // We do nothing.
-    }
-
-    public void showStatus(String status) {
-        // We do nothing.
-    }
-
-    public void setStream(String key, InputStream stream)throws IOException{
-        // We do nothing.
-    }
-
-    public InputStream getStream(String key){
-        // We do nothing.
-        return null;
-    }
-
-    public Iterator getStreamKeys(){
-        // We do nothing.
-        return null;
-    }
-}
-
-/**
- * Package private support class.  This provides an AppletStub
- * for beans which are applets.
- */
-class BeansAppletStub implements AppletStub {
-    transient boolean active;
-    transient Applet target;
-    transient AppletContext context;
-    transient URL codeBase;
-    transient URL docBase;
-
-    BeansAppletStub(Applet target,
-                AppletContext context, URL codeBase,
-                                URL docBase) {
-        this.target = target;
-        this.context = context;
-        this.codeBase = codeBase;
-        this.docBase = docBase;
-    }
-
-    public boolean isActive() {
-        return active;
-    }
-
-    public URL getDocumentBase() {
-        // use the root directory of the applet's class-loader
-        return docBase;
-    }
-
-    public URL getCodeBase() {
-        // use the directory where we found the class or serialized object.
-        return codeBase;
-    }
-
-    public String getParameter(String name) {
-        return null;
-    }
-
-    public AppletContext getAppletContext() {
-        return context;
-    }
-
-    public void appletResize(int width, int height) {
-        // we do nothing.
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/ConstructorProperties.java b/ojluni/src/main/java/java/beans/ConstructorProperties.java
deleted file mode 100755
index 3166de3..0000000
--- a/ojluni/src/main/java/java/beans/ConstructorProperties.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2006, 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.
- */
-
-package java.beans;
-
-import java.lang.annotation.*;
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-/**
-   <p>An annotation on a constructor that shows how the parameters of
-   that constructor correspond to the constructed object's getter
-   methods.  For example:
-
-   <blockquote>
-<pre>
-   public class Point {
-       &#64;ConstructorProperties({"x", "y"})
-       public Point(int x, int y) {
-           this.x = x;
-           this.y = y;
-       }
-
-       public int getX() {
-           return x;
-       }
-
-       public int getY() {
-           return y;
-       }
-
-       private final int x, y;
-   }
-</pre>
-</blockquote>
-
-   The annotation shows that the first parameter of the constructor
-   can be retrieved with the {@code getX()} method and the second with
-   the {@code getY()} method.  Since parameter names are not in
-   general available at runtime, without the annotation there would be
-   no way to know whether the parameters correspond to {@code getX()}
-   and {@code getY()} or the other way around.</p>
-
-   @since 1.6
-*/
-@Documented @Target(CONSTRUCTOR) @Retention(RUNTIME)
-public @interface ConstructorProperties {
-    /**
-       <p>The getter names.</p>
-       @return the getter names corresponding to the parameters in the
-       annotated constructor.
-    */
-    String[] value();
-}
diff --git a/ojluni/src/main/java/java/beans/Customizer.java b/ojluni/src/main/java/java/beans/Customizer.java
deleted file mode 100755
index 07d7063..0000000
--- a/ojluni/src/main/java/java/beans/Customizer.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-package java.beans;
-
-/**
- * A customizer class provides a complete custom GUI for customizing
- * a target Java Bean.
- * <P>
- * Each customizer should inherit from the java.awt.Component class so
- * it can be instantiated inside an AWT dialog or panel.
- * <P>
- * Each customizer should have a null constructor.
- */
-
-public interface Customizer {
-
-    /**
-     * Set the object to be customized.  This method should be called only
-     * once, before the Customizer has been added to any parent AWT container.
-     * @param bean  The object to be customized.
-     */
-    void setObject(Object bean);
-
-    /**
-     * Register a listener for the PropertyChange event.  The customizer
-     * should fire a PropertyChange event whenever it changes the target
-     * bean in a way that might require the displayed properties to be
-     * refreshed.
-     *
-     * @param listener  An object to be invoked when a PropertyChange
-     *          event is fired.
-     */
-     void addPropertyChangeListener(PropertyChangeListener listener);
-
-    /**
-     * Remove a listener for the PropertyChange event.
-     *
-     * @param listener  The PropertyChange listener to be removed.
-     */
-    void removePropertyChangeListener(PropertyChangeListener listener);
-
-}
diff --git a/ojluni/src/main/java/java/beans/DefaultPersistenceDelegate.java b/ojluni/src/main/java/java/beans/DefaultPersistenceDelegate.java
deleted file mode 100755
index 951d972..0000000
--- a/ojluni/src/main/java/java/beans/DefaultPersistenceDelegate.java
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, 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.
- */
-package java.beans;
-
-import java.util.*;
-import java.lang.reflect.*;
-import java.util.Objects;
-import sun.reflect.misc.*;
-
-
-/**
- * The <code>DefaultPersistenceDelegate</code> is a concrete implementation of
- * the abstract <code>PersistenceDelegate</code> class and
- * is the delegate used by default for classes about
- * which no information is available. The <code>DefaultPersistenceDelegate</code>
- * provides, version resilient, public API-based persistence for
- * classes that follow the JavaBeans&trade; conventions without any class specific
- * configuration.
- * <p>
- * The key assumptions are that the class has a nullary constructor
- * and that its state is accurately represented by matching pairs
- * of "setter" and "getter" methods in the order they are returned
- * by the Introspector.
- * In addition to providing code-free persistence for JavaBeans,
- * the <code>DefaultPersistenceDelegate</code> provides a convenient means
- * to effect persistent storage for classes that have a constructor
- * that, while not nullary, simply requires some property values
- * as arguments.
- *
- * @see #DefaultPersistenceDelegate(String[])
- * @see java.beans.Introspector
- *
- * @since 1.4
- *
- * @author Philip Milne
- */
-
-public class DefaultPersistenceDelegate extends PersistenceDelegate {
-    private String[] constructor;
-    private Boolean definesEquals;
-
-    /**
-     * Creates a persistence delegate for a class with a nullary constructor.
-     *
-     * @see #DefaultPersistenceDelegate(java.lang.String[])
-     */
-    public DefaultPersistenceDelegate() {
-        this(new String[0]);
-    }
-
-    /**
-     * Creates a default persistence delegate for a class with a
-     * constructor whose arguments are the values of the property
-     * names as specified by <code>constructorPropertyNames</code>.
-     * The constructor arguments are created by
-     * evaluating the property names in the order they are supplied.
-     * To use this class to specify a single preferred constructor for use
-     * in the serialization of a particular type, we state the
-     * names of the properties that make up the constructor's
-     * arguments. For example, the <code>Font</code> class which
-     * does not define a nullary constructor can be handled
-     * with the following persistence delegate:
-     *
-     * <pre>
-     *     new DefaultPersistenceDelegate(new String[]{"name", "style", "size"});
-     * </pre>
-     *
-     * @param  constructorPropertyNames The property names for the arguments of this constructor.
-     *
-     * @see #instantiate
-     */
-    public DefaultPersistenceDelegate(String[] constructorPropertyNames) {
-        this.constructor = constructorPropertyNames;
-    }
-
-    private static boolean definesEquals(Class type) {
-        try {
-            return type == type.getMethod("equals", Object.class).getDeclaringClass();
-        }
-        catch(NoSuchMethodException e) {
-            return false;
-        }
-    }
-
-    private boolean definesEquals(Object instance) {
-        if (definesEquals != null) {
-            return (definesEquals == Boolean.TRUE);
-        }
-        else {
-            boolean result = definesEquals(instance.getClass());
-            definesEquals = result ? Boolean.TRUE : Boolean.FALSE;
-            return result;
-        }
-    }
-
-    /**
-     * If the number of arguments in the specified constructor is non-zero and
-     * the class of <code>oldInstance</code> explicitly declares an "equals" method
-     * this method returns the value of <code>oldInstance.equals(newInstance)</code>.
-     * Otherwise, this method uses the superclass's definition which returns true if the
-     * classes of the two instances are equal.
-     *
-     * @param oldInstance The instance to be copied.
-     * @param newInstance The instance that is to be modified.
-     * @return True if an equivalent copy of <code>newInstance</code> may be
-     *         created by applying a series of mutations to <code>oldInstance</code>.
-     *
-     * @see #DefaultPersistenceDelegate(String[])
-     */
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        // Assume the instance is either mutable or a singleton
-        // if it has a nullary constructor.
-        return (constructor.length == 0) || !definesEquals(oldInstance) ?
-            super.mutatesTo(oldInstance, newInstance) :
-            oldInstance.equals(newInstance);
-    }
-
-    /**
-     * This default implementation of the <code>instantiate</code> method returns
-     * an expression containing the predefined method name "new" which denotes a
-     * call to a constructor with the arguments as specified in
-     * the <code>DefaultPersistenceDelegate</code>'s constructor.
-     *
-     * @param  oldInstance The instance to be instantiated.
-     * @param  out The code output stream.
-     * @return An expression whose value is <code>oldInstance</code>.
-     *
-     * @throws NullPointerException if {@code out} is {@code null}
-     *
-     * @see #DefaultPersistenceDelegate(String[])
-     */
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        int nArgs = constructor.length;
-        Class type = oldInstance.getClass();
-        Object[] constructorArgs = new Object[nArgs];
-        for(int i = 0; i < nArgs; i++) {
-            try {
-                Method method = findMethod(type, this.constructor[i]);
-                constructorArgs[i] = MethodUtil.invoke(method, oldInstance, new Object[0]);
-            }
-            catch (Exception e) {
-                out.getExceptionListener().exceptionThrown(e);
-            }
-        }
-        return new Expression(oldInstance, oldInstance.getClass(), "new", constructorArgs);
-    }
-
-    private Method findMethod(Class type, String property) {
-        if (property == null) {
-            throw new IllegalArgumentException("Property name is null");
-        }
-        PropertyDescriptor pd = getPropertyDescriptor(type, property);
-        if (pd == null) {
-            throw new IllegalStateException("Could not find property by the name " + property);
-        }
-        Method method = pd.getReadMethod();
-        if (method == null) {
-            throw new IllegalStateException("Could not find getter for the property " + property);
-        }
-        return method;
-    }
-
-    private void doProperty(Class type, PropertyDescriptor pd, Object oldInstance, Object newInstance, Encoder out) throws Exception {
-        Method getter = pd.getReadMethod();
-        Method setter = pd.getWriteMethod();
-
-        if (getter != null && setter != null) {
-            Expression oldGetExp = new Expression(oldInstance, getter.getName(), new Object[]{});
-            Expression newGetExp = new Expression(newInstance, getter.getName(), new Object[]{});
-            Object oldValue = oldGetExp.getValue();
-            Object newValue = newGetExp.getValue();
-            out.writeExpression(oldGetExp);
-            if (!Objects.equals(newValue, out.get(oldValue))) {
-                // Search for a static constant with this value;
-                Object e = (Object[])pd.getValue("enumerationValues");
-                if (e instanceof Object[] && Array.getLength(e) % 3 == 0) {
-                    Object[] a = (Object[])e;
-                    for(int i = 0; i < a.length; i = i + 3) {
-                        try {
-                           Field f = type.getField((String)a[i]);
-                           if (f.get(null).equals(oldValue)) {
-                               out.remove(oldValue);
-                               out.writeExpression(new Expression(oldValue, f, "get", new Object[]{null}));
-                           }
-                        }
-                        catch (Exception ex) {}
-                    }
-                }
-                invokeStatement(oldInstance, setter.getName(), new Object[]{oldValue}, out);
-            }
-        }
-    }
-
-    static void invokeStatement(Object instance, String methodName, Object[] args, Encoder out) {
-        out.writeStatement(new Statement(instance, methodName, args));
-    }
-
-    // Write out the properties of this instance.
-    private void initBean(Class type, Object oldInstance, Object newInstance, Encoder out) {
-        for (Field field : type.getFields()) {
-            int mod = field.getModifiers();
-            if (Modifier.isFinal(mod) || Modifier.isStatic(mod) || Modifier.isTransient(mod)) {
-                continue;
-            }
-            try {
-                Expression oldGetExp = new Expression(field, "get", new Object[] { oldInstance });
-                Expression newGetExp = new Expression(field, "get", new Object[] { newInstance });
-                Object oldValue = oldGetExp.getValue();
-                Object newValue = newGetExp.getValue();
-                out.writeExpression(oldGetExp);
-                if (!Objects.equals(newValue, out.get(oldValue))) {
-                    out.writeStatement(new Statement(field, "set", new Object[] { oldInstance, oldValue }));
-                }
-            }
-            catch (Exception exception) {
-                out.getExceptionListener().exceptionThrown(exception);
-            }
-        }
-        BeanInfo info;
-        try {
-            info = Introspector.getBeanInfo(type);
-        } catch (IntrospectionException exception) {
-            return;
-        }
-        // Properties
-        for (PropertyDescriptor d : info.getPropertyDescriptors()) {
-            if (d.isTransient()) {
-                continue;
-            }
-            try {
-                doProperty(type, d, oldInstance, newInstance, out);
-            }
-            catch (Exception e) {
-                out.getExceptionListener().exceptionThrown(e);
-            }
-        }
-
-        // Listeners
-        /*
-        Pending(milne). There is a general problem with the archival of
-        listeners which is unresolved as of 1.4. Many of the methods
-        which install one object inside another (typically "add" methods
-        or setters) automatically install a listener on the "child" object
-        so that its "parent" may respond to changes that are made to it.
-        For example the JTable:setModel() method automatically adds a
-        TableModelListener (the JTable itself in this case) to the supplied
-        table model.
-
-        We do not need to explictly add these listeners to the model in an
-        archive as they will be added automatically by, in the above case,
-        the JTable's "setModel" method. In some cases, we must specifically
-        avoid trying to do this since the listener may be an inner class
-        that cannot be instantiated using public API.
-
-        No general mechanism currently
-        exists for differentiating between these kind of listeners and
-        those which were added explicitly by the user. A mechanism must
-        be created to provide a general means to differentiate these
-        special cases so as to provide reliable persistence of listeners
-        for the general case.
-        */
-        if (!java.awt.Component.class.isAssignableFrom(type)) {
-            return; // Just handle the listeners of Components for now.
-        }
-        for (EventSetDescriptor d : info.getEventSetDescriptors()) {
-            if (d.isTransient()) {
-                continue;
-            }
-            Class listenerType = d.getListenerType();
-
-
-            // The ComponentListener is added automatically, when
-            // Contatiner:add is called on the parent.
-            if (listenerType == java.awt.event.ComponentListener.class) {
-                continue;
-            }
-
-            // JMenuItems have a change listener added to them in
-            // their "add" methods to enable accessibility support -
-            // see the add method in JMenuItem for details. We cannot
-            // instantiate this instance as it is a private inner class
-            // and do not need to do this anyway since it will be created
-            // and installed by the "add" method. Special case this for now,
-            // ignoring all change listeners on JMenuItems.
-            if (listenerType == javax.swing.event.ChangeListener.class &&
-                type == javax.swing.JMenuItem.class) {
-                continue;
-            }
-
-            EventListener[] oldL = new EventListener[0];
-            EventListener[] newL = new EventListener[0];
-            try {
-                Method m = d.getGetListenerMethod();
-                oldL = (EventListener[])MethodUtil.invoke(m, oldInstance, new Object[]{});
-                newL = (EventListener[])MethodUtil.invoke(m, newInstance, new Object[]{});
-            }
-            catch (Exception e2) {
-                try {
-                    Method m = type.getMethod("getListeners", new Class[]{Class.class});
-                    oldL = (EventListener[])MethodUtil.invoke(m, oldInstance, new Object[]{listenerType});
-                    newL = (EventListener[])MethodUtil.invoke(m, newInstance, new Object[]{listenerType});
-                }
-                catch (Exception e3) {
-                    return;
-                }
-            }
-
-            // Asssume the listeners are in the same order and that there are no gaps.
-            // Eventually, this may need to do true differencing.
-            String addListenerMethodName = d.getAddListenerMethod().getName();
-            for (int i = newL.length; i < oldL.length; i++) {
-                // System.out.println("Adding listener: " + addListenerMethodName + oldL[i]);
-                invokeStatement(oldInstance, addListenerMethodName, new Object[]{oldL[i]}, out);
-            }
-
-            String removeListenerMethodName = d.getRemoveListenerMethod().getName();
-            for (int i = oldL.length; i < newL.length; i++) {
-                invokeStatement(oldInstance, removeListenerMethodName, new Object[]{newL[i]}, out);
-            }
-        }
-    }
-
-    /**
-     * This default implementation of the <code>initialize</code> method assumes
-     * all state held in objects of this type is exposed via the
-     * matching pairs of "setter" and "getter" methods in the order
-     * they are returned by the Introspector. If a property descriptor
-     * defines a "transient" attribute with a value equal to
-     * <code>Boolean.TRUE</code> the property is ignored by this
-     * default implementation. Note that this use of the word
-     * "transient" is quite independent of the field modifier
-     * that is used by the <code>ObjectOutputStream</code>.
-     * <p>
-     * For each non-transient property, an expression is created
-     * in which the nullary "getter" method is applied
-     * to the <code>oldInstance</code>. The value of this
-     * expression is the value of the property in the instance that is
-     * being serialized. If the value of this expression
-     * in the cloned environment <code>mutatesTo</code> the
-     * target value, the new value is initialized to make it
-     * equivalent to the old value. In this case, because
-     * the property value has not changed there is no need to
-     * call the corresponding "setter" method and no statement
-     * is emitted. If not however, the expression for this value
-     * is replaced with another expression (normally a constructor)
-     * and the corresponding "setter" method is called to install
-     * the new property value in the object. This scheme removes
-     * default information from the output produced by streams
-     * using this delegate.
-     * <p>
-     * In passing these statements to the output stream, where they
-     * will be executed, side effects are made to the <code>newInstance</code>.
-     * In most cases this allows the problem of properties
-     * whose values depend on each other to actually help the
-     * serialization process by making the number of statements
-     * that need to be written to the output smaller. In general,
-     * the problem of handling interdependent properties is reduced to
-     * that of finding an order for the properties in
-     * a class such that no property value depends on the value of
-     * a subsequent property.
-     *
-     * @param oldInstance The instance to be copied.
-     * @param newInstance The instance that is to be modified.
-     * @param out The stream to which any initialization statements should be written.
-     *
-     * @throws NullPointerException if {@code out} is {@code null}
-     *
-     * @see java.beans.Introspector#getBeanInfo
-     * @see java.beans.PropertyDescriptor
-     */
-    protected void initialize(Class<?> type,
-                              Object oldInstance, Object newInstance,
-                              Encoder out)
-    {
-        // System.out.println("DefulatPD:initialize" + type);
-        super.initialize(type, oldInstance, newInstance, out);
-        if (oldInstance.getClass() == type) { // !type.isInterface()) {
-            initBean(type, oldInstance, newInstance, out);
-        }
-    }
-
-    private static PropertyDescriptor getPropertyDescriptor(Class type, String property) {
-        try {
-            for (PropertyDescriptor pd : Introspector.getBeanInfo(type).getPropertyDescriptors()) {
-                if (property.equals(pd.getName()))
-                    return pd;
-            }
-        } catch (IntrospectionException exception) {
-        }
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/DesignMode.java b/ojluni/src/main/java/java/beans/DesignMode.java
deleted file mode 100755
index c8b319f..0000000
--- a/ojluni/src/main/java/java/beans/DesignMode.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 1997, 2011, 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.
- */
-
-package java.beans;
-
-/**
- * <p>
- * This interface is intended to be implemented by, or delegated from, instances
- * of java.beans.beancontext.BeanContext, in order to propagate to its nested hierarchy
- * of java.beans.beancontext.BeanContextChild instances, the current "designTime" property.
- * <p>
- * The JavaBeans&trade; specification defines the notion of design time as is a
- * mode in which JavaBeans instances should function during their composition
- * and customization in a interactive design, composition or construction tool,
- * as opposed to runtime when the JavaBean is part of an applet, application,
- * or other live Java executable abstraction.
- *
- * @author Laurence P. G. Cable
- * @since 1.2
- *
- * @see java.beans.beancontext.BeanContext
- * @see java.beans.beancontext.BeanContextChild
- * @see java.beans.beancontext.BeanContextMembershipListener
- * @see java.beans.PropertyChangeEvent
- */
-
-public interface DesignMode {
-
-    /**
-     * The standard value of the propertyName as fired from a BeanContext or
-     * other source of PropertyChangeEvents.
-     */
-
-    static String PROPERTYNAME = "designTime";
-
-    /**
-     * Sets the "value" of the "designTime" property.
-     * <p>
-     * If the implementing object is an instance of java.beans.beancontext.BeanContext,
-     * or a subinterface thereof, then that BeanContext should fire a
-     * PropertyChangeEvent, to its registered BeanContextMembershipListeners, with
-     * parameters:
-     * <ul>
-     *    <li><code>propertyName</code> - <code>java.beans.DesignMode.PROPERTYNAME</code>
-     *    <li><code>oldValue</code> - previous value of "designTime"
-     *    <li><code>newValue</code> - current value of "designTime"
-     * </ul>
-     * Note it is illegal for a BeanContextChild to invoke this method
-     * associated with a BeanContext that it is nested within.
-     *
-     * @param designTime  the current "value" of the "designTime" property
-     * @see java.beans.beancontext.BeanContext
-     * @see java.beans.beancontext.BeanContextMembershipListener
-     * @see java.beans.PropertyChangeEvent
-     */
-
-    void setDesignTime(boolean designTime);
-
-    /**
-     * A value of true denotes that JavaBeans should behave in design time
-     * mode, a value of false denotes runtime behavior.
-     *
-     * @return the current "value" of the "designTime" property.
-     */
-
-    boolean isDesignTime();
-}
diff --git a/ojluni/src/main/java/java/beans/Encoder.java b/ojluni/src/main/java/java/beans/Encoder.java
deleted file mode 100755
index b872813..0000000
--- a/ojluni/src/main/java/java/beans/Encoder.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Copyright (c) 2000, 2010, 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.
- */
-package java.beans;
-
-import com.sun.beans.finder.PersistenceDelegateFinder;
-
-import java.util.HashMap;
-import java.util.IdentityHashMap;
-import java.util.Map;
-
-/**
- * An <code>Encoder</code> is a class which can be used to create
- * files or streams that encode the state of a collection of
- * JavaBeans in terms of their public APIs. The <code>Encoder</code>,
- * in conjunction with its persistence delegates, is responsible for
- * breaking the object graph down into a series of <code>Statements</code>s
- * and <code>Expression</code>s which can be used to create it.
- * A subclass typically provides a syntax for these expressions
- * using some human readable form - like Java source code or XML.
- *
- * @since 1.4
- *
- * @author Philip Milne
- */
-
-public class Encoder {
-    private final PersistenceDelegateFinder finder = new PersistenceDelegateFinder();
-    private Map bindings = new IdentityHashMap();
-    private ExceptionListener exceptionListener;
-    boolean executeStatements = true;
-    private Map attributes;
-
-    /**
-     * Write the specified object to the output stream.
-     * The serialized form will denote a series of
-     * expressions, the combined effect of which will create
-     * an equivalent object when the input stream is read.
-     * By default, the object is assumed to be a <em>JavaBean</em>
-     * with a nullary constructor, whose state is defined by
-     * the matching pairs of "setter" and "getter" methods
-     * returned by the Introspector.
-     *
-     * @param o The object to be written to the stream.
-     *
-     * @see XMLDecoder#readObject
-     */
-    protected void writeObject(Object o) {
-        if (o == this) {
-            return;
-        }
-        PersistenceDelegate info = getPersistenceDelegate(o == null ? null : o.getClass());
-        info.writeObject(o, this);
-    }
-
-    /**
-     * Sets the exception handler for this stream to <code>exceptionListener</code>.
-     * The exception handler is notified when this stream catches recoverable
-     * exceptions.
-     *
-     * @param exceptionListener The exception handler for this stream;
-     *       if <code>null</code> the default exception listener will be used.
-     *
-     * @see #getExceptionListener
-     */
-    public void setExceptionListener(ExceptionListener exceptionListener) {
-        this.exceptionListener = exceptionListener;
-    }
-
-    /**
-     * Gets the exception handler for this stream.
-     *
-     * @return The exception handler for this stream;
-     *    Will return the default exception listener if this has not explicitly been set.
-     *
-     * @see #setExceptionListener
-     */
-    public ExceptionListener getExceptionListener() {
-        return (exceptionListener != null) ? exceptionListener : Statement.defaultExceptionListener;
-    }
-
-    Object getValue(Expression exp) {
-        try {
-            return (exp == null) ? null : exp.getValue();
-        }
-        catch (Exception e) {
-            getExceptionListener().exceptionThrown(e);
-            throw new RuntimeException("failed to evaluate: " + exp.toString());
-        }
-    }
-
-    /**
-     * Returns the persistence delegate for the given type.
-     * The persistence delegate is calculated by applying
-     * the following rules in order:
-     * <ol>
-     * <li>
-     * If a persistence delegate is associated with the given type
-     * by using the {@link #setPersistenceDelegate} method
-     * it is returned.
-     * <li>
-     * A persistence delegate is then looked up by the name
-     * composed of the the fully qualified name of the given type
-     * and the "PersistenceDelegate" postfix.
-     * For example, a persistence delegate for the {@code Bean} class
-     * should be named {@code BeanPersistenceDelegate}
-     * and located in the same package.
-     * <pre>
-     * public class Bean { ... }
-     * public class BeanPersistenceDelegate { ... }</pre>
-     * The instance of the {@code BeanPersistenceDelegate} class
-     * is returned for the {@code Bean} class.
-     * <li>
-     * If the type is {@code null},
-     * a shared internal persistence delegate is returned
-     * that encodes {@code null} value.
-     * <li>
-     * If the type is a {@code enum} declaration,
-     * a shared internal persistence delegate is returned
-     * that encodes constants of this enumeration
-     * by their names.
-     * <li>
-     * If the type is a primitive type or the corresponding wrapper,
-     * a shared internal persistence delegate is returned
-     * that encodes values of the given type.
-     * <li>
-     * If the type is an array,
-     * a shared internal persistence delegate is returned
-     * that encodes an array of the appropriate type and length,
-     * and each of its elements as if they are properties.
-     * <li>
-     * If the type is a proxy,
-     * a shared internal persistence delegate is returned
-     * that encodes a proxy instance by using
-     * the {@link java.lang.reflect.Proxy#newProxyInstance} method.
-     * <li>
-     * If the {@link BeanInfo} for this type has a {@link BeanDescriptor}
-     * which defined a "persistenceDelegate" attribute,
-     * the value of this named attribute is returned.
-     * <li>
-     * In all other cases the default persistence delegate is returned.
-     * The default persistence delegate assumes the type is a <em>JavaBean</em>,
-     * implying that it has a default constructor and that its state
-     * may be characterized by the matching pairs of "setter" and "getter"
-     * methods returned by the {@link Introspector} class.
-     * The default constructor is the constructor with the greatest number
-     * of parameters that has the {@link ConstructorProperties} annotation.
-     * If none of the constructors has the {@code ConstructorProperties} annotation,
-     * then the nullary constructor (constructor with no parameters) will be used.
-     * For example, in the following code fragment, the nullary constructor
-     * for the {@code Foo} class will be used,
-     * while the two-parameter constructor
-     * for the {@code Bar} class will be used.
-     * <pre>
-     * public class Foo {
-     *     public Foo() { ... }
-     *     public Foo(int x) { ... }
-     * }
-     * public class Bar {
-     *     public Bar() { ... }
-     *     &#64;ConstructorProperties({"x"})
-     *     public Bar(int x) { ... }
-     *     &#64;ConstructorProperties({"x", "y"})
-     *     public Bar(int x, int y) { ... }
-     * }</pre>
-     * </ol>
-     *
-     * @param type  the class of the objects
-     * @return the persistence delegate for the given type
-     *
-     * @see #setPersistenceDelegate
-     * @see java.beans.Introspector#getBeanInfo
-     * @see java.beans.BeanInfo#getBeanDescriptor
-     */
-    public PersistenceDelegate getPersistenceDelegate(Class<?> type) {
-        PersistenceDelegate pd = this.finder.find(type);
-        if (pd == null) {
-            pd = MetaData.getPersistenceDelegate(type);
-            if (pd != null) {
-                this.finder.register(type, pd);
-            }
-        }
-        return pd;
-    }
-
-    /**
-     * Associates the specified persistence delegate with the given type.
-     *
-     * @param type  the class of objects that the specified persistence delegate applies to
-     * @param delegate  the persistence delegate for instances of the given type
-     *
-     * @see #getPersistenceDelegate
-     * @see java.beans.Introspector#getBeanInfo
-     * @see java.beans.BeanInfo#getBeanDescriptor
-     */
-    public void setPersistenceDelegate(Class<?> type, PersistenceDelegate delegate) {
-        this.finder.register(type, delegate);
-    }
-
-    /**
-     * Removes the entry for this instance, returning the old entry.
-     *
-     * @param oldInstance The entry that should be removed.
-     * @return The entry that was removed.
-     *
-     * @see #get
-     */
-    public Object remove(Object oldInstance) {
-        Expression exp = (Expression)bindings.remove(oldInstance);
-        return getValue(exp);
-    }
-
-    /**
-     * Returns a tentative value for <code>oldInstance</code> in
-     * the environment created by this stream. A persistence
-     * delegate can use its <code>mutatesTo</code> method to
-     * determine whether this value may be initialized to
-     * form the equivalent object at the output or whether
-     * a new object must be instantiated afresh. If the
-     * stream has not yet seen this value, null is returned.
-     *
-     * @param  oldInstance The instance to be looked up.
-     * @return The object, null if the object has not been seen before.
-     */
-    public Object get(Object oldInstance) {
-        if (oldInstance == null || oldInstance == this ||
-            oldInstance.getClass() == String.class) {
-            return oldInstance;
-        }
-        Expression exp = (Expression)bindings.get(oldInstance);
-        return getValue(exp);
-    }
-
-    private Object writeObject1(Object oldInstance) {
-        Object o = get(oldInstance);
-        if (o == null) {
-            writeObject(oldInstance);
-            o = get(oldInstance);
-        }
-        return o;
-    }
-
-    private Statement cloneStatement(Statement oldExp) {
-        Object oldTarget = oldExp.getTarget();
-        Object newTarget = writeObject1(oldTarget);
-
-        Object[] oldArgs = oldExp.getArguments();
-        Object[] newArgs = new Object[oldArgs.length];
-        for (int i = 0; i < oldArgs.length; i++) {
-            newArgs[i] = writeObject1(oldArgs[i]);
-        }
-        Statement newExp = Statement.class.equals(oldExp.getClass())
-                ? new Statement(newTarget, oldExp.getMethodName(), newArgs)
-                : new Expression(newTarget, oldExp.getMethodName(), newArgs);
-        newExp.loader = oldExp.loader;
-        return newExp;
-    }
-
-    /**
-     * Writes statement <code>oldStm</code> to the stream.
-     * The <code>oldStm</code> should be written entirely
-     * in terms of the callers environment, i.e. the
-     * target and all arguments should be part of the
-     * object graph being written. These expressions
-     * represent a series of "what happened" expressions
-     * which tell the output stream how to produce an
-     * object graph like the original.
-     * <p>
-     * The implementation of this method will produce
-     * a second expression to represent the same expression in
-     * an environment that will exist when the stream is read.
-     * This is achieved simply by calling <code>writeObject</code>
-     * on the target and all the arguments and building a new
-     * expression with the results.
-     *
-     * @param oldStm The expression to be written to the stream.
-     */
-    public void writeStatement(Statement oldStm) {
-        // System.out.println("writeStatement: " + oldExp);
-        Statement newStm = cloneStatement(oldStm);
-        if (oldStm.getTarget() != this && executeStatements) {
-            try {
-                newStm.execute();
-            } catch (Exception e) {
-                getExceptionListener().exceptionThrown(new Exception("Encoder: discarding statement "
-                                                                     + newStm, e));
-            }
-        }
-    }
-
-    /**
-     * The implementation first checks to see if an
-     * expression with this value has already been written.
-     * If not, the expression is cloned, using
-     * the same procedure as <code>writeStatement</code>,
-     * and the value of this expression is reconciled
-     * with the value of the cloned expression
-     * by calling <code>writeObject</code>.
-     *
-     * @param oldExp The expression to be written to the stream.
-     */
-    public void writeExpression(Expression oldExp) {
-        // System.out.println("Encoder::writeExpression: " + oldExp);
-        Object oldValue = getValue(oldExp);
-        if (get(oldValue) != null) {
-            return;
-        }
-        bindings.put(oldValue, (Expression)cloneStatement(oldExp));
-        writeObject(oldValue);
-    }
-
-    void clear() {
-        bindings.clear();
-    }
-
-    // Package private method for setting an attributes table for the encoder
-    void setAttribute(Object key, Object value) {
-        if (attributes == null) {
-            attributes = new HashMap();
-        }
-        attributes.put(key, value);
-    }
-
-    Object getAttribute(Object key) {
-        if (attributes == null) {
-            return null;
-        }
-        return attributes.get(key);
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/EventHandler.java b/ojluni/src/main/java/java/beans/EventHandler.java
deleted file mode 100755
index 2853017..0000000
--- a/ojluni/src/main/java/java/beans/EventHandler.java
+++ /dev/null
@@ -1,694 +0,0 @@
-/*
- * Copyright (c) 2000, 2009, 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.
- */
-package java.beans;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Proxy;
-import java.lang.reflect.Method;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-import sun.reflect.misc.MethodUtil;
-
-/**
- * The <code>EventHandler</code> class provides
- * support for dynamically generating event listeners whose methods
- * execute a simple statement involving an incoming event object
- * and a target object.
- * <p>
- * The <code>EventHandler</code> class is intended to be used by interactive tools, such as
- * application builders, that allow developers to make connections between
- * beans. Typically connections are made from a user interface bean
- * (the event <em>source</em>)
- * to an application logic bean (the <em>target</em>). The most effective
- * connections of this kind isolate the application logic from the user
- * interface.  For example, the <code>EventHandler</code> for a
- * connection from a <code>JCheckBox</code> to a method
- * that accepts a boolean value can deal with extracting the state
- * of the check box and passing it directly to the method so that
- * the method is isolated from the user interface layer.
- * <p>
- * Inner classes are another, more general way to handle events from
- * user interfaces.  The <code>EventHandler</code> class
- * handles only a subset of what is possible using inner
- * classes. However, <code>EventHandler</code> works better
- * with the long-term persistence scheme than inner classes.
- * Also, using <code>EventHandler</code> in large applications in
- * which the same interface is implemented many times can
- * reduce the disk and memory footprint of the application.
- * <p>
- * The reason that listeners created with <code>EventHandler</code>
- * have such a small
- * footprint is that the <code>Proxy</code> class, on which
- * the <code>EventHandler</code> relies, shares implementations
- * of identical
- * interfaces. For example, if you use
- * the <code>EventHandler</code> <code>create</code> methods to make
- * all the <code>ActionListener</code>s in an application,
- * all the action listeners will be instances of a single class
- * (one created by the <code>Proxy</code> class).
- * In general, listeners based on
- * the <code>Proxy</code> class require one listener class
- * to be created per <em>listener type</em> (interface),
- * whereas the inner class
- * approach requires one class to be created per <em>listener</em>
- * (object that implements the interface).
- *
- * <p>
- * You don't generally deal directly with <code>EventHandler</code>
- * instances.
- * Instead, you use one of the <code>EventHandler</code>
- * <code>create</code> methods to create
- * an object that implements a given listener interface.
- * This listener object uses an <code>EventHandler</code> object
- * behind the scenes to encapsulate information about the
- * event, the object to be sent a message when the event occurs,
- * the message (method) to be sent, and any argument
- * to the method.
- * The following section gives examples of how to create listener
- * objects using the <code>create</code> methods.
- *
- * <h2>Examples of Using EventHandler</h2>
- *
- * The simplest use of <code>EventHandler</code> is to install
- * a listener that calls a method on the target object with no arguments.
- * In the following example we create an <code>ActionListener</code>
- * that invokes the <code>toFront</code> method on an instance
- * of <code>javax.swing.JFrame</code>.
- *
- * <blockquote>
- *<pre>
- *myButton.addActionListener(
- *    (ActionListener)EventHandler.create(ActionListener.class, frame, "toFront"));
- *</pre>
- * </blockquote>
- *
- * When <code>myButton</code> is pressed, the statement
- * <code>frame.toFront()</code> will be executed.  One could get
- * the same effect, with some additional compile-time type safety,
- * by defining a new implementation of the <code>ActionListener</code>
- * interface and adding an instance of it to the button:
- *
- * <blockquote>
- *<pre>
-//Equivalent code using an inner class instead of EventHandler.
- *myButton.addActionListener(new ActionListener() {
- *    public void actionPerformed(ActionEvent e) {
- *        frame.toFront();
- *    }
- *});
- *</pre>
- * </blockquote>
- *
- * The next simplest use of <code>EventHandler</code> is
- * to extract a property value from the first argument
- * of the method in the listener interface (typically an event object)
- * and use it to set the value of a property in the target object.
- * In the following example we create an <code>ActionListener</code> that
- * sets the <code>nextFocusableComponent</code> property of the target
- * (myButton) object to the value of the "source" property of the event.
- *
- * <blockquote>
- *<pre>
- *EventHandler.create(ActionListener.class, myButton, "nextFocusableComponent", "source")
- *</pre>
- * </blockquote>
- *
- * This would correspond to the following inner class implementation:
- *
- * <blockquote>
- *<pre>
-//Equivalent code using an inner class instead of EventHandler.
- *new ActionListener() {
- *    public void actionPerformed(ActionEvent e) {
- *        myButton.setNextFocusableComponent((Component)e.getSource());
- *    }
- *}
- *</pre>
- * </blockquote>
- *
- * It's also possible to create an <code>EventHandler</code> that
- * just passes the incoming event object to the target's action.
- * If the fourth <code>EventHandler.create</code> argument is
- * an empty string, then the event is just passed along:
- *
- * <blockquote>
- *<pre>
- *EventHandler.create(ActionListener.class, target, "doActionEvent", "")
- *</pre>
- * </blockquote>
- *
- * This would correspond to the following inner class implementation:
- *
- * <blockquote>
- *<pre>
-//Equivalent code using an inner class instead of EventHandler.
- *new ActionListener() {
- *    public void actionPerformed(ActionEvent e) {
- *        target.doActionEvent(e);
- *    }
- *}
- *</pre>
- * </blockquote>
- *
- * Probably the most common use of <code>EventHandler</code>
- * is to extract a property value from the
- * <em>source</em> of the event object and set this value as
- * the value of a property of the target object.
- * In the following example we create an <code>ActionListener</code> that
- * sets the "label" property of the target
- * object to the value of the "text" property of the
- * source (the value of the "source" property) of the event.
- *
- * <blockquote>
- *<pre>
- *EventHandler.create(ActionListener.class, myButton, "label", "source.text")
- *</pre>
- * </blockquote>
- *
- * This would correspond to the following inner class implementation:
- *
- * <blockquote>
- *<pre>
-//Equivalent code using an inner class instead of EventHandler.
- *new ActionListener {
- *    public void actionPerformed(ActionEvent e) {
- *        myButton.setLabel(((JTextField)e.getSource()).getText());
- *    }
- *}
- *</pre>
- * </blockquote>
- *
- * The event property may be "qualified" with an arbitrary number
- * of property prefixes delimited with the "." character. The "qualifying"
- * names that appear before the "." characters are taken as the names of
- * properties that should be applied, left-most first, to
- * the event object.
- * <p>
- * For example, the following action listener
- *
- * <blockquote>
- *<pre>
- *EventHandler.create(ActionListener.class, target, "a", "b.c.d")
- *</pre>
- * </blockquote>
- *
- * might be written as the following inner class
- * (assuming all the properties had canonical getter methods and
- * returned the appropriate types):
- *
- * <blockquote>
- *<pre>
-//Equivalent code using an inner class instead of EventHandler.
- *new ActionListener {
- *    public void actionPerformed(ActionEvent e) {
- *        target.setA(e.getB().getC().isD());
- *    }
- *}
- *</pre>
- * </blockquote>
- * The target property may also be "qualified" with an arbitrary number
- * of property prefixs delimited with the "." character.  For example, the
- * following action listener:
- * <pre>
- *   EventHandler.create(ActionListener.class, target, "a.b", "c.d")
- * </pre>
- * might be written as the following inner class
- * (assuming all the properties had canonical getter methods and
- * returned the appropriate types):
- * <pre>
- *   //Equivalent code using an inner class instead of EventHandler.
- *   new ActionListener {
- *     public void actionPerformed(ActionEvent e) {
- *         target.getA().setB(e.getC().isD());
- *    }
- *}
- *</pre>
- * <p>
- * As <code>EventHandler</code> ultimately relies on reflection to invoke
- * a method we recommend against targeting an overloaded method.  For example,
- * if the target is an instance of the class <code>MyTarget</code> which is
- * defined as:
- * <pre>
- *   public class MyTarget {
- *     public void doIt(String);
- *     public void doIt(Object);
- *   }
- * </pre>
- * Then the method <code>doIt</code> is overloaded.  EventHandler will invoke
- * the method that is appropriate based on the source.  If the source is
- * null, then either method is appropriate and the one that is invoked is
- * undefined.  For that reason we recommend against targeting overloaded
- * methods.
- *
- * @see java.lang.reflect.Proxy
- * @see java.util.EventObject
- *
- * @since 1.4
- *
- * @author Mark Davidson
- * @author Philip Milne
- * @author Hans Muller
- *
- */
-public class EventHandler implements InvocationHandler {
-    private Object target;
-    private String action;
-    private final String eventPropertyName;
-    private final String listenerMethodName;
-    private final AccessControlContext acc = AccessController.getContext();
-
-    /**
-     * Creates a new <code>EventHandler</code> object;
-     * you generally use one of the <code>create</code> methods
-     * instead of invoking this constructor directly.  Refer to
-     * {@link java.beans.EventHandler#create(Class, Object, String, String)
-     * the general version of create} for a complete description of
-     * the <code>eventPropertyName</code> and <code>listenerMethodName</code>
-     * parameter.
-     *
-     * @param target the object that will perform the action
-     * @param action the name of a (possibly qualified) property or method on
-     *        the target
-     * @param eventPropertyName the (possibly qualified) name of a readable property of the incoming event
-     * @param listenerMethodName the name of the method in the listener interface that should trigger the action
-     *
-     * @throws NullPointerException if <code>target</code> is null
-     * @throws NullPointerException if <code>action</code> is null
-     *
-     * @see EventHandler
-     * @see #create(Class, Object, String, String, String)
-     * @see #getTarget
-     * @see #getAction
-     * @see #getEventPropertyName
-     * @see #getListenerMethodName
-     */
-    @ConstructorProperties({"target", "action", "eventPropertyName", "listenerMethodName"})
-    public EventHandler(Object target, String action, String eventPropertyName, String listenerMethodName) {
-        this.target = target;
-        this.action = action;
-        if (target == null) {
-            throw new NullPointerException("target must be non-null");
-        }
-        if (action == null) {
-            throw new NullPointerException("action must be non-null");
-        }
-        this.eventPropertyName = eventPropertyName;
-        this.listenerMethodName = listenerMethodName;
-    }
-
-    /**
-     * Returns the object to which this event handler will send a message.
-     *
-     * @return the target of this event handler
-     * @see #EventHandler(Object, String, String, String)
-     */
-    public Object getTarget()  {
-        return target;
-    }
-
-    /**
-     * Returns the name of the target's writable property
-     * that this event handler will set,
-     * or the name of the method that this event handler
-     * will invoke on the target.
-     *
-     * @return the action of this event handler
-     * @see #EventHandler(Object, String, String, String)
-     */
-    public String getAction()  {
-        return action;
-    }
-
-    /**
-     * Returns the property of the event that should be
-     * used in the action applied to the target.
-     *
-     * @return the property of the event
-     *
-     * @see #EventHandler(Object, String, String, String)
-     */
-    public String getEventPropertyName()  {
-        return eventPropertyName;
-    }
-
-    /**
-     * Returns the name of the method that will trigger the action.
-     * A return value of <code>null</code> signifies that all methods in the
-     * listener interface trigger the action.
-     *
-     * @return the name of the method that will trigger the action
-     *
-     * @see #EventHandler(Object, String, String, String)
-     */
-    public String getListenerMethodName()  {
-        return listenerMethodName;
-    }
-
-    private Object applyGetters(Object target, String getters) {
-        if (getters == null || getters.equals("")) {
-            return target;
-        }
-        int firstDot = getters.indexOf('.');
-        if (firstDot == -1) {
-            firstDot = getters.length();
-        }
-        String first = getters.substring(0, firstDot);
-        String rest = getters.substring(Math.min(firstDot + 1, getters.length()));
-
-        try {
-            Method getter = null;
-            if (target != null) {
-                getter = Statement.getMethod(target.getClass(),
-                                      "get" + NameGenerator.capitalize(first),
-                                      new Class[]{});
-                if (getter == null) {
-                    getter = Statement.getMethod(target.getClass(),
-                                   "is" + NameGenerator.capitalize(first),
-                                   new Class[]{});
-                }
-                if (getter == null) {
-                    getter = Statement.getMethod(target.getClass(), first, new Class[]{});
-                }
-            }
-            if (getter == null) {
-                throw new RuntimeException("No method called: " + first +
-                                           " defined on " + target);
-            }
-            Object newTarget = MethodUtil.invoke(getter, target, new Object[]{});
-            return applyGetters(newTarget, rest);
-        }
-        catch (Exception e) {
-            throw new RuntimeException("Failed to call method: " + first +
-                                       " on " + target, e);
-        }
-    }
-
-    /**
-     * Extract the appropriate property value from the event and
-     * pass it to the action associated with
-     * this <code>EventHandler</code>.
-     *
-     * @param proxy the proxy object
-     * @param method the method in the listener interface
-     * @return the result of applying the action to the target
-     *
-     * @see EventHandler
-     */
-    public Object invoke(final Object proxy, final Method method, final Object[] arguments) {
-        AccessControlContext acc = this.acc;
-        if ((acc == null) && (System.getSecurityManager() != null)) {
-            throw new SecurityException("AccessControlContext is not set");
-        }
-        return AccessController.doPrivileged(new PrivilegedAction<Object>() {
-            public Object run() {
-                return invokeInternal(proxy, method, arguments);
-            }
-        }, acc);
-    }
-
-    private Object invokeInternal(Object proxy, Method method, Object[] arguments) {
-        String methodName = method.getName();
-        if (method.getDeclaringClass() == Object.class)  {
-            // Handle the Object public methods.
-            if (methodName.equals("hashCode"))  {
-                return new Integer(System.identityHashCode(proxy));
-            } else if (methodName.equals("equals")) {
-                return (proxy == arguments[0] ? Boolean.TRUE : Boolean.FALSE);
-            } else if (methodName.equals("toString")) {
-                return proxy.getClass().getName() + '@' + Integer.toHexString(proxy.hashCode());
-            }
-        }
-
-        if (listenerMethodName == null || listenerMethodName.equals(methodName)) {
-            Class[] argTypes = null;
-            Object[] newArgs = null;
-
-            if (eventPropertyName == null) {     // Nullary method.
-                newArgs = new Object[]{};
-                argTypes = new Class[]{};
-            }
-            else {
-                Object input = applyGetters(arguments[0], getEventPropertyName());
-                newArgs = new Object[]{input};
-                argTypes = new Class[]{input == null ? null :
-                                       input.getClass()};
-            }
-            try {
-                int lastDot = action.lastIndexOf('.');
-                if (lastDot != -1) {
-                    target = applyGetters(target, action.substring(0, lastDot));
-                    action = action.substring(lastDot + 1);
-                }
-                Method targetMethod = Statement.getMethod(
-                             target.getClass(), action, argTypes);
-                if (targetMethod == null) {
-                    targetMethod = Statement.getMethod(target.getClass(),
-                             "set" + NameGenerator.capitalize(action), argTypes);
-                }
-                if (targetMethod == null) {
-                    String argTypeString = (argTypes.length == 0)
-                        ? " with no arguments"
-                        : " with argument " + argTypes[0];
-                    throw new RuntimeException(
-                        "No method called " + action + " on " +
-                        target.getClass() + argTypeString);
-                }
-                return MethodUtil.invoke(targetMethod, target, newArgs);
-            }
-            catch (IllegalAccessException ex) {
-                throw new RuntimeException(ex);
-            }
-            catch (InvocationTargetException ex) {
-                Throwable th = ex.getTargetException();
-                throw (th instanceof RuntimeException)
-                        ? (RuntimeException) th
-                        : new RuntimeException(th);
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Creates an implementation of <code>listenerInterface</code> in which
-     * <em>all</em> of the methods in the listener interface apply
-     * the handler's <code>action</code> to the <code>target</code>. This
-     * method is implemented by calling the other, more general,
-     * implementation of the <code>create</code> method with both
-     * the <code>eventPropertyName</code> and the <code>listenerMethodName</code>
-     * taking the value <code>null</code>. Refer to
-     * {@link java.beans.EventHandler#create(Class, Object, String, String)
-     * the general version of create} for a complete description of
-     * the <code>action</code> parameter.
-     * <p>
-     * To create an <code>ActionListener</code> that shows a
-     * <code>JDialog</code> with <code>dialog.show()</code>,
-     * one can write:
-     *
-     *<blockquote>
-     *<pre>
-     *EventHandler.create(ActionListener.class, dialog, "show")
-     *</pre>
-     *</blockquote>
-     *
-     * @param listenerInterface the listener interface to create a proxy for
-     * @param target the object that will perform the action
-     * @param action the name of a (possibly qualified) property or method on
-     *        the target
-     * @return an object that implements <code>listenerInterface</code>
-     *
-     * @throws NullPointerException if <code>listenerInterface</code> is null
-     * @throws NullPointerException if <code>target</code> is null
-     * @throws NullPointerException if <code>action</code> is null
-     *
-     * @see #create(Class, Object, String, String)
-     */
-    public static <T> T create(Class<T> listenerInterface,
-                               Object target, String action)
-    {
-        return create(listenerInterface, target, action, null, null);
-    }
-
-    /**
-    /**
-     * Creates an implementation of <code>listenerInterface</code> in which
-     * <em>all</em> of the methods pass the value of the event
-     * expression, <code>eventPropertyName</code>, to the final method in the
-     * statement, <code>action</code>, which is applied to the <code>target</code>.
-     * This method is implemented by calling the
-     * more general, implementation of the <code>create</code> method with
-     * the <code>listenerMethodName</code> taking the value <code>null</code>.
-     * Refer to
-     * {@link java.beans.EventHandler#create(Class, Object, String, String)
-     * the general version of create} for a complete description of
-     * the <code>action</code> and <code>eventPropertyName</code> parameters.
-     * <p>
-     * To create an <code>ActionListener</code> that sets the
-     * the text of a <code>JLabel</code> to the text value of
-     * the <code>JTextField</code> source of the incoming event,
-     * you can use the following code:
-     *
-     *<blockquote>
-     *<pre>
-     *EventHandler.create(ActionListener.class, label, "text", "source.text");
-     *</pre>
-     *</blockquote>
-     *
-     * This is equivalent to the following code:
-     *<blockquote>
-     *<pre>
-//Equivalent code using an inner class instead of EventHandler.
-     *new ActionListener() {
-     *    public void actionPerformed(ActionEvent event) {
-     *        label.setText(((JTextField)(event.getSource())).getText());
-     *     }
-     *};
-     *</pre>
-     *</blockquote>
-     *
-     * @param listenerInterface the listener interface to create a proxy for
-     * @param target the object that will perform the action
-     * @param action the name of a (possibly qualified) property or method on
-     *        the target
-     * @param eventPropertyName the (possibly qualified) name of a readable property of the incoming event
-     *
-     * @return an object that implements <code>listenerInterface</code>
-     *
-     * @throws NullPointerException if <code>listenerInterface</code> is null
-     * @throws NullPointerException if <code>target</code> is null
-     * @throws NullPointerException if <code>action</code> is null
-     *
-     * @see #create(Class, Object, String, String, String)
-     */
-    public static <T> T create(Class<T> listenerInterface,
-                               Object target, String action,
-                               String eventPropertyName)
-    {
-        return create(listenerInterface, target, action, eventPropertyName, null);
-    }
-
-    /**
-     * Creates an implementation of <code>listenerInterface</code> in which
-     * the method named <code>listenerMethodName</code>
-     * passes the value of the event expression, <code>eventPropertyName</code>,
-     * to the final method in the statement, <code>action</code>, which
-     * is applied to the <code>target</code>. All of the other listener
-     * methods do nothing.
-     * <p>
-     * The <code>eventPropertyName</code> string is used to extract a value
-     * from the incoming event object that is passed to the target
-     * method.  The common case is the target method takes no arguments, in
-     * which case a value of null should be used for the
-     * <code>eventPropertyName</code>.  Alternatively if you want
-     * the incoming event object passed directly to the target method use
-     * the empty string.
-     * The format of the <code>eventPropertyName</code> string is a sequence of
-     * methods or properties where each method or
-     * property is applied to the value returned by the preceeding method
-     * starting from the incoming event object.
-     * The syntax is: <code>propertyName{.propertyName}*</code>
-     * where <code>propertyName</code> matches a method or
-     * property.  For example, to extract the <code>point</code>
-     * property from a <code>MouseEvent</code>, you could use either
-     * <code>"point"</code> or <code>"getPoint"</code> as the
-     * <code>eventPropertyName</code>.  To extract the "text" property from
-     * a <code>MouseEvent</code> with a <code>JLabel</code> source use any
-     * of the following as <code>eventPropertyName</code>:
-     * <code>"source.text"</code>,
-     * <code>"getSource.text"</code> <code>"getSource.getText"</code> or
-     * <code>"source.getText"</code>.  If a method can not be found, or an
-     * exception is generated as part of invoking a method a
-     * <code>RuntimeException</code> will be thrown at dispatch time.  For
-     * example, if the incoming event object is null, and
-     * <code>eventPropertyName</code> is non-null and not empty, a
-     * <code>RuntimeException</code> will be thrown.
-     * <p>
-     * The <code>action</code> argument is of the same format as the
-     * <code>eventPropertyName</code> argument where the last property name
-     * identifies either a method name or writable property.
-     * <p>
-     * If the <code>listenerMethodName</code> is <code>null</code>
-     * <em>all</em> methods in the interface trigger the <code>action</code> to be
-     * executed on the <code>target</code>.
-     * <p>
-     * For example, to create a <code>MouseListener</code> that sets the target
-     * object's <code>origin</code> property to the incoming <code>MouseEvent</code>'s
-     * location (that's the value of <code>mouseEvent.getPoint()</code>) each
-     * time a mouse button is pressed, one would write:
-     *<blockquote>
-     *<pre>
-     *EventHandler.create(MouseListener.class, target, "origin", "point", "mousePressed");
-     *</pre>
-     *</blockquote>
-     *
-     * This is comparable to writing a <code>MouseListener</code> in which all
-     * of the methods except <code>mousePressed</code> are no-ops:
-     *
-     *<blockquote>
-     *<pre>
-//Equivalent code using an inner class instead of EventHandler.
-     *new MouseAdapter() {
-     *    public void mousePressed(MouseEvent e) {
-     *        target.setOrigin(e.getPoint());
-     *    }
-     *};
-     * </pre>
-     *</blockquote>
-     *
-     * @param listenerInterface the listener interface to create a proxy for
-     * @param target the object that will perform the action
-     * @param action the name of a (possibly qualified) property or method on
-     *        the target
-     * @param eventPropertyName the (possibly qualified) name of a readable property of the incoming event
-     * @param listenerMethodName the name of the method in the listener interface that should trigger the action
-     *
-     * @return an object that implements <code>listenerInterface</code>
-     *
-     * @throws NullPointerException if <code>listenerInterface</code> is null
-     * @throws NullPointerException if <code>target</code> is null
-     * @throws NullPointerException if <code>action</code> is null
-     *
-     * @see EventHandler
-     */
-    public static <T> T create(Class<T> listenerInterface,
-                               Object target, String action,
-                               String eventPropertyName,
-                               String listenerMethodName)
-    {
-        // Create this first to verify target/action are non-null
-        EventHandler eventHandler = new EventHandler(target, action,
-                                                     eventPropertyName,
-                                                     listenerMethodName);
-        if (listenerInterface == null) {
-            throw new NullPointerException(
-                          "listenerInterface must be non-null");
-        }
-        return (T)Proxy.newProxyInstance(target.getClass().getClassLoader(),
-                                         new Class[] {listenerInterface},
-                                         eventHandler);
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/EventSetDescriptor.java b/ojluni/src/main/java/java/beans/EventSetDescriptor.java
deleted file mode 100755
index 83b5e0d..0000000
--- a/ojluni/src/main/java/java/beans/EventSetDescriptor.java
+++ /dev/null
@@ -1,536 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, 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.
- */
-
-package java.beans;
-
-import java.lang.ref.Reference;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-
-/**
- * An EventSetDescriptor describes a group of events that a given Java
- * bean fires.
- * <P>
- * The given group of events are all delivered as method calls on a single
- * event listener interface, and an event listener object can be registered
- * via a call on a registration method supplied by the event source.
- */
-public class EventSetDescriptor extends FeatureDescriptor {
-
-    private MethodDescriptor[] listenerMethodDescriptors;
-    private MethodDescriptor addMethodDescriptor;
-    private MethodDescriptor removeMethodDescriptor;
-    private MethodDescriptor getMethodDescriptor;
-
-    private Reference<Method[]> listenerMethodsRef;
-    private Reference<Class> listenerTypeRef;
-
-    private boolean unicast;
-    private boolean inDefaultEventSet = true;
-
-    /**
-     * Creates an <TT>EventSetDescriptor</TT> assuming that you are
-     * following the most simple standard design pattern where a named
-     * event &quot;fred&quot; is (1) delivered as a call on the single method of
-     * interface FredListener, (2) has a single argument of type FredEvent,
-     * and (3) where the FredListener may be registered with a call on an
-     * addFredListener method of the source component and removed with a
-     * call on a removeFredListener method.
-     *
-     * @param sourceClass  The class firing the event.
-     * @param eventSetName  The programmatic name of the event.  E.g. &quot;fred&quot;.
-     *          Note that this should normally start with a lower-case character.
-     * @param listenerType  The target interface that events
-     *          will get delivered to.
-     * @param listenerMethodName  The method that will get called when the event gets
-     *          delivered to its target listener interface.
-     * @exception IntrospectionException if an exception occurs during
-     *              introspection.
-     */
-    public EventSetDescriptor(Class<?> sourceClass, String eventSetName,
-                Class<?> listenerType, String listenerMethodName)
-                throws IntrospectionException {
-        this(sourceClass, eventSetName, listenerType,
-             new String[] { listenerMethodName },
-             Introspector.ADD_PREFIX + getListenerClassName(listenerType),
-             Introspector.REMOVE_PREFIX + getListenerClassName(listenerType),
-             Introspector.GET_PREFIX + getListenerClassName(listenerType) + "s");
-
-        String eventName = NameGenerator.capitalize(eventSetName) + "Event";
-        Method[] listenerMethods = getListenerMethods();
-        if (listenerMethods.length > 0) {
-            Class[] args = getParameterTypes(getClass0(), listenerMethods[0]);
-            // Check for EventSet compliance. Special case for vetoableChange. See 4529996
-            if (!"vetoableChange".equals(eventSetName) && !args[0].getName().endsWith(eventName)) {
-                throw new IntrospectionException("Method \"" + listenerMethodName +
-                                                 "\" should have argument \"" +
-                                                 eventName + "\"");
-            }
-        }
-    }
-
-    private static String getListenerClassName(Class cls) {
-        String className = cls.getName();
-        return className.substring(className.lastIndexOf('.') + 1);
-    }
-
-    /**
-     * Creates an <TT>EventSetDescriptor</TT> from scratch using
-     * string names.
-     *
-     * @param sourceClass  The class firing the event.
-     * @param eventSetName The programmatic name of the event set.
-     *          Note that this should normally start with a lower-case character.
-     * @param listenerType  The Class of the target interface that events
-     *          will get delivered to.
-     * @param listenerMethodNames The names of the methods that will get called
-     *          when the event gets delivered to its target listener interface.
-     * @param addListenerMethodName  The name of the method on the event source
-     *          that can be used to register an event listener object.
-     * @param removeListenerMethodName  The name of the method on the event source
-     *          that can be used to de-register an event listener object.
-     * @exception IntrospectionException if an exception occurs during
-     *              introspection.
-     */
-    public EventSetDescriptor(Class<?> sourceClass,
-                String eventSetName,
-                Class<?> listenerType,
-                String listenerMethodNames[],
-                String addListenerMethodName,
-                String removeListenerMethodName)
-                throws IntrospectionException {
-        this(sourceClass, eventSetName, listenerType,
-             listenerMethodNames, addListenerMethodName,
-             removeListenerMethodName, null);
-    }
-
-    /**
-     * This constructor creates an EventSetDescriptor from scratch using
-     * string names.
-     *
-     * @param sourceClass  The class firing the event.
-     * @param eventSetName The programmatic name of the event set.
-     *          Note that this should normally start with a lower-case character.
-     * @param listenerType  The Class of the target interface that events
-     *          will get delivered to.
-     * @param listenerMethodNames The names of the methods that will get called
-     *          when the event gets delivered to its target listener interface.
-     * @param addListenerMethodName  The name of the method on the event source
-     *          that can be used to register an event listener object.
-     * @param removeListenerMethodName  The name of the method on the event source
-     *          that can be used to de-register an event listener object.
-     * @param getListenerMethodName The method on the event source that
-     *          can be used to access the array of event listener objects.
-     * @exception IntrospectionException if an exception occurs during
-     *              introspection.
-     * @since 1.4
-     */
-    public EventSetDescriptor(Class<?> sourceClass,
-                String eventSetName,
-                Class<?> listenerType,
-                String listenerMethodNames[],
-                String addListenerMethodName,
-                String removeListenerMethodName,
-                String getListenerMethodName)
-                throws IntrospectionException {
-        if (sourceClass == null || eventSetName == null || listenerType == null) {
-            throw new NullPointerException();
-        }
-        setName(eventSetName);
-        setClass0(sourceClass);
-        setListenerType(listenerType);
-
-        Method[] listenerMethods = new Method[listenerMethodNames.length];
-        for (int i = 0; i < listenerMethodNames.length; i++) {
-            // Check for null names
-            if (listenerMethodNames[i] == null) {
-                throw new NullPointerException();
-            }
-            listenerMethods[i] = getMethod(listenerType, listenerMethodNames[i], 1);
-        }
-        setListenerMethods(listenerMethods);
-
-        setAddListenerMethod(getMethod(sourceClass, addListenerMethodName, 1));
-        setRemoveListenerMethod(getMethod(sourceClass, removeListenerMethodName, 1));
-
-        // Be more forgiving of not finding the getListener method.
-        Method method = Introspector.findMethod(sourceClass, getListenerMethodName, 0);
-        if (method != null) {
-            setGetListenerMethod(method);
-        }
-    }
-
-    private static Method getMethod(Class cls, String name, int args)
-        throws IntrospectionException {
-        if (name == null) {
-            return null;
-        }
-        Method method = Introspector.findMethod(cls, name, args);
-        if ((method == null) || Modifier.isStatic(method.getModifiers())) {
-            throw new IntrospectionException("Method not found: " + name +
-                                             " on class " + cls.getName());
-        }
-        return method;
-    }
-
-    /**
-     * Creates an <TT>EventSetDescriptor</TT> from scratch using
-     * <TT>java.lang.reflect.Method</TT> and <TT>java.lang.Class</TT> objects.
-     *
-     * @param eventSetName The programmatic name of the event set.
-     * @param listenerType The Class for the listener interface.
-     * @param listenerMethods  An array of Method objects describing each
-     *          of the event handling methods in the target listener.
-     * @param addListenerMethod  The method on the event source
-     *          that can be used to register an event listener object.
-     * @param removeListenerMethod  The method on the event source
-     *          that can be used to de-register an event listener object.
-     * @exception IntrospectionException if an exception occurs during
-     *              introspection.
-     */
-    public EventSetDescriptor(String eventSetName,
-                Class<?> listenerType,
-                Method listenerMethods[],
-                Method addListenerMethod,
-                Method removeListenerMethod)
-                throws IntrospectionException {
-        this(eventSetName, listenerType, listenerMethods,
-             addListenerMethod, removeListenerMethod, null);
-    }
-
-    /**
-     * This constructor creates an EventSetDescriptor from scratch using
-     * java.lang.reflect.Method and java.lang.Class objects.
-     *
-     * @param eventSetName The programmatic name of the event set.
-     * @param listenerType The Class for the listener interface.
-     * @param listenerMethods  An array of Method objects describing each
-     *          of the event handling methods in the target listener.
-     * @param addListenerMethod  The method on the event source
-     *          that can be used to register an event listener object.
-     * @param removeListenerMethod  The method on the event source
-     *          that can be used to de-register an event listener object.
-     * @param getListenerMethod The method on the event source
-     *          that can be used to access the array of event listener objects.
-     * @exception IntrospectionException if an exception occurs during
-     *              introspection.
-     * @since 1.4
-     */
-    public EventSetDescriptor(String eventSetName,
-                Class<?> listenerType,
-                Method listenerMethods[],
-                Method addListenerMethod,
-                Method removeListenerMethod,
-                Method getListenerMethod)
-                throws IntrospectionException {
-        setName(eventSetName);
-        setListenerMethods(listenerMethods);
-        setAddListenerMethod(addListenerMethod);
-        setRemoveListenerMethod( removeListenerMethod);
-        setGetListenerMethod(getListenerMethod);
-        setListenerType(listenerType);
-    }
-
-    /**
-     * Creates an <TT>EventSetDescriptor</TT> from scratch using
-     * <TT>java.lang.reflect.MethodDescriptor</TT> and <TT>java.lang.Class</TT>
-     *  objects.
-     *
-     * @param eventSetName The programmatic name of the event set.
-     * @param listenerType The Class for the listener interface.
-     * @param listenerMethodDescriptors  An array of MethodDescriptor objects
-     *           describing each of the event handling methods in the
-     *           target listener.
-     * @param addListenerMethod  The method on the event source
-     *          that can be used to register an event listener object.
-     * @param removeListenerMethod  The method on the event source
-     *          that can be used to de-register an event listener object.
-     * @exception IntrospectionException if an exception occurs during
-     *              introspection.
-     */
-    public EventSetDescriptor(String eventSetName,
-                Class<?> listenerType,
-                MethodDescriptor listenerMethodDescriptors[],
-                Method addListenerMethod,
-                Method removeListenerMethod)
-                throws IntrospectionException {
-        setName(eventSetName);
-        this.listenerMethodDescriptors = listenerMethodDescriptors;
-        setAddListenerMethod(addListenerMethod);
-        setRemoveListenerMethod(removeListenerMethod);
-        setListenerType(listenerType);
-    }
-
-    /**
-     * Gets the <TT>Class</TT> object for the target interface.
-     *
-     * @return The Class object for the target interface that will
-     * get invoked when the event is fired.
-     */
-    public Class<?> getListenerType() {
-        return (this.listenerTypeRef != null)
-                ? this.listenerTypeRef.get()
-                : null;
-    }
-
-    private void setListenerType(Class cls) {
-        this.listenerTypeRef = getWeakReference(cls);
-    }
-
-    /**
-     * Gets the methods of the target listener interface.
-     *
-     * @return An array of <TT>Method</TT> objects for the target methods
-     * within the target listener interface that will get called when
-     * events are fired.
-     */
-    public synchronized Method[] getListenerMethods() {
-        Method[] methods = getListenerMethods0();
-        if (methods == null) {
-            if (listenerMethodDescriptors != null) {
-                methods = new Method[listenerMethodDescriptors.length];
-                for (int i = 0; i < methods.length; i++) {
-                    methods[i] = listenerMethodDescriptors[i].getMethod();
-                }
-            }
-            setListenerMethods(methods);
-        }
-        return methods;
-    }
-
-    private void setListenerMethods(Method[] methods) {
-        if (methods == null) {
-            return;
-        }
-        if (listenerMethodDescriptors == null) {
-            listenerMethodDescriptors = new MethodDescriptor[methods.length];
-            for (int i = 0; i < methods.length; i++) {
-                listenerMethodDescriptors[i] = new MethodDescriptor(methods[i]);
-            }
-        }
-        this.listenerMethodsRef = getSoftReference(methods);
-    }
-
-    private Method[] getListenerMethods0() {
-        return (this.listenerMethodsRef != null)
-                ? this.listenerMethodsRef.get()
-                : null;
-    }
-
-    /**
-     * Gets the <code>MethodDescriptor</code>s of the target listener interface.
-     *
-     * @return An array of <code>MethodDescriptor</code> objects for the target methods
-     * within the target listener interface that will get called when
-     * events are fired.
-     */
-    public synchronized MethodDescriptor[] getListenerMethodDescriptors() {
-        return listenerMethodDescriptors;
-    }
-
-    /**
-     * Gets the method used to add event listeners.
-     *
-     * @return The method used to register a listener at the event source.
-     */
-    public synchronized Method getAddListenerMethod() {
-        return getMethod(this.addMethodDescriptor);
-    }
-
-    private synchronized void setAddListenerMethod(Method method) {
-        if (method == null) {
-            return;
-        }
-        if (getClass0() == null) {
-            setClass0(method.getDeclaringClass());
-        }
-        addMethodDescriptor = new MethodDescriptor(method);
-        setTransient(method.getAnnotation(Transient.class));
-    }
-
-    /**
-     * Gets the method used to remove event listeners.
-     *
-     * @return The method used to remove a listener at the event source.
-     */
-    public synchronized Method getRemoveListenerMethod() {
-        return getMethod(this.removeMethodDescriptor);
-    }
-
-    private synchronized void setRemoveListenerMethod(Method method) {
-        if (method == null) {
-            return;
-        }
-        if (getClass0() == null) {
-            setClass0(method.getDeclaringClass());
-        }
-        removeMethodDescriptor = new MethodDescriptor(method);
-        setTransient(method.getAnnotation(Transient.class));
-    }
-
-    /**
-     * Gets the method used to access the registered event listeners.
-     *
-     * @return The method used to access the array of listeners at the event
-     *         source or null if it doesn't exist.
-     * @since 1.4
-     */
-    public synchronized Method getGetListenerMethod() {
-        return getMethod(this.getMethodDescriptor);
-    }
-
-    private synchronized void setGetListenerMethod(Method method) {
-        if (method == null) {
-            return;
-        }
-        if (getClass0() == null) {
-            setClass0(method.getDeclaringClass());
-        }
-        getMethodDescriptor = new MethodDescriptor(method);
-        setTransient(method.getAnnotation(Transient.class));
-    }
-
-    /**
-     * Mark an event set as unicast (or not).
-     *
-     * @param unicast  True if the event set is unicast.
-     */
-    public void setUnicast(boolean unicast) {
-        this.unicast = unicast;
-    }
-
-    /**
-     * Normally event sources are multicast.  However there are some
-     * exceptions that are strictly unicast.
-     *
-     * @return  <TT>true</TT> if the event set is unicast.
-     *          Defaults to <TT>false</TT>.
-     */
-    public boolean isUnicast() {
-        return unicast;
-    }
-
-    /**
-     * Marks an event set as being in the &quot;default&quot; set (or not).
-     * By default this is <TT>true</TT>.
-     *
-     * @param inDefaultEventSet <code>true</code> if the event set is in
-     *                          the &quot;default&quot; set,
-     *                          <code>false</code> if not
-     */
-    public void setInDefaultEventSet(boolean inDefaultEventSet) {
-        this.inDefaultEventSet = inDefaultEventSet;
-    }
-
-    /**
-     * Reports if an event set is in the &quot;default&quot; set.
-     *
-     * @return  <TT>true</TT> if the event set is in
-     *          the &quot;default&quot; set.  Defaults to <TT>true</TT>.
-     */
-    public boolean isInDefaultEventSet() {
-        return inDefaultEventSet;
-    }
-
-    /*
-     * Package-private constructor
-     * Merge two event set descriptors.  Where they conflict, give the
-     * second argument (y) priority over the first argument (x).
-     *
-     * @param x  The first (lower priority) EventSetDescriptor
-     * @param y  The second (higher priority) EventSetDescriptor
-     */
-    EventSetDescriptor(EventSetDescriptor x, EventSetDescriptor y) {
-        super(x,y);
-        listenerMethodDescriptors = x.listenerMethodDescriptors;
-        if (y.listenerMethodDescriptors != null) {
-            listenerMethodDescriptors = y.listenerMethodDescriptors;
-        }
-
-        listenerTypeRef = x.listenerTypeRef;
-        if (y.listenerTypeRef != null) {
-            listenerTypeRef = y.listenerTypeRef;
-        }
-
-        addMethodDescriptor = x.addMethodDescriptor;
-        if (y.addMethodDescriptor != null) {
-            addMethodDescriptor = y.addMethodDescriptor;
-        }
-
-        removeMethodDescriptor = x.removeMethodDescriptor;
-        if (y.removeMethodDescriptor != null) {
-            removeMethodDescriptor = y.removeMethodDescriptor;
-        }
-
-        getMethodDescriptor = x.getMethodDescriptor;
-        if (y.getMethodDescriptor != null) {
-            getMethodDescriptor = y.getMethodDescriptor;
-        }
-
-        unicast = y.unicast;
-        if (!x.inDefaultEventSet || !y.inDefaultEventSet) {
-            inDefaultEventSet = false;
-        }
-    }
-
-    /*
-     * Package-private dup constructor
-     * This must isolate the new object from any changes to the old object.
-     */
-    EventSetDescriptor(EventSetDescriptor old) {
-        super(old);
-        if (old.listenerMethodDescriptors != null) {
-            int len = old.listenerMethodDescriptors.length;
-            listenerMethodDescriptors = new MethodDescriptor[len];
-            for (int i = 0; i < len; i++) {
-                listenerMethodDescriptors[i] = new MethodDescriptor(
-                                        old.listenerMethodDescriptors[i]);
-            }
-        }
-        listenerTypeRef = old.listenerTypeRef;
-
-        addMethodDescriptor = old.addMethodDescriptor;
-        removeMethodDescriptor = old.removeMethodDescriptor;
-        getMethodDescriptor = old.getMethodDescriptor;
-
-        unicast = old.unicast;
-        inDefaultEventSet = old.inDefaultEventSet;
-    }
-
-    void appendTo(StringBuilder sb) {
-        appendTo(sb, "unicast", this.unicast);
-        appendTo(sb, "inDefaultEventSet", this.inDefaultEventSet);
-        appendTo(sb, "listenerType", this.listenerTypeRef);
-        appendTo(sb, "getListenerMethod", getMethod(this.getMethodDescriptor));
-        appendTo(sb, "addListenerMethod", getMethod(this.addMethodDescriptor));
-        appendTo(sb, "removeListenerMethod", getMethod(this.removeMethodDescriptor));
-    }
-
-    private static Method getMethod(MethodDescriptor descriptor) {
-        return (descriptor != null)
-                ? descriptor.getMethod()
-                : null;
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/ExceptionListener.java b/ojluni/src/main/java/java/beans/ExceptionListener.java
deleted file mode 100755
index 9a6b2ff..0000000
--- a/ojluni/src/main/java/java/beans/ExceptionListener.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-package java.beans;
-
-/**
- * An ExceptionListener is notified of internal exceptions.
- *
- * @since 1.4
- *
- * @author Philip Milne
- */
-public interface ExceptionListener {
-    /**
-     * This method is called when a recoverable exception has
-     * been caught.
-     *
-     * @param e The exception that was caught.
-     *
-     */
-    public void exceptionThrown(Exception e);
-}
diff --git a/ojluni/src/main/java/java/beans/Expression.java b/ojluni/src/main/java/java/beans/Expression.java
deleted file mode 100755
index f7a15c3..0000000
--- a/ojluni/src/main/java/java/beans/Expression.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (c) 2000, 2010, 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.
- */
-
-package java.beans;
-
-/**
- * An <code>Expression</code> object represents a primitive expression
- * in which a single method is applied to a target and a set of
- * arguments to return a result - as in <code>"a.getFoo()"</code>.
- * <p>
- * In addition to the properties of the super class, the
- * <code>Expression</code> object provides a <em>value</em> which
- * is the object returned when this expression is evaluated.
- * The return value is typically not provided by the caller and
- * is instead computed by dynamically finding the method and invoking
- * it when the first call to <code>getValue</code> is made.
- *
- * @see #getValue
- * @see #setValue
- *
- * @since 1.4
- *
- * @author Philip Milne
- */
-public class Expression extends Statement {
-
-    private static Object unbound = new Object();
-
-    private Object value = unbound;
-
-    /**
-     * Creates a new {@link Expression} object
-     * for the specified target object to invoke the method
-     * specified by the name and by the array of arguments.
-     * <p>
-     * The {@code target} and the {@code methodName} values should not be {@code null}.
-     * Otherwise an attempt to execute this {@code Expression}
-     * will result in a {@code NullPointerException}.
-     * If the {@code arguments} value is {@code null},
-     * an empty array is used as the value of the {@code arguments} property.
-     *
-     * @param target  the target object of this expression
-     * @param methodName  the name of the method to invoke on the specified target
-     * @param arguments  the array of arguments to invoke the specified method
-     *
-     * @see #getValue
-     */
-    @ConstructorProperties({"target", "methodName", "arguments"})
-    public Expression(Object target, String methodName, Object[] arguments) {
-        super(target, methodName, arguments);
-    }
-
-    /**
-     * Creates a new {@link Expression} object with the specified value
-     * for the specified target object to invoke the  method
-     * specified by the name and by the array of arguments.
-     * The {@code value} value is used as the value of the {@code value} property,
-     * so the {@link #getValue} method will return it
-     * without executing this {@code Expression}.
-     * <p>
-     * The {@code target} and the {@code methodName} values should not be {@code null}.
-     * Otherwise an attempt to execute this {@code Expression}
-     * will result in a {@code NullPointerException}.
-     * If the {@code arguments} value is {@code null},
-     * an empty array is used as the value of the {@code arguments} property.
-     *
-     * @param value  the value of this expression
-     * @param target  the target object of this expression
-     * @param methodName  the name of the method to invoke on the specified target
-     * @param arguments  the array of arguments to invoke the specified method
-     *
-     * @see #setValue
-     */
-    public Expression(Object value, Object target, String methodName, Object[] arguments) {
-        this(target, methodName, arguments);
-        setValue(value);
-    }
-
-    /**
-     * {@inheritDoc}
-     * <p>
-     * If the invoked method completes normally,
-     * the value it returns is copied in the {@code value} property.
-     * Note that the {@code value} property is set to {@code null},
-     * if the return type of the underlying method is {@code void}.
-     *
-     * @throws NullPointerException if the value of the {@code target} or
-     *                              {@code methodName} property is {@code null}
-     * @throws NoSuchMethodException if a matching method is not found
-     * @throws SecurityException if a security manager exists and
-     *                           it denies the method invocation
-     * @throws Exception that is thrown by the invoked method
-     *
-     * @see java.lang.reflect.Method
-     * @since 1.7
-     */
-    @Override
-    public void execute() throws Exception {
-        setValue(invoke());
-    }
-
-    /**
-     * If the value property of this instance is not already set,
-     * this method dynamically finds the method with the specified
-     * methodName on this target with these arguments and calls it.
-     * The result of the method invocation is first copied
-     * into the value property of this expression and then returned
-     * as the result of <code>getValue</code>. If the value property
-     * was already set, either by a call to <code>setValue</code>
-     * or a previous call to <code>getValue</code> then the value
-     * property is returned without either looking up or calling the method.
-     * <p>
-     * The value property of an <code>Expression</code> is set to
-     * a unique private (non-<code>null</code>) value by default and
-     * this value is used as an internal indication that the method
-     * has not yet been called. A return value of <code>null</code>
-     * replaces this default value in the same way that any other value
-     * would, ensuring that expressions are never evaluated more than once.
-     * <p>
-     * See the <code>excecute</code> method for details on how
-     * methods are chosen using the dynamic types of the target
-     * and arguments.
-     *
-     * @see Statement#execute
-     * @see #setValue
-     *
-     * @return The result of applying this method to these arguments.
-     */
-    public Object getValue() throws Exception {
-        if (value == unbound) {
-            setValue(invoke());
-        }
-        return value;
-    }
-
-    /**
-     * Sets the value of this expression to <code>value</code>.
-     * This value will be returned by the getValue method
-     * without calling the method associated with this
-     * expression.
-     *
-     * @param value The value of this expression.
-     *
-     * @see #getValue
-     */
-    public void setValue(Object value) {
-        this.value = value;
-    }
-
-    /*pp*/ String instanceName(Object instance) {
-        return instance == unbound ? "<unbound>" : super.instanceName(instance);
-    }
-
-    /**
-     * Prints the value of this expression using a Java-style syntax.
-     */
-    public String toString() {
-        return instanceName(value) + "=" + super.toString();
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/FeatureDescriptor.java b/ojluni/src/main/java/java/beans/FeatureDescriptor.java
deleted file mode 100755
index fcfc9d7..0000000
--- a/ojluni/src/main/java/java/beans/FeatureDescriptor.java
+++ /dev/null
@@ -1,445 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, 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.
- */
-
-package java.beans;
-
-import com.sun.beans.TypeResolver;
-
-import java.lang.ref.Reference;
-import java.lang.ref.WeakReference;
-import java.lang.ref.SoftReference;
-
-import java.lang.reflect.Method;
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Map.Entry;
-
-/**
- * The FeatureDescriptor class is the common baseclass for PropertyDescriptor,
- * EventSetDescriptor, and MethodDescriptor, etc.
- * <p>
- * It supports some common information that can be set and retrieved for
- * any of the introspection descriptors.
- * <p>
- * In addition it provides an extension mechanism so that arbitrary
- * attribute/value pairs can be associated with a design feature.
- */
-
-public class FeatureDescriptor {
-    private static final String TRANSIENT = "transient";
-
-    private Reference<Class> classRef;
-
-    /**
-     * Constructs a <code>FeatureDescriptor</code>.
-     */
-    public FeatureDescriptor() {
-    }
-
-    /**
-     * Gets the programmatic name of this feature.
-     *
-     * @return The programmatic name of the property/method/event
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Sets the programmatic name of this feature.
-     *
-     * @param name  The programmatic name of the property/method/event
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * Gets the localized display name of this feature.
-     *
-     * @return The localized display name for the property/method/event.
-     *  This defaults to the same as its programmatic name from getName.
-     */
-    public String getDisplayName() {
-        if (displayName == null) {
-            return getName();
-        }
-        return displayName;
-    }
-
-    /**
-     * Sets the localized display name of this feature.
-     *
-     * @param displayName  The localized display name for the
-     *          property/method/event.
-     */
-    public void setDisplayName(String displayName) {
-        this.displayName = displayName;
-    }
-
-    /**
-     * The "expert" flag is used to distinguish between those features that are
-     * intended for expert users from those that are intended for normal users.
-     *
-     * @return True if this feature is intended for use by experts only.
-     */
-    public boolean isExpert() {
-        return expert;
-    }
-
-    /**
-     * The "expert" flag is used to distinguish between features that are
-     * intended for expert users from those that are intended for normal users.
-     *
-     * @param expert True if this feature is intended for use by experts only.
-     */
-    public void setExpert(boolean expert) {
-        this.expert = expert;
-    }
-
-    /**
-     * The "hidden" flag is used to identify features that are intended only
-     * for tool use, and which should not be exposed to humans.
-     *
-     * @return True if this feature should be hidden from human users.
-     */
-    public boolean isHidden() {
-        return hidden;
-    }
-
-    /**
-     * The "hidden" flag is used to identify features that are intended only
-     * for tool use, and which should not be exposed to humans.
-     *
-     * @param hidden  True if this feature should be hidden from human users.
-     */
-    public void setHidden(boolean hidden) {
-        this.hidden = hidden;
-    }
-
-    /**
-     * The "preferred" flag is used to identify features that are particularly
-     * important for presenting to humans.
-     *
-     * @return True if this feature should be preferentially shown to human users.
-     */
-    public boolean isPreferred() {
-        return preferred;
-    }
-
-    /**
-     * The "preferred" flag is used to identify features that are particularly
-     * important for presenting to humans.
-     *
-     * @param preferred  True if this feature should be preferentially shown
-     *                   to human users.
-     */
-    public void setPreferred(boolean preferred) {
-        this.preferred = preferred;
-    }
-
-    /**
-     * Gets the short description of this feature.
-     *
-     * @return  A localized short description associated with this
-     *   property/method/event.  This defaults to be the display name.
-     */
-    public String getShortDescription() {
-        if (shortDescription == null) {
-            return getDisplayName();
-        }
-        return shortDescription;
-    }
-
-    /**
-     * You can associate a short descriptive string with a feature.  Normally
-     * these descriptive strings should be less than about 40 characters.
-     * @param text  A (localized) short description to be associated with
-     * this property/method/event.
-     */
-    public void setShortDescription(String text) {
-        shortDescription = text;
-    }
-
-    /**
-     * Associate a named attribute with this feature.
-     *
-     * @param attributeName  The locale-independent name of the attribute
-     * @param value  The value.
-     */
-    public void setValue(String attributeName, Object value) {
-        getTable().put(attributeName, value);
-    }
-
-    /**
-     * Retrieve a named attribute with this feature.
-     *
-     * @param attributeName  The locale-independent name of the attribute
-     * @return  The value of the attribute.  May be null if
-     *     the attribute is unknown.
-     */
-    public Object getValue(String attributeName) {
-        return (this.table != null)
-                ? this.table.get(attributeName)
-                : null;
-    }
-
-    /**
-     * Gets an enumeration of the locale-independent names of this
-     * feature.
-     *
-     * @return  An enumeration of the locale-independent names of any
-     *    attributes that have been registered with setValue.
-     */
-    public Enumeration<String> attributeNames() {
-        return getTable().keys();
-    }
-
-    /**
-     * Package-private constructor,
-     * Merge information from two FeatureDescriptors.
-     * The merged hidden and expert flags are formed by or-ing the values.
-     * In the event of other conflicts, the second argument (y) is
-     * given priority over the first argument (x).
-     *
-     * @param x  The first (lower priority) MethodDescriptor
-     * @param y  The second (higher priority) MethodDescriptor
-     */
-    FeatureDescriptor(FeatureDescriptor x, FeatureDescriptor y) {
-        expert = x.expert | y.expert;
-        hidden = x.hidden | y.hidden;
-        preferred = x.preferred | y.preferred;
-        name = y.name;
-        shortDescription = x.shortDescription;
-        if (y.shortDescription != null) {
-            shortDescription = y.shortDescription;
-        }
-        displayName = x.displayName;
-        if (y.displayName != null) {
-            displayName = y.displayName;
-        }
-        classRef = x.classRef;
-        if (y.classRef != null) {
-            classRef = y.classRef;
-        }
-        addTable(x.table);
-        addTable(y.table);
-    }
-
-    /*
-     * Package-private dup constructor
-     * This must isolate the new object from any changes to the old object.
-     */
-    FeatureDescriptor(FeatureDescriptor old) {
-        expert = old.expert;
-        hidden = old.hidden;
-        preferred = old.preferred;
-        name = old.name;
-        shortDescription = old.shortDescription;
-        displayName = old.displayName;
-        classRef = old.classRef;
-
-        addTable(old.table);
-    }
-
-    /**
-     * Copies all values from the specified attribute table.
-     * If some attribute is exist its value should be overridden.
-     *
-     * @param table  the attribute table with new values
-     */
-    private void addTable(Hashtable<String, Object> table) {
-        if ((table != null) && !table.isEmpty()) {
-            getTable().putAll(table);
-        }
-    }
-
-    /**
-     * Returns the initialized attribute table.
-     *
-     * @return the initialized attribute table
-     */
-    private Hashtable<String, Object> getTable() {
-        if (this.table == null) {
-            this.table = new Hashtable<String, Object>();
-        }
-        return this.table;
-    }
-
-    /**
-     * Sets the "transient" attribute according to the annotation.
-     * If the "transient" attribute is already set
-     * it should not be changed.
-     *
-     * @param annotation  the annotation of the element of the feature
-     */
-    void setTransient(Transient annotation) {
-        if ((annotation != null) && (null == getValue(TRANSIENT))) {
-            setValue(TRANSIENT, annotation.value());
-        }
-    }
-
-    /**
-     * Indicates whether the feature is transient.
-     *
-     * @return {@code true} if the feature is transient,
-     *         {@code false} otherwise
-     */
-    boolean isTransient() {
-        Object value = getValue(TRANSIENT);
-        return (value instanceof Boolean)
-                ? (Boolean) value
-                : false;
-    }
-
-    // Package private methods for recreating the weak/soft referent
-
-    void setClass0(Class cls) {
-        this.classRef = getWeakReference(cls);
-    }
-
-    Class getClass0() {
-        return (this.classRef != null)
-                ? this.classRef.get()
-                : null;
-    }
-
-    /**
-     * Creates a new soft reference that refers to the given object.
-     *
-     * @return a new soft reference or <code>null</code> if object is <code>null</code>
-     *
-     * @see SoftReference
-     */
-    static <T> Reference<T> getSoftReference(T object) {
-        return (object != null)
-                ? new SoftReference<T>(object)
-                : null;
-    }
-
-    /**
-     * Creates a new weak reference that refers to the given object.
-     *
-     * @return a new weak reference or <code>null</code> if object is <code>null</code>
-     *
-     * @see WeakReference
-     */
-    static <T> Reference<T> getWeakReference(T object) {
-        return (object != null)
-                ? new WeakReference<T>(object)
-                : null;
-    }
-
-    /**
-     * Resolves the return type of the method.
-     *
-     * @param base    the class that contains the method in the hierarchy
-     * @param method  the object that represents the method
-     * @return a class identifying the return type of the method
-     *
-     * @see Method#getGenericReturnType
-     * @see Method#getReturnType
-     */
-    static Class getReturnType(Class base, Method method) {
-        if (base == null) {
-            base = method.getDeclaringClass();
-        }
-        return TypeResolver.erase(TypeResolver.resolveInClass(base, method.getGenericReturnType()));
-    }
-
-    /**
-     * Resolves the parameter types of the method.
-     *
-     * @param base    the class that contains the method in the hierarchy
-     * @param method  the object that represents the method
-     * @return an array of classes identifying the parameter types of the method
-     *
-     * @see Method#getGenericParameterTypes
-     * @see Method#getParameterTypes
-     */
-    static Class[] getParameterTypes(Class base, Method method) {
-        if (base == null) {
-            base = method.getDeclaringClass();
-        }
-        return TypeResolver.erase(TypeResolver.resolveInClass(base, method.getGenericParameterTypes()));
-    }
-
-    private boolean expert;
-    private boolean hidden;
-    private boolean preferred;
-    private String shortDescription;
-    private String name;
-    private String displayName;
-    private Hashtable<String, Object> table;
-
-    /**
-     * Returns a string representation of the object.
-     *
-     * @return a string representation of the object
-     *
-     * @since 1.7
-     */
-    public String toString() {
-        StringBuilder sb = new StringBuilder(getClass().getName());
-        sb.append("[name=").append(this.name);
-        appendTo(sb, "displayName", this.displayName);
-        appendTo(sb, "shortDescription", this.shortDescription);
-        appendTo(sb, "preferred", this.preferred);
-        appendTo(sb, "hidden", this.hidden);
-        appendTo(sb, "expert", this.expert);
-        if ((this.table != null) && !this.table.isEmpty()) {
-            sb.append("; values={");
-            for (Entry<String, Object> entry : this.table.entrySet()) {
-                sb.append(entry.getKey()).append("=").append(entry.getValue()).append("; ");
-            }
-            sb.setLength(sb.length() - 2);
-            sb.append("}");
-        }
-        appendTo(sb);
-        return sb.append("]").toString();
-    }
-
-    void appendTo(StringBuilder sb) {
-    }
-
-    static void appendTo(StringBuilder sb, String name, Reference reference) {
-        if (reference != null) {
-            appendTo(sb, name, reference.get());
-        }
-    }
-
-    static void appendTo(StringBuilder sb, String name, Object value) {
-        if (value != null) {
-            sb.append("; ").append(name).append("=").append(value);
-        }
-    }
-
-    static void appendTo(StringBuilder sb, String name, boolean value) {
-        if (value) {
-            sb.append("; ").append(name);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/IndexedPropertyDescriptor.java b/ojluni/src/main/java/java/beans/IndexedPropertyDescriptor.java
deleted file mode 100755
index 99d1c7e..0000000
--- a/ojluni/src/main/java/java/beans/IndexedPropertyDescriptor.java
+++ /dev/null
@@ -1,534 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, 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.
- */
-
-package java.beans;
-
-import java.lang.ref.Reference;
-import java.lang.reflect.Method;
-
-/**
- * An IndexedPropertyDescriptor describes a property that acts like an
- * array and has an indexed read and/or indexed write method to access
- * specific elements of the array.
- * <p>
- * An indexed property may also provide simple non-indexed read and write
- * methods.  If these are present, they read and write arrays of the type
- * returned by the indexed read method.
- */
-
-public class IndexedPropertyDescriptor extends PropertyDescriptor {
-
-    private Reference<Class> indexedPropertyTypeRef;
-    private Reference<Method> indexedReadMethodRef;
-    private Reference<Method> indexedWriteMethodRef;
-
-    private String indexedReadMethodName;
-    private String indexedWriteMethodName;
-
-    /**
-     * This constructor constructs an IndexedPropertyDescriptor for a property
-     * that follows the standard Java conventions by having getFoo and setFoo
-     * accessor methods, for both indexed access and array access.
-     * <p>
-     * Thus if the argument name is "fred", it will assume that there
-     * is an indexed reader method "getFred", a non-indexed (array) reader
-     * method also called "getFred", an indexed writer method "setFred",
-     * and finally a non-indexed writer method "setFred".
-     *
-     * @param propertyName The programmatic name of the property.
-     * @param beanClass The Class object for the target bean.
-     * @exception IntrospectionException if an exception occurs during
-     *              introspection.
-     */
-    public IndexedPropertyDescriptor(String propertyName, Class<?> beanClass)
-                throws IntrospectionException {
-        this(propertyName, beanClass,
-             Introspector.GET_PREFIX + NameGenerator.capitalize(propertyName),
-             Introspector.SET_PREFIX + NameGenerator.capitalize(propertyName),
-             Introspector.GET_PREFIX + NameGenerator.capitalize(propertyName),
-             Introspector.SET_PREFIX + NameGenerator.capitalize(propertyName));
-    }
-
-    /**
-     * This constructor takes the name of a simple property, and method
-     * names for reading and writing the property, both indexed
-     * and non-indexed.
-     *
-     * @param propertyName The programmatic name of the property.
-     * @param beanClass  The Class object for the target bean.
-     * @param readMethodName The name of the method used for reading the property
-     *           values as an array.  May be null if the property is write-only
-     *           or must be indexed.
-     * @param writeMethodName The name of the method used for writing the property
-     *           values as an array.  May be null if the property is read-only
-     *           or must be indexed.
-     * @param indexedReadMethodName The name of the method used for reading
-     *          an indexed property value.
-     *          May be null if the property is write-only.
-     * @param indexedWriteMethodName The name of the method used for writing
-     *          an indexed property value.
-     *          May be null if the property is read-only.
-     * @exception IntrospectionException if an exception occurs during
-     *              introspection.
-     */
-    public IndexedPropertyDescriptor(String propertyName, Class<?> beanClass,
-                String readMethodName, String writeMethodName,
-                String indexedReadMethodName, String indexedWriteMethodName)
-                throws IntrospectionException {
-        super(propertyName, beanClass, readMethodName, writeMethodName);
-
-        this.indexedReadMethodName = indexedReadMethodName;
-        if (indexedReadMethodName != null && getIndexedReadMethod() == null) {
-            throw new IntrospectionException("Method not found: " + indexedReadMethodName);
-        }
-
-        this.indexedWriteMethodName = indexedWriteMethodName;
-        if (indexedWriteMethodName != null && getIndexedWriteMethod() == null) {
-            throw new IntrospectionException("Method not found: " + indexedWriteMethodName);
-        }
-        // Implemented only for type checking.
-        findIndexedPropertyType(getIndexedReadMethod(), getIndexedWriteMethod());
-    }
-
-    /**
-     * This constructor takes the name of a simple property, and Method
-     * objects for reading and writing the property.
-     *
-     * @param propertyName The programmatic name of the property.
-     * @param readMethod The method used for reading the property values as an array.
-     *          May be null if the property is write-only or must be indexed.
-     * @param writeMethod The method used for writing the property values as an array.
-     *          May be null if the property is read-only or must be indexed.
-     * @param indexedReadMethod The method used for reading an indexed property value.
-     *          May be null if the property is write-only.
-     * @param indexedWriteMethod The method used for writing an indexed property value.
-     *          May be null if the property is read-only.
-     * @exception IntrospectionException if an exception occurs during
-     *              introspection.
-     */
-    public IndexedPropertyDescriptor(String propertyName, Method readMethod, Method writeMethod,
-                                            Method indexedReadMethod, Method indexedWriteMethod)
-                throws IntrospectionException {
-        super(propertyName, readMethod, writeMethod);
-
-        setIndexedReadMethod0(indexedReadMethod);
-        setIndexedWriteMethod0(indexedWriteMethod);
-
-        // Type checking
-        setIndexedPropertyType(findIndexedPropertyType(indexedReadMethod, indexedWriteMethod));
-    }
-
-    /**
-     * Creates <code>PropertyDescriptor</code> for the specified bean
-     * with the specified name and methods to read/write the property value.
-     *
-     * @param bean          the type of the target bean
-     * @param base          the base name of the property (the rest of the method name)
-     * @param read          the method used for reading the property value
-     * @param write         the method used for writing the property value
-     * @param readIndexed   the method used for reading an indexed property value
-     * @param writeIndexed  the method used for writing an indexed property value
-     * @exception IntrospectionException if an exception occurs during introspection
-     *
-     * @since 1.7
-     */
-    IndexedPropertyDescriptor(Class<?> bean, String base, Method read, Method write, Method readIndexed, Method writeIndexed) throws IntrospectionException {
-        super(bean, base, read, write);
-
-        setIndexedReadMethod0(readIndexed);
-        setIndexedWriteMethod0(writeIndexed);
-
-        // Type checking
-        setIndexedPropertyType(findIndexedPropertyType(readIndexed, writeIndexed));
-    }
-
-    /**
-     * Gets the method that should be used to read an indexed
-     * property value.
-     *
-     * @return The method that should be used to read an indexed
-     * property value.
-     * May return null if the property isn't indexed or is write-only.
-     */
-    public synchronized Method getIndexedReadMethod() {
-        Method indexedReadMethod = getIndexedReadMethod0();
-        if (indexedReadMethod == null) {
-            Class cls = getClass0();
-            if (cls == null ||
-                (indexedReadMethodName == null && indexedReadMethodRef == null)) {
-                // the Indexed readMethod was explicitly set to null.
-                return null;
-            }
-            String nextMethodName = Introspector.GET_PREFIX + getBaseName();
-            if (indexedReadMethodName == null) {
-                Class type = getIndexedPropertyType0();
-                if (type == boolean.class || type == null) {
-                    indexedReadMethodName = Introspector.IS_PREFIX + getBaseName();
-                } else {
-                    indexedReadMethodName = nextMethodName;
-                }
-            }
-
-            Class[] args = { int.class };
-            indexedReadMethod = Introspector.findMethod(cls, indexedReadMethodName, 1, args);
-            if ((indexedReadMethod == null) && !indexedReadMethodName.equals(nextMethodName)) {
-                // no "is" method, so look for a "get" method.
-                indexedReadMethodName = nextMethodName;
-                indexedReadMethod = Introspector.findMethod(cls, indexedReadMethodName, 1, args);
-            }
-            setIndexedReadMethod0(indexedReadMethod);
-        }
-        return indexedReadMethod;
-    }
-
-    /**
-     * Sets the method that should be used to read an indexed property value.
-     *
-     * @param readMethod The new indexed read method.
-     */
-    public synchronized void setIndexedReadMethod(Method readMethod)
-        throws IntrospectionException {
-
-        // the indexed property type is set by the reader.
-        setIndexedPropertyType(findIndexedPropertyType(readMethod,
-                                                       getIndexedWriteMethod0()));
-        setIndexedReadMethod0(readMethod);
-    }
-
-    private void setIndexedReadMethod0(Method readMethod) {
-        if (readMethod == null) {
-            indexedReadMethodName = null;
-            indexedReadMethodRef = null;
-            return;
-        }
-        setClass0(readMethod.getDeclaringClass());
-
-        indexedReadMethodName = readMethod.getName();
-        this.indexedReadMethodRef = getSoftReference(readMethod);
-        setTransient(readMethod.getAnnotation(Transient.class));
-    }
-
-
-    /**
-     * Gets the method that should be used to write an indexed property value.
-     *
-     * @return The method that should be used to write an indexed
-     * property value.
-     * May return null if the property isn't indexed or is read-only.
-     */
-    public synchronized Method getIndexedWriteMethod() {
-        Method indexedWriteMethod = getIndexedWriteMethod0();
-        if (indexedWriteMethod == null) {
-            Class cls = getClass0();
-            if (cls == null ||
-                (indexedWriteMethodName == null && indexedWriteMethodRef == null)) {
-                // the Indexed writeMethod was explicitly set to null.
-                return null;
-            }
-
-            // We need the indexed type to ensure that we get the correct method.
-            // Cannot use the getIndexedPropertyType method since that could
-            // result in an infinite loop.
-            Class type = getIndexedPropertyType0();
-            if (type == null) {
-                try {
-                    type = findIndexedPropertyType(getIndexedReadMethod(), null);
-                    setIndexedPropertyType(type);
-                } catch (IntrospectionException ex) {
-                    // Set iprop type to be the classic type
-                    Class propType = getPropertyType();
-                    if (propType.isArray()) {
-                        type = propType.getComponentType();
-                    }
-                }
-            }
-
-            if (indexedWriteMethodName == null) {
-                indexedWriteMethodName = Introspector.SET_PREFIX + getBaseName();
-            }
-
-            Class[] args = (type == null) ? null : new Class[] { int.class, type };
-            indexedWriteMethod = Introspector.findMethod(cls, indexedWriteMethodName, 2, args);
-            if (indexedWriteMethod != null) {
-                if (!indexedWriteMethod.getReturnType().equals(void.class)) {
-                    indexedWriteMethod = null;
-                }
-            }
-            setIndexedWriteMethod0(indexedWriteMethod);
-        }
-        return indexedWriteMethod;
-    }
-
-    /**
-     * Sets the method that should be used to write an indexed property value.
-     *
-     * @param writeMethod The new indexed write method.
-     */
-    public synchronized void setIndexedWriteMethod(Method writeMethod)
-        throws IntrospectionException {
-
-        // If the indexed property type has not been set, then set it.
-        Class type = findIndexedPropertyType(getIndexedReadMethod(),
-                                             writeMethod);
-        setIndexedPropertyType(type);
-        setIndexedWriteMethod0(writeMethod);
-    }
-
-    private void setIndexedWriteMethod0(Method writeMethod) {
-        if (writeMethod == null) {
-            indexedWriteMethodName = null;
-            indexedWriteMethodRef = null;
-            return;
-        }
-        setClass0(writeMethod.getDeclaringClass());
-
-        indexedWriteMethodName = writeMethod.getName();
-        this.indexedWriteMethodRef = getSoftReference(writeMethod);
-        setTransient(writeMethod.getAnnotation(Transient.class));
-    }
-
-    /**
-     * Returns the Java type info for the indexed property.
-     * Note that the {@code Class} object may describe
-     * primitive Java types such as {@code int}.
-     * This type is returned by the indexed read method
-     * or is used as the parameter type of the indexed write method.
-     *
-     * @return the {@code Class} object that represents the Java type info,
-     *         or {@code null} if the type cannot be determined
-     */
-    public synchronized Class<?> getIndexedPropertyType() {
-        Class type = getIndexedPropertyType0();
-        if (type == null) {
-            try {
-                type = findIndexedPropertyType(getIndexedReadMethod(),
-                                               getIndexedWriteMethod());
-                setIndexedPropertyType(type);
-            } catch (IntrospectionException ex) {
-                // fall
-            }
-        }
-        return type;
-    }
-
-    // Private methods which set get/set the Reference objects
-
-    private void setIndexedPropertyType(Class type) {
-        this.indexedPropertyTypeRef = getWeakReference(type);
-    }
-
-    private Class getIndexedPropertyType0() {
-        return (this.indexedPropertyTypeRef != null)
-                ? this.indexedPropertyTypeRef.get()
-                : null;
-    }
-
-    private Method getIndexedReadMethod0() {
-        return (this.indexedReadMethodRef != null)
-                ? this.indexedReadMethodRef.get()
-                : null;
-    }
-
-    private Method getIndexedWriteMethod0() {
-        return (this.indexedWriteMethodRef != null)
-                ? this.indexedWriteMethodRef.get()
-                : null;
-    }
-
-    private Class findIndexedPropertyType(Method indexedReadMethod,
-                                          Method indexedWriteMethod)
-        throws IntrospectionException {
-        Class indexedPropertyType = null;
-
-        if (indexedReadMethod != null) {
-            Class params[] = getParameterTypes(getClass0(), indexedReadMethod);
-            if (params.length != 1) {
-                throw new IntrospectionException("bad indexed read method arg count");
-            }
-            if (params[0] != Integer.TYPE) {
-                throw new IntrospectionException("non int index to indexed read method");
-            }
-            indexedPropertyType = getReturnType(getClass0(), indexedReadMethod);
-            if (indexedPropertyType == Void.TYPE) {
-                throw new IntrospectionException("indexed read method returns void");
-            }
-        }
-        if (indexedWriteMethod != null) {
-            Class params[] = getParameterTypes(getClass0(), indexedWriteMethod);
-            if (params.length != 2) {
-                throw new IntrospectionException("bad indexed write method arg count");
-            }
-            if (params[0] != Integer.TYPE) {
-                throw new IntrospectionException("non int index to indexed write method");
-            }
-            if (indexedPropertyType != null && indexedPropertyType != params[1]) {
-                throw new IntrospectionException(
-                                                 "type mismatch between indexed read and indexed write methods: "
-                                                 + getName());
-            }
-            indexedPropertyType = params[1];
-        }
-        Class propertyType = getPropertyType();
-        if (propertyType != null && (!propertyType.isArray() ||
-                                     propertyType.getComponentType() != indexedPropertyType)) {
-            throw new IntrospectionException("type mismatch between indexed and non-indexed methods: "
-                                             + getName());
-        }
-        return indexedPropertyType;
-    }
-
-    /**
-     * Compares this <code>PropertyDescriptor</code> against the specified object.
-     * Returns true if the objects are the same. Two <code>PropertyDescriptor</code>s
-     * are the same if the read, write, property types, property editor and
-     * flags  are equivalent.
-     *
-     * @since 1.4
-     */
-    public boolean equals(Object obj) {
-        // Note: This would be identical to PropertyDescriptor but they don't
-        // share the same fields.
-        if (this == obj) {
-            return true;
-        }
-
-        if (obj != null && obj instanceof IndexedPropertyDescriptor) {
-            IndexedPropertyDescriptor other = (IndexedPropertyDescriptor)obj;
-            Method otherIndexedReadMethod = other.getIndexedReadMethod();
-            Method otherIndexedWriteMethod = other.getIndexedWriteMethod();
-
-            if (!compareMethods(getIndexedReadMethod(), otherIndexedReadMethod)) {
-                return false;
-            }
-
-            if (!compareMethods(getIndexedWriteMethod(), otherIndexedWriteMethod)) {
-                return false;
-            }
-
-            if (getIndexedPropertyType() != other.getIndexedPropertyType()) {
-                return false;
-            }
-            return super.equals(obj);
-        }
-        return false;
-    }
-
-    /**
-     * Package-private constructor.
-     * Merge two property descriptors.  Where they conflict, give the
-     * second argument (y) priority over the first argumnnt (x).
-     *
-     * @param x  The first (lower priority) PropertyDescriptor
-     * @param y  The second (higher priority) PropertyDescriptor
-     */
-
-    IndexedPropertyDescriptor(PropertyDescriptor x, PropertyDescriptor y) {
-        super(x,y);
-        if (x instanceof IndexedPropertyDescriptor) {
-            IndexedPropertyDescriptor ix = (IndexedPropertyDescriptor)x;
-            try {
-                Method xr = ix.getIndexedReadMethod();
-                if (xr != null) {
-                    setIndexedReadMethod(xr);
-                }
-
-                Method xw = ix.getIndexedWriteMethod();
-                if (xw != null) {
-                    setIndexedWriteMethod(xw);
-                }
-            } catch (IntrospectionException ex) {
-                // Should not happen
-                throw new AssertionError(ex);
-            }
-        }
-        if (y instanceof IndexedPropertyDescriptor) {
-            IndexedPropertyDescriptor iy = (IndexedPropertyDescriptor)y;
-            try {
-                Method yr = iy.getIndexedReadMethod();
-                if (yr != null && yr.getDeclaringClass() == getClass0()) {
-                    setIndexedReadMethod(yr);
-                }
-
-                Method yw = iy.getIndexedWriteMethod();
-                if (yw != null && yw.getDeclaringClass() == getClass0()) {
-                    setIndexedWriteMethod(yw);
-                }
-            } catch (IntrospectionException ex) {
-                // Should not happen
-                throw new AssertionError(ex);
-            }
-        }
-    }
-
-    /*
-     * Package-private dup constructor
-     * This must isolate the new object from any changes to the old object.
-     */
-    IndexedPropertyDescriptor(IndexedPropertyDescriptor old) {
-        super(old);
-        indexedReadMethodRef = old.indexedReadMethodRef;
-        indexedWriteMethodRef = old.indexedWriteMethodRef;
-        indexedPropertyTypeRef = old.indexedPropertyTypeRef;
-        indexedWriteMethodName = old.indexedWriteMethodName;
-        indexedReadMethodName = old.indexedReadMethodName;
-    }
-
-    void updateGenericsFor(Class<?> type) {
-        super.updateGenericsFor(type);
-        try {
-            setIndexedPropertyType(findIndexedPropertyType(getIndexedReadMethod0(), getIndexedWriteMethod0()));
-        }
-        catch (IntrospectionException exception) {
-            setIndexedPropertyType(null);
-        }
-    }
-
-    /**
-     * Returns a hash code value for the object.
-     * See {@link java.lang.Object#hashCode} for a complete description.
-     *
-     * @return a hash code value for this object.
-     * @since 1.5
-     */
-    public int hashCode() {
-        int result = super.hashCode();
-
-        result = 37 * result + ((indexedWriteMethodName == null) ? 0 :
-                                indexedWriteMethodName.hashCode());
-        result = 37 * result + ((indexedReadMethodName == null) ? 0 :
-                                indexedReadMethodName.hashCode());
-        result = 37 * result + ((getIndexedPropertyType() == null) ? 0 :
-                                getIndexedPropertyType().hashCode());
-
-        return result;
-    }
-
-    void appendTo(StringBuilder sb) {
-        super.appendTo(sb);
-        appendTo(sb, "indexedPropertyType", this.indexedPropertyTypeRef);
-        appendTo(sb, "indexedReadMethod", this.indexedReadMethodRef);
-        appendTo(sb, "indexedWriteMethod", this.indexedWriteMethodRef);
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/IntrospectionException.java b/ojluni/src/main/java/java/beans/IntrospectionException.java
deleted file mode 100755
index c9cf2ee..0000000
--- a/ojluni/src/main/java/java/beans/IntrospectionException.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 1996, 2009, 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.
- */
-
-package java.beans;
-
-/**
- * Thrown when an exception happens during Introspection.
- * <p>
- * Typical causes include not being able to map a string class name
- * to a Class object, not being able to resolve a string method name,
- * or specifying a method name that has the wrong type signature for
- * its intended use.
- */
-
-public
-class IntrospectionException extends Exception {
-    private static final long serialVersionUID = -3728150539969542619L;
-
-    /**
-     * Constructs an <code>IntrospectionException</code> with a
-     * detailed message.
-     *
-     * @param mess Descriptive message
-     */
-    public IntrospectionException(String mess) {
-        super(mess);
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/Introspector.java b/ojluni/src/main/java/java/beans/Introspector.java
deleted file mode 100755
index 8276e5d..0000000
--- a/ojluni/src/main/java/java/beans/Introspector.java
+++ /dev/null
@@ -1,1564 +0,0 @@
-/*
- * Copyright (c) 1996, 2011, 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.
- */
-
-package java.beans;
-
-import com.sun.beans.TypeResolver;
-import com.sun.beans.WeakCache;
-import com.sun.beans.finder.ClassFinder;
-
-import java.awt.Component;
-
-import java.lang.ref.Reference;
-import java.lang.ref.SoftReference;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.Type;
-
-import java.util.Map;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.EventListener;
-import java.util.EventObject;
-import java.util.List;
-import java.util.TreeMap;
-
-import sun.reflect.misc.ReflectUtil;
-
-/**
- * The Introspector class provides a standard way for tools to learn about
- * the properties, events, and methods supported by a target Java Bean.
- * <p>
- * For each of those three kinds of information, the Introspector will
- * separately analyze the bean's class and superclasses looking for
- * either explicit or implicit information and use that information to
- * build a BeanInfo object that comprehensively describes the target bean.
- * <p>
- * For each class "Foo", explicit information may be available if there exists
- * a corresponding "FooBeanInfo" class that provides a non-null value when
- * queried for the information.   We first look for the BeanInfo class by
- * taking the full package-qualified name of the target bean class and
- * appending "BeanInfo" to form a new class name.  If this fails, then
- * we take the final classname component of this name, and look for that
- * class in each of the packages specified in the BeanInfo package search
- * path.
- * <p>
- * Thus for a class such as "sun.xyz.OurButton" we would first look for a
- * BeanInfo class called "sun.xyz.OurButtonBeanInfo" and if that failed we'd
- * look in each package in the BeanInfo search path for an OurButtonBeanInfo
- * class.  With the default search path, this would mean looking for
- * "sun.beans.infos.OurButtonBeanInfo".
- * <p>
- * If a class provides explicit BeanInfo about itself then we add that to
- * the BeanInfo information we obtained from analyzing any derived classes,
- * but we regard the explicit information as being definitive for the current
- * class and its base classes, and do not proceed any further up the superclass
- * chain.
- * <p>
- * If we don't find explicit BeanInfo on a class, we use low-level
- * reflection to study the methods of the class and apply standard design
- * patterns to identify property accessors, event sources, or public
- * methods.  We then proceed to analyze the class's superclass and add
- * in the information from it (and possibly on up the superclass chain).
- * <p>
- * For more information about introspection and design patterns, please
- * consult the
- *  <a href="http://java.sun.com/products/javabeans/docs/index.html">JavaBeans&trade; specification</a>.
- */
-
-public class Introspector {
-
-    // Flags that can be used to control getBeanInfo:
-    public final static int USE_ALL_BEANINFO           = 1;
-    public final static int IGNORE_IMMEDIATE_BEANINFO  = 2;
-    public final static int IGNORE_ALL_BEANINFO        = 3;
-
-    // Static Caches to speed up introspection.
-    private static final WeakCache<Class<?>, Method[]> declaredMethodCache = new WeakCache<>();
-
-    private Class beanClass;
-    private BeanInfo explicitBeanInfo;
-    private BeanInfo superBeanInfo;
-    private BeanInfo additionalBeanInfo[];
-
-    private boolean propertyChangeSource = false;
-    private static Class eventListenerType = EventListener.class;
-
-    // These should be removed.
-    private String defaultEventName;
-    private String defaultPropertyName;
-    private int defaultEventIndex = -1;
-    private int defaultPropertyIndex = -1;
-
-    // Methods maps from Method objects to MethodDescriptors
-    private Map methods;
-
-    // properties maps from String names to PropertyDescriptors
-    private Map properties;
-
-    // events maps from String names to EventSetDescriptors
-    private Map events;
-
-    private final static EventSetDescriptor[] EMPTY_EVENTSETDESCRIPTORS = new EventSetDescriptor[0];
-
-    static final String ADD_PREFIX = "add";
-    static final String REMOVE_PREFIX = "remove";
-    static final String GET_PREFIX = "get";
-    static final String SET_PREFIX = "set";
-    static final String IS_PREFIX = "is";
-
-    //======================================================================
-    //                          Public methods
-    //======================================================================
-
-    /**
-     * Introspect on a Java Bean and learn about all its properties, exposed
-     * methods, and events.
-     * <p>
-     * If the BeanInfo class for a Java Bean has been previously Introspected
-     * then the BeanInfo class is retrieved from the BeanInfo cache.
-     *
-     * @param beanClass  The bean class to be analyzed.
-     * @return  A BeanInfo object describing the target bean.
-     * @exception IntrospectionException if an exception occurs during
-     *              introspection.
-     * @see #flushCaches
-     * @see #flushFromCaches
-     */
-    public static BeanInfo getBeanInfo(Class<?> beanClass)
-        throws IntrospectionException
-    {
-        if (!ReflectUtil.isPackageAccessible(beanClass)) {
-            return (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo();
-        }
-        ThreadGroupContext context = ThreadGroupContext.getContext();
-        BeanInfo beanInfo;
-        synchronized (declaredMethodCache) {
-            beanInfo = context.getBeanInfo(beanClass);
-        }
-        if (beanInfo == null) {
-            beanInfo = new Introspector(beanClass, null, USE_ALL_BEANINFO).getBeanInfo();
-            synchronized (declaredMethodCache) {
-                context.putBeanInfo(beanClass, beanInfo);
-            }
-        }
-        return beanInfo;
-    }
-
-    /**
-     * Introspect on a Java bean and learn about all its properties, exposed
-     * methods, and events, subject to some control flags.
-     * <p>
-     * If the BeanInfo class for a Java Bean has been previously Introspected
-     * based on the same arguments then the BeanInfo class is retrieved
-     * from the BeanInfo cache.
-     *
-     * @param beanClass  The bean class to be analyzed.
-     * @param flags  Flags to control the introspection.
-     *     If flags == USE_ALL_BEANINFO then we use all of the BeanInfo
-     *          classes we can discover.
-     *     If flags == IGNORE_IMMEDIATE_BEANINFO then we ignore any
-     *           BeanInfo associated with the specified beanClass.
-     *     If flags == IGNORE_ALL_BEANINFO then we ignore all BeanInfo
-     *           associated with the specified beanClass or any of its
-     *           parent classes.
-     * @return  A BeanInfo object describing the target bean.
-     * @exception IntrospectionException if an exception occurs during
-     *              introspection.
-     */
-    public static BeanInfo getBeanInfo(Class<?> beanClass, int flags)
-                                                throws IntrospectionException {
-        return getBeanInfo(beanClass, null, flags);
-    }
-
-    /**
-     * Introspect on a Java bean and learn all about its properties, exposed
-     * methods, below a given "stop" point.
-     * <p>
-     * If the BeanInfo class for a Java Bean has been previously Introspected
-     * based on the same arguments, then the BeanInfo class is retrieved
-     * from the BeanInfo cache.
-     *
-     * @param beanClass The bean class to be analyzed.
-     * @param stopClass The baseclass at which to stop the analysis.  Any
-     *    methods/properties/events in the stopClass or in its baseclasses
-     *    will be ignored in the analysis.
-     * @exception IntrospectionException if an exception occurs during
-     *              introspection.
-     */
-    public static BeanInfo getBeanInfo(Class<?> beanClass, Class<?> stopClass)
-                                                throws IntrospectionException {
-        return getBeanInfo(beanClass, stopClass, USE_ALL_BEANINFO);
-    }
-
-    /**
-     * Introspect on a Java Bean and learn about all its properties,
-     * exposed methods and events, below a given {@code stopClass} point
-     * subject to some control {@code flags}.
-     * <dl>
-     *  <dt>USE_ALL_BEANINFO</dt>
-     *  <dd>Any BeanInfo that can be discovered will be used.</dd>
-     *  <dt>IGNORE_IMMEDIATE_BEANINFO</dt>
-     *  <dd>Any BeanInfo associated with the specified {@code beanClass} will be ignored.</dd>
-     *  <dt>IGNORE_ALL_BEANINFO</dt>
-     *  <dd>Any BeanInfo associated with the specified {@code beanClass}
-     *      or any of its parent classes will be ignored.</dd>
-     * </dl>
-     * Any methods/properties/events in the {@code stopClass}
-     * or in its parent classes will be ignored in the analysis.
-     * <p>
-     * If the BeanInfo class for a Java Bean has been
-     * previously introspected based on the same arguments then
-     * the BeanInfo class is retrieved from the BeanInfo cache.
-     *
-     * @param beanClass  the bean class to be analyzed
-     * @param stopClass  the parent class at which to stop the analysis
-     * @param flags      flags to control the introspection
-     * @return a BeanInfo object describing the target bean
-     * @exception IntrospectionException if an exception occurs during introspection
-     *
-     * @since 1.7
-     */
-    public static BeanInfo getBeanInfo(Class<?> beanClass, Class<?> stopClass,
-                                        int flags) throws IntrospectionException {
-        BeanInfo bi;
-        if (stopClass == null && flags == USE_ALL_BEANINFO) {
-            // Same parameters to take advantage of caching.
-            bi = getBeanInfo(beanClass);
-        } else {
-            bi = (new Introspector(beanClass, stopClass, flags)).getBeanInfo();
-        }
-        return bi;
-
-        // Old behaviour: Make an independent copy of the BeanInfo.
-        //return new GenericBeanInfo(bi);
-    }
-
-
-    /**
-     * Utility method to take a string and convert it to normal Java variable
-     * name capitalization.  This normally means converting the first
-     * character from upper case to lower case, but in the (unusual) special
-     * case when there is more than one character and both the first and
-     * second characters are upper case, we leave it alone.
-     * <p>
-     * Thus "FooBah" becomes "fooBah" and "X" becomes "x", but "URL" stays
-     * as "URL".
-     *
-     * @param  name The string to be decapitalized.
-     * @return  The decapitalized version of the string.
-     */
-    public static String decapitalize(String name) {
-        if (name == null || name.length() == 0) {
-            return name;
-        }
-        if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) &&
-                        Character.isUpperCase(name.charAt(0))){
-            return name;
-        }
-        char chars[] = name.toCharArray();
-        chars[0] = Character.toLowerCase(chars[0]);
-        return new String(chars);
-    }
-
-    /**
-     * Gets the list of package names that will be used for
-     *          finding BeanInfo classes.
-     *
-     * @return  The array of package names that will be searched in
-     *          order to find BeanInfo classes. The default value
-     *          for this array is implementation-dependent; e.g.
-     *          Sun implementation initially sets to {"sun.beans.infos"}.
-     */
-
-    public static String[] getBeanInfoSearchPath() {
-        return ThreadGroupContext.getContext().getBeanInfoFinder().getPackages();
-    }
-
-    /**
-     * Change the list of package names that will be used for
-     *          finding BeanInfo classes.  The behaviour of
-     *          this method is undefined if parameter path
-     *          is null.
-     *
-     * <p>First, if there is a security manager, its <code>checkPropertiesAccess</code>
-     * method is called. This could result in a SecurityException.
-     *
-     * @param path  Array of package names.
-     * @exception  SecurityException  if a security manager exists and its
-     *             <code>checkPropertiesAccess</code> method doesn't allow setting
-     *              of system properties.
-     * @see SecurityManager#checkPropertiesAccess
-     */
-
-    public static void setBeanInfoSearchPath(String[] path) {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            sm.checkPropertiesAccess();
-        }
-        ThreadGroupContext.getContext().getBeanInfoFinder().setPackages(path);
-    }
-
-
-    /**
-     * Flush all of the Introspector's internal caches.  This method is
-     * not normally required.  It is normally only needed by advanced
-     * tools that update existing "Class" objects in-place and need
-     * to make the Introspector re-analyze existing Class objects.
-     */
-
-    public static void flushCaches() {
-        synchronized (declaredMethodCache) {
-            ThreadGroupContext.getContext().clearBeanInfoCache();
-            declaredMethodCache.clear();
-        }
-    }
-
-    /**
-     * Flush the Introspector's internal cached information for a given class.
-     * This method is not normally required.  It is normally only needed
-     * by advanced tools that update existing "Class" objects in-place
-     * and need to make the Introspector re-analyze an existing Class object.
-     *
-     * Note that only the direct state associated with the target Class
-     * object is flushed.  We do not flush state for other Class objects
-     * with the same name, nor do we flush state for any related Class
-     * objects (such as subclasses), even though their state may include
-     * information indirectly obtained from the target Class object.
-     *
-     * @param clz  Class object to be flushed.
-     * @throws NullPointerException If the Class object is null.
-     */
-    public static void flushFromCaches(Class<?> clz) {
-        if (clz == null) {
-            throw new NullPointerException();
-        }
-        synchronized (declaredMethodCache) {
-            ThreadGroupContext.getContext().removeBeanInfo(clz);
-            declaredMethodCache.put(clz, null);
-        }
-    }
-
-    //======================================================================
-    //                  Private implementation methods
-    //======================================================================
-
-    private Introspector(Class beanClass, Class stopClass, int flags)
-                                            throws IntrospectionException {
-        this.beanClass = beanClass;
-
-        // Check stopClass is a superClass of startClass.
-        if (stopClass != null) {
-            boolean isSuper = false;
-            for (Class c = beanClass.getSuperclass(); c != null; c = c.getSuperclass()) {
-                if (c == stopClass) {
-                    isSuper = true;
-                }
-            }
-            if (!isSuper) {
-                throw new IntrospectionException(stopClass.getName() + " not superclass of " +
-                                        beanClass.getName());
-            }
-        }
-
-        if (flags == USE_ALL_BEANINFO) {
-            explicitBeanInfo = findExplicitBeanInfo(beanClass);
-        }
-
-        Class superClass = beanClass.getSuperclass();
-        if (superClass != stopClass) {
-            int newFlags = flags;
-            if (newFlags == IGNORE_IMMEDIATE_BEANINFO) {
-                newFlags = USE_ALL_BEANINFO;
-            }
-            superBeanInfo = getBeanInfo(superClass, stopClass, newFlags);
-        }
-        if (explicitBeanInfo != null) {
-            additionalBeanInfo = explicitBeanInfo.getAdditionalBeanInfo();
-        }
-        if (additionalBeanInfo == null) {
-            additionalBeanInfo = new BeanInfo[0];
-        }
-    }
-
-    /**
-     * Constructs a GenericBeanInfo class from the state of the Introspector
-     */
-    private BeanInfo getBeanInfo() throws IntrospectionException {
-
-        // the evaluation order here is import, as we evaluate the
-        // event sets and locate PropertyChangeListeners before we
-        // look for properties.
-        BeanDescriptor bd = getTargetBeanDescriptor();
-        MethodDescriptor mds[] = getTargetMethodInfo();
-        EventSetDescriptor esds[] = getTargetEventInfo();
-        PropertyDescriptor pds[] = getTargetPropertyInfo();
-
-        int defaultEvent = getTargetDefaultEventIndex();
-        int defaultProperty = getTargetDefaultPropertyIndex();
-
-        return new GenericBeanInfo(bd, esds, defaultEvent, pds,
-                        defaultProperty, mds, explicitBeanInfo);
-
-    }
-
-    /**
-     * Looks for an explicit BeanInfo class that corresponds to the Class.
-     * First it looks in the existing package that the Class is defined in,
-     * then it checks to see if the class is its own BeanInfo. Finally,
-     * the BeanInfo search path is prepended to the class and searched.
-     *
-     * @param beanClass  the class type of the bean
-     * @return Instance of an explicit BeanInfo class or null if one isn't found.
-     */
-    private static BeanInfo findExplicitBeanInfo(Class beanClass) {
-        return ThreadGroupContext.getContext().getBeanInfoFinder().find(beanClass);
-    }
-
-    /**
-     * @return An array of PropertyDescriptors describing the editable
-     * properties supported by the target bean.
-     */
-
-    private PropertyDescriptor[] getTargetPropertyInfo() {
-
-        // Check if the bean has its own BeanInfo that will provide
-        // explicit information.
-        PropertyDescriptor[] explicitProperties = null;
-        if (explicitBeanInfo != null) {
-            explicitProperties = getPropertyDescriptors(this.explicitBeanInfo);
-        }
-
-        if (explicitProperties == null && superBeanInfo != null) {
-            // We have no explicit BeanInfo properties.  Check with our parent.
-            addPropertyDescriptors(getPropertyDescriptors(this.superBeanInfo));
-        }
-
-        for (int i = 0; i < additionalBeanInfo.length; i++) {
-            addPropertyDescriptors(additionalBeanInfo[i].getPropertyDescriptors());
-        }
-
-        if (explicitProperties != null) {
-            // Add the explicit BeanInfo data to our results.
-            addPropertyDescriptors(explicitProperties);
-
-        } else {
-
-            // Apply some reflection to the current class.
-
-            // First get an array of all the public methods at this level
-            Method methodList[] = getPublicDeclaredMethods(beanClass);
-
-            // Now analyze each method.
-            for (int i = 0; i < methodList.length; i++) {
-                Method method = methodList[i];
-                if (method == null) {
-                    continue;
-                }
-                // skip static methods.
-                int mods = method.getModifiers();
-                if (Modifier.isStatic(mods)) {
-                    continue;
-                }
-                String name = method.getName();
-                Class argTypes[] = method.getParameterTypes();
-                Class resultType = method.getReturnType();
-                int argCount = argTypes.length;
-                PropertyDescriptor pd = null;
-
-                if (name.length() <= 3 && !name.startsWith(IS_PREFIX)) {
-                    // Optimization. Don't bother with invalid propertyNames.
-                    continue;
-                }
-
-                try {
-
-                    if (argCount == 0) {
-                        if (name.startsWith(GET_PREFIX)) {
-                            // Simple getter
-                            pd = new PropertyDescriptor(this.beanClass, name.substring(3), method, null);
-                        } else if (resultType == boolean.class && name.startsWith(IS_PREFIX)) {
-                            // Boolean getter
-                            pd = new PropertyDescriptor(this.beanClass, name.substring(2), method, null);
-                        }
-                    } else if (argCount == 1) {
-                        if (int.class.equals(argTypes[0]) && name.startsWith(GET_PREFIX)) {
-                            pd = new IndexedPropertyDescriptor(this.beanClass, name.substring(3), null, null, method, null);
-                        } else if (void.class.equals(resultType) && name.startsWith(SET_PREFIX)) {
-                            // Simple setter
-                            pd = new PropertyDescriptor(this.beanClass, name.substring(3), null, method);
-                            if (throwsException(method, PropertyVetoException.class)) {
-                                pd.setConstrained(true);
-                            }
-                        }
-                    } else if (argCount == 2) {
-                            if (void.class.equals(resultType) && int.class.equals(argTypes[0]) && name.startsWith(SET_PREFIX)) {
-                            pd = new IndexedPropertyDescriptor(this.beanClass, name.substring(3), null, null, null, method);
-                            if (throwsException(method, PropertyVetoException.class)) {
-                                pd.setConstrained(true);
-                            }
-                        }
-                    }
-                } catch (IntrospectionException ex) {
-                    // This happens if a PropertyDescriptor or IndexedPropertyDescriptor
-                    // constructor fins that the method violates details of the deisgn
-                    // pattern, e.g. by having an empty name, or a getter returning
-                    // void , or whatever.
-                    pd = null;
-                }
-
-                if (pd != null) {
-                    // If this class or one of its base classes is a PropertyChange
-                    // source, then we assume that any properties we discover are "bound".
-                    if (propertyChangeSource) {
-                        pd.setBound(true);
-                    }
-                    addPropertyDescriptor(pd);
-                }
-            }
-        }
-        processPropertyDescriptors();
-
-        // Allocate and populate the result array.
-        PropertyDescriptor result[] = new PropertyDescriptor[properties.size()];
-        result = (PropertyDescriptor[])properties.values().toArray(result);
-
-        // Set the default index.
-        if (defaultPropertyName != null) {
-            for (int i = 0; i < result.length; i++) {
-                if (defaultPropertyName.equals(result[i].getName())) {
-                    defaultPropertyIndex = i;
-                }
-            }
-        }
-
-        return result;
-    }
-
-    private HashMap pdStore = new HashMap();
-
-    /**
-     * Adds the property descriptor to the list store.
-     */
-    private void addPropertyDescriptor(PropertyDescriptor pd) {
-        String propName = pd.getName();
-        List list = (List)pdStore.get(propName);
-        if (list == null) {
-            list = new ArrayList();
-            pdStore.put(propName, list);
-        }
-        if (this.beanClass != pd.getClass0()) {
-            // replace existing property descriptor
-            // only if we have types to resolve
-            // in the context of this.beanClass
-            Method read = pd.getReadMethod();
-            Method write = pd.getWriteMethod();
-            boolean cls = true;
-            if (read != null) cls = cls && read.getGenericReturnType() instanceof Class;
-            if (write != null) cls = cls && write.getGenericParameterTypes()[0] instanceof Class;
-            if (pd instanceof IndexedPropertyDescriptor) {
-                IndexedPropertyDescriptor ipd = (IndexedPropertyDescriptor) pd;
-                Method readI = ipd.getIndexedReadMethod();
-                Method writeI = ipd.getIndexedWriteMethod();
-                if (readI != null) cls = cls && readI.getGenericReturnType() instanceof Class;
-                if (writeI != null) cls = cls && writeI.getGenericParameterTypes()[1] instanceof Class;
-                if (!cls) {
-                    pd = new IndexedPropertyDescriptor(ipd);
-                    pd.updateGenericsFor(this.beanClass);
-                }
-            }
-            else if (!cls) {
-                pd = new PropertyDescriptor(pd);
-                pd.updateGenericsFor(this.beanClass);
-            }
-        }
-        list.add(pd);
-    }
-
-    private void addPropertyDescriptors(PropertyDescriptor[] descriptors) {
-        if (descriptors != null) {
-            for (PropertyDescriptor descriptor : descriptors) {
-                addPropertyDescriptor(descriptor);
-            }
-        }
-    }
-
-    private PropertyDescriptor[] getPropertyDescriptors(BeanInfo info) {
-        PropertyDescriptor[] descriptors = info.getPropertyDescriptors();
-        int index = info.getDefaultPropertyIndex();
-        if ((0 <= index) && (index < descriptors.length)) {
-            this.defaultPropertyName = descriptors[index].getName();
-        }
-        return descriptors;
-    }
-
-    /**
-     * Populates the property descriptor table by merging the
-     * lists of Property descriptors.
-     */
-    private void processPropertyDescriptors() {
-        if (properties == null) {
-            properties = new TreeMap();
-        }
-
-        List list;
-
-        PropertyDescriptor pd, gpd, spd;
-        IndexedPropertyDescriptor ipd, igpd, ispd;
-
-        Iterator it = pdStore.values().iterator();
-        while (it.hasNext()) {
-            pd = null; gpd = null; spd = null;
-            ipd = null; igpd = null; ispd = null;
-
-            list = (List)it.next();
-
-            // First pass. Find the latest getter method. Merge properties
-            // of previous getter methods.
-            for (int i = 0; i < list.size(); i++) {
-                pd = (PropertyDescriptor)list.get(i);
-                if (pd instanceof IndexedPropertyDescriptor) {
-                    ipd = (IndexedPropertyDescriptor)pd;
-                    if (ipd.getIndexedReadMethod() != null) {
-                        if (igpd != null) {
-                            igpd = new IndexedPropertyDescriptor(igpd, ipd);
-                        } else {
-                            igpd = ipd;
-                        }
-                    }
-                } else {
-                    if (pd.getReadMethod() != null) {
-                        if (gpd != null) {
-                            // Don't replace the existing read
-                            // method if it starts with "is"
-                            Method method = gpd.getReadMethod();
-                            if (!method.getName().startsWith(IS_PREFIX)) {
-                                gpd = new PropertyDescriptor(gpd, pd);
-                            }
-                        } else {
-                            gpd = pd;
-                        }
-                    }
-                }
-            }
-
-            // Second pass. Find the latest setter method which
-            // has the same type as the getter method.
-            for (int i = 0; i < list.size(); i++) {
-                pd = (PropertyDescriptor)list.get(i);
-                if (pd instanceof IndexedPropertyDescriptor) {
-                    ipd = (IndexedPropertyDescriptor)pd;
-                    if (ipd.getIndexedWriteMethod() != null) {
-                        if (igpd != null) {
-                            if (igpd.getIndexedPropertyType()
-                                == ipd.getIndexedPropertyType()) {
-                                if (ispd != null) {
-                                    ispd = new IndexedPropertyDescriptor(ispd, ipd);
-                                } else {
-                                    ispd = ipd;
-                                }
-                            }
-                        } else {
-                            if (ispd != null) {
-                                ispd = new IndexedPropertyDescriptor(ispd, ipd);
-                            } else {
-                                ispd = ipd;
-                            }
-                        }
-                    }
-                } else {
-                    if (pd.getWriteMethod() != null) {
-                        if (gpd != null) {
-                            if (gpd.getPropertyType() == pd.getPropertyType()) {
-                                if (spd != null) {
-                                    spd = new PropertyDescriptor(spd, pd);
-                                } else {
-                                    spd = pd;
-                                }
-                            }
-                        } else {
-                            if (spd != null) {
-                                spd = new PropertyDescriptor(spd, pd);
-                            } else {
-                                spd = pd;
-                            }
-                        }
-                    }
-                }
-            }
-
-            // At this stage we should have either PDs or IPDs for the
-            // representative getters and setters. The order at which the
-            // property descriptors are determined represent the
-            // precedence of the property ordering.
-            pd = null; ipd = null;
-
-            if (igpd != null && ispd != null) {
-                // Complete indexed properties set
-                // Merge any classic property descriptors
-                if (gpd != null) {
-                    PropertyDescriptor tpd = mergePropertyDescriptor(igpd, gpd);
-                    if (tpd instanceof IndexedPropertyDescriptor) {
-                        igpd = (IndexedPropertyDescriptor)tpd;
-                    }
-                }
-                if (spd != null) {
-                    PropertyDescriptor tpd = mergePropertyDescriptor(ispd, spd);
-                    if (tpd instanceof IndexedPropertyDescriptor) {
-                        ispd = (IndexedPropertyDescriptor)tpd;
-                    }
-                }
-                if (igpd == ispd) {
-                    pd = igpd;
-                } else {
-                    pd = mergePropertyDescriptor(igpd, ispd);
-                }
-            } else if (gpd != null && spd != null) {
-                // Complete simple properties set
-                if (gpd == spd) {
-                    pd = gpd;
-                } else {
-                    pd = mergePropertyDescriptor(gpd, spd);
-                }
-            } else if (ispd != null) {
-                // indexed setter
-                pd = ispd;
-                // Merge any classic property descriptors
-                if (spd != null) {
-                    pd = mergePropertyDescriptor(ispd, spd);
-                }
-                if (gpd != null) {
-                    pd = mergePropertyDescriptor(ispd, gpd);
-                }
-            } else if (igpd != null) {
-                // indexed getter
-                pd = igpd;
-                // Merge any classic property descriptors
-                if (gpd != null) {
-                    pd = mergePropertyDescriptor(igpd, gpd);
-                }
-                if (spd != null) {
-                    pd = mergePropertyDescriptor(igpd, spd);
-                }
-            } else if (spd != null) {
-                // simple setter
-                pd = spd;
-            } else if (gpd != null) {
-                // simple getter
-                pd = gpd;
-            }
-
-            // Very special case to ensure that an IndexedPropertyDescriptor
-            // doesn't contain less information than the enclosed
-            // PropertyDescriptor. If it does, then recreate as a
-            // PropertyDescriptor. See 4168833
-            if (pd instanceof IndexedPropertyDescriptor) {
-                ipd = (IndexedPropertyDescriptor)pd;
-                if (ipd.getIndexedReadMethod() == null && ipd.getIndexedWriteMethod() == null) {
-                    pd = new PropertyDescriptor(ipd);
-                }
-            }
-
-            // Find the first property descriptor
-            // which does not have getter and setter methods.
-            // See regression bug 4984912.
-            if ( (pd == null) && (list.size() > 0) ) {
-                pd = (PropertyDescriptor) list.get(0);
-            }
-
-            if (pd != null) {
-                properties.put(pd.getName(), pd);
-            }
-        }
-    }
-
-    /**
-     * Adds the property descriptor to the indexedproperty descriptor only if the
-     * types are the same.
-     *
-     * The most specific property descriptor will take precedence.
-     */
-    private PropertyDescriptor mergePropertyDescriptor(IndexedPropertyDescriptor ipd,
-                                                       PropertyDescriptor pd) {
-        PropertyDescriptor result = null;
-
-        Class propType = pd.getPropertyType();
-        Class ipropType = ipd.getIndexedPropertyType();
-
-        if (propType.isArray() && propType.getComponentType() == ipropType) {
-            if (pd.getClass0().isAssignableFrom(ipd.getClass0())) {
-                result = new IndexedPropertyDescriptor(pd, ipd);
-            } else {
-                result = new IndexedPropertyDescriptor(ipd, pd);
-            }
-        } else {
-            // Cannot merge the pd because of type mismatch
-            // Return the most specific pd
-            if (pd.getClass0().isAssignableFrom(ipd.getClass0())) {
-                result = ipd;
-            } else {
-                result = pd;
-                // Try to add methods which may have been lost in the type change
-                // See 4168833
-                Method write = result.getWriteMethod();
-                Method read = result.getReadMethod();
-
-                if (read == null && write != null) {
-                    read = findMethod(result.getClass0(),
-                                      GET_PREFIX + NameGenerator.capitalize(result.getName()), 0);
-                    if (read != null) {
-                        try {
-                            result.setReadMethod(read);
-                        } catch (IntrospectionException ex) {
-                            // no consequences for failure.
-                        }
-                    }
-                }
-                if (write == null && read != null) {
-                    write = findMethod(result.getClass0(),
-                                       SET_PREFIX + NameGenerator.capitalize(result.getName()), 1,
-                                       new Class[] { FeatureDescriptor.getReturnType(result.getClass0(), read) });
-                    if (write != null) {
-                        try {
-                            result.setWriteMethod(write);
-                        } catch (IntrospectionException ex) {
-                            // no consequences for failure.
-                        }
-                    }
-                }
-            }
-        }
-        return result;
-    }
-
-    // Handle regular pd merge
-    private PropertyDescriptor mergePropertyDescriptor(PropertyDescriptor pd1,
-                                                       PropertyDescriptor pd2) {
-        if (pd1.getClass0().isAssignableFrom(pd2.getClass0())) {
-            return new PropertyDescriptor(pd1, pd2);
-        } else {
-            return new PropertyDescriptor(pd2, pd1);
-        }
-    }
-
-    // Handle regular ipd merge
-    private PropertyDescriptor mergePropertyDescriptor(IndexedPropertyDescriptor ipd1,
-                                                       IndexedPropertyDescriptor ipd2) {
-        if (ipd1.getClass0().isAssignableFrom(ipd2.getClass0())) {
-            return new IndexedPropertyDescriptor(ipd1, ipd2);
-        } else {
-            return new IndexedPropertyDescriptor(ipd2, ipd1);
-        }
-    }
-
-    /**
-     * @return An array of EventSetDescriptors describing the kinds of
-     * events fired by the target bean.
-     */
-    private EventSetDescriptor[] getTargetEventInfo() throws IntrospectionException {
-        if (events == null) {
-            events = new HashMap();
-        }
-
-        // Check if the bean has its own BeanInfo that will provide
-        // explicit information.
-        EventSetDescriptor[] explicitEvents = null;
-        if (explicitBeanInfo != null) {
-            explicitEvents = explicitBeanInfo.getEventSetDescriptors();
-            int ix = explicitBeanInfo.getDefaultEventIndex();
-            if (ix >= 0 && ix < explicitEvents.length) {
-                defaultEventName = explicitEvents[ix].getName();
-            }
-        }
-
-        if (explicitEvents == null && superBeanInfo != null) {
-            // We have no explicit BeanInfo events.  Check with our parent.
-            EventSetDescriptor supers[] = superBeanInfo.getEventSetDescriptors();
-            for (int i = 0 ; i < supers.length; i++) {
-                addEvent(supers[i]);
-            }
-            int ix = superBeanInfo.getDefaultEventIndex();
-            if (ix >= 0 && ix < supers.length) {
-                defaultEventName = supers[ix].getName();
-            }
-        }
-
-        for (int i = 0; i < additionalBeanInfo.length; i++) {
-            EventSetDescriptor additional[] = additionalBeanInfo[i].getEventSetDescriptors();
-            if (additional != null) {
-                for (int j = 0 ; j < additional.length; j++) {
-                    addEvent(additional[j]);
-                }
-            }
-        }
-
-        if (explicitEvents != null) {
-            // Add the explicit explicitBeanInfo data to our results.
-            for (int i = 0 ; i < explicitEvents.length; i++) {
-                addEvent(explicitEvents[i]);
-            }
-
-        } else {
-
-            // Apply some reflection to the current class.
-
-            // Get an array of all the public beans methods at this level
-            Method methodList[] = getPublicDeclaredMethods(beanClass);
-
-            // Find all suitable "add", "remove" and "get" Listener methods
-            // The name of the listener type is the key for these hashtables
-            // i.e, ActionListener
-            Map adds = null;
-            Map removes = null;
-            Map gets = null;
-
-            for (int i = 0; i < methodList.length; i++) {
-                Method method = methodList[i];
-                if (method == null) {
-                    continue;
-                }
-                // skip static methods.
-                int mods = method.getModifiers();
-                if (Modifier.isStatic(mods)) {
-                    continue;
-                }
-                String name = method.getName();
-                // Optimization avoid getParameterTypes
-                if (!name.startsWith(ADD_PREFIX) && !name.startsWith(REMOVE_PREFIX)
-                    && !name.startsWith(GET_PREFIX)) {
-                    continue;
-                }
-
-                if (name.startsWith(ADD_PREFIX)) {
-                    Class<?> returnType = method.getReturnType();
-                    if (returnType == void.class) {
-                        Type[] parameterTypes = method.getGenericParameterTypes();
-                        if (parameterTypes.length == 1) {
-                            Class<?> type = TypeResolver.erase(TypeResolver.resolveInClass(beanClass, parameterTypes[0]));
-                            if (Introspector.isSubclass(type, eventListenerType)) {
-                                String listenerName = name.substring(3);
-                                if (listenerName.length() > 0 &&
-                                    type.getName().endsWith(listenerName)) {
-                                    if (adds == null) {
-                                        adds = new HashMap();
-                                    }
-                                    adds.put(listenerName, method);
-                                }
-                            }
-                        }
-                    }
-                }
-                else if (name.startsWith(REMOVE_PREFIX)) {
-                    Class<?> returnType = method.getReturnType();
-                    if (returnType == void.class) {
-                        Type[] parameterTypes = method.getGenericParameterTypes();
-                        if (parameterTypes.length == 1) {
-                            Class<?> type = TypeResolver.erase(TypeResolver.resolveInClass(beanClass, parameterTypes[0]));
-                            if (Introspector.isSubclass(type, eventListenerType)) {
-                                String listenerName = name.substring(6);
-                                if (listenerName.length() > 0 &&
-                                    type.getName().endsWith(listenerName)) {
-                                    if (removes == null) {
-                                        removes = new HashMap();
-                                    }
-                                    removes.put(listenerName, method);
-                                }
-                            }
-                        }
-                    }
-                }
-                else if (name.startsWith(GET_PREFIX)) {
-                    Class<?>[] parameterTypes = method.getParameterTypes();
-                    if (parameterTypes.length == 0) {
-                        Class<?> returnType = FeatureDescriptor.getReturnType(beanClass, method);
-                        if (returnType.isArray()) {
-                            Class<?> type = returnType.getComponentType();
-                            if (Introspector.isSubclass(type, eventListenerType)) {
-                                String listenerName  = name.substring(3, name.length() - 1);
-                                if (listenerName.length() > 0 &&
-                                    type.getName().endsWith(listenerName)) {
-                                    if (gets == null) {
-                                        gets = new HashMap();
-                                    }
-                                    gets.put(listenerName, method);
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-
-            if (adds != null && removes != null) {
-                // Now look for matching addFooListener+removeFooListener pairs.
-                // Bonus if there is a matching getFooListeners method as well.
-                Iterator keys = adds.keySet().iterator();
-                while (keys.hasNext()) {
-                    String listenerName = (String) keys.next();
-                    // Skip any "add" which doesn't have a matching "remove" or
-                    // a listener name that doesn't end with Listener
-                    if (removes.get(listenerName) == null || !listenerName.endsWith("Listener")) {
-                        continue;
-                    }
-                    String eventName = decapitalize(listenerName.substring(0, listenerName.length()-8));
-                    Method addMethod = (Method)adds.get(listenerName);
-                    Method removeMethod = (Method)removes.get(listenerName);
-                    Method getMethod = null;
-                    if (gets != null) {
-                        getMethod = (Method)gets.get(listenerName);
-                    }
-                    Class argType = FeatureDescriptor.getParameterTypes(beanClass, addMethod)[0];
-
-                    // generate a list of Method objects for each of the target methods:
-                    Method allMethods[] = getPublicDeclaredMethods(argType);
-                    List validMethods = new ArrayList(allMethods.length);
-                    for (int i = 0; i < allMethods.length; i++) {
-                        if (allMethods[i] == null) {
-                            continue;
-                        }
-
-                        if (isEventHandler(allMethods[i])) {
-                            validMethods.add(allMethods[i]);
-                        }
-                    }
-                    Method[] methods = (Method[])validMethods.toArray(new Method[validMethods.size()]);
-
-                    EventSetDescriptor esd = new EventSetDescriptor(eventName, argType,
-                                                                    methods, addMethod,
-                                                                    removeMethod,
-                                                                    getMethod);
-
-                    // If the adder method throws the TooManyListenersException then it
-                    // is a Unicast event source.
-                    if (throwsException(addMethod,
-                                        java.util.TooManyListenersException.class)) {
-                        esd.setUnicast(true);
-                    }
-                    addEvent(esd);
-                }
-            } // if (adds != null ...
-        }
-        EventSetDescriptor[] result;
-        if (events.size() == 0) {
-            result = EMPTY_EVENTSETDESCRIPTORS;
-        } else {
-            // Allocate and populate the result array.
-            result = new EventSetDescriptor[events.size()];
-            result = (EventSetDescriptor[])events.values().toArray(result);
-
-            // Set the default index.
-            if (defaultEventName != null) {
-                for (int i = 0; i < result.length; i++) {
-                    if (defaultEventName.equals(result[i].getName())) {
-                        defaultEventIndex = i;
-                    }
-                }
-            }
-        }
-        return result;
-    }
-
-    private void addEvent(EventSetDescriptor esd) {
-        String key = esd.getName();
-        if (esd.getName().equals("propertyChange")) {
-            propertyChangeSource = true;
-        }
-        EventSetDescriptor old = (EventSetDescriptor)events.get(key);
-        if (old == null) {
-            events.put(key, esd);
-            return;
-        }
-        EventSetDescriptor composite = new EventSetDescriptor(old, esd);
-        events.put(key, composite);
-    }
-
-    /**
-     * @return An array of MethodDescriptors describing the private
-     * methods supported by the target bean.
-     */
-    private MethodDescriptor[] getTargetMethodInfo() {
-        if (methods == null) {
-            methods = new HashMap(100);
-        }
-
-        // Check if the bean has its own BeanInfo that will provide
-        // explicit information.
-        MethodDescriptor[] explicitMethods = null;
-        if (explicitBeanInfo != null) {
-            explicitMethods = explicitBeanInfo.getMethodDescriptors();
-        }
-
-        if (explicitMethods == null && superBeanInfo != null) {
-            // We have no explicit BeanInfo methods.  Check with our parent.
-            MethodDescriptor supers[] = superBeanInfo.getMethodDescriptors();
-            for (int i = 0 ; i < supers.length; i++) {
-                addMethod(supers[i]);
-            }
-        }
-
-        for (int i = 0; i < additionalBeanInfo.length; i++) {
-            MethodDescriptor additional[] = additionalBeanInfo[i].getMethodDescriptors();
-            if (additional != null) {
-                for (int j = 0 ; j < additional.length; j++) {
-                    addMethod(additional[j]);
-                }
-            }
-        }
-
-        if (explicitMethods != null) {
-            // Add the explicit explicitBeanInfo data to our results.
-            for (int i = 0 ; i < explicitMethods.length; i++) {
-                addMethod(explicitMethods[i]);
-            }
-
-        } else {
-
-            // Apply some reflection to the current class.
-
-            // First get an array of all the beans methods at this level
-            Method methodList[] = getPublicDeclaredMethods(beanClass);
-
-            // Now analyze each method.
-            for (int i = 0; i < methodList.length; i++) {
-                Method method = methodList[i];
-                if (method == null) {
-                    continue;
-                }
-                MethodDescriptor md = new MethodDescriptor(method);
-                addMethod(md);
-            }
-        }
-
-        // Allocate and populate the result array.
-        MethodDescriptor result[] = new MethodDescriptor[methods.size()];
-        result = (MethodDescriptor[])methods.values().toArray(result);
-
-        return result;
-    }
-
-    private void addMethod(MethodDescriptor md) {
-        // We have to be careful here to distinguish method by both name
-        // and argument lists.
-        // This method gets called a *lot, so we try to be efficient.
-        String name = md.getName();
-
-        MethodDescriptor old = (MethodDescriptor)methods.get(name);
-        if (old == null) {
-            // This is the common case.
-            methods.put(name, md);
-            return;
-        }
-
-        // We have a collision on method names.  This is rare.
-
-        // Check if old and md have the same type.
-        String[] p1 = md.getParamNames();
-        String[] p2 = old.getParamNames();
-
-        boolean match = false;
-        if (p1.length == p2.length) {
-            match = true;
-            for (int i = 0; i < p1.length; i++) {
-                if (p1[i] != p2[i]) {
-                    match = false;
-                    break;
-                }
-            }
-        }
-        if (match) {
-            MethodDescriptor composite = new MethodDescriptor(old, md);
-            methods.put(name, composite);
-            return;
-        }
-
-        // We have a collision on method names with different type signatures.
-        // This is very rare.
-
-        String longKey = makeQualifiedMethodName(name, p1);
-        old = (MethodDescriptor)methods.get(longKey);
-        if (old == null) {
-            methods.put(longKey, md);
-            return;
-        }
-        MethodDescriptor composite = new MethodDescriptor(old, md);
-        methods.put(longKey, composite);
-    }
-
-    /**
-     * Creates a key for a method in a method cache.
-     */
-    private static String makeQualifiedMethodName(String name, String[] params) {
-        StringBuffer sb = new StringBuffer(name);
-        sb.append('=');
-        for (int i = 0; i < params.length; i++) {
-            sb.append(':');
-            sb.append(params[i]);
-        }
-        return sb.toString();
-    }
-
-    private int getTargetDefaultEventIndex() {
-        return defaultEventIndex;
-    }
-
-    private int getTargetDefaultPropertyIndex() {
-        return defaultPropertyIndex;
-    }
-
-    private BeanDescriptor getTargetBeanDescriptor() {
-        // Use explicit info, if available,
-        if (explicitBeanInfo != null) {
-            BeanDescriptor bd = explicitBeanInfo.getBeanDescriptor();
-            if (bd != null) {
-                return (bd);
-            }
-        }
-        // OK, fabricate a default BeanDescriptor.
-        return new BeanDescriptor(this.beanClass, findCustomizerClass(this.beanClass));
-    }
-
-    private static Class<?> findCustomizerClass(Class<?> type) {
-        String name = type.getName() + "Customizer";
-        try {
-            type = ClassFinder.findClass(name, type.getClassLoader());
-            // Each customizer should inherit java.awt.Component and implement java.beans.Customizer
-            // according to the section 9.3 of JavaBeans&trade; specification
-            if (Component.class.isAssignableFrom(type) && Customizer.class.isAssignableFrom(type)) {
-                return type;
-            }
-        }
-        catch (Exception exception) {
-            // ignore any exceptions
-        }
-        return null;
-    }
-
-    private boolean isEventHandler(Method m) {
-        // We assume that a method is an event handler if it has a single
-        // argument, whose type inherit from java.util.Event.
-        Type argTypes[] = m.getGenericParameterTypes();
-        if (argTypes.length != 1) {
-            return false;
-        }
-        return isSubclass(TypeResolver.erase(TypeResolver.resolveInClass(beanClass, argTypes[0])), EventObject.class);
-    }
-
-    /*
-     * Internal method to return *public* methods within a class.
-     */
-    private static Method[] getPublicDeclaredMethods(Class clz) {
-        // Looking up Class.getDeclaredMethods is relatively expensive,
-        // so we cache the results.
-        if (!ReflectUtil.isPackageAccessible(clz)) {
-            return new Method[0];
-        }
-        synchronized (declaredMethodCache) {
-            Method[] result = declaredMethodCache.get(clz);
-            if (result == null) {
-                result = clz.getMethods();
-                for (int i = 0; i < result.length; i++) {
-                    Method method = result[i];
-                    if (!method.getDeclaringClass().equals(clz)) {
-                        result[i] = null;
-                    }
-                }
-                declaredMethodCache.put(clz, result);
-            }
-            return result;
-        }
-    }
-
-    //======================================================================
-    // Package private support methods.
-    //======================================================================
-
-    /**
-     * Internal support for finding a target methodName with a given
-     * parameter list on a given class.
-     */
-    private static Method internalFindMethod(Class start, String methodName,
-                                                 int argCount, Class args[]) {
-        // For overriden methods we need to find the most derived version.
-        // So we start with the given class and walk up the superclass chain.
-
-        Method method = null;
-
-        for (Class cl = start; cl != null; cl = cl.getSuperclass()) {
-            Method methods[] = getPublicDeclaredMethods(cl);
-            for (int i = 0; i < methods.length; i++) {
-                method = methods[i];
-                if (method == null) {
-                    continue;
-                }
-
-                // make sure method signature matches.
-                if (method.getName().equals(methodName)) {
-                    Type[] params = method.getGenericParameterTypes();
-                    if (params.length == argCount) {
-                        if (args != null) {
-                            boolean different = false;
-                            if (argCount > 0) {
-                                for (int j = 0; j < argCount; j++) {
-                                    if (TypeResolver.erase(TypeResolver.resolveInClass(start, params[j])) != args[j]) {
-                                        different = true;
-                                        continue;
-                                    }
-                                }
-                                if (different) {
-                                    continue;
-                                }
-                            }
-                        }
-                        return method;
-                    }
-                }
-            }
-        }
-        method = null;
-
-        // Now check any inherited interfaces.  This is necessary both when
-        // the argument class is itself an interface, and when the argument
-        // class is an abstract class.
-        Class ifcs[] = start.getInterfaces();
-        for (int i = 0 ; i < ifcs.length; i++) {
-            // Note: The original implementation had both methods calling
-            // the 3 arg method. This is preserved but perhaps it should
-            // pass the args array instead of null.
-            method = internalFindMethod(ifcs[i], methodName, argCount, null);
-            if (method != null) {
-                break;
-            }
-        }
-        return method;
-    }
-
-    /**
-     * Find a target methodName on a given class.
-     */
-    static Method findMethod(Class cls, String methodName, int argCount) {
-        return findMethod(cls, methodName, argCount, null);
-    }
-
-    /**
-     * Find a target methodName with specific parameter list on a given class.
-     * <p>
-     * Used in the contructors of the EventSetDescriptor,
-     * PropertyDescriptor and the IndexedPropertyDescriptor.
-     * <p>
-     * @param cls The Class object on which to retrieve the method.
-     * @param methodName Name of the method.
-     * @param argCount Number of arguments for the desired method.
-     * @param args Array of argument types for the method.
-     * @return the method or null if not found
-     */
-    static Method findMethod(Class cls, String methodName, int argCount,
-                             Class args[]) {
-        if (methodName == null) {
-            return null;
-        }
-        return internalFindMethod(cls, methodName, argCount, args);
-    }
-
-    /**
-     * Return true if class a is either equivalent to class b, or
-     * if class a is a subclass of class b, i.e. if a either "extends"
-     * or "implements" b.
-     * Note tht either or both "Class" objects may represent interfaces.
-     */
-    static  boolean isSubclass(Class a, Class b) {
-        // We rely on the fact that for any given java class or
-        // primtitive type there is a unqiue Class object, so
-        // we can use object equivalence in the comparisons.
-        if (a == b) {
-            return true;
-        }
-        if (a == null || b == null) {
-            return false;
-        }
-        for (Class x = a; x != null; x = x.getSuperclass()) {
-            if (x == b) {
-                return true;
-            }
-            if (b.isInterface()) {
-                Class interfaces[] = x.getInterfaces();
-                for (int i = 0; i < interfaces.length; i++) {
-                    if (isSubclass(interfaces[i], b)) {
-                        return true;
-                    }
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Return true iff the given method throws the given exception.
-     */
-    private boolean throwsException(Method method, Class exception) {
-        Class exs[] = method.getExceptionTypes();
-        for (int i = 0; i < exs.length; i++) {
-            if (exs[i] == exception) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Try to create an instance of a named class.
-     * First try the classloader of "sibling", then try the system
-     * classloader then the class loader of the current Thread.
-     */
-    static Object instantiate(Class sibling, String className)
-                 throws InstantiationException, IllegalAccessException,
-                                                ClassNotFoundException {
-        // First check with sibling's classloader (if any).
-        ClassLoader cl = sibling.getClassLoader();
-        Class cls = ClassFinder.findClass(className, cl);
-        return cls.newInstance();
-    }
-
-} // end class Introspector
-
-//===========================================================================
-
-/**
- * Package private implementation support class for Introspector's
- * internal use.
- * <p>
- * Mostly this is used as a placeholder for the descriptors.
- */
-
-class GenericBeanInfo extends SimpleBeanInfo {
-
-    private BeanDescriptor beanDescriptor;
-    private EventSetDescriptor[] events;
-    private int defaultEvent;
-    private PropertyDescriptor[] properties;
-    private int defaultProperty;
-    private MethodDescriptor[] methods;
-    private Reference<BeanInfo> targetBeanInfoRef;
-
-    public GenericBeanInfo(BeanDescriptor beanDescriptor,
-                EventSetDescriptor[] events, int defaultEvent,
-                PropertyDescriptor[] properties, int defaultProperty,
-                MethodDescriptor[] methods, BeanInfo targetBeanInfo) {
-        this.beanDescriptor = beanDescriptor;
-        this.events = events;
-        this.defaultEvent = defaultEvent;
-        this.properties = properties;
-        this.defaultProperty = defaultProperty;
-        this.methods = methods;
-        this.targetBeanInfoRef = (targetBeanInfo != null)
-                ? new SoftReference<>(targetBeanInfo)
-                : null;
-    }
-
-    /**
-     * Package-private dup constructor
-     * This must isolate the new object from any changes to the old object.
-     */
-    GenericBeanInfo(GenericBeanInfo old) {
-
-        beanDescriptor = new BeanDescriptor(old.beanDescriptor);
-        if (old.events != null) {
-            int len = old.events.length;
-            events = new EventSetDescriptor[len];
-            for (int i = 0; i < len; i++) {
-                events[i] = new EventSetDescriptor(old.events[i]);
-            }
-        }
-        defaultEvent = old.defaultEvent;
-        if (old.properties != null) {
-            int len = old.properties.length;
-            properties = new PropertyDescriptor[len];
-            for (int i = 0; i < len; i++) {
-                PropertyDescriptor oldp = old.properties[i];
-                if (oldp instanceof IndexedPropertyDescriptor) {
-                    properties[i] = new IndexedPropertyDescriptor(
-                                        (IndexedPropertyDescriptor) oldp);
-                } else {
-                    properties[i] = new PropertyDescriptor(oldp);
-                }
-            }
-        }
-        defaultProperty = old.defaultProperty;
-        if (old.methods != null) {
-            int len = old.methods.length;
-            methods = new MethodDescriptor[len];
-            for (int i = 0; i < len; i++) {
-                methods[i] = new MethodDescriptor(old.methods[i]);
-            }
-        }
-        this.targetBeanInfoRef = old.targetBeanInfoRef;
-    }
-
-    public PropertyDescriptor[] getPropertyDescriptors() {
-        return properties;
-    }
-
-    public int getDefaultPropertyIndex() {
-        return defaultProperty;
-    }
-
-    public EventSetDescriptor[] getEventSetDescriptors() {
-        return events;
-    }
-
-    public int getDefaultEventIndex() {
-        return defaultEvent;
-    }
-
-    public MethodDescriptor[] getMethodDescriptors() {
-        return methods;
-    }
-
-    public BeanDescriptor getBeanDescriptor() {
-        return beanDescriptor;
-    }
-
-    public java.awt.Image getIcon(int iconKind) {
-        BeanInfo targetBeanInfo = getTargetBeanInfo();
-        if (targetBeanInfo != null) {
-            return targetBeanInfo.getIcon(iconKind);
-        }
-        return super.getIcon(iconKind);
-    }
-
-    private BeanInfo getTargetBeanInfo() {
-        if (this.targetBeanInfoRef == null) {
-            return null;
-        }
-        BeanInfo targetBeanInfo = this.targetBeanInfoRef.get();
-        if (targetBeanInfo == null) {
-            targetBeanInfo = ThreadGroupContext.getContext().getBeanInfoFinder()
-                    .find(this.beanDescriptor.getBeanClass());
-            if (targetBeanInfo != null) {
-                this.targetBeanInfoRef = new SoftReference<>(targetBeanInfo);
-            }
-        }
-        return targetBeanInfo;
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/MetaData.java b/ojluni/src/main/java/java/beans/MetaData.java
deleted file mode 100755
index 0c59c39..0000000
--- a/ojluni/src/main/java/java/beans/MetaData.java
+++ /dev/null
@@ -1,1450 +0,0 @@
-/*
- * Copyright (c) 2000, 2010, 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.
- */
-package java.beans;
-
-import com.sun.beans.finder.PrimitiveWrapperMap;
-
-import java.awt.AWTKeyStroke;
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.GridBagConstraints;
-import java.awt.Insets;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.event.KeyEvent;
-import java.awt.font.TextAttribute;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-import java.util.*;
-
-import javax.swing.Box;
-import javax.swing.JLayeredPane;
-import javax.swing.border.MatteBorder;
-import javax.swing.plaf.ColorUIResource;
-
-import sun.swing.PrintColorUIResource;
-
-import java.util.Objects;
-
-/*
- * Like the <code>Intropector</code>, the <code>MetaData</code> class
- * contains <em>meta</em> objects that describe the way
- * classes should express their state in terms of their
- * own public APIs.
- *
- * @see java.beans.Intropector
- *
- * @author Philip Milne
- * @author Steve Langley
- */
-class MetaData {
-
-static final class NullPersistenceDelegate extends PersistenceDelegate {
-    // Note this will be called by all classes when they reach the
-    // top of their superclass chain.
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-    }
-    protected Expression instantiate(Object oldInstance, Encoder out) { return null; }
-
-    public void writeObject(Object oldInstance, Encoder out) {
-    // System.out.println("NullPersistenceDelegate:writeObject " + oldInstance);
-    }
-}
-
-/**
- * The persistence delegate for <CODE>enum</CODE> classes.
- *
- * @author Sergey A. Malenkov
- */
-static final class EnumPersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return oldInstance == newInstance;
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        Enum e = (Enum) oldInstance;
-        return new Expression(e, Enum.class, "valueOf", new Object[]{e.getDeclaringClass(), e.name()});
-    }
-}
-
-static final class PrimitivePersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return oldInstance.equals(newInstance);
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        return new Expression(oldInstance, oldInstance.getClass(),
-                  "new", new Object[]{oldInstance.toString()});
-    }
-}
-
-static final class ArrayPersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return (newInstance != null &&
-                oldInstance.getClass() == newInstance.getClass() && // Also ensures the subtype is correct.
-                Array.getLength(oldInstance) == Array.getLength(newInstance));
-        }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        // System.out.println("instantiate: " + type + " " + oldInstance);
-        Class oldClass = oldInstance.getClass();
-        return new Expression(oldInstance, Array.class, "newInstance",
-                   new Object[]{oldClass.getComponentType(),
-                                new Integer(Array.getLength(oldInstance))});
-        }
-
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        int n = Array.getLength(oldInstance);
-        for (int i = 0; i < n; i++) {
-            Object index = new Integer(i);
-            // Expression oldGetExp = new Expression(Array.class, "get", new Object[]{oldInstance, index});
-            // Expression newGetExp = new Expression(Array.class, "get", new Object[]{newInstance, index});
-            Expression oldGetExp = new Expression(oldInstance, "get", new Object[]{index});
-            Expression newGetExp = new Expression(newInstance, "get", new Object[]{index});
-            try {
-                Object oldValue = oldGetExp.getValue();
-                Object newValue = newGetExp.getValue();
-                out.writeExpression(oldGetExp);
-                if (!Objects.equals(newValue, out.get(oldValue))) {
-                    // System.out.println("Not equal: " + newGetExp + " != " + actualGetExp);
-                    // invokeStatement(Array.class, "set", new Object[]{oldInstance, index, oldValue}, out);
-                    DefaultPersistenceDelegate.invokeStatement(oldInstance, "set", new Object[]{index, oldValue}, out);
-                }
-            }
-            catch (Exception e) {
-                // System.err.println("Warning:: failed to write: " + oldGetExp);
-                out.getExceptionListener().exceptionThrown(e);
-            }
-        }
-    }
-}
-
-static final class ProxyPersistenceDelegate extends PersistenceDelegate {
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        Class type = oldInstance.getClass();
-        java.lang.reflect.Proxy p = (java.lang.reflect.Proxy)oldInstance;
-        // This unappealing hack is not required but makes the
-        // representation of EventHandlers much more concise.
-        java.lang.reflect.InvocationHandler ih = java.lang.reflect.Proxy.getInvocationHandler(p);
-        if (ih instanceof EventHandler) {
-            EventHandler eh = (EventHandler)ih;
-            Vector args = new Vector();
-            args.add(type.getInterfaces()[0]);
-            args.add(eh.getTarget());
-            args.add(eh.getAction());
-            if (eh.getEventPropertyName() != null) {
-                args.add(eh.getEventPropertyName());
-            }
-            if (eh.getListenerMethodName() != null) {
-                args.setSize(4);
-                args.add(eh.getListenerMethodName());
-            }
-            return new Expression(oldInstance,
-                                  EventHandler.class,
-                                  "create",
-                                  args.toArray());
-        }
-        return new Expression(oldInstance,
-                              java.lang.reflect.Proxy.class,
-                              "newProxyInstance",
-                              new Object[]{type.getClassLoader(),
-                                           type.getInterfaces(),
-                                           ih});
-    }
-}
-
-// Strings
-static final class java_lang_String_PersistenceDelegate extends PersistenceDelegate {
-    protected Expression instantiate(Object oldInstance, Encoder out) { return null; }
-
-    public void writeObject(Object oldInstance, Encoder out) {
-        // System.out.println("NullPersistenceDelegate:writeObject " + oldInstance);
-    }
-}
-
-// Classes
-static final class java_lang_Class_PersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return oldInstance.equals(newInstance);
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        Class c = (Class)oldInstance;
-        // As of 1.3 it is not possible to call Class.forName("int"),
-        // so we have to generate different code for primitive types.
-        // This is needed for arrays whose subtype may be primitive.
-        if (c.isPrimitive()) {
-            Field field = null;
-            try {
-                field = PrimitiveWrapperMap.getType(c.getName()).getDeclaredField("TYPE");
-            } catch (NoSuchFieldException ex) {
-                System.err.println("Unknown primitive type: " + c);
-            }
-            return new Expression(oldInstance, field, "get", new Object[]{null});
-        }
-        else if (oldInstance == String.class) {
-            return new Expression(oldInstance, "", "getClass", new Object[]{});
-        }
-        else if (oldInstance == Class.class) {
-            return new Expression(oldInstance, String.class, "getClass", new Object[]{});
-        }
-        else {
-            Expression newInstance = new Expression(oldInstance, Class.class, "forName", new Object[] { c.getName() });
-            newInstance.loader = c.getClassLoader();
-            return newInstance;
-        }
-    }
-}
-
-// Fields
-static final class java_lang_reflect_Field_PersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return oldInstance.equals(newInstance);
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        Field f = (Field)oldInstance;
-        return new Expression(oldInstance,
-                f.getDeclaringClass(),
-                "getField",
-                new Object[]{f.getName()});
-    }
-}
-
-// Methods
-static final class java_lang_reflect_Method_PersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return oldInstance.equals(newInstance);
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        Method m = (Method)oldInstance;
-        return new Expression(oldInstance,
-                m.getDeclaringClass(),
-                "getMethod",
-                new Object[]{m.getName(), m.getParameterTypes()});
-    }
-}
-
-// Dates
-
-/**
- * The persistence delegate for <CODE>java.util.Date</CODE> classes.
- * Do not extend DefaultPersistenceDelegate to improve performance and
- * to avoid problems with <CODE>java.sql.Date</CODE>,
- * <CODE>java.sql.Time</CODE> and <CODE>java.sql.Timestamp</CODE>.
- *
- * @author Sergey A. Malenkov
- */
-static class java_util_Date_PersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        if (!super.mutatesTo(oldInstance, newInstance)) {
-            return false;
-        }
-        Date oldDate = (Date)oldInstance;
-        Date newDate = (Date)newInstance;
-
-        return oldDate.getTime() == newDate.getTime();
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        Date date = (Date)oldInstance;
-        return new Expression(date, date.getClass(), "new", new Object[] {date.getTime()});
-    }
-}
-
-/**
- * The persistence delegate for <CODE>java.sql.Timestamp</CODE> classes.
- * It supports nanoseconds.
- *
- * @author Sergey A. Malenkov
- */
-static final class java_sql_Timestamp_PersistenceDelegate extends java_util_Date_PersistenceDelegate {
-    private static final Method getNanosMethod = getNanosMethod();
-
-    private static Method getNanosMethod() {
-        try {
-            Class<?> c = Class.forName("java.sql.Timestamp", true, null);
-            return c.getMethod("getNanos");
-        } catch (ClassNotFoundException e) {
-            return null;
-        } catch (NoSuchMethodException e) {
-            throw new AssertionError(e);
-        }
-    }
-
-    /**
-     * Invoke Timstamp getNanos.
-     */
-    private static int getNanos(Object obj) {
-        if (getNanosMethod == null)
-            throw new AssertionError("Should not get here");
-        try {
-            return (Integer)getNanosMethod.invoke(obj);
-        } catch (InvocationTargetException e) {
-            Throwable cause = e.getCause();
-            if (cause instanceof RuntimeException)
-                throw (RuntimeException)cause;
-            if (cause instanceof Error)
-                throw (Error)cause;
-            throw new AssertionError(e);
-        } catch (IllegalAccessException iae) {
-            throw new AssertionError(iae);
-        }
-    }
-
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        // assumes oldInstance and newInstance are Timestamps
-        int nanos = getNanos(oldInstance);
-        if (nanos != getNanos(newInstance)) {
-            out.writeStatement(new Statement(oldInstance, "setNanos", new Object[] {nanos}));
-        }
-    }
-}
-
-// Collections
-
-/*
-The Hashtable and AbstractMap classes have no common ancestor yet may
-be handled with a single persistence delegate: one which uses the methods
-of the Map insterface exclusively. Attatching the persistence delegates
-to the interfaces themselves is fraught however since, in the case of
-the Map, both the AbstractMap and HashMap classes are declared to
-implement the Map interface, leaving the obvious implementation prone
-to repeating their initialization. These issues and questions around
-the ordering of delegates attached to interfaces have lead us to
-ignore any delegates attached to interfaces and force all persistence
-delegates to be registered with concrete classes.
-*/
-
-/**
- * The base class for persistence delegates for inner classes
- * that can be created using {@link Collections}.
- *
- * @author Sergey A. Malenkov
- */
-private static abstract class java_util_Collections extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        if (!super.mutatesTo(oldInstance, newInstance)) {
-            return false;
-        }
-        if ((oldInstance instanceof List) || (oldInstance instanceof Set) || (oldInstance instanceof Map)) {
-            return oldInstance.equals(newInstance);
-        }
-        Collection oldC = (Collection) oldInstance;
-        Collection newC = (Collection) newInstance;
-        return (oldC.size() == newC.size()) && oldC.containsAll(newC);
-    }
-
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        // do not initialize these custom collections in default way
-    }
-
-    static final class EmptyList_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            return new Expression(oldInstance, Collections.class, "emptyList", null);
-        }
-    }
-
-    static final class EmptySet_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            return new Expression(oldInstance, Collections.class, "emptySet", null);
-        }
-    }
-
-    static final class EmptyMap_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            return new Expression(oldInstance, Collections.class, "emptyMap", null);
-        }
-    }
-
-    static final class SingletonList_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            List list = (List) oldInstance;
-            return new Expression(oldInstance, Collections.class, "singletonList", new Object[]{list.get(0)});
-        }
-    }
-
-    static final class SingletonSet_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            Set set = (Set) oldInstance;
-            return new Expression(oldInstance, Collections.class, "singleton", new Object[]{set.iterator().next()});
-        }
-    }
-
-    static final class SingletonMap_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            Map map = (Map) oldInstance;
-            Object key = map.keySet().iterator().next();
-            return new Expression(oldInstance, Collections.class, "singletonMap", new Object[]{key, map.get(key)});
-        }
-    }
-
-    static final class UnmodifiableCollection_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            List list = new ArrayList((Collection) oldInstance);
-            return new Expression(oldInstance, Collections.class, "unmodifiableCollection", new Object[]{list});
-        }
-    }
-
-    static final class UnmodifiableList_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            List list = new LinkedList((Collection) oldInstance);
-            return new Expression(oldInstance, Collections.class, "unmodifiableList", new Object[]{list});
-        }
-    }
-
-    static final class UnmodifiableRandomAccessList_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            List list = new ArrayList((Collection) oldInstance);
-            return new Expression(oldInstance, Collections.class, "unmodifiableList", new Object[]{list});
-        }
-    }
-
-    static final class UnmodifiableSet_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            Set set = new HashSet((Set) oldInstance);
-            return new Expression(oldInstance, Collections.class, "unmodifiableSet", new Object[]{set});
-        }
-    }
-
-    static final class UnmodifiableSortedSet_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            SortedSet set = new TreeSet((SortedSet) oldInstance);
-            return new Expression(oldInstance, Collections.class, "unmodifiableSortedSet", new Object[]{set});
-        }
-    }
-
-    static final class UnmodifiableMap_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            Map map = new HashMap((Map) oldInstance);
-            return new Expression(oldInstance, Collections.class, "unmodifiableMap", new Object[]{map});
-        }
-    }
-
-    static final class UnmodifiableSortedMap_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            SortedMap map = new TreeMap((SortedMap) oldInstance);
-            return new Expression(oldInstance, Collections.class, "unmodifiableSortedMap", new Object[]{map});
-        }
-    }
-
-    static final class SynchronizedCollection_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            List list = new ArrayList((Collection) oldInstance);
-            return new Expression(oldInstance, Collections.class, "synchronizedCollection", new Object[]{list});
-        }
-    }
-
-    static final class SynchronizedList_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            List list = new LinkedList((Collection) oldInstance);
-            return new Expression(oldInstance, Collections.class, "synchronizedList", new Object[]{list});
-        }
-    }
-
-    static final class SynchronizedRandomAccessList_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            List list = new ArrayList((Collection) oldInstance);
-            return new Expression(oldInstance, Collections.class, "synchronizedList", new Object[]{list});
-        }
-    }
-
-    static final class SynchronizedSet_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            Set set = new HashSet((Set) oldInstance);
-            return new Expression(oldInstance, Collections.class, "synchronizedSet", new Object[]{set});
-        }
-    }
-
-    static final class SynchronizedSortedSet_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            SortedSet set = new TreeSet((SortedSet) oldInstance);
-            return new Expression(oldInstance, Collections.class, "synchronizedSortedSet", new Object[]{set});
-        }
-    }
-
-    static final class SynchronizedMap_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            Map map = new HashMap((Map) oldInstance);
-            return new Expression(oldInstance, Collections.class, "synchronizedMap", new Object[]{map});
-        }
-    }
-
-    static final class SynchronizedSortedMap_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            SortedMap map = new TreeMap((SortedMap) oldInstance);
-            return new Expression(oldInstance, Collections.class, "synchronizedSortedMap", new Object[]{map});
-        }
-    }
-
-    static final class CheckedCollection_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            Object type = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedCollection.type");
-            List list = new ArrayList((Collection) oldInstance);
-            return new Expression(oldInstance, Collections.class, "checkedCollection", new Object[]{list, type});
-        }
-    }
-
-    static final class CheckedList_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            Object type = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedCollection.type");
-            List list = new LinkedList((Collection) oldInstance);
-            return new Expression(oldInstance, Collections.class, "checkedList", new Object[]{list, type});
-        }
-    }
-
-    static final class CheckedRandomAccessList_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            Object type = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedCollection.type");
-            List list = new ArrayList((Collection) oldInstance);
-            return new Expression(oldInstance, Collections.class, "checkedList", new Object[]{list, type});
-        }
-    }
-
-    static final class CheckedSet_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            Object type = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedCollection.type");
-            Set set = new HashSet((Set) oldInstance);
-            return new Expression(oldInstance, Collections.class, "checkedSet", new Object[]{set, type});
-        }
-    }
-
-    static final class CheckedSortedSet_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            Object type = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedCollection.type");
-            SortedSet set = new TreeSet((SortedSet) oldInstance);
-            return new Expression(oldInstance, Collections.class, "checkedSortedSet", new Object[]{set, type});
-        }
-    }
-
-    static final class CheckedMap_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            Object keyType   = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedMap.keyType");
-            Object valueType = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedMap.valueType");
-            Map map = new HashMap((Map) oldInstance);
-            return new Expression(oldInstance, Collections.class, "checkedMap", new Object[]{map, keyType, valueType});
-        }
-    }
-
-    static final class CheckedSortedMap_PersistenceDelegate extends java_util_Collections {
-        protected Expression instantiate(Object oldInstance, Encoder out) {
-            Object keyType   = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedMap.keyType");
-            Object valueType = MetaData.getPrivateFieldValue(oldInstance, "java.util.Collections$CheckedMap.valueType");
-            SortedMap map = new TreeMap((SortedMap) oldInstance);
-            return new Expression(oldInstance, Collections.class, "checkedSortedMap", new Object[]{map, keyType, valueType});
-        }
-    }
-}
-
-/**
- * The persistence delegate for <CODE>java.util.EnumMap</CODE> classes.
- *
- * @author Sergey A. Malenkov
- */
-static final class java_util_EnumMap_PersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return super.mutatesTo(oldInstance, newInstance) && (getType(oldInstance) == getType(newInstance));
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        return new Expression(oldInstance, EnumMap.class, "new", new Object[] {getType(oldInstance)});
-    }
-
-    private static Object getType(Object instance) {
-        return MetaData.getPrivateFieldValue(instance, "java.util.EnumMap.keyType");
-    }
-}
-
-/**
- * The persistence delegate for <CODE>java.util.EnumSet</CODE> classes.
- *
- * @author Sergey A. Malenkov
- */
-static final class java_util_EnumSet_PersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return super.mutatesTo(oldInstance, newInstance) && (getType(oldInstance) == getType(newInstance));
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        return new Expression(oldInstance, EnumSet.class, "noneOf", new Object[] {getType(oldInstance)});
-    }
-
-    private static Object getType(Object instance) {
-        return MetaData.getPrivateFieldValue(instance, "java.util.EnumSet.elementType");
-    }
-}
-
-// Collection
-static class java_util_Collection_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        java.util.Collection oldO = (java.util.Collection)oldInstance;
-        java.util.Collection newO = (java.util.Collection)newInstance;
-
-        if (newO.size() != 0) {
-            invokeStatement(oldInstance, "clear", new Object[]{}, out);
-        }
-        for (Iterator i = oldO.iterator(); i.hasNext();) {
-            invokeStatement(oldInstance, "add", new Object[]{i.next()}, out);
-        }
-    }
-}
-
-// List
-static class java_util_List_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        java.util.List oldO = (java.util.List)oldInstance;
-        java.util.List newO = (java.util.List)newInstance;
-        int oldSize = oldO.size();
-        int newSize = (newO == null) ? 0 : newO.size();
-        if (oldSize < newSize) {
-            invokeStatement(oldInstance, "clear", new Object[]{}, out);
-            newSize = 0;
-        }
-        for (int i = 0; i < newSize; i++) {
-            Object index = new Integer(i);
-
-            Expression oldGetExp = new Expression(oldInstance, "get", new Object[]{index});
-            Expression newGetExp = new Expression(newInstance, "get", new Object[]{index});
-            try {
-                Object oldValue = oldGetExp.getValue();
-                Object newValue = newGetExp.getValue();
-                out.writeExpression(oldGetExp);
-                if (!Objects.equals(newValue, out.get(oldValue))) {
-                    invokeStatement(oldInstance, "set", new Object[]{index, oldValue}, out);
-                }
-            }
-            catch (Exception e) {
-                out.getExceptionListener().exceptionThrown(e);
-            }
-        }
-        for (int i = newSize; i < oldSize; i++) {
-            invokeStatement(oldInstance, "add", new Object[]{oldO.get(i)}, out);
-        }
-    }
-}
-
-
-// Map
-static class java_util_Map_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        // System.out.println("Initializing: " + newInstance);
-        java.util.Map oldMap = (java.util.Map)oldInstance;
-        java.util.Map newMap = (java.util.Map)newInstance;
-        // Remove the new elements.
-        // Do this first otherwise we undo the adding work.
-        if (newMap != null) {
-            for (Object newKey : newMap.keySet().toArray()) {
-               // PENDING: This "key" is not in the right environment.
-                if (!oldMap.containsKey(newKey)) {
-                    invokeStatement(oldInstance, "remove", new Object[]{newKey}, out);
-                }
-            }
-        }
-        // Add the new elements.
-        for ( Object oldKey : oldMap.keySet() ) {
-            Expression oldGetExp = new Expression(oldInstance, "get", new Object[]{oldKey});
-            // Pending: should use newKey.
-            Expression newGetExp = new Expression(newInstance, "get", new Object[]{oldKey});
-            try {
-                Object oldValue = oldGetExp.getValue();
-                Object newValue = newGetExp.getValue();
-                out.writeExpression(oldGetExp);
-                if (!Objects.equals(newValue, out.get(oldValue))) {
-                    invokeStatement(oldInstance, "put", new Object[]{oldKey, oldValue}, out);
-                } else if ((newValue == null) && !newMap.containsKey(oldKey)) {
-                    // put oldValue(=null?) if oldKey is absent in newMap
-                    invokeStatement(oldInstance, "put", new Object[]{oldKey, oldValue}, out);
-                }
-            }
-            catch (Exception e) {
-                out.getExceptionListener().exceptionThrown(e);
-            }
-        }
-    }
-}
-
-static final class java_util_AbstractCollection_PersistenceDelegate extends java_util_Collection_PersistenceDelegate {}
-static final class java_util_AbstractList_PersistenceDelegate extends java_util_List_PersistenceDelegate {}
-static final class java_util_AbstractMap_PersistenceDelegate extends java_util_Map_PersistenceDelegate {}
-static final class java_util_Hashtable_PersistenceDelegate extends java_util_Map_PersistenceDelegate {}
-
-
-// Beans
-static final class java_beans_beancontext_BeanContextSupport_PersistenceDelegate extends java_util_Collection_PersistenceDelegate {}
-
-// AWT
-
-/**
- * The persistence delegate for {@link Insets}.
- * It is impossible to use {@link DefaultPersistenceDelegate}
- * because this class does not have any properties.
- *
- * @author Sergey A. Malenkov
- */
-static final class java_awt_Insets_PersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return oldInstance.equals(newInstance);
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        Insets insets = (Insets) oldInstance;
-        Object[] args = new Object[] {
-                insets.top,
-                insets.left,
-                insets.bottom,
-                insets.right,
-        };
-        return new Expression(insets, insets.getClass(), "new", args);
-    }
-}
-
-/**
- * The persistence delegate for {@link Font}.
- * It is impossible to use {@link DefaultPersistenceDelegate}
- * because size of the font can be float value.
- *
- * @author Sergey A. Malenkov
- */
-static final class java_awt_Font_PersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return oldInstance.equals(newInstance);
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        Font font = (Font) oldInstance;
-
-        int count = 0;
-        String family = null;
-        int style = Font.PLAIN;
-        int size = 12;
-
-        Map basic = font.getAttributes();
-        Map clone = new HashMap(basic.size());
-        for (Object key : basic.keySet()) {
-            Object value = basic.get(key);
-            if (value != null) {
-                clone.put(key, value);
-            }
-            if (key == TextAttribute.FAMILY) {
-                if (value instanceof String) {
-                    count++;
-                    family = (String) value;
-                }
-            }
-            else if (key == TextAttribute.WEIGHT) {
-                if (TextAttribute.WEIGHT_REGULAR.equals(value)) {
-                    count++;
-                } else if (TextAttribute.WEIGHT_BOLD.equals(value)) {
-                    count++;
-                    style |= Font.BOLD;
-                }
-            }
-            else if (key == TextAttribute.POSTURE) {
-                if (TextAttribute.POSTURE_REGULAR.equals(value)) {
-                    count++;
-                } else if (TextAttribute.POSTURE_OBLIQUE.equals(value)) {
-                    count++;
-                    style |= Font.ITALIC;
-                }
-            } else if (key == TextAttribute.SIZE) {
-                if (value instanceof Number) {
-                    Number number = (Number) value;
-                    size = number.intValue();
-                    if (size == number.floatValue()) {
-                        count++;
-                    }
-                }
-            }
-        }
-        Class type = font.getClass();
-        if (count == clone.size()) {
-            return new Expression(font, type, "new", new Object[]{family, style, size});
-        }
-        if (type == Font.class) {
-            return new Expression(font, type, "getFont", new Object[]{clone});
-        }
-        return new Expression(font, type, "new", new Object[]{Font.getFont(clone)});
-    }
-}
-
-/**
- * The persistence delegate for {@link AWTKeyStroke}.
- * It is impossible to use {@link DefaultPersistenceDelegate}
- * because this class have no public constructor.
- *
- * @author Sergey A. Malenkov
- */
-static final class java_awt_AWTKeyStroke_PersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return oldInstance.equals(newInstance);
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        AWTKeyStroke key = (AWTKeyStroke) oldInstance;
-
-        char ch = key.getKeyChar();
-        int code = key.getKeyCode();
-        int mask = key.getModifiers();
-        boolean onKeyRelease = key.isOnKeyRelease();
-
-        Object[] args = null;
-        if (ch == KeyEvent.CHAR_UNDEFINED) {
-            args = !onKeyRelease
-                    ? new Object[]{code, mask}
-                    : new Object[]{code, mask, onKeyRelease};
-        } else if (code == KeyEvent.VK_UNDEFINED) {
-            if (!onKeyRelease) {
-                args = (mask == 0)
-                        ? new Object[]{ch}
-                        : new Object[]{ch, mask};
-            } else if (mask == 0) {
-                args = new Object[]{ch, onKeyRelease};
-            }
-        }
-        if (args == null) {
-            throw new IllegalStateException("Unsupported KeyStroke: " + key);
-        }
-        Class type = key.getClass();
-        String name = type.getName();
-        // get short name of the class
-        int index = name.lastIndexOf('.') + 1;
-        if (index > 0) {
-            name = name.substring(index);
-        }
-        return new Expression( key, type, "get" + name, args );
-    }
-}
-
-static class StaticFieldsPersistenceDelegate extends PersistenceDelegate {
-    protected void installFields(Encoder out, Class<?> cls) {
-        Field fields[] = cls.getFields();
-        for(int i = 0; i < fields.length; i++) {
-            Field field = fields[i];
-            // Don't install primitives, their identity will not be preserved
-            // by wrapping.
-            if (Object.class.isAssignableFrom(field.getType())) {
-                out.writeExpression(new Expression(field, "get", new Object[]{null}));
-            }
-        }
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        throw new RuntimeException("Unrecognized instance: " + oldInstance);
-    }
-
-    public void writeObject(Object oldInstance, Encoder out) {
-        if (out.getAttribute(this) == null) {
-            out.setAttribute(this, Boolean.TRUE);
-            installFields(out, oldInstance.getClass());
-        }
-        super.writeObject(oldInstance, out);
-    }
-}
-
-// SystemColor
-static final class java_awt_SystemColor_PersistenceDelegate extends StaticFieldsPersistenceDelegate {}
-
-// TextAttribute
-static final class java_awt_font_TextAttribute_PersistenceDelegate extends StaticFieldsPersistenceDelegate {}
-
-// MenuShortcut
-static final class java_awt_MenuShortcut_PersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return oldInstance.equals(newInstance);
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        java.awt.MenuShortcut m = (java.awt.MenuShortcut)oldInstance;
-        return new Expression(oldInstance, m.getClass(), "new",
-                   new Object[]{new Integer(m.getKey()), Boolean.valueOf(m.usesShiftModifier())});
-    }
-}
-
-// Component
-static final class java_awt_Component_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        super.initialize(type, oldInstance, newInstance, out);
-        java.awt.Component c = (java.awt.Component)oldInstance;
-        java.awt.Component c2 = (java.awt.Component)newInstance;
-        // The "background", "foreground" and "font" properties.
-        // The foreground and font properties of Windows change from
-        // null to defined values after the Windows are made visible -
-        // special case them for now.
-        if (!(oldInstance instanceof java.awt.Window)) {
-            Object oldBackground = c.isBackgroundSet() ? c.getBackground() : null;
-            Object newBackground = c2.isBackgroundSet() ? c2.getBackground() : null;
-            if (!Objects.equals(oldBackground, newBackground)) {
-                invokeStatement(oldInstance, "setBackground", new Object[] { oldBackground }, out);
-            }
-            Object oldForeground = c.isForegroundSet() ? c.getForeground() : null;
-            Object newForeground = c2.isForegroundSet() ? c2.getForeground() : null;
-            if (!Objects.equals(oldForeground, newForeground)) {
-                invokeStatement(oldInstance, "setForeground", new Object[] { oldForeground }, out);
-            }
-            Object oldFont = c.isFontSet() ? c.getFont() : null;
-            Object newFont = c2.isFontSet() ? c2.getFont() : null;
-            if (!Objects.equals(oldFont, newFont)) {
-                invokeStatement(oldInstance, "setFont", new Object[] { oldFont }, out);
-            }
-        }
-
-        // Bounds
-        java.awt.Container p = c.getParent();
-        if (p == null || p.getLayout() == null) {
-            // Use the most concise construct.
-            boolean locationCorrect = c.getLocation().equals(c2.getLocation());
-            boolean sizeCorrect = c.getSize().equals(c2.getSize());
-            if (!locationCorrect && !sizeCorrect) {
-                invokeStatement(oldInstance, "setBounds", new Object[]{c.getBounds()}, out);
-            }
-            else if (!locationCorrect) {
-                invokeStatement(oldInstance, "setLocation", new Object[]{c.getLocation()}, out);
-            }
-            else if (!sizeCorrect) {
-                invokeStatement(oldInstance, "setSize", new Object[]{c.getSize()}, out);
-            }
-        }
-    }
-}
-
-// Container
-static final class java_awt_Container_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        super.initialize(type, oldInstance, newInstance, out);
-        // Ignore the children of a JScrollPane.
-        // Pending(milne) find a better way to do this.
-        if (oldInstance instanceof javax.swing.JScrollPane) {
-            return;
-        }
-        java.awt.Container oldC = (java.awt.Container)oldInstance;
-        java.awt.Component[] oldChildren = oldC.getComponents();
-        java.awt.Container newC = (java.awt.Container)newInstance;
-        java.awt.Component[] newChildren = (newC == null) ? new java.awt.Component[0] : newC.getComponents();
-
-        BorderLayout layout = ( oldC.getLayout() instanceof BorderLayout )
-                ? ( BorderLayout )oldC.getLayout()
-                : null;
-
-        JLayeredPane oldLayeredPane = (oldInstance instanceof JLayeredPane)
-                ? (JLayeredPane) oldInstance
-                : null;
-
-        // Pending. Assume all the new children are unaltered.
-        for(int i = newChildren.length; i < oldChildren.length; i++) {
-            Object[] args = ( layout != null )
-                    ? new Object[] {oldChildren[i], layout.getConstraints( oldChildren[i] )}
-                    : (oldLayeredPane != null)
-                            ? new Object[] {oldChildren[i], oldLayeredPane.getLayer(oldChildren[i]), Integer.valueOf(-1)}
-                            : new Object[] {oldChildren[i]};
-
-            invokeStatement(oldInstance, "add", args, out);
-        }
-    }
-}
-
-// Choice
-static final class java_awt_Choice_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        super.initialize(type, oldInstance, newInstance, out);
-        java.awt.Choice m = (java.awt.Choice)oldInstance;
-        java.awt.Choice n = (java.awt.Choice)newInstance;
-        for (int i = n.getItemCount(); i < m.getItemCount(); i++) {
-            invokeStatement(oldInstance, "add", new Object[]{m.getItem(i)}, out);
-        }
-    }
-}
-
-// Menu
-static final class java_awt_Menu_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        super.initialize(type, oldInstance, newInstance, out);
-        java.awt.Menu m = (java.awt.Menu)oldInstance;
-        java.awt.Menu n = (java.awt.Menu)newInstance;
-        for (int i = n.getItemCount(); i < m.getItemCount(); i++) {
-            invokeStatement(oldInstance, "add", new Object[]{m.getItem(i)}, out);
-        }
-    }
-}
-
-// MenuBar
-static final class java_awt_MenuBar_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        super.initialize(type, oldInstance, newInstance, out);
-        java.awt.MenuBar m = (java.awt.MenuBar)oldInstance;
-        java.awt.MenuBar n = (java.awt.MenuBar)newInstance;
-        for (int i = n.getMenuCount(); i < m.getMenuCount(); i++) {
-            invokeStatement(oldInstance, "add", new Object[]{m.getMenu(i)}, out);
-        }
-    }
-}
-
-// List
-static final class java_awt_List_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        super.initialize(type, oldInstance, newInstance, out);
-        java.awt.List m = (java.awt.List)oldInstance;
-        java.awt.List n = (java.awt.List)newInstance;
-        for (int i = n.getItemCount(); i < m.getItemCount(); i++) {
-            invokeStatement(oldInstance, "add", new Object[]{m.getItem(i)}, out);
-        }
-    }
-}
-
-
-// LayoutManagers
-
-// BorderLayout
-static final class java_awt_BorderLayout_PersistenceDelegate extends DefaultPersistenceDelegate {
-    private static final String[] CONSTRAINTS = {
-            BorderLayout.NORTH,
-            BorderLayout.SOUTH,
-            BorderLayout.EAST,
-            BorderLayout.WEST,
-            BorderLayout.CENTER,
-            BorderLayout.PAGE_START,
-            BorderLayout.PAGE_END,
-            BorderLayout.LINE_START,
-            BorderLayout.LINE_END,
-    };
-    @Override
-    protected void initialize(Class<?> type, Object oldInstance,
-                              Object newInstance, Encoder out) {
-        super.initialize(type, oldInstance, newInstance, out);
-        BorderLayout oldLayout = (BorderLayout) oldInstance;
-        BorderLayout newLayout = (BorderLayout) newInstance;
-        for (String constraints : CONSTRAINTS) {
-            Object oldC = oldLayout.getLayoutComponent(constraints);
-            Object newC = newLayout.getLayoutComponent(constraints);
-            // Pending, assume any existing elements are OK.
-            if (oldC != null && newC == null) {
-                invokeStatement(oldInstance, "addLayoutComponent",
-                                new Object[] { oldC, constraints }, out);
-            }
-        }
-    }
-}
-
-// CardLayout
-static final class java_awt_CardLayout_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance,
-                              Object newInstance, Encoder out) {
-        super.initialize(type, oldInstance, newInstance, out);
-        if (getVector(newInstance).isEmpty()) {
-            for (Object card : getVector(oldInstance)) {
-                Object[] args = {MetaData.getPrivateFieldValue(card, "java.awt.CardLayout$Card.name"),
-                                 MetaData.getPrivateFieldValue(card, "java.awt.CardLayout$Card.comp")};
-                invokeStatement(oldInstance, "addLayoutComponent", args, out);
-            }
-        }
-    }
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return super.mutatesTo(oldInstance, newInstance) && getVector(newInstance).isEmpty();
-    }
-    private static Vector<?> getVector(Object instance) {
-        return (Vector<?>) MetaData.getPrivateFieldValue(instance, "java.awt.CardLayout.vector");
-    }
-}
-
-// GridBagLayout
-static final class java_awt_GridBagLayout_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance,
-                              Object newInstance, Encoder out) {
-        super.initialize(type, oldInstance, newInstance, out);
-        if (getHashtable(newInstance).isEmpty()) {
-            for (Map.Entry<?,?> entry : getHashtable(oldInstance).entrySet()) {
-                Object[] args = {entry.getKey(), entry.getValue()};
-                invokeStatement(oldInstance, "addLayoutComponent", args, out);
-            }
-        }
-    }
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return super.mutatesTo(oldInstance, newInstance) && getHashtable(newInstance).isEmpty();
-    }
-    private static Hashtable<?,?> getHashtable(Object instance) {
-        return (Hashtable<?,?>) MetaData.getPrivateFieldValue(instance, "java.awt.GridBagLayout.comptable");
-    }
-}
-
-// Swing
-
-// JFrame (If we do this for Window instead of JFrame, the setVisible call
-// will be issued before we have added all the children to the JFrame and
-// will appear blank).
-static final class javax_swing_JFrame_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        super.initialize(type, oldInstance, newInstance, out);
-        java.awt.Window oldC = (java.awt.Window)oldInstance;
-        java.awt.Window newC = (java.awt.Window)newInstance;
-        boolean oldV = oldC.isVisible();
-        boolean newV = newC.isVisible();
-        if (newV != oldV) {
-            // false means: don't execute this statement at write time.
-            boolean executeStatements = out.executeStatements;
-            out.executeStatements = false;
-            invokeStatement(oldInstance, "setVisible", new Object[]{Boolean.valueOf(oldV)}, out);
-            out.executeStatements = executeStatements;
-        }
-    }
-}
-
-// Models
-
-// DefaultListModel
-static final class javax_swing_DefaultListModel_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        // Note, the "size" property will be set here.
-        super.initialize(type, oldInstance, newInstance, out);
-        javax.swing.DefaultListModel m = (javax.swing.DefaultListModel)oldInstance;
-        javax.swing.DefaultListModel n = (javax.swing.DefaultListModel)newInstance;
-        for (int i = n.getSize(); i < m.getSize(); i++) {
-            invokeStatement(oldInstance, "add", // Can also use "addElement".
-                    new Object[]{m.getElementAt(i)}, out);
-        }
-    }
-}
-
-// DefaultComboBoxModel
-static final class javax_swing_DefaultComboBoxModel_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        super.initialize(type, oldInstance, newInstance, out);
-        javax.swing.DefaultComboBoxModel m = (javax.swing.DefaultComboBoxModel)oldInstance;
-        for (int i = 0; i < m.getSize(); i++) {
-            invokeStatement(oldInstance, "addElement", new Object[]{m.getElementAt(i)}, out);
-        }
-    }
-}
-
-
-// DefaultMutableTreeNode
-static final class javax_swing_tree_DefaultMutableTreeNode_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance, Object
-                              newInstance, Encoder out) {
-        super.initialize(type, oldInstance, newInstance, out);
-        javax.swing.tree.DefaultMutableTreeNode m =
-            (javax.swing.tree.DefaultMutableTreeNode)oldInstance;
-        javax.swing.tree.DefaultMutableTreeNode n =
-            (javax.swing.tree.DefaultMutableTreeNode)newInstance;
-        for (int i = n.getChildCount(); i < m.getChildCount(); i++) {
-            invokeStatement(oldInstance, "add", new
-                Object[]{m.getChildAt(i)}, out);
-        }
-    }
-}
-
-// ToolTipManager
-static final class javax_swing_ToolTipManager_PersistenceDelegate extends PersistenceDelegate {
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        return new Expression(oldInstance, javax.swing.ToolTipManager.class,
-                              "sharedInstance", new Object[]{});
-    }
-}
-
-// JTabbedPane
-static final class javax_swing_JTabbedPane_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        super.initialize(type, oldInstance, newInstance, out);
-        javax.swing.JTabbedPane p = (javax.swing.JTabbedPane)oldInstance;
-        for (int i = 0; i < p.getTabCount(); i++) {
-            invokeStatement(oldInstance, "addTab",
-                                          new Object[]{
-                                              p.getTitleAt(i),
-                                              p.getIconAt(i),
-                                              p.getComponentAt(i)}, out);
-        }
-    }
-}
-
-// Box
-static final class javax_swing_Box_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return super.mutatesTo(oldInstance, newInstance) && getAxis(oldInstance).equals(getAxis(newInstance));
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        return new Expression(oldInstance, oldInstance.getClass(), "new", new Object[] {getAxis(oldInstance)});
-    }
-
-    private Integer getAxis(Object object) {
-        Box box = (Box) object;
-        return (Integer) MetaData.getPrivateFieldValue(box.getLayout(), "javax.swing.BoxLayout.axis");
-    }
-}
-
-// JMenu
-// Note that we do not need to state the initialiser for
-// JMenuItems since the getComponents() method defined in
-// Container will return all of the sub menu items that
-// need to be added to the menu item.
-// Not so for JMenu apparently.
-static final class javax_swing_JMenu_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        super.initialize(type, oldInstance, newInstance, out);
-        javax.swing.JMenu m = (javax.swing.JMenu)oldInstance;
-        java.awt.Component[] c = m.getMenuComponents();
-        for (int i = 0; i < c.length; i++) {
-            invokeStatement(oldInstance, "add", new Object[]{c[i]}, out);
-        }
-    }
-}
-
-/**
- * The persistence delegate for {@link MatteBorder}.
- * It is impossible to use {@link DefaultPersistenceDelegate}
- * because this class does not have writable properties.
- *
- * @author Sergey A. Malenkov
- */
-static final class javax_swing_border_MatteBorder_PersistenceDelegate extends PersistenceDelegate {
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        MatteBorder border = (MatteBorder) oldInstance;
-        Insets insets = border.getBorderInsets();
-        Object object = border.getTileIcon();
-        if (object == null) {
-            object = border.getMatteColor();
-        }
-        Object[] args = new Object[] {
-                insets.top,
-                insets.left,
-                insets.bottom,
-                insets.right,
-                object,
-        };
-        return new Expression(border, border.getClass(), "new", args);
-    }
-}
-
-/* XXX - doens't seem to work. Debug later.
-static final class javax_swing_JMenu_PersistenceDelegate extends DefaultPersistenceDelegate {
-    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
-        super.initialize(type, oldInstance, newInstance, out);
-        javax.swing.JMenu m = (javax.swing.JMenu)oldInstance;
-        javax.swing.JMenu n = (javax.swing.JMenu)newInstance;
-        for (int i = n.getItemCount(); i < m.getItemCount(); i++) {
-            invokeStatement(oldInstance, "add", new Object[]{m.getItem(i)}, out);
-        }
-    }
-}
-*/
-
-/**
- * The persistence delegate for {@link PrintColorUIResource}.
- * It is impossible to use {@link DefaultPersistenceDelegate}
- * because this class has special rule for serialization:
- * it should be converted to {@link ColorUIResource}.
- *
- * @see PrintColorUIResource#writeReplace
- *
- * @author Sergey A. Malenkov
- */
-static final class sun_swing_PrintColorUIResource_PersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return oldInstance.equals(newInstance);
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        Color color = (Color) oldInstance;
-        Object[] args = new Object[] {color.getRGB()};
-        return new Expression(color, ColorUIResource.class, "new", args);
-    }
-}
-
-    private static final Map<String,Field> fields = Collections.synchronizedMap(new WeakHashMap<String, Field>());
-    private static Hashtable internalPersistenceDelegates = new Hashtable();
-
-    private static PersistenceDelegate nullPersistenceDelegate = new NullPersistenceDelegate();
-    private static PersistenceDelegate enumPersistenceDelegate = new EnumPersistenceDelegate();
-    private static PersistenceDelegate primitivePersistenceDelegate = new PrimitivePersistenceDelegate();
-    private static PersistenceDelegate defaultPersistenceDelegate = new DefaultPersistenceDelegate();
-    private static PersistenceDelegate arrayPersistenceDelegate;
-    private static PersistenceDelegate proxyPersistenceDelegate;
-
-    static {
-
-        internalPersistenceDelegates.put("java.net.URI",
-                                         new PrimitivePersistenceDelegate());
-
-        // it is possible because MatteBorder is assignable from MatteBorderUIResource
-        internalPersistenceDelegates.put("javax.swing.plaf.BorderUIResource$MatteBorderUIResource",
-                                         new javax_swing_border_MatteBorder_PersistenceDelegate());
-
-        // it is possible because FontUIResource is supported by java_awt_Font_PersistenceDelegate
-        internalPersistenceDelegates.put("javax.swing.plaf.FontUIResource",
-                                         new java_awt_Font_PersistenceDelegate());
-
-        // it is possible because KeyStroke is supported by java_awt_AWTKeyStroke_PersistenceDelegate
-        internalPersistenceDelegates.put("javax.swing.KeyStroke",
-                                         new java_awt_AWTKeyStroke_PersistenceDelegate());
-
-        internalPersistenceDelegates.put("java.sql.Date", new java_util_Date_PersistenceDelegate());
-        internalPersistenceDelegates.put("java.sql.Time", new java_util_Date_PersistenceDelegate());
-
-        internalPersistenceDelegates.put("java.util.JumboEnumSet", new java_util_EnumSet_PersistenceDelegate());
-        internalPersistenceDelegates.put("java.util.RegularEnumSet", new java_util_EnumSet_PersistenceDelegate());
-    }
-
-    public synchronized static PersistenceDelegate getPersistenceDelegate(Class type) {
-        if (type == null) {
-            return nullPersistenceDelegate;
-        }
-        if (Enum.class.isAssignableFrom(type)) {
-            return enumPersistenceDelegate;
-        }
-        if (null != XMLEncoder.primitiveTypeFor(type)) {
-            return primitivePersistenceDelegate;
-        }
-        // The persistence delegate for arrays is non-trivial; instantiate it lazily.
-        if (type.isArray()) {
-            if (arrayPersistenceDelegate == null) {
-                arrayPersistenceDelegate = new ArrayPersistenceDelegate();
-            }
-            return arrayPersistenceDelegate;
-        }
-        // Handle proxies lazily for backward compatibility with 1.2.
-        try {
-            if (java.lang.reflect.Proxy.isProxyClass(type)) {
-                if (proxyPersistenceDelegate == null) {
-                    proxyPersistenceDelegate = new ProxyPersistenceDelegate();
-                }
-                return proxyPersistenceDelegate;
-            }
-        }
-        catch(Exception e) {}
-        // else if (type.getDeclaringClass() != null) {
-        //     return new DefaultPersistenceDelegate(new String[]{"this$0"});
-        // }
-
-        String typeName = type.getName();
-        PersistenceDelegate pd = (PersistenceDelegate)getBeanAttribute(type, "persistenceDelegate");
-        if (pd == null) {
-            pd = (PersistenceDelegate)internalPersistenceDelegates.get(typeName);
-            if (pd != null) {
-                return pd;
-            }
-            internalPersistenceDelegates.put(typeName, defaultPersistenceDelegate);
-            try {
-                String name =  type.getName();
-                Class c = Class.forName("java.beans.MetaData$" + name.replace('.', '_')
-                                        + "_PersistenceDelegate");
-                pd = (PersistenceDelegate)c.newInstance();
-                internalPersistenceDelegates.put(typeName, pd);
-            }
-            catch (ClassNotFoundException e) {
-                String[] properties = getConstructorProperties(type);
-                if (properties != null) {
-                    pd = new DefaultPersistenceDelegate(properties);
-                    internalPersistenceDelegates.put(typeName, pd);
-                }
-            }
-            catch (Exception e) {
-                System.err.println("Internal error: " + e);
-            }
-        }
-
-        return (pd != null) ? pd : defaultPersistenceDelegate;
-    }
-
-    private static String[] getConstructorProperties(Class type) {
-        String[] names = null;
-        int length = 0;
-        for (Constructor<?> constructor : type.getConstructors()) {
-            String[] value = getAnnotationValue(constructor);
-            if ((value != null) && (length < value.length) && isValid(constructor, value)) {
-                names = value;
-                length = value.length;
-            }
-        }
-        return names;
-    }
-
-    private static String[] getAnnotationValue(Constructor<?> constructor) {
-        ConstructorProperties annotation = constructor.getAnnotation(ConstructorProperties.class);
-        return (annotation != null)
-                ? annotation.value()
-                : null;
-    }
-
-    private static boolean isValid(Constructor<?> constructor, String[] names) {
-        Class[] parameters = constructor.getParameterTypes();
-        if (names.length != parameters.length) {
-            return false;
-        }
-        for (String name : names) {
-            if (name == null) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    private static Object getBeanAttribute(Class type, String attribute) {
-        try {
-            return Introspector.getBeanInfo(type).getBeanDescriptor().getValue(attribute);
-        } catch (IntrospectionException exception) {
-            return null;
-        }
-    }
-
-    static Object getPrivateFieldValue(Object instance, String name) {
-        Field field = fields.get(name);
-        if (field == null) {
-            int index = name.lastIndexOf('.');
-            final String className = name.substring(0, index);
-            final String fieldName = name.substring(1 + index);
-            field = AccessController.doPrivileged(new PrivilegedAction<Field>() {
-                public Field run() {
-                    try {
-                        Field field = Class.forName(className).getDeclaredField(fieldName);
-                        field.setAccessible(true);
-                        return field;
-                    }
-                    catch (ClassNotFoundException exception) {
-                        throw new IllegalStateException("Could not find class", exception);
-                    }
-                    catch (NoSuchFieldException exception) {
-                        throw new IllegalStateException("Could not find field", exception);
-                    }
-                }
-            });
-            fields.put(name, field);
-        }
-        try {
-            return field.get(instance);
-        }
-        catch (IllegalAccessException exception) {
-            throw new IllegalStateException("Could not get value of the field", exception);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/MethodDescriptor.java b/ojluni/src/main/java/java/beans/MethodDescriptor.java
deleted file mode 100755
index d9e78be..0000000
--- a/ojluni/src/main/java/java/beans/MethodDescriptor.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, 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.
- */
-
-package java.beans;
-
-import java.lang.ref.Reference;
-import java.lang.ref.WeakReference;
-import java.lang.reflect.Method;
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * A MethodDescriptor describes a particular method that a Java Bean
- * supports for external access from other components.
- */
-
-public class MethodDescriptor extends FeatureDescriptor {
-
-    private Reference<Method> methodRef;
-
-    private String[] paramNames;
-
-    private List params;
-
-    private ParameterDescriptor parameterDescriptors[];
-
-    /**
-     * Constructs a <code>MethodDescriptor</code> from a
-     * <code>Method</code>.
-     *
-     * @param method    The low-level method information.
-     */
-    public MethodDescriptor(Method method) {
-        this(method, null);
-    }
-
-
-    /**
-     * Constructs a <code>MethodDescriptor</code> from a
-     * <code>Method</code> providing descriptive information for each
-     * of the method's parameters.
-     *
-     * @param method    The low-level method information.
-     * @param parameterDescriptors  Descriptive information for each of the
-     *                          method's parameters.
-     */
-    public MethodDescriptor(Method method,
-                ParameterDescriptor parameterDescriptors[]) {
-        setName(method.getName());
-        setMethod(method);
-        this.parameterDescriptors = parameterDescriptors;
-    }
-
-    /**
-     * Gets the method that this MethodDescriptor encapsualtes.
-     *
-     * @return The low-level description of the method
-     */
-    public synchronized Method getMethod() {
-        Method method = getMethod0();
-        if (method == null) {
-            Class cls = getClass0();
-            String name = getName();
-            if ((cls != null) && (name != null)) {
-                Class[] params = getParams();
-                if (params == null) {
-                    for (int i = 0; i < 3; i++) {
-                        // Find methods for up to 2 params. We are guessing here.
-                        // This block should never execute unless the classloader
-                        // that loaded the argument classes disappears.
-                        method = Introspector.findMethod(cls, name, i, null);
-                        if (method != null) {
-                            break;
-                        }
-                    }
-                } else {
-                    method = Introspector.findMethod(cls, name, params.length, params);
-                }
-                setMethod(method);
-            }
-        }
-        return method;
-    }
-
-    private synchronized void setMethod(Method method) {
-        if (method == null) {
-            return;
-        }
-        if (getClass0() == null) {
-            setClass0(method.getDeclaringClass());
-        }
-        setParams(getParameterTypes(getClass0(), method));
-        this.methodRef = getSoftReference(method);
-    }
-
-    private Method getMethod0() {
-        return (this.methodRef != null)
-                ? this.methodRef.get()
-                : null;
-    }
-
-    private synchronized void setParams(Class[] param) {
-        if (param == null) {
-            return;
-        }
-        paramNames = new String[param.length];
-        params = new ArrayList(param.length);
-        for (int i = 0; i < param.length; i++) {
-            paramNames[i] = param[i].getName();
-            params.add(new WeakReference(param[i]));
-        }
-    }
-
-    // pp getParamNames used as an optimization to avoid method.getParameterTypes.
-    String[] getParamNames() {
-        return paramNames;
-    }
-
-    private synchronized Class[] getParams() {
-        Class[] clss = new Class[params.size()];
-
-        for (int i = 0; i < params.size(); i++) {
-            Reference ref = (Reference)params.get(i);
-            Class cls = (Class)ref.get();
-            if (cls == null) {
-                return null;
-            } else {
-                clss[i] = cls;
-            }
-        }
-        return clss;
-    }
-
-    /**
-     * Gets the ParameterDescriptor for each of this MethodDescriptor's
-     * method's parameters.
-     *
-     * @return The locale-independent names of the parameters.  May return
-     *          a null array if the parameter names aren't known.
-     */
-    public ParameterDescriptor[] getParameterDescriptors() {
-        return parameterDescriptors;
-    }
-
-    /*
-     * Package-private constructor
-     * Merge two method descriptors.  Where they conflict, give the
-     * second argument (y) priority over the first argument (x).
-     * @param x  The first (lower priority) MethodDescriptor
-     * @param y  The second (higher priority) MethodDescriptor
-     */
-
-    MethodDescriptor(MethodDescriptor x, MethodDescriptor y) {
-        super(x,y);
-
-        methodRef = x.methodRef;
-        if (y.methodRef != null) {
-            methodRef = y.methodRef;
-        }
-        params = x.params;
-        if (y.params != null) {
-            params = y.params;
-        }
-        paramNames = x.paramNames;
-        if (y.paramNames != null) {
-            paramNames = y.paramNames;
-        }
-
-        parameterDescriptors = x.parameterDescriptors;
-        if (y.parameterDescriptors != null) {
-            parameterDescriptors = y.parameterDescriptors;
-        }
-    }
-
-    /*
-     * Package-private dup constructor
-     * This must isolate the new object from any changes to the old object.
-     */
-    MethodDescriptor(MethodDescriptor old) {
-        super(old);
-
-        methodRef = old.methodRef;
-        params = old.params;
-        paramNames = old.paramNames;
-
-        if (old.parameterDescriptors != null) {
-            int len = old.parameterDescriptors.length;
-            parameterDescriptors = new ParameterDescriptor[len];
-            for (int i = 0; i < len ; i++) {
-                parameterDescriptors[i] = new ParameterDescriptor(old.parameterDescriptors[i]);
-            }
-        }
-    }
-
-    void appendTo(StringBuilder sb) {
-        appendTo(sb, "method", this.methodRef);
-        if (this.parameterDescriptors != null) {
-            sb.append("; parameterDescriptors={");
-            for (ParameterDescriptor pd : this.parameterDescriptors) {
-                sb.append(pd).append(", ");
-            }
-            sb.setLength(sb.length() - 2);
-            sb.append("}");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/NameGenerator.java b/ojluni/src/main/java/java/beans/NameGenerator.java
deleted file mode 100755
index 3fa7f52..0000000
--- a/ojluni/src/main/java/java/beans/NameGenerator.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 2000, 2005, 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.
- */
-package java.beans;
-
-import java.util.HashMap;
-import java.util.IdentityHashMap;
-import java.util.Map;
-
-import static java.util.Locale.ENGLISH;
-
-/**
- * A utility class which generates unique names for object instances.
- * The name will be a concatenation of the unqualified class name
- * and an instance number.
- * <p>
- * For example, if the first object instance javax.swing.JButton
- * is passed into <code>instanceName</code> then the returned
- * string identifier will be &quot;JButton0&quot;.
- *
- * @author Philip Milne
- */
-class NameGenerator {
-
-    private Map valueToName;
-    private Map nameToCount;
-
-    public NameGenerator() {
-        valueToName = new IdentityHashMap();
-        nameToCount = new HashMap();
-    }
-
-    /**
-     * Clears the name cache. Should be called to near the end of
-     * the encoding cycle.
-     */
-    public void clear() {
-        valueToName.clear();
-        nameToCount.clear();
-    }
-
-    /**
-     * Returns the root name of the class.
-     */
-    public static String unqualifiedClassName(Class type) {
-        if (type.isArray()) {
-            return unqualifiedClassName(type.getComponentType())+"Array";
-        }
-        String name = type.getName();
-        return name.substring(name.lastIndexOf('.')+1);
-    }
-
-    /**
-     * Returns a String which capitalizes the first letter of the string.
-     */
-    public static String capitalize(String name) {
-        if (name == null || name.length() == 0) {
-            return name;
-        }
-        return name.substring(0, 1).toUpperCase(ENGLISH) + name.substring(1);
-    }
-
-    /**
-     * Returns a unique string which identifies the object instance.
-     * Invocations are cached so that if an object has been previously
-     * passed into this method then the same identifier is returned.
-     *
-     * @param instance object used to generate string
-     * @return a unique string representing the object
-     */
-    public String instanceName(Object instance) {
-        if (instance == null) {
-            return "null";
-        }
-        if (instance instanceof Class) {
-            return unqualifiedClassName((Class)instance);
-        }
-        else {
-            String result = (String)valueToName.get(instance);
-            if (result != null) {
-                return result;
-            }
-            Class type = instance.getClass();
-            String className = unqualifiedClassName(type);
-
-            Object size = nameToCount.get(className);
-            int instanceNumber = (size == null) ? 0 : ((Integer)size).intValue() + 1;
-            nameToCount.put(className, new Integer(instanceNumber));
-
-            result = className + instanceNumber;
-            valueToName.put(instance, result);
-            return result;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/ParameterDescriptor.java b/ojluni/src/main/java/java/beans/ParameterDescriptor.java
deleted file mode 100755
index 3b7013f..0000000
--- a/ojluni/src/main/java/java/beans/ParameterDescriptor.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 1996, 1997, 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.
- */
-
-package java.beans;
-
-/**
- * The ParameterDescriptor class allows bean implementors to provide
- * additional information on each of their parameters, beyond the
- * low level type information provided by the java.lang.reflect.Method
- * class.
- * <p>
- * Currently all our state comes from the FeatureDescriptor base class.
- */
-
-public class ParameterDescriptor extends FeatureDescriptor {
-
-    /**
-     * Public default constructor.
-     */
-    public ParameterDescriptor() {
-    }
-
-    /**
-     * Package private dup constructor.
-     * This must isolate the new object from any changes to the old object.
-     */
-    ParameterDescriptor(ParameterDescriptor old) {
-        super(old);
-    }
-
-}
diff --git a/ojluni/src/main/java/java/beans/PersistenceDelegate.java b/ojluni/src/main/java/java/beans/PersistenceDelegate.java
deleted file mode 100755
index f8622c1..0000000
--- a/ojluni/src/main/java/java/beans/PersistenceDelegate.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (c) 2000, 2010, 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.
- */
-package java.beans;
-
-/**
- * The PersistenceDelegate class takes the responsibility
- * for expressing the state of an instance of a given class
- * in terms of the methods in the class's public API. Instead
- * of associating the responsibility of persistence with
- * the class itself as is done, for example, by the
- * <code>readObject</code> and <code>writeObject</code>
- * methods used by the <code>ObjectOutputStream</code>, streams like
- * the <code>XMLEncoder</code> which
- * use this delegation model can have their behavior controlled
- * independently of the classes themselves. Normally, the class
- * is the best place to put such information and conventions
- * can easily be expressed in this delegation scheme to do just that.
- * Sometimes however, it is the case that a minor problem
- * in a single class prevents an entire object graph from
- * being written and this can leave the application
- * developer with no recourse but to attempt to shadow
- * the problematic classes locally or use alternative
- * persistence techniques. In situations like these, the
- * delegation model gives a relatively clean mechanism for
- * the application developer to intervene in all parts of the
- * serialization process without requiring that modifications
- * be made to the implementation of classes which are not part
- * of the application itself.
- * <p>
- * In addition to using a delegation model, this persistence
- * scheme differs from traditional serialization schemes
- * in requiring an analog of the <code>writeObject</code>
- * method without a corresponding <code>readObject</code>
- * method. The <code>writeObject</code> analog encodes each
- * instance in terms of its public API and there is no need to
- * define a <code>readObject</code> analog
- * since the procedure for reading the serialized form
- * is defined by the semantics of method invocation as laid
- * out in the Java Language Specification.
- * Breaking the dependency between <code>writeObject</code>
- * and <code>readObject</code> implementations, which may
- * change from version to version, is the key factor
- * in making the archives produced by this technique immune
- * to changes in the private implementations of the classes
- * to which they refer.
- * <p>
- * A persistence delegate, may take control of all
- * aspects of the persistence of an object including:
- * <ul>
- * <li>
- * Deciding whether or not an instance can be mutated
- * into another instance of the same class.
- * <li>
- * Instantiating the object, either by calling a
- * public constructor or a public factory method.
- * <li>
- * Performing the initialization of the object.
- * </ul>
- * @see XMLEncoder
- *
- * @since 1.4
- *
- * @author Philip Milne
- */
-
-public abstract class PersistenceDelegate {
-
-    /**
-     * The <code>writeObject</code> is a single entry point to the persistence
-     * and is used by a <code>Encoder</code> in the traditional
-     * mode of delegation. Although this method is not final,
-     * it should not need to be subclassed under normal circumstances.
-     * <p>
-     * This implementation first checks to see if the stream
-     * has already encountered this object. Next the
-     * <code>mutatesTo</code> method is called to see if
-     * that candidate returned from the stream can
-     * be mutated into an accurate copy of <code>oldInstance</code>.
-     * If it can, the <code>initialize</code> method is called to
-     * perform the initialization. If not, the candidate is removed
-     * from the stream, and the <code>instantiate</code> method
-     * is called to create a new candidate for this object.
-     *
-     * @param oldInstance The instance that will be created by this expression.
-     * @param out The stream to which this expression will be written.
-     *
-     * @throws NullPointerException if {@code out} is {@code null}
-     */
-    public void writeObject(Object oldInstance, Encoder out) {
-        Object newInstance = out.get(oldInstance);
-        if (!mutatesTo(oldInstance, newInstance)) {
-            out.remove(oldInstance);
-            out.writeExpression(instantiate(oldInstance, out));
-        }
-        else {
-            initialize(oldInstance.getClass(), oldInstance, newInstance, out);
-        }
-    }
-
-    /**
-     * Returns true if an <em>equivalent</em> copy of <code>oldInstance</code> may be
-     * created by applying a series of statements to <code>newInstance</code>.
-     * In the specification of this method, we mean by equivalent that the modified instance
-     * is indistinguishable from <code>oldInstance</code> in the behavior
-     * of the relevant methods in its public API. [Note: we use the
-     * phrase <em>relevant</em> methods rather than <em>all</em> methods
-     * here only because, to be strictly correct, methods like <code>hashCode</code>
-     * and <code>toString</code> prevent most classes from producing truly
-     * indistinguishable copies of their instances].
-     * <p>
-     * The default behavior returns <code>true</code>
-     * if the classes of the two instances are the same.
-     *
-     * @param oldInstance The instance to be copied.
-     * @param newInstance The instance that is to be modified.
-     * @return True if an equivalent copy of <code>newInstance</code> may be
-     *         created by applying a series of mutations to <code>oldInstance</code>.
-     */
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return (newInstance != null && oldInstance != null &&
-                oldInstance.getClass() == newInstance.getClass());
-    }
-
-    /**
-     * Returns an expression whose value is <code>oldInstance</code>.
-     * This method is used to characterize the constructor
-     * or factory method that should be used to create the given object.
-     * For example, the <code>instantiate</code> method of the persistence
-     * delegate for the <code>Field</code> class could be defined as follows:
-     * <pre>
-     * Field f = (Field)oldInstance;
-     * return new Expression(f, f.getDeclaringClass(), "getField", new Object[]{f.getName()});
-     * </pre>
-     * Note that we declare the value of the returned expression so that
-     * the value of the expression (as returned by <code>getValue</code>)
-     * will be identical to <code>oldInstance</code>.
-     *
-     * @param oldInstance The instance that will be created by this expression.
-     * @param out The stream to which this expression will be written.
-     * @return An expression whose value is <code>oldInstance</code>.
-     *
-     * @throws NullPointerException if {@code out} is {@code null}
-     */
-    protected abstract Expression instantiate(Object oldInstance, Encoder out);
-
-    /**
-     * Produce a series of statements with side effects on <code>newInstance</code>
-     * so that the new instance becomes <em>equivalent</em> to <code>oldInstance</code>.
-     * In the specification of this method, we mean by equivalent that, after the method
-     * returns, the modified instance is indistinguishable from
-     * <code>newInstance</code> in the behavior of all methods in its
-     * public API.
-     * <p>
-     * The implementation typically achieves this goal by producing a series of
-     * "what happened" statements involving the <code>oldInstance</code>
-     * and its publicly available state. These statements are sent
-     * to the output stream using its <code>writeExpression</code>
-     * method which returns an expression involving elements in
-     * a cloned environment simulating the state of an input stream during
-     * reading. Each statement returned will have had all instances
-     * the old environment replaced with objects which exist in the new
-     * one. In particular, references to the target of these statements,
-     * which start out as references to <code>oldInstance</code> are returned
-     * as references to the <code>newInstance</code> instead.
-     * Executing these statements effects an incremental
-     * alignment of the state of the two objects as a series of
-     * modifications to the objects in the new environment.
-     * By the time the initialize method returns it should be impossible
-     * to tell the two instances apart by using their public APIs.
-     * Most importantly, the sequence of steps that were used to make
-     * these objects appear equivalent will have been recorded
-     * by the output stream and will form the actual output when
-     * the stream is flushed.
-     * <p>
-     * The default implementation, calls the <code>initialize</code>
-     * method of the type's superclass.
-     *
-     * @param oldInstance The instance to be copied.
-     * @param newInstance The instance that is to be modified.
-     * @param out The stream to which any initialization statements should be written.
-     *
-     * @throws NullPointerException if {@code out} is {@code null}
-     */
-    protected void initialize(Class<?> type,
-                              Object oldInstance, Object newInstance,
-                              Encoder out)
-    {
-        Class superType = type.getSuperclass();
-        PersistenceDelegate info = out.getPersistenceDelegate(superType);
-        info.initialize(superType, oldInstance, newInstance, out);
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/PropertyDescriptor.java b/ojluni/src/main/java/java/beans/PropertyDescriptor.java
deleted file mode 100755
index a0b4cd1..0000000
--- a/ojluni/src/main/java/java/beans/PropertyDescriptor.java
+++ /dev/null
@@ -1,763 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-package java.beans;
-
-import java.lang.ref.Reference;
-import java.lang.reflect.Method;
-import java.lang.reflect.Constructor;
-
-/**
- * A PropertyDescriptor describes one property that a Java Bean
- * exports via a pair of accessor methods.
- */
-public class PropertyDescriptor extends FeatureDescriptor {
-
-    private Reference<Class> propertyTypeRef;
-    private Reference<Method> readMethodRef;
-    private Reference<Method> writeMethodRef;
-    private Reference<Class> propertyEditorClassRef;
-
-    private boolean bound;
-    private boolean constrained;
-
-    // The base name of the method name which will be prefixed with the
-    // read and write method. If name == "foo" then the baseName is "Foo"
-    private String baseName;
-
-    private String writeMethodName;
-    private String readMethodName;
-
-    /**
-     * Constructs a PropertyDescriptor for a property that follows
-     * the standard Java convention by having getFoo and setFoo
-     * accessor methods.  Thus if the argument name is "fred", it will
-     * assume that the writer method is "setFred" and the reader method
-     * is "getFred" (or "isFred" for a boolean property).  Note that the
-     * property name should start with a lower case character, which will
-     * be capitalized in the method names.
-     *
-     * @param propertyName The programmatic name of the property.
-     * @param beanClass The Class object for the target bean.  For
-     *          example sun.beans.OurButton.class.
-     * @exception IntrospectionException if an exception occurs during
-     *              introspection.
-     */
-    public PropertyDescriptor(String propertyName, Class<?> beanClass)
-                throws IntrospectionException {
-        this(propertyName, beanClass,
-             Introspector.IS_PREFIX + NameGenerator.capitalize(propertyName),
-             Introspector.SET_PREFIX + NameGenerator.capitalize(propertyName));
-    }
-
-    /**
-     * This constructor takes the name of a simple property, and method
-     * names for reading and writing the property.
-     *
-     * @param propertyName The programmatic name of the property.
-     * @param beanClass The Class object for the target bean.  For
-     *          example sun.beans.OurButton.class.
-     * @param readMethodName The name of the method used for reading the property
-     *           value.  May be null if the property is write-only.
-     * @param writeMethodName The name of the method used for writing the property
-     *           value.  May be null if the property is read-only.
-     * @exception IntrospectionException if an exception occurs during
-     *              introspection.
-     */
-    public PropertyDescriptor(String propertyName, Class<?> beanClass,
-                String readMethodName, String writeMethodName)
-                throws IntrospectionException {
-        if (beanClass == null) {
-            throw new IntrospectionException("Target Bean class is null");
-        }
-        if (propertyName == null || propertyName.length() == 0) {
-            throw new IntrospectionException("bad property name");
-        }
-        if ("".equals(readMethodName) || "".equals(writeMethodName)) {
-            throw new IntrospectionException("read or write method name should not be the empty string");
-        }
-        setName(propertyName);
-        setClass0(beanClass);
-
-        this.readMethodName = readMethodName;
-        if (readMethodName != null && getReadMethod() == null) {
-            throw new IntrospectionException("Method not found: " + readMethodName);
-        }
-        this.writeMethodName = writeMethodName;
-        if (writeMethodName != null && getWriteMethod() == null) {
-            throw new IntrospectionException("Method not found: " + writeMethodName);
-        }
-        // If this class or one of its base classes allow PropertyChangeListener,
-        // then we assume that any properties we discover are "bound".
-        // See Introspector.getTargetPropertyInfo() method.
-        Class[] args = { PropertyChangeListener.class };
-        this.bound = null != Introspector.findMethod(beanClass, "addPropertyChangeListener", args.length, args);
-    }
-
-    /**
-     * This constructor takes the name of a simple property, and Method
-     * objects for reading and writing the property.
-     *
-     * @param propertyName The programmatic name of the property.
-     * @param readMethod The method used for reading the property value.
-     *          May be null if the property is write-only.
-     * @param writeMethod The method used for writing the property value.
-     *          May be null if the property is read-only.
-     * @exception IntrospectionException if an exception occurs during
-     *              introspection.
-     */
-    public PropertyDescriptor(String propertyName, Method readMethod, Method writeMethod)
-                throws IntrospectionException {
-        if (propertyName == null || propertyName.length() == 0) {
-            throw new IntrospectionException("bad property name");
-        }
-        setName(propertyName);
-        setReadMethod(readMethod);
-        setWriteMethod(writeMethod);
-    }
-
-    /**
-     * Creates <code>PropertyDescriptor</code> for the specified bean
-     * with the specified name and methods to read/write the property value.
-     *
-     * @param bean   the type of the target bean
-     * @param base   the base name of the property (the rest of the method name)
-     * @param read   the method used for reading the property value
-     * @param write  the method used for writing the property value
-     * @exception IntrospectionException if an exception occurs during introspection
-     *
-     * @since 1.7
-     */
-    PropertyDescriptor(Class<?> bean, String base, Method read, Method write) throws IntrospectionException {
-        if (bean == null) {
-            throw new IntrospectionException("Target Bean class is null");
-        }
-        setClass0(bean);
-        setName(Introspector.decapitalize(base));
-        setReadMethod(read);
-        setWriteMethod(write);
-        this.baseName = base;
-    }
-
-    /**
-     * Returns the Java type info for the property.
-     * Note that the {@code Class} object may describe
-     * primitive Java types such as {@code int}.
-     * This type is returned by the read method
-     * or is used as the parameter type of the write method.
-     * Returns {@code null} if the type is an indexed property
-     * that does not support non-indexed access.
-     *
-     * @return the {@code Class} object that represents the Java type info,
-     *         or {@code null} if the type cannot be determined
-     */
-    public synchronized Class<?> getPropertyType() {
-        Class type = getPropertyType0();
-        if (type  == null) {
-            try {
-                type = findPropertyType(getReadMethod(), getWriteMethod());
-                setPropertyType(type);
-            } catch (IntrospectionException ex) {
-                // Fall
-            }
-        }
-        return type;
-    }
-
-    private void setPropertyType(Class type) {
-        this.propertyTypeRef = getWeakReference(type);
-    }
-
-    private Class getPropertyType0() {
-        return (this.propertyTypeRef != null)
-                ? this.propertyTypeRef.get()
-                : null;
-    }
-
-    /**
-     * Gets the method that should be used to read the property value.
-     *
-     * @return The method that should be used to read the property value.
-     * May return null if the property can't be read.
-     */
-    public synchronized Method getReadMethod() {
-        Method readMethod = getReadMethod0();
-        if (readMethod == null) {
-            Class cls = getClass0();
-            if (cls == null || (readMethodName == null && readMethodRef == null)) {
-                // The read method was explicitly set to null.
-                return null;
-            }
-            String nextMethodName = Introspector.GET_PREFIX + getBaseName();
-            if (readMethodName == null) {
-                Class type = getPropertyType0();
-                if (type == boolean.class || type == null) {
-                    readMethodName = Introspector.IS_PREFIX + getBaseName();
-                } else {
-                    readMethodName = nextMethodName;
-                }
-            }
-
-            // Since there can be multiple write methods but only one getter
-            // method, find the getter method first so that you know what the
-            // property type is.  For booleans, there can be "is" and "get"
-            // methods.  If an "is" method exists, this is the official
-            // reader method so look for this one first.
-            readMethod = Introspector.findMethod(cls, readMethodName, 0);
-            if ((readMethod == null) && !readMethodName.equals(nextMethodName)) {
-                readMethodName = nextMethodName;
-                readMethod = Introspector.findMethod(cls, readMethodName, 0);
-            }
-            try {
-                setReadMethod(readMethod);
-            } catch (IntrospectionException ex) {
-                // fall
-            }
-        }
-        return readMethod;
-    }
-
-    /**
-     * Sets the method that should be used to read the property value.
-     *
-     * @param readMethod The new read method.
-     */
-    public synchronized void setReadMethod(Method readMethod)
-                                throws IntrospectionException {
-        if (readMethod == null) {
-            readMethodName = null;
-            readMethodRef = null;
-            return;
-        }
-        // The property type is determined by the read method.
-        setPropertyType(findPropertyType(readMethod, getWriteMethod0()));
-        setClass0(readMethod.getDeclaringClass());
-
-        readMethodName = readMethod.getName();
-        this.readMethodRef = getSoftReference(readMethod);
-        setTransient(readMethod.getAnnotation(Transient.class));
-    }
-
-    /**
-     * Gets the method that should be used to write the property value.
-     *
-     * @return The method that should be used to write the property value.
-     * May return null if the property can't be written.
-     */
-    public synchronized Method getWriteMethod() {
-        Method writeMethod = getWriteMethod0();
-        if (writeMethod == null) {
-            Class cls = getClass0();
-            if (cls == null || (writeMethodName == null && writeMethodRef == null)) {
-                // The write method was explicitly set to null.
-                return null;
-            }
-
-            // We need the type to fetch the correct method.
-            Class type = getPropertyType0();
-            if (type == null) {
-                try {
-                    // Can't use getPropertyType since it will lead to recursive loop.
-                    type = findPropertyType(getReadMethod(), null);
-                    setPropertyType(type);
-                } catch (IntrospectionException ex) {
-                    // Without the correct property type we can't be guaranteed
-                    // to find the correct method.
-                    return null;
-                }
-            }
-
-            if (writeMethodName == null) {
-                writeMethodName = Introspector.SET_PREFIX + getBaseName();
-            }
-
-            Class[] args = (type == null) ? null : new Class[] { type };
-            writeMethod = Introspector.findMethod(cls, writeMethodName, 1, args);
-            if (writeMethod != null) {
-                if (!writeMethod.getReturnType().equals(void.class)) {
-                    writeMethod = null;
-                }
-            }
-            try {
-                setWriteMethod(writeMethod);
-            } catch (IntrospectionException ex) {
-                // fall through
-            }
-        }
-        return writeMethod;
-    }
-
-    /**
-     * Sets the method that should be used to write the property value.
-     *
-     * @param writeMethod The new write method.
-     */
-    public synchronized void setWriteMethod(Method writeMethod)
-                                throws IntrospectionException {
-        if (writeMethod == null) {
-            writeMethodName = null;
-            writeMethodRef = null;
-            return;
-        }
-        // Set the property type - which validates the method
-        setPropertyType(findPropertyType(getReadMethod(), writeMethod));
-        setClass0(writeMethod.getDeclaringClass());
-
-        writeMethodName = writeMethod.getName();
-        this.writeMethodRef = getSoftReference(writeMethod);
-        setTransient(writeMethod.getAnnotation(Transient.class));
-    }
-
-    private Method getReadMethod0() {
-        return (this.readMethodRef != null)
-                ? this.readMethodRef.get()
-                : null;
-    }
-
-    private Method getWriteMethod0() {
-        return (this.writeMethodRef != null)
-                ? this.writeMethodRef.get()
-                : null;
-    }
-
-    /**
-     * Overridden to ensure that a super class doesn't take precedent
-     */
-    void setClass0(Class clz) {
-        if (getClass0() != null && clz.isAssignableFrom(getClass0())) {
-            // dont replace a subclass with a superclass
-            return;
-        }
-        super.setClass0(clz);
-    }
-
-    /**
-     * Updates to "bound" properties will cause a "PropertyChange" event to
-     * get fired when the property is changed.
-     *
-     * @return True if this is a bound property.
-     */
-    public boolean isBound() {
-        return bound;
-    }
-
-    /**
-     * Updates to "bound" properties will cause a "PropertyChange" event to
-     * get fired when the property is changed.
-     *
-     * @param bound True if this is a bound property.
-     */
-    public void setBound(boolean bound) {
-        this.bound = bound;
-    }
-
-    /**
-     * Attempted updates to "Constrained" properties will cause a "VetoableChange"
-     * event to get fired when the property is changed.
-     *
-     * @return True if this is a constrained property.
-     */
-    public boolean isConstrained() {
-        return constrained;
-    }
-
-    /**
-     * Attempted updates to "Constrained" properties will cause a "VetoableChange"
-     * event to get fired when the property is changed.
-     *
-     * @param constrained True if this is a constrained property.
-     */
-    public void setConstrained(boolean constrained) {
-        this.constrained = constrained;
-    }
-
-
-    /**
-     * Normally PropertyEditors will be found using the PropertyEditorManager.
-     * However if for some reason you want to associate a particular
-     * PropertyEditor with a given property, then you can do it with
-     * this method.
-     *
-     * @param propertyEditorClass  The Class for the desired PropertyEditor.
-     */
-    public void setPropertyEditorClass(Class<?> propertyEditorClass) {
-        this.propertyEditorClassRef = getWeakReference((Class)propertyEditorClass);
-    }
-
-    /**
-     * Gets any explicit PropertyEditor Class that has been registered
-     * for this property.
-     *
-     * @return Any explicit PropertyEditor Class that has been registered
-     *          for this property.  Normally this will return "null",
-     *          indicating that no special editor has been registered,
-     *          so the PropertyEditorManager should be used to locate
-     *          a suitable PropertyEditor.
-     */
-    public Class<?> getPropertyEditorClass() {
-        return (this.propertyEditorClassRef != null)
-                ? this.propertyEditorClassRef.get()
-                : null;
-    }
-
-    /**
-     * Constructs an instance of a property editor using the current
-     * property editor class.
-     * <p>
-     * If the property editor class has a public constructor that takes an
-     * Object argument then it will be invoked using the bean parameter
-     * as the argument. Otherwise, the default constructor will be invoked.
-     *
-     * @param bean the source object
-     * @return a property editor instance or null if a property editor has
-     *         not been defined or cannot be created
-     * @since 1.5
-     */
-    public PropertyEditor createPropertyEditor(Object bean) {
-        Object editor = null;
-
-        Class cls = getPropertyEditorClass();
-        if (cls != null) {
-            Constructor ctor = null;
-            if (bean != null) {
-                try {
-                    ctor = cls.getConstructor(new Class[] { Object.class });
-                } catch (Exception ex) {
-                    // Fall through
-                }
-            }
-            try {
-                if (ctor == null) {
-                    editor = cls.newInstance();
-                } else {
-                    editor = ctor.newInstance(new Object[] { bean });
-                }
-            } catch (Exception ex) {
-                // A serious error has occured.
-                // Proably due to an invalid property editor.
-                throw new RuntimeException("PropertyEditor not instantiated",
-                                           ex);
-            }
-        }
-        return (PropertyEditor)editor;
-    }
-
-
-    /**
-     * Compares this <code>PropertyDescriptor</code> against the specified object.
-     * Returns true if the objects are the same. Two <code>PropertyDescriptor</code>s
-     * are the same if the read, write, property types, property editor and
-     * flags  are equivalent.
-     *
-     * @since 1.4
-     */
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj != null && obj instanceof PropertyDescriptor) {
-            PropertyDescriptor other = (PropertyDescriptor)obj;
-            Method otherReadMethod = other.getReadMethod();
-            Method otherWriteMethod = other.getWriteMethod();
-
-            if (!compareMethods(getReadMethod(), otherReadMethod)) {
-                return false;
-            }
-
-            if (!compareMethods(getWriteMethod(), otherWriteMethod)) {
-                return false;
-            }
-
-            if (getPropertyType() == other.getPropertyType() &&
-                getPropertyEditorClass() == other.getPropertyEditorClass() &&
-                bound == other.isBound() && constrained == other.isConstrained() &&
-                writeMethodName == other.writeMethodName &&
-                readMethodName == other.readMethodName) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Package private helper method for Descriptor .equals methods.
-     *
-     * @param a first method to compare
-     * @param b second method to compare
-     * @return boolean to indicate that the methods are equivalent
-     */
-    boolean compareMethods(Method a, Method b) {
-        // Note: perhaps this should be a protected method in FeatureDescriptor
-        if ((a == null) != (b == null)) {
-            return false;
-        }
-
-        if (a != null && b != null) {
-            if (!a.equals(b)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Package-private constructor.
-     * Merge two property descriptors.  Where they conflict, give the
-     * second argument (y) priority over the first argument (x).
-     *
-     * @param x  The first (lower priority) PropertyDescriptor
-     * @param y  The second (higher priority) PropertyDescriptor
-     */
-    PropertyDescriptor(PropertyDescriptor x, PropertyDescriptor y) {
-        super(x,y);
-
-        if (y.baseName != null) {
-            baseName = y.baseName;
-        } else {
-            baseName = x.baseName;
-        }
-
-        if (y.readMethodName != null) {
-            readMethodName = y.readMethodName;
-        } else {
-            readMethodName = x.readMethodName;
-        }
-
-        if (y.writeMethodName != null) {
-            writeMethodName = y.writeMethodName;
-        } else {
-            writeMethodName = x.writeMethodName;
-        }
-
-        if (y.propertyTypeRef != null) {
-            propertyTypeRef = y.propertyTypeRef;
-        } else {
-            propertyTypeRef = x.propertyTypeRef;
-        }
-
-        // Figure out the merged read method.
-        Method xr = x.getReadMethod();
-        Method yr = y.getReadMethod();
-
-        // Normally give priority to y's readMethod.
-        try {
-            if (isAssignable(xr, yr)) {
-                setReadMethod(yr);
-            } else {
-                setReadMethod(xr);
-            }
-        } catch (IntrospectionException ex) {
-            // fall through
-        }
-
-        // However, if both x and y reference read methods in the same class,
-        // give priority to a boolean "is" method over a boolean "get" method.
-        if (xr != null && yr != null &&
-                   xr.getDeclaringClass() == yr.getDeclaringClass() &&
-                   getReturnType(getClass0(), xr) == boolean.class &&
-                   getReturnType(getClass0(), yr) == boolean.class &&
-                   xr.getName().indexOf(Introspector.IS_PREFIX) == 0 &&
-                   yr.getName().indexOf(Introspector.GET_PREFIX) == 0) {
-            try {
-                setReadMethod(xr);
-            } catch (IntrospectionException ex) {
-                // fall through
-            }
-        }
-
-        Method xw = x.getWriteMethod();
-        Method yw = y.getWriteMethod();
-
-        try {
-            if (yw != null) {
-                setWriteMethod(yw);
-            } else {
-                setWriteMethod(xw);
-            }
-        } catch (IntrospectionException ex) {
-            // Fall through
-        }
-
-        if (y.getPropertyEditorClass() != null) {
-            setPropertyEditorClass(y.getPropertyEditorClass());
-        } else {
-            setPropertyEditorClass(x.getPropertyEditorClass());
-        }
-
-
-        bound = x.bound | y.bound;
-        constrained = x.constrained | y.constrained;
-    }
-
-    /*
-     * Package-private dup constructor.
-     * This must isolate the new object from any changes to the old object.
-     */
-    PropertyDescriptor(PropertyDescriptor old) {
-        super(old);
-        propertyTypeRef = old.propertyTypeRef;
-        readMethodRef = old.readMethodRef;
-        writeMethodRef = old.writeMethodRef;
-        propertyEditorClassRef = old.propertyEditorClassRef;
-
-        writeMethodName = old.writeMethodName;
-        readMethodName = old.readMethodName;
-        baseName = old.baseName;
-
-        bound = old.bound;
-        constrained = old.constrained;
-    }
-
-    void updateGenericsFor(Class<?> type) {
-        setClass0(type);
-        try {
-            setPropertyType(findPropertyType(getReadMethod0(), getWriteMethod0()));
-        }
-        catch (IntrospectionException exception) {
-            setPropertyType(null);
-        }
-    }
-
-    /**
-     * Returns the property type that corresponds to the read and write method.
-     * The type precedence is given to the readMethod.
-     *
-     * @return the type of the property descriptor or null if both
-     *         read and write methods are null.
-     * @throws IntrospectionException if the read or write method is invalid
-     */
-    private Class findPropertyType(Method readMethod, Method writeMethod)
-        throws IntrospectionException {
-        Class propertyType = null;
-        try {
-            if (readMethod != null) {
-                Class[] params = getParameterTypes(getClass0(), readMethod);
-                if (params.length != 0) {
-                    throw new IntrospectionException("bad read method arg count: "
-                                                     + readMethod);
-                }
-                propertyType = getReturnType(getClass0(), readMethod);
-                if (propertyType == Void.TYPE) {
-                    throw new IntrospectionException("read method " +
-                                        readMethod.getName() + " returns void");
-                }
-            }
-            if (writeMethod != null) {
-                Class params[] = getParameterTypes(getClass0(), writeMethod);
-                if (params.length != 1) {
-                    throw new IntrospectionException("bad write method arg count: "
-                                                     + writeMethod);
-                }
-                if (propertyType != null && !params[0].isAssignableFrom(propertyType)) {
-                    throw new IntrospectionException("type mismatch between read and write methods");
-                }
-                propertyType = params[0];
-            }
-        } catch (IntrospectionException ex) {
-            throw ex;
-        }
-        return propertyType;
-    }
-
-
-    /**
-     * Returns a hash code value for the object.
-     * See {@link java.lang.Object#hashCode} for a complete description.
-     *
-     * @return a hash code value for this object.
-     * @since 1.5
-     */
-    public int hashCode() {
-        int result = 7;
-
-        result = 37 * result + ((getPropertyType() == null) ? 0 :
-                                getPropertyType().hashCode());
-        result = 37 * result + ((getReadMethod() == null) ? 0 :
-                                getReadMethod().hashCode());
-        result = 37 * result + ((getWriteMethod() == null) ? 0 :
-                                getWriteMethod().hashCode());
-        result = 37 * result + ((getPropertyEditorClass() == null) ? 0 :
-                                getPropertyEditorClass().hashCode());
-        result = 37 * result + ((writeMethodName == null) ? 0 :
-                                writeMethodName.hashCode());
-        result = 37 * result + ((readMethodName == null) ? 0 :
-                                readMethodName.hashCode());
-        result = 37 * result + getName().hashCode();
-        result = 37 * result + ((bound == false) ? 0 : 1);
-        result = 37 * result + ((constrained == false) ? 0 : 1);
-
-        return result;
-    }
-
-    // Calculate once since capitalize() is expensive.
-    String getBaseName() {
-        if (baseName == null) {
-            baseName = NameGenerator.capitalize(getName());
-        }
-        return baseName;
-    }
-
-    void appendTo(StringBuilder sb) {
-        appendTo(sb, "bound", this.bound);
-        appendTo(sb, "constrained", this.constrained);
-        appendTo(sb, "propertyEditorClass", this.propertyEditorClassRef);
-        appendTo(sb, "propertyType", this.propertyTypeRef);
-        appendTo(sb, "readMethod", this.readMethodRef);
-        appendTo(sb, "writeMethod", this.writeMethodRef);
-    }
-
-    private boolean isAssignable(Method m1, Method m2) {
-        if (m1 == null) {
-            return true; // choose second method
-        }
-        if (m2 == null) {
-            return false; // choose first method
-        }
-        if (!m1.getName().equals(m2.getName())) {
-            return true; // choose second method by default
-        }
-        Class<?> type1 = m1.getDeclaringClass();
-        Class<?> type2 = m2.getDeclaringClass();
-        if (!type1.isAssignableFrom(type2)) {
-            return false; // choose first method: it declared later
-        }
-        type1 = getReturnType(getClass0(), m1);
-        type2 = getReturnType(getClass0(), m2);
-        if (!type1.isAssignableFrom(type2)) {
-            return false; // choose first method: it overrides return type
-        }
-        Class<?>[] args1 = getParameterTypes(getClass0(), m1);
-        Class<?>[] args2 = getParameterTypes(getClass0(), m2);
-        if (args1.length != args2.length) {
-            return true; // choose second method by default
-        }
-        for (int i = 0; i < args1.length; i++) {
-            if (!args1[i].isAssignableFrom(args2[i])) {
-                return false; // choose first method: it overrides parameter
-            }
-        }
-        return true; // choose second method
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/PropertyEditor.java b/ojluni/src/main/java/java/beans/PropertyEditor.java
deleted file mode 100755
index 041cb80..0000000
--- a/ojluni/src/main/java/java/beans/PropertyEditor.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package java.beans;
-
-/**
- * A PropertyEditor class provides support for GUIs that want to
- * allow users to edit a property value of a given type.
- * <p>
- * PropertyEditor supports a variety of different kinds of ways of
- * displaying and updating property values.  Most PropertyEditors will
- * only need to support a subset of the different options available in
- * this API.
- * <P>
- * Simple PropertyEditors may only support the getAsText and setAsText
- * methods and need not support (say) paintValue or getCustomEditor.  More
- * complex types may be unable to support getAsText and setAsText but will
- * instead support paintValue and getCustomEditor.
- * <p>
- * Every propertyEditor must support one or more of the three simple
- * display styles.  Thus it can either (1) support isPaintable or (2)
- * both return a non-null String[] from getTags() and return a non-null
- * value from getAsText or (3) simply return a non-null String from
- * getAsText().
- * <p>
- * Every property editor must support a call on setValue when the argument
- * object is of the type for which this is the corresponding propertyEditor.
- * In addition, each property editor must either support a custom editor,
- * or support setAsText.
- * <p>
- * Each PropertyEditor should have a null constructor.
- */
-
-public interface PropertyEditor {
-
-    /**
-     * Set (or change) the object that is to be edited.  Primitive types such
-     * as "int" must be wrapped as the corresponding object type such as
-     * "java.lang.Integer".
-     *
-     * @param value The new target object to be edited.  Note that this
-     *     object should not be modified by the PropertyEditor, rather
-     *     the PropertyEditor should create a new object to hold any
-     *     modified value.
-     */
-    void setValue(Object value);
-
-    /**
-     * Gets the property value.
-     *
-     * @return The value of the property.  Primitive types such as "int" will
-     * be wrapped as the corresponding object type such as "java.lang.Integer".
-     */
-
-    Object getValue();
-
-    //----------------------------------------------------------------------
-
-    /**
-     * Determines whether this property editor is paintable.
-     *
-     * @return  True if the class will honor the paintValue method.
-     */
-
-    boolean isPaintable();
-
-    /**
-     * Paint a representation of the value into a given area of screen
-     * real estate.  Note that the propertyEditor is responsible for doing
-     * its own clipping so that it fits into the given rectangle.
-     * <p>
-     * If the PropertyEditor doesn't honor paint requests (see isPaintable)
-     * this method should be a silent noop.
-     * <p>
-     * The given Graphics object will have the default font, color, etc of
-     * the parent container.  The PropertyEditor may change graphics attributes
-     * such as font and color and doesn't need to restore the old values.
-     *
-     * @param gfx  Graphics object to paint into.
-     * @param box  Rectangle within graphics object into which we should paint.
-     */
-    void paintValue(java.awt.Graphics gfx, java.awt.Rectangle box);
-
-    //----------------------------------------------------------------------
-
-    /**
-     * Returns a fragment of Java code that can be used to set a property
-     * to match the editors current state. This method is intended
-     * for use when generating Java code to reflect changes made through the
-     * property editor.
-     * <p>
-     * The code fragment should be context free and must be a legal Java
-     * expression as specified by the JLS.
-     * <p>
-     * Specifically, if the expression represents a computation then all
-     * classes and static members should be fully qualified. This rule
-     * applies to constructors, static methods and non primitive arguments.
-     * <p>
-     * Caution should be used when evaluating the expression as it may throw
-     * exceptions. In particular, code generators must ensure that generated
-     * code will compile in the presence of an expression that can throw
-     * checked exceptions.
-     * <p>
-     * Example results are:
-     * <ul>
-     * <li>Primitive expresssion: <code>2</code>
-     * <li>Class constructor: <code>new java.awt.Color(127,127,34)</code>
-     * <li>Static field: <code>java.awt.Color.orange</code>
-     * <li>Static method: <code>javax.swing.Box.createRigidArea(new
-     *                                   java.awt.Dimension(0, 5))</code>
-     * </ul>
-     *
-     * @return a fragment of Java code representing an initializer for the
-     *         current value. It should not contain a semi-colon
-     *         ('<code>;</code>') to end the expression.
-     */
-    String getJavaInitializationString();
-
-    //----------------------------------------------------------------------
-
-    /**
-     * Gets the property value as text.
-     *
-     * @return The property value as a human editable string.
-     * <p>   Returns null if the value can't be expressed as an editable string.
-     * <p>   If a non-null value is returned, then the PropertyEditor should
-     *       be prepared to parse that string back in setAsText().
-     */
-    String getAsText();
-
-    /**
-     * Set the property value by parsing a given String.  May raise
-     * java.lang.IllegalArgumentException if either the String is
-     * badly formatted or if this kind of property can't be expressed
-     * as text.
-     * @param text  The string to be parsed.
-     */
-    void setAsText(String text) throws java.lang.IllegalArgumentException;
-
-    //----------------------------------------------------------------------
-
-    /**
-     * If the property value must be one of a set of known tagged values,
-     * then this method should return an array of the tags.  This can
-     * be used to represent (for example) enum values.  If a PropertyEditor
-     * supports tags, then it should support the use of setAsText with
-     * a tag value as a way of setting the value and the use of getAsText
-     * to identify the current value.
-     *
-     * @return The tag values for this property.  May be null if this
-     *   property cannot be represented as a tagged value.
-     *
-     */
-    String[] getTags();
-
-    //----------------------------------------------------------------------
-
-    /**
-     * A PropertyEditor may choose to make available a full custom Component
-     * that edits its property value.  It is the responsibility of the
-     * PropertyEditor to hook itself up to its editor Component itself and
-     * to report property value changes by firing a PropertyChange event.
-     * <P>
-     * The higher-level code that calls getCustomEditor may either embed
-     * the Component in some larger property sheet, or it may put it in
-     * its own individual dialog, or ...
-     *
-     * @return A java.awt.Component that will allow a human to directly
-     *      edit the current property value.  May be null if this is
-     *      not supported.
-     */
-
-    java.awt.Component getCustomEditor();
-
-    /**
-     * Determines whether this property editor supports a custom editor.
-     *
-     * @return  True if the propertyEditor can provide a custom editor.
-     */
-    boolean supportsCustomEditor();
-
-    //----------------------------------------------------------------------
-
-    /**
-     * Adds a listener for the value change.
-     * When the property editor changes its value
-     * it should fire a {@link PropertyChangeEvent}
-     * on all registered {@link PropertyChangeListener}s,
-     * specifying the {@code null} value for the property name
-     * and itself as the source.
-     *
-     * @param listener  the {@link PropertyChangeListener} to add
-     */
-    void addPropertyChangeListener(PropertyChangeListener listener);
-
-    /**
-     * Removes a listener for the value change.
-     *
-     * @param listener  the {@link PropertyChangeListener} to remove
-     */
-    void removePropertyChangeListener(PropertyChangeListener listener);
-
-}
diff --git a/ojluni/src/main/java/java/beans/PropertyEditorManager.java b/ojluni/src/main/java/java/beans/PropertyEditorManager.java
deleted file mode 100755
index 3fee3f4..0000000
--- a/ojluni/src/main/java/java/beans/PropertyEditorManager.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, 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.
- */
-
-package java.beans;
-
-/**
- * The PropertyEditorManager can be used to locate a property editor for
- * any given type name.  This property editor must support the
- * java.beans.PropertyEditor interface for editing a given object.
- * <P>
- * The PropertyEditorManager uses three techniques for locating an editor
- * for a given type.  First, it provides a registerEditor method to allow
- * an editor to be specifically registered for a given type.  Second it
- * tries to locate a suitable class by adding "Editor" to the full
- * qualified classname of the given type (e.g. "foo.bah.FozEditor").
- * Finally it takes the simple classname (without the package name) adds
- * "Editor" to it and looks in a search-path of packages for a matching
- * class.
- * <P>
- * So for an input class foo.bah.Fred, the PropertyEditorManager would
- * first look in its tables to see if an editor had been registered for
- * foo.bah.Fred and if so use that.  Then it will look for a
- * foo.bah.FredEditor class.  Then it will look for (say)
- * standardEditorsPackage.FredEditor class.
- * <p>
- * Default PropertyEditors will be provided for the Java primitive types
- * "boolean", "byte", "short", "int", "long", "float", and "double"; and
- * for the classes java.lang.String. java.awt.Color, and java.awt.Font.
- */
-
-public class PropertyEditorManager {
-
-    /**
-     * Registers an editor class to edit values of the given target class.
-     * If the editor class is {@code null},
-     * then any existing definition will be removed.
-     * Thus this method can be used to cancel the registration.
-     * The registration is canceled automatically
-     * if either the target or editor class is unloaded.
-     * <p>
-     * If there is a security manager, its {@code checkPropertiesAccess}
-     * method is called. This could result in a {@linkplain SecurityException}.
-     *
-     * @param targetType   the class object of the type to be edited
-     * @param editorClass  the class object of the editor class
-     * @throws SecurityException  if a security manager exists and
-     *                            its {@code checkPropertiesAccess} method
-     *                            doesn't allow setting of system properties
-     *
-     * @see SecurityManager#checkPropertiesAccess
-     */
-    public static void registerEditor(Class<?> targetType, Class<?> editorClass) {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            sm.checkPropertiesAccess();
-        }
-        ThreadGroupContext.getContext().getPropertyEditorFinder().register(targetType, editorClass);
-    }
-
-    /**
-     * Locate a value editor for a given target type.
-     *
-     * @param targetType  The Class object for the type to be edited
-     * @return An editor object for the given target class.
-     * The result is null if no suitable editor can be found.
-     */
-    public static PropertyEditor findEditor(Class<?> targetType) {
-        return ThreadGroupContext.getContext().getPropertyEditorFinder().find(targetType);
-    }
-
-    /**
-     * Gets the package names that will be searched for property editors.
-     *
-     * @return  The array of package names that will be searched in
-     *          order to find property editors.
-     * <p>     The default value for this array is implementation-dependent,
-     *         e.g. Sun implementation initially sets to  {"sun.beans.editors"}.
-     */
-    public static String[] getEditorSearchPath() {
-        return ThreadGroupContext.getContext().getPropertyEditorFinder().getPackages();
-    }
-
-    /**
-     * Change the list of package names that will be used for
-     *          finding property editors.
-     *
-     * <p>First, if there is a security manager, its <code>checkPropertiesAccess</code>
-     * method is called. This could result in a SecurityException.
-     *
-     * @param path  Array of package names.
-     * @exception  SecurityException  if a security manager exists and its
-     *             <code>checkPropertiesAccess</code> method doesn't allow setting
-     *              of system properties.
-     * @see SecurityManager#checkPropertiesAccess
-     */
-    public static void setEditorSearchPath(String[] path) {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            sm.checkPropertiesAccess();
-        }
-        ThreadGroupContext.getContext().getPropertyEditorFinder().setPackages(path);
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/PropertyEditorSupport.java b/ojluni/src/main/java/java/beans/PropertyEditorSupport.java
deleted file mode 100755
index 776b47e..0000000
--- a/ojluni/src/main/java/java/beans/PropertyEditorSupport.java
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * Copyright (c) 1996, 2007, 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.
- */
-
-package java.beans;
-
-import java.beans.*;
-
-/**
- * This is a support class to help build property editors.
- * <p>
- * It can be used either as a base class or as a delagatee.
- */
-
-public class PropertyEditorSupport implements PropertyEditor {
-
-    /**
-     * Constructs a <code>PropertyEditorSupport</code> object.
-     *
-     * @since 1.5
-     */
-    public PropertyEditorSupport() {
-        setSource(this);
-    }
-
-    /**
-     * Constructs a <code>PropertyEditorSupport</code> object.
-     *
-     * @param source the source used for event firing
-     * @since 1.5
-     */
-    public PropertyEditorSupport(Object source) {
-        if (source == null) {
-           throw new NullPointerException();
-        }
-        setSource(source);
-    }
-
-    /**
-     * Returns the bean that is used as the
-     * source of events. If the source has not
-     * been explicitly set then this instance of
-     * <code>PropertyEditorSupport</code> is returned.
-     *
-     * @return the source object or this instance
-     * @since 1.5
-     */
-    public Object getSource() {
-        return source;
-    }
-
-    /**
-     * Sets the source bean.
-     * <p>
-     * The source bean is used as the source of events
-     * for the property changes. This source should be used for information
-     * purposes only and should not be modified by the PropertyEditor.
-     *
-     * @param source source object to be used for events
-     * @since 1.5
-     */
-    public void setSource(Object source) {
-        this.source = source;
-    }
-
-    /**
-     * Set (or change) the object that is to be edited.
-     *
-     * @param value The new target object to be edited.  Note that this
-     *     object should not be modified by the PropertyEditor, rather
-     *     the PropertyEditor should create a new object to hold any
-     *     modified value.
-     */
-    public void setValue(Object value) {
-        this.value = value;
-        firePropertyChange();
-    }
-
-    /**
-     * Gets the value of the property.
-     *
-     * @return The value of the property.
-     */
-    public Object getValue() {
-        return value;
-    }
-
-    //----------------------------------------------------------------------
-
-    /**
-     * Determines whether the class will honor the paintValue method.
-     *
-     * @return  True if the class will honor the paintValue method.
-     */
-
-    public boolean isPaintable() {
-        return false;
-    }
-
-    /**
-     * Paint a representation of the value into a given area of screen
-     * real estate.  Note that the propertyEditor is responsible for doing
-     * its own clipping so that it fits into the given rectangle.
-     * <p>
-     * If the PropertyEditor doesn't honor paint requests (see isPaintable)
-     * this method should be a silent noop.
-     *
-     * @param gfx  Graphics object to paint into.
-     * @param box  Rectangle within graphics object into which we should paint.
-     */
-    public void paintValue(java.awt.Graphics gfx, java.awt.Rectangle box) {
-    }
-
-    //----------------------------------------------------------------------
-
-    /**
-     * This method is intended for use when generating Java code to set
-     * the value of the property.  It should return a fragment of Java code
-     * that can be used to initialize a variable with the current property
-     * value.
-     * <p>
-     * Example results are "2", "new Color(127,127,34)", "Color.orange", etc.
-     *
-     * @return A fragment of Java code representing an initializer for the
-     *          current value.
-     */
-    public String getJavaInitializationString() {
-        return "???";
-    }
-
-    //----------------------------------------------------------------------
-
-    /**
-     * Gets the property value as a string suitable for presentation
-     * to a human to edit.
-     *
-     * @return The property value as a string suitable for presentation
-     *       to a human to edit.
-     * <p>   Returns null if the value can't be expressed as a string.
-     * <p>   If a non-null value is returned, then the PropertyEditor should
-     *       be prepared to parse that string back in setAsText().
-     */
-    public String getAsText() {
-        return (this.value != null)
-                ? this.value.toString()
-                : null;
-    }
-
-    /**
-     * Sets the property value by parsing a given String.  May raise
-     * java.lang.IllegalArgumentException if either the String is
-     * badly formatted or if this kind of property can't be expressed
-     * as text.
-     *
-     * @param text  The string to be parsed.
-     */
-    public void setAsText(String text) throws java.lang.IllegalArgumentException {
-        if (value instanceof String) {
-            setValue(text);
-            return;
-        }
-        throw new java.lang.IllegalArgumentException(text);
-    }
-
-    //----------------------------------------------------------------------
-
-    /**
-     * If the property value must be one of a set of known tagged values,
-     * then this method should return an array of the tag values.  This can
-     * be used to represent (for example) enum values.  If a PropertyEditor
-     * supports tags, then it should support the use of setAsText with
-     * a tag value as a way of setting the value.
-     *
-     * @return The tag values for this property.  May be null if this
-     *   property cannot be represented as a tagged value.
-     *
-     */
-    public String[] getTags() {
-        return null;
-    }
-
-    //----------------------------------------------------------------------
-
-    /**
-     * A PropertyEditor may chose to make available a full custom Component
-     * that edits its property value.  It is the responsibility of the
-     * PropertyEditor to hook itself up to its editor Component itself and
-     * to report property value changes by firing a PropertyChange event.
-     * <P>
-     * The higher-level code that calls getCustomEditor may either embed
-     * the Component in some larger property sheet, or it may put it in
-     * its own individual dialog, or ...
-     *
-     * @return A java.awt.Component that will allow a human to directly
-     *      edit the current property value.  May be null if this is
-     *      not supported.
-     */
-
-    public java.awt.Component getCustomEditor() {
-        return null;
-    }
-
-    /**
-     * Determines whether the propertyEditor can provide a custom editor.
-     *
-     * @return  True if the propertyEditor can provide a custom editor.
-     */
-    public boolean supportsCustomEditor() {
-        return false;
-    }
-
-    //----------------------------------------------------------------------
-
-    /**
-     * Adds a listener for the value change.
-     * When the property editor changes its value
-     * it should fire a {@link PropertyChangeEvent}
-     * on all registered {@link PropertyChangeListener}s,
-     * specifying the {@code null} value for the property name.
-     * If the source property is set,
-     * it should be used as the source of the event.
-     * <p>
-     * The same listener object may be added more than once,
-     * and will be called as many times as it is added.
-     * If {@code listener} is {@code null},
-     * no exception is thrown and no action is taken.
-     *
-     * @param listener  the {@link PropertyChangeListener} to add
-     */
-    public synchronized void addPropertyChangeListener(
-                                PropertyChangeListener listener) {
-        if (listeners == null) {
-            listeners = new java.util.Vector();
-        }
-        listeners.addElement(listener);
-    }
-
-    /**
-     * Removes a listener for the value change.
-     * <p>
-     * If the same listener was added more than once,
-     * it will be notified one less time after being removed.
-     * If {@code listener} is {@code null}, or was never added,
-     * no exception is thrown and no action is taken.
-     *
-     * @param listener  the {@link PropertyChangeListener} to remove
-     */
-    public synchronized void removePropertyChangeListener(
-                                PropertyChangeListener listener) {
-        if (listeners == null) {
-            return;
-        }
-        listeners.removeElement(listener);
-    }
-
-    /**
-     * Report that we have been modified to any interested listeners.
-     */
-    public void firePropertyChange() {
-        java.util.Vector targets;
-        synchronized (this) {
-            if (listeners == null) {
-                return;
-            }
-            targets = (java.util.Vector) listeners.clone();
-        }
-        // Tell our listeners that "everything" has changed.
-        PropertyChangeEvent evt = new PropertyChangeEvent(source, null, null, null);
-
-        for (int i = 0; i < targets.size(); i++) {
-            PropertyChangeListener target = (PropertyChangeListener)targets.elementAt(i);
-            target.propertyChange(evt);
-        }
-    }
-
-    //----------------------------------------------------------------------
-
-    private Object value;
-    private Object source;
-    private java.util.Vector listeners;
-}
diff --git a/ojluni/src/main/java/java/beans/PropertyVetoException.java b/ojluni/src/main/java/java/beans/PropertyVetoException.java
deleted file mode 100755
index 27a2f82..0000000
--- a/ojluni/src/main/java/java/beans/PropertyVetoException.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 1996, 2009, 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.
- */
-
-package java.beans;
-
-
-/**
- * A PropertyVetoException is thrown when a proposed change to a
- * property represents an unacceptable value.
- */
-
-public
-class PropertyVetoException extends Exception {
-    private static final long serialVersionUID = 129596057694162164L;
-
-    /**
-     * Constructs a <code>PropertyVetoException</code> with a
-     * detailed message.
-     *
-     * @param mess Descriptive message
-     * @param evt A PropertyChangeEvent describing the vetoed change.
-     */
-    public PropertyVetoException(String mess, PropertyChangeEvent evt) {
-        super(mess);
-        this.evt = evt;
-    }
-
-     /**
-     * Gets the vetoed <code>PropertyChangeEvent</code>.
-     *
-     * @return A PropertyChangeEvent describing the vetoed change.
-     */
-    public PropertyChangeEvent getPropertyChangeEvent() {
-        return evt;
-    }
-
-    /**
-     * A PropertyChangeEvent describing the vetoed change.
-     * @serial
-     */
-    private PropertyChangeEvent evt;
-}
diff --git a/ojluni/src/main/java/java/beans/SimpleBeanInfo.java b/ojluni/src/main/java/java/beans/SimpleBeanInfo.java
deleted file mode 100755
index ddd6b02..0000000
--- a/ojluni/src/main/java/java/beans/SimpleBeanInfo.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (c) 1996, 1998, 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.
- */
-
-package java.beans;
-
-/**
- * This is a support class to make it easier for people to provide
- * BeanInfo classes.
- * <p>
- * It defaults to providing "noop" information, and can be selectively
- * overriden to provide more explicit information on chosen topics.
- * When the introspector sees the "noop" values, it will apply low
- * level introspection and design patterns to automatically analyze
- * the target bean.
- */
-
-public class SimpleBeanInfo implements BeanInfo {
-
-    /**
-     * Deny knowledge about the class and customizer of the bean.
-     * You can override this if you wish to provide explicit info.
-     */
-    public BeanDescriptor getBeanDescriptor() {
-        return null;
-    }
-
-    /**
-     * Deny knowledge of properties. You can override this
-     * if you wish to provide explicit property info.
-     */
-    public PropertyDescriptor[] getPropertyDescriptors() {
-        return null;
-    }
-
-    /**
-     * Deny knowledge of a default property. You can override this
-     * if you wish to define a default property for the bean.
-     */
-    public int getDefaultPropertyIndex() {
-        return -1;
-    }
-
-    /**
-     * Deny knowledge of event sets. You can override this
-     * if you wish to provide explicit event set info.
-     */
-    public EventSetDescriptor[] getEventSetDescriptors() {
-        return null;
-    }
-
-    /**
-     * Deny knowledge of a default event. You can override this
-     * if you wish to define a default event for the bean.
-     */
-    public int getDefaultEventIndex() {
-        return -1;
-    }
-
-    /**
-     * Deny knowledge of methods. You can override this
-     * if you wish to provide explicit method info.
-     */
-    public MethodDescriptor[] getMethodDescriptors() {
-        return null;
-    }
-
-    /**
-     * Claim there are no other relevant BeanInfo objects.  You
-     * may override this if you want to (for example) return a
-     * BeanInfo for a base class.
-     */
-    public BeanInfo[] getAdditionalBeanInfo() {
-        return null;
-    }
-
-    /**
-     * Claim there are no icons available.  You can override
-     * this if you want to provide icons for your bean.
-     */
-    public java.awt.Image getIcon(int iconKind) {
-        return null;
-    }
-
-    /**
-     * This is a utility method to help in loading icon images.
-     * It takes the name of a resource file associated with the
-     * current object's class file and loads an image object
-     * from that file.  Typically images will be GIFs.
-     * <p>
-     * @param resourceName  A pathname relative to the directory
-     *          holding the class file of the current class.  For example,
-     *          "wombat.gif".
-     * @return  an image object.  May be null if the load failed.
-     */
-    public java.awt.Image loadImage(final String resourceName) {
-        try {
-            final Class c = getClass();
-            java.awt.image.ImageProducer ip = (java.awt.image.ImageProducer)
-                java.security.AccessController.doPrivileged(
-                new java.security.PrivilegedAction() {
-                    public Object run() {
-                        java.net.URL url;
-                        if ((url = c.getResource(resourceName)) == null) {
-                            return null;
-                        } else {
-                            try {
-                                return url.getContent();
-                            } catch (java.io.IOException ioe) {
-                                return null;
-                            }
-                        }
-                    }
-            });
-
-            if (ip == null)
-                return null;
-            java.awt.Toolkit tk = java.awt.Toolkit.getDefaultToolkit();
-            return tk.createImage(ip);
-        } catch (Exception ex) {
-            return null;
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/java/beans/Statement.java b/ojluni/src/main/java/java/beans/Statement.java
deleted file mode 100755
index b6e1c2f..0000000
--- a/ojluni/src/main/java/java/beans/Statement.java
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
- * Copyright (c) 2000, 2010, 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.
- */
-package java.beans;
-
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Array;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import com.sun.beans.finder.ClassFinder;
-import com.sun.beans.finder.ConstructorFinder;
-import com.sun.beans.finder.MethodFinder;
-import sun.reflect.misc.MethodUtil;
-
-/**
- * A <code>Statement</code> object represents a primitive statement
- * in which a single method is applied to a target and
- * a set of arguments - as in <code>"a.setFoo(b)"</code>.
- * Note that where this example uses names
- * to denote the target and its argument, a statement
- * object does not require a name space and is constructed with
- * the values themselves.
- * The statement object associates the named method
- * with its environment as a simple set of values:
- * the target and an array of argument values.
- *
- * @since 1.4
- *
- * @author Philip Milne
- */
-public class Statement {
-
-    private static Object[] emptyArray = new Object[]{};
-
-    static ExceptionListener defaultExceptionListener = new ExceptionListener() {
-        public void exceptionThrown(Exception e) {
-            System.err.println(e);
-            // e.printStackTrace();
-            System.err.println("Continuing ...");
-        }
-    };
-
-    private final AccessControlContext acc = AccessController.getContext();
-    private final Object target;
-    private final String methodName;
-    private final Object[] arguments;
-    ClassLoader loader;
-
-    /**
-     * Creates a new {@link Statement} object
-     * for the specified target object to invoke the method
-     * specified by the name and by the array of arguments.
-     * <p>
-     * The {@code target} and the {@code methodName} values should not be {@code null}.
-     * Otherwise an attempt to execute this {@code Expression}
-     * will result in a {@code NullPointerException}.
-     * If the {@code arguments} value is {@code null},
-     * an empty array is used as the value of the {@code arguments} property.
-     *
-     * @param target  the target object of this statement
-     * @param methodName  the name of the method to invoke on the specified target
-     * @param arguments  the array of arguments to invoke the specified method
-     */
-    @ConstructorProperties({"target", "methodName", "arguments"})
-    public Statement(Object target, String methodName, Object[] arguments) {
-        this.target = target;
-        this.methodName = methodName;
-        this.arguments = (arguments == null) ? emptyArray : arguments;
-    }
-
-    /**
-     * Returns the target object of this statement.
-     * If this method returns {@code null},
-     * the {@link #execute} method
-     * throws a {@code NullPointerException}.
-     *
-     * @return the target object of this statement
-     */
-    public Object getTarget() {
-        return target;
-    }
-
-    /**
-     * Returns the name of the method to invoke.
-     * If this method returns {@code null},
-     * the {@link #execute} method
-     * throws a {@code NullPointerException}.
-     *
-     * @return the name of the method
-     */
-    public String getMethodName() {
-        return methodName;
-    }
-
-    /**
-     * Returns the arguments for the method to invoke.
-     * The number of arguments and their types
-     * must match the method being  called.
-     * {@code null} can be used as a synonym of an empty array.
-     *
-     * @return the array of arguments
-     */
-    public Object[] getArguments() {
-        return arguments;
-    }
-
-    /**
-     * The {@code execute} method finds a method whose name is the same
-     * as the {@code methodName} property, and invokes the method on
-     * the target.
-     *
-     * When the target's class defines many methods with the given name
-     * the implementation should choose the most specific method using
-     * the algorithm specified in the Java Language Specification
-     * (15.11). The dynamic class of the target and arguments are used
-     * in place of the compile-time type information and, like the
-     * {@link java.lang.reflect.Method} class itself, conversion between
-     * primitive values and their associated wrapper classes is handled
-     * internally.
-     * <p>
-     * The following method types are handled as special cases:
-     * <ul>
-     * <li>
-     * Static methods may be called by using a class object as the target.
-     * <li>
-     * The reserved method name "new" may be used to call a class's constructor
-     * as if all classes defined static "new" methods. Constructor invocations
-     * are typically considered {@code Expression}s rather than {@code Statement}s
-     * as they return a value.
-     * <li>
-     * The method names "get" and "set" defined in the {@link java.util.List}
-     * interface may also be applied to array instances, mapping to
-     * the static methods of the same name in the {@code Array} class.
-     * </ul>
-     *
-     * @throws NullPointerException if the value of the {@code target} or
-     *                              {@code methodName} property is {@code null}
-     * @throws NoSuchMethodException if a matching method is not found
-     * @throws SecurityException if a security manager exists and
-     *                           it denies the method invocation
-     * @throws Exception that is thrown by the invoked method
-     *
-     * @see java.lang.reflect.Method
-     */
-    public void execute() throws Exception {
-        invoke();
-    }
-
-    Object invoke() throws Exception {
-        AccessControlContext acc = this.acc;
-        if ((acc == null) && (System.getSecurityManager() != null)) {
-            throw new SecurityException("AccessControlContext is not set");
-        }
-        try {
-            return AccessController.doPrivileged(
-                    new PrivilegedExceptionAction<Object>() {
-                        public Object run() throws Exception {
-                            return invokeInternal();
-                        }
-                    },
-                    acc
-            );
-        }
-        catch (PrivilegedActionException exception) {
-            throw exception.getException();
-        }
-    }
-
-    private Object invokeInternal() throws Exception {
-        Object target = getTarget();
-        String methodName = getMethodName();
-
-        if (target == null || methodName == null) {
-            throw new NullPointerException((target == null ? "target" :
-                                            "methodName") + " should not be null");
-        }
-
-        Object[] arguments = getArguments();
-        if (arguments == null) {
-            arguments = emptyArray;
-        }
-        // Class.forName() won't load classes outside
-        // of core from a class inside core. Special
-        // case this method.
-        if (target == Class.class && methodName.equals("forName")) {
-            return ClassFinder.resolveClass((String)arguments[0], this.loader);
-        }
-        Class[] argClasses = new Class[arguments.length];
-        for(int i = 0; i < arguments.length; i++) {
-            argClasses[i] = (arguments[i] == null) ? null : arguments[i].getClass();
-        }
-
-        AccessibleObject m = null;
-        if (target instanceof Class) {
-            /*
-            For class methods, simluate the effect of a meta class
-            by taking the union of the static methods of the
-            actual class, with the instance methods of "Class.class"
-            and the overloaded "newInstance" methods defined by the
-            constructors.
-            This way "System.class", for example, will perform both
-            the static method getProperties() and the instance method
-            getSuperclass() defined in "Class.class".
-            */
-            if (methodName.equals("new")) {
-                methodName = "newInstance";
-            }
-            // Provide a short form for array instantiation by faking an nary-constructor.
-            if (methodName.equals("newInstance") && ((Class)target).isArray()) {
-                Object result = Array.newInstance(((Class)target).getComponentType(), arguments.length);
-                for(int i = 0; i < arguments.length; i++) {
-                    Array.set(result, i, arguments[i]);
-                }
-                return result;
-            }
-            if (methodName.equals("newInstance") && arguments.length != 0) {
-                // The Character class, as of 1.4, does not have a constructor
-                // which takes a String. All of the other "wrapper" classes
-                // for Java's primitive types have a String constructor so we
-                // fake such a constructor here so that this special case can be
-                // ignored elsewhere.
-                if (target == Character.class && arguments.length == 1 &&
-                    argClasses[0] == String.class) {
-                    return new Character(((String)arguments[0]).charAt(0));
-                }
-                try {
-                    m = ConstructorFinder.findConstructor((Class)target, argClasses);
-                }
-                catch (NoSuchMethodException exception) {
-                    m = null;
-                }
-            }
-            if (m == null && target != Class.class) {
-                m = getMethod((Class)target, methodName, argClasses);
-            }
-            if (m == null) {
-                m = getMethod(Class.class, methodName, argClasses);
-            }
-        }
-        else {
-            /*
-            This special casing of arrays is not necessary, but makes files
-            involving arrays much shorter and simplifies the archiving infrastrcure.
-            The Array.set() method introduces an unusual idea - that of a static method
-            changing the state of an instance. Normally statements with side
-            effects on objects are instance methods of the objects themselves
-            and we reinstate this rule (perhaps temporarily) by special-casing arrays.
-            */
-            if (target.getClass().isArray() &&
-                (methodName.equals("set") || methodName.equals("get"))) {
-                int index = ((Integer)arguments[0]).intValue();
-                if (methodName.equals("get")) {
-                    return Array.get(target, index);
-                }
-                else {
-                    Array.set(target, index, arguments[1]);
-                    return null;
-                }
-            }
-            m = getMethod(target.getClass(), methodName, argClasses);
-        }
-        if (m != null) {
-            try {
-                if (m instanceof Method) {
-                    return MethodUtil.invoke((Method)m, target, arguments);
-                }
-                else {
-                    return ((Constructor)m).newInstance(arguments);
-                }
-            }
-            catch (IllegalAccessException iae) {
-                throw new Exception("Statement cannot invoke: " +
-                                    methodName + " on " + target.getClass(),
-                                    iae);
-            }
-            catch (InvocationTargetException ite) {
-                Throwable te = ite.getTargetException();
-                if (te instanceof Exception) {
-                    throw (Exception)te;
-                }
-                else {
-                    throw ite;
-                }
-            }
-        }
-        throw new NoSuchMethodException(toString());
-    }
-
-    String instanceName(Object instance) {
-        if (instance == null) {
-            return "null";
-        } else if (instance.getClass() == String.class) {
-            return "\""+(String)instance + "\"";
-        } else {
-            // Note: there is a minor problem with using the non-caching
-            // NameGenerator method. The return value will not have
-            // specific information about the inner class name. For example,
-            // In 1.4.2 an inner class would be represented as JList$1 now
-            // would be named Class.
-
-            return NameGenerator.unqualifiedClassName(instance.getClass());
-        }
-    }
-
-    /**
-     * Prints the value of this statement using a Java-style syntax.
-     */
-    public String toString() {
-        // Respect a subclass's implementation here.
-        Object target = getTarget();
-        String methodName = getMethodName();
-        Object[] arguments = getArguments();
-        if (arguments == null) {
-            arguments = emptyArray;
-        }
-        StringBuffer result = new StringBuffer(instanceName(target) + "." + methodName + "(");
-        int n = arguments.length;
-        for(int i = 0; i < n; i++) {
-            result.append(instanceName(arguments[i]));
-            if (i != n -1) {
-                result.append(", ");
-            }
-        }
-        result.append(");");
-        return result.toString();
-    }
-
-    static Method getMethod(Class<?> type, String name, Class<?>... args) {
-        try {
-            return MethodFinder.findMethod(type, name, args);
-        }
-        catch (NoSuchMethodException exception) {
-            return null;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/ThreadGroupContext.java b/ojluni/src/main/java/java/beans/ThreadGroupContext.java
deleted file mode 100755
index 6236ec2..0000000
--- a/ojluni/src/main/java/java/beans/ThreadGroupContext.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 2011, 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.
- */
-
-package java.beans;
-
-import com.sun.beans.finder.BeanInfoFinder;
-import com.sun.beans.finder.PropertyEditorFinder;
-
-import java.awt.GraphicsEnvironment;
-import java.util.Map;
-import java.util.WeakHashMap;
-
-/**
- * The {@code ThreadGroupContext} is an application-dependent
- * context referenced by the specific {@link ThreadGroup}.
- * This is a replacement for the {@link sun.awt.AppContext}.
- *
- * @author  Sergey Malenkov
- */
-final class ThreadGroupContext {
-
-    private static final WeakIdentityMap<ThreadGroupContext> contexts = new WeakIdentityMap<>();
-
-    /**
-     * Returns the appropriate {@code AppContext} for the caller,
-     * as determined by its {@code ThreadGroup}.
-     *
-     * @return  the application-dependent context
-     */
-    static ThreadGroupContext getContext() {
-        ThreadGroup group = Thread.currentThread().getThreadGroup();
-        synchronized (contexts) {
-            ThreadGroupContext context = contexts.get(group);
-            if (context == null) {
-                context = new ThreadGroupContext();
-                contexts.put(group, context);
-            }
-            return context;
-        }
-    }
-
-    private volatile boolean isDesignTime;
-    private volatile Boolean isGuiAvailable;
-
-    private Map<Class<?>, BeanInfo> beanInfoCache;
-    private BeanInfoFinder beanInfoFinder;
-    private PropertyEditorFinder propertyEditorFinder;
-
-    private ThreadGroupContext() {
-    }
-
-    boolean isDesignTime() {
-        return this.isDesignTime;
-    }
-
-    void setDesignTime(boolean isDesignTime) {
-        this.isDesignTime = isDesignTime;
-    }
-
-
-    boolean isGuiAvailable() {
-        Boolean isGuiAvailable = this.isGuiAvailable;
-        return (isGuiAvailable != null)
-                ? isGuiAvailable.booleanValue()
-                : !GraphicsEnvironment.isHeadless();
-    }
-
-    void setGuiAvailable(boolean isGuiAvailable) {
-        this.isGuiAvailable = Boolean.valueOf(isGuiAvailable);
-    }
-
-
-    BeanInfo getBeanInfo(Class<?> type) {
-        return (this.beanInfoCache != null)
-                ? this.beanInfoCache.get(type)
-                : null;
-    }
-
-    BeanInfo putBeanInfo(Class<?> type, BeanInfo info) {
-        if (this.beanInfoCache == null) {
-            this.beanInfoCache = new WeakHashMap<>();
-        }
-        return this.beanInfoCache.put(type, info);
-    }
-
-    void removeBeanInfo(Class<?> type) {
-        if (this.beanInfoCache != null) {
-            this.beanInfoCache.remove(type);
-        }
-    }
-
-    void clearBeanInfoCache() {
-        if (this.beanInfoCache != null) {
-            this.beanInfoCache.clear();
-        }
-    }
-
-
-    synchronized BeanInfoFinder getBeanInfoFinder() {
-        if (this.beanInfoFinder == null) {
-            this.beanInfoFinder = new BeanInfoFinder();
-        }
-        return this.beanInfoFinder;
-    }
-
-    synchronized PropertyEditorFinder getPropertyEditorFinder() {
-        if (this.propertyEditorFinder == null) {
-            this.propertyEditorFinder = new PropertyEditorFinder();
-        }
-        return this.propertyEditorFinder;
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/Transient.java b/ojluni/src/main/java/java/beans/Transient.java
deleted file mode 100755
index 0a2761c..0000000
--- a/ojluni/src/main/java/java/beans/Transient.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-package java.beans;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-/**
- * Indicates that an attribute called "transient"
- * should be declared with the given {@code value}
- * when the {@link Introspector} constructs
- * a {@link PropertyDescriptor} or {@link EventSetDescriptor}
- * classes associated with the annotated code element.
- * A {@code true} value for the "transient" attribute
- * indicates to encoders derived from {@link Encoder}
- * that this feature should be ignored.
- * <p/>
- * The {@code Transient} annotation may be be used
- * in any of the methods that are involved
- * in a {@link FeatureDescriptor} subclass
- * to identify the transient feature in the annotated class and its subclasses.
- * Normally, the method that starts with "get" is the best place
- * to put the annotation and it is this declaration
- * that takes precedence in the case of multiple annotations
- * being defined for the same feature.
- * <p/>
- * To declare a feature non-transient in a class
- * whose superclass declares it transient,
- * use {@code @Transient(false)}.
- * In all cases, the {@link Introspector} decides
- * if a feature is transient by referring to the annotation
- * on the most specific superclass.
- * If no {@code Transient} annotation is present
- * in any superclass the feature is not transient.
- *
- * @since 1.7
- */
-@Target({METHOD})
-@Retention(RUNTIME)
-public @interface Transient {
-    boolean value() default true;
-}
diff --git a/ojluni/src/main/java/java/beans/VetoableChangeListener.java b/ojluni/src/main/java/java/beans/VetoableChangeListener.java
deleted file mode 100755
index 898fd82..0000000
--- a/ojluni/src/main/java/java/beans/VetoableChangeListener.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1996, 1997, 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.
- */
-
-package java.beans;
-
-/**
- * A VetoableChange event gets fired whenever a bean changes a "constrained"
- * property.  You can register a VetoableChangeListener with a source bean
- * so as to be notified of any constrained property updates.
- */
-public interface VetoableChangeListener extends java.util.EventListener {
-    /**
-     * This method gets called when a constrained property is changed.
-     *
-     * @param     evt a <code>PropertyChangeEvent</code> object describing the
-     *                event source and the property that has changed.
-     * @exception PropertyVetoException if the recipient wishes the property
-     *              change to be rolled back.
-     */
-    void vetoableChange(PropertyChangeEvent evt)
-                                throws PropertyVetoException;
-}
diff --git a/ojluni/src/main/java/java/beans/VetoableChangeListenerProxy.java b/ojluni/src/main/java/java/beans/VetoableChangeListenerProxy.java
deleted file mode 100755
index 9a04387..0000000
--- a/ojluni/src/main/java/java/beans/VetoableChangeListenerProxy.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package java.beans;
-
-import java.util.EventListenerProxy;
-
-/**
- * A class which extends the {@code EventListenerProxy}
- * specifically for adding a {@code VetoableChangeListener}
- * with a "constrained" property.
- * Instances of this class can be added
- * as {@code VetoableChangeListener}s to a bean
- * which supports firing vetoable change events.
- * <p>
- * If the object has a {@code getVetoableChangeListeners} method
- * then the array returned could be a mixture of {@code VetoableChangeListener}
- * and {@code VetoableChangeListenerProxy} objects.
- *
- * @see java.util.EventListenerProxy
- * @see VetoableChangeSupport#getVetoableChangeListeners
- * @since 1.4
- */
-public class VetoableChangeListenerProxy
-        extends EventListenerProxy<VetoableChangeListener>
-        implements VetoableChangeListener {
-
-    private final String propertyName;
-
-    /**
-     * Constructor which binds the {@code VetoableChangeListener}
-     * to a specific property.
-     *
-     * @param propertyName  the name of the property to listen on
-     * @param listener      the listener object
-     */
-    public VetoableChangeListenerProxy(String propertyName, VetoableChangeListener listener) {
-        super(listener);
-        this.propertyName = propertyName;
-    }
-
-    /**
-    * Forwards the property change event to the listener delegate.
-    *
-    * @param event  the property change event
-    *
-    * @exception PropertyVetoException if the recipient wishes the property
-    *                                  change to be rolled back
-    */
-    public void vetoableChange(PropertyChangeEvent event) throws PropertyVetoException{
-        getListener().vetoableChange(event);
-    }
-
-    /**
-     * Returns the name of the named property associated with the listener.
-     *
-     * @return the name of the named property associated with the listener
-     */
-    public String getPropertyName() {
-        return this.propertyName;
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/VetoableChangeSupport.java b/ojluni/src/main/java/java/beans/VetoableChangeSupport.java
deleted file mode 100755
index 27decb9..0000000
--- a/ojluni/src/main/java/java/beans/VetoableChangeSupport.java
+++ /dev/null
@@ -1,535 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, 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.
- */
-package java.beans;
-
-import java.io.Serializable;
-import java.io.ObjectStreamField;
-import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.IOException;
-import java.util.Hashtable;
-import java.util.Map.Entry;
-
-/**
- * This is a utility class that can be used by beans that support constrained
- * properties.  It manages a list of listeners and dispatches
- * {@link PropertyChangeEvent}s to them.  You can use an instance of this class
- * as a member field of your bean and delegate these types of work to it.
- * The {@link VetoableChangeListener} can be registered for all properties
- * or for a property specified by name.
- * <p>
- * Here is an example of {@code VetoableChangeSupport} usage that follows
- * the rules and recommendations laid out in the JavaBeans&trade; specification:
- * <pre>
- * public class MyBean {
- *     private final VetoableChangeSupport vcs = new VetoableChangeSupport(this);
- *
- *     public void addVetoableChangeListener(VetoableChangeListener listener) {
- *         this.vcs.addVetoableChangeListener(listener);
- *     }
- *
- *     public void removeVetoableChangeListener(VetoableChangeListener listener) {
- *         this.vcs.removeVetoableChangeListener(listener);
- *     }
- *
- *     private String value;
- *
- *     public String getValue() {
- *         return this.value;
- *     }
- *
- *     public void setValue(String newValue) throws PropertyVetoException {
- *         String oldValue = this.value;
- *         this.vcs.fireVetoableChange("value", oldValue, newValue);
- *         this.value = newValue;
- *     }
- *
- *     [...]
- * }
- * </pre>
- * <p>
- * A {@code VetoableChangeSupport} instance is thread-safe.
- * <p>
- * This class is serializable.  When it is serialized it will save
- * (and restore) any listeners that are themselves serializable.  Any
- * non-serializable listeners will be skipped during serialization.
- *
- * @see PropertyChangeSupport
- */
-public class VetoableChangeSupport implements Serializable {
-    private VetoableChangeListenerMap map = new VetoableChangeListenerMap();
-
-    /**
-     * Constructs a <code>VetoableChangeSupport</code> object.
-     *
-     * @param sourceBean  The bean to be given as the source for any events.
-     */
-    public VetoableChangeSupport(Object sourceBean) {
-        if (sourceBean == null) {
-            throw new NullPointerException();
-        }
-        source = sourceBean;
-    }
-
-    /**
-     * Add a VetoableChangeListener to the listener list.
-     * The listener is registered for all properties.
-     * The same listener object may be added more than once, and will be called
-     * as many times as it is added.
-     * If <code>listener</code> is null, no exception is thrown and no action
-     * is taken.
-     *
-     * @param listener  The VetoableChangeListener to be added
-     */
-    public void addVetoableChangeListener(VetoableChangeListener listener) {
-        if (listener == null) {
-            return;
-        }
-        if (listener instanceof VetoableChangeListenerProxy) {
-            VetoableChangeListenerProxy proxy =
-                    (VetoableChangeListenerProxy)listener;
-            // Call two argument add method.
-            addVetoableChangeListener(proxy.getPropertyName(),
-                                      proxy.getListener());
-        } else {
-            this.map.add(null, listener);
-        }
-    }
-
-    /**
-     * Remove a VetoableChangeListener from the listener list.
-     * This removes a VetoableChangeListener that was registered
-     * for all properties.
-     * If <code>listener</code> was added more than once to the same event
-     * source, it will be notified one less time after being removed.
-     * If <code>listener</code> is null, or was never added, no exception is
-     * thrown and no action is taken.
-     *
-     * @param listener  The VetoableChangeListener to be removed
-     */
-    public void removeVetoableChangeListener(VetoableChangeListener listener) {
-        if (listener == null) {
-            return;
-        }
-        if (listener instanceof VetoableChangeListenerProxy) {
-            VetoableChangeListenerProxy proxy =
-                    (VetoableChangeListenerProxy)listener;
-            // Call two argument remove method.
-            removeVetoableChangeListener(proxy.getPropertyName(),
-                                         proxy.getListener());
-        } else {
-            this.map.remove(null, listener);
-        }
-    }
-
-    /**
-     * Returns an array of all the listeners that were added to the
-     * VetoableChangeSupport object with addVetoableChangeListener().
-     * <p>
-     * If some listeners have been added with a named property, then
-     * the returned array will be a mixture of VetoableChangeListeners
-     * and <code>VetoableChangeListenerProxy</code>s. If the calling
-     * method is interested in distinguishing the listeners then it must
-     * test each element to see if it's a
-     * <code>VetoableChangeListenerProxy</code>, perform the cast, and examine
-     * the parameter.
-     *
-     * <pre>
-     * VetoableChangeListener[] listeners = bean.getVetoableChangeListeners();
-     * for (int i = 0; i < listeners.length; i++) {
-     *        if (listeners[i] instanceof VetoableChangeListenerProxy) {
-     *     VetoableChangeListenerProxy proxy =
-     *                    (VetoableChangeListenerProxy)listeners[i];
-     *     if (proxy.getPropertyName().equals("foo")) {
-     *       // proxy is a VetoableChangeListener which was associated
-     *       // with the property named "foo"
-     *     }
-     *   }
-     * }
-     *</pre>
-     *
-     * @see VetoableChangeListenerProxy
-     * @return all of the <code>VetoableChangeListeners</code> added or an
-     *         empty array if no listeners have been added
-     * @since 1.4
-     */
-    public VetoableChangeListener[] getVetoableChangeListeners(){
-        return this.map.getListeners();
-    }
-
-    /**
-     * Add a VetoableChangeListener for a specific property.  The listener
-     * will be invoked only when a call on fireVetoableChange names that
-     * specific property.
-     * The same listener object may be added more than once.  For each
-     * property,  the listener will be invoked the number of times it was added
-     * for that property.
-     * If <code>propertyName</code> or <code>listener</code> is null, no
-     * exception is thrown and no action is taken.
-     *
-     * @param propertyName  The name of the property to listen on.
-     * @param listener  The VetoableChangeListener to be added
-     */
-    public void addVetoableChangeListener(
-                                String propertyName,
-                VetoableChangeListener listener) {
-        if (listener == null || propertyName == null) {
-            return;
-        }
-        listener = this.map.extract(listener);
-        if (listener != null) {
-            this.map.add(propertyName, listener);
-        }
-    }
-
-    /**
-     * Remove a VetoableChangeListener for a specific property.
-     * If <code>listener</code> was added more than once to the same event
-     * source for the specified property, it will be notified one less time
-     * after being removed.
-     * If <code>propertyName</code> is null, no exception is thrown and no
-     * action is taken.
-     * If <code>listener</code> is null, or was never added for the specified
-     * property, no exception is thrown and no action is taken.
-     *
-     * @param propertyName  The name of the property that was listened on.
-     * @param listener  The VetoableChangeListener to be removed
-     */
-    public void removeVetoableChangeListener(
-                                String propertyName,
-                VetoableChangeListener listener) {
-        if (listener == null || propertyName == null) {
-            return;
-        }
-        listener = this.map.extract(listener);
-        if (listener != null) {
-            this.map.remove(propertyName, listener);
-        }
-    }
-
-    /**
-     * Returns an array of all the listeners which have been associated
-     * with the named property.
-     *
-     * @param propertyName  The name of the property being listened to
-     * @return all the <code>VetoableChangeListeners</code> associated with
-     *         the named property.  If no such listeners have been added,
-     *         or if <code>propertyName</code> is null, an empty array is
-     *         returned.
-     * @since 1.4
-     */
-    public VetoableChangeListener[] getVetoableChangeListeners(String propertyName) {
-        return this.map.getListeners(propertyName);
-    }
-
-    /**
-     * Reports a constrained property update to listeners
-     * that have been registered to track updates of
-     * all properties or a property with the specified name.
-     * <p>
-     * Any listener can throw a {@code PropertyVetoException} to veto the update.
-     * If one of the listeners vetoes the update, this method passes
-     * a new "undo" {@code PropertyChangeEvent} that reverts to the old value
-     * to all listeners that already confirmed this update
-     * and throws the {@code PropertyVetoException} again.
-     * <p>
-     * No event is fired if old and new values are equal and non-null.
-     * <p>
-     * This is merely a convenience wrapper around the more general
-     * {@link #fireVetoableChange(PropertyChangeEvent)} method.
-     *
-     * @param propertyName  the programmatic name of the property that is about to change
-     * @param oldValue      the old value of the property
-     * @param newValue      the new value of the property
-     * @throws PropertyVetoException if one of listeners vetoes the property update
-     */
-    public void fireVetoableChange(String propertyName, Object oldValue, Object newValue)
-            throws PropertyVetoException {
-        if (oldValue == null || newValue == null || !oldValue.equals(newValue)) {
-            fireVetoableChange(new PropertyChangeEvent(this.source, propertyName, oldValue, newValue));
-        }
-    }
-
-    /**
-     * Reports an integer constrained property update to listeners
-     * that have been registered to track updates of
-     * all properties or a property with the specified name.
-     * <p>
-     * Any listener can throw a {@code PropertyVetoException} to veto the update.
-     * If one of the listeners vetoes the update, this method passes
-     * a new "undo" {@code PropertyChangeEvent} that reverts to the old value
-     * to all listeners that already confirmed this update
-     * and throws the {@code PropertyVetoException} again.
-     * <p>
-     * No event is fired if old and new values are equal.
-     * <p>
-     * This is merely a convenience wrapper around the more general
-     * {@link #fireVetoableChange(String, Object, Object)} method.
-     *
-     * @param propertyName  the programmatic name of the property that is about to change
-     * @param oldValue      the old value of the property
-     * @param newValue      the new value of the property
-     * @throws PropertyVetoException if one of listeners vetoes the property update
-     */
-    public void fireVetoableChange(String propertyName, int oldValue, int newValue)
-            throws PropertyVetoException {
-        if (oldValue != newValue) {
-            fireVetoableChange(propertyName, Integer.valueOf(oldValue), Integer.valueOf(newValue));
-        }
-    }
-
-    /**
-     * Reports a boolean constrained property update to listeners
-     * that have been registered to track updates of
-     * all properties or a property with the specified name.
-     * <p>
-     * Any listener can throw a {@code PropertyVetoException} to veto the update.
-     * If one of the listeners vetoes the update, this method passes
-     * a new "undo" {@code PropertyChangeEvent} that reverts to the old value
-     * to all listeners that already confirmed this update
-     * and throws the {@code PropertyVetoException} again.
-     * <p>
-     * No event is fired if old and new values are equal.
-     * <p>
-     * This is merely a convenience wrapper around the more general
-     * {@link #fireVetoableChange(String, Object, Object)} method.
-     *
-     * @param propertyName  the programmatic name of the property that is about to change
-     * @param oldValue      the old value of the property
-     * @param newValue      the new value of the property
-     * @throws PropertyVetoException if one of listeners vetoes the property update
-     */
-    public void fireVetoableChange(String propertyName, boolean oldValue, boolean newValue)
-            throws PropertyVetoException {
-        if (oldValue != newValue) {
-            fireVetoableChange(propertyName, Boolean.valueOf(oldValue), Boolean.valueOf(newValue));
-        }
-    }
-
-    /**
-     * Fires a property change event to listeners
-     * that have been registered to track updates of
-     * all properties or a property with the specified name.
-     * <p>
-     * Any listener can throw a {@code PropertyVetoException} to veto the update.
-     * If one of the listeners vetoes the update, this method passes
-     * a new "undo" {@code PropertyChangeEvent} that reverts to the old value
-     * to all listeners that already confirmed this update
-     * and throws the {@code PropertyVetoException} again.
-     * <p>
-     * No event is fired if the given event's old and new values are equal and non-null.
-     *
-     * @param event  the {@code PropertyChangeEvent} to be fired
-     * @throws PropertyVetoException if one of listeners vetoes the property update
-     */
-    public void fireVetoableChange(PropertyChangeEvent event)
-            throws PropertyVetoException {
-        Object oldValue = event.getOldValue();
-        Object newValue = event.getNewValue();
-        if (oldValue == null || newValue == null || !oldValue.equals(newValue)) {
-            String name = event.getPropertyName();
-
-            VetoableChangeListener[] common = this.map.get(null);
-            VetoableChangeListener[] named = (name != null)
-                        ? this.map.get(name)
-                        : null;
-
-            VetoableChangeListener[] listeners;
-            if (common == null) {
-                listeners = named;
-            }
-            else if (named == null) {
-                listeners = common;
-            }
-            else {
-                listeners = new VetoableChangeListener[common.length + named.length];
-                System.arraycopy(common, 0, listeners, 0, common.length);
-                System.arraycopy(named, 0, listeners, common.length, named.length);
-            }
-            if (listeners != null) {
-                int current = 0;
-                try {
-                    while (current < listeners.length) {
-                        listeners[current].vetoableChange(event);
-                        current++;
-                    }
-                }
-                catch (PropertyVetoException veto) {
-                    event = new PropertyChangeEvent(this.source, name, newValue, oldValue);
-                    for (int i = 0; i < current; i++) {
-                        try {
-                            listeners[i].vetoableChange(event);
-                        }
-                        catch (PropertyVetoException exception) {
-                            // ignore exceptions that occur during rolling back
-                        }
-                    }
-                    throw veto; // rethrow the veto exception
-                }
-            }
-        }
-    }
-
-    /**
-     * Check if there are any listeners for a specific property, including
-     * those registered on all properties.  If <code>propertyName</code>
-     * is null, only check for listeners registered on all properties.
-     *
-     * @param propertyName  the property name.
-     * @return true if there are one or more listeners for the given property
-     */
-    public boolean hasListeners(String propertyName) {
-        return this.map.hasListeners(propertyName);
-    }
-
-    /**
-     * @serialData Null terminated list of <code>VetoableChangeListeners</code>.
-     * <p>
-     * At serialization time we skip non-serializable listeners and
-     * only serialize the serializable listeners.
-     */
-    private void writeObject(ObjectOutputStream s) throws IOException {
-        Hashtable<String, VetoableChangeSupport> children = null;
-        VetoableChangeListener[] listeners = null;
-        synchronized (this.map) {
-            for (Entry<String, VetoableChangeListener[]> entry : this.map.getEntries()) {
-                String property = entry.getKey();
-                if (property == null) {
-                    listeners = entry.getValue();
-                } else {
-                    if (children == null) {
-                        children = new Hashtable<String, VetoableChangeSupport>();
-                    }
-                    VetoableChangeSupport vcs = new VetoableChangeSupport(this.source);
-                    vcs.map.set(null, entry.getValue());
-                    children.put(property, vcs);
-                }
-            }
-        }
-        ObjectOutputStream.PutField fields = s.putFields();
-        fields.put("children", children);
-        fields.put("source", this.source);
-        fields.put("vetoableChangeSupportSerializedDataVersion", 2);
-        s.writeFields();
-
-        if (listeners != null) {
-            for (VetoableChangeListener l : listeners) {
-                if (l instanceof Serializable) {
-                    s.writeObject(l);
-                }
-            }
-        }
-        s.writeObject(null);
-    }
-
-    private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException {
-        this.map = new VetoableChangeListenerMap();
-
-        ObjectInputStream.GetField fields = s.readFields();
-
-        Hashtable<String, VetoableChangeSupport> children = (Hashtable<String, VetoableChangeSupport>) fields.get("children", null);
-        this.source = fields.get("source", null);
-        fields.get("vetoableChangeSupportSerializedDataVersion", 2);
-
-        Object listenerOrNull;
-        while (null != (listenerOrNull = s.readObject())) {
-            this.map.add(null, (VetoableChangeListener)listenerOrNull);
-        }
-        if (children != null) {
-            for (Entry<String, VetoableChangeSupport> entry : children.entrySet()) {
-                for (VetoableChangeListener listener : entry.getValue().getVetoableChangeListeners()) {
-                    this.map.add(entry.getKey(), listener);
-                }
-            }
-        }
-    }
-
-    /**
-     * The object to be provided as the "source" for any generated events.
-     */
-    private Object source;
-
-    /**
-     * @serialField children                                   Hashtable
-     * @serialField source                                     Object
-     * @serialField vetoableChangeSupportSerializedDataVersion int
-     */
-    private static final ObjectStreamField[] serialPersistentFields = {
-            new ObjectStreamField("children", Hashtable.class),
-            new ObjectStreamField("source", Object.class),
-            new ObjectStreamField("vetoableChangeSupportSerializedDataVersion", Integer.TYPE)
-    };
-
-    /**
-     * Serialization version ID, so we're compatible with JDK 1.1
-     */
-    static final long serialVersionUID = -5090210921595982017L;
-
-    /**
-     * This is a {@link ChangeListenerMap ChangeListenerMap} implementation
-     * that works with {@link VetoableChangeListener VetoableChangeListener} objects.
-     */
-    private static final class VetoableChangeListenerMap extends ChangeListenerMap<VetoableChangeListener> {
-        private static final VetoableChangeListener[] EMPTY = {};
-
-        /**
-         * Creates an array of {@link VetoableChangeListener VetoableChangeListener} objects.
-         * This method uses the same instance of the empty array
-         * when {@code length} equals {@code 0}.
-         *
-         * @param length  the array length
-         * @return        an array with specified length
-         */
-        @Override
-        protected VetoableChangeListener[] newArray(int length) {
-            return (0 < length)
-                    ? new VetoableChangeListener[length]
-                    : EMPTY;
-        }
-
-        /**
-         * Creates a {@link VetoableChangeListenerProxy VetoableChangeListenerProxy}
-         * object for the specified property.
-         *
-         * @param name      the name of the property to listen on
-         * @param listener  the listener to process events
-         * @return          a {@code VetoableChangeListenerProxy} object
-         */
-        @Override
-        protected VetoableChangeListener newProxy(String name, VetoableChangeListener listener) {
-            return new VetoableChangeListenerProxy(name, listener);
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        public final VetoableChangeListener extract(VetoableChangeListener listener) {
-            while (listener instanceof VetoableChangeListenerProxy) {
-                listener = ((VetoableChangeListenerProxy) listener).getListener();
-            }
-            return listener;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/Visibility.java b/ojluni/src/main/java/java/beans/Visibility.java
deleted file mode 100755
index af41383..0000000
--- a/ojluni/src/main/java/java/beans/Visibility.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1996, 1998, 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.
- */
-
-package java.beans;
-
-/**
- * Under some circumstances a bean may be run on servers where a GUI
- * is not available.  This interface can be used to query a bean to
- * determine whether it absolutely needs a gui, and to advise the
- * bean whether a GUI is available.
- * <p>
- * This interface is for expert developers, and is not needed
- * for normal simple beans.  To avoid confusing end-users we
- * avoid using getXXX setXXX design patterns for these methods.
- */
-
-public interface Visibility {
-
-    /**
-     * Determines whether this bean needs a GUI.
-     *
-     * @return True if the bean absolutely needs a GUI available in
-     *          order to get its work done.
-     */
-    boolean needsGui();
-
-    /**
-     * This method instructs the bean that it should not use the Gui.
-     */
-    void dontUseGui();
-
-    /**
-     * This method instructs the bean that it is OK to use the Gui.
-     */
-    void okToUseGui();
-
-    /**
-     * Determines whether this bean is avoiding using a GUI.
-     *
-     * @return true if the bean is currently avoiding use of the Gui.
-     *   e.g. due to a call on dontUseGui().
-     */
-    boolean avoidingGui();
-
-}
diff --git a/ojluni/src/main/java/java/beans/WeakIdentityMap.java b/ojluni/src/main/java/java/beans/WeakIdentityMap.java
deleted file mode 100755
index 42ac821..0000000
--- a/ojluni/src/main/java/java/beans/WeakIdentityMap.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * 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.
- */
-
-package java.beans;
-
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.WeakReference;
-
-/**
- * Hash table based mapping, which uses weak references to store keys
- * and reference-equality in place of object-equality to compare them.
- * An entry will automatically be removed when its key is no longer
- * in ordinary use.  Both null values and the null key are supported.
- *
- * @see java.util.IdentityHashMap
- * @see java.util.WeakHashMap
- */
-final class WeakIdentityMap<T> {
-
-    private static final int MAXIMUM_CAPACITY = 1 << 30; // it MUST be a power of two
-    private static final Object NULL = new Object(); // special object for null key
-
-    private final ReferenceQueue<Object> queue = new ReferenceQueue<Object>();
-
-    private Entry<T>[] table = newTable(1<<3); // table's length MUST be a power of two
-    private int threshold = 6; // the next size value at which to resize
-    private int size = 0; // the number of key-value mappings
-
-    public T get(Object key) {
-        removeStaleEntries();
-        if (key == null) {
-            key = NULL;
-        }
-        int hash = key.hashCode();
-        int index = getIndex(this.table, hash);
-        for (Entry<T> entry = this.table[index]; entry != null; entry = entry.next) {
-            if (entry.isMatched(key, hash)) {
-                return entry.value;
-            }
-        }
-        return null;
-    }
-
-    public T put(Object key, T value) {
-        removeStaleEntries();
-        if (key == null) {
-            key = NULL;
-        }
-        int hash = key.hashCode();
-        int index = getIndex(this.table, hash);
-        for (Entry<T> entry = this.table[index]; entry != null; entry = entry.next) {
-            if (entry.isMatched(key, hash)) {
-                T oldValue = entry.value;
-                entry.value = value;
-                return oldValue;
-            }
-        }
-        this.table[index] = new Entry<T>(key, hash, value, this.queue, this.table[index]);
-        if (++this.size >= this.threshold) {
-            if (this.table.length == MAXIMUM_CAPACITY) {
-                this.threshold = Integer.MAX_VALUE;
-            }
-            else {
-                removeStaleEntries();
-                Entry<T>[] table = newTable(this.table.length * 2);
-                transfer(this.table, table);
-
-                // If ignoring null elements and processing ref queue caused massive
-                // shrinkage, then restore old table.  This should be rare, but avoids
-                // unbounded expansion of garbage-filled tables.
-                if (this.size >= this.threshold / 2) {
-                    this.table = table;
-                    this.threshold *= 2;
-                }
-                else {
-                    transfer(table, this.table);
-                }
-            }
-        }
-        return null;
-    }
-
-    private void removeStaleEntries() {
-        for (Object ref = this.queue.poll(); ref != null; ref = this.queue.poll()) {
-            @SuppressWarnings("unchecked")
-            Entry<T> entry = (Entry<T>) ref;
-            int index = getIndex(this.table, entry.hash);
-
-            Entry<T> prev = this.table[index];
-            Entry<T> current = prev;
-            while (current != null) {
-                Entry<T> next = current.next;
-                if (current == entry) {
-                    if (prev == entry) {
-                        this.table[index] = next;
-                    }
-                    else {
-                        prev.next = next;
-                    }
-                    entry.value = null; // Help GC
-                    entry.next = null; // Help GC
-                    this.size--;
-                    break;
-                }
-                prev = current;
-                current = next;
-            }
-        }
-    }
-
-    private void transfer(Entry<T>[] oldTable, Entry<T>[] newTable) {
-        for (int i = 0; i < oldTable.length; i++) {
-            Entry<T> entry = oldTable[i];
-            oldTable[i] = null;
-            while (entry != null) {
-                Entry<T> next = entry.next;
-                Object key = entry.get();
-                if (key == null) {
-                    entry.value = null; // Help GC
-                    entry.next = null; // Help GC
-                    this.size--;
-                }
-                else {
-                    int index = getIndex(newTable, entry.hash);
-                    entry.next = newTable[index];
-                    newTable[index] = entry;
-                }
-                entry = next;
-            }
-        }
-    }
-
-
-    @SuppressWarnings("unchecked")
-    private Entry<T>[] newTable(int length) {
-        return (Entry<T>[]) new Entry<?>[length];
-    }
-
-    private static int getIndex(Entry<?>[] table, int hash) {
-        return hash & (table.length - 1);
-    }
-
-    private static class Entry<T> extends WeakReference<Object> {
-        private final int hash;
-        private T value;
-        private Entry<T> next;
-
-        Entry(Object key, int hash, T value, ReferenceQueue<Object> queue, Entry<T> next) {
-            super(key, queue);
-            this.hash = hash;
-            this.value = value;
-            this.next  = next;
-        }
-
-        boolean isMatched(Object key, int hash) {
-            return (this.hash == hash) && (key == get());
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/XMLDecoder.java b/ojluni/src/main/java/java/beans/XMLDecoder.java
deleted file mode 100755
index 2fb2fd0..0000000
--- a/ojluni/src/main/java/java/beans/XMLDecoder.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Copyright (c) 2000, 2012, 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.
- */
-package java.beans;
-
-import com.sun.beans.decoder.DocumentHandler;
-
-import java.io.Closeable;
-import java.io.InputStream;
-import java.io.IOException;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-import org.xml.sax.InputSource;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * The <code>XMLDecoder</code> class is used to read XML documents
- * created using the <code>XMLEncoder</code> and is used just like
- * the <code>ObjectInputStream</code>. For example, one can use
- * the following fragment to read the first object defined
- * in an XML document written by the <code>XMLEncoder</code>
- * class:
- * <pre>
- *       XMLDecoder d = new XMLDecoder(
- *                          new BufferedInputStream(
- *                              new FileInputStream("Test.xml")));
- *       Object result = d.readObject();
- *       d.close();
- * </pre>
- *
- *<p>
- * For more information you might also want to check out
- * <a
- href="http://java.sun.com/products/jfc/tsc/articles/persistence3">Long Term Persistence of JavaBeans Components: XML Schema</a>,
- * an article in <em>The Swing Connection.</em>
- * @see XMLEncoder
- * @see java.io.ObjectInputStream
- *
- * @since 1.4
- *
- * @author Philip Milne
- */
-public class XMLDecoder implements AutoCloseable {
-    private final AccessControlContext acc = AccessController.getContext();
-    private final DocumentHandler handler = new DocumentHandler();
-    private final InputSource input;
-    private Object owner;
-    private Object[] array;
-    private int index;
-
-    /**
-     * Creates a new input stream for reading archives
-     * created by the <code>XMLEncoder</code> class.
-     *
-     * @param in The underlying stream.
-     *
-     * @see XMLEncoder#XMLEncoder(java.io.OutputStream)
-     */
-    public XMLDecoder(InputStream in) {
-        this(in, null);
-    }
-
-    /**
-     * Creates a new input stream for reading archives
-     * created by the <code>XMLEncoder</code> class.
-     *
-     * @param in The underlying stream.
-     * @param owner The owner of this stream.
-     *
-     */
-    public XMLDecoder(InputStream in, Object owner) {
-        this(in, owner, null);
-    }
-
-    /**
-     * Creates a new input stream for reading archives
-     * created by the <code>XMLEncoder</code> class.
-     *
-     * @param in the underlying stream.
-     * @param owner the owner of this stream.
-     * @param exceptionListener the exception handler for the stream;
-     *        if <code>null</code> the default exception listener will be used.
-     */
-    public XMLDecoder(InputStream in, Object owner, ExceptionListener exceptionListener) {
-        this(in, owner, exceptionListener, null);
-    }
-
-    /**
-     * Creates a new input stream for reading archives
-     * created by the <code>XMLEncoder</code> class.
-     *
-     * @param in the underlying stream.  <code>null</code> may be passed without
-     *        error, though the resulting XMLDecoder will be useless
-     * @param owner the owner of this stream.  <code>null</code> is a legal
-     *        value
-     * @param exceptionListener the exception handler for the stream, or
-     *        <code>null</code> to use the default
-     * @param cl the class loader used for instantiating objects.
-     *        <code>null</code> indicates that the default class loader should
-     *        be used
-     * @since 1.5
-     */
-    public XMLDecoder(InputStream in, Object owner,
-                      ExceptionListener exceptionListener, ClassLoader cl) {
-        this(new InputSource(in), owner, exceptionListener, cl);
-    }
-
-
-    /**
-     * Creates a new decoder to parse XML archives
-     * created by the {@code XMLEncoder} class.
-     * If the input source {@code is} is {@code null},
-     * no exception is thrown and no parsing is performed.
-     * This behavior is similar to behavior of other constructors
-     * that use {@code InputStream} as a parameter.
-     *
-     * @param is  the input source to parse
-     *
-     * @since 1.7
-     */
-    public XMLDecoder(InputSource is) {
-        this(is, null, null, null);
-    }
-
-    /**
-     * Creates a new decoder to parse XML archives
-     * created by the {@code XMLEncoder} class.
-     *
-     * @param is     the input source to parse
-     * @param owner  the owner of this decoder
-     * @param el     the exception handler for the parser,
-     *               or {@code null} to use the default exception handler
-     * @param cl     the class loader used for instantiating objects,
-     *               or {@code null} to use the default class loader
-     *
-     * @since 1.7
-     */
-    private XMLDecoder(InputSource is, Object owner, ExceptionListener el, ClassLoader cl) {
-        this.input = is;
-        this.owner = owner;
-        setExceptionListener(el);
-        this.handler.setClassLoader(cl);
-        this.handler.setOwner(this);
-    }
-
-    /**
-     * This method closes the input stream associated
-     * with this stream.
-     */
-    public void close() {
-        if (parsingComplete()) {
-            close(this.input.getCharacterStream());
-            close(this.input.getByteStream());
-        }
-    }
-
-    private void close(Closeable in) {
-        if (in != null) {
-            try {
-                in.close();
-            }
-            catch (IOException e) {
-                getExceptionListener().exceptionThrown(e);
-            }
-        }
-    }
-
-    private boolean parsingComplete() {
-        if (this.input == null) {
-            return false;
-        }
-        if (this.array == null) {
-            if ((this.acc == null) && (null != System.getSecurityManager())) {
-                throw new SecurityException("AccessControlContext is not set");
-            }
-            AccessController.doPrivileged(new PrivilegedAction<Void>() {
-                public Void run() {
-                    XMLDecoder.this.handler.parse(XMLDecoder.this.input);
-                    return null;
-                }
-            }, this.acc);
-            this.array = this.handler.getObjects();
-        }
-        return true;
-    }
-
-    /**
-     * Sets the exception handler for this stream to <code>exceptionListener</code>.
-     * The exception handler is notified when this stream catches recoverable
-     * exceptions.
-     *
-     * @param exceptionListener The exception handler for this stream;
-     * if <code>null</code> the default exception listener will be used.
-     *
-     * @see #getExceptionListener
-     */
-    public void setExceptionListener(ExceptionListener exceptionListener) {
-        if (exceptionListener == null) {
-            exceptionListener = Statement.defaultExceptionListener;
-        }
-        this.handler.setExceptionListener(exceptionListener);
-    }
-
-    /**
-     * Gets the exception handler for this stream.
-     *
-     * @return The exception handler for this stream.
-     *     Will return the default exception listener if this has not explicitly been set.
-     *
-     * @see #setExceptionListener
-     */
-    public ExceptionListener getExceptionListener() {
-        return this.handler.getExceptionListener();
-    }
-
-    /**
-     * Reads the next object from the underlying input stream.
-     *
-     * @return the next object read
-     *
-     * @throws ArrayIndexOutOfBoundsException if the stream contains no objects
-     *         (or no more objects)
-     *
-     * @see XMLEncoder#writeObject
-     */
-    public Object readObject() {
-        return (parsingComplete())
-                ? this.array[this.index++]
-                : null;
-    }
-
-    /**
-     * Sets the owner of this decoder to <code>owner</code>.
-     *
-     * @param owner The owner of this decoder.
-     *
-     * @see #getOwner
-     */
-    public void setOwner(Object owner) {
-        this.owner = owner;
-    }
-
-    /**
-     * Gets the owner of this decoder.
-     *
-     * @return The owner of this decoder.
-     *
-     * @see #setOwner
-     */
-    public Object getOwner() {
-        return owner;
-    }
-
-    /**
-     * Creates a new handler for SAX parser
-     * that can be used to parse embedded XML archives
-     * created by the {@code XMLEncoder} class.
-     *
-     * The {@code owner} should be used if parsed XML document contains
-     * the method call within context of the &lt;java&gt; element.
-     * The {@code null} value may cause illegal parsing in such case.
-     * The same problem may occur, if the {@code owner} class
-     * does not contain expected method to call. See details <a
-     * href="http://java.sun.com/products/jfc/tsc/articles/persistence3/">here</a>.
-     *
-     * @param owner  the owner of the default handler
-     *               that can be used as a value of &lt;java&gt; element
-     * @param el     the exception handler for the parser,
-     *               or {@code null} to use the default exception handler
-     * @param cl     the class loader used for instantiating objects,
-     *               or {@code null} to use the default class loader
-     * @return an instance of {@code DefaultHandler} for SAX parser
-     *
-     * @since 1.7
-     */
-    public static DefaultHandler createHandler(Object owner, ExceptionListener el, ClassLoader cl) {
-        DocumentHandler handler = new DocumentHandler();
-        handler.setOwner(owner);
-        handler.setExceptionListener(el);
-        handler.setClassLoader(cl);
-        return handler;
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/XMLEncoder.java b/ojluni/src/main/java/java/beans/XMLEncoder.java
deleted file mode 100755
index 520a7ee..0000000
--- a/ojluni/src/main/java/java/beans/XMLEncoder.java
+++ /dev/null
@@ -1,812 +0,0 @@
-/*
- * Copyright (c) 2000, 2010, 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.
- */
-package java.beans;
-
-import java.io.*;
-import java.util.*;
-import java.lang.reflect.*;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.IllegalCharsetNameException;
-import java.nio.charset.UnsupportedCharsetException;
-
-/**
- * The <code>XMLEncoder</code> class is a complementary alternative to
- * the <code>ObjectOutputStream</code> and can used to generate
- * a textual representation of a <em>JavaBean</em> in the same
- * way that the <code>ObjectOutputStream</code> can
- * be used to create binary representation of <code>Serializable</code>
- * objects. For example, the following fragment can be used to create
- * a textual representation the supplied <em>JavaBean</em>
- * and all its properties:
- * <pre>
- *       XMLEncoder e = new XMLEncoder(
- *                          new BufferedOutputStream(
- *                              new FileOutputStream("Test.xml")));
- *       e.writeObject(new JButton("Hello, world"));
- *       e.close();
- * </pre>
- * Despite the similarity of their APIs, the <code>XMLEncoder</code>
- * class is exclusively designed for the purpose of archiving graphs
- * of <em>JavaBean</em>s as textual representations of their public
- * properties. Like Java source files, documents written this way
- * have a natural immunity to changes in the implementations of the classes
- * involved. The <code>ObjectOutputStream</code> continues to be recommended
- * for interprocess communication and general purpose serialization.
- * <p>
- * The <code>XMLEncoder</code> class provides a default denotation for
- * <em>JavaBean</em>s in which they are represented as XML documents
- * complying with version 1.0 of the XML specification and the
- * UTF-8 character encoding of the Unicode/ISO 10646 character set.
- * The XML documents produced by the <code>XMLEncoder</code> class are:
- * <ul>
- * <li>
- * <em>Portable and version resilient</em>: they have no dependencies
- * on the private implementation of any class and so, like Java source
- * files, they may be exchanged between environments which may have
- * different versions of some of the classes and between VMs from
- * different vendors.
- * <li>
- * <em>Structurally compact</em>: The <code>XMLEncoder</code> class
- * uses a <em>redundancy elimination</em> algorithm internally so that the
- * default values of a Bean's properties are not written to the stream.
- * <li>
- * <em>Fault tolerant</em>: Non-structural errors in the file,
- * caused either by damage to the file or by API changes
- * made to classes in an archive remain localized
- * so that a reader can report the error and continue to load the parts
- * of the document which were not affected by the error.
- * </ul>
- * <p>
- * Below is an example of an XML archive containing
- * some user interface components from the <em>swing</em> toolkit:
- * <pre>
- * &lt;?xml version="1.0" encoding="UTF-8"?&gt;
- * &lt;java version="1.0" class="java.beans.XMLDecoder"&gt;
- * &lt;object class="javax.swing.JFrame"&gt;
- *   &lt;void property="name"&gt;
- *     &lt;string&gt;frame1&lt;/string&gt;
- *   &lt;/void&gt;
- *   &lt;void property="bounds"&gt;
- *     &lt;object class="java.awt.Rectangle"&gt;
- *       &lt;int&gt;0&lt;/int&gt;
- *       &lt;int&gt;0&lt;/int&gt;
- *       &lt;int&gt;200&lt;/int&gt;
- *       &lt;int&gt;200&lt;/int&gt;
- *     &lt;/object&gt;
- *   &lt;/void&gt;
- *   &lt;void property="contentPane"&gt;
- *     &lt;void method="add"&gt;
- *       &lt;object class="javax.swing.JButton"&gt;
- *         &lt;void property="label"&gt;
- *           &lt;string&gt;Hello&lt;/string&gt;
- *         &lt;/void&gt;
- *       &lt;/object&gt;
- *     &lt;/void&gt;
- *   &lt;/void&gt;
- *   &lt;void property="visible"&gt;
- *     &lt;boolean&gt;true&lt;/boolean&gt;
- *   &lt;/void&gt;
- * &lt;/object&gt;
- * &lt;/java&gt;
- * </pre>
- * The XML syntax uses the following conventions:
- * <ul>
- * <li>
- * Each element represents a method call.
- * <li>
- * The "object" tag denotes an <em>expression</em> whose value is
- * to be used as the argument to the enclosing element.
- * <li>
- * The "void" tag denotes a <em>statement</em> which will
- * be executed, but whose result will not be used as an
- * argument to the enclosing method.
- * <li>
- * Elements which contain elements use those elements as arguments,
- * unless they have the tag: "void".
- * <li>
- * The name of the method is denoted by the "method" attribute.
- * <li>
- * XML's standard "id" and "idref" attributes are used to make
- * references to previous expressions - so as to deal with
- * circularities in the object graph.
- * <li>
- * The "class" attribute is used to specify the target of a static
- * method or constructor explicitly; its value being the fully
- * qualified name of the class.
- * <li>
- * Elements with the "void" tag are executed using
- * the outer context as the target if no target is defined
- * by a "class" attribute.
- * <li>
- * Java's String class is treated specially and is
- * written &lt;string&gt;Hello, world&lt;/string&gt; where
- * the characters of the string are converted to bytes
- * using the UTF-8 character encoding.
- * </ul>
- * <p>
- * Although all object graphs may be written using just these three
- * tags, the following definitions are included so that common
- * data structures can be expressed more concisely:
- * <p>
- * <ul>
- * <li>
- * The default method name is "new".
- * <li>
- * A reference to a java class is written in the form
- *  &lt;class&gt;javax.swing.JButton&lt;/class&gt;.
- * <li>
- * Instances of the wrapper classes for Java's primitive types are written
- * using the name of the primitive type as the tag. For example, an
- * instance of the <code>Integer</code> class could be written:
- * &lt;int&gt;123&lt;/int&gt;. Note that the <code>XMLEncoder</code> class
- * uses Java's reflection package in which the conversion between
- * Java's primitive types and their associated "wrapper classes"
- * is handled internally. The API for the <code>XMLEncoder</code> class
- * itself deals only with <code>Object</code>s.
- * <li>
- * In an element representing a nullary method whose name
- * starts with "get", the "method" attribute is replaced
- * with a "property" attribute whose value is given by removing
- * the "get" prefix and decapitalizing the result.
- * <li>
- * In an element representing a monadic method whose name
- * starts with "set", the "method" attribute is replaced
- * with a "property" attribute whose value is given by removing
- * the "set" prefix and decapitalizing the result.
- * <li>
- * In an element representing a method named "get" taking one
- * integer argument, the "method" attribute is replaced
- * with an "index" attribute whose value the value of the
- * first argument.
- * <li>
- * In an element representing a method named "set" taking two arguments,
- * the first of which is an integer, the "method" attribute is replaced
- * with an "index" attribute whose value the value of the
- * first argument.
- * <li>
- * A reference to an array is written using the "array"
- * tag. The "class" and "length" attributes specify the
- * sub-type of the array and its length respectively.
- * </ul>
- *
- *<p>
- * For more information you might also want to check out
- * <a
- href="http://java.sun.com/products/jfc/tsc/articles/persistence4">Using XMLEncoder</a>,
- * an article in <em>The Swing Connection.</em>
- * @see XMLDecoder
- * @see java.io.ObjectOutputStream
- *
- * @since 1.4
- *
- * @author Philip Milne
- */
-public class XMLEncoder extends Encoder implements AutoCloseable {
-
-    private final CharsetEncoder encoder;
-    private final String charset;
-    private final boolean declaration;
-
-    private OutputStreamWriter out;
-    private Object owner;
-    private int indentation = 0;
-    private boolean internal = false;
-    private Map<Object, ValueData> valueToExpression;
-    private Map<Object, List<Statement>> targetToStatementList;
-    private boolean preambleWritten = false;
-    private NameGenerator nameGenerator;
-
-    private class ValueData {
-        public int refs = 0;
-        public boolean marked = false; // Marked -> refs > 0 unless ref was a target.
-        public String name = null;
-        public Expression exp = null;
-    }
-
-    /**
-     * Creates a new XML encoder to write out <em>JavaBeans</em>
-     * to the stream <code>out</code> using an XML encoding.
-     *
-     * @param out  the stream to which the XML representation of
-     *             the objects will be written
-     *
-     * @throws  IllegalArgumentException
-     *          if <code>out</code> is <code>null</code>
-     *
-     * @see XMLDecoder#XMLDecoder(InputStream)
-     */
-    public XMLEncoder(OutputStream out) {
-        this(out, "UTF-8", true, 0);
-    }
-
-    /**
-     * Creates a new XML encoder to write out <em>JavaBeans</em>
-     * to the stream <code>out</code> using the given <code>charset</code>
-     * starting from the given <code>indentation</code>.
-     *
-     * @param out          the stream to which the XML representation of
-     *                     the objects will be written
-     * @param charset      the name of the requested charset;
-     *                     may be either a canonical name or an alias
-     * @param declaration  whether the XML declaration should be generated;
-     *                     set this to <code>false</code>
-     *                     when embedding the contents in another XML document
-     * @param indentation  the number of space characters to indent the entire XML document by
-     *
-     * @throws  IllegalArgumentException
-     *          if <code>out</code> or <code>charset</code> is <code>null</code>,
-     *          or if <code>indentation</code> is less than 0
-     *
-     * @throws  IllegalCharsetNameException
-     *          if <code>charset</code> name is illegal
-     *
-     * @throws  UnsupportedCharsetException
-     *          if no support for the named charset is available
-     *          in this instance of the Java virtual machine
-     *
-     * @throws  UnsupportedOperationException
-     *          if loaded charset does not support encoding
-     *
-     * @see Charset#forName(String)
-     *
-     * @since 1.7
-     */
-    public XMLEncoder(OutputStream out, String charset, boolean declaration, int indentation) {
-        if (out == null) {
-            throw new IllegalArgumentException("the output stream cannot be null");
-        }
-        if (indentation < 0) {
-            throw new IllegalArgumentException("the indentation must be >= 0");
-        }
-        Charset cs = Charset.forName(charset);
-        this.encoder = cs.newEncoder();
-        this.charset = charset;
-        this.declaration = declaration;
-        this.indentation = indentation;
-        this.out = new OutputStreamWriter(out, cs.newEncoder());
-        valueToExpression = new IdentityHashMap<Object, ValueData>();
-        targetToStatementList = new IdentityHashMap<Object, List<Statement>>();
-        nameGenerator = new NameGenerator();
-    }
-
-    /**
-     * Sets the owner of this encoder to <code>owner</code>.
-     *
-     * @param owner The owner of this encoder.
-     *
-     * @see #getOwner
-     */
-    public void setOwner(Object owner) {
-        this.owner = owner;
-        writeExpression(new Expression(this, "getOwner", new Object[0]));
-    }
-
-    /**
-     * Gets the owner of this encoder.
-     *
-     * @return The owner of this encoder.
-     *
-     * @see #setOwner
-     */
-    public Object getOwner() {
-        return owner;
-    }
-
-    /**
-     * Write an XML representation of the specified object to the output.
-     *
-     * @param o The object to be written to the stream.
-     *
-     * @see XMLDecoder#readObject
-     */
-    public void writeObject(Object o) {
-        if (internal) {
-            super.writeObject(o);
-        }
-        else {
-            writeStatement(new Statement(this, "writeObject", new Object[]{o}));
-        }
-    }
-
-    private List<Statement> statementList(Object target) {
-        List<Statement> list = targetToStatementList.get(target);
-        if (list == null) {
-            list = new ArrayList<Statement>();
-            targetToStatementList.put(target, list);
-        }
-        return list;
-    }
-
-
-    private void mark(Object o, boolean isArgument) {
-        if (o == null || o == this) {
-            return;
-        }
-        ValueData d = getValueData(o);
-        Expression exp = d.exp;
-        // Do not mark liternal strings. Other strings, which might,
-        // for example, come from resource bundles should still be marked.
-        if (o.getClass() == String.class && exp == null) {
-            return;
-        }
-
-        // Bump the reference counts of all arguments
-        if (isArgument) {
-            d.refs++;
-        }
-        if (d.marked) {
-            return;
-        }
-        d.marked = true;
-        Object target = exp.getTarget();
-        mark(exp);
-        if (!(target instanceof Class)) {
-            statementList(target).add(exp);
-            // Pending: Why does the reference count need to
-            // be incremented here?
-            d.refs++;
-        }
-    }
-
-    private void mark(Statement stm) {
-        Object[] args = stm.getArguments();
-        for (int i = 0; i < args.length; i++) {
-            Object arg = args[i];
-            mark(arg, true);
-        }
-        mark(stm.getTarget(), false);
-    }
-
-
-    /**
-     * Records the Statement so that the Encoder will
-     * produce the actual output when the stream is flushed.
-     * <P>
-     * This method should only be invoked within the context
-     * of initializing a persistence delegate.
-     *
-     * @param oldStm The statement that will be written
-     *               to the stream.
-     * @see java.beans.PersistenceDelegate#initialize
-     */
-    public void writeStatement(Statement oldStm) {
-        // System.out.println("XMLEncoder::writeStatement: " + oldStm);
-        boolean internal = this.internal;
-        this.internal = true;
-        try {
-            super.writeStatement(oldStm);
-            /*
-               Note we must do the mark first as we may
-               require the results of previous values in
-               this context for this statement.
-               Test case is:
-                   os.setOwner(this);
-                   os.writeObject(this);
-            */
-            mark(oldStm);
-            Object target = oldStm.getTarget();
-            if (target instanceof Field) {
-                String method = oldStm.getMethodName();
-                Object[] args = oldStm.getArguments();
-                if ((method == null) || (args == null)) {
-                }
-                else if (method.equals("get") && (args.length == 1)) {
-                    target = args[0];
-                }
-                else if (method.equals("set") && (args.length == 2)) {
-                    target = args[0];
-                }
-            }
-            statementList(target).add(oldStm);
-        }
-        catch (Exception e) {
-            getExceptionListener().exceptionThrown(new Exception("XMLEncoder: discarding statement " + oldStm, e));
-        }
-        this.internal = internal;
-    }
-
-
-    /**
-     * Records the Expression so that the Encoder will
-     * produce the actual output when the stream is flushed.
-     * <P>
-     * This method should only be invoked within the context of
-     * initializing a persistence delegate or setting up an encoder to
-     * read from a resource bundle.
-     * <P>
-     * For more information about using resource bundles with the
-     * XMLEncoder, see
-     * http://java.sun.com/products/jfc/tsc/articles/persistence4/#i18n
-     *
-     * @param oldExp The expression that will be written
-     *               to the stream.
-     * @see java.beans.PersistenceDelegate#initialize
-     */
-    public void writeExpression(Expression oldExp) {
-        boolean internal = this.internal;
-        this.internal = true;
-        Object oldValue = getValue(oldExp);
-        if (get(oldValue) == null || (oldValue instanceof String && !internal)) {
-            getValueData(oldValue).exp = oldExp;
-            super.writeExpression(oldExp);
-        }
-        this.internal = internal;
-    }
-
-    /**
-     * This method writes out the preamble associated with the
-     * XML encoding if it has not been written already and
-     * then writes out all of the values that been
-     * written to the stream since the last time <code>flush</code>
-     * was called. After flushing, all internal references to the
-     * values that were written to this stream are cleared.
-     */
-    public void flush() {
-        if (!preambleWritten) { // Don't do this in constructor - it throws ... pending.
-            if (this.declaration) {
-                writeln("<?xml version=" + quote("1.0") +
-                            " encoding=" + quote(this.charset) + "?>");
-            }
-            writeln("<java version=" + quote(System.getProperty("java.version")) +
-                           " class=" + quote(XMLDecoder.class.getName()) + ">");
-            preambleWritten = true;
-        }
-        indentation++;
-        List<Statement> statements = statementList(this);
-        while (!statements.isEmpty()) {
-            Statement s = statements.remove(0);
-            if ("writeObject".equals(s.getMethodName())) {
-                outputValue(s.getArguments()[0], this, true);
-            }
-            else {
-                outputStatement(s, this, false);
-            }
-        }
-        indentation--;
-
-        Statement statement = getMissedStatement();
-        while (statement != null) {
-            outputStatement(statement, this, false);
-            statement = getMissedStatement();
-        }
-
-        try {
-            out.flush();
-        }
-        catch (IOException e) {
-            getExceptionListener().exceptionThrown(e);
-        }
-        clear();
-    }
-
-    void clear() {
-        super.clear();
-        nameGenerator.clear();
-        valueToExpression.clear();
-        targetToStatementList.clear();
-    }
-
-    Statement getMissedStatement() {
-        for (List<Statement> statements : this.targetToStatementList.values()) {
-            for (int i = 0; i < statements.size(); i++) {
-                if (Statement.class == statements.get(i).getClass()) {
-                    return statements.remove(i);
-                }
-            }
-        }
-        return null;
-    }
-
-
-    /**
-     * This method calls <code>flush</code>, writes the closing
-     * postamble and then closes the output stream associated
-     * with this stream.
-     */
-    public void close() {
-        flush();
-        writeln("</java>");
-        try {
-            out.close();
-        }
-        catch (IOException e) {
-            getExceptionListener().exceptionThrown(e);
-        }
-    }
-
-    private String quote(String s) {
-        return "\"" + s + "\"";
-    }
-
-    private ValueData getValueData(Object o) {
-        ValueData d = valueToExpression.get(o);
-        if (d == null) {
-            d = new ValueData();
-            valueToExpression.put(o, d);
-        }
-        return d;
-    }
-
-    /**
-     * Returns <code>true</code> if the argument,
-     * a Unicode code point, is valid in XML documents.
-     * Unicode characters fit into the low sixteen bits of a Unicode code point,
-     * and pairs of Unicode <em>surrogate characters</em> can be combined
-     * to encode Unicode code point in documents containing only Unicode.
-     * (The <code>char</code> datatype in the Java Programming Language
-     * represents Unicode characters, including unpaired surrogates.)
-     * <par>
-     * [2] Char ::= #x0009 | #x000A | #x000D
-     *            | [#x0020-#xD7FF]
-     *            | [#xE000-#xFFFD]
-     *            | [#x10000-#x10ffff]
-     * </par>
-     *
-     * @param code  the 32-bit Unicode code point being tested
-     * @return  <code>true</code> if the Unicode code point is valid,
-     *          <code>false</code> otherwise
-     */
-    private static boolean isValidCharCode(int code) {
-        return (0x0020 <= code && code <= 0xD7FF)
-            || (0x000A == code)
-            || (0x0009 == code)
-            || (0x000D == code)
-            || (0xE000 <= code && code <= 0xFFFD)
-            || (0x10000 <= code && code <= 0x10ffff);
-    }
-
-    private void writeln(String exp) {
-        try {
-            StringBuilder sb = new StringBuilder();
-            for(int i = 0; i < indentation; i++) {
-                sb.append(' ');
-            }
-            sb.append(exp);
-            sb.append('\n');
-            this.out.write(sb.toString());
-        }
-        catch (IOException e) {
-            getExceptionListener().exceptionThrown(e);
-        }
-    }
-
-    private void outputValue(Object value, Object outer, boolean isArgument) {
-        if (value == null) {
-            writeln("<null/>");
-            return;
-        }
-
-        if (value instanceof Class) {
-            writeln("<class>" + ((Class)value).getName() + "</class>");
-            return;
-        }
-
-        ValueData d = getValueData(value);
-        if (d.exp != null) {
-            Object target = d.exp.getTarget();
-            String methodName = d.exp.getMethodName();
-
-            if (target == null || methodName == null) {
-                throw new NullPointerException((target == null ? "target" :
-                                                "methodName") + " should not be null");
-            }
-
-            if (isArgument && target instanceof Field && methodName.equals("get")) {
-                Field f = (Field)target;
-                writeln("<object class=" + quote(f.getDeclaringClass().getName()) +
-                        " field=" + quote(f.getName()) + "/>");
-                return;
-            }
-
-            Class primitiveType = primitiveTypeFor(value.getClass());
-            if (primitiveType != null && target == value.getClass() &&
-                methodName.equals("new")) {
-                String primitiveTypeName = primitiveType.getName();
-                // Make sure that character types are quoted correctly.
-                if (primitiveType == Character.TYPE) {
-                    char code = ((Character) value).charValue();
-                    if (!isValidCharCode(code)) {
-                        writeln(createString(code));
-                        return;
-                    }
-                    value = quoteCharCode(code);
-                    if (value == null) {
-                        value = Character.valueOf(code);
-                    }
-                }
-                writeln("<" + primitiveTypeName + ">" + value + "</" +
-                        primitiveTypeName + ">");
-                return;
-            }
-
-        } else if (value instanceof String) {
-            writeln(createString((String) value));
-            return;
-        }
-
-        if (d.name != null) {
-            if (isArgument) {
-                writeln("<object idref=" + quote(d.name) + "/>");
-            }
-            else {
-                outputXML("void", " idref=" + quote(d.name), value);
-            }
-        }
-        else if (d.exp != null) {
-            outputStatement(d.exp, outer, isArgument);
-        }
-    }
-
-    private static String quoteCharCode(int code) {
-        switch(code) {
-          case '&':  return "&amp;";
-          case '<':  return "&lt;";
-          case '>':  return "&gt;";
-          case '"':  return "&quot;";
-          case '\'': return "&apos;";
-          case '\r': return "&#13;";
-          default:   return null;
-        }
-    }
-
-    private static String createString(int code) {
-        return "<char code=\"#" + Integer.toString(code, 16) + "\"/>";
-    }
-
-    private String createString(String string) {
-        StringBuilder sb = new StringBuilder();
-        sb.append("<string>");
-        int index = 0;
-        while (index < string.length()) {
-            int point = string.codePointAt(index);
-            int count = Character.charCount(point);
-
-            if (isValidCharCode(point) && this.encoder.canEncode(string.substring(index, index + count))) {
-                String value = quoteCharCode(point);
-                if (value != null) {
-                    sb.append(value);
-                } else {
-                    sb.appendCodePoint(point);
-                }
-                index += count;
-            } else {
-                sb.append(createString(string.charAt(index)));
-                index++;
-            }
-        }
-        sb.append("</string>");
-        return sb.toString();
-    }
-
-    private void outputStatement(Statement exp, Object outer, boolean isArgument) {
-        Object target = exp.getTarget();
-        String methodName = exp.getMethodName();
-
-        if (target == null || methodName == null) {
-            throw new NullPointerException((target == null ? "target" :
-                                            "methodName") + " should not be null");
-        }
-
-        Object[] args = exp.getArguments();
-        boolean expression = exp.getClass() == Expression.class;
-        Object value = (expression) ? getValue((Expression)exp) : null;
-
-        String tag = (expression && isArgument) ? "object" : "void";
-        String attributes = "";
-        ValueData d = getValueData(value);
-
-        // Special cases for targets.
-        if (target == outer) {
-        }
-        else if (target == Array.class && methodName.equals("newInstance")) {
-            tag = "array";
-            attributes = attributes + " class=" + quote(((Class)args[0]).getName());
-            attributes = attributes + " length=" + quote(args[1].toString());
-            args = new Object[]{};
-        }
-        else if (target.getClass() == Class.class) {
-            attributes = attributes + " class=" + quote(((Class)target).getName());
-        }
-        else {
-            d.refs = 2;
-            if (d.name == null) {
-                getValueData(target).refs++;
-                List<Statement> statements = statementList(target);
-                if (!statements.contains(exp)) {
-                    statements.add(exp);
-                }
-                outputValue(target, outer, false);
-            }
-            if (expression) {
-                outputValue(value, outer, isArgument);
-            }
-            return;
-        }
-        if (expression && (d.refs > 1)) {
-            String instanceName = nameGenerator.instanceName(value);
-            d.name = instanceName;
-            attributes = attributes + " id=" + quote(instanceName);
-        }
-
-        // Special cases for methods.
-        if ((!expression && methodName.equals("set") && args.length == 2 &&
-             args[0] instanceof Integer) ||
-             (expression && methodName.equals("get") && args.length == 1 &&
-              args[0] instanceof Integer)) {
-            attributes = attributes + " index=" + quote(args[0].toString());
-            args = (args.length == 1) ? new Object[]{} : new Object[]{args[1]};
-        }
-        else if ((!expression && methodName.startsWith("set") && args.length == 1) ||
-                 (expression && methodName.startsWith("get") && args.length == 0)) {
-            if (3 < methodName.length()) {
-                attributes = attributes + " property=" +
-                    quote(Introspector.decapitalize(methodName.substring(3)));
-            }
-        }
-        else if (!methodName.equals("new") && !methodName.equals("newInstance")) {
-            attributes = attributes + " method=" + quote(methodName);
-        }
-        outputXML(tag, attributes, value, args);
-    }
-
-    private void outputXML(String tag, String attributes, Object value, Object... args) {
-        List<Statement> statements = statementList(value);
-        // Use XML's short form when there is no body.
-        if (args.length == 0 && statements.size() == 0) {
-            writeln("<" + tag + attributes + "/>");
-            return;
-        }
-
-        writeln("<" + tag + attributes + ">");
-        indentation++;
-
-        for(int i = 0; i < args.length; i++) {
-            outputValue(args[i], null, true);
-        }
-
-        while (!statements.isEmpty()) {
-            Statement s = statements.remove(0);
-            outputStatement(s, value, false);
-        }
-
-        indentation--;
-        writeln("</" + tag + ">");
-    }
-
-    @SuppressWarnings("rawtypes")
-    static Class primitiveTypeFor(Class wrapper) {
-        if (wrapper == Boolean.class) return Boolean.TYPE;
-        if (wrapper == Byte.class) return Byte.TYPE;
-        if (wrapper == Character.class) return Character.TYPE;
-        if (wrapper == Short.class) return Short.TYPE;
-        if (wrapper == Integer.class) return Integer.TYPE;
-        if (wrapper == Long.class) return Long.TYPE;
-        if (wrapper == Float.class) return Float.TYPE;
-        if (wrapper == Double.class) return Double.TYPE;
-        if (wrapper == Void.class) return Void.TYPE;
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContext.java b/ojluni/src/main/java/java/beans/beancontext/BeanContext.java
deleted file mode 100755
index 37f15f9..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContext.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.
- */
-
-package java.beans.beancontext;
-
-import java.beans.DesignMode;
-import java.beans.Visibility;
-
-import java.io.InputStream;
-import java.io.IOException;
-
-import java.net.URL;
-
-import java.util.Collection;
-import java.util.Locale;
-
-/**
- * <p>
- * The BeanContext acts a logical hierarchical container for JavaBeans.
- * </p>
- *
- * @author Laurence P. G. Cable
- * @since 1.2
- *
- * @see java.beans.Beans
- * @see java.beans.beancontext.BeanContextChild
- * @see java.beans.beancontext.BeanContextMembershipListener
- * @see java.beans.PropertyChangeEvent
- * @see java.beans.DesignMode
- * @see java.beans.Visibility
- * @see java.util.Collection
- */
-
-public interface BeanContext extends BeanContextChild, Collection, DesignMode, Visibility {
-
-    /**
-     * Instantiate the javaBean named as a
-     * child of this <code>BeanContext</code>.
-     * The implementation of the JavaBean is
-     * derived from the value of the beanName parameter,
-     * and is defined by the
-     * <code>java.beans.Beans.instantiate()</code> method.
-     *
-     * @param beanName The name of the JavaBean to instantiate
-     * as a child of this <code>BeanContext</code>
-     * @throws <code>IOException</code>
-     * @throws <code>ClassNotFoundException</code> if the class identified
-     * by the beanName parameter is not found
-     */
-    Object instantiateChild(String beanName) throws IOException, ClassNotFoundException;
-
-    /**
-     * Analagous to <code>java.lang.ClassLoader.getResourceAsStream()</code>,
-     * this method allows a <code>BeanContext</code> implementation
-     * to interpose behavior between the child <code>Component</code>
-     * and underlying <code>ClassLoader</code>.
-     *
-     * @param name the resource name
-     * @param bcc the specified child
-     * @return an <code>InputStream</code> for reading the resource,
-     * or <code>null</code> if the resource could not
-     * be found.
-     * @throws <code>IllegalArgumentException</code> if
-     * the resource is not valid
-     */
-    InputStream getResourceAsStream(String name, BeanContextChild bcc) throws IllegalArgumentException;
-
-    /**
-     * Analagous to <code>java.lang.ClassLoader.getResource()</code>, this
-     * method allows a <code>BeanContext</code> implementation to interpose
-     * behavior between the child <code>Component</code>
-     * and underlying <code>ClassLoader</code>.
-     *
-     * @param name the resource name
-     * @param bcc the specified child
-     * @return a <code>URL</code> for the named
-     * resource for the specified child
-     * @throws <code>IllegalArgumentException</code>
-     * if the resource is not valid
-     */
-    URL getResource(String name, BeanContextChild bcc) throws IllegalArgumentException;
-
-     /**
-      * Adds the specified <code>BeanContextMembershipListener</code>
-      * to receive <code>BeanContextMembershipEvents</code> from
-      * this <code>BeanContext</code> whenever it adds
-      * or removes a child <code>Component</code>(s).
-      *
-      * @param bcml the <code>BeanContextMembershipListener</code> to be added
-      */
-    void addBeanContextMembershipListener(BeanContextMembershipListener bcml);
-
-     /**
-      * Removes the specified <code>BeanContextMembershipListener</code>
-      * so that it no longer receives <code>BeanContextMembershipEvent</code>s
-      * when the child <code>Component</code>(s) are added or removed.
-      *
-      * @param bcml the <code>BeanContextMembershipListener</code>
-      * to be removed
-      */
-    void removeBeanContextMembershipListener(BeanContextMembershipListener bcml);
-
-    /**
-     * This global lock is used by both <code>BeanContext</code>
-     * and <code>BeanContextServices</code> implementors
-     * to serialize changes in a <code>BeanContext</code>
-     * hierarchy and any service requests etc.
-     */
-    public static final Object globalHierarchyLock = new Object();
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextChild.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextChild.java
deleted file mode 100755
index 841e3cc..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextChild.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.
- */
-
-package java.beans.beancontext;
-
-import java.beans.PropertyChangeListener;
-import java.beans.VetoableChangeListener;
-import java.beans.PropertyVetoException;
-
-import java.beans.beancontext.BeanContext;
-
-/**
- * <p>
- * JavaBeans wishing to be nested within, and obtain a reference to their
- * execution environment, or context, as defined by the BeanContext
- * sub-interface shall implement this interface.
- * </p>
- * <p>
- * Conformant BeanContexts shall as a side effect of adding a BeanContextChild
- * object shall pass a reference to itself via the setBeanContext() method of
- * this interface.
- * </p>
- * <p>
- * Note that a BeanContextChild may refuse a change in state by throwing
- * PropertyVetoedException in response.
- * </p>
- * <p>
- * In order for persistence mechanisms to function properly on BeanContextChild
- * instances across a broad variety of scenarios, implementing classes of this
- * interface are required to define as transient, any or all fields, or
- * instance variables, that may contain, or represent, references to the
- * nesting BeanContext instance or other resources obtained
- * from the BeanContext via any unspecified mechanisms.
- * </p>
- *
- * @author      Laurence P. G. Cable
- * @since       1.2
- *
- * @see java.beans.beancontext.BeanContext
- * @see java.beans.PropertyChangeEvent
- * @see java.beans.PropertyChangeListener
- * @see java.beans.PropertyVetoException
- * @see java.beans.VetoableChangeListener
- */
-
-public interface BeanContextChild {
-
-    /**
-     * <p>
-     * Objects that implement this interface,
-     * shall fire a java.beans.PropertyChangeEvent, with parameters:
-     *
-     * propertyName "beanContext", oldValue (the previous nesting
-     * <code>BeanContext</code> instance, or <code>null</code>),
-     * newValue (the current nesting
-     * <code>BeanContext</code> instance, or <code>null</code>).
-     * <p>
-     * A change in the value of the nesting BeanContext property of this
-     * BeanContextChild may be vetoed by throwing the appropriate exception.
-     * </p>
-     * @param bc The <code>BeanContext</code> with which
-     * to associate this <code>BeanContextChild</code>.
-     * @throws <code>PropertyVetoException</code> if the
-     * addition of the specified <code>BeanContext</code> is refused.
-     */
-    void setBeanContext(BeanContext bc) throws PropertyVetoException;
-
-    /**
-     * Gets the <code>BeanContext</code> associated
-     * with this <code>BeanContextChild</code>.
-     * @return the <code>BeanContext</code> associated
-     * with this <code>BeanContextChild</code>.
-     */
-    BeanContext getBeanContext();
-
-    /**
-     * Adds a <code>PropertyChangeListener</code>
-     * to this <code>BeanContextChild</code>
-     * in order to receive a <code>PropertyChangeEvent</code>
-     * whenever the specified property has changed.
-     * @param name the name of the property to listen on
-     * @param pcl the <code>PropertyChangeListener</code> to add
-     */
-    void addPropertyChangeListener(String name, PropertyChangeListener pcl);
-
-    /**
-     * Removes a <code>PropertyChangeListener</code> from this
-     * <code>BeanContextChild</code>  so that it no longer
-     * receives <code>PropertyChangeEvents</code> when the
-     * specified property is changed.
-     *
-     * @param name the name of the property that was listened on
-     * @param pcl the <code>PropertyChangeListener</code> to remove
-     */
-    void removePropertyChangeListener(String name, PropertyChangeListener pcl);
-
-    /**
-     * Adds a <code>VetoableChangeListener</code> to
-     * this <code>BeanContextChild</code>
-     * to receive events whenever the specified property changes.
-     * @param name the name of the property to listen on
-     * @param vcl the <code>VetoableChangeListener</code> to add
-     */
-    void addVetoableChangeListener(String name, VetoableChangeListener vcl);
-
-    /**
-     * Removes a <code>VetoableChangeListener</code> from this
-     * <code>BeanContextChild</code> so that it no longer receives
-     * events when the specified property changes.
-     * @param name the name of the property that was listened on.
-     * @param vcl the <code>VetoableChangeListener</code> to remove.
-     */
-    void removeVetoableChangeListener(String name, VetoableChangeListener vcl);
-
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextChildComponentProxy.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextChildComponentProxy.java
deleted file mode 100755
index 3726f92..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextChildComponentProxy.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1998, 2002, 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.
- */
-
-package java.beans.beancontext;
-
-import java.awt.Component;
-
-/**
- * <p>
- * This interface is implemented by
- * <code>BeanContextChildren</code> that have an AWT <code>Component</code>
- * associated with them.
- * </p>
- *
- * @author Laurence P. G. Cable
- * @since 1.2
- *
- * @see java.beans.beancontext.BeanContext
- * @see java.beans.beancontext.BeanContextSupport
- */
-
-public interface BeanContextChildComponentProxy {
-
-    /**
-     * Gets the <code>java.awt.Component</code> associated with
-     * this <code>BeanContextChild</code>.
-     * @return the AWT <code>Component</code> associated with
-     * this <code>BeanContextChild</code>
-     */
-
-    Component getComponent();
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextChildSupport.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextChildSupport.java
deleted file mode 100755
index 056913b..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextChildSupport.java
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- * Copyright (c) 1998, 2004, 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.
- */
-
-package java.beans.beancontext;
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
-
-import java.beans.VetoableChangeListener;
-import java.beans.VetoableChangeSupport;
-
-import java.beans.PropertyVetoException;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-
-/**
- * <p>
- * This is a general support class to provide support for implementing the
- * BeanContextChild protocol.
- *
- * This class may either be directly subclassed, or encapsulated and delegated
- * to in order to implement this interface for a given component.
- * </p>
- *
- * @author      Laurence P. G. Cable
- * @since       1.2
- *
- * @see java.beans.beancontext.BeanContext
- * @see java.beans.beancontext.BeanContextServices
- * @see java.beans.beancontext.BeanContextChild
- */
-
-public class BeanContextChildSupport implements BeanContextChild, BeanContextServicesListener, Serializable {
-
-    static final long serialVersionUID = 6328947014421475877L;
-
-    /**
-     * construct a BeanContextChildSupport where this class has been
-     * subclassed in order to implement the JavaBean component itself.
-     */
-
-    public BeanContextChildSupport() {
-        super();
-
-        beanContextChildPeer = this;
-
-        pcSupport = new PropertyChangeSupport(beanContextChildPeer);
-        vcSupport = new VetoableChangeSupport(beanContextChildPeer);
-    }
-
-    /**
-     * construct a BeanContextChildSupport where the JavaBean component
-     * itself implements BeanContextChild, and encapsulates this, delegating
-     * that interface to this implementation
-     */
-
-    public BeanContextChildSupport(BeanContextChild bcc) {
-        super();
-
-        beanContextChildPeer = (bcc != null) ? bcc : this;
-
-        pcSupport = new PropertyChangeSupport(beanContextChildPeer);
-        vcSupport = new VetoableChangeSupport(beanContextChildPeer);
-    }
-
-    /**
-     * Sets the <code>BeanContext</code> for
-     * this <code>BeanContextChildSupport</code>.
-     * @param bc the new value to be assigned to the <code>BeanContext</code>
-     * property
-     * @throws <code>PropertyVetoException</code> if the change is rejected
-     */
-    public synchronized void setBeanContext(BeanContext bc) throws PropertyVetoException {
-        if (bc == beanContext) return;
-
-        BeanContext oldValue = beanContext;
-        BeanContext newValue = bc;
-
-        if (!rejectedSetBCOnce) {
-            if (rejectedSetBCOnce = !validatePendingSetBeanContext(bc)) {
-                throw new PropertyVetoException(
-                    "setBeanContext() change rejected:",
-                    new PropertyChangeEvent(beanContextChildPeer, "beanContext", oldValue, newValue)
-                );
-            }
-
-            try {
-                fireVetoableChange("beanContext",
-                                   oldValue,
-                                   newValue
-                );
-            } catch (PropertyVetoException pve) {
-                rejectedSetBCOnce = true;
-
-                throw pve; // re-throw
-            }
-        }
-
-        if (beanContext != null) releaseBeanContextResources();
-
-        beanContext       = newValue;
-        rejectedSetBCOnce = false;
-
-        firePropertyChange("beanContext",
-                           oldValue,
-                           newValue
-        );
-
-        if (beanContext != null) initializeBeanContextResources();
-    }
-
-    /**
-     * Gets the nesting <code>BeanContext</code>
-     * for this <code>BeanContextChildSupport</code>.
-     * @return the nesting <code>BeanContext</code> for
-     * this <code>BeanContextChildSupport</code>.
-     */
-    public synchronized BeanContext getBeanContext() { return beanContext; }
-
-    /**
-     * Add a PropertyChangeListener for a specific property.
-     * The same listener object may be added more than once.  For each
-     * property,  the listener will be invoked the number of times it was added
-     * for that property.
-     * If <code>name</code> or <code>pcl</code> is null, no exception is thrown
-     * and no action is taken.
-     *
-     * @param name The name of the property to listen on
-     * @param pcl The <code>PropertyChangeListener</code> to be added
-     */
-    public void addPropertyChangeListener(String name, PropertyChangeListener pcl) {
-        pcSupport.addPropertyChangeListener(name, pcl);
-    }
-
-    /**
-     * Remove a PropertyChangeListener for a specific property.
-     * If <code>pcl</code> was added more than once to the same event
-     * source for the specified property, it will be notified one less time
-     * after being removed.
-     * If <code>name</code> is null, no exception is thrown
-     * and no action is taken.
-     * If <code>pcl</code> is null, or was never added for the specified
-     * property, no exception is thrown and no action is taken.
-     *
-     * @param name The name of the property that was listened on
-     * @param pcl The PropertyChangeListener to be removed
-     */
-    public void removePropertyChangeListener(String name, PropertyChangeListener pcl) {
-        pcSupport.removePropertyChangeListener(name, pcl);
-    }
-
-    /**
-     * Add a VetoableChangeListener for a specific property.
-     * The same listener object may be added more than once.  For each
-     * property,  the listener will be invoked the number of times it was added
-     * for that property.
-     * If <code>name</code> or <code>vcl</code> is null, no exception is thrown
-     * and no action is taken.
-     *
-     * @param name The name of the property to listen on
-     * @param vcl The <code>VetoableChangeListener</code> to be added
-     */
-    public void addVetoableChangeListener(String name, VetoableChangeListener vcl) {
-        vcSupport.addVetoableChangeListener(name, vcl);
-    }
-
-    /**
-     * Removes a <code>VetoableChangeListener</code>.
-     * If <code>pcl</code> was added more than once to the same event
-     * source for the specified property, it will be notified one less time
-     * after being removed.
-     * If <code>name</code> is null, no exception is thrown
-     * and no action is taken.
-     * If <code>vcl</code> is null, or was never added for the specified
-     * property, no exception is thrown and no action is taken.
-     *
-     * @param name The name of the property that was listened on
-     * @param vcl The <code>VetoableChangeListener</code> to be removed
-     */
-    public void removeVetoableChangeListener(String name, VetoableChangeListener vcl) {
-        vcSupport.removeVetoableChangeListener(name, vcl);
-    }
-
-    /**
-     * A service provided by the nesting BeanContext has been revoked.
-     *
-     * Subclasses may override this method in order to implement their own
-     * behaviors.
-     * @param bcsre The <code>BeanContextServiceRevokedEvent</code> fired as a
-     * result of a service being revoked
-     */
-    public void serviceRevoked(BeanContextServiceRevokedEvent bcsre) { }
-
-    /**
-     * A new service is available from the nesting BeanContext.
-     *
-     * Subclasses may override this method in order to implement their own
-     * behaviors
-     * @param bcsae The BeanContextServiceAvailableEvent fired as a
-     * result of a service becoming available
-     *
-     */
-    public void serviceAvailable(BeanContextServiceAvailableEvent bcsae) { }
-
-    /**
-     * Gets the <tt>BeanContextChild</tt> associated with this
-     * <tt>BeanContextChildSupport</tt>.
-     *
-     * @return the <tt>BeanContextChild</tt> peer of this class
-     */
-    public BeanContextChild getBeanContextChildPeer() { return beanContextChildPeer; }
-
-    /**
-     * Reports whether or not this class is a delegate of another.
-     *
-     * @return true if this class is a delegate of another
-     */
-    public boolean isDelegated() { return !this.equals(beanContextChildPeer); }
-
-    /**
-     * Report a bound property update to any registered listeners. No event is
-     * fired if old and new are equal and non-null.
-     * @param name The programmatic name of the property that was changed
-     * @param oldValue  The old value of the property
-     * @param newValue  The new value of the property
-     */
-    public void firePropertyChange(String name, Object oldValue, Object newValue) {
-        pcSupport.firePropertyChange(name, oldValue, newValue);
-    }
-
-    /**
-     * Report a vetoable property update to any registered listeners.
-     * If anyone vetos the change, then fire a new event
-     * reverting everyone to the old value and then rethrow
-     * the PropertyVetoException. <P>
-     *
-     * No event is fired if old and new are equal and non-null.
-     * <P>
-     * @param name The programmatic name of the property that is about to
-     * change
-     *
-     * @param oldValue The old value of the property
-     * @param newValue - The new value of the property
-     *
-     * @throws PropertyVetoException if the recipient wishes the property
-     * change to be rolled back.
-     */
-    public void fireVetoableChange(String name, Object oldValue, Object newValue) throws PropertyVetoException {
-        vcSupport.fireVetoableChange(name, oldValue, newValue);
-    }
-
-    /**
-     * Called from setBeanContext to validate (or otherwise) the
-     * pending change in the nesting BeanContext property value.
-     * Returning false will cause setBeanContext to throw
-     * PropertyVetoException.
-     * @param newValue the new value that has been requested for
-     *  the BeanContext property
-     * @return <code>true</code> if the change operation is to be vetoed
-     */
-    public boolean validatePendingSetBeanContext(BeanContext newValue) {
-        return true;
-    }
-
-    /**
-     * This method may be overridden by subclasses to provide their own
-     * release behaviors. When invoked any resources held by this instance
-     * obtained from its current BeanContext property should be released
-     * since the object is no longer nested within that BeanContext.
-     */
-
-    protected  void releaseBeanContextResources() {
-        // do nothing
-    }
-
-    /**
-     * This method may be overridden by subclasses to provide their own
-     * initialization behaviors. When invoked any resources requried by the
-     * BeanContextChild should be obtained from the current BeanContext.
-     */
-
-    protected void initializeBeanContextResources() {
-        // do nothing
-    }
-
-    /**
-     * Write the persistence state of the object.
-     */
-
-    private void writeObject(ObjectOutputStream oos) throws IOException {
-
-        /*
-         * dont serialize if we are delegated and the delegator isnt also
-         * serializable.
-         */
-
-        if (!equals(beanContextChildPeer) && !(beanContextChildPeer instanceof Serializable))
-            throw new IOException("BeanContextChildSupport beanContextChildPeer not Serializable");
-
-        else
-            oos.defaultWriteObject();
-
-    }
-
-
-    /**
-     * Restore a persistent object, must wait for subsequent setBeanContext()
-     * to fully restore any resources obtained from the new nesting
-     * BeanContext
-     */
-
-    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-        ois.defaultReadObject();
-    }
-
-    /*
-     * fields
-     */
-
-    /**
-     * The <code>BeanContext</code> in which
-     * this <code>BeanContextChild</code> is nested.
-     */
-    public    BeanContextChild      beanContextChildPeer;
-
-   /**
-    * The <tt>PropertyChangeSupport</tt> associated with this
-    * <tt>BeanContextChildSupport</tt>.
-    */
-    protected PropertyChangeSupport pcSupport;
-
-   /**
-    * The <tt>VetoableChangeSupport</tt> associated with this
-    * <tt>BeanContextChildSupport</tt>.
-    */
-    protected VetoableChangeSupport vcSupport;
-
-    protected transient BeanContext           beanContext;
-
-   /**
-    * A flag indicating that there has been
-    * at least one <code>PropertyChangeVetoException</code>
-    * thrown for the attempted setBeanContext operation.
-    */
-    protected transient boolean               rejectedSetBCOnce;
-
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextContainerProxy.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextContainerProxy.java
deleted file mode 100755
index 4bde902..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextContainerProxy.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1998, 2002, 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.
- */
-
-package java.beans.beancontext;
-
-import java.awt.Container;
-
-/**
- * <p>
- * This interface is implemented by BeanContexts' that have an AWT Container
- * associated with them.
- * </p>
- *
- * @author Laurence P. G. Cable
- * @since 1.2
- *
- * @see java.beans.beancontext.BeanContext
- * @see java.beans.beancontext.BeanContextSupport
- */
-
-public interface BeanContextContainerProxy {
-
-    /**
-     * Gets the <code>java.awt.Container</code> associated
-     * with this <code>BeanContext</code>.
-     * @return the <code>java.awt.Container</code> associated
-     * with this <code>BeanContext</code>.
-     */
-    Container getContainer();
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextEvent.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextEvent.java
deleted file mode 100755
index a71645b..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextEvent.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 1997, 2009, 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.
- */
-
-package java.beans.beancontext;
-
-import java.util.EventObject;
-
-import java.beans.beancontext.BeanContext;
-
-/**
- * <p>
- * <code>BeanContextEvent</code> is the abstract root event class
- * for all events emitted
- * from, and pertaining to the semantics of, a <code>BeanContext</code>.
- * This class introduces a mechanism to allow the propagation of
- * <code>BeanContextEvent</code> subclasses through a hierarchy of
- * <code>BeanContext</code>s. The <code>setPropagatedFrom()</code>
- * and <code>getPropagatedFrom()</code> methods allow a
- * <code>BeanContext</code> to identify itself as the source
- * of a propagated event.
- * </p>
- *
- * @author      Laurence P. G. Cable
- * @since       1.2
- * @see         java.beans.beancontext.BeanContext
- */
-
-public abstract class BeanContextEvent extends EventObject {
-    private static final long serialVersionUID = 7267998073569045052L;
-
-    /**
-     * Contruct a BeanContextEvent
-     *
-     * @param bc        The BeanContext source
-     */
-    protected BeanContextEvent(BeanContext bc) {
-        super(bc);
-    }
-
-    /**
-     * Gets the <code>BeanContext</code> associated with this event.
-     * @return the <code>BeanContext</code> associated with this event.
-     */
-    public BeanContext getBeanContext() { return (BeanContext)getSource(); }
-
-    /**
-     * Sets the <code>BeanContext</code> from which this event was propagated.
-     * @param bc the <code>BeanContext</code> from which this event
-     * was propagated
-     */
-    public synchronized void setPropagatedFrom(BeanContext bc) {
-        propagatedFrom = bc;
-    }
-
-    /**
-     * Gets the <code>BeanContext</code> from which this event was propagated.
-     * @return the <code>BeanContext</code> from which this
-     * event was propagated
-     */
-    public synchronized BeanContext getPropagatedFrom() {
-        return propagatedFrom;
-    }
-
-    /**
-     * Reports whether or not this event is
-     * propagated from some other <code>BeanContext</code>.
-     * @return <code>true</code> if propagated, <code>false</code>
-     * if not
-     */
-    public synchronized boolean isPropagated() {
-        return propagatedFrom != null;
-    }
-
-    /*
-     * fields
-     */
-
-    /**
-     * The <code>BeanContext</code> from which this event was propagated
-     */
-    protected BeanContext propagatedFrom;
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextMembershipEvent.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextMembershipEvent.java
deleted file mode 100755
index 0ed013a..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextMembershipEvent.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (c) 1997, 2009, 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.
- */
-
-package java.beans.beancontext;
-
-import java.util.EventObject;
-
-import java.beans.beancontext.BeanContext;
-import java.beans.beancontext.BeanContextEvent;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-
-/**
- * A <code>BeanContextMembershipEvent</code> encapsulates
- * the list of children added to, or removed from,
- * the membership of a particular <code>BeanContext</code>.
- * An instance of this event is fired whenever a successful
- * add(), remove(), retainAll(), removeAll(), or clear() is
- * invoked on a given <code>BeanContext</code> instance.
- * Objects interested in receiving events of this type must
- * implement the <code>BeanContextMembershipListener</code>
- * interface, and must register their intent via the
- * <code>BeanContext</code>'s
- * <code>addBeanContextMembershipListener(BeanContextMembershipListener bcml)
- * </code> method.
- *
- * @author      Laurence P. G. Cable
- * @since       1.2
- * @see         java.beans.beancontext.BeanContext
- * @see         java.beans.beancontext.BeanContextEvent
- * @see         java.beans.beancontext.BeanContextMembershipListener
- */
-public class BeanContextMembershipEvent extends BeanContextEvent {
-    private static final long serialVersionUID = 3499346510334590959L;
-
-    /**
-     * Contruct a BeanContextMembershipEvent
-     *
-     * @param bc        The BeanContext source
-     * @param changes   The Children affected
-     * @throws NullPointerException if <CODE>changes</CODE> is <CODE>null</CODE>
-     */
-
-    public BeanContextMembershipEvent(BeanContext bc, Collection changes) {
-        super(bc);
-
-        if (changes == null) throw new NullPointerException(
-            "BeanContextMembershipEvent constructor:  changes is null.");
-
-        children = changes;
-    }
-
-    /**
-     * Contruct a BeanContextMembershipEvent
-     *
-     * @param bc        The BeanContext source
-     * @param changes   The Children effected
-     * @exception       NullPointerException if changes associated with this
-     *                  event are null.
-     */
-
-    public BeanContextMembershipEvent(BeanContext bc, Object[] changes) {
-        super(bc);
-
-        if (changes == null) throw new NullPointerException(
-            "BeanContextMembershipEvent:  changes is null.");
-
-        children = Arrays.asList(changes);
-    }
-
-    /**
-     * Gets the number of children affected by the notification.
-     * @return the number of children affected by the notification
-     */
-    public int size() { return children.size(); }
-
-    /**
-     * Is the child specified affected by the event?
-     * @return <code>true</code> if affected, <code>false</code>
-     * if not
-     */
-    public boolean contains(Object child) {
-        return children.contains(child);
-    }
-
-    /**
-     * Gets the array of children affected by this event.
-     * @return the array of children affected
-     */
-    public Object[] toArray() { return children.toArray(); }
-
-    /**
-     * Gets the array of children affected by this event.
-     * @return the array of children effected
-     */
-    public Iterator iterator() { return children.iterator(); }
-
-    /*
-     * fields
-     */
-
-   /**
-    * The list of children affected by this
-    * event notification.
-    */
-    protected Collection children;
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextMembershipListener.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextMembershipListener.java
deleted file mode 100755
index 874d191..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextMembershipListener.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package java.beans.beancontext;
-
-import java.beans.beancontext.BeanContextMembershipEvent;
-
-import java.util.EventListener;
-
-/**
- * <p>
- * Compliant BeanContexts fire events on this interface when the state of
- * the membership of the BeanContext changes.
- * </p>
- *
- * @author      Laurence P. G. Cable
- * @since       1.2
- * @see         java.beans.beancontext.BeanContext
- */
-
-public interface BeanContextMembershipListener extends EventListener {
-
-    /**
-     * Called when a child or list of children is added to a
-     * <code>BeanContext</code> that this listener is registered with.
-     * @param bcme The <code>BeanContextMembershipEvent</code>
-     * describing the change that occurred.
-     */
-    void childrenAdded(BeanContextMembershipEvent bcme);
-
-    /**
-     * Called when a child or list of children is removed
-     * from a <code>BeanContext</code> that this listener
-     * is registered with.
-     * @param bcme The <code>BeanContextMembershipEvent</code>
-     * describing the change that occurred.
-     */
-    void childrenRemoved(BeanContextMembershipEvent bcme);
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextProxy.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextProxy.java
deleted file mode 100755
index 6e8bdfc..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextProxy.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 1998, 2002, 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.
- */
-
-package java.beans.beancontext;
-
-/**
- * <p>
- * This interface is implemented by a JavaBean that does
- * not directly have a BeanContext(Child) associated with
- * it (via implementing that interface or a subinterface thereof),
- * but has a public BeanContext(Child) delegated from it.
- * For example, a subclass of java.awt.Container may have a BeanContext
- * associated with it that all Component children of that Container shall
- * be contained within.
- * </p>
- * <p>
- * An Object may not implement this interface and the
- * BeanContextChild interface
- * (or any subinterfaces thereof) they are mutually exclusive.
- * </p>
- * <p>
- * Callers of this interface shall examine the return type in order to
- * obtain a particular subinterface of BeanContextChild as follows:
- * <code>
- * BeanContextChild bcc = o.getBeanContextProxy();
- *
- * if (bcc instanceof BeanContext) {
- *      // ...
- * }
- * </code>
- * or
- * <code>
- * BeanContextChild bcc = o.getBeanContextProxy();
- * BeanContext      bc  = null;
- *
- * try {
- *     bc = (BeanContext)bcc;
- * } catch (ClassCastException cce) {
- *     // cast failed, bcc is not an instanceof BeanContext
- * }
- * </code>
- * </p>
- * <p>
- * The return value is a constant for the lifetime of the implementing
- * instance
- * </p>
- * @author Laurence P. G. Cable
- * @since 1.2
- *
- * @see java.beans.beancontext.BeanContextChild
- * @see java.beans.beancontext.BeanContextChildSupport
- */
-
-public interface BeanContextProxy {
-
-    /**
-     * Gets the <code>BeanContextChild</code> (or subinterface)
-     * associated with this object.
-     * @return the <code>BeanContextChild</code> (or subinterface)
-     * associated with this object
-     */
-    BeanContextChild getBeanContextProxy();
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextServiceAvailableEvent.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextServiceAvailableEvent.java
deleted file mode 100755
index c1034ef..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextServiceAvailableEvent.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 1998, 2009, 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.
- */
-
-package java.beans.beancontext;
-
-import java.beans.beancontext.BeanContextChild;
-import java.beans.beancontext.BeanContextEvent;
-
-import java.beans.beancontext.BeanContextServices;
-
-import java.util.Iterator;
-
-/**
- * <p>
- * This event type is used by the BeanContextServicesListener in order to
- * identify the service being registered.
- * </p>
- */
-
-public class BeanContextServiceAvailableEvent extends BeanContextEvent {
-    private static final long serialVersionUID = -5333985775656400778L;
-
-    /**
-     * Construct a <code>BeanContextAvailableServiceEvent</code>.
-     * @param bcs The context in which the service has become available
-     * @param sc A <code>Class</code> reference to the newly available service
-     */
-    public BeanContextServiceAvailableEvent(BeanContextServices bcs, Class sc) {
-        super((BeanContext)bcs);
-
-        serviceClass = sc;
-    }
-
-    /**
-     * Gets the source as a reference of type <code>BeanContextServices</code>.
-     * @return The context in which the service has become available
-     */
-    public BeanContextServices getSourceAsBeanContextServices() {
-        return (BeanContextServices)getBeanContext();
-    }
-
-    /**
-     * Gets the service class that is the subject of this notification.
-     * @return A <code>Class</code> reference to the newly available service
-     */
-    public Class getServiceClass() { return serviceClass; }
-
-    /**
-     * Gets the list of service dependent selectors.
-     * @return the current selectors available from the service
-     */
-    public Iterator getCurrentServiceSelectors() {
-        return ((BeanContextServices)getSource()).getCurrentServiceSelectors(serviceClass);
-    }
-
-    /*
-     * fields
-     */
-
-    /**
-     * A <code>Class</code> reference to the newly available service
-     */
-    protected Class                      serviceClass;
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextServiceProvider.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextServiceProvider.java
deleted file mode 100755
index 5e724ca..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextServiceProvider.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 1998, 2004, 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.
- */
-
-package java.beans.beancontext;
-
-import java.util.Iterator;
-
-/**
- * <p>
- * One of the primary functions of a BeanContext is to act a as rendezvous
- * between JavaBeans, and BeanContextServiceProviders.
- * </p>
- * <p>
- * A JavaBean nested within a BeanContext, may ask that BeanContext to
- * provide an instance of a "service", based upon a reference to a Java
- * Class object that represents that service.
- * </p>
- * <p>
- * If such a service has been registered with the context, or one of its
- * nesting context's, in the case where a context delegate to its context
- * to satisfy a service request, then the BeanContextServiceProvider associated with
- * the service is asked to provide an instance of that service.
- * </p>
- * <p>
- * The ServcieProvider may always return the same instance, or it may
- * construct a new instance for each request.
- * </p>
- */
-
-public interface BeanContextServiceProvider {
-
-   /**
-    * Invoked by <code>BeanContextServices</code>, this method
-    * requests an instance of a
-    * service from this <code>BeanContextServiceProvider</code>.
-    *
-    * @param bcs The <code>BeanContextServices</code> associated with this
-    * particular request. This parameter enables the
-    * <code>BeanContextServiceProvider</code> to distinguish service
-    * requests from multiple sources.
-    *
-    * @param requestor          The object requesting the service
-    *
-    * @param serviceClass       The service requested
-    *
-    * @param serviceSelector the service dependent parameter
-    * for a particular service, or <code>null</code> if not applicable.
-    *
-    * @return a reference to the requested service
-    */
-    Object getService(BeanContextServices bcs, Object requestor, Class serviceClass, Object serviceSelector);
-
-    /**
-     * Invoked by <code>BeanContextServices</code>,
-     * this method releases a nested <code>BeanContextChild</code>'s
-     * (or any arbitrary object associated with a
-     * <code>BeanContextChild</code>) reference to the specified service.
-     *
-     * @param bcs the <code>BeanContextServices</code> associated with this
-     * particular release request
-     *
-     * @param requestor the object requesting the service to be released
-     *
-     * @param service the service that is to be released
-     */
-    public void releaseService(BeanContextServices bcs, Object requestor, Object service);
-
-    /**
-     * Invoked by <code>BeanContextServices</code>, this method
-     * gets the current service selectors for the specified service.
-     * A service selector is a service specific parameter,
-     * typical examples of which could include: a
-     * parameter to a constructor for the service implementation class,
-     * a value for a particular service's property, or a key into a
-     * map of existing implementations.
-     *
-     * @param bcs           the <code>BeanContextServices</code> for this request
-     * @param serviceClass  the specified service
-     * @return   the current service selectors for the specified serviceClass
-     */
-    Iterator getCurrentServiceSelectors(BeanContextServices bcs, Class serviceClass);
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextServiceProviderBeanInfo.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextServiceProviderBeanInfo.java
deleted file mode 100755
index 356c731..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextServiceProviderBeanInfo.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package java.beans.beancontext;
-
-import java.beans.BeanInfo;
-
-/**
- * A BeanContextServiceProvider implementor who wishes to provide explicit
- * information about the services their bean may provide shall implement a
- * BeanInfo class that implements this BeanInfo subinterface and provides
- * explicit information about the methods, properties, events, etc, of their
- * services.
- */
-
-public interface BeanContextServiceProviderBeanInfo extends BeanInfo {
-
-    /**
-     * Gets a <code>BeanInfo</code> array, one for each
-     * service class or interface statically available
-     * from this ServiceProvider.
-     * @return the <code>BeanInfo</code> array
-     */
-    BeanInfo[] getServicesBeanInfo();
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextServiceRevokedEvent.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextServiceRevokedEvent.java
deleted file mode 100755
index 30d9986..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextServiceRevokedEvent.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 1998, 2009, 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.
- */
-
-package java.beans.beancontext;
-
-import java.beans.beancontext.BeanContextEvent;
-
-import java.beans.beancontext.BeanContextServices;
-
-/**
- * <p>
- * This event type is used by the
- * <code>BeanContextServiceRevokedListener</code> in order to
- * identify the service being revoked.
- * </p>
- */
-public class BeanContextServiceRevokedEvent extends BeanContextEvent {
-    private static final long serialVersionUID = -1295543154724961754L;
-
-    /**
-     * Construct a <code>BeanContextServiceEvent</code>.
-     * @param bcs the <code>BeanContextServices</code>
-     * from which this service is being revoked
-     * @param sc the service that is being revoked
-     * @param invalidate <code>true</code> for immediate revocation
-     */
-    public BeanContextServiceRevokedEvent(BeanContextServices bcs, Class sc, boolean invalidate) {
-        super((BeanContext)bcs);
-
-        serviceClass    = sc;
-        invalidateRefs  = invalidate;
-    }
-
-    /**
-     * Gets the source as a reference of type <code>BeanContextServices</code>
-     * @return the <code>BeanContextServices</code> from which
-     * this service is being revoked
-     */
-    public BeanContextServices getSourceAsBeanContextServices() {
-        return (BeanContextServices)getBeanContext();
-    }
-
-    /**
-     * Gets the service class that is the subject of this notification
-     * @return A <code>Class</code> reference to the
-     * service that is being revoked
-     */
-    public Class getServiceClass() { return serviceClass; }
-
-    /**
-     * Checks this event to determine whether or not
-     * the service being revoked is of a particular class.
-     * @param service the service of interest (should be non-null)
-     * @return <code>true</code> if the service being revoked is of the
-     * same class as the specified service
-     */
-    public boolean isServiceClass(Class service) {
-        return serviceClass.equals(service);
-    }
-
-    /**
-     * Reports if the current service is being forcibly revoked,
-     * in which case the references are now invalidated and unusable.
-     * @return <code>true</code> if current service is being forcibly revoked
-     */
-    public boolean isCurrentServiceInvalidNow() { return invalidateRefs; }
-
-    /**
-     * fields
-     */
-
-    /**
-     * A <code>Class</code> reference to the service that is being revoked.
-     */
-    protected Class                      serviceClass;
-    private   boolean                    invalidateRefs;
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextServiceRevokedListener.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextServiceRevokedListener.java
deleted file mode 100755
index ecf4017..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextServiceRevokedListener.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-package java.beans.beancontext;
-
-import java.beans.beancontext.BeanContextServiceRevokedEvent;
-
-import java.util.EventListener;
-
-/**
- *  The listener interface for receiving
- * <code>BeanContextServiceRevokedEvent</code> objects. A class that is
- * interested in processing a <code>BeanContextServiceRevokedEvent</code>
- * implements this interface.
- */
-public interface BeanContextServiceRevokedListener extends EventListener {
-
-    /**
-     * The service named has been revoked. getService requests for
-     * this service will no longer be satisifed.
-     * @param bcsre the <code>BeanContextServiceRevokedEvent</code> received
-     * by this listener.
-     */
-    void serviceRevoked(BeanContextServiceRevokedEvent bcsre);
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextServices.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextServices.java
deleted file mode 100755
index 168056c..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextServices.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 1998, 2004, 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.
- */
-
-package java.beans.beancontext;
-
-import java.util.Iterator;
-
-import java.util.TooManyListenersException;
-
-import java.beans.beancontext.BeanContext;
-
-import java.beans.beancontext.BeanContextServiceProvider;
-
-import java.beans.beancontext.BeanContextServicesListener;
-
-
-/**
- * <p>
- * The BeanContextServices interface provides a mechanism for a BeanContext
- * to expose generic "services" to the BeanContextChild objects within.
- * </p>
- */
-public interface BeanContextServices extends BeanContext, BeanContextServicesListener {
-
-    /**
-     * Adds a service to this BeanContext.
-     * <code>BeanContextServiceProvider</code>s call this method
-     * to register a particular service with this context.
-     * If the service has not previously been added, the
-     * <code>BeanContextServices</code> associates
-     * the service with the <code>BeanContextServiceProvider</code> and
-     * fires a <code>BeanContextServiceAvailableEvent</code> to all
-     * currently registered <code>BeanContextServicesListeners</code>.
-     * The method then returns <code>true</code>, indicating that
-     * the addition of the service was successful.
-     * If the given service has already been added, this method
-     * simply returns <code>false</code>.
-     * @param serviceClass     the service to add
-     * @param serviceProvider  the <code>BeanContextServiceProvider</code>
-     * associated with the service
-     */
-    boolean addService(Class serviceClass, BeanContextServiceProvider serviceProvider);
-
-    /**
-     * BeanContextServiceProviders wishing to remove
-     * a currently registered service from this context
-     * may do so via invocation of this method. Upon revocation of
-     * the service, the <code>BeanContextServices</code> fires a
-     * <code>BeanContextServiceRevokedEvent</code> to its
-     * list of currently registered
-     * <code>BeanContextServiceRevokedListeners</code> and
-     * <code>BeanContextServicesListeners</code>.
-     * @param serviceClass the service to revoke from this BeanContextServices
-     * @param serviceProvider the BeanContextServiceProvider associated with
-     * this particular service that is being revoked
-     * @param revokeCurrentServicesNow a value of <code>true</code>
-     * indicates an exceptional circumstance where the
-     * <code>BeanContextServiceProvider</code> or
-     * <code>BeanContextServices</code> wishes to immediately
-     * terminate service to all currently outstanding references
-     * to the specified service.
-     */
-    void revokeService(Class serviceClass, BeanContextServiceProvider serviceProvider, boolean revokeCurrentServicesNow);
-
-    /**
-     * Reports whether or not a given service is
-     * currently available from this context.
-     * @param serviceClass the service in question
-     * @return true if the service is available
-     */
-    boolean hasService(Class serviceClass);
-
-    /**
-     * A <code>BeanContextChild</code>, or any arbitrary object
-     * associated with a <code>BeanContextChild</code>, may obtain
-     * a reference to a currently registered service from its
-     * nesting <code>BeanContextServices</code>
-     * via invocation of this method. When invoked, this method
-     * gets the service by calling the getService() method on the
-     * underlying <code>BeanContextServiceProvider</code>.
-     * @param child the <code>BeanContextChild</code>
-     * associated with this request
-     * @param requestor the object requesting the service
-     * @param serviceClass class of the requested service
-     * @param serviceSelector the service dependent parameter
-     * @param bcsrl the
-     * <code>BeanContextServiceRevokedListener</code> to notify
-     * if the service should later become revoked
-     * @throws TooManyListenersException
-     * @return a reference to this context's named
-     * Service as requested or <code>null</code>
-     */
-    Object getService(BeanContextChild child, Object requestor, Class serviceClass, Object serviceSelector, BeanContextServiceRevokedListener bcsrl) throws TooManyListenersException;
-
-    /**
-     * Releases a <code>BeanContextChild</code>'s
-     * (or any arbitrary object associated with a BeanContextChild)
-     * reference to the specified service by calling releaseService()
-     * on the underlying <code>BeanContextServiceProvider</code>.
-     * @param child the <code>BeanContextChild</code>
-     * @param requestor the requestor
-     * @param service the service
-     */
-    void releaseService(BeanContextChild child, Object requestor, Object service);
-
-    /**
-     * Gets the currently available services for this context.
-     * @return an <code>Iterator</code> consisting of the
-     * currently available services
-     */
-    Iterator getCurrentServiceClasses();
-
-    /**
-     * Gets the list of service dependent service parameters
-     * (Service Selectors) for the specified service, by
-     * calling getCurrentServiceSelectors() on the
-     * underlying BeanContextServiceProvider.
-     * @param serviceClass the specified service
-     * @return the currently available service selectors
-     * for the named serviceClass
-     */
-    Iterator getCurrentServiceSelectors(Class serviceClass);
-
-    /**
-     * Adds a <code>BeanContextServicesListener</code> to this BeanContext
-     * @param bcsl the <code>BeanContextServicesListener</code> to add
-     */
-    void addBeanContextServicesListener(BeanContextServicesListener bcsl);
-
-    /**
-     * Removes a <code>BeanContextServicesListener</code>
-     * from this <code>BeanContext</code>
-     * @param bcsl the <code>BeanContextServicesListener</code>
-     * to remove from this context
-     */
-    void removeBeanContextServicesListener(BeanContextServicesListener bcsl);
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextServicesListener.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextServicesListener.java
deleted file mode 100755
index d7b33b1..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextServicesListener.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package java.beans.beancontext;
-
-import java.beans.beancontext.BeanContextServiceAvailableEvent;
-import java.beans.beancontext.BeanContextServiceRevokedEvent;
-import java.beans.beancontext.BeanContextServiceRevokedListener;
-
-/**
- * The listener interface for receiving
- * <code>BeanContextServiceAvailableEvent</code> objects.
- * A class that is interested in processing a
- * <code>BeanContextServiceAvailableEvent</code> implements this interface.
- */
-public interface BeanContextServicesListener extends BeanContextServiceRevokedListener {
-
-    /**
-     * The service named has been registered. getService requests for
-     * this service may now be made.
-     * @param bcsae the <code>BeanContextServiceAvailableEvent</code>
-     */
-    void serviceAvailable(BeanContextServiceAvailableEvent bcsae);
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextServicesSupport.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextServicesSupport.java
deleted file mode 100755
index 94d104b..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextServicesSupport.java
+++ /dev/null
@@ -1,1238 +0,0 @@
-/*
- * Copyright (c) 1998, 2009, 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.
- */
-
-package java.beans.beancontext;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-
-import java.util.TooManyListenersException;
-
-import java.util.Locale;
-
-/**
- * <p>
- * This helper class provides a utility implementation of the
- * java.beans.beancontext.BeanContextServices interface.
- * </p>
- * <p>
- * Since this class directly implements the BeanContextServices interface,
- * the class can, and is intended to be used either by subclassing this
- * implementation, or via delegation of an instance of this class
- * from another through the BeanContextProxy interface.
- * </p>
- *
- * @author Laurence P. G. Cable
- * @since 1.2
- */
-
-public class      BeanContextServicesSupport extends BeanContextSupport
-       implements BeanContextServices {
-    private static final long serialVersionUID = -8494482757288719206L;
-
-    /**
-     * <p>
-     * Construct a BeanContextServicesSupport instance
-     * </p>
-     *
-     * @param peer      The peer BeanContext we are supplying an implementation for, if null the this object is its own peer
-     * @param lcle      The current Locale for this BeanContext.
-     * @param dTime     The initial state, true if in design mode, false if runtime.
-     * @param visible   The initial visibility.
-     *
-     */
-
-    public BeanContextServicesSupport(BeanContextServices peer, Locale lcle, boolean dTime, boolean visible) {
-        super(peer, lcle, dTime, visible);
-    }
-
-    /**
-     * Create an instance using the specified Locale and design mode.
-     *
-     * @param peer      The peer BeanContext we are supplying an implementation for, if null the this object is its own peer
-     * @param lcle      The current Locale for this BeanContext.
-     * @param dtime     The initial state, true if in design mode, false if runtime.
-     */
-
-    public BeanContextServicesSupport(BeanContextServices peer, Locale lcle, boolean dtime) {
-        this (peer, lcle, dtime, true);
-    }
-
-    /**
-     * Create an instance using the specified locale
-     *
-     * @param peer      The peer BeanContext we are supplying an implementation for, if null the this object is its own peer
-     * @param lcle      The current Locale for this BeanContext.
-     */
-
-    public BeanContextServicesSupport(BeanContextServices peer, Locale lcle) {
-        this (peer, lcle, false, true);
-    }
-
-    /**
-     * Create an instance with a peer
-     *
-     * @param peer      The peer BeanContext we are supplying an implementation for, if null the this object is its own peer
-     */
-
-    public BeanContextServicesSupport(BeanContextServices peer) {
-        this (peer, null, false, true);
-    }
-
-    /**
-     * Create an instance that is not a delegate of another object
-     */
-
-    public BeanContextServicesSupport() {
-        this (null, null, false, true);
-    }
-
-    /**
-     * called by BeanContextSupport superclass during construction and
-     * deserialization to initialize subclass transient state.
-     *
-     * subclasses may envelope this method, but should not override it or
-     * call it directly.
-     */
-
-    public void initialize() {
-        super.initialize();
-
-        services     = new HashMap(serializable + 1);
-        bcsListeners = new ArrayList(1);
-    }
-
-    /**
-     * Gets the <tt>BeanContextServices</tt> associated with this
-     * <tt>BeanContextServicesSupport</tt>.
-     *
-     * @return the instance of <tt>BeanContext</tt>
-     * this object is providing the implementation for.
-     */
-    public BeanContextServices getBeanContextServicesPeer() {
-        return (BeanContextServices)getBeanContextChildPeer();
-    }
-
-    /************************************************************************/
-
-    /*
-     * protected nested class containing per child information, an instance
-     * of which is associated with each child in the "children" hashtable.
-     * subclasses can extend this class to include their own per-child state.
-     *
-     * Note that this 'value' is serialized with the corresponding child 'key'
-     * when the BeanContextSupport is serialized.
-     */
-
-    protected class BCSSChild extends BeanContextSupport.BCSChild  {
-
-        private static final long serialVersionUID = -3263851306889194873L;
-
-        /*
-         * private nested class to map serviceClass to Provider and requestors
-         * listeners.
-         */
-
-        class BCSSCServiceClassRef {
-
-            // create an instance of a service ref
-
-            BCSSCServiceClassRef(Class sc, BeanContextServiceProvider bcsp, boolean delegated) {
-                super();
-
-                serviceClass     = sc;
-
-                if (delegated)
-                    delegateProvider = bcsp;
-                else
-                    serviceProvider  = bcsp;
-            }
-
-            // add a requestor and assoc listener
-
-            void addRequestor(Object requestor, BeanContextServiceRevokedListener bcsrl) throws TooManyListenersException {
-                BeanContextServiceRevokedListener cbcsrl = (BeanContextServiceRevokedListener)requestors.get(requestor);
-
-                if (cbcsrl != null && !cbcsrl.equals(bcsrl))
-                    throw new TooManyListenersException();
-
-                requestors.put(requestor, bcsrl);
-            }
-
-            // remove a requestor
-
-            void removeRequestor(Object requestor) {
-                requestors.remove(requestor);
-            }
-
-            // check a requestors listener
-
-            void verifyRequestor(Object requestor, BeanContextServiceRevokedListener bcsrl) throws TooManyListenersException {
-                BeanContextServiceRevokedListener cbcsrl = (BeanContextServiceRevokedListener)requestors.get(requestor);
-
-                if (cbcsrl != null && !cbcsrl.equals(bcsrl))
-                    throw new TooManyListenersException();
-            }
-
-            void verifyAndMaybeSetProvider(BeanContextServiceProvider bcsp, boolean isDelegated) {
-                BeanContextServiceProvider current;
-
-                if (isDelegated) { // the provider is delegated
-                    current = delegateProvider;
-
-                    if (current == null || bcsp == null) {
-                        delegateProvider = bcsp;
-                        return;
-                    }
-                } else { // the provider is registered with this BCS
-                    current = serviceProvider;
-
-                    if (current == null || bcsp == null) {
-                        serviceProvider = bcsp;
-                        return;
-                    }
-                }
-
-                if (!current.equals(bcsp))
-                    throw new UnsupportedOperationException("existing service reference obtained from different BeanContextServiceProvider not supported");
-
-            }
-
-            Iterator cloneOfEntries() {
-                return ((HashMap)requestors.clone()).entrySet().iterator();
-            }
-
-            Iterator entries() { return requestors.entrySet().iterator(); }
-
-            boolean isEmpty() { return requestors.isEmpty(); }
-
-            Class getServiceClass() { return serviceClass; }
-
-            BeanContextServiceProvider getServiceProvider() {
-                return serviceProvider;
-            }
-
-            BeanContextServiceProvider getDelegateProvider() {
-                return delegateProvider;
-            }
-
-            boolean isDelegated() { return delegateProvider != null; }
-
-            void addRef(boolean delegated) {
-                if (delegated) {
-                    delegateRefs++;
-                } else {
-                    serviceRefs++;
-                }
-            }
-
-
-            void releaseRef(boolean delegated) {
-                if (delegated) {
-                    if (--delegateRefs == 0) {
-                        delegateProvider = null;
-                    }
-                } else {
-                    if (--serviceRefs  <= 0) {
-                        serviceProvider = null;
-                    }
-                }
-            }
-
-            int getRefs() { return serviceRefs + delegateRefs; }
-
-            int getDelegateRefs() { return delegateRefs; }
-
-            int getServiceRefs() { return serviceRefs; }
-
-            /*
-             * fields
-             */
-
-            Class                               serviceClass;
-
-            BeanContextServiceProvider          serviceProvider;
-            int                                 serviceRefs;
-
-            BeanContextServiceProvider          delegateProvider; // proxy
-            int                                 delegateRefs;
-
-            HashMap                             requestors = new HashMap(1);
-        }
-
-        /*
-         * per service reference info ...
-         */
-
-        class BCSSCServiceRef {
-            BCSSCServiceRef(BCSSCServiceClassRef scref, boolean isDelegated) {
-                serviceClassRef = scref;
-                delegated       = isDelegated;
-            }
-
-            void addRef()  { refCnt++;        }
-            int  release() { return --refCnt; }
-
-            BCSSCServiceClassRef getServiceClassRef() { return serviceClassRef; }
-
-            boolean isDelegated() { return delegated; }
-
-            /*
-             * fields
-             */
-
-            BCSSCServiceClassRef serviceClassRef;
-            int                  refCnt    = 1;
-            boolean              delegated = false;
-        }
-
-        BCSSChild(Object bcc, Object peer) { super(bcc, peer); }
-
-        // note usage of service per requestor, per service
-
-        synchronized void usingService(Object requestor, Object service, Class serviceClass, BeanContextServiceProvider bcsp, boolean isDelegated, BeanContextServiceRevokedListener bcsrl)  throws TooManyListenersException, UnsupportedOperationException {
-
-            // first, process mapping from serviceClass to requestor(s)
-
-            BCSSCServiceClassRef serviceClassRef = null;
-
-            if (serviceClasses == null)
-                serviceClasses = new HashMap(1);
-            else
-                serviceClassRef = (BCSSCServiceClassRef)serviceClasses.get(serviceClass);
-
-            if (serviceClassRef == null) { // new service being used ...
-                serviceClassRef = new BCSSCServiceClassRef(serviceClass, bcsp, isDelegated);
-                serviceClasses.put(serviceClass, serviceClassRef);
-
-            } else { // existing service ...
-                serviceClassRef.verifyAndMaybeSetProvider(bcsp, isDelegated); // throws
-                serviceClassRef.verifyRequestor(requestor, bcsrl); // throws
-            }
-
-            serviceClassRef.addRequestor(requestor, bcsrl);
-            serviceClassRef.addRef(isDelegated);
-
-            // now handle mapping from requestor to service(s)
-
-            BCSSCServiceRef serviceRef = null;
-            Map             services   = null;
-
-            if (serviceRequestors == null) {
-                serviceRequestors = new HashMap(1);
-            } else {
-                services = (Map)serviceRequestors.get(requestor);
-            }
-
-            if (services == null) {
-                services = new HashMap(1);
-
-                serviceRequestors.put(requestor, services);
-            } else
-                serviceRef = (BCSSCServiceRef)services.get(service);
-
-            if (serviceRef == null) {
-                serviceRef = new BCSSCServiceRef(serviceClassRef, isDelegated);
-
-                services.put(service, serviceRef);
-            } else {
-                serviceRef.addRef();
-            }
-        }
-
-        // release a service reference
-
-        synchronized void releaseService(Object requestor, Object service) {
-            if (serviceRequestors == null) return;
-
-            Map services = (Map)serviceRequestors.get(requestor);
-
-            if (services == null) return; // oops its not there anymore!
-
-            BCSSCServiceRef serviceRef = (BCSSCServiceRef)services.get(service);
-
-            if (serviceRef == null) return; // oops its not there anymore!
-
-            BCSSCServiceClassRef serviceClassRef = serviceRef.getServiceClassRef();
-            boolean                    isDelegated = serviceRef.isDelegated();
-            BeanContextServiceProvider bcsp        = isDelegated ? serviceClassRef.getDelegateProvider() : serviceClassRef.getServiceProvider();
-
-            bcsp.releaseService(BeanContextServicesSupport.this.getBeanContextServicesPeer(), requestor, service);
-
-            serviceClassRef.releaseRef(isDelegated);
-            serviceClassRef.removeRequestor(requestor);
-
-            if (serviceRef.release() == 0) {
-
-                services.remove(service);
-
-                if (services.isEmpty()) {
-                    serviceRequestors.remove(requestor);
-                    serviceClassRef.removeRequestor(requestor);
-                }
-
-                if (serviceRequestors.isEmpty()) {
-                    serviceRequestors = null;
-                }
-
-                if (serviceClassRef.isEmpty()) {
-                    serviceClasses.remove(serviceClassRef.getServiceClass());
-                }
-
-                if (serviceClasses.isEmpty())
-                    serviceClasses = null;
-            }
-        }
-
-        // revoke a service
-
-        synchronized void revokeService(Class serviceClass, boolean isDelegated, boolean revokeNow) {
-            if (serviceClasses == null) return;
-
-            BCSSCServiceClassRef serviceClassRef = (BCSSCServiceClassRef)serviceClasses.get(serviceClass);
-
-            if (serviceClassRef == null) return;
-
-            Iterator i = serviceClassRef.cloneOfEntries();
-
-            BeanContextServiceRevokedEvent bcsre       = new BeanContextServiceRevokedEvent(BeanContextServicesSupport.this.getBeanContextServicesPeer(), serviceClass, revokeNow);
-            boolean                        noMoreRefs  = false;
-
-            while (i.hasNext() && serviceRequestors != null) {
-                Map.Entry                         entry    = (Map.Entry)i.next();
-                BeanContextServiceRevokedListener listener = (BeanContextServiceRevokedListener)entry.getValue();
-
-                if (revokeNow) {
-                    Object  requestor = entry.getKey();
-                    Map     services  = (Map)serviceRequestors.get(requestor);
-
-                    if (services != null) {
-                        Iterator i1 = services.entrySet().iterator();
-
-                        while (i1.hasNext()) {
-                            Map.Entry       tmp        = (Map.Entry)i1.next();
-
-                            BCSSCServiceRef serviceRef = (BCSSCServiceRef)tmp.getValue();
-                            if (serviceRef.getServiceClassRef().equals(serviceClassRef) && isDelegated == serviceRef.isDelegated()) {
-                                i1.remove();
-                            }
-                        }
-
-                        if (noMoreRefs = services.isEmpty()) {
-                            serviceRequestors.remove(requestor);
-                        }
-                    }
-
-                    if (noMoreRefs) serviceClassRef.removeRequestor(requestor);
-                }
-
-                listener.serviceRevoked(bcsre);
-            }
-
-            if (revokeNow && serviceClasses != null) {
-                if (serviceClassRef.isEmpty())
-                    serviceClasses.remove(serviceClass);
-
-                if (serviceClasses.isEmpty())
-                    serviceClasses = null;
-            }
-
-            if (serviceRequestors != null && serviceRequestors.isEmpty())
-                serviceRequestors = null;
-        }
-
-        // release all references for this child since it has been unnested.
-
-        void cleanupReferences() {
-
-            if (serviceRequestors == null) return;
-
-            Iterator requestors = serviceRequestors.entrySet().iterator();
-
-            while(requestors.hasNext()) {
-                Map.Entry            tmp       = (Map.Entry)requestors.next();
-                Object               requestor = tmp.getKey();
-                Iterator             services  = ((Map)tmp.getValue()).entrySet().iterator();
-
-                requestors.remove();
-
-                while (services.hasNext()) {
-                    Map.Entry       entry   = (Map.Entry)services.next();
-                    Object          service = entry.getKey();
-                    BCSSCServiceRef sref    = (BCSSCServiceRef)entry.getValue();
-
-                    BCSSCServiceClassRef       scref = sref.getServiceClassRef();
-
-                    BeanContextServiceProvider bcsp  = sref.isDelegated() ? scref.getDelegateProvider() : scref.getServiceProvider();
-
-                    scref.removeRequestor(requestor);
-                    services.remove();
-
-                    while (sref.release() >= 0) {
-                        bcsp.releaseService(BeanContextServicesSupport.this.getBeanContextServicesPeer(), requestor, service);
-                    }
-                }
-            }
-
-            serviceRequestors = null;
-            serviceClasses    = null;
-        }
-
-        void revokeAllDelegatedServicesNow() {
-            if (serviceClasses == null) return;
-
-            Iterator serviceClassRefs  =
-                new HashSet(serviceClasses.values()).iterator();
-
-            while (serviceClassRefs.hasNext()) {
-                BCSSCServiceClassRef serviceClassRef = (BCSSCServiceClassRef)serviceClassRefs.next();
-
-                if (!serviceClassRef.isDelegated()) continue;
-
-                Iterator i = serviceClassRef.cloneOfEntries();
-                BeanContextServiceRevokedEvent bcsre       = new BeanContextServiceRevokedEvent(BeanContextServicesSupport.this.getBeanContextServicesPeer(), serviceClassRef.getServiceClass(), true);
-                boolean                        noMoreRefs  = false;
-
-                while (i.hasNext()) {
-                    Map.Entry                         entry     = (Map.Entry)i.next();
-                    BeanContextServiceRevokedListener listener  = (BeanContextServiceRevokedListener)entry.getValue();
-
-                    Object                            requestor = entry.getKey();
-                    Map                               services  = (Map)serviceRequestors.get(requestor);
-
-                    if (services != null) {
-                        Iterator i1 = services.entrySet().iterator();
-
-                        while (i1.hasNext()) {
-                            Map.Entry       tmp        = (Map.Entry)i1.next();
-
-                            BCSSCServiceRef serviceRef = (BCSSCServiceRef)tmp.getValue();
-                            if (serviceRef.getServiceClassRef().equals(serviceClassRef) && serviceRef.isDelegated()) {
-                                i1.remove();
-                            }
-                        }
-
-                        if (noMoreRefs = services.isEmpty()) {
-                            serviceRequestors.remove(requestor);
-                        }
-                    }
-
-                    if (noMoreRefs) serviceClassRef.removeRequestor(requestor);
-
-                    listener.serviceRevoked(bcsre);
-
-                    if (serviceClassRef.isEmpty())
-                        serviceClasses.remove(serviceClassRef.getServiceClass());
-                }
-            }
-
-            if (serviceClasses.isEmpty()) serviceClasses = null;
-
-            if (serviceRequestors != null && serviceRequestors.isEmpty())
-                serviceRequestors = null;
-        }
-
-        /*
-         * fields
-         */
-
-        private transient HashMap       serviceClasses;
-        private transient HashMap       serviceRequestors;
-    }
-
-    /**
-     * <p>
-     * Subclasses can override this method to insert their own subclass
-     * of Child without having to override add() or the other Collection
-     * methods that add children to the set.
-     * </p>
-     *
-     * @param targetChild the child to create the Child on behalf of
-     * @param peer        the peer if the targetChild and peer are related by BeanContextProxy
-     */
-
-    protected BCSChild createBCSChild(Object targetChild, Object peer) {
-        return new BCSSChild(targetChild, peer);
-    }
-
-    /************************************************************************/
-
-        /**
-         * subclasses may subclass this nested class to add behaviors for
-         * each BeanContextServicesProvider.
-         */
-
-        protected static class BCSSServiceProvider implements Serializable {
-            private static final long serialVersionUID = 861278251667444782L;
-
-            BCSSServiceProvider(Class sc, BeanContextServiceProvider bcsp) {
-                super();
-
-                serviceProvider = bcsp;
-            }
-
-            protected BeanContextServiceProvider getServiceProvider() {
-                return serviceProvider;
-            }
-
-            /*
-             * fields
-             */
-
-            protected BeanContextServiceProvider serviceProvider;
-        }
-
-        /**
-         * subclasses can override this method to create new subclasses of
-         * BCSSServiceProvider without having to overrride addService() in
-         * order to instantiate.
-         */
-
-        protected BCSSServiceProvider createBCSSServiceProvider(Class sc, BeanContextServiceProvider bcsp) {
-            return new BCSSServiceProvider(sc, bcsp);
-        }
-
-    /************************************************************************/
-
-    /**
-     * add a BeanContextServicesListener
-     *
-     * @throws NullPointerException
-     */
-
-    public void addBeanContextServicesListener(BeanContextServicesListener bcsl) {
-        if (bcsl == null) throw new NullPointerException("bcsl");
-
-        synchronized(bcsListeners) {
-            if (bcsListeners.contains(bcsl))
-                return;
-            else
-                bcsListeners.add(bcsl);
-        }
-    }
-
-    /**
-     * remove a BeanContextServicesListener
-     */
-
-    public void removeBeanContextServicesListener(BeanContextServicesListener bcsl) {
-        if (bcsl == null) throw new NullPointerException("bcsl");
-
-        synchronized(bcsListeners) {
-            if (!bcsListeners.contains(bcsl))
-                return;
-            else
-                bcsListeners.remove(bcsl);
-        }
-    }
-
-    /**
-     * add a service
-     */
-
-    public boolean addService(Class serviceClass, BeanContextServiceProvider bcsp) {
-        return addService(serviceClass, bcsp, true);
-    }
-
-    /**
-     * add a service
-     */
-
-    protected boolean addService(Class serviceClass, BeanContextServiceProvider bcsp, boolean fireEvent) {
-
-        if (serviceClass == null) throw new NullPointerException("serviceClass");
-        if (bcsp         == null) throw new NullPointerException("bcsp");
-
-        synchronized(BeanContext.globalHierarchyLock) {
-            if (services.containsKey(serviceClass))
-                return false;
-            else {
-                services.put(serviceClass,  createBCSSServiceProvider(serviceClass, bcsp));
-
-                if (bcsp instanceof Serializable) serializable++;
-
-                if (!fireEvent) return true;
-
-
-                BeanContextServiceAvailableEvent bcssae = new BeanContextServiceAvailableEvent(getBeanContextServicesPeer(), serviceClass);
-
-                fireServiceAdded(bcssae);
-
-                synchronized(children) {
-                    Iterator i = children.keySet().iterator();
-
-                    while (i.hasNext()) {
-                        Object c = i.next();
-
-                        if (c instanceof BeanContextServices) {
-                            ((BeanContextServicesListener)c).serviceAvailable(bcssae);
-                        }
-                    }
-                }
-
-                return true;
-            }
-        }
-    }
-
-    /**
-     * remove a service
-     */
-
-    public void revokeService(Class serviceClass, BeanContextServiceProvider bcsp, boolean revokeCurrentServicesNow) {
-
-        if (serviceClass == null) throw new NullPointerException("serviceClass");
-        if (bcsp         == null) throw new NullPointerException("bcsp");
-
-        synchronized(BeanContext.globalHierarchyLock) {
-            if (!services.containsKey(serviceClass)) return;
-
-            BCSSServiceProvider bcsssp = (BCSSServiceProvider)services.get(serviceClass);
-
-            if (!bcsssp.getServiceProvider().equals(bcsp))
-                throw new IllegalArgumentException("service provider mismatch");
-
-            services.remove(serviceClass);
-
-            if (bcsp instanceof Serializable) serializable--;
-
-            Iterator i = bcsChildren(); // get the BCSChild values.
-
-            while (i.hasNext()) {
-                ((BCSSChild)i.next()).revokeService(serviceClass, false, revokeCurrentServicesNow);
-            }
-
-            fireServiceRevoked(serviceClass, revokeCurrentServicesNow);
-        }
-    }
-
-    /**
-     * has a service, which may be delegated
-     */
-
-    public synchronized boolean hasService(Class serviceClass) {
-        if (serviceClass == null) throw new NullPointerException("serviceClass");
-
-        synchronized(BeanContext.globalHierarchyLock) {
-            if (services.containsKey(serviceClass)) return true;
-
-            BeanContextServices bcs = null;
-
-            try {
-                bcs = (BeanContextServices)getBeanContext();
-            } catch (ClassCastException cce) {
-                return false;
-            }
-
-            return bcs == null ? false : bcs.hasService(serviceClass);
-        }
-    }
-
-    /************************************************************************/
-
-    /*
-     * a nested subclass used to represent a proxy for serviceClasses delegated
-     * to an enclosing BeanContext.
-     */
-
-    protected class BCSSProxyServiceProvider implements BeanContextServiceProvider, BeanContextServiceRevokedListener {
-
-        BCSSProxyServiceProvider(BeanContextServices bcs) {
-            super();
-
-            nestingCtxt = bcs;
-        }
-
-        public Object getService(BeanContextServices bcs, Object requestor, Class serviceClass, Object serviceSelector) {
-            Object service = null;
-
-            try {
-                service = nestingCtxt.getService(bcs, requestor, serviceClass, serviceSelector, this);
-            } catch (TooManyListenersException tmle) {
-                return null;
-            }
-
-            return service;
-        }
-
-        public void releaseService(BeanContextServices bcs, Object requestor, Object service) {
-            nestingCtxt.releaseService(bcs, requestor, service);
-        }
-
-        public Iterator getCurrentServiceSelectors(BeanContextServices bcs, Class serviceClass) {
-            return nestingCtxt.getCurrentServiceSelectors(serviceClass);
-        }
-
-        public void serviceRevoked(BeanContextServiceRevokedEvent bcsre) {
-            Iterator i = bcsChildren(); // get the BCSChild values.
-
-            while (i.hasNext()) {
-                ((BCSSChild)i.next()).revokeService(bcsre.getServiceClass(), true, bcsre.isCurrentServiceInvalidNow());
-            }
-        }
-
-        /*
-         * fields
-         */
-
-        private BeanContextServices nestingCtxt;
-    }
-
-    /************************************************************************/
-
-    /**
-     * obtain a service which may be delegated
-     */
-
-     public Object getService(BeanContextChild child, Object requestor, Class serviceClass, Object serviceSelector, BeanContextServiceRevokedListener bcsrl) throws TooManyListenersException {
-        if (child        == null) throw new NullPointerException("child");
-        if (serviceClass == null) throw new NullPointerException("serviceClass");
-        if (requestor    == null) throw new NullPointerException("requestor");
-        if (bcsrl        == null) throw new NullPointerException("bcsrl");
-
-        Object              service = null;
-        BCSSChild           bcsc;
-        BeanContextServices bcssp   = getBeanContextServicesPeer();
-
-        synchronized(BeanContext.globalHierarchyLock) {
-            synchronized(children) { bcsc = (BCSSChild)children.get(child); }
-
-            if (bcsc == null) throw new IllegalArgumentException("not a child of this context"); // not a child ...
-
-            BCSSServiceProvider bcsssp = (BCSSServiceProvider)services.get(serviceClass);
-
-            if (bcsssp != null) {
-                BeanContextServiceProvider bcsp = bcsssp.getServiceProvider();
-                service = bcsp.getService(bcssp, requestor, serviceClass, serviceSelector);
-                if (service != null) { // do bookkeeping ...
-                    try {
-                        bcsc.usingService(requestor, service, serviceClass, bcsp, false, bcsrl);
-                    } catch (TooManyListenersException tmle) {
-                        bcsp.releaseService(bcssp, requestor, service);
-                        throw tmle;
-                    } catch (UnsupportedOperationException uope) {
-                        bcsp.releaseService(bcssp, requestor, service);
-                        throw uope; // unchecked rt exception
-                    }
-
-                    return service;
-                }
-            }
-
-
-            if (proxy != null) {
-
-                // try to delegate ...
-
-                service = proxy.getService(bcssp, requestor, serviceClass, serviceSelector);
-
-                if (service != null) { // do bookkeeping ...
-                    try {
-                        bcsc.usingService(requestor, service, serviceClass, proxy, true, bcsrl);
-                    } catch (TooManyListenersException tmle) {
-                        proxy.releaseService(bcssp, requestor, service);
-                        throw tmle;
-                    } catch (UnsupportedOperationException uope) {
-                        proxy.releaseService(bcssp, requestor, service);
-                        throw uope; // unchecked rt exception
-                    }
-
-                    return service;
-                }
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * release a service
-     */
-
-    public void releaseService(BeanContextChild child, Object requestor, Object service) {
-        if (child     == null) throw new NullPointerException("child");
-        if (requestor == null) throw new NullPointerException("requestor");
-        if (service   == null) throw new NullPointerException("service");
-
-        BCSSChild bcsc;
-
-        synchronized(BeanContext.globalHierarchyLock) {
-                synchronized(children) { bcsc = (BCSSChild)children.get(child); }
-
-                if (bcsc != null)
-                    bcsc.releaseService(requestor, service);
-                else
-                   throw new IllegalArgumentException("child actual is not a child of this BeanContext");
-        }
-    }
-
-    /**
-     * @return an iterator for all the currently registered service classes.
-     */
-
-    public Iterator getCurrentServiceClasses() {
-        return new BCSIterator(services.keySet().iterator());
-    }
-
-    /**
-     * @return an iterator for all the currently available service selectors
-     * (if any) available for the specified service.
-     */
-
-    public Iterator getCurrentServiceSelectors(Class serviceClass) {
-
-        BCSSServiceProvider bcsssp = (BCSSServiceProvider)services.get(serviceClass);
-
-        return bcsssp != null ? new BCSIterator(bcsssp.getServiceProvider().getCurrentServiceSelectors(getBeanContextServicesPeer(), serviceClass)) : null;
-    }
-
-    /**
-     * BeanContextServicesListener callback, propagates event to all
-     * currently registered listeners and BeanContextServices children,
-     * if this BeanContextService does not already implement this service
-     * itself.
-     *
-     * subclasses may override or envelope this method to implement their
-     * own propagation semantics.
-     */
-
-     public void serviceAvailable(BeanContextServiceAvailableEvent bcssae) {
-        synchronized(BeanContext.globalHierarchyLock) {
-            if (services.containsKey(bcssae.getServiceClass())) return;
-
-            fireServiceAdded(bcssae);
-
-            Iterator i;
-
-            synchronized(children) {
-                i = children.keySet().iterator();
-            }
-
-            while (i.hasNext()) {
-                Object c = i.next();
-
-                if (c instanceof BeanContextServices) {
-                    ((BeanContextServicesListener)c).serviceAvailable(bcssae);
-                }
-            }
-        }
-     }
-
-    /**
-     * BeanContextServicesListener callback, propagates event to all
-     * currently registered listeners and BeanContextServices children,
-     * if this BeanContextService does not already implement this service
-     * itself.
-     *
-     * subclasses may override or envelope this method to implement their
-     * own propagation semantics.
-     */
-
-    public void serviceRevoked(BeanContextServiceRevokedEvent bcssre) {
-        synchronized(BeanContext.globalHierarchyLock) {
-            if (services.containsKey(bcssre.getServiceClass())) return;
-
-            fireServiceRevoked(bcssre);
-
-            Iterator i;
-
-            synchronized(children) {
-                i = children.keySet().iterator();
-            }
-
-            while (i.hasNext()) {
-                Object c = i.next();
-
-                if (c instanceof BeanContextServices) {
-                    ((BeanContextServicesListener)c).serviceRevoked(bcssre);
-                }
-            }
-        }
-    }
-
-    /**
-     * Gets the <tt>BeanContextServicesListener</tt> (if any) of the specified
-     * child.
-     *
-     * @param child the specified child
-     * @return the BeanContextServicesListener (if any) of the specified child
-     */
-    protected static final BeanContextServicesListener getChildBeanContextServicesListener(Object child) {
-        try {
-            return (BeanContextServicesListener)child;
-        } catch (ClassCastException cce) {
-            return null;
-        }
-    }
-
-    /**
-     * called from superclass child removal operations after a child
-     * has been successfully removed. called with child synchronized.
-     *
-     * This subclass uses this hook to immediately revoke any services
-     * being used by this child if it is a BeanContextChild.
-     *
-     * subclasses may envelope this method in order to implement their
-     * own child removal side-effects.
-     */
-
-    protected void childJustRemovedHook(Object child, BCSChild bcsc) {
-        BCSSChild bcssc = (BCSSChild)bcsc;
-
-        bcssc.cleanupReferences();
-    }
-
-    /**
-     * called from setBeanContext to notify a BeanContextChild
-     * to release resources obtained from the nesting BeanContext.
-     *
-     * This method revokes any services obtained from its parent.
-     *
-     * subclasses may envelope this method to implement their own semantics.
-     */
-
-    protected synchronized void releaseBeanContextResources() {
-        Object[] bcssc;
-
-        super.releaseBeanContextResources();
-
-        synchronized(children) {
-            if (children.isEmpty()) return;
-
-            bcssc = children.values().toArray();
-        }
-
-
-        for (int i = 0; i < bcssc.length; i++) {
-            ((BCSSChild)bcssc[i]).revokeAllDelegatedServicesNow();
-        }
-
-        proxy = null;
-    }
-
-    /**
-     * called from setBeanContext to notify a BeanContextChild
-     * to allocate resources obtained from the nesting BeanContext.
-     *
-     * subclasses may envelope this method to implement their own semantics.
-     */
-
-    protected synchronized void initializeBeanContextResources() {
-        super.initializeBeanContextResources();
-
-        BeanContext nbc = getBeanContext();
-
-        if (nbc == null) return;
-
-        try {
-            BeanContextServices bcs = (BeanContextServices)nbc;
-
-            proxy = new BCSSProxyServiceProvider(bcs);
-        } catch (ClassCastException cce) {
-            // do nothing ...
-        }
-    }
-
-    /**
-     * Fires a <tt>BeanContextServiceEvent</tt> notifying of a new service.
-     */
-    protected final void fireServiceAdded(Class serviceClass) {
-        BeanContextServiceAvailableEvent bcssae = new BeanContextServiceAvailableEvent(getBeanContextServicesPeer(), serviceClass);
-
-        fireServiceAdded(bcssae);
-    }
-
-    /**
-     * Fires a <tt>BeanContextServiceAvailableEvent</tt> indicating that a new
-     * service has become available.
-     *
-     * @param bcssae the <tt>BeanContextServiceAvailableEvent</tt>
-     */
-    protected final void fireServiceAdded(BeanContextServiceAvailableEvent bcssae) {
-        Object[]                         copy;
-
-        synchronized (bcsListeners) { copy = bcsListeners.toArray(); }
-
-        for (int i = 0; i < copy.length; i++) {
-            ((BeanContextServicesListener)copy[i]).serviceAvailable(bcssae);
-        }
-    }
-
-    /**
-     * Fires a <tt>BeanContextServiceEvent</tt> notifying of a service being revoked.
-     *
-     * @param bcsre the <tt>BeanContextServiceRevokedEvent</tt>
-     */
-    protected final void fireServiceRevoked(BeanContextServiceRevokedEvent bcsre) {
-        Object[]                         copy;
-
-        synchronized (bcsListeners) { copy = bcsListeners.toArray(); }
-
-        for (int i = 0; i < copy.length; i++) {
-            ((BeanContextServiceRevokedListener)copy[i]).serviceRevoked(bcsre);
-        }
-    }
-
-    /**
-     * Fires a <tt>BeanContextServiceRevokedEvent</tt>
-     * indicating that a particular service is
-     * no longer available.
-     */
-    protected final void fireServiceRevoked(Class serviceClass, boolean revokeNow) {
-        Object[]                       copy;
-        BeanContextServiceRevokedEvent bcsre = new BeanContextServiceRevokedEvent(getBeanContextServicesPeer(), serviceClass, revokeNow);
-
-        synchronized (bcsListeners) { copy = bcsListeners.toArray(); }
-
-        for (int i = 0; i < copy.length; i++) {
-            ((BeanContextServicesListener)copy[i]).serviceRevoked(bcsre);
-        }
-   }
-
-    /**
-     * called from BeanContextSupport writeObject before it serializes the
-     * children ...
-     *
-     * This class will serialize any Serializable BeanContextServiceProviders
-     * herein.
-     *
-     * subclasses may envelope this method to insert their own serialization
-     * processing that has to occur prior to serialization of the children
-     */
-
-    protected synchronized void bcsPreSerializationHook(ObjectOutputStream oos) throws IOException {
-
-        oos.writeInt(serializable);
-
-        if (serializable <= 0) return;
-
-        int count = 0;
-
-        Iterator i = services.entrySet().iterator();
-
-        while (i.hasNext() && count < serializable) {
-            Map.Entry           entry = (Map.Entry)i.next();
-            BCSSServiceProvider bcsp  = null;
-
-             try {
-                bcsp = (BCSSServiceProvider)entry.getValue();
-             } catch (ClassCastException cce) {
-                continue;
-             }
-
-             if (bcsp.getServiceProvider() instanceof Serializable) {
-                oos.writeObject(entry.getKey());
-                oos.writeObject(bcsp);
-                count++;
-             }
-        }
-
-        if (count != serializable)
-            throw new IOException("wrote different number of service providers than expected");
-    }
-
-    /**
-     * called from BeanContextSupport readObject before it deserializes the
-     * children ...
-     *
-     * This class will deserialize any Serializable BeanContextServiceProviders
-     * serialized earlier thus making them available to the children when they
-     * deserialized.
-     *
-     * subclasses may envelope this method to insert their own serialization
-     * processing that has to occur prior to serialization of the children
-     */
-
-    protected synchronized void bcsPreDeserializationHook(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-
-        serializable = ois.readInt();
-
-        int count = serializable;
-
-        while (count > 0) {
-            services.put(ois.readObject(), ois.readObject());
-            count--;
-        }
-    }
-
-    /**
-     * serialize the instance
-     */
-
-    private synchronized void writeObject(ObjectOutputStream oos) throws IOException {
-        oos.defaultWriteObject();
-
-        serialize(oos, (Collection)bcsListeners);
-    }
-
-    /**
-     * deserialize the instance
-     */
-
-    private synchronized void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-
-        ois.defaultReadObject();
-
-        deserialize(ois, (Collection)bcsListeners);
-    }
-
-
-    /*
-     * fields
-     */
-
-    /**
-     * all accesses to the <code> protected transient HashMap services </code>
-     * field should be synchronized on that object
-     */
-    protected transient HashMap                  services;
-
-    /**
-     * The number of instances of a serializable <tt>BeanContextServceProvider</tt>.
-     */
-    protected transient int                      serializable = 0;
-
-
-    /**
-     * Delegate for the <tt>BeanContextServiceProvider</tt>.
-     */
-    protected transient BCSSProxyServiceProvider proxy;
-
-
-    /**
-     * List of <tt>BeanContextServicesListener</tt> objects.
-     */
-    protected transient ArrayList                bcsListeners;
-}
diff --git a/ojluni/src/main/java/java/beans/beancontext/BeanContextSupport.java b/ojluni/src/main/java/java/beans/beancontext/BeanContextSupport.java
deleted file mode 100755
index 85b1a5a..0000000
--- a/ojluni/src/main/java/java/beans/beancontext/BeanContextSupport.java
+++ /dev/null
@@ -1,1393 +0,0 @@
-/*
- * Copyright (c) 1997, 2004, 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.
- */
-
-package java.beans.beancontext;
-
-import java.awt.Component;
-import java.awt.Container;
-
-import java.beans.Beans;
-import java.beans.AppletInitializer;
-
-import java.beans.DesignMode;
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
-
-import java.beans.VetoableChangeListener;
-import java.beans.VetoableChangeSupport;
-import java.beans.PropertyVetoException;
-
-import java.beans.Visibility;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-
-import java.net.URL;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-
-
-/**
- * This helper class provides a utility implementation of the
- * java.beans.beancontext.BeanContext interface.
- * </p>
- * <p>
- * Since this class directly implements the BeanContext interface, the class
- * can, and is intended to be used either by subclassing this implementation,
- * or via ad-hoc delegation of an instance of this class from another.
- * </p>
- *
- * @author Laurence P. G. Cable
- * @since 1.2
- */
-public class      BeanContextSupport extends BeanContextChildSupport
-       implements BeanContext,
-                  Serializable,
-                  PropertyChangeListener,
-                  VetoableChangeListener {
-
-    // Fix for bug 4282900 to pass JCK regression test
-    static final long serialVersionUID = -4879613978649577204L;
-
-    /**
-     *
-     * Construct a BeanContextSupport instance
-     *
-     *
-     * @param peer      The peer <tt>BeanContext</tt> we are
-     *                  supplying an implementation for,
-     *                  or <tt>null</tt>
-     *                  if this object is its own peer
-     * @param lcle      The current Locale for this BeanContext. If
-     *                  <tt>lcle</tt> is <tt>null</tt>, the default locale
-     *                  is assigned to the <tt>BeanContext</tt> instance.
-     * @param dTime     The initial state,
-     *                  <tt>true</tt> if in design mode,
-     *                  <tt>false</tt> if runtime.
-     * @param visible   The initial visibility.
-     * @see java.util.Locale#getDefault()
-     * @see java.util.Locale#setDefault(java.util.Locale)
-     */
-    public BeanContextSupport(BeanContext peer, Locale lcle, boolean dTime, boolean visible) {
-        super(peer);
-
-        locale          = lcle != null ? lcle : Locale.getDefault();
-        designTime      = dTime;
-        okToUseGui      = visible;
-
-        initialize();
-    }
-
-    /**
-     * Create an instance using the specified Locale and design mode.
-     *
-     * @param peer      The peer <tt>BeanContext</tt> we
-     *                  are supplying an implementation for,
-     *                  or <tt>null</tt> if this object is its own peer
-     * @param lcle      The current Locale for this <tt>BeanContext</tt>. If
-     *                  <tt>lcle</tt> is <tt>null</tt>, the default locale
-     *                  is assigned to the <tt>BeanContext</tt> instance.
-     * @param dtime     The initial state, <tt>true</tt>
-     *                  if in design mode,
-     *                  <tt>false</tt> if runtime.
-     * @see java.util.Locale#getDefault()
-     * @see java.util.Locale#setDefault(java.util.Locale)
-     */
-    public BeanContextSupport(BeanContext peer, Locale lcle, boolean dtime) {
-        this (peer, lcle, dtime, true);
-    }
-
-    /**
-     * Create an instance using the specified locale
-     *
-     * @param peer      The peer BeanContext we are
-     *                  supplying an implementation for,
-     *                  or <tt>null</tt> if this object
-     *                  is its own peer
-     * @param lcle      The current Locale for this
-     *                  <tt>BeanContext</tt>. If
-     *                  <tt>lcle</tt> is <tt>null</tt>,
-     *                  the default locale
-     *                  is assigned to the <tt>BeanContext</tt>
-     *                  instance.
-     * @see java.util.Locale#getDefault()
-     * @see java.util.Locale#setDefault(java.util.Locale)
-     */
-    public BeanContextSupport(BeanContext peer, Locale lcle) {
-        this (peer, lcle, false, true);
-    }
-
-    /**
-     * Create an instance using with a default locale
-     *
-     * @param peer      The peer <tt>BeanContext</tt> we are
-     *                  supplying an implementation for,
-     *                  or <tt>null</tt> if this object
-     *                  is its own peer
-     */
-    public BeanContextSupport(BeanContext peer) {
-        this (peer, null, false, true);
-    }
-
-    /**
-     * Create an instance that is not a delegate of another object
-     */
-
-    public BeanContextSupport() {
-        this (null, null, false, true);
-    }
-
-    /**
-     * Gets the instance of <tt>BeanContext</tt> that
-     * this object is providing the implementation for.
-     * @return the BeanContext instance
-     */
-    public BeanContext getBeanContextPeer() { return (BeanContext)getBeanContextChildPeer(); }
-
-    /**
-     * <p>
-     * The instantiateChild method is a convenience hook
-     * in BeanContext to simplify
-     * the task of instantiating a Bean, nested,
-     * into a <tt>BeanContext</tt>.
-     * </p>
-     * <p>
-     * The semantics of the beanName parameter are defined by java.beans.Beans.instantate.
-     * </p>
-     *
-     * @param beanName the name of the Bean to instantiate within this BeanContext
-     * @throws IOException if there is an I/O error when the bean is being deserialized
-     * @throws ClassNotFoundException if the class
-     * identified by the beanName parameter is not found
-     * @return the new object
-     */
-    public Object instantiateChild(String beanName)
-           throws IOException, ClassNotFoundException {
-        BeanContext bc = getBeanContextPeer();
-
-        return Beans.instantiate(bc.getClass().getClassLoader(), beanName, bc);
-    }
-
-    /**
-     * Gets the number of children currently nested in
-     * this BeanContext.
-     *
-     * @return number of children
-     */
-    public int size() {
-        synchronized(children) {
-            return children.size();
-        }
-    }
-
-    /**
-     * Reports whether or not this
-     * <tt>BeanContext</tt> is empty.
-     * A <tt>BeanContext</tt> is considered
-     * empty when it contains zero
-     * nested children.
-     * @return if there are not children
-     */
-    public boolean isEmpty() {
-        synchronized(children) {
-            return children.isEmpty();
-        }
-    }
-
-    /**
-     * Determines whether or not the specified object
-     * is currently a child of this <tt>BeanContext</tt>.
-     * @param o the Object in question
-     * @return if this object is a child
-     */
-    public boolean contains(Object o) {
-        synchronized(children) {
-            return children.containsKey(o);
-        }
-    }
-
-    /**
-     * Determines whether or not the specified object
-     * is currently a child of this <tt>BeanContext</tt>.
-     * @param o the Object in question
-     * @return if this object is a child
-     */
-    public boolean containsKey(Object o) {
-        synchronized(children) {
-            return children.containsKey(o);
-        }
-    }
-
-    /**
-     * Gets all JavaBean or <tt>BeanContext</tt> instances
-     * currently nested in this <tt>BeanContext</tt>.
-     * @return an <tt>Iterator</tt> of the nested children
-     */
-    public Iterator iterator() {
-        synchronized(children) {
-            return new BCSIterator(children.keySet().iterator());
-        }
-    }
-
-    /**
-     * Gets all JavaBean or <tt>BeanContext</tt>
-     * instances currently nested in this BeanContext.
-     */
-    public Object[] toArray() {
-        synchronized(children) {
-            return children.keySet().toArray();
-        }
-    }
-
-    /**
-     * Gets an array containing all children of
-     * this <tt>BeanContext</tt> that match
-     * the types contained in arry.
-     * @param arry The array of object
-     * types that are of interest.
-     * @return an array of children
-     */
-    public Object[] toArray(Object[] arry) {
-        synchronized(children) {
-            return children.keySet().toArray(arry);
-        }
-    }
-
-
-    /************************************************************************/
-
-    /**
-     * protected final subclass that encapsulates an iterator but implements
-     * a noop remove() method.
-     */
-
-    protected static final class BCSIterator implements Iterator {
-        BCSIterator(Iterator i) { super(); src = i; }
-
-        public boolean hasNext() { return src.hasNext(); }
-        public Object  next()    { return src.next();    }
-        public void    remove()  { /* do nothing */      }
-
-        private Iterator src;
-    }
-
-    /************************************************************************/
-
-    /*
-     * protected nested class containing per child information, an instance
-     * of which is associated with each child in the "children" hashtable.
-     * subclasses can extend this class to include their own per-child state.
-     *
-     * Note that this 'value' is serialized with the corresponding child 'key'
-     * when the BeanContextSupport is serialized.
-     */
-
-    protected class BCSChild implements Serializable {
-
-    private static final long serialVersionUID = -5815286101609939109L;
-
-        BCSChild(Object bcc, Object peer) {
-            super();
-
-            child     = bcc;
-            proxyPeer = peer;
-        }
-
-        Object  getChild()                  { return child; }
-
-        void    setRemovePending(boolean v) { removePending = v; }
-
-        boolean isRemovePending()           { return removePending; }
-
-        boolean isProxyPeer()               { return proxyPeer != null; }
-
-        Object  getProxyPeer()              { return proxyPeer; }
-        /*
-         * fields
-         */
-
-
-        private           Object   child;
-        private           Object   proxyPeer;
-
-        private transient boolean  removePending;
-    }
-
-    /**
-     * <p>
-     * Subclasses can override this method to insert their own subclass
-     * of Child without having to override add() or the other Collection
-     * methods that add children to the set.
-     * </p>
-     *
-     * @param targetChild the child to create the Child on behalf of
-     * @param peer        the peer if the tragetChild and the peer are related by an implementation of BeanContextProxy
-     */
-
-    protected BCSChild createBCSChild(Object targetChild, Object peer) {
-        return new BCSChild(targetChild, peer);
-    }
-
-    /************************************************************************/
-
-    /**
-     * Adds/nests a child within this <tt>BeanContext</tt>.
-     * <p>
-     * Invoked as a side effect of java.beans.Beans.instantiate().
-     * If the child object is not valid for adding then this method
-     * throws an IllegalStateException.
-     * </p>
-     *
-     *
-     * @param targetChild The child objects to nest
-     * within this <tt>BeanContext</tt>
-     * @return true if the child was added successfully.
-     * @see #validatePendingAdd
-     */
-    public boolean add(Object targetChild) {
-
-        if (targetChild == null) throw new IllegalArgumentException();
-
-        // The specification requires that we do nothing if the child
-        // is already nested herein.
-
-        if (children.containsKey(targetChild)) return false; // test before locking
-
-        synchronized(BeanContext.globalHierarchyLock) {
-            if (children.containsKey(targetChild)) return false; // check again
-
-            if (!validatePendingAdd(targetChild)) {
-                throw new IllegalStateException();
-            }
-
-
-            // The specification requires that we invoke setBeanContext() on the
-            // newly added child if it implements the java.beans.beancontext.BeanContextChild interface
-
-            BeanContextChild cbcc  = getChildBeanContextChild(targetChild);
-            BeanContextChild  bccp = null;
-
-            synchronized(targetChild) {
-
-                if (targetChild instanceof BeanContextProxy) {
-                    bccp = ((BeanContextProxy)targetChild).getBeanContextProxy();
-
-                    if (bccp == null) throw new NullPointerException("BeanContextPeer.getBeanContextProxy()");
-                }
-
-                BCSChild bcsc  = createBCSChild(targetChild, bccp);
-                BCSChild pbcsc = null;
-
-                synchronized (children) {
-                    children.put(targetChild, bcsc);
-
-                    if (bccp != null) children.put(bccp, pbcsc = createBCSChild(bccp, targetChild));
-                }
-
-                if (cbcc != null) synchronized(cbcc) {
-                    try {
-                        cbcc.setBeanContext(getBeanContextPeer());
-                    } catch (PropertyVetoException pve) {
-
-                        synchronized (children) {
-                            children.remove(targetChild);
-
-                            if (bccp != null) children.remove(bccp);
-                        }
-
-                        throw new IllegalStateException();
-                    }
-
-                    cbcc.addPropertyChangeListener("beanContext", childPCL);
-                    cbcc.addVetoableChangeListener("beanContext", childVCL);
-                }
-
-                Visibility v = getChildVisibility(targetChild);
-
-                if (v != null) {
-                    if (okToUseGui)
-                        v.okToUseGui();
-                    else
-                        v.dontUseGui();
-                }
-
-                if (getChildSerializable(targetChild) != null) serializable++;
-
-                childJustAddedHook(targetChild, bcsc);
-
-                if (bccp != null) {
-                    v = getChildVisibility(bccp);
-
-                    if (v != null) {
-                        if (okToUseGui)
-                            v.okToUseGui();
-                        else
-                            v.dontUseGui();
-                    }
-
-                    if (getChildSerializable(bccp) != null) serializable++;
-
-                    childJustAddedHook(bccp, pbcsc);
-                }
-
-
-            }
-
-            // The specification requires that we fire a notification of the change
-
-            fireChildrenAdded(new BeanContextMembershipEvent(getBeanContextPeer(), bccp == null ? new Object[] { targetChild } : new Object[] { targetChild, bccp } ));
-
-        }
-
-        return true;
-    }
-
-    /**
-     * Removes a child from this BeanContext.  If the child object is not
-     * for adding then this method throws an IllegalStateException.
-     * @param targetChild The child objects to remove
-     * @see #validatePendingRemove
-     */
-    public boolean remove(Object targetChild) {
-        return remove(targetChild, true);
-    }
-
-    /**
-     * internal remove used when removal caused by
-     * unexpected <tt>setBeanContext</tt> or
-     * by <tt>remove()</tt> invocation.
-     * @param targetChild the JavaBean, BeanContext, or Object to be removed
-     * @param callChildSetBC used to indicate that
-     * the child should be notified that it is no
-     * longer nested in this <tt>BeanContext</tt>.
-     */
-    protected boolean remove(Object targetChild, boolean callChildSetBC) {
-
-        if (targetChild == null) throw new IllegalArgumentException();
-
-        synchronized(BeanContext.globalHierarchyLock) {
-            if (!containsKey(targetChild)) return false;
-
-            if (!validatePendingRemove(targetChild)) {
-                throw new IllegalStateException();
-            }
-
-            BCSChild bcsc  = (BCSChild)children.get(targetChild);
-            BCSChild pbcsc = null;
-            Object   peer  = null;
-
-            // we are required to notify the child that it is no longer nested here if
-            // it implements java.beans.beancontext.BeanContextChild
-
-            synchronized(targetChild) {
-                if (callChildSetBC) {
-                    BeanContextChild cbcc = getChildBeanContextChild(targetChild);
-                    if (cbcc != null) synchronized(cbcc) {
-                        cbcc.removePropertyChangeListener("beanContext", childPCL);
-                        cbcc.removeVetoableChangeListener("beanContext", childVCL);
-
-                        try {
-                            cbcc.setBeanContext(null);
-                        } catch (PropertyVetoException pve1) {
-                            cbcc.addPropertyChangeListener("beanContext", childPCL);
-                            cbcc.addVetoableChangeListener("beanContext", childVCL);
-                            throw new IllegalStateException();
-                        }
-
-                    }
-                }
-
-                synchronized (children) {
-                    children.remove(targetChild);
-
-                    if (bcsc.isProxyPeer()) {
-                        pbcsc = (BCSChild)children.get(peer = bcsc.getProxyPeer());
-                        children.remove(peer);
-                    }
-                }
-
-                if (getChildSerializable(targetChild) != null) serializable--;
-
-                childJustRemovedHook(targetChild, bcsc);
-
-                if (peer != null) {
-                    if (getChildSerializable(peer) != null) serializable--;
-
-                    childJustRemovedHook(peer, pbcsc);
-                }
-            }
-
-            fireChildrenRemoved(new BeanContextMembershipEvent(getBeanContextPeer(), peer == null ? new Object[] { targetChild } : new Object[] { targetChild, peer } ));
-
-        }
-
-        return true;
-    }
-
-    /**
-     * Tests to see if all objects in the
-     * specified <tt>Collection</tt> are children of
-     * this <tt>BeanContext</tt>.
-     * @param c the specified <tt>Collection</tt>
-     *
-     * @return <tt>true</tt> if all objects
-     * in the collection are children of
-     * this <tt>BeanContext</tt>, false if not.
-     */
-    public boolean containsAll(Collection c) {
-        synchronized(children) {
-            Iterator i = c.iterator();
-            while (i.hasNext())
-                if(!contains(i.next()))
-                    return false;
-
-            return true;
-        }
-    }
-
-    /**
-     * add Collection to set of Children (Unsupported)
-     * implementations must synchronized on the hierarchy lock and "children" protected field
-     * @throws UnsupportedOperationException
-     */
-    public boolean addAll(Collection c) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * remove all specified children (Unsupported)
-     * implementations must synchronized on the hierarchy lock and "children" protected field
-     * @throws UnsupportedOperationException
-     */
-    public boolean removeAll(Collection c) {
-        throw new UnsupportedOperationException();
-    }
-
-
-    /**
-     * retain only specified children (Unsupported)
-     * implementations must synchronized on the hierarchy lock and "children" protected field
-     * @throws UnsupportedOperationException
-     */
-    public boolean retainAll(Collection c) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * clear the children (Unsupported)
-     * implementations must synchronized on the hierarchy lock and "children" protected field
-     * @throws UnsupportedOperationException
-     */
-    public void clear() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Adds a BeanContextMembershipListener
-     *
-     * @param  bcml the BeanContextMembershipListener to add
-     * @throws NullPointerException
-     */
-
-    public void addBeanContextMembershipListener(BeanContextMembershipListener bcml) {
-        if (bcml == null) throw new NullPointerException("listener");
-
-        synchronized(bcmListeners) {
-            if (bcmListeners.contains(bcml))
-                return;
-            else
-                bcmListeners.add(bcml);
-        }
-    }
-
-    /**
-     * Removes a BeanContextMembershipListener
-     *
-     * @param  bcml the BeanContextMembershipListener to remove
-     * @throws NullPointerException
-     */
-
-    public void removeBeanContextMembershipListener(BeanContextMembershipListener bcml) {
-        if (bcml == null) throw new NullPointerException("listener");
-
-        synchronized(bcmListeners) {
-            if (!bcmListeners.contains(bcml))
-                return;
-            else
-                bcmListeners.remove(bcml);
-        }
-    }
-
-    /**
-     * @param name the name of the resource requested.
-     * @param bcc  the child object making the request.
-     *
-     * @return  the requested resource as an InputStream
-     * @throws  NullPointerException
-     */
-
-    public InputStream getResourceAsStream(String name, BeanContextChild bcc) {
-        if (name == null) throw new NullPointerException("name");
-        if (bcc  == null) throw new NullPointerException("bcc");
-
-        if (containsKey(bcc)) {
-            ClassLoader cl = bcc.getClass().getClassLoader();
-
-            return cl != null ? cl.getResourceAsStream(name)
-                              : ClassLoader.getSystemResourceAsStream(name);
-        } else throw new IllegalArgumentException("Not a valid child");
-    }
-
-    /**
-     * @param name the name of the resource requested.
-     * @param bcc  the child object making the request.
-     *
-     * @return the requested resource as an InputStream
-     */
-
-    public URL getResource(String name, BeanContextChild bcc) {
-        if (name == null) throw new NullPointerException("name");
-        if (bcc  == null) throw new NullPointerException("bcc");
-
-        if (containsKey(bcc)) {
-            ClassLoader cl = bcc.getClass().getClassLoader();
-
-            return cl != null ? cl.getResource(name)
-                              : ClassLoader.getSystemResource(name);
-        } else throw new IllegalArgumentException("Not a valid child");
-    }
-
-    /**
-     * Sets the new design time value for this <tt>BeanContext</tt>.
-     * @param dTime the new designTime value
-     */
-    public synchronized void setDesignTime(boolean dTime) {
-        if (designTime != dTime) {
-            designTime = dTime;
-
-            firePropertyChange("designMode", Boolean.valueOf(!dTime), Boolean.valueOf(dTime));
-        }
-    }
-
-
-    /**
-     * Reports whether or not this object is in
-     * currently in design time mode.
-     * @return <tt>true</tt> if in design time mode,
-     * <tt>false</tt> if not
-     */
-    public synchronized boolean isDesignTime() { return designTime; }
-
-    /**
-     * Sets the locale of this BeanContext.
-     * @param newLocale the new locale. This method call will have
-     *        no effect if newLocale is <CODE>null</CODE>.
-     * @throws PropertyVetoException if the new value is rejected
-     */
-    public synchronized void setLocale(Locale newLocale) throws PropertyVetoException {
-
-        if ((locale != null && !locale.equals(newLocale)) && newLocale != null) {
-            Locale old = locale;
-
-            fireVetoableChange("locale", old, newLocale); // throws
-
-            locale = newLocale;
-
-            firePropertyChange("locale", old, newLocale);
-        }
-    }
-
-    /**
-     * Gets the locale for this <tt>BeanContext</tt>.
-     *
-     * @return the current Locale of the <tt>BeanContext</tt>
-     */
-    public synchronized Locale getLocale() { return locale; }
-
-    /**
-     * <p>
-     * This method is typically called from the environment in order to determine
-     * if the implementor "needs" a GUI.
-     * </p>
-     * <p>
-     * The algorithm used herein tests the BeanContextPeer, and its current children
-     * to determine if they are either Containers, Components, or if they implement
-     * Visibility and return needsGui() == true.
-     * </p>
-     * @return <tt>true</tt> if the implementor needs a GUI
-     */
-    public synchronized boolean needsGui() {
-        BeanContext bc = getBeanContextPeer();
-
-        if (bc != this) {
-            if (bc instanceof Visibility) return ((Visibility)bc).needsGui();
-
-            if (bc instanceof Container || bc instanceof Component)
-                return true;
-        }
-
-        synchronized(children) {
-            for (Iterator i = children.keySet().iterator(); i.hasNext();) {
-                Object c = i.next();
-
-                try {
-                        return ((Visibility)c).needsGui();
-                    } catch (ClassCastException cce) {
-                        // do nothing ...
-                    }
-
-                    if (c instanceof Container || c instanceof Component)
-                        return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * notify this instance that it may no longer render a GUI.
-     */
-
-    public synchronized void dontUseGui() {
-        if (okToUseGui) {
-            okToUseGui = false;
-
-            // lets also tell the Children that can that they may not use their GUI's
-            synchronized(children) {
-                for (Iterator i = children.keySet().iterator(); i.hasNext();) {
-                    Visibility v = getChildVisibility(i.next());
-
-                    if (v != null) v.dontUseGui();
-               }
-            }
-        }
-    }
-
-    /**
-     * Notify this instance that it may now render a GUI
-     */
-
-    public synchronized void okToUseGui() {
-        if (!okToUseGui) {
-            okToUseGui = true;
-
-            // lets also tell the Children that can that they may use their GUI's
-            synchronized(children) {
-                for (Iterator i = children.keySet().iterator(); i.hasNext();) {
-                    Visibility v = getChildVisibility(i.next());
-
-                    if (v != null) v.okToUseGui();
-                }
-            }
-        }
-    }
-
-    /**
-     * Used to determine if the <tt>BeanContext</tt>
-     * child is avoiding using its GUI.
-     * @return is this instance avoiding using its GUI?
-     * @see Visibility
-     */
-    public boolean avoidingGui() {
-        return !okToUseGui && needsGui();
-    }
-
-    /**
-     * Is this <tt>BeanContext</tt> in the
-     * process of being serialized?
-     * @return if this <tt>BeanContext</tt> is
-     * currently being serialized
-     */
-    public boolean isSerializing() { return serializing; }
-
-    /**
-     * Returns an iterator of all children
-     * of this <tt>BeanContext</tt>.
-     * @return an iterator for all the current BCSChild values
-     */
-    protected Iterator bcsChildren() { synchronized(children) { return children.values().iterator();  } }
-
-    /**
-     * called by writeObject after defaultWriteObject() but prior to
-     * serialization of currently serializable children.
-     *
-     * This method may be overridden by subclasses to perform custom
-     * serialization of their state prior to this superclass serializing
-     * the children.
-     *
-     * This method should not however be used by subclasses to replace their
-     * own implementation (if any) of writeObject().
-     */
-
-    protected void bcsPreSerializationHook(ObjectOutputStream oos) throws IOException {
-    }
-
-    /**
-     * called by readObject after defaultReadObject() but prior to
-     * deserialization of any children.
-     *
-     * This method may be overridden by subclasses to perform custom
-     * deserialization of their state prior to this superclass deserializing
-     * the children.
-     *
-     * This method should not however be used by subclasses to replace their
-     * own implementation (if any) of readObject().
-     */
-
-    protected void bcsPreDeserializationHook(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-    }
-
-    /**
-     * Called by readObject with the newly deserialized child and BCSChild.
-     * @param child the newly deserialized child
-     * @param bcsc the newly deserialized BCSChild
-     */
-    protected void childDeserializedHook(Object child, BCSChild bcsc) {
-        synchronized(children) {
-            children.put(child, bcsc);
-        }
-    }
-
-    /**
-     * Used by writeObject to serialize a Collection.
-     * @param oos the <tt>ObjectOutputStream</tt>
-     * to use during serialization
-     * @param coll the <tt>Collection</tt> to serialize
-     * @throws IOException if serialization failed
-     */
-    protected final void serialize(ObjectOutputStream oos, Collection coll) throws IOException {
-        int      count   = 0;
-        Object[] objects = coll.toArray();
-
-        for (int i = 0; i < objects.length; i++) {
-            if (objects[i] instanceof Serializable)
-                count++;
-            else
-                objects[i] = null;
-        }
-
-        oos.writeInt(count); // number of subsequent objects
-
-        for (int i = 0; count > 0; i++) {
-            Object o = objects[i];
-
-            if (o != null) {
-                oos.writeObject(o);
-                count--;
-            }
-        }
-    }
-
-    /**
-     * used by readObject to deserialize a collection.
-     * @param ois the ObjectInputStream to use
-     * @param coll the Collection
-     */
-    protected final void deserialize(ObjectInputStream ois, Collection coll) throws IOException, ClassNotFoundException {
-        int count = 0;
-
-        count = ois.readInt();
-
-        while (count-- > 0) {
-            coll.add(ois.readObject());
-        }
-    }
-
-    /**
-     * Used to serialize all children of
-     * this <tt>BeanContext</tt>.
-     * @param oos the <tt>ObjectOutputStream</tt>
-     * to use during serialization
-     * @throws IOException if serialization failed
-     */
-    public final void writeChildren(ObjectOutputStream oos) throws IOException {
-        if (serializable <= 0) return;
-
-        boolean prev = serializing;
-
-        serializing = true;
-
-        int count = 0;
-
-        synchronized(children) {
-            Iterator i = children.entrySet().iterator();
-
-            while (i.hasNext() && count < serializable) {
-                Map.Entry entry = (Map.Entry)i.next();
-
-                if (entry.getKey() instanceof Serializable) {
-                    try {
-                        oos.writeObject(entry.getKey());   // child
-                        oos.writeObject(entry.getValue()); // BCSChild
-                    } catch (IOException ioe) {
-                        serializing = prev;
-                        throw ioe;
-                    }
-                    count++;
-                }
-            }
-        }
-
-        serializing = prev;
-
-        if (count != serializable) {
-            throw new IOException("wrote different number of children than expected");
-        }
-
-    }
-
-    /**
-     * Serialize the BeanContextSupport, if this instance has a distinct
-     * peer (that is this object is acting as a delegate for another) then
-     * the children of this instance are not serialized here due to a
-     * 'chicken and egg' problem that occurs on deserialization of the
-     * children at the same time as this instance.
-     *
-     * Therefore in situations where there is a distinct peer to this instance
-     * it should always call writeObject() followed by writeChildren() and
-     * readObject() followed by readChildren().
-     *
-     * @param oos the ObjectOutputStream
-     */
-
-    private synchronized void writeObject(ObjectOutputStream oos) throws IOException, ClassNotFoundException {
-        serializing = true;
-
-        synchronized (BeanContext.globalHierarchyLock) {
-            try {
-                oos.defaultWriteObject(); // serialize the BeanContextSupport object
-
-                bcsPreSerializationHook(oos);
-
-                if (serializable > 0 && this.equals(getBeanContextPeer()))
-                    writeChildren(oos);
-
-                serialize(oos, (Collection)bcmListeners);
-            } finally {
-                serializing = false;
-            }
-        }
-    }
-
-    /**
-     * When an instance of this class is used as a delegate for the
-     * implementation of the BeanContext protocols (and its subprotocols)
-     * there exists a 'chicken and egg' problem during deserialization
-     */
-
-    public final void readChildren(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-        int count = serializable;
-
-        while (count-- > 0) {
-            Object                      child = null;
-            BeanContextSupport.BCSChild bscc  = null;
-
-            try {
-                child = ois.readObject();
-                bscc  = (BeanContextSupport.BCSChild)ois.readObject();
-            } catch (IOException ioe) {
-                continue;
-            } catch (ClassNotFoundException cnfe) {
-                continue;
-            }
-
-
-            synchronized(child) {
-                BeanContextChild bcc = null;
-
-                try {
-                    bcc = (BeanContextChild)child;
-                } catch (ClassCastException cce) {
-                    // do nothing;
-                }
-
-                if (bcc != null) {
-                    try {
-                        bcc.setBeanContext(getBeanContextPeer());
-
-                       bcc.addPropertyChangeListener("beanContext", childPCL);
-                       bcc.addVetoableChangeListener("beanContext", childVCL);
-
-                    } catch (PropertyVetoException pve) {
-                        continue;
-                    }
-                }
-
-                childDeserializedHook(child, bscc);
-            }
-        }
-    }
-
-    /**
-     * deserialize contents ... if this instance has a distinct peer the
-     * children are *not* serialized here, the peer's readObject() must call
-     * readChildren() after deserializing this instance.
-     */
-
-    private synchronized void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-
-        synchronized(BeanContext.globalHierarchyLock) {
-            ois.defaultReadObject();
-
-            initialize();
-
-            bcsPreDeserializationHook(ois);
-
-            if (serializable > 0 && this.equals(getBeanContextPeer()))
-                readChildren(ois);
-
-            deserialize(ois, bcmListeners = new ArrayList(1));
-        }
-    }
-
-    /**
-     * subclasses may envelope to monitor veto child property changes.
-     */
-
-    public void vetoableChange(PropertyChangeEvent pce) throws PropertyVetoException {
-        String propertyName = pce.getPropertyName();
-        Object source       = pce.getSource();
-
-        synchronized(children) {
-            if ("beanContext".equals(propertyName) &&
-                containsKey(source)                    &&
-                !getBeanContextPeer().equals(pce.getNewValue())
-            ) {
-                if (!validatePendingRemove(source)) {
-                    throw new PropertyVetoException("current BeanContext vetoes setBeanContext()", pce);
-                } else ((BCSChild)children.get(source)).setRemovePending(true);
-            }
-        }
-    }
-
-    /**
-     * subclasses may envelope to monitor child property changes.
-     */
-
-    public void propertyChange(PropertyChangeEvent pce) {
-        String propertyName = pce.getPropertyName();
-        Object source       = pce.getSource();
-
-        synchronized(children) {
-            if ("beanContext".equals(propertyName) &&
-                containsKey(source)                    &&
-                ((BCSChild)children.get(source)).isRemovePending()) {
-                BeanContext bc = getBeanContextPeer();
-
-                if (bc.equals(pce.getOldValue()) && !bc.equals(pce.getNewValue())) {
-                    remove(source, false);
-                } else {
-                    ((BCSChild)children.get(source)).setRemovePending(false);
-                }
-            }
-        }
-    }
-
-    /**
-     * <p>
-     * Subclasses of this class may override, or envelope, this method to
-     * add validation behavior for the BeanContext to examine child objects
-     * immediately prior to their being added to the BeanContext.
-     * </p>
-     *
-     * @return true iff the child may be added to this BeanContext, otherwise false.
-     */
-
-    protected boolean validatePendingAdd(Object targetChild) {
-        return true;
-    }
-
-    /**
-     * <p>
-     * Subclasses of this class may override, or envelope, this method to
-     * add validation behavior for the BeanContext to examine child objects
-     * immediately prior to their being removed from the BeanContext.
-     * </p>
-     *
-     * @return true iff the child may be removed from this BeanContext, otherwise false.
-     */
-
-    protected boolean validatePendingRemove(Object targetChild) {
-        return true;
-    }
-
-    /**
-     * subclasses may override this method to simply extend add() semantics
-     * after the child has been added and before the event notification has
-     * occurred. The method is called with the child synchronized.
-     */
-
-    protected void childJustAddedHook(Object child, BCSChild bcsc) {
-    }
-
-    /**
-     * subclasses may override this method to simply extend remove() semantics
-     * after the child has been removed and before the event notification has
-     * occurred. The method is called with the child synchronized.
-     */
-
-    protected void childJustRemovedHook(Object child, BCSChild bcsc) {
-    }
-
-    /**
-     * Gets the Component (if any) associated with the specified child.
-     * @param child the specified child
-     * @return the Component (if any) associated with the specified child.
-     */
-    protected static final Visibility getChildVisibility(Object child) {
-        try {
-            return (Visibility)child;
-        } catch (ClassCastException cce) {
-            return null;
-        }
-    }
-
-    /**
-     * Gets the Serializable (if any) associated with the specified Child
-     * @param child the specified child
-     * @return the Serializable (if any) associated with the specified Child
-     */
-    protected static final Serializable getChildSerializable(Object child) {
-        try {
-            return (Serializable)child;
-        } catch (ClassCastException cce) {
-            return null;
-        }
-    }
-
-    /**
-     * Gets the PropertyChangeListener
-     * (if any) of the specified child
-     * @param child the specified child
-     * @return the PropertyChangeListener (if any) of the specified child
-     */
-    protected static final PropertyChangeListener getChildPropertyChangeListener(Object child) {
-        try {
-            return (PropertyChangeListener)child;
-        } catch (ClassCastException cce) {
-            return null;
-        }
-    }
-
-    /**
-     * Gets the VetoableChangeListener
-     * (if any) of the specified child
-     * @param child the specified child
-     * @return the VetoableChangeListener (if any) of the specified child
-     */
-    protected static final VetoableChangeListener getChildVetoableChangeListener(Object child) {
-        try {
-            return (VetoableChangeListener)child;
-        } catch (ClassCastException cce) {
-            return null;
-        }
-    }
-
-    /**
-     * Gets the BeanContextMembershipListener
-     * (if any) of the specified child
-     * @param child the specified child
-     * @return the BeanContextMembershipListener (if any) of the specified child
-     */
-    protected static final BeanContextMembershipListener getChildBeanContextMembershipListener(Object child) {
-        try {
-            return (BeanContextMembershipListener)child;
-        } catch (ClassCastException cce) {
-            return null;
-        }
-    }
-
-    /**
-     * Gets the BeanContextChild (if any) of the specified child
-     * @param child the specified child
-     * @return  the BeanContextChild (if any) of the specified child
-     * @throws  IllegalArgumentException if child implements both BeanContextChild and BeanContextProxy
-     */
-    protected static final BeanContextChild getChildBeanContextChild(Object child) {
-        try {
-            BeanContextChild bcc = (BeanContextChild)child;
-
-            if (child instanceof BeanContextChild && child instanceof BeanContextProxy)
-                throw new IllegalArgumentException("child cannot implement both BeanContextChild and BeanContextProxy");
-            else
-                return bcc;
-        } catch (ClassCastException cce) {
-            try {
-                return ((BeanContextProxy)child).getBeanContextProxy();
-            } catch (ClassCastException cce1) {
-                return null;
-            }
-        }
-    }
-
-    /**
-     * Fire a BeanContextshipEvent on the BeanContextMembershipListener interface
-     */
-
-    protected final void fireChildrenAdded(BeanContextMembershipEvent bcme) {
-        Object[] copy;
-
-        synchronized(bcmListeners) { copy = bcmListeners.toArray(); }
-
-        for (int i = 0; i < copy.length; i++)
-            ((BeanContextMembershipListener)copy[i]).childrenAdded(bcme);
-    }
-
-    /**
-     * Fire a BeanContextshipEvent on the BeanContextMembershipListener interface
-     */
-
-    protected final void fireChildrenRemoved(BeanContextMembershipEvent bcme) {
-        Object[] copy;
-
-        synchronized(bcmListeners) { copy = bcmListeners.toArray(); }
-
-        for (int i = 0; i < copy.length; i++)
-            ((BeanContextMembershipListener)copy[i]).childrenRemoved(bcme);
-    }
-
-    /**
-     * protected method called from constructor and readObject to initialize
-     * transient state of BeanContextSupport instance.
-     *
-     * This class uses this method to instantiate inner class listeners used
-     * to monitor PropertyChange and VetoableChange events on children.
-     *
-     * subclasses may envelope this method to add their own initialization
-     * behavior
-     */
-
-    protected synchronized void initialize() {
-        children     = new HashMap(serializable + 1);
-        bcmListeners = new ArrayList(1);
-
-        childPCL = new PropertyChangeListener() {
-
-            /*
-             * this adaptor is used by the BeanContextSupport class to forward
-             * property changes from a child to the BeanContext, avoiding
-             * accidential serialization of the BeanContext by a badly
-             * behaved Serializable child.
-             */
-
-            public void propertyChange(PropertyChangeEvent pce) {
-                BeanContextSupport.this.propertyChange(pce);
-            }
-        };
-
-        childVCL = new VetoableChangeListener() {
-
-            /*
-             * this adaptor is used by the BeanContextSupport class to forward
-             * vetoable changes from a child to the BeanContext, avoiding
-             * accidential serialization of the BeanContext by a badly
-             * behaved Serializable child.
-             */
-
-            public void vetoableChange(PropertyChangeEvent pce) throws PropertyVetoException {
-                BeanContextSupport.this.vetoableChange(pce);
-             }
-        };
-    }
-
-    /**
-     * Gets a copy of the this BeanContext's children.
-     * @return a copy of the current nested children
-     */
-    protected final Object[] copyChildren() {
-        synchronized(children) { return children.keySet().toArray(); }
-    }
-
-    /**
-     * Tests to see if two class objects,
-     * or their names are equal.
-     * @param first the first object
-     * @param second the second object
-     * @return true if equal, false if not
-     */
-    protected static final boolean classEquals(Class first, Class second) {
-        return first.equals(second) || first.getName().equals(second.getName());
-    }
-
-
-    /*
-     * fields
-     */
-
-
-    /**
-     * all accesses to the <code> protected HashMap children </code> field
-     * shall be synchronized on that object.
-     */
-    protected transient HashMap         children;
-
-    private             int             serializable  = 0; // children serializable
-
-    /**
-     * all accesses to the <code> protected ArrayList bcmListeners </code> field
-     * shall be synchronized on that object.
-     */
-    protected transient ArrayList       bcmListeners;
-
-    //
-
-    /**
-     * The current locale of this BeanContext.
-     */
-    protected           Locale          locale;
-
-    /**
-     * A <tt>boolean</tt> indicating if this
-     * instance may now render a GUI.
-     */
-    protected           boolean         okToUseGui;
-
-
-    /**
-     * A <tt>boolean</tt> indicating whether or not
-     * this object is currently in design time mode.
-     */
-    protected           boolean         designTime;
-
-    /*
-     * transient
-     */
-
-    private transient PropertyChangeListener childPCL;
-
-    private transient VetoableChangeListener childVCL;
-
-    private transient boolean                serializing;
-}
diff --git a/ojluni/src/main/java/java/lang/AssertionStatusDirectives.java b/ojluni/src/main/java/java/lang/AssertionStatusDirectives.java
deleted file mode 100755
index 7ae730e..0000000
--- a/ojluni/src/main/java/java/lang/AssertionStatusDirectives.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.
- */
-
-package java.lang;
-
-/**
- * A collection of assertion status directives (such as "enable assertions
- * in package p" or "disable assertions in class c").  This class is used by
- * the JVM to communicate the assertion status directives implied by
- * the <tt>java</tt> command line flags <tt>-enableassertions</tt>
- * (<tt>-ea</tt>) and <tt>-disableassertions</tt> (<tt>-da</tt>).
- *
- * @since  1.4
- * @author Josh Bloch
- */
-class AssertionStatusDirectives {
-    /**
-     * The classes for which assertions are to be enabled or disabled.
-     * The strings in this array are fully qualified class names (for
-     * example,"com.xyz.foo.Bar").
-     */
-    String[] classes;
-
-    /**
-     * A parallel array to <tt>classes</tt>, indicating whether each class
-     * is to have assertions enabled or disabled.  A value of <tt>true</tt>
-     * for <tt>classEnabled[i]</tt> indicates that the class named by
-     * <tt>classes[i]</tt> should have assertions enabled; a value of
-     * <tt>false</tt> indicates that it should have classes disabled.
-     * This array must have the same number of elements as <tt>classes</tt>.
-     *
-     * <p>In the case of conflicting directives for the same class, the
-     * last directive for a given class wins.  In other words, if a string
-     * <tt>s</tt> appears multiple times in the <tt>classes</tt> array
-     * and <tt>i</tt> is the highest integer for which
-     * <tt>classes[i].equals(s)</tt>, then <tt>classEnabled[i]</tt>
-     * indicates whether assertions are to be enabled in class <tt>s</tt>.
-     */
-    boolean[] classEnabled;
-
-    /**
-     * The package-trees for which assertions are to be enabled or disabled.
-     * The strings in this array are compete or partial package names
-     * (for example, "com.xyz" or "com.xyz.foo").
-     */
-    String[] packages;
-
-    /**
-     * A parallel array to <tt>packages</tt>, indicating whether each
-     * package-tree is to have assertions enabled or disabled.  A value of
-     * <tt>true</tt> for <tt>packageEnabled[i]</tt> indicates that the
-     * package-tree named by <tt>packages[i]</tt> should have assertions
-     * enabled; a value of <tt>false</tt> indicates that it should have
-     * assertions disabled.  This array must have the same number of
-     * elements as <tt>packages</tt>.
-     *
-     * In the case of conflicting directives for the same package-tree, the
-     * last directive for a given package-tree wins.  In other words, if a
-     * string <tt>s</tt> appears multiple times in the <tt>packages</tt> array
-     * and <tt>i</tt> is the highest integer for which
-     * <tt>packages[i].equals(s)</tt>, then <tt>packageEnabled[i]</tt>
-     * indicates whether assertions are to be enabled in package-tree
-     * <tt>s</tt>.
-     */
-    boolean[] packageEnabled;
-
-    /**
-     * Whether or not assertions in non-system classes are to be enabled
-     * by default.
-     */
-    boolean deflt;
-}
diff --git a/ojluni/src/main/java/java/lang/BootstrapMethodError.java b/ojluni/src/main/java/java/lang/BootstrapMethodError.java
deleted file mode 100755
index a1509a0..0000000
--- a/ojluni/src/main/java/java/lang/BootstrapMethodError.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package java.lang;
-
-/**
- * Thrown to indicate that an {@code invokedynamic} instruction has
- * failed to find its bootstrap method,
- * or the bootstrap method has failed to provide a
- * {@linkplain java.lang.invoke.CallSite call site} with a {@linkplain java.lang.invoke.CallSite#getTarget target}
- * of the correct {@linkplain java.lang.invoke.MethodHandle#type method type}.
- *
- * @author John Rose, JSR 292 EG
- * @since 1.7
- */
-public class BootstrapMethodError extends LinkageError {
-    private static final long serialVersionUID = 292L;
-
-    /**
-     * Constructs a {@code BootstrapMethodError} with no detail message.
-     */
-    public BootstrapMethodError() {
-        super();
-    }
-
-    /**
-     * Constructs a {@code BootstrapMethodError} with the specified
-     * detail message.
-     *
-     * @param s the detail message.
-     */
-    public BootstrapMethodError(String s) {
-        super(s);
-    }
-
-    /**
-     * Constructs a {@code BootstrapMethodError} with the specified
-     * detail message and cause.
-     *
-     * @param s the detail message.
-     * @param cause the cause, may be {@code null}.
-     */
-    public BootstrapMethodError(String s, Throwable cause) {
-        super(s, cause);
-    }
-
-    /**
-     * Constructs a {@code BootstrapMethodError} with the specified
-     * cause.
-     *
-     * @param cause the cause, may be {@code null}.
-     */
-    public BootstrapMethodError(Throwable cause) {
-        // cf. Throwable(Throwable cause) constructor.
-        super(cause == null ? null : cause.toString());
-        initCause(cause);
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/ClassLoaderHelper.java b/ojluni/src/main/java/java/lang/ClassLoaderHelper.java
deleted file mode 100755
index f9baf8a..0000000
--- a/ojluni/src/main/java/java/lang/ClassLoaderHelper.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2012, 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.
- */
-package java.lang;
-
-import java.io.File;
-
-class ClassLoaderHelper {
-
-    private ClassLoaderHelper() {}
-
-    /**
-     * Returns an alternate path name for the given file
-     * such that if the original pathname did not exist, then the
-     * file may be located at the alternate location.
-     * For most platforms, this behavior is not supported and returns null.
-     */
-    static File mapAlternativeName(File lib) {
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/ClassValue.java b/ojluni/src/main/java/java/lang/ClassValue.java
deleted file mode 100755
index 6a824bc..0000000
--- a/ojluni/src/main/java/java/lang/ClassValue.java
+++ /dev/null
@@ -1,751 +0,0 @@
-/*
- * Copyright (c) 2010, 2011, 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.
- */
-
-package java.lang;
-
-import java.lang.ClassValue.ClassValueMap;
-import java.util.WeakHashMap;
-import java.lang.ref.WeakReference;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import static java.lang.ClassValue.ClassValueMap.probeHomeLocation;
-import static java.lang.ClassValue.ClassValueMap.probeBackupLocations;
-
-/**
- * Lazily associate a computed value with (potentially) every type.
- * For example, if a dynamic language needs to construct a message dispatch
- * table for each class encountered at a message send call site,
- * it can use a {@code ClassValue} to cache information needed to
- * perform the message send quickly, for each class encountered.
- * @author John Rose, JSR 292 EG
- * @since 1.7
- */
-public abstract class ClassValue<T> {
-    /**
-     * Sole constructor.  (For invocation by subclass constructors, typically
-     * implicit.)
-     */
-    protected ClassValue() {
-    }
-
-    /**
-     * Computes the given class's derived value for this {@code ClassValue}.
-     * <p>
-     * This method will be invoked within the first thread that accesses
-     * the value with the {@link #get get} method.
-     * <p>
-     * Normally, this method is invoked at most once per class,
-     * but it may be invoked again if there has been a call to
-     * {@link #remove remove}.
-     * <p>
-     * If this method throws an exception, the corresponding call to {@code get}
-     * will terminate abnormally with that exception, and no class value will be recorded.
-     *
-     * @param type the type whose class value must be computed
-     * @return the newly computed value associated with this {@code ClassValue}, for the given class or interface
-     * @see #get
-     * @see #remove
-     */
-    protected abstract T computeValue(Class<?> type);
-
-    /**
-     * Returns the value for the given class.
-     * If no value has yet been computed, it is obtained by
-     * an invocation of the {@link #computeValue computeValue} method.
-     * <p>
-     * The actual installation of the value on the class
-     * is performed atomically.
-     * At that point, if several racing threads have
-     * computed values, one is chosen, and returned to
-     * all the racing threads.
-     * <p>
-     * The {@code type} parameter is typically a class, but it may be any type,
-     * such as an interface, a primitive type (like {@code int.class}), or {@code void.class}.
-     * <p>
-     * In the absence of {@code remove} calls, a class value has a simple
-     * state diagram:  uninitialized and initialized.
-     * When {@code remove} calls are made,
-     * the rules for value observation are more complex.
-     * See the documentation for {@link #remove remove} for more information.
-     *
-     * @param type the type whose class value must be computed or retrieved
-     * @return the current value associated with this {@code ClassValue}, for the given class or interface
-     * @throws NullPointerException if the argument is null
-     * @see #remove
-     * @see #computeValue
-     */
-    public T get(Class<?> type) {
-        // non-racing this.hashCodeForCache : final int
-        Entry<?>[] cache;
-        Entry<T> e = probeHomeLocation(cache = getCacheCarefully(type), this);
-        // racing e : current value <=> stale value from current cache or from stale cache
-        // invariant:  e is null or an Entry with readable Entry.version and Entry.value
-        if (match(e))
-            // invariant:  No false positive matches.  False negatives are OK if rare.
-            // The key fact that makes this work: if this.version == e.version,
-            // then this thread has a right to observe (final) e.value.
-            return e.value();
-        // The fast path can fail for any of these reasons:
-        // 1. no entry has been computed yet
-        // 2. hash code collision (before or after reduction mod cache.length)
-        // 3. an entry has been removed (either on this type or another)
-        // 4. the GC has somehow managed to delete e.version and clear the reference
-        return getFromBackup(cache, type);
-    }
-
-    /**
-     * Removes the associated value for the given class.
-     * If this value is subsequently {@linkplain #get read} for the same class,
-     * its value will be reinitialized by invoking its {@link #computeValue computeValue} method.
-     * This may result in an additional invocation of the
-     * {@code computeValue} method for the given class.
-     * <p>
-     * In order to explain the interaction between {@code get} and {@code remove} calls,
-     * we must model the state transitions of a class value to take into account
-     * the alternation between uninitialized and initialized states.
-     * To do this, number these states sequentially from zero, and note that
-     * uninitialized (or removed) states are numbered with even numbers,
-     * while initialized (or re-initialized) states have odd numbers.
-     * <p>
-     * When a thread {@code T} removes a class value in state {@code 2N},
-     * nothing happens, since the class value is already uninitialized.
-     * Otherwise, the state is advanced atomically to {@code 2N+1}.
-     * <p>
-     * When a thread {@code T} queries a class value in state {@code 2N},
-     * the thread first attempts to initialize the class value to state {@code 2N+1}
-     * by invoking {@code computeValue} and installing the resulting value.
-     * <p>
-     * When {@code T} attempts to install the newly computed value,
-     * if the state is still at {@code 2N}, the class value will be initialized
-     * with the computed value, advancing it to state {@code 2N+1}.
-     * <p>
-     * Otherwise, whether the new state is even or odd,
-     * {@code T} will discard the newly computed value
-     * and retry the {@code get} operation.
-     * <p>
-     * Discarding and retrying is an important proviso,
-     * since otherwise {@code T} could potentially install
-     * a disastrously stale value.  For example:
-     * <ul>
-     * <li>{@code T} calls {@code CV.get(C)} and sees state {@code 2N}
-     * <li>{@code T} quickly computes a time-dependent value {@code V0} and gets ready to install it
-     * <li>{@code T} is hit by an unlucky paging or scheduling event, and goes to sleep for a long time
-     * <li>...meanwhile, {@code T2} also calls {@code CV.get(C)} and sees state {@code 2N}
-     * <li>{@code T2} quickly computes a similar time-dependent value {@code V1} and installs it on {@code CV.get(C)}
-     * <li>{@code T2} (or a third thread) then calls {@code CV.remove(C)}, undoing {@code T2}'s work
-     * <li> the previous actions of {@code T2} are repeated several times
-     * <li> also, the relevant computed values change over time: {@code V1}, {@code V2}, ...
-     * <li>...meanwhile, {@code T} wakes up and attempts to install {@code V0}; <em>this must fail</em>
-     * </ul>
-     * We can assume in the above scenario that {@code CV.computeValue} uses locks to properly
-     * observe the time-dependent states as it computes {@code V1}, etc.
-     * This does not remove the threat of a stale value, since there is a window of time
-     * between the return of {@code computeValue} in {@code T} and the installation
-     * of the the new value.  No user synchronization is possible during this time.
-     *
-     * @param type the type whose class value must be removed
-     * @throws NullPointerException if the argument is null
-     */
-    public void remove(Class<?> type) {
-        ClassValueMap map = getMap(type);
-        map.removeEntry(this);
-    }
-
-    // Possible functionality for JSR 292 MR 1
-    /*public*/ void put(Class<?> type, T value) {
-        ClassValueMap map = getMap(type);
-        map.changeEntry(this, value);
-    }
-
-    /// --------
-    /// Implementation...
-    /// --------
-
-    /** Return the cache, if it exists, else a dummy empty cache. */
-    private static Entry<?>[] getCacheCarefully(Class<?> type) {
-        // racing type.classValueMap{.cacheArray} : null => new Entry[X] <=> new Entry[Y]
-        ClassValueMap map = type.classValueMap;
-        if (map == null)  return EMPTY_CACHE;
-        Entry<?>[] cache = map.getCache();
-        return cache;
-        // invariant:  returned value is safe to dereference and check for an Entry
-    }
-
-    /** Initial, one-element, empty cache used by all Class instances.  Must never be filled. */
-    private static final Entry<?>[] EMPTY_CACHE = { null };
-
-    /**
-     * Slow tail of ClassValue.get to retry at nearby locations in the cache,
-     * or take a slow lock and check the hash table.
-     * Called only if the first probe was empty or a collision.
-     * This is a separate method, so compilers can process it independently.
-     */
-    private T getFromBackup(Entry<?>[] cache, Class<?> type) {
-        Entry<T> e = probeBackupLocations(cache, this);
-        if (e != null)
-            return e.value();
-        return getFromHashMap(type);
-    }
-
-    // Hack to suppress warnings on the (T) cast, which is a no-op.
-    @SuppressWarnings("unchecked")
-    Entry<T> castEntry(Entry<?> e) { return (Entry<T>) e; }
-
-    /** Called when the fast path of get fails, and cache reprobe also fails.
-     */
-    private T getFromHashMap(Class<?> type) {
-        // The fail-safe recovery is to fall back to the underlying classValueMap.
-        ClassValueMap map = getMap(type);
-        for (;;) {
-            Entry<T> e = map.startEntry(this);
-            if (!e.isPromise())
-                return e.value();
-            try {
-                // Try to make a real entry for the promised version.
-                e = makeEntry(e.version(), computeValue(type));
-            } finally {
-                // Whether computeValue throws or returns normally,
-                // be sure to remove the empty entry.
-                e = map.finishEntry(this, e);
-            }
-            if (e != null)
-                return e.value();
-            // else try again, in case a racing thread called remove (so e == null)
-        }
-    }
-
-    /** Check that e is non-null, matches this ClassValue, and is live. */
-    boolean match(Entry<?> e) {
-        // racing e.version : null (blank) => unique Version token => null (GC-ed version)
-        // non-racing this.version : v1 => v2 => ... (updates are read faithfully from volatile)
-        return (e != null && e.get() == this.version);
-        // invariant:  No false positives on version match.  Null is OK for false negative.
-        // invariant:  If version matches, then e.value is readable (final set in Entry.<init>)
-    }
-
-    /** Internal hash code for accessing Class.classValueMap.cacheArray. */
-    final int hashCodeForCache = nextHashCode.getAndAdd(HASH_INCREMENT) & HASH_MASK;
-
-    /** Value stream for hashCodeForCache.  See similar structure in ThreadLocal. */
-    private static final AtomicInteger nextHashCode = new AtomicInteger();
-
-    /** Good for power-of-two tables.  See similar structure in ThreadLocal. */
-    private static final int HASH_INCREMENT = 0x61c88647;
-
-    /** Mask a hash code to be positive but not too large, to prevent wraparound. */
-    static final int HASH_MASK = (-1 >>> 2);
-
-    /**
-     * Private key for retrieval of this object from ClassValueMap.
-     */
-    static class Identity {
-    }
-    /**
-     * This ClassValue's identity, expressed as an opaque object.
-     * The main object {@code ClassValue.this} is incorrect since
-     * subclasses may override {@code ClassValue.equals}, which
-     * could confuse keys in the ClassValueMap.
-     */
-    final Identity identity = new Identity();
-
-    /**
-     * Current version for retrieving this class value from the cache.
-     * Any number of computeValue calls can be cached in association with one version.
-     * But the version changes when a remove (on any type) is executed.
-     * A version change invalidates all cache entries for the affected ClassValue,
-     * by marking them as stale.  Stale cache entries do not force another call
-     * to computeValue, but they do require a synchronized visit to a backing map.
-     * <p>
-     * All user-visible state changes on the ClassValue take place under
-     * a lock inside the synchronized methods of ClassValueMap.
-     * Readers (of ClassValue.get) are notified of such state changes
-     * when this.version is bumped to a new token.
-     * This variable must be volatile so that an unsynchronized reader
-     * will receive the notification without delay.
-     * <p>
-     * If version were not volatile, one thread T1 could persistently hold onto
-     * a stale value this.value == V1, while while another thread T2 advances
-     * (under a lock) to this.value == V2.  This will typically be harmless,
-     * but if T1 and T2 interact causally via some other channel, such that
-     * T1's further actions are constrained (in the JMM) to happen after
-     * the V2 event, then T1's observation of V1 will be an error.
-     * <p>
-     * The practical effect of making this.version be volatile is that it cannot
-     * be hoisted out of a loop (by an optimizing JIT) or otherwise cached.
-     * Some machines may also require a barrier instruction to execute
-     * before this.version.
-     */
-    private volatile Version<T> version = new Version<>(this);
-    Version<T> version() { return version; }
-    void bumpVersion() { version = new Version<>(this); }
-    static class Version<T> {
-        private final ClassValue<T> classValue;
-        private final Entry<T> promise = new Entry<>(this);
-        Version(ClassValue<T> classValue) { this.classValue = classValue; }
-        ClassValue<T> classValue() { return classValue; }
-        Entry<T> promise() { return promise; }
-        boolean isLive() { return classValue.version() == this; }
-    }
-
-    /** One binding of a value to a class via a ClassValue.
-     *  States are:<ul>
-     *  <li> promise if value == Entry.this
-     *  <li> else dead if version == null
-     *  <li> else stale if version != classValue.version
-     *  <li> else live </ul>
-     *  Promises are never put into the cache; they only live in the
-     *  backing map while a computeValue call is in flight.
-     *  Once an entry goes stale, it can be reset at any time
-     *  into the dead state.
-     */
-    static class Entry<T> extends WeakReference<Version<T>> {
-        final Object value;  // usually of type T, but sometimes (Entry)this
-        Entry(Version<T> version, T value) {
-            super(version);
-            this.value = value;  // for a regular entry, value is of type T
-        }
-        private void assertNotPromise() { assert(!isPromise()); }
-        /** For creating a promise. */
-        Entry(Version<T> version) {
-            super(version);
-            this.value = this;  // for a promise, value is not of type T, but Entry!
-        }
-        /** Fetch the value.  This entry must not be a promise. */
-        @SuppressWarnings("unchecked")  // if !isPromise, type is T
-        T value() { assertNotPromise(); return (T) value; }
-        boolean isPromise() { return value == this; }
-        Version<T> version() { return get(); }
-        ClassValue<T> classValueOrNull() {
-            Version<T> v = version();
-            return (v == null) ? null : v.classValue();
-        }
-        boolean isLive() {
-            Version<T> v = version();
-            if (v == null)  return false;
-            if (v.isLive())  return true;
-            clear();
-            return false;
-        }
-        Entry<T> refreshVersion(Version<T> v2) {
-            assertNotPromise();
-            @SuppressWarnings("unchecked")  // if !isPromise, type is T
-            Entry<T> e2 = new Entry<>(v2, (T) value);
-            clear();
-            // value = null -- caller must drop
-            return e2;
-        }
-        static final Entry<?> DEAD_ENTRY = new Entry<>(null, null);
-    }
-
-    /** Return the backing map associated with this type. */
-    private static ClassValueMap getMap(Class<?> type) {
-        // racing type.classValueMap : null (blank) => unique ClassValueMap
-        // if a null is observed, a map is created (lazily, synchronously, uniquely)
-        // all further access to that map is synchronized
-        ClassValueMap map = type.classValueMap;
-        if (map != null)  return map;
-        return initializeMap(type);
-    }
-
-    private static final Object CRITICAL_SECTION = new Object();
-    private static ClassValueMap initializeMap(Class<?> type) {
-        ClassValueMap map;
-        synchronized (CRITICAL_SECTION) {  // private object to avoid deadlocks
-            // happens about once per type
-            if ((map = type.classValueMap) == null)
-                type.classValueMap = map = new ClassValueMap(type);
-        }
-            return map;
-        }
-
-    static <T> Entry<T> makeEntry(Version<T> explicitVersion, T value) {
-        // Note that explicitVersion might be different from this.version.
-        return new Entry<>(explicitVersion, value);
-
-        // As soon as the Entry is put into the cache, the value will be
-        // reachable via a data race (as defined by the Java Memory Model).
-        // This race is benign, assuming the value object itself can be
-        // read safely by multiple threads.  This is up to the user.
-        //
-        // The entry and version fields themselves can be safely read via
-        // a race because they are either final or have controlled states.
-        // If the pointer from the entry to the version is still null,
-        // or if the version goes immediately dead and is nulled out,
-        // the reader will take the slow path and retry under a lock.
-    }
-
-    // The following class could also be top level and non-public:
-
-    /** A backing map for all ClassValues, relative a single given type.
-     *  Gives a fully serialized "true state" for each pair (ClassValue cv, Class type).
-     *  Also manages an unserialized fast-path cache.
-     */
-    static class ClassValueMap extends WeakHashMap<ClassValue.Identity, Entry<?>> {
-        private final Class<?> type;
-        private Entry<?>[] cacheArray;
-        private int cacheLoad, cacheLoadLimit;
-
-        /** Number of entries initially allocated to each type when first used with any ClassValue.
-         *  It would be pointless to make this much smaller than the Class and ClassValueMap objects themselves.
-         *  Must be a power of 2.
-         */
-        private static final int INITIAL_ENTRIES = 32;
-
-        /** Build a backing map for ClassValues, relative the given type.
-         *  Also, create an empty cache array and install it on the class.
-         */
-        ClassValueMap(Class<?> type) {
-            this.type = type;
-            sizeCache(INITIAL_ENTRIES);
-        }
-
-        Entry<?>[] getCache() { return cacheArray; }
-
-        /** Initiate a query.  Store a promise (placeholder) if there is no value yet. */
-        synchronized
-        <T> Entry<T> startEntry(ClassValue<T> classValue) {
-            @SuppressWarnings("unchecked")  // one map has entries for all value types <T>
-            Entry<T> e = (Entry<T>) get(classValue.identity);
-            Version<T> v = classValue.version();
-            if (e == null) {
-                e = v.promise();
-                // The presence of a promise means that a value is pending for v.
-                // Eventually, finishEntry will overwrite the promise.
-                put(classValue.identity, e);
-                // Note that the promise is never entered into the cache!
-                return e;
-            } else if (e.isPromise()) {
-                // Somebody else has asked the same question.
-                // Let the races begin!
-                if (e.version() != v) {
-                    e = v.promise();
-                    put(classValue.identity, e);
-                }
-                return e;
-            } else {
-                // there is already a completed entry here; report it
-                if (e.version() != v) {
-                    // There is a stale but valid entry here; make it fresh again.
-                    // Once an entry is in the hash table, we don't care what its version is.
-                    e = e.refreshVersion(v);
-                    put(classValue.identity, e);
-                }
-                // Add to the cache, to enable the fast path, next time.
-                checkCacheLoad();
-                addToCache(classValue, e);
-                return e;
-            }
-        }
-
-        /** Finish a query.  Overwrite a matching placeholder.  Drop stale incoming values. */
-        synchronized
-        <T> Entry<T> finishEntry(ClassValue<T> classValue, Entry<T> e) {
-            @SuppressWarnings("unchecked")  // one map has entries for all value types <T>
-            Entry<T> e0 = (Entry<T>) get(classValue.identity);
-            if (e == e0) {
-                // We can get here during exception processing, unwinding from computeValue.
-                assert(e.isPromise());
-                remove(classValue.identity);
-                return null;
-            } else if (e0 != null && e0.isPromise() && e0.version() == e.version()) {
-                // If e0 matches the intended entry, there has not been a remove call
-                // between the previous startEntry and now.  So now overwrite e0.
-                Version<T> v = classValue.version();
-                if (e.version() != v)
-                    e = e.refreshVersion(v);
-                put(classValue.identity, e);
-                // Add to the cache, to enable the fast path, next time.
-                checkCacheLoad();
-                addToCache(classValue, e);
-                return e;
-            } else {
-                // Some sort of mismatch; caller must try again.
-                return null;
-            }
-        }
-
-        /** Remove an entry. */
-        synchronized
-        void removeEntry(ClassValue<?> classValue) {
-            // make all cache elements for this guy go stale:
-            if (remove(classValue.identity) != null) {
-                classValue.bumpVersion();
-                removeStaleEntries(classValue);
-            }
-        }
-
-        /** Change the value for an entry. */
-        synchronized
-        <T> void changeEntry(ClassValue<T> classValue, T value) {
-            @SuppressWarnings("unchecked")  // one map has entries for all value types <T>
-            Entry<T> e0 = (Entry<T>) get(classValue.identity);
-            Version<T> version = classValue.version();
-            if (e0 != null) {
-                if (e0.version() == version && e0.value() == value)
-                    // no value change => no version change needed
-                    return;
-                classValue.bumpVersion();
-                removeStaleEntries(classValue);
-            }
-            Entry<T> e = makeEntry(version, value);
-            put(classValue.identity, e);
-            // Add to the cache, to enable the fast path, next time.
-            checkCacheLoad();
-            addToCache(classValue, e);
-        }
-
-        /// --------
-        /// Cache management.
-        /// --------
-
-        // Statics do not need synchronization.
-
-        /** Load the cache entry at the given (hashed) location. */
-        static Entry<?> loadFromCache(Entry<?>[] cache, int i) {
-            // non-racing cache.length : constant
-            // racing cache[i & (mask)] : null <=> Entry
-            return cache[i & (cache.length-1)];
-            // invariant:  returned value is null or well-constructed (ready to match)
-        }
-
-        /** Look in the cache, at the home location for the given ClassValue. */
-        static <T> Entry<T> probeHomeLocation(Entry<?>[] cache, ClassValue<T> classValue) {
-            return classValue.castEntry(loadFromCache(cache, classValue.hashCodeForCache));
-        }
-
-        /** Given that first probe was a collision, retry at nearby locations. */
-        static <T> Entry<T> probeBackupLocations(Entry<?>[] cache, ClassValue<T> classValue) {
-            if (PROBE_LIMIT <= 0)  return null;
-            // Probe the cache carefully, in a range of slots.
-            int mask = (cache.length-1);
-            int home = (classValue.hashCodeForCache & mask);
-            Entry<?> e2 = cache[home];  // victim, if we find the real guy
-            if (e2 == null) {
-                return null;   // if nobody is at home, no need to search nearby
-            }
-            // assume !classValue.match(e2), but do not assert, because of races
-            int pos2 = -1;
-            for (int i = home + 1; i < home + PROBE_LIMIT; i++) {
-                Entry<?> e = cache[i & mask];
-                if (e == null) {
-                    break;   // only search within non-null runs
-                }
-                if (classValue.match(e)) {
-                    // relocate colliding entry e2 (from cache[home]) to first empty slot
-                    cache[home] = e;
-                    if (pos2 >= 0) {
-                        cache[i & mask] = Entry.DEAD_ENTRY;
-                    } else {
-                        pos2 = i;
-                    }
-                    cache[pos2 & mask] = ((entryDislocation(cache, pos2, e2) < PROBE_LIMIT)
-                                          ? e2                  // put e2 here if it fits
-                                          : Entry.DEAD_ENTRY);
-                    return classValue.castEntry(e);
-                }
-                // Remember first empty slot, if any:
-                if (!e.isLive() && pos2 < 0)  pos2 = i;
-            }
-            return null;
-        }
-
-        /** How far out of place is e? */
-        private static int entryDislocation(Entry<?>[] cache, int pos, Entry<?> e) {
-            ClassValue<?> cv = e.classValueOrNull();
-            if (cv == null)  return 0;  // entry is not live!
-            int mask = (cache.length-1);
-            return (pos - cv.hashCodeForCache) & mask;
-        }
-
-        /// --------
-        /// Below this line all functions are private, and assume synchronized access.
-        /// --------
-
-        private void sizeCache(int length) {
-            assert((length & (length-1)) == 0);  // must be power of 2
-            cacheLoad = 0;
-            cacheLoadLimit = (int) ((double) length * CACHE_LOAD_LIMIT / 100);
-            cacheArray = new Entry<?>[length];
-        }
-
-        /** Make sure the cache load stays below its limit, if possible. */
-        private void checkCacheLoad() {
-            if (cacheLoad >= cacheLoadLimit) {
-                reduceCacheLoad();
-            }
-        }
-        private void reduceCacheLoad() {
-            removeStaleEntries();
-            if (cacheLoad < cacheLoadLimit)
-                return;  // win
-            Entry<?>[] oldCache = getCache();
-            if (oldCache.length > HASH_MASK)
-                return;  // lose
-            sizeCache(oldCache.length * 2);
-            for (Entry<?> e : oldCache) {
-                if (e != null && e.isLive()) {
-                    addToCache(e);
-                }
-            }
-        }
-
-        /** Remove stale entries in the given range.
-         *  Should be executed under a Map lock.
-         */
-        private void removeStaleEntries(Entry<?>[] cache, int begin, int count) {
-            if (PROBE_LIMIT <= 0)  return;
-            int mask = (cache.length-1);
-            int removed = 0;
-            for (int i = begin; i < begin + count; i++) {
-                Entry<?> e = cache[i & mask];
-                if (e == null || e.isLive())
-                    continue;  // skip null and live entries
-                Entry<?> replacement = null;
-                if (PROBE_LIMIT > 1) {
-                    // avoid breaking up a non-null run
-                    replacement = findReplacement(cache, i);
-                }
-                cache[i & mask] = replacement;
-                if (replacement == null)  removed += 1;
-            }
-            cacheLoad = Math.max(0, cacheLoad - removed);
-        }
-
-        /** Clearing a cache slot risks disconnecting following entries
-         *  from the head of a non-null run, which would allow them
-         *  to be found via reprobes.  Find an entry after cache[begin]
-         *  to plug into the hole, or return null if none is needed.
-         */
-        private Entry<?> findReplacement(Entry<?>[] cache, int home1) {
-            Entry<?> replacement = null;
-            int haveReplacement = -1, replacementPos = 0;
-            int mask = (cache.length-1);
-            for (int i2 = home1 + 1; i2 < home1 + PROBE_LIMIT; i2++) {
-                Entry<?> e2 = cache[i2 & mask];
-                if (e2 == null)  break;  // End of non-null run.
-                if (!e2.isLive())  continue;  // Doomed anyway.
-                int dis2 = entryDislocation(cache, i2, e2);
-                if (dis2 == 0)  continue;  // e2 already optimally placed
-                int home2 = i2 - dis2;
-                if (home2 <= home1) {
-                    // e2 can replace entry at cache[home1]
-                    if (home2 == home1) {
-                        // Put e2 exactly where he belongs.
-                        haveReplacement = 1;
-                        replacementPos = i2;
-                        replacement = e2;
-                    } else if (haveReplacement <= 0) {
-                        haveReplacement = 0;
-                        replacementPos = i2;
-                        replacement = e2;
-                    }
-                    // And keep going, so we can favor larger dislocations.
-                }
-            }
-            if (haveReplacement >= 0) {
-                if (cache[(replacementPos+1) & mask] != null) {
-                    // Be conservative, to avoid breaking up a non-null run.
-                    cache[replacementPos & mask] = (Entry<?>) Entry.DEAD_ENTRY;
-                } else {
-                    cache[replacementPos & mask] = null;
-                    cacheLoad -= 1;
-                }
-            }
-            return replacement;
-        }
-
-        /** Remove stale entries in the range near classValue. */
-        private void removeStaleEntries(ClassValue<?> classValue) {
-            removeStaleEntries(getCache(), classValue.hashCodeForCache, PROBE_LIMIT);
-        }
-
-        /** Remove all stale entries, everywhere. */
-        private void removeStaleEntries() {
-            Entry[] cache = getCache();
-            removeStaleEntries(cache, 0, cache.length + PROBE_LIMIT - 1);
-        }
-
-        /** Add the given entry to the cache, in its home location, unless it is out of date. */
-        private <T> void addToCache(Entry<T> e) {
-            ClassValue<T> classValue = e.classValueOrNull();
-            if (classValue != null)
-                addToCache(classValue, e);
-        }
-
-        /** Add the given entry to the cache, in its home location. */
-        private <T> void addToCache(ClassValue<T> classValue, Entry<T> e) {
-            if (PROBE_LIMIT <= 0)  return;  // do not fill cache
-            // Add e to the cache.
-            Entry<?>[] cache = getCache();
-            int mask = (cache.length-1);
-            int home = classValue.hashCodeForCache & mask;
-            Entry<?> e2 = placeInCache(cache, home, e, false);
-            if (e2 == null)  return;  // done
-            if (PROBE_LIMIT > 1) {
-                // try to move e2 somewhere else in his probe range
-                int dis2 = entryDislocation(cache, home, e2);
-                int home2 = home - dis2;
-                for (int i2 = home2; i2 < home2 + PROBE_LIMIT; i2++) {
-                    if (placeInCache(cache, i2 & mask, e2, true) == null) {
-                        return;
-                    }
-                }
-            }
-            // Note:  At this point, e2 is just dropped from the cache.
-        }
-
-        /** Store the given entry.  Update cacheLoad, and return any live victim.
-         *  'Gently' means return self rather than dislocating a live victim.
-         */
-        private Entry<?> placeInCache(Entry<?>[] cache, int pos, Entry<?> e, boolean gently) {
-            Entry<?> e2 = overwrittenEntry(cache[pos]);
-            if (gently && e2 != null) {
-                // do not overwrite a live entry
-                return e;
-            } else {
-                cache[pos] = e;
-                return e2;
-            }
-        }
-
-        /** Note an entry that is about to be overwritten.
-         *  If it is not live, quietly replace it by null.
-         *  If it is an actual null, increment cacheLoad,
-         *  because the caller is going to store something
-         *  in its place.
-         */
-        private <T> Entry<T> overwrittenEntry(Entry<T> e2) {
-            if (e2 == null)  cacheLoad += 1;
-            else if (e2.isLive())  return e2;
-            return null;
-        }
-
-        /** Percent loading of cache before resize. */
-        private static final int CACHE_LOAD_LIMIT = 67;  // 0..100
-        /** Maximum number of probes to attempt. */
-        private static final int PROBE_LIMIT      =  6;       // 1..
-        // N.B.  Set PROBE_LIMIT=0 to disable all fast paths.
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/Terminator.java b/ojluni/src/main/java/java/lang/Terminator.java
deleted file mode 100755
index 1f430f9..0000000
--- a/ojluni/src/main/java/java/lang/Terminator.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 1999, 2001, 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.
- */
-
-package java.lang;
-
-import sun.misc.Signal;
-import sun.misc.SignalHandler;
-
-
-/**
- * Package-private utility class for setting up and tearing down
- * platform-specific support for termination-triggered shutdowns.
- *
- * @author   Mark Reinhold
- * @since    1.3
- */
-
-class Terminator {
-
-    private static SignalHandler handler = null;
-
-    /* Invocations of setup and teardown are already synchronized
-     * on the shutdown lock, so no further synchronization is needed here
-     */
-
-    static void setup() {
-        if (handler != null) return;
-        SignalHandler sh = new SignalHandler() {
-            public void handle(Signal sig) {
-                Shutdown.exit(sig.getNumber() + 0200);
-            }
-        };
-        handler = sh;
-        // When -Xrs is specified the user is responsible for
-        // ensuring that shutdown hooks are run by calling
-        // System.exit()
-        try {
-            Signal.handle(new Signal("HUP"), sh);
-        } catch (IllegalArgumentException e) {
-        }
-        try {
-            Signal.handle(new Signal("INT"), sh);
-        } catch (IllegalArgumentException e) {
-        }
-        try {
-            Signal.handle(new Signal("TERM"), sh);
-        } catch (IllegalArgumentException e) {
-        }
-    }
-
-    static void teardown() {
-        /* The current sun.misc.Signal class does not support
-         * the cancellation of handlers
-         */
-    }
-
-}
diff --git a/ojluni/src/main/java/java/lang/annotation/package-info.java b/ojluni/src/main/java/java/lang/annotation/package-info.java
deleted file mode 100755
index b2b7ec6..0000000
--- a/ojluni/src/main/java/java/lang/annotation/package-info.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2004, 2006, 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.
- */
-
-/**
- * Provides library support for the Java programming language
- * annotation facility.
- *
- * @author Josh Bloch
- * @since 1.5
- */
-package java.lang.annotation;
diff --git a/ojluni/src/main/java/java/lang/invoke/BoundMethodHandle.java b/ojluni/src/main/java/java/lang/invoke/BoundMethodHandle.java
deleted file mode 100755
index dfc6e9d..0000000
--- a/ojluni/src/main/java/java/lang/invoke/BoundMethodHandle.java
+++ /dev/null
@@ -1,857 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, 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.
- */
-
-package java.lang.invoke;
-
-import static com.sun.xml.internal.ws.org.objectweb.asm.Opcodes.*;
-import static java.lang.invoke.LambdaForm.basicTypes;
-import static java.lang.invoke.MethodHandleNatives.Constants.REF_invokeStatic;
-import static java.lang.invoke.MethodHandleStatics.*;
-
-import java.lang.invoke.LambdaForm.Name;
-import java.lang.invoke.LambdaForm.NamedFunction;
-import java.lang.invoke.MethodHandles.Lookup;
-import java.lang.reflect.Field;
-import java.util.Arrays;
-import java.util.HashMap;
-
-import sun.invoke.util.ValueConversions;
-import sun.invoke.util.Wrapper;
-
-import com.sun.xml.internal.ws.org.objectweb.asm.ClassWriter;
-import com.sun.xml.internal.ws.org.objectweb.asm.MethodVisitor;
-import com.sun.xml.internal.ws.org.objectweb.asm.Type;
-
-/**
- * The flavor of method handle which emulates an invoke instruction
- * on a predetermined argument.  The JVM dispatches to the correct method
- * when the handle is created, not when it is invoked.
- *
- * All bound arguments are encapsulated in dedicated species.
- */
-/* non-public */ abstract class BoundMethodHandle extends MethodHandle {
-
-    /* non-public */ BoundMethodHandle(MethodType type, LambdaForm form) {
-        super(type, form);
-    }
-
-    //
-    // BMH API and internals
-    //
-
-    static MethodHandle bindSingle(MethodType type, LambdaForm form, char xtype, Object x) {
-        // for some type signatures, there exist pre-defined concrete BMH classes
-        try {
-            switch (xtype) {
-            case 'L':
-                if (true)  return bindSingle(type, form, x);  // Use known fast path.
-                return (BoundMethodHandle) SpeciesData.EMPTY.extendWithType('L').constructor[0].invokeBasic(type, form, x);
-            case 'I':
-                return (BoundMethodHandle) SpeciesData.EMPTY.extendWithType('I').constructor[0].invokeBasic(type, form, ValueConversions.widenSubword(x));
-            case 'J':
-                return (BoundMethodHandle) SpeciesData.EMPTY.extendWithType('J').constructor[0].invokeBasic(type, form, (long) x);
-            case 'F':
-                return (BoundMethodHandle) SpeciesData.EMPTY.extendWithType('F').constructor[0].invokeBasic(type, form, (float) x);
-            case 'D':
-                return (BoundMethodHandle) SpeciesData.EMPTY.extendWithType('D').constructor[0].invokeBasic(type, form, (double) x);
-            default : throw new InternalError("unexpected xtype: " + xtype);
-            }
-        } catch (Throwable t) {
-            throw newInternalError(t);
-        }
-    }
-
-    static MethodHandle bindSingle(MethodType type, LambdaForm form, Object x) {
-            return new Species_L(type, form, x);
-    }
-
-    MethodHandle cloneExtend(MethodType type, LambdaForm form, char xtype, Object x) {
-        try {
-            switch (xtype) {
-            case 'L': return cloneExtendL(type, form, x);
-            case 'I': return cloneExtendI(type, form, ValueConversions.widenSubword(x));
-            case 'J': return cloneExtendJ(type, form, (long) x);
-            case 'F': return cloneExtendF(type, form, (float) x);
-            case 'D': return cloneExtendD(type, form, (double) x);
-            }
-        } catch (Throwable t) {
-            throw newInternalError(t);
-        }
-        throw new InternalError("unexpected type: " + xtype);
-    }
-
-    @Override
-    MethodHandle bindArgument(int pos, char basicType, Object value) {
-        MethodType type = type().dropParameterTypes(pos, pos+1);
-        LambdaForm form = internalForm().bind(1+pos, speciesData());
-        return cloneExtend(type, form, basicType, value);
-    }
-
-    @Override
-    MethodHandle dropArguments(MethodType srcType, int pos, int drops) {
-        LambdaForm form = internalForm().addArguments(pos, srcType.parameterList().subList(pos, pos+drops));
-        try {
-             return clone(srcType, form);
-         } catch (Throwable t) {
-             throw newInternalError(t);
-         }
-    }
-
-    @Override
-    MethodHandle permuteArguments(MethodType newType, int[] reorder) {
-        try {
-             return clone(newType, form.permuteArguments(1, reorder, basicTypes(newType.parameterList())));
-         } catch (Throwable t) {
-             throw newInternalError(t);
-         }
-    }
-
-    static final String EXTENSION_TYPES = "LIJFD";
-    static final byte INDEX_L = 0, INDEX_I = 1, INDEX_J = 2, INDEX_F = 3, INDEX_D = 4;
-    static byte extensionIndex(char type) {
-        int i = EXTENSION_TYPES.indexOf(type);
-        if (i < 0)  throw new InternalError();
-        return (byte) i;
-    }
-
-    /**
-     * Return the {@link SpeciesData} instance representing this BMH species. All subclasses must provide a
-     * static field containing this value, and they must accordingly implement this method.
-     */
-    protected abstract SpeciesData speciesData();
-
-    @Override
-    final Object internalProperties() {
-        return "/BMH="+internalValues();
-    }
-
-    @Override
-    final Object internalValues() {
-        Object[] boundValues = new Object[speciesData().fieldCount()];
-        for (int i = 0; i < boundValues.length; ++i) {
-            boundValues[i] = arg(i);
-        }
-        return Arrays.asList(boundValues);
-    }
-
-    public final Object arg(int i) {
-        try {
-            switch (speciesData().fieldType(i)) {
-            case 'L': return argL(i);
-            case 'I': return argI(i);
-            case 'F': return argF(i);
-            case 'D': return argD(i);
-            case 'J': return argJ(i);
-            }
-        } catch (Throwable ex) {
-            throw newInternalError(ex);
-        }
-        throw new InternalError("unexpected type: " + speciesData().types+"."+i);
-    }
-    public final Object argL(int i) throws Throwable { return          speciesData().getters[i].invokeBasic(this); }
-    public final int    argI(int i) throws Throwable { return (int)    speciesData().getters[i].invokeBasic(this); }
-    public final float  argF(int i) throws Throwable { return (float)  speciesData().getters[i].invokeBasic(this); }
-    public final double argD(int i) throws Throwable { return (double) speciesData().getters[i].invokeBasic(this); }
-    public final long   argJ(int i) throws Throwable { return (long)   speciesData().getters[i].invokeBasic(this); }
-
-    //
-    // cloning API
-    //
-
-    public abstract BoundMethodHandle clone(MethodType mt, LambdaForm lf) throws Throwable;
-    public abstract BoundMethodHandle cloneExtendL(MethodType mt, LambdaForm lf, Object narg) throws Throwable;
-    public abstract BoundMethodHandle cloneExtendI(MethodType mt, LambdaForm lf, int    narg) throws Throwable;
-    public abstract BoundMethodHandle cloneExtendJ(MethodType mt, LambdaForm lf, long   narg) throws Throwable;
-    public abstract BoundMethodHandle cloneExtendF(MethodType mt, LambdaForm lf, float  narg) throws Throwable;
-    public abstract BoundMethodHandle cloneExtendD(MethodType mt, LambdaForm lf, double narg) throws Throwable;
-
-    // The following is a grossly irregular hack:
-    @Override MethodHandle reinvokerTarget() {
-        try {
-            return (MethodHandle) argL(0);
-        } catch (Throwable ex) {
-            throw newInternalError(ex);
-        }
-    }
-
-    //
-    // concrete BMH classes required to close bootstrap loops
-    //
-
-    private  // make it private to force users to access the enclosing class first
-    static final class Species_L extends BoundMethodHandle {
-        final Object argL0;
-        public Species_L(MethodType mt, LambdaForm lf, Object argL0) {
-            super(mt, lf);
-            this.argL0 = argL0;
-        }
-        // The following is a grossly irregular hack:
-        @Override MethodHandle reinvokerTarget() { return (MethodHandle) argL0; }
-        @Override
-        public SpeciesData speciesData() {
-            return SPECIES_DATA;
-        }
-        public static final SpeciesData SPECIES_DATA = SpeciesData.getForClass("L", Species_L.class);
-        @Override
-        public final BoundMethodHandle clone(MethodType mt, LambdaForm lf) throws Throwable {
-            return new Species_L(mt, lf, argL0);
-        }
-        @Override
-        public final BoundMethodHandle cloneExtendL(MethodType mt, LambdaForm lf, Object narg) throws Throwable {
-            return (BoundMethodHandle) SPECIES_DATA.extendWithIndex(INDEX_L).constructor[0].invokeBasic(mt, lf, argL0, narg);
-        }
-        @Override
-        public final BoundMethodHandle cloneExtendI(MethodType mt, LambdaForm lf, int narg) throws Throwable {
-            return (BoundMethodHandle) SPECIES_DATA.extendWithIndex(INDEX_I).constructor[0].invokeBasic(mt, lf, argL0, narg);
-        }
-        @Override
-        public final BoundMethodHandle cloneExtendJ(MethodType mt, LambdaForm lf, long narg) throws Throwable {
-            return (BoundMethodHandle) SPECIES_DATA.extendWithIndex(INDEX_J).constructor[0].invokeBasic(mt, lf, argL0, narg);
-        }
-        @Override
-        public final BoundMethodHandle cloneExtendF(MethodType mt, LambdaForm lf, float narg) throws Throwable {
-            return (BoundMethodHandle) SPECIES_DATA.extendWithIndex(INDEX_F).constructor[0].invokeBasic(mt, lf, argL0, narg);
-        }
-        @Override
-        public final BoundMethodHandle cloneExtendD(MethodType mt, LambdaForm lf, double narg) throws Throwable {
-            return (BoundMethodHandle) SPECIES_DATA.extendWithIndex(INDEX_D).constructor[0].invokeBasic(mt, lf, argL0, narg);
-        }
-    }
-
-/*
-    static final class Species_LL extends BoundMethodHandle {
-        final Object argL0;
-        final Object argL1;
-        public Species_LL(MethodType mt, LambdaForm lf, Object argL0, Object argL1) {
-            super(mt, lf);
-            this.argL0 = argL0;
-            this.argL1 = argL1;
-        }
-        @Override
-        public SpeciesData speciesData() {
-            return SPECIES_DATA;
-        }
-        public static final SpeciesData SPECIES_DATA = SpeciesData.getForClass("LL", Species_LL.class);
-        @Override
-        public final BoundMethodHandle clone(MethodType mt, LambdaForm lf) throws Throwable {
-            return new Species_LL(mt, lf, argL0, argL1);
-        }
-        @Override
-        public final BoundMethodHandle cloneExtendL(MethodType mt, LambdaForm lf, Object narg) throws Throwable {
-            return (BoundMethodHandle) SPECIES_DATA.extendWithIndex(INDEX_L).constructor[0].invokeBasic(mt, lf, argL0, argL1, narg);
-        }
-        @Override
-        public final BoundMethodHandle cloneExtendI(MethodType mt, LambdaForm lf, int narg) throws Throwable {
-            return (BoundMethodHandle) SPECIES_DATA.extendWithIndex(INDEX_I).constructor[0].invokeBasic(mt, lf, argL0, argL1, narg);
-        }
-        @Override
-        public final BoundMethodHandle cloneExtendJ(MethodType mt, LambdaForm lf, long narg) throws Throwable {
-            return (BoundMethodHandle) SPECIES_DATA.extendWithIndex(INDEX_J).constructor[0].invokeBasic(mt, lf, argL0, argL1, narg);
-        }
-        @Override
-        public final BoundMethodHandle cloneExtendF(MethodType mt, LambdaForm lf, float narg) throws Throwable {
-            return (BoundMethodHandle) SPECIES_DATA.extendWithIndex(INDEX_F).constructor[0].invokeBasic(mt, lf, argL0, argL1, narg);
-        }
-        @Override
-        public final BoundMethodHandle cloneExtendD(MethodType mt, LambdaForm lf, double narg) throws Throwable {
-            return (BoundMethodHandle) SPECIES_DATA.extendWithIndex(INDEX_D).constructor[0].invokeBasic(mt, lf, argL0, argL1, narg);
-        }
-    }
-
-    static final class Species_JL extends BoundMethodHandle {
-        final long argJ0;
-        final Object argL1;
-        public Species_JL(MethodType mt, LambdaForm lf, long argJ0, Object argL1) {
-            super(mt, lf);
-            this.argJ0 = argJ0;
-            this.argL1 = argL1;
-        }
-        @Override
-        public SpeciesData speciesData() {
-            return SPECIES_DATA;
-        }
-        public static final SpeciesData SPECIES_DATA = SpeciesData.getForClass("JL", Species_JL.class);
-        @Override public final long   argJ0() { return argJ0; }
-        @Override public final Object argL1() { return argL1; }
-        @Override
-        public final BoundMethodHandle clone(MethodType mt, LambdaForm lf) throws Throwable {
-            return new Species_JL(mt, lf, argJ0, argL1);
-        }
-        @Override
-        public final BoundMethodHandle cloneExtendL(MethodType mt, LambdaForm lf, Object narg) throws Throwable {
-            return (BoundMethodHandle) SPECIES_DATA.extendWithIndex(INDEX_L).constructor[0].invokeBasic(mt, lf, argJ0, argL1, narg);
-        }
-        @Override
-        public final BoundMethodHandle cloneExtendI(MethodType mt, LambdaForm lf, int narg) throws Throwable {
-            return (BoundMethodHandle) SPECIES_DATA.extendWithIndex(INDEX_I).constructor[0].invokeBasic(mt, lf, argJ0, argL1, narg);
-        }
-        @Override
-        public final BoundMethodHandle cloneExtendJ(MethodType mt, LambdaForm lf, long narg) throws Throwable {
-            return (BoundMethodHandle) SPECIES_DATA.extendWithIndex(INDEX_J).constructor[0].invokeBasic(mt, lf, argJ0, argL1, narg);
-        }
-        @Override
-        public final BoundMethodHandle cloneExtendF(MethodType mt, LambdaForm lf, float narg) throws Throwable {
-            return (BoundMethodHandle) SPECIES_DATA.extendWithIndex(INDEX_F).constructor[0].invokeBasic(mt, lf, argJ0, argL1, narg);
-        }
-        @Override
-        public final BoundMethodHandle cloneExtendD(MethodType mt, LambdaForm lf, double narg) throws Throwable {
-            return (BoundMethodHandle) SPECIES_DATA.extendWithIndex(INDEX_D).constructor[0].invokeBasic(mt, lf, argJ0, argL1, narg);
-        }
-    }
-*/
-
-    //
-    // BMH species meta-data
-    //
-
-    /**
-     * Meta-data wrapper for concrete BMH classes.
-     */
-    static class SpeciesData {
-        final String                             types;
-        final Class<? extends BoundMethodHandle> clazz;
-        // Bootstrapping requires circular relations MH -> BMH -> SpeciesData -> MH
-        // Therefore, we need a non-final link in the chain.  Use array elements.
-        final MethodHandle[]                     constructor;
-        final MethodHandle[]                     getters;
-        final SpeciesData[]                      extensions;
-
-        public int fieldCount() {
-            return types.length();
-        }
-        public char fieldType(int i) {
-            return types.charAt(i);
-        }
-
-        public String toString() {
-            return "SpeciesData["+(isPlaceholder() ? "<placeholder>" : clazz.getSimpleName())+":"+types+"]";
-        }
-
-        /**
-         * Return a {@link LambdaForm.Name} containing a {@link LambdaForm.NamedFunction} that
-         * represents a MH bound to a generic invoker, which in turn forwards to the corresponding
-         * getter.
-         */
-        Name getterName(Name mhName, int i) {
-            MethodHandle mh = getters[i];
-            assert(mh != null) : this+"."+i;
-            return new Name(mh, mhName);
-        }
-
-        static final SpeciesData EMPTY = new SpeciesData("", BoundMethodHandle.class);
-
-        private SpeciesData(String types, Class<? extends BoundMethodHandle> clazz) {
-            this.types = types;
-            this.clazz = clazz;
-            if (!INIT_DONE) {
-                this.constructor = new MethodHandle[1];
-                this.getters = new MethodHandle[types.length()];
-            } else {
-                this.constructor = Factory.makeCtors(clazz, types, null);
-                this.getters = Factory.makeGetters(clazz, types, null);
-            }
-            this.extensions = new SpeciesData[EXTENSION_TYPES.length()];
-        }
-
-        private void initForBootstrap() {
-            assert(!INIT_DONE);
-            if (constructor[0] == null) {
-                Factory.makeCtors(clazz, types, this.constructor);
-                Factory.makeGetters(clazz, types, this.getters);
-            }
-        }
-
-        private SpeciesData(String types) {
-            // Placeholder only.
-            this.types = types;
-            this.clazz = null;
-            this.constructor = null;
-            this.getters = null;
-            this.extensions = null;
-        }
-        private boolean isPlaceholder() { return clazz == null; }
-
-        private static final HashMap<String, SpeciesData> CACHE = new HashMap<>();
-        private static final boolean INIT_DONE;  // set after <clinit> finishes...
-
-        SpeciesData extendWithType(char type) {
-            int i = extensionIndex(type);
-            SpeciesData d = extensions[i];
-            if (d != null)  return d;
-            extensions[i] = d = get(types+type);
-            return d;
-        }
-
-        SpeciesData extendWithIndex(byte index) {
-            SpeciesData d = extensions[index];
-            if (d != null)  return d;
-            extensions[index] = d = get(types+EXTENSION_TYPES.charAt(index));
-            return d;
-        }
-
-        private static SpeciesData get(String types) {
-            // Acquire cache lock for query.
-            SpeciesData d = lookupCache(types);
-            if (!d.isPlaceholder())
-                return d;
-            synchronized (d) {
-                // Use synch. on the placeholder to prevent multiple instantiation of one species.
-                // Creating this class forces a recursive call to getForClass.
-                if (lookupCache(types).isPlaceholder())
-                    Factory.generateConcreteBMHClass(types);
-            }
-            // Reacquire cache lock.
-            d = lookupCache(types);
-            // Class loading must have upgraded the cache.
-            assert(d != null && !d.isPlaceholder());
-            return d;
-        }
-        static SpeciesData getForClass(String types, Class<? extends BoundMethodHandle> clazz) {
-            // clazz is a new class which is initializing its SPECIES_DATA field
-            return updateCache(types, new SpeciesData(types, clazz));
-        }
-        private static synchronized SpeciesData lookupCache(String types) {
-            SpeciesData d = CACHE.get(types);
-            if (d != null)  return d;
-            d = new SpeciesData(types);
-            assert(d.isPlaceholder());
-            CACHE.put(types, d);
-            return d;
-        }
-        private static synchronized SpeciesData updateCache(String types, SpeciesData d) {
-            SpeciesData d2;
-            assert((d2 = CACHE.get(types)) == null || d2.isPlaceholder());
-            assert(!d.isPlaceholder());
-            CACHE.put(types, d);
-            return d;
-        }
-
-        static {
-            // pre-fill the BMH speciesdata cache with BMH's inner classes
-            final Class<BoundMethodHandle> rootCls = BoundMethodHandle.class;
-            SpeciesData d0 = BoundMethodHandle.SPECIES_DATA;  // trigger class init
-            assert(d0 == null || d0 == lookupCache("")) : d0;
-            try {
-                for (Class<?> c : rootCls.getDeclaredClasses()) {
-                    if (rootCls.isAssignableFrom(c)) {
-                        final Class<? extends BoundMethodHandle> cbmh = c.asSubclass(BoundMethodHandle.class);
-                        SpeciesData d = Factory.speciesDataFromConcreteBMHClass(cbmh);
-                        assert(d != null) : cbmh.getName();
-                        assert(d.clazz == cbmh);
-                        assert(d == lookupCache(d.types));
-                    }
-                }
-            } catch (Throwable e) {
-                throw newInternalError(e);
-            }
-
-            for (SpeciesData d : CACHE.values()) {
-                d.initForBootstrap();
-            }
-            // Note:  Do not simplify this, because INIT_DONE must not be
-            // a compile-time constant during bootstrapping.
-            INIT_DONE = Boolean.TRUE;
-        }
-    }
-
-    static SpeciesData getSpeciesData(String types) {
-        return SpeciesData.get(types);
-    }
-
-    /**
-     * Generation of concrete BMH classes.
-     *
-     * A concrete BMH species is fit for binding a number of values adhering to a
-     * given type pattern. Reference types are erased.
-     *
-     * BMH species are cached by type pattern.
-     *
-     * A BMH species has a number of fields with the concrete (possibly erased) types of
-     * bound values. Setters are provided as an API in BMH. Getters are exposed as MHs,
-     * which can be included as names in lambda forms.
-     */
-    static class Factory {
-
-        static final String JLO_SIG  = "Ljava/lang/Object;";
-        static final String JLS_SIG  = "Ljava/lang/String;";
-        static final String JLC_SIG  = "Ljava/lang/Class;";
-        static final String MH       = "java/lang/invoke/MethodHandle";
-        static final String MH_SIG   = "L"+MH+";";
-        static final String BMH      = "java/lang/invoke/BoundMethodHandle";
-        static final String BMH_SIG  = "L"+BMH+";";
-        static final String SPECIES_DATA     = "java/lang/invoke/BoundMethodHandle$SpeciesData";
-        static final String SPECIES_DATA_SIG = "L"+SPECIES_DATA+";";
-
-        static final String SPECIES_PREFIX_NAME = "Species_";
-        static final String SPECIES_PREFIX_PATH = BMH + "$" + SPECIES_PREFIX_NAME;
-
-        static final String BMHSPECIES_DATA_EWI_SIG = "(B)" + SPECIES_DATA_SIG;
-        static final String BMHSPECIES_DATA_GFC_SIG = "(" + JLS_SIG + JLC_SIG + ")" + SPECIES_DATA_SIG;
-        static final String MYSPECIES_DATA_SIG = "()" + SPECIES_DATA_SIG;
-        static final String VOID_SIG   = "()V";
-
-        static final String SIG_INCIPIT = "(Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;";
-
-        static final Class<?>[] TYPES = new Class<?>[] { Object.class, int.class, long.class, float.class, double.class };
-
-        static final String[] E_THROWABLE = new String[] { "java/lang/Throwable" };
-
-        /**
-         * Generate a concrete subclass of BMH for a given combination of bound types.
-         *
-         * A concrete BMH species adheres to the following schema:
-         *
-         * <pre>
-         * class Species_<<types>> extends BoundMethodHandle {
-         *     <<fields>>
-         *     final SpeciesData speciesData() { return SpeciesData.get("<<types>>"); }
-         * }
-         * </pre>
-         *
-         * The {@code <<types>>} signature is precisely the string that is passed to this
-         * method.
-         *
-         * The {@code <<fields>>} section consists of one field definition per character in
-         * the type signature, adhering to the naming schema described in the definition of
-         * {@link #makeFieldName()}.
-         *
-         * For example, a concrete BMH species for two reference and one integral bound values
-         * would have the following shape:
-         *
-         * <pre>
-         * class BoundMethodHandle { ... private static
-         * final class Species_LLI extends BoundMethodHandle {
-         *     final Object argL0;
-         *     final Object argL1;
-         *     final int argI2;
-         *     public Species_LLI(MethodType mt, LambdaForm lf, Object argL0, Object argL1, int argI2) {
-         *         super(mt, lf);
-         *         this.argL0 = argL0;
-         *         this.argL1 = argL1;
-         *         this.argI2 = argI2;
-         *     }
-         *     public final SpeciesData speciesData() { return SPECIES_DATA; }
-         *     public static final SpeciesData SPECIES_DATA = SpeciesData.getForClass("LLI", Species_LLI.class);
-         *     public final BoundMethodHandle clone(MethodType mt, LambdaForm lf) {
-         *         return SPECIES_DATA.constructor[0].invokeBasic(mt, lf, argL0, argL1, argI2);
-         *     }
-         *     public final BoundMethodHandle cloneExtendL(MethodType mt, LambdaForm lf, Object narg) {
-         *         return SPECIES_DATA.extendWithIndex(INDEX_L).constructor[0].invokeBasic(mt, lf, argL0, argL1, argI2, narg);
-         *     }
-         *     public final BoundMethodHandle cloneExtendI(MethodType mt, LambdaForm lf, int narg) {
-         *         return SPECIES_DATA.extendWithIndex(INDEX_I).constructor[0].invokeBasic(mt, lf, argL0, argL1, argI2, narg);
-         *     }
-         *     public final BoundMethodHandle cloneExtendJ(MethodType mt, LambdaForm lf, long narg) {
-         *         return SPECIES_DATA.extendWithIndex(INDEX_J).constructor[0].invokeBasic(mt, lf, argL0, argL1, argI2, narg);
-         *     }
-         *     public final BoundMethodHandle cloneExtendF(MethodType mt, LambdaForm lf, float narg) {
-         *         return SPECIES_DATA.extendWithIndex(INDEX_F).constructor[0].invokeBasic(mt, lf, argL0, argL1, argI2, narg);
-         *     }
-         *     public final BoundMethodHandle cloneExtendD(MethodType mt, LambdaForm lf, double narg) {
-         *         return SPECIES_DATA.extendWithIndex(INDEX_D).constructor[0].invokeBasic(mt, lf, argL0, argL1, argI2, narg);
-         *     }
-         * }
-         * </pre>
-         *
-         * @param types the type signature, wherein reference types are erased to 'L'
-         * @return the generated concrete BMH class
-         */
-        static Class<? extends BoundMethodHandle> generateConcreteBMHClass(String types) {
-            final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS + ClassWriter.COMPUTE_FRAMES);
-
-            final String className  = SPECIES_PREFIX_PATH + types;
-            final String sourceFile = SPECIES_PREFIX_NAME + types;
-            cw.visit(V1_6, ACC_PUBLIC + ACC_FINAL + ACC_SUPER, className, null, BMH, null);
-            cw.visitSource(sourceFile, null);
-
-            // emit static types and SPECIES_DATA fields
-            cw.visitField(ACC_PUBLIC + ACC_STATIC, "SPECIES_DATA", SPECIES_DATA_SIG, null, null).visitEnd();
-
-            // emit bound argument fields
-            for (int i = 0; i < types.length(); ++i) {
-                final char t = types.charAt(i);
-                final String fieldName = makeFieldName(types, i);
-                final String fieldDesc = t == 'L' ? JLO_SIG : String.valueOf(t);
-                cw.visitField(ACC_FINAL, fieldName, fieldDesc, null, null).visitEnd();
-            }
-
-            MethodVisitor mv;
-
-            // emit constructor
-            mv = cw.visitMethod(ACC_PUBLIC, "<init>", makeSignature(types, true), null, null);
-            mv.visitCode();
-            mv.visitVarInsn(ALOAD, 0);
-            mv.visitVarInsn(ALOAD, 1);
-            mv.visitVarInsn(ALOAD, 2);
-
-            mv.visitMethodInsn(INVOKESPECIAL, BMH, "<init>", makeSignature("", true));
-
-            for (int i = 0, j = 0; i < types.length(); ++i, ++j) {
-                // i counts the arguments, j counts corresponding argument slots
-                char t = types.charAt(i);
-                mv.visitVarInsn(ALOAD, 0);
-                mv.visitVarInsn(typeLoadOp(t), j + 3); // parameters start at 3
-                mv.visitFieldInsn(PUTFIELD, className, makeFieldName(types, i), typeSig(t));
-                if (t == 'J' || t == 'D') {
-                    ++j; // adjust argument register access
-                }
-            }
-
-            mv.visitInsn(RETURN);
-            mv.visitMaxs(0, 0);
-            mv.visitEnd();
-
-            // emit implementation of reinvokerTarget()
-            mv = cw.visitMethod(ACC_PUBLIC + ACC_FINAL, "reinvokerTarget", "()" + MH_SIG, null, null);
-            mv.visitCode();
-            mv.visitVarInsn(ALOAD, 0);
-            mv.visitFieldInsn(GETFIELD, className, "argL0", JLO_SIG);
-            mv.visitTypeInsn(CHECKCAST, MH);
-            mv.visitInsn(ARETURN);
-            mv.visitMaxs(0, 0);
-            mv.visitEnd();
-
-            // emit implementation of speciesData()
-            mv = cw.visitMethod(ACC_PUBLIC + ACC_FINAL, "speciesData", MYSPECIES_DATA_SIG, null, null);
-            mv.visitCode();
-            mv.visitFieldInsn(GETSTATIC, className, "SPECIES_DATA", SPECIES_DATA_SIG);
-            mv.visitInsn(ARETURN);
-            mv.visitMaxs(0, 0);
-            mv.visitEnd();
-
-            // emit clone()
-            mv = cw.visitMethod(ACC_PUBLIC + ACC_FINAL, "clone", makeSignature("", false), null, E_THROWABLE);
-            mv.visitCode();
-            // return speciesData().constructor[0].invokeBasic(mt, lf, argL0, ...)
-            // obtain constructor
-            mv.visitVarInsn(ALOAD, 0);
-            mv.visitFieldInsn(GETSTATIC, className, "SPECIES_DATA", SPECIES_DATA_SIG);
-            mv.visitFieldInsn(GETFIELD, SPECIES_DATA, "constructor", "[" + MH_SIG);
-            mv.visitInsn(ICONST_0);
-            mv.visitInsn(AALOAD);
-            // load mt, lf
-            mv.visitVarInsn(ALOAD, 1);
-            mv.visitVarInsn(ALOAD, 2);
-            // put fields on the stack
-            emitPushFields(types, className, mv);
-            // finally, invoke the constructor and return
-            mv.visitMethodInsn(INVOKEVIRTUAL, MH, "invokeBasic", makeSignature(types, false));
-            mv.visitInsn(ARETURN);
-            mv.visitMaxs(0, 0);
-            mv.visitEnd();
-
-            // for each type, emit cloneExtendT()
-            for (Class<?> c : TYPES) {
-                char t = Wrapper.basicTypeChar(c);
-                mv = cw.visitMethod(ACC_PUBLIC + ACC_FINAL, "cloneExtend" + t, makeSignature(String.valueOf(t), false), null, E_THROWABLE);
-                mv.visitCode();
-                // return SPECIES_DATA.extendWithIndex(extensionIndex(t)).constructor[0].invokeBasic(mt, lf, argL0, ..., narg)
-                // obtain constructor
-                mv.visitFieldInsn(GETSTATIC, className, "SPECIES_DATA", SPECIES_DATA_SIG);
-                int iconstInsn = ICONST_0 + extensionIndex(t);
-                assert(iconstInsn <= ICONST_5);
-                mv.visitInsn(iconstInsn);
-                mv.visitMethodInsn(INVOKEVIRTUAL, SPECIES_DATA, "extendWithIndex", BMHSPECIES_DATA_EWI_SIG);
-                mv.visitFieldInsn(GETFIELD, SPECIES_DATA, "constructor", "[" + MH_SIG);
-                mv.visitInsn(ICONST_0);
-                mv.visitInsn(AALOAD);
-                // load mt, lf
-                mv.visitVarInsn(ALOAD, 1);
-                mv.visitVarInsn(ALOAD, 2);
-                // put fields on the stack
-                emitPushFields(types, className, mv);
-                // put narg on stack
-                mv.visitVarInsn(typeLoadOp(t), 3);
-                // finally, invoke the constructor and return
-                mv.visitMethodInsn(INVOKEVIRTUAL, MH, "invokeBasic", makeSignature(types + t, false));
-                mv.visitInsn(ARETURN);
-                mv.visitMaxs(0, 0);
-                mv.visitEnd();
-            }
-
-            // emit class initializer
-            mv = cw.visitMethod(ACC_PUBLIC | ACC_STATIC, "<clinit>", VOID_SIG, null, null);
-            mv.visitCode();
-            mv.visitLdcInsn(types);
-            mv.visitLdcInsn(Type.getObjectType(className));
-            mv.visitMethodInsn(INVOKESTATIC, SPECIES_DATA, "getForClass", BMHSPECIES_DATA_GFC_SIG);
-            mv.visitFieldInsn(PUTSTATIC, className, "SPECIES_DATA", SPECIES_DATA_SIG);
-            mv.visitInsn(RETURN);
-            mv.visitMaxs(0, 0);
-            mv.visitEnd();
-
-            cw.visitEnd();
-
-            // load class
-            final byte[] classFile = cw.toByteArray();
-            InvokerBytecodeGenerator.maybeDump(className, classFile);
-            Class<? extends BoundMethodHandle> bmhClass =
-                //UNSAFE.defineAnonymousClass(BoundMethodHandle.class, classFile, null).asSubclass(BoundMethodHandle.class);
-                UNSAFE.defineClass(className, classFile, 0, classFile.length).asSubclass(BoundMethodHandle.class);
-            UNSAFE.ensureClassInitialized(bmhClass);
-
-            return bmhClass;
-        }
-
-        private static int typeLoadOp(char t) {
-            switch (t) {
-            case 'L': return ALOAD;
-            case 'I': return ILOAD;
-            case 'J': return LLOAD;
-            case 'F': return FLOAD;
-            case 'D': return DLOAD;
-            default : throw new InternalError("unrecognized type " + t);
-            }
-        }
-
-        private static void emitPushFields(String types, String className, MethodVisitor mv) {
-            for (int i = 0; i < types.length(); ++i) {
-                char tc = types.charAt(i);
-                mv.visitVarInsn(ALOAD, 0);
-                mv.visitFieldInsn(GETFIELD, className, makeFieldName(types, i), typeSig(tc));
-            }
-        }
-
-        static String typeSig(char t) {
-            return t == 'L' ? JLO_SIG : String.valueOf(t);
-        }
-
-        //
-        // Getter MH generation.
-        //
-
-        private static MethodHandle makeGetter(Class<?> cbmhClass, String types, int index) {
-            String fieldName = makeFieldName(types, index);
-            Class<?> fieldType = Wrapper.forBasicType(types.charAt(index)).primitiveType();
-            try {
-                return LOOKUP.findGetter(cbmhClass, fieldName, fieldType);
-            } catch (NoSuchFieldException | IllegalAccessException e) {
-                throw newInternalError(e);
-            }
-        }
-
-        static MethodHandle[] makeGetters(Class<?> cbmhClass, String types, MethodHandle[] mhs) {
-            if (mhs == null)  mhs = new MethodHandle[types.length()];
-            for (int i = 0; i < mhs.length; ++i) {
-                mhs[i] = makeGetter(cbmhClass, types, i);
-                assert(mhs[i].internalMemberName().getDeclaringClass() == cbmhClass);
-            }
-            return mhs;
-        }
-
-        static MethodHandle[] makeCtors(Class<? extends BoundMethodHandle> cbmh, String types, MethodHandle mhs[]) {
-            if (mhs == null)  mhs = new MethodHandle[1];
-            mhs[0] = makeCbmhCtor(cbmh, types);
-            return mhs;
-        }
-
-        //
-        // Auxiliary methods.
-        //
-
-        static SpeciesData speciesDataFromConcreteBMHClass(Class<? extends BoundMethodHandle> cbmh) {
-            try {
-                Field F_SPECIES_DATA = cbmh.getDeclaredField("SPECIES_DATA");
-                return (SpeciesData) F_SPECIES_DATA.get(null);
-            } catch (ReflectiveOperationException ex) {
-                throw newInternalError(ex);
-            }
-        }
-
-        /**
-         * Field names in concrete BMHs adhere to this pattern:
-         * arg + type + index
-         * where type is a single character (L, I, J, F, D).
-         */
-        private static String makeFieldName(String types, int index) {
-            assert index >= 0 && index < types.length();
-            return "arg" + types.charAt(index) + index;
-        }
-
-        private static String makeSignature(String types, boolean ctor) {
-            StringBuilder buf = new StringBuilder(SIG_INCIPIT);
-            for (char c : types.toCharArray()) {
-                buf.append(typeSig(c));
-            }
-            return buf.append(')').append(ctor ? "V" : BMH_SIG).toString();
-        }
-
-        static MethodHandle makeCbmhCtor(Class<? extends BoundMethodHandle> cbmh, String types) {
-            try {
-                return linkConstructor(LOOKUP.findConstructor(cbmh, MethodType.fromMethodDescriptorString(makeSignature(types, true), null)));
-            } catch (NoSuchMethodException | IllegalAccessException | IllegalArgumentException | TypeNotPresentException e) {
-                throw newInternalError(e);
-            }
-        }
-
-        /**
-         * Wrap a constructor call in a {@link LambdaForm}.
-         *
-         * If constructors ({@code <init>} methods) are called in LFs, problems might arise if the LFs
-         * are turned into bytecode, because the call to the allocator is routed through an MH, and the
-         * verifier cannot find a {@code NEW} instruction preceding the {@code INVOKESPECIAL} to
-         * {@code <init>}. To avoid this, we add an indirection by invoking {@code <init>} through
-         * {@link MethodHandle#linkToSpecial}.
-         *
-         * The last {@link LambdaForm#Name Name} in the argument's form is expected to be the {@code void}
-         * result of the {@code <init>} invocation. This entry is replaced.
-         */
-        private static MethodHandle linkConstructor(MethodHandle cmh) {
-            final LambdaForm lf = cmh.form;
-            final int initNameIndex = lf.names.length - 1;
-            final Name initName = lf.names[initNameIndex];
-            final MemberName ctorMN = initName.function.member;
-            final MethodType ctorMT = ctorMN.getInvocationType();
-
-            // obtain function member (call target)
-            // linker method type replaces initial parameter (BMH species) with BMH to avoid naming a species (anonymous class!)
-            final MethodType linkerMT = ctorMT.changeParameterType(0, BoundMethodHandle.class).appendParameterTypes(MemberName.class);
-            MemberName linkerMN = new MemberName(MethodHandle.class, "linkToSpecial", linkerMT, REF_invokeStatic);
-            try {
-                linkerMN = MemberName.getFactory().resolveOrFail(REF_invokeStatic, linkerMN, null, NoSuchMethodException.class);
-                assert(linkerMN.isStatic());
-            } catch (ReflectiveOperationException ex) {
-                throw newInternalError(ex);
-            }
-            // extend arguments array
-            Object[] newArgs = Arrays.copyOf(initName.arguments, initName.arguments.length + 1);
-            newArgs[newArgs.length - 1] = ctorMN;
-            // replace function
-            final NamedFunction nf = new NamedFunction(linkerMN);
-            final Name linkedCtor = new Name(nf, newArgs);
-            linkedCtor.initIndex(initNameIndex);
-            lf.names[initNameIndex] = linkedCtor;
-            return cmh;
-        }
-
-    }
-
-    private static final Lookup LOOKUP = Lookup.IMPL_LOOKUP;
-
-    /**
-     * All subclasses must provide such a value describing their type signature.
-     */
-    static final SpeciesData SPECIES_DATA = SpeciesData.EMPTY;
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/CallSite.java b/ojluni/src/main/java/java/lang/invoke/CallSite.java
deleted file mode 100755
index 5d637b9..0000000
--- a/ojluni/src/main/java/java/lang/invoke/CallSite.java
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package java.lang.invoke;
-
-import sun.invoke.empty.Empty;
-import static java.lang.invoke.MethodHandleStatics.*;
-import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
-
-/**
- * A {@code CallSite} is a holder for a variable {@link MethodHandle},
- * which is called its {@code target}.
- * An {@code invokedynamic} instruction linked to a {@code CallSite} delegates
- * all calls to the site's current target.
- * A {@code CallSite} may be associated with several {@code invokedynamic}
- * instructions, or it may be "free floating", associated with none.
- * In any case, it may be invoked through an associated method handle
- * called its {@linkplain #dynamicInvoker dynamic invoker}.
- * <p>
- * {@code CallSite} is an abstract class which does not allow
- * direct subclassing by users.  It has three immediate,
- * concrete subclasses that may be either instantiated or subclassed.
- * <ul>
- * <li>If a mutable target is not required, an {@code invokedynamic} instruction
- * may be permanently bound by means of a {@linkplain ConstantCallSite constant call site}.
- * <li>If a mutable target is required which has volatile variable semantics,
- * because updates to the target must be immediately and reliably witnessed by other threads,
- * a {@linkplain VolatileCallSite volatile call site} may be used.
- * <li>Otherwise, if a mutable target is required,
- * a {@linkplain MutableCallSite mutable call site} may be used.
- * </ul>
- * <p>
- * A non-constant call site may be <em>relinked</em> by changing its target.
- * The new target must have the same {@linkplain MethodHandle#type() type}
- * as the previous target.
- * Thus, though a call site can be relinked to a series of
- * successive targets, it cannot change its type.
- * <p>
- * Here is a sample use of call sites and bootstrap methods which links every
- * dynamic call site to print its arguments:
-<blockquote><pre><!-- see indy-demo/src/PrintArgsDemo.java -->
-static void test() throws Throwable {
-    // THE FOLLOWING LINE IS PSEUDOCODE FOR A JVM INSTRUCTION
-    InvokeDynamic[#bootstrapDynamic].baz("baz arg", 2, 3.14);
-}
-private static void printArgs(Object... args) {
-  System.out.println(java.util.Arrays.deepToString(args));
-}
-private static final MethodHandle printArgs;
-static {
-  MethodHandles.Lookup lookup = MethodHandles.lookup();
-  Class thisClass = lookup.lookupClass();  // (who am I?)
-  printArgs = lookup.findStatic(thisClass,
-      "printArgs", MethodType.methodType(void.class, Object[].class));
-}
-private static CallSite bootstrapDynamic(MethodHandles.Lookup caller, String name, MethodType type) {
-  // ignore caller and name, but match the type:
-  return new ConstantCallSite(printArgs.asType(type));
-}
-</pre></blockquote>
- * @author John Rose, JSR 292 EG
- */
-abstract
-public class CallSite {
-    static { MethodHandleImpl.initStatics(); }
-
-    // The actual payload of this call site:
-    /*package-private*/
-    MethodHandle target;    // Note: This field is known to the JVM.  Do not change.
-
-    /**
-     * Make a blank call site object with the given method type.
-     * An initial target method is supplied which will throw
-     * an {@link IllegalStateException} if called.
-     * <p>
-     * Before this {@code CallSite} object is returned from a bootstrap method,
-     * it is usually provided with a more useful target method,
-     * via a call to {@link CallSite#setTarget(MethodHandle) setTarget}.
-     * @throws NullPointerException if the proposed type is null
-     */
-    /*package-private*/
-    CallSite(MethodType type) {
-        target = type.invokers().uninitializedCallSite();
-    }
-
-    /**
-     * Make a call site object equipped with an initial target method handle.
-     * @param target the method handle which will be the initial target of the call site
-     * @throws NullPointerException if the proposed target is null
-     */
-    /*package-private*/
-    CallSite(MethodHandle target) {
-        target.type();  // null check
-        this.target = target;
-    }
-
-    /**
-     * Make a call site object equipped with an initial target method handle.
-     * @param targetType the desired type of the call site
-     * @param createTargetHook a hook which will bind the call site to the target method handle
-     * @throws WrongMethodTypeException if the hook cannot be invoked on the required arguments,
-     *         or if the target returned by the hook is not of the given {@code targetType}
-     * @throws NullPointerException if the hook returns a null value
-     * @throws ClassCastException if the hook returns something other than a {@code MethodHandle}
-     * @throws Throwable anything else thrown by the the hook function
-     */
-    /*package-private*/
-    CallSite(MethodType targetType, MethodHandle createTargetHook) throws Throwable {
-        this(targetType);
-        ConstantCallSite selfCCS = (ConstantCallSite) this;
-        MethodHandle boundTarget = (MethodHandle) createTargetHook.invokeWithArguments(selfCCS);
-        checkTargetChange(this.target, boundTarget);
-        this.target = boundTarget;
-    }
-
-    /**
-     * Returns the type of this call site's target.
-     * Although targets may change, any call site's type is permanent, and can never change to an unequal type.
-     * The {@code setTarget} method enforces this invariant by refusing any new target that does
-     * not have the previous target's type.
-     * @return the type of the current target, which is also the type of any future target
-     */
-    public MethodType type() {
-        // warning:  do not call getTarget here, because CCS.getTarget can throw IllegalStateException
-        return target.type();
-    }
-
-    /**
-     * Returns the target method of the call site, according to the
-     * behavior defined by this call site's specific class.
-     * The immediate subclasses of {@code CallSite} document the
-     * class-specific behaviors of this method.
-     *
-     * @return the current linkage state of the call site, its target method handle
-     * @see ConstantCallSite
-     * @see VolatileCallSite
-     * @see #setTarget
-     * @see ConstantCallSite#getTarget
-     * @see MutableCallSite#getTarget
-     * @see VolatileCallSite#getTarget
-     */
-    public abstract MethodHandle getTarget();
-
-    /**
-     * Updates the target method of this call site, according to the
-     * behavior defined by this call site's specific class.
-     * The immediate subclasses of {@code CallSite} document the
-     * class-specific behaviors of this method.
-     * <p>
-     * The type of the new target must be {@linkplain MethodType#equals equal to}
-     * the type of the old target.
-     *
-     * @param newTarget the new target
-     * @throws NullPointerException if the proposed new target is null
-     * @throws WrongMethodTypeException if the proposed new target
-     *         has a method type that differs from the previous target
-     * @see CallSite#getTarget
-     * @see ConstantCallSite#setTarget
-     * @see MutableCallSite#setTarget
-     * @see VolatileCallSite#setTarget
-     */
-    public abstract void setTarget(MethodHandle newTarget);
-
-    void checkTargetChange(MethodHandle oldTarget, MethodHandle newTarget) {
-        MethodType oldType = oldTarget.type();
-        MethodType newType = newTarget.type();  // null check!
-        if (!newType.equals(oldType))
-            throw wrongTargetType(newTarget, oldType);
-    }
-
-    private static WrongMethodTypeException wrongTargetType(MethodHandle target, MethodType type) {
-        return new WrongMethodTypeException(String.valueOf(target)+" should be of type "+type);
-    }
-
-    /**
-     * Produces a method handle equivalent to an invokedynamic instruction
-     * which has been linked to this call site.
-     * <p>
-     * This method is equivalent to the following code:
-     * <blockquote><pre>
-     * MethodHandle getTarget, invoker, result;
-     * getTarget = MethodHandles.publicLookup().bind(this, "getTarget", MethodType.methodType(MethodHandle.class));
-     * invoker = MethodHandles.exactInvoker(this.type());
-     * result = MethodHandles.foldArguments(invoker, getTarget)
-     * </pre></blockquote>
-     *
-     * @return a method handle which always invokes this call site's current target
-     */
-    public abstract MethodHandle dynamicInvoker();
-
-    /*non-public*/ MethodHandle makeDynamicInvoker() {
-        MethodHandle getTarget = GET_TARGET.bindReceiver(this);
-        MethodHandle invoker = MethodHandles.exactInvoker(this.type());
-        return MethodHandles.foldArguments(invoker, getTarget);
-    }
-
-    private static final MethodHandle GET_TARGET;
-    static {
-        try {
-            GET_TARGET = IMPL_LOOKUP.
-                findVirtual(CallSite.class, "getTarget", MethodType.methodType(MethodHandle.class));
-        } catch (ReflectiveOperationException e) {
-            throw newInternalError(e);
-        }
-    }
-
-    /** This guy is rolled into the default target if a MethodType is supplied to the constructor. */
-    /*package-private*/
-    static Empty uninitializedCallSite() {
-        throw new IllegalStateException("uninitialized call site");
-    }
-
-    // unsafe stuff:
-    private static final long TARGET_OFFSET;
-    static {
-        try {
-            TARGET_OFFSET = UNSAFE.objectFieldOffset(CallSite.class.getDeclaredField("target"));
-        } catch (Exception ex) { throw new Error(ex); }
-    }
-
-    /*package-private*/
-    void setTargetNormal(MethodHandle newTarget) {
-        MethodHandleNatives.setCallSiteTargetNormal(this, newTarget);
-    }
-    /*package-private*/
-    MethodHandle getTargetVolatile() {
-        return (MethodHandle) UNSAFE.getObjectVolatile(this, TARGET_OFFSET);
-    }
-    /*package-private*/
-    void setTargetVolatile(MethodHandle newTarget) {
-        MethodHandleNatives.setCallSiteTargetVolatile(this, newTarget);
-    }
-
-    // this implements the upcall from the JVM, MethodHandleNatives.makeDynamicCallSite:
-    static CallSite makeSite(MethodHandle bootstrapMethod,
-                             // Callee information:
-                             String name, MethodType type,
-                             // Extra arguments for BSM, if any:
-                             Object info,
-                             // Caller information:
-                             Class<?> callerClass) {
-        Object caller = IMPL_LOOKUP.in(callerClass);
-        CallSite site;
-        try {
-            Object binding;
-            info = maybeReBox(info);
-            if (info == null) {
-                binding = bootstrapMethod.invoke(caller, name, type);
-            } else if (!info.getClass().isArray()) {
-                binding = bootstrapMethod.invoke(caller, name, type, info);
-            } else {
-                Object[] argv = (Object[]) info;
-                maybeReBoxElements(argv);
-                if (3 + argv.length > 255)
-                    throw new BootstrapMethodError("too many bootstrap method arguments");
-                MethodType bsmType = bootstrapMethod.type();
-                if (bsmType.parameterCount() == 4 && bsmType.parameterType(3) == Object[].class)
-                    binding = bootstrapMethod.invoke(caller, name, type, argv);
-                else
-                    binding = MethodHandles.spreadInvoker(bsmType, 3)
-                        .invoke(bootstrapMethod, caller, name, type, argv);
-            }
-            //System.out.println("BSM for "+name+type+" => "+binding);
-            if (binding instanceof CallSite) {
-                site = (CallSite) binding;
-            }  else {
-                throw new ClassCastException("bootstrap method failed to produce a CallSite");
-            }
-            if (!site.getTarget().type().equals(type))
-                throw new WrongMethodTypeException("wrong type: "+site.getTarget());
-        } catch (Throwable ex) {
-            BootstrapMethodError bex;
-            if (ex instanceof BootstrapMethodError)
-                bex = (BootstrapMethodError) ex;
-            else
-                bex = new BootstrapMethodError("call site initialization exception", ex);
-            throw bex;
-        }
-        return site;
-    }
-
-    private static Object maybeReBox(Object x) {
-        if (x instanceof Integer) {
-            int xi = (int) x;
-            if (xi == (byte) xi)
-                x = xi;  // must rebox; see JLS 5.1.7
-        }
-        return x;
-    }
-    private static void maybeReBoxElements(Object[] xa) {
-        for (int i = 0; i < xa.length; i++) {
-            xa[i] = maybeReBox(xa[i]);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/ConstantCallSite.java b/ojluni/src/main/java/java/lang/invoke/ConstantCallSite.java
deleted file mode 100755
index 2d9fede..0000000
--- a/ojluni/src/main/java/java/lang/invoke/ConstantCallSite.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2010, 2011, 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.
- */
-
-package java.lang.invoke;
-
-/**
- * A {@code ConstantCallSite} is a {@link CallSite} whose target is permanent, and can never be changed.
- * An {@code invokedynamic} instruction linked to a {@code ConstantCallSite} is permanently
- * bound to the call site's target.
- * @author John Rose, JSR 292 EG
- */
-public class ConstantCallSite extends CallSite {
-    private final boolean isFrozen;
-
-    /**
-     * Creates a call site with a permanent target.
-     * @param target the target to be permanently associated with this call site
-     * @throws NullPointerException if the proposed target is null
-     */
-    public ConstantCallSite(MethodHandle target) {
-        super(target);
-        isFrozen = true;
-    }
-
-    /**
-     * Creates a call site with a permanent target, possibly bound to the call site itself.
-     * <p>
-     * During construction of the call site, the {@code createTargetHook} is invoked to
-     * produce the actual target, as if by a call of the form
-     * {@code (MethodHandle) createTargetHook.invoke(this)}.
-     * <p>
-     * Note that user code cannot perform such an action directly in a subclass constructor,
-     * since the target must be fixed before the {@code ConstantCallSite} constructor returns.
-     * <p>
-     * The hook is said to bind the call site to a target method handle,
-     * and a typical action would be {@code someTarget.bindTo(this)}.
-     * However, the hook is free to take any action whatever,
-     * including ignoring the call site and returning a constant target.
-     * <p>
-     * The result returned by the hook must be a method handle of exactly
-     * the same type as the call site.
-     * <p>
-     * While the hook is being called, the new {@code ConstantCallSite}
-     * object is in a partially constructed state.
-     * In this state,
-     * a call to {@code getTarget}, or any other attempt to use the target,
-     * will result in an {@code IllegalStateException}.
-     * It is legal at all times to obtain the call site's type using the {@code type} method.
-     *
-     * @param targetType the type of the method handle to be permanently associated with this call site
-     * @param createTargetHook a method handle to invoke (on the call site) to produce the call site's target
-     * @throws WrongMethodTypeException if the hook cannot be invoked on the required arguments,
-     *         or if the target returned by the hook is not of the given {@code targetType}
-     * @throws NullPointerException if the hook returns a null value
-     * @throws ClassCastException if the hook returns something other than a {@code MethodHandle}
-     * @throws Throwable anything else thrown by the the hook function
-     */
-    protected ConstantCallSite(MethodType targetType, MethodHandle createTargetHook) throws Throwable {
-        super(targetType, createTargetHook);
-        isFrozen = true;
-    }
-
-    /**
-     * Returns the target method of the call site, which behaves
-     * like a {@code final} field of the {@code ConstantCallSite}.
-     * That is, the the target is always the original value passed
-     * to the constructor call which created this instance.
-     *
-     * @return the immutable linkage state of this call site, a constant method handle
-     * @throws IllegalStateException if the {@code ConstantCallSite} constructor has not completed
-     */
-    @Override public final MethodHandle getTarget() {
-        if (!isFrozen)  throw new IllegalStateException();
-        return target;
-    }
-
-    /**
-     * Always throws an {@link UnsupportedOperationException}.
-     * This kind of call site cannot change its target.
-     * @param ignore a new target proposed for the call site, which is ignored
-     * @throws UnsupportedOperationException because this kind of call site cannot change its target
-     */
-    @Override public final void setTarget(MethodHandle ignore) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns this call site's permanent target.
-     * Since that target will never change, this is a correct implementation
-     * of {@link CallSite#dynamicInvoker CallSite.dynamicInvoker}.
-     * @return the immutable linkage state of this call site, a constant method handle
-     * @throws IllegalStateException if the {@code ConstantCallSite} constructor has not completed
-     */
-    @Override
-    public final MethodHandle dynamicInvoker() {
-        return getTarget();
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/DirectMethodHandle.java b/ojluni/src/main/java/java/lang/invoke/DirectMethodHandle.java
deleted file mode 100755
index 8a3fe9c..0000000
--- a/ojluni/src/main/java/java/lang/invoke/DirectMethodHandle.java
+++ /dev/null
@@ -1,670 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package java.lang.invoke;
-
-import sun.misc.Unsafe;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import sun.invoke.util.VerifyAccess;
-import static java.lang.invoke.MethodHandleNatives.Constants.*;
-import static java.lang.invoke.LambdaForm.*;
-import static java.lang.invoke.MethodTypeForm.*;
-import static java.lang.invoke.MethodHandleStatics.*;
-import java.lang.ref.WeakReference;
-import java.lang.reflect.Field;
-import sun.invoke.util.ValueConversions;
-import sun.invoke.util.VerifyType;
-import sun.invoke.util.Wrapper;
-
-/**
- * The flavor of method handle which implements a constant reference
- * to a class member.
- * @author jrose
- */
-class DirectMethodHandle extends MethodHandle {
-    final MemberName member;
-
-    // Constructors and factory methods in this class *must* be package scoped or private.
-    private DirectMethodHandle(MethodType mtype, LambdaForm form, MemberName member) {
-        super(mtype, form);
-        if (!member.isResolved())
-            throw new InternalError();
-
-        if (member.getDeclaringClass().isInterface() && !member.isAbstract()) {
-           // Check for corner case: invokeinterface of Object method
-            MemberName m = new MemberName(Object.class, member.getName(), member.getMethodType(), member.getReferenceKind());
-            m = MemberName.getFactory().resolveOrNull(m.getReferenceKind(), m, null);
-            if (m != null && m.isPublic()) {
-                member = m;
-            }
-        }
-
-        this.member = member;
-    }
-
-    // Factory methods:
-
-    static DirectMethodHandle make(Class<?> receiver, MemberName member) {
-        MethodType mtype = member.getMethodOrFieldType();
-        if (!member.isStatic()) {
-            if (!member.getDeclaringClass().isAssignableFrom(receiver) || member.isConstructor())
-                throw new InternalError(member.toString());
-            mtype = mtype.insertParameterTypes(0, receiver);
-        }
-        if (!member.isField()) {
-            LambdaForm lform = preparedLambdaForm(member);
-            return new DirectMethodHandle(mtype, lform, member);
-        } else {
-            LambdaForm lform = preparedFieldLambdaForm(member);
-            if (member.isStatic()) {
-                long offset = MethodHandleNatives.staticFieldOffset(member);
-                Object base = MethodHandleNatives.staticFieldBase(member);
-                return new StaticAccessor(mtype, lform, member, base, offset);
-            } else {
-                long offset = MethodHandleNatives.objectFieldOffset(member);
-                assert(offset == (int)offset);
-                return new Accessor(mtype, lform, member, (int)offset);
-            }
-        }
-    }
-    static DirectMethodHandle make(MemberName member) {
-        if (member.isConstructor())
-            return makeAllocator(member);
-        return make(member.getDeclaringClass(), member);
-    }
-    static DirectMethodHandle make(Method method) {
-        return make(method.getDeclaringClass(), new MemberName(method));
-    }
-    static DirectMethodHandle make(Field field) {
-        return make(field.getDeclaringClass(), new MemberName(field));
-    }
-    private static DirectMethodHandle makeAllocator(MemberName ctor) {
-        assert(ctor.isConstructor() && ctor.getName().equals("<init>"));
-        Class<?> instanceClass = ctor.getDeclaringClass();
-        ctor = ctor.asConstructor();
-        assert(ctor.isConstructor() && ctor.getReferenceKind() == REF_newInvokeSpecial) : ctor;
-        MethodType mtype = ctor.getMethodType().changeReturnType(instanceClass);
-        LambdaForm lform = preparedLambdaForm(ctor);
-        MemberName init = ctor.asSpecial();
-        assert(init.getMethodType().returnType() == void.class);
-        return new Constructor(mtype, lform, ctor, init, instanceClass);
-    }
-
-    @Override
-    MethodHandle copyWith(MethodType mt, LambdaForm lf) {
-        return new DirectMethodHandle(mt, lf, member);
-    }
-
-    @Override
-    String internalProperties() {
-        return "/DMH="+member.toString();
-    }
-
-    //// Implementation methods.
-    @Override
-    @ForceInline
-    MemberName internalMemberName() {
-        return member;
-    }
-
-    @Override
-    MethodHandle bindArgument(int pos, char basicType, Object value) {
-        // If the member needs dispatching, do so.
-        if (pos == 0 && basicType == 'L') {
-            DirectMethodHandle concrete = maybeRebind(value);
-            if (concrete != null)
-                return concrete.bindReceiver(value);
-        }
-        return super.bindArgument(pos, basicType, value);
-    }
-
-    @Override
-    MethodHandle bindReceiver(Object receiver) {
-        // If the member needs dispatching, do so.
-        DirectMethodHandle concrete = maybeRebind(receiver);
-        if (concrete != null)
-            return concrete.bindReceiver(receiver);
-        return super.bindReceiver(receiver);
-    }
-
-    private static final MemberName.Factory IMPL_NAMES = MemberName.getFactory();
-
-    private DirectMethodHandle maybeRebind(Object receiver) {
-        if (receiver != null) {
-            switch (member.getReferenceKind()) {
-            case REF_invokeInterface:
-            case REF_invokeVirtual:
-                // Pre-dispatch the member.
-                Class<?> concreteClass = receiver.getClass();
-                MemberName concrete = new MemberName(concreteClass, member.getName(), member.getMethodType(), REF_invokeSpecial);
-                concrete = IMPL_NAMES.resolveOrNull(REF_invokeSpecial, concrete, concreteClass);
-                if (concrete != null)
-                    return new DirectMethodHandle(type(), preparedLambdaForm(concrete), concrete);
-                break;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Create a LF which can invoke the given method.
-     * Cache and share this structure among all methods with
-     * the same basicType and refKind.
-     */
-    private static LambdaForm preparedLambdaForm(MemberName m) {
-        assert(m.isInvocable()) : m;  // call preparedFieldLambdaForm instead
-        MethodType mtype = m.getInvocationType().basicType();
-        assert(!m.isMethodHandleInvoke() || "invokeBasic".equals(m.getName())) : m;
-        int which;
-        switch (m.getReferenceKind()) {
-        case REF_invokeVirtual:    which = LF_INVVIRTUAL;    break;
-        case REF_invokeStatic:     which = LF_INVSTATIC;     break;
-        case REF_invokeSpecial:    which = LF_INVSPECIAL;    break;
-        case REF_invokeInterface:  which = LF_INVINTERFACE;  break;
-        case REF_newInvokeSpecial: which = LF_NEWINVSPECIAL; break;
-        default:  throw new InternalError(m.toString());
-        }
-        if (which == LF_INVSTATIC && shouldBeInitialized(m)) {
-            // precompute the barrier-free version:
-            preparedLambdaForm(mtype, which);
-            which = LF_INVSTATIC_INIT;
-        }
-        LambdaForm lform = preparedLambdaForm(mtype, which);
-        maybeCompile(lform, m);
-        assert(lform.methodType().dropParameterTypes(0, 1)
-                .equals(m.getInvocationType().basicType()))
-                : Arrays.asList(m, m.getInvocationType().basicType(), lform, lform.methodType());
-        return lform;
-    }
-
-    private static LambdaForm preparedLambdaForm(MethodType mtype, int which) {
-        LambdaForm lform = mtype.form().cachedLambdaForm(which);
-        if (lform != null)  return lform;
-        lform = makePreparedLambdaForm(mtype, which);
-        return mtype.form().setCachedLambdaForm(which, lform);
-    }
-
-    private static LambdaForm makePreparedLambdaForm(MethodType mtype, int which) {
-        boolean needsInit = (which == LF_INVSTATIC_INIT);
-        boolean doesAlloc = (which == LF_NEWINVSPECIAL);
-        String linkerName, lambdaName;
-        switch (which) {
-        case LF_INVVIRTUAL:    linkerName = "linkToVirtual";    lambdaName = "DMH.invokeVirtual";    break;
-        case LF_INVSTATIC:     linkerName = "linkToStatic";     lambdaName = "DMH.invokeStatic";     break;
-        case LF_INVSTATIC_INIT:linkerName = "linkToStatic";     lambdaName = "DMH.invokeStaticInit"; break;
-        case LF_INVSPECIAL:    linkerName = "linkToSpecial";    lambdaName = "DMH.invokeSpecial";    break;
-        case LF_INVINTERFACE:  linkerName = "linkToInterface";  lambdaName = "DMH.invokeInterface";  break;
-        case LF_NEWINVSPECIAL: linkerName = "linkToSpecial";    lambdaName = "DMH.newInvokeSpecial"; break;
-        default:  throw new InternalError("which="+which);
-        }
-        MethodType mtypeWithArg = mtype.appendParameterTypes(MemberName.class);
-        if (doesAlloc)
-            mtypeWithArg = mtypeWithArg
-                    .insertParameterTypes(0, Object.class)  // insert newly allocated obj
-                    .changeReturnType(void.class);          // <init> returns void
-        MemberName linker = new MemberName(MethodHandle.class, linkerName, mtypeWithArg, REF_invokeStatic);
-        try {
-            linker = IMPL_NAMES.resolveOrFail(REF_invokeStatic, linker, null, NoSuchMethodException.class);
-        } catch (ReflectiveOperationException ex) {
-            throw newInternalError(ex);
-        }
-        final int DMH_THIS    = 0;
-        final int ARG_BASE    = 1;
-        final int ARG_LIMIT   = ARG_BASE + mtype.parameterCount();
-        int nameCursor = ARG_LIMIT;
-        final int NEW_OBJ     = (doesAlloc ? nameCursor++ : -1);
-        final int GET_MEMBER  = nameCursor++;
-        final int LINKER_CALL = nameCursor++;
-        Name[] names = arguments(nameCursor - ARG_LIMIT, mtype.invokerType());
-        assert(names.length == nameCursor);
-        if (doesAlloc) {
-            // names = { argx,y,z,... new C, init method }
-            names[NEW_OBJ] = new Name(NF_allocateInstance, names[DMH_THIS]);
-            names[GET_MEMBER] = new Name(NF_constructorMethod, names[DMH_THIS]);
-        } else if (needsInit) {
-            names[GET_MEMBER] = new Name(NF_internalMemberNameEnsureInit, names[DMH_THIS]);
-        } else {
-            names[GET_MEMBER] = new Name(NF_internalMemberName, names[DMH_THIS]);
-        }
-        Object[] outArgs = Arrays.copyOfRange(names, ARG_BASE, GET_MEMBER+1, Object[].class);
-        assert(outArgs[outArgs.length-1] == names[GET_MEMBER]);  // look, shifted args!
-        int result = LambdaForm.LAST_RESULT;
-        if (doesAlloc) {
-            assert(outArgs[outArgs.length-2] == names[NEW_OBJ]);  // got to move this one
-            System.arraycopy(outArgs, 0, outArgs, 1, outArgs.length-2);
-            outArgs[0] = names[NEW_OBJ];
-            result = NEW_OBJ;
-        }
-        names[LINKER_CALL] = new Name(linker, outArgs);
-        lambdaName += "_" + LambdaForm.basicTypeSignature(mtype);
-        LambdaForm lform = new LambdaForm(lambdaName, ARG_LIMIT, names, result);
-        // This is a tricky bit of code.  Don't send it through the LF interpreter.
-        lform.compileToBytecode();
-        return lform;
-    }
-
-    private static void maybeCompile(LambdaForm lform, MemberName m) {
-        if (VerifyAccess.isSamePackage(m.getDeclaringClass(), MethodHandle.class))
-            // Help along bootstrapping...
-            lform.compileToBytecode();
-    }
-
-    /** Static wrapper for DirectMethodHandle.internalMemberName. */
-    @ForceInline
-    /*non-public*/ static Object internalMemberName(Object mh) {
-        return ((DirectMethodHandle)mh).member;
-    }
-
-    /** Static wrapper for DirectMethodHandle.internalMemberName.
-     * This one also forces initialization.
-     */
-    /*non-public*/ static Object internalMemberNameEnsureInit(Object mh) {
-        DirectMethodHandle dmh = (DirectMethodHandle)mh;
-        dmh.ensureInitialized();
-        return dmh.member;
-    }
-
-    /*non-public*/ static
-    boolean shouldBeInitialized(MemberName member) {
-        switch (member.getReferenceKind()) {
-        case REF_invokeStatic:
-        case REF_getStatic:
-        case REF_putStatic:
-        case REF_newInvokeSpecial:
-            break;
-        default:
-            // No need to initialize the class on this kind of member.
-            return false;
-        }
-        Class<?> cls = member.getDeclaringClass();
-        if (cls == ValueConversions.class ||
-            cls == MethodHandleImpl.class ||
-            cls == Invokers.class) {
-            // These guys have lots of <clinit> DMH creation but we know
-            // the MHs will not be used until the system is booted.
-            return false;
-        }
-        if (VerifyAccess.isSamePackage(MethodHandle.class, cls) ||
-            VerifyAccess.isSamePackage(ValueConversions.class, cls)) {
-            // It is a system class.  It is probably in the process of
-            // being initialized, but we will help it along just to be safe.
-            if (UNSAFE.shouldBeInitialized(cls)) {
-                UNSAFE.ensureClassInitialized(cls);
-            }
-            return false;
-        }
-        return UNSAFE.shouldBeInitialized(cls);
-    }
-
-    private static class EnsureInitialized extends ClassValue<WeakReference<Thread>> {
-        @Override
-        protected WeakReference<Thread> computeValue(Class<?> type) {
-            UNSAFE.ensureClassInitialized(type);
-            if (UNSAFE.shouldBeInitialized(type))
-                // If the previous call didn't block, this can happen.
-                // We are executing inside <clinit>.
-                return new WeakReference<>(Thread.currentThread());
-            return null;
-        }
-        static final EnsureInitialized INSTANCE = new EnsureInitialized();
-    }
-
-    private void ensureInitialized() {
-        if (checkInitialized(member)) {
-            // The coast is clear.  Delete the <clinit> barrier.
-            if (member.isField())
-                updateForm(preparedFieldLambdaForm(member));
-            else
-                updateForm(preparedLambdaForm(member));
-        }
-    }
-    private static boolean checkInitialized(MemberName member) {
-        Class<?> defc = member.getDeclaringClass();
-        WeakReference<Thread> ref = EnsureInitialized.INSTANCE.get(defc);
-        if (ref == null) {
-            return true;  // the final state
-        }
-        Thread clinitThread = ref.get();
-        // Somebody may still be running defc.<clinit>.
-        if (clinitThread == Thread.currentThread()) {
-            // If anybody is running defc.<clinit>, it is this thread.
-            if (UNSAFE.shouldBeInitialized(defc))
-                // Yes, we are running it; keep the barrier for now.
-                return false;
-        } else {
-            // We are in a random thread.  Block.
-            UNSAFE.ensureClassInitialized(defc);
-        }
-        assert(!UNSAFE.shouldBeInitialized(defc));
-        // put it into the final state
-        EnsureInitialized.INSTANCE.remove(defc);
-        return true;
-    }
-
-    /*non-public*/ static void ensureInitialized(Object mh) {
-        ((DirectMethodHandle)mh).ensureInitialized();
-    }
-
-    /** This subclass handles constructor references. */
-    static class Constructor extends DirectMethodHandle {
-        final MemberName initMethod;
-        final Class<?>   instanceClass;
-
-        private Constructor(MethodType mtype, LambdaForm form, MemberName constructor,
-                            MemberName initMethod, Class<?> instanceClass) {
-            super(mtype, form, constructor);
-            this.initMethod = initMethod;
-            this.instanceClass = instanceClass;
-            assert(initMethod.isResolved());
-        }
-    }
-
-    /*non-public*/ static Object constructorMethod(Object mh) {
-        Constructor dmh = (Constructor)mh;
-        return dmh.initMethod;
-    }
-
-    /*non-public*/ static Object allocateInstance(Object mh) throws InstantiationException {
-        Constructor dmh = (Constructor)mh;
-        return UNSAFE.allocateInstance(dmh.instanceClass);
-    }
-
-    /** This subclass handles non-static field references. */
-    static class Accessor extends DirectMethodHandle {
-        final Class<?> fieldType;
-        final int      fieldOffset;
-        private Accessor(MethodType mtype, LambdaForm form, MemberName member,
-                         int fieldOffset) {
-            super(mtype, form, member);
-            this.fieldType   = member.getFieldType();
-            this.fieldOffset = fieldOffset;
-        }
-
-        @Override Object checkCast(Object obj) {
-            return fieldType.cast(obj);
-        }
-    }
-
-    @ForceInline
-    /*non-public*/ static long fieldOffset(Object accessorObj) {
-        // Note: We return a long because that is what Unsafe.getObject likes.
-        // We store a plain int because it is more compact.
-        return ((Accessor)accessorObj).fieldOffset;
-    }
-
-    @ForceInline
-    /*non-public*/ static Object checkBase(Object obj) {
-        // Note that the object's class has already been verified,
-        // since the parameter type of the Accessor method handle
-        // is either member.getDeclaringClass or a subclass.
-        // This was verified in DirectMethodHandle.make.
-        // Therefore, the only remaining check is for null.
-        // Since this check is *not* guaranteed by Unsafe.getInt
-        // and its siblings, we need to make an explicit one here.
-        obj.getClass();  // maybe throw NPE
-        return obj;
-    }
-
-    /** This subclass handles static field references. */
-    static class StaticAccessor extends DirectMethodHandle {
-        final private Class<?> fieldType;
-        final private Object   staticBase;
-        final private long     staticOffset;
-
-        private StaticAccessor(MethodType mtype, LambdaForm form, MemberName member,
-                               Object staticBase, long staticOffset) {
-            super(mtype, form, member);
-            this.fieldType    = member.getFieldType();
-            this.staticBase   = staticBase;
-            this.staticOffset = staticOffset;
-        }
-
-        @Override Object checkCast(Object obj) {
-            return fieldType.cast(obj);
-        }
-    }
-
-    @ForceInline
-    /*non-public*/ static Object nullCheck(Object obj) {
-        obj.getClass();
-        return obj;
-    }
-
-    @ForceInline
-    /*non-public*/ static Object staticBase(Object accessorObj) {
-        return ((StaticAccessor)accessorObj).staticBase;
-    }
-
-    @ForceInline
-    /*non-public*/ static long staticOffset(Object accessorObj) {
-        return ((StaticAccessor)accessorObj).staticOffset;
-    }
-
-    @ForceInline
-    /*non-public*/ static Object checkCast(Object mh, Object obj) {
-        return ((DirectMethodHandle) mh).checkCast(obj);
-    }
-
-    Object checkCast(Object obj) {
-        return member.getReturnType().cast(obj);
-    }
-
-    // Caching machinery for field accessors:
-    private static byte
-            AF_GETFIELD        = 0,
-            AF_PUTFIELD        = 1,
-            AF_GETSTATIC       = 2,
-            AF_PUTSTATIC       = 3,
-            AF_GETSTATIC_INIT  = 4,
-            AF_PUTSTATIC_INIT  = 5,
-            AF_LIMIT           = 6;
-    // Enumerate the different field kinds using Wrapper,
-    // with an extra case added for checked references.
-    private static int
-            FT_LAST_WRAPPER    = Wrapper.values().length-1,
-            FT_UNCHECKED_REF   = Wrapper.OBJECT.ordinal(),
-            FT_CHECKED_REF     = FT_LAST_WRAPPER+1,
-            FT_LIMIT           = FT_LAST_WRAPPER+2;
-    private static int afIndex(byte formOp, boolean isVolatile, int ftypeKind) {
-        return ((formOp * FT_LIMIT * 2)
-                + (isVolatile ? FT_LIMIT : 0)
-                + ftypeKind);
-    }
-    private static final LambdaForm[] ACCESSOR_FORMS
-            = new LambdaForm[afIndex(AF_LIMIT, false, 0)];
-    private static int ftypeKind(Class<?> ftype) {
-        if (ftype.isPrimitive())
-            return Wrapper.forPrimitiveType(ftype).ordinal();
-        else if (VerifyType.isNullReferenceConversion(Object.class, ftype))
-            return FT_UNCHECKED_REF;
-        else
-            return FT_CHECKED_REF;
-    }
-
-    /**
-     * Create a LF which can access the given field.
-     * Cache and share this structure among all fields with
-     * the same basicType and refKind.
-     */
-    private static LambdaForm preparedFieldLambdaForm(MemberName m) {
-        Class<?> ftype = m.getFieldType();
-        boolean isVolatile = m.isVolatile();
-        byte formOp;
-        switch (m.getReferenceKind()) {
-        case REF_getField:      formOp = AF_GETFIELD;    break;
-        case REF_putField:      formOp = AF_PUTFIELD;    break;
-        case REF_getStatic:     formOp = AF_GETSTATIC;   break;
-        case REF_putStatic:     formOp = AF_PUTSTATIC;   break;
-        default:  throw new InternalError(m.toString());
-        }
-        if (shouldBeInitialized(m)) {
-            // precompute the barrier-free version:
-            preparedFieldLambdaForm(formOp, isVolatile, ftype);
-            assert((AF_GETSTATIC_INIT - AF_GETSTATIC) ==
-                   (AF_PUTSTATIC_INIT - AF_PUTSTATIC));
-            formOp += (AF_GETSTATIC_INIT - AF_GETSTATIC);
-        }
-        LambdaForm lform = preparedFieldLambdaForm(formOp, isVolatile, ftype);
-        maybeCompile(lform, m);
-        assert(lform.methodType().dropParameterTypes(0, 1)
-                .equals(m.getInvocationType().basicType()))
-                : Arrays.asList(m, m.getInvocationType().basicType(), lform, lform.methodType());
-        return lform;
-    }
-    private static LambdaForm preparedFieldLambdaForm(byte formOp, boolean isVolatile, Class<?> ftype) {
-        int afIndex = afIndex(formOp, isVolatile, ftypeKind(ftype));
-        LambdaForm lform = ACCESSOR_FORMS[afIndex];
-        if (lform != null)  return lform;
-        lform = makePreparedFieldLambdaForm(formOp, isVolatile, ftypeKind(ftype));
-        ACCESSOR_FORMS[afIndex] = lform;  // don't bother with a CAS
-        return lform;
-    }
-
-    private static LambdaForm makePreparedFieldLambdaForm(byte formOp, boolean isVolatile, int ftypeKind) {
-        boolean isGetter  = (formOp & 1) == (AF_GETFIELD & 1);
-        boolean isStatic  = (formOp >= AF_GETSTATIC);
-        boolean needsInit = (formOp >= AF_GETSTATIC_INIT);
-        boolean needsCast = (ftypeKind == FT_CHECKED_REF);
-        Wrapper fw = (needsCast ? Wrapper.OBJECT : Wrapper.values()[ftypeKind]);
-        Class<?> ft = fw.primitiveType();
-        assert(ftypeKind(needsCast ? String.class : ft) == ftypeKind);
-        String tname  = fw.primitiveSimpleName();
-        String ctname = Character.toUpperCase(tname.charAt(0)) + tname.substring(1);
-        if (isVolatile)  ctname += "Volatile";
-        String getOrPut = (isGetter ? "get" : "put");
-        String linkerName = (getOrPut + ctname);  // getObject, putIntVolatile, etc.
-        MethodType linkerType;
-        if (isGetter)
-            linkerType = MethodType.methodType(ft, Object.class, long.class);
-        else
-            linkerType = MethodType.methodType(void.class, Object.class, long.class, ft);
-        MemberName linker = new MemberName(Unsafe.class, linkerName, linkerType, REF_invokeVirtual);
-        try {
-            linker = IMPL_NAMES.resolveOrFail(REF_invokeVirtual, linker, null, NoSuchMethodException.class);
-        } catch (ReflectiveOperationException ex) {
-            throw newInternalError(ex);
-        }
-
-        // What is the external type of the lambda form?
-        MethodType mtype;
-        if (isGetter)
-            mtype = MethodType.methodType(ft);
-        else
-            mtype = MethodType.methodType(void.class, ft);
-        mtype = mtype.basicType();  // erase short to int, etc.
-        if (!isStatic)
-            mtype = mtype.insertParameterTypes(0, Object.class);
-        final int DMH_THIS  = 0;
-        final int ARG_BASE  = 1;
-        final int ARG_LIMIT = ARG_BASE + mtype.parameterCount();
-        // if this is for non-static access, the base pointer is stored at this index:
-        final int OBJ_BASE  = isStatic ? -1 : ARG_BASE;
-        // if this is for write access, the value to be written is stored at this index:
-        final int SET_VALUE  = isGetter ? -1 : ARG_LIMIT - 1;
-        int nameCursor = ARG_LIMIT;
-        final int F_HOLDER  = (isStatic ? nameCursor++ : -1);  // static base if any
-        final int F_OFFSET  = nameCursor++;  // Either static offset or field offset.
-        final int OBJ_CHECK = (OBJ_BASE >= 0 ? nameCursor++ : -1);
-        final int INIT_BAR  = (needsInit ? nameCursor++ : -1);
-        final int PRE_CAST  = (needsCast && !isGetter ? nameCursor++ : -1);
-        final int LINKER_CALL = nameCursor++;
-        final int POST_CAST = (needsCast && isGetter ? nameCursor++ : -1);
-        final int RESULT    = nameCursor-1;  // either the call or the cast
-        Name[] names = arguments(nameCursor - ARG_LIMIT, mtype.invokerType());
-        if (needsInit)
-            names[INIT_BAR] = new Name(NF_ensureInitialized, names[DMH_THIS]);
-        if (needsCast && !isGetter)
-            names[PRE_CAST] = new Name(NF_checkCast, names[DMH_THIS], names[SET_VALUE]);
-        Object[] outArgs = new Object[1 + linkerType.parameterCount()];
-        assert(outArgs.length == (isGetter ? 3 : 4));
-        outArgs[0] = UNSAFE;
-        if (isStatic) {
-            outArgs[1] = names[F_HOLDER]  = new Name(NF_staticBase, names[DMH_THIS]);
-            outArgs[2] = names[F_OFFSET]  = new Name(NF_staticOffset, names[DMH_THIS]);
-        } else {
-            outArgs[1] = names[OBJ_CHECK] = new Name(NF_checkBase, names[OBJ_BASE]);
-            outArgs[2] = names[F_OFFSET]  = new Name(NF_fieldOffset, names[DMH_THIS]);
-        }
-        if (!isGetter) {
-            outArgs[3] = (needsCast ? names[PRE_CAST] : names[SET_VALUE]);
-        }
-        for (Object a : outArgs)  assert(a != null);
-        names[LINKER_CALL] = new Name(linker, outArgs);
-        if (needsCast && isGetter)
-            names[POST_CAST] = new Name(NF_checkCast, names[DMH_THIS], names[LINKER_CALL]);
-        for (Name n : names)  assert(n != null);
-        String fieldOrStatic = (isStatic ? "Static" : "Field");
-        String lambdaName = (linkerName + fieldOrStatic);  // significant only for debugging
-        if (needsCast)  lambdaName += "Cast";
-        if (needsInit)  lambdaName += "Init";
-        return new LambdaForm(lambdaName, ARG_LIMIT, names, RESULT);
-    }
-
-    private static final NamedFunction
-            NF_internalMemberName,
-            NF_internalMemberNameEnsureInit,
-            NF_ensureInitialized,
-            NF_fieldOffset,
-            NF_checkBase,
-            NF_staticBase,
-            NF_staticOffset,
-            NF_checkCast,
-            NF_allocateInstance,
-            NF_constructorMethod;
-    static {
-        try {
-            NamedFunction nfs[] = {
-                NF_internalMemberName = new NamedFunction(DirectMethodHandle.class
-                    .getDeclaredMethod("internalMemberName", Object.class)),
-                NF_internalMemberNameEnsureInit = new NamedFunction(DirectMethodHandle.class
-                    .getDeclaredMethod("internalMemberNameEnsureInit", Object.class)),
-                NF_ensureInitialized = new NamedFunction(DirectMethodHandle.class
-                    .getDeclaredMethod("ensureInitialized", Object.class)),
-                NF_fieldOffset = new NamedFunction(DirectMethodHandle.class
-                    .getDeclaredMethod("fieldOffset", Object.class)),
-                NF_checkBase = new NamedFunction(DirectMethodHandle.class
-                    .getDeclaredMethod("checkBase", Object.class)),
-                NF_staticBase = new NamedFunction(DirectMethodHandle.class
-                    .getDeclaredMethod("staticBase", Object.class)),
-                NF_staticOffset = new NamedFunction(DirectMethodHandle.class
-                    .getDeclaredMethod("staticOffset", Object.class)),
-                NF_checkCast = new NamedFunction(DirectMethodHandle.class
-                    .getDeclaredMethod("checkCast", Object.class, Object.class)),
-                NF_allocateInstance = new NamedFunction(DirectMethodHandle.class
-                    .getDeclaredMethod("allocateInstance", Object.class)),
-                NF_constructorMethod = new NamedFunction(DirectMethodHandle.class
-                    .getDeclaredMethod("constructorMethod", Object.class))
-            };
-            for (NamedFunction nf : nfs) {
-                // Each nf must be statically invocable or we get tied up in our bootstraps.
-                assert(InvokerBytecodeGenerator.isStaticallyInvocable(nf.member)) : nf;
-                nf.resolve();
-            }
-        } catch (ReflectiveOperationException ex) {
-            throw newInternalError(ex);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/DontInline.java b/ojluni/src/main/java/java/lang/invoke/DontInline.java
deleted file mode 100755
index 1bd969e..0000000
--- a/ojluni/src/main/java/java/lang/invoke/DontInline.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2012, 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.
- */
-
-package java.lang.invoke;
-
-import java.lang.annotation.*;
-
-/**
- * Internal marker for some methods in the JSR 292 implementation.
- */
-/*non-public*/
-@Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
-@Retention(RetentionPolicy.RUNTIME)
-@interface DontInline {
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/ForceInline.java b/ojluni/src/main/java/java/lang/invoke/ForceInline.java
deleted file mode 100755
index bbac427..0000000
--- a/ojluni/src/main/java/java/lang/invoke/ForceInline.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2012, 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.
- */
-
-package java.lang.invoke;
-
-import java.lang.annotation.*;
-
-/**
- * Internal marker for some methods in the JSR 292 implementation.
- */
-/*non-public*/
-@Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
-@Retention(RetentionPolicy.RUNTIME)
-@interface ForceInline {
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/InvokeDynamic.java b/ojluni/src/main/java/java/lang/invoke/InvokeDynamic.java
deleted file mode 100755
index 4668d74..0000000
--- a/ojluni/src/main/java/java/lang/invoke/InvokeDynamic.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package java.lang.invoke;
-
-/**
- * This is a place-holder class.  Some HotSpot implementations need to see it.
- */
-final class InvokeDynamic {
-    private InvokeDynamic() { throw new InternalError(); }  // do not instantiate
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/InvokeGeneric.java b/ojluni/src/main/java/java/lang/invoke/InvokeGeneric.java
deleted file mode 100755
index 81f663b..0000000
--- a/ojluni/src/main/java/java/lang/invoke/InvokeGeneric.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 2009, 2011, 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.
- */
-
-package java.lang.invoke;
-
-import sun.invoke.util.*;
-import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
-
-/**
- * Adapters which manage inexact MethodHandle.invoke calls.
- * The JVM calls one of these when the exact type match fails.
- * @author jrose
- */
-class InvokeGeneric {
-    // erased type for the call, which originates from an inexact invoke site
-    private final MethodType erasedCallerType;
-    // an invoker of type (MT, MH; A...) -> R
-    private final MethodHandle initialInvoker;
-
-    /** Compute and cache information for this adapter, so that it can
-     *  call out to targets of the erasure-family of the given erased type.
-     */
-    /*non-public*/ InvokeGeneric(MethodType erasedCallerType) throws ReflectiveOperationException {
-        assert(erasedCallerType.equals(erasedCallerType.erase()));
-        this.erasedCallerType = erasedCallerType;
-        this.initialInvoker = makeInitialInvoker();
-        assert initialInvoker.type().equals(erasedCallerType
-                                            .insertParameterTypes(0, MethodType.class, MethodHandle.class))
-            : initialInvoker.type();
-    }
-
-    private static MethodHandles.Lookup lookup() {
-        return IMPL_LOOKUP;
-    }
-
-    /** Return the adapter information for this type's erasure. */
-    /*non-public*/ static MethodHandle generalInvokerOf(MethodType erasedCallerType) throws ReflectiveOperationException {
-        InvokeGeneric gen = new InvokeGeneric(erasedCallerType);
-        return gen.initialInvoker;
-    }
-
-    private MethodHandle makeInitialInvoker() throws ReflectiveOperationException {
-        // postDispatch = #(MH'; MT, MH; A...){MH'(MT, MH; A)}
-        MethodHandle postDispatch = makePostDispatchInvoker();
-        MethodHandle invoker;
-        if (returnConversionPossible()) {
-            invoker = MethodHandles.foldArguments(postDispatch,
-                                                  dispatcher("dispatchWithConversion"));
-        } else {
-            invoker = MethodHandles.foldArguments(postDispatch, dispatcher("dispatch"));
-        }
-        return invoker;
-    }
-
-    private static final Class<?>[] EXTRA_ARGS = { MethodType.class, MethodHandle.class };
-    private MethodHandle makePostDispatchInvoker() {
-        // Take (MH'; MT, MH; A...) and run MH'(MT, MH; A...).
-        MethodType invokerType = erasedCallerType.insertParameterTypes(0, EXTRA_ARGS);
-        return invokerType.invokers().exactInvoker();
-    }
-    private MethodHandle dropDispatchArguments(MethodHandle targetInvoker) {
-        assert(targetInvoker.type().parameterType(0) == MethodHandle.class);
-        return MethodHandles.dropArguments(targetInvoker, 1, EXTRA_ARGS);
-    }
-
-    private MethodHandle dispatcher(String dispatchName) throws ReflectiveOperationException {
-        return lookup().bind(this, dispatchName,
-                             MethodType.methodType(MethodHandle.class,
-                                                   MethodType.class, MethodHandle.class));
-    }
-
-    static final boolean USE_AS_TYPE_PATH = true;
-
-    /** Return a method handle to invoke on the callerType, target, and remaining arguments.
-     *  The method handle must finish the call.
-     *  This is the first look at the caller type and target.
-     */
-    private MethodHandle dispatch(MethodType callerType, MethodHandle target) {
-        MethodType targetType = target.type();
-        if (USE_AS_TYPE_PATH || target.isVarargsCollector()) {
-            MethodHandle newTarget = target.asType(callerType);
-            targetType = callerType;
-            Invokers invokers = targetType.invokers();
-            MethodHandle invoker = invokers.erasedInvokerWithDrops;
-            if (invoker == null) {
-                invokers.erasedInvokerWithDrops = invoker =
-                    dropDispatchArguments(invokers.erasedInvoker());
-            }
-            return invoker.bindTo(newTarget);
-        }
-        throw new RuntimeException("NYI");
-    }
-
-    private MethodHandle dispatchWithConversion(MethodType callerType, MethodHandle target) {
-        MethodHandle finisher = dispatch(callerType, target);
-        if (returnConversionNeeded(callerType, target))
-            finisher = addReturnConversion(finisher, callerType.returnType());  //FIXME: slow
-        return finisher;
-    }
-
-    private boolean returnConversionPossible() {
-        Class<?> needType = erasedCallerType.returnType();
-        return !needType.isPrimitive();
-    }
-    private boolean returnConversionNeeded(MethodType callerType, MethodHandle target) {
-        Class<?> needType = callerType.returnType();
-        if (needType == erasedCallerType.returnType())
-            return false;  // no conversions possible, since must be primitive or Object
-        Class<?> haveType = target.type().returnType();
-        if (VerifyType.isNullConversion(haveType, needType) && !needType.isInterface())
-            return false;
-        return true;
-    }
-    private MethodHandle addReturnConversion(MethodHandle finisher, Class<?> type) {
-        // FIXME: This is slow because it creates a closure node on every call that requires a return cast.
-        MethodType finisherType = finisher.type();
-        MethodHandle caster = ValueConversions.identity(type);
-        caster = caster.asType(caster.type().changeParameterType(0, finisherType.returnType()));
-        finisher = MethodHandles.filterReturnValue(finisher, caster);
-        return finisher.asType(finisherType);
-    }
-
-    public String toString() {
-        return "InvokeGeneric"+erasedCallerType;
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/InvokerBytecodeGenerator.java b/ojluni/src/main/java/java/lang/invoke/InvokerBytecodeGenerator.java
deleted file mode 100755
index c9e2af7b..0000000
--- a/ojluni/src/main/java/java/lang/invoke/InvokerBytecodeGenerator.java
+++ /dev/null
@@ -1,1078 +0,0 @@
-/*
- * Copyright (c) 2012, 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.
- */
-
-package java.lang.invoke;
-
-import sun.invoke.util.VerifyAccess;
-import java.lang.invoke.LambdaForm.Name;
-import java.lang.invoke.MethodHandles.Lookup;
-
-import sun.invoke.util.Wrapper;
-
-import java.io.*;
-import java.util.*;
-
-import com.sun.xml.internal.ws.org.objectweb.asm.*;
-
-import java.lang.reflect.*;
-import static java.lang.invoke.MethodHandleStatics.*;
-import static java.lang.invoke.MethodHandleNatives.Constants.*;
-import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
-import sun.invoke.util.ValueConversions;
-import sun.invoke.util.VerifyType;
-
-/**
- * Code generation backend for LambdaForm.
- * <p>
- * @author John Rose, JSR 292 EG
- */
-class InvokerBytecodeGenerator {
-    /** Define class names for convenience. */
-    private static final String MH      = "java/lang/invoke/MethodHandle";
-    private static final String BMH     = "java/lang/invoke/BoundMethodHandle";
-    private static final String LF      = "java/lang/invoke/LambdaForm";
-    private static final String LFN     = "java/lang/invoke/LambdaForm$Name";
-    private static final String CLS     = "java/lang/Class";
-    private static final String OBJ     = "java/lang/Object";
-    private static final String OBJARY  = "[Ljava/lang/Object;";
-
-    private static final String LF_SIG  = "L" + LF + ";";
-    private static final String LFN_SIG = "L" + LFN + ";";
-    private static final String LL_SIG  = "(L" + OBJ + ";)L" + OBJ + ";";
-
-    /** Name of its super class*/
-    private static final String superName = LF;
-
-    /** Name of new class */
-    private final String className;
-
-    /** Name of the source file (for stack trace printing). */
-    private final String sourceFile;
-
-    private final LambdaForm lambdaForm;
-    private final String     invokerName;
-    private final MethodType invokerType;
-    private final int[] localsMap;
-
-    /** ASM bytecode generation. */
-    private ClassWriter cw;
-    private MethodVisitor mv;
-
-    private static final MemberName.Factory MEMBERNAME_FACTORY = MemberName.getFactory();
-    private static final Class<?> HOST_CLASS = LambdaForm.class;
-
-    private InvokerBytecodeGenerator(LambdaForm lambdaForm, int localsMapSize,
-                                     String className, String invokerName, MethodType invokerType) {
-        if (invokerName.contains(".")) {
-            int p = invokerName.indexOf(".");
-            className = invokerName.substring(0, p);
-            invokerName = invokerName.substring(p+1);
-        }
-        if (DUMP_CLASS_FILES) {
-            className = makeDumpableClassName(className);
-        }
-        this.className  = superName + "$" + className;
-        this.sourceFile = "LambdaForm$" + className;
-        this.lambdaForm = lambdaForm;
-        this.invokerName = invokerName;
-        this.invokerType = invokerType;
-        this.localsMap = new int[localsMapSize];
-    }
-
-    private InvokerBytecodeGenerator(String className, String invokerName, MethodType invokerType) {
-        this(null, invokerType.parameterCount(),
-             className, invokerName, invokerType);
-        // Create an array to map name indexes to locals indexes.
-        for (int i = 0; i < localsMap.length; i++) {
-            localsMap[i] = invokerType.parameterSlotCount() - invokerType.parameterSlotDepth(i);
-        }
-    }
-
-    private InvokerBytecodeGenerator(String className, LambdaForm form, MethodType invokerType) {
-        this(form, form.names.length,
-             className, form.debugName, invokerType);
-        // Create an array to map name indexes to locals indexes.
-        Name[] names = form.names;
-        for (int i = 0, index = 0; i < localsMap.length; i++) {
-            localsMap[i] = index;
-            index += Wrapper.forBasicType(names[i].type).stackSlots();
-        }
-    }
-
-
-    /** instance counters for dumped classes */
-    private final static HashMap<String,Integer> DUMP_CLASS_FILES_COUNTERS;
-    /** debugging flag for saving generated class files */
-    private final static File DUMP_CLASS_FILES_DIR;
-
-    static {
-        if (DUMP_CLASS_FILES) {
-            DUMP_CLASS_FILES_COUNTERS = new HashMap<>();
-            try {
-                File dumpDir = new File("DUMP_CLASS_FILES");
-                if (!dumpDir.exists()) {
-                    dumpDir.mkdirs();
-                }
-                DUMP_CLASS_FILES_DIR = dumpDir;
-                System.out.println("Dumping class files to "+DUMP_CLASS_FILES_DIR+"/...");
-            } catch (Exception e) {
-                throw newInternalError(e);
-            }
-        } else {
-            DUMP_CLASS_FILES_COUNTERS = null;
-            DUMP_CLASS_FILES_DIR = null;
-        }
-    }
-
-    static void maybeDump(final String className, final byte[] classFile) {
-        if (DUMP_CLASS_FILES) {
-            System.out.println("dump: " + className);
-            java.security.AccessController.doPrivileged(
-            new java.security.PrivilegedAction<Void>() {
-                public Void run() {
-                    try {
-                        String dumpName = className;
-                        //dumpName = dumpName.replace('/', '-');
-                        File dumpFile = new File(DUMP_CLASS_FILES_DIR, dumpName+".class");
-                        dumpFile.getParentFile().mkdirs();
-                        FileOutputStream file = new FileOutputStream(dumpFile);
-                        file.write(classFile);
-                        file.close();
-                        return null;
-                    } catch (IOException ex) {
-                        throw newInternalError(ex);
-                    }
-                }
-            });
-        }
-
-    }
-
-    private static String makeDumpableClassName(String className) {
-        Integer ctr;
-        synchronized (DUMP_CLASS_FILES_COUNTERS) {
-            ctr = DUMP_CLASS_FILES_COUNTERS.get(className);
-            if (ctr == null)  ctr = 0;
-            DUMP_CLASS_FILES_COUNTERS.put(className, ctr+1);
-        }
-        String sfx = ctr.toString();
-        while (sfx.length() < 3)
-            sfx = "0"+sfx;
-        className += sfx;
-        return className;
-    }
-
-    class CpPatch {
-        final int index;
-        final String placeholder;
-        final Object value;
-        CpPatch(int index, String placeholder, Object value) {
-            this.index = index;
-            this.placeholder = placeholder;
-            this.value = value;
-        }
-        public String toString() {
-            return "CpPatch/index="+index+",placeholder="+placeholder+",value="+value;
-        }
-    }
-
-    Map<Object, CpPatch> cpPatches = new HashMap<>();
-
-    int cph = 0;  // for counting constant placeholders
-
-    String constantPlaceholder(Object arg) {
-        String cpPlaceholder = "CONSTANT_PLACEHOLDER_" + cph++;
-        if (DUMP_CLASS_FILES) cpPlaceholder += " <<" + arg.toString() + ">>";  // debugging aid
-        if (cpPatches.containsKey(cpPlaceholder)) {
-            throw new InternalError("observed CP placeholder twice: " + cpPlaceholder);
-        }
-        // insert placeholder in CP and remember the patch
-        int index = cw.newConst((Object) cpPlaceholder);  // TODO check if aready in the constant pool
-        cpPatches.put(cpPlaceholder, new CpPatch(index, cpPlaceholder, arg));
-        return cpPlaceholder;
-    }
-
-    Object[] cpPatches(byte[] classFile) {
-        int size = getConstantPoolSize(classFile);
-        Object[] res = new Object[size];
-        for (CpPatch p : cpPatches.values()) {
-            if (p.index >= size)
-                throw new InternalError("in cpool["+size+"]: "+p+"\n"+Arrays.toString(Arrays.copyOf(classFile, 20)));
-            res[p.index] = p.value;
-        }
-        return res;
-    }
-
-    /**
-     * Extract the number of constant pool entries from a given class file.
-     *
-     * @param classFile the bytes of the class file in question.
-     * @return the number of entries in the constant pool.
-     */
-    private static int getConstantPoolSize(byte[] classFile) {
-        // The first few bytes:
-        // u4 magic;
-        // u2 minor_version;
-        // u2 major_version;
-        // u2 constant_pool_count;
-        return ((classFile[8] & 0xFF) << 8) | (classFile[9] & 0xFF);
-    }
-
-    /**
-     * Extract the MemberName of a newly-defined method.
-     *
-     * @param classFile
-     * @return
-     */
-    private MemberName loadMethod(byte[] classFile) {
-        Class<?> invokerClass = loadAndInitializeInvokerClass(classFile, cpPatches(classFile));
-        return resolveInvokerMember(invokerClass, invokerName, invokerType);
-    }
-
-    /**
-     * Define a given class as anonymous class in the runtime system.
-     *
-     * @param classBytes
-     * @param patches
-     * @return
-     */
-    private static Class<?> loadAndInitializeInvokerClass(byte[] classBytes, Object[] patches) {
-        Class<?> invokerClass = UNSAFE.defineAnonymousClass(HOST_CLASS, classBytes, patches);
-        UNSAFE.ensureClassInitialized(invokerClass);  // Make sure the class is initialized; VM might complain.
-        return invokerClass;
-    }
-
-    /**
-     * TODO
-     *
-     * @param invokerClass
-     * @param name
-     * @param type
-     * @return
-     */
-    private static MemberName resolveInvokerMember(Class<?> invokerClass, String name, MethodType type) {
-        MemberName member = new MemberName(invokerClass, name, type, REF_invokeStatic);
-        //System.out.println("resolveInvokerMember => "+member);
-        //for (Method m : invokerClass.getDeclaredMethods())  System.out.println("  "+m);
-        try {
-            member = MEMBERNAME_FACTORY.resolveOrFail(REF_invokeStatic, member, HOST_CLASS, ReflectiveOperationException.class);
-        } catch (ReflectiveOperationException e) {
-            throw newInternalError(e);
-        }
-        //System.out.println("resolveInvokerMember => "+member);
-        return member;
-    }
-
-    /**
-     * Set up class file generation.
-     */
-    private void classFilePrologue() {
-        cw = new ClassWriter(ClassWriter.COMPUTE_MAXS + ClassWriter.COMPUTE_FRAMES);
-        cw.visit(Opcodes.V1_6, Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_SUPER, className, null, superName, null);
-        cw.visitSource(sourceFile, null);
-
-        String invokerDesc = invokerType.toMethodDescriptorString();
-        mv = cw.visitMethod(Opcodes.ACC_STATIC, invokerName, invokerDesc, null, null);
-    }
-
-    /**
-     * Tear down class file generation.
-     */
-    private void classFileEpilogue() {
-        mv.visitMaxs(0, 0);
-        mv.visitEnd();
-    }
-
-    /*
-     * Low-level emit helpers.
-     */
-    private void emitConst(Object con) {
-        if (con == null) {
-            mv.visitInsn(Opcodes.ACONST_NULL);
-            return;
-        }
-        if (con instanceof Integer) {
-            emitIconstInsn((int) con);
-            return;
-        }
-        if (con instanceof Long) {
-            long x = (long) con;
-            if (x == (short) x) {
-                emitIconstInsn((int) x);
-                mv.visitInsn(Opcodes.I2L);
-                return;
-            }
-        }
-        if (con instanceof Float) {
-            float x = (float) con;
-            if (x == (short) x) {
-                emitIconstInsn((int) x);
-                mv.visitInsn(Opcodes.I2F);
-                return;
-            }
-        }
-        if (con instanceof Double) {
-            double x = (double) con;
-            if (x == (short) x) {
-                emitIconstInsn((int) x);
-                mv.visitInsn(Opcodes.I2D);
-                return;
-            }
-        }
-        if (con instanceof Boolean) {
-            emitIconstInsn((boolean) con ? 1 : 0);
-            return;
-        }
-        // fall through:
-        mv.visitLdcInsn(con);
-    }
-
-    private void emitIconstInsn(int i) {
-        int opcode;
-        switch (i) {
-        case 0:  opcode = Opcodes.ICONST_0;  break;
-        case 1:  opcode = Opcodes.ICONST_1;  break;
-        case 2:  opcode = Opcodes.ICONST_2;  break;
-        case 3:  opcode = Opcodes.ICONST_3;  break;
-        case 4:  opcode = Opcodes.ICONST_4;  break;
-        case 5:  opcode = Opcodes.ICONST_5;  break;
-        default:
-            if (i == (byte) i) {
-                mv.visitIntInsn(Opcodes.BIPUSH, i & 0xFF);
-            } else if (i == (short) i) {
-                mv.visitIntInsn(Opcodes.SIPUSH, (char) i);
-            } else {
-                mv.visitLdcInsn(i);
-            }
-            return;
-        }
-        mv.visitInsn(opcode);
-    }
-
-    /*
-     * NOTE: These load/store methods use the localsMap to find the correct index!
-     */
-    private void emitLoadInsn(char type, int index) {
-        int opcode;
-        switch (type) {
-        case 'I':  opcode = Opcodes.ILOAD;  break;
-        case 'J':  opcode = Opcodes.LLOAD;  break;
-        case 'F':  opcode = Opcodes.FLOAD;  break;
-        case 'D':  opcode = Opcodes.DLOAD;  break;
-        case 'L':  opcode = Opcodes.ALOAD;  break;
-        default:
-            throw new InternalError("unknown type: " + type);
-        }
-        mv.visitVarInsn(opcode, localsMap[index]);
-    }
-    private void emitAloadInsn(int index) {
-        emitLoadInsn('L', index);
-    }
-
-    private void emitStoreInsn(char type, int index) {
-        int opcode;
-        switch (type) {
-        case 'I':  opcode = Opcodes.ISTORE;  break;
-        case 'J':  opcode = Opcodes.LSTORE;  break;
-        case 'F':  opcode = Opcodes.FSTORE;  break;
-        case 'D':  opcode = Opcodes.DSTORE;  break;
-        case 'L':  opcode = Opcodes.ASTORE;  break;
-        default:
-            throw new InternalError("unknown type: " + type);
-        }
-        mv.visitVarInsn(opcode, localsMap[index]);
-    }
-    private void emitAstoreInsn(int index) {
-        emitStoreInsn('L', index);
-    }
-
-    /**
-     * Emit a boxing call.
-     *
-     * @param type primitive type class to box.
-     */
-    private void emitBoxing(Class<?> type) {
-        Wrapper wrapper = Wrapper.forPrimitiveType(type);
-        String owner = "java/lang/" + wrapper.wrapperType().getSimpleName();
-        String name  = "valueOf";
-        String desc  = "(" + wrapper.basicTypeChar() + ")L" + owner + ";";
-        mv.visitMethodInsn(Opcodes.INVOKESTATIC, owner, name, desc);
-    }
-
-    /**
-     * Emit an unboxing call (plus preceding checkcast).
-     *
-     * @param type wrapper type class to unbox.
-     */
-    private void emitUnboxing(Class<?> type) {
-        Wrapper wrapper = Wrapper.forWrapperType(type);
-        String owner = "java/lang/" + wrapper.wrapperType().getSimpleName();
-        String name  = wrapper.primitiveSimpleName() + "Value";
-        String desc  = "()" + wrapper.basicTypeChar();
-        mv.visitTypeInsn(Opcodes.CHECKCAST, owner);
-        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, owner, name, desc);
-    }
-
-    /**
-     * Emit an implicit conversion.
-     *
-     * @param ptype type of value present on stack
-     * @param pclass type of value required on stack
-     */
-    private void emitImplicitConversion(char ptype, Class<?> pclass) {
-        switch (ptype) {
-        case 'L':
-            if (VerifyType.isNullConversion(Object.class, pclass))
-                return;
-            if (isStaticallyNameable(pclass)) {
-                mv.visitTypeInsn(Opcodes.CHECKCAST, getInternalName(pclass));
-            } else {
-                mv.visitLdcInsn(constantPlaceholder(pclass));
-                mv.visitTypeInsn(Opcodes.CHECKCAST, CLS);
-                mv.visitInsn(Opcodes.SWAP);
-                mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, CLS, "cast", LL_SIG);
-                if (pclass.isArray())
-                    mv.visitTypeInsn(Opcodes.CHECKCAST, OBJARY);
-            }
-            return;
-        case 'I':
-            if (!VerifyType.isNullConversion(int.class, pclass))
-                emitPrimCast(ptype, Wrapper.basicTypeChar(pclass));
-            return;
-        case 'J':
-            assert(pclass == long.class);
-            return;
-        case 'F':
-            assert(pclass == float.class);
-            return;
-        case 'D':
-            assert(pclass == double.class);
-            return;
-        }
-        throw new InternalError("bad implicit conversion: tc="+ptype+": "+pclass);
-    }
-
-    /**
-     * Emits an actual return instruction conforming to the given return type.
-     */
-    private void emitReturnInsn(Class<?> type) {
-        int opcode;
-        switch (Wrapper.basicTypeChar(type)) {
-        case 'I':  opcode = Opcodes.IRETURN;  break;
-        case 'J':  opcode = Opcodes.LRETURN;  break;
-        case 'F':  opcode = Opcodes.FRETURN;  break;
-        case 'D':  opcode = Opcodes.DRETURN;  break;
-        case 'L':  opcode = Opcodes.ARETURN;  break;
-        case 'V':  opcode = Opcodes.RETURN;   break;
-        default:
-            throw new InternalError("unknown return type: " + type);
-        }
-        mv.visitInsn(opcode);
-    }
-
-    private static String getInternalName(Class<?> c) {
-        assert(VerifyAccess.isTypeVisible(c, Object.class));
-        return c.getName().replace('.', '/');
-    }
-
-    /**
-     * Generate customized bytecode for a given LambdaForm.
-     *
-     * @param form
-     * @param invokerType
-     * @return
-     */
-    static MemberName generateCustomizedCode(LambdaForm form, MethodType invokerType) {
-        InvokerBytecodeGenerator g = new InvokerBytecodeGenerator("MH", form, invokerType);
-        return g.loadMethod(g.generateCustomizedCodeBytes());
-    }
-
-    /**
-     * Generate an invoker method for the passed {@link LambdaForm}.
-     */
-    private byte[] generateCustomizedCodeBytes() {
-        classFilePrologue();
-
-        // Suppress this method in backtraces displayed to the user.
-        mv.visitAnnotation("Ljava/lang/invoke/LambdaForm$Hidden;", true);
-
-        // Mark this method as a compiled LambdaForm
-        mv.visitAnnotation("Ljava/lang/invoke/LambdaForm$Compiled;", true);
-
-        // Force inlining of this invoker method.
-        mv.visitAnnotation("Ljava/lang/invoke/ForceInline;", true);
-
-        // iterate over the form's names, generating bytecode instructions for each
-        // start iterating at the first name following the arguments
-        for (int i = lambdaForm.arity; i < lambdaForm.names.length; i++) {
-            Name name = lambdaForm.names[i];
-            MemberName member = name.function.member();
-
-            if (isSelectAlternative(member)) {
-                // selectAlternative idiom
-                // FIXME: make sure this idiom is really present!
-                emitSelectAlternative(name, lambdaForm.names[i + 1]);
-                i++;  // skip MH.invokeBasic of the selectAlternative result
-            } else if (isStaticallyInvocable(member)) {
-                emitStaticInvoke(member, name);
-            } else {
-                emitInvoke(name);
-            }
-
-            // store the result from evaluating to the target name in a local if required
-            // (if this is the last value, i.e., the one that is going to be returned,
-            // avoid store/load/return and just return)
-            if (i == lambdaForm.names.length - 1 && i == lambdaForm.result) {
-                // return value - do nothing
-            } else if (name.type != 'V') {
-                // non-void: actually assign
-                emitStoreInsn(name.type, name.index());
-            }
-        }
-
-        // return statement
-        emitReturn();
-
-        classFileEpilogue();
-        bogusMethod(lambdaForm);
-
-        final byte[] classFile = cw.toByteArray();
-        maybeDump(className, classFile);
-        return classFile;
-    }
-
-    /**
-     * Emit an invoke for the given name.
-     *
-     * @param name
-     */
-    void emitInvoke(Name name) {
-        if (true) {
-            // push receiver
-            MethodHandle target = name.function.resolvedHandle;
-            assert(target != null) : name.exprString();
-            mv.visitLdcInsn(constantPlaceholder(target));
-            mv.visitTypeInsn(Opcodes.CHECKCAST, MH);
-        } else {
-            // load receiver
-            emitAloadInsn(0);
-            mv.visitTypeInsn(Opcodes.CHECKCAST, MH);
-            mv.visitFieldInsn(Opcodes.GETFIELD, MH, "form", LF_SIG);
-            mv.visitFieldInsn(Opcodes.GETFIELD, LF, "names", LFN_SIG);
-            // TODO more to come
-        }
-
-        // push arguments
-        for (int i = 0; i < name.arguments.length; i++) {
-            emitPushArgument(name, i);
-        }
-
-        // invocation
-        MethodType type = name.function.methodType();
-        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", type.basicType().toMethodDescriptorString());
-    }
-
-    static private Class<?>[] STATICALLY_INVOCABLE_PACKAGES = {
-        // Sample classes from each package we are willing to bind to statically:
-        java.lang.Object.class,
-        java.util.Arrays.class,
-        sun.misc.Unsafe.class
-        //MethodHandle.class already covered
-    };
-
-    static boolean isStaticallyInvocable(MemberName member) {
-        if (member == null)  return false;
-        if (member.isConstructor())  return false;
-        Class<?> cls = member.getDeclaringClass();
-        if (cls.isArray() || cls.isPrimitive())
-            return false;  // FIXME
-        if (cls.isAnonymousClass() || cls.isLocalClass())
-            return false;  // inner class of some sort
-        if (cls.getClassLoader() != MethodHandle.class.getClassLoader())
-            return false;  // not on BCP
-        if (!member.isPrivate() && VerifyAccess.isSamePackage(MethodHandle.class, cls))
-            return true;   // in java.lang.invoke package
-        if (member.isPublic() && isStaticallyNameable(cls))
-            return true;
-        return false;
-    }
-
-    static boolean isStaticallyNameable(Class<?> cls) {
-        while (cls.isArray())
-            cls = cls.getComponentType();
-        if (cls.isPrimitive())
-            return true;  // int[].class, for example
-        if (cls.getClassLoader() != Object.class.getClassLoader())
-            return false;
-        if (VerifyAccess.isSamePackage(MethodHandle.class, cls))
-            return true;
-        if (!Modifier.isPublic(cls.getModifiers()))
-            return false;
-        for (Class<?> pkgcls : STATICALLY_INVOCABLE_PACKAGES) {
-            if (VerifyAccess.isSamePackage(pkgcls, cls))
-                return true;
-        }
-        return false;
-    }
-
-    /**
-     * Emit an invoke for the given name, using the MemberName directly.
-     *
-     * @param name
-     */
-    void emitStaticInvoke(MemberName member, Name name) {
-        assert(member.equals(name.function.member()));
-        String cname = getInternalName(member.getDeclaringClass());
-        String mname = member.getName();
-        String mtype;
-        byte refKind = member.getReferenceKind();
-        if (refKind == REF_invokeSpecial) {
-            // in order to pass the verifier, we need to convert this to invokevirtual in all cases
-            assert(member.canBeStaticallyBound()) : member;
-            refKind = REF_invokeVirtual;
-        }
-
-        // push arguments
-        for (int i = 0; i < name.arguments.length; i++) {
-            emitPushArgument(name, i);
-        }
-
-        // invocation
-        if (member.isMethod()) {
-            mtype = member.getMethodType().toMethodDescriptorString();
-            mv.visitMethodInsn(refKindOpcode(refKind), cname, mname, mtype);
-        } else {
-            mtype = MethodType.toFieldDescriptorString(member.getFieldType());
-            mv.visitFieldInsn(refKindOpcode(refKind), cname, mname, mtype);
-        }
-    }
-    int refKindOpcode(byte refKind) {
-        switch (refKind) {
-        case REF_invokeVirtual:      return Opcodes.INVOKEVIRTUAL;
-        case REF_invokeStatic:       return Opcodes.INVOKESTATIC;
-        case REF_invokeSpecial:      return Opcodes.INVOKESPECIAL;
-        case REF_invokeInterface:    return Opcodes.INVOKEINTERFACE;
-        case REF_getField:           return Opcodes.GETFIELD;
-        case REF_putField:           return Opcodes.PUTFIELD;
-        case REF_getStatic:          return Opcodes.GETSTATIC;
-        case REF_putStatic:          return Opcodes.PUTSTATIC;
-        }
-        throw new InternalError("refKind="+refKind);
-    }
-
-    /**
-     * Check if MemberName is a call to MethodHandleImpl.selectAlternative.
-     *
-     * @param member
-     * @return true if member is a call to MethodHandleImpl.selectAlternative
-     */
-    private boolean isSelectAlternative(MemberName member) {
-        return member != null &&
-               member.getDeclaringClass() == MethodHandleImpl.class &&
-               member.getName().equals("selectAlternative");
-    }
-
-    /**
-     * Emit bytecode for the selectAlternative idiom.
-     *
-     * The pattern looks like (Cf. MethodHandleImpl.makeGuardWithTest):
-     *
-     *   Lambda(a0:L,a1:I)=>{
-     *     t2:I=foo.test(a1:I);
-     *     t3:L=MethodHandleImpl.selectAlternative(t2:I,(MethodHandle(int)int),(MethodHandle(int)int));
-     *     t4:I=MethodHandle.invokeBasic(t3:L,a1:I);t4:I}
-     *
-     * @param selectAlternativeName
-     * @param invokeBasicName
-     */
-    private void emitSelectAlternative(Name selectAlternativeName, Name invokeBasicName) {
-        MethodType type = selectAlternativeName.function.methodType();
-
-        Name receiver = (Name) invokeBasicName.arguments[0];
-
-        Label L_fallback = new Label();
-        Label L_done     = new Label();
-
-        // load test result
-        emitPushArgument(selectAlternativeName, 0);
-        mv.visitInsn(Opcodes.ICONST_1);
-
-        // if_icmpne L_fallback
-        mv.visitJumpInsn(Opcodes.IF_ICMPNE, L_fallback);
-
-        // invoke selectAlternativeName.arguments[1]
-        MethodHandle target = (MethodHandle) selectAlternativeName.arguments[1];
-        emitPushArgument(selectAlternativeName, 1);  // get 2nd argument of selectAlternative
-        emitAstoreInsn(receiver.index());  // store the MH in the receiver slot
-        emitInvoke(invokeBasicName);
-
-        // goto L_done
-        mv.visitJumpInsn(Opcodes.GOTO, L_done);
-
-        // L_fallback:
-        mv.visitLabel(L_fallback);
-
-        // invoke selectAlternativeName.arguments[2]
-        MethodHandle fallback = (MethodHandle) selectAlternativeName.arguments[2];
-        emitPushArgument(selectAlternativeName, 2);  // get 3rd argument of selectAlternative
-        emitAstoreInsn(receiver.index());  // store the MH in the receiver slot
-        emitInvoke(invokeBasicName);
-
-        // L_done:
-        mv.visitLabel(L_done);
-    }
-
-    /**
-     *
-     * @param name
-     * @param paramIndex
-     */
-    private void emitPushArgument(Name name, int paramIndex) {
-        Object arg = name.arguments[paramIndex];
-        char ptype = name.function.parameterType(paramIndex);
-        MethodType mtype = name.function.methodType();
-        if (arg instanceof Name) {
-            Name n = (Name) arg;
-            emitLoadInsn(n.type, n.index());
-            emitImplicitConversion(n.type, mtype.parameterType(paramIndex));
-        } else if ((arg == null || arg instanceof String) && ptype == 'L') {
-            emitConst(arg);
-        } else {
-            if (Wrapper.isWrapperType(arg.getClass()) && ptype != 'L') {
-                emitConst(arg);
-            } else {
-                mv.visitLdcInsn(constantPlaceholder(arg));
-                emitImplicitConversion('L', mtype.parameterType(paramIndex));
-            }
-        }
-    }
-
-    /**
-     * Emits a return statement from a LF invoker. If required, the result type is cast to the correct return type.
-     */
-    private void emitReturn() {
-        // return statement
-        if (lambdaForm.result == -1) {
-            // void
-            mv.visitInsn(Opcodes.RETURN);
-        } else {
-            LambdaForm.Name rn = lambdaForm.names[lambdaForm.result];
-            char rtype = Wrapper.basicTypeChar(invokerType.returnType());
-
-            // put return value on the stack if it is not already there
-            if (lambdaForm.result != lambdaForm.names.length - 1) {
-                emitLoadInsn(rn.type, lambdaForm.result);
-            }
-
-            // potentially generate cast
-            // rtype is the return type of the invoker - generated code must conform to this
-            // rn.type is the type of the result Name in the LF
-            if (rtype != rn.type) {
-                // need cast
-                if (rtype == 'L') {
-                    // possibly cast the primitive to the correct type for boxing
-                    char boxedType = Wrapper.forWrapperType(invokerType.returnType()).basicTypeChar();
-                    if (boxedType != rn.type) {
-                        emitPrimCast(rn.type, boxedType);
-                    }
-                    // cast primitive to reference ("boxing")
-                    emitBoxing(invokerType.returnType());
-                } else {
-                    // to-primitive cast
-                    if (rn.type != 'L') {
-                        // prim-to-prim cast
-                        emitPrimCast(rn.type, rtype);
-                    } else {
-                        // ref-to-prim cast ("unboxing")
-                        throw new InternalError("no ref-to-prim (unboxing) casts supported right now");
-                    }
-                }
-            }
-
-            // generate actual return statement
-            emitReturnInsn(invokerType.returnType());
-        }
-    }
-
-    /**
-     * Emit a type conversion bytecode casting from "from" to "to".
-     */
-    private void emitPrimCast(char from, char to) {
-        // Here's how.
-        // -   indicates forbidden
-        // <-> indicates implicit
-        //      to ----> boolean  byte     short    char     int      long     float    double
-        // from boolean    <->        -        -        -        -        -        -        -
-        //      byte        -       <->       i2s      i2c      <->      i2l      i2f      i2d
-        //      short       -       i2b       <->      i2c      <->      i2l      i2f      i2d
-        //      char        -       i2b       i2s      <->      <->      i2l      i2f      i2d
-        //      int         -       i2b       i2s      i2c      <->      i2l      i2f      i2d
-        //      long        -     l2i,i2b   l2i,i2s  l2i,i2c    l2i      <->      l2f      l2d
-        //      float       -     f2i,i2b   f2i,i2s  f2i,i2c    f2i      f2l      <->      f2d
-        //      double      -     d2i,i2b   d2i,i2s  d2i,i2c    d2i      d2l      d2f      <->
-        if (from == to) {
-            // no cast required, should be dead code anyway
-            return;
-        }
-        Wrapper wfrom = Wrapper.forBasicType(from);
-        Wrapper wto   = Wrapper.forBasicType(to);
-        if (wfrom.isSubwordOrInt()) {
-            // cast from {byte,short,char,int} to anything
-            emitI2X(to);
-        } else {
-            // cast from {long,float,double} to anything
-            if (wto.isSubwordOrInt()) {
-                // cast to {byte,short,char,int}
-                emitX2I(from);
-                if (wto.bitWidth() < 32) {
-                    // targets other than int require another conversion
-                    emitI2X(to);
-                }
-            } else {
-                // cast to {long,float,double} - this is verbose
-                boolean error = false;
-                switch (from) {
-                case 'J':
-                         if (to == 'F') { mv.visitInsn(Opcodes.L2F); }
-                    else if (to == 'D') { mv.visitInsn(Opcodes.L2D); }
-                    else error = true;
-                    break;
-                case 'F':
-                         if (to == 'J') { mv.visitInsn(Opcodes.F2L); }
-                    else if (to == 'D') { mv.visitInsn(Opcodes.F2D); }
-                    else error = true;
-                    break;
-                case 'D':
-                         if (to == 'J') { mv.visitInsn(Opcodes.D2L); }
-                    else if (to == 'F') { mv.visitInsn(Opcodes.D2F); }
-                    else error = true;
-                    break;
-                default:
-                    error = true;
-                    break;
-                }
-                if (error) {
-                    throw new IllegalStateException("unhandled prim cast: " + from + "2" + to);
-                }
-            }
-        }
-    }
-
-    private void emitI2X(char type) {
-        switch (type) {
-        case 'B':  mv.visitInsn(Opcodes.I2B);  break;
-        case 'S':  mv.visitInsn(Opcodes.I2S);  break;
-        case 'C':  mv.visitInsn(Opcodes.I2C);  break;
-        case 'I':  /* naught */                break;
-        case 'J':  mv.visitInsn(Opcodes.I2L);  break;
-        case 'F':  mv.visitInsn(Opcodes.I2F);  break;
-        case 'D':  mv.visitInsn(Opcodes.I2D);  break;
-        case 'Z':
-            // For compatibility with ValueConversions and explicitCastArguments:
-            mv.visitInsn(Opcodes.ICONST_1);
-            mv.visitInsn(Opcodes.IAND);
-            break;
-        default:   throw new InternalError("unknown type: " + type);
-        }
-    }
-
-    private void emitX2I(char type) {
-        switch (type) {
-        case 'J':  mv.visitInsn(Opcodes.L2I);  break;
-        case 'F':  mv.visitInsn(Opcodes.F2I);  break;
-        case 'D':  mv.visitInsn(Opcodes.D2I);  break;
-        default:   throw new InternalError("unknown type: " + type);
-        }
-    }
-
-    private static String basicTypeCharSignature(String prefix, MethodType type) {
-        StringBuilder buf = new StringBuilder(prefix);
-        for (Class<?> ptype : type.parameterList())
-            buf.append(Wrapper.forBasicType(ptype).basicTypeChar());
-        buf.append('_').append(Wrapper.forBasicType(type.returnType()).basicTypeChar());
-        return buf.toString();
-    }
-
-    /**
-     * Generate bytecode for a LambdaForm.vmentry which calls interpretWithArguments.
-     *
-     * @param sig
-     * @return
-     */
-    static MemberName generateLambdaFormInterpreterEntryPoint(String sig) {
-        assert(LambdaForm.isValidSignature(sig));
-        //System.out.println("generateExactInvoker "+sig);
-        // compute method type
-        // first parameter and return type
-        char tret = LambdaForm.signatureReturn(sig);
-        MethodType type = MethodType.methodType(LambdaForm.typeClass(tret), MethodHandle.class);
-        // other parameter types
-        int arity = LambdaForm.signatureArity(sig);
-        for (int i = 1; i < arity; i++) {
-            type = type.appendParameterTypes(LambdaForm.typeClass(sig.charAt(i)));
-        }
-        InvokerBytecodeGenerator g = new InvokerBytecodeGenerator("LFI", "interpret_"+tret, type);
-        return g.loadMethod(g.generateLambdaFormInterpreterEntryPointBytes());
-    }
-
-    private byte[] generateLambdaFormInterpreterEntryPointBytes() {
-        classFilePrologue();
-
-        // Suppress this method in backtraces displayed to the user.
-        mv.visitAnnotation("Ljava/lang/invoke/LambdaForm$Hidden;", true);
-
-        // Don't inline the interpreter entry.
-        mv.visitAnnotation("Ljava/lang/invoke/DontInline;", true);
-
-        // create parameter array
-        emitIconstInsn(invokerType.parameterCount());
-        mv.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/Object");
-
-        // fill parameter array
-        for (int i = 0; i < invokerType.parameterCount(); i++) {
-            Class<?> ptype = invokerType.parameterType(i);
-            mv.visitInsn(Opcodes.DUP);
-            emitIconstInsn(i);
-            emitLoadInsn(Wrapper.basicTypeChar(ptype), i);
-            // box if primitive type
-            if (ptype.isPrimitive()) {
-                emitBoxing(ptype);
-            }
-            mv.visitInsn(Opcodes.AASTORE);
-        }
-        // invoke
-        emitAloadInsn(0);
-        mv.visitFieldInsn(Opcodes.GETFIELD, MH, "form", "Ljava/lang/invoke/LambdaForm;");
-        mv.visitInsn(Opcodes.SWAP);  // swap form and array; avoid local variable
-        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, LF, "interpretWithArguments", "([Ljava/lang/Object;)Ljava/lang/Object;");
-
-        // maybe unbox
-        Class<?> rtype = invokerType.returnType();
-        if (rtype.isPrimitive() && rtype != void.class) {
-            emitUnboxing(Wrapper.asWrapperType(rtype));
-        }
-
-        // return statement
-        emitReturnInsn(rtype);
-
-        classFileEpilogue();
-        bogusMethod(invokerType);
-
-        final byte[] classFile = cw.toByteArray();
-        maybeDump(className, classFile);
-        return classFile;
-    }
-
-    /**
-     * Generate bytecode for a NamedFunction invoker.
-     *
-     * @param srcType
-     * @param dstType
-     * @return
-     */
-    static MemberName generateNamedFunctionInvoker(MethodTypeForm typeForm) {
-        MethodType invokerType = LambdaForm.NamedFunction.INVOKER_METHOD_TYPE;
-        String invokerName = basicTypeCharSignature("invoke_", typeForm.erasedType());
-        InvokerBytecodeGenerator g = new InvokerBytecodeGenerator("NFI", invokerName, invokerType);
-        return g.loadMethod(g.generateNamedFunctionInvokerImpl(typeForm));
-    }
-
-    static int nfi = 0;
-
-    private byte[] generateNamedFunctionInvokerImpl(MethodTypeForm typeForm) {
-        MethodType dstType = typeForm.erasedType();
-        classFilePrologue();
-
-        // Suppress this method in backtraces displayed to the user.
-        mv.visitAnnotation("Ljava/lang/invoke/LambdaForm$Hidden;", true);
-
-        // Force inlining of this invoker method.
-        mv.visitAnnotation("Ljava/lang/invoke/ForceInline;", true);
-
-        // Load receiver
-        emitAloadInsn(0);
-
-        // Load arguments from array
-        for (int i = 0; i < dstType.parameterCount(); i++) {
-            emitAloadInsn(1);
-            emitIconstInsn(i);
-            mv.visitInsn(Opcodes.AALOAD);
-
-            // Maybe unbox
-            Class<?> dptype = dstType.parameterType(i);
-            if (dptype.isPrimitive()) {
-                Class<?> sptype = dstType.basicType().wrap().parameterType(i);
-                Wrapper dstWrapper = Wrapper.forBasicType(dptype);
-                Wrapper srcWrapper = dstWrapper.isSubwordOrInt() ? Wrapper.INT : dstWrapper;  // narrow subword from int
-                emitUnboxing(srcWrapper.wrapperType());
-                emitPrimCast(srcWrapper.basicTypeChar(), dstWrapper.basicTypeChar());
-            }
-        }
-
-        // Invoke
-        String targetDesc = dstType.basicType().toMethodDescriptorString();
-        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", targetDesc);
-
-        // Box primitive types
-        Class<?> rtype = dstType.returnType();
-        if (rtype != void.class && rtype.isPrimitive()) {
-            Wrapper srcWrapper = Wrapper.forBasicType(rtype);
-            Wrapper dstWrapper = srcWrapper.isSubwordOrInt() ? Wrapper.INT : srcWrapper;  // widen subword to int
-            // boolean casts not allowed
-            emitPrimCast(srcWrapper.basicTypeChar(), dstWrapper.basicTypeChar());
-            emitBoxing(dstWrapper.primitiveType());
-        }
-
-        // If the return type is void we return a null reference.
-        if (rtype == void.class) {
-            mv.visitInsn(Opcodes.ACONST_NULL);
-        }
-        emitReturnInsn(Object.class);  // NOTE: NamedFunction invokers always return a reference value.
-
-        classFileEpilogue();
-        bogusMethod(dstType);
-
-        final byte[] classFile = cw.toByteArray();
-        maybeDump(className, classFile);
-        return classFile;
-    }
-
-    /**
-     * Emit a bogus method that just loads some string constants. This is to get the constants into the constant pool
-     * for debugging purposes.
-     */
-    private void bogusMethod(Object... os) {
-        if (DUMP_CLASS_FILES) {
-            mv = cw.visitMethod(Opcodes.ACC_STATIC, "dummy", "()V", null, null);
-            for (Object o : os) {
-                mv.visitLdcInsn(o.toString());
-                mv.visitInsn(Opcodes.POP);
-            }
-            mv.visitInsn(Opcodes.RETURN);
-            mv.visitMaxs(0, 0);
-            mv.visitEnd();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/Invokers.java b/ojluni/src/main/java/java/lang/invoke/Invokers.java
deleted file mode 100755
index 0e40396..0000000
--- a/ojluni/src/main/java/java/lang/invoke/Invokers.java
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package java.lang.invoke;
-
-import java.util.Arrays;
-import sun.invoke.empty.Empty;
-import static java.lang.invoke.MethodHandleStatics.*;
-import static java.lang.invoke.MethodHandleNatives.Constants.*;
-import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
-import static java.lang.invoke.LambdaForm.*;
-
-/**
- * Construction and caching of often-used invokers.
- * @author jrose
- */
-class Invokers {
-    // exact type (sans leading taget MH) for the outgoing call
-    private final MethodType targetType;
-
-    // FIXME: Get rid of the invokers that are not useful.
-
-    // exact invoker for the outgoing call
-    private /*lazy*/ MethodHandle exactInvoker;
-
-    // erased (partially untyped but with primitives) invoker for the outgoing call
-    // FIXME: get rid of
-    private /*lazy*/ MethodHandle erasedInvoker;
-    // FIXME: get rid of
-    /*lazy*/ MethodHandle erasedInvokerWithDrops;  // for InvokeGeneric
-
-    // general invoker for the outgoing call
-    private /*lazy*/ MethodHandle generalInvoker;
-
-    // general invoker for the outgoing call, uses varargs
-    private /*lazy*/ MethodHandle varargsInvoker;
-
-    // general invoker for the outgoing call; accepts a trailing Object[]
-    private final /*lazy*/ MethodHandle[] spreadInvokers;
-
-    // invoker for an unbound callsite
-    private /*lazy*/ MethodHandle uninitializedCallSite;
-
-    /** Compute and cache information common to all collecting adapters
-     *  that implement members of the erasure-family of the given erased type.
-     */
-    /*non-public*/ Invokers(MethodType targetType) {
-        this.targetType = targetType;
-        this.spreadInvokers = new MethodHandle[targetType.parameterCount()+1];
-    }
-
-    /*non-public*/ MethodHandle exactInvoker() {
-        MethodHandle invoker = exactInvoker;
-        if (invoker != null)  return invoker;
-        MethodType mtype = targetType;
-        MethodType invokerType = mtype.invokerType();
-        LambdaForm lform;
-        final int MTYPE_ARG_APPENDED = 1;  // argument count for appended mtype value
-        if (mtype.parameterSlotCount() <= MethodType.MAX_MH_INVOKER_ARITY - MTYPE_ARG_APPENDED) {
-            lform = invokeForm(mtype, false, MethodTypeForm.LF_EX_INVOKER);
-            invoker = BoundMethodHandle.bindSingle(invokerType, lform, mtype);
-        } else {
-            // At maximum arity, we cannot afford an extra mtype argument,
-            // so build a fully customized (non-cached) invoker form.
-            lform = invokeForm(mtype, true, MethodTypeForm.LF_EX_INVOKER);
-            invoker = SimpleMethodHandle.make(invokerType, lform);
-        }
-        assert(checkInvoker(invoker));
-        exactInvoker = invoker;
-        return invoker;
-    }
-
-    /*non-public*/ MethodHandle generalInvoker() {
-        MethodHandle invoker = generalInvoker;
-        if (invoker != null)  return invoker;
-        MethodType mtype = targetType;
-        MethodType invokerType = mtype.invokerType();
-        LambdaForm lform;
-        final int MTYPE_ARG_APPENDED = 1;  // argument count for appended mtype value
-        assert(GENERIC_INVOKER_SLOP >= MTYPE_ARG_APPENDED);
-        if (mtype.parameterSlotCount() <= MethodType.MAX_MH_INVOKER_ARITY - GENERIC_INVOKER_SLOP) {
-            prepareForGenericCall(mtype);
-            lform = invokeForm(mtype, false, MethodTypeForm.LF_GEN_INVOKER);
-            invoker = BoundMethodHandle.bindSingle(invokerType, lform, mtype);
-        } else {
-            // At maximum arity, we cannot afford an extra mtype argument,
-            // so build a fully customized (non-cached) invoker form.
-            lform = invokeForm(mtype, true, MethodTypeForm.LF_GEN_INVOKER);
-            invoker = SimpleMethodHandle.make(invokerType, lform);
-        }
-        assert(checkInvoker(invoker));
-        generalInvoker = invoker;
-        return invoker;
-    }
-
-    /*non-public*/ MethodHandle makeBasicInvoker() {
-        MethodHandle invoker = DirectMethodHandle.make(invokeBasicMethod(targetType));
-        assert(targetType == targetType.basicType());
-        // Note:  This is not cached here.  It is cached by the calling MethodTypeForm.
-        assert(checkInvoker(invoker));
-        return invoker;
-    }
-
-    static MemberName invokeBasicMethod(MethodType type) {
-        type = type.basicType();
-        String name = "invokeBasic";
-        try {
-            //Lookup.findVirtual(MethodHandle.class, name, type);
-            return IMPL_LOOKUP.resolveOrFail(REF_invokeVirtual, MethodHandle.class, name, type);
-        } catch (ReflectiveOperationException ex) {
-            throw newInternalError("JVM cannot find invoker for "+type, ex);
-        }
-    }
-
-    private boolean checkInvoker(MethodHandle invoker) {
-        assert(targetType.invokerType().equals(invoker.type()))
-                : java.util.Arrays.asList(targetType, targetType.invokerType(), invoker);
-        assert(invoker.internalMemberName() == null ||
-               invoker.internalMemberName().getMethodType().equals(targetType));
-        assert(!invoker.isVarargsCollector());
-        return true;
-    }
-
-    // FIXME: get rid of
-    /*non-public*/ MethodHandle erasedInvoker() {
-        MethodHandle xinvoker = exactInvoker();
-        MethodHandle invoker = erasedInvoker;
-        if (invoker != null)  return invoker;
-        MethodType erasedType = targetType.erase();
-        invoker = xinvoker.asType(erasedType.invokerType());
-        erasedInvoker = invoker;
-        return invoker;
-    }
-
-    /*non-public*/ MethodHandle spreadInvoker(int leadingArgCount) {
-        MethodHandle vaInvoker = spreadInvokers[leadingArgCount];
-        if (vaInvoker != null)  return vaInvoker;
-        int spreadArgCount = targetType.parameterCount() - leadingArgCount;
-        MethodType spreadInvokerType = targetType
-            .replaceParameterTypes(leadingArgCount, targetType.parameterCount(), Object[].class);
-        if (targetType.parameterSlotCount() <= MethodType.MAX_MH_INVOKER_ARITY) {
-            // Factor sinvoker.invoke(mh, a) into ginvoker.asSpreader().invoke(mh, a)
-            // where ginvoker.invoke(mh, a*) => mh.invoke(a*).
-            MethodHandle genInvoker = generalInvoker();
-            vaInvoker = genInvoker.asSpreader(Object[].class, spreadArgCount);
-        } else {
-            // Cannot build a general invoker here of type ginvoker.invoke(mh, a*[254]).
-            // Instead, factor sinvoker.invoke(mh, a) into ainvoker.invoke(filter(mh), a)
-            // where filter(mh) == mh.asSpreader(Object[], spreadArgCount)
-            MethodHandle arrayInvoker = MethodHandles.exactInvoker(spreadInvokerType);
-            MethodHandle makeSpreader;
-            try {
-                makeSpreader = IMPL_LOOKUP
-                    .findVirtual(MethodHandle.class, "asSpreader",
-                        MethodType.methodType(MethodHandle.class, Class.class, int.class));
-            } catch (ReflectiveOperationException ex) {
-                throw newInternalError(ex);
-            }
-            makeSpreader = MethodHandles.insertArguments(makeSpreader, 1, Object[].class, spreadArgCount);
-            vaInvoker = MethodHandles.filterArgument(arrayInvoker, 0, makeSpreader);
-        }
-        assert(vaInvoker.type().equals(spreadInvokerType.invokerType()));
-        spreadInvokers[leadingArgCount] = vaInvoker;
-        return vaInvoker;
-    }
-
-    /*non-public*/ MethodHandle varargsInvoker() {
-        MethodHandle vaInvoker = varargsInvoker;
-        if (vaInvoker != null)  return vaInvoker;
-        vaInvoker = spreadInvoker(0).asType(MethodType.genericMethodType(0, true).invokerType());
-        varargsInvoker = vaInvoker;
-        return vaInvoker;
-    }
-
-    private static MethodHandle THROW_UCS = null;
-
-    /*non-public*/ MethodHandle uninitializedCallSite() {
-        MethodHandle invoker = uninitializedCallSite;
-        if (invoker != null)  return invoker;
-        if (targetType.parameterCount() > 0) {
-            MethodType type0 = targetType.dropParameterTypes(0, targetType.parameterCount());
-            Invokers invokers0 = type0.invokers();
-            invoker = MethodHandles.dropArguments(invokers0.uninitializedCallSite(),
-                                                  0, targetType.parameterList());
-            assert(invoker.type().equals(targetType));
-            uninitializedCallSite = invoker;
-            return invoker;
-        }
-        invoker = THROW_UCS;
-        if (invoker == null) {
-            try {
-                THROW_UCS = invoker = IMPL_LOOKUP
-                    .findStatic(CallSite.class, "uninitializedCallSite",
-                                MethodType.methodType(Empty.class));
-            } catch (ReflectiveOperationException ex) {
-                throw newInternalError(ex);
-            }
-        }
-        invoker = MethodHandles.explicitCastArguments(invoker, MethodType.methodType(targetType.returnType()));
-        invoker = invoker.dropArguments(targetType, 0, targetType.parameterCount());
-        assert(invoker.type().equals(targetType));
-        uninitializedCallSite = invoker;
-        return invoker;
-    }
-
-    public String toString() {
-        return "Invokers"+targetType;
-    }
-
-    static MemberName exactInvokerMethod(MethodType mtype, Object[] appendixResult) {
-        LambdaForm lform;
-        final int MTYPE_ARG_APPENDED = 1;  // argument count for appended mtype value
-        if (mtype.parameterSlotCount() <= MethodType.MAX_MH_ARITY - MTYPE_ARG_APPENDED) {
-            lform = invokeForm(mtype, false, MethodTypeForm.LF_EX_LINKER);
-            appendixResult[0] = mtype;
-        } else {
-            lform = invokeForm(mtype, true, MethodTypeForm.LF_EX_LINKER);
-        }
-        return lform.vmentry;
-    }
-
-    static MemberName genericInvokerMethod(MethodType mtype, Object[] appendixResult) {
-        LambdaForm lform;
-        final int MTYPE_ARG_APPENDED = 1;  // argument count for appended mtype value
-        if (mtype.parameterSlotCount() <= MethodType.MAX_MH_ARITY - (MTYPE_ARG_APPENDED + GENERIC_INVOKER_SLOP)) {
-            lform = invokeForm(mtype, false, MethodTypeForm.LF_GEN_LINKER);
-            appendixResult[0] = mtype;
-            prepareForGenericCall(mtype);
-        } else {
-            lform = invokeForm(mtype, true, MethodTypeForm.LF_GEN_LINKER);
-        }
-        return lform.vmentry;
-    }
-
-    private static LambdaForm invokeForm(MethodType mtype, boolean customized, int which) {
-        boolean isCached;
-        if (!customized) {
-            mtype = mtype.basicType();  // normalize Z to I, String to Object, etc.
-            isCached = true;
-        } else {
-            isCached = false;  // maybe cache if mtype == mtype.basicType()
-        }
-        boolean isLinker, isGeneric;
-        String debugName;
-        switch (which) {
-        case MethodTypeForm.LF_EX_LINKER:   isLinker = true;  isGeneric = false; debugName = "invokeExact_MT"; break;
-        case MethodTypeForm.LF_EX_INVOKER:  isLinker = false; isGeneric = false; debugName = "exactInvoker"; break;
-        case MethodTypeForm.LF_GEN_LINKER:  isLinker = true;  isGeneric = true;  debugName = "invoke_MT"; break;
-        case MethodTypeForm.LF_GEN_INVOKER: isLinker = false; isGeneric = true;  debugName = "invoker"; break;
-        default: throw new InternalError();
-        }
-        LambdaForm lform;
-        if (isCached) {
-            lform = mtype.form().cachedLambdaForm(which);
-            if (lform != null)  return lform;
-        }
-        // exactInvokerForm (Object,Object)Object
-        //   link with java.lang.invoke.MethodHandle.invokeBasic(MethodHandle,Object,Object)Object/invokeSpecial
-        final int THIS_MH      = 0;
-        final int CALL_MH      = THIS_MH + (isLinker ? 0 : 1);
-        final int ARG_BASE     = CALL_MH + 1;
-        final int OUTARG_LIMIT = ARG_BASE + mtype.parameterCount();
-        final int INARG_LIMIT  = OUTARG_LIMIT + (isLinker && !customized ? 1 : 0);
-        int nameCursor = OUTARG_LIMIT;
-        final int MTYPE_ARG    = customized ? -1 : nameCursor++;  // might be last in-argument
-        final int CHECK_TYPE   = nameCursor++;
-        final int LINKER_CALL  = nameCursor++;
-        MethodType invokerFormType = mtype.invokerType();
-        if (isLinker) {
-            if (!customized)
-                invokerFormType = invokerFormType.appendParameterTypes(MemberName.class);
-        } else {
-            invokerFormType = invokerFormType.invokerType();
-        }
-        Name[] names = arguments(nameCursor - INARG_LIMIT, invokerFormType);
-        assert(names.length == nameCursor)
-                : Arrays.asList(mtype, customized, which, nameCursor, names.length);
-        if (MTYPE_ARG >= INARG_LIMIT) {
-            assert(names[MTYPE_ARG] == null);
-            names[MTYPE_ARG] = BoundMethodHandle.getSpeciesData("L").getterName(names[THIS_MH], 0);
-            // else if isLinker, then MTYPE is passed in from the caller (e.g., the JVM)
-        }
-
-        // Make the final call.  If isGeneric, then prepend the result of type checking.
-        MethodType outCallType;
-        Object[] outArgs;
-        Object mtypeArg = (customized ? mtype : names[MTYPE_ARG]);
-        if (!isGeneric) {
-            names[CHECK_TYPE] = new Name(NF_checkExactType, names[CALL_MH], mtypeArg);
-            // mh.invokeExact(a*):R => checkExactType(mh, TYPEOF(a*:R)); mh.invokeBasic(a*)
-            outArgs = Arrays.copyOfRange(names, CALL_MH, OUTARG_LIMIT, Object[].class);
-            outCallType = mtype;
-        } else if (customized) {
-            names[CHECK_TYPE] = new Name(NF_asType, names[CALL_MH], mtypeArg);
-            // mh.invokeGeneric(a*):R =>
-            //  let mt=TYPEOF(a*:R), tmh=asType(mh, mt);
-            //    tmh.invokeBasic(a*)
-            outArgs = Arrays.copyOfRange(names, CALL_MH, OUTARG_LIMIT, Object[].class);
-            outCallType = mtype;
-        } else {
-            names[CHECK_TYPE] = new Name(NF_checkGenericType, names[CALL_MH], mtypeArg);
-            // mh.invokeGeneric(a*):R =>
-            //  let mt=TYPEOF(a*:R), gamh=checkGenericType(mh, mt);
-            //    gamh.invokeBasic(mt, mh, a*)
-            final int PREPEND_GAMH = 0, PREPEND_MT = 1, PREPEND_COUNT = 2;
-            assert(GENERIC_INVOKER_SLOP == PREPEND_COUNT);
-            outArgs = Arrays.copyOfRange(names, CALL_MH, OUTARG_LIMIT + PREPEND_COUNT, Object[].class);
-            // prepend arguments:
-            System.arraycopy(outArgs, 0, outArgs, PREPEND_COUNT, outArgs.length - PREPEND_COUNT);
-            outArgs[PREPEND_GAMH] = names[CHECK_TYPE];
-            outArgs[PREPEND_MT] = mtypeArg;
-            outCallType = mtype.insertParameterTypes(0, MethodType.class, MethodHandle.class);
-        }
-        names[LINKER_CALL] = new Name(invokeBasicMethod(outCallType), outArgs);
-        lform = new LambdaForm(debugName, INARG_LIMIT, names);
-        if (isLinker)
-            lform.compileToBytecode();  // JVM needs a real methodOop
-        if (isCached)
-            lform = mtype.form().setCachedLambdaForm(which, lform);
-        return lform;
-    }
-    private static final int GENERIC_INVOKER_SLOP = 2;  // used elsewhere to avoid arity problems
-
-    /*non-public*/ static
-    WrongMethodTypeException newWrongMethodTypeException(MethodType actual, MethodType expected) {
-        // FIXME: merge with JVM logic for throwing WMTE
-        return new WrongMethodTypeException("expected "+expected+" but found "+actual);
-    }
-
-    /** Static definition of MethodHandle.invokeExact checking code. */
-    /*non-public*/ static
-    @ForceInline
-    void checkExactType(Object mhObj, Object expectedObj) {
-        MethodHandle mh = (MethodHandle) mhObj;
-        MethodType expected = (MethodType) expectedObj;
-        MethodType actual = mh.type();
-        if (actual != expected)
-            throw newWrongMethodTypeException(expected, actual);
-    }
-
-    /** Static definition of MethodHandle.invokeGeneric checking code. */
-    /*non-public*/ static
-    @ForceInline
-    Object checkGenericType(Object mhObj, Object expectedObj) {
-        MethodHandle mh = (MethodHandle) mhObj;
-        MethodType expected = (MethodType) expectedObj;
-        //MethodType actual = mh.type();
-        MethodHandle gamh = expected.form().genericInvoker;
-        if (gamh != null)  return gamh;
-        return prepareForGenericCall(expected);
-    }
-
-    /**
-     * Returns an adapter GA for invoking a MH with type adjustments.
-     * The MethodType of the generic invocation site is prepended to MH
-     * and its arguments as follows:
-     * {@code (R)MH.invoke(A*) => GA.invokeBasic(TYPEOF<A*,R>, MH, A*)}
-     */
-    /*non-public*/ static MethodHandle prepareForGenericCall(MethodType mtype) {
-        // force any needed adapters to be preconstructed
-        MethodTypeForm form = mtype.form();
-        MethodHandle gamh = form.genericInvoker;
-        if (gamh != null)  return gamh;
-        try {
-            // Trigger adapter creation.
-            gamh = InvokeGeneric.generalInvokerOf(form.erasedType);
-            form.genericInvoker = gamh;
-            return gamh;
-        } catch (Exception ex) {
-            throw newInternalError("Exception while resolving inexact invoke", ex);
-        }
-    }
-
-    static MemberName linkToCallSiteMethod(MethodType mtype) {
-        LambdaForm lform = callSiteForm(mtype);
-        return lform.vmentry;
-    }
-
-    private static LambdaForm callSiteForm(MethodType mtype) {
-        mtype = mtype.basicType();  // normalize Z to I, String to Object, etc.
-        LambdaForm lform = mtype.form().cachedLambdaForm(MethodTypeForm.LF_CS_LINKER);
-        if (lform != null)  return lform;
-        // exactInvokerForm (Object,Object)Object
-        //   link with java.lang.invoke.MethodHandle.invokeBasic(MethodHandle,Object,Object)Object/invokeSpecial
-        final int ARG_BASE     = 0;
-        final int OUTARG_LIMIT = ARG_BASE + mtype.parameterCount();
-        final int INARG_LIMIT  = OUTARG_LIMIT + 1;
-        int nameCursor = OUTARG_LIMIT;
-        final int CSITE_ARG    = nameCursor++;  // the last in-argument
-        final int CALL_MH      = nameCursor++;  // result of getTarget
-        final int LINKER_CALL  = nameCursor++;
-        MethodType invokerFormType = mtype.appendParameterTypes(CallSite.class);
-        Name[] names = arguments(nameCursor - INARG_LIMIT, invokerFormType);
-        assert(names.length == nameCursor);
-        assert(names[CSITE_ARG] != null);
-        names[CALL_MH] = new Name(NF_getCallSiteTarget, names[CSITE_ARG]);
-        // (site.)invokedynamic(a*):R => mh = site.getTarget(); mh.invokeBasic(a*)
-        final int PREPEND_MH = 0, PREPEND_COUNT = 1;
-        Object[] outArgs = Arrays.copyOfRange(names, ARG_BASE, OUTARG_LIMIT + PREPEND_COUNT, Object[].class);
-        // prepend MH argument:
-        System.arraycopy(outArgs, 0, outArgs, PREPEND_COUNT, outArgs.length - PREPEND_COUNT);
-        outArgs[PREPEND_MH] = names[CALL_MH];
-        names[LINKER_CALL] = new Name(invokeBasicMethod(mtype), outArgs);
-        lform = new LambdaForm("linkToCallSite", INARG_LIMIT, names);
-        lform.compileToBytecode();  // JVM needs a real methodOop
-        lform = mtype.form().setCachedLambdaForm(MethodTypeForm.LF_CS_LINKER, lform);
-        return lform;
-    }
-
-    /** Static definition of MethodHandle.invokeGeneric checking code. */
-    /*non-public*/ static
-    @ForceInline
-    Object getCallSiteTarget(Object site) {
-        return ((CallSite)site).getTarget();
-    }
-
-    // Local constant functions:
-    private static final NamedFunction NF_checkExactType;
-    private static final NamedFunction NF_checkGenericType;
-    private static final NamedFunction NF_asType;
-    private static final NamedFunction NF_getCallSiteTarget;
-    static {
-        try {
-            NF_checkExactType = new NamedFunction(Invokers.class
-                    .getDeclaredMethod("checkExactType", Object.class, Object.class));
-            NF_checkGenericType = new NamedFunction(Invokers.class
-                    .getDeclaredMethod("checkGenericType", Object.class, Object.class));
-            NF_asType = new NamedFunction(MethodHandle.class
-                    .getDeclaredMethod("asType", MethodType.class));
-            NF_getCallSiteTarget = new NamedFunction(Invokers.class
-                    .getDeclaredMethod("getCallSiteTarget", Object.class));
-            NF_checkExactType.resolve();
-            NF_checkGenericType.resolve();
-            NF_getCallSiteTarget.resolve();
-            // bound
-        } catch (ReflectiveOperationException ex) {
-            throw newInternalError(ex);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/LambdaForm.java b/ojluni/src/main/java/java/lang/invoke/LambdaForm.java
deleted file mode 100755
index f5dcf40..0000000
--- a/ojluni/src/main/java/java/lang/invoke/LambdaForm.java
+++ /dev/null
@@ -1,1625 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, 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.
- */
-
-package java.lang.invoke;
-
-import java.lang.annotation.*;
-import java.lang.reflect.Method;
-import java.util.Map;
-import java.util.List;
-import java.util.Arrays;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.concurrent.ConcurrentHashMap;
-import sun.invoke.util.Wrapper;
-import static java.lang.invoke.MethodHandleStatics.*;
-import static java.lang.invoke.MethodHandleNatives.Constants.*;
-import java.lang.reflect.Field;
-import java.util.Objects;
-
-/**
- * The symbolic, non-executable form of a method handle's invocation semantics.
- * It consists of a series of names.
- * The first N (N=arity) names are parameters,
- * while any remaining names are temporary values.
- * Each temporary specifies the application of a function to some arguments.
- * The functions are method handles, while the arguments are mixes of
- * constant values and local names.
- * The result of the lambda is defined as one of the names, often the last one.
- * <p>
- * Here is an approximate grammar:
- * <pre>
- * LambdaForm = "(" ArgName* ")=>{" TempName* Result "}"
- * ArgName = "a" N ":" T
- * TempName = "t" N ":" T "=" Function "(" Argument* ");"
- * Function = ConstantValue
- * Argument = NameRef | ConstantValue
- * Result = NameRef | "void"
- * NameRef = "a" N | "t" N
- * N = (any whole number)
- * T = "L" | "I" | "J" | "F" | "D" | "V"
- * </pre>
- * Names are numbered consecutively from left to right starting at zero.
- * (The letters are merely a taste of syntax sugar.)
- * Thus, the first temporary (if any) is always numbered N (where N=arity).
- * Every occurrence of a name reference in an argument list must refer to
- * a name previously defined within the same lambda.
- * A lambda has a void result if and only if its result index is -1.
- * If a temporary has the type "V", it cannot be the subject of a NameRef,
- * even though possesses a number.
- * Note that all reference types are erased to "L", which stands for {@code Object).
- * All subword types (boolean, byte, short, char) are erased to "I" which is {@code int}.
- * The other types stand for the usual primitive types.
- * <p>
- * Function invocation closely follows the static rules of the Java verifier.
- * Arguments and return values must exactly match when their "Name" types are
- * considered.
- * Conversions are allowed only if they do not change the erased type.
- * <ul>
- * <li>L = Object: casts are used freely to convert into and out of reference types
- * <li>I = int: subword types are forcibly narrowed when passed as arguments (see {@code explicitCastArguments})
- * <li>J = long: no implicit conversions
- * <li>F = float: no implicit conversions
- * <li>D = double: no implicit conversions
- * <li>V = void: a function result may be void if and only if its Name is of type "V"
- * </ul>
- * Although implicit conversions are not allowed, explicit ones can easily be
- * encoded by using temporary expressions which call type-transformed identity functions.
- * <p>
- * Examples:
- * <pre>
- * (a0:J)=>{ a0 }
- *     == identity(long)
- * (a0:I)=>{ t1:V = System.out#println(a0); void }
- *     == System.out#println(int)
- * (a0:L)=>{ t1:V = System.out#println(a0); a0 }
- *     == identity, with printing side-effect
- * (a0:L, a1:L)=>{ t2:L = BoundMethodHandle#argument(a0);
- *                 t3:L = BoundMethodHandle#target(a0);
- *                 t4:L = MethodHandle#invoke(t3, t2, a1); t4 }
- *     == general invoker for unary insertArgument combination
- * (a0:L, a1:L)=>{ t2:L = FilterMethodHandle#filter(a0);
- *                 t3:L = MethodHandle#invoke(t2, a1);
- *                 t4:L = FilterMethodHandle#target(a0);
- *                 t5:L = MethodHandle#invoke(t4, t3); t5 }
- *     == general invoker for unary filterArgument combination
- * (a0:L, a1:L)=>{ ...(same as previous example)...
- *                 t5:L = MethodHandle#invoke(t4, t3, a1); t5 }
- *     == general invoker for unary/unary foldArgument combination
- * (a0:L, a1:I)=>{ t2:I = identity(long).asType((int)->long)(a1); t2 }
- *     == invoker for identity method handle which performs i2l
- * (a0:L, a1:L)=>{ t2:L = BoundMethodHandle#argument(a0);
- *                 t3:L = Class#cast(t2,a1); t3 }
- *     == invoker for identity method handle which performs cast
- * </pre>
- * <p>
- * @author John Rose, JSR 292 EG
- */
-class LambdaForm {
-    final int arity;
-    final int result;
-    final Name[] names;
-    final String debugName;
-    MemberName vmentry;   // low-level behavior, or null if not yet prepared
-    private boolean isCompiled;
-
-    // Caches for common structural transforms:
-    LambdaForm[] bindCache;
-
-    public static final int VOID_RESULT = -1, LAST_RESULT = -2;
-
-    LambdaForm(String debugName,
-               int arity, Name[] names, int result) {
-        assert(namesOK(arity, names));
-        this.arity = arity;
-        this.result = fixResult(result, names);
-        this.names = names.clone();
-        this.debugName = debugName;
-        normalize();
-    }
-
-    LambdaForm(String debugName,
-               int arity, Name[] names) {
-        this(debugName,
-             arity, names, LAST_RESULT);
-    }
-
-    LambdaForm(String debugName,
-               Name[] formals, Name[] temps, Name result) {
-        this(debugName,
-             formals.length, buildNames(formals, temps, result), LAST_RESULT);
-    }
-
-    private static Name[] buildNames(Name[] formals, Name[] temps, Name result) {
-        int arity = formals.length;
-        int length = arity + temps.length + (result == null ? 0 : 1);
-        Name[] names = Arrays.copyOf(formals, length);
-        System.arraycopy(temps, 0, names, arity, temps.length);
-        if (result != null)
-            names[length - 1] = result;
-        return names;
-    }
-
-    private LambdaForm(String sig) {
-        // Make a blank lambda form, which returns a constant zero or null.
-        // It is used as a template for managing the invocation of similar forms that are non-empty.
-        // Called only from getPreparedForm.
-        assert(isValidSignature(sig));
-        this.arity = signatureArity(sig);
-        this.result = (signatureReturn(sig) == 'V' ? -1 : arity);
-        this.names = buildEmptyNames(arity, sig);
-        this.debugName = "LF.zero";
-        assert(nameRefsAreLegal());
-        assert(isEmpty());
-        assert(sig.equals(basicTypeSignature()));
-    }
-
-    private static Name[] buildEmptyNames(int arity, String basicTypeSignature) {
-        assert(isValidSignature(basicTypeSignature));
-        int resultPos = arity + 1;  // skip '_'
-        if (arity < 0 || basicTypeSignature.length() != resultPos+1)
-            throw new IllegalArgumentException("bad arity for "+basicTypeSignature);
-        int numRes = (basicTypeSignature.charAt(resultPos) == 'V' ? 0 : 1);
-        Name[] names = arguments(numRes, basicTypeSignature.substring(0, arity));
-        for (int i = 0; i < numRes; i++) {
-            names[arity + i] = constantZero(arity + i, basicTypeSignature.charAt(resultPos + i));
-        }
-        return names;
-    }
-
-    private static int fixResult(int result, Name[] names) {
-        if (result >= 0) {
-            if (names[result].type == 'V')
-                return -1;
-        } else if (result == LAST_RESULT) {
-            return names.length - 1;
-        }
-        return result;
-    }
-
-    private static boolean namesOK(int arity, Name[] names) {
-        for (int i = 0; i < names.length; i++) {
-            Name n = names[i];
-            assert(n != null) : "n is null";
-            if (i < arity)
-                assert( n.isParam()) : n + " is not param at " + i;
-            else
-                assert(!n.isParam()) : n + " is param at " + i;
-        }
-        return true;
-    }
-
-    /** Renumber and/or replace params so that they are interned and canonically numbered. */
-    private void normalize() {
-        Name[] oldNames = null;
-        int changesStart = 0;
-        for (int i = 0; i < names.length; i++) {
-            Name n = names[i];
-            if (!n.initIndex(i)) {
-                if (oldNames == null) {
-                    oldNames = names.clone();
-                    changesStart = i;
-                }
-                names[i] = n.cloneWithIndex(i);
-            }
-        }
-        if (oldNames != null) {
-            int startFixing = arity;
-            if (startFixing <= changesStart)
-                startFixing = changesStart+1;
-            for (int i = startFixing; i < names.length; i++) {
-                Name fixed = names[i].replaceNames(oldNames, names, changesStart, i);
-                names[i] = fixed.newIndex(i);
-            }
-        }
-        assert(nameRefsAreLegal());
-        int maxInterned = Math.min(arity, INTERNED_ARGUMENT_LIMIT);
-        boolean needIntern = false;
-        for (int i = 0; i < maxInterned; i++) {
-            Name n = names[i], n2 = internArgument(n);
-            if (n != n2) {
-                names[i] = n2;
-                needIntern = true;
-            }
-        }
-        if (needIntern) {
-            for (int i = arity; i < names.length; i++) {
-                names[i].internArguments();
-            }
-            assert(nameRefsAreLegal());
-        }
-    }
-
-    /**
-     * Check that all embedded Name references are localizable to this lambda,
-     * and are properly ordered after their corresponding definitions.
-     * <p>
-     * Note that a Name can be local to multiple lambdas, as long as
-     * it possesses the same index in each use site.
-     * This allows Name references to be freely reused to construct
-     * fresh lambdas, without confusion.
-     */
-    private boolean nameRefsAreLegal() {
-        assert(arity >= 0 && arity <= names.length);
-        assert(result >= -1 && result < names.length);
-        // Do all names possess an index consistent with their local definition order?
-        for (int i = 0; i < arity; i++) {
-            Name n = names[i];
-            assert(n.index() == i) : Arrays.asList(n.index(), i);
-            assert(n.isParam());
-        }
-        // Also, do all local name references
-        for (int i = arity; i < names.length; i++) {
-            Name n = names[i];
-            assert(n.index() == i);
-            for (Object arg : n.arguments) {
-                if (arg instanceof Name) {
-                    Name n2 = (Name) arg;
-                    int i2 = n2.index;
-                    assert(0 <= i2 && i2 < names.length) : n.debugString() + ": 0 <= i2 && i2 < names.length: 0 <= " + i2 + " < " + names.length;
-                    assert(names[i2] == n2) : Arrays.asList("-1-", i, "-2-", n.debugString(), "-3-", i2, "-4-", n2.debugString(), "-5-", names[i2].debugString(), "-6-", this);
-                    assert(i2 < i);  // ref must come after def!
-                }
-            }
-        }
-        return true;
-    }
-
-    /** Invoke this form on the given arguments. */
-    // final Object invoke(Object... args) throws Throwable {
-    //     // NYI: fit this into the fast path?
-    //     return interpretWithArguments(args);
-    // }
-
-    /** Report the return type. */
-    char returnType() {
-        if (result < 0)  return 'V';
-        Name n = names[result];
-        return n.type;
-    }
-
-    /** Report the N-th argument type. */
-    char parameterType(int n) {
-        assert(n < arity);
-        return names[n].type;
-    }
-
-    /** Report the arity. */
-    int arity() {
-        return arity;
-    }
-
-    /** Return the method type corresponding to my basic type signature. */
-    MethodType methodType() {
-        return signatureType(basicTypeSignature());
-    }
-    /** Return ABC_Z, where the ABC are parameter type characters, and Z is the return type character. */
-    final String basicTypeSignature() {
-        StringBuilder buf = new StringBuilder(arity() + 3);
-        for (int i = 0, a = arity(); i < a; i++)
-            buf.append(parameterType(i));
-        return buf.append('_').append(returnType()).toString();
-    }
-    static int signatureArity(String sig) {
-        assert(isValidSignature(sig));
-        return sig.indexOf('_');
-    }
-    static char signatureReturn(String sig) {
-        return sig.charAt(signatureArity(sig)+1);
-    }
-    static boolean isValidSignature(String sig) {
-        int arity = sig.indexOf('_');
-        if (arity < 0)  return false;  // must be of the form *_*
-        int siglen = sig.length();
-        if (siglen != arity + 2)  return false;  // *_X
-        for (int i = 0; i < siglen; i++) {
-            if (i == arity)  continue;  // skip '_'
-            char c = sig.charAt(i);
-            if (c == 'V')
-                return (i == siglen - 1 && arity == siglen - 2);
-            if (ALL_TYPES.indexOf(c) < 0)  return false; // must be [LIJFD]
-        }
-        return true;  // [LIJFD]*_[LIJFDV]
-    }
-    static Class<?> typeClass(char t) {
-        switch (t) {
-        case 'I': return int.class;
-        case 'J': return long.class;
-        case 'F': return float.class;
-        case 'D': return double.class;
-        case 'L': return Object.class;
-        case 'V': return void.class;
-        default: assert false;
-        }
-        return null;
-    }
-    static MethodType signatureType(String sig) {
-        Class<?>[] ptypes = new Class<?>[signatureArity(sig)];
-        for (int i = 0; i < ptypes.length; i++)
-            ptypes[i] = typeClass(sig.charAt(i));
-        Class<?> rtype = typeClass(signatureReturn(sig));
-        return MethodType.methodType(rtype, ptypes);
-    }
-
-    /*
-     * Code generation issues:
-     *
-     * Compiled LFs should be reusable in general.
-     * The biggest issue is how to decide when to pull a name into
-     * the bytecode, versus loading a reified form from the MH data.
-     *
-     * For example, an asType wrapper may require execution of a cast
-     * after a call to a MH.  The target type of the cast can be placed
-     * as a constant in the LF itself.  This will force the cast type
-     * to be compiled into the bytecodes and native code for the MH.
-     * Or, the target type of the cast can be erased in the LF, and
-     * loaded from the MH data.  (Later on, if the MH as a whole is
-     * inlined, the data will flow into the inlined instance of the LF,
-     * as a constant, and the end result will be an optimal cast.)
-     *
-     * This erasure of cast types can be done with any use of
-     * reference types.  It can also be done with whole method
-     * handles.  Erasing a method handle might leave behind
-     * LF code that executes correctly for any MH of a given
-     * type, and load the required MH from the enclosing MH's data.
-     * Or, the erasure might even erase the expected MT.
-     *
-     * Also, for direct MHs, the MemberName of the target
-     * could be erased, and loaded from the containing direct MH.
-     * As a simple case, a LF for all int-valued non-static
-     * field getters would perform a cast on its input argument
-     * (to non-constant base type derived from the MemberName)
-     * and load an integer value from the input object
-     * (at a non-constant offset also derived from the MemberName).
-     * Such MN-erased LFs would be inlinable back to optimized
-     * code, whenever a constant enclosing DMH is available
-     * to supply a constant MN from its data.
-     *
-     * The main problem here is to keep LFs reasonably generic,
-     * while ensuring that hot spots will inline good instances.
-     * "Reasonably generic" means that we don't end up with
-     * repeated versions of bytecode or machine code that do
-     * not differ in their optimized form.  Repeated versions
-     * of machine would have the undesirable overheads of
-     * (a) redundant compilation work and (b) extra I$ pressure.
-     * To control repeated versions, we need to be ready to
-     * erase details from LFs and move them into MH data,
-     * whevener those details are not relevant to significant
-     * optimization.  "Significant" means optimization of
-     * code that is actually hot.
-     *
-     * Achieving this may require dynamic splitting of MHs, by replacing
-     * a generic LF with a more specialized one, on the same MH,
-     * if (a) the MH is frequently executed and (b) the MH cannot
-     * be inlined into a containing caller, such as an invokedynamic.
-     *
-     * Compiled LFs that are no longer used should be GC-able.
-     * If they contain non-BCP references, they should be properly
-     * interlinked with the class loader(s) that their embedded types
-     * depend on.  This probably means that reusable compiled LFs
-     * will be tabulated (indexed) on relevant class loaders,
-     * or else that the tables that cache them will have weak links.
-     */
-
-    /**
-     * Make this LF directly executable, as part of a MethodHandle.
-     * Invariant:  Every MH which is invoked must prepare its LF
-     * before invocation.
-     * (In principle, the JVM could do this very lazily,
-     * as a sort of pre-invocation linkage step.)
-     */
-    public void prepare() {
-        if (COMPILE_THRESHOLD == 0) {
-            compileToBytecode();
-        }
-        if (this.vmentry != null) {
-            // already prepared (e.g., a primitive DMH invoker form)
-            return;
-        }
-        LambdaForm prep = getPreparedForm(basicTypeSignature());
-        this.vmentry = prep.vmentry;
-        // TO DO: Maybe add invokeGeneric, invokeWithArguments
-    }
-
-    /** Generate optimizable bytecode for this form. */
-    MemberName compileToBytecode() {
-        MethodType invokerType = methodType();
-        assert(vmentry == null || vmentry.getMethodType().basicType().equals(invokerType));
-        if (vmentry != null && isCompiled) {
-            return vmentry;  // already compiled somehow
-        }
-        try {
-            vmentry = InvokerBytecodeGenerator.generateCustomizedCode(this, invokerType);
-            if (TRACE_INTERPRETER)
-                traceInterpreter("compileToBytecode", this);
-            isCompiled = true;
-            return vmentry;
-        } catch (Error | Exception ex) {
-            throw newInternalError(this.toString(), ex);
-        }
-    }
-
-    private static final ConcurrentHashMap<String,LambdaForm> PREPARED_FORMS;
-    static {
-        int   capacity   = 512;    // expect many distinct signatures over time
-        float loadFactor = 0.75f;  // normal default
-        int   writers    = 1;
-        PREPARED_FORMS = new ConcurrentHashMap<>(capacity, loadFactor, writers);
-    }
-
-    private static Map<String,LambdaForm> computeInitialPreparedForms() {
-        // Find all predefined invokers and associate them with canonical empty lambda forms.
-        HashMap<String,LambdaForm> forms = new HashMap<>();
-        for (MemberName m : MemberName.getFactory().getMethods(LambdaForm.class, false, null, null, null)) {
-            if (!m.isStatic() || !m.isPackage())  continue;
-            MethodType mt = m.getMethodType();
-            if (mt.parameterCount() > 0 &&
-                mt.parameterType(0) == MethodHandle.class &&
-                m.getName().startsWith("interpret_")) {
-                String sig = basicTypeSignature(mt);
-                assert(m.getName().equals("interpret" + sig.substring(sig.indexOf('_'))));
-                LambdaForm form = new LambdaForm(sig);
-                form.vmentry = m;
-                mt.form().setCachedLambdaForm(MethodTypeForm.LF_COUNTER, form);
-                // FIXME: get rid of PREPARED_FORMS; use MethodTypeForm cache only
-                forms.put(sig, form);
-            }
-        }
-        //System.out.println("computeInitialPreparedForms => "+forms);
-        return forms;
-    }
-
-    // Set this false to disable use of the interpret_L methods defined in this file.
-    private static final boolean USE_PREDEFINED_INTERPRET_METHODS = true;
-
-    // The following are predefined exact invokers.  The system must build
-    // a separate invoker for each distinct signature.
-    static Object interpret_L(MethodHandle mh) throws Throwable {
-        Object[] av = {mh};
-        String sig = null;
-        assert(argumentTypesMatch(sig = "L_L", av));
-        Object res = mh.form.interpretWithArguments(av);
-        assert(returnTypesMatch(sig, av, res));
-        return res;
-    }
-    static Object interpret_L(MethodHandle mh, Object x1) throws Throwable {
-        Object[] av = {mh, x1};
-        String sig = null;
-        assert(argumentTypesMatch(sig = "LL_L", av));
-        Object res = mh.form.interpretWithArguments(av);
-        assert(returnTypesMatch(sig, av, res));
-        return res;
-    }
-    static Object interpret_L(MethodHandle mh, Object x1, Object x2) throws Throwable {
-        Object[] av = {mh, x1, x2};
-        String sig = null;
-        assert(argumentTypesMatch(sig = "LLL_L", av));
-        Object res = mh.form.interpretWithArguments(av);
-        assert(returnTypesMatch(sig, av, res));
-        return res;
-    }
-    private static LambdaForm getPreparedForm(String sig) {
-        MethodType mtype = signatureType(sig);
-        //LambdaForm prep = PREPARED_FORMS.get(sig);
-        LambdaForm prep =  mtype.form().cachedLambdaForm(MethodTypeForm.LF_INTERPRET);
-        if (prep != null)  return prep;
-        assert(isValidSignature(sig));
-        prep = new LambdaForm(sig);
-        prep.vmentry = InvokerBytecodeGenerator.generateLambdaFormInterpreterEntryPoint(sig);
-        //LambdaForm prep2 = PREPARED_FORMS.putIfAbsent(sig.intern(), prep);
-        return mtype.form().setCachedLambdaForm(MethodTypeForm.LF_INTERPRET, prep);
-    }
-
-    // The next few routines are called only from assert expressions
-    // They verify that the built-in invokers process the correct raw data types.
-    private static boolean argumentTypesMatch(String sig, Object[] av) {
-        int arity = signatureArity(sig);
-        assert(av.length == arity) : "av.length == arity: av.length=" + av.length + ", arity=" + arity;
-        assert(av[0] instanceof MethodHandle) : "av[0] not instace of MethodHandle: " + av[0];
-        MethodHandle mh = (MethodHandle) av[0];
-        MethodType mt = mh.type();
-        assert(mt.parameterCount() == arity-1);
-        for (int i = 0; i < av.length; i++) {
-            Class<?> pt = (i == 0 ? MethodHandle.class : mt.parameterType(i-1));
-            assert(valueMatches(sig.charAt(i), pt, av[i]));
-        }
-        return true;
-    }
-    private static boolean valueMatches(char tc, Class<?> type, Object x) {
-        // The following line is needed because (...)void method handles can use non-void invokers
-        if (type == void.class)  tc = 'V';   // can drop any kind of value
-        assert tc == basicType(type) : tc + " == basicType(" + type + ")=" + basicType(type);
-        switch (tc) {
-        case 'I': assert checkInt(type, x)   : "checkInt(" + type + "," + x +")";   break;
-        case 'J': assert x instanceof Long   : "instanceof Long: " + x;             break;
-        case 'F': assert x instanceof Float  : "instanceof Float: " + x;            break;
-        case 'D': assert x instanceof Double : "instanceof Double: " + x;           break;
-        case 'L': assert checkRef(type, x)   : "checkRef(" + type + "," + x + ")";  break;
-        case 'V': break;  // allow anything here; will be dropped
-        default:  assert(false);
-        }
-        return true;
-    }
-    private static boolean returnTypesMatch(String sig, Object[] av, Object res) {
-        MethodHandle mh = (MethodHandle) av[0];
-        return valueMatches(signatureReturn(sig), mh.type().returnType(), res);
-    }
-    private static boolean checkInt(Class<?> type, Object x) {
-        assert(x instanceof Integer);
-        if (type == int.class)  return true;
-        Wrapper w = Wrapper.forBasicType(type);
-        assert(w.isSubwordOrInt());
-        Object x1 = Wrapper.INT.wrap(w.wrap(x));
-        return x.equals(x1);
-    }
-    private static boolean checkRef(Class<?> type, Object x) {
-        assert(!type.isPrimitive());
-        if (x == null)  return true;
-        if (type.isInterface())  return true;
-        return type.isInstance(x);
-    }
-
-    /** If the invocation count hits the threshold we spin bytecodes and call that subsequently. */
-    private static final int COMPILE_THRESHOLD;
-    static {
-        if (MethodHandleStatics.COMPILE_THRESHOLD != null)
-            COMPILE_THRESHOLD = MethodHandleStatics.COMPILE_THRESHOLD;
-        else
-            COMPILE_THRESHOLD = 30;  // default value
-    }
-    private int invocationCounter = 0;
-
-    @Hidden
-    @DontInline
-    /** Interpretively invoke this form on the given arguments. */
-    Object interpretWithArguments(Object... argumentValues) throws Throwable {
-        if (TRACE_INTERPRETER)
-            return interpretWithArgumentsTracing(argumentValues);
-        checkInvocationCounter();
-        assert(arityCheck(argumentValues));
-        Object[] values = Arrays.copyOf(argumentValues, names.length);
-        for (int i = argumentValues.length; i < values.length; i++) {
-            values[i] = interpretName(names[i], values);
-        }
-        return (result < 0) ? null : values[result];
-    }
-
-    @Hidden
-    @DontInline
-    /** Evaluate a single Name within this form, applying its function to its arguments. */
-    Object interpretName(Name name, Object[] values) throws Throwable {
-        if (TRACE_INTERPRETER)
-            traceInterpreter("| interpretName", name.debugString(), (Object[]) null);
-        Object[] arguments = Arrays.copyOf(name.arguments, name.arguments.length, Object[].class);
-        for (int i = 0; i < arguments.length; i++) {
-            Object a = arguments[i];
-            if (a instanceof Name) {
-                int i2 = ((Name)a).index();
-                assert(names[i2] == a);
-                a = values[i2];
-                arguments[i] = a;
-            }
-        }
-        return name.function.invokeWithArguments(arguments);
-    }
-
-    private void checkInvocationCounter() {
-        if (COMPILE_THRESHOLD != 0 &&
-            invocationCounter < COMPILE_THRESHOLD) {
-            invocationCounter++;  // benign race
-            if (invocationCounter >= COMPILE_THRESHOLD) {
-                // Replace vmentry with a bytecode version of this LF.
-                compileToBytecode();
-            }
-        }
-    }
-    Object interpretWithArgumentsTracing(Object... argumentValues) throws Throwable {
-        traceInterpreter("[ interpretWithArguments", this, argumentValues);
-        if (invocationCounter < COMPILE_THRESHOLD) {
-            int ctr = invocationCounter++;  // benign race
-            traceInterpreter("| invocationCounter", ctr);
-            if (invocationCounter >= COMPILE_THRESHOLD) {
-                compileToBytecode();
-            }
-        }
-        Object rval;
-        try {
-            assert(arityCheck(argumentValues));
-            Object[] values = Arrays.copyOf(argumentValues, names.length);
-            for (int i = argumentValues.length; i < values.length; i++) {
-                values[i] = interpretName(names[i], values);
-            }
-            rval = (result < 0) ? null : values[result];
-        } catch (Throwable ex) {
-            traceInterpreter("] throw =>", ex);
-            throw ex;
-        }
-        traceInterpreter("] return =>", rval);
-        return rval;
-    }
-
-    //** This transform is applied (statically) to every name.function. */
-    /*
-    private static MethodHandle eraseSubwordTypes(MethodHandle mh) {
-        MethodType mt = mh.type();
-        if (mt.hasPrimitives()) {
-            mt = mt.changeReturnType(eraseSubwordType(mt.returnType()));
-            for (int i = 0; i < mt.parameterCount(); i++) {
-                mt = mt.changeParameterType(i, eraseSubwordType(mt.parameterType(i)));
-            }
-            mh = MethodHandles.explicitCastArguments(mh, mt);
-        }
-        return mh;
-    }
-    private static Class<?> eraseSubwordType(Class<?> type) {
-        if (!type.isPrimitive())  return type;
-        if (type == int.class)  return type;
-        Wrapper w = Wrapper.forPrimitiveType(type);
-        if (w.isSubwordOrInt())  return int.class;
-        return type;
-    }
-    */
-
-    static void traceInterpreter(String event, Object obj, Object... args) {
-        if (!TRACE_INTERPRETER)  return;
-        System.out.println("LFI: "+event+" "+(obj != null ? obj : "")+(args != null && args.length != 0 ? Arrays.asList(args) : ""));
-    }
-    static void traceInterpreter(String event, Object obj) {
-        traceInterpreter(event, obj, (Object[])null);
-    }
-    private boolean arityCheck(Object[] argumentValues) {
-        assert(argumentValues.length == arity) : arity+"!="+Arrays.asList(argumentValues)+".length";
-        // also check that the leading (receiver) argument is somehow bound to this LF:
-        assert(argumentValues[0] instanceof MethodHandle) : "not MH: " + argumentValues[0];
-        assert(((MethodHandle)argumentValues[0]).internalForm() == this);
-        // note:  argument #0 could also be an interface wrapper, in the future
-        return true;
-    }
-
-    private boolean isEmpty() {
-        if (result < 0)
-            return (names.length == arity);
-        else if (result == arity && names.length == arity + 1)
-            return names[arity].isConstantZero();
-        else
-            return false;
-    }
-
-    public String toString() {
-        StringBuilder buf = new StringBuilder(debugName+"=Lambda(");
-        for (int i = 0; i < names.length; i++) {
-            if (i == arity)  buf.append(")=>{");
-            Name n = names[i];
-            if (i >= arity)  buf.append("\n    ");
-            buf.append(n);
-            if (i < arity) {
-                if (i+1 < arity)  buf.append(",");
-                continue;
-            }
-            buf.append("=").append(n.exprString());
-            buf.append(";");
-        }
-        buf.append(result < 0 ? "void" : names[result]).append("}");
-        if (TRACE_INTERPRETER) {
-            // Extra verbosity:
-            buf.append(":").append(basicTypeSignature());
-            buf.append("/").append(vmentry);
-        }
-        return buf.toString();
-    }
-
-    /**
-     * Apply immediate binding for a Name in this form indicated by its position relative to the form.
-     * The first parameter to a LambdaForm, a0:L, always represents the form's method handle, so 0 is not
-     * accepted as valid.
-     */
-    LambdaForm bindImmediate(int pos, char basicType, Object value) {
-        // must be an argument, and the types must match
-        assert pos > 0 && pos < arity && names[pos].type == basicType && Name.typesMatch(basicType, value);
-
-        int arity2 = arity - 1;
-        Name[] names2 = new Name[names.length - 1];
-        for (int r = 0, w = 0; r < names.length; ++r, ++w) { // (r)ead from names, (w)rite to names2
-            Name n = names[r];
-            if (n.isParam()) {
-                if (n.index == pos) {
-                    // do not copy over the argument that is to be replaced with a literal,
-                    // but adjust the write index
-                    --w;
-                } else {
-                    names2[w] = new Name(w, n.type);
-                }
-            } else {
-                Object[] arguments2 = new Object[n.arguments.length];
-                for (int i = 0; i < n.arguments.length; ++i) {
-                    Object arg = n.arguments[i];
-                    if (arg instanceof Name) {
-                        int ni = ((Name) arg).index;
-                        if (ni == pos) {
-                            arguments2[i] = value;
-                        } else if (ni < pos) {
-                            // replacement position not yet passed
-                            arguments2[i] = names2[ni];
-                        } else {
-                            // replacement position passed
-                            arguments2[i] = names2[ni - 1];
-                        }
-                    } else {
-                        arguments2[i] = arg;
-                    }
-                }
-                names2[w] = new Name(n.function, arguments2);
-                names2[w].initIndex(w);
-            }
-        }
-
-        int result2 = result == -1 ? -1 : result - 1;
-        return new LambdaForm(debugName, arity2, names2, result2);
-    }
-
-    LambdaForm bind(int namePos, BoundMethodHandle.SpeciesData oldData) {
-        Name name = names[namePos];
-        BoundMethodHandle.SpeciesData newData = oldData.extendWithType(name.type);
-        return bind(name, newData.getterName(names[0], oldData.fieldCount()), oldData, newData);
-    }
-    LambdaForm bind(Name name, Name binding,
-                    BoundMethodHandle.SpeciesData oldData,
-                    BoundMethodHandle.SpeciesData newData) {
-        int pos = name.index;
-        assert(name.isParam());
-        assert(!binding.isParam());
-        assert(name.type == binding.type);
-        assert(0 <= pos && pos < arity && names[pos] == name);
-        assert(binding.function.memberDeclaringClassOrNull() == newData.clazz);
-        assert(oldData.getters.length == newData.getters.length-1);
-        if (bindCache != null) {
-            LambdaForm form = bindCache[pos];
-            if (form != null) {
-                assert(form.contains(binding)) : "form << " + form + " >> does not contain binding << " + binding + " >>";
-                return form;
-            }
-        } else {
-            bindCache = new LambdaForm[arity];
-        }
-        assert(nameRefsAreLegal());
-        int arity2 = arity-1;
-        Name[] names2 = names.clone();
-        names2[pos] = binding;  // we might move this in a moment
-
-        // The newly created LF will run with a different BMH.
-        // Switch over any pre-existing BMH field references to the new BMH class.
-        int firstOldRef = -1;
-        for (int i = 0; i < names2.length; i++) {
-            Name n = names[i];
-            if (n.function != null &&
-                n.function.memberDeclaringClassOrNull() == oldData.clazz) {
-                MethodHandle oldGetter = n.function.resolvedHandle;
-                MethodHandle newGetter = null;
-                for (int j = 0; j < oldData.getters.length; j++) {
-                    if (oldGetter == oldData.getters[j])
-                        newGetter =  newData.getters[j];
-                }
-                if (newGetter != null) {
-                    if (firstOldRef < 0)  firstOldRef = i;
-                    Name n2 = new Name(newGetter, n.arguments);
-                    names2[i] = n2;
-                }
-            }
-        }
-
-        // Walk over the new list of names once, in forward order.
-        // Replace references to 'name' with 'binding'.
-        // Replace data structure references to the old BMH species with the new.
-        // This might cause a ripple effect, but it will settle in one pass.
-        assert(firstOldRef < 0 || firstOldRef > pos);
-        for (int i = pos+1; i < names2.length; i++) {
-            if (i <= arity2)  continue;
-            names2[i] = names2[i].replaceNames(names, names2, pos, i);
-        }
-
-        //  (a0, a1, name=a2, a3, a4)  =>  (a0, a1, a3, a4, binding)
-        int insPos = pos;
-        for (; insPos+1 < names2.length; insPos++) {
-            Name n = names2[insPos+1];
-            if (n.isSiblingBindingBefore(binding)) {
-                names2[insPos] = n;
-            } else {
-                break;
-            }
-        }
-        names2[insPos] = binding;
-
-        // Since we moved some stuff, maybe update the result reference:
-        int result2 = result;
-        if (result2 == pos)
-            result2 = insPos;
-        else if (result2 > pos && result2 <= insPos)
-            result2 -= 1;
-
-        return bindCache[pos] = new LambdaForm(debugName, arity2, names2, result2);
-    }
-
-    boolean contains(Name name) {
-        int pos = name.index();
-        if (pos >= 0) {
-            return pos < names.length && name.equals(names[pos]);
-        }
-        for (int i = arity; i < names.length; i++) {
-            if (name.equals(names[i]))
-                return true;
-        }
-        return false;
-    }
-
-    LambdaForm addArguments(int pos, char... types) {
-        assert(pos <= arity);
-        int length = names.length;
-        int inTypes = types.length;
-        Name[] names2 = Arrays.copyOf(names, length + inTypes);
-        int arity2 = arity + inTypes;
-        int result2 = result;
-        if (result2 >= arity)
-            result2 += inTypes;
-        // names array has MH in slot 0; skip it.
-        int argpos = pos + 1;
-        // Note:  The LF constructor will rename names2[argpos...].
-        // Make space for new arguments (shift temporaries).
-        System.arraycopy(names, argpos, names2, argpos + inTypes, length - argpos);
-        for (int i = 0; i < inTypes; i++) {
-            names2[argpos + i] = new Name(types[i]);
-        }
-        return new LambdaForm(debugName, arity2, names2, result2);
-    }
-
-    LambdaForm addArguments(int pos, List<Class<?>> types) {
-        char[] basicTypes = new char[types.size()];
-        for (int i = 0; i < basicTypes.length; i++)
-            basicTypes[i] = basicType(types.get(i));
-        return addArguments(pos, basicTypes);
-    }
-
-    LambdaForm permuteArguments(int skip, int[] reorder, char[] types) {
-        // Note:  When inArg = reorder[outArg], outArg is fed by a copy of inArg.
-        // The types are the types of the new (incoming) arguments.
-        int length = names.length;
-        int inTypes = types.length;
-        int outArgs = reorder.length;
-        assert(skip+outArgs == arity);
-        assert(permutedTypesMatch(reorder, types, names, skip));
-        int pos = 0;
-        // skip trivial first part of reordering:
-        while (pos < outArgs && reorder[pos] == pos)  pos += 1;
-        Name[] names2 = new Name[length - outArgs + inTypes];
-        System.arraycopy(names, 0, names2, 0, skip+pos);
-        // copy the body:
-        int bodyLength = length - arity;
-        System.arraycopy(names, skip+outArgs, names2, skip+inTypes, bodyLength);
-        int arity2 = names2.length - bodyLength;
-        int result2 = result;
-        if (result2 >= 0) {
-            if (result2 < skip+outArgs) {
-                // return the corresponding inArg
-                result2 = reorder[result2-skip];
-            } else {
-                result2 = result2 - outArgs + inTypes;
-            }
-        }
-        // rework names in the body:
-        for (int j = pos; j < outArgs; j++) {
-            Name n = names[skip+j];
-            int i = reorder[j];
-            // replace names[skip+j] by names2[skip+i]
-            Name n2 = names2[skip+i];
-            if (n2 == null)
-                names2[skip+i] = n2 = new Name(types[i]);
-            else
-                assert(n2.type == types[i]);
-            for (int k = arity2; k < names2.length; k++) {
-                names2[k] = names2[k].replaceName(n, n2);
-            }
-        }
-        // some names are unused, but must be filled in
-        for (int i = skip+pos; i < arity2; i++) {
-            if (names2[i] == null)
-                names2[i] = argument(i, types[i - skip]);
-        }
-        for (int j = arity; j < names.length; j++) {
-            int i = j - arity + arity2;
-            // replace names2[i] by names[j]
-            Name n = names[j];
-            Name n2 = names2[i];
-            if (n != n2) {
-                for (int k = i+1; k < names2.length; k++) {
-                    names2[k] = names2[k].replaceName(n, n2);
-                }
-            }
-        }
-        return new LambdaForm(debugName, arity2, names2, result2);
-    }
-
-    static boolean permutedTypesMatch(int[] reorder, char[] types, Name[] names, int skip) {
-        int inTypes = types.length;
-        int outArgs = reorder.length;
-        for (int i = 0; i < outArgs; i++) {
-            assert(names[skip+i].isParam());
-            assert(names[skip+i].type == types[reorder[i]]);
-        }
-        return true;
-    }
-
-    static class NamedFunction {
-        final MemberName member;
-        MethodHandle resolvedHandle;
-        MethodHandle invoker;
-
-        NamedFunction(MethodHandle resolvedHandle) {
-            this(resolvedHandle.internalMemberName(), resolvedHandle);
-        }
-        NamedFunction(MemberName member, MethodHandle resolvedHandle) {
-            this.member = member;
-            //resolvedHandle = eraseSubwordTypes(resolvedHandle);
-            this.resolvedHandle = resolvedHandle;
-        }
-
-        // The next 3 constructors are used to break circular dependencies on MH.invokeStatic, etc.
-        // Any LambdaForm containing such a member is not interpretable.
-        // This is OK, since all such LFs are prepared with special primitive vmentry points.
-        // And even without the resolvedHandle, the name can still be compiled and optimized.
-        NamedFunction(Method method) {
-            this(new MemberName(method));
-        }
-        NamedFunction(Field field) {
-            this(new MemberName(field));
-        }
-        NamedFunction(MemberName member) {
-            this.member = member;
-            this.resolvedHandle = null;
-        }
-
-        MethodHandle resolvedHandle() {
-            if (resolvedHandle == null)  resolve();
-            return resolvedHandle;
-        }
-
-        void resolve() {
-            resolvedHandle = DirectMethodHandle.make(member);
-        }
-
-        @Override
-        public boolean equals(Object other) {
-            if (this == other) return true;
-            if (other == null) return false;
-            if (!(other instanceof NamedFunction)) return false;
-            NamedFunction that = (NamedFunction) other;
-            return this.member != null && this.member.equals(that.member);
-        }
-
-        @Override
-        public int hashCode() {
-            if (member != null)
-                return member.hashCode();
-            return super.hashCode();
-        }
-
-        // Put the predefined NamedFunction invokers into the table.
-        static void initializeInvokers() {
-            for (MemberName m : MemberName.getFactory().getMethods(NamedFunction.class, false, null, null, null)) {
-                if (!m.isStatic() || !m.isPackage())  continue;
-                MethodType type = m.getMethodType();
-                if (type.equals(INVOKER_METHOD_TYPE) &&
-                    m.getName().startsWith("invoke_")) {
-                    String sig = m.getName().substring("invoke_".length());
-                    int arity = LambdaForm.signatureArity(sig);
-                    MethodType srcType = MethodType.genericMethodType(arity);
-                    if (LambdaForm.signatureReturn(sig) == 'V')
-                        srcType = srcType.changeReturnType(void.class);
-                    MethodTypeForm typeForm = srcType.form();
-                    typeForm.namedFunctionInvoker = DirectMethodHandle.make(m);
-                }
-            }
-        }
-
-        // The following are predefined NamedFunction invokers.  The system must build
-        // a separate invoker for each distinct signature.
-        /** void return type invokers. */
-        @Hidden
-        static Object invoke__V(MethodHandle mh, Object[] a) throws Throwable {
-            assert(a.length == 0);
-            mh.invokeBasic();
-            return null;
-        }
-        @Hidden
-        static Object invoke_L_V(MethodHandle mh, Object[] a) throws Throwable {
-            assert(a.length == 1);
-            mh.invokeBasic(a[0]);
-            return null;
-        }
-        @Hidden
-        static Object invoke_LL_V(MethodHandle mh, Object[] a) throws Throwable {
-            assert(a.length == 2);
-            mh.invokeBasic(a[0], a[1]);
-            return null;
-        }
-        @Hidden
-        static Object invoke_LLL_V(MethodHandle mh, Object[] a) throws Throwable {
-            assert(a.length == 3);
-            mh.invokeBasic(a[0], a[1], a[2]);
-            return null;
-        }
-        @Hidden
-        static Object invoke_LLLL_V(MethodHandle mh, Object[] a) throws Throwable {
-            assert(a.length == 4);
-            mh.invokeBasic(a[0], a[1], a[2], a[3]);
-            return null;
-        }
-        @Hidden
-        static Object invoke_LLLLL_V(MethodHandle mh, Object[] a) throws Throwable {
-            assert(a.length == 5);
-            mh.invokeBasic(a[0], a[1], a[2], a[3], a[4]);
-            return null;
-        }
-        /** Object return type invokers. */
-        @Hidden
-        static Object invoke__L(MethodHandle mh, Object[] a) throws Throwable {
-            assert(a.length == 0);
-            return mh.invokeBasic();
-        }
-        @Hidden
-        static Object invoke_L_L(MethodHandle mh, Object[] a) throws Throwable {
-            assert(a.length == 1);
-            return mh.invokeBasic(a[0]);
-        }
-        @Hidden
-        static Object invoke_LL_L(MethodHandle mh, Object[] a) throws Throwable {
-            assert(a.length == 2);
-            return mh.invokeBasic(a[0], a[1]);
-        }
-        @Hidden
-        static Object invoke_LLL_L(MethodHandle mh, Object[] a) throws Throwable {
-            assert(a.length == 3);
-            return mh.invokeBasic(a[0], a[1], a[2]);
-        }
-        @Hidden
-        static Object invoke_LLLL_L(MethodHandle mh, Object[] a) throws Throwable {
-            assert(a.length == 4);
-            return mh.invokeBasic(a[0], a[1], a[2], a[3]);
-        }
-        @Hidden
-        static Object invoke_LLLLL_L(MethodHandle mh, Object[] a) throws Throwable {
-            assert(a.length == 5);
-            return mh.invokeBasic(a[0], a[1], a[2], a[3], a[4]);
-        }
-
-        static final MethodType INVOKER_METHOD_TYPE =
-            MethodType.methodType(Object.class, MethodHandle.class, Object[].class);
-
-        private static MethodHandle computeInvoker(MethodTypeForm typeForm) {
-            MethodHandle mh = typeForm.namedFunctionInvoker;
-            if (mh != null)  return mh;
-            MemberName invoker = InvokerBytecodeGenerator.generateNamedFunctionInvoker(typeForm);  // this could take a while
-            mh = DirectMethodHandle.make(invoker);
-            MethodHandle mh2 = typeForm.namedFunctionInvoker;
-            if (mh2 != null)  return mh2;  // benign race
-            if (!mh.type().equals(INVOKER_METHOD_TYPE))
-                throw new InternalError(mh.debugString());
-            return typeForm.namedFunctionInvoker = mh;
-        }
-
-        @Hidden
-        Object invokeWithArguments(Object... arguments) throws Throwable {
-            // If we have a cached invoker, call it right away.
-            // NOTE: The invoker always returns a reference value.
-            if (TRACE_INTERPRETER)  return invokeWithArgumentsTracing(arguments);
-            assert(checkArgumentTypes(arguments, methodType()));
-            return invoker().invokeBasic(resolvedHandle(), arguments);
-        }
-
-        @Hidden
-        Object invokeWithArgumentsTracing(Object[] arguments) throws Throwable {
-            Object rval;
-            try {
-                traceInterpreter("[ call", this, arguments);
-                if (invoker == null) {
-                    traceInterpreter("| getInvoker", this);
-                    invoker();
-                }
-                if (resolvedHandle == null) {
-                    traceInterpreter("| resolve", this);
-                    resolvedHandle();
-                }
-                assert(checkArgumentTypes(arguments, methodType()));
-                rval = invoker().invokeBasic(resolvedHandle(), arguments);
-            } catch (Throwable ex) {
-                traceInterpreter("] throw =>", ex);
-                throw ex;
-            }
-            traceInterpreter("] return =>", rval);
-            return rval;
-        }
-
-        private MethodHandle invoker() {
-            if (invoker != null)  return invoker;
-            // Get an invoker and cache it.
-            return invoker = computeInvoker(methodType().form());
-        }
-
-        private static boolean checkArgumentTypes(Object[] arguments, MethodType methodType) {
-            if (true)  return true;  // FIXME
-            MethodType dstType = methodType.form().erasedType();
-            MethodType srcType = dstType.basicType().wrap();
-            Class<?>[] ptypes = new Class<?>[arguments.length];
-            for (int i = 0; i < arguments.length; i++) {
-                Object arg = arguments[i];
-                Class<?> ptype = arg == null ? Object.class : arg.getClass();
-                // If the dest. type is a primitive we keep the
-                // argument type.
-                ptypes[i] = dstType.parameterType(i).isPrimitive() ? ptype : Object.class;
-            }
-            MethodType argType = MethodType.methodType(srcType.returnType(), ptypes).wrap();
-            assert(argType.isConvertibleTo(srcType)) : "wrong argument types: cannot convert " + argType + " to " + srcType;
-            return true;
-        }
-
-        String basicTypeSignature() {
-            //return LambdaForm.basicTypeSignature(resolvedHandle.type());
-            return LambdaForm.basicTypeSignature(methodType());
-        }
-
-        MethodType methodType() {
-            if (resolvedHandle != null)
-                return resolvedHandle.type();
-            else
-                // only for certain internal LFs during bootstrapping
-                return member.getInvocationType();
-        }
-
-        MemberName member() {
-            assert(assertMemberIsConsistent());
-            return member;
-        }
-
-        // Called only from assert.
-        private boolean assertMemberIsConsistent() {
-            if (resolvedHandle instanceof DirectMethodHandle) {
-                MemberName m = resolvedHandle.internalMemberName();
-                assert(m.equals(member));
-            }
-            return true;
-        }
-
-        Class<?> memberDeclaringClassOrNull() {
-            return (member == null) ? null : member.getDeclaringClass();
-        }
-
-        char returnType() {
-            return basicType(methodType().returnType());
-        }
-
-        char parameterType(int n) {
-            return basicType(methodType().parameterType(n));
-        }
-
-        int arity() {
-            //int siglen = member.getMethodType().parameterCount();
-            //if (!member.isStatic())  siglen += 1;
-            //return siglen;
-            return methodType().parameterCount();
-        }
-
-        public String toString() {
-            if (member == null)  return resolvedHandle.toString();
-            return member.getDeclaringClass().getSimpleName()+"."+member.getName();
-        }
-    }
-
-    void resolve() {
-        for (Name n : names) n.resolve();
-    }
-
-    public static char basicType(Class<?> type) {
-        char c = Wrapper.basicTypeChar(type);
-        if ("ZBSC".indexOf(c) >= 0)  c = 'I';
-        assert("LIJFDV".indexOf(c) >= 0);
-        return c;
-    }
-    public static char[] basicTypes(List<Class<?>> types) {
-        char[] btypes = new char[types.size()];
-        for (int i = 0; i < btypes.length; i++) {
-            btypes[i] = basicType(types.get(i));
-        }
-        return btypes;
-    }
-    public static String basicTypeSignature(MethodType type) {
-        char[] sig = new char[type.parameterCount() + 2];
-        int sigp = 0;
-        for (Class<?> pt : type.parameterList()) {
-            sig[sigp++] = basicType(pt);
-        }
-        sig[sigp++] = '_';
-        sig[sigp++] = basicType(type.returnType());
-        assert(sigp == sig.length);
-        return String.valueOf(sig);
-    }
-
-    static final class Name {
-        final char type;
-        private short index;
-        final NamedFunction function;
-        final Object[] arguments;
-
-        private Name(int index, char type, NamedFunction function, Object[] arguments) {
-            this.index = (short)index;
-            this.type = type;
-            this.function = function;
-            this.arguments = arguments;
-            assert(this.index == index);
-        }
-        Name(MethodHandle function, Object... arguments) {
-            this(new NamedFunction(function), arguments);
-        }
-        Name(MemberName function, Object... arguments) {
-            this(new NamedFunction(function), arguments);
-        }
-        Name(NamedFunction function, Object... arguments) {
-            this(-1, function.returnType(), function, arguments = arguments.clone());
-            assert(arguments.length == function.arity()) : "arity mismatch: arguments.length=" + arguments.length + " == function.arity()=" + function.arity() + " in " + debugString();
-            for (int i = 0; i < arguments.length; i++)
-                assert(typesMatch(function.parameterType(i), arguments[i])) : "types don't match: function.parameterType(" + i + ")=" + function.parameterType(i) + ", arguments[" + i + "]=" + arguments[i] + " in " + debugString();
-        }
-        Name(int index, char type) {
-            this(index, type, null, null);
-        }
-        Name(char type) {
-            this(-1, type);
-        }
-
-        char type() { return type; }
-        int index() { return index; }
-        boolean initIndex(int i) {
-            if (index != i) {
-                if (index != -1)  return false;
-                index = (short)i;
-            }
-            return true;
-        }
-
-
-        void resolve() {
-            if (function != null)
-                function.resolve();
-        }
-
-        Name newIndex(int i) {
-            if (initIndex(i))  return this;
-            return cloneWithIndex(i);
-        }
-        Name cloneWithIndex(int i) {
-            Object[] newArguments = (arguments == null) ? null : arguments.clone();
-            return new Name(i, type, function, newArguments);
-        }
-        Name replaceName(Name oldName, Name newName) {  // FIXME: use replaceNames uniformly
-            if (oldName == newName)  return this;
-            @SuppressWarnings("LocalVariableHidesMemberVariable")
-            Object[] arguments = this.arguments;
-            if (arguments == null)  return this;
-            boolean replaced = false;
-            for (int j = 0; j < arguments.length; j++) {
-                if (arguments[j] == oldName) {
-                    if (!replaced) {
-                        replaced = true;
-                        arguments = arguments.clone();
-                    }
-                    arguments[j] = newName;
-                }
-            }
-            if (!replaced)  return this;
-            return new Name(function, arguments);
-        }
-        Name replaceNames(Name[] oldNames, Name[] newNames, int start, int end) {
-            @SuppressWarnings("LocalVariableHidesMemberVariable")
-            Object[] arguments = this.arguments;
-            boolean replaced = false;
-        eachArg:
-            for (int j = 0; j < arguments.length; j++) {
-                if (arguments[j] instanceof Name) {
-                    Name n = (Name) arguments[j];
-                    int check = n.index;
-                    // harmless check to see if the thing is already in newNames:
-                    if (check >= 0 && check < newNames.length && n == newNames[check])
-                        continue eachArg;
-                    // n might not have the correct index: n != oldNames[n.index].
-                    for (int i = start; i < end; i++) {
-                        if (n == oldNames[i]) {
-                            if (n == newNames[i])
-                                continue eachArg;
-                            if (!replaced) {
-                                replaced = true;
-                                arguments = arguments.clone();
-                            }
-                            arguments[j] = newNames[i];
-                            continue eachArg;
-                        }
-                    }
-                }
-            }
-            if (!replaced)  return this;
-            return new Name(function, arguments);
-        }
-        void internArguments() {
-            @SuppressWarnings("LocalVariableHidesMemberVariable")
-            Object[] arguments = this.arguments;
-            for (int j = 0; j < arguments.length; j++) {
-                if (arguments[j] instanceof Name) {
-                    Name n = (Name) arguments[j];
-                    if (n.isParam() && n.index < INTERNED_ARGUMENT_LIMIT)
-                        arguments[j] = internArgument(n);
-                }
-            }
-        }
-        boolean isParam() {
-            return function == null;
-        }
-        boolean isConstantZero() {
-            return !isParam() && arguments.length == 0 && function.equals(constantZero(0, type).function);
-        }
-
-        public String toString() {
-            return (isParam()?"a":"t")+(index >= 0 ? index : System.identityHashCode(this))+":"+type;
-        }
-        public String debugString() {
-            String s = toString();
-            return (function == null) ? s : s + "=" + exprString();
-        }
-        public String exprString() {
-            if (function == null)  return "null";
-            StringBuilder buf = new StringBuilder(function.toString());
-            buf.append("(");
-            String cma = "";
-            for (Object a : arguments) {
-                buf.append(cma); cma = ",";
-                if (a instanceof Name || a instanceof Integer)
-                    buf.append(a);
-                else
-                    buf.append("(").append(a).append(")");
-            }
-            buf.append(")");
-            return buf.toString();
-        }
-
-        private static boolean typesMatch(char parameterType, Object object) {
-            if (object instanceof Name) {
-                return ((Name)object).type == parameterType;
-            }
-            switch (parameterType) {
-                case 'I':  return object instanceof Integer;
-                case 'J':  return object instanceof Long;
-                case 'F':  return object instanceof Float;
-                case 'D':  return object instanceof Double;
-            }
-            assert(parameterType == 'L');
-            return true;
-        }
-
-        /**
-         * Does this Name precede the given binding node in some canonical order?
-         * This predicate is used to order data bindings (via insertion sort)
-         * with some stability.
-         * @param binding
-         * @return
-         */
-        boolean isSiblingBindingBefore(Name binding) {
-            assert(!binding.isParam());
-            if (isParam())  return true;
-            if (function.equals(binding.function) &&
-                arguments.length == binding.arguments.length) {
-                boolean sawInt = false;
-                for (int i = 0; i < arguments.length; i++) {
-                    Object a1 = arguments[i];
-                    Object a2 = binding.arguments[i];
-                    if (!a1.equals(a2)) {
-                        if (a1 instanceof Integer && a2 instanceof Integer) {
-                            if (sawInt)  continue;
-                            sawInt = true;
-                            if ((int)a1 < (int)a2)  continue;  // still might be true
-                        }
-                        return false;
-                    }
-                }
-                return sawInt;
-            }
-            return false;
-        }
-
-        public boolean equals(Name that) {
-            if (this == that)  return true;
-            if (isParam())
-                // each parameter is a unique atom
-                return false;  // this != that
-            return
-                //this.index == that.index &&
-                this.type == that.type &&
-                this.function.equals(that.function) &&
-                Arrays.equals(this.arguments, that.arguments);
-        }
-        @Override
-        public boolean equals(Object x) {
-            return x instanceof Name && equals((Name)x);
-        }
-        @Override
-        public int hashCode() {
-            if (isParam())
-                return index | (type << 8);
-            return function.hashCode() ^ Arrays.hashCode(arguments);
-        }
-    }
-
-    static Name argument(int which, char type) {
-        int tn = ALL_TYPES.indexOf(type);
-        if (tn < 0 || which >= INTERNED_ARGUMENT_LIMIT)
-            return new Name(which, type);
-        return INTERNED_ARGUMENTS[tn][which];
-    }
-    static Name internArgument(Name n) {
-        assert(n.isParam()) : "not param: " + n;
-        assert(n.index < INTERNED_ARGUMENT_LIMIT);
-        return argument(n.index, n.type);
-    }
-    static Name[] arguments(int extra, String types) {
-        int length = types.length();
-        Name[] names = new Name[length + extra];
-        for (int i = 0; i < length; i++)
-            names[i] = argument(i, types.charAt(i));
-        return names;
-    }
-    static Name[] arguments(int extra, char... types) {
-        int length = types.length;
-        Name[] names = new Name[length + extra];
-        for (int i = 0; i < length; i++)
-            names[i] = argument(i, types[i]);
-        return names;
-    }
-    static Name[] arguments(int extra, List<Class<?>> types) {
-        int length = types.size();
-        Name[] names = new Name[length + extra];
-        for (int i = 0; i < length; i++)
-            names[i] = argument(i, basicType(types.get(i)));
-        return names;
-    }
-    static Name[] arguments(int extra, Class<?>... types) {
-        int length = types.length;
-        Name[] names = new Name[length + extra];
-        for (int i = 0; i < length; i++)
-            names[i] = argument(i, basicType(types[i]));
-        return names;
-    }
-    static Name[] arguments(int extra, MethodType types) {
-        int length = types.parameterCount();
-        Name[] names = new Name[length + extra];
-        for (int i = 0; i < length; i++)
-            names[i] = argument(i, basicType(types.parameterType(i)));
-        return names;
-    }
-    static final String ALL_TYPES = "LIJFD";  // omit V, not an argument type
-    static final int INTERNED_ARGUMENT_LIMIT = 10;
-    private static final Name[][] INTERNED_ARGUMENTS
-            = new Name[ALL_TYPES.length()][INTERNED_ARGUMENT_LIMIT];
-    static {
-        for (int tn = 0; tn < ALL_TYPES.length(); tn++) {
-            for (int i = 0; i < INTERNED_ARGUMENTS[tn].length; i++) {
-                char type = ALL_TYPES.charAt(tn);
-                INTERNED_ARGUMENTS[tn][i] = new Name(i, type);
-            }
-        }
-    }
-
-    private static final MemberName.Factory IMPL_NAMES = MemberName.getFactory();
-
-    static Name constantZero(int which, char type) {
-        return CONSTANT_ZERO[ALL_TYPES.indexOf(type)].newIndex(which);
-    }
-    private static final Name[] CONSTANT_ZERO
-            = new Name[ALL_TYPES.length()];
-    static {
-        for (int tn = 0; tn < ALL_TYPES.length(); tn++) {
-            char bt = ALL_TYPES.charAt(tn);
-            Wrapper wrap = Wrapper.forBasicType(bt);
-            MemberName zmem = new MemberName(LambdaForm.class, "zero"+bt, MethodType.methodType(wrap.primitiveType()), REF_invokeStatic);
-            try {
-                zmem = IMPL_NAMES.resolveOrFail(REF_invokeStatic, zmem, null, NoSuchMethodException.class);
-            } catch (IllegalAccessException|NoSuchMethodException ex) {
-                throw newInternalError(ex);
-            }
-            NamedFunction zcon = new NamedFunction(zmem);
-            Name n = new Name(zcon).newIndex(0);
-            assert(n.type == ALL_TYPES.charAt(tn));
-            CONSTANT_ZERO[tn] = n;
-            assert(n.isConstantZero());
-        }
-    }
-
-    // Avoid appealing to ValueConversions at bootstrap time:
-    private static int zeroI() { return 0; }
-    private static long zeroJ() { return 0; }
-    private static float zeroF() { return 0; }
-    private static double zeroD() { return 0; }
-    private static Object zeroL() { return null; }
-
-    // Put this last, so that previous static inits can run before.
-    static {
-        if (USE_PREDEFINED_INTERPRET_METHODS)
-            PREPARED_FORMS.putAll(computeInitialPreparedForms());
-    }
-
-    /**
-     * Internal marker for byte-compiled LambdaForms.
-     */
-    /*non-public*/
-    @Target(ElementType.METHOD)
-    @Retention(RetentionPolicy.RUNTIME)
-    @interface Compiled {
-    }
-
-    /**
-     * Internal marker for LambdaForm interpreter frames.
-     */
-    /*non-public*/
-    @Target(ElementType.METHOD)
-    @Retention(RetentionPolicy.RUNTIME)
-    @interface Hidden {
-    }
-
-
-/*
-    // Smoke-test for the invokers used in this file.
-    static void testMethodHandleLinkers() throws Throwable {
-        MemberName.Factory lookup = MemberName.getFactory();
-        MemberName asList_MN = new MemberName(Arrays.class, "asList",
-                                              MethodType.methodType(List.class, Object[].class),
-                                              REF_invokeStatic);
-        //MethodHandleNatives.resolve(asList_MN, null);
-        asList_MN = lookup.resolveOrFail(asList_MN, REF_invokeStatic, null, NoSuchMethodException.class);
-        System.out.println("about to call "+asList_MN);
-        Object[] abc = { "a", "bc" };
-        List<?> lst = (List<?>) MethodHandle.linkToStatic(abc, asList_MN);
-        System.out.println("lst="+lst);
-        MemberName toString_MN = new MemberName(Object.class.getMethod("toString"));
-        String s1 = (String) MethodHandle.linkToVirtual(lst, toString_MN);
-        toString_MN = new MemberName(Object.class.getMethod("toString"), true);
-        String s2 = (String) MethodHandle.linkToSpecial(lst, toString_MN);
-        System.out.println("[s1,s2,lst]="+Arrays.asList(s1, s2, lst.toString()));
-        MemberName toArray_MN = new MemberName(List.class.getMethod("toArray"));
-        Object[] arr = (Object[]) MethodHandle.linkToInterface(lst, toArray_MN);
-        System.out.println("toArray="+Arrays.toString(arr));
-    }
-    static { try { testMethodHandleLinkers(); } catch (Throwable ex) { throw new RuntimeException(ex); } }
-    // Requires these definitions in MethodHandle:
-    static final native Object linkToStatic(Object x1, MemberName mn) throws Throwable;
-    static final native Object linkToVirtual(Object x1, MemberName mn) throws Throwable;
-    static final native Object linkToSpecial(Object x1, MemberName mn) throws Throwable;
-    static final native Object linkToInterface(Object x1, MemberName mn) throws Throwable;
- */
-
-    static { NamedFunction.initializeInvokers(); }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/MemberName.java b/ojluni/src/main/java/java/lang/invoke/MemberName.java
deleted file mode 100755
index 00ed229..0000000
--- a/ojluni/src/main/java/java/lang/invoke/MemberName.java
+++ /dev/null
@@ -1,962 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package java.lang.invoke;
-
-import sun.invoke.util.BytecodeDescriptor;
-import sun.invoke.util.VerifyAccess;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Member;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import static java.lang.invoke.MethodHandleNatives.Constants.*;
-import static java.lang.invoke.MethodHandleStatics.*;
-import java.util.Objects;
-
-/**
- * A {@code MemberName} is a compact symbolic datum which fully characterizes
- * a method or field reference.
- * A member name refers to a field, method, constructor, or member type.
- * Every member name has a simple name (a string) and a type (either a Class or MethodType).
- * A member name may also have a non-null declaring class, or it may be simply
- * a naked name/type pair.
- * A member name may also have non-zero modifier flags.
- * Finally, a member name may be either resolved or unresolved.
- * If it is resolved, the existence of the named
- * <p>
- * Whether resolved or not, a member name provides no access rights or
- * invocation capability to its possessor.  It is merely a compact
- * representation of all symbolic information necessary to link to
- * and properly use the named member.
- * <p>
- * When resolved, a member name's internal implementation may include references to JVM metadata.
- * This representation is stateless and only decriptive.
- * It provides no private information and no capability to use the member.
- * <p>
- * By contrast, a {@linkplain java.lang.reflect.Method} contains fuller information
- * about the internals of a method (except its bytecodes) and also
- * allows invocation.  A MemberName is much lighter than a Method,
- * since it contains about 7 fields to the 16 of Method (plus its sub-arrays),
- * and those seven fields omit much of the information in Method.
- * @author jrose
- */
-/*non-public*/ final class MemberName implements Member, Cloneable {
-    private Class<?>   clazz;       // class in which the method is defined
-    private String     name;        // may be null if not yet materialized
-    private Object     type;        // may be null if not yet materialized
-    private int        flags;       // modifier bits; see reflect.Modifier
-    //@Injected JVM_Method* vmtarget;
-    //@Injected int         vmindex;
-    private Object     resolution;  // if null, this guy is resolved
-
-    /** Return the declaring class of this member.
-     *  In the case of a bare name and type, the declaring class will be null.
-     */
-    public Class<?> getDeclaringClass() {
-        return clazz;
-    }
-
-    /** Utility method producing the class loader of the declaring class. */
-    public ClassLoader getClassLoader() {
-        return clazz.getClassLoader();
-    }
-
-    /** Return the simple name of this member.
-     *  For a type, it is the same as {@link Class#getSimpleName}.
-     *  For a method or field, it is the simple name of the member.
-     *  For a constructor, it is always {@code "&lt;init&gt;"}.
-     */
-    public String getName() {
-        if (name == null) {
-            expandFromVM();
-            if (name == null)  return null;
-        }
-        return name;
-    }
-
-    public MethodType getMethodOrFieldType() {
-        if (isInvocable())
-            return getMethodType();
-        if (isGetter())
-            return MethodType.methodType(getFieldType());
-        if (isSetter())
-            return MethodType.methodType(void.class, getFieldType());
-        throw new InternalError("not a method or field: "+this);
-    }
-
-    /** Return the declared type of this member, which
-     *  must be a method or constructor.
-     */
-    public MethodType getMethodType() {
-        if (type == null) {
-            expandFromVM();
-            if (type == null)  return null;
-        }
-        if (!isInvocable())
-            throw newIllegalArgumentException("not invocable, no method type");
-        if (type instanceof MethodType) {
-            return (MethodType) type;
-        }
-        if (type instanceof String) {
-            String sig = (String) type;
-            MethodType res = MethodType.fromMethodDescriptorString(sig, getClassLoader());
-            this.type = res;
-            return res;
-        }
-        if (type instanceof Object[]) {
-            Object[] typeInfo = (Object[]) type;
-            Class<?>[] ptypes = (Class<?>[]) typeInfo[1];
-            Class<?> rtype = (Class<?>) typeInfo[0];
-            MethodType res = MethodType.methodType(rtype, ptypes);
-            this.type = res;
-            return res;
-        }
-        throw new InternalError("bad method type "+type);
-    }
-
-    /** Return the actual type under which this method or constructor must be invoked.
-     *  For non-static methods or constructors, this is the type with a leading parameter,
-     *  a reference to declaring class.  For static methods, it is the same as the declared type.
-     */
-    public MethodType getInvocationType() {
-        MethodType itype = getMethodOrFieldType();
-        if (isConstructor() && getReferenceKind() == REF_newInvokeSpecial)
-            return itype.changeReturnType(clazz);
-        if (!isStatic())
-            return itype.insertParameterTypes(0, clazz);
-        return itype;
-    }
-
-    /** Utility method producing the parameter types of the method type. */
-    public Class<?>[] getParameterTypes() {
-        return getMethodType().parameterArray();
-    }
-
-    /** Utility method producing the return type of the method type. */
-    public Class<?> getReturnType() {
-        return getMethodType().returnType();
-    }
-
-    /** Return the declared type of this member, which
-     *  must be a field or type.
-     *  If it is a type member, that type itself is returned.
-     */
-    public Class<?> getFieldType() {
-        if (type == null) {
-            expandFromVM();
-            if (type == null)  return null;
-        }
-        if (isInvocable())
-            throw newIllegalArgumentException("not a field or nested class, no simple type");
-        if (type instanceof Class<?>) {
-            return (Class<?>) type;
-        }
-        if (type instanceof String) {
-            String sig = (String) type;
-            MethodType mtype = MethodType.fromMethodDescriptorString("()"+sig, getClassLoader());
-            Class<?> res = mtype.returnType();
-            this.type = res;
-            return res;
-        }
-        throw new InternalError("bad field type "+type);
-    }
-
-    /** Utility method to produce either the method type or field type of this member. */
-    public Object getType() {
-        return (isInvocable() ? getMethodType() : getFieldType());
-    }
-
-    /** Utility method to produce the signature of this member,
-     *  used within the class file format to describe its type.
-     */
-    public String getSignature() {
-        if (type == null) {
-            expandFromVM();
-            if (type == null)  return null;
-        }
-        if (type instanceof String)
-            return (String) type;
-        if (isInvocable())
-            return BytecodeDescriptor.unparse(getMethodType());
-        else
-            return BytecodeDescriptor.unparse(getFieldType());
-    }
-
-    /** Return the modifier flags of this member.
-     *  @see java.lang.reflect.Modifier
-     */
-    public int getModifiers() {
-        return (flags & RECOGNIZED_MODIFIERS);
-    }
-
-    /** Return the reference kind of this member, or zero if none.
-     */
-    public byte getReferenceKind() {
-        return (byte) ((flags >>> MN_REFERENCE_KIND_SHIFT) & MN_REFERENCE_KIND_MASK);
-    }
-    private boolean referenceKindIsConsistent() {
-        byte refKind = getReferenceKind();
-        if (refKind == REF_NONE)  return isType();
-        if (isField()) {
-            assert(staticIsConsistent());
-            assert(MethodHandleNatives.refKindIsField(refKind));
-        } else if (isConstructor()) {
-            assert(refKind == REF_newInvokeSpecial || refKind == REF_invokeSpecial);
-        } else if (isMethod()) {
-            assert(staticIsConsistent());
-            assert(MethodHandleNatives.refKindIsMethod(refKind));
-            if (clazz.isInterface())
-                assert(refKind == REF_invokeInterface ||
-                       refKind == REF_invokeVirtual && isObjectPublicMethod());
-        } else {
-            assert(false);
-        }
-        return true;
-    }
-    private boolean isObjectPublicMethod() {
-        if (clazz == Object.class)  return true;
-        MethodType mtype = getMethodType();
-        if (name.equals("toString") && mtype.returnType() == String.class && mtype.parameterCount() == 0)
-            return true;
-        if (name.equals("hashCode") && mtype.returnType() == int.class && mtype.parameterCount() == 0)
-            return true;
-        if (name.equals("equals") && mtype.returnType() == boolean.class && mtype.parameterCount() == 1 && mtype.parameterType(0) == Object.class)
-            return true;
-        return false;
-    }
-    /*non-public*/ boolean referenceKindIsConsistentWith(int originalRefKind) {
-        int refKind = getReferenceKind();
-        if (refKind == originalRefKind)  return true;
-        switch (originalRefKind) {
-        case REF_invokeInterface:
-            // Looking up an interface method, can get (e.g.) Object.hashCode
-            assert(refKind == REF_invokeVirtual ||
-                   refKind == REF_invokeSpecial) : this;
-            return true;
-        case REF_invokeVirtual:
-        case REF_newInvokeSpecial:
-            // Looked up a virtual, can get (e.g.) final String.hashCode.
-            assert(refKind == REF_invokeSpecial) : this;
-            return true;
-        }
-        assert(false) : this;
-        return true;
-    }
-    private boolean staticIsConsistent() {
-        byte refKind = getReferenceKind();
-        return MethodHandleNatives.refKindIsStatic(refKind) == isStatic() || getModifiers() == 0;
-    }
-    private boolean vminfoIsConsistent() {
-        byte refKind = getReferenceKind();
-        assert(isResolved());  // else don't call
-        Object vminfo = MethodHandleNatives.getMemberVMInfo(this);
-        assert(vminfo instanceof Object[]);
-        long vmindex = (Long) ((Object[])vminfo)[0];
-        Object vmtarget = ((Object[])vminfo)[1];
-        if (MethodHandleNatives.refKindIsField(refKind)) {
-            assert(vmindex >= 0) : vmindex + ":" + this;
-            assert(vmtarget instanceof Class);
-        } else {
-            if (MethodHandleNatives.refKindDoesDispatch(refKind))
-                assert(vmindex >= 0) : vmindex + ":" + this;
-            else
-                assert(vmindex < 0) : vmindex;
-            assert(vmtarget instanceof MemberName) : vmtarget + " in " + this;
-        }
-        return true;
-    }
-
-    private MemberName changeReferenceKind(byte refKind, byte oldKind) {
-        assert(getReferenceKind() == oldKind);
-        assert(MethodHandleNatives.refKindIsValid(refKind));
-        flags += (((int)refKind - oldKind) << MN_REFERENCE_KIND_SHIFT);
-//        if (isConstructor() && refKind != REF_newInvokeSpecial)
-//            flags += (IS_METHOD - IS_CONSTRUCTOR);
-//        else if (refKind == REF_newInvokeSpecial && isMethod())
-//            flags += (IS_CONSTRUCTOR - IS_METHOD);
-        return this;
-    }
-
-    private boolean testFlags(int mask, int value) {
-        return (flags & mask) == value;
-    }
-    private boolean testAllFlags(int mask) {
-        return testFlags(mask, mask);
-    }
-    private boolean testAnyFlags(int mask) {
-        return !testFlags(mask, 0);
-    }
-
-    /** Utility method to query if this member is a method handle invocation (invoke or invokeExact). */
-    public boolean isMethodHandleInvoke() {
-        final int bits = Modifier.NATIVE | Modifier.FINAL;
-        final int negs = Modifier.STATIC;
-        if (testFlags(bits | negs, bits) &&
-            clazz == MethodHandle.class) {
-            return name.equals("invoke") || name.equals("invokeExact");
-        }
-        return false;
-    }
-
-    /** Utility method to query the modifier flags of this member. */
-    public boolean isStatic() {
-        return Modifier.isStatic(flags);
-    }
-    /** Utility method to query the modifier flags of this member. */
-    public boolean isPublic() {
-        return Modifier.isPublic(flags);
-    }
-    /** Utility method to query the modifier flags of this member. */
-    public boolean isPrivate() {
-        return Modifier.isPrivate(flags);
-    }
-    /** Utility method to query the modifier flags of this member. */
-    public boolean isProtected() {
-        return Modifier.isProtected(flags);
-    }
-    /** Utility method to query the modifier flags of this member. */
-    public boolean isFinal() {
-        return Modifier.isFinal(flags);
-    }
-    /** Utility method to query whether this member or its defining class is final. */
-    public boolean canBeStaticallyBound() {
-        return Modifier.isFinal(flags | clazz.getModifiers());
-    }
-    /** Utility method to query the modifier flags of this member. */
-    public boolean isVolatile() {
-        return Modifier.isVolatile(flags);
-    }
-    /** Utility method to query the modifier flags of this member. */
-    public boolean isAbstract() {
-        return Modifier.isAbstract(flags);
-    }
-    /** Utility method to query the modifier flags of this member. */
-    public boolean isNative() {
-        return Modifier.isNative(flags);
-    }
-    // let the rest (native, volatile, transient, etc.) be tested via Modifier.isFoo
-
-    // unofficial modifier flags, used by HotSpot:
-    static final int BRIDGE    = 0x00000040;
-    static final int VARARGS   = 0x00000080;
-    static final int SYNTHETIC = 0x00001000;
-    static final int ANNOTATION= 0x00002000;
-    static final int ENUM      = 0x00004000;
-    /** Utility method to query the modifier flags of this member; returns false if the member is not a method. */
-    public boolean isBridge() {
-        return testAllFlags(IS_METHOD | BRIDGE);
-    }
-    /** Utility method to query the modifier flags of this member; returns false if the member is not a method. */
-    public boolean isVarargs() {
-        return testAllFlags(VARARGS) && isInvocable();
-    }
-    /** Utility method to query the modifier flags of this member; returns false if the member is not a method. */
-    public boolean isSynthetic() {
-        return testAllFlags(SYNTHETIC);
-    }
-
-    static final String CONSTRUCTOR_NAME = "<init>";  // the ever-popular
-
-    // modifiers exported by the JVM:
-    static final int RECOGNIZED_MODIFIERS = 0xFFFF;
-
-    // private flags, not part of RECOGNIZED_MODIFIERS:
-    static final int
-            IS_METHOD           = MN_IS_METHOD,        // method (not constructor)
-            IS_CONSTRUCTOR      = MN_IS_CONSTRUCTOR,   // constructor
-            IS_FIELD            = MN_IS_FIELD,         // field
-            IS_TYPE             = MN_IS_TYPE,          // nested type
-            IS_CALLER_SENSITIVE = MN_CALLER_SENSITIVE; // @CallerSensitive annotation
-
-    static final int ALL_ACCESS = Modifier.PUBLIC | Modifier.PRIVATE | Modifier.PROTECTED;
-    static final int ALL_KINDS = IS_METHOD | IS_CONSTRUCTOR | IS_FIELD | IS_TYPE;
-    static final int IS_INVOCABLE = IS_METHOD | IS_CONSTRUCTOR;
-    static final int IS_FIELD_OR_METHOD = IS_METHOD | IS_FIELD;
-    static final int SEARCH_ALL_SUPERS = MN_SEARCH_SUPERCLASSES | MN_SEARCH_INTERFACES;
-
-    /** Utility method to query whether this member is a method or constructor. */
-    public boolean isInvocable() {
-        return testAnyFlags(IS_INVOCABLE);
-    }
-    /** Utility method to query whether this member is a method, constructor, or field. */
-    public boolean isFieldOrMethod() {
-        return testAnyFlags(IS_FIELD_OR_METHOD);
-    }
-    /** Query whether this member is a method. */
-    public boolean isMethod() {
-        return testAllFlags(IS_METHOD);
-    }
-    /** Query whether this member is a constructor. */
-    public boolean isConstructor() {
-        return testAllFlags(IS_CONSTRUCTOR);
-    }
-    /** Query whether this member is a field. */
-    public boolean isField() {
-        return testAllFlags(IS_FIELD);
-    }
-    /** Query whether this member is a type. */
-    public boolean isType() {
-        return testAllFlags(IS_TYPE);
-    }
-    /** Utility method to query whether this member is neither public, private, nor protected. */
-    public boolean isPackage() {
-        return !testAnyFlags(ALL_ACCESS);
-    }
-    /** Utility method to query whether this member is annotated with @CallerSensitive. */
-    public boolean isCallerSensitive() {
-        return testAllFlags(IS_CALLER_SENSITIVE);
-    }
-
-    /** Utility method to query whether this member is accessible from a given lookup class. */
-    public boolean isAccessibleFrom(Class<?> lookupClass) {
-        return VerifyAccess.isMemberAccessible(this.getDeclaringClass(), this.getDeclaringClass(), flags,
-                                               lookupClass, ALL_ACCESS|MethodHandles.Lookup.PACKAGE);
-    }
-
-    /** Initialize a query.   It is not resolved. */
-    private void init(Class<?> defClass, String name, Object type, int flags) {
-        // defining class is allowed to be null (for a naked name/type pair)
-        //name.toString();  // null check
-        //type.equals(type);  // null check
-        // fill in fields:
-        this.clazz = defClass;
-        this.name = name;
-        this.type = type;
-        this.flags = flags;
-        assert(testAnyFlags(ALL_KINDS));
-        assert(this.resolution == null);  // nobody should have touched this yet
-        //assert(referenceKindIsConsistent());  // do this after resolution
-    }
-
-    private void expandFromVM() {
-        if (!isResolved())  return;
-        if (type instanceof Object[])
-            type = null;  // don't saddle JVM w/ typeInfo
-        MethodHandleNatives.expand(this);
-    }
-
-    // Capturing information from the Core Reflection API:
-    private static int flagsMods(int flags, int mods, byte refKind) {
-        assert((flags & RECOGNIZED_MODIFIERS) == 0);
-        assert((mods & ~RECOGNIZED_MODIFIERS) == 0);
-        assert((refKind & ~MN_REFERENCE_KIND_MASK) == 0);
-        return flags | mods | (refKind << MN_REFERENCE_KIND_SHIFT);
-    }
-    /** Create a name for the given reflected method.  The resulting name will be in a resolved state. */
-    public MemberName(Method m) {
-        this(m, false);
-    }
-    @SuppressWarnings("LeakingThisInConstructor")
-    public MemberName(Method m, boolean wantSpecial) {
-        m.getClass();  // NPE check
-        // fill in vmtarget, vmindex while we have m in hand:
-        MethodHandleNatives.init(this, m);
-        assert(isResolved() && this.clazz != null);
-        this.name = m.getName();
-        if (this.type == null)
-            this.type = new Object[] { m.getReturnType(), m.getParameterTypes() };
-        if (wantSpecial) {
-            if (getReferenceKind() == REF_invokeVirtual)
-                changeReferenceKind(REF_invokeSpecial, REF_invokeVirtual);
-        }
-    }
-    public MemberName asSpecial() {
-        switch (getReferenceKind()) {
-        case REF_invokeSpecial:     return this;
-        case REF_invokeVirtual:     return clone().changeReferenceKind(REF_invokeSpecial, REF_invokeVirtual);
-        case REF_newInvokeSpecial:  return clone().changeReferenceKind(REF_invokeSpecial, REF_newInvokeSpecial);
-        }
-        throw new IllegalArgumentException(this.toString());
-    }
-    public MemberName asConstructor() {
-        switch (getReferenceKind()) {
-        case REF_invokeSpecial:     return clone().changeReferenceKind(REF_newInvokeSpecial, REF_invokeSpecial);
-        case REF_newInvokeSpecial:  return this;
-        }
-        throw new IllegalArgumentException(this.toString());
-    }
-    /** Create a name for the given reflected constructor.  The resulting name will be in a resolved state. */
-    @SuppressWarnings("LeakingThisInConstructor")
-    public MemberName(Constructor<?> ctor) {
-        ctor.getClass();  // NPE check
-        // fill in vmtarget, vmindex while we have ctor in hand:
-        MethodHandleNatives.init(this, ctor);
-        assert(isResolved() && this.clazz != null);
-        this.name = CONSTRUCTOR_NAME;
-        if (this.type == null)
-            this.type = new Object[] { void.class, ctor.getParameterTypes() };
-    }
-    /** Create a name for the given reflected field.  The resulting name will be in a resolved state.
-     */
-    public MemberName(Field fld) {
-        this(fld, false);
-    }
-    @SuppressWarnings("LeakingThisInConstructor")
-    public MemberName(Field fld, boolean makeSetter) {
-        fld.getClass();  // NPE check
-        // fill in vmtarget, vmindex while we have fld in hand:
-        MethodHandleNatives.init(this, fld);
-        assert(isResolved() && this.clazz != null);
-        this.name = fld.getName();
-        this.type = fld.getType();
-        assert((REF_putStatic - REF_getStatic) == (REF_putField - REF_getField));
-        byte refKind = this.getReferenceKind();
-        assert(refKind == (isStatic() ? REF_getStatic : REF_getField));
-        if (makeSetter) {
-            changeReferenceKind((byte)(refKind + (REF_putStatic - REF_getStatic)), refKind);
-        }
-    }
-    public boolean isGetter() {
-        return MethodHandleNatives.refKindIsGetter(getReferenceKind());
-    }
-    public boolean isSetter() {
-        return MethodHandleNatives.refKindIsSetter(getReferenceKind());
-    }
-    public MemberName asSetter() {
-        byte refKind = getReferenceKind();
-        assert(MethodHandleNatives.refKindIsGetter(refKind));
-        assert((REF_putStatic - REF_getStatic) == (REF_putField - REF_getField));
-        byte setterRefKind = (byte)(refKind + (REF_putField - REF_getField));
-        return clone().changeReferenceKind(setterRefKind, refKind);
-    }
-    /** Create a name for the given class.  The resulting name will be in a resolved state. */
-    public MemberName(Class<?> type) {
-        init(type.getDeclaringClass(), type.getSimpleName(), type,
-                flagsMods(IS_TYPE, type.getModifiers(), REF_NONE));
-        initResolved(true);
-    }
-
-    // bare-bones constructor; the JVM will fill it in
-    MemberName() { }
-
-    // locally useful cloner
-    @Override protected MemberName clone() {
-        try {
-            return (MemberName) super.clone();
-        } catch (CloneNotSupportedException ex) {
-            throw newInternalError(ex);
-        }
-     }
-
-    /** Get the definition of this member name.
-     *  This may be in a super-class of the declaring class of this member.
-     */
-    public MemberName getDefinition() {
-        if (!isResolved())  throw new IllegalStateException("must be resolved: "+this);
-        if (isType())  return this;
-        MemberName res = this.clone();
-        res.clazz = null;
-        res.type = null;
-        res.name = null;
-        res.resolution = res;
-        res.expandFromVM();
-        assert(res.getName().equals(this.getName()));
-        return res;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(clazz, flags, name, getType());
-    }
-    @Override
-    public boolean equals(Object that) {
-        return (that instanceof MemberName && this.equals((MemberName)that));
-    }
-
-    /** Decide if two member names have exactly the same symbolic content.
-     *  Does not take into account any actual class members, so even if
-     *  two member names resolve to the same actual member, they may
-     *  be distinct references.
-     */
-    public boolean equals(MemberName that) {
-        if (this == that)  return true;
-        if (that == null)  return false;
-        return this.clazz == that.clazz
-                && this.flags == that.flags
-                && Objects.equals(this.name, that.name)
-                && Objects.equals(this.getType(), that.getType());
-    }
-
-    // Construction from symbolic parts, for queries:
-    /** Create a field or type name from the given components:  Declaring class, name, type, reference kind.
-     *  The declaring class may be supplied as null if this is to be a bare name and type.
-     *  The resulting name will in an unresolved state.
-     */
-    public MemberName(Class<?> defClass, String name, Class<?> type, byte refKind) {
-        init(defClass, name, type, flagsMods(IS_FIELD, 0, refKind));
-        initResolved(false);
-    }
-    /** Create a field or type name from the given components:  Declaring class, name, type.
-     *  The declaring class may be supplied as null if this is to be a bare name and type.
-     *  The modifier flags default to zero.
-     *  The resulting name will in an unresolved state.
-     */
-    public MemberName(Class<?> defClass, String name, Class<?> type, Void unused) {
-        this(defClass, name, type, REF_NONE);
-        initResolved(false);
-    }
-    /** Create a method or constructor name from the given components:  Declaring class, name, type, modifiers.
-     *  It will be a constructor if and only if the name is {@code "&lt;init&gt;"}.
-     *  The declaring class may be supplied as null if this is to be a bare name and type.
-     *  The last argument is optional, a boolean which requests REF_invokeSpecial.
-     *  The resulting name will in an unresolved state.
-     */
-    public MemberName(Class<?> defClass, String name, MethodType type, byte refKind) {
-        @SuppressWarnings("LocalVariableHidesMemberVariable")
-        int flags = (name != null && name.equals(CONSTRUCTOR_NAME) ? IS_CONSTRUCTOR : IS_METHOD);
-        init(defClass, name, type, flagsMods(flags, 0, refKind));
-        initResolved(false);
-    }
-//    /** Create a method or constructor name from the given components:  Declaring class, name, type, modifiers.
-//     *  It will be a constructor if and only if the name is {@code "&lt;init&gt;"}.
-//     *  The declaring class may be supplied as null if this is to be a bare name and type.
-//     *  The modifier flags default to zero.
-//     *  The resulting name will in an unresolved state.
-//     */
-//    public MemberName(Class<?> defClass, String name, MethodType type, Void unused) {
-//        this(defClass, name, type, REF_NONE);
-//    }
-
-    /** Query whether this member name is resolved to a non-static, non-final method.
-     */
-    public boolean hasReceiverTypeDispatch() {
-        return MethodHandleNatives.refKindDoesDispatch(getReferenceKind());
-    }
-
-    /** Query whether this member name is resolved.
-     *  A resolved member name is one for which the JVM has found
-     *  a method, constructor, field, or type binding corresponding exactly to the name.
-     *  (Document?)
-     */
-    public boolean isResolved() {
-        return resolution == null;
-    }
-
-    private void initResolved(boolean isResolved) {
-        assert(this.resolution == null);  // not initialized yet!
-        if (!isResolved)
-            this.resolution = this;
-        assert(isResolved() == isResolved);
-    }
-
-    void checkForTypeAlias() {
-        if (isInvocable()) {
-            MethodType type;
-            if (this.type instanceof MethodType)
-                type = (MethodType) this.type;
-            else
-                this.type = type = getMethodType();
-            if (type.erase() == type)  return;
-            if (VerifyAccess.isTypeVisible(type, clazz))  return;
-            throw new LinkageError("bad method type alias: "+type+" not visible from "+clazz);
-        } else {
-            Class<?> type;
-            if (this.type instanceof Class<?>)
-                type = (Class<?>) this.type;
-            else
-                this.type = type = getFieldType();
-            if (VerifyAccess.isTypeVisible(type, clazz))  return;
-            throw new LinkageError("bad field type alias: "+type+" not visible from "+clazz);
-        }
-    }
-
-
-    /** Produce a string form of this member name.
-     *  For types, it is simply the type's own string (as reported by {@code toString}).
-     *  For fields, it is {@code "DeclaringClass.name/type"}.
-     *  For methods and constructors, it is {@code "DeclaringClass.name(ptype...)rtype"}.
-     *  If the declaring class is null, the prefix {@code "DeclaringClass."} is omitted.
-     *  If the member is unresolved, a prefix {@code "*."} is prepended.
-     */
-    @SuppressWarnings("LocalVariableHidesMemberVariable")
-    @Override
-    public String toString() {
-        if (isType())
-            return type.toString();  // class java.lang.String
-        // else it is a field, method, or constructor
-        StringBuilder buf = new StringBuilder();
-        if (getDeclaringClass() != null) {
-            buf.append(getName(clazz));
-            buf.append('.');
-        }
-        String name = getName();
-        buf.append(name == null ? "*" : name);
-        Object type = getType();
-        if (!isInvocable()) {
-            buf.append('/');
-            buf.append(type == null ? "*" : getName(type));
-        } else {
-            buf.append(type == null ? "(*)*" : getName(type));
-        }
-        byte refKind = getReferenceKind();
-        if (refKind != REF_NONE) {
-            buf.append('/');
-            buf.append(MethodHandleNatives.refKindName(refKind));
-        }
-        //buf.append("#").append(System.identityHashCode(this));
-        return buf.toString();
-    }
-    private static String getName(Object obj) {
-        if (obj instanceof Class<?>)
-            return ((Class<?>)obj).getName();
-        return String.valueOf(obj);
-    }
-
-    public IllegalAccessException makeAccessException(String message, Object from) {
-        message = message + ": "+ toString();
-        if (from != null)  message += ", from " + from;
-        return new IllegalAccessException(message);
-    }
-    private String message() {
-        if (isResolved())
-            return "no access";
-        else if (isConstructor())
-            return "no such constructor";
-        else if (isMethod())
-            return "no such method";
-        else
-            return "no such field";
-    }
-    public ReflectiveOperationException makeAccessException() {
-        String message = message() + ": "+ toString();
-        ReflectiveOperationException ex;
-        if (isResolved() || !(resolution instanceof NoSuchMethodError ||
-                              resolution instanceof NoSuchFieldError))
-            ex = new IllegalAccessException(message);
-        else if (isConstructor())
-            ex = new NoSuchMethodException(message);
-        else if (isMethod())
-            ex = new NoSuchMethodException(message);
-        else
-            ex = new NoSuchFieldException(message);
-        if (resolution instanceof Throwable)
-            ex.initCause((Throwable) resolution);
-        return ex;
-    }
-
-    /** Actually making a query requires an access check. */
-    /*non-public*/ static Factory getFactory() {
-        return Factory.INSTANCE;
-    }
-    /** A factory type for resolving member names with the help of the VM.
-     *  TBD: Define access-safe public constructors for this factory.
-     */
-    /*non-public*/ static class Factory {
-        private Factory() { } // singleton pattern
-        static Factory INSTANCE = new Factory();
-
-        private static int ALLOWED_FLAGS = ALL_KINDS;
-
-        /// Queries
-        List<MemberName> getMembers(Class<?> defc,
-                String matchName, Object matchType,
-                int matchFlags, Class<?> lookupClass) {
-            matchFlags &= ALLOWED_FLAGS;
-            String matchSig = null;
-            if (matchType != null) {
-                matchSig = BytecodeDescriptor.unparse(matchType);
-                if (matchSig.startsWith("("))
-                    matchFlags &= ~(ALL_KINDS & ~IS_INVOCABLE);
-                else
-                    matchFlags &= ~(ALL_KINDS & ~IS_FIELD);
-            }
-            final int BUF_MAX = 0x2000;
-            int len1 = matchName == null ? 10 : matchType == null ? 4 : 1;
-            MemberName[] buf = newMemberBuffer(len1);
-            int totalCount = 0;
-            ArrayList<MemberName[]> bufs = null;
-            int bufCount = 0;
-            for (;;) {
-                bufCount = MethodHandleNatives.getMembers(defc,
-                        matchName, matchSig, matchFlags,
-                        lookupClass,
-                        totalCount, buf);
-                if (bufCount <= buf.length) {
-                    if (bufCount < 0)  bufCount = 0;
-                    totalCount += bufCount;
-                    break;
-                }
-                // JVM returned to us with an intentional overflow!
-                totalCount += buf.length;
-                int excess = bufCount - buf.length;
-                if (bufs == null)  bufs = new ArrayList<>(1);
-                bufs.add(buf);
-                int len2 = buf.length;
-                len2 = Math.max(len2, excess);
-                len2 = Math.max(len2, totalCount / 4);
-                buf = newMemberBuffer(Math.min(BUF_MAX, len2));
-            }
-            ArrayList<MemberName> result = new ArrayList<>(totalCount);
-            if (bufs != null) {
-                for (MemberName[] buf0 : bufs) {
-                    Collections.addAll(result, buf0);
-                }
-            }
-            result.addAll(Arrays.asList(buf).subList(0, bufCount));
-            // Signature matching is not the same as type matching, since
-            // one signature might correspond to several types.
-            // So if matchType is a Class or MethodType, refilter the results.
-            if (matchType != null && matchType != matchSig) {
-                for (Iterator<MemberName> it = result.iterator(); it.hasNext();) {
-                    MemberName m = it.next();
-                    if (!matchType.equals(m.getType()))
-                        it.remove();
-                }
-            }
-            return result;
-        }
-        /** Produce a resolved version of the given member.
-         *  Super types are searched (for inherited members) if {@code searchSupers} is true.
-         *  Access checking is performed on behalf of the given {@code lookupClass}.
-         *  If lookup fails or access is not permitted, null is returned.
-         *  Otherwise a fresh copy of the given member is returned, with modifier bits filled in.
-         */
-        private MemberName resolve(byte refKind, MemberName ref, Class<?> lookupClass) {
-            MemberName m = ref.clone();  // JVM will side-effect the ref
-            assert(refKind == m.getReferenceKind());
-            try {
-                m = MethodHandleNatives.resolve(m, lookupClass);
-                m.checkForTypeAlias();
-                m.resolution = null;
-            } catch (LinkageError ex) {
-                // JVM reports that the "bytecode behavior" would get an error
-                assert(!m.isResolved());
-                m.resolution = ex;
-                return m;
-            }
-            assert(m.referenceKindIsConsistent());
-            m.initResolved(true);
-            assert(m.vminfoIsConsistent());
-            return m;
-        }
-        /** Produce a resolved version of the given member.
-         *  Super types are searched (for inherited members) if {@code searchSupers} is true.
-         *  Access checking is performed on behalf of the given {@code lookupClass}.
-         *  If lookup fails or access is not permitted, a {@linkplain ReflectiveOperationException} is thrown.
-         *  Otherwise a fresh copy of the given member is returned, with modifier bits filled in.
-         */
-        public
-        <NoSuchMemberException extends ReflectiveOperationException>
-        MemberName resolveOrFail(byte refKind, MemberName m, Class<?> lookupClass,
-                                 Class<NoSuchMemberException> nsmClass)
-                throws IllegalAccessException, NoSuchMemberException {
-            MemberName result = resolve(refKind, m, lookupClass);
-            if (result.isResolved())
-                return result;
-            ReflectiveOperationException ex = result.makeAccessException();
-            if (ex instanceof IllegalAccessException)  throw (IllegalAccessException) ex;
-            throw nsmClass.cast(ex);
-        }
-        /** Produce a resolved version of the given member.
-         *  Super types are searched (for inherited members) if {@code searchSupers} is true.
-         *  Access checking is performed on behalf of the given {@code lookupClass}.
-         *  If lookup fails or access is not permitted, return null.
-         *  Otherwise a fresh copy of the given member is returned, with modifier bits filled in.
-         */
-        public
-        MemberName resolveOrNull(byte refKind, MemberName m, Class<?> lookupClass) {
-            MemberName result = resolve(refKind, m, lookupClass);
-            if (result.isResolved())
-                return result;
-            return null;
-        }
-        /** Return a list of all methods defined by the given class.
-         *  Super types are searched (for inherited members) if {@code searchSupers} is true.
-         *  Access checking is performed on behalf of the given {@code lookupClass}.
-         *  Inaccessible members are not added to the last.
-         */
-        public List<MemberName> getMethods(Class<?> defc, boolean searchSupers,
-                Class<?> lookupClass) {
-            return getMethods(defc, searchSupers, null, null, lookupClass);
-        }
-        /** Return a list of matching methods defined by the given class.
-         *  Super types are searched (for inherited members) if {@code searchSupers} is true.
-         *  Returned methods will match the name (if not null) and the type (if not null).
-         *  Access checking is performed on behalf of the given {@code lookupClass}.
-         *  Inaccessible members are not added to the last.
-         */
-        public List<MemberName> getMethods(Class<?> defc, boolean searchSupers,
-                String name, MethodType type, Class<?> lookupClass) {
-            int matchFlags = IS_METHOD | (searchSupers ? SEARCH_ALL_SUPERS : 0);
-            return getMembers(defc, name, type, matchFlags, lookupClass);
-        }
-        /** Return a list of all constructors defined by the given class.
-         *  Access checking is performed on behalf of the given {@code lookupClass}.
-         *  Inaccessible members are not added to the last.
-         */
-        public List<MemberName> getConstructors(Class<?> defc, Class<?> lookupClass) {
-            return getMembers(defc, null, null, IS_CONSTRUCTOR, lookupClass);
-        }
-        /** Return a list of all fields defined by the given class.
-         *  Super types are searched (for inherited members) if {@code searchSupers} is true.
-         *  Access checking is performed on behalf of the given {@code lookupClass}.
-         *  Inaccessible members are not added to the last.
-         */
-        public List<MemberName> getFields(Class<?> defc, boolean searchSupers,
-                Class<?> lookupClass) {
-            return getFields(defc, searchSupers, null, null, lookupClass);
-        }
-        /** Return a list of all fields defined by the given class.
-         *  Super types are searched (for inherited members) if {@code searchSupers} is true.
-         *  Returned fields will match the name (if not null) and the type (if not null).
-         *  Access checking is performed on behalf of the given {@code lookupClass}.
-         *  Inaccessible members are not added to the last.
-         */
-        public List<MemberName> getFields(Class<?> defc, boolean searchSupers,
-                String name, Class<?> type, Class<?> lookupClass) {
-            int matchFlags = IS_FIELD | (searchSupers ? SEARCH_ALL_SUPERS : 0);
-            return getMembers(defc, name, type, matchFlags, lookupClass);
-        }
-        /** Return a list of all nested types defined by the given class.
-         *  Super types are searched (for inherited members) if {@code searchSupers} is true.
-         *  Access checking is performed on behalf of the given {@code lookupClass}.
-         *  Inaccessible members are not added to the last.
-         */
-        public List<MemberName> getNestedTypes(Class<?> defc, boolean searchSupers,
-                Class<?> lookupClass) {
-            int matchFlags = IS_TYPE | (searchSupers ? SEARCH_ALL_SUPERS : 0);
-            return getMembers(defc, null, null, matchFlags, lookupClass);
-        }
-        private static MemberName[] newMemberBuffer(int length) {
-            MemberName[] buf = new MemberName[length];
-            // fill the buffer with dummy structs for the JVM to fill in
-            for (int i = 0; i < length; i++)
-                buf[i] = new MemberName();
-            return buf;
-        }
-    }
-
-//    static {
-//        System.out.println("Hello world!  My methods are:");
-//        System.out.println(Factory.INSTANCE.getMethods(MemberName.class, true, null));
-//    }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/MethodHandle.java b/ojluni/src/main/java/java/lang/invoke/MethodHandle.java
deleted file mode 100755
index 2a6b8c1..0000000
--- a/ojluni/src/main/java/java/lang/invoke/MethodHandle.java
+++ /dev/null
@@ -1,1403 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package java.lang.invoke;
-
-
-import java.util.*;
-import sun.invoke.util.*;
-import sun.misc.Unsafe;
-
-import static java.lang.invoke.MethodHandleStatics.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * A method handle is a typed, directly executable reference to an underlying method,
- * constructor, field, or similar low-level operation, with optional
- * transformations of arguments or return values.
- * These transformations are quite general, and include such patterns as
- * {@linkplain #asType conversion},
- * {@linkplain #bindTo insertion},
- * {@linkplain java.lang.invoke.MethodHandles#dropArguments deletion},
- * and {@linkplain java.lang.invoke.MethodHandles#filterArguments substitution}.
- *
- * <h3>Method handle contents</h3>
- * Method handles are dynamically and strongly typed according to their parameter and return types.
- * They are not distinguished by the name or the defining class of their underlying methods.
- * A method handle must be invoked using a symbolic type descriptor which matches
- * the method handle's own {@linkplain #type type descriptor}.
- * <p>
- * Every method handle reports its type descriptor via the {@link #type type} accessor.
- * This type descriptor is a {@link java.lang.invoke.MethodType MethodType} object,
- * whose structure is a series of classes, one of which is
- * the return type of the method (or {@code void.class} if none).
- * <p>
- * A method handle's type controls the types of invocations it accepts,
- * and the kinds of transformations that apply to it.
- * <p>
- * A method handle contains a pair of special invoker methods
- * called {@link #invokeExact invokeExact} and {@link #invoke invoke}.
- * Both invoker methods provide direct access to the method handle's
- * underlying method, constructor, field, or other operation,
- * as modified by transformations of arguments and return values.
- * Both invokers accept calls which exactly match the method handle's own type.
- * The plain, inexact invoker also accepts a range of other call types.
- * <p>
- * Method handles are immutable and have no visible state.
- * Of course, they can be bound to underlying methods or data which exhibit state.
- * With respect to the Java Memory Model, any method handle will behave
- * as if all of its (internal) fields are final variables.  This means that any method
- * handle made visible to the application will always be fully formed.
- * This is true even if the method handle is published through a shared
- * variable in a data race.
- * <p>
- * Method handles cannot be subclassed by the user.
- * Implementations may (or may not) create internal subclasses of {@code MethodHandle}
- * which may be visible via the {@link java.lang.Object#getClass Object.getClass}
- * operation.  The programmer should not draw conclusions about a method handle
- * from its specific class, as the method handle class hierarchy (if any)
- * may change from time to time or across implementations from different vendors.
- *
- * <h3>Method handle compilation</h3>
- * A Java method call expression naming {@code invokeExact} or {@code invoke}
- * can invoke a method handle from Java source code.
- * From the viewpoint of source code, these methods can take any arguments
- * and their result can be cast to any return type.
- * Formally this is accomplished by giving the invoker methods
- * {@code Object} return types and variable arity {@code Object} arguments,
- * but they have an additional quality called <em>signature polymorphism</em>
- * which connects this freedom of invocation directly to the JVM execution stack.
- * <p>
- * As is usual with virtual methods, source-level calls to {@code invokeExact}
- * and {@code invoke} compile to an {@code invokevirtual} instruction.
- * More unusually, the compiler must record the actual argument types,
- * and may not perform method invocation conversions on the arguments.
- * Instead, it must push them on the stack according to their own unconverted types.
- * The method handle object itself is pushed on the stack before the arguments.
- * The compiler then calls the method handle with a symbolic type descriptor which
- * describes the argument and return types.
- * <p>
- * To issue a complete symbolic type descriptor, the compiler must also determine
- * the return type.  This is based on a cast on the method invocation expression,
- * if there is one, or else {@code Object} if the invocation is an expression
- * or else {@code void} if the invocation is a statement.
- * The cast may be to a primitive type (but not {@code void}).
- * <p>
- * As a corner case, an uncasted {@code null} argument is given
- * a symbolic type descriptor of {@code java.lang.Void}.
- * The ambiguity with the type {@code Void} is harmless, since there are no references of type
- * {@code Void} except the null reference.
- *
- * <h3>Method handle invocation</h3>
- * The first time a {@code invokevirtual} instruction is executed
- * it is linked, by symbolically resolving the names in the instruction
- * and verifying that the method call is statically legal.
- * This is true of calls to {@code invokeExact} and {@code invoke}.
- * In this case, the symbolic type descriptor emitted by the compiler is checked for
- * correct syntax and names it contains are resolved.
- * Thus, an {@code invokevirtual} instruction which invokes
- * a method handle will always link, as long
- * as the symbolic type descriptor is syntactically well-formed
- * and the types exist.
- * <p>
- * When the {@code invokevirtual} is executed after linking,
- * the receiving method handle's type is first checked by the JVM
- * to ensure that it matches the symbolic type descriptor.
- * If the type match fails, it means that the method which the
- * caller is invoking is not present on the individual
- * method handle being invoked.
- * <p>
- * In the case of {@code invokeExact}, the type descriptor of the invocation
- * (after resolving symbolic type names) must exactly match the method type
- * of the receiving method handle.
- * In the case of plain, inexact {@code invoke}, the resolved type descriptor
- * must be a valid argument to the receiver's {@link #asType asType} method.
- * Thus, plain {@code invoke} is more permissive than {@code invokeExact}.
- * <p>
- * After type matching, a call to {@code invokeExact} directly
- * and immediately invoke the method handle's underlying method
- * (or other behavior, as the case may be).
- * <p>
- * A call to plain {@code invoke} works the same as a call to
- * {@code invokeExact}, if the symbolic type descriptor specified by the caller
- * exactly matches the method handle's own type.
- * If there is a type mismatch, {@code invoke} attempts
- * to adjust the type of the receiving method handle,
- * as if by a call to {@link #asType asType},
- * to obtain an exactly invokable method handle {@code M2}.
- * This allows a more powerful negotiation of method type
- * between caller and callee.
- * <p>
- * (<em>Note:</em> The adjusted method handle {@code M2} is not directly observable,
- * and implementations are therefore not required to materialize it.)
- *
- * <h3>Invocation checking</h3>
- * In typical programs, method handle type matching will usually succeed.
- * But if a match fails, the JVM will throw a {@link WrongMethodTypeException},
- * either directly (in the case of {@code invokeExact}) or indirectly as if
- * by a failed call to {@code asType} (in the case of {@code invoke}).
- * <p>
- * Thus, a method type mismatch which might show up as a linkage error
- * in a statically typed program can show up as
- * a dynamic {@code WrongMethodTypeException}
- * in a program which uses method handles.
- * <p>
- * Because method types contain "live" {@code Class} objects,
- * method type matching takes into account both types names and class loaders.
- * Thus, even if a method handle {@code M} is created in one
- * class loader {@code L1} and used in another {@code L2},
- * method handle calls are type-safe, because the caller's symbolic type
- * descriptor, as resolved in {@code L2},
- * is matched against the original callee method's symbolic type descriptor,
- * as resolved in {@code L1}.
- * The resolution in {@code L1} happens when {@code M} is created
- * and its type is assigned, while the resolution in {@code L2} happens
- * when the {@code invokevirtual} instruction is linked.
- * <p>
- * Apart from the checking of type descriptors,
- * a method handle's capability to call its underlying method is unrestricted.
- * If a method handle is formed on a non-public method by a class
- * that has access to that method, the resulting handle can be used
- * in any place by any caller who receives a reference to it.
- * <p>
- * Unlike with the Core Reflection API, where access is checked every time
- * a reflective method is invoked,
- * method handle access checking is performed
- * <a href="MethodHandles.Lookup.html#access">when the method handle is created</a>.
- * In the case of {@code ldc} (see below), access checking is performed as part of linking
- * the constant pool entry underlying the constant method handle.
- * <p>
- * Thus, handles to non-public methods, or to methods in non-public classes,
- * should generally be kept secret.
- * They should not be passed to untrusted code unless their use from
- * the untrusted code would be harmless.
- *
- * <h3>Method handle creation</h3>
- * Java code can create a method handle that directly accesses
- * any method, constructor, or field that is accessible to that code.
- * This is done via a reflective, capability-based API called
- * {@link java.lang.invoke.MethodHandles.Lookup MethodHandles.Lookup}
- * For example, a static method handle can be obtained
- * from {@link java.lang.invoke.MethodHandles.Lookup#findStatic Lookup.findStatic}.
- * There are also conversion methods from Core Reflection API objects,
- * such as {@link java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect}.
- * <p>
- * Like classes and strings, method handles that correspond to accessible
- * fields, methods, and constructors can also be represented directly
- * in a class file's constant pool as constants to be loaded by {@code ldc} bytecodes.
- * A new type of constant pool entry, {@code CONSTANT_MethodHandle},
- * refers directly to an associated {@code CONSTANT_Methodref},
- * {@code CONSTANT_InterfaceMethodref}, or {@code CONSTANT_Fieldref}
- * constant pool entry.
- * (For full details on method handle constants,
- * see sections 4.4.8 and 5.4.3.5 of the Java Virtual Machine Specification.)
- * <p>
- * Method handles produced by lookups or constant loads from methods or
- * constructors with the variable arity modifier bit ({@code 0x0080})
- * have a corresponding variable arity, as if they were defined with
- * the help of {@link #asVarargsCollector asVarargsCollector}.
- * <p>
- * A method reference may refer either to a static or non-static method.
- * In the non-static case, the method handle type includes an explicit
- * receiver argument, prepended before any other arguments.
- * In the method handle's type, the initial receiver argument is typed
- * according to the class under which the method was initially requested.
- * (E.g., if a non-static method handle is obtained via {@code ldc},
- * the type of the receiver is the class named in the constant pool entry.)
- * <p>
- * Method handle constants are subject to the same link-time access checks
- * their corresponding bytecode instructions, and the {@code ldc} instruction
- * will throw corresponding linkage errors if the bytecode behaviors would
- * throw such errors.
- * <p>
- * As a corollary of this, access to protected members is restricted
- * to receivers only of the accessing class, or one of its subclasses,
- * and the accessing class must in turn be a subclass (or package sibling)
- * of the protected member's defining class.
- * If a method reference refers to a protected non-static method or field
- * of a class outside the current package, the receiver argument will
- * be narrowed to the type of the accessing class.
- * <p>
- * When a method handle to a virtual method is invoked, the method is
- * always looked up in the receiver (that is, the first argument).
- * <p>
- * A non-virtual method handle to a specific virtual method implementation
- * can also be created.  These do not perform virtual lookup based on
- * receiver type.  Such a method handle simulates the effect of
- * an {@code invokespecial} instruction to the same method.
- *
- * <h3>Usage examples</h3>
- * Here are some examples of usage:
- * <p><blockquote><pre>
-Object x, y; String s; int i;
-MethodType mt; MethodHandle mh;
-MethodHandles.Lookup lookup = MethodHandles.lookup();
-// mt is (char,char)String
-mt = MethodType.methodType(String.class, char.class, char.class);
-mh = lookup.findVirtual(String.class, "replace", mt);
-s = (String) mh.invokeExact("daddy",'d','n');
-// invokeExact(Ljava/lang/String;CC)Ljava/lang/String;
-assertEquals(s, "nanny");
-// weakly typed invocation (using MHs.invoke)
-s = (String) mh.invokeWithArguments("sappy", 'p', 'v');
-assertEquals(s, "savvy");
-// mt is (Object[])List
-mt = MethodType.methodType(java.util.List.class, Object[].class);
-mh = lookup.findStatic(java.util.Arrays.class, "asList", mt);
-assert(mh.isVarargsCollector());
-x = mh.invoke("one", "two");
-// invoke(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
-assertEquals(x, java.util.Arrays.asList("one","two"));
-// mt is (Object,Object,Object)Object
-mt = MethodType.genericMethodType(3);
-mh = mh.asType(mt);
-x = mh.invokeExact((Object)1, (Object)2, (Object)3);
-// invokeExact(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-assertEquals(x, java.util.Arrays.asList(1,2,3));
-// mt is ()int
-mt = MethodType.methodType(int.class);
-mh = lookup.findVirtual(java.util.List.class, "size", mt);
-i = (int) mh.invokeExact(java.util.Arrays.asList(1,2,3));
-// invokeExact(Ljava/util/List;)I
-assert(i == 3);
-mt = MethodType.methodType(void.class, String.class);
-mh = lookup.findVirtual(java.io.PrintStream.class, "println", mt);
-mh.invokeExact(System.out, "Hello, world.");
-// invokeExact(Ljava/io/PrintStream;Ljava/lang/String;)V
- * </pre></blockquote>
- * Each of the above calls to {@code invokeExact} or plain {@code invoke}
- * generates a single invokevirtual instruction with
- * the symbolic type descriptor indicated in the following comment.
- * In these examples, the helper method {@code assertEquals} is assumed to
- * be a method which calls {@link java.util.Objects#equals(Object,Object) Objects.equals }
- * on its arguments, and asserts that the result is true.
- *
- * <h3>Exceptions</h3>
- * The methods {@code invokeExact} and {@code invoke} are declared
- * to throw {@link java.lang.Throwable Throwable},
- * which is to say that there is no static restriction on what a method handle
- * can throw.  Since the JVM does not distinguish between checked
- * and unchecked exceptions (other than by their class, of course),
- * there is no particular effect on bytecode shape from ascribing
- * checked exceptions to method handle invocations.  But in Java source
- * code, methods which perform method handle calls must either explicitly
- * throw {@code Throwable}, or else must catch all
- * throwables locally, rethrowing only those which are legal in the context,
- * and wrapping ones which are illegal.
- *
- * <h3><a name="sigpoly"></a>Signature polymorphism</h3>
- * The unusual compilation and linkage behavior of
- * {@code invokeExact} and plain {@code invoke}
- * is referenced by the term <em>signature polymorphism</em>.
- * As defined in the Java Language Specification,
- * a signature polymorphic method is one which can operate with
- * any of a wide range of call signatures and return types.
- * <p>
- * In source code, a call to a signature polymorphic method will
- * compile, regardless of the requested symbolic type descriptor.
- * As usual, the Java compiler emits an {@code invokevirtual}
- * instruction with the given symbolic type descriptor against the named method.
- * The unusual part is that the symbolic type descriptor is derived from
- * the actual argument and return types, not from the method declaration.
- * <p>
- * When the JVM processes bytecode containing signature polymorphic calls,
- * it will successfully link any such call, regardless of its symbolic type descriptor.
- * (In order to retain type safety, the JVM will guard such calls with suitable
- * dynamic type checks, as described elsewhere.)
- * <p>
- * Bytecode generators, including the compiler back end, are required to emit
- * untransformed symbolic type descriptors for these methods.
- * Tools which determine symbolic linkage are required to accept such
- * untransformed descriptors, without reporting linkage errors.
- *
- * <h3>Interoperation between method handles and the Core Reflection API</h3>
- * Using factory methods in the {@link java.lang.invoke.MethodHandles.Lookup Lookup} API,
- * any class member represented by a Core Reflection API object
- * can be converted to a behaviorally equivalent method handle.
- * For example, a reflective {@link java.lang.reflect.Method Method} can
- * be converted to a method handle using
- * {@link java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect}.
- * The resulting method handles generally provide more direct and efficient
- * access to the underlying class members.
- * <p>
- * As a special case,
- * when the Core Reflection API is used to view the signature polymorphic
- * methods {@code invokeExact} or plain {@code invoke} in this class,
- * they appear as ordinary non-polymorphic methods.
- * Their reflective appearance, as viewed by
- * {@link java.lang.Class#getDeclaredMethod Class.getDeclaredMethod},
- * is unaffected by their special status in this API.
- * For example, {@link java.lang.reflect.Method#getModifiers Method.getModifiers}
- * will report exactly those modifier bits required for any similarly
- * declared method, including in this case {@code native} and {@code varargs} bits.
- * <p>
- * As with any reflected method, these methods (when reflected) may be
- * invoked via {@link java.lang.reflect.Method#invoke java.lang.reflect.Method.invoke}.
- * However, such reflective calls do not result in method handle invocations.
- * Such a call, if passed the required argument
- * (a single one, of type {@code Object[]}), will ignore the argument and
- * will throw an {@code UnsupportedOperationException}.
- * <p>
- * Since {@code invokevirtual} instructions can natively
- * invoke method handles under any symbolic type descriptor, this reflective view conflicts
- * with the normal presentation of these methods via bytecodes.
- * Thus, these two native methods, when reflectively viewed by
- * {@code Class.getDeclaredMethod}, may be regarded as placeholders only.
- * <p>
- * In order to obtain an invoker method for a particular type descriptor,
- * use {@link java.lang.invoke.MethodHandles#exactInvoker MethodHandles.exactInvoker},
- * or {@link java.lang.invoke.MethodHandles#invoker MethodHandles.invoker}.
- * The {@link java.lang.invoke.MethodHandles.Lookup#findVirtual Lookup.findVirtual}
- * API is also able to return a method handle
- * to call {@code invokeExact} or plain {@code invoke},
- * for any specified type descriptor .
- *
- * <h3>Interoperation between method handles and Java generics</h3>
- * A method handle can be obtained on a method, constructor, or field
- * which is declared with Java generic types.
- * As with the Core Reflection API, the type of the method handle
- * will constructed from the erasure of the source-level type.
- * When a method handle is invoked, the types of its arguments
- * or the return value cast type may be generic types or type instances.
- * If this occurs, the compiler will replace those
- * types by their erasures when it constructs the symbolic type descriptor
- * for the {@code invokevirtual} instruction.
- * <p>
- * Method handles do not represent
- * their function-like types in terms of Java parameterized (generic) types,
- * because there are three mismatches between function-like types and parameterized
- * Java types.
- * <ul>
- * <li>Method types range over all possible arities,
- * from no arguments to up to 255 of arguments (a limit imposed by the JVM).
- * Generics are not variadic, and so cannot represent this.</li>
- * <li>Method types can specify arguments of primitive types,
- * which Java generic types cannot range over.</li>
- * <li>Higher order functions over method handles (combinators) are
- * often generic across a wide range of function types, including
- * those of multiple arities.  It is impossible to represent such
- * genericity with a Java type parameter.</li>
- * </ul>
- *
- * @see MethodType
- * @see MethodHandles
- * @author John Rose, JSR 292 EG
- */
-public abstract class MethodHandle {
-    static { MethodHandleImpl.initStatics(); }
-
-    /**
-     * Internal marker interface which distinguishes (to the Java compiler)
-     * those methods which are <a href="MethodHandle.html#sigpoly">signature polymorphic</a>.
-     */
-    @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD})
-    @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
-    @interface PolymorphicSignature { }
-
-    private final MethodType type;
-    /*private*/ final LambdaForm form;
-    // form is not private so that invokers can easily fetch it
-
-    /**
-     * Reports the type of this method handle.
-     * Every invocation of this method handle via {@code invokeExact} must exactly match this type.
-     * @return the method handle type
-     */
-    public MethodType type() {
-        return type;
-    }
-
-    /**
-     * Package-private constructor for the method handle implementation hierarchy.
-     * Method handle inheritance will be contained completely within
-     * the {@code java.lang.invoke} package.
-     */
-    // @param type type (permanently assigned) of the new method handle
-    /*non-public*/ MethodHandle(MethodType type, LambdaForm form) {
-        type.getClass();  // explicit NPE
-        form.getClass();  // explicit NPE
-        this.type = type;
-        this.form = form;
-
-        form.prepare();  // TO DO:  Try to delay this step until just before invocation.
-    }
-
-    /**
-     * Invokes the method handle, allowing any caller type descriptor, but requiring an exact type match.
-     * The symbolic type descriptor at the call site of {@code invokeExact} must
-     * exactly match this method handle's {@link #type type}.
-     * No conversions are allowed on arguments or return values.
-     * <p>
-     * When this method is observed via the Core Reflection API,
-     * it will appear as a single native method, taking an object array and returning an object.
-     * If this native method is invoked directly via
-     * {@link java.lang.reflect.Method#invoke java.lang.reflect.Method.invoke}, via JNI,
-     * or indirectly via {@link java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect},
-     * it will throw an {@code UnsupportedOperationException}.
-     * @throws WrongMethodTypeException if the target's type is not identical with the caller's symbolic type descriptor
-     * @throws Throwable anything thrown by the underlying method propagates unchanged through the method handle call
-     */
-    public final native @PolymorphicSignature Object invokeExact(Object... args) throws Throwable;
-
-    /**
-     * Invokes the method handle, allowing any caller type descriptor,
-     * and optionally performing conversions on arguments and return values.
-     * <p>
-     * If the call site's symbolic type descriptor exactly matches this method handle's {@link #type type},
-     * the call proceeds as if by {@link #invokeExact invokeExact}.
-     * <p>
-     * Otherwise, the call proceeds as if this method handle were first
-     * adjusted by calling {@link #asType asType} to adjust this method handle
-     * to the required type, and then the call proceeds as if by
-     * {@link #invokeExact invokeExact} on the adjusted method handle.
-     * <p>
-     * There is no guarantee that the {@code asType} call is actually made.
-     * If the JVM can predict the results of making the call, it may perform
-     * adaptations directly on the caller's arguments,
-     * and call the target method handle according to its own exact type.
-     * <p>
-     * The resolved type descriptor at the call site of {@code invoke} must
-     * be a valid argument to the receivers {@code asType} method.
-     * In particular, the caller must specify the same argument arity
-     * as the callee's type,
-     * if the callee is not a {@linkplain #asVarargsCollector variable arity collector}.
-     * <p>
-     * When this method is observed via the Core Reflection API,
-     * it will appear as a single native method, taking an object array and returning an object.
-     * If this native method is invoked directly via
-     * {@link java.lang.reflect.Method#invoke java.lang.reflect.Method.invoke}, via JNI,
-     * or indirectly via {@link java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect},
-     * it will throw an {@code UnsupportedOperationException}.
-     * @throws WrongMethodTypeException if the target's type cannot be adjusted to the caller's symbolic type descriptor
-     * @throws ClassCastException if the target's type can be adjusted to the caller, but a reference cast fails
-     * @throws Throwable anything thrown by the underlying method propagates unchanged through the method handle call
-     */
-    public final native @PolymorphicSignature Object invoke(Object... args) throws Throwable;
-
-    /**
-     * Private method for trusted invocation of a method handle respecting simplified signatures.
-     * Type mismatches will not throw {@code WrongMethodTypeException}, but could crash the JVM.
-     * <p>
-     * The caller signature is restricted to the following basic types:
-     * Object, int, long, float, double, and void return.
-     * <p>
-     * The caller is responsible for maintaining type correctness by ensuring
-     * that the each outgoing argument value is a member of the range of the corresponding
-     * callee argument type.
-     * (The caller should therefore issue appropriate casts and integer narrowing
-     * operations on outgoing argument values.)
-     * The caller can assume that the incoming result value is part of the range
-     * of the callee's return type.
-     */
-    /*non-public*/ final native @PolymorphicSignature Object invokeBasic(Object... args) throws Throwable;
-
-    /*non-public*/ static native @PolymorphicSignature Object linkToVirtual(Object... args) throws Throwable;
-
-    /**
-     * Private method for trusted invocation of a MemberName of kind {@code REF_invokeStatic}.
-     * The caller signature is restricted to basic types as with {@code invokeBasic}.
-     * The trailing (not leading) argument must be a MemberName.
-     */
-    /*non-public*/ static native @PolymorphicSignature Object linkToStatic(Object... args) throws Throwable;
-
-    /**
-     * Private method for trusted invocation of a MemberName of kind {@code REF_invokeSpecial}.
-     * The caller signature is restricted to basic types as with {@code invokeBasic}.
-     * The trailing (not leading) argument must be a MemberName.
-     */
-    /*non-public*/ static native @PolymorphicSignature Object linkToSpecial(Object... args) throws Throwable;
-
-    /**
-     * Private method for trusted invocation of a MemberName of kind {@code REF_invokeInterface}.
-     * The caller signature is restricted to basic types as with {@code invokeBasic}.
-     * The trailing (not leading) argument must be a MemberName.
-     */
-    /*non-public*/ static native @PolymorphicSignature Object linkToInterface(Object... args) throws Throwable;
-
-    /**
-     * Performs a variable arity invocation, passing the arguments in the given array
-     * to the method handle, as if via an inexact {@link #invoke invoke} from a call site
-     * which mentions only the type {@code Object}, and whose arity is the length
-     * of the argument array.
-     * <p>
-     * Specifically, execution proceeds as if by the following steps,
-     * although the methods are not guaranteed to be called if the JVM
-     * can predict their effects.
-     * <ul>
-     * <li>Determine the length of the argument array as {@code N}.
-     *     For a null reference, {@code N=0}. </li>
-     * <li>Determine the general type {@code TN} of {@code N} arguments as
-     *     as {@code TN=MethodType.genericMethodType(N)}.</li>
-     * <li>Force the original target method handle {@code MH0} to the
-     *     required type, as {@code MH1 = MH0.asType(TN)}. </li>
-     * <li>Spread the array into {@code N} separate arguments {@code A0, ...}. </li>
-     * <li>Invoke the type-adjusted method handle on the unpacked arguments:
-     *     MH1.invokeExact(A0, ...). </li>
-     * <li>Take the return value as an {@code Object} reference. </li>
-     * </ul>
-     * <p>
-     * Because of the action of the {@code asType} step, the following argument
-     * conversions are applied as necessary:
-     * <ul>
-     * <li>reference casting
-     * <li>unboxing
-     * <li>widening primitive conversions
-     * </ul>
-     * <p>
-     * The result returned by the call is boxed if it is a primitive,
-     * or forced to null if the return type is void.
-     * <p>
-     * This call is equivalent to the following code:
-     * <p><blockquote><pre>
-     * MethodHandle invoker = MethodHandles.spreadInvoker(this.type(), 0);
-     * Object result = invoker.invokeExact(this, arguments);
-     * </pre></blockquote>
-     * <p>
-     * Unlike the signature polymorphic methods {@code invokeExact} and {@code invoke},
-     * {@code invokeWithArguments} can be accessed normally via the Core Reflection API and JNI.
-     * It can therefore be used as a bridge between native or reflective code and method handles.
-     *
-     * @param arguments the arguments to pass to the target
-     * @return the result returned by the target
-     * @throws ClassCastException if an argument cannot be converted by reference casting
-     * @throws WrongMethodTypeException if the target's type cannot be adjusted to take the given number of {@code Object} arguments
-     * @throws Throwable anything thrown by the target method invocation
-     * @see MethodHandles#spreadInvoker
-     */
-    public Object invokeWithArguments(Object... arguments) throws Throwable {
-        int argc = arguments == null ? 0 : arguments.length;
-        @SuppressWarnings("LocalVariableHidesMemberVariable")
-        MethodType type = type();
-        if (type.parameterCount() != argc || isVarargsCollector()) {
-            // simulate invoke
-            return asType(MethodType.genericMethodType(argc)).invokeWithArguments(arguments);
-        }
-        MethodHandle invoker = type.invokers().varargsInvoker();
-        return invoker.invokeExact(this, arguments);
-    }
-
-    /**
-     * Performs a variable arity invocation, passing the arguments in the given array
-     * to the method handle, as if via an inexact {@link #invoke invoke} from a call site
-     * which mentions only the type {@code Object}, and whose arity is the length
-     * of the argument array.
-     * <p>
-     * This method is also equivalent to the following code:
-     * <p><blockquote><pre>
-     * {@link #invokeWithArguments(Object...) invokeWithArguments}(arguments.toArray())
-     * </pre></blockquote>
-     *
-     * @param arguments the arguments to pass to the target
-     * @return the result returned by the target
-     * @throws NullPointerException if {@code arguments} is a null reference
-     * @throws ClassCastException if an argument cannot be converted by reference casting
-     * @throws WrongMethodTypeException if the target's type cannot be adjusted to take the given number of {@code Object} arguments
-     * @throws Throwable anything thrown by the target method invocation
-     */
-    public Object invokeWithArguments(java.util.List<?> arguments) throws Throwable {
-        return invokeWithArguments(arguments.toArray());
-    }
-
-    /**
-     * Produces an adapter method handle which adapts the type of the
-     * current method handle to a new type.
-     * The resulting method handle is guaranteed to report a type
-     * which is equal to the desired new type.
-     * <p>
-     * If the original type and new type are equal, returns {@code this}.
-     * <p>
-     * The new method handle, when invoked, will perform the following
-     * steps:
-     * <ul>
-     * <li>Convert the incoming argument list to match the original
-     *     method handle's argument list.
-     * <li>Invoke the original method handle on the converted argument list.
-     * <li>Convert any result returned by the original method handle
-     *     to the return type of new method handle.
-     * </ul>
-     * <p>
-     * This method provides the crucial behavioral difference between
-     * {@link #invokeExact invokeExact} and plain, inexact {@link #invoke invoke}.
-     * The two methods
-     * perform the same steps when the caller's type descriptor exactly m atches
-     * the callee's, but when the types differ, plain {@link #invoke invoke}
-     * also calls {@code asType} (or some internal equivalent) in order
-     * to match up the caller's and callee's types.
-     * <p>
-     * If the current method is a variable arity method handle
-     * argument list conversion may involve the conversion and collection
-     * of several arguments into an array, as
-     * {@linkplain #asVarargsCollector described elsewhere}.
-     * In every other case, all conversions are applied <em>pairwise</em>,
-     * which means that each argument or return value is converted to
-     * exactly one argument or return value (or no return value).
-     * The applied conversions are defined by consulting the
-     * the corresponding component types of the old and new
-     * method handle types.
-     * <p>
-     * Let <em>T0</em> and <em>T1</em> be corresponding new and old parameter types,
-     * or old and new return types.  Specifically, for some valid index {@code i}, let
-     * <em>T0</em>{@code =newType.parameterType(i)} and <em>T1</em>{@code =this.type().parameterType(i)}.
-     * Or else, going the other way for return values, let
-     * <em>T0</em>{@code =this.type().returnType()} and <em>T1</em>{@code =newType.returnType()}.
-     * If the types are the same, the new method handle makes no change
-     * to the corresponding argument or return value (if any).
-     * Otherwise, one of the following conversions is applied
-     * if possible:
-     * <ul>
-     * <li>If <em>T0</em> and <em>T1</em> are references, then a cast to <em>T1</em> is applied.
-     *     (The types do not need to be related in any particular way.
-     *     This is because a dynamic value of null can convert to any reference type.)
-     * <li>If <em>T0</em> and <em>T1</em> are primitives, then a Java method invocation
-     *     conversion (JLS 5.3) is applied, if one exists.
-     *     (Specifically, <em>T0</em> must convert to <em>T1</em> by a widening primitive conversion.)
-     * <li>If <em>T0</em> is a primitive and <em>T1</em> a reference,
-     *     a Java casting conversion (JLS 5.5) is applied if one exists.
-     *     (Specifically, the value is boxed from <em>T0</em> to its wrapper class,
-     *     which is then widened as needed to <em>T1</em>.)
-     * <li>If <em>T0</em> is a reference and <em>T1</em> a primitive, an unboxing
-     *     conversion will be applied at runtime, possibly followed
-     *     by a Java method invocation conversion (JLS 5.3)
-     *     on the primitive value.  (These are the primitive widening conversions.)
-     *     <em>T0</em> must be a wrapper class or a supertype of one.
-     *     (In the case where <em>T0</em> is Object, these are the conversions
-     *     allowed by {@link java.lang.reflect.Method#invoke java.lang.reflect.Method.invoke}.)
-     *     The unboxing conversion must have a possibility of success, which means that
-     *     if <em>T0</em> is not itself a wrapper class, there must exist at least one
-     *     wrapper class <em>TW</em> which is a subtype of <em>T0</em> and whose unboxed
-     *     primitive value can be widened to <em>T1</em>.
-     * <li>If the return type <em>T1</em> is marked as void, any returned value is discarded
-     * <li>If the return type <em>T0</em> is void and <em>T1</em> a reference, a null value is introduced.
-     * <li>If the return type <em>T0</em> is void and <em>T1</em> a primitive,
-     *     a zero value is introduced.
-     * </ul>
-    * (<em>Note:</em> Both <em>T0</em> and <em>T1</em> may be regarded as static types,
-     * because neither corresponds specifically to the <em>dynamic type</em> of any
-     * actual argument or return value.)
-     * <p>
-     * The method handle conversion cannot be made if any one of the required
-     * pairwise conversions cannot be made.
-     * <p>
-     * At runtime, the conversions applied to reference arguments
-     * or return values may require additional runtime checks which can fail.
-     * An unboxing operation may fail because the original reference is null,
-     * causing a {@link java.lang.NullPointerException NullPointerException}.
-     * An unboxing operation or a reference cast may also fail on a reference
-     * to an object of the wrong type,
-     * causing a {@link java.lang.ClassCastException ClassCastException}.
-     * Although an unboxing operation may accept several kinds of wrappers,
-     * if none are available, a {@code ClassCastException} will be thrown.
-     *
-     * @param newType the expected type of the new method handle
-     * @return a method handle which delegates to {@code this} after performing
-     *           any necessary argument conversions, and arranges for any
-     *           necessary return value conversions
-     * @throws NullPointerException if {@code newType} is a null reference
-     * @throws WrongMethodTypeException if the conversion cannot be made
-     * @see MethodHandles#explicitCastArguments
-     */
-    public MethodHandle asType(MethodType newType) {
-        if (!type.isConvertibleTo(newType)) {
-            throw new WrongMethodTypeException("cannot convert "+this+" to "+newType);
-        }
-        return convertArguments(newType);
-    }
-
-    /**
-     * Makes an <em>array-spreading</em> method handle, which accepts a trailing array argument
-     * and spreads its elements as positional arguments.
-     * The new method handle adapts, as its <i>target</i>,
-     * the current method handle.  The type of the adapter will be
-     * the same as the type of the target, except that the final
-     * {@code arrayLength} parameters of the target's type are replaced
-     * by a single array parameter of type {@code arrayType}.
-     * <p>
-     * If the array element type differs from any of the corresponding
-     * argument types on the original target,
-     * the original target is adapted to take the array elements directly,
-     * as if by a call to {@link #asType asType}.
-     * <p>
-     * When called, the adapter replaces a trailing array argument
-     * by the array's elements, each as its own argument to the target.
-     * (The order of the arguments is preserved.)
-     * They are converted pairwise by casting and/or unboxing
-     * to the types of the trailing parameters of the target.
-     * Finally the target is called.
-     * What the target eventually returns is returned unchanged by the adapter.
-     * <p>
-     * Before calling the target, the adapter verifies that the array
-     * contains exactly enough elements to provide a correct argument count
-     * to the target method handle.
-     * (The array may also be null when zero elements are required.)
-     * <p>
-     * Here are some simple examples of array-spreading method handles:
-     * <blockquote><pre>
-MethodHandle equals = publicLookup()
-  .findVirtual(String.class, "equals", methodType(boolean.class, Object.class));
-assert( (boolean) equals.invokeExact("me", (Object)"me"));
-assert(!(boolean) equals.invokeExact("me", (Object)"thee"));
-// spread both arguments from a 2-array:
-MethodHandle eq2 = equals.asSpreader(Object[].class, 2);
-assert( (boolean) eq2.invokeExact(new Object[]{ "me", "me" }));
-assert(!(boolean) eq2.invokeExact(new Object[]{ "me", "thee" }));
-// spread both arguments from a String array:
-MethodHandle eq2s = equals.asSpreader(String[].class, 2);
-assert( (boolean) eq2s.invokeExact(new String[]{ "me", "me" }));
-assert(!(boolean) eq2s.invokeExact(new String[]{ "me", "thee" }));
-// spread second arguments from a 1-array:
-MethodHandle eq1 = equals.asSpreader(Object[].class, 1);
-assert( (boolean) eq1.invokeExact("me", new Object[]{ "me" }));
-assert(!(boolean) eq1.invokeExact("me", new Object[]{ "thee" }));
-// spread no arguments from a 0-array or null:
-MethodHandle eq0 = equals.asSpreader(Object[].class, 0);
-assert( (boolean) eq0.invokeExact("me", (Object)"me", new Object[0]));
-assert(!(boolean) eq0.invokeExact("me", (Object)"thee", (Object[])null));
-// asSpreader and asCollector are approximate inverses:
-for (int n = 0; n <= 2; n++) {
-    for (Class<?> a : new Class<?>[]{Object[].class, String[].class, CharSequence[].class}) {
-        MethodHandle equals2 = equals.asSpreader(a, n).asCollector(a, n);
-        assert( (boolean) equals2.invokeWithArguments("me", "me"));
-        assert(!(boolean) equals2.invokeWithArguments("me", "thee"));
-    }
-}
-MethodHandle caToString = publicLookup()
-  .findStatic(Arrays.class, "toString", methodType(String.class, char[].class));
-assertEquals("[A, B, C]", (String) caToString.invokeExact("ABC".toCharArray()));
-MethodHandle caString3 = caToString.asCollector(char[].class, 3);
-assertEquals("[A, B, C]", (String) caString3.invokeExact('A', 'B', 'C'));
-MethodHandle caToString2 = caString3.asSpreader(char[].class, 2);
-assertEquals("[A, B, C]", (String) caToString2.invokeExact('A', "BC".toCharArray()));
-     * </pre></blockquote>
-     * @param arrayType usually {@code Object[]}, the type of the array argument from which to extract the spread arguments
-     * @param arrayLength the number of arguments to spread from an incoming array argument
-     * @return a new method handle which spreads its final array argument,
-     *         before calling the original method handle
-     * @throws NullPointerException if {@code arrayType} is a null reference
-     * @throws IllegalArgumentException if {@code arrayType} is not an array type
-     * @throws IllegalArgumentException if target does not have at least
-     *         {@code arrayLength} parameter types,
-     *         or if {@code arrayLength} is negative
-     * @throws WrongMethodTypeException if the implied {@code asType} call fails
-     * @see #asCollector
-     */
-    public MethodHandle asSpreader(Class<?> arrayType, int arrayLength) {
-        asSpreaderChecks(arrayType, arrayLength);
-        int spreadArgPos = type.parameterCount() - arrayLength;
-        return MethodHandleImpl.makeSpreadArguments(this, arrayType, spreadArgPos, arrayLength);
-    }
-
-    private void asSpreaderChecks(Class<?> arrayType, int arrayLength) {
-        spreadArrayChecks(arrayType, arrayLength);
-        int nargs = type().parameterCount();
-        if (nargs < arrayLength || arrayLength < 0)
-            throw newIllegalArgumentException("bad spread array length");
-        if (arrayType != Object[].class && arrayLength != 0) {
-            boolean sawProblem = false;
-            Class<?> arrayElement = arrayType.getComponentType();
-            for (int i = nargs - arrayLength; i < nargs; i++) {
-                if (!MethodType.canConvert(arrayElement, type().parameterType(i))) {
-                    sawProblem = true;
-                    break;
-                }
-            }
-            if (sawProblem) {
-                ArrayList<Class<?>> ptypes = new ArrayList<>(type().parameterList());
-                for (int i = nargs - arrayLength; i < nargs; i++) {
-                    ptypes.set(i, arrayElement);
-                }
-                // elicit an error:
-                this.asType(MethodType.methodType(type().returnType(), ptypes));
-            }
-        }
-    }
-
-    private void spreadArrayChecks(Class<?> arrayType, int arrayLength) {
-        Class<?> arrayElement = arrayType.getComponentType();
-        if (arrayElement == null)
-            throw newIllegalArgumentException("not an array type", arrayType);
-        if ((arrayLength & 0x7F) != arrayLength) {
-            if ((arrayLength & 0xFF) != arrayLength)
-                throw newIllegalArgumentException("array length is not legal", arrayLength);
-            assert(arrayLength >= 128);
-            if (arrayElement == long.class ||
-                arrayElement == double.class)
-                throw newIllegalArgumentException("array length is not legal for long[] or double[]", arrayLength);
-        }
-    }
-
-    /**
-     * Makes an <em>array-collecting</em> method handle, which accepts a given number of trailing
-     * positional arguments and collects them into an array argument.
-     * The new method handle adapts, as its <i>target</i>,
-     * the current method handle.  The type of the adapter will be
-     * the same as the type of the target, except that a single trailing
-     * parameter (usually of type {@code arrayType}) is replaced by
-     * {@code arrayLength} parameters whose type is element type of {@code arrayType}.
-     * <p>
-     * If the array type differs from the final argument type on the original target,
-     * the original target is adapted to take the array type directly,
-     * as if by a call to {@link #asType asType}.
-     * <p>
-     * When called, the adapter replaces its trailing {@code arrayLength}
-     * arguments by a single new array of type {@code arrayType}, whose elements
-     * comprise (in order) the replaced arguments.
-     * Finally the target is called.
-     * What the target eventually returns is returned unchanged by the adapter.
-     * <p>
-     * (The array may also be a shared constant when {@code arrayLength} is zero.)
-     * <p>
-     * (<em>Note:</em> The {@code arrayType} is often identical to the last
-     * parameter type of the original target.
-     * It is an explicit argument for symmetry with {@code asSpreader}, and also
-     * to allow the target to use a simple {@code Object} as its last parameter type.)
-     * <p>
-     * In order to create a collecting adapter which is not restricted to a particular
-     * number of collected arguments, use {@link #asVarargsCollector asVarargsCollector} instead.
-     * <p>
-     * Here are some examples of array-collecting method handles:
-     * <blockquote><pre>
-MethodHandle deepToString = publicLookup()
-  .findStatic(Arrays.class, "deepToString", methodType(String.class, Object[].class));
-assertEquals("[won]",   (String) deepToString.invokeExact(new Object[]{"won"}));
-MethodHandle ts1 = deepToString.asCollector(Object[].class, 1);
-assertEquals(methodType(String.class, Object.class), ts1.type());
-//assertEquals("[won]", (String) ts1.invokeExact(         new Object[]{"won"})); //FAIL
-assertEquals("[[won]]", (String) ts1.invokeExact((Object) new Object[]{"won"}));
-// arrayType can be a subtype of Object[]
-MethodHandle ts2 = deepToString.asCollector(String[].class, 2);
-assertEquals(methodType(String.class, String.class, String.class), ts2.type());
-assertEquals("[two, too]", (String) ts2.invokeExact("two", "too"));
-MethodHandle ts0 = deepToString.asCollector(Object[].class, 0);
-assertEquals("[]", (String) ts0.invokeExact());
-// collectors can be nested, Lisp-style
-MethodHandle ts22 = deepToString.asCollector(Object[].class, 3).asCollector(String[].class, 2);
-assertEquals("[A, B, [C, D]]", ((String) ts22.invokeExact((Object)'A', (Object)"B", "C", "D")));
-// arrayType can be any primitive array type
-MethodHandle bytesToString = publicLookup()
-  .findStatic(Arrays.class, "toString", methodType(String.class, byte[].class))
-  .asCollector(byte[].class, 3);
-assertEquals("[1, 2, 3]", (String) bytesToString.invokeExact((byte)1, (byte)2, (byte)3));
-MethodHandle longsToString = publicLookup()
-  .findStatic(Arrays.class, "toString", methodType(String.class, long[].class))
-  .asCollector(long[].class, 1);
-assertEquals("[123]", (String) longsToString.invokeExact((long)123));
-     * </pre></blockquote>
-     * @param arrayType often {@code Object[]}, the type of the array argument which will collect the arguments
-     * @param arrayLength the number of arguments to collect into a new array argument
-     * @return a new method handle which collects some trailing argument
-     *         into an array, before calling the original method handle
-     * @throws NullPointerException if {@code arrayType} is a null reference
-     * @throws IllegalArgumentException if {@code arrayType} is not an array type
-     *         or {@code arrayType} is not assignable to this method handle's trailing parameter type,
-     *         or {@code arrayLength} is not a legal array size
-     * @throws WrongMethodTypeException if the implied {@code asType} call fails
-     * @see #asSpreader
-     * @see #asVarargsCollector
-     */
-    public MethodHandle asCollector(Class<?> arrayType, int arrayLength) {
-        asCollectorChecks(arrayType, arrayLength);
-        int collectArgPos = type().parameterCount()-1;
-        MethodHandle target = this;
-        if (arrayType != type().parameterType(collectArgPos))
-            target = convertArguments(type().changeParameterType(collectArgPos, arrayType));
-        MethodHandle collector = ValueConversions.varargsArray(arrayType, arrayLength);
-        return MethodHandles.collectArguments(target, collectArgPos, collector);
-    }
-
-    // private API: return true if last param exactly matches arrayType
-    private boolean asCollectorChecks(Class<?> arrayType, int arrayLength) {
-        spreadArrayChecks(arrayType, arrayLength);
-        int nargs = type().parameterCount();
-        if (nargs != 0) {
-            Class<?> lastParam = type().parameterType(nargs-1);
-            if (lastParam == arrayType)  return true;
-            if (lastParam.isAssignableFrom(arrayType))  return false;
-        }
-        throw newIllegalArgumentException("array type not assignable to trailing argument", this, arrayType);
-    }
-
-    /**
-     * Makes a <em>variable arity</em> adapter which is able to accept
-     * any number of trailing positional arguments and collect them
-     * into an array argument.
-     * <p>
-     * The type and behavior of the adapter will be the same as
-     * the type and behavior of the target, except that certain
-     * {@code invoke} and {@code asType} requests can lead to
-     * trailing positional arguments being collected into target's
-     * trailing parameter.
-     * Also, the last parameter type of the adapter will be
-     * {@code arrayType}, even if the target has a different
-     * last parameter type.
-     * <p>
-     * This transformation may return {@code this} if the method handle is
-     * already of variable arity and its trailing parameter type
-     * is identical to {@code arrayType}.
-     * <p>
-     * When called with {@link #invokeExact invokeExact}, the adapter invokes
-     * the target with no argument changes.
-     * (<em>Note:</em> This behavior is different from a
-     * {@linkplain #asCollector fixed arity collector},
-     * since it accepts a whole array of indeterminate length,
-     * rather than a fixed number of arguments.)
-     * <p>
-     * When called with plain, inexact {@link #invoke invoke}, if the caller
-     * type is the same as the adapter, the adapter invokes the target as with
-     * {@code invokeExact}.
-     * (This is the normal behavior for {@code invoke} when types match.)
-     * <p>
-     * Otherwise, if the caller and adapter arity are the same, and the
-     * trailing parameter type of the caller is a reference type identical to
-     * or assignable to the trailing parameter type of the adapter,
-     * the arguments and return values are converted pairwise,
-     * as if by {@link #asType asType} on a fixed arity
-     * method handle.
-     * <p>
-     * Otherwise, the arities differ, or the adapter's trailing parameter
-     * type is not assignable from the corresponding caller type.
-     * In this case, the adapter replaces all trailing arguments from
-     * the original trailing argument position onward, by
-     * a new array of type {@code arrayType}, whose elements
-     * comprise (in order) the replaced arguments.
-     * <p>
-     * The caller type must provides as least enough arguments,
-     * and of the correct type, to satisfy the target's requirement for
-     * positional arguments before the trailing array argument.
-     * Thus, the caller must supply, at a minimum, {@code N-1} arguments,
-     * where {@code N} is the arity of the target.
-     * Also, there must exist conversions from the incoming arguments
-     * to the target's arguments.
-     * As with other uses of plain {@code invoke}, if these basic
-     * requirements are not fulfilled, a {@code WrongMethodTypeException}
-     * may be thrown.
-     * <p>
-     * In all cases, what the target eventually returns is returned unchanged by the adapter.
-     * <p>
-     * In the final case, it is exactly as if the target method handle were
-     * temporarily adapted with a {@linkplain #asCollector fixed arity collector}
-     * to the arity required by the caller type.
-     * (As with {@code asCollector}, if the array length is zero,
-     * a shared constant may be used instead of a new array.
-     * If the implied call to {@code asCollector} would throw
-     * an {@code IllegalArgumentException} or {@code WrongMethodTypeException},
-     * the call to the variable arity adapter must throw
-     * {@code WrongMethodTypeException}.)
-     * <p>
-     * The behavior of {@link #asType asType} is also specialized for
-     * variable arity adapters, to maintain the invariant that
-     * plain, inexact {@code invoke} is always equivalent to an {@code asType}
-     * call to adjust the target type, followed by {@code invokeExact}.
-     * Therefore, a variable arity adapter responds
-     * to an {@code asType} request by building a fixed arity collector,
-     * if and only if the adapter and requested type differ either
-     * in arity or trailing argument type.
-     * The resulting fixed arity collector has its type further adjusted
-     * (if necessary) to the requested type by pairwise conversion,
-     * as if by another application of {@code asType}.
-     * <p>
-     * When a method handle is obtained by executing an {@code ldc} instruction
-     * of a {@code CONSTANT_MethodHandle} constant, and the target method is marked
-     * as a variable arity method (with the modifier bit {@code 0x0080}),
-     * the method handle will accept multiple arities, as if the method handle
-     * constant were created by means of a call to {@code asVarargsCollector}.
-     * <p>
-     * In order to create a collecting adapter which collects a predetermined
-     * number of arguments, and whose type reflects this predetermined number,
-     * use {@link #asCollector asCollector} instead.
-     * <p>
-     * No method handle transformations produce new method handles with
-     * variable arity, unless they are documented as doing so.
-     * Therefore, besides {@code asVarargsCollector},
-     * all methods in {@code MethodHandle} and {@code MethodHandles}
-     * will return a method handle with fixed arity,
-     * except in the cases where they are specified to return their original
-     * operand (e.g., {@code asType} of the method handle's own type).
-     * <p>
-     * Calling {@code asVarargsCollector} on a method handle which is already
-     * of variable arity will produce a method handle with the same type and behavior.
-     * It may (or may not) return the original variable arity method handle.
-     * <p>
-     * Here is an example, of a list-making variable arity method handle:
-     * <blockquote><pre>
-MethodHandle deepToString = publicLookup()
-  .findStatic(Arrays.class, "deepToString", methodType(String.class, Object[].class));
-MethodHandle ts1 = deepToString.asVarargsCollector(Object[].class);
-assertEquals("[won]",   (String) ts1.invokeExact(    new Object[]{"won"}));
-assertEquals("[won]",   (String) ts1.invoke(         new Object[]{"won"}));
-assertEquals("[won]",   (String) ts1.invoke(                      "won" ));
-assertEquals("[[won]]", (String) ts1.invoke((Object) new Object[]{"won"}));
-// findStatic of Arrays.asList(...) produces a variable arity method handle:
-MethodHandle asList = publicLookup()
-  .findStatic(Arrays.class, "asList", methodType(List.class, Object[].class));
-assertEquals(methodType(List.class, Object[].class), asList.type());
-assert(asList.isVarargsCollector());
-assertEquals("[]", asList.invoke().toString());
-assertEquals("[1]", asList.invoke(1).toString());
-assertEquals("[two, too]", asList.invoke("two", "too").toString());
-String[] argv = { "three", "thee", "tee" };
-assertEquals("[three, thee, tee]", asList.invoke(argv).toString());
-assertEquals("[three, thee, tee]", asList.invoke((Object[])argv).toString());
-List ls = (List) asList.invoke((Object)argv);
-assertEquals(1, ls.size());
-assertEquals("[three, thee, tee]", Arrays.toString((Object[])ls.get(0)));
-     * </pre></blockquote>
-     * <p style="font-size:smaller;">
-     * <em>Discussion:</em>
-     * These rules are designed as a dynamically-typed variation
-     * of the Java rules for variable arity methods.
-     * In both cases, callers to a variable arity method or method handle
-     * can either pass zero or more positional arguments, or else pass
-     * pre-collected arrays of any length.  Users should be aware of the
-     * special role of the final argument, and of the effect of a
-     * type match on that final argument, which determines whether
-     * or not a single trailing argument is interpreted as a whole
-     * array or a single element of an array to be collected.
-     * Note that the dynamic type of the trailing argument has no
-     * effect on this decision, only a comparison between the symbolic
-     * type descriptor of the call site and the type descriptor of the method handle.)
-     *
-     * @param arrayType often {@code Object[]}, the type of the array argument which will collect the arguments
-     * @return a new method handle which can collect any number of trailing arguments
-     *         into an array, before calling the original method handle
-     * @throws NullPointerException if {@code arrayType} is a null reference
-     * @throws IllegalArgumentException if {@code arrayType} is not an array type
-     *         or {@code arrayType} is not assignable to this method handle's trailing parameter type
-     * @see #asCollector
-     * @see #isVarargsCollector
-     * @see #asFixedArity
-     */
-    public MethodHandle asVarargsCollector(Class<?> arrayType) {
-        Class<?> arrayElement = arrayType.getComponentType();
-        boolean lastMatch = asCollectorChecks(arrayType, 0);
-        if (isVarargsCollector() && lastMatch)
-            return this;
-        return MethodHandleImpl.makeVarargsCollector(this, arrayType);
-    }
-
-    /**
-     * Determines if this method handle
-     * supports {@linkplain #asVarargsCollector variable arity} calls.
-     * Such method handles arise from the following sources:
-     * <ul>
-     * <li>a call to {@linkplain #asVarargsCollector asVarargsCollector}
-     * <li>a call to a {@linkplain java.lang.invoke.MethodHandles.Lookup lookup method}
-     *     which resolves to a variable arity Java method or constructor
-     * <li>an {@code ldc} instruction of a {@code CONSTANT_MethodHandle}
-     *     which resolves to a variable arity Java method or constructor
-     * </ul>
-     * @return true if this method handle accepts more than one arity of plain, inexact {@code invoke} calls
-     * @see #asVarargsCollector
-     * @see #asFixedArity
-     */
-    public boolean isVarargsCollector() {
-        return false;
-    }
-
-    /**
-     * Makes a <em>fixed arity</em> method handle which is otherwise
-     * equivalent to the the current method handle.
-     * <p>
-     * If the current method handle is not of
-     * {@linkplain #asVarargsCollector variable arity},
-     * the current method handle is returned.
-     * This is true even if the current method handle
-     * could not be a valid input to {@code asVarargsCollector}.
-     * <p>
-     * Otherwise, the resulting fixed-arity method handle has the same
-     * type and behavior of the current method handle,
-     * except that {@link #isVarargsCollector isVarargsCollector}
-     * will be false.
-     * The fixed-arity method handle may (or may not) be the
-     * a previous argument to {@code asVarargsCollector}.
-     * <p>
-     * Here is an example, of a list-making variable arity method handle:
-     * <blockquote><pre>
-MethodHandle asListVar = publicLookup()
-  .findStatic(Arrays.class, "asList", methodType(List.class, Object[].class))
-  .asVarargsCollector(Object[].class);
-MethodHandle asListFix = asListVar.asFixedArity();
-assertEquals("[1]", asListVar.invoke(1).toString());
-Exception caught = null;
-try { asListFix.invoke((Object)1); }
-catch (Exception ex) { caught = ex; }
-assert(caught instanceof ClassCastException);
-assertEquals("[two, too]", asListVar.invoke("two", "too").toString());
-try { asListFix.invoke("two", "too"); }
-catch (Exception ex) { caught = ex; }
-assert(caught instanceof WrongMethodTypeException);
-Object[] argv = { "three", "thee", "tee" };
-assertEquals("[three, thee, tee]", asListVar.invoke(argv).toString());
-assertEquals("[three, thee, tee]", asListFix.invoke(argv).toString());
-assertEquals(1, ((List) asListVar.invoke((Object)argv)).size());
-assertEquals("[three, thee, tee]", asListFix.invoke((Object)argv).toString());
-     * </pre></blockquote>
-     *
-     * @return a new method handle which accepts only a fixed number of arguments
-     * @see #asVarargsCollector
-     * @see #isVarargsCollector
-     */
-    public MethodHandle asFixedArity() {
-        assert(!isVarargsCollector());
-        return this;
-    }
-
-    /**
-     * Binds a value {@code x} to the first argument of a method handle, without invoking it.
-     * The new method handle adapts, as its <i>target</i>,
-     * the current method handle by binding it to the given argument.
-     * The type of the bound handle will be
-     * the same as the type of the target, except that a single leading
-     * reference parameter will be omitted.
-     * <p>
-     * When called, the bound handle inserts the given value {@code x}
-     * as a new leading argument to the target.  The other arguments are
-     * also passed unchanged.
-     * What the target eventually returns is returned unchanged by the bound handle.
-     * <p>
-     * The reference {@code x} must be convertible to the first parameter
-     * type of the target.
-     * <p>
-     * (<em>Note:</em>  Because method handles are immutable, the target method handle
-     * retains its original type and behavior.)
-     * @param x  the value to bind to the first argument of the target
-     * @return a new method handle which prepends the given value to the incoming
-     *         argument list, before calling the original method handle
-     * @throws IllegalArgumentException if the target does not have a
-     *         leading parameter type that is a reference type
-     * @throws ClassCastException if {@code x} cannot be converted
-     *         to the leading parameter type of the target
-     * @see MethodHandles#insertArguments
-     */
-    public MethodHandle bindTo(Object x) {
-        Class<?> ptype;
-        @SuppressWarnings("LocalVariableHidesMemberVariable")
-        MethodType type = type();
-        if (type.parameterCount() == 0 ||
-            (ptype = type.parameterType(0)).isPrimitive())
-            throw newIllegalArgumentException("no leading reference parameter", x);
-        x = ptype.cast(x);  // throw CCE if needed
-        return bindReceiver(x);
-    }
-
-    /**
-     * Returns a string representation of the method handle,
-     * starting with the string {@code "MethodHandle"} and
-     * ending with the string representation of the method handle's type.
-     * In other words, this method returns a string equal to the value of:
-     * <blockquote><pre>
-     * "MethodHandle" + type().toString()
-     * </pre></blockquote>
-     * <p>
-     * (<em>Note:</em>  Future releases of this API may add further information
-     * to the string representation.
-     * Therefore, the present syntax should not be parsed by applications.)
-     *
-     * @return a string representation of the method handle
-     */
-    @Override
-    public String toString() {
-        if (DEBUG_METHOD_HANDLE_NAMES)  return debugString();
-        return standardString();
-    }
-    String standardString() {
-        return "MethodHandle"+type;
-    }
-    String debugString() {
-        return standardString()+"/LF="+internalForm()+internalProperties();
-    }
-
-    //// Implementation methods.
-    //// Sub-classes can override these default implementations.
-    //// All these methods assume arguments are already validated.
-
-    // Other transforms to do:  convert, explicitCast, permute, drop, filter, fold, GWT, catch
-
-    /*non-public*/
-    MethodHandle setVarargs(MemberName member) throws IllegalAccessException {
-        if (!member.isVarargs())  return this;
-        int argc = type().parameterCount();
-        if (argc != 0) {
-            Class<?> arrayType = type().parameterType(argc-1);
-            if (arrayType.isArray()) {
-                return MethodHandleImpl.makeVarargsCollector(this, arrayType);
-            }
-        }
-        throw member.makeAccessException("cannot make variable arity", null);
-    }
-    /*non-public*/
-    MethodHandle viewAsType(MethodType newType) {
-        // No actual conversions, just a new view of the same method.
-        if (!type.isViewableAs(newType))
-            throw new InternalError();
-        return MethodHandleImpl.makePairwiseConvert(this, newType, 0);
-    }
-
-    // Decoding
-
-    /*non-public*/
-    LambdaForm internalForm() {
-        return form;
-    }
-
-    /*non-public*/
-    MemberName internalMemberName() {
-        return null;  // DMH returns DMH.member
-    }
-
-    /*non-public*/
-    Object internalValues() {
-        return null;
-    }
-
-    /*non-public*/
-    Object internalProperties() {
-        // Override to something like "/FOO=bar"
-        return "";
-    }
-
-    //// Method handle implementation methods.
-    //// Sub-classes can override these default implementations.
-    //// All these methods assume arguments are already validated.
-
-    /*non-public*/ MethodHandle convertArguments(MethodType newType) {
-        // Override this if it can be improved.
-        return MethodHandleImpl.makePairwiseConvert(this, newType, 1);
-    }
-
-    /*non-public*/
-    MethodHandle bindArgument(int pos, char basicType, Object value) {
-        // Override this if it can be improved.
-        return rebind().bindArgument(pos, basicType, value);
-    }
-
-    /*non-public*/
-    MethodHandle bindReceiver(Object receiver) {
-        // Override this if it can be improved.
-        return bindArgument(0, 'L', receiver);
-    }
-
-    /*non-public*/
-    MethodHandle bindImmediate(int pos, char basicType, Object value) {
-        // Bind an immediate value to a position in the arguments.
-        // This means, elide the respective argument,
-        // and replace all references to it in NamedFunction args with the specified value.
-
-        // CURRENT RESTRICTIONS
-        // * only for pos 0 and UNSAFE (position is adjusted in MHImpl to make API usable for others)
-        assert pos == 0 && basicType == 'L' && value instanceof Unsafe;
-        MethodType type2 = type.dropParameterTypes(pos, pos + 1); // adjustment: ignore receiver!
-        LambdaForm form2 = form.bindImmediate(pos + 1, basicType, value); // adjust pos to form-relative pos
-        return copyWith(type2, form2);
-    }
-
-    /*non-public*/
-    MethodHandle copyWith(MethodType mt, LambdaForm lf) {
-        throw new InternalError("copyWith: " + this.getClass());
-    }
-
-    /*non-public*/
-    MethodHandle dropArguments(MethodType srcType, int pos, int drops) {
-        // Override this if it can be improved.
-        return rebind().dropArguments(srcType, pos, drops);
-    }
-
-    /*non-public*/
-    MethodHandle permuteArguments(MethodType newType, int[] reorder) {
-        // Override this if it can be improved.
-        return rebind().permuteArguments(newType, reorder);
-    }
-
-    /*non-public*/
-    MethodHandle rebind() {
-        // Bind 'this' into a new invoker, of the known class BMH.
-        MethodType type2 = type();
-        LambdaForm form2 = reinvokerForm(type2.basicType());
-        // form2 = lambda (bmh, arg*) { thismh = bmh[0]; invokeBasic(thismh, arg*) }
-        return BoundMethodHandle.bindSingle(type2, form2, this);
-    }
-
-    /*non-public*/
-    MethodHandle reinvokerTarget() {
-        throw new InternalError("not a reinvoker MH: "+this.getClass().getName()+": "+this);
-    }
-
-    /** Create a LF which simply reinvokes a target of the given basic type.
-     *  The target MH must override {@link #reinvokerTarget} to provide the target.
-     */
-    static LambdaForm reinvokerForm(MethodType mtype) {
-        mtype = mtype.basicType();
-        LambdaForm reinvoker = mtype.form().cachedLambdaForm(MethodTypeForm.LF_REINVOKE);
-        if (reinvoker != null)  return reinvoker;
-        MethodHandle MH_invokeBasic = MethodHandles.basicInvoker(mtype);
-        final int THIS_BMH    = 0;
-        final int ARG_BASE    = 1;
-        final int ARG_LIMIT   = ARG_BASE + mtype.parameterCount();
-        int nameCursor = ARG_LIMIT;
-        final int NEXT_MH     = nameCursor++;
-        final int REINVOKE    = nameCursor++;
-        LambdaForm.Name[] names = LambdaForm.arguments(nameCursor - ARG_LIMIT, mtype.invokerType());
-        names[NEXT_MH] = new LambdaForm.Name(NF_reinvokerTarget, names[THIS_BMH]);
-        Object[] targetArgs = Arrays.copyOfRange(names, THIS_BMH, ARG_LIMIT, Object[].class);
-        targetArgs[0] = names[NEXT_MH];  // overwrite this MH with next MH
-        names[REINVOKE] = new LambdaForm.Name(MH_invokeBasic, targetArgs);
-        return mtype.form().setCachedLambdaForm(MethodTypeForm.LF_REINVOKE, new LambdaForm("BMH.reinvoke", ARG_LIMIT, names));
-    }
-
-    private static final LambdaForm.NamedFunction NF_reinvokerTarget;
-    static {
-        try {
-            NF_reinvokerTarget = new LambdaForm.NamedFunction(MethodHandle.class
-                .getDeclaredMethod("reinvokerTarget"));
-        } catch (ReflectiveOperationException ex) {
-            throw newInternalError(ex);
-        }
-    }
-
-    /**
-     * Replace the old lambda form of this method handle with a new one.
-     * The new one must be functionally equivalent to the old one.
-     * Threads may continue running the old form indefinitely,
-     * but it is likely that the new one will be preferred for new executions.
-     * Use with discretion.
-     * @param newForm
-     */
-    /*non-public*/
-    void updateForm(LambdaForm newForm) {
-        if (form == newForm)  return;
-        // ISSUE: Should we have a memory fence here?
-        UNSAFE.putObject(this, FORM_OFFSET, newForm);
-        this.form.prepare();  // as in MethodHandle.<init>
-    }
-
-    private static final long FORM_OFFSET;
-    static {
-        try {
-            FORM_OFFSET = UNSAFE.objectFieldOffset(MethodHandle.class.getDeclaredField("form"));
-        } catch (ReflectiveOperationException ex) {
-            throw newInternalError(ex);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/MethodHandleImpl.java b/ojluni/src/main/java/java/lang/invoke/MethodHandleImpl.java
deleted file mode 100755
index 1a5f300..0000000
--- a/ojluni/src/main/java/java/lang/invoke/MethodHandleImpl.java
+++ /dev/null
@@ -1,938 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, 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.
- */
-
-package java.lang.invoke;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import sun.invoke.empty.Empty;
-import sun.invoke.util.ValueConversions;
-import sun.invoke.util.VerifyType;
-import sun.invoke.util.Wrapper;
-import sun.misc.Unsafe;
-import sun.reflect.CallerSensitive;
-import sun.reflect.Reflection;
-import static java.lang.invoke.LambdaForm.*;
-import static java.lang.invoke.MethodHandleStatics.*;
-import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
-
-/**
- * Trusted implementation code for MethodHandle.
- * @author jrose
- */
-/*non-public*/ abstract class MethodHandleImpl {
-    /// Factory methods to create method handles:
-
-    static void initStatics() {
-        // Trigger selected static initializations.
-        MemberName.Factory.INSTANCE.getClass();
-    }
-
-    static MethodHandle makeArrayElementAccessor(Class<?> arrayClass, boolean isSetter) {
-        if (!arrayClass.isArray())
-            throw newIllegalArgumentException("not an array: "+arrayClass);
-        MethodHandle accessor = ArrayAccessor.getAccessor(arrayClass, isSetter);
-        MethodType srcType = accessor.type().erase();
-        MethodType lambdaType = srcType.invokerType();
-        Name[] names = arguments(1, lambdaType);
-        Name[] args  = Arrays.copyOfRange(names, 1, 1 + srcType.parameterCount());
-        names[names.length - 1] = new Name(accessor.asType(srcType), (Object[]) args);
-        LambdaForm form = new LambdaForm("getElement", lambdaType.parameterCount(), names);
-        MethodHandle mh = SimpleMethodHandle.make(srcType, form);
-        if (ArrayAccessor.needCast(arrayClass)) {
-            mh = mh.bindTo(arrayClass);
-        }
-        mh = mh.asType(ArrayAccessor.correctType(arrayClass, isSetter));
-        return mh;
-    }
-
-    static final class ArrayAccessor {
-        /// Support for array element access
-        static final HashMap<Class<?>, MethodHandle> GETTER_CACHE = new HashMap<>();  // TODO use it
-        static final HashMap<Class<?>, MethodHandle> SETTER_CACHE = new HashMap<>();  // TODO use it
-
-        static int     getElementI(int[]     a, int i)            { return              a[i]; }
-        static long    getElementJ(long[]    a, int i)            { return              a[i]; }
-        static float   getElementF(float[]   a, int i)            { return              a[i]; }
-        static double  getElementD(double[]  a, int i)            { return              a[i]; }
-        static boolean getElementZ(boolean[] a, int i)            { return              a[i]; }
-        static byte    getElementB(byte[]    a, int i)            { return              a[i]; }
-        static short   getElementS(short[]   a, int i)            { return              a[i]; }
-        static char    getElementC(char[]    a, int i)            { return              a[i]; }
-        static Object  getElementL(Object[]  a, int i)            { return              a[i]; }
-
-        static void    setElementI(int[]     a, int i, int     x) {              a[i] = x; }
-        static void    setElementJ(long[]    a, int i, long    x) {              a[i] = x; }
-        static void    setElementF(float[]   a, int i, float   x) {              a[i] = x; }
-        static void    setElementD(double[]  a, int i, double  x) {              a[i] = x; }
-        static void    setElementZ(boolean[] a, int i, boolean x) {              a[i] = x; }
-        static void    setElementB(byte[]    a, int i, byte    x) {              a[i] = x; }
-        static void    setElementS(short[]   a, int i, short   x) {              a[i] = x; }
-        static void    setElementC(char[]    a, int i, char    x) {              a[i] = x; }
-        static void    setElementL(Object[]  a, int i, Object  x) {              a[i] = x; }
-
-        static Object  getElementL(Class<?> arrayClass, Object[] a, int i)           { arrayClass.cast(a); return a[i]; }
-        static void    setElementL(Class<?> arrayClass, Object[] a, int i, Object x) { arrayClass.cast(a); a[i] = x; }
-
-        // Weakly typed wrappers of Object[] accessors:
-        static Object  getElementL(Object    a, int i)            { return getElementL((Object[])a, i); }
-        static void    setElementL(Object    a, int i, Object  x) {        setElementL((Object[]) a, i, x); }
-        static Object  getElementL(Object   arrayClass, Object a, int i)             { return getElementL((Class<?>) arrayClass, (Object[])a, i); }
-        static void    setElementL(Object   arrayClass, Object a, int i, Object x)   {        setElementL((Class<?>) arrayClass, (Object[])a, i, x); }
-
-        static boolean needCast(Class<?> arrayClass) {
-            Class<?> elemClass = arrayClass.getComponentType();
-            return !elemClass.isPrimitive() && elemClass != Object.class;
-        }
-        static String name(Class<?> arrayClass, boolean isSetter) {
-            Class<?> elemClass = arrayClass.getComponentType();
-            if (elemClass == null)  throw new IllegalArgumentException();
-            return (!isSetter ? "getElement" : "setElement") + Wrapper.basicTypeChar(elemClass);
-        }
-        static final boolean USE_WEAKLY_TYPED_ARRAY_ACCESSORS = false;  // FIXME: decide
-        static MethodType type(Class<?> arrayClass, boolean isSetter) {
-            Class<?> elemClass = arrayClass.getComponentType();
-            Class<?> arrayArgClass = arrayClass;
-            if (!elemClass.isPrimitive()) {
-                arrayArgClass = Object[].class;
-                if (USE_WEAKLY_TYPED_ARRAY_ACCESSORS)
-                    arrayArgClass = Object.class;
-            }
-            if (!needCast(arrayClass)) {
-                return !isSetter ?
-                    MethodType.methodType(elemClass,  arrayArgClass, int.class) :
-                    MethodType.methodType(void.class, arrayArgClass, int.class, elemClass);
-            } else {
-                Class<?> classArgClass = Class.class;
-                if (USE_WEAKLY_TYPED_ARRAY_ACCESSORS)
-                    classArgClass = Object.class;
-                return !isSetter ?
-                    MethodType.methodType(Object.class, classArgClass, arrayArgClass, int.class) :
-                    MethodType.methodType(void.class,   classArgClass, arrayArgClass, int.class, Object.class);
-            }
-        }
-        static MethodType correctType(Class<?> arrayClass, boolean isSetter) {
-            Class<?> elemClass = arrayClass.getComponentType();
-            return !isSetter ?
-                    MethodType.methodType(elemClass,  arrayClass, int.class) :
-                    MethodType.methodType(void.class, arrayClass, int.class, elemClass);
-        }
-        static MethodHandle getAccessor(Class<?> arrayClass, boolean isSetter) {
-            String     name = name(arrayClass, isSetter);
-            MethodType type = type(arrayClass, isSetter);
-            try {
-                return IMPL_LOOKUP.findStatic(ArrayAccessor.class, name, type);
-            } catch (ReflectiveOperationException ex) {
-                throw uncaughtException(ex);
-            }
-        }
-    }
-
-    /**
-     * Create a JVM-level adapter method handle to conform the given method
-     * handle to the similar newType, using only pairwise argument conversions.
-     * For each argument, convert incoming argument to the exact type needed.
-     * The argument conversions allowed are casting, boxing and unboxing,
-     * integral widening or narrowing, and floating point widening or narrowing.
-     * @param srcType required call type
-     * @param target original method handle
-     * @param level which strength of conversion is allowed
-     * @return an adapter to the original handle with the desired new type,
-     *          or the original target if the types are already identical
-     *          or null if the adaptation cannot be made
-     */
-    static MethodHandle makePairwiseConvert(MethodHandle target, MethodType srcType, int level) {
-        assert(level >= 0 && level <= 2);
-        MethodType dstType = target.type();
-        assert(dstType.parameterCount() == target.type().parameterCount());
-        if (srcType == dstType)
-            return target;
-
-        // Calculate extra arguments (temporaries) required in the names array.
-        // FIXME: Use an ArrayList<Name>.  Some arguments require more than one conversion step.
-        final int INARG_COUNT = srcType.parameterCount();
-        int conversions = 0;
-        boolean[] needConv = new boolean[1+INARG_COUNT];
-        for (int i = 0; i <= INARG_COUNT; i++) {
-            Class<?> src = (i == INARG_COUNT) ? dstType.returnType() : srcType.parameterType(i);
-            Class<?> dst = (i == INARG_COUNT) ? srcType.returnType() : dstType.parameterType(i);
-            if (!VerifyType.isNullConversion(src, dst) ||
-                level <= 1 && dst.isInterface() && !dst.isAssignableFrom(src)) {
-                needConv[i] = true;
-                conversions++;
-            }
-        }
-        boolean retConv = needConv[INARG_COUNT];
-
-        final int IN_MH         = 0;
-        final int INARG_BASE    = 1;
-        final int INARG_LIMIT   = INARG_BASE + INARG_COUNT;
-        final int NAME_LIMIT    = INARG_LIMIT + conversions + 1;
-        final int RETURN_CONV   = (!retConv ? -1         : NAME_LIMIT - 1);
-        final int OUT_CALL      = (!retConv ? NAME_LIMIT : RETURN_CONV) - 1;
-
-        // Now build a LambdaForm.
-        MethodType lambdaType = srcType.basicType().invokerType();
-        Name[] names = arguments(NAME_LIMIT - INARG_LIMIT, lambdaType);
-
-        // Collect the arguments to the outgoing call, maybe with conversions:
-        final int OUTARG_BASE = 0;  // target MH is Name.function, name Name.arguments[0]
-        Object[] outArgs = new Object[OUTARG_BASE + INARG_COUNT];
-
-        int nameCursor = INARG_LIMIT;
-        for (int i = 0; i < INARG_COUNT; i++) {
-            Class<?> src = srcType.parameterType(i);
-            Class<?> dst = dstType.parameterType(i);
-
-            if (!needConv[i]) {
-                // do nothing: difference is trivial
-                outArgs[OUTARG_BASE + i] = names[INARG_BASE + i];
-                continue;
-            }
-
-            // Tricky case analysis follows.
-            MethodHandle fn = null;
-            if (src.isPrimitive()) {
-                if (dst.isPrimitive()) {
-                    fn = ValueConversions.convertPrimitive(src, dst);
-                } else {
-                    Wrapper w = Wrapper.forPrimitiveType(src);
-                    MethodHandle boxMethod = ValueConversions.box(w);
-                    if (dst == w.wrapperType())
-                        fn = boxMethod;
-                    else
-                        fn = boxMethod.asType(MethodType.methodType(dst, src));
-                }
-            } else {
-                if (dst.isPrimitive()) {
-                    // Caller has boxed a primitive.  Unbox it for the target.
-                    Wrapper w = Wrapper.forPrimitiveType(dst);
-                    if (level == 0 || VerifyType.isNullConversion(src, w.wrapperType())) {
-                        fn = ValueConversions.unbox(dst);
-                    } else if (src == Object.class || !Wrapper.isWrapperType(src)) {
-                        // Examples:  Object->int, Number->int, Comparable->int; Byte->int, Character->int
-                        // must include additional conversions
-                        // src must be examined at runtime, to detect Byte, Character, etc.
-                        MethodHandle unboxMethod = (level == 1
-                                                    ? ValueConversions.unbox(dst)
-                                                    : ValueConversions.unboxCast(dst));
-                        fn = unboxMethod;
-                    } else {
-                        // Example: Byte->int
-                        // Do this by reformulating the problem to Byte->byte.
-                        Class<?> srcPrim = Wrapper.forWrapperType(src).primitiveType();
-                        MethodHandle unbox = ValueConversions.unbox(srcPrim);
-                        // Compose the two conversions.  FIXME:  should make two Names for this job
-                        fn = unbox.asType(MethodType.methodType(dst, src));
-                    }
-                } else {
-                    // Simple reference conversion.
-                    // Note:  Do not check for a class hierarchy relation
-                    // between src and dst.  In all cases a 'null' argument
-                    // will pass the cast conversion.
-                    fn = ValueConversions.cast(dst);
-                }
-            }
-            Name conv = new Name(fn, names[INARG_BASE + i]);
-            assert(names[nameCursor] == null);
-            names[nameCursor++] = conv;
-            assert(outArgs[OUTARG_BASE + i] == null);
-            outArgs[OUTARG_BASE + i] = conv;
-        }
-
-        // Build argument array for the call.
-        assert(nameCursor == OUT_CALL);
-        names[OUT_CALL] = new Name(target, outArgs);
-
-        if (RETURN_CONV < 0) {
-            assert(OUT_CALL == names.length-1);
-        } else {
-            Class<?> needReturn = srcType.returnType();
-            Class<?> haveReturn = dstType.returnType();
-            MethodHandle fn;
-            Object[] arg = { names[OUT_CALL] };
-            if (haveReturn == void.class) {
-                // synthesize a zero value for the given void
-                Object zero = Wrapper.forBasicType(needReturn).zero();
-                fn = MethodHandles.constant(needReturn, zero);
-                arg = new Object[0];  // don't pass names[OUT_CALL] to conversion
-            } else {
-                MethodHandle identity = MethodHandles.identity(needReturn);
-                MethodType needConversion = identity.type().changeParameterType(0, haveReturn);
-                fn = makePairwiseConvert(identity, needConversion, level);
-            }
-            assert(names[RETURN_CONV] == null);
-            names[RETURN_CONV] = new Name(fn, arg);
-            assert(RETURN_CONV == names.length-1);
-        }
-
-        LambdaForm form = new LambdaForm("convert", lambdaType.parameterCount(), names);
-        return SimpleMethodHandle.make(srcType, form);
-    }
-
-    static MethodHandle makeReferenceIdentity(Class<?> refType) {
-        MethodType lambdaType = MethodType.genericMethodType(1).invokerType();
-        Name[] names = arguments(1, lambdaType);
-        names[names.length - 1] = new Name(ValueConversions.identity(), names[1]);
-        LambdaForm form = new LambdaForm("identity", lambdaType.parameterCount(), names);
-        return SimpleMethodHandle.make(MethodType.methodType(refType, refType), form);
-    }
-
-    static MethodHandle makeVarargsCollector(MethodHandle target, Class<?> arrayType) {
-        MethodType type = target.type();
-        int last = type.parameterCount() - 1;
-        if (type.parameterType(last) != arrayType)
-            target = target.asType(type.changeParameterType(last, arrayType));
-        target = target.asFixedArity();  // make sure this attribute is turned off
-        return new AsVarargsCollector(target, target.type(), arrayType);
-    }
-
-    static class AsVarargsCollector extends MethodHandle {
-        private final MethodHandle target;
-        private final Class<?> arrayType;
-        private MethodHandle cache;
-
-        AsVarargsCollector(MethodHandle target, MethodType type, Class<?> arrayType) {
-            super(type, reinvokerForm(type));
-            this.target = target;
-            this.arrayType = arrayType;
-            this.cache = target.asCollector(arrayType, 0);
-        }
-
-        @Override MethodHandle reinvokerTarget() { return target; }
-
-        @Override
-        public boolean isVarargsCollector() {
-            return true;
-        }
-
-        @Override
-        public MethodHandle asFixedArity() {
-            return target;
-        }
-
-        @Override
-        public MethodHandle asType(MethodType newType) {
-            MethodType type = this.type();
-            int collectArg = type.parameterCount() - 1;
-            int newArity = newType.parameterCount();
-            if (newArity == collectArg+1 &&
-                type.parameterType(collectArg).isAssignableFrom(newType.parameterType(collectArg))) {
-                // if arity and trailing parameter are compatible, do normal thing
-                return asFixedArity().asType(newType);
-            }
-            // check cache
-            if (cache.type().parameterCount() == newArity)
-                return cache.asType(newType);
-            // build and cache a collector
-            int arrayLength = newArity - collectArg;
-            MethodHandle collector;
-            try {
-                collector = asFixedArity().asCollector(arrayType, arrayLength);
-                assert(collector.type().parameterCount() == newArity) : "newArity="+newArity+" but collector="+collector;
-            } catch (IllegalArgumentException ex) {
-                throw new WrongMethodTypeException("cannot build collector", ex);
-            }
-            cache = collector;
-            return collector.asType(newType);
-        }
-
-        @Override
-        MethodHandle setVarargs(MemberName member) {
-            if (member.isVarargs())  return this;
-            return asFixedArity();
-        }
-
-        @Override
-        MethodHandle viewAsType(MethodType newType) {
-            MethodHandle mh = super.viewAsType(newType);
-            // put back the varargs bit:
-            MethodType type = mh.type();
-            int arity = type.parameterCount();
-            return mh.asVarargsCollector(type.parameterType(arity-1));
-        }
-
-        @Override
-        MemberName internalMemberName() {
-            return asFixedArity().internalMemberName();
-        }
-
-
-        @Override
-        MethodHandle bindArgument(int pos, char basicType, Object value) {
-            return asFixedArity().bindArgument(pos, basicType, value);
-        }
-
-        @Override
-        MethodHandle bindReceiver(Object receiver) {
-            return asFixedArity().bindReceiver(receiver);
-        }
-
-        @Override
-        MethodHandle dropArguments(MethodType srcType, int pos, int drops) {
-            return asFixedArity().dropArguments(srcType, pos, drops);
-        }
-
-        @Override
-        MethodHandle permuteArguments(MethodType newType, int[] reorder) {
-            return asFixedArity().permuteArguments(newType, reorder);
-        }
-    }
-
-    /** Factory method:  Spread selected argument. */
-    static MethodHandle makeSpreadArguments(MethodHandle target,
-                                            Class<?> spreadArgType, int spreadArgPos, int spreadArgCount) {
-        MethodType targetType = target.type();
-
-        for (int i = 0; i < spreadArgCount; i++) {
-            Class<?> arg = VerifyType.spreadArgElementType(spreadArgType, i);
-            if (arg == null)  arg = Object.class;
-            targetType = targetType.changeParameterType(spreadArgPos + i, arg);
-        }
-        target = target.asType(targetType);
-
-        MethodType srcType = targetType
-                .replaceParameterTypes(spreadArgPos, spreadArgPos + spreadArgCount, spreadArgType);
-        // Now build a LambdaForm.
-        MethodType lambdaType = srcType.invokerType();
-        Name[] names = arguments(spreadArgCount + 2, lambdaType);
-        int nameCursor = lambdaType.parameterCount();
-        int[] indexes = new int[targetType.parameterCount()];
-
-        for (int i = 0, argIndex = 1; i < targetType.parameterCount() + 1; i++, argIndex++) {
-            Class<?> src = lambdaType.parameterType(i);
-            if (i == spreadArgPos) {
-                // Spread the array.
-                MethodHandle aload = MethodHandles.arrayElementGetter(spreadArgType);
-                Name array = names[argIndex];
-                names[nameCursor++] = new Name(NF_checkSpreadArgument, array, spreadArgCount);
-                for (int j = 0; j < spreadArgCount; i++, j++) {
-                    indexes[i] = nameCursor;
-                    names[nameCursor++] = new Name(aload, array, j);
-                }
-            } else if (i < indexes.length) {
-                indexes[i] = argIndex;
-            }
-        }
-        assert(nameCursor == names.length-1);  // leave room for the final call
-
-        // Build argument array for the call.
-        Name[] targetArgs = new Name[targetType.parameterCount()];
-        for (int i = 0; i < targetType.parameterCount(); i++) {
-            int idx = indexes[i];
-            targetArgs[i] = names[idx];
-        }
-        names[names.length - 1] = new Name(target, (Object[]) targetArgs);
-
-        LambdaForm form = new LambdaForm("spread", lambdaType.parameterCount(), names);
-        return SimpleMethodHandle.make(srcType, form);
-    }
-
-    static void checkSpreadArgument(Object av, int n) {
-        // FIXME: regression test for bug 7141637 erroneously expects an NPE, and other tests may expect IAE
-        // but the actual exception raised by an arity mismatch should be WMTE
-        final boolean RAISE_RANDOM_EXCEPTIONS = true;  // FIXME: delete in JSR 292 M1
-        if (av == null) {
-            if (n == 0)  return;
-            int len;
-            if (RAISE_RANDOM_EXCEPTIONS)
-                len = ((Object[])av).length;  // throw NPE; but delete this after tests are fixed
-        } else if (av instanceof Object[]) {
-            int len = ((Object[])av).length;
-            if (len == n)  return;
-        } else {
-            int len = java.lang.reflect.Array.getLength(av);
-            if (len == n)  return;
-        }
-        // fall through to error:
-        if (RAISE_RANDOM_EXCEPTIONS)
-            throw newIllegalArgumentException("Array is not of length "+n);
-        throw new WrongMethodTypeException("Array is not of length "+n);
-    }
-
-    private static final NamedFunction NF_checkSpreadArgument;
-    static {
-        try {
-            NF_checkSpreadArgument = new NamedFunction(MethodHandleImpl.class
-                    .getDeclaredMethod("checkSpreadArgument", Object.class, int.class));
-            NF_checkSpreadArgument.resolve();
-        } catch (ReflectiveOperationException ex) {
-            throw newInternalError(ex);
-        }
-    }
-
-    /** Factory method:  Collect or filter selected argument(s). */
-    static MethodHandle makeCollectArguments(MethodHandle target,
-                MethodHandle collector, int collectArgPos, boolean retainOriginalArgs) {
-        MethodType targetType = target.type();          // (a..., c, [b...])=>r
-        MethodType collectorType = collector.type();    // (b...)=>c
-        int collectArgCount = collectorType.parameterCount();
-        Class<?> collectValType = collectorType.returnType();
-        int collectValCount = (collectValType == void.class ? 0 : 1);
-        MethodType srcType = targetType                 // (a..., [b...])=>r
-                .dropParameterTypes(collectArgPos, collectArgPos+collectValCount);
-        if (!retainOriginalArgs) {                      // (a..., b...)=>r
-            srcType = srcType.insertParameterTypes(collectArgPos, collectorType.parameterList());
-        }
-        // in  arglist: [0: ...keep1 | cpos: collect...  | cpos+cacount: keep2... ]
-        // out arglist: [0: ...keep1 | cpos: collectVal? | cpos+cvcount: keep2... ]
-        // out(retain): [0: ...keep1 | cpos: cV? coll... | cpos+cvc+cac: keep2... ]
-
-        // Now build a LambdaForm.
-        MethodType lambdaType = srcType.invokerType();
-        Name[] names = arguments(2, lambdaType);
-        final int collectNamePos = names.length - 2;
-        final int targetNamePos  = names.length - 1;
-
-        Name[] collectorArgs = Arrays.copyOfRange(names, 1 + collectArgPos, 1 + collectArgPos + collectArgCount);
-        names[collectNamePos] = new Name(collector, (Object[]) collectorArgs);
-
-        // Build argument array for the target.
-        // Incoming LF args to copy are: [ (mh) headArgs collectArgs tailArgs ].
-        // Output argument array is [ headArgs (collectVal)? (collectArgs)? tailArgs ].
-        Name[] targetArgs = new Name[targetType.parameterCount()];
-        int inputArgPos  = 1;  // incoming LF args to copy to target
-        int targetArgPos = 0;  // fill pointer for targetArgs
-        int chunk = collectArgPos;  // |headArgs|
-        System.arraycopy(names, inputArgPos, targetArgs, targetArgPos, chunk);
-        inputArgPos  += chunk;
-        targetArgPos += chunk;
-        if (collectValType != void.class) {
-            targetArgs[targetArgPos++] = names[collectNamePos];
-        }
-        chunk = collectArgCount;
-        if (retainOriginalArgs) {
-            System.arraycopy(names, inputArgPos, targetArgs, targetArgPos, chunk);
-            targetArgPos += chunk;   // optionally pass on the collected chunk
-        }
-        inputArgPos += chunk;
-        chunk = targetArgs.length - targetArgPos;  // all the rest
-        System.arraycopy(names, inputArgPos, targetArgs, targetArgPos, chunk);
-        assert(inputArgPos + chunk == collectNamePos);  // use of rest of input args also
-        names[targetNamePos] = new Name(target, (Object[]) targetArgs);
-
-        LambdaForm form = new LambdaForm("collect", lambdaType.parameterCount(), names);
-        return SimpleMethodHandle.make(srcType, form);
-    }
-
-    static
-    MethodHandle selectAlternative(boolean testResult, MethodHandle target, MethodHandle fallback) {
-        return testResult ? target : fallback;
-    }
-
-    static MethodHandle SELECT_ALTERNATIVE;
-    static MethodHandle selectAlternative() {
-        if (SELECT_ALTERNATIVE != null)  return SELECT_ALTERNATIVE;
-        try {
-            SELECT_ALTERNATIVE
-            = IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "selectAlternative",
-                    MethodType.methodType(MethodHandle.class, boolean.class, MethodHandle.class, MethodHandle.class));
-        } catch (ReflectiveOperationException ex) {
-            throw new RuntimeException(ex);
-        }
-        return SELECT_ALTERNATIVE;
-    }
-
-    static
-    MethodHandle makeGuardWithTest(MethodHandle test,
-                                   MethodHandle target,
-                                   MethodHandle fallback) {
-        MethodType basicType = target.type().basicType();
-        MethodHandle invokeBasic = MethodHandles.basicInvoker(basicType);
-        int arity = basicType.parameterCount();
-        int extraNames = 3;
-        MethodType lambdaType = basicType.invokerType();
-        Name[] names = arguments(extraNames, lambdaType);
-
-        Object[] testArgs   = Arrays.copyOfRange(names, 1, 1 + arity, Object[].class);
-        Object[] targetArgs = Arrays.copyOfRange(names, 0, 1 + arity, Object[].class);
-
-        // call test
-        names[arity + 1] = new Name(test, testArgs);
-
-        // call selectAlternative
-        Object[] selectArgs = { names[arity + 1], target, fallback };
-        names[arity + 2] = new Name(MethodHandleImpl.selectAlternative(), selectArgs);
-        targetArgs[0] = names[arity + 2];
-
-        // call target or fallback
-        names[arity + 3] = new Name(new NamedFunction(invokeBasic), targetArgs);
-
-        LambdaForm form = new LambdaForm("guard", lambdaType.parameterCount(), names);
-        return SimpleMethodHandle.make(target.type(), form);
-    }
-
-    private static class GuardWithCatch {
-        private final MethodHandle target;
-        private final Class<? extends Throwable> exType;
-        private final MethodHandle catcher;
-        // FIXME: Build the control flow out of foldArguments.
-        GuardWithCatch(MethodHandle target, Class<? extends Throwable> exType, MethodHandle catcher) {
-            this.target = target;
-            this.exType = exType;
-            this.catcher = catcher;
-        }
-        @LambdaForm.Hidden
-        private Object invoke_V(Object... av) throws Throwable {
-            try {
-                return target.invokeExact(av);
-            } catch (Throwable t) {
-                if (!exType.isInstance(t))  throw t;
-                return catcher.invokeExact(t, av);
-            }
-        }
-        @LambdaForm.Hidden
-        private Object invoke_L0() throws Throwable {
-            try {
-                return target.invokeExact();
-            } catch (Throwable t) {
-                if (!exType.isInstance(t))  throw t;
-                return catcher.invokeExact(t);
-            }
-        }
-        @LambdaForm.Hidden
-        private Object invoke_L1(Object a0) throws Throwable {
-            try {
-                return target.invokeExact(a0);
-            } catch (Throwable t) {
-                if (!exType.isInstance(t))  throw t;
-                return catcher.invokeExact(t, a0);
-            }
-        }
-        @LambdaForm.Hidden
-        private Object invoke_L2(Object a0, Object a1) throws Throwable {
-            try {
-                return target.invokeExact(a0, a1);
-            } catch (Throwable t) {
-                if (!exType.isInstance(t))  throw t;
-                return catcher.invokeExact(t, a0, a1);
-            }
-        }
-        @LambdaForm.Hidden
-        private Object invoke_L3(Object a0, Object a1, Object a2) throws Throwable {
-            try {
-                return target.invokeExact(a0, a1, a2);
-            } catch (Throwable t) {
-                if (!exType.isInstance(t))  throw t;
-                return catcher.invokeExact(t, a0, a1, a2);
-            }
-        }
-        @LambdaForm.Hidden
-        private Object invoke_L4(Object a0, Object a1, Object a2, Object a3) throws Throwable {
-            try {
-                return target.invokeExact(a0, a1, a2, a3);
-            } catch (Throwable t) {
-                if (!exType.isInstance(t))  throw t;
-                return catcher.invokeExact(t, a0, a1, a2, a3);
-            }
-        }
-        @LambdaForm.Hidden
-        private Object invoke_L5(Object a0, Object a1, Object a2, Object a3, Object a4) throws Throwable {
-            try {
-                return target.invokeExact(a0, a1, a2, a3, a4);
-            } catch (Throwable t) {
-                if (!exType.isInstance(t))  throw t;
-                return catcher.invokeExact(t, a0, a1, a2, a3, a4);
-            }
-        }
-        @LambdaForm.Hidden
-        private Object invoke_L6(Object a0, Object a1, Object a2, Object a3, Object a4, Object a5) throws Throwable {
-            try {
-                return target.invokeExact(a0, a1, a2, a3, a4, a5);
-            } catch (Throwable t) {
-                if (!exType.isInstance(t))  throw t;
-                return catcher.invokeExact(t, a0, a1, a2, a3, a4, a5);
-            }
-        }
-        @LambdaForm.Hidden
-        private Object invoke_L7(Object a0, Object a1, Object a2, Object a3, Object a4, Object a5, Object a6) throws Throwable {
-            try {
-                return target.invokeExact(a0, a1, a2, a3, a4, a5, a6);
-            } catch (Throwable t) {
-                if (!exType.isInstance(t))  throw t;
-                return catcher.invokeExact(t, a0, a1, a2, a3, a4, a5, a6);
-            }
-        }
-        @LambdaForm.Hidden
-        private Object invoke_L8(Object a0, Object a1, Object a2, Object a3, Object a4, Object a5, Object a6, Object a7) throws Throwable {
-            try {
-                return target.invokeExact(a0, a1, a2, a3, a4, a5, a6, a7);
-            } catch (Throwable t) {
-                if (!exType.isInstance(t))  throw t;
-                return catcher.invokeExact(t, a0, a1, a2, a3, a4, a5, a6, a7);
-            }
-        }
-        static MethodHandle[] makeInvokes() {
-            ArrayList<MethodHandle> invokes = new ArrayList<>();
-            MethodHandles.Lookup lookup = IMPL_LOOKUP;
-            for (;;) {
-                int nargs = invokes.size();
-                String name = "invoke_L"+nargs;
-                MethodHandle invoke = null;
-                try {
-                    invoke = lookup.findVirtual(GuardWithCatch.class, name, MethodType.genericMethodType(nargs));
-                } catch (ReflectiveOperationException ex) {
-                }
-                if (invoke == null)  break;
-                invokes.add(invoke);
-            }
-            assert(invokes.size() == 9);  // current number of methods
-            return invokes.toArray(new MethodHandle[0]);
-        };
-        static final MethodHandle[] INVOKES = makeInvokes();
-        // For testing use this:
-        //static final MethodHandle[] INVOKES = Arrays.copyOf(makeInvokes(), 2);
-        static final MethodHandle VARARGS_INVOKE;
-        static {
-            try {
-                VARARGS_INVOKE = IMPL_LOOKUP.findVirtual(GuardWithCatch.class, "invoke_V", MethodType.genericMethodType(0, true));
-            } catch (ReflectiveOperationException ex) {
-                throw uncaughtException(ex);
-            }
-        }
-    }
-
-
-    static
-    MethodHandle makeGuardWithCatch(MethodHandle target,
-                                    Class<? extends Throwable> exType,
-                                    MethodHandle catcher) {
-        MethodType type = target.type();
-        MethodType ctype = catcher.type();
-        int nargs = type.parameterCount();
-        if (nargs < GuardWithCatch.INVOKES.length) {
-            MethodType gtype = type.generic();
-            MethodType gcatchType = gtype.insertParameterTypes(0, Throwable.class);
-            // Note: convertArguments(...2) avoids interface casts present in convertArguments(...0)
-            MethodHandle gtarget = makePairwiseConvert(target, gtype, 2);
-            MethodHandle gcatcher = makePairwiseConvert(catcher, gcatchType, 2);
-            GuardWithCatch gguard = new GuardWithCatch(gtarget, exType, gcatcher);
-            if (gtarget == null || gcatcher == null)  throw new InternalError();
-            MethodHandle ginvoker = GuardWithCatch.INVOKES[nargs].bindReceiver(gguard);
-            return makePairwiseConvert(ginvoker, type, 2);
-        } else {
-            MethodHandle gtarget = makeSpreadArguments(target, Object[].class, 0, nargs);
-            catcher = catcher.asType(ctype.changeParameterType(0, Throwable.class));
-            MethodHandle gcatcher = makeSpreadArguments(catcher, Object[].class, 1, nargs);
-            GuardWithCatch gguard = new GuardWithCatch(gtarget, exType, gcatcher);
-            if (gtarget == null || gcatcher == null)  throw new InternalError();
-            MethodHandle ginvoker = GuardWithCatch.VARARGS_INVOKE.bindReceiver(gguard);
-            return makeCollectArguments(ginvoker, ValueConversions.varargsArray(nargs), 0, false);
-        }
-    }
-
-    static
-    MethodHandle throwException(MethodType type) {
-        assert(Throwable.class.isAssignableFrom(type.parameterType(0)));
-        int arity = type.parameterCount();
-        if (arity > 1) {
-            return throwException(type.dropParameterTypes(1, arity)).dropArguments(type, 1, arity-1);
-        }
-        return makePairwiseConvert(throwException(), type, 2);
-    }
-
-    static MethodHandle THROW_EXCEPTION;
-    static MethodHandle throwException() {
-        MethodHandle mh = THROW_EXCEPTION;
-        if (mh != null)  return mh;
-        try {
-            mh
-            = IMPL_LOOKUP.findStatic(MethodHandleImpl.class, "throwException",
-                    MethodType.methodType(Empty.class, Throwable.class));
-        } catch (ReflectiveOperationException ex) {
-            throw new RuntimeException(ex);
-        }
-        THROW_EXCEPTION = mh;
-        return mh;
-    }
-    static <T extends Throwable> Empty throwException(T t) throws T { throw t; }
-
-    static MethodHandle FAKE_METHOD_HANDLE_INVOKE;
-    static
-    MethodHandle fakeMethodHandleInvoke(MemberName method) {
-        MethodType type = method.getInvocationType();
-        assert(type.equals(MethodType.methodType(Object.class, Object[].class)));
-        MethodHandle mh = FAKE_METHOD_HANDLE_INVOKE;
-        if (mh != null)  return mh;
-        mh = throwException(type.insertParameterTypes(0, UnsupportedOperationException.class));
-        mh = mh.bindTo(new UnsupportedOperationException("cannot reflectively invoke MethodHandle"));
-        FAKE_METHOD_HANDLE_INVOKE = mh;
-        return mh;
-    }
-
-    /**
-     * Create an alias for the method handle which, when called,
-     * appears to be called from the same class loader and protection domain
-     * as hostClass.
-     * This is an expensive no-op unless the method which is called
-     * is sensitive to its caller.  A small number of system methods
-     * are in this category, including Class.forName and Method.invoke.
-     */
-    static
-    MethodHandle bindCaller(MethodHandle mh, Class<?> hostClass) {
-        return BindCaller.bindCaller(mh, hostClass);
-    }
-
-    // Put the whole mess into its own nested class.
-    // That way we can lazily load the code and set up the constants.
-    private static class BindCaller {
-        static
-        MethodHandle bindCaller(MethodHandle mh, Class<?> hostClass) {
-            // Do not use this function to inject calls into system classes.
-            if (hostClass == null
-                ||    (hostClass.isArray() ||
-                       hostClass.isPrimitive() ||
-                       hostClass.getName().startsWith("java.") ||
-                       hostClass.getName().startsWith("sun."))) {
-                throw new InternalError();  // does not happen, and should not anyway
-            }
-            // For simplicity, convert mh to a varargs-like method.
-            MethodHandle vamh = prepareForInvoker(mh);
-            // Cache the result of makeInjectedInvoker once per argument class.
-            MethodHandle bccInvoker = CV_makeInjectedInvoker.get(hostClass);
-            return restoreToType(bccInvoker.bindTo(vamh), mh.type());
-        }
-
-        private static final Unsafe UNSAFE = Unsafe.getUnsafe();
-
-        private static MethodHandle makeInjectedInvoker(Class<?> hostClass) {
-            Class<?> bcc = UNSAFE.defineAnonymousClass(hostClass, T_BYTES, null);
-            if (hostClass.getClassLoader() != bcc.getClassLoader())
-                throw new InternalError(hostClass.getName()+" (CL)");
-            try {
-                if (hostClass.getProtectionDomain() != bcc.getProtectionDomain())
-                    throw new InternalError(hostClass.getName()+" (PD)");
-            } catch (SecurityException ex) {
-                // Self-check was blocked by security manager.  This is OK.
-                // In fact the whole try body could be turned into an assertion.
-            }
-            try {
-                MethodHandle init = IMPL_LOOKUP.findStatic(bcc, "init", MethodType.methodType(void.class));
-                init.invokeExact();  // force initialization of the class
-            } catch (Throwable ex) {
-                throw uncaughtException(ex);
-            }
-            MethodHandle bccInvoker;
-            try {
-                MethodType invokerMT = MethodType.methodType(Object.class, MethodHandle.class, Object[].class);
-                bccInvoker = IMPL_LOOKUP.findStatic(bcc, "invoke_V", invokerMT);
-            } catch (ReflectiveOperationException ex) {
-                throw uncaughtException(ex);
-            }
-            // Test the invoker, to ensure that it really injects into the right place.
-            try {
-                MethodHandle vamh = prepareForInvoker(MH_checkCallerClass);
-                Object ok = bccInvoker.invokeExact(vamh, new Object[]{hostClass, bcc});
-            } catch (Throwable ex) {
-                throw newInternalError(ex);
-            }
-            return bccInvoker;
-        }
-        private static ClassValue<MethodHandle> CV_makeInjectedInvoker = new ClassValue<MethodHandle>() {
-            @Override protected MethodHandle computeValue(Class<?> hostClass) {
-                return makeInjectedInvoker(hostClass);
-            }
-        };
-
-        // Adapt mh so that it can be called directly from an injected invoker:
-        private static MethodHandle prepareForInvoker(MethodHandle mh) {
-            mh = mh.asFixedArity();
-            MethodType mt = mh.type();
-            int arity = mt.parameterCount();
-            MethodHandle vamh = mh.asType(mt.generic());
-            vamh.internalForm().compileToBytecode();  // eliminate LFI stack frames
-            vamh = vamh.asSpreader(Object[].class, arity);
-            vamh.internalForm().compileToBytecode();  // eliminate LFI stack frames
-            return vamh;
-        }
-
-        // Undo the adapter effect of prepareForInvoker:
-        private static MethodHandle restoreToType(MethodHandle vamh, MethodType type) {
-            return vamh.asCollector(Object[].class, type.parameterCount()).asType(type);
-        }
-
-        private static final MethodHandle MH_checkCallerClass;
-        static {
-            final Class<?> THIS_CLASS = BindCaller.class;
-            assert(checkCallerClass(THIS_CLASS, THIS_CLASS));
-            try {
-                MH_checkCallerClass = IMPL_LOOKUP
-                    .findStatic(THIS_CLASS, "checkCallerClass",
-                                MethodType.methodType(boolean.class, Class.class, Class.class));
-                assert((boolean) MH_checkCallerClass.invokeExact(THIS_CLASS, THIS_CLASS));
-            } catch (Throwable ex) {
-                throw newInternalError(ex);
-            }
-        }
-
-        @CallerSensitive
-        private static boolean checkCallerClass(Class<?> expected, Class<?> expected2) {
-            // This method is called via MH_checkCallerClass and so it's
-            // correct to ask for the immediate caller here.
-            Class<?> actual = Reflection.getCallerClass();
-            if (actual != expected && actual != expected2)
-                throw new InternalError("found "+actual.getName()+", expected "+expected.getName()
-                                        +(expected == expected2 ? "" : ", or else "+expected2.getName()));
-            return true;
-        }
-
-        private static final byte[] T_BYTES;
-        static {
-            final Object[] values = {null};
-            AccessController.doPrivileged(new PrivilegedAction<Void>() {
-                    public Void run() {
-                        try {
-                            Class<T> tClass = T.class;
-                            String tName = tClass.getName();
-                            String tResource = tName.substring(tName.lastIndexOf('.')+1)+".class";
-                            java.net.URLConnection uconn = tClass.getResource(tResource).openConnection();
-                            int len = uconn.getContentLength();
-                            byte[] bytes = new byte[len];
-                            try (java.io.InputStream str = uconn.getInputStream()) {
-                                int nr = str.read(bytes);
-                                if (nr != len)  throw new java.io.IOException(tResource);
-                            }
-                            values[0] = bytes;
-                        } catch (java.io.IOException ex) {
-                            throw newInternalError(ex);
-                        }
-                        return null;
-                    }
-                });
-            T_BYTES = (byte[]) values[0];
-        }
-
-        // The following class is used as a template for Unsafe.defineAnonymousClass:
-        private static class T {
-            static void init() { }  // side effect: initializes this class
-            static Object invoke_V(MethodHandle vamh, Object[] args) throws Throwable {
-                return vamh.invokeExact(args);
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/MethodHandleInfo.java b/ojluni/src/main/java/java/lang/invoke/MethodHandleInfo.java
deleted file mode 100755
index b73dd63..0000000
--- a/ojluni/src/main/java/java/lang/invoke/MethodHandleInfo.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2012, 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.
- */
-
-package java.lang.invoke;
-import java.lang.invoke.MethodHandleNatives.Constants;
-
-//Not yet public: public
-class MethodHandleInfo {
-   public static final int
-       REF_NONE                    = Constants.REF_NONE,
-       REF_getField                = Constants.REF_getField,
-       REF_getStatic               = Constants.REF_getStatic,
-       REF_putField                = Constants.REF_putField,
-       REF_putStatic               = Constants.REF_putStatic,
-       REF_invokeVirtual           = Constants.REF_invokeVirtual,
-       REF_invokeStatic            = Constants.REF_invokeStatic,
-       REF_invokeSpecial           = Constants.REF_invokeSpecial,
-       REF_newInvokeSpecial        = Constants.REF_newInvokeSpecial,
-       REF_invokeInterface         = Constants.REF_invokeInterface;
-
-   private final Class<?> declaringClass;
-   private final String name;
-   private final MethodType methodType;
-   private final int referenceKind;
-
-   public MethodHandleInfo(MethodHandle mh) throws ReflectiveOperationException {
-       MemberName mn = mh.internalMemberName();
-       this.declaringClass = mn.getDeclaringClass();
-       this.name = mn.getName();
-       this.methodType = mn.getMethodType();
-       this.referenceKind = mn.getReferenceKind();
-   }
-
-   public Class<?> getDeclaringClass() {
-       return declaringClass;
-   }
-
-   public String getName() {
-       return name;
-   }
-
-   public MethodType getMethodType() {
-       return methodType;
-   }
-
-   public int getReferenceKind() {
-       return referenceKind;
-   }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/MethodHandleNatives.java b/ojluni/src/main/java/java/lang/invoke/MethodHandleNatives.java
deleted file mode 100755
index c6941f2..0000000
--- a/ojluni/src/main/java/java/lang/invoke/MethodHandleNatives.java
+++ /dev/null
@@ -1,534 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, 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.
- */
-
-package java.lang.invoke;
-
-import java.lang.invoke.MethodHandles.Lookup;
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Field;
-import static java.lang.invoke.MethodHandleNatives.Constants.*;
-import static java.lang.invoke.MethodHandleStatics.*;
-import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
-
-/**
- * The JVM interface for the method handles package is all here.
- * This is an interface internal and private to an implemetantion of JSR 292.
- * <em>This class is not part of the JSR 292 standard.</em>
- * @author jrose
- */
-class MethodHandleNatives {
-
-    private MethodHandleNatives() { } // static only
-
-    /// MemberName support
-
-    static native void init(MemberName self, Object ref);
-    static native void expand(MemberName self);
-    static native MemberName resolve(MemberName self, Class<?> caller) throws LinkageError;
-    static native int getMembers(Class<?> defc, String matchName, String matchSig,
-            int matchFlags, Class<?> caller, int skip, MemberName[] results);
-
-    /// Field layout queries parallel to sun.misc.Unsafe:
-    static native long objectFieldOffset(MemberName self);  // e.g., returns vmindex
-    static native long staticFieldOffset(MemberName self);  // e.g., returns vmindex
-    static native Object staticFieldBase(MemberName self);  // e.g., returns clazz
-    static native Object getMemberVMInfo(MemberName self);  // returns {vmindex,vmtarget}
-
-    /// MethodHandle support
-
-    /** Fetch MH-related JVM parameter.
-     *  which=0 retrieves MethodHandlePushLimit
-     *  which=1 retrieves stack slot push size (in address units)
-     */
-    static native int getConstant(int which);
-
-    static final boolean COUNT_GWT;
-
-    /// CallSite support
-
-    /** Tell the JVM that we need to change the target of a CallSite. */
-    static native void setCallSiteTargetNormal(CallSite site, MethodHandle target);
-    static native void setCallSiteTargetVolatile(CallSite site, MethodHandle target);
-
-    private static native void registerNatives();
-    static {
-        registerNatives();
-        COUNT_GWT                   = getConstant(Constants.GC_COUNT_GWT) != 0;
-
-        // The JVM calls MethodHandleNatives.<clinit>.  Cascade the <clinit> calls as needed:
-        MethodHandleImpl.initStatics();
-}
-
-    // All compile-time constants go here.
-    // There is an opportunity to check them against the JVM's idea of them.
-    static class Constants {
-        Constants() { } // static only
-        // MethodHandleImpl
-        static final int // for getConstant
-                GC_COUNT_GWT = 4,
-                GC_LAMBDA_SUPPORT = 5;
-
-        // MemberName
-        // The JVM uses values of -2 and above for vtable indexes.
-        // Field values are simple positive offsets.
-        // Ref: src/share/vm/oops/methodOop.hpp
-        // This value is negative enough to avoid such numbers,
-        // but not too negative.
-        static final int
-                MN_IS_METHOD           = 0x00010000, // method (not constructor)
-                MN_IS_CONSTRUCTOR      = 0x00020000, // constructor
-                MN_IS_FIELD            = 0x00040000, // field
-                MN_IS_TYPE             = 0x00080000, // nested type
-                MN_CALLER_SENSITIVE    = 0x00100000, // @CallerSensitive annotation detected
-                MN_REFERENCE_KIND_SHIFT = 24, // refKind
-                MN_REFERENCE_KIND_MASK = 0x0F000000 >> MN_REFERENCE_KIND_SHIFT,
-                // The SEARCH_* bits are not for MN.flags but for the matchFlags argument of MHN.getMembers:
-                MN_SEARCH_SUPERCLASSES = 0x00100000,
-                MN_SEARCH_INTERFACES   = 0x00200000;
-
-        /**
-         * Basic types as encoded in the JVM.  These code values are not
-         * intended for use outside this class.  They are used as part of
-         * a private interface between the JVM and this class.
-         */
-        static final int
-            T_BOOLEAN  =  4,
-            T_CHAR     =  5,
-            T_FLOAT    =  6,
-            T_DOUBLE   =  7,
-            T_BYTE     =  8,
-            T_SHORT    =  9,
-            T_INT      = 10,
-            T_LONG     = 11,
-            T_OBJECT   = 12,
-            //T_ARRAY    = 13
-            T_VOID     = 14,
-            //T_ADDRESS  = 15
-            T_ILLEGAL  = 99;
-
-        /**
-         * Constant pool entry types.
-         */
-        static final byte
-            CONSTANT_Utf8                = 1,
-            CONSTANT_Integer             = 3,
-            CONSTANT_Float               = 4,
-            CONSTANT_Long                = 5,
-            CONSTANT_Double              = 6,
-            CONSTANT_Class               = 7,
-            CONSTANT_String              = 8,
-            CONSTANT_Fieldref            = 9,
-            CONSTANT_Methodref           = 10,
-            CONSTANT_InterfaceMethodref  = 11,
-            CONSTANT_NameAndType         = 12,
-            CONSTANT_MethodHandle        = 15,  // JSR 292
-            CONSTANT_MethodType          = 16,  // JSR 292
-            CONSTANT_InvokeDynamic       = 18,
-            CONSTANT_LIMIT               = 19;   // Limit to tags found in classfiles
-
-        /**
-         * Access modifier flags.
-         */
-        static final char
-            ACC_PUBLIC                 = 0x0001,
-            ACC_PRIVATE                = 0x0002,
-            ACC_PROTECTED              = 0x0004,
-            ACC_STATIC                 = 0x0008,
-            ACC_FINAL                  = 0x0010,
-            ACC_SYNCHRONIZED           = 0x0020,
-            ACC_VOLATILE               = 0x0040,
-            ACC_TRANSIENT              = 0x0080,
-            ACC_NATIVE                 = 0x0100,
-            ACC_INTERFACE              = 0x0200,
-            ACC_ABSTRACT               = 0x0400,
-            ACC_STRICT                 = 0x0800,
-            ACC_SYNTHETIC              = 0x1000,
-            ACC_ANNOTATION             = 0x2000,
-            ACC_ENUM                   = 0x4000,
-            // aliases:
-            ACC_SUPER                  = ACC_SYNCHRONIZED,
-            ACC_BRIDGE                 = ACC_VOLATILE,
-            ACC_VARARGS                = ACC_TRANSIENT;
-
-        /**
-         * Constant pool reference-kind codes, as used by CONSTANT_MethodHandle CP entries.
-         */
-        static final byte
-            REF_NONE                    = 0,  // null value
-            REF_getField                = 1,
-            REF_getStatic               = 2,
-            REF_putField                = 3,
-            REF_putStatic               = 4,
-            REF_invokeVirtual           = 5,
-            REF_invokeStatic            = 6,
-            REF_invokeSpecial           = 7,
-            REF_newInvokeSpecial        = 8,
-            REF_invokeInterface         = 9,
-            REF_LIMIT                  = 10;
-    }
-
-    static boolean refKindIsValid(int refKind) {
-        return (refKind > REF_NONE && refKind < REF_LIMIT);
-    }
-    static boolean refKindIsField(byte refKind) {
-        assert(refKindIsValid(refKind));
-        return (refKind <= REF_putStatic);
-    }
-    static boolean refKindIsGetter(byte refKind) {
-        assert(refKindIsValid(refKind));
-        return (refKind <= REF_getStatic);
-    }
-    static boolean refKindIsSetter(byte refKind) {
-        return refKindIsField(refKind) && !refKindIsGetter(refKind);
-    }
-    static boolean refKindIsMethod(byte refKind) {
-        return !refKindIsField(refKind) && (refKind != REF_newInvokeSpecial);
-    }
-    static boolean refKindHasReceiver(byte refKind) {
-        assert(refKindIsValid(refKind));
-        return (refKind & 1) != 0;
-    }
-    static boolean refKindIsStatic(byte refKind) {
-        return !refKindHasReceiver(refKind) && (refKind != REF_newInvokeSpecial);
-    }
-    static boolean refKindDoesDispatch(byte refKind) {
-        assert(refKindIsValid(refKind));
-        return (refKind == REF_invokeVirtual ||
-                refKind == REF_invokeInterface);
-    }
-    static {
-        final int HR_MASK = ((1 << REF_getField) |
-                             (1 << REF_putField) |
-                             (1 << REF_invokeVirtual) |
-                             (1 << REF_invokeSpecial) |
-                             (1 << REF_invokeInterface)
-                            );
-        for (byte refKind = REF_NONE+1; refKind < REF_LIMIT; refKind++) {
-            assert(refKindHasReceiver(refKind) == (((1<<refKind) & HR_MASK) != 0)) : refKind;
-        }
-    }
-    static String refKindName(byte refKind) {
-        assert(refKindIsValid(refKind));
-        return REFERENCE_KIND_NAME[refKind];
-    }
-    private static String[] REFERENCE_KIND_NAME = {
-            null,
-            "getField",
-            "getStatic",
-            "putField",
-            "putStatic",
-            "invokeVirtual",
-            "invokeStatic",
-            "invokeSpecial",
-            "newInvokeSpecial",
-            "invokeInterface"
-    };
-
-    private static native int getNamedCon(int which, Object[] name);
-    static boolean verifyConstants() {
-        Object[] box = { null };
-        for (int i = 0; ; i++) {
-            box[0] = null;
-            int vmval = getNamedCon(i, box);
-            if (box[0] == null)  break;
-            String name = (String) box[0];
-            try {
-                Field con = Constants.class.getDeclaredField(name);
-                int jval = con.getInt(null);
-                if (jval == vmval)  continue;
-                String err = (name+": JVM has "+vmval+" while Java has "+jval);
-                if (name.equals("CONV_OP_LIMIT")) {
-                    System.err.println("warning: "+err);
-                    continue;
-                }
-                throw new InternalError(err);
-            } catch (NoSuchFieldException | IllegalAccessException ex) {
-                String err = (name+": JVM has "+vmval+" which Java does not define");
-                // ignore exotic ops the JVM cares about; we just wont issue them
-                //System.err.println("warning: "+err);
-                continue;
-            }
-        }
-        return true;
-    }
-    static {
-        assert(verifyConstants());
-    }
-
-    // Up-calls from the JVM.
-    // These must NOT be public.
-
-    /**
-     * The JVM is linking an invokedynamic instruction.  Create a reified call site for it.
-     */
-    static MemberName linkCallSite(Object callerObj,
-                                   Object bootstrapMethodObj,
-                                   Object nameObj, Object typeObj,
-                                   Object staticArguments,
-                                   Object[] appendixResult) {
-        MethodHandle bootstrapMethod = (MethodHandle)bootstrapMethodObj;
-        Class<?> caller = (Class<?>)callerObj;
-        String name = nameObj.toString().intern();
-        MethodType type = (MethodType)typeObj;
-        appendixResult[0] = CallSite.makeSite(bootstrapMethod,
-                                              name,
-                                              type,
-                                              staticArguments,
-                                              caller);
-        return Invokers.linkToCallSiteMethod(type);
-    }
-
-    /**
-     * The JVM wants a pointer to a MethodType.  Oblige it by finding or creating one.
-     */
-    static MethodType findMethodHandleType(Class<?> rtype, Class<?>[] ptypes) {
-        return MethodType.makeImpl(rtype, ptypes, true);
-    }
-
-    /**
-     * The JVM wants to link a call site that requires a dynamic type check.
-     * Name is a type-checking invoker, invokeExact or invoke.
-     * Return a JVM method (MemberName) to handle the invoking.
-     * The method assumes the following arguments on the stack:
-     * 0: the method handle being invoked
-     * 1-N: the arguments to the method handle invocation
-     * N+1: an implicitly added type argument (the given MethodType)
-     */
-    static MemberName linkMethod(Class<?> callerClass, int refKind,
-                                 Class<?> defc, String name, Object type,
-                                 Object[] appendixResult) {
-        if (!TRACE_METHOD_LINKAGE)
-            return linkMethodImpl(callerClass, refKind, defc, name, type, appendixResult);
-        return linkMethodTracing(callerClass, refKind, defc, name, type, appendixResult);
-    }
-    static MemberName linkMethodImpl(Class<?> callerClass, int refKind,
-                                     Class<?> defc, String name, Object type,
-                                     Object[] appendixResult) {
-        try {
-            if (defc == MethodHandle.class && refKind == REF_invokeVirtual) {
-                switch (name) {
-                case "invoke":
-                    return Invokers.genericInvokerMethod(fixMethodType(callerClass, type), appendixResult);
-                case "invokeExact":
-                    return Invokers.exactInvokerMethod(fixMethodType(callerClass, type), appendixResult);
-                }
-            }
-        } catch (Throwable ex) {
-            if (ex instanceof LinkageError)
-                throw (LinkageError) ex;
-            else
-                throw new LinkageError(ex.getMessage(), ex);
-        }
-        throw new LinkageError("no such method "+defc.getName()+"."+name+type);
-    }
-    private static MethodType fixMethodType(Class<?> callerClass, Object type) {
-        if (type instanceof MethodType)
-            return (MethodType) type;
-        else
-            return MethodType.fromMethodDescriptorString((String)type, callerClass.getClassLoader());
-    }
-    // Tracing logic:
-    static MemberName linkMethodTracing(Class<?> callerClass, int refKind,
-                                        Class<?> defc, String name, Object type,
-                                        Object[] appendixResult) {
-        System.out.println("linkMethod "+defc.getName()+"."+
-                           name+type+"/"+Integer.toHexString(refKind));
-        try {
-            MemberName res = linkMethodImpl(callerClass, refKind, defc, name, type, appendixResult);
-            System.out.println("linkMethod => "+res+" + "+appendixResult[0]);
-            return res;
-        } catch (Throwable ex) {
-            System.out.println("linkMethod => throw "+ex);
-            throw ex;
-        }
-    }
-
-
-    /**
-     * The JVM is resolving a CONSTANT_MethodHandle CP entry.  And it wants our help.
-     * It will make an up-call to this method.  (Do not change the name or signature.)
-     * The type argument is a Class for field requests and a MethodType for non-fields.
-     * <p>
-     * Recent versions of the JVM may also pass a resolved MemberName for the type.
-     * In that case, the name is ignored and may be null.
-     */
-    static MethodHandle linkMethodHandleConstant(Class<?> callerClass, int refKind,
-                                                 Class<?> defc, String name, Object type) {
-        try {
-            Lookup lookup = IMPL_LOOKUP.in(callerClass);
-            assert(refKindIsValid(refKind));
-            return lookup.linkMethodHandleConstant((byte) refKind, defc, name, type);
-        } catch (ReflectiveOperationException ex) {
-            Error err = new IncompatibleClassChangeError();
-            err.initCause(ex);
-            throw err;
-        }
-    }
-
-    /**
-     * Is this method a caller-sensitive method?
-     * I.e., does it call Reflection.getCallerClass or a similer method
-     * to ask about the identity of its caller?
-     */
-    static boolean isCallerSensitive(MemberName mem) {
-        if (!mem.isMethod())  return false;  // only methods are caller sensitive
-
-        // when the VM support is available, call mem.isCallerSensitive() instead
-        return isCallerSensitiveMethod(mem.getDeclaringClass(), mem.getName()) ||
-                  canBeCalledVirtual(mem);
-    }
-
-    // this method is also called by test/sun/reflect/CallerSensitiveFinder
-    // to validate the hand-maintained list
-    private static boolean isCallerSensitiveMethod(Class<?> defc, String method) {
-        switch (method) {
-        case "doPrivileged":
-        case "doPrivilegedWithCombiner":
-            return defc == java.security.AccessController.class;
-        case "checkMemberAccess":
-            return defc == java.lang.SecurityManager.class;
-        case "getUnsafe":
-            return defc == sun.misc.Unsafe.class;
-        case "lookup":
-            return defc == java.lang.invoke.MethodHandles.class;
-        case "invoke":
-            return defc == java.lang.reflect.Method.class;
-        case "get":
-        case "getBoolean":
-        case "getByte":
-        case "getChar":
-        case "getShort":
-        case "getInt":
-        case "getLong":
-        case "getFloat":
-        case "getDouble":
-        case "set":
-        case "setBoolean":
-        case "setByte":
-        case "setChar":
-        case "setShort":
-        case "setInt":
-        case "setLong":
-        case "setFloat":
-        case "setDouble":
-            return defc == java.lang.reflect.Field.class;
-        case "newInstance":
-            if (defc == java.lang.reflect.Constructor.class)  return true;
-            if (defc == java.lang.Class.class)  return true;
-            break;
-        case "getFields":
-            return defc == java.lang.Class.class ||
-                   defc == javax.sql.rowset.serial.SerialJavaObject.class;
-        case "forName":
-        case "getClassLoader":
-        case "getClasses":
-        case "getMethods":
-        case "getConstructors":
-        case "getDeclaredClasses":
-        case "getDeclaredFields":
-        case "getDeclaredMethods":
-        case "getDeclaredConstructors":
-        case "getField":
-        case "getMethod":
-        case "getConstructor":
-        case "getDeclaredField":
-        case "getDeclaredMethod":
-        case "getDeclaredConstructor":
-        case "getEnclosingClass":
-        case "getEnclosingMethod":
-        case "getEnclosingConstructor":
-            return defc == java.lang.Class.class;
-        case "getConnection":
-        case "getDriver":
-        case "getDrivers":
-        case "deregisterDriver":
-            return defc == java.sql.DriverManager.class;
-        case "newUpdater":
-            if (defc == java.util.concurrent.atomic.AtomicIntegerFieldUpdater.class)  return true;
-            if (defc == java.util.concurrent.atomic.AtomicLongFieldUpdater.class)  return true;
-            if (defc == java.util.concurrent.atomic.AtomicReferenceFieldUpdater.class)  return true;
-            break;
-        case "getContextClassLoader":
-            return defc == java.lang.Thread.class;
-        case "getPackage":
-        case "getPackages":
-            return defc == java.lang.Package.class;
-        case "getParent":
-        case "getSystemClassLoader":
-            return defc == java.lang.ClassLoader.class;
-        case "load":
-        case "loadLibrary":
-            if (defc == java.lang.Runtime.class)  return true;
-            if (defc == java.lang.System.class)  return true;
-            break;
-        case "getCallerClass":
-            if (defc == sun.reflect.Reflection.class)  return true;
-            if (defc == java.lang.System.class)  return true;
-            break;
-        case "getCallerClassLoader":
-            return defc == java.lang.ClassLoader.class;
-        case "registerAsParallelCapable":
-            return defc == java.lang.ClassLoader.class;
-        case "getProxyClass":
-        case "newProxyInstance":
-            return defc == java.lang.reflect.Proxy.class;
-        case "asInterfaceInstance":
-            return defc == java.lang.invoke.MethodHandleProxies.class;
-        case "getBundle":
-        case "clearCache":
-            return defc == java.util.ResourceBundle.class;
-        case "getType":
-            return defc == java.io.ObjectStreamField.class;
-        case "forClass":
-            return defc == java.io.ObjectStreamClass.class;
-        case "getLogger":
-            return defc == java.util.logging.Logger.class;
-        case "getAnonymousLogger":
-            return defc == java.util.logging.Logger.class;
-        }
-        return false;
-    }
-
-
-    private static boolean canBeCalledVirtual(MemberName mem) {
-        assert(mem.isInvocable());
-        Class<?> defc = mem.getDeclaringClass();
-        switch (mem.getName()) {
-        case "checkMemberAccess":
-            return canBeCalledVirtual(mem, java.lang.SecurityManager.class);
-        case "getContextClassLoader":
-            return canBeCalledVirtual(mem, java.lang.Thread.class);
-        }
-        return false;
-    }
-
-    static boolean canBeCalledVirtual(MemberName symbolicRef, Class<?> definingClass) {
-        Class<?> symbolicRefClass = symbolicRef.getDeclaringClass();
-        if (symbolicRefClass == definingClass)  return true;
-        if (symbolicRef.isStatic() || symbolicRef.isPrivate())  return false;
-        return (definingClass.isAssignableFrom(symbolicRefClass) ||  // Msym overrides Mdef
-                symbolicRefClass.isInterface());                     // Mdef implements Msym
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/MethodHandleProxies.java b/ojluni/src/main/java/java/lang/invoke/MethodHandleProxies.java
deleted file mode 100755
index 5678039..0000000
--- a/ojluni/src/main/java/java/lang/invoke/MethodHandleProxies.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package java.lang.invoke;
-
-import java.lang.reflect.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import sun.invoke.WrapperInstance;
-import java.util.ArrayList;
-import sun.reflect.Reflection;
-import sun.reflect.CallerSensitive;
-import sun.reflect.misc.ReflectUtil;
-
-/**
- * This class consists exclusively of static methods that help adapt
- * method handles to other JVM types, such as interfaces.
- */
-public class MethodHandleProxies {
-
-    private MethodHandleProxies() { }  // do not instantiate
-
-    /**
-     * Produces an instance of the given single-method interface which redirects
-     * its calls to the given method handle.
-     * <p>
-     * A single-method interface is an interface which declares a uniquely named method.
-     * When determining the uniquely named method of a single-method interface,
-     * the public {@code Object} methods ({@code toString}, {@code equals}, {@code hashCode})
-     * are disregarded.  For example, {@link java.util.Comparator} is a single-method interface,
-     * even though it re-declares the {@code Object.equals} method.
-     * <p>
-     * The interface must be public.  No additional access checks are performed.
-     * <p>
-     * The resulting instance of the required type will respond to
-     * invocation of the type's uniquely named method by calling
-     * the given target on the incoming arguments,
-     * and returning or throwing whatever the target
-     * returns or throws.  The invocation will be as if by
-     * {@code target.invoke}.
-     * The target's type will be checked before the
-     * instance is created, as if by a call to {@code asType},
-     * which may result in a {@code WrongMethodTypeException}.
-     * <p>
-     * The uniquely named method is allowed to be multiply declared,
-     * with distinct type descriptors.  (E.g., it can be overloaded,
-     * or can possess bridge methods.)  All such declarations are
-     * connected directly to the target method handle.
-     * Argument and return types are adjusted by {@code asType}
-     * for each individual declaration.
-     * <p>
-     * The wrapper instance will implement the requested interface
-     * and its super-types, but no other single-method interfaces.
-     * This means that the instance will not unexpectedly
-     * pass an {@code instanceof} test for any unrequested type.
-     * <p style="font-size:smaller;">
-     * <em>Implementation Note:</em>
-     * Therefore, each instance must implement a unique single-method interface.
-     * Implementations may not bundle together
-     * multiple single-method interfaces onto single implementation classes
-     * in the style of {@link java.awt.AWTEventMulticaster}.
-     * <p>
-     * The method handle may throw an <em>undeclared exception</em>,
-     * which means any checked exception (or other checked throwable)
-     * not declared by the requested type's single abstract method.
-     * If this happens, the throwable will be wrapped in an instance of
-     * {@link java.lang.reflect.UndeclaredThrowableException UndeclaredThrowableException}
-     * and thrown in that wrapped form.
-     * <p>
-     * Like {@link java.lang.Integer#valueOf Integer.valueOf},
-     * {@code asInterfaceInstance} is a factory method whose results are defined
-     * by their behavior.
-     * It is not guaranteed to return a new instance for every call.
-     * <p>
-     * Because of the possibility of {@linkplain java.lang.reflect.Method#isBridge bridge methods}
-     * and other corner cases, the interface may also have several abstract methods
-     * with the same name but having distinct descriptors (types of returns and parameters).
-     * In this case, all the methods are bound in common to the one given target.
-     * The type check and effective {@code asType} conversion is applied to each
-     * method type descriptor, and all abstract methods are bound to the target in common.
-     * Beyond this type check, no further checks are made to determine that the
-     * abstract methods are related in any way.
-     * <p>
-     * Future versions of this API may accept additional types,
-     * such as abstract classes with single abstract methods.
-     * Future versions of this API may also equip wrapper instances
-     * with one or more additional public "marker" interfaces.
-     *
-     * @param target the method handle to invoke from the wrapper
-     * @param intfc the desired type of the wrapper, a single-method interface
-     * @return a correctly-typed wrapper for the given target
-     * @throws NullPointerException if either argument is null
-     * @throws IllegalArgumentException if the {@code intfc} is not a
-     *         valid argument to this method
-     * @throws WrongMethodTypeException if the target cannot
-     *         be converted to the type required by the requested interface
-     */
-    // Other notes to implementors:
-    // <p>
-    // No stable mapping is promised between the single-method interface and
-    // the implementation class C.  Over time, several implementation
-    // classes might be used for the same type.
-    // <p>
-    // If the implementation is able
-    // to prove that a wrapper of the required type
-    // has already been created for a given
-    // method handle, or for another method handle with the
-    // same behavior, the implementation may return that wrapper in place of
-    // a new wrapper.
-    // <p>
-    // This method is designed to apply to common use cases
-    // where a single method handle must interoperate with
-    // an interface that implements a function-like
-    // API.  Additional variations, such as single-abstract-method classes with
-    // private constructors, or interfaces with multiple but related
-    // entry points, must be covered by hand-written or automatically
-    // generated adapter classes.
-    //
-    @CallerSensitive
-    public static
-    <T> T asInterfaceInstance(final Class<T> intfc, final MethodHandle target) {
-        if (!intfc.isInterface() || !Modifier.isPublic(intfc.getModifiers()))
-            throw new IllegalArgumentException("not a public interface: "+intfc.getName());
-        final MethodHandle mh;
-        if (System.getSecurityManager() != null) {
-            final Class<?> caller = Reflection.getCallerClass();
-            final ClassLoader ccl = (caller != null) ? caller.getClassLoader() : null;
-            ReflectUtil.checkProxyPackageAccess(ccl, intfc);
-            mh = maybeBindCaller(target, caller);
-        } else {
-            mh = target;
-        }
-        ClassLoader proxyLoader = intfc.getClassLoader();
-        if (proxyLoader == null) {
-            ClassLoader cl = Thread.currentThread().getContextClassLoader(); // avoid use of BCP
-            proxyLoader = cl != null ? cl : ClassLoader.getSystemClassLoader();
-        }
-        final Method[] methods = getSingleNameMethods(intfc);
-        if (methods == null)
-            throw new IllegalArgumentException("not a single-method interface: "+intfc.getName());
-        final MethodHandle[] vaTargets = new MethodHandle[methods.length];
-        for (int i = 0; i < methods.length; i++) {
-            Method sm = methods[i];
-            MethodType smMT = MethodType.methodType(sm.getReturnType(), sm.getParameterTypes());
-            MethodHandle checkTarget = mh.asType(smMT);  // make throw WMT
-            checkTarget = checkTarget.asType(checkTarget.type().changeReturnType(Object.class));
-            vaTargets[i] = checkTarget.asSpreader(Object[].class, smMT.parameterCount());
-        }
-        final InvocationHandler ih = new InvocationHandler() {
-                private Object getArg(String name) {
-                    if ((Object)name == "getWrapperInstanceTarget")  return target;
-                    if ((Object)name == "getWrapperInstanceType")    return intfc;
-                    throw new AssertionError();
-                }
-                public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-                    for (int i = 0; i < methods.length; i++) {
-                        if (method.equals(methods[i]))
-                            return vaTargets[i].invokeExact(args);
-                    }
-                    if (method.getDeclaringClass() == WrapperInstance.class)
-                        return getArg(method.getName());
-                    if (isObjectMethod(method))
-                        return callObjectMethod(proxy, method, args);
-                    throw new InternalError("bad proxy method: "+method);
-                }
-            };
-
-        final Object proxy;
-        if (System.getSecurityManager() != null) {
-            // sun.invoke.WrapperInstance is a restricted interface not accessible
-            // by any non-null class loader.
-            final ClassLoader loader = proxyLoader;
-            proxy = AccessController.doPrivileged(new PrivilegedAction<Object>() {
-                public Object run() {
-                    return Proxy.newProxyInstance(
-                            loader,
-                            new Class<?>[]{ intfc, WrapperInstance.class },
-                            ih);
-                }
-            });
-        } else {
-            proxy = Proxy.newProxyInstance(proxyLoader,
-                                           new Class<?>[]{ intfc, WrapperInstance.class },
-                                           ih);
-        }
-        return intfc.cast(proxy);
-    }
-
-    private static MethodHandle maybeBindCaller(MethodHandle target, Class<?> hostClass) {
-        if (hostClass == null || hostClass.getClassLoader() == null)
-            return target;
-
-        MethodHandle cbmh = MethodHandleImpl.bindCaller(target, hostClass);
-        if (target.isVarargsCollector()) {
-            MethodType type = cbmh.type();
-            int arity = type.parameterCount();
-            return cbmh.asVarargsCollector(type.parameterType(arity-1));
-        }
-        return cbmh;
-    }
-
-    /**
-     * Determines if the given object was produced by a call to {@link #asInterfaceInstance asInterfaceInstance}.
-     * @param x any reference
-     * @return true if the reference is not null and points to an object produced by {@code asInterfaceInstance}
-     */
-    public static
-    boolean isWrapperInstance(Object x) {
-        return x instanceof WrapperInstance;
-    }
-
-    private static WrapperInstance asWrapperInstance(Object x) {
-        try {
-            if (x != null)
-                return (WrapperInstance) x;
-        } catch (ClassCastException ex) {
-        }
-        throw new IllegalArgumentException("not a wrapper instance");
-    }
-
-    /**
-     * Produces or recovers a target method handle which is behaviorally
-     * equivalent to the unique method of this wrapper instance.
-     * The object {@code x} must have been produced by a call to {@link #asInterfaceInstance asInterfaceInstance}.
-     * This requirement may be tested via {@link #isWrapperInstance isWrapperInstance}.
-     * @param x any reference
-     * @return a method handle implementing the unique method
-     * @throws IllegalArgumentException if the reference x is not to a wrapper instance
-     */
-    public static
-    MethodHandle wrapperInstanceTarget(Object x) {
-        return asWrapperInstance(x).getWrapperInstanceTarget();
-    }
-
-    /**
-     * Recovers the unique single-method interface type for which this wrapper instance was created.
-     * The object {@code x} must have been produced by a call to {@link #asInterfaceInstance asInterfaceInstance}.
-     * This requirement may be tested via {@link #isWrapperInstance isWrapperInstance}.
-     * @param x any reference
-     * @return the single-method interface type for which the wrapper was created
-     * @throws IllegalArgumentException if the reference x is not to a wrapper instance
-     */
-    public static
-    Class<?> wrapperInstanceType(Object x) {
-        return asWrapperInstance(x).getWrapperInstanceType();
-    }
-
-    private static
-    boolean isObjectMethod(Method m) {
-        switch (m.getName()) {
-        case "toString":
-            return (m.getReturnType() == String.class
-                    && m.getParameterTypes().length == 0);
-        case "hashCode":
-            return (m.getReturnType() == int.class
-                    && m.getParameterTypes().length == 0);
-        case "equals":
-            return (m.getReturnType() == boolean.class
-                    && m.getParameterTypes().length == 1
-                    && m.getParameterTypes()[0] == Object.class);
-        }
-        return false;
-    }
-
-    private static
-    Object callObjectMethod(Object self, Method m, Object[] args) {
-        assert(isObjectMethod(m)) : m;
-        switch (m.getName()) {
-        case "toString":
-            return self.getClass().getName() + "@" + Integer.toHexString(self.hashCode());
-        case "hashCode":
-            return System.identityHashCode(self);
-        case "equals":
-            return (self == args[0]);
-        }
-        return null;
-    }
-
-    private static
-    Method[] getSingleNameMethods(Class<?> intfc) {
-        ArrayList<Method> methods = new ArrayList<Method>();
-        String uniqueName = null;
-        for (Method m : intfc.getMethods()) {
-            if (isObjectMethod(m))  continue;
-            if (!Modifier.isAbstract(m.getModifiers()))  continue;
-            String mname = m.getName();
-            if (uniqueName == null)
-                uniqueName = mname;
-            else if (!uniqueName.equals(mname))
-                return null;  // too many abstract methods
-            methods.add(m);
-        }
-        if (uniqueName == null)  return null;
-        return methods.toArray(new Method[methods.size()]);
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/MethodHandleStatics.java b/ojluni/src/main/java/java/lang/invoke/MethodHandleStatics.java
deleted file mode 100755
index 4e01050..0000000
--- a/ojluni/src/main/java/java/lang/invoke/MethodHandleStatics.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, 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.
- */
-
-package java.lang.invoke;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import sun.misc.Unsafe;
-
-/**
- * This class consists exclusively of static names internal to the
- * method handle implementation.
- * Usage:  {@code import static java.lang.invoke.MethodHandleStatics.*}
- * @author John Rose, JSR 292 EG
- */
-/*non-public*/ class MethodHandleStatics {
-
-    private MethodHandleStatics() { }  // do not instantiate
-
-    static final Unsafe UNSAFE = Unsafe.getUnsafe();
-
-    static final boolean DEBUG_METHOD_HANDLE_NAMES;
-    static final boolean DUMP_CLASS_FILES;
-    static final boolean TRACE_INTERPRETER;
-    static final boolean TRACE_METHOD_LINKAGE;
-    static final Integer COMPILE_THRESHOLD;
-    static {
-        final Object[] values = { false, false, false, false, null };
-        AccessController.doPrivileged(new PrivilegedAction<Void>() {
-                public Void run() {
-                    values[0] = Boolean.getBoolean("java.lang.invoke.MethodHandle.DEBUG_NAMES");
-                    values[1] = Boolean.getBoolean("java.lang.invoke.MethodHandle.DUMP_CLASS_FILES");
-                    values[2] = Boolean.getBoolean("java.lang.invoke.MethodHandle.TRACE_INTERPRETER");
-                    values[3] = Boolean.getBoolean("java.lang.invoke.MethodHandle.TRACE_METHOD_LINKAGE");
-                    values[4] = Integer.getInteger("java.lang.invoke.MethodHandle.COMPILE_THRESHOLD");
-                    return null;
-                }
-            });
-        DEBUG_METHOD_HANDLE_NAMES = (Boolean) values[0];
-        DUMP_CLASS_FILES          = (Boolean) values[1];
-        TRACE_INTERPRETER         = (Boolean) values[2];
-        TRACE_METHOD_LINKAGE      = (Boolean) values[3];
-        COMPILE_THRESHOLD         = (Integer) values[4];
-    }
-
-    /*non-public*/ static String getNameString(MethodHandle target, MethodType type) {
-        if (type == null)
-            type = target.type();
-        MemberName name = null;
-        if (target != null)
-            name = target.internalMemberName();
-        if (name == null)
-            return "invoke" + type;
-        return name.getName() + type;
-    }
-
-    /*non-public*/ static String getNameString(MethodHandle target, MethodHandle typeHolder) {
-        return getNameString(target, typeHolder == null ? (MethodType) null : typeHolder.type());
-    }
-
-    /*non-public*/ static String getNameString(MethodHandle target) {
-        return getNameString(target, (MethodType) null);
-    }
-
-    /*non-public*/ static String addTypeString(Object obj, MethodHandle target) {
-        String str = String.valueOf(obj);
-        if (target == null)  return str;
-        int paren = str.indexOf('(');
-        if (paren >= 0) str = str.substring(0, paren);
-        return str + target.type();
-    }
-
-    // handy shared exception makers (they simplify the common case code)
-    /*non-public*/ static InternalError newInternalError(String message, Throwable cause) {
-        InternalError e = new InternalError(message);
-        e.initCause(cause);
-        return e;
-    }
-    /*non-public*/ static InternalError newInternalError(Throwable cause) {
-        InternalError e = new InternalError();
-        e.initCause(cause);
-        return e;
-    }
-    /*non-public*/ static RuntimeException newIllegalStateException(String message) {
-        return new IllegalStateException(message);
-    }
-    /*non-public*/ static RuntimeException newIllegalStateException(String message, Object obj) {
-        return new IllegalStateException(message(message, obj));
-    }
-    /*non-public*/ static RuntimeException newIllegalArgumentException(String message) {
-        return new IllegalArgumentException(message);
-    }
-    /*non-public*/ static RuntimeException newIllegalArgumentException(String message, Object obj) {
-        return new IllegalArgumentException(message(message, obj));
-    }
-    /*non-public*/ static RuntimeException newIllegalArgumentException(String message, Object obj, Object obj2) {
-        return new IllegalArgumentException(message(message, obj, obj2));
-    }
-    /*non-public*/ static Error uncaughtException(Throwable ex) {
-        throw newInternalError("uncaught exception", ex);
-    }
-    static Error NYI() {
-        throw new AssertionError("NYI");
-    }
-    private static String message(String message, Object obj) {
-        if (obj != null)  message = message + ": " + obj;
-        return message;
-    }
-    private static String message(String message, Object obj, Object obj2) {
-        if (obj != null || obj2 != null)  message = message + ": " + obj + ", " + obj2;
-        return message;
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/MethodHandles.java b/ojluni/src/main/java/java/lang/invoke/MethodHandles.java
deleted file mode 100755
index 2984501..0000000
--- a/ojluni/src/main/java/java/lang/invoke/MethodHandles.java
+++ /dev/null
@@ -1,2271 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-package java.lang.invoke;
-
-import java.lang.reflect.*;
-import sun.invoke.util.ValueConversions;
-import sun.invoke.util.VerifyAccess;
-import sun.invoke.util.Wrapper;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Arrays;
-import sun.reflect.CallerSensitive;
-import sun.reflect.Reflection;
-import sun.reflect.misc.ReflectUtil;
-import static java.lang.invoke.MethodHandleStatics.*;
-import static java.lang.invoke.MethodHandleNatives.Constants.*;
-import sun.security.util.SecurityConstants;
-
-/**
- * This class consists exclusively of static methods that operate on or return
- * method handles. They fall into several categories:
- * <ul>
- * <li>Lookup methods which help create method handles for methods and fields.
- * <li>Combinator methods, which combine or transform pre-existing method handles into new ones.
- * <li>Other factory methods to create method handles that emulate other common JVM operations or control flow patterns.
- * <li>Wrapper methods which can convert between method handles and interface types.
- * </ul>
- * <p>
- * @author John Rose, JSR 292 EG
- */
-public class MethodHandles {
-
-    private MethodHandles() { }  // do not instantiate
-
-    private static final MemberName.Factory IMPL_NAMES = MemberName.getFactory();
-    static { MethodHandleImpl.initStatics(); }
-    // See IMPL_LOOKUP below.
-
-    //// Method handle creation from ordinary methods.
-
-    /**
-     * Returns a {@link Lookup lookup object} on the caller,
-     * which has the capability to access any method handle that the caller has access to,
-     * including direct method handles to private fields and methods.
-     * This lookup object is a <em>capability</em> which may be delegated to trusted agents.
-     * Do not store it in place where untrusted code can access it.
-     */
-    @CallerSensitive
-    public static Lookup lookup() {
-        return new Lookup(Reflection.getCallerClass());
-    }
-
-    /**
-     * Returns a {@link Lookup lookup object} which is trusted minimally.
-     * It can only be used to create method handles to
-     * publicly accessible fields and methods.
-     * <p>
-     * As a matter of pure convention, the {@linkplain Lookup#lookupClass lookup class}
-     * of this lookup object will be {@link java.lang.Object}.
-     * <p>
-     * The lookup class can be changed to any other class {@code C} using an expression of the form
-     * {@linkplain Lookup#in <code>publicLookup().in(C.class)</code>}.
-     * Since all classes have equal access to public names,
-     * such a change would confer no new access rights.
-     */
-    public static Lookup publicLookup() {
-        return Lookup.PUBLIC_LOOKUP;
-    }
-
-    /**
-     * A <em>lookup object</em> is a factory for creating method handles,
-     * when the creation requires access checking.
-     * Method handles do not perform
-     * access checks when they are called, but rather when they are created.
-     * Therefore, method handle access
-     * restrictions must be enforced when a method handle is created.
-     * The caller class against which those restrictions are enforced
-     * is known as the {@linkplain #lookupClass lookup class}.
-     * <p>
-     * A lookup class which needs to create method handles will call
-     * {@link MethodHandles#lookup MethodHandles.lookup} to create a factory for itself.
-     * When the {@code Lookup} factory object is created, the identity of the lookup class is
-     * determined, and securely stored in the {@code Lookup} object.
-     * The lookup class (or its delegates) may then use factory methods
-     * on the {@code Lookup} object to create method handles for access-checked members.
-     * This includes all methods, constructors, and fields which are allowed to the lookup class,
-     * even private ones.
-     * <p>
-     * The factory methods on a {@code Lookup} object correspond to all major
-     * use cases for methods, constructors, and fields.
-     * Here is a summary of the correspondence between these factory methods and
-     * the behavior the resulting method handles:
-     * <code>
-     * <table border=1 cellpadding=5 summary="lookup method behaviors">
-     * <tr><th>lookup expression</th><th>member</th><th>behavior</th></tr>
-     * <tr>
-     *     <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#findGetter lookup.findGetter(C.class,"f",FT.class)}</td>
-     *     <td>FT f;</td><td>(T) this.f;</td>
-     * </tr>
-     * <tr>
-     *     <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#findStaticGetter lookup.findStaticGetter(C.class,"f",FT.class)}</td>
-     *     <td>static<br>FT f;</td><td>(T) C.f;</td>
-     * </tr>
-     * <tr>
-     *     <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#findSetter lookup.findSetter(C.class,"f",FT.class)}</td>
-     *     <td>FT f;</td><td>this.f = x;</td>
-     * </tr>
-     * <tr>
-     *     <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#findStaticSetter lookup.findStaticSetter(C.class,"f",FT.class)}</td>
-     *     <td>static<br>FT f;</td><td>C.f = arg;</td>
-     * </tr>
-     * <tr>
-     *     <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#findVirtual lookup.findVirtual(C.class,"m",MT)}</td>
-     *     <td>T m(A*);</td><td>(T) this.m(arg*);</td>
-     * </tr>
-     * <tr>
-     *     <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#findStatic lookup.findStatic(C.class,"m",MT)}</td>
-     *     <td>static<br>T m(A*);</td><td>(T) C.m(arg*);</td>
-     * </tr>
-     * <tr>
-     *     <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#findSpecial lookup.findSpecial(C.class,"m",MT,this.class)}</td>
-     *     <td>T m(A*);</td><td>(T) super.m(arg*);</td>
-     * </tr>
-     * <tr>
-     *     <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#findConstructor lookup.findConstructor(C.class,MT)}</td>
-     *     <td>C(A*);</td><td>(T) new C(arg*);</td>
-     * </tr>
-     * <tr>
-     *     <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#unreflectGetter lookup.unreflectGetter(aField)}</td>
-     *     <td>(static)?<br>FT f;</td><td>(FT) aField.get(thisOrNull);</td>
-     * </tr>
-     * <tr>
-     *     <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#unreflectSetter lookup.unreflectSetter(aField)}</td>
-     *     <td>(static)?<br>FT f;</td><td>aField.set(thisOrNull, arg);</td>
-     * </tr>
-     * <tr>
-     *     <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#unreflect lookup.unreflect(aMethod)}</td>
-     *     <td>(static)?<br>T m(A*);</td><td>(T) aMethod.invoke(thisOrNull, arg*);</td>
-     * </tr>
-     * <tr>
-     *     <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#unreflectConstructor lookup.unreflectConstructor(aConstructor)}</td>
-     *     <td>C(A*);</td><td>(C) aConstructor.newInstance(arg*);</td>
-     * </tr>
-     * <tr>
-     *     <td>{@linkplain java.lang.invoke.MethodHandles.Lookup#unreflect lookup.unreflect(aMethod)}</td>
-     *     <td>(static)?<br>T m(A*);</td><td>(T) aMethod.invoke(thisOrNull, arg*);</td>
-     * </tr>
-     * </table>
-     * </code>
-     * Here, the type {@code C} is the class or interface being searched for a member,
-     * documented as a parameter named {@code refc} in the lookup methods.
-     * The method or constructor type {@code MT} is composed from the return type {@code T}
-     * and the sequence of argument types {@code A*}.
-     * Both {@code MT} and the field type {@code FT} are documented as a parameter named {@code type}.
-     * The formal parameter {@code this} stands for the self-reference of type {@code C};
-     * if it is present, it is always the leading argument to the method handle invocation.
-     * (In the case of some {@code protected} members, {@code this} may be
-     * restricted in type to the lookup class; see below.)
-     * The name {@code arg} stands for all the other method handle arguments.
-     * In the code examples for the Core Reflection API, the name {@code thisOrNull}
-     * stands for a null reference if the accessed method or field is static,
-     * and {@code this} otherwise.
-     * The names {@code aMethod}, {@code aField}, and {@code aConstructor} stand
-     * for reflective objects corresponding to the given members.
-     * <p>
-     * In cases where the given member is of variable arity (i.e., a method or constructor)
-     * the returned method handle will also be of {@linkplain MethodHandle#asVarargsCollector variable arity}.
-     * In all other cases, the returned method handle will be of fixed arity.
-     * <p>
-     * The equivalence between looked-up method handles and underlying
-     * class members can break down in a few ways:
-     * <ul>
-     * <li>If {@code C} is not symbolically accessible from the lookup class's loader,
-     * the lookup can still succeed, even when there is no equivalent
-     * Java expression or bytecoded constant.
-     * <li>Likewise, if {@code T} or {@code MT}
-     * is not symbolically accessible from the lookup class's loader,
-     * the lookup can still succeed.
-     * For example, lookups for {@code MethodHandle.invokeExact} and
-     * {@code MethodHandle.invoke} will always succeed, regardless of requested type.
-     * <li>If there is a security manager installed, it can forbid the lookup
-     * on various grounds (<a href="#secmgr">see below</a>).
-     * By contrast, the {@code ldc} instruction is not subject to
-     * security manager checks.
-     * </ul>
-     *
-     * <h3><a name="access"></a>Access checking</h3>
-     * Access checks are applied in the factory methods of {@code Lookup},
-     * when a method handle is created.
-     * This is a key difference from the Core Reflection API, since
-     * {@link java.lang.reflect.Method#invoke java.lang.reflect.Method.invoke}
-     * performs access checking against every caller, on every call.
-     * <p>
-     * All access checks start from a {@code Lookup} object, which
-     * compares its recorded lookup class against all requests to
-     * create method handles.
-     * A single {@code Lookup} object can be used to create any number
-     * of access-checked method handles, all checked against a single
-     * lookup class.
-     * <p>
-     * A {@code Lookup} object can be shared with other trusted code,
-     * such as a metaobject protocol.
-     * A shared {@code Lookup} object delegates the capability
-     * to create method handles on private members of the lookup class.
-     * Even if privileged code uses the {@code Lookup} object,
-     * the access checking is confined to the privileges of the
-     * original lookup class.
-     * <p>
-     * A lookup can fail, because
-     * the containing class is not accessible to the lookup class, or
-     * because the desired class member is missing, or because the
-     * desired class member is not accessible to the lookup class.
-     * In any of these cases, a {@code ReflectiveOperationException} will be
-     * thrown from the attempted lookup.  The exact class will be one of
-     * the following:
-     * <ul>
-     * <li>NoSuchMethodException &mdash; if a method is requested but does not exist
-     * <li>NoSuchFieldException &mdash; if a field is requested but does not exist
-     * <li>IllegalAccessException &mdash; if the member exists but an access check fails
-     * </ul>
-     * <p>
-     * In general, the conditions under which a method handle may be
-     * looked up for a method {@code M} are exactly equivalent to the conditions
-     * under which the lookup class could have compiled and resolved a call to {@code M}.
-     * And the effect of invoking the method handle resulting from the lookup
-     * is exactly equivalent to executing the compiled and resolved call to {@code M}.
-     * The same point is true of fields and constructors.
-     * <p>
-     * If the desired member is {@code protected}, the usual JVM rules apply,
-     * including the requirement that the lookup class must be either be in the
-     * same package as the desired member, or must inherit that member.
-     * (See the Java Virtual Machine Specification, sections 4.9.2, 5.4.3.5, and 6.4.)
-     * In addition, if the desired member is a non-static field or method
-     * in a different package, the resulting method handle may only be applied
-     * to objects of the lookup class or one of its subclasses.
-     * This requirement is enforced by narrowing the type of the leading
-     * {@code this} parameter from {@code C}
-     * (which will necessarily be a superclass of the lookup class)
-     * to the lookup class itself.
-     * <p>
-     * In some cases, access between nested classes is obtained by the Java compiler by creating
-     * an wrapper method to access a private method of another class
-     * in the same top-level declaration.
-     * For example, a nested class {@code C.D}
-     * can access private members within other related classes such as
-     * {@code C}, {@code C.D.E}, or {@code C.B},
-     * but the Java compiler may need to generate wrapper methods in
-     * those related classes.  In such cases, a {@code Lookup} object on
-     * {@code C.E} would be unable to those private members.
-     * A workaround for this limitation is the {@link Lookup#in Lookup.in} method,
-     * which can transform a lookup on {@code C.E} into one on any of those other
-     * classes, without special elevation of privilege.
-     * <p>
-     * Although bytecode instructions can only refer to classes in
-     * a related class loader, this API can search for methods in any
-     * class, as long as a reference to its {@code Class} object is
-     * available.  Such cross-loader references are also possible with the
-     * Core Reflection API, and are impossible to bytecode instructions
-     * such as {@code invokestatic} or {@code getfield}.
-     * There is a {@linkplain java.lang.SecurityManager security manager API}
-     * to allow applications to check such cross-loader references.
-     * These checks apply to both the {@code MethodHandles.Lookup} API
-     * and the Core Reflection API
-     * (as found on {@link java.lang.Class Class}).
-     * <p>
-     * Access checks only apply to named and reflected methods,
-     * constructors, and fields.
-     * Other method handle creation methods, such as
-     * {@link MethodHandle#asType MethodHandle.asType},
-     * do not require any access checks, and are done
-     * with static methods of {@link MethodHandles},
-     * independently of any {@code Lookup} object.
-     *
-     * <h3>Security manager interactions</h3>
-     * <a name="secmgr"></a>
-     * If a security manager is present, member lookups are subject to
-     * additional checks.
-     * From one to four calls are made to the security manager.
-     * Any of these calls can refuse access by throwing a
-     * {@link java.lang.SecurityException SecurityException}.
-     * Define {@code smgr} as the security manager,
-     * {@code refc} as the containing class in which the member
-     * is being sought, and {@code defc} as the class in which the
-     * member is actually defined.
-     * The calls are made according to the following rules:
-     * <ul>
-     * <li>In all cases, {@link SecurityManager#checkMemberAccess
-     *     smgr.checkMemberAccess(refc, Member.PUBLIC)} is called.
-     * <li>If the class loader of the lookup class is not
-     *     the same as or an ancestor of the class loader of {@code refc},
-     *     then {@link SecurityManager#checkPackageAccess
-     *     smgr.checkPackageAccess(refcPkg)} is called,
-     *     where {@code refcPkg} is the package of {@code refc}.
-     * <li>If the retrieved member is not public,
-     *     {@link SecurityManager#checkMemberAccess
-     *     smgr.checkMemberAccess(defc, Member.DECLARED)} is called.
-     *     (Note that {@code defc} might be the same as {@code refc}.)
-     *     The default implementation of this security manager method
-     *     inspects the stack to determine the original caller of
-     *     the reflective request (such as {@code findStatic}),
-     *     and performs additional permission checks if the
-     *     class loader of {@code defc} differs from the class
-     *     loader of the class from which the reflective request came.
-     * <li>If the retrieved member is not public,
-     *     and if {@code defc} and {@code refc} are in different class loaders,
-     *     and if the class loader of the lookup class is not
-     *     the same as or an ancestor of the class loader of {@code defc},
-     *     then {@link SecurityManager#checkPackageAccess
-     *     smgr.checkPackageAccess(defcPkg)} is called,
-     *     where {@code defcPkg} is the package of {@code defc}.
-     * </ul>
-     */
-    public static final
-    class Lookup {
-        /** The class on behalf of whom the lookup is being performed. */
-        private final Class<?> lookupClass;
-
-        /** The allowed sorts of members which may be looked up (PUBLIC, etc.). */
-        private final int allowedModes;
-
-        /** A single-bit mask representing {@code public} access,
-         *  which may contribute to the result of {@link #lookupModes lookupModes}.
-         *  The value, {@code 0x01}, happens to be the same as the value of the
-         *  {@code public} {@linkplain java.lang.reflect.Modifier#PUBLIC modifier bit}.
-         */
-        public static final int PUBLIC = Modifier.PUBLIC;
-
-        /** A single-bit mask representing {@code private} access,
-         *  which may contribute to the result of {@link #lookupModes lookupModes}.
-         *  The value, {@code 0x02}, happens to be the same as the value of the
-         *  {@code private} {@linkplain java.lang.reflect.Modifier#PRIVATE modifier bit}.
-         */
-        public static final int PRIVATE = Modifier.PRIVATE;
-
-        /** A single-bit mask representing {@code protected} access,
-         *  which may contribute to the result of {@link #lookupModes lookupModes}.
-         *  The value, {@code 0x04}, happens to be the same as the value of the
-         *  {@code protected} {@linkplain java.lang.reflect.Modifier#PROTECTED modifier bit}.
-         */
-        public static final int PROTECTED = Modifier.PROTECTED;
-
-        /** A single-bit mask representing {@code package} access (default access),
-         *  which may contribute to the result of {@link #lookupModes lookupModes}.
-         *  The value is {@code 0x08}, which does not correspond meaningfully to
-         *  any particular {@linkplain java.lang.reflect.Modifier modifier bit}.
-         */
-        public static final int PACKAGE = Modifier.STATIC;
-
-        private static final int ALL_MODES = (PUBLIC | PRIVATE | PROTECTED | PACKAGE);
-        private static final int TRUSTED   = -1;
-
-        private static int fixmods(int mods) {
-            mods &= (ALL_MODES - PACKAGE);
-            return (mods != 0) ? mods : PACKAGE;
-        }
-
-        /** Tells which class is performing the lookup.  It is this class against
-         *  which checks are performed for visibility and access permissions.
-         *  <p>
-         *  The class implies a maximum level of access permission,
-         *  but the permissions may be additionally limited by the bitmask
-         *  {@link #lookupModes lookupModes}, which controls whether non-public members
-         *  can be accessed.
-         */
-        public Class<?> lookupClass() {
-            return lookupClass;
-        }
-
-        // This is just for calling out to MethodHandleImpl.
-        private Class<?> lookupClassOrNull() {
-            return (allowedModes == TRUSTED) ? null : lookupClass;
-        }
-
-        /** Tells which access-protection classes of members this lookup object can produce.
-         *  The result is a bit-mask of the bits
-         *  {@linkplain #PUBLIC PUBLIC (0x01)},
-         *  {@linkplain #PRIVATE PRIVATE (0x02)},
-         *  {@linkplain #PROTECTED PROTECTED (0x04)},
-         *  and {@linkplain #PACKAGE PACKAGE (0x08)}.
-         *  <p>
-         *  A freshly-created lookup object
-         *  on the {@linkplain java.lang.invoke.MethodHandles#lookup() caller's class}
-         *  has all possible bits set, since the caller class can access all its own members.
-         *  A lookup object on a new lookup class
-         *  {@linkplain java.lang.invoke.MethodHandles.Lookup#in created from a previous lookup object}
-         *  may have some mode bits set to zero.
-         *  The purpose of this is to restrict access via the new lookup object,
-         *  so that it can access only names which can be reached by the original
-         *  lookup object, and also by the new lookup class.
-         */
-        public int lookupModes() {
-            return allowedModes & ALL_MODES;
-        }
-
-        /** Embody the current class (the lookupClass) as a lookup class
-         * for method handle creation.
-         * Must be called by from a method in this package,
-         * which in turn is called by a method not in this package.
-         * <p>
-         * Also, don't make it private, lest javac interpose
-         * an access$N method.
-         */
-
-        Lookup(Class<?> lookupClass) {
-            this(lookupClass, ALL_MODES);
-            checkUnprivilegedlookupClass(lookupClass);
-        }
-
-        private Lookup(Class<?> lookupClass, int allowedModes) {
-            this.lookupClass = lookupClass;
-            this.allowedModes = allowedModes;
-        }
-
-        /**
-         * Creates a lookup on the specified new lookup class.
-         * The resulting object will report the specified
-         * class as its own {@link #lookupClass lookupClass}.
-         * <p>
-         * However, the resulting {@code Lookup} object is guaranteed
-         * to have no more access capabilities than the original.
-         * In particular, access capabilities can be lost as follows:<ul>
-         * <li>If the new lookup class differs from the old one,
-         * protected members will not be accessible by virtue of inheritance.
-         * (Protected members may continue to be accessible because of package sharing.)
-         * <li>If the new lookup class is in a different package
-         * than the old one, protected and default (package) members will not be accessible.
-         * <li>If the new lookup class is not within the same package member
-         * as the old one, private members will not be accessible.
-         * <li>If the new lookup class is not accessible to the old lookup class,
-         * then no members, not even public members, will be accessible.
-         * (In all other cases, public members will continue to be accessible.)
-         * </ul>
-         *
-         * @param requestedLookupClass the desired lookup class for the new lookup object
-         * @return a lookup object which reports the desired lookup class
-         * @throws NullPointerException if the argument is null
-         */
-        public Lookup in(Class<?> requestedLookupClass) {
-            requestedLookupClass.getClass();  // null check
-            if (allowedModes == TRUSTED)  // IMPL_LOOKUP can make any lookup at all
-                return new Lookup(requestedLookupClass, ALL_MODES);
-            if (requestedLookupClass == this.lookupClass)
-                return this;  // keep same capabilities
-            int newModes = (allowedModes & (ALL_MODES & ~PROTECTED));
-            if ((newModes & PACKAGE) != 0
-                && !VerifyAccess.isSamePackage(this.lookupClass, requestedLookupClass)) {
-                newModes &= ~(PACKAGE|PRIVATE);
-            }
-            // Allow nestmate lookups to be created without special privilege:
-            if ((newModes & PRIVATE) != 0
-                && !VerifyAccess.isSamePackageMember(this.lookupClass, requestedLookupClass)) {
-                newModes &= ~PRIVATE;
-            }
-            if ((newModes & PUBLIC) != 0
-                && !VerifyAccess.isClassAccessible(requestedLookupClass, this.lookupClass, allowedModes)) {
-                // The requested class it not accessible from the lookup class.
-                // No permissions.
-                newModes = 0;
-            }
-            checkUnprivilegedlookupClass(requestedLookupClass);
-            return new Lookup(requestedLookupClass, newModes);
-        }
-
-        // Make sure outer class is initialized first.
-        static { IMPL_NAMES.getClass(); }
-
-        /** Version of lookup which is trusted minimally.
-         *  It can only be used to create method handles to
-         *  publicly accessible members.
-         */
-        static final Lookup PUBLIC_LOOKUP = new Lookup(Object.class, PUBLIC);
-
-        /** Package-private version of lookup which is trusted. */
-        static final Lookup IMPL_LOOKUP = new Lookup(Object.class, TRUSTED);
-
-        private static void checkUnprivilegedlookupClass(Class<?> lookupClass) {
-            String name = lookupClass.getName();
-            if (name.startsWith("java.lang.invoke."))
-                throw newIllegalArgumentException("illegal lookupClass: "+lookupClass);
-        }
-
-        /**
-         * Displays the name of the class from which lookups are to be made.
-         * (The name is the one reported by {@link java.lang.Class#getName() Class.getName}.)
-         * If there are restrictions on the access permitted to this lookup,
-         * this is indicated by adding a suffix to the class name, consisting
-         * of a slash and a keyword.  The keyword represents the strongest
-         * allowed access, and is chosen as follows:
-         * <ul>
-         * <li>If no access is allowed, the suffix is "/noaccess".
-         * <li>If only public access is allowed, the suffix is "/public".
-         * <li>If only public and package access are allowed, the suffix is "/package".
-         * <li>If only public, package, and private access are allowed, the suffix is "/private".
-         * </ul>
-         * If none of the above cases apply, it is the case that full
-         * access (public, package, private, and protected) is allowed.
-         * In this case, no suffix is added.
-         * This is true only of an object obtained originally from
-         * {@link java.lang.invoke.MethodHandles#lookup MethodHandles.lookup}.
-         * Objects created by {@link java.lang.invoke.MethodHandles.Lookup#in Lookup.in}
-         * always have restricted access, and will display a suffix.
-         * <p>
-         * (It may seem strange that protected access should be
-         * stronger than private access.  Viewed independently from
-         * package access, protected access is the first to be lost,
-         * because it requires a direct subclass relationship between
-         * caller and callee.)
-         * @see #in
-         */
-        @Override
-        public String toString() {
-            String cname = lookupClass.getName();
-            switch (allowedModes) {
-            case 0:  // no privileges
-                return cname + "/noaccess";
-            case PUBLIC:
-                return cname + "/public";
-            case PUBLIC|PACKAGE:
-                return cname + "/package";
-            case ALL_MODES & ~PROTECTED:
-                return cname + "/private";
-            case ALL_MODES:
-                return cname;
-            case TRUSTED:
-                return "/trusted";  // internal only; not exported
-            default:  // Should not happen, but it's a bitfield...
-                cname = cname + "/" + Integer.toHexString(allowedModes);
-                assert(false) : cname;
-                return cname;
-            }
-        }
-
-        /**
-         * Produces a method handle for a static method.
-         * The type of the method handle will be that of the method.
-         * (Since static methods do not take receivers, there is no
-         * additional receiver argument inserted into the method handle type,
-         * as there would be with {@link #findVirtual findVirtual} or {@link #findSpecial findSpecial}.)
-         * The method and all its argument types must be accessible to the lookup class.
-         * If the method's class has not yet been initialized, that is done
-         * immediately, before the method handle is returned.
-         * <p>
-         * The returned method handle will have
-         * {@linkplain MethodHandle#asVarargsCollector variable arity} if and only if
-         * the method's variable arity modifier bit ({@code 0x0080}) is set.
-         * @param refc the class from which the method is accessed
-         * @param name the name of the method
-         * @param type the type of the method
-         * @return the desired method handle
-         * @throws NoSuchMethodException if the method does not exist
-         * @throws IllegalAccessException if access checking fails,
-         *                                or if the method is not {@code static},
-         *                                or if the method's variable arity modifier bit
-         *                                is set and {@code asVarargsCollector} fails
-         * @exception SecurityException if a security manager is present and it
-         *                              <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
-         * @throws NullPointerException if any argument is null
-         */
-        public
-        MethodHandle findStatic(Class<?> refc, String name, MethodType type) throws NoSuchMethodException, IllegalAccessException {
-            MemberName method = resolveOrFail(REF_invokeStatic, refc, name, type);
-            checkSecurityManager(refc, method);
-            return getDirectMethod(REF_invokeStatic, refc, method, findBoundCallerClass(method));
-        }
-
-        /**
-         * Produces a method handle for a virtual method.
-         * The type of the method handle will be that of the method,
-         * with the receiver type (usually {@code refc}) prepended.
-         * The method and all its argument types must be accessible to the lookup class.
-         * <p>
-         * When called, the handle will treat the first argument as a receiver
-         * and dispatch on the receiver's type to determine which method
-         * implementation to enter.
-         * (The dispatching action is identical with that performed by an
-         * {@code invokevirtual} or {@code invokeinterface} instruction.)
-         * <p>
-         * The first argument will be of type {@code refc} if the lookup
-         * class has full privileges to access the member.  Otherwise
-         * the member must be {@code protected} and the first argument
-         * will be restricted in type to the lookup class.
-         * <p>
-         * The returned method handle will have
-         * {@linkplain MethodHandle#asVarargsCollector variable arity} if and only if
-         * the method's variable arity modifier bit ({@code 0x0080}) is set.
-         * <p>
-         * Because of the general equivalence between {@code invokevirtual}
-         * instructions and method handles produced by {@code findVirtual},
-         * if the class is {@code MethodHandle} and the name string is
-         * {@code invokeExact} or {@code invoke}, the resulting
-         * method handle is equivalent to one produced by
-         * {@link java.lang.invoke.MethodHandles#exactInvoker MethodHandles.exactInvoker} or
-         * {@link java.lang.invoke.MethodHandles#invoker MethodHandles.invoker}
-         * with the same {@code type} argument.
-         *
-         * @param refc the class or interface from which the method is accessed
-         * @param name the name of the method
-         * @param type the type of the method, with the receiver argument omitted
-         * @return the desired method handle
-         * @throws NoSuchMethodException if the method does not exist
-         * @throws IllegalAccessException if access checking fails,
-         *                                or if the method is {@code static}
-         *                                or if the method's variable arity modifier bit
-         *                                is set and {@code asVarargsCollector} fails
-         * @exception SecurityException if a security manager is present and it
-         *                              <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
-         * @throws NullPointerException if any argument is null
-         */
-        public MethodHandle findVirtual(Class<?> refc, String name, MethodType type) throws NoSuchMethodException, IllegalAccessException {
-            if (refc == MethodHandle.class) {
-                MethodHandle mh = findVirtualForMH(name, type);
-                if (mh != null)  return mh;
-            }
-            byte refKind = (refc.isInterface() ? REF_invokeInterface : REF_invokeVirtual);
-            MemberName method = resolveOrFail(refKind, refc, name, type);
-            checkSecurityManager(refc, method);
-            return getDirectMethod(refKind, refc, method, findBoundCallerClass(method));
-        }
-        private MethodHandle findVirtualForMH(String name, MethodType type) {
-            // these names require special lookups because of the implicit MethodType argument
-            if ("invoke".equals(name))
-                return invoker(type);
-            if ("invokeExact".equals(name))
-                return exactInvoker(type);
-            return null;
-        }
-
-        /**
-         * Produces a method handle which creates an object and initializes it, using
-         * the constructor of the specified type.
-         * The parameter types of the method handle will be those of the constructor,
-         * while the return type will be a reference to the constructor's class.
-         * The constructor and all its argument types must be accessible to the lookup class.
-         * If the constructor's class has not yet been initialized, that is done
-         * immediately, before the method handle is returned.
-         * <p>
-         * Note:  The requested type must have a return type of {@code void}.
-         * This is consistent with the JVM's treatment of constructor type descriptors.
-         * <p>
-         * The returned method handle will have
-         * {@linkplain MethodHandle#asVarargsCollector variable arity} if and only if
-         * the constructor's variable arity modifier bit ({@code 0x0080}) is set.
-         * @param refc the class or interface from which the method is accessed
-         * @param type the type of the method, with the receiver argument omitted, and a void return type
-         * @return the desired method handle
-         * @throws NoSuchMethodException if the constructor does not exist
-         * @throws IllegalAccessException if access checking fails
-         *                                or if the method's variable arity modifier bit
-         *                                is set and {@code asVarargsCollector} fails
-         * @exception SecurityException if a security manager is present and it
-         *                              <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
-         * @throws NullPointerException if any argument is null
-         */
-        public MethodHandle findConstructor(Class<?> refc, MethodType type) throws NoSuchMethodException, IllegalAccessException {
-            String name = "<init>";
-            MemberName ctor = resolveOrFail(REF_newInvokeSpecial, refc, name, type);
-            checkSecurityManager(refc, ctor);
-            return getDirectConstructor(refc, ctor);
-        }
-
-        /**
-         * Produces an early-bound method handle for a virtual method,
-         * as if called from an {@code invokespecial}
-         * instruction from {@code caller}.
-         * The type of the method handle will be that of the method,
-         * with a suitably restricted receiver type (such as {@code caller}) prepended.
-         * The method and all its argument types must be accessible
-         * to the caller.
-         * <p>
-         * When called, the handle will treat the first argument as a receiver,
-         * but will not dispatch on the receiver's type.
-         * (This direct invocation action is identical with that performed by an
-         * {@code invokespecial} instruction.)
-         * <p>
-         * If the explicitly specified caller class is not identical with the
-         * lookup class, or if this lookup object does not have private access
-         * privileges, the access fails.
-         * <p>
-         * The returned method handle will have
-         * {@linkplain MethodHandle#asVarargsCollector variable arity} if and only if
-         * the method's variable arity modifier bit ({@code 0x0080}) is set.
-         * @param refc the class or interface from which the method is accessed
-         * @param name the name of the method (which must not be "&lt;init&gt;")
-         * @param type the type of the method, with the receiver argument omitted
-         * @param specialCaller the proposed calling class to perform the {@code invokespecial}
-         * @return the desired method handle
-         * @throws NoSuchMethodException if the method does not exist
-         * @throws IllegalAccessException if access checking fails
-         *                                or if the method's variable arity modifier bit
-         *                                is set and {@code asVarargsCollector} fails
-         * @exception SecurityException if a security manager is present and it
-         *                              <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
-         * @throws NullPointerException if any argument is null
-         */
-        public MethodHandle findSpecial(Class<?> refc, String name, MethodType type,
-                                        Class<?> specialCaller) throws NoSuchMethodException, IllegalAccessException {
-            checkSpecialCaller(specialCaller);
-            Lookup specialLookup = this.in(specialCaller);
-            MemberName method = specialLookup.resolveOrFail(REF_invokeSpecial, refc, name, type);
-            checkSecurityManager(refc, method);
-            return specialLookup.getDirectMethod(REF_invokeSpecial, refc, method, findBoundCallerClass(method));
-        }
-
-        /**
-         * Produces a method handle giving read access to a non-static field.
-         * The type of the method handle will have a return type of the field's
-         * value type.
-         * The method handle's single argument will be the instance containing
-         * the field.
-         * Access checking is performed immediately on behalf of the lookup class.
-         * @param refc the class or interface from which the method is accessed
-         * @param name the field's name
-         * @param type the field's type
-         * @return a method handle which can load values from the field
-         * @throws NoSuchFieldException if the field does not exist
-         * @throws IllegalAccessException if access checking fails, or if the field is {@code static}
-         * @exception SecurityException if a security manager is present and it
-         *                              <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
-         * @throws NullPointerException if any argument is null
-         */
-        public MethodHandle findGetter(Class<?> refc, String name, Class<?> type) throws NoSuchFieldException, IllegalAccessException {
-            MemberName field = resolveOrFail(REF_getField, refc, name, type);
-            checkSecurityManager(refc, field);
-            return getDirectField(REF_getField, refc, field);
-        }
-
-        /**
-         * Produces a method handle giving write access to a non-static field.
-         * The type of the method handle will have a void return type.
-         * The method handle will take two arguments, the instance containing
-         * the field, and the value to be stored.
-         * The second argument will be of the field's value type.
-         * Access checking is performed immediately on behalf of the lookup class.
-         * @param refc the class or interface from which the method is accessed
-         * @param name the field's name
-         * @param type the field's type
-         * @return a method handle which can store values into the field
-         * @throws NoSuchFieldException if the field does not exist
-         * @throws IllegalAccessException if access checking fails, or if the field is {@code static}
-         * @exception SecurityException if a security manager is present and it
-         *                              <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
-         * @throws NullPointerException if any argument is null
-         */
-        public MethodHandle findSetter(Class<?> refc, String name, Class<?> type) throws NoSuchFieldException, IllegalAccessException {
-            MemberName field = resolveOrFail(REF_putField, refc, name, type);
-            checkSecurityManager(refc, field);
-            return getDirectField(REF_putField, refc, field);
-        }
-
-        /**
-         * Produces a method handle giving read access to a static field.
-         * The type of the method handle will have a return type of the field's
-         * value type.
-         * The method handle will take no arguments.
-         * Access checking is performed immediately on behalf of the lookup class.
-         * @param refc the class or interface from which the method is accessed
-         * @param name the field's name
-         * @param type the field's type
-         * @return a method handle which can load values from the field
-         * @throws NoSuchFieldException if the field does not exist
-         * @throws IllegalAccessException if access checking fails, or if the field is not {@code static}
-         * @exception SecurityException if a security manager is present and it
-         *                              <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
-         * @throws NullPointerException if any argument is null
-         */
-        public MethodHandle findStaticGetter(Class<?> refc, String name, Class<?> type) throws NoSuchFieldException, IllegalAccessException {
-            MemberName field = resolveOrFail(REF_getStatic, refc, name, type);
-            checkSecurityManager(refc, field);
-            return getDirectField(REF_getStatic, refc, field);
-        }
-
-        /**
-         * Produces a method handle giving write access to a static field.
-         * The type of the method handle will have a void return type.
-         * The method handle will take a single
-         * argument, of the field's value type, the value to be stored.
-         * Access checking is performed immediately on behalf of the lookup class.
-         * @param refc the class or interface from which the method is accessed
-         * @param name the field's name
-         * @param type the field's type
-         * @return a method handle which can store values into the field
-         * @throws NoSuchFieldException if the field does not exist
-         * @throws IllegalAccessException if access checking fails, or if the field is not {@code static}
-         * @exception SecurityException if a security manager is present and it
-         *                              <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
-         * @throws NullPointerException if any argument is null
-         */
-        public MethodHandle findStaticSetter(Class<?> refc, String name, Class<?> type) throws NoSuchFieldException, IllegalAccessException {
-            MemberName field = resolveOrFail(REF_putStatic, refc, name, type);
-            checkSecurityManager(refc, field);
-            return getDirectField(REF_putStatic, refc, field);
-        }
-
-        /**
-         * Produces an early-bound method handle for a non-static method.
-         * The receiver must have a supertype {@code defc} in which a method
-         * of the given name and type is accessible to the lookup class.
-         * The method and all its argument types must be accessible to the lookup class.
-         * The type of the method handle will be that of the method,
-         * without any insertion of an additional receiver parameter.
-         * The given receiver will be bound into the method handle,
-         * so that every call to the method handle will invoke the
-         * requested method on the given receiver.
-         * <p>
-         * The returned method handle will have
-         * {@linkplain MethodHandle#asVarargsCollector variable arity} if and only if
-         * the method's variable arity modifier bit ({@code 0x0080}) is set
-         * <em>and</em> the trailing array argument is not the only argument.
-         * (If the trailing array argument is the only argument,
-         * the given receiver value will be bound to it.)
-         * <p>
-         * This is equivalent to the following code:
-         * <blockquote><pre>
-import static java.lang.invoke.MethodHandles.*;
-import static java.lang.invoke.MethodType.*;
-...
-MethodHandle mh0 = lookup().{@link #findVirtual findVirtual}(defc, name, type);
-MethodHandle mh1 = mh0.{@link MethodHandle#bindTo bindTo}(receiver);
-MethodType mt1 = mh1.type();
-if (mh0.isVarargsCollector())
-  mh1 = mh1.asVarargsCollector(mt1.parameterType(mt1.parameterCount()-1));
-return mh1;
-         * </pre></blockquote>
-         * where {@code defc} is either {@code receiver.getClass()} or a super
-         * type of that class, in which the requested method is accessible
-         * to the lookup class.
-         * (Note that {@code bindTo} does not preserve variable arity.)
-         * @param receiver the object from which the method is accessed
-         * @param name the name of the method
-         * @param type the type of the method, with the receiver argument omitted
-         * @return the desired method handle
-         * @throws NoSuchMethodException if the method does not exist
-         * @throws IllegalAccessException if access checking fails
-         *                                or if the method's variable arity modifier bit
-         *                                is set and {@code asVarargsCollector} fails
-         * @exception SecurityException if a security manager is present and it
-         *                              <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
-         * @throws NullPointerException if any argument is null
-         */
-        public MethodHandle bind(Object receiver, String name, MethodType type) throws NoSuchMethodException, IllegalAccessException {
-            Class<? extends Object> refc = receiver.getClass(); // may get NPE
-            MemberName method = resolveOrFail(REF_invokeSpecial, refc, name, type);
-            checkSecurityManager(refc, method);
-            MethodHandle mh = getDirectMethodNoRestrict(REF_invokeSpecial, refc, method, findBoundCallerClass(method));
-            return mh.bindReceiver(receiver).setVarargs(method);
-        }
-
-        /**
-         * Makes a direct method handle to <i>m</i>, if the lookup class has permission.
-         * If <i>m</i> is non-static, the receiver argument is treated as an initial argument.
-         * If <i>m</i> is virtual, overriding is respected on every call.
-         * Unlike the Core Reflection API, exceptions are <em>not</em> wrapped.
-         * The type of the method handle will be that of the method,
-         * with the receiver type prepended (but only if it is non-static).
-         * If the method's {@code accessible} flag is not set,
-         * access checking is performed immediately on behalf of the lookup class.
-         * If <i>m</i> is not public, do not share the resulting handle with untrusted parties.
-         * <p>
-         * The returned method handle will have
-         * {@linkplain MethodHandle#asVarargsCollector variable arity} if and only if
-         * the method's variable arity modifier bit ({@code 0x0080}) is set.
-         * @param m the reflected method
-         * @return a method handle which can invoke the reflected method
-         * @throws IllegalAccessException if access checking fails
-         *                                or if the method's variable arity modifier bit
-         *                                is set and {@code asVarargsCollector} fails
-         * @throws NullPointerException if the argument is null
-         */
-        public MethodHandle unreflect(Method m) throws IllegalAccessException {
-            MemberName method = new MemberName(m);
-            byte refKind = method.getReferenceKind();
-            if (refKind == REF_invokeSpecial)
-                refKind = REF_invokeVirtual;
-            assert(method.isMethod());
-            Lookup lookup = m.isAccessible() ? IMPL_LOOKUP : this;
-            return lookup.getDirectMethod(refKind, method.getDeclaringClass(), method, findBoundCallerClass(method));
-        }
-
-        /**
-         * Produces a method handle for a reflected method.
-         * It will bypass checks for overriding methods on the receiver,
-         * as if by a {@code invokespecial} instruction from within the {@code specialCaller}.
-         * The type of the method handle will be that of the method,
-         * with the special caller type prepended (and <em>not</em> the receiver of the method).
-         * If the method's {@code accessible} flag is not set,
-         * access checking is performed immediately on behalf of the lookup class,
-         * as if {@code invokespecial} instruction were being linked.
-         * <p>
-         * The returned method handle will have
-         * {@linkplain MethodHandle#asVarargsCollector variable arity} if and only if
-         * the method's variable arity modifier bit ({@code 0x0080}) is set.
-         * @param m the reflected method
-         * @param specialCaller the class nominally calling the method
-         * @return a method handle which can invoke the reflected method
-         * @throws IllegalAccessException if access checking fails
-         *                                or if the method's variable arity modifier bit
-         *                                is set and {@code asVarargsCollector} fails
-         * @throws NullPointerException if any argument is null
-         */
-        public MethodHandle unreflectSpecial(Method m, Class<?> specialCaller) throws IllegalAccessException {
-            checkSpecialCaller(specialCaller);
-            Lookup specialLookup = this.in(specialCaller);
-            MemberName method = new MemberName(m, true);
-            assert(method.isMethod());
-            // ignore m.isAccessible:  this is a new kind of access
-            return specialLookup.getDirectMethod(REF_invokeSpecial, method.getDeclaringClass(), method, findBoundCallerClass(method));
-        }
-
-        /**
-         * Produces a method handle for a reflected constructor.
-         * The type of the method handle will be that of the constructor,
-         * with the return type changed to the declaring class.
-         * The method handle will perform a {@code newInstance} operation,
-         * creating a new instance of the constructor's class on the
-         * arguments passed to the method handle.
-         * <p>
-         * If the constructor's {@code accessible} flag is not set,
-         * access checking is performed immediately on behalf of the lookup class.
-         * <p>
-         * The returned method handle will have
-         * {@linkplain MethodHandle#asVarargsCollector variable arity} if and only if
-         * the constructor's variable arity modifier bit ({@code 0x0080}) is set.
-         * @param c the reflected constructor
-         * @return a method handle which can invoke the reflected constructor
-         * @throws IllegalAccessException if access checking fails
-         *                                or if the method's variable arity modifier bit
-         *                                is set and {@code asVarargsCollector} fails
-         * @throws NullPointerException if the argument is null
-         */
-        @SuppressWarnings("rawtypes")  // Will be Constructor<?> after JSR 292 MR
-        public MethodHandle unreflectConstructor(Constructor c) throws IllegalAccessException {
-            MemberName ctor = new MemberName(c);
-            assert(ctor.isConstructor());
-            Lookup lookup = c.isAccessible() ? IMPL_LOOKUP : this;
-            return lookup.getDirectConstructor(ctor.getDeclaringClass(), ctor);
-        }
-
-        /**
-         * Produces a method handle giving read access to a reflected field.
-         * The type of the method handle will have a return type of the field's
-         * value type.
-         * If the field is static, the method handle will take no arguments.
-         * Otherwise, its single argument will be the instance containing
-         * the field.
-         * If the field's {@code accessible} flag is not set,
-         * access checking is performed immediately on behalf of the lookup class.
-         * @param f the reflected field
-         * @return a method handle which can load values from the reflected field
-         * @throws IllegalAccessException if access checking fails
-         * @throws NullPointerException if the argument is null
-         */
-        public MethodHandle unreflectGetter(Field f) throws IllegalAccessException {
-            return unreflectField(f, false);
-        }
-        private MethodHandle unreflectField(Field f, boolean isSetter) throws IllegalAccessException {
-            MemberName field = new MemberName(f, isSetter);
-            assert(isSetter
-                    ? MethodHandleNatives.refKindIsSetter(field.getReferenceKind())
-                    : MethodHandleNatives.refKindIsGetter(field.getReferenceKind()));
-            Lookup lookup = f.isAccessible() ? IMPL_LOOKUP : this;
-            return lookup.getDirectField(field.getReferenceKind(), f.getDeclaringClass(), field);
-        }
-
-        /**
-         * Produces a method handle giving write access to a reflected field.
-         * The type of the method handle will have a void return type.
-         * If the field is static, the method handle will take a single
-         * argument, of the field's value type, the value to be stored.
-         * Otherwise, the two arguments will be the instance containing
-         * the field, and the value to be stored.
-         * If the field's {@code accessible} flag is not set,
-         * access checking is performed immediately on behalf of the lookup class.
-         * @param f the reflected field
-         * @return a method handle which can store values into the reflected field
-         * @throws IllegalAccessException if access checking fails
-         * @throws NullPointerException if the argument is null
-         */
-        public MethodHandle unreflectSetter(Field f) throws IllegalAccessException {
-            return unreflectField(f, true);
-        }
-
-        /// Helper methods, all package-private.
-
-        MemberName resolveOrFail(byte refKind, Class<?> refc, String name, Class<?> type) throws NoSuchFieldException, IllegalAccessException {
-            checkSymbolicClass(refc);  // do this before attempting to resolve
-            name.getClass(); type.getClass();  // NPE
-            return IMPL_NAMES.resolveOrFail(refKind, new MemberName(refc, name, type, refKind), lookupClassOrNull(),
-                                            NoSuchFieldException.class);
-        }
-
-        MemberName resolveOrFail(byte refKind, Class<?> refc, String name, MethodType type) throws NoSuchMethodException, IllegalAccessException {
-            checkSymbolicClass(refc);  // do this before attempting to resolve
-            name.getClass(); type.getClass();  // NPE
-            return IMPL_NAMES.resolveOrFail(refKind, new MemberName(refc, name, type, refKind), lookupClassOrNull(),
-                                            NoSuchMethodException.class);
-        }
-
-        void checkSymbolicClass(Class<?> refc) throws IllegalAccessException {
-            Class<?> caller = lookupClassOrNull();
-            if (caller != null && !VerifyAccess.isClassAccessible(refc, caller, allowedModes))
-                throw new MemberName(refc).makeAccessException("symbolic reference class is not public", this);
-        }
-
-        /**
-         * Find my trustable caller class if m is a caller sensitive method.
-         * If this lookup object has private access, then the caller class is the lookupClass.
-         * Otherwise, if m is caller-sensitive, throw IllegalAccessException.
-         */
-        Class<?> findBoundCallerClass(MemberName m) throws IllegalAccessException {
-            Class<?> callerClass = null;
-            if (MethodHandleNatives.isCallerSensitive(m)) {
-                // Only full-power lookup is allowed to resolve caller-sensitive methods
-                if (isFullPowerLookup()) {
-                    callerClass = lookupClass;
-                } else {
-                    throw new IllegalAccessException("Attempt to lookup caller-sensitive method using restricted lookup object");
-                }
-            }
-            return callerClass;
-        }
-
-        private boolean isFullPowerLookup() {
-            return (allowedModes & PRIVATE) != 0;
-        }
-
-        /**
-         * Determine whether a security manager has an overridden
-         * SecurityManager.checkMemberAccess method.
-         */
-        private boolean isCheckMemberAccessOverridden(SecurityManager sm) {
-            final Class<? extends SecurityManager> cls = sm.getClass();
-            if (cls == SecurityManager.class) return false;
-
-            try {
-                return cls.getMethod("checkMemberAccess", Class.class, int.class).
-                    getDeclaringClass() != SecurityManager.class;
-            } catch (NoSuchMethodException e) {
-                throw new InternalError("should not reach here");
-            }
-        }
-
-        /**
-         * Perform necessary <a href="MethodHandles.Lookup.html#secmgr">access checks</a>.
-         * This function performs stack walk magic: do not refactor it.
-         */
-        void checkSecurityManager(Class<?> refc, MemberName m) {
-            SecurityManager smgr = System.getSecurityManager();
-            if (smgr == null)  return;
-            if (allowedModes == TRUSTED)  return;
-
-            final boolean overridden = isCheckMemberAccessOverridden(smgr);
-            // Step 1:
-            {
-                // Default policy is to allow Member.PUBLIC; no need to check
-                // permission if SecurityManager is the default implementation
-                final int which = Member.PUBLIC;
-                final Class<?> clazz = refc;
-                if (overridden) {
-                    // Don't refactor; otherwise break the stack depth for
-                    // checkMemberAccess of subclasses of SecurityManager as specified.
-                    smgr.checkMemberAccess(clazz, which);
-                }
-            }
-
-            // Step 2:
-            if (!isFullPowerLookup() ||
-                !VerifyAccess.classLoaderIsAncestor(lookupClass, refc)) {
-                ReflectUtil.checkPackageAccess(refc);
-            }
-
-            // Step 3:
-            if (m.isPublic()) return;
-            Class<?> defc = m.getDeclaringClass();
-            {
-                // Inline SecurityManager.checkMemberAccess
-                final int which = Member.DECLARED;
-                final Class<?> clazz = defc;
-                if (!overridden) {
-                    if (!isFullPowerLookup()) {
-                        smgr.checkPermission(SecurityConstants.CHECK_MEMBER_ACCESS_PERMISSION);
-                    }
-                } else {
-                    // Don't refactor; otherwise break the stack depth for
-                    // checkMemberAccess of subclasses of SecurityManager as specified.
-                    smgr.checkMemberAccess(clazz, which);
-                }
-            }
-
-            // Step 4:
-            if (defc != refc) {
-                ReflectUtil.checkPackageAccess(defc);
-            }
-        }
-
-        void checkMethod(byte refKind, Class<?> refc, MemberName m) throws IllegalAccessException {
-            boolean wantStatic = (refKind == REF_invokeStatic);
-            String message;
-            if (m.isConstructor())
-                message = "expected a method, not a constructor";
-            else if (!m.isMethod())
-                message = "expected a method";
-            else if (wantStatic != m.isStatic())
-                message = wantStatic ? "expected a static method" : "expected a non-static method";
-            else
-                { checkAccess(refKind, refc, m); return; }
-            throw m.makeAccessException(message, this);
-        }
-
-        void checkField(byte refKind, Class<?> refc, MemberName m) throws IllegalAccessException {
-            boolean wantStatic = !MethodHandleNatives.refKindHasReceiver(refKind);
-            String message;
-            if (wantStatic != m.isStatic())
-                message = wantStatic ? "expected a static field" : "expected a non-static field";
-            else
-                { checkAccess(refKind, refc, m); return; }
-            throw m.makeAccessException(message, this);
-        }
-
-        void checkAccess(byte refKind, Class<?> refc, MemberName m) throws IllegalAccessException {
-            assert(m.referenceKindIsConsistentWith(refKind) &&
-                   MethodHandleNatives.refKindIsValid(refKind) &&
-                   (MethodHandleNatives.refKindIsField(refKind) == m.isField()));
-            int allowedModes = this.allowedModes;
-            if (allowedModes == TRUSTED)  return;
-            int mods = m.getModifiers();
-            if (Modifier.isFinal(mods) &&
-                    MethodHandleNatives.refKindIsSetter(refKind))
-                throw m.makeAccessException("unexpected set of a final field", this);
-            if (Modifier.isPublic(mods) && Modifier.isPublic(refc.getModifiers()) && allowedModes != 0)
-                return;  // common case
-            int requestedModes = fixmods(mods);  // adjust 0 => PACKAGE
-            if ((requestedModes & allowedModes) != 0) {
-                if (VerifyAccess.isMemberAccessible(refc, m.getDeclaringClass(),
-                                                    mods, lookupClass(), allowedModes))
-                    return;
-            } else {
-                // Protected members can also be checked as if they were package-private.
-                if ((requestedModes & PROTECTED) != 0 && (allowedModes & PACKAGE) != 0
-                        && VerifyAccess.isSamePackage(m.getDeclaringClass(), lookupClass()))
-                    return;
-            }
-            throw m.makeAccessException(accessFailedMessage(refc, m), this);
-        }
-
-        String accessFailedMessage(Class<?> refc, MemberName m) {
-            Class<?> defc = m.getDeclaringClass();
-            int mods = m.getModifiers();
-            // check the class first:
-            boolean classOK = (Modifier.isPublic(defc.getModifiers()) &&
-                               (defc == refc ||
-                                Modifier.isPublic(refc.getModifiers())));
-            if (!classOK && (allowedModes & PACKAGE) != 0) {
-                classOK = (VerifyAccess.isClassAccessible(defc, lookupClass(), ALL_MODES) &&
-                           (defc == refc ||
-                            VerifyAccess.isClassAccessible(refc, lookupClass(), ALL_MODES)));
-            }
-            if (!classOK)
-                return "class is not public";
-            if (Modifier.isPublic(mods))
-                return "access to public member failed";  // (how?)
-            if (Modifier.isPrivate(mods))
-                return "member is private";
-            if (Modifier.isProtected(mods))
-                return "member is protected";
-            return "member is private to package";
-        }
-
-        private static final boolean ALLOW_NESTMATE_ACCESS = false;
-
-        private void checkSpecialCaller(Class<?> specialCaller) throws IllegalAccessException {
-            int allowedModes = this.allowedModes;
-            if (allowedModes == TRUSTED)  return;
-            if ((allowedModes & PRIVATE) == 0
-                || (specialCaller != lookupClass()
-                    && !(ALLOW_NESTMATE_ACCESS &&
-                         VerifyAccess.isSamePackageMember(specialCaller, lookupClass()))))
-                throw new MemberName(specialCaller).
-                    makeAccessException("no private access for invokespecial", this);
-        }
-
-        private boolean restrictProtectedReceiver(MemberName method) {
-            // The accessing class only has the right to use a protected member
-            // on itself or a subclass.  Enforce that restriction, from JVMS 5.4.4, etc.
-            if (!method.isProtected() || method.isStatic()
-                || allowedModes == TRUSTED
-                || method.getDeclaringClass() == lookupClass()
-                || VerifyAccess.isSamePackage(method.getDeclaringClass(), lookupClass())
-                || (ALLOW_NESTMATE_ACCESS &&
-                    VerifyAccess.isSamePackageMember(method.getDeclaringClass(), lookupClass())))
-                return false;
-            return true;
-        }
-        private MethodHandle restrictReceiver(MemberName method, MethodHandle mh, Class<?> caller) throws IllegalAccessException {
-            assert(!method.isStatic());
-            // receiver type of mh is too wide; narrow to caller
-            if (!method.getDeclaringClass().isAssignableFrom(caller)) {
-                throw method.makeAccessException("caller class must be a subclass below the method", caller);
-            }
-            MethodType rawType = mh.type();
-            if (rawType.parameterType(0) == caller)  return mh;
-            MethodType narrowType = rawType.changeParameterType(0, caller);
-            return mh.viewAsType(narrowType);
-        }
-
-        private MethodHandle getDirectMethod(byte refKind, Class<?> refc, MemberName method, Class<?> callerClass) throws IllegalAccessException {
-            return getDirectMethodCommon(refKind, refc, method,
-                    (refKind == REF_invokeSpecial ||
-                        (MethodHandleNatives.refKindHasReceiver(refKind) &&
-                            restrictProtectedReceiver(method))), callerClass);
-        }
-        private MethodHandle getDirectMethodNoRestrict(byte refKind, Class<?> refc, MemberName method, Class<?> callerClass) throws IllegalAccessException {
-            return getDirectMethodCommon(refKind, refc, method, false, callerClass);
-        }
-        private MethodHandle getDirectMethodCommon(byte refKind, Class<?> refc, MemberName method,
-                                                   boolean doRestrict, Class<?> callerClass) throws IllegalAccessException {
-            checkMethod(refKind, refc, method);
-            if (method.isMethodHandleInvoke())
-                return fakeMethodHandleInvoke(method);
-
-            Class<?> refcAsSuper;
-            if (refKind == REF_invokeSpecial &&
-                refc != lookupClass() &&
-                refc != (refcAsSuper = lookupClass().getSuperclass()) &&
-                refc.isAssignableFrom(lookupClass())) {
-                assert(!method.getName().equals("<init>"));  // not this code path
-                // Per JVMS 6.5, desc. of invokespecial instruction:
-                // If the method is in a superclass of the LC,
-                // and if our original search was above LC.super,
-                // repeat the search (symbolic lookup) from LC.super.
-                // FIXME: MemberName.resolve should handle this instead.
-                MemberName m2 = new MemberName(refcAsSuper,
-                                               method.getName(),
-                                               method.getMethodType(),
-                                               REF_invokeSpecial);
-                m2 = IMPL_NAMES.resolveOrNull(refKind, m2, lookupClassOrNull());
-                if (m2 == null)  throw new InternalError(method.toString());
-                method = m2;
-                refc = refcAsSuper;
-                // redo basic checks
-                checkMethod(refKind, refc, method);
-            }
-
-            MethodHandle mh = DirectMethodHandle.make(refc, method);
-            mh = maybeBindCaller(method, mh, callerClass);
-            mh = mh.setVarargs(method);
-            if (doRestrict)
-                mh = restrictReceiver(method, mh, lookupClass());
-            return mh;
-        }
-        private MethodHandle fakeMethodHandleInvoke(MemberName method) {
-            return throwException(method.getReturnType(), UnsupportedOperationException.class);
-        }
-        private MethodHandle maybeBindCaller(MemberName method, MethodHandle mh,
-                                             Class<?> callerClass)
-                                             throws IllegalAccessException {
-            if (allowedModes == TRUSTED || !MethodHandleNatives.isCallerSensitive(method))
-                return mh;
-            Class<?> hostClass = lookupClass;
-            if ((allowedModes & PRIVATE) == 0)  // caller must use full-power lookup
-                hostClass = callerClass;  // callerClass came from a security manager style stack walk
-            MethodHandle cbmh = MethodHandleImpl.bindCaller(mh, hostClass);
-            // Note: caller will apply varargs after this step happens.
-            return cbmh;
-        }
-        private MethodHandle getDirectField(byte refKind, Class<?> refc, MemberName field) throws IllegalAccessException {
-            checkField(refKind, refc, field);
-            MethodHandle mh = DirectMethodHandle.make(refc, field);
-            boolean doRestrict = (MethodHandleNatives.refKindHasReceiver(refKind) &&
-                                    restrictProtectedReceiver(field));
-            if (doRestrict)
-                mh = restrictReceiver(field, mh, lookupClass());
-            return mh;
-        }
-        private MethodHandle getDirectConstructor(Class<?> refc, MemberName ctor) throws IllegalAccessException {
-            assert(ctor.isConstructor());
-            checkAccess(REF_newInvokeSpecial, refc, ctor);
-            assert(!MethodHandleNatives.isCallerSensitive(ctor));  // maybeBindCaller not relevant here
-            return DirectMethodHandle.make(ctor).setVarargs(ctor);
-        }
-
-        /** Hook called from the JVM (via MethodHandleNatives) to link MH constants:
-         */
-        /*non-public*/
-        MethodHandle linkMethodHandleConstant(byte refKind, Class<?> defc, String name, Object type) throws ReflectiveOperationException {
-            MemberName resolved = null;
-            if (type instanceof MemberName) {
-                resolved = (MemberName) type;
-                if (!resolved.isResolved())  throw new InternalError("unresolved MemberName");
-                assert(name == null || name.equals(resolved.getName()));
-            }
-            if (MethodHandleNatives.refKindIsField(refKind)) {
-                MemberName field = (resolved != null) ? resolved
-                        : resolveOrFail(refKind, defc, name, (Class<?>) type);
-                return getDirectField(refKind, defc, field);
-            } else if (MethodHandleNatives.refKindIsMethod(refKind)) {
-                MemberName method = (resolved != null) ? resolved
-                        : resolveOrFail(refKind, defc, name, (MethodType) type);
-                return getDirectMethod(refKind, defc, method, lookupClass);
-            } else if (refKind == REF_newInvokeSpecial) {
-                assert(name == null || name.equals("<init>"));
-                MemberName ctor = (resolved != null) ? resolved
-                        : resolveOrFail(REF_newInvokeSpecial, defc, name, (MethodType) type);
-                return getDirectConstructor(defc, ctor);
-            }
-            // oops
-            throw new ReflectiveOperationException("bad MethodHandle constant #"+refKind+" "+name+" : "+type);
-        }
-    }
-
-    /**
-     * Produces a method handle giving read access to elements of an array.
-     * The type of the method handle will have a return type of the array's
-     * element type.  Its first argument will be the array type,
-     * and the second will be {@code int}.
-     * @param arrayClass an array type
-     * @return a method handle which can load values from the given array type
-     * @throws NullPointerException if the argument is null
-     * @throws  IllegalArgumentException if arrayClass is not an array type
-     */
-    public static
-    MethodHandle arrayElementGetter(Class<?> arrayClass) throws IllegalArgumentException {
-        return MethodHandleImpl.makeArrayElementAccessor(arrayClass, false);
-    }
-
-    /**
-     * Produces a method handle giving write access to elements of an array.
-     * The type of the method handle will have a void return type.
-     * Its last argument will be the array's element type.
-     * The first and second arguments will be the array type and int.
-     * @return a method handle which can store values into the array type
-     * @throws NullPointerException if the argument is null
-     * @throws IllegalArgumentException if arrayClass is not an array type
-     */
-    public static
-    MethodHandle arrayElementSetter(Class<?> arrayClass) throws IllegalArgumentException {
-        return MethodHandleImpl.makeArrayElementAccessor(arrayClass, true);
-    }
-
-    /// method handle invocation (reflective style)
-
-    /**
-     * Produces a method handle which will invoke any method handle of the
-     * given {@code type}, with a given number of trailing arguments replaced by
-     * a single trailing {@code Object[]} array.
-     * The resulting invoker will be a method handle with the following
-     * arguments:
-     * <ul>
-     * <li>a single {@code MethodHandle} target
-     * <li>zero or more leading values (counted by {@code leadingArgCount})
-     * <li>an {@code Object[]} array containing trailing arguments
-     * </ul>
-     * <p>
-     * The invoker will invoke its target like a call to {@link MethodHandle#invoke invoke} with
-     * the indicated {@code type}.
-     * That is, if the target is exactly of the given {@code type}, it will behave
-     * like {@code invokeExact}; otherwise it behave as if {@link MethodHandle#asType asType}
-     * is used to convert the target to the required {@code type}.
-     * <p>
-     * The type of the returned invoker will not be the given {@code type}, but rather
-     * will have all parameters except the first {@code leadingArgCount}
-     * replaced by a single array of type {@code Object[]}, which will be
-     * the final parameter.
-     * <p>
-     * Before invoking its target, the invoker will spread the final array, apply
-     * reference casts as necessary, and unbox and widen primitive arguments.
-     * <p>
-     * This method is equivalent to the following code (though it may be more efficient):
-     * <p><blockquote><pre>
-MethodHandle invoker = MethodHandles.invoker(type);
-int spreadArgCount = type.parameterCount() - leadingArgCount;
-invoker = invoker.asSpreader(Object[].class, spreadArgCount);
-return invoker;
-     * </pre></blockquote>
-     * <p>
-     * This method throws no reflective or security exceptions.
-     * @param type the desired target type
-     * @param leadingArgCount number of fixed arguments, to be passed unchanged to the target
-     * @return a method handle suitable for invoking any method handle of the given type
-     * @throws NullPointerException if {@code type} is null
-     * @throws IllegalArgumentException if {@code leadingArgCount} is not in
-     *                  the range from 0 to {@code type.parameterCount()} inclusive
-     */
-    static public
-    MethodHandle spreadInvoker(MethodType type, int leadingArgCount) {
-        if (leadingArgCount < 0 || leadingArgCount > type.parameterCount())
-            throw new IllegalArgumentException("bad argument count "+leadingArgCount);
-        return type.invokers().spreadInvoker(leadingArgCount);
-    }
-
-    /**
-     * Produces a special <em>invoker method handle</em> which can be used to
-     * invoke any method handle of the given type, as if by {@link MethodHandle#invokeExact invokeExact}.
-     * The resulting invoker will have a type which is
-     * exactly equal to the desired type, except that it will accept
-     * an additional leading argument of type {@code MethodHandle}.
-     * <p>
-     * This method is equivalent to the following code (though it may be more efficient):
-     * <p><blockquote><pre>
-publicLookup().findVirtual(MethodHandle.class, "invokeExact", type)
-     * </pre></blockquote>
-     *
-     * <p style="font-size:smaller;">
-     * <em>Discussion:</em>
-     * Invoker method handles can be useful when working with variable method handles
-     * of unknown types.
-     * For example, to emulate an {@code invokeExact} call to a variable method
-     * handle {@code M}, extract its type {@code T},
-     * look up the invoker method {@code X} for {@code T},
-     * and call the invoker method, as {@code X.invoke(T, A...)}.
-     * (It would not work to call {@code X.invokeExact}, since the type {@code T}
-     * is unknown.)
-     * If spreading, collecting, or other argument transformations are required,
-     * they can be applied once to the invoker {@code X} and reused on many {@code M}
-     * method handle values, as long as they are compatible with the type of {@code X}.
-     * <p>
-     * <em>(Note:  The invoker method is not available via the Core Reflection API.
-     * An attempt to call {@linkplain java.lang.reflect.Method#invoke java.lang.reflect.Method.invoke}
-     * on the declared {@code invokeExact} or {@code invoke} method will raise an
-     * {@link java.lang.UnsupportedOperationException UnsupportedOperationException}.)</em>
-     * <p>
-     * This method throws no reflective or security exceptions.
-     * @param type the desired target type
-     * @return a method handle suitable for invoking any method handle of the given type
-     */
-    static public
-    MethodHandle exactInvoker(MethodType type) {
-        return type.invokers().exactInvoker();
-    }
-
-    /**
-     * Produces a special <em>invoker method handle</em> which can be used to
-     * invoke any method handle compatible with the given type, as if by {@link MethodHandle#invoke invoke}.
-     * The resulting invoker will have a type which is
-     * exactly equal to the desired type, except that it will accept
-     * an additional leading argument of type {@code MethodHandle}.
-     * <p>
-     * Before invoking its target, if the target differs from the expected type,
-     * the invoker will apply reference casts as
-     * necessary and box, unbox, or widen primitive values, as if by {@link MethodHandle#asType asType}.
-     * Similarly, the return value will be converted as necessary.
-     * If the target is a {@linkplain MethodHandle#asVarargsCollector variable arity method handle},
-     * the required arity conversion will be made, again as if by {@link MethodHandle#asType asType}.
-     * <p>
-     * A {@linkplain MethodType#genericMethodType general method type},
-     * mentions only {@code Object} arguments and return values.
-     * An invoker for such a type is capable of calling any method handle
-     * of the same arity as the general type.
-     * <p>
-     * This method is equivalent to the following code (though it may be more efficient):
-     * <p><blockquote><pre>
-publicLookup().findVirtual(MethodHandle.class, "invoke", type)
-     * </pre></blockquote>
-     * <p>
-     * This method throws no reflective or security exceptions.
-     * @param type the desired target type
-     * @return a method handle suitable for invoking any method handle convertible to the given type
-     */
-    static public
-    MethodHandle invoker(MethodType type) {
-        return type.invokers().generalInvoker();
-    }
-
-    static /*non-public*/
-    MethodHandle basicInvoker(MethodType type) {
-        return type.form().basicInvoker();
-    }
-
-     /// method handle modification (creation from other method handles)
-
-    /**
-     * Produces a method handle which adapts the type of the
-     * given method handle to a new type by pairwise argument and return type conversion.
-     * The original type and new type must have the same number of arguments.
-     * The resulting method handle is guaranteed to report a type
-     * which is equal to the desired new type.
-     * <p>
-     * If the original type and new type are equal, returns target.
-     * <p>
-     * The same conversions are allowed as for {@link MethodHandle#asType MethodHandle.asType},
-     * and some additional conversions are also applied if those conversions fail.
-     * Given types <em>T0</em>, <em>T1</em>, one of the following conversions is applied
-     * if possible, before or instead of any conversions done by {@code asType}:
-     * <ul>
-     * <li>If <em>T0</em> and <em>T1</em> are references, and <em>T1</em> is an interface type,
-     *     then the value of type <em>T0</em> is passed as a <em>T1</em> without a cast.
-     *     (This treatment of interfaces follows the usage of the bytecode verifier.)
-     * <li>If <em>T0</em> is boolean and <em>T1</em> is another primitive,
-     *     the boolean is converted to a byte value, 1 for true, 0 for false.
-     *     (This treatment follows the usage of the bytecode verifier.)
-     * <li>If <em>T1</em> is boolean and <em>T0</em> is another primitive,
-     *     <em>T0</em> is converted to byte via Java casting conversion (JLS 5.5),
-     *     and the low order bit of the result is tested, as if by {@code (x & 1) != 0}.
-     * <li>If <em>T0</em> and <em>T1</em> are primitives other than boolean,
-     *     then a Java casting conversion (JLS 5.5) is applied.
-     *     (Specifically, <em>T0</em> will convert to <em>T1</em> by
-     *     widening and/or narrowing.)
-     * <li>If <em>T0</em> is a reference and <em>T1</em> a primitive, an unboxing
-     *     conversion will be applied at runtime, possibly followed
-     *     by a Java casting conversion (JLS 5.5) on the primitive value,
-     *     possibly followed by a conversion from byte to boolean by testing
-     *     the low-order bit.
-     * <li>If <em>T0</em> is a reference and <em>T1</em> a primitive,
-     *     and if the reference is null at runtime, a zero value is introduced.
-     * </ul>
-     * @param target the method handle to invoke after arguments are retyped
-     * @param newType the expected type of the new method handle
-     * @return a method handle which delegates to the target after performing
-     *           any necessary argument conversions, and arranges for any
-     *           necessary return value conversions
-     * @throws NullPointerException if either argument is null
-     * @throws WrongMethodTypeException if the conversion cannot be made
-     * @see MethodHandle#asType
-     */
-    public static
-    MethodHandle explicitCastArguments(MethodHandle target, MethodType newType) {
-        if (!target.type().isCastableTo(newType)) {
-            throw new WrongMethodTypeException("cannot explicitly cast "+target+" to "+newType);
-        }
-        return MethodHandleImpl.makePairwiseConvert(target, newType, 2);
-    }
-
-    /**
-     * Produces a method handle which adapts the calling sequence of the
-     * given method handle to a new type, by reordering the arguments.
-     * The resulting method handle is guaranteed to report a type
-     * which is equal to the desired new type.
-     * <p>
-     * The given array controls the reordering.
-     * Call {@code #I} the number of incoming parameters (the value
-     * {@code newType.parameterCount()}, and call {@code #O} the number
-     * of outgoing parameters (the value {@code target.type().parameterCount()}).
-     * Then the length of the reordering array must be {@code #O},
-     * and each element must be a non-negative number less than {@code #I}.
-     * For every {@code N} less than {@code #O}, the {@code N}-th
-     * outgoing argument will be taken from the {@code I}-th incoming
-     * argument, where {@code I} is {@code reorder[N]}.
-     * <p>
-     * No argument or return value conversions are applied.
-     * The type of each incoming argument, as determined by {@code newType},
-     * must be identical to the type of the corresponding outgoing parameter
-     * or parameters in the target method handle.
-     * The return type of {@code newType} must be identical to the return
-     * type of the original target.
-     * <p>
-     * The reordering array need not specify an actual permutation.
-     * An incoming argument will be duplicated if its index appears
-     * more than once in the array, and an incoming argument will be dropped
-     * if its index does not appear in the array.
-     * As in the case of {@link #dropArguments(MethodHandle,int,List) dropArguments},
-     * incoming arguments which are not mentioned in the reordering array
-     * are may be any type, as determined only by {@code newType}.
-     * <blockquote><pre>
-import static java.lang.invoke.MethodHandles.*;
-import static java.lang.invoke.MethodType.*;
-...
-MethodType intfn1 = methodType(int.class, int.class);
-MethodType intfn2 = methodType(int.class, int.class, int.class);
-MethodHandle sub = ... {int x, int y => x-y} ...;
-assert(sub.type().equals(intfn2));
-MethodHandle sub1 = permuteArguments(sub, intfn2, 0, 1);
-MethodHandle rsub = permuteArguments(sub, intfn2, 1, 0);
-assert((int)rsub.invokeExact(1, 100) == 99);
-MethodHandle add = ... {int x, int y => x+y} ...;
-assert(add.type().equals(intfn2));
-MethodHandle twice = permuteArguments(add, intfn1, 0, 0);
-assert(twice.type().equals(intfn1));
-assert((int)twice.invokeExact(21) == 42);
-     * </pre></blockquote>
-     * @param target the method handle to invoke after arguments are reordered
-     * @param newType the expected type of the new method handle
-     * @param reorder an index array which controls the reordering
-     * @return a method handle which delegates to the target after it
-     *           drops unused arguments and moves and/or duplicates the other arguments
-     * @throws NullPointerException if any argument is null
-     * @throws IllegalArgumentException if the index array length is not equal to
-     *                  the arity of the target, or if any index array element
-     *                  not a valid index for a parameter of {@code newType},
-     *                  or if two corresponding parameter types in
-     *                  {@code target.type()} and {@code newType} are not identical,
-     */
-    public static
-    MethodHandle permuteArguments(MethodHandle target, MethodType newType, int... reorder) {
-        checkReorder(reorder, newType, target.type());
-        return target.permuteArguments(newType, reorder);
-    }
-
-    private static void checkReorder(int[] reorder, MethodType newType, MethodType oldType) {
-        if (newType.returnType() != oldType.returnType())
-            throw newIllegalArgumentException("return types do not match",
-                    oldType, newType);
-        if (reorder.length == oldType.parameterCount()) {
-            int limit = newType.parameterCount();
-            boolean bad = false;
-            for (int j = 0; j < reorder.length; j++) {
-                int i = reorder[j];
-                if (i < 0 || i >= limit) {
-                    bad = true; break;
-                }
-                Class<?> src = newType.parameterType(i);
-                Class<?> dst = oldType.parameterType(j);
-                if (src != dst)
-                    throw newIllegalArgumentException("parameter types do not match after reorder",
-                            oldType, newType);
-            }
-            if (!bad)  return;
-        }
-        throw newIllegalArgumentException("bad reorder array: "+Arrays.toString(reorder));
-    }
-
-    /**
-     * Produces a method handle of the requested return type which returns the given
-     * constant value every time it is invoked.
-     * <p>
-     * Before the method handle is returned, the passed-in value is converted to the requested type.
-     * If the requested type is primitive, widening primitive conversions are attempted,
-     * else reference conversions are attempted.
-     * <p>The returned method handle is equivalent to {@code identity(type).bindTo(value)}.
-     * @param type the return type of the desired method handle
-     * @param value the value to return
-     * @return a method handle of the given return type and no arguments, which always returns the given value
-     * @throws NullPointerException if the {@code type} argument is null
-     * @throws ClassCastException if the value cannot be converted to the required return type
-     * @throws IllegalArgumentException if the given type is {@code void.class}
-     */
-    public static
-    MethodHandle constant(Class<?> type, Object value) {
-        if (type.isPrimitive()) {
-            if (type == void.class)
-                throw newIllegalArgumentException("void type");
-            Wrapper w = Wrapper.forPrimitiveType(type);
-            return insertArguments(identity(type), 0, w.convert(value, type));
-        } else {
-            return identity(type).bindTo(type.cast(value));
-        }
-    }
-
-    /**
-     * Produces a method handle which returns its sole argument when invoked.
-     * @param type the type of the sole parameter and return value of the desired method handle
-     * @return a unary method handle which accepts and returns the given type
-     * @throws NullPointerException if the argument is null
-     * @throws IllegalArgumentException if the given type is {@code void.class}
-     */
-    public static
-    MethodHandle identity(Class<?> type) {
-        if (type == void.class)
-            throw newIllegalArgumentException("void type");
-        else if (type == Object.class)
-            return ValueConversions.identity();
-        else if (type.isPrimitive())
-            return ValueConversions.identity(Wrapper.forPrimitiveType(type));
-        else
-            return MethodHandleImpl.makeReferenceIdentity(type);
-    }
-
-    /**
-     * Provides a target method handle with one or more <em>bound arguments</em>
-     * in advance of the method handle's invocation.
-     * The formal parameters to the target corresponding to the bound
-     * arguments are called <em>bound parameters</em>.
-     * Returns a new method handle which saves away the bound arguments.
-     * When it is invoked, it receives arguments for any non-bound parameters,
-     * binds the saved arguments to their corresponding parameters,
-     * and calls the original target.
-     * <p>
-     * The type of the new method handle will drop the types for the bound
-     * parameters from the original target type, since the new method handle
-     * will no longer require those arguments to be supplied by its callers.
-     * <p>
-     * Each given argument object must match the corresponding bound parameter type.
-     * If a bound parameter type is a primitive, the argument object
-     * must be a wrapper, and will be unboxed to produce the primitive value.
-     * <p>
-     * The {@code pos} argument selects which parameters are to be bound.
-     * It may range between zero and <i>N-L</i> (inclusively),
-     * where <i>N</i> is the arity of the target method handle
-     * and <i>L</i> is the length of the values array.
-     * @param target the method handle to invoke after the argument is inserted
-     * @param pos where to insert the argument (zero for the first)
-     * @param values the series of arguments to insert
-     * @return a method handle which inserts an additional argument,
-     *         before calling the original method handle
-     * @throws NullPointerException if the target or the {@code values} array is null
-     * @see MethodHandle#bindTo
-     */
-    public static
-    MethodHandle insertArguments(MethodHandle target, int pos, Object... values) {
-        int insCount = values.length;
-        MethodType oldType = target.type();
-        int outargs = oldType.parameterCount();
-        int inargs  = outargs - insCount;
-        if (inargs < 0)
-            throw newIllegalArgumentException("too many values to insert");
-        if (pos < 0 || pos > inargs)
-            throw newIllegalArgumentException("no argument type to append");
-        MethodHandle result = target;
-        for (int i = 0; i < insCount; i++) {
-            Object value = values[i];
-            Class<?> ptype = oldType.parameterType(pos+i);
-            if (ptype.isPrimitive()) {
-                char btype = 'I';
-                Wrapper w = Wrapper.forPrimitiveType(ptype);
-                switch (w) {
-                case LONG:    btype = 'J'; break;
-                case FLOAT:   btype = 'F'; break;
-                case DOUBLE:  btype = 'D'; break;
-                }
-                // perform unboxing and/or primitive conversion
-                value = w.convert(value, ptype);
-                result = result.bindArgument(pos, btype, value);
-                continue;
-            }
-            value = ptype.cast(value);  // throw CCE if needed
-            if (pos == 0) {
-                result = result.bindReceiver(value);
-            } else {
-                result = result.bindArgument(pos, 'L', value);
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Produces a method handle which will discard some dummy arguments
-     * before calling some other specified <i>target</i> method handle.
-     * The type of the new method handle will be the same as the target's type,
-     * except it will also include the dummy argument types,
-     * at some given position.
-     * <p>
-     * The {@code pos} argument may range between zero and <i>N</i>,
-     * where <i>N</i> is the arity of the target.
-     * If {@code pos} is zero, the dummy arguments will precede
-     * the target's real arguments; if {@code pos} is <i>N</i>
-     * they will come after.
-     * <p>
-     * <b>Example:</b>
-     * <p><blockquote><pre>
-import static java.lang.invoke.MethodHandles.*;
-import static java.lang.invoke.MethodType.*;
-...
-MethodHandle cat = lookup().findVirtual(String.class,
-  "concat", methodType(String.class, String.class));
-assertEquals("xy", (String) cat.invokeExact("x", "y"));
-MethodType bigType = cat.type().insertParameterTypes(0, int.class, String.class);
-MethodHandle d0 = dropArguments(cat, 0, bigType.parameterList().subList(0,2));
-assertEquals(bigType, d0.type());
-assertEquals("yz", (String) d0.invokeExact(123, "x", "y", "z"));
-     * </pre></blockquote>
-     * <p>
-     * This method is also equivalent to the following code:
-     * <p><blockquote><pre>
-     * {@link #dropArguments(MethodHandle,int,Class...) dropArguments}(target, pos, valueTypes.toArray(new Class[0]))
-     * </pre></blockquote>
-     * @param target the method handle to invoke after the arguments are dropped
-     * @param valueTypes the type(s) of the argument(s) to drop
-     * @param pos position of first argument to drop (zero for the leftmost)
-     * @return a method handle which drops arguments of the given types,
-     *         before calling the original method handle
-     * @throws NullPointerException if the target is null,
-     *                              or if the {@code valueTypes} list or any of its elements is null
-     * @throws IllegalArgumentException if any element of {@code valueTypes} is {@code void.class},
-     *                  or if {@code pos} is negative or greater than the arity of the target,
-     *                  or if the new method handle's type would have too many parameters
-     */
-    public static
-    MethodHandle dropArguments(MethodHandle target, int pos, List<Class<?>> valueTypes) {
-        MethodType oldType = target.type();  // get NPE
-        int dropped = valueTypes.size();
-        MethodType.checkSlotCount(dropped);
-        if (dropped == 0)  return target;
-        int outargs = oldType.parameterCount();
-        int inargs  = outargs + dropped;
-        if (pos < 0 || pos >= inargs)
-            throw newIllegalArgumentException("no argument type to remove");
-        ArrayList<Class<?>> ptypes = new ArrayList<>(oldType.parameterList());
-        ptypes.addAll(pos, valueTypes);
-        MethodType newType = MethodType.methodType(oldType.returnType(), ptypes);
-        return target.dropArguments(newType, pos, dropped);
-    }
-
-    /**
-     * Produces a method handle which will discard some dummy arguments
-     * before calling some other specified <i>target</i> method handle.
-     * The type of the new method handle will be the same as the target's type,
-     * except it will also include the dummy argument types,
-     * at some given position.
-     * <p>
-     * The {@code pos} argument may range between zero and <i>N</i>,
-     * where <i>N</i> is the arity of the target.
-     * If {@code pos} is zero, the dummy arguments will precede
-     * the target's real arguments; if {@code pos} is <i>N</i>
-     * they will come after.
-     * <p>
-     * <b>Example:</b>
-     * <p><blockquote><pre>
-import static java.lang.invoke.MethodHandles.*;
-import static java.lang.invoke.MethodType.*;
-...
-MethodHandle cat = lookup().findVirtual(String.class,
-  "concat", methodType(String.class, String.class));
-assertEquals("xy", (String) cat.invokeExact("x", "y"));
-MethodHandle d0 = dropArguments(cat, 0, String.class);
-assertEquals("yz", (String) d0.invokeExact("x", "y", "z"));
-MethodHandle d1 = dropArguments(cat, 1, String.class);
-assertEquals("xz", (String) d1.invokeExact("x", "y", "z"));
-MethodHandle d2 = dropArguments(cat, 2, String.class);
-assertEquals("xy", (String) d2.invokeExact("x", "y", "z"));
-MethodHandle d12 = dropArguments(cat, 1, int.class, boolean.class);
-assertEquals("xz", (String) d12.invokeExact("x", 12, true, "z"));
-     * </pre></blockquote>
-     * <p>
-     * This method is also equivalent to the following code:
-     * <p><blockquote><pre>
-     * {@link #dropArguments(MethodHandle,int,List) dropArguments}(target, pos, Arrays.asList(valueTypes))
-     * </pre></blockquote>
-     * @param target the method handle to invoke after the arguments are dropped
-     * @param valueTypes the type(s) of the argument(s) to drop
-     * @param pos position of first argument to drop (zero for the leftmost)
-     * @return a method handle which drops arguments of the given types,
-     *         before calling the original method handle
-     * @throws NullPointerException if the target is null,
-     *                              or if the {@code valueTypes} array or any of its elements is null
-     * @throws IllegalArgumentException if any element of {@code valueTypes} is {@code void.class},
-     *                  or if {@code pos} is negative or greater than the arity of the target,
-     *                  or if the new method handle's type would have too many parameters
-     */
-    public static
-    MethodHandle dropArguments(MethodHandle target, int pos, Class<?>... valueTypes) {
-        return dropArguments(target, pos, Arrays.asList(valueTypes));
-    }
-
-    /**
-     * Adapts a target method handle by pre-processing
-     * one or more of its arguments, each with its own unary filter function,
-     * and then calling the target with each pre-processed argument
-     * replaced by the result of its corresponding filter function.
-     * <p>
-     * The pre-processing is performed by one or more method handles,
-     * specified in the elements of the {@code filters} array.
-     * The first element of the filter array corresponds to the {@code pos}
-     * argument of the target, and so on in sequence.
-     * <p>
-     * Null arguments in the array are treated as identity functions,
-     * and the corresponding arguments left unchanged.
-     * (If there are no non-null elements in the array, the original target is returned.)
-     * Each filter is applied to the corresponding argument of the adapter.
-     * <p>
-     * If a filter {@code F} applies to the {@code N}th argument of
-     * the target, then {@code F} must be a method handle which
-     * takes exactly one argument.  The type of {@code F}'s sole argument
-     * replaces the corresponding argument type of the target
-     * in the resulting adapted method handle.
-     * The return type of {@code F} must be identical to the corresponding
-     * parameter type of the target.
-     * <p>
-     * It is an error if there are elements of {@code filters}
-     * (null or not)
-     * which do not correspond to argument positions in the target.
-     * <b>Example:</b>
-     * <p><blockquote><pre>
-import static java.lang.invoke.MethodHandles.*;
-import static java.lang.invoke.MethodType.*;
-...
-MethodHandle cat = lookup().findVirtual(String.class,
-  "concat", methodType(String.class, String.class));
-MethodHandle upcase = lookup().findVirtual(String.class,
-  "toUpperCase", methodType(String.class));
-assertEquals("xy", (String) cat.invokeExact("x", "y"));
-MethodHandle f0 = filterArguments(cat, 0, upcase);
-assertEquals("Xy", (String) f0.invokeExact("x", "y")); // Xy
-MethodHandle f1 = filterArguments(cat, 1, upcase);
-assertEquals("xY", (String) f1.invokeExact("x", "y")); // xY
-MethodHandle f2 = filterArguments(cat, 0, upcase, upcase);
-assertEquals("XY", (String) f2.invokeExact("x", "y")); // XY
-     * </pre></blockquote>
-     * <p> Here is pseudocode for the resulting adapter:
-     * <blockquote><pre>
-     * V target(P... p, A[i]... a[i], B... b);
-     * A[i] filter[i](V[i]);
-     * T adapter(P... p, V[i]... v[i], B... b) {
-     *   return target(p..., f[i](v[i])..., b...);
-     * }
-     * </pre></blockquote>
-     *
-     * @param target the method handle to invoke after arguments are filtered
-     * @param pos the position of the first argument to filter
-     * @param filters method handles to call initially on filtered arguments
-     * @return method handle which incorporates the specified argument filtering logic
-     * @throws NullPointerException if the target is null
-     *                              or if the {@code filters} array is null
-     * @throws IllegalArgumentException if a non-null element of {@code filters}
-     *          does not match a corresponding argument type of target as described above,
-     *          or if the {@code pos+filters.length} is greater than {@code target.type().parameterCount()}
-     */
-    public static
-    MethodHandle filterArguments(MethodHandle target, int pos, MethodHandle... filters) {
-        MethodType targetType = target.type();
-        MethodHandle adapter = target;
-        MethodType adapterType = null;
-        assert((adapterType = targetType) != null);
-        int maxPos = targetType.parameterCount();
-        if (pos + filters.length > maxPos)
-            throw newIllegalArgumentException("too many filters");
-        int curPos = pos-1;  // pre-incremented
-        for (MethodHandle filter : filters) {
-            curPos += 1;
-            if (filter == null)  continue;  // ignore null elements of filters
-            adapter = filterArgument(adapter, curPos, filter);
-            assert((adapterType = adapterType.changeParameterType(curPos, filter.type().parameterType(0))) != null);
-        }
-        assert(adapterType.equals(adapter.type()));
-        return adapter;
-    }
-
-    /*non-public*/ static
-    MethodHandle filterArgument(MethodHandle target, int pos, MethodHandle filter) {
-        MethodType targetType = target.type();
-        MethodType filterType = filter.type();
-        if (filterType.parameterCount() != 1
-            || filterType.returnType() != targetType.parameterType(pos))
-            throw newIllegalArgumentException("target and filter types do not match", targetType, filterType);
-        return MethodHandleImpl.makeCollectArguments(target, filter, pos, false);
-    }
-
-    // FIXME: Make this public in M1.
-    /*non-public*/ static
-    MethodHandle collectArguments(MethodHandle target, int pos, MethodHandle collector) {
-        MethodType targetType = target.type();
-        MethodType filterType = collector.type();
-        if (filterType.returnType() != void.class &&
-            filterType.returnType() != targetType.parameterType(pos))
-            throw newIllegalArgumentException("target and filter types do not match", targetType, filterType);
-        return MethodHandleImpl.makeCollectArguments(target, collector, pos, false);
-    }
-
-    /**
-     * Adapts a target method handle by post-processing
-     * its return value (if any) with a filter (another method handle).
-     * The result of the filter is returned from the adapter.
-     * <p>
-     * If the target returns a value, the filter must accept that value as
-     * its only argument.
-     * If the target returns void, the filter must accept no arguments.
-     * <p>
-     * The return type of the filter
-     * replaces the return type of the target
-     * in the resulting adapted method handle.
-     * The argument type of the filter (if any) must be identical to the
-     * return type of the target.
-     * <b>Example:</b>
-     * <p><blockquote><pre>
-import static java.lang.invoke.MethodHandles.*;
-import static java.lang.invoke.MethodType.*;
-...
-MethodHandle cat = lookup().findVirtual(String.class,
-  "concat", methodType(String.class, String.class));
-MethodHandle length = lookup().findVirtual(String.class,
-  "length", methodType(int.class));
-System.out.println((String) cat.invokeExact("x", "y")); // xy
-MethodHandle f0 = filterReturnValue(cat, length);
-System.out.println((int) f0.invokeExact("x", "y")); // 2
-     * </pre></blockquote>
-     * <p> Here is pseudocode for the resulting adapter:
-     * <blockquote><pre>
-     * V target(A...);
-     * T filter(V);
-     * T adapter(A... a) {
-     *   V v = target(a...);
-     *   return filter(v);
-     * }
-     * // and if the target has a void return:
-     * void target2(A...);
-     * T filter2();
-     * T adapter2(A... a) {
-     *   target2(a...);
-     *   return filter2();
-     * }
-     * // and if the filter has a void return:
-     * V target3(A...);
-     * void filter3(V);
-     * void adapter3(A... a) {
-     *   V v = target3(a...);
-     *   filter3(v);
-     * }
-     * </pre></blockquote>
-     * @param target the method handle to invoke before filtering the return value
-     * @param filter method handle to call on the return value
-     * @return method handle which incorporates the specified return value filtering logic
-     * @throws NullPointerException if either argument is null
-     * @throws IllegalArgumentException if the argument list of {@code filter}
-     *          does not match the return type of target as described above
-     */
-    public static
-    MethodHandle filterReturnValue(MethodHandle target, MethodHandle filter) {
-        MethodType targetType = target.type();
-        MethodType filterType = filter.type();
-        Class<?> rtype = targetType.returnType();
-        int filterValues = filterType.parameterCount();
-        if (filterValues == 0
-                ? (rtype != void.class)
-                : (rtype != filterType.parameterType(0)))
-            throw newIllegalArgumentException("target and filter types do not match", target, filter);
-        // result = fold( lambda(retval, arg...) { filter(retval) },
-        //                lambda(        arg...) { target(arg...) } )
-        return MethodHandleImpl.makeCollectArguments(filter, target, 0, false);
-    }
-
-    /**
-     * Adapts a target method handle by pre-processing
-     * some of its arguments, and then calling the target with
-     * the result of the pre-processing, inserted into the original
-     * sequence of arguments.
-     * <p>
-     * The pre-processing is performed by {@code combiner}, a second method handle.
-     * Of the arguments passed to the adapter, the first {@code N} arguments
-     * are copied to the combiner, which is then called.
-     * (Here, {@code N} is defined as the parameter count of the combiner.)
-     * After this, control passes to the target, with any result
-     * from the combiner inserted before the original {@code N} incoming
-     * arguments.
-     * <p>
-     * If the combiner returns a value, the first parameter type of the target
-     * must be identical with the return type of the combiner, and the next
-     * {@code N} parameter types of the target must exactly match the parameters
-     * of the combiner.
-     * <p>
-     * If the combiner has a void return, no result will be inserted,
-     * and the first {@code N} parameter types of the target
-     * must exactly match the parameters of the combiner.
-     * <p>
-     * The resulting adapter is the same type as the target, except that the
-     * first parameter type is dropped,
-     * if it corresponds to the result of the combiner.
-     * <p>
-     * (Note that {@link #dropArguments(MethodHandle,int,List) dropArguments} can be used to remove any arguments
-     * that either the combiner or the target does not wish to receive.
-     * If some of the incoming arguments are destined only for the combiner,
-     * consider using {@link MethodHandle#asCollector asCollector} instead, since those
-     * arguments will not need to be live on the stack on entry to the
-     * target.)
-     * <b>Example:</b>
-     * <p><blockquote><pre>
-import static java.lang.invoke.MethodHandles.*;
-import static java.lang.invoke.MethodType.*;
-...
-MethodHandle trace = publicLookup().findVirtual(java.io.PrintStream.class,
-  "println", methodType(void.class, String.class))
-    .bindTo(System.out);
-MethodHandle cat = lookup().findVirtual(String.class,
-  "concat", methodType(String.class, String.class));
-assertEquals("boojum", (String) cat.invokeExact("boo", "jum"));
-MethodHandle catTrace = foldArguments(cat, trace);
-// also prints "boo":
-assertEquals("boojum", (String) catTrace.invokeExact("boo", "jum"));
-     * </pre></blockquote>
-     * <p> Here is pseudocode for the resulting adapter:
-     * <blockquote><pre>
-     * // there are N arguments in A...
-     * T target(V, A[N]..., B...);
-     * V combiner(A...);
-     * T adapter(A... a, B... b) {
-     *   V v = combiner(a...);
-     *   return target(v, a..., b...);
-     * }
-     * // and if the combiner has a void return:
-     * T target2(A[N]..., B...);
-     * void combiner2(A...);
-     * T adapter2(A... a, B... b) {
-     *   combiner2(a...);
-     *   return target2(a..., b...);
-     * }
-     * </pre></blockquote>
-     * @param target the method handle to invoke after arguments are combined
-     * @param combiner method handle to call initially on the incoming arguments
-     * @return method handle which incorporates the specified argument folding logic
-     * @throws NullPointerException if either argument is null
-     * @throws IllegalArgumentException if {@code combiner}'s return type
-     *          is non-void and not the same as the first argument type of
-     *          the target, or if the initial {@code N} argument types
-     *          of the target
-     *          (skipping one matching the {@code combiner}'s return type)
-     *          are not identical with the argument types of {@code combiner}
-     */
-    public static
-    MethodHandle foldArguments(MethodHandle target, MethodHandle combiner) {
-        int pos = 0;
-        MethodType targetType = target.type();
-        MethodType combinerType = combiner.type();
-        int foldPos = pos;
-        int foldArgs = combinerType.parameterCount();
-        int foldVals = combinerType.returnType() == void.class ? 0 : 1;
-        int afterInsertPos = foldPos + foldVals;
-        boolean ok = (targetType.parameterCount() >= afterInsertPos + foldArgs);
-        if (ok && !(combinerType.parameterList()
-                    .equals(targetType.parameterList().subList(afterInsertPos,
-                                                               afterInsertPos + foldArgs))))
-            ok = false;
-        if (ok && foldVals != 0 && !combinerType.returnType().equals(targetType.parameterType(0)))
-            ok = false;
-        if (!ok)
-            throw misMatchedTypes("target and combiner types", targetType, combinerType);
-        MethodType newType = targetType.dropParameterTypes(foldPos, afterInsertPos);
-        return MethodHandleImpl.makeCollectArguments(target, combiner, foldPos, true);
-    }
-
-    /**
-     * Makes a method handle which adapts a target method handle,
-     * by guarding it with a test, a boolean-valued method handle.
-     * If the guard fails, a fallback handle is called instead.
-     * All three method handles must have the same corresponding
-     * argument and return types, except that the return type
-     * of the test must be boolean, and the test is allowed
-     * to have fewer arguments than the other two method handles.
-     * <p> Here is pseudocode for the resulting adapter:
-     * <blockquote><pre>
-     * boolean test(A...);
-     * T target(A...,B...);
-     * T fallback(A...,B...);
-     * T adapter(A... a,B... b) {
-     *   if (test(a...))
-     *     return target(a..., b...);
-     *   else
-     *     return fallback(a..., b...);
-     * }
-     * </pre></blockquote>
-     * Note that the test arguments ({@code a...} in the pseudocode) cannot
-     * be modified by execution of the test, and so are passed unchanged
-     * from the caller to the target or fallback as appropriate.
-     * @param test method handle used for test, must return boolean
-     * @param target method handle to call if test passes
-     * @param fallback method handle to call if test fails
-     * @return method handle which incorporates the specified if/then/else logic
-     * @throws NullPointerException if any argument is null
-     * @throws IllegalArgumentException if {@code test} does not return boolean,
-     *          or if all three method types do not match (with the return
-     *          type of {@code test} changed to match that of the target).
-     */
-    public static
-    MethodHandle guardWithTest(MethodHandle test,
-                               MethodHandle target,
-                               MethodHandle fallback) {
-        MethodType gtype = test.type();
-        MethodType ttype = target.type();
-        MethodType ftype = fallback.type();
-        if (!ttype.equals(ftype))
-            throw misMatchedTypes("target and fallback types", ttype, ftype);
-        if (gtype.returnType() != boolean.class)
-            throw newIllegalArgumentException("guard type is not a predicate "+gtype);
-        List<Class<?>> targs = ttype.parameterList();
-        List<Class<?>> gargs = gtype.parameterList();
-        if (!targs.equals(gargs)) {
-            int gpc = gargs.size(), tpc = targs.size();
-            if (gpc >= tpc || !targs.subList(0, gpc).equals(gargs))
-                throw misMatchedTypes("target and test types", ttype, gtype);
-            test = dropArguments(test, gpc, targs.subList(gpc, tpc));
-            gtype = test.type();
-        }
-        return MethodHandleImpl.makeGuardWithTest(test, target, fallback);
-    }
-
-    static RuntimeException misMatchedTypes(String what, MethodType t1, MethodType t2) {
-        return newIllegalArgumentException(what + " must match: " + t1 + " != " + t2);
-    }
-
-    /**
-     * Makes a method handle which adapts a target method handle,
-     * by running it inside an exception handler.
-     * If the target returns normally, the adapter returns that value.
-     * If an exception matching the specified type is thrown, the fallback
-     * handle is called instead on the exception, plus the original arguments.
-     * <p>
-     * The target and handler must have the same corresponding
-     * argument and return types, except that handler may omit trailing arguments
-     * (similarly to the predicate in {@link #guardWithTest guardWithTest}).
-     * Also, the handler must have an extra leading parameter of {@code exType} or a supertype.
-     * <p> Here is pseudocode for the resulting adapter:
-     * <blockquote><pre>
-     * T target(A..., B...);
-     * T handler(ExType, A...);
-     * T adapter(A... a, B... b) {
-     *   try {
-     *     return target(a..., b...);
-     *   } catch (ExType ex) {
-     *     return handler(ex, a...);
-     *   }
-     * }
-     * </pre></blockquote>
-     * Note that the saved arguments ({@code a...} in the pseudocode) cannot
-     * be modified by execution of the target, and so are passed unchanged
-     * from the caller to the handler, if the handler is invoked.
-     * <p>
-     * The target and handler must return the same type, even if the handler
-     * always throws.  (This might happen, for instance, because the handler
-     * is simulating a {@code finally} clause).
-     * To create such a throwing handler, compose the handler creation logic
-     * with {@link #throwException throwException},
-     * in order to create a method handle of the correct return type.
-     * @param target method handle to call
-     * @param exType the type of exception which the handler will catch
-     * @param handler method handle to call if a matching exception is thrown
-     * @return method handle which incorporates the specified try/catch logic
-     * @throws NullPointerException if any argument is null
-     * @throws IllegalArgumentException if {@code handler} does not accept
-     *          the given exception type, or if the method handle types do
-     *          not match in their return types and their
-     *          corresponding parameters
-     */
-    public static
-    MethodHandle catchException(MethodHandle target,
-                                Class<? extends Throwable> exType,
-                                MethodHandle handler) {
-        MethodType ttype = target.type();
-        MethodType htype = handler.type();
-        if (htype.parameterCount() < 1 ||
-            !htype.parameterType(0).isAssignableFrom(exType))
-            throw newIllegalArgumentException("handler does not accept exception type "+exType);
-        if (htype.returnType() != ttype.returnType())
-            throw misMatchedTypes("target and handler return types", ttype, htype);
-        List<Class<?>> targs = ttype.parameterList();
-        List<Class<?>> hargs = htype.parameterList();
-        hargs = hargs.subList(1, hargs.size());  // omit leading parameter from handler
-        if (!targs.equals(hargs)) {
-            int hpc = hargs.size(), tpc = targs.size();
-            if (hpc >= tpc || !targs.subList(0, hpc).equals(hargs))
-                throw misMatchedTypes("target and handler types", ttype, htype);
-            handler = dropArguments(handler, 1+hpc, targs.subList(hpc, tpc));
-            htype = handler.type();
-        }
-        return MethodHandleImpl.makeGuardWithCatch(target, exType, handler);
-    }
-
-    /**
-     * Produces a method handle which will throw exceptions of the given {@code exType}.
-     * The method handle will accept a single argument of {@code exType},
-     * and immediately throw it as an exception.
-     * The method type will nominally specify a return of {@code returnType}.
-     * The return type may be anything convenient:  It doesn't matter to the
-     * method handle's behavior, since it will never return normally.
-     * @return method handle which can throw the given exceptions
-     * @throws NullPointerException if either argument is null
-     */
-    public static
-    MethodHandle throwException(Class<?> returnType, Class<? extends Throwable> exType) {
-        if (!Throwable.class.isAssignableFrom(exType))
-            throw new ClassCastException(exType.getName());
-        return MethodHandleImpl.throwException(MethodType.methodType(returnType, exType));
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/MethodType.java b/ojluni/src/main/java/java/lang/invoke/MethodType.java
deleted file mode 100755
index c690dad..0000000
--- a/ojluni/src/main/java/java/lang/invoke/MethodType.java
+++ /dev/null
@@ -1,1279 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, 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.
- */
-
-package java.lang.invoke;
-
-import sun.invoke.util.Wrapper;
-import java.lang.ref.WeakReference;
-import java.lang.ref.ReferenceQueue;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import sun.invoke.util.BytecodeDescriptor;
-import static java.lang.invoke.MethodHandleStatics.*;
-import sun.invoke.util.VerifyType;
-
-/**
- * A method type represents the arguments and return type accepted and
- * returned by a method handle, or the arguments and return type passed
- * and expected  by a method handle caller.  Method types must be properly
- * matched between a method handle and all its callers,
- * and the JVM's operations enforce this matching at, specifically
- * during calls to {@link MethodHandle#invokeExact MethodHandle.invokeExact}
- * and {@link MethodHandle#invoke MethodHandle.invoke}, and during execution
- * of {@code invokedynamic} instructions.
- * <p>
- * The structure is a return type accompanied by any number of parameter types.
- * The types (primitive, {@code void}, and reference) are represented by {@link Class} objects.
- * (For ease of exposition, we treat {@code void} as if it were a type.
- * In fact, it denotes the absence of a return type.)
- * <p>
- * All instances of {@code MethodType} are immutable.
- * Two instances are completely interchangeable if they compare equal.
- * Equality depends on pairwise correspondence of the return and parameter types and on nothing else.
- * <p>
- * This type can be created only by factory methods.
- * All factory methods may cache values, though caching is not guaranteed.
- * Some factory methods are static, while others are virtual methods which
- * modify precursor method types, e.g., by changing a selected parameter.
- * <p>
- * Factory methods which operate on groups of parameter types
- * are systematically presented in two versions, so that both Java arrays and
- * Java lists can be used to work with groups of parameter types.
- * The query methods {@code parameterArray} and {@code parameterList}
- * also provide a choice between arrays and lists.
- * <p>
- * {@code MethodType} objects are sometimes derived from bytecode instructions
- * such as {@code invokedynamic}, specifically from the type descriptor strings associated
- * with the instructions in a class file's constant pool.
- * <p>
- * Like classes and strings, method types can also be represented directly
- * in a class file's constant pool as constants.
- * A method type may be loaded by an {@code ldc} instruction which refers
- * to a suitable {@code CONSTANT_MethodType} constant pool entry.
- * The entry refers to a {@code CONSTANT_Utf8} spelling for the descriptor string.
- * For more details, see the <a href="package-summary.html#mtcon">package summary</a>.
- * <p>
- * When the JVM materializes a {@code MethodType} from a descriptor string,
- * all classes named in the descriptor must be accessible, and will be loaded.
- * (But the classes need not be initialized, as is the case with a {@code CONSTANT_Class}.)
- * This loading may occur at any time before the {@code MethodType} object is first derived.
- * @author John Rose, JSR 292 EG
- */
-public final
-class MethodType implements java.io.Serializable {
-    private static final long serialVersionUID = 292L;  // {rtype, {ptype...}}
-
-    // The rtype and ptypes fields define the structural identity of the method type:
-    private final Class<?>   rtype;
-    private final Class<?>[] ptypes;
-
-    // The remaining fields are caches of various sorts:
-    private MethodTypeForm form; // erased form, plus cached data about primitives
-    private MethodType wrapAlt;  // alternative wrapped/unwrapped version
-    private Invokers invokers;   // cache of handy higher-order adapters
-
-    /**
-     * Check the given parameters for validity and store them into the final fields.
-     */
-    private MethodType(Class<?> rtype, Class<?>[] ptypes) {
-        checkRtype(rtype);
-        checkPtypes(ptypes);
-        this.rtype = rtype;
-        this.ptypes = ptypes;
-    }
-
-    /*trusted*/ MethodTypeForm form() { return form; }
-    /*trusted*/ Class<?> rtype() { return rtype; }
-    /*trusted*/ Class<?>[] ptypes() { return ptypes; }
-
-    void setForm(MethodTypeForm f) { form = f; }
-
-    /** This number, mandated by the JVM spec as 255,
-     *  is the maximum number of <em>slots</em>
-     *  that any Java method can receive in its argument list.
-     *  It limits both JVM signatures and method type objects.
-     *  The longest possible invocation will look like
-     *  {@code staticMethod(arg1, arg2, ..., arg255)} or
-     *  {@code x.virtualMethod(arg1, arg2, ..., arg254)}.
-     */
-    /*non-public*/ static final int MAX_JVM_ARITY = 255;  // this is mandated by the JVM spec.
-
-    /** This number is the maximum arity of a method handle, 254.
-     *  It is derived from the absolute JVM-imposed arity by subtracting one,
-     *  which is the slot occupied by the method handle itself at the
-     *  beginning of the argument list used to invoke the method handle.
-     *  The longest possible invocation will look like
-     *  {@code mh.invoke(arg1, arg2, ..., arg254)}.
-     */
-    // Issue:  Should we allow MH.invokeWithArguments to go to the full 255?
-    /*non-public*/ static final int MAX_MH_ARITY = MAX_JVM_ARITY-1;  // deduct one for mh receiver
-
-    /** This number is the maximum arity of a method handle invoker, 253.
-     *  It is derived from the absolute JVM-imposed arity by subtracting two,
-     *  which are the slots occupied by invoke method handle, and the the
-     *  target method handle, which are both at the beginning of the argument
-     *  list used to invoke the target method handle.
-     *  The longest possible invocation will look like
-     *  {@code invokermh.invoke(targetmh, arg1, arg2, ..., arg253)}.
-     */
-    /*non-public*/ static final int MAX_MH_INVOKER_ARITY = MAX_MH_ARITY-1;  // deduct one more for invoker
-
-    private static void checkRtype(Class<?> rtype) {
-        rtype.equals(rtype);  // null check
-    }
-    private static int checkPtype(Class<?> ptype) {
-        ptype.getClass();  //NPE
-        if (ptype == void.class)
-            throw newIllegalArgumentException("parameter type cannot be void");
-        if (ptype == double.class || ptype == long.class)  return 1;
-        return 0;
-    }
-    /** Return number of extra slots (count of long/double args). */
-    private static int checkPtypes(Class<?>[] ptypes) {
-        int slots = 0;
-        for (Class<?> ptype : ptypes) {
-            slots += checkPtype(ptype);
-        }
-        checkSlotCount(ptypes.length + slots);
-        return slots;
-    }
-    static void checkSlotCount(int count) {
-        assert((MAX_JVM_ARITY & (MAX_JVM_ARITY+1)) == 0);
-        // MAX_JVM_ARITY must be power of 2 minus 1 for following code trick to work:
-        if ((count & MAX_JVM_ARITY) != count)
-            throw newIllegalArgumentException("bad parameter count "+count);
-    }
-    private static IndexOutOfBoundsException newIndexOutOfBoundsException(Object num) {
-        if (num instanceof Integer)  num = "bad index: "+num;
-        return new IndexOutOfBoundsException(num.toString());
-    }
-
-    static final WeakInternSet internTable = new WeakInternSet();
-
-    static final Class<?>[] NO_PTYPES = {};
-
-    /**
-     * Finds or creates an instance of the given method type.
-     * @param rtype  the return type
-     * @param ptypes the parameter types
-     * @return a method type with the given components
-     * @throws NullPointerException if {@code rtype} or {@code ptypes} or any element of {@code ptypes} is null
-     * @throws IllegalArgumentException if any element of {@code ptypes} is {@code void.class}
-     */
-    public static
-    MethodType methodType(Class<?> rtype, Class<?>[] ptypes) {
-        return makeImpl(rtype, ptypes, false);
-    }
-
-    /**
-     * Finds or creates a method type with the given components.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * @return a method type with the given components
-     * @throws NullPointerException if {@code rtype} or {@code ptypes} or any element of {@code ptypes} is null
-     * @throws IllegalArgumentException if any element of {@code ptypes} is {@code void.class}
-     */
-    public static
-    MethodType methodType(Class<?> rtype, List<Class<?>> ptypes) {
-        boolean notrust = false;  // random List impl. could return evil ptypes array
-        return makeImpl(rtype, listToArray(ptypes), notrust);
-    }
-
-    private static Class<?>[] listToArray(List<Class<?>> ptypes) {
-        // sanity check the size before the toArray call, since size might be huge
-        checkSlotCount(ptypes.size());
-        return ptypes.toArray(NO_PTYPES);
-    }
-
-    /**
-     * Finds or creates a method type with the given components.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * The leading parameter type is prepended to the remaining array.
-     * @return a method type with the given components
-     * @throws NullPointerException if {@code rtype} or {@code ptype0} or {@code ptypes} or any element of {@code ptypes} is null
-     * @throws IllegalArgumentException if {@code ptype0} or {@code ptypes} or any element of {@code ptypes} is {@code void.class}
-     */
-    public static
-    MethodType methodType(Class<?> rtype, Class<?> ptype0, Class<?>... ptypes) {
-        Class<?>[] ptypes1 = new Class<?>[1+ptypes.length];
-        ptypes1[0] = ptype0;
-        System.arraycopy(ptypes, 0, ptypes1, 1, ptypes.length);
-        return makeImpl(rtype, ptypes1, true);
-    }
-
-    /**
-     * Finds or creates a method type with the given components.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * The resulting method has no parameter types.
-     * @return a method type with the given return value
-     * @throws NullPointerException if {@code rtype} is null
-     */
-    public static
-    MethodType methodType(Class<?> rtype) {
-        return makeImpl(rtype, NO_PTYPES, true);
-    }
-
-    /**
-     * Finds or creates a method type with the given components.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * The resulting method has the single given parameter type.
-     * @return a method type with the given return value and parameter type
-     * @throws NullPointerException if {@code rtype} or {@code ptype0} is null
-     * @throws IllegalArgumentException if {@code ptype0} is {@code void.class}
-     */
-    public static
-    MethodType methodType(Class<?> rtype, Class<?> ptype0) {
-        return makeImpl(rtype, new Class<?>[]{ ptype0 }, true);
-    }
-
-    /**
-     * Finds or creates a method type with the given components.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * The resulting method has the same parameter types as {@code ptypes},
-     * and the specified return type.
-     * @throws NullPointerException if {@code rtype} or {@code ptypes} is null
-     */
-    public static
-    MethodType methodType(Class<?> rtype, MethodType ptypes) {
-        return makeImpl(rtype, ptypes.ptypes, true);
-    }
-
-    /**
-     * Sole factory method to find or create an interned method type.
-     * @param rtype desired return type
-     * @param ptypes desired parameter types
-     * @param trusted whether the ptypes can be used without cloning
-     * @return the unique method type of the desired structure
-     */
-    /*trusted*/ static
-    MethodType makeImpl(Class<?> rtype, Class<?>[] ptypes, boolean trusted) {
-        if (ptypes.length == 0) {
-            ptypes = NO_PTYPES; trusted = true;
-        }
-        MethodType mt1 = new MethodType(rtype, ptypes);
-        MethodType mt0 = internTable.get(mt1);
-        if (mt0 != null)
-            return mt0;
-        if (!trusted)
-            // defensively copy the array passed in by the user
-            mt1 = new MethodType(rtype, ptypes.clone());
-        // promote the object to the Real Thing, and reprobe
-        MethodTypeForm form = MethodTypeForm.findForm(mt1);
-        mt1.form = form;
-        return internTable.add(mt1);
-    }
-    private static final MethodType[] objectOnlyTypes = new MethodType[20];
-
-    /**
-     * Finds or creates a method type whose components are {@code Object} with an optional trailing {@code Object[]} array.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * All parameters and the return type will be {@code Object},
-     * except the final array parameter if any, which will be {@code Object[]}.
-     * @param objectArgCount number of parameters (excluding the final array parameter if any)
-     * @param finalArray whether there will be a trailing array parameter, of type {@code Object[]}
-     * @return a generally applicable method type, for all calls of the given fixed argument count and a collected array of further arguments
-     * @throws IllegalArgumentException if {@code objectArgCount} is negative or greater than 255 (or 254, if {@code finalArray} is true)
-     * @see #genericMethodType(int)
-     */
-    public static
-    MethodType genericMethodType(int objectArgCount, boolean finalArray) {
-        MethodType mt;
-        checkSlotCount(objectArgCount);
-        int ivarargs = (!finalArray ? 0 : 1);
-        int ootIndex = objectArgCount*2 + ivarargs;
-        if (ootIndex < objectOnlyTypes.length) {
-            mt = objectOnlyTypes[ootIndex];
-            if (mt != null)  return mt;
-        }
-        Class<?>[] ptypes = new Class<?>[objectArgCount + ivarargs];
-        Arrays.fill(ptypes, Object.class);
-        if (ivarargs != 0)  ptypes[objectArgCount] = Object[].class;
-        mt = makeImpl(Object.class, ptypes, true);
-        if (ootIndex < objectOnlyTypes.length) {
-            objectOnlyTypes[ootIndex] = mt;     // cache it here also!
-        }
-        return mt;
-    }
-
-    /**
-     * Finds or creates a method type whose components are all {@code Object}.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * All parameters and the return type will be Object.
-     * @param objectArgCount number of parameters
-     * @return a generally applicable method type, for all calls of the given argument count
-     * @throws IllegalArgumentException if {@code objectArgCount} is negative or greater than 255
-     * @see #genericMethodType(int, boolean)
-     */
-    public static
-    MethodType genericMethodType(int objectArgCount) {
-        return genericMethodType(objectArgCount, false);
-    }
-
-    /**
-     * Finds or creates a method type with a single different parameter type.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * @param num    the index (zero-based) of the parameter type to change
-     * @param nptype a new parameter type to replace the old one with
-     * @return the same type, except with the selected parameter changed
-     * @throws IndexOutOfBoundsException if {@code num} is not a valid index into {@code parameterArray()}
-     * @throws IllegalArgumentException if {@code nptype} is {@code void.class}
-     * @throws NullPointerException if {@code nptype} is null
-     */
-    public MethodType changeParameterType(int num, Class<?> nptype) {
-        if (parameterType(num) == nptype)  return this;
-        checkPtype(nptype);
-        Class<?>[] nptypes = ptypes.clone();
-        nptypes[num] = nptype;
-        return makeImpl(rtype, nptypes, true);
-    }
-
-    /**
-     * Finds or creates a method type with additional parameter types.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * @param num    the position (zero-based) of the inserted parameter type(s)
-     * @param ptypesToInsert zero or more new parameter types to insert into the parameter list
-     * @return the same type, except with the selected parameter(s) inserted
-     * @throws IndexOutOfBoundsException if {@code num} is negative or greater than {@code parameterCount()}
-     * @throws IllegalArgumentException if any element of {@code ptypesToInsert} is {@code void.class}
-     *                                  or if the resulting method type would have more than 255 parameter slots
-     * @throws NullPointerException if {@code ptypesToInsert} or any of its elements is null
-     */
-    public MethodType insertParameterTypes(int num, Class<?>... ptypesToInsert) {
-        int len = ptypes.length;
-        if (num < 0 || num > len)
-            throw newIndexOutOfBoundsException(num);
-        int ins = checkPtypes(ptypesToInsert);
-        checkSlotCount(parameterSlotCount() + ptypesToInsert.length + ins);
-        int ilen = ptypesToInsert.length;
-        if (ilen == 0)  return this;
-        Class<?>[] nptypes = Arrays.copyOfRange(ptypes, 0, len+ilen);
-        System.arraycopy(nptypes, num, nptypes, num+ilen, len-num);
-        System.arraycopy(ptypesToInsert, 0, nptypes, num, ilen);
-        return makeImpl(rtype, nptypes, true);
-    }
-
-    /**
-     * Finds or creates a method type with additional parameter types.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * @param ptypesToInsert zero or more new parameter types to insert after the end of the parameter list
-     * @return the same type, except with the selected parameter(s) appended
-     * @throws IllegalArgumentException if any element of {@code ptypesToInsert} is {@code void.class}
-     *                                  or if the resulting method type would have more than 255 parameter slots
-     * @throws NullPointerException if {@code ptypesToInsert} or any of its elements is null
-     */
-    public MethodType appendParameterTypes(Class<?>... ptypesToInsert) {
-        return insertParameterTypes(parameterCount(), ptypesToInsert);
-    }
-
-    /**
-     * Finds or creates a method type with additional parameter types.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * @param num    the position (zero-based) of the inserted parameter type(s)
-     * @param ptypesToInsert zero or more new parameter types to insert into the parameter list
-     * @return the same type, except with the selected parameter(s) inserted
-     * @throws IndexOutOfBoundsException if {@code num} is negative or greater than {@code parameterCount()}
-     * @throws IllegalArgumentException if any element of {@code ptypesToInsert} is {@code void.class}
-     *                                  or if the resulting method type would have more than 255 parameter slots
-     * @throws NullPointerException if {@code ptypesToInsert} or any of its elements is null
-     */
-    public MethodType insertParameterTypes(int num, List<Class<?>> ptypesToInsert) {
-        return insertParameterTypes(num, listToArray(ptypesToInsert));
-    }
-
-    /**
-     * Finds or creates a method type with additional parameter types.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * @param ptypesToInsert zero or more new parameter types to insert after the end of the parameter list
-     * @return the same type, except with the selected parameter(s) appended
-     * @throws IllegalArgumentException if any element of {@code ptypesToInsert} is {@code void.class}
-     *                                  or if the resulting method type would have more than 255 parameter slots
-     * @throws NullPointerException if {@code ptypesToInsert} or any of its elements is null
-     */
-    public MethodType appendParameterTypes(List<Class<?>> ptypesToInsert) {
-        return insertParameterTypes(parameterCount(), ptypesToInsert);
-    }
-
-     /**
-     * Finds or creates a method type with modified parameter types.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * @param start  the position (zero-based) of the first replaced parameter type(s)
-     * @param end    the position (zero-based) after the last replaced parameter type(s)
-     * @param ptypesToInsert zero or more new parameter types to insert into the parameter list
-     * @return the same type, except with the selected parameter(s) replaced
-     * @throws IndexOutOfBoundsException if {@code start} is negative or greater than {@code parameterCount()}
-     *                                  or if {@code end} is negative or greater than {@code parameterCount()}
-     *                                  or if {@code start} is greater than {@code end}
-     * @throws IllegalArgumentException if any element of {@code ptypesToInsert} is {@code void.class}
-     *                                  or if the resulting method type would have more than 255 parameter slots
-     * @throws NullPointerException if {@code ptypesToInsert} or any of its elements is null
-     */
-    /*non-public*/ MethodType replaceParameterTypes(int start, int end, Class<?>... ptypesToInsert) {
-        if (start == end)
-            return insertParameterTypes(start, ptypesToInsert);
-        int len = ptypes.length;
-        if (!(0 <= start && start <= end && end <= len))
-            throw newIndexOutOfBoundsException("start="+start+" end="+end);
-        int ilen = ptypesToInsert.length;
-        if (ilen == 0)
-            return dropParameterTypes(start, end);
-        return dropParameterTypes(start, end).insertParameterTypes(start, ptypesToInsert);
-    }
-
-    /**
-     * Finds or creates a method type with some parameter types omitted.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * @param start  the index (zero-based) of the first parameter type to remove
-     * @param end    the index (greater than {@code start}) of the first parameter type after not to remove
-     * @return the same type, except with the selected parameter(s) removed
-     * @throws IndexOutOfBoundsException if {@code start} is negative or greater than {@code parameterCount()}
-     *                                  or if {@code end} is negative or greater than {@code parameterCount()}
-     *                                  or if {@code start} is greater than {@code end}
-     */
-    public MethodType dropParameterTypes(int start, int end) {
-        int len = ptypes.length;
-        if (!(0 <= start && start <= end && end <= len))
-            throw newIndexOutOfBoundsException("start="+start+" end="+end);
-        if (start == end)  return this;
-        Class<?>[] nptypes;
-        if (start == 0) {
-            if (end == len) {
-                // drop all parameters
-                nptypes = NO_PTYPES;
-            } else {
-                // drop initial parameter(s)
-                nptypes = Arrays.copyOfRange(ptypes, end, len);
-            }
-        } else {
-            if (end == len) {
-                // drop trailing parameter(s)
-                nptypes = Arrays.copyOfRange(ptypes, 0, start);
-            } else {
-                int tail = len - end;
-                nptypes = Arrays.copyOfRange(ptypes, 0, start + tail);
-                System.arraycopy(ptypes, end, nptypes, start, tail);
-            }
-        }
-        return makeImpl(rtype, nptypes, true);
-    }
-
-    /**
-     * Finds or creates a method type with a different return type.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * @param nrtype a return parameter type to replace the old one with
-     * @return the same type, except with the return type change
-     * @throws NullPointerException if {@code nrtype} is null
-     */
-    public MethodType changeReturnType(Class<?> nrtype) {
-        if (returnType() == nrtype)  return this;
-        return makeImpl(nrtype, ptypes, true);
-    }
-
-    /**
-     * Reports if this type contains a primitive argument or return value.
-     * The return type {@code void} counts as a primitive.
-     * @return true if any of the types are primitives
-     */
-    public boolean hasPrimitives() {
-        return form.hasPrimitives();
-    }
-
-    /**
-     * Reports if this type contains a wrapper argument or return value.
-     * Wrappers are types which box primitive values, such as {@link Integer}.
-     * The reference type {@code java.lang.Void} counts as a wrapper,
-     * if it occurs as a return type.
-     * @return true if any of the types are wrappers
-     */
-    public boolean hasWrappers() {
-        return unwrap() != this;
-    }
-
-    /**
-     * Erases all reference types to {@code Object}.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * All primitive types (including {@code void}) will remain unchanged.
-     * @return a version of the original type with all reference types replaced
-     */
-    public MethodType erase() {
-        return form.erasedType();
-    }
-
-    /**
-     * Erases all reference types to {@code Object}, and all subword types to {@code int}.
-     * This is the reduced type polymorphism used by private methods
-     * such as {@link MethodHandle#invokeBasic invokeBasic}.
-     * @return a version of the original type with all reference and subword types replaced
-     */
-    /*non-public*/ MethodType basicType() {
-        return form.basicType();
-    }
-
-    /**
-     * @return a version of the original type with MethodHandle prepended as the first argument
-     */
-    /*non-public*/ MethodType invokerType() {
-        return insertParameterTypes(0, MethodHandle.class);
-    }
-
-    /**
-     * Converts all types, both reference and primitive, to {@code Object}.
-     * Convenience method for {@link #genericMethodType(int) genericMethodType}.
-     * The expression {@code type.wrap().erase()} produces the same value
-     * as {@code type.generic()}.
-     * @return a version of the original type with all types replaced
-     */
-    public MethodType generic() {
-        return genericMethodType(parameterCount());
-    }
-
-    /**
-     * Converts all primitive types to their corresponding wrapper types.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * All reference types (including wrapper types) will remain unchanged.
-     * A {@code void} return type is changed to the type {@code java.lang.Void}.
-     * The expression {@code type.wrap().erase()} produces the same value
-     * as {@code type.generic()}.
-     * @return a version of the original type with all primitive types replaced
-     */
-    public MethodType wrap() {
-        return hasPrimitives() ? wrapWithPrims(this) : this;
-    }
-
-    /**
-     * Converts all wrapper types to their corresponding primitive types.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * All primitive types (including {@code void}) will remain unchanged.
-     * A return type of {@code java.lang.Void} is changed to {@code void}.
-     * @return a version of the original type with all wrapper types replaced
-     */
-    public MethodType unwrap() {
-        MethodType noprims = !hasPrimitives() ? this : wrapWithPrims(this);
-        return unwrapWithNoPrims(noprims);
-    }
-
-    private static MethodType wrapWithPrims(MethodType pt) {
-        assert(pt.hasPrimitives());
-        MethodType wt = pt.wrapAlt;
-        if (wt == null) {
-            // fill in lazily
-            wt = MethodTypeForm.canonicalize(pt, MethodTypeForm.WRAP, MethodTypeForm.WRAP);
-            assert(wt != null);
-            pt.wrapAlt = wt;
-        }
-        return wt;
-    }
-
-    private static MethodType unwrapWithNoPrims(MethodType wt) {
-        assert(!wt.hasPrimitives());
-        MethodType uwt = wt.wrapAlt;
-        if (uwt == null) {
-            // fill in lazily
-            uwt = MethodTypeForm.canonicalize(wt, MethodTypeForm.UNWRAP, MethodTypeForm.UNWRAP);
-            if (uwt == null)
-                uwt = wt;    // type has no wrappers or prims at all
-            wt.wrapAlt = uwt;
-        }
-        return uwt;
-    }
-
-    /**
-     * Returns the parameter type at the specified index, within this method type.
-     * @param num the index (zero-based) of the desired parameter type
-     * @return the selected parameter type
-     * @throws IndexOutOfBoundsException if {@code num} is not a valid index into {@code parameterArray()}
-     */
-    public Class<?> parameterType(int num) {
-        return ptypes[num];
-    }
-    /**
-     * Returns the number of parameter types in this method type.
-     * @return the number of parameter types
-     */
-    public int parameterCount() {
-        return ptypes.length;
-    }
-    /**
-     * Returns the return type of this method type.
-     * @return the return type
-     */
-    public Class<?> returnType() {
-        return rtype;
-    }
-
-    /**
-     * Presents the parameter types as a list (a convenience method).
-     * The list will be immutable.
-     * @return the parameter types (as an immutable list)
-     */
-    public List<Class<?>> parameterList() {
-        return Collections.unmodifiableList(Arrays.asList(ptypes));
-    }
-
-    /*non-public*/ Class<?> lastParameterType() {
-        int len = ptypes.length;
-        return len == 0 ? void.class : ptypes[len-1];
-    }
-
-    /**
-     * Presents the parameter types as an array (a convenience method).
-     * Changes to the array will not result in changes to the type.
-     * @return the parameter types (as a fresh copy if necessary)
-     */
-    public Class<?>[] parameterArray() {
-        return ptypes.clone();
-    }
-
-    /**
-     * Compares the specified object with this type for equality.
-     * That is, it returns <tt>true</tt> if and only if the specified object
-     * is also a method type with exactly the same parameters and return type.
-     * @param x object to compare
-     * @see Object#equals(Object)
-     */
-    @Override
-    public boolean equals(Object x) {
-        return this == x || x instanceof MethodType && equals((MethodType)x);
-    }
-
-    private boolean equals(MethodType that) {
-        return this.rtype == that.rtype
-            && Arrays.equals(this.ptypes, that.ptypes);
-    }
-
-    /**
-     * Returns the hash code value for this method type.
-     * It is defined to be the same as the hashcode of a List
-     * whose elements are the return type followed by the
-     * parameter types.
-     * @return the hash code value for this method type
-     * @see Object#hashCode()
-     * @see #equals(Object)
-     * @see List#hashCode()
-     */
-    @Override
-    public int hashCode() {
-      int hashCode = 31 + rtype.hashCode();
-      for (Class<?> ptype : ptypes)
-          hashCode = 31*hashCode + ptype.hashCode();
-      return hashCode;
-    }
-
-    /**
-     * Returns a string representation of the method type,
-     * of the form {@code "(PT0,PT1...)RT"}.
-     * The string representation of a method type is a
-     * parenthesis enclosed, comma separated list of type names,
-     * followed immediately by the return type.
-     * <p>
-     * Each type is represented by its
-     * {@link java.lang.Class#getSimpleName simple name}.
-     */
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append("(");
-        for (int i = 0; i < ptypes.length; i++) {
-            if (i > 0)  sb.append(",");
-            sb.append(ptypes[i].getSimpleName());
-        }
-        sb.append(")");
-        sb.append(rtype.getSimpleName());
-        return sb.toString();
-    }
-
-
-    /*non-public*/
-    boolean isViewableAs(MethodType newType) {
-        if (!VerifyType.isNullConversion(returnType(), newType.returnType()))
-            return false;
-        int argc = parameterCount();
-        if (argc != newType.parameterCount())
-            return false;
-        for (int i = 0; i < argc; i++) {
-            if (!VerifyType.isNullConversion(newType.parameterType(i), parameterType(i)))
-                return false;
-        }
-        return true;
-    }
-    /*non-public*/
-    boolean isCastableTo(MethodType newType) {
-        int argc = parameterCount();
-        if (argc != newType.parameterCount())
-            return false;
-        return true;
-    }
-    /*non-public*/
-    boolean isConvertibleTo(MethodType newType) {
-        if (!canConvert(returnType(), newType.returnType()))
-            return false;
-        int argc = parameterCount();
-        if (argc != newType.parameterCount())
-            return false;
-        for (int i = 0; i < argc; i++) {
-            if (!canConvert(newType.parameterType(i), parameterType(i)))
-                return false;
-        }
-        return true;
-    }
-    /*non-public*/
-    static boolean canConvert(Class<?> src, Class<?> dst) {
-        // short-circuit a few cases:
-        if (src == dst || dst == Object.class)  return true;
-        // the remainder of this logic is documented in MethodHandle.asType
-        if (src.isPrimitive()) {
-            // can force void to an explicit null, a la reflect.Method.invoke
-            // can also force void to a primitive zero, by analogy
-            if (src == void.class)  return true;  //or !dst.isPrimitive()?
-            Wrapper sw = Wrapper.forPrimitiveType(src);
-            if (dst.isPrimitive()) {
-                // P->P must widen
-                return Wrapper.forPrimitiveType(dst).isConvertibleFrom(sw);
-            } else {
-                // P->R must box and widen
-                return dst.isAssignableFrom(sw.wrapperType());
-            }
-        } else if (dst.isPrimitive()) {
-            // any value can be dropped
-            if (dst == void.class)  return true;
-            Wrapper dw = Wrapper.forPrimitiveType(dst);
-            // R->P must be able to unbox (from a dynamically chosen type) and widen
-            // For example:
-            //   Byte/Number/Comparable/Object -> dw:Byte -> byte.
-            //   Character/Comparable/Object -> dw:Character -> char
-            //   Boolean/Comparable/Object -> dw:Boolean -> boolean
-            // This means that dw must be cast-compatible with src.
-            if (src.isAssignableFrom(dw.wrapperType())) {
-                return true;
-            }
-            // The above does not work if the source reference is strongly typed
-            // to a wrapper whose primitive must be widened.  For example:
-            //   Byte -> unbox:byte -> short/int/long/float/double
-            //   Character -> unbox:char -> int/long/float/double
-            if (Wrapper.isWrapperType(src) &&
-                dw.isConvertibleFrom(Wrapper.forWrapperType(src))) {
-                // can unbox from src and then widen to dst
-                return true;
-            }
-            // We have already covered cases which arise due to runtime unboxing
-            // of a reference type which covers several wrapper types:
-            //   Object -> cast:Integer -> unbox:int -> long/float/double
-            //   Serializable -> cast:Byte -> unbox:byte -> byte/short/int/long/float/double
-            // An marginal case is Number -> dw:Character -> char, which would be OK if there were a
-            // subclass of Number which wraps a value that can convert to char.
-            // Since there is none, we don't need an extra check here to cover char or boolean.
-            return false;
-        } else {
-            // R->R always works, since null is always valid dynamically
-            return true;
-        }
-    }
-
-    /// Queries which have to do with the bytecode architecture
-
-    /** Reports the number of JVM stack slots required to invoke a method
-     * of this type.  Note that (for historical reasons) the JVM requires
-     * a second stack slot to pass long and double arguments.
-     * So this method returns {@link #parameterCount() parameterCount} plus the
-     * number of long and double parameters (if any).
-     * <p>
-     * This method is included for the benfit of applications that must
-     * generate bytecodes that process method handles and invokedynamic.
-     * @return the number of JVM stack slots for this type's parameters
-     */
-    /*non-public*/ int parameterSlotCount() {
-        return form.parameterSlotCount();
-    }
-
-    /*non-public*/ Invokers invokers() {
-        Invokers inv = invokers;
-        if (inv != null)  return inv;
-        invokers = inv = new Invokers(this);
-        return inv;
-    }
-
-    /** Reports the number of JVM stack slots which carry all parameters including and after
-     * the given position, which must be in the range of 0 to
-     * {@code parameterCount} inclusive.  Successive parameters are
-     * more shallowly stacked, and parameters are indexed in the bytecodes
-     * according to their trailing edge.  Thus, to obtain the depth
-     * in the outgoing call stack of parameter {@code N}, obtain
-     * the {@code parameterSlotDepth} of its trailing edge
-     * at position {@code N+1}.
-     * <p>
-     * Parameters of type {@code long} and {@code double} occupy
-     * two stack slots (for historical reasons) and all others occupy one.
-     * Therefore, the number returned is the number of arguments
-     * <em>including</em> and <em>after</em> the given parameter,
-     * <em>plus</em> the number of long or double arguments
-     * at or after after the argument for the given parameter.
-     * <p>
-     * This method is included for the benfit of applications that must
-     * generate bytecodes that process method handles and invokedynamic.
-     * @param num an index (zero-based, inclusive) within the parameter types
-     * @return the index of the (shallowest) JVM stack slot transmitting the
-     *         given parameter
-     * @throws IllegalArgumentException if {@code num} is negative or greater than {@code parameterCount()}
-     */
-    /*non-public*/ int parameterSlotDepth(int num) {
-        if (num < 0 || num > ptypes.length)
-            parameterType(num);  // force a range check
-        return form.parameterToArgSlot(num-1);
-    }
-
-    /** Reports the number of JVM stack slots required to receive a return value
-     * from a method of this type.
-     * If the {@link #returnType() return type} is void, it will be zero,
-     * else if the return type is long or double, it will be two, else one.
-     * <p>
-     * This method is included for the benfit of applications that must
-     * generate bytecodes that process method handles and invokedynamic.
-     * @return the number of JVM stack slots (0, 1, or 2) for this type's return value
-     * Will be removed for PFD.
-     */
-    /*non-public*/ int returnSlotCount() {
-        return form.returnSlotCount();
-    }
-
-    /**
-     * Finds or creates an instance of a method type, given the spelling of its bytecode descriptor.
-     * Convenience method for {@link #methodType(java.lang.Class, java.lang.Class[]) methodType}.
-     * Any class or interface name embedded in the descriptor string
-     * will be resolved by calling {@link ClassLoader#loadClass(java.lang.String)}
-     * on the given loader (or if it is null, on the system class loader).
-     * <p>
-     * Note that it is possible to encounter method types which cannot be
-     * constructed by this method, because their component types are
-     * not all reachable from a common class loader.
-     * <p>
-     * This method is included for the benfit of applications that must
-     * generate bytecodes that process method handles and {@code invokedynamic}.
-     * @param descriptor a bytecode-level type descriptor string "(T...)T"
-     * @param loader the class loader in which to look up the types
-     * @return a method type matching the bytecode-level type descriptor
-     * @throws NullPointerException if the string is null
-     * @throws IllegalArgumentException if the string is not well-formed
-     * @throws TypeNotPresentException if a named type cannot be found
-     */
-    public static MethodType fromMethodDescriptorString(String descriptor, ClassLoader loader)
-        throws IllegalArgumentException, TypeNotPresentException
-    {
-        if (!descriptor.startsWith("(") ||  // also generates NPE if needed
-            descriptor.indexOf(')') < 0 ||
-            descriptor.indexOf('.') >= 0)
-            throw new IllegalArgumentException("not a method descriptor: "+descriptor);
-        List<Class<?>> types = BytecodeDescriptor.parseMethod(descriptor, loader);
-        Class<?> rtype = types.remove(types.size() - 1);
-        checkSlotCount(types.size());
-        Class<?>[] ptypes = listToArray(types);
-        return makeImpl(rtype, ptypes, true);
-    }
-
-    /**
-     * Produces a bytecode descriptor representation of the method type.
-     * <p>
-     * Note that this is not a strict inverse of {@link #fromMethodDescriptorString fromMethodDescriptorString}.
-     * Two distinct classes which share a common name but have different class loaders
-     * will appear identical when viewed within descriptor strings.
-     * <p>
-     * This method is included for the benfit of applications that must
-     * generate bytecodes that process method handles and {@code invokedynamic}.
-     * {@link #fromMethodDescriptorString(java.lang.String, java.lang.ClassLoader) fromMethodDescriptorString},
-     * because the latter requires a suitable class loader argument.
-     * @return the bytecode type descriptor representation
-     */
-    public String toMethodDescriptorString() {
-        return BytecodeDescriptor.unparse(this);
-    }
-
-    /*non-public*/ static String toFieldDescriptorString(Class<?> cls) {
-        return BytecodeDescriptor.unparse(cls);
-    }
-
-    /// Serialization.
-
-    /**
-     * There are no serializable fields for {@code MethodType}.
-     */
-    private static final java.io.ObjectStreamField[] serialPersistentFields = { };
-
-    /**
-     * Save the {@code MethodType} instance to a stream.
-     *
-     * @serialData
-     * For portability, the serialized format does not refer to named fields.
-     * Instead, the return type and parameter type arrays are written directly
-     * from the {@code writeObject} method, using two calls to {@code s.writeObject}
-     * as follows:
-     * <blockquote><pre>
-s.writeObject(this.returnType());
-s.writeObject(this.parameterArray());
-     * </pre></blockquote>
-     * <p>
-     * The deserialized field values are checked as if they were
-     * provided to the factory method {@link #methodType(Class,Class[]) methodType}.
-     * For example, null values, or {@code void} parameter types,
-     * will lead to exceptions during deserialization.
-     * @param the stream to write the object to
-     */
-    private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException {
-        s.defaultWriteObject();  // requires serialPersistentFields to be an empty array
-        s.writeObject(returnType());
-        s.writeObject(parameterArray());
-    }
-
-    /**
-     * Reconstitute the {@code MethodType} instance from a stream (that is,
-     * deserialize it).
-     * This instance is a scratch object with bogus final fields.
-     * It provides the parameters to the factory method called by
-     * {@link #readResolve readResolve}.
-     * After that call it is discarded.
-     * @param the stream to read the object from
-     * @see #MethodType()
-     * @see #readResolve
-     * @see #writeObject
-     */
-    private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException {
-        s.defaultReadObject();  // requires serialPersistentFields to be an empty array
-
-        Class<?>   returnType     = (Class<?>)   s.readObject();
-        Class<?>[] parameterArray = (Class<?>[]) s.readObject();
-
-        // Probably this object will never escape, but let's check
-        // the field values now, just to be sure.
-        checkRtype(returnType);
-        checkPtypes(parameterArray);
-
-        parameterArray = parameterArray.clone();  // make sure it is unshared
-        MethodType_init(returnType, parameterArray);
-    }
-
-    /**
-     * For serialization only.
-     * Sets the final fields to null, pending {@code Unsafe.putObject}.
-     */
-    private MethodType() {
-        this.rtype = null;
-        this.ptypes = null;
-    }
-    private void MethodType_init(Class<?> rtype, Class<?>[] ptypes) {
-        // In order to communicate these values to readResolve, we must
-        // store them into the implementation-specific final fields.
-        checkRtype(rtype);
-        checkPtypes(ptypes);
-        UNSAFE.putObject(this, rtypeOffset, rtype);
-        UNSAFE.putObject(this, ptypesOffset, ptypes);
-    }
-
-    // Support for resetting final fields while deserializing
-    private static final long rtypeOffset, ptypesOffset;
-    static {
-        try {
-            rtypeOffset = UNSAFE.objectFieldOffset
-                (MethodType.class.getDeclaredField("rtype"));
-            ptypesOffset = UNSAFE.objectFieldOffset
-                (MethodType.class.getDeclaredField("ptypes"));
-        } catch (Exception ex) {
-            throw new Error(ex);
-        }
-    }
-
-    /**
-     * Resolves and initializes a {@code MethodType} object
-     * after serialization.
-     * @return the fully initialized {@code MethodType} object
-     */
-    private Object readResolve() {
-        // Do not use a trusted path for deserialization:
-        //return makeImpl(rtype, ptypes, true);
-        // Verify all operands, and make sure ptypes is unshared:
-        return methodType(rtype, ptypes);
-    }
-
-    /**
-     * Weak intern set based on implementation of the <tt>HashSet</tt> and
-     * <tt>WeakHashMap</tt>, with <em>weak values</em>.  Note: <tt>null</tt>
-     * values will yield <tt>NullPointerException</tt>
-     * Refer to implementation of WeakInternSet for details.
-     *
-     * @see         java.util.HashMap
-     * @see         java.util.HashSet
-     * @see         java.util.WeakHashMap
-     * @see         java.lang.ref.WeakReference
-     */
-    private static class WeakInternSet {
-        // The default initial capacity -- MUST be a power of two.
-        private static final int DEFAULT_INITIAL_CAPACITY = 16;
-
-        // The maximum capacity, used if a higher value is implicitly specified
-        // by either of the constructors with arguments.
-        // MUST be a power of two <= 1<<30.
-        private static final int MAXIMUM_CAPACITY = 1 << 30;
-
-        // The load factor used when none specified in constructor.
-        private static final float DEFAULT_LOAD_FACTOR = 0.75f;
-
-        // The table, resized as necessary. Length MUST Always be a power of two.
-        private Entry[] table;
-
-        // The number of entries contained in this set.
-        private int size;
-
-        // The next size value at which to resize (capacity * load factor).
-        private int threshold;
-
-        // The load factor for the hash table.
-        private final float loadFactor;
-
-        // Reference queue for cleared WeakEntries
-        private final ReferenceQueue<Object> queue = new ReferenceQueue<>();
-
-        private Entry[] newTable(int n) {
-            return new Entry[n];
-        }
-
-        /**
-         * Constructs a new, empty <tt>WeakInternSet</tt> with the default initial
-         * capacity (16) and load factor (0.75).
-         */
-        WeakInternSet() {
-            this.loadFactor = DEFAULT_LOAD_FACTOR;
-            threshold = DEFAULT_INITIAL_CAPACITY;
-            table = newTable(DEFAULT_INITIAL_CAPACITY);
-        }
-
-        /**
-         * Applies a supplemental hash function to a given hashCode, which
-         * defends against poor quality hash functions.  This is critical
-         * because hashing uses power-of-two length hash tables, that
-         * otherwise encounter collisions for hashCodes that do not differ
-         * in lower bits.
-         * @param h preliminary hash code value
-         * @return supplemental hash code value
-         */
-        private static int hash(int h) {
-            // This function ensures that hashCodes that differ only by
-            // constant multiples at each bit position have a bounded
-            // number of collisions (approximately 8 at default load factor).
-            h ^= (h >>> 20) ^ (h >>> 12);
-            return h ^ (h >>> 7) ^ (h >>> 4);
-        }
-
-        /**
-         * Checks for equality of non-null reference x and possibly-null y.  By
-         * default uses Object.equals.
-         * @param x first object to compare
-         * @param y second object to compare
-         * @return <tt>true</tt> if objects are equal
-         */
-        private static boolean eq(Object x, Object y) {
-            return x == y || x.equals(y);
-        }
-
-        /**
-         * Returns index for hash code h.
-         * @param h      raw hash code
-         * @param length length of table (power of 2)
-         * @return index in table
-         */
-        private static int indexFor(int h, int length) {
-            return h & (length-1);
-        }
-
-        /**
-         * Expunges stale entries from the table.
-         */
-        private void expungeStaleEntries() {
-            for (Object x; (x = queue.poll()) != null; ) {
-                synchronized (queue) {
-                    Entry entry = (Entry) x;
-                    int i = indexFor(entry.hash, table.length);
-                    Entry prev = table[i];
-                    Entry p = prev;
-                    while (p != null) {
-                        Entry next = p.next;
-                        if (p == entry) {
-                            if (prev == entry)
-                                table[i] = next;
-                            else
-                                prev.next = next;
-                            entry.next = null;
-                            size--;
-                            break;
-                        }
-                        prev = p;
-                        p = next;
-                    }
-                }
-            }
-        }
-
-        /**
-         * Returns the table after first expunging stale entries.
-         * @return an expunged hash table
-         */
-        private Entry[] getTable() {
-            expungeStaleEntries();
-            return table;
-        }
-
-        /**
-         * Returns the entry to which the specified value is mapped,
-         * or {@code null} if this set contains no entry for the value.
-         *
-         * <p>More formally, if this set contains an entry for value
-         * {@code entry} to a value {@code value} such that
-         * {@code entry.equals(value)}, then this method returns {@code entry};
-         * otherwise it returns {@code null}.
-         *
-         * @param value value to search for in set
-         * @return interned value if in set, otherwise <tt>null</tt>
-         */
-        synchronized MethodType get(MethodType value) {
-            int h = hash(value.hashCode());
-            Entry[] tab = getTable();
-            int index = indexFor(h, tab.length);
-            Entry e = tab[index];
-            MethodType g;
-            while (e != null) {
-                if (e.hash == h && eq(value, g = e.get()))
-                    return g;
-                e = e.next;
-            }
-            return null;
-        }
-
-        /**
-         * Attempts to add the specified value to the set and returns same value.
-         * If the set previously contained an entry for this value, the old
-         * value is left untouched and returned as the result.
-         *
-         * @param value value to be added
-         * @return the previous entry associated with <tt>value</tt>, or
-         *         <tt>value</tt> if there was no previous entry found
-         */
-        synchronized MethodType add(MethodType value) {
-            int h = hash(value.hashCode());
-            Entry[] tab = getTable();
-            int i = indexFor(h, tab.length);
-            MethodType g;
-            for (Entry e = tab[i]; e != null; e = e.next) {
-                if (h == e.hash && eq(value, g = e.get())) {
-                    return g;
-                }
-            }
-            Entry e = tab[i];
-            tab[i] = new Entry(value, queue, h, e);
-            if (++size >= threshold)
-                resize(tab.length * 2);
-            return value;
-        }
-
-        /**
-         * Rehashes the contents of this set into a new array with a
-         * larger capacity.  This method is called automatically when the
-         * number of keys in this set reaches its threshold.
-         *
-         * If current capacity is MAXIMUM_CAPACITY, this method does not
-         * resize the set, but sets threshold to Integer.MAX_VALUE.
-         * This has the effect of preventing future calls.
-         *
-         * @param newCapacity the new capacity, MUST be a power of two;
-         *        must be greater than current capacity unless current
-         *        capacity is MAXIMUM_CAPACITY (in which case value
-         *        is irrelevant)
-         */
-        private void resize(int newCapacity) {
-            Entry[] oldTable = getTable();
-            int oldCapacity = oldTable.length;
-            if (oldCapacity == MAXIMUM_CAPACITY) {
-                threshold = Integer.MAX_VALUE;
-                return;
-            }
-
-            Entry[] newTable = newTable(newCapacity);
-            transfer(oldTable, newTable);
-            table = newTable;
-
-            /*
-             * If ignoring null elements and processing ref queue caused massive
-             * shrinkage, then restore old table.  This should be rare, but avoids
-             * unbounded expansion of garbage-filled tables.
-             */
-            if (size >= threshold / 2) {
-                threshold = (int)(newCapacity * loadFactor);
-            } else {
-                expungeStaleEntries();
-                transfer(newTable, oldTable);
-                table = oldTable;
-            }
-        }
-
-        /**
-         * Transfers all entries from src to dest tables
-         * @param src  original table
-         * @param dest new table
-         */
-        private void transfer(Entry[] src, Entry[] dest) {
-            for (int j = 0; j < src.length; ++j) {
-                Entry e = src[j];
-                src[j] = null;
-                while (e != null) {
-                    Entry next = e.next;
-                    MethodType key = e.get();
-                    if (key == null) {
-                        e.next = null;  // Help GC
-                        size--;
-                    } else {
-                        int i = indexFor(e.hash, dest.length);
-                        e.next = dest[i];
-                        dest[i] = e;
-                    }
-                    e = next;
-                }
-            }
-        }
-
-        /**
-         * The entries in this hash table extend WeakReference, using its main ref
-         * field as the key.
-         */
-        private static class Entry extends WeakReference<MethodType> {
-            final int hash;
-            Entry next;
-
-            /**
-             * Creates new entry.
-             */
-            Entry(MethodType key,
-                  ReferenceQueue<Object> queue,
-                  int hash, Entry next) {
-                super(key, queue);
-                this.hash  = hash;
-                this.next  = next;
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/MethodTypeForm.java b/ojluni/src/main/java/java/lang/invoke/MethodTypeForm.java
deleted file mode 100755
index 83ccc1a..0000000
--- a/ojluni/src/main/java/java/lang/invoke/MethodTypeForm.java
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package java.lang.invoke;
-
-import sun.invoke.util.Wrapper;
-import static java.lang.invoke.MethodHandleStatics.*;
-import static java.lang.invoke.MethodHandleNatives.Constants.*;
-
-/**
- * Shared information for a group of method types, which differ
- * only by reference types, and therefore share a common erasure
- * and wrapping.
- * <p>
- * For an empirical discussion of the structure of method types,
- * see <a href="http://groups.google.com/group/jvm-languages/browse_thread/thread/ac9308ae74da9b7e/">
- * the thread "Avoiding Boxing" on jvm-languages</a>.
- * There are approximately 2000 distinct erased method types in the JDK.
- * There are a little over 10 times that number of unerased types.
- * No more than half of these are likely to be loaded at once.
- * @author John Rose
- */
-final class MethodTypeForm {
-    final int[] argToSlotTable, slotToArgTable;
-    final long argCounts;               // packed slot & value counts
-    final long primCounts;              // packed prim & double counts
-    final int vmslots;                  // total number of parameter slots
-    final MethodType erasedType;        // the canonical erasure
-    final MethodType basicType;         // the canonical erasure, with primitives simplified
-
-    // Cached adapter information:
-    /*lazy*/ MethodHandle genericInvoker; // JVM hook for inexact invoke
-    /*lazy*/ MethodHandle basicInvoker;   // cached instance of MH.invokeBasic
-    /*lazy*/ MethodHandle namedFunctionInvoker; // cached helper for LF.NamedFunction
-
-    // Cached lambda form information, for basic types only:
-    final LambdaForm[] lambdaForms;
-    // Indexes into lambdaForms:
-    static final int
-            LF_INVVIRTUAL     =  0,  // DMH invokeVirtual
-            LF_INVSTATIC      =  1,
-            LF_INVSPECIAL     =  2,
-            LF_NEWINVSPECIAL  =  3,
-            LF_INVINTERFACE   =  4,
-            LF_INVSTATIC_INIT =  5,  // DMH invokeStatic with <clinit> barrier
-            LF_INTERPRET      =  6,  // LF interpreter
-            LF_COUNTER        =  7,  // CMH wrapper
-            LF_REINVOKE       =  8,  // other wrapper
-            LF_EX_LINKER      =  9,  // invokeExact_MT
-            LF_EX_INVOKER     = 10,  // invokeExact MH
-            LF_GEN_LINKER     = 11,
-            LF_GEN_INVOKER    = 12,
-            LF_CS_LINKER      = 13,  // linkToCallSite_CS
-            LF_LIMIT          = 14;
-
-    public MethodType erasedType() {
-        return erasedType;
-    }
-
-    public MethodType basicType() {
-        return basicType;
-    }
-
-    public LambdaForm cachedLambdaForm(int which) {
-        return lambdaForms[which];
-    }
-
-    public LambdaForm setCachedLambdaForm(int which, LambdaForm form) {
-        // Should we perform some sort of CAS, to avoid racy duplication?
-        return lambdaForms[which] = form;
-    }
-
-    public MethodHandle basicInvoker() {
-        assert(erasedType == basicType) : "erasedType: " + erasedType + " != basicType: " + basicType;  // primitives must be flattened also
-        MethodHandle invoker = basicInvoker;
-        if (invoker != null)  return invoker;
-        invoker = basicType.invokers().makeBasicInvoker();
-        basicInvoker = invoker;
-        return invoker;
-    }
-
-    /**
-     * Build an MTF for a given type, which must have all references erased to Object.
-     * This MTF will stand for that type and all un-erased variations.
-     * Eagerly compute some basic properties of the type, common to all variations.
-     */
-    protected MethodTypeForm(MethodType erasedType) {
-        this.erasedType = erasedType;
-
-        Class<?>[] ptypes = erasedType.ptypes();
-        int ptypeCount = ptypes.length;
-        int pslotCount = ptypeCount;            // temp. estimate
-        int rtypeCount = 1;                     // temp. estimate
-        int rslotCount = 1;                     // temp. estimate
-
-        int[] argToSlotTab = null, slotToArgTab = null;
-
-        // Walk the argument types, looking for primitives.
-        int pac = 0, lac = 0, prc = 0, lrc = 0;
-        Class<?>[] epts = ptypes;
-        Class<?>[] bpts = epts;
-        for (int i = 0; i < epts.length; i++) {
-            Class<?> pt = epts[i];
-            if (pt != Object.class) {
-                ++pac;
-                Wrapper w = Wrapper.forPrimitiveType(pt);
-                if (w.isDoubleWord())  ++lac;
-                if (w.isSubwordOrInt() && pt != int.class) {
-                    if (bpts == epts)
-                        bpts = bpts.clone();
-                    bpts[i] = int.class;
-                }
-            }
-        }
-        pslotCount += lac;                  // #slots = #args + #longs
-        Class<?> rt = erasedType.returnType();
-        Class<?> bt = rt;
-        if (rt != Object.class) {
-            ++prc;          // even void.class counts as a prim here
-            Wrapper w = Wrapper.forPrimitiveType(rt);
-            if (w.isDoubleWord())  ++lrc;
-            if (w.isSubwordOrInt() && rt != int.class)
-                bt = int.class;
-            // adjust #slots, #args
-            if (rt == void.class)
-                rtypeCount = rslotCount = 0;
-            else
-                rslotCount += lrc;
-        }
-        if (epts == bpts && bt == rt) {
-            this.basicType = erasedType;
-        } else {
-            this.basicType = MethodType.makeImpl(bt, bpts, true);
-        }
-        if (lac != 0) {
-            int slot = ptypeCount + lac;
-            slotToArgTab = new int[slot+1];
-            argToSlotTab = new int[1+ptypeCount];
-            argToSlotTab[0] = slot;  // argument "-1" is past end of slots
-            for (int i = 0; i < epts.length; i++) {
-                Class<?> pt = epts[i];
-                Wrapper w = Wrapper.forBasicType(pt);
-                if (w.isDoubleWord())  --slot;
-                --slot;
-                slotToArgTab[slot] = i+1; // "+1" see argSlotToParameter note
-                argToSlotTab[1+i]  = slot;
-            }
-            assert(slot == 0);  // filled the table
-        }
-        this.primCounts = pack(lrc, prc, lac, pac);
-        this.argCounts = pack(rslotCount, rtypeCount, pslotCount, ptypeCount);
-        if (slotToArgTab == null) {
-            int slot = ptypeCount; // first arg is deepest in stack
-            slotToArgTab = new int[slot+1];
-            argToSlotTab = new int[1+ptypeCount];
-            argToSlotTab[0] = slot;  // argument "-1" is past end of slots
-            for (int i = 0; i < ptypeCount; i++) {
-                --slot;
-                slotToArgTab[slot] = i+1; // "+1" see argSlotToParameter note
-                argToSlotTab[1+i]  = slot;
-            }
-        }
-        this.argToSlotTable = argToSlotTab;
-        this.slotToArgTable = slotToArgTab;
-
-        if (pslotCount >= 256)  throw newIllegalArgumentException("too many arguments");
-
-        // send a few bits down to the JVM:
-        this.vmslots = parameterSlotCount();
-
-        if (basicType == erasedType) {
-            lambdaForms = new LambdaForm[LF_LIMIT];
-        } else {
-            lambdaForms = null;  // could be basicType.form().lambdaForms;
-        }
-    }
-
-    private static long pack(int a, int b, int c, int d) {
-        assert(((a|b|c|d) & ~0xFFFF) == 0);
-        long hw = ((a << 16) | b), lw = ((c << 16) | d);
-        return (hw << 32) | lw;
-    }
-    private static char unpack(long packed, int word) { // word==0 => return a, ==3 => return d
-        assert(word <= 3);
-        return (char)(packed >> ((3-word) * 16));
-    }
-
-    public int parameterCount() {                      // # outgoing values
-        return unpack(argCounts, 3);
-    }
-    public int parameterSlotCount() {                  // # outgoing interpreter slots
-        return unpack(argCounts, 2);
-    }
-    public int returnCount() {                         // = 0 (V), or 1
-        return unpack(argCounts, 1);
-    }
-    public int returnSlotCount() {                     // = 0 (V), 2 (J/D), or 1
-        return unpack(argCounts, 0);
-    }
-    public int primitiveParameterCount() {
-        return unpack(primCounts, 3);
-    }
-    public int longPrimitiveParameterCount() {
-        return unpack(primCounts, 2);
-    }
-    public int primitiveReturnCount() {                // = 0 (obj), or 1
-        return unpack(primCounts, 1);
-    }
-    public int longPrimitiveReturnCount() {            // = 1 (J/D), or 0
-        return unpack(primCounts, 0);
-    }
-    public boolean hasPrimitives() {
-        return primCounts != 0;
-    }
-    public boolean hasNonVoidPrimitives() {
-        if (primCounts == 0)  return false;
-        if (primitiveParameterCount() != 0)  return true;
-        return (primitiveReturnCount() != 0 && returnCount() != 0);
-    }
-    public boolean hasLongPrimitives() {
-        return (longPrimitiveParameterCount() | longPrimitiveReturnCount()) != 0;
-    }
-    public int parameterToArgSlot(int i) {
-        return argToSlotTable[1+i];
-    }
-    public int argSlotToParameter(int argSlot) {
-        // Note:  Empty slots are represented by zero in this table.
-        // Valid arguments slots contain incremented entries, so as to be non-zero.
-        // We return -1 the caller to mean an empty slot.
-        return slotToArgTable[argSlot] - 1;
-    }
-
-    static MethodTypeForm findForm(MethodType mt) {
-        MethodType erased = canonicalize(mt, ERASE, ERASE);
-        if (erased == null) {
-            // It is already erased.  Make a new MethodTypeForm.
-            return new MethodTypeForm(mt);
-        } else {
-            // Share the MethodTypeForm with the erased version.
-            return erased.form();
-        }
-    }
-
-    /** Codes for {@link #canonicalize(java.lang.Class, int)}.
-     * ERASE means change every reference to {@code Object}.
-     * WRAP means convert primitives (including {@code void} to their
-     * corresponding wrapper types.  UNWRAP means the reverse of WRAP.
-     * INTS means convert all non-void primitive types to int or long,
-     * according to size.  LONGS means convert all non-void primitives
-     * to long, regardless of size.  RAW_RETURN means convert a type
-     * (assumed to be a return type) to int if it is smaller than an int,
-     * or if it is void.
-     */
-    public static final int NO_CHANGE = 0, ERASE = 1, WRAP = 2, UNWRAP = 3, INTS = 4, LONGS = 5, RAW_RETURN = 6;
-
-    /** Canonicalize the types in the given method type.
-     * If any types change, intern the new type, and return it.
-     * Otherwise return null.
-     */
-    public static MethodType canonicalize(MethodType mt, int howRet, int howArgs) {
-        Class<?>[] ptypes = mt.ptypes();
-        Class<?>[] ptc = MethodTypeForm.canonicalizes(ptypes, howArgs);
-        Class<?> rtype = mt.returnType();
-        Class<?> rtc = MethodTypeForm.canonicalize(rtype, howRet);
-        if (ptc == null && rtc == null) {
-            // It is already canonical.
-            return null;
-        }
-        // Find the erased version of the method type:
-        if (rtc == null)  rtc = rtype;
-        if (ptc == null)  ptc = ptypes;
-        return MethodType.makeImpl(rtc, ptc, true);
-    }
-
-    /** Canonicalize the given return or param type.
-     *  Return null if the type is already canonicalized.
-     */
-    static Class<?> canonicalize(Class<?> t, int how) {
-        Class<?> ct;
-        if (t == Object.class) {
-            // no change, ever
-        } else if (!t.isPrimitive()) {
-            switch (how) {
-                case UNWRAP:
-                    ct = Wrapper.asPrimitiveType(t);
-                    if (ct != t)  return ct;
-                    break;
-                case RAW_RETURN:
-                case ERASE:
-                    return Object.class;
-            }
-        } else if (t == void.class) {
-            // no change, usually
-            switch (how) {
-                case RAW_RETURN:
-                    return int.class;
-                case WRAP:
-                    return Void.class;
-            }
-        } else {
-            // non-void primitive
-            switch (how) {
-                case WRAP:
-                    return Wrapper.asWrapperType(t);
-                case INTS:
-                    if (t == int.class || t == long.class)
-                        return null;  // no change
-                    if (t == double.class)
-                        return long.class;
-                    return int.class;
-                case LONGS:
-                    if (t == long.class)
-                        return null;  // no change
-                    return long.class;
-                case RAW_RETURN:
-                    if (t == int.class || t == long.class ||
-                        t == float.class || t == double.class)
-                        return null;  // no change
-                    // everything else returns as an int
-                    return int.class;
-            }
-        }
-        // no change; return null to signify
-        return null;
-    }
-
-    /** Canonicalize each param type in the given array.
-     *  Return null if all types are already canonicalized.
-     */
-    static Class<?>[] canonicalizes(Class<?>[] ts, int how) {
-        Class<?>[] cs = null;
-        for (int imax = ts.length, i = 0; i < imax; i++) {
-            Class<?> c = canonicalize(ts[i], how);
-            if (c == void.class)
-                c = null;  // a Void parameter was unwrapped to void; ignore
-            if (c != null) {
-                if (cs == null)
-                    cs = ts.clone();
-                cs[i] = c;
-            }
-        }
-        return cs;
-    }
-
-    @Override
-    public String toString() {
-        return "Form"+erasedType;
-    }
-
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/MutableCallSite.java b/ojluni/src/main/java/java/lang/invoke/MutableCallSite.java
deleted file mode 100755
index d48f99a..0000000
--- a/ojluni/src/main/java/java/lang/invoke/MutableCallSite.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package java.lang.invoke;
-
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * A {@code MutableCallSite} is a {@link CallSite} whose target variable
- * behaves like an ordinary field.
- * An {@code invokedynamic} instruction linked to a {@code MutableCallSite} delegates
- * all calls to the site's current target.
- * The {@linkplain CallSite#dynamicInvoker dynamic invoker} of a mutable call site
- * also delegates each call to the site's current target.
- * <p>
- * Here is an example of a mutable call site which introduces a
- * state variable into a method handle chain.
- * <!-- JavaDocExamplesTest.testMutableCallSite -->
- * <blockquote><pre>
-MutableCallSite name = new MutableCallSite(MethodType.methodType(String.class));
-MethodHandle MH_name = name.dynamicInvoker();
-MethodType MT_str1 = MethodType.methodType(String.class);
-MethodHandle MH_upcase = MethodHandles.lookup()
-    .findVirtual(String.class, "toUpperCase", MT_str1);
-MethodHandle worker1 = MethodHandles.filterReturnValue(MH_name, MH_upcase);
-name.setTarget(MethodHandles.constant(String.class, "Rocky"));
-assertEquals("ROCKY", (String) worker1.invokeExact());
-name.setTarget(MethodHandles.constant(String.class, "Fred"));
-assertEquals("FRED", (String) worker1.invokeExact());
-// (mutation can be continued indefinitely)
- * </pre></blockquote>
- * <p>
- * The same call site may be used in several places at once.
- * <blockquote><pre>
-MethodType MT_str2 = MethodType.methodType(String.class, String.class);
-MethodHandle MH_cat = lookup().findVirtual(String.class,
-  "concat", methodType(String.class, String.class));
-MethodHandle MH_dear = MethodHandles.insertArguments(MH_cat, 1, ", dear?");
-MethodHandle worker2 = MethodHandles.filterReturnValue(MH_name, MH_dear);
-assertEquals("Fred, dear?", (String) worker2.invokeExact());
-name.setTarget(MethodHandles.constant(String.class, "Wilma"));
-assertEquals("WILMA", (String) worker1.invokeExact());
-assertEquals("Wilma, dear?", (String) worker2.invokeExact());
- * </pre></blockquote>
- * <p>
- * <em>Non-synchronization of target values:</em>
- * A write to a mutable call site's target does not force other threads
- * to become aware of the updated value.  Threads which do not perform
- * suitable synchronization actions relative to the updated call site
- * may cache the old target value and delay their use of the new target
- * value indefinitely.
- * (This is a normal consequence of the Java Memory Model as applied
- * to object fields.)
- * <p>
- * The {@link #syncAll syncAll} operation provides a way to force threads
- * to accept a new target value, even if there is no other synchronization.
- * <p>
- * For target values which will be frequently updated, consider using
- * a {@linkplain VolatileCallSite volatile call site} instead.
- * @author John Rose, JSR 292 EG
- */
-public class MutableCallSite extends CallSite {
-    /**
-     * Creates a blank call site object with the given method type.
-     * The initial target is set to a method handle of the given type
-     * which will throw an {@link IllegalStateException} if called.
-     * <p>
-     * The type of the call site is permanently set to the given type.
-     * <p>
-     * Before this {@code CallSite} object is returned from a bootstrap method,
-     * or invoked in some other manner,
-     * it is usually provided with a more useful target method,
-     * via a call to {@link CallSite#setTarget(MethodHandle) setTarget}.
-     * @param type the method type that this call site will have
-     * @throws NullPointerException if the proposed type is null
-     */
-    public MutableCallSite(MethodType type) {
-        super(type);
-    }
-
-    /**
-     * Creates a call site object with an initial target method handle.
-     * The type of the call site is permanently set to the initial target's type.
-     * @param target the method handle that will be the initial target of the call site
-     * @throws NullPointerException if the proposed target is null
-     */
-    public MutableCallSite(MethodHandle target) {
-        super(target);
-    }
-
-    /**
-     * Returns the target method of the call site, which behaves
-     * like a normal field of the {@code MutableCallSite}.
-     * <p>
-     * The interactions of {@code getTarget} with memory are the same
-     * as of a read from an ordinary variable, such as an array element or a
-     * non-volatile, non-final field.
-     * <p>
-     * In particular, the current thread may choose to reuse the result
-     * of a previous read of the target from memory, and may fail to see
-     * a recent update to the target by another thread.
-     *
-     * @return the linkage state of this call site, a method handle which can change over time
-     * @see #setTarget
-     */
-    @Override public final MethodHandle getTarget() {
-        return target;
-    }
-
-    /**
-     * Updates the target method of this call site, as a normal variable.
-     * The type of the new target must agree with the type of the old target.
-     * <p>
-     * The interactions with memory are the same
-     * as of a write to an ordinary variable, such as an array element or a
-     * non-volatile, non-final field.
-     * <p>
-     * In particular, unrelated threads may fail to see the updated target
-     * until they perform a read from memory.
-     * Stronger guarantees can be created by putting appropriate operations
-     * into the bootstrap method and/or the target methods used
-     * at any given call site.
-     *
-     * @param newTarget the new target
-     * @throws NullPointerException if the proposed new target is null
-     * @throws WrongMethodTypeException if the proposed new target
-     *         has a method type that differs from the previous target
-     * @see #getTarget
-     */
-    @Override public void setTarget(MethodHandle newTarget) {
-        checkTargetChange(this.target, newTarget);
-        setTargetNormal(newTarget);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public final MethodHandle dynamicInvoker() {
-        return makeDynamicInvoker();
-    }
-
-    /**
-     * Performs a synchronization operation on each call site in the given array,
-     * forcing all other threads to throw away any cached values previously
-     * loaded from the target of any of the call sites.
-     * <p>
-     * This operation does not reverse any calls that have already started
-     * on an old target value.
-     * (Java supports {@linkplain java.lang.Object#wait() forward time travel} only.)
-     * <p>
-     * The overall effect is to force all future readers of each call site's target
-     * to accept the most recently stored value.
-     * ("Most recently" is reckoned relative to the {@code syncAll} itself.)
-     * Conversely, the {@code syncAll} call may block until all readers have
-     * (somehow) decached all previous versions of each call site's target.
-     * <p>
-     * To avoid race conditions, calls to {@code setTarget} and {@code syncAll}
-     * should generally be performed under some sort of mutual exclusion.
-     * Note that reader threads may observe an updated target as early
-     * as the {@code setTarget} call that install the value
-     * (and before the {@code syncAll} that confirms the value).
-     * On the other hand, reader threads may observe previous versions of
-     * the target until the {@code syncAll} call returns
-     * (and after the {@code setTarget} that attempts to convey the updated version).
-     * <p>
-     * This operation is likely to be expensive and should be used sparingly.
-     * If possible, it should be buffered for batch processing on sets of call sites.
-     * <p>
-     * If {@code sites} contains a null element,
-     * a {@code NullPointerException} will be raised.
-     * In this case, some non-null elements in the array may be
-     * processed before the method returns abnormally.
-     * Which elements these are (if any) is implementation-dependent.
-     *
-     * <h3>Java Memory Model details</h3>
-     * In terms of the Java Memory Model, this operation performs a synchronization
-     * action which is comparable in effect to the writing of a volatile variable
-     * by the current thread, and an eventual volatile read by every other thread
-     * that may access one of the affected call sites.
-     * <p>
-     * The following effects are apparent, for each individual call site {@code S}:
-     * <ul>
-     * <li>A new volatile variable {@code V} is created, and written by the current thread.
-     *     As defined by the JMM, this write is a global synchronization event.
-     * <li>As is normal with thread-local ordering of write events,
-     *     every action already performed by the current thread is
-     *     taken to happen before the volatile write to {@code V}.
-     *     (In some implementations, this means that the current thread
-     *     performs a global release operation.)
-     * <li>Specifically, the write to the current target of {@code S} is
-     *     taken to happen before the volatile write to {@code V}.
-     * <li>The volatile write to {@code V} is placed
-     *     (in an implementation specific manner)
-     *     in the global synchronization order.
-     * <li>Consider an arbitrary thread {@code T} (other than the current thread).
-     *     If {@code T} executes a synchronization action {@code A}
-     *     after the volatile write to {@code V} (in the global synchronization order),
-     *     it is therefore required to see either the current target
-     *     of {@code S}, or a later write to that target,
-     *     if it executes a read on the target of {@code S}.
-     *     (This constraint is called "synchronization-order consistency".)
-     * <li>The JMM specifically allows optimizing compilers to elide
-     *     reads or writes of variables that are known to be useless.
-     *     Such elided reads and writes have no effect on the happens-before
-     *     relation.  Regardless of this fact, the volatile {@code V}
-     *     will not be elided, even though its written value is
-     *     indeterminate and its read value is not used.
-     * </ul>
-     * Because of the last point, the implementation behaves as if a
-     * volatile read of {@code V} were performed by {@code T}
-     * immediately after its action {@code A}.  In the local ordering
-     * of actions in {@code T}, this read happens before any future
-     * read of the target of {@code S}.  It is as if the
-     * implementation arbitrarily picked a read of {@code S}'s target
-     * by {@code T}, and forced a read of {@code V} to precede it,
-     * thereby ensuring communication of the new target value.
-     * <p>
-     * As long as the constraints of the Java Memory Model are obeyed,
-     * implementations may delay the completion of a {@code syncAll}
-     * operation while other threads ({@code T} above) continue to
-     * use previous values of {@code S}'s target.
-     * However, implementations are (as always) encouraged to avoid
-     * livelock, and to eventually require all threads to take account
-     * of the updated target.
-     *
-     * <p style="font-size:smaller;">
-     * <em>Discussion:</em>
-     * For performance reasons, {@code syncAll} is not a virtual method
-     * on a single call site, but rather applies to a set of call sites.
-     * Some implementations may incur a large fixed overhead cost
-     * for processing one or more synchronization operations,
-     * but a small incremental cost for each additional call site.
-     * In any case, this operation is likely to be costly, since
-     * other threads may have to be somehow interrupted
-     * in order to make them notice the updated target value.
-     * However, it may be observed that a single call to synchronize
-     * several sites has the same formal effect as many calls,
-     * each on just one of the sites.
-     *
-     * <p style="font-size:smaller;">
-     * <em>Implementation Note:</em>
-     * Simple implementations of {@code MutableCallSite} may use
-     * a volatile variable for the target of a mutable call site.
-     * In such an implementation, the {@code syncAll} method can be a no-op,
-     * and yet it will conform to the JMM behavior documented above.
-     *
-     * @param sites an array of call sites to be synchronized
-     * @throws NullPointerException if the {@code sites} array reference is null
-     *                              or the array contains a null
-     */
-    public static void syncAll(MutableCallSite[] sites) {
-        if (sites.length == 0)  return;
-        STORE_BARRIER.lazySet(0);
-        for (int i = 0; i < sites.length; i++) {
-            sites[i].getClass();  // trigger NPE on first null
-        }
-        // FIXME: NYI
-    }
-    private static final AtomicInteger STORE_BARRIER = new AtomicInteger();
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/SimpleMethodHandle.java b/ojluni/src/main/java/java/lang/invoke/SimpleMethodHandle.java
deleted file mode 100755
index 1cd6daf..0000000
--- a/ojluni/src/main/java/java/lang/invoke/SimpleMethodHandle.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package java.lang.invoke;
-
-import static java.lang.invoke.LambdaForm.*;
-import static java.lang.invoke.MethodHandleNatives.Constants.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * A method handle whose behavior is determined only by its LambdaForm.
- * @author jrose
- */
-final class SimpleMethodHandle extends MethodHandle {
-    private SimpleMethodHandle(MethodType type, LambdaForm form) {
-        super(type, form);
-    }
-
-    /*non-public*/ static SimpleMethodHandle make(MethodType type, LambdaForm form) {
-        return new SimpleMethodHandle(type, form);
-    }
-
-    @Override
-    MethodHandle bindArgument(int pos, char basicType, Object value) {
-        MethodType type2 = type().dropParameterTypes(pos, pos+1);
-        LambdaForm form2 = internalForm().bind(1+pos, BoundMethodHandle.SpeciesData.EMPTY);
-        return BoundMethodHandle.bindSingle(type2, form2, basicType, value);
-    }
-
-    @Override
-    MethodHandle dropArguments(MethodType srcType, int pos, int drops) {
-        LambdaForm newForm = internalForm().addArguments(pos, srcType.parameterList().subList(pos, pos+drops));
-        return new SimpleMethodHandle(srcType, newForm);
-    }
-
-    @Override
-    MethodHandle permuteArguments(MethodType newType, int[] reorder) {
-        LambdaForm form2 = internalForm().permuteArguments(1, reorder, basicTypes(newType.parameterList()));
-        return new SimpleMethodHandle(newType, form2);
-    }
-
-    @Override
-    MethodHandle copyWith(MethodType mt, LambdaForm lf) {
-        return new SimpleMethodHandle(mt, lf);
-    }
-
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/SwitchPoint.java b/ojluni/src/main/java/java/lang/invoke/SwitchPoint.java
deleted file mode 100755
index 65fd1da..0000000
--- a/ojluni/src/main/java/java/lang/invoke/SwitchPoint.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (c) 2010, 2011, 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.
- */
-
-package java.lang.invoke;
-
-/**
- * <p>
- * A {@code SwitchPoint} is an object which can publish state transitions to other threads.
- * A switch point is initially in the <em>valid</em> state, but may at any time be
- * changed to the <em>invalid</em> state.  Invalidation cannot be reversed.
- * A switch point can combine a <em>guarded pair</em> of method handles into a
- * <em>guarded delegator</em>.
- * The guarded delegator is a method handle which delegates to one of the old method handles.
- * The state of the switch point determines which of the two gets the delegation.
- * <p>
- * A single switch point may be used to control any number of method handles.
- * (Indirectly, therefore, it can control any number of call sites.)
- * This is done by using the single switch point as a factory for combining
- * any number of guarded method handle pairs into guarded delegators.
- * <p>
- * When a guarded delegator is created from a guarded pair, the pair
- * is wrapped in a new method handle {@code M},
- * which is permanently associated with the switch point that created it.
- * Each pair consists of a target {@code T} and a fallback {@code F}.
- * While the switch point is valid, invocations to {@code M} are delegated to {@code T}.
- * After it is invalidated, invocations are delegated to {@code F}.
- * <p>
- * Invalidation is global and immediate, as if the switch point contained a
- * volatile boolean variable consulted on every call to {@code M}.
- * The invalidation is also permanent, which means the switch point
- * can change state only once.
- * The switch point will always delegate to {@code F} after being invalidated.
- * At that point {@code guardWithTest} may ignore {@code T} and return {@code F}.
- * <p>
- * Here is an example of a switch point in action:
- * <blockquote><pre>
-MethodHandle MH_strcat = MethodHandles.lookup()
-    .findVirtual(String.class, "concat", MethodType.methodType(String.class, String.class));
-SwitchPoint spt = new SwitchPoint();
-assert(!spt.hasBeenInvalidated());
-// the following steps may be repeated to re-use the same switch point:
-MethodHandle worker1 = MH_strcat;
-MethodHandle worker2 = MethodHandles.permuteArguments(MH_strcat, MH_strcat.type(), 1, 0);
-MethodHandle worker = spt.guardWithTest(worker1, worker2);
-assertEquals("method", (String) worker.invokeExact("met", "hod"));
-SwitchPoint.invalidateAll(new SwitchPoint[]{ spt });
-assert(spt.hasBeenInvalidated());
-assertEquals("hodmet", (String) worker.invokeExact("met", "hod"));
- * </pre></blockquote>
- * <p style="font-size:smaller;">
- * <em>Discussion:</em>
- * Switch points are useful without subclassing.  They may also be subclassed.
- * This may be useful in order to associate application-specific invalidation logic
- * with the switch point.
- * Notice that there is no permanent association between a switch point and
- * the method handles it produces and consumes.
- * The garbage collector may collect method handles produced or consumed
- * by a switch point independently of the lifetime of the switch point itself.
- * <p style="font-size:smaller;">
- * <em>Implementation Note:</em>
- * A switch point behaves as if implemented on top of {@link MutableCallSite},
- * approximately as follows:
- * <blockquote><pre>
-public class SwitchPoint {
-  private static final MethodHandle
-    K_true  = MethodHandles.constant(boolean.class, true),
-    K_false = MethodHandles.constant(boolean.class, false);
-  private final MutableCallSite mcs;
-  private final MethodHandle mcsInvoker;
-  public SwitchPoint() {
-    this.mcs = new MutableCallSite(K_true);
-    this.mcsInvoker = mcs.dynamicInvoker();
-  }
-  public MethodHandle guardWithTest(
-                MethodHandle target, MethodHandle fallback) {
-    // Note:  mcsInvoker is of type ()boolean.
-    // Target and fallback may take any arguments, but must have the same type.
-    return MethodHandles.guardWithTest(this.mcsInvoker, target, fallback);
-  }
-  public static void invalidateAll(SwitchPoint[] spts) {
-    List&lt;MutableCallSite&gt; mcss = new ArrayList&lt;&gt;();
-    for (SwitchPoint spt : spts)  mcss.add(spt.mcs);
-    for (MutableCallSite mcs : mcss)  mcs.setTarget(K_false);
-    MutableCallSite.syncAll(mcss.toArray(new MutableCallSite[0]));
-  }
-}
- * </pre></blockquote>
- * @author Remi Forax, JSR 292 EG
- */
-public class SwitchPoint {
-    private static final MethodHandle
-        K_true  = MethodHandles.constant(boolean.class, true),
-        K_false = MethodHandles.constant(boolean.class, false);
-
-    private final MutableCallSite mcs;
-    private final MethodHandle mcsInvoker;
-
-    /**
-     * Creates a new switch point.
-     */
-    public SwitchPoint() {
-        this.mcs = new MutableCallSite(K_true);
-        this.mcsInvoker = mcs.dynamicInvoker();
-    }
-
-    /**
-     * Determines if this switch point has been invalidated yet.
-     *
-     * <p style="font-size:smaller;">
-     * <em>Discussion:</em>
-     * Because of the one-way nature of invalidation, once a switch point begins
-     * to return true for {@code hasBeenInvalidated},
-     * it will always do so in the future.
-     * On the other hand, a valid switch point visible to other threads may
-     * be invalidated at any moment, due to a request by another thread.
-     * <p style="font-size:smaller;">
-     * Since invalidation is a global and immediate operation,
-     * the execution of this query, on a valid switchpoint,
-     * must be internally sequenced with any
-     * other threads that could cause invalidation.
-     * This query may therefore be expensive.
-     * The recommended way to build a boolean-valued method handle
-     * which queries the invalidation state of a switch point {@code s} is
-     * to call {@code s.guardWithTest} on
-     * {@link MethodHandles#constant constant} true and false method handles.
-     *
-     * @return true if this switch point has been invalidated
-     */
-    public boolean hasBeenInvalidated() {
-        return (mcs.getTarget() != K_true);
-    }
-
-    /**
-     * Returns a method handle which always delegates either to the target or the fallback.
-     * The method handle will delegate to the target exactly as long as the switch point is valid.
-     * After that, it will permanently delegate to the fallback.
-     * <p>
-     * The target and fallback must be of exactly the same method type,
-     * and the resulting combined method handle will also be of this type.
-     *
-     * @param target the method handle selected by the switch point as long as it is valid
-     * @param fallback the method handle selected by the switch point after it is invalidated
-     * @return a combined method handle which always calls either the target or fallback
-     * @throws NullPointerException if either argument is null
-     * @throws IllegalArgumentException if the two method types do not match
-     * @see MethodHandles#guardWithTest
-     */
-    public MethodHandle guardWithTest(MethodHandle target, MethodHandle fallback) {
-        if (mcs.getTarget() == K_false)
-            return fallback;  // already invalid
-        return MethodHandles.guardWithTest(mcsInvoker, target, fallback);
-    }
-
-    /**
-     * Sets all of the given switch points into the invalid state.
-     * After this call executes, no thread will observe any of the
-     * switch points to be in a valid state.
-     * <p>
-     * This operation is likely to be expensive and should be used sparingly.
-     * If possible, it should be buffered for batch processing on sets of switch points.
-     * <p>
-     * If {@code switchPoints} contains a null element,
-     * a {@code NullPointerException} will be raised.
-     * In this case, some non-null elements in the array may be
-     * processed before the method returns abnormally.
-     * Which elements these are (if any) is implementation-dependent.
-     *
-     * <p style="font-size:smaller;">
-     * <em>Discussion:</em>
-     * For performance reasons, {@code invalidateAll} is not a virtual method
-     * on a single switch point, but rather applies to a set of switch points.
-     * Some implementations may incur a large fixed overhead cost
-     * for processing one or more invalidation operations,
-     * but a small incremental cost for each additional invalidation.
-     * In any case, this operation is likely to be costly, since
-     * other threads may have to be somehow interrupted
-     * in order to make them notice the updated switch point state.
-     * However, it may be observed that a single call to invalidate
-     * several switch points has the same formal effect as many calls,
-     * each on just one of the switch points.
-     *
-     * <p style="font-size:smaller;">
-     * <em>Implementation Note:</em>
-     * Simple implementations of {@code SwitchPoint} may use
-     * a private {@link MutableCallSite} to publish the state of a switch point.
-     * In such an implementation, the {@code invalidateAll} method can
-     * simply change the call site's target, and issue one call to
-     * {@linkplain MutableCallSite#syncAll synchronize} all the
-     * private call sites.
-     *
-     * @param switchPoints an array of call sites to be synchronized
-     * @throws NullPointerException if the {@code switchPoints} array reference is null
-     *                              or the array contains a null
-     */
-    public static void invalidateAll(SwitchPoint[] switchPoints) {
-        if (switchPoints.length == 0)  return;
-        MutableCallSite[] sites = new MutableCallSite[switchPoints.length];
-        for (int i = 0; i < switchPoints.length; i++) {
-            SwitchPoint spt = switchPoints[i];
-            if (spt == null)  break;  // MSC.syncAll will trigger a NPE
-            sites[i] = spt.mcs;
-            spt.mcs.setTarget(K_false);
-        }
-        MutableCallSite.syncAll(sites);
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/VolatileCallSite.java b/ojluni/src/main/java/java/lang/invoke/VolatileCallSite.java
deleted file mode 100755
index de88f36..0000000
--- a/ojluni/src/main/java/java/lang/invoke/VolatileCallSite.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2010, 2011, 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.
- */
-
-package java.lang.invoke;
-
-/**
- * A {@code VolatileCallSite} is a {@link CallSite} whose target acts like a volatile variable.
- * An {@code invokedynamic} instruction linked to a {@code VolatileCallSite} sees updates
- * to its call site target immediately, even if the update occurs in another thread.
- * There may be a performance penalty for such tight coupling between threads.
- * <p>
- * Unlike {@code MutableCallSite}, there is no
- * {@linkplain MutableCallSite#syncAll syncAll operation} on volatile
- * call sites, since every write to a volatile variable is implicitly
- * synchronized with reader threads.
- * <p>
- * In other respects, a {@code VolatileCallSite} is interchangeable
- * with {@code MutableCallSite}.
- * @see MutableCallSite
- * @author John Rose, JSR 292 EG
- */
-public class VolatileCallSite extends CallSite {
-    /**
-     * Creates a call site with a volatile binding to its target.
-     * The initial target is set to a method handle
-     * of the given type which will throw an {@code IllegalStateException} if called.
-     * @param type the method type that this call site will have
-     * @throws NullPointerException if the proposed type is null
-     */
-    public VolatileCallSite(MethodType type) {
-        super(type);
-    }
-
-    /**
-     * Creates a call site with a volatile binding to its target.
-     * The target is set to the given value.
-     * @param target the method handle that will be the initial target of the call site
-     * @throws NullPointerException if the proposed target is null
-     */
-    public VolatileCallSite(MethodHandle target) {
-        super(target);
-    }
-
-    /**
-     * Returns the target method of the call site, which behaves
-     * like a {@code volatile} field of the {@code VolatileCallSite}.
-     * <p>
-     * The interactions of {@code getTarget} with memory are the same
-     * as of a read from a {@code volatile} field.
-     * <p>
-     * In particular, the current thread is required to issue a fresh
-     * read of the target from memory, and must not fail to see
-     * a recent update to the target by another thread.
-     *
-     * @return the linkage state of this call site, a method handle which can change over time
-     * @see #setTarget
-     */
-    @Override public final MethodHandle getTarget() {
-        return getTargetVolatile();
-    }
-
-    /**
-     * Updates the target method of this call site, as a volatile variable.
-     * The type of the new target must agree with the type of the old target.
-     * <p>
-     * The interactions with memory are the same as of a write to a volatile field.
-     * In particular, any threads is guaranteed to see the updated target
-     * the next time it calls {@code getTarget}.
-     * @param newTarget the new target
-     * @throws NullPointerException if the proposed new target is null
-     * @throws WrongMethodTypeException if the proposed new target
-     *         has a method type that differs from the previous target
-     * @see #getTarget
-     */
-    @Override public void setTarget(MethodHandle newTarget) {
-        checkTargetChange(getTargetVolatile(), newTarget);
-        setTargetVolatile(newTarget);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public final MethodHandle dynamicInvoker() {
-        return makeDynamicInvoker();
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/WrongMethodTypeException.java b/ojluni/src/main/java/java/lang/invoke/WrongMethodTypeException.java
deleted file mode 100755
index dba07d9..0000000
--- a/ojluni/src/main/java/java/lang/invoke/WrongMethodTypeException.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package java.lang.invoke;
-
-/**
- * Thrown to indicate that code has attempted to call a method handle
- * via the wrong method type.  As with the bytecode representation of
- * normal Java method calls, method handle calls are strongly typed
- * to a specific type descriptor associated with a call site.
- * <p>
- * This exception may also be thrown when two method handles are
- * composed, and the system detects that their types cannot be
- * matched up correctly.  This amounts to an early evaluation
- * of the type mismatch, at method handle construction time,
- * instead of when the mismatched method handle is called.
- *
- * @author John Rose, JSR 292 EG
- * @since 1.7
- */
-public class WrongMethodTypeException extends RuntimeException {
-    private static final long serialVersionUID = 292L;
-
-    /**
-     * Constructs a {@code WrongMethodTypeException} with no detail message.
-     */
-    public WrongMethodTypeException() {
-        super();
-    }
-
-    /**
-     * Constructs a {@code WrongMethodTypeException} with the specified
-     * detail message.
-     *
-     * @param s the detail message.
-     */
-    public WrongMethodTypeException(String s) {
-        super(s);
-    }
-
-    /**
-     * Constructs a {@code WrongMethodTypeException} with the specified
-     * detail message and cause.
-     *
-     * @param s the detail message.
-     * @param cause the cause of the exception, or null.
-     */
-    //FIXME: make this public in MR1
-    /*non-public*/ WrongMethodTypeException(String s, Throwable cause) {
-        super(s, cause);
-    }
-
-    /**
-     * Constructs a {@code WrongMethodTypeException} with the specified
-     * cause.
-     *
-     * @param cause the cause of the exception, or null.
-     */
-    //FIXME: make this public in MR1
-    /*non-public*/ WrongMethodTypeException(Throwable cause) {
-        super(cause);
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/invoke/package-info.java b/ojluni/src/main/java/java/lang/invoke/package-info.java
deleted file mode 100755
index 79c68ae..0000000
--- a/ojluni/src/main/java/java/lang/invoke/package-info.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-/**
- * The {@code java.lang.invoke} package contains dynamic language support provided directly by
- * the Java core class libraries and virtual machine.
- *
- * <p>
- * As described in the Java Virtual Machine Specification,
- * certain types in this package have special relations to dynamic
- * language support in the virtual machine:
- * <ul>
- * <li>The class {@link java.lang.invoke.MethodHandle MethodHandle} contains
- * <a href="MethodHandle.html#sigpoly">signature polymorphic methods</a>
- * which can be linked regardless of their type descriptor.
- * Normally, method linkage requires exact matching of type descriptors.
- * </li>
- *
- * <li>The JVM bytecode format supports immediate constants of
- * the classes {@link java.lang.invoke.MethodHandle MethodHandle} and {@link java.lang.invoke.MethodType MethodType}.
- * </li>
- * </ul>
- *
- * <h2><a name="jvm_mods"></a>Summary of relevant Java Virtual Machine changes</h2>
- * The following low-level information summarizes relevant parts of the
- * Java Virtual Machine specification.  For full details, please see the
- * current version of that specification.
- *
- * Each occurrence of an {@code invokedynamic} instruction is called a <em>dynamic call site</em>.
- * <h3><a name="indyinsn"></a>{@code invokedynamic} instructions</h3>
- * A dynamic call site is originally in an unlinked state.  In this state, there is
- * no target method for the call site to invoke.
- * <p>
- * Before the JVM can execute a dynamic call site (an {@code invokedynamic} instruction),
- * the call site must first be <em>linked</em>.
- * Linking is accomplished by calling a <em>bootstrap method</em>
- * which is given the static information content of the call site,
- * and which must produce a {@link java.lang.invoke.MethodHandle method handle}
- * that gives the behavior of the call site.
- * <p>
- * Each {@code invokedynamic} instruction statically specifies its own
- * bootstrap method as a constant pool reference.
- * The constant pool reference also specifies the call site's name and type descriptor,
- * just like {@code invokevirtual} and the other invoke instructions.
- * <p>
- * Linking starts with resolving the constant pool entry for the
- * bootstrap method, and resolving a {@link java.lang.invoke.MethodType MethodType} object for
- * the type descriptor of the dynamic call site.
- * This resolution process may trigger class loading.
- * It may therefore throw an error if a class fails to load.
- * This error becomes the abnormal termination of the dynamic
- * call site execution.
- * Linkage does not trigger class initialization.
- * <p>
- * The bootstrap method is invoked on at least three values:
- * <ul>
- * <li>a {@code MethodHandles.Lookup}, a lookup object on the <em>caller class</em> in which dynamic call site occurs </li>
- * <li>a {@code String}, the method name mentioned in the call site </li>
- * <li>a {@code MethodType}, the resolved type descriptor of the call </li>
- * <li>optionally, between 1 and 251 additional static arguments taken from the constant pool </li>
- * </ul>
- * Invocation is as if by
- * {@link java.lang.invoke.MethodHandle#invoke MethodHandle.invoke}.
- * The returned result must be a {@link java.lang.invoke.CallSite CallSite} (or a subclass).
- * The type of the call site's target must be exactly equal to the type
- * derived from the dynamic call site's type descriptor and passed to
- * the bootstrap method.
- * The call site then becomes permanently linked to the dynamic call site.
- * <p>
- * As documented in the JVM specification, all failures arising from
- * the linkage of a dynamic call site are reported
- * by a {@link java.lang.BootstrapMethodError BootstrapMethodError},
- * which is thrown as the abnormal termination of the dynamic call
- * site execution.
- * If this happens, the same error will the thrown for all subsequent
- * attempts to execute the dynamic call site.
- *
- * <h3>timing of linkage</h3>
- * A dynamic call site is linked just before its first execution.
- * The bootstrap method call implementing the linkage occurs within
- * a thread that is attempting a first execution.
- * <p>
- * If there are several such threads, the bootstrap method may be
- * invoked in several threads concurrently.
- * Therefore, bootstrap methods which access global application
- * data must take the usual precautions against race conditions.
- * In any case, every {@code invokedynamic} instruction is either
- * unlinked or linked to a unique {@code CallSite} object.
- * <p>
- * In an application which requires dynamic call sites with individually
- * mutable behaviors, their bootstrap methods should produce distinct
- * {@link java.lang.invoke.CallSite CallSite} objects, one for each linkage request.
- * Alternatively, an application can link a single {@code CallSite} object
- * to several {@code invokedynamic} instructions, in which case
- * a change to the target method will become visible at each of
- * the instructions.
- * <p>
- * If several threads simultaneously execute a bootstrap method for a single dynamic
- * call site, the JVM must choose one {@code CallSite} object and install it visibly to
- * all threads.  Any other bootstrap method calls are allowed to complete, but their
- * results are ignored, and their dynamic call site invocations proceed with the originally
- * chosen target object.
-
- * <p style="font-size:smaller;">
- * <em>Discussion:</em>
- * These rules do not enable the JVM to duplicate dynamic call sites,
- * or to issue &ldquo;causeless&rdquo; bootstrap method calls.
- * Every dynamic call site transitions at most once from unlinked to linked,
- * just before its first invocation.
- * There is no way to undo the effect of a completed bootstrap method call.
- *
- * <h3>types of bootstrap methods</h3>
- * As long as each bootstrap method can be correctly invoked
- * by {@code MethodHandle.invoke}, its detailed type is arbitrary.
- * For example, the first argument could be {@code Object}
- * instead of {@code MethodHandles.Lookup}, and the return type
- * could also be {@code Object} instead of {@code CallSite}.
- * (Note that the types and number of the stacked arguments limit
- * the legal kinds of bootstrap methods to appropriately typed
- * static methods and constructors of {@code CallSite} subclasses.)
- * <p>
- * If a given {@code invokedynamic} instruction specifies no static arguments,
- * the instruction's bootstrap method will be invoked on three arguments,
- * conveying the instruction's caller class, name, and method type.
- * If the {@code invokedynamic} instruction specifies one or more static arguments,
- * those values will be passed as additional arguments to the method handle.
- * (Note that because there is a limit of 255 arguments to any method,
- * at most 251 extra arguments can be supplied, since the bootstrap method
- * handle itself and its first three arguments must also be stacked.)
- * The bootstrap method will be invoked as if by either {@code MethodHandle.invoke}
- * or {@code invokeWithArguments}.  (There is no way to tell the difference.)
- * <p>
- * The normal argument conversion rules for {@code MethodHandle.invoke} apply to all stacked arguments.
- * For example, if a pushed value is a primitive type, it may be converted to a reference by boxing conversion.
- * If the bootstrap method is a variable arity method (its modifier bit {@code 0x0080} is set),
- * then some or all of the arguments specified here may be collected into a trailing array parameter.
- * (This is not a special rule, but rather a useful consequence of the interaction
- * between {@code CONSTANT_MethodHandle} constants, the modifier bit for variable arity methods,
- * and the {@link java.lang.invoke.MethodHandle#asVarargsCollector asVarargsCollector} transformation.)
- * <p>
- * Given these rules, here are examples of legal bootstrap method declarations,
- * given various numbers {@code N} of extra arguments.
- * The first rows (marked {@code *}) will work for any number of extra arguments.
- * <table border=1 cellpadding=5 summary="Static argument types">
- * <tr><th>N</th><th>sample bootstrap method</th></tr>
- * <tr><td>*</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, Object... args)</code></td></tr>
- * <tr><td>*</td><td><code>CallSite bootstrap(Object... args)</code></td></tr>
- * <tr><td>*</td><td><code>CallSite bootstrap(Object caller, Object... nameAndTypeWithArgs)</code></td></tr>
- * <tr><td>0</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type)</code></td></tr>
- * <tr><td>0</td><td><code>CallSite bootstrap(Lookup caller, Object... nameAndType)</code></td></tr>
- * <tr><td>1</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, Object arg)</code></td></tr>
- * <tr><td>2</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, Object... args)</code></td></tr>
- * <tr><td>2</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, String... args)</code></td></tr>
- * <tr><td>2</td><td><code>CallSite bootstrap(Lookup caller, String name, MethodType type, String x, int y)</code></td></tr>
- * </table>
- * The last example assumes that the extra arguments are of type
- * {@code CONSTANT_String} and {@code CONSTANT_Integer}, respectively.
- * The second-to-last example assumes that all extra arguments are of type
- * {@code CONSTANT_String}.
- * The other examples work with all types of extra arguments.
- * <p>
- * As noted above, the actual method type of the bootstrap method can vary.
- * For example, the fourth argument could be {@code MethodHandle},
- * if that is the type of the corresponding constant in
- * the {@code CONSTANT_InvokeDynamic} entry.
- * In that case, the {@code MethodHandle.invoke} call will pass the extra method handle
- * constant as an {@code Object}, but the type matching machinery of {@code MethodHandle.invoke}
- * will cast the reference back to {@code MethodHandle} before invoking the bootstrap method.
- * (If a string constant were passed instead, by badly generated code, that cast would then fail,
- * resulting in a {@code BootstrapMethodError}.)
- * <p>
- * Note that, as a consequence of the above rules, the bootstrap method may accept a primitive
- * argument, if it can be represented by a constant pool entry.
- * However, arguments of type {@code boolean}, {@code byte}, {@code short}, or {@code char}
- * cannot be created for bootstrap methods, since such constants cannot be directly
- * represented in the constant pool, and the invocation of the bootstrap method will
- * not perform the necessary narrowing primitive conversions.
- * <p>
- * Extra bootstrap method arguments are intended to allow language implementors
- * to safely and compactly encode metadata.
- * In principle, the name and extra arguments are redundant,
- * since each call site could be given its own unique bootstrap method.
- * Such a practice is likely to produce large class files and constant pools.
- *
- * @author John Rose, JSR 292 EG
- * @since 1.7
- */
-
-package java.lang.invoke;
diff --git a/ojluni/src/main/java/java/lang/management/BufferPoolMXBean.java b/ojluni/src/main/java/java/lang/management/BufferPoolMXBean.java
deleted file mode 100755
index f8fb4bd..0000000
--- a/ojluni/src/main/java/java/lang/management/BufferPoolMXBean.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, 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.
- */
-
-package java.lang.management;
-
-/**
- * The management interface for a buffer pool, for example a pool of
- * {@link java.nio.ByteBuffer#allocateDirect direct} or {@link
- * java.nio.MappedByteBuffer mapped} buffers.
- *
- * <p> A class implementing this interface is an
- * {@link javax.management.MXBean}. A Java
- * virtual machine has one or more implementations of this interface. The {@link
- * java.lang.management.ManagementFactory#getPlatformMXBeans getPlatformMXBeans}
- * method can be used to obtain the list of {@code BufferPoolMXBean} objects
- * representing the management interfaces for pools of buffers as follows:
- * <pre>
- *     List&lt;BufferPoolMXBean&gt; pools = ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class);
- * </pre>
- *
- * <p> The management interfaces are also registered with the platform {@link
- * javax.management.MBeanServer MBeanServer}. The {@link
- * javax.management.ObjectName ObjectName} that uniquely identifies the
- * management interface within the {@code MBeanServer} takes the form:
- * <pre>
- *     java.nio:type=BufferPool,name=<i>pool name</i>
- * </pre>
- * where <em>pool name</em> is the {@link #getName name} of the buffer pool.
- *
- * @since   1.7
- */
-public interface BufferPoolMXBean extends PlatformManagedObject {
-
-    /**
-     * Returns the name representing this buffer pool.
-     *
-     * @return  The name of this buffer pool.
-     */
-    String getName();
-
-    /**
-     * Returns an estimate of the number of buffers in the pool.
-     *
-     * @return  An estimate of the number of buffers in this pool
-     */
-    long getCount();
-
-    /**
-     * Returns an estimate of the total capacity of the buffers in this pool.
-     * A buffer's capacity is the number of elements it contains and the value
-     * returned by this method is an estimate of the total capacity of buffers
-     * in the pool in bytes.
-     *
-     * @return  An estimate of the total capacity of the buffers in this pool
-     *          in bytes
-     */
-    long getTotalCapacity();
-
-    /**
-     * Returns an estimate of the memory that the Java virtual machine is using
-     * for this buffer pool. The value returned by this method may differ
-     * from the estimate of the total {@link #getTotalCapacity capacity} of
-     * the buffers in this pool. This difference is explained by alignment,
-     * memory allocator, and other implementation specific reasons.
-     *
-     * @return  An estimate of the memory that the Java virtual machine is using
-     *          for this buffer pool in bytes, or {@code -1L} if an estimate of
-     *          the memory usage is not available
-     */
-    long getMemoryUsed();
-}
diff --git a/ojluni/src/main/java/java/lang/management/ClassLoadingMXBean.java b/ojluni/src/main/java/java/lang/management/ClassLoadingMXBean.java
deleted file mode 100755
index e111b85..0000000
--- a/ojluni/src/main/java/java/lang/management/ClassLoadingMXBean.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package java.lang.management;
-
-/**
- * The management interface for the class loading system of
- * the Java virtual machine.
- *
- * <p> A Java virtual machine has a single instance of the implementation
- * class of this interface.  This instance implementing this interface is
- * an <a href="ManagementFactory.html#MXBean">MXBean</a>
- * that can be obtained by calling
- * the {@link ManagementFactory#getClassLoadingMXBean} method or
- * from the {@link ManagementFactory#getPlatformMBeanServer
- * platform <tt>MBeanServer</tt>}.
- *
- * <p>The <tt>ObjectName</tt> for uniquely identifying the MXBean for
- * the class loading system within an <tt>MBeanServer</tt> is:
- * <blockquote>
- * {@link ManagementFactory#CLASS_LOADING_MXBEAN_NAME
- *        <tt>java.lang:type=ClassLoading</tt>}
- * </blockquote>
- *
- * It can be obtained by calling the
- * {@link PlatformManagedObject#getObjectName} method.
- *
- * @see ManagementFactory#getPlatformMXBeans(Class)
- * @see <a href="../../../javax/management/package-summary.html">
- *      JMX Specification.</a>
- * @see <a href="package-summary.html#examples">
- *      Ways to Access MXBeans</a>
- *
- * @author  Mandy Chung
- * @since   1.5
- */
-public interface ClassLoadingMXBean extends PlatformManagedObject {
-
-    /**
-     * Returns the total number of classes that have been loaded since
-     * the Java virtual machine has started execution.
-     *
-     * @return the total number of classes loaded.
-     *
-     */
-    public long getTotalLoadedClassCount();
-
-    /**
-     * Returns the number of classes that are currently loaded in the
-     * Java virtual machine.
-     *
-     * @return the number of currently loaded classes.
-     */
-    public int getLoadedClassCount();
-
-    /**
-     * Returns the total number of classes unloaded since the Java virtual machine
-     * has started execution.
-     *
-     * @return the total number of unloaded classes.
-     */
-    public long getUnloadedClassCount();
-
-    /**
-     * Tests if the verbose output for the class loading system is enabled.
-     *
-     * @return <tt>true</tt> if the verbose output for the class loading
-     * system is enabled; <tt>false</tt> otherwise.
-     */
-    public boolean isVerbose();
-
-    /**
-     * Enables or disables the verbose output for the class loading
-     * system.  The verbose output information and the output stream
-     * to which the verbose information is emitted are implementation
-     * dependent.  Typically, a Java virtual machine implementation
-     * prints a message each time a class file is loaded.
-     *
-     * <p>This method can be called by multiple threads concurrently.
-     * Each invocation of this method enables or disables the verbose
-     * output globally.
-     *
-     * @param value <tt>true</tt> to enable the verbose output;
-     *              <tt>false</tt> to disable.
-     *
-     * @exception  java.lang.SecurityException if a security manager
-     *             exists and the caller does not have
-     *             ManagementPermission("control").
-     */
-    public void setVerbose(boolean value);
-
-}
diff --git a/ojluni/src/main/java/java/lang/management/CompilationMXBean.java b/ojluni/src/main/java/java/lang/management/CompilationMXBean.java
deleted file mode 100755
index 693beae..0000000
--- a/ojluni/src/main/java/java/lang/management/CompilationMXBean.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package java.lang.management;
-
-/**
- * The management interface for the compilation system of
- * the Java virtual machine.
- *
- * <p> A Java virtual machine has a single instance of the implementation
- * class of this interface.  This instance implementing this interface is
- * an <a href="ManagementFactory.html#MXBean">MXBean</a>
- * that can be obtained by calling
- * the {@link ManagementFactory#getCompilationMXBean} method or
- * from the {@link ManagementFactory#getPlatformMBeanServer
- * platform <tt>MBeanServer</tt>} method.
- *
- * <p>The <tt>ObjectName</tt> for uniquely identifying the MXBean for
- * the compilation system within an MBeanServer is:
- * <blockquote>
- *  {@link ManagementFactory#COMPILATION_MXBEAN_NAME
- *         <tt>java.lang:type=Compilation</tt>}
- * </blockquote>
- *
- * It can be obtained by calling the
- * {@link PlatformManagedObject#getObjectName} method.
- *
- * @see ManagementFactory#getPlatformMXBeans(Class)
- * @see <a href="../../../javax/management/package-summary.html">
- *      JMX Specification.</a>
- * @see <a href="package-summary.html#examples">
- *      Ways to Access MXBeans</a>
- *
- * @author  Mandy Chung
- * @since   1.5
- */
-public interface CompilationMXBean extends PlatformManagedObject {
-    /**
-     * Returns the name of the Just-in-time (JIT) compiler.
-     *
-     * @return the name of the JIT compiler.
-     */
-    public java.lang.String    getName();
-
-    /**
-     * Tests if the Java virtual machine supports the monitoring of
-     * compilation time.
-     *
-     * @return <tt>true</tt> if the monitoring of compilation time is
-     * supported ; <tt>false</tt> otherwise.
-     */
-    public boolean isCompilationTimeMonitoringSupported();
-
-    /**
-     * Returns the approximate accumlated elapsed time (in milliseconds)
-     * spent in compilation.
-     * If multiple threads are used for compilation, this value is
-     * summation of the approximate time that each thread spent in compilation.
-     *
-     * <p>This method is optionally supported by the platform.
-     * A Java virtual machine implementation may not support the compilation
-     * time monitoring. The {@link #isCompilationTimeMonitoringSupported}
-     * method can be used to determine if the Java virtual machine
-     * supports this operation.
-     *
-     * <p> This value does not indicate the level of performance of
-     * the Java virtual machine and is not intended for performance comparisons
-     * of different virtual machine implementations.
-     * The implementations may have different definitions and different
-     * measurements of the compilation time.
-     *
-     * @return Compilation time in milliseconds
-     * @throws java.lang.UnsupportedOperationException if the Java
-     * virtual machine does not support
-     * this operation.
-     *
-     */
-    public long                getTotalCompilationTime();
-}
diff --git a/ojluni/src/main/java/java/lang/management/GarbageCollectorMXBean.java b/ojluni/src/main/java/java/lang/management/GarbageCollectorMXBean.java
deleted file mode 100755
index 0bf642e..0000000
--- a/ojluni/src/main/java/java/lang/management/GarbageCollectorMXBean.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package java.lang.management;
-
-/**
- * The management interface for the garbage collection of
- * the Java virtual machine.  Garbage collection is the process
- * that the Java virtual machine uses to find and reclaim unreachable
- * objects to free up memory space.  A garbage collector is one type of
- * {@link MemoryManagerMXBean memory manager}.
- *
- * <p> A Java virtual machine may have one or more instances of
- * the implementation class of this interface.
- * An instance implementing this interface is
- * an <a href="ManagementFactory.html#MXBean">MXBean</a>
- * that can be obtained by calling
- * the {@link ManagementFactory#getGarbageCollectorMXBeans} method or
- * from the {@link ManagementFactory#getPlatformMBeanServer
- * platform <tt>MBeanServer</tt>} method.
- *
- * <p>The <tt>ObjectName</tt> for uniquely identifying the MXBean for
- * a garbage collector within an MBeanServer is:
- * <blockquote>
- *   {@link ManagementFactory#GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE
- *    <tt>java.lang:type=GarbageCollector</tt>}<tt>,name=</tt><i>collector's name</i>
- * </blockquote>
- *
- * It can be obtained by calling the
- * {@link PlatformManagedObject#getObjectName} method.
- *
- * A platform usually includes additional platform-dependent information
- * specific to a garbage collection algorithm for monitoring.
- *
- * @see ManagementFactory#getPlatformMXBeans(Class)
- * @see MemoryMXBean
- *
- * @see <a href="../../../javax/management/package-summary.html">
- *      JMX Specification.</a>
- * @see <a href="package-summary.html#examples">
- *      Ways to Access MXBeans</a>
- *
- * @author  Mandy Chung
- * @since   1.5
- */
-public interface GarbageCollectorMXBean extends MemoryManagerMXBean {
-    /**
-     * Returns the total number of collections that have occurred.
-     * This method returns <tt>-1</tt> if the collection count is undefined for
-     * this collector.
-     *
-     * @return the total number of collections that have occurred.
-     */
-    public long getCollectionCount();
-
-    /**
-     * Returns the approximate accumulated collection elapsed time
-     * in milliseconds.  This method returns <tt>-1</tt> if the collection
-     * elapsed time is undefined for this collector.
-     * <p>
-     * The Java virtual machine implementation may use a high resolution
-     * timer to measure the elapsed time.  This method may return the
-     * same value even if the collection count has been incremented
-     * if the collection elapsed time is very short.
-     *
-     * @return the approximate accumulated collection elapsed time
-     * in milliseconds.
-     */
-    public long getCollectionTime();
-
-
-}
diff --git a/ojluni/src/main/java/java/lang/management/LockInfo.java b/ojluni/src/main/java/java/lang/management/LockInfo.java
deleted file mode 100755
index b8c2fb5..0000000
--- a/ojluni/src/main/java/java/lang/management/LockInfo.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-package java.lang.management;
-
-import javax.management.openmbean.CompositeData;
-import java.util.concurrent.locks.*;
-import java.beans.ConstructorProperties;
-
-/**
- * Information about a <em>lock</em>.  A lock can be a built-in object monitor,
- * an <em>ownable synchronizer</em>, or the {@link Condition Condition}
- * object associated with synchronizers.
- * <p>
- * <a name="OwnableSynchronizer">An ownable synchronizer</a> is
- * a synchronizer that may be exclusively owned by a thread and uses
- * {@link AbstractOwnableSynchronizer AbstractOwnableSynchronizer}
- * (or its subclass) to implement its synchronization property.
- * {@link ReentrantLock ReentrantLock} and
- * {@link ReentrantReadWriteLock ReentrantReadWriteLock} are
- * two examples of ownable synchronizers provided by the platform.
- *
- * <h4><a name="MappedType">MXBean Mapping</a></h4>
- * <tt>LockInfo</tt> is mapped to a {@link CompositeData CompositeData}
- * as specified in the <a href="../../../javax/management/MXBean.html#mapping-rules">
- * type mapping rules</a> of {@linkplain javax.management.MXBean MXBeans}.
- *
- * @see java.util.concurrent.locks.AbstractOwnableSynchronizer
- * @see java.util.concurrent.locks.Condition
- *
- * @author  Mandy Chung
- * @since   1.6
- */
-
-public class LockInfo {
-
-    private String className;
-    private int    identityHashCode;
-
-    /**
-     * Constructs a <tt>LockInfo</tt> object.
-     *
-     * @param className the fully qualified name of the class of the lock object.
-     * @param identityHashCode the {@link System#identityHashCode
-     *                         identity hash code} of the lock object.
-     */
-    @ConstructorProperties({"className", "identityHashCode"})
-    public LockInfo(String className, int identityHashCode) {
-        if (className == null) {
-            throw new NullPointerException("Parameter className cannot be null");
-        }
-        this.className = className;
-        this.identityHashCode = identityHashCode;
-    }
-
-    /**
-     * package-private constructors
-     */
-    LockInfo(Object lock) {
-        this.className = lock.getClass().getName();
-        this.identityHashCode = System.identityHashCode(lock);
-    }
-
-    /**
-     * Returns the fully qualified name of the class of the lock object.
-     *
-     * @return the fully qualified name of the class of the lock object.
-     */
-    public String getClassName() {
-        return className;
-    }
-
-    /**
-     * Returns the identity hash code of the lock object
-     * returned from the {@link System#identityHashCode} method.
-     *
-     * @return the identity hash code of the lock object.
-     */
-    public int getIdentityHashCode() {
-        return identityHashCode;
-    }
-
-    /**
-     * Returns a string representation of a lock.  The returned
-     * string representation consists of the name of the class of the
-     * lock object, the at-sign character `@', and the unsigned
-     * hexadecimal representation of the <em>identity</em> hash code
-     * of the object.  This method returns a string equals to the value of:
-     * <blockquote>
-     * <pre>
-     * lock.getClass().getName() + '@' + Integer.toHexString(System.identityHashCode(lock))
-     * </pre></blockquote>
-     * where <tt>lock</tt> is the lock object.
-     *
-     * @return the string representation of a lock.
-     */
-    public String toString() {
-        return className + '@' + Integer.toHexString(identityHashCode);
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/management/ManagementFactory.java b/ojluni/src/main/java/java/lang/management/ManagementFactory.java
deleted file mode 100755
index 25125b5..0000000
--- a/ojluni/src/main/java/java/lang/management/ManagementFactory.java
+++ /dev/null
@@ -1,828 +0,0 @@
-/*
- * Copyright (c) 2003, 2012, 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.
- */
-
-package java.lang.management;
-import javax.management.DynamicMBean;
-import javax.management.MBeanServer;
-import javax.management.MBeanServerConnection;
-import javax.management.MBeanServerFactory;
-import javax.management.MBeanServerPermission;
-import javax.management.NotificationEmitter;
-import javax.management.ObjectInstance;
-import javax.management.ObjectName;
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.InstanceNotFoundException;
-import javax.management.MalformedObjectNameException;
-import javax.management.MBeanRegistrationException;
-import javax.management.NotCompliantMBeanException;
-import javax.management.StandardEmitterMBean;
-import javax.management.StandardMBean;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-import java.util.HashSet;
-import java.security.AccessController;
-import java.security.Permission;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import javax.management.JMX;
-import sun.management.ManagementFactoryHelper;
-
-/**
- * The {@code ManagementFactory} class is a factory class for getting
- * managed beans for the Java platform.
- * This class consists of static methods each of which returns
- * one or more <i>platform MXBeans</i> representing
- * the management interface of a component of the Java virtual
- * machine.
- * <p>
- * <h4><a name="MXBean">Platform MXBeans</a></h4>
- * <p>
- * A platform MXBean is a <i>managed bean</i> that
- * conforms to the <a href="../../../javax/management/package-summary.html">JMX</a>
- * Instrumentation Specification and only uses a set of basic data types.
- * A JMX management application and the {@linkplain
- * #getPlatformMBeanServer platform MBeanServer}
- * can interoperate without requiring classes for MXBean specific
- * data types.
- * The data types being transmitted between the JMX connector
- * server and the connector client are
- * {@linkplain javax.management.openmbean.OpenType open types}
- * and this allows interoperation across versions.
- * See <a href="../../../javax/management/MXBean.html#MXBean-spec">
- * the specification of MXBeans</a> for details.
- *
- * <a name="MXBeanNames"></a>
- * <p>Each platform MXBean is a {@link PlatformManagedObject}
- * and it has a unique
- * {@link javax.management.ObjectName ObjectName} for
- * registration in the platform {@code MBeanServer} as returned by
- * by the {@link PlatformManagedObject#getObjectName getObjectName}
- * method.
- *
- * <p>
- * An application can access a platform MXBean in the following ways:
- * <h5>1. Direct access to an MXBean interface</h5>
- * <blockquote>
- * <ul>
- *     <li>Get an MXBean instance by calling the
- *         {@link #getPlatformMXBean(Class) getPlatformMXBean} or
- *         {@link #getPlatformMXBeans(Class) getPlatformMXBeans} method
- *         and access the MXBean locally in the running
- *         virtual machine.
- *         </li>
- *     <li>Construct an MXBean proxy instance that forwards the
- *         method calls to a given {@link MBeanServer MBeanServer} by calling
- *         the {@link #getPlatformMXBean(MBeanServerConnection, Class)} or
- *         {@link #getPlatformMXBeans(MBeanServerConnection, Class)} method.
- *         The {@link #newPlatformMXBeanProxy newPlatformMXBeanProxy} method
- *         can also be used to construct an MXBean proxy instance of
- *         a given {@code ObjectName}.
- *         A proxy is typically constructed to remotely access
- *         an MXBean of another running virtual machine.
- *         </li>
- * </ul>
- * <h5>2. Indirect access to an MXBean interface via MBeanServer</h5>
- * <ul>
- *     <li>Go through the platform {@code MBeanServer} to access MXBeans
- *         locally or a specific <tt>MBeanServerConnection</tt> to access
- *         MXBeans remotely.
- *         The attributes and operations of an MXBean use only
- *         <em>JMX open types</em> which include basic data types,
- *         {@link javax.management.openmbean.CompositeData CompositeData},
- *         and {@link javax.management.openmbean.TabularData TabularData}
- *         defined in
- *         {@link javax.management.openmbean.OpenType OpenType}.
- *         The mapping is specified in
- *         the {@linkplain javax.management.MXBean MXBean} specification
- *         for details.
- *        </li>
- * </ul>
- * </blockquote>
- *
- * <p>
- * The {@link #getPlatformManagementInterfaces getPlatformManagementInterfaces}
- * method returns all management interfaces supported in the Java virtual machine
- * including the standard management interfaces listed in the tables
- * below as well as the management interfaces extended by the JDK implementation.
- * <p>
- * A Java virtual machine has a single instance of the following management
- * interfaces:
- *
- * <blockquote>
- * <table border>
- * <tr>
- * <th>Management Interface</th>
- * <th>ObjectName</th>
- * </tr>
- * <tr>
- * <td> {@link ClassLoadingMXBean} </td>
- * <td> {@link #CLASS_LOADING_MXBEAN_NAME
- *             java.lang:type=ClassLoading}</td>
- * </tr>
- * <tr>
- * <td> {@link MemoryMXBean} </td>
- * <td> {@link #MEMORY_MXBEAN_NAME
- *             java.lang:type=Memory}</td>
- * </tr>
- * <tr>
- * <td> {@link ThreadMXBean} </td>
- * <td> {@link #THREAD_MXBEAN_NAME
- *             java.lang:type=Threading}</td>
- * </tr>
- * <tr>
- * <td> {@link RuntimeMXBean} </td>
- * <td> {@link #RUNTIME_MXBEAN_NAME
- *             java.lang:type=Runtime}</td>
- * </tr>
- * <tr>
- * <td> {@link OperatingSystemMXBean} </td>
- * <td> {@link #OPERATING_SYSTEM_MXBEAN_NAME
- *             java.lang:type=OperatingSystem}</td>
- * </tr>
- * <tr>
- * <td> {@link PlatformLoggingMXBean} </td>
- * <td> {@link java.util.logging.LogManager#LOGGING_MXBEAN_NAME
- *             java.util.logging:type=Logging}</td>
- * </tr>
- * </table>
- * </blockquote>
- *
- * <p>
- * A Java virtual machine has zero or a single instance of
- * the following management interfaces.
- *
- * <blockquote>
- * <table border>
- * <tr>
- * <th>Management Interface</th>
- * <th>ObjectName</th>
- * </tr>
- * <tr>
- * <td> {@link CompilationMXBean} </td>
- * <td> {@link #COMPILATION_MXBEAN_NAME
- *             java.lang:type=Compilation}</td>
- * </tr>
- * </table>
- * </blockquote>
- *
- * <p>
- * A Java virtual machine may have one or more instances of the following
- * management interfaces.
- * <blockquote>
- * <table border>
- * <tr>
- * <th>Management Interface</th>
- * <th>ObjectName</th>
- * </tr>
- * <tr>
- * <td> {@link GarbageCollectorMXBean} </td>
- * <td> {@link #GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE
- *             java.lang:type=GarbageCollector}<tt>,name=</tt><i>collector's name</i></td>
- * </tr>
- * <tr>
- * <td> {@link MemoryManagerMXBean} </td>
- * <td> {@link #MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE
- *             java.lang:type=MemoryManager}<tt>,name=</tt><i>manager's name</i></td>
- * </tr>
- * <tr>
- * <td> {@link MemoryPoolMXBean} </td>
- * <td> {@link #MEMORY_POOL_MXBEAN_DOMAIN_TYPE
- *             java.lang:type=MemoryPool}<tt>,name=</tt><i>pool's name</i></td>
- * </tr>
- * <tr>
- * <td> {@link BufferPoolMXBean} </td>
- * <td> {@code java.nio:type=BufferPool,name=}<i>pool name</i></td>
- * </tr>
- * </table>
- * </blockquote>
- *
- * @see <a href="../../../javax/management/package-summary.html">
- *      JMX Specification</a>
- * @see <a href="package-summary.html#examples">
- *      Ways to Access Management Metrics</a>
- * @see javax.management.MXBean
- *
- * @author  Mandy Chung
- * @since   1.5
- */
-public class ManagementFactory {
-    // A class with only static fields and methods.
-    private ManagementFactory() {};
-
-    /**
-     * String representation of the
-     * <tt>ObjectName</tt> for the {@link ClassLoadingMXBean}.
-     */
-    public final static String CLASS_LOADING_MXBEAN_NAME =
-        "java.lang:type=ClassLoading";
-
-    /**
-     * String representation of the
-     * <tt>ObjectName</tt> for the {@link CompilationMXBean}.
-     */
-    public final static String COMPILATION_MXBEAN_NAME =
-        "java.lang:type=Compilation";
-
-    /**
-     * String representation of the
-     * <tt>ObjectName</tt> for the {@link MemoryMXBean}.
-     */
-    public final static String MEMORY_MXBEAN_NAME =
-        "java.lang:type=Memory";
-
-    /**
-     * String representation of the
-     * <tt>ObjectName</tt> for the {@link OperatingSystemMXBean}.
-     */
-    public final static String OPERATING_SYSTEM_MXBEAN_NAME =
-        "java.lang:type=OperatingSystem";
-
-    /**
-     * String representation of the
-     * <tt>ObjectName</tt> for the {@link RuntimeMXBean}.
-     */
-    public final static String RUNTIME_MXBEAN_NAME =
-        "java.lang:type=Runtime";
-
-    /**
-     * String representation of the
-     * <tt>ObjectName</tt> for the {@link ThreadMXBean}.
-     */
-    public final static String THREAD_MXBEAN_NAME =
-        "java.lang:type=Threading";
-
-    /**
-     * The domain name and the type key property in
-     * the <tt>ObjectName</tt> for a {@link GarbageCollectorMXBean}.
-     * The unique <tt>ObjectName</tt> for a <tt>GarbageCollectorMXBean</tt>
-     * can be formed by appending this string with
-     * "<tt>,name=</tt><i>collector's name</i>".
-     */
-    public final static String GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE =
-        "java.lang:type=GarbageCollector";
-
-    /**
-     * The domain name and the type key property in
-     * the <tt>ObjectName</tt> for a {@link MemoryManagerMXBean}.
-     * The unique <tt>ObjectName</tt> for a <tt>MemoryManagerMXBean</tt>
-     * can be formed by appending this string with
-     * "<tt>,name=</tt><i>manager's name</i>".
-     */
-    public final static String MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE=
-        "java.lang:type=MemoryManager";
-
-    /**
-     * The domain name and the type key property in
-     * the <tt>ObjectName</tt> for a {@link MemoryPoolMXBean}.
-     * The unique <tt>ObjectName</tt> for a <tt>MemoryPoolMXBean</tt>
-     * can be formed by appending this string with
-     * <tt>,name=</tt><i>pool's name</i>.
-     */
-    public final static String MEMORY_POOL_MXBEAN_DOMAIN_TYPE=
-        "java.lang:type=MemoryPool";
-
-    /**
-     * Returns the managed bean for the class loading system of
-     * the Java virtual machine.
-     *
-     * @return a {@link ClassLoadingMXBean} object for
-     * the Java virtual machine.
-     */
-    public static ClassLoadingMXBean getClassLoadingMXBean() {
-        return ManagementFactoryHelper.getClassLoadingMXBean();
-    }
-
-    /**
-     * Returns the managed bean for the memory system of
-     * the Java virtual machine.
-     *
-     * @return a {@link MemoryMXBean} object for the Java virtual machine.
-     */
-    public static MemoryMXBean getMemoryMXBean() {
-        return ManagementFactoryHelper.getMemoryMXBean();
-    }
-
-    /**
-     * Returns the managed bean for the thread system of
-     * the Java virtual machine.
-     *
-     * @return a {@link ThreadMXBean} object for the Java virtual machine.
-     */
-    public static ThreadMXBean getThreadMXBean() {
-        return ManagementFactoryHelper.getThreadMXBean();
-    }
-
-    /**
-     * Returns the managed bean for the runtime system of
-     * the Java virtual machine.
-     *
-     * @return a {@link RuntimeMXBean} object for the Java virtual machine.
-
-     */
-    public static RuntimeMXBean getRuntimeMXBean() {
-        return ManagementFactoryHelper.getRuntimeMXBean();
-    }
-
-    /**
-     * Returns the managed bean for the compilation system of
-     * the Java virtual machine.  This method returns <tt>null</tt>
-     * if the Java virtual machine has no compilation system.
-     *
-     * @return a {@link CompilationMXBean} object for the Java virtual
-     *   machine or <tt>null</tt> if the Java virtual machine has
-     *   no compilation system.
-     */
-    public static CompilationMXBean getCompilationMXBean() {
-        return ManagementFactoryHelper.getCompilationMXBean();
-    }
-
-    /**
-     * Returns the managed bean for the operating system on which
-     * the Java virtual machine is running.
-     *
-     * @return an {@link OperatingSystemMXBean} object for
-     * the Java virtual machine.
-     */
-    public static OperatingSystemMXBean getOperatingSystemMXBean() {
-        return ManagementFactoryHelper.getOperatingSystemMXBean();
-    }
-
-    /**
-     * Returns a list of {@link MemoryPoolMXBean} objects in the
-     * Java virtual machine.
-     * The Java virtual machine can have one or more memory pools.
-     * It may add or remove memory pools during execution.
-     *
-     * @return a list of <tt>MemoryPoolMXBean</tt> objects.
-     *
-     */
-    public static List<MemoryPoolMXBean> getMemoryPoolMXBeans() {
-        return ManagementFactoryHelper.getMemoryPoolMXBeans();
-    }
-
-    /**
-     * Returns a list of {@link MemoryManagerMXBean} objects
-     * in the Java virtual machine.
-     * The Java virtual machine can have one or more memory managers.
-     * It may add or remove memory managers during execution.
-     *
-     * @return a list of <tt>MemoryManagerMXBean</tt> objects.
-     *
-     */
-    public static List<MemoryManagerMXBean> getMemoryManagerMXBeans() {
-        return ManagementFactoryHelper.getMemoryManagerMXBeans();
-    }
-
-
-    /**
-     * Returns a list of {@link GarbageCollectorMXBean} objects
-     * in the Java virtual machine.
-     * The Java virtual machine may have one or more
-     * <tt>GarbageCollectorMXBean</tt> objects.
-     * It may add or remove <tt>GarbageCollectorMXBean</tt>
-     * during execution.
-     *
-     * @return a list of <tt>GarbageCollectorMXBean</tt> objects.
-     *
-     */
-    public static List<GarbageCollectorMXBean> getGarbageCollectorMXBeans() {
-        return ManagementFactoryHelper.getGarbageCollectorMXBeans();
-    }
-
-    private static MBeanServer platformMBeanServer;
-    /**
-     * Returns the platform {@link javax.management.MBeanServer MBeanServer}.
-     * On the first call to this method, it first creates the platform
-     * {@code MBeanServer} by calling the
-     * {@link javax.management.MBeanServerFactory#createMBeanServer
-     * MBeanServerFactory.createMBeanServer}
-     * method and registers each platform MXBean in this platform
-     * {@code MBeanServer} with its
-     * {@link PlatformManagedObject#getObjectName ObjectName}.
-     * This method, in subsequent calls, will simply return the
-     * initially created platform {@code MBeanServer}.
-     * <p>
-     * MXBeans that get created and destroyed dynamically, for example,
-     * memory {@link MemoryPoolMXBean pools} and
-     * {@link MemoryManagerMXBean managers},
-     * will automatically be registered and deregistered into the platform
-     * {@code MBeanServer}.
-     * <p>
-     * If the system property {@code javax.management.builder.initial}
-     * is set, the platform {@code MBeanServer} creation will be done
-     * by the specified {@link javax.management.MBeanServerBuilder}.
-     * <p>
-     * It is recommended that this platform MBeanServer also be used
-     * to register other application managed beans
-     * besides the platform MXBeans.
-     * This will allow all MBeans to be published through the same
-     * {@code MBeanServer} and hence allow for easier network publishing
-     * and discovery.
-     * Name conflicts with the platform MXBeans should be avoided.
-     *
-     * @return the platform {@code MBeanServer}; the platform
-     *         MXBeans are registered into the platform {@code MBeanServer}
-     *         at the first time this method is called.
-     *
-     * @exception SecurityException if there is a security manager
-     * and the caller does not have the permission required by
-     * {@link javax.management.MBeanServerFactory#createMBeanServer}.
-     *
-     * @see javax.management.MBeanServerFactory
-     * @see javax.management.MBeanServerFactory#createMBeanServer
-     */
-    public static synchronized MBeanServer getPlatformMBeanServer() {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            Permission perm = new MBeanServerPermission("createMBeanServer");
-            sm.checkPermission(perm);
-        }
-
-        if (platformMBeanServer == null) {
-            platformMBeanServer = MBeanServerFactory.createMBeanServer();
-            for (PlatformComponent pc : PlatformComponent.values()) {
-                List<? extends PlatformManagedObject> list =
-                    pc.getMXBeans(pc.getMXBeanInterface());
-                for (PlatformManagedObject o : list) {
-                    // Each PlatformComponent represents one management
-                    // interface. Some MXBean may extend another one.
-                    // The MXBean instances for one platform component
-                    // (returned by pc.getMXBeans()) might be also
-                    // the MXBean instances for another platform component.
-                    // e.g. com.sun.management.GarbageCollectorMXBean
-                    //
-                    // So need to check if an MXBean instance is registered
-                    // before registering into the platform MBeanServer
-                    if (!platformMBeanServer.isRegistered(o.getObjectName())) {
-                        addMXBean(platformMBeanServer, o);
-                    }
-                }
-            }
-        }
-        return platformMBeanServer;
-    }
-
-    /**
-     * Returns a proxy for a platform MXBean interface of a
-     * given <a href="#MXBeanNames">MXBean name</a>
-     * that forwards its method calls through the given
-     * <tt>MBeanServerConnection</tt>.
-     *
-     * <p>This method is equivalent to:
-     * <blockquote>
-     * {@link java.lang.reflect.Proxy#newProxyInstance
-     *        Proxy.newProxyInstance}<tt>(mxbeanInterface.getClassLoader(),
-     *        new Class[] { mxbeanInterface }, handler)</tt>
-     * </blockquote>
-     *
-     * where <tt>handler</tt> is an {@link java.lang.reflect.InvocationHandler
-     * InvocationHandler} to which method invocations to the MXBean interface
-     * are dispatched. This <tt>handler</tt> converts an input parameter
-     * from an MXBean data type to its mapped open type before forwarding
-     * to the <tt>MBeanServer</tt> and converts a return value from
-     * an MXBean method call through the <tt>MBeanServer</tt>
-     * from an open type to the corresponding return type declared in
-     * the MXBean interface.
-     *
-     * <p>
-     * If the MXBean is a notification emitter (i.e.,
-     * it implements
-     * {@link javax.management.NotificationEmitter NotificationEmitter}),
-     * both the <tt>mxbeanInterface</tt> and <tt>NotificationEmitter</tt>
-     * will be implemented by this proxy.
-     *
-     * <p>
-     * <b>Notes:</b>
-     * <ol>
-     * <li>Using an MXBean proxy is a convenience remote access to
-     * a platform MXBean of a running virtual machine.  All method
-     * calls to the MXBean proxy are forwarded to an
-     * <tt>MBeanServerConnection</tt> where
-     * {@link java.io.IOException IOException} may be thrown
-     * when the communication problem occurs with the connector server.
-     * An application remotely accesses the platform MXBeans using
-     * proxy should prepare to catch <tt>IOException</tt> as if
-     * accessing with the <tt>MBeanServerConnector</tt> interface.</li>
-     *
-     * <li>When a client application is designed to remotely access MXBeans
-     * for a running virtual machine whose version is different than
-     * the version on which the application is running,
-     * it should prepare to catch
-     * {@link java.io.InvalidObjectException InvalidObjectException}
-     * which is thrown when an MXBean proxy receives a name of an
-     * enum constant which is missing in the enum class loaded in
-     * the client application. </li>
-     *
-     * <li>{@link javax.management.MBeanServerInvocationHandler
-     * MBeanServerInvocationHandler} or its
-     * {@link javax.management.MBeanServerInvocationHandler#newProxyInstance
-     * newProxyInstance} method cannot be used to create
-     * a proxy for a platform MXBean. The proxy object created
-     * by <tt>MBeanServerInvocationHandler</tt> does not handle
-     * the properties of the platform MXBeans described in
-     * the <a href="#MXBean">class specification</a>.
-     *</li>
-     * </ol>
-     *
-     * @param connection the <tt>MBeanServerConnection</tt> to forward to.
-     * @param mxbeanName the name of a platform MXBean within
-     * <tt>connection</tt> to forward to. <tt>mxbeanName</tt> must be
-     * in the format of {@link ObjectName ObjectName}.
-     * @param mxbeanInterface the MXBean interface to be implemented
-     * by the proxy.
-     *
-     * @throws IllegalArgumentException if
-     * <ul>
-     * <li><tt>mxbeanName</tt> is not with a valid
-     *     {@link ObjectName ObjectName} format, or</li>
-     * <li>the named MXBean in the <tt>connection</tt> is
-     *     not a MXBean provided by the platform, or</li>
-     * <li>the named MXBean is not registered in the
-     *     <tt>MBeanServerConnection</tt>, or</li>
-     * <li>the named MXBean is not an instance of the given
-     *     <tt>mxbeanInterface</tt></li>
-     * </ul>
-     *
-     * @throws java.io.IOException if a communication problem
-     * occurred when accessing the <tt>MBeanServerConnection</tt>.
-     */
-    public static <T> T
-        newPlatformMXBeanProxy(MBeanServerConnection connection,
-                               String mxbeanName,
-                               Class<T> mxbeanInterface)
-            throws java.io.IOException {
-
-        final Class interfaceClass = mxbeanInterface;
-        // Only allow MXBean interfaces from rt.jar loaded by the
-        // bootstrap class loader
-        final ClassLoader loader =
-            AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
-                public ClassLoader run() {
-                    return interfaceClass.getClassLoader();
-                }
-            });
-        if (loader != null) {
-            throw new IllegalArgumentException(mxbeanName +
-                " is not a platform MXBean");
-        }
-
-        try {
-            final ObjectName objName = new ObjectName(mxbeanName);
-            // skip the isInstanceOf check for LoggingMXBean
-            String intfName = interfaceClass.getName();
-            if (!connection.isInstanceOf(objName, intfName)) {
-                throw new IllegalArgumentException(mxbeanName +
-                    " is not an instance of " + interfaceClass);
-            }
-
-            final Class[] interfaces;
-            // check if the registered MBean is a notification emitter
-            boolean emitter = connection.isInstanceOf(objName, NOTIF_EMITTER);
-
-            // create an MXBean proxy
-            return JMX.newMXBeanProxy(connection, objName, mxbeanInterface,
-                                      emitter);
-        } catch (InstanceNotFoundException|MalformedObjectNameException e) {
-            throw new IllegalArgumentException(e);
-        }
-    }
-
-    /**
-     * Returns the platform MXBean implementing
-     * the given {@code mxbeanInterface} which is specified
-     * to have one single instance in the Java virtual machine.
-     * This method may return {@code null} if the management interface
-     * is not implemented in the Java virtual machine (for example,
-     * a Java virtual machine with no compilation system does not
-     * implement {@link CompilationMXBean});
-     * otherwise, this method is equivalent to calling:
-     * <pre>
-     *    {@link #getPlatformMXBeans(Class)
-     *      getPlatformMXBeans(mxbeanInterface)}.get(0);
-     * </pre>
-     *
-     * @param mxbeanInterface a management interface for a platform
-     *     MXBean with one single instance in the Java virtual machine
-     *     if implemented.
-     *
-     * @return the platform MXBean that implements
-     * {@code mxbeanInterface}, or {@code null} if not exist.
-     *
-     * @throws IllegalArgumentException if {@code mxbeanInterface}
-     * is not a platform management interface or
-     * not a singleton platform MXBean.
-     *
-     * @since 1.7
-     */
-    public static <T extends PlatformManagedObject>
-            T getPlatformMXBean(Class<T> mxbeanInterface) {
-        PlatformComponent pc = PlatformComponent.getPlatformComponent(mxbeanInterface);
-        if (pc == null)
-            throw new IllegalArgumentException(mxbeanInterface.getName() +
-                " is not a platform management interface");
-        if (!pc.isSingleton())
-            throw new IllegalArgumentException(mxbeanInterface.getName() +
-                " can have zero or more than one instances");
-
-        return pc.getSingletonMXBean(mxbeanInterface);
-    }
-
-    /**
-     * Returns the list of platform MXBeans implementing
-     * the given {@code mxbeanInterface} in the Java
-     * virtual machine.
-     * The returned list may contain zero, one, or more instances.
-     * The number of instances in the returned list is defined
-     * in the specification of the given management interface.
-     * The order is undefined and there is no guarantee that
-     * the list returned is in the same order as previous invocations.
-     *
-     * @param mxbeanInterface a management interface for a platform
-     *                        MXBean
-     *
-     * @return the list of platform MXBeans that implement
-     * {@code mxbeanInterface}.
-     *
-     * @throws IllegalArgumentException if {@code mxbeanInterface}
-     * is not a platform management interface.
-     *
-     * @since 1.7
-     */
-    public static <T extends PlatformManagedObject> List<T>
-            getPlatformMXBeans(Class<T> mxbeanInterface) {
-        PlatformComponent pc = PlatformComponent.getPlatformComponent(mxbeanInterface);
-        if (pc == null)
-            throw new IllegalArgumentException(mxbeanInterface.getName() +
-                " is not a platform management interface");
-        return Collections.unmodifiableList(pc.getMXBeans(mxbeanInterface));
-    }
-
-    /**
-     * Returns the platform MXBean proxy for
-     * {@code mxbeanInterface} which is specified to have one single
-     * instance in a Java virtual machine and the proxy will
-     * forward the method calls through the given {@code MBeanServerConnection}.
-     * This method may return {@code null} if the management interface
-     * is not implemented in the Java virtual machine being monitored
-     * (for example, a Java virtual machine with no compilation system
-     * does not implement {@link CompilationMXBean});
-     * otherwise, this method is equivalent to calling:
-     * <pre>
-     *     {@link #getPlatformMXBeans(MBeanServerConnection, Class)
-     *        getPlatformMXBeans(connection, mxbeanInterface)}.get(0);
-     * </pre>
-     *
-     * @param connection the {@code MBeanServerConnection} to forward to.
-     * @param mxbeanInterface a management interface for a platform
-     *     MXBean with one single instance in the Java virtual machine
-     *     being monitored, if implemented.
-     *
-     * @return the platform MXBean proxy for
-     * forwarding the method calls of the {@code mxbeanInterface}
-     * through the given {@code MBeanServerConnection},
-     * or {@code null} if not exist.
-     *
-     * @throws IllegalArgumentException if {@code mxbeanInterface}
-     * is not a platform management interface or
-     * not a singleton platform MXBean.
-     * @throws java.io.IOException if a communication problem
-     * occurred when accessing the {@code MBeanServerConnection}.
-     *
-     * @see #newPlatformMXBeanProxy
-     * @since 1.7
-     */
-    public static <T extends PlatformManagedObject>
-            T getPlatformMXBean(MBeanServerConnection connection,
-                                Class<T> mxbeanInterface)
-        throws java.io.IOException
-    {
-        PlatformComponent pc = PlatformComponent.getPlatformComponent(mxbeanInterface);
-        if (pc == null)
-            throw new IllegalArgumentException(mxbeanInterface.getName() +
-                " is not a platform management interface");
-        if (!pc.isSingleton())
-            throw new IllegalArgumentException(mxbeanInterface.getName() +
-                " can have zero or more than one instances");
-        return pc.getSingletonMXBean(connection, mxbeanInterface);
-    }
-
-    /**
-     * Returns the list of the platform MXBean proxies for
-     * forwarding the method calls of the {@code mxbeanInterface}
-     * through the given {@code MBeanServerConnection}.
-     * The returned list may contain zero, one, or more instances.
-     * The number of instances in the returned list is defined
-     * in the specification of the given management interface.
-     * The order is undefined and there is no guarantee that
-     * the list returned is in the same order as previous invocations.
-     *
-     * @param connection the {@code MBeanServerConnection} to forward to.
-     * @param mxbeanInterface a management interface for a platform
-     *                        MXBean
-     *
-     * @return the list of platform MXBean proxies for
-     * forwarding the method calls of the {@code mxbeanInterface}
-     * through the given {@code MBeanServerConnection}.
-     *
-     * @throws IllegalArgumentException if {@code mxbeanInterface}
-     * is not a platform management interface.
-     *
-     * @throws java.io.IOException if a communication problem
-     * occurred when accessing the {@code MBeanServerConnection}.
-     *
-     * @see #newPlatformMXBeanProxy
-     * @since 1.7
-     */
-    public static <T extends PlatformManagedObject>
-            List<T> getPlatformMXBeans(MBeanServerConnection connection,
-                                       Class<T> mxbeanInterface)
-        throws java.io.IOException
-    {
-        PlatformComponent pc = PlatformComponent.getPlatformComponent(mxbeanInterface);
-        if (pc == null) {
-            throw new IllegalArgumentException(mxbeanInterface.getName() +
-                " is not a platform management interface");
-        }
-        return Collections.unmodifiableList(pc.getMXBeans(connection, mxbeanInterface));
-    }
-
-    /**
-     * Returns the set of {@code Class} objects, subinterface of
-     * {@link PlatformManagedObject}, representing
-     * all management interfaces for
-     * monitoring and managing the Java platform.
-     *
-     * @return the set of {@code Class} objects, subinterface of
-     * {@link PlatformManagedObject} representing
-     * the management interfaces for
-     * monitoring and managing the Java platform.
-     *
-     * @since 1.7
-     */
-    public static Set<Class<? extends PlatformManagedObject>>
-           getPlatformManagementInterfaces()
-    {
-        Set<Class<? extends PlatformManagedObject>> result =
-            new HashSet<>();
-        for (PlatformComponent component: PlatformComponent.values()) {
-            result.add(component.getMXBeanInterface());
-        }
-        return Collections.unmodifiableSet(result);
-    }
-
-    private static final String NOTIF_EMITTER =
-        "javax.management.NotificationEmitter";
-
-    /**
-     * Registers an MXBean.
-     */
-    private static void addMXBean(final MBeanServer mbs, final PlatformManagedObject pmo) {
-        // Make DynamicMBean out of MXBean by wrapping it with a StandardMBean
-        try {
-            AccessController.doPrivileged(new PrivilegedExceptionAction<Void>() {
-                public Void run() throws InstanceAlreadyExistsException,
-                                         MBeanRegistrationException,
-                                         NotCompliantMBeanException {
-                    final DynamicMBean dmbean;
-                    if (pmo instanceof DynamicMBean) {
-                        dmbean = DynamicMBean.class.cast(pmo);
-                    } else if (pmo instanceof NotificationEmitter) {
-                        dmbean = new StandardEmitterMBean(pmo, null, true, (NotificationEmitter) pmo);
-                    } else {
-                        dmbean = new StandardMBean(pmo, null, true);
-                    }
-
-                    mbs.registerMBean(dmbean, pmo.getObjectName());
-                    return null;
-                }
-            });
-        } catch (PrivilegedActionException e) {
-            throw new RuntimeException(e.getException());
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/java/lang/management/ManagementPermission.java b/ojluni/src/main/java/java/lang/management/ManagementPermission.java
deleted file mode 100755
index bf27f1d..0000000
--- a/ojluni/src/main/java/java/lang/management/ManagementPermission.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package java.lang.management;
-
-/**
- * The permission which the SecurityManager will check when code
- * that is running with a SecurityManager calls methods defined
- * in the management interface for the Java platform.
- * <P>
- * The following table
- * provides a summary description of what the permission allows,
- * and discusses the risks of granting code the permission.
- * <P>
- *
- * <table border=1 cellpadding=5 summary="Table shows permission target name, wh
-at the permission allows, and associated risks">
- * <tr>
- * <th>Permission Target Name</th>
- * <th>What the Permission Allows</th>
- * <th>Risks of Allowing this Permission</th>
- * </tr>
- *
- * <tr>
- *   <td>control</td>
- *   <td>Ability to control the runtime characteristics of the Java virtual
- *       machine, for example, setting the -verbose:gc and -verbose:class flag,
- *       setting the threshold of a memory pool, and enabling and disabling
- *       the thread contention monitoring support.
- *   </td>
- *   <td>This allows an attacker to control the runtime characteristics
- *       of the Java virtual machine and cause the system to misbehave.
- *   </td>
- * </tr>
- * <tr>
- *   <td>monitor</td>
- *   <td>Ability to retrieve runtime information about
- *       the Java virtual machine such as thread
- *       stack trace, a list of all loaded class names, and input arguments
- *       to the Java virtual machine.</td>
- *   <td>This allows malicious code to monitor runtime information and
- *       uncover vulnerabilities.</td>
- * </tr>
- *
- * </table>
- *
- * <p>
- * Programmers do not normally create ManagementPermission objects directly.
- * Instead they are created by the security policy code based on reading
- * the security policy file.
- *
- * @author  Mandy Chung
- * @since   1.5
- *
- * @see java.security.BasicPermission
- * @see java.security.Permission
- * @see java.security.Permissions
- * @see java.security.PermissionCollection
- * @see java.lang.SecurityManager
- *
- */
-
-public final class ManagementPermission extends java.security.BasicPermission {
-    private static final long serialVersionUID = 1897496590799378737L;
-
-    /**
-     * Constructs a ManagementPermission with the specified name.
-     *
-     * @param name Permission name. Must be either "monitor" or "control".
-     *
-     * @throws NullPointerException if <code>name</code> is <code>null</code>.
-     * @throws IllegalArgumentException if <code>name</code> is empty or invalid.
-     */
-    public ManagementPermission(String name) {
-        super(name);
-        if (!name.equals("control") && !name.equals("monitor")) {
-            throw new IllegalArgumentException("name: " + name);
-        }
-    }
-
-    /**
-     * Constructs a new ManagementPermission object.
-     *
-     * @param name Permission name. Must be either "monitor" or "control".
-     * @param actions Must be either null or the empty string.
-     *
-     * @throws NullPointerException if <code>name</code> is <code>null</code>.
-     * @throws IllegalArgumentException if <code>name</code> is empty or
-     * if arguments are invalid.
-     */
-    public ManagementPermission(String name, String actions)
-        throws IllegalArgumentException {
-        super(name);
-        if (!name.equals("control") && !name.equals("monitor")) {
-            throw new IllegalArgumentException("name: " + name);
-        }
-        if (actions != null && actions.length() > 0) {
-            throw new IllegalArgumentException("actions: " + actions);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/management/MemoryMXBean.java b/ojluni/src/main/java/java/lang/management/MemoryMXBean.java
deleted file mode 100755
index a187489..0000000
--- a/ojluni/src/main/java/java/lang/management/MemoryMXBean.java
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package java.lang.management;
-
-import javax.management.openmbean.CompositeData;
-
-/**
- * The management interface for the memory system of
- * the Java virtual machine.
- *
- * <p> A Java virtual machine has a single instance of the implementation
- * class of this interface.  This instance implementing this interface is
- * an <a href="ManagementFactory.html#MXBean">MXBean</a>
- * that can be obtained by calling
- * the {@link ManagementFactory#getMemoryMXBean} method or
- * from the {@link ManagementFactory#getPlatformMBeanServer
- * platform <tt>MBeanServer</tt>} method.
- *
- * <p>The <tt>ObjectName</tt> for uniquely identifying the MXBean for
- * the memory system within an MBeanServer is:
- * <blockquote>
- *    {@link ManagementFactory#MEMORY_MXBEAN_NAME
- *           <tt>java.lang:type=Memory</tt>}
- * </blockquote>
- *
- * It can be obtained by calling the
- * {@link PlatformManagedObject#getObjectName} method.
- *
- * <h4> Memory </h4>
- * The memory system of the Java virtual machine manages
- * the following kinds of memory:
- *
- * <h4> 1. Heap </h4>
- * The Java virtual machine has a <i>heap</i> that is the runtime
- * data area from which memory for all class instances and arrays
- * are allocated.  It is created at the Java virtual machine start-up.
- * Heap memory for objects is reclaimed by an automatic memory management
- * system which is known as a <i>garbage collector</i>.
- *
- * <p>The heap may be of a fixed size or may be expanded and shrunk.
- * The memory for the heap does not need to be contiguous.
- *
- * <h4> 2. Non-Heap Memory</h4>
- * The Java virtual machine manages memory other than the heap
- * (referred as <i>non-heap memory</i>).
- *
- * <p> The Java virtual machine has a <i>method area</i> that is shared
- * among all threads.
- * The method area belongs to non-heap memory.  It stores per-class structures
- * such as a runtime constant pool, field and method data, and the code for
- * methods and constructors.  It is created at the Java virtual machine
- * start-up.
- *
- * <p> The method area is logically part of the heap but a Java virtual
- * machine implementation may choose not to either garbage collect
- * or compact it.  Similar to the heap, the method area may be of a
- * fixed size or may be expanded and shrunk.  The memory for the
- * method area does not need to be contiguous.
- *
- * <p>In addition to the method area, a Java virtual machine
- * implementation may require memory for internal processing or
- * optimization which also belongs to non-heap memory.
- * For example, the JIT compiler requires memory for storing the native
- * machine code translated from the Java virtual machine code for
- * high performance.
- *
- * <h4>Memory Pools and Memory Managers</h4>
- * {@link MemoryPoolMXBean Memory pools} and
- * {@link MemoryManagerMXBean memory managers} are the abstract entities
- * that monitor and manage the memory system
- * of the Java virtual machine.
- *
- * <p>A memory pool represents a memory area that the Java virtual machine
- * manages.  The Java virtual machine has at least one memory pool
- * and it may create or remove memory pools during execution.
- * A memory pool can belong to either the heap or the non-heap memory.
- *
- * <p>A memory manager is responsible for managing one or more memory pools.
- * The garbage collector is one type of memory manager responsible
- * for reclaiming memory occupied by unreachable objects.  A Java virtual
- * machine may have one or more memory managers.   It may
- * add or remove memory managers during execution.
- * A memory pool can be managed by more than one memory manager.
- *
- * <h4>Memory Usage Monitoring</h4>
- *
- * Memory usage is a very important monitoring attribute for the memory system.
- * The memory usage, for example, could indicate:
- * <ul>
- *   <li>the memory usage of an application,</li>
- *   <li>the workload being imposed on the automatic memory management system,</li>
- *   <li>potential memory leakage.</li>
- * </ul>
- *
- * <p>
- * The memory usage can be monitored in three ways:
- * <ul>
- *   <li>Polling</li>
- *   <li>Usage Threshold Notification</li>
- *   <li>Collection Usage Threshold Notification</li>
- * </ul>
- *
- * Details are specified in the {@link MemoryPoolMXBean} interface.
- *
- * <p>The memory usage monitoring mechanism is intended for load-balancing
- * or workload distribution use.  For example, an application would stop
- * receiving any new workload when its memory usage exceeds a
- * certain threshold. It is not intended for an application to detect
- * and recover from a low memory condition.
- *
- * <h4>Notifications</h4>
- *
- * <p>This <tt>MemoryMXBean</tt> is a
- * {@link javax.management.NotificationEmitter NotificationEmitter}
- * that emits two types of memory {@link javax.management.Notification
- * notifications} if any one of the memory pools
- * supports a <a href="MemoryPoolMXBean.html#UsageThreshold">usage threshold</a>
- * or a <a href="MemoryPoolMXBean.html#CollectionThreshold">collection usage
- * threshold</a> which can be determined by calling the
- * {@link MemoryPoolMXBean#isUsageThresholdSupported} and
- * {@link MemoryPoolMXBean#isCollectionUsageThresholdSupported} methods.
- * <ul>
- *   <li>{@link MemoryNotificationInfo#MEMORY_THRESHOLD_EXCEEDED
- *       usage threshold exceeded notification} - for notifying that
- *       the memory usage of a memory pool is increased and has reached
- *       or exceeded its
- *       <a href="MemoryPoolMXBean.html#UsageThreshold"> usage threshold</a> value.
- *       </li>
- *   <li>{@link MemoryNotificationInfo#MEMORY_COLLECTION_THRESHOLD_EXCEEDED
- *       collection usage threshold exceeded notification} - for notifying that
- *       the memory usage of a memory pool is greater than or equal to its
- *       <a href="MemoryPoolMXBean.html#CollectionThreshold">
- *       collection usage threshold</a> after the Java virtual machine
- *       has expended effort in recycling unused objects in that
- *       memory pool.</li>
- * </ul>
- *
- * <p>
- * The notification emitted is a {@link javax.management.Notification}
- * instance whose {@link javax.management.Notification#setUserData
- * user data} is set to a {@link CompositeData CompositeData}
- * that represents a {@link MemoryNotificationInfo} object
- * containing information about the memory pool when the notification
- * was constructed. The <tt>CompositeData</tt> contains the attributes
- * as described in {@link MemoryNotificationInfo#from
- * MemoryNotificationInfo}.
- *
- * <hr>
- * <h4>NotificationEmitter</h4>
- * The <tt>MemoryMXBean</tt> object returned by
- * {@link ManagementFactory#getMemoryMXBean} implements
- * the {@link javax.management.NotificationEmitter NotificationEmitter}
- * interface that allows a listener to be registered within the
- * <tt>MemoryMXBean</tt> as a notification listener.
- *
- * Below is an example code that registers a <tt>MyListener</tt> to handle
- * notification emitted by the <tt>MemoryMXBean</tt>.
- *
- * <blockquote><pre>
- * class MyListener implements javax.management.NotificationListener {
- *     public void handleNotification(Notification notif, Object handback) {
- *         // handle notification
- *         ....
- *     }
- * }
- *
- * MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();
- * NotificationEmitter emitter = (NotificationEmitter) mbean;
- * MyListener listener = new MyListener();
- * emitter.addNotificationListener(listener, null, null);
- * </pre></blockquote>
- *
- * @see ManagementFactory#getPlatformMXBeans(Class)
- * @see <a href="../../../javax/management/package-summary.html">
- *      JMX Specification.</a>
- * @see <a href="package-summary.html#examples">
- *      Ways to Access MXBeans</a>
- *
- * @author  Mandy Chung
- * @since   1.5
- */
-public interface MemoryMXBean extends PlatformManagedObject {
-    /**
-     * Returns the approximate number of objects for which
-     * finalization is pending.
-     *
-     * @return the approximate number objects for which finalization
-     * is pending.
-     */
-    public int getObjectPendingFinalizationCount();
-
-    /**
-     * Returns the current memory usage of the heap that
-     * is used for object allocation.  The heap consists
-     * of one or more memory pools.  The <tt>used</tt>
-     * and <tt>committed</tt> size of the returned memory
-     * usage is the sum of those values of all heap memory pools
-     * whereas the <tt>init</tt> and <tt>max</tt> size of the
-     * returned memory usage represents the setting of the heap
-     * memory which may not be the sum of those of all heap
-     * memory pools.
-     * <p>
-     * The amount of used memory in the returned memory usage
-     * is the amount of memory occupied by both live objects
-     * and garbage objects that have not been collected, if any.
-     *
-     * <p>
-     * <b>MBeanServer access</b>:<br>
-     * The mapped type of <tt>MemoryUsage</tt> is
-     * <tt>CompositeData</tt> with attributes as specified in
-     * {@link MemoryUsage#from MemoryUsage}.
-     *
-     * @return a {@link MemoryUsage} object representing
-     * the heap memory usage.
-     */
-    public MemoryUsage getHeapMemoryUsage();
-
-    /**
-     * Returns the current memory usage of non-heap memory that
-     * is used by the Java virtual machine.
-     * The non-heap memory consists of one or more memory pools.
-     * The <tt>used</tt> and <tt>committed</tt> size of the
-     * returned memory usage is the sum of those values of
-     * all non-heap memory pools whereas the <tt>init</tt>
-     * and <tt>max</tt> size of the returned memory usage
-     * represents the setting of the non-heap
-     * memory which may not be the sum of those of all non-heap
-     * memory pools.
-     *
-     * <p>
-     * <b>MBeanServer access</b>:<br>
-     * The mapped type of <tt>MemoryUsage</tt> is
-     * <tt>CompositeData</tt> with attributes as specified in
-     * {@link MemoryUsage#from MemoryUsage}.
-     *
-     * @return a {@link MemoryUsage} object representing
-     * the non-heap memory usage.
-     */
-    public MemoryUsage getNonHeapMemoryUsage();
-
-    /**
-     * Tests if verbose output for the memory system is enabled.
-     *
-     * @return <tt>true</tt> if verbose output for the memory
-     * system is enabled; <tt>false</tt> otherwise.
-     */
-    public boolean isVerbose();
-
-    /**
-     * Enables or disables verbose output for the memory
-     * system.  The verbose output information and the output stream
-     * to which the verbose information is emitted are implementation
-     * dependent.  Typically, a Java virtual machine implementation
-     * prints a message whenever it frees memory at garbage collection.
-     *
-     * <p>
-     * Each invocation of this method enables or disables verbose
-     * output globally.
-     *
-     * @param value <tt>true</tt> to enable verbose output;
-     *              <tt>false</tt> to disable.
-     *
-     * @exception  java.lang.SecurityException if a security manager
-     *             exists and the caller does not have
-     *             ManagementPermission("control").
-     */
-    public void setVerbose(boolean value);
-
-    /**
-     * Runs the garbage collector.
-     * The call <code>gc()</code> is effectively equivalent to the
-     * call:
-     * <blockquote><pre>
-     * System.gc()
-     * </pre></blockquote>
-     *
-     * @see     java.lang.System#gc()
-     */
-    public void gc();
-
-}
diff --git a/ojluni/src/main/java/java/lang/management/MemoryManagerMXBean.java b/ojluni/src/main/java/java/lang/management/MemoryManagerMXBean.java
deleted file mode 100755
index 40b68d3..0000000
--- a/ojluni/src/main/java/java/lang/management/MemoryManagerMXBean.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package java.lang.management;
-
-/**
- * The management interface for a memory manager.
- * A memory manager manages one or more memory pools of the
- * Java virtual machine.
- *
- * <p> A Java virtual machine has one or more memory managers.
- * An instance implementing this interface is
- * an <a href="ManagementFactory.html#MXBean">MXBean</a>
- * that can be obtained by calling
- * the {@link ManagementFactory#getMemoryManagerMXBeans} method or
- * from the {@link ManagementFactory#getPlatformMBeanServer
- * platform <tt>MBeanServer</tt>} method.
- *
- * <p>The <tt>ObjectName</tt> for uniquely identifying the MXBean for
- * a memory manager within an MBeanServer is:
- * <blockquote>
- *   {@link ManagementFactory#MEMORY_MANAGER_MXBEAN_DOMAIN_TYPE
- *    <tt>java.lang:type=MemoryManager</tt>}<tt>,name=</tt><i>manager's name</i>
- * </blockquote>
- *
- * It can be obtained by calling the
- * {@link PlatformManagedObject#getObjectName} method.
- *
- * @see ManagementFactory#getPlatformMXBeans(Class)
- * @see MemoryMXBean
- *
- * @see <a href="../../../javax/management/package-summary.html">
- *      JMX Specification.</a>
- * @see <a href="package-summary.html#examples">
- *      Ways to Access MXBeans</a>
- *
- * @author  Mandy Chung
- * @since   1.5
- */
-public interface MemoryManagerMXBean extends PlatformManagedObject {
-    /**
-     * Returns the name representing this memory manager.
-     *
-     * @return the name of this memory manager.
-     */
-    public String getName();
-
-    /**
-     * Tests if this memory manager is valid in the Java virtual
-     * machine.  A memory manager becomes invalid once the Java virtual
-     * machine removes it from the memory system.
-     *
-     * @return <tt>true</tt> if the memory manager is valid in the
-     *               Java virtual machine;
-     *         <tt>false</tt> otherwise.
-     */
-    public boolean isValid();
-
-    /**
-     * Returns the name of memory pools that this memory manager manages.
-     *
-     * @return an array of <tt>String</tt> objects, each is
-     * the name of a memory pool that this memory manager manages.
-     */
-    public String[] getMemoryPoolNames();
-}
diff --git a/ojluni/src/main/java/java/lang/management/MemoryNotificationInfo.java b/ojluni/src/main/java/java/lang/management/MemoryNotificationInfo.java
deleted file mode 100755
index 3b0b156..0000000
--- a/ojluni/src/main/java/java/lang/management/MemoryNotificationInfo.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.
- */
-
-package java.lang.management;
-import javax.management.openmbean.CompositeData;
-import sun.management.MemoryNotifInfoCompositeData;
-
-/**
- * The information about a memory notification.
- *
- * <p>
- * A memory notification is emitted by {@link MemoryMXBean}
- * when the Java virtual machine detects that the memory usage
- * of a memory pool is exceeding a threshold value.
- * The notification emitted will contain the memory notification
- * information about the detected condition:
- * <ul>
- *   <li>The name of the memory pool.</li>
- *   <li>The memory usage of the memory pool when the notification
- *       was constructed.</li>
- *   <li>The number of times that the memory usage has crossed
- *       a threshold when the notification was constructed.
- *       For usage threshold notifications, this count will be the
- *       {@link MemoryPoolMXBean#getUsageThresholdCount usage threshold
- *       count}.  For collection threshold notifications,
- *       this count will be the
- *       {@link MemoryPoolMXBean#getCollectionUsageThresholdCount
- *       collection usage threshold count}.
- *       </li>
- * </ul>
- *
- * <p>
- * A {@link CompositeData CompositeData} representing
- * the <tt>MemoryNotificationInfo</tt> object
- * is stored in the
- * {@link javax.management.Notification#setUserData user data}
- * of a {@link javax.management.Notification notification}.
- * The {@link #from from} method is provided to convert from
- * a <tt>CompositeData</tt> to a <tt>MemoryNotificationInfo</tt>
- * object. For example:
- *
- * <blockquote><pre>
- *      Notification notif;
- *
- *      // receive the notification emitted by MemoryMXBean and set to notif
- *      ...
- *
- *      String notifType = notif.getType();
- *      if (notifType.equals(MemoryNotificationInfo.MEMORY_THRESHOLD_EXCEEDED) ||
- *          notifType.equals(MemoryNotificationInfo.MEMORY_COLLECTION_THRESHOLD_EXCEEDED)) {
- *          // retrieve the memory notification information
- *          CompositeData cd = (CompositeData) notif.getUserData();
- *          MemoryNotificationInfo info = MemoryNotificationInfo.from(cd);
- *          ....
- *      }
- * </pre></blockquote>
- *
- * <p>
- * The types of notifications emitted by <tt>MemoryMXBean</tt> are:
- * <ul>
- *   <li>A {@link #MEMORY_THRESHOLD_EXCEEDED
- *       usage threshold exceeded notification}.
- *       <br>This notification will be emitted when
- *       the memory usage of a memory pool is increased and has reached
- *       or exceeded its
- *       <a href="MemoryPoolMXBean.html#UsageThreshold"> usage threshold</a> value.
- *       Subsequent crossing of the usage threshold value does not cause
- *       further notification until the memory usage has returned
- *       to become less than the usage threshold value.
- *       <p></li>
- *   <li>A {@link #MEMORY_COLLECTION_THRESHOLD_EXCEEDED
- *       collection usage threshold exceeded notification}.
- *       <br>This notification will be emitted when
- *       the memory usage of a memory pool is greater than or equal to its
- *       <a href="MemoryPoolMXBean.html#CollectionThreshold">
- *       collection usage threshold</a> after the Java virtual machine
- *       has expended effort in recycling unused objects in that
- *       memory pool.</li>
- * </ul>
- *
- * @author  Mandy Chung
- * @since   1.5
- *
- */
-public class MemoryNotificationInfo {
-    private final String poolName;
-    private final MemoryUsage usage;
-    private final long count;
-
-    /**
-     * Notification type denoting that
-     * the memory usage of a memory pool has
-     * reached or exceeded its
-     * <a href="MemoryPoolMXBean.html#UsageThreshold"> usage threshold</a> value.
-     * This notification is emitted by {@link MemoryMXBean}.
-     * Subsequent crossing of the usage threshold value does not cause
-     * further notification until the memory usage has returned
-     * to become less than the usage threshold value.
-     * The value of this notification type is
-     * <tt>java.management.memory.threshold.exceeded</tt>.
-     */
-    public static final String MEMORY_THRESHOLD_EXCEEDED =
-        "java.management.memory.threshold.exceeded";
-
-    /**
-     * Notification type denoting that
-     * the memory usage of a memory pool is greater than or equal to its
-     * <a href="MemoryPoolMXBean.html#CollectionThreshold">
-     * collection usage threshold</a> after the Java virtual machine
-     * has expended effort in recycling unused objects in that
-     * memory pool.
-     * This notification is emitted by {@link MemoryMXBean}.
-     * The value of this notification type is
-     * <tt>java.management.memory.collection.threshold.exceeded</tt>.
-     */
-    public static final String MEMORY_COLLECTION_THRESHOLD_EXCEEDED =
-        "java.management.memory.collection.threshold.exceeded";
-
-    /**
-     * Constructs a <tt>MemoryNotificationInfo</tt> object.
-     *
-     * @param poolName The name of the memory pool which triggers this notification.
-     * @param usage Memory usage of the memory pool.
-     * @param count The threshold crossing count.
-     */
-    public MemoryNotificationInfo(String poolName,
-                                  MemoryUsage usage,
-                                  long count) {
-        if (poolName == null) {
-            throw new NullPointerException("Null poolName");
-        }
-        if (usage == null) {
-            throw new NullPointerException("Null usage");
-        }
-
-        this.poolName = poolName;
-        this.usage = usage;
-        this.count = count;
-    }
-
-    MemoryNotificationInfo(CompositeData cd) {
-        MemoryNotifInfoCompositeData.validateCompositeData(cd);
-
-        this.poolName = MemoryNotifInfoCompositeData.getPoolName(cd);
-        this.usage = MemoryNotifInfoCompositeData.getUsage(cd);
-        this.count = MemoryNotifInfoCompositeData.getCount(cd);
-    }
-
-    /**
-     * Returns the name of the memory pool that triggers this notification.
-     * The memory pool usage has crossed a threshold.
-     *
-     * @return the name of the memory pool that triggers this notification.
-     */
-    public String getPoolName() {
-        return poolName;
-    }
-
-    /**
-     * Returns the memory usage of the memory pool
-     * when this notification was constructed.
-     *
-     * @return the memory usage of the memory pool
-     * when this notification was constructed.
-     */
-    public MemoryUsage getUsage() {
-        return usage;
-    }
-
-    /**
-     * Returns the number of times that the memory usage has crossed
-     * a threshold when the notification was constructed.
-     * For usage threshold notifications, this count will be the
-     * {@link MemoryPoolMXBean#getUsageThresholdCount threshold
-     * count}.  For collection threshold notifications,
-     * this count will be the
-     * {@link MemoryPoolMXBean#getCollectionUsageThresholdCount
-     * collection usage threshold count}.
-     *
-     * @return the number of times that the memory usage has crossed
-     * a threshold when the notification was constructed.
-     */
-    public long getCount() {
-        return count;
-    }
-
-    /**
-     * Returns a <tt>MemoryNotificationInfo</tt> object represented by the
-     * given <tt>CompositeData</tt>.
-     * The given <tt>CompositeData</tt> must contain
-     * the following attributes:
-     * <blockquote>
-     * <table border>
-     * <tr>
-     *   <th align=left>Attribute Name</th>
-     *   <th align=left>Type</th>
-     * </tr>
-     * <tr>
-     *   <td>poolName</td>
-     *   <td><tt>java.lang.String</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>usage</td>
-     *   <td><tt>javax.management.openmbean.CompositeData</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>count</td>
-     *   <td><tt>java.lang.Long</tt></td>
-     * </tr>
-     * </table>
-     * </blockquote>
-     *
-     * @param cd <tt>CompositeData</tt> representing a
-     *           <tt>MemoryNotificationInfo</tt>
-     *
-     * @throws IllegalArgumentException if <tt>cd</tt> does not
-     *   represent a <tt>MemoryNotificationInfo</tt> object.
-     *
-     * @return a <tt>MemoryNotificationInfo</tt> object represented
-     *         by <tt>cd</tt> if <tt>cd</tt> is not <tt>null</tt>;
-     *         <tt>null</tt> otherwise.
-     */
-    public static MemoryNotificationInfo from(CompositeData cd) {
-        if (cd == null) {
-            return null;
-        }
-
-        if (cd instanceof MemoryNotifInfoCompositeData) {
-            return ((MemoryNotifInfoCompositeData) cd).getMemoryNotifInfo();
-        } else {
-            return new MemoryNotificationInfo(cd);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/management/MemoryPoolMXBean.java b/ojluni/src/main/java/java/lang/management/MemoryPoolMXBean.java
deleted file mode 100755
index bcd7c55..0000000
--- a/ojluni/src/main/java/java/lang/management/MemoryPoolMXBean.java
+++ /dev/null
@@ -1,643 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package java.lang.management;
-
-/**
- * The management interface for a memory pool.  A memory pool
- * represents the memory resource managed by the Java virtual machine
- * and is managed by one or more {@link MemoryManagerMXBean memory managers}.
- *
- * <p> A Java virtual machine has one or more instances of the
- * implementation class of this interface.  An instance
- * implementing this interface is
- * an <a href="ManagementFactory.html#MXBean">MXBean</a>
- * that can be obtained by calling
- * the {@link ManagementFactory#getMemoryPoolMXBeans} method or
- * from the {@link ManagementFactory#getPlatformMBeanServer
- * platform <tt>MBeanServer</tt>} method.
- *
- * <p>The <tt>ObjectName</tt> for uniquely identifying the MXBean for
- * a memory pool within an <tt>MBeanServer</tt> is:
- * <blockquote>
- *    {@link ManagementFactory#MEMORY_POOL_MXBEAN_DOMAIN_TYPE
- *    <tt>java.lang:type=MemoryPool</tt>}<tt>,name=</tt><i>pool's name</i>
- * </blockquote>
- *
- * It can be obtained by calling the
- * {@link PlatformManagedObject#getObjectName} method.
- *
- * <h4>Memory Type</h4>
- * <p>The Java virtual machine has a heap for object allocation and also
- * maintains non-heap memory for the method area and the Java virtual
- * machine execution.  The Java virtual machine can have one or more
- * memory pools.  Each memory pool represents a memory area
- * of one of the following types:
- * <ul>
- *   <li>{@link MemoryType#HEAP heap}</li>
- *   <li>{@link MemoryType#NON_HEAP non-heap}</li>
- * </ul>
- *
- * <h4>Memory Usage Monitoring</h4>
- *
- * A memory pool has the following attributes:
- * <ul>
- *   <li><a href="#Usage">Memory usage</a></li>
- *   <li><a href="#PeakUsage">Peak memory usage</a></li>
- *   <li><a href="#UsageThreshold">Usage Threshold</a></li>
- *   <li><a href="#CollectionThreshold">Collection Usage Threshold</a>
- *       (only supported by some <em>garbage-collected</em> memory pools)</li>
- * </ul>
- *
- * <h4><a name="Usage">1. Memory Usage</a></h4>
- *
- * The {@link #getUsage} method provides an estimate
- * of the current usage of a memory pool.
- * For a garbage-collected memory pool, the amount of used memory
- * includes the memory occupied by all objects in the pool
- * including both <em>reachable</em> and <em>unreachable</em> objects.
- *
- * <p>In general, this method is a lightweight operation for getting
- * an approximate memory usage.  For some memory pools, for example,
- * when objects are not packed contiguously, this method may be
- * an expensive operation that requires some computation to determine
- * the current memory usage.  An implementation should document when
- * this is the case.
- *
- * <h4><a name="PeakUsage">2. Peak Memory Usage</a></h4>
- *
- * The Java virtual machine maintains the peak memory usage of a memory
- * pool since the virtual machine was started or the peak was reset.
- * The peak memory usage is returned by the {@link #getPeakUsage} method
- * and reset by calling the {@link #resetPeakUsage} method.
- *
- * <h4><a name="UsageThreshold">3. Usage Threshold</a></h4>
- *
- * Each memory pool has a manageable attribute
- * called the <i>usage threshold</i> which has a default value supplied
- * by the Java virtual machine.  The default value is platform-dependent.
- * The usage threshold can be set via the
- * {@link #setUsageThreshold setUsageThreshold} method.
- * If the threshold is set to a positive value, the usage threshold crossing
- * checking is enabled in this memory pool.
- * If the usage threshold is set to zero, usage
- * threshold crossing checking on this memory pool is disabled.
- * The {@link MemoryPoolMXBean#isUsageThresholdSupported} method can
- * be used to determine if this functionality is supported.
- * <p>
- * A Java virtual machine performs usage threshold crossing checking on a
- * memory pool basis at its best appropriate time, typically,
- * at garbage collection time.
- * Each memory pool maintains a {@link #getUsageThresholdCount
- * usage threshold count} that will get incremented
- * every time when the Java virtual machine
- * detects that the memory pool usage is crossing the threshold.
- * <p>
- * This manageable usage threshold attribute is designed for monitoring the
- * increasing trend of memory usage with low overhead.
- * Usage threshold may not be appropriate for some memory pools.
- * For example, a generational garbage collector, a common garbage collection
- * algorithm used in many Java virtual machine implementations,
- * manages two or more generations segregating objects by age.
- * Most of the objects are allocated in
- * the <em>youngest generation</em> (say a nursery memory pool).
- * The nursery memory pool is designed to be filled up and
- * collecting the nursery memory pool will free most of its memory space
- * since it is expected to contain mostly short-lived objects
- * and mostly are unreachable at garbage collection time.
- * In this case, it is more appropriate for the nursery memory pool
- * not to support a usage threshold.  In addition,
- * if the cost of an object allocation
- * in one memory pool is very low (for example, just atomic pointer exchange),
- * the Java virtual machine would probably not support the usage threshold
- * for that memory pool since the overhead in comparing the usage with
- * the threshold is higher than the cost of object allocation.
- *
- * <p>
- * The memory usage of the system can be monitored using
- * <a href="#Polling">polling</a> or
- * <a href="#ThresholdNotification">threshold notification</a> mechanisms.
- *
- * <ol type="a">
- *   <li><a name="Polling"><b>Polling</b></a>
- *       <p>
- *       An application can continuously monitor its memory usage
- *       by calling either the {@link #getUsage} method for all
- *       memory pools or the {@link #isUsageThresholdExceeded} method
- *       for those memory pools that support a usage threshold.
- *       Below is example code that has a thread delicated for
- *       task distribution and processing.  At every interval,
- *       it will determine if it should receive and process new tasks based
- *       on its memory usage.  If the memory usage exceeds its usage threshold,
- *       it will redistribute all outstanding tasks to other VMs and
- *       stop receiving new tasks until the memory usage returns
- *       below its usage threshold.
- *
- *       <pre>
- *       // Assume the usage threshold is supported for this pool.
- *       // Set the threshold to myThreshold above which no new tasks
- *       // should be taken.
- *       pool.setUsageThreshold(myThreshold);
- *       ....
- *
- *       boolean lowMemory = false;
- *       while (true) {
- *          if (pool.isUsageThresholdExceeded()) {
- *              // potential low memory, so redistribute tasks to other VMs
- *              lowMemory = true;
- *              redistributeTasks();
- *              // stop receiving new tasks
- *              stopReceivingTasks();
- *          } else {
- *              if (lowMemory) {
- *                  // resume receiving tasks
- *                  lowMemory = false;
- *                  resumeReceivingTasks();
- *              }
- *              // processing outstanding task
- *              ...
- *          }
- *          // sleep for sometime
- *          try {
- *              Thread.sleep(sometime);
- *          } catch (InterruptedException e) {
- *              ...
- *          }
- *       }
- *       </pre>
- *
- * <hr>
- *       The above example does not differentiate the case where
- *       the memory usage has temporarily dropped below the usage threshold
- *       from the case where the memory usage remains above the threshould
- *       between two iterations.  The usage threshold count returned by
- *       the {@link #getUsageThresholdCount} method
- *       can be used to determine
- *       if the memory usage has returned below the threshold
- *       between two polls.
- *       <p>
- *       Below shows another example that takes some action if a
- *       memory pool is under low memory and ignores the memory usage
- *       changes during the action processing time.
- *
- *       <pre>
- *       // Assume the usage threshold is supported for this pool.
- *       // Set the threshold to myThreshold which determines if
- *       // the application will take some action under low memory condition.
- *       pool.setUsageThreshold(myThreshold);
- *
- *       int prevCrossingCount = 0;
- *       while (true) {
- *           // A busy loop to detect when the memory usage
- *           // has exceeded the threshold.
- *           while (!pool.isUsageThresholdExceeded() ||
- *                  pool.getUsageThresholdCount() == prevCrossingCount) {
- *               try {
- *                   Thread.sleep(sometime)
- *               } catch (InterruptException e) {
- *                   ....
- *               }
- *           }
- *
- *           // Do some processing such as check for memory usage
- *           // and issue a warning
- *           ....
- *
- *           // Gets the current threshold count. The busy loop will then
- *           // ignore any crossing of threshold happens during the processing.
- *           prevCrossingCount = pool.getUsageThresholdCount();
- *       }
- *       </pre><hr>
- *   </li>
- *   <li><a name="ThresholdNotification"><b>Usage Threshold Notifications</b></a>
- *       <p>
- *       Usage threshold notification will be emitted by {@link MemoryMXBean}.
- *       When the Java virtual machine detects that the memory usage of
- *       a memory pool has reached or exceeded the usage threshold
- *       the virtual machine will trigger the <tt>MemoryMXBean</tt> to emit an
- *       {@link MemoryNotificationInfo#MEMORY_THRESHOLD_EXCEEDED
- *       usage threshold exceeded notification}.
- *       Another usage threshold exceeded notification will not be
- *       generated until the usage has fallen below the threshold and
- *       then exceeded it again.
- *       <p>
- *       Below is an example code implementing the same logic as the
- *       first example above but using the usage threshold notification
- *       mechanism to detect low memory conditions instead of polling.
- *       In this example code, upon receiving notification, the notification
- *       listener notifies another thread to perform the actual action
- *       such as to redistribute outstanding tasks, stop receiving tasks,
- *       or resume receiving tasks.
- *       The <tt>handleNotification</tt> method should be designed to
- *       do a very minimal amount of work and return without delay to avoid
- *       causing delay in delivering subsequent notifications.  Time-consuming
- *       actions should be performed by a separate thread.
- *       The notification listener may be invoked by multiple threads
- *       concurrently; so the tasks performed by the listener
- *       should be properly synchronized.
- *
- *       <pre>
- *       class MyListener implements javax.management.NotificationListener {
- *            public void handleNotification(Notification notification, Object handback)  {
- *                String notifType = notification.getType();
- *                if (notifType.equals(MemoryNotificationInfo.MEMORY_THRESHOLD_EXCEEDED)) {
- *                    // potential low memory, notify another thread
- *                    // to redistribute outstanding tasks to other VMs
- *                    // and stop receiving new tasks.
- *                    lowMemory = true;
- *                    notifyAnotherThread(lowMemory);
- *                }
- *            }
- *       }
- *
- *       // Register MyListener with MemoryMXBean
- *       MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();
- *       NotificationEmitter emitter = (NotificationEmitter) mbean;
- *       MyListener listener = new MyListener();
- *       emitter.addNotificationListener(listener, null, null);
- *
- *       // Assume this pool supports a usage threshold.
- *       // Set the threshold to myThreshold above which no new tasks
- *       // should be taken.
- *       pool.setUsageThreshold(myThreshold);
- *
- *       // Usage threshold detection is enabled and notification will be
- *       // handled by MyListener.  Continue for other processing.
- *       ....
- *
- *       </pre>
- * <hr>
- *       <p>
- *       There is no guarantee about when the <tt>MemoryMXBean</tt> will emit
- *       a threshold notification and when the notification will be delivered.
- *       When a notification listener is invoked, the memory usage of
- *       the memory pool may have crossed the usage threshold more
- *       than once.
- *       The {@link MemoryNotificationInfo#getCount} method returns the number
- *       of times that the memory usage has crossed the usage threshold
- *       at the point in time when the notification was constructed.
- *       It can be compared with the current usage threshold count returned
- *       by the {@link #getUsageThresholdCount} method to determine if
- *       such situation has occurred.
- *   </li>
- * </ol>
- *
- * <h4><a name="CollectionThreshold">4. Collection Usage Threshold</a></h4>
- *
- * Collection usage threshold is a manageable attribute only applicable
- * to some garbage-collected memory pools.
- * After a Java virtual machine has expended effort in reclaiming memory
- * space by recycling unused objects in a memory pool at garbage collection
- * time, some number of bytes in the memory pools that are garbaged
- * collected will still be in use.  The collection usage threshold
- * allows a value to be set for this number of bytes such
- * that if the threshold is exceeded,
- * a {@link MemoryNotificationInfo#MEMORY_THRESHOLD_EXCEEDED
- * collection usage threshold exceeded notification}
- * will be emitted by the {@link MemoryMXBean}.
- * In addition, the {@link #getCollectionUsageThresholdCount
- * collection usage threshold count} will then be incremented.
- *
- * <p>
- * The {@link MemoryPoolMXBean#isCollectionUsageThresholdSupported} method can
- * be used to determine if this functionality is supported.
- *
- * <p>
- * A Java virtual machine performs collection usage threshold checking
- * on a memory pool basis.  This checking is enabled if the collection
- * usage threshold is set to a positive value.
- * If the collection usage threshold is set to zero, this checking
- * is disabled on this memory pool.  Default value is zero.
- * The Java virtual machine performs the collection usage threshold
- * checking at garbage collection time.
- *
- * <p>
- * Some garbage-collected memory pools may
- * choose not to support the collection usage threshold.  For example,
- * a memory pool is only managed by a continuous concurrent garbage
- * collector.  Objects can be allocated in this memory pool by some thread
- * while the unused objects are reclaimed by the concurrent garbage
- * collector simultaneously.  Unless there is a well-defined
- * garbage collection time which is the best appropriate time
- * to check the memory usage, the collection usage threshold should not
- * be supported.
- *
- * <p>
- * The collection usage threshold is designed for monitoring the memory usage
- * after the Java virtual machine has expended effort in reclaiming
- * memory space.  The collection usage could also be monitored
- * by the polling and threshold notification mechanism
- * described above for the <a href="#UsageThreshold">usage threshold</a>
- * in a similar fashion.
- *
- * @see ManagementFactory#getPlatformMXBeans(Class)
- * @see <a href="../../../javax/management/package-summary.html">
- *      JMX Specification.</a>
- * @see <a href="package-summary.html#examples">
- *      Ways to Access MXBeans</a>
- *
- * @author  Mandy Chung
- * @since   1.5
- */
-public interface MemoryPoolMXBean extends PlatformManagedObject {
-    /**
-     * Returns the name representing this memory pool.
-     *
-     * @return the name of this memory pool.
-     */
-    public String getName();
-
-    /**
-     * Returns the type of this memory pool.
-     *
-     * <p>
-     * <b>MBeanServer access</b>:<br>
-     * The mapped type of <tt>MemoryType</tt> is <tt>String</tt>
-     * and the value is the name of the <tt>MemoryType</tt>.
-     *
-     * @return the type of this memory pool.
-     */
-    public MemoryType getType();
-
-    /**
-     * Returns an estimate of the memory usage of this memory pool.
-     * This method returns <tt>null</tt>
-     * if this memory pool is not valid (i.e. no longer exists).
-     *
-     * <p>
-     * This method requests the Java virtual machine to make
-     * a best-effort estimate of the current memory usage of this
-     * memory pool. For some memory pools, this method may be an
-     * expensive operation that requires some computation to determine
-     * the estimate.  An implementation should document when
-     * this is the case.
-     *
-     * <p>This method is designed for use in monitoring system
-     * memory usage and detecting low memory condition.
-     *
-     * <p>
-     * <b>MBeanServer access</b>:<br>
-     * The mapped type of <tt>MemoryUsage</tt> is
-     * <tt>CompositeData</tt> with attributes as specified in
-     * {@link MemoryUsage#from MemoryUsage}.
-     *
-     * @return a {@link MemoryUsage} object; or <tt>null</tt> if
-     * this pool not valid.
-     */
-    public MemoryUsage getUsage();
-
-    /**
-     * Returns the peak memory usage of this memory pool since the
-     * Java virtual machine was started or since the peak was reset.
-     * This method returns <tt>null</tt>
-     * if this memory pool is not valid (i.e. no longer exists).
-     *
-     * <p>
-     * <b>MBeanServer access</b>:<br>
-     * The mapped type of <tt>MemoryUsage</tt> is
-     * <tt>CompositeData</tt> with attributes as specified in
-     * {@link MemoryUsage#from MemoryUsage}.
-     *
-     * @return a {@link MemoryUsage} object representing the peak
-     * memory usage; or <tt>null</tt> if this pool is not valid.
-     *
-     */
-    public MemoryUsage getPeakUsage();
-
-    /**
-     * Resets the peak memory usage statistic of this memory pool
-     * to the current memory usage.
-     *
-     * @throws java.lang.SecurityException if a security manager
-     *         exists and the caller does not have
-     *         ManagementPermission("control").
-     */
-    public void resetPeakUsage();
-
-    /**
-     * Tests if this memory pool is valid in the Java virtual
-     * machine.  A memory pool becomes invalid once the Java virtual
-     * machine removes it from the memory system.
-     *
-     * @return <tt>true</tt> if the memory pool is valid in the running
-     *              Java virtual machine;
-     *         <tt>false</tt> otherwise.
-     */
-    public boolean isValid();
-
-    /**
-     * Returns the name of memory managers that manages this memory pool.
-     * Each memory pool will be managed by at least one memory manager.
-     *
-     * @return an array of <tt>String</tt> objects, each is the name of
-     * a memory manager managing this memory pool.
-     */
-    public String[] getMemoryManagerNames();
-
-    /**
-     * Returns the usage threshold value of this memory pool in bytes.
-     * Each memory pool has a platform-dependent default threshold value.
-     * The current usage threshold can be changed via the
-     * {@link #setUsageThreshold setUsageThreshold} method.
-     *
-     * @return the usage threshold value of this memory pool in bytes.
-     *
-     * @throws UnsupportedOperationException if this memory pool
-     *         does not support a usage threshold.
-     *
-     * @see #isUsageThresholdSupported
-     */
-    public long getUsageThreshold();
-
-    /**
-     * Sets the threshold of this memory pool to the given <tt>threshold</tt>
-     * value if this memory pool supports the usage threshold.
-     * The usage threshold crossing checking is enabled in this memory pool
-     * if the threshold is set to a positive value.
-     * The usage threshold crossing checking is disabled
-     * if it is set to zero.
-     *
-     * @param threshold the new threshold value in bytes. Must be non-negative.
-     *
-     * @throws IllegalArgumentException if <tt>threshold</tt> is negative
-     *         or greater than the maximum amount of memory for
-     *         this memory pool if defined.
-     *
-     * @throws UnsupportedOperationException if this memory pool
-     *         does not support a usage threshold.
-     *
-     * @throws java.lang.SecurityException if a security manager
-     *         exists and the caller does not have
-     *         ManagementPermission("control").
-     *
-     * @see #isUsageThresholdSupported
-     * @see <a href="#UsageThreshold">Usage threshold</a>
-     */
-    public void setUsageThreshold(long threshold);
-
-    /**
-     * Tests if the memory usage of this memory pool
-     * reaches or exceeds its usage threshold value.
-     *
-     * @return <tt>true</tt> if the memory usage of
-     * this memory pool reaches or exceeds the threshold value;
-     * <tt>false</tt> otherwise.
-     *
-     * @throws UnsupportedOperationException if this memory pool
-     *         does not support a usage threshold.
-     */
-    public boolean isUsageThresholdExceeded();
-
-    /**
-     * Returns the number of times that the memory usage has crossed
-     * the usage threshold.
-     *
-     * @return the number of times that the memory usage
-     * has crossed its usage threshold value.
-     *
-     * @throws UnsupportedOperationException if this memory pool
-     * does not support a usage threshold.
-     */
-    public long getUsageThresholdCount();
-
-    /**
-     * Tests if this memory pool supports usage threshold.
-     *
-     * @return <tt>true</tt> if this memory pool supports usage threshold;
-     * <tt>false</tt> otherwise.
-     */
-    public boolean isUsageThresholdSupported();
-
-    /**
-     * Returns the collection usage threshold value of this memory pool
-     * in bytes.  The default value is zero. The collection usage
-     * threshold can be changed via the
-     * {@link #setCollectionUsageThreshold setCollectionUsageThreshold} method.
-     *
-     * @return the collection usage threshold of this memory pool in bytes.
-     *
-     * @throws UnsupportedOperationException if this memory pool
-     *         does not support a collection usage threshold.
-     *
-     * @see #isCollectionUsageThresholdSupported
-     */
-    public long getCollectionUsageThreshold();
-
-    /**
-     * Sets the collection usage threshold of this memory pool to
-     * the given <tt>threshold</tt> value.
-     * When this threshold is set to positive, the Java virtual machine
-     * will check the memory usage at its best appropriate time after it has
-     * expended effort in recycling unused objects in this memory pool.
-     * <p>
-     * The collection usage threshold crossing checking is enabled
-     * in this memory pool if the threshold is set to a positive value.
-     * The collection usage threshold crossing checking is disabled
-     * if it is set to zero.
-     *
-     * @param threshold the new collection usage threshold value in bytes.
-     *              Must be non-negative.
-     *
-     * @throws IllegalArgumentException if <tt>threshold</tt> is negative
-     *         or greater than the maximum amount of memory for
-     *         this memory pool if defined.
-     *
-     * @throws UnsupportedOperationException if this memory pool
-     *         does not support a collection usage threshold.
-     *
-     * @throws java.lang.SecurityException if a security manager
-     *         exists and the caller does not have
-     *         ManagementPermission("control").
-     *
-     * @see #isCollectionUsageThresholdSupported
-     * @see <a href="#CollectionThreshold">Collection usage threshold</a>
-     */
-    public void setCollectionUsageThreshold(long threshold);
-
-    /**
-     * Tests if the memory usage of this memory pool after
-     * the most recent collection on which the Java virtual
-     * machine has expended effort has reached or
-     * exceeded its collection usage threshold.
-     * This method does not request the Java virtual
-     * machine to perform any garbage collection other than its normal
-     * automatic memory management.
-     *
-     * @return <tt>true</tt> if the memory usage of this memory pool
-     * reaches or exceeds the collection usage threshold value
-     * in the most recent collection;
-     * <tt>false</tt> otherwise.
-     *
-     * @throws UnsupportedOperationException if this memory pool
-     *         does not support a usage threshold.
-     */
-    public boolean isCollectionUsageThresholdExceeded();
-
-    /**
-     * Returns the number of times that the Java virtual machine
-     * has detected that the memory usage has reached or
-     * exceeded the collection usage threshold.
-     *
-     * @return the number of times that the memory
-     * usage has reached or exceeded the collection usage threshold.
-     *
-     * @throws UnsupportedOperationException if this memory pool
-     *         does not support a collection usage threshold.
-     *
-     * @see #isCollectionUsageThresholdSupported
-     */
-    public long getCollectionUsageThresholdCount();
-
-    /**
-     * Returns the memory usage after the Java virtual machine
-     * most recently expended effort in recycling unused objects
-     * in this memory pool.
-     * This method does not request the Java virtual
-     * machine to perform any garbage collection other than its normal
-     * automatic memory management.
-     * This method returns <tt>null</tt> if the Java virtual
-     * machine does not support this method.
-     *
-     * <p>
-     * <b>MBeanServer access</b>:<br>
-     * The mapped type of <tt>MemoryUsage</tt> is
-     * <tt>CompositeData</tt> with attributes as specified in
-     * {@link MemoryUsage#from MemoryUsage}.
-     *
-     * @return a {@link MemoryUsage} representing the memory usage of
-     * this memory pool after the Java virtual machine most recently
-     * expended effort in recycling unused objects;
-     * <tt>null</tt> if this method is not supported.
-     */
-    public MemoryUsage getCollectionUsage();
-
-    /**
-     * Tests if this memory pool supports a collection usage threshold.
-     *
-     * @return <tt>true</tt> if this memory pool supports the
-     * collection usage threshold; <tt>false</tt> otherwise.
-     */
-    public boolean isCollectionUsageThresholdSupported();
-}
diff --git a/ojluni/src/main/java/java/lang/management/MemoryType.java b/ojluni/src/main/java/java/lang/management/MemoryType.java
deleted file mode 100755
index b2595ce..0000000
--- a/ojluni/src/main/java/java/lang/management/MemoryType.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package java.lang.management;
-
-/**
- * Types of {@link MemoryPoolMXBean memory pools}.
- *
- * @author  Mandy Chung
- * @since   1.5
- */
-public enum MemoryType {
-
-    /**
-     * Heap memory type.
-     * <p>
-     * The Java virtual machine has a <i>heap</i>
-     * that is the runtime data area from which
-     * memory for all class instances and arrays are allocated.
-     */
-    HEAP("Heap memory"),
-
-    /**
-     * Non-heap memory type.
-     * <p>
-     * The Java virtual machine manages memory other than the heap
-     * (referred as <i>non-heap memory</i>).  The non-heap memory includes
-     * the <i>method area</i> and memory required for the internal
-     * processing or optimization for the Java virtual machine.
-     * It stores per-class structures such as a runtime
-     * constant pool, field and method data, and the code for
-     * methods and constructors.
-     */
-    NON_HEAP("Non-heap memory");
-
-    private final String description;
-
-    private MemoryType(String s) {
-        this.description = s;
-    }
-
-    /**
-     * Returns the string representation of this <tt>MemoryType</tt>.
-     * @return the string representation of this <tt>MemoryType</tt>.
-     */
-    public String toString() {
-        return description;
-    }
-
-    private static final long serialVersionUID = 6992337162326171013L;
-}
diff --git a/ojluni/src/main/java/java/lang/management/MemoryUsage.java b/ojluni/src/main/java/java/lang/management/MemoryUsage.java
deleted file mode 100755
index c223c71..0000000
--- a/ojluni/src/main/java/java/lang/management/MemoryUsage.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package java.lang.management;
-
-import javax.management.openmbean.CompositeData;
-import sun.management.MemoryUsageCompositeData;
-
-/**
- * A <tt>MemoryUsage</tt> object represents a snapshot of memory usage.
- * Instances of the <tt>MemoryUsage</tt> class are usually constructed
- * by methods that are used to obtain memory usage
- * information about individual memory pool of the Java virtual machine or
- * the heap or non-heap memory of the Java virtual machine as a whole.
- *
- * <p> A <tt>MemoryUsage</tt> object contains four values:
- * <ul>
- * <table>
- * <tr>
- * <td valign=top> <tt>init</tt> </td>
- * <td valign=top> represents the initial amount of memory (in bytes) that
- *      the Java virtual machine requests from the operating system
- *      for memory management during startup.  The Java virtual machine
- *      may request additional memory from the operating system and
- *      may also release memory to the system over time.
- *      The value of <tt>init</tt> may be undefined.
- * </td>
- * </tr>
- * <tr>
- * <td valign=top> <tt>used</tt> </td>
- * <td valign=top> represents the amount of memory currently used (in bytes).
- * </td>
- * </tr>
- * <tr>
- * <td valign=top> <tt>committed</tt> </td>
- * <td valign=top> represents the amount of memory (in bytes) that is
- *      guaranteed to be available for use by the Java virtual machine.
- *      The amount of committed memory may change over time (increase
- *      or decrease).  The Java virtual machine may release memory to
- *      the system and <tt>committed</tt> could be less than <tt>init</tt>.
- *      <tt>committed</tt> will always be greater than
- *      or equal to <tt>used</tt>.
- * </td>
- * </tr>
- * <tr>
- * <td valign=top> <tt>max</tt> </td>
- * <td valign=top> represents the maximum amount of memory (in bytes)
- *      that can be used for memory management. Its value may be undefined.
- *      The maximum amount of memory may change over time if defined.
- *      The amount of used and committed memory will always be less than
- *      or equal to <tt>max</tt> if <tt>max</tt> is defined.
- *      A memory allocation may fail if it attempts to increase the
- *      used memory such that <tt>used &gt committed</tt> even
- *      if <tt>used &lt= max</tt> would still be true (for example,
- *      when the system is low on virtual memory).
- * </td>
- * </tr>
- * </table>
- * </ul>
- *
- * Below is a picture showing an example of a memory pool:
- * <p>
- * <pre>
- *        +----------------------------------------------+
- *        +////////////////           |                  +
- *        +////////////////           |                  +
- *        +----------------------------------------------+
- *
- *        |--------|
- *           init
- *        |---------------|
- *               used
- *        |---------------------------|
- *                  committed
- *        |----------------------------------------------|
- *                            max
- * </pre>
- *
- * <h4>MXBean Mapping</h4>
- * <tt>MemoryUsage</tt> is mapped to a {@link CompositeData CompositeData}
- * with attributes as specified in the {@link #from from} method.
- *
- * @author   Mandy Chung
- * @since   1.5
- */
-public class MemoryUsage {
-    private final long init;
-    private final long used;
-    private final long committed;
-    private final long max;
-
-    /**
-     * Constructs a <tt>MemoryUsage</tt> object.
-     *
-     * @param init      the initial amount of memory in bytes that
-     *                  the Java virtual machine allocates;
-     *                  or <tt>-1</tt> if undefined.
-     * @param used      the amount of used memory in bytes.
-     * @param committed the amount of committed memory in bytes.
-     * @param max       the maximum amount of memory in bytes that
-     *                  can be used; or <tt>-1</tt> if undefined.
-     *
-     * @throws IllegalArgumentException if
-     * <ul>
-     * <li> the value of <tt>init</tt> or <tt>max</tt> is negative
-     *      but not <tt>-1</tt>; or</li>
-     * <li> the value of <tt>used</tt> or <tt>committed</tt> is negative;
-     *      or</li>
-     * <li> <tt>used</tt> is greater than the value of <tt>committed</tt>;
-     *      or</li>
-     * <li> <tt>committed</tt> is greater than the value of <tt>max</tt>
-     *      <tt>max</tt> if defined.</li>
-     * </ul>
-     */
-    public MemoryUsage(long init,
-                       long used,
-                       long committed,
-                       long max) {
-        if (init < -1) {
-            throw new IllegalArgumentException( "init parameter = " +
-                init + " is negative but not -1.");
-        }
-        if (max < -1) {
-            throw new IllegalArgumentException( "max parameter = " +
-                max + " is negative but not -1.");
-        }
-        if (used < 0) {
-            throw new IllegalArgumentException( "used parameter = " +
-                used + " is negative.");
-        }
-        if (committed < 0) {
-            throw new IllegalArgumentException( "committed parameter = " +
-                committed + " is negative.");
-        }
-        if (used > committed) {
-            throw new IllegalArgumentException( "used = " + used +
-                " should be <= committed = " + committed);
-        }
-        if (max >= 0 && committed > max) {
-            throw new IllegalArgumentException( "committed = " + committed +
-                " should be < max = " + max);
-        }
-
-        this.init = init;
-        this.used = used;
-        this.committed = committed;
-        this.max = max;
-    }
-
-    /**
-     * Constructs a <tt>MemoryUsage</tt> object from a
-     * {@link CompositeData CompositeData}.
-     */
-    private MemoryUsage(CompositeData cd) {
-        // validate the input composite data
-        MemoryUsageCompositeData.validateCompositeData(cd);
-
-        this.init = MemoryUsageCompositeData.getInit(cd);
-        this.used = MemoryUsageCompositeData.getUsed(cd);
-        this.committed = MemoryUsageCompositeData.getCommitted(cd);
-        this.max = MemoryUsageCompositeData.getMax(cd);
-    }
-
-    /**
-     * Returns the amount of memory in bytes that the Java virtual machine
-     * initially requests from the operating system for memory management.
-     * This method returns <tt>-1</tt> if the initial memory size is undefined.
-     *
-     * @return the initial size of memory in bytes;
-     * <tt>-1</tt> if undefined.
-     */
-    public long getInit() {
-        return init;
-    }
-
-    /**
-     * Returns the amount of used memory in bytes.
-     *
-     * @return the amount of used memory in bytes.
-     *
-     */
-    public long getUsed() {
-        return used;
-    };
-
-    /**
-     * Returns the amount of memory in bytes that is committed for
-     * the Java virtual machine to use.  This amount of memory is
-     * guaranteed for the Java virtual machine to use.
-     *
-     * @return the amount of committed memory in bytes.
-     *
-     */
-    public long getCommitted() {
-        return committed;
-    };
-
-    /**
-     * Returns the maximum amount of memory in bytes that can be
-     * used for memory management.  This method returns <tt>-1</tt>
-     * if the maximum memory size is undefined.
-     *
-     * <p> This amount of memory is not guaranteed to be available
-     * for memory management if it is greater than the amount of
-     * committed memory.  The Java virtual machine may fail to allocate
-     * memory even if the amount of used memory does not exceed this
-     * maximum size.
-     *
-     * @return the maximum amount of memory in bytes;
-     * <tt>-1</tt> if undefined.
-     */
-    public long getMax() {
-        return max;
-    };
-
-    /**
-     * Returns a descriptive representation of this memory usage.
-     */
-    public String toString() {
-        StringBuffer buf = new StringBuffer();
-        buf.append("init = " + init + "(" + (init >> 10) + "K) ");
-        buf.append("used = " + used + "(" + (used >> 10) + "K) ");
-        buf.append("committed = " + committed + "(" +
-                   (committed >> 10) + "K) " );
-        buf.append("max = " + max + "(" + (max >> 10) + "K)");
-        return buf.toString();
-    }
-
-    /**
-     * Returns a <tt>MemoryUsage</tt> object represented by the
-     * given <tt>CompositeData</tt>. The given <tt>CompositeData</tt>
-     * must contain the following attributes:
-     * <p>
-     * <blockquote>
-     * <table border>
-     * <tr>
-     *   <th align=left>Attribute Name</th>
-     *   <th align=left>Type</th>
-     * </tr>
-     * <tr>
-     *   <td>init</td>
-     *   <td><tt>java.lang.Long</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>used</td>
-     *   <td><tt>java.lang.Long</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>committed</td>
-     *   <td><tt>java.lang.Long</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>max</td>
-     *   <td><tt>java.lang.Long</tt></td>
-     * </tr>
-     * </table>
-     * </blockquote>
-     *
-     * @param cd <tt>CompositeData</tt> representing a <tt>MemoryUsage</tt>
-     *
-     * @throws IllegalArgumentException if <tt>cd</tt> does not
-     *   represent a <tt>MemoryUsage</tt> with the attributes described
-     *   above.
-     *
-     * @return a <tt>MemoryUsage</tt> object represented by <tt>cd</tt>
-     *         if <tt>cd</tt> is not <tt>null</tt>;
-     *         <tt>null</tt> otherwise.
-     */
-    public static MemoryUsage from(CompositeData cd) {
-        if (cd == null) {
-            return null;
-        }
-
-        if (cd instanceof MemoryUsageCompositeData) {
-            return ((MemoryUsageCompositeData) cd).getMemoryUsage();
-        } else {
-            return new MemoryUsage(cd);
-        }
-
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/management/MonitorInfo.java b/ojluni/src/main/java/java/lang/management/MonitorInfo.java
deleted file mode 100755
index 658be13..0000000
--- a/ojluni/src/main/java/java/lang/management/MonitorInfo.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-package java.lang.management;
-
-import javax.management.openmbean.CompositeData;
-import sun.management.MonitorInfoCompositeData;
-
-/**
- * Information about an object monitor lock.  An object monitor is locked
- * when entering a synchronization block or method on that object.
- *
- * <h4>MXBean Mapping</h4>
- * <tt>MonitorInfo</tt> is mapped to a {@link CompositeData CompositeData}
- * with attributes as specified in
- * the {@link #from from} method.
- *
- * @author  Mandy Chung
- * @since   1.6
- */
-public class MonitorInfo extends LockInfo {
-
-    private int    stackDepth;
-    private StackTraceElement stackFrame;
-
-    /**
-     * Construct a <tt>MonitorInfo</tt> object.
-     *
-     * @param className the fully qualified name of the class of the lock object.
-     * @param identityHashCode the {@link System#identityHashCode
-     *                         identity hash code} of the lock object.
-     * @param stackDepth the depth in the stack trace where the object monitor
-     *                   was locked.
-     * @param stackFrame the stack frame that locked the object monitor.
-     * @throws IllegalArgumentException if
-     *    <tt>stackDepth</tt> &ge; 0 but <tt>stackFrame</tt> is <tt>null</tt>,
-     *    or <tt>stackDepth</tt> &lt; 0 but <tt>stackFrame</tt> is not
-     *       <tt>null</tt>.
-     */
-    public MonitorInfo(String className,
-                       int identityHashCode,
-                       int stackDepth,
-                       StackTraceElement stackFrame) {
-        super(className, identityHashCode);
-        if (stackDepth >= 0 && stackFrame == null) {
-            throw new IllegalArgumentException("Parameter stackDepth is " +
-                stackDepth + " but stackFrame is null");
-        }
-        if (stackDepth < 0 && stackFrame != null) {
-            throw new IllegalArgumentException("Parameter stackDepth is " +
-                stackDepth + " but stackFrame is not null");
-        }
-        this.stackDepth = stackDepth;
-        this.stackFrame = stackFrame;
-    }
-
-    /**
-     * Returns the depth in the stack trace where the object monitor
-     * was locked.  The depth is the index to the <tt>StackTraceElement</tt>
-     * array returned in the {@link ThreadInfo#getStackTrace} method.
-     *
-     * @return the depth in the stack trace where the object monitor
-     *         was locked, or a negative number if not available.
-     */
-    public int getLockedStackDepth() {
-        return stackDepth;
-    }
-
-    /**
-     * Returns the stack frame that locked the object monitor.
-     *
-     * @return <tt>StackTraceElement</tt> that locked the object monitor,
-     *         or <tt>null</tt> if not available.
-     */
-    public StackTraceElement getLockedStackFrame() {
-        return stackFrame;
-    }
-
-    /**
-     * Returns a <tt>MonitorInfo</tt> object represented by the
-     * given <tt>CompositeData</tt>.
-     * The given <tt>CompositeData</tt> must contain the following attributes
-     * as well as the attributes specified in the
-     * <a href="LockInfo.html#MappedType">
-     * mapped type</a> for the {@link LockInfo} class:
-     * <blockquote>
-     * <table border>
-     * <tr>
-     *   <th align=left>Attribute Name</th>
-     *   <th align=left>Type</th>
-     * </tr>
-     * <tr>
-     *   <td>lockedStackFrame</td>
-     *   <td><tt>CompositeData as specified in the
-     *       <a href="ThreadInfo.html#StackTrace">stackTrace</a>
-     *       attribute defined in the {@link ThreadInfo#from
-     *       ThreadInfo.from} method.
-     *       </tt></td>
-     * </tr>
-     * <tr>
-     *   <td>lockedStackDepth</td>
-     *   <td><tt>java.lang.Integer</tt></td>
-     * </tr>
-     * </table>
-     * </blockquote>
-     *
-     * @param cd <tt>CompositeData</tt> representing a <tt>MonitorInfo</tt>
-     *
-     * @throws IllegalArgumentException if <tt>cd</tt> does not
-     *   represent a <tt>MonitorInfo</tt> with the attributes described
-     *   above.
-
-     * @return a <tt>MonitorInfo</tt> object represented
-     *         by <tt>cd</tt> if <tt>cd</tt> is not <tt>null</tt>;
-     *         <tt>null</tt> otherwise.
-     */
-    public static MonitorInfo from(CompositeData cd) {
-        if (cd == null) {
-            return null;
-        }
-
-        if (cd instanceof MonitorInfoCompositeData) {
-            return ((MonitorInfoCompositeData) cd).getMonitorInfo();
-        } else {
-            MonitorInfoCompositeData.validateCompositeData(cd);
-            String className = MonitorInfoCompositeData.getClassName(cd);
-            int identityHashCode = MonitorInfoCompositeData.getIdentityHashCode(cd);
-            int stackDepth = MonitorInfoCompositeData.getLockedStackDepth(cd);
-            StackTraceElement stackFrame = MonitorInfoCompositeData.getLockedStackFrame(cd);
-            return new MonitorInfo(className,
-                                   identityHashCode,
-                                   stackDepth,
-                                   stackFrame);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/java/lang/management/OperatingSystemMXBean.java b/ojluni/src/main/java/java/lang/management/OperatingSystemMXBean.java
deleted file mode 100755
index 7aec4e7..0000000
--- a/ojluni/src/main/java/java/lang/management/OperatingSystemMXBean.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package java.lang.management;
-
-/**
- * The management interface for the operating system on which
- * the Java virtual machine is running.
- *
- * <p> A Java virtual machine has a single instance of the implementation
- * class of this interface.  This instance implementing this interface is
- * an <a href="ManagementFactory.html#MXBean">MXBean</a>
- * that can be obtained by calling
- * the {@link ManagementFactory#getOperatingSystemMXBean} method or
- * from the {@link ManagementFactory#getPlatformMBeanServer
- * platform <tt>MBeanServer</tt>} method.
- *
- * <p>The <tt>ObjectName</tt> for uniquely identifying the MXBean for
- * the operating system within an MBeanServer is:
- * <blockquote>
- *    {@link ManagementFactory#OPERATING_SYSTEM_MXBEAN_NAME
- *      <tt>java.lang:type=OperatingSystem</tt>}
- * </blockquote>
- *
- * It can be obtained by calling the
- * {@link PlatformManagedObject#getObjectName} method.
- *
- * <p> This interface defines several convenient methods for accessing
- * system properties about the operating system on which the Java
- * virtual machine is running.
- *
- * @see ManagementFactory#getPlatformMXBeans(Class)
- * @see <a href="../../../javax/management/package-summary.html">
- *      JMX Specification.</a>
- * @see <a href="package-summary.html#examples">
- *      Ways to Access MXBeans</a>
- *
- * @author  Mandy Chung
- * @since   1.5
- */
-public interface OperatingSystemMXBean extends PlatformManagedObject {
-    /**
-     * Returns the operating system name.
-     * This method is equivalent to <tt>System.getProperty("os.name")</tt>.
-     *
-     * @return the operating system name.
-     *
-     * @throws  java.lang.SecurityException
-     *     if a security manager exists and its
-     *     <code>checkPropertiesAccess</code> method doesn't allow access
-     *     to this system property.
-     * @see java.lang.SecurityManager#checkPropertyAccess(java.lang.String)
-     * @see java.lang.System#getProperty
-     */
-    public String getName();
-
-    /**
-     * Returns the operating system architecture.
-     * This method is equivalent to <tt>System.getProperty("os.arch")</tt>.
-     *
-     * @return the operating system architecture.
-     *
-     * @throws  java.lang.SecurityException
-     *     if a security manager exists and its
-     *     <code>checkPropertiesAccess</code> method doesn't allow access
-     *     to this system property.
-     * @see java.lang.SecurityManager#checkPropertyAccess(java.lang.String)
-     * @see java.lang.System#getProperty
-     */
-    public String getArch();
-
-    /**
-     * Returns the operating system version.
-     * This method is equivalent to <tt>System.getProperty("os.version")</tt>.
-     *
-     * @return the operating system version.
-     *
-     * @throws  java.lang.SecurityException
-     *     if a security manager exists and its
-     *     <code>checkPropertiesAccess</code> method doesn't allow access
-     *     to this system property.
-     * @see java.lang.SecurityManager#checkPropertyAccess(java.lang.String)
-     * @see java.lang.System#getProperty
-     */
-    public String getVersion();
-
-    /**
-     * Returns the number of processors available to the Java virtual machine.
-     * This method is equivalent to the {@link Runtime#availableProcessors()}
-     * method.
-     * <p> This value may change during a particular invocation of
-     * the virtual machine.
-     *
-     * @return  the number of processors available to the virtual
-     *          machine; never smaller than one.
-     */
-    public int getAvailableProcessors();
-
-    /**
-     * Returns the system load average for the last minute.
-     * The system load average is the sum of the number of runnable entities
-     * queued to the {@linkplain #getAvailableProcessors available processors}
-     * and the number of runnable entities running on the available processors
-     * averaged over a period of time.
-     * The way in which the load average is calculated is operating system
-     * specific but is typically a damped time-dependent average.
-     * <p>
-     * If the load average is not available, a negative value is returned.
-     * <p>
-     * This method is designed to provide a hint about the system load
-     * and may be queried frequently.
-     * The load average may be unavailable on some platform where it is
-     * expensive to implement this method.
-     *
-     * @return the system load average; or a negative value if not available.
-     *
-     * @since 1.6
-     */
-    public double getSystemLoadAverage();
-}
diff --git a/ojluni/src/main/java/java/lang/management/PlatformComponent.java b/ojluni/src/main/java/java/lang/management/PlatformComponent.java
deleted file mode 100755
index 82b6e87..0000000
--- a/ojluni/src/main/java/java/lang/management/PlatformComponent.java
+++ /dev/null
@@ -1,467 +0,0 @@
-/*
- * Copyright (c) 2008, 2010, 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.
- */
-
-package java.lang.management;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.HashSet;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import javax.management.MBeanServerConnection;
-import javax.management.ObjectName;
-
-import com.sun.management.HotSpotDiagnosticMXBean;
-import com.sun.management.UnixOperatingSystemMXBean;
-
-import sun.management.ManagementFactoryHelper;
-import sun.management.Util;
-
-/**
- * This enum class defines the list of platform components
- * that provides monitoring and management support.
- * Each enum represents one MXBean interface. A MXBean
- * instance could implement one or more MXBean interfaces.
- *
- * For example, com.sun.management.GarbageCollectorMXBean
- * extends java.lang.management.GarbageCollectorMXBean
- * and there is one set of garbage collection MXBean instances,
- * each of which implements both c.s.m. and j.l.m. interfaces.
- * There are two separate enums GARBAGE_COLLECTOR
- * and SUN_GARBAGE_COLLECTOR so that ManagementFactory.getPlatformMXBeans(Class)
- * will return the list of MXBeans of the specified type.
- *
- * To add a new MXBean interface for the Java platform,
- * add a new enum constant and implement the MXBeanFetcher.
- */
-enum PlatformComponent {
-
-    /**
-     * Class loading system of the Java virtual machine.
-     */
-    CLASS_LOADING(
-        "java.lang.management.ClassLoadingMXBean",
-        "java.lang", "ClassLoading", defaultKeyProperties(),
-        true, // singleton
-        new MXBeanFetcher<ClassLoadingMXBean>() {
-            public List<ClassLoadingMXBean> getMXBeans() {
-                return Collections.singletonList(ManagementFactoryHelper.getClassLoadingMXBean());
-            }
-        }),
-
-    /**
-     * Compilation system of the Java virtual machine.
-     */
-    COMPILATION(
-        "java.lang.management.CompilationMXBean",
-        "java.lang", "Compilation", defaultKeyProperties(),
-        true, // singleton
-        new MXBeanFetcher<CompilationMXBean>() {
-            public List<CompilationMXBean> getMXBeans() {
-                CompilationMXBean m = ManagementFactoryHelper.getCompilationMXBean();
-                if (m == null) {
-                   return Collections.emptyList();
-                } else {
-                   return Collections.singletonList(m);
-                }
-            }
-        }),
-
-    /**
-     * Memory system of the Java virtual machine.
-     */
-    MEMORY(
-        "java.lang.management.MemoryMXBean",
-        "java.lang", "Memory", defaultKeyProperties(),
-        true, // singleton
-        new MXBeanFetcher<MemoryMXBean>() {
-            public List<MemoryMXBean> getMXBeans() {
-                return Collections.singletonList(ManagementFactoryHelper.getMemoryMXBean());
-            }
-        }),
-
-    /**
-     * Garbage Collector in the Java virtual machine.
-     */
-    GARBAGE_COLLECTOR(
-        "java.lang.management.GarbageCollectorMXBean",
-        "java.lang", "GarbageCollector", keyProperties("name"),
-        false, // zero or more instances
-        new MXBeanFetcher<GarbageCollectorMXBean>() {
-            public List<GarbageCollectorMXBean> getMXBeans() {
-                return ManagementFactoryHelper.
-                           getGarbageCollectorMXBeans();
-            }
-        }),
-
-    /**
-     * Memory manager in the Java virtual machine.
-     */
-    MEMORY_MANAGER(
-        "java.lang.management.MemoryManagerMXBean",
-        "java.lang", "MemoryManager", keyProperties("name"),
-        false, // zero or more instances
-        new MXBeanFetcher<MemoryManagerMXBean>() {
-            public List<MemoryManagerMXBean> getMXBeans() {
-                return ManagementFactoryHelper.getMemoryManagerMXBeans();
-            }
-        },
-        GARBAGE_COLLECTOR),
-
-    /**
-     * Memory pool in the Java virtual machine.
-     */
-    MEMORY_POOL(
-        "java.lang.management.MemoryPoolMXBean",
-        "java.lang", "MemoryPool", keyProperties("name"),
-        false, // zero or more instances
-        new MXBeanFetcher<MemoryPoolMXBean>() {
-            public List<MemoryPoolMXBean> getMXBeans() {
-                return ManagementFactoryHelper.getMemoryPoolMXBeans();
-            }
-        }),
-
-    /**
-     * Operating system on which the Java virtual machine is running
-     */
-    OPERATING_SYSTEM(
-        "java.lang.management.OperatingSystemMXBean",
-        "java.lang", "OperatingSystem", defaultKeyProperties(),
-        true, // singleton
-        new MXBeanFetcher<OperatingSystemMXBean>() {
-            public List<OperatingSystemMXBean> getMXBeans() {
-                return Collections.singletonList(ManagementFactoryHelper.getOperatingSystemMXBean());
-            }
-        }),
-
-    /**
-     * Runtime system of the Java virtual machine.
-     */
-    RUNTIME(
-        "java.lang.management.RuntimeMXBean",
-        "java.lang", "Runtime", defaultKeyProperties(),
-        true, // singleton
-        new MXBeanFetcher<RuntimeMXBean>() {
-            public List<RuntimeMXBean> getMXBeans() {
-                return Collections.singletonList(ManagementFactoryHelper.getRuntimeMXBean());
-            }
-        }),
-
-    /**
-     * Threading system of the Java virtual machine.
-     */
-    THREADING(
-        "java.lang.management.ThreadMXBean",
-        "java.lang", "Threading", defaultKeyProperties(),
-        true, // singleton
-        new MXBeanFetcher<ThreadMXBean>() {
-            public List<ThreadMXBean> getMXBeans() {
-                return Collections.singletonList(ManagementFactoryHelper.getThreadMXBean());
-            }
-        }),
-
-
-    /**
-     * Logging facility.
-     */
-    LOGGING(
-        "java.lang.management.PlatformLoggingMXBean",
-        "java.util.logging", "Logging", defaultKeyProperties(),
-        true, // singleton
-        new MXBeanFetcher<PlatformLoggingMXBean>() {
-            public List<PlatformLoggingMXBean> getMXBeans() {
-                PlatformLoggingMXBean m = ManagementFactoryHelper.getPlatformLoggingMXBean();
-                if (m == null) {
-                   return Collections.emptyList();
-                } else {
-                   return Collections.singletonList(m);
-                }
-            }
-        }),
-
-    /**
-     * Buffer pools.
-     */
-    BUFFER_POOL(
-        "java.lang.management.BufferPoolMXBean",
-        "java.nio", "BufferPool", keyProperties("name"),
-        false, // zero or more instances
-        new MXBeanFetcher<BufferPoolMXBean>() {
-            public List<BufferPoolMXBean> getMXBeans() {
-                return ManagementFactoryHelper.getBufferPoolMXBeans();
-            }
-        }),
-
-
-    // Sun Platform Extension
-
-    /**
-     * Sun extension garbage collector that performs collections in cycles.
-     */
-    SUN_GARBAGE_COLLECTOR(
-        "com.sun.management.GarbageCollectorMXBean",
-        "java.lang", "GarbageCollector", keyProperties("name"),
-        false, // zero or more instances
-        new MXBeanFetcher<com.sun.management.GarbageCollectorMXBean>() {
-            public List<com.sun.management.GarbageCollectorMXBean> getMXBeans() {
-                return getGcMXBeanList(com.sun.management.GarbageCollectorMXBean.class);
-            }
-        }),
-
-    /**
-     * Sun extension operating system on which the Java virtual machine
-     * is running.
-     */
-    SUN_OPERATING_SYSTEM(
-        "com.sun.management.OperatingSystemMXBean",
-        "java.lang", "OperatingSystem", defaultKeyProperties(),
-        true, // singleton
-        new MXBeanFetcher<com.sun.management.OperatingSystemMXBean>() {
-            public List<com.sun.management.OperatingSystemMXBean> getMXBeans() {
-                return getOSMXBeanList(com.sun.management.OperatingSystemMXBean.class);
-            }
-        }),
-
-    /**
-     * Unix operating system.
-     */
-    SUN_UNIX_OPERATING_SYSTEM(
-        "com.sun.management.UnixOperatingSystemMXBean",
-        "java.lang", "OperatingSystem", defaultKeyProperties(),
-        true, // singleton
-        new MXBeanFetcher<UnixOperatingSystemMXBean>() {
-            public List<UnixOperatingSystemMXBean> getMXBeans() {
-                return getOSMXBeanList(com.sun.management.UnixOperatingSystemMXBean.class);
-            }
-        }),
-
-    /**
-     * Diagnostic support for the HotSpot Virtual Machine.
-     */
-    HOTSPOT_DIAGNOSTIC(
-        "com.sun.management.HotSpotDiagnosticMXBean",
-        "com.sun.management", "HotSpotDiagnostic", defaultKeyProperties(),
-        true, // singleton
-        new MXBeanFetcher<HotSpotDiagnosticMXBean>() {
-            public List<HotSpotDiagnosticMXBean> getMXBeans() {
-                return Collections.singletonList(ManagementFactoryHelper.getDiagnosticMXBean());
-            }
-        });
-
-
-    /**
-     * A task that returns the MXBeans for a component.
-     */
-    interface MXBeanFetcher<T extends PlatformManagedObject> {
-        public List<T> getMXBeans();
-    }
-
-    /*
-     * Returns a list of the GC MXBeans of the given type.
-     */
-    private static <T extends GarbageCollectorMXBean>
-            List<T> getGcMXBeanList(Class<T> gcMXBeanIntf) {
-        List<GarbageCollectorMXBean> list =
-            ManagementFactoryHelper.getGarbageCollectorMXBeans();
-        List<T> result = new ArrayList<>(list.size());
-        for (GarbageCollectorMXBean m : list) {
-            if (gcMXBeanIntf.isInstance(m)) {
-                result.add(gcMXBeanIntf.cast(m));
-            }
-        }
-        return result;
-    }
-
-    /*
-     * Returns the OS mxbean instance of the given type.
-     */
-    private static <T extends OperatingSystemMXBean>
-            List<T> getOSMXBeanList(Class<T> osMXBeanIntf) {
-        OperatingSystemMXBean m =
-            ManagementFactoryHelper.getOperatingSystemMXBean();
-        if (osMXBeanIntf.isInstance(m)) {
-            return Collections.singletonList(osMXBeanIntf.cast(m));
-        } else {
-            return Collections.emptyList();
-        }
-    }
-
-    private final String mxbeanInterfaceName;
-    private final String domain;
-    private final String type;
-    private final Set<String> keyProperties;
-    private final MXBeanFetcher fetcher;
-    private final PlatformComponent[] subComponents;
-    private final boolean singleton;
-
-    private PlatformComponent(String intfName,
-                              String domain, String type,
-                              Set<String> keyProperties,
-                              boolean singleton,
-                              MXBeanFetcher fetcher,
-                              PlatformComponent... subComponents) {
-        this.mxbeanInterfaceName = intfName;
-        this.domain = domain;
-        this.type = type;
-        this.keyProperties = keyProperties;
-        this.singleton = singleton;
-        this.fetcher = fetcher;
-        this.subComponents = subComponents;
-    }
-
-    private static Set<String> defaultKeyProps;
-    private static Set<String> defaultKeyProperties() {
-        if (defaultKeyProps == null) {
-            defaultKeyProps = Collections.singleton("type");
-        }
-        return defaultKeyProps;
-    }
-
-    private static Set<String> keyProperties(String... keyNames) {
-        Set<String> set = new HashSet<>();
-        set.add("type");
-        for (String s : keyNames) {
-            set.add(s);
-        }
-        return set;
-    }
-
-    boolean isSingleton() {
-        return singleton;
-    }
-
-    String getMXBeanInterfaceName() {
-        return mxbeanInterfaceName;
-    }
-
-    @SuppressWarnings("unchecked")
-    Class<? extends PlatformManagedObject> getMXBeanInterface() {
-        try {
-            // Lazy loading the MXBean interface only when it is needed
-            return (Class<? extends PlatformManagedObject>)
-                       Class.forName(mxbeanInterfaceName, false, null);
-        } catch (ClassNotFoundException x) {
-            throw new AssertionError(x);
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    <T extends PlatformManagedObject>
-        List<T> getMXBeans(Class<T> mxbeanInterface)
-    {
-        return fetcher.getMXBeans();
-    }
-
-    <T extends PlatformManagedObject> T getSingletonMXBean(Class<T> mxbeanInterface)
-    {
-        if (!singleton)
-            throw new IllegalArgumentException(mxbeanInterfaceName +
-                " can have zero or more than one instances");
-
-        List<T> list = fetcher.getMXBeans();
-        assert list.size() == 1;
-        return list.isEmpty() ? null : list.get(0);
-    }
-
-    <T extends PlatformManagedObject>
-            T getSingletonMXBean(MBeanServerConnection mbs, Class<T> mxbeanInterface)
-        throws java.io.IOException
-    {
-        if (!singleton)
-            throw new IllegalArgumentException(mxbeanInterfaceName +
-                " can have zero or more than one instances");
-
-        // ObjectName of a singleton MXBean contains only domain and type
-        assert keyProperties.size() == 1;
-        String on = domain + ":type=" + type;
-        return ManagementFactory.newPlatformMXBeanProxy(mbs,
-                                                        on,
-                                                        mxbeanInterface);
-    }
-
-    <T extends PlatformManagedObject>
-            List<T> getMXBeans(MBeanServerConnection mbs, Class<T> mxbeanInterface)
-        throws java.io.IOException
-    {
-        List<T> result = new ArrayList<>();
-        for (ObjectName on : getObjectNames(mbs)) {
-            result.add(ManagementFactory.
-                newPlatformMXBeanProxy(mbs,
-                                       on.getCanonicalName(),
-                                       mxbeanInterface)
-            );
-        }
-        return result;
-    }
-
-    private Set<ObjectName> getObjectNames(MBeanServerConnection mbs)
-        throws java.io.IOException
-    {
-        String domainAndType = domain + ":type=" + type;
-        if (keyProperties.size() > 1) {
-            // if there are more than 1 key properties (i.e. other than "type")
-            domainAndType += ",*";
-        }
-        ObjectName on = Util.newObjectName(domainAndType);
-        Set<ObjectName> set =  mbs.queryNames(on, null);
-        for (PlatformComponent pc : subComponents) {
-            set.addAll(pc.getObjectNames(mbs));
-        }
-        return set;
-    }
-
-    // a map from MXBean interface name to PlatformComponent
-    private static Map<String, PlatformComponent> enumMap;
-    private static synchronized void ensureInitialized() {
-        if (enumMap == null) {
-            enumMap = new HashMap<>();
-            for (PlatformComponent pc: PlatformComponent.values()) {
-                // Use String as the key rather than Class<?> to avoid
-                // causing unnecessary class loading of management interface
-                enumMap.put(pc.getMXBeanInterfaceName(), pc);
-            }
-        }
-    }
-
-    static boolean isPlatformMXBean(String cn) {
-        ensureInitialized();
-        return enumMap.containsKey(cn);
-    }
-
-    static <T extends PlatformManagedObject>
-        PlatformComponent getPlatformComponent(Class<T> mxbeanInterface)
-    {
-        ensureInitialized();
-        String cn = mxbeanInterface.getName();
-        PlatformComponent pc = enumMap.get(cn);
-        if (pc != null && pc.getMXBeanInterface() == mxbeanInterface)
-            return pc;
-        return null;
-    }
-
-    private static final long serialVersionUID = 6992337162326171013L;
-}
diff --git a/ojluni/src/main/java/java/lang/management/PlatformLoggingMXBean.java b/ojluni/src/main/java/java/lang/management/PlatformLoggingMXBean.java
deleted file mode 100755
index dfb9f86..0000000
--- a/ojluni/src/main/java/java/lang/management/PlatformLoggingMXBean.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-
-package java.lang.management;
-
-/**
- * The management interface for the {@linkplain java.util.logging logging} facility.
- *
- * <p>There is a single global instance of the <tt>PlatformLoggingMXBean</tt>.
- * The {@link java.lang.management.ManagementFactory#getPlatformMXBean(Class)
- * ManagementFactory.getPlatformMXBean} method can be used to obtain
- * the {@code PlatformLoggingMXBean} object as follows:
- * <pre>
- *     PlatformLoggingMXBean logging = ManagementFactory.getPlatformMXBean(PlatformLoggingMXBean.class);
- * </pre>
- * The {@code PlatformLoggingMXBean} object is also registered with the
- * platform {@linkplain java.lang.management.ManagementFactory#getPlatformMBeanServer
- * MBeanServer}.
- * The {@link javax.management.ObjectName ObjectName} for uniquely
- * identifying the {@code PlatformLoggingMXBean} within an MBeanServer is:
- * <pre>
- *      {@link java.util.logging.LogManager#LOGGING_MXBEAN_NAME java.util.logging:type=Logging}
- * </pre>
- *
- * <p>The instance registered in the platform <tt>MBeanServer</tt> with
- * this {@code ObjectName} implements all attributes defined by
- * {@link java.util.logging.LoggingMXBean}.
- *
- * @since   1.7
- */
-public interface PlatformLoggingMXBean extends PlatformManagedObject {
-
-    /**
-     * Returns the list of the currently registered
-     * {@linkplain java.util.logging.Logger logger} names. This method
-     * calls {@link java.util.logging.LogManager#getLoggerNames} and
-     * returns a list of the logger names.
-     *
-     * @return A list of {@code String} each of which is a
-     *         currently registered {@code Logger} name.
-     */
-    java.util.List<String> getLoggerNames();
-
-    /**
-     * Gets the name of the log {@linkplain java.util.logging.Logger#getLevel
-     * level} associated with the specified logger.
-     * If the specified logger does not exist, {@code null}
-     * is returned.
-     * This method first finds the logger of the given name and
-     * then returns the name of the log level by calling:
-     * <blockquote>
-     *   {@link java.util.logging.Logger#getLevel
-     *    Logger.getLevel()}.{@link java.util.logging.Level#getName getName()};
-     * </blockquote>
-     *
-     * <p>
-     * If the {@code Level} of the specified logger is {@code null},
-     * which means that this logger's effective level is inherited
-     * from its parent, an empty string will be returned.
-     *
-     * @param loggerName The name of the {@code Logger} to be retrieved.
-     *
-     * @return The name of the log level of the specified logger; or
-     *         an empty string if the log level of the specified logger
-     *         is {@code null}.  If the specified logger does not
-     *         exist, {@code null} is returned.
-     *
-     * @see java.util.logging.Logger#getLevel
-     */
-    String getLoggerLevel(String loggerName);
-
-    /**
-     * Sets the specified logger to the specified new
-     * {@linkplain java.util.logging.Logger#setLevel level}.
-     * If the {@code levelName} is not {@code null}, the level
-     * of the specified logger is set to the parsed
-     * {@link java.util.logging.Level Level}
-     * matching the {@code levelName}.
-     * If the {@code levelName} is {@code null}, the level
-     * of the specified logger is set to {@code null} and
-     * the effective level of the logger is inherited from
-     * its nearest ancestor with a specific (non-null) level value.
-     *
-     * @param loggerName The name of the {@code Logger} to be set.
-     *                   Must be non-null.
-     * @param levelName The name of the level to set on the specified logger,
-     *                 or  {@code null} if setting the level to inherit
-     *                 from its nearest ancestor.
-     *
-     * @throws IllegalArgumentException if the specified logger
-     * does not exist, or {@code levelName} is not a valid level name.
-     *
-     * @throws SecurityException if a security manager exists and if
-     * the caller does not have LoggingPermission("control").
-     *
-     * @see java.util.logging.Logger#setLevel
-     */
-    void setLoggerLevel(String loggerName, String levelName);
-
-    /**
-     * Returns the name of the
-     * {@linkplain java.util.logging.Logger#getParent parent}
-     * for the specified logger.
-     * If the specified logger does not exist, {@code null} is returned.
-     * If the specified logger is the root {@code Logger} in the namespace,
-     * the result will be an empty string.
-     *
-     * @param loggerName The name of a {@code Logger}.
-     *
-     * @return the name of the nearest existing parent logger;
-     *         an empty string if the specified logger is the root logger.
-     *         If the specified logger does not exist, {@code null}
-     *         is returned.
-     */
-    String getParentLoggerName(String loggerName);
-}
diff --git a/ojluni/src/main/java/java/lang/management/PlatformManagedObject.java b/ojluni/src/main/java/java/lang/management/PlatformManagedObject.java
deleted file mode 100755
index b878257..0000000
--- a/ojluni/src/main/java/java/lang/management/PlatformManagedObject.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-package java.lang.management;
-
-import javax.management.ObjectName;
-
-/**
- * A platform managed object is a {@linkplain javax.management.MXBean JMX MXBean}
- * for monitoring and managing a component in the Java platform.
- * Each platform managed object has a unique
- * <a href="ManagementFactory.html#MXBean">object name</a>
- * for the {@linkplain ManagementFactory#getPlatformMBeanServer
- * platform MBeanServer} access.
- * All platform MXBeans will implement this interface.
- *
- * <p>
- * Note:
- * The platform MXBean interfaces (i.e. all subinterfaces
- * of {@code PlatformManagedObject}) are implemented
- * by the Java platform only.  New methods may be added in these interfaces
- * in future Java SE releases.
- * In addition, this {@code PlatformManagedObject} interface is only
- * intended for the management interfaces for the platform to extend but
- * not for applications.
- *
- * @see ManagementFactory
- * @since 1.7
- */
-public interface PlatformManagedObject {
-    /**
-     * Returns an {@link ObjectName ObjectName} instance representing
-     * the object name of this platform managed object.
-     *
-     * @return an {@link ObjectName ObjectName} instance representing
-     * the object name of this platform managed object.
-     */
-    public ObjectName getObjectName();
-}
diff --git a/ojluni/src/main/java/java/lang/management/RuntimeMXBean.java b/ojluni/src/main/java/java/lang/management/RuntimeMXBean.java
deleted file mode 100755
index 62463af..0000000
--- a/ojluni/src/main/java/java/lang/management/RuntimeMXBean.java
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package java.lang.management;
-
-/**
- * The management interface for the runtime system of
- * the Java virtual machine.
- *
- * <p> A Java virtual machine has a single instance of the implementation
- * class of this interface.  This instance implementing this interface is
- * an <a href="ManagementFactory.html#MXBean">MXBean</a>
- * that can be obtained by calling
- * the {@link ManagementFactory#getRuntimeMXBean} method or
- * from the {@link ManagementFactory#getPlatformMBeanServer
- * platform <tt>MBeanServer</tt>} method.
- *
- * <p>The <tt>ObjectName</tt> for uniquely identifying the MXBean for
- * the runtime system within an MBeanServer is:
- * <blockquote>
- *    {@link ManagementFactory#RUNTIME_MXBEAN_NAME
- *           <tt>java.lang:type=Runtime</tt>}
- * </blockquote>
- *
- * It can be obtained by calling the
- * {@link PlatformManagedObject#getObjectName} method.
- *
- * <p> This interface defines several convenient methods for accessing
- * system properties about the Java virtual machine.
- *
- * @see ManagementFactory#getPlatformMXBeans(Class)
- * @see <a href="../../../javax/management/package-summary.html">
- *      JMX Specification.</a>
- * @see <a href="package-summary.html#examples">
- *      Ways to Access MXBeans</a>
- *
- * @author  Mandy Chung
- * @since   1.5
- */
-public interface RuntimeMXBean extends PlatformManagedObject {
-    /**
-     * Returns the name representing the running Java virtual machine.
-     * The returned name string can be any arbitrary string and
-     * a Java virtual machine implementation can choose
-     * to embed platform-specific useful information in the
-     * returned name string.  Each running virtual machine could have
-     * a different name.
-     *
-     * @return the name representing the running Java virtual machine.
-     */
-    public String getName();
-
-    /**
-     * Returns the Java virtual machine implementation name.
-     * This method is equivalent to {@link System#getProperty
-     * System.getProperty("java.vm.name")}.
-     *
-     * @return the Java virtual machine implementation name.
-     *
-     * @throws  java.lang.SecurityException
-     *     if a security manager exists and its
-     *     <code>checkPropertiesAccess</code> method doesn't allow access
-     *     to this system property.
-     * @see java.lang.SecurityManager#checkPropertyAccess(java.lang.String)
-     * @see java.lang.System#getProperty
-     */
-    public String getVmName();
-
-    /**
-     * Returns the Java virtual machine implementation vendor.
-     * This method is equivalent to {@link System#getProperty
-     * System.getProperty("java.vm.vendor")}.
-     *
-     * @return the Java virtual machine implementation vendor.
-     *
-     * @throws  java.lang.SecurityException
-     *     if a security manager exists and its
-     *     <code>checkPropertiesAccess</code> method doesn't allow access
-     *     to this system property.
-     * @see java.lang.SecurityManager#checkPropertyAccess(java.lang.String)
-     * @see java.lang.System#getProperty
-     */
-    public String getVmVendor();
-
-    /**
-     * Returns the Java virtual machine implementation version.
-     * This method is equivalent to {@link System#getProperty
-     * System.getProperty("java.vm.version")}.
-     *
-     * @return the Java virtual machine implementation version.
-     *
-     * @throws  java.lang.SecurityException
-     *     if a security manager exists and its
-     *     <code>checkPropertiesAccess</code> method doesn't allow access
-     *     to this system property.
-     * @see java.lang.SecurityManager#checkPropertyAccess(java.lang.String)
-     * @see java.lang.System#getProperty
-     */
-    public String getVmVersion();
-
-    /**
-     * Returns the Java virtual machine specification name.
-     * This method is equivalent to {@link System#getProperty
-     * System.getProperty("java.vm.specification.name")}.
-     *
-     * @return the Java virtual machine specification name.
-     *
-     * @throws  java.lang.SecurityException
-     *     if a security manager exists and its
-     *     <code>checkPropertiesAccess</code> method doesn't allow access
-     *     to this system property.
-     * @see java.lang.SecurityManager#checkPropertyAccess(java.lang.String)
-     * @see java.lang.System#getProperty
-     */
-    public String getSpecName();
-
-    /**
-     * Returns the Java virtual machine specification vendor.
-     * This method is equivalent to {@link System#getProperty
-     * System.getProperty("java.vm.specification.vendor")}.
-     *
-     * @return the Java virtual machine specification vendor.
-     *
-     * @throws  java.lang.SecurityException
-     *     if a security manager exists and its
-     *     <code>checkPropertiesAccess</code> method doesn't allow access
-     *     to this system property.
-     * @see java.lang.SecurityManager#checkPropertyAccess(java.lang.String)
-     * @see java.lang.System#getProperty
-     */
-    public String getSpecVendor();
-
-    /**
-     * Returns the Java virtual machine specification version.
-     * This method is equivalent to {@link System#getProperty
-     * System.getProperty("java.vm.specification.version")}.
-     *
-     * @return the Java virtual machine specification version.
-     *
-     * @throws  java.lang.SecurityException
-     *     if a security manager exists and its
-     *     <code>checkPropertiesAccess</code> method doesn't allow access
-     *     to this system property.
-     * @see java.lang.SecurityManager#checkPropertyAccess(java.lang.String)
-     * @see java.lang.System#getProperty
-     */
-    public String getSpecVersion();
-
-
-    /**
-     * Returns the version of the specification for the management interface
-     * implemented by the running Java virtual machine.
-     *
-     * @return the version of the specification for the management interface
-     * implemented by the running Java virtual machine.
-     */
-    public String getManagementSpecVersion();
-
-    /**
-     * Returns the Java class path that is used by the system class loader
-     * to search for class files.
-     * This method is equivalent to {@link System#getProperty
-     * System.getProperty("java.class.path")}.
-     *
-     * <p> Multiple paths in the Java class path are separated by the
-     * path separator character of the platform of the Java virtual machine
-     * being monitored.
-     *
-     * @return the Java class path.
-     *
-     * @throws  java.lang.SecurityException
-     *     if a security manager exists and its
-     *     <code>checkPropertiesAccess</code> method doesn't allow access
-     *     to this system property.
-     * @see java.lang.SecurityManager#checkPropertyAccess(java.lang.String)
-     * @see java.lang.System#getProperty
-     */
-    public String getClassPath();
-
-    /**
-     * Returns the Java library path.
-     * This method is equivalent to {@link System#getProperty
-     * System.getProperty("java.library.path")}.
-     *
-     * <p> Multiple paths in the Java library path are separated by the
-     * path separator character of the platform of the Java virtual machine
-     * being monitored.
-     *
-     * @return the Java library path.
-     *
-     * @throws  java.lang.SecurityException
-     *     if a security manager exists and its
-     *     <code>checkPropertiesAccess</code> method doesn't allow access
-     *     to this system property.
-     * @see java.lang.SecurityManager#checkPropertyAccess(java.lang.String)
-     * @see java.lang.System#getProperty
-     */
-    public String getLibraryPath();
-
-    /**
-     * Tests if the Java virtual machine supports the boot class path
-     * mechanism used by the bootstrap class loader to search for class
-     * files.
-     *
-     * @return <tt>true</tt> if the Java virtual machine supports the
-     * class path mechanism; <tt>false</tt> otherwise.
-     */
-    public boolean isBootClassPathSupported();
-
-    /**
-     * Returns the boot class path that is used by the bootstrap class loader
-     * to search for class files.
-     *
-     * <p> Multiple paths in the boot class path are separated by the
-     * path separator character of the platform on which the Java
-     * virtual machine is running.
-     *
-     * <p>A Java virtual machine implementation may not support
-     * the boot class path mechanism for the bootstrap class loader
-     * to search for class files.
-     * The {@link #isBootClassPathSupported} method can be used
-     * to determine if the Java virtual machine supports this method.
-     *
-     * @return the boot class path.
-     *
-     * @throws java.lang.UnsupportedOperationException
-     *     if the Java virtual machine does not support this operation.
-     *
-     * @throws  java.lang.SecurityException
-     *     if a security manager exists and the caller does not have
-     *     ManagementPermission("monitor").
-     */
-    public String getBootClassPath();
-
-    /**
-     * Returns the input arguments passed to the Java virtual machine
-     * which does not include the arguments to the <tt>main</tt> method.
-     * This method returns an empty list if there is no input argument
-     * to the Java virtual machine.
-     * <p>
-     * Some Java virtual machine implementations may take input arguments
-     * from multiple different sources: for examples, arguments passed from
-     * the application that launches the Java virtual machine such as
-     * the 'java' command, environment variables, configuration files, etc.
-     * <p>
-     * Typically, not all command-line options to the 'java' command
-     * are passed to the Java virtual machine.
-     * Thus, the returned input arguments may not
-     * include all command-line options.
-     *
-     * <p>
-     * <b>MBeanServer access</b>:<br>
-     * The mapped type of <tt>List<String></tt> is <tt>String[]</tt>.
-     *
-     * @return a list of <tt>String</tt> objects; each element
-     * is an argument passed to the Java virtual machine.
-     *
-     * @throws  java.lang.SecurityException
-     *     if a security manager exists and the caller does not have
-     *     ManagementPermission("monitor").
-     */
-    public java.util.List<String> getInputArguments();
-
-    /**
-     * Returns the uptime of the Java virtual machine in milliseconds.
-     *
-     * @return uptime of the Java virtual machine in milliseconds.
-     */
-    public long getUptime();
-
-    /**
-     * Returns the start time of the Java virtual machine in milliseconds.
-     * This method returns the approximate time when the Java virtual
-     * machine started.
-     *
-     * @return start time of the Java virtual machine in milliseconds.
-     *
-     */
-    public long getStartTime();
-
-    /**
-     * Returns a map of names and values of all system properties.
-     * This method calls {@link System#getProperties} to get all
-     * system properties.  Properties whose name or value is not
-     * a <tt>String</tt> are omitted.
-     *
-     * <p>
-     * <b>MBeanServer access</b>:<br>
-     * The mapped type of <tt>Map<String,String></tt> is
-     * {@link javax.management.openmbean.TabularData TabularData}
-     * with two items in each row as follows:
-     * <blockquote>
-     * <table border>
-     * <tr>
-     *   <th>Item Name</th>
-     *   <th>Item Type</th>
-     *   </tr>
-     * <tr>
-     *   <td><tt>key</tt></td>
-     *   <td><tt>String</tt></td>
-     *   </tr>
-     * <tr>
-     *   <td><tt>value</tt></td>
-     *   <td><tt>String</tt></td>
-     *   </tr>
-     * </table>
-     * </blockquote>
-     *
-     * @return a map of names and values of all system properties.
-     *
-     * @throws  java.lang.SecurityException
-     *     if a security manager exists and its
-     *     <code>checkPropertiesAccess</code> method doesn't allow access
-     *     to the system properties.
-     */
-    public java.util.Map<String, String> getSystemProperties();
-}
diff --git a/ojluni/src/main/java/java/lang/management/ThreadInfo.java b/ojluni/src/main/java/java/lang/management/ThreadInfo.java
deleted file mode 100755
index a68850f..0000000
--- a/ojluni/src/main/java/java/lang/management/ThreadInfo.java
+++ /dev/null
@@ -1,839 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package java.lang.management;
-
-import javax.management.openmbean.CompositeData;
-import sun.management.ManagementFactoryHelper;
-import sun.management.ThreadInfoCompositeData;
-import static java.lang.Thread.State.*;
-
-/**
- * Thread information. <tt>ThreadInfo</tt> contains the information
- * about a thread including:
- * <h4>General thread information</h4>
- * <ul>
- *   <li>Thread ID.</li>
- *   <li>Name of the thread.</li>
- * </ul>
- *
- * <h4>Execution information</h4>
- * <ul>
- *   <li>Thread state.</li>
- *   <li>The object upon which the thread is blocked due to:
- *       <ul>
- *       <li>waiting to enter a synchronization block/method, or</li>
- *       <li>waiting to be notified in a {@link Object#wait Object.wait} method,
- *           or</li>
- *       <li>parking due to a {@link java.util.concurrent.locks.LockSupport#park
- *           LockSupport.park} call.</li>
- *       </ul>
- *   </li>
- *   <li>The ID of the thread that owns the object
- *       that the thread is blocked.</li>
- *   <li>Stack trace of the thread.</li>
- *   <li>List of object monitors locked by the thread.</li>
- *   <li>List of <a href="LockInfo.html#OwnableSynchronizer">
- *       ownable synchronizers</a> locked by the thread.</li>
- * </ul>
- *
- * <h4><a name="SyncStats">Synchronization Statistics</a></h4>
- * <ul>
- *   <li>The number of times that the thread has blocked for
- *       synchronization or waited for notification.</li>
- *   <li>The accumulated elapsed time that the thread has blocked
- *       for synchronization or waited for notification
- *       since {@link ThreadMXBean#setThreadContentionMonitoringEnabled
- *       thread contention monitoring}
- *       was enabled. Some Java virtual machine implementation
- *       may not support this.  The
- *       {@link ThreadMXBean#isThreadContentionMonitoringSupported()}
- *       method can be used to determine if a Java virtual machine
- *       supports this.</li>
- * </ul>
- *
- * <p>This thread information class is designed for use in monitoring of
- * the system, not for synchronization control.
- *
- * <h4>MXBean Mapping</h4>
- * <tt>ThreadInfo</tt> is mapped to a {@link CompositeData CompositeData}
- * with attributes as specified in
- * the {@link #from from} method.
- *
- * @see ThreadMXBean#getThreadInfo
- * @see ThreadMXBean#dumpAllThreads
- *
- * @author  Mandy Chung
- * @since   1.5
- */
-
-public class ThreadInfo {
-    private String       threadName;
-    private long         threadId;
-    private long         blockedTime;
-    private long         blockedCount;
-    private long         waitedTime;
-    private long         waitedCount;
-    private LockInfo     lock;
-    private String       lockName;
-    private long         lockOwnerId;
-    private String       lockOwnerName;
-    private boolean      inNative;
-    private boolean      suspended;
-    private Thread.State threadState;
-    private StackTraceElement[] stackTrace;
-    private MonitorInfo[]       lockedMonitors;
-    private LockInfo[]          lockedSynchronizers;
-
-    private static MonitorInfo[] EMPTY_MONITORS = new MonitorInfo[0];
-    private static LockInfo[] EMPTY_SYNCS = new LockInfo[0];
-
-    /**
-     * Constructor of ThreadInfo created by the JVM
-     *
-     * @param t             Thread
-     * @param state         Thread state
-     * @param lockObj       Object on which the thread is blocked
-     * @param lockOwner     the thread holding the lock
-     * @param blockedCount  Number of times blocked to enter a lock
-     * @param blockedTime   Approx time blocked to enter a lock
-     * @param waitedCount   Number of times waited on a lock
-     * @param waitedTime    Approx time waited on a lock
-     * @param stackTrace    Thread stack trace
-     */
-    private ThreadInfo(Thread t, int state, Object lockObj, Thread lockOwner,
-                       long blockedCount, long blockedTime,
-                       long waitedCount, long waitedTime,
-                       StackTraceElement[] stackTrace) {
-        initialize(t, state, lockObj, lockOwner,
-                   blockedCount, blockedTime,
-                   waitedCount, waitedTime, stackTrace,
-                   EMPTY_MONITORS, EMPTY_SYNCS);
-    }
-
-    /**
-     * Constructor of ThreadInfo created by the JVM
-     * for {@link ThreadMXBean#getThreadInfo(long[],boolean,boolean)}
-     * and {@link ThreadMXBean#dumpAllThreads}
-     *
-     * @param t             Thread
-     * @param state         Thread state
-     * @param lockObj       Object on which the thread is blocked
-     * @param lockOwner     the thread holding the lock
-     * @param blockedCount  Number of times blocked to enter a lock
-     * @param blockedTime   Approx time blocked to enter a lock
-     * @param waitedCount   Number of times waited on a lock
-     * @param waitedTime    Approx time waited on a lock
-     * @param stackTrace    Thread stack trace
-     * @param lockedMonitors List of locked monitors
-     * @param lockedSynchronizers List of locked synchronizers
-     */
-    private ThreadInfo(Thread t, int state, Object lockObj, Thread lockOwner,
-                       long blockedCount, long blockedTime,
-                       long waitedCount, long waitedTime,
-                       StackTraceElement[] stackTrace,
-                       Object[] monitors,
-                       int[] stackDepths,
-                       Object[] synchronizers) {
-        int numMonitors = (monitors == null ? 0 : monitors.length);
-        MonitorInfo[] lockedMonitors;
-        if (numMonitors == 0) {
-            lockedMonitors = EMPTY_MONITORS;
-        } else {
-            lockedMonitors = new MonitorInfo[numMonitors];
-            for (int i = 0; i < numMonitors; i++) {
-                Object lock = monitors[i];
-                String className = lock.getClass().getName();
-                int identityHashCode = System.identityHashCode(lock);
-                int depth = stackDepths[i];
-                StackTraceElement ste = (depth >= 0 ? stackTrace[depth]
-                                                    : null);
-                lockedMonitors[i] = new MonitorInfo(className,
-                                                    identityHashCode,
-                                                    depth,
-                                                    ste);
-            }
-        }
-
-        int numSyncs = (synchronizers == null ? 0 : synchronizers.length);
-        LockInfo[] lockedSynchronizers;
-        if (numSyncs == 0) {
-            lockedSynchronizers = EMPTY_SYNCS;
-        } else {
-            lockedSynchronizers = new LockInfo[numSyncs];
-            for (int i = 0; i < numSyncs; i++) {
-                Object lock = synchronizers[i];
-                String className = lock.getClass().getName();
-                int identityHashCode = System.identityHashCode(lock);
-                lockedSynchronizers[i] = new LockInfo(className,
-                                                      identityHashCode);
-            }
-        }
-
-        initialize(t, state, lockObj, lockOwner,
-                   blockedCount, blockedTime,
-                   waitedCount, waitedTime, stackTrace,
-                   lockedMonitors, lockedSynchronizers);
-    }
-
-    /**
-     * Initialize ThreadInfo object
-     *
-     * @param t             Thread
-     * @param state         Thread state
-     * @param lockObj       Object on which the thread is blocked
-     * @param lockOwner     the thread holding the lock
-     * @param blockedCount  Number of times blocked to enter a lock
-     * @param blockedTime   Approx time blocked to enter a lock
-     * @param waitedCount   Number of times waited on a lock
-     * @param waitedTime    Approx time waited on a lock
-     * @param stackTrace    Thread stack trace
-     * @param lockedMonitors List of locked monitors
-     * @param lockedSynchronizers List of locked synchronizers
-     */
-    private void initialize(Thread t, int state, Object lockObj, Thread lockOwner,
-                            long blockedCount, long blockedTime,
-                            long waitedCount, long waitedTime,
-                            StackTraceElement[] stackTrace,
-                            MonitorInfo[] lockedMonitors,
-                            LockInfo[] lockedSynchronizers) {
-        this.threadId = t.getId();
-        this.threadName = t.getName();
-        this.threadState = ManagementFactoryHelper.toThreadState(state);
-        this.suspended = ManagementFactoryHelper.isThreadSuspended(state);
-        this.inNative = ManagementFactoryHelper.isThreadRunningNative(state);
-        this.blockedCount = blockedCount;
-        this.blockedTime = blockedTime;
-        this.waitedCount = waitedCount;
-        this.waitedTime = waitedTime;
-
-        if (lockObj == null) {
-            this.lock = null;
-            this.lockName = null;
-        } else {
-            this.lock = new LockInfo(lockObj);
-            this.lockName =
-                lock.getClassName() + '@' +
-                    Integer.toHexString(lock.getIdentityHashCode());
-        }
-        if (lockOwner == null) {
-            this.lockOwnerId = -1;
-            this.lockOwnerName = null;
-        } else {
-            this.lockOwnerId = lockOwner.getId();
-            this.lockOwnerName = lockOwner.getName();
-        }
-        if (stackTrace == null) {
-            this.stackTrace = NO_STACK_TRACE;
-        } else {
-            this.stackTrace = stackTrace;
-        }
-        this.lockedMonitors = lockedMonitors;
-        this.lockedSynchronizers = lockedSynchronizers;
-    }
-
-    /*
-     * Constructs a <tt>ThreadInfo</tt> object from a
-     * {@link CompositeData CompositeData}.
-     */
-    private ThreadInfo(CompositeData cd) {
-        ThreadInfoCompositeData ticd = ThreadInfoCompositeData.getInstance(cd);
-
-        threadId = ticd.threadId();
-        threadName = ticd.threadName();
-        blockedTime = ticd.blockedTime();
-        blockedCount = ticd.blockedCount();
-        waitedTime = ticd.waitedTime();
-        waitedCount = ticd.waitedCount();
-        lockName = ticd.lockName();
-        lockOwnerId = ticd.lockOwnerId();
-        lockOwnerName = ticd.lockOwnerName();
-        threadState = ticd.threadState();
-        suspended = ticd.suspended();
-        inNative = ticd.inNative();
-        stackTrace = ticd.stackTrace();
-
-        // 6.0 attributes
-        if (ticd.isCurrentVersion()) {
-            lock = ticd.lockInfo();
-            lockedMonitors = ticd.lockedMonitors();
-            lockedSynchronizers = ticd.lockedSynchronizers();
-        } else {
-            // lockInfo is a new attribute added in 1.6 ThreadInfo
-            // If cd is a 5.0 version, construct the LockInfo object
-            //  from the lockName value.
-            if (lockName != null) {
-                String result[] = lockName.split("@");
-                if (result.length == 2) {
-                    int identityHashCode = Integer.parseInt(result[1], 16);
-                    lock = new LockInfo(result[0], identityHashCode);
-                } else {
-                    assert result.length == 2;
-                    lock = null;
-                }
-            } else {
-                lock = null;
-            }
-            lockedMonitors = EMPTY_MONITORS;
-            lockedSynchronizers = EMPTY_SYNCS;
-        }
-    }
-
-    /**
-     * Returns the ID of the thread associated with this <tt>ThreadInfo</tt>.
-     *
-     * @return the ID of the associated thread.
-     */
-    public long getThreadId() {
-        return threadId;
-    }
-
-    /**
-     * Returns the name of the thread associated with this <tt>ThreadInfo</tt>.
-     *
-     * @return the name of the associated thread.
-     */
-    public String getThreadName() {
-        return threadName;
-    }
-
-    /**
-     * Returns the state of the thread associated with this <tt>ThreadInfo</tt>.
-     *
-     * @return <tt>Thread.State</tt> of the associated thread.
-     */
-    public Thread.State getThreadState() {
-         return threadState;
-    }
-
-    /**
-     * Returns the approximate accumulated elapsed time (in milliseconds)
-     * that the thread associated with this <tt>ThreadInfo</tt>
-     * has blocked to enter or reenter a monitor
-     * since thread contention monitoring is enabled.
-     * I.e. the total accumulated time the thread has been in the
-     * {@link java.lang.Thread.State#BLOCKED BLOCKED} state since thread
-     * contention monitoring was last enabled.
-     * This method returns <tt>-1</tt> if thread contention monitoring
-     * is disabled.
-     *
-     * <p>The Java virtual machine may measure the time with a high
-     * resolution timer.  This statistic is reset when
-     * the thread contention monitoring is reenabled.
-     *
-     * @return the approximate accumulated elapsed time in milliseconds
-     * that a thread entered the <tt>BLOCKED</tt> state;
-     * <tt>-1</tt> if thread contention monitoring is disabled.
-     *
-     * @throws java.lang.UnsupportedOperationException if the Java
-     * virtual machine does not support this operation.
-     *
-     * @see ThreadMXBean#isThreadContentionMonitoringSupported
-     * @see ThreadMXBean#setThreadContentionMonitoringEnabled
-     */
-    public long getBlockedTime() {
-        return blockedTime;
-    }
-
-    /**
-     * Returns the total number of times that
-     * the thread associated with this <tt>ThreadInfo</tt>
-     * blocked to enter or reenter a monitor.
-     * I.e. the number of times a thread has been in the
-     * {@link java.lang.Thread.State#BLOCKED BLOCKED} state.
-     *
-     * @return the total number of times that the thread
-     * entered the <tt>BLOCKED</tt> state.
-     */
-    public long getBlockedCount() {
-        return blockedCount;
-    }
-
-    /**
-     * Returns the approximate accumulated elapsed time (in milliseconds)
-     * that the thread associated with this <tt>ThreadInfo</tt>
-     * has waited for notification
-     * since thread contention monitoring is enabled.
-     * I.e. the total accumulated time the thread has been in the
-     * {@link java.lang.Thread.State#WAITING WAITING}
-     * or {@link java.lang.Thread.State#TIMED_WAITING TIMED_WAITING} state
-     * since thread contention monitoring is enabled.
-     * This method returns <tt>-1</tt> if thread contention monitoring
-     * is disabled.
-     *
-     * <p>The Java virtual machine may measure the time with a high
-     * resolution timer.  This statistic is reset when
-     * the thread contention monitoring is reenabled.
-     *
-     * @return the approximate accumulated elapsed time in milliseconds
-     * that a thread has been in the <tt>WAITING</tt> or
-     * <tt>TIMED_WAITING</tt> state;
-     * <tt>-1</tt> if thread contention monitoring is disabled.
-     *
-     * @throws java.lang.UnsupportedOperationException if the Java
-     * virtual machine does not support this operation.
-     *
-     * @see ThreadMXBean#isThreadContentionMonitoringSupported
-     * @see ThreadMXBean#setThreadContentionMonitoringEnabled
-     */
-    public long getWaitedTime() {
-        return waitedTime;
-    }
-
-    /**
-     * Returns the total number of times that
-     * the thread associated with this <tt>ThreadInfo</tt>
-     * waited for notification.
-     * I.e. the number of times that a thread has been
-     * in the {@link java.lang.Thread.State#WAITING WAITING}
-     * or {@link java.lang.Thread.State#TIMED_WAITING TIMED_WAITING} state.
-     *
-     * @return the total number of times that the thread
-     * was in the <tt>WAITING</tt> or <tt>TIMED_WAITING</tt> state.
-     */
-    public long getWaitedCount() {
-        return waitedCount;
-    }
-
-    /**
-     * Returns the <tt>LockInfo</tt> of an object for which
-     * the thread associated with this <tt>ThreadInfo</tt>
-     * is blocked waiting.
-     * A thread can be blocked waiting for one of the following:
-     * <ul>
-     * <li>an object monitor to be acquired for entering or reentering
-     *     a synchronization block/method.
-     *     <br>The thread is in the {@link java.lang.Thread.State#BLOCKED BLOCKED}
-     *     state waiting to enter the <tt>synchronized</tt> statement
-     *     or method.
-     *     <p></li>
-     * <li>an object monitor to be notified by another thread.
-     *     <br>The thread is in the {@link java.lang.Thread.State#WAITING WAITING}
-     *     or {@link java.lang.Thread.State#TIMED_WAITING TIMED_WAITING} state
-     *     due to a call to the {@link Object#wait Object.wait} method.
-     *     <p></li>
-     * <li>a synchronization object responsible for the thread parking.
-     *     <br>The thread is in the {@link java.lang.Thread.State#WAITING WAITING}
-     *     or {@link java.lang.Thread.State#TIMED_WAITING TIMED_WAITING} state
-     *     due to a call to the
-     *     {@link java.util.concurrent.locks.LockSupport#park(Object)
-     *     LockSupport.park} method.  The synchronization object
-     *     is the object returned from
-     *     {@link java.util.concurrent.locks.LockSupport#getBlocker
-     *     LockSupport.getBlocker} method. Typically it is an
-     *     <a href="LockInfo.html#OwnableSynchronizer"> ownable synchronizer</a>
-     *     or a {@link java.util.concurrent.locks.Condition Condition}.</li>
-     * </ul>
-     *
-     * <p>This method returns <tt>null</tt> if the thread is not in any of
-     * the above conditions.
-     *
-     * @return <tt>LockInfo</tt> of an object for which the thread
-     *         is blocked waiting if any; <tt>null</tt> otherwise.
-     * @since 1.6
-     */
-    public LockInfo getLockInfo() {
-        return lock;
-    }
-
-    /**
-     * Returns the {@link LockInfo#toString string representation}
-     * of an object for which the thread associated with this
-     * <tt>ThreadInfo</tt> is blocked waiting.
-     * This method is equivalent to calling:
-     * <blockquote>
-     * <pre>
-     * getLockInfo().toString()
-     * </pre></blockquote>
-     *
-     * <p>This method will return <tt>null</tt> if this thread is not blocked
-     * waiting for any object or if the object is not owned by any thread.
-     *
-     * @return the string representation of the object on which
-     * the thread is blocked if any;
-     * <tt>null</tt> otherwise.
-     *
-     * @see #getLockInfo
-     */
-    public String getLockName() {
-        return lockName;
-    }
-
-    /**
-     * Returns the ID of the thread which owns the object
-     * for which the thread associated with this <tt>ThreadInfo</tt>
-     * is blocked waiting.
-     * This method will return <tt>-1</tt> if this thread is not blocked
-     * waiting for any object or if the object is not owned by any thread.
-     *
-     * @return the thread ID of the owner thread of the object
-     * this thread is blocked on;
-     * <tt>-1</tt> if this thread is not blocked
-     * or if the object lis not owned by any thread.
-     *
-     * @see #getLockInfo
-     */
-    public long getLockOwnerId() {
-        return lockOwnerId;
-    }
-
-    /**
-     * Returns the name of the thread which owns the object
-     * for which the thread associated with this <tt>ThreadInfo</tt>
-     * is blocked waiting.
-     * This method will return <tt>null</tt> if this thread is not blocked
-     * waiting for any object or if the object is not owned by any thread.
-     *
-     * @return the name of the thread that owns the object
-     * this thread is blocked on;
-     * <tt>null</tt> if this thread is not blocked
-     * or if the object is not owned by any thread.
-     *
-     * @see #getLockInfo
-     */
-    public String getLockOwnerName() {
-        return lockOwnerName;
-    }
-
-    /**
-     * Returns the stack trace of the thread
-     * associated with this <tt>ThreadInfo</tt>.
-     * If no stack trace was requested for this thread info, this method
-     * will return a zero-length array.
-     * If the returned array is of non-zero length then the first element of
-     * the array represents the top of the stack, which is the most recent
-     * method invocation in the sequence.  The last element of the array
-     * represents the bottom of the stack, which is the least recent method
-     * invocation in the sequence.
-     *
-     * <p>Some Java virtual machines may, under some circumstances, omit one
-     * or more stack frames from the stack trace.  In the extreme case,
-     * a virtual machine that has no stack trace information concerning
-     * the thread associated with this <tt>ThreadInfo</tt>
-     * is permitted to return a zero-length array from this method.
-     *
-     * @return an array of <tt>StackTraceElement</tt> objects of the thread.
-     */
-    public StackTraceElement[] getStackTrace() {
-        return stackTrace;
-    }
-
-    /**
-     * Tests if the thread associated with this <tt>ThreadInfo</tt>
-     * is suspended.  This method returns <tt>true</tt> if
-     * {@link Thread#suspend} has been called.
-     *
-     * @return <tt>true</tt> if the thread is suspended;
-     *         <tt>false</tt> otherwise.
-     */
-    public boolean isSuspended() {
-         return suspended;
-    }
-
-    /**
-     * Tests if the thread associated with this <tt>ThreadInfo</tt>
-     * is executing native code via the Java Native Interface (JNI).
-     * The JNI native code does not include
-     * the virtual machine support code or the compiled native
-     * code generated by the virtual machine.
-     *
-     * @return <tt>true</tt> if the thread is executing native code;
-     *         <tt>false</tt> otherwise.
-     */
-    public boolean isInNative() {
-         return inNative;
-    }
-
-    /**
-     * Returns a string representation of this thread info.
-     * The format of this string depends on the implementation.
-     * The returned string will typically include
-     * the {@linkplain #getThreadName thread name},
-     * the {@linkplain #getThreadId thread ID},
-     * its {@linkplain #getThreadState state},
-     * and a {@linkplain #getStackTrace stack trace} if any.
-     *
-     * @return a string representation of this thread info.
-     */
-    public String toString() {
-        StringBuilder sb = new StringBuilder("\"" + getThreadName() + "\"" +
-                                             " Id=" + getThreadId() + " " +
-                                             getThreadState());
-        if (getLockName() != null) {
-            sb.append(" on " + getLockName());
-        }
-        if (getLockOwnerName() != null) {
-            sb.append(" owned by \"" + getLockOwnerName() +
-                      "\" Id=" + getLockOwnerId());
-        }
-        if (isSuspended()) {
-            sb.append(" (suspended)");
-        }
-        if (isInNative()) {
-            sb.append(" (in native)");
-        }
-        sb.append('\n');
-        int i = 0;
-        for (; i < stackTrace.length && i < MAX_FRAMES; i++) {
-            StackTraceElement ste = stackTrace[i];
-            sb.append("\tat " + ste.toString());
-            sb.append('\n');
-            if (i == 0 && getLockInfo() != null) {
-                Thread.State ts = getThreadState();
-                switch (ts) {
-                    case BLOCKED:
-                        sb.append("\t-  blocked on " + getLockInfo());
-                        sb.append('\n');
-                        break;
-                    case WAITING:
-                        sb.append("\t-  waiting on " + getLockInfo());
-                        sb.append('\n');
-                        break;
-                    case TIMED_WAITING:
-                        sb.append("\t-  waiting on " + getLockInfo());
-                        sb.append('\n');
-                        break;
-                    default:
-                }
-            }
-
-            for (MonitorInfo mi : lockedMonitors) {
-                if (mi.getLockedStackDepth() == i) {
-                    sb.append("\t-  locked " + mi);
-                    sb.append('\n');
-                }
-            }
-       }
-       if (i < stackTrace.length) {
-           sb.append("\t...");
-           sb.append('\n');
-       }
-
-       LockInfo[] locks = getLockedSynchronizers();
-       if (locks.length > 0) {
-           sb.append("\n\tNumber of locked synchronizers = " + locks.length);
-           sb.append('\n');
-           for (LockInfo li : locks) {
-               sb.append("\t- " + li);
-               sb.append('\n');
-           }
-       }
-       sb.append('\n');
-       return sb.toString();
-    }
-    private static final int MAX_FRAMES = 8;
-
-    /**
-     * Returns a <tt>ThreadInfo</tt> object represented by the
-     * given <tt>CompositeData</tt>.
-     * The given <tt>CompositeData</tt> must contain the following attributes
-     * unless otherwise specified below:
-     * <blockquote>
-     * <table border>
-     * <tr>
-     *   <th align=left>Attribute Name</th>
-     *   <th align=left>Type</th>
-     * </tr>
-     * <tr>
-     *   <td>threadId</td>
-     *   <td><tt>java.lang.Long</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>threadName</td>
-     *   <td><tt>java.lang.String</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>threadState</td>
-     *   <td><tt>java.lang.String</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>suspended</td>
-     *   <td><tt>java.lang.Boolean</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>inNative</td>
-     *   <td><tt>java.lang.Boolean</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>blockedCount</td>
-     *   <td><tt>java.lang.Long</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>blockedTime</td>
-     *   <td><tt>java.lang.Long</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>waitedCount</td>
-     *   <td><tt>java.lang.Long</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>waitedTime</td>
-     *   <td><tt>java.lang.Long</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>lockInfo</td>
-     *   <td><tt>javax.management.openmbean.CompositeData</tt>
-     *       - the mapped type for {@link LockInfo} as specified in the
-     *       <a href="../../../javax/management/MXBean.html#mapping-rules">
-     *       type mapping rules</a> of
-     *       {@linkplain javax.management.MXBean MXBeans}.
-     *       <p>
-     *       If <tt>cd</tt> does not contain this attribute,
-     *       the <tt>LockInfo</tt> object will be constructed from
-     *       the value of the <tt>lockName</tt> attribute. </td>
-     * </tr>
-     * <tr>
-     *   <td>lockName</td>
-     *   <td><tt>java.lang.String</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>lockOwnerId</td>
-     *   <td><tt>java.lang.Long</tt></td>
-     * </tr>
-     * <tr>
-     *   <td>lockOwnerName</td>
-     *   <td><tt>java.lang.String</tt></td>
-     * </tr>
-     * <tr>
-     *   <td><a name="StackTrace">stackTrace</a></td>
-     *   <td><tt>javax.management.openmbean.CompositeData[]</tt>
-     *       <p>
-     *       Each element is a <tt>CompositeData</tt> representing
-     *       StackTraceElement containing the following attributes:
-     *       <blockquote>
-     *       <table cellspacing=1 cellpadding=0>
-     *       <tr>
-     *         <th align=left>Attribute Name</th>
-     *         <th align=left>Type</th>
-     *       </tr>
-     *       <tr>
-     *         <td>className</td>
-     *         <td><tt>java.lang.String</tt></td>
-     *       </tr>
-     *       <tr>
-     *         <td>methodName</td>
-     *         <td><tt>java.lang.String</tt></td>
-     *       </tr>
-     *       <tr>
-     *         <td>fileName</td>
-     *         <td><tt>java.lang.String</tt></td>
-     *       </tr>
-     *       <tr>
-     *         <td>lineNumber</td>
-     *         <td><tt>java.lang.Integer</tt></td>
-     *       </tr>
-     *       <tr>
-     *         <td>nativeMethod</td>
-     *         <td><tt>java.lang.Boolean</tt></td>
-     *       </tr>
-     *       </table>
-     *       </blockquote>
-     *   </td>
-     * </tr>
-     * <tr>
-     *   <td>lockedMonitors</td>
-     *   <td><tt>javax.management.openmbean.CompositeData[]</tt>
-     *       whose element type is the mapped type for
-     *       {@link MonitorInfo} as specified in the
-     *       {@link MonitorInfo#from Monitor.from} method.
-     *       <p>
-     *       If <tt>cd</tt> does not contain this attribute,
-     *       this attribute will be set to an empty array. </td>
-     * </tr>
-     * <tr>
-     *   <td>lockedSynchronizers</td>
-     *   <td><tt>javax.management.openmbean.CompositeData[]</tt>
-     *       whose element type is the mapped type for
-     *       {@link LockInfo} as specified in the
-     *       <a href="../../../javax/management/MXBean.html#mapping-rules">
-     *       type mapping rules</a> of
-     *       {@linkplain javax.management.MXBean MXBeans}.
-     *       <p>
-     *       If <tt>cd</tt> does not contain this attribute,
-     *       this attribute will be set to an empty array. </td>
-     * </tr>
-     * </table>
-     * </blockquote>
-     *
-     * @param cd <tt>CompositeData</tt> representing a <tt>ThreadInfo</tt>
-     *
-     * @throws IllegalArgumentException if <tt>cd</tt> does not
-     *   represent a <tt>ThreadInfo</tt> with the attributes described
-     *   above.
-     *
-     * @return a <tt>ThreadInfo</tt> object represented
-     *         by <tt>cd</tt> if <tt>cd</tt> is not <tt>null</tt>;
-     *         <tt>null</tt> otherwise.
-     */
-    public static ThreadInfo from(CompositeData cd) {
-        if (cd == null) {
-            return null;
-        }
-
-        if (cd instanceof ThreadInfoCompositeData) {
-            return ((ThreadInfoCompositeData) cd).getThreadInfo();
-        } else {
-            return new ThreadInfo(cd);
-        }
-    }
-
-    /**
-     * Returns an array of {@link MonitorInfo} objects, each of which
-     * represents an object monitor currently locked by the thread
-     * associated with this <tt>ThreadInfo</tt>.
-     * If no locked monitor was requested for this thread info or
-     * no monitor is locked by the thread, this method
-     * will return a zero-length array.
-     *
-     * @return an array of <tt>MonitorInfo</tt> objects representing
-     *         the object monitors locked by the thread.
-     *
-     * @since 1.6
-     */
-    public MonitorInfo[] getLockedMonitors() {
-        return lockedMonitors;
-    }
-
-    /**
-     * Returns an array of {@link LockInfo} objects, each of which
-     * represents an <a href="LockInfo.html#OwnableSynchronizer">ownable
-     * synchronizer</a> currently locked by the thread associated with
-     * this <tt>ThreadInfo</tt>.  If no locked synchronizer was
-     * requested for this thread info or no synchronizer is locked by
-     * the thread, this method will return a zero-length array.
-     *
-     * @return an array of <tt>LockInfo</tt> objects representing
-     *         the ownable synchronizers locked by the thread.
-     *
-     * @since 1.6
-     */
-    public LockInfo[] getLockedSynchronizers() {
-       // represents an <a href="LockInfo.html#OwnableSynchronizer">
-        return lockedSynchronizers;
-    }
-
-    private static final StackTraceElement[] NO_STACK_TRACE =
-        new StackTraceElement[0];
-}
diff --git a/ojluni/src/main/java/java/lang/management/ThreadMXBean.java b/ojluni/src/main/java/java/lang/management/ThreadMXBean.java
deleted file mode 100755
index f804af1..0000000
--- a/ojluni/src/main/java/java/lang/management/ThreadMXBean.java
+++ /dev/null
@@ -1,806 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package java.lang.management;
-
-import java.util.Map;
-
-/**
- * The management interface for the thread system of
- * the Java virtual machine.
- *
- * <p> A Java virtual machine has a single instance of the implementation
- * class of this interface.  This instance implementing this interface is
- * an <a href="ManagementFactory.html#MXBean">MXBean</a>
- * that can be obtained by calling
- * the {@link ManagementFactory#getThreadMXBean} method or
- * from the {@link ManagementFactory#getPlatformMBeanServer
- * platform <tt>MBeanServer</tt>} method.
- *
- * <p>The <tt>ObjectName</tt> for uniquely identifying the MXBean for
- * the thread system within an MBeanServer is:
- * <blockquote>
- *    {@link ManagementFactory#THREAD_MXBEAN_NAME
- *           <tt>java.lang:type=Threading</tt>}
- * </blockquote>
- *
- * It can be obtained by calling the
- * {@link PlatformManagedObject#getObjectName} method.
- *
- * <h4>Thread ID</h4>
- * Thread ID is a positive long value returned by calling the
- * {@link java.lang.Thread#getId} method for a thread.
- * The thread ID is unique during its lifetime.  When a thread
- * is terminated, this thread ID may be reused.
- *
- * <p> Some methods in this interface take a thread ID or an array
- * of thread IDs as the input parameter and return per-thread information.
- *
- * <h4>Thread CPU time</h4>
- * A Java virtual machine implementation may support measuring
- * the CPU time for the current thread, for any thread, or for no threads.
- *
- * <p>
- * The {@link #isThreadCpuTimeSupported} method can be used to determine
- * if a Java virtual machine supports measuring of the CPU time for any
- * thread.  The {@link #isCurrentThreadCpuTimeSupported} method can
- * be used to determine if a Java virtual machine supports measuring of
- * the CPU time for the current  thread.
- * A Java virtual machine implementation that supports CPU time measurement
- * for any thread will also support that for the current thread.
- *
- * <p> The CPU time provided by this interface has nanosecond precision
- * but not necessarily nanosecond accuracy.
- *
- * <p>
- * A Java virtual machine may disable CPU time measurement
- * by default.
- * The {@link #isThreadCpuTimeEnabled} and {@link #setThreadCpuTimeEnabled}
- * methods can be used to test if CPU time measurement is enabled
- * and to enable/disable this support respectively.
- * Enabling thread CPU measurement could be expensive in some
- * Java virtual machine implementations.
- *
- * <h4>Thread Contention Monitoring</h4>
- * Some Java virtual machines may support thread contention monitoring.
- * When thread contention monitoring is enabled, the accumulated elapsed
- * time that the thread has blocked for synchronization or waited for
- * notification will be collected and returned in the
- * <a href="ThreadInfo.html#SyncStats"><tt>ThreadInfo</tt></a> object.
- * <p>
- * The {@link #isThreadContentionMonitoringSupported} method can be used to
- * determine if a Java virtual machine supports thread contention monitoring.
- * The thread contention monitoring is disabled by default.  The
- * {@link #setThreadContentionMonitoringEnabled} method can be used to enable
- * thread contention monitoring.
- *
- * <h4>Synchronization Information and Deadlock Detection</h4>
- * Some Java virtual machines may support monitoring of
- * {@linkplain #isObjectMonitorUsageSupported object monitor usage} and
- * {@linkplain #isSynchronizerUsageSupported ownable synchronizer usage}.
- * The {@link #getThreadInfo(long[], boolean, boolean)} and
- * {@link #dumpAllThreads} methods can be used to obtain the thread stack trace
- * and synchronization information including which
- * {@linkplain LockInfo <i>lock</i>} a thread is blocked to
- * acquire or waiting on and which locks the thread currently owns.
- * <p>
- * The <tt>ThreadMXBean</tt> interface provides the
- * {@link #findMonitorDeadlockedThreads} and
- * {@link #findDeadlockedThreads} methods to find deadlocks in
- * the running application.
- *
- * @see ManagementFactory#getPlatformMXBeans(Class)
- * @see <a href="../../../javax/management/package-summary.html">
- *      JMX Specification.</a>
- * @see <a href="package-summary.html#examples">
- *      Ways to Access MXBeans</a>
- *
- * @author  Mandy Chung
- * @since   1.5
- */
-
-public interface ThreadMXBean extends PlatformManagedObject {
-    /**
-     * Returns the current number of live threads including both
-     * daemon and non-daemon threads.
-     *
-     * @return the current number of live threads.
-     */
-    public int getThreadCount();
-
-    /**
-     * Returns the peak live thread count since the Java virtual machine
-     * started or peak was reset.
-     *
-     * @return the peak live thread count.
-     */
-    public int getPeakThreadCount();
-
-    /**
-     * Returns the total number of threads created and also started
-     * since the Java virtual machine started.
-     *
-     * @return the total number of threads started.
-     */
-    public long getTotalStartedThreadCount();
-
-    /**
-     * Returns the current number of live daemon threads.
-     *
-     * @return the current number of live daemon threads.
-     */
-    public int getDaemonThreadCount();
-
-    /**
-     * Returns all live thread IDs.
-     * Some threads included in the returned array
-     * may have been terminated when this method returns.
-     *
-     * @return an array of <tt>long</tt>, each is a thread ID.
-     *
-     * @throws java.lang.SecurityException if a security manager
-     *         exists and the caller does not have
-     *         ManagementPermission("monitor").
-     */
-    public long[] getAllThreadIds();
-
-    /**
-     * Returns the thread info for a thread of the specified
-     * <tt>id</tt> with no stack trace.
-     * This method is equivalent to calling:
-     * <blockquote>
-     *   {@link #getThreadInfo(long, int) getThreadInfo(id, 0);}
-     * </blockquote>
-     *
-     * <p>
-     * This method returns a <tt>ThreadInfo</tt> object representing
-     * the thread information for the thread of the specified ID.
-     * The stack trace, locked monitors, and locked synchronizers
-     * in the returned <tt>ThreadInfo</tt> object will
-     * be empty.
-     *
-     * If a thread of the given ID is not alive or does not exist,
-     * this method will return <tt>null</tt>.  A thread is alive if
-     * it has been started and has not yet died.
-     *
-     * <p>
-     * <b>MBeanServer access</b>:<br>
-     * The mapped type of <tt>ThreadInfo</tt> is
-     * <tt>CompositeData</tt> with attributes as specified in the
-     * {@link ThreadInfo#from ThreadInfo.from} method.
-     *
-     * @param id the thread ID of the thread. Must be positive.
-     *
-     * @return a {@link ThreadInfo} object for the thread of the given ID
-     * with no stack trace, no locked monitor and no synchronizer info;
-     * <tt>null</tt> if the thread of the given ID is not alive or
-     * it does not exist.
-     *
-     * @throws IllegalArgumentException if <tt>id &lt= 0</tt>.
-     * @throws java.lang.SecurityException if a security manager
-     *         exists and the caller does not have
-     *         ManagementPermission("monitor").
-     */
-    public ThreadInfo getThreadInfo(long id);
-
-    /**
-     * Returns the thread info for each thread
-     * whose ID is in the input array <tt>ids</tt> with no stack trace.
-     * This method is equivalent to calling:
-     * <blockquote><pre>
-     *   {@link #getThreadInfo(long[], int) getThreadInfo}(ids, 0);
-     * </pre></blockquote>
-     *
-     * <p>
-     * This method returns an array of the <tt>ThreadInfo</tt> objects.
-     * The stack trace, locked monitors, and locked synchronizers
-     * in each <tt>ThreadInfo</tt> object will be empty.
-     *
-     * If a thread of a given ID is not alive or does not exist,
-     * the corresponding element in the returned array will
-     * contain <tt>null</tt>.  A thread is alive if
-     * it has been started and has not yet died.
-     *
-     * <p>
-     * <b>MBeanServer access</b>:<br>
-     * The mapped type of <tt>ThreadInfo</tt> is
-     * <tt>CompositeData</tt> with attributes as specified in the
-     * {@link ThreadInfo#from ThreadInfo.from} method.
-     *
-     * @param ids an array of thread IDs.
-     * @return an array of the {@link ThreadInfo} objects, each containing
-     * information about a thread whose ID is in the corresponding
-     * element of the input array of IDs
-     * with no stack trace, no locked monitor and no synchronizer info.
-     *
-     * @throws IllegalArgumentException if any element in the input array
-     *      <tt>ids</tt> is <tt>&lt= 0</tt>.
-     * @throws java.lang.SecurityException if a security manager
-     *         exists and the caller does not have
-     *         ManagementPermission("monitor").
-     */
-    public ThreadInfo[] getThreadInfo(long[] ids);
-
-    /**
-     * Returns a thread info for a thread of the specified <tt>id</tt>,
-     * with stack trace of a specified number of stack trace elements.
-     * The <tt>maxDepth</tt> parameter indicates the maximum number of
-     * {@link StackTraceElement} to be retrieved from the stack trace.
-     * If <tt>maxDepth == Integer.MAX_VALUE</tt>, the entire stack trace of
-     * the thread will be dumped.
-     * If <tt>maxDepth == 0</tt>, no stack trace of the thread
-     * will be dumped.
-     * This method does not obtain the locked monitors and locked
-     * synchronizers of the thread.
-     * <p>
-     * When the Java virtual machine has no stack trace information
-     * about a thread or <tt>maxDepth == 0</tt>,
-     * the stack trace in the
-     * <tt>ThreadInfo</tt> object will be an empty array of
-     * <tt>StackTraceElement</tt>.
-     *
-     * <p>
-     * If a thread of the given ID is not alive or does not exist,
-     * this method will return <tt>null</tt>.  A thread is alive if
-     * it has been started and has not yet died.
-     *
-     * <p>
-     * <b>MBeanServer access</b>:<br>
-     * The mapped type of <tt>ThreadInfo</tt> is
-     * <tt>CompositeData</tt> with attributes as specified in the
-     * {@link ThreadInfo#from ThreadInfo.from} method.
-     *
-     * @param id the thread ID of the thread. Must be positive.
-     * @param maxDepth the maximum number of entries in the stack trace
-     * to be dumped. <tt>Integer.MAX_VALUE</tt> could be used to request
-     * the entire stack to be dumped.
-     *
-     * @return a {@link ThreadInfo} of the thread of the given ID
-     * with no locked monitor and synchronizer info.
-     * <tt>null</tt> if the thread of the given ID is not alive or
-     * it does not exist.
-     *
-     * @throws IllegalArgumentException if <tt>id &lt= 0</tt>.
-     * @throws IllegalArgumentException if <tt>maxDepth is negative</tt>.
-     * @throws java.lang.SecurityException if a security manager
-     *         exists and the caller does not have
-     *         ManagementPermission("monitor").
-     *
-     */
-    public ThreadInfo getThreadInfo(long id, int maxDepth);
-
-    /**
-     * Returns the thread info for each thread
-     * whose ID is in the input array <tt>ids</tt>,
-     * with stack trace of a specified number of stack trace elements.
-     * The <tt>maxDepth</tt> parameter indicates the maximum number of
-     * {@link StackTraceElement} to be retrieved from the stack trace.
-     * If <tt>maxDepth == Integer.MAX_VALUE</tt>, the entire stack trace of
-     * the thread will be dumped.
-     * If <tt>maxDepth == 0</tt>, no stack trace of the thread
-     * will be dumped.
-     * This method does not obtain the locked monitors and locked
-     * synchronizers of the threads.
-     * <p>
-     * When the Java virtual machine has no stack trace information
-     * about a thread or <tt>maxDepth == 0</tt>,
-     * the stack trace in the
-     * <tt>ThreadInfo</tt> object will be an empty array of
-     * <tt>StackTraceElement</tt>.
-     * <p>
-     * This method returns an array of the <tt>ThreadInfo</tt> objects,
-     * each is the thread information about the thread with the same index
-     * as in the <tt>ids</tt> array.
-     * If a thread of the given ID is not alive or does not exist,
-     * <tt>null</tt> will be set in the corresponding element
-     * in the returned array.  A thread is alive if
-     * it has been started and has not yet died.
-     *
-     * <p>
-     * <b>MBeanServer access</b>:<br>
-     * The mapped type of <tt>ThreadInfo</tt> is
-     * <tt>CompositeData</tt> with attributes as specified in the
-     * {@link ThreadInfo#from ThreadInfo.from} method.
-     *
-     * @param ids an array of thread IDs
-     * @param maxDepth the maximum number of entries in the stack trace
-     * to be dumped. <tt>Integer.MAX_VALUE</tt> could be used to request
-     * the entire stack to be dumped.
-     *
-     * @return an array of the {@link ThreadInfo} objects, each containing
-     * information about a thread whose ID is in the corresponding
-     * element of the input array of IDs with no locked monitor and
-     * synchronizer info.
-     *
-     * @throws IllegalArgumentException if <tt>maxDepth is negative</tt>.
-     * @throws IllegalArgumentException if any element in the input array
-     *      <tt>ids</tt> is <tt>&lt= 0</tt>.
-     * @throws java.lang.SecurityException if a security manager
-     *         exists and the caller does not have
-     *         ManagementPermission("monitor").
-     *
-     */
-    public ThreadInfo[] getThreadInfo(long[] ids, int maxDepth);
-
-    /**
-     * Tests if the Java virtual machine supports thread contention monitoring.
-     *
-     * @return
-     *   <tt>true</tt>
-     *     if the Java virtual machine supports thread contention monitoring;
-     *   <tt>false</tt> otherwise.
-     */
-    public boolean isThreadContentionMonitoringSupported();
-
-    /**
-     * Tests if thread contention monitoring is enabled.
-     *
-     * @return <tt>true</tt> if thread contention monitoring is enabled;
-     *         <tt>false</tt> otherwise.
-     *
-     * @throws java.lang.UnsupportedOperationException if the Java virtual
-     * machine does not support thread contention monitoring.
-     *
-     * @see #isThreadContentionMonitoringSupported
-     */
-    public boolean isThreadContentionMonitoringEnabled();
-
-    /**
-     * Enables or disables thread contention monitoring.
-     * Thread contention monitoring is disabled by default.
-     *
-     * @param enable <tt>true</tt> to enable;
-     *               <tt>false</tt> to disable.
-     *
-     * @throws java.lang.UnsupportedOperationException if the Java
-     * virtual machine does not support thread contention monitoring.
-     *
-     * @throws java.lang.SecurityException if a security manager
-     *         exists and the caller does not have
-     *         ManagementPermission("control").
-     *
-     * @see #isThreadContentionMonitoringSupported
-     */
-    public void setThreadContentionMonitoringEnabled(boolean enable);
-
-    /**
-     * Returns the total CPU time for the current thread in nanoseconds.
-     * The returned value is of nanoseconds precision but
-     * not necessarily nanoseconds accuracy.
-     * If the implementation distinguishes between user mode time and system
-     * mode time, the returned CPU time is the amount of time that
-     * the current thread has executed in user mode or system mode.
-     *
-     * <p>
-     * This is a convenient method for local management use and is
-     * equivalent to calling:
-     * <blockquote><pre>
-     *   {@link #getThreadCpuTime getThreadCpuTime}(Thread.currentThread().getId());
-     * </pre></blockquote>
-     *
-     * @return the total CPU time for the current thread if CPU time
-     * measurement is enabled; <tt>-1</tt> otherwise.
-     *
-     * @throws java.lang.UnsupportedOperationException if the Java
-     * virtual machine does not support CPU time measurement for
-     * the current thread.
-     *
-     * @see #getCurrentThreadUserTime
-     * @see #isCurrentThreadCpuTimeSupported
-     * @see #isThreadCpuTimeEnabled
-     * @see #setThreadCpuTimeEnabled
-     */
-    public long getCurrentThreadCpuTime();
-
-    /**
-     * Returns the CPU time that the current thread has executed
-     * in user mode in nanoseconds.
-     * The returned value is of nanoseconds precision but
-     * not necessarily nanoseconds accuracy.
-     *
-     * <p>
-     * This is a convenient method for local management use and is
-     * equivalent to calling:
-     * <blockquote><pre>
-     *   {@link #getThreadUserTime getThreadUserTime}(Thread.currentThread().getId());
-     * </pre></blockquote>
-     *
-     * @return the user-level CPU time for the current thread if CPU time
-     * measurement is enabled; <tt>-1</tt> otherwise.
-     *
-     * @throws java.lang.UnsupportedOperationException if the Java
-     * virtual machine does not support CPU time measurement for
-     * the current thread.
-     *
-     * @see #getCurrentThreadCpuTime
-     * @see #isCurrentThreadCpuTimeSupported
-     * @see #isThreadCpuTimeEnabled
-     * @see #setThreadCpuTimeEnabled
-     */
-    public long getCurrentThreadUserTime();
-
-    /**
-     * Returns the total CPU time for a thread of the specified ID in nanoseconds.
-     * The returned value is of nanoseconds precision but
-     * not necessarily nanoseconds accuracy.
-     * If the implementation distinguishes between user mode time and system
-     * mode time, the returned CPU time is the amount of time that
-     * the thread has executed in user mode or system mode.
-     *
-     * <p>
-     * If the thread of the specified ID is not alive or does not exist,
-     * this method returns <tt>-1</tt>. If CPU time measurement
-     * is disabled, this method returns <tt>-1</tt>.
-     * A thread is alive if it has been started and has not yet died.
-     * <p>
-     * If CPU time measurement is enabled after the thread has started,
-     * the Java virtual machine implementation may choose any time up to
-     * and including the time that the capability is enabled as the point
-     * where CPU time measurement starts.
-     *
-     * @param id the thread ID of a thread
-     * @return the total CPU time for a thread of the specified ID
-     * if the thread of the specified ID exists, the thread is alive,
-     * and CPU time measurement is enabled;
-     * <tt>-1</tt> otherwise.
-     *
-     * @throws IllegalArgumentException if <tt>id &lt= 0 </tt>.
-     * @throws java.lang.UnsupportedOperationException if the Java
-     * virtual machine does not support CPU time measurement for
-     * other threads.
-     *
-     * @see #getThreadUserTime
-     * @see #isThreadCpuTimeSupported
-     * @see #isThreadCpuTimeEnabled
-     * @see #setThreadCpuTimeEnabled
-     */
-    public long getThreadCpuTime(long id);
-
-    /**
-     * Returns the CPU time that a thread of the specified ID
-     * has executed in user mode in nanoseconds.
-     * The returned value is of nanoseconds precision but
-     * not necessarily nanoseconds accuracy.
-     *
-     * <p>
-     * If the thread of the specified ID is not alive or does not exist,
-     * this method returns <tt>-1</tt>. If CPU time measurement
-     * is disabled, this method returns <tt>-1</tt>.
-     * A thread is alive if it has been started and has not yet died.
-     * <p>
-     * If CPU time measurement is enabled after the thread has started,
-     * the Java virtual machine implementation may choose any time up to
-     * and including the time that the capability is enabled as the point
-     * where CPU time measurement starts.
-     *
-     * @param id the thread ID of a thread
-     * @return the user-level CPU time for a thread of the specified ID
-     * if the thread of the specified ID exists, the thread is alive,
-     * and CPU time measurement is enabled;
-     * <tt>-1</tt> otherwise.
-     *
-     * @throws IllegalArgumentException if <tt>id &lt= 0 </tt>.
-     * @throws java.lang.UnsupportedOperationException if the Java
-     * virtual machine does not support CPU time measurement for
-     * other threads.
-     *
-     * @see #getThreadCpuTime
-     * @see #isThreadCpuTimeSupported
-     * @see #isThreadCpuTimeEnabled
-     * @see #setThreadCpuTimeEnabled
-     */
-    public long getThreadUserTime(long id);
-
-    /**
-     * Tests if the Java virtual machine implementation supports CPU time
-     * measurement for any thread.
-     * A Java virtual machine implementation that supports CPU time
-     * measurement for any thread will also support CPU time
-     * measurement for the current thread.
-     *
-     * @return
-     *   <tt>true</tt>
-     *     if the Java virtual machine supports CPU time
-     *     measurement for any thread;
-     *   <tt>false</tt> otherwise.
-     */
-    public boolean isThreadCpuTimeSupported();
-
-    /**
-     * Tests if the Java virtual machine supports CPU time
-     * measurement for the current thread.
-     * This method returns <tt>true</tt> if {@link #isThreadCpuTimeSupported}
-     * returns <tt>true</tt>.
-     *
-     * @return
-     *   <tt>true</tt>
-     *     if the Java virtual machine supports CPU time
-     *     measurement for current thread;
-     *   <tt>false</tt> otherwise.
-     */
-    public boolean isCurrentThreadCpuTimeSupported();
-
-    /**
-     * Tests if thread CPU time measurement is enabled.
-     *
-     * @return <tt>true</tt> if thread CPU time measurement is enabled;
-     *         <tt>false</tt> otherwise.
-     *
-     * @throws java.lang.UnsupportedOperationException if the Java virtual
-     * machine does not support CPU time measurement for other threads
-     * nor for the current thread.
-     *
-     * @see #isThreadCpuTimeSupported
-     * @see #isCurrentThreadCpuTimeSupported
-     */
-    public boolean isThreadCpuTimeEnabled();
-
-    /**
-     * Enables or disables thread CPU time measurement.  The default
-     * is platform dependent.
-     *
-     * @param enable <tt>true</tt> to enable;
-     *               <tt>false</tt> to disable.
-     *
-     * @throws java.lang.UnsupportedOperationException if the Java
-     * virtual machine does not support CPU time measurement for
-     * any threads nor for the current thread.
-     *
-     * @throws java.lang.SecurityException if a security manager
-     *         exists and the caller does not have
-     *         ManagementPermission("control").
-     *
-     * @see #isThreadCpuTimeSupported
-     * @see #isCurrentThreadCpuTimeSupported
-     */
-    public void setThreadCpuTimeEnabled(boolean enable);
-
-    /**
-     * Finds cycles of threads that are in deadlock waiting to acquire
-     * object monitors. That is, threads that are blocked waiting to enter a
-     * synchronization block or waiting to reenter a synchronization block
-     * after an {@link Object#wait Object.wait} call,
-     * where each thread owns one monitor while
-     * trying to obtain another monitor already held by another thread
-     * in a cycle.
-     * <p>
-     * More formally, a thread is <em>monitor deadlocked</em> if it is
-     * part of a cycle in the relation "is waiting for an object monitor
-     * owned by".  In the simplest case, thread A is blocked waiting
-     * for a monitor owned by thread B, and thread B is blocked waiting
-     * for a monitor owned by thread A.
-     * <p>
-     * This method is designed for troubleshooting use, but not for
-     * synchronization control.  It might be an expensive operation.
-     * <p>
-     * This method finds deadlocks involving only object monitors.
-     * To find deadlocks involving both object monitors and
-     * <a href="LockInfo.html#OwnableSynchronizer">ownable synchronizers</a>,
-     * the {@link #findDeadlockedThreads findDeadlockedThreads} method
-     * should be used.
-     *
-     * @return an array of IDs of the threads that are monitor
-     * deadlocked, if any; <tt>null</tt> otherwise.
-     *
-     * @throws java.lang.SecurityException if a security manager
-     *         exists and the caller does not have
-     *         ManagementPermission("monitor").
-     *
-     * @see #findDeadlockedThreads
-     */
-    public long[] findMonitorDeadlockedThreads();
-
-    /**
-     * Resets the peak thread count to the current number of
-     * live threads.
-     *
-     * @throws java.lang.SecurityException if a security manager
-     *         exists and the caller does not have
-     *         ManagementPermission("control").
-     *
-     * @see #getPeakThreadCount
-     * @see #getThreadCount
-     */
-    public void resetPeakThreadCount();
-
-    /**
-     * Finds cycles of threads that are in deadlock waiting to acquire
-     * object monitors or
-     * <a href="LockInfo.html#OwnableSynchronizer">ownable synchronizers</a>.
-     *
-     * Threads are <em>deadlocked</em> in a cycle waiting for a lock of
-     * these two types if each thread owns one lock while
-     * trying to acquire another lock already held
-     * by another thread in the cycle.
-     * <p>
-     * This method is designed for troubleshooting use, but not for
-     * synchronization control.  It might be an expensive operation.
-     *
-     * @return an array of IDs of the threads that are
-     * deadlocked waiting for object monitors or ownable synchronizers, if any;
-     * <tt>null</tt> otherwise.
-     *
-     * @throws java.lang.SecurityException if a security manager
-     *         exists and the caller does not have
-     *         ManagementPermission("monitor").
-     * @throws java.lang.UnsupportedOperationException if the Java virtual
-     * machine does not support monitoriing of ownable synchronizer usage.
-     *
-     * @see #isSynchronizerUsageSupported
-     * @see #findMonitorDeadlockedThreads
-     * @since 1.6
-     */
-    public long[] findDeadlockedThreads();
-
-    /**
-     * Tests if the Java virtual machine supports monitoring of
-     * object monitor usage.
-     *
-     * @return
-     *   <tt>true</tt>
-     *     if the Java virtual machine supports monitoring of
-     *     object monitor usage;
-     *   <tt>false</tt> otherwise.
-     *
-     * @see #dumpAllThreads
-     * @since 1.6
-     */
-    public boolean isObjectMonitorUsageSupported();
-
-    /**
-     * Tests if the Java virtual machine supports monitoring of
-     * <a href="LockInfo.html#OwnableSynchronizer">
-     * ownable synchronizer</a> usage.
-     *
-     * @return
-     *   <tt>true</tt>
-     *     if the Java virtual machine supports monitoring of ownable
-     *     synchronizer usage;
-     *   <tt>false</tt> otherwise.
-     *
-     * @see #dumpAllThreads
-     * @since 1.6
-     */
-    public boolean isSynchronizerUsageSupported();
-
-    /**
-     * Returns the thread info for each thread
-     * whose ID is in the input array <tt>ids</tt>, with stack trace
-     * and synchronization information.
-     *
-     * <p>
-     * This method obtains a snapshot of the thread information
-     * for each thread including:
-     * <ul>
-     *    <li>the entire stack trace,</li>
-     *    <li>the object monitors currently locked by the thread
-     *        if <tt>lockedMonitors</tt> is <tt>true</tt>, and</li>
-     *    <li>the <a href="LockInfo.html#OwnableSynchronizer">
-     *        ownable synchronizers</a> currently locked by the thread
-     *        if <tt>lockedSynchronizers</tt> is <tt>true</tt>.</li>
-     * </ul>
-     * <p>
-     * This method returns an array of the <tt>ThreadInfo</tt> objects,
-     * each is the thread information about the thread with the same index
-     * as in the <tt>ids</tt> array.
-     * If a thread of the given ID is not alive or does not exist,
-     * <tt>null</tt> will be set in the corresponding element
-     * in the returned array.  A thread is alive if
-     * it has been started and has not yet died.
-     * <p>
-     * If a thread does not lock any object monitor or <tt>lockedMonitors</tt>
-     * is <tt>false</tt>, the returned <tt>ThreadInfo</tt> object will have an
-     * empty <tt>MonitorInfo</tt> array.  Similarly, if a thread does not
-     * lock any synchronizer or <tt>lockedSynchronizers</tt> is <tt>false</tt>,
-     * the returned <tt>ThreadInfo</tt> object
-     * will have an empty <tt>LockInfo</tt> array.
-     *
-     * <p>
-     * When both <tt>lockedMonitors</tt> and <tt>lockedSynchronizers</tt>
-     * parameters are <tt>false</tt>, it is equivalent to calling:
-     * <blockquote><pre>
-     *     {@link #getThreadInfo(long[], int)  getThreadInfo(ids, Integer.MAX_VALUE)}
-     * </pre></blockquote>
-     *
-     * <p>
-     * This method is designed for troubleshooting use, but not for
-     * synchronization control.  It might be an expensive operation.
-     *
-     * <p>
-     * <b>MBeanServer access</b>:<br>
-     * The mapped type of <tt>ThreadInfo</tt> is
-     * <tt>CompositeData</tt> with attributes as specified in the
-     * {@link ThreadInfo#from ThreadInfo.from} method.
-     *
-     * @param  ids an array of thread IDs.
-     * @param  lockedMonitors if <tt>true</tt>, retrieves all locked monitors.
-     * @param  lockedSynchronizers if <tt>true</tt>, retrieves all locked
-     *             ownable synchronizers.
-     *
-     * @return an array of the {@link ThreadInfo} objects, each containing
-     * information about a thread whose ID is in the corresponding
-     * element of the input array of IDs.
-     *
-     * @throws java.lang.SecurityException if a security manager
-     *         exists and the caller does not have
-     *         ManagementPermission("monitor").
-     * @throws java.lang.UnsupportedOperationException
-     *         <ul>
-     *           <li>if <tt>lockedMonitors</tt> is <tt>true</tt> but
-     *               the Java virtual machine does not support monitoring
-     *               of {@linkplain #isObjectMonitorUsageSupported
-     *               object monitor usage}; or</li>
-     *           <li>if <tt>lockedSynchronizers</tt> is <tt>true</tt> but
-     *               the Java virtual machine does not support monitoring
-     *               of {@linkplain #isSynchronizerUsageSupported
-     *               ownable synchronizer usage}.</li>
-     *         </ul>
-     *
-     * @see #isObjectMonitorUsageSupported
-     * @see #isSynchronizerUsageSupported
-     *
-     * @since 1.6
-     */
-    public ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers);
-
-    /**
-     * Returns the thread info for all live threads with stack trace
-     * and synchronization information.
-     * Some threads included in the returned array
-     * may have been terminated when this method returns.
-     *
-     * <p>
-     * This method returns an array of {@link ThreadInfo} objects
-     * as specified in the {@link #getThreadInfo(long[], boolean, boolean)}
-     * method.
-     *
-     * @param  lockedMonitors if <tt>true</tt>, dump all locked monitors.
-     * @param  lockedSynchronizers if <tt>true</tt>, dump all locked
-     *             ownable synchronizers.
-     *
-     * @return an array of {@link ThreadInfo} for all live threads.
-     *
-     * @throws java.lang.SecurityException if a security manager
-     *         exists and the caller does not have
-     *         ManagementPermission("monitor").
-     * @throws java.lang.UnsupportedOperationException
-     *         <ul>
-     *           <li>if <tt>lockedMonitors</tt> is <tt>true</tt> but
-     *               the Java virtual machine does not support monitoring
-     *               of {@linkplain #isObjectMonitorUsageSupported
-     *               object monitor usage}; or</li>
-     *           <li>if <tt>lockedSynchronizers</tt> is <tt>true</tt> but
-     *               the Java virtual machine does not support monitoring
-     *               of {@linkplain #isSynchronizerUsageSupported
-     *               ownable synchronizer usage}.</li>
-     *         </ul>
-     *
-     * @see #isObjectMonitorUsageSupported
-     * @see #isSynchronizerUsageSupported
-     *
-     * @since 1.6
-     */
-    public ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers);
-}
diff --git a/ojluni/src/main/java/java/lang/package-info.java b/ojluni/src/main/java/java/lang/package-info.java
deleted file mode 100755
index aa7a79d..0000000
--- a/ojluni/src/main/java/java/lang/package-info.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.
- */
-
-/**
- * Provides classes that are fundamental to the design of the Java
- * programming language. The most important classes are {@code
- * Object}, which is the root of the class hierarchy, and {@code
- * Class}, instances of which represent classes at run time.
- *
- * <p>Frequently it is necessary to represent a value of primitive
- * type as if it were an object. The wrapper classes {@code Boolean},
- * {@code Character}, {@code Integer}, {@code Long}, {@code Float},
- * and {@code Double} serve this purpose.  An object of type {@code
- * Double}, for example, contains a field whose type is double,
- * representing that value in such a way that a reference to it can be
- * stored in a variable of reference type.  These classes also provide
- * a number of methods for converting among primitive values, as well
- * as supporting such standard methods as equals and hashCode.  The
- * {@code Void} class is a non-instantiable class that holds a
- * reference to a {@code Class} object representing the type void.
- *
- * <p>The class {@code Math} provides commonly used mathematical
- * functions such as sine, cosine, and square root. The classes {@code
- * String}, {@code StringBuffer}, and {@code StringBuilder} similarly
- * provide commonly used operations on character strings.
- *
- * <p>Classes {@code ClassLoader}, {@code Process}, {@code
- * ProcessBuilder}, {@code Runtime}, {@code SecurityManager}, and
- * {@code System} provide "system operations" that manage the dynamic
- * loading of classes, creation of external processes, host
- * environment inquiries such as the time of day, and enforcement of
- * security policies.
- *
- * <p>Class {@code Throwable} encompasses objects that may be thrown
- * by the {@code throw} statement. Subclasses of {@code Throwable}
- * represent errors and exceptions.
- *
- * <a name="charenc"></a>
- * <h3>Character Encodings</h3>
- *
- * The specification of the {@link java.nio.charset.Charset
- * java.nio.charset.Charset} class describes the naming conventions
- * for character encodings as well as the set of standard encodings
- * that must be supported by every implementation of the Java
- * platform.
- *
- * @since JDK1.0
- */
-package java.lang;
diff --git a/ojluni/src/main/java/java/lang/ref/FinalReference.java b/ojluni/src/main/java/java/lang/ref/FinalReference.java
deleted file mode 100755
index 4c76d2d..0000000
--- a/ojluni/src/main/java/java/lang/ref/FinalReference.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-package java.lang.ref;
-
-
-/* Final references, used to implement finalization */
-
-class FinalReference<T> extends Reference<T> {
-
-    public FinalReference(T referent, ReferenceQueue<? super T> q) {
-        super(referent, q);
-    }
-
-}
diff --git a/ojluni/src/main/java/java/lang/ref/Finalizer.java b/ojluni/src/main/java/java/lang/ref/Finalizer.java
deleted file mode 100755
index cdba65e..0000000
--- a/ojluni/src/main/java/java/lang/ref/Finalizer.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright (c) 1997, 2008, 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.
- */
-
-package java.lang.ref;
-
-import java.security.PrivilegedAction;
-import java.security.AccessController;
-
-
-final class Finalizer extends FinalReference { /* Package-private; must be in
-                                                  same package as the Reference
-                                                  class */
-
-    /* A native method that invokes an arbitrary object's finalize method is
-       required since the finalize method is protected
-     */
-    static native void invokeFinalizeMethod(Object o) throws Throwable;
-
-    private static ReferenceQueue queue = new ReferenceQueue();
-    private static Finalizer unfinalized = null;
-    private static final Object lock = new Object();
-
-    private Finalizer
-        next = null,
-        prev = null;
-
-    private boolean hasBeenFinalized() {
-        return (next == this);
-    }
-
-    private void add() {
-        synchronized (lock) {
-            if (unfinalized != null) {
-                this.next = unfinalized;
-                unfinalized.prev = this;
-            }
-            unfinalized = this;
-        }
-    }
-
-    private void remove() {
-        synchronized (lock) {
-            if (unfinalized == this) {
-                if (this.next != null) {
-                    unfinalized = this.next;
-                } else {
-                    unfinalized = this.prev;
-                }
-            }
-            if (this.next != null) {
-                this.next.prev = this.prev;
-            }
-            if (this.prev != null) {
-                this.prev.next = this.next;
-            }
-            this.next = this;   /* Indicates that this has been finalized */
-            this.prev = this;
-        }
-    }
-
-    private Finalizer(Object finalizee) {
-        super(finalizee, queue);
-        add();
-    }
-
-    /* Invoked by VM */
-    static void register(Object finalizee) {
-        new Finalizer(finalizee);
-    }
-
-    private void runFinalizer() {
-        synchronized (this) {
-            if (hasBeenFinalized()) return;
-            remove();
-        }
-        try {
-            Object finalizee = this.get();
-            if (finalizee != null && !(finalizee instanceof java.lang.Enum)) {
-                invokeFinalizeMethod(finalizee);
-                /* Clear stack slot containing this variable, to decrease
-                   the chances of false retention with a conservative GC */
-                finalizee = null;
-            }
-        } catch (Throwable x) { }
-        super.clear();
-    }
-
-    /* Create a privileged secondary finalizer thread in the system thread
-       group for the given Runnable, and wait for it to complete.
-
-       This method is used by both runFinalization and runFinalizersOnExit.
-       The former method invokes all pending finalizers, while the latter
-       invokes all uninvoked finalizers if on-exit finalization has been
-       enabled.
-
-       These two methods could have been implemented by offloading their work
-       to the regular finalizer thread and waiting for that thread to finish.
-       The advantage of creating a fresh thread, however, is that it insulates
-       invokers of these methods from a stalled or deadlocked finalizer thread.
-     */
-    private static void forkSecondaryFinalizer(final Runnable proc) {
-        AccessController.doPrivileged(
-            new PrivilegedAction<Void>() {
-                public Void run() {
-                ThreadGroup tg = Thread.currentThread().getThreadGroup();
-                for (ThreadGroup tgn = tg;
-                     tgn != null;
-                     tg = tgn, tgn = tg.getParent());
-                Thread sft = new Thread(tg, proc, "Secondary finalizer");
-                sft.start();
-                try {
-                    sft.join();
-                } catch (InterruptedException x) {
-                    /* Ignore */
-                }
-                return null;
-                }});
-    }
-
-    /* Called by Runtime.runFinalization() */
-    static void runFinalization() {
-        forkSecondaryFinalizer(new Runnable() {
-            private volatile boolean running;
-            public void run() {
-                if (running)
-                    return;
-                running = true;
-                for (;;) {
-                    Finalizer f = (Finalizer)queue.poll();
-                    if (f == null) break;
-                    f.runFinalizer();
-                }
-            }
-        });
-    }
-
-    /* Invoked by java.lang.Shutdown */
-    static void runAllFinalizers() {
-        forkSecondaryFinalizer(new Runnable() {
-            private volatile boolean running;
-            public void run() {
-                if (running)
-                    return;
-                running = true;
-                for (;;) {
-                    Finalizer f;
-                    synchronized (lock) {
-                        f = unfinalized;
-                        if (f == null) break;
-                        unfinalized = f.next;
-                    }
-                    f.runFinalizer();
-                }}});
-    }
-
-    private static class FinalizerThread extends Thread {
-        private volatile boolean running;
-        FinalizerThread(ThreadGroup g) {
-            super(g, "Finalizer");
-        }
-        public void run() {
-            if (running)
-                return;
-            running = true;
-            for (;;) {
-                try {
-                    Finalizer f = (Finalizer)queue.remove();
-                    f.runFinalizer();
-                } catch (InterruptedException x) {
-                    continue;
-                }
-            }
-        }
-    }
-
-    static {
-        ThreadGroup tg = Thread.currentThread().getThreadGroup();
-        for (ThreadGroup tgn = tg;
-             tgn != null;
-             tg = tgn, tgn = tg.getParent());
-        Thread finalizer = new FinalizerThread(tg);
-        finalizer.setPriority(Thread.MAX_PRIORITY - 2);
-        finalizer.setDaemon(true);
-        finalizer.start();
-    }
-
-}
diff --git a/ojluni/src/main/java/java/lang/reflect/ReflectAccess.java b/ojluni/src/main/java/java/lang/reflect/ReflectAccess.java
deleted file mode 100755
index 80311d2..0000000
--- a/ojluni/src/main/java/java/lang/reflect/ReflectAccess.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (c) 2001, 2010, 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.
- */
-
-package java.lang.reflect;
-
-import sun.reflect.MethodAccessor;
-import sun.reflect.ConstructorAccessor;
-
-/** Package-private class implementing the
-    sun.reflect.LangReflectAccess interface, allowing the java.lang
-    package to instantiate objects in this package. */
-
-class ReflectAccess implements sun.reflect.LangReflectAccess {
-    public Field newField(Class<?> declaringClass,
-                          String name,
-                          Class<?> type,
-                          int modifiers,
-                          int slot,
-                          String signature,
-                          byte[] annotations)
-    {
-        return new Field(declaringClass,
-                         name,
-                         type,
-                         modifiers,
-                         slot,
-                         signature,
-                         annotations);
-    }
-
-    public Method newMethod(Class<?> declaringClass,
-                            String name,
-                            Class<?>[] parameterTypes,
-                            Class<?> returnType,
-                            Class<?>[] checkedExceptions,
-                            int modifiers,
-                            int slot,
-                            String signature,
-                            byte[] annotations,
-                            byte[] parameterAnnotations,
-                            byte[] annotationDefault)
-    {
-        return new Method(declaringClass,
-                          name,
-                          parameterTypes,
-                          returnType,
-                          checkedExceptions,
-                          modifiers,
-                          slot,
-                          signature,
-                          annotations,
-                          parameterAnnotations,
-                          annotationDefault);
-    }
-
-    public <T> Constructor<T> newConstructor(Class<T> declaringClass,
-                                             Class<?>[] parameterTypes,
-                                             Class<?>[] checkedExceptions,
-                                             int modifiers,
-                                             int slot,
-                                             String signature,
-                                             byte[] annotations,
-                                             byte[] parameterAnnotations)
-    {
-        return new Constructor<>(declaringClass,
-                                  parameterTypes,
-                                  checkedExceptions,
-                                  modifiers,
-                                  slot,
-                                  signature,
-                                  annotations,
-                                  parameterAnnotations);
-    }
-
-    public MethodAccessor getMethodAccessor(Method m) {
-        return m.getMethodAccessor();
-    }
-
-    public void setMethodAccessor(Method m, MethodAccessor accessor) {
-        m.setMethodAccessor(accessor);
-    }
-
-    public ConstructorAccessor getConstructorAccessor(Constructor<?> c) {
-        return c.getConstructorAccessor();
-    }
-
-    public void setConstructorAccessor(Constructor<?> c,
-                                       ConstructorAccessor accessor)
-    {
-        c.setConstructorAccessor(accessor);
-    }
-
-    public int getConstructorSlot(Constructor<?> c) {
-        return c.getSlot();
-    }
-
-    public String getConstructorSignature(Constructor<?> c) {
-        return c.getSignature();
-    }
-
-    public byte[] getConstructorAnnotations(Constructor<?> c) {
-        return c.getRawAnnotations();
-    }
-
-    public byte[] getConstructorParameterAnnotations(Constructor<?> c) {
-        return c.getRawParameterAnnotations();
-    }
-
-    //
-    // Copying routines, needed to quickly fabricate new Field,
-    // Method, and Constructor objects from templates
-    //
-    public Method      copyMethod(Method arg) {
-        return arg.copy();
-    }
-
-    public Field       copyField(Field arg) {
-        return arg.copy();
-    }
-
-    public <T> Constructor<T> copyConstructor(Constructor<T> arg) {
-        return arg.copy();
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/reflect/package-info.java b/ojluni/src/main/java/java/lang/reflect/package-info.java
deleted file mode 100755
index 258a07e..0000000
--- a/ojluni/src/main/java/java/lang/reflect/package-info.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.
- */
-
-/**
- * Provides classes and interfaces for obtaining reflective
- * information about classes and objects.  Reflection allows
- * programmatic access to information about the fields, methods and
- * constructors of loaded classes, and the use of reflected fields,
- * methods, and constructors to operate on their underlying
- * counterparts, within security restrictions.
- *
- * <p>{@code AccessibleObject} allows suppression of access checks if
- * the necessary {@code ReflectPermission} is available.
- *
- * <p>{@code Array} provides static methods to dynamically create and
- * access arrays.
- *
- * <p>Classes in this package, along with {@code java.lang.Class}
- * accommodate applications such as debuggers, interpreters, object
- * inspectors, class browsers, and services such as Object
- * Serialization and JavaBeans that need access to either the public
- * members of a target object (based on its runtime class) or the
- * members declared by a given class.
- *
- * @since JDK1.1
- */
-package java.lang.reflect;
diff --git a/ojluni/src/main/java/java/net/SdpSocketImpl.java b/ojluni/src/main/java/java/net/SdpSocketImpl.java
deleted file mode 100755
index b5b023e..0000000
--- a/ojluni/src/main/java/java/net/SdpSocketImpl.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2010, 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.
- */
-
-package java.net;
-
-import java.io.IOException;
-import java.io.FileDescriptor;
-
-import sun.net.sdp.SdpSupport;
-
-/**
- * SocketImpl that supports the SDP protocol
- */
-class SdpSocketImpl extends PlainSocketImpl {
-    SdpSocketImpl() { }
-
-    @Override
-    protected void create(boolean stream) throws IOException {
-        if (!stream)
-            throw new UnsupportedOperationException("Must be a stream socket");
-        fd = SdpSupport.createSocket();
-        if (socket != null)
-            socket.setCreated();
-        if (serverSocket != null)
-            serverSocket.setCreated();
-    }
-}
diff --git a/ojluni/src/main/java/java/nio/channels/package-info.java b/ojluni/src/main/java/java/nio/channels/package-info.java
deleted file mode 100755
index 85590dd..0000000
--- a/ojluni/src/main/java/java/nio/channels/package-info.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Copyright (c) 2001, 2010, 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.
- */
-
-/**
- * Defines channels, which represent connections to entities that are capable of
- * performing I/O operations, such as files and sockets; defines selectors, for
- * multiplexed, non-blocking I/O operations.
- *
- * <a name="channels"></a>
- *
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Lists channels and their descriptions">
- * <tr><th><p align="left">Channels</p></th><th><p align="left">Description</p></th></tr>
- * <tr><td valign=top><tt><i>{@link java.nio.channels.Channel}</i></tt></td>
- *     <td>A nexus for I/O operations</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;<i>{@link java.nio.channels.ReadableByteChannel}</i></tt></td>
- *     <td>Can read into a buffer</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.ScatteringByteChannel}&nbsp;&nbsp;</i></tt></td>
- *     <td>Can read into a sequence of&nbsp;buffers</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;<i>{@link java.nio.channels.WritableByteChannel}</i></tt></td>
- *     <td>Can write from a buffer</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.GatheringByteChannel}</i></tt></td>
- *     <td>Can write from a sequence of&nbsp;buffers</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;<i>{@link java.nio.channels.ByteChannel}</i></tt></td>
- *     <td>Can read/write to/from a&nbsp;buffer</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.SeekableByteChannel}</i></tt></td>
- *     <td>A {@code ByteChannel} connected to an entity that contains a variable-length sequence of bytes</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;<i>{@link java.nio.channels.AsynchronousChannel}</i></tt></td>
- *     <td>Supports asynchronous I/O operations.</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.AsynchronousByteChannel}</i></tt></td>
- *     <td>Can read and write bytes asynchronously</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;<i>{@link java.nio.channels.NetworkChannel}</i></tt></td>
- *     <td>A channel to a network socket</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.channels.MulticastChannel}</i></tt></td>
- *     <td>Can join Internet Protocol (IP) multicast groups</td></tr>
- * <tr><td valign=top><tt>{@link java.nio.channels.Channels}</tt></td>
- *     <td>Utility methods for channel/stream interoperation</td></tr>
- * </table></blockquote>
- *
- * <p> A <i>channel</i> represents an open connection to an entity such as a
- * hardware device, a file, a network socket, or a program component that is
- * capable of performing one or more distinct I/O operations, for example reading
- * or writing.  As specified in the {@link java.nio.channels.Channel} interface,
- * channels are either open or closed, and they are both <i>asynchronously
- * closeable</i> and <i>interruptible</i>.
- *
- * <p> The {@link java.nio.channels.Channel} interface is extended by several
- * other interfaces.
- *
- * <p> The {@link java.nio.channels.ReadableByteChannel} interface specifies a
- * {@link java.nio.channels.ReadableByteChannel#read read} method that reads bytes
- * from the channel into a buffer; similarly, the {@link
- * java.nio.channels.WritableByteChannel} interface specifies a {@link
- * java.nio.channels.WritableByteChannel#write write} method that writes bytes
- * from a buffer to the channel. The {@link java.nio.channels.ByteChannel}
- * interface unifies these two interfaces for the common case of channels that can
- * both read and write bytes. The {@link java.nio.channels.SeekableByteChannel}
- * interface extends the {@code ByteChannel} interface with methods to {@link
- * java.nio.channels.SeekableByteChannel#position() query} and {@link
- * java.nio.channels.SeekableByteChannel#position(long) modify} the channel's
- * current position, and its {@link java.nio.channels.SeekableByteChannel#size
- * size}.
- *
- * <p> The {@link java.nio.channels.ScatteringByteChannel} and {@link
- * java.nio.channels.GatheringByteChannel} interfaces extend the {@link
- * java.nio.channels.ReadableByteChannel} and {@link
- * java.nio.channels.WritableByteChannel} interfaces, respectively, adding {@link
- * java.nio.channels.ScatteringByteChannel#read read} and {@link
- * java.nio.channels.GatheringByteChannel#write write} methods that take a
- * sequence of buffers rather than a single buffer.
- *
- * <p> The {@link java.nio.channels.NetworkChannel} interface specifies methods
- * to {@link java.nio.channels.NetworkChannel#bind bind} the channel's socket,
- * obtain the address to which the socket is bound, and methods to {@link
- * java.nio.channels.NetworkChannel#getOption get} and {@link
- * java.nio.channels.NetworkChannel#setOption set} socket options. The {@link
- * java.nio.channels.MulticastChannel} interface specifies methods to join
- * Internet Protocol (IP) multicast groups.
- *
- * <p> The {@link java.nio.channels.Channels} utility class defines static methods
- * that support the interoperation of the stream classes of the <tt>{@link
- * java.io}</tt> package with the channel classes of this package.  An appropriate
- * channel can be constructed from an {@link java.io.InputStream} or an {@link
- * java.io.OutputStream}, and conversely an {@link java.io.InputStream} or an
- * {@link java.io.OutputStream} can be constructed from a channel.  A {@link
- * java.io.Reader} can be constructed that uses a given charset to decode bytes
- * from a given readable byte channel, and conversely a {@link java.io.Writer} can
- * be constructed that uses a given charset to encode characters into bytes and
- * write them to a given writable byte channel.
- *
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Lists file channels and their descriptions">
- * <tr><th><p align="left">File channels</p></th><th><p align="left">Description</p></th></tr>
- * <tr><td valign=top><tt>{@link java.nio.channels.FileChannel}</tt></td>
- *     <td>Reads, writes, maps, and manipulates files</td></tr>
- * <tr><td valign=top><tt>{@link java.nio.channels.FileLock}</tt></td>
- *     <td>A lock on a (region of a) file</td></tr>
- * <tr><td valign=top><tt>{@link java.nio.MappedByteBuffer}&nbsp;&nbsp;</tt></td>
- *     <td>A direct byte buffer mapped to a region of a&nbsp;file</td></tr>
- * </table></blockquote>
- *
- * <p> The {@link java.nio.channels.FileChannel} class supports the usual
- * operations of reading bytes from, and writing bytes to, a channel connected to
- * a file, as well as those of querying and modifying the current file position
- * and truncating the file to a specific size.  It defines methods for acquiring
- * locks on the whole file or on a specific region of a file; these methods return
- * instances of the {@link java.nio.channels.FileLock} class.  Finally, it defines
- * methods for forcing updates to the file to be written to the storage device that
- * contains it, for efficiently transferring bytes between the file and other
- * channels, and for mapping a region of the file directly into memory.
- *
- * <p> A {@code FileChannel} is created by invoking one of its static {@link
- * java.nio.channels.FileChannel#open open} methods, or by invoking the {@code
- * getChannel} method of a {@link java.io.FileInputStream}, {@link
- * java.io.FileOutputStream}, or {@link java.io.RandomAccessFile} to return a
- * file channel connected to the same underlying file as the <tt>{@link java.io}</tt>
- * class.
- *
- * <a name="multiplex"></a>
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Lists multiplexed, non-blocking channels and their descriptions">
- * <tr><th><p align="left">Multiplexed, non-blocking I/O</p></th><th><p align="left">Description</p></th></tr>
- * <tr><td valign=top><tt>{@link java.nio.channels.SelectableChannel}</tt></td>
- *     <td>A channel that can be multiplexed</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;{@link java.nio.channels.DatagramChannel}</tt></td>
- *     <td>A channel to a datagram-oriented socket</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;{@link java.nio.channels.Pipe.SinkChannel}</tt></td>
- *     <td>The write end of a pipe</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;{@link java.nio.channels.Pipe.SourceChannel}</tt></td>
- *     <td>The read end of a pipe</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;{@link java.nio.channels.ServerSocketChannel}&nbsp;&nbsp;</tt></td>
- *     <td>A channel to a stream-oriented listening socket</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;{@link java.nio.channels.SocketChannel}</tt></td>
- *     <td>A channel for a stream-oriented connecting socket</td></tr>
- * <tr><td valign=top><tt>{@link java.nio.channels.Selector}</tt></td>
- *     <td>A multiplexor of selectable channels</td></tr>
- * <tr><td valign=top><tt>{@link java.nio.channels.SelectionKey}</tt></td>
- *     <td>A token representing the registration <br> of a channel
- *     with&nbsp;a&nbsp;selector</td></tr>
- * <tr><td valign=top><tt>{@link java.nio.channels.Pipe}</tt></td>
- *     <td>Two channels that form a unidirectional&nbsp;pipe</td></tr>
- * </table></blockquote>
- *
- * <p> Multiplexed, non-blocking I/O, which is much more scalable than
- * thread-oriented, blocking I/O, is provided by <i>selectors</i>, <i>selectable
- * channels</i>, and <i>selection keys</i>.
- *
- * <p> A <a href="Selector.html"><i>selector</i></a> is a multiplexor of <a
- * href="SelectableChannel.html"><i>selectable channels</i></a>, which in turn are
- * a special type of channel that can be put into <a
- * href="SelectableChannel.html#bm"><i>non-blocking mode</i></a>.  To perform
- * multiplexed I/O operations, one or more selectable channels are first created,
- * put into non-blocking mode, and {@link
- * java.nio.channels.SelectableChannel#register <i>registered</i>}
- * with a selector.  Registering a channel specifies the set of I/O operations
- * that will be tested for readiness by the selector, and returns a <a
- * href="SelectionKey.html"><i>selection key</i></a> that represents the
- * registration.
- *
- * <p> Once some channels have been registered with a selector, a <a
- * href="Selector.html#selop"><i>selection operation</i></a> can be performed in
- * order to discover which channels, if any, have become ready to perform one or
- * more of the operations in which interest was previously declared.  If a channel
- * is ready then the key returned when it was registered will be added to the
- * selector's <i>selected-key set</i>.  The key set, and the keys within it, can
- * be examined in order to determine the operations for which each channel is
- * ready.  From each key one can retrieve the corresponding channel in order to
- * perform whatever I/O operations are required.
- *
- * <p> That a selection key indicates that its channel is ready for some operation
- * is a hint, but not a guarantee, that such an operation can be performed by a
- * thread without causing the thread to block.  It is imperative that code that
- * performs multiplexed I/O be written so as to ignore these hints when they prove
- * to be incorrect.
- *
- * <p> This package defines selectable-channel classes corresponding to the {@link
- * java.net.DatagramSocket}, {@link java.net.ServerSocket}, and {@link
- * java.net.Socket} classes defined in the <tt>{@link java.net}</tt> package.
- * Minor changes to these classes have been made in order to support sockets that
- * are associated with channels.  This package also defines a simple class that
- * implements unidirectional pipes.  In all cases, a new selectable channel is
- * created by invoking the static <tt>open</tt> method of the corresponding class.
- * If a channel needs an associated socket then a socket will be created as a side
- * effect of this operation.
- *
- * <p> The implementation of selectors, selectable channels, and selection keys
- * can be replaced by "plugging in" an alternative definition or instance of the
- * {@link java.nio.channels.spi.SelectorProvider} class defined in the <tt>{@link
- * java.nio.channels.spi}</tt> package.  It is not expected that many developers
- * will actually make use of this facility; it is provided primarily so that
- * sophisticated users can take advantage of operating-system-specific
- * I/O-multiplexing mechanisms when very high performance is required.
- *
- * <p> Much of the bookkeeping and synchronization required to implement the
- * multiplexed-I/O abstractions is performed by the {@link
- * java.nio.channels.spi.AbstractInterruptibleChannel}, {@link
- * java.nio.channels.spi.AbstractSelectableChannel}, {@link
- * java.nio.channels.spi.AbstractSelectionKey}, and {@link
- * java.nio.channels.spi.AbstractSelector} classes in the <tt>{@link
- * java.nio.channels.spi}</tt> package.  When defining a custom selector provider,
- * only the {@link java.nio.channels.spi.AbstractSelector} and {@link
- * java.nio.channels.spi.AbstractSelectionKey} classes should be subclassed
- * directly; custom channel classes should extend the appropriate {@link
- * java.nio.channels.SelectableChannel} subclasses defined in this package.
- *
- * <a name="async"></a>
- *
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Lists asynchronous channels and their descriptions">
- * <tr><th><p align="left">Asynchronous I/O</p></th><th><p align="left">Description</p></th></tr>
- * <tr><td valign=top><tt>{@link java.nio.channels.AsynchronousFileChannel}</tt></td>
- *     <td>An asynchronous channel for reading, writing, and manipulating a file</td></tr>
- * <tr><td valign=top><tt>{@link java.nio.channels.AsynchronousSocketChannel}</tt></td>
- *     <td>An asynchronous channel to a stream-oriented connecting socket</td></tr>
- * <tr><td valign=top><tt>{@link java.nio.channels.AsynchronousServerSocketChannel}&nbsp;&nbsp;</tt></td>
- *     <td>An asynchronous channel to a stream-oriented listening socket</td></tr>
- * <tr><td valign=top><tt>{@link java.nio.channels.CompletionHandler}</tt></td>
- *     <td>A handler for consuming the result of an asynchronous operation</td></tr>
- * <tr><td valign=top><tt>{@link java.nio.channels.AsynchronousChannelGroup}</tt></td>
- *     <td>A grouping of asynchronous channels for the purpose of resource sharing</td></tr>
- * </table></blockquote>
- *
- * <p> {@link java.nio.channels.AsynchronousChannel Asynchronous channels} are a
- * special type of channel capable of asynchronous I/O operations. Asynchronous
- * channels are non-blocking and define methods to initiate asynchronous
- * operations, returning a {@link java.util.concurrent.Future} representing the
- * pending result of each operation. The {@code Future} can be used to poll or
- * wait for the result of the operation. Asynchronous I/O operations can also
- * specify a {@link java.nio.channels.CompletionHandler} to invoke when the
- * operation completes. A completion handler is user provided code that is executed
- * to consume the result of I/O operation.
- *
- * <p> This package defines asynchronous-channel classes that are connected to
- * a stream-oriented connecting or listening socket, or a datagram-oriented socket.
- * It also defines the {@link java.nio.channels.AsynchronousFileChannel} class
- * for asynchronous reading, writing, and manipulating a file. As with the {@link
- * java.nio.channels.FileChannel} it supports operations to truncate the file
- * to a specific size, force updates to the file to be written to the storage
- * device, or acquire locks on the whole file or on a specific region of the file.
- * Unlike the {@code FileChannel} it does not define methods for mapping a
- * region of the file directly into memory. Where memory mapped I/O is required,
- * then a {@code FileChannel} can be used.
- *
- * <p> Asynchronous channels are bound to an asynchronous channel group for the
- * purpose of resource sharing. A group has an associated {@link
- * java.util.concurrent.ExecutorService} to which tasks are submitted to handle
- * I/O events and dispatch to completion handlers that consume the result of
- * asynchronous operations performed on channels in the group. The group can
- * optionally be specified when creating the channel or the channel can be bound
- * to a <em>default group</em>. Sophisticated users may wish to create their
- * own asynchronous channel groups or configure the {@code ExecutorService}
- * that will be used for the default group.
- *
- * <p> As with selectors, the implementatin of asynchronous channels can be
- * replaced by "plugging in" an alternative definition or instance of the {@link
- * java.nio.channels.spi.AsynchronousChannelProvider} class defined in the
- * <tt>{@link java.nio.channels.spi}</tt> package.  It is not expected that many
- * developers will actually make use of this facility; it is provided primarily
- * so that sophisticated users can take advantage of operating-system-specific
- * asynchronous I/O mechanisms when very high performance is required.
- *
- * <hr width="80%">
- * <p> Unless otherwise noted, passing a <tt>null</tt> argument to a constructor
- * or method in any class or interface in this package will cause a {@link
- * java.lang.NullPointerException NullPointerException} to be thrown.
- *
- * @since 1.4
- * @author Mark Reinhold
- * @author JSR-51 Expert Group
- */
-
-package java.nio.channels;
diff --git a/ojluni/src/main/java/java/nio/file/SimpleFileVisitor.java b/ojluni/src/main/java/java/nio/file/SimpleFileVisitor.java
deleted file mode 100755
index 321e30e..0000000
--- a/ojluni/src/main/java/java/nio/file/SimpleFileVisitor.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 2007, 2011, 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.
- */
-
-package java.nio.file;
-
-import java.nio.file.attribute.BasicFileAttributes;
-import java.io.IOException;
-import java.util.Objects;
-
-/**
- * A simple visitor of files with default behavior to visit all files and to
- * re-throw I/O errors.
- *
- * <p> Methods in this class may be overridden subject to their general contract.
- *
- * @param   <T>     The type of reference to the files
- *
- * @since 1.7
- */
-
-public class SimpleFileVisitor<T> implements FileVisitor<T> {
-    /**
-     * Initializes a new instance of this class.
-     */
-    protected SimpleFileVisitor() {
-    }
-
-    /**
-     * Invoked for a directory before entries in the directory are visited.
-     *
-     * <p> Unless overridden, this method returns {@link FileVisitResult#CONTINUE
-     * CONTINUE}.
-     */
-    @Override
-    public FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs)
-        throws IOException
-    {
-        Objects.requireNonNull(dir);
-        Objects.requireNonNull(attrs);
-        return FileVisitResult.CONTINUE;
-    }
-
-    /**
-     * Invoked for a file in a directory.
-     *
-     * <p> Unless overridden, this method returns {@link FileVisitResult#CONTINUE
-     * CONTINUE}.
-     */
-    @Override
-    public FileVisitResult visitFile(T file, BasicFileAttributes attrs)
-        throws IOException
-    {
-        Objects.requireNonNull(file);
-        Objects.requireNonNull(attrs);
-        return FileVisitResult.CONTINUE;
-    }
-
-    /**
-     * Invoked for a file that could not be visited.
-     *
-     * <p> Unless overridden, this method re-throws the I/O exception that prevented
-     * the file from being visited.
-     */
-    @Override
-    public FileVisitResult visitFileFailed(T file, IOException exc)
-        throws IOException
-    {
-        Objects.requireNonNull(file);
-        throw exc;
-    }
-
-    /**
-     * Invoked for a directory after entries in the directory, and all of their
-     * descendants, have been visited.
-     *
-     * <p> Unless overridden, this method returns {@link FileVisitResult#CONTINUE
-     * CONTINUE} if the directory iteration completes without an I/O exception;
-     * otherwise this method re-throws the I/O exception that caused the iteration
-     * of the directory to terminate prematurely.
-     */
-    @Override
-    public FileVisitResult postVisitDirectory(T dir, IOException exc)
-        throws IOException
-    {
-        Objects.requireNonNull(dir);
-        if (exc != null)
-            throw exc;
-        return FileVisitResult.CONTINUE;
-    }
-}
diff --git a/ojluni/src/main/java/java/nio/file/attribute/UserDefinedFileAttributeView.java b/ojluni/src/main/java/java/nio/file/attribute/UserDefinedFileAttributeView.java
deleted file mode 100755
index 2a1dd6e..0000000
--- a/ojluni/src/main/java/java/nio/file/attribute/UserDefinedFileAttributeView.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Copyright (c) 2007, 2011, 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.
- */
-
-package java.nio.file.attribute;
-
-import java.nio.ByteBuffer;
-import java.util.List;
-import java.io.IOException;
-
-/**
- * A file attribute view that provides a view of a file's user-defined
- * attributes, sometimes known as <em>extended attributes</em>. User-defined
- * file attributes are used to store metadata with a file that is not meaningful
- * to the file system. It is primarily intended for file system implementations
- * that support such a capability directly but may be emulated. The details of
- * such emulation are highly implementation specific and therefore not specified.
- *
- * <p> This {@code FileAttributeView} provides a view of a file's user-defined
- * attributes as a set of name/value pairs, where the attribute name is
- * represented by a {@code String}. An implementation may require to encode and
- * decode from the platform or file system representation when accessing the
- * attribute. The value has opaque content. This attribute view defines the
- * {@link #read read} and {@link #write write} methods to read the value into
- * or write from a {@link ByteBuffer}. This {@code FileAttributeView} is not
- * intended for use where the size of an attribute value is larger than {@link
- * Integer#MAX_VALUE}.
- *
- * <p> User-defined attributes may be used in some implementations to store
- * security related attributes so consequently, in the case of the default
- * provider at least, all methods that access user-defined attributes require the
- * {@code RuntimePermission("accessUserDefinedAttributes")} permission when a
- * security manager is installed.
- *
- * <p> The {@link java.nio.file.FileStore#supportsFileAttributeView
- * supportsFileAttributeView} method may be used to test if a specific {@link
- * java.nio.file.FileStore FileStore} supports the storage of user-defined
- * attributes.
- *
- * <p> Where dynamic access to file attributes is required, the {@link
- * java.nio.file.Files#getAttribute getAttribute} method may be used to read
- * the attribute value. The attribute value is returned as a byte array (byte[]).
- * The {@link java.nio.file.Files#setAttribute setAttribute} method may be used
- * to write the value of a user-defined attribute from a buffer (as if by
- * invoking the {@link #write write} method), or byte array (byte[]).
- *
- * @since 1.7
- */
-
-public interface UserDefinedFileAttributeView
-    extends FileAttributeView
-{
-    /**
-     * Returns the name of this attribute view. Attribute views of this type
-     * have the name {@code "user"}.
-     */
-    @Override
-    String name();
-
-    /**
-     * Returns a list containing the names of the user-defined attributes.
-     *
-     * @return  An unmodifiable list continaing the names of the file's
-     *          user-defined
-     *
-     * @throws  IOException
-     *          If an I/O error occurs
-     * @throws  SecurityException
-     *          In the case of the default provider, a security manager is
-     *          installed, and it denies {@link
-     *          RuntimePermission}<tt>("accessUserDefinedAttributes")</tt>
-     *          or its {@link SecurityManager#checkRead(String) checkRead} method
-     *          denies read access to the file.
-     */
-    List<String> list() throws IOException;
-
-    /**
-     * Returns the size of the value of a user-defined attribute.
-     *
-     * @param   name
-     *          The attribute name
-     *
-     * @return  The size of the attribute value, in bytes.
-     *
-     * @throws  ArithmeticException
-     *          If the size of the attribute is larger than {@link Integer#MAX_VALUE}
-     * @throws  IOException
-     *          If an I/O error occurs
-     * @throws  SecurityException
-     *          In the case of the default provider, a security manager is
-     *          installed, and it denies {@link
-     *          RuntimePermission}<tt>("accessUserDefinedAttributes")</tt>
-     *          or its {@link SecurityManager#checkRead(String) checkRead} method
-     *          denies read access to the file.
-     */
-    int size(String name) throws IOException;
-
-    /**
-     * Read the value of a user-defined attribute into a buffer.
-     *
-     * <p> This method reads the value of the attribute into the given buffer
-     * as a sequence of bytes, failing if the number of bytes remaining in
-     * the buffer is insufficient to read the complete attribute value. The
-     * number of bytes transferred into the buffer is {@code n}, where {@code n}
-     * is the size of the attribute value. The first byte in the sequence is at
-     * index {@code p} and the last byte is at index {@code p + n - 1}, where
-     * {@code p} is the buffer's position. Upon return the buffer's position
-     * will be equal to {@code p + n}; its limit will not have changed.
-     *
-     * <p> <b>Usage Example:</b>
-     * Suppose we want to read a file's MIME type that is stored as a user-defined
-     * attribute with the name "{@code user.mimetype}".
-     * <pre>
-     *    UserDefinedFileAttributeView view =
-     *        Files.getFileAttributeView(path, UserDefinedFileAttributeView.class);
-     *    String name = "user.mimetype";
-     *    ByteBuffer buf = ByteBuffer.allocate(view.size(name));
-     *    view.read(name, buf);
-     *    buf.flip();
-     *    String value = Charset.defaultCharset().decode(buf).toString();
-     * </pre>
-     *
-     * @param   name
-     *          The attribute name
-     * @param   dst
-     *          The destination buffer
-     *
-     * @return  The number of bytes read, possibly zero
-     *
-     * @throws  IllegalArgumentException
-     *          If the destination buffer is read-only
-     * @throws  IOException
-     *          If an I/O error occurs or there is insufficient space in the
-     *          destination buffer for the attribute value
-     * @throws  SecurityException
-     *          In the case of the default provider, a security manager is
-     *          installed, and it denies {@link
-     *          RuntimePermission}<tt>("accessUserDefinedAttributes")</tt>
-     *          or its {@link SecurityManager#checkRead(String) checkRead} method
-     *          denies read access to the file.
-     *
-     * @see #size
-     */
-    int read(String name, ByteBuffer dst) throws IOException;
-
-    /**
-     * Writes the value of a user-defined attribute from a buffer.
-     *
-     * <p> This method writes the value of the attribute from a given buffer as
-     * a sequence of bytes. The size of the value to transfer is {@code r},
-     * where {@code r} is the number of bytes remaining in the buffer, that is
-     * {@code src.remaining()}. The sequence of bytes is transferred from the
-     * buffer starting at index {@code p}, where {@code p} is the buffer's
-     * position. Upon return, the buffer's position will be equal to {@code
-     * p + n}, where {@code n} is the number of bytes transferred; its limit
-     * will not have changed.
-     *
-     * <p> If an attribute of the given name already exists then its value is
-     * replaced. If the attribute does not exist then it is created. If it
-     * implementation specific if a test to check for the existence of the
-     * attribute and the creation of attribute are atomic with repect to other
-     * file system activities.
-     *
-     * <p> Where there is insufficient space to store the attribute, or the
-     * attribute name or value exceed an implementation specific maximum size
-     * then an {@code IOException} is thrown.
-     *
-     * <p> <b>Usage Example:</b>
-     * Suppose we want to write a file's MIME type as a user-defined attribute:
-     * <pre>
-     *    UserDefinedFileAttributeView view =
-     *        FIles.getFileAttributeView(path, UserDefinedFileAttributeView.class);
-     *    view.write("user.mimetype", Charset.defaultCharset().encode("text/html"));
-     * </pre>
-     *
-     * @param   name
-     *          The attribute name
-     * @param   src
-     *          The buffer containing the attribute value
-     *
-     * @return  The number of bytes written, possibly zero
-     *
-     * @throws  IOException
-     *          If an I/O error occurs
-     * @throws  SecurityException
-     *          In the case of the default provider, a security manager is
-     *          installed, and it denies {@link
-     *          RuntimePermission}<tt>("accessUserDefinedAttributes")</tt>
-     *          or its {@link SecurityManager#checkWrite(String) checkWrite}
-     *          method denies write access to the file.
-     */
-    int write(String name, ByteBuffer src) throws IOException;
-
-    /**
-     * Deletes a user-defined attribute.
-     *
-     * @param   name
-     *          The attribute name
-     *
-     * @throws  IOException
-     *          If an I/O error occurs or the attribute does not exist
-     * @throws  SecurityException
-     *          In the case of the default provider, a security manager is
-     *          installed, and it denies {@link
-     *          RuntimePermission}<tt>("accessUserDefinedAttributes")</tt>
-     *          or its {@link SecurityManager#checkWrite(String) checkWrite}
-     *          method denies write access to the file.
-     */
-    void delete(String name) throws IOException;
-}
diff --git a/ojluni/src/main/java/java/nio/file/attribute/package-info.java b/ojluni/src/main/java/java/nio/file/attribute/package-info.java
deleted file mode 100755
index 222b725..0000000
--- a/ojluni/src/main/java/java/nio/file/attribute/package-info.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 2007, 2011, 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.
- */
-
-/**
- * Interfaces and classes providing access to file and file system attributes.
- *
- * <blockquote><table cellspacing=1 cellpadding=0 summary="Attribute views">
- * <tr><th><p align="left">Attribute views</p></th><th><p align="left">Description</p></th></tr>
- * <tr><td valign=top><tt><i>{@link java.nio.file.attribute.AttributeView}</i></tt></td>
- *     <td>Can read or update non-opaque values associated with objects in a file system</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;<i>{@link java.nio.file.attribute.FileAttributeView}</i></tt></td>
- *     <td>Can read or update file attributes</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.BasicFileAttributeView}&nbsp;&nbsp;</i></tt></td>
- *     <td>Can read or update a basic set of file attributes</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.PosixFileAttributeView}&nbsp;&nbsp;</i></tt></td>
- *     <td>Can read or update POSIX defined file attributes</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.DosFileAttributeView}&nbsp;&nbsp;</i></tt></td>
- *     <td>Can read or update FAT file attributes</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;&nbsp;&nbsp<i>{@link java.nio.file.attribute.FileOwnerAttributeView}&nbsp;&nbsp;</i></tt></td>
- *     <td>Can read or update the owner of a file</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.AclFileAttributeView}&nbsp;&nbsp;</i></tt></td>
- *     <td>Can read or update Access Control Lists</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;&nbsp;&nbsp;<i>{@link java.nio.file.attribute.UserDefinedFileAttributeView}&nbsp;&nbsp;</i></tt></td>
- *     <td>Can read or update user-defined file attributes</td></tr>
- * <tr><td valign=top><tt>&nbsp;&nbsp;<i>{@link java.nio.file.attribute.FileStoreAttributeView}</i></tt></td>
- *     <td>Can read or update file system attributes</td></tr>
- * </table></blockquote>
- *
- * <p> An attribute view provides a read-only or updatable view of the non-opaque
- * values, or <em>metadata</em>, associated with objects in a file system.
- * The {@link java.nio.file.attribute.FileAttributeView} interface is
- * extended by several other interfaces that that views to specific sets of file
- * attributes. {@code FileAttributeViews} are selected by invoking the {@link
- * java.nio.file.Files#getFileAttributeView} method with a
- * <em>type-token</em> to identify the required view. Views can also be identified
- * by name. The {@link java.nio.file.attribute.FileStoreAttributeView} interface
- * provides access to file store attributes. A {@code FileStoreAttributeView} of
- * a given type is obtained by invoking the {@link
- * java.nio.file.FileStore#getFileStoreAttributeView} method.
- *
- * <p> The {@link java.nio.file.attribute.BasicFileAttributeView}
- * class defines methods to read and update a <em>basic</em> set of file
- * attributes that are common to many file systems.
- *
- * <p> The {@link java.nio.file.attribute.PosixFileAttributeView}
- * interface extends {@code BasicFileAttributeView} by defining methods
- * to access the file attributes commonly used by file systems and operating systems
- * that implement the Portable Operating System Interface (POSIX) family of
- * standards.
- *
- * <p> The {@link java.nio.file.attribute.DosFileAttributeView}
- * class extends {@code BasicFileAttributeView} by defining methods to
- * access the legacy "DOS" file attributes supported on file systems such as File
- * Allocation Tabl (FAT), commonly used in consumer devices.
- *
- * <p> The {@link java.nio.file.attribute.AclFileAttributeView}
- * class defines methods to read and write the Access Control List (ACL)
- * file attribute. The ACL model used by this file attribute view is based
- * on the model defined by <a href="http://www.ietf.org/rfc/rfc3530.txt">
- * <i>RFC&nbsp;3530: Network File System (NFS) version 4 Protocol</i></a>.
- *
- * <p> In addition to attribute views, this package also defines classes and
- * interfaces that are used when accessing attributes:
- *
- * <ul>
- *
- *   <p><li> The {@link java.nio.file.attribute.UserPrincipal} and
- *   {@link java.nio.file.attribute.GroupPrincipal} interfaces represent an
- *   identity or group identity. </li>
- *
- *   <p><li> The {@link java.nio.file.attribute.UserPrincipalLookupService}
- *   interface defines methods to lookup user or group principals. </li>
- *
- *   <p><li> The {@link java.nio.file.attribute.FileAttribute} interface
- *   represents the value of an attribute for cases where the attribute value is
- *   required to be set atomically when creating an object in the file system. </li>
- *
- * </ul>
- *
- *
- * <p> Unless otherwise noted, passing a <tt>null</tt> argument to a constructor
- * or method in any class or interface in this package will cause a {@link
- * java.lang.NullPointerException NullPointerException} to be thrown.
- *
- * @since 1.7
- */
-
-package java.nio.file.attribute;
diff --git a/ojluni/src/main/java/java/nio/file/package-info.java b/ojluni/src/main/java/java/nio/file/package-info.java
deleted file mode 100755
index c0cf571..0000000
--- a/ojluni/src/main/java/java/nio/file/package-info.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 2007, 2011, 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.
- */
-
-/**
- * Defines interfaces and classes for the Java virtual machine to access files,
- * file attributes, and file systems.
- *
- * <p> The java.nio.file package defines classes to access files and file
- * systems. The API to access file and file system attributes is defined in the
- * {@link java.nio.file.attribute} package. The {@link java.nio.file.spi}
- * package is used by service provider implementors wishing to extend the
- * platform default provider, or to construct other provider implementations. </p>
- *
- * <a name="links"><h3>Symbolic Links</h3></a>
- * Many operating systems and file systems support for <em>symbolic links</em>.
- * A symbolic link is a special file that serves as a reference to another file.
- * For the most part, symbolic links are transparent to applications and
- * operations on symbolic links are automatically redirected to the <em>target</em>
- * of the link. Exceptions to this are when a symbolic link is deleted or
- * renamed/moved in which case the link is deleted or removed rather than the
- * target of the link. This package includes support for symbolic links where
- * implementations provide these semantics. File systems may support other types
- * that are semantically close but support for these other types of links is
- * not included in this package. </p>
- *
- * <a name="interop"><h3>Interoperability</h3></a>
- * The {@link java.io.File} class defines the {@link java.io.File#toPath
- * toPath} method to construct a {@link java.nio.file.Path} by converting
- * the abstract path represented by the {@code java.io.File} object. The resulting
- * {@code Path} can be used to operate on the same file as the {@code File}
- * object. The {@code Path} specification provides further information
- * on the <a href="Path.html#interop">interoperability</a> between {@code Path}
- * and {@code java.io.File} objects. </p>
- *
- * <h3>Visibility</h3>
- * The view of the files and file system provided by classes in this package are
- * guaranteed to be consistent with other views provided by other instances in the
- * same Java virtual machine.  The view may or may not, however, be consistent with
- * the view of the file system as seen by other concurrently running programs due
- * to caching performed by the underlying operating system and delays induced by
- * network-filesystem protocols. This is true regardless of the language in which
- * these other programs are written, and whether they are running on the same machine
- * or on some other machine.  The exact nature of any such inconsistencies are
- * system-dependent and are therefore unspecified. </p>
- *
- * <a name="integrity"><h3>Synchronized I/O File Integrity</h3></a>
- * The {@link java.nio.file.StandardOpenOption#SYNC SYNC} and {@link
- * java.nio.file.StandardOpenOption#DSYNC DSYNC} options are used when opening a file
- * to require that updates to the file are written synchronously to the underlying
- * storage device. In the case of the default provider, and the file resides on
- * a local storage device, and the {@link java.nio.channels.SeekableByteChannel
- * seekable} channel is connected to a file that was opened with one of these
- * options, then an invocation of the {@link
- * java.nio.channels.WritableByteChannel#write(java.nio.ByteBuffer) write}
- * method is only guaranteed to return when all changes made to the file
- * by that invocation have been written to the device. These options are useful
- * for ensuring that critical information is not lost in the event of a system
- * crash. If the file does not reside on a local device then no such guarantee
- * is made. Whether this guarantee is possible with other {@link
- * java.nio.file.spi.FileSystemProvider provider} implementations is provider
- * specific. </p>
- *
- * <h3>General Exceptions</h3>
- * Unless otherwise noted, passing a {@code null} argument to a constructor
- * or method of any class or interface in this package will cause a {@link
- * java.lang.NullPointerException NullPointerException} to be thrown. Additionally,
- * invoking a method with a collection containing a {@code null} element will
- * cause a {@code NullPointerException}, unless otherwise specified. </p>
- *
- * <p> Unless otherwise noted, methods that attempt to access the file system
- * will throw {@link java.nio.file.ClosedFileSystemException} when invoked on
- * objects associated with a {@link java.nio.file.FileSystem} that has been
- * {@link java.nio.file.FileSystem#close closed}. Additionally, any methods
- * that attempt write access to a file system will throw {@link
- * java.nio.file.ReadOnlyFileSystemException} when invoked on an object associated
- * with a {@link java.nio.file.FileSystem} that only provides read-only
- * access. </p>
- *
- * <p> Unless otherwise noted, invoking a method of any class or interface in
- * this package created by one {@link java.nio.file.spi.FileSystemProvider
- * provider} with a parameter that is an object created by another provider,
- * will throw {@link java.nio.file.ProviderMismatchException}. </p>
- *
- * <h3>Optional Specific Exceptions</h3>
- * Most of the methods defined by classes in this package that access the
- * file system specify that {@link java.io.IOException} be thrown when an I/O
- * error occurs. In some cases, these methods define specific I/O exceptions
- * for common cases. These exceptions, noted as <i>optional specific exceptions</i>,
- * are thrown by the implementation where it can detect the specific error.
- * Where the specific error cannot be detected then the more general {@code
- * IOException} is thrown.
- *
- * @since 1.7
- */
-package java.nio.file;
diff --git a/ojluni/src/main/java/java/nio/file/spi/package-info.java b/ojluni/src/main/java/java/nio/file/spi/package-info.java
deleted file mode 100755
index b86affe..0000000
--- a/ojluni/src/main/java/java/nio/file/spi/package-info.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2007, 2009, 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.
- */
-
-/**
- * Service-provider classes for the <tt>{@link java.nio.file}</tt> package.
- *
- * <p> Only developers who are defining new file system providers or file type
- * detectors should need to make direct use of this package.  </p>
- *
- * <p> Unless otherwise noted, passing a <tt>null</tt> argument to a constructor
- * or method in any class or interface in this package will cause a {@link
- * java.lang.NullPointerException NullPointerException} to be thrown.
- *
- * @since 1.7
- */
-
-package java.nio.file.spi;
diff --git a/ojluni/src/main/java/java/security/URIParameter.java b/ojluni/src/main/java/java/security/URIParameter.java
deleted file mode 100755
index 5cce544..0000000
--- a/ojluni/src/main/java/java/security/URIParameter.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-
-package java.security;
-
-/**
- * A parameter that contains a URI pointing to data intended for a
- * PolicySpi or ConfigurationSpi implementation.
- *
- * @since 1.6
- */
-public class URIParameter implements
-        Policy.Parameters, javax.security.auth.login.Configuration.Parameters {
-
-    private java.net.URI uri;
-
-    /**
-     * Constructs a URIParameter with the URI pointing to
-     * data intended for an SPI implementation.
-     *
-     * @param uri the URI pointing to the data.
-     *
-     * @exception NullPointerException if the specified URI is null.
-     */
-    public URIParameter(java.net.URI uri) {
-        if (uri == null) {
-            throw new NullPointerException("invalid null URI");
-        }
-        this.uri = uri;
-    }
-
-    /**
-     * Returns the URI.
-     *
-     * @return uri the URI.
-     */
-    public java.net.URI getURI() {
-        return uri;
-    }
-}
diff --git a/ojluni/src/main/java/java/sql/PseudoColumnUsage.java b/ojluni/src/main/java/java/sql/PseudoColumnUsage.java
deleted file mode 100755
index bc9c1ad..0000000
--- a/ojluni/src/main/java/java/sql/PseudoColumnUsage.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2010, 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.
- */
-
-package java.sql;
-
-
-/**
- * Enumeration for pseudo/hidden column usage.
- *
- * @since 1.7
- * @see DatabaseMetaData#getPseudoColumns
- */
-public enum PseudoColumnUsage {
-
-    /**
-     * The pseudo/hidden column may only be used in a SELECT list.
-     */
-    SELECT_LIST_ONLY,
-
-    /**
-     * The pseudo/hidden column may only be used in a WHERE clause.
-     */
-    WHERE_CLAUSE_ONLY,
-
-    /**
-     * There are no restrictions on the usage of the pseudo/hidden columns.
-     */
-    NO_USAGE_RESTRICTIONS,
-
-    /**
-     * The usage of the pseudo/hidden column cannot be determined.
-     */
-    USAGE_UNKNOWN
-
-}
diff --git a/ojluni/src/main/java/java/util/JapaneseImperialCalendar.java b/ojluni/src/main/java/java/util/JapaneseImperialCalendar.java
deleted file mode 100755
index 850e5a3..0000000
--- a/ojluni/src/main/java/java/util/JapaneseImperialCalendar.java
+++ /dev/null
@@ -1,2374 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-package java.util;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import sun.util.calendar.BaseCalendar;
-import sun.util.calendar.CalendarDate;
-import sun.util.calendar.CalendarSystem;
-import sun.util.calendar.CalendarUtils;
-import sun.util.calendar.Era;
-import sun.util.calendar.Gregorian;
-import sun.util.calendar.LocalGregorianCalendar;
-import sun.util.resources.LocaleData;
-
-/**
- * <code>JapaneseImperialCalendar</code> implements a Japanese
- * calendar system in which the imperial era-based year numbering is
- * supported from the Meiji era. The following are the eras supported
- * by this calendar system.
- * <pre><tt>
- * ERA value   Era name    Since (in Gregorian)
- * ------------------------------------------------------
- *     0       N/A         N/A
- *     1       Meiji       1868-01-01 midnight local time
- *     2       Taisho      1912-07-30 midnight local time
- *     3       Showa       1926-12-25 midnight local time
- *     4       Heisei      1989-01-08 midnight local time
- * ------------------------------------------------------
- * </tt></pre>
- *
- * <p><code>ERA</code> value 0 specifies the years before Meiji and
- * the Gregorian year values are used. Unlike {@link
- * GregorianCalendar}, the Julian to Gregorian transition is not
- * supported because it doesn't make any sense to the Japanese
- * calendar systems used before Meiji. To represent the years before
- * Gregorian year 1, 0 and negative values are used. The Japanese
- * Imperial rescripts and government decrees don't specify how to deal
- * with time differences for applying the era transitions. This
- * calendar implementation assumes local time for all transitions.
- *
- * @author Masayoshi Okutsu
- * @since 1.6
- */
-class JapaneseImperialCalendar extends Calendar {
-    /*
-     * Implementation Notes
-     *
-     * This implementation uses
-     * sun.util.calendar.LocalGregorianCalendar to perform most of the
-     * calendar calculations. LocalGregorianCalendar is configurable
-     * and reads <JRE_HOME>/lib/calendars.properties at the start-up.
-     */
-
-    /**
-     * The ERA constant designating the era before Meiji.
-     */
-    public static final int BEFORE_MEIJI = 0;
-
-    /**
-     * The ERA constant designating the Meiji era.
-     */
-    public static final int MEIJI = 1;
-
-    /**
-     * The ERA constant designating the Taisho era.
-     */
-    public static final int TAISHO = 2;
-
-    /**
-     * The ERA constant designating the Showa era.
-     */
-    public static final int SHOWA = 3;
-
-    /**
-     * The ERA constant designating the Heisei era.
-     */
-    public static final int HEISEI = 4;
-
-    private static final int EPOCH_OFFSET   = 719163; // Fixed date of January 1, 1970 (Gregorian)
-    private static final int EPOCH_YEAR     = 1970;
-
-    // Useful millisecond constants.  Although ONE_DAY and ONE_WEEK can fit
-    // into ints, they must be longs in order to prevent arithmetic overflow
-    // when performing (bug 4173516).
-    private static final int  ONE_SECOND = 1000;
-    private static final int  ONE_MINUTE = 60*ONE_SECOND;
-    private static final int  ONE_HOUR   = 60*ONE_MINUTE;
-    private static final long ONE_DAY    = 24*ONE_HOUR;
-    private static final long ONE_WEEK   = 7*ONE_DAY;
-
-    // Reference to the sun.util.calendar.LocalGregorianCalendar instance (singleton).
-    private static final LocalGregorianCalendar jcal
-        = (LocalGregorianCalendar) CalendarSystem.forName("japanese");
-
-    // Gregorian calendar instance. This is required because era
-    // transition dates are given in Gregorian dates.
-    private static final Gregorian gcal = CalendarSystem.getGregorianCalendar();
-
-    // The Era instance representing "before Meiji".
-    private static final Era BEFORE_MEIJI_ERA = new Era("BeforeMeiji", "BM", Long.MIN_VALUE, false);
-
-    // Imperial eras. The sun.util.calendar.LocalGregorianCalendar
-    // doesn't have an Era representing before Meiji, which is
-    // inconvenient for a Calendar. So, era[0] is a reference to
-    // BEFORE_MEIJI_ERA.
-    private static final Era[] eras;
-
-    // Fixed date of the first date of each era.
-    private static final long[] sinceFixedDates;
-
-    /*
-     * <pre>
-     *                                 Greatest       Least
-     * Field name             Minimum   Minimum     Maximum     Maximum
-     * ----------             -------   -------     -------     -------
-     * ERA                          0         0           1           1
-     * YEAR                -292275055         1           ?           ?
-     * MONTH                        0         0          11          11
-     * WEEK_OF_YEAR                 1         1          52*         53
-     * WEEK_OF_MONTH                0         0           4*          6
-     * DAY_OF_MONTH                 1         1          28*         31
-     * DAY_OF_YEAR                  1         1         365*        366
-     * DAY_OF_WEEK                  1         1           7           7
-     * DAY_OF_WEEK_IN_MONTH        -1        -1           4*          6
-     * AM_PM                        0         0           1           1
-     * HOUR                         0         0          11          11
-     * HOUR_OF_DAY                  0         0          23          23
-     * MINUTE                       0         0          59          59
-     * SECOND                       0         0          59          59
-     * MILLISECOND                  0         0         999         999
-     * ZONE_OFFSET             -13:00    -13:00       14:00       14:00
-     * DST_OFFSET                0:00      0:00        0:20        2:00
-     * </pre>
-     * *: depends on eras
-     */
-    static final int MIN_VALUES[] = {
-        0,              // ERA
-        -292275055,     // YEAR
-        JANUARY,        // MONTH
-        1,              // WEEK_OF_YEAR
-        0,              // WEEK_OF_MONTH
-        1,              // DAY_OF_MONTH
-        1,              // DAY_OF_YEAR
-        SUNDAY,         // DAY_OF_WEEK
-        1,              // DAY_OF_WEEK_IN_MONTH
-        AM,             // AM_PM
-        0,              // HOUR
-        0,              // HOUR_OF_DAY
-        0,              // MINUTE
-        0,              // SECOND
-        0,              // MILLISECOND
-        -13*ONE_HOUR,   // ZONE_OFFSET (UNIX compatibility)
-        0               // DST_OFFSET
-    };
-    static final int LEAST_MAX_VALUES[] = {
-        0,              // ERA (initialized later)
-        0,              // YEAR (initialized later)
-        JANUARY,        // MONTH (Showa 64 ended in January.)
-        0,              // WEEK_OF_YEAR (Showa 1 has only 6 days which could be 0 weeks.)
-        4,              // WEEK_OF_MONTH
-        28,             // DAY_OF_MONTH
-        0,              // DAY_OF_YEAR (initialized later)
-        SATURDAY,       // DAY_OF_WEEK
-        4,              // DAY_OF_WEEK_IN
-        PM,             // AM_PM
-        11,             // HOUR
-        23,             // HOUR_OF_DAY
-        59,             // MINUTE
-        59,             // SECOND
-        999,            // MILLISECOND
-        14*ONE_HOUR,    // ZONE_OFFSET
-        20*ONE_MINUTE   // DST_OFFSET (historical least maximum)
-    };
-    static final int MAX_VALUES[] = {
-        0,              // ERA
-        292278994,      // YEAR
-        DECEMBER,       // MONTH
-        53,             // WEEK_OF_YEAR
-        6,              // WEEK_OF_MONTH
-        31,             // DAY_OF_MONTH
-        366,            // DAY_OF_YEAR
-        SATURDAY,       // DAY_OF_WEEK
-        6,              // DAY_OF_WEEK_IN
-        PM,             // AM_PM
-        11,             // HOUR
-        23,             // HOUR_OF_DAY
-        59,             // MINUTE
-        59,             // SECOND
-        999,            // MILLISECOND
-        14*ONE_HOUR,    // ZONE_OFFSET
-        2*ONE_HOUR      // DST_OFFSET (double summer time)
-    };
-
-    // Proclaim serialization compatibility with JDK 1.6
-    private static final long serialVersionUID = -3364572813905467929L;
-
-    static {
-        Era[] es = jcal.getEras();
-        int length = es.length + 1;
-        eras = new Era[length];
-        sinceFixedDates = new long[length];
-
-        // eras[BEFORE_MEIJI] and sinceFixedDate[BEFORE_MEIJI] are the
-        // same as Gregorian.
-        int index = BEFORE_MEIJI;
-        sinceFixedDates[index] = gcal.getFixedDate(BEFORE_MEIJI_ERA.getSinceDate());
-        eras[index++] = BEFORE_MEIJI_ERA;
-        for (Era e : es) {
-            CalendarDate d = e.getSinceDate();
-            sinceFixedDates[index] = gcal.getFixedDate(d);
-            eras[index++] = e;
-        }
-
-        LEAST_MAX_VALUES[ERA] = MAX_VALUES[ERA] = eras.length - 1;
-
-        // Calculate the least maximum year and least day of Year
-        // values. The following code assumes that there's at most one
-        // era transition in a Gregorian year.
-        int year = Integer.MAX_VALUE;
-        int dayOfYear = Integer.MAX_VALUE;
-        CalendarDate date = gcal.newCalendarDate(TimeZone.NO_TIMEZONE);
-        for (int i = 1; i < eras.length; i++) {
-            long fd = sinceFixedDates[i];
-            CalendarDate transitionDate = eras[i].getSinceDate();
-            date.setDate(transitionDate.getYear(), BaseCalendar.JANUARY, 1);
-            long fdd = gcal.getFixedDate(date);
-            dayOfYear = Math.min((int)(fdd - fd), dayOfYear);
-            date.setDate(transitionDate.getYear(), BaseCalendar.DECEMBER, 31);
-            fdd = gcal.getFixedDate(date) + 1;
-            dayOfYear = Math.min((int)(fd - fdd), dayOfYear);
-
-            LocalGregorianCalendar.Date lgd = getCalendarDate(fd - 1);
-            int y = lgd.getYear();
-            // Unless the first year starts from January 1, the actual
-            // max value could be one year short. For example, if it's
-            // Showa 63 January 8, 63 is the actual max value since
-            // Showa 64 January 8 doesn't exist.
-            if (!(lgd.getMonth() == BaseCalendar.JANUARY && lgd.getDayOfMonth() == 1))
-                y--;
-            year = Math.min(y, year);
-        }
-        LEAST_MAX_VALUES[YEAR] = year; // Max year could be smaller than this value.
-        LEAST_MAX_VALUES[DAY_OF_YEAR] = dayOfYear;
-    }
-
-    /**
-     * jdate always has a sun.util.calendar.LocalGregorianCalendar.Date instance to
-     * avoid overhead of creating it for each calculation.
-     */
-    private transient LocalGregorianCalendar.Date jdate;
-
-    /**
-     * Temporary int[2] to get time zone offsets. zoneOffsets[0] gets
-     * the GMT offset value and zoneOffsets[1] gets the daylight saving
-     * value.
-     */
-    private transient int[] zoneOffsets;
-
-    /**
-     * Temporary storage for saving original fields[] values in
-     * non-lenient mode.
-     */
-    private transient int[] originalFields;
-
-    /**
-     * Constructs a <code>JapaneseImperialCalendar</code> based on the current time
-     * in the given time zone with the given locale.
-     *
-     * @param zone the given time zone.
-     * @param aLocale the given locale.
-     */
-    public JapaneseImperialCalendar(TimeZone zone, Locale aLocale) {
-        super(zone, aLocale);
-        jdate = jcal.newCalendarDate(zone);
-        setTimeInMillis(System.currentTimeMillis());
-    }
-
-    /**
-     * Compares this <code>JapaneseImperialCalendar</code> to the specified
-     * <code>Object</code>. The result is <code>true</code> if and
-     * only if the argument is a <code>JapaneseImperialCalendar</code> object
-     * that represents the same time value (millisecond offset from
-     * the <a href="Calendar.html#Epoch">Epoch</a>) under the same
-     * <code>Calendar</code> parameters.
-     *
-     * @param obj the object to compare with.
-     * @return <code>true</code> if this object is equal to <code>obj</code>;
-     * <code>false</code> otherwise.
-     * @see Calendar#compareTo(Calendar)
-     */
-    public boolean equals(Object obj) {
-        return obj instanceof JapaneseImperialCalendar &&
-            super.equals(obj);
-    }
-
-    /**
-     * Generates the hash code for this
-     * <code>JapaneseImperialCalendar</code> object.
-     */
-    public int hashCode() {
-        return super.hashCode() ^ jdate.hashCode();
-    }
-
-    /**
-     * Adds the specified (signed) amount of time to the given calendar field,
-     * based on the calendar's rules.
-     *
-     * <p><em>Add rule 1</em>. The value of <code>field</code>
-     * after the call minus the value of <code>field</code> before the
-     * call is <code>amount</code>, modulo any overflow that has occurred in
-     * <code>field</code>. Overflow occurs when a field value exceeds its
-     * range and, as a result, the next larger field is incremented or
-     * decremented and the field value is adjusted back into its range.</p>
-     *
-     * <p><em>Add rule 2</em>. If a smaller field is expected to be
-     * invariant, but it is impossible for it to be equal to its
-     * prior value because of changes in its minimum or maximum after
-     * <code>field</code> is changed, then its value is adjusted to be as close
-     * as possible to its expected value. A smaller field represents a
-     * smaller unit of time. <code>HOUR</code> is a smaller field than
-     * <code>DAY_OF_MONTH</code>. No adjustment is made to smaller fields
-     * that are not expected to be invariant. The calendar system
-     * determines what fields are expected to be invariant.</p>
-     *
-     * @param field the calendar field.
-     * @param amount the amount of date or time to be added to the field.
-     * @exception IllegalArgumentException if <code>field</code> is
-     * <code>ZONE_OFFSET</code>, <code>DST_OFFSET</code>, or unknown,
-     * or if any calendar fields have out-of-range values in
-     * non-lenient mode.
-     */
-    public void add(int field, int amount) {
-        // If amount == 0, do nothing even the given field is out of
-        // range. This is tested by JCK.
-        if (amount == 0) {
-            return;   // Do nothing!
-        }
-
-        if (field < 0 || field >= ZONE_OFFSET) {
-            throw new IllegalArgumentException();
-        }
-
-        // Sync the time and calendar fields.
-        complete();
-
-        if (field == YEAR) {
-            LocalGregorianCalendar.Date d = (LocalGregorianCalendar.Date) jdate.clone();
-            d.addYear(amount);
-            pinDayOfMonth(d);
-            set(ERA, getEraIndex(d));
-            set(YEAR, d.getYear());
-            set(MONTH, d.getMonth() - 1);
-            set(DAY_OF_MONTH, d.getDayOfMonth());
-        } else if (field == MONTH) {
-            LocalGregorianCalendar.Date d = (LocalGregorianCalendar.Date) jdate.clone();
-            d.addMonth(amount);
-            pinDayOfMonth(d);
-            set(ERA, getEraIndex(d));
-            set(YEAR, d.getYear());
-            set(MONTH, d.getMonth() - 1);
-            set(DAY_OF_MONTH, d.getDayOfMonth());
-        } else if (field == ERA) {
-            int era = internalGet(ERA) + amount;
-            if (era < 0) {
-                era = 0;
-            } else if (era > eras.length - 1) {
-                era = eras.length - 1;
-            }
-            set(ERA, era);
-        } else {
-            long delta = amount;
-            long timeOfDay = 0;
-            switch (field) {
-            // Handle the time fields here. Convert the given
-            // amount to milliseconds and call setTimeInMillis.
-            case HOUR:
-            case HOUR_OF_DAY:
-                delta *= 60 * 60 * 1000;        // hours to milliseconds
-                break;
-
-            case MINUTE:
-                delta *= 60 * 1000;             // minutes to milliseconds
-                break;
-
-            case SECOND:
-                delta *= 1000;                  // seconds to milliseconds
-                break;
-
-            case MILLISECOND:
-                break;
-
-            // Handle week, day and AM_PM fields which involves
-            // time zone offset change adjustment. Convert the
-            // given amount to the number of days.
-            case WEEK_OF_YEAR:
-            case WEEK_OF_MONTH:
-            case DAY_OF_WEEK_IN_MONTH:
-                delta *= 7;
-                break;
-
-            case DAY_OF_MONTH: // synonym of DATE
-            case DAY_OF_YEAR:
-            case DAY_OF_WEEK:
-                break;
-
-            case AM_PM:
-                // Convert the amount to the number of days (delta)
-                // and +12 or -12 hours (timeOfDay).
-                delta = amount / 2;
-                timeOfDay = 12 * (amount % 2);
-                break;
-            }
-
-            // The time fields don't require time zone offset change
-            // adjustment.
-            if (field >= HOUR) {
-                setTimeInMillis(time + delta);
-                return;
-            }
-
-            // The rest of the fields (week, day or AM_PM fields)
-            // require time zone offset (both GMT and DST) change
-            // adjustment.
-
-            // Translate the current time to the fixed date and time
-            // of the day.
-            long fd = cachedFixedDate;
-            timeOfDay += internalGet(HOUR_OF_DAY);
-            timeOfDay *= 60;
-            timeOfDay += internalGet(MINUTE);
-            timeOfDay *= 60;
-            timeOfDay += internalGet(SECOND);
-            timeOfDay *= 1000;
-            timeOfDay += internalGet(MILLISECOND);
-            if (timeOfDay >= ONE_DAY) {
-                fd++;
-                timeOfDay -= ONE_DAY;
-            } else if (timeOfDay < 0) {
-                fd--;
-                timeOfDay += ONE_DAY;
-            }
-
-            fd += delta; // fd is the expected fixed date after the calculation
-            int zoneOffset = internalGet(ZONE_OFFSET) + internalGet(DST_OFFSET);
-            setTimeInMillis((fd - EPOCH_OFFSET) * ONE_DAY + timeOfDay - zoneOffset);
-            zoneOffset -= internalGet(ZONE_OFFSET) + internalGet(DST_OFFSET);
-            // If the time zone offset has changed, then adjust the difference.
-            if (zoneOffset != 0) {
-                setTimeInMillis(time + zoneOffset);
-                long fd2 = cachedFixedDate;
-                // If the adjustment has changed the date, then take
-                // the previous one.
-                if (fd2 != fd) {
-                    setTimeInMillis(time - zoneOffset);
-                }
-            }
-        }
-    }
-
-    public void roll(int field, boolean up) {
-        roll(field, up ? +1 : -1);
-    }
-
-    /**
-     * Adds a signed amount to the specified calendar field without changing larger fields.
-     * A negative roll amount means to subtract from field without changing
-     * larger fields. If the specified amount is 0, this method performs nothing.
-     *
-     * <p>This method calls {@link #complete()} before adding the
-     * amount so that all the calendar fields are normalized. If there
-     * is any calendar field having an out-of-range value in non-lenient mode, then an
-     * <code>IllegalArgumentException</code> is thrown.
-     *
-     * @param field the calendar field.
-     * @param amount the signed amount to add to <code>field</code>.
-     * @exception IllegalArgumentException if <code>field</code> is
-     * <code>ZONE_OFFSET</code>, <code>DST_OFFSET</code>, or unknown,
-     * or if any calendar fields have out-of-range values in
-     * non-lenient mode.
-     * @see #roll(int,boolean)
-     * @see #add(int,int)
-     * @see #set(int,int)
-     */
-    public void roll(int field, int amount) {
-        // If amount == 0, do nothing even the given field is out of
-        // range. This is tested by JCK.
-        if (amount == 0) {
-            return;
-        }
-
-        if (field < 0 || field >= ZONE_OFFSET) {
-            throw new IllegalArgumentException();
-        }
-
-        // Sync the time and calendar fields.
-        complete();
-
-        int min = getMinimum(field);
-        int max = getMaximum(field);
-
-        switch (field) {
-        case ERA:
-        case AM_PM:
-        case MINUTE:
-        case SECOND:
-        case MILLISECOND:
-            // These fields are handled simply, since they have fixed
-            // minima and maxima. Other fields are complicated, since
-            // the range within they must roll varies depending on the
-            // date, a time zone and the era transitions.
-            break;
-
-        case HOUR:
-        case HOUR_OF_DAY:
-            {
-                int unit = max + 1; // 12 or 24 hours
-                int h = internalGet(field);
-                int nh = (h + amount) % unit;
-                if (nh < 0) {
-                    nh += unit;
-                }
-                time += ONE_HOUR * (nh - h);
-
-                // The day might have changed, which could happen if
-                // the daylight saving time transition brings it to
-                // the next day, although it's very unlikely. But we
-                // have to make sure not to change the larger fields.
-                CalendarDate d = jcal.getCalendarDate(time, getZone());
-                if (internalGet(DAY_OF_MONTH) != d.getDayOfMonth()) {
-                    d.setEra(jdate.getEra());
-                    d.setDate(internalGet(YEAR),
-                              internalGet(MONTH) + 1,
-                              internalGet(DAY_OF_MONTH));
-                    if (field == HOUR) {
-                        assert (internalGet(AM_PM) == PM);
-                        d.addHours(+12); // restore PM
-                    }
-                    time = jcal.getTime(d);
-                }
-                int hourOfDay = d.getHours();
-                internalSet(field, hourOfDay % unit);
-                if (field == HOUR) {
-                    internalSet(HOUR_OF_DAY, hourOfDay);
-                } else {
-                    internalSet(AM_PM, hourOfDay / 12);
-                    internalSet(HOUR, hourOfDay % 12);
-                }
-
-                // Time zone offset and/or daylight saving might have changed.
-                int zoneOffset = d.getZoneOffset();
-                int saving = d.getDaylightSaving();
-                internalSet(ZONE_OFFSET, zoneOffset - saving);
-                internalSet(DST_OFFSET, saving);
-                return;
-            }
-
-        case YEAR:
-            min = getActualMinimum(field);
-            max = getActualMaximum(field);
-            break;
-
-        case MONTH:
-            // Rolling the month involves both pinning the final value to [0, 11]
-            // and adjusting the DAY_OF_MONTH if necessary.  We only adjust the
-            // DAY_OF_MONTH if, after updating the MONTH field, it is illegal.
-            // E.g., <jan31>.roll(MONTH, 1) -> <feb28> or <feb29>.
-            {
-                if (!isTransitionYear(jdate.getNormalizedYear())) {
-                    int year = jdate.getYear();
-                    if (year == getMaximum(YEAR)) {
-                        CalendarDate jd = jcal.getCalendarDate(time, getZone());
-                        CalendarDate d = jcal.getCalendarDate(Long.MAX_VALUE, getZone());
-                        max = d.getMonth() - 1;
-                        int n = getRolledValue(internalGet(field), amount, min, max);
-                        if (n == max) {
-                            // To avoid overflow, use an equivalent year.
-                            jd.addYear(-400);
-                            jd.setMonth(n + 1);
-                            if (jd.getDayOfMonth() > d.getDayOfMonth()) {
-                                jd.setDayOfMonth(d.getDayOfMonth());
-                                jcal.normalize(jd);
-                            }
-                            if (jd.getDayOfMonth() == d.getDayOfMonth()
-                                && jd.getTimeOfDay() > d.getTimeOfDay()) {
-                                jd.setMonth(n + 1);
-                                jd.setDayOfMonth(d.getDayOfMonth() - 1);
-                                jcal.normalize(jd);
-                                // Month may have changed by the normalization.
-                                n = jd.getMonth() - 1;
-                            }
-                            set(DAY_OF_MONTH, jd.getDayOfMonth());
-                        }
-                        set(MONTH, n);
-                    } else if (year == getMinimum(YEAR)) {
-                        CalendarDate jd = jcal.getCalendarDate(time, getZone());
-                        CalendarDate d = jcal.getCalendarDate(Long.MIN_VALUE, getZone());
-                        min = d.getMonth() - 1;
-                        int n = getRolledValue(internalGet(field), amount, min, max);
-                        if (n == min) {
-                            // To avoid underflow, use an equivalent year.
-                            jd.addYear(+400);
-                            jd.setMonth(n + 1);
-                            if (jd.getDayOfMonth() < d.getDayOfMonth()) {
-                                jd.setDayOfMonth(d.getDayOfMonth());
-                                jcal.normalize(jd);
-                            }
-                            if (jd.getDayOfMonth() == d.getDayOfMonth()
-                                && jd.getTimeOfDay() < d.getTimeOfDay()) {
-                                jd.setMonth(n + 1);
-                                jd.setDayOfMonth(d.getDayOfMonth() + 1);
-                                jcal.normalize(jd);
-                                // Month may have changed by the normalization.
-                                n = jd.getMonth() - 1;
-                            }
-                            set(DAY_OF_MONTH, jd.getDayOfMonth());
-                        }
-                        set(MONTH, n);
-                    } else {
-                        int mon = (internalGet(MONTH) + amount) % 12;
-                        if (mon < 0) {
-                            mon += 12;
-                        }
-                        set(MONTH, mon);
-
-                        // Keep the day of month in the range.  We
-                        // don't want to spill over into the next
-                        // month; e.g., we don't want jan31 + 1 mo ->
-                        // feb31 -> mar3.
-                        int monthLen = monthLength(mon);
-                        if (internalGet(DAY_OF_MONTH) > monthLen) {
-                            set(DAY_OF_MONTH, monthLen);
-                        }
-                    }
-                } else {
-                    int eraIndex = getEraIndex(jdate);
-                    CalendarDate transition = null;
-                    if (jdate.getYear() == 1) {
-                        transition = eras[eraIndex].getSinceDate();
-                        min = transition.getMonth() - 1;
-                    } else {
-                        if (eraIndex < eras.length - 1) {
-                            transition = eras[eraIndex + 1].getSinceDate();
-                            if (transition.getYear() == jdate.getNormalizedYear()) {
-                                max = transition.getMonth() - 1;
-                                if (transition.getDayOfMonth() == 1) {
-                                    max--;
-                                }
-                            }
-                        }
-                    }
-
-                    if (min == max) {
-                        // The year has only one month. No need to
-                        // process further. (Showa Gan-nen (year 1)
-                        // and the last year have only one month.)
-                        return;
-                    }
-                    int n = getRolledValue(internalGet(field), amount, min, max);
-                    set(MONTH, n);
-                    if (n == min) {
-                        if (!(transition.getMonth() == BaseCalendar.JANUARY
-                              && transition.getDayOfMonth() == 1)) {
-                            if (jdate.getDayOfMonth() < transition.getDayOfMonth()) {
-                                set(DAY_OF_MONTH, transition.getDayOfMonth());
-                            }
-                        }
-                    } else if (n == max && (transition.getMonth() - 1 == n)) {
-                        int dom = transition.getDayOfMonth();
-                        if (jdate.getDayOfMonth() >= dom) {
-                            set(DAY_OF_MONTH, dom - 1);
-                        }
-                    }
-                }
-                return;
-            }
-
-        case WEEK_OF_YEAR:
-            {
-                int y = jdate.getNormalizedYear();
-                max = getActualMaximum(WEEK_OF_YEAR);
-                set(DAY_OF_WEEK, internalGet(DAY_OF_WEEK)); // update stamp[field]
-                int woy = internalGet(WEEK_OF_YEAR);
-                int value = woy + amount;
-                if (!isTransitionYear(jdate.getNormalizedYear())) {
-                    int year = jdate.getYear();
-                    if (year == getMaximum(YEAR)) {
-                        max = getActualMaximum(WEEK_OF_YEAR);
-                    } else if (year == getMinimum(YEAR)) {
-                        min = getActualMinimum(WEEK_OF_YEAR);
-                        max = getActualMaximum(WEEK_OF_YEAR);
-                        if (value > min && value < max) {
-                            set(WEEK_OF_YEAR, value);
-                            return;
-                        }
-
-                    }
-                    // If the new value is in between min and max
-                    // (exclusive), then we can use the value.
-                    if (value > min && value < max) {
-                        set(WEEK_OF_YEAR, value);
-                        return;
-                    }
-                    long fd = cachedFixedDate;
-                    // Make sure that the min week has the current DAY_OF_WEEK
-                    long day1 = fd - (7 * (woy - min));
-                    if (year != getMinimum(YEAR)) {
-                        if (gcal.getYearFromFixedDate(day1) != y) {
-                            min++;
-                        }
-                    } else {
-                        CalendarDate d = jcal.getCalendarDate(Long.MIN_VALUE, getZone());
-                        if (day1 < jcal.getFixedDate(d)) {
-                            min++;
-                        }
-                    }
-
-                    // Make sure the same thing for the max week
-                    fd += 7 * (max - internalGet(WEEK_OF_YEAR));
-                    if (gcal.getYearFromFixedDate(fd) != y) {
-                        max--;
-                    }
-                    break;
-                }
-
-                // Handle transition here.
-                long fd = cachedFixedDate;
-                long day1 = fd - (7 * (woy - min));
-                // Make sure that the min week has the current DAY_OF_WEEK
-                LocalGregorianCalendar.Date d = getCalendarDate(day1);
-                if (!(d.getEra() == jdate.getEra() && d.getYear() == jdate.getYear())) {
-                    min++;
-                }
-
-                // Make sure the same thing for the max week
-                fd += 7 * (max - woy);
-                jcal.getCalendarDateFromFixedDate(d, fd);
-                if (!(d.getEra() == jdate.getEra() && d.getYear() == jdate.getYear())) {
-                    max--;
-                }
-                // value: the new WEEK_OF_YEAR which must be converted
-                // to month and day of month.
-                value = getRolledValue(woy, amount, min, max) - 1;
-                d = getCalendarDate(day1 + value * 7);
-                set(MONTH, d.getMonth() - 1);
-                set(DAY_OF_MONTH, d.getDayOfMonth());
-                return;
-            }
-
-        case WEEK_OF_MONTH:
-            {
-                boolean isTransitionYear = isTransitionYear(jdate.getNormalizedYear());
-                // dow: relative day of week from the first day of week
-                int dow = internalGet(DAY_OF_WEEK) - getFirstDayOfWeek();
-                if (dow < 0) {
-                    dow += 7;
-                }
-
-                long fd = cachedFixedDate;
-                long month1;     // fixed date of the first day (usually 1) of the month
-                int monthLength; // actual month length
-                if (isTransitionYear) {
-                    month1 = getFixedDateMonth1(jdate, fd);
-                    monthLength = actualMonthLength();
-                } else {
-                    month1 = fd - internalGet(DAY_OF_MONTH) + 1;
-                    monthLength = jcal.getMonthLength(jdate);
-                }
-
-                // the first day of week of the month.
-                long monthDay1st = jcal.getDayOfWeekDateOnOrBefore(month1 + 6,
-                                                                   getFirstDayOfWeek());
-                // if the week has enough days to form a week, the
-                // week starts from the previous month.
-                if ((int)(monthDay1st - month1) >= getMinimalDaysInFirstWeek()) {
-                    monthDay1st -= 7;
-                }
-                max = getActualMaximum(field);
-
-                // value: the new WEEK_OF_MONTH value
-                int value = getRolledValue(internalGet(field), amount, 1, max) - 1;
-
-                // nfd: fixed date of the rolled date
-                long nfd = monthDay1st + value * 7 + dow;
-
-                // Unlike WEEK_OF_YEAR, we need to change day of week if the
-                // nfd is out of the month.
-                if (nfd < month1) {
-                    nfd = month1;
-                } else if (nfd >= (month1 + monthLength)) {
-                    nfd = month1 + monthLength - 1;
-                }
-                set(DAY_OF_MONTH, (int)(nfd - month1) + 1);
-                return;
-            }
-
-        case DAY_OF_MONTH:
-            {
-                if (!isTransitionYear(jdate.getNormalizedYear())) {
-                    max = jcal.getMonthLength(jdate);
-                    break;
-                }
-
-                // TODO: Need to change the spec to be usable DAY_OF_MONTH rolling...
-
-                // Transition handling. We can't change year and era
-                // values here due to the Calendar roll spec!
-                long month1 = getFixedDateMonth1(jdate, cachedFixedDate);
-
-                // It may not be a regular month. Convert the date and range to
-                // the relative values, perform the roll, and
-                // convert the result back to the rolled date.
-                int value = getRolledValue((int)(cachedFixedDate - month1), amount,
-                                           0, actualMonthLength() - 1);
-                LocalGregorianCalendar.Date d = getCalendarDate(month1 + value);
-                assert getEraIndex(d) == internalGetEra()
-                    && d.getYear() == internalGet(YEAR) && d.getMonth()-1 == internalGet(MONTH);
-                set(DAY_OF_MONTH, d.getDayOfMonth());
-                return;
-            }
-
-        case DAY_OF_YEAR:
-            {
-                max = getActualMaximum(field);
-                if (!isTransitionYear(jdate.getNormalizedYear())) {
-                    break;
-                }
-
-                // Handle transition. We can't change year and era values
-                // here due to the Calendar roll spec.
-                int value = getRolledValue(internalGet(DAY_OF_YEAR), amount, min, max);
-                long jan0 = cachedFixedDate - internalGet(DAY_OF_YEAR);
-                LocalGregorianCalendar.Date d = getCalendarDate(jan0 + value);
-                assert getEraIndex(d) == internalGetEra() && d.getYear() == internalGet(YEAR);
-                set(MONTH, d.getMonth() - 1);
-                set(DAY_OF_MONTH, d.getDayOfMonth());
-                return;
-            }
-
-        case DAY_OF_WEEK:
-            {
-                int normalizedYear = jdate.getNormalizedYear();
-                if (!isTransitionYear(normalizedYear) && !isTransitionYear(normalizedYear - 1)) {
-                    // If the week of year is in the same year, we can
-                    // just change DAY_OF_WEEK.
-                    int weekOfYear = internalGet(WEEK_OF_YEAR);
-                    if (weekOfYear > 1 && weekOfYear < 52) {
-                        set(WEEK_OF_YEAR, internalGet(WEEK_OF_YEAR));
-                        max = SATURDAY;
-                        break;
-                    }
-                }
-
-                // We need to handle it in a different way around year
-                // boundaries and in the transition year. Note that
-                // changing era and year values violates the roll
-                // rule: not changing larger calendar fields...
-                amount %= 7;
-                if (amount == 0) {
-                    return;
-                }
-                long fd = cachedFixedDate;
-                long dowFirst = jcal.getDayOfWeekDateOnOrBefore(fd, getFirstDayOfWeek());
-                fd += amount;
-                if (fd < dowFirst) {
-                    fd += 7;
-                } else if (fd >= dowFirst + 7) {
-                    fd -= 7;
-                }
-                LocalGregorianCalendar.Date d = getCalendarDate(fd);
-                set(ERA, getEraIndex(d));
-                set(d.getYear(), d.getMonth() - 1, d.getDayOfMonth());
-                return;
-            }
-
-        case DAY_OF_WEEK_IN_MONTH:
-            {
-                min = 1; // after having normalized, min should be 1.
-                if (!isTransitionYear(jdate.getNormalizedYear())) {
-                    int dom = internalGet(DAY_OF_MONTH);
-                    int monthLength = jcal.getMonthLength(jdate);
-                    int lastDays = monthLength % 7;
-                    max = monthLength / 7;
-                    int x = (dom - 1) % 7;
-                    if (x < lastDays) {
-                        max++;
-                    }
-                    set(DAY_OF_WEEK, internalGet(DAY_OF_WEEK));
-                    break;
-                }
-
-                // Transition year handling.
-                long fd = cachedFixedDate;
-                long month1 = getFixedDateMonth1(jdate, fd);
-                int monthLength = actualMonthLength();
-                int lastDays = monthLength % 7;
-                max = monthLength / 7;
-                int x = (int)(fd - month1) % 7;
-                if (x < lastDays) {
-                    max++;
-                }
-                int value = getRolledValue(internalGet(field), amount, min, max) - 1;
-                fd = month1 + value * 7 + x;
-                LocalGregorianCalendar.Date d = getCalendarDate(fd);
-                set(DAY_OF_MONTH, d.getDayOfMonth());
-                return;
-            }
-        }
-
-        set(field, getRolledValue(internalGet(field), amount, min, max));
-    }
-
-    public String getDisplayName(int field, int style, Locale locale) {
-        if (!checkDisplayNameParams(field, style, SHORT, LONG, locale,
-                                    ERA_MASK|YEAR_MASK|MONTH_MASK|DAY_OF_WEEK_MASK|AM_PM_MASK)) {
-            return null;
-        }
-
-        // "GanNen" is supported only in the LONG style.
-        if (field == YEAR
-            && (style == SHORT || get(YEAR) != 1 || get(ERA) == 0)) {
-            return null;
-        }
-
-        ResourceBundle rb = LocaleData.getDateFormatData(locale);
-        String name = null;
-        String key = getKey(field, style);
-        if (key != null) {
-            String[] strings = rb.getStringArray(key);
-            if (field == YEAR) {
-                if (strings.length > 0) {
-                    name = strings[0];
-                }
-            } else {
-                int index = get(field);
-                // If the ERA value is out of range for strings, then
-                // try to get its name or abbreviation from the Era instance.
-                if (field == ERA && index >= strings.length && index < eras.length) {
-                    Era era = eras[index];
-                    name = (style == SHORT) ? era.getAbbreviation() : era.getName();
-                } else {
-                    if (field == DAY_OF_WEEK)
-                        --index;
-                    name = strings[index];
-                }
-            }
-        }
-        return name;
-    }
-
-    public Map<String,Integer> getDisplayNames(int field, int style, Locale locale) {
-        if (!checkDisplayNameParams(field, style, ALL_STYLES, LONG, locale,
-                                    ERA_MASK|YEAR_MASK|MONTH_MASK|DAY_OF_WEEK_MASK|AM_PM_MASK)) {
-            return null;
-        }
-
-        if (style == ALL_STYLES) {
-            Map<String,Integer> shortNames = getDisplayNamesImpl(field, SHORT, locale);
-            if (field == AM_PM) {
-                return shortNames;
-            }
-            Map<String,Integer> longNames = getDisplayNamesImpl(field, LONG, locale);
-            if (shortNames == null) {
-                return longNames;
-            }
-            if (longNames != null) {
-                shortNames.putAll(longNames);
-            }
-            return shortNames;
-        }
-
-        // SHORT or LONG
-        return getDisplayNamesImpl(field, style, locale);
-    }
-
-    private Map<String,Integer> getDisplayNamesImpl(int field, int style, Locale locale) {
-        ResourceBundle rb = LocaleData.getDateFormatData(locale);
-        String key = getKey(field, style);
-        Map<String,Integer> map = new HashMap<String,Integer>();
-        if (key != null) {
-            String[] strings = rb.getStringArray(key);
-            if (field == YEAR) {
-                if (strings.length > 0) {
-                    map.put(strings[0], 1);
-                }
-            } else {
-                int base = (field == DAY_OF_WEEK) ? 1 : 0;
-                for (int i = 0; i < strings.length; i++) {
-                    map.put(strings[i], base + i);
-                }
-                // If strings[] has fewer than eras[], get more names from eras[].
-                if (field == ERA && strings.length < eras.length) {
-                    for (int i = strings.length; i < eras.length; i++) {
-                        Era era = eras[i];
-                        String name = (style == SHORT) ? era.getAbbreviation() : era.getName();
-                        map.put(name, i);
-                    }
-                }
-            }
-        }
-        return map.size() > 0 ? map : null;
-    }
-
-    private String getKey(int field, int style) {
-        String className = JapaneseImperialCalendar.class.getName();
-        StringBuilder key = new StringBuilder();
-        switch (field) {
-        case ERA:
-            key.append(className);
-            if (style == SHORT) {
-                key.append(".short");
-            }
-            key.append(".Eras");
-            break;
-
-        case YEAR:
-            key.append(className).append(".FirstYear");
-            break;
-
-        case MONTH:
-            key.append(style == SHORT ? "MonthAbbreviations" : "MonthNames");
-            break;
-
-        case DAY_OF_WEEK:
-            key.append(style == SHORT ? "DayAbbreviations" : "DayNames");
-            break;
-
-        case AM_PM:
-            key.append("AmPmMarkers");
-            break;
-        }
-        return key.length() > 0 ? key.toString() : null;
-    }
-
-    /**
-     * Returns the minimum value for the given calendar field of this
-     * <code>Calendar</code> instance. The minimum value is
-     * defined as the smallest value returned by the {@link
-     * Calendar#get(int) get} method for any possible time value,
-     * taking into consideration the current values of the
-     * {@link Calendar#getFirstDayOfWeek() getFirstDayOfWeek},
-     * {@link Calendar#getMinimalDaysInFirstWeek() getMinimalDaysInFirstWeek},
-     * and {@link Calendar#getTimeZone() getTimeZone} methods.
-     *
-     * @param field the calendar field.
-     * @return the minimum value for the given calendar field.
-     * @see #getMaximum(int)
-     * @see #getGreatestMinimum(int)
-     * @see #getLeastMaximum(int)
-     * @see #getActualMinimum(int)
-     * @see #getActualMaximum(int)
-     */
-    public int getMinimum(int field) {
-        return MIN_VALUES[field];
-    }
-
-    /**
-     * Returns the maximum value for the given calendar field of this
-     * <code>GregorianCalendar</code> instance. The maximum value is
-     * defined as the largest value returned by the {@link
-     * Calendar#get(int) get} method for any possible time value,
-     * taking into consideration the current values of the
-     * {@link Calendar#getFirstDayOfWeek() getFirstDayOfWeek},
-     * {@link Calendar#getMinimalDaysInFirstWeek() getMinimalDaysInFirstWeek},
-     * and {@link Calendar#getTimeZone() getTimeZone} methods.
-     *
-     * @param field the calendar field.
-     * @return the maximum value for the given calendar field.
-     * @see #getMinimum(int)
-     * @see #getGreatestMinimum(int)
-     * @see #getLeastMaximum(int)
-     * @see #getActualMinimum(int)
-     * @see #getActualMaximum(int)
-     */
-    public int getMaximum(int field) {
-        switch (field) {
-        case YEAR:
-            {
-                // The value should depend on the time zone of this calendar.
-                LocalGregorianCalendar.Date d = jcal.getCalendarDate(Long.MAX_VALUE,
-                                                                     getZone());
-                return Math.max(LEAST_MAX_VALUES[YEAR], d.getYear());
-            }
-        }
-        return MAX_VALUES[field];
-    }
-
-    /**
-     * Returns the highest minimum value for the given calendar field
-     * of this <code>GregorianCalendar</code> instance. The highest
-     * minimum value is defined as the largest value returned by
-     * {@link #getActualMinimum(int)} for any possible time value,
-     * taking into consideration the current values of the
-     * {@link Calendar#getFirstDayOfWeek() getFirstDayOfWeek},
-     * {@link Calendar#getMinimalDaysInFirstWeek() getMinimalDaysInFirstWeek},
-     * and {@link Calendar#getTimeZone() getTimeZone} methods.
-     *
-     * @param field the calendar field.
-     * @return the highest minimum value for the given calendar field.
-     * @see #getMinimum(int)
-     * @see #getMaximum(int)
-     * @see #getLeastMaximum(int)
-     * @see #getActualMinimum(int)
-     * @see #getActualMaximum(int)
-     */
-    public int getGreatestMinimum(int field) {
-        return field == YEAR ? 1 : MIN_VALUES[field];
-    }
-
-    /**
-     * Returns the lowest maximum value for the given calendar field
-     * of this <code>GregorianCalendar</code> instance. The lowest
-     * maximum value is defined as the smallest value returned by
-     * {@link #getActualMaximum(int)} for any possible time value,
-     * taking into consideration the current values of the
-     * {@link Calendar#getFirstDayOfWeek() getFirstDayOfWeek},
-     * {@link Calendar#getMinimalDaysInFirstWeek() getMinimalDaysInFirstWeek},
-     * and {@link Calendar#getTimeZone() getTimeZone} methods.
-     *
-     * @param field the calendar field
-     * @return the lowest maximum value for the given calendar field.
-     * @see #getMinimum(int)
-     * @see #getMaximum(int)
-     * @see #getGreatestMinimum(int)
-     * @see #getActualMinimum(int)
-     * @see #getActualMaximum(int)
-     */
-    public int getLeastMaximum(int field) {
-        switch (field) {
-        case YEAR:
-            {
-                return Math.min(LEAST_MAX_VALUES[YEAR], getMaximum(YEAR));
-            }
-        }
-        return LEAST_MAX_VALUES[field];
-    }
-
-    /**
-     * Returns the minimum value that this calendar field could have,
-     * taking into consideration the given time value and the current
-     * values of the
-     * {@link Calendar#getFirstDayOfWeek() getFirstDayOfWeek},
-     * {@link Calendar#getMinimalDaysInFirstWeek() getMinimalDaysInFirstWeek},
-     * and {@link Calendar#getTimeZone() getTimeZone} methods.
-     *
-     * @param field the calendar field
-     * @return the minimum of the given field for the time value of
-     * this <code>JapaneseImperialCalendar</code>
-     * @see #getMinimum(int)
-     * @see #getMaximum(int)
-     * @see #getGreatestMinimum(int)
-     * @see #getLeastMaximum(int)
-     * @see #getActualMaximum(int)
-     */
-    public int getActualMinimum(int field) {
-        if (!isFieldSet(YEAR_MASK|MONTH_MASK|WEEK_OF_YEAR_MASK, field)) {
-            return getMinimum(field);
-        }
-
-        int value = 0;
-        JapaneseImperialCalendar jc = getNormalizedCalendar();
-        // Get a local date which includes time of day and time zone,
-        // which are missing in jc.jdate.
-        LocalGregorianCalendar.Date jd = jcal.getCalendarDate(jc.getTimeInMillis(),
-                                                              getZone());
-        int eraIndex = getEraIndex(jd);
-        switch (field) {
-        case YEAR:
-            {
-                if (eraIndex > BEFORE_MEIJI) {
-                    value = 1;
-                    long since = eras[eraIndex].getSince(getZone());
-                    CalendarDate d = jcal.getCalendarDate(since, getZone());
-                    // Use the same year in jd to take care of leap
-                    // years. i.e., both jd and d must agree on leap
-                    // or common years.
-                    jd.setYear(d.getYear());
-                    jcal.normalize(jd);
-                    assert jd.isLeapYear() == d.isLeapYear();
-                    if (getYearOffsetInMillis(jd) < getYearOffsetInMillis(d)) {
-                        value++;
-                    }
-                } else {
-                    value = getMinimum(field);
-                    CalendarDate d = jcal.getCalendarDate(Long.MIN_VALUE, getZone());
-                    // Use an equvalent year of d.getYear() if
-                    // possible. Otherwise, ignore the leap year and
-                    // common year difference.
-                    int y = d.getYear();
-                    if (y > 400) {
-                        y -= 400;
-                    }
-                    jd.setYear(y);
-                    jcal.normalize(jd);
-                    if (getYearOffsetInMillis(jd) < getYearOffsetInMillis(d)) {
-                        value++;
-                    }
-                }
-            }
-            break;
-
-        case MONTH:
-            {
-                // In Before Meiji and Meiji, January is the first month.
-                if (eraIndex > MEIJI && jd.getYear() == 1) {
-                    long since = eras[eraIndex].getSince(getZone());
-                    CalendarDate d = jcal.getCalendarDate(since, getZone());
-                    value = d.getMonth() - 1;
-                    if (jd.getDayOfMonth() < d.getDayOfMonth()) {
-                        value++;
-                    }
-                }
-            }
-            break;
-
-        case WEEK_OF_YEAR:
-            {
-                value = 1;
-                CalendarDate d = jcal.getCalendarDate(Long.MIN_VALUE, getZone());
-                // shift 400 years to avoid underflow
-                d.addYear(+400);
-                jcal.normalize(d);
-                jd.setEra(d.getEra());
-                jd.setYear(d.getYear());
-                jcal.normalize(jd);
-
-                long jan1 = jcal.getFixedDate(d);
-                long fd = jcal.getFixedDate(jd);
-                int woy = getWeekNumber(jan1, fd);
-                long day1 = fd - (7 * (woy - 1));
-                if ((day1 < jan1) ||
-                    (day1 == jan1 &&
-                     jd.getTimeOfDay() < d.getTimeOfDay())) {
-                    value++;
-                }
-            }
-            break;
-        }
-        return value;
-    }
-
-    /**
-     * Returns the maximum value that this calendar field could have,
-     * taking into consideration the given time value and the current
-     * values of the
-     * {@link Calendar#getFirstDayOfWeek() getFirstDayOfWeek},
-     * {@link Calendar#getMinimalDaysInFirstWeek() getMinimalDaysInFirstWeek},
-     * and
-     * {@link Calendar#getTimeZone() getTimeZone} methods.
-     * For example, if the date of this instance is Heisei 16February 1,
-     * the actual maximum value of the <code>DAY_OF_MONTH</code> field
-     * is 29 because Heisei 16 is a leap year, and if the date of this
-     * instance is Heisei 17 February 1, it's 28.
-     *
-     * @param field the calendar field
-     * @return the maximum of the given field for the time value of
-     * this <code>JapaneseImperialCalendar</code>
-     * @see #getMinimum(int)
-     * @see #getMaximum(int)
-     * @see #getGreatestMinimum(int)
-     * @see #getLeastMaximum(int)
-     * @see #getActualMinimum(int)
-     */
-    public int getActualMaximum(int field) {
-        final int fieldsForFixedMax = ERA_MASK|DAY_OF_WEEK_MASK|HOUR_MASK|AM_PM_MASK|
-            HOUR_OF_DAY_MASK|MINUTE_MASK|SECOND_MASK|MILLISECOND_MASK|
-            ZONE_OFFSET_MASK|DST_OFFSET_MASK;
-        if ((fieldsForFixedMax & (1<<field)) != 0) {
-            return getMaximum(field);
-        }
-
-        JapaneseImperialCalendar jc = getNormalizedCalendar();
-        LocalGregorianCalendar.Date date = jc.jdate;
-        int normalizedYear = date.getNormalizedYear();
-
-        int value = -1;
-        switch (field) {
-        case MONTH:
-            {
-                value = DECEMBER;
-                if (isTransitionYear(date.getNormalizedYear())) {
-                    // TODO: there may be multiple transitions in a year.
-                    int eraIndex = getEraIndex(date);
-                    if (date.getYear() != 1) {
-                        eraIndex++;
-                        assert eraIndex < eras.length;
-                    }
-                    long transition = sinceFixedDates[eraIndex];
-                    long fd = jc.cachedFixedDate;
-                    if (fd < transition) {
-                        LocalGregorianCalendar.Date ldate
-                            = (LocalGregorianCalendar.Date) date.clone();
-                        jcal.getCalendarDateFromFixedDate(ldate, transition - 1);
-                        value = ldate.getMonth() - 1;
-                    }
-                } else {
-                    LocalGregorianCalendar.Date d = jcal.getCalendarDate(Long.MAX_VALUE,
-                                                                         getZone());
-                    if (date.getEra() == d.getEra() && date.getYear() == d.getYear()) {
-                        value = d.getMonth() - 1;
-                    }
-                }
-            }
-            break;
-
-        case DAY_OF_MONTH:
-            value = jcal.getMonthLength(date);
-            break;
-
-        case DAY_OF_YEAR:
-            {
-                if (isTransitionYear(date.getNormalizedYear())) {
-                    // Handle transition year.
-                    // TODO: there may be multiple transitions in a year.
-                    int eraIndex = getEraIndex(date);
-                    if (date.getYear() != 1) {
-                        eraIndex++;
-                        assert eraIndex < eras.length;
-                    }
-                    long transition = sinceFixedDates[eraIndex];
-                    long fd = jc.cachedFixedDate;
-                    CalendarDate d = gcal.newCalendarDate(TimeZone.NO_TIMEZONE);
-                    d.setDate(date.getNormalizedYear(), BaseCalendar.JANUARY, 1);
-                    if (fd < transition) {
-                        value = (int)(transition - gcal.getFixedDate(d));
-                    } else {
-                        d.addYear(+1);
-                        value = (int)(gcal.getFixedDate(d) - transition);
-                    }
-                } else {
-                    LocalGregorianCalendar.Date d = jcal.getCalendarDate(Long.MAX_VALUE,
-                                                                         getZone());
-                    if (date.getEra() == d.getEra() && date.getYear() == d.getYear()) {
-                        long fd = jcal.getFixedDate(d);
-                        long jan1 = getFixedDateJan1(d, fd);
-                        value = (int)(fd - jan1) + 1;
-                    } else if (date.getYear() == getMinimum(YEAR)) {
-                        CalendarDate d1 = jcal.getCalendarDate(Long.MIN_VALUE, getZone());
-                        long fd1 = jcal.getFixedDate(d1);
-                        d1.addYear(1);
-                        d1.setMonth(BaseCalendar.JANUARY).setDayOfMonth(1);
-                        jcal.normalize(d1);
-                        long fd2 = jcal.getFixedDate(d1);
-                        value = (int)(fd2 - fd1);
-                    } else {
-                        value = jcal.getYearLength(date);
-                    }
-                }
-            }
-            break;
-
-        case WEEK_OF_YEAR:
-            {
-                if (!isTransitionYear(date.getNormalizedYear())) {
-                    LocalGregorianCalendar.Date jd = jcal.getCalendarDate(Long.MAX_VALUE,
-                                                                          getZone());
-                    if (date.getEra() == jd.getEra() && date.getYear() == jd.getYear()) {
-                        long fd = jcal.getFixedDate(jd);
-                        long jan1 = getFixedDateJan1(jd, fd);
-                        value = getWeekNumber(jan1, fd);
-                    } else if (date.getEra() == null && date.getYear() == getMinimum(YEAR)) {
-                        CalendarDate d = jcal.getCalendarDate(Long.MIN_VALUE, getZone());
-                        // shift 400 years to avoid underflow
-                        d.addYear(+400);
-                        jcal.normalize(d);
-                        jd.setEra(d.getEra());
-                        jd.setDate(d.getYear() + 1, BaseCalendar.JANUARY, 1);
-                        jcal.normalize(jd);
-                        long jan1 = jcal.getFixedDate(d);
-                        long nextJan1 = jcal.getFixedDate(jd);
-                        long nextJan1st = jcal.getDayOfWeekDateOnOrBefore(nextJan1 + 6,
-                                                                          getFirstDayOfWeek());
-                        int ndays = (int)(nextJan1st - nextJan1);
-                        if (ndays >= getMinimalDaysInFirstWeek()) {
-                            nextJan1st -= 7;
-                        }
-                        value = getWeekNumber(jan1, nextJan1st);
-                    } else {
-                        // Get the day of week of January 1 of the year
-                        CalendarDate d = gcal.newCalendarDate(TimeZone.NO_TIMEZONE);
-                        d.setDate(date.getNormalizedYear(), BaseCalendar.JANUARY, 1);
-                        int dayOfWeek = gcal.getDayOfWeek(d);
-                        // Normalize the day of week with the firstDayOfWeek value
-                        dayOfWeek -= getFirstDayOfWeek();
-                        if (dayOfWeek < 0) {
-                            dayOfWeek += 7;
-                        }
-                        value = 52;
-                        int magic = dayOfWeek + getMinimalDaysInFirstWeek() - 1;
-                        if ((magic == 6) ||
-                            (date.isLeapYear() && (magic == 5 || magic == 12))) {
-                            value++;
-                        }
-                    }
-                    break;
-                }
-
-                if (jc == this) {
-                    jc = (JapaneseImperialCalendar) jc.clone();
-                }
-                int max = getActualMaximum(DAY_OF_YEAR);
-                jc.set(DAY_OF_YEAR, max);
-                value = jc.get(WEEK_OF_YEAR);
-                if (value == 1 && max > 7) {
-                    jc.add(WEEK_OF_YEAR, -1);
-                    value = jc.get(WEEK_OF_YEAR);
-                }
-            }
-            break;
-
-        case WEEK_OF_MONTH:
-            {
-                LocalGregorianCalendar.Date jd = jcal.getCalendarDate(Long.MAX_VALUE,
-                                                                      getZone());
-                if (!(date.getEra() == jd.getEra() && date.getYear() == jd.getYear())) {
-                    CalendarDate d = gcal.newCalendarDate(TimeZone.NO_TIMEZONE);
-                    d.setDate(date.getNormalizedYear(), date.getMonth(), 1);
-                    int dayOfWeek = gcal.getDayOfWeek(d);
-                    int monthLength = gcal.getMonthLength(d);
-                    dayOfWeek -= getFirstDayOfWeek();
-                    if (dayOfWeek < 0) {
-                        dayOfWeek += 7;
-                    }
-                    int nDaysFirstWeek = 7 - dayOfWeek; // # of days in the first week
-                    value = 3;
-                    if (nDaysFirstWeek >= getMinimalDaysInFirstWeek()) {
-                        value++;
-                    }
-                    monthLength -= nDaysFirstWeek + 7 * 3;
-                    if (monthLength > 0) {
-                        value++;
-                        if (monthLength > 7) {
-                            value++;
-                        }
-                    }
-                } else {
-                    long fd = jcal.getFixedDate(jd);
-                    long month1 = fd - jd.getDayOfMonth() + 1;
-                    value = getWeekNumber(month1, fd);
-                }
-            }
-            break;
-
-        case DAY_OF_WEEK_IN_MONTH:
-            {
-                int ndays, dow1;
-                int dow = date.getDayOfWeek();
-                BaseCalendar.Date d = (BaseCalendar.Date) date.clone();
-                ndays = jcal.getMonthLength(d);
-                d.setDayOfMonth(1);
-                jcal.normalize(d);
-                dow1 = d.getDayOfWeek();
-                int x = dow - dow1;
-                if (x < 0) {
-                    x += 7;
-                }
-                ndays -= x;
-                value = (ndays + 6) / 7;
-            }
-            break;
-
-        case YEAR:
-            {
-                CalendarDate jd = jcal.getCalendarDate(jc.getTimeInMillis(), getZone());
-                CalendarDate d;
-                int eraIndex = getEraIndex(date);
-                if (eraIndex == eras.length - 1) {
-                    d = jcal.getCalendarDate(Long.MAX_VALUE, getZone());
-                    value = d.getYear();
-                    // Use an equivalent year for the
-                    // getYearOffsetInMillis call to avoid overflow.
-                    if (value > 400) {
-                        jd.setYear(value - 400);
-                    }
-                } else {
-                    d = jcal.getCalendarDate(eras[eraIndex + 1].getSince(getZone()) - 1,
-                                             getZone());
-                    value = d.getYear();
-                    // Use the same year as d.getYear() to be
-                    // consistent with leap and common years.
-                    jd.setYear(value);
-                }
-                jcal.normalize(jd);
-                if (getYearOffsetInMillis(jd) > getYearOffsetInMillis(d)) {
-                    value--;
-                }
-            }
-            break;
-
-        default:
-            throw new ArrayIndexOutOfBoundsException(field);
-        }
-        return value;
-    }
-
-    /**
-     * Returns the millisecond offset from the beginning of the
-     * year. In the year for Long.MIN_VALUE, it's a pseudo value
-     * beyond the limit. The given CalendarDate object must have been
-     * normalized before calling this method.
-     */
-    private final long getYearOffsetInMillis(CalendarDate date) {
-        long t = (jcal.getDayOfYear(date) - 1) * ONE_DAY;
-        return t + date.getTimeOfDay() - date.getZoneOffset();
-    }
-
-    public Object clone() {
-        JapaneseImperialCalendar other = (JapaneseImperialCalendar) super.clone();
-
-        other.jdate = (LocalGregorianCalendar.Date) jdate.clone();
-        other.originalFields = null;
-        other.zoneOffsets = null;
-        return other;
-    }
-
-    public TimeZone getTimeZone() {
-        TimeZone zone = super.getTimeZone();
-        // To share the zone by the CalendarDate
-        jdate.setZone(zone);
-        return zone;
-    }
-
-    public void setTimeZone(TimeZone zone) {
-        super.setTimeZone(zone);
-        // To share the zone by the CalendarDate
-        jdate.setZone(zone);
-    }
-
-    /**
-     * The fixed date corresponding to jdate. If the value is
-     * Long.MIN_VALUE, the fixed date value is unknown.
-     */
-    transient private long cachedFixedDate = Long.MIN_VALUE;
-
-    /**
-     * Converts the time value (millisecond offset from the <a
-     * href="Calendar.html#Epoch">Epoch</a>) to calendar field values.
-     * The time is <em>not</em>
-     * recomputed first; to recompute the time, then the fields, call the
-     * <code>complete</code> method.
-     *
-     * @see Calendar#complete
-     */
-    protected void computeFields() {
-        int mask = 0;
-        if (isPartiallyNormalized()) {
-            // Determine which calendar fields need to be computed.
-            mask = getSetStateFields();
-            int fieldMask = ~mask & ALL_FIELDS;
-            if (fieldMask != 0 || cachedFixedDate == Long.MIN_VALUE) {
-                mask |= computeFields(fieldMask,
-                                      mask & (ZONE_OFFSET_MASK|DST_OFFSET_MASK));
-                assert mask == ALL_FIELDS;
-            }
-        } else {
-            // Specify all fields
-            mask = ALL_FIELDS;
-            computeFields(mask, 0);
-        }
-        // After computing all the fields, set the field state to `COMPUTED'.
-        setFieldsComputed(mask);
-    }
-
-    /**
-     * This computeFields implements the conversion from UTC
-     * (millisecond offset from the Epoch) to calendar
-     * field values. fieldMask specifies which fields to change the
-     * setting state to COMPUTED, although all fields are set to
-     * the correct values. This is required to fix 4685354.
-     *
-     * @param fieldMask a bit mask to specify which fields to change
-     * the setting state.
-     * @param tzMask a bit mask to specify which time zone offset
-     * fields to be used for time calculations
-     * @return a new field mask that indicates what field values have
-     * actually been set.
-     */
-    private int computeFields(int fieldMask, int tzMask) {
-        int zoneOffset = 0;
-        TimeZone tz = getZone();
-        if (zoneOffsets == null) {
-            zoneOffsets = new int[2];
-        }
-        if (tzMask != (ZONE_OFFSET_MASK|DST_OFFSET_MASK)) {
-            zoneOffset = tz.getOffset(time);
-            zoneOffsets[0] = tz.getRawOffset();
-            zoneOffsets[1] = zoneOffset - zoneOffsets[0];
-        }
-        if (tzMask != 0) {
-            if (isFieldSet(tzMask, ZONE_OFFSET)) {
-                zoneOffsets[0] = internalGet(ZONE_OFFSET);
-            }
-            if (isFieldSet(tzMask, DST_OFFSET)) {
-                zoneOffsets[1] = internalGet(DST_OFFSET);
-            }
-            zoneOffset = zoneOffsets[0] + zoneOffsets[1];
-        }
-
-        // By computing time and zoneOffset separately, we can take
-        // the wider range of time+zoneOffset than the previous
-        // implementation.
-        long fixedDate = zoneOffset / ONE_DAY;
-        int timeOfDay = zoneOffset % (int)ONE_DAY;
-        fixedDate += time / ONE_DAY;
-        timeOfDay += (int) (time % ONE_DAY);
-        if (timeOfDay >= ONE_DAY) {
-            timeOfDay -= ONE_DAY;
-            ++fixedDate;
-        } else {
-            while (timeOfDay < 0) {
-                timeOfDay += ONE_DAY;
-                --fixedDate;
-            }
-        }
-        fixedDate += EPOCH_OFFSET;
-
-        // See if we can use jdate to avoid date calculation.
-        if (fixedDate != cachedFixedDate || fixedDate < 0) {
-            jcal.getCalendarDateFromFixedDate(jdate, fixedDate);
-            cachedFixedDate = fixedDate;
-        }
-        int era = getEraIndex(jdate);
-        int year = jdate.getYear();
-
-        // Always set the ERA and YEAR values.
-        internalSet(ERA, era);
-        internalSet(YEAR, year);
-        int mask = fieldMask | (ERA_MASK|YEAR_MASK);
-
-        int month =  jdate.getMonth() - 1; // 0-based
-        int dayOfMonth = jdate.getDayOfMonth();
-
-        // Set the basic date fields.
-        if ((fieldMask & (MONTH_MASK|DAY_OF_MONTH_MASK|DAY_OF_WEEK_MASK))
-            != 0) {
-            internalSet(MONTH, month);
-            internalSet(DAY_OF_MONTH, dayOfMonth);
-            internalSet(DAY_OF_WEEK, jdate.getDayOfWeek());
-            mask |= MONTH_MASK|DAY_OF_MONTH_MASK|DAY_OF_WEEK_MASK;
-        }
-
-        if ((fieldMask & (HOUR_OF_DAY_MASK|AM_PM_MASK|HOUR_MASK
-                          |MINUTE_MASK|SECOND_MASK|MILLISECOND_MASK)) != 0) {
-            if (timeOfDay != 0) {
-                int hours = timeOfDay / ONE_HOUR;
-                internalSet(HOUR_OF_DAY, hours);
-                internalSet(AM_PM, hours / 12); // Assume AM == 0
-                internalSet(HOUR, hours % 12);
-                int r = timeOfDay % ONE_HOUR;
-                internalSet(MINUTE, r / ONE_MINUTE);
-                r %= ONE_MINUTE;
-                internalSet(SECOND, r / ONE_SECOND);
-                internalSet(MILLISECOND, r % ONE_SECOND);
-            } else {
-                internalSet(HOUR_OF_DAY, 0);
-                internalSet(AM_PM, AM);
-                internalSet(HOUR, 0);
-                internalSet(MINUTE, 0);
-                internalSet(SECOND, 0);
-                internalSet(MILLISECOND, 0);
-            }
-            mask |= (HOUR_OF_DAY_MASK|AM_PM_MASK|HOUR_MASK
-                     |MINUTE_MASK|SECOND_MASK|MILLISECOND_MASK);
-        }
-
-        if ((fieldMask & (ZONE_OFFSET_MASK|DST_OFFSET_MASK)) != 0) {
-            internalSet(ZONE_OFFSET, zoneOffsets[0]);
-            internalSet(DST_OFFSET, zoneOffsets[1]);
-            mask |= (ZONE_OFFSET_MASK|DST_OFFSET_MASK);
-        }
-
-        if ((fieldMask & (DAY_OF_YEAR_MASK|WEEK_OF_YEAR_MASK
-                          |WEEK_OF_MONTH_MASK|DAY_OF_WEEK_IN_MONTH_MASK)) != 0) {
-            int normalizedYear = jdate.getNormalizedYear();
-            // If it's a year of an era transition, we need to handle
-            // irregular year boundaries.
-            boolean transitionYear = isTransitionYear(jdate.getNormalizedYear());
-            int dayOfYear;
-            long fixedDateJan1;
-            if (transitionYear) {
-                fixedDateJan1 = getFixedDateJan1(jdate, fixedDate);
-                dayOfYear = (int)(fixedDate - fixedDateJan1) + 1;
-            } else if (normalizedYear == MIN_VALUES[YEAR]) {
-                CalendarDate dx = jcal.getCalendarDate(Long.MIN_VALUE, getZone());
-                fixedDateJan1 = jcal.getFixedDate(dx);
-                dayOfYear = (int)(fixedDate - fixedDateJan1) + 1;
-            } else {
-                dayOfYear = (int) jcal.getDayOfYear(jdate);
-                fixedDateJan1 = fixedDate - dayOfYear + 1;
-            }
-            long fixedDateMonth1 = transitionYear ?
-                getFixedDateMonth1(jdate, fixedDate) : fixedDate - dayOfMonth + 1;
-
-            internalSet(DAY_OF_YEAR, dayOfYear);
-            internalSet(DAY_OF_WEEK_IN_MONTH, (dayOfMonth - 1) / 7 + 1);
-
-            int weekOfYear = getWeekNumber(fixedDateJan1, fixedDate);
-
-            // The spec is to calculate WEEK_OF_YEAR in the
-            // ISO8601-style. This creates problems, though.
-            if (weekOfYear == 0) {
-                // If the date belongs to the last week of the
-                // previous year, use the week number of "12/31" of
-                // the "previous" year. Again, if the previous year is
-                // a transition year, we need to take care of it.
-                // Usually the previous day of the first day of a year
-                // is December 31, which is not always true in the
-                // Japanese imperial calendar system.
-                long fixedDec31 = fixedDateJan1 - 1;
-                long prevJan1;
-                LocalGregorianCalendar.Date d = getCalendarDate(fixedDec31);
-                if (!(transitionYear || isTransitionYear(d.getNormalizedYear()))) {
-                    prevJan1 = fixedDateJan1 - 365;
-                    if (d.isLeapYear()) {
-                        --prevJan1;
-                    }
-                } else if (transitionYear) {
-                    if (jdate.getYear() == 1) {
-                        // As of Heisei (since Meiji) there's no case
-                        // that there are multiple transitions in a
-                        // year.  Historically there was such
-                        // case. There might be such case again in the
-                        // future.
-                        if (era > HEISEI) {
-                            CalendarDate pd = eras[era - 1].getSinceDate();
-                            if (normalizedYear == pd.getYear()) {
-                                d.setMonth(pd.getMonth()).setDayOfMonth(pd.getDayOfMonth());
-                            }
-                        } else {
-                            d.setMonth(jcal.JANUARY).setDayOfMonth(1);
-                        }
-                        jcal.normalize(d);
-                        prevJan1 = jcal.getFixedDate(d);
-                    } else {
-                        prevJan1 = fixedDateJan1 - 365;
-                        if (d.isLeapYear()) {
-                            --prevJan1;
-                        }
-                    }
-                } else {
-                    CalendarDate cd = eras[getEraIndex(jdate)].getSinceDate();
-                    d.setMonth(cd.getMonth()).setDayOfMonth(cd.getDayOfMonth());
-                    jcal.normalize(d);
-                    prevJan1 = jcal.getFixedDate(d);
-                }
-                weekOfYear = getWeekNumber(prevJan1, fixedDec31);
-            } else {
-                if (!transitionYear) {
-                    // Regular years
-                    if (weekOfYear >= 52) {
-                        long nextJan1 = fixedDateJan1 + 365;
-                        if (jdate.isLeapYear()) {
-                            nextJan1++;
-                        }
-                        long nextJan1st = jcal.getDayOfWeekDateOnOrBefore(nextJan1 + 6,
-                                                                          getFirstDayOfWeek());
-                        int ndays = (int)(nextJan1st - nextJan1);
-                        if (ndays >= getMinimalDaysInFirstWeek() && fixedDate >= (nextJan1st - 7)) {
-                            // The first days forms a week in which the date is included.
-                            weekOfYear = 1;
-                        }
-                    }
-                } else {
-                    LocalGregorianCalendar.Date d = (LocalGregorianCalendar.Date) jdate.clone();
-                    long nextJan1;
-                    if (jdate.getYear() == 1) {
-                        d.addYear(+1);
-                        d.setMonth(jcal.JANUARY).setDayOfMonth(1);
-                        nextJan1 = jcal.getFixedDate(d);
-                    } else {
-                        int nextEraIndex = getEraIndex(d) + 1;
-                        CalendarDate cd = eras[nextEraIndex].getSinceDate();
-                        d.setEra(eras[nextEraIndex]);
-                        d.setDate(1, cd.getMonth(), cd.getDayOfMonth());
-                        jcal.normalize(d);
-                        nextJan1 = jcal.getFixedDate(d);
-                    }
-                    long nextJan1st = jcal.getDayOfWeekDateOnOrBefore(nextJan1 + 6,
-                                                                      getFirstDayOfWeek());
-                    int ndays = (int)(nextJan1st - nextJan1);
-                    if (ndays >= getMinimalDaysInFirstWeek() && fixedDate >= (nextJan1st - 7)) {
-                        // The first days forms a week in which the date is included.
-                        weekOfYear = 1;
-                    }
-                }
-            }
-            internalSet(WEEK_OF_YEAR, weekOfYear);
-            internalSet(WEEK_OF_MONTH, getWeekNumber(fixedDateMonth1, fixedDate));
-            mask |= (DAY_OF_YEAR_MASK|WEEK_OF_YEAR_MASK|WEEK_OF_MONTH_MASK|DAY_OF_WEEK_IN_MONTH_MASK);
-        }
-        return mask;
-    }
-
-    /**
-     * Returns the number of weeks in a period between fixedDay1 and
-     * fixedDate. The getFirstDayOfWeek-getMinimalDaysInFirstWeek rule
-     * is applied to calculate the number of weeks.
-     *
-     * @param fixedDay1 the fixed date of the first day of the period
-     * @param fixedDate the fixed date of the last day of the period
-     * @return the number of weeks of the given period
-     */
-    private final int getWeekNumber(long fixedDay1, long fixedDate) {
-        // We can always use `jcal' since Julian and Gregorian are the
-        // same thing for this calculation.
-        long fixedDay1st = jcal.getDayOfWeekDateOnOrBefore(fixedDay1 + 6,
-                                                           getFirstDayOfWeek());
-        int ndays = (int)(fixedDay1st - fixedDay1);
-        assert ndays <= 7;
-        if (ndays >= getMinimalDaysInFirstWeek()) {
-            fixedDay1st -= 7;
-        }
-        int normalizedDayOfPeriod = (int)(fixedDate - fixedDay1st);
-        if (normalizedDayOfPeriod >= 0) {
-            return normalizedDayOfPeriod / 7 + 1;
-        }
-        return CalendarUtils.floorDivide(normalizedDayOfPeriod, 7) + 1;
-    }
-
-    /**
-     * Converts calendar field values to the time value (millisecond
-     * offset from the <a href="Calendar.html#Epoch">Epoch</a>).
-     *
-     * @exception IllegalArgumentException if any calendar fields are invalid.
-     */
-    protected void computeTime() {
-        // In non-lenient mode, perform brief checking of calendar
-        // fields which have been set externally. Through this
-        // checking, the field values are stored in originalFields[]
-        // to see if any of them are normalized later.
-        if (!isLenient()) {
-            if (originalFields == null) {
-                originalFields = new int[FIELD_COUNT];
-            }
-            for (int field = 0; field < FIELD_COUNT; field++) {
-                int value = internalGet(field);
-                if (isExternallySet(field)) {
-                    // Quick validation for any out of range values
-                    if (value < getMinimum(field) || value > getMaximum(field)) {
-                        throw new IllegalArgumentException(getFieldName(field));
-                    }
-                }
-                originalFields[field] = value;
-            }
-        }
-
-        // Let the super class determine which calendar fields to be
-        // used to calculate the time.
-        int fieldMask = selectFields();
-
-        int year;
-        int era;
-
-        if (isSet(ERA)) {
-            era = internalGet(ERA);
-            year = isSet(YEAR) ? internalGet(YEAR) : 1;
-        } else {
-            if (isSet(YEAR)) {
-                era = eras.length - 1;
-                year = internalGet(YEAR);
-            } else {
-                // Equivalent to 1970 (Gregorian)
-                era = SHOWA;
-                year = 45;
-            }
-        }
-
-        // Calculate the time of day. We rely on the convention that
-        // an UNSET field has 0.
-        long timeOfDay = 0;
-        if (isFieldSet(fieldMask, HOUR_OF_DAY)) {
-            timeOfDay += (long) internalGet(HOUR_OF_DAY);
-        } else {
-            timeOfDay += internalGet(HOUR);
-            // The default value of AM_PM is 0 which designates AM.
-            if (isFieldSet(fieldMask, AM_PM)) {
-                timeOfDay += 12 * internalGet(AM_PM);
-            }
-        }
-        timeOfDay *= 60;
-        timeOfDay += internalGet(MINUTE);
-        timeOfDay *= 60;
-        timeOfDay += internalGet(SECOND);
-        timeOfDay *= 1000;
-        timeOfDay += internalGet(MILLISECOND);
-
-        // Convert the time of day to the number of days and the
-        // millisecond offset from midnight.
-        long fixedDate = timeOfDay / ONE_DAY;
-        timeOfDay %= ONE_DAY;
-        while (timeOfDay < 0) {
-            timeOfDay += ONE_DAY;
-            --fixedDate;
-        }
-
-        // Calculate the fixed date since January 1, 1 (Gregorian).
-        fixedDate += getFixedDate(era, year, fieldMask);
-
-        // millis represents local wall-clock time in milliseconds.
-        long millis = (fixedDate - EPOCH_OFFSET) * ONE_DAY + timeOfDay;
-
-        // Compute the time zone offset and DST offset.  There are two potential
-        // ambiguities here.  We'll assume a 2:00 am (wall time) switchover time
-        // for discussion purposes here.
-        // 1. The transition into DST.  Here, a designated time of 2:00 am - 2:59 am
-        //    can be in standard or in DST depending.  However, 2:00 am is an invalid
-        //    representation (the representation jumps from 1:59:59 am Std to 3:00:00 am DST).
-        //    We assume standard time.
-        // 2. The transition out of DST.  Here, a designated time of 1:00 am - 1:59 am
-        //    can be in standard or DST.  Both are valid representations (the rep
-        //    jumps from 1:59:59 DST to 1:00:00 Std).
-        //    Again, we assume standard time.
-        // We use the TimeZone object, unless the user has explicitly set the ZONE_OFFSET
-        // or DST_OFFSET fields; then we use those fields.
-        TimeZone zone = getZone();
-        if (zoneOffsets == null) {
-            zoneOffsets = new int[2];
-        }
-        int tzMask = fieldMask & (ZONE_OFFSET_MASK|DST_OFFSET_MASK);
-        if (tzMask != (ZONE_OFFSET_MASK|DST_OFFSET_MASK)) {
-            zone.getOffsets(millis - zone.getRawOffset(), zoneOffsets);
-        }
-        if (tzMask != 0) {
-            if (isFieldSet(tzMask, ZONE_OFFSET)) {
-                zoneOffsets[0] = internalGet(ZONE_OFFSET);
-            }
-            if (isFieldSet(tzMask, DST_OFFSET)) {
-                zoneOffsets[1] = internalGet(DST_OFFSET);
-            }
-        }
-
-        // Adjust the time zone offset values to get the UTC time.
-        millis -= zoneOffsets[0] + zoneOffsets[1];
-
-        // Set this calendar's time in milliseconds
-        time = millis;
-
-        int mask = computeFields(fieldMask | getSetStateFields(), tzMask);
-
-        if (!isLenient()) {
-            for (int field = 0; field < FIELD_COUNT; field++) {
-                if (!isExternallySet(field)) {
-                    continue;
-                }
-                if (originalFields[field] != internalGet(field)) {
-                    int wrongValue = internalGet(field);
-                    // Restore the original field values
-                    System.arraycopy(originalFields, 0, fields, 0, fields.length);
-                    throw new IllegalArgumentException(getFieldName(field) + "=" + wrongValue
-                                                       + ", expected " + originalFields[field]);
-                }
-            }
-        }
-        setFieldsNormalized(mask);
-    }
-
-    /**
-     * Computes the fixed date under either the Gregorian or the
-     * Julian calendar, using the given year and the specified calendar fields.
-     *
-     * @param cal the CalendarSystem to be used for the date calculation
-     * @param year the normalized year number, with 0 indicating the
-     * year 1 BCE, -1 indicating 2 BCE, etc.
-     * @param fieldMask the calendar fields to be used for the date calculation
-     * @return the fixed date
-     * @see Calendar#selectFields
-     */
-    private long getFixedDate(int era, int year, int fieldMask) {
-        int month = JANUARY;
-        int firstDayOfMonth = 1;
-        if (isFieldSet(fieldMask, MONTH)) {
-            // No need to check if MONTH has been set (no isSet(MONTH)
-            // call) since its unset value happens to be JANUARY (0).
-            month = internalGet(MONTH);
-
-            // If the month is out of range, adjust it into range.
-            if (month > DECEMBER) {
-                year += month / 12;
-                month %= 12;
-            } else if (month < JANUARY) {
-                int[] rem = new int[1];
-                year += CalendarUtils.floorDivide(month, 12, rem);
-                month = rem[0];
-            }
-        } else {
-            if (year == 1 && era != 0) {
-                CalendarDate d = eras[era].getSinceDate();
-                month = d.getMonth() - 1;
-                firstDayOfMonth = d.getDayOfMonth();
-            }
-        }
-
-        // Adjust the base date if year is the minimum value.
-        if (year == MIN_VALUES[YEAR]) {
-            CalendarDate dx = jcal.getCalendarDate(Long.MIN_VALUE, getZone());
-            int m = dx.getMonth() - 1;
-            if (month < m)
-                month = m;
-            if (month == m)
-                firstDayOfMonth = dx.getDayOfMonth();
-        }
-
-        LocalGregorianCalendar.Date date = jcal.newCalendarDate(TimeZone.NO_TIMEZONE);
-        date.setEra(era > 0 ? eras[era] : null);
-        date.setDate(year, month + 1, firstDayOfMonth);
-        jcal.normalize(date);
-
-        // Get the fixed date since Jan 1, 1 (Gregorian). We are on
-        // the first day of either `month' or January in 'year'.
-        long fixedDate = jcal.getFixedDate(date);
-
-        if (isFieldSet(fieldMask, MONTH)) {
-            // Month-based calculations
-            if (isFieldSet(fieldMask, DAY_OF_MONTH)) {
-                // We are on the "first day" of the month (which may
-                // not be 1). Just add the offset if DAY_OF_MONTH is
-                // set. If the isSet call returns false, that means
-                // DAY_OF_MONTH has been selected just because of the
-                // selected combination. We don't need to add any
-                // since the default value is the "first day".
-                if (isSet(DAY_OF_MONTH)) {
-                    // To avoid underflow with DAY_OF_MONTH-firstDayOfMonth, add
-                    // DAY_OF_MONTH, then subtract firstDayOfMonth.
-                    fixedDate += internalGet(DAY_OF_MONTH);
-                    fixedDate -= firstDayOfMonth;
-                }
-            } else {
-                if (isFieldSet(fieldMask, WEEK_OF_MONTH)) {
-                    long firstDayOfWeek = jcal.getDayOfWeekDateOnOrBefore(fixedDate + 6,
-                                                                          getFirstDayOfWeek());
-                    // If we have enough days in the first week, then
-                    // move to the previous week.
-                    if ((firstDayOfWeek - fixedDate) >= getMinimalDaysInFirstWeek()) {
-                        firstDayOfWeek -= 7;
-                    }
-                    if (isFieldSet(fieldMask, DAY_OF_WEEK)) {
-                        firstDayOfWeek = jcal.getDayOfWeekDateOnOrBefore(firstDayOfWeek + 6,
-                                                                         internalGet(DAY_OF_WEEK));
-                    }
-                    // In lenient mode, we treat days of the previous
-                    // months as a part of the specified
-                    // WEEK_OF_MONTH. See 4633646.
-                    fixedDate = firstDayOfWeek + 7 * (internalGet(WEEK_OF_MONTH) - 1);
-                } else {
-                    int dayOfWeek;
-                    if (isFieldSet(fieldMask, DAY_OF_WEEK)) {
-                        dayOfWeek = internalGet(DAY_OF_WEEK);
-                    } else {
-                        dayOfWeek = getFirstDayOfWeek();
-                    }
-                    // We are basing this on the day-of-week-in-month.  The only
-                    // trickiness occurs if the day-of-week-in-month is
-                    // negative.
-                    int dowim;
-                    if (isFieldSet(fieldMask, DAY_OF_WEEK_IN_MONTH)) {
-                        dowim = internalGet(DAY_OF_WEEK_IN_MONTH);
-                    } else {
-                        dowim = 1;
-                    }
-                    if (dowim >= 0) {
-                        fixedDate = jcal.getDayOfWeekDateOnOrBefore(fixedDate + (7 * dowim) - 1,
-                                                                    dayOfWeek);
-                    } else {
-                        // Go to the first day of the next week of
-                        // the specified week boundary.
-                        int lastDate = monthLength(month, year) + (7 * (dowim + 1));
-                        // Then, get the day of week date on or before the last date.
-                        fixedDate = jcal.getDayOfWeekDateOnOrBefore(fixedDate + lastDate - 1,
-                                                                    dayOfWeek);
-                    }
-                }
-            }
-        } else {
-            // We are on the first day of the year.
-            if (isFieldSet(fieldMask, DAY_OF_YEAR)) {
-                if (isTransitionYear(date.getNormalizedYear())) {
-                    fixedDate = getFixedDateJan1(date, fixedDate);
-                }
-                // Add the offset, then subtract 1. (Make sure to avoid underflow.)
-                fixedDate += internalGet(DAY_OF_YEAR);
-                fixedDate--;
-            } else {
-                long firstDayOfWeek = jcal.getDayOfWeekDateOnOrBefore(fixedDate + 6,
-                                                                      getFirstDayOfWeek());
-                // If we have enough days in the first week, then move
-                // to the previous week.
-                if ((firstDayOfWeek - fixedDate) >= getMinimalDaysInFirstWeek()) {
-                    firstDayOfWeek -= 7;
-                }
-                if (isFieldSet(fieldMask, DAY_OF_WEEK)) {
-                    int dayOfWeek = internalGet(DAY_OF_WEEK);
-                    if (dayOfWeek != getFirstDayOfWeek()) {
-                        firstDayOfWeek = jcal.getDayOfWeekDateOnOrBefore(firstDayOfWeek + 6,
-                                                                         dayOfWeek);
-                    }
-                }
-                fixedDate = firstDayOfWeek + 7 * ((long)internalGet(WEEK_OF_YEAR) - 1);
-            }
-        }
-        return fixedDate;
-    }
-
-    /**
-     * Returns the fixed date of the first day of the year (usually
-     * January 1) before the specified date.
-     *
-     * @param date the date for which the first day of the year is
-     * calculated. The date has to be in the cut-over year.
-     * @param fixedDate the fixed date representation of the date
-     */
-    private final long getFixedDateJan1(LocalGregorianCalendar.Date date, long fixedDate) {
-        Era era = date.getEra();
-        if (date.getEra() != null && date.getYear() == 1) {
-            for (int eraIndex = getEraIndex(date); eraIndex > 0; eraIndex--) {
-                CalendarDate d = eras[eraIndex].getSinceDate();
-                long fd = gcal.getFixedDate(d);
-                // There might be multiple era transitions in a year.
-                if (fd > fixedDate) {
-                    continue;
-                }
-                return fd;
-            }
-        }
-        CalendarDate d = gcal.newCalendarDate(TimeZone.NO_TIMEZONE);
-        d.setDate(date.getNormalizedYear(), gcal.JANUARY, 1);
-        return gcal.getFixedDate(d);
-    }
-
-    /**
-     * Returns the fixed date of the first date of the month (usually
-     * the 1st of the month) before the specified date.
-     *
-     * @param date the date for which the first day of the month is
-     * calculated. The date must be in the era transition year.
-     * @param fixedDate the fixed date representation of the date
-     */
-    private final long getFixedDateMonth1(LocalGregorianCalendar.Date date,
-                                          long fixedDate) {
-        int eraIndex = getTransitionEraIndex(date);
-        if (eraIndex != -1) {
-            long transition = sinceFixedDates[eraIndex];
-            // If the given date is on or after the transition date, then
-            // return the transition date.
-            if (transition <= fixedDate) {
-                return transition;
-            }
-        }
-
-        // Otherwise, we can use the 1st day of the month.
-        return fixedDate - date.getDayOfMonth() + 1;
-    }
-
-    /**
-     * Returns a LocalGregorianCalendar.Date produced from the specified fixed date.
-     *
-     * @param fd the fixed date
-     */
-    private static final LocalGregorianCalendar.Date getCalendarDate(long fd) {
-        LocalGregorianCalendar.Date d = jcal.newCalendarDate(TimeZone.NO_TIMEZONE);
-        jcal.getCalendarDateFromFixedDate(d, fd);
-        return d;
-    }
-
-    /**
-     * Returns the length of the specified month in the specified
-     * Gregorian year. The year number must be normalized.
-     *
-     * @see #isLeapYear(int)
-     */
-    private final int monthLength(int month, int gregorianYear) {
-        return CalendarUtils.isGregorianLeapYear(gregorianYear) ?
-            GregorianCalendar.LEAP_MONTH_LENGTH[month] : GregorianCalendar.MONTH_LENGTH[month];
-    }
-
-    /**
-     * Returns the length of the specified month in the year provided
-     * by internalGet(YEAR).
-     *
-     * @see #isLeapYear(int)
-     */
-    private final int monthLength(int month) {
-        assert jdate.isNormalized();
-        return jdate.isLeapYear() ?
-            GregorianCalendar.LEAP_MONTH_LENGTH[month] : GregorianCalendar.MONTH_LENGTH[month];
-    }
-
-    private final int actualMonthLength() {
-        int length = jcal.getMonthLength(jdate);
-        int eraIndex = getTransitionEraIndex(jdate);
-        if (eraIndex == -1) {
-            long transitionFixedDate = sinceFixedDates[eraIndex];
-            CalendarDate d = eras[eraIndex].getSinceDate();
-            if (transitionFixedDate <= cachedFixedDate) {
-                length -= d.getDayOfMonth() - 1;
-            } else {
-                length = d.getDayOfMonth() - 1;
-            }
-        }
-        return length;
-    }
-
-    /**
-     * Returns the index to the new era if the given date is in a
-     * transition month.  For example, if the give date is Heisei 1
-     * (1989) January 20, then the era index for Heisei is
-     * returned. Likewise, if the given date is Showa 64 (1989)
-     * January 3, then the era index for Heisei is returned. If the
-     * given date is not in any transition month, then -1 is returned.
-     */
-    private static final int getTransitionEraIndex(LocalGregorianCalendar.Date date) {
-        int eraIndex = getEraIndex(date);
-        CalendarDate transitionDate = eras[eraIndex].getSinceDate();
-        if (transitionDate.getYear() == date.getNormalizedYear() &&
-            transitionDate.getMonth() == date.getMonth()) {
-            return eraIndex;
-        }
-        if (eraIndex < eras.length - 1) {
-            transitionDate = eras[++eraIndex].getSinceDate();
-            if (transitionDate.getYear() == date.getNormalizedYear() &&
-                transitionDate.getMonth() == date.getMonth()) {
-                return eraIndex;
-            }
-        }
-        return -1;
-    }
-
-    private final boolean isTransitionYear(int normalizedYear) {
-        for (int i = eras.length - 1; i > 0; i--) {
-            int transitionYear = eras[i].getSinceDate().getYear();
-            if (normalizedYear == transitionYear) {
-                return true;
-            }
-            if (normalizedYear > transitionYear) {
-                break;
-            }
-        }
-        return false;
-    }
-
-    private static final int getEraIndex(LocalGregorianCalendar.Date date) {
-        Era era = date.getEra();
-        for (int i = eras.length - 1; i > 0; i--) {
-            if (eras[i] == era) {
-                return i;
-            }
-        }
-        return 0;
-    }
-
-    /**
-     * Returns this object if it's normalized (all fields and time are
-     * in sync). Otherwise, a cloned object is returned after calling
-     * complete() in lenient mode.
-     */
-    private final JapaneseImperialCalendar getNormalizedCalendar() {
-        JapaneseImperialCalendar jc;
-        if (isFullyNormalized()) {
-            jc = this;
-        } else {
-            // Create a clone and normalize the calendar fields
-            jc = (JapaneseImperialCalendar) this.clone();
-            jc.setLenient(true);
-            jc.complete();
-        }
-        return jc;
-    }
-
-    /**
-     * After adjustments such as add(MONTH), add(YEAR), we don't want the
-     * month to jump around.  E.g., we don't want Jan 31 + 1 month to go to Mar
-     * 3, we want it to go to Feb 28.  Adjustments which might run into this
-     * problem call this method to retain the proper month.
-     */
-    private final void pinDayOfMonth(LocalGregorianCalendar.Date date) {
-        int year = date.getYear();
-        int dom = date.getDayOfMonth();
-        if (year != getMinimum(YEAR)) {
-            date.setDayOfMonth(1);
-            jcal.normalize(date);
-            int monthLength = jcal.getMonthLength(date);
-            if (dom > monthLength) {
-                date.setDayOfMonth(monthLength);
-            } else {
-                date.setDayOfMonth(dom);
-            }
-            jcal.normalize(date);
-        } else {
-            LocalGregorianCalendar.Date d = jcal.getCalendarDate(Long.MIN_VALUE, getZone());
-            LocalGregorianCalendar.Date realDate = jcal.getCalendarDate(time, getZone());
-            long tod = realDate.getTimeOfDay();
-            // Use an equivalent year.
-            realDate.addYear(+400);
-            realDate.setMonth(date.getMonth());
-            realDate.setDayOfMonth(1);
-            jcal.normalize(realDate);
-            int monthLength = jcal.getMonthLength(realDate);
-            if (dom > monthLength) {
-                realDate.setDayOfMonth(monthLength);
-            } else {
-                if (dom < d.getDayOfMonth()) {
-                    realDate.setDayOfMonth(d.getDayOfMonth());
-                } else {
-                    realDate.setDayOfMonth(dom);
-                }
-            }
-            if (realDate.getDayOfMonth() == d.getDayOfMonth() && tod < d.getTimeOfDay()) {
-                realDate.setDayOfMonth(Math.min(dom + 1, monthLength));
-            }
-            // restore the year.
-            date.setDate(year, realDate.getMonth(), realDate.getDayOfMonth());
-            // Don't normalize date here so as not to cause underflow.
-        }
-    }
-
-    /**
-     * Returns the new value after 'roll'ing the specified value and amount.
-     */
-    private static final int getRolledValue(int value, int amount, int min, int max) {
-        assert value >= min && value <= max;
-        int range = max - min + 1;
-        amount %= range;
-        int n = value + amount;
-        if (n > max) {
-            n -= range;
-        } else if (n < min) {
-            n += range;
-        }
-        assert n >= min && n <= max;
-        return n;
-    }
-
-    /**
-     * Returns the ERA.  We need a special method for this because the
-     * default ERA is the current era, but a zero (unset) ERA means before Meiji.
-     */
-    private final int internalGetEra() {
-        return isSet(ERA) ? internalGet(ERA) : eras.length - 1;
-    }
-
-    /**
-     * Updates internal state.
-     */
-    private void readObject(ObjectInputStream stream)
-            throws IOException, ClassNotFoundException {
-        stream.defaultReadObject();
-        if (jdate == null) {
-            jdate = jcal.newCalendarDate(getZone());
-            cachedFixedDate = Long.MIN_VALUE;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/AbstractExecutorService.java b/ojluni/src/main/java/java/util/concurrent/AbstractExecutorService.java
deleted file mode 100755
index bac93ab..0000000
--- a/ojluni/src/main/java/java/util/concurrent/AbstractExecutorService.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.*;
-
-/**
- * Provides default implementations of {@link ExecutorService}
- * execution methods. This class implements the <tt>submit</tt>,
- * <tt>invokeAny</tt> and <tt>invokeAll</tt> methods using a
- * {@link RunnableFuture} returned by <tt>newTaskFor</tt>, which defaults
- * to the {@link FutureTask} class provided in this package.  For example,
- * the implementation of <tt>submit(Runnable)</tt> creates an
- * associated <tt>RunnableFuture</tt> that is executed and
- * returned. Subclasses may override the <tt>newTaskFor</tt> methods
- * to return <tt>RunnableFuture</tt> implementations other than
- * <tt>FutureTask</tt>.
- *
- * <p> <b>Extension example</b>. Here is a sketch of a class
- * that customizes {@link ThreadPoolExecutor} to use
- * a <tt>CustomTask</tt> class instead of the default <tt>FutureTask</tt>:
- *  <pre> {@code
- * public class CustomThreadPoolExecutor extends ThreadPoolExecutor {
- *
- *   static class CustomTask<V> implements RunnableFuture<V> {...}
- *
- *   protected <V> RunnableFuture<V> newTaskFor(Callable<V> c) {
- *       return new CustomTask<V>(c);
- *   }
- *   protected <V> RunnableFuture<V> newTaskFor(Runnable r, V v) {
- *       return new CustomTask<V>(r, v);
- *   }
- *   // ... add constructors, etc.
- * }}</pre>
- *
- * @since 1.5
- * @author Doug Lea
- */
-public abstract class AbstractExecutorService implements ExecutorService {
-
-    /**
-     * Returns a <tt>RunnableFuture</tt> for the given runnable and default
-     * value.
-     *
-     * @param runnable the runnable task being wrapped
-     * @param value the default value for the returned future
-     * @return a <tt>RunnableFuture</tt> which when run will run the
-     * underlying runnable and which, as a <tt>Future</tt>, will yield
-     * the given value as its result and provide for cancellation of
-     * the underlying task.
-     * @since 1.6
-     */
-    protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) {
-        return new FutureTask<T>(runnable, value);
-    }
-
-    /**
-     * Returns a <tt>RunnableFuture</tt> for the given callable task.
-     *
-     * @param callable the callable task being wrapped
-     * @return a <tt>RunnableFuture</tt> which when run will call the
-     * underlying callable and which, as a <tt>Future</tt>, will yield
-     * the callable's result as its result and provide for
-     * cancellation of the underlying task.
-     * @since 1.6
-     */
-    protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) {
-        return new FutureTask<T>(callable);
-    }
-
-    /**
-     * @throws RejectedExecutionException {@inheritDoc}
-     * @throws NullPointerException       {@inheritDoc}
-     */
-    public Future<?> submit(Runnable task) {
-        if (task == null) throw new NullPointerException();
-        RunnableFuture<Void> ftask = newTaskFor(task, null);
-        execute(ftask);
-        return ftask;
-    }
-
-    /**
-     * @throws RejectedExecutionException {@inheritDoc}
-     * @throws NullPointerException       {@inheritDoc}
-     */
-    public <T> Future<T> submit(Runnable task, T result) {
-        if (task == null) throw new NullPointerException();
-        RunnableFuture<T> ftask = newTaskFor(task, result);
-        execute(ftask);
-        return ftask;
-    }
-
-    /**
-     * @throws RejectedExecutionException {@inheritDoc}
-     * @throws NullPointerException       {@inheritDoc}
-     */
-    public <T> Future<T> submit(Callable<T> task) {
-        if (task == null) throw new NullPointerException();
-        RunnableFuture<T> ftask = newTaskFor(task);
-        execute(ftask);
-        return ftask;
-    }
-
-    /**
-     * the main mechanics of invokeAny.
-     */
-    private <T> T doInvokeAny(Collection<? extends Callable<T>> tasks,
-                            boolean timed, long nanos)
-        throws InterruptedException, ExecutionException, TimeoutException {
-        if (tasks == null)
-            throw new NullPointerException();
-        int ntasks = tasks.size();
-        if (ntasks == 0)
-            throw new IllegalArgumentException();
-        List<Future<T>> futures= new ArrayList<Future<T>>(ntasks);
-        ExecutorCompletionService<T> ecs =
-            new ExecutorCompletionService<T>(this);
-
-        // For efficiency, especially in executors with limited
-        // parallelism, check to see if previously submitted tasks are
-        // done before submitting more of them. This interleaving
-        // plus the exception mechanics account for messiness of main
-        // loop.
-
-        try {
-            // Record exceptions so that if we fail to obtain any
-            // result, we can throw the last exception we got.
-            ExecutionException ee = null;
-            long lastTime = timed ? System.nanoTime() : 0;
-            Iterator<? extends Callable<T>> it = tasks.iterator();
-
-            // Start one task for sure; the rest incrementally
-            futures.add(ecs.submit(it.next()));
-            --ntasks;
-            int active = 1;
-
-            for (;;) {
-                Future<T> f = ecs.poll();
-                if (f == null) {
-                    if (ntasks > 0) {
-                        --ntasks;
-                        futures.add(ecs.submit(it.next()));
-                        ++active;
-                    }
-                    else if (active == 0)
-                        break;
-                    else if (timed) {
-                        f = ecs.poll(nanos, TimeUnit.NANOSECONDS);
-                        if (f == null)
-                            throw new TimeoutException();
-                        long now = System.nanoTime();
-                        nanos -= now - lastTime;
-                        lastTime = now;
-                    }
-                    else
-                        f = ecs.take();
-                }
-                if (f != null) {
-                    --active;
-                    try {
-                        return f.get();
-                    } catch (ExecutionException eex) {
-                        ee = eex;
-                    } catch (RuntimeException rex) {
-                        ee = new ExecutionException(rex);
-                    }
-                }
-            }
-
-            if (ee == null)
-                ee = new ExecutionException();
-            throw ee;
-
-        } finally {
-            for (Future<T> f : futures)
-                f.cancel(true);
-        }
-    }
-
-    public <T> T invokeAny(Collection<? extends Callable<T>> tasks)
-        throws InterruptedException, ExecutionException {
-        try {
-            return doInvokeAny(tasks, false, 0);
-        } catch (TimeoutException cannotHappen) {
-            assert false;
-            return null;
-        }
-    }
-
-    public <T> T invokeAny(Collection<? extends Callable<T>> tasks,
-                           long timeout, TimeUnit unit)
-        throws InterruptedException, ExecutionException, TimeoutException {
-        return doInvokeAny(tasks, true, unit.toNanos(timeout));
-    }
-
-    public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
-        throws InterruptedException {
-        if (tasks == null)
-            throw new NullPointerException();
-        List<Future<T>> futures = new ArrayList<Future<T>>(tasks.size());
-        boolean done = false;
-        try {
-            for (Callable<T> t : tasks) {
-                RunnableFuture<T> f = newTaskFor(t);
-                futures.add(f);
-                execute(f);
-            }
-            for (Future<T> f : futures) {
-                if (!f.isDone()) {
-                    try {
-                        f.get();
-                    } catch (CancellationException ignore) {
-                    } catch (ExecutionException ignore) {
-                    }
-                }
-            }
-            done = true;
-            return futures;
-        } finally {
-            if (!done)
-                for (Future<T> f : futures)
-                    f.cancel(true);
-        }
-    }
-
-    public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
-                                         long timeout, TimeUnit unit)
-        throws InterruptedException {
-        if (tasks == null || unit == null)
-            throw new NullPointerException();
-        long nanos = unit.toNanos(timeout);
-        List<Future<T>> futures = new ArrayList<Future<T>>(tasks.size());
-        boolean done = false;
-        try {
-            for (Callable<T> t : tasks)
-                futures.add(newTaskFor(t));
-
-            long lastTime = System.nanoTime();
-
-            // Interleave time checks and calls to execute in case
-            // executor doesn't have any/much parallelism.
-            Iterator<Future<T>> it = futures.iterator();
-            while (it.hasNext()) {
-                execute((Runnable)(it.next()));
-                long now = System.nanoTime();
-                nanos -= now - lastTime;
-                lastTime = now;
-                if (nanos <= 0)
-                    return futures;
-            }
-
-            for (Future<T> f : futures) {
-                if (!f.isDone()) {
-                    if (nanos <= 0)
-                        return futures;
-                    try {
-                        f.get(nanos, TimeUnit.NANOSECONDS);
-                    } catch (CancellationException ignore) {
-                    } catch (ExecutionException ignore) {
-                    } catch (TimeoutException toe) {
-                        return futures;
-                    }
-                    long now = System.nanoTime();
-                    nanos -= now - lastTime;
-                    lastTime = now;
-                }
-            }
-            done = true;
-            return futures;
-        } finally {
-            if (!done)
-                for (Future<T> f : futures)
-                    f.cancel(true);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ArrayBlockingQueue.java b/ojluni/src/main/java/java/util/concurrent/ArrayBlockingQueue.java
deleted file mode 100755
index 32fd504..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ArrayBlockingQueue.java
+++ /dev/null
@@ -1,805 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.concurrent.locks.*;
-import java.util.*;
-
-/**
- * A bounded {@linkplain BlockingQueue blocking queue} backed by an
- * array.  This queue orders elements FIFO (first-in-first-out).  The
- * <em>head</em> of the queue is that element that has been on the
- * queue the longest time.  The <em>tail</em> of the queue is that
- * element that has been on the queue the shortest time. New elements
- * are inserted at the tail of the queue, and the queue retrieval
- * operations obtain elements at the head of the queue.
- *
- * <p>This is a classic &quot;bounded buffer&quot;, in which a
- * fixed-sized array holds elements inserted by producers and
- * extracted by consumers.  Once created, the capacity cannot be
- * changed.  Attempts to {@code put} an element into a full queue
- * will result in the operation blocking; attempts to {@code take} an
- * element from an empty queue will similarly block.
- *
- * <p>This class supports an optional fairness policy for ordering
- * waiting producer and consumer threads.  By default, this ordering
- * is not guaranteed. However, a queue constructed with fairness set
- * to {@code true} grants threads access in FIFO order. Fairness
- * generally decreases throughput but reduces variability and avoids
- * starvation.
- *
- * <p>This class and its iterator implement all of the
- * <em>optional</em> methods of the {@link Collection} and {@link
- * Iterator} interfaces.
- *
- * <p>This class is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @since 1.5
- * @author Doug Lea
- * @param <E> the type of elements held in this collection
- */
-public class ArrayBlockingQueue<E> extends AbstractQueue<E>
-        implements BlockingQueue<E>, java.io.Serializable {
-
-    /**
-     * Serialization ID. This class relies on default serialization
-     * even for the items array, which is default-serialized, even if
-     * it is empty. Otherwise it could not be declared final, which is
-     * necessary here.
-     */
-    private static final long serialVersionUID = -817911632652898426L;
-
-    /** The queued items */
-    final Object[] items;
-
-    /** items index for next take, poll, peek or remove */
-    int takeIndex;
-
-    /** items index for next put, offer, or add */
-    int putIndex;
-
-    /** Number of elements in the queue */
-    int count;
-
-    /*
-     * Concurrency control uses the classic two-condition algorithm
-     * found in any textbook.
-     */
-
-    /** Main lock guarding all access */
-    final ReentrantLock lock;
-    /** Condition for waiting takes */
-    private final Condition notEmpty;
-    /** Condition for waiting puts */
-    private final Condition notFull;
-
-    // Internal helper methods
-
-    /**
-     * Circularly increment i.
-     */
-    final int inc(int i) {
-        return (++i == items.length) ? 0 : i;
-    }
-
-    /**
-     * Circularly decrement i.
-     */
-    final int dec(int i) {
-        return ((i == 0) ? items.length : i) - 1;
-    }
-
-    @SuppressWarnings("unchecked")
-    static <E> E cast(Object item) {
-        return (E) item;
-    }
-
-    /**
-     * Returns item at index i.
-     */
-    final E itemAt(int i) {
-        return this.<E>cast(items[i]);
-    }
-
-    /**
-     * Throws NullPointerException if argument is null.
-     *
-     * @param v the element
-     */
-    private static void checkNotNull(Object v) {
-        if (v == null)
-            throw new NullPointerException();
-    }
-
-    /**
-     * Inserts element at current put position, advances, and signals.
-     * Call only when holding lock.
-     */
-    private void insert(E x) {
-        items[putIndex] = x;
-        putIndex = inc(putIndex);
-        ++count;
-        notEmpty.signal();
-    }
-
-    /**
-     * Extracts element at current take position, advances, and signals.
-     * Call only when holding lock.
-     */
-    private E extract() {
-        final Object[] items = this.items;
-        E x = this.<E>cast(items[takeIndex]);
-        items[takeIndex] = null;
-        takeIndex = inc(takeIndex);
-        --count;
-        notFull.signal();
-        return x;
-    }
-
-    /**
-     * Deletes item at position i.
-     * Utility for remove and iterator.remove.
-     * Call only when holding lock.
-     */
-    void removeAt(int i) {
-        final Object[] items = this.items;
-        // if removing front item, just advance
-        if (i == takeIndex) {
-            items[takeIndex] = null;
-            takeIndex = inc(takeIndex);
-        } else {
-            // slide over all others up through putIndex.
-            for (;;) {
-                int nexti = inc(i);
-                if (nexti != putIndex) {
-                    items[i] = items[nexti];
-                    i = nexti;
-                } else {
-                    items[i] = null;
-                    putIndex = i;
-                    break;
-                }
-            }
-        }
-        --count;
-        notFull.signal();
-    }
-
-    /**
-     * Creates an {@code ArrayBlockingQueue} with the given (fixed)
-     * capacity and default access policy.
-     *
-     * @param capacity the capacity of this queue
-     * @throws IllegalArgumentException if {@code capacity < 1}
-     */
-    public ArrayBlockingQueue(int capacity) {
-        this(capacity, false);
-    }
-
-    /**
-     * Creates an {@code ArrayBlockingQueue} with the given (fixed)
-     * capacity and the specified access policy.
-     *
-     * @param capacity the capacity of this queue
-     * @param fair if {@code true} then queue accesses for threads blocked
-     *        on insertion or removal, are processed in FIFO order;
-     *        if {@code false} the access order is unspecified.
-     * @throws IllegalArgumentException if {@code capacity < 1}
-     */
-    public ArrayBlockingQueue(int capacity, boolean fair) {
-        if (capacity <= 0)
-            throw new IllegalArgumentException();
-        this.items = new Object[capacity];
-        lock = new ReentrantLock(fair);
-        notEmpty = lock.newCondition();
-        notFull =  lock.newCondition();
-    }
-
-    /**
-     * Creates an {@code ArrayBlockingQueue} with the given (fixed)
-     * capacity, the specified access policy and initially containing the
-     * elements of the given collection,
-     * added in traversal order of the collection's iterator.
-     *
-     * @param capacity the capacity of this queue
-     * @param fair if {@code true} then queue accesses for threads blocked
-     *        on insertion or removal, are processed in FIFO order;
-     *        if {@code false} the access order is unspecified.
-     * @param c the collection of elements to initially contain
-     * @throws IllegalArgumentException if {@code capacity} is less than
-     *         {@code c.size()}, or less than 1.
-     * @throws NullPointerException if the specified collection or any
-     *         of its elements are null
-     */
-    public ArrayBlockingQueue(int capacity, boolean fair,
-                              Collection<? extends E> c) {
-        this(capacity, fair);
-
-        final ReentrantLock lock = this.lock;
-        lock.lock(); // Lock only for visibility, not mutual exclusion
-        try {
-            int i = 0;
-            try {
-                for (E e : c) {
-                    checkNotNull(e);
-                    items[i++] = e;
-                }
-            } catch (ArrayIndexOutOfBoundsException ex) {
-                throw new IllegalArgumentException();
-            }
-            count = i;
-            putIndex = (i == capacity) ? 0 : i;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Inserts the specified element at the tail of this queue if it is
-     * possible to do so immediately without exceeding the queue's capacity,
-     * returning {@code true} upon success and throwing an
-     * {@code IllegalStateException} if this queue is full.
-     *
-     * @param e the element to add
-     * @return {@code true} (as specified by {@link Collection#add})
-     * @throws IllegalStateException if this queue is full
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean add(E e) {
-        return super.add(e);
-    }
-
-    /**
-     * Inserts the specified element at the tail of this queue if it is
-     * possible to do so immediately without exceeding the queue's capacity,
-     * returning {@code true} upon success and {@code false} if this queue
-     * is full.  This method is generally preferable to method {@link #add},
-     * which can fail to insert an element only by throwing an exception.
-     *
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean offer(E e) {
-        checkNotNull(e);
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            if (count == items.length)
-                return false;
-            else {
-                insert(e);
-                return true;
-            }
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Inserts the specified element at the tail of this queue, waiting
-     * for space to become available if the queue is full.
-     *
-     * @throws InterruptedException {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void put(E e) throws InterruptedException {
-        checkNotNull(e);
-        final ReentrantLock lock = this.lock;
-        lock.lockInterruptibly();
-        try {
-            while (count == items.length)
-                notFull.await();
-            insert(e);
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Inserts the specified element at the tail of this queue, waiting
-     * up to the specified wait time for space to become available if
-     * the queue is full.
-     *
-     * @throws InterruptedException {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public boolean offer(E e, long timeout, TimeUnit unit)
-        throws InterruptedException {
-
-        checkNotNull(e);
-        long nanos = unit.toNanos(timeout);
-        final ReentrantLock lock = this.lock;
-        lock.lockInterruptibly();
-        try {
-            while (count == items.length) {
-                if (nanos <= 0)
-                    return false;
-                nanos = notFull.awaitNanos(nanos);
-            }
-            insert(e);
-            return true;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public E poll() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return (count == 0) ? null : extract();
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public E take() throws InterruptedException {
-        final ReentrantLock lock = this.lock;
-        lock.lockInterruptibly();
-        try {
-            while (count == 0)
-                notEmpty.await();
-            return extract();
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public E poll(long timeout, TimeUnit unit) throws InterruptedException {
-        long nanos = unit.toNanos(timeout);
-        final ReentrantLock lock = this.lock;
-        lock.lockInterruptibly();
-        try {
-            while (count == 0) {
-                if (nanos <= 0)
-                    return null;
-                nanos = notEmpty.awaitNanos(nanos);
-            }
-            return extract();
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public E peek() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return (count == 0) ? null : itemAt(takeIndex);
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    // this doc comment is overridden to remove the reference to collections
-    // greater in size than Integer.MAX_VALUE
-    /**
-     * Returns the number of elements in this queue.
-     *
-     * @return the number of elements in this queue
-     */
-    public int size() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return count;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    // this doc comment is a modified copy of the inherited doc comment,
-    // without the reference to unlimited queues.
-    /**
-     * Returns the number of additional elements that this queue can ideally
-     * (in the absence of memory or resource constraints) accept without
-     * blocking. This is always equal to the initial capacity of this queue
-     * less the current {@code size} of this queue.
-     *
-     * <p>Note that you <em>cannot</em> always tell if an attempt to insert
-     * an element will succeed by inspecting {@code remainingCapacity}
-     * because it may be the case that another thread is about to
-     * insert or remove an element.
-     */
-    public int remainingCapacity() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return items.length - count;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Removes a single instance of the specified element from this queue,
-     * if it is present.  More formally, removes an element {@code e} such
-     * that {@code o.equals(e)}, if this queue contains one or more such
-     * elements.
-     * Returns {@code true} if this queue contained the specified element
-     * (or equivalently, if this queue changed as a result of the call).
-     *
-     * <p>Removal of interior elements in circular array based queues
-     * is an intrinsically slow and disruptive operation, so should
-     * be undertaken only in exceptional circumstances, ideally
-     * only when the queue is known not to be accessible by other
-     * threads.
-     *
-     * @param o element to be removed from this queue, if present
-     * @return {@code true} if this queue changed as a result of the call
-     */
-    public boolean remove(Object o) {
-        if (o == null) return false;
-        final Object[] items = this.items;
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            for (int i = takeIndex, k = count; k > 0; i = inc(i), k--) {
-                if (o.equals(items[i])) {
-                    removeAt(i);
-                    return true;
-                }
-            }
-            return false;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns {@code true} if this queue contains the specified element.
-     * More formally, returns {@code true} if and only if this queue contains
-     * at least one element {@code e} such that {@code o.equals(e)}.
-     *
-     * @param o object to be checked for containment in this queue
-     * @return {@code true} if this queue contains the specified element
-     */
-    public boolean contains(Object o) {
-        if (o == null) return false;
-        final Object[] items = this.items;
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            for (int i = takeIndex, k = count; k > 0; i = inc(i), k--)
-                if (o.equals(items[i]))
-                    return true;
-            return false;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns an array containing all of the elements in this queue, in
-     * proper sequence.
-     *
-     * <p>The returned array will be "safe" in that no references to it are
-     * maintained by this queue.  (In other words, this method must allocate
-     * a new array).  The caller is thus free to modify the returned array.
-     *
-     * <p>This method acts as bridge between array-based and collection-based
-     * APIs.
-     *
-     * @return an array containing all of the elements in this queue
-     */
-    public Object[] toArray() {
-        final Object[] items = this.items;
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            final int count = this.count;
-            Object[] a = new Object[count];
-            for (int i = takeIndex, k = 0; k < count; i = inc(i), k++)
-                a[k] = items[i];
-            return a;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns an array containing all of the elements in this queue, in
-     * proper sequence; the runtime type of the returned array is that of
-     * the specified array.  If the queue fits in the specified array, it
-     * is returned therein.  Otherwise, a new array is allocated with the
-     * runtime type of the specified array and the size of this queue.
-     *
-     * <p>If this queue fits in the specified array with room to spare
-     * (i.e., the array has more elements than this queue), the element in
-     * the array immediately following the end of the queue is set to
-     * {@code null}.
-     *
-     * <p>Like the {@link #toArray()} method, this method acts as bridge between
-     * array-based and collection-based APIs.  Further, this method allows
-     * precise control over the runtime type of the output array, and may,
-     * under certain circumstances, be used to save allocation costs.
-     *
-     * <p>Suppose {@code x} is a queue known to contain only strings.
-     * The following code can be used to dump the queue into a newly
-     * allocated array of {@code String}:
-     *
-     * <pre>
-     *     String[] y = x.toArray(new String[0]);</pre>
-     *
-     * Note that {@code toArray(new Object[0])} is identical in function to
-     * {@code toArray()}.
-     *
-     * @param a the array into which the elements of the queue are to
-     *          be stored, if it is big enough; otherwise, a new array of the
-     *          same runtime type is allocated for this purpose
-     * @return an array containing all of the elements in this queue
-     * @throws ArrayStoreException if the runtime type of the specified array
-     *         is not a supertype of the runtime type of every element in
-     *         this queue
-     * @throws NullPointerException if the specified array is null
-     */
-    @SuppressWarnings("unchecked")
-    public <T> T[] toArray(T[] a) {
-        final Object[] items = this.items;
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            final int count = this.count;
-            final int len = a.length;
-            if (len < count)
-                a = (T[])java.lang.reflect.Array.newInstance(
-                    a.getClass().getComponentType(), count);
-            for (int i = takeIndex, k = 0; k < count; i = inc(i), k++)
-                a[k] = (T) items[i];
-            if (len > count)
-                a[count] = null;
-            return a;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public String toString() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            int k = count;
-            if (k == 0)
-                return "[]";
-
-            StringBuilder sb = new StringBuilder();
-            sb.append('[');
-            for (int i = takeIndex; ; i = inc(i)) {
-                Object e = items[i];
-                sb.append(e == this ? "(this Collection)" : e);
-                if (--k == 0)
-                    return sb.append(']').toString();
-                sb.append(',').append(' ');
-            }
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Atomically removes all of the elements from this queue.
-     * The queue will be empty after this call returns.
-     */
-    public void clear() {
-        final Object[] items = this.items;
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            for (int i = takeIndex, k = count; k > 0; i = inc(i), k--)
-                items[i] = null;
-            count = 0;
-            putIndex = 0;
-            takeIndex = 0;
-            notFull.signalAll();
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * @throws UnsupportedOperationException {@inheritDoc}
-     * @throws ClassCastException            {@inheritDoc}
-     * @throws NullPointerException          {@inheritDoc}
-     * @throws IllegalArgumentException      {@inheritDoc}
-     */
-    public int drainTo(Collection<? super E> c) {
-        checkNotNull(c);
-        if (c == this)
-            throw new IllegalArgumentException();
-        final Object[] items = this.items;
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            int i = takeIndex;
-            int n = 0;
-            int max = count;
-            while (n < max) {
-                c.add(this.<E>cast(items[i]));
-                items[i] = null;
-                i = inc(i);
-                ++n;
-            }
-            if (n > 0) {
-                count = 0;
-                putIndex = 0;
-                takeIndex = 0;
-                notFull.signalAll();
-            }
-            return n;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * @throws UnsupportedOperationException {@inheritDoc}
-     * @throws ClassCastException            {@inheritDoc}
-     * @throws NullPointerException          {@inheritDoc}
-     * @throws IllegalArgumentException      {@inheritDoc}
-     */
-    public int drainTo(Collection<? super E> c, int maxElements) {
-        checkNotNull(c);
-        if (c == this)
-            throw new IllegalArgumentException();
-        if (maxElements <= 0)
-            return 0;
-        final Object[] items = this.items;
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            int i = takeIndex;
-            int n = 0;
-            int max = (maxElements < count) ? maxElements : count;
-            while (n < max) {
-                c.add(this.<E>cast(items[i]));
-                items[i] = null;
-                i = inc(i);
-                ++n;
-            }
-            if (n > 0) {
-                count -= n;
-                takeIndex = i;
-                notFull.signalAll();
-            }
-            return n;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns an iterator over the elements in this queue in proper sequence.
-     * The elements will be returned in order from first (head) to last (tail).
-     *
-     * <p>The returned {@code Iterator} is a "weakly consistent" iterator that
-     * will never throw {@link java.util.ConcurrentModificationException
-     * ConcurrentModificationException},
-     * and guarantees to traverse elements as they existed upon
-     * construction of the iterator, and may (but is not guaranteed to)
-     * reflect any modifications subsequent to construction.
-     *
-     * @return an iterator over the elements in this queue in proper sequence
-     */
-    public Iterator<E> iterator() {
-        return new Itr();
-    }
-
-    /**
-     * Iterator for ArrayBlockingQueue. To maintain weak consistency
-     * with respect to puts and takes, we (1) read ahead one slot, so
-     * as to not report hasNext true but then not have an element to
-     * return -- however we later recheck this slot to use the most
-     * current value; (2) ensure that each array slot is traversed at
-     * most once (by tracking "remaining" elements); (3) skip over
-     * null slots, which can occur if takes race ahead of iterators.
-     * However, for circular array-based queues, we cannot rely on any
-     * well established definition of what it means to be weakly
-     * consistent with respect to interior removes since these may
-     * require slot overwrites in the process of sliding elements to
-     * cover gaps. So we settle for resiliency, operating on
-     * established apparent nexts, which may miss some elements that
-     * have moved between calls to next.
-     */
-    private class Itr implements Iterator<E> {
-        private int remaining; // Number of elements yet to be returned
-        private int nextIndex; // Index of element to be returned by next
-        private E nextItem;    // Element to be returned by next call to next
-        private E lastItem;    // Element returned by last call to next
-        private int lastRet;   // Index of last element returned, or -1 if none
-
-        Itr() {
-            final ReentrantLock lock = ArrayBlockingQueue.this.lock;
-            lock.lock();
-            try {
-                lastRet = -1;
-                if ((remaining = count) > 0)
-                    nextItem = itemAt(nextIndex = takeIndex);
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public boolean hasNext() {
-            return remaining > 0;
-        }
-
-        public E next() {
-            final ReentrantLock lock = ArrayBlockingQueue.this.lock;
-            lock.lock();
-            try {
-                if (remaining <= 0)
-                    throw new NoSuchElementException();
-                lastRet = nextIndex;
-                E x = itemAt(nextIndex);  // check for fresher value
-                if (x == null) {
-                    x = nextItem;         // we are forced to report old value
-                    lastItem = null;      // but ensure remove fails
-                }
-                else
-                    lastItem = x;
-                while (--remaining > 0 && // skip over nulls
-                       (nextItem = itemAt(nextIndex = inc(nextIndex))) == null)
-                    ;
-                return x;
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public void remove() {
-            final ReentrantLock lock = ArrayBlockingQueue.this.lock;
-            lock.lock();
-            try {
-                int i = lastRet;
-                if (i == -1)
-                    throw new IllegalStateException();
-                lastRet = -1;
-                E x = lastItem;
-                lastItem = null;
-                // only remove if item still at index
-                if (x != null && x == items[i]) {
-                    boolean removingHead = (i == takeIndex);
-                    removeAt(i);
-                    if (!removingHead)
-                        nextIndex = dec(nextIndex);
-                }
-            } finally {
-                lock.unlock();
-            }
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/BlockingDeque.java b/ojluni/src/main/java/java/util/concurrent/BlockingDeque.java
deleted file mode 100755
index 7f37f7e..0000000
--- a/ojluni/src/main/java/java/util/concurrent/BlockingDeque.java
+++ /dev/null
@@ -1,650 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.*;
-
-/**
- * A {@link Deque} that additionally supports blocking operations that wait
- * for the deque to become non-empty when retrieving an element, and wait for
- * space to become available in the deque when storing an element.
- *
- * <p><tt>BlockingDeque</tt> methods come in four forms, with different ways
- * of handling operations that cannot be satisfied immediately, but may be
- * satisfied at some point in the future:
- * one throws an exception, the second returns a special value (either
- * <tt>null</tt> or <tt>false</tt>, depending on the operation), the third
- * blocks the current thread indefinitely until the operation can succeed,
- * and the fourth blocks for only a given maximum time limit before giving
- * up.  These methods are summarized in the following table:
- *
- * <p>
- * <table BORDER CELLPADDING=3 CELLSPACING=1>
- *  <tr>
- *    <td ALIGN=CENTER COLSPAN = 5> <b>First Element (Head)</b></td>
- *  </tr>
- *  <tr>
- *    <td></td>
- *    <td ALIGN=CENTER><em>Throws exception</em></td>
- *    <td ALIGN=CENTER><em>Special value</em></td>
- *    <td ALIGN=CENTER><em>Blocks</em></td>
- *    <td ALIGN=CENTER><em>Times out</em></td>
- *  </tr>
- *  <tr>
- *    <td><b>Insert</b></td>
- *    <td>{@link #addFirst addFirst(e)}</td>
- *    <td>{@link #offerFirst(Object) offerFirst(e)}</td>
- *    <td>{@link #putFirst putFirst(e)}</td>
- *    <td>{@link #offerFirst(Object, long, TimeUnit) offerFirst(e, time, unit)}</td>
- *  </tr>
- *  <tr>
- *    <td><b>Remove</b></td>
- *    <td>{@link #removeFirst removeFirst()}</td>
- *    <td>{@link #pollFirst pollFirst()}</td>
- *    <td>{@link #takeFirst takeFirst()}</td>
- *    <td>{@link #pollFirst(long, TimeUnit) pollFirst(time, unit)}</td>
- *  </tr>
- *  <tr>
- *    <td><b>Examine</b></td>
- *    <td>{@link #getFirst getFirst()}</td>
- *    <td>{@link #peekFirst peekFirst()}</td>
- *    <td><em>not applicable</em></td>
- *    <td><em>not applicable</em></td>
- *  </tr>
- *  <tr>
- *    <td ALIGN=CENTER COLSPAN = 5> <b>Last Element (Tail)</b></td>
- *  </tr>
- *  <tr>
- *    <td></td>
- *    <td ALIGN=CENTER><em>Throws exception</em></td>
- *    <td ALIGN=CENTER><em>Special value</em></td>
- *    <td ALIGN=CENTER><em>Blocks</em></td>
- *    <td ALIGN=CENTER><em>Times out</em></td>
- *  </tr>
- *  <tr>
- *    <td><b>Insert</b></td>
- *    <td>{@link #addLast addLast(e)}</td>
- *    <td>{@link #offerLast(Object) offerLast(e)}</td>
- *    <td>{@link #putLast putLast(e)}</td>
- *    <td>{@link #offerLast(Object, long, TimeUnit) offerLast(e, time, unit)}</td>
- *  </tr>
- *  <tr>
- *    <td><b>Remove</b></td>
- *    <td>{@link #removeLast() removeLast()}</td>
- *    <td>{@link #pollLast() pollLast()}</td>
- *    <td>{@link #takeLast takeLast()}</td>
- *    <td>{@link #pollLast(long, TimeUnit) pollLast(time, unit)}</td>
- *  </tr>
- *  <tr>
- *    <td><b>Examine</b></td>
- *    <td>{@link #getLast getLast()}</td>
- *    <td>{@link #peekLast peekLast()}</td>
- *    <td><em>not applicable</em></td>
- *    <td><em>not applicable</em></td>
- *  </tr>
- * </table>
- *
- * <p>Like any {@link BlockingQueue}, a <tt>BlockingDeque</tt> is thread safe,
- * does not permit null elements, and may (or may not) be
- * capacity-constrained.
- *
- * <p>A <tt>BlockingDeque</tt> implementation may be used directly as a FIFO
- * <tt>BlockingQueue</tt>. The methods inherited from the
- * <tt>BlockingQueue</tt> interface are precisely equivalent to
- * <tt>BlockingDeque</tt> methods as indicated in the following table:
- *
- * <p>
- * <table BORDER CELLPADDING=3 CELLSPACING=1>
- *  <tr>
- *    <td ALIGN=CENTER> <b><tt>BlockingQueue</tt> Method</b></td>
- *    <td ALIGN=CENTER> <b>Equivalent <tt>BlockingDeque</tt> Method</b></td>
- *  </tr>
- *  <tr>
- *    <td ALIGN=CENTER COLSPAN = 2> <b>Insert</b></td>
- *  </tr>
- *  <tr>
- *    <td>{@link #add(Object) add(e)}</td>
- *    <td>{@link #addLast(Object) addLast(e)}</td>
- *  </tr>
- *  <tr>
- *    <td>{@link #offer(Object) offer(e)}</td>
- *    <td>{@link #offerLast(Object) offerLast(e)}</td>
- *  </tr>
- *  <tr>
- *    <td>{@link #put(Object) put(e)}</td>
- *    <td>{@link #putLast(Object) putLast(e)}</td>
- *  </tr>
- *  <tr>
- *    <td>{@link #offer(Object, long, TimeUnit) offer(e, time, unit)}</td>
- *    <td>{@link #offerLast(Object, long, TimeUnit) offerLast(e, time, unit)}</td>
- *  </tr>
- *  <tr>
- *    <td ALIGN=CENTER COLSPAN = 2> <b>Remove</b></td>
- *  </tr>
- *  <tr>
- *    <td>{@link #remove() remove()}</td>
- *    <td>{@link #removeFirst() removeFirst()}</td>
- *  </tr>
- *  <tr>
- *    <td>{@link #poll() poll()}</td>
- *    <td>{@link #pollFirst() pollFirst()}</td>
- *  </tr>
- *  <tr>
- *    <td>{@link #take() take()}</td>
- *    <td>{@link #takeFirst() takeFirst()}</td>
- *  </tr>
- *  <tr>
- *    <td>{@link #poll(long, TimeUnit) poll(time, unit)}</td>
- *    <td>{@link #pollFirst(long, TimeUnit) pollFirst(time, unit)}</td>
- *  </tr>
- *  <tr>
- *    <td ALIGN=CENTER COLSPAN = 2> <b>Examine</b></td>
- *  </tr>
- *  <tr>
- *    <td>{@link #element() element()}</td>
- *    <td>{@link #getFirst() getFirst()}</td>
- *  </tr>
- *  <tr>
- *    <td>{@link #peek() peek()}</td>
- *    <td>{@link #peekFirst() peekFirst()}</td>
- *  </tr>
- * </table>
- *
- * <p>Memory consistency effects: As with other concurrent
- * collections, actions in a thread prior to placing an object into a
- * {@code BlockingDeque}
- * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
- * actions subsequent to the access or removal of that element from
- * the {@code BlockingDeque} in another thread.
- *
- * <p>This interface is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @since 1.6
- * @author Doug Lea
- * @param <E> the type of elements held in this collection
- */
-public interface BlockingDeque<E> extends BlockingQueue<E>, Deque<E> {
-    /*
-     * We have "diamond" multiple interface inheritance here, and that
-     * introduces ambiguities.  Methods might end up with different
-     * specs depending on the branch chosen by javadoc.  Thus a lot of
-     * methods specs here are copied from superinterfaces.
-     */
-
-    /**
-     * Inserts the specified element at the front of this deque if it is
-     * possible to do so immediately without violating capacity restrictions,
-     * throwing an <tt>IllegalStateException</tt> if no space is currently
-     * available.  When using a capacity-restricted deque, it is generally
-     * preferable to use {@link #offerFirst(Object) offerFirst}.
-     *
-     * @param e the element to add
-     * @throws IllegalStateException {@inheritDoc}
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    void addFirst(E e);
-
-    /**
-     * Inserts the specified element at the end of this deque if it is
-     * possible to do so immediately without violating capacity restrictions,
-     * throwing an <tt>IllegalStateException</tt> if no space is currently
-     * available.  When using a capacity-restricted deque, it is generally
-     * preferable to use {@link #offerLast(Object) offerLast}.
-     *
-     * @param e the element to add
-     * @throws IllegalStateException {@inheritDoc}
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    void addLast(E e);
-
-    /**
-     * Inserts the specified element at the front of this deque if it is
-     * possible to do so immediately without violating capacity restrictions,
-     * returning <tt>true</tt> upon success and <tt>false</tt> if no space is
-     * currently available.
-     * When using a capacity-restricted deque, this method is generally
-     * preferable to the {@link #addFirst(Object) addFirst} method, which can
-     * fail to insert an element only by throwing an exception.
-     *
-     * @param e the element to add
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    boolean offerFirst(E e);
-
-    /**
-     * Inserts the specified element at the end of this deque if it is
-     * possible to do so immediately without violating capacity restrictions,
-     * returning <tt>true</tt> upon success and <tt>false</tt> if no space is
-     * currently available.
-     * When using a capacity-restricted deque, this method is generally
-     * preferable to the {@link #addLast(Object) addLast} method, which can
-     * fail to insert an element only by throwing an exception.
-     *
-     * @param e the element to add
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    boolean offerLast(E e);
-
-    /**
-     * Inserts the specified element at the front of this deque,
-     * waiting if necessary for space to become available.
-     *
-     * @param e the element to add
-     * @throws InterruptedException if interrupted while waiting
-     * @throws ClassCastException if the class of the specified element
-     *         prevents it from being added to this deque
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException if some property of the specified
-     *         element prevents it from being added to this deque
-     */
-    void putFirst(E e) throws InterruptedException;
-
-    /**
-     * Inserts the specified element at the end of this deque,
-     * waiting if necessary for space to become available.
-     *
-     * @param e the element to add
-     * @throws InterruptedException if interrupted while waiting
-     * @throws ClassCastException if the class of the specified element
-     *         prevents it from being added to this deque
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException if some property of the specified
-     *         element prevents it from being added to this deque
-     */
-    void putLast(E e) throws InterruptedException;
-
-    /**
-     * Inserts the specified element at the front of this deque,
-     * waiting up to the specified wait time if necessary for space to
-     * become available.
-     *
-     * @param e the element to add
-     * @param timeout how long to wait before giving up, in units of
-     *        <tt>unit</tt>
-     * @param unit a <tt>TimeUnit</tt> determining how to interpret the
-     *        <tt>timeout</tt> parameter
-     * @return <tt>true</tt> if successful, or <tt>false</tt> if
-     *         the specified waiting time elapses before space is available
-     * @throws InterruptedException if interrupted while waiting
-     * @throws ClassCastException if the class of the specified element
-     *         prevents it from being added to this deque
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException if some property of the specified
-     *         element prevents it from being added to this deque
-     */
-    boolean offerFirst(E e, long timeout, TimeUnit unit)
-        throws InterruptedException;
-
-    /**
-     * Inserts the specified element at the end of this deque,
-     * waiting up to the specified wait time if necessary for space to
-     * become available.
-     *
-     * @param e the element to add
-     * @param timeout how long to wait before giving up, in units of
-     *        <tt>unit</tt>
-     * @param unit a <tt>TimeUnit</tt> determining how to interpret the
-     *        <tt>timeout</tt> parameter
-     * @return <tt>true</tt> if successful, or <tt>false</tt> if
-     *         the specified waiting time elapses before space is available
-     * @throws InterruptedException if interrupted while waiting
-     * @throws ClassCastException if the class of the specified element
-     *         prevents it from being added to this deque
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException if some property of the specified
-     *         element prevents it from being added to this deque
-     */
-    boolean offerLast(E e, long timeout, TimeUnit unit)
-        throws InterruptedException;
-
-    /**
-     * Retrieves and removes the first element of this deque, waiting
-     * if necessary until an element becomes available.
-     *
-     * @return the head of this deque
-     * @throws InterruptedException if interrupted while waiting
-     */
-    E takeFirst() throws InterruptedException;
-
-    /**
-     * Retrieves and removes the last element of this deque, waiting
-     * if necessary until an element becomes available.
-     *
-     * @return the tail of this deque
-     * @throws InterruptedException if interrupted while waiting
-     */
-    E takeLast() throws InterruptedException;
-
-    /**
-     * Retrieves and removes the first element of this deque, waiting
-     * up to the specified wait time if necessary for an element to
-     * become available.
-     *
-     * @param timeout how long to wait before giving up, in units of
-     *        <tt>unit</tt>
-     * @param unit a <tt>TimeUnit</tt> determining how to interpret the
-     *        <tt>timeout</tt> parameter
-     * @return the head of this deque, or <tt>null</tt> if the specified
-     *         waiting time elapses before an element is available
-     * @throws InterruptedException if interrupted while waiting
-     */
-    E pollFirst(long timeout, TimeUnit unit)
-        throws InterruptedException;
-
-    /**
-     * Retrieves and removes the last element of this deque, waiting
-     * up to the specified wait time if necessary for an element to
-     * become available.
-     *
-     * @param timeout how long to wait before giving up, in units of
-     *        <tt>unit</tt>
-     * @param unit a <tt>TimeUnit</tt> determining how to interpret the
-     *        <tt>timeout</tt> parameter
-     * @return the tail of this deque, or <tt>null</tt> if the specified
-     *         waiting time elapses before an element is available
-     * @throws InterruptedException if interrupted while waiting
-     */
-    E pollLast(long timeout, TimeUnit unit)
-        throws InterruptedException;
-
-    /**
-     * Removes the first occurrence of the specified element from this deque.
-     * If the deque does not contain the element, it is unchanged.
-     * More formally, removes the first element <tt>e</tt> such that
-     * <tt>o.equals(e)</tt> (if such an element exists).
-     * Returns <tt>true</tt> if this deque contained the specified element
-     * (or equivalently, if this deque changed as a result of the call).
-     *
-     * @param o element to be removed from this deque, if present
-     * @return <tt>true</tt> if an element was removed as a result of this call
-     * @throws ClassCastException if the class of the specified element
-     *         is incompatible with this deque
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>)
-     * @throws NullPointerException if the specified element is null
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>)
-     */
-    boolean removeFirstOccurrence(Object o);
-
-    /**
-     * Removes the last occurrence of the specified element from this deque.
-     * If the deque does not contain the element, it is unchanged.
-     * More formally, removes the last element <tt>e</tt> such that
-     * <tt>o.equals(e)</tt> (if such an element exists).
-     * Returns <tt>true</tt> if this deque contained the specified element
-     * (or equivalently, if this deque changed as a result of the call).
-     *
-     * @param o element to be removed from this deque, if present
-     * @return <tt>true</tt> if an element was removed as a result of this call
-     * @throws ClassCastException if the class of the specified element
-     *         is incompatible with this deque
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>)
-     * @throws NullPointerException if the specified element is null
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>)
-     */
-    boolean removeLastOccurrence(Object o);
-
-    // *** BlockingQueue methods ***
-
-    /**
-     * Inserts the specified element into the queue represented by this deque
-     * (in other words, at the tail of this deque) if it is possible to do so
-     * immediately without violating capacity restrictions, returning
-     * <tt>true</tt> upon success and throwing an
-     * <tt>IllegalStateException</tt> if no space is currently available.
-     * When using a capacity-restricted deque, it is generally preferable to
-     * use {@link #offer(Object) offer}.
-     *
-     * <p>This method is equivalent to {@link #addLast(Object) addLast}.
-     *
-     * @param e the element to add
-     * @throws IllegalStateException {@inheritDoc}
-     * @throws ClassCastException if the class of the specified element
-     *         prevents it from being added to this deque
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException if some property of the specified
-     *         element prevents it from being added to this deque
-     */
-    boolean add(E e);
-
-    /**
-     * Inserts the specified element into the queue represented by this deque
-     * (in other words, at the tail of this deque) if it is possible to do so
-     * immediately without violating capacity restrictions, returning
-     * <tt>true</tt> upon success and <tt>false</tt> if no space is currently
-     * available.  When using a capacity-restricted deque, this method is
-     * generally preferable to the {@link #add} method, which can fail to
-     * insert an element only by throwing an exception.
-     *
-     * <p>This method is equivalent to {@link #offerLast(Object) offerLast}.
-     *
-     * @param e the element to add
-     * @throws ClassCastException if the class of the specified element
-     *         prevents it from being added to this deque
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException if some property of the specified
-     *         element prevents it from being added to this deque
-     */
-    boolean offer(E e);
-
-    /**
-     * Inserts the specified element into the queue represented by this deque
-     * (in other words, at the tail of this deque), waiting if necessary for
-     * space to become available.
-     *
-     * <p>This method is equivalent to {@link #putLast(Object) putLast}.
-     *
-     * @param e the element to add
-     * @throws InterruptedException {@inheritDoc}
-     * @throws ClassCastException if the class of the specified element
-     *         prevents it from being added to this deque
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException if some property of the specified
-     *         element prevents it from being added to this deque
-     */
-    void put(E e) throws InterruptedException;
-
-    /**
-     * Inserts the specified element into the queue represented by this deque
-     * (in other words, at the tail of this deque), waiting up to the
-     * specified wait time if necessary for space to become available.
-     *
-     * <p>This method is equivalent to
-     * {@link #offerLast(Object,long,TimeUnit) offerLast}.
-     *
-     * @param e the element to add
-     * @return <tt>true</tt> if the element was added to this deque, else
-     *         <tt>false</tt>
-     * @throws InterruptedException {@inheritDoc}
-     * @throws ClassCastException if the class of the specified element
-     *         prevents it from being added to this deque
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException if some property of the specified
-     *         element prevents it from being added to this deque
-     */
-    boolean offer(E e, long timeout, TimeUnit unit)
-        throws InterruptedException;
-
-    /**
-     * Retrieves and removes the head of the queue represented by this deque
-     * (in other words, the first element of this deque).
-     * This method differs from {@link #poll poll} only in that it
-     * throws an exception if this deque is empty.
-     *
-     * <p>This method is equivalent to {@link #removeFirst() removeFirst}.
-     *
-     * @return the head of the queue represented by this deque
-     * @throws NoSuchElementException if this deque is empty
-     */
-    E remove();
-
-    /**
-     * Retrieves and removes the head of the queue represented by this deque
-     * (in other words, the first element of this deque), or returns
-     * <tt>null</tt> if this deque is empty.
-     *
-     * <p>This method is equivalent to {@link #pollFirst()}.
-     *
-     * @return the head of this deque, or <tt>null</tt> if this deque is empty
-     */
-    E poll();
-
-    /**
-     * Retrieves and removes the head of the queue represented by this deque
-     * (in other words, the first element of this deque), waiting if
-     * necessary until an element becomes available.
-     *
-     * <p>This method is equivalent to {@link #takeFirst() takeFirst}.
-     *
-     * @return the head of this deque
-     * @throws InterruptedException if interrupted while waiting
-     */
-    E take() throws InterruptedException;
-
-    /**
-     * Retrieves and removes the head of the queue represented by this deque
-     * (in other words, the first element of this deque), waiting up to the
-     * specified wait time if necessary for an element to become available.
-     *
-     * <p>This method is equivalent to
-     * {@link #pollFirst(long,TimeUnit) pollFirst}.
-     *
-     * @return the head of this deque, or <tt>null</tt> if the
-     *         specified waiting time elapses before an element is available
-     * @throws InterruptedException if interrupted while waiting
-     */
-    E poll(long timeout, TimeUnit unit)
-        throws InterruptedException;
-
-    /**
-     * Retrieves, but does not remove, the head of the queue represented by
-     * this deque (in other words, the first element of this deque).
-     * This method differs from {@link #peek peek} only in that it throws an
-     * exception if this deque is empty.
-     *
-     * <p>This method is equivalent to {@link #getFirst() getFirst}.
-     *
-     * @return the head of this deque
-     * @throws NoSuchElementException if this deque is empty
-     */
-    E element();
-
-    /**
-     * Retrieves, but does not remove, the head of the queue represented by
-     * this deque (in other words, the first element of this deque), or
-     * returns <tt>null</tt> if this deque is empty.
-     *
-     * <p>This method is equivalent to {@link #peekFirst() peekFirst}.
-     *
-     * @return the head of this deque, or <tt>null</tt> if this deque is empty
-     */
-    E peek();
-
-    /**
-     * Removes the first occurrence of the specified element from this deque.
-     * If the deque does not contain the element, it is unchanged.
-     * More formally, removes the first element <tt>e</tt> such that
-     * <tt>o.equals(e)</tt> (if such an element exists).
-     * Returns <tt>true</tt> if this deque contained the specified element
-     * (or equivalently, if this deque changed as a result of the call).
-     *
-     * <p>This method is equivalent to
-     * {@link #removeFirstOccurrence(Object) removeFirstOccurrence}.
-     *
-     * @param o element to be removed from this deque, if present
-     * @return <tt>true</tt> if this deque changed as a result of the call
-     * @throws ClassCastException if the class of the specified element
-     *         is incompatible with this deque
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>)
-     * @throws NullPointerException if the specified element is null
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>)
-     */
-    boolean remove(Object o);
-
-    /**
-     * Returns <tt>true</tt> if this deque contains the specified element.
-     * More formally, returns <tt>true</tt> if and only if this deque contains
-     * at least one element <tt>e</tt> such that <tt>o.equals(e)</tt>.
-     *
-     * @param o object to be checked for containment in this deque
-     * @return <tt>true</tt> if this deque contains the specified element
-     * @throws ClassCastException if the class of the specified element
-     *         is incompatible with this deque
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>)
-     * @throws NullPointerException if the specified element is null
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>)
-     */
-    public boolean contains(Object o);
-
-    /**
-     * Returns the number of elements in this deque.
-     *
-     * @return the number of elements in this deque
-     */
-    public int size();
-
-    /**
-     * Returns an iterator over the elements in this deque in proper sequence.
-     * The elements will be returned in order from first (head) to last (tail).
-     *
-     * @return an iterator over the elements in this deque in proper sequence
-     */
-    Iterator<E> iterator();
-
-    // *** Stack methods ***
-
-    /**
-     * Pushes an element onto the stack represented by this deque.  In other
-     * words, inserts the element at the front of this deque unless it would
-     * violate capacity restrictions.
-     *
-     * <p>This method is equivalent to {@link #addFirst(Object) addFirst}.
-     *
-     * @throws IllegalStateException {@inheritDoc}
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    void push(E e);
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/BlockingQueue.java b/ojluni/src/main/java/java/util/concurrent/BlockingQueue.java
deleted file mode 100755
index 4511d27..0000000
--- a/ojluni/src/main/java/java/util/concurrent/BlockingQueue.java
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-import java.util.Collection;
-import java.util.Queue;
-
-/**
- * A {@link java.util.Queue} that additionally supports operations
- * that wait for the queue to become non-empty when retrieving an
- * element, and wait for space to become available in the queue when
- * storing an element.
- *
- * <p><tt>BlockingQueue</tt> methods come in four forms, with different ways
- * of handling operations that cannot be satisfied immediately, but may be
- * satisfied at some point in the future:
- * one throws an exception, the second returns a special value (either
- * <tt>null</tt> or <tt>false</tt>, depending on the operation), the third
- * blocks the current thread indefinitely until the operation can succeed,
- * and the fourth blocks for only a given maximum time limit before giving
- * up.  These methods are summarized in the following table:
- *
- * <p>
- * <table BORDER CELLPADDING=3 CELLSPACING=1>
- *  <tr>
- *    <td></td>
- *    <td ALIGN=CENTER><em>Throws exception</em></td>
- *    <td ALIGN=CENTER><em>Special value</em></td>
- *    <td ALIGN=CENTER><em>Blocks</em></td>
- *    <td ALIGN=CENTER><em>Times out</em></td>
- *  </tr>
- *  <tr>
- *    <td><b>Insert</b></td>
- *    <td>{@link #add add(e)}</td>
- *    <td>{@link #offer offer(e)}</td>
- *    <td>{@link #put put(e)}</td>
- *    <td>{@link #offer(Object, long, TimeUnit) offer(e, time, unit)}</td>
- *  </tr>
- *  <tr>
- *    <td><b>Remove</b></td>
- *    <td>{@link #remove remove()}</td>
- *    <td>{@link #poll poll()}</td>
- *    <td>{@link #take take()}</td>
- *    <td>{@link #poll(long, TimeUnit) poll(time, unit)}</td>
- *  </tr>
- *  <tr>
- *    <td><b>Examine</b></td>
- *    <td>{@link #element element()}</td>
- *    <td>{@link #peek peek()}</td>
- *    <td><em>not applicable</em></td>
- *    <td><em>not applicable</em></td>
- *  </tr>
- * </table>
- *
- * <p>A <tt>BlockingQueue</tt> does not accept <tt>null</tt> elements.
- * Implementations throw <tt>NullPointerException</tt> on attempts
- * to <tt>add</tt>, <tt>put</tt> or <tt>offer</tt> a <tt>null</tt>.  A
- * <tt>null</tt> is used as a sentinel value to indicate failure of
- * <tt>poll</tt> operations.
- *
- * <p>A <tt>BlockingQueue</tt> may be capacity bounded. At any given
- * time it may have a <tt>remainingCapacity</tt> beyond which no
- * additional elements can be <tt>put</tt> without blocking.
- * A <tt>BlockingQueue</tt> without any intrinsic capacity constraints always
- * reports a remaining capacity of <tt>Integer.MAX_VALUE</tt>.
- *
- * <p> <tt>BlockingQueue</tt> implementations are designed to be used
- * primarily for producer-consumer queues, but additionally support
- * the {@link java.util.Collection} interface.  So, for example, it is
- * possible to remove an arbitrary element from a queue using
- * <tt>remove(x)</tt>. However, such operations are in general
- * <em>not</em> performed very efficiently, and are intended for only
- * occasional use, such as when a queued message is cancelled.
- *
- * <p> <tt>BlockingQueue</tt> implementations are thread-safe.  All
- * queuing methods achieve their effects atomically using internal
- * locks or other forms of concurrency control. However, the
- * <em>bulk</em> Collection operations <tt>addAll</tt>,
- * <tt>containsAll</tt>, <tt>retainAll</tt> and <tt>removeAll</tt> are
- * <em>not</em> necessarily performed atomically unless specified
- * otherwise in an implementation. So it is possible, for example, for
- * <tt>addAll(c)</tt> to fail (throwing an exception) after adding
- * only some of the elements in <tt>c</tt>.
- *
- * <p>A <tt>BlockingQueue</tt> does <em>not</em> intrinsically support
- * any kind of &quot;close&quot; or &quot;shutdown&quot; operation to
- * indicate that no more items will be added.  The needs and usage of
- * such features tend to be implementation-dependent. For example, a
- * common tactic is for producers to insert special
- * <em>end-of-stream</em> or <em>poison</em> objects, that are
- * interpreted accordingly when taken by consumers.
- *
- * <p>
- * Usage example, based on a typical producer-consumer scenario.
- * Note that a <tt>BlockingQueue</tt> can safely be used with multiple
- * producers and multiple consumers.
- * <pre>
- * class Producer implements Runnable {
- *   private final BlockingQueue queue;
- *   Producer(BlockingQueue q) { queue = q; }
- *   public void run() {
- *     try {
- *       while (true) { queue.put(produce()); }
- *     } catch (InterruptedException ex) { ... handle ...}
- *   }
- *   Object produce() { ... }
- * }
- *
- * class Consumer implements Runnable {
- *   private final BlockingQueue queue;
- *   Consumer(BlockingQueue q) { queue = q; }
- *   public void run() {
- *     try {
- *       while (true) { consume(queue.take()); }
- *     } catch (InterruptedException ex) { ... handle ...}
- *   }
- *   void consume(Object x) { ... }
- * }
- *
- * class Setup {
- *   void main() {
- *     BlockingQueue q = new SomeQueueImplementation();
- *     Producer p = new Producer(q);
- *     Consumer c1 = new Consumer(q);
- *     Consumer c2 = new Consumer(q);
- *     new Thread(p).start();
- *     new Thread(c1).start();
- *     new Thread(c2).start();
- *   }
- * }
- * </pre>
- *
- * <p>Memory consistency effects: As with other concurrent
- * collections, actions in a thread prior to placing an object into a
- * {@code BlockingQueue}
- * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
- * actions subsequent to the access or removal of that element from
- * the {@code BlockingQueue} in another thread.
- *
- * <p>This interface is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @since 1.5
- * @author Doug Lea
- * @param <E> the type of elements held in this collection
- */
-public interface BlockingQueue<E> extends Queue<E> {
-    /**
-     * Inserts the specified element into this queue if it is possible to do
-     * so immediately without violating capacity restrictions, returning
-     * <tt>true</tt> upon success and throwing an
-     * <tt>IllegalStateException</tt> if no space is currently available.
-     * When using a capacity-restricted queue, it is generally preferable to
-     * use {@link #offer(Object) offer}.
-     *
-     * @param e the element to add
-     * @return <tt>true</tt> (as specified by {@link Collection#add})
-     * @throws IllegalStateException if the element cannot be added at this
-     *         time due to capacity restrictions
-     * @throws ClassCastException if the class of the specified element
-     *         prevents it from being added to this queue
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException if some property of the specified
-     *         element prevents it from being added to this queue
-     */
-    boolean add(E e);
-
-    /**
-     * Inserts the specified element into this queue if it is possible to do
-     * so immediately without violating capacity restrictions, returning
-     * <tt>true</tt> upon success and <tt>false</tt> if no space is currently
-     * available.  When using a capacity-restricted queue, this method is
-     * generally preferable to {@link #add}, which can fail to insert an
-     * element only by throwing an exception.
-     *
-     * @param e the element to add
-     * @return <tt>true</tt> if the element was added to this queue, else
-     *         <tt>false</tt>
-     * @throws ClassCastException if the class of the specified element
-     *         prevents it from being added to this queue
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException if some property of the specified
-     *         element prevents it from being added to this queue
-     */
-    boolean offer(E e);
-
-    /**
-     * Inserts the specified element into this queue, waiting if necessary
-     * for space to become available.
-     *
-     * @param e the element to add
-     * @throws InterruptedException if interrupted while waiting
-     * @throws ClassCastException if the class of the specified element
-     *         prevents it from being added to this queue
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException if some property of the specified
-     *         element prevents it from being added to this queue
-     */
-    void put(E e) throws InterruptedException;
-
-    /**
-     * Inserts the specified element into this queue, waiting up to the
-     * specified wait time if necessary for space to become available.
-     *
-     * @param e the element to add
-     * @param timeout how long to wait before giving up, in units of
-     *        <tt>unit</tt>
-     * @param unit a <tt>TimeUnit</tt> determining how to interpret the
-     *        <tt>timeout</tt> parameter
-     * @return <tt>true</tt> if successful, or <tt>false</tt> if
-     *         the specified waiting time elapses before space is available
-     * @throws InterruptedException if interrupted while waiting
-     * @throws ClassCastException if the class of the specified element
-     *         prevents it from being added to this queue
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException if some property of the specified
-     *         element prevents it from being added to this queue
-     */
-    boolean offer(E e, long timeout, TimeUnit unit)
-        throws InterruptedException;
-
-    /**
-     * Retrieves and removes the head of this queue, waiting if necessary
-     * until an element becomes available.
-     *
-     * @return the head of this queue
-     * @throws InterruptedException if interrupted while waiting
-     */
-    E take() throws InterruptedException;
-
-    /**
-     * Retrieves and removes the head of this queue, waiting up to the
-     * specified wait time if necessary for an element to become available.
-     *
-     * @param timeout how long to wait before giving up, in units of
-     *        <tt>unit</tt>
-     * @param unit a <tt>TimeUnit</tt> determining how to interpret the
-     *        <tt>timeout</tt> parameter
-     * @return the head of this queue, or <tt>null</tt> if the
-     *         specified waiting time elapses before an element is available
-     * @throws InterruptedException if interrupted while waiting
-     */
-    E poll(long timeout, TimeUnit unit)
-        throws InterruptedException;
-
-    /**
-     * Returns the number of additional elements that this queue can ideally
-     * (in the absence of memory or resource constraints) accept without
-     * blocking, or <tt>Integer.MAX_VALUE</tt> if there is no intrinsic
-     * limit.
-     *
-     * <p>Note that you <em>cannot</em> always tell if an attempt to insert
-     * an element will succeed by inspecting <tt>remainingCapacity</tt>
-     * because it may be the case that another thread is about to
-     * insert or remove an element.
-     *
-     * @return the remaining capacity
-     */
-    int remainingCapacity();
-
-    /**
-     * Removes a single instance of the specified element from this queue,
-     * if it is present.  More formally, removes an element <tt>e</tt> such
-     * that <tt>o.equals(e)</tt>, if this queue contains one or more such
-     * elements.
-     * Returns <tt>true</tt> if this queue contained the specified element
-     * (or equivalently, if this queue changed as a result of the call).
-     *
-     * @param o element to be removed from this queue, if present
-     * @return <tt>true</tt> if this queue changed as a result of the call
-     * @throws ClassCastException if the class of the specified element
-     *         is incompatible with this queue
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>)
-     * @throws NullPointerException if the specified element is null
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>)
-     */
-    boolean remove(Object o);
-
-    /**
-     * Returns <tt>true</tt> if this queue contains the specified element.
-     * More formally, returns <tt>true</tt> if and only if this queue contains
-     * at least one element <tt>e</tt> such that <tt>o.equals(e)</tt>.
-     *
-     * @param o object to be checked for containment in this queue
-     * @return <tt>true</tt> if this queue contains the specified element
-     * @throws ClassCastException if the class of the specified element
-     *         is incompatible with this queue
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>)
-     * @throws NullPointerException if the specified element is null
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>)
-     */
-    public boolean contains(Object o);
-
-    /**
-     * Removes all available elements from this queue and adds them
-     * to the given collection.  This operation may be more
-     * efficient than repeatedly polling this queue.  A failure
-     * encountered while attempting to add elements to
-     * collection <tt>c</tt> may result in elements being in neither,
-     * either or both collections when the associated exception is
-     * thrown.  Attempts to drain a queue to itself result in
-     * <tt>IllegalArgumentException</tt>. Further, the behavior of
-     * this operation is undefined if the specified collection is
-     * modified while the operation is in progress.
-     *
-     * @param c the collection to transfer elements into
-     * @return the number of elements transferred
-     * @throws UnsupportedOperationException if addition of elements
-     *         is not supported by the specified collection
-     * @throws ClassCastException if the class of an element of this queue
-     *         prevents it from being added to the specified collection
-     * @throws NullPointerException if the specified collection is null
-     * @throws IllegalArgumentException if the specified collection is this
-     *         queue, or some property of an element of this queue prevents
-     *         it from being added to the specified collection
-     */
-    int drainTo(Collection<? super E> c);
-
-    /**
-     * Removes at most the given number of available elements from
-     * this queue and adds them to the given collection.  A failure
-     * encountered while attempting to add elements to
-     * collection <tt>c</tt> may result in elements being in neither,
-     * either or both collections when the associated exception is
-     * thrown.  Attempts to drain a queue to itself result in
-     * <tt>IllegalArgumentException</tt>. Further, the behavior of
-     * this operation is undefined if the specified collection is
-     * modified while the operation is in progress.
-     *
-     * @param c the collection to transfer elements into
-     * @param maxElements the maximum number of elements to transfer
-     * @return the number of elements transferred
-     * @throws UnsupportedOperationException if addition of elements
-     *         is not supported by the specified collection
-     * @throws ClassCastException if the class of an element of this queue
-     *         prevents it from being added to the specified collection
-     * @throws NullPointerException if the specified collection is null
-     * @throws IllegalArgumentException if the specified collection is this
-     *         queue, or some property of an element of this queue prevents
-     *         it from being added to the specified collection
-     */
-    int drainTo(Collection<? super E> c, int maxElements);
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/BrokenBarrierException.java b/ojluni/src/main/java/java/util/concurrent/BrokenBarrierException.java
deleted file mode 100755
index 9d2a9f4..0000000
--- a/ojluni/src/main/java/java/util/concurrent/BrokenBarrierException.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * Exception thrown when a thread tries to wait upon a barrier that is
- * in a broken state, or which enters the broken state while the thread
- * is waiting.
- *
- * @see CyclicBarrier
- *
- * @since 1.5
- * @author Doug Lea
- *
- */
-public class BrokenBarrierException extends Exception {
-    private static final long serialVersionUID = 7117394618823254244L;
-
-    /**
-     * Constructs a <tt>BrokenBarrierException</tt> with no specified detail
-     * message.
-     */
-    public BrokenBarrierException() {}
-
-    /**
-     * Constructs a <tt>BrokenBarrierException</tt> with the specified
-     * detail message.
-     *
-     * @param message the detail message
-     */
-    public BrokenBarrierException(String message) {
-        super(message);
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/Callable.java b/ojluni/src/main/java/java/util/concurrent/Callable.java
deleted file mode 100755
index 7ef4948..0000000
--- a/ojluni/src/main/java/java/util/concurrent/Callable.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * A task that returns a result and may throw an exception.
- * Implementors define a single method with no arguments called
- * <tt>call</tt>.
- *
- * <p>The <tt>Callable</tt> interface is similar to {@link
- * java.lang.Runnable}, in that both are designed for classes whose
- * instances are potentially executed by another thread.  A
- * <tt>Runnable</tt>, however, does not return a result and cannot
- * throw a checked exception.
- *
- * <p> The {@link Executors} class contains utility methods to
- * convert from other common forms to <tt>Callable</tt> classes.
- *
- * @see Executor
- * @since 1.5
- * @author Doug Lea
- * @param <V> the result type of method <tt>call</tt>
- */
-public interface Callable<V> {
-    /**
-     * Computes a result, or throws an exception if unable to do so.
-     *
-     * @return computed result
-     * @throws Exception if unable to compute a result
-     */
-    V call() throws Exception;
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/CancellationException.java b/ojluni/src/main/java/java/util/concurrent/CancellationException.java
deleted file mode 100755
index ae6b586..0000000
--- a/ojluni/src/main/java/java/util/concurrent/CancellationException.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * Exception indicating that the result of a value-producing task,
- * such as a {@link FutureTask}, cannot be retrieved because the task
- * was cancelled.
- *
- * @since 1.5
- * @author Doug Lea
- */
-public class CancellationException extends IllegalStateException {
-    private static final long serialVersionUID = -9202173006928992231L;
-
-    /**
-     * Constructs a <tt>CancellationException</tt> with no detail message.
-     */
-    public CancellationException() {}
-
-    /**
-     * Constructs a <tt>CancellationException</tt> with the specified detail
-     * message.
-     *
-     * @param message the detail message
-     */
-    public CancellationException(String message) {
-        super(message);
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/CompletionService.java b/ojluni/src/main/java/java/util/concurrent/CompletionService.java
deleted file mode 100755
index 5a807c5..0000000
--- a/ojluni/src/main/java/java/util/concurrent/CompletionService.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * A service that decouples the production of new asynchronous tasks
- * from the consumption of the results of completed tasks.  Producers
- * <tt>submit</tt> tasks for execution. Consumers <tt>take</tt>
- * completed tasks and process their results in the order they
- * complete.  A <tt>CompletionService</tt> can for example be used to
- * manage asynchronous IO, in which tasks that perform reads are
- * submitted in one part of a program or system, and then acted upon
- * in a different part of the program when the reads complete,
- * possibly in a different order than they were requested.
- *
- * <p>Typically, a <tt>CompletionService</tt> relies on a separate
- * {@link Executor} to actually execute the tasks, in which case the
- * <tt>CompletionService</tt> only manages an internal completion
- * queue. The {@link ExecutorCompletionService} class provides an
- * implementation of this approach.
- *
- * <p>Memory consistency effects: Actions in a thread prior to
- * submitting a task to a {@code CompletionService}
- * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
- * actions taken by that task, which in turn <i>happen-before</i>
- * actions following a successful return from the corresponding {@code take()}.
- *
- */
-public interface CompletionService<V> {
-    /**
-     * Submits a value-returning task for execution and returns a Future
-     * representing the pending results of the task.  Upon completion,
-     * this task may be taken or polled.
-     *
-     * @param task the task to submit
-     * @return a Future representing pending completion of the task
-     * @throws RejectedExecutionException if the task cannot be
-     *         scheduled for execution
-     * @throws NullPointerException if the task is null
-     */
-    Future<V> submit(Callable<V> task);
-
-    /**
-     * Submits a Runnable task for execution and returns a Future
-     * representing that task.  Upon completion, this task may be
-     * taken or polled.
-     *
-     * @param task the task to submit
-     * @param result the result to return upon successful completion
-     * @return a Future representing pending completion of the task,
-     *         and whose <tt>get()</tt> method will return the given
-     *         result value upon completion
-     * @throws RejectedExecutionException if the task cannot be
-     *         scheduled for execution
-     * @throws NullPointerException if the task is null
-     */
-    Future<V> submit(Runnable task, V result);
-
-    /**
-     * Retrieves and removes the Future representing the next
-     * completed task, waiting if none are yet present.
-     *
-     * @return the Future representing the next completed task
-     * @throws InterruptedException if interrupted while waiting
-     */
-    Future<V> take() throws InterruptedException;
-
-
-    /**
-     * Retrieves and removes the Future representing the next
-     * completed task or <tt>null</tt> if none are present.
-     *
-     * @return the Future representing the next completed task, or
-     *         <tt>null</tt> if none are present
-     */
-    Future<V> poll();
-
-    /**
-     * Retrieves and removes the Future representing the next
-     * completed task, waiting if necessary up to the specified wait
-     * time if none are yet present.
-     *
-     * @param timeout how long to wait before giving up, in units of
-     *        <tt>unit</tt>
-     * @param unit a <tt>TimeUnit</tt> determining how to interpret the
-     *        <tt>timeout</tt> parameter
-     * @return the Future representing the next completed task or
-     *         <tt>null</tt> if the specified waiting time elapses
-     *         before one is present
-     * @throws InterruptedException if interrupted while waiting
-     */
-    Future<V> poll(long timeout, TimeUnit unit) throws InterruptedException;
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ConcurrentHashMap.java b/ojluni/src/main/java/java/util/concurrent/ConcurrentHashMap.java
deleted file mode 100755
index d28edc9..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ConcurrentHashMap.java
+++ /dev/null
@@ -1,1619 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.concurrent.locks.*;
-import java.util.*;
-import java.io.Serializable;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.ObjectStreamField;
-
-/**
- * A hash table supporting full concurrency of retrievals and
- * adjustable expected concurrency for updates. This class obeys the
- * same functional specification as {@link java.util.Hashtable}, and
- * includes versions of methods corresponding to each method of
- * <tt>Hashtable</tt>. However, even though all operations are
- * thread-safe, retrieval operations do <em>not</em> entail locking,
- * and there is <em>not</em> any support for locking the entire table
- * in a way that prevents all access.  This class is fully
- * interoperable with <tt>Hashtable</tt> in programs that rely on its
- * thread safety but not on its synchronization details.
- *
- * <p> Retrieval operations (including <tt>get</tt>) generally do not
- * block, so may overlap with update operations (including
- * <tt>put</tt> and <tt>remove</tt>). Retrievals reflect the results
- * of the most recently <em>completed</em> update operations holding
- * upon their onset.  For aggregate operations such as <tt>putAll</tt>
- * and <tt>clear</tt>, concurrent retrievals may reflect insertion or
- * removal of only some entries.  Similarly, Iterators and
- * Enumerations return elements reflecting the state of the hash table
- * at some point at or since the creation of the iterator/enumeration.
- * They do <em>not</em> throw {@link ConcurrentModificationException}.
- * However, iterators are designed to be used by only one thread at a time.
- *
- * <p> The allowed concurrency among update operations is guided by
- * the optional <tt>concurrencyLevel</tt> constructor argument
- * (default <tt>16</tt>), which is used as a hint for internal sizing.  The
- * table is internally partitioned to try to permit the indicated
- * number of concurrent updates without contention. Because placement
- * in hash tables is essentially random, the actual concurrency will
- * vary.  Ideally, you should choose a value to accommodate as many
- * threads as will ever concurrently modify the table. Using a
- * significantly higher value than you need can waste space and time,
- * and a significantly lower value can lead to thread contention. But
- * overestimates and underestimates within an order of magnitude do
- * not usually have much noticeable impact. A value of one is
- * appropriate when it is known that only one thread will modify and
- * all others will only read. Also, resizing this or any other kind of
- * hash table is a relatively slow operation, so, when possible, it is
- * a good idea to provide estimates of expected table sizes in
- * constructors.
- *
- * <p>This class and its views and iterators implement all of the
- * <em>optional</em> methods of the {@link Map} and {@link Iterator}
- * interfaces.
- *
- * <p> Like {@link Hashtable} but unlike {@link HashMap}, this class
- * does <em>not</em> allow <tt>null</tt> to be used as a key or value.
- *
- * <p>This class is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @since 1.5
- * @author Doug Lea
- * @param <K> the type of keys maintained by this map
- * @param <V> the type of mapped values
- */
-public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
-        implements ConcurrentMap<K, V>, Serializable {
-    private static final long serialVersionUID = 7249069246763182397L;
-
-    /*
-     * The basic strategy is to subdivide the table among Segments,
-     * each of which itself is a concurrently readable hash table.  To
-     * reduce footprint, all but one segments are constructed only
-     * when first needed (see ensureSegment). To maintain visibility
-     * in the presence of lazy construction, accesses to segments as
-     * well as elements of segment's table must use volatile access,
-     * which is done via Unsafe within methods segmentAt etc
-     * below. These provide the functionality of AtomicReferenceArrays
-     * but reduce the levels of indirection. Additionally,
-     * volatile-writes of table elements and entry "next" fields
-     * within locked operations use the cheaper "lazySet" forms of
-     * writes (via putOrderedObject) because these writes are always
-     * followed by lock releases that maintain sequential consistency
-     * of table updates.
-     *
-     * Historical note: The previous version of this class relied
-     * heavily on "final" fields, which avoided some volatile reads at
-     * the expense of a large initial footprint.  Some remnants of
-     * that design (including forced construction of segment 0) exist
-     * to ensure serialization compatibility.
-     */
-
-    /* ---------------- Constants -------------- */
-
-    /**
-     * The default initial capacity for this table,
-     * used when not otherwise specified in a constructor.
-     */
-    static final int DEFAULT_INITIAL_CAPACITY = 16;
-
-    /**
-     * The default load factor for this table, used when not
-     * otherwise specified in a constructor.
-     */
-    static final float DEFAULT_LOAD_FACTOR = 0.75f;
-
-    /**
-     * The default concurrency level for this table, used when not
-     * otherwise specified in a constructor.
-     */
-    static final int DEFAULT_CONCURRENCY_LEVEL = 16;
-
-    /**
-     * The maximum capacity, used if a higher value is implicitly
-     * specified by either of the constructors with arguments.  MUST
-     * be a power of two <= 1<<30 to ensure that entries are indexable
-     * using ints.
-     */
-    static final int MAXIMUM_CAPACITY = 1 << 30;
-
-    /**
-     * The minimum capacity for per-segment tables.  Must be a power
-     * of two, at least two to avoid immediate resizing on next use
-     * after lazy construction.
-     */
-    static final int MIN_SEGMENT_TABLE_CAPACITY = 2;
-
-    /**
-     * The maximum number of segments to allow; used to bound
-     * constructor arguments. Must be power of two less than 1 << 24.
-     */
-    static final int MAX_SEGMENTS = 1 << 16; // slightly conservative
-
-    /**
-     * Number of unsynchronized retries in size and containsValue
-     * methods before resorting to locking. This is used to avoid
-     * unbounded retries if tables undergo continuous modification
-     * which would make it impossible to obtain an accurate result.
-     */
-    static final int RETRIES_BEFORE_LOCK = 2;
-
-    /* ---------------- Fields -------------- */
-
-    /**
-     * holds values which can't be initialized until after VM is booted.
-     */
-    private static class Holder {
-
-        /**
-        * Enable alternative hashing of String keys?
-        *
-        * <p>Unlike the other hash map implementations we do not implement a
-        * threshold for regulating whether alternative hashing is used for
-        * String keys. Alternative hashing is either enabled for all instances
-        * or disabled for all instances.
-        */
-        static final boolean ALTERNATIVE_HASHING;
-
-        static {
-            // Use the "threshold" system property even though our threshold
-            // behaviour is "ON" or "OFF".
-            String altThreshold = java.security.AccessController.doPrivileged(
-                new sun.security.action.GetPropertyAction(
-                    "jdk.map.althashing.threshold"));
-
-            int threshold;
-            try {
-                threshold = (null != altThreshold)
-                        ? Integer.parseInt(altThreshold)
-                        : Integer.MAX_VALUE;
-
-                // disable alternative hashing if -1
-                if (threshold == -1) {
-                    threshold = Integer.MAX_VALUE;
-                }
-
-                if (threshold < 0) {
-                    throw new IllegalArgumentException("value must be positive integer.");
-                }
-            } catch(IllegalArgumentException failed) {
-                throw new Error("Illegal value for 'jdk.map.althashing.threshold'", failed);
-            }
-            ALTERNATIVE_HASHING = threshold <= MAXIMUM_CAPACITY;
-        }
-    }
-
-    /**
-     * A randomizing value associated with this instance that is applied to
-     * hash code of keys to make hash collisions harder to find.
-     */
-    private transient final int hashSeed = randomHashSeed(this);
-
-    private static int randomHashSeed(ConcurrentHashMap instance) {
-        if (sun.misc.VM.isBooted() && Holder.ALTERNATIVE_HASHING) {
-            return sun.misc.Hashing.randomHashSeed(instance);
-        }
-
-        return 0;
-    }
-
-    /**
-     * Mask value for indexing into segments. The upper bits of a
-     * key's hash code are used to choose the segment.
-     */
-    final int segmentMask;
-
-    /**
-     * Shift value for indexing within segments.
-     */
-    final int segmentShift;
-
-    /**
-     * The segments, each of which is a specialized hash table.
-     */
-    final Segment<K,V>[] segments;
-
-    transient Set<K> keySet;
-    transient Set<Map.Entry<K,V>> entrySet;
-    transient Collection<V> values;
-
-    /**
-     * ConcurrentHashMap list entry. Note that this is never exported
-     * out as a user-visible Map.Entry.
-     */
-    static final class HashEntry<K,V> {
-        final int hash;
-        final K key;
-        volatile V value;
-        volatile HashEntry<K,V> next;
-
-        HashEntry(int hash, K key, V value, HashEntry<K,V> next) {
-            this.hash = hash;
-            this.key = key;
-            this.value = value;
-            this.next = next;
-        }
-
-        /**
-         * Sets next field with volatile write semantics.  (See above
-         * about use of putOrderedObject.)
-         */
-        final void setNext(HashEntry<K,V> n) {
-            UNSAFE.putOrderedObject(this, nextOffset, n);
-        }
-
-        // Unsafe mechanics
-        static final sun.misc.Unsafe UNSAFE;
-        static final long nextOffset;
-        static {
-            try {
-                UNSAFE = sun.misc.Unsafe.getUnsafe();
-                Class k = HashEntry.class;
-                nextOffset = UNSAFE.objectFieldOffset
-                    (k.getDeclaredField("next"));
-            } catch (Exception e) {
-                throw new Error(e);
-            }
-        }
-    }
-
-    /**
-     * Gets the ith element of given table (if nonnull) with volatile
-     * read semantics. Note: This is manually integrated into a few
-     * performance-sensitive methods to reduce call overhead.
-     */
-    @SuppressWarnings("unchecked")
-    static final <K,V> HashEntry<K,V> entryAt(HashEntry<K,V>[] tab, int i) {
-        return (tab == null) ? null :
-            (HashEntry<K,V>) UNSAFE.getObjectVolatile
-            (tab, ((long)i << TSHIFT) + TBASE);
-    }
-
-    /**
-     * Sets the ith element of given table, with volatile write
-     * semantics. (See above about use of putOrderedObject.)
-     */
-    static final <K,V> void setEntryAt(HashEntry<K,V>[] tab, int i,
-                                       HashEntry<K,V> e) {
-        UNSAFE.putOrderedObject(tab, ((long)i << TSHIFT) + TBASE, e);
-    }
-
-    /**
-     * Applies a supplemental hash function to a given hashCode, which
-     * defends against poor quality hash functions.  This is critical
-     * because ConcurrentHashMap uses power-of-two length hash tables,
-     * that otherwise encounter collisions for hashCodes that do not
-     * differ in lower or upper bits.
-     */
-    private int hash(Object k) {
-        int h = hashSeed;
-
-        if ((0 != h) && (k instanceof String)) {
-            return sun.misc.Hashing.stringHash32((String) k);
-        }
-
-        h ^= k.hashCode();
-
-        // Spread bits to regularize both segment and index locations,
-        // using variant of single-word Wang/Jenkins hash.
-        h += (h <<  15) ^ 0xffffcd7d;
-        h ^= (h >>> 10);
-        h += (h <<   3);
-        h ^= (h >>>  6);
-        h += (h <<   2) + (h << 14);
-        return h ^ (h >>> 16);
-    }
-
-    /**
-     * Segments are specialized versions of hash tables.  This
-     * subclasses from ReentrantLock opportunistically, just to
-     * simplify some locking and avoid separate construction.
-     */
-    static final class Segment<K,V> extends ReentrantLock implements Serializable {
-        /*
-         * Segments maintain a table of entry lists that are always
-         * kept in a consistent state, so can be read (via volatile
-         * reads of segments and tables) without locking.  This
-         * requires replicating nodes when necessary during table
-         * resizing, so the old lists can be traversed by readers
-         * still using old version of table.
-         *
-         * This class defines only mutative methods requiring locking.
-         * Except as noted, the methods of this class perform the
-         * per-segment versions of ConcurrentHashMap methods.  (Other
-         * methods are integrated directly into ConcurrentHashMap
-         * methods.) These mutative methods use a form of controlled
-         * spinning on contention via methods scanAndLock and
-         * scanAndLockForPut. These intersperse tryLocks with
-         * traversals to locate nodes.  The main benefit is to absorb
-         * cache misses (which are very common for hash tables) while
-         * obtaining locks so that traversal is faster once
-         * acquired. We do not actually use the found nodes since they
-         * must be re-acquired under lock anyway to ensure sequential
-         * consistency of updates (and in any case may be undetectably
-         * stale), but they will normally be much faster to re-locate.
-         * Also, scanAndLockForPut speculatively creates a fresh node
-         * to use in put if no node is found.
-         */
-
-        private static final long serialVersionUID = 2249069246763182397L;
-
-        /**
-         * The maximum number of times to tryLock in a prescan before
-         * possibly blocking on acquire in preparation for a locked
-         * segment operation. On multiprocessors, using a bounded
-         * number of retries maintains cache acquired while locating
-         * nodes.
-         */
-        static final int MAX_SCAN_RETRIES =
-            Runtime.getRuntime().availableProcessors() > 1 ? 64 : 1;
-
-        /**
-         * The per-segment table. Elements are accessed via
-         * entryAt/setEntryAt providing volatile semantics.
-         */
-        transient volatile HashEntry<K,V>[] table;
-
-        /**
-         * The number of elements. Accessed only either within locks
-         * or among other volatile reads that maintain visibility.
-         */
-        transient int count;
-
-        /**
-         * The total number of mutative operations in this segment.
-         * Even though this may overflows 32 bits, it provides
-         * sufficient accuracy for stability checks in CHM isEmpty()
-         * and size() methods.  Accessed only either within locks or
-         * among other volatile reads that maintain visibility.
-         */
-        transient int modCount;
-
-        /**
-         * The table is rehashed when its size exceeds this threshold.
-         * (The value of this field is always <tt>(int)(capacity *
-         * loadFactor)</tt>.)
-         */
-        transient int threshold;
-
-        /**
-         * The load factor for the hash table.  Even though this value
-         * is same for all segments, it is replicated to avoid needing
-         * links to outer object.
-         * @serial
-         */
-        final float loadFactor;
-
-        Segment(float lf, int threshold, HashEntry<K,V>[] tab) {
-            this.loadFactor = lf;
-            this.threshold = threshold;
-            this.table = tab;
-        }
-
-        final V put(K key, int hash, V value, boolean onlyIfAbsent) {
-            HashEntry<K,V> node = tryLock() ? null :
-                scanAndLockForPut(key, hash, value);
-            V oldValue;
-            try {
-                HashEntry<K,V>[] tab = table;
-                int index = (tab.length - 1) & hash;
-                HashEntry<K,V> first = entryAt(tab, index);
-                for (HashEntry<K,V> e = first;;) {
-                    if (e != null) {
-                        K k;
-                        if ((k = e.key) == key ||
-                            (e.hash == hash && key.equals(k))) {
-                            oldValue = e.value;
-                            if (!onlyIfAbsent) {
-                                e.value = value;
-                                ++modCount;
-                            }
-                            break;
-                        }
-                        e = e.next;
-                    }
-                    else {
-                        if (node != null)
-                            node.setNext(first);
-                        else
-                            node = new HashEntry<K,V>(hash, key, value, first);
-                        int c = count + 1;
-                        if (c > threshold && tab.length < MAXIMUM_CAPACITY)
-                            rehash(node);
-                        else
-                            setEntryAt(tab, index, node);
-                        ++modCount;
-                        count = c;
-                        oldValue = null;
-                        break;
-                    }
-                }
-            } finally {
-                unlock();
-            }
-            return oldValue;
-        }
-
-        /**
-         * Doubles size of table and repacks entries, also adding the
-         * given node to new table
-         */
-        @SuppressWarnings("unchecked")
-        private void rehash(HashEntry<K,V> node) {
-            /*
-             * Reclassify nodes in each list to new table.  Because we
-             * are using power-of-two expansion, the elements from
-             * each bin must either stay at same index, or move with a
-             * power of two offset. We eliminate unnecessary node
-             * creation by catching cases where old nodes can be
-             * reused because their next fields won't change.
-             * Statistically, at the default threshold, only about
-             * one-sixth of them need cloning when a table
-             * doubles. The nodes they replace will be garbage
-             * collectable as soon as they are no longer referenced by
-             * any reader thread that may be in the midst of
-             * concurrently traversing table. Entry accesses use plain
-             * array indexing because they are followed by volatile
-             * table write.
-             */
-            HashEntry<K,V>[] oldTable = table;
-            int oldCapacity = oldTable.length;
-            int newCapacity = oldCapacity << 1;
-            threshold = (int)(newCapacity * loadFactor);
-            HashEntry<K,V>[] newTable =
-                (HashEntry<K,V>[]) new HashEntry[newCapacity];
-            int sizeMask = newCapacity - 1;
-            for (int i = 0; i < oldCapacity ; i++) {
-                HashEntry<K,V> e = oldTable[i];
-                if (e != null) {
-                    HashEntry<K,V> next = e.next;
-                    int idx = e.hash & sizeMask;
-                    if (next == null)   //  Single node on list
-                        newTable[idx] = e;
-                    else { // Reuse consecutive sequence at same slot
-                        HashEntry<K,V> lastRun = e;
-                        int lastIdx = idx;
-                        for (HashEntry<K,V> last = next;
-                             last != null;
-                             last = last.next) {
-                            int k = last.hash & sizeMask;
-                            if (k != lastIdx) {
-                                lastIdx = k;
-                                lastRun = last;
-                            }
-                        }
-                        newTable[lastIdx] = lastRun;
-                        // Clone remaining nodes
-                        for (HashEntry<K,V> p = e; p != lastRun; p = p.next) {
-                            V v = p.value;
-                            int h = p.hash;
-                            int k = h & sizeMask;
-                            HashEntry<K,V> n = newTable[k];
-                            newTable[k] = new HashEntry<K,V>(h, p.key, v, n);
-                        }
-                    }
-                }
-            }
-            int nodeIndex = node.hash & sizeMask; // add the new node
-            node.setNext(newTable[nodeIndex]);
-            newTable[nodeIndex] = node;
-            table = newTable;
-        }
-
-        /**
-         * Scans for a node containing given key while trying to
-         * acquire lock, creating and returning one if not found. Upon
-         * return, guarantees that lock is held. UNlike in most
-         * methods, calls to method equals are not screened: Since
-         * traversal speed doesn't matter, we might as well help warm
-         * up the associated code and accesses as well.
-         *
-         * @return a new node if key not found, else null
-         */
-        private HashEntry<K,V> scanAndLockForPut(K key, int hash, V value) {
-            HashEntry<K,V> first = entryForHash(this, hash);
-            HashEntry<K,V> e = first;
-            HashEntry<K,V> node = null;
-            int retries = -1; // negative while locating node
-            while (!tryLock()) {
-                HashEntry<K,V> f; // to recheck first below
-                if (retries < 0) {
-                    if (e == null) {
-                        if (node == null) // speculatively create node
-                            node = new HashEntry<K,V>(hash, key, value, null);
-                        retries = 0;
-                    }
-                    else if (key.equals(e.key))
-                        retries = 0;
-                    else
-                        e = e.next;
-                }
-                else if (++retries > MAX_SCAN_RETRIES) {
-                    lock();
-                    break;
-                }
-                else if ((retries & 1) == 0 &&
-                         (f = entryForHash(this, hash)) != first) {
-                    e = first = f; // re-traverse if entry changed
-                    retries = -1;
-                }
-            }
-            return node;
-        }
-
-        /**
-         * Scans for a node containing the given key while trying to
-         * acquire lock for a remove or replace operation. Upon
-         * return, guarantees that lock is held.  Note that we must
-         * lock even if the key is not found, to ensure sequential
-         * consistency of updates.
-         */
-        private void scanAndLock(Object key, int hash) {
-            // similar to but simpler than scanAndLockForPut
-            HashEntry<K,V> first = entryForHash(this, hash);
-            HashEntry<K,V> e = first;
-            int retries = -1;
-            while (!tryLock()) {
-                HashEntry<K,V> f;
-                if (retries < 0) {
-                    if (e == null || key.equals(e.key))
-                        retries = 0;
-                    else
-                        e = e.next;
-                }
-                else if (++retries > MAX_SCAN_RETRIES) {
-                    lock();
-                    break;
-                }
-                else if ((retries & 1) == 0 &&
-                         (f = entryForHash(this, hash)) != first) {
-                    e = first = f;
-                    retries = -1;
-                }
-            }
-        }
-
-        /**
-         * Remove; match on key only if value null, else match both.
-         */
-        final V remove(Object key, int hash, Object value) {
-            if (!tryLock())
-                scanAndLock(key, hash);
-            V oldValue = null;
-            try {
-                HashEntry<K,V>[] tab = table;
-                int index = (tab.length - 1) & hash;
-                HashEntry<K,V> e = entryAt(tab, index);
-                HashEntry<K,V> pred = null;
-                while (e != null) {
-                    K k;
-                    HashEntry<K,V> next = e.next;
-                    if ((k = e.key) == key ||
-                        (e.hash == hash && key.equals(k))) {
-                        V v = e.value;
-                        if (value == null || value == v || value.equals(v)) {
-                            if (pred == null)
-                                setEntryAt(tab, index, next);
-                            else
-                                pred.setNext(next);
-                            ++modCount;
-                            --count;
-                            oldValue = v;
-                        }
-                        break;
-                    }
-                    pred = e;
-                    e = next;
-                }
-            } finally {
-                unlock();
-            }
-            return oldValue;
-        }
-
-        final boolean replace(K key, int hash, V oldValue, V newValue) {
-            if (!tryLock())
-                scanAndLock(key, hash);
-            boolean replaced = false;
-            try {
-                HashEntry<K,V> e;
-                for (e = entryForHash(this, hash); e != null; e = e.next) {
-                    K k;
-                    if ((k = e.key) == key ||
-                        (e.hash == hash && key.equals(k))) {
-                        if (oldValue.equals(e.value)) {
-                            e.value = newValue;
-                            ++modCount;
-                            replaced = true;
-                        }
-                        break;
-                    }
-                }
-            } finally {
-                unlock();
-            }
-            return replaced;
-        }
-
-        final V replace(K key, int hash, V value) {
-            if (!tryLock())
-                scanAndLock(key, hash);
-            V oldValue = null;
-            try {
-                HashEntry<K,V> e;
-                for (e = entryForHash(this, hash); e != null; e = e.next) {
-                    K k;
-                    if ((k = e.key) == key ||
-                        (e.hash == hash && key.equals(k))) {
-                        oldValue = e.value;
-                        e.value = value;
-                        ++modCount;
-                        break;
-                    }
-                }
-            } finally {
-                unlock();
-            }
-            return oldValue;
-        }
-
-        final void clear() {
-            lock();
-            try {
-                HashEntry<K,V>[] tab = table;
-                for (int i = 0; i < tab.length ; i++)
-                    setEntryAt(tab, i, null);
-                ++modCount;
-                count = 0;
-            } finally {
-                unlock();
-            }
-        }
-    }
-
-    // Accessing segments
-
-    /**
-     * Gets the jth element of given segment array (if nonnull) with
-     * volatile element access semantics via Unsafe. (The null check
-     * can trigger harmlessly only during deserialization.) Note:
-     * because each element of segments array is set only once (using
-     * fully ordered writes), some performance-sensitive methods rely
-     * on this method only as a recheck upon null reads.
-     */
-    @SuppressWarnings("unchecked")
-    static final <K,V> Segment<K,V> segmentAt(Segment<K,V>[] ss, int j) {
-        long u = (j << SSHIFT) + SBASE;
-        return ss == null ? null :
-            (Segment<K,V>) UNSAFE.getObjectVolatile(ss, u);
-    }
-
-    /**
-     * Returns the segment for the given index, creating it and
-     * recording in segment table (via CAS) if not already present.
-     *
-     * @param k the index
-     * @return the segment
-     */
-    @SuppressWarnings("unchecked")
-    private Segment<K,V> ensureSegment(int k) {
-        final Segment<K,V>[] ss = this.segments;
-        long u = (k << SSHIFT) + SBASE; // raw offset
-        Segment<K,V> seg;
-        if ((seg = (Segment<K,V>)UNSAFE.getObjectVolatile(ss, u)) == null) {
-            Segment<K,V> proto = ss[0]; // use segment 0 as prototype
-            int cap = proto.table.length;
-            float lf = proto.loadFactor;
-            int threshold = (int)(cap * lf);
-            HashEntry<K,V>[] tab = (HashEntry<K,V>[])new HashEntry[cap];
-            if ((seg = (Segment<K,V>)UNSAFE.getObjectVolatile(ss, u))
-                == null) { // recheck
-                Segment<K,V> s = new Segment<K,V>(lf, threshold, tab);
-                while ((seg = (Segment<K,V>)UNSAFE.getObjectVolatile(ss, u))
-                       == null) {
-                    if (UNSAFE.compareAndSwapObject(ss, u, null, seg = s))
-                        break;
-                }
-            }
-        }
-        return seg;
-    }
-
-    // Hash-based segment and entry accesses
-
-    /**
-     * Get the segment for the given hash
-     */
-    @SuppressWarnings("unchecked")
-    private Segment<K,V> segmentForHash(int h) {
-        long u = (((h >>> segmentShift) & segmentMask) << SSHIFT) + SBASE;
-        return (Segment<K,V>) UNSAFE.getObjectVolatile(segments, u);
-    }
-
-    /**
-     * Gets the table entry for the given segment and hash
-     */
-    @SuppressWarnings("unchecked")
-    static final <K,V> HashEntry<K,V> entryForHash(Segment<K,V> seg, int h) {
-        HashEntry<K,V>[] tab;
-        return (seg == null || (tab = seg.table) == null) ? null :
-            (HashEntry<K,V>) UNSAFE.getObjectVolatile
-            (tab, ((long)(((tab.length - 1) & h)) << TSHIFT) + TBASE);
-    }
-
-    /* ---------------- Public operations -------------- */
-
-    /**
-     * Creates a new, empty map with the specified initial
-     * capacity, load factor and concurrency level.
-     *
-     * @param initialCapacity the initial capacity. The implementation
-     * performs internal sizing to accommodate this many elements.
-     * @param loadFactor  the load factor threshold, used to control resizing.
-     * Resizing may be performed when the average number of elements per
-     * bin exceeds this threshold.
-     * @param concurrencyLevel the estimated number of concurrently
-     * updating threads. The implementation performs internal sizing
-     * to try to accommodate this many threads.
-     * @throws IllegalArgumentException if the initial capacity is
-     * negative or the load factor or concurrencyLevel are
-     * nonpositive.
-     */
-    @SuppressWarnings("unchecked")
-    public ConcurrentHashMap(int initialCapacity,
-                             float loadFactor, int concurrencyLevel) {
-        if (!(loadFactor > 0) || initialCapacity < 0 || concurrencyLevel <= 0)
-            throw new IllegalArgumentException();
-        if (concurrencyLevel > MAX_SEGMENTS)
-            concurrencyLevel = MAX_SEGMENTS;
-        // Find power-of-two sizes best matching arguments
-        int sshift = 0;
-        int ssize = 1;
-        while (ssize < concurrencyLevel) {
-            ++sshift;
-            ssize <<= 1;
-        }
-        this.segmentShift = 32 - sshift;
-        this.segmentMask = ssize - 1;
-        if (initialCapacity > MAXIMUM_CAPACITY)
-            initialCapacity = MAXIMUM_CAPACITY;
-        int c = initialCapacity / ssize;
-        if (c * ssize < initialCapacity)
-            ++c;
-        int cap = MIN_SEGMENT_TABLE_CAPACITY;
-        while (cap < c)
-            cap <<= 1;
-        // create segments and segments[0]
-        Segment<K,V> s0 =
-            new Segment<K,V>(loadFactor, (int)(cap * loadFactor),
-                             (HashEntry<K,V>[])new HashEntry[cap]);
-        Segment<K,V>[] ss = (Segment<K,V>[])new Segment[ssize];
-        UNSAFE.putOrderedObject(ss, SBASE, s0); // ordered write of segments[0]
-        this.segments = ss;
-    }
-
-    /**
-     * Creates a new, empty map with the specified initial capacity
-     * and load factor and with the default concurrencyLevel (16).
-     *
-     * @param initialCapacity The implementation performs internal
-     * sizing to accommodate this many elements.
-     * @param loadFactor  the load factor threshold, used to control resizing.
-     * Resizing may be performed when the average number of elements per
-     * bin exceeds this threshold.
-     * @throws IllegalArgumentException if the initial capacity of
-     * elements is negative or the load factor is nonpositive
-     *
-     * @since 1.6
-     */
-    public ConcurrentHashMap(int initialCapacity, float loadFactor) {
-        this(initialCapacity, loadFactor, DEFAULT_CONCURRENCY_LEVEL);
-    }
-
-    /**
-     * Creates a new, empty map with the specified initial capacity,
-     * and with default load factor (0.75) and concurrencyLevel (16).
-     *
-     * @param initialCapacity the initial capacity. The implementation
-     * performs internal sizing to accommodate this many elements.
-     * @throws IllegalArgumentException if the initial capacity of
-     * elements is negative.
-     */
-    public ConcurrentHashMap(int initialCapacity) {
-        this(initialCapacity, DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEVEL);
-    }
-
-    /**
-     * Creates a new, empty map with a default initial capacity (16),
-     * load factor (0.75) and concurrencyLevel (16).
-     */
-    public ConcurrentHashMap() {
-        this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEVEL);
-    }
-
-    /**
-     * Creates a new map with the same mappings as the given map.
-     * The map is created with a capacity of 1.5 times the number
-     * of mappings in the given map or 16 (whichever is greater),
-     * and a default load factor (0.75) and concurrencyLevel (16).
-     *
-     * @param m the map
-     */
-    public ConcurrentHashMap(Map<? extends K, ? extends V> m) {
-        this(Math.max((int) (m.size() / DEFAULT_LOAD_FACTOR) + 1,
-                      DEFAULT_INITIAL_CAPACITY),
-             DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEVEL);
-        putAll(m);
-    }
-
-    /**
-     * Returns <tt>true</tt> if this map contains no key-value mappings.
-     *
-     * @return <tt>true</tt> if this map contains no key-value mappings
-     */
-    public boolean isEmpty() {
-        /*
-         * Sum per-segment modCounts to avoid mis-reporting when
-         * elements are concurrently added and removed in one segment
-         * while checking another, in which case the table was never
-         * actually empty at any point. (The sum ensures accuracy up
-         * through at least 1<<31 per-segment modifications before
-         * recheck.)  Methods size() and containsValue() use similar
-         * constructions for stability checks.
-         */
-        long sum = 0L;
-        final Segment<K,V>[] segments = this.segments;
-        for (int j = 0; j < segments.length; ++j) {
-            Segment<K,V> seg = segmentAt(segments, j);
-            if (seg != null) {
-                if (seg.count != 0)
-                    return false;
-                sum += seg.modCount;
-            }
-        }
-        if (sum != 0L) { // recheck unless no modifications
-            for (int j = 0; j < segments.length; ++j) {
-                Segment<K,V> seg = segmentAt(segments, j);
-                if (seg != null) {
-                    if (seg.count != 0)
-                        return false;
-                    sum -= seg.modCount;
-                }
-            }
-            if (sum != 0L)
-                return false;
-        }
-        return true;
-    }
-
-    /**
-     * Returns the number of key-value mappings in this map.  If the
-     * map contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
-     * <tt>Integer.MAX_VALUE</tt>.
-     *
-     * @return the number of key-value mappings in this map
-     */
-    public int size() {
-        // Try a few times to get accurate count. On failure due to
-        // continuous async changes in table, resort to locking.
-        final Segment<K,V>[] segments = this.segments;
-        int size;
-        boolean overflow; // true if size overflows 32 bits
-        long sum;         // sum of modCounts
-        long last = 0L;   // previous sum
-        int retries = -1; // first iteration isn't retry
-        try {
-            for (;;) {
-                if (retries++ == RETRIES_BEFORE_LOCK) {
-                    for (int j = 0; j < segments.length; ++j)
-                        ensureSegment(j).lock(); // force creation
-                }
-                sum = 0L;
-                size = 0;
-                overflow = false;
-                for (int j = 0; j < segments.length; ++j) {
-                    Segment<K,V> seg = segmentAt(segments, j);
-                    if (seg != null) {
-                        sum += seg.modCount;
-                        int c = seg.count;
-                        if (c < 0 || (size += c) < 0)
-                            overflow = true;
-                    }
-                }
-                if (sum == last)
-                    break;
-                last = sum;
-            }
-        } finally {
-            if (retries > RETRIES_BEFORE_LOCK) {
-                for (int j = 0; j < segments.length; ++j)
-                    segmentAt(segments, j).unlock();
-            }
-        }
-        return overflow ? Integer.MAX_VALUE : size;
-    }
-
-    /**
-     * Returns the value to which the specified key is mapped,
-     * or {@code null} if this map contains no mapping for the key.
-     *
-     * <p>More formally, if this map contains a mapping from a key
-     * {@code k} to a value {@code v} such that {@code key.equals(k)},
-     * then this method returns {@code v}; otherwise it returns
-     * {@code null}.  (There can be at most one such mapping.)
-     *
-     * @throws NullPointerException if the specified key is null
-     */
-    public V get(Object key) {
-        Segment<K,V> s; // manually integrate access methods to reduce overhead
-        HashEntry<K,V>[] tab;
-        int h = hash(key);
-        long u = (((h >>> segmentShift) & segmentMask) << SSHIFT) + SBASE;
-        if ((s = (Segment<K,V>)UNSAFE.getObjectVolatile(segments, u)) != null &&
-            (tab = s.table) != null) {
-            for (HashEntry<K,V> e = (HashEntry<K,V>) UNSAFE.getObjectVolatile
-                     (tab, ((long)(((tab.length - 1) & h)) << TSHIFT) + TBASE);
-                 e != null; e = e.next) {
-                K k;
-                if ((k = e.key) == key || (e.hash == h && key.equals(k)))
-                    return e.value;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Tests if the specified object is a key in this table.
-     *
-     * @param  key   possible key
-     * @return <tt>true</tt> if and only if the specified object
-     *         is a key in this table, as determined by the
-     *         <tt>equals</tt> method; <tt>false</tt> otherwise.
-     * @throws NullPointerException if the specified key is null
-     */
-    @SuppressWarnings("unchecked")
-    public boolean containsKey(Object key) {
-        Segment<K,V> s; // same as get() except no need for volatile value read
-        HashEntry<K,V>[] tab;
-        int h = hash(key);
-        long u = (((h >>> segmentShift) & segmentMask) << SSHIFT) + SBASE;
-        if ((s = (Segment<K,V>)UNSAFE.getObjectVolatile(segments, u)) != null &&
-            (tab = s.table) != null) {
-            for (HashEntry<K,V> e = (HashEntry<K,V>) UNSAFE.getObjectVolatile
-                     (tab, ((long)(((tab.length - 1) & h)) << TSHIFT) + TBASE);
-                 e != null; e = e.next) {
-                K k;
-                if ((k = e.key) == key || (e.hash == h && key.equals(k)))
-                    return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Returns <tt>true</tt> if this map maps one or more keys to the
-     * specified value. Note: This method requires a full internal
-     * traversal of the hash table, and so is much slower than
-     * method <tt>containsKey</tt>.
-     *
-     * @param value value whose presence in this map is to be tested
-     * @return <tt>true</tt> if this map maps one or more keys to the
-     *         specified value
-     * @throws NullPointerException if the specified value is null
-     */
-    public boolean containsValue(Object value) {
-        // Same idea as size()
-        if (value == null)
-            throw new NullPointerException();
-        final Segment<K,V>[] segments = this.segments;
-        boolean found = false;
-        long last = 0;
-        int retries = -1;
-        try {
-            outer: for (;;) {
-                if (retries++ == RETRIES_BEFORE_LOCK) {
-                    for (int j = 0; j < segments.length; ++j)
-                        ensureSegment(j).lock(); // force creation
-                }
-                long hashSum = 0L;
-                int sum = 0;
-                for (int j = 0; j < segments.length; ++j) {
-                    HashEntry<K,V>[] tab;
-                    Segment<K,V> seg = segmentAt(segments, j);
-                    if (seg != null && (tab = seg.table) != null) {
-                        for (int i = 0 ; i < tab.length; i++) {
-                            HashEntry<K,V> e;
-                            for (e = entryAt(tab, i); e != null; e = e.next) {
-                                V v = e.value;
-                                if (v != null && value.equals(v)) {
-                                    found = true;
-                                    break outer;
-                                }
-                            }
-                        }
-                        sum += seg.modCount;
-                    }
-                }
-                if (retries > 0 && sum == last)
-                    break;
-                last = sum;
-            }
-        } finally {
-            if (retries > RETRIES_BEFORE_LOCK) {
-                for (int j = 0; j < segments.length; ++j)
-                    segmentAt(segments, j).unlock();
-            }
-        }
-        return found;
-    }
-
-    /**
-     * Legacy method testing if some key maps into the specified value
-     * in this table.  This method is identical in functionality to
-     * {@link #containsValue}, and exists solely to ensure
-     * full compatibility with class {@link java.util.Hashtable},
-     * which supported this method prior to introduction of the
-     * Java Collections framework.
-
-     * @param  value a value to search for
-     * @return <tt>true</tt> if and only if some key maps to the
-     *         <tt>value</tt> argument in this table as
-     *         determined by the <tt>equals</tt> method;
-     *         <tt>false</tt> otherwise
-     * @throws NullPointerException if the specified value is null
-     */
-    public boolean contains(Object value) {
-        return containsValue(value);
-    }
-
-    /**
-     * Maps the specified key to the specified value in this table.
-     * Neither the key nor the value can be null.
-     *
-     * <p> The value can be retrieved by calling the <tt>get</tt> method
-     * with a key that is equal to the original key.
-     *
-     * @param key key with which the specified value is to be associated
-     * @param value value to be associated with the specified key
-     * @return the previous value associated with <tt>key</tt>, or
-     *         <tt>null</tt> if there was no mapping for <tt>key</tt>
-     * @throws NullPointerException if the specified key or value is null
-     */
-    @SuppressWarnings("unchecked")
-    public V put(K key, V value) {
-        Segment<K,V> s;
-        if (value == null)
-            throw new NullPointerException();
-        int hash = hash(key);
-        int j = (hash >>> segmentShift) & segmentMask;
-        if ((s = (Segment<K,V>)UNSAFE.getObject          // nonvolatile; recheck
-             (segments, (j << SSHIFT) + SBASE)) == null) //  in ensureSegment
-            s = ensureSegment(j);
-        return s.put(key, hash, value, false);
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * @return the previous value associated with the specified key,
-     *         or <tt>null</tt> if there was no mapping for the key
-     * @throws NullPointerException if the specified key or value is null
-     */
-    @SuppressWarnings("unchecked")
-    public V putIfAbsent(K key, V value) {
-        Segment<K,V> s;
-        if (value == null)
-            throw new NullPointerException();
-        int hash = hash(key);
-        int j = (hash >>> segmentShift) & segmentMask;
-        if ((s = (Segment<K,V>)UNSAFE.getObject
-             (segments, (j << SSHIFT) + SBASE)) == null)
-            s = ensureSegment(j);
-        return s.put(key, hash, value, true);
-    }
-
-    /**
-     * Copies all of the mappings from the specified map to this one.
-     * These mappings replace any mappings that this map had for any of the
-     * keys currently in the specified map.
-     *
-     * @param m mappings to be stored in this map
-     */
-    public void putAll(Map<? extends K, ? extends V> m) {
-        for (Map.Entry<? extends K, ? extends V> e : m.entrySet())
-            put(e.getKey(), e.getValue());
-    }
-
-    /**
-     * Removes the key (and its corresponding value) from this map.
-     * This method does nothing if the key is not in the map.
-     *
-     * @param  key the key that needs to be removed
-     * @return the previous value associated with <tt>key</tt>, or
-     *         <tt>null</tt> if there was no mapping for <tt>key</tt>
-     * @throws NullPointerException if the specified key is null
-     */
-    public V remove(Object key) {
-        int hash = hash(key);
-        Segment<K,V> s = segmentForHash(hash);
-        return s == null ? null : s.remove(key, hash, null);
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * @throws NullPointerException if the specified key is null
-     */
-    public boolean remove(Object key, Object value) {
-        int hash = hash(key);
-        Segment<K,V> s;
-        return value != null && (s = segmentForHash(hash)) != null &&
-            s.remove(key, hash, value) != null;
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * @throws NullPointerException if any of the arguments are null
-     */
-    public boolean replace(K key, V oldValue, V newValue) {
-        int hash = hash(key);
-        if (oldValue == null || newValue == null)
-            throw new NullPointerException();
-        Segment<K,V> s = segmentForHash(hash);
-        return s != null && s.replace(key, hash, oldValue, newValue);
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * @return the previous value associated with the specified key,
-     *         or <tt>null</tt> if there was no mapping for the key
-     * @throws NullPointerException if the specified key or value is null
-     */
-    public V replace(K key, V value) {
-        int hash = hash(key);
-        if (value == null)
-            throw new NullPointerException();
-        Segment<K,V> s = segmentForHash(hash);
-        return s == null ? null : s.replace(key, hash, value);
-    }
-
-    /**
-     * Removes all of the mappings from this map.
-     */
-    public void clear() {
-        final Segment<K,V>[] segments = this.segments;
-        for (int j = 0; j < segments.length; ++j) {
-            Segment<K,V> s = segmentAt(segments, j);
-            if (s != null)
-                s.clear();
-        }
-    }
-
-    /**
-     * Returns a {@link Set} view of the keys contained in this map.
-     * The set is backed by the map, so changes to the map are
-     * reflected in the set, and vice-versa.  The set supports element
-     * removal, which removes the corresponding mapping from this map,
-     * via the <tt>Iterator.remove</tt>, <tt>Set.remove</tt>,
-     * <tt>removeAll</tt>, <tt>retainAll</tt>, and <tt>clear</tt>
-     * operations.  It does not support the <tt>add</tt> or
-     * <tt>addAll</tt> operations.
-     *
-     * <p>The view's <tt>iterator</tt> is a "weakly consistent" iterator
-     * that will never throw {@link ConcurrentModificationException},
-     * and guarantees to traverse elements as they existed upon
-     * construction of the iterator, and may (but is not guaranteed to)
-     * reflect any modifications subsequent to construction.
-     */
-    public Set<K> keySet() {
-        Set<K> ks = keySet;
-        return (ks != null) ? ks : (keySet = new KeySet());
-    }
-
-    /**
-     * Returns a {@link Collection} view of the values contained in this map.
-     * The collection is backed by the map, so changes to the map are
-     * reflected in the collection, and vice-versa.  The collection
-     * supports element removal, which removes the corresponding
-     * mapping from this map, via the <tt>Iterator.remove</tt>,
-     * <tt>Collection.remove</tt>, <tt>removeAll</tt>,
-     * <tt>retainAll</tt>, and <tt>clear</tt> operations.  It does not
-     * support the <tt>add</tt> or <tt>addAll</tt> operations.
-     *
-     * <p>The view's <tt>iterator</tt> is a "weakly consistent" iterator
-     * that will never throw {@link ConcurrentModificationException},
-     * and guarantees to traverse elements as they existed upon
-     * construction of the iterator, and may (but is not guaranteed to)
-     * reflect any modifications subsequent to construction.
-     */
-    public Collection<V> values() {
-        Collection<V> vs = values;
-        return (vs != null) ? vs : (values = new Values());
-    }
-
-    /**
-     * Returns a {@link Set} view of the mappings contained in this map.
-     * The set is backed by the map, so changes to the map are
-     * reflected in the set, and vice-versa.  The set supports element
-     * removal, which removes the corresponding mapping from the map,
-     * via the <tt>Iterator.remove</tt>, <tt>Set.remove</tt>,
-     * <tt>removeAll</tt>, <tt>retainAll</tt>, and <tt>clear</tt>
-     * operations.  It does not support the <tt>add</tt> or
-     * <tt>addAll</tt> operations.
-     *
-     * <p>The view's <tt>iterator</tt> is a "weakly consistent" iterator
-     * that will never throw {@link ConcurrentModificationException},
-     * and guarantees to traverse elements as they existed upon
-     * construction of the iterator, and may (but is not guaranteed to)
-     * reflect any modifications subsequent to construction.
-     */
-    public Set<Map.Entry<K,V>> entrySet() {
-        Set<Map.Entry<K,V>> es = entrySet;
-        return (es != null) ? es : (entrySet = new EntrySet());
-    }
-
-    /**
-     * Returns an enumeration of the keys in this table.
-     *
-     * @return an enumeration of the keys in this table
-     * @see #keySet()
-     */
-    public Enumeration<K> keys() {
-        return new KeyIterator();
-    }
-
-    /**
-     * Returns an enumeration of the values in this table.
-     *
-     * @return an enumeration of the values in this table
-     * @see #values()
-     */
-    public Enumeration<V> elements() {
-        return new ValueIterator();
-    }
-
-    /* ---------------- Iterator Support -------------- */
-
-    abstract class HashIterator {
-        int nextSegmentIndex;
-        int nextTableIndex;
-        HashEntry<K,V>[] currentTable;
-        HashEntry<K, V> nextEntry;
-        HashEntry<K, V> lastReturned;
-
-        HashIterator() {
-            nextSegmentIndex = segments.length - 1;
-            nextTableIndex = -1;
-            advance();
-        }
-
-        /**
-         * Set nextEntry to first node of next non-empty table
-         * (in backwards order, to simplify checks).
-         */
-        final void advance() {
-            for (;;) {
-                if (nextTableIndex >= 0) {
-                    if ((nextEntry = entryAt(currentTable,
-                                             nextTableIndex--)) != null)
-                        break;
-                }
-                else if (nextSegmentIndex >= 0) {
-                    Segment<K,V> seg = segmentAt(segments, nextSegmentIndex--);
-                    if (seg != null && (currentTable = seg.table) != null)
-                        nextTableIndex = currentTable.length - 1;
-                }
-                else
-                    break;
-            }
-        }
-
-        final HashEntry<K,V> nextEntry() {
-            HashEntry<K,V> e = nextEntry;
-            if (e == null)
-                throw new NoSuchElementException();
-            lastReturned = e; // cannot assign until after null check
-            if ((nextEntry = e.next) == null)
-                advance();
-            return e;
-        }
-
-        public final boolean hasNext() { return nextEntry != null; }
-        public final boolean hasMoreElements() { return nextEntry != null; }
-
-        public final void remove() {
-            if (lastReturned == null)
-                throw new IllegalStateException();
-            ConcurrentHashMap.this.remove(lastReturned.key);
-            lastReturned = null;
-        }
-    }
-
-    final class KeyIterator
-        extends HashIterator
-        implements Iterator<K>, Enumeration<K>
-    {
-        public final K next()        { return super.nextEntry().key; }
-        public final K nextElement() { return super.nextEntry().key; }
-    }
-
-    final class ValueIterator
-        extends HashIterator
-        implements Iterator<V>, Enumeration<V>
-    {
-        public final V next()        { return super.nextEntry().value; }
-        public final V nextElement() { return super.nextEntry().value; }
-    }
-
-    /**
-     * Custom Entry class used by EntryIterator.next(), that relays
-     * setValue changes to the underlying map.
-     */
-    final class WriteThroughEntry
-        extends AbstractMap.SimpleEntry<K,V>
-    {
-        WriteThroughEntry(K k, V v) {
-            super(k,v);
-        }
-
-        /**
-         * Set our entry's value and write through to the map. The
-         * value to return is somewhat arbitrary here. Since a
-         * WriteThroughEntry does not necessarily track asynchronous
-         * changes, the most recent "previous" value could be
-         * different from what we return (or could even have been
-         * removed in which case the put will re-establish). We do not
-         * and cannot guarantee more.
-         */
-        public V setValue(V value) {
-            if (value == null) throw new NullPointerException();
-            V v = super.setValue(value);
-            ConcurrentHashMap.this.put(getKey(), value);
-            return v;
-        }
-    }
-
-    final class EntryIterator
-        extends HashIterator
-        implements Iterator<Entry<K,V>>
-    {
-        public Map.Entry<K,V> next() {
-            HashEntry<K,V> e = super.nextEntry();
-            return new WriteThroughEntry(e.key, e.value);
-        }
-    }
-
-    final class KeySet extends AbstractSet<K> {
-        public Iterator<K> iterator() {
-            return new KeyIterator();
-        }
-        public int size() {
-            return ConcurrentHashMap.this.size();
-        }
-        public boolean isEmpty() {
-            return ConcurrentHashMap.this.isEmpty();
-        }
-        public boolean contains(Object o) {
-            return ConcurrentHashMap.this.containsKey(o);
-        }
-        public boolean remove(Object o) {
-            return ConcurrentHashMap.this.remove(o) != null;
-        }
-        public void clear() {
-            ConcurrentHashMap.this.clear();
-        }
-    }
-
-    final class Values extends AbstractCollection<V> {
-        public Iterator<V> iterator() {
-            return new ValueIterator();
-        }
-        public int size() {
-            return ConcurrentHashMap.this.size();
-        }
-        public boolean isEmpty() {
-            return ConcurrentHashMap.this.isEmpty();
-        }
-        public boolean contains(Object o) {
-            return ConcurrentHashMap.this.containsValue(o);
-        }
-        public void clear() {
-            ConcurrentHashMap.this.clear();
-        }
-    }
-
-    final class EntrySet extends AbstractSet<Map.Entry<K,V>> {
-        public Iterator<Map.Entry<K,V>> iterator() {
-            return new EntryIterator();
-        }
-        public boolean contains(Object o) {
-            if (!(o instanceof Map.Entry))
-                return false;
-            Map.Entry<?,?> e = (Map.Entry<?,?>)o;
-            V v = ConcurrentHashMap.this.get(e.getKey());
-            return v != null && v.equals(e.getValue());
-        }
-        public boolean remove(Object o) {
-            if (!(o instanceof Map.Entry))
-                return false;
-            Map.Entry<?,?> e = (Map.Entry<?,?>)o;
-            return ConcurrentHashMap.this.remove(e.getKey(), e.getValue());
-        }
-        public int size() {
-            return ConcurrentHashMap.this.size();
-        }
-        public boolean isEmpty() {
-            return ConcurrentHashMap.this.isEmpty();
-        }
-        public void clear() {
-            ConcurrentHashMap.this.clear();
-        }
-    }
-
-    /* ---------------- Serialization Support -------------- */
-
-    /**
-     * Save the state of the <tt>ConcurrentHashMap</tt> instance to a
-     * stream (i.e., serialize it).
-     * @param s the stream
-     * @serialData
-     * the key (Object) and value (Object)
-     * for each key-value mapping, followed by a null pair.
-     * The key-value mappings are emitted in no particular order.
-     */
-    private void writeObject(java.io.ObjectOutputStream s) throws IOException {
-        // force all segments for serialization compatibility
-        for (int k = 0; k < segments.length; ++k)
-            ensureSegment(k);
-        s.defaultWriteObject();
-
-        final Segment<K,V>[] segments = this.segments;
-        for (int k = 0; k < segments.length; ++k) {
-            Segment<K,V> seg = segmentAt(segments, k);
-            seg.lock();
-            try {
-                HashEntry<K,V>[] tab = seg.table;
-                for (int i = 0; i < tab.length; ++i) {
-                    HashEntry<K,V> e;
-                    for (e = entryAt(tab, i); e != null; e = e.next) {
-                        s.writeObject(e.key);
-                        s.writeObject(e.value);
-                    }
-                }
-            } finally {
-                seg.unlock();
-            }
-        }
-        s.writeObject(null);
-        s.writeObject(null);
-    }
-
-    /**
-     * Reconstitute the <tt>ConcurrentHashMap</tt> instance from a
-     * stream (i.e., deserialize it).
-     * @param s the stream
-     */
-    @SuppressWarnings("unchecked")
-    private void readObject(java.io.ObjectInputStream s)
-        throws IOException, ClassNotFoundException {
-        // Don't call defaultReadObject()
-        ObjectInputStream.GetField oisFields = s.readFields();
-        final Segment<K,V>[] oisSegments = (Segment<K,V>[])oisFields.get("segments", null);
-
-        final int ssize = oisSegments.length;
-        if (ssize < 1 || ssize > MAX_SEGMENTS
-            || (ssize & (ssize-1)) != 0 )  // ssize not power of two
-            throw new java.io.InvalidObjectException("Bad number of segments:"
-                                                     + ssize);
-        int sshift = 0, ssizeTmp = ssize;
-        while (ssizeTmp > 1) {
-            ++sshift;
-            ssizeTmp >>>= 1;
-        }
-        UNSAFE.putIntVolatile(this, SEGSHIFT_OFFSET, 32 - sshift);
-        UNSAFE.putIntVolatile(this, SEGMASK_OFFSET, ssize - 1);
-        UNSAFE.putObjectVolatile(this, SEGMENTS_OFFSET, oisSegments);
-
-        // set hashMask
-        UNSAFE.putIntVolatile(this, HASHSEED_OFFSET, randomHashSeed(this));
-
-        // Re-initialize segments to be minimally sized, and let grow.
-        int cap = MIN_SEGMENT_TABLE_CAPACITY;
-        final Segment<K,V>[] segments = this.segments;
-        for (int k = 0; k < segments.length; ++k) {
-            Segment<K,V> seg = segments[k];
-            if (seg != null) {
-                seg.threshold = (int)(cap * seg.loadFactor);
-                seg.table = (HashEntry<K,V>[]) new HashEntry[cap];
-            }
-        }
-
-        // Read the keys and values, and put the mappings in the table
-        for (;;) {
-            K key = (K) s.readObject();
-            V value = (V) s.readObject();
-            if (key == null)
-                break;
-            put(key, value);
-        }
-    }
-
-    // Unsafe mechanics
-    private static final sun.misc.Unsafe UNSAFE;
-    private static final long SBASE;
-    private static final int SSHIFT;
-    private static final long TBASE;
-    private static final int TSHIFT;
-    private static final long HASHSEED_OFFSET;
-    private static final long SEGSHIFT_OFFSET;
-    private static final long SEGMASK_OFFSET;
-    private static final long SEGMENTS_OFFSET;
-
-    static {
-        int ss, ts;
-        try {
-            UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class tc = HashEntry[].class;
-            Class sc = Segment[].class;
-            TBASE = UNSAFE.arrayBaseOffset(tc);
-            SBASE = UNSAFE.arrayBaseOffset(sc);
-            ts = UNSAFE.arrayIndexScale(tc);
-            ss = UNSAFE.arrayIndexScale(sc);
-            HASHSEED_OFFSET = UNSAFE.objectFieldOffset(
-                ConcurrentHashMap.class.getDeclaredField("hashSeed"));
-            SEGSHIFT_OFFSET = UNSAFE.objectFieldOffset(
-                ConcurrentHashMap.class.getDeclaredField("segmentShift"));
-            SEGMASK_OFFSET = UNSAFE.objectFieldOffset(
-                ConcurrentHashMap.class.getDeclaredField("segmentMask"));
-            SEGMENTS_OFFSET = UNSAFE.objectFieldOffset(
-                ConcurrentHashMap.class.getDeclaredField("segments"));
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-        if ((ss & (ss-1)) != 0 || (ts & (ts-1)) != 0)
-            throw new Error("data type scale not a power of two");
-        SSHIFT = 31 - Integer.numberOfLeadingZeros(ss);
-        TSHIFT = 31 - Integer.numberOfLeadingZeros(ts);
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ConcurrentLinkedDeque.java b/ojluni/src/main/java/java/util/concurrent/ConcurrentLinkedDeque.java
deleted file mode 100755
index 21d59cf..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ConcurrentLinkedDeque.java
+++ /dev/null
@@ -1,1469 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea and Martin Buchholz with assistance from members of
- * JCP JSR-166 Expert Group and released to the public domain, as explained
- * at http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-import java.util.AbstractCollection;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Deque;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.Queue;
-
-/**
- * An unbounded concurrent {@linkplain Deque deque} based on linked nodes.
- * Concurrent insertion, removal, and access operations execute safely
- * across multiple threads.
- * A {@code ConcurrentLinkedDeque} is an appropriate choice when
- * many threads will share access to a common collection.
- * Like most other concurrent collection implementations, this class
- * does not permit the use of {@code null} elements.
- *
- * <p>Iterators are <i>weakly consistent</i>, returning elements
- * reflecting the state of the deque at some point at or since the
- * creation of the iterator.  They do <em>not</em> throw {@link
- * java.util.ConcurrentModificationException
- * ConcurrentModificationException}, and may proceed concurrently with
- * other operations.
- *
- * <p>Beware that, unlike in most collections, the {@code size} method
- * is <em>NOT</em> a constant-time operation. Because of the
- * asynchronous nature of these deques, determining the current number
- * of elements requires a traversal of the elements, and so may report
- * inaccurate results if this collection is modified during traversal.
- * Additionally, the bulk operations {@code addAll},
- * {@code removeAll}, {@code retainAll}, {@code containsAll},
- * {@code equals}, and {@code toArray} are <em>not</em> guaranteed
- * to be performed atomically. For example, an iterator operating
- * concurrently with an {@code addAll} operation might view only some
- * of the added elements.
- *
- * <p>This class and its iterator implement all of the <em>optional</em>
- * methods of the {@link Deque} and {@link Iterator} interfaces.
- *
- * <p>Memory consistency effects: As with other concurrent collections,
- * actions in a thread prior to placing an object into a
- * {@code ConcurrentLinkedDeque}
- * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
- * actions subsequent to the access or removal of that element from
- * the {@code ConcurrentLinkedDeque} in another thread.
- *
- * <p>This class is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @since 1.7
- * @author Doug Lea
- * @author Martin Buchholz
- * @param <E> the type of elements held in this collection
- */
-
-public class ConcurrentLinkedDeque<E>
-    extends AbstractCollection<E>
-    implements Deque<E>, java.io.Serializable {
-
-    /*
-     * This is an implementation of a concurrent lock-free deque
-     * supporting interior removes but not interior insertions, as
-     * required to support the entire Deque interface.
-     *
-     * We extend the techniques developed for ConcurrentLinkedQueue and
-     * LinkedTransferQueue (see the internal docs for those classes).
-     * Understanding the ConcurrentLinkedQueue implementation is a
-     * prerequisite for understanding the implementation of this class.
-     *
-     * The data structure is a symmetrical doubly-linked "GC-robust"
-     * linked list of nodes.  We minimize the number of volatile writes
-     * using two techniques: advancing multiple hops with a single CAS
-     * and mixing volatile and non-volatile writes of the same memory
-     * locations.
-     *
-     * A node contains the expected E ("item") and links to predecessor
-     * ("prev") and successor ("next") nodes:
-     *
-     * class Node<E> { volatile Node<E> prev, next; volatile E item; }
-     *
-     * A node p is considered "live" if it contains a non-null item
-     * (p.item != null).  When an item is CASed to null, the item is
-     * atomically logically deleted from the collection.
-     *
-     * At any time, there is precisely one "first" node with a null
-     * prev reference that terminates any chain of prev references
-     * starting at a live node.  Similarly there is precisely one
-     * "last" node terminating any chain of next references starting at
-     * a live node.  The "first" and "last" nodes may or may not be live.
-     * The "first" and "last" nodes are always mutually reachable.
-     *
-     * A new element is added atomically by CASing the null prev or
-     * next reference in the first or last node to a fresh node
-     * containing the element.  The element's node atomically becomes
-     * "live" at that point.
-     *
-     * A node is considered "active" if it is a live node, or the
-     * first or last node.  Active nodes cannot be unlinked.
-     *
-     * A "self-link" is a next or prev reference that is the same node:
-     *   p.prev == p  or  p.next == p
-     * Self-links are used in the node unlinking process.  Active nodes
-     * never have self-links.
-     *
-     * A node p is active if and only if:
-     *
-     * p.item != null ||
-     * (p.prev == null && p.next != p) ||
-     * (p.next == null && p.prev != p)
-     *
-     * The deque object has two node references, "head" and "tail".
-     * The head and tail are only approximations to the first and last
-     * nodes of the deque.  The first node can always be found by
-     * following prev pointers from head; likewise for tail.  However,
-     * it is permissible for head and tail to be referring to deleted
-     * nodes that have been unlinked and so may not be reachable from
-     * any live node.
-     *
-     * There are 3 stages of node deletion;
-     * "logical deletion", "unlinking", and "gc-unlinking".
-     *
-     * 1. "logical deletion" by CASing item to null atomically removes
-     * the element from the collection, and makes the containing node
-     * eligible for unlinking.
-     *
-     * 2. "unlinking" makes a deleted node unreachable from active
-     * nodes, and thus eventually reclaimable by GC.  Unlinked nodes
-     * may remain reachable indefinitely from an iterator.
-     *
-     * Physical node unlinking is merely an optimization (albeit a
-     * critical one), and so can be performed at our convenience.  At
-     * any time, the set of live nodes maintained by prev and next
-     * links are identical, that is, the live nodes found via next
-     * links from the first node is equal to the elements found via
-     * prev links from the last node.  However, this is not true for
-     * nodes that have already been logically deleted - such nodes may
-     * be reachable in one direction only.
-     *
-     * 3. "gc-unlinking" takes unlinking further by making active
-     * nodes unreachable from deleted nodes, making it easier for the
-     * GC to reclaim future deleted nodes.  This step makes the data
-     * structure "gc-robust", as first described in detail by Boehm
-     * (http://portal.acm.org/citation.cfm?doid=503272.503282).
-     *
-     * GC-unlinked nodes may remain reachable indefinitely from an
-     * iterator, but unlike unlinked nodes, are never reachable from
-     * head or tail.
-     *
-     * Making the data structure GC-robust will eliminate the risk of
-     * unbounded memory retention with conservative GCs and is likely
-     * to improve performance with generational GCs.
-     *
-     * When a node is dequeued at either end, e.g. via poll(), we would
-     * like to break any references from the node to active nodes.  We
-     * develop further the use of self-links that was very effective in
-     * other concurrent collection classes.  The idea is to replace
-     * prev and next pointers with special values that are interpreted
-     * to mean off-the-list-at-one-end.  These are approximations, but
-     * good enough to preserve the properties we want in our
-     * traversals, e.g. we guarantee that a traversal will never visit
-     * the same element twice, but we don't guarantee whether a
-     * traversal that runs out of elements will be able to see more
-     * elements later after enqueues at that end.  Doing gc-unlinking
-     * safely is particularly tricky, since any node can be in use
-     * indefinitely (for example by an iterator).  We must ensure that
-     * the nodes pointed at by head/tail never get gc-unlinked, since
-     * head/tail are needed to get "back on track" by other nodes that
-     * are gc-unlinked.  gc-unlinking accounts for much of the
-     * implementation complexity.
-     *
-     * Since neither unlinking nor gc-unlinking are necessary for
-     * correctness, there are many implementation choices regarding
-     * frequency (eagerness) of these operations.  Since volatile
-     * reads are likely to be much cheaper than CASes, saving CASes by
-     * unlinking multiple adjacent nodes at a time may be a win.
-     * gc-unlinking can be performed rarely and still be effective,
-     * since it is most important that long chains of deleted nodes
-     * are occasionally broken.
-     *
-     * The actual representation we use is that p.next == p means to
-     * goto the first node (which in turn is reached by following prev
-     * pointers from head), and p.next == null && p.prev == p means
-     * that the iteration is at an end and that p is a (static final)
-     * dummy node, NEXT_TERMINATOR, and not the last active node.
-     * Finishing the iteration when encountering such a TERMINATOR is
-     * good enough for read-only traversals, so such traversals can use
-     * p.next == null as the termination condition.  When we need to
-     * find the last (active) node, for enqueueing a new node, we need
-     * to check whether we have reached a TERMINATOR node; if so,
-     * restart traversal from tail.
-     *
-     * The implementation is completely directionally symmetrical,
-     * except that most public methods that iterate through the list
-     * follow next pointers ("forward" direction).
-     *
-     * We believe (without full proof) that all single-element deque
-     * operations (e.g., addFirst, peekLast, pollLast) are linearizable
-     * (see Herlihy and Shavit's book).  However, some combinations of
-     * operations are known not to be linearizable.  In particular,
-     * when an addFirst(A) is racing with pollFirst() removing B, it is
-     * possible for an observer iterating over the elements to observe
-     * A B C and subsequently observe A C, even though no interior
-     * removes are ever performed.  Nevertheless, iterators behave
-     * reasonably, providing the "weakly consistent" guarantees.
-     *
-     * Empirically, microbenchmarks suggest that this class adds about
-     * 40% overhead relative to ConcurrentLinkedQueue, which feels as
-     * good as we can hope for.
-     */
-
-    private static final long serialVersionUID = 876323262645176354L;
-
-    /**
-     * A node from which the first node on list (that is, the unique node p
-     * with p.prev == null && p.next != p) can be reached in O(1) time.
-     * Invariants:
-     * - the first node is always O(1) reachable from head via prev links
-     * - all live nodes are reachable from the first node via succ()
-     * - head != null
-     * - (tmp = head).next != tmp || tmp != head
-     * - head is never gc-unlinked (but may be unlinked)
-     * Non-invariants:
-     * - head.item may or may not be null
-     * - head may not be reachable from the first or last node, or from tail
-     */
-    private transient volatile Node<E> head;
-
-    /**
-     * A node from which the last node on list (that is, the unique node p
-     * with p.next == null && p.prev != p) can be reached in O(1) time.
-     * Invariants:
-     * - the last node is always O(1) reachable from tail via next links
-     * - all live nodes are reachable from the last node via pred()
-     * - tail != null
-     * - tail is never gc-unlinked (but may be unlinked)
-     * Non-invariants:
-     * - tail.item may or may not be null
-     * - tail may not be reachable from the first or last node, or from head
-     */
-    private transient volatile Node<E> tail;
-
-    private static final Node<Object> PREV_TERMINATOR, NEXT_TERMINATOR;
-
-    @SuppressWarnings("unchecked")
-    Node<E> prevTerminator() {
-        return (Node<E>) PREV_TERMINATOR;
-    }
-
-    @SuppressWarnings("unchecked")
-    Node<E> nextTerminator() {
-        return (Node<E>) NEXT_TERMINATOR;
-    }
-
-    static final class Node<E> {
-        volatile Node<E> prev;
-        volatile E item;
-        volatile Node<E> next;
-
-        Node() {  // default constructor for NEXT_TERMINATOR, PREV_TERMINATOR
-        }
-
-        /**
-         * Constructs a new node.  Uses relaxed write because item can
-         * only be seen after publication via casNext or casPrev.
-         */
-        Node(E item) {
-            UNSAFE.putObject(this, itemOffset, item);
-        }
-
-        boolean casItem(E cmp, E val) {
-            return UNSAFE.compareAndSwapObject(this, itemOffset, cmp, val);
-        }
-
-        void lazySetNext(Node<E> val) {
-            UNSAFE.putOrderedObject(this, nextOffset, val);
-        }
-
-        boolean casNext(Node<E> cmp, Node<E> val) {
-            return UNSAFE.compareAndSwapObject(this, nextOffset, cmp, val);
-        }
-
-        void lazySetPrev(Node<E> val) {
-            UNSAFE.putOrderedObject(this, prevOffset, val);
-        }
-
-        boolean casPrev(Node<E> cmp, Node<E> val) {
-            return UNSAFE.compareAndSwapObject(this, prevOffset, cmp, val);
-        }
-
-        // Unsafe mechanics
-
-        private static final sun.misc.Unsafe UNSAFE;
-        private static final long prevOffset;
-        private static final long itemOffset;
-        private static final long nextOffset;
-
-        static {
-            try {
-                UNSAFE = sun.misc.Unsafe.getUnsafe();
-                Class k = Node.class;
-                prevOffset = UNSAFE.objectFieldOffset
-                    (k.getDeclaredField("prev"));
-                itemOffset = UNSAFE.objectFieldOffset
-                    (k.getDeclaredField("item"));
-                nextOffset = UNSAFE.objectFieldOffset
-                    (k.getDeclaredField("next"));
-            } catch (Exception e) {
-                throw new Error(e);
-            }
-        }
-    }
-
-    /**
-     * Links e as first element.
-     */
-    private void linkFirst(E e) {
-        checkNotNull(e);
-        final Node<E> newNode = new Node<E>(e);
-
-        restartFromHead:
-        for (;;)
-            for (Node<E> h = head, p = h, q;;) {
-                if ((q = p.prev) != null &&
-                    (q = (p = q).prev) != null)
-                    // Check for head updates every other hop.
-                    // If p == q, we are sure to follow head instead.
-                    p = (h != (h = head)) ? h : q;
-                else if (p.next == p) // PREV_TERMINATOR
-                    continue restartFromHead;
-                else {
-                    // p is first node
-                    newNode.lazySetNext(p); // CAS piggyback
-                    if (p.casPrev(null, newNode)) {
-                        // Successful CAS is the linearization point
-                        // for e to become an element of this deque,
-                        // and for newNode to become "live".
-                        if (p != h) // hop two nodes at a time
-                            casHead(h, newNode);  // Failure is OK.
-                        return;
-                    }
-                    // Lost CAS race to another thread; re-read prev
-                }
-            }
-    }
-
-    /**
-     * Links e as last element.
-     */
-    private void linkLast(E e) {
-        checkNotNull(e);
-        final Node<E> newNode = new Node<E>(e);
-
-        restartFromTail:
-        for (;;)
-            for (Node<E> t = tail, p = t, q;;) {
-                if ((q = p.next) != null &&
-                    (q = (p = q).next) != null)
-                    // Check for tail updates every other hop.
-                    // If p == q, we are sure to follow tail instead.
-                    p = (t != (t = tail)) ? t : q;
-                else if (p.prev == p) // NEXT_TERMINATOR
-                    continue restartFromTail;
-                else {
-                    // p is last node
-                    newNode.lazySetPrev(p); // CAS piggyback
-                    if (p.casNext(null, newNode)) {
-                        // Successful CAS is the linearization point
-                        // for e to become an element of this deque,
-                        // and for newNode to become "live".
-                        if (p != t) // hop two nodes at a time
-                            casTail(t, newNode);  // Failure is OK.
-                        return;
-                    }
-                    // Lost CAS race to another thread; re-read next
-                }
-            }
-    }
-
-    private static final int HOPS = 2;
-
-    /**
-     * Unlinks non-null node x.
-     */
-    void unlink(Node<E> x) {
-        // assert x != null;
-        // assert x.item == null;
-        // assert x != PREV_TERMINATOR;
-        // assert x != NEXT_TERMINATOR;
-
-        final Node<E> prev = x.prev;
-        final Node<E> next = x.next;
-        if (prev == null) {
-            unlinkFirst(x, next);
-        } else if (next == null) {
-            unlinkLast(x, prev);
-        } else {
-            // Unlink interior node.
-            //
-            // This is the common case, since a series of polls at the
-            // same end will be "interior" removes, except perhaps for
-            // the first one, since end nodes cannot be unlinked.
-            //
-            // At any time, all active nodes are mutually reachable by
-            // following a sequence of either next or prev pointers.
-            //
-            // Our strategy is to find the unique active predecessor
-            // and successor of x.  Try to fix up their links so that
-            // they point to each other, leaving x unreachable from
-            // active nodes.  If successful, and if x has no live
-            // predecessor/successor, we additionally try to gc-unlink,
-            // leaving active nodes unreachable from x, by rechecking
-            // that the status of predecessor and successor are
-            // unchanged and ensuring that x is not reachable from
-            // tail/head, before setting x's prev/next links to their
-            // logical approximate replacements, self/TERMINATOR.
-            Node<E> activePred, activeSucc;
-            boolean isFirst, isLast;
-            int hops = 1;
-
-            // Find active predecessor
-            for (Node<E> p = prev; ; ++hops) {
-                if (p.item != null) {
-                    activePred = p;
-                    isFirst = false;
-                    break;
-                }
-                Node<E> q = p.prev;
-                if (q == null) {
-                    if (p.next == p)
-                        return;
-                    activePred = p;
-                    isFirst = true;
-                    break;
-                }
-                else if (p == q)
-                    return;
-                else
-                    p = q;
-            }
-
-            // Find active successor
-            for (Node<E> p = next; ; ++hops) {
-                if (p.item != null) {
-                    activeSucc = p;
-                    isLast = false;
-                    break;
-                }
-                Node<E> q = p.next;
-                if (q == null) {
-                    if (p.prev == p)
-                        return;
-                    activeSucc = p;
-                    isLast = true;
-                    break;
-                }
-                else if (p == q)
-                    return;
-                else
-                    p = q;
-            }
-
-            // TODO: better HOP heuristics
-            if (hops < HOPS
-                // always squeeze out interior deleted nodes
-                && (isFirst | isLast))
-                return;
-
-            // Squeeze out deleted nodes between activePred and
-            // activeSucc, including x.
-            skipDeletedSuccessors(activePred);
-            skipDeletedPredecessors(activeSucc);
-
-            // Try to gc-unlink, if possible
-            if ((isFirst | isLast) &&
-
-                // Recheck expected state of predecessor and successor
-                (activePred.next == activeSucc) &&
-                (activeSucc.prev == activePred) &&
-                (isFirst ? activePred.prev == null : activePred.item != null) &&
-                (isLast  ? activeSucc.next == null : activeSucc.item != null)) {
-
-                updateHead(); // Ensure x is not reachable from head
-                updateTail(); // Ensure x is not reachable from tail
-
-                // Finally, actually gc-unlink
-                x.lazySetPrev(isFirst ? prevTerminator() : x);
-                x.lazySetNext(isLast  ? nextTerminator() : x);
-            }
-        }
-    }
-
-    /**
-     * Unlinks non-null first node.
-     */
-    private void unlinkFirst(Node<E> first, Node<E> next) {
-        // assert first != null;
-        // assert next != null;
-        // assert first.item == null;
-        for (Node<E> o = null, p = next, q;;) {
-            if (p.item != null || (q = p.next) == null) {
-                if (o != null && p.prev != p && first.casNext(next, p)) {
-                    skipDeletedPredecessors(p);
-                    if (first.prev == null &&
-                        (p.next == null || p.item != null) &&
-                        p.prev == first) {
-
-                        updateHead(); // Ensure o is not reachable from head
-                        updateTail(); // Ensure o is not reachable from tail
-
-                        // Finally, actually gc-unlink
-                        o.lazySetNext(o);
-                        o.lazySetPrev(prevTerminator());
-                    }
-                }
-                return;
-            }
-            else if (p == q)
-                return;
-            else {
-                o = p;
-                p = q;
-            }
-        }
-    }
-
-    /**
-     * Unlinks non-null last node.
-     */
-    private void unlinkLast(Node<E> last, Node<E> prev) {
-        // assert last != null;
-        // assert prev != null;
-        // assert last.item == null;
-        for (Node<E> o = null, p = prev, q;;) {
-            if (p.item != null || (q = p.prev) == null) {
-                if (o != null && p.next != p && last.casPrev(prev, p)) {
-                    skipDeletedSuccessors(p);
-                    if (last.next == null &&
-                        (p.prev == null || p.item != null) &&
-                        p.next == last) {
-
-                        updateHead(); // Ensure o is not reachable from head
-                        updateTail(); // Ensure o is not reachable from tail
-
-                        // Finally, actually gc-unlink
-                        o.lazySetPrev(o);
-                        o.lazySetNext(nextTerminator());
-                    }
-                }
-                return;
-            }
-            else if (p == q)
-                return;
-            else {
-                o = p;
-                p = q;
-            }
-        }
-    }
-
-    /**
-     * Guarantees that any node which was unlinked before a call to
-     * this method will be unreachable from head after it returns.
-     * Does not guarantee to eliminate slack, only that head will
-     * point to a node that was active while this method was running.
-     */
-    private final void updateHead() {
-        // Either head already points to an active node, or we keep
-        // trying to cas it to the first node until it does.
-        Node<E> h, p, q;
-        restartFromHead:
-        while ((h = head).item == null && (p = h.prev) != null) {
-            for (;;) {
-                if ((q = p.prev) == null ||
-                    (q = (p = q).prev) == null) {
-                    // It is possible that p is PREV_TERMINATOR,
-                    // but if so, the CAS is guaranteed to fail.
-                    if (casHead(h, p))
-                        return;
-                    else
-                        continue restartFromHead;
-                }
-                else if (h != head)
-                    continue restartFromHead;
-                else
-                    p = q;
-            }
-        }
-    }
-
-    /**
-     * Guarantees that any node which was unlinked before a call to
-     * this method will be unreachable from tail after it returns.
-     * Does not guarantee to eliminate slack, only that tail will
-     * point to a node that was active while this method was running.
-     */
-    private final void updateTail() {
-        // Either tail already points to an active node, or we keep
-        // trying to cas it to the last node until it does.
-        Node<E> t, p, q;
-        restartFromTail:
-        while ((t = tail).item == null && (p = t.next) != null) {
-            for (;;) {
-                if ((q = p.next) == null ||
-                    (q = (p = q).next) == null) {
-                    // It is possible that p is NEXT_TERMINATOR,
-                    // but if so, the CAS is guaranteed to fail.
-                    if (casTail(t, p))
-                        return;
-                    else
-                        continue restartFromTail;
-                }
-                else if (t != tail)
-                    continue restartFromTail;
-                else
-                    p = q;
-            }
-        }
-    }
-
-    private void skipDeletedPredecessors(Node<E> x) {
-        whileActive:
-        do {
-            Node<E> prev = x.prev;
-            // assert prev != null;
-            // assert x != NEXT_TERMINATOR;
-            // assert x != PREV_TERMINATOR;
-            Node<E> p = prev;
-            findActive:
-            for (;;) {
-                if (p.item != null)
-                    break findActive;
-                Node<E> q = p.prev;
-                if (q == null) {
-                    if (p.next == p)
-                        continue whileActive;
-                    break findActive;
-                }
-                else if (p == q)
-                    continue whileActive;
-                else
-                    p = q;
-            }
-
-            // found active CAS target
-            if (prev == p || x.casPrev(prev, p))
-                return;
-
-        } while (x.item != null || x.next == null);
-    }
-
-    private void skipDeletedSuccessors(Node<E> x) {
-        whileActive:
-        do {
-            Node<E> next = x.next;
-            // assert next != null;
-            // assert x != NEXT_TERMINATOR;
-            // assert x != PREV_TERMINATOR;
-            Node<E> p = next;
-            findActive:
-            for (;;) {
-                if (p.item != null)
-                    break findActive;
-                Node<E> q = p.next;
-                if (q == null) {
-                    if (p.prev == p)
-                        continue whileActive;
-                    break findActive;
-                }
-                else if (p == q)
-                    continue whileActive;
-                else
-                    p = q;
-            }
-
-            // found active CAS target
-            if (next == p || x.casNext(next, p))
-                return;
-
-        } while (x.item != null || x.prev == null);
-    }
-
-    /**
-     * Returns the successor of p, or the first node if p.next has been
-     * linked to self, which will only be true if traversing with a
-     * stale pointer that is now off the list.
-     */
-    final Node<E> succ(Node<E> p) {
-        // TODO: should we skip deleted nodes here?
-        Node<E> q = p.next;
-        return (p == q) ? first() : q;
-    }
-
-    /**
-     * Returns the predecessor of p, or the last node if p.prev has been
-     * linked to self, which will only be true if traversing with a
-     * stale pointer that is now off the list.
-     */
-    final Node<E> pred(Node<E> p) {
-        Node<E> q = p.prev;
-        return (p == q) ? last() : q;
-    }
-
-    /**
-     * Returns the first node, the unique node p for which:
-     *     p.prev == null && p.next != p
-     * The returned node may or may not be logically deleted.
-     * Guarantees that head is set to the returned node.
-     */
-    Node<E> first() {
-        restartFromHead:
-        for (;;)
-            for (Node<E> h = head, p = h, q;;) {
-                if ((q = p.prev) != null &&
-                    (q = (p = q).prev) != null)
-                    // Check for head updates every other hop.
-                    // If p == q, we are sure to follow head instead.
-                    p = (h != (h = head)) ? h : q;
-                else if (p == h
-                         // It is possible that p is PREV_TERMINATOR,
-                         // but if so, the CAS is guaranteed to fail.
-                         || casHead(h, p))
-                    return p;
-                else
-                    continue restartFromHead;
-            }
-    }
-
-    /**
-     * Returns the last node, the unique node p for which:
-     *     p.next == null && p.prev != p
-     * The returned node may or may not be logically deleted.
-     * Guarantees that tail is set to the returned node.
-     */
-    Node<E> last() {
-        restartFromTail:
-        for (;;)
-            for (Node<E> t = tail, p = t, q;;) {
-                if ((q = p.next) != null &&
-                    (q = (p = q).next) != null)
-                    // Check for tail updates every other hop.
-                    // If p == q, we are sure to follow tail instead.
-                    p = (t != (t = tail)) ? t : q;
-                else if (p == t
-                         // It is possible that p is NEXT_TERMINATOR,
-                         // but if so, the CAS is guaranteed to fail.
-                         || casTail(t, p))
-                    return p;
-                else
-                    continue restartFromTail;
-            }
-    }
-
-    // Minor convenience utilities
-
-    /**
-     * Throws NullPointerException if argument is null.
-     *
-     * @param v the element
-     */
-    private static void checkNotNull(Object v) {
-        if (v == null)
-            throw new NullPointerException();
-    }
-
-    /**
-     * Returns element unless it is null, in which case throws
-     * NoSuchElementException.
-     *
-     * @param v the element
-     * @return the element
-     */
-    private E screenNullResult(E v) {
-        if (v == null)
-            throw new NoSuchElementException();
-        return v;
-    }
-
-    /**
-     * Creates an array list and fills it with elements of this list.
-     * Used by toArray.
-     *
-     * @return the arrayList
-     */
-    private ArrayList<E> toArrayList() {
-        ArrayList<E> list = new ArrayList<E>();
-        for (Node<E> p = first(); p != null; p = succ(p)) {
-            E item = p.item;
-            if (item != null)
-                list.add(item);
-        }
-        return list;
-    }
-
-    /**
-     * Constructs an empty deque.
-     */
-    public ConcurrentLinkedDeque() {
-        head = tail = new Node<E>(null);
-    }
-
-    /**
-     * Constructs a deque initially containing the elements of
-     * the given collection, added in traversal order of the
-     * collection's iterator.
-     *
-     * @param c the collection of elements to initially contain
-     * @throws NullPointerException if the specified collection or any
-     *         of its elements are null
-     */
-    public ConcurrentLinkedDeque(Collection<? extends E> c) {
-        // Copy c into a private chain of Nodes
-        Node<E> h = null, t = null;
-        for (E e : c) {
-            checkNotNull(e);
-            Node<E> newNode = new Node<E>(e);
-            if (h == null)
-                h = t = newNode;
-            else {
-                t.lazySetNext(newNode);
-                newNode.lazySetPrev(t);
-                t = newNode;
-            }
-        }
-        initHeadTail(h, t);
-    }
-
-    /**
-     * Initializes head and tail, ensuring invariants hold.
-     */
-    private void initHeadTail(Node<E> h, Node<E> t) {
-        if (h == t) {
-            if (h == null)
-                h = t = new Node<E>(null);
-            else {
-                // Avoid edge case of a single Node with non-null item.
-                Node<E> newNode = new Node<E>(null);
-                t.lazySetNext(newNode);
-                newNode.lazySetPrev(t);
-                t = newNode;
-            }
-        }
-        head = h;
-        tail = t;
-    }
-
-    /**
-     * Inserts the specified element at the front of this deque.
-     * As the deque is unbounded, this method will never throw
-     * {@link IllegalStateException}.
-     *
-     * @throws NullPointerException if the specified element is null
-     */
-    public void addFirst(E e) {
-        linkFirst(e);
-    }
-
-    /**
-     * Inserts the specified element at the end of this deque.
-     * As the deque is unbounded, this method will never throw
-     * {@link IllegalStateException}.
-     *
-     * <p>This method is equivalent to {@link #add}.
-     *
-     * @throws NullPointerException if the specified element is null
-     */
-    public void addLast(E e) {
-        linkLast(e);
-    }
-
-    /**
-     * Inserts the specified element at the front of this deque.
-     * As the deque is unbounded, this method will never return {@code false}.
-     *
-     * @return {@code true} (as specified by {@link Deque#offerFirst})
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean offerFirst(E e) {
-        linkFirst(e);
-        return true;
-    }
-
-    /**
-     * Inserts the specified element at the end of this deque.
-     * As the deque is unbounded, this method will never return {@code false}.
-     *
-     * <p>This method is equivalent to {@link #add}.
-     *
-     * @return {@code true} (as specified by {@link Deque#offerLast})
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean offerLast(E e) {
-        linkLast(e);
-        return true;
-    }
-
-    public E peekFirst() {
-        for (Node<E> p = first(); p != null; p = succ(p)) {
-            E item = p.item;
-            if (item != null)
-                return item;
-        }
-        return null;
-    }
-
-    public E peekLast() {
-        for (Node<E> p = last(); p != null; p = pred(p)) {
-            E item = p.item;
-            if (item != null)
-                return item;
-        }
-        return null;
-    }
-
-    /**
-     * @throws NoSuchElementException {@inheritDoc}
-     */
-    public E getFirst() {
-        return screenNullResult(peekFirst());
-    }
-
-    /**
-     * @throws NoSuchElementException {@inheritDoc}
-     */
-    public E getLast() {
-        return screenNullResult(peekLast());
-    }
-
-    public E pollFirst() {
-        for (Node<E> p = first(); p != null; p = succ(p)) {
-            E item = p.item;
-            if (item != null && p.casItem(item, null)) {
-                unlink(p);
-                return item;
-            }
-        }
-        return null;
-    }
-
-    public E pollLast() {
-        for (Node<E> p = last(); p != null; p = pred(p)) {
-            E item = p.item;
-            if (item != null && p.casItem(item, null)) {
-                unlink(p);
-                return item;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * @throws NoSuchElementException {@inheritDoc}
-     */
-    public E removeFirst() {
-        return screenNullResult(pollFirst());
-    }
-
-    /**
-     * @throws NoSuchElementException {@inheritDoc}
-     */
-    public E removeLast() {
-        return screenNullResult(pollLast());
-    }
-
-    // *** Queue and stack methods ***
-
-    /**
-     * Inserts the specified element at the tail of this deque.
-     * As the deque is unbounded, this method will never return {@code false}.
-     *
-     * @return {@code true} (as specified by {@link Queue#offer})
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean offer(E e) {
-        return offerLast(e);
-    }
-
-    /**
-     * Inserts the specified element at the tail of this deque.
-     * As the deque is unbounded, this method will never throw
-     * {@link IllegalStateException} or return {@code false}.
-     *
-     * @return {@code true} (as specified by {@link Collection#add})
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean add(E e) {
-        return offerLast(e);
-    }
-
-    public E poll()           { return pollFirst(); }
-    public E remove()         { return removeFirst(); }
-    public E peek()           { return peekFirst(); }
-    public E element()        { return getFirst(); }
-    public void push(E e)     { addFirst(e); }
-    public E pop()            { return removeFirst(); }
-
-    /**
-     * Removes the first element {@code e} such that
-     * {@code o.equals(e)}, if such an element exists in this deque.
-     * If the deque does not contain the element, it is unchanged.
-     *
-     * @param o element to be removed from this deque, if present
-     * @return {@code true} if the deque contained the specified element
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean removeFirstOccurrence(Object o) {
-        checkNotNull(o);
-        for (Node<E> p = first(); p != null; p = succ(p)) {
-            E item = p.item;
-            if (item != null && o.equals(item) && p.casItem(item, null)) {
-                unlink(p);
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Removes the last element {@code e} such that
-     * {@code o.equals(e)}, if such an element exists in this deque.
-     * If the deque does not contain the element, it is unchanged.
-     *
-     * @param o element to be removed from this deque, if present
-     * @return {@code true} if the deque contained the specified element
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean removeLastOccurrence(Object o) {
-        checkNotNull(o);
-        for (Node<E> p = last(); p != null; p = pred(p)) {
-            E item = p.item;
-            if (item != null && o.equals(item) && p.casItem(item, null)) {
-                unlink(p);
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Returns {@code true} if this deque contains at least one
-     * element {@code e} such that {@code o.equals(e)}.
-     *
-     * @param o element whose presence in this deque is to be tested
-     * @return {@code true} if this deque contains the specified element
-     */
-    public boolean contains(Object o) {
-        if (o == null) return false;
-        for (Node<E> p = first(); p != null; p = succ(p)) {
-            E item = p.item;
-            if (item != null && o.equals(item))
-                return true;
-        }
-        return false;
-    }
-
-    /**
-     * Returns {@code true} if this collection contains no elements.
-     *
-     * @return {@code true} if this collection contains no elements
-     */
-    public boolean isEmpty() {
-        return peekFirst() == null;
-    }
-
-    /**
-     * Returns the number of elements in this deque.  If this deque
-     * contains more than {@code Integer.MAX_VALUE} elements, it
-     * returns {@code Integer.MAX_VALUE}.
-     *
-     * <p>Beware that, unlike in most collections, this method is
-     * <em>NOT</em> a constant-time operation. Because of the
-     * asynchronous nature of these deques, determining the current
-     * number of elements requires traversing them all to count them.
-     * Additionally, it is possible for the size to change during
-     * execution of this method, in which case the returned result
-     * will be inaccurate. Thus, this method is typically not very
-     * useful in concurrent applications.
-     *
-     * @return the number of elements in this deque
-     */
-    public int size() {
-        int count = 0;
-        for (Node<E> p = first(); p != null; p = succ(p))
-            if (p.item != null)
-                // Collection.size() spec says to max out
-                if (++count == Integer.MAX_VALUE)
-                    break;
-        return count;
-    }
-
-    /**
-     * Removes the first element {@code e} such that
-     * {@code o.equals(e)}, if such an element exists in this deque.
-     * If the deque does not contain the element, it is unchanged.
-     *
-     * @param o element to be removed from this deque, if present
-     * @return {@code true} if the deque contained the specified element
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean remove(Object o) {
-        return removeFirstOccurrence(o);
-    }
-
-    /**
-     * Appends all of the elements in the specified collection to the end of
-     * this deque, in the order that they are returned by the specified
-     * collection's iterator.  Attempts to {@code addAll} of a deque to
-     * itself result in {@code IllegalArgumentException}.
-     *
-     * @param c the elements to be inserted into this deque
-     * @return {@code true} if this deque changed as a result of the call
-     * @throws NullPointerException if the specified collection or any
-     *         of its elements are null
-     * @throws IllegalArgumentException if the collection is this deque
-     */
-    public boolean addAll(Collection<? extends E> c) {
-        if (c == this)
-            // As historically specified in AbstractQueue#addAll
-            throw new IllegalArgumentException();
-
-        // Copy c into a private chain of Nodes
-        Node<E> beginningOfTheEnd = null, last = null;
-        for (E e : c) {
-            checkNotNull(e);
-            Node<E> newNode = new Node<E>(e);
-            if (beginningOfTheEnd == null)
-                beginningOfTheEnd = last = newNode;
-            else {
-                last.lazySetNext(newNode);
-                newNode.lazySetPrev(last);
-                last = newNode;
-            }
-        }
-        if (beginningOfTheEnd == null)
-            return false;
-
-        // Atomically append the chain at the tail of this collection
-        restartFromTail:
-        for (;;)
-            for (Node<E> t = tail, p = t, q;;) {
-                if ((q = p.next) != null &&
-                    (q = (p = q).next) != null)
-                    // Check for tail updates every other hop.
-                    // If p == q, we are sure to follow tail instead.
-                    p = (t != (t = tail)) ? t : q;
-                else if (p.prev == p) // NEXT_TERMINATOR
-                    continue restartFromTail;
-                else {
-                    // p is last node
-                    beginningOfTheEnd.lazySetPrev(p); // CAS piggyback
-                    if (p.casNext(null, beginningOfTheEnd)) {
-                        // Successful CAS is the linearization point
-                        // for all elements to be added to this deque.
-                        if (!casTail(t, last)) {
-                            // Try a little harder to update tail,
-                            // since we may be adding many elements.
-                            t = tail;
-                            if (last.next == null)
-                                casTail(t, last);
-                        }
-                        return true;
-                    }
-                    // Lost CAS race to another thread; re-read next
-                }
-            }
-    }
-
-    /**
-     * Removes all of the elements from this deque.
-     */
-    public void clear() {
-        while (pollFirst() != null)
-            ;
-    }
-
-    /**
-     * Returns an array containing all of the elements in this deque, in
-     * proper sequence (from first to last element).
-     *
-     * <p>The returned array will be "safe" in that no references to it are
-     * maintained by this deque.  (In other words, this method must allocate
-     * a new array).  The caller is thus free to modify the returned array.
-     *
-     * <p>This method acts as bridge between array-based and collection-based
-     * APIs.
-     *
-     * @return an array containing all of the elements in this deque
-     */
-    public Object[] toArray() {
-        return toArrayList().toArray();
-    }
-
-    /**
-     * Returns an array containing all of the elements in this deque,
-     * in proper sequence (from first to last element); the runtime
-     * type of the returned array is that of the specified array.  If
-     * the deque fits in the specified array, it is returned therein.
-     * Otherwise, a new array is allocated with the runtime type of
-     * the specified array and the size of this deque.
-     *
-     * <p>If this deque fits in the specified array with room to spare
-     * (i.e., the array has more elements than this deque), the element in
-     * the array immediately following the end of the deque is set to
-     * {@code null}.
-     *
-     * <p>Like the {@link #toArray()} method, this method acts as
-     * bridge between array-based and collection-based APIs.  Further,
-     * this method allows precise control over the runtime type of the
-     * output array, and may, under certain circumstances, be used to
-     * save allocation costs.
-     *
-     * <p>Suppose {@code x} is a deque known to contain only strings.
-     * The following code can be used to dump the deque into a newly
-     * allocated array of {@code String}:
-     *
-     * <pre>
-     *     String[] y = x.toArray(new String[0]);</pre>
-     *
-     * Note that {@code toArray(new Object[0])} is identical in function to
-     * {@code toArray()}.
-     *
-     * @param a the array into which the elements of the deque are to
-     *          be stored, if it is big enough; otherwise, a new array of the
-     *          same runtime type is allocated for this purpose
-     * @return an array containing all of the elements in this deque
-     * @throws ArrayStoreException if the runtime type of the specified array
-     *         is not a supertype of the runtime type of every element in
-     *         this deque
-     * @throws NullPointerException if the specified array is null
-     */
-    public <T> T[] toArray(T[] a) {
-        return toArrayList().toArray(a);
-    }
-
-    /**
-     * Returns an iterator over the elements in this deque in proper sequence.
-     * The elements will be returned in order from first (head) to last (tail).
-     *
-     * <p>The returned iterator is a "weakly consistent" iterator that
-     * will never throw {@link java.util.ConcurrentModificationException
-     * ConcurrentModificationException}, and guarantees to traverse
-     * elements as they existed upon construction of the iterator, and
-     * may (but is not guaranteed to) reflect any modifications
-     * subsequent to construction.
-     *
-     * @return an iterator over the elements in this deque in proper sequence
-     */
-    public Iterator<E> iterator() {
-        return new Itr();
-    }
-
-    /**
-     * Returns an iterator over the elements in this deque in reverse
-     * sequential order.  The elements will be returned in order from
-     * last (tail) to first (head).
-     *
-     * <p>The returned iterator is a "weakly consistent" iterator that
-     * will never throw {@link java.util.ConcurrentModificationException
-     * ConcurrentModificationException}, and guarantees to traverse
-     * elements as they existed upon construction of the iterator, and
-     * may (but is not guaranteed to) reflect any modifications
-     * subsequent to construction.
-     *
-     * @return an iterator over the elements in this deque in reverse order
-     */
-    public Iterator<E> descendingIterator() {
-        return new DescendingItr();
-    }
-
-    private abstract class AbstractItr implements Iterator<E> {
-        /**
-         * Next node to return item for.
-         */
-        private Node<E> nextNode;
-
-        /**
-         * nextItem holds on to item fields because once we claim
-         * that an element exists in hasNext(), we must return it in
-         * the following next() call even if it was in the process of
-         * being removed when hasNext() was called.
-         */
-        private E nextItem;
-
-        /**
-         * Node returned by most recent call to next. Needed by remove.
-         * Reset to null if this element is deleted by a call to remove.
-         */
-        private Node<E> lastRet;
-
-        abstract Node<E> startNode();
-        abstract Node<E> nextNode(Node<E> p);
-
-        AbstractItr() {
-            advance();
-        }
-
-        /**
-         * Sets nextNode and nextItem to next valid node, or to null
-         * if no such.
-         */
-        private void advance() {
-            lastRet = nextNode;
-
-            Node<E> p = (nextNode == null) ? startNode() : nextNode(nextNode);
-            for (;; p = nextNode(p)) {
-                if (p == null) {
-                    // p might be active end or TERMINATOR node; both are OK
-                    nextNode = null;
-                    nextItem = null;
-                    break;
-                }
-                E item = p.item;
-                if (item != null) {
-                    nextNode = p;
-                    nextItem = item;
-                    break;
-                }
-            }
-        }
-
-        public boolean hasNext() {
-            return nextItem != null;
-        }
-
-        public E next() {
-            E item = nextItem;
-            if (item == null) throw new NoSuchElementException();
-            advance();
-            return item;
-        }
-
-        public void remove() {
-            Node<E> l = lastRet;
-            if (l == null) throw new IllegalStateException();
-            l.item = null;
-            unlink(l);
-            lastRet = null;
-        }
-    }
-
-    /** Forward iterator */
-    private class Itr extends AbstractItr {
-        Node<E> startNode() { return first(); }
-        Node<E> nextNode(Node<E> p) { return succ(p); }
-    }
-
-    /** Descending iterator */
-    private class DescendingItr extends AbstractItr {
-        Node<E> startNode() { return last(); }
-        Node<E> nextNode(Node<E> p) { return pred(p); }
-    }
-
-    /**
-     * Saves the state to a stream (that is, serializes it).
-     *
-     * @serialData All of the elements (each an {@code E}) in
-     * the proper order, followed by a null
-     * @param s the stream
-     */
-    private void writeObject(java.io.ObjectOutputStream s)
-        throws java.io.IOException {
-
-        // Write out any hidden stuff
-        s.defaultWriteObject();
-
-        // Write out all elements in the proper order.
-        for (Node<E> p = first(); p != null; p = succ(p)) {
-            E item = p.item;
-            if (item != null)
-                s.writeObject(item);
-        }
-
-        // Use trailing null as sentinel
-        s.writeObject(null);
-    }
-
-    /**
-     * Reconstitutes the instance from a stream (that is, deserializes it).
-     * @param s the stream
-     */
-    private void readObject(java.io.ObjectInputStream s)
-        throws java.io.IOException, ClassNotFoundException {
-        s.defaultReadObject();
-
-        // Read in elements until trailing null sentinel found
-        Node<E> h = null, t = null;
-        Object item;
-        while ((item = s.readObject()) != null) {
-            @SuppressWarnings("unchecked")
-            Node<E> newNode = new Node<E>((E) item);
-            if (h == null)
-                h = t = newNode;
-            else {
-                t.lazySetNext(newNode);
-                newNode.lazySetPrev(t);
-                t = newNode;
-            }
-        }
-        initHeadTail(h, t);
-    }
-
-
-    private boolean casHead(Node<E> cmp, Node<E> val) {
-        return UNSAFE.compareAndSwapObject(this, headOffset, cmp, val);
-    }
-
-    private boolean casTail(Node<E> cmp, Node<E> val) {
-        return UNSAFE.compareAndSwapObject(this, tailOffset, cmp, val);
-    }
-
-    // Unsafe mechanics
-
-    private static final sun.misc.Unsafe UNSAFE;
-    private static final long headOffset;
-    private static final long tailOffset;
-    static {
-        PREV_TERMINATOR = new Node<Object>();
-        PREV_TERMINATOR.next = PREV_TERMINATOR;
-        NEXT_TERMINATOR = new Node<Object>();
-        NEXT_TERMINATOR.prev = NEXT_TERMINATOR;
-        try {
-            UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = ConcurrentLinkedDeque.class;
-            headOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("head"));
-            tailOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("tail"));
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ConcurrentLinkedQueue.java b/ojluni/src/main/java/java/util/concurrent/ConcurrentLinkedQueue.java
deleted file mode 100755
index fcdfcf9..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ConcurrentLinkedQueue.java
+++ /dev/null
@@ -1,835 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea and Martin Buchholz with assistance from members of
- * JCP JSR-166 Expert Group and released to the public domain, as explained
- * at http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-import java.util.AbstractQueue;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.Queue;
-
-/**
- * An unbounded thread-safe {@linkplain Queue queue} based on linked nodes.
- * This queue orders elements FIFO (first-in-first-out).
- * The <em>head</em> of the queue is that element that has been on the
- * queue the longest time.
- * The <em>tail</em> of the queue is that element that has been on the
- * queue the shortest time. New elements
- * are inserted at the tail of the queue, and the queue retrieval
- * operations obtain elements at the head of the queue.
- * A {@code ConcurrentLinkedQueue} is an appropriate choice when
- * many threads will share access to a common collection.
- * Like most other concurrent collection implementations, this class
- * does not permit the use of {@code null} elements.
- *
- * <p>This implementation employs an efficient &quot;wait-free&quot;
- * algorithm based on one described in <a
- * href="http://www.cs.rochester.edu/u/michael/PODC96.html"> Simple,
- * Fast, and Practical Non-Blocking and Blocking Concurrent Queue
- * Algorithms</a> by Maged M. Michael and Michael L. Scott.
- *
- * <p>Iterators are <i>weakly consistent</i>, returning elements
- * reflecting the state of the queue at some point at or since the
- * creation of the iterator.  They do <em>not</em> throw {@link
- * java.util.ConcurrentModificationException}, and may proceed concurrently
- * with other operations.  Elements contained in the queue since the creation
- * of the iterator will be returned exactly once.
- *
- * <p>Beware that, unlike in most collections, the {@code size} method
- * is <em>NOT</em> a constant-time operation. Because of the
- * asynchronous nature of these queues, determining the current number
- * of elements requires a traversal of the elements, and so may report
- * inaccurate results if this collection is modified during traversal.
- * Additionally, the bulk operations {@code addAll},
- * {@code removeAll}, {@code retainAll}, {@code containsAll},
- * {@code equals}, and {@code toArray} are <em>not</em> guaranteed
- * to be performed atomically. For example, an iterator operating
- * concurrently with an {@code addAll} operation might view only some
- * of the added elements.
- *
- * <p>This class and its iterator implement all of the <em>optional</em>
- * methods of the {@link Queue} and {@link Iterator} interfaces.
- *
- * <p>Memory consistency effects: As with other concurrent
- * collections, actions in a thread prior to placing an object into a
- * {@code ConcurrentLinkedQueue}
- * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
- * actions subsequent to the access or removal of that element from
- * the {@code ConcurrentLinkedQueue} in another thread.
- *
- * <p>This class is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @since 1.5
- * @author Doug Lea
- * @param <E> the type of elements held in this collection
- *
- */
-public class ConcurrentLinkedQueue<E> extends AbstractQueue<E>
-        implements Queue<E>, java.io.Serializable {
-    private static final long serialVersionUID = 196745693267521676L;
-
-    /*
-     * This is a modification of the Michael & Scott algorithm,
-     * adapted for a garbage-collected environment, with support for
-     * interior node deletion (to support remove(Object)).  For
-     * explanation, read the paper.
-     *
-     * Note that like most non-blocking algorithms in this package,
-     * this implementation relies on the fact that in garbage
-     * collected systems, there is no possibility of ABA problems due
-     * to recycled nodes, so there is no need to use "counted
-     * pointers" or related techniques seen in versions used in
-     * non-GC'ed settings.
-     *
-     * The fundamental invariants are:
-     * - There is exactly one (last) Node with a null next reference,
-     *   which is CASed when enqueueing.  This last Node can be
-     *   reached in O(1) time from tail, but tail is merely an
-     *   optimization - it can always be reached in O(N) time from
-     *   head as well.
-     * - The elements contained in the queue are the non-null items in
-     *   Nodes that are reachable from head.  CASing the item
-     *   reference of a Node to null atomically removes it from the
-     *   queue.  Reachability of all elements from head must remain
-     *   true even in the case of concurrent modifications that cause
-     *   head to advance.  A dequeued Node may remain in use
-     *   indefinitely due to creation of an Iterator or simply a
-     *   poll() that has lost its time slice.
-     *
-     * The above might appear to imply that all Nodes are GC-reachable
-     * from a predecessor dequeued Node.  That would cause two problems:
-     * - allow a rogue Iterator to cause unbounded memory retention
-     * - cause cross-generational linking of old Nodes to new Nodes if
-     *   a Node was tenured while live, which generational GCs have a
-     *   hard time dealing with, causing repeated major collections.
-     * However, only non-deleted Nodes need to be reachable from
-     * dequeued Nodes, and reachability does not necessarily have to
-     * be of the kind understood by the GC.  We use the trick of
-     * linking a Node that has just been dequeued to itself.  Such a
-     * self-link implicitly means to advance to head.
-     *
-     * Both head and tail are permitted to lag.  In fact, failing to
-     * update them every time one could is a significant optimization
-     * (fewer CASes). As with LinkedTransferQueue (see the internal
-     * documentation for that class), we use a slack threshold of two;
-     * that is, we update head/tail when the current pointer appears
-     * to be two or more steps away from the first/last node.
-     *
-     * Since head and tail are updated concurrently and independently,
-     * it is possible for tail to lag behind head (why not)?
-     *
-     * CASing a Node's item reference to null atomically removes the
-     * element from the queue.  Iterators skip over Nodes with null
-     * items.  Prior implementations of this class had a race between
-     * poll() and remove(Object) where the same element would appear
-     * to be successfully removed by two concurrent operations.  The
-     * method remove(Object) also lazily unlinks deleted Nodes, but
-     * this is merely an optimization.
-     *
-     * When constructing a Node (before enqueuing it) we avoid paying
-     * for a volatile write to item by using Unsafe.putObject instead
-     * of a normal write.  This allows the cost of enqueue to be
-     * "one-and-a-half" CASes.
-     *
-     * Both head and tail may or may not point to a Node with a
-     * non-null item.  If the queue is empty, all items must of course
-     * be null.  Upon creation, both head and tail refer to a dummy
-     * Node with null item.  Both head and tail are only updated using
-     * CAS, so they never regress, although again this is merely an
-     * optimization.
-     */
-
-    private static class Node<E> {
-        volatile E item;
-        volatile Node<E> next;
-
-        /**
-         * Constructs a new node.  Uses relaxed write because item can
-         * only be seen after publication via casNext.
-         */
-        Node(E item) {
-            UNSAFE.putObject(this, itemOffset, item);
-        }
-
-        boolean casItem(E cmp, E val) {
-            return UNSAFE.compareAndSwapObject(this, itemOffset, cmp, val);
-        }
-
-        void lazySetNext(Node<E> val) {
-            UNSAFE.putOrderedObject(this, nextOffset, val);
-        }
-
-        boolean casNext(Node<E> cmp, Node<E> val) {
-            return UNSAFE.compareAndSwapObject(this, nextOffset, cmp, val);
-        }
-
-        // Unsafe mechanics
-
-        private static final sun.misc.Unsafe UNSAFE;
-        private static final long itemOffset;
-        private static final long nextOffset;
-
-        static {
-            try {
-                UNSAFE = sun.misc.Unsafe.getUnsafe();
-                Class k = Node.class;
-                itemOffset = UNSAFE.objectFieldOffset
-                    (k.getDeclaredField("item"));
-                nextOffset = UNSAFE.objectFieldOffset
-                    (k.getDeclaredField("next"));
-            } catch (Exception e) {
-                throw new Error(e);
-            }
-        }
-    }
-
-    /**
-     * A node from which the first live (non-deleted) node (if any)
-     * can be reached in O(1) time.
-     * Invariants:
-     * - all live nodes are reachable from head via succ()
-     * - head != null
-     * - (tmp = head).next != tmp || tmp != head
-     * Non-invariants:
-     * - head.item may or may not be null.
-     * - it is permitted for tail to lag behind head, that is, for tail
-     *   to not be reachable from head!
-     */
-    private transient volatile Node<E> head;
-
-    /**
-     * A node from which the last node on list (that is, the unique
-     * node with node.next == null) can be reached in O(1) time.
-     * Invariants:
-     * - the last node is always reachable from tail via succ()
-     * - tail != null
-     * Non-invariants:
-     * - tail.item may or may not be null.
-     * - it is permitted for tail to lag behind head, that is, for tail
-     *   to not be reachable from head!
-     * - tail.next may or may not be self-pointing to tail.
-     */
-    private transient volatile Node<E> tail;
-
-
-    /**
-     * Creates a {@code ConcurrentLinkedQueue} that is initially empty.
-     */
-    public ConcurrentLinkedQueue() {
-        head = tail = new Node<E>(null);
-    }
-
-    /**
-     * Creates a {@code ConcurrentLinkedQueue}
-     * initially containing the elements of the given collection,
-     * added in traversal order of the collection's iterator.
-     *
-     * @param c the collection of elements to initially contain
-     * @throws NullPointerException if the specified collection or any
-     *         of its elements are null
-     */
-    public ConcurrentLinkedQueue(Collection<? extends E> c) {
-        Node<E> h = null, t = null;
-        for (E e : c) {
-            checkNotNull(e);
-            Node<E> newNode = new Node<E>(e);
-            if (h == null)
-                h = t = newNode;
-            else {
-                t.lazySetNext(newNode);
-                t = newNode;
-            }
-        }
-        if (h == null)
-            h = t = new Node<E>(null);
-        head = h;
-        tail = t;
-    }
-
-    // Have to override just to update the javadoc
-
-    /**
-     * Inserts the specified element at the tail of this queue.
-     * As the queue is unbounded, this method will never throw
-     * {@link IllegalStateException} or return {@code false}.
-     *
-     * @return {@code true} (as specified by {@link Collection#add})
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean add(E e) {
-        return offer(e);
-    }
-
-    /**
-     * Try to CAS head to p. If successful, repoint old head to itself
-     * as sentinel for succ(), below.
-     */
-    final void updateHead(Node<E> h, Node<E> p) {
-        if (h != p && casHead(h, p))
-            h.lazySetNext(h);
-    }
-
-    /**
-     * Returns the successor of p, or the head node if p.next has been
-     * linked to self, which will only be true if traversing with a
-     * stale pointer that is now off the list.
-     */
-    final Node<E> succ(Node<E> p) {
-        Node<E> next = p.next;
-        return (p == next) ? head : next;
-    }
-
-    /**
-     * Inserts the specified element at the tail of this queue.
-     * As the queue is unbounded, this method will never return {@code false}.
-     *
-     * @return {@code true} (as specified by {@link Queue#offer})
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean offer(E e) {
-        checkNotNull(e);
-        final Node<E> newNode = new Node<E>(e);
-
-        for (Node<E> t = tail, p = t;;) {
-            Node<E> q = p.next;
-            if (q == null) {
-                // p is last node
-                if (p.casNext(null, newNode)) {
-                    // Successful CAS is the linearization point
-                    // for e to become an element of this queue,
-                    // and for newNode to become "live".
-                    if (p != t) // hop two nodes at a time
-                        casTail(t, newNode);  // Failure is OK.
-                    return true;
-                }
-                // Lost CAS race to another thread; re-read next
-            }
-            else if (p == q)
-                // We have fallen off list.  If tail is unchanged, it
-                // will also be off-list, in which case we need to
-                // jump to head, from which all live nodes are always
-                // reachable.  Else the new tail is a better bet.
-                p = (t != (t = tail)) ? t : head;
-            else
-                // Check for tail updates after two hops.
-                p = (p != t && t != (t = tail)) ? t : q;
-        }
-    }
-
-    public E poll() {
-        restartFromHead:
-        for (;;) {
-            for (Node<E> h = head, p = h, q;;) {
-                E item = p.item;
-
-                if (item != null && p.casItem(item, null)) {
-                    // Successful CAS is the linearization point
-                    // for item to be removed from this queue.
-                    if (p != h) // hop two nodes at a time
-                        updateHead(h, ((q = p.next) != null) ? q : p);
-                    return item;
-                }
-                else if ((q = p.next) == null) {
-                    updateHead(h, p);
-                    return null;
-                }
-                else if (p == q)
-                    continue restartFromHead;
-                else
-                    p = q;
-            }
-        }
-    }
-
-    public E peek() {
-        restartFromHead:
-        for (;;) {
-            for (Node<E> h = head, p = h, q;;) {
-                E item = p.item;
-                if (item != null || (q = p.next) == null) {
-                    updateHead(h, p);
-                    return item;
-                }
-                else if (p == q)
-                    continue restartFromHead;
-                else
-                    p = q;
-            }
-        }
-    }
-
-    /**
-     * Returns the first live (non-deleted) node on list, or null if none.
-     * This is yet another variant of poll/peek; here returning the
-     * first node, not element.  We could make peek() a wrapper around
-     * first(), but that would cost an extra volatile read of item,
-     * and the need to add a retry loop to deal with the possibility
-     * of losing a race to a concurrent poll().
-     */
-    Node<E> first() {
-        restartFromHead:
-        for (;;) {
-            for (Node<E> h = head, p = h, q;;) {
-                boolean hasItem = (p.item != null);
-                if (hasItem || (q = p.next) == null) {
-                    updateHead(h, p);
-                    return hasItem ? p : null;
-                }
-                else if (p == q)
-                    continue restartFromHead;
-                else
-                    p = q;
-            }
-        }
-    }
-
-    /**
-     * Returns {@code true} if this queue contains no elements.
-     *
-     * @return {@code true} if this queue contains no elements
-     */
-    public boolean isEmpty() {
-        return first() == null;
-    }
-
-    /**
-     * Returns the number of elements in this queue.  If this queue
-     * contains more than {@code Integer.MAX_VALUE} elements, returns
-     * {@code Integer.MAX_VALUE}.
-     *
-     * <p>Beware that, unlike in most collections, this method is
-     * <em>NOT</em> a constant-time operation. Because of the
-     * asynchronous nature of these queues, determining the current
-     * number of elements requires an O(n) traversal.
-     * Additionally, if elements are added or removed during execution
-     * of this method, the returned result may be inaccurate.  Thus,
-     * this method is typically not very useful in concurrent
-     * applications.
-     *
-     * @return the number of elements in this queue
-     */
-    public int size() {
-        int count = 0;
-        for (Node<E> p = first(); p != null; p = succ(p))
-            if (p.item != null)
-                // Collection.size() spec says to max out
-                if (++count == Integer.MAX_VALUE)
-                    break;
-        return count;
-    }
-
-    /**
-     * Returns {@code true} if this queue contains the specified element.
-     * More formally, returns {@code true} if and only if this queue contains
-     * at least one element {@code e} such that {@code o.equals(e)}.
-     *
-     * @param o object to be checked for containment in this queue
-     * @return {@code true} if this queue contains the specified element
-     */
-    public boolean contains(Object o) {
-        if (o == null) return false;
-        for (Node<E> p = first(); p != null; p = succ(p)) {
-            E item = p.item;
-            if (item != null && o.equals(item))
-                return true;
-        }
-        return false;
-    }
-
-    /**
-     * Removes a single instance of the specified element from this queue,
-     * if it is present.  More formally, removes an element {@code e} such
-     * that {@code o.equals(e)}, if this queue contains one or more such
-     * elements.
-     * Returns {@code true} if this queue contained the specified element
-     * (or equivalently, if this queue changed as a result of the call).
-     *
-     * @param o element to be removed from this queue, if present
-     * @return {@code true} if this queue changed as a result of the call
-     */
-    public boolean remove(Object o) {
-        if (o == null) return false;
-        Node<E> pred = null;
-        for (Node<E> p = first(); p != null; p = succ(p)) {
-            E item = p.item;
-            if (item != null &&
-                o.equals(item) &&
-                p.casItem(item, null)) {
-                Node<E> next = succ(p);
-                if (pred != null && next != null)
-                    pred.casNext(p, next);
-                return true;
-            }
-            pred = p;
-        }
-        return false;
-    }
-
-    /**
-     * Appends all of the elements in the specified collection to the end of
-     * this queue, in the order that they are returned by the specified
-     * collection's iterator.  Attempts to {@code addAll} of a queue to
-     * itself result in {@code IllegalArgumentException}.
-     *
-     * @param c the elements to be inserted into this queue
-     * @return {@code true} if this queue changed as a result of the call
-     * @throws NullPointerException if the specified collection or any
-     *         of its elements are null
-     * @throws IllegalArgumentException if the collection is this queue
-     */
-    public boolean addAll(Collection<? extends E> c) {
-        if (c == this)
-            // As historically specified in AbstractQueue#addAll
-            throw new IllegalArgumentException();
-
-        // Copy c into a private chain of Nodes
-        Node<E> beginningOfTheEnd = null, last = null;
-        for (E e : c) {
-            checkNotNull(e);
-            Node<E> newNode = new Node<E>(e);
-            if (beginningOfTheEnd == null)
-                beginningOfTheEnd = last = newNode;
-            else {
-                last.lazySetNext(newNode);
-                last = newNode;
-            }
-        }
-        if (beginningOfTheEnd == null)
-            return false;
-
-        // Atomically append the chain at the tail of this collection
-        for (Node<E> t = tail, p = t;;) {
-            Node<E> q = p.next;
-            if (q == null) {
-                // p is last node
-                if (p.casNext(null, beginningOfTheEnd)) {
-                    // Successful CAS is the linearization point
-                    // for all elements to be added to this queue.
-                    if (!casTail(t, last)) {
-                        // Try a little harder to update tail,
-                        // since we may be adding many elements.
-                        t = tail;
-                        if (last.next == null)
-                            casTail(t, last);
-                    }
-                    return true;
-                }
-                // Lost CAS race to another thread; re-read next
-            }
-            else if (p == q)
-                // We have fallen off list.  If tail is unchanged, it
-                // will also be off-list, in which case we need to
-                // jump to head, from which all live nodes are always
-                // reachable.  Else the new tail is a better bet.
-                p = (t != (t = tail)) ? t : head;
-            else
-                // Check for tail updates after two hops.
-                p = (p != t && t != (t = tail)) ? t : q;
-        }
-    }
-
-    /**
-     * Returns an array containing all of the elements in this queue, in
-     * proper sequence.
-     *
-     * <p>The returned array will be "safe" in that no references to it are
-     * maintained by this queue.  (In other words, this method must allocate
-     * a new array).  The caller is thus free to modify the returned array.
-     *
-     * <p>This method acts as bridge between array-based and collection-based
-     * APIs.
-     *
-     * @return an array containing all of the elements in this queue
-     */
-    public Object[] toArray() {
-        // Use ArrayList to deal with resizing.
-        ArrayList<E> al = new ArrayList<E>();
-        for (Node<E> p = first(); p != null; p = succ(p)) {
-            E item = p.item;
-            if (item != null)
-                al.add(item);
-        }
-        return al.toArray();
-    }
-
-    /**
-     * Returns an array containing all of the elements in this queue, in
-     * proper sequence; the runtime type of the returned array is that of
-     * the specified array.  If the queue fits in the specified array, it
-     * is returned therein.  Otherwise, a new array is allocated with the
-     * runtime type of the specified array and the size of this queue.
-     *
-     * <p>If this queue fits in the specified array with room to spare
-     * (i.e., the array has more elements than this queue), the element in
-     * the array immediately following the end of the queue is set to
-     * {@code null}.
-     *
-     * <p>Like the {@link #toArray()} method, this method acts as bridge between
-     * array-based and collection-based APIs.  Further, this method allows
-     * precise control over the runtime type of the output array, and may,
-     * under certain circumstances, be used to save allocation costs.
-     *
-     * <p>Suppose {@code x} is a queue known to contain only strings.
-     * The following code can be used to dump the queue into a newly
-     * allocated array of {@code String}:
-     *
-     * <pre>
-     *     String[] y = x.toArray(new String[0]);</pre>
-     *
-     * Note that {@code toArray(new Object[0])} is identical in function to
-     * {@code toArray()}.
-     *
-     * @param a the array into which the elements of the queue are to
-     *          be stored, if it is big enough; otherwise, a new array of the
-     *          same runtime type is allocated for this purpose
-     * @return an array containing all of the elements in this queue
-     * @throws ArrayStoreException if the runtime type of the specified array
-     *         is not a supertype of the runtime type of every element in
-     *         this queue
-     * @throws NullPointerException if the specified array is null
-     */
-    @SuppressWarnings("unchecked")
-    public <T> T[] toArray(T[] a) {
-        // try to use sent-in array
-        int k = 0;
-        Node<E> p;
-        for (p = first(); p != null && k < a.length; p = succ(p)) {
-            E item = p.item;
-            if (item != null)
-                a[k++] = (T)item;
-        }
-        if (p == null) {
-            if (k < a.length)
-                a[k] = null;
-            return a;
-        }
-
-        // If won't fit, use ArrayList version
-        ArrayList<E> al = new ArrayList<E>();
-        for (Node<E> q = first(); q != null; q = succ(q)) {
-            E item = q.item;
-            if (item != null)
-                al.add(item);
-        }
-        return al.toArray(a);
-    }
-
-    /**
-     * Returns an iterator over the elements in this queue in proper sequence.
-     * The elements will be returned in order from first (head) to last (tail).
-     *
-     * <p>The returned iterator is a "weakly consistent" iterator that
-     * will never throw {@link java.util.ConcurrentModificationException
-     * ConcurrentModificationException}, and guarantees to traverse
-     * elements as they existed upon construction of the iterator, and
-     * may (but is not guaranteed to) reflect any modifications
-     * subsequent to construction.
-     *
-     * @return an iterator over the elements in this queue in proper sequence
-     */
-    public Iterator<E> iterator() {
-        return new Itr();
-    }
-
-    private class Itr implements Iterator<E> {
-        /**
-         * Next node to return item for.
-         */
-        private Node<E> nextNode;
-
-        /**
-         * nextItem holds on to item fields because once we claim
-         * that an element exists in hasNext(), we must return it in
-         * the following next() call even if it was in the process of
-         * being removed when hasNext() was called.
-         */
-        private E nextItem;
-
-        /**
-         * Node of the last returned item, to support remove.
-         */
-        private Node<E> lastRet;
-
-        Itr() {
-            advance();
-        }
-
-        /**
-         * Moves to next valid node and returns item to return for
-         * next(), or null if no such.
-         */
-        private E advance() {
-            lastRet = nextNode;
-            E x = nextItem;
-
-            Node<E> pred, p;
-            if (nextNode == null) {
-                p = first();
-                pred = null;
-            } else {
-                pred = nextNode;
-                p = succ(nextNode);
-            }
-
-            for (;;) {
-                if (p == null) {
-                    nextNode = null;
-                    nextItem = null;
-                    return x;
-                }
-                E item = p.item;
-                if (item != null) {
-                    nextNode = p;
-                    nextItem = item;
-                    return x;
-                } else {
-                    // skip over nulls
-                    Node<E> next = succ(p);
-                    if (pred != null && next != null)
-                        pred.casNext(p, next);
-                    p = next;
-                }
-            }
-        }
-
-        public boolean hasNext() {
-            return nextNode != null;
-        }
-
-        public E next() {
-            if (nextNode == null) throw new NoSuchElementException();
-            return advance();
-        }
-
-        public void remove() {
-            Node<E> l = lastRet;
-            if (l == null) throw new IllegalStateException();
-            // rely on a future traversal to relink.
-            l.item = null;
-            lastRet = null;
-        }
-    }
-
-    /**
-     * Saves the state to a stream (that is, serializes it).
-     *
-     * @serialData All of the elements (each an {@code E}) in
-     * the proper order, followed by a null
-     * @param s the stream
-     */
-    private void writeObject(java.io.ObjectOutputStream s)
-        throws java.io.IOException {
-
-        // Write out any hidden stuff
-        s.defaultWriteObject();
-
-        // Write out all elements in the proper order.
-        for (Node<E> p = first(); p != null; p = succ(p)) {
-            Object item = p.item;
-            if (item != null)
-                s.writeObject(item);
-        }
-
-        // Use trailing null as sentinel
-        s.writeObject(null);
-    }
-
-    /**
-     * Reconstitutes the instance from a stream (that is, deserializes it).
-     * @param s the stream
-     */
-    private void readObject(java.io.ObjectInputStream s)
-        throws java.io.IOException, ClassNotFoundException {
-        s.defaultReadObject();
-
-        // Read in elements until trailing null sentinel found
-        Node<E> h = null, t = null;
-        Object item;
-        while ((item = s.readObject()) != null) {
-            @SuppressWarnings("unchecked")
-            Node<E> newNode = new Node<E>((E) item);
-            if (h == null)
-                h = t = newNode;
-            else {
-                t.lazySetNext(newNode);
-                t = newNode;
-            }
-        }
-        if (h == null)
-            h = t = new Node<E>(null);
-        head = h;
-        tail = t;
-    }
-
-    /**
-     * Throws NullPointerException if argument is null.
-     *
-     * @param v the element
-     */
-    private static void checkNotNull(Object v) {
-        if (v == null)
-            throw new NullPointerException();
-    }
-
-    private boolean casTail(Node<E> cmp, Node<E> val) {
-        return UNSAFE.compareAndSwapObject(this, tailOffset, cmp, val);
-    }
-
-    private boolean casHead(Node<E> cmp, Node<E> val) {
-        return UNSAFE.compareAndSwapObject(this, headOffset, cmp, val);
-    }
-
-    // Unsafe mechanics
-
-    private static final sun.misc.Unsafe UNSAFE;
-    private static final long headOffset;
-    private static final long tailOffset;
-    static {
-        try {
-            UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = ConcurrentLinkedQueue.class;
-            headOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("head"));
-            tailOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("tail"));
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ConcurrentMap.java b/ojluni/src/main/java/java/util/concurrent/ConcurrentMap.java
deleted file mode 100755
index 4434c05..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ConcurrentMap.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.Map;
-
-/**
- * A {@link java.util.Map} providing additional atomic
- * <tt>putIfAbsent</tt>, <tt>remove</tt>, and <tt>replace</tt> methods.
- *
- * <p>Memory consistency effects: As with other concurrent
- * collections, actions in a thread prior to placing an object into a
- * {@code ConcurrentMap} as a key or value
- * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
- * actions subsequent to the access or removal of that object from
- * the {@code ConcurrentMap} in another thread.
- *
- * <p>This interface is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @since 1.5
- * @author Doug Lea
- * @param <K> the type of keys maintained by this map
- * @param <V> the type of mapped values
- */
-public interface ConcurrentMap<K, V> extends Map<K, V> {
-    /**
-     * If the specified key is not already associated
-     * with a value, associate it with the given value.
-     * This is equivalent to
-     * <pre>
-     *   if (!map.containsKey(key))
-     *       return map.put(key, value);
-     *   else
-     *       return map.get(key);</pre>
-     * except that the action is performed atomically.
-     *
-     * @param key key with which the specified value is to be associated
-     * @param value value to be associated with the specified key
-     * @return the previous value associated with the specified key, or
-     *         <tt>null</tt> if there was no mapping for the key.
-     *         (A <tt>null</tt> return can also indicate that the map
-     *         previously associated <tt>null</tt> with the key,
-     *         if the implementation supports null values.)
-     * @throws UnsupportedOperationException if the <tt>put</tt> operation
-     *         is not supported by this map
-     * @throws ClassCastException if the class of the specified key or value
-     *         prevents it from being stored in this map
-     * @throws NullPointerException if the specified key or value is null,
-     *         and this map does not permit null keys or values
-     * @throws IllegalArgumentException if some property of the specified key
-     *         or value prevents it from being stored in this map
-     *
-     */
-    V putIfAbsent(K key, V value);
-
-    /**
-     * Removes the entry for a key only if currently mapped to a given value.
-     * This is equivalent to
-     * <pre>
-     *   if (map.containsKey(key) &amp;&amp; map.get(key).equals(value)) {
-     *       map.remove(key);
-     *       return true;
-     *   } else return false;</pre>
-     * except that the action is performed atomically.
-     *
-     * @param key key with which the specified value is associated
-     * @param value value expected to be associated with the specified key
-     * @return <tt>true</tt> if the value was removed
-     * @throws UnsupportedOperationException if the <tt>remove</tt> operation
-     *         is not supported by this map
-     * @throws ClassCastException if the key or value is of an inappropriate
-     *         type for this map
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>)
-     * @throws NullPointerException if the specified key or value is null,
-     *         and this map does not permit null keys or values
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>)
-     */
-    boolean remove(Object key, Object value);
-
-    /**
-     * Replaces the entry for a key only if currently mapped to a given value.
-     * This is equivalent to
-     * <pre>
-     *   if (map.containsKey(key) &amp;&amp; map.get(key).equals(oldValue)) {
-     *       map.put(key, newValue);
-     *       return true;
-     *   } else return false;</pre>
-     * except that the action is performed atomically.
-     *
-     * @param key key with which the specified value is associated
-     * @param oldValue value expected to be associated with the specified key
-     * @param newValue value to be associated with the specified key
-     * @return <tt>true</tt> if the value was replaced
-     * @throws UnsupportedOperationException if the <tt>put</tt> operation
-     *         is not supported by this map
-     * @throws ClassCastException if the class of a specified key or value
-     *         prevents it from being stored in this map
-     * @throws NullPointerException if a specified key or value is null,
-     *         and this map does not permit null keys or values
-     * @throws IllegalArgumentException if some property of a specified key
-     *         or value prevents it from being stored in this map
-     */
-    boolean replace(K key, V oldValue, V newValue);
-
-    /**
-     * Replaces the entry for a key only if currently mapped to some value.
-     * This is equivalent to
-     * <pre>
-     *   if (map.containsKey(key)) {
-     *       return map.put(key, value);
-     *   } else return null;</pre>
-     * except that the action is performed atomically.
-     *
-     * @param key key with which the specified value is associated
-     * @param value value to be associated with the specified key
-     * @return the previous value associated with the specified key, or
-     *         <tt>null</tt> if there was no mapping for the key.
-     *         (A <tt>null</tt> return can also indicate that the map
-     *         previously associated <tt>null</tt> with the key,
-     *         if the implementation supports null values.)
-     * @throws UnsupportedOperationException if the <tt>put</tt> operation
-     *         is not supported by this map
-     * @throws ClassCastException if the class of the specified key or value
-     *         prevents it from being stored in this map
-     * @throws NullPointerException if the specified key or value is null,
-     *         and this map does not permit null keys or values
-     * @throws IllegalArgumentException if some property of the specified key
-     *         or value prevents it from being stored in this map
-     */
-    V replace(K key, V value);
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ConcurrentNavigableMap.java b/ojluni/src/main/java/java/util/concurrent/ConcurrentNavigableMap.java
deleted file mode 100755
index df5bb31..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ConcurrentNavigableMap.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.*;
-
-/**
- * A {@link ConcurrentMap} supporting {@link NavigableMap} operations,
- * and recursively so for its navigable sub-maps.
- *
- * <p>This interface is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @author Doug Lea
- * @param <K> the type of keys maintained by this map
- * @param <V> the type of mapped values
- * @since 1.6
- */
-public interface ConcurrentNavigableMap<K,V>
-    extends ConcurrentMap<K,V>, NavigableMap<K,V>
-{
-    /**
-     * @throws ClassCastException       {@inheritDoc}
-     * @throws NullPointerException     {@inheritDoc}
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    ConcurrentNavigableMap<K,V> subMap(K fromKey, boolean fromInclusive,
-                                       K toKey,   boolean toInclusive);
-
-    /**
-     * @throws ClassCastException       {@inheritDoc}
-     * @throws NullPointerException     {@inheritDoc}
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    ConcurrentNavigableMap<K,V> headMap(K toKey, boolean inclusive);
-
-
-    /**
-     * @throws ClassCastException       {@inheritDoc}
-     * @throws NullPointerException     {@inheritDoc}
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    ConcurrentNavigableMap<K,V> tailMap(K fromKey, boolean inclusive);
-
-    /**
-     * @throws ClassCastException       {@inheritDoc}
-     * @throws NullPointerException     {@inheritDoc}
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    ConcurrentNavigableMap<K,V> subMap(K fromKey, K toKey);
-
-    /**
-     * @throws ClassCastException       {@inheritDoc}
-     * @throws NullPointerException     {@inheritDoc}
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    ConcurrentNavigableMap<K,V> headMap(K toKey);
-
-    /**
-     * @throws ClassCastException       {@inheritDoc}
-     * @throws NullPointerException     {@inheritDoc}
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    ConcurrentNavigableMap<K,V> tailMap(K fromKey);
-
-    /**
-     * Returns a reverse order view of the mappings contained in this map.
-     * The descending map is backed by this map, so changes to the map are
-     * reflected in the descending map, and vice-versa.
-     *
-     * <p>The returned map has an ordering equivalent to
-     * <tt>{@link Collections#reverseOrder(Comparator) Collections.reverseOrder}(comparator())</tt>.
-     * The expression {@code m.descendingMap().descendingMap()} returns a
-     * view of {@code m} essentially equivalent to {@code m}.
-     *
-     * @return a reverse order view of this map
-     */
-    ConcurrentNavigableMap<K,V> descendingMap();
-
-    /**
-     * Returns a {@link NavigableSet} view of the keys contained in this map.
-     * The set's iterator returns the keys in ascending order.
-     * The set is backed by the map, so changes to the map are
-     * reflected in the set, and vice-versa.  The set supports element
-     * removal, which removes the corresponding mapping from the map,
-     * via the {@code Iterator.remove}, {@code Set.remove},
-     * {@code removeAll}, {@code retainAll}, and {@code clear}
-     * operations.  It does not support the {@code add} or {@code addAll}
-     * operations.
-     *
-     * <p>The view's {@code iterator} is a "weakly consistent" iterator
-     * that will never throw {@link ConcurrentModificationException},
-     * and guarantees to traverse elements as they existed upon
-     * construction of the iterator, and may (but is not guaranteed to)
-     * reflect any modifications subsequent to construction.
-     *
-     * @return a navigable set view of the keys in this map
-     */
-    public NavigableSet<K> navigableKeySet();
-
-    /**
-     * Returns a {@link NavigableSet} view of the keys contained in this map.
-     * The set's iterator returns the keys in ascending order.
-     * The set is backed by the map, so changes to the map are
-     * reflected in the set, and vice-versa.  The set supports element
-     * removal, which removes the corresponding mapping from the map,
-     * via the {@code Iterator.remove}, {@code Set.remove},
-     * {@code removeAll}, {@code retainAll}, and {@code clear}
-     * operations.  It does not support the {@code add} or {@code addAll}
-     * operations.
-     *
-     * <p>The view's {@code iterator} is a "weakly consistent" iterator
-     * that will never throw {@link ConcurrentModificationException},
-     * and guarantees to traverse elements as they existed upon
-     * construction of the iterator, and may (but is not guaranteed to)
-     * reflect any modifications subsequent to construction.
-     *
-     * <p>This method is equivalent to method {@code navigableKeySet}.
-     *
-     * @return a navigable set view of the keys in this map
-     */
-    NavigableSet<K> keySet();
-
-    /**
-     * Returns a reverse order {@link NavigableSet} view of the keys contained in this map.
-     * The set's iterator returns the keys in descending order.
-     * The set is backed by the map, so changes to the map are
-     * reflected in the set, and vice-versa.  The set supports element
-     * removal, which removes the corresponding mapping from the map,
-     * via the {@code Iterator.remove}, {@code Set.remove},
-     * {@code removeAll}, {@code retainAll}, and {@code clear}
-     * operations.  It does not support the {@code add} or {@code addAll}
-     * operations.
-     *
-     * <p>The view's {@code iterator} is a "weakly consistent" iterator
-     * that will never throw {@link ConcurrentModificationException},
-     * and guarantees to traverse elements as they existed upon
-     * construction of the iterator, and may (but is not guaranteed to)
-     * reflect any modifications subsequent to construction.
-     *
-     * @return a reverse order navigable set view of the keys in this map
-     */
-    public NavigableSet<K> descendingKeySet();
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ConcurrentSkipListMap.java b/ojluni/src/main/java/java/util/concurrent/ConcurrentSkipListMap.java
deleted file mode 100755
index 8d23964..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ConcurrentSkipListMap.java
+++ /dev/null
@@ -1,3119 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.*;
-import java.util.concurrent.atomic.*;
-
-/**
- * A scalable concurrent {@link ConcurrentNavigableMap} implementation.
- * The map is sorted according to the {@linkplain Comparable natural
- * ordering} of its keys, or by a {@link Comparator} provided at map
- * creation time, depending on which constructor is used.
- *
- * <p>This class implements a concurrent variant of <a
- * href="http://en.wikipedia.org/wiki/Skip_list" target="_top">SkipLists</a>
- * providing expected average <i>log(n)</i> time cost for the
- * <tt>containsKey</tt>, <tt>get</tt>, <tt>put</tt> and
- * <tt>remove</tt> operations and their variants.  Insertion, removal,
- * update, and access operations safely execute concurrently by
- * multiple threads.  Iterators are <i>weakly consistent</i>, returning
- * elements reflecting the state of the map at some point at or since
- * the creation of the iterator.  They do <em>not</em> throw {@link
- * ConcurrentModificationException}, and may proceed concurrently with
- * other operations. Ascending key ordered views and their iterators
- * are faster than descending ones.
- *
- * <p>All <tt>Map.Entry</tt> pairs returned by methods in this class
- * and its views represent snapshots of mappings at the time they were
- * produced. They do <em>not</em> support the <tt>Entry.setValue</tt>
- * method. (Note however that it is possible to change mappings in the
- * associated map using <tt>put</tt>, <tt>putIfAbsent</tt>, or
- * <tt>replace</tt>, depending on exactly which effect you need.)
- *
- * <p>Beware that, unlike in most collections, the <tt>size</tt>
- * method is <em>not</em> a constant-time operation. Because of the
- * asynchronous nature of these maps, determining the current number
- * of elements requires a traversal of the elements, and so may report
- * inaccurate results if this collection is modified during traversal.
- * Additionally, the bulk operations <tt>putAll</tt>, <tt>equals</tt>,
- * <tt>toArray</tt>, <tt>containsValue</tt>, and <tt>clear</tt> are
- * <em>not</em> guaranteed to be performed atomically. For example, an
- * iterator operating concurrently with a <tt>putAll</tt> operation
- * might view only some of the added elements.
- *
- * <p>This class and its views and iterators implement all of the
- * <em>optional</em> methods of the {@link Map} and {@link Iterator}
- * interfaces. Like most other concurrent collections, this class does
- * <em>not</em> permit the use of <tt>null</tt> keys or values because some
- * null return values cannot be reliably distinguished from the absence of
- * elements.
- *
- * <p>This class is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @author Doug Lea
- * @param <K> the type of keys maintained by this map
- * @param <V> the type of mapped values
- * @since 1.6
- */
-public class ConcurrentSkipListMap<K,V> extends AbstractMap<K,V>
-    implements ConcurrentNavigableMap<K,V>,
-               Cloneable,
-               java.io.Serializable {
-    /*
-     * This class implements a tree-like two-dimensionally linked skip
-     * list in which the index levels are represented in separate
-     * nodes from the base nodes holding data.  There are two reasons
-     * for taking this approach instead of the usual array-based
-     * structure: 1) Array based implementations seem to encounter
-     * more complexity and overhead 2) We can use cheaper algorithms
-     * for the heavily-traversed index lists than can be used for the
-     * base lists.  Here's a picture of some of the basics for a
-     * possible list with 2 levels of index:
-     *
-     * Head nodes          Index nodes
-     * +-+    right        +-+                      +-+
-     * |2|---------------->| |--------------------->| |->null
-     * +-+                 +-+                      +-+
-     *  | down              |                        |
-     *  v                   v                        v
-     * +-+            +-+  +-+       +-+            +-+       +-+
-     * |1|----------->| |->| |------>| |----------->| |------>| |->null
-     * +-+            +-+  +-+       +-+            +-+       +-+
-     *  v              |    |         |              |         |
-     * Nodes  next     v    v         v              v         v
-     * +-+  +-+  +-+  +-+  +-+  +-+  +-+  +-+  +-+  +-+  +-+  +-+
-     * | |->|A|->|B|->|C|->|D|->|E|->|F|->|G|->|H|->|I|->|J|->|K|->null
-     * +-+  +-+  +-+  +-+  +-+  +-+  +-+  +-+  +-+  +-+  +-+  +-+
-     *
-     * The base lists use a variant of the HM linked ordered set
-     * algorithm. See Tim Harris, "A pragmatic implementation of
-     * non-blocking linked lists"
-     * http://www.cl.cam.ac.uk/~tlh20/publications.html and Maged
-     * Michael "High Performance Dynamic Lock-Free Hash Tables and
-     * List-Based Sets"
-     * http://www.research.ibm.com/people/m/michael/pubs.htm.  The
-     * basic idea in these lists is to mark the "next" pointers of
-     * deleted nodes when deleting to avoid conflicts with concurrent
-     * insertions, and when traversing to keep track of triples
-     * (predecessor, node, successor) in order to detect when and how
-     * to unlink these deleted nodes.
-     *
-     * Rather than using mark-bits to mark list deletions (which can
-     * be slow and space-intensive using AtomicMarkedReference), nodes
-     * use direct CAS'able next pointers.  On deletion, instead of
-     * marking a pointer, they splice in another node that can be
-     * thought of as standing for a marked pointer (indicating this by
-     * using otherwise impossible field values).  Using plain nodes
-     * acts roughly like "boxed" implementations of marked pointers,
-     * but uses new nodes only when nodes are deleted, not for every
-     * link.  This requires less space and supports faster
-     * traversal. Even if marked references were better supported by
-     * JVMs, traversal using this technique might still be faster
-     * because any search need only read ahead one more node than
-     * otherwise required (to check for trailing marker) rather than
-     * unmasking mark bits or whatever on each read.
-     *
-     * This approach maintains the essential property needed in the HM
-     * algorithm of changing the next-pointer of a deleted node so
-     * that any other CAS of it will fail, but implements the idea by
-     * changing the pointer to point to a different node, not by
-     * marking it.  While it would be possible to further squeeze
-     * space by defining marker nodes not to have key/value fields, it
-     * isn't worth the extra type-testing overhead.  The deletion
-     * markers are rarely encountered during traversal and are
-     * normally quickly garbage collected. (Note that this technique
-     * would not work well in systems without garbage collection.)
-     *
-     * In addition to using deletion markers, the lists also use
-     * nullness of value fields to indicate deletion, in a style
-     * similar to typical lazy-deletion schemes.  If a node's value is
-     * null, then it is considered logically deleted and ignored even
-     * though it is still reachable. This maintains proper control of
-     * concurrent replace vs delete operations -- an attempted replace
-     * must fail if a delete beat it by nulling field, and a delete
-     * must return the last non-null value held in the field. (Note:
-     * Null, rather than some special marker, is used for value fields
-     * here because it just so happens to mesh with the Map API
-     * requirement that method get returns null if there is no
-     * mapping, which allows nodes to remain concurrently readable
-     * even when deleted. Using any other marker value here would be
-     * messy at best.)
-     *
-     * Here's the sequence of events for a deletion of node n with
-     * predecessor b and successor f, initially:
-     *
-     *        +------+       +------+      +------+
-     *   ...  |   b  |------>|   n  |----->|   f  | ...
-     *        +------+       +------+      +------+
-     *
-     * 1. CAS n's value field from non-null to null.
-     *    From this point on, no public operations encountering
-     *    the node consider this mapping to exist. However, other
-     *    ongoing insertions and deletions might still modify
-     *    n's next pointer.
-     *
-     * 2. CAS n's next pointer to point to a new marker node.
-     *    From this point on, no other nodes can be appended to n.
-     *    which avoids deletion errors in CAS-based linked lists.
-     *
-     *        +------+       +------+      +------+       +------+
-     *   ...  |   b  |------>|   n  |----->|marker|------>|   f  | ...
-     *        +------+       +------+      +------+       +------+
-     *
-     * 3. CAS b's next pointer over both n and its marker.
-     *    From this point on, no new traversals will encounter n,
-     *    and it can eventually be GCed.
-     *        +------+                                    +------+
-     *   ...  |   b  |----------------------------------->|   f  | ...
-     *        +------+                                    +------+
-     *
-     * A failure at step 1 leads to simple retry due to a lost race
-     * with another operation. Steps 2-3 can fail because some other
-     * thread noticed during a traversal a node with null value and
-     * helped out by marking and/or unlinking.  This helping-out
-     * ensures that no thread can become stuck waiting for progress of
-     * the deleting thread.  The use of marker nodes slightly
-     * complicates helping-out code because traversals must track
-     * consistent reads of up to four nodes (b, n, marker, f), not
-     * just (b, n, f), although the next field of a marker is
-     * immutable, and once a next field is CAS'ed to point to a
-     * marker, it never again changes, so this requires less care.
-     *
-     * Skip lists add indexing to this scheme, so that the base-level
-     * traversals start close to the locations being found, inserted
-     * or deleted -- usually base level traversals only traverse a few
-     * nodes. This doesn't change the basic algorithm except for the
-     * need to make sure base traversals start at predecessors (here,
-     * b) that are not (structurally) deleted, otherwise retrying
-     * after processing the deletion.
-     *
-     * Index levels are maintained as lists with volatile next fields,
-     * using CAS to link and unlink.  Races are allowed in index-list
-     * operations that can (rarely) fail to link in a new index node
-     * or delete one. (We can't do this of course for data nodes.)
-     * However, even when this happens, the index lists remain sorted,
-     * so correctly serve as indices.  This can impact performance,
-     * but since skip lists are probabilistic anyway, the net result
-     * is that under contention, the effective "p" value may be lower
-     * than its nominal value. And race windows are kept small enough
-     * that in practice these failures are rare, even under a lot of
-     * contention.
-     *
-     * The fact that retries (for both base and index lists) are
-     * relatively cheap due to indexing allows some minor
-     * simplifications of retry logic. Traversal restarts are
-     * performed after most "helping-out" CASes. This isn't always
-     * strictly necessary, but the implicit backoffs tend to help
-     * reduce other downstream failed CAS's enough to outweigh restart
-     * cost.  This worsens the worst case, but seems to improve even
-     * highly contended cases.
-     *
-     * Unlike most skip-list implementations, index insertion and
-     * deletion here require a separate traversal pass occuring after
-     * the base-level action, to add or remove index nodes.  This adds
-     * to single-threaded overhead, but improves contended
-     * multithreaded performance by narrowing interference windows,
-     * and allows deletion to ensure that all index nodes will be made
-     * unreachable upon return from a public remove operation, thus
-     * avoiding unwanted garbage retention. This is more important
-     * here than in some other data structures because we cannot null
-     * out node fields referencing user keys since they might still be
-     * read by other ongoing traversals.
-     *
-     * Indexing uses skip list parameters that maintain good search
-     * performance while using sparser-than-usual indices: The
-     * hardwired parameters k=1, p=0.5 (see method randomLevel) mean
-     * that about one-quarter of the nodes have indices. Of those that
-     * do, half have one level, a quarter have two, and so on (see
-     * Pugh's Skip List Cookbook, sec 3.4).  The expected total space
-     * requirement for a map is slightly less than for the current
-     * implementation of java.util.TreeMap.
-     *
-     * Changing the level of the index (i.e, the height of the
-     * tree-like structure) also uses CAS. The head index has initial
-     * level/height of one. Creation of an index with height greater
-     * than the current level adds a level to the head index by
-     * CAS'ing on a new top-most head. To maintain good performance
-     * after a lot of removals, deletion methods heuristically try to
-     * reduce the height if the topmost levels appear to be empty.
-     * This may encounter races in which it possible (but rare) to
-     * reduce and "lose" a level just as it is about to contain an
-     * index (that will then never be encountered). This does no
-     * structural harm, and in practice appears to be a better option
-     * than allowing unrestrained growth of levels.
-     *
-     * The code for all this is more verbose than you'd like. Most
-     * operations entail locating an element (or position to insert an
-     * element). The code to do this can't be nicely factored out
-     * because subsequent uses require a snapshot of predecessor
-     * and/or successor and/or value fields which can't be returned
-     * all at once, at least not without creating yet another object
-     * to hold them -- creating such little objects is an especially
-     * bad idea for basic internal search operations because it adds
-     * to GC overhead.  (This is one of the few times I've wished Java
-     * had macros.) Instead, some traversal code is interleaved within
-     * insertion and removal operations.  The control logic to handle
-     * all the retry conditions is sometimes twisty. Most search is
-     * broken into 2 parts. findPredecessor() searches index nodes
-     * only, returning a base-level predecessor of the key. findNode()
-     * finishes out the base-level search. Even with this factoring,
-     * there is a fair amount of near-duplication of code to handle
-     * variants.
-     *
-     * For explanation of algorithms sharing at least a couple of
-     * features with this one, see Mikhail Fomitchev's thesis
-     * (http://www.cs.yorku.ca/~mikhail/), Keir Fraser's thesis
-     * (http://www.cl.cam.ac.uk/users/kaf24/), and Hakan Sundell's
-     * thesis (http://www.cs.chalmers.se/~phs/).
-     *
-     * Given the use of tree-like index nodes, you might wonder why
-     * this doesn't use some kind of search tree instead, which would
-     * support somewhat faster search operations. The reason is that
-     * there are no known efficient lock-free insertion and deletion
-     * algorithms for search trees. The immutability of the "down"
-     * links of index nodes (as opposed to mutable "left" fields in
-     * true trees) makes this tractable using only CAS operations.
-     *
-     * Notation guide for local variables
-     * Node:         b, n, f    for  predecessor, node, successor
-     * Index:        q, r, d    for index node, right, down.
-     *               t          for another index node
-     * Head:         h
-     * Levels:       j
-     * Keys:         k, key
-     * Values:       v, value
-     * Comparisons:  c
-     */
-
-    private static final long serialVersionUID = -8627078645895051609L;
-
-    /**
-     * Generates the initial random seed for the cheaper per-instance
-     * random number generators used in randomLevel.
-     */
-    private static final Random seedGenerator = new Random();
-
-    /**
-     * Special value used to identify base-level header
-     */
-    private static final Object BASE_HEADER = new Object();
-
-    /**
-     * The topmost head index of the skiplist.
-     */
-    private transient volatile HeadIndex<K,V> head;
-
-    /**
-     * The comparator used to maintain order in this map, or null
-     * if using natural ordering.
-     * @serial
-     */
-    private final Comparator<? super K> comparator;
-
-    /**
-     * Seed for simple random number generator.  Not volatile since it
-     * doesn't matter too much if different threads don't see updates.
-     */
-    private transient int randomSeed;
-
-    /** Lazily initialized key set */
-    private transient KeySet keySet;
-    /** Lazily initialized entry set */
-    private transient EntrySet entrySet;
-    /** Lazily initialized values collection */
-    private transient Values values;
-    /** Lazily initialized descending key set */
-    private transient ConcurrentNavigableMap<K,V> descendingMap;
-
-    /**
-     * Initializes or resets state. Needed by constructors, clone,
-     * clear, readObject. and ConcurrentSkipListSet.clone.
-     * (Note that comparator must be separately initialized.)
-     */
-    final void initialize() {
-        keySet = null;
-        entrySet = null;
-        values = null;
-        descendingMap = null;
-        randomSeed = seedGenerator.nextInt() | 0x0100; // ensure nonzero
-        head = new HeadIndex<K,V>(new Node<K,V>(null, BASE_HEADER, null),
-                                  null, null, 1);
-    }
-
-    /**
-     * compareAndSet head node
-     */
-    private boolean casHead(HeadIndex<K,V> cmp, HeadIndex<K,V> val) {
-        return UNSAFE.compareAndSwapObject(this, headOffset, cmp, val);
-    }
-
-    /* ---------------- Nodes -------------- */
-
-    /**
-     * Nodes hold keys and values, and are singly linked in sorted
-     * order, possibly with some intervening marker nodes. The list is
-     * headed by a dummy node accessible as head.node. The value field
-     * is declared only as Object because it takes special non-V
-     * values for marker and header nodes.
-     */
-    static final class Node<K,V> {
-        final K key;
-        volatile Object value;
-        volatile Node<K,V> next;
-
-        /**
-         * Creates a new regular node.
-         */
-        Node(K key, Object value, Node<K,V> next) {
-            this.key = key;
-            this.value = value;
-            this.next = next;
-        }
-
-        /**
-         * Creates a new marker node. A marker is distinguished by
-         * having its value field point to itself.  Marker nodes also
-         * have null keys, a fact that is exploited in a few places,
-         * but this doesn't distinguish markers from the base-level
-         * header node (head.node), which also has a null key.
-         */
-        Node(Node<K,V> next) {
-            this.key = null;
-            this.value = this;
-            this.next = next;
-        }
-
-        /**
-         * compareAndSet value field
-         */
-        boolean casValue(Object cmp, Object val) {
-            return UNSAFE.compareAndSwapObject(this, valueOffset, cmp, val);
-        }
-
-        /**
-         * compareAndSet next field
-         */
-        boolean casNext(Node<K,V> cmp, Node<K,V> val) {
-            return UNSAFE.compareAndSwapObject(this, nextOffset, cmp, val);
-        }
-
-        /**
-         * Returns true if this node is a marker. This method isn't
-         * actually called in any current code checking for markers
-         * because callers will have already read value field and need
-         * to use that read (not another done here) and so directly
-         * test if value points to node.
-         * @param n a possibly null reference to a node
-         * @return true if this node is a marker node
-         */
-        boolean isMarker() {
-            return value == this;
-        }
-
-        /**
-         * Returns true if this node is the header of base-level list.
-         * @return true if this node is header node
-         */
-        boolean isBaseHeader() {
-            return value == BASE_HEADER;
-        }
-
-        /**
-         * Tries to append a deletion marker to this node.
-         * @param f the assumed current successor of this node
-         * @return true if successful
-         */
-        boolean appendMarker(Node<K,V> f) {
-            return casNext(f, new Node<K,V>(f));
-        }
-
-        /**
-         * Helps out a deletion by appending marker or unlinking from
-         * predecessor. This is called during traversals when value
-         * field seen to be null.
-         * @param b predecessor
-         * @param f successor
-         */
-        void helpDelete(Node<K,V> b, Node<K,V> f) {
-            /*
-             * Rechecking links and then doing only one of the
-             * help-out stages per call tends to minimize CAS
-             * interference among helping threads.
-             */
-            if (f == next && this == b.next) {
-                if (f == null || f.value != f) // not already marked
-                    appendMarker(f);
-                else
-                    b.casNext(this, f.next);
-            }
-        }
-
-        /**
-         * Returns value if this node contains a valid key-value pair,
-         * else null.
-         * @return this node's value if it isn't a marker or header or
-         * is deleted, else null.
-         */
-        V getValidValue() {
-            Object v = value;
-            if (v == this || v == BASE_HEADER)
-                return null;
-            return (V)v;
-        }
-
-        /**
-         * Creates and returns a new SimpleImmutableEntry holding current
-         * mapping if this node holds a valid value, else null.
-         * @return new entry or null
-         */
-        AbstractMap.SimpleImmutableEntry<K,V> createSnapshot() {
-            V v = getValidValue();
-            if (v == null)
-                return null;
-            return new AbstractMap.SimpleImmutableEntry<K,V>(key, v);
-        }
-
-        // UNSAFE mechanics
-
-        private static final sun.misc.Unsafe UNSAFE;
-        private static final long valueOffset;
-        private static final long nextOffset;
-
-        static {
-            try {
-                UNSAFE = sun.misc.Unsafe.getUnsafe();
-                Class k = Node.class;
-                valueOffset = UNSAFE.objectFieldOffset
-                    (k.getDeclaredField("value"));
-                nextOffset = UNSAFE.objectFieldOffset
-                    (k.getDeclaredField("next"));
-            } catch (Exception e) {
-                throw new Error(e);
-            }
-        }
-    }
-
-    /* ---------------- Indexing -------------- */
-
-    /**
-     * Index nodes represent the levels of the skip list.  Note that
-     * even though both Nodes and Indexes have forward-pointing
-     * fields, they have different types and are handled in different
-     * ways, that can't nicely be captured by placing field in a
-     * shared abstract class.
-     */
-    static class Index<K,V> {
-        final Node<K,V> node;
-        final Index<K,V> down;
-        volatile Index<K,V> right;
-
-        /**
-         * Creates index node with given values.
-         */
-        Index(Node<K,V> node, Index<K,V> down, Index<K,V> right) {
-            this.node = node;
-            this.down = down;
-            this.right = right;
-        }
-
-        /**
-         * compareAndSet right field
-         */
-        final boolean casRight(Index<K,V> cmp, Index<K,V> val) {
-            return UNSAFE.compareAndSwapObject(this, rightOffset, cmp, val);
-        }
-
-        /**
-         * Returns true if the node this indexes has been deleted.
-         * @return true if indexed node is known to be deleted
-         */
-        final boolean indexesDeletedNode() {
-            return node.value == null;
-        }
-
-        /**
-         * Tries to CAS newSucc as successor.  To minimize races with
-         * unlink that may lose this index node, if the node being
-         * indexed is known to be deleted, it doesn't try to link in.
-         * @param succ the expected current successor
-         * @param newSucc the new successor
-         * @return true if successful
-         */
-        final boolean link(Index<K,V> succ, Index<K,V> newSucc) {
-            Node<K,V> n = node;
-            newSucc.right = succ;
-            return n.value != null && casRight(succ, newSucc);
-        }
-
-        /**
-         * Tries to CAS right field to skip over apparent successor
-         * succ.  Fails (forcing a retraversal by caller) if this node
-         * is known to be deleted.
-         * @param succ the expected current successor
-         * @return true if successful
-         */
-        final boolean unlink(Index<K,V> succ) {
-            return !indexesDeletedNode() && casRight(succ, succ.right);
-        }
-
-        // Unsafe mechanics
-        private static final sun.misc.Unsafe UNSAFE;
-        private static final long rightOffset;
-        static {
-            try {
-                UNSAFE = sun.misc.Unsafe.getUnsafe();
-                Class k = Index.class;
-                rightOffset = UNSAFE.objectFieldOffset
-                    (k.getDeclaredField("right"));
-            } catch (Exception e) {
-                throw new Error(e);
-            }
-        }
-    }
-
-    /* ---------------- Head nodes -------------- */
-
-    /**
-     * Nodes heading each level keep track of their level.
-     */
-    static final class HeadIndex<K,V> extends Index<K,V> {
-        final int level;
-        HeadIndex(Node<K,V> node, Index<K,V> down, Index<K,V> right, int level) {
-            super(node, down, right);
-            this.level = level;
-        }
-    }
-
-    /* ---------------- Comparison utilities -------------- */
-
-    /**
-     * Represents a key with a comparator as a Comparable.
-     *
-     * Because most sorted collections seem to use natural ordering on
-     * Comparables (Strings, Integers, etc), most internal methods are
-     * geared to use them. This is generally faster than checking
-     * per-comparison whether to use comparator or comparable because
-     * it doesn't require a (Comparable) cast for each comparison.
-     * (Optimizers can only sometimes remove such redundant checks
-     * themselves.) When Comparators are used,
-     * ComparableUsingComparators are created so that they act in the
-     * same way as natural orderings. This penalizes use of
-     * Comparators vs Comparables, which seems like the right
-     * tradeoff.
-     */
-    static final class ComparableUsingComparator<K> implements Comparable<K> {
-        final K actualKey;
-        final Comparator<? super K> cmp;
-        ComparableUsingComparator(K key, Comparator<? super K> cmp) {
-            this.actualKey = key;
-            this.cmp = cmp;
-        }
-        public int compareTo(K k2) {
-            return cmp.compare(actualKey, k2);
-        }
-    }
-
-    /**
-     * If using comparator, return a ComparableUsingComparator, else
-     * cast key as Comparable, which may cause ClassCastException,
-     * which is propagated back to caller.
-     */
-    private Comparable<? super K> comparable(Object key)
-            throws ClassCastException {
-        if (key == null)
-            throw new NullPointerException();
-        if (comparator != null)
-            return new ComparableUsingComparator<K>((K)key, comparator);
-        else
-            return (Comparable<? super K>)key;
-    }
-
-    /**
-     * Compares using comparator or natural ordering. Used when the
-     * ComparableUsingComparator approach doesn't apply.
-     */
-    int compare(K k1, K k2) throws ClassCastException {
-        Comparator<? super K> cmp = comparator;
-        if (cmp != null)
-            return cmp.compare(k1, k2);
-        else
-            return ((Comparable<? super K>)k1).compareTo(k2);
-    }
-
-    /**
-     * Returns true if given key greater than or equal to least and
-     * strictly less than fence, bypassing either test if least or
-     * fence are null. Needed mainly in submap operations.
-     */
-    boolean inHalfOpenRange(K key, K least, K fence) {
-        if (key == null)
-            throw new NullPointerException();
-        return ((least == null || compare(key, least) >= 0) &&
-                (fence == null || compare(key, fence) <  0));
-    }
-
-    /**
-     * Returns true if given key greater than or equal to least and less
-     * or equal to fence. Needed mainly in submap operations.
-     */
-    boolean inOpenRange(K key, K least, K fence) {
-        if (key == null)
-            throw new NullPointerException();
-        return ((least == null || compare(key, least) >= 0) &&
-                (fence == null || compare(key, fence) <= 0));
-    }
-
-    /* ---------------- Traversal -------------- */
-
-    /**
-     * Returns a base-level node with key strictly less than given key,
-     * or the base-level header if there is no such node.  Also
-     * unlinks indexes to deleted nodes found along the way.  Callers
-     * rely on this side-effect of clearing indices to deleted nodes.
-     * @param key the key
-     * @return a predecessor of key
-     */
-    private Node<K,V> findPredecessor(Comparable<? super K> key) {
-        if (key == null)
-            throw new NullPointerException(); // don't postpone errors
-        for (;;) {
-            Index<K,V> q = head;
-            Index<K,V> r = q.right;
-            for (;;) {
-                if (r != null) {
-                    Node<K,V> n = r.node;
-                    K k = n.key;
-                    if (n.value == null) {
-                        if (!q.unlink(r))
-                            break;           // restart
-                        r = q.right;         // reread r
-                        continue;
-                    }
-                    if (key.compareTo(k) > 0) {
-                        q = r;
-                        r = r.right;
-                        continue;
-                    }
-                }
-                Index<K,V> d = q.down;
-                if (d != null) {
-                    q = d;
-                    r = d.right;
-                } else
-                    return q.node;
-            }
-        }
-    }
-
-    /**
-     * Returns node holding key or null if no such, clearing out any
-     * deleted nodes seen along the way.  Repeatedly traverses at
-     * base-level looking for key starting at predecessor returned
-     * from findPredecessor, processing base-level deletions as
-     * encountered. Some callers rely on this side-effect of clearing
-     * deleted nodes.
-     *
-     * Restarts occur, at traversal step centered on node n, if:
-     *
-     *   (1) After reading n's next field, n is no longer assumed
-     *       predecessor b's current successor, which means that
-     *       we don't have a consistent 3-node snapshot and so cannot
-     *       unlink any subsequent deleted nodes encountered.
-     *
-     *   (2) n's value field is null, indicating n is deleted, in
-     *       which case we help out an ongoing structural deletion
-     *       before retrying.  Even though there are cases where such
-     *       unlinking doesn't require restart, they aren't sorted out
-     *       here because doing so would not usually outweigh cost of
-     *       restarting.
-     *
-     *   (3) n is a marker or n's predecessor's value field is null,
-     *       indicating (among other possibilities) that
-     *       findPredecessor returned a deleted node. We can't unlink
-     *       the node because we don't know its predecessor, so rely
-     *       on another call to findPredecessor to notice and return
-     *       some earlier predecessor, which it will do. This check is
-     *       only strictly needed at beginning of loop, (and the
-     *       b.value check isn't strictly needed at all) but is done
-     *       each iteration to help avoid contention with other
-     *       threads by callers that will fail to be able to change
-     *       links, and so will retry anyway.
-     *
-     * The traversal loops in doPut, doRemove, and findNear all
-     * include the same three kinds of checks. And specialized
-     * versions appear in findFirst, and findLast and their
-     * variants. They can't easily share code because each uses the
-     * reads of fields held in locals occurring in the orders they
-     * were performed.
-     *
-     * @param key the key
-     * @return node holding key, or null if no such
-     */
-    private Node<K,V> findNode(Comparable<? super K> key) {
-        for (;;) {
-            Node<K,V> b = findPredecessor(key);
-            Node<K,V> n = b.next;
-            for (;;) {
-                if (n == null)
-                    return null;
-                Node<K,V> f = n.next;
-                if (n != b.next)                // inconsistent read
-                    break;
-                Object v = n.value;
-                if (v == null) {                // n is deleted
-                    n.helpDelete(b, f);
-                    break;
-                }
-                if (v == n || b.value == null)  // b is deleted
-                    break;
-                int c = key.compareTo(n.key);
-                if (c == 0)
-                    return n;
-                if (c < 0)
-                    return null;
-                b = n;
-                n = f;
-            }
-        }
-    }
-
-    /**
-     * Gets value for key using findNode.
-     * @param okey the key
-     * @return the value, or null if absent
-     */
-    private V doGet(Object okey) {
-        Comparable<? super K> key = comparable(okey);
-        /*
-         * Loop needed here and elsewhere in case value field goes
-         * null just as it is about to be returned, in which case we
-         * lost a race with a deletion, so must retry.
-         */
-        for (;;) {
-            Node<K,V> n = findNode(key);
-            if (n == null)
-                return null;
-            Object v = n.value;
-            if (v != null)
-                return (V)v;
-        }
-    }
-
-    /* ---------------- Insertion -------------- */
-
-    /**
-     * Main insertion method.  Adds element if not present, or
-     * replaces value if present and onlyIfAbsent is false.
-     * @param kkey the key
-     * @param value  the value that must be associated with key
-     * @param onlyIfAbsent if should not insert if already present
-     * @return the old value, or null if newly inserted
-     */
-    private V doPut(K kkey, V value, boolean onlyIfAbsent) {
-        Comparable<? super K> key = comparable(kkey);
-        for (;;) {
-            Node<K,V> b = findPredecessor(key);
-            Node<K,V> n = b.next;
-            for (;;) {
-                if (n != null) {
-                    Node<K,V> f = n.next;
-                    if (n != b.next)               // inconsistent read
-                        break;
-                    Object v = n.value;
-                    if (v == null) {               // n is deleted
-                        n.helpDelete(b, f);
-                        break;
-                    }
-                    if (v == n || b.value == null) // b is deleted
-                        break;
-                    int c = key.compareTo(n.key);
-                    if (c > 0) {
-                        b = n;
-                        n = f;
-                        continue;
-                    }
-                    if (c == 0) {
-                        if (onlyIfAbsent || n.casValue(v, value))
-                            return (V)v;
-                        else
-                            break; // restart if lost race to replace value
-                    }
-                    // else c < 0; fall through
-                }
-
-                Node<K,V> z = new Node<K,V>(kkey, value, n);
-                if (!b.casNext(n, z))
-                    break;         // restart if lost race to append to b
-                int level = randomLevel();
-                if (level > 0)
-                    insertIndex(z, level);
-                return null;
-            }
-        }
-    }
-
-    /**
-     * Returns a random level for inserting a new node.
-     * Hardwired to k=1, p=0.5, max 31 (see above and
-     * Pugh's "Skip List Cookbook", sec 3.4).
-     *
-     * This uses the simplest of the generators described in George
-     * Marsaglia's "Xorshift RNGs" paper.  This is not a high-quality
-     * generator but is acceptable here.
-     */
-    private int randomLevel() {
-        int x = randomSeed;
-        x ^= x << 13;
-        x ^= x >>> 17;
-        randomSeed = x ^= x << 5;
-        if ((x & 0x80000001) != 0) // test highest and lowest bits
-            return 0;
-        int level = 1;
-        while (((x >>>= 1) & 1) != 0) ++level;
-        return level;
-    }
-
-    /**
-     * Creates and adds index nodes for the given node.
-     * @param z the node
-     * @param level the level of the index
-     */
-    private void insertIndex(Node<K,V> z, int level) {
-        HeadIndex<K,V> h = head;
-        int max = h.level;
-
-        if (level <= max) {
-            Index<K,V> idx = null;
-            for (int i = 1; i <= level; ++i)
-                idx = new Index<K,V>(z, idx, null);
-            addIndex(idx, h, level);
-
-        } else { // Add a new level
-            /*
-             * To reduce interference by other threads checking for
-             * empty levels in tryReduceLevel, new levels are added
-             * with initialized right pointers. Which in turn requires
-             * keeping levels in an array to access them while
-             * creating new head index nodes from the opposite
-             * direction.
-             */
-            level = max + 1;
-            Index<K,V>[] idxs = (Index<K,V>[])new Index[level+1];
-            Index<K,V> idx = null;
-            for (int i = 1; i <= level; ++i)
-                idxs[i] = idx = new Index<K,V>(z, idx, null);
-
-            HeadIndex<K,V> oldh;
-            int k;
-            for (;;) {
-                oldh = head;
-                int oldLevel = oldh.level;
-                if (level <= oldLevel) { // lost race to add level
-                    k = level;
-                    break;
-                }
-                HeadIndex<K,V> newh = oldh;
-                Node<K,V> oldbase = oldh.node;
-                for (int j = oldLevel+1; j <= level; ++j)
-                    newh = new HeadIndex<K,V>(oldbase, newh, idxs[j], j);
-                if (casHead(oldh, newh)) {
-                    k = oldLevel;
-                    break;
-                }
-            }
-            addIndex(idxs[k], oldh, k);
-        }
-    }
-
-    /**
-     * Adds given index nodes from given level down to 1.
-     * @param idx the topmost index node being inserted
-     * @param h the value of head to use to insert. This must be
-     * snapshotted by callers to provide correct insertion level
-     * @param indexLevel the level of the index
-     */
-    private void addIndex(Index<K,V> idx, HeadIndex<K,V> h, int indexLevel) {
-        // Track next level to insert in case of retries
-        int insertionLevel = indexLevel;
-        Comparable<? super K> key = comparable(idx.node.key);
-        if (key == null) throw new NullPointerException();
-
-        // Similar to findPredecessor, but adding index nodes along
-        // path to key.
-        for (;;) {
-            int j = h.level;
-            Index<K,V> q = h;
-            Index<K,V> r = q.right;
-            Index<K,V> t = idx;
-            for (;;) {
-                if (r != null) {
-                    Node<K,V> n = r.node;
-                    // compare before deletion check avoids needing recheck
-                    int c = key.compareTo(n.key);
-                    if (n.value == null) {
-                        if (!q.unlink(r))
-                            break;
-                        r = q.right;
-                        continue;
-                    }
-                    if (c > 0) {
-                        q = r;
-                        r = r.right;
-                        continue;
-                    }
-                }
-
-                if (j == insertionLevel) {
-                    // Don't insert index if node already deleted
-                    if (t.indexesDeletedNode()) {
-                        findNode(key); // cleans up
-                        return;
-                    }
-                    if (!q.link(r, t))
-                        break; // restart
-                    if (--insertionLevel == 0) {
-                        // need final deletion check before return
-                        if (t.indexesDeletedNode())
-                            findNode(key);
-                        return;
-                    }
-                }
-
-                if (--j >= insertionLevel && j < indexLevel)
-                    t = t.down;
-                q = q.down;
-                r = q.right;
-            }
-        }
-    }
-
-    /* ---------------- Deletion -------------- */
-
-    /**
-     * Main deletion method. Locates node, nulls value, appends a
-     * deletion marker, unlinks predecessor, removes associated index
-     * nodes, and possibly reduces head index level.
-     *
-     * Index nodes are cleared out simply by calling findPredecessor.
-     * which unlinks indexes to deleted nodes found along path to key,
-     * which will include the indexes to this node.  This is done
-     * unconditionally. We can't check beforehand whether there are
-     * index nodes because it might be the case that some or all
-     * indexes hadn't been inserted yet for this node during initial
-     * search for it, and we'd like to ensure lack of garbage
-     * retention, so must call to be sure.
-     *
-     * @param okey the key
-     * @param value if non-null, the value that must be
-     * associated with key
-     * @return the node, or null if not found
-     */
-    final V doRemove(Object okey, Object value) {
-        Comparable<? super K> key = comparable(okey);
-        for (;;) {
-            Node<K,V> b = findPredecessor(key);
-            Node<K,V> n = b.next;
-            for (;;) {
-                if (n == null)
-                    return null;
-                Node<K,V> f = n.next;
-                if (n != b.next)                    // inconsistent read
-                    break;
-                Object v = n.value;
-                if (v == null) {                    // n is deleted
-                    n.helpDelete(b, f);
-                    break;
-                }
-                if (v == n || b.value == null)      // b is deleted
-                    break;
-                int c = key.compareTo(n.key);
-                if (c < 0)
-                    return null;
-                if (c > 0) {
-                    b = n;
-                    n = f;
-                    continue;
-                }
-                if (value != null && !value.equals(v))
-                    return null;
-                if (!n.casValue(v, null))
-                    break;
-                if (!n.appendMarker(f) || !b.casNext(n, f))
-                    findNode(key);                  // Retry via findNode
-                else {
-                    findPredecessor(key);           // Clean index
-                    if (head.right == null)
-                        tryReduceLevel();
-                }
-                return (V)v;
-            }
-        }
-    }
-
-    /**
-     * Possibly reduce head level if it has no nodes.  This method can
-     * (rarely) make mistakes, in which case levels can disappear even
-     * though they are about to contain index nodes. This impacts
-     * performance, not correctness.  To minimize mistakes as well as
-     * to reduce hysteresis, the level is reduced by one only if the
-     * topmost three levels look empty. Also, if the removed level
-     * looks non-empty after CAS, we try to change it back quick
-     * before anyone notices our mistake! (This trick works pretty
-     * well because this method will practically never make mistakes
-     * unless current thread stalls immediately before first CAS, in
-     * which case it is very unlikely to stall again immediately
-     * afterwards, so will recover.)
-     *
-     * We put up with all this rather than just let levels grow
-     * because otherwise, even a small map that has undergone a large
-     * number of insertions and removals will have a lot of levels,
-     * slowing down access more than would an occasional unwanted
-     * reduction.
-     */
-    private void tryReduceLevel() {
-        HeadIndex<K,V> h = head;
-        HeadIndex<K,V> d;
-        HeadIndex<K,V> e;
-        if (h.level > 3 &&
-            (d = (HeadIndex<K,V>)h.down) != null &&
-            (e = (HeadIndex<K,V>)d.down) != null &&
-            e.right == null &&
-            d.right == null &&
-            h.right == null &&
-            casHead(h, d) && // try to set
-            h.right != null) // recheck
-            casHead(d, h);   // try to backout
-    }
-
-    /* ---------------- Finding and removing first element -------------- */
-
-    /**
-     * Specialized variant of findNode to get first valid node.
-     * @return first node or null if empty
-     */
-    Node<K,V> findFirst() {
-        for (;;) {
-            Node<K,V> b = head.node;
-            Node<K,V> n = b.next;
-            if (n == null)
-                return null;
-            if (n.value != null)
-                return n;
-            n.helpDelete(b, n.next);
-        }
-    }
-
-    /**
-     * Removes first entry; returns its snapshot.
-     * @return null if empty, else snapshot of first entry
-     */
-    Map.Entry<K,V> doRemoveFirstEntry() {
-        for (;;) {
-            Node<K,V> b = head.node;
-            Node<K,V> n = b.next;
-            if (n == null)
-                return null;
-            Node<K,V> f = n.next;
-            if (n != b.next)
-                continue;
-            Object v = n.value;
-            if (v == null) {
-                n.helpDelete(b, f);
-                continue;
-            }
-            if (!n.casValue(v, null))
-                continue;
-            if (!n.appendMarker(f) || !b.casNext(n, f))
-                findFirst(); // retry
-            clearIndexToFirst();
-            return new AbstractMap.SimpleImmutableEntry<K,V>(n.key, (V)v);
-        }
-    }
-
-    /**
-     * Clears out index nodes associated with deleted first entry.
-     */
-    private void clearIndexToFirst() {
-        for (;;) {
-            Index<K,V> q = head;
-            for (;;) {
-                Index<K,V> r = q.right;
-                if (r != null && r.indexesDeletedNode() && !q.unlink(r))
-                    break;
-                if ((q = q.down) == null) {
-                    if (head.right == null)
-                        tryReduceLevel();
-                    return;
-                }
-            }
-        }
-    }
-
-
-    /* ---------------- Finding and removing last element -------------- */
-
-    /**
-     * Specialized version of find to get last valid node.
-     * @return last node or null if empty
-     */
-    Node<K,V> findLast() {
-        /*
-         * findPredecessor can't be used to traverse index level
-         * because this doesn't use comparisons.  So traversals of
-         * both levels are folded together.
-         */
-        Index<K,V> q = head;
-        for (;;) {
-            Index<K,V> d, r;
-            if ((r = q.right) != null) {
-                if (r.indexesDeletedNode()) {
-                    q.unlink(r);
-                    q = head; // restart
-                }
-                else
-                    q = r;
-            } else if ((d = q.down) != null) {
-                q = d;
-            } else {
-                Node<K,V> b = q.node;
-                Node<K,V> n = b.next;
-                for (;;) {
-                    if (n == null)
-                        return b.isBaseHeader() ? null : b;
-                    Node<K,V> f = n.next;            // inconsistent read
-                    if (n != b.next)
-                        break;
-                    Object v = n.value;
-                    if (v == null) {                 // n is deleted
-                        n.helpDelete(b, f);
-                        break;
-                    }
-                    if (v == n || b.value == null)   // b is deleted
-                        break;
-                    b = n;
-                    n = f;
-                }
-                q = head; // restart
-            }
-        }
-    }
-
-    /**
-     * Specialized variant of findPredecessor to get predecessor of last
-     * valid node.  Needed when removing the last entry.  It is possible
-     * that all successors of returned node will have been deleted upon
-     * return, in which case this method can be retried.
-     * @return likely predecessor of last node
-     */
-    private Node<K,V> findPredecessorOfLast() {
-        for (;;) {
-            Index<K,V> q = head;
-            for (;;) {
-                Index<K,V> d, r;
-                if ((r = q.right) != null) {
-                    if (r.indexesDeletedNode()) {
-                        q.unlink(r);
-                        break;    // must restart
-                    }
-                    // proceed as far across as possible without overshooting
-                    if (r.node.next != null) {
-                        q = r;
-                        continue;
-                    }
-                }
-                if ((d = q.down) != null)
-                    q = d;
-                else
-                    return q.node;
-            }
-        }
-    }
-
-    /**
-     * Removes last entry; returns its snapshot.
-     * Specialized variant of doRemove.
-     * @return null if empty, else snapshot of last entry
-     */
-    Map.Entry<K,V> doRemoveLastEntry() {
-        for (;;) {
-            Node<K,V> b = findPredecessorOfLast();
-            Node<K,V> n = b.next;
-            if (n == null) {
-                if (b.isBaseHeader())               // empty
-                    return null;
-                else
-                    continue; // all b's successors are deleted; retry
-            }
-            for (;;) {
-                Node<K,V> f = n.next;
-                if (n != b.next)                    // inconsistent read
-                    break;
-                Object v = n.value;
-                if (v == null) {                    // n is deleted
-                    n.helpDelete(b, f);
-                    break;
-                }
-                if (v == n || b.value == null)      // b is deleted
-                    break;
-                if (f != null) {
-                    b = n;
-                    n = f;
-                    continue;
-                }
-                if (!n.casValue(v, null))
-                    break;
-                K key = n.key;
-                Comparable<? super K> ck = comparable(key);
-                if (!n.appendMarker(f) || !b.casNext(n, f))
-                    findNode(ck);                  // Retry via findNode
-                else {
-                    findPredecessor(ck);           // Clean index
-                    if (head.right == null)
-                        tryReduceLevel();
-                }
-                return new AbstractMap.SimpleImmutableEntry<K,V>(key, (V)v);
-            }
-        }
-    }
-
-    /* ---------------- Relational operations -------------- */
-
-    // Control values OR'ed as arguments to findNear
-
-    private static final int EQ = 1;
-    private static final int LT = 2;
-    private static final int GT = 0; // Actually checked as !LT
-
-    /**
-     * Utility for ceiling, floor, lower, higher methods.
-     * @param kkey the key
-     * @param rel the relation -- OR'ed combination of EQ, LT, GT
-     * @return nearest node fitting relation, or null if no such
-     */
-    Node<K,V> findNear(K kkey, int rel) {
-        Comparable<? super K> key = comparable(kkey);
-        for (;;) {
-            Node<K,V> b = findPredecessor(key);
-            Node<K,V> n = b.next;
-            for (;;) {
-                if (n == null)
-                    return ((rel & LT) == 0 || b.isBaseHeader()) ? null : b;
-                Node<K,V> f = n.next;
-                if (n != b.next)                  // inconsistent read
-                    break;
-                Object v = n.value;
-                if (v == null) {                  // n is deleted
-                    n.helpDelete(b, f);
-                    break;
-                }
-                if (v == n || b.value == null)    // b is deleted
-                    break;
-                int c = key.compareTo(n.key);
-                if ((c == 0 && (rel & EQ) != 0) ||
-                    (c <  0 && (rel & LT) == 0))
-                    return n;
-                if ( c <= 0 && (rel & LT) != 0)
-                    return b.isBaseHeader() ? null : b;
-                b = n;
-                n = f;
-            }
-        }
-    }
-
-    /**
-     * Returns SimpleImmutableEntry for results of findNear.
-     * @param key the key
-     * @param rel the relation -- OR'ed combination of EQ, LT, GT
-     * @return Entry fitting relation, or null if no such
-     */
-    AbstractMap.SimpleImmutableEntry<K,V> getNear(K key, int rel) {
-        for (;;) {
-            Node<K,V> n = findNear(key, rel);
-            if (n == null)
-                return null;
-            AbstractMap.SimpleImmutableEntry<K,V> e = n.createSnapshot();
-            if (e != null)
-                return e;
-        }
-    }
-
-
-    /* ---------------- Constructors -------------- */
-
-    /**
-     * Constructs a new, empty map, sorted according to the
-     * {@linkplain Comparable natural ordering} of the keys.
-     */
-    public ConcurrentSkipListMap() {
-        this.comparator = null;
-        initialize();
-    }
-
-    /**
-     * Constructs a new, empty map, sorted according to the specified
-     * comparator.
-     *
-     * @param comparator the comparator that will be used to order this map.
-     *        If <tt>null</tt>, the {@linkplain Comparable natural
-     *        ordering} of the keys will be used.
-     */
-    public ConcurrentSkipListMap(Comparator<? super K> comparator) {
-        this.comparator = comparator;
-        initialize();
-    }
-
-    /**
-     * Constructs a new map containing the same mappings as the given map,
-     * sorted according to the {@linkplain Comparable natural ordering} of
-     * the keys.
-     *
-     * @param  m the map whose mappings are to be placed in this map
-     * @throws ClassCastException if the keys in <tt>m</tt> are not
-     *         {@link Comparable}, or are not mutually comparable
-     * @throws NullPointerException if the specified map or any of its keys
-     *         or values are null
-     */
-    public ConcurrentSkipListMap(Map<? extends K, ? extends V> m) {
-        this.comparator = null;
-        initialize();
-        putAll(m);
-    }
-
-    /**
-     * Constructs a new map containing the same mappings and using the
-     * same ordering as the specified sorted map.
-     *
-     * @param m the sorted map whose mappings are to be placed in this
-     *        map, and whose comparator is to be used to sort this map
-     * @throws NullPointerException if the specified sorted map or any of
-     *         its keys or values are null
-     */
-    public ConcurrentSkipListMap(SortedMap<K, ? extends V> m) {
-        this.comparator = m.comparator();
-        initialize();
-        buildFromSorted(m);
-    }
-
-    /**
-     * Returns a shallow copy of this <tt>ConcurrentSkipListMap</tt>
-     * instance. (The keys and values themselves are not cloned.)
-     *
-     * @return a shallow copy of this map
-     */
-    public ConcurrentSkipListMap<K,V> clone() {
-        ConcurrentSkipListMap<K,V> clone = null;
-        try {
-            clone = (ConcurrentSkipListMap<K,V>) super.clone();
-        } catch (CloneNotSupportedException e) {
-            throw new InternalError();
-        }
-
-        clone.initialize();
-        clone.buildFromSorted(this);
-        return clone;
-    }
-
-    /**
-     * Streamlined bulk insertion to initialize from elements of
-     * given sorted map.  Call only from constructor or clone
-     * method.
-     */
-    private void buildFromSorted(SortedMap<K, ? extends V> map) {
-        if (map == null)
-            throw new NullPointerException();
-
-        HeadIndex<K,V> h = head;
-        Node<K,V> basepred = h.node;
-
-        // Track the current rightmost node at each level. Uses an
-        // ArrayList to avoid committing to initial or maximum level.
-        ArrayList<Index<K,V>> preds = new ArrayList<Index<K,V>>();
-
-        // initialize
-        for (int i = 0; i <= h.level; ++i)
-            preds.add(null);
-        Index<K,V> q = h;
-        for (int i = h.level; i > 0; --i) {
-            preds.set(i, q);
-            q = q.down;
-        }
-
-        Iterator<? extends Map.Entry<? extends K, ? extends V>> it =
-            map.entrySet().iterator();
-        while (it.hasNext()) {
-            Map.Entry<? extends K, ? extends V> e = it.next();
-            int j = randomLevel();
-            if (j > h.level) j = h.level + 1;
-            K k = e.getKey();
-            V v = e.getValue();
-            if (k == null || v == null)
-                throw new NullPointerException();
-            Node<K,V> z = new Node<K,V>(k, v, null);
-            basepred.next = z;
-            basepred = z;
-            if (j > 0) {
-                Index<K,V> idx = null;
-                for (int i = 1; i <= j; ++i) {
-                    idx = new Index<K,V>(z, idx, null);
-                    if (i > h.level)
-                        h = new HeadIndex<K,V>(h.node, h, idx, i);
-
-                    if (i < preds.size()) {
-                        preds.get(i).right = idx;
-                        preds.set(i, idx);
-                    } else
-                        preds.add(idx);
-                }
-            }
-        }
-        head = h;
-    }
-
-    /* ---------------- Serialization -------------- */
-
-    /**
-     * Save the state of this map to a stream.
-     *
-     * @serialData The key (Object) and value (Object) for each
-     * key-value mapping represented by the map, followed by
-     * <tt>null</tt>. The key-value mappings are emitted in key-order
-     * (as determined by the Comparator, or by the keys' natural
-     * ordering if no Comparator).
-     */
-    private void writeObject(java.io.ObjectOutputStream s)
-        throws java.io.IOException {
-        // Write out the Comparator and any hidden stuff
-        s.defaultWriteObject();
-
-        // Write out keys and values (alternating)
-        for (Node<K,V> n = findFirst(); n != null; n = n.next) {
-            V v = n.getValidValue();
-            if (v != null) {
-                s.writeObject(n.key);
-                s.writeObject(v);
-            }
-        }
-        s.writeObject(null);
-    }
-
-    /**
-     * Reconstitute the map from a stream.
-     */
-    private void readObject(final java.io.ObjectInputStream s)
-        throws java.io.IOException, ClassNotFoundException {
-        // Read in the Comparator and any hidden stuff
-        s.defaultReadObject();
-        // Reset transients
-        initialize();
-
-        /*
-         * This is nearly identical to buildFromSorted, but is
-         * distinct because readObject calls can't be nicely adapted
-         * as the kind of iterator needed by buildFromSorted. (They
-         * can be, but doing so requires type cheats and/or creation
-         * of adaptor classes.) It is simpler to just adapt the code.
-         */
-
-        HeadIndex<K,V> h = head;
-        Node<K,V> basepred = h.node;
-        ArrayList<Index<K,V>> preds = new ArrayList<Index<K,V>>();
-        for (int i = 0; i <= h.level; ++i)
-            preds.add(null);
-        Index<K,V> q = h;
-        for (int i = h.level; i > 0; --i) {
-            preds.set(i, q);
-            q = q.down;
-        }
-
-        for (;;) {
-            Object k = s.readObject();
-            if (k == null)
-                break;
-            Object v = s.readObject();
-            if (v == null)
-                throw new NullPointerException();
-            K key = (K) k;
-            V val = (V) v;
-            int j = randomLevel();
-            if (j > h.level) j = h.level + 1;
-            Node<K,V> z = new Node<K,V>(key, val, null);
-            basepred.next = z;
-            basepred = z;
-            if (j > 0) {
-                Index<K,V> idx = null;
-                for (int i = 1; i <= j; ++i) {
-                    idx = new Index<K,V>(z, idx, null);
-                    if (i > h.level)
-                        h = new HeadIndex<K,V>(h.node, h, idx, i);
-
-                    if (i < preds.size()) {
-                        preds.get(i).right = idx;
-                        preds.set(i, idx);
-                    } else
-                        preds.add(idx);
-                }
-            }
-        }
-        head = h;
-    }
-
-    /* ------ Map API methods ------ */
-
-    /**
-     * Returns <tt>true</tt> if this map contains a mapping for the specified
-     * key.
-     *
-     * @param key key whose presence in this map is to be tested
-     * @return <tt>true</tt> if this map contains a mapping for the specified key
-     * @throws ClassCastException if the specified key cannot be compared
-     *         with the keys currently in the map
-     * @throws NullPointerException if the specified key is null
-     */
-    public boolean containsKey(Object key) {
-        return doGet(key) != null;
-    }
-
-    /**
-     * Returns the value to which the specified key is mapped,
-     * or {@code null} if this map contains no mapping for the key.
-     *
-     * <p>More formally, if this map contains a mapping from a key
-     * {@code k} to a value {@code v} such that {@code key} compares
-     * equal to {@code k} according to the map's ordering, then this
-     * method returns {@code v}; otherwise it returns {@code null}.
-     * (There can be at most one such mapping.)
-     *
-     * @throws ClassCastException if the specified key cannot be compared
-     *         with the keys currently in the map
-     * @throws NullPointerException if the specified key is null
-     */
-    public V get(Object key) {
-        return doGet(key);
-    }
-
-    /**
-     * Associates the specified value with the specified key in this map.
-     * If the map previously contained a mapping for the key, the old
-     * value is replaced.
-     *
-     * @param key key with which the specified value is to be associated
-     * @param value value to be associated with the specified key
-     * @return the previous value associated with the specified key, or
-     *         <tt>null</tt> if there was no mapping for the key
-     * @throws ClassCastException if the specified key cannot be compared
-     *         with the keys currently in the map
-     * @throws NullPointerException if the specified key or value is null
-     */
-    public V put(K key, V value) {
-        if (value == null)
-            throw new NullPointerException();
-        return doPut(key, value, false);
-    }
-
-    /**
-     * Removes the mapping for the specified key from this map if present.
-     *
-     * @param  key key for which mapping should be removed
-     * @return the previous value associated with the specified key, or
-     *         <tt>null</tt> if there was no mapping for the key
-     * @throws ClassCastException if the specified key cannot be compared
-     *         with the keys currently in the map
-     * @throws NullPointerException if the specified key is null
-     */
-    public V remove(Object key) {
-        return doRemove(key, null);
-    }
-
-    /**
-     * Returns <tt>true</tt> if this map maps one or more keys to the
-     * specified value.  This operation requires time linear in the
-     * map size. Additionally, it is possible for the map to change
-     * during execution of this method, in which case the returned
-     * result may be inaccurate.
-     *
-     * @param value value whose presence in this map is to be tested
-     * @return <tt>true</tt> if a mapping to <tt>value</tt> exists;
-     *         <tt>false</tt> otherwise
-     * @throws NullPointerException if the specified value is null
-     */
-    public boolean containsValue(Object value) {
-        if (value == null)
-            throw new NullPointerException();
-        for (Node<K,V> n = findFirst(); n != null; n = n.next) {
-            V v = n.getValidValue();
-            if (v != null && value.equals(v))
-                return true;
-        }
-        return false;
-    }
-
-    /**
-     * Returns the number of key-value mappings in this map.  If this map
-     * contains more than <tt>Integer.MAX_VALUE</tt> elements, it
-     * returns <tt>Integer.MAX_VALUE</tt>.
-     *
-     * <p>Beware that, unlike in most collections, this method is
-     * <em>NOT</em> a constant-time operation. Because of the
-     * asynchronous nature of these maps, determining the current
-     * number of elements requires traversing them all to count them.
-     * Additionally, it is possible for the size to change during
-     * execution of this method, in which case the returned result
-     * will be inaccurate. Thus, this method is typically not very
-     * useful in concurrent applications.
-     *
-     * @return the number of elements in this map
-     */
-    public int size() {
-        long count = 0;
-        for (Node<K,V> n = findFirst(); n != null; n = n.next) {
-            if (n.getValidValue() != null)
-                ++count;
-        }
-        return (count >= Integer.MAX_VALUE) ? Integer.MAX_VALUE : (int) count;
-    }
-
-    /**
-     * Returns <tt>true</tt> if this map contains no key-value mappings.
-     * @return <tt>true</tt> if this map contains no key-value mappings
-     */
-    public boolean isEmpty() {
-        return findFirst() == null;
-    }
-
-    /**
-     * Removes all of the mappings from this map.
-     */
-    public void clear() {
-        initialize();
-    }
-
-    /* ---------------- View methods -------------- */
-
-    /*
-     * Note: Lazy initialization works for views because view classes
-     * are stateless/immutable so it doesn't matter wrt correctness if
-     * more than one is created (which will only rarely happen).  Even
-     * so, the following idiom conservatively ensures that the method
-     * returns the one it created if it does so, not one created by
-     * another racing thread.
-     */
-
-    /**
-     * Returns a {@link NavigableSet} view of the keys contained in this map.
-     * The set's iterator returns the keys in ascending order.
-     * The set is backed by the map, so changes to the map are
-     * reflected in the set, and vice-versa.  The set supports element
-     * removal, which removes the corresponding mapping from the map,
-     * via the {@code Iterator.remove}, {@code Set.remove},
-     * {@code removeAll}, {@code retainAll}, and {@code clear}
-     * operations.  It does not support the {@code add} or {@code addAll}
-     * operations.
-     *
-     * <p>The view's {@code iterator} is a "weakly consistent" iterator
-     * that will never throw {@link ConcurrentModificationException},
-     * and guarantees to traverse elements as they existed upon
-     * construction of the iterator, and may (but is not guaranteed to)
-     * reflect any modifications subsequent to construction.
-     *
-     * <p>This method is equivalent to method {@code navigableKeySet}.
-     *
-     * @return a navigable set view of the keys in this map
-     */
-    public NavigableSet<K> keySet() {
-        KeySet ks = keySet;
-        return (ks != null) ? ks : (keySet = new KeySet(this));
-    }
-
-    public NavigableSet<K> navigableKeySet() {
-        KeySet ks = keySet;
-        return (ks != null) ? ks : (keySet = new KeySet(this));
-    }
-
-    /**
-     * Returns a {@link Collection} view of the values contained in this map.
-     * The collection's iterator returns the values in ascending order
-     * of the corresponding keys.
-     * The collection is backed by the map, so changes to the map are
-     * reflected in the collection, and vice-versa.  The collection
-     * supports element removal, which removes the corresponding
-     * mapping from the map, via the <tt>Iterator.remove</tt>,
-     * <tt>Collection.remove</tt>, <tt>removeAll</tt>,
-     * <tt>retainAll</tt> and <tt>clear</tt> operations.  It does not
-     * support the <tt>add</tt> or <tt>addAll</tt> operations.
-     *
-     * <p>The view's <tt>iterator</tt> is a "weakly consistent" iterator
-     * that will never throw {@link ConcurrentModificationException},
-     * and guarantees to traverse elements as they existed upon
-     * construction of the iterator, and may (but is not guaranteed to)
-     * reflect any modifications subsequent to construction.
-     */
-    public Collection<V> values() {
-        Values vs = values;
-        return (vs != null) ? vs : (values = new Values(this));
-    }
-
-    /**
-     * Returns a {@link Set} view of the mappings contained in this map.
-     * The set's iterator returns the entries in ascending key order.
-     * The set is backed by the map, so changes to the map are
-     * reflected in the set, and vice-versa.  The set supports element
-     * removal, which removes the corresponding mapping from the map,
-     * via the <tt>Iterator.remove</tt>, <tt>Set.remove</tt>,
-     * <tt>removeAll</tt>, <tt>retainAll</tt> and <tt>clear</tt>
-     * operations.  It does not support the <tt>add</tt> or
-     * <tt>addAll</tt> operations.
-     *
-     * <p>The view's <tt>iterator</tt> is a "weakly consistent" iterator
-     * that will never throw {@link ConcurrentModificationException},
-     * and guarantees to traverse elements as they existed upon
-     * construction of the iterator, and may (but is not guaranteed to)
-     * reflect any modifications subsequent to construction.
-     *
-     * <p>The <tt>Map.Entry</tt> elements returned by
-     * <tt>iterator.next()</tt> do <em>not</em> support the
-     * <tt>setValue</tt> operation.
-     *
-     * @return a set view of the mappings contained in this map,
-     *         sorted in ascending key order
-     */
-    public Set<Map.Entry<K,V>> entrySet() {
-        EntrySet es = entrySet;
-        return (es != null) ? es : (entrySet = new EntrySet(this));
-    }
-
-    public ConcurrentNavigableMap<K,V> descendingMap() {
-        ConcurrentNavigableMap<K,V> dm = descendingMap;
-        return (dm != null) ? dm : (descendingMap = new SubMap<K,V>
-                                    (this, null, false, null, false, true));
-    }
-
-    public NavigableSet<K> descendingKeySet() {
-        return descendingMap().navigableKeySet();
-    }
-
-    /* ---------------- AbstractMap Overrides -------------- */
-
-    /**
-     * Compares the specified object with this map for equality.
-     * Returns <tt>true</tt> if the given object is also a map and the
-     * two maps represent the same mappings.  More formally, two maps
-     * <tt>m1</tt> and <tt>m2</tt> represent the same mappings if
-     * <tt>m1.entrySet().equals(m2.entrySet())</tt>.  This
-     * operation may return misleading results if either map is
-     * concurrently modified during execution of this method.
-     *
-     * @param o object to be compared for equality with this map
-     * @return <tt>true</tt> if the specified object is equal to this map
-     */
-    public boolean equals(Object o) {
-        if (o == this)
-            return true;
-        if (!(o instanceof Map))
-            return false;
-        Map<?,?> m = (Map<?,?>) o;
-        try {
-            for (Map.Entry<K,V> e : this.entrySet())
-                if (! e.getValue().equals(m.get(e.getKey())))
-                    return false;
-            for (Map.Entry<?,?> e : m.entrySet()) {
-                Object k = e.getKey();
-                Object v = e.getValue();
-                if (k == null || v == null || !v.equals(get(k)))
-                    return false;
-            }
-            return true;
-        } catch (ClassCastException unused) {
-            return false;
-        } catch (NullPointerException unused) {
-            return false;
-        }
-    }
-
-    /* ------ ConcurrentMap API methods ------ */
-
-    /**
-     * {@inheritDoc}
-     *
-     * @return the previous value associated with the specified key,
-     *         or <tt>null</tt> if there was no mapping for the key
-     * @throws ClassCastException if the specified key cannot be compared
-     *         with the keys currently in the map
-     * @throws NullPointerException if the specified key or value is null
-     */
-    public V putIfAbsent(K key, V value) {
-        if (value == null)
-            throw new NullPointerException();
-        return doPut(key, value, true);
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * @throws ClassCastException if the specified key cannot be compared
-     *         with the keys currently in the map
-     * @throws NullPointerException if the specified key is null
-     */
-    public boolean remove(Object key, Object value) {
-        if (key == null)
-            throw new NullPointerException();
-        if (value == null)
-            return false;
-        return doRemove(key, value) != null;
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * @throws ClassCastException if the specified key cannot be compared
-     *         with the keys currently in the map
-     * @throws NullPointerException if any of the arguments are null
-     */
-    public boolean replace(K key, V oldValue, V newValue) {
-        if (oldValue == null || newValue == null)
-            throw new NullPointerException();
-        Comparable<? super K> k = comparable(key);
-        for (;;) {
-            Node<K,V> n = findNode(k);
-            if (n == null)
-                return false;
-            Object v = n.value;
-            if (v != null) {
-                if (!oldValue.equals(v))
-                    return false;
-                if (n.casValue(v, newValue))
-                    return true;
-            }
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * @return the previous value associated with the specified key,
-     *         or <tt>null</tt> if there was no mapping for the key
-     * @throws ClassCastException if the specified key cannot be compared
-     *         with the keys currently in the map
-     * @throws NullPointerException if the specified key or value is null
-     */
-    public V replace(K key, V value) {
-        if (value == null)
-            throw new NullPointerException();
-        Comparable<? super K> k = comparable(key);
-        for (;;) {
-            Node<K,V> n = findNode(k);
-            if (n == null)
-                return null;
-            Object v = n.value;
-            if (v != null && n.casValue(v, value))
-                return (V)v;
-        }
-    }
-
-    /* ------ SortedMap API methods ------ */
-
-    public Comparator<? super K> comparator() {
-        return comparator;
-    }
-
-    /**
-     * @throws NoSuchElementException {@inheritDoc}
-     */
-    public K firstKey() {
-        Node<K,V> n = findFirst();
-        if (n == null)
-            throw new NoSuchElementException();
-        return n.key;
-    }
-
-    /**
-     * @throws NoSuchElementException {@inheritDoc}
-     */
-    public K lastKey() {
-        Node<K,V> n = findLast();
-        if (n == null)
-            throw new NoSuchElementException();
-        return n.key;
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if {@code fromKey} or {@code toKey} is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    public ConcurrentNavigableMap<K,V> subMap(K fromKey,
-                                              boolean fromInclusive,
-                                              K toKey,
-                                              boolean toInclusive) {
-        if (fromKey == null || toKey == null)
-            throw new NullPointerException();
-        return new SubMap<K,V>
-            (this, fromKey, fromInclusive, toKey, toInclusive, false);
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if {@code toKey} is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    public ConcurrentNavigableMap<K,V> headMap(K toKey,
-                                               boolean inclusive) {
-        if (toKey == null)
-            throw new NullPointerException();
-        return new SubMap<K,V>
-            (this, null, false, toKey, inclusive, false);
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if {@code fromKey} is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    public ConcurrentNavigableMap<K,V> tailMap(K fromKey,
-                                               boolean inclusive) {
-        if (fromKey == null)
-            throw new NullPointerException();
-        return new SubMap<K,V>
-            (this, fromKey, inclusive, null, false, false);
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if {@code fromKey} or {@code toKey} is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    public ConcurrentNavigableMap<K,V> subMap(K fromKey, K toKey) {
-        return subMap(fromKey, true, toKey, false);
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if {@code toKey} is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    public ConcurrentNavigableMap<K,V> headMap(K toKey) {
-        return headMap(toKey, false);
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if {@code fromKey} is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    public ConcurrentNavigableMap<K,V> tailMap(K fromKey) {
-        return tailMap(fromKey, true);
-    }
-
-    /* ---------------- Relational operations -------------- */
-
-    /**
-     * Returns a key-value mapping associated with the greatest key
-     * strictly less than the given key, or <tt>null</tt> if there is
-     * no such key. The returned entry does <em>not</em> support the
-     * <tt>Entry.setValue</tt> method.
-     *
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified key is null
-     */
-    public Map.Entry<K,V> lowerEntry(K key) {
-        return getNear(key, LT);
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified key is null
-     */
-    public K lowerKey(K key) {
-        Node<K,V> n = findNear(key, LT);
-        return (n == null) ? null : n.key;
-    }
-
-    /**
-     * Returns a key-value mapping associated with the greatest key
-     * less than or equal to the given key, or <tt>null</tt> if there
-     * is no such key. The returned entry does <em>not</em> support
-     * the <tt>Entry.setValue</tt> method.
-     *
-     * @param key the key
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified key is null
-     */
-    public Map.Entry<K,V> floorEntry(K key) {
-        return getNear(key, LT|EQ);
-    }
-
-    /**
-     * @param key the key
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified key is null
-     */
-    public K floorKey(K key) {
-        Node<K,V> n = findNear(key, LT|EQ);
-        return (n == null) ? null : n.key;
-    }
-
-    /**
-     * Returns a key-value mapping associated with the least key
-     * greater than or equal to the given key, or <tt>null</tt> if
-     * there is no such entry. The returned entry does <em>not</em>
-     * support the <tt>Entry.setValue</tt> method.
-     *
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified key is null
-     */
-    public Map.Entry<K,V> ceilingEntry(K key) {
-        return getNear(key, GT|EQ);
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified key is null
-     */
-    public K ceilingKey(K key) {
-        Node<K,V> n = findNear(key, GT|EQ);
-        return (n == null) ? null : n.key;
-    }
-
-    /**
-     * Returns a key-value mapping associated with the least key
-     * strictly greater than the given key, or <tt>null</tt> if there
-     * is no such key. The returned entry does <em>not</em> support
-     * the <tt>Entry.setValue</tt> method.
-     *
-     * @param key the key
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified key is null
-     */
-    public Map.Entry<K,V> higherEntry(K key) {
-        return getNear(key, GT);
-    }
-
-    /**
-     * @param key the key
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified key is null
-     */
-    public K higherKey(K key) {
-        Node<K,V> n = findNear(key, GT);
-        return (n == null) ? null : n.key;
-    }
-
-    /**
-     * Returns a key-value mapping associated with the least
-     * key in this map, or <tt>null</tt> if the map is empty.
-     * The returned entry does <em>not</em> support
-     * the <tt>Entry.setValue</tt> method.
-     */
-    public Map.Entry<K,V> firstEntry() {
-        for (;;) {
-            Node<K,V> n = findFirst();
-            if (n == null)
-                return null;
-            AbstractMap.SimpleImmutableEntry<K,V> e = n.createSnapshot();
-            if (e != null)
-                return e;
-        }
-    }
-
-    /**
-     * Returns a key-value mapping associated with the greatest
-     * key in this map, or <tt>null</tt> if the map is empty.
-     * The returned entry does <em>not</em> support
-     * the <tt>Entry.setValue</tt> method.
-     */
-    public Map.Entry<K,V> lastEntry() {
-        for (;;) {
-            Node<K,V> n = findLast();
-            if (n == null)
-                return null;
-            AbstractMap.SimpleImmutableEntry<K,V> e = n.createSnapshot();
-            if (e != null)
-                return e;
-        }
-    }
-
-    /**
-     * Removes and returns a key-value mapping associated with
-     * the least key in this map, or <tt>null</tt> if the map is empty.
-     * The returned entry does <em>not</em> support
-     * the <tt>Entry.setValue</tt> method.
-     */
-    public Map.Entry<K,V> pollFirstEntry() {
-        return doRemoveFirstEntry();
-    }
-
-    /**
-     * Removes and returns a key-value mapping associated with
-     * the greatest key in this map, or <tt>null</tt> if the map is empty.
-     * The returned entry does <em>not</em> support
-     * the <tt>Entry.setValue</tt> method.
-     */
-    public Map.Entry<K,V> pollLastEntry() {
-        return doRemoveLastEntry();
-    }
-
-
-    /* ---------------- Iterators -------------- */
-
-    /**
-     * Base of iterator classes:
-     */
-    abstract class Iter<T> implements Iterator<T> {
-        /** the last node returned by next() */
-        Node<K,V> lastReturned;
-        /** the next node to return from next(); */
-        Node<K,V> next;
-        /** Cache of next value field to maintain weak consistency */
-        V nextValue;
-
-        /** Initializes ascending iterator for entire range. */
-        Iter() {
-            for (;;) {
-                next = findFirst();
-                if (next == null)
-                    break;
-                Object x = next.value;
-                if (x != null && x != next) {
-                    nextValue = (V) x;
-                    break;
-                }
-            }
-        }
-
-        public final boolean hasNext() {
-            return next != null;
-        }
-
-        /** Advances next to higher entry. */
-        final void advance() {
-            if (next == null)
-                throw new NoSuchElementException();
-            lastReturned = next;
-            for (;;) {
-                next = next.next;
-                if (next == null)
-                    break;
-                Object x = next.value;
-                if (x != null && x != next) {
-                    nextValue = (V) x;
-                    break;
-                }
-            }
-        }
-
-        public void remove() {
-            Node<K,V> l = lastReturned;
-            if (l == null)
-                throw new IllegalStateException();
-            // It would not be worth all of the overhead to directly
-            // unlink from here. Using remove is fast enough.
-            ConcurrentSkipListMap.this.remove(l.key);
-            lastReturned = null;
-        }
-
-    }
-
-    final class ValueIterator extends Iter<V> {
-        public V next() {
-            V v = nextValue;
-            advance();
-            return v;
-        }
-    }
-
-    final class KeyIterator extends Iter<K> {
-        public K next() {
-            Node<K,V> n = next;
-            advance();
-            return n.key;
-        }
-    }
-
-    final class EntryIterator extends Iter<Map.Entry<K,V>> {
-        public Map.Entry<K,V> next() {
-            Node<K,V> n = next;
-            V v = nextValue;
-            advance();
-            return new AbstractMap.SimpleImmutableEntry<K,V>(n.key, v);
-        }
-    }
-
-    // Factory methods for iterators needed by ConcurrentSkipListSet etc
-
-    Iterator<K> keyIterator() {
-        return new KeyIterator();
-    }
-
-    Iterator<V> valueIterator() {
-        return new ValueIterator();
-    }
-
-    Iterator<Map.Entry<K,V>> entryIterator() {
-        return new EntryIterator();
-    }
-
-    /* ---------------- View Classes -------------- */
-
-    /*
-     * View classes are static, delegating to a ConcurrentNavigableMap
-     * to allow use by SubMaps, which outweighs the ugliness of
-     * needing type-tests for Iterator methods.
-     */
-
-    static final <E> List<E> toList(Collection<E> c) {
-        // Using size() here would be a pessimization.
-        List<E> list = new ArrayList<E>();
-        for (E e : c)
-            list.add(e);
-        return list;
-    }
-
-    static final class KeySet<E>
-            extends AbstractSet<E> implements NavigableSet<E> {
-        private final ConcurrentNavigableMap<E,Object> m;
-        KeySet(ConcurrentNavigableMap<E,Object> map) { m = map; }
-        public int size() { return m.size(); }
-        public boolean isEmpty() { return m.isEmpty(); }
-        public boolean contains(Object o) { return m.containsKey(o); }
-        public boolean remove(Object o) { return m.remove(o) != null; }
-        public void clear() { m.clear(); }
-        public E lower(E e) { return m.lowerKey(e); }
-        public E floor(E e) { return m.floorKey(e); }
-        public E ceiling(E e) { return m.ceilingKey(e); }
-        public E higher(E e) { return m.higherKey(e); }
-        public Comparator<? super E> comparator() { return m.comparator(); }
-        public E first() { return m.firstKey(); }
-        public E last() { return m.lastKey(); }
-        public E pollFirst() {
-            Map.Entry<E,Object> e = m.pollFirstEntry();
-            return (e == null) ? null : e.getKey();
-        }
-        public E pollLast() {
-            Map.Entry<E,Object> e = m.pollLastEntry();
-            return (e == null) ? null : e.getKey();
-        }
-        public Iterator<E> iterator() {
-            if (m instanceof ConcurrentSkipListMap)
-                return ((ConcurrentSkipListMap<E,Object>)m).keyIterator();
-            else
-                return ((ConcurrentSkipListMap.SubMap<E,Object>)m).keyIterator();
-        }
-        public boolean equals(Object o) {
-            if (o == this)
-                return true;
-            if (!(o instanceof Set))
-                return false;
-            Collection<?> c = (Collection<?>) o;
-            try {
-                return containsAll(c) && c.containsAll(this);
-            } catch (ClassCastException unused)   {
-                return false;
-            } catch (NullPointerException unused) {
-                return false;
-            }
-        }
-        public Object[] toArray()     { return toList(this).toArray();  }
-        public <T> T[] toArray(T[] a) { return toList(this).toArray(a); }
-        public Iterator<E> descendingIterator() {
-            return descendingSet().iterator();
-        }
-        public NavigableSet<E> subSet(E fromElement,
-                                      boolean fromInclusive,
-                                      E toElement,
-                                      boolean toInclusive) {
-            return new KeySet<E>(m.subMap(fromElement, fromInclusive,
-                                          toElement,   toInclusive));
-        }
-        public NavigableSet<E> headSet(E toElement, boolean inclusive) {
-            return new KeySet<E>(m.headMap(toElement, inclusive));
-        }
-        public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {
-            return new KeySet<E>(m.tailMap(fromElement, inclusive));
-        }
-        public NavigableSet<E> subSet(E fromElement, E toElement) {
-            return subSet(fromElement, true, toElement, false);
-        }
-        public NavigableSet<E> headSet(E toElement) {
-            return headSet(toElement, false);
-        }
-        public NavigableSet<E> tailSet(E fromElement) {
-            return tailSet(fromElement, true);
-        }
-        public NavigableSet<E> descendingSet() {
-            return new KeySet(m.descendingMap());
-        }
-    }
-
-    static final class Values<E> extends AbstractCollection<E> {
-        private final ConcurrentNavigableMap<Object, E> m;
-        Values(ConcurrentNavigableMap<Object, E> map) {
-            m = map;
-        }
-        public Iterator<E> iterator() {
-            if (m instanceof ConcurrentSkipListMap)
-                return ((ConcurrentSkipListMap<Object,E>)m).valueIterator();
-            else
-                return ((SubMap<Object,E>)m).valueIterator();
-        }
-        public boolean isEmpty() {
-            return m.isEmpty();
-        }
-        public int size() {
-            return m.size();
-        }
-        public boolean contains(Object o) {
-            return m.containsValue(o);
-        }
-        public void clear() {
-            m.clear();
-        }
-        public Object[] toArray()     { return toList(this).toArray();  }
-        public <T> T[] toArray(T[] a) { return toList(this).toArray(a); }
-    }
-
-    static final class EntrySet<K1,V1> extends AbstractSet<Map.Entry<K1,V1>> {
-        private final ConcurrentNavigableMap<K1, V1> m;
-        EntrySet(ConcurrentNavigableMap<K1, V1> map) {
-            m = map;
-        }
-
-        public Iterator<Map.Entry<K1,V1>> iterator() {
-            if (m instanceof ConcurrentSkipListMap)
-                return ((ConcurrentSkipListMap<K1,V1>)m).entryIterator();
-            else
-                return ((SubMap<K1,V1>)m).entryIterator();
-        }
-
-        public boolean contains(Object o) {
-            if (!(o instanceof Map.Entry))
-                return false;
-            Map.Entry<K1,V1> e = (Map.Entry<K1,V1>)o;
-            V1 v = m.get(e.getKey());
-            return v != null && v.equals(e.getValue());
-        }
-        public boolean remove(Object o) {
-            if (!(o instanceof Map.Entry))
-                return false;
-            Map.Entry<K1,V1> e = (Map.Entry<K1,V1>)o;
-            return m.remove(e.getKey(),
-                            e.getValue());
-        }
-        public boolean isEmpty() {
-            return m.isEmpty();
-        }
-        public int size() {
-            return m.size();
-        }
-        public void clear() {
-            m.clear();
-        }
-        public boolean equals(Object o) {
-            if (o == this)
-                return true;
-            if (!(o instanceof Set))
-                return false;
-            Collection<?> c = (Collection<?>) o;
-            try {
-                return containsAll(c) && c.containsAll(this);
-            } catch (ClassCastException unused)   {
-                return false;
-            } catch (NullPointerException unused) {
-                return false;
-            }
-        }
-        public Object[] toArray()     { return toList(this).toArray();  }
-        public <T> T[] toArray(T[] a) { return toList(this).toArray(a); }
-    }
-
-    /**
-     * Submaps returned by {@link ConcurrentSkipListMap} submap operations
-     * represent a subrange of mappings of their underlying
-     * maps. Instances of this class support all methods of their
-     * underlying maps, differing in that mappings outside their range are
-     * ignored, and attempts to add mappings outside their ranges result
-     * in {@link IllegalArgumentException}.  Instances of this class are
-     * constructed only using the <tt>subMap</tt>, <tt>headMap</tt>, and
-     * <tt>tailMap</tt> methods of their underlying maps.
-     *
-     * @serial include
-     */
-    static final class SubMap<K,V> extends AbstractMap<K,V>
-        implements ConcurrentNavigableMap<K,V>, Cloneable,
-                   java.io.Serializable {
-        private static final long serialVersionUID = -7647078645895051609L;
-
-        /** Underlying map */
-        private final ConcurrentSkipListMap<K,V> m;
-        /** lower bound key, or null if from start */
-        private final K lo;
-        /** upper bound key, or null if to end */
-        private final K hi;
-        /** inclusion flag for lo */
-        private final boolean loInclusive;
-        /** inclusion flag for hi */
-        private final boolean hiInclusive;
-        /** direction */
-        private final boolean isDescending;
-
-        // Lazily initialized view holders
-        private transient KeySet<K> keySetView;
-        private transient Set<Map.Entry<K,V>> entrySetView;
-        private transient Collection<V> valuesView;
-
-        /**
-         * Creates a new submap, initializing all fields
-         */
-        SubMap(ConcurrentSkipListMap<K,V> map,
-               K fromKey, boolean fromInclusive,
-               K toKey, boolean toInclusive,
-               boolean isDescending) {
-            if (fromKey != null && toKey != null &&
-                map.compare(fromKey, toKey) > 0)
-                throw new IllegalArgumentException("inconsistent range");
-            this.m = map;
-            this.lo = fromKey;
-            this.hi = toKey;
-            this.loInclusive = fromInclusive;
-            this.hiInclusive = toInclusive;
-            this.isDescending = isDescending;
-        }
-
-        /* ----------------  Utilities -------------- */
-
-        private boolean tooLow(K key) {
-            if (lo != null) {
-                int c = m.compare(key, lo);
-                if (c < 0 || (c == 0 && !loInclusive))
-                    return true;
-            }
-            return false;
-        }
-
-        private boolean tooHigh(K key) {
-            if (hi != null) {
-                int c = m.compare(key, hi);
-                if (c > 0 || (c == 0 && !hiInclusive))
-                    return true;
-            }
-            return false;
-        }
-
-        private boolean inBounds(K key) {
-            return !tooLow(key) && !tooHigh(key);
-        }
-
-        private void checkKeyBounds(K key) throws IllegalArgumentException {
-            if (key == null)
-                throw new NullPointerException();
-            if (!inBounds(key))
-                throw new IllegalArgumentException("key out of range");
-        }
-
-        /**
-         * Returns true if node key is less than upper bound of range
-         */
-        private boolean isBeforeEnd(ConcurrentSkipListMap.Node<K,V> n) {
-            if (n == null)
-                return false;
-            if (hi == null)
-                return true;
-            K k = n.key;
-            if (k == null) // pass by markers and headers
-                return true;
-            int c = m.compare(k, hi);
-            if (c > 0 || (c == 0 && !hiInclusive))
-                return false;
-            return true;
-        }
-
-        /**
-         * Returns lowest node. This node might not be in range, so
-         * most usages need to check bounds
-         */
-        private ConcurrentSkipListMap.Node<K,V> loNode() {
-            if (lo == null)
-                return m.findFirst();
-            else if (loInclusive)
-                return m.findNear(lo, m.GT|m.EQ);
-            else
-                return m.findNear(lo, m.GT);
-        }
-
-        /**
-         * Returns highest node. This node might not be in range, so
-         * most usages need to check bounds
-         */
-        private ConcurrentSkipListMap.Node<K,V> hiNode() {
-            if (hi == null)
-                return m.findLast();
-            else if (hiInclusive)
-                return m.findNear(hi, m.LT|m.EQ);
-            else
-                return m.findNear(hi, m.LT);
-        }
-
-        /**
-         * Returns lowest absolute key (ignoring directonality)
-         */
-        private K lowestKey() {
-            ConcurrentSkipListMap.Node<K,V> n = loNode();
-            if (isBeforeEnd(n))
-                return n.key;
-            else
-                throw new NoSuchElementException();
-        }
-
-        /**
-         * Returns highest absolute key (ignoring directonality)
-         */
-        private K highestKey() {
-            ConcurrentSkipListMap.Node<K,V> n = hiNode();
-            if (n != null) {
-                K last = n.key;
-                if (inBounds(last))
-                    return last;
-            }
-            throw new NoSuchElementException();
-        }
-
-        private Map.Entry<K,V> lowestEntry() {
-            for (;;) {
-                ConcurrentSkipListMap.Node<K,V> n = loNode();
-                if (!isBeforeEnd(n))
-                    return null;
-                Map.Entry<K,V> e = n.createSnapshot();
-                if (e != null)
-                    return e;
-            }
-        }
-
-        private Map.Entry<K,V> highestEntry() {
-            for (;;) {
-                ConcurrentSkipListMap.Node<K,V> n = hiNode();
-                if (n == null || !inBounds(n.key))
-                    return null;
-                Map.Entry<K,V> e = n.createSnapshot();
-                if (e != null)
-                    return e;
-            }
-        }
-
-        private Map.Entry<K,V> removeLowest() {
-            for (;;) {
-                Node<K,V> n = loNode();
-                if (n == null)
-                    return null;
-                K k = n.key;
-                if (!inBounds(k))
-                    return null;
-                V v = m.doRemove(k, null);
-                if (v != null)
-                    return new AbstractMap.SimpleImmutableEntry<K,V>(k, v);
-            }
-        }
-
-        private Map.Entry<K,V> removeHighest() {
-            for (;;) {
-                Node<K,V> n = hiNode();
-                if (n == null)
-                    return null;
-                K k = n.key;
-                if (!inBounds(k))
-                    return null;
-                V v = m.doRemove(k, null);
-                if (v != null)
-                    return new AbstractMap.SimpleImmutableEntry<K,V>(k, v);
-            }
-        }
-
-        /**
-         * Submap version of ConcurrentSkipListMap.getNearEntry
-         */
-        private Map.Entry<K,V> getNearEntry(K key, int rel) {
-            if (isDescending) { // adjust relation for direction
-                if ((rel & m.LT) == 0)
-                    rel |= m.LT;
-                else
-                    rel &= ~m.LT;
-            }
-            if (tooLow(key))
-                return ((rel & m.LT) != 0) ? null : lowestEntry();
-            if (tooHigh(key))
-                return ((rel & m.LT) != 0) ? highestEntry() : null;
-            for (;;) {
-                Node<K,V> n = m.findNear(key, rel);
-                if (n == null || !inBounds(n.key))
-                    return null;
-                K k = n.key;
-                V v = n.getValidValue();
-                if (v != null)
-                    return new AbstractMap.SimpleImmutableEntry<K,V>(k, v);
-            }
-        }
-
-        // Almost the same as getNearEntry, except for keys
-        private K getNearKey(K key, int rel) {
-            if (isDescending) { // adjust relation for direction
-                if ((rel & m.LT) == 0)
-                    rel |= m.LT;
-                else
-                    rel &= ~m.LT;
-            }
-            if (tooLow(key)) {
-                if ((rel & m.LT) == 0) {
-                    ConcurrentSkipListMap.Node<K,V> n = loNode();
-                    if (isBeforeEnd(n))
-                        return n.key;
-                }
-                return null;
-            }
-            if (tooHigh(key)) {
-                if ((rel & m.LT) != 0) {
-                    ConcurrentSkipListMap.Node<K,V> n = hiNode();
-                    if (n != null) {
-                        K last = n.key;
-                        if (inBounds(last))
-                            return last;
-                    }
-                }
-                return null;
-            }
-            for (;;) {
-                Node<K,V> n = m.findNear(key, rel);
-                if (n == null || !inBounds(n.key))
-                    return null;
-                K k = n.key;
-                V v = n.getValidValue();
-                if (v != null)
-                    return k;
-            }
-        }
-
-        /* ----------------  Map API methods -------------- */
-
-        public boolean containsKey(Object key) {
-            if (key == null) throw new NullPointerException();
-            K k = (K)key;
-            return inBounds(k) && m.containsKey(k);
-        }
-
-        public V get(Object key) {
-            if (key == null) throw new NullPointerException();
-            K k = (K)key;
-            return ((!inBounds(k)) ? null : m.get(k));
-        }
-
-        public V put(K key, V value) {
-            checkKeyBounds(key);
-            return m.put(key, value);
-        }
-
-        public V remove(Object key) {
-            K k = (K)key;
-            return (!inBounds(k)) ? null : m.remove(k);
-        }
-
-        public int size() {
-            long count = 0;
-            for (ConcurrentSkipListMap.Node<K,V> n = loNode();
-                 isBeforeEnd(n);
-                 n = n.next) {
-                if (n.getValidValue() != null)
-                    ++count;
-            }
-            return count >= Integer.MAX_VALUE ? Integer.MAX_VALUE : (int)count;
-        }
-
-        public boolean isEmpty() {
-            return !isBeforeEnd(loNode());
-        }
-
-        public boolean containsValue(Object value) {
-            if (value == null)
-                throw new NullPointerException();
-            for (ConcurrentSkipListMap.Node<K,V> n = loNode();
-                 isBeforeEnd(n);
-                 n = n.next) {
-                V v = n.getValidValue();
-                if (v != null && value.equals(v))
-                    return true;
-            }
-            return false;
-        }
-
-        public void clear() {
-            for (ConcurrentSkipListMap.Node<K,V> n = loNode();
-                 isBeforeEnd(n);
-                 n = n.next) {
-                if (n.getValidValue() != null)
-                    m.remove(n.key);
-            }
-        }
-
-        /* ----------------  ConcurrentMap API methods -------------- */
-
-        public V putIfAbsent(K key, V value) {
-            checkKeyBounds(key);
-            return m.putIfAbsent(key, value);
-        }
-
-        public boolean remove(Object key, Object value) {
-            K k = (K)key;
-            return inBounds(k) && m.remove(k, value);
-        }
-
-        public boolean replace(K key, V oldValue, V newValue) {
-            checkKeyBounds(key);
-            return m.replace(key, oldValue, newValue);
-        }
-
-        public V replace(K key, V value) {
-            checkKeyBounds(key);
-            return m.replace(key, value);
-        }
-
-        /* ----------------  SortedMap API methods -------------- */
-
-        public Comparator<? super K> comparator() {
-            Comparator<? super K> cmp = m.comparator();
-            if (isDescending)
-                return Collections.reverseOrder(cmp);
-            else
-                return cmp;
-        }
-
-        /**
-         * Utility to create submaps, where given bounds override
-         * unbounded(null) ones and/or are checked against bounded ones.
-         */
-        private SubMap<K,V> newSubMap(K fromKey,
-                                      boolean fromInclusive,
-                                      K toKey,
-                                      boolean toInclusive) {
-            if (isDescending) { // flip senses
-                K tk = fromKey;
-                fromKey = toKey;
-                toKey = tk;
-                boolean ti = fromInclusive;
-                fromInclusive = toInclusive;
-                toInclusive = ti;
-            }
-            if (lo != null) {
-                if (fromKey == null) {
-                    fromKey = lo;
-                    fromInclusive = loInclusive;
-                }
-                else {
-                    int c = m.compare(fromKey, lo);
-                    if (c < 0 || (c == 0 && !loInclusive && fromInclusive))
-                        throw new IllegalArgumentException("key out of range");
-                }
-            }
-            if (hi != null) {
-                if (toKey == null) {
-                    toKey = hi;
-                    toInclusive = hiInclusive;
-                }
-                else {
-                    int c = m.compare(toKey, hi);
-                    if (c > 0 || (c == 0 && !hiInclusive && toInclusive))
-                        throw new IllegalArgumentException("key out of range");
-                }
-            }
-            return new SubMap<K,V>(m, fromKey, fromInclusive,
-                                   toKey, toInclusive, isDescending);
-        }
-
-        public SubMap<K,V> subMap(K fromKey,
-                                  boolean fromInclusive,
-                                  K toKey,
-                                  boolean toInclusive) {
-            if (fromKey == null || toKey == null)
-                throw new NullPointerException();
-            return newSubMap(fromKey, fromInclusive, toKey, toInclusive);
-        }
-
-        public SubMap<K,V> headMap(K toKey,
-                                   boolean inclusive) {
-            if (toKey == null)
-                throw new NullPointerException();
-            return newSubMap(null, false, toKey, inclusive);
-        }
-
-        public SubMap<K,V> tailMap(K fromKey,
-                                   boolean inclusive) {
-            if (fromKey == null)
-                throw new NullPointerException();
-            return newSubMap(fromKey, inclusive, null, false);
-        }
-
-        public SubMap<K,V> subMap(K fromKey, K toKey) {
-            return subMap(fromKey, true, toKey, false);
-        }
-
-        public SubMap<K,V> headMap(K toKey) {
-            return headMap(toKey, false);
-        }
-
-        public SubMap<K,V> tailMap(K fromKey) {
-            return tailMap(fromKey, true);
-        }
-
-        public SubMap<K,V> descendingMap() {
-            return new SubMap<K,V>(m, lo, loInclusive,
-                                   hi, hiInclusive, !isDescending);
-        }
-
-        /* ----------------  Relational methods -------------- */
-
-        public Map.Entry<K,V> ceilingEntry(K key) {
-            return getNearEntry(key, (m.GT|m.EQ));
-        }
-
-        public K ceilingKey(K key) {
-            return getNearKey(key, (m.GT|m.EQ));
-        }
-
-        public Map.Entry<K,V> lowerEntry(K key) {
-            return getNearEntry(key, (m.LT));
-        }
-
-        public K lowerKey(K key) {
-            return getNearKey(key, (m.LT));
-        }
-
-        public Map.Entry<K,V> floorEntry(K key) {
-            return getNearEntry(key, (m.LT|m.EQ));
-        }
-
-        public K floorKey(K key) {
-            return getNearKey(key, (m.LT|m.EQ));
-        }
-
-        public Map.Entry<K,V> higherEntry(K key) {
-            return getNearEntry(key, (m.GT));
-        }
-
-        public K higherKey(K key) {
-            return getNearKey(key, (m.GT));
-        }
-
-        public K firstKey() {
-            return isDescending ? highestKey() : lowestKey();
-        }
-
-        public K lastKey() {
-            return isDescending ? lowestKey() : highestKey();
-        }
-
-        public Map.Entry<K,V> firstEntry() {
-            return isDescending ? highestEntry() : lowestEntry();
-        }
-
-        public Map.Entry<K,V> lastEntry() {
-            return isDescending ? lowestEntry() : highestEntry();
-        }
-
-        public Map.Entry<K,V> pollFirstEntry() {
-            return isDescending ? removeHighest() : removeLowest();
-        }
-
-        public Map.Entry<K,V> pollLastEntry() {
-            return isDescending ? removeLowest() : removeHighest();
-        }
-
-        /* ---------------- Submap Views -------------- */
-
-        public NavigableSet<K> keySet() {
-            KeySet<K> ks = keySetView;
-            return (ks != null) ? ks : (keySetView = new KeySet(this));
-        }
-
-        public NavigableSet<K> navigableKeySet() {
-            KeySet<K> ks = keySetView;
-            return (ks != null) ? ks : (keySetView = new KeySet(this));
-        }
-
-        public Collection<V> values() {
-            Collection<V> vs = valuesView;
-            return (vs != null) ? vs : (valuesView = new Values(this));
-        }
-
-        public Set<Map.Entry<K,V>> entrySet() {
-            Set<Map.Entry<K,V>> es = entrySetView;
-            return (es != null) ? es : (entrySetView = new EntrySet(this));
-        }
-
-        public NavigableSet<K> descendingKeySet() {
-            return descendingMap().navigableKeySet();
-        }
-
-        Iterator<K> keyIterator() {
-            return new SubMapKeyIterator();
-        }
-
-        Iterator<V> valueIterator() {
-            return new SubMapValueIterator();
-        }
-
-        Iterator<Map.Entry<K,V>> entryIterator() {
-            return new SubMapEntryIterator();
-        }
-
-        /**
-         * Variant of main Iter class to traverse through submaps.
-         */
-        abstract class SubMapIter<T> implements Iterator<T> {
-            /** the last node returned by next() */
-            Node<K,V> lastReturned;
-            /** the next node to return from next(); */
-            Node<K,V> next;
-            /** Cache of next value field to maintain weak consistency */
-            V nextValue;
-
-            SubMapIter() {
-                for (;;) {
-                    next = isDescending ? hiNode() : loNode();
-                    if (next == null)
-                        break;
-                    Object x = next.value;
-                    if (x != null && x != next) {
-                        if (! inBounds(next.key))
-                            next = null;
-                        else
-                            nextValue = (V) x;
-                        break;
-                    }
-                }
-            }
-
-            public final boolean hasNext() {
-                return next != null;
-            }
-
-            final void advance() {
-                if (next == null)
-                    throw new NoSuchElementException();
-                lastReturned = next;
-                if (isDescending)
-                    descend();
-                else
-                    ascend();
-            }
-
-            private void ascend() {
-                for (;;) {
-                    next = next.next;
-                    if (next == null)
-                        break;
-                    Object x = next.value;
-                    if (x != null && x != next) {
-                        if (tooHigh(next.key))
-                            next = null;
-                        else
-                            nextValue = (V) x;
-                        break;
-                    }
-                }
-            }
-
-            private void descend() {
-                for (;;) {
-                    next = m.findNear(lastReturned.key, LT);
-                    if (next == null)
-                        break;
-                    Object x = next.value;
-                    if (x != null && x != next) {
-                        if (tooLow(next.key))
-                            next = null;
-                        else
-                            nextValue = (V) x;
-                        break;
-                    }
-                }
-            }
-
-            public void remove() {
-                Node<K,V> l = lastReturned;
-                if (l == null)
-                    throw new IllegalStateException();
-                m.remove(l.key);
-                lastReturned = null;
-            }
-
-        }
-
-        final class SubMapValueIterator extends SubMapIter<V> {
-            public V next() {
-                V v = nextValue;
-                advance();
-                return v;
-            }
-        }
-
-        final class SubMapKeyIterator extends SubMapIter<K> {
-            public K next() {
-                Node<K,V> n = next;
-                advance();
-                return n.key;
-            }
-        }
-
-        final class SubMapEntryIterator extends SubMapIter<Map.Entry<K,V>> {
-            public Map.Entry<K,V> next() {
-                Node<K,V> n = next;
-                V v = nextValue;
-                advance();
-                return new AbstractMap.SimpleImmutableEntry<K,V>(n.key, v);
-            }
-        }
-    }
-
-    // Unsafe mechanics
-    private static final sun.misc.Unsafe UNSAFE;
-    private static final long headOffset;
-    static {
-        try {
-            UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = ConcurrentSkipListMap.class;
-            headOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("head"));
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ConcurrentSkipListSet.java b/ojluni/src/main/java/java/util/concurrent/ConcurrentSkipListSet.java
deleted file mode 100755
index 7b5dc79..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ConcurrentSkipListSet.java
+++ /dev/null
@@ -1,491 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.*;
-import sun.misc.Unsafe;
-
-/**
- * A scalable concurrent {@link NavigableSet} implementation based on
- * a {@link ConcurrentSkipListMap}.  The elements of the set are kept
- * sorted according to their {@linkplain Comparable natural ordering},
- * or by a {@link Comparator} provided at set creation time, depending
- * on which constructor is used.
- *
- * <p>This implementation provides expected average <i>log(n)</i> time
- * cost for the <tt>contains</tt>, <tt>add</tt>, and <tt>remove</tt>
- * operations and their variants.  Insertion, removal, and access
- * operations safely execute concurrently by multiple threads.
- * Iterators are <i>weakly consistent</i>, returning elements
- * reflecting the state of the set at some point at or since the
- * creation of the iterator.  They do <em>not</em> throw {@link
- * ConcurrentModificationException}, and may proceed concurrently with
- * other operations.  Ascending ordered views and their iterators are
- * faster than descending ones.
- *
- * <p>Beware that, unlike in most collections, the <tt>size</tt>
- * method is <em>not</em> a constant-time operation. Because of the
- * asynchronous nature of these sets, determining the current number
- * of elements requires a traversal of the elements, and so may report
- * inaccurate results if this collection is modified during traversal.
- * Additionally, the bulk operations <tt>addAll</tt>,
- * <tt>removeAll</tt>, <tt>retainAll</tt>, <tt>containsAll</tt>,
- * <tt>equals</tt>, and <tt>toArray</tt> are <em>not</em> guaranteed
- * to be performed atomically. For example, an iterator operating
- * concurrently with an <tt>addAll</tt> operation might view only some
- * of the added elements.
- *
- * <p>This class and its iterators implement all of the
- * <em>optional</em> methods of the {@link Set} and {@link Iterator}
- * interfaces. Like most other concurrent collection implementations,
- * this class does not permit the use of <tt>null</tt> elements,
- * because <tt>null</tt> arguments and return values cannot be reliably
- * distinguished from the absence of elements.
- *
- * <p>This class is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @author Doug Lea
- * @param <E> the type of elements maintained by this set
- * @since 1.6
- */
-public class ConcurrentSkipListSet<E>
-    extends AbstractSet<E>
-    implements NavigableSet<E>, Cloneable, java.io.Serializable {
-
-    private static final long serialVersionUID = -2479143111061671589L;
-
-    /**
-     * The underlying map. Uses Boolean.TRUE as value for each
-     * element.  This field is declared final for the sake of thread
-     * safety, which entails some ugliness in clone()
-     */
-    private final ConcurrentNavigableMap<E,Object> m;
-
-    /**
-     * Constructs a new, empty set that orders its elements according to
-     * their {@linkplain Comparable natural ordering}.
-     */
-    public ConcurrentSkipListSet() {
-        m = new ConcurrentSkipListMap<E,Object>();
-    }
-
-    /**
-     * Constructs a new, empty set that orders its elements according to
-     * the specified comparator.
-     *
-     * @param comparator the comparator that will be used to order this set.
-     *        If <tt>null</tt>, the {@linkplain Comparable natural
-     *        ordering} of the elements will be used.
-     */
-    public ConcurrentSkipListSet(Comparator<? super E> comparator) {
-        m = new ConcurrentSkipListMap<E,Object>(comparator);
-    }
-
-    /**
-     * Constructs a new set containing the elements in the specified
-     * collection, that orders its elements according to their
-     * {@linkplain Comparable natural ordering}.
-     *
-     * @param c The elements that will comprise the new set
-     * @throws ClassCastException if the elements in <tt>c</tt> are
-     *         not {@link Comparable}, or are not mutually comparable
-     * @throws NullPointerException if the specified collection or any
-     *         of its elements are null
-     */
-    public ConcurrentSkipListSet(Collection<? extends E> c) {
-        m = new ConcurrentSkipListMap<E,Object>();
-        addAll(c);
-    }
-
-    /**
-     * Constructs a new set containing the same elements and using the
-     * same ordering as the specified sorted set.
-     *
-     * @param s sorted set whose elements will comprise the new set
-     * @throws NullPointerException if the specified sorted set or any
-     *         of its elements are null
-     */
-    public ConcurrentSkipListSet(SortedSet<E> s) {
-        m = new ConcurrentSkipListMap<E,Object>(s.comparator());
-        addAll(s);
-    }
-
-    /**
-     * For use by submaps
-     */
-    ConcurrentSkipListSet(ConcurrentNavigableMap<E,Object> m) {
-        this.m = m;
-    }
-
-    /**
-     * Returns a shallow copy of this <tt>ConcurrentSkipListSet</tt>
-     * instance. (The elements themselves are not cloned.)
-     *
-     * @return a shallow copy of this set
-     */
-    public ConcurrentSkipListSet<E> clone() {
-        ConcurrentSkipListSet<E> clone = null;
-        try {
-            clone = (ConcurrentSkipListSet<E>) super.clone();
-            clone.setMap(new ConcurrentSkipListMap(m));
-        } catch (CloneNotSupportedException e) {
-            throw new InternalError();
-        }
-
-        return clone;
-    }
-
-    /* ---------------- Set operations -------------- */
-
-    /**
-     * Returns the number of elements in this set.  If this set
-     * contains more than <tt>Integer.MAX_VALUE</tt> elements, it
-     * returns <tt>Integer.MAX_VALUE</tt>.
-     *
-     * <p>Beware that, unlike in most collections, this method is
-     * <em>NOT</em> a constant-time operation. Because of the
-     * asynchronous nature of these sets, determining the current
-     * number of elements requires traversing them all to count them.
-     * Additionally, it is possible for the size to change during
-     * execution of this method, in which case the returned result
-     * will be inaccurate. Thus, this method is typically not very
-     * useful in concurrent applications.
-     *
-     * @return the number of elements in this set
-     */
-    public int size() {
-        return m.size();
-    }
-
-    /**
-     * Returns <tt>true</tt> if this set contains no elements.
-     * @return <tt>true</tt> if this set contains no elements
-     */
-    public boolean isEmpty() {
-        return m.isEmpty();
-    }
-
-    /**
-     * Returns <tt>true</tt> if this set contains the specified element.
-     * More formally, returns <tt>true</tt> if and only if this set
-     * contains an element <tt>e</tt> such that <tt>o.equals(e)</tt>.
-     *
-     * @param o object to be checked for containment in this set
-     * @return <tt>true</tt> if this set contains the specified element
-     * @throws ClassCastException if the specified element cannot be
-     *         compared with the elements currently in this set
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean contains(Object o) {
-        return m.containsKey(o);
-    }
-
-    /**
-     * Adds the specified element to this set if it is not already present.
-     * More formally, adds the specified element <tt>e</tt> to this set if
-     * the set contains no element <tt>e2</tt> such that <tt>e.equals(e2)</tt>.
-     * If this set already contains the element, the call leaves the set
-     * unchanged and returns <tt>false</tt>.
-     *
-     * @param e element to be added to this set
-     * @return <tt>true</tt> if this set did not already contain the
-     *         specified element
-     * @throws ClassCastException if <tt>e</tt> cannot be compared
-     *         with the elements currently in this set
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean add(E e) {
-        return m.putIfAbsent(e, Boolean.TRUE) == null;
-    }
-
-    /**
-     * Removes the specified element from this set if it is present.
-     * More formally, removes an element <tt>e</tt> such that
-     * <tt>o.equals(e)</tt>, if this set contains such an element.
-     * Returns <tt>true</tt> if this set contained the element (or
-     * equivalently, if this set changed as a result of the call).
-     * (This set will not contain the element once the call returns.)
-     *
-     * @param o object to be removed from this set, if present
-     * @return <tt>true</tt> if this set contained the specified element
-     * @throws ClassCastException if <tt>o</tt> cannot be compared
-     *         with the elements currently in this set
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean remove(Object o) {
-        return m.remove(o, Boolean.TRUE);
-    }
-
-    /**
-     * Removes all of the elements from this set.
-     */
-    public void clear() {
-        m.clear();
-    }
-
-    /**
-     * Returns an iterator over the elements in this set in ascending order.
-     *
-     * @return an iterator over the elements in this set in ascending order
-     */
-    public Iterator<E> iterator() {
-        return m.navigableKeySet().iterator();
-    }
-
-    /**
-     * Returns an iterator over the elements in this set in descending order.
-     *
-     * @return an iterator over the elements in this set in descending order
-     */
-    public Iterator<E> descendingIterator() {
-        return m.descendingKeySet().iterator();
-    }
-
-
-    /* ---------------- AbstractSet Overrides -------------- */
-
-    /**
-     * Compares the specified object with this set for equality.  Returns
-     * <tt>true</tt> if the specified object is also a set, the two sets
-     * have the same size, and every member of the specified set is
-     * contained in this set (or equivalently, every member of this set is
-     * contained in the specified set).  This definition ensures that the
-     * equals method works properly across different implementations of the
-     * set interface.
-     *
-     * @param o the object to be compared for equality with this set
-     * @return <tt>true</tt> if the specified object is equal to this set
-     */
-    public boolean equals(Object o) {
-        // Override AbstractSet version to avoid calling size()
-        if (o == this)
-            return true;
-        if (!(o instanceof Set))
-            return false;
-        Collection<?> c = (Collection<?>) o;
-        try {
-            return containsAll(c) && c.containsAll(this);
-        } catch (ClassCastException unused)   {
-            return false;
-        } catch (NullPointerException unused) {
-            return false;
-        }
-    }
-
-    /**
-     * Removes from this set all of its elements that are contained in
-     * the specified collection.  If the specified collection is also
-     * a set, this operation effectively modifies this set so that its
-     * value is the <i>asymmetric set difference</i> of the two sets.
-     *
-     * @param  c collection containing elements to be removed from this set
-     * @return <tt>true</tt> if this set changed as a result of the call
-     * @throws ClassCastException if the types of one or more elements in this
-     *         set are incompatible with the specified collection
-     * @throws NullPointerException if the specified collection or any
-     *         of its elements are null
-     */
-    public boolean removeAll(Collection<?> c) {
-        // Override AbstractSet version to avoid unnecessary call to size()
-        boolean modified = false;
-        for (Iterator<?> i = c.iterator(); i.hasNext(); )
-            if (remove(i.next()))
-                modified = true;
-        return modified;
-    }
-
-    /* ---------------- Relational operations -------------- */
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified element is null
-     */
-    public E lower(E e) {
-        return m.lowerKey(e);
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified element is null
-     */
-    public E floor(E e) {
-        return m.floorKey(e);
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified element is null
-     */
-    public E ceiling(E e) {
-        return m.ceilingKey(e);
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if the specified element is null
-     */
-    public E higher(E e) {
-        return m.higherKey(e);
-    }
-
-    public E pollFirst() {
-        Map.Entry<E,Object> e = m.pollFirstEntry();
-        return (e == null) ? null : e.getKey();
-    }
-
-    public E pollLast() {
-        Map.Entry<E,Object> e = m.pollLastEntry();
-        return (e == null) ? null : e.getKey();
-    }
-
-
-    /* ---------------- SortedSet operations -------------- */
-
-
-    public Comparator<? super E> comparator() {
-        return m.comparator();
-    }
-
-    /**
-     * @throws NoSuchElementException {@inheritDoc}
-     */
-    public E first() {
-        return m.firstKey();
-    }
-
-    /**
-     * @throws NoSuchElementException {@inheritDoc}
-     */
-    public E last() {
-        return m.lastKey();
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if {@code fromElement} or
-     *         {@code toElement} is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    public NavigableSet<E> subSet(E fromElement,
-                                  boolean fromInclusive,
-                                  E toElement,
-                                  boolean toInclusive) {
-        return new ConcurrentSkipListSet<E>
-            (m.subMap(fromElement, fromInclusive,
-                      toElement,   toInclusive));
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if {@code toElement} is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    public NavigableSet<E> headSet(E toElement, boolean inclusive) {
-        return new ConcurrentSkipListSet<E>(m.headMap(toElement, inclusive));
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if {@code fromElement} is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {
-        return new ConcurrentSkipListSet<E>(m.tailMap(fromElement, inclusive));
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if {@code fromElement} or
-     *         {@code toElement} is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    public NavigableSet<E> subSet(E fromElement, E toElement) {
-        return subSet(fromElement, true, toElement, false);
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if {@code toElement} is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    public NavigableSet<E> headSet(E toElement) {
-        return headSet(toElement, false);
-    }
-
-    /**
-     * @throws ClassCastException {@inheritDoc}
-     * @throws NullPointerException if {@code fromElement} is null
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    public NavigableSet<E> tailSet(E fromElement) {
-        return tailSet(fromElement, true);
-    }
-
-    /**
-     * Returns a reverse order view of the elements contained in this set.
-     * The descending set is backed by this set, so changes to the set are
-     * reflected in the descending set, and vice-versa.
-     *
-     * <p>The returned set has an ordering equivalent to
-     * <tt>{@link Collections#reverseOrder(Comparator) Collections.reverseOrder}(comparator())</tt>.
-     * The expression {@code s.descendingSet().descendingSet()} returns a
-     * view of {@code s} essentially equivalent to {@code s}.
-     *
-     * @return a reverse order view of this set
-     */
-    public NavigableSet<E> descendingSet() {
-        return new ConcurrentSkipListSet(m.descendingMap());
-    }
-
-    // Support for resetting map in clone
-    private void setMap(ConcurrentNavigableMap<E,Object> map) {
-        UNSAFE.putObjectVolatile(this, mapOffset, map);
-    }
-
-    private static final sun.misc.Unsafe UNSAFE;
-    private static final long mapOffset;
-    static {
-        try {
-            UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = ConcurrentSkipListSet.class;
-            mapOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("m"));
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/CopyOnWriteArrayList.java b/ojluni/src/main/java/java/util/concurrent/CopyOnWriteArrayList.java
deleted file mode 100755
index 785ec6f..0000000
--- a/ojluni/src/main/java/java/util/concurrent/CopyOnWriteArrayList.java
+++ /dev/null
@@ -1,1340 +0,0 @@
-/*
- * Copyright (c) 2003, 2011, 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.
- */
-
-/*
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group.  Adapted and released, under explicit permission,
- * from JDK ArrayList.java which carries the following copyright:
- *
- * Copyright 1997 by Sun Microsystems, Inc.,
- * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
- * All rights reserved.
- */
-
-package java.util.concurrent;
-import java.util.*;
-import java.util.concurrent.locks.*;
-import sun.misc.Unsafe;
-
-/**
- * A thread-safe variant of {@link java.util.ArrayList} in which all mutative
- * operations (<tt>add</tt>, <tt>set</tt>, and so on) are implemented by
- * making a fresh copy of the underlying array.
- *
- * <p> This is ordinarily too costly, but may be <em>more</em> efficient
- * than alternatives when traversal operations vastly outnumber
- * mutations, and is useful when you cannot or don't want to
- * synchronize traversals, yet need to preclude interference among
- * concurrent threads.  The "snapshot" style iterator method uses a
- * reference to the state of the array at the point that the iterator
- * was created. This array never changes during the lifetime of the
- * iterator, so interference is impossible and the iterator is
- * guaranteed not to throw <tt>ConcurrentModificationException</tt>.
- * The iterator will not reflect additions, removals, or changes to
- * the list since the iterator was created.  Element-changing
- * operations on iterators themselves (<tt>remove</tt>, <tt>set</tt>, and
- * <tt>add</tt>) are not supported. These methods throw
- * <tt>UnsupportedOperationException</tt>.
- *
- * <p>All elements are permitted, including <tt>null</tt>.
- *
- * <p>Memory consistency effects: As with other concurrent
- * collections, actions in a thread prior to placing an object into a
- * {@code CopyOnWriteArrayList}
- * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
- * actions subsequent to the access or removal of that element from
- * the {@code CopyOnWriteArrayList} in another thread.
- *
- * <p>This class is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @since 1.5
- * @author Doug Lea
- * @param <E> the type of elements held in this collection
- */
-public class CopyOnWriteArrayList<E>
-    implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
-    private static final long serialVersionUID = 8673264195747942595L;
-
-    /** The lock protecting all mutators */
-    transient final ReentrantLock lock = new ReentrantLock();
-
-    /** The array, accessed only via getArray/setArray. */
-    private volatile transient Object[] array;
-
-    /**
-     * Gets the array.  Non-private so as to also be accessible
-     * from CopyOnWriteArraySet class.
-     */
-    final Object[] getArray() {
-        return array;
-    }
-
-    /**
-     * Sets the array.
-     */
-    final void setArray(Object[] a) {
-        array = a;
-    }
-
-    /**
-     * Creates an empty list.
-     */
-    public CopyOnWriteArrayList() {
-        setArray(new Object[0]);
-    }
-
-    /**
-     * Creates a list containing the elements of the specified
-     * collection, in the order they are returned by the collection's
-     * iterator.
-     *
-     * @param c the collection of initially held elements
-     * @throws NullPointerException if the specified collection is null
-     */
-    public CopyOnWriteArrayList(Collection<? extends E> c) {
-        Object[] elements = c.toArray();
-        // c.toArray might (incorrectly) not return Object[] (see 6260652)
-        if (elements.getClass() != Object[].class)
-            elements = Arrays.copyOf(elements, elements.length, Object[].class);
-        setArray(elements);
-    }
-
-    /**
-     * Creates a list holding a copy of the given array.
-     *
-     * @param toCopyIn the array (a copy of this array is used as the
-     *        internal array)
-     * @throws NullPointerException if the specified array is null
-     */
-    public CopyOnWriteArrayList(E[] toCopyIn) {
-        setArray(Arrays.copyOf(toCopyIn, toCopyIn.length, Object[].class));
-    }
-
-    /**
-     * Returns the number of elements in this list.
-     *
-     * @return the number of elements in this list
-     */
-    public int size() {
-        return getArray().length;
-    }
-
-    /**
-     * Returns <tt>true</tt> if this list contains no elements.
-     *
-     * @return <tt>true</tt> if this list contains no elements
-     */
-    public boolean isEmpty() {
-        return size() == 0;
-    }
-
-    /**
-     * Test for equality, coping with nulls.
-     */
-    private static boolean eq(Object o1, Object o2) {
-        return (o1 == null ? o2 == null : o1.equals(o2));
-    }
-
-    /**
-     * static version of indexOf, to allow repeated calls without
-     * needing to re-acquire array each time.
-     * @param o element to search for
-     * @param elements the array
-     * @param index first index to search
-     * @param fence one past last index to search
-     * @return index of element, or -1 if absent
-     */
-    private static int indexOf(Object o, Object[] elements,
-                               int index, int fence) {
-        if (o == null) {
-            for (int i = index; i < fence; i++)
-                if (elements[i] == null)
-                    return i;
-        } else {
-            for (int i = index; i < fence; i++)
-                if (o.equals(elements[i]))
-                    return i;
-        }
-        return -1;
-    }
-
-    /**
-     * static version of lastIndexOf.
-     * @param o element to search for
-     * @param elements the array
-     * @param index first index to search
-     * @return index of element, or -1 if absent
-     */
-    private static int lastIndexOf(Object o, Object[] elements, int index) {
-        if (o == null) {
-            for (int i = index; i >= 0; i--)
-                if (elements[i] == null)
-                    return i;
-        } else {
-            for (int i = index; i >= 0; i--)
-                if (o.equals(elements[i]))
-                    return i;
-        }
-        return -1;
-    }
-
-    /**
-     * Returns <tt>true</tt> if this list contains the specified element.
-     * More formally, returns <tt>true</tt> if and only if this list contains
-     * at least one element <tt>e</tt> such that
-     * <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
-     *
-     * @param o element whose presence in this list is to be tested
-     * @return <tt>true</tt> if this list contains the specified element
-     */
-    public boolean contains(Object o) {
-        Object[] elements = getArray();
-        return indexOf(o, elements, 0, elements.length) >= 0;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public int indexOf(Object o) {
-        Object[] elements = getArray();
-        return indexOf(o, elements, 0, elements.length);
-    }
-
-    /**
-     * Returns the index of the first occurrence of the specified element in
-     * this list, searching forwards from <tt>index</tt>, or returns -1 if
-     * the element is not found.
-     * More formally, returns the lowest index <tt>i</tt> such that
-     * <tt>(i&nbsp;&gt;=&nbsp;index&nbsp;&amp;&amp;&nbsp;(e==null&nbsp;?&nbsp;get(i)==null&nbsp;:&nbsp;e.equals(get(i))))</tt>,
-     * or -1 if there is no such index.
-     *
-     * @param e element to search for
-     * @param index index to start searching from
-     * @return the index of the first occurrence of the element in
-     *         this list at position <tt>index</tt> or later in the list;
-     *         <tt>-1</tt> if the element is not found.
-     * @throws IndexOutOfBoundsException if the specified index is negative
-     */
-    public int indexOf(E e, int index) {
-        Object[] elements = getArray();
-        return indexOf(e, elements, index, elements.length);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public int lastIndexOf(Object o) {
-        Object[] elements = getArray();
-        return lastIndexOf(o, elements, elements.length - 1);
-    }
-
-    /**
-     * Returns the index of the last occurrence of the specified element in
-     * this list, searching backwards from <tt>index</tt>, or returns -1 if
-     * the element is not found.
-     * More formally, returns the highest index <tt>i</tt> such that
-     * <tt>(i&nbsp;&lt;=&nbsp;index&nbsp;&amp;&amp;&nbsp;(e==null&nbsp;?&nbsp;get(i)==null&nbsp;:&nbsp;e.equals(get(i))))</tt>,
-     * or -1 if there is no such index.
-     *
-     * @param e element to search for
-     * @param index index to start searching backwards from
-     * @return the index of the last occurrence of the element at position
-     *         less than or equal to <tt>index</tt> in this list;
-     *         -1 if the element is not found.
-     * @throws IndexOutOfBoundsException if the specified index is greater
-     *         than or equal to the current size of this list
-     */
-    public int lastIndexOf(E e, int index) {
-        Object[] elements = getArray();
-        return lastIndexOf(e, elements, index);
-    }
-
-    /**
-     * Returns a shallow copy of this list.  (The elements themselves
-     * are not copied.)
-     *
-     * @return a clone of this list
-     */
-    public Object clone() {
-        try {
-            CopyOnWriteArrayList c = (CopyOnWriteArrayList)(super.clone());
-            c.resetLock();
-            return c;
-        } catch (CloneNotSupportedException e) {
-            // this shouldn't happen, since we are Cloneable
-            throw new InternalError();
-        }
-    }
-
-    /**
-     * Returns an array containing all of the elements in this list
-     * in proper sequence (from first to last element).
-     *
-     * <p>The returned array will be "safe" in that no references to it are
-     * maintained by this list.  (In other words, this method must allocate
-     * a new array).  The caller is thus free to modify the returned array.
-     *
-     * <p>This method acts as bridge between array-based and collection-based
-     * APIs.
-     *
-     * @return an array containing all the elements in this list
-     */
-    public Object[] toArray() {
-        Object[] elements = getArray();
-        return Arrays.copyOf(elements, elements.length);
-    }
-
-    /**
-     * Returns an array containing all of the elements in this list in
-     * proper sequence (from first to last element); the runtime type of
-     * the returned array is that of the specified array.  If the list fits
-     * in the specified array, it is returned therein.  Otherwise, a new
-     * array is allocated with the runtime type of the specified array and
-     * the size of this list.
-     *
-     * <p>If this list fits in the specified array with room to spare
-     * (i.e., the array has more elements than this list), the element in
-     * the array immediately following the end of the list is set to
-     * <tt>null</tt>.  (This is useful in determining the length of this
-     * list <i>only</i> if the caller knows that this list does not contain
-     * any null elements.)
-     *
-     * <p>Like the {@link #toArray()} method, this method acts as bridge between
-     * array-based and collection-based APIs.  Further, this method allows
-     * precise control over the runtime type of the output array, and may,
-     * under certain circumstances, be used to save allocation costs.
-     *
-     * <p>Suppose <tt>x</tt> is a list known to contain only strings.
-     * The following code can be used to dump the list into a newly
-     * allocated array of <tt>String</tt>:
-     *
-     * <pre>
-     *     String[] y = x.toArray(new String[0]);</pre>
-     *
-     * Note that <tt>toArray(new Object[0])</tt> is identical in function to
-     * <tt>toArray()</tt>.
-     *
-     * @param a the array into which the elements of the list are to
-     *          be stored, if it is big enough; otherwise, a new array of the
-     *          same runtime type is allocated for this purpose.
-     * @return an array containing all the elements in this list
-     * @throws ArrayStoreException if the runtime type of the specified array
-     *         is not a supertype of the runtime type of every element in
-     *         this list
-     * @throws NullPointerException if the specified array is null
-     */
-    @SuppressWarnings("unchecked")
-    public <T> T[] toArray(T a[]) {
-        Object[] elements = getArray();
-        int len = elements.length;
-        if (a.length < len)
-            return (T[]) Arrays.copyOf(elements, len, a.getClass());
-        else {
-            System.arraycopy(elements, 0, a, 0, len);
-            if (a.length > len)
-                a[len] = null;
-            return a;
-        }
-    }
-
-    // Positional Access Operations
-
-    @SuppressWarnings("unchecked")
-    private E get(Object[] a, int index) {
-        return (E) a[index];
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * @throws IndexOutOfBoundsException {@inheritDoc}
-     */
-    public E get(int index) {
-        return get(getArray(), index);
-    }
-
-    /**
-     * Replaces the element at the specified position in this list with the
-     * specified element.
-     *
-     * @throws IndexOutOfBoundsException {@inheritDoc}
-     */
-    public E set(int index, E element) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            Object[] elements = getArray();
-            E oldValue = get(elements, index);
-
-            if (oldValue != element) {
-                int len = elements.length;
-                Object[] newElements = Arrays.copyOf(elements, len);
-                newElements[index] = element;
-                setArray(newElements);
-            } else {
-                // Not quite a no-op; ensures volatile write semantics
-                setArray(elements);
-            }
-            return oldValue;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Appends the specified element to the end of this list.
-     *
-     * @param e element to be appended to this list
-     * @return <tt>true</tt> (as specified by {@link Collection#add})
-     */
-    public boolean add(E e) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            Object[] elements = getArray();
-            int len = elements.length;
-            Object[] newElements = Arrays.copyOf(elements, len + 1);
-            newElements[len] = e;
-            setArray(newElements);
-            return true;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Inserts the specified element at the specified position in this
-     * list. Shifts the element currently at that position (if any) and
-     * any subsequent elements to the right (adds one to their indices).
-     *
-     * @throws IndexOutOfBoundsException {@inheritDoc}
-     */
-    public void add(int index, E element) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            Object[] elements = getArray();
-            int len = elements.length;
-            if (index > len || index < 0)
-                throw new IndexOutOfBoundsException("Index: "+index+
-                                                    ", Size: "+len);
-            Object[] newElements;
-            int numMoved = len - index;
-            if (numMoved == 0)
-                newElements = Arrays.copyOf(elements, len + 1);
-            else {
-                newElements = new Object[len + 1];
-                System.arraycopy(elements, 0, newElements, 0, index);
-                System.arraycopy(elements, index, newElements, index + 1,
-                                 numMoved);
-            }
-            newElements[index] = element;
-            setArray(newElements);
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Removes the element at the specified position in this list.
-     * Shifts any subsequent elements to the left (subtracts one from their
-     * indices).  Returns the element that was removed from the list.
-     *
-     * @throws IndexOutOfBoundsException {@inheritDoc}
-     */
-    public E remove(int index) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            Object[] elements = getArray();
-            int len = elements.length;
-            E oldValue = get(elements, index);
-            int numMoved = len - index - 1;
-            if (numMoved == 0)
-                setArray(Arrays.copyOf(elements, len - 1));
-            else {
-                Object[] newElements = new Object[len - 1];
-                System.arraycopy(elements, 0, newElements, 0, index);
-                System.arraycopy(elements, index + 1, newElements, index,
-                                 numMoved);
-                setArray(newElements);
-            }
-            return oldValue;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Removes the first occurrence of the specified element from this list,
-     * if it is present.  If this list does not contain the element, it is
-     * unchanged.  More formally, removes the element with the lowest index
-     * <tt>i</tt> such that
-     * <tt>(o==null&nbsp;?&nbsp;get(i)==null&nbsp;:&nbsp;o.equals(get(i)))</tt>
-     * (if such an element exists).  Returns <tt>true</tt> if this list
-     * contained the specified element (or equivalently, if this list
-     * changed as a result of the call).
-     *
-     * @param o element to be removed from this list, if present
-     * @return <tt>true</tt> if this list contained the specified element
-     */
-    public boolean remove(Object o) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            Object[] elements = getArray();
-            int len = elements.length;
-            if (len != 0) {
-                // Copy while searching for element to remove
-                // This wins in the normal case of element being present
-                int newlen = len - 1;
-                Object[] newElements = new Object[newlen];
-
-                for (int i = 0; i < newlen; ++i) {
-                    if (eq(o, elements[i])) {
-                        // found one;  copy remaining and exit
-                        for (int k = i + 1; k < len; ++k)
-                            newElements[k-1] = elements[k];
-                        setArray(newElements);
-                        return true;
-                    } else
-                        newElements[i] = elements[i];
-                }
-
-                // special handling for last cell
-                if (eq(o, elements[newlen])) {
-                    setArray(newElements);
-                    return true;
-                }
-            }
-            return false;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Removes from this list all of the elements whose index is between
-     * <tt>fromIndex</tt>, inclusive, and <tt>toIndex</tt>, exclusive.
-     * Shifts any succeeding elements to the left (reduces their index).
-     * This call shortens the list by <tt>(toIndex - fromIndex)</tt> elements.
-     * (If <tt>toIndex==fromIndex</tt>, this operation has no effect.)
-     *
-     * @param fromIndex index of first element to be removed
-     * @param toIndex index after last element to be removed
-     * @throws IndexOutOfBoundsException if fromIndex or toIndex out of range
-     *         ({@code{fromIndex < 0 || toIndex > size() || toIndex < fromIndex})
-     */
-    private void removeRange(int fromIndex, int toIndex) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            Object[] elements = getArray();
-            int len = elements.length;
-
-            if (fromIndex < 0 || toIndex > len || toIndex < fromIndex)
-                throw new IndexOutOfBoundsException();
-            int newlen = len - (toIndex - fromIndex);
-            int numMoved = len - toIndex;
-            if (numMoved == 0)
-                setArray(Arrays.copyOf(elements, newlen));
-            else {
-                Object[] newElements = new Object[newlen];
-                System.arraycopy(elements, 0, newElements, 0, fromIndex);
-                System.arraycopy(elements, toIndex, newElements,
-                                 fromIndex, numMoved);
-                setArray(newElements);
-            }
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Append the element if not present.
-     *
-     * @param e element to be added to this list, if absent
-     * @return <tt>true</tt> if the element was added
-     */
-    public boolean addIfAbsent(E e) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            // Copy while checking if already present.
-            // This wins in the most common case where it is not present
-            Object[] elements = getArray();
-            int len = elements.length;
-            Object[] newElements = new Object[len + 1];
-            for (int i = 0; i < len; ++i) {
-                if (eq(e, elements[i]))
-                    return false; // exit, throwing away copy
-                else
-                    newElements[i] = elements[i];
-            }
-            newElements[len] = e;
-            setArray(newElements);
-            return true;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns <tt>true</tt> if this list contains all of the elements of the
-     * specified collection.
-     *
-     * @param c collection to be checked for containment in this list
-     * @return <tt>true</tt> if this list contains all of the elements of the
-     *         specified collection
-     * @throws NullPointerException if the specified collection is null
-     * @see #contains(Object)
-     */
-    public boolean containsAll(Collection<?> c) {
-        Object[] elements = getArray();
-        int len = elements.length;
-        for (Object e : c) {
-            if (indexOf(e, elements, 0, len) < 0)
-                return false;
-        }
-        return true;
-    }
-
-    /**
-     * Removes from this list all of its elements that are contained in
-     * the specified collection. This is a particularly expensive operation
-     * in this class because of the need for an internal temporary array.
-     *
-     * @param c collection containing elements to be removed from this list
-     * @return <tt>true</tt> if this list changed as a result of the call
-     * @throws ClassCastException if the class of an element of this list
-     *         is incompatible with the specified collection
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>)
-     * @throws NullPointerException if this list contains a null element and the
-     *         specified collection does not permit null elements
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>),
-     *         or if the specified collection is null
-     * @see #remove(Object)
-     */
-    public boolean removeAll(Collection<?> c) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            Object[] elements = getArray();
-            int len = elements.length;
-            if (len != 0) {
-                // temp array holds those elements we know we want to keep
-                int newlen = 0;
-                Object[] temp = new Object[len];
-                for (int i = 0; i < len; ++i) {
-                    Object element = elements[i];
-                    if (!c.contains(element))
-                        temp[newlen++] = element;
-                }
-                if (newlen != len) {
-                    setArray(Arrays.copyOf(temp, newlen));
-                    return true;
-                }
-            }
-            return false;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Retains only the elements in this list that are contained in the
-     * specified collection.  In other words, removes from this list all of
-     * its elements that are not contained in the specified collection.
-     *
-     * @param c collection containing elements to be retained in this list
-     * @return <tt>true</tt> if this list changed as a result of the call
-     * @throws ClassCastException if the class of an element of this list
-     *         is incompatible with the specified collection
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>)
-     * @throws NullPointerException if this list contains a null element and the
-     *         specified collection does not permit null elements
-     *         (<a href="../Collection.html#optional-restrictions">optional</a>),
-     *         or if the specified collection is null
-     * @see #remove(Object)
-     */
-    public boolean retainAll(Collection<?> c) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            Object[] elements = getArray();
-            int len = elements.length;
-            if (len != 0) {
-                // temp array holds those elements we know we want to keep
-                int newlen = 0;
-                Object[] temp = new Object[len];
-                for (int i = 0; i < len; ++i) {
-                    Object element = elements[i];
-                    if (c.contains(element))
-                        temp[newlen++] = element;
-                }
-                if (newlen != len) {
-                    setArray(Arrays.copyOf(temp, newlen));
-                    return true;
-                }
-            }
-            return false;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Appends all of the elements in the specified collection that
-     * are not already contained in this list, to the end of
-     * this list, in the order that they are returned by the
-     * specified collection's iterator.
-     *
-     * @param c collection containing elements to be added to this list
-     * @return the number of elements added
-     * @throws NullPointerException if the specified collection is null
-     * @see #addIfAbsent(Object)
-     */
-    public int addAllAbsent(Collection<? extends E> c) {
-        Object[] cs = c.toArray();
-        if (cs.length == 0)
-            return 0;
-        Object[] uniq = new Object[cs.length];
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            Object[] elements = getArray();
-            int len = elements.length;
-            int added = 0;
-            for (int i = 0; i < cs.length; ++i) { // scan for duplicates
-                Object e = cs[i];
-                if (indexOf(e, elements, 0, len) < 0 &&
-                    indexOf(e, uniq, 0, added) < 0)
-                    uniq[added++] = e;
-            }
-            if (added > 0) {
-                Object[] newElements = Arrays.copyOf(elements, len + added);
-                System.arraycopy(uniq, 0, newElements, len, added);
-                setArray(newElements);
-            }
-            return added;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Removes all of the elements from this list.
-     * The list will be empty after this call returns.
-     */
-    public void clear() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            setArray(new Object[0]);
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Appends all of the elements in the specified collection to the end
-     * of this list, in the order that they are returned by the specified
-     * collection's iterator.
-     *
-     * @param c collection containing elements to be added to this list
-     * @return <tt>true</tt> if this list changed as a result of the call
-     * @throws NullPointerException if the specified collection is null
-     * @see #add(Object)
-     */
-    public boolean addAll(Collection<? extends E> c) {
-        Object[] cs = c.toArray();
-        if (cs.length == 0)
-            return false;
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            Object[] elements = getArray();
-            int len = elements.length;
-            Object[] newElements = Arrays.copyOf(elements, len + cs.length);
-            System.arraycopy(cs, 0, newElements, len, cs.length);
-            setArray(newElements);
-            return true;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Inserts all of the elements in the specified collection into this
-     * list, starting at the specified position.  Shifts the element
-     * currently at that position (if any) and any subsequent elements to
-     * the right (increases their indices).  The new elements will appear
-     * in this list in the order that they are returned by the
-     * specified collection's iterator.
-     *
-     * @param index index at which to insert the first element
-     *        from the specified collection
-     * @param c collection containing elements to be added to this list
-     * @return <tt>true</tt> if this list changed as a result of the call
-     * @throws IndexOutOfBoundsException {@inheritDoc}
-     * @throws NullPointerException if the specified collection is null
-     * @see #add(int,Object)
-     */
-    public boolean addAll(int index, Collection<? extends E> c) {
-        Object[] cs = c.toArray();
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            Object[] elements = getArray();
-            int len = elements.length;
-            if (index > len || index < 0)
-                throw new IndexOutOfBoundsException("Index: "+index+
-                                                    ", Size: "+len);
-            if (cs.length == 0)
-                return false;
-            int numMoved = len - index;
-            Object[] newElements;
-            if (numMoved == 0)
-                newElements = Arrays.copyOf(elements, len + cs.length);
-            else {
-                newElements = new Object[len + cs.length];
-                System.arraycopy(elements, 0, newElements, 0, index);
-                System.arraycopy(elements, index,
-                                 newElements, index + cs.length,
-                                 numMoved);
-            }
-            System.arraycopy(cs, 0, newElements, index, cs.length);
-            setArray(newElements);
-            return true;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Saves the state of the list to a stream (that is, serializes it).
-     *
-     * @serialData The length of the array backing the list is emitted
-     *               (int), followed by all of its elements (each an Object)
-     *               in the proper order.
-     * @param s the stream
-     */
-    private void writeObject(java.io.ObjectOutputStream s)
-        throws java.io.IOException{
-
-        s.defaultWriteObject();
-
-        Object[] elements = getArray();
-        // Write out array length
-        s.writeInt(elements.length);
-
-        // Write out all elements in the proper order.
-        for (Object element : elements)
-            s.writeObject(element);
-    }
-
-    /**
-     * Reconstitutes the list from a stream (that is, deserializes it).
-     *
-     * @param s the stream
-     */
-    private void readObject(java.io.ObjectInputStream s)
-        throws java.io.IOException, ClassNotFoundException {
-
-        s.defaultReadObject();
-
-        // bind to new lock
-        resetLock();
-
-        // Read in array length and allocate array
-        int len = s.readInt();
-        Object[] elements = new Object[len];
-
-        // Read in all elements in the proper order.
-        for (int i = 0; i < len; i++)
-            elements[i] = s.readObject();
-        setArray(elements);
-    }
-
-    /**
-     * Returns a string representation of this list.  The string
-     * representation consists of the string representations of the list's
-     * elements in the order they are returned by its iterator, enclosed in
-     * square brackets (<tt>"[]"</tt>).  Adjacent elements are separated by
-     * the characters <tt>", "</tt> (comma and space).  Elements are
-     * converted to strings as by {@link String#valueOf(Object)}.
-     *
-     * @return a string representation of this list
-     */
-    public String toString() {
-        return Arrays.toString(getArray());
-    }
-
-    /**
-     * Compares the specified object with this list for equality.
-     * Returns {@code true} if the specified object is the same object
-     * as this object, or if it is also a {@link List} and the sequence
-     * of elements returned by an {@linkplain List#iterator() iterator}
-     * over the specified list is the same as the sequence returned by
-     * an iterator over this list.  The two sequences are considered to
-     * be the same if they have the same length and corresponding
-     * elements at the same position in the sequence are <em>equal</em>.
-     * Two elements {@code e1} and {@code e2} are considered
-     * <em>equal</em> if {@code (e1==null ? e2==null : e1.equals(e2))}.
-     *
-     * @param o the object to be compared for equality with this list
-     * @return {@code true} if the specified object is equal to this list
-     */
-    public boolean equals(Object o) {
-        if (o == this)
-            return true;
-        if (!(o instanceof List))
-            return false;
-
-        List<?> list = (List<?>)(o);
-        Iterator<?> it = list.iterator();
-        Object[] elements = getArray();
-        int len = elements.length;
-        for (int i = 0; i < len; ++i)
-            if (!it.hasNext() || !eq(elements[i], it.next()))
-                return false;
-        if (it.hasNext())
-            return false;
-        return true;
-    }
-
-    /**
-     * Returns the hash code value for this list.
-     *
-     * <p>This implementation uses the definition in {@link List#hashCode}.
-     *
-     * @return the hash code value for this list
-     */
-    public int hashCode() {
-        int hashCode = 1;
-        Object[] elements = getArray();
-        int len = elements.length;
-        for (int i = 0; i < len; ++i) {
-            Object obj = elements[i];
-            hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode());
-        }
-        return hashCode;
-    }
-
-    /**
-     * Returns an iterator over the elements in this list in proper sequence.
-     *
-     * <p>The returned iterator provides a snapshot of the state of the list
-     * when the iterator was constructed. No synchronization is needed while
-     * traversing the iterator. The iterator does <em>NOT</em> support the
-     * <tt>remove</tt> method.
-     *
-     * @return an iterator over the elements in this list in proper sequence
-     */
-    public Iterator<E> iterator() {
-        return new COWIterator<E>(getArray(), 0);
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * <p>The returned iterator provides a snapshot of the state of the list
-     * when the iterator was constructed. No synchronization is needed while
-     * traversing the iterator. The iterator does <em>NOT</em> support the
-     * <tt>remove</tt>, <tt>set</tt> or <tt>add</tt> methods.
-     */
-    public ListIterator<E> listIterator() {
-        return new COWIterator<E>(getArray(), 0);
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * <p>The returned iterator provides a snapshot of the state of the list
-     * when the iterator was constructed. No synchronization is needed while
-     * traversing the iterator. The iterator does <em>NOT</em> support the
-     * <tt>remove</tt>, <tt>set</tt> or <tt>add</tt> methods.
-     *
-     * @throws IndexOutOfBoundsException {@inheritDoc}
-     */
-    public ListIterator<E> listIterator(final int index) {
-        Object[] elements = getArray();
-        int len = elements.length;
-        if (index<0 || index>len)
-            throw new IndexOutOfBoundsException("Index: "+index);
-
-        return new COWIterator<E>(elements, index);
-    }
-
-    private static class COWIterator<E> implements ListIterator<E> {
-        /** Snapshot of the array */
-        private final Object[] snapshot;
-        /** Index of element to be returned by subsequent call to next.  */
-        private int cursor;
-
-        private COWIterator(Object[] elements, int initialCursor) {
-            cursor = initialCursor;
-            snapshot = elements;
-        }
-
-        public boolean hasNext() {
-            return cursor < snapshot.length;
-        }
-
-        public boolean hasPrevious() {
-            return cursor > 0;
-        }
-
-        @SuppressWarnings("unchecked")
-        public E next() {
-            if (! hasNext())
-                throw new NoSuchElementException();
-            return (E) snapshot[cursor++];
-        }
-
-        @SuppressWarnings("unchecked")
-        public E previous() {
-            if (! hasPrevious())
-                throw new NoSuchElementException();
-            return (E) snapshot[--cursor];
-        }
-
-        public int nextIndex() {
-            return cursor;
-        }
-
-        public int previousIndex() {
-            return cursor-1;
-        }
-
-        /**
-         * Not supported. Always throws UnsupportedOperationException.
-         * @throws UnsupportedOperationException always; <tt>remove</tt>
-         *         is not supported by this iterator.
-         */
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-        /**
-         * Not supported. Always throws UnsupportedOperationException.
-         * @throws UnsupportedOperationException always; <tt>set</tt>
-         *         is not supported by this iterator.
-         */
-        public void set(E e) {
-            throw new UnsupportedOperationException();
-        }
-
-        /**
-         * Not supported. Always throws UnsupportedOperationException.
-         * @throws UnsupportedOperationException always; <tt>add</tt>
-         *         is not supported by this iterator.
-         */
-        public void add(E e) {
-            throw new UnsupportedOperationException();
-        }
-    }
-
-    /**
-     * Returns a view of the portion of this list between
-     * <tt>fromIndex</tt>, inclusive, and <tt>toIndex</tt>, exclusive.
-     * The returned list is backed by this list, so changes in the
-     * returned list are reflected in this list.
-     *
-     * <p>The semantics of the list returned by this method become
-     * undefined if the backing list (i.e., this list) is modified in
-     * any way other than via the returned list.
-     *
-     * @param fromIndex low endpoint (inclusive) of the subList
-     * @param toIndex high endpoint (exclusive) of the subList
-     * @return a view of the specified range within this list
-     * @throws IndexOutOfBoundsException {@inheritDoc}
-     */
-    public List<E> subList(int fromIndex, int toIndex) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            Object[] elements = getArray();
-            int len = elements.length;
-            if (fromIndex < 0 || toIndex > len || fromIndex > toIndex)
-                throw new IndexOutOfBoundsException();
-            return new COWSubList<E>(this, fromIndex, toIndex);
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Sublist for CopyOnWriteArrayList.
-     * This class extends AbstractList merely for convenience, to
-     * avoid having to define addAll, etc. This doesn't hurt, but
-     * is wasteful.  This class does not need or use modCount
-     * mechanics in AbstractList, but does need to check for
-     * concurrent modification using similar mechanics.  On each
-     * operation, the array that we expect the backing list to use
-     * is checked and updated.  Since we do this for all of the
-     * base operations invoked by those defined in AbstractList,
-     * all is well.  While inefficient, this is not worth
-     * improving.  The kinds of list operations inherited from
-     * AbstractList are already so slow on COW sublists that
-     * adding a bit more space/time doesn't seem even noticeable.
-     */
-    private static class COWSubList<E>
-        extends AbstractList<E>
-        implements RandomAccess
-    {
-        private final CopyOnWriteArrayList<E> l;
-        private final int offset;
-        private int size;
-        private Object[] expectedArray;
-
-        // only call this holding l's lock
-        COWSubList(CopyOnWriteArrayList<E> list,
-                   int fromIndex, int toIndex) {
-            l = list;
-            expectedArray = l.getArray();
-            offset = fromIndex;
-            size = toIndex - fromIndex;
-        }
-
-        // only call this holding l's lock
-        private void checkForComodification() {
-            if (l.getArray() != expectedArray)
-                throw new ConcurrentModificationException();
-        }
-
-        // only call this holding l's lock
-        private void rangeCheck(int index) {
-            if (index<0 || index>=size)
-                throw new IndexOutOfBoundsException("Index: "+index+
-                                                    ",Size: "+size);
-        }
-
-        public E set(int index, E element) {
-            final ReentrantLock lock = l.lock;
-            lock.lock();
-            try {
-                rangeCheck(index);
-                checkForComodification();
-                E x = l.set(index+offset, element);
-                expectedArray = l.getArray();
-                return x;
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public E get(int index) {
-            final ReentrantLock lock = l.lock;
-            lock.lock();
-            try {
-                rangeCheck(index);
-                checkForComodification();
-                return l.get(index+offset);
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public int size() {
-            final ReentrantLock lock = l.lock;
-            lock.lock();
-            try {
-                checkForComodification();
-                return size;
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public void add(int index, E element) {
-            final ReentrantLock lock = l.lock;
-            lock.lock();
-            try {
-                checkForComodification();
-                if (index<0 || index>size)
-                    throw new IndexOutOfBoundsException();
-                l.add(index+offset, element);
-                expectedArray = l.getArray();
-                size++;
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public void clear() {
-            final ReentrantLock lock = l.lock;
-            lock.lock();
-            try {
-                checkForComodification();
-                l.removeRange(offset, offset+size);
-                expectedArray = l.getArray();
-                size = 0;
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public E remove(int index) {
-            final ReentrantLock lock = l.lock;
-            lock.lock();
-            try {
-                rangeCheck(index);
-                checkForComodification();
-                E result = l.remove(index+offset);
-                expectedArray = l.getArray();
-                size--;
-                return result;
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public boolean remove(Object o) {
-            int index = indexOf(o);
-            if (index == -1)
-                return false;
-            remove(index);
-            return true;
-        }
-
-        public Iterator<E> iterator() {
-            final ReentrantLock lock = l.lock;
-            lock.lock();
-            try {
-                checkForComodification();
-                return new COWSubListIterator<E>(l, 0, offset, size);
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public ListIterator<E> listIterator(final int index) {
-            final ReentrantLock lock = l.lock;
-            lock.lock();
-            try {
-                checkForComodification();
-                if (index<0 || index>size)
-                    throw new IndexOutOfBoundsException("Index: "+index+
-                                                        ", Size: "+size);
-                return new COWSubListIterator<E>(l, index, offset, size);
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public List<E> subList(int fromIndex, int toIndex) {
-            final ReentrantLock lock = l.lock;
-            lock.lock();
-            try {
-                checkForComodification();
-                if (fromIndex<0 || toIndex>size)
-                    throw new IndexOutOfBoundsException();
-                return new COWSubList<E>(l, fromIndex + offset,
-                                         toIndex + offset);
-            } finally {
-                lock.unlock();
-            }
-        }
-
-    }
-
-
-    private static class COWSubListIterator<E> implements ListIterator<E> {
-        private final ListIterator<E> i;
-        private final int index;
-        private final int offset;
-        private final int size;
-
-        COWSubListIterator(List<E> l, int index, int offset,
-                           int size) {
-            this.index = index;
-            this.offset = offset;
-            this.size = size;
-            i = l.listIterator(index+offset);
-        }
-
-        public boolean hasNext() {
-            return nextIndex() < size;
-        }
-
-        public E next() {
-            if (hasNext())
-                return i.next();
-            else
-                throw new NoSuchElementException();
-        }
-
-        public boolean hasPrevious() {
-            return previousIndex() >= 0;
-        }
-
-        public E previous() {
-            if (hasPrevious())
-                return i.previous();
-            else
-                throw new NoSuchElementException();
-        }
-
-        public int nextIndex() {
-            return i.nextIndex() - offset;
-        }
-
-        public int previousIndex() {
-            return i.previousIndex() - offset;
-        }
-
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-        public void set(E e) {
-            throw new UnsupportedOperationException();
-        }
-
-        public void add(E e) {
-            throw new UnsupportedOperationException();
-        }
-    }
-
-    // Support for resetting lock while deserializing
-    private void resetLock() {
-        UNSAFE.putObjectVolatile(this, lockOffset, new ReentrantLock());
-    }
-    private static final sun.misc.Unsafe UNSAFE;
-    private static final long lockOffset;
-    static {
-        try {
-            UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = CopyOnWriteArrayList.class;
-            lockOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("lock"));
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/CopyOnWriteArraySet.java b/ojluni/src/main/java/java/util/concurrent/CopyOnWriteArraySet.java
deleted file mode 100755
index d518048..0000000
--- a/ojluni/src/main/java/java/util/concurrent/CopyOnWriteArraySet.java
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.*;
-
-/**
- * A {@link java.util.Set} that uses an internal {@link CopyOnWriteArrayList}
- * for all of its operations.  Thus, it shares the same basic properties:
- * <ul>
- *  <li>It is best suited for applications in which set sizes generally
- *       stay small, read-only operations
- *       vastly outnumber mutative operations, and you need
- *       to prevent interference among threads during traversal.
- *  <li>It is thread-safe.
- *  <li>Mutative operations (<tt>add</tt>, <tt>set</tt>, <tt>remove</tt>, etc.)
- *      are expensive since they usually entail copying the entire underlying
- *      array.
- *  <li>Iterators do not support the mutative <tt>remove</tt> operation.
- *  <li>Traversal via iterators is fast and cannot encounter
- *      interference from other threads. Iterators rely on
- *      unchanging snapshots of the array at the time the iterators were
- *      constructed.
- * </ul>
- *
- * <p> <b>Sample Usage.</b> The following code sketch uses a
- * copy-on-write set to maintain a set of Handler objects that
- * perform some action upon state updates.
- *
- *  <pre> {@code
- * class Handler { void handle(); ... }
- *
- * class X {
- *   private final CopyOnWriteArraySet<Handler> handlers
- *     = new CopyOnWriteArraySet<Handler>();
- *   public void addHandler(Handler h) { handlers.add(h); }
- *
- *   private long internalState;
- *   private synchronized void changeState() { internalState = ...; }
- *
- *   public void update() {
- *     changeState();
- *     for (Handler handler : handlers)
- *        handler.handle();
- *   }
- * }}</pre>
- *
- * <p>This class is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @see CopyOnWriteArrayList
- * @since 1.5
- * @author Doug Lea
- * @param <E> the type of elements held in this collection
- */
-public class CopyOnWriteArraySet<E> extends AbstractSet<E>
-        implements java.io.Serializable {
-    private static final long serialVersionUID = 5457747651344034263L;
-
-    private final CopyOnWriteArrayList<E> al;
-
-    /**
-     * Creates an empty set.
-     */
-    public CopyOnWriteArraySet() {
-        al = new CopyOnWriteArrayList<E>();
-    }
-
-    /**
-     * Creates a set containing all of the elements of the specified
-     * collection.
-     *
-     * @param c the collection of elements to initially contain
-     * @throws NullPointerException if the specified collection is null
-     */
-    public CopyOnWriteArraySet(Collection<? extends E> c) {
-        al = new CopyOnWriteArrayList<E>();
-        al.addAllAbsent(c);
-    }
-
-    /**
-     * Returns the number of elements in this set.
-     *
-     * @return the number of elements in this set
-     */
-    public int size() {
-        return al.size();
-    }
-
-    /**
-     * Returns <tt>true</tt> if this set contains no elements.
-     *
-     * @return <tt>true</tt> if this set contains no elements
-     */
-    public boolean isEmpty() {
-        return al.isEmpty();
-    }
-
-    /**
-     * Returns <tt>true</tt> if this set contains the specified element.
-     * More formally, returns <tt>true</tt> if and only if this set
-     * contains an element <tt>e</tt> such that
-     * <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
-     *
-     * @param o element whose presence in this set is to be tested
-     * @return <tt>true</tt> if this set contains the specified element
-     */
-    public boolean contains(Object o) {
-        return al.contains(o);
-    }
-
-    /**
-     * Returns an array containing all of the elements in this set.
-     * If this set makes any guarantees as to what order its elements
-     * are returned by its iterator, this method must return the
-     * elements in the same order.
-     *
-     * <p>The returned array will be "safe" in that no references to it
-     * are maintained by this set.  (In other words, this method must
-     * allocate a new array even if this set is backed by an array).
-     * The caller is thus free to modify the returned array.
-     *
-     * <p>This method acts as bridge between array-based and collection-based
-     * APIs.
-     *
-     * @return an array containing all the elements in this set
-     */
-    public Object[] toArray() {
-        return al.toArray();
-    }
-
-    /**
-     * Returns an array containing all of the elements in this set; the
-     * runtime type of the returned array is that of the specified array.
-     * If the set fits in the specified array, it is returned therein.
-     * Otherwise, a new array is allocated with the runtime type of the
-     * specified array and the size of this set.
-     *
-     * <p>If this set fits in the specified array with room to spare
-     * (i.e., the array has more elements than this set), the element in
-     * the array immediately following the end of the set is set to
-     * <tt>null</tt>.  (This is useful in determining the length of this
-     * set <i>only</i> if the caller knows that this set does not contain
-     * any null elements.)
-     *
-     * <p>If this set makes any guarantees as to what order its elements
-     * are returned by its iterator, this method must return the elements
-     * in the same order.
-     *
-     * <p>Like the {@link #toArray()} method, this method acts as bridge between
-     * array-based and collection-based APIs.  Further, this method allows
-     * precise control over the runtime type of the output array, and may,
-     * under certain circumstances, be used to save allocation costs.
-     *
-     * <p>Suppose <tt>x</tt> is a set known to contain only strings.
-     * The following code can be used to dump the set into a newly allocated
-     * array of <tt>String</tt>:
-     *
-     * <pre>
-     *     String[] y = x.toArray(new String[0]);</pre>
-     *
-     * Note that <tt>toArray(new Object[0])</tt> is identical in function to
-     * <tt>toArray()</tt>.
-     *
-     * @param a the array into which the elements of this set are to be
-     *        stored, if it is big enough; otherwise, a new array of the same
-     *        runtime type is allocated for this purpose.
-     * @return an array containing all the elements in this set
-     * @throws ArrayStoreException if the runtime type of the specified array
-     *         is not a supertype of the runtime type of every element in this
-     *         set
-     * @throws NullPointerException if the specified array is null
-     */
-    public <T> T[] toArray(T[] a) {
-        return al.toArray(a);
-    }
-
-    /**
-     * Removes all of the elements from this set.
-     * The set will be empty after this call returns.
-     */
-    public void clear() {
-        al.clear();
-    }
-
-    /**
-     * Removes the specified element from this set if it is present.
-     * More formally, removes an element <tt>e</tt> such that
-     * <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>,
-     * if this set contains such an element.  Returns <tt>true</tt> if
-     * this set contained the element (or equivalently, if this set
-     * changed as a result of the call).  (This set will not contain the
-     * element once the call returns.)
-     *
-     * @param o object to be removed from this set, if present
-     * @return <tt>true</tt> if this set contained the specified element
-     */
-    public boolean remove(Object o) {
-        return al.remove(o);
-    }
-
-    /**
-     * Adds the specified element to this set if it is not already present.
-     * More formally, adds the specified element <tt>e</tt> to this set if
-     * the set contains no element <tt>e2</tt> such that
-     * <tt>(e==null&nbsp;?&nbsp;e2==null&nbsp;:&nbsp;e.equals(e2))</tt>.
-     * If this set already contains the element, the call leaves the set
-     * unchanged and returns <tt>false</tt>.
-     *
-     * @param e element to be added to this set
-     * @return <tt>true</tt> if this set did not already contain the specified
-     *         element
-     */
-    public boolean add(E e) {
-        return al.addIfAbsent(e);
-    }
-
-    /**
-     * Returns <tt>true</tt> if this set contains all of the elements of the
-     * specified collection.  If the specified collection is also a set, this
-     * method returns <tt>true</tt> if it is a <i>subset</i> of this set.
-     *
-     * @param  c collection to be checked for containment in this set
-     * @return <tt>true</tt> if this set contains all of the elements of the
-     *         specified collection
-     * @throws NullPointerException if the specified collection is null
-     * @see #contains(Object)
-     */
-    public boolean containsAll(Collection<?> c) {
-        return al.containsAll(c);
-    }
-
-    /**
-     * Adds all of the elements in the specified collection to this set if
-     * they're not already present.  If the specified collection is also a
-     * set, the <tt>addAll</tt> operation effectively modifies this set so
-     * that its value is the <i>union</i> of the two sets.  The behavior of
-     * this operation is undefined if the specified collection is modified
-     * while the operation is in progress.
-     *
-     * @param  c collection containing elements to be added to this set
-     * @return <tt>true</tt> if this set changed as a result of the call
-     * @throws NullPointerException if the specified collection is null
-     * @see #add(Object)
-     */
-    public boolean addAll(Collection<? extends E> c) {
-        return al.addAllAbsent(c) > 0;
-    }
-
-    /**
-     * Removes from this set all of its elements that are contained in the
-     * specified collection.  If the specified collection is also a set,
-     * this operation effectively modifies this set so that its value is the
-     * <i>asymmetric set difference</i> of the two sets.
-     *
-     * @param  c collection containing elements to be removed from this set
-     * @return <tt>true</tt> if this set changed as a result of the call
-     * @throws ClassCastException if the class of an element of this set
-     *         is incompatible with the specified collection (optional)
-     * @throws NullPointerException if this set contains a null element and the
-     *         specified collection does not permit null elements (optional),
-     *         or if the specified collection is null
-     * @see #remove(Object)
-     */
-    public boolean removeAll(Collection<?> c) {
-        return al.removeAll(c);
-    }
-
-    /**
-     * Retains only the elements in this set that are contained in the
-     * specified collection.  In other words, removes from this set all of
-     * its elements that are not contained in the specified collection.  If
-     * the specified collection is also a set, this operation effectively
-     * modifies this set so that its value is the <i>intersection</i> of the
-     * two sets.
-     *
-     * @param  c collection containing elements to be retained in this set
-     * @return <tt>true</tt> if this set changed as a result of the call
-     * @throws ClassCastException if the class of an element of this set
-     *         is incompatible with the specified collection (optional)
-     * @throws NullPointerException if this set contains a null element and the
-     *         specified collection does not permit null elements (optional),
-     *         or if the specified collection is null
-     * @see #remove(Object)
-     */
-    public boolean retainAll(Collection<?> c) {
-        return al.retainAll(c);
-    }
-
-    /**
-     * Returns an iterator over the elements contained in this set
-     * in the order in which these elements were added.
-     *
-     * <p>The returned iterator provides a snapshot of the state of the set
-     * when the iterator was constructed. No synchronization is needed while
-     * traversing the iterator. The iterator does <em>NOT</em> support the
-     * <tt>remove</tt> method.
-     *
-     * @return an iterator over the elements in this set
-     */
-    public Iterator<E> iterator() {
-        return al.iterator();
-    }
-
-    /**
-     * Compares the specified object with this set for equality.
-     * Returns {@code true} if the specified object is the same object
-     * as this object, or if it is also a {@link Set} and the elements
-     * returned by an {@linkplain List#iterator() iterator} over the
-     * specified set are the same as the elements returned by an
-     * iterator over this set.  More formally, the two iterators are
-     * considered to return the same elements if they return the same
-     * number of elements and for every element {@code e1} returned by
-     * the iterator over the specified set, there is an element
-     * {@code e2} returned by the iterator over this set such that
-     * {@code (e1==null ? e2==null : e1.equals(e2))}.
-     *
-     * @param o object to be compared for equality with this set
-     * @return {@code true} if the specified object is equal to this set
-     */
-    public boolean equals(Object o) {
-        if (o == this)
-            return true;
-        if (!(o instanceof Set))
-            return false;
-        Set<?> set = (Set<?>)(o);
-        Iterator<?> it = set.iterator();
-
-        // Uses O(n^2) algorithm that is only appropriate
-        // for small sets, which CopyOnWriteArraySets should be.
-
-        //  Use a single snapshot of underlying array
-        Object[] elements = al.getArray();
-        int len = elements.length;
-        // Mark matched elements to avoid re-checking
-        boolean[] matched = new boolean[len];
-        int k = 0;
-        outer: while (it.hasNext()) {
-            if (++k > len)
-                return false;
-            Object x = it.next();
-            for (int i = 0; i < len; ++i) {
-                if (!matched[i] && eq(x, elements[i])) {
-                    matched[i] = true;
-                    continue outer;
-                }
-            }
-            return false;
-        }
-        return k == len;
-    }
-
-    /**
-     * Test for equality, coping with nulls.
-     */
-    private static boolean eq(Object o1, Object o2) {
-        return (o1 == null ? o2 == null : o1.equals(o2));
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/CountDownLatch.java b/ojluni/src/main/java/java/util/concurrent/CountDownLatch.java
deleted file mode 100755
index 187b1f2..0000000
--- a/ojluni/src/main/java/java/util/concurrent/CountDownLatch.java
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.concurrent.locks.*;
-import java.util.concurrent.atomic.*;
-
-/**
- * A synchronization aid that allows one or more threads to wait until
- * a set of operations being performed in other threads completes.
- *
- * <p>A {@code CountDownLatch} is initialized with a given <em>count</em>.
- * The {@link #await await} methods block until the current count reaches
- * zero due to invocations of the {@link #countDown} method, after which
- * all waiting threads are released and any subsequent invocations of
- * {@link #await await} return immediately.  This is a one-shot phenomenon
- * -- the count cannot be reset.  If you need a version that resets the
- * count, consider using a {@link CyclicBarrier}.
- *
- * <p>A {@code CountDownLatch} is a versatile synchronization tool
- * and can be used for a number of purposes.  A
- * {@code CountDownLatch} initialized with a count of one serves as a
- * simple on/off latch, or gate: all threads invoking {@link #await await}
- * wait at the gate until it is opened by a thread invoking {@link
- * #countDown}.  A {@code CountDownLatch} initialized to <em>N</em>
- * can be used to make one thread wait until <em>N</em> threads have
- * completed some action, or some action has been completed N times.
- *
- * <p>A useful property of a {@code CountDownLatch} is that it
- * doesn't require that threads calling {@code countDown} wait for
- * the count to reach zero before proceeding, it simply prevents any
- * thread from proceeding past an {@link #await await} until all
- * threads could pass.
- *
- * <p><b>Sample usage:</b> Here is a pair of classes in which a group
- * of worker threads use two countdown latches:
- * <ul>
- * <li>The first is a start signal that prevents any worker from proceeding
- * until the driver is ready for them to proceed;
- * <li>The second is a completion signal that allows the driver to wait
- * until all workers have completed.
- * </ul>
- *
- * <pre>
- * class Driver { // ...
- *   void main() throws InterruptedException {
- *     CountDownLatch startSignal = new CountDownLatch(1);
- *     CountDownLatch doneSignal = new CountDownLatch(N);
- *
- *     for (int i = 0; i < N; ++i) // create and start threads
- *       new Thread(new Worker(startSignal, doneSignal)).start();
- *
- *     doSomethingElse();            // don't let run yet
- *     startSignal.countDown();      // let all threads proceed
- *     doSomethingElse();
- *     doneSignal.await();           // wait for all to finish
- *   }
- * }
- *
- * class Worker implements Runnable {
- *   private final CountDownLatch startSignal;
- *   private final CountDownLatch doneSignal;
- *   Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
- *      this.startSignal = startSignal;
- *      this.doneSignal = doneSignal;
- *   }
- *   public void run() {
- *      try {
- *        startSignal.await();
- *        doWork();
- *        doneSignal.countDown();
- *      } catch (InterruptedException ex) {} // return;
- *   }
- *
- *   void doWork() { ... }
- * }
- *
- * </pre>
- *
- * <p>Another typical usage would be to divide a problem into N parts,
- * describe each part with a Runnable that executes that portion and
- * counts down on the latch, and queue all the Runnables to an
- * Executor.  When all sub-parts are complete, the coordinating thread
- * will be able to pass through await. (When threads must repeatedly
- * count down in this way, instead use a {@link CyclicBarrier}.)
- *
- * <pre>
- * class Driver2 { // ...
- *   void main() throws InterruptedException {
- *     CountDownLatch doneSignal = new CountDownLatch(N);
- *     Executor e = ...
- *
- *     for (int i = 0; i < N; ++i) // create and start threads
- *       e.execute(new WorkerRunnable(doneSignal, i));
- *
- *     doneSignal.await();           // wait for all to finish
- *   }
- * }
- *
- * class WorkerRunnable implements Runnable {
- *   private final CountDownLatch doneSignal;
- *   private final int i;
- *   WorkerRunnable(CountDownLatch doneSignal, int i) {
- *      this.doneSignal = doneSignal;
- *      this.i = i;
- *   }
- *   public void run() {
- *      try {
- *        doWork(i);
- *        doneSignal.countDown();
- *      } catch (InterruptedException ex) {} // return;
- *   }
- *
- *   void doWork() { ... }
- * }
- *
- * </pre>
- *
- * <p>Memory consistency effects: Until the count reaches
- * zero, actions in a thread prior to calling
- * {@code countDown()}
- * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
- * actions following a successful return from a corresponding
- * {@code await()} in another thread.
- *
- * @since 1.5
- * @author Doug Lea
- */
-public class CountDownLatch {
-    /**
-     * Synchronization control For CountDownLatch.
-     * Uses AQS state to represent count.
-     */
-    private static final class Sync extends AbstractQueuedSynchronizer {
-        private static final long serialVersionUID = 4982264981922014374L;
-
-        Sync(int count) {
-            setState(count);
-        }
-
-        int getCount() {
-            return getState();
-        }
-
-        protected int tryAcquireShared(int acquires) {
-            return (getState() == 0) ? 1 : -1;
-        }
-
-        protected boolean tryReleaseShared(int releases) {
-            // Decrement count; signal when transition to zero
-            for (;;) {
-                int c = getState();
-                if (c == 0)
-                    return false;
-                int nextc = c-1;
-                if (compareAndSetState(c, nextc))
-                    return nextc == 0;
-            }
-        }
-    }
-
-    private final Sync sync;
-
-    /**
-     * Constructs a {@code CountDownLatch} initialized with the given count.
-     *
-     * @param count the number of times {@link #countDown} must be invoked
-     *        before threads can pass through {@link #await}
-     * @throws IllegalArgumentException if {@code count} is negative
-     */
-    public CountDownLatch(int count) {
-        if (count < 0) throw new IllegalArgumentException("count < 0");
-        this.sync = new Sync(count);
-    }
-
-    /**
-     * Causes the current thread to wait until the latch has counted down to
-     * zero, unless the thread is {@linkplain Thread#interrupt interrupted}.
-     *
-     * <p>If the current count is zero then this method returns immediately.
-     *
-     * <p>If the current count is greater than zero then the current
-     * thread becomes disabled for thread scheduling purposes and lies
-     * dormant until one of two things happen:
-     * <ul>
-     * <li>The count reaches zero due to invocations of the
-     * {@link #countDown} method; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * the current thread.
-     * </ul>
-     *
-     * <p>If the current thread:
-     * <ul>
-     * <li>has its interrupted status set on entry to this method; or
-     * <li>is {@linkplain Thread#interrupt interrupted} while waiting,
-     * </ul>
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared.
-     *
-     * @throws InterruptedException if the current thread is interrupted
-     *         while waiting
-     */
-    public void await() throws InterruptedException {
-        sync.acquireSharedInterruptibly(1);
-    }
-
-    /**
-     * Causes the current thread to wait until the latch has counted down to
-     * zero, unless the thread is {@linkplain Thread#interrupt interrupted},
-     * or the specified waiting time elapses.
-     *
-     * <p>If the current count is zero then this method returns immediately
-     * with the value {@code true}.
-     *
-     * <p>If the current count is greater than zero then the current
-     * thread becomes disabled for thread scheduling purposes and lies
-     * dormant until one of three things happen:
-     * <ul>
-     * <li>The count reaches zero due to invocations of the
-     * {@link #countDown} method; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * the current thread; or
-     * <li>The specified waiting time elapses.
-     * </ul>
-     *
-     * <p>If the count reaches zero then the method returns with the
-     * value {@code true}.
-     *
-     * <p>If the current thread:
-     * <ul>
-     * <li>has its interrupted status set on entry to this method; or
-     * <li>is {@linkplain Thread#interrupt interrupted} while waiting,
-     * </ul>
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared.
-     *
-     * <p>If the specified waiting time elapses then the value {@code false}
-     * is returned.  If the time is less than or equal to zero, the method
-     * will not wait at all.
-     *
-     * @param timeout the maximum time to wait
-     * @param unit the time unit of the {@code timeout} argument
-     * @return {@code true} if the count reached zero and {@code false}
-     *         if the waiting time elapsed before the count reached zero
-     * @throws InterruptedException if the current thread is interrupted
-     *         while waiting
-     */
-    public boolean await(long timeout, TimeUnit unit)
-        throws InterruptedException {
-        return sync.tryAcquireSharedNanos(1, unit.toNanos(timeout));
-    }
-
-    /**
-     * Decrements the count of the latch, releasing all waiting threads if
-     * the count reaches zero.
-     *
-     * <p>If the current count is greater than zero then it is decremented.
-     * If the new count is zero then all waiting threads are re-enabled for
-     * thread scheduling purposes.
-     *
-     * <p>If the current count equals zero then nothing happens.
-     */
-    public void countDown() {
-        sync.releaseShared(1);
-    }
-
-    /**
-     * Returns the current count.
-     *
-     * <p>This method is typically used for debugging and testing purposes.
-     *
-     * @return the current count
-     */
-    public long getCount() {
-        return sync.getCount();
-    }
-
-    /**
-     * Returns a string identifying this latch, as well as its state.
-     * The state, in brackets, includes the String {@code "Count ="}
-     * followed by the current count.
-     *
-     * @return a string identifying this latch, as well as its state
-     */
-    public String toString() {
-        return super.toString() + "[Count = " + sync.getCount() + "]";
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/CyclicBarrier.java b/ojluni/src/main/java/java/util/concurrent/CyclicBarrier.java
deleted file mode 100755
index 01d64b1..0000000
--- a/ojluni/src/main/java/java/util/concurrent/CyclicBarrier.java
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.concurrent.locks.*;
-
-/**
- * A synchronization aid that allows a set of threads to all wait for
- * each other to reach a common barrier point.  CyclicBarriers are
- * useful in programs involving a fixed sized party of threads that
- * must occasionally wait for each other. The barrier is called
- * <em>cyclic</em> because it can be re-used after the waiting threads
- * are released.
- *
- * <p>A <tt>CyclicBarrier</tt> supports an optional {@link Runnable} command
- * that is run once per barrier point, after the last thread in the party
- * arrives, but before any threads are released.
- * This <em>barrier action</em> is useful
- * for updating shared-state before any of the parties continue.
- *
- * <p><b>Sample usage:</b> Here is an example of
- *  using a barrier in a parallel decomposition design:
- * <pre>
- * class Solver {
- *   final int N;
- *   final float[][] data;
- *   final CyclicBarrier barrier;
- *
- *   class Worker implements Runnable {
- *     int myRow;
- *     Worker(int row) { myRow = row; }
- *     public void run() {
- *       while (!done()) {
- *         processRow(myRow);
- *
- *         try {
- *           barrier.await();
- *         } catch (InterruptedException ex) {
- *           return;
- *         } catch (BrokenBarrierException ex) {
- *           return;
- *         }
- *       }
- *     }
- *   }
- *
- *   public Solver(float[][] matrix) {
- *     data = matrix;
- *     N = matrix.length;
- *     barrier = new CyclicBarrier(N,
- *                                 new Runnable() {
- *                                   public void run() {
- *                                     mergeRows(...);
- *                                   }
- *                                 });
- *     for (int i = 0; i < N; ++i)
- *       new Thread(new Worker(i)).start();
- *
- *     waitUntilDone();
- *   }
- * }
- * </pre>
- * Here, each worker thread processes a row of the matrix then waits at the
- * barrier until all rows have been processed. When all rows are processed
- * the supplied {@link Runnable} barrier action is executed and merges the
- * rows. If the merger
- * determines that a solution has been found then <tt>done()</tt> will return
- * <tt>true</tt> and each worker will terminate.
- *
- * <p>If the barrier action does not rely on the parties being suspended when
- * it is executed, then any of the threads in the party could execute that
- * action when it is released. To facilitate this, each invocation of
- * {@link #await} returns the arrival index of that thread at the barrier.
- * You can then choose which thread should execute the barrier action, for
- * example:
- * <pre>  if (barrier.await() == 0) {
- *     // log the completion of this iteration
- *   }</pre>
- *
- * <p>The <tt>CyclicBarrier</tt> uses an all-or-none breakage model
- * for failed synchronization attempts: If a thread leaves a barrier
- * point prematurely because of interruption, failure, or timeout, all
- * other threads waiting at that barrier point will also leave
- * abnormally via {@link BrokenBarrierException} (or
- * {@link InterruptedException} if they too were interrupted at about
- * the same time).
- *
- * <p>Memory consistency effects: Actions in a thread prior to calling
- * {@code await()}
- * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
- * actions that are part of the barrier action, which in turn
- * <i>happen-before</i> actions following a successful return from the
- * corresponding {@code await()} in other threads.
- *
- * @since 1.5
- * @see CountDownLatch
- *
- * @author Doug Lea
- */
-public class CyclicBarrier {
-    /**
-     * Each use of the barrier is represented as a generation instance.
-     * The generation changes whenever the barrier is tripped, or
-     * is reset. There can be many generations associated with threads
-     * using the barrier - due to the non-deterministic way the lock
-     * may be allocated to waiting threads - but only one of these
-     * can be active at a time (the one to which <tt>count</tt> applies)
-     * and all the rest are either broken or tripped.
-     * There need not be an active generation if there has been a break
-     * but no subsequent reset.
-     */
-    private static class Generation {
-        boolean broken = false;
-    }
-
-    /** The lock for guarding barrier entry */
-    private final ReentrantLock lock = new ReentrantLock();
-    /** Condition to wait on until tripped */
-    private final Condition trip = lock.newCondition();
-    /** The number of parties */
-    private final int parties;
-    /* The command to run when tripped */
-    private final Runnable barrierCommand;
-    /** The current generation */
-    private Generation generation = new Generation();
-
-    /**
-     * Number of parties still waiting. Counts down from parties to 0
-     * on each generation.  It is reset to parties on each new
-     * generation or when broken.
-     */
-    private int count;
-
-    /**
-     * Updates state on barrier trip and wakes up everyone.
-     * Called only while holding lock.
-     */
-    private void nextGeneration() {
-        // signal completion of last generation
-        trip.signalAll();
-        // set up next generation
-        count = parties;
-        generation = new Generation();
-    }
-
-    /**
-     * Sets current barrier generation as broken and wakes up everyone.
-     * Called only while holding lock.
-     */
-    private void breakBarrier() {
-        generation.broken = true;
-        count = parties;
-        trip.signalAll();
-    }
-
-    /**
-     * Main barrier code, covering the various policies.
-     */
-    private int dowait(boolean timed, long nanos)
-        throws InterruptedException, BrokenBarrierException,
-               TimeoutException {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            final Generation g = generation;
-
-            if (g.broken)
-                throw new BrokenBarrierException();
-
-            if (Thread.interrupted()) {
-                breakBarrier();
-                throw new InterruptedException();
-            }
-
-           int index = --count;
-           if (index == 0) {  // tripped
-               boolean ranAction = false;
-               try {
-                   final Runnable command = barrierCommand;
-                   if (command != null)
-                       command.run();
-                   ranAction = true;
-                   nextGeneration();
-                   return 0;
-               } finally {
-                   if (!ranAction)
-                       breakBarrier();
-               }
-           }
-
-            // loop until tripped, broken, interrupted, or timed out
-            for (;;) {
-                try {
-                    if (!timed)
-                        trip.await();
-                    else if (nanos > 0L)
-                        nanos = trip.awaitNanos(nanos);
-                } catch (InterruptedException ie) {
-                    if (g == generation && ! g.broken) {
-                        breakBarrier();
-                        throw ie;
-                    } else {
-                        // We're about to finish waiting even if we had not
-                        // been interrupted, so this interrupt is deemed to
-                        // "belong" to subsequent execution.
-                        Thread.currentThread().interrupt();
-                    }
-                }
-
-                if (g.broken)
-                    throw new BrokenBarrierException();
-
-                if (g != generation)
-                    return index;
-
-                if (timed && nanos <= 0L) {
-                    breakBarrier();
-                    throw new TimeoutException();
-                }
-            }
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Creates a new <tt>CyclicBarrier</tt> that will trip when the
-     * given number of parties (threads) are waiting upon it, and which
-     * will execute the given barrier action when the barrier is tripped,
-     * performed by the last thread entering the barrier.
-     *
-     * @param parties the number of threads that must invoke {@link #await}
-     *        before the barrier is tripped
-     * @param barrierAction the command to execute when the barrier is
-     *        tripped, or {@code null} if there is no action
-     * @throws IllegalArgumentException if {@code parties} is less than 1
-     */
-    public CyclicBarrier(int parties, Runnable barrierAction) {
-        if (parties <= 0) throw new IllegalArgumentException();
-        this.parties = parties;
-        this.count = parties;
-        this.barrierCommand = barrierAction;
-    }
-
-    /**
-     * Creates a new <tt>CyclicBarrier</tt> that will trip when the
-     * given number of parties (threads) are waiting upon it, and
-     * does not perform a predefined action when the barrier is tripped.
-     *
-     * @param parties the number of threads that must invoke {@link #await}
-     *        before the barrier is tripped
-     * @throws IllegalArgumentException if {@code parties} is less than 1
-     */
-    public CyclicBarrier(int parties) {
-        this(parties, null);
-    }
-
-    /**
-     * Returns the number of parties required to trip this barrier.
-     *
-     * @return the number of parties required to trip this barrier
-     */
-    public int getParties() {
-        return parties;
-    }
-
-    /**
-     * Waits until all {@linkplain #getParties parties} have invoked
-     * <tt>await</tt> on this barrier.
-     *
-     * <p>If the current thread is not the last to arrive then it is
-     * disabled for thread scheduling purposes and lies dormant until
-     * one of the following things happens:
-     * <ul>
-     * <li>The last thread arrives; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * the current thread; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * one of the other waiting threads; or
-     * <li>Some other thread times out while waiting for barrier; or
-     * <li>Some other thread invokes {@link #reset} on this barrier.
-     * </ul>
-     *
-     * <p>If the current thread:
-     * <ul>
-     * <li>has its interrupted status set on entry to this method; or
-     * <li>is {@linkplain Thread#interrupt interrupted} while waiting
-     * </ul>
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared.
-     *
-     * <p>If the barrier is {@link #reset} while any thread is waiting,
-     * or if the barrier {@linkplain #isBroken is broken} when
-     * <tt>await</tt> is invoked, or while any thread is waiting, then
-     * {@link BrokenBarrierException} is thrown.
-     *
-     * <p>If any thread is {@linkplain Thread#interrupt interrupted} while waiting,
-     * then all other waiting threads will throw
-     * {@link BrokenBarrierException} and the barrier is placed in the broken
-     * state.
-     *
-     * <p>If the current thread is the last thread to arrive, and a
-     * non-null barrier action was supplied in the constructor, then the
-     * current thread runs the action before allowing the other threads to
-     * continue.
-     * If an exception occurs during the barrier action then that exception
-     * will be propagated in the current thread and the barrier is placed in
-     * the broken state.
-     *
-     * @return the arrival index of the current thread, where index
-     *         <tt>{@link #getParties()} - 1</tt> indicates the first
-     *         to arrive and zero indicates the last to arrive
-     * @throws InterruptedException if the current thread was interrupted
-     *         while waiting
-     * @throws BrokenBarrierException if <em>another</em> thread was
-     *         interrupted or timed out while the current thread was
-     *         waiting, or the barrier was reset, or the barrier was
-     *         broken when {@code await} was called, or the barrier
-     *         action (if present) failed due an exception.
-     */
-    public int await() throws InterruptedException, BrokenBarrierException {
-        try {
-            return dowait(false, 0L);
-        } catch (TimeoutException toe) {
-            throw new Error(toe); // cannot happen;
-        }
-    }
-
-    /**
-     * Waits until all {@linkplain #getParties parties} have invoked
-     * <tt>await</tt> on this barrier, or the specified waiting time elapses.
-     *
-     * <p>If the current thread is not the last to arrive then it is
-     * disabled for thread scheduling purposes and lies dormant until
-     * one of the following things happens:
-     * <ul>
-     * <li>The last thread arrives; or
-     * <li>The specified timeout elapses; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * the current thread; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * one of the other waiting threads; or
-     * <li>Some other thread times out while waiting for barrier; or
-     * <li>Some other thread invokes {@link #reset} on this barrier.
-     * </ul>
-     *
-     * <p>If the current thread:
-     * <ul>
-     * <li>has its interrupted status set on entry to this method; or
-     * <li>is {@linkplain Thread#interrupt interrupted} while waiting
-     * </ul>
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared.
-     *
-     * <p>If the specified waiting time elapses then {@link TimeoutException}
-     * is thrown. If the time is less than or equal to zero, the
-     * method will not wait at all.
-     *
-     * <p>If the barrier is {@link #reset} while any thread is waiting,
-     * or if the barrier {@linkplain #isBroken is broken} when
-     * <tt>await</tt> is invoked, or while any thread is waiting, then
-     * {@link BrokenBarrierException} is thrown.
-     *
-     * <p>If any thread is {@linkplain Thread#interrupt interrupted} while
-     * waiting, then all other waiting threads will throw {@link
-     * BrokenBarrierException} and the barrier is placed in the broken
-     * state.
-     *
-     * <p>If the current thread is the last thread to arrive, and a
-     * non-null barrier action was supplied in the constructor, then the
-     * current thread runs the action before allowing the other threads to
-     * continue.
-     * If an exception occurs during the barrier action then that exception
-     * will be propagated in the current thread and the barrier is placed in
-     * the broken state.
-     *
-     * @param timeout the time to wait for the barrier
-     * @param unit the time unit of the timeout parameter
-     * @return the arrival index of the current thread, where index
-     *         <tt>{@link #getParties()} - 1</tt> indicates the first
-     *         to arrive and zero indicates the last to arrive
-     * @throws InterruptedException if the current thread was interrupted
-     *         while waiting
-     * @throws TimeoutException if the specified timeout elapses
-     * @throws BrokenBarrierException if <em>another</em> thread was
-     *         interrupted or timed out while the current thread was
-     *         waiting, or the barrier was reset, or the barrier was broken
-     *         when {@code await} was called, or the barrier action (if
-     *         present) failed due an exception
-     */
-    public int await(long timeout, TimeUnit unit)
-        throws InterruptedException,
-               BrokenBarrierException,
-               TimeoutException {
-        return dowait(true, unit.toNanos(timeout));
-    }
-
-    /**
-     * Queries if this barrier is in a broken state.
-     *
-     * @return {@code true} if one or more parties broke out of this
-     *         barrier due to interruption or timeout since
-     *         construction or the last reset, or a barrier action
-     *         failed due to an exception; {@code false} otherwise.
-     */
-    public boolean isBroken() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return generation.broken;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Resets the barrier to its initial state.  If any parties are
-     * currently waiting at the barrier, they will return with a
-     * {@link BrokenBarrierException}. Note that resets <em>after</em>
-     * a breakage has occurred for other reasons can be complicated to
-     * carry out; threads need to re-synchronize in some other way,
-     * and choose one to perform the reset.  It may be preferable to
-     * instead create a new barrier for subsequent use.
-     */
-    public void reset() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            breakBarrier();   // break the current generation
-            nextGeneration(); // start a new generation
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns the number of parties currently waiting at the barrier.
-     * This method is primarily useful for debugging and assertions.
-     *
-     * @return the number of parties currently blocked in {@link #await}
-     */
-    public int getNumberWaiting() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return parties - count;
-        } finally {
-            lock.unlock();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/DelayQueue.java b/ojluni/src/main/java/java/util/concurrent/DelayQueue.java
deleted file mode 100755
index dd36cc7..0000000
--- a/ojluni/src/main/java/java/util/concurrent/DelayQueue.java
+++ /dev/null
@@ -1,546 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-
-package java.util.concurrent;
-import java.util.concurrent.locks.*;
-import java.util.*;
-
-/**
- * An unbounded {@linkplain BlockingQueue blocking queue} of
- * <tt>Delayed</tt> elements, in which an element can only be taken
- * when its delay has expired.  The <em>head</em> of the queue is that
- * <tt>Delayed</tt> element whose delay expired furthest in the
- * past.  If no delay has expired there is no head and <tt>poll</tt>
- * will return <tt>null</tt>. Expiration occurs when an element's
- * <tt>getDelay(TimeUnit.NANOSECONDS)</tt> method returns a value less
- * than or equal to zero.  Even though unexpired elements cannot be
- * removed using <tt>take</tt> or <tt>poll</tt>, they are otherwise
- * treated as normal elements. For example, the <tt>size</tt> method
- * returns the count of both expired and unexpired elements.
- * This queue does not permit null elements.
- *
- * <p>This class and its iterator implement all of the
- * <em>optional</em> methods of the {@link Collection} and {@link
- * Iterator} interfaces.
- *
- * <p>This class is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @since 1.5
- * @author Doug Lea
- * @param <E> the type of elements held in this collection
- */
-
-public class DelayQueue<E extends Delayed> extends AbstractQueue<E>
-    implements BlockingQueue<E> {
-
-    private transient final ReentrantLock lock = new ReentrantLock();
-    private final PriorityQueue<E> q = new PriorityQueue<E>();
-
-    /**
-     * Thread designated to wait for the element at the head of
-     * the queue.  This variant of the Leader-Follower pattern
-     * (http://www.cs.wustl.edu/~schmidt/POSA/POSA2/) serves to
-     * minimize unnecessary timed waiting.  When a thread becomes
-     * the leader, it waits only for the next delay to elapse, but
-     * other threads await indefinitely.  The leader thread must
-     * signal some other thread before returning from take() or
-     * poll(...), unless some other thread becomes leader in the
-     * interim.  Whenever the head of the queue is replaced with
-     * an element with an earlier expiration time, the leader
-     * field is invalidated by being reset to null, and some
-     * waiting thread, but not necessarily the current leader, is
-     * signalled.  So waiting threads must be prepared to acquire
-     * and lose leadership while waiting.
-     */
-    private Thread leader = null;
-
-    /**
-     * Condition signalled when a newer element becomes available
-     * at the head of the queue or a new thread may need to
-     * become leader.
-     */
-    private final Condition available = lock.newCondition();
-
-    /**
-     * Creates a new <tt>DelayQueue</tt> that is initially empty.
-     */
-    public DelayQueue() {}
-
-    /**
-     * Creates a <tt>DelayQueue</tt> initially containing the elements of the
-     * given collection of {@link Delayed} instances.
-     *
-     * @param c the collection of elements to initially contain
-     * @throws NullPointerException if the specified collection or any
-     *         of its elements are null
-     */
-    public DelayQueue(Collection<? extends E> c) {
-        this.addAll(c);
-    }
-
-    /**
-     * Inserts the specified element into this delay queue.
-     *
-     * @param e the element to add
-     * @return <tt>true</tt> (as specified by {@link Collection#add})
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean add(E e) {
-        return offer(e);
-    }
-
-    /**
-     * Inserts the specified element into this delay queue.
-     *
-     * @param e the element to add
-     * @return <tt>true</tt>
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean offer(E e) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            q.offer(e);
-            if (q.peek() == e) {
-                leader = null;
-                available.signal();
-            }
-            return true;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Inserts the specified element into this delay queue. As the queue is
-     * unbounded this method will never block.
-     *
-     * @param e the element to add
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void put(E e) {
-        offer(e);
-    }
-
-    /**
-     * Inserts the specified element into this delay queue. As the queue is
-     * unbounded this method will never block.
-     *
-     * @param e the element to add
-     * @param timeout This parameter is ignored as the method never blocks
-     * @param unit This parameter is ignored as the method never blocks
-     * @return <tt>true</tt>
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public boolean offer(E e, long timeout, TimeUnit unit) {
-        return offer(e);
-    }
-
-    /**
-     * Retrieves and removes the head of this queue, or returns <tt>null</tt>
-     * if this queue has no elements with an expired delay.
-     *
-     * @return the head of this queue, or <tt>null</tt> if this
-     *         queue has no elements with an expired delay
-     */
-    public E poll() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            E first = q.peek();
-            if (first == null || first.getDelay(TimeUnit.NANOSECONDS) > 0)
-                return null;
-            else
-                return q.poll();
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Retrieves and removes the head of this queue, waiting if necessary
-     * until an element with an expired delay is available on this queue.
-     *
-     * @return the head of this queue
-     * @throws InterruptedException {@inheritDoc}
-     */
-    public E take() throws InterruptedException {
-        final ReentrantLock lock = this.lock;
-        lock.lockInterruptibly();
-        try {
-            for (;;) {
-                E first = q.peek();
-                if (first == null)
-                    available.await();
-                else {
-                    long delay = first.getDelay(TimeUnit.NANOSECONDS);
-                    if (delay <= 0)
-                        return q.poll();
-                    else if (leader != null)
-                        available.await();
-                    else {
-                        Thread thisThread = Thread.currentThread();
-                        leader = thisThread;
-                        try {
-                            available.awaitNanos(delay);
-                        } finally {
-                            if (leader == thisThread)
-                                leader = null;
-                        }
-                    }
-                }
-            }
-        } finally {
-            if (leader == null && q.peek() != null)
-                available.signal();
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Retrieves and removes the head of this queue, waiting if necessary
-     * until an element with an expired delay is available on this queue,
-     * or the specified wait time expires.
-     *
-     * @return the head of this queue, or <tt>null</tt> if the
-     *         specified waiting time elapses before an element with
-     *         an expired delay becomes available
-     * @throws InterruptedException {@inheritDoc}
-     */
-    public E poll(long timeout, TimeUnit unit) throws InterruptedException {
-        long nanos = unit.toNanos(timeout);
-        final ReentrantLock lock = this.lock;
-        lock.lockInterruptibly();
-        try {
-            for (;;) {
-                E first = q.peek();
-                if (first == null) {
-                    if (nanos <= 0)
-                        return null;
-                    else
-                        nanos = available.awaitNanos(nanos);
-                } else {
-                    long delay = first.getDelay(TimeUnit.NANOSECONDS);
-                    if (delay <= 0)
-                        return q.poll();
-                    if (nanos <= 0)
-                        return null;
-                    if (nanos < delay || leader != null)
-                        nanos = available.awaitNanos(nanos);
-                    else {
-                        Thread thisThread = Thread.currentThread();
-                        leader = thisThread;
-                        try {
-                            long timeLeft = available.awaitNanos(delay);
-                            nanos -= delay - timeLeft;
-                        } finally {
-                            if (leader == thisThread)
-                                leader = null;
-                        }
-                    }
-                }
-            }
-        } finally {
-            if (leader == null && q.peek() != null)
-                available.signal();
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Retrieves, but does not remove, the head of this queue, or
-     * returns <tt>null</tt> if this queue is empty.  Unlike
-     * <tt>poll</tt>, if no expired elements are available in the queue,
-     * this method returns the element that will expire next,
-     * if one exists.
-     *
-     * @return the head of this queue, or <tt>null</tt> if this
-     *         queue is empty.
-     */
-    public E peek() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return q.peek();
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public int size() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return q.size();
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * @throws UnsupportedOperationException {@inheritDoc}
-     * @throws ClassCastException            {@inheritDoc}
-     * @throws NullPointerException          {@inheritDoc}
-     * @throws IllegalArgumentException      {@inheritDoc}
-     */
-    public int drainTo(Collection<? super E> c) {
-        if (c == null)
-            throw new NullPointerException();
-        if (c == this)
-            throw new IllegalArgumentException();
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            int n = 0;
-            for (;;) {
-                E first = q.peek();
-                if (first == null || first.getDelay(TimeUnit.NANOSECONDS) > 0)
-                    break;
-                c.add(q.poll());
-                ++n;
-            }
-            return n;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * @throws UnsupportedOperationException {@inheritDoc}
-     * @throws ClassCastException            {@inheritDoc}
-     * @throws NullPointerException          {@inheritDoc}
-     * @throws IllegalArgumentException      {@inheritDoc}
-     */
-    public int drainTo(Collection<? super E> c, int maxElements) {
-        if (c == null)
-            throw new NullPointerException();
-        if (c == this)
-            throw new IllegalArgumentException();
-        if (maxElements <= 0)
-            return 0;
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            int n = 0;
-            while (n < maxElements) {
-                E first = q.peek();
-                if (first == null || first.getDelay(TimeUnit.NANOSECONDS) > 0)
-                    break;
-                c.add(q.poll());
-                ++n;
-            }
-            return n;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Atomically removes all of the elements from this delay queue.
-     * The queue will be empty after this call returns.
-     * Elements with an unexpired delay are not waited for; they are
-     * simply discarded from the queue.
-     */
-    public void clear() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            q.clear();
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Always returns <tt>Integer.MAX_VALUE</tt> because
-     * a <tt>DelayQueue</tt> is not capacity constrained.
-     *
-     * @return <tt>Integer.MAX_VALUE</tt>
-     */
-    public int remainingCapacity() {
-        return Integer.MAX_VALUE;
-    }
-
-    /**
-     * Returns an array containing all of the elements in this queue.
-     * The returned array elements are in no particular order.
-     *
-     * <p>The returned array will be "safe" in that no references to it are
-     * maintained by this queue.  (In other words, this method must allocate
-     * a new array).  The caller is thus free to modify the returned array.
-     *
-     * <p>This method acts as bridge between array-based and collection-based
-     * APIs.
-     *
-     * @return an array containing all of the elements in this queue
-     */
-    public Object[] toArray() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return q.toArray();
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns an array containing all of the elements in this queue; the
-     * runtime type of the returned array is that of the specified array.
-     * The returned array elements are in no particular order.
-     * If the queue fits in the specified array, it is returned therein.
-     * Otherwise, a new array is allocated with the runtime type of the
-     * specified array and the size of this queue.
-     *
-     * <p>If this queue fits in the specified array with room to spare
-     * (i.e., the array has more elements than this queue), the element in
-     * the array immediately following the end of the queue is set to
-     * <tt>null</tt>.
-     *
-     * <p>Like the {@link #toArray()} method, this method acts as bridge between
-     * array-based and collection-based APIs.  Further, this method allows
-     * precise control over the runtime type of the output array, and may,
-     * under certain circumstances, be used to save allocation costs.
-     *
-     * <p>The following code can be used to dump a delay queue into a newly
-     * allocated array of <tt>Delayed</tt>:
-     *
-     * <pre>
-     *     Delayed[] a = q.toArray(new Delayed[0]);</pre>
-     *
-     * Note that <tt>toArray(new Object[0])</tt> is identical in function to
-     * <tt>toArray()</tt>.
-     *
-     * @param a the array into which the elements of the queue are to
-     *          be stored, if it is big enough; otherwise, a new array of the
-     *          same runtime type is allocated for this purpose
-     * @return an array containing all of the elements in this queue
-     * @throws ArrayStoreException if the runtime type of the specified array
-     *         is not a supertype of the runtime type of every element in
-     *         this queue
-     * @throws NullPointerException if the specified array is null
-     */
-    public <T> T[] toArray(T[] a) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return q.toArray(a);
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Removes a single instance of the specified element from this
-     * queue, if it is present, whether or not it has expired.
-     */
-    public boolean remove(Object o) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return q.remove(o);
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns an iterator over all the elements (both expired and
-     * unexpired) in this queue. The iterator does not return the
-     * elements in any particular order.
-     *
-     * <p>The returned iterator is a "weakly consistent" iterator that
-     * will never throw {@link java.util.ConcurrentModificationException
-     * ConcurrentModificationException}, and guarantees to traverse
-     * elements as they existed upon construction of the iterator, and
-     * may (but is not guaranteed to) reflect any modifications
-     * subsequent to construction.
-     *
-     * @return an iterator over the elements in this queue
-     */
-    public Iterator<E> iterator() {
-        return new Itr(toArray());
-    }
-
-    /**
-     * Snapshot iterator that works off copy of underlying q array.
-     */
-    private class Itr implements Iterator<E> {
-        final Object[] array; // Array of all elements
-        int cursor;           // index of next element to return;
-        int lastRet;          // index of last element, or -1 if no such
-
-        Itr(Object[] array) {
-            lastRet = -1;
-            this.array = array;
-        }
-
-        public boolean hasNext() {
-            return cursor < array.length;
-        }
-
-        @SuppressWarnings("unchecked")
-        public E next() {
-            if (cursor >= array.length)
-                throw new NoSuchElementException();
-            lastRet = cursor;
-            return (E)array[cursor++];
-        }
-
-        public void remove() {
-            if (lastRet < 0)
-                throw new IllegalStateException();
-            Object x = array[lastRet];
-            lastRet = -1;
-            // Traverse underlying queue to find == element,
-            // not just a .equals element.
-            lock.lock();
-            try {
-                for (Iterator it = q.iterator(); it.hasNext(); ) {
-                    if (it.next() == x) {
-                        it.remove();
-                        return;
-                    }
-                }
-            } finally {
-                lock.unlock();
-            }
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/Delayed.java b/ojluni/src/main/java/java/util/concurrent/Delayed.java
deleted file mode 100755
index d775641..0000000
--- a/ojluni/src/main/java/java/util/concurrent/Delayed.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-import java.util.*;
-
-/**
- * A mix-in style interface for marking objects that should be
- * acted upon after a given delay.
- *
- * <p>An implementation of this interface must define a
- * <tt>compareTo</tt> method that provides an ordering consistent with
- * its <tt>getDelay</tt> method.
- *
- * @since 1.5
- * @author Doug Lea
- */
-public interface Delayed extends Comparable<Delayed> {
-
-    /**
-     * Returns the remaining delay associated with this object, in the
-     * given time unit.
-     *
-     * @param unit the time unit
-     * @return the remaining delay; zero or negative values indicate
-     * that the delay has already elapsed
-     */
-    long getDelay(TimeUnit unit);
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/Exchanger.java b/ojluni/src/main/java/java/util/concurrent/Exchanger.java
deleted file mode 100755
index 99e3a35..0000000
--- a/ojluni/src/main/java/java/util/concurrent/Exchanger.java
+++ /dev/null
@@ -1,687 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea, Bill Scherer, and Michael Scott with
- * assistance from members of JCP JSR-166 Expert Group and released to
- * the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.concurrent.atomic.*;
-import java.util.concurrent.locks.LockSupport;
-
-/**
- * A synchronization point at which threads can pair and swap elements
- * within pairs.  Each thread presents some object on entry to the
- * {@link #exchange exchange} method, matches with a partner thread,
- * and receives its partner's object on return.  An Exchanger may be
- * viewed as a bidirectional form of a {@link SynchronousQueue}.
- * Exchangers may be useful in applications such as genetic algorithms
- * and pipeline designs.
- *
- * <p><b>Sample Usage:</b>
- * Here are the highlights of a class that uses an {@code Exchanger}
- * to swap buffers between threads so that the thread filling the
- * buffer gets a freshly emptied one when it needs it, handing off the
- * filled one to the thread emptying the buffer.
- * <pre>{@code
- * class FillAndEmpty {
- *   Exchanger<DataBuffer> exchanger = new Exchanger<DataBuffer>();
- *   DataBuffer initialEmptyBuffer = ... a made-up type
- *   DataBuffer initialFullBuffer = ...
- *
- *   class FillingLoop implements Runnable {
- *     public void run() {
- *       DataBuffer currentBuffer = initialEmptyBuffer;
- *       try {
- *         while (currentBuffer != null) {
- *           addToBuffer(currentBuffer);
- *           if (currentBuffer.isFull())
- *             currentBuffer = exchanger.exchange(currentBuffer);
- *         }
- *       } catch (InterruptedException ex) { ... handle ... }
- *     }
- *   }
- *
- *   class EmptyingLoop implements Runnable {
- *     public void run() {
- *       DataBuffer currentBuffer = initialFullBuffer;
- *       try {
- *         while (currentBuffer != null) {
- *           takeFromBuffer(currentBuffer);
- *           if (currentBuffer.isEmpty())
- *             currentBuffer = exchanger.exchange(currentBuffer);
- *         }
- *       } catch (InterruptedException ex) { ... handle ...}
- *     }
- *   }
- *
- *   void start() {
- *     new Thread(new FillingLoop()).start();
- *     new Thread(new EmptyingLoop()).start();
- *   }
- * }
- * }</pre>
- *
- * <p>Memory consistency effects: For each pair of threads that
- * successfully exchange objects via an {@code Exchanger}, actions
- * prior to the {@code exchange()} in each thread
- * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
- * those subsequent to a return from the corresponding {@code exchange()}
- * in the other thread.
- *
- * @since 1.5
- * @author Doug Lea and Bill Scherer and Michael Scott
- * @param <V> The type of objects that may be exchanged
- */
-public class Exchanger<V> {
-    /*
-     * Algorithm Description:
-     *
-     * The basic idea is to maintain a "slot", which is a reference to
-     * a Node containing both an Item to offer and a "hole" waiting to
-     * get filled in.  If an incoming "occupying" thread sees that the
-     * slot is null, it CAS'es (compareAndSets) a Node there and waits
-     * for another to invoke exchange.  That second "fulfilling" thread
-     * sees that the slot is non-null, and so CASes it back to null,
-     * also exchanging items by CASing the hole, plus waking up the
-     * occupying thread if it is blocked.  In each case CAS'es may
-     * fail because a slot at first appears non-null but is null upon
-     * CAS, or vice-versa.  So threads may need to retry these
-     * actions.
-     *
-     * This simple approach works great when there are only a few
-     * threads using an Exchanger, but performance rapidly
-     * deteriorates due to CAS contention on the single slot when
-     * there are lots of threads using an exchanger.  So instead we use
-     * an "arena"; basically a kind of hash table with a dynamically
-     * varying number of slots, any one of which can be used by
-     * threads performing an exchange.  Incoming threads pick slots
-     * based on a hash of their Thread ids.  If an incoming thread
-     * fails to CAS in its chosen slot, it picks an alternative slot
-     * instead.  And similarly from there.  If a thread successfully
-     * CASes into a slot but no other thread arrives, it tries
-     * another, heading toward the zero slot, which always exists even
-     * if the table shrinks.  The particular mechanics controlling this
-     * are as follows:
-     *
-     * Waiting: Slot zero is special in that it is the only slot that
-     * exists when there is no contention.  A thread occupying slot
-     * zero will block if no thread fulfills it after a short spin.
-     * In other cases, occupying threads eventually give up and try
-     * another slot.  Waiting threads spin for a while (a period that
-     * should be a little less than a typical context-switch time)
-     * before either blocking (if slot zero) or giving up (if other
-     * slots) and restarting.  There is no reason for threads to block
-     * unless there are unlikely to be any other threads present.
-     * Occupants are mainly avoiding memory contention so sit there
-     * quietly polling for a shorter period than it would take to
-     * block and then unblock them.  Non-slot-zero waits that elapse
-     * because of lack of other threads waste around one extra
-     * context-switch time per try, which is still on average much
-     * faster than alternative approaches.
-     *
-     * Sizing: Usually, using only a few slots suffices to reduce
-     * contention.  Especially with small numbers of threads, using
-     * too many slots can lead to just as poor performance as using
-     * too few of them, and there's not much room for error.  The
-     * variable "max" maintains the number of slots actually in
-     * use.  It is increased when a thread sees too many CAS
-     * failures.  (This is analogous to resizing a regular hash table
-     * based on a target load factor, except here, growth steps are
-     * just one-by-one rather than proportional.)  Growth requires
-     * contention failures in each of three tried slots.  Requiring
-     * multiple failures for expansion copes with the fact that some
-     * failed CASes are not due to contention but instead to simple
-     * races between two threads or thread pre-emptions occurring
-     * between reading and CASing.  Also, very transient peak
-     * contention can be much higher than the average sustainable
-     * levels.  An attempt to decrease the max limit is usually made
-     * when a non-slot-zero wait elapses without being fulfilled.
-     * Threads experiencing elapsed waits move closer to zero, so
-     * eventually find existing (or future) threads even if the table
-     * has been shrunk due to inactivity.  The chosen mechanics and
-     * thresholds for growing and shrinking are intrinsically
-     * entangled with indexing and hashing inside the exchange code,
-     * and can't be nicely abstracted out.
-     *
-     * Hashing: Each thread picks its initial slot to use in accord
-     * with a simple hashcode.  The sequence is the same on each
-     * encounter by any given thread, but effectively random across
-     * threads.  Using arenas encounters the classic cost vs quality
-     * tradeoffs of all hash tables.  Here, we use a one-step FNV-1a
-     * hash code based on the current thread's Thread.getId(), along
-     * with a cheap approximation to a mod operation to select an
-     * index.  The downside of optimizing index selection in this way
-     * is that the code is hardwired to use a maximum table size of
-     * 32.  But this value more than suffices for known platforms and
-     * applications.
-     *
-     * Probing: On sensed contention of a selected slot, we probe
-     * sequentially through the table, analogously to linear probing
-     * after collision in a hash table.  (We move circularly, in
-     * reverse order, to mesh best with table growth and shrinkage
-     * rules.)  Except that to minimize the effects of false-alarms
-     * and cache thrashing, we try the first selected slot twice
-     * before moving.
-     *
-     * Padding: Even with contention management, slots are heavily
-     * contended, so use cache-padding to avoid poor memory
-     * performance.  Because of this, slots are lazily constructed
-     * only when used, to avoid wasting this space unnecessarily.
-     * While isolation of locations is not much of an issue at first
-     * in an application, as time goes on and garbage-collectors
-     * perform compaction, slots are very likely to be moved adjacent
-     * to each other, which can cause much thrashing of cache lines on
-     * MPs unless padding is employed.
-     *
-     * This is an improvement of the algorithm described in the paper
-     * "A Scalable Elimination-based Exchange Channel" by William
-     * Scherer, Doug Lea, and Michael Scott in Proceedings of SCOOL05
-     * workshop.  Available at: http://hdl.handle.net/1802/2104
-     */
-
-    /** The number of CPUs, for sizing and spin control */
-    private static final int NCPU = Runtime.getRuntime().availableProcessors();
-
-    /**
-     * The capacity of the arena.  Set to a value that provides more
-     * than enough space to handle contention.  On small machines
-     * most slots won't be used, but it is still not wasted because
-     * the extra space provides some machine-level address padding
-     * to minimize interference with heavily CAS'ed Slot locations.
-     * And on very large machines, performance eventually becomes
-     * bounded by memory bandwidth, not numbers of threads/CPUs.
-     * This constant cannot be changed without also modifying
-     * indexing and hashing algorithms.
-     */
-    private static final int CAPACITY = 32;
-
-    /**
-     * The value of "max" that will hold all threads without
-     * contention.  When this value is less than CAPACITY, some
-     * otherwise wasted expansion can be avoided.
-     */
-    private static final int FULL =
-        Math.max(0, Math.min(CAPACITY, NCPU / 2) - 1);
-
-    /**
-     * The number of times to spin (doing nothing except polling a
-     * memory location) before blocking or giving up while waiting to
-     * be fulfilled.  Should be zero on uniprocessors.  On
-     * multiprocessors, this value should be large enough so that two
-     * threads exchanging items as fast as possible block only when
-     * one of them is stalled (due to GC or preemption), but not much
-     * longer, to avoid wasting CPU resources.  Seen differently, this
-     * value is a little over half the number of cycles of an average
-     * context switch time on most systems.  The value here is
-     * approximately the average of those across a range of tested
-     * systems.
-     */
-    private static final int SPINS = (NCPU == 1) ? 0 : 2000;
-
-    /**
-     * The number of times to spin before blocking in timed waits.
-     * Timed waits spin more slowly because checking the time takes
-     * time.  The best value relies mainly on the relative rate of
-     * System.nanoTime vs memory accesses.  The value is empirically
-     * derived to work well across a variety of systems.
-     */
-    private static final int TIMED_SPINS = SPINS / 20;
-
-    /**
-     * Sentinel item representing cancellation of a wait due to
-     * interruption, timeout, or elapsed spin-waits.  This value is
-     * placed in holes on cancellation, and used as a return value
-     * from waiting methods to indicate failure to set or get hole.
-     */
-    private static final Object CANCEL = new Object();
-
-    /**
-     * Value representing null arguments/returns from public
-     * methods.  This disambiguates from internal requirement that
-     * holes start out as null to mean they are not yet set.
-     */
-    private static final Object NULL_ITEM = new Object();
-
-    /**
-     * Nodes hold partially exchanged data.  This class
-     * opportunistically subclasses AtomicReference to represent the
-     * hole.  So get() returns hole, and compareAndSet CAS'es value
-     * into hole.  This class cannot be parameterized as "V" because
-     * of the use of non-V CANCEL sentinels.
-     */
-    private static final class Node extends AtomicReference<Object> {
-        /** The element offered by the Thread creating this node. */
-        public final Object item;
-
-        /** The Thread waiting to be signalled; null until waiting. */
-        public volatile Thread waiter;
-
-        /**
-         * Creates node with given item and empty hole.
-         * @param item the item
-         */
-        public Node(Object item) {
-            this.item = item;
-        }
-    }
-
-    /**
-     * A Slot is an AtomicReference with heuristic padding to lessen
-     * cache effects of this heavily CAS'ed location.  While the
-     * padding adds noticeable space, all slots are created only on
-     * demand, and there will be more than one of them only when it
-     * would improve throughput more than enough to outweigh using
-     * extra space.
-     */
-    private static final class Slot extends AtomicReference<Object> {
-        // Improve likelihood of isolation on <= 64 byte cache lines
-        long q0, q1, q2, q3, q4, q5, q6, q7, q8, q9, qa, qb, qc, qd, qe;
-    }
-
-    /**
-     * Slot array.  Elements are lazily initialized when needed.
-     * Declared volatile to enable double-checked lazy construction.
-     */
-    private volatile Slot[] arena = new Slot[CAPACITY];
-
-    /**
-     * The maximum slot index being used.  The value sometimes
-     * increases when a thread experiences too many CAS contentions,
-     * and sometimes decreases when a spin-wait elapses.  Changes
-     * are performed only via compareAndSet, to avoid stale values
-     * when a thread happens to stall right before setting.
-     */
-    private final AtomicInteger max = new AtomicInteger();
-
-    /**
-     * Main exchange function, handling the different policy variants.
-     * Uses Object, not "V" as argument and return value to simplify
-     * handling of sentinel values.  Callers from public methods decode
-     * and cast accordingly.
-     *
-     * @param item the (non-null) item to exchange
-     * @param timed true if the wait is timed
-     * @param nanos if timed, the maximum wait time
-     * @return the other thread's item, or CANCEL if interrupted or timed out
-     */
-    private Object doExchange(Object item, boolean timed, long nanos) {
-        Node me = new Node(item);                 // Create in case occupying
-        int index = hashIndex();                  // Index of current slot
-        int fails = 0;                            // Number of CAS failures
-
-        for (;;) {
-            Object y;                             // Contents of current slot
-            Slot slot = arena[index];
-            if (slot == null)                     // Lazily initialize slots
-                createSlot(index);                // Continue loop to reread
-            else if ((y = slot.get()) != null &&  // Try to fulfill
-                     slot.compareAndSet(y, null)) {
-                Node you = (Node)y;               // Transfer item
-                if (you.compareAndSet(null, item)) {
-                    LockSupport.unpark(you.waiter);
-                    return you.item;
-                }                                 // Else cancelled; continue
-            }
-            else if (y == null &&                 // Try to occupy
-                     slot.compareAndSet(null, me)) {
-                if (index == 0)                   // Blocking wait for slot 0
-                    return timed ?
-                        awaitNanos(me, slot, nanos) :
-                        await(me, slot);
-                Object v = spinWait(me, slot);    // Spin wait for non-0
-                if (v != CANCEL)
-                    return v;
-                me = new Node(item);              // Throw away cancelled node
-                int m = max.get();
-                if (m > (index >>>= 1))           // Decrease index
-                    max.compareAndSet(m, m - 1);  // Maybe shrink table
-            }
-            else if (++fails > 1) {               // Allow 2 fails on 1st slot
-                int m = max.get();
-                if (fails > 3 && m < FULL && max.compareAndSet(m, m + 1))
-                    index = m + 1;                // Grow on 3rd failed slot
-                else if (--index < 0)
-                    index = m;                    // Circularly traverse
-            }
-        }
-    }
-
-    /**
-     * Returns a hash index for the current thread.  Uses a one-step
-     * FNV-1a hash code (http://www.isthe.com/chongo/tech/comp/fnv/)
-     * based on the current thread's Thread.getId().  These hash codes
-     * have more uniform distribution properties with respect to small
-     * moduli (here 1-31) than do other simple hashing functions.
-     *
-     * <p>To return an index between 0 and max, we use a cheap
-     * approximation to a mod operation, that also corrects for bias
-     * due to non-power-of-2 remaindering (see {@link
-     * java.util.Random#nextInt}).  Bits of the hashcode are masked
-     * with "nbits", the ceiling power of two of table size (looked up
-     * in a table packed into three ints).  If too large, this is
-     * retried after rotating the hash by nbits bits, while forcing new
-     * top bit to 0, which guarantees eventual termination (although
-     * with a non-random-bias).  This requires an average of less than
-     * 2 tries for all table sizes, and has a maximum 2% difference
-     * from perfectly uniform slot probabilities when applied to all
-     * possible hash codes for sizes less than 32.
-     *
-     * @return a per-thread-random index, 0 <= index < max
-     */
-    private final int hashIndex() {
-        long id = Thread.currentThread().getId();
-        int hash = (((int)(id ^ (id >>> 32))) ^ 0x811c9dc5) * 0x01000193;
-
-        int m = max.get();
-        int nbits = (((0xfffffc00  >> m) & 4) | // Compute ceil(log2(m+1))
-                     ((0x000001f8 >>> m) & 2) | // The constants hold
-                     ((0xffff00f2 >>> m) & 1)); // a lookup table
-        int index;
-        while ((index = hash & ((1 << nbits) - 1)) > m)       // May retry on
-            hash = (hash >>> nbits) | (hash << (33 - nbits)); // non-power-2 m
-        return index;
-    }
-
-    /**
-     * Creates a new slot at given index.  Called only when the slot
-     * appears to be null.  Relies on double-check using builtin
-     * locks, since they rarely contend.  This in turn relies on the
-     * arena array being declared volatile.
-     *
-     * @param index the index to add slot at
-     */
-    private void createSlot(int index) {
-        // Create slot outside of lock to narrow sync region
-        Slot newSlot = new Slot();
-        Slot[] a = arena;
-        synchronized (a) {
-            if (a[index] == null)
-                a[index] = newSlot;
-        }
-    }
-
-    /**
-     * Tries to cancel a wait for the given node waiting in the given
-     * slot, if so, helping clear the node from its slot to avoid
-     * garbage retention.
-     *
-     * @param node the waiting node
-     * @param the slot it is waiting in
-     * @return true if successfully cancelled
-     */
-    private static boolean tryCancel(Node node, Slot slot) {
-        if (!node.compareAndSet(null, CANCEL))
-            return false;
-        if (slot.get() == node) // pre-check to minimize contention
-            slot.compareAndSet(node, null);
-        return true;
-    }
-
-    // Three forms of waiting. Each just different enough not to merge
-    // code with others.
-
-    /**
-     * Spin-waits for hole for a non-0 slot.  Fails if spin elapses
-     * before hole filled.  Does not check interrupt, relying on check
-     * in public exchange method to abort if interrupted on entry.
-     *
-     * @param node the waiting node
-     * @return on success, the hole; on failure, CANCEL
-     */
-    private static Object spinWait(Node node, Slot slot) {
-        int spins = SPINS;
-        for (;;) {
-            Object v = node.get();
-            if (v != null)
-                return v;
-            else if (spins > 0)
-                --spins;
-            else
-                tryCancel(node, slot);
-        }
-    }
-
-    /**
-     * Waits for (by spinning and/or blocking) and gets the hole
-     * filled in by another thread.  Fails if interrupted before
-     * hole filled.
-     *
-     * When a node/thread is about to block, it sets its waiter field
-     * and then rechecks state at least one more time before actually
-     * parking, thus covering race vs fulfiller noticing that waiter
-     * is non-null so should be woken.
-     *
-     * Thread interruption status is checked only surrounding calls to
-     * park.  The caller is assumed to have checked interrupt status
-     * on entry.
-     *
-     * @param node the waiting node
-     * @return on success, the hole; on failure, CANCEL
-     */
-    private static Object await(Node node, Slot slot) {
-        Thread w = Thread.currentThread();
-        int spins = SPINS;
-        for (;;) {
-            Object v = node.get();
-            if (v != null)
-                return v;
-            else if (spins > 0)                 // Spin-wait phase
-                --spins;
-            else if (node.waiter == null)       // Set up to block next
-                node.waiter = w;
-            else if (w.isInterrupted())         // Abort on interrupt
-                tryCancel(node, slot);
-            else                                // Block
-                LockSupport.park(node);
-        }
-    }
-
-    /**
-     * Waits for (at index 0) and gets the hole filled in by another
-     * thread.  Fails if timed out or interrupted before hole filled.
-     * Same basic logic as untimed version, but a bit messier.
-     *
-     * @param node the waiting node
-     * @param nanos the wait time
-     * @return on success, the hole; on failure, CANCEL
-     */
-    private Object awaitNanos(Node node, Slot slot, long nanos) {
-        int spins = TIMED_SPINS;
-        long lastTime = 0;
-        Thread w = null;
-        for (;;) {
-            Object v = node.get();
-            if (v != null)
-                return v;
-            long now = System.nanoTime();
-            if (w == null)
-                w = Thread.currentThread();
-            else
-                nanos -= now - lastTime;
-            lastTime = now;
-            if (nanos > 0) {
-                if (spins > 0)
-                    --spins;
-                else if (node.waiter == null)
-                    node.waiter = w;
-                else if (w.isInterrupted())
-                    tryCancel(node, slot);
-                else
-                    LockSupport.parkNanos(node, nanos);
-            }
-            else if (tryCancel(node, slot) && !w.isInterrupted())
-                return scanOnTimeout(node);
-        }
-    }
-
-    /**
-     * Sweeps through arena checking for any waiting threads.  Called
-     * only upon return from timeout while waiting in slot 0.  When a
-     * thread gives up on a timed wait, it is possible that a
-     * previously-entered thread is still waiting in some other
-     * slot.  So we scan to check for any.  This is almost always
-     * overkill, but decreases the likelihood of timeouts when there
-     * are other threads present to far less than that in lock-based
-     * exchangers in which earlier-arriving threads may still be
-     * waiting on entry locks.
-     *
-     * @param node the waiting node
-     * @return another thread's item, or CANCEL
-     */
-    private Object scanOnTimeout(Node node) {
-        Object y;
-        for (int j = arena.length - 1; j >= 0; --j) {
-            Slot slot = arena[j];
-            if (slot != null) {
-                while ((y = slot.get()) != null) {
-                    if (slot.compareAndSet(y, null)) {
-                        Node you = (Node)y;
-                        if (you.compareAndSet(null, node.item)) {
-                            LockSupport.unpark(you.waiter);
-                            return you.item;
-                        }
-                    }
-                }
-            }
-        }
-        return CANCEL;
-    }
-
-    /**
-     * Creates a new Exchanger.
-     */
-    public Exchanger() {
-    }
-
-    /**
-     * Waits for another thread to arrive at this exchange point (unless
-     * the current thread is {@linkplain Thread#interrupt interrupted}),
-     * and then transfers the given object to it, receiving its object
-     * in return.
-     *
-     * <p>If another thread is already waiting at the exchange point then
-     * it is resumed for thread scheduling purposes and receives the object
-     * passed in by the current thread.  The current thread returns immediately,
-     * receiving the object passed to the exchange by that other thread.
-     *
-     * <p>If no other thread is already waiting at the exchange then the
-     * current thread is disabled for thread scheduling purposes and lies
-     * dormant until one of two things happens:
-     * <ul>
-     * <li>Some other thread enters the exchange; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * the current thread.
-     * </ul>
-     * <p>If the current thread:
-     * <ul>
-     * <li>has its interrupted status set on entry to this method; or
-     * <li>is {@linkplain Thread#interrupt interrupted} while waiting
-     * for the exchange,
-     * </ul>
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared.
-     *
-     * @param x the object to exchange
-     * @return the object provided by the other thread
-     * @throws InterruptedException if the current thread was
-     *         interrupted while waiting
-     */
-    public V exchange(V x) throws InterruptedException {
-        if (!Thread.interrupted()) {
-            Object v = doExchange((x == null) ? NULL_ITEM : x, false, 0);
-            if (v == NULL_ITEM)
-                return null;
-            if (v != CANCEL)
-                return (V)v;
-            Thread.interrupted(); // Clear interrupt status on IE throw
-        }
-        throw new InterruptedException();
-    }
-
-    /**
-     * Waits for another thread to arrive at this exchange point (unless
-     * the current thread is {@linkplain Thread#interrupt interrupted} or
-     * the specified waiting time elapses), and then transfers the given
-     * object to it, receiving its object in return.
-     *
-     * <p>If another thread is already waiting at the exchange point then
-     * it is resumed for thread scheduling purposes and receives the object
-     * passed in by the current thread.  The current thread returns immediately,
-     * receiving the object passed to the exchange by that other thread.
-     *
-     * <p>If no other thread is already waiting at the exchange then the
-     * current thread is disabled for thread scheduling purposes and lies
-     * dormant until one of three things happens:
-     * <ul>
-     * <li>Some other thread enters the exchange; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * the current thread; or
-     * <li>The specified waiting time elapses.
-     * </ul>
-     * <p>If the current thread:
-     * <ul>
-     * <li>has its interrupted status set on entry to this method; or
-     * <li>is {@linkplain Thread#interrupt interrupted} while waiting
-     * for the exchange,
-     * </ul>
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared.
-     *
-     * <p>If the specified waiting time elapses then {@link
-     * TimeoutException} is thrown.  If the time is less than or equal
-     * to zero, the method will not wait at all.
-     *
-     * @param x the object to exchange
-     * @param timeout the maximum time to wait
-     * @param unit the time unit of the <tt>timeout</tt> argument
-     * @return the object provided by the other thread
-     * @throws InterruptedException if the current thread was
-     *         interrupted while waiting
-     * @throws TimeoutException if the specified waiting time elapses
-     *         before another thread enters the exchange
-     */
-    public V exchange(V x, long timeout, TimeUnit unit)
-        throws InterruptedException, TimeoutException {
-        if (!Thread.interrupted()) {
-            Object v = doExchange((x == null) ? NULL_ITEM : x,
-                                  true, unit.toNanos(timeout));
-            if (v == NULL_ITEM)
-                return null;
-            if (v != CANCEL)
-                return (V)v;
-            if (!Thread.interrupted())
-                throw new TimeoutException();
-        }
-        throw new InterruptedException();
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ExecutionException.java b/ojluni/src/main/java/java/util/concurrent/ExecutionException.java
deleted file mode 100755
index fc2b1e8..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ExecutionException.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * Exception thrown when attempting to retrieve the result of a task
- * that aborted by throwing an exception. This exception can be
- * inspected using the {@link #getCause()} method.
- *
- * @see Future
- * @since 1.5
- * @author Doug Lea
- */
-public class ExecutionException extends Exception {
-    private static final long serialVersionUID = 7830266012832686185L;
-
-    /**
-     * Constructs an <tt>ExecutionException</tt> with no detail message.
-     * The cause is not initialized, and may subsequently be
-     * initialized by a call to {@link #initCause(Throwable) initCause}.
-     */
-    protected ExecutionException() { }
-
-    /**
-     * Constructs an <tt>ExecutionException</tt> with the specified detail
-     * message. The cause is not initialized, and may subsequently be
-     * initialized by a call to {@link #initCause(Throwable) initCause}.
-     *
-     * @param message the detail message
-     */
-    protected ExecutionException(String message) {
-        super(message);
-    }
-
-    /**
-     * Constructs an <tt>ExecutionException</tt> with the specified detail
-     * message and cause.
-     *
-     * @param  message the detail message
-     * @param  cause the cause (which is saved for later retrieval by the
-     *         {@link #getCause()} method)
-     */
-    public ExecutionException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-    /**
-     * Constructs an <tt>ExecutionException</tt> with the specified cause.
-     * The detail message is set to:
-     * <pre>
-     *  (cause == null ? null : cause.toString())</pre>
-     * (which typically contains the class and detail message of
-     * <tt>cause</tt>).
-     *
-     * @param  cause the cause (which is saved for later retrieval by the
-     *         {@link #getCause()} method)
-     */
-    public ExecutionException(Throwable cause) {
-        super(cause);
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/Executor.java b/ojluni/src/main/java/java/util/concurrent/Executor.java
deleted file mode 100755
index 6b4574a..0000000
--- a/ojluni/src/main/java/java/util/concurrent/Executor.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * An object that executes submitted {@link Runnable} tasks. This
- * interface provides a way of decoupling task submission from the
- * mechanics of how each task will be run, including details of thread
- * use, scheduling, etc.  An <tt>Executor</tt> is normally used
- * instead of explicitly creating threads. For example, rather than
- * invoking <tt>new Thread(new(RunnableTask())).start()</tt> for each
- * of a set of tasks, you might use:
- *
- * <pre>
- * Executor executor = <em>anExecutor</em>;
- * executor.execute(new RunnableTask1());
- * executor.execute(new RunnableTask2());
- * ...
- * </pre>
- *
- * However, the <tt>Executor</tt> interface does not strictly
- * require that execution be asynchronous. In the simplest case, an
- * executor can run the submitted task immediately in the caller's
- * thread:
- *
- * <pre>
- * class DirectExecutor implements Executor {
- *     public void execute(Runnable r) {
- *         r.run();
- *     }
- * }</pre>
- *
- * More typically, tasks are executed in some thread other
- * than the caller's thread.  The executor below spawns a new thread
- * for each task.
- *
- * <pre>
- * class ThreadPerTaskExecutor implements Executor {
- *     public void execute(Runnable r) {
- *         new Thread(r).start();
- *     }
- * }</pre>
- *
- * Many <tt>Executor</tt> implementations impose some sort of
- * limitation on how and when tasks are scheduled.  The executor below
- * serializes the submission of tasks to a second executor,
- * illustrating a composite executor.
- *
- *  <pre> {@code
- * class SerialExecutor implements Executor {
- *   final Queue<Runnable> tasks = new ArrayDeque<Runnable>();
- *   final Executor executor;
- *   Runnable active;
- *
- *   SerialExecutor(Executor executor) {
- *     this.executor = executor;
- *   }
- *
- *   public synchronized void execute(final Runnable r) {
- *     tasks.offer(new Runnable() {
- *       public void run() {
- *         try {
- *           r.run();
- *         } finally {
- *           scheduleNext();
- *         }
- *       }
- *     });
- *     if (active == null) {
- *       scheduleNext();
- *     }
- *   }
- *
- *   protected synchronized void scheduleNext() {
- *     if ((active = tasks.poll()) != null) {
- *       executor.execute(active);
- *     }
- *   }
- * }}</pre>
- *
- * The <tt>Executor</tt> implementations provided in this package
- * implement {@link ExecutorService}, which is a more extensive
- * interface.  The {@link ThreadPoolExecutor} class provides an
- * extensible thread pool implementation. The {@link Executors} class
- * provides convenient factory methods for these Executors.
- *
- * <p>Memory consistency effects: Actions in a thread prior to
- * submitting a {@code Runnable} object to an {@code Executor}
- * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
- * its execution begins, perhaps in another thread.
- *
- * @since 1.5
- * @author Doug Lea
- */
-public interface Executor {
-
-    /**
-     * Executes the given command at some time in the future.  The command
-     * may execute in a new thread, in a pooled thread, or in the calling
-     * thread, at the discretion of the <tt>Executor</tt> implementation.
-     *
-     * @param command the runnable task
-     * @throws RejectedExecutionException if this task cannot be
-     * accepted for execution.
-     * @throws NullPointerException if command is null
-     */
-    void execute(Runnable command);
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ExecutorCompletionService.java b/ojluni/src/main/java/java/util/concurrent/ExecutorCompletionService.java
deleted file mode 100755
index 34d1d1a..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ExecutorCompletionService.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * A {@link CompletionService} that uses a supplied {@link Executor}
- * to execute tasks.  This class arranges that submitted tasks are,
- * upon completion, placed on a queue accessible using {@code take}.
- * The class is lightweight enough to be suitable for transient use
- * when processing groups of tasks.
- *
- * <p>
- *
- * <b>Usage Examples.</b>
- *
- * Suppose you have a set of solvers for a certain problem, each
- * returning a value of some type {@code Result}, and would like to
- * run them concurrently, processing the results of each of them that
- * return a non-null value, in some method {@code use(Result r)}. You
- * could write this as:
- *
- * <pre> {@code
- * void solve(Executor e,
- *            Collection<Callable<Result>> solvers)
- *     throws InterruptedException, ExecutionException {
- *     CompletionService<Result> ecs
- *         = new ExecutorCompletionService<Result>(e);
- *     for (Callable<Result> s : solvers)
- *         ecs.submit(s);
- *     int n = solvers.size();
- *     for (int i = 0; i < n; ++i) {
- *         Result r = ecs.take().get();
- *         if (r != null)
- *             use(r);
- *     }
- * }}</pre>
- *
- * Suppose instead that you would like to use the first non-null result
- * of the set of tasks, ignoring any that encounter exceptions,
- * and cancelling all other tasks when the first one is ready:
- *
- * <pre> {@code
- * void solve(Executor e,
- *            Collection<Callable<Result>> solvers)
- *     throws InterruptedException {
- *     CompletionService<Result> ecs
- *         = new ExecutorCompletionService<Result>(e);
- *     int n = solvers.size();
- *     List<Future<Result>> futures
- *         = new ArrayList<Future<Result>>(n);
- *     Result result = null;
- *     try {
- *         for (Callable<Result> s : solvers)
- *             futures.add(ecs.submit(s));
- *         for (int i = 0; i < n; ++i) {
- *             try {
- *                 Result r = ecs.take().get();
- *                 if (r != null) {
- *                     result = r;
- *                     break;
- *                 }
- *             } catch (ExecutionException ignore) {}
- *         }
- *     }
- *     finally {
- *         for (Future<Result> f : futures)
- *             f.cancel(true);
- *     }
- *
- *     if (result != null)
- *         use(result);
- * }}</pre>
- */
-public class ExecutorCompletionService<V> implements CompletionService<V> {
-    private final Executor executor;
-    private final AbstractExecutorService aes;
-    private final BlockingQueue<Future<V>> completionQueue;
-
-    /**
-     * FutureTask extension to enqueue upon completion
-     */
-    private class QueueingFuture extends FutureTask<Void> {
-        QueueingFuture(RunnableFuture<V> task) {
-            super(task, null);
-            this.task = task;
-        }
-        protected void done() { completionQueue.add(task); }
-        private final Future<V> task;
-    }
-
-    private RunnableFuture<V> newTaskFor(Callable<V> task) {
-        if (aes == null)
-            return new FutureTask<V>(task);
-        else
-            return aes.newTaskFor(task);
-    }
-
-    private RunnableFuture<V> newTaskFor(Runnable task, V result) {
-        if (aes == null)
-            return new FutureTask<V>(task, result);
-        else
-            return aes.newTaskFor(task, result);
-    }
-
-    /**
-     * Creates an ExecutorCompletionService using the supplied
-     * executor for base task execution and a
-     * {@link LinkedBlockingQueue} as a completion queue.
-     *
-     * @param executor the executor to use
-     * @throws NullPointerException if executor is {@code null}
-     */
-    public ExecutorCompletionService(Executor executor) {
-        if (executor == null)
-            throw new NullPointerException();
-        this.executor = executor;
-        this.aes = (executor instanceof AbstractExecutorService) ?
-            (AbstractExecutorService) executor : null;
-        this.completionQueue = new LinkedBlockingQueue<Future<V>>();
-    }
-
-    /**
-     * Creates an ExecutorCompletionService using the supplied
-     * executor for base task execution and the supplied queue as its
-     * completion queue.
-     *
-     * @param executor the executor to use
-     * @param completionQueue the queue to use as the completion queue
-     *        normally one dedicated for use by this service. This
-     *        queue is treated as unbounded -- failed attempted
-     *        {@code Queue.add} operations for completed taskes cause
-     *        them not to be retrievable.
-     * @throws NullPointerException if executor or completionQueue are {@code null}
-     */
-    public ExecutorCompletionService(Executor executor,
-                                     BlockingQueue<Future<V>> completionQueue) {
-        if (executor == null || completionQueue == null)
-            throw new NullPointerException();
-        this.executor = executor;
-        this.aes = (executor instanceof AbstractExecutorService) ?
-            (AbstractExecutorService) executor : null;
-        this.completionQueue = completionQueue;
-    }
-
-    public Future<V> submit(Callable<V> task) {
-        if (task == null) throw new NullPointerException();
-        RunnableFuture<V> f = newTaskFor(task);
-        executor.execute(new QueueingFuture(f));
-        return f;
-    }
-
-    public Future<V> submit(Runnable task, V result) {
-        if (task == null) throw new NullPointerException();
-        RunnableFuture<V> f = newTaskFor(task, result);
-        executor.execute(new QueueingFuture(f));
-        return f;
-    }
-
-    public Future<V> take() throws InterruptedException {
-        return completionQueue.take();
-    }
-
-    public Future<V> poll() {
-        return completionQueue.poll();
-    }
-
-    public Future<V> poll(long timeout, TimeUnit unit)
-            throws InterruptedException {
-        return completionQueue.poll(timeout, unit);
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ExecutorService.java b/ojluni/src/main/java/java/util/concurrent/ExecutorService.java
deleted file mode 100755
index f1ab327..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ExecutorService.java
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.List;
-import java.util.Collection;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedExceptionAction;
-
-/**
- * An {@link Executor} that provides methods to manage termination and
- * methods that can produce a {@link Future} for tracking progress of
- * one or more asynchronous tasks.
- *
- * <p> An <tt>ExecutorService</tt> can be shut down, which will cause
- * it to reject new tasks.  Two different methods are provided for
- * shutting down an <tt>ExecutorService</tt>. The {@link #shutdown}
- * method will allow previously submitted tasks to execute before
- * terminating, while the {@link #shutdownNow} method prevents waiting
- * tasks from starting and attempts to stop currently executing tasks.
- * Upon termination, an executor has no tasks actively executing, no
- * tasks awaiting execution, and no new tasks can be submitted.  An
- * unused <tt>ExecutorService</tt> should be shut down to allow
- * reclamation of its resources.
- *
- * <p> Method <tt>submit</tt> extends base method {@link
- * Executor#execute} by creating and returning a {@link Future} that
- * can be used to cancel execution and/or wait for completion.
- * Methods <tt>invokeAny</tt> and <tt>invokeAll</tt> perform the most
- * commonly useful forms of bulk execution, executing a collection of
- * tasks and then waiting for at least one, or all, to
- * complete. (Class {@link ExecutorCompletionService} can be used to
- * write customized variants of these methods.)
- *
- * <p>The {@link Executors} class provides factory methods for the
- * executor services provided in this package.
- *
- * <h3>Usage Examples</h3>
- *
- * Here is a sketch of a network service in which threads in a thread
- * pool service incoming requests. It uses the preconfigured {@link
- * Executors#newFixedThreadPool} factory method:
- *
- * <pre>
- * class NetworkService implements Runnable {
- *   private final ServerSocket serverSocket;
- *   private final ExecutorService pool;
- *
- *   public NetworkService(int port, int poolSize)
- *       throws IOException {
- *     serverSocket = new ServerSocket(port);
- *     pool = Executors.newFixedThreadPool(poolSize);
- *   }
- *
- *   public void run() { // run the service
- *     try {
- *       for (;;) {
- *         pool.execute(new Handler(serverSocket.accept()));
- *       }
- *     } catch (IOException ex) {
- *       pool.shutdown();
- *     }
- *   }
- * }
- *
- * class Handler implements Runnable {
- *   private final Socket socket;
- *   Handler(Socket socket) { this.socket = socket; }
- *   public void run() {
- *     // read and service request on socket
- *   }
- * }
- * </pre>
- *
- * The following method shuts down an <tt>ExecutorService</tt> in two phases,
- * first by calling <tt>shutdown</tt> to reject incoming tasks, and then
- * calling <tt>shutdownNow</tt>, if necessary, to cancel any lingering tasks:
- *
- * <pre>
- * void shutdownAndAwaitTermination(ExecutorService pool) {
- *   pool.shutdown(); // Disable new tasks from being submitted
- *   try {
- *     // Wait a while for existing tasks to terminate
- *     if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
- *       pool.shutdownNow(); // Cancel currently executing tasks
- *       // Wait a while for tasks to respond to being cancelled
- *       if (!pool.awaitTermination(60, TimeUnit.SECONDS))
- *           System.err.println("Pool did not terminate");
- *     }
- *   } catch (InterruptedException ie) {
- *     // (Re-)Cancel if current thread also interrupted
- *     pool.shutdownNow();
- *     // Preserve interrupt status
- *     Thread.currentThread().interrupt();
- *   }
- * }
- * </pre>
- *
- * <p>Memory consistency effects: Actions in a thread prior to the
- * submission of a {@code Runnable} or {@code Callable} task to an
- * {@code ExecutorService}
- * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
- * any actions taken by that task, which in turn <i>happen-before</i> the
- * result is retrieved via {@code Future.get()}.
- *
- * @since 1.5
- * @author Doug Lea
- */
-public interface ExecutorService extends Executor {
-
-    /**
-     * Initiates an orderly shutdown in which previously submitted
-     * tasks are executed, but no new tasks will be accepted.
-     * Invocation has no additional effect if already shut down.
-     *
-     * <p>This method does not wait for previously submitted tasks to
-     * complete execution.  Use {@link #awaitTermination awaitTermination}
-     * to do that.
-     *
-     * @throws SecurityException if a security manager exists and
-     *         shutting down this ExecutorService may manipulate
-     *         threads that the caller is not permitted to modify
-     *         because it does not hold {@link
-     *         java.lang.RuntimePermission}<tt>("modifyThread")</tt>,
-     *         or the security manager's <tt>checkAccess</tt> method
-     *         denies access.
-     */
-    void shutdown();
-
-    /**
-     * Attempts to stop all actively executing tasks, halts the
-     * processing of waiting tasks, and returns a list of the tasks
-     * that were awaiting execution.
-     *
-     * <p>This method does not wait for actively executing tasks to
-     * terminate.  Use {@link #awaitTermination awaitTermination} to
-     * do that.
-     *
-     * <p>There are no guarantees beyond best-effort attempts to stop
-     * processing actively executing tasks.  For example, typical
-     * implementations will cancel via {@link Thread#interrupt}, so any
-     * task that fails to respond to interrupts may never terminate.
-     *
-     * @return list of tasks that never commenced execution
-     * @throws SecurityException if a security manager exists and
-     *         shutting down this ExecutorService may manipulate
-     *         threads that the caller is not permitted to modify
-     *         because it does not hold {@link
-     *         java.lang.RuntimePermission}<tt>("modifyThread")</tt>,
-     *         or the security manager's <tt>checkAccess</tt> method
-     *         denies access.
-     */
-    List<Runnable> shutdownNow();
-
-    /**
-     * Returns <tt>true</tt> if this executor has been shut down.
-     *
-     * @return <tt>true</tt> if this executor has been shut down
-     */
-    boolean isShutdown();
-
-    /**
-     * Returns <tt>true</tt> if all tasks have completed following shut down.
-     * Note that <tt>isTerminated</tt> is never <tt>true</tt> unless
-     * either <tt>shutdown</tt> or <tt>shutdownNow</tt> was called first.
-     *
-     * @return <tt>true</tt> if all tasks have completed following shut down
-     */
-    boolean isTerminated();
-
-    /**
-     * Blocks until all tasks have completed execution after a shutdown
-     * request, or the timeout occurs, or the current thread is
-     * interrupted, whichever happens first.
-     *
-     * @param timeout the maximum time to wait
-     * @param unit the time unit of the timeout argument
-     * @return <tt>true</tt> if this executor terminated and
-     *         <tt>false</tt> if the timeout elapsed before termination
-     * @throws InterruptedException if interrupted while waiting
-     */
-    boolean awaitTermination(long timeout, TimeUnit unit)
-        throws InterruptedException;
-
-
-    /**
-     * Submits a value-returning task for execution and returns a
-     * Future representing the pending results of the task. The
-     * Future's <tt>get</tt> method will return the task's result upon
-     * successful completion.
-     *
-     * <p>
-     * If you would like to immediately block waiting
-     * for a task, you can use constructions of the form
-     * <tt>result = exec.submit(aCallable).get();</tt>
-     *
-     * <p> Note: The {@link Executors} class includes a set of methods
-     * that can convert some other common closure-like objects,
-     * for example, {@link java.security.PrivilegedAction} to
-     * {@link Callable} form so they can be submitted.
-     *
-     * @param task the task to submit
-     * @return a Future representing pending completion of the task
-     * @throws RejectedExecutionException if the task cannot be
-     *         scheduled for execution
-     * @throws NullPointerException if the task is null
-     */
-    <T> Future<T> submit(Callable<T> task);
-
-    /**
-     * Submits a Runnable task for execution and returns a Future
-     * representing that task. The Future's <tt>get</tt> method will
-     * return the given result upon successful completion.
-     *
-     * @param task the task to submit
-     * @param result the result to return
-     * @return a Future representing pending completion of the task
-     * @throws RejectedExecutionException if the task cannot be
-     *         scheduled for execution
-     * @throws NullPointerException if the task is null
-     */
-    <T> Future<T> submit(Runnable task, T result);
-
-    /**
-     * Submits a Runnable task for execution and returns a Future
-     * representing that task. The Future's <tt>get</tt> method will
-     * return <tt>null</tt> upon <em>successful</em> completion.
-     *
-     * @param task the task to submit
-     * @return a Future representing pending completion of the task
-     * @throws RejectedExecutionException if the task cannot be
-     *         scheduled for execution
-     * @throws NullPointerException if the task is null
-     */
-    Future<?> submit(Runnable task);
-
-    /**
-     * Executes the given tasks, returning a list of Futures holding
-     * their status and results when all complete.
-     * {@link Future#isDone} is <tt>true</tt> for each
-     * element of the returned list.
-     * Note that a <em>completed</em> task could have
-     * terminated either normally or by throwing an exception.
-     * The results of this method are undefined if the given
-     * collection is modified while this operation is in progress.
-     *
-     * @param tasks the collection of tasks
-     * @return A list of Futures representing the tasks, in the same
-     *         sequential order as produced by the iterator for the
-     *         given task list, each of which has completed.
-     * @throws InterruptedException if interrupted while waiting, in
-     *         which case unfinished tasks are cancelled.
-     * @throws NullPointerException if tasks or any of its elements are <tt>null</tt>
-     * @throws RejectedExecutionException if any task cannot be
-     *         scheduled for execution
-     */
-
-    <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
-        throws InterruptedException;
-
-    /**
-     * Executes the given tasks, returning a list of Futures holding
-     * their status and results
-     * when all complete or the timeout expires, whichever happens first.
-     * {@link Future#isDone} is <tt>true</tt> for each
-     * element of the returned list.
-     * Upon return, tasks that have not completed are cancelled.
-     * Note that a <em>completed</em> task could have
-     * terminated either normally or by throwing an exception.
-     * The results of this method are undefined if the given
-     * collection is modified while this operation is in progress.
-     *
-     * @param tasks the collection of tasks
-     * @param timeout the maximum time to wait
-     * @param unit the time unit of the timeout argument
-     * @return a list of Futures representing the tasks, in the same
-     *         sequential order as produced by the iterator for the
-     *         given task list. If the operation did not time out,
-     *         each task will have completed. If it did time out, some
-     *         of these tasks will not have completed.
-     * @throws InterruptedException if interrupted while waiting, in
-     *         which case unfinished tasks are cancelled
-     * @throws NullPointerException if tasks, any of its elements, or
-     *         unit are <tt>null</tt>
-     * @throws RejectedExecutionException if any task cannot be scheduled
-     *         for execution
-     */
-    <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
-                                  long timeout, TimeUnit unit)
-        throws InterruptedException;
-
-    /**
-     * Executes the given tasks, returning the result
-     * of one that has completed successfully (i.e., without throwing
-     * an exception), if any do. Upon normal or exceptional return,
-     * tasks that have not completed are cancelled.
-     * The results of this method are undefined if the given
-     * collection is modified while this operation is in progress.
-     *
-     * @param tasks the collection of tasks
-     * @return the result returned by one of the tasks
-     * @throws InterruptedException if interrupted while waiting
-     * @throws NullPointerException if tasks or any element task
-     *         subject to execution is <tt>null</tt>
-     * @throws IllegalArgumentException if tasks is empty
-     * @throws ExecutionException if no task successfully completes
-     * @throws RejectedExecutionException if tasks cannot be scheduled
-     *         for execution
-     */
-    <T> T invokeAny(Collection<? extends Callable<T>> tasks)
-        throws InterruptedException, ExecutionException;
-
-    /**
-     * Executes the given tasks, returning the result
-     * of one that has completed successfully (i.e., without throwing
-     * an exception), if any do before the given timeout elapses.
-     * Upon normal or exceptional return, tasks that have not
-     * completed are cancelled.
-     * The results of this method are undefined if the given
-     * collection is modified while this operation is in progress.
-     *
-     * @param tasks the collection of tasks
-     * @param timeout the maximum time to wait
-     * @param unit the time unit of the timeout argument
-     * @return the result returned by one of the tasks.
-     * @throws InterruptedException if interrupted while waiting
-     * @throws NullPointerException if tasks, or unit, or any element
-     *         task subject to execution is <tt>null</tt>
-     * @throws TimeoutException if the given timeout elapses before
-     *         any task successfully completes
-     * @throws ExecutionException if no task successfully completes
-     * @throws RejectedExecutionException if tasks cannot be scheduled
-     *         for execution
-     */
-    <T> T invokeAny(Collection<? extends Callable<T>> tasks,
-                    long timeout, TimeUnit unit)
-        throws InterruptedException, ExecutionException, TimeoutException;
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/Executors.java b/ojluni/src/main/java/java/util/concurrent/Executors.java
deleted file mode 100755
index 78708f8..0000000
--- a/ojluni/src/main/java/java/util/concurrent/Executors.java
+++ /dev/null
@@ -1,705 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.*;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedExceptionAction;
-import java.security.PrivilegedActionException;
-import java.security.AccessControlException;
-import sun.security.util.SecurityConstants;
-
-/**
- * Factory and utility methods for {@link Executor}, {@link
- * ExecutorService}, {@link ScheduledExecutorService}, {@link
- * ThreadFactory}, and {@link Callable} classes defined in this
- * package. This class supports the following kinds of methods:
- *
- * <ul>
- *   <li> Methods that create and return an {@link ExecutorService}
- *        set up with commonly useful configuration settings.
- *   <li> Methods that create and return a {@link ScheduledExecutorService}
- *        set up with commonly useful configuration settings.
- *   <li> Methods that create and return a "wrapped" ExecutorService, that
- *        disables reconfiguration by making implementation-specific methods
- *        inaccessible.
- *   <li> Methods that create and return a {@link ThreadFactory}
- *        that sets newly created threads to a known state.
- *   <li> Methods that create and return a {@link Callable}
- *        out of other closure-like forms, so they can be used
- *        in execution methods requiring <tt>Callable</tt>.
- * </ul>
- *
- * @since 1.5
- * @author Doug Lea
- */
-public class Executors {
-
-    /**
-     * Creates a thread pool that reuses a fixed number of threads
-     * operating off a shared unbounded queue.  At any point, at most
-     * <tt>nThreads</tt> threads will be active processing tasks.
-     * If additional tasks are submitted when all threads are active,
-     * they will wait in the queue until a thread is available.
-     * If any thread terminates due to a failure during execution
-     * prior to shutdown, a new one will take its place if needed to
-     * execute subsequent tasks.  The threads in the pool will exist
-     * until it is explicitly {@link ExecutorService#shutdown shutdown}.
-     *
-     * @param nThreads the number of threads in the pool
-     * @return the newly created thread pool
-     * @throws IllegalArgumentException if {@code nThreads <= 0}
-     */
-    public static ExecutorService newFixedThreadPool(int nThreads) {
-        return new ThreadPoolExecutor(nThreads, nThreads,
-                                      0L, TimeUnit.MILLISECONDS,
-                                      new LinkedBlockingQueue<Runnable>());
-    }
-
-    /**
-     * Creates a thread pool that reuses a fixed number of threads
-     * operating off a shared unbounded queue, using the provided
-     * ThreadFactory to create new threads when needed.  At any point,
-     * at most <tt>nThreads</tt> threads will be active processing
-     * tasks.  If additional tasks are submitted when all threads are
-     * active, they will wait in the queue until a thread is
-     * available.  If any thread terminates due to a failure during
-     * execution prior to shutdown, a new one will take its place if
-     * needed to execute subsequent tasks.  The threads in the pool will
-     * exist until it is explicitly {@link ExecutorService#shutdown
-     * shutdown}.
-     *
-     * @param nThreads the number of threads in the pool
-     * @param threadFactory the factory to use when creating new threads
-     * @return the newly created thread pool
-     * @throws NullPointerException if threadFactory is null
-     * @throws IllegalArgumentException if {@code nThreads <= 0}
-     */
-    public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {
-        return new ThreadPoolExecutor(nThreads, nThreads,
-                                      0L, TimeUnit.MILLISECONDS,
-                                      new LinkedBlockingQueue<Runnable>(),
-                                      threadFactory);
-    }
-
-    /**
-     * Creates an Executor that uses a single worker thread operating
-     * off an unbounded queue. (Note however that if this single
-     * thread terminates due to a failure during execution prior to
-     * shutdown, a new one will take its place if needed to execute
-     * subsequent tasks.)  Tasks are guaranteed to execute
-     * sequentially, and no more than one task will be active at any
-     * given time. Unlike the otherwise equivalent
-     * <tt>newFixedThreadPool(1)</tt> the returned executor is
-     * guaranteed not to be reconfigurable to use additional threads.
-     *
-     * @return the newly created single-threaded Executor
-     */
-    public static ExecutorService newSingleThreadExecutor() {
-        return new FinalizableDelegatedExecutorService
-            (new ThreadPoolExecutor(1, 1,
-                                    0L, TimeUnit.MILLISECONDS,
-                                    new LinkedBlockingQueue<Runnable>()));
-    }
-
-    /**
-     * Creates an Executor that uses a single worker thread operating
-     * off an unbounded queue, and uses the provided ThreadFactory to
-     * create a new thread when needed. Unlike the otherwise
-     * equivalent <tt>newFixedThreadPool(1, threadFactory)</tt> the
-     * returned executor is guaranteed not to be reconfigurable to use
-     * additional threads.
-     *
-     * @param threadFactory the factory to use when creating new
-     * threads
-     *
-     * @return the newly created single-threaded Executor
-     * @throws NullPointerException if threadFactory is null
-     */
-    public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {
-        return new FinalizableDelegatedExecutorService
-            (new ThreadPoolExecutor(1, 1,
-                                    0L, TimeUnit.MILLISECONDS,
-                                    new LinkedBlockingQueue<Runnable>(),
-                                    threadFactory));
-    }
-
-    /**
-     * Creates a thread pool that creates new threads as needed, but
-     * will reuse previously constructed threads when they are
-     * available.  These pools will typically improve the performance
-     * of programs that execute many short-lived asynchronous tasks.
-     * Calls to <tt>execute</tt> will reuse previously constructed
-     * threads if available. If no existing thread is available, a new
-     * thread will be created and added to the pool. Threads that have
-     * not been used for sixty seconds are terminated and removed from
-     * the cache. Thus, a pool that remains idle for long enough will
-     * not consume any resources. Note that pools with similar
-     * properties but different details (for example, timeout parameters)
-     * may be created using {@link ThreadPoolExecutor} constructors.
-     *
-     * @return the newly created thread pool
-     */
-    public static ExecutorService newCachedThreadPool() {
-        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
-                                      60L, TimeUnit.SECONDS,
-                                      new SynchronousQueue<Runnable>());
-    }
-
-    /**
-     * Creates a thread pool that creates new threads as needed, but
-     * will reuse previously constructed threads when they are
-     * available, and uses the provided
-     * ThreadFactory to create new threads when needed.
-     * @param threadFactory the factory to use when creating new threads
-     * @return the newly created thread pool
-     * @throws NullPointerException if threadFactory is null
-     */
-    public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {
-        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
-                                      60L, TimeUnit.SECONDS,
-                                      new SynchronousQueue<Runnable>(),
-                                      threadFactory);
-    }
-
-    /**
-     * Creates a single-threaded executor that can schedule commands
-     * to run after a given delay, or to execute periodically.
-     * (Note however that if this single
-     * thread terminates due to a failure during execution prior to
-     * shutdown, a new one will take its place if needed to execute
-     * subsequent tasks.)  Tasks are guaranteed to execute
-     * sequentially, and no more than one task will be active at any
-     * given time. Unlike the otherwise equivalent
-     * <tt>newScheduledThreadPool(1)</tt> the returned executor is
-     * guaranteed not to be reconfigurable to use additional threads.
-     * @return the newly created scheduled executor
-     */
-    public static ScheduledExecutorService newSingleThreadScheduledExecutor() {
-        return new DelegatedScheduledExecutorService
-            (new ScheduledThreadPoolExecutor(1));
-    }
-
-    /**
-     * Creates a single-threaded executor that can schedule commands
-     * to run after a given delay, or to execute periodically.  (Note
-     * however that if this single thread terminates due to a failure
-     * during execution prior to shutdown, a new one will take its
-     * place if needed to execute subsequent tasks.)  Tasks are
-     * guaranteed to execute sequentially, and no more than one task
-     * will be active at any given time. Unlike the otherwise
-     * equivalent <tt>newScheduledThreadPool(1, threadFactory)</tt>
-     * the returned executor is guaranteed not to be reconfigurable to
-     * use additional threads.
-     * @param threadFactory the factory to use when creating new
-     * threads
-     * @return a newly created scheduled executor
-     * @throws NullPointerException if threadFactory is null
-     */
-    public static ScheduledExecutorService newSingleThreadScheduledExecutor(ThreadFactory threadFactory) {
-        return new DelegatedScheduledExecutorService
-            (new ScheduledThreadPoolExecutor(1, threadFactory));
-    }
-
-    /**
-     * Creates a thread pool that can schedule commands to run after a
-     * given delay, or to execute periodically.
-     * @param corePoolSize the number of threads to keep in the pool,
-     * even if they are idle.
-     * @return a newly created scheduled thread pool
-     * @throws IllegalArgumentException if {@code corePoolSize < 0}
-     */
-    public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
-        return new ScheduledThreadPoolExecutor(corePoolSize);
-    }
-
-    /**
-     * Creates a thread pool that can schedule commands to run after a
-     * given delay, or to execute periodically.
-     * @param corePoolSize the number of threads to keep in the pool,
-     * even if they are idle.
-     * @param threadFactory the factory to use when the executor
-     * creates a new thread.
-     * @return a newly created scheduled thread pool
-     * @throws IllegalArgumentException if {@code corePoolSize < 0}
-     * @throws NullPointerException if threadFactory is null
-     */
-    public static ScheduledExecutorService newScheduledThreadPool(
-            int corePoolSize, ThreadFactory threadFactory) {
-        return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);
-    }
-
-
-    /**
-     * Returns an object that delegates all defined {@link
-     * ExecutorService} methods to the given executor, but not any
-     * other methods that might otherwise be accessible using
-     * casts. This provides a way to safely "freeze" configuration and
-     * disallow tuning of a given concrete implementation.
-     * @param executor the underlying implementation
-     * @return an <tt>ExecutorService</tt> instance
-     * @throws NullPointerException if executor null
-     */
-    public static ExecutorService unconfigurableExecutorService(ExecutorService executor) {
-        if (executor == null)
-            throw new NullPointerException();
-        return new DelegatedExecutorService(executor);
-    }
-
-    /**
-     * Returns an object that delegates all defined {@link
-     * ScheduledExecutorService} methods to the given executor, but
-     * not any other methods that might otherwise be accessible using
-     * casts. This provides a way to safely "freeze" configuration and
-     * disallow tuning of a given concrete implementation.
-     * @param executor the underlying implementation
-     * @return a <tt>ScheduledExecutorService</tt> instance
-     * @throws NullPointerException if executor null
-     */
-    public static ScheduledExecutorService unconfigurableScheduledExecutorService(ScheduledExecutorService executor) {
-        if (executor == null)
-            throw new NullPointerException();
-        return new DelegatedScheduledExecutorService(executor);
-    }
-
-    /**
-     * Returns a default thread factory used to create new threads.
-     * This factory creates all new threads used by an Executor in the
-     * same {@link ThreadGroup}. If there is a {@link
-     * java.lang.SecurityManager}, it uses the group of {@link
-     * System#getSecurityManager}, else the group of the thread
-     * invoking this <tt>defaultThreadFactory</tt> method. Each new
-     * thread is created as a non-daemon thread with priority set to
-     * the smaller of <tt>Thread.NORM_PRIORITY</tt> and the maximum
-     * priority permitted in the thread group.  New threads have names
-     * accessible via {@link Thread#getName} of
-     * <em>pool-N-thread-M</em>, where <em>N</em> is the sequence
-     * number of this factory, and <em>M</em> is the sequence number
-     * of the thread created by this factory.
-     * @return a thread factory
-     */
-    public static ThreadFactory defaultThreadFactory() {
-        return new DefaultThreadFactory();
-    }
-
-    /**
-     * Returns a thread factory used to create new threads that
-     * have the same permissions as the current thread.
-     * This factory creates threads with the same settings as {@link
-     * Executors#defaultThreadFactory}, additionally setting the
-     * AccessControlContext and contextClassLoader of new threads to
-     * be the same as the thread invoking this
-     * <tt>privilegedThreadFactory</tt> method.  A new
-     * <tt>privilegedThreadFactory</tt> can be created within an
-     * {@link AccessController#doPrivileged} action setting the
-     * current thread's access control context to create threads with
-     * the selected permission settings holding within that action.
-     *
-     * <p> Note that while tasks running within such threads will have
-     * the same access control and class loader settings as the
-     * current thread, they need not have the same {@link
-     * java.lang.ThreadLocal} or {@link
-     * java.lang.InheritableThreadLocal} values. If necessary,
-     * particular values of thread locals can be set or reset before
-     * any task runs in {@link ThreadPoolExecutor} subclasses using
-     * {@link ThreadPoolExecutor#beforeExecute}. Also, if it is
-     * necessary to initialize worker threads to have the same
-     * InheritableThreadLocal settings as some other designated
-     * thread, you can create a custom ThreadFactory in which that
-     * thread waits for and services requests to create others that
-     * will inherit its values.
-     *
-     * @return a thread factory
-     * @throws AccessControlException if the current access control
-     * context does not have permission to both get and set context
-     * class loader.
-     */
-    public static ThreadFactory privilegedThreadFactory() {
-        return new PrivilegedThreadFactory();
-    }
-
-    /**
-     * Returns a {@link Callable} object that, when
-     * called, runs the given task and returns the given result.  This
-     * can be useful when applying methods requiring a
-     * <tt>Callable</tt> to an otherwise resultless action.
-     * @param task the task to run
-     * @param result the result to return
-     * @return a callable object
-     * @throws NullPointerException if task null
-     */
-    public static <T> Callable<T> callable(Runnable task, T result) {
-        if (task == null)
-            throw new NullPointerException();
-        return new RunnableAdapter<T>(task, result);
-    }
-
-    /**
-     * Returns a {@link Callable} object that, when
-     * called, runs the given task and returns <tt>null</tt>.
-     * @param task the task to run
-     * @return a callable object
-     * @throws NullPointerException if task null
-     */
-    public static Callable<Object> callable(Runnable task) {
-        if (task == null)
-            throw new NullPointerException();
-        return new RunnableAdapter<Object>(task, null);
-    }
-
-    /**
-     * Returns a {@link Callable} object that, when
-     * called, runs the given privileged action and returns its result.
-     * @param action the privileged action to run
-     * @return a callable object
-     * @throws NullPointerException if action null
-     */
-    public static Callable<Object> callable(final PrivilegedAction<?> action) {
-        if (action == null)
-            throw new NullPointerException();
-        return new Callable<Object>() {
-            public Object call() { return action.run(); }};
-    }
-
-    /**
-     * Returns a {@link Callable} object that, when
-     * called, runs the given privileged exception action and returns
-     * its result.
-     * @param action the privileged exception action to run
-     * @return a callable object
-     * @throws NullPointerException if action null
-     */
-    public static Callable<Object> callable(final PrivilegedExceptionAction<?> action) {
-        if (action == null)
-            throw new NullPointerException();
-        return new Callable<Object>() {
-            public Object call() throws Exception { return action.run(); }};
-    }
-
-    /**
-     * Returns a {@link Callable} object that will, when
-     * called, execute the given <tt>callable</tt> under the current
-     * access control context. This method should normally be
-     * invoked within an {@link AccessController#doPrivileged} action
-     * to create callables that will, if possible, execute under the
-     * selected permission settings holding within that action; or if
-     * not possible, throw an associated {@link
-     * AccessControlException}.
-     * @param callable the underlying task
-     * @return a callable object
-     * @throws NullPointerException if callable null
-     *
-     */
-    public static <T> Callable<T> privilegedCallable(Callable<T> callable) {
-        if (callable == null)
-            throw new NullPointerException();
-        return new PrivilegedCallable<T>(callable);
-    }
-
-    /**
-     * Returns a {@link Callable} object that will, when
-     * called, execute the given <tt>callable</tt> under the current
-     * access control context, with the current context class loader
-     * as the context class loader. This method should normally be
-     * invoked within an {@link AccessController#doPrivileged} action
-     * to create callables that will, if possible, execute under the
-     * selected permission settings holding within that action; or if
-     * not possible, throw an associated {@link
-     * AccessControlException}.
-     * @param callable the underlying task
-     *
-     * @return a callable object
-     * @throws NullPointerException if callable null
-     * @throws AccessControlException if the current access control
-     * context does not have permission to both set and get context
-     * class loader.
-     */
-    public static <T> Callable<T> privilegedCallableUsingCurrentClassLoader(Callable<T> callable) {
-        if (callable == null)
-            throw new NullPointerException();
-        return new PrivilegedCallableUsingCurrentClassLoader<T>(callable);
-    }
-
-    // Non-public classes supporting the public methods
-
-    /**
-     * A callable that runs given task and returns given result
-     */
-    static final class RunnableAdapter<T> implements Callable<T> {
-        final Runnable task;
-        final T result;
-        RunnableAdapter(Runnable task, T result) {
-            this.task = task;
-            this.result = result;
-        }
-        public T call() {
-            task.run();
-            return result;
-        }
-    }
-
-    /**
-     * A callable that runs under established access control settings
-     */
-    static final class PrivilegedCallable<T> implements Callable<T> {
-        private final Callable<T> task;
-        private final AccessControlContext acc;
-
-        PrivilegedCallable(Callable<T> task) {
-            this.task = task;
-            this.acc = AccessController.getContext();
-        }
-
-        public T call() throws Exception {
-            try {
-                return AccessController.doPrivileged(
-                    new PrivilegedExceptionAction<T>() {
-                        public T run() throws Exception {
-                            return task.call();
-                        }
-                    }, acc);
-            } catch (PrivilegedActionException e) {
-                throw e.getException();
-            }
-        }
-    }
-
-    /**
-     * A callable that runs under established access control settings and
-     * current ClassLoader
-     */
-    static final class PrivilegedCallableUsingCurrentClassLoader<T> implements Callable<T> {
-        private final Callable<T> task;
-        private final AccessControlContext acc;
-        private final ClassLoader ccl;
-
-        PrivilegedCallableUsingCurrentClassLoader(Callable<T> task) {
-            SecurityManager sm = System.getSecurityManager();
-            if (sm != null) {
-                // Calls to getContextClassLoader from this class
-                // never trigger a security check, but we check
-                // whether our callers have this permission anyways.
-                sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION);
-
-                // Whether setContextClassLoader turns out to be necessary
-                // or not, we fail fast if permission is not available.
-                sm.checkPermission(new RuntimePermission("setContextClassLoader"));
-            }
-            this.task = task;
-            this.acc = AccessController.getContext();
-            this.ccl = Thread.currentThread().getContextClassLoader();
-        }
-
-        public T call() throws Exception {
-            try {
-                return AccessController.doPrivileged(
-                    new PrivilegedExceptionAction<T>() {
-                        public T run() throws Exception {
-                            Thread t = Thread.currentThread();
-                            ClassLoader cl = t.getContextClassLoader();
-                            if (ccl == cl) {
-                                return task.call();
-                            } else {
-                                t.setContextClassLoader(ccl);
-                                try {
-                                    return task.call();
-                                } finally {
-                                    t.setContextClassLoader(cl);
-                                }
-                            }
-                        }
-                    }, acc);
-            } catch (PrivilegedActionException e) {
-                throw e.getException();
-            }
-        }
-    }
-
-    /**
-     * The default thread factory
-     */
-    static class DefaultThreadFactory implements ThreadFactory {
-        private static final AtomicInteger poolNumber = new AtomicInteger(1);
-        private final ThreadGroup group;
-        private final AtomicInteger threadNumber = new AtomicInteger(1);
-        private final String namePrefix;
-
-        DefaultThreadFactory() {
-            SecurityManager s = System.getSecurityManager();
-            group = (s != null) ? s.getThreadGroup() :
-                                  Thread.currentThread().getThreadGroup();
-            namePrefix = "pool-" +
-                          poolNumber.getAndIncrement() +
-                         "-thread-";
-        }
-
-        public Thread newThread(Runnable r) {
-            Thread t = new Thread(group, r,
-                                  namePrefix + threadNumber.getAndIncrement(),
-                                  0);
-            if (t.isDaemon())
-                t.setDaemon(false);
-            if (t.getPriority() != Thread.NORM_PRIORITY)
-                t.setPriority(Thread.NORM_PRIORITY);
-            return t;
-        }
-    }
-
-    /**
-     * Thread factory capturing access control context and class loader
-     */
-    static class PrivilegedThreadFactory extends DefaultThreadFactory {
-        private final AccessControlContext acc;
-        private final ClassLoader ccl;
-
-        PrivilegedThreadFactory() {
-            super();
-            SecurityManager sm = System.getSecurityManager();
-            if (sm != null) {
-                // Calls to getContextClassLoader from this class
-                // never trigger a security check, but we check
-                // whether our callers have this permission anyways.
-                sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION);
-
-                // Fail fast
-                sm.checkPermission(new RuntimePermission("setContextClassLoader"));
-            }
-            this.acc = AccessController.getContext();
-            this.ccl = Thread.currentThread().getContextClassLoader();
-        }
-
-        public Thread newThread(final Runnable r) {
-            return super.newThread(new Runnable() {
-                public void run() {
-                    AccessController.doPrivileged(new PrivilegedAction<Void>() {
-                        public Void run() {
-                            Thread.currentThread().setContextClassLoader(ccl);
-                            r.run();
-                            return null;
-                        }
-                    }, acc);
-                }
-            });
-        }
-    }
-
-    /**
-     * A wrapper class that exposes only the ExecutorService methods
-     * of an ExecutorService implementation.
-     */
-    static class DelegatedExecutorService extends AbstractExecutorService {
-        private final ExecutorService e;
-        DelegatedExecutorService(ExecutorService executor) { e = executor; }
-        public void execute(Runnable command) { e.execute(command); }
-        public void shutdown() { e.shutdown(); }
-        public List<Runnable> shutdownNow() { return e.shutdownNow(); }
-        public boolean isShutdown() { return e.isShutdown(); }
-        public boolean isTerminated() { return e.isTerminated(); }
-        public boolean awaitTermination(long timeout, TimeUnit unit)
-            throws InterruptedException {
-            return e.awaitTermination(timeout, unit);
-        }
-        public Future<?> submit(Runnable task) {
-            return e.submit(task);
-        }
-        public <T> Future<T> submit(Callable<T> task) {
-            return e.submit(task);
-        }
-        public <T> Future<T> submit(Runnable task, T result) {
-            return e.submit(task, result);
-        }
-        public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
-            throws InterruptedException {
-            return e.invokeAll(tasks);
-        }
-        public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
-                                             long timeout, TimeUnit unit)
-            throws InterruptedException {
-            return e.invokeAll(tasks, timeout, unit);
-        }
-        public <T> T invokeAny(Collection<? extends Callable<T>> tasks)
-            throws InterruptedException, ExecutionException {
-            return e.invokeAny(tasks);
-        }
-        public <T> T invokeAny(Collection<? extends Callable<T>> tasks,
-                               long timeout, TimeUnit unit)
-            throws InterruptedException, ExecutionException, TimeoutException {
-            return e.invokeAny(tasks, timeout, unit);
-        }
-    }
-
-    static class FinalizableDelegatedExecutorService
-        extends DelegatedExecutorService {
-        FinalizableDelegatedExecutorService(ExecutorService executor) {
-            super(executor);
-        }
-        protected void finalize() {
-            super.shutdown();
-        }
-    }
-
-    /**
-     * A wrapper class that exposes only the ScheduledExecutorService
-     * methods of a ScheduledExecutorService implementation.
-     */
-    static class DelegatedScheduledExecutorService
-            extends DelegatedExecutorService
-            implements ScheduledExecutorService {
-        private final ScheduledExecutorService e;
-        DelegatedScheduledExecutorService(ScheduledExecutorService executor) {
-            super(executor);
-            e = executor;
-        }
-        public ScheduledFuture<?> schedule(Runnable command, long delay,  TimeUnit unit) {
-            return e.schedule(command, delay, unit);
-        }
-        public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit) {
-            return e.schedule(callable, delay, unit);
-        }
-        public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay,  long period, TimeUnit unit) {
-            return e.scheduleAtFixedRate(command, initialDelay, period, unit);
-        }
-        public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay,  long delay, TimeUnit unit) {
-            return e.scheduleWithFixedDelay(command, initialDelay, delay, unit);
-        }
-    }
-
-
-    /** Cannot instantiate. */
-    private Executors() {}
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ForkJoinPool.java b/ojluni/src/main/java/java/util/concurrent/ForkJoinPool.java
deleted file mode 100755
index 9c90f36..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ForkJoinPool.java
+++ /dev/null
@@ -1,2177 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Random;
-import java.util.concurrent.AbstractExecutorService;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
-import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.RunnableFuture;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.locks.LockSupport;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.concurrent.locks.Condition;
-
-/**
- * An {@link ExecutorService} for running {@link ForkJoinTask}s.
- * A {@code ForkJoinPool} provides the entry point for submissions
- * from non-{@code ForkJoinTask} clients, as well as management and
- * monitoring operations.
- *
- * <p>A {@code ForkJoinPool} differs from other kinds of {@link
- * ExecutorService} mainly by virtue of employing
- * <em>work-stealing</em>: all threads in the pool attempt to find and
- * execute subtasks created by other active tasks (eventually blocking
- * waiting for work if none exist). This enables efficient processing
- * when most tasks spawn other subtasks (as do most {@code
- * ForkJoinTask}s). When setting <em>asyncMode</em> to true in
- * constructors, {@code ForkJoinPool}s may also be appropriate for use
- * with event-style tasks that are never joined.
- *
- * <p>A {@code ForkJoinPool} is constructed with a given target
- * parallelism level; by default, equal to the number of available
- * processors. The pool attempts to maintain enough active (or
- * available) threads by dynamically adding, suspending, or resuming
- * internal worker threads, even if some tasks are stalled waiting to
- * join others. However, no such adjustments are guaranteed in the
- * face of blocked IO or other unmanaged synchronization. The nested
- * {@link ManagedBlocker} interface enables extension of the kinds of
- * synchronization accommodated.
- *
- * <p>In addition to execution and lifecycle control methods, this
- * class provides status check methods (for example
- * {@link #getStealCount}) that are intended to aid in developing,
- * tuning, and monitoring fork/join applications. Also, method
- * {@link #toString} returns indications of pool state in a
- * convenient form for informal monitoring.
- *
- * <p> As is the case with other ExecutorServices, there are three
- * main task execution methods summarized in the following
- * table. These are designed to be used by clients not already engaged
- * in fork/join computations in the current pool.  The main forms of
- * these methods accept instances of {@code ForkJoinTask}, but
- * overloaded forms also allow mixed execution of plain {@code
- * Runnable}- or {@code Callable}- based activities as well.  However,
- * tasks that are already executing in a pool should normally
- * <em>NOT</em> use these pool execution methods, but instead use the
- * within-computation forms listed in the table.
- *
- * <table BORDER CELLPADDING=3 CELLSPACING=1>
- *  <tr>
- *    <td></td>
- *    <td ALIGN=CENTER> <b>Call from non-fork/join clients</b></td>
- *    <td ALIGN=CENTER> <b>Call from within fork/join computations</b></td>
- *  </tr>
- *  <tr>
- *    <td> <b>Arrange async execution</td>
- *    <td> {@link #execute(ForkJoinTask)}</td>
- *    <td> {@link ForkJoinTask#fork}</td>
- *  </tr>
- *  <tr>
- *    <td> <b>Await and obtain result</td>
- *    <td> {@link #invoke(ForkJoinTask)}</td>
- *    <td> {@link ForkJoinTask#invoke}</td>
- *  </tr>
- *  <tr>
- *    <td> <b>Arrange exec and obtain Future</td>
- *    <td> {@link #submit(ForkJoinTask)}</td>
- *    <td> {@link ForkJoinTask#fork} (ForkJoinTasks <em>are</em> Futures)</td>
- *  </tr>
- * </table>
- *
- * <p><b>Sample Usage.</b> Normally a single {@code ForkJoinPool} is
- * used for all parallel task execution in a program or subsystem.
- * Otherwise, use would not usually outweigh the construction and
- * bookkeeping overhead of creating a large set of threads. For
- * example, a common pool could be used for the {@code SortTasks}
- * illustrated in {@link RecursiveAction}. Because {@code
- * ForkJoinPool} uses threads in {@linkplain java.lang.Thread#isDaemon
- * daemon} mode, there is typically no need to explicitly {@link
- * #shutdown} such a pool upon program exit.
- *
- * <pre>
- * static final ForkJoinPool mainPool = new ForkJoinPool();
- * ...
- * public void sort(long[] array) {
- *   mainPool.invoke(new SortTask(array, 0, array.length));
- * }
- * </pre>
- *
- * <p><b>Implementation notes</b>: This implementation restricts the
- * maximum number of running threads to 32767. Attempts to create
- * pools with greater than the maximum number result in
- * {@code IllegalArgumentException}.
- *
- * <p>This implementation rejects submitted tasks (that is, by throwing
- * {@link RejectedExecutionException}) only when the pool is shut down
- * or internal resources have been exhausted.
- *
- * @since 1.7
- * @author Doug Lea
- */
-public class ForkJoinPool extends AbstractExecutorService {
-
-    /*
-     * Implementation Overview
-     *
-     * This class provides the central bookkeeping and control for a
-     * set of worker threads: Submissions from non-FJ threads enter
-     * into a submission queue. Workers take these tasks and typically
-     * split them into subtasks that may be stolen by other workers.
-     * Preference rules give first priority to processing tasks from
-     * their own queues (LIFO or FIFO, depending on mode), then to
-     * randomized FIFO steals of tasks in other worker queues, and
-     * lastly to new submissions.
-     *
-     * The main throughput advantages of work-stealing stem from
-     * decentralized control -- workers mostly take tasks from
-     * themselves or each other. We cannot negate this in the
-     * implementation of other management responsibilities. The main
-     * tactic for avoiding bottlenecks is packing nearly all
-     * essentially atomic control state into a single 64bit volatile
-     * variable ("ctl"). This variable is read on the order of 10-100
-     * times as often as it is modified (always via CAS). (There is
-     * some additional control state, for example variable "shutdown"
-     * for which we can cope with uncoordinated updates.)  This
-     * streamlines synchronization and control at the expense of messy
-     * constructions needed to repack status bits upon updates.
-     * Updates tend not to contend with each other except during
-     * bursts while submitted tasks begin or end.  In some cases when
-     * they do contend, threads can instead do something else
-     * (usually, scan for tasks) until contention subsides.
-     *
-     * To enable packing, we restrict maximum parallelism to (1<<15)-1
-     * (which is far in excess of normal operating range) to allow
-     * ids, counts, and their negations (used for thresholding) to fit
-     * into 16bit fields.
-     *
-     * Recording Workers.  Workers are recorded in the "workers" array
-     * that is created upon pool construction and expanded if (rarely)
-     * necessary.  This is an array as opposed to some other data
-     * structure to support index-based random steals by workers.
-     * Updates to the array recording new workers and unrecording
-     * terminated ones are protected from each other by a seqLock
-     * (scanGuard) but the array is otherwise concurrently readable,
-     * and accessed directly by workers. To simplify index-based
-     * operations, the array size is always a power of two, and all
-     * readers must tolerate null slots. To avoid flailing during
-     * start-up, the array is presized to hold twice #parallelism
-     * workers (which is unlikely to need further resizing during
-     * execution). But to avoid dealing with so many null slots,
-     * variable scanGuard includes a mask for the nearest power of two
-     * that contains all current workers.  All worker thread creation
-     * is on-demand, triggered by task submissions, replacement of
-     * terminated workers, and/or compensation for blocked
-     * workers. However, all other support code is set up to work with
-     * other policies.  To ensure that we do not hold on to worker
-     * references that would prevent GC, ALL accesses to workers are
-     * via indices into the workers array (which is one source of some
-     * of the messy code constructions here). In essence, the workers
-     * array serves as a weak reference mechanism. Thus for example
-     * the wait queue field of ctl stores worker indices, not worker
-     * references.  Access to the workers in associated methods (for
-     * example signalWork) must both index-check and null-check the
-     * IDs. All such accesses ignore bad IDs by returning out early
-     * from what they are doing, since this can only be associated
-     * with termination, in which case it is OK to give up.
-     *
-     * All uses of the workers array, as well as queue arrays, check
-     * that the array is non-null (even if previously non-null). This
-     * allows nulling during termination, which is currently not
-     * necessary, but remains an option for resource-revocation-based
-     * shutdown schemes.
-     *
-     * Wait Queuing. Unlike HPC work-stealing frameworks, we cannot
-     * let workers spin indefinitely scanning for tasks when none can
-     * be found immediately, and we cannot start/resume workers unless
-     * there appear to be tasks available.  On the other hand, we must
-     * quickly prod them into action when new tasks are submitted or
-     * generated.  We park/unpark workers after placing in an event
-     * wait queue when they cannot find work. This "queue" is actually
-     * a simple Treiber stack, headed by the "id" field of ctl, plus a
-     * 15bit counter value to both wake up waiters (by advancing their
-     * count) and avoid ABA effects. Successors are held in worker
-     * field "nextWait".  Queuing deals with several intrinsic races,
-     * mainly that a task-producing thread can miss seeing (and
-     * signalling) another thread that gave up looking for work but
-     * has not yet entered the wait queue. We solve this by requiring
-     * a full sweep of all workers both before (in scan()) and after
-     * (in tryAwaitWork()) a newly waiting worker is added to the wait
-     * queue. During a rescan, the worker might release some other
-     * queued worker rather than itself, which has the same net
-     * effect. Because enqueued workers may actually be rescanning
-     * rather than waiting, we set and clear the "parked" field of
-     * ForkJoinWorkerThread to reduce unnecessary calls to unpark.
-     * (Use of the parked field requires a secondary recheck to avoid
-     * missed signals.)
-     *
-     * Signalling.  We create or wake up workers only when there
-     * appears to be at least one task they might be able to find and
-     * execute.  When a submission is added or another worker adds a
-     * task to a queue that previously had two or fewer tasks, they
-     * signal waiting workers (or trigger creation of new ones if
-     * fewer than the given parallelism level -- see signalWork).
-     * These primary signals are buttressed by signals during rescans
-     * as well as those performed when a worker steals a task and
-     * notices that there are more tasks too; together these cover the
-     * signals needed in cases when more than two tasks are pushed
-     * but untaken.
-     *
-     * Trimming workers. To release resources after periods of lack of
-     * use, a worker starting to wait when the pool is quiescent will
-     * time out and terminate if the pool has remained quiescent for
-     * SHRINK_RATE nanosecs. This will slowly propagate, eventually
-     * terminating all workers after long periods of non-use.
-     *
-     * Submissions. External submissions are maintained in an
-     * array-based queue that is structured identically to
-     * ForkJoinWorkerThread queues except for the use of
-     * submissionLock in method addSubmission. Unlike the case for
-     * worker queues, multiple external threads can add new
-     * submissions, so adding requires a lock.
-     *
-     * Compensation. Beyond work-stealing support and lifecycle
-     * control, the main responsibility of this framework is to take
-     * actions when one worker is waiting to join a task stolen (or
-     * always held by) another.  Because we are multiplexing many
-     * tasks on to a pool of workers, we can't just let them block (as
-     * in Thread.join).  We also cannot just reassign the joiner's
-     * run-time stack with another and replace it later, which would
-     * be a form of "continuation", that even if possible is not
-     * necessarily a good idea since we sometimes need both an
-     * unblocked task and its continuation to progress. Instead we
-     * combine two tactics:
-     *
-     *   Helping: Arranging for the joiner to execute some task that it
-     *      would be running if the steal had not occurred.  Method
-     *      ForkJoinWorkerThread.joinTask tracks joining->stealing
-     *      links to try to find such a task.
-     *
-     *   Compensating: Unless there are already enough live threads,
-     *      method tryPreBlock() may create or re-activate a spare
-     *      thread to compensate for blocked joiners until they
-     *      unblock.
-     *
-     * The ManagedBlocker extension API can't use helping so relies
-     * only on compensation in method awaitBlocker.
-     *
-     * It is impossible to keep exactly the target parallelism number
-     * of threads running at any given time.  Determining the
-     * existence of conservatively safe helping targets, the
-     * availability of already-created spares, and the apparent need
-     * to create new spares are all racy and require heuristic
-     * guidance, so we rely on multiple retries of each.  Currently,
-     * in keeping with on-demand signalling policy, we compensate only
-     * if blocking would leave less than one active (non-waiting,
-     * non-blocked) worker. Additionally, to avoid some false alarms
-     * due to GC, lagging counters, system activity, etc, compensated
-     * blocking for joins is only attempted after rechecks stabilize
-     * (retries are interspersed with Thread.yield, for good
-     * citizenship).  The variable blockedCount, incremented before
-     * blocking and decremented after, is sometimes needed to
-     * distinguish cases of waiting for work vs blocking on joins or
-     * other managed sync. Both cases are equivalent for most pool
-     * control, so we can update non-atomically. (Additionally,
-     * contention on blockedCount alleviates some contention on ctl).
-     *
-     * Shutdown and Termination. A call to shutdownNow atomically sets
-     * the ctl stop bit and then (non-atomically) sets each workers
-     * "terminate" status, cancels all unprocessed tasks, and wakes up
-     * all waiting workers.  Detecting whether termination should
-     * commence after a non-abrupt shutdown() call requires more work
-     * and bookkeeping. We need consensus about quiesence (i.e., that
-     * there is no more work) which is reflected in active counts so
-     * long as there are no current blockers, as well as possible
-     * re-evaluations during independent changes in blocking or
-     * quiescing workers.
-     *
-     * Style notes: There is a lot of representation-level coupling
-     * among classes ForkJoinPool, ForkJoinWorkerThread, and
-     * ForkJoinTask.  Most fields of ForkJoinWorkerThread maintain
-     * data structures managed by ForkJoinPool, so are directly
-     * accessed.  Conversely we allow access to "workers" array by
-     * workers, and direct access to ForkJoinTask.status by both
-     * ForkJoinPool and ForkJoinWorkerThread.  There is little point
-     * trying to reduce this, since any associated future changes in
-     * representations will need to be accompanied by algorithmic
-     * changes anyway. All together, these low-level implementation
-     * choices produce as much as a factor of 4 performance
-     * improvement compared to naive implementations, and enable the
-     * processing of billions of tasks per second, at the expense of
-     * some ugliness.
-     *
-     * Methods signalWork() and scan() are the main bottlenecks so are
-     * especially heavily micro-optimized/mangled.  There are lots of
-     * inline assignments (of form "while ((local = field) != 0)")
-     * which are usually the simplest way to ensure the required read
-     * orderings (which are sometimes critical). This leads to a
-     * "C"-like style of listing declarations of these locals at the
-     * heads of methods or blocks.  There are several occurrences of
-     * the unusual "do {} while (!cas...)"  which is the simplest way
-     * to force an update of a CAS'ed variable. There are also other
-     * coding oddities that help some methods perform reasonably even
-     * when interpreted (not compiled).
-     *
-     * The order of declarations in this file is: (1) declarations of
-     * statics (2) fields (along with constants used when unpacking
-     * some of them), listed in an order that tends to reduce
-     * contention among them a bit under most JVMs.  (3) internal
-     * control methods (4) callbacks and other support for
-     * ForkJoinTask and ForkJoinWorkerThread classes, (5) exported
-     * methods (plus a few little helpers). (6) static block
-     * initializing all statics in a minimally dependent order.
-     */
-
-    /**
-     * Factory for creating new {@link ForkJoinWorkerThread}s.
-     * A {@code ForkJoinWorkerThreadFactory} must be defined and used
-     * for {@code ForkJoinWorkerThread} subclasses that extend base
-     * functionality or initialize threads with different contexts.
-     */
-    public static interface ForkJoinWorkerThreadFactory {
-        /**
-         * Returns a new worker thread operating in the given pool.
-         *
-         * @param pool the pool this thread works in
-         * @throws NullPointerException if the pool is null
-         */
-        public ForkJoinWorkerThread newThread(ForkJoinPool pool);
-    }
-
-    /**
-     * Default ForkJoinWorkerThreadFactory implementation; creates a
-     * new ForkJoinWorkerThread.
-     */
-    static class DefaultForkJoinWorkerThreadFactory
-        implements ForkJoinWorkerThreadFactory {
-        public ForkJoinWorkerThread newThread(ForkJoinPool pool) {
-            return new ForkJoinWorkerThread(pool);
-        }
-    }
-
-    /**
-     * Creates a new ForkJoinWorkerThread. This factory is used unless
-     * overridden in ForkJoinPool constructors.
-     */
-    public static final ForkJoinWorkerThreadFactory
-        defaultForkJoinWorkerThreadFactory;
-
-    /**
-     * Permission required for callers of methods that may start or
-     * kill threads.
-     */
-    private static final RuntimePermission modifyThreadPermission;
-
-    /**
-     * If there is a security manager, makes sure caller has
-     * permission to modify threads.
-     */
-    private static void checkPermission() {
-        SecurityManager security = System.getSecurityManager();
-        if (security != null)
-            security.checkPermission(modifyThreadPermission);
-    }
-
-    /**
-     * Generator for assigning sequence numbers as pool names.
-     */
-    private static final AtomicInteger poolNumberGenerator;
-
-    /**
-     * Generator for initial random seeds for worker victim
-     * selection. This is used only to create initial seeds. Random
-     * steals use a cheaper xorshift generator per steal attempt. We
-     * don't expect much contention on seedGenerator, so just use a
-     * plain Random.
-     */
-    static final Random workerSeedGenerator;
-
-    /**
-     * Array holding all worker threads in the pool.  Initialized upon
-     * construction. Array size must be a power of two.  Updates and
-     * replacements are protected by scanGuard, but the array is
-     * always kept in a consistent enough state to be randomly
-     * accessed without locking by workers performing work-stealing,
-     * as well as other traversal-based methods in this class, so long
-     * as reads memory-acquire by first reading ctl. All readers must
-     * tolerate that some array slots may be null.
-     */
-    ForkJoinWorkerThread[] workers;
-
-    /**
-     * Initial size for submission queue array. Must be a power of
-     * two.  In many applications, these always stay small so we use a
-     * small initial cap.
-     */
-    private static final int INITIAL_QUEUE_CAPACITY = 8;
-
-    /**
-     * Maximum size for submission queue array. Must be a power of two
-     * less than or equal to 1 << (31 - width of array entry) to
-     * ensure lack of index wraparound, but is capped at a lower
-     * value to help users trap runaway computations.
-     */
-    private static final int MAXIMUM_QUEUE_CAPACITY = 1 << 24; // 16M
-
-    /**
-     * Array serving as submission queue. Initialized upon construction.
-     */
-    private ForkJoinTask<?>[] submissionQueue;
-
-    /**
-     * Lock protecting submissions array for addSubmission
-     */
-    private final ReentrantLock submissionLock;
-
-    /**
-     * Condition for awaitTermination, using submissionLock for
-     * convenience.
-     */
-    private final Condition termination;
-
-    /**
-     * Creation factory for worker threads.
-     */
-    private final ForkJoinWorkerThreadFactory factory;
-
-    /**
-     * The uncaught exception handler used when any worker abruptly
-     * terminates.
-     */
-    final Thread.UncaughtExceptionHandler ueh;
-
-    /**
-     * Prefix for assigning names to worker threads
-     */
-    private final String workerNamePrefix;
-
-    /**
-     * Sum of per-thread steal counts, updated only when threads are
-     * idle or terminating.
-     */
-    private volatile long stealCount;
-
-    /**
-     * Main pool control -- a long packed with:
-     * AC: Number of active running workers minus target parallelism (16 bits)
-     * TC: Number of total workers minus target parallelism (16bits)
-     * ST: true if pool is terminating (1 bit)
-     * EC: the wait count of top waiting thread (15 bits)
-     * ID: ~poolIndex of top of Treiber stack of waiting threads (16 bits)
-     *
-     * When convenient, we can extract the upper 32 bits of counts and
-     * the lower 32 bits of queue state, u = (int)(ctl >>> 32) and e =
-     * (int)ctl.  The ec field is never accessed alone, but always
-     * together with id and st. The offsets of counts by the target
-     * parallelism and the positionings of fields makes it possible to
-     * perform the most common checks via sign tests of fields: When
-     * ac is negative, there are not enough active workers, when tc is
-     * negative, there are not enough total workers, when id is
-     * negative, there is at least one waiting worker, and when e is
-     * negative, the pool is terminating.  To deal with these possibly
-     * negative fields, we use casts in and out of "short" and/or
-     * signed shifts to maintain signedness.
-     */
-    volatile long ctl;
-
-    // bit positions/shifts for fields
-    private static final int  AC_SHIFT   = 48;
-    private static final int  TC_SHIFT   = 32;
-    private static final int  ST_SHIFT   = 31;
-    private static final int  EC_SHIFT   = 16;
-
-    // bounds
-    private static final int  MAX_ID     = 0x7fff;  // max poolIndex
-    private static final int  SMASK      = 0xffff;  // mask short bits
-    private static final int  SHORT_SIGN = 1 << 15;
-    private static final int  INT_SIGN   = 1 << 31;
-
-    // masks
-    private static final long STOP_BIT   = 0x0001L << ST_SHIFT;
-    private static final long AC_MASK    = ((long)SMASK) << AC_SHIFT;
-    private static final long TC_MASK    = ((long)SMASK) << TC_SHIFT;
-
-    // units for incrementing and decrementing
-    private static final long TC_UNIT    = 1L << TC_SHIFT;
-    private static final long AC_UNIT    = 1L << AC_SHIFT;
-
-    // masks and units for dealing with u = (int)(ctl >>> 32)
-    private static final int  UAC_SHIFT  = AC_SHIFT - 32;
-    private static final int  UTC_SHIFT  = TC_SHIFT - 32;
-    private static final int  UAC_MASK   = SMASK << UAC_SHIFT;
-    private static final int  UTC_MASK   = SMASK << UTC_SHIFT;
-    private static final int  UAC_UNIT   = 1 << UAC_SHIFT;
-    private static final int  UTC_UNIT   = 1 << UTC_SHIFT;
-
-    // masks and units for dealing with e = (int)ctl
-    private static final int  E_MASK     = 0x7fffffff; // no STOP_BIT
-    private static final int  EC_UNIT    = 1 << EC_SHIFT;
-
-    /**
-     * The target parallelism level.
-     */
-    final int parallelism;
-
-    /**
-     * Index (mod submission queue length) of next element to take
-     * from submission queue. Usage is identical to that for
-     * per-worker queues -- see ForkJoinWorkerThread internal
-     * documentation.
-     */
-    volatile int queueBase;
-
-    /**
-     * Index (mod submission queue length) of next element to add
-     * in submission queue. Usage is identical to that for
-     * per-worker queues -- see ForkJoinWorkerThread internal
-     * documentation.
-     */
-    int queueTop;
-
-    /**
-     * True when shutdown() has been called.
-     */
-    volatile boolean shutdown;
-
-    /**
-     * True if use local fifo, not default lifo, for local polling
-     * Read by, and replicated by ForkJoinWorkerThreads
-     */
-    final boolean locallyFifo;
-
-    /**
-     * The number of threads in ForkJoinWorkerThreads.helpQuiescePool.
-     * When non-zero, suppresses automatic shutdown when active
-     * counts become zero.
-     */
-    volatile int quiescerCount;
-
-    /**
-     * The number of threads blocked in join.
-     */
-    volatile int blockedCount;
-
-    /**
-     * Counter for worker Thread names (unrelated to their poolIndex)
-     */
-    private volatile int nextWorkerNumber;
-
-    /**
-     * The index for the next created worker. Accessed under scanGuard.
-     */
-    private int nextWorkerIndex;
-
-    /**
-     * SeqLock and index masking for updates to workers array.  Locked
-     * when SG_UNIT is set. Unlocking clears bit by adding
-     * SG_UNIT. Staleness of read-only operations can be checked by
-     * comparing scanGuard to value before the reads. The low 16 bits
-     * (i.e, anding with SMASK) hold (the smallest power of two
-     * covering all worker indices, minus one, and is used to avoid
-     * dealing with large numbers of null slots when the workers array
-     * is overallocated.
-     */
-    volatile int scanGuard;
-
-    private static final int SG_UNIT = 1 << 16;
-
-    /**
-     * The wakeup interval (in nanoseconds) for a worker waiting for a
-     * task when the pool is quiescent to instead try to shrink the
-     * number of workers.  The exact value does not matter too
-     * much. It must be short enough to release resources during
-     * sustained periods of idleness, but not so short that threads
-     * are continually re-created.
-     */
-    private static final long SHRINK_RATE =
-        4L * 1000L * 1000L * 1000L; // 4 seconds
-
-    /**
-     * Top-level loop for worker threads: On each step: if the
-     * previous step swept through all queues and found no tasks, or
-     * there are excess threads, then possibly blocks. Otherwise,
-     * scans for and, if found, executes a task. Returns when pool
-     * and/or worker terminate.
-     *
-     * @param w the worker
-     */
-    final void work(ForkJoinWorkerThread w) {
-        boolean swept = false;                // true on empty scans
-        long c;
-        while (!w.terminate && (int)(c = ctl) >= 0) {
-            int a;                            // active count
-            if (!swept && (a = (int)(c >> AC_SHIFT)) <= 0)
-                swept = scan(w, a);
-            else if (tryAwaitWork(w, c))
-                swept = false;
-        }
-    }
-
-    // Signalling
-
-    /**
-     * Wakes up or creates a worker.
-     */
-    final void signalWork() {
-        /*
-         * The while condition is true if: (there is are too few total
-         * workers OR there is at least one waiter) AND (there are too
-         * few active workers OR the pool is terminating).  The value
-         * of e distinguishes the remaining cases: zero (no waiters)
-         * for create, negative if terminating (in which case do
-         * nothing), else release a waiter. The secondary checks for
-         * release (non-null array etc) can fail if the pool begins
-         * terminating after the test, and don't impose any added cost
-         * because JVMs must perform null and bounds checks anyway.
-         */
-        long c; int e, u;
-        while ((((e = (int)(c = ctl)) | (u = (int)(c >>> 32))) &
-                (INT_SIGN|SHORT_SIGN)) == (INT_SIGN|SHORT_SIGN) && e >= 0) {
-            if (e > 0) {                         // release a waiting worker
-                int i; ForkJoinWorkerThread w; ForkJoinWorkerThread[] ws;
-                if ((ws = workers) == null ||
-                    (i = ~e & SMASK) >= ws.length ||
-                    (w = ws[i]) == null)
-                    break;
-                long nc = (((long)(w.nextWait & E_MASK)) |
-                           ((long)(u + UAC_UNIT) << 32));
-                if (w.eventCount == e &&
-                    UNSAFE.compareAndSwapLong(this, ctlOffset, c, nc)) {
-                    w.eventCount = (e + EC_UNIT) & E_MASK;
-                    if (w.parked)
-                        UNSAFE.unpark(w);
-                    break;
-                }
-            }
-            else if (UNSAFE.compareAndSwapLong
-                     (this, ctlOffset, c,
-                      (long)(((u + UTC_UNIT) & UTC_MASK) |
-                             ((u + UAC_UNIT) & UAC_MASK)) << 32)) {
-                addWorker();
-                break;
-            }
-        }
-    }
-
-    /**
-     * Variant of signalWork to help release waiters on rescans.
-     * Tries once to release a waiter if active count < 0.
-     *
-     * @return false if failed due to contention, else true
-     */
-    private boolean tryReleaseWaiter() {
-        long c; int e, i; ForkJoinWorkerThread w; ForkJoinWorkerThread[] ws;
-        if ((e = (int)(c = ctl)) > 0 &&
-            (int)(c >> AC_SHIFT) < 0 &&
-            (ws = workers) != null &&
-            (i = ~e & SMASK) < ws.length &&
-            (w = ws[i]) != null) {
-            long nc = ((long)(w.nextWait & E_MASK) |
-                       ((c + AC_UNIT) & (AC_MASK|TC_MASK)));
-            if (w.eventCount != e ||
-                !UNSAFE.compareAndSwapLong(this, ctlOffset, c, nc))
-                return false;
-            w.eventCount = (e + EC_UNIT) & E_MASK;
-            if (w.parked)
-                UNSAFE.unpark(w);
-        }
-        return true;
-    }
-
-    // Scanning for tasks
-
-    /**
-     * Scans for and, if found, executes one task. Scans start at a
-     * random index of workers array, and randomly select the first
-     * (2*#workers)-1 probes, and then, if all empty, resort to 2
-     * circular sweeps, which is necessary to check quiescence. and
-     * taking a submission only if no stealable tasks were found.  The
-     * steal code inside the loop is a specialized form of
-     * ForkJoinWorkerThread.deqTask, followed bookkeeping to support
-     * helpJoinTask and signal propagation. The code for submission
-     * queues is almost identical. On each steal, the worker completes
-     * not only the task, but also all local tasks that this task may
-     * have generated. On detecting staleness or contention when
-     * trying to take a task, this method returns without finishing
-     * sweep, which allows global state rechecks before retry.
-     *
-     * @param w the worker
-     * @param a the number of active workers
-     * @return true if swept all queues without finding a task
-     */
-    private boolean scan(ForkJoinWorkerThread w, int a) {
-        int g = scanGuard; // mask 0 avoids useless scans if only one active
-        int m = (parallelism == 1 - a && blockedCount == 0) ? 0 : g & SMASK;
-        ForkJoinWorkerThread[] ws = workers;
-        if (ws == null || ws.length <= m)         // staleness check
-            return false;
-        for (int r = w.seed, k = r, j = -(m + m); j <= m + m; ++j) {
-            ForkJoinTask<?> t; ForkJoinTask<?>[] q; int b, i;
-            ForkJoinWorkerThread v = ws[k & m];
-            if (v != null && (b = v.queueBase) != v.queueTop &&
-                (q = v.queue) != null && (i = (q.length - 1) & b) >= 0) {
-                long u = (i << ASHIFT) + ABASE;
-                if ((t = q[i]) != null && v.queueBase == b &&
-                    UNSAFE.compareAndSwapObject(q, u, t, null)) {
-                    int d = (v.queueBase = b + 1) - v.queueTop;
-                    v.stealHint = w.poolIndex;
-                    if (d != 0)
-                        signalWork();             // propagate if nonempty
-                    w.execTask(t);
-                }
-                r ^= r << 13; r ^= r >>> 17; w.seed = r ^ (r << 5);
-                return false;                     // store next seed
-            }
-            else if (j < 0) {                     // xorshift
-                r ^= r << 13; r ^= r >>> 17; k = r ^= r << 5;
-            }
-            else
-                ++k;
-        }
-        if (scanGuard != g)                       // staleness check
-            return false;
-        else {                                    // try to take submission
-            ForkJoinTask<?> t; ForkJoinTask<?>[] q; int b, i;
-            if ((b = queueBase) != queueTop &&
-                (q = submissionQueue) != null &&
-                (i = (q.length - 1) & b) >= 0) {
-                long u = (i << ASHIFT) + ABASE;
-                if ((t = q[i]) != null && queueBase == b &&
-                    UNSAFE.compareAndSwapObject(q, u, t, null)) {
-                    queueBase = b + 1;
-                    w.execTask(t);
-                }
-                return false;
-            }
-            return true;                         // all queues empty
-        }
-    }
-
-    /**
-     * Tries to enqueue worker w in wait queue and await change in
-     * worker's eventCount.  If the pool is quiescent and there is
-     * more than one worker, possibly terminates worker upon exit.
-     * Otherwise, before blocking, rescans queues to avoid missed
-     * signals.  Upon finding work, releases at least one worker
-     * (which may be the current worker). Rescans restart upon
-     * detected staleness or failure to release due to
-     * contention. Note the unusual conventions about Thread.interrupt
-     * here and elsewhere: Because interrupts are used solely to alert
-     * threads to check termination, which is checked here anyway, we
-     * clear status (using Thread.interrupted) before any call to
-     * park, so that park does not immediately return due to status
-     * being set via some other unrelated call to interrupt in user
-     * code.
-     *
-     * @param w the calling worker
-     * @param c the ctl value on entry
-     * @return true if waited or another thread was released upon enq
-     */
-    private boolean tryAwaitWork(ForkJoinWorkerThread w, long c) {
-        int v = w.eventCount;
-        w.nextWait = (int)c;                      // w's successor record
-        long nc = (long)(v & E_MASK) | ((c - AC_UNIT) & (AC_MASK|TC_MASK));
-        if (ctl != c || !UNSAFE.compareAndSwapLong(this, ctlOffset, c, nc)) {
-            long d = ctl; // return true if lost to a deq, to force scan
-            return (int)d != (int)c && ((d - c) & AC_MASK) >= 0L;
-        }
-        for (int sc = w.stealCount; sc != 0;) {   // accumulate stealCount
-            long s = stealCount;
-            if (UNSAFE.compareAndSwapLong(this, stealCountOffset, s, s + sc))
-                sc = w.stealCount = 0;
-            else if (w.eventCount != v)
-                return true;                      // update next time
-        }
-        if ((!shutdown || !tryTerminate(false)) &&
-            (int)c != 0 && parallelism + (int)(nc >> AC_SHIFT) == 0 &&
-            blockedCount == 0 && quiescerCount == 0)
-            idleAwaitWork(w, nc, c, v);           // quiescent
-        for (boolean rescanned = false;;) {
-            if (w.eventCount != v)
-                return true;
-            if (!rescanned) {
-                int g = scanGuard, m = g & SMASK;
-                ForkJoinWorkerThread[] ws = workers;
-                if (ws != null && m < ws.length) {
-                    rescanned = true;
-                    for (int i = 0; i <= m; ++i) {
-                        ForkJoinWorkerThread u = ws[i];
-                        if (u != null) {
-                            if (u.queueBase != u.queueTop &&
-                                !tryReleaseWaiter())
-                                rescanned = false; // contended
-                            if (w.eventCount != v)
-                                return true;
-                        }
-                    }
-                }
-                if (scanGuard != g ||              // stale
-                    (queueBase != queueTop && !tryReleaseWaiter()))
-                    rescanned = false;
-                if (!rescanned)
-                    Thread.yield();                // reduce contention
-                else
-                    Thread.interrupted();          // clear before park
-            }
-            else {
-                w.parked = true;                   // must recheck
-                if (w.eventCount != v) {
-                    w.parked = false;
-                    return true;
-                }
-                LockSupport.park(this);
-                rescanned = w.parked = false;
-            }
-        }
-    }
-
-    /**
-     * If inactivating worker w has caused pool to become
-     * quiescent, check for pool termination, and wait for event
-     * for up to SHRINK_RATE nanosecs (rescans are unnecessary in
-     * this case because quiescence reflects consensus about lack
-     * of work). On timeout, if ctl has not changed, terminate the
-     * worker. Upon its termination (see deregisterWorker), it may
-     * wake up another worker to possibly repeat this process.
-     *
-     * @param w the calling worker
-     * @param currentCtl the ctl value after enqueuing w
-     * @param prevCtl the ctl value if w terminated
-     * @param v the eventCount w awaits change
-     */
-    private void idleAwaitWork(ForkJoinWorkerThread w, long currentCtl,
-                               long prevCtl, int v) {
-        if (w.eventCount == v) {
-            if (shutdown)
-                tryTerminate(false);
-            ForkJoinTask.helpExpungeStaleExceptions(); // help clean weak refs
-            while (ctl == currentCtl) {
-                long startTime = System.nanoTime();
-                w.parked = true;
-                if (w.eventCount == v)             // must recheck
-                    LockSupport.parkNanos(this, SHRINK_RATE);
-                w.parked = false;
-                if (w.eventCount != v)
-                    break;
-                else if (System.nanoTime() - startTime <
-                         SHRINK_RATE - (SHRINK_RATE / 10)) // timing slop
-                    Thread.interrupted();          // spurious wakeup
-                else if (UNSAFE.compareAndSwapLong(this, ctlOffset,
-                                                   currentCtl, prevCtl)) {
-                    w.terminate = true;            // restore previous
-                    w.eventCount = ((int)currentCtl + EC_UNIT) & E_MASK;
-                    break;
-                }
-            }
-        }
-    }
-
-    // Submissions
-
-    /**
-     * Enqueues the given task in the submissionQueue.  Same idea as
-     * ForkJoinWorkerThread.pushTask except for use of submissionLock.
-     *
-     * @param t the task
-     */
-    private void addSubmission(ForkJoinTask<?> t) {
-        final ReentrantLock lock = this.submissionLock;
-        lock.lock();
-        try {
-            ForkJoinTask<?>[] q; int s, m;
-            if ((q = submissionQueue) != null) {    // ignore if queue removed
-                long u = (((s = queueTop) & (m = q.length-1)) << ASHIFT)+ABASE;
-                UNSAFE.putOrderedObject(q, u, t);
-                queueTop = s + 1;
-                if (s - queueBase == m)
-                    growSubmissionQueue();
-            }
-        } finally {
-            lock.unlock();
-        }
-        signalWork();
-    }
-
-    //  (pollSubmission is defined below with exported methods)
-
-    /**
-     * Creates or doubles submissionQueue array.
-     * Basically identical to ForkJoinWorkerThread version.
-     */
-    private void growSubmissionQueue() {
-        ForkJoinTask<?>[] oldQ = submissionQueue;
-        int size = oldQ != null ? oldQ.length << 1 : INITIAL_QUEUE_CAPACITY;
-        if (size > MAXIMUM_QUEUE_CAPACITY)
-            throw new RejectedExecutionException("Queue capacity exceeded");
-        if (size < INITIAL_QUEUE_CAPACITY)
-            size = INITIAL_QUEUE_CAPACITY;
-        ForkJoinTask<?>[] q = submissionQueue = new ForkJoinTask<?>[size];
-        int mask = size - 1;
-        int top = queueTop;
-        int oldMask;
-        if (oldQ != null && (oldMask = oldQ.length - 1) >= 0) {
-            for (int b = queueBase; b != top; ++b) {
-                long u = ((b & oldMask) << ASHIFT) + ABASE;
-                Object x = UNSAFE.getObjectVolatile(oldQ, u);
-                if (x != null && UNSAFE.compareAndSwapObject(oldQ, u, x, null))
-                    UNSAFE.putObjectVolatile
-                        (q, ((b & mask) << ASHIFT) + ABASE, x);
-            }
-        }
-    }
-
-    // Blocking support
-
-    /**
-     * Tries to increment blockedCount, decrement active count
-     * (sometimes implicitly) and possibly release or create a
-     * compensating worker in preparation for blocking. Fails
-     * on contention or termination.
-     *
-     * @return true if the caller can block, else should recheck and retry
-     */
-    private boolean tryPreBlock() {
-        int b = blockedCount;
-        if (UNSAFE.compareAndSwapInt(this, blockedCountOffset, b, b + 1)) {
-            int pc = parallelism;
-            do {
-                ForkJoinWorkerThread[] ws; ForkJoinWorkerThread w;
-                int e, ac, tc, rc, i;
-                long c = ctl;
-                int u = (int)(c >>> 32);
-                if ((e = (int)c) < 0) {
-                                                 // skip -- terminating
-                }
-                else if ((ac = (u >> UAC_SHIFT)) <= 0 && e != 0 &&
-                         (ws = workers) != null &&
-                         (i = ~e & SMASK) < ws.length &&
-                         (w = ws[i]) != null) {
-                    long nc = ((long)(w.nextWait & E_MASK) |
-                               (c & (AC_MASK|TC_MASK)));
-                    if (w.eventCount == e &&
-                        UNSAFE.compareAndSwapLong(this, ctlOffset, c, nc)) {
-                        w.eventCount = (e + EC_UNIT) & E_MASK;
-                        if (w.parked)
-                            UNSAFE.unpark(w);
-                        return true;             // release an idle worker
-                    }
-                }
-                else if ((tc = (short)(u >>> UTC_SHIFT)) >= 0 && ac + pc > 1) {
-                    long nc = ((c - AC_UNIT) & AC_MASK) | (c & ~AC_MASK);
-                    if (UNSAFE.compareAndSwapLong(this, ctlOffset, c, nc))
-                        return true;             // no compensation needed
-                }
-                else if (tc + pc < MAX_ID) {
-                    long nc = ((c + TC_UNIT) & TC_MASK) | (c & ~TC_MASK);
-                    if (UNSAFE.compareAndSwapLong(this, ctlOffset, c, nc)) {
-                        addWorker();
-                        return true;            // create a replacement
-                    }
-                }
-                // try to back out on any failure and let caller retry
-            } while (!UNSAFE.compareAndSwapInt(this, blockedCountOffset,
-                                               b = blockedCount, b - 1));
-        }
-        return false;
-    }
-
-    /**
-     * Decrements blockedCount and increments active count
-     */
-    private void postBlock() {
-        long c;
-        do {} while (!UNSAFE.compareAndSwapLong(this, ctlOffset,  // no mask
-                                                c = ctl, c + AC_UNIT));
-        int b;
-        do {} while (!UNSAFE.compareAndSwapInt(this, blockedCountOffset,
-                                               b = blockedCount, b - 1));
-    }
-
-    /**
-     * Possibly blocks waiting for the given task to complete, or
-     * cancels the task if terminating.  Fails to wait if contended.
-     *
-     * @param joinMe the task
-     */
-    final void tryAwaitJoin(ForkJoinTask<?> joinMe) {
-        int s;
-        Thread.interrupted(); // clear interrupts before checking termination
-        if (joinMe.status >= 0) {
-            if (tryPreBlock()) {
-                joinMe.tryAwaitDone(0L);
-                postBlock();
-            }
-            else if ((ctl & STOP_BIT) != 0L)
-                joinMe.cancelIgnoringExceptions();
-        }
-    }
-
-    /**
-     * Possibly blocks the given worker waiting for joinMe to
-     * complete or timeout
-     *
-     * @param joinMe the task
-     * @param millis the wait time for underlying Object.wait
-     */
-    final void timedAwaitJoin(ForkJoinTask<?> joinMe, long nanos) {
-        while (joinMe.status >= 0) {
-            Thread.interrupted();
-            if ((ctl & STOP_BIT) != 0L) {
-                joinMe.cancelIgnoringExceptions();
-                break;
-            }
-            if (tryPreBlock()) {
-                long last = System.nanoTime();
-                while (joinMe.status >= 0) {
-                    long millis = TimeUnit.NANOSECONDS.toMillis(nanos);
-                    if (millis <= 0)
-                        break;
-                    joinMe.tryAwaitDone(millis);
-                    if (joinMe.status < 0)
-                        break;
-                    if ((ctl & STOP_BIT) != 0L) {
-                        joinMe.cancelIgnoringExceptions();
-                        break;
-                    }
-                    long now = System.nanoTime();
-                    nanos -= now - last;
-                    last = now;
-                }
-                postBlock();
-                break;
-            }
-        }
-    }
-
-    /**
-     * If necessary, compensates for blocker, and blocks
-     */
-    private void awaitBlocker(ManagedBlocker blocker)
-        throws InterruptedException {
-        while (!blocker.isReleasable()) {
-            if (tryPreBlock()) {
-                try {
-                    do {} while (!blocker.isReleasable() && !blocker.block());
-                } finally {
-                    postBlock();
-                }
-                break;
-            }
-        }
-    }
-
-    // Creating, registering and deregistring workers
-
-    /**
-     * Tries to create and start a worker; minimally rolls back counts
-     * on failure.
-     */
-    private void addWorker() {
-        Throwable ex = null;
-        ForkJoinWorkerThread t = null;
-        try {
-            t = factory.newThread(this);
-        } catch (Throwable e) {
-            ex = e;
-        }
-        if (t == null) {  // null or exceptional factory return
-            long c;       // adjust counts
-            do {} while (!UNSAFE.compareAndSwapLong
-                         (this, ctlOffset, c = ctl,
-                          (((c - AC_UNIT) & AC_MASK) |
-                           ((c - TC_UNIT) & TC_MASK) |
-                           (c & ~(AC_MASK|TC_MASK)))));
-            // Propagate exception if originating from an external caller
-            if (!tryTerminate(false) && ex != null &&
-                !(Thread.currentThread() instanceof ForkJoinWorkerThread))
-                UNSAFE.throwException(ex);
-        }
-        else
-            t.start();
-    }
-
-    /**
-     * Callback from ForkJoinWorkerThread constructor to assign a
-     * public name
-     */
-    final String nextWorkerName() {
-        for (int n;;) {
-            if (UNSAFE.compareAndSwapInt(this, nextWorkerNumberOffset,
-                                         n = nextWorkerNumber, ++n))
-                return workerNamePrefix + n;
-        }
-    }
-
-    /**
-     * Callback from ForkJoinWorkerThread constructor to
-     * determine its poolIndex and record in workers array.
-     *
-     * @param w the worker
-     * @return the worker's pool index
-     */
-    final int registerWorker(ForkJoinWorkerThread w) {
-        /*
-         * In the typical case, a new worker acquires the lock, uses
-         * next available index and returns quickly.  Since we should
-         * not block callers (ultimately from signalWork or
-         * tryPreBlock) waiting for the lock needed to do this, we
-         * instead help release other workers while waiting for the
-         * lock.
-         */
-        for (int g;;) {
-            ForkJoinWorkerThread[] ws;
-            if (((g = scanGuard) & SG_UNIT) == 0 &&
-                UNSAFE.compareAndSwapInt(this, scanGuardOffset,
-                                         g, g | SG_UNIT)) {
-                int k = nextWorkerIndex;
-                try {
-                    if ((ws = workers) != null) { // ignore on shutdown
-                        int n = ws.length;
-                        if (k < 0 || k >= n || ws[k] != null) {
-                            for (k = 0; k < n && ws[k] != null; ++k)
-                                ;
-                            if (k == n)
-                                ws = workers = Arrays.copyOf(ws, n << 1);
-                        }
-                        ws[k] = w;
-                        nextWorkerIndex = k + 1;
-                        int m = g & SMASK;
-                        g = (k > m) ? ((m << 1) + 1) & SMASK : g + (SG_UNIT<<1);
-                    }
-                } finally {
-                    scanGuard = g;
-                }
-                return k;
-            }
-            else if ((ws = workers) != null) { // help release others
-                for (ForkJoinWorkerThread u : ws) {
-                    if (u != null && u.queueBase != u.queueTop) {
-                        if (tryReleaseWaiter())
-                            break;
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Final callback from terminating worker.  Removes record of
-     * worker from array, and adjusts counts. If pool is shutting
-     * down, tries to complete termination.
-     *
-     * @param w the worker
-     */
-    final void deregisterWorker(ForkJoinWorkerThread w, Throwable ex) {
-        int idx = w.poolIndex;
-        int sc = w.stealCount;
-        int steps = 0;
-        // Remove from array, adjust worker counts and collect steal count.
-        // We can intermix failed removes or adjusts with steal updates
-        do {
-            long s, c;
-            int g;
-            if (steps == 0 && ((g = scanGuard) & SG_UNIT) == 0 &&
-                UNSAFE.compareAndSwapInt(this, scanGuardOffset,
-                                         g, g |= SG_UNIT)) {
-                ForkJoinWorkerThread[] ws = workers;
-                if (ws != null && idx >= 0 &&
-                    idx < ws.length && ws[idx] == w)
-                    ws[idx] = null;    // verify
-                nextWorkerIndex = idx;
-                scanGuard = g + SG_UNIT;
-                steps = 1;
-            }
-            if (steps == 1 &&
-                UNSAFE.compareAndSwapLong(this, ctlOffset, c = ctl,
-                                          (((c - AC_UNIT) & AC_MASK) |
-                                           ((c - TC_UNIT) & TC_MASK) |
-                                           (c & ~(AC_MASK|TC_MASK)))))
-                steps = 2;
-            if (sc != 0 &&
-                UNSAFE.compareAndSwapLong(this, stealCountOffset,
-                                          s = stealCount, s + sc))
-                sc = 0;
-        } while (steps != 2 || sc != 0);
-        if (!tryTerminate(false)) {
-            if (ex != null)   // possibly replace if died abnormally
-                signalWork();
-            else
-                tryReleaseWaiter();
-        }
-    }
-
-    // Shutdown and termination
-
-    /**
-     * Possibly initiates and/or completes termination.
-     *
-     * @param now if true, unconditionally terminate, else only
-     * if shutdown and empty queue and no active workers
-     * @return true if now terminating or terminated
-     */
-    private boolean tryTerminate(boolean now) {
-        long c;
-        while (((c = ctl) & STOP_BIT) == 0) {
-            if (!now) {
-                if ((int)(c >> AC_SHIFT) != -parallelism)
-                    return false;
-                if (!shutdown || blockedCount != 0 || quiescerCount != 0 ||
-                    queueBase != queueTop) {
-                    if (ctl == c) // staleness check
-                        return false;
-                    continue;
-                }
-            }
-            if (UNSAFE.compareAndSwapLong(this, ctlOffset, c, c | STOP_BIT))
-                startTerminating();
-        }
-        if ((short)(c >>> TC_SHIFT) == -parallelism) { // signal when 0 workers
-            final ReentrantLock lock = this.submissionLock;
-            lock.lock();
-            try {
-                termination.signalAll();
-            } finally {
-                lock.unlock();
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Runs up to three passes through workers: (0) Setting
-     * termination status for each worker, followed by wakeups up to
-     * queued workers; (1) helping cancel tasks; (2) interrupting
-     * lagging threads (likely in external tasks, but possibly also
-     * blocked in joins).  Each pass repeats previous steps because of
-     * potential lagging thread creation.
-     */
-    private void startTerminating() {
-        cancelSubmissions();
-        for (int pass = 0; pass < 3; ++pass) {
-            ForkJoinWorkerThread[] ws = workers;
-            if (ws != null) {
-                for (ForkJoinWorkerThread w : ws) {
-                    if (w != null) {
-                        w.terminate = true;
-                        if (pass > 0) {
-                            w.cancelTasks();
-                            if (pass > 1 && !w.isInterrupted()) {
-                                try {
-                                    w.interrupt();
-                                } catch (SecurityException ignore) {
-                                }
-                            }
-                        }
-                    }
-                }
-                terminateWaiters();
-            }
-        }
-    }
-
-    /**
-     * Polls and cancels all submissions. Called only during termination.
-     */
-    private void cancelSubmissions() {
-        while (queueBase != queueTop) {
-            ForkJoinTask<?> task = pollSubmission();
-            if (task != null) {
-                try {
-                    task.cancel(false);
-                } catch (Throwable ignore) {
-                }
-            }
-        }
-    }
-
-    /**
-     * Tries to set the termination status of waiting workers, and
-     * then wakes them up (after which they will terminate).
-     */
-    private void terminateWaiters() {
-        ForkJoinWorkerThread[] ws = workers;
-        if (ws != null) {
-            ForkJoinWorkerThread w; long c; int i, e;
-            int n = ws.length;
-            while ((i = ~(e = (int)(c = ctl)) & SMASK) < n &&
-                   (w = ws[i]) != null && w.eventCount == (e & E_MASK)) {
-                if (UNSAFE.compareAndSwapLong(this, ctlOffset, c,
-                                              (long)(w.nextWait & E_MASK) |
-                                              ((c + AC_UNIT) & AC_MASK) |
-                                              (c & (TC_MASK|STOP_BIT)))) {
-                    w.terminate = true;
-                    w.eventCount = e + EC_UNIT;
-                    if (w.parked)
-                        UNSAFE.unpark(w);
-                }
-            }
-        }
-    }
-
-    // misc ForkJoinWorkerThread support
-
-    /**
-     * Increment or decrement quiescerCount. Needed only to prevent
-     * triggering shutdown if a worker is transiently inactive while
-     * checking quiescence.
-     *
-     * @param delta 1 for increment, -1 for decrement
-     */
-    final void addQuiescerCount(int delta) {
-        int c;
-        do {} while (!UNSAFE.compareAndSwapInt(this, quiescerCountOffset,
-                                               c = quiescerCount, c + delta));
-    }
-
-    /**
-     * Directly increment or decrement active count without
-     * queuing. This method is used to transiently assert inactivation
-     * while checking quiescence.
-     *
-     * @param delta 1 for increment, -1 for decrement
-     */
-    final void addActiveCount(int delta) {
-        long d = delta < 0 ? -AC_UNIT : AC_UNIT;
-        long c;
-        do {} while (!UNSAFE.compareAndSwapLong(this, ctlOffset, c = ctl,
-                                                ((c + d) & AC_MASK) |
-                                                (c & ~AC_MASK)));
-    }
-
-    /**
-     * Returns the approximate (non-atomic) number of idle threads per
-     * active thread.
-     */
-    final int idlePerActive() {
-        // Approximate at powers of two for small values, saturate past 4
-        int p = parallelism;
-        int a = p + (int)(ctl >> AC_SHIFT);
-        return (a > (p >>>= 1) ? 0 :
-                a > (p >>>= 1) ? 1 :
-                a > (p >>>= 1) ? 2 :
-                a > (p >>>= 1) ? 4 :
-                8);
-    }
-
-    // Exported methods
-
-    // Constructors
-
-    /**
-     * Creates a {@code ForkJoinPool} with parallelism equal to {@link
-     * java.lang.Runtime#availableProcessors}, using the {@linkplain
-     * #defaultForkJoinWorkerThreadFactory default thread factory},
-     * no UncaughtExceptionHandler, and non-async LIFO processing mode.
-     *
-     * @throws SecurityException if a security manager exists and
-     *         the caller is not permitted to modify threads
-     *         because it does not hold {@link
-     *         java.lang.RuntimePermission}{@code ("modifyThread")}
-     */
-    public ForkJoinPool() {
-        this(Runtime.getRuntime().availableProcessors(),
-             defaultForkJoinWorkerThreadFactory, null, false);
-    }
-
-    /**
-     * Creates a {@code ForkJoinPool} with the indicated parallelism
-     * level, the {@linkplain
-     * #defaultForkJoinWorkerThreadFactory default thread factory},
-     * no UncaughtExceptionHandler, and non-async LIFO processing mode.
-     *
-     * @param parallelism the parallelism level
-     * @throws IllegalArgumentException if parallelism less than or
-     *         equal to zero, or greater than implementation limit
-     * @throws SecurityException if a security manager exists and
-     *         the caller is not permitted to modify threads
-     *         because it does not hold {@link
-     *         java.lang.RuntimePermission}{@code ("modifyThread")}
-     */
-    public ForkJoinPool(int parallelism) {
-        this(parallelism, defaultForkJoinWorkerThreadFactory, null, false);
-    }
-
-    /**
-     * Creates a {@code ForkJoinPool} with the given parameters.
-     *
-     * @param parallelism the parallelism level. For default value,
-     * use {@link java.lang.Runtime#availableProcessors}.
-     * @param factory the factory for creating new threads. For default value,
-     * use {@link #defaultForkJoinWorkerThreadFactory}.
-     * @param handler the handler for internal worker threads that
-     * terminate due to unrecoverable errors encountered while executing
-     * tasks. For default value, use {@code null}.
-     * @param asyncMode if true,
-     * establishes local first-in-first-out scheduling mode for forked
-     * tasks that are never joined. This mode may be more appropriate
-     * than default locally stack-based mode in applications in which
-     * worker threads only process event-style asynchronous tasks.
-     * For default value, use {@code false}.
-     * @throws IllegalArgumentException if parallelism less than or
-     *         equal to zero, or greater than implementation limit
-     * @throws NullPointerException if the factory is null
-     * @throws SecurityException if a security manager exists and
-     *         the caller is not permitted to modify threads
-     *         because it does not hold {@link
-     *         java.lang.RuntimePermission}{@code ("modifyThread")}
-     */
-    public ForkJoinPool(int parallelism,
-                        ForkJoinWorkerThreadFactory factory,
-                        Thread.UncaughtExceptionHandler handler,
-                        boolean asyncMode) {
-        checkPermission();
-        if (factory == null)
-            throw new NullPointerException();
-        if (parallelism <= 0 || parallelism > MAX_ID)
-            throw new IllegalArgumentException();
-        this.parallelism = parallelism;
-        this.factory = factory;
-        this.ueh = handler;
-        this.locallyFifo = asyncMode;
-        long np = (long)(-parallelism); // offset ctl counts
-        this.ctl = ((np << AC_SHIFT) & AC_MASK) | ((np << TC_SHIFT) & TC_MASK);
-        this.submissionQueue = new ForkJoinTask<?>[INITIAL_QUEUE_CAPACITY];
-        // initialize workers array with room for 2*parallelism if possible
-        int n = parallelism << 1;
-        if (n >= MAX_ID)
-            n = MAX_ID;
-        else { // See Hackers Delight, sec 3.2, where n < (1 << 16)
-            n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |= n >>> 8;
-        }
-        workers = new ForkJoinWorkerThread[n + 1];
-        this.submissionLock = new ReentrantLock();
-        this.termination = submissionLock.newCondition();
-        StringBuilder sb = new StringBuilder("ForkJoinPool-");
-        sb.append(poolNumberGenerator.incrementAndGet());
-        sb.append("-worker-");
-        this.workerNamePrefix = sb.toString();
-    }
-
-    // Execution methods
-
-    /**
-     * Performs the given task, returning its result upon completion.
-     * If the computation encounters an unchecked Exception or Error,
-     * it is rethrown as the outcome of this invocation.  Rethrown
-     * exceptions behave in the same way as regular exceptions, but,
-     * when possible, contain stack traces (as displayed for example
-     * using {@code ex.printStackTrace()}) of both the current thread
-     * as well as the thread actually encountering the exception;
-     * minimally only the latter.
-     *
-     * @param task the task
-     * @return the task's result
-     * @throws NullPointerException if the task is null
-     * @throws RejectedExecutionException if the task cannot be
-     *         scheduled for execution
-     */
-    public <T> T invoke(ForkJoinTask<T> task) {
-        Thread t = Thread.currentThread();
-        if (task == null)
-            throw new NullPointerException();
-        if (shutdown)
-            throw new RejectedExecutionException();
-        if ((t instanceof ForkJoinWorkerThread) &&
-            ((ForkJoinWorkerThread)t).pool == this)
-            return task.invoke();  // bypass submit if in same pool
-        else {
-            addSubmission(task);
-            return task.join();
-        }
-    }
-
-    /**
-     * Unless terminating, forks task if within an ongoing FJ
-     * computation in the current pool, else submits as external task.
-     */
-    private <T> void forkOrSubmit(ForkJoinTask<T> task) {
-        ForkJoinWorkerThread w;
-        Thread t = Thread.currentThread();
-        if (shutdown)
-            throw new RejectedExecutionException();
-        if ((t instanceof ForkJoinWorkerThread) &&
-            (w = (ForkJoinWorkerThread)t).pool == this)
-            w.pushTask(task);
-        else
-            addSubmission(task);
-    }
-
-    /**
-     * Arranges for (asynchronous) execution of the given task.
-     *
-     * @param task the task
-     * @throws NullPointerException if the task is null
-     * @throws RejectedExecutionException if the task cannot be
-     *         scheduled for execution
-     */
-    public void execute(ForkJoinTask<?> task) {
-        if (task == null)
-            throw new NullPointerException();
-        forkOrSubmit(task);
-    }
-
-    // AbstractExecutorService methods
-
-    /**
-     * @throws NullPointerException if the task is null
-     * @throws RejectedExecutionException if the task cannot be
-     *         scheduled for execution
-     */
-    public void execute(Runnable task) {
-        if (task == null)
-            throw new NullPointerException();
-        ForkJoinTask<?> job;
-        if (task instanceof ForkJoinTask<?>) // avoid re-wrap
-            job = (ForkJoinTask<?>) task;
-        else
-            job = ForkJoinTask.adapt(task, null);
-        forkOrSubmit(job);
-    }
-
-    /**
-     * Submits a ForkJoinTask for execution.
-     *
-     * @param task the task to submit
-     * @return the task
-     * @throws NullPointerException if the task is null
-     * @throws RejectedExecutionException if the task cannot be
-     *         scheduled for execution
-     */
-    public <T> ForkJoinTask<T> submit(ForkJoinTask<T> task) {
-        if (task == null)
-            throw new NullPointerException();
-        forkOrSubmit(task);
-        return task;
-    }
-
-    /**
-     * @throws NullPointerException if the task is null
-     * @throws RejectedExecutionException if the task cannot be
-     *         scheduled for execution
-     */
-    public <T> ForkJoinTask<T> submit(Callable<T> task) {
-        if (task == null)
-            throw new NullPointerException();
-        ForkJoinTask<T> job = ForkJoinTask.adapt(task);
-        forkOrSubmit(job);
-        return job;
-    }
-
-    /**
-     * @throws NullPointerException if the task is null
-     * @throws RejectedExecutionException if the task cannot be
-     *         scheduled for execution
-     */
-    public <T> ForkJoinTask<T> submit(Runnable task, T result) {
-        if (task == null)
-            throw new NullPointerException();
-        ForkJoinTask<T> job = ForkJoinTask.adapt(task, result);
-        forkOrSubmit(job);
-        return job;
-    }
-
-    /**
-     * @throws NullPointerException if the task is null
-     * @throws RejectedExecutionException if the task cannot be
-     *         scheduled for execution
-     */
-    public ForkJoinTask<?> submit(Runnable task) {
-        if (task == null)
-            throw new NullPointerException();
-        ForkJoinTask<?> job;
-        if (task instanceof ForkJoinTask<?>) // avoid re-wrap
-            job = (ForkJoinTask<?>) task;
-        else
-            job = ForkJoinTask.adapt(task, null);
-        forkOrSubmit(job);
-        return job;
-    }
-
-    /**
-     * @throws NullPointerException       {@inheritDoc}
-     * @throws RejectedExecutionException {@inheritDoc}
-     */
-    public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) {
-        ArrayList<ForkJoinTask<T>> forkJoinTasks =
-            new ArrayList<ForkJoinTask<T>>(tasks.size());
-        for (Callable<T> task : tasks)
-            forkJoinTasks.add(ForkJoinTask.adapt(task));
-        invoke(new InvokeAll<T>(forkJoinTasks));
-
-        @SuppressWarnings({"unchecked", "rawtypes"})
-            List<Future<T>> futures = (List<Future<T>>) (List) forkJoinTasks;
-        return futures;
-    }
-
-    static final class InvokeAll<T> extends RecursiveAction {
-        final ArrayList<ForkJoinTask<T>> tasks;
-        InvokeAll(ArrayList<ForkJoinTask<T>> tasks) { this.tasks = tasks; }
-        public void compute() {
-            try { invokeAll(tasks); }
-            catch (Exception ignore) {}
-        }
-        private static final long serialVersionUID = -7914297376763021607L;
-    }
-
-    /**
-     * Returns the factory used for constructing new workers.
-     *
-     * @return the factory used for constructing new workers
-     */
-    public ForkJoinWorkerThreadFactory getFactory() {
-        return factory;
-    }
-
-    /**
-     * Returns the handler for internal worker threads that terminate
-     * due to unrecoverable errors encountered while executing tasks.
-     *
-     * @return the handler, or {@code null} if none
-     */
-    public Thread.UncaughtExceptionHandler getUncaughtExceptionHandler() {
-        return ueh;
-    }
-
-    /**
-     * Returns the targeted parallelism level of this pool.
-     *
-     * @return the targeted parallelism level of this pool
-     */
-    public int getParallelism() {
-        return parallelism;
-    }
-
-    /**
-     * Returns the number of worker threads that have started but not
-     * yet terminated.  The result returned by this method may differ
-     * from {@link #getParallelism} when threads are created to
-     * maintain parallelism when others are cooperatively blocked.
-     *
-     * @return the number of worker threads
-     */
-    public int getPoolSize() {
-        return parallelism + (short)(ctl >>> TC_SHIFT);
-    }
-
-    /**
-     * Returns {@code true} if this pool uses local first-in-first-out
-     * scheduling mode for forked tasks that are never joined.
-     *
-     * @return {@code true} if this pool uses async mode
-     */
-    public boolean getAsyncMode() {
-        return locallyFifo;
-    }
-
-    /**
-     * Returns an estimate of the number of worker threads that are
-     * not blocked waiting to join tasks or for other managed
-     * synchronization. This method may overestimate the
-     * number of running threads.
-     *
-     * @return the number of worker threads
-     */
-    public int getRunningThreadCount() {
-        int r = parallelism + (int)(ctl >> AC_SHIFT);
-        return (r <= 0) ? 0 : r; // suppress momentarily negative values
-    }
-
-    /**
-     * Returns an estimate of the number of threads that are currently
-     * stealing or executing tasks. This method may overestimate the
-     * number of active threads.
-     *
-     * @return the number of active threads
-     */
-    public int getActiveThreadCount() {
-        int r = parallelism + (int)(ctl >> AC_SHIFT) + blockedCount;
-        return (r <= 0) ? 0 : r; // suppress momentarily negative values
-    }
-
-    /**
-     * Returns {@code true} if all worker threads are currently idle.
-     * An idle worker is one that cannot obtain a task to execute
-     * because none are available to steal from other threads, and
-     * there are no pending submissions to the pool. This method is
-     * conservative; it might not return {@code true} immediately upon
-     * idleness of all threads, but will eventually become true if
-     * threads remain inactive.
-     *
-     * @return {@code true} if all threads are currently idle
-     */
-    public boolean isQuiescent() {
-        return parallelism + (int)(ctl >> AC_SHIFT) + blockedCount == 0;
-    }
-
-    /**
-     * Returns an estimate of the total number of tasks stolen from
-     * one thread's work queue by another. The reported value
-     * underestimates the actual total number of steals when the pool
-     * is not quiescent. This value may be useful for monitoring and
-     * tuning fork/join programs: in general, steal counts should be
-     * high enough to keep threads busy, but low enough to avoid
-     * overhead and contention across threads.
-     *
-     * @return the number of steals
-     */
-    public long getStealCount() {
-        return stealCount;
-    }
-
-    /**
-     * Returns an estimate of the total number of tasks currently held
-     * in queues by worker threads (but not including tasks submitted
-     * to the pool that have not begun executing). This value is only
-     * an approximation, obtained by iterating across all threads in
-     * the pool. This method may be useful for tuning task
-     * granularities.
-     *
-     * @return the number of queued tasks
-     */
-    public long getQueuedTaskCount() {
-        long count = 0;
-        ForkJoinWorkerThread[] ws;
-        if ((short)(ctl >>> TC_SHIFT) > -parallelism &&
-            (ws = workers) != null) {
-            for (ForkJoinWorkerThread w : ws)
-                if (w != null)
-                    count -= w.queueBase - w.queueTop; // must read base first
-        }
-        return count;
-    }
-
-    /**
-     * Returns an estimate of the number of tasks submitted to this
-     * pool that have not yet begun executing.  This method may take
-     * time proportional to the number of submissions.
-     *
-     * @return the number of queued submissions
-     */
-    public int getQueuedSubmissionCount() {
-        return -queueBase + queueTop;
-    }
-
-    /**
-     * Returns {@code true} if there are any tasks submitted to this
-     * pool that have not yet begun executing.
-     *
-     * @return {@code true} if there are any queued submissions
-     */
-    public boolean hasQueuedSubmissions() {
-        return queueBase != queueTop;
-    }
-
-    /**
-     * Removes and returns the next unexecuted submission if one is
-     * available.  This method may be useful in extensions to this
-     * class that re-assign work in systems with multiple pools.
-     *
-     * @return the next submission, or {@code null} if none
-     */
-    protected ForkJoinTask<?> pollSubmission() {
-        ForkJoinTask<?> t; ForkJoinTask<?>[] q; int b, i;
-        while ((b = queueBase) != queueTop &&
-               (q = submissionQueue) != null &&
-               (i = (q.length - 1) & b) >= 0) {
-            long u = (i << ASHIFT) + ABASE;
-            if ((t = q[i]) != null &&
-                queueBase == b &&
-                UNSAFE.compareAndSwapObject(q, u, t, null)) {
-                queueBase = b + 1;
-                return t;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Removes all available unexecuted submitted and forked tasks
-     * from scheduling queues and adds them to the given collection,
-     * without altering their execution status. These may include
-     * artificially generated or wrapped tasks. This method is
-     * designed to be invoked only when the pool is known to be
-     * quiescent. Invocations at other times may not remove all
-     * tasks. A failure encountered while attempting to add elements
-     * to collection {@code c} may result in elements being in
-     * neither, either or both collections when the associated
-     * exception is thrown.  The behavior of this operation is
-     * undefined if the specified collection is modified while the
-     * operation is in progress.
-     *
-     * @param c the collection to transfer elements into
-     * @return the number of elements transferred
-     */
-    protected int drainTasksTo(Collection<? super ForkJoinTask<?>> c) {
-        int count = 0;
-        while (queueBase != queueTop) {
-            ForkJoinTask<?> t = pollSubmission();
-            if (t != null) {
-                c.add(t);
-                ++count;
-            }
-        }
-        ForkJoinWorkerThread[] ws;
-        if ((short)(ctl >>> TC_SHIFT) > -parallelism &&
-            (ws = workers) != null) {
-            for (ForkJoinWorkerThread w : ws)
-                if (w != null)
-                    count += w.drainTasksTo(c);
-        }
-        return count;
-    }
-
-    /**
-     * Returns a string identifying this pool, as well as its state,
-     * including indications of run state, parallelism level, and
-     * worker and task counts.
-     *
-     * @return a string identifying this pool, as well as its state
-     */
-    public String toString() {
-        long st = getStealCount();
-        long qt = getQueuedTaskCount();
-        long qs = getQueuedSubmissionCount();
-        int pc = parallelism;
-        long c = ctl;
-        int tc = pc + (short)(c >>> TC_SHIFT);
-        int rc = pc + (int)(c >> AC_SHIFT);
-        if (rc < 0) // ignore transient negative
-            rc = 0;
-        int ac = rc + blockedCount;
-        String level;
-        if ((c & STOP_BIT) != 0)
-            level = (tc == 0) ? "Terminated" : "Terminating";
-        else
-            level = shutdown ? "Shutting down" : "Running";
-        return super.toString() +
-            "[" + level +
-            ", parallelism = " + pc +
-            ", size = " + tc +
-            ", active = " + ac +
-            ", running = " + rc +
-            ", steals = " + st +
-            ", tasks = " + qt +
-            ", submissions = " + qs +
-            "]";
-    }
-
-    /**
-     * Initiates an orderly shutdown in which previously submitted
-     * tasks are executed, but no new tasks will be accepted.
-     * Invocation has no additional effect if already shut down.
-     * Tasks that are in the process of being submitted concurrently
-     * during the course of this method may or may not be rejected.
-     *
-     * @throws SecurityException if a security manager exists and
-     *         the caller is not permitted to modify threads
-     *         because it does not hold {@link
-     *         java.lang.RuntimePermission}{@code ("modifyThread")}
-     */
-    public void shutdown() {
-        checkPermission();
-        shutdown = true;
-        tryTerminate(false);
-    }
-
-    /**
-     * Attempts to cancel and/or stop all tasks, and reject all
-     * subsequently submitted tasks.  Tasks that are in the process of
-     * being submitted or executed concurrently during the course of
-     * this method may or may not be rejected. This method cancels
-     * both existing and unexecuted tasks, in order to permit
-     * termination in the presence of task dependencies. So the method
-     * always returns an empty list (unlike the case for some other
-     * Executors).
-     *
-     * @return an empty list
-     * @throws SecurityException if a security manager exists and
-     *         the caller is not permitted to modify threads
-     *         because it does not hold {@link
-     *         java.lang.RuntimePermission}{@code ("modifyThread")}
-     */
-    public List<Runnable> shutdownNow() {
-        checkPermission();
-        shutdown = true;
-        tryTerminate(true);
-        return Collections.emptyList();
-    }
-
-    /**
-     * Returns {@code true} if all tasks have completed following shut down.
-     *
-     * @return {@code true} if all tasks have completed following shut down
-     */
-    public boolean isTerminated() {
-        long c = ctl;
-        return ((c & STOP_BIT) != 0L &&
-                (short)(c >>> TC_SHIFT) == -parallelism);
-    }
-
-    /**
-     * Returns {@code true} if the process of termination has
-     * commenced but not yet completed.  This method may be useful for
-     * debugging. A return of {@code true} reported a sufficient
-     * period after shutdown may indicate that submitted tasks have
-     * ignored or suppressed interruption, or are waiting for IO,
-     * causing this executor not to properly terminate. (See the
-     * advisory notes for class {@link ForkJoinTask} stating that
-     * tasks should not normally entail blocking operations.  But if
-     * they do, they must abort them on interrupt.)
-     *
-     * @return {@code true} if terminating but not yet terminated
-     */
-    public boolean isTerminating() {
-        long c = ctl;
-        return ((c & STOP_BIT) != 0L &&
-                (short)(c >>> TC_SHIFT) != -parallelism);
-    }
-
-    /**
-     * Returns true if terminating or terminated. Used by ForkJoinWorkerThread.
-     */
-    final boolean isAtLeastTerminating() {
-        return (ctl & STOP_BIT) != 0L;
-    }
-
-    /**
-     * Returns {@code true} if this pool has been shut down.
-     *
-     * @return {@code true} if this pool has been shut down
-     */
-    public boolean isShutdown() {
-        return shutdown;
-    }
-
-    /**
-     * Blocks until all tasks have completed execution after a shutdown
-     * request, or the timeout occurs, or the current thread is
-     * interrupted, whichever happens first.
-     *
-     * @param timeout the maximum time to wait
-     * @param unit the time unit of the timeout argument
-     * @return {@code true} if this executor terminated and
-     *         {@code false} if the timeout elapsed before termination
-     * @throws InterruptedException if interrupted while waiting
-     */
-    public boolean awaitTermination(long timeout, TimeUnit unit)
-        throws InterruptedException {
-        long nanos = unit.toNanos(timeout);
-        final ReentrantLock lock = this.submissionLock;
-        lock.lock();
-        try {
-            for (;;) {
-                if (isTerminated())
-                    return true;
-                if (nanos <= 0)
-                    return false;
-                nanos = termination.awaitNanos(nanos);
-            }
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Interface for extending managed parallelism for tasks running
-     * in {@link ForkJoinPool}s.
-     *
-     * <p>A {@code ManagedBlocker} provides two methods.  Method
-     * {@code isReleasable} must return {@code true} if blocking is
-     * not necessary. Method {@code block} blocks the current thread
-     * if necessary (perhaps internally invoking {@code isReleasable}
-     * before actually blocking). These actions are performed by any
-     * thread invoking {@link ForkJoinPool#managedBlock}.  The
-     * unusual methods in this API accommodate synchronizers that may,
-     * but don't usually, block for long periods. Similarly, they
-     * allow more efficient internal handling of cases in which
-     * additional workers may be, but usually are not, needed to
-     * ensure sufficient parallelism.  Toward this end,
-     * implementations of method {@code isReleasable} must be amenable
-     * to repeated invocation.
-     *
-     * <p>For example, here is a ManagedBlocker based on a
-     * ReentrantLock:
-     *  <pre> {@code
-     * class ManagedLocker implements ManagedBlocker {
-     *   final ReentrantLock lock;
-     *   boolean hasLock = false;
-     *   ManagedLocker(ReentrantLock lock) { this.lock = lock; }
-     *   public boolean block() {
-     *     if (!hasLock)
-     *       lock.lock();
-     *     return true;
-     *   }
-     *   public boolean isReleasable() {
-     *     return hasLock || (hasLock = lock.tryLock());
-     *   }
-     * }}</pre>
-     *
-     * <p>Here is a class that possibly blocks waiting for an
-     * item on a given queue:
-     *  <pre> {@code
-     * class QueueTaker<E> implements ManagedBlocker {
-     *   final BlockingQueue<E> queue;
-     *   volatile E item = null;
-     *   QueueTaker(BlockingQueue<E> q) { this.queue = q; }
-     *   public boolean block() throws InterruptedException {
-     *     if (item == null)
-     *       item = queue.take();
-     *     return true;
-     *   }
-     *   public boolean isReleasable() {
-     *     return item != null || (item = queue.poll()) != null;
-     *   }
-     *   public E getItem() { // call after pool.managedBlock completes
-     *     return item;
-     *   }
-     * }}</pre>
-     */
-    public static interface ManagedBlocker {
-        /**
-         * Possibly blocks the current thread, for example waiting for
-         * a lock or condition.
-         *
-         * @return {@code true} if no additional blocking is necessary
-         * (i.e., if isReleasable would return true)
-         * @throws InterruptedException if interrupted while waiting
-         * (the method is not required to do so, but is allowed to)
-         */
-        boolean block() throws InterruptedException;
-
-        /**
-         * Returns {@code true} if blocking is unnecessary.
-         */
-        boolean isReleasable();
-    }
-
-    /**
-     * Blocks in accord with the given blocker.  If the current thread
-     * is a {@link ForkJoinWorkerThread}, this method possibly
-     * arranges for a spare thread to be activated if necessary to
-     * ensure sufficient parallelism while the current thread is blocked.
-     *
-     * <p>If the caller is not a {@link ForkJoinTask}, this method is
-     * behaviorally equivalent to
-     *  <pre> {@code
-     * while (!blocker.isReleasable())
-     *   if (blocker.block())
-     *     return;
-     * }</pre>
-     *
-     * If the caller is a {@code ForkJoinTask}, then the pool may
-     * first be expanded to ensure parallelism, and later adjusted.
-     *
-     * @param blocker the blocker
-     * @throws InterruptedException if blocker.block did so
-     */
-    public static void managedBlock(ManagedBlocker blocker)
-        throws InterruptedException {
-        Thread t = Thread.currentThread();
-        if (t instanceof ForkJoinWorkerThread) {
-            ForkJoinWorkerThread w = (ForkJoinWorkerThread) t;
-            w.pool.awaitBlocker(blocker);
-        }
-        else {
-            do {} while (!blocker.isReleasable() && !blocker.block());
-        }
-    }
-
-    // AbstractExecutorService overrides.  These rely on undocumented
-    // fact that ForkJoinTask.adapt returns ForkJoinTasks that also
-    // implement RunnableFuture.
-
-    protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) {
-        return (RunnableFuture<T>) ForkJoinTask.adapt(runnable, value);
-    }
-
-    protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) {
-        return (RunnableFuture<T>) ForkJoinTask.adapt(callable);
-    }
-
-    // Unsafe mechanics
-    private static final sun.misc.Unsafe UNSAFE;
-    private static final long ctlOffset;
-    private static final long stealCountOffset;
-    private static final long blockedCountOffset;
-    private static final long quiescerCountOffset;
-    private static final long scanGuardOffset;
-    private static final long nextWorkerNumberOffset;
-    private static final long ABASE;
-    private static final int ASHIFT;
-
-    static {
-        poolNumberGenerator = new AtomicInteger();
-        workerSeedGenerator = new Random();
-        modifyThreadPermission = new RuntimePermission("modifyThread");
-        defaultForkJoinWorkerThreadFactory =
-            new DefaultForkJoinWorkerThreadFactory();
-        int s;
-        try {
-            UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = ForkJoinPool.class;
-            ctlOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("ctl"));
-            stealCountOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("stealCount"));
-            blockedCountOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("blockedCount"));
-            quiescerCountOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("quiescerCount"));
-            scanGuardOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("scanGuard"));
-            nextWorkerNumberOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("nextWorkerNumber"));
-            Class a = ForkJoinTask[].class;
-            ABASE = UNSAFE.arrayBaseOffset(a);
-            s = UNSAFE.arrayIndexScale(a);
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-        if ((s & (s-1)) != 0)
-            throw new Error("data type scale not a power of two");
-        ASHIFT = 31 - Integer.numberOfLeadingZeros(s);
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ForkJoinTask.java b/ojluni/src/main/java/java/util/concurrent/ForkJoinTask.java
deleted file mode 100755
index fbab843..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ForkJoinTask.java
+++ /dev/null
@@ -1,1386 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.RandomAccess;
-import java.util.Map;
-import java.lang.ref.WeakReference;
-import java.lang.ref.ReferenceQueue;
-import java.util.concurrent.Callable;
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
-import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.RunnableFuture;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import java.util.concurrent.locks.ReentrantLock;
-import java.lang.reflect.Constructor;
-
-/**
- * Abstract base class for tasks that run within a {@link ForkJoinPool}.
- * A {@code ForkJoinTask} is a thread-like entity that is much
- * lighter weight than a normal thread.  Huge numbers of tasks and
- * subtasks may be hosted by a small number of actual threads in a
- * ForkJoinPool, at the price of some usage limitations.
- *
- * <p>A "main" {@code ForkJoinTask} begins execution when submitted
- * to a {@link ForkJoinPool}.  Once started, it will usually in turn
- * start other subtasks.  As indicated by the name of this class,
- * many programs using {@code ForkJoinTask} employ only methods
- * {@link #fork} and {@link #join}, or derivatives such as {@link
- * #invokeAll(ForkJoinTask...) invokeAll}.  However, this class also
- * provides a number of other methods that can come into play in
- * advanced usages, as well as extension mechanics that allow
- * support of new forms of fork/join processing.
- *
- * <p>A {@code ForkJoinTask} is a lightweight form of {@link Future}.
- * The efficiency of {@code ForkJoinTask}s stems from a set of
- * restrictions (that are only partially statically enforceable)
- * reflecting their intended use as computational tasks calculating
- * pure functions or operating on purely isolated objects.  The
- * primary coordination mechanisms are {@link #fork}, that arranges
- * asynchronous execution, and {@link #join}, that doesn't proceed
- * until the task's result has been computed.  Computations should
- * avoid {@code synchronized} methods or blocks, and should minimize
- * other blocking synchronization apart from joining other tasks or
- * using synchronizers such as Phasers that are advertised to
- * cooperate with fork/join scheduling. Tasks should also not perform
- * blocking IO, and should ideally access variables that are
- * completely independent of those accessed by other running
- * tasks. Minor breaches of these restrictions, for example using
- * shared output streams, may be tolerable in practice, but frequent
- * use may result in poor performance, and the potential to
- * indefinitely stall if the number of threads not waiting for IO or
- * other external synchronization becomes exhausted. This usage
- * restriction is in part enforced by not permitting checked
- * exceptions such as {@code IOExceptions} to be thrown. However,
- * computations may still encounter unchecked exceptions, that are
- * rethrown to callers attempting to join them. These exceptions may
- * additionally include {@link RejectedExecutionException} stemming
- * from internal resource exhaustion, such as failure to allocate
- * internal task queues. Rethrown exceptions behave in the same way as
- * regular exceptions, but, when possible, contain stack traces (as
- * displayed for example using {@code ex.printStackTrace()}) of both
- * the thread that initiated the computation as well as the thread
- * actually encountering the exception; minimally only the latter.
- *
- * <p>The primary method for awaiting completion and extracting
- * results of a task is {@link #join}, but there are several variants:
- * The {@link Future#get} methods support interruptible and/or timed
- * waits for completion and report results using {@code Future}
- * conventions. Method {@link #invoke} is semantically
- * equivalent to {@code fork(); join()} but always attempts to begin
- * execution in the current thread. The "<em>quiet</em>" forms of
- * these methods do not extract results or report exceptions. These
- * may be useful when a set of tasks are being executed, and you need
- * to delay processing of results or exceptions until all complete.
- * Method {@code invokeAll} (available in multiple versions)
- * performs the most common form of parallel invocation: forking a set
- * of tasks and joining them all.
- *
- * <p>The execution status of tasks may be queried at several levels
- * of detail: {@link #isDone} is true if a task completed in any way
- * (including the case where a task was cancelled without executing);
- * {@link #isCompletedNormally} is true if a task completed without
- * cancellation or encountering an exception; {@link #isCancelled} is
- * true if the task was cancelled (in which case {@link #getException}
- * returns a {@link java.util.concurrent.CancellationException}); and
- * {@link #isCompletedAbnormally} is true if a task was either
- * cancelled or encountered an exception, in which case {@link
- * #getException} will return either the encountered exception or
- * {@link java.util.concurrent.CancellationException}.
- *
- * <p>The ForkJoinTask class is not usually directly subclassed.
- * Instead, you subclass one of the abstract classes that support a
- * particular style of fork/join processing, typically {@link
- * RecursiveAction} for computations that do not return results, or
- * {@link RecursiveTask} for those that do.  Normally, a concrete
- * ForkJoinTask subclass declares fields comprising its parameters,
- * established in a constructor, and then defines a {@code compute}
- * method that somehow uses the control methods supplied by this base
- * class. While these methods have {@code public} access (to allow
- * instances of different task subclasses to call each other's
- * methods), some of them may only be called from within other
- * ForkJoinTasks (as may be determined using method {@link
- * #inForkJoinPool}).  Attempts to invoke them in other contexts
- * result in exceptions or errors, possibly including
- * {@code ClassCastException}.
- *
- * <p>Method {@link #join} and its variants are appropriate for use
- * only when completion dependencies are acyclic; that is, the
- * parallel computation can be described as a directed acyclic graph
- * (DAG). Otherwise, executions may encounter a form of deadlock as
- * tasks cyclically wait for each other.  However, this framework
- * supports other methods and techniques (for example the use of
- * {@link Phaser}, {@link #helpQuiesce}, and {@link #complete}) that
- * may be of use in constructing custom subclasses for problems that
- * are not statically structured as DAGs.
- *
- * <p>Most base support methods are {@code final}, to prevent
- * overriding of implementations that are intrinsically tied to the
- * underlying lightweight task scheduling framework.  Developers
- * creating new basic styles of fork/join processing should minimally
- * implement {@code protected} methods {@link #exec}, {@link
- * #setRawResult}, and {@link #getRawResult}, while also introducing
- * an abstract computational method that can be implemented in its
- * subclasses, possibly relying on other {@code protected} methods
- * provided by this class.
- *
- * <p>ForkJoinTasks should perform relatively small amounts of
- * computation. Large tasks should be split into smaller subtasks,
- * usually via recursive decomposition. As a very rough rule of thumb,
- * a task should perform more than 100 and less than 10000 basic
- * computational steps, and should avoid indefinite looping. If tasks
- * are too big, then parallelism cannot improve throughput. If too
- * small, then memory and internal task maintenance overhead may
- * overwhelm processing.
- *
- * <p>This class provides {@code adapt} methods for {@link Runnable}
- * and {@link Callable}, that may be of use when mixing execution of
- * {@code ForkJoinTasks} with other kinds of tasks. When all tasks are
- * of this form, consider using a pool constructed in <em>asyncMode</em>.
- *
- * <p>ForkJoinTasks are {@code Serializable}, which enables them to be
- * used in extensions such as remote execution frameworks. It is
- * sensible to serialize tasks only before or after, but not during,
- * execution. Serialization is not relied on during execution itself.
- *
- * @since 1.7
- * @author Doug Lea
- */
-public abstract class ForkJoinTask<V> implements Future<V>, Serializable {
-
-    /*
-     * See the internal documentation of class ForkJoinPool for a
-     * general implementation overview.  ForkJoinTasks are mainly
-     * responsible for maintaining their "status" field amidst relays
-     * to methods in ForkJoinWorkerThread and ForkJoinPool. The
-     * methods of this class are more-or-less layered into (1) basic
-     * status maintenance (2) execution and awaiting completion (3)
-     * user-level methods that additionally report results. This is
-     * sometimes hard to see because this file orders exported methods
-     * in a way that flows well in javadocs.
-     */
-
-    /*
-     * The status field holds run control status bits packed into a
-     * single int to minimize footprint and to ensure atomicity (via
-     * CAS).  Status is initially zero, and takes on nonnegative
-     * values until completed, upon which status holds value
-     * NORMAL, CANCELLED, or EXCEPTIONAL. Tasks undergoing blocking
-     * waits by other threads have the SIGNAL bit set.  Completion of
-     * a stolen task with SIGNAL set awakens any waiters via
-     * notifyAll. Even though suboptimal for some purposes, we use
-     * basic builtin wait/notify to take advantage of "monitor
-     * inflation" in JVMs that we would otherwise need to emulate to
-     * avoid adding further per-task bookkeeping overhead.  We want
-     * these monitors to be "fat", i.e., not use biasing or thin-lock
-     * techniques, so use some odd coding idioms that tend to avoid
-     * them.
-     */
-
-    /** The run status of this task */
-    volatile int status; // accessed directly by pool and workers
-    private static final int NORMAL      = -1;
-    private static final int CANCELLED   = -2;
-    private static final int EXCEPTIONAL = -3;
-    private static final int SIGNAL      =  1;
-
-    /**
-     * Marks completion and wakes up threads waiting to join this task,
-     * also clearing signal request bits.
-     *
-     * @param completion one of NORMAL, CANCELLED, EXCEPTIONAL
-     * @return completion status on exit
-     */
-    private int setCompletion(int completion) {
-        for (int s;;) {
-            if ((s = status) < 0)
-                return s;
-            if (UNSAFE.compareAndSwapInt(this, statusOffset, s, completion)) {
-                if (s != 0)
-                    synchronized (this) { notifyAll(); }
-                return completion;
-            }
-        }
-    }
-
-    /**
-     * Tries to block a worker thread until completed or timed out.
-     * Uses Object.wait time argument conventions.
-     * May fail on contention or interrupt.
-     *
-     * @param millis if > 0, wait time.
-     */
-    final void tryAwaitDone(long millis) {
-        int s;
-        try {
-            if (((s = status) > 0 ||
-                 (s == 0 &&
-                  UNSAFE.compareAndSwapInt(this, statusOffset, 0, SIGNAL))) &&
-                status > 0) {
-                synchronized (this) {
-                    if (status > 0)
-                        wait(millis);
-                }
-            }
-        } catch (InterruptedException ie) {
-            // caller must check termination
-        }
-    }
-
-    /**
-     * Blocks a non-worker-thread until completion.
-     * @return status upon completion
-     */
-    private int externalAwaitDone() {
-        int s;
-        if ((s = status) >= 0) {
-            boolean interrupted = false;
-            synchronized (this) {
-                while ((s = status) >= 0) {
-                    if (s == 0)
-                        UNSAFE.compareAndSwapInt(this, statusOffset,
-                                                 0, SIGNAL);
-                    else {
-                        try {
-                            wait();
-                        } catch (InterruptedException ie) {
-                            interrupted = true;
-                        }
-                    }
-                }
-            }
-            if (interrupted)
-                Thread.currentThread().interrupt();
-        }
-        return s;
-    }
-
-    /**
-     * Blocks a non-worker-thread until completion or interruption or timeout.
-     */
-    private int externalInterruptibleAwaitDone(long millis)
-        throws InterruptedException {
-        int s;
-        if (Thread.interrupted())
-            throw new InterruptedException();
-        if ((s = status) >= 0) {
-            synchronized (this) {
-                while ((s = status) >= 0) {
-                    if (s == 0)
-                        UNSAFE.compareAndSwapInt(this, statusOffset,
-                                                 0, SIGNAL);
-                    else {
-                        wait(millis);
-                        if (millis > 0L)
-                            break;
-                    }
-                }
-            }
-        }
-        return s;
-    }
-
-    /**
-     * Primary execution method for stolen tasks. Unless done, calls
-     * exec and records status if completed, but doesn't wait for
-     * completion otherwise.
-     */
-    final void doExec() {
-        if (status >= 0) {
-            boolean completed;
-            try {
-                completed = exec();
-            } catch (Throwable rex) {
-                setExceptionalCompletion(rex);
-                return;
-            }
-            if (completed)
-                setCompletion(NORMAL); // must be outside try block
-        }
-    }
-
-    /**
-     * Primary mechanics for join, get, quietlyJoin.
-     * @return status upon completion
-     */
-    private int doJoin() {
-        Thread t; ForkJoinWorkerThread w; int s; boolean completed;
-        if ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) {
-            if ((s = status) < 0)
-                return s;
-            if ((w = (ForkJoinWorkerThread)t).unpushTask(this)) {
-                try {
-                    completed = exec();
-                } catch (Throwable rex) {
-                    return setExceptionalCompletion(rex);
-                }
-                if (completed)
-                    return setCompletion(NORMAL);
-            }
-            return w.joinTask(this);
-        }
-        else
-            return externalAwaitDone();
-    }
-
-    /**
-     * Primary mechanics for invoke, quietlyInvoke.
-     * @return status upon completion
-     */
-    private int doInvoke() {
-        int s; boolean completed;
-        if ((s = status) < 0)
-            return s;
-        try {
-            completed = exec();
-        } catch (Throwable rex) {
-            return setExceptionalCompletion(rex);
-        }
-        if (completed)
-            return setCompletion(NORMAL);
-        else
-            return doJoin();
-    }
-
-    // Exception table support
-
-    /**
-     * Table of exceptions thrown by tasks, to enable reporting by
-     * callers. Because exceptions are rare, we don't directly keep
-     * them with task objects, but instead use a weak ref table.  Note
-     * that cancellation exceptions don't appear in the table, but are
-     * instead recorded as status values.
-     *
-     * Note: These statics are initialized below in static block.
-     */
-    private static final ExceptionNode[] exceptionTable;
-    private static final ReentrantLock exceptionTableLock;
-    private static final ReferenceQueue<Object> exceptionTableRefQueue;
-
-    /**
-     * Fixed capacity for exceptionTable.
-     */
-    private static final int EXCEPTION_MAP_CAPACITY = 32;
-
-    /**
-     * Key-value nodes for exception table.  The chained hash table
-     * uses identity comparisons, full locking, and weak references
-     * for keys. The table has a fixed capacity because it only
-     * maintains task exceptions long enough for joiners to access
-     * them, so should never become very large for sustained
-     * periods. However, since we do not know when the last joiner
-     * completes, we must use weak references and expunge them. We do
-     * so on each operation (hence full locking). Also, some thread in
-     * any ForkJoinPool will call helpExpungeStaleExceptions when its
-     * pool becomes isQuiescent.
-     */
-    static final class ExceptionNode extends WeakReference<ForkJoinTask<?>>{
-        final Throwable ex;
-        ExceptionNode next;
-        final long thrower;  // use id not ref to avoid weak cycles
-        ExceptionNode(ForkJoinTask<?> task, Throwable ex, ExceptionNode next) {
-            super(task, exceptionTableRefQueue);
-            this.ex = ex;
-            this.next = next;
-            this.thrower = Thread.currentThread().getId();
-        }
-    }
-
-    /**
-     * Records exception and sets exceptional completion.
-     *
-     * @return status on exit
-     */
-    private int setExceptionalCompletion(Throwable ex) {
-        int h = System.identityHashCode(this);
-        final ReentrantLock lock = exceptionTableLock;
-        lock.lock();
-        try {
-            expungeStaleExceptions();
-            ExceptionNode[] t = exceptionTable;
-            int i = h & (t.length - 1);
-            for (ExceptionNode e = t[i]; ; e = e.next) {
-                if (e == null) {
-                    t[i] = new ExceptionNode(this, ex, t[i]);
-                    break;
-                }
-                if (e.get() == this) // already present
-                    break;
-            }
-        } finally {
-            lock.unlock();
-        }
-        return setCompletion(EXCEPTIONAL);
-    }
-
-    /**
-     * Removes exception node and clears status
-     */
-    private void clearExceptionalCompletion() {
-        int h = System.identityHashCode(this);
-        final ReentrantLock lock = exceptionTableLock;
-        lock.lock();
-        try {
-            ExceptionNode[] t = exceptionTable;
-            int i = h & (t.length - 1);
-            ExceptionNode e = t[i];
-            ExceptionNode pred = null;
-            while (e != null) {
-                ExceptionNode next = e.next;
-                if (e.get() == this) {
-                    if (pred == null)
-                        t[i] = next;
-                    else
-                        pred.next = next;
-                    break;
-                }
-                pred = e;
-                e = next;
-            }
-            expungeStaleExceptions();
-            status = 0;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns a rethrowable exception for the given task, if
-     * available. To provide accurate stack traces, if the exception
-     * was not thrown by the current thread, we try to create a new
-     * exception of the same type as the one thrown, but with the
-     * recorded exception as its cause. If there is no such
-     * constructor, we instead try to use a no-arg constructor,
-     * followed by initCause, to the same effect. If none of these
-     * apply, or any fail due to other exceptions, we return the
-     * recorded exception, which is still correct, although it may
-     * contain a misleading stack trace.
-     *
-     * @return the exception, or null if none
-     */
-    private Throwable getThrowableException() {
-        if (status != EXCEPTIONAL)
-            return null;
-        int h = System.identityHashCode(this);
-        ExceptionNode e;
-        final ReentrantLock lock = exceptionTableLock;
-        lock.lock();
-        try {
-            expungeStaleExceptions();
-            ExceptionNode[] t = exceptionTable;
-            e = t[h & (t.length - 1)];
-            while (e != null && e.get() != this)
-                e = e.next;
-        } finally {
-            lock.unlock();
-        }
-        Throwable ex;
-        if (e == null || (ex = e.ex) == null)
-            return null;
-        if (e.thrower != Thread.currentThread().getId()) {
-            Class ec = ex.getClass();
-            try {
-                Constructor<?> noArgCtor = null;
-                Constructor<?>[] cs = ec.getConstructors();// public ctors only
-                for (int i = 0; i < cs.length; ++i) {
-                    Constructor<?> c = cs[i];
-                    Class<?>[] ps = c.getParameterTypes();
-                    if (ps.length == 0)
-                        noArgCtor = c;
-                    else if (ps.length == 1 && ps[0] == Throwable.class)
-                        return (Throwable)(c.newInstance(ex));
-                }
-                if (noArgCtor != null) {
-                    Throwable wx = (Throwable)(noArgCtor.newInstance());
-                    wx.initCause(ex);
-                    return wx;
-                }
-            } catch (Exception ignore) {
-            }
-        }
-        return ex;
-    }
-
-    /**
-     * Poll stale refs and remove them. Call only while holding lock.
-     */
-    private static void expungeStaleExceptions() {
-        for (Object x; (x = exceptionTableRefQueue.poll()) != null;) {
-            if (x instanceof ExceptionNode) {
-                ForkJoinTask<?> key = ((ExceptionNode)x).get();
-                ExceptionNode[] t = exceptionTable;
-                int i = System.identityHashCode(key) & (t.length - 1);
-                ExceptionNode e = t[i];
-                ExceptionNode pred = null;
-                while (e != null) {
-                    ExceptionNode next = e.next;
-                    if (e == x) {
-                        if (pred == null)
-                            t[i] = next;
-                        else
-                            pred.next = next;
-                        break;
-                    }
-                    pred = e;
-                    e = next;
-                }
-            }
-        }
-    }
-
-    /**
-     * If lock is available, poll stale refs and remove them.
-     * Called from ForkJoinPool when pools become quiescent.
-     */
-    static final void helpExpungeStaleExceptions() {
-        final ReentrantLock lock = exceptionTableLock;
-        if (lock.tryLock()) {
-            try {
-                expungeStaleExceptions();
-            } finally {
-                lock.unlock();
-            }
-        }
-    }
-
-    /**
-     * Report the result of invoke or join; called only upon
-     * non-normal return of internal versions.
-     */
-    private V reportResult() {
-        int s; Throwable ex;
-        if ((s = status) == CANCELLED)
-            throw new CancellationException();
-        if (s == EXCEPTIONAL && (ex = getThrowableException()) != null)
-            UNSAFE.throwException(ex);
-        return getRawResult();
-    }
-
-    // public methods
-
-    /**
-     * Arranges to asynchronously execute this task.  While it is not
-     * necessarily enforced, it is a usage error to fork a task more
-     * than once unless it has completed and been reinitialized.
-     * Subsequent modifications to the state of this task or any data
-     * it operates on are not necessarily consistently observable by
-     * any thread other than the one executing it unless preceded by a
-     * call to {@link #join} or related methods, or a call to {@link
-     * #isDone} returning {@code true}.
-     *
-     * <p>This method may be invoked only from within {@code
-     * ForkJoinPool} computations (as may be determined using method
-     * {@link #inForkJoinPool}).  Attempts to invoke in other contexts
-     * result in exceptions or errors, possibly including {@code
-     * ClassCastException}.
-     *
-     * @return {@code this}, to simplify usage
-     */
-    public final ForkJoinTask<V> fork() {
-        ((ForkJoinWorkerThread) Thread.currentThread())
-            .pushTask(this);
-        return this;
-    }
-
-    /**
-     * Returns the result of the computation when it {@link #isDone is
-     * done}.  This method differs from {@link #get()} in that
-     * abnormal completion results in {@code RuntimeException} or
-     * {@code Error}, not {@code ExecutionException}, and that
-     * interrupts of the calling thread do <em>not</em> cause the
-     * method to abruptly return by throwing {@code
-     * InterruptedException}.
-     *
-     * @return the computed result
-     */
-    public final V join() {
-        if (doJoin() != NORMAL)
-            return reportResult();
-        else
-            return getRawResult();
-    }
-
-    /**
-     * Commences performing this task, awaits its completion if
-     * necessary, and returns its result, or throws an (unchecked)
-     * {@code RuntimeException} or {@code Error} if the underlying
-     * computation did so.
-     *
-     * @return the computed result
-     */
-    public final V invoke() {
-        if (doInvoke() != NORMAL)
-            return reportResult();
-        else
-            return getRawResult();
-    }
-
-    /**
-     * Forks the given tasks, returning when {@code isDone} holds for
-     * each task or an (unchecked) exception is encountered, in which
-     * case the exception is rethrown. If more than one task
-     * encounters an exception, then this method throws any one of
-     * these exceptions. If any task encounters an exception, the
-     * other may be cancelled. However, the execution status of
-     * individual tasks is not guaranteed upon exceptional return. The
-     * status of each task may be obtained using {@link
-     * #getException()} and related methods to check if they have been
-     * cancelled, completed normally or exceptionally, or left
-     * unprocessed.
-     *
-     * <p>This method may be invoked only from within {@code
-     * ForkJoinPool} computations (as may be determined using method
-     * {@link #inForkJoinPool}).  Attempts to invoke in other contexts
-     * result in exceptions or errors, possibly including {@code
-     * ClassCastException}.
-     *
-     * @param t1 the first task
-     * @param t2 the second task
-     * @throws NullPointerException if any task is null
-     */
-    public static void invokeAll(ForkJoinTask<?> t1, ForkJoinTask<?> t2) {
-        t2.fork();
-        t1.invoke();
-        t2.join();
-    }
-
-    /**
-     * Forks the given tasks, returning when {@code isDone} holds for
-     * each task or an (unchecked) exception is encountered, in which
-     * case the exception is rethrown. If more than one task
-     * encounters an exception, then this method throws any one of
-     * these exceptions. If any task encounters an exception, others
-     * may be cancelled. However, the execution status of individual
-     * tasks is not guaranteed upon exceptional return. The status of
-     * each task may be obtained using {@link #getException()} and
-     * related methods to check if they have been cancelled, completed
-     * normally or exceptionally, or left unprocessed.
-     *
-     * <p>This method may be invoked only from within {@code
-     * ForkJoinPool} computations (as may be determined using method
-     * {@link #inForkJoinPool}).  Attempts to invoke in other contexts
-     * result in exceptions or errors, possibly including {@code
-     * ClassCastException}.
-     *
-     * @param tasks the tasks
-     * @throws NullPointerException if any task is null
-     */
-    public static void invokeAll(ForkJoinTask<?>... tasks) {
-        Throwable ex = null;
-        int last = tasks.length - 1;
-        for (int i = last; i >= 0; --i) {
-            ForkJoinTask<?> t = tasks[i];
-            if (t == null) {
-                if (ex == null)
-                    ex = new NullPointerException();
-            }
-            else if (i != 0)
-                t.fork();
-            else if (t.doInvoke() < NORMAL && ex == null)
-                ex = t.getException();
-        }
-        for (int i = 1; i <= last; ++i) {
-            ForkJoinTask<?> t = tasks[i];
-            if (t != null) {
-                if (ex != null)
-                    t.cancel(false);
-                else if (t.doJoin() < NORMAL && ex == null)
-                    ex = t.getException();
-            }
-        }
-        if (ex != null)
-            UNSAFE.throwException(ex);
-    }
-
-    /**
-     * Forks all tasks in the specified collection, returning when
-     * {@code isDone} holds for each task or an (unchecked) exception
-     * is encountered, in which case the exception is rethrown. If
-     * more than one task encounters an exception, then this method
-     * throws any one of these exceptions. If any task encounters an
-     * exception, others may be cancelled. However, the execution
-     * status of individual tasks is not guaranteed upon exceptional
-     * return. The status of each task may be obtained using {@link
-     * #getException()} and related methods to check if they have been
-     * cancelled, completed normally or exceptionally, or left
-     * unprocessed.
-     *
-     * <p>This method may be invoked only from within {@code
-     * ForkJoinPool} computations (as may be determined using method
-     * {@link #inForkJoinPool}).  Attempts to invoke in other contexts
-     * result in exceptions or errors, possibly including {@code
-     * ClassCastException}.
-     *
-     * @param tasks the collection of tasks
-     * @return the tasks argument, to simplify usage
-     * @throws NullPointerException if tasks or any element are null
-     */
-    public static <T extends ForkJoinTask<?>> Collection<T> invokeAll(Collection<T> tasks) {
-        if (!(tasks instanceof RandomAccess) || !(tasks instanceof List<?>)) {
-            invokeAll(tasks.toArray(new ForkJoinTask<?>[tasks.size()]));
-            return tasks;
-        }
-        @SuppressWarnings("unchecked")
-        List<? extends ForkJoinTask<?>> ts =
-            (List<? extends ForkJoinTask<?>>) tasks;
-        Throwable ex = null;
-        int last = ts.size() - 1;
-        for (int i = last; i >= 0; --i) {
-            ForkJoinTask<?> t = ts.get(i);
-            if (t == null) {
-                if (ex == null)
-                    ex = new NullPointerException();
-            }
-            else if (i != 0)
-                t.fork();
-            else if (t.doInvoke() < NORMAL && ex == null)
-                ex = t.getException();
-        }
-        for (int i = 1; i <= last; ++i) {
-            ForkJoinTask<?> t = ts.get(i);
-            if (t != null) {
-                if (ex != null)
-                    t.cancel(false);
-                else if (t.doJoin() < NORMAL && ex == null)
-                    ex = t.getException();
-            }
-        }
-        if (ex != null)
-            UNSAFE.throwException(ex);
-        return tasks;
-    }
-
-    /**
-     * Attempts to cancel execution of this task. This attempt will
-     * fail if the task has already completed or could not be
-     * cancelled for some other reason. If successful, and this task
-     * has not started when {@code cancel} is called, execution of
-     * this task is suppressed. After this method returns
-     * successfully, unless there is an intervening call to {@link
-     * #reinitialize}, subsequent calls to {@link #isCancelled},
-     * {@link #isDone}, and {@code cancel} will return {@code true}
-     * and calls to {@link #join} and related methods will result in
-     * {@code CancellationException}.
-     *
-     * <p>This method may be overridden in subclasses, but if so, must
-     * still ensure that these properties hold. In particular, the
-     * {@code cancel} method itself must not throw exceptions.
-     *
-     * <p>This method is designed to be invoked by <em>other</em>
-     * tasks. To terminate the current task, you can just return or
-     * throw an unchecked exception from its computation method, or
-     * invoke {@link #completeExceptionally}.
-     *
-     * @param mayInterruptIfRunning this value has no effect in the
-     * default implementation because interrupts are not used to
-     * control cancellation.
-     *
-     * @return {@code true} if this task is now cancelled
-     */
-    public boolean cancel(boolean mayInterruptIfRunning) {
-        return setCompletion(CANCELLED) == CANCELLED;
-    }
-
-    /**
-     * Cancels, ignoring any exceptions thrown by cancel. Used during
-     * worker and pool shutdown. Cancel is spec'ed not to throw any
-     * exceptions, but if it does anyway, we have no recourse during
-     * shutdown, so guard against this case.
-     */
-    final void cancelIgnoringExceptions() {
-        try {
-            cancel(false);
-        } catch (Throwable ignore) {
-        }
-    }
-
-    public final boolean isDone() {
-        return status < 0;
-    }
-
-    public final boolean isCancelled() {
-        return status == CANCELLED;
-    }
-
-    /**
-     * Returns {@code true} if this task threw an exception or was cancelled.
-     *
-     * @return {@code true} if this task threw an exception or was cancelled
-     */
-    public final boolean isCompletedAbnormally() {
-        return status < NORMAL;
-    }
-
-    /**
-     * Returns {@code true} if this task completed without throwing an
-     * exception and was not cancelled.
-     *
-     * @return {@code true} if this task completed without throwing an
-     * exception and was not cancelled
-     */
-    public final boolean isCompletedNormally() {
-        return status == NORMAL;
-    }
-
-    /**
-     * Returns the exception thrown by the base computation, or a
-     * {@code CancellationException} if cancelled, or {@code null} if
-     * none or if the method has not yet completed.
-     *
-     * @return the exception, or {@code null} if none
-     */
-    public final Throwable getException() {
-        int s = status;
-        return ((s >= NORMAL)    ? null :
-                (s == CANCELLED) ? new CancellationException() :
-                getThrowableException());
-    }
-
-    /**
-     * Completes this task abnormally, and if not already aborted or
-     * cancelled, causes it to throw the given exception upon
-     * {@code join} and related operations. This method may be used
-     * to induce exceptions in asynchronous tasks, or to force
-     * completion of tasks that would not otherwise complete.  Its use
-     * in other situations is discouraged.  This method is
-     * overridable, but overridden versions must invoke {@code super}
-     * implementation to maintain guarantees.
-     *
-     * @param ex the exception to throw. If this exception is not a
-     * {@code RuntimeException} or {@code Error}, the actual exception
-     * thrown will be a {@code RuntimeException} with cause {@code ex}.
-     */
-    public void completeExceptionally(Throwable ex) {
-        setExceptionalCompletion((ex instanceof RuntimeException) ||
-                                 (ex instanceof Error) ? ex :
-                                 new RuntimeException(ex));
-    }
-
-    /**
-     * Completes this task, and if not already aborted or cancelled,
-     * returning the given value as the result of subsequent
-     * invocations of {@code join} and related operations. This method
-     * may be used to provide results for asynchronous tasks, or to
-     * provide alternative handling for tasks that would not otherwise
-     * complete normally. Its use in other situations is
-     * discouraged. This method is overridable, but overridden
-     * versions must invoke {@code super} implementation to maintain
-     * guarantees.
-     *
-     * @param value the result value for this task
-     */
-    public void complete(V value) {
-        try {
-            setRawResult(value);
-        } catch (Throwable rex) {
-            setExceptionalCompletion(rex);
-            return;
-        }
-        setCompletion(NORMAL);
-    }
-
-    /**
-     * Waits if necessary for the computation to complete, and then
-     * retrieves its result.
-     *
-     * @return the computed result
-     * @throws CancellationException if the computation was cancelled
-     * @throws ExecutionException if the computation threw an
-     * exception
-     * @throws InterruptedException if the current thread is not a
-     * member of a ForkJoinPool and was interrupted while waiting
-     */
-    public final V get() throws InterruptedException, ExecutionException {
-        int s = (Thread.currentThread() instanceof ForkJoinWorkerThread) ?
-            doJoin() : externalInterruptibleAwaitDone(0L);
-        Throwable ex;
-        if (s == CANCELLED)
-            throw new CancellationException();
-        if (s == EXCEPTIONAL && (ex = getThrowableException()) != null)
-            throw new ExecutionException(ex);
-        return getRawResult();
-    }
-
-    /**
-     * Waits if necessary for at most the given time for the computation
-     * to complete, and then retrieves its result, if available.
-     *
-     * @param timeout the maximum time to wait
-     * @param unit the time unit of the timeout argument
-     * @return the computed result
-     * @throws CancellationException if the computation was cancelled
-     * @throws ExecutionException if the computation threw an
-     * exception
-     * @throws InterruptedException if the current thread is not a
-     * member of a ForkJoinPool and was interrupted while waiting
-     * @throws TimeoutException if the wait timed out
-     */
-    public final V get(long timeout, TimeUnit unit)
-        throws InterruptedException, ExecutionException, TimeoutException {
-        Thread t = Thread.currentThread();
-        if (t instanceof ForkJoinWorkerThread) {
-            ForkJoinWorkerThread w = (ForkJoinWorkerThread) t;
-            long nanos = unit.toNanos(timeout);
-            if (status >= 0) {
-                boolean completed = false;
-                if (w.unpushTask(this)) {
-                    try {
-                        completed = exec();
-                    } catch (Throwable rex) {
-                        setExceptionalCompletion(rex);
-                    }
-                }
-                if (completed)
-                    setCompletion(NORMAL);
-                else if (status >= 0 && nanos > 0)
-                    w.pool.timedAwaitJoin(this, nanos);
-            }
-        }
-        else {
-            long millis = unit.toMillis(timeout);
-            if (millis > 0)
-                externalInterruptibleAwaitDone(millis);
-        }
-        int s = status;
-        if (s != NORMAL) {
-            Throwable ex;
-            if (s == CANCELLED)
-                throw new CancellationException();
-            if (s != EXCEPTIONAL)
-                throw new TimeoutException();
-            if ((ex = getThrowableException()) != null)
-                throw new ExecutionException(ex);
-        }
-        return getRawResult();
-    }
-
-    /**
-     * Joins this task, without returning its result or throwing its
-     * exception. This method may be useful when processing
-     * collections of tasks when some have been cancelled or otherwise
-     * known to have aborted.
-     */
-    public final void quietlyJoin() {
-        doJoin();
-    }
-
-    /**
-     * Commences performing this task and awaits its completion if
-     * necessary, without returning its result or throwing its
-     * exception.
-     */
-    public final void quietlyInvoke() {
-        doInvoke();
-    }
-
-    /**
-     * Possibly executes tasks until the pool hosting the current task
-     * {@link ForkJoinPool#isQuiescent is quiescent}. This method may
-     * be of use in designs in which many tasks are forked, but none
-     * are explicitly joined, instead executing them until all are
-     * processed.
-     *
-     * <p>This method may be invoked only from within {@code
-     * ForkJoinPool} computations (as may be determined using method
-     * {@link #inForkJoinPool}).  Attempts to invoke in other contexts
-     * result in exceptions or errors, possibly including {@code
-     * ClassCastException}.
-     */
-    public static void helpQuiesce() {
-        ((ForkJoinWorkerThread) Thread.currentThread())
-            .helpQuiescePool();
-    }
-
-    /**
-     * Resets the internal bookkeeping state of this task, allowing a
-     * subsequent {@code fork}. This method allows repeated reuse of
-     * this task, but only if reuse occurs when this task has either
-     * never been forked, or has been forked, then completed and all
-     * outstanding joins of this task have also completed. Effects
-     * under any other usage conditions are not guaranteed.
-     * This method may be useful when executing
-     * pre-constructed trees of subtasks in loops.
-     *
-     * <p>Upon completion of this method, {@code isDone()} reports
-     * {@code false}, and {@code getException()} reports {@code
-     * null}. However, the value returned by {@code getRawResult} is
-     * unaffected. To clear this value, you can invoke {@code
-     * setRawResult(null)}.
-     */
-    public void reinitialize() {
-        if (status == EXCEPTIONAL)
-            clearExceptionalCompletion();
-        else
-            status = 0;
-    }
-
-    /**
-     * Returns the pool hosting the current task execution, or null
-     * if this task is executing outside of any ForkJoinPool.
-     *
-     * @see #inForkJoinPool
-     * @return the pool, or {@code null} if none
-     */
-    public static ForkJoinPool getPool() {
-        Thread t = Thread.currentThread();
-        return (t instanceof ForkJoinWorkerThread) ?
-            ((ForkJoinWorkerThread) t).pool : null;
-    }
-
-    /**
-     * Returns {@code true} if the current thread is a {@link
-     * ForkJoinWorkerThread} executing as a ForkJoinPool computation.
-     *
-     * @return {@code true} if the current thread is a {@link
-     * ForkJoinWorkerThread} executing as a ForkJoinPool computation,
-     * or {@code false} otherwise
-     */
-    public static boolean inForkJoinPool() {
-        return Thread.currentThread() instanceof ForkJoinWorkerThread;
-    }
-
-    /**
-     * Tries to unschedule this task for execution. This method will
-     * typically succeed if this task is the most recently forked task
-     * by the current thread, and has not commenced executing in
-     * another thread.  This method may be useful when arranging
-     * alternative local processing of tasks that could have been, but
-     * were not, stolen.
-     *
-     * <p>This method may be invoked only from within {@code
-     * ForkJoinPool} computations (as may be determined using method
-     * {@link #inForkJoinPool}).  Attempts to invoke in other contexts
-     * result in exceptions or errors, possibly including {@code
-     * ClassCastException}.
-     *
-     * @return {@code true} if unforked
-     */
-    public boolean tryUnfork() {
-        return ((ForkJoinWorkerThread) Thread.currentThread())
-            .unpushTask(this);
-    }
-
-    /**
-     * Returns an estimate of the number of tasks that have been
-     * forked by the current worker thread but not yet executed. This
-     * value may be useful for heuristic decisions about whether to
-     * fork other tasks.
-     *
-     * <p>This method may be invoked only from within {@code
-     * ForkJoinPool} computations (as may be determined using method
-     * {@link #inForkJoinPool}).  Attempts to invoke in other contexts
-     * result in exceptions or errors, possibly including {@code
-     * ClassCastException}.
-     *
-     * @return the number of tasks
-     */
-    public static int getQueuedTaskCount() {
-        return ((ForkJoinWorkerThread) Thread.currentThread())
-            .getQueueSize();
-    }
-
-    /**
-     * Returns an estimate of how many more locally queued tasks are
-     * held by the current worker thread than there are other worker
-     * threads that might steal them.  This value may be useful for
-     * heuristic decisions about whether to fork other tasks. In many
-     * usages of ForkJoinTasks, at steady state, each worker should
-     * aim to maintain a small constant surplus (for example, 3) of
-     * tasks, and to process computations locally if this threshold is
-     * exceeded.
-     *
-     * <p>This method may be invoked only from within {@code
-     * ForkJoinPool} computations (as may be determined using method
-     * {@link #inForkJoinPool}).  Attempts to invoke in other contexts
-     * result in exceptions or errors, possibly including {@code
-     * ClassCastException}.
-     *
-     * @return the surplus number of tasks, which may be negative
-     */
-    public static int getSurplusQueuedTaskCount() {
-        return ((ForkJoinWorkerThread) Thread.currentThread())
-            .getEstimatedSurplusTaskCount();
-    }
-
-    // Extension methods
-
-    /**
-     * Returns the result that would be returned by {@link #join}, even
-     * if this task completed abnormally, or {@code null} if this task
-     * is not known to have been completed.  This method is designed
-     * to aid debugging, as well as to support extensions. Its use in
-     * any other context is discouraged.
-     *
-     * @return the result, or {@code null} if not completed
-     */
-    public abstract V getRawResult();
-
-    /**
-     * Forces the given value to be returned as a result.  This method
-     * is designed to support extensions, and should not in general be
-     * called otherwise.
-     *
-     * @param value the value
-     */
-    protected abstract void setRawResult(V value);
-
-    /**
-     * Immediately performs the base action of this task.  This method
-     * is designed to support extensions, and should not in general be
-     * called otherwise. The return value controls whether this task
-     * is considered to be done normally. It may return false in
-     * asynchronous actions that require explicit invocations of
-     * {@link #complete} to become joinable. It may also throw an
-     * (unchecked) exception to indicate abnormal exit.
-     *
-     * @return {@code true} if completed normally
-     */
-    protected abstract boolean exec();
-
-    /**
-     * Returns, but does not unschedule or execute, a task queued by
-     * the current thread but not yet executed, if one is immediately
-     * available. There is no guarantee that this task will actually
-     * be polled or executed next. Conversely, this method may return
-     * null even if a task exists but cannot be accessed without
-     * contention with other threads.  This method is designed
-     * primarily to support extensions, and is unlikely to be useful
-     * otherwise.
-     *
-     * <p>This method may be invoked only from within {@code
-     * ForkJoinPool} computations (as may be determined using method
-     * {@link #inForkJoinPool}).  Attempts to invoke in other contexts
-     * result in exceptions or errors, possibly including {@code
-     * ClassCastException}.
-     *
-     * @return the next task, or {@code null} if none are available
-     */
-    protected static ForkJoinTask<?> peekNextLocalTask() {
-        return ((ForkJoinWorkerThread) Thread.currentThread())
-            .peekTask();
-    }
-
-    /**
-     * Unschedules and returns, without executing, the next task
-     * queued by the current thread but not yet executed.  This method
-     * is designed primarily to support extensions, and is unlikely to
-     * be useful otherwise.
-     *
-     * <p>This method may be invoked only from within {@code
-     * ForkJoinPool} computations (as may be determined using method
-     * {@link #inForkJoinPool}).  Attempts to invoke in other contexts
-     * result in exceptions or errors, possibly including {@code
-     * ClassCastException}.
-     *
-     * @return the next task, or {@code null} if none are available
-     */
-    protected static ForkJoinTask<?> pollNextLocalTask() {
-        return ((ForkJoinWorkerThread) Thread.currentThread())
-            .pollLocalTask();
-    }
-
-    /**
-     * Unschedules and returns, without executing, the next task
-     * queued by the current thread but not yet executed, if one is
-     * available, or if not available, a task that was forked by some
-     * other thread, if available. Availability may be transient, so a
-     * {@code null} result does not necessarily imply quiescence
-     * of the pool this task is operating in.  This method is designed
-     * primarily to support extensions, and is unlikely to be useful
-     * otherwise.
-     *
-     * <p>This method may be invoked only from within {@code
-     * ForkJoinPool} computations (as may be determined using method
-     * {@link #inForkJoinPool}).  Attempts to invoke in other contexts
-     * result in exceptions or errors, possibly including {@code
-     * ClassCastException}.
-     *
-     * @return a task, or {@code null} if none are available
-     */
-    protected static ForkJoinTask<?> pollTask() {
-        return ((ForkJoinWorkerThread) Thread.currentThread())
-            .pollTask();
-    }
-
-    /**
-     * Adaptor for Runnables. This implements RunnableFuture
-     * to be compliant with AbstractExecutorService constraints
-     * when used in ForkJoinPool.
-     */
-    static final class AdaptedRunnable<T> extends ForkJoinTask<T>
-        implements RunnableFuture<T> {
-        final Runnable runnable;
-        final T resultOnCompletion;
-        T result;
-        AdaptedRunnable(Runnable runnable, T result) {
-            if (runnable == null) throw new NullPointerException();
-            this.runnable = runnable;
-            this.resultOnCompletion = result;
-        }
-        public T getRawResult() { return result; }
-        public void setRawResult(T v) { result = v; }
-        public boolean exec() {
-            runnable.run();
-            result = resultOnCompletion;
-            return true;
-        }
-        public void run() { invoke(); }
-        private static final long serialVersionUID = 5232453952276885070L;
-    }
-
-    /**
-     * Adaptor for Callables
-     */
-    static final class AdaptedCallable<T> extends ForkJoinTask<T>
-        implements RunnableFuture<T> {
-        final Callable<? extends T> callable;
-        T result;
-        AdaptedCallable(Callable<? extends T> callable) {
-            if (callable == null) throw new NullPointerException();
-            this.callable = callable;
-        }
-        public T getRawResult() { return result; }
-        public void setRawResult(T v) { result = v; }
-        public boolean exec() {
-            try {
-                result = callable.call();
-                return true;
-            } catch (Error err) {
-                throw err;
-            } catch (RuntimeException rex) {
-                throw rex;
-            } catch (Exception ex) {
-                throw new RuntimeException(ex);
-            }
-        }
-        public void run() { invoke(); }
-        private static final long serialVersionUID = 2838392045355241008L;
-    }
-
-    /**
-     * Returns a new {@code ForkJoinTask} that performs the {@code run}
-     * method of the given {@code Runnable} as its action, and returns
-     * a null result upon {@link #join}.
-     *
-     * @param runnable the runnable action
-     * @return the task
-     */
-    public static ForkJoinTask<?> adapt(Runnable runnable) {
-        return new AdaptedRunnable<Void>(runnable, null);
-    }
-
-    /**
-     * Returns a new {@code ForkJoinTask} that performs the {@code run}
-     * method of the given {@code Runnable} as its action, and returns
-     * the given result upon {@link #join}.
-     *
-     * @param runnable the runnable action
-     * @param result the result upon completion
-     * @return the task
-     */
-    public static <T> ForkJoinTask<T> adapt(Runnable runnable, T result) {
-        return new AdaptedRunnable<T>(runnable, result);
-    }
-
-    /**
-     * Returns a new {@code ForkJoinTask} that performs the {@code call}
-     * method of the given {@code Callable} as its action, and returns
-     * its result upon {@link #join}, translating any checked exceptions
-     * encountered into {@code RuntimeException}.
-     *
-     * @param callable the callable action
-     * @return the task
-     */
-    public static <T> ForkJoinTask<T> adapt(Callable<? extends T> callable) {
-        return new AdaptedCallable<T>(callable);
-    }
-
-    // Serialization support
-
-    private static final long serialVersionUID = -7721805057305804111L;
-
-    /**
-     * Saves the state to a stream (that is, serializes it).
-     *
-     * @serialData the current run status and the exception thrown
-     * during execution, or {@code null} if none
-     * @param s the stream
-     */
-    private void writeObject(java.io.ObjectOutputStream s)
-        throws java.io.IOException {
-        s.defaultWriteObject();
-        s.writeObject(getException());
-    }
-
-    /**
-     * Reconstitutes the instance from a stream (that is, deserializes it).
-     *
-     * @param s the stream
-     */
-    private void readObject(java.io.ObjectInputStream s)
-        throws java.io.IOException, ClassNotFoundException {
-        s.defaultReadObject();
-        Object ex = s.readObject();
-        if (ex != null)
-            setExceptionalCompletion((Throwable)ex);
-    }
-
-    // Unsafe mechanics
-    private static final sun.misc.Unsafe UNSAFE;
-    private static final long statusOffset;
-    static {
-        exceptionTableLock = new ReentrantLock();
-        exceptionTableRefQueue = new ReferenceQueue<Object>();
-        exceptionTable = new ExceptionNode[EXCEPTION_MAP_CAPACITY];
-        try {
-            UNSAFE = sun.misc.Unsafe.getUnsafe();
-            statusOffset = UNSAFE.objectFieldOffset
-                (ForkJoinTask.class.getDeclaredField("status"));
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ForkJoinWorkerThread.java b/ojluni/src/main/java/java/util/concurrent/ForkJoinWorkerThread.java
deleted file mode 100755
index 3504abb..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ForkJoinWorkerThread.java
+++ /dev/null
@@ -1,998 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-import java.util.Collection;
-import java.util.concurrent.RejectedExecutionException;
-
-/**
- * A thread managed by a {@link ForkJoinPool}, which executes
- * {@link ForkJoinTask}s.
- * This class is subclassable solely for the sake of adding
- * functionality -- there are no overridable methods dealing with
- * scheduling or execution.  However, you can override initialization
- * and termination methods surrounding the main task processing loop.
- * If you do create such a subclass, you will also need to supply a
- * custom {@link ForkJoinPool.ForkJoinWorkerThreadFactory} to use it
- * in a {@code ForkJoinPool}.
- *
- * @since 1.7
- * @author Doug Lea
- */
-public class ForkJoinWorkerThread extends Thread {
-    /*
-     * Overview:
-     *
-     * ForkJoinWorkerThreads are managed by ForkJoinPools and perform
-     * ForkJoinTasks. This class includes bookkeeping in support of
-     * worker activation, suspension, and lifecycle control described
-     * in more detail in the internal documentation of class
-     * ForkJoinPool. And as described further below, this class also
-     * includes special-cased support for some ForkJoinTask
-     * methods. But the main mechanics involve work-stealing:
-     *
-     * Work-stealing queues are special forms of Deques that support
-     * only three of the four possible end-operations -- push, pop,
-     * and deq (aka steal), under the further constraints that push
-     * and pop are called only from the owning thread, while deq may
-     * be called from other threads.  (If you are unfamiliar with
-     * them, you probably want to read Herlihy and Shavit's book "The
-     * Art of Multiprocessor programming", chapter 16 describing these
-     * in more detail before proceeding.)  The main work-stealing
-     * queue design is roughly similar to those in the papers "Dynamic
-     * Circular Work-Stealing Deque" by Chase and Lev, SPAA 2005
-     * (http://research.sun.com/scalable/pubs/index.html) and
-     * "Idempotent work stealing" by Michael, Saraswat, and Vechev,
-     * PPoPP 2009 (http://portal.acm.org/citation.cfm?id=1504186).
-     * The main differences ultimately stem from gc requirements that
-     * we null out taken slots as soon as we can, to maintain as small
-     * a footprint as possible even in programs generating huge
-     * numbers of tasks. To accomplish this, we shift the CAS
-     * arbitrating pop vs deq (steal) from being on the indices
-     * ("queueBase" and "queueTop") to the slots themselves (mainly
-     * via method "casSlotNull()"). So, both a successful pop and deq
-     * mainly entail a CAS of a slot from non-null to null.  Because
-     * we rely on CASes of references, we do not need tag bits on
-     * queueBase or queueTop.  They are simple ints as used in any
-     * circular array-based queue (see for example ArrayDeque).
-     * Updates to the indices must still be ordered in a way that
-     * guarantees that queueTop == queueBase means the queue is empty,
-     * but otherwise may err on the side of possibly making the queue
-     * appear nonempty when a push, pop, or deq have not fully
-     * committed. Note that this means that the deq operation,
-     * considered individually, is not wait-free. One thief cannot
-     * successfully continue until another in-progress one (or, if
-     * previously empty, a push) completes.  However, in the
-     * aggregate, we ensure at least probabilistic non-blockingness.
-     * If an attempted steal fails, a thief always chooses a different
-     * random victim target to try next. So, in order for one thief to
-     * progress, it suffices for any in-progress deq or new push on
-     * any empty queue to complete.
-     *
-     * This approach also enables support for "async mode" where local
-     * task processing is in FIFO, not LIFO order; simply by using a
-     * version of deq rather than pop when locallyFifo is true (as set
-     * by the ForkJoinPool).  This allows use in message-passing
-     * frameworks in which tasks are never joined.  However neither
-     * mode considers affinities, loads, cache localities, etc, so
-     * rarely provide the best possible performance on a given
-     * machine, but portably provide good throughput by averaging over
-     * these factors.  (Further, even if we did try to use such
-     * information, we do not usually have a basis for exploiting
-     * it. For example, some sets of tasks profit from cache
-     * affinities, but others are harmed by cache pollution effects.)
-     *
-     * When a worker would otherwise be blocked waiting to join a
-     * task, it first tries a form of linear helping: Each worker
-     * records (in field currentSteal) the most recent task it stole
-     * from some other worker. Plus, it records (in field currentJoin)
-     * the task it is currently actively joining. Method joinTask uses
-     * these markers to try to find a worker to help (i.e., steal back
-     * a task from and execute it) that could hasten completion of the
-     * actively joined task. In essence, the joiner executes a task
-     * that would be on its own local deque had the to-be-joined task
-     * not been stolen. This may be seen as a conservative variant of
-     * the approach in Wagner & Calder "Leapfrogging: a portable
-     * technique for implementing efficient futures" SIGPLAN Notices,
-     * 1993 (http://portal.acm.org/citation.cfm?id=155354). It differs
-     * in that: (1) We only maintain dependency links across workers
-     * upon steals, rather than use per-task bookkeeping.  This may
-     * require a linear scan of workers array to locate stealers, but
-     * usually doesn't because stealers leave hints (that may become
-     * stale/wrong) of where to locate them. This isolates cost to
-     * when it is needed, rather than adding to per-task overhead.
-     * (2) It is "shallow", ignoring nesting and potentially cyclic
-     * mutual steals.  (3) It is intentionally racy: field currentJoin
-     * is updated only while actively joining, which means that we
-     * miss links in the chain during long-lived tasks, GC stalls etc
-     * (which is OK since blocking in such cases is usually a good
-     * idea).  (4) We bound the number of attempts to find work (see
-     * MAX_HELP) and fall back to suspending the worker and if
-     * necessary replacing it with another.
-     *
-     * Efficient implementation of these algorithms currently relies
-     * on an uncomfortable amount of "Unsafe" mechanics. To maintain
-     * correct orderings, reads and writes of variable queueBase
-     * require volatile ordering.  Variable queueTop need not be
-     * volatile because non-local reads always follow those of
-     * queueBase.  Similarly, because they are protected by volatile
-     * queueBase reads, reads of the queue array and its slots by
-     * other threads do not need volatile load semantics, but writes
-     * (in push) require store order and CASes (in pop and deq)
-     * require (volatile) CAS semantics.  (Michael, Saraswat, and
-     * Vechev's algorithm has similar properties, but without support
-     * for nulling slots.)  Since these combinations aren't supported
-     * using ordinary volatiles, the only way to accomplish these
-     * efficiently is to use direct Unsafe calls. (Using external
-     * AtomicIntegers and AtomicReferenceArrays for the indices and
-     * array is significantly slower because of memory locality and
-     * indirection effects.)
-     *
-     * Further, performance on most platforms is very sensitive to
-     * placement and sizing of the (resizable) queue array.  Even
-     * though these queues don't usually become all that big, the
-     * initial size must be large enough to counteract cache
-     * contention effects across multiple queues (especially in the
-     * presence of GC cardmarking). Also, to improve thread-locality,
-     * queues are initialized after starting.
-     */
-
-    /**
-     * Mask for pool indices encoded as shorts
-     */
-    private static final int  SMASK  = 0xffff;
-
-    /**
-     * Capacity of work-stealing queue array upon initialization.
-     * Must be a power of two. Initial size must be at least 4, but is
-     * padded to minimize cache effects.
-     */
-    private static final int INITIAL_QUEUE_CAPACITY = 1 << 13;
-
-    /**
-     * Maximum size for queue array. Must be a power of two
-     * less than or equal to 1 << (31 - width of array entry) to
-     * ensure lack of index wraparound, but is capped at a lower
-     * value to help users trap runaway computations.
-     */
-    private static final int MAXIMUM_QUEUE_CAPACITY = 1 << 24; // 16M
-
-    /**
-     * The work-stealing queue array. Size must be a power of two.
-     * Initialized when started (as oposed to when constructed), to
-     * improve memory locality.
-     */
-    ForkJoinTask<?>[] queue;
-
-    /**
-     * The pool this thread works in. Accessed directly by ForkJoinTask.
-     */
-    final ForkJoinPool pool;
-
-    /**
-     * Index (mod queue.length) of next queue slot to push to or pop
-     * from. It is written only by owner thread, and accessed by other
-     * threads only after reading (volatile) queueBase.  Both queueTop
-     * and queueBase are allowed to wrap around on overflow, but
-     * (queueTop - queueBase) still estimates size.
-     */
-    int queueTop;
-
-    /**
-     * Index (mod queue.length) of least valid queue slot, which is
-     * always the next position to steal from if nonempty.
-     */
-    volatile int queueBase;
-
-    /**
-     * The index of most recent stealer, used as a hint to avoid
-     * traversal in method helpJoinTask. This is only a hint because a
-     * worker might have had multiple steals and this only holds one
-     * of them (usually the most current). Declared non-volatile,
-     * relying on other prevailing sync to keep reasonably current.
-     */
-    int stealHint;
-
-    /**
-     * Index of this worker in pool array. Set once by pool before
-     * running, and accessed directly by pool to locate this worker in
-     * its workers array.
-     */
-    final int poolIndex;
-
-    /**
-     * Encoded record for pool task waits. Usages are always
-     * surrounded by volatile reads/writes
-     */
-    int nextWait;
-
-    /**
-     * Complement of poolIndex, offset by count of entries of task
-     * waits. Accessed by ForkJoinPool to manage event waiters.
-     */
-    volatile int eventCount;
-
-    /**
-     * Seed for random number generator for choosing steal victims.
-     * Uses Marsaglia xorshift. Must be initialized as nonzero.
-     */
-    int seed;
-
-    /**
-     * Number of steals. Directly accessed (and reset) by pool when
-     * idle.
-     */
-    int stealCount;
-
-    /**
-     * True if this worker should or did terminate
-     */
-    volatile boolean terminate;
-
-    /**
-     * Set to true before LockSupport.park; false on return
-     */
-    volatile boolean parked;
-
-    /**
-     * True if use local fifo, not default lifo, for local polling.
-     * Shadows value from ForkJoinPool.
-     */
-    final boolean locallyFifo;
-
-    /**
-     * The task most recently stolen from another worker (or
-     * submission queue).  All uses are surrounded by enough volatile
-     * reads/writes to maintain as non-volatile.
-     */
-    ForkJoinTask<?> currentSteal;
-
-    /**
-     * The task currently being joined, set only when actively trying
-     * to help other stealers in helpJoinTask. All uses are surrounded
-     * by enough volatile reads/writes to maintain as non-volatile.
-     */
-    ForkJoinTask<?> currentJoin;
-
-    /**
-     * Creates a ForkJoinWorkerThread operating in the given pool.
-     *
-     * @param pool the pool this thread works in
-     * @throws NullPointerException if pool is null
-     */
-    protected ForkJoinWorkerThread(ForkJoinPool pool) {
-        super(pool.nextWorkerName());
-        this.pool = pool;
-        int k = pool.registerWorker(this);
-        poolIndex = k;
-        eventCount = ~k & SMASK; // clear wait count
-        locallyFifo = pool.locallyFifo;
-        Thread.UncaughtExceptionHandler ueh = pool.ueh;
-        if (ueh != null)
-            setUncaughtExceptionHandler(ueh);
-        setDaemon(true);
-    }
-
-    // Public methods
-
-    /**
-     * Returns the pool hosting this thread.
-     *
-     * @return the pool
-     */
-    public ForkJoinPool getPool() {
-        return pool;
-    }
-
-    /**
-     * Returns the index number of this thread in its pool.  The
-     * returned value ranges from zero to the maximum number of
-     * threads (minus one) that have ever been created in the pool.
-     * This method may be useful for applications that track status or
-     * collect results per-worker rather than per-task.
-     *
-     * @return the index number
-     */
-    public int getPoolIndex() {
-        return poolIndex;
-    }
-
-    // Randomization
-
-    /**
-     * Computes next value for random victim probes and backoffs.
-     * Scans don't require a very high quality generator, but also not
-     * a crummy one.  Marsaglia xor-shift is cheap and works well
-     * enough.  Note: This is manually inlined in FJP.scan() to avoid
-     * writes inside busy loops.
-     */
-    private int nextSeed() {
-        int r = seed;
-        r ^= r << 13;
-        r ^= r >>> 17;
-        r ^= r << 5;
-        return seed = r;
-    }
-
-    // Run State management
-
-    /**
-     * Initializes internal state after construction but before
-     * processing any tasks. If you override this method, you must
-     * invoke {@code super.onStart()} at the beginning of the method.
-     * Initialization requires care: Most fields must have legal
-     * default values, to ensure that attempted accesses from other
-     * threads work correctly even before this thread starts
-     * processing tasks.
-     */
-    protected void onStart() {
-        queue = new ForkJoinTask<?>[INITIAL_QUEUE_CAPACITY];
-        int r = pool.workerSeedGenerator.nextInt();
-        seed = (r == 0) ? 1 : r; //  must be nonzero
-    }
-
-    /**
-     * Performs cleanup associated with termination of this worker
-     * thread.  If you override this method, you must invoke
-     * {@code super.onTermination} at the end of the overridden method.
-     *
-     * @param exception the exception causing this thread to abort due
-     * to an unrecoverable error, or {@code null} if completed normally
-     */
-    protected void onTermination(Throwable exception) {
-        try {
-            terminate = true;
-            cancelTasks();
-            pool.deregisterWorker(this, exception);
-        } catch (Throwable ex) {        // Shouldn't ever happen
-            if (exception == null)      // but if so, at least rethrown
-                exception = ex;
-        } finally {
-            if (exception != null)
-                UNSAFE.throwException(exception);
-        }
-    }
-
-    /**
-     * This method is required to be public, but should never be
-     * called explicitly. It performs the main run loop to execute
-     * {@link ForkJoinTask}s.
-     */
-    public void run() {
-        Throwable exception = null;
-        try {
-            onStart();
-            pool.work(this);
-        } catch (Throwable ex) {
-            exception = ex;
-        } finally {
-            onTermination(exception);
-        }
-    }
-
-    /*
-     * Intrinsics-based atomic writes for queue slots. These are
-     * basically the same as methods in AtomicReferenceArray, but
-     * specialized for (1) ForkJoinTask elements (2) requirement that
-     * nullness and bounds checks have already been performed by
-     * callers and (3) effective offsets are known not to overflow
-     * from int to long (because of MAXIMUM_QUEUE_CAPACITY). We don't
-     * need corresponding version for reads: plain array reads are OK
-     * because they are protected by other volatile reads and are
-     * confirmed by CASes.
-     *
-     * Most uses don't actually call these methods, but instead
-     * contain inlined forms that enable more predictable
-     * optimization.  We don't define the version of write used in
-     * pushTask at all, but instead inline there a store-fenced array
-     * slot write.
-     *
-     * Also in most methods, as a performance (not correctness) issue,
-     * we'd like to encourage compilers not to arbitrarily postpone
-     * setting queueTop after writing slot.  Currently there is no
-     * intrinsic for arranging this, but using Unsafe putOrderedInt
-     * may be a preferable strategy on some compilers even though its
-     * main effect is a pre-, not post- fence. To simplify possible
-     * changes, the option is left in comments next to the associated
-     * assignments.
-     */
-
-    /**
-     * CASes slot i of array q from t to null. Caller must ensure q is
-     * non-null and index is in range.
-     */
-    private static final boolean casSlotNull(ForkJoinTask<?>[] q, int i,
-                                             ForkJoinTask<?> t) {
-        return UNSAFE.compareAndSwapObject(q, (i << ASHIFT) + ABASE, t, null);
-    }
-
-    /**
-     * Performs a volatile write of the given task at given slot of
-     * array q.  Caller must ensure q is non-null and index is in
-     * range. This method is used only during resets and backouts.
-     */
-    private static final void writeSlot(ForkJoinTask<?>[] q, int i,
-                                        ForkJoinTask<?> t) {
-        UNSAFE.putObjectVolatile(q, (i << ASHIFT) + ABASE, t);
-    }
-
-    // queue methods
-
-    /**
-     * Pushes a task. Call only from this thread.
-     *
-     * @param t the task. Caller must ensure non-null.
-     */
-    final void pushTask(ForkJoinTask<?> t) {
-        ForkJoinTask<?>[] q; int s, m;
-        if ((q = queue) != null) {    // ignore if queue removed
-            long u = (((s = queueTop) & (m = q.length - 1)) << ASHIFT) + ABASE;
-            UNSAFE.putOrderedObject(q, u, t);
-            queueTop = s + 1;         // or use putOrderedInt
-            if ((s -= queueBase) <= 2)
-                pool.signalWork();
-            else if (s == m)
-                growQueue();
-        }
-    }
-
-    /**
-     * Creates or doubles queue array.  Transfers elements by
-     * emulating steals (deqs) from old array and placing, oldest
-     * first, into new array.
-     */
-    private void growQueue() {
-        ForkJoinTask<?>[] oldQ = queue;
-        int size = oldQ != null ? oldQ.length << 1 : INITIAL_QUEUE_CAPACITY;
-        if (size > MAXIMUM_QUEUE_CAPACITY)
-            throw new RejectedExecutionException("Queue capacity exceeded");
-        if (size < INITIAL_QUEUE_CAPACITY)
-            size = INITIAL_QUEUE_CAPACITY;
-        ForkJoinTask<?>[] q = queue = new ForkJoinTask<?>[size];
-        int mask = size - 1;
-        int top = queueTop;
-        int oldMask;
-        if (oldQ != null && (oldMask = oldQ.length - 1) >= 0) {
-            for (int b = queueBase; b != top; ++b) {
-                long u = ((b & oldMask) << ASHIFT) + ABASE;
-                Object x = UNSAFE.getObjectVolatile(oldQ, u);
-                if (x != null && UNSAFE.compareAndSwapObject(oldQ, u, x, null))
-                    UNSAFE.putObjectVolatile
-                        (q, ((b & mask) << ASHIFT) + ABASE, x);
-            }
-        }
-    }
-
-    /**
-     * Tries to take a task from the base of the queue, failing if
-     * empty or contended. Note: Specializations of this code appear
-     * in locallyDeqTask and elsewhere.
-     *
-     * @return a task, or null if none or contended
-     */
-    final ForkJoinTask<?> deqTask() {
-        ForkJoinTask<?> t; ForkJoinTask<?>[] q; int b, i;
-        if (queueTop != (b = queueBase) &&
-            (q = queue) != null && // must read q after b
-            (i = (q.length - 1) & b) >= 0 &&
-            (t = q[i]) != null && queueBase == b &&
-            UNSAFE.compareAndSwapObject(q, (i << ASHIFT) + ABASE, t, null)) {
-            queueBase = b + 1;
-            return t;
-        }
-        return null;
-    }
-
-    /**
-     * Tries to take a task from the base of own queue.  Called only
-     * by this thread.
-     *
-     * @return a task, or null if none
-     */
-    final ForkJoinTask<?> locallyDeqTask() {
-        ForkJoinTask<?> t; int m, b, i;
-        ForkJoinTask<?>[] q = queue;
-        if (q != null && (m = q.length - 1) >= 0) {
-            while (queueTop != (b = queueBase)) {
-                if ((t = q[i = m & b]) != null &&
-                    queueBase == b &&
-                    UNSAFE.compareAndSwapObject(q, (i << ASHIFT) + ABASE,
-                                                t, null)) {
-                    queueBase = b + 1;
-                    return t;
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Returns a popped task, or null if empty.
-     * Called only by this thread.
-     */
-    private ForkJoinTask<?> popTask() {
-        int m;
-        ForkJoinTask<?>[] q = queue;
-        if (q != null && (m = q.length - 1) >= 0) {
-            for (int s; (s = queueTop) != queueBase;) {
-                int i = m & --s;
-                long u = (i << ASHIFT) + ABASE; // raw offset
-                ForkJoinTask<?> t = q[i];
-                if (t == null)   // lost to stealer
-                    break;
-                if (UNSAFE.compareAndSwapObject(q, u, t, null)) {
-                    queueTop = s; // or putOrderedInt
-                    return t;
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Specialized version of popTask to pop only if topmost element
-     * is the given task. Called only by this thread.
-     *
-     * @param t the task. Caller must ensure non-null.
-     */
-    final boolean unpushTask(ForkJoinTask<?> t) {
-        ForkJoinTask<?>[] q;
-        int s;
-        if ((q = queue) != null && (s = queueTop) != queueBase &&
-            UNSAFE.compareAndSwapObject
-            (q, (((q.length - 1) & --s) << ASHIFT) + ABASE, t, null)) {
-            queueTop = s; // or putOrderedInt
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Returns next task, or null if empty or contended.
-     */
-    final ForkJoinTask<?> peekTask() {
-        int m;
-        ForkJoinTask<?>[] q = queue;
-        if (q == null || (m = q.length - 1) < 0)
-            return null;
-        int i = locallyFifo ? queueBase : (queueTop - 1);
-        return q[i & m];
-    }
-
-    // Support methods for ForkJoinPool
-
-    /**
-     * Runs the given task, plus any local tasks until queue is empty
-     */
-    final void execTask(ForkJoinTask<?> t) {
-        currentSteal = t;
-        for (;;) {
-            if (t != null)
-                t.doExec();
-            if (queueTop == queueBase)
-                break;
-            t = locallyFifo ? locallyDeqTask() : popTask();
-        }
-        ++stealCount;
-        currentSteal = null;
-    }
-
-    /**
-     * Removes and cancels all tasks in queue.  Can be called from any
-     * thread.
-     */
-    final void cancelTasks() {
-        ForkJoinTask<?> cj = currentJoin; // try to cancel ongoing tasks
-        if (cj != null && cj.status >= 0)
-            cj.cancelIgnoringExceptions();
-        ForkJoinTask<?> cs = currentSteal;
-        if (cs != null && cs.status >= 0)
-            cs.cancelIgnoringExceptions();
-        while (queueBase != queueTop) {
-            ForkJoinTask<?> t = deqTask();
-            if (t != null)
-                t.cancelIgnoringExceptions();
-        }
-    }
-
-    /**
-     * Drains tasks to given collection c.
-     *
-     * @return the number of tasks drained
-     */
-    final int drainTasksTo(Collection<? super ForkJoinTask<?>> c) {
-        int n = 0;
-        while (queueBase != queueTop) {
-            ForkJoinTask<?> t = deqTask();
-            if (t != null) {
-                c.add(t);
-                ++n;
-            }
-        }
-        return n;
-    }
-
-    // Support methods for ForkJoinTask
-
-    /**
-     * Returns an estimate of the number of tasks in the queue.
-     */
-    final int getQueueSize() {
-        return queueTop - queueBase;
-    }
-
-    /**
-     * Gets and removes a local task.
-     *
-     * @return a task, if available
-     */
-    final ForkJoinTask<?> pollLocalTask() {
-        return locallyFifo ? locallyDeqTask() : popTask();
-    }
-
-    /**
-     * Gets and removes a local or stolen task.
-     *
-     * @return a task, if available
-     */
-    final ForkJoinTask<?> pollTask() {
-        ForkJoinWorkerThread[] ws;
-        ForkJoinTask<?> t = pollLocalTask();
-        if (t != null || (ws = pool.workers) == null)
-            return t;
-        int n = ws.length; // cheap version of FJP.scan
-        int steps = n << 1;
-        int r = nextSeed();
-        int i = 0;
-        while (i < steps) {
-            ForkJoinWorkerThread w = ws[(i++ + r) & (n - 1)];
-            if (w != null && w.queueBase != w.queueTop && w.queue != null) {
-                if ((t = w.deqTask()) != null)
-                    return t;
-                i = 0;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * The maximum stolen->joining link depth allowed in helpJoinTask,
-     * as well as the maximum number of retries (allowing on average
-     * one staleness retry per level) per attempt to instead try
-     * compensation.  Depths for legitimate chains are unbounded, but
-     * we use a fixed constant to avoid (otherwise unchecked) cycles
-     * and bound staleness of traversal parameters at the expense of
-     * sometimes blocking when we could be helping.
-     */
-    private static final int MAX_HELP = 16;
-
-    /**
-     * Possibly runs some tasks and/or blocks, until joinMe is done.
-     *
-     * @param joinMe the task to join
-     * @return completion status on exit
-     */
-    final int joinTask(ForkJoinTask<?> joinMe) {
-        ForkJoinTask<?> prevJoin = currentJoin;
-        currentJoin = joinMe;
-        for (int s, retries = MAX_HELP;;) {
-            if ((s = joinMe.status) < 0) {
-                currentJoin = prevJoin;
-                return s;
-            }
-            if (retries > 0) {
-                if (queueTop != queueBase) {
-                    if (!localHelpJoinTask(joinMe))
-                        retries = 0;           // cannot help
-                }
-                else if (retries == MAX_HELP >>> 1) {
-                    --retries;                 // check uncommon case
-                    if (tryDeqAndExec(joinMe) >= 0)
-                        Thread.yield();        // for politeness
-                }
-                else
-                    retries = helpJoinTask(joinMe) ? MAX_HELP : retries - 1;
-            }
-            else {
-                retries = MAX_HELP;           // restart if not done
-                pool.tryAwaitJoin(joinMe);
-            }
-        }
-    }
-
-    /**
-     * If present, pops and executes the given task, or any other
-     * cancelled task
-     *
-     * @return false if any other non-cancelled task exists in local queue
-     */
-    private boolean localHelpJoinTask(ForkJoinTask<?> joinMe) {
-        int s, i; ForkJoinTask<?>[] q; ForkJoinTask<?> t;
-        if ((s = queueTop) != queueBase && (q = queue) != null &&
-            (i = (q.length - 1) & --s) >= 0 &&
-            (t = q[i]) != null) {
-            if (t != joinMe && t.status >= 0)
-                return false;
-            if (UNSAFE.compareAndSwapObject
-                (q, (i << ASHIFT) + ABASE, t, null)) {
-                queueTop = s;           // or putOrderedInt
-                t.doExec();
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Tries to locate and execute tasks for a stealer of the given
-     * task, or in turn one of its stealers, Traces
-     * currentSteal->currentJoin links looking for a thread working on
-     * a descendant of the given task and with a non-empty queue to
-     * steal back and execute tasks from.  The implementation is very
-     * branchy to cope with potential inconsistencies or loops
-     * encountering chains that are stale, unknown, or of length
-     * greater than MAX_HELP links.  All of these cases are dealt with
-     * by just retrying by caller.
-     *
-     * @param joinMe the task to join
-     * @param canSteal true if local queue is empty
-     * @return true if ran a task
-     */
-    private boolean helpJoinTask(ForkJoinTask<?> joinMe) {
-        boolean helped = false;
-        int m = pool.scanGuard & SMASK;
-        ForkJoinWorkerThread[] ws = pool.workers;
-        if (ws != null && ws.length > m && joinMe.status >= 0) {
-            int levels = MAX_HELP;              // remaining chain length
-            ForkJoinTask<?> task = joinMe;      // base of chain
-            outer:for (ForkJoinWorkerThread thread = this;;) {
-                // Try to find v, the stealer of task, by first using hint
-                ForkJoinWorkerThread v = ws[thread.stealHint & m];
-                if (v == null || v.currentSteal != task) {
-                    for (int j = 0; ;) {        // search array
-                        if ((v = ws[j]) != null && v.currentSteal == task) {
-                            thread.stealHint = j;
-                            break;              // save hint for next time
-                        }
-                        if (++j > m)
-                            break outer;        // can't find stealer
-                    }
-                }
-                // Try to help v, using specialized form of deqTask
-                for (;;) {
-                    ForkJoinTask<?>[] q; int b, i;
-                    if (joinMe.status < 0)
-                        break outer;
-                    if ((b = v.queueBase) == v.queueTop ||
-                        (q = v.queue) == null ||
-                        (i = (q.length-1) & b) < 0)
-                        break;                  // empty
-                    long u = (i << ASHIFT) + ABASE;
-                    ForkJoinTask<?> t = q[i];
-                    if (task.status < 0)
-                        break outer;            // stale
-                    if (t != null && v.queueBase == b &&
-                        UNSAFE.compareAndSwapObject(q, u, t, null)) {
-                        v.queueBase = b + 1;
-                        v.stealHint = poolIndex;
-                        ForkJoinTask<?> ps = currentSteal;
-                        currentSteal = t;
-                        t.doExec();
-                        currentSteal = ps;
-                        helped = true;
-                    }
-                }
-                // Try to descend to find v's stealer
-                ForkJoinTask<?> next = v.currentJoin;
-                if (--levels > 0 && task.status >= 0 &&
-                    next != null && next != task) {
-                    task = next;
-                    thread = v;
-                }
-                else
-                    break;  // max levels, stale, dead-end, or cyclic
-            }
-        }
-        return helped;
-    }
-
-    /**
-     * Performs an uncommon case for joinTask: If task t is at base of
-     * some workers queue, steals and executes it.
-     *
-     * @param t the task
-     * @return t's status
-     */
-    private int tryDeqAndExec(ForkJoinTask<?> t) {
-        int m = pool.scanGuard & SMASK;
-        ForkJoinWorkerThread[] ws = pool.workers;
-        if (ws != null && ws.length > m && t.status >= 0) {
-            for (int j = 0; j <= m; ++j) {
-                ForkJoinTask<?>[] q; int b, i;
-                ForkJoinWorkerThread v = ws[j];
-                if (v != null &&
-                    (b = v.queueBase) != v.queueTop &&
-                    (q = v.queue) != null &&
-                    (i = (q.length - 1) & b) >= 0 &&
-                    q[i] ==  t) {
-                    long u = (i << ASHIFT) + ABASE;
-                    if (v.queueBase == b &&
-                        UNSAFE.compareAndSwapObject(q, u, t, null)) {
-                        v.queueBase = b + 1;
-                        v.stealHint = poolIndex;
-                        ForkJoinTask<?> ps = currentSteal;
-                        currentSteal = t;
-                        t.doExec();
-                        currentSteal = ps;
-                    }
-                    break;
-                }
-            }
-        }
-        return t.status;
-    }
-
-    /**
-     * Implements ForkJoinTask.getSurplusQueuedTaskCount().  Returns
-     * an estimate of the number of tasks, offset by a function of
-     * number of idle workers.
-     *
-     * This method provides a cheap heuristic guide for task
-     * partitioning when programmers, frameworks, tools, or languages
-     * have little or no idea about task granularity.  In essence by
-     * offering this method, we ask users only about tradeoffs in
-     * overhead vs expected throughput and its variance, rather than
-     * how finely to partition tasks.
-     *
-     * In a steady state strict (tree-structured) computation, each
-     * thread makes available for stealing enough tasks for other
-     * threads to remain active. Inductively, if all threads play by
-     * the same rules, each thread should make available only a
-     * constant number of tasks.
-     *
-     * The minimum useful constant is just 1. But using a value of 1
-     * would require immediate replenishment upon each steal to
-     * maintain enough tasks, which is infeasible.  Further,
-     * partitionings/granularities of offered tasks should minimize
-     * steal rates, which in general means that threads nearer the top
-     * of computation tree should generate more than those nearer the
-     * bottom. In perfect steady state, each thread is at
-     * approximately the same level of computation tree. However,
-     * producing extra tasks amortizes the uncertainty of progress and
-     * diffusion assumptions.
-     *
-     * So, users will want to use values larger, but not much larger
-     * than 1 to both smooth over transient shortages and hedge
-     * against uneven progress; as traded off against the cost of
-     * extra task overhead. We leave the user to pick a threshold
-     * value to compare with the results of this call to guide
-     * decisions, but recommend values such as 3.
-     *
-     * When all threads are active, it is on average OK to estimate
-     * surplus strictly locally. In steady-state, if one thread is
-     * maintaining say 2 surplus tasks, then so are others. So we can
-     * just use estimated queue length (although note that (queueTop -
-     * queueBase) can be an overestimate because of stealers lagging
-     * increments of queueBase).  However, this strategy alone leads
-     * to serious mis-estimates in some non-steady-state conditions
-     * (ramp-up, ramp-down, other stalls). We can detect many of these
-     * by further considering the number of "idle" threads, that are
-     * known to have zero queued tasks, so compensate by a factor of
-     * (#idle/#active) threads.
-     */
-    final int getEstimatedSurplusTaskCount() {
-        return queueTop - queueBase - pool.idlePerActive();
-    }
-
-    /**
-     * Runs tasks until {@code pool.isQuiescent()}. We piggyback on
-     * pool's active count ctl maintenance, but rather than blocking
-     * when tasks cannot be found, we rescan until all others cannot
-     * find tasks either. The bracketing by pool quiescerCounts
-     * updates suppresses pool auto-shutdown mechanics that could
-     * otherwise prematurely terminate the pool because all threads
-     * appear to be inactive.
-     */
-    final void helpQuiescePool() {
-        boolean active = true;
-        ForkJoinTask<?> ps = currentSteal; // to restore below
-        ForkJoinPool p = pool;
-        p.addQuiescerCount(1);
-        for (;;) {
-            ForkJoinWorkerThread[] ws = p.workers;
-            ForkJoinWorkerThread v = null;
-            int n;
-            if (queueTop != queueBase)
-                v = this;
-            else if (ws != null && (n = ws.length) > 1) {
-                ForkJoinWorkerThread w;
-                int r = nextSeed(); // cheap version of FJP.scan
-                int steps = n << 1;
-                for (int i = 0; i < steps; ++i) {
-                    if ((w = ws[(i + r) & (n - 1)]) != null &&
-                        w.queueBase != w.queueTop) {
-                        v = w;
-                        break;
-                    }
-                }
-            }
-            if (v != null) {
-                ForkJoinTask<?> t;
-                if (!active) {
-                    active = true;
-                    p.addActiveCount(1);
-                }
-                if ((t = (v != this) ? v.deqTask() :
-                     locallyFifo ? locallyDeqTask() : popTask()) != null) {
-                    currentSteal = t;
-                    t.doExec();
-                    currentSteal = ps;
-                }
-            }
-            else {
-                if (active) {
-                    active = false;
-                    p.addActiveCount(-1);
-                }
-                if (p.isQuiescent()) {
-                    p.addActiveCount(1);
-                    p.addQuiescerCount(-1);
-                    break;
-                }
-            }
-        }
-    }
-
-    // Unsafe mechanics
-    private static final sun.misc.Unsafe UNSAFE;
-    private static final long ABASE;
-    private static final int ASHIFT;
-
-    static {
-        int s;
-        try {
-            UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class a = ForkJoinTask[].class;
-            ABASE = UNSAFE.arrayBaseOffset(a);
-            s = UNSAFE.arrayIndexScale(a);
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-        if ((s & (s-1)) != 0)
-            throw new Error("data type scale not a power of two");
-        ASHIFT = 31 - Integer.numberOfLeadingZeros(s);
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/Future.java b/ojluni/src/main/java/java/util/concurrent/Future.java
deleted file mode 100755
index 2aab18e..0000000
--- a/ojluni/src/main/java/java/util/concurrent/Future.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * A <tt>Future</tt> represents the result of an asynchronous
- * computation.  Methods are provided to check if the computation is
- * complete, to wait for its completion, and to retrieve the result of
- * the computation.  The result can only be retrieved using method
- * <tt>get</tt> when the computation has completed, blocking if
- * necessary until it is ready.  Cancellation is performed by the
- * <tt>cancel</tt> method.  Additional methods are provided to
- * determine if the task completed normally or was cancelled. Once a
- * computation has completed, the computation cannot be cancelled.
- * If you would like to use a <tt>Future</tt> for the sake
- * of cancellability but not provide a usable result, you can
- * declare types of the form {@code Future<?>} and
- * return <tt>null</tt> as a result of the underlying task.
- *
- * <p>
- * <b>Sample Usage</b> (Note that the following classes are all
- * made-up.) <p>
- *  <pre> {@code
- * interface ArchiveSearcher { String search(String target); }
- * class App {
- *   ExecutorService executor = ...
- *   ArchiveSearcher searcher = ...
- *   void showSearch(final String target)
- *       throws InterruptedException {
- *     Future<String> future
- *       = executor.submit(new Callable<String>() {
- *         public String call() {
- *             return searcher.search(target);
- *         }});
- *     displayOtherThings(); // do other things while searching
- *     try {
- *       displayText(future.get()); // use future
- *     } catch (ExecutionException ex) { cleanup(); return; }
- *   }
- * }}</pre>
- *
- * The {@link FutureTask} class is an implementation of <tt>Future</tt> that
- * implements <tt>Runnable</tt>, and so may be executed by an <tt>Executor</tt>.
- * For example, the above construction with <tt>submit</tt> could be replaced by:
- *  <pre> {@code
- *     FutureTask<String> future =
- *       new FutureTask<String>(new Callable<String>() {
- *         public String call() {
- *           return searcher.search(target);
- *       }});
- *     executor.execute(future);}</pre>
- *
- * <p>Memory consistency effects: Actions taken by the asynchronous computation
- * <a href="package-summary.html#MemoryVisibility"> <i>happen-before</i></a>
- * actions following the corresponding {@code Future.get()} in another thread.
- *
- * @see FutureTask
- * @see Executor
- * @since 1.5
- * @author Doug Lea
- * @param <V> The result type returned by this Future's <tt>get</tt> method
- */
-public interface Future<V> {
-
-    /**
-     * Attempts to cancel execution of this task.  This attempt will
-     * fail if the task has already completed, has already been cancelled,
-     * or could not be cancelled for some other reason. If successful,
-     * and this task has not started when <tt>cancel</tt> is called,
-     * this task should never run.  If the task has already started,
-     * then the <tt>mayInterruptIfRunning</tt> parameter determines
-     * whether the thread executing this task should be interrupted in
-     * an attempt to stop the task.
-     *
-     * <p>After this method returns, subsequent calls to {@link #isDone} will
-     * always return <tt>true</tt>.  Subsequent calls to {@link #isCancelled}
-     * will always return <tt>true</tt> if this method returned <tt>true</tt>.
-     *
-     * @param mayInterruptIfRunning <tt>true</tt> if the thread executing this
-     * task should be interrupted; otherwise, in-progress tasks are allowed
-     * to complete
-     * @return <tt>false</tt> if the task could not be cancelled,
-     * typically because it has already completed normally;
-     * <tt>true</tt> otherwise
-     */
-    boolean cancel(boolean mayInterruptIfRunning);
-
-    /**
-     * Returns <tt>true</tt> if this task was cancelled before it completed
-     * normally.
-     *
-     * @return <tt>true</tt> if this task was cancelled before it completed
-     */
-    boolean isCancelled();
-
-    /**
-     * Returns <tt>true</tt> if this task completed.
-     *
-     * Completion may be due to normal termination, an exception, or
-     * cancellation -- in all of these cases, this method will return
-     * <tt>true</tt>.
-     *
-     * @return <tt>true</tt> if this task completed
-     */
-    boolean isDone();
-
-    /**
-     * Waits if necessary for the computation to complete, and then
-     * retrieves its result.
-     *
-     * @return the computed result
-     * @throws CancellationException if the computation was cancelled
-     * @throws ExecutionException if the computation threw an
-     * exception
-     * @throws InterruptedException if the current thread was interrupted
-     * while waiting
-     */
-    V get() throws InterruptedException, ExecutionException;
-
-    /**
-     * Waits if necessary for at most the given time for the computation
-     * to complete, and then retrieves its result, if available.
-     *
-     * @param timeout the maximum time to wait
-     * @param unit the time unit of the timeout argument
-     * @return the computed result
-     * @throws CancellationException if the computation was cancelled
-     * @throws ExecutionException if the computation threw an
-     * exception
-     * @throws InterruptedException if the current thread was interrupted
-     * while waiting
-     * @throws TimeoutException if the wait timed out
-     */
-    V get(long timeout, TimeUnit unit)
-        throws InterruptedException, ExecutionException, TimeoutException;
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/FutureTask.java b/ojluni/src/main/java/java/util/concurrent/FutureTask.java
deleted file mode 100755
index e9b6e05..0000000
--- a/ojluni/src/main/java/java/util/concurrent/FutureTask.java
+++ /dev/null
@@ -1,482 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.concurrent.locks.LockSupport;
-
-/**
- * A cancellable asynchronous computation.  This class provides a base
- * implementation of {@link Future}, with methods to start and cancel
- * a computation, query to see if the computation is complete, and
- * retrieve the result of the computation.  The result can only be
- * retrieved when the computation has completed; the {@code get}
- * methods will block if the computation has not yet completed.  Once
- * the computation has completed, the computation cannot be restarted
- * or cancelled (unless the computation is invoked using
- * {@link #runAndReset}).
- *
- * <p>A {@code FutureTask} can be used to wrap a {@link Callable} or
- * {@link Runnable} object.  Because {@code FutureTask} implements
- * {@code Runnable}, a {@code FutureTask} can be submitted to an
- * {@link Executor} for execution.
- *
- * <p>In addition to serving as a standalone class, this class provides
- * {@code protected} functionality that may be useful when creating
- * customized task classes.
- *
- * @since 1.5
- * @author Doug Lea
- * @param <V> The result type returned by this FutureTask's {@code get} methods
- */
-public class FutureTask<V> implements RunnableFuture<V> {
-    /*
-     * Revision notes: This differs from previous versions of this
-     * class that relied on AbstractQueuedSynchronizer, mainly to
-     * avoid surprising users about retaining interrupt status during
-     * cancellation races. Sync control in the current design relies
-     * on a "state" field updated via CAS to track completion, along
-     * with a simple Treiber stack to hold waiting threads.
-     *
-     * Style note: As usual, we bypass overhead of using
-     * AtomicXFieldUpdaters and instead directly use Unsafe intrinsics.
-     */
-
-    /**
-     * The run state of this task, initially NEW.  The run state
-     * transitions to a terminal state only in methods set,
-     * setException, and cancel.  During completion, state may take on
-     * transient values of COMPLETING (while outcome is being set) or
-     * INTERRUPTING (only while interrupting the runner to satisfy a
-     * cancel(true)). Transitions from these intermediate to final
-     * states use cheaper ordered/lazy writes because values are unique
-     * and cannot be further modified.
-     *
-     * Possible state transitions:
-     * NEW -> COMPLETING -> NORMAL
-     * NEW -> COMPLETING -> EXCEPTIONAL
-     * NEW -> CANCELLED
-     * NEW -> INTERRUPTING -> INTERRUPTED
-     */
-    private volatile int state;
-    private static final int NEW          = 0;
-    private static final int COMPLETING   = 1;
-    private static final int NORMAL       = 2;
-    private static final int EXCEPTIONAL  = 3;
-    private static final int CANCELLED    = 4;
-    private static final int INTERRUPTING = 5;
-    private static final int INTERRUPTED  = 6;
-
-    /** The underlying callable; nulled out after running */
-    private Callable<V> callable;
-    /** The result to return or exception to throw from get() */
-    private Object outcome; // non-volatile, protected by state reads/writes
-    /** The thread running the callable; CASed during run() */
-    private volatile Thread runner;
-    /** Treiber stack of waiting threads */
-    private volatile WaitNode waiters;
-
-    /**
-     * Returns result or throws exception for completed task.
-     *
-     * @param s completed state value
-     */
-    @SuppressWarnings("unchecked")
-    private V report(int s) throws ExecutionException {
-        Object x = outcome;
-        if (s == NORMAL)
-            return (V)x;
-        if (s >= CANCELLED)
-            throw new CancellationException();
-        throw new ExecutionException((Throwable)x);
-    }
-
-    /**
-     * Creates a {@code FutureTask} that will, upon running, execute the
-     * given {@code Callable}.
-     *
-     * @param  callable the callable task
-     * @throws NullPointerException if the callable is null
-     */
-    public FutureTask(Callable<V> callable) {
-        if (callable == null)
-            throw new NullPointerException();
-        this.callable = callable;
-        this.state = NEW;       // ensure visibility of callable
-    }
-
-    /**
-     * Creates a {@code FutureTask} that will, upon running, execute the
-     * given {@code Runnable}, and arrange that {@code get} will return the
-     * given result on successful completion.
-     *
-     * @param runnable the runnable task
-     * @param result the result to return on successful completion. If
-     * you don't need a particular result, consider using
-     * constructions of the form:
-     * {@code Future<?> f = new FutureTask<Void>(runnable, null)}
-     * @throws NullPointerException if the runnable is null
-     */
-    public FutureTask(Runnable runnable, V result) {
-        this.callable = Executors.callable(runnable, result);
-        this.state = NEW;       // ensure visibility of callable
-    }
-
-    public boolean isCancelled() {
-        return state >= CANCELLED;
-    }
-
-    public boolean isDone() {
-        return state != NEW;
-    }
-
-    public boolean cancel(boolean mayInterruptIfRunning) {
-        if (state != NEW)
-            return false;
-        if (mayInterruptIfRunning) {
-            if (!UNSAFE.compareAndSwapInt(this, stateOffset, NEW, INTERRUPTING))
-                return false;
-            Thread t = runner;
-            if (t != null)
-                t.interrupt();
-            UNSAFE.putOrderedInt(this, stateOffset, INTERRUPTED); // final state
-        }
-        else if (!UNSAFE.compareAndSwapInt(this, stateOffset, NEW, CANCELLED))
-            return false;
-        finishCompletion();
-        return true;
-    }
-
-    /**
-     * @throws CancellationException {@inheritDoc}
-     */
-    public V get() throws InterruptedException, ExecutionException {
-        int s = state;
-        if (s <= COMPLETING)
-            s = awaitDone(false, 0L);
-        return report(s);
-    }
-
-    /**
-     * @throws CancellationException {@inheritDoc}
-     */
-    public V get(long timeout, TimeUnit unit)
-        throws InterruptedException, ExecutionException, TimeoutException {
-        if (unit == null)
-            throw new NullPointerException();
-        int s = state;
-        if (s <= COMPLETING &&
-            (s = awaitDone(true, unit.toNanos(timeout))) <= COMPLETING)
-            throw new TimeoutException();
-        return report(s);
-    }
-
-    /**
-     * Protected method invoked when this task transitions to state
-     * {@code isDone} (whether normally or via cancellation). The
-     * default implementation does nothing.  Subclasses may override
-     * this method to invoke completion callbacks or perform
-     * bookkeeping. Note that you can query status inside the
-     * implementation of this method to determine whether this task
-     * has been cancelled.
-     */
-    protected void done() { }
-
-    /**
-     * Sets the result of this future to the given value unless
-     * this future has already been set or has been cancelled.
-     *
-     * <p>This method is invoked internally by the {@link #run} method
-     * upon successful completion of the computation.
-     *
-     * @param v the value
-     */
-    protected void set(V v) {
-        if (UNSAFE.compareAndSwapInt(this, stateOffset, NEW, COMPLETING)) {
-            outcome = v;
-            UNSAFE.putOrderedInt(this, stateOffset, NORMAL); // final state
-            finishCompletion();
-        }
-    }
-
-    /**
-     * Causes this future to report an {@link ExecutionException}
-     * with the given throwable as its cause, unless this future has
-     * already been set or has been cancelled.
-     *
-     * <p>This method is invoked internally by the {@link #run} method
-     * upon failure of the computation.
-     *
-     * @param t the cause of failure
-     */
-    protected void setException(Throwable t) {
-        if (UNSAFE.compareAndSwapInt(this, stateOffset, NEW, COMPLETING)) {
-            outcome = t;
-            UNSAFE.putOrderedInt(this, stateOffset, EXCEPTIONAL); // final state
-            finishCompletion();
-        }
-    }
-
-    public void run() {
-        if (state != NEW ||
-            !UNSAFE.compareAndSwapObject(this, runnerOffset,
-                                         null, Thread.currentThread()))
-            return;
-        try {
-            Callable<V> c = callable;
-            if (c != null && state == NEW) {
-                V result;
-                boolean ran;
-                try {
-                    result = c.call();
-                    ran = true;
-                } catch (Throwable ex) {
-                    result = null;
-                    ran = false;
-                    setException(ex);
-                }
-                if (ran)
-                    set(result);
-            }
-        } finally {
-            // runner must be non-null until state is settled to
-            // prevent concurrent calls to run()
-            runner = null;
-            // state must be re-read after nulling runner to prevent
-            // leaked interrupts
-            int s = state;
-            if (s >= INTERRUPTING)
-                handlePossibleCancellationInterrupt(s);
-        }
-    }
-
-    /**
-     * Executes the computation without setting its result, and then
-     * resets this future to initial state, failing to do so if the
-     * computation encounters an exception or is cancelled.  This is
-     * designed for use with tasks that intrinsically execute more
-     * than once.
-     *
-     * @return true if successfully run and reset
-     */
-    protected boolean runAndReset() {
-        if (state != NEW ||
-            !UNSAFE.compareAndSwapObject(this, runnerOffset,
-                                         null, Thread.currentThread()))
-            return false;
-        boolean ran = false;
-        int s = state;
-        try {
-            Callable<V> c = callable;
-            if (c != null && s == NEW) {
-                try {
-                    c.call(); // don't set result
-                    ran = true;
-                } catch (Throwable ex) {
-                    setException(ex);
-                }
-            }
-        } finally {
-            // runner must be non-null until state is settled to
-            // prevent concurrent calls to run()
-            runner = null;
-            // state must be re-read after nulling runner to prevent
-            // leaked interrupts
-            s = state;
-            if (s >= INTERRUPTING)
-                handlePossibleCancellationInterrupt(s);
-        }
-        return ran && s == NEW;
-    }
-
-    /**
-     * Ensures that any interrupt from a possible cancel(true) is only
-     * delivered to a task while in run or runAndReset.
-     */
-    private void handlePossibleCancellationInterrupt(int s) {
-        // It is possible for our interrupter to stall before getting a
-        // chance to interrupt us.  Let's spin-wait patiently.
-        if (s == INTERRUPTING)
-            while (state == INTERRUPTING)
-                Thread.yield(); // wait out pending interrupt
-
-        // assert state == INTERRUPTED;
-
-        // We want to clear any interrupt we may have received from
-        // cancel(true).  However, it is permissible to use interrupts
-        // as an independent mechanism for a task to communicate with
-        // its caller, and there is no way to clear only the
-        // cancellation interrupt.
-        //
-        // Thread.interrupted();
-    }
-
-    /**
-     * Simple linked list nodes to record waiting threads in a Treiber
-     * stack.  See other classes such as Phaser and SynchronousQueue
-     * for more detailed explanation.
-     */
-    static final class WaitNode {
-        volatile Thread thread;
-        volatile WaitNode next;
-        WaitNode() { thread = Thread.currentThread(); }
-    }
-
-    /**
-     * Removes and signals all waiting threads, invokes done(), and
-     * nulls out callable.
-     */
-    private void finishCompletion() {
-        // assert state > COMPLETING;
-        for (WaitNode q; (q = waiters) != null;) {
-            if (UNSAFE.compareAndSwapObject(this, waitersOffset, q, null)) {
-                for (;;) {
-                    Thread t = q.thread;
-                    if (t != null) {
-                        q.thread = null;
-                        LockSupport.unpark(t);
-                    }
-                    WaitNode next = q.next;
-                    if (next == null)
-                        break;
-                    q.next = null; // unlink to help gc
-                    q = next;
-                }
-                break;
-            }
-        }
-
-        done();
-
-        callable = null;        // to reduce footprint
-    }
-
-    /**
-     * Awaits completion or aborts on interrupt or timeout.
-     *
-     * @param timed true if use timed waits
-     * @param nanos time to wait, if timed
-     * @return state upon completion
-     */
-    private int awaitDone(boolean timed, long nanos)
-        throws InterruptedException {
-        final long deadline = timed ? System.nanoTime() + nanos : 0L;
-        WaitNode q = null;
-        boolean queued = false;
-        for (;;) {
-            if (Thread.interrupted()) {
-                removeWaiter(q);
-                throw new InterruptedException();
-            }
-
-            int s = state;
-            if (s > COMPLETING) {
-                if (q != null)
-                    q.thread = null;
-                return s;
-            }
-            else if (s == COMPLETING) // cannot time out yet
-                Thread.yield();
-            else if (q == null)
-                q = new WaitNode();
-            else if (!queued)
-                queued = UNSAFE.compareAndSwapObject(this, waitersOffset,
-                                                     q.next = waiters, q);
-            else if (timed) {
-                nanos = deadline - System.nanoTime();
-                if (nanos <= 0L) {
-                    removeWaiter(q);
-                    return state;
-                }
-                LockSupport.parkNanos(this, nanos);
-            }
-            else
-                LockSupport.park(this);
-        }
-    }
-
-    /**
-     * Tries to unlink a timed-out or interrupted wait node to avoid
-     * accumulating garbage.  Internal nodes are simply unspliced
-     * without CAS since it is harmless if they are traversed anyway
-     * by releasers.  To avoid effects of unsplicing from already
-     * removed nodes, the list is retraversed in case of an apparent
-     * race.  This is slow when there are a lot of nodes, but we don't
-     * expect lists to be long enough to outweigh higher-overhead
-     * schemes.
-     */
-    private void removeWaiter(WaitNode node) {
-        if (node != null) {
-            node.thread = null;
-            retry:
-            for (;;) {          // restart on removeWaiter race
-                for (WaitNode pred = null, q = waiters, s; q != null; q = s) {
-                    s = q.next;
-                    if (q.thread != null)
-                        pred = q;
-                    else if (pred != null) {
-                        pred.next = s;
-                        if (pred.thread == null) // check for race
-                            continue retry;
-                    }
-                    else if (!UNSAFE.compareAndSwapObject(this, waitersOffset,
-                                                          q, s))
-                        continue retry;
-                }
-                break;
-            }
-        }
-    }
-
-    // Unsafe mechanics
-    private static final sun.misc.Unsafe UNSAFE;
-    private static final long stateOffset;
-    private static final long runnerOffset;
-    private static final long waitersOffset;
-    static {
-        try {
-            UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class<?> k = FutureTask.class;
-            stateOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("state"));
-            runnerOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("runner"));
-            waitersOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("waiters"));
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/LinkedBlockingDeque.java b/ojluni/src/main/java/java/util/concurrent/LinkedBlockingDeque.java
deleted file mode 100755
index c1978c8..0000000
--- a/ojluni/src/main/java/java/util/concurrent/LinkedBlockingDeque.java
+++ /dev/null
@@ -1,1198 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-import java.util.AbstractQueue;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.ReentrantLock;
-
-/**
- * An optionally-bounded {@linkplain BlockingDeque blocking deque} based on
- * linked nodes.
- *
- * <p> The optional capacity bound constructor argument serves as a
- * way to prevent excessive expansion. The capacity, if unspecified,
- * is equal to {@link Integer#MAX_VALUE}.  Linked nodes are
- * dynamically created upon each insertion unless this would bring the
- * deque above capacity.
- *
- * <p>Most operations run in constant time (ignoring time spent
- * blocking).  Exceptions include {@link #remove(Object) remove},
- * {@link #removeFirstOccurrence removeFirstOccurrence}, {@link
- * #removeLastOccurrence removeLastOccurrence}, {@link #contains
- * contains}, {@link #iterator iterator.remove()}, and the bulk
- * operations, all of which run in linear time.
- *
- * <p>This class and its iterator implement all of the
- * <em>optional</em> methods of the {@link Collection} and {@link
- * Iterator} interfaces.
- *
- * <p>This class is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @since 1.6
- * @author  Doug Lea
- * @param <E> the type of elements held in this collection
- */
-public class LinkedBlockingDeque<E>
-    extends AbstractQueue<E>
-    implements BlockingDeque<E>,  java.io.Serializable {
-
-    /*
-     * Implemented as a simple doubly-linked list protected by a
-     * single lock and using conditions to manage blocking.
-     *
-     * To implement weakly consistent iterators, it appears we need to
-     * keep all Nodes GC-reachable from a predecessor dequeued Node.
-     * That would cause two problems:
-     * - allow a rogue Iterator to cause unbounded memory retention
-     * - cause cross-generational linking of old Nodes to new Nodes if
-     *   a Node was tenured while live, which generational GCs have a
-     *   hard time dealing with, causing repeated major collections.
-     * However, only non-deleted Nodes need to be reachable from
-     * dequeued Nodes, and reachability does not necessarily have to
-     * be of the kind understood by the GC.  We use the trick of
-     * linking a Node that has just been dequeued to itself.  Such a
-     * self-link implicitly means to jump to "first" (for next links)
-     * or "last" (for prev links).
-     */
-
-    /*
-     * We have "diamond" multiple interface/abstract class inheritance
-     * here, and that introduces ambiguities. Often we want the
-     * BlockingDeque javadoc combined with the AbstractQueue
-     * implementation, so a lot of method specs are duplicated here.
-     */
-
-    private static final long serialVersionUID = -387911632671998426L;
-
-    /** Doubly-linked list node class */
-    static final class Node<E> {
-        /**
-         * The item, or null if this node has been removed.
-         */
-        E item;
-
-        /**
-         * One of:
-         * - the real predecessor Node
-         * - this Node, meaning the predecessor is tail
-         * - null, meaning there is no predecessor
-         */
-        Node<E> prev;
-
-        /**
-         * One of:
-         * - the real successor Node
-         * - this Node, meaning the successor is head
-         * - null, meaning there is no successor
-         */
-        Node<E> next;
-
-        Node(E x) {
-            item = x;
-        }
-    }
-
-    /**
-     * Pointer to first node.
-     * Invariant: (first == null && last == null) ||
-     *            (first.prev == null && first.item != null)
-     */
-    transient Node<E> first;
-
-    /**
-     * Pointer to last node.
-     * Invariant: (first == null && last == null) ||
-     *            (last.next == null && last.item != null)
-     */
-    transient Node<E> last;
-
-    /** Number of items in the deque */
-    private transient int count;
-
-    /** Maximum number of items in the deque */
-    private final int capacity;
-
-    /** Main lock guarding all access */
-    final ReentrantLock lock = new ReentrantLock();
-
-    /** Condition for waiting takes */
-    private final Condition notEmpty = lock.newCondition();
-
-    /** Condition for waiting puts */
-    private final Condition notFull = lock.newCondition();
-
-    /**
-     * Creates a {@code LinkedBlockingDeque} with a capacity of
-     * {@link Integer#MAX_VALUE}.
-     */
-    public LinkedBlockingDeque() {
-        this(Integer.MAX_VALUE);
-    }
-
-    /**
-     * Creates a {@code LinkedBlockingDeque} with the given (fixed) capacity.
-     *
-     * @param capacity the capacity of this deque
-     * @throws IllegalArgumentException if {@code capacity} is less than 1
-     */
-    public LinkedBlockingDeque(int capacity) {
-        if (capacity <= 0) throw new IllegalArgumentException();
-        this.capacity = capacity;
-    }
-
-    /**
-     * Creates a {@code LinkedBlockingDeque} with a capacity of
-     * {@link Integer#MAX_VALUE}, initially containing the elements of
-     * the given collection, added in traversal order of the
-     * collection's iterator.
-     *
-     * @param c the collection of elements to initially contain
-     * @throws NullPointerException if the specified collection or any
-     *         of its elements are null
-     */
-    public LinkedBlockingDeque(Collection<? extends E> c) {
-        this(Integer.MAX_VALUE);
-        final ReentrantLock lock = this.lock;
-        lock.lock(); // Never contended, but necessary for visibility
-        try {
-            for (E e : c) {
-                if (e == null)
-                    throw new NullPointerException();
-                if (!linkLast(new Node<E>(e)))
-                    throw new IllegalStateException("Deque full");
-            }
-        } finally {
-            lock.unlock();
-        }
-    }
-
-
-    // Basic linking and unlinking operations, called only while holding lock
-
-    /**
-     * Links node as first element, or returns false if full.
-     */
-    private boolean linkFirst(Node<E> node) {
-        // assert lock.isHeldByCurrentThread();
-        if (count >= capacity)
-            return false;
-        Node<E> f = first;
-        node.next = f;
-        first = node;
-        if (last == null)
-            last = node;
-        else
-            f.prev = node;
-        ++count;
-        notEmpty.signal();
-        return true;
-    }
-
-    /**
-     * Links node as last element, or returns false if full.
-     */
-    private boolean linkLast(Node<E> node) {
-        // assert lock.isHeldByCurrentThread();
-        if (count >= capacity)
-            return false;
-        Node<E> l = last;
-        node.prev = l;
-        last = node;
-        if (first == null)
-            first = node;
-        else
-            l.next = node;
-        ++count;
-        notEmpty.signal();
-        return true;
-    }
-
-    /**
-     * Removes and returns first element, or null if empty.
-     */
-    private E unlinkFirst() {
-        // assert lock.isHeldByCurrentThread();
-        Node<E> f = first;
-        if (f == null)
-            return null;
-        Node<E> n = f.next;
-        E item = f.item;
-        f.item = null;
-        f.next = f; // help GC
-        first = n;
-        if (n == null)
-            last = null;
-        else
-            n.prev = null;
-        --count;
-        notFull.signal();
-        return item;
-    }
-
-    /**
-     * Removes and returns last element, or null if empty.
-     */
-    private E unlinkLast() {
-        // assert lock.isHeldByCurrentThread();
-        Node<E> l = last;
-        if (l == null)
-            return null;
-        Node<E> p = l.prev;
-        E item = l.item;
-        l.item = null;
-        l.prev = l; // help GC
-        last = p;
-        if (p == null)
-            first = null;
-        else
-            p.next = null;
-        --count;
-        notFull.signal();
-        return item;
-    }
-
-    /**
-     * Unlinks x.
-     */
-    void unlink(Node<E> x) {
-        // assert lock.isHeldByCurrentThread();
-        Node<E> p = x.prev;
-        Node<E> n = x.next;
-        if (p == null) {
-            unlinkFirst();
-        } else if (n == null) {
-            unlinkLast();
-        } else {
-            p.next = n;
-            n.prev = p;
-            x.item = null;
-            // Don't mess with x's links.  They may still be in use by
-            // an iterator.
-            --count;
-            notFull.signal();
-        }
-    }
-
-    // BlockingDeque methods
-
-    /**
-     * @throws IllegalStateException {@inheritDoc}
-     * @throws NullPointerException  {@inheritDoc}
-     */
-    public void addFirst(E e) {
-        if (!offerFirst(e))
-            throw new IllegalStateException("Deque full");
-    }
-
-    /**
-     * @throws IllegalStateException {@inheritDoc}
-     * @throws NullPointerException  {@inheritDoc}
-     */
-    public void addLast(E e) {
-        if (!offerLast(e))
-            throw new IllegalStateException("Deque full");
-    }
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public boolean offerFirst(E e) {
-        if (e == null) throw new NullPointerException();
-        Node<E> node = new Node<E>(e);
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return linkFirst(node);
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public boolean offerLast(E e) {
-        if (e == null) throw new NullPointerException();
-        Node<E> node = new Node<E>(e);
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return linkLast(node);
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     * @throws InterruptedException {@inheritDoc}
-     */
-    public void putFirst(E e) throws InterruptedException {
-        if (e == null) throw new NullPointerException();
-        Node<E> node = new Node<E>(e);
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            while (!linkFirst(node))
-                notFull.await();
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     * @throws InterruptedException {@inheritDoc}
-     */
-    public void putLast(E e) throws InterruptedException {
-        if (e == null) throw new NullPointerException();
-        Node<E> node = new Node<E>(e);
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            while (!linkLast(node))
-                notFull.await();
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     * @throws InterruptedException {@inheritDoc}
-     */
-    public boolean offerFirst(E e, long timeout, TimeUnit unit)
-        throws InterruptedException {
-        if (e == null) throw new NullPointerException();
-        Node<E> node = new Node<E>(e);
-        long nanos = unit.toNanos(timeout);
-        final ReentrantLock lock = this.lock;
-        lock.lockInterruptibly();
-        try {
-            while (!linkFirst(node)) {
-                if (nanos <= 0)
-                    return false;
-                nanos = notFull.awaitNanos(nanos);
-            }
-            return true;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     * @throws InterruptedException {@inheritDoc}
-     */
-    public boolean offerLast(E e, long timeout, TimeUnit unit)
-        throws InterruptedException {
-        if (e == null) throw new NullPointerException();
-        Node<E> node = new Node<E>(e);
-        long nanos = unit.toNanos(timeout);
-        final ReentrantLock lock = this.lock;
-        lock.lockInterruptibly();
-        try {
-            while (!linkLast(node)) {
-                if (nanos <= 0)
-                    return false;
-                nanos = notFull.awaitNanos(nanos);
-            }
-            return true;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * @throws NoSuchElementException {@inheritDoc}
-     */
-    public E removeFirst() {
-        E x = pollFirst();
-        if (x == null) throw new NoSuchElementException();
-        return x;
-    }
-
-    /**
-     * @throws NoSuchElementException {@inheritDoc}
-     */
-    public E removeLast() {
-        E x = pollLast();
-        if (x == null) throw new NoSuchElementException();
-        return x;
-    }
-
-    public E pollFirst() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return unlinkFirst();
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public E pollLast() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return unlinkLast();
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public E takeFirst() throws InterruptedException {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            E x;
-            while ( (x = unlinkFirst()) == null)
-                notEmpty.await();
-            return x;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public E takeLast() throws InterruptedException {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            E x;
-            while ( (x = unlinkLast()) == null)
-                notEmpty.await();
-            return x;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public E pollFirst(long timeout, TimeUnit unit)
-        throws InterruptedException {
-        long nanos = unit.toNanos(timeout);
-        final ReentrantLock lock = this.lock;
-        lock.lockInterruptibly();
-        try {
-            E x;
-            while ( (x = unlinkFirst()) == null) {
-                if (nanos <= 0)
-                    return null;
-                nanos = notEmpty.awaitNanos(nanos);
-            }
-            return x;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public E pollLast(long timeout, TimeUnit unit)
-        throws InterruptedException {
-        long nanos = unit.toNanos(timeout);
-        final ReentrantLock lock = this.lock;
-        lock.lockInterruptibly();
-        try {
-            E x;
-            while ( (x = unlinkLast()) == null) {
-                if (nanos <= 0)
-                    return null;
-                nanos = notEmpty.awaitNanos(nanos);
-            }
-            return x;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * @throws NoSuchElementException {@inheritDoc}
-     */
-    public E getFirst() {
-        E x = peekFirst();
-        if (x == null) throw new NoSuchElementException();
-        return x;
-    }
-
-    /**
-     * @throws NoSuchElementException {@inheritDoc}
-     */
-    public E getLast() {
-        E x = peekLast();
-        if (x == null) throw new NoSuchElementException();
-        return x;
-    }
-
-    public E peekFirst() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return (first == null) ? null : first.item;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public E peekLast() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return (last == null) ? null : last.item;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public boolean removeFirstOccurrence(Object o) {
-        if (o == null) return false;
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            for (Node<E> p = first; p != null; p = p.next) {
-                if (o.equals(p.item)) {
-                    unlink(p);
-                    return true;
-                }
-            }
-            return false;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public boolean removeLastOccurrence(Object o) {
-        if (o == null) return false;
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            for (Node<E> p = last; p != null; p = p.prev) {
-                if (o.equals(p.item)) {
-                    unlink(p);
-                    return true;
-                }
-            }
-            return false;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    // BlockingQueue methods
-
-    /**
-     * Inserts the specified element at the end of this deque unless it would
-     * violate capacity restrictions.  When using a capacity-restricted deque,
-     * it is generally preferable to use method {@link #offer(Object) offer}.
-     *
-     * <p>This method is equivalent to {@link #addLast}.
-     *
-     * @throws IllegalStateException if the element cannot be added at this
-     *         time due to capacity restrictions
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean add(E e) {
-        addLast(e);
-        return true;
-    }
-
-    /**
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean offer(E e) {
-        return offerLast(e);
-    }
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     * @throws InterruptedException {@inheritDoc}
-     */
-    public void put(E e) throws InterruptedException {
-        putLast(e);
-    }
-
-    /**
-     * @throws NullPointerException {@inheritDoc}
-     * @throws InterruptedException {@inheritDoc}
-     */
-    public boolean offer(E e, long timeout, TimeUnit unit)
-        throws InterruptedException {
-        return offerLast(e, timeout, unit);
-    }
-
-    /**
-     * Retrieves and removes the head of the queue represented by this deque.
-     * This method differs from {@link #poll poll} only in that it throws an
-     * exception if this deque is empty.
-     *
-     * <p>This method is equivalent to {@link #removeFirst() removeFirst}.
-     *
-     * @return the head of the queue represented by this deque
-     * @throws NoSuchElementException if this deque is empty
-     */
-    public E remove() {
-        return removeFirst();
-    }
-
-    public E poll() {
-        return pollFirst();
-    }
-
-    public E take() throws InterruptedException {
-        return takeFirst();
-    }
-
-    public E poll(long timeout, TimeUnit unit) throws InterruptedException {
-        return pollFirst(timeout, unit);
-    }
-
-    /**
-     * Retrieves, but does not remove, the head of the queue represented by
-     * this deque.  This method differs from {@link #peek peek} only in that
-     * it throws an exception if this deque is empty.
-     *
-     * <p>This method is equivalent to {@link #getFirst() getFirst}.
-     *
-     * @return the head of the queue represented by this deque
-     * @throws NoSuchElementException if this deque is empty
-     */
-    public E element() {
-        return getFirst();
-    }
-
-    public E peek() {
-        return peekFirst();
-    }
-
-    /**
-     * Returns the number of additional elements that this deque can ideally
-     * (in the absence of memory or resource constraints) accept without
-     * blocking. This is always equal to the initial capacity of this deque
-     * less the current {@code size} of this deque.
-     *
-     * <p>Note that you <em>cannot</em> always tell if an attempt to insert
-     * an element will succeed by inspecting {@code remainingCapacity}
-     * because it may be the case that another thread is about to
-     * insert or remove an element.
-     */
-    public int remainingCapacity() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return capacity - count;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * @throws UnsupportedOperationException {@inheritDoc}
-     * @throws ClassCastException            {@inheritDoc}
-     * @throws NullPointerException          {@inheritDoc}
-     * @throws IllegalArgumentException      {@inheritDoc}
-     */
-    public int drainTo(Collection<? super E> c) {
-        return drainTo(c, Integer.MAX_VALUE);
-    }
-
-    /**
-     * @throws UnsupportedOperationException {@inheritDoc}
-     * @throws ClassCastException            {@inheritDoc}
-     * @throws NullPointerException          {@inheritDoc}
-     * @throws IllegalArgumentException      {@inheritDoc}
-     */
-    public int drainTo(Collection<? super E> c, int maxElements) {
-        if (c == null)
-            throw new NullPointerException();
-        if (c == this)
-            throw new IllegalArgumentException();
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            int n = Math.min(maxElements, count);
-            for (int i = 0; i < n; i++) {
-                c.add(first.item);   // In this order, in case add() throws.
-                unlinkFirst();
-            }
-            return n;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    // Stack methods
-
-    /**
-     * @throws IllegalStateException {@inheritDoc}
-     * @throws NullPointerException  {@inheritDoc}
-     */
-    public void push(E e) {
-        addFirst(e);
-    }
-
-    /**
-     * @throws NoSuchElementException {@inheritDoc}
-     */
-    public E pop() {
-        return removeFirst();
-    }
-
-    // Collection methods
-
-    /**
-     * Removes the first occurrence of the specified element from this deque.
-     * If the deque does not contain the element, it is unchanged.
-     * More formally, removes the first element {@code e} such that
-     * {@code o.equals(e)} (if such an element exists).
-     * Returns {@code true} if this deque contained the specified element
-     * (or equivalently, if this deque changed as a result of the call).
-     *
-     * <p>This method is equivalent to
-     * {@link #removeFirstOccurrence(Object) removeFirstOccurrence}.
-     *
-     * @param o element to be removed from this deque, if present
-     * @return {@code true} if this deque changed as a result of the call
-     */
-    public boolean remove(Object o) {
-        return removeFirstOccurrence(o);
-    }
-
-    /**
-     * Returns the number of elements in this deque.
-     *
-     * @return the number of elements in this deque
-     */
-    public int size() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return count;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns {@code true} if this deque contains the specified element.
-     * More formally, returns {@code true} if and only if this deque contains
-     * at least one element {@code e} such that {@code o.equals(e)}.
-     *
-     * @param o object to be checked for containment in this deque
-     * @return {@code true} if this deque contains the specified element
-     */
-    public boolean contains(Object o) {
-        if (o == null) return false;
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            for (Node<E> p = first; p != null; p = p.next)
-                if (o.equals(p.item))
-                    return true;
-            return false;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /*
-     * TODO: Add support for more efficient bulk operations.
-     *
-     * We don't want to acquire the lock for every iteration, but we
-     * also want other threads a chance to interact with the
-     * collection, especially when count is close to capacity.
-     */
-
-//     /**
-//      * Adds all of the elements in the specified collection to this
-//      * queue.  Attempts to addAll of a queue to itself result in
-//      * {@code IllegalArgumentException}. Further, the behavior of
-//      * this operation is undefined if the specified collection is
-//      * modified while the operation is in progress.
-//      *
-//      * @param c collection containing elements to be added to this queue
-//      * @return {@code true} if this queue changed as a result of the call
-//      * @throws ClassCastException            {@inheritDoc}
-//      * @throws NullPointerException          {@inheritDoc}
-//      * @throws IllegalArgumentException      {@inheritDoc}
-//      * @throws IllegalStateException         {@inheritDoc}
-//      * @see #add(Object)
-//      */
-//     public boolean addAll(Collection<? extends E> c) {
-//         if (c == null)
-//             throw new NullPointerException();
-//         if (c == this)
-//             throw new IllegalArgumentException();
-//         final ReentrantLock lock = this.lock;
-//         lock.lock();
-//         try {
-//             boolean modified = false;
-//             for (E e : c)
-//                 if (linkLast(e))
-//                     modified = true;
-//             return modified;
-//         } finally {
-//             lock.unlock();
-//         }
-//     }
-
-    /**
-     * Returns an array containing all of the elements in this deque, in
-     * proper sequence (from first to last element).
-     *
-     * <p>The returned array will be "safe" in that no references to it are
-     * maintained by this deque.  (In other words, this method must allocate
-     * a new array).  The caller is thus free to modify the returned array.
-     *
-     * <p>This method acts as bridge between array-based and collection-based
-     * APIs.
-     *
-     * @return an array containing all of the elements in this deque
-     */
-    @SuppressWarnings("unchecked")
-    public Object[] toArray() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            Object[] a = new Object[count];
-            int k = 0;
-            for (Node<E> p = first; p != null; p = p.next)
-                a[k++] = p.item;
-            return a;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns an array containing all of the elements in this deque, in
-     * proper sequence; the runtime type of the returned array is that of
-     * the specified array.  If the deque fits in the specified array, it
-     * is returned therein.  Otherwise, a new array is allocated with the
-     * runtime type of the specified array and the size of this deque.
-     *
-     * <p>If this deque fits in the specified array with room to spare
-     * (i.e., the array has more elements than this deque), the element in
-     * the array immediately following the end of the deque is set to
-     * {@code null}.
-     *
-     * <p>Like the {@link #toArray()} method, this method acts as bridge between
-     * array-based and collection-based APIs.  Further, this method allows
-     * precise control over the runtime type of the output array, and may,
-     * under certain circumstances, be used to save allocation costs.
-     *
-     * <p>Suppose {@code x} is a deque known to contain only strings.
-     * The following code can be used to dump the deque into a newly
-     * allocated array of {@code String}:
-     *
-     * <pre>
-     *     String[] y = x.toArray(new String[0]);</pre>
-     *
-     * Note that {@code toArray(new Object[0])} is identical in function to
-     * {@code toArray()}.
-     *
-     * @param a the array into which the elements of the deque are to
-     *          be stored, if it is big enough; otherwise, a new array of the
-     *          same runtime type is allocated for this purpose
-     * @return an array containing all of the elements in this deque
-     * @throws ArrayStoreException if the runtime type of the specified array
-     *         is not a supertype of the runtime type of every element in
-     *         this deque
-     * @throws NullPointerException if the specified array is null
-     */
-    @SuppressWarnings("unchecked")
-    public <T> T[] toArray(T[] a) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            if (a.length < count)
-                a = (T[])java.lang.reflect.Array.newInstance
-                    (a.getClass().getComponentType(), count);
-
-            int k = 0;
-            for (Node<E> p = first; p != null; p = p.next)
-                a[k++] = (T)p.item;
-            if (a.length > k)
-                a[k] = null;
-            return a;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public String toString() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            Node<E> p = first;
-            if (p == null)
-                return "[]";
-
-            StringBuilder sb = new StringBuilder();
-            sb.append('[');
-            for (;;) {
-                E e = p.item;
-                sb.append(e == this ? "(this Collection)" : e);
-                p = p.next;
-                if (p == null)
-                    return sb.append(']').toString();
-                sb.append(',').append(' ');
-            }
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Atomically removes all of the elements from this deque.
-     * The deque will be empty after this call returns.
-     */
-    public void clear() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            for (Node<E> f = first; f != null; ) {
-                f.item = null;
-                Node<E> n = f.next;
-                f.prev = null;
-                f.next = null;
-                f = n;
-            }
-            first = last = null;
-            count = 0;
-            notFull.signalAll();
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns an iterator over the elements in this deque in proper sequence.
-     * The elements will be returned in order from first (head) to last (tail).
-     *
-     * <p>The returned iterator is a "weakly consistent" iterator that
-     * will never throw {@link java.util.ConcurrentModificationException
-     * ConcurrentModificationException}, and guarantees to traverse
-     * elements as they existed upon construction of the iterator, and
-     * may (but is not guaranteed to) reflect any modifications
-     * subsequent to construction.
-     *
-     * @return an iterator over the elements in this deque in proper sequence
-     */
-    public Iterator<E> iterator() {
-        return new Itr();
-    }
-
-    /**
-     * Returns an iterator over the elements in this deque in reverse
-     * sequential order.  The elements will be returned in order from
-     * last (tail) to first (head).
-     *
-     * <p>The returned iterator is a "weakly consistent" iterator that
-     * will never throw {@link java.util.ConcurrentModificationException
-     * ConcurrentModificationException}, and guarantees to traverse
-     * elements as they existed upon construction of the iterator, and
-     * may (but is not guaranteed to) reflect any modifications
-     * subsequent to construction.
-     *
-     * @return an iterator over the elements in this deque in reverse order
-     */
-    public Iterator<E> descendingIterator() {
-        return new DescendingItr();
-    }
-
-    /**
-     * Base class for Iterators for LinkedBlockingDeque
-     */
-    private abstract class AbstractItr implements Iterator<E> {
-        /**
-         * The next node to return in next()
-         */
-         Node<E> next;
-
-        /**
-         * nextItem holds on to item fields because once we claim that
-         * an element exists in hasNext(), we must return item read
-         * under lock (in advance()) even if it was in the process of
-         * being removed when hasNext() was called.
-         */
-        E nextItem;
-
-        /**
-         * Node returned by most recent call to next. Needed by remove.
-         * Reset to null if this element is deleted by a call to remove.
-         */
-        private Node<E> lastRet;
-
-        abstract Node<E> firstNode();
-        abstract Node<E> nextNode(Node<E> n);
-
-        AbstractItr() {
-            // set to initial position
-            final ReentrantLock lock = LinkedBlockingDeque.this.lock;
-            lock.lock();
-            try {
-                next = firstNode();
-                nextItem = (next == null) ? null : next.item;
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        /**
-         * Returns the successor node of the given non-null, but
-         * possibly previously deleted, node.
-         */
-        private Node<E> succ(Node<E> n) {
-            // Chains of deleted nodes ending in null or self-links
-            // are possible if multiple interior nodes are removed.
-            for (;;) {
-                Node<E> s = nextNode(n);
-                if (s == null)
-                    return null;
-                else if (s.item != null)
-                    return s;
-                else if (s == n)
-                    return firstNode();
-                else
-                    n = s;
-            }
-        }
-
-        /**
-         * Advances next.
-         */
-        void advance() {
-            final ReentrantLock lock = LinkedBlockingDeque.this.lock;
-            lock.lock();
-            try {
-                // assert next != null;
-                next = succ(next);
-                nextItem = (next == null) ? null : next.item;
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public boolean hasNext() {
-            return next != null;
-        }
-
-        public E next() {
-            if (next == null)
-                throw new NoSuchElementException();
-            lastRet = next;
-            E x = nextItem;
-            advance();
-            return x;
-        }
-
-        public void remove() {
-            Node<E> n = lastRet;
-            if (n == null)
-                throw new IllegalStateException();
-            lastRet = null;
-            final ReentrantLock lock = LinkedBlockingDeque.this.lock;
-            lock.lock();
-            try {
-                if (n.item != null)
-                    unlink(n);
-            } finally {
-                lock.unlock();
-            }
-        }
-    }
-
-    /** Forward iterator */
-    private class Itr extends AbstractItr {
-        Node<E> firstNode() { return first; }
-        Node<E> nextNode(Node<E> n) { return n.next; }
-    }
-
-    /** Descending iterator */
-    private class DescendingItr extends AbstractItr {
-        Node<E> firstNode() { return last; }
-        Node<E> nextNode(Node<E> n) { return n.prev; }
-    }
-
-    /**
-     * Save the state of this deque to a stream (that is, serialize it).
-     *
-     * @serialData The capacity (int), followed by elements (each an
-     * {@code Object}) in the proper order, followed by a null
-     * @param s the stream
-     */
-    private void writeObject(java.io.ObjectOutputStream s)
-        throws java.io.IOException {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            // Write out capacity and any hidden stuff
-            s.defaultWriteObject();
-            // Write out all elements in the proper order.
-            for (Node<E> p = first; p != null; p = p.next)
-                s.writeObject(p.item);
-            // Use trailing null as sentinel
-            s.writeObject(null);
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Reconstitute this deque from a stream (that is,
-     * deserialize it).
-     * @param s the stream
-     */
-    private void readObject(java.io.ObjectInputStream s)
-        throws java.io.IOException, ClassNotFoundException {
-        s.defaultReadObject();
-        count = 0;
-        first = null;
-        last = null;
-        // Read in all elements and place in queue
-        for (;;) {
-            @SuppressWarnings("unchecked")
-            E item = (E)s.readObject();
-            if (item == null)
-                break;
-            add(item);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/LinkedBlockingQueue.java b/ojluni/src/main/java/java/util/concurrent/LinkedBlockingQueue.java
deleted file mode 100755
index ae4d435..0000000
--- a/ojluni/src/main/java/java/util/concurrent/LinkedBlockingQueue.java
+++ /dev/null
@@ -1,910 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.AbstractQueue;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * An optionally-bounded {@linkplain BlockingQueue blocking queue} based on
- * linked nodes.
- * This queue orders elements FIFO (first-in-first-out).
- * The <em>head</em> of the queue is that element that has been on the
- * queue the longest time.
- * The <em>tail</em> of the queue is that element that has been on the
- * queue the shortest time. New elements
- * are inserted at the tail of the queue, and the queue retrieval
- * operations obtain elements at the head of the queue.
- * Linked queues typically have higher throughput than array-based queues but
- * less predictable performance in most concurrent applications.
- *
- * <p> The optional capacity bound constructor argument serves as a
- * way to prevent excessive queue expansion. The capacity, if unspecified,
- * is equal to {@link Integer#MAX_VALUE}.  Linked nodes are
- * dynamically created upon each insertion unless this would bring the
- * queue above capacity.
- *
- * <p>This class and its iterator implement all of the
- * <em>optional</em> methods of the {@link Collection} and {@link
- * Iterator} interfaces.
- *
- * <p>This class is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @since 1.5
- * @author Doug Lea
- * @param <E> the type of elements held in this collection
- *
- */
-public class LinkedBlockingQueue<E> extends AbstractQueue<E>
-        implements BlockingQueue<E>, java.io.Serializable {
-    private static final long serialVersionUID = -6903933977591709194L;
-
-    /*
-     * A variant of the "two lock queue" algorithm.  The putLock gates
-     * entry to put (and offer), and has an associated condition for
-     * waiting puts.  Similarly for the takeLock.  The "count" field
-     * that they both rely on is maintained as an atomic to avoid
-     * needing to get both locks in most cases. Also, to minimize need
-     * for puts to get takeLock and vice-versa, cascading notifies are
-     * used. When a put notices that it has enabled at least one take,
-     * it signals taker. That taker in turn signals others if more
-     * items have been entered since the signal. And symmetrically for
-     * takes signalling puts. Operations such as remove(Object) and
-     * iterators acquire both locks.
-     *
-     * Visibility between writers and readers is provided as follows:
-     *
-     * Whenever an element is enqueued, the putLock is acquired and
-     * count updated.  A subsequent reader guarantees visibility to the
-     * enqueued Node by either acquiring the putLock (via fullyLock)
-     * or by acquiring the takeLock, and then reading n = count.get();
-     * this gives visibility to the first n items.
-     *
-     * To implement weakly consistent iterators, it appears we need to
-     * keep all Nodes GC-reachable from a predecessor dequeued Node.
-     * That would cause two problems:
-     * - allow a rogue Iterator to cause unbounded memory retention
-     * - cause cross-generational linking of old Nodes to new Nodes if
-     *   a Node was tenured while live, which generational GCs have a
-     *   hard time dealing with, causing repeated major collections.
-     * However, only non-deleted Nodes need to be reachable from
-     * dequeued Nodes, and reachability does not necessarily have to
-     * be of the kind understood by the GC.  We use the trick of
-     * linking a Node that has just been dequeued to itself.  Such a
-     * self-link implicitly means to advance to head.next.
-     */
-
-    /**
-     * Linked list node class
-     */
-    static class Node<E> {
-        E item;
-
-        /**
-         * One of:
-         * - the real successor Node
-         * - this Node, meaning the successor is head.next
-         * - null, meaning there is no successor (this is the last node)
-         */
-        Node<E> next;
-
-        Node(E x) { item = x; }
-    }
-
-    /** The capacity bound, or Integer.MAX_VALUE if none */
-    private final int capacity;
-
-    /** Current number of elements */
-    private final AtomicInteger count = new AtomicInteger(0);
-
-    /**
-     * Head of linked list.
-     * Invariant: head.item == null
-     */
-    private transient Node<E> head;
-
-    /**
-     * Tail of linked list.
-     * Invariant: last.next == null
-     */
-    private transient Node<E> last;
-
-    /** Lock held by take, poll, etc */
-    private final ReentrantLock takeLock = new ReentrantLock();
-
-    /** Wait queue for waiting takes */
-    private final Condition notEmpty = takeLock.newCondition();
-
-    /** Lock held by put, offer, etc */
-    private final ReentrantLock putLock = new ReentrantLock();
-
-    /** Wait queue for waiting puts */
-    private final Condition notFull = putLock.newCondition();
-
-    /**
-     * Signals a waiting take. Called only from put/offer (which do not
-     * otherwise ordinarily lock takeLock.)
-     */
-    private void signalNotEmpty() {
-        final ReentrantLock takeLock = this.takeLock;
-        takeLock.lock();
-        try {
-            notEmpty.signal();
-        } finally {
-            takeLock.unlock();
-        }
-    }
-
-    /**
-     * Signals a waiting put. Called only from take/poll.
-     */
-    private void signalNotFull() {
-        final ReentrantLock putLock = this.putLock;
-        putLock.lock();
-        try {
-            notFull.signal();
-        } finally {
-            putLock.unlock();
-        }
-    }
-
-    /**
-     * Links node at end of queue.
-     *
-     * @param node the node
-     */
-    private void enqueue(Node<E> node) {
-        // assert putLock.isHeldByCurrentThread();
-        // assert last.next == null;
-        last = last.next = node;
-    }
-
-    /**
-     * Removes a node from head of queue.
-     *
-     * @return the node
-     */
-    private E dequeue() {
-        // assert takeLock.isHeldByCurrentThread();
-        // assert head.item == null;
-        Node<E> h = head;
-        Node<E> first = h.next;
-        h.next = h; // help GC
-        head = first;
-        E x = first.item;
-        first.item = null;
-        return x;
-    }
-
-    /**
-     * Lock to prevent both puts and takes.
-     */
-    void fullyLock() {
-        putLock.lock();
-        takeLock.lock();
-    }
-
-    /**
-     * Unlock to allow both puts and takes.
-     */
-    void fullyUnlock() {
-        takeLock.unlock();
-        putLock.unlock();
-    }
-
-//     /**
-//      * Tells whether both locks are held by current thread.
-//      */
-//     boolean isFullyLocked() {
-//         return (putLock.isHeldByCurrentThread() &&
-//                 takeLock.isHeldByCurrentThread());
-//     }
-
-    /**
-     * Creates a {@code LinkedBlockingQueue} with a capacity of
-     * {@link Integer#MAX_VALUE}.
-     */
-    public LinkedBlockingQueue() {
-        this(Integer.MAX_VALUE);
-    }
-
-    /**
-     * Creates a {@code LinkedBlockingQueue} with the given (fixed) capacity.
-     *
-     * @param capacity the capacity of this queue
-     * @throws IllegalArgumentException if {@code capacity} is not greater
-     *         than zero
-     */
-    public LinkedBlockingQueue(int capacity) {
-        if (capacity <= 0) throw new IllegalArgumentException();
-        this.capacity = capacity;
-        last = head = new Node<E>(null);
-    }
-
-    /**
-     * Creates a {@code LinkedBlockingQueue} with a capacity of
-     * {@link Integer#MAX_VALUE}, initially containing the elements of the
-     * given collection,
-     * added in traversal order of the collection's iterator.
-     *
-     * @param c the collection of elements to initially contain
-     * @throws NullPointerException if the specified collection or any
-     *         of its elements are null
-     */
-    public LinkedBlockingQueue(Collection<? extends E> c) {
-        this(Integer.MAX_VALUE);
-        final ReentrantLock putLock = this.putLock;
-        putLock.lock(); // Never contended, but necessary for visibility
-        try {
-            int n = 0;
-            for (E e : c) {
-                if (e == null)
-                    throw new NullPointerException();
-                if (n == capacity)
-                    throw new IllegalStateException("Queue full");
-                enqueue(new Node<E>(e));
-                ++n;
-            }
-            count.set(n);
-        } finally {
-            putLock.unlock();
-        }
-    }
-
-
-    // this doc comment is overridden to remove the reference to collections
-    // greater in size than Integer.MAX_VALUE
-    /**
-     * Returns the number of elements in this queue.
-     *
-     * @return the number of elements in this queue
-     */
-    public int size() {
-        return count.get();
-    }
-
-    // this doc comment is a modified copy of the inherited doc comment,
-    // without the reference to unlimited queues.
-    /**
-     * Returns the number of additional elements that this queue can ideally
-     * (in the absence of memory or resource constraints) accept without
-     * blocking. This is always equal to the initial capacity of this queue
-     * less the current {@code size} of this queue.
-     *
-     * <p>Note that you <em>cannot</em> always tell if an attempt to insert
-     * an element will succeed by inspecting {@code remainingCapacity}
-     * because it may be the case that another thread is about to
-     * insert or remove an element.
-     */
-    public int remainingCapacity() {
-        return capacity - count.get();
-    }
-
-    /**
-     * Inserts the specified element at the tail of this queue, waiting if
-     * necessary for space to become available.
-     *
-     * @throws InterruptedException {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void put(E e) throws InterruptedException {
-        if (e == null) throw new NullPointerException();
-        // Note: convention in all put/take/etc is to preset local var
-        // holding count negative to indicate failure unless set.
-        int c = -1;
-        Node<E> node = new Node(e);
-        final ReentrantLock putLock = this.putLock;
-        final AtomicInteger count = this.count;
-        putLock.lockInterruptibly();
-        try {
-            /*
-             * Note that count is used in wait guard even though it is
-             * not protected by lock. This works because count can
-             * only decrease at this point (all other puts are shut
-             * out by lock), and we (or some other waiting put) are
-             * signalled if it ever changes from capacity. Similarly
-             * for all other uses of count in other wait guards.
-             */
-            while (count.get() == capacity) {
-                notFull.await();
-            }
-            enqueue(node);
-            c = count.getAndIncrement();
-            if (c + 1 < capacity)
-                notFull.signal();
-        } finally {
-            putLock.unlock();
-        }
-        if (c == 0)
-            signalNotEmpty();
-    }
-
-    /**
-     * Inserts the specified element at the tail of this queue, waiting if
-     * necessary up to the specified wait time for space to become available.
-     *
-     * @return {@code true} if successful, or {@code false} if
-     *         the specified waiting time elapses before space is available.
-     * @throws InterruptedException {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public boolean offer(E e, long timeout, TimeUnit unit)
-        throws InterruptedException {
-
-        if (e == null) throw new NullPointerException();
-        long nanos = unit.toNanos(timeout);
-        int c = -1;
-        final ReentrantLock putLock = this.putLock;
-        final AtomicInteger count = this.count;
-        putLock.lockInterruptibly();
-        try {
-            while (count.get() == capacity) {
-                if (nanos <= 0)
-                    return false;
-                nanos = notFull.awaitNanos(nanos);
-            }
-            enqueue(new Node<E>(e));
-            c = count.getAndIncrement();
-            if (c + 1 < capacity)
-                notFull.signal();
-        } finally {
-            putLock.unlock();
-        }
-        if (c == 0)
-            signalNotEmpty();
-        return true;
-    }
-
-    /**
-     * Inserts the specified element at the tail of this queue if it is
-     * possible to do so immediately without exceeding the queue's capacity,
-     * returning {@code true} upon success and {@code false} if this queue
-     * is full.
-     * When using a capacity-restricted queue, this method is generally
-     * preferable to method {@link BlockingQueue#add add}, which can fail to
-     * insert an element only by throwing an exception.
-     *
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean offer(E e) {
-        if (e == null) throw new NullPointerException();
-        final AtomicInteger count = this.count;
-        if (count.get() == capacity)
-            return false;
-        int c = -1;
-        Node<E> node = new Node(e);
-        final ReentrantLock putLock = this.putLock;
-        putLock.lock();
-        try {
-            if (count.get() < capacity) {
-                enqueue(node);
-                c = count.getAndIncrement();
-                if (c + 1 < capacity)
-                    notFull.signal();
-            }
-        } finally {
-            putLock.unlock();
-        }
-        if (c == 0)
-            signalNotEmpty();
-        return c >= 0;
-    }
-
-
-    public E take() throws InterruptedException {
-        E x;
-        int c = -1;
-        final AtomicInteger count = this.count;
-        final ReentrantLock takeLock = this.takeLock;
-        takeLock.lockInterruptibly();
-        try {
-            while (count.get() == 0) {
-                notEmpty.await();
-            }
-            x = dequeue();
-            c = count.getAndDecrement();
-            if (c > 1)
-                notEmpty.signal();
-        } finally {
-            takeLock.unlock();
-        }
-        if (c == capacity)
-            signalNotFull();
-        return x;
-    }
-
-    public E poll(long timeout, TimeUnit unit) throws InterruptedException {
-        E x = null;
-        int c = -1;
-        long nanos = unit.toNanos(timeout);
-        final AtomicInteger count = this.count;
-        final ReentrantLock takeLock = this.takeLock;
-        takeLock.lockInterruptibly();
-        try {
-            while (count.get() == 0) {
-                if (nanos <= 0)
-                    return null;
-                nanos = notEmpty.awaitNanos(nanos);
-            }
-            x = dequeue();
-            c = count.getAndDecrement();
-            if (c > 1)
-                notEmpty.signal();
-        } finally {
-            takeLock.unlock();
-        }
-        if (c == capacity)
-            signalNotFull();
-        return x;
-    }
-
-    public E poll() {
-        final AtomicInteger count = this.count;
-        if (count.get() == 0)
-            return null;
-        E x = null;
-        int c = -1;
-        final ReentrantLock takeLock = this.takeLock;
-        takeLock.lock();
-        try {
-            if (count.get() > 0) {
-                x = dequeue();
-                c = count.getAndDecrement();
-                if (c > 1)
-                    notEmpty.signal();
-            }
-        } finally {
-            takeLock.unlock();
-        }
-        if (c == capacity)
-            signalNotFull();
-        return x;
-    }
-
-    public E peek() {
-        if (count.get() == 0)
-            return null;
-        final ReentrantLock takeLock = this.takeLock;
-        takeLock.lock();
-        try {
-            Node<E> first = head.next;
-            if (first == null)
-                return null;
-            else
-                return first.item;
-        } finally {
-            takeLock.unlock();
-        }
-    }
-
-    /**
-     * Unlinks interior Node p with predecessor trail.
-     */
-    void unlink(Node<E> p, Node<E> trail) {
-        // assert isFullyLocked();
-        // p.next is not changed, to allow iterators that are
-        // traversing p to maintain their weak-consistency guarantee.
-        p.item = null;
-        trail.next = p.next;
-        if (last == p)
-            last = trail;
-        if (count.getAndDecrement() == capacity)
-            notFull.signal();
-    }
-
-    /**
-     * Removes a single instance of the specified element from this queue,
-     * if it is present.  More formally, removes an element {@code e} such
-     * that {@code o.equals(e)}, if this queue contains one or more such
-     * elements.
-     * Returns {@code true} if this queue contained the specified element
-     * (or equivalently, if this queue changed as a result of the call).
-     *
-     * @param o element to be removed from this queue, if present
-     * @return {@code true} if this queue changed as a result of the call
-     */
-    public boolean remove(Object o) {
-        if (o == null) return false;
-        fullyLock();
-        try {
-            for (Node<E> trail = head, p = trail.next;
-                 p != null;
-                 trail = p, p = p.next) {
-                if (o.equals(p.item)) {
-                    unlink(p, trail);
-                    return true;
-                }
-            }
-            return false;
-        } finally {
-            fullyUnlock();
-        }
-    }
-
-    /**
-     * Returns {@code true} if this queue contains the specified element.
-     * More formally, returns {@code true} if and only if this queue contains
-     * at least one element {@code e} such that {@code o.equals(e)}.
-     *
-     * @param o object to be checked for containment in this queue
-     * @return {@code true} if this queue contains the specified element
-     */
-    public boolean contains(Object o) {
-        if (o == null) return false;
-        fullyLock();
-        try {
-            for (Node<E> p = head.next; p != null; p = p.next)
-                if (o.equals(p.item))
-                    return true;
-            return false;
-        } finally {
-            fullyUnlock();
-        }
-    }
-
-    /**
-     * Returns an array containing all of the elements in this queue, in
-     * proper sequence.
-     *
-     * <p>The returned array will be "safe" in that no references to it are
-     * maintained by this queue.  (In other words, this method must allocate
-     * a new array).  The caller is thus free to modify the returned array.
-     *
-     * <p>This method acts as bridge between array-based and collection-based
-     * APIs.
-     *
-     * @return an array containing all of the elements in this queue
-     */
-    public Object[] toArray() {
-        fullyLock();
-        try {
-            int size = count.get();
-            Object[] a = new Object[size];
-            int k = 0;
-            for (Node<E> p = head.next; p != null; p = p.next)
-                a[k++] = p.item;
-            return a;
-        } finally {
-            fullyUnlock();
-        }
-    }
-
-    /**
-     * Returns an array containing all of the elements in this queue, in
-     * proper sequence; the runtime type of the returned array is that of
-     * the specified array.  If the queue fits in the specified array, it
-     * is returned therein.  Otherwise, a new array is allocated with the
-     * runtime type of the specified array and the size of this queue.
-     *
-     * <p>If this queue fits in the specified array with room to spare
-     * (i.e., the array has more elements than this queue), the element in
-     * the array immediately following the end of the queue is set to
-     * {@code null}.
-     *
-     * <p>Like the {@link #toArray()} method, this method acts as bridge between
-     * array-based and collection-based APIs.  Further, this method allows
-     * precise control over the runtime type of the output array, and may,
-     * under certain circumstances, be used to save allocation costs.
-     *
-     * <p>Suppose {@code x} is a queue known to contain only strings.
-     * The following code can be used to dump the queue into a newly
-     * allocated array of {@code String}:
-     *
-     * <pre>
-     *     String[] y = x.toArray(new String[0]);</pre>
-     *
-     * Note that {@code toArray(new Object[0])} is identical in function to
-     * {@code toArray()}.
-     *
-     * @param a the array into which the elements of the queue are to
-     *          be stored, if it is big enough; otherwise, a new array of the
-     *          same runtime type is allocated for this purpose
-     * @return an array containing all of the elements in this queue
-     * @throws ArrayStoreException if the runtime type of the specified array
-     *         is not a supertype of the runtime type of every element in
-     *         this queue
-     * @throws NullPointerException if the specified array is null
-     */
-    @SuppressWarnings("unchecked")
-    public <T> T[] toArray(T[] a) {
-        fullyLock();
-        try {
-            int size = count.get();
-            if (a.length < size)
-                a = (T[])java.lang.reflect.Array.newInstance
-                    (a.getClass().getComponentType(), size);
-
-            int k = 0;
-            for (Node<E> p = head.next; p != null; p = p.next)
-                a[k++] = (T)p.item;
-            if (a.length > k)
-                a[k] = null;
-            return a;
-        } finally {
-            fullyUnlock();
-        }
-    }
-
-    public String toString() {
-        fullyLock();
-        try {
-            Node<E> p = head.next;
-            if (p == null)
-                return "[]";
-
-            StringBuilder sb = new StringBuilder();
-            sb.append('[');
-            for (;;) {
-                E e = p.item;
-                sb.append(e == this ? "(this Collection)" : e);
-                p = p.next;
-                if (p == null)
-                    return sb.append(']').toString();
-                sb.append(',').append(' ');
-            }
-        } finally {
-            fullyUnlock();
-        }
-    }
-
-    /**
-     * Atomically removes all of the elements from this queue.
-     * The queue will be empty after this call returns.
-     */
-    public void clear() {
-        fullyLock();
-        try {
-            for (Node<E> p, h = head; (p = h.next) != null; h = p) {
-                h.next = h;
-                p.item = null;
-            }
-            head = last;
-            // assert head.item == null && head.next == null;
-            if (count.getAndSet(0) == capacity)
-                notFull.signal();
-        } finally {
-            fullyUnlock();
-        }
-    }
-
-    /**
-     * @throws UnsupportedOperationException {@inheritDoc}
-     * @throws ClassCastException            {@inheritDoc}
-     * @throws NullPointerException          {@inheritDoc}
-     * @throws IllegalArgumentException      {@inheritDoc}
-     */
-    public int drainTo(Collection<? super E> c) {
-        return drainTo(c, Integer.MAX_VALUE);
-    }
-
-    /**
-     * @throws UnsupportedOperationException {@inheritDoc}
-     * @throws ClassCastException            {@inheritDoc}
-     * @throws NullPointerException          {@inheritDoc}
-     * @throws IllegalArgumentException      {@inheritDoc}
-     */
-    public int drainTo(Collection<? super E> c, int maxElements) {
-        if (c == null)
-            throw new NullPointerException();
-        if (c == this)
-            throw new IllegalArgumentException();
-        boolean signalNotFull = false;
-        final ReentrantLock takeLock = this.takeLock;
-        takeLock.lock();
-        try {
-            int n = Math.min(maxElements, count.get());
-            // count.get provides visibility to first n Nodes
-            Node<E> h = head;
-            int i = 0;
-            try {
-                while (i < n) {
-                    Node<E> p = h.next;
-                    c.add(p.item);
-                    p.item = null;
-                    h.next = h;
-                    h = p;
-                    ++i;
-                }
-                return n;
-            } finally {
-                // Restore invariants even if c.add() threw
-                if (i > 0) {
-                    // assert h.item == null;
-                    head = h;
-                    signalNotFull = (count.getAndAdd(-i) == capacity);
-                }
-            }
-        } finally {
-            takeLock.unlock();
-            if (signalNotFull)
-                signalNotFull();
-        }
-    }
-
-    /**
-     * Returns an iterator over the elements in this queue in proper sequence.
-     * The elements will be returned in order from first (head) to last (tail).
-     *
-     * <p>The returned iterator is a "weakly consistent" iterator that
-     * will never throw {@link java.util.ConcurrentModificationException
-     * ConcurrentModificationException}, and guarantees to traverse
-     * elements as they existed upon construction of the iterator, and
-     * may (but is not guaranteed to) reflect any modifications
-     * subsequent to construction.
-     *
-     * @return an iterator over the elements in this queue in proper sequence
-     */
-    public Iterator<E> iterator() {
-      return new Itr();
-    }
-
-    private class Itr implements Iterator<E> {
-        /*
-         * Basic weakly-consistent iterator.  At all times hold the next
-         * item to hand out so that if hasNext() reports true, we will
-         * still have it to return even if lost race with a take etc.
-         */
-        private Node<E> current;
-        private Node<E> lastRet;
-        private E currentElement;
-
-        Itr() {
-            fullyLock();
-            try {
-                current = head.next;
-                if (current != null)
-                    currentElement = current.item;
-            } finally {
-                fullyUnlock();
-            }
-        }
-
-        public boolean hasNext() {
-            return current != null;
-        }
-
-        /**
-         * Returns the next live successor of p, or null if no such.
-         *
-         * Unlike other traversal methods, iterators need to handle both:
-         * - dequeued nodes (p.next == p)
-         * - (possibly multiple) interior removed nodes (p.item == null)
-         */
-        private Node<E> nextNode(Node<E> p) {
-            for (;;) {
-                Node<E> s = p.next;
-                if (s == p)
-                    return head.next;
-                if (s == null || s.item != null)
-                    return s;
-                p = s;
-            }
-        }
-
-        public E next() {
-            fullyLock();
-            try {
-                if (current == null)
-                    throw new NoSuchElementException();
-                E x = currentElement;
-                lastRet = current;
-                current = nextNode(current);
-                currentElement = (current == null) ? null : current.item;
-                return x;
-            } finally {
-                fullyUnlock();
-            }
-        }
-
-        public void remove() {
-            if (lastRet == null)
-                throw new IllegalStateException();
-            fullyLock();
-            try {
-                Node<E> node = lastRet;
-                lastRet = null;
-                for (Node<E> trail = head, p = trail.next;
-                     p != null;
-                     trail = p, p = p.next) {
-                    if (p == node) {
-                        unlink(p, trail);
-                        break;
-                    }
-                }
-            } finally {
-                fullyUnlock();
-            }
-        }
-    }
-
-    /**
-     * Save the state to a stream (that is, serialize it).
-     *
-     * @serialData The capacity is emitted (int), followed by all of
-     * its elements (each an {@code Object}) in the proper order,
-     * followed by a null
-     * @param s the stream
-     */
-    private void writeObject(java.io.ObjectOutputStream s)
-        throws java.io.IOException {
-
-        fullyLock();
-        try {
-            // Write out any hidden stuff, plus capacity
-            s.defaultWriteObject();
-
-            // Write out all elements in the proper order.
-            for (Node<E> p = head.next; p != null; p = p.next)
-                s.writeObject(p.item);
-
-            // Use trailing null as sentinel
-            s.writeObject(null);
-        } finally {
-            fullyUnlock();
-        }
-    }
-
-    /**
-     * Reconstitute this queue instance from a stream (that is,
-     * deserialize it).
-     *
-     * @param s the stream
-     */
-    private void readObject(java.io.ObjectInputStream s)
-        throws java.io.IOException, ClassNotFoundException {
-        // Read in capacity, and any hidden stuff
-        s.defaultReadObject();
-
-        count.set(0);
-        last = head = new Node<E>(null);
-
-        // Read in all elements and place in queue
-        for (;;) {
-            @SuppressWarnings("unchecked")
-            E item = (E)s.readObject();
-            if (item == null)
-                break;
-            add(item);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/LinkedTransferQueue.java b/ojluni/src/main/java/java/util/concurrent/LinkedTransferQueue.java
deleted file mode 100755
index ebdf223..0000000
--- a/ojluni/src/main/java/java/util/concurrent/LinkedTransferQueue.java
+++ /dev/null
@@ -1,1351 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-import java.util.AbstractQueue;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.Queue;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.LockSupport;
-
-/**
- * An unbounded {@link TransferQueue} based on linked nodes.
- * This queue orders elements FIFO (first-in-first-out) with respect
- * to any given producer.  The <em>head</em> of the queue is that
- * element that has been on the queue the longest time for some
- * producer.  The <em>tail</em> of the queue is that element that has
- * been on the queue the shortest time for some producer.
- *
- * <p>Beware that, unlike in most collections, the {@code size} method
- * is <em>NOT</em> a constant-time operation. Because of the
- * asynchronous nature of these queues, determining the current number
- * of elements requires a traversal of the elements, and so may report
- * inaccurate results if this collection is modified during traversal.
- * Additionally, the bulk operations {@code addAll},
- * {@code removeAll}, {@code retainAll}, {@code containsAll},
- * {@code equals}, and {@code toArray} are <em>not</em> guaranteed
- * to be performed atomically. For example, an iterator operating
- * concurrently with an {@code addAll} operation might view only some
- * of the added elements.
- *
- * <p>This class and its iterator implement all of the
- * <em>optional</em> methods of the {@link Collection} and {@link
- * Iterator} interfaces.
- *
- * <p>Memory consistency effects: As with other concurrent
- * collections, actions in a thread prior to placing an object into a
- * {@code LinkedTransferQueue}
- * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
- * actions subsequent to the access or removal of that element from
- * the {@code LinkedTransferQueue} in another thread.
- *
- * <p>This class is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @since 1.7
- * @author Doug Lea
- * @param <E> the type of elements held in this collection
- */
-public class LinkedTransferQueue<E> extends AbstractQueue<E>
-    implements TransferQueue<E>, java.io.Serializable {
-    private static final long serialVersionUID = -3223113410248163686L;
-
-    /*
-     * *** Overview of Dual Queues with Slack ***
-     *
-     * Dual Queues, introduced by Scherer and Scott
-     * (http://www.cs.rice.edu/~wns1/papers/2004-DISC-DDS.pdf) are
-     * (linked) queues in which nodes may represent either data or
-     * requests.  When a thread tries to enqueue a data node, but
-     * encounters a request node, it instead "matches" and removes it;
-     * and vice versa for enqueuing requests. Blocking Dual Queues
-     * arrange that threads enqueuing unmatched requests block until
-     * other threads provide the match. Dual Synchronous Queues (see
-     * Scherer, Lea, & Scott
-     * http://www.cs.rochester.edu/u/scott/papers/2009_Scherer_CACM_SSQ.pdf)
-     * additionally arrange that threads enqueuing unmatched data also
-     * block.  Dual Transfer Queues support all of these modes, as
-     * dictated by callers.
-     *
-     * A FIFO dual queue may be implemented using a variation of the
-     * Michael & Scott (M&S) lock-free queue algorithm
-     * (http://www.cs.rochester.edu/u/scott/papers/1996_PODC_queues.pdf).
-     * It maintains two pointer fields, "head", pointing to a
-     * (matched) node that in turn points to the first actual
-     * (unmatched) queue node (or null if empty); and "tail" that
-     * points to the last node on the queue (or again null if
-     * empty). For example, here is a possible queue with four data
-     * elements:
-     *
-     *  head                tail
-     *    |                   |
-     *    v                   v
-     *    M -> U -> U -> U -> U
-     *
-     * The M&S queue algorithm is known to be prone to scalability and
-     * overhead limitations when maintaining (via CAS) these head and
-     * tail pointers. This has led to the development of
-     * contention-reducing variants such as elimination arrays (see
-     * Moir et al http://portal.acm.org/citation.cfm?id=1074013) and
-     * optimistic back pointers (see Ladan-Mozes & Shavit
-     * http://people.csail.mit.edu/edya/publications/OptimisticFIFOQueue-journal.pdf).
-     * However, the nature of dual queues enables a simpler tactic for
-     * improving M&S-style implementations when dual-ness is needed.
-     *
-     * In a dual queue, each node must atomically maintain its match
-     * status. While there are other possible variants, we implement
-     * this here as: for a data-mode node, matching entails CASing an
-     * "item" field from a non-null data value to null upon match, and
-     * vice-versa for request nodes, CASing from null to a data
-     * value. (Note that the linearization properties of this style of
-     * queue are easy to verify -- elements are made available by
-     * linking, and unavailable by matching.) Compared to plain M&S
-     * queues, this property of dual queues requires one additional
-     * successful atomic operation per enq/deq pair. But it also
-     * enables lower cost variants of queue maintenance mechanics. (A
-     * variation of this idea applies even for non-dual queues that
-     * support deletion of interior elements, such as
-     * j.u.c.ConcurrentLinkedQueue.)
-     *
-     * Once a node is matched, its match status can never again
-     * change.  We may thus arrange that the linked list of them
-     * contain a prefix of zero or more matched nodes, followed by a
-     * suffix of zero or more unmatched nodes. (Note that we allow
-     * both the prefix and suffix to be zero length, which in turn
-     * means that we do not use a dummy header.)  If we were not
-     * concerned with either time or space efficiency, we could
-     * correctly perform enqueue and dequeue operations by traversing
-     * from a pointer to the initial node; CASing the item of the
-     * first unmatched node on match and CASing the next field of the
-     * trailing node on appends. (Plus some special-casing when
-     * initially empty).  While this would be a terrible idea in
-     * itself, it does have the benefit of not requiring ANY atomic
-     * updates on head/tail fields.
-     *
-     * We introduce here an approach that lies between the extremes of
-     * never versus always updating queue (head and tail) pointers.
-     * This offers a tradeoff between sometimes requiring extra
-     * traversal steps to locate the first and/or last unmatched
-     * nodes, versus the reduced overhead and contention of fewer
-     * updates to queue pointers. For example, a possible snapshot of
-     * a queue is:
-     *
-     *  head           tail
-     *    |              |
-     *    v              v
-     *    M -> M -> U -> U -> U -> U
-     *
-     * The best value for this "slack" (the targeted maximum distance
-     * between the value of "head" and the first unmatched node, and
-     * similarly for "tail") is an empirical matter. We have found
-     * that using very small constants in the range of 1-3 work best
-     * over a range of platforms. Larger values introduce increasing
-     * costs of cache misses and risks of long traversal chains, while
-     * smaller values increase CAS contention and overhead.
-     *
-     * Dual queues with slack differ from plain M&S dual queues by
-     * virtue of only sometimes updating head or tail pointers when
-     * matching, appending, or even traversing nodes; in order to
-     * maintain a targeted slack.  The idea of "sometimes" may be
-     * operationalized in several ways. The simplest is to use a
-     * per-operation counter incremented on each traversal step, and
-     * to try (via CAS) to update the associated queue pointer
-     * whenever the count exceeds a threshold. Another, that requires
-     * more overhead, is to use random number generators to update
-     * with a given probability per traversal step.
-     *
-     * In any strategy along these lines, because CASes updating
-     * fields may fail, the actual slack may exceed targeted
-     * slack. However, they may be retried at any time to maintain
-     * targets.  Even when using very small slack values, this
-     * approach works well for dual queues because it allows all
-     * operations up to the point of matching or appending an item
-     * (hence potentially allowing progress by another thread) to be
-     * read-only, thus not introducing any further contention. As
-     * described below, we implement this by performing slack
-     * maintenance retries only after these points.
-     *
-     * As an accompaniment to such techniques, traversal overhead can
-     * be further reduced without increasing contention of head
-     * pointer updates: Threads may sometimes shortcut the "next" link
-     * path from the current "head" node to be closer to the currently
-     * known first unmatched node, and similarly for tail. Again, this
-     * may be triggered with using thresholds or randomization.
-     *
-     * These ideas must be further extended to avoid unbounded amounts
-     * of costly-to-reclaim garbage caused by the sequential "next"
-     * links of nodes starting at old forgotten head nodes: As first
-     * described in detail by Boehm
-     * (http://portal.acm.org/citation.cfm?doid=503272.503282) if a GC
-     * delays noticing that any arbitrarily old node has become
-     * garbage, all newer dead nodes will also be unreclaimed.
-     * (Similar issues arise in non-GC environments.)  To cope with
-     * this in our implementation, upon CASing to advance the head
-     * pointer, we set the "next" link of the previous head to point
-     * only to itself; thus limiting the length of connected dead lists.
-     * (We also take similar care to wipe out possibly garbage
-     * retaining values held in other Node fields.)  However, doing so
-     * adds some further complexity to traversal: If any "next"
-     * pointer links to itself, it indicates that the current thread
-     * has lagged behind a head-update, and so the traversal must
-     * continue from the "head".  Traversals trying to find the
-     * current tail starting from "tail" may also encounter
-     * self-links, in which case they also continue at "head".
-     *
-     * It is tempting in slack-based scheme to not even use CAS for
-     * updates (similarly to Ladan-Mozes & Shavit). However, this
-     * cannot be done for head updates under the above link-forgetting
-     * mechanics because an update may leave head at a detached node.
-     * And while direct writes are possible for tail updates, they
-     * increase the risk of long retraversals, and hence long garbage
-     * chains, which can be much more costly than is worthwhile
-     * considering that the cost difference of performing a CAS vs
-     * write is smaller when they are not triggered on each operation
-     * (especially considering that writes and CASes equally require
-     * additional GC bookkeeping ("write barriers") that are sometimes
-     * more costly than the writes themselves because of contention).
-     *
-     * *** Overview of implementation ***
-     *
-     * We use a threshold-based approach to updates, with a slack
-     * threshold of two -- that is, we update head/tail when the
-     * current pointer appears to be two or more steps away from the
-     * first/last node. The slack value is hard-wired: a path greater
-     * than one is naturally implemented by checking equality of
-     * traversal pointers except when the list has only one element,
-     * in which case we keep slack threshold at one. Avoiding tracking
-     * explicit counts across method calls slightly simplifies an
-     * already-messy implementation. Using randomization would
-     * probably work better if there were a low-quality dirt-cheap
-     * per-thread one available, but even ThreadLocalRandom is too
-     * heavy for these purposes.
-     *
-     * With such a small slack threshold value, it is not worthwhile
-     * to augment this with path short-circuiting (i.e., unsplicing
-     * interior nodes) except in the case of cancellation/removal (see
-     * below).
-     *
-     * We allow both the head and tail fields to be null before any
-     * nodes are enqueued; initializing upon first append.  This
-     * simplifies some other logic, as well as providing more
-     * efficient explicit control paths instead of letting JVMs insert
-     * implicit NullPointerExceptions when they are null.  While not
-     * currently fully implemented, we also leave open the possibility
-     * of re-nulling these fields when empty (which is complicated to
-     * arrange, for little benefit.)
-     *
-     * All enqueue/dequeue operations are handled by the single method
-     * "xfer" with parameters indicating whether to act as some form
-     * of offer, put, poll, take, or transfer (each possibly with
-     * timeout). The relative complexity of using one monolithic
-     * method outweighs the code bulk and maintenance problems of
-     * using separate methods for each case.
-     *
-     * Operation consists of up to three phases. The first is
-     * implemented within method xfer, the second in tryAppend, and
-     * the third in method awaitMatch.
-     *
-     * 1. Try to match an existing node
-     *
-     *    Starting at head, skip already-matched nodes until finding
-     *    an unmatched node of opposite mode, if one exists, in which
-     *    case matching it and returning, also if necessary updating
-     *    head to one past the matched node (or the node itself if the
-     *    list has no other unmatched nodes). If the CAS misses, then
-     *    a loop retries advancing head by two steps until either
-     *    success or the slack is at most two. By requiring that each
-     *    attempt advances head by two (if applicable), we ensure that
-     *    the slack does not grow without bound. Traversals also check
-     *    if the initial head is now off-list, in which case they
-     *    start at the new head.
-     *
-     *    If no candidates are found and the call was untimed
-     *    poll/offer, (argument "how" is NOW) return.
-     *
-     * 2. Try to append a new node (method tryAppend)
-     *
-     *    Starting at current tail pointer, find the actual last node
-     *    and try to append a new node (or if head was null, establish
-     *    the first node). Nodes can be appended only if their
-     *    predecessors are either already matched or are of the same
-     *    mode. If we detect otherwise, then a new node with opposite
-     *    mode must have been appended during traversal, so we must
-     *    restart at phase 1. The traversal and update steps are
-     *    otherwise similar to phase 1: Retrying upon CAS misses and
-     *    checking for staleness.  In particular, if a self-link is
-     *    encountered, then we can safely jump to a node on the list
-     *    by continuing the traversal at current head.
-     *
-     *    On successful append, if the call was ASYNC, return.
-     *
-     * 3. Await match or cancellation (method awaitMatch)
-     *
-     *    Wait for another thread to match node; instead cancelling if
-     *    the current thread was interrupted or the wait timed out. On
-     *    multiprocessors, we use front-of-queue spinning: If a node
-     *    appears to be the first unmatched node in the queue, it
-     *    spins a bit before blocking. In either case, before blocking
-     *    it tries to unsplice any nodes between the current "head"
-     *    and the first unmatched node.
-     *
-     *    Front-of-queue spinning vastly improves performance of
-     *    heavily contended queues. And so long as it is relatively
-     *    brief and "quiet", spinning does not much impact performance
-     *    of less-contended queues.  During spins threads check their
-     *    interrupt status and generate a thread-local random number
-     *    to decide to occasionally perform a Thread.yield. While
-     *    yield has underdefined specs, we assume that might it help,
-     *    and will not hurt in limiting impact of spinning on busy
-     *    systems.  We also use smaller (1/2) spins for nodes that are
-     *    not known to be front but whose predecessors have not
-     *    blocked -- these "chained" spins avoid artifacts of
-     *    front-of-queue rules which otherwise lead to alternating
-     *    nodes spinning vs blocking. Further, front threads that
-     *    represent phase changes (from data to request node or vice
-     *    versa) compared to their predecessors receive additional
-     *    chained spins, reflecting longer paths typically required to
-     *    unblock threads during phase changes.
-     *
-     *
-     * ** Unlinking removed interior nodes **
-     *
-     * In addition to minimizing garbage retention via self-linking
-     * described above, we also unlink removed interior nodes. These
-     * may arise due to timed out or interrupted waits, or calls to
-     * remove(x) or Iterator.remove.  Normally, given a node that was
-     * at one time known to be the predecessor of some node s that is
-     * to be removed, we can unsplice s by CASing the next field of
-     * its predecessor if it still points to s (otherwise s must
-     * already have been removed or is now offlist). But there are two
-     * situations in which we cannot guarantee to make node s
-     * unreachable in this way: (1) If s is the trailing node of list
-     * (i.e., with null next), then it is pinned as the target node
-     * for appends, so can only be removed later after other nodes are
-     * appended. (2) We cannot necessarily unlink s given a
-     * predecessor node that is matched (including the case of being
-     * cancelled): the predecessor may already be unspliced, in which
-     * case some previous reachable node may still point to s.
-     * (For further explanation see Herlihy & Shavit "The Art of
-     * Multiprocessor Programming" chapter 9).  Although, in both
-     * cases, we can rule out the need for further action if either s
-     * or its predecessor are (or can be made to be) at, or fall off
-     * from, the head of list.
-     *
-     * Without taking these into account, it would be possible for an
-     * unbounded number of supposedly removed nodes to remain
-     * reachable.  Situations leading to such buildup are uncommon but
-     * can occur in practice; for example when a series of short timed
-     * calls to poll repeatedly time out but never otherwise fall off
-     * the list because of an untimed call to take at the front of the
-     * queue.
-     *
-     * When these cases arise, rather than always retraversing the
-     * entire list to find an actual predecessor to unlink (which
-     * won't help for case (1) anyway), we record a conservative
-     * estimate of possible unsplice failures (in "sweepVotes").
-     * We trigger a full sweep when the estimate exceeds a threshold
-     * ("SWEEP_THRESHOLD") indicating the maximum number of estimated
-     * removal failures to tolerate before sweeping through, unlinking
-     * cancelled nodes that were not unlinked upon initial removal.
-     * We perform sweeps by the thread hitting threshold (rather than
-     * background threads or by spreading work to other threads)
-     * because in the main contexts in which removal occurs, the
-     * caller is already timed-out, cancelled, or performing a
-     * potentially O(n) operation (e.g. remove(x)), none of which are
-     * time-critical enough to warrant the overhead that alternatives
-     * would impose on other threads.
-     *
-     * Because the sweepVotes estimate is conservative, and because
-     * nodes become unlinked "naturally" as they fall off the head of
-     * the queue, and because we allow votes to accumulate even while
-     * sweeps are in progress, there are typically significantly fewer
-     * such nodes than estimated.  Choice of a threshold value
-     * balances the likelihood of wasted effort and contention, versus
-     * providing a worst-case bound on retention of interior nodes in
-     * quiescent queues. The value defined below was chosen
-     * empirically to balance these under various timeout scenarios.
-     *
-     * Note that we cannot self-link unlinked interior nodes during
-     * sweeps. However, the associated garbage chains terminate when
-     * some successor ultimately falls off the head of the list and is
-     * self-linked.
-     */
-
-    /** True if on multiprocessor */
-    private static final boolean MP =
-        Runtime.getRuntime().availableProcessors() > 1;
-
-    /**
-     * The number of times to spin (with randomly interspersed calls
-     * to Thread.yield) on multiprocessor before blocking when a node
-     * is apparently the first waiter in the queue.  See above for
-     * explanation. Must be a power of two. The value is empirically
-     * derived -- it works pretty well across a variety of processors,
-     * numbers of CPUs, and OSes.
-     */
-    private static final int FRONT_SPINS   = 1 << 7;
-
-    /**
-     * The number of times to spin before blocking when a node is
-     * preceded by another node that is apparently spinning.  Also
-     * serves as an increment to FRONT_SPINS on phase changes, and as
-     * base average frequency for yielding during spins. Must be a
-     * power of two.
-     */
-    private static final int CHAINED_SPINS = FRONT_SPINS >>> 1;
-
-    /**
-     * The maximum number of estimated removal failures (sweepVotes)
-     * to tolerate before sweeping through the queue unlinking
-     * cancelled nodes that were not unlinked upon initial
-     * removal. See above for explanation. The value must be at least
-     * two to avoid useless sweeps when removing trailing nodes.
-     */
-    static final int SWEEP_THRESHOLD = 32;
-
-    /**
-     * Queue nodes. Uses Object, not E, for items to allow forgetting
-     * them after use.  Relies heavily on Unsafe mechanics to minimize
-     * unnecessary ordering constraints: Writes that are intrinsically
-     * ordered wrt other accesses or CASes use simple relaxed forms.
-     */
-    static final class Node {
-        final boolean isData;   // false if this is a request node
-        volatile Object item;   // initially non-null if isData; CASed to match
-        volatile Node next;
-        volatile Thread waiter; // null until waiting
-
-        // CAS methods for fields
-        final boolean casNext(Node cmp, Node val) {
-            return UNSAFE.compareAndSwapObject(this, nextOffset, cmp, val);
-        }
-
-        final boolean casItem(Object cmp, Object val) {
-            // assert cmp == null || cmp.getClass() != Node.class;
-            return UNSAFE.compareAndSwapObject(this, itemOffset, cmp, val);
-        }
-
-        /**
-         * Constructs a new node.  Uses relaxed write because item can
-         * only be seen after publication via casNext.
-         */
-        Node(Object item, boolean isData) {
-            UNSAFE.putObject(this, itemOffset, item); // relaxed write
-            this.isData = isData;
-        }
-
-        /**
-         * Links node to itself to avoid garbage retention.  Called
-         * only after CASing head field, so uses relaxed write.
-         */
-        final void forgetNext() {
-            UNSAFE.putObject(this, nextOffset, this);
-        }
-
-        /**
-         * Sets item to self and waiter to null, to avoid garbage
-         * retention after matching or cancelling. Uses relaxed writes
-         * because order is already constrained in the only calling
-         * contexts: item is forgotten only after volatile/atomic
-         * mechanics that extract items.  Similarly, clearing waiter
-         * follows either CAS or return from park (if ever parked;
-         * else we don't care).
-         */
-        final void forgetContents() {
-            UNSAFE.putObject(this, itemOffset, this);
-            UNSAFE.putObject(this, waiterOffset, null);
-        }
-
-        /**
-         * Returns true if this node has been matched, including the
-         * case of artificial matches due to cancellation.
-         */
-        final boolean isMatched() {
-            Object x = item;
-            return (x == this) || ((x == null) == isData);
-        }
-
-        /**
-         * Returns true if this is an unmatched request node.
-         */
-        final boolean isUnmatchedRequest() {
-            return !isData && item == null;
-        }
-
-        /**
-         * Returns true if a node with the given mode cannot be
-         * appended to this node because this node is unmatched and
-         * has opposite data mode.
-         */
-        final boolean cannotPrecede(boolean haveData) {
-            boolean d = isData;
-            Object x;
-            return d != haveData && (x = item) != this && (x != null) == d;
-        }
-
-        /**
-         * Tries to artificially match a data node -- used by remove.
-         */
-        final boolean tryMatchData() {
-            // assert isData;
-            Object x = item;
-            if (x != null && x != this && casItem(x, null)) {
-                LockSupport.unpark(waiter);
-                return true;
-            }
-            return false;
-        }
-
-        private static final long serialVersionUID = -3375979862319811754L;
-
-        // Unsafe mechanics
-        private static final sun.misc.Unsafe UNSAFE;
-        private static final long itemOffset;
-        private static final long nextOffset;
-        private static final long waiterOffset;
-        static {
-            try {
-                UNSAFE = sun.misc.Unsafe.getUnsafe();
-                Class k = Node.class;
-                itemOffset = UNSAFE.objectFieldOffset
-                    (k.getDeclaredField("item"));
-                nextOffset = UNSAFE.objectFieldOffset
-                    (k.getDeclaredField("next"));
-                waiterOffset = UNSAFE.objectFieldOffset
-                    (k.getDeclaredField("waiter"));
-            } catch (Exception e) {
-                throw new Error(e);
-            }
-        }
-    }
-
-    /** head of the queue; null until first enqueue */
-    transient volatile Node head;
-
-    /** tail of the queue; null until first append */
-    private transient volatile Node tail;
-
-    /** The number of apparent failures to unsplice removed nodes */
-    private transient volatile int sweepVotes;
-
-    // CAS methods for fields
-    private boolean casTail(Node cmp, Node val) {
-        return UNSAFE.compareAndSwapObject(this, tailOffset, cmp, val);
-    }
-
-    private boolean casHead(Node cmp, Node val) {
-        return UNSAFE.compareAndSwapObject(this, headOffset, cmp, val);
-    }
-
-    private boolean casSweepVotes(int cmp, int val) {
-        return UNSAFE.compareAndSwapInt(this, sweepVotesOffset, cmp, val);
-    }
-
-    /*
-     * Possible values for "how" argument in xfer method.
-     */
-    private static final int NOW   = 0; // for untimed poll, tryTransfer
-    private static final int ASYNC = 1; // for offer, put, add
-    private static final int SYNC  = 2; // for transfer, take
-    private static final int TIMED = 3; // for timed poll, tryTransfer
-
-    @SuppressWarnings("unchecked")
-    static <E> E cast(Object item) {
-        // assert item == null || item.getClass() != Node.class;
-        return (E) item;
-    }
-
-    /**
-     * Implements all queuing methods. See above for explanation.
-     *
-     * @param e the item or null for take
-     * @param haveData true if this is a put, else a take
-     * @param how NOW, ASYNC, SYNC, or TIMED
-     * @param nanos timeout in nanosecs, used only if mode is TIMED
-     * @return an item if matched, else e
-     * @throws NullPointerException if haveData mode but e is null
-     */
-    private E xfer(E e, boolean haveData, int how, long nanos) {
-        if (haveData && (e == null))
-            throw new NullPointerException();
-        Node s = null;                        // the node to append, if needed
-
-        retry:
-        for (;;) {                            // restart on append race
-
-            for (Node h = head, p = h; p != null;) { // find & match first node
-                boolean isData = p.isData;
-                Object item = p.item;
-                if (item != p && (item != null) == isData) { // unmatched
-                    if (isData == haveData)   // can't match
-                        break;
-                    if (p.casItem(item, e)) { // match
-                        for (Node q = p; q != h;) {
-                            Node n = q.next;  // update by 2 unless singleton
-                            if (head == h && casHead(h, n == null ? q : n)) {
-                                h.forgetNext();
-                                break;
-                            }                 // advance and retry
-                            if ((h = head)   == null ||
-                                (q = h.next) == null || !q.isMatched())
-                                break;        // unless slack < 2
-                        }
-                        LockSupport.unpark(p.waiter);
-                        return this.<E>cast(item);
-                    }
-                }
-                Node n = p.next;
-                p = (p != n) ? n : (h = head); // Use head if p offlist
-            }
-
-            if (how != NOW) {                 // No matches available
-                if (s == null)
-                    s = new Node(e, haveData);
-                Node pred = tryAppend(s, haveData);
-                if (pred == null)
-                    continue retry;           // lost race vs opposite mode
-                if (how != ASYNC)
-                    return awaitMatch(s, pred, e, (how == TIMED), nanos);
-            }
-            return e; // not waiting
-        }
-    }
-
-    /**
-     * Tries to append node s as tail.
-     *
-     * @param s the node to append
-     * @param haveData true if appending in data mode
-     * @return null on failure due to losing race with append in
-     * different mode, else s's predecessor, or s itself if no
-     * predecessor
-     */
-    private Node tryAppend(Node s, boolean haveData) {
-        for (Node t = tail, p = t;;) {        // move p to last node and append
-            Node n, u;                        // temps for reads of next & tail
-            if (p == null && (p = head) == null) {
-                if (casHead(null, s))
-                    return s;                 // initialize
-            }
-            else if (p.cannotPrecede(haveData))
-                return null;                  // lost race vs opposite mode
-            else if ((n = p.next) != null)    // not last; keep traversing
-                p = p != t && t != (u = tail) ? (t = u) : // stale tail
-                    (p != n) ? n : null;      // restart if off list
-            else if (!p.casNext(null, s))
-                p = p.next;                   // re-read on CAS failure
-            else {
-                if (p != t) {                 // update if slack now >= 2
-                    while ((tail != t || !casTail(t, s)) &&
-                           (t = tail)   != null &&
-                           (s = t.next) != null && // advance and retry
-                           (s = s.next) != null && s != t);
-                }
-                return p;
-            }
-        }
-    }
-
-    /**
-     * Spins/yields/blocks until node s is matched or caller gives up.
-     *
-     * @param s the waiting node
-     * @param pred the predecessor of s, or s itself if it has no
-     * predecessor, or null if unknown (the null case does not occur
-     * in any current calls but may in possible future extensions)
-     * @param e the comparison value for checking match
-     * @param timed if true, wait only until timeout elapses
-     * @param nanos timeout in nanosecs, used only if timed is true
-     * @return matched item, or e if unmatched on interrupt or timeout
-     */
-    private E awaitMatch(Node s, Node pred, E e, boolean timed, long nanos) {
-        long lastTime = timed ? System.nanoTime() : 0L;
-        Thread w = Thread.currentThread();
-        int spins = -1; // initialized after first item and cancel checks
-        ThreadLocalRandom randomYields = null; // bound if needed
-
-        for (;;) {
-            Object item = s.item;
-            if (item != e) {                  // matched
-                // assert item != s;
-                s.forgetContents();           // avoid garbage
-                return this.<E>cast(item);
-            }
-            if ((w.isInterrupted() || (timed && nanos <= 0)) &&
-                    s.casItem(e, s)) {        // cancel
-                unsplice(pred, s);
-                return e;
-            }
-
-            if (spins < 0) {                  // establish spins at/near front
-                if ((spins = spinsFor(pred, s.isData)) > 0)
-                    randomYields = ThreadLocalRandom.current();
-            }
-            else if (spins > 0) {             // spin
-                --spins;
-                if (randomYields.nextInt(CHAINED_SPINS) == 0)
-                    Thread.yield();           // occasionally yield
-            }
-            else if (s.waiter == null) {
-                s.waiter = w;                 // request unpark then recheck
-            }
-            else if (timed) {
-                long now = System.nanoTime();
-                if ((nanos -= now - lastTime) > 0)
-                    LockSupport.parkNanos(this, nanos);
-                lastTime = now;
-            }
-            else {
-                LockSupport.park(this);
-            }
-        }
-    }
-
-    /**
-     * Returns spin/yield value for a node with given predecessor and
-     * data mode. See above for explanation.
-     */
-    private static int spinsFor(Node pred, boolean haveData) {
-        if (MP && pred != null) {
-            if (pred.isData != haveData)      // phase change
-                return FRONT_SPINS + CHAINED_SPINS;
-            if (pred.isMatched())             // probably at front
-                return FRONT_SPINS;
-            if (pred.waiter == null)          // pred apparently spinning
-                return CHAINED_SPINS;
-        }
-        return 0;
-    }
-
-    /* -------------- Traversal methods -------------- */
-
-    /**
-     * Returns the successor of p, or the head node if p.next has been
-     * linked to self, which will only be true if traversing with a
-     * stale pointer that is now off the list.
-     */
-    final Node succ(Node p) {
-        Node next = p.next;
-        return (p == next) ? head : next;
-    }
-
-    /**
-     * Returns the first unmatched node of the given mode, or null if
-     * none.  Used by methods isEmpty, hasWaitingConsumer.
-     */
-    private Node firstOfMode(boolean isData) {
-        for (Node p = head; p != null; p = succ(p)) {
-            if (!p.isMatched())
-                return (p.isData == isData) ? p : null;
-        }
-        return null;
-    }
-
-    /**
-     * Returns the item in the first unmatched node with isData; or
-     * null if none.  Used by peek.
-     */
-    private E firstDataItem() {
-        for (Node p = head; p != null; p = succ(p)) {
-            Object item = p.item;
-            if (p.isData) {
-                if (item != null && item != p)
-                    return this.<E>cast(item);
-            }
-            else if (item == null)
-                return null;
-        }
-        return null;
-    }
-
-    /**
-     * Traverses and counts unmatched nodes of the given mode.
-     * Used by methods size and getWaitingConsumerCount.
-     */
-    private int countOfMode(boolean data) {
-        int count = 0;
-        for (Node p = head; p != null; ) {
-            if (!p.isMatched()) {
-                if (p.isData != data)
-                    return 0;
-                if (++count == Integer.MAX_VALUE) // saturated
-                    break;
-            }
-            Node n = p.next;
-            if (n != p)
-                p = n;
-            else {
-                count = 0;
-                p = head;
-            }
-        }
-        return count;
-    }
-
-    final class Itr implements Iterator<E> {
-        private Node nextNode;   // next node to return item for
-        private E nextItem;      // the corresponding item
-        private Node lastRet;    // last returned node, to support remove
-        private Node lastPred;   // predecessor to unlink lastRet
-
-        /**
-         * Moves to next node after prev, or first node if prev null.
-         */
-        private void advance(Node prev) {
-            /*
-             * To track and avoid buildup of deleted nodes in the face
-             * of calls to both Queue.remove and Itr.remove, we must
-             * include variants of unsplice and sweep upon each
-             * advance: Upon Itr.remove, we may need to catch up links
-             * from lastPred, and upon other removes, we might need to
-             * skip ahead from stale nodes and unsplice deleted ones
-             * found while advancing.
-             */
-
-            Node r, b; // reset lastPred upon possible deletion of lastRet
-            if ((r = lastRet) != null && !r.isMatched())
-                lastPred = r;    // next lastPred is old lastRet
-            else if ((b = lastPred) == null || b.isMatched())
-                lastPred = null; // at start of list
-            else {
-                Node s, n;       // help with removal of lastPred.next
-                while ((s = b.next) != null &&
-                       s != b && s.isMatched() &&
-                       (n = s.next) != null && n != s)
-                    b.casNext(s, n);
-            }
-
-            this.lastRet = prev;
-
-            for (Node p = prev, s, n;;) {
-                s = (p == null) ? head : p.next;
-                if (s == null)
-                    break;
-                else if (s == p) {
-                    p = null;
-                    continue;
-                }
-                Object item = s.item;
-                if (s.isData) {
-                    if (item != null && item != s) {
-                        nextItem = LinkedTransferQueue.<E>cast(item);
-                        nextNode = s;
-                        return;
-                    }
-                }
-                else if (item == null)
-                    break;
-                // assert s.isMatched();
-                if (p == null)
-                    p = s;
-                else if ((n = s.next) == null)
-                    break;
-                else if (s == n)
-                    p = null;
-                else
-                    p.casNext(s, n);
-            }
-            nextNode = null;
-            nextItem = null;
-        }
-
-        Itr() {
-            advance(null);
-        }
-
-        public final boolean hasNext() {
-            return nextNode != null;
-        }
-
-        public final E next() {
-            Node p = nextNode;
-            if (p == null) throw new NoSuchElementException();
-            E e = nextItem;
-            advance(p);
-            return e;
-        }
-
-        public final void remove() {
-            final Node lastRet = this.lastRet;
-            if (lastRet == null)
-                throw new IllegalStateException();
-            this.lastRet = null;
-            if (lastRet.tryMatchData())
-                unsplice(lastPred, lastRet);
-        }
-    }
-
-    /* -------------- Removal methods -------------- */
-
-    /**
-     * Unsplices (now or later) the given deleted/cancelled node with
-     * the given predecessor.
-     *
-     * @param pred a node that was at one time known to be the
-     * predecessor of s, or null or s itself if s is/was at head
-     * @param s the node to be unspliced
-     */
-    final void unsplice(Node pred, Node s) {
-        s.forgetContents(); // forget unneeded fields
-        /*
-         * See above for rationale. Briefly: if pred still points to
-         * s, try to unlink s.  If s cannot be unlinked, because it is
-         * trailing node or pred might be unlinked, and neither pred
-         * nor s are head or offlist, add to sweepVotes, and if enough
-         * votes have accumulated, sweep.
-         */
-        if (pred != null && pred != s && pred.next == s) {
-            Node n = s.next;
-            if (n == null ||
-                (n != s && pred.casNext(s, n) && pred.isMatched())) {
-                for (;;) {               // check if at, or could be, head
-                    Node h = head;
-                    if (h == pred || h == s || h == null)
-                        return;          // at head or list empty
-                    if (!h.isMatched())
-                        break;
-                    Node hn = h.next;
-                    if (hn == null)
-                        return;          // now empty
-                    if (hn != h && casHead(h, hn))
-                        h.forgetNext();  // advance head
-                }
-                if (pred.next != pred && s.next != s) { // recheck if offlist
-                    for (;;) {           // sweep now if enough votes
-                        int v = sweepVotes;
-                        if (v < SWEEP_THRESHOLD) {
-                            if (casSweepVotes(v, v + 1))
-                                break;
-                        }
-                        else if (casSweepVotes(v, 0)) {
-                            sweep();
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Unlinks matched (typically cancelled) nodes encountered in a
-     * traversal from head.
-     */
-    private void sweep() {
-        for (Node p = head, s, n; p != null && (s = p.next) != null; ) {
-            if (!s.isMatched())
-                // Unmatched nodes are never self-linked
-                p = s;
-            else if ((n = s.next) == null) // trailing node is pinned
-                break;
-            else if (s == n)    // stale
-                // No need to also check for p == s, since that implies s == n
-                p = head;
-            else
-                p.casNext(s, n);
-        }
-    }
-
-    /**
-     * Main implementation of remove(Object)
-     */
-    private boolean findAndRemove(Object e) {
-        if (e != null) {
-            for (Node pred = null, p = head; p != null; ) {
-                Object item = p.item;
-                if (p.isData) {
-                    if (item != null && item != p && e.equals(item) &&
-                        p.tryMatchData()) {
-                        unsplice(pred, p);
-                        return true;
-                    }
-                }
-                else if (item == null)
-                    break;
-                pred = p;
-                if ((p = p.next) == pred) { // stale
-                    pred = null;
-                    p = head;
-                }
-            }
-        }
-        return false;
-    }
-
-
-    /**
-     * Creates an initially empty {@code LinkedTransferQueue}.
-     */
-    public LinkedTransferQueue() {
-    }
-
-    /**
-     * Creates a {@code LinkedTransferQueue}
-     * initially containing the elements of the given collection,
-     * added in traversal order of the collection's iterator.
-     *
-     * @param c the collection of elements to initially contain
-     * @throws NullPointerException if the specified collection or any
-     *         of its elements are null
-     */
-    public LinkedTransferQueue(Collection<? extends E> c) {
-        this();
-        addAll(c);
-    }
-
-    /**
-     * Inserts the specified element at the tail of this queue.
-     * As the queue is unbounded, this method will never block.
-     *
-     * @throws NullPointerException if the specified element is null
-     */
-    public void put(E e) {
-        xfer(e, true, ASYNC, 0);
-    }
-
-    /**
-     * Inserts the specified element at the tail of this queue.
-     * As the queue is unbounded, this method will never block or
-     * return {@code false}.
-     *
-     * @return {@code true} (as specified by
-     *  {@link BlockingQueue#offer(Object,long,TimeUnit) BlockingQueue.offer})
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean offer(E e, long timeout, TimeUnit unit) {
-        xfer(e, true, ASYNC, 0);
-        return true;
-    }
-
-    /**
-     * Inserts the specified element at the tail of this queue.
-     * As the queue is unbounded, this method will never return {@code false}.
-     *
-     * @return {@code true} (as specified by {@link Queue#offer})
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean offer(E e) {
-        xfer(e, true, ASYNC, 0);
-        return true;
-    }
-
-    /**
-     * Inserts the specified element at the tail of this queue.
-     * As the queue is unbounded, this method will never throw
-     * {@link IllegalStateException} or return {@code false}.
-     *
-     * @return {@code true} (as specified by {@link Collection#add})
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean add(E e) {
-        xfer(e, true, ASYNC, 0);
-        return true;
-    }
-
-    /**
-     * Transfers the element to a waiting consumer immediately, if possible.
-     *
-     * <p>More precisely, transfers the specified element immediately
-     * if there exists a consumer already waiting to receive it (in
-     * {@link #take} or timed {@link #poll(long,TimeUnit) poll}),
-     * otherwise returning {@code false} without enqueuing the element.
-     *
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean tryTransfer(E e) {
-        return xfer(e, true, NOW, 0) == null;
-    }
-
-    /**
-     * Transfers the element to a consumer, waiting if necessary to do so.
-     *
-     * <p>More precisely, transfers the specified element immediately
-     * if there exists a consumer already waiting to receive it (in
-     * {@link #take} or timed {@link #poll(long,TimeUnit) poll}),
-     * else inserts the specified element at the tail of this queue
-     * and waits until the element is received by a consumer.
-     *
-     * @throws NullPointerException if the specified element is null
-     */
-    public void transfer(E e) throws InterruptedException {
-        if (xfer(e, true, SYNC, 0) != null) {
-            Thread.interrupted(); // failure possible only due to interrupt
-            throw new InterruptedException();
-        }
-    }
-
-    /**
-     * Transfers the element to a consumer if it is possible to do so
-     * before the timeout elapses.
-     *
-     * <p>More precisely, transfers the specified element immediately
-     * if there exists a consumer already waiting to receive it (in
-     * {@link #take} or timed {@link #poll(long,TimeUnit) poll}),
-     * else inserts the specified element at the tail of this queue
-     * and waits until the element is received by a consumer,
-     * returning {@code false} if the specified wait time elapses
-     * before the element can be transferred.
-     *
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean tryTransfer(E e, long timeout, TimeUnit unit)
-        throws InterruptedException {
-        if (xfer(e, true, TIMED, unit.toNanos(timeout)) == null)
-            return true;
-        if (!Thread.interrupted())
-            return false;
-        throw new InterruptedException();
-    }
-
-    public E take() throws InterruptedException {
-        E e = xfer(null, false, SYNC, 0);
-        if (e != null)
-            return e;
-        Thread.interrupted();
-        throw new InterruptedException();
-    }
-
-    public E poll(long timeout, TimeUnit unit) throws InterruptedException {
-        E e = xfer(null, false, TIMED, unit.toNanos(timeout));
-        if (e != null || !Thread.interrupted())
-            return e;
-        throw new InterruptedException();
-    }
-
-    public E poll() {
-        return xfer(null, false, NOW, 0);
-    }
-
-    /**
-     * @throws NullPointerException     {@inheritDoc}
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    public int drainTo(Collection<? super E> c) {
-        if (c == null)
-            throw new NullPointerException();
-        if (c == this)
-            throw new IllegalArgumentException();
-        int n = 0;
-        E e;
-        while ( (e = poll()) != null) {
-            c.add(e);
-            ++n;
-        }
-        return n;
-    }
-
-    /**
-     * @throws NullPointerException     {@inheritDoc}
-     * @throws IllegalArgumentException {@inheritDoc}
-     */
-    public int drainTo(Collection<? super E> c, int maxElements) {
-        if (c == null)
-            throw new NullPointerException();
-        if (c == this)
-            throw new IllegalArgumentException();
-        int n = 0;
-        E e;
-        while (n < maxElements && (e = poll()) != null) {
-            c.add(e);
-            ++n;
-        }
-        return n;
-    }
-
-    /**
-     * Returns an iterator over the elements in this queue in proper sequence.
-     * The elements will be returned in order from first (head) to last (tail).
-     *
-     * <p>The returned iterator is a "weakly consistent" iterator that
-     * will never throw {@link java.util.ConcurrentModificationException
-     * ConcurrentModificationException}, and guarantees to traverse
-     * elements as they existed upon construction of the iterator, and
-     * may (but is not guaranteed to) reflect any modifications
-     * subsequent to construction.
-     *
-     * @return an iterator over the elements in this queue in proper sequence
-     */
-    public Iterator<E> iterator() {
-        return new Itr();
-    }
-
-    public E peek() {
-        return firstDataItem();
-    }
-
-    /**
-     * Returns {@code true} if this queue contains no elements.
-     *
-     * @return {@code true} if this queue contains no elements
-     */
-    public boolean isEmpty() {
-        for (Node p = head; p != null; p = succ(p)) {
-            if (!p.isMatched())
-                return !p.isData;
-        }
-        return true;
-    }
-
-    public boolean hasWaitingConsumer() {
-        return firstOfMode(false) != null;
-    }
-
-    /**
-     * Returns the number of elements in this queue.  If this queue
-     * contains more than {@code Integer.MAX_VALUE} elements, returns
-     * {@code Integer.MAX_VALUE}.
-     *
-     * <p>Beware that, unlike in most collections, this method is
-     * <em>NOT</em> a constant-time operation. Because of the
-     * asynchronous nature of these queues, determining the current
-     * number of elements requires an O(n) traversal.
-     *
-     * @return the number of elements in this queue
-     */
-    public int size() {
-        return countOfMode(true);
-    }
-
-    public int getWaitingConsumerCount() {
-        return countOfMode(false);
-    }
-
-    /**
-     * Removes a single instance of the specified element from this queue,
-     * if it is present.  More formally, removes an element {@code e} such
-     * that {@code o.equals(e)}, if this queue contains one or more such
-     * elements.
-     * Returns {@code true} if this queue contained the specified element
-     * (or equivalently, if this queue changed as a result of the call).
-     *
-     * @param o element to be removed from this queue, if present
-     * @return {@code true} if this queue changed as a result of the call
-     */
-    public boolean remove(Object o) {
-        return findAndRemove(o);
-    }
-
-    /**
-     * Returns {@code true} if this queue contains the specified element.
-     * More formally, returns {@code true} if and only if this queue contains
-     * at least one element {@code e} such that {@code o.equals(e)}.
-     *
-     * @param o object to be checked for containment in this queue
-     * @return {@code true} if this queue contains the specified element
-     */
-    public boolean contains(Object o) {
-        if (o == null) return false;
-        for (Node p = head; p != null; p = succ(p)) {
-            Object item = p.item;
-            if (p.isData) {
-                if (item != null && item != p && o.equals(item))
-                    return true;
-            }
-            else if (item == null)
-                break;
-        }
-        return false;
-    }
-
-    /**
-     * Always returns {@code Integer.MAX_VALUE} because a
-     * {@code LinkedTransferQueue} is not capacity constrained.
-     *
-     * @return {@code Integer.MAX_VALUE} (as specified by
-     *         {@link BlockingQueue#remainingCapacity()})
-     */
-    public int remainingCapacity() {
-        return Integer.MAX_VALUE;
-    }
-
-    /**
-     * Saves the state to a stream (that is, serializes it).
-     *
-     * @serialData All of the elements (each an {@code E}) in
-     * the proper order, followed by a null
-     * @param s the stream
-     */
-    private void writeObject(java.io.ObjectOutputStream s)
-        throws java.io.IOException {
-        s.defaultWriteObject();
-        for (E e : this)
-            s.writeObject(e);
-        // Use trailing null as sentinel
-        s.writeObject(null);
-    }
-
-    /**
-     * Reconstitutes the Queue instance from a stream (that is,
-     * deserializes it).
-     *
-     * @param s the stream
-     */
-    private void readObject(java.io.ObjectInputStream s)
-        throws java.io.IOException, ClassNotFoundException {
-        s.defaultReadObject();
-        for (;;) {
-            @SuppressWarnings("unchecked") E item = (E) s.readObject();
-            if (item == null)
-                break;
-            else
-                offer(item);
-        }
-    }
-
-    // Unsafe mechanics
-
-    private static final sun.misc.Unsafe UNSAFE;
-    private static final long headOffset;
-    private static final long tailOffset;
-    private static final long sweepVotesOffset;
-    static {
-        try {
-            UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = LinkedTransferQueue.class;
-            headOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("head"));
-            tailOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("tail"));
-            sweepVotesOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("sweepVotes"));
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/Phaser.java b/ojluni/src/main/java/java/util/concurrent/Phaser.java
deleted file mode 100755
index bdafbbb..0000000
--- a/ojluni/src/main/java/java/util/concurrent/Phaser.java
+++ /dev/null
@@ -1,1152 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.concurrent.locks.LockSupport;
-
-/**
- * A reusable synchronization barrier, similar in functionality to
- * {@link java.util.concurrent.CyclicBarrier CyclicBarrier} and
- * {@link java.util.concurrent.CountDownLatch CountDownLatch}
- * but supporting more flexible usage.
- *
- * <p> <b>Registration.</b> Unlike the case for other barriers, the
- * number of parties <em>registered</em> to synchronize on a phaser
- * may vary over time.  Tasks may be registered at any time (using
- * methods {@link #register}, {@link #bulkRegister}, or forms of
- * constructors establishing initial numbers of parties), and
- * optionally deregistered upon any arrival (using {@link
- * #arriveAndDeregister}).  As is the case with most basic
- * synchronization constructs, registration and deregistration affect
- * only internal counts; they do not establish any further internal
- * bookkeeping, so tasks cannot query whether they are registered.
- * (However, you can introduce such bookkeeping by subclassing this
- * class.)
- *
- * <p> <b>Synchronization.</b> Like a {@code CyclicBarrier}, a {@code
- * Phaser} may be repeatedly awaited.  Method {@link
- * #arriveAndAwaitAdvance} has effect analogous to {@link
- * java.util.concurrent.CyclicBarrier#await CyclicBarrier.await}. Each
- * generation of a phaser has an associated phase number. The phase
- * number starts at zero, and advances when all parties arrive at the
- * phaser, wrapping around to zero after reaching {@code
- * Integer.MAX_VALUE}. The use of phase numbers enables independent
- * control of actions upon arrival at a phaser and upon awaiting
- * others, via two kinds of methods that may be invoked by any
- * registered party:
- *
- * <ul>
- *
- *   <li> <b>Arrival.</b> Methods {@link #arrive} and
- *       {@link #arriveAndDeregister} record arrival.  These methods
- *       do not block, but return an associated <em>arrival phase
- *       number</em>; that is, the phase number of the phaser to which
- *       the arrival applied. When the final party for a given phase
- *       arrives, an optional action is performed and the phase
- *       advances.  These actions are performed by the party
- *       triggering a phase advance, and are arranged by overriding
- *       method {@link #onAdvance(int, int)}, which also controls
- *       termination. Overriding this method is similar to, but more
- *       flexible than, providing a barrier action to a {@code
- *       CyclicBarrier}.
- *
- *   <li> <b>Waiting.</b> Method {@link #awaitAdvance} requires an
- *       argument indicating an arrival phase number, and returns when
- *       the phaser advances to (or is already at) a different phase.
- *       Unlike similar constructions using {@code CyclicBarrier},
- *       method {@code awaitAdvance} continues to wait even if the
- *       waiting thread is interrupted. Interruptible and timeout
- *       versions are also available, but exceptions encountered while
- *       tasks wait interruptibly or with timeout do not change the
- *       state of the phaser. If necessary, you can perform any
- *       associated recovery within handlers of those exceptions,
- *       often after invoking {@code forceTermination}.  Phasers may
- *       also be used by tasks executing in a {@link ForkJoinPool},
- *       which will ensure sufficient parallelism to execute tasks
- *       when others are blocked waiting for a phase to advance.
- *
- * </ul>
- *
- * <p> <b>Termination.</b> A phaser may enter a <em>termination</em>
- * state, that may be checked using method {@link #isTerminated}. Upon
- * termination, all synchronization methods immediately return without
- * waiting for advance, as indicated by a negative return value.
- * Similarly, attempts to register upon termination have no effect.
- * Termination is triggered when an invocation of {@code onAdvance}
- * returns {@code true}. The default implementation returns {@code
- * true} if a deregistration has caused the number of registered
- * parties to become zero.  As illustrated below, when phasers control
- * actions with a fixed number of iterations, it is often convenient
- * to override this method to cause termination when the current phase
- * number reaches a threshold. Method {@link #forceTermination} is
- * also available to abruptly release waiting threads and allow them
- * to terminate.
- *
- * <p> <b>Tiering.</b> Phasers may be <em>tiered</em> (i.e.,
- * constructed in tree structures) to reduce contention. Phasers with
- * large numbers of parties that would otherwise experience heavy
- * synchronization contention costs may instead be set up so that
- * groups of sub-phasers share a common parent.  This may greatly
- * increase throughput even though it incurs greater per-operation
- * overhead.
- *
- * <p>In a tree of tiered phasers, registration and deregistration of
- * child phasers with their parent are managed automatically.
- * Whenever the number of registered parties of a child phaser becomes
- * non-zero (as established in the {@link #Phaser(Phaser,int)}
- * constructor, {@link #register}, or {@link #bulkRegister}), the
- * child phaser is registered with its parent.  Whenever the number of
- * registered parties becomes zero as the result of an invocation of
- * {@link #arriveAndDeregister}, the child phaser is deregistered
- * from its parent.
- *
- * <p><b>Monitoring.</b> While synchronization methods may be invoked
- * only by registered parties, the current state of a phaser may be
- * monitored by any caller.  At any given moment there are {@link
- * #getRegisteredParties} parties in total, of which {@link
- * #getArrivedParties} have arrived at the current phase ({@link
- * #getPhase}).  When the remaining ({@link #getUnarrivedParties})
- * parties arrive, the phase advances.  The values returned by these
- * methods may reflect transient states and so are not in general
- * useful for synchronization control.  Method {@link #toString}
- * returns snapshots of these state queries in a form convenient for
- * informal monitoring.
- *
- * <p><b>Sample usages:</b>
- *
- * <p>A {@code Phaser} may be used instead of a {@code CountDownLatch}
- * to control a one-shot action serving a variable number of parties.
- * The typical idiom is for the method setting this up to first
- * register, then start the actions, then deregister, as in:
- *
- *  <pre> {@code
- * void runTasks(List<Runnable> tasks) {
- *   final Phaser phaser = new Phaser(1); // "1" to register self
- *   // create and start threads
- *   for (final Runnable task : tasks) {
- *     phaser.register();
- *     new Thread() {
- *       public void run() {
- *         phaser.arriveAndAwaitAdvance(); // await all creation
- *         task.run();
- *       }
- *     }.start();
- *   }
- *
- *   // allow threads to start and deregister self
- *   phaser.arriveAndDeregister();
- * }}</pre>
- *
- * <p>One way to cause a set of threads to repeatedly perform actions
- * for a given number of iterations is to override {@code onAdvance}:
- *
- *  <pre> {@code
- * void startTasks(List<Runnable> tasks, final int iterations) {
- *   final Phaser phaser = new Phaser() {
- *     protected boolean onAdvance(int phase, int registeredParties) {
- *       return phase >= iterations || registeredParties == 0;
- *     }
- *   };
- *   phaser.register();
- *   for (final Runnable task : tasks) {
- *     phaser.register();
- *     new Thread() {
- *       public void run() {
- *         do {
- *           task.run();
- *           phaser.arriveAndAwaitAdvance();
- *         } while (!phaser.isTerminated());
- *       }
- *     }.start();
- *   }
- *   phaser.arriveAndDeregister(); // deregister self, don't wait
- * }}</pre>
- *
- * If the main task must later await termination, it
- * may re-register and then execute a similar loop:
- *  <pre> {@code
- *   // ...
- *   phaser.register();
- *   while (!phaser.isTerminated())
- *     phaser.arriveAndAwaitAdvance();}</pre>
- *
- * <p>Related constructions may be used to await particular phase numbers
- * in contexts where you are sure that the phase will never wrap around
- * {@code Integer.MAX_VALUE}. For example:
- *
- *  <pre> {@code
- * void awaitPhase(Phaser phaser, int phase) {
- *   int p = phaser.register(); // assumes caller not already registered
- *   while (p < phase) {
- *     if (phaser.isTerminated())
- *       // ... deal with unexpected termination
- *     else
- *       p = phaser.arriveAndAwaitAdvance();
- *   }
- *   phaser.arriveAndDeregister();
- * }}</pre>
- *
- *
- * <p>To create a set of {@code n} tasks using a tree of phasers, you
- * could use code of the following form, assuming a Task class with a
- * constructor accepting a {@code Phaser} that it registers with upon
- * construction. After invocation of {@code build(new Task[n], 0, n,
- * new Phaser())}, these tasks could then be started, for example by
- * submitting to a pool:
- *
- *  <pre> {@code
- * void build(Task[] tasks, int lo, int hi, Phaser ph) {
- *   if (hi - lo > TASKS_PER_PHASER) {
- *     for (int i = lo; i < hi; i += TASKS_PER_PHASER) {
- *       int j = Math.min(i + TASKS_PER_PHASER, hi);
- *       build(tasks, i, j, new Phaser(ph));
- *     }
- *   } else {
- *     for (int i = lo; i < hi; ++i)
- *       tasks[i] = new Task(ph);
- *       // assumes new Task(ph) performs ph.register()
- *   }
- * }}</pre>
- *
- * The best value of {@code TASKS_PER_PHASER} depends mainly on
- * expected synchronization rates. A value as low as four may
- * be appropriate for extremely small per-phase task bodies (thus
- * high rates), or up to hundreds for extremely large ones.
- *
- * <p><b>Implementation notes</b>: This implementation restricts the
- * maximum number of parties to 65535. Attempts to register additional
- * parties result in {@code IllegalStateException}. However, you can and
- * should create tiered phasers to accommodate arbitrarily large sets
- * of participants.
- *
- * @since 1.7
- * @author Doug Lea
- */
-public class Phaser {
-    /*
-     * This class implements an extension of X10 "clocks".  Thanks to
-     * Vijay Saraswat for the idea, and to Vivek Sarkar for
-     * enhancements to extend functionality.
-     */
-
-    /**
-     * Primary state representation, holding four bit-fields:
-     *
-     * unarrived  -- the number of parties yet to hit barrier (bits  0-15)
-     * parties    -- the number of parties to wait            (bits 16-31)
-     * phase      -- the generation of the barrier            (bits 32-62)
-     * terminated -- set if barrier is terminated             (bit  63 / sign)
-     *
-     * Except that a phaser with no registered parties is
-     * distinguished by the otherwise illegal state of having zero
-     * parties and one unarrived parties (encoded as EMPTY below).
-     *
-     * To efficiently maintain atomicity, these values are packed into
-     * a single (atomic) long. Good performance relies on keeping
-     * state decoding and encoding simple, and keeping race windows
-     * short.
-     *
-     * All state updates are performed via CAS except initial
-     * registration of a sub-phaser (i.e., one with a non-null
-     * parent).  In this (relatively rare) case, we use built-in
-     * synchronization to lock while first registering with its
-     * parent.
-     *
-     * The phase of a subphaser is allowed to lag that of its
-     * ancestors until it is actually accessed -- see method
-     * reconcileState.
-     */
-    private volatile long state;
-
-    private static final int  MAX_PARTIES     = 0xffff;
-    private static final int  MAX_PHASE       = Integer.MAX_VALUE;
-    private static final int  PARTIES_SHIFT   = 16;
-    private static final int  PHASE_SHIFT     = 32;
-    private static final int  UNARRIVED_MASK  = 0xffff;      // to mask ints
-    private static final long PARTIES_MASK    = 0xffff0000L; // to mask longs
-    private static final long TERMINATION_BIT = 1L << 63;
-
-    // some special values
-    private static final int  ONE_ARRIVAL     = 1;
-    private static final int  ONE_PARTY       = 1 << PARTIES_SHIFT;
-    private static final int  EMPTY           = 1;
-
-    // The following unpacking methods are usually manually inlined
-
-    private static int unarrivedOf(long s) {
-        int counts = (int)s;
-        return (counts == EMPTY) ? 0 : counts & UNARRIVED_MASK;
-    }
-
-    private static int partiesOf(long s) {
-        return (int)s >>> PARTIES_SHIFT;
-    }
-
-    private static int phaseOf(long s) {
-        return (int)(s >>> PHASE_SHIFT);
-    }
-
-    private static int arrivedOf(long s) {
-        int counts = (int)s;
-        return (counts == EMPTY) ? 0 :
-            (counts >>> PARTIES_SHIFT) - (counts & UNARRIVED_MASK);
-    }
-
-    /**
-     * The parent of this phaser, or null if none
-     */
-    private final Phaser parent;
-
-    /**
-     * The root of phaser tree. Equals this if not in a tree.
-     */
-    private final Phaser root;
-
-    /**
-     * Heads of Treiber stacks for waiting threads. To eliminate
-     * contention when releasing some threads while adding others, we
-     * use two of them, alternating across even and odd phases.
-     * Subphasers share queues with root to speed up releases.
-     */
-    private final AtomicReference<QNode> evenQ;
-    private final AtomicReference<QNode> oddQ;
-
-    private AtomicReference<QNode> queueFor(int phase) {
-        return ((phase & 1) == 0) ? evenQ : oddQ;
-    }
-
-    /**
-     * Returns message string for bounds exceptions on arrival.
-     */
-    private String badArrive(long s) {
-        return "Attempted arrival of unregistered party for " +
-            stateToString(s);
-    }
-
-    /**
-     * Returns message string for bounds exceptions on registration.
-     */
-    private String badRegister(long s) {
-        return "Attempt to register more than " +
-            MAX_PARTIES + " parties for " + stateToString(s);
-    }
-
-    /**
-     * Main implementation for methods arrive and arriveAndDeregister.
-     * Manually tuned to speed up and minimize race windows for the
-     * common case of just decrementing unarrived field.
-     *
-     * @param deregister false for arrive, true for arriveAndDeregister
-     */
-    private int doArrive(boolean deregister) {
-        int adj = deregister ? ONE_ARRIVAL|ONE_PARTY : ONE_ARRIVAL;
-        final Phaser root = this.root;
-        for (;;) {
-            long s = (root == this) ? state : reconcileState();
-            int phase = (int)(s >>> PHASE_SHIFT);
-            int counts = (int)s;
-            int unarrived = (counts & UNARRIVED_MASK) - 1;
-            if (phase < 0)
-                return phase;
-            else if (counts == EMPTY || unarrived < 0) {
-                if (root == this || reconcileState() == s)
-                    throw new IllegalStateException(badArrive(s));
-            }
-            else if (UNSAFE.compareAndSwapLong(this, stateOffset, s, s-=adj)) {
-                if (unarrived == 0) {
-                    long n = s & PARTIES_MASK;  // base of next state
-                    int nextUnarrived = (int)n >>> PARTIES_SHIFT;
-                    if (root != this)
-                        return parent.doArrive(nextUnarrived == 0);
-                    if (onAdvance(phase, nextUnarrived))
-                        n |= TERMINATION_BIT;
-                    else if (nextUnarrived == 0)
-                        n |= EMPTY;
-                    else
-                        n |= nextUnarrived;
-                    n |= (long)((phase + 1) & MAX_PHASE) << PHASE_SHIFT;
-                    UNSAFE.compareAndSwapLong(this, stateOffset, s, n);
-                    releaseWaiters(phase);
-                }
-                return phase;
-            }
-        }
-    }
-
-    /**
-     * Implementation of register, bulkRegister
-     *
-     * @param registrations number to add to both parties and
-     * unarrived fields. Must be greater than zero.
-     */
-    private int doRegister(int registrations) {
-        // adjustment to state
-        long adj = ((long)registrations << PARTIES_SHIFT) | registrations;
-        final Phaser parent = this.parent;
-        int phase;
-        for (;;) {
-            long s = state;
-            int counts = (int)s;
-            int parties = counts >>> PARTIES_SHIFT;
-            int unarrived = counts & UNARRIVED_MASK;
-            if (registrations > MAX_PARTIES - parties)
-                throw new IllegalStateException(badRegister(s));
-            else if ((phase = (int)(s >>> PHASE_SHIFT)) < 0)
-                break;
-            else if (counts != EMPTY) {             // not 1st registration
-                if (parent == null || reconcileState() == s) {
-                    if (unarrived == 0)             // wait out advance
-                        root.internalAwaitAdvance(phase, null);
-                    else if (UNSAFE.compareAndSwapLong(this, stateOffset,
-                                                       s, s + adj))
-                        break;
-                }
-            }
-            else if (parent == null) {              // 1st root registration
-                long next = ((long)phase << PHASE_SHIFT) | adj;
-                if (UNSAFE.compareAndSwapLong(this, stateOffset, s, next))
-                    break;
-            }
-            else {
-                synchronized (this) {               // 1st sub registration
-                    if (state == s) {               // recheck under lock
-                        parent.doRegister(1);
-                        do {                        // force current phase
-                            phase = (int)(root.state >>> PHASE_SHIFT);
-                            // assert phase < 0 || (int)state == EMPTY;
-                        } while (!UNSAFE.compareAndSwapLong
-                                 (this, stateOffset, state,
-                                  ((long)phase << PHASE_SHIFT) | adj));
-                        break;
-                    }
-                }
-            }
-        }
-        return phase;
-    }
-
-    /**
-     * Resolves lagged phase propagation from root if necessary.
-     * Reconciliation normally occurs when root has advanced but
-     * subphasers have not yet done so, in which case they must finish
-     * their own advance by setting unarrived to parties (or if
-     * parties is zero, resetting to unregistered EMPTY state).
-     * However, this method may also be called when "floating"
-     * subphasers with possibly some unarrived parties are merely
-     * catching up to current phase, in which case counts are
-     * unaffected.
-     *
-     * @return reconciled state
-     */
-    private long reconcileState() {
-        final Phaser root = this.root;
-        long s = state;
-        if (root != this) {
-            int phase, u, p;
-            // CAS root phase with current parties; possibly trip unarrived
-            while ((phase = (int)(root.state >>> PHASE_SHIFT)) !=
-                   (int)(s >>> PHASE_SHIFT) &&
-                   !UNSAFE.compareAndSwapLong
-                   (this, stateOffset, s,
-                    s = (((long)phase << PHASE_SHIFT) |
-                         (s & PARTIES_MASK) |
-                         ((p = (int)s >>> PARTIES_SHIFT) == 0 ? EMPTY :
-                          (u = (int)s & UNARRIVED_MASK) == 0 ? p : u))))
-                s = state;
-        }
-        return s;
-    }
-
-    /**
-     * Creates a new phaser with no initially registered parties, no
-     * parent, and initial phase number 0. Any thread using this
-     * phaser will need to first register for it.
-     */
-    public Phaser() {
-        this(null, 0);
-    }
-
-    /**
-     * Creates a new phaser with the given number of registered
-     * unarrived parties, no parent, and initial phase number 0.
-     *
-     * @param parties the number of parties required to advance to the
-     * next phase
-     * @throws IllegalArgumentException if parties less than zero
-     * or greater than the maximum number of parties supported
-     */
-    public Phaser(int parties) {
-        this(null, parties);
-    }
-
-    /**
-     * Equivalent to {@link #Phaser(Phaser, int) Phaser(parent, 0)}.
-     *
-     * @param parent the parent phaser
-     */
-    public Phaser(Phaser parent) {
-        this(parent, 0);
-    }
-
-    /**
-     * Creates a new phaser with the given parent and number of
-     * registered unarrived parties.  When the given parent is non-null
-     * and the given number of parties is greater than zero, this
-     * child phaser is registered with its parent.
-     *
-     * @param parent the parent phaser
-     * @param parties the number of parties required to advance to the
-     * next phase
-     * @throws IllegalArgumentException if parties less than zero
-     * or greater than the maximum number of parties supported
-     */
-    public Phaser(Phaser parent, int parties) {
-        if (parties >>> PARTIES_SHIFT != 0)
-            throw new IllegalArgumentException("Illegal number of parties");
-        int phase = 0;
-        this.parent = parent;
-        if (parent != null) {
-            final Phaser root = parent.root;
-            this.root = root;
-            this.evenQ = root.evenQ;
-            this.oddQ = root.oddQ;
-            if (parties != 0)
-                phase = parent.doRegister(1);
-        }
-        else {
-            this.root = this;
-            this.evenQ = new AtomicReference<QNode>();
-            this.oddQ = new AtomicReference<QNode>();
-        }
-        this.state = (parties == 0) ? (long)EMPTY :
-            ((long)phase << PHASE_SHIFT) |
-            ((long)parties << PARTIES_SHIFT) |
-            ((long)parties);
-    }
-
-    /**
-     * Adds a new unarrived party to this phaser.  If an ongoing
-     * invocation of {@link #onAdvance} is in progress, this method
-     * may await its completion before returning.  If this phaser has
-     * a parent, and this phaser previously had no registered parties,
-     * this child phaser is also registered with its parent. If
-     * this phaser is terminated, the attempt to register has
-     * no effect, and a negative value is returned.
-     *
-     * @return the arrival phase number to which this registration
-     * applied.  If this value is negative, then this phaser has
-     * terminated, in which case registration has no effect.
-     * @throws IllegalStateException if attempting to register more
-     * than the maximum supported number of parties
-     */
-    public int register() {
-        return doRegister(1);
-    }
-
-    /**
-     * Adds the given number of new unarrived parties to this phaser.
-     * If an ongoing invocation of {@link #onAdvance} is in progress,
-     * this method may await its completion before returning.  If this
-     * phaser has a parent, and the given number of parties is greater
-     * than zero, and this phaser previously had no registered
-     * parties, this child phaser is also registered with its parent.
-     * If this phaser is terminated, the attempt to register has no
-     * effect, and a negative value is returned.
-     *
-     * @param parties the number of additional parties required to
-     * advance to the next phase
-     * @return the arrival phase number to which this registration
-     * applied.  If this value is negative, then this phaser has
-     * terminated, in which case registration has no effect.
-     * @throws IllegalStateException if attempting to register more
-     * than the maximum supported number of parties
-     * @throws IllegalArgumentException if {@code parties < 0}
-     */
-    public int bulkRegister(int parties) {
-        if (parties < 0)
-            throw new IllegalArgumentException();
-        if (parties == 0)
-            return getPhase();
-        return doRegister(parties);
-    }
-
-    /**
-     * Arrives at this phaser, without waiting for others to arrive.
-     *
-     * <p>It is a usage error for an unregistered party to invoke this
-     * method.  However, this error may result in an {@code
-     * IllegalStateException} only upon some subsequent operation on
-     * this phaser, if ever.
-     *
-     * @return the arrival phase number, or a negative value if terminated
-     * @throws IllegalStateException if not terminated and the number
-     * of unarrived parties would become negative
-     */
-    public int arrive() {
-        return doArrive(false);
-    }
-
-    /**
-     * Arrives at this phaser and deregisters from it without waiting
-     * for others to arrive. Deregistration reduces the number of
-     * parties required to advance in future phases.  If this phaser
-     * has a parent, and deregistration causes this phaser to have
-     * zero parties, this phaser is also deregistered from its parent.
-     *
-     * <p>It is a usage error for an unregistered party to invoke this
-     * method.  However, this error may result in an {@code
-     * IllegalStateException} only upon some subsequent operation on
-     * this phaser, if ever.
-     *
-     * @return the arrival phase number, or a negative value if terminated
-     * @throws IllegalStateException if not terminated and the number
-     * of registered or unarrived parties would become negative
-     */
-    public int arriveAndDeregister() {
-        return doArrive(true);
-    }
-
-    /**
-     * Arrives at this phaser and awaits others. Equivalent in effect
-     * to {@code awaitAdvance(arrive())}.  If you need to await with
-     * interruption or timeout, you can arrange this with an analogous
-     * construction using one of the other forms of the {@code
-     * awaitAdvance} method.  If instead you need to deregister upon
-     * arrival, use {@code awaitAdvance(arriveAndDeregister())}.
-     *
-     * <p>It is a usage error for an unregistered party to invoke this
-     * method.  However, this error may result in an {@code
-     * IllegalStateException} only upon some subsequent operation on
-     * this phaser, if ever.
-     *
-     * @return the arrival phase number, or the (negative)
-     * {@linkplain #getPhase() current phase} if terminated
-     * @throws IllegalStateException if not terminated and the number
-     * of unarrived parties would become negative
-     */
-    public int arriveAndAwaitAdvance() {
-        // Specialization of doArrive+awaitAdvance eliminating some reads/paths
-        final Phaser root = this.root;
-        for (;;) {
-            long s = (root == this) ? state : reconcileState();
-            int phase = (int)(s >>> PHASE_SHIFT);
-            int counts = (int)s;
-            int unarrived = (counts & UNARRIVED_MASK) - 1;
-            if (phase < 0)
-                return phase;
-            else if (counts == EMPTY || unarrived < 0) {
-                if (reconcileState() == s)
-                    throw new IllegalStateException(badArrive(s));
-            }
-            else if (UNSAFE.compareAndSwapLong(this, stateOffset, s,
-                                               s -= ONE_ARRIVAL)) {
-                if (unarrived != 0)
-                    return root.internalAwaitAdvance(phase, null);
-                if (root != this)
-                    return parent.arriveAndAwaitAdvance();
-                long n = s & PARTIES_MASK;  // base of next state
-                int nextUnarrived = (int)n >>> PARTIES_SHIFT;
-                if (onAdvance(phase, nextUnarrived))
-                    n |= TERMINATION_BIT;
-                else if (nextUnarrived == 0)
-                    n |= EMPTY;
-                else
-                    n |= nextUnarrived;
-                int nextPhase = (phase + 1) & MAX_PHASE;
-                n |= (long)nextPhase << PHASE_SHIFT;
-                if (!UNSAFE.compareAndSwapLong(this, stateOffset, s, n))
-                    return (int)(state >>> PHASE_SHIFT); // terminated
-                releaseWaiters(phase);
-                return nextPhase;
-            }
-        }
-    }
-
-    /**
-     * Awaits the phase of this phaser to advance from the given phase
-     * value, returning immediately if the current phase is not equal
-     * to the given phase value or this phaser is terminated.
-     *
-     * @param phase an arrival phase number, or negative value if
-     * terminated; this argument is normally the value returned by a
-     * previous call to {@code arrive} or {@code arriveAndDeregister}.
-     * @return the next arrival phase number, or the argument if it is
-     * negative, or the (negative) {@linkplain #getPhase() current phase}
-     * if terminated
-     */
-    public int awaitAdvance(int phase) {
-        final Phaser root = this.root;
-        long s = (root == this) ? state : reconcileState();
-        int p = (int)(s >>> PHASE_SHIFT);
-        if (phase < 0)
-            return phase;
-        if (p == phase)
-            return root.internalAwaitAdvance(phase, null);
-        return p;
-    }
-
-    /**
-     * Awaits the phase of this phaser to advance from the given phase
-     * value, throwing {@code InterruptedException} if interrupted
-     * while waiting, or returning immediately if the current phase is
-     * not equal to the given phase value or this phaser is
-     * terminated.
-     *
-     * @param phase an arrival phase number, or negative value if
-     * terminated; this argument is normally the value returned by a
-     * previous call to {@code arrive} or {@code arriveAndDeregister}.
-     * @return the next arrival phase number, or the argument if it is
-     * negative, or the (negative) {@linkplain #getPhase() current phase}
-     * if terminated
-     * @throws InterruptedException if thread interrupted while waiting
-     */
-    public int awaitAdvanceInterruptibly(int phase)
-        throws InterruptedException {
-        final Phaser root = this.root;
-        long s = (root == this) ? state : reconcileState();
-        int p = (int)(s >>> PHASE_SHIFT);
-        if (phase < 0)
-            return phase;
-        if (p == phase) {
-            QNode node = new QNode(this, phase, true, false, 0L);
-            p = root.internalAwaitAdvance(phase, node);
-            if (node.wasInterrupted)
-                throw new InterruptedException();
-        }
-        return p;
-    }
-
-    /**
-     * Awaits the phase of this phaser to advance from the given phase
-     * value or the given timeout to elapse, throwing {@code
-     * InterruptedException} if interrupted while waiting, or
-     * returning immediately if the current phase is not equal to the
-     * given phase value or this phaser is terminated.
-     *
-     * @param phase an arrival phase number, or negative value if
-     * terminated; this argument is normally the value returned by a
-     * previous call to {@code arrive} or {@code arriveAndDeregister}.
-     * @param timeout how long to wait before giving up, in units of
-     *        {@code unit}
-     * @param unit a {@code TimeUnit} determining how to interpret the
-     *        {@code timeout} parameter
-     * @return the next arrival phase number, or the argument if it is
-     * negative, or the (negative) {@linkplain #getPhase() current phase}
-     * if terminated
-     * @throws InterruptedException if thread interrupted while waiting
-     * @throws TimeoutException if timed out while waiting
-     */
-    public int awaitAdvanceInterruptibly(int phase,
-                                         long timeout, TimeUnit unit)
-        throws InterruptedException, TimeoutException {
-        long nanos = unit.toNanos(timeout);
-        final Phaser root = this.root;
-        long s = (root == this) ? state : reconcileState();
-        int p = (int)(s >>> PHASE_SHIFT);
-        if (phase < 0)
-            return phase;
-        if (p == phase) {
-            QNode node = new QNode(this, phase, true, true, nanos);
-            p = root.internalAwaitAdvance(phase, node);
-            if (node.wasInterrupted)
-                throw new InterruptedException();
-            else if (p == phase)
-                throw new TimeoutException();
-        }
-        return p;
-    }
-
-    /**
-     * Forces this phaser to enter termination state.  Counts of
-     * registered parties are unaffected.  If this phaser is a member
-     * of a tiered set of phasers, then all of the phasers in the set
-     * are terminated.  If this phaser is already terminated, this
-     * method has no effect.  This method may be useful for
-     * coordinating recovery after one or more tasks encounter
-     * unexpected exceptions.
-     */
-    public void forceTermination() {
-        // Only need to change root state
-        final Phaser root = this.root;
-        long s;
-        while ((s = root.state) >= 0) {
-            if (UNSAFE.compareAndSwapLong(root, stateOffset,
-                                          s, s | TERMINATION_BIT)) {
-                // signal all threads
-                releaseWaiters(0);
-                releaseWaiters(1);
-                return;
-            }
-        }
-    }
-
-    /**
-     * Returns the current phase number. The maximum phase number is
-     * {@code Integer.MAX_VALUE}, after which it restarts at
-     * zero. Upon termination, the phase number is negative,
-     * in which case the prevailing phase prior to termination
-     * may be obtained via {@code getPhase() + Integer.MIN_VALUE}.
-     *
-     * @return the phase number, or a negative value if terminated
-     */
-    public final int getPhase() {
-        return (int)(root.state >>> PHASE_SHIFT);
-    }
-
-    /**
-     * Returns the number of parties registered at this phaser.
-     *
-     * @return the number of parties
-     */
-    public int getRegisteredParties() {
-        return partiesOf(state);
-    }
-
-    /**
-     * Returns the number of registered parties that have arrived at
-     * the current phase of this phaser. If this phaser has terminated,
-     * the returned value is meaningless and arbitrary.
-     *
-     * @return the number of arrived parties
-     */
-    public int getArrivedParties() {
-        return arrivedOf(reconcileState());
-    }
-
-    /**
-     * Returns the number of registered parties that have not yet
-     * arrived at the current phase of this phaser. If this phaser has
-     * terminated, the returned value is meaningless and arbitrary.
-     *
-     * @return the number of unarrived parties
-     */
-    public int getUnarrivedParties() {
-        return unarrivedOf(reconcileState());
-    }
-
-    /**
-     * Returns the parent of this phaser, or {@code null} if none.
-     *
-     * @return the parent of this phaser, or {@code null} if none
-     */
-    public Phaser getParent() {
-        return parent;
-    }
-
-    /**
-     * Returns the root ancestor of this phaser, which is the same as
-     * this phaser if it has no parent.
-     *
-     * @return the root ancestor of this phaser
-     */
-    public Phaser getRoot() {
-        return root;
-    }
-
-    /**
-     * Returns {@code true} if this phaser has been terminated.
-     *
-     * @return {@code true} if this phaser has been terminated
-     */
-    public boolean isTerminated() {
-        return root.state < 0L;
-    }
-
-    /**
-     * Overridable method to perform an action upon impending phase
-     * advance, and to control termination. This method is invoked
-     * upon arrival of the party advancing this phaser (when all other
-     * waiting parties are dormant).  If this method returns {@code
-     * true}, this phaser will be set to a final termination state
-     * upon advance, and subsequent calls to {@link #isTerminated}
-     * will return true. Any (unchecked) Exception or Error thrown by
-     * an invocation of this method is propagated to the party
-     * attempting to advance this phaser, in which case no advance
-     * occurs.
-     *
-     * <p>The arguments to this method provide the state of the phaser
-     * prevailing for the current transition.  The effects of invoking
-     * arrival, registration, and waiting methods on this phaser from
-     * within {@code onAdvance} are unspecified and should not be
-     * relied on.
-     *
-     * <p>If this phaser is a member of a tiered set of phasers, then
-     * {@code onAdvance} is invoked only for its root phaser on each
-     * advance.
-     *
-     * <p>To support the most common use cases, the default
-     * implementation of this method returns {@code true} when the
-     * number of registered parties has become zero as the result of a
-     * party invoking {@code arriveAndDeregister}.  You can disable
-     * this behavior, thus enabling continuation upon future
-     * registrations, by overriding this method to always return
-     * {@code false}:
-     *
-     * <pre> {@code
-     * Phaser phaser = new Phaser() {
-     *   protected boolean onAdvance(int phase, int parties) { return false; }
-     * }}</pre>
-     *
-     * @param phase the current phase number on entry to this method,
-     * before this phaser is advanced
-     * @param registeredParties the current number of registered parties
-     * @return {@code true} if this phaser should terminate
-     */
-    protected boolean onAdvance(int phase, int registeredParties) {
-        return registeredParties == 0;
-    }
-
-    /**
-     * Returns a string identifying this phaser, as well as its
-     * state.  The state, in brackets, includes the String {@code
-     * "phase = "} followed by the phase number, {@code "parties = "}
-     * followed by the number of registered parties, and {@code
-     * "arrived = "} followed by the number of arrived parties.
-     *
-     * @return a string identifying this phaser, as well as its state
-     */
-    public String toString() {
-        return stateToString(reconcileState());
-    }
-
-    /**
-     * Implementation of toString and string-based error messages
-     */
-    private String stateToString(long s) {
-        return super.toString() +
-            "[phase = " + phaseOf(s) +
-            " parties = " + partiesOf(s) +
-            " arrived = " + arrivedOf(s) + "]";
-    }
-
-    // Waiting mechanics
-
-    /**
-     * Removes and signals threads from queue for phase.
-     */
-    private void releaseWaiters(int phase) {
-        QNode q;   // first element of queue
-        Thread t;  // its thread
-        AtomicReference<QNode> head = (phase & 1) == 0 ? evenQ : oddQ;
-        while ((q = head.get()) != null &&
-               q.phase != (int)(root.state >>> PHASE_SHIFT)) {
-            if (head.compareAndSet(q, q.next) &&
-                (t = q.thread) != null) {
-                q.thread = null;
-                LockSupport.unpark(t);
-            }
-        }
-    }
-
-    /**
-     * Variant of releaseWaiters that additionally tries to remove any
-     * nodes no longer waiting for advance due to timeout or
-     * interrupt. Currently, nodes are removed only if they are at
-     * head of queue, which suffices to reduce memory footprint in
-     * most usages.
-     *
-     * @return current phase on exit
-     */
-    private int abortWait(int phase) {
-        AtomicReference<QNode> head = (phase & 1) == 0 ? evenQ : oddQ;
-        for (;;) {
-            Thread t;
-            QNode q = head.get();
-            int p = (int)(root.state >>> PHASE_SHIFT);
-            if (q == null || ((t = q.thread) != null && q.phase == p))
-                return p;
-            if (head.compareAndSet(q, q.next) && t != null) {
-                q.thread = null;
-                LockSupport.unpark(t);
-            }
-        }
-    }
-
-    /** The number of CPUs, for spin control */
-    private static final int NCPU = Runtime.getRuntime().availableProcessors();
-
-    /**
-     * The number of times to spin before blocking while waiting for
-     * advance, per arrival while waiting. On multiprocessors, fully
-     * blocking and waking up a large number of threads all at once is
-     * usually a very slow process, so we use rechargeable spins to
-     * avoid it when threads regularly arrive: When a thread in
-     * internalAwaitAdvance notices another arrival before blocking,
-     * and there appear to be enough CPUs available, it spins
-     * SPINS_PER_ARRIVAL more times before blocking. The value trades
-     * off good-citizenship vs big unnecessary slowdowns.
-     */
-    static final int SPINS_PER_ARRIVAL = (NCPU < 2) ? 1 : 1 << 8;
-
-    /**
-     * Possibly blocks and waits for phase to advance unless aborted.
-     * Call only from root node.
-     *
-     * @param phase current phase
-     * @param node if non-null, the wait node to track interrupt and timeout;
-     * if null, denotes noninterruptible wait
-     * @return current phase
-     */
-    private int internalAwaitAdvance(int phase, QNode node) {
-        releaseWaiters(phase-1);          // ensure old queue clean
-        boolean queued = false;           // true when node is enqueued
-        int lastUnarrived = 0;            // to increase spins upon change
-        int spins = SPINS_PER_ARRIVAL;
-        long s;
-        int p;
-        while ((p = (int)((s = state) >>> PHASE_SHIFT)) == phase) {
-            if (node == null) {           // spinning in noninterruptible mode
-                int unarrived = (int)s & UNARRIVED_MASK;
-                if (unarrived != lastUnarrived &&
-                    (lastUnarrived = unarrived) < NCPU)
-                    spins += SPINS_PER_ARRIVAL;
-                boolean interrupted = Thread.interrupted();
-                if (interrupted || --spins < 0) { // need node to record intr
-                    node = new QNode(this, phase, false, false, 0L);
-                    node.wasInterrupted = interrupted;
-                }
-            }
-            else if (node.isReleasable()) // done or aborted
-                break;
-            else if (!queued) {           // push onto queue
-                AtomicReference<QNode> head = (phase & 1) == 0 ? evenQ : oddQ;
-                QNode q = node.next = head.get();
-                if ((q == null || q.phase == phase) &&
-                    (int)(state >>> PHASE_SHIFT) == phase) // avoid stale enq
-                    queued = head.compareAndSet(q, node);
-            }
-            else {
-                try {
-                    ForkJoinPool.managedBlock(node);
-                } catch (InterruptedException ie) {
-                    node.wasInterrupted = true;
-                }
-            }
-        }
-
-        if (node != null) {
-            if (node.thread != null)
-                node.thread = null;       // avoid need for unpark()
-            if (node.wasInterrupted && !node.interruptible)
-                Thread.currentThread().interrupt();
-            if (p == phase && (p = (int)(state >>> PHASE_SHIFT)) == phase)
-                return abortWait(phase); // possibly clean up on abort
-        }
-        releaseWaiters(phase);
-        return p;
-    }
-
-    /**
-     * Wait nodes for Treiber stack representing wait queue
-     */
-    static final class QNode implements ForkJoinPool.ManagedBlocker {
-        final Phaser phaser;
-        final int phase;
-        final boolean interruptible;
-        final boolean timed;
-        boolean wasInterrupted;
-        long nanos;
-        long lastTime;
-        volatile Thread thread; // nulled to cancel wait
-        QNode next;
-
-        QNode(Phaser phaser, int phase, boolean interruptible,
-              boolean timed, long nanos) {
-            this.phaser = phaser;
-            this.phase = phase;
-            this.interruptible = interruptible;
-            this.nanos = nanos;
-            this.timed = timed;
-            this.lastTime = timed ? System.nanoTime() : 0L;
-            thread = Thread.currentThread();
-        }
-
-        public boolean isReleasable() {
-            if (thread == null)
-                return true;
-            if (phaser.getPhase() != phase) {
-                thread = null;
-                return true;
-            }
-            if (Thread.interrupted())
-                wasInterrupted = true;
-            if (wasInterrupted && interruptible) {
-                thread = null;
-                return true;
-            }
-            if (timed) {
-                if (nanos > 0L) {
-                    long now = System.nanoTime();
-                    nanos -= now - lastTime;
-                    lastTime = now;
-                }
-                if (nanos <= 0L) {
-                    thread = null;
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        public boolean block() {
-            if (isReleasable())
-                return true;
-            else if (!timed)
-                LockSupport.park(this);
-            else if (nanos > 0)
-                LockSupport.parkNanos(this, nanos);
-            return isReleasable();
-        }
-    }
-
-    // Unsafe mechanics
-
-    private static final sun.misc.Unsafe UNSAFE;
-    private static final long stateOffset;
-    static {
-        try {
-            UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = Phaser.class;
-            stateOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("state"));
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/PriorityBlockingQueue.java b/ojluni/src/main/java/java/util/concurrent/PriorityBlockingQueue.java
deleted file mode 100755
index c20efa7..0000000
--- a/ojluni/src/main/java/java/util/concurrent/PriorityBlockingQueue.java
+++ /dev/null
@@ -1,951 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.*;
-
-/**
- * An unbounded {@linkplain BlockingQueue blocking queue} that uses
- * the same ordering rules as class {@link PriorityQueue} and supplies
- * blocking retrieval operations.  While this queue is logically
- * unbounded, attempted additions may fail due to resource exhaustion
- * (causing {@code OutOfMemoryError}). This class does not permit
- * {@code null} elements.  A priority queue relying on {@linkplain
- * Comparable natural ordering} also does not permit insertion of
- * non-comparable objects (doing so results in
- * {@code ClassCastException}).
- *
- * <p>This class and its iterator implement all of the
- * <em>optional</em> methods of the {@link Collection} and {@link
- * Iterator} interfaces.  The Iterator provided in method {@link
- * #iterator()} is <em>not</em> guaranteed to traverse the elements of
- * the PriorityBlockingQueue in any particular order. If you need
- * ordered traversal, consider using
- * {@code Arrays.sort(pq.toArray())}.  Also, method {@code drainTo}
- * can be used to <em>remove</em> some or all elements in priority
- * order and place them in another collection.
- *
- * <p>Operations on this class make no guarantees about the ordering
- * of elements with equal priority. If you need to enforce an
- * ordering, you can define custom classes or comparators that use a
- * secondary key to break ties in primary priority values.  For
- * example, here is a class that applies first-in-first-out
- * tie-breaking to comparable elements. To use it, you would insert a
- * {@code new FIFOEntry(anEntry)} instead of a plain entry object.
- *
- *  <pre> {@code
- * class FIFOEntry<E extends Comparable<? super E>>
- *     implements Comparable<FIFOEntry<E>> {
- *   static final AtomicLong seq = new AtomicLong(0);
- *   final long seqNum;
- *   final E entry;
- *   public FIFOEntry(E entry) {
- *     seqNum = seq.getAndIncrement();
- *     this.entry = entry;
- *   }
- *   public E getEntry() { return entry; }
- *   public int compareTo(FIFOEntry<E> other) {
- *     int res = entry.compareTo(other.entry);
- *     if (res == 0 && other.entry != this.entry)
- *       res = (seqNum < other.seqNum ? -1 : 1);
- *     return res;
- *   }
- * }}</pre>
- *
- * <p>This class is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @since 1.5
- * @author Doug Lea
- * @param <E> the type of elements held in this collection
- */
-public class PriorityBlockingQueue<E> extends AbstractQueue<E>
-    implements BlockingQueue<E>, java.io.Serializable {
-    private static final long serialVersionUID = 5595510919245408276L;
-
-    /*
-     * The implementation uses an array-based binary heap, with public
-     * operations protected with a single lock. However, allocation
-     * during resizing uses a simple spinlock (used only while not
-     * holding main lock) in order to allow takes to operate
-     * concurrently with allocation.  This avoids repeated
-     * postponement of waiting consumers and consequent element
-     * build-up. The need to back away from lock during allocation
-     * makes it impossible to simply wrap delegated
-     * java.util.PriorityQueue operations within a lock, as was done
-     * in a previous version of this class. To maintain
-     * interoperability, a plain PriorityQueue is still used during
-     * serialization, which maintains compatibility at the expense of
-     * transiently doubling overhead.
-     */
-
-    /**
-     * Default array capacity.
-     */
-    private static final int DEFAULT_INITIAL_CAPACITY = 11;
-
-    /**
-     * The maximum size of array to allocate.
-     * Some VMs reserve some header words in an array.
-     * Attempts to allocate larger arrays may result in
-     * OutOfMemoryError: Requested array size exceeds VM limit
-     */
-    private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
-
-    /**
-     * Priority queue represented as a balanced binary heap: the two
-     * children of queue[n] are queue[2*n+1] and queue[2*(n+1)].  The
-     * priority queue is ordered by comparator, or by the elements'
-     * natural ordering, if comparator is null: For each node n in the
-     * heap and each descendant d of n, n <= d.  The element with the
-     * lowest value is in queue[0], assuming the queue is nonempty.
-     */
-    private transient Object[] queue;
-
-    /**
-     * The number of elements in the priority queue.
-     */
-    private transient int size;
-
-    /**
-     * The comparator, or null if priority queue uses elements'
-     * natural ordering.
-     */
-    private transient Comparator<? super E> comparator;
-
-    /**
-     * Lock used for all public operations
-     */
-    private final ReentrantLock lock;
-
-    /**
-     * Condition for blocking when empty
-     */
-    private final Condition notEmpty;
-
-    /**
-     * Spinlock for allocation, acquired via CAS.
-     */
-    private transient volatile int allocationSpinLock;
-
-    /**
-     * A plain PriorityQueue used only for serialization,
-     * to maintain compatibility with previous versions
-     * of this class. Non-null only during serialization/deserialization.
-     */
-    private PriorityQueue q;
-
-    /**
-     * Creates a {@code PriorityBlockingQueue} with the default
-     * initial capacity (11) that orders its elements according to
-     * their {@linkplain Comparable natural ordering}.
-     */
-    public PriorityBlockingQueue() {
-        this(DEFAULT_INITIAL_CAPACITY, null);
-    }
-
-    /**
-     * Creates a {@code PriorityBlockingQueue} with the specified
-     * initial capacity that orders its elements according to their
-     * {@linkplain Comparable natural ordering}.
-     *
-     * @param initialCapacity the initial capacity for this priority queue
-     * @throws IllegalArgumentException if {@code initialCapacity} is less
-     *         than 1
-     */
-    public PriorityBlockingQueue(int initialCapacity) {
-        this(initialCapacity, null);
-    }
-
-    /**
-     * Creates a {@code PriorityBlockingQueue} with the specified initial
-     * capacity that orders its elements according to the specified
-     * comparator.
-     *
-     * @param initialCapacity the initial capacity for this priority queue
-     * @param  comparator the comparator that will be used to order this
-     *         priority queue.  If {@code null}, the {@linkplain Comparable
-     *         natural ordering} of the elements will be used.
-     * @throws IllegalArgumentException if {@code initialCapacity} is less
-     *         than 1
-     */
-    public PriorityBlockingQueue(int initialCapacity,
-                                 Comparator<? super E> comparator) {
-        if (initialCapacity < 1)
-            throw new IllegalArgumentException();
-        this.lock = new ReentrantLock();
-        this.notEmpty = lock.newCondition();
-        this.comparator = comparator;
-        this.queue = new Object[initialCapacity];
-    }
-
-    /**
-     * Creates a {@code PriorityBlockingQueue} containing the elements
-     * in the specified collection.  If the specified collection is a
-     * {@link SortedSet} or a {@link PriorityQueue},  this
-     * priority queue will be ordered according to the same ordering.
-     * Otherwise, this priority queue will be ordered according to the
-     * {@linkplain Comparable natural ordering} of its elements.
-     *
-     * @param  c the collection whose elements are to be placed
-     *         into this priority queue
-     * @throws ClassCastException if elements of the specified collection
-     *         cannot be compared to one another according to the priority
-     *         queue's ordering
-     * @throws NullPointerException if the specified collection or any
-     *         of its elements are null
-     */
-    public PriorityBlockingQueue(Collection<? extends E> c) {
-        this.lock = new ReentrantLock();
-        this.notEmpty = lock.newCondition();
-        boolean heapify = true; // true if not known to be in heap order
-        boolean screen = true;  // true if must screen for nulls
-        if (c instanceof SortedSet<?>) {
-            SortedSet<? extends E> ss = (SortedSet<? extends E>) c;
-            this.comparator = (Comparator<? super E>) ss.comparator();
-            heapify = false;
-        }
-        else if (c instanceof PriorityBlockingQueue<?>) {
-            PriorityBlockingQueue<? extends E> pq =
-                (PriorityBlockingQueue<? extends E>) c;
-            this.comparator = (Comparator<? super E>) pq.comparator();
-            screen = false;
-            if (pq.getClass() == PriorityBlockingQueue.class) // exact match
-                heapify = false;
-        }
-        Object[] a = c.toArray();
-        int n = a.length;
-        // If c.toArray incorrectly doesn't return Object[], copy it.
-        if (a.getClass() != Object[].class)
-            a = Arrays.copyOf(a, n, Object[].class);
-        if (screen && (n == 1 || this.comparator != null)) {
-            for (int i = 0; i < n; ++i)
-                if (a[i] == null)
-                    throw new NullPointerException();
-        }
-        this.queue = a;
-        this.size = n;
-        if (heapify)
-            heapify();
-    }
-
-    /**
-     * Tries to grow array to accommodate at least one more element
-     * (but normally expand by about 50%), giving up (allowing retry)
-     * on contention (which we expect to be rare). Call only while
-     * holding lock.
-     *
-     * @param array the heap array
-     * @param oldCap the length of the array
-     */
-    private void tryGrow(Object[] array, int oldCap) {
-        lock.unlock(); // must release and then re-acquire main lock
-        Object[] newArray = null;
-        if (allocationSpinLock == 0 &&
-            UNSAFE.compareAndSwapInt(this, allocationSpinLockOffset,
-                                     0, 1)) {
-            try {
-                int newCap = oldCap + ((oldCap < 64) ?
-                                       (oldCap + 2) : // grow faster if small
-                                       (oldCap >> 1));
-                if (newCap - MAX_ARRAY_SIZE > 0) {    // possible overflow
-                    int minCap = oldCap + 1;
-                    if (minCap < 0 || minCap > MAX_ARRAY_SIZE)
-                        throw new OutOfMemoryError();
-                    newCap = MAX_ARRAY_SIZE;
-                }
-                if (newCap > oldCap && queue == array)
-                    newArray = new Object[newCap];
-            } finally {
-                allocationSpinLock = 0;
-            }
-        }
-        if (newArray == null) // back off if another thread is allocating
-            Thread.yield();
-        lock.lock();
-        if (newArray != null && queue == array) {
-            queue = newArray;
-            System.arraycopy(array, 0, newArray, 0, oldCap);
-        }
-    }
-
-    /**
-     * Mechanics for poll().  Call only while holding lock.
-     */
-    private E dequeue() {
-        int n = size - 1;
-        if (n < 0)
-            return null;
-        else {
-            Object[] array = queue;
-            E result = (E) array[0];
-            E x = (E) array[n];
-            array[n] = null;
-            Comparator<? super E> cmp = comparator;
-            if (cmp == null)
-                siftDownComparable(0, x, array, n);
-            else
-                siftDownUsingComparator(0, x, array, n, cmp);
-            size = n;
-            return result;
-        }
-    }
-
-    /**
-     * Inserts item x at position k, maintaining heap invariant by
-     * promoting x up the tree until it is greater than or equal to
-     * its parent, or is the root.
-     *
-     * To simplify and speed up coercions and comparisons. the
-     * Comparable and Comparator versions are separated into different
-     * methods that are otherwise identical. (Similarly for siftDown.)
-     * These methods are static, with heap state as arguments, to
-     * simplify use in light of possible comparator exceptions.
-     *
-     * @param k the position to fill
-     * @param x the item to insert
-     * @param array the heap array
-     * @param n heap size
-     */
-    private static <T> void siftUpComparable(int k, T x, Object[] array) {
-        Comparable<? super T> key = (Comparable<? super T>) x;
-        while (k > 0) {
-            int parent = (k - 1) >>> 1;
-            Object e = array[parent];
-            if (key.compareTo((T) e) >= 0)
-                break;
-            array[k] = e;
-            k = parent;
-        }
-        array[k] = key;
-    }
-
-    private static <T> void siftUpUsingComparator(int k, T x, Object[] array,
-                                       Comparator<? super T> cmp) {
-        while (k > 0) {
-            int parent = (k - 1) >>> 1;
-            Object e = array[parent];
-            if (cmp.compare(x, (T) e) >= 0)
-                break;
-            array[k] = e;
-            k = parent;
-        }
-        array[k] = x;
-    }
-
-    /**
-     * Inserts item x at position k, maintaining heap invariant by
-     * demoting x down the tree repeatedly until it is less than or
-     * equal to its children or is a leaf.
-     *
-     * @param k the position to fill
-     * @param x the item to insert
-     * @param array the heap array
-     * @param n heap size
-     */
-    private static <T> void siftDownComparable(int k, T x, Object[] array,
-                                               int n) {
-        if (n > 0) {
-            Comparable<? super T> key = (Comparable<? super T>)x;
-            int half = n >>> 1;           // loop while a non-leaf
-            while (k < half) {
-                int child = (k << 1) + 1; // assume left child is least
-                Object c = array[child];
-                int right = child + 1;
-                if (right < n &&
-                    ((Comparable<? super T>) c).compareTo((T) array[right]) > 0)
-                    c = array[child = right];
-                if (key.compareTo((T) c) <= 0)
-                    break;
-                array[k] = c;
-                k = child;
-            }
-            array[k] = key;
-        }
-    }
-
-    private static <T> void siftDownUsingComparator(int k, T x, Object[] array,
-                                                    int n,
-                                                    Comparator<? super T> cmp) {
-        if (n > 0) {
-            int half = n >>> 1;
-            while (k < half) {
-                int child = (k << 1) + 1;
-                Object c = array[child];
-                int right = child + 1;
-                if (right < n && cmp.compare((T) c, (T) array[right]) > 0)
-                    c = array[child = right];
-                if (cmp.compare(x, (T) c) <= 0)
-                    break;
-                array[k] = c;
-                k = child;
-            }
-            array[k] = x;
-        }
-    }
-
-    /**
-     * Establishes the heap invariant (described above) in the entire tree,
-     * assuming nothing about the order of the elements prior to the call.
-     */
-    private void heapify() {
-        Object[] array = queue;
-        int n = size;
-        int half = (n >>> 1) - 1;
-        Comparator<? super E> cmp = comparator;
-        if (cmp == null) {
-            for (int i = half; i >= 0; i--)
-                siftDownComparable(i, (E) array[i], array, n);
-        }
-        else {
-            for (int i = half; i >= 0; i--)
-                siftDownUsingComparator(i, (E) array[i], array, n, cmp);
-        }
-    }
-
-    /**
-     * Inserts the specified element into this priority queue.
-     *
-     * @param e the element to add
-     * @return {@code true} (as specified by {@link Collection#add})
-     * @throws ClassCastException if the specified element cannot be compared
-     *         with elements currently in the priority queue according to the
-     *         priority queue's ordering
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean add(E e) {
-        return offer(e);
-    }
-
-    /**
-     * Inserts the specified element into this priority queue.
-     * As the queue is unbounded, this method will never return {@code false}.
-     *
-     * @param e the element to add
-     * @return {@code true} (as specified by {@link Queue#offer})
-     * @throws ClassCastException if the specified element cannot be compared
-     *         with elements currently in the priority queue according to the
-     *         priority queue's ordering
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean offer(E e) {
-        if (e == null)
-            throw new NullPointerException();
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        int n, cap;
-        Object[] array;
-        while ((n = size) >= (cap = (array = queue).length))
-            tryGrow(array, cap);
-        try {
-            Comparator<? super E> cmp = comparator;
-            if (cmp == null)
-                siftUpComparable(n, e, array);
-            else
-                siftUpUsingComparator(n, e, array, cmp);
-            size = n + 1;
-            notEmpty.signal();
-        } finally {
-            lock.unlock();
-        }
-        return true;
-    }
-
-    /**
-     * Inserts the specified element into this priority queue.
-     * As the queue is unbounded, this method will never block.
-     *
-     * @param e the element to add
-     * @throws ClassCastException if the specified element cannot be compared
-     *         with elements currently in the priority queue according to the
-     *         priority queue's ordering
-     * @throws NullPointerException if the specified element is null
-     */
-    public void put(E e) {
-        offer(e); // never need to block
-    }
-
-    /**
-     * Inserts the specified element into this priority queue.
-     * As the queue is unbounded, this method will never block or
-     * return {@code false}.
-     *
-     * @param e the element to add
-     * @param timeout This parameter is ignored as the method never blocks
-     * @param unit This parameter is ignored as the method never blocks
-     * @return {@code true} (as specified by
-     *  {@link BlockingQueue#offer(Object,long,TimeUnit) BlockingQueue.offer})
-     * @throws ClassCastException if the specified element cannot be compared
-     *         with elements currently in the priority queue according to the
-     *         priority queue's ordering
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean offer(E e, long timeout, TimeUnit unit) {
-        return offer(e); // never need to block
-    }
-
-    public E poll() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return dequeue();
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public E take() throws InterruptedException {
-        final ReentrantLock lock = this.lock;
-        lock.lockInterruptibly();
-        E result;
-        try {
-            while ( (result = dequeue()) == null)
-                notEmpty.await();
-        } finally {
-            lock.unlock();
-        }
-        return result;
-    }
-
-    public E poll(long timeout, TimeUnit unit) throws InterruptedException {
-        long nanos = unit.toNanos(timeout);
-        final ReentrantLock lock = this.lock;
-        lock.lockInterruptibly();
-        E result;
-        try {
-            while ( (result = dequeue()) == null && nanos > 0)
-                nanos = notEmpty.awaitNanos(nanos);
-        } finally {
-            lock.unlock();
-        }
-        return result;
-    }
-
-    public E peek() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return (size == 0) ? null : (E) queue[0];
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns the comparator used to order the elements in this queue,
-     * or {@code null} if this queue uses the {@linkplain Comparable
-     * natural ordering} of its elements.
-     *
-     * @return the comparator used to order the elements in this queue,
-     *         or {@code null} if this queue uses the natural
-     *         ordering of its elements
-     */
-    public Comparator<? super E> comparator() {
-        return comparator;
-    }
-
-    public int size() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return size;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Always returns {@code Integer.MAX_VALUE} because
-     * a {@code PriorityBlockingQueue} is not capacity constrained.
-     * @return {@code Integer.MAX_VALUE} always
-     */
-    public int remainingCapacity() {
-        return Integer.MAX_VALUE;
-    }
-
-    private int indexOf(Object o) {
-        if (o != null) {
-            Object[] array = queue;
-            int n = size;
-            for (int i = 0; i < n; i++)
-                if (o.equals(array[i]))
-                    return i;
-        }
-        return -1;
-    }
-
-    /**
-     * Removes the ith element from queue.
-     */
-    private void removeAt(int i) {
-        Object[] array = queue;
-        int n = size - 1;
-        if (n == i) // removed last element
-            array[i] = null;
-        else {
-            E moved = (E) array[n];
-            array[n] = null;
-            Comparator<? super E> cmp = comparator;
-            if (cmp == null)
-                siftDownComparable(i, moved, array, n);
-            else
-                siftDownUsingComparator(i, moved, array, n, cmp);
-            if (array[i] == moved) {
-                if (cmp == null)
-                    siftUpComparable(i, moved, array);
-                else
-                    siftUpUsingComparator(i, moved, array, cmp);
-            }
-        }
-        size = n;
-    }
-
-    /**
-     * Removes a single instance of the specified element from this queue,
-     * if it is present.  More formally, removes an element {@code e} such
-     * that {@code o.equals(e)}, if this queue contains one or more such
-     * elements.  Returns {@code true} if and only if this queue contained
-     * the specified element (or equivalently, if this queue changed as a
-     * result of the call).
-     *
-     * @param o element to be removed from this queue, if present
-     * @return {@code true} if this queue changed as a result of the call
-     */
-    public boolean remove(Object o) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            int i = indexOf(o);
-            if (i == -1)
-                return false;
-            removeAt(i);
-            return true;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Identity-based version for use in Itr.remove
-     */
-    void removeEQ(Object o) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            Object[] array = queue;
-            for (int i = 0, n = size; i < n; i++) {
-                if (o == array[i]) {
-                    removeAt(i);
-                    break;
-                }
-            }
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns {@code true} if this queue contains the specified element.
-     * More formally, returns {@code true} if and only if this queue contains
-     * at least one element {@code e} such that {@code o.equals(e)}.
-     *
-     * @param o object to be checked for containment in this queue
-     * @return {@code true} if this queue contains the specified element
-     */
-    public boolean contains(Object o) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return indexOf(o) != -1;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns an array containing all of the elements in this queue.
-     * The returned array elements are in no particular order.
-     *
-     * <p>The returned array will be "safe" in that no references to it are
-     * maintained by this queue.  (In other words, this method must allocate
-     * a new array).  The caller is thus free to modify the returned array.
-     *
-     * <p>This method acts as bridge between array-based and collection-based
-     * APIs.
-     *
-     * @return an array containing all of the elements in this queue
-     */
-    public Object[] toArray() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            return Arrays.copyOf(queue, size);
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    public String toString() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            int n = size;
-            if (n == 0)
-                return "[]";
-            StringBuilder sb = new StringBuilder();
-            sb.append('[');
-            for (int i = 0; i < n; ++i) {
-                Object e = queue[i];
-                sb.append(e == this ? "(this Collection)" : e);
-                if (i != n - 1)
-                    sb.append(',').append(' ');
-            }
-            return sb.append(']').toString();
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * @throws UnsupportedOperationException {@inheritDoc}
-     * @throws ClassCastException            {@inheritDoc}
-     * @throws NullPointerException          {@inheritDoc}
-     * @throws IllegalArgumentException      {@inheritDoc}
-     */
-    public int drainTo(Collection<? super E> c) {
-        return drainTo(c, Integer.MAX_VALUE);
-    }
-
-    /**
-     * @throws UnsupportedOperationException {@inheritDoc}
-     * @throws ClassCastException            {@inheritDoc}
-     * @throws NullPointerException          {@inheritDoc}
-     * @throws IllegalArgumentException      {@inheritDoc}
-     */
-    public int drainTo(Collection<? super E> c, int maxElements) {
-        if (c == null)
-            throw new NullPointerException();
-        if (c == this)
-            throw new IllegalArgumentException();
-        if (maxElements <= 0)
-            return 0;
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            int n = Math.min(size, maxElements);
-            for (int i = 0; i < n; i++) {
-                c.add((E) queue[0]); // In this order, in case add() throws.
-                dequeue();
-            }
-            return n;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Atomically removes all of the elements from this queue.
-     * The queue will be empty after this call returns.
-     */
-    public void clear() {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            Object[] array = queue;
-            int n = size;
-            size = 0;
-            for (int i = 0; i < n; i++)
-                array[i] = null;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns an array containing all of the elements in this queue; the
-     * runtime type of the returned array is that of the specified array.
-     * The returned array elements are in no particular order.
-     * If the queue fits in the specified array, it is returned therein.
-     * Otherwise, a new array is allocated with the runtime type of the
-     * specified array and the size of this queue.
-     *
-     * <p>If this queue fits in the specified array with room to spare
-     * (i.e., the array has more elements than this queue), the element in
-     * the array immediately following the end of the queue is set to
-     * {@code null}.
-     *
-     * <p>Like the {@link #toArray()} method, this method acts as bridge between
-     * array-based and collection-based APIs.  Further, this method allows
-     * precise control over the runtime type of the output array, and may,
-     * under certain circumstances, be used to save allocation costs.
-     *
-     * <p>Suppose {@code x} is a queue known to contain only strings.
-     * The following code can be used to dump the queue into a newly
-     * allocated array of {@code String}:
-     *
-     *  <pre> {@code String[] y = x.toArray(new String[0]);}</pre>
-     *
-     * Note that {@code toArray(new Object[0])} is identical in function to
-     * {@code toArray()}.
-     *
-     * @param a the array into which the elements of the queue are to
-     *          be stored, if it is big enough; otherwise, a new array of the
-     *          same runtime type is allocated for this purpose
-     * @return an array containing all of the elements in this queue
-     * @throws ArrayStoreException if the runtime type of the specified array
-     *         is not a supertype of the runtime type of every element in
-     *         this queue
-     * @throws NullPointerException if the specified array is null
-     */
-    public <T> T[] toArray(T[] a) {
-        final ReentrantLock lock = this.lock;
-        lock.lock();
-        try {
-            int n = size;
-            if (a.length < n)
-                // Make a new array of a's runtime type, but my contents:
-                return (T[]) Arrays.copyOf(queue, size, a.getClass());
-            System.arraycopy(queue, 0, a, 0, n);
-            if (a.length > n)
-                a[n] = null;
-            return a;
-        } finally {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Returns an iterator over the elements in this queue. The
-     * iterator does not return the elements in any particular order.
-     *
-     * <p>The returned iterator is a "weakly consistent" iterator that
-     * will never throw {@link java.util.ConcurrentModificationException
-     * ConcurrentModificationException}, and guarantees to traverse
-     * elements as they existed upon construction of the iterator, and
-     * may (but is not guaranteed to) reflect any modifications
-     * subsequent to construction.
-     *
-     * @return an iterator over the elements in this queue
-     */
-    public Iterator<E> iterator() {
-        return new Itr(toArray());
-    }
-
-    /**
-     * Snapshot iterator that works off copy of underlying q array.
-     */
-    final class Itr implements Iterator<E> {
-        final Object[] array; // Array of all elements
-        int cursor;           // index of next element to return
-        int lastRet;          // index of last element, or -1 if no such
-
-        Itr(Object[] array) {
-            lastRet = -1;
-            this.array = array;
-        }
-
-        public boolean hasNext() {
-            return cursor < array.length;
-        }
-
-        public E next() {
-            if (cursor >= array.length)
-                throw new NoSuchElementException();
-            lastRet = cursor;
-            return (E)array[cursor++];
-        }
-
-        public void remove() {
-            if (lastRet < 0)
-                throw new IllegalStateException();
-            removeEQ(array[lastRet]);
-            lastRet = -1;
-        }
-    }
-
-    /**
-     * Saves this queue to a stream (that is, serializes it).
-     *
-     * For compatibility with previous version of this class, elements
-     * are first copied to a java.util.PriorityQueue, which is then
-     * serialized.
-     */
-    private void writeObject(java.io.ObjectOutputStream s)
-        throws java.io.IOException {
-        lock.lock();
-        try {
-            // avoid zero capacity argument
-            q = new PriorityQueue<E>(Math.max(size, 1), comparator);
-            q.addAll(this);
-            s.defaultWriteObject();
-        } finally {
-            q = null;
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Reconstitutes this queue from a stream (that is, deserializes it).
-     */
-    private void readObject(java.io.ObjectInputStream s)
-        throws java.io.IOException, ClassNotFoundException {
-        try {
-            s.defaultReadObject();
-            this.queue = new Object[q.size()];
-            comparator = q.comparator();
-            addAll(q);
-        } finally {
-            q = null;
-        }
-    }
-
-    // Unsafe mechanics
-    private static final sun.misc.Unsafe UNSAFE;
-    private static final long allocationSpinLockOffset;
-    static {
-        try {
-            UNSAFE = sun.misc.Unsafe.getUnsafe();
-            Class k = PriorityBlockingQueue.class;
-            allocationSpinLockOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("allocationSpinLock"));
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/RecursiveAction.java b/ojluni/src/main/java/java/util/concurrent/RecursiveAction.java
deleted file mode 100755
index add4a54..0000000
--- a/ojluni/src/main/java/java/util/concurrent/RecursiveAction.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * A recursive resultless {@link ForkJoinTask}.  This class
- * establishes conventions to parameterize resultless actions as
- * {@code Void} {@code ForkJoinTask}s. Because {@code null} is the
- * only valid value of type {@code Void}, methods such as join always
- * return {@code null} upon completion.
- *
- * <p><b>Sample Usages.</b> Here is a sketch of a ForkJoin sort that
- * sorts a given {@code long[]} array:
- *
- *  <pre> {@code
- * class SortTask extends RecursiveAction {
- *   final long[] array; final int lo; final int hi;
- *   SortTask(long[] array, int lo, int hi) {
- *     this.array = array; this.lo = lo; this.hi = hi;
- *   }
- *   protected void compute() {
- *     if (hi - lo < THRESHOLD)
- *       sequentiallySort(array, lo, hi);
- *     else {
- *       int mid = (lo + hi) >>> 1;
- *       invokeAll(new SortTask(array, lo, mid),
- *                 new SortTask(array, mid, hi));
- *       merge(array, lo, hi);
- *     }
- *   }
- * }}</pre>
- *
- * You could then sort {@code anArray} by creating {@code new
- * SortTask(anArray, 0, anArray.length-1) } and invoking it in a
- * ForkJoinPool.  As a more concrete simple example, the following
- * task increments each element of an array:
- *  <pre> {@code
- * class IncrementTask extends RecursiveAction {
- *   final long[] array; final int lo; final int hi;
- *   IncrementTask(long[] array, int lo, int hi) {
- *     this.array = array; this.lo = lo; this.hi = hi;
- *   }
- *   protected void compute() {
- *     if (hi - lo < THRESHOLD) {
- *       for (int i = lo; i < hi; ++i)
- *         array[i]++;
- *     }
- *     else {
- *       int mid = (lo + hi) >>> 1;
- *       invokeAll(new IncrementTask(array, lo, mid),
- *                 new IncrementTask(array, mid, hi));
- *     }
- *   }
- * }}</pre>
- *
- * <p>The following example illustrates some refinements and idioms
- * that may lead to better performance: RecursiveActions need not be
- * fully recursive, so long as they maintain the basic
- * divide-and-conquer approach. Here is a class that sums the squares
- * of each element of a double array, by subdividing out only the
- * right-hand-sides of repeated divisions by two, and keeping track of
- * them with a chain of {@code next} references. It uses a dynamic
- * threshold based on method {@code getSurplusQueuedTaskCount}, but
- * counterbalances potential excess partitioning by directly
- * performing leaf actions on unstolen tasks rather than further
- * subdividing.
- *
- *  <pre> {@code
- * double sumOfSquares(ForkJoinPool pool, double[] array) {
- *   int n = array.length;
- *   Applyer a = new Applyer(array, 0, n, null);
- *   pool.invoke(a);
- *   return a.result;
- * }
- *
- * class Applyer extends RecursiveAction {
- *   final double[] array;
- *   final int lo, hi;
- *   double result;
- *   Applyer next; // keeps track of right-hand-side tasks
- *   Applyer(double[] array, int lo, int hi, Applyer next) {
- *     this.array = array; this.lo = lo; this.hi = hi;
- *     this.next = next;
- *   }
- *
- *   double atLeaf(int l, int h) {
- *     double sum = 0;
- *     for (int i = l; i < h; ++i) // perform leftmost base step
- *       sum += array[i] * array[i];
- *     return sum;
- *   }
- *
- *   protected void compute() {
- *     int l = lo;
- *     int h = hi;
- *     Applyer right = null;
- *     while (h - l > 1 && getSurplusQueuedTaskCount() <= 3) {
- *        int mid = (l + h) >>> 1;
- *        right = new Applyer(array, mid, h, right);
- *        right.fork();
- *        h = mid;
- *     }
- *     double sum = atLeaf(l, h);
- *     while (right != null) {
- *        if (right.tryUnfork()) // directly calculate if not stolen
- *          sum += right.atLeaf(right.lo, right.hi);
- *       else {
- *          right.join();
- *          sum += right.result;
- *        }
- *        right = right.next;
- *      }
- *     result = sum;
- *   }
- * }}</pre>
- *
- * @since 1.7
- * @author Doug Lea
- */
-public abstract class RecursiveAction extends ForkJoinTask<Void> {
-    private static final long serialVersionUID = 5232453952276485070L;
-
-    /**
-     * The main computation performed by this task.
-     */
-    protected abstract void compute();
-
-    /**
-     * Always returns {@code null}.
-     *
-     * @return {@code null} always
-     */
-    public final Void getRawResult() { return null; }
-
-    /**
-     * Requires null completion value.
-     */
-    protected final void setRawResult(Void mustBeNull) { }
-
-    /**
-     * Implements execution conventions for RecursiveActions.
-     */
-    protected final boolean exec() {
-        compute();
-        return true;
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/RecursiveTask.java b/ojluni/src/main/java/java/util/concurrent/RecursiveTask.java
deleted file mode 100755
index 11c7768..0000000
--- a/ojluni/src/main/java/java/util/concurrent/RecursiveTask.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * A recursive result-bearing {@link ForkJoinTask}.
- *
- * <p>For a classic example, here is a task computing Fibonacci numbers:
- *
- *  <pre> {@code
- * class Fibonacci extends RecursiveTask<Integer> {
- *   final int n;
- *   Fibonacci(int n) { this.n = n; }
- *   Integer compute() {
- *     if (n <= 1)
- *        return n;
- *     Fibonacci f1 = new Fibonacci(n - 1);
- *     f1.fork();
- *     Fibonacci f2 = new Fibonacci(n - 2);
- *     return f2.compute() + f1.join();
- *   }
- * }}</pre>
- *
- * However, besides being a dumb way to compute Fibonacci functions
- * (there is a simple fast linear algorithm that you'd use in
- * practice), this is likely to perform poorly because the smallest
- * subtasks are too small to be worthwhile splitting up. Instead, as
- * is the case for nearly all fork/join applications, you'd pick some
- * minimum granularity size (for example 10 here) for which you always
- * sequentially solve rather than subdividing.
- *
- * @since 1.7
- * @author Doug Lea
- */
-public abstract class RecursiveTask<V> extends ForkJoinTask<V> {
-    private static final long serialVersionUID = 5232453952276485270L;
-
-    /**
-     * The result of the computation.
-     */
-    V result;
-
-    /**
-     * The main computation performed by this task.
-     */
-    protected abstract V compute();
-
-    public final V getRawResult() {
-        return result;
-    }
-
-    protected final void setRawResult(V value) {
-        result = value;
-    }
-
-    /**
-     * Implements execution conventions for RecursiveTask.
-     */
-    protected final boolean exec() {
-        result = compute();
-        return true;
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/RejectedExecutionException.java b/ojluni/src/main/java/java/util/concurrent/RejectedExecutionException.java
deleted file mode 100755
index 9e59945..0000000
--- a/ojluni/src/main/java/java/util/concurrent/RejectedExecutionException.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * Exception thrown by an {@link Executor} when a task cannot be
- * accepted for execution.
- *
- * @since 1.5
- * @author Doug Lea
- */
-public class RejectedExecutionException extends RuntimeException {
-    private static final long serialVersionUID = -375805702767069545L;
-
-    /**
-     * Constructs a <tt>RejectedExecutionException</tt> with no detail message.
-     * The cause is not initialized, and may subsequently be
-     * initialized by a call to {@link #initCause(Throwable) initCause}.
-     */
-    public RejectedExecutionException() { }
-
-    /**
-     * Constructs a <tt>RejectedExecutionException</tt> with the
-     * specified detail message. The cause is not initialized, and may
-     * subsequently be initialized by a call to {@link
-     * #initCause(Throwable) initCause}.
-     *
-     * @param message the detail message
-     */
-    public RejectedExecutionException(String message) {
-        super(message);
-    }
-
-    /**
-     * Constructs a <tt>RejectedExecutionException</tt> with the
-     * specified detail message and cause.
-     *
-     * @param  message the detail message
-     * @param  cause the cause (which is saved for later retrieval by the
-     *         {@link #getCause()} method)
-     */
-    public RejectedExecutionException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-    /**
-     * Constructs a <tt>RejectedExecutionException</tt> with the
-     * specified cause.  The detail message is set to: <pre> (cause ==
-     * null ? null : cause.toString())</pre> (which typically contains
-     * the class and detail message of <tt>cause</tt>).
-     *
-     * @param  cause the cause (which is saved for later retrieval by the
-     *         {@link #getCause()} method)
-     */
-    public RejectedExecutionException(Throwable cause) {
-        super(cause);
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/RejectedExecutionHandler.java b/ojluni/src/main/java/java/util/concurrent/RejectedExecutionHandler.java
deleted file mode 100755
index c1e314c..0000000
--- a/ojluni/src/main/java/java/util/concurrent/RejectedExecutionHandler.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * A handler for tasks that cannot be executed by a {@link ThreadPoolExecutor}.
- *
- * @since 1.5
- * @author Doug Lea
- */
-public interface RejectedExecutionHandler {
-
-    /**
-     * Method that may be invoked by a {@link ThreadPoolExecutor} when
-     * {@link ThreadPoolExecutor#execute execute} cannot accept a
-     * task.  This may occur when no more threads or queue slots are
-     * available because their bounds would be exceeded, or upon
-     * shutdown of the Executor.
-     *
-     * <p>In the absence of other alternatives, the method may throw
-     * an unchecked {@link RejectedExecutionException}, which will be
-     * propagated to the caller of {@code execute}.
-     *
-     * @param r the runnable task requested to be executed
-     * @param executor the executor attempting to execute this task
-     * @throws RejectedExecutionException if there is no remedy
-     */
-    void rejectedExecution(Runnable r, ThreadPoolExecutor executor);
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/RunnableFuture.java b/ojluni/src/main/java/java/util/concurrent/RunnableFuture.java
deleted file mode 100755
index 0af4ea9..0000000
--- a/ojluni/src/main/java/java/util/concurrent/RunnableFuture.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * A {@link Future} that is {@link Runnable}. Successful execution of
- * the <tt>run</tt> method causes completion of the <tt>Future</tt>
- * and allows access to its results.
- * @see FutureTask
- * @see Executor
- * @since 1.6
- * @author Doug Lea
- * @param <V> The result type returned by this Future's <tt>get</tt> method
- */
-public interface RunnableFuture<V> extends Runnable, Future<V> {
-    /**
-     * Sets this Future to the result of its computation
-     * unless it has been cancelled.
-     */
-    void run();
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/RunnableScheduledFuture.java b/ojluni/src/main/java/java/util/concurrent/RunnableScheduledFuture.java
deleted file mode 100755
index 1049ab9..0000000
--- a/ojluni/src/main/java/java/util/concurrent/RunnableScheduledFuture.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * A {@link ScheduledFuture} that is {@link Runnable}. Successful
- * execution of the <tt>run</tt> method causes completion of the
- * <tt>Future</tt> and allows access to its results.
- * @see FutureTask
- * @see Executor
- * @since 1.6
- * @author Doug Lea
- * @param <V> The result type returned by this Future's <tt>get</tt> method
- */
-public interface RunnableScheduledFuture<V> extends RunnableFuture<V>, ScheduledFuture<V> {
-
-    /**
-     * Returns true if this is a periodic task. A periodic task may
-     * re-run according to some schedule. A non-periodic task can be
-     * run only once.
-     *
-     * @return true if this task is periodic
-     */
-    boolean isPeriodic();
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ScheduledExecutorService.java b/ojluni/src/main/java/java/util/concurrent/ScheduledExecutorService.java
deleted file mode 100755
index 187d6a1..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ScheduledExecutorService.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.concurrent.atomic.*;
-import java.util.*;
-
-/**
- * An {@link ExecutorService} that can schedule commands to run after a given
- * delay, or to execute periodically.
- *
- * <p> The <tt>schedule</tt> methods create tasks with various delays
- * and return a task object that can be used to cancel or check
- * execution. The <tt>scheduleAtFixedRate</tt> and
- * <tt>scheduleWithFixedDelay</tt> methods create and execute tasks
- * that run periodically until cancelled.
- *
- * <p> Commands submitted using the {@link Executor#execute} and
- * {@link ExecutorService} <tt>submit</tt> methods are scheduled with
- * a requested delay of zero. Zero and negative delays (but not
- * periods) are also allowed in <tt>schedule</tt> methods, and are
- * treated as requests for immediate execution.
- *
- * <p>All <tt>schedule</tt> methods accept <em>relative</em> delays and
- * periods as arguments, not absolute times or dates. It is a simple
- * matter to transform an absolute time represented as a {@link
- * java.util.Date} to the required form. For example, to schedule at
- * a certain future <tt>date</tt>, you can use: <tt>schedule(task,
- * date.getTime() - System.currentTimeMillis(),
- * TimeUnit.MILLISECONDS)</tt>. Beware however that expiration of a
- * relative delay need not coincide with the current <tt>Date</tt> at
- * which the task is enabled due to network time synchronization
- * protocols, clock drift, or other factors.
- *
- * The {@link Executors} class provides convenient factory methods for
- * the ScheduledExecutorService implementations provided in this package.
- *
- * <h3>Usage Example</h3>
- *
- * Here is a class with a method that sets up a ScheduledExecutorService
- * to beep every ten seconds for an hour:
- *
- *  <pre> {@code
- * import static java.util.concurrent.TimeUnit.*;
- * class BeeperControl {
- *   private final ScheduledExecutorService scheduler =
- *     Executors.newScheduledThreadPool(1);
- *
- *   public void beepForAnHour() {
- *     final Runnable beeper = new Runnable() {
- *       public void run() { System.out.println("beep"); }
- *     };
- *     final ScheduledFuture<?> beeperHandle =
- *       scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
- *     scheduler.schedule(new Runnable() {
- *       public void run() { beeperHandle.cancel(true); }
- *     }, 60 * 60, SECONDS);
- *   }
- * }}</pre>
- *
- * @since 1.5
- * @author Doug Lea
- */
-public interface ScheduledExecutorService extends ExecutorService {
-
-    /**
-     * Creates and executes a one-shot action that becomes enabled
-     * after the given delay.
-     *
-     * @param command the task to execute
-     * @param delay the time from now to delay execution
-     * @param unit the time unit of the delay parameter
-     * @return a ScheduledFuture representing pending completion of
-     *         the task and whose <tt>get()</tt> method will return
-     *         <tt>null</tt> upon completion
-     * @throws RejectedExecutionException if the task cannot be
-     *         scheduled for execution
-     * @throws NullPointerException if command is null
-     */
-    public ScheduledFuture<?> schedule(Runnable command,
-                                       long delay, TimeUnit unit);
-
-    /**
-     * Creates and executes a ScheduledFuture that becomes enabled after the
-     * given delay.
-     *
-     * @param callable the function to execute
-     * @param delay the time from now to delay execution
-     * @param unit the time unit of the delay parameter
-     * @return a ScheduledFuture that can be used to extract result or cancel
-     * @throws RejectedExecutionException if the task cannot be
-     *         scheduled for execution
-     * @throws NullPointerException if callable is null
-     */
-    public <V> ScheduledFuture<V> schedule(Callable<V> callable,
-                                           long delay, TimeUnit unit);
-
-    /**
-     * Creates and executes a periodic action that becomes enabled first
-     * after the given initial delay, and subsequently with the given
-     * period; that is executions will commence after
-     * <tt>initialDelay</tt> then <tt>initialDelay+period</tt>, then
-     * <tt>initialDelay + 2 * period</tt>, and so on.
-     * If any execution of the task
-     * encounters an exception, subsequent executions are suppressed.
-     * Otherwise, the task will only terminate via cancellation or
-     * termination of the executor.  If any execution of this task
-     * takes longer than its period, then subsequent executions
-     * may start late, but will not concurrently execute.
-     *
-     * @param command the task to execute
-     * @param initialDelay the time to delay first execution
-     * @param period the period between successive executions
-     * @param unit the time unit of the initialDelay and period parameters
-     * @return a ScheduledFuture representing pending completion of
-     *         the task, and whose <tt>get()</tt> method will throw an
-     *         exception upon cancellation
-     * @throws RejectedExecutionException if the task cannot be
-     *         scheduled for execution
-     * @throws NullPointerException if command is null
-     * @throws IllegalArgumentException if period less than or equal to zero
-     */
-    public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
-                                                  long initialDelay,
-                                                  long period,
-                                                  TimeUnit unit);
-
-    /**
-     * Creates and executes a periodic action that becomes enabled first
-     * after the given initial delay, and subsequently with the
-     * given delay between the termination of one execution and the
-     * commencement of the next.  If any execution of the task
-     * encounters an exception, subsequent executions are suppressed.
-     * Otherwise, the task will only terminate via cancellation or
-     * termination of the executor.
-     *
-     * @param command the task to execute
-     * @param initialDelay the time to delay first execution
-     * @param delay the delay between the termination of one
-     * execution and the commencement of the next
-     * @param unit the time unit of the initialDelay and delay parameters
-     * @return a ScheduledFuture representing pending completion of
-     *         the task, and whose <tt>get()</tt> method will throw an
-     *         exception upon cancellation
-     * @throws RejectedExecutionException if the task cannot be
-     *         scheduled for execution
-     * @throws NullPointerException if command is null
-     * @throws IllegalArgumentException if delay less than or equal to zero
-     */
-    public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
-                                                     long initialDelay,
-                                                     long delay,
-                                                     TimeUnit unit);
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ScheduledFuture.java b/ojluni/src/main/java/java/util/concurrent/ScheduledFuture.java
deleted file mode 100755
index 1c1efa4..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ScheduledFuture.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * A delayed result-bearing action that can be cancelled.
- * Usually a scheduled future is the result of scheduling
- * a task with a {@link ScheduledExecutorService}.
- *
- * @since 1.5
- * @author Doug Lea
- * @param <V> The result type returned by this Future
- */
-public interface ScheduledFuture<V> extends Delayed, Future<V> {
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ScheduledThreadPoolExecutor.java b/ojluni/src/main/java/java/util/concurrent/ScheduledThreadPoolExecutor.java
deleted file mode 100755
index 5101a9c..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ScheduledThreadPoolExecutor.java
+++ /dev/null
@@ -1,1277 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.concurrent.atomic.*;
-import java.util.concurrent.locks.*;
-import java.util.*;
-
-/**
- * A {@link ThreadPoolExecutor} that can additionally schedule
- * commands to run after a given delay, or to execute
- * periodically. This class is preferable to {@link java.util.Timer}
- * when multiple worker threads are needed, or when the additional
- * flexibility or capabilities of {@link ThreadPoolExecutor} (which
- * this class extends) are required.
- *
- * <p>Delayed tasks execute no sooner than they are enabled, but
- * without any real-time guarantees about when, after they are
- * enabled, they will commence. Tasks scheduled for exactly the same
- * execution time are enabled in first-in-first-out (FIFO) order of
- * submission.
- *
- * <p>When a submitted task is cancelled before it is run, execution
- * is suppressed. By default, such a cancelled task is not
- * automatically removed from the work queue until its delay
- * elapses. While this enables further inspection and monitoring, it
- * may also cause unbounded retention of cancelled tasks. To avoid
- * this, set {@link #setRemoveOnCancelPolicy} to {@code true}, which
- * causes tasks to be immediately removed from the work queue at
- * time of cancellation.
- *
- * <p>Successive executions of a task scheduled via
- * {@code scheduleAtFixedRate} or
- * {@code scheduleWithFixedDelay} do not overlap. While different
- * executions may be performed by different threads, the effects of
- * prior executions <a
- * href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
- * those of subsequent ones.
- *
- * <p>While this class inherits from {@link ThreadPoolExecutor}, a few
- * of the inherited tuning methods are not useful for it. In
- * particular, because it acts as a fixed-sized pool using
- * {@code corePoolSize} threads and an unbounded queue, adjustments
- * to {@code maximumPoolSize} have no useful effect. Additionally, it
- * is almost never a good idea to set {@code corePoolSize} to zero or
- * use {@code allowCoreThreadTimeOut} because this may leave the pool
- * without threads to handle tasks once they become eligible to run.
- *
- * <p><b>Extension notes:</b> This class overrides the
- * {@link ThreadPoolExecutor#execute execute} and
- * {@link AbstractExecutorService#submit(Runnable) submit}
- * methods to generate internal {@link ScheduledFuture} objects to
- * control per-task delays and scheduling.  To preserve
- * functionality, any further overrides of these methods in
- * subclasses must invoke superclass versions, which effectively
- * disables additional task customization.  However, this class
- * provides alternative protected extension method
- * {@code decorateTask} (one version each for {@code Runnable} and
- * {@code Callable}) that can be used to customize the concrete task
- * types used to execute commands entered via {@code execute},
- * {@code submit}, {@code schedule}, {@code scheduleAtFixedRate},
- * and {@code scheduleWithFixedDelay}.  By default, a
- * {@code ScheduledThreadPoolExecutor} uses a task type extending
- * {@link FutureTask}. However, this may be modified or replaced using
- * subclasses of the form:
- *
- *  <pre> {@code
- * public class CustomScheduledExecutor extends ScheduledThreadPoolExecutor {
- *
- *   static class CustomTask<V> implements RunnableScheduledFuture<V> { ... }
- *
- *   protected <V> RunnableScheduledFuture<V> decorateTask(
- *                Runnable r, RunnableScheduledFuture<V> task) {
- *       return new CustomTask<V>(r, task);
- *   }
- *
- *   protected <V> RunnableScheduledFuture<V> decorateTask(
- *                Callable<V> c, RunnableScheduledFuture<V> task) {
- *       return new CustomTask<V>(c, task);
- *   }
- *   // ... add constructors, etc.
- * }}</pre>
- *
- * @since 1.5
- * @author Doug Lea
- */
-public class ScheduledThreadPoolExecutor
-        extends ThreadPoolExecutor
-        implements ScheduledExecutorService {
-
-    /*
-     * This class specializes ThreadPoolExecutor implementation by
-     *
-     * 1. Using a custom task type, ScheduledFutureTask for
-     *    tasks, even those that don't require scheduling (i.e.,
-     *    those submitted using ExecutorService execute, not
-     *    ScheduledExecutorService methods) which are treated as
-     *    delayed tasks with a delay of zero.
-     *
-     * 2. Using a custom queue (DelayedWorkQueue), a variant of
-     *    unbounded DelayQueue. The lack of capacity constraint and
-     *    the fact that corePoolSize and maximumPoolSize are
-     *    effectively identical simplifies some execution mechanics
-     *    (see delayedExecute) compared to ThreadPoolExecutor.
-     *
-     * 3. Supporting optional run-after-shutdown parameters, which
-     *    leads to overrides of shutdown methods to remove and cancel
-     *    tasks that should NOT be run after shutdown, as well as
-     *    different recheck logic when task (re)submission overlaps
-     *    with a shutdown.
-     *
-     * 4. Task decoration methods to allow interception and
-     *    instrumentation, which are needed because subclasses cannot
-     *    otherwise override submit methods to get this effect. These
-     *    don't have any impact on pool control logic though.
-     */
-
-    /**
-     * False if should cancel/suppress periodic tasks on shutdown.
-     */
-    private volatile boolean continueExistingPeriodicTasksAfterShutdown;
-
-    /**
-     * False if should cancel non-periodic tasks on shutdown.
-     */
-    private volatile boolean executeExistingDelayedTasksAfterShutdown = true;
-
-    /**
-     * True if ScheduledFutureTask.cancel should remove from queue
-     */
-    private volatile boolean removeOnCancel = false;
-
-    /**
-     * Sequence number to break scheduling ties, and in turn to
-     * guarantee FIFO order among tied entries.
-     */
-    private static final AtomicLong sequencer = new AtomicLong(0);
-
-    /**
-     * Returns current nanosecond time.
-     */
-    final long now() {
-        return System.nanoTime();
-    }
-
-    private class ScheduledFutureTask<V>
-            extends FutureTask<V> implements RunnableScheduledFuture<V> {
-
-        /** Sequence number to break ties FIFO */
-        private final long sequenceNumber;
-
-        /** The time the task is enabled to execute in nanoTime units */
-        private long time;
-
-        /**
-         * Period in nanoseconds for repeating tasks.  A positive
-         * value indicates fixed-rate execution.  A negative value
-         * indicates fixed-delay execution.  A value of 0 indicates a
-         * non-repeating task.
-         */
-        private final long period;
-
-        /** The actual task to be re-enqueued by reExecutePeriodic */
-        RunnableScheduledFuture<V> outerTask = this;
-
-        /**
-         * Index into delay queue, to support faster cancellation.
-         */
-        int heapIndex;
-
-        /**
-         * Creates a one-shot action with given nanoTime-based trigger time.
-         */
-        ScheduledFutureTask(Runnable r, V result, long ns) {
-            super(r, result);
-            this.time = ns;
-            this.period = 0;
-            this.sequenceNumber = sequencer.getAndIncrement();
-        }
-
-        /**
-         * Creates a periodic action with given nano time and period.
-         */
-        ScheduledFutureTask(Runnable r, V result, long ns, long period) {
-            super(r, result);
-            this.time = ns;
-            this.period = period;
-            this.sequenceNumber = sequencer.getAndIncrement();
-        }
-
-        /**
-         * Creates a one-shot action with given nanoTime-based trigger.
-         */
-        ScheduledFutureTask(Callable<V> callable, long ns) {
-            super(callable);
-            this.time = ns;
-            this.period = 0;
-            this.sequenceNumber = sequencer.getAndIncrement();
-        }
-
-        public long getDelay(TimeUnit unit) {
-            return unit.convert(time - now(), TimeUnit.NANOSECONDS);
-        }
-
-        public int compareTo(Delayed other) {
-            if (other == this) // compare zero ONLY if same object
-                return 0;
-            if (other instanceof ScheduledFutureTask) {
-                ScheduledFutureTask<?> x = (ScheduledFutureTask<?>)other;
-                long diff = time - x.time;
-                if (diff < 0)
-                    return -1;
-                else if (diff > 0)
-                    return 1;
-                else if (sequenceNumber < x.sequenceNumber)
-                    return -1;
-                else
-                    return 1;
-            }
-            long d = (getDelay(TimeUnit.NANOSECONDS) -
-                      other.getDelay(TimeUnit.NANOSECONDS));
-            return (d == 0) ? 0 : ((d < 0) ? -1 : 1);
-        }
-
-        /**
-         * Returns true if this is a periodic (not a one-shot) action.
-         *
-         * @return true if periodic
-         */
-        public boolean isPeriodic() {
-            return period != 0;
-        }
-
-        /**
-         * Sets the next time to run for a periodic task.
-         */
-        private void setNextRunTime() {
-            long p = period;
-            if (p > 0)
-                time += p;
-            else
-                time = triggerTime(-p);
-        }
-
-        public boolean cancel(boolean mayInterruptIfRunning) {
-            boolean cancelled = super.cancel(mayInterruptIfRunning);
-            if (cancelled && removeOnCancel && heapIndex >= 0)
-                remove(this);
-            return cancelled;
-        }
-
-        /**
-         * Overrides FutureTask version so as to reset/requeue if periodic.
-         */
-        public void run() {
-            boolean periodic = isPeriodic();
-            if (!canRunInCurrentRunState(periodic))
-                cancel(false);
-            else if (!periodic)
-                ScheduledFutureTask.super.run();
-            else if (ScheduledFutureTask.super.runAndReset()) {
-                setNextRunTime();
-                reExecutePeriodic(outerTask);
-            }
-        }
-    }
-
-    /**
-     * Returns true if can run a task given current run state
-     * and run-after-shutdown parameters.
-     *
-     * @param periodic true if this task periodic, false if delayed
-     */
-    boolean canRunInCurrentRunState(boolean periodic) {
-        return isRunningOrShutdown(periodic ?
-                                   continueExistingPeriodicTasksAfterShutdown :
-                                   executeExistingDelayedTasksAfterShutdown);
-    }
-
-    /**
-     * Main execution method for delayed or periodic tasks.  If pool
-     * is shut down, rejects the task. Otherwise adds task to queue
-     * and starts a thread, if necessary, to run it.  (We cannot
-     * prestart the thread to run the task because the task (probably)
-     * shouldn't be run yet,) If the pool is shut down while the task
-     * is being added, cancel and remove it if required by state and
-     * run-after-shutdown parameters.
-     *
-     * @param task the task
-     */
-    private void delayedExecute(RunnableScheduledFuture<?> task) {
-        if (isShutdown())
-            reject(task);
-        else {
-            super.getQueue().add(task);
-            if (isShutdown() &&
-                !canRunInCurrentRunState(task.isPeriodic()) &&
-                remove(task))
-                task.cancel(false);
-            else
-                ensurePrestart();
-        }
-    }
-
-    /**
-     * Requeues a periodic task unless current run state precludes it.
-     * Same idea as delayedExecute except drops task rather than rejecting.
-     *
-     * @param task the task
-     */
-    void reExecutePeriodic(RunnableScheduledFuture<?> task) {
-        if (canRunInCurrentRunState(true)) {
-            super.getQueue().add(task);
-            if (!canRunInCurrentRunState(true) && remove(task))
-                task.cancel(false);
-            else
-                ensurePrestart();
-        }
-    }
-
-    /**
-     * Cancels and clears the queue of all tasks that should not be run
-     * due to shutdown policy.  Invoked within super.shutdown.
-     */
-    @Override void onShutdown() {
-        BlockingQueue<Runnable> q = super.getQueue();
-        boolean keepDelayed =
-            getExecuteExistingDelayedTasksAfterShutdownPolicy();
-        boolean keepPeriodic =
-            getContinueExistingPeriodicTasksAfterShutdownPolicy();
-        if (!keepDelayed && !keepPeriodic) {
-            for (Object e : q.toArray())
-                if (e instanceof RunnableScheduledFuture<?>)
-                    ((RunnableScheduledFuture<?>) e).cancel(false);
-            q.clear();
-        }
-        else {
-            // Traverse snapshot to avoid iterator exceptions
-            for (Object e : q.toArray()) {
-                if (e instanceof RunnableScheduledFuture) {
-                    RunnableScheduledFuture<?> t =
-                        (RunnableScheduledFuture<?>)e;
-                    if ((t.isPeriodic() ? !keepPeriodic : !keepDelayed) ||
-                        t.isCancelled()) { // also remove if already cancelled
-                        if (q.remove(t))
-                            t.cancel(false);
-                    }
-                }
-            }
-        }
-        tryTerminate();
-    }
-
-    /**
-     * Modifies or replaces the task used to execute a runnable.
-     * This method can be used to override the concrete
-     * class used for managing internal tasks.
-     * The default implementation simply returns the given task.
-     *
-     * @param runnable the submitted Runnable
-     * @param task the task created to execute the runnable
-     * @return a task that can execute the runnable
-     * @since 1.6
-     */
-    protected <V> RunnableScheduledFuture<V> decorateTask(
-        Runnable runnable, RunnableScheduledFuture<V> task) {
-        return task;
-    }
-
-    /**
-     * Modifies or replaces the task used to execute a callable.
-     * This method can be used to override the concrete
-     * class used for managing internal tasks.
-     * The default implementation simply returns the given task.
-     *
-     * @param callable the submitted Callable
-     * @param task the task created to execute the callable
-     * @return a task that can execute the callable
-     * @since 1.6
-     */
-    protected <V> RunnableScheduledFuture<V> decorateTask(
-        Callable<V> callable, RunnableScheduledFuture<V> task) {
-        return task;
-    }
-
-    /**
-     * Creates a new {@code ScheduledThreadPoolExecutor} with the
-     * given core pool size.
-     *
-     * @param corePoolSize the number of threads to keep in the pool, even
-     *        if they are idle, unless {@code allowCoreThreadTimeOut} is set
-     * @throws IllegalArgumentException if {@code corePoolSize < 0}
-     */
-    public ScheduledThreadPoolExecutor(int corePoolSize) {
-        super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS,
-              new DelayedWorkQueue());
-    }
-
-    /**
-     * Creates a new {@code ScheduledThreadPoolExecutor} with the
-     * given initial parameters.
-     *
-     * @param corePoolSize the number of threads to keep in the pool, even
-     *        if they are idle, unless {@code allowCoreThreadTimeOut} is set
-     * @param threadFactory the factory to use when the executor
-     *        creates a new thread
-     * @throws IllegalArgumentException if {@code corePoolSize < 0}
-     * @throws NullPointerException if {@code threadFactory} is null
-     */
-    public ScheduledThreadPoolExecutor(int corePoolSize,
-                                       ThreadFactory threadFactory) {
-        super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS,
-              new DelayedWorkQueue(), threadFactory);
-    }
-
-    /**
-     * Creates a new ScheduledThreadPoolExecutor with the given
-     * initial parameters.
-     *
-     * @param corePoolSize the number of threads to keep in the pool, even
-     *        if they are idle, unless {@code allowCoreThreadTimeOut} is set
-     * @param handler the handler to use when execution is blocked
-     *        because the thread bounds and queue capacities are reached
-     * @throws IllegalArgumentException if {@code corePoolSize < 0}
-     * @throws NullPointerException if {@code handler} is null
-     */
-    public ScheduledThreadPoolExecutor(int corePoolSize,
-                                       RejectedExecutionHandler handler) {
-        super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS,
-              new DelayedWorkQueue(), handler);
-    }
-
-    /**
-     * Creates a new ScheduledThreadPoolExecutor with the given
-     * initial parameters.
-     *
-     * @param corePoolSize the number of threads to keep in the pool, even
-     *        if they are idle, unless {@code allowCoreThreadTimeOut} is set
-     * @param threadFactory the factory to use when the executor
-     *        creates a new thread
-     * @param handler the handler to use when execution is blocked
-     *        because the thread bounds and queue capacities are reached
-     * @throws IllegalArgumentException if {@code corePoolSize < 0}
-     * @throws NullPointerException if {@code threadFactory} or
-     *         {@code handler} is null
-     */
-    public ScheduledThreadPoolExecutor(int corePoolSize,
-                                       ThreadFactory threadFactory,
-                                       RejectedExecutionHandler handler) {
-        super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS,
-              new DelayedWorkQueue(), threadFactory, handler);
-    }
-
-    /**
-     * Returns the trigger time of a delayed action.
-     */
-    private long triggerTime(long delay, TimeUnit unit) {
-        return triggerTime(unit.toNanos((delay < 0) ? 0 : delay));
-    }
-
-    /**
-     * Returns the trigger time of a delayed action.
-     */
-    long triggerTime(long delay) {
-        return now() +
-            ((delay < (Long.MAX_VALUE >> 1)) ? delay : overflowFree(delay));
-    }
-
-    /**
-     * Constrains the values of all delays in the queue to be within
-     * Long.MAX_VALUE of each other, to avoid overflow in compareTo.
-     * This may occur if a task is eligible to be dequeued, but has
-     * not yet been, while some other task is added with a delay of
-     * Long.MAX_VALUE.
-     */
-    private long overflowFree(long delay) {
-        Delayed head = (Delayed) super.getQueue().peek();
-        if (head != null) {
-            long headDelay = head.getDelay(TimeUnit.NANOSECONDS);
-            if (headDelay < 0 && (delay - headDelay < 0))
-                delay = Long.MAX_VALUE + headDelay;
-        }
-        return delay;
-    }
-
-    /**
-     * @throws RejectedExecutionException {@inheritDoc}
-     * @throws NullPointerException       {@inheritDoc}
-     */
-    public ScheduledFuture<?> schedule(Runnable command,
-                                       long delay,
-                                       TimeUnit unit) {
-        if (command == null || unit == null)
-            throw new NullPointerException();
-        RunnableScheduledFuture<?> t = decorateTask(command,
-            new ScheduledFutureTask<Void>(command, null,
-                                          triggerTime(delay, unit)));
-        delayedExecute(t);
-        return t;
-    }
-
-    /**
-     * @throws RejectedExecutionException {@inheritDoc}
-     * @throws NullPointerException       {@inheritDoc}
-     */
-    public <V> ScheduledFuture<V> schedule(Callable<V> callable,
-                                           long delay,
-                                           TimeUnit unit) {
-        if (callable == null || unit == null)
-            throw new NullPointerException();
-        RunnableScheduledFuture<V> t = decorateTask(callable,
-            new ScheduledFutureTask<V>(callable,
-                                       triggerTime(delay, unit)));
-        delayedExecute(t);
-        return t;
-    }
-
-    /**
-     * @throws RejectedExecutionException {@inheritDoc}
-     * @throws NullPointerException       {@inheritDoc}
-     * @throws IllegalArgumentException   {@inheritDoc}
-     */
-    public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
-                                                  long initialDelay,
-                                                  long period,
-                                                  TimeUnit unit) {
-        if (command == null || unit == null)
-            throw new NullPointerException();
-        if (period <= 0)
-            throw new IllegalArgumentException();
-        ScheduledFutureTask<Void> sft =
-            new ScheduledFutureTask<Void>(command,
-                                          null,
-                                          triggerTime(initialDelay, unit),
-                                          unit.toNanos(period));
-        RunnableScheduledFuture<Void> t = decorateTask(command, sft);
-        sft.outerTask = t;
-        delayedExecute(t);
-        return t;
-    }
-
-    /**
-     * @throws RejectedExecutionException {@inheritDoc}
-     * @throws NullPointerException       {@inheritDoc}
-     * @throws IllegalArgumentException   {@inheritDoc}
-     */
-    public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
-                                                     long initialDelay,
-                                                     long delay,
-                                                     TimeUnit unit) {
-        if (command == null || unit == null)
-            throw new NullPointerException();
-        if (delay <= 0)
-            throw new IllegalArgumentException();
-        ScheduledFutureTask<Void> sft =
-            new ScheduledFutureTask<Void>(command,
-                                          null,
-                                          triggerTime(initialDelay, unit),
-                                          unit.toNanos(-delay));
-        RunnableScheduledFuture<Void> t = decorateTask(command, sft);
-        sft.outerTask = t;
-        delayedExecute(t);
-        return t;
-    }
-
-    /**
-     * Executes {@code command} with zero required delay.
-     * This has effect equivalent to
-     * {@link #schedule(Runnable,long,TimeUnit) schedule(command, 0, anyUnit)}.
-     * Note that inspections of the queue and of the list returned by
-     * {@code shutdownNow} will access the zero-delayed
-     * {@link ScheduledFuture}, not the {@code command} itself.
-     *
-     * <p>A consequence of the use of {@code ScheduledFuture} objects is
-     * that {@link ThreadPoolExecutor#afterExecute afterExecute} is always
-     * called with a null second {@code Throwable} argument, even if the
-     * {@code command} terminated abruptly.  Instead, the {@code Throwable}
-     * thrown by such a task can be obtained via {@link Future#get}.
-     *
-     * @throws RejectedExecutionException at discretion of
-     *         {@code RejectedExecutionHandler}, if the task
-     *         cannot be accepted for execution because the
-     *         executor has been shut down
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void execute(Runnable command) {
-        schedule(command, 0, TimeUnit.NANOSECONDS);
-    }
-
-    // Override AbstractExecutorService methods
-
-    /**
-     * @throws RejectedExecutionException {@inheritDoc}
-     * @throws NullPointerException       {@inheritDoc}
-     */
-    public Future<?> submit(Runnable task) {
-        return schedule(task, 0, TimeUnit.NANOSECONDS);
-    }
-
-    /**
-     * @throws RejectedExecutionException {@inheritDoc}
-     * @throws NullPointerException       {@inheritDoc}
-     */
-    public <T> Future<T> submit(Runnable task, T result) {
-        return schedule(Executors.callable(task, result),
-                        0, TimeUnit.NANOSECONDS);
-    }
-
-    /**
-     * @throws RejectedExecutionException {@inheritDoc}
-     * @throws NullPointerException       {@inheritDoc}
-     */
-    public <T> Future<T> submit(Callable<T> task) {
-        return schedule(task, 0, TimeUnit.NANOSECONDS);
-    }
-
-    /**
-     * Sets the policy on whether to continue executing existing
-     * periodic tasks even when this executor has been {@code shutdown}.
-     * In this case, these tasks will only terminate upon
-     * {@code shutdownNow} or after setting the policy to
-     * {@code false} when already shutdown.
-     * This value is by default {@code false}.
-     *
-     * @param value if {@code true}, continue after shutdown, else don't.
-     * @see #getContinueExistingPeriodicTasksAfterShutdownPolicy
-     */
-    public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value) {
-        continueExistingPeriodicTasksAfterShutdown = value;
-        if (!value && isShutdown())
-            onShutdown();
-    }
-
-    /**
-     * Gets the policy on whether to continue executing existing
-     * periodic tasks even when this executor has been {@code shutdown}.
-     * In this case, these tasks will only terminate upon
-     * {@code shutdownNow} or after setting the policy to
-     * {@code false} when already shutdown.
-     * This value is by default {@code false}.
-     *
-     * @return {@code true} if will continue after shutdown
-     * @see #setContinueExistingPeriodicTasksAfterShutdownPolicy
-     */
-    public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy() {
-        return continueExistingPeriodicTasksAfterShutdown;
-    }
-
-    /**
-     * Sets the policy on whether to execute existing delayed
-     * tasks even when this executor has been {@code shutdown}.
-     * In this case, these tasks will only terminate upon
-     * {@code shutdownNow}, or after setting the policy to
-     * {@code false} when already shutdown.
-     * This value is by default {@code true}.
-     *
-     * @param value if {@code true}, execute after shutdown, else don't.
-     * @see #getExecuteExistingDelayedTasksAfterShutdownPolicy
-     */
-    public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value) {
-        executeExistingDelayedTasksAfterShutdown = value;
-        if (!value && isShutdown())
-            onShutdown();
-    }
-
-    /**
-     * Gets the policy on whether to execute existing delayed
-     * tasks even when this executor has been {@code shutdown}.
-     * In this case, these tasks will only terminate upon
-     * {@code shutdownNow}, or after setting the policy to
-     * {@code false} when already shutdown.
-     * This value is by default {@code true}.
-     *
-     * @return {@code true} if will execute after shutdown
-     * @see #setExecuteExistingDelayedTasksAfterShutdownPolicy
-     */
-    public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy() {
-        return executeExistingDelayedTasksAfterShutdown;
-    }
-
-    /**
-     * Sets the policy on whether cancelled tasks should be immediately
-     * removed from the work queue at time of cancellation.  This value is
-     * by default {@code false}.
-     *
-     * @param value if {@code true}, remove on cancellation, else don't
-     * @see #getRemoveOnCancelPolicy
-     * @since 1.7
-     */
-    public void setRemoveOnCancelPolicy(boolean value) {
-        removeOnCancel = value;
-    }
-
-    /**
-     * Gets the policy on whether cancelled tasks should be immediately
-     * removed from the work queue at time of cancellation.  This value is
-     * by default {@code false}.
-     *
-     * @return {@code true} if cancelled tasks are immediately removed
-     *         from the queue
-     * @see #setRemoveOnCancelPolicy
-     * @since 1.7
-     */
-    public boolean getRemoveOnCancelPolicy() {
-        return removeOnCancel;
-    }
-
-    /**
-     * Initiates an orderly shutdown in which previously submitted
-     * tasks are executed, but no new tasks will be accepted.
-     * Invocation has no additional effect if already shut down.
-     *
-     * <p>This method does not wait for previously submitted tasks to
-     * complete execution.  Use {@link #awaitTermination awaitTermination}
-     * to do that.
-     *
-     * <p>If the {@code ExecuteExistingDelayedTasksAfterShutdownPolicy}
-     * has been set {@code false}, existing delayed tasks whose delays
-     * have not yet elapsed are cancelled.  And unless the {@code
-     * ContinueExistingPeriodicTasksAfterShutdownPolicy} has been set
-     * {@code true}, future executions of existing periodic tasks will
-     * be cancelled.
-     *
-     * @throws SecurityException {@inheritDoc}
-     */
-    public void shutdown() {
-        super.shutdown();
-    }
-
-    /**
-     * Attempts to stop all actively executing tasks, halts the
-     * processing of waiting tasks, and returns a list of the tasks
-     * that were awaiting execution.
-     *
-     * <p>This method does not wait for actively executing tasks to
-     * terminate.  Use {@link #awaitTermination awaitTermination} to
-     * do that.
-     *
-     * <p>There are no guarantees beyond best-effort attempts to stop
-     * processing actively executing tasks.  This implementation
-     * cancels tasks via {@link Thread#interrupt}, so any task that
-     * fails to respond to interrupts may never terminate.
-     *
-     * @return list of tasks that never commenced execution.
-     *         Each element of this list is a {@link ScheduledFuture},
-     *         including those tasks submitted using {@code execute},
-     *         which are for scheduling purposes used as the basis of a
-     *         zero-delay {@code ScheduledFuture}.
-     * @throws SecurityException {@inheritDoc}
-     */
-    public List<Runnable> shutdownNow() {
-        return super.shutdownNow();
-    }
-
-    /**
-     * Returns the task queue used by this executor.  Each element of
-     * this queue is a {@link ScheduledFuture}, including those
-     * tasks submitted using {@code execute} which are for scheduling
-     * purposes used as the basis of a zero-delay
-     * {@code ScheduledFuture}.  Iteration over this queue is
-     * <em>not</em> guaranteed to traverse tasks in the order in
-     * which they will execute.
-     *
-     * @return the task queue
-     */
-    public BlockingQueue<Runnable> getQueue() {
-        return super.getQueue();
-    }
-
-    /**
-     * Specialized delay queue. To mesh with TPE declarations, this
-     * class must be declared as a BlockingQueue<Runnable> even though
-     * it can only hold RunnableScheduledFutures.
-     */
-    static class DelayedWorkQueue extends AbstractQueue<Runnable>
-        implements BlockingQueue<Runnable> {
-
-        /*
-         * A DelayedWorkQueue is based on a heap-based data structure
-         * like those in DelayQueue and PriorityQueue, except that
-         * every ScheduledFutureTask also records its index into the
-         * heap array. This eliminates the need to find a task upon
-         * cancellation, greatly speeding up removal (down from O(n)
-         * to O(log n)), and reducing garbage retention that would
-         * otherwise occur by waiting for the element to rise to top
-         * before clearing. But because the queue may also hold
-         * RunnableScheduledFutures that are not ScheduledFutureTasks,
-         * we are not guaranteed to have such indices available, in
-         * which case we fall back to linear search. (We expect that
-         * most tasks will not be decorated, and that the faster cases
-         * will be much more common.)
-         *
-         * All heap operations must record index changes -- mainly
-         * within siftUp and siftDown. Upon removal, a task's
-         * heapIndex is set to -1. Note that ScheduledFutureTasks can
-         * appear at most once in the queue (this need not be true for
-         * other kinds of tasks or work queues), so are uniquely
-         * identified by heapIndex.
-         */
-
-        private static final int INITIAL_CAPACITY = 16;
-        private RunnableScheduledFuture[] queue =
-            new RunnableScheduledFuture[INITIAL_CAPACITY];
-        private final ReentrantLock lock = new ReentrantLock();
-        private int size = 0;
-
-        /**
-         * Thread designated to wait for the task at the head of the
-         * queue.  This variant of the Leader-Follower pattern
-         * (http://www.cs.wustl.edu/~schmidt/POSA/POSA2/) serves to
-         * minimize unnecessary timed waiting.  When a thread becomes
-         * the leader, it waits only for the next delay to elapse, but
-         * other threads await indefinitely.  The leader thread must
-         * signal some other thread before returning from take() or
-         * poll(...), unless some other thread becomes leader in the
-         * interim.  Whenever the head of the queue is replaced with a
-         * task with an earlier expiration time, the leader field is
-         * invalidated by being reset to null, and some waiting
-         * thread, but not necessarily the current leader, is
-         * signalled.  So waiting threads must be prepared to acquire
-         * and lose leadership while waiting.
-         */
-        private Thread leader = null;
-
-        /**
-         * Condition signalled when a newer task becomes available at the
-         * head of the queue or a new thread may need to become leader.
-         */
-        private final Condition available = lock.newCondition();
-
-        /**
-         * Set f's heapIndex if it is a ScheduledFutureTask.
-         */
-        private void setIndex(RunnableScheduledFuture f, int idx) {
-            if (f instanceof ScheduledFutureTask)
-                ((ScheduledFutureTask)f).heapIndex = idx;
-        }
-
-        /**
-         * Sift element added at bottom up to its heap-ordered spot.
-         * Call only when holding lock.
-         */
-        private void siftUp(int k, RunnableScheduledFuture key) {
-            while (k > 0) {
-                int parent = (k - 1) >>> 1;
-                RunnableScheduledFuture e = queue[parent];
-                if (key.compareTo(e) >= 0)
-                    break;
-                queue[k] = e;
-                setIndex(e, k);
-                k = parent;
-            }
-            queue[k] = key;
-            setIndex(key, k);
-        }
-
-        /**
-         * Sift element added at top down to its heap-ordered spot.
-         * Call only when holding lock.
-         */
-        private void siftDown(int k, RunnableScheduledFuture key) {
-            int half = size >>> 1;
-            while (k < half) {
-                int child = (k << 1) + 1;
-                RunnableScheduledFuture c = queue[child];
-                int right = child + 1;
-                if (right < size && c.compareTo(queue[right]) > 0)
-                    c = queue[child = right];
-                if (key.compareTo(c) <= 0)
-                    break;
-                queue[k] = c;
-                setIndex(c, k);
-                k = child;
-            }
-            queue[k] = key;
-            setIndex(key, k);
-        }
-
-        /**
-         * Resize the heap array.  Call only when holding lock.
-         */
-        private void grow() {
-            int oldCapacity = queue.length;
-            int newCapacity = oldCapacity + (oldCapacity >> 1); // grow 50%
-            if (newCapacity < 0) // overflow
-                newCapacity = Integer.MAX_VALUE;
-            queue = Arrays.copyOf(queue, newCapacity);
-        }
-
-        /**
-         * Find index of given object, or -1 if absent
-         */
-        private int indexOf(Object x) {
-            if (x != null) {
-                if (x instanceof ScheduledFutureTask) {
-                    int i = ((ScheduledFutureTask) x).heapIndex;
-                    // Sanity check; x could conceivably be a
-                    // ScheduledFutureTask from some other pool.
-                    if (i >= 0 && i < size && queue[i] == x)
-                        return i;
-                } else {
-                    for (int i = 0; i < size; i++)
-                        if (x.equals(queue[i]))
-                            return i;
-                }
-            }
-            return -1;
-        }
-
-        public boolean contains(Object x) {
-            final ReentrantLock lock = this.lock;
-            lock.lock();
-            try {
-                return indexOf(x) != -1;
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public boolean remove(Object x) {
-            final ReentrantLock lock = this.lock;
-            lock.lock();
-            try {
-                int i = indexOf(x);
-                if (i < 0)
-                    return false;
-
-                setIndex(queue[i], -1);
-                int s = --size;
-                RunnableScheduledFuture replacement = queue[s];
-                queue[s] = null;
-                if (s != i) {
-                    siftDown(i, replacement);
-                    if (queue[i] == replacement)
-                        siftUp(i, replacement);
-                }
-                return true;
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public int size() {
-            final ReentrantLock lock = this.lock;
-            lock.lock();
-            try {
-                return size;
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public boolean isEmpty() {
-            return size() == 0;
-        }
-
-        public int remainingCapacity() {
-            return Integer.MAX_VALUE;
-        }
-
-        public RunnableScheduledFuture peek() {
-            final ReentrantLock lock = this.lock;
-            lock.lock();
-            try {
-                return queue[0];
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public boolean offer(Runnable x) {
-            if (x == null)
-                throw new NullPointerException();
-            RunnableScheduledFuture e = (RunnableScheduledFuture)x;
-            final ReentrantLock lock = this.lock;
-            lock.lock();
-            try {
-                int i = size;
-                if (i >= queue.length)
-                    grow();
-                size = i + 1;
-                if (i == 0) {
-                    queue[0] = e;
-                    setIndex(e, 0);
-                } else {
-                    siftUp(i, e);
-                }
-                if (queue[0] == e) {
-                    leader = null;
-                    available.signal();
-                }
-            } finally {
-                lock.unlock();
-            }
-            return true;
-        }
-
-        public void put(Runnable e) {
-            offer(e);
-        }
-
-        public boolean add(Runnable e) {
-            return offer(e);
-        }
-
-        public boolean offer(Runnable e, long timeout, TimeUnit unit) {
-            return offer(e);
-        }
-
-        /**
-         * Performs common bookkeeping for poll and take: Replaces
-         * first element with last and sifts it down.  Call only when
-         * holding lock.
-         * @param f the task to remove and return
-         */
-        private RunnableScheduledFuture finishPoll(RunnableScheduledFuture f) {
-            int s = --size;
-            RunnableScheduledFuture x = queue[s];
-            queue[s] = null;
-            if (s != 0)
-                siftDown(0, x);
-            setIndex(f, -1);
-            return f;
-        }
-
-        public RunnableScheduledFuture poll() {
-            final ReentrantLock lock = this.lock;
-            lock.lock();
-            try {
-                RunnableScheduledFuture first = queue[0];
-                if (first == null || first.getDelay(TimeUnit.NANOSECONDS) > 0)
-                    return null;
-                else
-                    return finishPoll(first);
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public RunnableScheduledFuture take() throws InterruptedException {
-            final ReentrantLock lock = this.lock;
-            lock.lockInterruptibly();
-            try {
-                for (;;) {
-                    RunnableScheduledFuture first = queue[0];
-                    if (first == null)
-                        available.await();
-                    else {
-                        long delay = first.getDelay(TimeUnit.NANOSECONDS);
-                        if (delay <= 0)
-                            return finishPoll(first);
-                        else if (leader != null)
-                            available.await();
-                        else {
-                            Thread thisThread = Thread.currentThread();
-                            leader = thisThread;
-                            try {
-                                available.awaitNanos(delay);
-                            } finally {
-                                if (leader == thisThread)
-                                    leader = null;
-                            }
-                        }
-                    }
-                }
-            } finally {
-                if (leader == null && queue[0] != null)
-                    available.signal();
-                lock.unlock();
-            }
-        }
-
-        public RunnableScheduledFuture poll(long timeout, TimeUnit unit)
-            throws InterruptedException {
-            long nanos = unit.toNanos(timeout);
-            final ReentrantLock lock = this.lock;
-            lock.lockInterruptibly();
-            try {
-                for (;;) {
-                    RunnableScheduledFuture first = queue[0];
-                    if (first == null) {
-                        if (nanos <= 0)
-                            return null;
-                        else
-                            nanos = available.awaitNanos(nanos);
-                    } else {
-                        long delay = first.getDelay(TimeUnit.NANOSECONDS);
-                        if (delay <= 0)
-                            return finishPoll(first);
-                        if (nanos <= 0)
-                            return null;
-                        if (nanos < delay || leader != null)
-                            nanos = available.awaitNanos(nanos);
-                        else {
-                            Thread thisThread = Thread.currentThread();
-                            leader = thisThread;
-                            try {
-                                long timeLeft = available.awaitNanos(delay);
-                                nanos -= delay - timeLeft;
-                            } finally {
-                                if (leader == thisThread)
-                                    leader = null;
-                            }
-                        }
-                    }
-                }
-            } finally {
-                if (leader == null && queue[0] != null)
-                    available.signal();
-                lock.unlock();
-            }
-        }
-
-        public void clear() {
-            final ReentrantLock lock = this.lock;
-            lock.lock();
-            try {
-                for (int i = 0; i < size; i++) {
-                    RunnableScheduledFuture t = queue[i];
-                    if (t != null) {
-                        queue[i] = null;
-                        setIndex(t, -1);
-                    }
-                }
-                size = 0;
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        /**
-         * Return and remove first element only if it is expired.
-         * Used only by drainTo.  Call only when holding lock.
-         */
-        private RunnableScheduledFuture pollExpired() {
-            RunnableScheduledFuture first = queue[0];
-            if (first == null || first.getDelay(TimeUnit.NANOSECONDS) > 0)
-                return null;
-            return finishPoll(first);
-        }
-
-        public int drainTo(Collection<? super Runnable> c) {
-            if (c == null)
-                throw new NullPointerException();
-            if (c == this)
-                throw new IllegalArgumentException();
-            final ReentrantLock lock = this.lock;
-            lock.lock();
-            try {
-                RunnableScheduledFuture first;
-                int n = 0;
-                while ((first = pollExpired()) != null) {
-                    c.add(first);
-                    ++n;
-                }
-                return n;
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public int drainTo(Collection<? super Runnable> c, int maxElements) {
-            if (c == null)
-                throw new NullPointerException();
-            if (c == this)
-                throw new IllegalArgumentException();
-            if (maxElements <= 0)
-                return 0;
-            final ReentrantLock lock = this.lock;
-            lock.lock();
-            try {
-                RunnableScheduledFuture first;
-                int n = 0;
-                while (n < maxElements && (first = pollExpired()) != null) {
-                    c.add(first);
-                    ++n;
-                }
-                return n;
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public Object[] toArray() {
-            final ReentrantLock lock = this.lock;
-            lock.lock();
-            try {
-                return Arrays.copyOf(queue, size, Object[].class);
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        @SuppressWarnings("unchecked")
-        public <T> T[] toArray(T[] a) {
-            final ReentrantLock lock = this.lock;
-            lock.lock();
-            try {
-                if (a.length < size)
-                    return (T[]) Arrays.copyOf(queue, size, a.getClass());
-                System.arraycopy(queue, 0, a, 0, size);
-                if (a.length > size)
-                    a[size] = null;
-                return a;
-            } finally {
-                lock.unlock();
-            }
-        }
-
-        public Iterator<Runnable> iterator() {
-            return new Itr(Arrays.copyOf(queue, size));
-        }
-
-        /**
-         * Snapshot iterator that works off copy of underlying q array.
-         */
-        private class Itr implements Iterator<Runnable> {
-            final RunnableScheduledFuture[] array;
-            int cursor = 0;     // index of next element to return
-            int lastRet = -1;   // index of last element, or -1 if no such
-
-            Itr(RunnableScheduledFuture[] array) {
-                this.array = array;
-            }
-
-            public boolean hasNext() {
-                return cursor < array.length;
-            }
-
-            public Runnable next() {
-                if (cursor >= array.length)
-                    throw new NoSuchElementException();
-                lastRet = cursor;
-                return array[cursor++];
-            }
-
-            public void remove() {
-                if (lastRet < 0)
-                    throw new IllegalStateException();
-                DelayedWorkQueue.this.remove(array[lastRet]);
-                lastRet = -1;
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/Semaphore.java b/ojluni/src/main/java/java/util/concurrent/Semaphore.java
deleted file mode 100755
index c144b49..0000000
--- a/ojluni/src/main/java/java/util/concurrent/Semaphore.java
+++ /dev/null
@@ -1,713 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.*;
-import java.util.concurrent.locks.*;
-import java.util.concurrent.atomic.*;
-
-/**
- * A counting semaphore.  Conceptually, a semaphore maintains a set of
- * permits.  Each {@link #acquire} blocks if necessary until a permit is
- * available, and then takes it.  Each {@link #release} adds a permit,
- * potentially releasing a blocking acquirer.
- * However, no actual permit objects are used; the {@code Semaphore} just
- * keeps a count of the number available and acts accordingly.
- *
- * <p>Semaphores are often used to restrict the number of threads than can
- * access some (physical or logical) resource. For example, here is
- * a class that uses a semaphore to control access to a pool of items:
- * <pre>
- * class Pool {
- *   private static final int MAX_AVAILABLE = 100;
- *   private final Semaphore available = new Semaphore(MAX_AVAILABLE, true);
- *
- *   public Object getItem() throws InterruptedException {
- *     available.acquire();
- *     return getNextAvailableItem();
- *   }
- *
- *   public void putItem(Object x) {
- *     if (markAsUnused(x))
- *       available.release();
- *   }
- *
- *   // Not a particularly efficient data structure; just for demo
- *
- *   protected Object[] items = ... whatever kinds of items being managed
- *   protected boolean[] used = new boolean[MAX_AVAILABLE];
- *
- *   protected synchronized Object getNextAvailableItem() {
- *     for (int i = 0; i < MAX_AVAILABLE; ++i) {
- *       if (!used[i]) {
- *          used[i] = true;
- *          return items[i];
- *       }
- *     }
- *     return null; // not reached
- *   }
- *
- *   protected synchronized boolean markAsUnused(Object item) {
- *     for (int i = 0; i < MAX_AVAILABLE; ++i) {
- *       if (item == items[i]) {
- *          if (used[i]) {
- *            used[i] = false;
- *            return true;
- *          } else
- *            return false;
- *       }
- *     }
- *     return false;
- *   }
- *
- * }
- * </pre>
- *
- * <p>Before obtaining an item each thread must acquire a permit from
- * the semaphore, guaranteeing that an item is available for use. When
- * the thread has finished with the item it is returned back to the
- * pool and a permit is returned to the semaphore, allowing another
- * thread to acquire that item.  Note that no synchronization lock is
- * held when {@link #acquire} is called as that would prevent an item
- * from being returned to the pool.  The semaphore encapsulates the
- * synchronization needed to restrict access to the pool, separately
- * from any synchronization needed to maintain the consistency of the
- * pool itself.
- *
- * <p>A semaphore initialized to one, and which is used such that it
- * only has at most one permit available, can serve as a mutual
- * exclusion lock.  This is more commonly known as a <em>binary
- * semaphore</em>, because it only has two states: one permit
- * available, or zero permits available.  When used in this way, the
- * binary semaphore has the property (unlike many {@link Lock}
- * implementations), that the &quot;lock&quot; can be released by a
- * thread other than the owner (as semaphores have no notion of
- * ownership).  This can be useful in some specialized contexts, such
- * as deadlock recovery.
- *
- * <p> The constructor for this class optionally accepts a
- * <em>fairness</em> parameter. When set false, this class makes no
- * guarantees about the order in which threads acquire permits. In
- * particular, <em>barging</em> is permitted, that is, a thread
- * invoking {@link #acquire} can be allocated a permit ahead of a
- * thread that has been waiting - logically the new thread places itself at
- * the head of the queue of waiting threads. When fairness is set true, the
- * semaphore guarantees that threads invoking any of the {@link
- * #acquire() acquire} methods are selected to obtain permits in the order in
- * which their invocation of those methods was processed
- * (first-in-first-out; FIFO). Note that FIFO ordering necessarily
- * applies to specific internal points of execution within these
- * methods.  So, it is possible for one thread to invoke
- * {@code acquire} before another, but reach the ordering point after
- * the other, and similarly upon return from the method.
- * Also note that the untimed {@link #tryAcquire() tryAcquire} methods do not
- * honor the fairness setting, but will take any permits that are
- * available.
- *
- * <p>Generally, semaphores used to control resource access should be
- * initialized as fair, to ensure that no thread is starved out from
- * accessing a resource. When using semaphores for other kinds of
- * synchronization control, the throughput advantages of non-fair
- * ordering often outweigh fairness considerations.
- *
- * <p>This class also provides convenience methods to {@link
- * #acquire(int) acquire} and {@link #release(int) release} multiple
- * permits at a time.  Beware of the increased risk of indefinite
- * postponement when these methods are used without fairness set true.
- *
- * <p>Memory consistency effects: Actions in a thread prior to calling
- * a "release" method such as {@code release()}
- * <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
- * actions following a successful "acquire" method such as {@code acquire()}
- * in another thread.
- *
- * @since 1.5
- * @author Doug Lea
- *
- */
-
-public class Semaphore implements java.io.Serializable {
-    private static final long serialVersionUID = -3222578661600680210L;
-    /** All mechanics via AbstractQueuedSynchronizer subclass */
-    private final Sync sync;
-
-    /**
-     * Synchronization implementation for semaphore.  Uses AQS state
-     * to represent permits. Subclassed into fair and nonfair
-     * versions.
-     */
-    abstract static class Sync extends AbstractQueuedSynchronizer {
-        private static final long serialVersionUID = 1192457210091910933L;
-
-        Sync(int permits) {
-            setState(permits);
-        }
-
-        final int getPermits() {
-            return getState();
-        }
-
-        final int nonfairTryAcquireShared(int acquires) {
-            for (;;) {
-                int available = getState();
-                int remaining = available - acquires;
-                if (remaining < 0 ||
-                    compareAndSetState(available, remaining))
-                    return remaining;
-            }
-        }
-
-        protected final boolean tryReleaseShared(int releases) {
-            for (;;) {
-                int current = getState();
-                int next = current + releases;
-                if (next < current) // overflow
-                    throw new Error("Maximum permit count exceeded");
-                if (compareAndSetState(current, next))
-                    return true;
-            }
-        }
-
-        final void reducePermits(int reductions) {
-            for (;;) {
-                int current = getState();
-                int next = current - reductions;
-                if (next > current) // underflow
-                    throw new Error("Permit count underflow");
-                if (compareAndSetState(current, next))
-                    return;
-            }
-        }
-
-        final int drainPermits() {
-            for (;;) {
-                int current = getState();
-                if (current == 0 || compareAndSetState(current, 0))
-                    return current;
-            }
-        }
-    }
-
-    /**
-     * NonFair version
-     */
-    static final class NonfairSync extends Sync {
-        private static final long serialVersionUID = -2694183684443567898L;
-
-        NonfairSync(int permits) {
-            super(permits);
-        }
-
-        protected int tryAcquireShared(int acquires) {
-            return nonfairTryAcquireShared(acquires);
-        }
-    }
-
-    /**
-     * Fair version
-     */
-    static final class FairSync extends Sync {
-        private static final long serialVersionUID = 2014338818796000944L;
-
-        FairSync(int permits) {
-            super(permits);
-        }
-
-        protected int tryAcquireShared(int acquires) {
-            for (;;) {
-                if (hasQueuedPredecessors())
-                    return -1;
-                int available = getState();
-                int remaining = available - acquires;
-                if (remaining < 0 ||
-                    compareAndSetState(available, remaining))
-                    return remaining;
-            }
-        }
-    }
-
-    /**
-     * Creates a {@code Semaphore} with the given number of
-     * permits and nonfair fairness setting.
-     *
-     * @param permits the initial number of permits available.
-     *        This value may be negative, in which case releases
-     *        must occur before any acquires will be granted.
-     */
-    public Semaphore(int permits) {
-        sync = new NonfairSync(permits);
-    }
-
-    /**
-     * Creates a {@code Semaphore} with the given number of
-     * permits and the given fairness setting.
-     *
-     * @param permits the initial number of permits available.
-     *        This value may be negative, in which case releases
-     *        must occur before any acquires will be granted.
-     * @param fair {@code true} if this semaphore will guarantee
-     *        first-in first-out granting of permits under contention,
-     *        else {@code false}
-     */
-    public Semaphore(int permits, boolean fair) {
-        sync = fair ? new FairSync(permits) : new NonfairSync(permits);
-    }
-
-    /**
-     * Acquires a permit from this semaphore, blocking until one is
-     * available, or the thread is {@linkplain Thread#interrupt interrupted}.
-     *
-     * <p>Acquires a permit, if one is available and returns immediately,
-     * reducing the number of available permits by one.
-     *
-     * <p>If no permit is available then the current thread becomes
-     * disabled for thread scheduling purposes and lies dormant until
-     * one of two things happens:
-     * <ul>
-     * <li>Some other thread invokes the {@link #release} method for this
-     * semaphore and the current thread is next to be assigned a permit; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * the current thread.
-     * </ul>
-     *
-     * <p>If the current thread:
-     * <ul>
-     * <li>has its interrupted status set on entry to this method; or
-     * <li>is {@linkplain Thread#interrupt interrupted} while waiting
-     * for a permit,
-     * </ul>
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared.
-     *
-     * @throws InterruptedException if the current thread is interrupted
-     */
-    public void acquire() throws InterruptedException {
-        sync.acquireSharedInterruptibly(1);
-    }
-
-    /**
-     * Acquires a permit from this semaphore, blocking until one is
-     * available.
-     *
-     * <p>Acquires a permit, if one is available and returns immediately,
-     * reducing the number of available permits by one.
-     *
-     * <p>If no permit is available then the current thread becomes
-     * disabled for thread scheduling purposes and lies dormant until
-     * some other thread invokes the {@link #release} method for this
-     * semaphore and the current thread is next to be assigned a permit.
-     *
-     * <p>If the current thread is {@linkplain Thread#interrupt interrupted}
-     * while waiting for a permit then it will continue to wait, but the
-     * time at which the thread is assigned a permit may change compared to
-     * the time it would have received the permit had no interruption
-     * occurred.  When the thread does return from this method its interrupt
-     * status will be set.
-     */
-    public void acquireUninterruptibly() {
-        sync.acquireShared(1);
-    }
-
-    /**
-     * Acquires a permit from this semaphore, only if one is available at the
-     * time of invocation.
-     *
-     * <p>Acquires a permit, if one is available and returns immediately,
-     * with the value {@code true},
-     * reducing the number of available permits by one.
-     *
-     * <p>If no permit is available then this method will return
-     * immediately with the value {@code false}.
-     *
-     * <p>Even when this semaphore has been set to use a
-     * fair ordering policy, a call to {@code tryAcquire()} <em>will</em>
-     * immediately acquire a permit if one is available, whether or not
-     * other threads are currently waiting.
-     * This &quot;barging&quot; behavior can be useful in certain
-     * circumstances, even though it breaks fairness. If you want to honor
-     * the fairness setting, then use
-     * {@link #tryAcquire(long, TimeUnit) tryAcquire(0, TimeUnit.SECONDS) }
-     * which is almost equivalent (it also detects interruption).
-     *
-     * @return {@code true} if a permit was acquired and {@code false}
-     *         otherwise
-     */
-    public boolean tryAcquire() {
-        return sync.nonfairTryAcquireShared(1) >= 0;
-    }
-
-    /**
-     * Acquires a permit from this semaphore, if one becomes available
-     * within the given waiting time and the current thread has not
-     * been {@linkplain Thread#interrupt interrupted}.
-     *
-     * <p>Acquires a permit, if one is available and returns immediately,
-     * with the value {@code true},
-     * reducing the number of available permits by one.
-     *
-     * <p>If no permit is available then the current thread becomes
-     * disabled for thread scheduling purposes and lies dormant until
-     * one of three things happens:
-     * <ul>
-     * <li>Some other thread invokes the {@link #release} method for this
-     * semaphore and the current thread is next to be assigned a permit; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * the current thread; or
-     * <li>The specified waiting time elapses.
-     * </ul>
-     *
-     * <p>If a permit is acquired then the value {@code true} is returned.
-     *
-     * <p>If the current thread:
-     * <ul>
-     * <li>has its interrupted status set on entry to this method; or
-     * <li>is {@linkplain Thread#interrupt interrupted} while waiting
-     * to acquire a permit,
-     * </ul>
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared.
-     *
-     * <p>If the specified waiting time elapses then the value {@code false}
-     * is returned.  If the time is less than or equal to zero, the method
-     * will not wait at all.
-     *
-     * @param timeout the maximum time to wait for a permit
-     * @param unit the time unit of the {@code timeout} argument
-     * @return {@code true} if a permit was acquired and {@code false}
-     *         if the waiting time elapsed before a permit was acquired
-     * @throws InterruptedException if the current thread is interrupted
-     */
-    public boolean tryAcquire(long timeout, TimeUnit unit)
-        throws InterruptedException {
-        return sync.tryAcquireSharedNanos(1, unit.toNanos(timeout));
-    }
-
-    /**
-     * Releases a permit, returning it to the semaphore.
-     *
-     * <p>Releases a permit, increasing the number of available permits by
-     * one.  If any threads are trying to acquire a permit, then one is
-     * selected and given the permit that was just released.  That thread
-     * is (re)enabled for thread scheduling purposes.
-     *
-     * <p>There is no requirement that a thread that releases a permit must
-     * have acquired that permit by calling {@link #acquire}.
-     * Correct usage of a semaphore is established by programming convention
-     * in the application.
-     */
-    public void release() {
-        sync.releaseShared(1);
-    }
-
-    /**
-     * Acquires the given number of permits from this semaphore,
-     * blocking until all are available,
-     * or the thread is {@linkplain Thread#interrupt interrupted}.
-     *
-     * <p>Acquires the given number of permits, if they are available,
-     * and returns immediately, reducing the number of available permits
-     * by the given amount.
-     *
-     * <p>If insufficient permits are available then the current thread becomes
-     * disabled for thread scheduling purposes and lies dormant until
-     * one of two things happens:
-     * <ul>
-     * <li>Some other thread invokes one of the {@link #release() release}
-     * methods for this semaphore, the current thread is next to be assigned
-     * permits and the number of available permits satisfies this request; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * the current thread.
-     * </ul>
-     *
-     * <p>If the current thread:
-     * <ul>
-     * <li>has its interrupted status set on entry to this method; or
-     * <li>is {@linkplain Thread#interrupt interrupted} while waiting
-     * for a permit,
-     * </ul>
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared.
-     * Any permits that were to be assigned to this thread are instead
-     * assigned to other threads trying to acquire permits, as if
-     * permits had been made available by a call to {@link #release()}.
-     *
-     * @param permits the number of permits to acquire
-     * @throws InterruptedException if the current thread is interrupted
-     * @throws IllegalArgumentException if {@code permits} is negative
-     */
-    public void acquire(int permits) throws InterruptedException {
-        if (permits < 0) throw new IllegalArgumentException();
-        sync.acquireSharedInterruptibly(permits);
-    }
-
-    /**
-     * Acquires the given number of permits from this semaphore,
-     * blocking until all are available.
-     *
-     * <p>Acquires the given number of permits, if they are available,
-     * and returns immediately, reducing the number of available permits
-     * by the given amount.
-     *
-     * <p>If insufficient permits are available then the current thread becomes
-     * disabled for thread scheduling purposes and lies dormant until
-     * some other thread invokes one of the {@link #release() release}
-     * methods for this semaphore, the current thread is next to be assigned
-     * permits and the number of available permits satisfies this request.
-     *
-     * <p>If the current thread is {@linkplain Thread#interrupt interrupted}
-     * while waiting for permits then it will continue to wait and its
-     * position in the queue is not affected.  When the thread does return
-     * from this method its interrupt status will be set.
-     *
-     * @param permits the number of permits to acquire
-     * @throws IllegalArgumentException if {@code permits} is negative
-     *
-     */
-    public void acquireUninterruptibly(int permits) {
-        if (permits < 0) throw new IllegalArgumentException();
-        sync.acquireShared(permits);
-    }
-
-    /**
-     * Acquires the given number of permits from this semaphore, only
-     * if all are available at the time of invocation.
-     *
-     * <p>Acquires the given number of permits, if they are available, and
-     * returns immediately, with the value {@code true},
-     * reducing the number of available permits by the given amount.
-     *
-     * <p>If insufficient permits are available then this method will return
-     * immediately with the value {@code false} and the number of available
-     * permits is unchanged.
-     *
-     * <p>Even when this semaphore has been set to use a fair ordering
-     * policy, a call to {@code tryAcquire} <em>will</em>
-     * immediately acquire a permit if one is available, whether or
-     * not other threads are currently waiting.  This
-     * &quot;barging&quot; behavior can be useful in certain
-     * circumstances, even though it breaks fairness. If you want to
-     * honor the fairness setting, then use {@link #tryAcquire(int,
-     * long, TimeUnit) tryAcquire(permits, 0, TimeUnit.SECONDS) }
-     * which is almost equivalent (it also detects interruption).
-     *
-     * @param permits the number of permits to acquire
-     * @return {@code true} if the permits were acquired and
-     *         {@code false} otherwise
-     * @throws IllegalArgumentException if {@code permits} is negative
-     */
-    public boolean tryAcquire(int permits) {
-        if (permits < 0) throw new IllegalArgumentException();
-        return sync.nonfairTryAcquireShared(permits) >= 0;
-    }
-
-    /**
-     * Acquires the given number of permits from this semaphore, if all
-     * become available within the given waiting time and the current
-     * thread has not been {@linkplain Thread#interrupt interrupted}.
-     *
-     * <p>Acquires the given number of permits, if they are available and
-     * returns immediately, with the value {@code true},
-     * reducing the number of available permits by the given amount.
-     *
-     * <p>If insufficient permits are available then
-     * the current thread becomes disabled for thread scheduling
-     * purposes and lies dormant until one of three things happens:
-     * <ul>
-     * <li>Some other thread invokes one of the {@link #release() release}
-     * methods for this semaphore, the current thread is next to be assigned
-     * permits and the number of available permits satisfies this request; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * the current thread; or
-     * <li>The specified waiting time elapses.
-     * </ul>
-     *
-     * <p>If the permits are acquired then the value {@code true} is returned.
-     *
-     * <p>If the current thread:
-     * <ul>
-     * <li>has its interrupted status set on entry to this method; or
-     * <li>is {@linkplain Thread#interrupt interrupted} while waiting
-     * to acquire the permits,
-     * </ul>
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared.
-     * Any permits that were to be assigned to this thread, are instead
-     * assigned to other threads trying to acquire permits, as if
-     * the permits had been made available by a call to {@link #release()}.
-     *
-     * <p>If the specified waiting time elapses then the value {@code false}
-     * is returned.  If the time is less than or equal to zero, the method
-     * will not wait at all.  Any permits that were to be assigned to this
-     * thread, are instead assigned to other threads trying to acquire
-     * permits, as if the permits had been made available by a call to
-     * {@link #release()}.
-     *
-     * @param permits the number of permits to acquire
-     * @param timeout the maximum time to wait for the permits
-     * @param unit the time unit of the {@code timeout} argument
-     * @return {@code true} if all permits were acquired and {@code false}
-     *         if the waiting time elapsed before all permits were acquired
-     * @throws InterruptedException if the current thread is interrupted
-     * @throws IllegalArgumentException if {@code permits} is negative
-     */
-    public boolean tryAcquire(int permits, long timeout, TimeUnit unit)
-        throws InterruptedException {
-        if (permits < 0) throw new IllegalArgumentException();
-        return sync.tryAcquireSharedNanos(permits, unit.toNanos(timeout));
-    }
-
-    /**
-     * Releases the given number of permits, returning them to the semaphore.
-     *
-     * <p>Releases the given number of permits, increasing the number of
-     * available permits by that amount.
-     * If any threads are trying to acquire permits, then one
-     * is selected and given the permits that were just released.
-     * If the number of available permits satisfies that thread's request
-     * then that thread is (re)enabled for thread scheduling purposes;
-     * otherwise the thread will wait until sufficient permits are available.
-     * If there are still permits available
-     * after this thread's request has been satisfied, then those permits
-     * are assigned in turn to other threads trying to acquire permits.
-     *
-     * <p>There is no requirement that a thread that releases a permit must
-     * have acquired that permit by calling {@link Semaphore#acquire acquire}.
-     * Correct usage of a semaphore is established by programming convention
-     * in the application.
-     *
-     * @param permits the number of permits to release
-     * @throws IllegalArgumentException if {@code permits} is negative
-     */
-    public void release(int permits) {
-        if (permits < 0) throw new IllegalArgumentException();
-        sync.releaseShared(permits);
-    }
-
-    /**
-     * Returns the current number of permits available in this semaphore.
-     *
-     * <p>This method is typically used for debugging and testing purposes.
-     *
-     * @return the number of permits available in this semaphore
-     */
-    public int availablePermits() {
-        return sync.getPermits();
-    }
-
-    /**
-     * Acquires and returns all permits that are immediately available.
-     *
-     * @return the number of permits acquired
-     */
-    public int drainPermits() {
-        return sync.drainPermits();
-    }
-
-    /**
-     * Shrinks the number of available permits by the indicated
-     * reduction. This method can be useful in subclasses that use
-     * semaphores to track resources that become unavailable. This
-     * method differs from {@code acquire} in that it does not block
-     * waiting for permits to become available.
-     *
-     * @param reduction the number of permits to remove
-     * @throws IllegalArgumentException if {@code reduction} is negative
-     */
-    protected void reducePermits(int reduction) {
-        if (reduction < 0) throw new IllegalArgumentException();
-        sync.reducePermits(reduction);
-    }
-
-    /**
-     * Returns {@code true} if this semaphore has fairness set true.
-     *
-     * @return {@code true} if this semaphore has fairness set true
-     */
-    public boolean isFair() {
-        return sync instanceof FairSync;
-    }
-
-    /**
-     * Queries whether any threads are waiting to acquire. Note that
-     * because cancellations may occur at any time, a {@code true}
-     * return does not guarantee that any other thread will ever
-     * acquire.  This method is designed primarily for use in
-     * monitoring of the system state.
-     *
-     * @return {@code true} if there may be other threads waiting to
-     *         acquire the lock
-     */
-    public final boolean hasQueuedThreads() {
-        return sync.hasQueuedThreads();
-    }
-
-    /**
-     * Returns an estimate of the number of threads waiting to acquire.
-     * The value is only an estimate because the number of threads may
-     * change dynamically while this method traverses internal data
-     * structures.  This method is designed for use in monitoring of the
-     * system state, not for synchronization control.
-     *
-     * @return the estimated number of threads waiting for this lock
-     */
-    public final int getQueueLength() {
-        return sync.getQueueLength();
-    }
-
-    /**
-     * Returns a collection containing threads that may be waiting to acquire.
-     * Because the actual set of threads may change dynamically while
-     * constructing this result, the returned collection is only a best-effort
-     * estimate.  The elements of the returned collection are in no particular
-     * order.  This method is designed to facilitate construction of
-     * subclasses that provide more extensive monitoring facilities.
-     *
-     * @return the collection of threads
-     */
-    protected Collection<Thread> getQueuedThreads() {
-        return sync.getQueuedThreads();
-    }
-
-    /**
-     * Returns a string identifying this semaphore, as well as its state.
-     * The state, in brackets, includes the String {@code "Permits ="}
-     * followed by the number of permits.
-     *
-     * @return a string identifying this semaphore, as well as its state
-     */
-    public String toString() {
-        return super.toString() + "[Permits = " + sync.getPermits() + "]";
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/SynchronousQueue.java b/ojluni/src/main/java/java/util/concurrent/SynchronousQueue.java
deleted file mode 100755
index a1fa8e2..0000000
--- a/ojluni/src/main/java/java/util/concurrent/SynchronousQueue.java
+++ /dev/null
@@ -1,1196 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea, Bill Scherer, and Michael Scott with
- * assistance from members of JCP JSR-166 Expert Group and released to
- * the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.concurrent.locks.*;
-import java.util.concurrent.atomic.*;
-import java.util.*;
-
-/**
- * A {@linkplain BlockingQueue blocking queue} in which each insert
- * operation must wait for a corresponding remove operation by another
- * thread, and vice versa.  A synchronous queue does not have any
- * internal capacity, not even a capacity of one.  You cannot
- * <tt>peek</tt> at a synchronous queue because an element is only
- * present when you try to remove it; you cannot insert an element
- * (using any method) unless another thread is trying to remove it;
- * you cannot iterate as there is nothing to iterate.  The
- * <em>head</em> of the queue is the element that the first queued
- * inserting thread is trying to add to the queue; if there is no such
- * queued thread then no element is available for removal and
- * <tt>poll()</tt> will return <tt>null</tt>.  For purposes of other
- * <tt>Collection</tt> methods (for example <tt>contains</tt>), a
- * <tt>SynchronousQueue</tt> acts as an empty collection.  This queue
- * does not permit <tt>null</tt> elements.
- *
- * <p>Synchronous queues are similar to rendezvous channels used in
- * CSP and Ada. They are well suited for handoff designs, in which an
- * object running in one thread must sync up with an object running
- * in another thread in order to hand it some information, event, or
- * task.
- *
- * <p> This class supports an optional fairness policy for ordering
- * waiting producer and consumer threads.  By default, this ordering
- * is not guaranteed. However, a queue constructed with fairness set
- * to <tt>true</tt> grants threads access in FIFO order.
- *
- * <p>This class and its iterator implement all of the
- * <em>optional</em> methods of the {@link Collection} and {@link
- * Iterator} interfaces.
- *
- * <p>This class is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @since 1.5
- * @author Doug Lea and Bill Scherer and Michael Scott
- * @param <E> the type of elements held in this collection
- */
-public class SynchronousQueue<E> extends AbstractQueue<E>
-    implements BlockingQueue<E>, java.io.Serializable {
-    private static final long serialVersionUID = -3223113410248163686L;
-
-    /*
-     * This class implements extensions of the dual stack and dual
-     * queue algorithms described in "Nonblocking Concurrent Objects
-     * with Condition Synchronization", by W. N. Scherer III and
-     * M. L. Scott.  18th Annual Conf. on Distributed Computing,
-     * Oct. 2004 (see also
-     * http://www.cs.rochester.edu/u/scott/synchronization/pseudocode/duals.html).
-     * The (Lifo) stack is used for non-fair mode, and the (Fifo)
-     * queue for fair mode. The performance of the two is generally
-     * similar. Fifo usually supports higher throughput under
-     * contention but Lifo maintains higher thread locality in common
-     * applications.
-     *
-     * A dual queue (and similarly stack) is one that at any given
-     * time either holds "data" -- items provided by put operations,
-     * or "requests" -- slots representing take operations, or is
-     * empty. A call to "fulfill" (i.e., a call requesting an item
-     * from a queue holding data or vice versa) dequeues a
-     * complementary node.  The most interesting feature of these
-     * queues is that any operation can figure out which mode the
-     * queue is in, and act accordingly without needing locks.
-     *
-     * Both the queue and stack extend abstract class Transferer
-     * defining the single method transfer that does a put or a
-     * take. These are unified into a single method because in dual
-     * data structures, the put and take operations are symmetrical,
-     * so nearly all code can be combined. The resulting transfer
-     * methods are on the long side, but are easier to follow than
-     * they would be if broken up into nearly-duplicated parts.
-     *
-     * The queue and stack data structures share many conceptual
-     * similarities but very few concrete details. For simplicity,
-     * they are kept distinct so that they can later evolve
-     * separately.
-     *
-     * The algorithms here differ from the versions in the above paper
-     * in extending them for use in synchronous queues, as well as
-     * dealing with cancellation. The main differences include:
-     *
-     *  1. The original algorithms used bit-marked pointers, but
-     *     the ones here use mode bits in nodes, leading to a number
-     *     of further adaptations.
-     *  2. SynchronousQueues must block threads waiting to become
-     *     fulfilled.
-     *  3. Support for cancellation via timeout and interrupts,
-     *     including cleaning out cancelled nodes/threads
-     *     from lists to avoid garbage retention and memory depletion.
-     *
-     * Blocking is mainly accomplished using LockSupport park/unpark,
-     * except that nodes that appear to be the next ones to become
-     * fulfilled first spin a bit (on multiprocessors only). On very
-     * busy synchronous queues, spinning can dramatically improve
-     * throughput. And on less busy ones, the amount of spinning is
-     * small enough not to be noticeable.
-     *
-     * Cleaning is done in different ways in queues vs stacks.  For
-     * queues, we can almost always remove a node immediately in O(1)
-     * time (modulo retries for consistency checks) when it is
-     * cancelled. But if it may be pinned as the current tail, it must
-     * wait until some subsequent cancellation. For stacks, we need a
-     * potentially O(n) traversal to be sure that we can remove the
-     * node, but this can run concurrently with other threads
-     * accessing the stack.
-     *
-     * While garbage collection takes care of most node reclamation
-     * issues that otherwise complicate nonblocking algorithms, care
-     * is taken to "forget" references to data, other nodes, and
-     * threads that might be held on to long-term by blocked
-     * threads. In cases where setting to null would otherwise
-     * conflict with main algorithms, this is done by changing a
-     * node's link to now point to the node itself. This doesn't arise
-     * much for Stack nodes (because blocked threads do not hang on to
-     * old head pointers), but references in Queue nodes must be
-     * aggressively forgotten to avoid reachability of everything any
-     * node has ever referred to since arrival.
-     */
-
-    /**
-     * Shared internal API for dual stacks and queues.
-     */
-    abstract static class Transferer {
-        /**
-         * Performs a put or take.
-         *
-         * @param e if non-null, the item to be handed to a consumer;
-         *          if null, requests that transfer return an item
-         *          offered by producer.
-         * @param timed if this operation should timeout
-         * @param nanos the timeout, in nanoseconds
-         * @return if non-null, the item provided or received; if null,
-         *         the operation failed due to timeout or interrupt --
-         *         the caller can distinguish which of these occurred
-         *         by checking Thread.interrupted.
-         */
-        abstract Object transfer(Object e, boolean timed, long nanos);
-    }
-
-    /** The number of CPUs, for spin control */
-    static final int NCPUS = Runtime.getRuntime().availableProcessors();
-
-    /**
-     * The number of times to spin before blocking in timed waits.
-     * The value is empirically derived -- it works well across a
-     * variety of processors and OSes. Empirically, the best value
-     * seems not to vary with number of CPUs (beyond 2) so is just
-     * a constant.
-     */
-    static final int maxTimedSpins = (NCPUS < 2) ? 0 : 32;
-
-    /**
-     * The number of times to spin before blocking in untimed waits.
-     * This is greater than timed value because untimed waits spin
-     * faster since they don't need to check times on each spin.
-     */
-    static final int maxUntimedSpins = maxTimedSpins * 16;
-
-    /**
-     * The number of nanoseconds for which it is faster to spin
-     * rather than to use timed park. A rough estimate suffices.
-     */
-    static final long spinForTimeoutThreshold = 1000L;
-
-    /** Dual stack */
-    static final class TransferStack extends Transferer {
-        /*
-         * This extends Scherer-Scott dual stack algorithm, differing,
-         * among other ways, by using "covering" nodes rather than
-         * bit-marked pointers: Fulfilling operations push on marker
-         * nodes (with FULFILLING bit set in mode) to reserve a spot
-         * to match a waiting node.
-         */
-
-        /* Modes for SNodes, ORed together in node fields */
-        /** Node represents an unfulfilled consumer */
-        static final int REQUEST    = 0;
-        /** Node represents an unfulfilled producer */
-        static final int DATA       = 1;
-        /** Node is fulfilling another unfulfilled DATA or REQUEST */
-        static final int FULFILLING = 2;
-
-        /** Return true if m has fulfilling bit set */
-        static boolean isFulfilling(int m) { return (m & FULFILLING) != 0; }
-
-        /** Node class for TransferStacks. */
-        static final class SNode {
-            volatile SNode next;        // next node in stack
-            volatile SNode match;       // the node matched to this
-            volatile Thread waiter;     // to control park/unpark
-            Object item;                // data; or null for REQUESTs
-            int mode;
-            // Note: item and mode fields don't need to be volatile
-            // since they are always written before, and read after,
-            // other volatile/atomic operations.
-
-            SNode(Object item) {
-                this.item = item;
-            }
-
-            boolean casNext(SNode cmp, SNode val) {
-                return cmp == next &&
-                    UNSAFE.compareAndSwapObject(this, nextOffset, cmp, val);
-            }
-
-            /**
-             * Tries to match node s to this node, if so, waking up thread.
-             * Fulfillers call tryMatch to identify their waiters.
-             * Waiters block until they have been matched.
-             *
-             * @param s the node to match
-             * @return true if successfully matched to s
-             */
-            boolean tryMatch(SNode s) {
-                if (match == null &&
-                    UNSAFE.compareAndSwapObject(this, matchOffset, null, s)) {
-                    Thread w = waiter;
-                    if (w != null) {    // waiters need at most one unpark
-                        waiter = null;
-                        LockSupport.unpark(w);
-                    }
-                    return true;
-                }
-                return match == s;
-            }
-
-            /**
-             * Tries to cancel a wait by matching node to itself.
-             */
-            void tryCancel() {
-                UNSAFE.compareAndSwapObject(this, matchOffset, null, this);
-            }
-
-            boolean isCancelled() {
-                return match == this;
-            }
-
-            // Unsafe mechanics
-            private static final sun.misc.Unsafe UNSAFE;
-            private static final long matchOffset;
-            private static final long nextOffset;
-
-            static {
-                try {
-                    UNSAFE = sun.misc.Unsafe.getUnsafe();
-                    Class k = SNode.class;
-                    matchOffset = UNSAFE.objectFieldOffset
-                        (k.getDeclaredField("match"));
-                    nextOffset = UNSAFE.objectFieldOffset
-                        (k.getDeclaredField("next"));
-                } catch (Exception e) {
-                    throw new Error(e);
-                }
-            }
-        }
-
-        /** The head (top) of the stack */
-        volatile SNode head;
-
-        boolean casHead(SNode h, SNode nh) {
-            return h == head &&
-                UNSAFE.compareAndSwapObject(this, headOffset, h, nh);
-        }
-
-        /**
-         * Creates or resets fields of a node. Called only from transfer
-         * where the node to push on stack is lazily created and
-         * reused when possible to help reduce intervals between reads
-         * and CASes of head and to avoid surges of garbage when CASes
-         * to push nodes fail due to contention.
-         */
-        static SNode snode(SNode s, Object e, SNode next, int mode) {
-            if (s == null) s = new SNode(e);
-            s.mode = mode;
-            s.next = next;
-            return s;
-        }
-
-        /**
-         * Puts or takes an item.
-         */
-        Object transfer(Object e, boolean timed, long nanos) {
-            /*
-             * Basic algorithm is to loop trying one of three actions:
-             *
-             * 1. If apparently empty or already containing nodes of same
-             *    mode, try to push node on stack and wait for a match,
-             *    returning it, or null if cancelled.
-             *
-             * 2. If apparently containing node of complementary mode,
-             *    try to push a fulfilling node on to stack, match
-             *    with corresponding waiting node, pop both from
-             *    stack, and return matched item. The matching or
-             *    unlinking might not actually be necessary because of
-             *    other threads performing action 3:
-             *
-             * 3. If top of stack already holds another fulfilling node,
-             *    help it out by doing its match and/or pop
-             *    operations, and then continue. The code for helping
-             *    is essentially the same as for fulfilling, except
-             *    that it doesn't return the item.
-             */
-
-            SNode s = null; // constructed/reused as needed
-            int mode = (e == null) ? REQUEST : DATA;
-
-            for (;;) {
-                SNode h = head;
-                if (h == null || h.mode == mode) {  // empty or same-mode
-                    if (timed && nanos <= 0) {      // can't wait
-                        if (h != null && h.isCancelled())
-                            casHead(h, h.next);     // pop cancelled node
-                        else
-                            return null;
-                    } else if (casHead(h, s = snode(s, e, h, mode))) {
-                        SNode m = awaitFulfill(s, timed, nanos);
-                        if (m == s) {               // wait was cancelled
-                            clean(s);
-                            return null;
-                        }
-                        if ((h = head) != null && h.next == s)
-                            casHead(h, s.next);     // help s's fulfiller
-                        return (mode == REQUEST) ? m.item : s.item;
-                    }
-                } else if (!isFulfilling(h.mode)) { // try to fulfill
-                    if (h.isCancelled())            // already cancelled
-                        casHead(h, h.next);         // pop and retry
-                    else if (casHead(h, s=snode(s, e, h, FULFILLING|mode))) {
-                        for (;;) { // loop until matched or waiters disappear
-                            SNode m = s.next;       // m is s's match
-                            if (m == null) {        // all waiters are gone
-                                casHead(s, null);   // pop fulfill node
-                                s = null;           // use new node next time
-                                break;              // restart main loop
-                            }
-                            SNode mn = m.next;
-                            if (m.tryMatch(s)) {
-                                casHead(s, mn);     // pop both s and m
-                                return (mode == REQUEST) ? m.item : s.item;
-                            } else                  // lost match
-                                s.casNext(m, mn);   // help unlink
-                        }
-                    }
-                } else {                            // help a fulfiller
-                    SNode m = h.next;               // m is h's match
-                    if (m == null)                  // waiter is gone
-                        casHead(h, null);           // pop fulfilling node
-                    else {
-                        SNode mn = m.next;
-                        if (m.tryMatch(h))          // help match
-                            casHead(h, mn);         // pop both h and m
-                        else                        // lost match
-                            h.casNext(m, mn);       // help unlink
-                    }
-                }
-            }
-        }
-
-        /**
-         * Spins/blocks until node s is matched by a fulfill operation.
-         *
-         * @param s the waiting node
-         * @param timed true if timed wait
-         * @param nanos timeout value
-         * @return matched node, or s if cancelled
-         */
-        SNode awaitFulfill(SNode s, boolean timed, long nanos) {
-            /*
-             * When a node/thread is about to block, it sets its waiter
-             * field and then rechecks state at least one more time
-             * before actually parking, thus covering race vs
-             * fulfiller noticing that waiter is non-null so should be
-             * woken.
-             *
-             * When invoked by nodes that appear at the point of call
-             * to be at the head of the stack, calls to park are
-             * preceded by spins to avoid blocking when producers and
-             * consumers are arriving very close in time.  This can
-             * happen enough to bother only on multiprocessors.
-             *
-             * The order of checks for returning out of main loop
-             * reflects fact that interrupts have precedence over
-             * normal returns, which have precedence over
-             * timeouts. (So, on timeout, one last check for match is
-             * done before giving up.) Except that calls from untimed
-             * SynchronousQueue.{poll/offer} don't check interrupts
-             * and don't wait at all, so are trapped in transfer
-             * method rather than calling awaitFulfill.
-             */
-            long lastTime = timed ? System.nanoTime() : 0;
-            Thread w = Thread.currentThread();
-            SNode h = head;
-            int spins = (shouldSpin(s) ?
-                         (timed ? maxTimedSpins : maxUntimedSpins) : 0);
-            for (;;) {
-                if (w.isInterrupted())
-                    s.tryCancel();
-                SNode m = s.match;
-                if (m != null)
-                    return m;
-                if (timed) {
-                    long now = System.nanoTime();
-                    nanos -= now - lastTime;
-                    lastTime = now;
-                    if (nanos <= 0) {
-                        s.tryCancel();
-                        continue;
-                    }
-                }
-                if (spins > 0)
-                    spins = shouldSpin(s) ? (spins-1) : 0;
-                else if (s.waiter == null)
-                    s.waiter = w; // establish waiter so can park next iter
-                else if (!timed)
-                    LockSupport.park(this);
-                else if (nanos > spinForTimeoutThreshold)
-                    LockSupport.parkNanos(this, nanos);
-            }
-        }
-
-        /**
-         * Returns true if node s is at head or there is an active
-         * fulfiller.
-         */
-        boolean shouldSpin(SNode s) {
-            SNode h = head;
-            return (h == s || h == null || isFulfilling(h.mode));
-        }
-
-        /**
-         * Unlinks s from the stack.
-         */
-        void clean(SNode s) {
-            s.item = null;   // forget item
-            s.waiter = null; // forget thread
-
-            /*
-             * At worst we may need to traverse entire stack to unlink
-             * s. If there are multiple concurrent calls to clean, we
-             * might not see s if another thread has already removed
-             * it. But we can stop when we see any node known to
-             * follow s. We use s.next unless it too is cancelled, in
-             * which case we try the node one past. We don't check any
-             * further because we don't want to doubly traverse just to
-             * find sentinel.
-             */
-
-            SNode past = s.next;
-            if (past != null && past.isCancelled())
-                past = past.next;
-
-            // Absorb cancelled nodes at head
-            SNode p;
-            while ((p = head) != null && p != past && p.isCancelled())
-                casHead(p, p.next);
-
-            // Unsplice embedded nodes
-            while (p != null && p != past) {
-                SNode n = p.next;
-                if (n != null && n.isCancelled())
-                    p.casNext(n, n.next);
-                else
-                    p = n;
-            }
-        }
-
-        // Unsafe mechanics
-        private static final sun.misc.Unsafe UNSAFE;
-        private static final long headOffset;
-        static {
-            try {
-                UNSAFE = sun.misc.Unsafe.getUnsafe();
-                Class k = TransferStack.class;
-                headOffset = UNSAFE.objectFieldOffset
-                    (k.getDeclaredField("head"));
-            } catch (Exception e) {
-                throw new Error(e);
-            }
-        }
-    }
-
-    /** Dual Queue */
-    static final class TransferQueue extends Transferer {
-        /*
-         * This extends Scherer-Scott dual queue algorithm, differing,
-         * among other ways, by using modes within nodes rather than
-         * marked pointers. The algorithm is a little simpler than
-         * that for stacks because fulfillers do not need explicit
-         * nodes, and matching is done by CAS'ing QNode.item field
-         * from non-null to null (for put) or vice versa (for take).
-         */
-
-        /** Node class for TransferQueue. */
-        static final class QNode {
-            volatile QNode next;          // next node in queue
-            volatile Object item;         // CAS'ed to or from null
-            volatile Thread waiter;       // to control park/unpark
-            final boolean isData;
-
-            QNode(Object item, boolean isData) {
-                this.item = item;
-                this.isData = isData;
-            }
-
-            boolean casNext(QNode cmp, QNode val) {
-                return next == cmp &&
-                    UNSAFE.compareAndSwapObject(this, nextOffset, cmp, val);
-            }
-
-            boolean casItem(Object cmp, Object val) {
-                return item == cmp &&
-                    UNSAFE.compareAndSwapObject(this, itemOffset, cmp, val);
-            }
-
-            /**
-             * Tries to cancel by CAS'ing ref to this as item.
-             */
-            void tryCancel(Object cmp) {
-                UNSAFE.compareAndSwapObject(this, itemOffset, cmp, this);
-            }
-
-            boolean isCancelled() {
-                return item == this;
-            }
-
-            /**
-             * Returns true if this node is known to be off the queue
-             * because its next pointer has been forgotten due to
-             * an advanceHead operation.
-             */
-            boolean isOffList() {
-                return next == this;
-            }
-
-            // Unsafe mechanics
-            private static final sun.misc.Unsafe UNSAFE;
-            private static final long itemOffset;
-            private static final long nextOffset;
-
-            static {
-                try {
-                    UNSAFE = sun.misc.Unsafe.getUnsafe();
-                    Class k = QNode.class;
-                    itemOffset = UNSAFE.objectFieldOffset
-                        (k.getDeclaredField("item"));
-                    nextOffset = UNSAFE.objectFieldOffset
-                        (k.getDeclaredField("next"));
-                } catch (Exception e) {
-                    throw new Error(e);
-                }
-            }
-        }
-
-        /** Head of queue */
-        transient volatile QNode head;
-        /** Tail of queue */
-        transient volatile QNode tail;
-        /**
-         * Reference to a cancelled node that might not yet have been
-         * unlinked from queue because it was the last inserted node
-         * when it cancelled.
-         */
-        transient volatile QNode cleanMe;
-
-        TransferQueue() {
-            QNode h = new QNode(null, false); // initialize to dummy node.
-            head = h;
-            tail = h;
-        }
-
-        /**
-         * Tries to cas nh as new head; if successful, unlink
-         * old head's next node to avoid garbage retention.
-         */
-        void advanceHead(QNode h, QNode nh) {
-            if (h == head &&
-                UNSAFE.compareAndSwapObject(this, headOffset, h, nh))
-                h.next = h; // forget old next
-        }
-
-        /**
-         * Tries to cas nt as new tail.
-         */
-        void advanceTail(QNode t, QNode nt) {
-            if (tail == t)
-                UNSAFE.compareAndSwapObject(this, tailOffset, t, nt);
-        }
-
-        /**
-         * Tries to CAS cleanMe slot.
-         */
-        boolean casCleanMe(QNode cmp, QNode val) {
-            return cleanMe == cmp &&
-                UNSAFE.compareAndSwapObject(this, cleanMeOffset, cmp, val);
-        }
-
-        /**
-         * Puts or takes an item.
-         */
-        Object transfer(Object e, boolean timed, long nanos) {
-            /* Basic algorithm is to loop trying to take either of
-             * two actions:
-             *
-             * 1. If queue apparently empty or holding same-mode nodes,
-             *    try to add node to queue of waiters, wait to be
-             *    fulfilled (or cancelled) and return matching item.
-             *
-             * 2. If queue apparently contains waiting items, and this
-             *    call is of complementary mode, try to fulfill by CAS'ing
-             *    item field of waiting node and dequeuing it, and then
-             *    returning matching item.
-             *
-             * In each case, along the way, check for and try to help
-             * advance head and tail on behalf of other stalled/slow
-             * threads.
-             *
-             * The loop starts off with a null check guarding against
-             * seeing uninitialized head or tail values. This never
-             * happens in current SynchronousQueue, but could if
-             * callers held non-volatile/final ref to the
-             * transferer. The check is here anyway because it places
-             * null checks at top of loop, which is usually faster
-             * than having them implicitly interspersed.
-             */
-
-            QNode s = null; // constructed/reused as needed
-            boolean isData = (e != null);
-
-            for (;;) {
-                QNode t = tail;
-                QNode h = head;
-                if (t == null || h == null)         // saw uninitialized value
-                    continue;                       // spin
-
-                if (h == t || t.isData == isData) { // empty or same-mode
-                    QNode tn = t.next;
-                    if (t != tail)                  // inconsistent read
-                        continue;
-                    if (tn != null) {               // lagging tail
-                        advanceTail(t, tn);
-                        continue;
-                    }
-                    if (timed && nanos <= 0)        // can't wait
-                        return null;
-                    if (s == null)
-                        s = new QNode(e, isData);
-                    if (!t.casNext(null, s))        // failed to link in
-                        continue;
-
-                    advanceTail(t, s);              // swing tail and wait
-                    Object x = awaitFulfill(s, e, timed, nanos);
-                    if (x == s) {                   // wait was cancelled
-                        clean(t, s);
-                        return null;
-                    }
-
-                    if (!s.isOffList()) {           // not already unlinked
-                        advanceHead(t, s);          // unlink if head
-                        if (x != null)              // and forget fields
-                            s.item = s;
-                        s.waiter = null;
-                    }
-                    return (x != null) ? x : e;
-
-                } else {                            // complementary-mode
-                    QNode m = h.next;               // node to fulfill
-                    if (t != tail || m == null || h != head)
-                        continue;                   // inconsistent read
-
-                    Object x = m.item;
-                    if (isData == (x != null) ||    // m already fulfilled
-                        x == m ||                   // m cancelled
-                        !m.casItem(x, e)) {         // lost CAS
-                        advanceHead(h, m);          // dequeue and retry
-                        continue;
-                    }
-
-                    advanceHead(h, m);              // successfully fulfilled
-                    LockSupport.unpark(m.waiter);
-                    return (x != null) ? x : e;
-                }
-            }
-        }
-
-        /**
-         * Spins/blocks until node s is fulfilled.
-         *
-         * @param s the waiting node
-         * @param e the comparison value for checking match
-         * @param timed true if timed wait
-         * @param nanos timeout value
-         * @return matched item, or s if cancelled
-         */
-        Object awaitFulfill(QNode s, Object e, boolean timed, long nanos) {
-            /* Same idea as TransferStack.awaitFulfill */
-            long lastTime = timed ? System.nanoTime() : 0;
-            Thread w = Thread.currentThread();
-            int spins = ((head.next == s) ?
-                         (timed ? maxTimedSpins : maxUntimedSpins) : 0);
-            for (;;) {
-                if (w.isInterrupted())
-                    s.tryCancel(e);
-                Object x = s.item;
-                if (x != e)
-                    return x;
-                if (timed) {
-                    long now = System.nanoTime();
-                    nanos -= now - lastTime;
-                    lastTime = now;
-                    if (nanos <= 0) {
-                        s.tryCancel(e);
-                        continue;
-                    }
-                }
-                if (spins > 0)
-                    --spins;
-                else if (s.waiter == null)
-                    s.waiter = w;
-                else if (!timed)
-                    LockSupport.park(this);
-                else if (nanos > spinForTimeoutThreshold)
-                    LockSupport.parkNanos(this, nanos);
-            }
-        }
-
-        /**
-         * Gets rid of cancelled node s with original predecessor pred.
-         */
-        void clean(QNode pred, QNode s) {
-            s.waiter = null; // forget thread
-            /*
-             * At any given time, exactly one node on list cannot be
-             * deleted -- the last inserted node. To accommodate this,
-             * if we cannot delete s, we save its predecessor as
-             * "cleanMe", deleting the previously saved version
-             * first. At least one of node s or the node previously
-             * saved can always be deleted, so this always terminates.
-             */
-            while (pred.next == s) { // Return early if already unlinked
-                QNode h = head;
-                QNode hn = h.next;   // Absorb cancelled first node as head
-                if (hn != null && hn.isCancelled()) {
-                    advanceHead(h, hn);
-                    continue;
-                }
-                QNode t = tail;      // Ensure consistent read for tail
-                if (t == h)
-                    return;
-                QNode tn = t.next;
-                if (t != tail)
-                    continue;
-                if (tn != null) {
-                    advanceTail(t, tn);
-                    continue;
-                }
-                if (s != t) {        // If not tail, try to unsplice
-                    QNode sn = s.next;
-                    if (sn == s || pred.casNext(s, sn))
-                        return;
-                }
-                QNode dp = cleanMe;
-                if (dp != null) {    // Try unlinking previous cancelled node
-                    QNode d = dp.next;
-                    QNode dn;
-                    if (d == null ||               // d is gone or
-                        d == dp ||                 // d is off list or
-                        !d.isCancelled() ||        // d not cancelled or
-                        (d != t &&                 // d not tail and
-                         (dn = d.next) != null &&  //   has successor
-                         dn != d &&                //   that is on list
-                         dp.casNext(d, dn)))       // d unspliced
-                        casCleanMe(dp, null);
-                    if (dp == pred)
-                        return;      // s is already saved node
-                } else if (casCleanMe(null, pred))
-                    return;          // Postpone cleaning s
-            }
-        }
-
-        private static final sun.misc.Unsafe UNSAFE;
-        private static final long headOffset;
-        private static final long tailOffset;
-        private static final long cleanMeOffset;
-        static {
-            try {
-                UNSAFE = sun.misc.Unsafe.getUnsafe();
-                Class k = TransferQueue.class;
-                headOffset = UNSAFE.objectFieldOffset
-                    (k.getDeclaredField("head"));
-                tailOffset = UNSAFE.objectFieldOffset
-                    (k.getDeclaredField("tail"));
-                cleanMeOffset = UNSAFE.objectFieldOffset
-                    (k.getDeclaredField("cleanMe"));
-            } catch (Exception e) {
-                throw new Error(e);
-            }
-        }
-    }
-
-    /**
-     * The transferer. Set only in constructor, but cannot be declared
-     * as final without further complicating serialization.  Since
-     * this is accessed only at most once per public method, there
-     * isn't a noticeable performance penalty for using volatile
-     * instead of final here.
-     */
-    private transient volatile Transferer transferer;
-
-    /**
-     * Creates a <tt>SynchronousQueue</tt> with nonfair access policy.
-     */
-    public SynchronousQueue() {
-        this(false);
-    }
-
-    /**
-     * Creates a <tt>SynchronousQueue</tt> with the specified fairness policy.
-     *
-     * @param fair if true, waiting threads contend in FIFO order for
-     *        access; otherwise the order is unspecified.
-     */
-    public SynchronousQueue(boolean fair) {
-        transferer = fair ? new TransferQueue() : new TransferStack();
-    }
-
-    /**
-     * Adds the specified element to this queue, waiting if necessary for
-     * another thread to receive it.
-     *
-     * @throws InterruptedException {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public void put(E o) throws InterruptedException {
-        if (o == null) throw new NullPointerException();
-        if (transferer.transfer(o, false, 0) == null) {
-            Thread.interrupted();
-            throw new InterruptedException();
-        }
-    }
-
-    /**
-     * Inserts the specified element into this queue, waiting if necessary
-     * up to the specified wait time for another thread to receive it.
-     *
-     * @return <tt>true</tt> if successful, or <tt>false</tt> if the
-     *         specified waiting time elapses before a consumer appears.
-     * @throws InterruptedException {@inheritDoc}
-     * @throws NullPointerException {@inheritDoc}
-     */
-    public boolean offer(E o, long timeout, TimeUnit unit)
-        throws InterruptedException {
-        if (o == null) throw new NullPointerException();
-        if (transferer.transfer(o, true, unit.toNanos(timeout)) != null)
-            return true;
-        if (!Thread.interrupted())
-            return false;
-        throw new InterruptedException();
-    }
-
-    /**
-     * Inserts the specified element into this queue, if another thread is
-     * waiting to receive it.
-     *
-     * @param e the element to add
-     * @return <tt>true</tt> if the element was added to this queue, else
-     *         <tt>false</tt>
-     * @throws NullPointerException if the specified element is null
-     */
-    public boolean offer(E e) {
-        if (e == null) throw new NullPointerException();
-        return transferer.transfer(e, true, 0) != null;
-    }
-
-    /**
-     * Retrieves and removes the head of this queue, waiting if necessary
-     * for another thread to insert it.
-     *
-     * @return the head of this queue
-     * @throws InterruptedException {@inheritDoc}
-     */
-    public E take() throws InterruptedException {
-        Object e = transferer.transfer(null, false, 0);
-        if (e != null)
-            return (E)e;
-        Thread.interrupted();
-        throw new InterruptedException();
-    }
-
-    /**
-     * Retrieves and removes the head of this queue, waiting
-     * if necessary up to the specified wait time, for another thread
-     * to insert it.
-     *
-     * @return the head of this queue, or <tt>null</tt> if the
-     *         specified waiting time elapses before an element is present.
-     * @throws InterruptedException {@inheritDoc}
-     */
-    public E poll(long timeout, TimeUnit unit) throws InterruptedException {
-        Object e = transferer.transfer(null, true, unit.toNanos(timeout));
-        if (e != null || !Thread.interrupted())
-            return (E)e;
-        throw new InterruptedException();
-    }
-
-    /**
-     * Retrieves and removes the head of this queue, if another thread
-     * is currently making an element available.
-     *
-     * @return the head of this queue, or <tt>null</tt> if no
-     *         element is available.
-     */
-    public E poll() {
-        return (E)transferer.transfer(null, true, 0);
-    }
-
-    /**
-     * Always returns <tt>true</tt>.
-     * A <tt>SynchronousQueue</tt> has no internal capacity.
-     *
-     * @return <tt>true</tt>
-     */
-    public boolean isEmpty() {
-        return true;
-    }
-
-    /**
-     * Always returns zero.
-     * A <tt>SynchronousQueue</tt> has no internal capacity.
-     *
-     * @return zero.
-     */
-    public int size() {
-        return 0;
-    }
-
-    /**
-     * Always returns zero.
-     * A <tt>SynchronousQueue</tt> has no internal capacity.
-     *
-     * @return zero.
-     */
-    public int remainingCapacity() {
-        return 0;
-    }
-
-    /**
-     * Does nothing.
-     * A <tt>SynchronousQueue</tt> has no internal capacity.
-     */
-    public void clear() {
-    }
-
-    /**
-     * Always returns <tt>false</tt>.
-     * A <tt>SynchronousQueue</tt> has no internal capacity.
-     *
-     * @param o the element
-     * @return <tt>false</tt>
-     */
-    public boolean contains(Object o) {
-        return false;
-    }
-
-    /**
-     * Always returns <tt>false</tt>.
-     * A <tt>SynchronousQueue</tt> has no internal capacity.
-     *
-     * @param o the element to remove
-     * @return <tt>false</tt>
-     */
-    public boolean remove(Object o) {
-        return false;
-    }
-
-    /**
-     * Returns <tt>false</tt> unless the given collection is empty.
-     * A <tt>SynchronousQueue</tt> has no internal capacity.
-     *
-     * @param c the collection
-     * @return <tt>false</tt> unless given collection is empty
-     */
-    public boolean containsAll(Collection<?> c) {
-        return c.isEmpty();
-    }
-
-    /**
-     * Always returns <tt>false</tt>.
-     * A <tt>SynchronousQueue</tt> has no internal capacity.
-     *
-     * @param c the collection
-     * @return <tt>false</tt>
-     */
-    public boolean removeAll(Collection<?> c) {
-        return false;
-    }
-
-    /**
-     * Always returns <tt>false</tt>.
-     * A <tt>SynchronousQueue</tt> has no internal capacity.
-     *
-     * @param c the collection
-     * @return <tt>false</tt>
-     */
-    public boolean retainAll(Collection<?> c) {
-        return false;
-    }
-
-    /**
-     * Always returns <tt>null</tt>.
-     * A <tt>SynchronousQueue</tt> does not return elements
-     * unless actively waited on.
-     *
-     * @return <tt>null</tt>
-     */
-    public E peek() {
-        return null;
-    }
-
-    /**
-     * Returns an empty iterator in which <tt>hasNext</tt> always returns
-     * <tt>false</tt>.
-     *
-     * @return an empty iterator
-     */
-    public Iterator<E> iterator() {
-        return Collections.emptyIterator();
-    }
-
-    /**
-     * Returns a zero-length array.
-     * @return a zero-length array
-     */
-    public Object[] toArray() {
-        return new Object[0];
-    }
-
-    /**
-     * Sets the zeroeth element of the specified array to <tt>null</tt>
-     * (if the array has non-zero length) and returns it.
-     *
-     * @param a the array
-     * @return the specified array
-     * @throws NullPointerException if the specified array is null
-     */
-    public <T> T[] toArray(T[] a) {
-        if (a.length > 0)
-            a[0] = null;
-        return a;
-    }
-
-    /**
-     * @throws UnsupportedOperationException {@inheritDoc}
-     * @throws ClassCastException            {@inheritDoc}
-     * @throws NullPointerException          {@inheritDoc}
-     * @throws IllegalArgumentException      {@inheritDoc}
-     */
-    public int drainTo(Collection<? super E> c) {
-        if (c == null)
-            throw new NullPointerException();
-        if (c == this)
-            throw new IllegalArgumentException();
-        int n = 0;
-        E e;
-        while ( (e = poll()) != null) {
-            c.add(e);
-            ++n;
-        }
-        return n;
-    }
-
-    /**
-     * @throws UnsupportedOperationException {@inheritDoc}
-     * @throws ClassCastException            {@inheritDoc}
-     * @throws NullPointerException          {@inheritDoc}
-     * @throws IllegalArgumentException      {@inheritDoc}
-     */
-    public int drainTo(Collection<? super E> c, int maxElements) {
-        if (c == null)
-            throw new NullPointerException();
-        if (c == this)
-            throw new IllegalArgumentException();
-        int n = 0;
-        E e;
-        while (n < maxElements && (e = poll()) != null) {
-            c.add(e);
-            ++n;
-        }
-        return n;
-    }
-
-    /*
-     * To cope with serialization strategy in the 1.5 version of
-     * SynchronousQueue, we declare some unused classes and fields
-     * that exist solely to enable serializability across versions.
-     * These fields are never used, so are initialized only if this
-     * object is ever serialized or deserialized.
-     */
-
-    static class WaitQueue implements java.io.Serializable { }
-    static class LifoWaitQueue extends WaitQueue {
-        private static final long serialVersionUID = -3633113410248163686L;
-    }
-    static class FifoWaitQueue extends WaitQueue {
-        private static final long serialVersionUID = -3623113410248163686L;
-    }
-    private ReentrantLock qlock;
-    private WaitQueue waitingProducers;
-    private WaitQueue waitingConsumers;
-
-    /**
-     * Save the state to a stream (that is, serialize it).
-     *
-     * @param s the stream
-     */
-    private void writeObject(java.io.ObjectOutputStream s)
-        throws java.io.IOException {
-        boolean fair = transferer instanceof TransferQueue;
-        if (fair) {
-            qlock = new ReentrantLock(true);
-            waitingProducers = new FifoWaitQueue();
-            waitingConsumers = new FifoWaitQueue();
-        }
-        else {
-            qlock = new ReentrantLock();
-            waitingProducers = new LifoWaitQueue();
-            waitingConsumers = new LifoWaitQueue();
-        }
-        s.defaultWriteObject();
-    }
-
-    private void readObject(final java.io.ObjectInputStream s)
-        throws java.io.IOException, ClassNotFoundException {
-        s.defaultReadObject();
-        if (waitingProducers instanceof FifoWaitQueue)
-            transferer = new TransferQueue();
-        else
-            transferer = new TransferStack();
-    }
-
-    // Unsafe mechanics
-    static long objectFieldOffset(sun.misc.Unsafe UNSAFE,
-                                  String field, Class<?> klazz) {
-        try {
-            return UNSAFE.objectFieldOffset(klazz.getDeclaredField(field));
-        } catch (NoSuchFieldException e) {
-            // Convert Exception to corresponding Error
-            NoSuchFieldError error = new NoSuchFieldError(field);
-            error.initCause(e);
-            throw error;
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ThreadFactory.java b/ojluni/src/main/java/java/util/concurrent/ThreadFactory.java
deleted file mode 100755
index 9274abc..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ThreadFactory.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * An object that creates new threads on demand.  Using thread factories
- * removes hardwiring of calls to {@link Thread#Thread(Runnable) new Thread},
- * enabling applications to use special thread subclasses, priorities, etc.
- *
- * <p>
- * The simplest implementation of this interface is just:
- * <pre>
- * class SimpleThreadFactory implements ThreadFactory {
- *   public Thread newThread(Runnable r) {
- *     return new Thread(r);
- *   }
- * }
- * </pre>
- *
- * The {@link Executors#defaultThreadFactory} method provides a more
- * useful simple implementation, that sets the created thread context
- * to known values before returning it.
- * @since 1.5
- * @author Doug Lea
- */
-public interface ThreadFactory {
-
-    /**
-     * Constructs a new {@code Thread}.  Implementations may also initialize
-     * priority, name, daemon status, {@code ThreadGroup}, etc.
-     *
-     * @param r a runnable to be executed by new thread instance
-     * @return constructed thread, or {@code null} if the request to
-     *         create a thread is rejected
-     */
-    Thread newThread(Runnable r);
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ThreadLocalRandom.java b/ojluni/src/main/java/java/util/concurrent/ThreadLocalRandom.java
deleted file mode 100755
index aa8210b..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ThreadLocalRandom.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-import java.util.Random;
-
-/**
- * A random number generator isolated to the current thread.  Like the
- * global {@link java.util.Random} generator used by the {@link
- * java.lang.Math} class, a {@code ThreadLocalRandom} is initialized
- * with an internally generated seed that may not otherwise be
- * modified. When applicable, use of {@code ThreadLocalRandom} rather
- * than shared {@code Random} objects in concurrent programs will
- * typically encounter much less overhead and contention.  Use of
- * {@code ThreadLocalRandom} is particularly appropriate when multiple
- * tasks (for example, each a {@link ForkJoinTask}) use random numbers
- * in parallel in thread pools.
- *
- * <p>Usages of this class should typically be of the form:
- * {@code ThreadLocalRandom.current().nextX(...)} (where
- * {@code X} is {@code Int}, {@code Long}, etc).
- * When all usages are of this form, it is never possible to
- * accidently share a {@code ThreadLocalRandom} across multiple threads.
- *
- * <p>This class also provides additional commonly used bounded random
- * generation methods.
- *
- * @since 1.7
- * @author Doug Lea
- */
-public class ThreadLocalRandom extends Random {
-    // same constants as Random, but must be redeclared because private
-    private static final long multiplier = 0x5DEECE66DL;
-    private static final long addend = 0xBL;
-    private static final long mask = (1L << 48) - 1;
-
-    /**
-     * The random seed. We can't use super.seed.
-     */
-    private long rnd;
-
-    /**
-     * Initialization flag to permit calls to setSeed to succeed only
-     * while executing the Random constructor.  We can't allow others
-     * since it would cause setting seed in one part of a program to
-     * unintentionally impact other usages by the thread.
-     */
-    boolean initialized;
-
-    // Padding to help avoid memory contention among seed updates in
-    // different TLRs in the common case that they are located near
-    // each other.
-    private long pad0, pad1, pad2, pad3, pad4, pad5, pad6, pad7;
-
-    /**
-     * The actual ThreadLocal
-     */
-    private static final ThreadLocal<ThreadLocalRandom> localRandom =
-        new ThreadLocal<ThreadLocalRandom>() {
-            protected ThreadLocalRandom initialValue() {
-                return new ThreadLocalRandom();
-            }
-    };
-
-
-    /**
-     * Constructor called only by localRandom.initialValue.
-     */
-    ThreadLocalRandom() {
-        super();
-        initialized = true;
-    }
-
-    /**
-     * Returns the current thread's {@code ThreadLocalRandom}.
-     *
-     * @return the current thread's {@code ThreadLocalRandom}
-     */
-    public static ThreadLocalRandom current() {
-        return localRandom.get();
-    }
-
-    /**
-     * Throws {@code UnsupportedOperationException}.  Setting seeds in
-     * this generator is not supported.
-     *
-     * @throws UnsupportedOperationException always
-     */
-    public void setSeed(long seed) {
-        if (initialized)
-            throw new UnsupportedOperationException();
-        rnd = (seed ^ multiplier) & mask;
-    }
-
-    protected int next(int bits) {
-        rnd = (rnd * multiplier + addend) & mask;
-        return (int) (rnd >>> (48-bits));
-    }
-
-    /**
-     * Returns a pseudorandom, uniformly distributed value between the
-     * given least value (inclusive) and bound (exclusive).
-     *
-     * @param least the least value returned
-     * @param bound the upper bound (exclusive)
-     * @throws IllegalArgumentException if least greater than or equal
-     * to bound
-     * @return the next value
-     */
-    public int nextInt(int least, int bound) {
-        if (least >= bound)
-            throw new IllegalArgumentException();
-        return nextInt(bound - least) + least;
-    }
-
-    /**
-     * Returns a pseudorandom, uniformly distributed value
-     * between 0 (inclusive) and the specified value (exclusive).
-     *
-     * @param n the bound on the random number to be returned.  Must be
-     *        positive.
-     * @return the next value
-     * @throws IllegalArgumentException if n is not positive
-     */
-    public long nextLong(long n) {
-        if (n <= 0)
-            throw new IllegalArgumentException("n must be positive");
-        // Divide n by two until small enough for nextInt. On each
-        // iteration (at most 31 of them but usually much less),
-        // randomly choose both whether to include high bit in result
-        // (offset) and whether to continue with the lower vs upper
-        // half (which makes a difference only if odd).
-        long offset = 0;
-        while (n >= Integer.MAX_VALUE) {
-            int bits = next(2);
-            long half = n >>> 1;
-            long nextn = ((bits & 2) == 0) ? half : n - half;
-            if ((bits & 1) == 0)
-                offset += n - nextn;
-            n = nextn;
-        }
-        return offset + nextInt((int) n);
-    }
-
-    /**
-     * Returns a pseudorandom, uniformly distributed value between the
-     * given least value (inclusive) and bound (exclusive).
-     *
-     * @param least the least value returned
-     * @param bound the upper bound (exclusive)
-     * @return the next value
-     * @throws IllegalArgumentException if least greater than or equal
-     * to bound
-     */
-    public long nextLong(long least, long bound) {
-        if (least >= bound)
-            throw new IllegalArgumentException();
-        return nextLong(bound - least) + least;
-    }
-
-    /**
-     * Returns a pseudorandom, uniformly distributed {@code double} value
-     * between 0 (inclusive) and the specified value (exclusive).
-     *
-     * @param n the bound on the random number to be returned.  Must be
-     *        positive.
-     * @return the next value
-     * @throws IllegalArgumentException if n is not positive
-     */
-    public double nextDouble(double n) {
-        if (n <= 0)
-            throw new IllegalArgumentException("n must be positive");
-        return nextDouble() * n;
-    }
-
-    /**
-     * Returns a pseudorandom, uniformly distributed value between the
-     * given least value (inclusive) and bound (exclusive).
-     *
-     * @param least the least value returned
-     * @param bound the upper bound (exclusive)
-     * @return the next value
-     * @throws IllegalArgumentException if least greater than or equal
-     * to bound
-     */
-    public double nextDouble(double least, double bound) {
-        if (least >= bound)
-            throw new IllegalArgumentException();
-        return nextDouble() * (bound - least) + least;
-    }
-
-    private static final long serialVersionUID = -5851777807851030925L;
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/ThreadPoolExecutor.java b/ojluni/src/main/java/java/util/concurrent/ThreadPoolExecutor.java
deleted file mode 100755
index b7be727..0000000
--- a/ojluni/src/main/java/java/util/concurrent/ThreadPoolExecutor.java
+++ /dev/null
@@ -1,2102 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-import java.util.concurrent.locks.AbstractQueuedSynchronizer;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.*;
-
-/**
- * An {@link ExecutorService} that executes each submitted task using
- * one of possibly several pooled threads, normally configured
- * using {@link Executors} factory methods.
- *
- * <p>Thread pools address two different problems: they usually
- * provide improved performance when executing large numbers of
- * asynchronous tasks, due to reduced per-task invocation overhead,
- * and they provide a means of bounding and managing the resources,
- * including threads, consumed when executing a collection of tasks.
- * Each {@code ThreadPoolExecutor} also maintains some basic
- * statistics, such as the number of completed tasks.
- *
- * <p>To be useful across a wide range of contexts, this class
- * provides many adjustable parameters and extensibility
- * hooks. However, programmers are urged to use the more convenient
- * {@link Executors} factory methods {@link
- * Executors#newCachedThreadPool} (unbounded thread pool, with
- * automatic thread reclamation), {@link Executors#newFixedThreadPool}
- * (fixed size thread pool) and {@link
- * Executors#newSingleThreadExecutor} (single background thread), that
- * preconfigure settings for the most common usage
- * scenarios. Otherwise, use the following guide when manually
- * configuring and tuning this class:
- *
- * <dl>
- *
- * <dt>Core and maximum pool sizes</dt>
- *
- * <dd>A {@code ThreadPoolExecutor} will automatically adjust the
- * pool size (see {@link #getPoolSize})
- * according to the bounds set by
- * corePoolSize (see {@link #getCorePoolSize}) and
- * maximumPoolSize (see {@link #getMaximumPoolSize}).
- *
- * When a new task is submitted in method {@link #execute}, and fewer
- * than corePoolSize threads are running, a new thread is created to
- * handle the request, even if other worker threads are idle.  If
- * there are more than corePoolSize but less than maximumPoolSize
- * threads running, a new thread will be created only if the queue is
- * full.  By setting corePoolSize and maximumPoolSize the same, you
- * create a fixed-size thread pool. By setting maximumPoolSize to an
- * essentially unbounded value such as {@code Integer.MAX_VALUE}, you
- * allow the pool to accommodate an arbitrary number of concurrent
- * tasks. Most typically, core and maximum pool sizes are set only
- * upon construction, but they may also be changed dynamically using
- * {@link #setCorePoolSize} and {@link #setMaximumPoolSize}. </dd>
- *
- * <dt>On-demand construction</dt>
- *
- * <dd> By default, even core threads are initially created and
- * started only when new tasks arrive, but this can be overridden
- * dynamically using method {@link #prestartCoreThread} or {@link
- * #prestartAllCoreThreads}.  You probably want to prestart threads if
- * you construct the pool with a non-empty queue. </dd>
- *
- * <dt>Creating new threads</dt>
- *
- * <dd>New threads are created using a {@link ThreadFactory}.  If not
- * otherwise specified, a {@link Executors#defaultThreadFactory} is
- * used, that creates threads to all be in the same {@link
- * ThreadGroup} and with the same {@code NORM_PRIORITY} priority and
- * non-daemon status. By supplying a different ThreadFactory, you can
- * alter the thread's name, thread group, priority, daemon status,
- * etc. If a {@code ThreadFactory} fails to create a thread when asked
- * by returning null from {@code newThread}, the executor will
- * continue, but might not be able to execute any tasks. Threads
- * should possess the "modifyThread" {@code RuntimePermission}. If
- * worker threads or other threads using the pool do not possess this
- * permission, service may be degraded: configuration changes may not
- * take effect in a timely manner, and a shutdown pool may remain in a
- * state in which termination is possible but not completed.</dd>
- *
- * <dt>Keep-alive times</dt>
- *
- * <dd>If the pool currently has more than corePoolSize threads,
- * excess threads will be terminated if they have been idle for more
- * than the keepAliveTime (see {@link #getKeepAliveTime}). This
- * provides a means of reducing resource consumption when the pool is
- * not being actively used. If the pool becomes more active later, new
- * threads will be constructed. This parameter can also be changed
- * dynamically using method {@link #setKeepAliveTime}. Using a value
- * of {@code Long.MAX_VALUE} {@link TimeUnit#NANOSECONDS} effectively
- * disables idle threads from ever terminating prior to shut down. By
- * default, the keep-alive policy applies only when there are more
- * than corePoolSizeThreads. But method {@link
- * #allowCoreThreadTimeOut(boolean)} can be used to apply this
- * time-out policy to core threads as well, so long as the
- * keepAliveTime value is non-zero. </dd>
- *
- * <dt>Queuing</dt>
- *
- * <dd>Any {@link BlockingQueue} may be used to transfer and hold
- * submitted tasks.  The use of this queue interacts with pool sizing:
- *
- * <ul>
- *
- * <li> If fewer than corePoolSize threads are running, the Executor
- * always prefers adding a new thread
- * rather than queuing.</li>
- *
- * <li> If corePoolSize or more threads are running, the Executor
- * always prefers queuing a request rather than adding a new
- * thread.</li>
- *
- * <li> If a request cannot be queued, a new thread is created unless
- * this would exceed maximumPoolSize, in which case, the task will be
- * rejected.</li>
- *
- * </ul>
- *
- * There are three general strategies for queuing:
- * <ol>
- *
- * <li> <em> Direct handoffs.</em> A good default choice for a work
- * queue is a {@link SynchronousQueue} that hands off tasks to threads
- * without otherwise holding them. Here, an attempt to queue a task
- * will fail if no threads are immediately available to run it, so a
- * new thread will be constructed. This policy avoids lockups when
- * handling sets of requests that might have internal dependencies.
- * Direct handoffs generally require unbounded maximumPoolSizes to
- * avoid rejection of new submitted tasks. This in turn admits the
- * possibility of unbounded thread growth when commands continue to
- * arrive on average faster than they can be processed.  </li>
- *
- * <li><em> Unbounded queues.</em> Using an unbounded queue (for
- * example a {@link LinkedBlockingQueue} without a predefined
- * capacity) will cause new tasks to wait in the queue when all
- * corePoolSize threads are busy. Thus, no more than corePoolSize
- * threads will ever be created. (And the value of the maximumPoolSize
- * therefore doesn't have any effect.)  This may be appropriate when
- * each task is completely independent of others, so tasks cannot
- * affect each others execution; for example, in a web page server.
- * While this style of queuing can be useful in smoothing out
- * transient bursts of requests, it admits the possibility of
- * unbounded work queue growth when commands continue to arrive on
- * average faster than they can be processed.  </li>
- *
- * <li><em>Bounded queues.</em> A bounded queue (for example, an
- * {@link ArrayBlockingQueue}) helps prevent resource exhaustion when
- * used with finite maximumPoolSizes, but can be more difficult to
- * tune and control.  Queue sizes and maximum pool sizes may be traded
- * off for each other: Using large queues and small pools minimizes
- * CPU usage, OS resources, and context-switching overhead, but can
- * lead to artificially low throughput.  If tasks frequently block (for
- * example if they are I/O bound), a system may be able to schedule
- * time for more threads than you otherwise allow. Use of small queues
- * generally requires larger pool sizes, which keeps CPUs busier but
- * may encounter unacceptable scheduling overhead, which also
- * decreases throughput.  </li>
- *
- * </ol>
- *
- * </dd>
- *
- * <dt>Rejected tasks</dt>
- *
- * <dd> New tasks submitted in method {@link #execute} will be
- * <em>rejected</em> when the Executor has been shut down, and also
- * when the Executor uses finite bounds for both maximum threads and
- * work queue capacity, and is saturated.  In either case, the {@code
- * execute} method invokes the {@link
- * RejectedExecutionHandler#rejectedExecution} method of its {@link
- * RejectedExecutionHandler}.  Four predefined handler policies are
- * provided:
- *
- * <ol>
- *
- * <li> In the default {@link ThreadPoolExecutor.AbortPolicy}, the
- * handler throws a runtime {@link RejectedExecutionException} upon
- * rejection. </li>
- *
- * <li> In {@link ThreadPoolExecutor.CallerRunsPolicy}, the thread
- * that invokes {@code execute} itself runs the task. This provides a
- * simple feedback control mechanism that will slow down the rate that
- * new tasks are submitted. </li>
- *
- * <li> In {@link ThreadPoolExecutor.DiscardPolicy}, a task that
- * cannot be executed is simply dropped.  </li>
- *
- * <li>In {@link ThreadPoolExecutor.DiscardOldestPolicy}, if the
- * executor is not shut down, the task at the head of the work queue
- * is dropped, and then execution is retried (which can fail again,
- * causing this to be repeated.) </li>
- *
- * </ol>
- *
- * It is possible to define and use other kinds of {@link
- * RejectedExecutionHandler} classes. Doing so requires some care
- * especially when policies are designed to work only under particular
- * capacity or queuing policies. </dd>
- *
- * <dt>Hook methods</dt>
- *
- * <dd>This class provides {@code protected} overridable {@link
- * #beforeExecute} and {@link #afterExecute} methods that are called
- * before and after execution of each task.  These can be used to
- * manipulate the execution environment; for example, reinitializing
- * ThreadLocals, gathering statistics, or adding log
- * entries. Additionally, method {@link #terminated} can be overridden
- * to perform any special processing that needs to be done once the
- * Executor has fully terminated.
- *
- * <p>If hook or callback methods throw exceptions, internal worker
- * threads may in turn fail and abruptly terminate.</dd>
- *
- * <dt>Queue maintenance</dt>
- *
- * <dd> Method {@link #getQueue} allows access to the work queue for
- * purposes of monitoring and debugging.  Use of this method for any
- * other purpose is strongly discouraged.  Two supplied methods,
- * {@link #remove} and {@link #purge} are available to assist in
- * storage reclamation when large numbers of queued tasks become
- * cancelled.</dd>
- *
- * <dt>Finalization</dt>
- *
- * <dd> A pool that is no longer referenced in a program <em>AND</em>
- * has no remaining threads will be {@code shutdown} automatically. If
- * you would like to ensure that unreferenced pools are reclaimed even
- * if users forget to call {@link #shutdown}, then you must arrange
- * that unused threads eventually die, by setting appropriate
- * keep-alive times, using a lower bound of zero core threads and/or
- * setting {@link #allowCoreThreadTimeOut(boolean)}.  </dd>
- *
- * </dl>
- *
- * <p> <b>Extension example</b>. Most extensions of this class
- * override one or more of the protected hook methods. For example,
- * here is a subclass that adds a simple pause/resume feature:
- *
- *  <pre> {@code
- * class PausableThreadPoolExecutor extends ThreadPoolExecutor {
- *   private boolean isPaused;
- *   private ReentrantLock pauseLock = new ReentrantLock();
- *   private Condition unpaused = pauseLock.newCondition();
- *
- *   public PausableThreadPoolExecutor(...) { super(...); }
- *
- *   protected void beforeExecute(Thread t, Runnable r) {
- *     super.beforeExecute(t, r);
- *     pauseLock.lock();
- *     try {
- *       while (isPaused) unpaused.await();
- *     } catch (InterruptedException ie) {
- *       t.interrupt();
- *     } finally {
- *       pauseLock.unlock();
- *     }
- *   }
- *
- *   public void pause() {
- *     pauseLock.lock();
- *     try {
- *       isPaused = true;
- *     } finally {
- *       pauseLock.unlock();
- *     }
- *   }
- *
- *   public void resume() {
- *     pauseLock.lock();
- *     try {
- *       isPaused = false;
- *       unpaused.signalAll();
- *     } finally {
- *       pauseLock.unlock();
- *     }
- *   }
- * }}</pre>
- *
- * @since 1.5
- * @author Doug Lea
- */
-public class ThreadPoolExecutor extends AbstractExecutorService {
-    /**
-     * The main pool control state, ctl, is an atomic integer packing
-     * two conceptual fields
-     *   workerCount, indicating the effective number of threads
-     *   runState,    indicating whether running, shutting down etc
-     *
-     * In order to pack them into one int, we limit workerCount to
-     * (2^29)-1 (about 500 million) threads rather than (2^31)-1 (2
-     * billion) otherwise representable. If this is ever an issue in
-     * the future, the variable can be changed to be an AtomicLong,
-     * and the shift/mask constants below adjusted. But until the need
-     * arises, this code is a bit faster and simpler using an int.
-     *
-     * The workerCount is the number of workers that have been
-     * permitted to start and not permitted to stop.  The value may be
-     * transiently different from the actual number of live threads,
-     * for example when a ThreadFactory fails to create a thread when
-     * asked, and when exiting threads are still performing
-     * bookkeeping before terminating. The user-visible pool size is
-     * reported as the current size of the workers set.
-     *
-     * The runState provides the main lifecyle control, taking on values:
-     *
-     *   RUNNING:  Accept new tasks and process queued tasks
-     *   SHUTDOWN: Don't accept new tasks, but process queued tasks
-     *   STOP:     Don't accept new tasks, don't process queued tasks,
-     *             and interrupt in-progress tasks
-     *   TIDYING:  All tasks have terminated, workerCount is zero,
-     *             the thread transitioning to state TIDYING
-     *             will run the terminated() hook method
-     *   TERMINATED: terminated() has completed
-     *
-     * The numerical order among these values matters, to allow
-     * ordered comparisons. The runState monotonically increases over
-     * time, but need not hit each state. The transitions are:
-     *
-     * RUNNING -> SHUTDOWN
-     *    On invocation of shutdown(), perhaps implicitly in finalize()
-     * (RUNNING or SHUTDOWN) -> STOP
-     *    On invocation of shutdownNow()
-     * SHUTDOWN -> TIDYING
-     *    When both queue and pool are empty
-     * STOP -> TIDYING
-     *    When pool is empty
-     * TIDYING -> TERMINATED
-     *    When the terminated() hook method has completed
-     *
-     * Threads waiting in awaitTermination() will return when the
-     * state reaches TERMINATED.
-     *
-     * Detecting the transition from SHUTDOWN to TIDYING is less
-     * straightforward than you'd like because the queue may become
-     * empty after non-empty and vice versa during SHUTDOWN state, but
-     * we can only terminate if, after seeing that it is empty, we see
-     * that workerCount is 0 (which sometimes entails a recheck -- see
-     * below).
-     */
-    private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
-    private static final int COUNT_BITS = Integer.SIZE - 3;
-    private static final int CAPACITY   = (1 << COUNT_BITS) - 1;
-
-    // runState is stored in the high-order bits
-    private static final int RUNNING    = -1 << COUNT_BITS;
-    private static final int SHUTDOWN   =  0 << COUNT_BITS;
-    private static final int STOP       =  1 << COUNT_BITS;
-    private static final int TIDYING    =  2 << COUNT_BITS;
-    private static final int TERMINATED =  3 << COUNT_BITS;
-
-    // Packing and unpacking ctl
-    private static int runStateOf(int c)     { return c & ~CAPACITY; }
-    private static int workerCountOf(int c)  { return c & CAPACITY; }
-    private static int ctlOf(int rs, int wc) { return rs | wc; }
-
-    /*
-     * Bit field accessors that don't require unpacking ctl.
-     * These depend on the bit layout and on workerCount being never negative.
-     */
-
-    private static boolean runStateLessThan(int c, int s) {
-        return c < s;
-    }
-
-    private static boolean runStateAtLeast(int c, int s) {
-        return c >= s;
-    }
-
-    private static boolean isRunning(int c) {
-        return c < SHUTDOWN;
-    }
-
-    /**
-     * Attempt to CAS-increment the workerCount field of ctl.
-     */
-    private boolean compareAndIncrementWorkerCount(int expect) {
-        return ctl.compareAndSet(expect, expect + 1);
-    }
-
-    /**
-     * Attempt to CAS-decrement the workerCount field of ctl.
-     */
-    private boolean compareAndDecrementWorkerCount(int expect) {
-        return ctl.compareAndSet(expect, expect - 1);
-    }
-
-    /**
-     * Decrements the workerCount field of ctl. This is called only on
-     * abrupt termination of a thread (see processWorkerExit). Other
-     * decrements are performed within getTask.
-     */
-    private void decrementWorkerCount() {
-        do {} while (! compareAndDecrementWorkerCount(ctl.get()));
-    }
-
-    /**
-     * The queue used for holding tasks and handing off to worker
-     * threads.  We do not require that workQueue.poll() returning
-     * null necessarily means that workQueue.isEmpty(), so rely
-     * solely on isEmpty to see if the queue is empty (which we must
-     * do for example when deciding whether to transition from
-     * SHUTDOWN to TIDYING).  This accommodates special-purpose
-     * queues such as DelayQueues for which poll() is allowed to
-     * return null even if it may later return non-null when delays
-     * expire.
-     */
-    private final BlockingQueue<Runnable> workQueue;
-
-    /**
-     * Lock held on access to workers set and related bookkeeping.
-     * While we could use a concurrent set of some sort, it turns out
-     * to be generally preferable to use a lock. Among the reasons is
-     * that this serializes interruptIdleWorkers, which avoids
-     * unnecessary interrupt storms, especially during shutdown.
-     * Otherwise exiting threads would concurrently interrupt those
-     * that have not yet interrupted. It also simplifies some of the
-     * associated statistics bookkeeping of largestPoolSize etc. We
-     * also hold mainLock on shutdown and shutdownNow, for the sake of
-     * ensuring workers set is stable while separately checking
-     * permission to interrupt and actually interrupting.
-     */
-    private final ReentrantLock mainLock = new ReentrantLock();
-
-    /**
-     * Set containing all worker threads in pool. Accessed only when
-     * holding mainLock.
-     */
-    private final HashSet<Worker> workers = new HashSet<Worker>();
-
-    /**
-     * Wait condition to support awaitTermination
-     */
-    private final Condition termination = mainLock.newCondition();
-
-    /**
-     * Tracks largest attained pool size. Accessed only under
-     * mainLock.
-     */
-    private int largestPoolSize;
-
-    /**
-     * Counter for completed tasks. Updated only on termination of
-     * worker threads. Accessed only under mainLock.
-     */
-    private long completedTaskCount;
-
-    /*
-     * All user control parameters are declared as volatiles so that
-     * ongoing actions are based on freshest values, but without need
-     * for locking, since no internal invariants depend on them
-     * changing synchronously with respect to other actions.
-     */
-
-    /**
-     * Factory for new threads. All threads are created using this
-     * factory (via method addWorker).  All callers must be prepared
-     * for addWorker to fail, which may reflect a system or user's
-     * policy limiting the number of threads.  Even though it is not
-     * treated as an error, failure to create threads may result in
-     * new tasks being rejected or existing ones remaining stuck in
-     * the queue.
-     *
-     * We go further and preserve pool invariants even in the face of
-     * errors such as OutOfMemoryError, that might be thrown while
-     * trying to create threads.  Such errors are rather common due to
-     * the need to allocate a native stack in Thread#start, and users
-     * will want to perform clean pool shutdown to clean up.  There
-     * will likely be enough memory available for the cleanup code to
-     * complete without encountering yet another OutOfMemoryError.
-     */
-    private volatile ThreadFactory threadFactory;
-
-    /**
-     * Handler called when saturated or shutdown in execute.
-     */
-    private volatile RejectedExecutionHandler handler;
-
-    /**
-     * Timeout in nanoseconds for idle threads waiting for work.
-     * Threads use this timeout when there are more than corePoolSize
-     * present or if allowCoreThreadTimeOut. Otherwise they wait
-     * forever for new work.
-     */
-    private volatile long keepAliveTime;
-
-    /**
-     * If false (default), core threads stay alive even when idle.
-     * If true, core threads use keepAliveTime to time out waiting
-     * for work.
-     */
-    private volatile boolean allowCoreThreadTimeOut;
-
-    /**
-     * Core pool size is the minimum number of workers to keep alive
-     * (and not allow to time out etc) unless allowCoreThreadTimeOut
-     * is set, in which case the minimum is zero.
-     */
-    private volatile int corePoolSize;
-
-    /**
-     * Maximum pool size. Note that the actual maximum is internally
-     * bounded by CAPACITY.
-     */
-    private volatile int maximumPoolSize;
-
-    /**
-     * The default rejected execution handler
-     */
-    private static final RejectedExecutionHandler defaultHandler =
-        new AbortPolicy();
-
-    /**
-     * Permission required for callers of shutdown and shutdownNow.
-     * We additionally require (see checkShutdownAccess) that callers
-     * have permission to actually interrupt threads in the worker set
-     * (as governed by Thread.interrupt, which relies on
-     * ThreadGroup.checkAccess, which in turn relies on
-     * SecurityManager.checkAccess). Shutdowns are attempted only if
-     * these checks pass.
-     *
-     * All actual invocations of Thread.interrupt (see
-     * interruptIdleWorkers and interruptWorkers) ignore
-     * SecurityExceptions, meaning that the attempted interrupts
-     * silently fail. In the case of shutdown, they should not fail
-     * unless the SecurityManager has inconsistent policies, sometimes
-     * allowing access to a thread and sometimes not. In such cases,
-     * failure to actually interrupt threads may disable or delay full
-     * termination. Other uses of interruptIdleWorkers are advisory,
-     * and failure to actually interrupt will merely delay response to
-     * configuration changes so is not handled exceptionally.
-     */
-    private static final RuntimePermission shutdownPerm =
-        new RuntimePermission("modifyThread");
-
-    /**
-     * Class Worker mainly maintains interrupt control state for
-     * threads running tasks, along with other minor bookkeeping.
-     * This class opportunistically extends AbstractQueuedSynchronizer
-     * to simplify acquiring and releasing a lock surrounding each
-     * task execution.  This protects against interrupts that are
-     * intended to wake up a worker thread waiting for a task from
-     * instead interrupting a task being run.  We implement a simple
-     * non-reentrant mutual exclusion lock rather than use
-     * ReentrantLock because we do not want worker tasks to be able to
-     * reacquire the lock when they invoke pool control methods like
-     * setCorePoolSize.  Additionally, to suppress interrupts until
-     * the thread actually starts running tasks, we initialize lock
-     * state to a negative value, and clear it upon start (in
-     * runWorker).
-     */
-    private final class Worker
-        extends AbstractQueuedSynchronizer
-        implements Runnable
-    {
-        /**
-         * This class will never be serialized, but we provide a
-         * serialVersionUID to suppress a javac warning.
-         */
-        private static final long serialVersionUID = 6138294804551838833L;
-
-        /** Thread this worker is running in.  Null if factory fails. */
-        final Thread thread;
-        /** Initial task to run.  Possibly null. */
-        Runnable firstTask;
-        /** Per-thread task counter */
-        volatile long completedTasks;
-
-        /**
-         * Creates with given first task and thread from ThreadFactory.
-         * @param firstTask the first task (null if none)
-         */
-        Worker(Runnable firstTask) {
-            setState(-1); // inhibit interrupts until runWorker
-            this.firstTask = firstTask;
-            this.thread = getThreadFactory().newThread(this);
-        }
-
-        /** Delegates main run loop to outer runWorker  */
-        public void run() {
-            runWorker(this);
-        }
-
-        // Lock methods
-        //
-        // The value 0 represents the unlocked state.
-        // The value 1 represents the locked state.
-
-        protected boolean isHeldExclusively() {
-            return getState() != 0;
-        }
-
-        protected boolean tryAcquire(int unused) {
-            if (compareAndSetState(0, 1)) {
-                setExclusiveOwnerThread(Thread.currentThread());
-                return true;
-            }
-            return false;
-        }
-
-        protected boolean tryRelease(int unused) {
-            setExclusiveOwnerThread(null);
-            setState(0);
-            return true;
-        }
-
-        public void lock()        { acquire(1); }
-        public boolean tryLock()  { return tryAcquire(1); }
-        public void unlock()      { release(1); }
-        public boolean isLocked() { return isHeldExclusively(); }
-
-        void interruptIfStarted() {
-            Thread t;
-            if (getState() >= 0 && (t = thread) != null && !t.isInterrupted()) {
-                try {
-                    t.interrupt();
-                } catch (SecurityException ignore) {
-                }
-            }
-        }
-    }
-
-    /*
-     * Methods for setting control state
-     */
-
-    /**
-     * Transitions runState to given target, or leaves it alone if
-     * already at least the given target.
-     *
-     * @param targetState the desired state, either SHUTDOWN or STOP
-     *        (but not TIDYING or TERMINATED -- use tryTerminate for that)
-     */
-    private void advanceRunState(int targetState) {
-        for (;;) {
-            int c = ctl.get();
-            if (runStateAtLeast(c, targetState) ||
-                ctl.compareAndSet(c, ctlOf(targetState, workerCountOf(c))))
-                break;
-        }
-    }
-
-    /**
-     * Transitions to TERMINATED state if either (SHUTDOWN and pool
-     * and queue empty) or (STOP and pool empty).  If otherwise
-     * eligible to terminate but workerCount is nonzero, interrupts an
-     * idle worker to ensure that shutdown signals propagate. This
-     * method must be called following any action that might make
-     * termination possible -- reducing worker count or removing tasks
-     * from the queue during shutdown. The method is non-private to
-     * allow access from ScheduledThreadPoolExecutor.
-     */
-    final void tryTerminate() {
-        for (;;) {
-            int c = ctl.get();
-            if (isRunning(c) ||
-                runStateAtLeast(c, TIDYING) ||
-                (runStateOf(c) == SHUTDOWN && ! workQueue.isEmpty()))
-                return;
-            if (workerCountOf(c) != 0) { // Eligible to terminate
-                interruptIdleWorkers(ONLY_ONE);
-                return;
-            }
-
-            final ReentrantLock mainLock = this.mainLock;
-            mainLock.lock();
-            try {
-                if (ctl.compareAndSet(c, ctlOf(TIDYING, 0))) {
-                    try {
-                        terminated();
-                    } finally {
-                        ctl.set(ctlOf(TERMINATED, 0));
-                        termination.signalAll();
-                    }
-                    return;
-                }
-            } finally {
-                mainLock.unlock();
-            }
-            // else retry on failed CAS
-        }
-    }
-
-    /*
-     * Methods for controlling interrupts to worker threads.
-     */
-
-    /**
-     * If there is a security manager, makes sure caller has
-     * permission to shut down threads in general (see shutdownPerm).
-     * If this passes, additionally makes sure the caller is allowed
-     * to interrupt each worker thread. This might not be true even if
-     * first check passed, if the SecurityManager treats some threads
-     * specially.
-     */
-    private void checkShutdownAccess() {
-        SecurityManager security = System.getSecurityManager();
-        if (security != null) {
-            security.checkPermission(shutdownPerm);
-            final ReentrantLock mainLock = this.mainLock;
-            mainLock.lock();
-            try {
-                for (Worker w : workers)
-                    security.checkAccess(w.thread);
-            } finally {
-                mainLock.unlock();
-            }
-        }
-    }
-
-    /**
-     * Interrupts all threads, even if active. Ignores SecurityExceptions
-     * (in which case some threads may remain uninterrupted).
-     */
-    private void interruptWorkers() {
-        final ReentrantLock mainLock = this.mainLock;
-        mainLock.lock();
-        try {
-            for (Worker w : workers)
-                w.interruptIfStarted();
-        } finally {
-            mainLock.unlock();
-        }
-    }
-
-    /**
-     * Interrupts threads that might be waiting for tasks (as
-     * indicated by not being locked) so they can check for
-     * termination or configuration changes. Ignores
-     * SecurityExceptions (in which case some threads may remain
-     * uninterrupted).
-     *
-     * @param onlyOne If true, interrupt at most one worker. This is
-     * called only from tryTerminate when termination is otherwise
-     * enabled but there are still other workers.  In this case, at
-     * most one waiting worker is interrupted to propagate shutdown
-     * signals in case all threads are currently waiting.
-     * Interrupting any arbitrary thread ensures that newly arriving
-     * workers since shutdown began will also eventually exit.
-     * To guarantee eventual termination, it suffices to always
-     * interrupt only one idle worker, but shutdown() interrupts all
-     * idle workers so that redundant workers exit promptly, not
-     * waiting for a straggler task to finish.
-     */
-    private void interruptIdleWorkers(boolean onlyOne) {
-        final ReentrantLock mainLock = this.mainLock;
-        mainLock.lock();
-        try {
-            for (Worker w : workers) {
-                Thread t = w.thread;
-                if (!t.isInterrupted() && w.tryLock()) {
-                    try {
-                        t.interrupt();
-                    } catch (SecurityException ignore) {
-                    } finally {
-                        w.unlock();
-                    }
-                }
-                if (onlyOne)
-                    break;
-            }
-        } finally {
-            mainLock.unlock();
-        }
-    }
-
-    /**
-     * Common form of interruptIdleWorkers, to avoid having to
-     * remember what the boolean argument means.
-     */
-    private void interruptIdleWorkers() {
-        interruptIdleWorkers(false);
-    }
-
-    private static final boolean ONLY_ONE = true;
-
-    /*
-     * Misc utilities, most of which are also exported to
-     * ScheduledThreadPoolExecutor
-     */
-
-    /**
-     * Invokes the rejected execution handler for the given command.
-     * Package-protected for use by ScheduledThreadPoolExecutor.
-     */
-    final void reject(Runnable command) {
-        handler.rejectedExecution(command, this);
-    }
-
-    /**
-     * Performs any further cleanup following run state transition on
-     * invocation of shutdown.  A no-op here, but used by
-     * ScheduledThreadPoolExecutor to cancel delayed tasks.
-     */
-    void onShutdown() {
-    }
-
-    /**
-     * State check needed by ScheduledThreadPoolExecutor to
-     * enable running tasks during shutdown.
-     *
-     * @param shutdownOK true if should return true if SHUTDOWN
-     */
-    final boolean isRunningOrShutdown(boolean shutdownOK) {
-        int rs = runStateOf(ctl.get());
-        return rs == RUNNING || (rs == SHUTDOWN && shutdownOK);
-    }
-
-    /**
-     * Drains the task queue into a new list, normally using
-     * drainTo. But if the queue is a DelayQueue or any other kind of
-     * queue for which poll or drainTo may fail to remove some
-     * elements, it deletes them one by one.
-     */
-    private List<Runnable> drainQueue() {
-        BlockingQueue<Runnable> q = workQueue;
-        List<Runnable> taskList = new ArrayList<Runnable>();
-        q.drainTo(taskList);
-        if (!q.isEmpty()) {
-            for (Runnable r : q.toArray(new Runnable[0])) {
-                if (q.remove(r))
-                    taskList.add(r);
-            }
-        }
-        return taskList;
-    }
-
-    /*
-     * Methods for creating, running and cleaning up after workers
-     */
-
-    /**
-     * Checks if a new worker can be added with respect to current
-     * pool state and the given bound (either core or maximum). If so,
-     * the worker count is adjusted accordingly, and, if possible, a
-     * new worker is created and started, running firstTask as its
-     * first task. This method returns false if the pool is stopped or
-     * eligible to shut down. It also returns false if the thread
-     * factory fails to create a thread when asked.  If the thread
-     * creation fails, either due to the thread factory returning
-     * null, or due to an exception (typically OutOfMemoryError in
-     * Thread#start), we roll back cleanly.
-     *
-     * @param firstTask the task the new thread should run first (or
-     * null if none). Workers are created with an initial first task
-     * (in method execute()) to bypass queuing when there are fewer
-     * than corePoolSize threads (in which case we always start one),
-     * or when the queue is full (in which case we must bypass queue).
-     * Initially idle threads are usually created via
-     * prestartCoreThread or to replace other dying workers.
-     *
-     * @param core if true use corePoolSize as bound, else
-     * maximumPoolSize. (A boolean indicator is used here rather than a
-     * value to ensure reads of fresh values after checking other pool
-     * state).
-     * @return true if successful
-     */
-    private boolean addWorker(Runnable firstTask, boolean core) {
-        retry:
-        for (;;) {
-            int c = ctl.get();
-            int rs = runStateOf(c);
-
-            // Check if queue empty only if necessary.
-            if (rs >= SHUTDOWN &&
-                ! (rs == SHUTDOWN &&
-                   firstTask == null &&
-                   ! workQueue.isEmpty()))
-                return false;
-
-            for (;;) {
-                int wc = workerCountOf(c);
-                if (wc >= CAPACITY ||
-                    wc >= (core ? corePoolSize : maximumPoolSize))
-                    return false;
-                if (compareAndIncrementWorkerCount(c))
-                    break retry;
-                c = ctl.get();  // Re-read ctl
-                if (runStateOf(c) != rs)
-                    continue retry;
-                // else CAS failed due to workerCount change; retry inner loop
-            }
-        }
-
-        boolean workerStarted = false;
-        boolean workerAdded = false;
-        Worker w = null;
-        try {
-            final ReentrantLock mainLock = this.mainLock;
-            w = new Worker(firstTask);
-            final Thread t = w.thread;
-            if (t != null) {
-                mainLock.lock();
-                try {
-                    // Recheck while holding lock.
-                    // Back out on ThreadFactory failure or if
-                    // shut down before lock acquired.
-                    int c = ctl.get();
-                    int rs = runStateOf(c);
-
-                    if (rs < SHUTDOWN ||
-                        (rs == SHUTDOWN && firstTask == null)) {
-                        if (t.isAlive()) // precheck that t is startable
-                            throw new IllegalThreadStateException();
-                        workers.add(w);
-                        int s = workers.size();
-                        if (s > largestPoolSize)
-                            largestPoolSize = s;
-                        workerAdded = true;
-                    }
-                } finally {
-                    mainLock.unlock();
-                }
-                if (workerAdded) {
-                    t.start();
-                    workerStarted = true;
-                }
-            }
-        } finally {
-            if (! workerStarted)
-                addWorkerFailed(w);
-        }
-        return workerStarted;
-    }
-
-    /**
-     * Rolls back the worker thread creation.
-     * - removes worker from workers, if present
-     * - decrements worker count
-     * - rechecks for termination, in case the existence of this
-     *   worker was holding up termination
-     */
-    private void addWorkerFailed(Worker w) {
-        final ReentrantLock mainLock = this.mainLock;
-        mainLock.lock();
-        try {
-            if (w != null)
-                workers.remove(w);
-            decrementWorkerCount();
-            tryTerminate();
-        } finally {
-            mainLock.unlock();
-        }
-    }
-
-    /**
-     * Performs cleanup and bookkeeping for a dying worker. Called
-     * only from worker threads. Unless completedAbruptly is set,
-     * assumes that workerCount has already been adjusted to account
-     * for exit.  This method removes thread from worker set, and
-     * possibly terminates the pool or replaces the worker if either
-     * it exited due to user task exception or if fewer than
-     * corePoolSize workers are running or queue is non-empty but
-     * there are no workers.
-     *
-     * @param w the worker
-     * @param completedAbruptly if the worker died due to user exception
-     */
-    private void processWorkerExit(Worker w, boolean completedAbruptly) {
-        if (completedAbruptly) // If abrupt, then workerCount wasn't adjusted
-            decrementWorkerCount();
-
-        final ReentrantLock mainLock = this.mainLock;
-        mainLock.lock();
-        try {
-            completedTaskCount += w.completedTasks;
-            workers.remove(w);
-        } finally {
-            mainLock.unlock();
-        }
-
-        tryTerminate();
-
-        int c = ctl.get();
-        if (runStateLessThan(c, STOP)) {
-            if (!completedAbruptly) {
-                int min = allowCoreThreadTimeOut ? 0 : corePoolSize;
-                if (min == 0 && ! workQueue.isEmpty())
-                    min = 1;
-                if (workerCountOf(c) >= min)
-                    return; // replacement not needed
-            }
-            addWorker(null, false);
-        }
-    }
-
-    /**
-     * Performs blocking or timed wait for a task, depending on
-     * current configuration settings, or returns null if this worker
-     * must exit because of any of:
-     * 1. There are more than maximumPoolSize workers (due to
-     *    a call to setMaximumPoolSize).
-     * 2. The pool is stopped.
-     * 3. The pool is shutdown and the queue is empty.
-     * 4. This worker timed out waiting for a task, and timed-out
-     *    workers are subject to termination (that is,
-     *    {@code allowCoreThreadTimeOut || workerCount > corePoolSize})
-     *    both before and after the timed wait.
-     *
-     * @return task, or null if the worker must exit, in which case
-     *         workerCount is decremented
-     */
-    private Runnable getTask() {
-        boolean timedOut = false; // Did the last poll() time out?
-
-        retry:
-        for (;;) {
-            int c = ctl.get();
-            int rs = runStateOf(c);
-
-            // Check if queue empty only if necessary.
-            if (rs >= SHUTDOWN && (rs >= STOP || workQueue.isEmpty())) {
-                decrementWorkerCount();
-                return null;
-            }
-
-            boolean timed;      // Are workers subject to culling?
-
-            for (;;) {
-                int wc = workerCountOf(c);
-                timed = allowCoreThreadTimeOut || wc > corePoolSize;
-
-                if (wc <= maximumPoolSize && ! (timedOut && timed))
-                    break;
-                if (compareAndDecrementWorkerCount(c))
-                    return null;
-                c = ctl.get();  // Re-read ctl
-                if (runStateOf(c) != rs)
-                    continue retry;
-                // else CAS failed due to workerCount change; retry inner loop
-            }
-
-            try {
-                Runnable r = timed ?
-                    workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS) :
-                    workQueue.take();
-                if (r != null)
-                    return r;
-                timedOut = true;
-            } catch (InterruptedException retry) {
-                timedOut = false;
-            }
-        }
-    }
-
-    /**
-     * Main worker run loop.  Repeatedly gets tasks from queue and
-     * executes them, while coping with a number of issues:
-     *
-     * 1. We may start out with an initial task, in which case we
-     * don't need to get the first one. Otherwise, as long as pool is
-     * running, we get tasks from getTask. If it returns null then the
-     * worker exits due to changed pool state or configuration
-     * parameters.  Other exits result from exception throws in
-     * external code, in which case completedAbruptly holds, which
-     * usually leads processWorkerExit to replace this thread.
-     *
-     * 2. Before running any task, the lock is acquired to prevent
-     * other pool interrupts while the task is executing, and
-     * clearInterruptsForTaskRun called to ensure that unless pool is
-     * stopping, this thread does not have its interrupt set.
-     *
-     * 3. Each task run is preceded by a call to beforeExecute, which
-     * might throw an exception, in which case we cause thread to die
-     * (breaking loop with completedAbruptly true) without processing
-     * the task.
-     *
-     * 4. Assuming beforeExecute completes normally, we run the task,
-     * gathering any of its thrown exceptions to send to
-     * afterExecute. We separately handle RuntimeException, Error
-     * (both of which the specs guarantee that we trap) and arbitrary
-     * Throwables.  Because we cannot rethrow Throwables within
-     * Runnable.run, we wrap them within Errors on the way out (to the
-     * thread's UncaughtExceptionHandler).  Any thrown exception also
-     * conservatively causes thread to die.
-     *
-     * 5. After task.run completes, we call afterExecute, which may
-     * also throw an exception, which will also cause thread to
-     * die. According to JLS Sec 14.20, this exception is the one that
-     * will be in effect even if task.run throws.
-     *
-     * The net effect of the exception mechanics is that afterExecute
-     * and the thread's UncaughtExceptionHandler have as accurate
-     * information as we can provide about any problems encountered by
-     * user code.
-     *
-     * @param w the worker
-     */
-    final void runWorker(Worker w) {
-        Thread wt = Thread.currentThread();
-        Runnable task = w.firstTask;
-        w.firstTask = null;
-        w.unlock(); // allow interrupts
-        boolean completedAbruptly = true;
-        try {
-            while (task != null || (task = getTask()) != null) {
-                w.lock();
-                // If pool is stopping, ensure thread is interrupted;
-                // if not, ensure thread is not interrupted.  This
-                // requires a recheck in second case to deal with
-                // shutdownNow race while clearing interrupt
-                if ((runStateAtLeast(ctl.get(), STOP) ||
-                     (Thread.interrupted() &&
-                      runStateAtLeast(ctl.get(), STOP))) &&
-                    !wt.isInterrupted())
-                    wt.interrupt();
-                try {
-                    beforeExecute(wt, task);
-                    Throwable thrown = null;
-                    try {
-                        task.run();
-                    } catch (RuntimeException x) {
-                        thrown = x; throw x;
-                    } catch (Error x) {
-                        thrown = x; throw x;
-                    } catch (Throwable x) {
-                        thrown = x; throw new Error(x);
-                    } finally {
-                        afterExecute(task, thrown);
-                    }
-                } finally {
-                    task = null;
-                    w.completedTasks++;
-                    w.unlock();
-                }
-            }
-            completedAbruptly = false;
-        } finally {
-            processWorkerExit(w, completedAbruptly);
-        }
-    }
-
-    // Public constructors and methods
-
-    /**
-     * Creates a new {@code ThreadPoolExecutor} with the given initial
-     * parameters and default thread factory and rejected execution handler.
-     * It may be more convenient to use one of the {@link Executors} factory
-     * methods instead of this general purpose constructor.
-     *
-     * @param corePoolSize the number of threads to keep in the pool, even
-     *        if they are idle, unless {@code allowCoreThreadTimeOut} is set
-     * @param maximumPoolSize the maximum number of threads to allow in the
-     *        pool
-     * @param keepAliveTime when the number of threads is greater than
-     *        the core, this is the maximum time that excess idle threads
-     *        will wait for new tasks before terminating.
-     * @param unit the time unit for the {@code keepAliveTime} argument
-     * @param workQueue the queue to use for holding tasks before they are
-     *        executed.  This queue will hold only the {@code Runnable}
-     *        tasks submitted by the {@code execute} method.
-     * @throws IllegalArgumentException if one of the following holds:<br>
-     *         {@code corePoolSize < 0}<br>
-     *         {@code keepAliveTime < 0}<br>
-     *         {@code maximumPoolSize <= 0}<br>
-     *         {@code maximumPoolSize < corePoolSize}
-     * @throws NullPointerException if {@code workQueue} is null
-     */
-    public ThreadPoolExecutor(int corePoolSize,
-                              int maximumPoolSize,
-                              long keepAliveTime,
-                              TimeUnit unit,
-                              BlockingQueue<Runnable> workQueue) {
-        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
-             Executors.defaultThreadFactory(), defaultHandler);
-    }
-
-    /**
-     * Creates a new {@code ThreadPoolExecutor} with the given initial
-     * parameters and default rejected execution handler.
-     *
-     * @param corePoolSize the number of threads to keep in the pool, even
-     *        if they are idle, unless {@code allowCoreThreadTimeOut} is set
-     * @param maximumPoolSize the maximum number of threads to allow in the
-     *        pool
-     * @param keepAliveTime when the number of threads is greater than
-     *        the core, this is the maximum time that excess idle threads
-     *        will wait for new tasks before terminating.
-     * @param unit the time unit for the {@code keepAliveTime} argument
-     * @param workQueue the queue to use for holding tasks before they are
-     *        executed.  This queue will hold only the {@code Runnable}
-     *        tasks submitted by the {@code execute} method.
-     * @param threadFactory the factory to use when the executor
-     *        creates a new thread
-     * @throws IllegalArgumentException if one of the following holds:<br>
-     *         {@code corePoolSize < 0}<br>
-     *         {@code keepAliveTime < 0}<br>
-     *         {@code maximumPoolSize <= 0}<br>
-     *         {@code maximumPoolSize < corePoolSize}
-     * @throws NullPointerException if {@code workQueue}
-     *         or {@code threadFactory} is null
-     */
-    public ThreadPoolExecutor(int corePoolSize,
-                              int maximumPoolSize,
-                              long keepAliveTime,
-                              TimeUnit unit,
-                              BlockingQueue<Runnable> workQueue,
-                              ThreadFactory threadFactory) {
-        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
-             threadFactory, defaultHandler);
-    }
-
-    /**
-     * Creates a new {@code ThreadPoolExecutor} with the given initial
-     * parameters and default thread factory.
-     *
-     * @param corePoolSize the number of threads to keep in the pool, even
-     *        if they are idle, unless {@code allowCoreThreadTimeOut} is set
-     * @param maximumPoolSize the maximum number of threads to allow in the
-     *        pool
-     * @param keepAliveTime when the number of threads is greater than
-     *        the core, this is the maximum time that excess idle threads
-     *        will wait for new tasks before terminating.
-     * @param unit the time unit for the {@code keepAliveTime} argument
-     * @param workQueue the queue to use for holding tasks before they are
-     *        executed.  This queue will hold only the {@code Runnable}
-     *        tasks submitted by the {@code execute} method.
-     * @param handler the handler to use when execution is blocked
-     *        because the thread bounds and queue capacities are reached
-     * @throws IllegalArgumentException if one of the following holds:<br>
-     *         {@code corePoolSize < 0}<br>
-     *         {@code keepAliveTime < 0}<br>
-     *         {@code maximumPoolSize <= 0}<br>
-     *         {@code maximumPoolSize < corePoolSize}
-     * @throws NullPointerException if {@code workQueue}
-     *         or {@code handler} is null
-     */
-    public ThreadPoolExecutor(int corePoolSize,
-                              int maximumPoolSize,
-                              long keepAliveTime,
-                              TimeUnit unit,
-                              BlockingQueue<Runnable> workQueue,
-                              RejectedExecutionHandler handler) {
-        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
-             Executors.defaultThreadFactory(), handler);
-    }
-
-    /**
-     * Creates a new {@code ThreadPoolExecutor} with the given initial
-     * parameters.
-     *
-     * @param corePoolSize the number of threads to keep in the pool, even
-     *        if they are idle, unless {@code allowCoreThreadTimeOut} is set
-     * @param maximumPoolSize the maximum number of threads to allow in the
-     *        pool
-     * @param keepAliveTime when the number of threads is greater than
-     *        the core, this is the maximum time that excess idle threads
-     *        will wait for new tasks before terminating.
-     * @param unit the time unit for the {@code keepAliveTime} argument
-     * @param workQueue the queue to use for holding tasks before they are
-     *        executed.  This queue will hold only the {@code Runnable}
-     *        tasks submitted by the {@code execute} method.
-     * @param threadFactory the factory to use when the executor
-     *        creates a new thread
-     * @param handler the handler to use when execution is blocked
-     *        because the thread bounds and queue capacities are reached
-     * @throws IllegalArgumentException if one of the following holds:<br>
-     *         {@code corePoolSize < 0}<br>
-     *         {@code keepAliveTime < 0}<br>
-     *         {@code maximumPoolSize <= 0}<br>
-     *         {@code maximumPoolSize < corePoolSize}
-     * @throws NullPointerException if {@code workQueue}
-     *         or {@code threadFactory} or {@code handler} is null
-     */
-    public ThreadPoolExecutor(int corePoolSize,
-                              int maximumPoolSize,
-                              long keepAliveTime,
-                              TimeUnit unit,
-                              BlockingQueue<Runnable> workQueue,
-                              ThreadFactory threadFactory,
-                              RejectedExecutionHandler handler) {
-        if (corePoolSize < 0 ||
-            maximumPoolSize <= 0 ||
-            maximumPoolSize < corePoolSize ||
-            keepAliveTime < 0)
-            throw new IllegalArgumentException();
-        if (workQueue == null || threadFactory == null || handler == null)
-            throw new NullPointerException();
-        this.corePoolSize = corePoolSize;
-        this.maximumPoolSize = maximumPoolSize;
-        this.workQueue = workQueue;
-        this.keepAliveTime = unit.toNanos(keepAliveTime);
-        this.threadFactory = threadFactory;
-        this.handler = handler;
-    }
-
-    /**
-     * Executes the given task sometime in the future.  The task
-     * may execute in a new thread or in an existing pooled thread.
-     *
-     * If the task cannot be submitted for execution, either because this
-     * executor has been shutdown or because its capacity has been reached,
-     * the task is handled by the current {@code RejectedExecutionHandler}.
-     *
-     * @param command the task to execute
-     * @throws RejectedExecutionException at discretion of
-     *         {@code RejectedExecutionHandler}, if the task
-     *         cannot be accepted for execution
-     * @throws NullPointerException if {@code command} is null
-     */
-    public void execute(Runnable command) {
-        if (command == null)
-            throw new NullPointerException();
-        /*
-         * Proceed in 3 steps:
-         *
-         * 1. If fewer than corePoolSize threads are running, try to
-         * start a new thread with the given command as its first
-         * task.  The call to addWorker atomically checks runState and
-         * workerCount, and so prevents false alarms that would add
-         * threads when it shouldn't, by returning false.
-         *
-         * 2. If a task can be successfully queued, then we still need
-         * to double-check whether we should have added a thread
-         * (because existing ones died since last checking) or that
-         * the pool shut down since entry into this method. So we
-         * recheck state and if necessary roll back the enqueuing if
-         * stopped, or start a new thread if there are none.
-         *
-         * 3. If we cannot queue task, then we try to add a new
-         * thread.  If it fails, we know we are shut down or saturated
-         * and so reject the task.
-         */
-        int c = ctl.get();
-        if (workerCountOf(c) < corePoolSize) {
-            if (addWorker(command, true))
-                return;
-            c = ctl.get();
-        }
-        if (isRunning(c) && workQueue.offer(command)) {
-            int recheck = ctl.get();
-            if (! isRunning(recheck) && remove(command))
-                reject(command);
-            else if (workerCountOf(recheck) == 0)
-                addWorker(null, false);
-        }
-        else if (!addWorker(command, false))
-            reject(command);
-    }
-
-    /**
-     * Initiates an orderly shutdown in which previously submitted
-     * tasks are executed, but no new tasks will be accepted.
-     * Invocation has no additional effect if already shut down.
-     *
-     * <p>This method does not wait for previously submitted tasks to
-     * complete execution.  Use {@link #awaitTermination awaitTermination}
-     * to do that.
-     *
-     * @throws SecurityException {@inheritDoc}
-     */
-    public void shutdown() {
-        final ReentrantLock mainLock = this.mainLock;
-        mainLock.lock();
-        try {
-            checkShutdownAccess();
-            advanceRunState(SHUTDOWN);
-            interruptIdleWorkers();
-            onShutdown(); // hook for ScheduledThreadPoolExecutor
-        } finally {
-            mainLock.unlock();
-        }
-        tryTerminate();
-    }
-
-    /**
-     * Attempts to stop all actively executing tasks, halts the
-     * processing of waiting tasks, and returns a list of the tasks
-     * that were awaiting execution. These tasks are drained (removed)
-     * from the task queue upon return from this method.
-     *
-     * <p>This method does not wait for actively executing tasks to
-     * terminate.  Use {@link #awaitTermination awaitTermination} to
-     * do that.
-     *
-     * <p>There are no guarantees beyond best-effort attempts to stop
-     * processing actively executing tasks.  This implementation
-     * cancels tasks via {@link Thread#interrupt}, so any task that
-     * fails to respond to interrupts may never terminate.
-     *
-     * @throws SecurityException {@inheritDoc}
-     */
-    public List<Runnable> shutdownNow() {
-        List<Runnable> tasks;
-        final ReentrantLock mainLock = this.mainLock;
-        mainLock.lock();
-        try {
-            checkShutdownAccess();
-            advanceRunState(STOP);
-            interruptWorkers();
-            tasks = drainQueue();
-        } finally {
-            mainLock.unlock();
-        }
-        tryTerminate();
-        return tasks;
-    }
-
-    public boolean isShutdown() {
-        return ! isRunning(ctl.get());
-    }
-
-    /**
-     * Returns true if this executor is in the process of terminating
-     * after {@link #shutdown} or {@link #shutdownNow} but has not
-     * completely terminated.  This method may be useful for
-     * debugging. A return of {@code true} reported a sufficient
-     * period after shutdown may indicate that submitted tasks have
-     * ignored or suppressed interruption, causing this executor not
-     * to properly terminate.
-     *
-     * @return true if terminating but not yet terminated
-     */
-    public boolean isTerminating() {
-        int c = ctl.get();
-        return ! isRunning(c) && runStateLessThan(c, TERMINATED);
-    }
-
-    public boolean isTerminated() {
-        return runStateAtLeast(ctl.get(), TERMINATED);
-    }
-
-    public boolean awaitTermination(long timeout, TimeUnit unit)
-        throws InterruptedException {
-        long nanos = unit.toNanos(timeout);
-        final ReentrantLock mainLock = this.mainLock;
-        mainLock.lock();
-        try {
-            for (;;) {
-                if (runStateAtLeast(ctl.get(), TERMINATED))
-                    return true;
-                if (nanos <= 0)
-                    return false;
-                nanos = termination.awaitNanos(nanos);
-            }
-        } finally {
-            mainLock.unlock();
-        }
-    }
-
-    /**
-     * Invokes {@code shutdown} when this executor is no longer
-     * referenced and it has no threads.
-     */
-    protected void finalize() {
-        shutdown();
-    }
-
-    /**
-     * Sets the thread factory used to create new threads.
-     *
-     * @param threadFactory the new thread factory
-     * @throws NullPointerException if threadFactory is null
-     * @see #getThreadFactory
-     */
-    public void setThreadFactory(ThreadFactory threadFactory) {
-        if (threadFactory == null)
-            throw new NullPointerException();
-        this.threadFactory = threadFactory;
-    }
-
-    /**
-     * Returns the thread factory used to create new threads.
-     *
-     * @return the current thread factory
-     * @see #setThreadFactory
-     */
-    public ThreadFactory getThreadFactory() {
-        return threadFactory;
-    }
-
-    /**
-     * Sets a new handler for unexecutable tasks.
-     *
-     * @param handler the new handler
-     * @throws NullPointerException if handler is null
-     * @see #getRejectedExecutionHandler
-     */
-    public void setRejectedExecutionHandler(RejectedExecutionHandler handler) {
-        if (handler == null)
-            throw new NullPointerException();
-        this.handler = handler;
-    }
-
-    /**
-     * Returns the current handler for unexecutable tasks.
-     *
-     * @return the current handler
-     * @see #setRejectedExecutionHandler
-     */
-    public RejectedExecutionHandler getRejectedExecutionHandler() {
-        return handler;
-    }
-
-    /**
-     * Sets the core number of threads.  This overrides any value set
-     * in the constructor.  If the new value is smaller than the
-     * current value, excess existing threads will be terminated when
-     * they next become idle.  If larger, new threads will, if needed,
-     * be started to execute any queued tasks.
-     *
-     * @param corePoolSize the new core size
-     * @throws IllegalArgumentException if {@code corePoolSize < 0}
-     * @see #getCorePoolSize
-     */
-    public void setCorePoolSize(int corePoolSize) {
-        if (corePoolSize < 0)
-            throw new IllegalArgumentException();
-        int delta = corePoolSize - this.corePoolSize;
-        this.corePoolSize = corePoolSize;
-        if (workerCountOf(ctl.get()) > corePoolSize)
-            interruptIdleWorkers();
-        else if (delta > 0) {
-            // We don't really know how many new threads are "needed".
-            // As a heuristic, prestart enough new workers (up to new
-            // core size) to handle the current number of tasks in
-            // queue, but stop if queue becomes empty while doing so.
-            int k = Math.min(delta, workQueue.size());
-            while (k-- > 0 && addWorker(null, true)) {
-                if (workQueue.isEmpty())
-                    break;
-            }
-        }
-    }
-
-    /**
-     * Returns the core number of threads.
-     *
-     * @return the core number of threads
-     * @see #setCorePoolSize
-     */
-    public int getCorePoolSize() {
-        return corePoolSize;
-    }
-
-    /**
-     * Starts a core thread, causing it to idly wait for work. This
-     * overrides the default policy of starting core threads only when
-     * new tasks are executed. This method will return {@code false}
-     * if all core threads have already been started.
-     *
-     * @return {@code true} if a thread was started
-     */
-    public boolean prestartCoreThread() {
-        return workerCountOf(ctl.get()) < corePoolSize &&
-            addWorker(null, true);
-    }
-
-    /**
-     * Same as prestartCoreThread except arranges that at least one
-     * thread is started even if corePoolSize is 0.
-     */
-    void ensurePrestart() {
-        int wc = workerCountOf(ctl.get());
-        if (wc < corePoolSize)
-            addWorker(null, true);
-        else if (wc == 0)
-            addWorker(null, false);
-    }
-
-    /**
-     * Starts all core threads, causing them to idly wait for work. This
-     * overrides the default policy of starting core threads only when
-     * new tasks are executed.
-     *
-     * @return the number of threads started
-     */
-    public int prestartAllCoreThreads() {
-        int n = 0;
-        while (addWorker(null, true))
-            ++n;
-        return n;
-    }
-
-    /**
-     * Returns true if this pool allows core threads to time out and
-     * terminate if no tasks arrive within the keepAlive time, being
-     * replaced if needed when new tasks arrive. When true, the same
-     * keep-alive policy applying to non-core threads applies also to
-     * core threads. When false (the default), core threads are never
-     * terminated due to lack of incoming tasks.
-     *
-     * @return {@code true} if core threads are allowed to time out,
-     *         else {@code false}
-     *
-     * @since 1.6
-     */
-    public boolean allowsCoreThreadTimeOut() {
-        return allowCoreThreadTimeOut;
-    }
-
-    /**
-     * Sets the policy governing whether core threads may time out and
-     * terminate if no tasks arrive within the keep-alive time, being
-     * replaced if needed when new tasks arrive. When false, core
-     * threads are never terminated due to lack of incoming
-     * tasks. When true, the same keep-alive policy applying to
-     * non-core threads applies also to core threads. To avoid
-     * continual thread replacement, the keep-alive time must be
-     * greater than zero when setting {@code true}. This method
-     * should in general be called before the pool is actively used.
-     *
-     * @param value {@code true} if should time out, else {@code false}
-     * @throws IllegalArgumentException if value is {@code true}
-     *         and the current keep-alive time is not greater than zero
-     *
-     * @since 1.6
-     */
-    public void allowCoreThreadTimeOut(boolean value) {
-        if (value && keepAliveTime <= 0)
-            throw new IllegalArgumentException("Core threads must have nonzero keep alive times");
-        if (value != allowCoreThreadTimeOut) {
-            allowCoreThreadTimeOut = value;
-            if (value)
-                interruptIdleWorkers();
-        }
-    }
-
-    /**
-     * Sets the maximum allowed number of threads. This overrides any
-     * value set in the constructor. If the new value is smaller than
-     * the current value, excess existing threads will be
-     * terminated when they next become idle.
-     *
-     * @param maximumPoolSize the new maximum
-     * @throws IllegalArgumentException if the new maximum is
-     *         less than or equal to zero, or
-     *         less than the {@linkplain #getCorePoolSize core pool size}
-     * @see #getMaximumPoolSize
-     */
-    public void setMaximumPoolSize(int maximumPoolSize) {
-        if (maximumPoolSize <= 0 || maximumPoolSize < corePoolSize)
-            throw new IllegalArgumentException();
-        this.maximumPoolSize = maximumPoolSize;
-        if (workerCountOf(ctl.get()) > maximumPoolSize)
-            interruptIdleWorkers();
-    }
-
-    /**
-     * Returns the maximum allowed number of threads.
-     *
-     * @return the maximum allowed number of threads
-     * @see #setMaximumPoolSize
-     */
-    public int getMaximumPoolSize() {
-        return maximumPoolSize;
-    }
-
-    /**
-     * Sets the time limit for which threads may remain idle before
-     * being terminated.  If there are more than the core number of
-     * threads currently in the pool, after waiting this amount of
-     * time without processing a task, excess threads will be
-     * terminated.  This overrides any value set in the constructor.
-     *
-     * @param time the time to wait.  A time value of zero will cause
-     *        excess threads to terminate immediately after executing tasks.
-     * @param unit the time unit of the {@code time} argument
-     * @throws IllegalArgumentException if {@code time} less than zero or
-     *         if {@code time} is zero and {@code allowsCoreThreadTimeOut}
-     * @see #getKeepAliveTime
-     */
-    public void setKeepAliveTime(long time, TimeUnit unit) {
-        if (time < 0)
-            throw new IllegalArgumentException();
-        if (time == 0 && allowsCoreThreadTimeOut())
-            throw new IllegalArgumentException("Core threads must have nonzero keep alive times");
-        long keepAliveTime = unit.toNanos(time);
-        long delta = keepAliveTime - this.keepAliveTime;
-        this.keepAliveTime = keepAliveTime;
-        if (delta < 0)
-            interruptIdleWorkers();
-    }
-
-    /**
-     * Returns the thread keep-alive time, which is the amount of time
-     * that threads in excess of the core pool size may remain
-     * idle before being terminated.
-     *
-     * @param unit the desired time unit of the result
-     * @return the time limit
-     * @see #setKeepAliveTime
-     */
-    public long getKeepAliveTime(TimeUnit unit) {
-        return unit.convert(keepAliveTime, TimeUnit.NANOSECONDS);
-    }
-
-    /* User-level queue utilities */
-
-    /**
-     * Returns the task queue used by this executor. Access to the
-     * task queue is intended primarily for debugging and monitoring.
-     * This queue may be in active use.  Retrieving the task queue
-     * does not prevent queued tasks from executing.
-     *
-     * @return the task queue
-     */
-    public BlockingQueue<Runnable> getQueue() {
-        return workQueue;
-    }
-
-    /**
-     * Removes this task from the executor's internal queue if it is
-     * present, thus causing it not to be run if it has not already
-     * started.
-     *
-     * <p> This method may be useful as one part of a cancellation
-     * scheme.  It may fail to remove tasks that have been converted
-     * into other forms before being placed on the internal queue. For
-     * example, a task entered using {@code submit} might be
-     * converted into a form that maintains {@code Future} status.
-     * However, in such cases, method {@link #purge} may be used to
-     * remove those Futures that have been cancelled.
-     *
-     * @param task the task to remove
-     * @return true if the task was removed
-     */
-    public boolean remove(Runnable task) {
-        boolean removed = workQueue.remove(task);
-        tryTerminate(); // In case SHUTDOWN and now empty
-        return removed;
-    }
-
-    /**
-     * Tries to remove from the work queue all {@link Future}
-     * tasks that have been cancelled. This method can be useful as a
-     * storage reclamation operation, that has no other impact on
-     * functionality. Cancelled tasks are never executed, but may
-     * accumulate in work queues until worker threads can actively
-     * remove them. Invoking this method instead tries to remove them now.
-     * However, this method may fail to remove tasks in
-     * the presence of interference by other threads.
-     */
-    public void purge() {
-        final BlockingQueue<Runnable> q = workQueue;
-        try {
-            Iterator<Runnable> it = q.iterator();
-            while (it.hasNext()) {
-                Runnable r = it.next();
-                if (r instanceof Future<?> && ((Future<?>)r).isCancelled())
-                    it.remove();
-            }
-        } catch (ConcurrentModificationException fallThrough) {
-            // Take slow path if we encounter interference during traversal.
-            // Make copy for traversal and call remove for cancelled entries.
-            // The slow path is more likely to be O(N*N).
-            for (Object r : q.toArray())
-                if (r instanceof Future<?> && ((Future<?>)r).isCancelled())
-                    q.remove(r);
-        }
-
-        tryTerminate(); // In case SHUTDOWN and now empty
-    }
-
-    /* Statistics */
-
-    /**
-     * Returns the current number of threads in the pool.
-     *
-     * @return the number of threads
-     */
-    public int getPoolSize() {
-        final ReentrantLock mainLock = this.mainLock;
-        mainLock.lock();
-        try {
-            // Remove rare and surprising possibility of
-            // isTerminated() && getPoolSize() > 0
-            return runStateAtLeast(ctl.get(), TIDYING) ? 0
-                : workers.size();
-        } finally {
-            mainLock.unlock();
-        }
-    }
-
-    /**
-     * Returns the approximate number of threads that are actively
-     * executing tasks.
-     *
-     * @return the number of threads
-     */
-    public int getActiveCount() {
-        final ReentrantLock mainLock = this.mainLock;
-        mainLock.lock();
-        try {
-            int n = 0;
-            for (Worker w : workers)
-                if (w.isLocked())
-                    ++n;
-            return n;
-        } finally {
-            mainLock.unlock();
-        }
-    }
-
-    /**
-     * Returns the largest number of threads that have ever
-     * simultaneously been in the pool.
-     *
-     * @return the number of threads
-     */
-    public int getLargestPoolSize() {
-        final ReentrantLock mainLock = this.mainLock;
-        mainLock.lock();
-        try {
-            return largestPoolSize;
-        } finally {
-            mainLock.unlock();
-        }
-    }
-
-    /**
-     * Returns the approximate total number of tasks that have ever been
-     * scheduled for execution. Because the states of tasks and
-     * threads may change dynamically during computation, the returned
-     * value is only an approximation.
-     *
-     * @return the number of tasks
-     */
-    public long getTaskCount() {
-        final ReentrantLock mainLock = this.mainLock;
-        mainLock.lock();
-        try {
-            long n = completedTaskCount;
-            for (Worker w : workers) {
-                n += w.completedTasks;
-                if (w.isLocked())
-                    ++n;
-            }
-            return n + workQueue.size();
-        } finally {
-            mainLock.unlock();
-        }
-    }
-
-    /**
-     * Returns the approximate total number of tasks that have
-     * completed execution. Because the states of tasks and threads
-     * may change dynamically during computation, the returned value
-     * is only an approximation, but one that does not ever decrease
-     * across successive calls.
-     *
-     * @return the number of tasks
-     */
-    public long getCompletedTaskCount() {
-        final ReentrantLock mainLock = this.mainLock;
-        mainLock.lock();
-        try {
-            long n = completedTaskCount;
-            for (Worker w : workers)
-                n += w.completedTasks;
-            return n;
-        } finally {
-            mainLock.unlock();
-        }
-    }
-
-    /**
-     * Returns a string identifying this pool, as well as its state,
-     * including indications of run state and estimated worker and
-     * task counts.
-     *
-     * @return a string identifying this pool, as well as its state
-     */
-    public String toString() {
-        long ncompleted;
-        int nworkers, nactive;
-        final ReentrantLock mainLock = this.mainLock;
-        mainLock.lock();
-        try {
-            ncompleted = completedTaskCount;
-            nactive = 0;
-            nworkers = workers.size();
-            for (Worker w : workers) {
-                ncompleted += w.completedTasks;
-                if (w.isLocked())
-                    ++nactive;
-            }
-        } finally {
-            mainLock.unlock();
-        }
-        int c = ctl.get();
-        String rs = (runStateLessThan(c, SHUTDOWN) ? "Running" :
-                     (runStateAtLeast(c, TERMINATED) ? "Terminated" :
-                      "Shutting down"));
-        return super.toString() +
-            "[" + rs +
-            ", pool size = " + nworkers +
-            ", active threads = " + nactive +
-            ", queued tasks = " + workQueue.size() +
-            ", completed tasks = " + ncompleted +
-            "]";
-    }
-
-    /* Extension hooks */
-
-    /**
-     * Method invoked prior to executing the given Runnable in the
-     * given thread.  This method is invoked by thread {@code t} that
-     * will execute task {@code r}, and may be used to re-initialize
-     * ThreadLocals, or to perform logging.
-     *
-     * <p>This implementation does nothing, but may be customized in
-     * subclasses. Note: To properly nest multiple overridings, subclasses
-     * should generally invoke {@code super.beforeExecute} at the end of
-     * this method.
-     *
-     * @param t the thread that will run task {@code r}
-     * @param r the task that will be executed
-     */
-    protected void beforeExecute(Thread t, Runnable r) { }
-
-    /**
-     * Method invoked upon completion of execution of the given Runnable.
-     * This method is invoked by the thread that executed the task. If
-     * non-null, the Throwable is the uncaught {@code RuntimeException}
-     * or {@code Error} that caused execution to terminate abruptly.
-     *
-     * <p>This implementation does nothing, but may be customized in
-     * subclasses. Note: To properly nest multiple overridings, subclasses
-     * should generally invoke {@code super.afterExecute} at the
-     * beginning of this method.
-     *
-     * <p><b>Note:</b> When actions are enclosed in tasks (such as
-     * {@link FutureTask}) either explicitly or via methods such as
-     * {@code submit}, these task objects catch and maintain
-     * computational exceptions, and so they do not cause abrupt
-     * termination, and the internal exceptions are <em>not</em>
-     * passed to this method. If you would like to trap both kinds of
-     * failures in this method, you can further probe for such cases,
-     * as in this sample subclass that prints either the direct cause
-     * or the underlying exception if a task has been aborted:
-     *
-     *  <pre> {@code
-     * class ExtendedExecutor extends ThreadPoolExecutor {
-     *   // ...
-     *   protected void afterExecute(Runnable r, Throwable t) {
-     *     super.afterExecute(r, t);
-     *     if (t == null && r instanceof Future<?>) {
-     *       try {
-     *         Object result = ((Future<?>) r).get();
-     *       } catch (CancellationException ce) {
-     *           t = ce;
-     *       } catch (ExecutionException ee) {
-     *           t = ee.getCause();
-     *       } catch (InterruptedException ie) {
-     *           Thread.currentThread().interrupt(); // ignore/reset
-     *       }
-     *     }
-     *     if (t != null)
-     *       System.out.println(t);
-     *   }
-     * }}</pre>
-     *
-     * @param r the runnable that has completed
-     * @param t the exception that caused termination, or null if
-     * execution completed normally
-     */
-    protected void afterExecute(Runnable r, Throwable t) { }
-
-    /**
-     * Method invoked when the Executor has terminated.  Default
-     * implementation does nothing. Note: To properly nest multiple
-     * overridings, subclasses should generally invoke
-     * {@code super.terminated} within this method.
-     */
-    protected void terminated() { }
-
-    /* Predefined RejectedExecutionHandlers */
-
-    /**
-     * A handler for rejected tasks that runs the rejected task
-     * directly in the calling thread of the {@code execute} method,
-     * unless the executor has been shut down, in which case the task
-     * is discarded.
-     */
-    public static class CallerRunsPolicy implements RejectedExecutionHandler {
-        /**
-         * Creates a {@code CallerRunsPolicy}.
-         */
-        public CallerRunsPolicy() { }
-
-        /**
-         * Executes task r in the caller's thread, unless the executor
-         * has been shut down, in which case the task is discarded.
-         *
-         * @param r the runnable task requested to be executed
-         * @param e the executor attempting to execute this task
-         */
-        public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
-            if (!e.isShutdown()) {
-                r.run();
-            }
-        }
-    }
-
-    /**
-     * A handler for rejected tasks that throws a
-     * {@code RejectedExecutionException}.
-     */
-    public static class AbortPolicy implements RejectedExecutionHandler {
-        /**
-         * Creates an {@code AbortPolicy}.
-         */
-        public AbortPolicy() { }
-
-        /**
-         * Always throws RejectedExecutionException.
-         *
-         * @param r the runnable task requested to be executed
-         * @param e the executor attempting to execute this task
-         * @throws RejectedExecutionException always.
-         */
-        public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
-            throw new RejectedExecutionException("Task " + r.toString() +
-                                                 " rejected from " +
-                                                 e.toString());
-        }
-    }
-
-    /**
-     * A handler for rejected tasks that silently discards the
-     * rejected task.
-     */
-    public static class DiscardPolicy implements RejectedExecutionHandler {
-        /**
-         * Creates a {@code DiscardPolicy}.
-         */
-        public DiscardPolicy() { }
-
-        /**
-         * Does nothing, which has the effect of discarding task r.
-         *
-         * @param r the runnable task requested to be executed
-         * @param e the executor attempting to execute this task
-         */
-        public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
-        }
-    }
-
-    /**
-     * A handler for rejected tasks that discards the oldest unhandled
-     * request and then retries {@code execute}, unless the executor
-     * is shut down, in which case the task is discarded.
-     */
-    public static class DiscardOldestPolicy implements RejectedExecutionHandler {
-        /**
-         * Creates a {@code DiscardOldestPolicy} for the given executor.
-         */
-        public DiscardOldestPolicy() { }
-
-        /**
-         * Obtains and ignores the next task that the executor
-         * would otherwise execute, if one is immediately available,
-         * and then retries execution of task r, unless the executor
-         * is shut down, in which case task r is instead discarded.
-         *
-         * @param r the runnable task requested to be executed
-         * @param e the executor attempting to execute this task
-         */
-        public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
-            if (!e.isShutdown()) {
-                e.getQueue().poll();
-                e.execute(r);
-            }
-        }
-    }
-}
-
diff --git a/ojluni/src/main/java/java/util/concurrent/TimeUnit.java b/ojluni/src/main/java/java/util/concurrent/TimeUnit.java
deleted file mode 100755
index f756759..0000000
--- a/ojluni/src/main/java/java/util/concurrent/TimeUnit.java
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * A <tt>TimeUnit</tt> represents time durations at a given unit of
- * granularity and provides utility methods to convert across units,
- * and to perform timing and delay operations in these units.  A
- * <tt>TimeUnit</tt> does not maintain time information, but only
- * helps organize and use time representations that may be maintained
- * separately across various contexts.  A nanosecond is defined as one
- * thousandth of a microsecond, a microsecond as one thousandth of a
- * millisecond, a millisecond as one thousandth of a second, a minute
- * as sixty seconds, an hour as sixty minutes, and a day as twenty four
- * hours.
- *
- * <p>A <tt>TimeUnit</tt> is mainly used to inform time-based methods
- * how a given timing parameter should be interpreted. For example,
- * the following code will timeout in 50 milliseconds if the {@link
- * java.util.concurrent.locks.Lock lock} is not available:
- *
- * <pre>  Lock lock = ...;
- *  if (lock.tryLock(50L, TimeUnit.MILLISECONDS)) ...
- * </pre>
- * while this code will timeout in 50 seconds:
- * <pre>
- *  Lock lock = ...;
- *  if (lock.tryLock(50L, TimeUnit.SECONDS)) ...
- * </pre>
- *
- * Note however, that there is no guarantee that a particular timeout
- * implementation will be able to notice the passage of time at the
- * same granularity as the given <tt>TimeUnit</tt>.
- *
- * @since 1.5
- * @author Doug Lea
- */
-public enum TimeUnit {
-    NANOSECONDS {
-        public long toNanos(long d)   { return d; }
-        public long toMicros(long d)  { return d/(C1/C0); }
-        public long toMillis(long d)  { return d/(C2/C0); }
-        public long toSeconds(long d) { return d/(C3/C0); }
-        public long toMinutes(long d) { return d/(C4/C0); }
-        public long toHours(long d)   { return d/(C5/C0); }
-        public long toDays(long d)    { return d/(C6/C0); }
-        public long convert(long d, TimeUnit u) { return u.toNanos(d); }
-        int excessNanos(long d, long m) { return (int)(d - (m*C2)); }
-    },
-    MICROSECONDS {
-        public long toNanos(long d)   { return x(d, C1/C0, MAX/(C1/C0)); }
-        public long toMicros(long d)  { return d; }
-        public long toMillis(long d)  { return d/(C2/C1); }
-        public long toSeconds(long d) { return d/(C3/C1); }
-        public long toMinutes(long d) { return d/(C4/C1); }
-        public long toHours(long d)   { return d/(C5/C1); }
-        public long toDays(long d)    { return d/(C6/C1); }
-        public long convert(long d, TimeUnit u) { return u.toMicros(d); }
-        int excessNanos(long d, long m) { return (int)((d*C1) - (m*C2)); }
-    },
-    MILLISECONDS {
-        public long toNanos(long d)   { return x(d, C2/C0, MAX/(C2/C0)); }
-        public long toMicros(long d)  { return x(d, C2/C1, MAX/(C2/C1)); }
-        public long toMillis(long d)  { return d; }
-        public long toSeconds(long d) { return d/(C3/C2); }
-        public long toMinutes(long d) { return d/(C4/C2); }
-        public long toHours(long d)   { return d/(C5/C2); }
-        public long toDays(long d)    { return d/(C6/C2); }
-        public long convert(long d, TimeUnit u) { return u.toMillis(d); }
-        int excessNanos(long d, long m) { return 0; }
-    },
-    SECONDS {
-        public long toNanos(long d)   { return x(d, C3/C0, MAX/(C3/C0)); }
-        public long toMicros(long d)  { return x(d, C3/C1, MAX/(C3/C1)); }
-        public long toMillis(long d)  { return x(d, C3/C2, MAX/(C3/C2)); }
-        public long toSeconds(long d) { return d; }
-        public long toMinutes(long d) { return d/(C4/C3); }
-        public long toHours(long d)   { return d/(C5/C3); }
-        public long toDays(long d)    { return d/(C6/C3); }
-        public long convert(long d, TimeUnit u) { return u.toSeconds(d); }
-        int excessNanos(long d, long m) { return 0; }
-    },
-    MINUTES {
-        public long toNanos(long d)   { return x(d, C4/C0, MAX/(C4/C0)); }
-        public long toMicros(long d)  { return x(d, C4/C1, MAX/(C4/C1)); }
-        public long toMillis(long d)  { return x(d, C4/C2, MAX/(C4/C2)); }
-        public long toSeconds(long d) { return x(d, C4/C3, MAX/(C4/C3)); }
-        public long toMinutes(long d) { return d; }
-        public long toHours(long d)   { return d/(C5/C4); }
-        public long toDays(long d)    { return d/(C6/C4); }
-        public long convert(long d, TimeUnit u) { return u.toMinutes(d); }
-        int excessNanos(long d, long m) { return 0; }
-    },
-    HOURS {
-        public long toNanos(long d)   { return x(d, C5/C0, MAX/(C5/C0)); }
-        public long toMicros(long d)  { return x(d, C5/C1, MAX/(C5/C1)); }
-        public long toMillis(long d)  { return x(d, C5/C2, MAX/(C5/C2)); }
-        public long toSeconds(long d) { return x(d, C5/C3, MAX/(C5/C3)); }
-        public long toMinutes(long d) { return x(d, C5/C4, MAX/(C5/C4)); }
-        public long toHours(long d)   { return d; }
-        public long toDays(long d)    { return d/(C6/C5); }
-        public long convert(long d, TimeUnit u) { return u.toHours(d); }
-        int excessNanos(long d, long m) { return 0; }
-    },
-    DAYS {
-        public long toNanos(long d)   { return x(d, C6/C0, MAX/(C6/C0)); }
-        public long toMicros(long d)  { return x(d, C6/C1, MAX/(C6/C1)); }
-        public long toMillis(long d)  { return x(d, C6/C2, MAX/(C6/C2)); }
-        public long toSeconds(long d) { return x(d, C6/C3, MAX/(C6/C3)); }
-        public long toMinutes(long d) { return x(d, C6/C4, MAX/(C6/C4)); }
-        public long toHours(long d)   { return x(d, C6/C5, MAX/(C6/C5)); }
-        public long toDays(long d)    { return d; }
-        public long convert(long d, TimeUnit u) { return u.toDays(d); }
-        int excessNanos(long d, long m) { return 0; }
-    };
-
-    // Handy constants for conversion methods
-    static final long C0 = 1L;
-    static final long C1 = C0 * 1000L;
-    static final long C2 = C1 * 1000L;
-    static final long C3 = C2 * 1000L;
-    static final long C4 = C3 * 60L;
-    static final long C5 = C4 * 60L;
-    static final long C6 = C5 * 24L;
-
-    static final long MAX = Long.MAX_VALUE;
-
-    /**
-     * Scale d by m, checking for overflow.
-     * This has a short name to make above code more readable.
-     */
-    static long x(long d, long m, long over) {
-        if (d >  over) return Long.MAX_VALUE;
-        if (d < -over) return Long.MIN_VALUE;
-        return d * m;
-    }
-
-    // To maintain full signature compatibility with 1.5, and to improve the
-    // clarity of the generated javadoc (see 6287639: Abstract methods in
-    // enum classes should not be listed as abstract), method convert
-    // etc. are not declared abstract but otherwise act as abstract methods.
-
-    /**
-     * Convert the given time duration in the given unit to this
-     * unit.  Conversions from finer to coarser granularities
-     * truncate, so lose precision. For example converting
-     * <tt>999</tt> milliseconds to seconds results in
-     * <tt>0</tt>. Conversions from coarser to finer granularities
-     * with arguments that would numerically overflow saturate to
-     * <tt>Long.MIN_VALUE</tt> if negative or <tt>Long.MAX_VALUE</tt>
-     * if positive.
-     *
-     * <p>For example, to convert 10 minutes to milliseconds, use:
-     * <tt>TimeUnit.MILLISECONDS.convert(10L, TimeUnit.MINUTES)</tt>
-     *
-     * @param sourceDuration the time duration in the given <tt>sourceUnit</tt>
-     * @param sourceUnit the unit of the <tt>sourceDuration</tt> argument
-     * @return the converted duration in this unit,
-     * or <tt>Long.MIN_VALUE</tt> if conversion would negatively
-     * overflow, or <tt>Long.MAX_VALUE</tt> if it would positively overflow.
-     */
-    public long convert(long sourceDuration, TimeUnit sourceUnit) {
-        throw new AbstractMethodError();
-    }
-
-    /**
-     * Equivalent to <tt>NANOSECONDS.convert(duration, this)</tt>.
-     * @param duration the duration
-     * @return the converted duration,
-     * or <tt>Long.MIN_VALUE</tt> if conversion would negatively
-     * overflow, or <tt>Long.MAX_VALUE</tt> if it would positively overflow.
-     * @see #convert
-     */
-    public long toNanos(long duration) {
-        throw new AbstractMethodError();
-    }
-
-    /**
-     * Equivalent to <tt>MICROSECONDS.convert(duration, this)</tt>.
-     * @param duration the duration
-     * @return the converted duration,
-     * or <tt>Long.MIN_VALUE</tt> if conversion would negatively
-     * overflow, or <tt>Long.MAX_VALUE</tt> if it would positively overflow.
-     * @see #convert
-     */
-    public long toMicros(long duration) {
-        throw new AbstractMethodError();
-    }
-
-    /**
-     * Equivalent to <tt>MILLISECONDS.convert(duration, this)</tt>.
-     * @param duration the duration
-     * @return the converted duration,
-     * or <tt>Long.MIN_VALUE</tt> if conversion would negatively
-     * overflow, or <tt>Long.MAX_VALUE</tt> if it would positively overflow.
-     * @see #convert
-     */
-    public long toMillis(long duration) {
-        throw new AbstractMethodError();
-    }
-
-    /**
-     * Equivalent to <tt>SECONDS.convert(duration, this)</tt>.
-     * @param duration the duration
-     * @return the converted duration,
-     * or <tt>Long.MIN_VALUE</tt> if conversion would negatively
-     * overflow, or <tt>Long.MAX_VALUE</tt> if it would positively overflow.
-     * @see #convert
-     */
-    public long toSeconds(long duration) {
-        throw new AbstractMethodError();
-    }
-
-    /**
-     * Equivalent to <tt>MINUTES.convert(duration, this)</tt>.
-     * @param duration the duration
-     * @return the converted duration,
-     * or <tt>Long.MIN_VALUE</tt> if conversion would negatively
-     * overflow, or <tt>Long.MAX_VALUE</tt> if it would positively overflow.
-     * @see #convert
-     * @since 1.6
-     */
-    public long toMinutes(long duration) {
-        throw new AbstractMethodError();
-    }
-
-    /**
-     * Equivalent to <tt>HOURS.convert(duration, this)</tt>.
-     * @param duration the duration
-     * @return the converted duration,
-     * or <tt>Long.MIN_VALUE</tt> if conversion would negatively
-     * overflow, or <tt>Long.MAX_VALUE</tt> if it would positively overflow.
-     * @see #convert
-     * @since 1.6
-     */
-    public long toHours(long duration) {
-        throw new AbstractMethodError();
-    }
-
-    /**
-     * Equivalent to <tt>DAYS.convert(duration, this)</tt>.
-     * @param duration the duration
-     * @return the converted duration
-     * @see #convert
-     * @since 1.6
-     */
-    public long toDays(long duration) {
-        throw new AbstractMethodError();
-    }
-
-    /**
-     * Utility to compute the excess-nanosecond argument to wait,
-     * sleep, join.
-     * @param d the duration
-     * @param m the number of milliseconds
-     * @return the number of nanoseconds
-     */
-    abstract int excessNanos(long d, long m);
-
-    /**
-     * Performs a timed {@link Object#wait(long, int) Object.wait}
-     * using this time unit.
-     * This is a convenience method that converts timeout arguments
-     * into the form required by the <tt>Object.wait</tt> method.
-     *
-     * <p>For example, you could implement a blocking <tt>poll</tt>
-     * method (see {@link BlockingQueue#poll BlockingQueue.poll})
-     * using:
-     *
-     *  <pre> {@code
-     * public synchronized Object poll(long timeout, TimeUnit unit)
-     *     throws InterruptedException {
-     *   while (empty) {
-     *     unit.timedWait(this, timeout);
-     *     ...
-     *   }
-     * }}</pre>
-     *
-     * @param obj the object to wait on
-     * @param timeout the maximum time to wait. If less than
-     * or equal to zero, do not wait at all.
-     * @throws InterruptedException if interrupted while waiting
-     */
-    public void timedWait(Object obj, long timeout)
-            throws InterruptedException {
-        if (timeout > 0) {
-            long ms = toMillis(timeout);
-            int ns = excessNanos(timeout, ms);
-            obj.wait(ms, ns);
-        }
-    }
-
-    /**
-     * Performs a timed {@link Thread#join(long, int) Thread.join}
-     * using this time unit.
-     * This is a convenience method that converts time arguments into the
-     * form required by the <tt>Thread.join</tt> method.
-     *
-     * @param thread the thread to wait for
-     * @param timeout the maximum time to wait. If less than
-     * or equal to zero, do not wait at all.
-     * @throws InterruptedException if interrupted while waiting
-     */
-    public void timedJoin(Thread thread, long timeout)
-            throws InterruptedException {
-        if (timeout > 0) {
-            long ms = toMillis(timeout);
-            int ns = excessNanos(timeout, ms);
-            thread.join(ms, ns);
-        }
-    }
-
-    /**
-     * Performs a {@link Thread#sleep(long, int) Thread.sleep} using
-     * this time unit.
-     * This is a convenience method that converts time arguments into the
-     * form required by the <tt>Thread.sleep</tt> method.
-     *
-     * @param timeout the minimum time to sleep. If less than
-     * or equal to zero, do not sleep at all.
-     * @throws InterruptedException if interrupted while sleeping
-     */
-    public void sleep(long timeout) throws InterruptedException {
-        if (timeout > 0) {
-            long ms = toMillis(timeout);
-            int ns = excessNanos(timeout, ms);
-            Thread.sleep(ms, ns);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/TimeoutException.java b/ojluni/src/main/java/java/util/concurrent/TimeoutException.java
deleted file mode 100755
index ed08990..0000000
--- a/ojluni/src/main/java/java/util/concurrent/TimeoutException.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * Exception thrown when a blocking operation times out.  Blocking
- * operations for which a timeout is specified need a means to
- * indicate that the timeout has occurred. For many such operations it
- * is possible to return a value that indicates timeout; when that is
- * not possible or desirable then <tt>TimeoutException</tt> should be
- * declared and thrown.
- *
- * @since 1.5
- * @author Doug Lea
- */
-public class TimeoutException extends Exception {
-    private static final long serialVersionUID = 1900926677490660714L;
-
-    /**
-     * Constructs a <tt>TimeoutException</tt> with no specified detail
-     * message.
-     */
-    public TimeoutException() {}
-
-    /**
-     * Constructs a <tt>TimeoutException</tt> with the specified detail
-     * message.
-     *
-     * @param message the detail message
-     */
-    public TimeoutException(String message) {
-        super(message);
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/TransferQueue.java b/ojluni/src/main/java/java/util/concurrent/TransferQueue.java
deleted file mode 100755
index f8549dc..0000000
--- a/ojluni/src/main/java/java/util/concurrent/TransferQueue.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent;
-
-/**
- * A {@link BlockingQueue} in which producers may wait for consumers
- * to receive elements.  A {@code TransferQueue} may be useful for
- * example in message passing applications in which producers
- * sometimes (using method {@link #transfer}) await receipt of
- * elements by consumers invoking {@code take} or {@code poll}, while
- * at other times enqueue elements (via method {@code put}) without
- * waiting for receipt.
- * {@linkplain #tryTransfer(Object) Non-blocking} and
- * {@linkplain #tryTransfer(Object,long,TimeUnit) time-out} versions of
- * {@code tryTransfer} are also available.
- * A {@code TransferQueue} may also be queried, via {@link
- * #hasWaitingConsumer}, whether there are any threads waiting for
- * items, which is a converse analogy to a {@code peek} operation.
- *
- * <p>Like other blocking queues, a {@code TransferQueue} may be
- * capacity bounded.  If so, an attempted transfer operation may
- * initially block waiting for available space, and/or subsequently
- * block waiting for reception by a consumer.  Note that in a queue
- * with zero capacity, such as {@link SynchronousQueue}, {@code put}
- * and {@code transfer} are effectively synonymous.
- *
- * <p>This interface is a member of the
- * <a href="{@docRoot}/../technotes/guides/collections/index.html">
- * Java Collections Framework</a>.
- *
- * @since 1.7
- * @author Doug Lea
- * @param <E> the type of elements held in this collection
- */
-public interface TransferQueue<E> extends BlockingQueue<E> {
-    /**
-     * Transfers the element to a waiting consumer immediately, if possible.
-     *
-     * <p>More precisely, transfers the specified element immediately
-     * if there exists a consumer already waiting to receive it (in
-     * {@link #take} or timed {@link #poll(long,TimeUnit) poll}),
-     * otherwise returning {@code false} without enqueuing the element.
-     *
-     * @param e the element to transfer
-     * @return {@code true} if the element was transferred, else
-     *         {@code false}
-     * @throws ClassCastException if the class of the specified element
-     *         prevents it from being added to this queue
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException if some property of the specified
-     *         element prevents it from being added to this queue
-     */
-    boolean tryTransfer(E e);
-
-    /**
-     * Transfers the element to a consumer, waiting if necessary to do so.
-     *
-     * <p>More precisely, transfers the specified element immediately
-     * if there exists a consumer already waiting to receive it (in
-     * {@link #take} or timed {@link #poll(long,TimeUnit) poll}),
-     * else waits until the element is received by a consumer.
-     *
-     * @param e the element to transfer
-     * @throws InterruptedException if interrupted while waiting,
-     *         in which case the element is not left enqueued
-     * @throws ClassCastException if the class of the specified element
-     *         prevents it from being added to this queue
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException if some property of the specified
-     *         element prevents it from being added to this queue
-     */
-    void transfer(E e) throws InterruptedException;
-
-    /**
-     * Transfers the element to a consumer if it is possible to do so
-     * before the timeout elapses.
-     *
-     * <p>More precisely, transfers the specified element immediately
-     * if there exists a consumer already waiting to receive it (in
-     * {@link #take} or timed {@link #poll(long,TimeUnit) poll}),
-     * else waits until the element is received by a consumer,
-     * returning {@code false} if the specified wait time elapses
-     * before the element can be transferred.
-     *
-     * @param e the element to transfer
-     * @param timeout how long to wait before giving up, in units of
-     *        {@code unit}
-     * @param unit a {@code TimeUnit} determining how to interpret the
-     *        {@code timeout} parameter
-     * @return {@code true} if successful, or {@code false} if
-     *         the specified waiting time elapses before completion,
-     *         in which case the element is not left enqueued
-     * @throws InterruptedException if interrupted while waiting,
-     *         in which case the element is not left enqueued
-     * @throws ClassCastException if the class of the specified element
-     *         prevents it from being added to this queue
-     * @throws NullPointerException if the specified element is null
-     * @throws IllegalArgumentException if some property of the specified
-     *         element prevents it from being added to this queue
-     */
-    boolean tryTransfer(E e, long timeout, TimeUnit unit)
-        throws InterruptedException;
-
-    /**
-     * Returns {@code true} if there is at least one consumer waiting
-     * to receive an element via {@link #take} or
-     * timed {@link #poll(long,TimeUnit) poll}.
-     * The return value represents a momentary state of affairs.
-     *
-     * @return {@code true} if there is at least one waiting consumer
-     */
-    boolean hasWaitingConsumer();
-
-    /**
-     * Returns an estimate of the number of consumers waiting to
-     * receive elements via {@link #take} or timed
-     * {@link #poll(long,TimeUnit) poll}.  The return value is an
-     * approximation of a momentary state of affairs, that may be
-     * inaccurate if consumers have completed or given up waiting.
-     * The value may be useful for monitoring and heuristics, but
-     * not for synchronization control.  Implementations of this
-     * method are likely to be noticeably slower than those for
-     * {@link #hasWaitingConsumer}.
-     *
-     * @return the number of consumers waiting to receive elements
-     */
-    int getWaitingConsumerCount();
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicBoolean.java b/ojluni/src/main/java/java/util/concurrent/atomic/AtomicBoolean.java
deleted file mode 100755
index c21df7b..0000000
--- a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicBoolean.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.atomic;
-import sun.misc.Unsafe;
-
-/**
- * A {@code boolean} value that may be updated atomically. See the
- * {@link java.util.concurrent.atomic} package specification for
- * description of the properties of atomic variables. An
- * {@code AtomicBoolean} is used in applications such as atomically
- * updated flags, and cannot be used as a replacement for a
- * {@link java.lang.Boolean}.
- *
- * @since 1.5
- * @author Doug Lea
- */
-public class AtomicBoolean implements java.io.Serializable {
-    private static final long serialVersionUID = 4654671469794556979L;
-    // setup to use Unsafe.compareAndSwapInt for updates
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-    private static final long valueOffset;
-
-    static {
-      try {
-        valueOffset = unsafe.objectFieldOffset
-            (AtomicBoolean.class.getDeclaredField("value"));
-      } catch (Exception ex) { throw new Error(ex); }
-    }
-
-    private volatile int value;
-
-    /**
-     * Creates a new {@code AtomicBoolean} with the given initial value.
-     *
-     * @param initialValue the initial value
-     */
-    public AtomicBoolean(boolean initialValue) {
-        value = initialValue ? 1 : 0;
-    }
-
-    /**
-     * Creates a new {@code AtomicBoolean} with initial value {@code false}.
-     */
-    public AtomicBoolean() {
-    }
-
-    /**
-     * Returns the current value.
-     *
-     * @return the current value
-     */
-    public final boolean get() {
-        return value != 0;
-    }
-
-    /**
-     * Atomically sets the value to the given updated value
-     * if the current value {@code ==} the expected value.
-     *
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful. False return indicates that
-     * the actual value was not equal to the expected value.
-     */
-    public final boolean compareAndSet(boolean expect, boolean update) {
-        int e = expect ? 1 : 0;
-        int u = update ? 1 : 0;
-        return unsafe.compareAndSwapInt(this, valueOffset, e, u);
-    }
-
-    /**
-     * Atomically sets the value to the given updated value
-     * if the current value {@code ==} the expected value.
-     *
-     * <p>May <a href="package-summary.html#Spurious">fail spuriously</a>
-     * and does not provide ordering guarantees, so is only rarely an
-     * appropriate alternative to {@code compareAndSet}.
-     *
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful.
-     */
-    public boolean weakCompareAndSet(boolean expect, boolean update) {
-        int e = expect ? 1 : 0;
-        int u = update ? 1 : 0;
-        return unsafe.compareAndSwapInt(this, valueOffset, e, u);
-    }
-
-    /**
-     * Unconditionally sets to the given value.
-     *
-     * @param newValue the new value
-     */
-    public final void set(boolean newValue) {
-        value = newValue ? 1 : 0;
-    }
-
-    /**
-     * Eventually sets to the given value.
-     *
-     * @param newValue the new value
-     * @since 1.6
-     */
-    public final void lazySet(boolean newValue) {
-        int v = newValue ? 1 : 0;
-        unsafe.putOrderedInt(this, valueOffset, v);
-    }
-
-    /**
-     * Atomically sets to the given value and returns the previous value.
-     *
-     * @param newValue the new value
-     * @return the previous value
-     */
-    public final boolean getAndSet(boolean newValue) {
-        for (;;) {
-            boolean current = get();
-            if (compareAndSet(current, newValue))
-                return current;
-        }
-    }
-
-    /**
-     * Returns the String representation of the current value.
-     * @return the String representation of the current value.
-     */
-    public String toString() {
-        return Boolean.toString(get());
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicInteger.java b/ojluni/src/main/java/java/util/concurrent/atomic/AtomicInteger.java
deleted file mode 100755
index 0d8a7a1..0000000
--- a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicInteger.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.atomic;
-import sun.misc.Unsafe;
-
-/**
- * An {@code int} value that may be updated atomically.  See the
- * {@link java.util.concurrent.atomic} package specification for
- * description of the properties of atomic variables. An
- * {@code AtomicInteger} is used in applications such as atomically
- * incremented counters, and cannot be used as a replacement for an
- * {@link java.lang.Integer}. However, this class does extend
- * {@code Number} to allow uniform access by tools and utilities that
- * deal with numerically-based classes.
- *
- * @since 1.5
- * @author Doug Lea
-*/
-public class AtomicInteger extends Number implements java.io.Serializable {
-    private static final long serialVersionUID = 6214790243416807050L;
-
-    // setup to use Unsafe.compareAndSwapInt for updates
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-    private static final long valueOffset;
-
-    static {
-      try {
-        valueOffset = unsafe.objectFieldOffset
-            (AtomicInteger.class.getDeclaredField("value"));
-      } catch (Exception ex) { throw new Error(ex); }
-    }
-
-    private volatile int value;
-
-    /**
-     * Creates a new AtomicInteger with the given initial value.
-     *
-     * @param initialValue the initial value
-     */
-    public AtomicInteger(int initialValue) {
-        value = initialValue;
-    }
-
-    /**
-     * Creates a new AtomicInteger with initial value {@code 0}.
-     */
-    public AtomicInteger() {
-    }
-
-    /**
-     * Gets the current value.
-     *
-     * @return the current value
-     */
-    public final int get() {
-        return value;
-    }
-
-    /**
-     * Sets to the given value.
-     *
-     * @param newValue the new value
-     */
-    public final void set(int newValue) {
-        value = newValue;
-    }
-
-    /**
-     * Eventually sets to the given value.
-     *
-     * @param newValue the new value
-     * @since 1.6
-     */
-    public final void lazySet(int newValue) {
-        unsafe.putOrderedInt(this, valueOffset, newValue);
-    }
-
-    /**
-     * Atomically sets to the given value and returns the old value.
-     *
-     * @param newValue the new value
-     * @return the previous value
-     */
-    public final int getAndSet(int newValue) {
-        for (;;) {
-            int current = get();
-            if (compareAndSet(current, newValue))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically sets the value to the given updated value
-     * if the current value {@code ==} the expected value.
-     *
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful. False return indicates that
-     * the actual value was not equal to the expected value.
-     */
-    public final boolean compareAndSet(int expect, int update) {
-        return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
-    }
-
-    /**
-     * Atomically sets the value to the given updated value
-     * if the current value {@code ==} the expected value.
-     *
-     * <p>May <a href="package-summary.html#Spurious">fail spuriously</a>
-     * and does not provide ordering guarantees, so is only rarely an
-     * appropriate alternative to {@code compareAndSet}.
-     *
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful.
-     */
-    public final boolean weakCompareAndSet(int expect, int update) {
-        return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
-    }
-
-    /**
-     * Atomically increments by one the current value.
-     *
-     * @return the previous value
-     */
-    public final int getAndIncrement() {
-        for (;;) {
-            int current = get();
-            int next = current + 1;
-            if (compareAndSet(current, next))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically decrements by one the current value.
-     *
-     * @return the previous value
-     */
-    public final int getAndDecrement() {
-        for (;;) {
-            int current = get();
-            int next = current - 1;
-            if (compareAndSet(current, next))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically adds the given value to the current value.
-     *
-     * @param delta the value to add
-     * @return the previous value
-     */
-    public final int getAndAdd(int delta) {
-        for (;;) {
-            int current = get();
-            int next = current + delta;
-            if (compareAndSet(current, next))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically increments by one the current value.
-     *
-     * @return the updated value
-     */
-    public final int incrementAndGet() {
-        for (;;) {
-            int current = get();
-            int next = current + 1;
-            if (compareAndSet(current, next))
-                return next;
-        }
-    }
-
-    /**
-     * Atomically decrements by one the current value.
-     *
-     * @return the updated value
-     */
-    public final int decrementAndGet() {
-        for (;;) {
-            int current = get();
-            int next = current - 1;
-            if (compareAndSet(current, next))
-                return next;
-        }
-    }
-
-    /**
-     * Atomically adds the given value to the current value.
-     *
-     * @param delta the value to add
-     * @return the updated value
-     */
-    public final int addAndGet(int delta) {
-        for (;;) {
-            int current = get();
-            int next = current + delta;
-            if (compareAndSet(current, next))
-                return next;
-        }
-    }
-
-    /**
-     * Returns the String representation of the current value.
-     * @return the String representation of the current value.
-     */
-    public String toString() {
-        return Integer.toString(get());
-    }
-
-
-    public int intValue() {
-        return get();
-    }
-
-    public long longValue() {
-        return (long)get();
-    }
-
-    public float floatValue() {
-        return (float)get();
-    }
-
-    public double doubleValue() {
-        return (double)get();
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicIntegerArray.java b/ojluni/src/main/java/java/util/concurrent/atomic/AtomicIntegerArray.java
deleted file mode 100755
index 4622701..0000000
--- a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicIntegerArray.java
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.atomic;
-import sun.misc.Unsafe;
-import java.util.*;
-
-/**
- * An {@code int} array in which elements may be updated atomically.
- * See the {@link java.util.concurrent.atomic} package
- * specification for description of the properties of atomic
- * variables.
- * @since 1.5
- * @author Doug Lea
- */
-public class AtomicIntegerArray implements java.io.Serializable {
-    private static final long serialVersionUID = 2862133569453604235L;
-
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-    private static final int base = unsafe.arrayBaseOffset(int[].class);
-    private static final int shift;
-    private final int[] array;
-
-    static {
-        int scale = unsafe.arrayIndexScale(int[].class);
-        if ((scale & (scale - 1)) != 0)
-            throw new Error("data type scale not a power of two");
-        shift = 31 - Integer.numberOfLeadingZeros(scale);
-    }
-
-    private long checkedByteOffset(int i) {
-        if (i < 0 || i >= array.length)
-            throw new IndexOutOfBoundsException("index " + i);
-
-        return byteOffset(i);
-    }
-
-    private static long byteOffset(int i) {
-        return ((long) i << shift) + base;
-    }
-
-    /**
-     * Creates a new AtomicIntegerArray of the given length, with all
-     * elements initially zero.
-     *
-     * @param length the length of the array
-     */
-    public AtomicIntegerArray(int length) {
-        array = new int[length];
-    }
-
-    /**
-     * Creates a new AtomicIntegerArray with the same length as, and
-     * all elements copied from, the given array.
-     *
-     * @param array the array to copy elements from
-     * @throws NullPointerException if array is null
-     */
-    public AtomicIntegerArray(int[] array) {
-        // Visibility guaranteed by final field guarantees
-        this.array = array.clone();
-    }
-
-    /**
-     * Returns the length of the array.
-     *
-     * @return the length of the array
-     */
-    public final int length() {
-        return array.length;
-    }
-
-    /**
-     * Gets the current value at position {@code i}.
-     *
-     * @param i the index
-     * @return the current value
-     */
-    public final int get(int i) {
-        return getRaw(checkedByteOffset(i));
-    }
-
-    private int getRaw(long offset) {
-        return unsafe.getIntVolatile(array, offset);
-    }
-
-    /**
-     * Sets the element at position {@code i} to the given value.
-     *
-     * @param i the index
-     * @param newValue the new value
-     */
-    public final void set(int i, int newValue) {
-        unsafe.putIntVolatile(array, checkedByteOffset(i), newValue);
-    }
-
-    /**
-     * Eventually sets the element at position {@code i} to the given value.
-     *
-     * @param i the index
-     * @param newValue the new value
-     * @since 1.6
-     */
-    public final void lazySet(int i, int newValue) {
-        unsafe.putOrderedInt(array, checkedByteOffset(i), newValue);
-    }
-
-    /**
-     * Atomically sets the element at position {@code i} to the given
-     * value and returns the old value.
-     *
-     * @param i the index
-     * @param newValue the new value
-     * @return the previous value
-     */
-    public final int getAndSet(int i, int newValue) {
-        long offset = checkedByteOffset(i);
-        while (true) {
-            int current = getRaw(offset);
-            if (compareAndSetRaw(offset, current, newValue))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically sets the element at position {@code i} to the given
-     * updated value if the current value {@code ==} the expected value.
-     *
-     * @param i the index
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful. False return indicates that
-     * the actual value was not equal to the expected value.
-     */
-    public final boolean compareAndSet(int i, int expect, int update) {
-        return compareAndSetRaw(checkedByteOffset(i), expect, update);
-    }
-
-    private boolean compareAndSetRaw(long offset, int expect, int update) {
-        return unsafe.compareAndSwapInt(array, offset, expect, update);
-    }
-
-    /**
-     * Atomically sets the element at position {@code i} to the given
-     * updated value if the current value {@code ==} the expected value.
-     *
-     * <p>May <a href="package-summary.html#Spurious">fail spuriously</a>
-     * and does not provide ordering guarantees, so is only rarely an
-     * appropriate alternative to {@code compareAndSet}.
-     *
-     * @param i the index
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful.
-     */
-    public final boolean weakCompareAndSet(int i, int expect, int update) {
-        return compareAndSet(i, expect, update);
-    }
-
-    /**
-     * Atomically increments by one the element at index {@code i}.
-     *
-     * @param i the index
-     * @return the previous value
-     */
-    public final int getAndIncrement(int i) {
-        return getAndAdd(i, 1);
-    }
-
-    /**
-     * Atomically decrements by one the element at index {@code i}.
-     *
-     * @param i the index
-     * @return the previous value
-     */
-    public final int getAndDecrement(int i) {
-        return getAndAdd(i, -1);
-    }
-
-    /**
-     * Atomically adds the given value to the element at index {@code i}.
-     *
-     * @param i the index
-     * @param delta the value to add
-     * @return the previous value
-     */
-    public final int getAndAdd(int i, int delta) {
-        long offset = checkedByteOffset(i);
-        while (true) {
-            int current = getRaw(offset);
-            if (compareAndSetRaw(offset, current, current + delta))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically increments by one the element at index {@code i}.
-     *
-     * @param i the index
-     * @return the updated value
-     */
-    public final int incrementAndGet(int i) {
-        return addAndGet(i, 1);
-    }
-
-    /**
-     * Atomically decrements by one the element at index {@code i}.
-     *
-     * @param i the index
-     * @return the updated value
-     */
-    public final int decrementAndGet(int i) {
-        return addAndGet(i, -1);
-    }
-
-    /**
-     * Atomically adds the given value to the element at index {@code i}.
-     *
-     * @param i the index
-     * @param delta the value to add
-     * @return the updated value
-     */
-    public final int addAndGet(int i, int delta) {
-        long offset = checkedByteOffset(i);
-        while (true) {
-            int current = getRaw(offset);
-            int next = current + delta;
-            if (compareAndSetRaw(offset, current, next))
-                return next;
-        }
-    }
-
-    /**
-     * Returns the String representation of the current values of array.
-     * @return the String representation of the current values of array
-     */
-    public String toString() {
-        int iMax = array.length - 1;
-        if (iMax == -1)
-            return "[]";
-
-        StringBuilder b = new StringBuilder();
-        b.append('[');
-        for (int i = 0; ; i++) {
-            b.append(getRaw(byteOffset(i)));
-            if (i == iMax)
-                return b.append(']').toString();
-            b.append(',').append(' ');
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.java b/ojluni/src/main/java/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.java
deleted file mode 100755
index de221d4..0000000
--- a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.java
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.atomic;
-import java.lang.reflect.*;
-import sun.misc.Unsafe;
-import sun.reflect.CallerSensitive;
-import sun.reflect.Reflection;
-
-/**
- * A reflection-based utility that enables atomic updates to
- * designated {@code volatile int} fields of designated classes.
- * This class is designed for use in atomic data structures in which
- * several fields of the same node are independently subject to atomic
- * updates.
- *
- * <p>Note that the guarantees of the {@code compareAndSet}
- * method in this class are weaker than in other atomic classes.
- * Because this class cannot ensure that all uses of the field
- * are appropriate for purposes of atomic access, it can
- * guarantee atomicity only with respect to other invocations of
- * {@code compareAndSet} and {@code set} on the same updater.
- *
- * @since 1.5
- * @author Doug Lea
- * @param <T> The type of the object holding the updatable field
- */
-public abstract class  AtomicIntegerFieldUpdater<T> {
-    /**
-     * Creates and returns an updater for objects with the given field.
-     * The Class argument is needed to check that reflective types and
-     * generic types match.
-     *
-     * @param tclass the class of the objects holding the field
-     * @param fieldName the name of the field to be updated
-     * @return the updater
-     * @throws IllegalArgumentException if the field is not a
-     * volatile integer type
-     * @throws RuntimeException with a nested reflection-based
-     * exception if the class does not hold field or is the wrong type
-     */
-    @CallerSensitive
-    public static <U> AtomicIntegerFieldUpdater<U> newUpdater(Class<U> tclass, String fieldName) {
-        return new AtomicIntegerFieldUpdaterImpl<U>(tclass, fieldName, Reflection.getCallerClass());
-    }
-
-    /**
-     * Protected do-nothing constructor for use by subclasses.
-     */
-    protected AtomicIntegerFieldUpdater() {
-    }
-
-    /**
-     * Atomically sets the field of the given object managed by this updater
-     * to the given updated value if the current value {@code ==} the
-     * expected value. This method is guaranteed to be atomic with respect to
-     * other calls to {@code compareAndSet} and {@code set}, but not
-     * necessarily with respect to other changes in the field.
-     *
-     * @param obj An object whose field to conditionally set
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful
-     * @throws ClassCastException if {@code obj} is not an instance
-     * of the class possessing the field established in the constructor
-     */
-    public abstract boolean compareAndSet(T obj, int expect, int update);
-
-    /**
-     * Atomically sets the field of the given object managed by this updater
-     * to the given updated value if the current value {@code ==} the
-     * expected value. This method is guaranteed to be atomic with respect to
-     * other calls to {@code compareAndSet} and {@code set}, but not
-     * necessarily with respect to other changes in the field.
-     *
-     * <p>May <a href="package-summary.html#Spurious">fail spuriously</a>
-     * and does not provide ordering guarantees, so is only rarely an
-     * appropriate alternative to {@code compareAndSet}.
-     *
-     * @param obj An object whose field to conditionally set
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful
-     * @throws ClassCastException if {@code obj} is not an instance
-     * of the class possessing the field established in the constructor
-     */
-    public abstract boolean weakCompareAndSet(T obj, int expect, int update);
-
-    /**
-     * Sets the field of the given object managed by this updater to the
-     * given updated value. This operation is guaranteed to act as a volatile
-     * store with respect to subsequent invocations of {@code compareAndSet}.
-     *
-     * @param obj An object whose field to set
-     * @param newValue the new value
-     */
-    public abstract void set(T obj, int newValue);
-
-    /**
-     * Eventually sets the field of the given object managed by this
-     * updater to the given updated value.
-     *
-     * @param obj An object whose field to set
-     * @param newValue the new value
-     * @since 1.6
-     */
-    public abstract void lazySet(T obj, int newValue);
-
-
-    /**
-     * Gets the current value held in the field of the given object managed
-     * by this updater.
-     *
-     * @param obj An object whose field to get
-     * @return the current value
-     */
-    public abstract int get(T obj);
-
-    /**
-     * Atomically sets the field of the given object managed by this updater
-     * to the given value and returns the old value.
-     *
-     * @param obj An object whose field to get and set
-     * @param newValue the new value
-     * @return the previous value
-     */
-    public int getAndSet(T obj, int newValue) {
-        for (;;) {
-            int current = get(obj);
-            if (compareAndSet(obj, current, newValue))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically increments by one the current value of the field of the
-     * given object managed by this updater.
-     *
-     * @param obj An object whose field to get and set
-     * @return the previous value
-     */
-    public int getAndIncrement(T obj) {
-        for (;;) {
-            int current = get(obj);
-            int next = current + 1;
-            if (compareAndSet(obj, current, next))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically decrements by one the current value of the field of the
-     * given object managed by this updater.
-     *
-     * @param obj An object whose field to get and set
-     * @return the previous value
-     */
-    public int getAndDecrement(T obj) {
-        for (;;) {
-            int current = get(obj);
-            int next = current - 1;
-            if (compareAndSet(obj, current, next))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically adds the given value to the current value of the field of
-     * the given object managed by this updater.
-     *
-     * @param obj An object whose field to get and set
-     * @param delta the value to add
-     * @return the previous value
-     */
-    public int getAndAdd(T obj, int delta) {
-        for (;;) {
-            int current = get(obj);
-            int next = current + delta;
-            if (compareAndSet(obj, current, next))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically increments by one the current value of the field of the
-     * given object managed by this updater.
-     *
-     * @param obj An object whose field to get and set
-     * @return the updated value
-     */
-    public int incrementAndGet(T obj) {
-        for (;;) {
-            int current = get(obj);
-            int next = current + 1;
-            if (compareAndSet(obj, current, next))
-                return next;
-        }
-    }
-
-    /**
-     * Atomically decrements by one the current value of the field of the
-     * given object managed by this updater.
-     *
-     * @param obj An object whose field to get and set
-     * @return the updated value
-     */
-    public int decrementAndGet(T obj) {
-        for (;;) {
-            int current = get(obj);
-            int next = current - 1;
-            if (compareAndSet(obj, current, next))
-                return next;
-        }
-    }
-
-    /**
-     * Atomically adds the given value to the current value of the field of
-     * the given object managed by this updater.
-     *
-     * @param obj An object whose field to get and set
-     * @param delta the value to add
-     * @return the updated value
-     */
-    public int addAndGet(T obj, int delta) {
-        for (;;) {
-            int current = get(obj);
-            int next = current + delta;
-            if (compareAndSet(obj, current, next))
-                return next;
-        }
-    }
-
-    /**
-     * Standard hotspot implementation using intrinsics
-     */
-    private static class AtomicIntegerFieldUpdaterImpl<T> extends AtomicIntegerFieldUpdater<T> {
-        private static final Unsafe unsafe = Unsafe.getUnsafe();
-        private final long offset;
-        private final Class<T> tclass;
-        private final Class cclass;
-
-        AtomicIntegerFieldUpdaterImpl(Class<T> tclass, String fieldName, Class<?> caller) {
-            Field field = null;
-            int modifiers = 0;
-            try {
-                field = tclass.getDeclaredField(fieldName);
-                modifiers = field.getModifiers();
-                sun.reflect.misc.ReflectUtil.ensureMemberAccess(
-                    caller, tclass, null, modifiers);
-                sun.reflect.misc.ReflectUtil.checkPackageAccess(tclass);
-            } catch (Exception ex) {
-                throw new RuntimeException(ex);
-            }
-
-            Class fieldt = field.getType();
-            if (fieldt != int.class)
-                throw new IllegalArgumentException("Must be integer type");
-
-            if (!Modifier.isVolatile(modifiers))
-                throw new IllegalArgumentException("Must be volatile type");
-
-            this.cclass = (Modifier.isProtected(modifiers) &&
-                           caller != tclass) ? caller : null;
-            this.tclass = tclass;
-            offset = unsafe.objectFieldOffset(field);
-        }
-
-        private void fullCheck(T obj) {
-            if (!tclass.isInstance(obj))
-                throw new ClassCastException();
-            if (cclass != null)
-                ensureProtectedAccess(obj);
-        }
-
-        public boolean compareAndSet(T obj, int expect, int update) {
-            if (obj == null || obj.getClass() != tclass || cclass != null) fullCheck(obj);
-            return unsafe.compareAndSwapInt(obj, offset, expect, update);
-        }
-
-        public boolean weakCompareAndSet(T obj, int expect, int update) {
-            if (obj == null || obj.getClass() != tclass || cclass != null) fullCheck(obj);
-            return unsafe.compareAndSwapInt(obj, offset, expect, update);
-        }
-
-        public void set(T obj, int newValue) {
-            if (obj == null || obj.getClass() != tclass || cclass != null) fullCheck(obj);
-            unsafe.putIntVolatile(obj, offset, newValue);
-        }
-
-        public void lazySet(T obj, int newValue) {
-            if (obj == null || obj.getClass() != tclass || cclass != null) fullCheck(obj);
-            unsafe.putOrderedInt(obj, offset, newValue);
-        }
-
-        public final int get(T obj) {
-            if (obj == null || obj.getClass() != tclass || cclass != null) fullCheck(obj);
-            return unsafe.getIntVolatile(obj, offset);
-        }
-
-        private void ensureProtectedAccess(T obj) {
-            if (cclass.isInstance(obj)) {
-                return;
-            }
-            throw new RuntimeException(
-                new IllegalAccessException("Class " +
-                    cclass.getName() +
-                    " can not access a protected member of class " +
-                    tclass.getName() +
-                    " using an instance of " +
-                    obj.getClass().getName()
-                )
-            );
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicLong.java b/ojluni/src/main/java/java/util/concurrent/atomic/AtomicLong.java
deleted file mode 100755
index 4fc4c90..0000000
--- a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicLong.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.atomic;
-import sun.misc.Unsafe;
-
-/**
- * A {@code long} value that may be updated atomically.  See the
- * {@link java.util.concurrent.atomic} package specification for
- * description of the properties of atomic variables. An
- * {@code AtomicLong} is used in applications such as atomically
- * incremented sequence numbers, and cannot be used as a replacement
- * for a {@link java.lang.Long}. However, this class does extend
- * {@code Number} to allow uniform access by tools and utilities that
- * deal with numerically-based classes.
- *
- * @since 1.5
- * @author Doug Lea
- */
-public class AtomicLong extends Number implements java.io.Serializable {
-    private static final long serialVersionUID = 1927816293512124184L;
-
-    // setup to use Unsafe.compareAndSwapLong for updates
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-    private static final long valueOffset;
-
-    /**
-     * Records whether the underlying JVM supports lockless
-     * compareAndSwap for longs. While the Unsafe.compareAndSwapLong
-     * method works in either case, some constructions should be
-     * handled at Java level to avoid locking user-visible locks.
-     */
-    static final boolean VM_SUPPORTS_LONG_CAS = VMSupportsCS8();
-
-    /**
-     * Returns whether underlying JVM supports lockless CompareAndSet
-     * for longs. Called only once and cached in VM_SUPPORTS_LONG_CAS.
-     */
-    private static native boolean VMSupportsCS8();
-
-    static {
-      try {
-        valueOffset = unsafe.objectFieldOffset
-            (AtomicLong.class.getDeclaredField("value"));
-      } catch (Exception ex) { throw new Error(ex); }
-    }
-
-    private volatile long value;
-
-    /**
-     * Creates a new AtomicLong with the given initial value.
-     *
-     * @param initialValue the initial value
-     */
-    public AtomicLong(long initialValue) {
-        value = initialValue;
-    }
-
-    /**
-     * Creates a new AtomicLong with initial value {@code 0}.
-     */
-    public AtomicLong() {
-    }
-
-    /**
-     * Gets the current value.
-     *
-     * @return the current value
-     */
-    public final long get() {
-        return value;
-    }
-
-    /**
-     * Sets to the given value.
-     *
-     * @param newValue the new value
-     */
-    public final void set(long newValue) {
-        value = newValue;
-    }
-
-    /**
-     * Eventually sets to the given value.
-     *
-     * @param newValue the new value
-     * @since 1.6
-     */
-    public final void lazySet(long newValue) {
-        unsafe.putOrderedLong(this, valueOffset, newValue);
-    }
-
-    /**
-     * Atomically sets to the given value and returns the old value.
-     *
-     * @param newValue the new value
-     * @return the previous value
-     */
-    public final long getAndSet(long newValue) {
-        while (true) {
-            long current = get();
-            if (compareAndSet(current, newValue))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically sets the value to the given updated value
-     * if the current value {@code ==} the expected value.
-     *
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful. False return indicates that
-     * the actual value was not equal to the expected value.
-     */
-    public final boolean compareAndSet(long expect, long update) {
-        return unsafe.compareAndSwapLong(this, valueOffset, expect, update);
-    }
-
-    /**
-     * Atomically sets the value to the given updated value
-     * if the current value {@code ==} the expected value.
-     *
-     * <p>May <a href="package-summary.html#Spurious">fail spuriously</a>
-     * and does not provide ordering guarantees, so is only rarely an
-     * appropriate alternative to {@code compareAndSet}.
-     *
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful.
-     */
-    public final boolean weakCompareAndSet(long expect, long update) {
-        return unsafe.compareAndSwapLong(this, valueOffset, expect, update);
-    }
-
-    /**
-     * Atomically increments by one the current value.
-     *
-     * @return the previous value
-     */
-    public final long getAndIncrement() {
-        while (true) {
-            long current = get();
-            long next = current + 1;
-            if (compareAndSet(current, next))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically decrements by one the current value.
-     *
-     * @return the previous value
-     */
-    public final long getAndDecrement() {
-        while (true) {
-            long current = get();
-            long next = current - 1;
-            if (compareAndSet(current, next))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically adds the given value to the current value.
-     *
-     * @param delta the value to add
-     * @return the previous value
-     */
-    public final long getAndAdd(long delta) {
-        while (true) {
-            long current = get();
-            long next = current + delta;
-            if (compareAndSet(current, next))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically increments by one the current value.
-     *
-     * @return the updated value
-     */
-    public final long incrementAndGet() {
-        for (;;) {
-            long current = get();
-            long next = current + 1;
-            if (compareAndSet(current, next))
-                return next;
-        }
-    }
-
-    /**
-     * Atomically decrements by one the current value.
-     *
-     * @return the updated value
-     */
-    public final long decrementAndGet() {
-        for (;;) {
-            long current = get();
-            long next = current - 1;
-            if (compareAndSet(current, next))
-                return next;
-        }
-    }
-
-    /**
-     * Atomically adds the given value to the current value.
-     *
-     * @param delta the value to add
-     * @return the updated value
-     */
-    public final long addAndGet(long delta) {
-        for (;;) {
-            long current = get();
-            long next = current + delta;
-            if (compareAndSet(current, next))
-                return next;
-        }
-    }
-
-    /**
-     * Returns the String representation of the current value.
-     * @return the String representation of the current value.
-     */
-    public String toString() {
-        return Long.toString(get());
-    }
-
-
-    public int intValue() {
-        return (int)get();
-    }
-
-    public long longValue() {
-        return get();
-    }
-
-    public float floatValue() {
-        return (float)get();
-    }
-
-    public double doubleValue() {
-        return (double)get();
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicLongArray.java b/ojluni/src/main/java/java/util/concurrent/atomic/AtomicLongArray.java
deleted file mode 100755
index ece5b6a..0000000
--- a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicLongArray.java
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.atomic;
-import sun.misc.Unsafe;
-import java.util.*;
-
-/**
- * A {@code long} array in which elements may be updated atomically.
- * See the {@link java.util.concurrent.atomic} package specification
- * for description of the properties of atomic variables.
- * @since 1.5
- * @author Doug Lea
- */
-public class AtomicLongArray implements java.io.Serializable {
-    private static final long serialVersionUID = -2308431214976778248L;
-
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-    private static final int base = unsafe.arrayBaseOffset(long[].class);
-    private static final int shift;
-    private final long[] array;
-
-    static {
-        int scale = unsafe.arrayIndexScale(long[].class);
-        if ((scale & (scale - 1)) != 0)
-            throw new Error("data type scale not a power of two");
-        shift = 31 - Integer.numberOfLeadingZeros(scale);
-    }
-
-    private long checkedByteOffset(int i) {
-        if (i < 0 || i >= array.length)
-            throw new IndexOutOfBoundsException("index " + i);
-
-        return byteOffset(i);
-    }
-
-    private static long byteOffset(int i) {
-        return ((long) i << shift) + base;
-    }
-
-    /**
-     * Creates a new AtomicLongArray of the given length, with all
-     * elements initially zero.
-     *
-     * @param length the length of the array
-     */
-    public AtomicLongArray(int length) {
-        array = new long[length];
-    }
-
-    /**
-     * Creates a new AtomicLongArray with the same length as, and
-     * all elements copied from, the given array.
-     *
-     * @param array the array to copy elements from
-     * @throws NullPointerException if array is null
-     */
-    public AtomicLongArray(long[] array) {
-        // Visibility guaranteed by final field guarantees
-        this.array = array.clone();
-    }
-
-    /**
-     * Returns the length of the array.
-     *
-     * @return the length of the array
-     */
-    public final int length() {
-        return array.length;
-    }
-
-    /**
-     * Gets the current value at position {@code i}.
-     *
-     * @param i the index
-     * @return the current value
-     */
-    public final long get(int i) {
-        return getRaw(checkedByteOffset(i));
-    }
-
-    private long getRaw(long offset) {
-        return unsafe.getLongVolatile(array, offset);
-    }
-
-    /**
-     * Sets the element at position {@code i} to the given value.
-     *
-     * @param i the index
-     * @param newValue the new value
-     */
-    public final void set(int i, long newValue) {
-        unsafe.putLongVolatile(array, checkedByteOffset(i), newValue);
-    }
-
-    /**
-     * Eventually sets the element at position {@code i} to the given value.
-     *
-     * @param i the index
-     * @param newValue the new value
-     * @since 1.6
-     */
-    public final void lazySet(int i, long newValue) {
-        unsafe.putOrderedLong(array, checkedByteOffset(i), newValue);
-    }
-
-
-    /**
-     * Atomically sets the element at position {@code i} to the given value
-     * and returns the old value.
-     *
-     * @param i the index
-     * @param newValue the new value
-     * @return the previous value
-     */
-    public final long getAndSet(int i, long newValue) {
-        long offset = checkedByteOffset(i);
-        while (true) {
-            long current = getRaw(offset);
-            if (compareAndSetRaw(offset, current, newValue))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically sets the element at position {@code i} to the given
-     * updated value if the current value {@code ==} the expected value.
-     *
-     * @param i the index
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful. False return indicates that
-     * the actual value was not equal to the expected value.
-     */
-    public final boolean compareAndSet(int i, long expect, long update) {
-        return compareAndSetRaw(checkedByteOffset(i), expect, update);
-    }
-
-    private boolean compareAndSetRaw(long offset, long expect, long update) {
-        return unsafe.compareAndSwapLong(array, offset, expect, update);
-    }
-
-    /**
-     * Atomically sets the element at position {@code i} to the given
-     * updated value if the current value {@code ==} the expected value.
-     *
-     * <p>May <a href="package-summary.html#Spurious">fail spuriously</a>
-     * and does not provide ordering guarantees, so is only rarely an
-     * appropriate alternative to {@code compareAndSet}.
-     *
-     * @param i the index
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful.
-     */
-    public final boolean weakCompareAndSet(int i, long expect, long update) {
-        return compareAndSet(i, expect, update);
-    }
-
-    /**
-     * Atomically increments by one the element at index {@code i}.
-     *
-     * @param i the index
-     * @return the previous value
-     */
-    public final long getAndIncrement(int i) {
-        return getAndAdd(i, 1);
-    }
-
-    /**
-     * Atomically decrements by one the element at index {@code i}.
-     *
-     * @param i the index
-     * @return the previous value
-     */
-    public final long getAndDecrement(int i) {
-        return getAndAdd(i, -1);
-    }
-
-    /**
-     * Atomically adds the given value to the element at index {@code i}.
-     *
-     * @param i the index
-     * @param delta the value to add
-     * @return the previous value
-     */
-    public final long getAndAdd(int i, long delta) {
-        long offset = checkedByteOffset(i);
-        while (true) {
-            long current = getRaw(offset);
-            if (compareAndSetRaw(offset, current, current + delta))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically increments by one the element at index {@code i}.
-     *
-     * @param i the index
-     * @return the updated value
-     */
-    public final long incrementAndGet(int i) {
-        return addAndGet(i, 1);
-    }
-
-    /**
-     * Atomically decrements by one the element at index {@code i}.
-     *
-     * @param i the index
-     * @return the updated value
-     */
-    public final long decrementAndGet(int i) {
-        return addAndGet(i, -1);
-    }
-
-    /**
-     * Atomically adds the given value to the element at index {@code i}.
-     *
-     * @param i the index
-     * @param delta the value to add
-     * @return the updated value
-     */
-    public long addAndGet(int i, long delta) {
-        long offset = checkedByteOffset(i);
-        while (true) {
-            long current = getRaw(offset);
-            long next = current + delta;
-            if (compareAndSetRaw(offset, current, next))
-                return next;
-        }
-    }
-
-    /**
-     * Returns the String representation of the current values of array.
-     * @return the String representation of the current values of array
-     */
-    public String toString() {
-        int iMax = array.length - 1;
-        if (iMax == -1)
-            return "[]";
-
-        StringBuilder b = new StringBuilder();
-        b.append('[');
-        for (int i = 0; ; i++) {
-            b.append(getRaw(byteOffset(i)));
-            if (i == iMax)
-                return b.append(']').toString();
-            b.append(',').append(' ');
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicLongFieldUpdater.java b/ojluni/src/main/java/java/util/concurrent/atomic/AtomicLongFieldUpdater.java
deleted file mode 100755
index cc59c4f..0000000
--- a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicLongFieldUpdater.java
+++ /dev/null
@@ -1,436 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.atomic;
-import java.lang.reflect.*;
-import sun.misc.Unsafe;
-import sun.reflect.CallerSensitive;
-import sun.reflect.Reflection;
-
-/**
- * A reflection-based utility that enables atomic updates to
- * designated {@code volatile long} fields of designated classes.
- * This class is designed for use in atomic data structures in which
- * several fields of the same node are independently subject to atomic
- * updates.
- *
- * <p>Note that the guarantees of the {@code compareAndSet}
- * method in this class are weaker than in other atomic classes.
- * Because this class cannot ensure that all uses of the field
- * are appropriate for purposes of atomic access, it can
- * guarantee atomicity only with respect to other invocations of
- * {@code compareAndSet} and {@code set} on the same updater.
- *
- * @since 1.5
- * @author Doug Lea
- * @param <T> The type of the object holding the updatable field
- */
-public abstract class  AtomicLongFieldUpdater<T> {
-    /**
-     * Creates and returns an updater for objects with the given field.
-     * The Class argument is needed to check that reflective types and
-     * generic types match.
-     *
-     * @param tclass the class of the objects holding the field
-     * @param fieldName the name of the field to be updated.
-     * @return the updater
-     * @throws IllegalArgumentException if the field is not a
-     * volatile long type.
-     * @throws RuntimeException with a nested reflection-based
-     * exception if the class does not hold field or is the wrong type.
-     */
-    @CallerSensitive
-    public static <U> AtomicLongFieldUpdater<U> newUpdater(Class<U> tclass, String fieldName) {
-        Class<?> caller = Reflection.getCallerClass();
-        if (AtomicLong.VM_SUPPORTS_LONG_CAS)
-            return new CASUpdater<U>(tclass, fieldName, caller);
-        else
-            return new LockedUpdater<U>(tclass, fieldName, caller);
-    }
-
-    /**
-     * Protected do-nothing constructor for use by subclasses.
-     */
-    protected AtomicLongFieldUpdater() {
-    }
-
-    /**
-     * Atomically sets the field of the given object managed by this updater
-     * to the given updated value if the current value {@code ==} the
-     * expected value. This method is guaranteed to be atomic with respect to
-     * other calls to {@code compareAndSet} and {@code set}, but not
-     * necessarily with respect to other changes in the field.
-     *
-     * @param obj An object whose field to conditionally set
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful.
-     * @throws ClassCastException if {@code obj} is not an instance
-     * of the class possessing the field established in the constructor.
-     */
-    public abstract boolean compareAndSet(T obj, long expect, long update);
-
-    /**
-     * Atomically sets the field of the given object managed by this updater
-     * to the given updated value if the current value {@code ==} the
-     * expected value. This method is guaranteed to be atomic with respect to
-     * other calls to {@code compareAndSet} and {@code set}, but not
-     * necessarily with respect to other changes in the field.
-     *
-     * <p>May <a href="package-summary.html#Spurious">fail spuriously</a>
-     * and does not provide ordering guarantees, so is only rarely an
-     * appropriate alternative to {@code compareAndSet}.
-     *
-     * @param obj An object whose field to conditionally set
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful.
-     * @throws ClassCastException if {@code obj} is not an instance
-     * of the class possessing the field established in the constructor.
-     */
-    public abstract boolean weakCompareAndSet(T obj, long expect, long update);
-
-    /**
-     * Sets the field of the given object managed by this updater to the
-     * given updated value. This operation is guaranteed to act as a volatile
-     * store with respect to subsequent invocations of {@code compareAndSet}.
-     *
-     * @param obj An object whose field to set
-     * @param newValue the new value
-     */
-    public abstract void set(T obj, long newValue);
-
-    /**
-     * Eventually sets the field of the given object managed by this
-     * updater to the given updated value.
-     *
-     * @param obj An object whose field to set
-     * @param newValue the new value
-     * @since 1.6
-     */
-    public abstract void lazySet(T obj, long newValue);
-
-    /**
-     * Gets the current value held in the field of the given object managed
-     * by this updater.
-     *
-     * @param obj An object whose field to get
-     * @return the current value
-     */
-    public abstract long get(T obj);
-
-    /**
-     * Atomically sets the field of the given object managed by this updater
-     * to the given value and returns the old value.
-     *
-     * @param obj An object whose field to get and set
-     * @param newValue the new value
-     * @return the previous value
-     */
-    public long getAndSet(T obj, long newValue) {
-        for (;;) {
-            long current = get(obj);
-            if (compareAndSet(obj, current, newValue))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically increments by one the current value of the field of the
-     * given object managed by this updater.
-     *
-     * @param obj An object whose field to get and set
-     * @return the previous value
-     */
-    public long getAndIncrement(T obj) {
-        for (;;) {
-            long current = get(obj);
-            long next = current + 1;
-            if (compareAndSet(obj, current, next))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically decrements by one the current value of the field of the
-     * given object managed by this updater.
-     *
-     * @param obj An object whose field to get and set
-     * @return the previous value
-     */
-    public long getAndDecrement(T obj) {
-        for (;;) {
-            long current = get(obj);
-            long next = current - 1;
-            if (compareAndSet(obj, current, next))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically adds the given value to the current value of the field of
-     * the given object managed by this updater.
-     *
-     * @param obj An object whose field to get and set
-     * @param delta the value to add
-     * @return the previous value
-     */
-    public long getAndAdd(T obj, long delta) {
-        for (;;) {
-            long current = get(obj);
-            long next = current + delta;
-            if (compareAndSet(obj, current, next))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically increments by one the current value of the field of the
-     * given object managed by this updater.
-     *
-     * @param obj An object whose field to get and set
-     * @return the updated value
-     */
-    public long incrementAndGet(T obj) {
-        for (;;) {
-            long current = get(obj);
-            long next = current + 1;
-            if (compareAndSet(obj, current, next))
-                return next;
-        }
-    }
-
-    /**
-     * Atomically decrements by one the current value of the field of the
-     * given object managed by this updater.
-     *
-     * @param obj An object whose field to get and set
-     * @return the updated value
-     */
-    public long decrementAndGet(T obj) {
-        for (;;) {
-            long current = get(obj);
-            long next = current - 1;
-            if (compareAndSet(obj, current, next))
-                return next;
-        }
-    }
-
-    /**
-     * Atomically adds the given value to the current value of the field of
-     * the given object managed by this updater.
-     *
-     * @param obj An object whose field to get and set
-     * @param delta the value to add
-     * @return the updated value
-     */
-    public long addAndGet(T obj, long delta) {
-        for (;;) {
-            long current = get(obj);
-            long next = current + delta;
-            if (compareAndSet(obj, current, next))
-                return next;
-        }
-    }
-
-    private static class CASUpdater<T> extends AtomicLongFieldUpdater<T> {
-        private static final Unsafe unsafe = Unsafe.getUnsafe();
-        private final long offset;
-        private final Class<T> tclass;
-        private final Class cclass;
-
-        CASUpdater(Class<T> tclass, String fieldName, Class<?> caller) {
-            Field field = null;
-            int modifiers = 0;
-            try {
-                field = tclass.getDeclaredField(fieldName);
-                modifiers = field.getModifiers();
-                sun.reflect.misc.ReflectUtil.ensureMemberAccess(
-                    caller, tclass, null, modifiers);
-                sun.reflect.misc.ReflectUtil.checkPackageAccess(tclass);
-            } catch (Exception ex) {
-                throw new RuntimeException(ex);
-            }
-
-            Class fieldt = field.getType();
-            if (fieldt != long.class)
-                throw new IllegalArgumentException("Must be long type");
-
-            if (!Modifier.isVolatile(modifiers))
-                throw new IllegalArgumentException("Must be volatile type");
-
-            this.cclass = (Modifier.isProtected(modifiers) &&
-                           caller != tclass) ? caller : null;
-            this.tclass = tclass;
-            offset = unsafe.objectFieldOffset(field);
-        }
-
-        private void fullCheck(T obj) {
-            if (!tclass.isInstance(obj))
-                throw new ClassCastException();
-            if (cclass != null)
-                ensureProtectedAccess(obj);
-        }
-
-        public boolean compareAndSet(T obj, long expect, long update) {
-            if (obj == null || obj.getClass() != tclass || cclass != null) fullCheck(obj);
-            return unsafe.compareAndSwapLong(obj, offset, expect, update);
-        }
-
-        public boolean weakCompareAndSet(T obj, long expect, long update) {
-            if (obj == null || obj.getClass() != tclass || cclass != null) fullCheck(obj);
-            return unsafe.compareAndSwapLong(obj, offset, expect, update);
-        }
-
-        public void set(T obj, long newValue) {
-            if (obj == null || obj.getClass() != tclass || cclass != null) fullCheck(obj);
-            unsafe.putLongVolatile(obj, offset, newValue);
-        }
-
-        public void lazySet(T obj, long newValue) {
-            if (obj == null || obj.getClass() != tclass || cclass != null) fullCheck(obj);
-            unsafe.putOrderedLong(obj, offset, newValue);
-        }
-
-        public long get(T obj) {
-            if (obj == null || obj.getClass() != tclass || cclass != null) fullCheck(obj);
-            return unsafe.getLongVolatile(obj, offset);
-        }
-
-        private void ensureProtectedAccess(T obj) {
-            if (cclass.isInstance(obj)) {
-                return;
-            }
-            throw new RuntimeException(
-                new IllegalAccessException("Class " +
-                    cclass.getName() +
-                    " can not access a protected member of class " +
-                    tclass.getName() +
-                    " using an instance of " +
-                    obj.getClass().getName()
-                )
-            );
-        }
-    }
-
-
-    private static class LockedUpdater<T> extends AtomicLongFieldUpdater<T> {
-        private static final Unsafe unsafe = Unsafe.getUnsafe();
-        private final long offset;
-        private final Class<T> tclass;
-        private final Class cclass;
-
-        LockedUpdater(Class<T> tclass, String fieldName, Class<?> caller) {
-            Field field = null;
-            int modifiers = 0;
-            try {
-                field = tclass.getDeclaredField(fieldName);
-                modifiers = field.getModifiers();
-                sun.reflect.misc.ReflectUtil.ensureMemberAccess(
-                    caller, tclass, null, modifiers);
-                sun.reflect.misc.ReflectUtil.checkPackageAccess(tclass);
-            } catch (Exception ex) {
-                throw new RuntimeException(ex);
-            }
-
-            Class fieldt = field.getType();
-            if (fieldt != long.class)
-                throw new IllegalArgumentException("Must be long type");
-
-            if (!Modifier.isVolatile(modifiers))
-                throw new IllegalArgumentException("Must be volatile type");
-
-            this.cclass = (Modifier.isProtected(modifiers) &&
-                           caller != tclass) ? caller : null;
-            this.tclass = tclass;
-            offset = unsafe.objectFieldOffset(field);
-        }
-
-        private void fullCheck(T obj) {
-            if (!tclass.isInstance(obj))
-                throw new ClassCastException();
-            if (cclass != null)
-                ensureProtectedAccess(obj);
-        }
-
-        public boolean compareAndSet(T obj, long expect, long update) {
-            if (obj == null || obj.getClass() != tclass || cclass != null) fullCheck(obj);
-            synchronized (this) {
-                long v = unsafe.getLong(obj, offset);
-                if (v != expect)
-                    return false;
-                unsafe.putLong(obj, offset, update);
-                return true;
-            }
-        }
-
-        public boolean weakCompareAndSet(T obj, long expect, long update) {
-            return compareAndSet(obj, expect, update);
-        }
-
-        public void set(T obj, long newValue) {
-            if (obj == null || obj.getClass() != tclass || cclass != null) fullCheck(obj);
-            synchronized (this) {
-                unsafe.putLong(obj, offset, newValue);
-            }
-        }
-
-        public void lazySet(T obj, long newValue) {
-            set(obj, newValue);
-        }
-
-        public long get(T obj) {
-            if (obj == null || obj.getClass() != tclass || cclass != null) fullCheck(obj);
-            synchronized (this) {
-                return unsafe.getLong(obj, offset);
-            }
-        }
-
-        private void ensureProtectedAccess(T obj) {
-            if (cclass.isInstance(obj)) {
-                return;
-            }
-            throw new RuntimeException(
-                new IllegalAccessException("Class " +
-                    cclass.getName() +
-                    " can not access a protected member of class " +
-                    tclass.getName() +
-                    " using an instance of " +
-                    obj.getClass().getName()
-                )
-            );
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicMarkableReference.java b/ojluni/src/main/java/java/util/concurrent/atomic/AtomicMarkableReference.java
deleted file mode 100755
index b1dc71d..0000000
--- a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicMarkableReference.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.atomic;
-
-/**
- * An {@code AtomicMarkableReference} maintains an object reference
- * along with a mark bit, that can be updated atomically.
- *
- * <p>Implementation note: This implementation maintains markable
- * references by creating internal objects representing "boxed"
- * [reference, boolean] pairs.
- *
- * @since 1.5
- * @author Doug Lea
- * @param <V> The type of object referred to by this reference
- */
-public class AtomicMarkableReference<V> {
-
-    private static class Pair<T> {
-        final T reference;
-        final boolean mark;
-        private Pair(T reference, boolean mark) {
-            this.reference = reference;
-            this.mark = mark;
-        }
-        static <T> Pair<T> of(T reference, boolean mark) {
-            return new Pair<T>(reference, mark);
-        }
-    }
-
-    private volatile Pair<V> pair;
-
-    /**
-     * Creates a new {@code AtomicMarkableReference} with the given
-     * initial values.
-     *
-     * @param initialRef the initial reference
-     * @param initialMark the initial mark
-     */
-    public AtomicMarkableReference(V initialRef, boolean initialMark) {
-        pair = Pair.of(initialRef, initialMark);
-    }
-
-    /**
-     * Returns the current value of the reference.
-     *
-     * @return the current value of the reference
-     */
-    public V getReference() {
-        return pair.reference;
-    }
-
-    /**
-     * Returns the current value of the mark.
-     *
-     * @return the current value of the mark
-     */
-    public boolean isMarked() {
-        return pair.mark;
-    }
-
-    /**
-     * Returns the current values of both the reference and the mark.
-     * Typical usage is {@code boolean[1] holder; ref = v.get(holder); }.
-     *
-     * @param markHolder an array of size of at least one. On return,
-     * {@code markholder[0]} will hold the value of the mark.
-     * @return the current value of the reference
-     */
-    public V get(boolean[] markHolder) {
-        Pair<V> pair = this.pair;
-        markHolder[0] = pair.mark;
-        return pair.reference;
-    }
-
-    /**
-     * Atomically sets the value of both the reference and mark
-     * to the given update values if the
-     * current reference is {@code ==} to the expected reference
-     * and the current mark is equal to the expected mark.
-     *
-     * <p>May <a href="package-summary.html#Spurious">fail spuriously</a>
-     * and does not provide ordering guarantees, so is only rarely an
-     * appropriate alternative to {@code compareAndSet}.
-     *
-     * @param expectedReference the expected value of the reference
-     * @param newReference the new value for the reference
-     * @param expectedMark the expected value of the mark
-     * @param newMark the new value for the mark
-     * @return true if successful
-     */
-    public boolean weakCompareAndSet(V       expectedReference,
-                                     V       newReference,
-                                     boolean expectedMark,
-                                     boolean newMark) {
-        return compareAndSet(expectedReference, newReference,
-                             expectedMark, newMark);
-    }
-
-    /**
-     * Atomically sets the value of both the reference and mark
-     * to the given update values if the
-     * current reference is {@code ==} to the expected reference
-     * and the current mark is equal to the expected mark.
-     *
-     * @param expectedReference the expected value of the reference
-     * @param newReference the new value for the reference
-     * @param expectedMark the expected value of the mark
-     * @param newMark the new value for the mark
-     * @return true if successful
-     */
-    public boolean compareAndSet(V       expectedReference,
-                                 V       newReference,
-                                 boolean expectedMark,
-                                 boolean newMark) {
-        Pair<V> current = pair;
-        return
-            expectedReference == current.reference &&
-            expectedMark == current.mark &&
-            ((newReference == current.reference &&
-              newMark == current.mark) ||
-             casPair(current, Pair.of(newReference, newMark)));
-    }
-
-    /**
-     * Unconditionally sets the value of both the reference and mark.
-     *
-     * @param newReference the new value for the reference
-     * @param newMark the new value for the mark
-     */
-    public void set(V newReference, boolean newMark) {
-        Pair<V> current = pair;
-        if (newReference != current.reference || newMark != current.mark)
-            this.pair = Pair.of(newReference, newMark);
-    }
-
-    /**
-     * Atomically sets the value of the mark to the given update value
-     * if the current reference is {@code ==} to the expected
-     * reference.  Any given invocation of this operation may fail
-     * (return {@code false}) spuriously, but repeated invocation
-     * when the current value holds the expected value and no other
-     * thread is also attempting to set the value will eventually
-     * succeed.
-     *
-     * @param expectedReference the expected value of the reference
-     * @param newMark the new value for the mark
-     * @return true if successful
-     */
-    public boolean attemptMark(V expectedReference, boolean newMark) {
-        Pair<V> current = pair;
-        return
-            expectedReference == current.reference &&
-            (newMark == current.mark ||
-             casPair(current, Pair.of(expectedReference, newMark)));
-    }
-
-    // Unsafe mechanics
-
-    private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe();
-    private static final long pairOffset =
-        objectFieldOffset(UNSAFE, "pair", AtomicMarkableReference.class);
-
-    private boolean casPair(Pair<V> cmp, Pair<V> val) {
-        return UNSAFE.compareAndSwapObject(this, pairOffset, cmp, val);
-    }
-
-    static long objectFieldOffset(sun.misc.Unsafe UNSAFE,
-                                  String field, Class<?> klazz) {
-        try {
-            return UNSAFE.objectFieldOffset(klazz.getDeclaredField(field));
-        } catch (NoSuchFieldException e) {
-            // Convert Exception to corresponding Error
-            NoSuchFieldError error = new NoSuchFieldError(field);
-            error.initCause(e);
-            throw error;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicReference.java b/ojluni/src/main/java/java/util/concurrent/atomic/AtomicReference.java
deleted file mode 100755
index 3178ca1..0000000
--- a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicReference.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.atomic;
-import sun.misc.Unsafe;
-
-/**
- * An object reference that may be updated atomically. See the {@link
- * java.util.concurrent.atomic} package specification for description
- * of the properties of atomic variables.
- * @since 1.5
- * @author Doug Lea
- * @param <V> The type of object referred to by this reference
- */
-public class AtomicReference<V>  implements java.io.Serializable {
-    private static final long serialVersionUID = -1848883965231344442L;
-
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-    private static final long valueOffset;
-
-    static {
-      try {
-        valueOffset = unsafe.objectFieldOffset
-            (AtomicReference.class.getDeclaredField("value"));
-      } catch (Exception ex) { throw new Error(ex); }
-    }
-
-    private volatile V value;
-
-    /**
-     * Creates a new AtomicReference with the given initial value.
-     *
-     * @param initialValue the initial value
-     */
-    public AtomicReference(V initialValue) {
-        value = initialValue;
-    }
-
-    /**
-     * Creates a new AtomicReference with null initial value.
-     */
-    public AtomicReference() {
-    }
-
-    /**
-     * Gets the current value.
-     *
-     * @return the current value
-     */
-    public final V get() {
-        return value;
-    }
-
-    /**
-     * Sets to the given value.
-     *
-     * @param newValue the new value
-     */
-    public final void set(V newValue) {
-        value = newValue;
-    }
-
-    /**
-     * Eventually sets to the given value.
-     *
-     * @param newValue the new value
-     * @since 1.6
-     */
-    public final void lazySet(V newValue) {
-        unsafe.putOrderedObject(this, valueOffset, newValue);
-    }
-
-    /**
-     * Atomically sets the value to the given updated value
-     * if the current value {@code ==} the expected value.
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful. False return indicates that
-     * the actual value was not equal to the expected value.
-     */
-    public final boolean compareAndSet(V expect, V update) {
-        return unsafe.compareAndSwapObject(this, valueOffset, expect, update);
-    }
-
-    /**
-     * Atomically sets the value to the given updated value
-     * if the current value {@code ==} the expected value.
-     *
-     * <p>May <a href="package-summary.html#Spurious">fail spuriously</a>
-     * and does not provide ordering guarantees, so is only rarely an
-     * appropriate alternative to {@code compareAndSet}.
-     *
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful.
-     */
-    public final boolean weakCompareAndSet(V expect, V update) {
-        return unsafe.compareAndSwapObject(this, valueOffset, expect, update);
-    }
-
-    /**
-     * Atomically sets to the given value and returns the old value.
-     *
-     * @param newValue the new value
-     * @return the previous value
-     */
-    public final V getAndSet(V newValue) {
-        while (true) {
-            V x = get();
-            if (compareAndSet(x, newValue))
-                return x;
-        }
-    }
-
-    /**
-     * Returns the String representation of the current value.
-     * @return the String representation of the current value.
-     */
-    public String toString() {
-        return String.valueOf(get());
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicReferenceArray.java b/ojluni/src/main/java/java/util/concurrent/atomic/AtomicReferenceArray.java
deleted file mode 100755
index 954272b..0000000
--- a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicReferenceArray.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.atomic;
-
-import java.lang.reflect.Array;
-import java.util.Arrays;
-import sun.misc.Unsafe;
-
-/**
- * An array of object references in which elements may be updated
- * atomically.  See the {@link java.util.concurrent.atomic} package
- * specification for description of the properties of atomic
- * variables.
- * @since 1.5
- * @author Doug Lea
- * @param <E> The base class of elements held in this array
- */
-public class AtomicReferenceArray<E> implements java.io.Serializable {
-    private static final long serialVersionUID = -6209656149925076980L;
-
-    private static final Unsafe unsafe;
-    private static final int base;
-    private static final int shift;
-    private static final long arrayFieldOffset;
-    private final Object[] array; // must have exact type Object[]
-
-    static {
-        int scale;
-        try {
-            unsafe = Unsafe.getUnsafe();
-            arrayFieldOffset = unsafe.objectFieldOffset
-                (AtomicReferenceArray.class.getDeclaredField("array"));
-            base = unsafe.arrayBaseOffset(Object[].class);
-            scale = unsafe.arrayIndexScale(Object[].class);
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-        if ((scale & (scale - 1)) != 0)
-            throw new Error("data type scale not a power of two");
-        shift = 31 - Integer.numberOfLeadingZeros(scale);
-    }
-
-    private long checkedByteOffset(int i) {
-        if (i < 0 || i >= array.length)
-            throw new IndexOutOfBoundsException("index " + i);
-
-        return byteOffset(i);
-    }
-
-    private static long byteOffset(int i) {
-        return ((long) i << shift) + base;
-    }
-
-    /**
-     * Creates a new AtomicReferenceArray of the given length, with all
-     * elements initially null.
-     *
-     * @param length the length of the array
-     */
-    public AtomicReferenceArray(int length) {
-        array = new Object[length];
-    }
-
-    /**
-     * Creates a new AtomicReferenceArray with the same length as, and
-     * all elements copied from, the given array.
-     *
-     * @param array the array to copy elements from
-     * @throws NullPointerException if array is null
-     */
-    public AtomicReferenceArray(E[] array) {
-        // Visibility guaranteed by final field guarantees
-        this.array = Arrays.copyOf(array, array.length, Object[].class);
-    }
-
-    /**
-     * Returns the length of the array.
-     *
-     * @return the length of the array
-     */
-    public final int length() {
-        return array.length;
-    }
-
-    /**
-     * Gets the current value at position {@code i}.
-     *
-     * @param i the index
-     * @return the current value
-     */
-    public final E get(int i) {
-        return getRaw(checkedByteOffset(i));
-    }
-
-    private E getRaw(long offset) {
-        return (E) unsafe.getObjectVolatile(array, offset);
-    }
-
-    /**
-     * Sets the element at position {@code i} to the given value.
-     *
-     * @param i the index
-     * @param newValue the new value
-     */
-    public final void set(int i, E newValue) {
-        unsafe.putObjectVolatile(array, checkedByteOffset(i), newValue);
-    }
-
-    /**
-     * Eventually sets the element at position {@code i} to the given value.
-     *
-     * @param i the index
-     * @param newValue the new value
-     * @since 1.6
-     */
-    public final void lazySet(int i, E newValue) {
-        unsafe.putOrderedObject(array, checkedByteOffset(i), newValue);
-    }
-
-
-    /**
-     * Atomically sets the element at position {@code i} to the given
-     * value and returns the old value.
-     *
-     * @param i the index
-     * @param newValue the new value
-     * @return the previous value
-     */
-    public final E getAndSet(int i, E newValue) {
-        long offset = checkedByteOffset(i);
-        while (true) {
-            E current = getRaw(offset);
-            if (compareAndSetRaw(offset, current, newValue))
-                return current;
-        }
-    }
-
-    /**
-     * Atomically sets the element at position {@code i} to the given
-     * updated value if the current value {@code ==} the expected value.
-     *
-     * @param i the index
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful. False return indicates that
-     * the actual value was not equal to the expected value.
-     */
-    public final boolean compareAndSet(int i, E expect, E update) {
-        return compareAndSetRaw(checkedByteOffset(i), expect, update);
-    }
-
-    private boolean compareAndSetRaw(long offset, E expect, E update) {
-        return unsafe.compareAndSwapObject(array, offset, expect, update);
-    }
-
-    /**
-     * Atomically sets the element at position {@code i} to the given
-     * updated value if the current value {@code ==} the expected value.
-     *
-     * <p>May <a href="package-summary.html#Spurious">fail spuriously</a>
-     * and does not provide ordering guarantees, so is only rarely an
-     * appropriate alternative to {@code compareAndSet}.
-     *
-     * @param i the index
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful.
-     */
-    public final boolean weakCompareAndSet(int i, E expect, E update) {
-        return compareAndSet(i, expect, update);
-    }
-
-    /**
-     * Returns the String representation of the current values of array.
-     * @return the String representation of the current values of array
-     */
-    public String toString() {
-        int iMax = array.length - 1;
-        if (iMax == -1)
-            return "[]";
-
-        StringBuilder b = new StringBuilder();
-        b.append('[');
-        for (int i = 0; ; i++) {
-            b.append(getRaw(byteOffset(i)));
-            if (i == iMax)
-                return b.append(']').toString();
-            b.append(',').append(' ');
-        }
-    }
-
-    /**
-     * Reconstitutes the instance from a stream (that is, deserializes it).
-     * @param s the stream
-     */
-    private void readObject(java.io.ObjectInputStream s)
-        throws java.io.IOException, ClassNotFoundException {
-        // Note: This must be changed if any additional fields are defined
-        Object a = s.readFields().get("array", null);
-        if (a == null || !a.getClass().isArray())
-            throw new java.io.InvalidObjectException("Not array type");
-        if (a.getClass() != Object[].class)
-            a = Arrays.copyOf((Object[])a, Array.getLength(a), Object[].class);
-        unsafe.putObjectVolatile(this, arrayFieldOffset, a);
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.java b/ojluni/src/main/java/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.java
deleted file mode 100755
index e3c65b9..0000000
--- a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.atomic;
-import java.lang.reflect.*;
-import sun.misc.Unsafe;
-import sun.reflect.CallerSensitive;
-import sun.reflect.Reflection;
-
-/**
- * A reflection-based utility that enables atomic updates to
- * designated {@code volatile} reference fields of designated
- * classes.  This class is designed for use in atomic data structures
- * in which several reference fields of the same node are
- * independently subject to atomic updates. For example, a tree node
- * might be declared as
- *
- *  <pre> {@code
- * class Node {
- *   private volatile Node left, right;
- *
- *   private static final AtomicReferenceFieldUpdater<Node, Node> leftUpdater =
- *     AtomicReferenceFieldUpdater.newUpdater(Node.class, Node.class, "left");
- *   private static AtomicReferenceFieldUpdater<Node, Node> rightUpdater =
- *     AtomicReferenceFieldUpdater.newUpdater(Node.class, Node.class, "right");
- *
- *   Node getLeft() { return left;  }
- *   boolean compareAndSetLeft(Node expect, Node update) {
- *     return leftUpdater.compareAndSet(this, expect, update);
- *   }
- *   // ... and so on
- * }}</pre>
- *
- * <p>Note that the guarantees of the {@code compareAndSet}
- * method in this class are weaker than in other atomic classes.
- * Because this class cannot ensure that all uses of the field
- * are appropriate for purposes of atomic access, it can
- * guarantee atomicity only with respect to other invocations of
- * {@code compareAndSet} and {@code set} on the same updater.
- *
- * @since 1.5
- * @author Doug Lea
- * @param <T> The type of the object holding the updatable field
- * @param <V> The type of the field
- */
-public abstract class AtomicReferenceFieldUpdater<T, V> {
-
-    /**
-     * Creates and returns an updater for objects with the given field.
-     * The Class arguments are needed to check that reflective types and
-     * generic types match.
-     *
-     * @param tclass the class of the objects holding the field.
-     * @param vclass the class of the field
-     * @param fieldName the name of the field to be updated.
-     * @return the updater
-     * @throws IllegalArgumentException if the field is not a volatile reference type.
-     * @throws RuntimeException with a nested reflection-based
-     * exception if the class does not hold field or is the wrong type.
-     */
-    @CallerSensitive
-    public static <U, W> AtomicReferenceFieldUpdater<U,W> newUpdater(Class<U> tclass, Class<W> vclass, String fieldName) {
-        return new AtomicReferenceFieldUpdaterImpl<U,W>(tclass,
-                                                        vclass,
-                                                        fieldName,
-                                                        Reflection.getCallerClass());
-    }
-
-    /**
-     * Protected do-nothing constructor for use by subclasses.
-     */
-    protected AtomicReferenceFieldUpdater() {
-    }
-
-    /**
-     * Atomically sets the field of the given object managed by this updater
-     * to the given updated value if the current value {@code ==} the
-     * expected value. This method is guaranteed to be atomic with respect to
-     * other calls to {@code compareAndSet} and {@code set}, but not
-     * necessarily with respect to other changes in the field.
-     *
-     * @param obj An object whose field to conditionally set
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful.
-     */
-    public abstract boolean compareAndSet(T obj, V expect, V update);
-
-    /**
-     * Atomically sets the field of the given object managed by this updater
-     * to the given updated value if the current value {@code ==} the
-     * expected value. This method is guaranteed to be atomic with respect to
-     * other calls to {@code compareAndSet} and {@code set}, but not
-     * necessarily with respect to other changes in the field.
-     *
-     * <p>May <a href="package-summary.html#Spurious">fail spuriously</a>
-     * and does not provide ordering guarantees, so is only rarely an
-     * appropriate alternative to {@code compareAndSet}.
-     *
-     * @param obj An object whose field to conditionally set
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful.
-     */
-    public abstract boolean weakCompareAndSet(T obj, V expect, V update);
-
-    /**
-     * Sets the field of the given object managed by this updater to the
-     * given updated value. This operation is guaranteed to act as a volatile
-     * store with respect to subsequent invocations of {@code compareAndSet}.
-     *
-     * @param obj An object whose field to set
-     * @param newValue the new value
-     */
-    public abstract void set(T obj, V newValue);
-
-    /**
-     * Eventually sets the field of the given object managed by this
-     * updater to the given updated value.
-     *
-     * @param obj An object whose field to set
-     * @param newValue the new value
-     * @since 1.6
-     */
-    public abstract void lazySet(T obj, V newValue);
-
-    /**
-     * Gets the current value held in the field of the given object managed
-     * by this updater.
-     *
-     * @param obj An object whose field to get
-     * @return the current value
-     */
-    public abstract V get(T obj);
-
-    /**
-     * Atomically sets the field of the given object managed by this updater
-     * to the given value and returns the old value.
-     *
-     * @param obj An object whose field to get and set
-     * @param newValue the new value
-     * @return the previous value
-     */
-    public V getAndSet(T obj, V newValue) {
-        for (;;) {
-            V current = get(obj);
-            if (compareAndSet(obj, current, newValue))
-                return current;
-        }
-    }
-
-    private static final class AtomicReferenceFieldUpdaterImpl<T,V>
-        extends AtomicReferenceFieldUpdater<T,V> {
-        private static final Unsafe unsafe = Unsafe.getUnsafe();
-        private final long offset;
-        private final Class<T> tclass;
-        private final Class<V> vclass;
-        private final Class cclass;
-
-        /*
-         * Internal type checks within all update methods contain
-         * internal inlined optimizations checking for the common
-         * cases where the class is final (in which case a simple
-         * getClass comparison suffices) or is of type Object (in
-         * which case no check is needed because all objects are
-         * instances of Object). The Object case is handled simply by
-         * setting vclass to null in constructor.  The targetCheck and
-         * updateCheck methods are invoked when these faster
-         * screenings fail.
-         */
-
-        AtomicReferenceFieldUpdaterImpl(Class<T> tclass,
-                                        Class<V> vclass,
-                                        String fieldName,
-                                        Class<?> caller) {
-            Field field = null;
-            Class fieldClass = null;
-            int modifiers = 0;
-            try {
-                field = tclass.getDeclaredField(fieldName);
-                modifiers = field.getModifiers();
-                sun.reflect.misc.ReflectUtil.ensureMemberAccess(
-                    caller, tclass, null, modifiers);
-                sun.reflect.misc.ReflectUtil.checkPackageAccess(tclass);
-                fieldClass = field.getType();
-            } catch (Exception ex) {
-                throw new RuntimeException(ex);
-            }
-
-            if (vclass != fieldClass)
-                throw new ClassCastException();
-
-            if (!Modifier.isVolatile(modifiers))
-                throw new IllegalArgumentException("Must be volatile type");
-
-            this.cclass = (Modifier.isProtected(modifiers) &&
-                           caller != tclass) ? caller : null;
-            this.tclass = tclass;
-            if (vclass == Object.class)
-                this.vclass = null;
-            else
-                this.vclass = vclass;
-            offset = unsafe.objectFieldOffset(field);
-        }
-
-        void targetCheck(T obj) {
-            if (!tclass.isInstance(obj))
-                throw new ClassCastException();
-            if (cclass != null)
-                ensureProtectedAccess(obj);
-        }
-
-        void updateCheck(T obj, V update) {
-            if (!tclass.isInstance(obj) ||
-                (update != null && vclass != null && !vclass.isInstance(update)))
-                throw new ClassCastException();
-            if (cclass != null)
-                ensureProtectedAccess(obj);
-        }
-
-        public boolean compareAndSet(T obj, V expect, V update) {
-            if (obj == null || obj.getClass() != tclass || cclass != null ||
-                (update != null && vclass != null &&
-                 vclass != update.getClass()))
-                updateCheck(obj, update);
-            return unsafe.compareAndSwapObject(obj, offset, expect, update);
-        }
-
-        public boolean weakCompareAndSet(T obj, V expect, V update) {
-            // same implementation as strong form for now
-            if (obj == null || obj.getClass() != tclass || cclass != null ||
-                (update != null && vclass != null &&
-                 vclass != update.getClass()))
-                updateCheck(obj, update);
-            return unsafe.compareAndSwapObject(obj, offset, expect, update);
-        }
-
-        public void set(T obj, V newValue) {
-            if (obj == null || obj.getClass() != tclass || cclass != null ||
-                (newValue != null && vclass != null &&
-                 vclass != newValue.getClass()))
-                updateCheck(obj, newValue);
-            unsafe.putObjectVolatile(obj, offset, newValue);
-        }
-
-        public void lazySet(T obj, V newValue) {
-            if (obj == null || obj.getClass() != tclass || cclass != null ||
-                (newValue != null && vclass != null &&
-                 vclass != newValue.getClass()))
-                updateCheck(obj, newValue);
-            unsafe.putOrderedObject(obj, offset, newValue);
-        }
-
-        public V get(T obj) {
-            if (obj == null || obj.getClass() != tclass || cclass != null)
-                targetCheck(obj);
-            return (V)unsafe.getObjectVolatile(obj, offset);
-        }
-
-        private void ensureProtectedAccess(T obj) {
-            if (cclass.isInstance(obj)) {
-                return;
-            }
-            throw new RuntimeException(
-                new IllegalAccessException("Class " +
-                    cclass.getName() +
-                    " can not access a protected member of class " +
-                    tclass.getName() +
-                    " using an instance of " +
-                    obj.getClass().getName()
-                )
-            );
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicStampedReference.java b/ojluni/src/main/java/java/util/concurrent/atomic/AtomicStampedReference.java
deleted file mode 100755
index 90aa3a0..0000000
--- a/ojluni/src/main/java/java/util/concurrent/atomic/AtomicStampedReference.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.atomic;
-
-/**
- * An {@code AtomicStampedReference} maintains an object reference
- * along with an integer "stamp", that can be updated atomically.
- *
- * <p>Implementation note: This implementation maintains stamped
- * references by creating internal objects representing "boxed"
- * [reference, integer] pairs.
- *
- * @since 1.5
- * @author Doug Lea
- * @param <V> The type of object referred to by this reference
- */
-public class AtomicStampedReference<V> {
-
-    private static class Pair<T> {
-        final T reference;
-        final int stamp;
-        private Pair(T reference, int stamp) {
-            this.reference = reference;
-            this.stamp = stamp;
-        }
-        static <T> Pair<T> of(T reference, int stamp) {
-            return new Pair<T>(reference, stamp);
-        }
-    }
-
-    private volatile Pair<V> pair;
-
-    /**
-     * Creates a new {@code AtomicStampedReference} with the given
-     * initial values.
-     *
-     * @param initialRef the initial reference
-     * @param initialStamp the initial stamp
-     */
-    public AtomicStampedReference(V initialRef, int initialStamp) {
-        pair = Pair.of(initialRef, initialStamp);
-    }
-
-    /**
-     * Returns the current value of the reference.
-     *
-     * @return the current value of the reference
-     */
-    public V getReference() {
-        return pair.reference;
-    }
-
-    /**
-     * Returns the current value of the stamp.
-     *
-     * @return the current value of the stamp
-     */
-    public int getStamp() {
-        return pair.stamp;
-    }
-
-    /**
-     * Returns the current values of both the reference and the stamp.
-     * Typical usage is {@code int[1] holder; ref = v.get(holder); }.
-     *
-     * @param stampHolder an array of size of at least one.  On return,
-     * {@code stampholder[0]} will hold the value of the stamp.
-     * @return the current value of the reference
-     */
-    public V get(int[] stampHolder) {
-        Pair<V> pair = this.pair;
-        stampHolder[0] = pair.stamp;
-        return pair.reference;
-    }
-
-    /**
-     * Atomically sets the value of both the reference and stamp
-     * to the given update values if the
-     * current reference is {@code ==} to the expected reference
-     * and the current stamp is equal to the expected stamp.
-     *
-     * <p>May <a href="package-summary.html#Spurious">fail spuriously</a>
-     * and does not provide ordering guarantees, so is only rarely an
-     * appropriate alternative to {@code compareAndSet}.
-     *
-     * @param expectedReference the expected value of the reference
-     * @param newReference the new value for the reference
-     * @param expectedStamp the expected value of the stamp
-     * @param newStamp the new value for the stamp
-     * @return true if successful
-     */
-    public boolean weakCompareAndSet(V   expectedReference,
-                                     V   newReference,
-                                     int expectedStamp,
-                                     int newStamp) {
-        return compareAndSet(expectedReference, newReference,
-                             expectedStamp, newStamp);
-    }
-
-    /**
-     * Atomically sets the value of both the reference and stamp
-     * to the given update values if the
-     * current reference is {@code ==} to the expected reference
-     * and the current stamp is equal to the expected stamp.
-     *
-     * @param expectedReference the expected value of the reference
-     * @param newReference the new value for the reference
-     * @param expectedStamp the expected value of the stamp
-     * @param newStamp the new value for the stamp
-     * @return true if successful
-     */
-    public boolean compareAndSet(V   expectedReference,
-                                 V   newReference,
-                                 int expectedStamp,
-                                 int newStamp) {
-        Pair<V> current = pair;
-        return
-            expectedReference == current.reference &&
-            expectedStamp == current.stamp &&
-            ((newReference == current.reference &&
-              newStamp == current.stamp) ||
-             casPair(current, Pair.of(newReference, newStamp)));
-    }
-
-
-    /**
-     * Unconditionally sets the value of both the reference and stamp.
-     *
-     * @param newReference the new value for the reference
-     * @param newStamp the new value for the stamp
-     */
-    public void set(V newReference, int newStamp) {
-        Pair<V> current = pair;
-        if (newReference != current.reference || newStamp != current.stamp)
-            this.pair = Pair.of(newReference, newStamp);
-    }
-
-    /**
-     * Atomically sets the value of the stamp to the given update value
-     * if the current reference is {@code ==} to the expected
-     * reference.  Any given invocation of this operation may fail
-     * (return {@code false}) spuriously, but repeated invocation
-     * when the current value holds the expected value and no other
-     * thread is also attempting to set the value will eventually
-     * succeed.
-     *
-     * @param expectedReference the expected value of the reference
-     * @param newStamp the new value for the stamp
-     * @return true if successful
-     */
-    public boolean attemptStamp(V expectedReference, int newStamp) {
-        Pair<V> current = pair;
-        return
-            expectedReference == current.reference &&
-            (newStamp == current.stamp ||
-             casPair(current, Pair.of(expectedReference, newStamp)));
-    }
-
-    // Unsafe mechanics
-
-    private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe();
-    private static final long pairOffset =
-        objectFieldOffset(UNSAFE, "pair", AtomicStampedReference.class);
-
-    private boolean casPair(Pair<V> cmp, Pair<V> val) {
-        return UNSAFE.compareAndSwapObject(this, pairOffset, cmp, val);
-    }
-
-    static long objectFieldOffset(sun.misc.Unsafe UNSAFE,
-                                  String field, Class<?> klazz) {
-        try {
-            return UNSAFE.objectFieldOffset(klazz.getDeclaredField(field));
-        } catch (NoSuchFieldException e) {
-            // Convert Exception to corresponding Error
-            NoSuchFieldError error = new NoSuchFieldError(field);
-            error.initCause(e);
-            throw error;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/atomic/package-info.java b/ojluni/src/main/java/java/util/concurrent/atomic/package-info.java
deleted file mode 100755
index 7c0ba5e..0000000
--- a/ojluni/src/main/java/java/util/concurrent/atomic/package-info.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-/**
- * A small toolkit of classes that support lock-free thread-safe
- * programming on single variables.  In essence, the classes in this
- * package extend the notion of {@code volatile} values, fields, and
- * array elements to those that also provide an atomic conditional update
- * operation of the form:
- *
- * <pre>
- *   boolean compareAndSet(expectedValue, updateValue);
- * </pre>
- *
- * <p>This method (which varies in argument types across different
- * classes) atomically sets a variable to the {@code updateValue} if it
- * currently holds the {@code expectedValue}, reporting {@code true} on
- * success.  The classes in this package also contain methods to get and
- * unconditionally set values, as well as a weaker conditional atomic
- * update operation {@code weakCompareAndSet} described below.
- *
- * <p>The specifications of these methods enable implementations to
- * employ efficient machine-level atomic instructions that are available
- * on contemporary processors.  However on some platforms, support may
- * entail some form of internal locking.  Thus the methods are not
- * strictly guaranteed to be non-blocking --
- * a thread may block transiently before performing the operation.
- *
- * <p>Instances of classes
- * {@link java.util.concurrent.atomic.AtomicBoolean},
- * {@link java.util.concurrent.atomic.AtomicInteger},
- * {@link java.util.concurrent.atomic.AtomicLong}, and
- * {@link java.util.concurrent.atomic.AtomicReference}
- * each provide access and updates to a single variable of the
- * corresponding type.  Each class also provides appropriate utility
- * methods for that type.  For example, classes {@code AtomicLong} and
- * {@code AtomicInteger} provide atomic increment methods.  One
- * application is to generate sequence numbers, as in:
- *
- * <pre>
- * class Sequencer {
- *   private final AtomicLong sequenceNumber
- *     = new AtomicLong(0);
- *   public long next() {
- *     return sequenceNumber.getAndIncrement();
- *   }
- * }
- * </pre>
- *
- * <p>The memory effects for accesses and updates of atomics generally
- * follow the rules for volatiles, as stated in section 17.4 of
- * <cite>The Java&trade; Language Specification</cite>.
- *
- * <ul>
- *
- *   <li> {@code get} has the memory effects of reading a
- * {@code volatile} variable.
- *
- *   <li> {@code set} has the memory effects of writing (assigning) a
- * {@code volatile} variable.
- *
- *   <li> {@code lazySet} has the memory effects of writing (assigning)
- *   a {@code volatile} variable except that it permits reorderings with
- *   subsequent (but not previous) memory actions that do not themselves
- *   impose reordering constraints with ordinary non-{@code volatile}
- *   writes.  Among other usage contexts, {@code lazySet} may apply when
- *   nulling out, for the sake of garbage collection, a reference that is
- *   never accessed again.
- *
- *   <li>{@code weakCompareAndSet} atomically reads and conditionally
- *   writes a variable but does <em>not</em>
- *   create any happens-before orderings, so provides no guarantees
- *   with respect to previous or subsequent reads and writes of any
- *   variables other than the target of the {@code weakCompareAndSet}.
- *
- *   <li> {@code compareAndSet}
- *   and all other read-and-update operations such as {@code getAndIncrement}
- *   have the memory effects of both reading and
- *   writing {@code volatile} variables.
- * </ul>
- *
- * <p>In addition to classes representing single values, this package
- * contains <em>Updater</em> classes that can be used to obtain
- * {@code compareAndSet} operations on any selected {@code volatile}
- * field of any selected class.
- *
- * {@link java.util.concurrent.atomic.AtomicReferenceFieldUpdater},
- * {@link java.util.concurrent.atomic.AtomicIntegerFieldUpdater}, and
- * {@link java.util.concurrent.atomic.AtomicLongFieldUpdater} are
- * reflection-based utilities that provide access to the associated
- * field types.  These are mainly of use in atomic data structures in
- * which several {@code volatile} fields of the same node (for
- * example, the links of a tree node) are independently subject to
- * atomic updates.  These classes enable greater flexibility in how
- * and when to use atomic updates, at the expense of more awkward
- * reflection-based setup, less convenient usage, and weaker
- * guarantees.
- *
- * <p>The
- * {@link java.util.concurrent.atomic.AtomicIntegerArray},
- * {@link java.util.concurrent.atomic.AtomicLongArray}, and
- * {@link java.util.concurrent.atomic.AtomicReferenceArray} classes
- * further extend atomic operation support to arrays of these types.
- * These classes are also notable in providing {@code volatile} access
- * semantics for their array elements, which is not supported for
- * ordinary arrays.
- *
- * <a name="Spurious">
- * <p>The atomic classes also support method {@code weakCompareAndSet},
- * which has limited applicability.  On some platforms, the weak version
- * may be more efficient than {@code compareAndSet} in the normal case,
- * but differs in that any given invocation of the
- * {@code weakCompareAndSet} method may return {@code false}
- * <em>spuriously</em> (that is, for no apparent reason)</a>.  A
- * {@code false} return means only that the operation may be retried if
- * desired, relying on the guarantee that repeated invocation when the
- * variable holds {@code expectedValue} and no other thread is also
- * attempting to set the variable will eventually succeed.  (Such
- * spurious failures may for example be due to memory contention effects
- * that are unrelated to whether the expected and current values are
- * equal.)  Additionally {@code weakCompareAndSet} does not provide
- * ordering guarantees that are usually needed for synchronization
- * control.  However, the method may be useful for updating counters and
- * statistics when such updates are unrelated to the other
- * happens-before orderings of a program.  When a thread sees an update
- * to an atomic variable caused by a {@code weakCompareAndSet}, it does
- * not necessarily see updates to any <em>other</em> variables that
- * occurred before the {@code weakCompareAndSet}.  This may be
- * acceptable when, for example, updating performance statistics, but
- * rarely otherwise.
- *
- * <p>The {@link java.util.concurrent.atomic.AtomicMarkableReference}
- * class associates a single boolean with a reference.  For example, this
- * bit might be used inside a data structure to mean that the object
- * being referenced has logically been deleted.
- *
- * The {@link java.util.concurrent.atomic.AtomicStampedReference}
- * class associates an integer value with a reference.  This may be
- * used for example, to represent version numbers corresponding to
- * series of updates.
- *
- * <p>Atomic classes are designed primarily as building blocks for
- * implementing non-blocking data structures and related infrastructure
- * classes.  The {@code compareAndSet} method is not a general
- * replacement for locking.  It applies only when critical updates for an
- * object are confined to a <em>single</em> variable.
- *
- * <p>Atomic classes are not general purpose replacements for
- * {@code java.lang.Integer} and related classes.  They do <em>not</em>
- * define methods such as {@code hashCode} and
- * {@code compareTo}.  (Because atomic variables are expected to be
- * mutated, they are poor choices for hash table keys.)  Additionally,
- * classes are provided only for those types that are commonly useful in
- * intended applications.  For example, there is no atomic class for
- * representing {@code byte}.  In those infrequent cases where you would
- * like to do so, you can use an {@code AtomicInteger} to hold
- * {@code byte} values, and cast appropriately.
- *
- * You can also hold floats using
- * {@link java.lang.Float#floatToIntBits} and
- * {@link java.lang.Float#intBitsToFloat} conversions, and doubles using
- * {@link java.lang.Double#doubleToLongBits} and
- * {@link java.lang.Double#longBitsToDouble} conversions.
- *
- * @since 1.5
- */
-package java.util.concurrent.atomic;
diff --git a/ojluni/src/main/java/java/util/concurrent/locks/AbstractOwnableSynchronizer.java b/ojluni/src/main/java/java/util/concurrent/locks/AbstractOwnableSynchronizer.java
deleted file mode 100755
index 39a51e5..0000000
--- a/ojluni/src/main/java/java/util/concurrent/locks/AbstractOwnableSynchronizer.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.locks;
-
-/**
- * A synchronizer that may be exclusively owned by a thread.  This
- * class provides a basis for creating locks and related synchronizers
- * that may entail a notion of ownership.  The
- * <tt>AbstractOwnableSynchronizer</tt> class itself does not manage or
- * use this information. However, subclasses and tools may use
- * appropriately maintained values to help control and monitor access
- * and provide diagnostics.
- *
- * @since 1.6
- * @author Doug Lea
- */
-public abstract class AbstractOwnableSynchronizer
-    implements java.io.Serializable {
-
-    /** Use serial ID even though all fields transient. */
-    private static final long serialVersionUID = 3737899427754241961L;
-
-    /**
-     * Empty constructor for use by subclasses.
-     */
-    protected AbstractOwnableSynchronizer() { }
-
-    /**
-     * The current owner of exclusive mode synchronization.
-     */
-    private transient Thread exclusiveOwnerThread;
-
-    /**
-     * Sets the thread that currently owns exclusive access. A
-     * <tt>null</tt> argument indicates that no thread owns access.
-     * This method does not otherwise impose any synchronization or
-     * <tt>volatile</tt> field accesses.
-     */
-    protected final void setExclusiveOwnerThread(Thread t) {
-        exclusiveOwnerThread = t;
-    }
-
-    /**
-     * Returns the thread last set by
-     * <tt>setExclusiveOwnerThread</tt>, or <tt>null</tt> if never
-     * set.  This method does not otherwise impose any synchronization
-     * or <tt>volatile</tt> field accesses.
-     * @return the owner thread
-     */
-    protected final Thread getExclusiveOwnerThread() {
-        return exclusiveOwnerThread;
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java b/ojluni/src/main/java/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java
deleted file mode 100755
index 15490bd..0000000
--- a/ojluni/src/main/java/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java
+++ /dev/null
@@ -1,2109 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.locks;
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.concurrent.atomic.*;
-import sun.misc.Unsafe;
-
-/**
- * A version of {@link AbstractQueuedSynchronizer} in
- * which synchronization state is maintained as a <tt>long</tt>.
- * This class has exactly the same structure, properties, and methods
- * as <tt>AbstractQueuedSynchronizer</tt> with the exception
- * that all state-related parameters and results are defined
- * as <tt>long</tt> rather than <tt>int</tt>. This class
- * may be useful when creating synchronizers such as
- * multilevel locks and barriers that require
- * 64 bits of state.
- *
- * <p>See {@link AbstractQueuedSynchronizer} for usage
- * notes and examples.
- *
- * @since 1.6
- * @author Doug Lea
- */
-public abstract class AbstractQueuedLongSynchronizer
-    extends AbstractOwnableSynchronizer
-    implements java.io.Serializable {
-
-    private static final long serialVersionUID = 7373984972572414692L;
-
-    /*
-      To keep sources in sync, the remainder of this source file is
-      exactly cloned from AbstractQueuedSynchronizer, replacing class
-      name and changing ints related with sync state to longs. Please
-      keep it that way.
-    */
-
-    /**
-     * Creates a new <tt>AbstractQueuedLongSynchronizer</tt> instance
-     * with initial synchronization state of zero.
-     */
-    protected AbstractQueuedLongSynchronizer() { }
-
-    /**
-     * Wait queue node class.
-     *
-     * <p>The wait queue is a variant of a "CLH" (Craig, Landin, and
-     * Hagersten) lock queue. CLH locks are normally used for
-     * spinlocks.  We instead use them for blocking synchronizers, but
-     * use the same basic tactic of holding some of the control
-     * information about a thread in the predecessor of its node.  A
-     * "status" field in each node keeps track of whether a thread
-     * should block.  A node is signalled when its predecessor
-     * releases.  Each node of the queue otherwise serves as a
-     * specific-notification-style monitor holding a single waiting
-     * thread. The status field does NOT control whether threads are
-     * granted locks etc though.  A thread may try to acquire if it is
-     * first in the queue. But being first does not guarantee success;
-     * it only gives the right to contend.  So the currently released
-     * contender thread may need to rewait.
-     *
-     * <p>To enqueue into a CLH lock, you atomically splice it in as new
-     * tail. To dequeue, you just set the head field.
-     * <pre>
-     *      +------+  prev +-----+       +-----+
-     * head |      | <---- |     | <---- |     |  tail
-     *      +------+       +-----+       +-----+
-     * </pre>
-     *
-     * <p>Insertion into a CLH queue requires only a single atomic
-     * operation on "tail", so there is a simple atomic point of
-     * demarcation from unqueued to queued. Similarly, dequeing
-     * involves only updating the "head". However, it takes a bit
-     * more work for nodes to determine who their successors are,
-     * in part to deal with possible cancellation due to timeouts
-     * and interrupts.
-     *
-     * <p>The "prev" links (not used in original CLH locks), are mainly
-     * needed to handle cancellation. If a node is cancelled, its
-     * successor is (normally) relinked to a non-cancelled
-     * predecessor. For explanation of similar mechanics in the case
-     * of spin locks, see the papers by Scott and Scherer at
-     * http://www.cs.rochester.edu/u/scott/synchronization/
-     *
-     * <p>We also use "next" links to implement blocking mechanics.
-     * The thread id for each node is kept in its own node, so a
-     * predecessor signals the next node to wake up by traversing
-     * next link to determine which thread it is.  Determination of
-     * successor must avoid races with newly queued nodes to set
-     * the "next" fields of their predecessors.  This is solved
-     * when necessary by checking backwards from the atomically
-     * updated "tail" when a node's successor appears to be null.
-     * (Or, said differently, the next-links are an optimization
-     * so that we don't usually need a backward scan.)
-     *
-     * <p>Cancellation introduces some conservatism to the basic
-     * algorithms.  Since we must poll for cancellation of other
-     * nodes, we can miss noticing whether a cancelled node is
-     * ahead or behind us. This is dealt with by always unparking
-     * successors upon cancellation, allowing them to stabilize on
-     * a new predecessor, unless we can identify an uncancelled
-     * predecessor who will carry this responsibility.
-     *
-     * <p>CLH queues need a dummy header node to get started. But
-     * we don't create them on construction, because it would be wasted
-     * effort if there is never contention. Instead, the node
-     * is constructed and head and tail pointers are set upon first
-     * contention.
-     *
-     * <p>Threads waiting on Conditions use the same nodes, but
-     * use an additional link. Conditions only need to link nodes
-     * in simple (non-concurrent) linked queues because they are
-     * only accessed when exclusively held.  Upon await, a node is
-     * inserted into a condition queue.  Upon signal, the node is
-     * transferred to the main queue.  A special value of status
-     * field is used to mark which queue a node is on.
-     *
-     * <p>Thanks go to Dave Dice, Mark Moir, Victor Luchangco, Bill
-     * Scherer and Michael Scott, along with members of JSR-166
-     * expert group, for helpful ideas, discussions, and critiques
-     * on the design of this class.
-     */
-    static final class Node {
-        /** Marker to indicate a node is waiting in shared mode */
-        static final Node SHARED = new Node();
-        /** Marker to indicate a node is waiting in exclusive mode */
-        static final Node EXCLUSIVE = null;
-
-        /** waitStatus value to indicate thread has cancelled */
-        static final int CANCELLED =  1;
-        /** waitStatus value to indicate successor's thread needs unparking */
-        static final int SIGNAL    = -1;
-        /** waitStatus value to indicate thread is waiting on condition */
-        static final int CONDITION = -2;
-        /**
-         * waitStatus value to indicate the next acquireShared should
-         * unconditionally propagate
-         */
-        static final int PROPAGATE = -3;
-
-        /**
-         * Status field, taking on only the values:
-         *   SIGNAL:     The successor of this node is (or will soon be)
-         *               blocked (via park), so the current node must
-         *               unpark its successor when it releases or
-         *               cancels. To avoid races, acquire methods must
-         *               first indicate they need a signal,
-         *               then retry the atomic acquire, and then,
-         *               on failure, block.
-         *   CANCELLED:  This node is cancelled due to timeout or interrupt.
-         *               Nodes never leave this state. In particular,
-         *               a thread with cancelled node never again blocks.
-         *   CONDITION:  This node is currently on a condition queue.
-         *               It will not be used as a sync queue node
-         *               until transferred, at which time the status
-         *               will be set to 0. (Use of this value here has
-         *               nothing to do with the other uses of the
-         *               field, but simplifies mechanics.)
-         *   PROPAGATE:  A releaseShared should be propagated to other
-         *               nodes. This is set (for head node only) in
-         *               doReleaseShared to ensure propagation
-         *               continues, even if other operations have
-         *               since intervened.
-         *   0:          None of the above
-         *
-         * The values are arranged numerically to simplify use.
-         * Non-negative values mean that a node doesn't need to
-         * signal. So, most code doesn't need to check for particular
-         * values, just for sign.
-         *
-         * The field is initialized to 0 for normal sync nodes, and
-         * CONDITION for condition nodes.  It is modified using CAS
-         * (or when possible, unconditional volatile writes).
-         */
-        volatile int waitStatus;
-
-        /**
-         * Link to predecessor node that current node/thread relies on
-         * for checking waitStatus. Assigned during enqueing, and nulled
-         * out (for sake of GC) only upon dequeuing.  Also, upon
-         * cancellation of a predecessor, we short-circuit while
-         * finding a non-cancelled one, which will always exist
-         * because the head node is never cancelled: A node becomes
-         * head only as a result of successful acquire. A
-         * cancelled thread never succeeds in acquiring, and a thread only
-         * cancels itself, not any other node.
-         */
-        volatile Node prev;
-
-        /**
-         * Link to the successor node that the current node/thread
-         * unparks upon release. Assigned during enqueuing, adjusted
-         * when bypassing cancelled predecessors, and nulled out (for
-         * sake of GC) when dequeued.  The enq operation does not
-         * assign next field of a predecessor until after attachment,
-         * so seeing a null next field does not necessarily mean that
-         * node is at end of queue. However, if a next field appears
-         * to be null, we can scan prev's from the tail to
-         * double-check.  The next field of cancelled nodes is set to
-         * point to the node itself instead of null, to make life
-         * easier for isOnSyncQueue.
-         */
-        volatile Node next;
-
-        /**
-         * The thread that enqueued this node.  Initialized on
-         * construction and nulled out after use.
-         */
-        volatile Thread thread;
-
-        /**
-         * Link to next node waiting on condition, or the special
-         * value SHARED.  Because condition queues are accessed only
-         * when holding in exclusive mode, we just need a simple
-         * linked queue to hold nodes while they are waiting on
-         * conditions. They are then transferred to the queue to
-         * re-acquire. And because conditions can only be exclusive,
-         * we save a field by using special value to indicate shared
-         * mode.
-         */
-        Node nextWaiter;
-
-        /**
-         * Returns true if node is waiting in shared mode
-         */
-        final boolean isShared() {
-            return nextWaiter == SHARED;
-        }
-
-        /**
-         * Returns previous node, or throws NullPointerException if null.
-         * Use when predecessor cannot be null.  The null check could
-         * be elided, but is present to help the VM.
-         *
-         * @return the predecessor of this node
-         */
-        final Node predecessor() throws NullPointerException {
-            Node p = prev;
-            if (p == null)
-                throw new NullPointerException();
-            else
-                return p;
-        }
-
-        Node() {    // Used to establish initial head or SHARED marker
-        }
-
-        Node(Thread thread, Node mode) {     // Used by addWaiter
-            this.nextWaiter = mode;
-            this.thread = thread;
-        }
-
-        Node(Thread thread, int waitStatus) { // Used by Condition
-            this.waitStatus = waitStatus;
-            this.thread = thread;
-        }
-    }
-
-    /**
-     * Head of the wait queue, lazily initialized.  Except for
-     * initialization, it is modified only via method setHead.  Note:
-     * If head exists, its waitStatus is guaranteed not to be
-     * CANCELLED.
-     */
-    private transient volatile Node head;
-
-    /**
-     * Tail of the wait queue, lazily initialized.  Modified only via
-     * method enq to add new wait node.
-     */
-    private transient volatile Node tail;
-
-    /**
-     * The synchronization state.
-     */
-    private volatile long state;
-
-    /**
-     * Returns the current value of synchronization state.
-     * This operation has memory semantics of a <tt>volatile</tt> read.
-     * @return current state value
-     */
-    protected final long getState() {
-        return state;
-    }
-
-    /**
-     * Sets the value of synchronization state.
-     * This operation has memory semantics of a <tt>volatile</tt> write.
-     * @param newState the new state value
-     */
-    protected final void setState(long newState) {
-        state = newState;
-    }
-
-    /**
-     * Atomically sets synchronization state to the given updated
-     * value if the current state value equals the expected value.
-     * This operation has memory semantics of a <tt>volatile</tt> read
-     * and write.
-     *
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful. False return indicates that the actual
-     *         value was not equal to the expected value.
-     */
-    protected final boolean compareAndSetState(long expect, long update) {
-        // See below for intrinsics setup to support this
-        return unsafe.compareAndSwapLong(this, stateOffset, expect, update);
-    }
-
-    // Queuing utilities
-
-    /**
-     * The number of nanoseconds for which it is faster to spin
-     * rather than to use timed park. A rough estimate suffices
-     * to improve responsiveness with very short timeouts.
-     */
-    static final long spinForTimeoutThreshold = 1000L;
-
-    /**
-     * Inserts node into queue, initializing if necessary. See picture above.
-     * @param node the node to insert
-     * @return node's predecessor
-     */
-    private Node enq(final Node node) {
-        for (;;) {
-            Node t = tail;
-            if (t == null) { // Must initialize
-                if (compareAndSetHead(new Node()))
-                    tail = head;
-            } else {
-                node.prev = t;
-                if (compareAndSetTail(t, node)) {
-                    t.next = node;
-                    return t;
-                }
-            }
-        }
-    }
-
-    /**
-     * Creates and enqueues node for current thread and given mode.
-     *
-     * @param mode Node.EXCLUSIVE for exclusive, Node.SHARED for shared
-     * @return the new node
-     */
-    private Node addWaiter(Node mode) {
-        Node node = new Node(Thread.currentThread(), mode);
-        // Try the fast path of enq; backup to full enq on failure
-        Node pred = tail;
-        if (pred != null) {
-            node.prev = pred;
-            if (compareAndSetTail(pred, node)) {
-                pred.next = node;
-                return node;
-            }
-        }
-        enq(node);
-        return node;
-    }
-
-    /**
-     * Sets head of queue to be node, thus dequeuing. Called only by
-     * acquire methods.  Also nulls out unused fields for sake of GC
-     * and to suppress unnecessary signals and traversals.
-     *
-     * @param node the node
-     */
-    private void setHead(Node node) {
-        head = node;
-        node.thread = null;
-        node.prev = null;
-    }
-
-    /**
-     * Wakes up node's successor, if one exists.
-     *
-     * @param node the node
-     */
-    private void unparkSuccessor(Node node) {
-        /*
-         * If status is negative (i.e., possibly needing signal) try
-         * to clear in anticipation of signalling.  It is OK if this
-         * fails or if status is changed by waiting thread.
-         */
-        int ws = node.waitStatus;
-        if (ws < 0)
-            compareAndSetWaitStatus(node, ws, 0);
-
-        /*
-         * Thread to unpark is held in successor, which is normally
-         * just the next node.  But if cancelled or apparently null,
-         * traverse backwards from tail to find the actual
-         * non-cancelled successor.
-         */
-        Node s = node.next;
-        if (s == null || s.waitStatus > 0) {
-            s = null;
-            for (Node t = tail; t != null && t != node; t = t.prev)
-                if (t.waitStatus <= 0)
-                    s = t;
-        }
-        if (s != null)
-            LockSupport.unpark(s.thread);
-    }
-
-    /**
-     * Release action for shared mode -- signal successor and ensure
-     * propagation. (Note: For exclusive mode, release just amounts
-     * to calling unparkSuccessor of head if it needs signal.)
-     */
-    private void doReleaseShared() {
-        /*
-         * Ensure that a release propagates, even if there are other
-         * in-progress acquires/releases.  This proceeds in the usual
-         * way of trying to unparkSuccessor of head if it needs
-         * signal. But if it does not, status is set to PROPAGATE to
-         * ensure that upon release, propagation continues.
-         * Additionally, we must loop in case a new node is added
-         * while we are doing this. Also, unlike other uses of
-         * unparkSuccessor, we need to know if CAS to reset status
-         * fails, if so rechecking.
-         */
-        for (;;) {
-            Node h = head;
-            if (h != null && h != tail) {
-                int ws = h.waitStatus;
-                if (ws == Node.SIGNAL) {
-                    if (!compareAndSetWaitStatus(h, Node.SIGNAL, 0))
-                        continue;            // loop to recheck cases
-                    unparkSuccessor(h);
-                }
-                else if (ws == 0 &&
-                         !compareAndSetWaitStatus(h, 0, Node.PROPAGATE))
-                    continue;                // loop on failed CAS
-            }
-            if (h == head)                   // loop if head changed
-                break;
-        }
-    }
-
-    /**
-     * Sets head of queue, and checks if successor may be waiting
-     * in shared mode, if so propagating if either propagate > 0 or
-     * PROPAGATE status was set.
-     *
-     * @param node the node
-     * @param propagate the return value from a tryAcquireShared
-     */
-    private void setHeadAndPropagate(Node node, long propagate) {
-        Node h = head; // Record old head for check below
-        setHead(node);
-        /*
-         * Try to signal next queued node if:
-         *   Propagation was indicated by caller,
-         *     or was recorded (as h.waitStatus) by a previous operation
-         *     (note: this uses sign-check of waitStatus because
-         *      PROPAGATE status may transition to SIGNAL.)
-         * and
-         *   The next node is waiting in shared mode,
-         *     or we don't know, because it appears null
-         *
-         * The conservatism in both of these checks may cause
-         * unnecessary wake-ups, but only when there are multiple
-         * racing acquires/releases, so most need signals now or soon
-         * anyway.
-         */
-        if (propagate > 0 || h == null || h.waitStatus < 0) {
-            Node s = node.next;
-            if (s == null || s.isShared())
-                doReleaseShared();
-        }
-    }
-
-    // Utilities for various versions of acquire
-
-    /**
-     * Cancels an ongoing attempt to acquire.
-     *
-     * @param node the node
-     */
-    private void cancelAcquire(Node node) {
-        // Ignore if node doesn't exist
-        if (node == null)
-            return;
-
-        node.thread = null;
-
-        // Skip cancelled predecessors
-        Node pred = node.prev;
-        while (pred.waitStatus > 0)
-            node.prev = pred = pred.prev;
-
-        // predNext is the apparent node to unsplice. CASes below will
-        // fail if not, in which case, we lost race vs another cancel
-        // or signal, so no further action is necessary.
-        Node predNext = pred.next;
-
-        // Can use unconditional write instead of CAS here.
-        // After this atomic step, other Nodes can skip past us.
-        // Before, we are free of interference from other threads.
-        node.waitStatus = Node.CANCELLED;
-
-        // If we are the tail, remove ourselves.
-        if (node == tail && compareAndSetTail(node, pred)) {
-            compareAndSetNext(pred, predNext, null);
-        } else {
-            // If successor needs signal, try to set pred's next-link
-            // so it will get one. Otherwise wake it up to propagate.
-            int ws;
-            if (pred != head &&
-                ((ws = pred.waitStatus) == Node.SIGNAL ||
-                 (ws <= 0 && compareAndSetWaitStatus(pred, ws, Node.SIGNAL))) &&
-                pred.thread != null) {
-                Node next = node.next;
-                if (next != null && next.waitStatus <= 0)
-                    compareAndSetNext(pred, predNext, next);
-            } else {
-                unparkSuccessor(node);
-            }
-
-            node.next = node; // help GC
-        }
-    }
-
-    /**
-     * Checks and updates status for a node that failed to acquire.
-     * Returns true if thread should block. This is the main signal
-     * control in all acquire loops.  Requires that pred == node.prev
-     *
-     * @param pred node's predecessor holding status
-     * @param node the node
-     * @return {@code true} if thread should block
-     */
-    private static boolean shouldParkAfterFailedAcquire(Node pred, Node node) {
-        int ws = pred.waitStatus;
-        if (ws == Node.SIGNAL)
-            /*
-             * This node has already set status asking a release
-             * to signal it, so it can safely park.
-             */
-            return true;
-        if (ws > 0) {
-            /*
-             * Predecessor was cancelled. Skip over predecessors and
-             * indicate retry.
-             */
-            do {
-                node.prev = pred = pred.prev;
-            } while (pred.waitStatus > 0);
-            pred.next = node;
-        } else {
-            /*
-             * waitStatus must be 0 or PROPAGATE.  Indicate that we
-             * need a signal, but don't park yet.  Caller will need to
-             * retry to make sure it cannot acquire before parking.
-             */
-            compareAndSetWaitStatus(pred, ws, Node.SIGNAL);
-        }
-        return false;
-    }
-
-    /**
-     * Convenience method to interrupt current thread.
-     */
-    private static void selfInterrupt() {
-        Thread.currentThread().interrupt();
-    }
-
-    /**
-     * Convenience method to park and then check if interrupted
-     *
-     * @return {@code true} if interrupted
-     */
-    private final boolean parkAndCheckInterrupt() {
-        LockSupport.park(this);
-        return Thread.interrupted();
-    }
-
-    /*
-     * Various flavors of acquire, varying in exclusive/shared and
-     * control modes.  Each is mostly the same, but annoyingly
-     * different.  Only a little bit of factoring is possible due to
-     * interactions of exception mechanics (including ensuring that we
-     * cancel if tryAcquire throws exception) and other control, at
-     * least not without hurting performance too much.
-     */
-
-    /**
-     * Acquires in exclusive uninterruptible mode for thread already in
-     * queue. Used by condition wait methods as well as acquire.
-     *
-     * @param node the node
-     * @param arg the acquire argument
-     * @return {@code true} if interrupted while waiting
-     */
-    final boolean acquireQueued(final Node node, long arg) {
-        boolean failed = true;
-        try {
-            boolean interrupted = false;
-            for (;;) {
-                final Node p = node.predecessor();
-                if (p == head && tryAcquire(arg)) {
-                    setHead(node);
-                    p.next = null; // help GC
-                    failed = false;
-                    return interrupted;
-                }
-                if (shouldParkAfterFailedAcquire(p, node) &&
-                    parkAndCheckInterrupt())
-                    interrupted = true;
-            }
-        } finally {
-            if (failed)
-                cancelAcquire(node);
-        }
-    }
-
-    /**
-     * Acquires in exclusive interruptible mode.
-     * @param arg the acquire argument
-     */
-    private void doAcquireInterruptibly(long arg)
-        throws InterruptedException {
-        final Node node = addWaiter(Node.EXCLUSIVE);
-        boolean failed = true;
-        try {
-            for (;;) {
-                final Node p = node.predecessor();
-                if (p == head && tryAcquire(arg)) {
-                    setHead(node);
-                    p.next = null; // help GC
-                    failed = false;
-                    return;
-                }
-                if (shouldParkAfterFailedAcquire(p, node) &&
-                    parkAndCheckInterrupt())
-                    throw new InterruptedException();
-            }
-        } finally {
-            if (failed)
-                cancelAcquire(node);
-        }
-    }
-
-    /**
-     * Acquires in exclusive timed mode.
-     *
-     * @param arg the acquire argument
-     * @param nanosTimeout max wait time
-     * @return {@code true} if acquired
-     */
-    private boolean doAcquireNanos(long arg, long nanosTimeout)
-        throws InterruptedException {
-        long lastTime = System.nanoTime();
-        final Node node = addWaiter(Node.EXCLUSIVE);
-        boolean failed = true;
-        try {
-            for (;;) {
-                final Node p = node.predecessor();
-                if (p == head && tryAcquire(arg)) {
-                    setHead(node);
-                    p.next = null; // help GC
-                    failed = false;
-                    return true;
-                }
-                if (nanosTimeout <= 0)
-                    return false;
-                if (shouldParkAfterFailedAcquire(p, node) &&
-                    nanosTimeout > spinForTimeoutThreshold)
-                    LockSupport.parkNanos(this, nanosTimeout);
-                long now = System.nanoTime();
-                nanosTimeout -= now - lastTime;
-                lastTime = now;
-                if (Thread.interrupted())
-                    throw new InterruptedException();
-            }
-        } finally {
-            if (failed)
-                cancelAcquire(node);
-        }
-    }
-
-    /**
-     * Acquires in shared uninterruptible mode.
-     * @param arg the acquire argument
-     */
-    private void doAcquireShared(long arg) {
-        final Node node = addWaiter(Node.SHARED);
-        boolean failed = true;
-        try {
-            boolean interrupted = false;
-            for (;;) {
-                final Node p = node.predecessor();
-                if (p == head) {
-                    long r = tryAcquireShared(arg);
-                    if (r >= 0) {
-                        setHeadAndPropagate(node, r);
-                        p.next = null; // help GC
-                        if (interrupted)
-                            selfInterrupt();
-                        failed = false;
-                        return;
-                    }
-                }
-                if (shouldParkAfterFailedAcquire(p, node) &&
-                    parkAndCheckInterrupt())
-                    interrupted = true;
-            }
-        } finally {
-            if (failed)
-                cancelAcquire(node);
-        }
-    }
-
-    /**
-     * Acquires in shared interruptible mode.
-     * @param arg the acquire argument
-     */
-    private void doAcquireSharedInterruptibly(long arg)
-        throws InterruptedException {
-        final Node node = addWaiter(Node.SHARED);
-        boolean failed = true;
-        try {
-            for (;;) {
-                final Node p = node.predecessor();
-                if (p == head) {
-                    long r = tryAcquireShared(arg);
-                    if (r >= 0) {
-                        setHeadAndPropagate(node, r);
-                        p.next = null; // help GC
-                        failed = false;
-                        return;
-                    }
-                }
-                if (shouldParkAfterFailedAcquire(p, node) &&
-                    parkAndCheckInterrupt())
-                    throw new InterruptedException();
-            }
-        } finally {
-            if (failed)
-                cancelAcquire(node);
-        }
-    }
-
-    /**
-     * Acquires in shared timed mode.
-     *
-     * @param arg the acquire argument
-     * @param nanosTimeout max wait time
-     * @return {@code true} if acquired
-     */
-    private boolean doAcquireSharedNanos(long arg, long nanosTimeout)
-        throws InterruptedException {
-
-        long lastTime = System.nanoTime();
-        final Node node = addWaiter(Node.SHARED);
-        boolean failed = true;
-        try {
-            for (;;) {
-                final Node p = node.predecessor();
-                if (p == head) {
-                    long r = tryAcquireShared(arg);
-                    if (r >= 0) {
-                        setHeadAndPropagate(node, r);
-                        p.next = null; // help GC
-                        failed = false;
-                        return true;
-                    }
-                }
-                if (nanosTimeout <= 0)
-                    return false;
-                if (shouldParkAfterFailedAcquire(p, node) &&
-                    nanosTimeout > spinForTimeoutThreshold)
-                    LockSupport.parkNanos(this, nanosTimeout);
-                long now = System.nanoTime();
-                nanosTimeout -= now - lastTime;
-                lastTime = now;
-                if (Thread.interrupted())
-                    throw new InterruptedException();
-            }
-        } finally {
-            if (failed)
-                cancelAcquire(node);
-        }
-    }
-
-    // Main exported methods
-
-    /**
-     * Attempts to acquire in exclusive mode. This method should query
-     * if the state of the object permits it to be acquired in the
-     * exclusive mode, and if so to acquire it.
-     *
-     * <p>This method is always invoked by the thread performing
-     * acquire.  If this method reports failure, the acquire method
-     * may queue the thread, if it is not already queued, until it is
-     * signalled by a release from some other thread. This can be used
-     * to implement method {@link Lock#tryLock()}.
-     *
-     * <p>The default
-     * implementation throws {@link UnsupportedOperationException}.
-     *
-     * @param arg the acquire argument. This value is always the one
-     *        passed to an acquire method, or is the value saved on entry
-     *        to a condition wait.  The value is otherwise uninterpreted
-     *        and can represent anything you like.
-     * @return {@code true} if successful. Upon success, this object has
-     *         been acquired.
-     * @throws IllegalMonitorStateException if acquiring would place this
-     *         synchronizer in an illegal state. This exception must be
-     *         thrown in a consistent fashion for synchronization to work
-     *         correctly.
-     * @throws UnsupportedOperationException if exclusive mode is not supported
-     */
-    protected boolean tryAcquire(long arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Attempts to set the state to reflect a release in exclusive
-     * mode.
-     *
-     * <p>This method is always invoked by the thread performing release.
-     *
-     * <p>The default implementation throws
-     * {@link UnsupportedOperationException}.
-     *
-     * @param arg the release argument. This value is always the one
-     *        passed to a release method, or the current state value upon
-     *        entry to a condition wait.  The value is otherwise
-     *        uninterpreted and can represent anything you like.
-     * @return {@code true} if this object is now in a fully released
-     *         state, so that any waiting threads may attempt to acquire;
-     *         and {@code false} otherwise.
-     * @throws IllegalMonitorStateException if releasing would place this
-     *         synchronizer in an illegal state. This exception must be
-     *         thrown in a consistent fashion for synchronization to work
-     *         correctly.
-     * @throws UnsupportedOperationException if exclusive mode is not supported
-     */
-    protected boolean tryRelease(long arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Attempts to acquire in shared mode. This method should query if
-     * the state of the object permits it to be acquired in the shared
-     * mode, and if so to acquire it.
-     *
-     * <p>This method is always invoked by the thread performing
-     * acquire.  If this method reports failure, the acquire method
-     * may queue the thread, if it is not already queued, until it is
-     * signalled by a release from some other thread.
-     *
-     * <p>The default implementation throws {@link
-     * UnsupportedOperationException}.
-     *
-     * @param arg the acquire argument. This value is always the one
-     *        passed to an acquire method, or is the value saved on entry
-     *        to a condition wait.  The value is otherwise uninterpreted
-     *        and can represent anything you like.
-     * @return a negative value on failure; zero if acquisition in shared
-     *         mode succeeded but no subsequent shared-mode acquire can
-     *         succeed; and a positive value if acquisition in shared
-     *         mode succeeded and subsequent shared-mode acquires might
-     *         also succeed, in which case a subsequent waiting thread
-     *         must check availability. (Support for three different
-     *         return values enables this method to be used in contexts
-     *         where acquires only sometimes act exclusively.)  Upon
-     *         success, this object has been acquired.
-     * @throws IllegalMonitorStateException if acquiring would place this
-     *         synchronizer in an illegal state. This exception must be
-     *         thrown in a consistent fashion for synchronization to work
-     *         correctly.
-     * @throws UnsupportedOperationException if shared mode is not supported
-     */
-    protected long tryAcquireShared(long arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Attempts to set the state to reflect a release in shared mode.
-     *
-     * <p>This method is always invoked by the thread performing release.
-     *
-     * <p>The default implementation throws
-     * {@link UnsupportedOperationException}.
-     *
-     * @param arg the release argument. This value is always the one
-     *        passed to a release method, or the current state value upon
-     *        entry to a condition wait.  The value is otherwise
-     *        uninterpreted and can represent anything you like.
-     * @return {@code true} if this release of shared mode may permit a
-     *         waiting acquire (shared or exclusive) to succeed; and
-     *         {@code false} otherwise
-     * @throws IllegalMonitorStateException if releasing would place this
-     *         synchronizer in an illegal state. This exception must be
-     *         thrown in a consistent fashion for synchronization to work
-     *         correctly.
-     * @throws UnsupportedOperationException if shared mode is not supported
-     */
-    protected boolean tryReleaseShared(long arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns {@code true} if synchronization is held exclusively with
-     * respect to the current (calling) thread.  This method is invoked
-     * upon each call to a non-waiting {@link ConditionObject} method.
-     * (Waiting methods instead invoke {@link #release}.)
-     *
-     * <p>The default implementation throws {@link
-     * UnsupportedOperationException}. This method is invoked
-     * internally only within {@link ConditionObject} methods, so need
-     * not be defined if conditions are not used.
-     *
-     * @return {@code true} if synchronization is held exclusively;
-     *         {@code false} otherwise
-     * @throws UnsupportedOperationException if conditions are not supported
-     */
-    protected boolean isHeldExclusively() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Acquires in exclusive mode, ignoring interrupts.  Implemented
-     * by invoking at least once {@link #tryAcquire},
-     * returning on success.  Otherwise the thread is queued, possibly
-     * repeatedly blocking and unblocking, invoking {@link
-     * #tryAcquire} until success.  This method can be used
-     * to implement method {@link Lock#lock}.
-     *
-     * @param arg the acquire argument.  This value is conveyed to
-     *        {@link #tryAcquire} but is otherwise uninterpreted and
-     *        can represent anything you like.
-     */
-    public final void acquire(long arg) {
-        if (!tryAcquire(arg) &&
-            acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
-            selfInterrupt();
-    }
-
-    /**
-     * Acquires in exclusive mode, aborting if interrupted.
-     * Implemented by first checking interrupt status, then invoking
-     * at least once {@link #tryAcquire}, returning on
-     * success.  Otherwise the thread is queued, possibly repeatedly
-     * blocking and unblocking, invoking {@link #tryAcquire}
-     * until success or the thread is interrupted.  This method can be
-     * used to implement method {@link Lock#lockInterruptibly}.
-     *
-     * @param arg the acquire argument.  This value is conveyed to
-     *        {@link #tryAcquire} but is otherwise uninterpreted and
-     *        can represent anything you like.
-     * @throws InterruptedException if the current thread is interrupted
-     */
-    public final void acquireInterruptibly(long arg)
-            throws InterruptedException {
-        if (Thread.interrupted())
-            throw new InterruptedException();
-        if (!tryAcquire(arg))
-            doAcquireInterruptibly(arg);
-    }
-
-    /**
-     * Attempts to acquire in exclusive mode, aborting if interrupted,
-     * and failing if the given timeout elapses.  Implemented by first
-     * checking interrupt status, then invoking at least once {@link
-     * #tryAcquire}, returning on success.  Otherwise, the thread is
-     * queued, possibly repeatedly blocking and unblocking, invoking
-     * {@link #tryAcquire} until success or the thread is interrupted
-     * or the timeout elapses.  This method can be used to implement
-     * method {@link Lock#tryLock(long, TimeUnit)}.
-     *
-     * @param arg the acquire argument.  This value is conveyed to
-     *        {@link #tryAcquire} but is otherwise uninterpreted and
-     *        can represent anything you like.
-     * @param nanosTimeout the maximum number of nanoseconds to wait
-     * @return {@code true} if acquired; {@code false} if timed out
-     * @throws InterruptedException if the current thread is interrupted
-     */
-    public final boolean tryAcquireNanos(long arg, long nanosTimeout)
-            throws InterruptedException {
-        if (Thread.interrupted())
-            throw new InterruptedException();
-        return tryAcquire(arg) ||
-            doAcquireNanos(arg, nanosTimeout);
-    }
-
-    /**
-     * Releases in exclusive mode.  Implemented by unblocking one or
-     * more threads if {@link #tryRelease} returns true.
-     * This method can be used to implement method {@link Lock#unlock}.
-     *
-     * @param arg the release argument.  This value is conveyed to
-     *        {@link #tryRelease} but is otherwise uninterpreted and
-     *        can represent anything you like.
-     * @return the value returned from {@link #tryRelease}
-     */
-    public final boolean release(long arg) {
-        if (tryRelease(arg)) {
-            Node h = head;
-            if (h != null && h.waitStatus != 0)
-                unparkSuccessor(h);
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Acquires in shared mode, ignoring interrupts.  Implemented by
-     * first invoking at least once {@link #tryAcquireShared},
-     * returning on success.  Otherwise the thread is queued, possibly
-     * repeatedly blocking and unblocking, invoking {@link
-     * #tryAcquireShared} until success.
-     *
-     * @param arg the acquire argument.  This value is conveyed to
-     *        {@link #tryAcquireShared} but is otherwise uninterpreted
-     *        and can represent anything you like.
-     */
-    public final void acquireShared(long arg) {
-        if (tryAcquireShared(arg) < 0)
-            doAcquireShared(arg);
-    }
-
-    /**
-     * Acquires in shared mode, aborting if interrupted.  Implemented
-     * by first checking interrupt status, then invoking at least once
-     * {@link #tryAcquireShared}, returning on success.  Otherwise the
-     * thread is queued, possibly repeatedly blocking and unblocking,
-     * invoking {@link #tryAcquireShared} until success or the thread
-     * is interrupted.
-     * @param arg the acquire argument
-     * This value is conveyed to {@link #tryAcquireShared} but is
-     * otherwise uninterpreted and can represent anything
-     * you like.
-     * @throws InterruptedException if the current thread is interrupted
-     */
-    public final void acquireSharedInterruptibly(long arg)
-            throws InterruptedException {
-        if (Thread.interrupted())
-            throw new InterruptedException();
-        if (tryAcquireShared(arg) < 0)
-            doAcquireSharedInterruptibly(arg);
-    }
-
-    /**
-     * Attempts to acquire in shared mode, aborting if interrupted, and
-     * failing if the given timeout elapses.  Implemented by first
-     * checking interrupt status, then invoking at least once {@link
-     * #tryAcquireShared}, returning on success.  Otherwise, the
-     * thread is queued, possibly repeatedly blocking and unblocking,
-     * invoking {@link #tryAcquireShared} until success or the thread
-     * is interrupted or the timeout elapses.
-     *
-     * @param arg the acquire argument.  This value is conveyed to
-     *        {@link #tryAcquireShared} but is otherwise uninterpreted
-     *        and can represent anything you like.
-     * @param nanosTimeout the maximum number of nanoseconds to wait
-     * @return {@code true} if acquired; {@code false} if timed out
-     * @throws InterruptedException if the current thread is interrupted
-     */
-    public final boolean tryAcquireSharedNanos(long arg, long nanosTimeout)
-            throws InterruptedException {
-        if (Thread.interrupted())
-            throw new InterruptedException();
-        return tryAcquireShared(arg) >= 0 ||
-            doAcquireSharedNanos(arg, nanosTimeout);
-    }
-
-    /**
-     * Releases in shared mode.  Implemented by unblocking one or more
-     * threads if {@link #tryReleaseShared} returns true.
-     *
-     * @param arg the release argument.  This value is conveyed to
-     *        {@link #tryReleaseShared} but is otherwise uninterpreted
-     *        and can represent anything you like.
-     * @return the value returned from {@link #tryReleaseShared}
-     */
-    public final boolean releaseShared(long arg) {
-        if (tryReleaseShared(arg)) {
-            doReleaseShared();
-            return true;
-        }
-        return false;
-    }
-
-    // Queue inspection methods
-
-    /**
-     * Queries whether any threads are waiting to acquire. Note that
-     * because cancellations due to interrupts and timeouts may occur
-     * at any time, a {@code true} return does not guarantee that any
-     * other thread will ever acquire.
-     *
-     * <p>In this implementation, this operation returns in
-     * constant time.
-     *
-     * @return {@code true} if there may be other threads waiting to acquire
-     */
-    public final boolean hasQueuedThreads() {
-        return head != tail;
-    }
-
-    /**
-     * Queries whether any threads have ever contended to acquire this
-     * synchronizer; that is if an acquire method has ever blocked.
-     *
-     * <p>In this implementation, this operation returns in
-     * constant time.
-     *
-     * @return {@code true} if there has ever been contention
-     */
-    public final boolean hasContended() {
-        return head != null;
-    }
-
-    /**
-     * Returns the first (longest-waiting) thread in the queue, or
-     * {@code null} if no threads are currently queued.
-     *
-     * <p>In this implementation, this operation normally returns in
-     * constant time, but may iterate upon contention if other threads are
-     * concurrently modifying the queue.
-     *
-     * @return the first (longest-waiting) thread in the queue, or
-     *         {@code null} if no threads are currently queued
-     */
-    public final Thread getFirstQueuedThread() {
-        // handle only fast path, else relay
-        return (head == tail) ? null : fullGetFirstQueuedThread();
-    }
-
-    /**
-     * Version of getFirstQueuedThread called when fastpath fails
-     */
-    private Thread fullGetFirstQueuedThread() {
-        /*
-         * The first node is normally head.next. Try to get its
-         * thread field, ensuring consistent reads: If thread
-         * field is nulled out or s.prev is no longer head, then
-         * some other thread(s) concurrently performed setHead in
-         * between some of our reads. We try this twice before
-         * resorting to traversal.
-         */
-        Node h, s;
-        Thread st;
-        if (((h = head) != null && (s = h.next) != null &&
-             s.prev == head && (st = s.thread) != null) ||
-            ((h = head) != null && (s = h.next) != null &&
-             s.prev == head && (st = s.thread) != null))
-            return st;
-
-        /*
-         * Head's next field might not have been set yet, or may have
-         * been unset after setHead. So we must check to see if tail
-         * is actually first node. If not, we continue on, safely
-         * traversing from tail back to head to find first,
-         * guaranteeing termination.
-         */
-
-        Node t = tail;
-        Thread firstThread = null;
-        while (t != null && t != head) {
-            Thread tt = t.thread;
-            if (tt != null)
-                firstThread = tt;
-            t = t.prev;
-        }
-        return firstThread;
-    }
-
-    /**
-     * Returns true if the given thread is currently queued.
-     *
-     * <p>This implementation traverses the queue to determine
-     * presence of the given thread.
-     *
-     * @param thread the thread
-     * @return {@code true} if the given thread is on the queue
-     * @throws NullPointerException if the thread is null
-     */
-    public final boolean isQueued(Thread thread) {
-        if (thread == null)
-            throw new NullPointerException();
-        for (Node p = tail; p != null; p = p.prev)
-            if (p.thread == thread)
-                return true;
-        return false;
-    }
-
-    /**
-     * Returns {@code true} if the apparent first queued thread, if one
-     * exists, is waiting in exclusive mode.  If this method returns
-     * {@code true}, and the current thread is attempting to acquire in
-     * shared mode (that is, this method is invoked from {@link
-     * #tryAcquireShared}) then it is guaranteed that the current thread
-     * is not the first queued thread.  Used only as a heuristic in
-     * ReentrantReadWriteLock.
-     */
-    final boolean apparentlyFirstQueuedIsExclusive() {
-        Node h, s;
-        return (h = head) != null &&
-            (s = h.next)  != null &&
-            !s.isShared()         &&
-            s.thread != null;
-    }
-
-    /**
-     * Queries whether any threads have been waiting to acquire longer
-     * than the current thread.
-     *
-     * <p>An invocation of this method is equivalent to (but may be
-     * more efficient than):
-     *  <pre> {@code
-     * getFirstQueuedThread() != Thread.currentThread() &&
-     * hasQueuedThreads()}</pre>
-     *
-     * <p>Note that because cancellations due to interrupts and
-     * timeouts may occur at any time, a {@code true} return does not
-     * guarantee that some other thread will acquire before the current
-     * thread.  Likewise, it is possible for another thread to win a
-     * race to enqueue after this method has returned {@code false},
-     * due to the queue being empty.
-     *
-     * <p>This method is designed to be used by a fair synchronizer to
-     * avoid <a href="AbstractQueuedSynchronizer#barging">barging</a>.
-     * Such a synchronizer's {@link #tryAcquire} method should return
-     * {@code false}, and its {@link #tryAcquireShared} method should
-     * return a negative value, if this method returns {@code true}
-     * (unless this is a reentrant acquire).  For example, the {@code
-     * tryAcquire} method for a fair, reentrant, exclusive mode
-     * synchronizer might look like this:
-     *
-     *  <pre> {@code
-     * protected boolean tryAcquire(int arg) {
-     *   if (isHeldExclusively()) {
-     *     // A reentrant acquire; increment hold count
-     *     return true;
-     *   } else if (hasQueuedPredecessors()) {
-     *     return false;
-     *   } else {
-     *     // try to acquire normally
-     *   }
-     * }}</pre>
-     *
-     * @return {@code true} if there is a queued thread preceding the
-     *         current thread, and {@code false} if the current thread
-     *         is at the head of the queue or the queue is empty
-     * @since 1.7
-     */
-    public final boolean hasQueuedPredecessors() {
-        // The correctness of this depends on head being initialized
-        // before tail and on head.next being accurate if the current
-        // thread is first in queue.
-        Node t = tail; // Read fields in reverse initialization order
-        Node h = head;
-        Node s;
-        return h != t &&
-            ((s = h.next) == null || s.thread != Thread.currentThread());
-    }
-
-
-    // Instrumentation and monitoring methods
-
-    /**
-     * Returns an estimate of the number of threads waiting to
-     * acquire.  The value is only an estimate because the number of
-     * threads may change dynamically while this method traverses
-     * internal data structures.  This method is designed for use in
-     * monitoring system state, not for synchronization
-     * control.
-     *
-     * @return the estimated number of threads waiting to acquire
-     */
-    public final int getQueueLength() {
-        int n = 0;
-        for (Node p = tail; p != null; p = p.prev) {
-            if (p.thread != null)
-                ++n;
-        }
-        return n;
-    }
-
-    /**
-     * Returns a collection containing threads that may be waiting to
-     * acquire.  Because the actual set of threads may change
-     * dynamically while constructing this result, the returned
-     * collection is only a best-effort estimate.  The elements of the
-     * returned collection are in no particular order.  This method is
-     * designed to facilitate construction of subclasses that provide
-     * more extensive monitoring facilities.
-     *
-     * @return the collection of threads
-     */
-    public final Collection<Thread> getQueuedThreads() {
-        ArrayList<Thread> list = new ArrayList<Thread>();
-        for (Node p = tail; p != null; p = p.prev) {
-            Thread t = p.thread;
-            if (t != null)
-                list.add(t);
-        }
-        return list;
-    }
-
-    /**
-     * Returns a collection containing threads that may be waiting to
-     * acquire in exclusive mode. This has the same properties
-     * as {@link #getQueuedThreads} except that it only returns
-     * those threads waiting due to an exclusive acquire.
-     *
-     * @return the collection of threads
-     */
-    public final Collection<Thread> getExclusiveQueuedThreads() {
-        ArrayList<Thread> list = new ArrayList<Thread>();
-        for (Node p = tail; p != null; p = p.prev) {
-            if (!p.isShared()) {
-                Thread t = p.thread;
-                if (t != null)
-                    list.add(t);
-            }
-        }
-        return list;
-    }
-
-    /**
-     * Returns a collection containing threads that may be waiting to
-     * acquire in shared mode. This has the same properties
-     * as {@link #getQueuedThreads} except that it only returns
-     * those threads waiting due to a shared acquire.
-     *
-     * @return the collection of threads
-     */
-    public final Collection<Thread> getSharedQueuedThreads() {
-        ArrayList<Thread> list = new ArrayList<Thread>();
-        for (Node p = tail; p != null; p = p.prev) {
-            if (p.isShared()) {
-                Thread t = p.thread;
-                if (t != null)
-                    list.add(t);
-            }
-        }
-        return list;
-    }
-
-    /**
-     * Returns a string identifying this synchronizer, as well as its state.
-     * The state, in brackets, includes the String {@code "State ="}
-     * followed by the current value of {@link #getState}, and either
-     * {@code "nonempty"} or {@code "empty"} depending on whether the
-     * queue is empty.
-     *
-     * @return a string identifying this synchronizer, as well as its state
-     */
-    public String toString() {
-        long s = getState();
-        String q  = hasQueuedThreads() ? "non" : "";
-        return super.toString() +
-            "[State = " + s + ", " + q + "empty queue]";
-    }
-
-
-    // Internal support methods for Conditions
-
-    /**
-     * Returns true if a node, always one that was initially placed on
-     * a condition queue, is now waiting to reacquire on sync queue.
-     * @param node the node
-     * @return true if is reacquiring
-     */
-    final boolean isOnSyncQueue(Node node) {
-        if (node.waitStatus == Node.CONDITION || node.prev == null)
-            return false;
-        if (node.next != null) // If has successor, it must be on queue
-            return true;
-        /*
-         * node.prev can be non-null, but not yet on queue because
-         * the CAS to place it on queue can fail. So we have to
-         * traverse from tail to make sure it actually made it.  It
-         * will always be near the tail in calls to this method, and
-         * unless the CAS failed (which is unlikely), it will be
-         * there, so we hardly ever traverse much.
-         */
-        return findNodeFromTail(node);
-    }
-
-    /**
-     * Returns true if node is on sync queue by searching backwards from tail.
-     * Called only when needed by isOnSyncQueue.
-     * @return true if present
-     */
-    private boolean findNodeFromTail(Node node) {
-        Node t = tail;
-        for (;;) {
-            if (t == node)
-                return true;
-            if (t == null)
-                return false;
-            t = t.prev;
-        }
-    }
-
-    /**
-     * Transfers a node from a condition queue onto sync queue.
-     * Returns true if successful.
-     * @param node the node
-     * @return true if successfully transferred (else the node was
-     * cancelled before signal).
-     */
-    final boolean transferForSignal(Node node) {
-        /*
-         * If cannot change waitStatus, the node has been cancelled.
-         */
-        if (!compareAndSetWaitStatus(node, Node.CONDITION, 0))
-            return false;
-
-        /*
-         * Splice onto queue and try to set waitStatus of predecessor to
-         * indicate that thread is (probably) waiting. If cancelled or
-         * attempt to set waitStatus fails, wake up to resync (in which
-         * case the waitStatus can be transiently and harmlessly wrong).
-         */
-        Node p = enq(node);
-        int ws = p.waitStatus;
-        if (ws > 0 || !compareAndSetWaitStatus(p, ws, Node.SIGNAL))
-            LockSupport.unpark(node.thread);
-        return true;
-    }
-
-    /**
-     * Transfers node, if necessary, to sync queue after a cancelled
-     * wait. Returns true if thread was cancelled before being
-     * signalled.
-     * @param current the waiting thread
-     * @param node its node
-     * @return true if cancelled before the node was signalled
-     */
-    final boolean transferAfterCancelledWait(Node node) {
-        if (compareAndSetWaitStatus(node, Node.CONDITION, 0)) {
-            enq(node);
-            return true;
-        }
-        /*
-         * If we lost out to a signal(), then we can't proceed
-         * until it finishes its enq().  Cancelling during an
-         * incomplete transfer is both rare and transient, so just
-         * spin.
-         */
-        while (!isOnSyncQueue(node))
-            Thread.yield();
-        return false;
-    }
-
-    /**
-     * Invokes release with current state value; returns saved state.
-     * Cancels node and throws exception on failure.
-     * @param node the condition node for this wait
-     * @return previous sync state
-     */
-    final long fullyRelease(Node node) {
-        boolean failed = true;
-        try {
-            long savedState = getState();
-            if (release(savedState)) {
-                failed = false;
-                return savedState;
-            } else {
-                throw new IllegalMonitorStateException();
-            }
-        } finally {
-            if (failed)
-                node.waitStatus = Node.CANCELLED;
-        }
-    }
-
-    // Instrumentation methods for conditions
-
-    /**
-     * Queries whether the given ConditionObject
-     * uses this synchronizer as its lock.
-     *
-     * @param condition the condition
-     * @return <tt>true</tt> if owned
-     * @throws NullPointerException if the condition is null
-     */
-    public final boolean owns(ConditionObject condition) {
-        if (condition == null)
-            throw new NullPointerException();
-        return condition.isOwnedBy(this);
-    }
-
-    /**
-     * Queries whether any threads are waiting on the given condition
-     * associated with this synchronizer. Note that because timeouts
-     * and interrupts may occur at any time, a <tt>true</tt> return
-     * does not guarantee that a future <tt>signal</tt> will awaken
-     * any threads.  This method is designed primarily for use in
-     * monitoring of the system state.
-     *
-     * @param condition the condition
-     * @return <tt>true</tt> if there are any waiting threads
-     * @throws IllegalMonitorStateException if exclusive synchronization
-     *         is not held
-     * @throws IllegalArgumentException if the given condition is
-     *         not associated with this synchronizer
-     * @throws NullPointerException if the condition is null
-     */
-    public final boolean hasWaiters(ConditionObject condition) {
-        if (!owns(condition))
-            throw new IllegalArgumentException("Not owner");
-        return condition.hasWaiters();
-    }
-
-    /**
-     * Returns an estimate of the number of threads waiting on the
-     * given condition associated with this synchronizer. Note that
-     * because timeouts and interrupts may occur at any time, the
-     * estimate serves only as an upper bound on the actual number of
-     * waiters.  This method is designed for use in monitoring of the
-     * system state, not for synchronization control.
-     *
-     * @param condition the condition
-     * @return the estimated number of waiting threads
-     * @throws IllegalMonitorStateException if exclusive synchronization
-     *         is not held
-     * @throws IllegalArgumentException if the given condition is
-     *         not associated with this synchronizer
-     * @throws NullPointerException if the condition is null
-     */
-    public final int getWaitQueueLength(ConditionObject condition) {
-        if (!owns(condition))
-            throw new IllegalArgumentException("Not owner");
-        return condition.getWaitQueueLength();
-    }
-
-    /**
-     * Returns a collection containing those threads that may be
-     * waiting on the given condition associated with this
-     * synchronizer.  Because the actual set of threads may change
-     * dynamically while constructing this result, the returned
-     * collection is only a best-effort estimate. The elements of the
-     * returned collection are in no particular order.
-     *
-     * @param condition the condition
-     * @return the collection of threads
-     * @throws IllegalMonitorStateException if exclusive synchronization
-     *         is not held
-     * @throws IllegalArgumentException if the given condition is
-     *         not associated with this synchronizer
-     * @throws NullPointerException if the condition is null
-     */
-    public final Collection<Thread> getWaitingThreads(ConditionObject condition) {
-        if (!owns(condition))
-            throw new IllegalArgumentException("Not owner");
-        return condition.getWaitingThreads();
-    }
-
-    /**
-     * Condition implementation for a {@link
-     * AbstractQueuedLongSynchronizer} serving as the basis of a {@link
-     * Lock} implementation.
-     *
-     * <p>Method documentation for this class describes mechanics,
-     * not behavioral specifications from the point of view of Lock
-     * and Condition users. Exported versions of this class will in
-     * general need to be accompanied by documentation describing
-     * condition semantics that rely on those of the associated
-     * <tt>AbstractQueuedLongSynchronizer</tt>.
-     *
-     * <p>This class is Serializable, but all fields are transient,
-     * so deserialized conditions have no waiters.
-     *
-     * @since 1.6
-     */
-    public class ConditionObject implements Condition, java.io.Serializable {
-        private static final long serialVersionUID = 1173984872572414699L;
-        /** First node of condition queue. */
-        private transient Node firstWaiter;
-        /** Last node of condition queue. */
-        private transient Node lastWaiter;
-
-        /**
-         * Creates a new <tt>ConditionObject</tt> instance.
-         */
-        public ConditionObject() { }
-
-        // Internal methods
-
-        /**
-         * Adds a new waiter to wait queue.
-         * @return its new wait node
-         */
-        private Node addConditionWaiter() {
-            Node t = lastWaiter;
-            // If lastWaiter is cancelled, clean out.
-            if (t != null && t.waitStatus != Node.CONDITION) {
-                unlinkCancelledWaiters();
-                t = lastWaiter;
-            }
-            Node node = new Node(Thread.currentThread(), Node.CONDITION);
-            if (t == null)
-                firstWaiter = node;
-            else
-                t.nextWaiter = node;
-            lastWaiter = node;
-            return node;
-        }
-
-        /**
-         * Removes and transfers nodes until hit non-cancelled one or
-         * null. Split out from signal in part to encourage compilers
-         * to inline the case of no waiters.
-         * @param first (non-null) the first node on condition queue
-         */
-        private void doSignal(Node first) {
-            do {
-                if ( (firstWaiter = first.nextWaiter) == null)
-                    lastWaiter = null;
-                first.nextWaiter = null;
-            } while (!transferForSignal(first) &&
-                     (first = firstWaiter) != null);
-        }
-
-        /**
-         * Removes and transfers all nodes.
-         * @param first (non-null) the first node on condition queue
-         */
-        private void doSignalAll(Node first) {
-            lastWaiter = firstWaiter = null;
-            do {
-                Node next = first.nextWaiter;
-                first.nextWaiter = null;
-                transferForSignal(first);
-                first = next;
-            } while (first != null);
-        }
-
-        /**
-         * Unlinks cancelled waiter nodes from condition queue.
-         * Called only while holding lock. This is called when
-         * cancellation occurred during condition wait, and upon
-         * insertion of a new waiter when lastWaiter is seen to have
-         * been cancelled. This method is needed to avoid garbage
-         * retention in the absence of signals. So even though it may
-         * require a full traversal, it comes into play only when
-         * timeouts or cancellations occur in the absence of
-         * signals. It traverses all nodes rather than stopping at a
-         * particular target to unlink all pointers to garbage nodes
-         * without requiring many re-traversals during cancellation
-         * storms.
-         */
-        private void unlinkCancelledWaiters() {
-            Node t = firstWaiter;
-            Node trail = null;
-            while (t != null) {
-                Node next = t.nextWaiter;
-                if (t.waitStatus != Node.CONDITION) {
-                    t.nextWaiter = null;
-                    if (trail == null)
-                        firstWaiter = next;
-                    else
-                        trail.nextWaiter = next;
-                    if (next == null)
-                        lastWaiter = trail;
-                }
-                else
-                    trail = t;
-                t = next;
-            }
-        }
-
-        // public methods
-
-        /**
-         * Moves the longest-waiting thread, if one exists, from the
-         * wait queue for this condition to the wait queue for the
-         * owning lock.
-         *
-         * @throws IllegalMonitorStateException if {@link #isHeldExclusively}
-         *         returns {@code false}
-         */
-        public final void signal() {
-            if (!isHeldExclusively())
-                throw new IllegalMonitorStateException();
-            Node first = firstWaiter;
-            if (first != null)
-                doSignal(first);
-        }
-
-        /**
-         * Moves all threads from the wait queue for this condition to
-         * the wait queue for the owning lock.
-         *
-         * @throws IllegalMonitorStateException if {@link #isHeldExclusively}
-         *         returns {@code false}
-         */
-        public final void signalAll() {
-            if (!isHeldExclusively())
-                throw new IllegalMonitorStateException();
-            Node first = firstWaiter;
-            if (first != null)
-                doSignalAll(first);
-        }
-
-        /**
-         * Implements uninterruptible condition wait.
-         * <ol>
-         * <li> Save lock state returned by {@link #getState}.
-         * <li> Invoke {@link #release} with
-         *      saved state as argument, throwing
-         *      IllegalMonitorStateException if it fails.
-         * <li> Block until signalled.
-         * <li> Reacquire by invoking specialized version of
-         *      {@link #acquire} with saved state as argument.
-         * </ol>
-         */
-        public final void awaitUninterruptibly() {
-            Node node = addConditionWaiter();
-            long savedState = fullyRelease(node);
-            boolean interrupted = false;
-            while (!isOnSyncQueue(node)) {
-                LockSupport.park(this);
-                if (Thread.interrupted())
-                    interrupted = true;
-            }
-            if (acquireQueued(node, savedState) || interrupted)
-                selfInterrupt();
-        }
-
-        /*
-         * For interruptible waits, we need to track whether to throw
-         * InterruptedException, if interrupted while blocked on
-         * condition, versus reinterrupt current thread, if
-         * interrupted while blocked waiting to re-acquire.
-         */
-
-        /** Mode meaning to reinterrupt on exit from wait */
-        private static final int REINTERRUPT =  1;
-        /** Mode meaning to throw InterruptedException on exit from wait */
-        private static final int THROW_IE    = -1;
-
-        /**
-         * Checks for interrupt, returning THROW_IE if interrupted
-         * before signalled, REINTERRUPT if after signalled, or
-         * 0 if not interrupted.
-         */
-        private int checkInterruptWhileWaiting(Node node) {
-            return Thread.interrupted() ?
-                (transferAfterCancelledWait(node) ? THROW_IE : REINTERRUPT) :
-                0;
-        }
-
-        /**
-         * Throws InterruptedException, reinterrupts current thread, or
-         * does nothing, depending on mode.
-         */
-        private void reportInterruptAfterWait(int interruptMode)
-            throws InterruptedException {
-            if (interruptMode == THROW_IE)
-                throw new InterruptedException();
-            else if (interruptMode == REINTERRUPT)
-                selfInterrupt();
-        }
-
-        /**
-         * Implements interruptible condition wait.
-         * <ol>
-         * <li> If current thread is interrupted, throw InterruptedException.
-         * <li> Save lock state returned by {@link #getState}.
-         * <li> Invoke {@link #release} with
-         *      saved state as argument, throwing
-         *      IllegalMonitorStateException if it fails.
-         * <li> Block until signalled or interrupted.
-         * <li> Reacquire by invoking specialized version of
-         *      {@link #acquire} with saved state as argument.
-         * <li> If interrupted while blocked in step 4, throw InterruptedException.
-         * </ol>
-         */
-        public final void await() throws InterruptedException {
-            if (Thread.interrupted())
-                throw new InterruptedException();
-            Node node = addConditionWaiter();
-            long savedState = fullyRelease(node);
-            int interruptMode = 0;
-            while (!isOnSyncQueue(node)) {
-                LockSupport.park(this);
-                if ((interruptMode = checkInterruptWhileWaiting(node)) != 0)
-                    break;
-            }
-            if (acquireQueued(node, savedState) && interruptMode != THROW_IE)
-                interruptMode = REINTERRUPT;
-            if (node.nextWaiter != null) // clean up if cancelled
-                unlinkCancelledWaiters();
-            if (interruptMode != 0)
-                reportInterruptAfterWait(interruptMode);
-        }
-
-        /**
-         * Implements timed condition wait.
-         * <ol>
-         * <li> If current thread is interrupted, throw InterruptedException.
-         * <li> Save lock state returned by {@link #getState}.
-         * <li> Invoke {@link #release} with
-         *      saved state as argument, throwing
-         *      IllegalMonitorStateException if it fails.
-         * <li> Block until signalled, interrupted, or timed out.
-         * <li> Reacquire by invoking specialized version of
-         *      {@link #acquire} with saved state as argument.
-         * <li> If interrupted while blocked in step 4, throw InterruptedException.
-         * </ol>
-         */
-        public final long awaitNanos(long nanosTimeout)
-                throws InterruptedException {
-            if (Thread.interrupted())
-                throw new InterruptedException();
-            Node node = addConditionWaiter();
-            long savedState = fullyRelease(node);
-            long lastTime = System.nanoTime();
-            int interruptMode = 0;
-            while (!isOnSyncQueue(node)) {
-                if (nanosTimeout <= 0L) {
-                    transferAfterCancelledWait(node);
-                    break;
-                }
-                LockSupport.parkNanos(this, nanosTimeout);
-                if ((interruptMode = checkInterruptWhileWaiting(node)) != 0)
-                    break;
-
-                long now = System.nanoTime();
-                nanosTimeout -= now - lastTime;
-                lastTime = now;
-            }
-            if (acquireQueued(node, savedState) && interruptMode != THROW_IE)
-                interruptMode = REINTERRUPT;
-            if (node.nextWaiter != null)
-                unlinkCancelledWaiters();
-            if (interruptMode != 0)
-                reportInterruptAfterWait(interruptMode);
-            return nanosTimeout - (System.nanoTime() - lastTime);
-        }
-
-        /**
-         * Implements absolute timed condition wait.
-         * <ol>
-         * <li> If current thread is interrupted, throw InterruptedException.
-         * <li> Save lock state returned by {@link #getState}.
-         * <li> Invoke {@link #release} with
-         *      saved state as argument, throwing
-         *      IllegalMonitorStateException if it fails.
-         * <li> Block until signalled, interrupted, or timed out.
-         * <li> Reacquire by invoking specialized version of
-         *      {@link #acquire} with saved state as argument.
-         * <li> If interrupted while blocked in step 4, throw InterruptedException.
-         * <li> If timed out while blocked in step 4, return false, else true.
-         * </ol>
-         */
-        public final boolean awaitUntil(Date deadline)
-                throws InterruptedException {
-            if (deadline == null)
-                throw new NullPointerException();
-            long abstime = deadline.getTime();
-            if (Thread.interrupted())
-                throw new InterruptedException();
-            Node node = addConditionWaiter();
-            long savedState = fullyRelease(node);
-            boolean timedout = false;
-            int interruptMode = 0;
-            while (!isOnSyncQueue(node)) {
-                if (System.currentTimeMillis() > abstime) {
-                    timedout = transferAfterCancelledWait(node);
-                    break;
-                }
-                LockSupport.parkUntil(this, abstime);
-                if ((interruptMode = checkInterruptWhileWaiting(node)) != 0)
-                    break;
-            }
-            if (acquireQueued(node, savedState) && interruptMode != THROW_IE)
-                interruptMode = REINTERRUPT;
-            if (node.nextWaiter != null)
-                unlinkCancelledWaiters();
-            if (interruptMode != 0)
-                reportInterruptAfterWait(interruptMode);
-            return !timedout;
-        }
-
-        /**
-         * Implements timed condition wait.
-         * <ol>
-         * <li> If current thread is interrupted, throw InterruptedException.
-         * <li> Save lock state returned by {@link #getState}.
-         * <li> Invoke {@link #release} with
-         *      saved state as argument, throwing
-         *      IllegalMonitorStateException if it fails.
-         * <li> Block until signalled, interrupted, or timed out.
-         * <li> Reacquire by invoking specialized version of
-         *      {@link #acquire} with saved state as argument.
-         * <li> If interrupted while blocked in step 4, throw InterruptedException.
-         * <li> If timed out while blocked in step 4, return false, else true.
-         * </ol>
-         */
-        public final boolean await(long time, TimeUnit unit)
-                throws InterruptedException {
-            if (unit == null)
-                throw new NullPointerException();
-            long nanosTimeout = unit.toNanos(time);
-            if (Thread.interrupted())
-                throw new InterruptedException();
-            Node node = addConditionWaiter();
-            long savedState = fullyRelease(node);
-            long lastTime = System.nanoTime();
-            boolean timedout = false;
-            int interruptMode = 0;
-            while (!isOnSyncQueue(node)) {
-                if (nanosTimeout <= 0L) {
-                    timedout = transferAfterCancelledWait(node);
-                    break;
-                }
-                if (nanosTimeout >= spinForTimeoutThreshold)
-                    LockSupport.parkNanos(this, nanosTimeout);
-                if ((interruptMode = checkInterruptWhileWaiting(node)) != 0)
-                    break;
-                long now = System.nanoTime();
-                nanosTimeout -= now - lastTime;
-                lastTime = now;
-            }
-            if (acquireQueued(node, savedState) && interruptMode != THROW_IE)
-                interruptMode = REINTERRUPT;
-            if (node.nextWaiter != null)
-                unlinkCancelledWaiters();
-            if (interruptMode != 0)
-                reportInterruptAfterWait(interruptMode);
-            return !timedout;
-        }
-
-        //  support for instrumentation
-
-        /**
-         * Returns true if this condition was created by the given
-         * synchronization object.
-         *
-         * @return {@code true} if owned
-         */
-        final boolean isOwnedBy(AbstractQueuedLongSynchronizer sync) {
-            return sync == AbstractQueuedLongSynchronizer.this;
-        }
-
-        /**
-         * Queries whether any threads are waiting on this condition.
-         * Implements {@link AbstractQueuedLongSynchronizer#hasWaiters}.
-         *
-         * @return {@code true} if there are any waiting threads
-         * @throws IllegalMonitorStateException if {@link #isHeldExclusively}
-         *         returns {@code false}
-         */
-        protected final boolean hasWaiters() {
-            if (!isHeldExclusively())
-                throw new IllegalMonitorStateException();
-            for (Node w = firstWaiter; w != null; w = w.nextWaiter) {
-                if (w.waitStatus == Node.CONDITION)
-                    return true;
-            }
-            return false;
-        }
-
-        /**
-         * Returns an estimate of the number of threads waiting on
-         * this condition.
-         * Implements {@link AbstractQueuedLongSynchronizer#getWaitQueueLength}.
-         *
-         * @return the estimated number of waiting threads
-         * @throws IllegalMonitorStateException if {@link #isHeldExclusively}
-         *         returns {@code false}
-         */
-        protected final int getWaitQueueLength() {
-            if (!isHeldExclusively())
-                throw new IllegalMonitorStateException();
-            int n = 0;
-            for (Node w = firstWaiter; w != null; w = w.nextWaiter) {
-                if (w.waitStatus == Node.CONDITION)
-                    ++n;
-            }
-            return n;
-        }
-
-        /**
-         * Returns a collection containing those threads that may be
-         * waiting on this Condition.
-         * Implements {@link AbstractQueuedLongSynchronizer#getWaitingThreads}.
-         *
-         * @return the collection of threads
-         * @throws IllegalMonitorStateException if {@link #isHeldExclusively}
-         *         returns {@code false}
-         */
-        protected final Collection<Thread> getWaitingThreads() {
-            if (!isHeldExclusively())
-                throw new IllegalMonitorStateException();
-            ArrayList<Thread> list = new ArrayList<Thread>();
-            for (Node w = firstWaiter; w != null; w = w.nextWaiter) {
-                if (w.waitStatus == Node.CONDITION) {
-                    Thread t = w.thread;
-                    if (t != null)
-                        list.add(t);
-                }
-            }
-            return list;
-        }
-    }
-
-    /**
-     * Setup to support compareAndSet. We need to natively implement
-     * this here: For the sake of permitting future enhancements, we
-     * cannot explicitly subclass AtomicLong, which would be
-     * efficient and useful otherwise. So, as the lesser of evils, we
-     * natively implement using hotspot intrinsics API. And while we
-     * are at it, we do the same for other CASable fields (which could
-     * otherwise be done with atomic field updaters).
-     */
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-    private static final long stateOffset;
-    private static final long headOffset;
-    private static final long tailOffset;
-    private static final long waitStatusOffset;
-    private static final long nextOffset;
-
-    static {
-        try {
-            stateOffset = unsafe.objectFieldOffset
-                (AbstractQueuedLongSynchronizer.class.getDeclaredField("state"));
-            headOffset = unsafe.objectFieldOffset
-                (AbstractQueuedLongSynchronizer.class.getDeclaredField("head"));
-            tailOffset = unsafe.objectFieldOffset
-                (AbstractQueuedLongSynchronizer.class.getDeclaredField("tail"));
-            waitStatusOffset = unsafe.objectFieldOffset
-                (Node.class.getDeclaredField("waitStatus"));
-            nextOffset = unsafe.objectFieldOffset
-                (Node.class.getDeclaredField("next"));
-
-        } catch (Exception ex) { throw new Error(ex); }
-    }
-
-    /**
-     * CAS head field. Used only by enq.
-     */
-    private final boolean compareAndSetHead(Node update) {
-        return unsafe.compareAndSwapObject(this, headOffset, null, update);
-    }
-
-    /**
-     * CAS tail field. Used only by enq.
-     */
-    private final boolean compareAndSetTail(Node expect, Node update) {
-        return unsafe.compareAndSwapObject(this, tailOffset, expect, update);
-    }
-
-    /**
-     * CAS waitStatus field of a node.
-     */
-    private static final boolean compareAndSetWaitStatus(Node node,
-                                                         int expect,
-                                                         int update) {
-        return unsafe.compareAndSwapInt(node, waitStatusOffset,
-                                        expect, update);
-    }
-
-    /**
-     * CAS next field of a node.
-     */
-    private static final boolean compareAndSetNext(Node node,
-                                                   Node expect,
-                                                   Node update) {
-        return unsafe.compareAndSwapObject(node, nextOffset, expect, update);
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/locks/AbstractQueuedSynchronizer.java b/ojluni/src/main/java/java/util/concurrent/locks/AbstractQueuedSynchronizer.java
deleted file mode 100755
index 0da0eae..0000000
--- a/ojluni/src/main/java/java/util/concurrent/locks/AbstractQueuedSynchronizer.java
+++ /dev/null
@@ -1,2330 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.locks;
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.concurrent.atomic.*;
-import sun.misc.Unsafe;
-
-/**
- * Provides a framework for implementing blocking locks and related
- * synchronizers (semaphores, events, etc) that rely on
- * first-in-first-out (FIFO) wait queues.  This class is designed to
- * be a useful basis for most kinds of synchronizers that rely on a
- * single atomic <tt>int</tt> value to represent state. Subclasses
- * must define the protected methods that change this state, and which
- * define what that state means in terms of this object being acquired
- * or released.  Given these, the other methods in this class carry
- * out all queuing and blocking mechanics. Subclasses can maintain
- * other state fields, but only the atomically updated <tt>int</tt>
- * value manipulated using methods {@link #getState}, {@link
- * #setState} and {@link #compareAndSetState} is tracked with respect
- * to synchronization.
- *
- * <p>Subclasses should be defined as non-public internal helper
- * classes that are used to implement the synchronization properties
- * of their enclosing class.  Class
- * <tt>AbstractQueuedSynchronizer</tt> does not implement any
- * synchronization interface.  Instead it defines methods such as
- * {@link #acquireInterruptibly} that can be invoked as
- * appropriate by concrete locks and related synchronizers to
- * implement their public methods.
- *
- * <p>This class supports either or both a default <em>exclusive</em>
- * mode and a <em>shared</em> mode. When acquired in exclusive mode,
- * attempted acquires by other threads cannot succeed. Shared mode
- * acquires by multiple threads may (but need not) succeed. This class
- * does not &quot;understand&quot; these differences except in the
- * mechanical sense that when a shared mode acquire succeeds, the next
- * waiting thread (if one exists) must also determine whether it can
- * acquire as well. Threads waiting in the different modes share the
- * same FIFO queue. Usually, implementation subclasses support only
- * one of these modes, but both can come into play for example in a
- * {@link ReadWriteLock}. Subclasses that support only exclusive or
- * only shared modes need not define the methods supporting the unused mode.
- *
- * <p>This class defines a nested {@link ConditionObject} class that
- * can be used as a {@link Condition} implementation by subclasses
- * supporting exclusive mode for which method {@link
- * #isHeldExclusively} reports whether synchronization is exclusively
- * held with respect to the current thread, method {@link #release}
- * invoked with the current {@link #getState} value fully releases
- * this object, and {@link #acquire}, given this saved state value,
- * eventually restores this object to its previous acquired state.  No
- * <tt>AbstractQueuedSynchronizer</tt> method otherwise creates such a
- * condition, so if this constraint cannot be met, do not use it.  The
- * behavior of {@link ConditionObject} depends of course on the
- * semantics of its synchronizer implementation.
- *
- * <p>This class provides inspection, instrumentation, and monitoring
- * methods for the internal queue, as well as similar methods for
- * condition objects. These can be exported as desired into classes
- * using an <tt>AbstractQueuedSynchronizer</tt> for their
- * synchronization mechanics.
- *
- * <p>Serialization of this class stores only the underlying atomic
- * integer maintaining state, so deserialized objects have empty
- * thread queues. Typical subclasses requiring serializability will
- * define a <tt>readObject</tt> method that restores this to a known
- * initial state upon deserialization.
- *
- * <h3>Usage</h3>
- *
- * <p>To use this class as the basis of a synchronizer, redefine the
- * following methods, as applicable, by inspecting and/or modifying
- * the synchronization state using {@link #getState}, {@link
- * #setState} and/or {@link #compareAndSetState}:
- *
- * <ul>
- * <li> {@link #tryAcquire}
- * <li> {@link #tryRelease}
- * <li> {@link #tryAcquireShared}
- * <li> {@link #tryReleaseShared}
- * <li> {@link #isHeldExclusively}
- *</ul>
- *
- * Each of these methods by default throws {@link
- * UnsupportedOperationException}.  Implementations of these methods
- * must be internally thread-safe, and should in general be short and
- * not block. Defining these methods is the <em>only</em> supported
- * means of using this class. All other methods are declared
- * <tt>final</tt> because they cannot be independently varied.
- *
- * <p>You may also find the inherited methods from {@link
- * AbstractOwnableSynchronizer} useful to keep track of the thread
- * owning an exclusive synchronizer.  You are encouraged to use them
- * -- this enables monitoring and diagnostic tools to assist users in
- * determining which threads hold locks.
- *
- * <p>Even though this class is based on an internal FIFO queue, it
- * does not automatically enforce FIFO acquisition policies.  The core
- * of exclusive synchronization takes the form:
- *
- * <pre>
- * Acquire:
- *     while (!tryAcquire(arg)) {
- *        <em>enqueue thread if it is not already queued</em>;
- *        <em>possibly block current thread</em>;
- *     }
- *
- * Release:
- *     if (tryRelease(arg))
- *        <em>unblock the first queued thread</em>;
- * </pre>
- *
- * (Shared mode is similar but may involve cascading signals.)
- *
- * <p><a name="barging">Because checks in acquire are invoked before
- * enqueuing, a newly acquiring thread may <em>barge</em> ahead of
- * others that are blocked and queued.  However, you can, if desired,
- * define <tt>tryAcquire</tt> and/or <tt>tryAcquireShared</tt> to
- * disable barging by internally invoking one or more of the inspection
- * methods, thereby providing a <em>fair</em> FIFO acquisition order.
- * In particular, most fair synchronizers can define <tt>tryAcquire</tt>
- * to return <tt>false</tt> if {@link #hasQueuedPredecessors} (a method
- * specifically designed to be used by fair synchronizers) returns
- * <tt>true</tt>.  Other variations are possible.
- *
- * <p>Throughput and scalability are generally highest for the
- * default barging (also known as <em>greedy</em>,
- * <em>renouncement</em>, and <em>convoy-avoidance</em>) strategy.
- * While this is not guaranteed to be fair or starvation-free, earlier
- * queued threads are allowed to recontend before later queued
- * threads, and each recontention has an unbiased chance to succeed
- * against incoming threads.  Also, while acquires do not
- * &quot;spin&quot; in the usual sense, they may perform multiple
- * invocations of <tt>tryAcquire</tt> interspersed with other
- * computations before blocking.  This gives most of the benefits of
- * spins when exclusive synchronization is only briefly held, without
- * most of the liabilities when it isn't. If so desired, you can
- * augment this by preceding calls to acquire methods with
- * "fast-path" checks, possibly prechecking {@link #hasContended}
- * and/or {@link #hasQueuedThreads} to only do so if the synchronizer
- * is likely not to be contended.
- *
- * <p>This class provides an efficient and scalable basis for
- * synchronization in part by specializing its range of use to
- * synchronizers that can rely on <tt>int</tt> state, acquire, and
- * release parameters, and an internal FIFO wait queue. When this does
- * not suffice, you can build synchronizers from a lower level using
- * {@link java.util.concurrent.atomic atomic} classes, your own custom
- * {@link java.util.Queue} classes, and {@link LockSupport} blocking
- * support.
- *
- * <h3>Usage Examples</h3>
- *
- * <p>Here is a non-reentrant mutual exclusion lock class that uses
- * the value zero to represent the unlocked state, and one to
- * represent the locked state. While a non-reentrant lock
- * does not strictly require recording of the current owner
- * thread, this class does so anyway to make usage easier to monitor.
- * It also supports conditions and exposes
- * one of the instrumentation methods:
- *
- * <pre>
- * class Mutex implements Lock, java.io.Serializable {
- *
- *   // Our internal helper class
- *   private static class Sync extends AbstractQueuedSynchronizer {
- *     // Report whether in locked state
- *     protected boolean isHeldExclusively() {
- *       return getState() == 1;
- *     }
- *
- *     // Acquire the lock if state is zero
- *     public boolean tryAcquire(int acquires) {
- *       assert acquires == 1; // Otherwise unused
- *       if (compareAndSetState(0, 1)) {
- *         setExclusiveOwnerThread(Thread.currentThread());
- *         return true;
- *       }
- *       return false;
- *     }
- *
- *     // Release the lock by setting state to zero
- *     protected boolean tryRelease(int releases) {
- *       assert releases == 1; // Otherwise unused
- *       if (getState() == 0) throw new IllegalMonitorStateException();
- *       setExclusiveOwnerThread(null);
- *       setState(0);
- *       return true;
- *     }
- *
- *     // Provide a Condition
- *     Condition newCondition() { return new ConditionObject(); }
- *
- *     // Deserialize properly
- *     private void readObject(ObjectInputStream s)
- *         throws IOException, ClassNotFoundException {
- *       s.defaultReadObject();
- *       setState(0); // reset to unlocked state
- *     }
- *   }
- *
- *   // The sync object does all the hard work. We just forward to it.
- *   private final Sync sync = new Sync();
- *
- *   public void lock()                { sync.acquire(1); }
- *   public boolean tryLock()          { return sync.tryAcquire(1); }
- *   public void unlock()              { sync.release(1); }
- *   public Condition newCondition()   { return sync.newCondition(); }
- *   public boolean isLocked()         { return sync.isHeldExclusively(); }
- *   public boolean hasQueuedThreads() { return sync.hasQueuedThreads(); }
- *   public void lockInterruptibly() throws InterruptedException {
- *     sync.acquireInterruptibly(1);
- *   }
- *   public boolean tryLock(long timeout, TimeUnit unit)
- *       throws InterruptedException {
- *     return sync.tryAcquireNanos(1, unit.toNanos(timeout));
- *   }
- * }
- * </pre>
- *
- * <p>Here is a latch class that is like a {@link CountDownLatch}
- * except that it only requires a single <tt>signal</tt> to
- * fire. Because a latch is non-exclusive, it uses the <tt>shared</tt>
- * acquire and release methods.
- *
- * <pre>
- * class BooleanLatch {
- *
- *   private static class Sync extends AbstractQueuedSynchronizer {
- *     boolean isSignalled() { return getState() != 0; }
- *
- *     protected int tryAcquireShared(int ignore) {
- *       return isSignalled() ? 1 : -1;
- *     }
- *
- *     protected boolean tryReleaseShared(int ignore) {
- *       setState(1);
- *       return true;
- *     }
- *   }
- *
- *   private final Sync sync = new Sync();
- *   public boolean isSignalled() { return sync.isSignalled(); }
- *   public void signal()         { sync.releaseShared(1); }
- *   public void await() throws InterruptedException {
- *     sync.acquireSharedInterruptibly(1);
- *   }
- * }
- * </pre>
- *
- * @since 1.5
- * @author Doug Lea
- */
-public abstract class AbstractQueuedSynchronizer
-    extends AbstractOwnableSynchronizer
-    implements java.io.Serializable {
-
-    private static final long serialVersionUID = 7373984972572414691L;
-
-    /**
-     * Creates a new <tt>AbstractQueuedSynchronizer</tt> instance
-     * with initial synchronization state of zero.
-     */
-    protected AbstractQueuedSynchronizer() { }
-
-    /**
-     * Wait queue node class.
-     *
-     * <p>The wait queue is a variant of a "CLH" (Craig, Landin, and
-     * Hagersten) lock queue. CLH locks are normally used for
-     * spinlocks.  We instead use them for blocking synchronizers, but
-     * use the same basic tactic of holding some of the control
-     * information about a thread in the predecessor of its node.  A
-     * "status" field in each node keeps track of whether a thread
-     * should block.  A node is signalled when its predecessor
-     * releases.  Each node of the queue otherwise serves as a
-     * specific-notification-style monitor holding a single waiting
-     * thread. The status field does NOT control whether threads are
-     * granted locks etc though.  A thread may try to acquire if it is
-     * first in the queue. But being first does not guarantee success;
-     * it only gives the right to contend.  So the currently released
-     * contender thread may need to rewait.
-     *
-     * <p>To enqueue into a CLH lock, you atomically splice it in as new
-     * tail. To dequeue, you just set the head field.
-     * <pre>
-     *      +------+  prev +-----+       +-----+
-     * head |      | <---- |     | <---- |     |  tail
-     *      +------+       +-----+       +-----+
-     * </pre>
-     *
-     * <p>Insertion into a CLH queue requires only a single atomic
-     * operation on "tail", so there is a simple atomic point of
-     * demarcation from unqueued to queued. Similarly, dequeing
-     * involves only updating the "head". However, it takes a bit
-     * more work for nodes to determine who their successors are,
-     * in part to deal with possible cancellation due to timeouts
-     * and interrupts.
-     *
-     * <p>The "prev" links (not used in original CLH locks), are mainly
-     * needed to handle cancellation. If a node is cancelled, its
-     * successor is (normally) relinked to a non-cancelled
-     * predecessor. For explanation of similar mechanics in the case
-     * of spin locks, see the papers by Scott and Scherer at
-     * http://www.cs.rochester.edu/u/scott/synchronization/
-     *
-     * <p>We also use "next" links to implement blocking mechanics.
-     * The thread id for each node is kept in its own node, so a
-     * predecessor signals the next node to wake up by traversing
-     * next link to determine which thread it is.  Determination of
-     * successor must avoid races with newly queued nodes to set
-     * the "next" fields of their predecessors.  This is solved
-     * when necessary by checking backwards from the atomically
-     * updated "tail" when a node's successor appears to be null.
-     * (Or, said differently, the next-links are an optimization
-     * so that we don't usually need a backward scan.)
-     *
-     * <p>Cancellation introduces some conservatism to the basic
-     * algorithms.  Since we must poll for cancellation of other
-     * nodes, we can miss noticing whether a cancelled node is
-     * ahead or behind us. This is dealt with by always unparking
-     * successors upon cancellation, allowing them to stabilize on
-     * a new predecessor, unless we can identify an uncancelled
-     * predecessor who will carry this responsibility.
-     *
-     * <p>CLH queues need a dummy header node to get started. But
-     * we don't create them on construction, because it would be wasted
-     * effort if there is never contention. Instead, the node
-     * is constructed and head and tail pointers are set upon first
-     * contention.
-     *
-     * <p>Threads waiting on Conditions use the same nodes, but
-     * use an additional link. Conditions only need to link nodes
-     * in simple (non-concurrent) linked queues because they are
-     * only accessed when exclusively held.  Upon await, a node is
-     * inserted into a condition queue.  Upon signal, the node is
-     * transferred to the main queue.  A special value of status
-     * field is used to mark which queue a node is on.
-     *
-     * <p>Thanks go to Dave Dice, Mark Moir, Victor Luchangco, Bill
-     * Scherer and Michael Scott, along with members of JSR-166
-     * expert group, for helpful ideas, discussions, and critiques
-     * on the design of this class.
-     */
-    static final class Node {
-        /** Marker to indicate a node is waiting in shared mode */
-        static final Node SHARED = new Node();
-        /** Marker to indicate a node is waiting in exclusive mode */
-        static final Node EXCLUSIVE = null;
-
-        /** waitStatus value to indicate thread has cancelled */
-        static final int CANCELLED =  1;
-        /** waitStatus value to indicate successor's thread needs unparking */
-        static final int SIGNAL    = -1;
-        /** waitStatus value to indicate thread is waiting on condition */
-        static final int CONDITION = -2;
-        /**
-         * waitStatus value to indicate the next acquireShared should
-         * unconditionally propagate
-         */
-        static final int PROPAGATE = -3;
-
-        /**
-         * Status field, taking on only the values:
-         *   SIGNAL:     The successor of this node is (or will soon be)
-         *               blocked (via park), so the current node must
-         *               unpark its successor when it releases or
-         *               cancels. To avoid races, acquire methods must
-         *               first indicate they need a signal,
-         *               then retry the atomic acquire, and then,
-         *               on failure, block.
-         *   CANCELLED:  This node is cancelled due to timeout or interrupt.
-         *               Nodes never leave this state. In particular,
-         *               a thread with cancelled node never again blocks.
-         *   CONDITION:  This node is currently on a condition queue.
-         *               It will not be used as a sync queue node
-         *               until transferred, at which time the status
-         *               will be set to 0. (Use of this value here has
-         *               nothing to do with the other uses of the
-         *               field, but simplifies mechanics.)
-         *   PROPAGATE:  A releaseShared should be propagated to other
-         *               nodes. This is set (for head node only) in
-         *               doReleaseShared to ensure propagation
-         *               continues, even if other operations have
-         *               since intervened.
-         *   0:          None of the above
-         *
-         * The values are arranged numerically to simplify use.
-         * Non-negative values mean that a node doesn't need to
-         * signal. So, most code doesn't need to check for particular
-         * values, just for sign.
-         *
-         * The field is initialized to 0 for normal sync nodes, and
-         * CONDITION for condition nodes.  It is modified using CAS
-         * (or when possible, unconditional volatile writes).
-         */
-        volatile int waitStatus;
-
-        /**
-         * Link to predecessor node that current node/thread relies on
-         * for checking waitStatus. Assigned during enqueing, and nulled
-         * out (for sake of GC) only upon dequeuing.  Also, upon
-         * cancellation of a predecessor, we short-circuit while
-         * finding a non-cancelled one, which will always exist
-         * because the head node is never cancelled: A node becomes
-         * head only as a result of successful acquire. A
-         * cancelled thread never succeeds in acquiring, and a thread only
-         * cancels itself, not any other node.
-         */
-        volatile Node prev;
-
-        /**
-         * Link to the successor node that the current node/thread
-         * unparks upon release. Assigned during enqueuing, adjusted
-         * when bypassing cancelled predecessors, and nulled out (for
-         * sake of GC) when dequeued.  The enq operation does not
-         * assign next field of a predecessor until after attachment,
-         * so seeing a null next field does not necessarily mean that
-         * node is at end of queue. However, if a next field appears
-         * to be null, we can scan prev's from the tail to
-         * double-check.  The next field of cancelled nodes is set to
-         * point to the node itself instead of null, to make life
-         * easier for isOnSyncQueue.
-         */
-        volatile Node next;
-
-        /**
-         * The thread that enqueued this node.  Initialized on
-         * construction and nulled out after use.
-         */
-        volatile Thread thread;
-
-        /**
-         * Link to next node waiting on condition, or the special
-         * value SHARED.  Because condition queues are accessed only
-         * when holding in exclusive mode, we just need a simple
-         * linked queue to hold nodes while they are waiting on
-         * conditions. They are then transferred to the queue to
-         * re-acquire. And because conditions can only be exclusive,
-         * we save a field by using special value to indicate shared
-         * mode.
-         */
-        Node nextWaiter;
-
-        /**
-         * Returns true if node is waiting in shared mode
-         */
-        final boolean isShared() {
-            return nextWaiter == SHARED;
-        }
-
-        /**
-         * Returns previous node, or throws NullPointerException if null.
-         * Use when predecessor cannot be null.  The null check could
-         * be elided, but is present to help the VM.
-         *
-         * @return the predecessor of this node
-         */
-        final Node predecessor() throws NullPointerException {
-            Node p = prev;
-            if (p == null)
-                throw new NullPointerException();
-            else
-                return p;
-        }
-
-        Node() {    // Used to establish initial head or SHARED marker
-        }
-
-        Node(Thread thread, Node mode) {     // Used by addWaiter
-            this.nextWaiter = mode;
-            this.thread = thread;
-        }
-
-        Node(Thread thread, int waitStatus) { // Used by Condition
-            this.waitStatus = waitStatus;
-            this.thread = thread;
-        }
-    }
-
-    /**
-     * Head of the wait queue, lazily initialized.  Except for
-     * initialization, it is modified only via method setHead.  Note:
-     * If head exists, its waitStatus is guaranteed not to be
-     * CANCELLED.
-     */
-    private transient volatile Node head;
-
-    /**
-     * Tail of the wait queue, lazily initialized.  Modified only via
-     * method enq to add new wait node.
-     */
-    private transient volatile Node tail;
-
-    /**
-     * The synchronization state.
-     */
-    private volatile int state;
-
-    /**
-     * Returns the current value of synchronization state.
-     * This operation has memory semantics of a <tt>volatile</tt> read.
-     * @return current state value
-     */
-    protected final int getState() {
-        return state;
-    }
-
-    /**
-     * Sets the value of synchronization state.
-     * This operation has memory semantics of a <tt>volatile</tt> write.
-     * @param newState the new state value
-     */
-    protected final void setState(int newState) {
-        state = newState;
-    }
-
-    /**
-     * Atomically sets synchronization state to the given updated
-     * value if the current state value equals the expected value.
-     * This operation has memory semantics of a <tt>volatile</tt> read
-     * and write.
-     *
-     * @param expect the expected value
-     * @param update the new value
-     * @return true if successful. False return indicates that the actual
-     *         value was not equal to the expected value.
-     */
-    protected final boolean compareAndSetState(int expect, int update) {
-        // See below for intrinsics setup to support this
-        return unsafe.compareAndSwapInt(this, stateOffset, expect, update);
-    }
-
-    // Queuing utilities
-
-    /**
-     * The number of nanoseconds for which it is faster to spin
-     * rather than to use timed park. A rough estimate suffices
-     * to improve responsiveness with very short timeouts.
-     */
-    static final long spinForTimeoutThreshold = 1000L;
-
-    /**
-     * Inserts node into queue, initializing if necessary. See picture above.
-     * @param node the node to insert
-     * @return node's predecessor
-     */
-    private Node enq(final Node node) {
-        for (;;) {
-            Node t = tail;
-            if (t == null) { // Must initialize
-                if (compareAndSetHead(new Node()))
-                    tail = head;
-            } else {
-                node.prev = t;
-                if (compareAndSetTail(t, node)) {
-                    t.next = node;
-                    return t;
-                }
-            }
-        }
-    }
-
-    /**
-     * Creates and enqueues node for current thread and given mode.
-     *
-     * @param mode Node.EXCLUSIVE for exclusive, Node.SHARED for shared
-     * @return the new node
-     */
-    private Node addWaiter(Node mode) {
-        Node node = new Node(Thread.currentThread(), mode);
-        // Try the fast path of enq; backup to full enq on failure
-        Node pred = tail;
-        if (pred != null) {
-            node.prev = pred;
-            if (compareAndSetTail(pred, node)) {
-                pred.next = node;
-                return node;
-            }
-        }
-        enq(node);
-        return node;
-    }
-
-    /**
-     * Sets head of queue to be node, thus dequeuing. Called only by
-     * acquire methods.  Also nulls out unused fields for sake of GC
-     * and to suppress unnecessary signals and traversals.
-     *
-     * @param node the node
-     */
-    private void setHead(Node node) {
-        head = node;
-        node.thread = null;
-        node.prev = null;
-    }
-
-    /**
-     * Wakes up node's successor, if one exists.
-     *
-     * @param node the node
-     */
-    private void unparkSuccessor(Node node) {
-        /*
-         * If status is negative (i.e., possibly needing signal) try
-         * to clear in anticipation of signalling.  It is OK if this
-         * fails or if status is changed by waiting thread.
-         */
-        int ws = node.waitStatus;
-        if (ws < 0)
-            compareAndSetWaitStatus(node, ws, 0);
-
-        /*
-         * Thread to unpark is held in successor, which is normally
-         * just the next node.  But if cancelled or apparently null,
-         * traverse backwards from tail to find the actual
-         * non-cancelled successor.
-         */
-        Node s = node.next;
-        if (s == null || s.waitStatus > 0) {
-            s = null;
-            for (Node t = tail; t != null && t != node; t = t.prev)
-                if (t.waitStatus <= 0)
-                    s = t;
-        }
-        if (s != null)
-            LockSupport.unpark(s.thread);
-    }
-
-    /**
-     * Release action for shared mode -- signal successor and ensure
-     * propagation. (Note: For exclusive mode, release just amounts
-     * to calling unparkSuccessor of head if it needs signal.)
-     */
-    private void doReleaseShared() {
-        /*
-         * Ensure that a release propagates, even if there are other
-         * in-progress acquires/releases.  This proceeds in the usual
-         * way of trying to unparkSuccessor of head if it needs
-         * signal. But if it does not, status is set to PROPAGATE to
-         * ensure that upon release, propagation continues.
-         * Additionally, we must loop in case a new node is added
-         * while we are doing this. Also, unlike other uses of
-         * unparkSuccessor, we need to know if CAS to reset status
-         * fails, if so rechecking.
-         */
-        for (;;) {
-            Node h = head;
-            if (h != null && h != tail) {
-                int ws = h.waitStatus;
-                if (ws == Node.SIGNAL) {
-                    if (!compareAndSetWaitStatus(h, Node.SIGNAL, 0))
-                        continue;            // loop to recheck cases
-                    unparkSuccessor(h);
-                }
-                else if (ws == 0 &&
-                         !compareAndSetWaitStatus(h, 0, Node.PROPAGATE))
-                    continue;                // loop on failed CAS
-            }
-            if (h == head)                   // loop if head changed
-                break;
-        }
-    }
-
-    /**
-     * Sets head of queue, and checks if successor may be waiting
-     * in shared mode, if so propagating if either propagate > 0 or
-     * PROPAGATE status was set.
-     *
-     * @param node the node
-     * @param propagate the return value from a tryAcquireShared
-     */
-    private void setHeadAndPropagate(Node node, int propagate) {
-        Node h = head; // Record old head for check below
-        setHead(node);
-        /*
-         * Try to signal next queued node if:
-         *   Propagation was indicated by caller,
-         *     or was recorded (as h.waitStatus) by a previous operation
-         *     (note: this uses sign-check of waitStatus because
-         *      PROPAGATE status may transition to SIGNAL.)
-         * and
-         *   The next node is waiting in shared mode,
-         *     or we don't know, because it appears null
-         *
-         * The conservatism in both of these checks may cause
-         * unnecessary wake-ups, but only when there are multiple
-         * racing acquires/releases, so most need signals now or soon
-         * anyway.
-         */
-        if (propagate > 0 || h == null || h.waitStatus < 0) {
-            Node s = node.next;
-            if (s == null || s.isShared())
-                doReleaseShared();
-        }
-    }
-
-    // Utilities for various versions of acquire
-
-    /**
-     * Cancels an ongoing attempt to acquire.
-     *
-     * @param node the node
-     */
-    private void cancelAcquire(Node node) {
-        // Ignore if node doesn't exist
-        if (node == null)
-            return;
-
-        node.thread = null;
-
-        // Skip cancelled predecessors
-        Node pred = node.prev;
-        while (pred.waitStatus > 0)
-            node.prev = pred = pred.prev;
-
-        // predNext is the apparent node to unsplice. CASes below will
-        // fail if not, in which case, we lost race vs another cancel
-        // or signal, so no further action is necessary.
-        Node predNext = pred.next;
-
-        // Can use unconditional write instead of CAS here.
-        // After this atomic step, other Nodes can skip past us.
-        // Before, we are free of interference from other threads.
-        node.waitStatus = Node.CANCELLED;
-
-        // If we are the tail, remove ourselves.
-        if (node == tail && compareAndSetTail(node, pred)) {
-            compareAndSetNext(pred, predNext, null);
-        } else {
-            // If successor needs signal, try to set pred's next-link
-            // so it will get one. Otherwise wake it up to propagate.
-            int ws;
-            if (pred != head &&
-                ((ws = pred.waitStatus) == Node.SIGNAL ||
-                 (ws <= 0 && compareAndSetWaitStatus(pred, ws, Node.SIGNAL))) &&
-                pred.thread != null) {
-                Node next = node.next;
-                if (next != null && next.waitStatus <= 0)
-                    compareAndSetNext(pred, predNext, next);
-            } else {
-                unparkSuccessor(node);
-            }
-
-            node.next = node; // help GC
-        }
-    }
-
-    /**
-     * Checks and updates status for a node that failed to acquire.
-     * Returns true if thread should block. This is the main signal
-     * control in all acquire loops.  Requires that pred == node.prev
-     *
-     * @param pred node's predecessor holding status
-     * @param node the node
-     * @return {@code true} if thread should block
-     */
-    private static boolean shouldParkAfterFailedAcquire(Node pred, Node node) {
-        int ws = pred.waitStatus;
-        if (ws == Node.SIGNAL)
-            /*
-             * This node has already set status asking a release
-             * to signal it, so it can safely park.
-             */
-            return true;
-        if (ws > 0) {
-            /*
-             * Predecessor was cancelled. Skip over predecessors and
-             * indicate retry.
-             */
-            do {
-                node.prev = pred = pred.prev;
-            } while (pred.waitStatus > 0);
-            pred.next = node;
-        } else {
-            /*
-             * waitStatus must be 0 or PROPAGATE.  Indicate that we
-             * need a signal, but don't park yet.  Caller will need to
-             * retry to make sure it cannot acquire before parking.
-             */
-            compareAndSetWaitStatus(pred, ws, Node.SIGNAL);
-        }
-        return false;
-    }
-
-    /**
-     * Convenience method to interrupt current thread.
-     */
-    private static void selfInterrupt() {
-        Thread.currentThread().interrupt();
-    }
-
-    /**
-     * Convenience method to park and then check if interrupted
-     *
-     * @return {@code true} if interrupted
-     */
-    private final boolean parkAndCheckInterrupt() {
-        LockSupport.park(this);
-        return Thread.interrupted();
-    }
-
-    /*
-     * Various flavors of acquire, varying in exclusive/shared and
-     * control modes.  Each is mostly the same, but annoyingly
-     * different.  Only a little bit of factoring is possible due to
-     * interactions of exception mechanics (including ensuring that we
-     * cancel if tryAcquire throws exception) and other control, at
-     * least not without hurting performance too much.
-     */
-
-    /**
-     * Acquires in exclusive uninterruptible mode for thread already in
-     * queue. Used by condition wait methods as well as acquire.
-     *
-     * @param node the node
-     * @param arg the acquire argument
-     * @return {@code true} if interrupted while waiting
-     */
-    final boolean acquireQueued(final Node node, int arg) {
-        boolean failed = true;
-        try {
-            boolean interrupted = false;
-            for (;;) {
-                final Node p = node.predecessor();
-                if (p == head && tryAcquire(arg)) {
-                    setHead(node);
-                    p.next = null; // help GC
-                    failed = false;
-                    return interrupted;
-                }
-                if (shouldParkAfterFailedAcquire(p, node) &&
-                    parkAndCheckInterrupt())
-                    interrupted = true;
-            }
-        } finally {
-            if (failed)
-                cancelAcquire(node);
-        }
-    }
-
-    /**
-     * Acquires in exclusive interruptible mode.
-     * @param arg the acquire argument
-     */
-    private void doAcquireInterruptibly(int arg)
-        throws InterruptedException {
-        final Node node = addWaiter(Node.EXCLUSIVE);
-        boolean failed = true;
-        try {
-            for (;;) {
-                final Node p = node.predecessor();
-                if (p == head && tryAcquire(arg)) {
-                    setHead(node);
-                    p.next = null; // help GC
-                    failed = false;
-                    return;
-                }
-                if (shouldParkAfterFailedAcquire(p, node) &&
-                    parkAndCheckInterrupt())
-                    throw new InterruptedException();
-            }
-        } finally {
-            if (failed)
-                cancelAcquire(node);
-        }
-    }
-
-    /**
-     * Acquires in exclusive timed mode.
-     *
-     * @param arg the acquire argument
-     * @param nanosTimeout max wait time
-     * @return {@code true} if acquired
-     */
-    private boolean doAcquireNanos(int arg, long nanosTimeout)
-        throws InterruptedException {
-        long lastTime = System.nanoTime();
-        final Node node = addWaiter(Node.EXCLUSIVE);
-        boolean failed = true;
-        try {
-            for (;;) {
-                final Node p = node.predecessor();
-                if (p == head && tryAcquire(arg)) {
-                    setHead(node);
-                    p.next = null; // help GC
-                    failed = false;
-                    return true;
-                }
-                if (nanosTimeout <= 0)
-                    return false;
-                if (shouldParkAfterFailedAcquire(p, node) &&
-                    nanosTimeout > spinForTimeoutThreshold)
-                    LockSupport.parkNanos(this, nanosTimeout);
-                long now = System.nanoTime();
-                nanosTimeout -= now - lastTime;
-                lastTime = now;
-                if (Thread.interrupted())
-                    throw new InterruptedException();
-            }
-        } finally {
-            if (failed)
-                cancelAcquire(node);
-        }
-    }
-
-    /**
-     * Acquires in shared uninterruptible mode.
-     * @param arg the acquire argument
-     */
-    private void doAcquireShared(int arg) {
-        final Node node = addWaiter(Node.SHARED);
-        boolean failed = true;
-        try {
-            boolean interrupted = false;
-            for (;;) {
-                final Node p = node.predecessor();
-                if (p == head) {
-                    int r = tryAcquireShared(arg);
-                    if (r >= 0) {
-                        setHeadAndPropagate(node, r);
-                        p.next = null; // help GC
-                        if (interrupted)
-                            selfInterrupt();
-                        failed = false;
-                        return;
-                    }
-                }
-                if (shouldParkAfterFailedAcquire(p, node) &&
-                    parkAndCheckInterrupt())
-                    interrupted = true;
-            }
-        } finally {
-            if (failed)
-                cancelAcquire(node);
-        }
-    }
-
-    /**
-     * Acquires in shared interruptible mode.
-     * @param arg the acquire argument
-     */
-    private void doAcquireSharedInterruptibly(int arg)
-        throws InterruptedException {
-        final Node node = addWaiter(Node.SHARED);
-        boolean failed = true;
-        try {
-            for (;;) {
-                final Node p = node.predecessor();
-                if (p == head) {
-                    int r = tryAcquireShared(arg);
-                    if (r >= 0) {
-                        setHeadAndPropagate(node, r);
-                        p.next = null; // help GC
-                        failed = false;
-                        return;
-                    }
-                }
-                if (shouldParkAfterFailedAcquire(p, node) &&
-                    parkAndCheckInterrupt())
-                    throw new InterruptedException();
-            }
-        } finally {
-            if (failed)
-                cancelAcquire(node);
-        }
-    }
-
-    /**
-     * Acquires in shared timed mode.
-     *
-     * @param arg the acquire argument
-     * @param nanosTimeout max wait time
-     * @return {@code true} if acquired
-     */
-    private boolean doAcquireSharedNanos(int arg, long nanosTimeout)
-        throws InterruptedException {
-
-        long lastTime = System.nanoTime();
-        final Node node = addWaiter(Node.SHARED);
-        boolean failed = true;
-        try {
-            for (;;) {
-                final Node p = node.predecessor();
-                if (p == head) {
-                    int r = tryAcquireShared(arg);
-                    if (r >= 0) {
-                        setHeadAndPropagate(node, r);
-                        p.next = null; // help GC
-                        failed = false;
-                        return true;
-                    }
-                }
-                if (nanosTimeout <= 0)
-                    return false;
-                if (shouldParkAfterFailedAcquire(p, node) &&
-                    nanosTimeout > spinForTimeoutThreshold)
-                    LockSupport.parkNanos(this, nanosTimeout);
-                long now = System.nanoTime();
-                nanosTimeout -= now - lastTime;
-                lastTime = now;
-                if (Thread.interrupted())
-                    throw new InterruptedException();
-            }
-        } finally {
-            if (failed)
-                cancelAcquire(node);
-        }
-    }
-
-    // Main exported methods
-
-    /**
-     * Attempts to acquire in exclusive mode. This method should query
-     * if the state of the object permits it to be acquired in the
-     * exclusive mode, and if so to acquire it.
-     *
-     * <p>This method is always invoked by the thread performing
-     * acquire.  If this method reports failure, the acquire method
-     * may queue the thread, if it is not already queued, until it is
-     * signalled by a release from some other thread. This can be used
-     * to implement method {@link Lock#tryLock()}.
-     *
-     * <p>The default
-     * implementation throws {@link UnsupportedOperationException}.
-     *
-     * @param arg the acquire argument. This value is always the one
-     *        passed to an acquire method, or is the value saved on entry
-     *        to a condition wait.  The value is otherwise uninterpreted
-     *        and can represent anything you like.
-     * @return {@code true} if successful. Upon success, this object has
-     *         been acquired.
-     * @throws IllegalMonitorStateException if acquiring would place this
-     *         synchronizer in an illegal state. This exception must be
-     *         thrown in a consistent fashion for synchronization to work
-     *         correctly.
-     * @throws UnsupportedOperationException if exclusive mode is not supported
-     */
-    protected boolean tryAcquire(int arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Attempts to set the state to reflect a release in exclusive
-     * mode.
-     *
-     * <p>This method is always invoked by the thread performing release.
-     *
-     * <p>The default implementation throws
-     * {@link UnsupportedOperationException}.
-     *
-     * @param arg the release argument. This value is always the one
-     *        passed to a release method, or the current state value upon
-     *        entry to a condition wait.  The value is otherwise
-     *        uninterpreted and can represent anything you like.
-     * @return {@code true} if this object is now in a fully released
-     *         state, so that any waiting threads may attempt to acquire;
-     *         and {@code false} otherwise.
-     * @throws IllegalMonitorStateException if releasing would place this
-     *         synchronizer in an illegal state. This exception must be
-     *         thrown in a consistent fashion for synchronization to work
-     *         correctly.
-     * @throws UnsupportedOperationException if exclusive mode is not supported
-     */
-    protected boolean tryRelease(int arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Attempts to acquire in shared mode. This method should query if
-     * the state of the object permits it to be acquired in the shared
-     * mode, and if so to acquire it.
-     *
-     * <p>This method is always invoked by the thread performing
-     * acquire.  If this method reports failure, the acquire method
-     * may queue the thread, if it is not already queued, until it is
-     * signalled by a release from some other thread.
-     *
-     * <p>The default implementation throws {@link
-     * UnsupportedOperationException}.
-     *
-     * @param arg the acquire argument. This value is always the one
-     *        passed to an acquire method, or is the value saved on entry
-     *        to a condition wait.  The value is otherwise uninterpreted
-     *        and can represent anything you like.
-     * @return a negative value on failure; zero if acquisition in shared
-     *         mode succeeded but no subsequent shared-mode acquire can
-     *         succeed; and a positive value if acquisition in shared
-     *         mode succeeded and subsequent shared-mode acquires might
-     *         also succeed, in which case a subsequent waiting thread
-     *         must check availability. (Support for three different
-     *         return values enables this method to be used in contexts
-     *         where acquires only sometimes act exclusively.)  Upon
-     *         success, this object has been acquired.
-     * @throws IllegalMonitorStateException if acquiring would place this
-     *         synchronizer in an illegal state. This exception must be
-     *         thrown in a consistent fashion for synchronization to work
-     *         correctly.
-     * @throws UnsupportedOperationException if shared mode is not supported
-     */
-    protected int tryAcquireShared(int arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Attempts to set the state to reflect a release in shared mode.
-     *
-     * <p>This method is always invoked by the thread performing release.
-     *
-     * <p>The default implementation throws
-     * {@link UnsupportedOperationException}.
-     *
-     * @param arg the release argument. This value is always the one
-     *        passed to a release method, or the current state value upon
-     *        entry to a condition wait.  The value is otherwise
-     *        uninterpreted and can represent anything you like.
-     * @return {@code true} if this release of shared mode may permit a
-     *         waiting acquire (shared or exclusive) to succeed; and
-     *         {@code false} otherwise
-     * @throws IllegalMonitorStateException if releasing would place this
-     *         synchronizer in an illegal state. This exception must be
-     *         thrown in a consistent fashion for synchronization to work
-     *         correctly.
-     * @throws UnsupportedOperationException if shared mode is not supported
-     */
-    protected boolean tryReleaseShared(int arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns {@code true} if synchronization is held exclusively with
-     * respect to the current (calling) thread.  This method is invoked
-     * upon each call to a non-waiting {@link ConditionObject} method.
-     * (Waiting methods instead invoke {@link #release}.)
-     *
-     * <p>The default implementation throws {@link
-     * UnsupportedOperationException}. This method is invoked
-     * internally only within {@link ConditionObject} methods, so need
-     * not be defined if conditions are not used.
-     *
-     * @return {@code true} if synchronization is held exclusively;
-     *         {@code false} otherwise
-     * @throws UnsupportedOperationException if conditions are not supported
-     */
-    protected boolean isHeldExclusively() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Acquires in exclusive mode, ignoring interrupts.  Implemented
-     * by invoking at least once {@link #tryAcquire},
-     * returning on success.  Otherwise the thread is queued, possibly
-     * repeatedly blocking and unblocking, invoking {@link
-     * #tryAcquire} until success.  This method can be used
-     * to implement method {@link Lock#lock}.
-     *
-     * @param arg the acquire argument.  This value is conveyed to
-     *        {@link #tryAcquire} but is otherwise uninterpreted and
-     *        can represent anything you like.
-     */
-    public final void acquire(int arg) {
-        if (!tryAcquire(arg) &&
-            acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
-            selfInterrupt();
-    }
-
-    /**
-     * Acquires in exclusive mode, aborting if interrupted.
-     * Implemented by first checking interrupt status, then invoking
-     * at least once {@link #tryAcquire}, returning on
-     * success.  Otherwise the thread is queued, possibly repeatedly
-     * blocking and unblocking, invoking {@link #tryAcquire}
-     * until success or the thread is interrupted.  This method can be
-     * used to implement method {@link Lock#lockInterruptibly}.
-     *
-     * @param arg the acquire argument.  This value is conveyed to
-     *        {@link #tryAcquire} but is otherwise uninterpreted and
-     *        can represent anything you like.
-     * @throws InterruptedException if the current thread is interrupted
-     */
-    public final void acquireInterruptibly(int arg)
-            throws InterruptedException {
-        if (Thread.interrupted())
-            throw new InterruptedException();
-        if (!tryAcquire(arg))
-            doAcquireInterruptibly(arg);
-    }
-
-    /**
-     * Attempts to acquire in exclusive mode, aborting if interrupted,
-     * and failing if the given timeout elapses.  Implemented by first
-     * checking interrupt status, then invoking at least once {@link
-     * #tryAcquire}, returning on success.  Otherwise, the thread is
-     * queued, possibly repeatedly blocking and unblocking, invoking
-     * {@link #tryAcquire} until success or the thread is interrupted
-     * or the timeout elapses.  This method can be used to implement
-     * method {@link Lock#tryLock(long, TimeUnit)}.
-     *
-     * @param arg the acquire argument.  This value is conveyed to
-     *        {@link #tryAcquire} but is otherwise uninterpreted and
-     *        can represent anything you like.
-     * @param nanosTimeout the maximum number of nanoseconds to wait
-     * @return {@code true} if acquired; {@code false} if timed out
-     * @throws InterruptedException if the current thread is interrupted
-     */
-    public final boolean tryAcquireNanos(int arg, long nanosTimeout)
-            throws InterruptedException {
-        if (Thread.interrupted())
-            throw new InterruptedException();
-        return tryAcquire(arg) ||
-            doAcquireNanos(arg, nanosTimeout);
-    }
-
-    /**
-     * Releases in exclusive mode.  Implemented by unblocking one or
-     * more threads if {@link #tryRelease} returns true.
-     * This method can be used to implement method {@link Lock#unlock}.
-     *
-     * @param arg the release argument.  This value is conveyed to
-     *        {@link #tryRelease} but is otherwise uninterpreted and
-     *        can represent anything you like.
-     * @return the value returned from {@link #tryRelease}
-     */
-    public final boolean release(int arg) {
-        if (tryRelease(arg)) {
-            Node h = head;
-            if (h != null && h.waitStatus != 0)
-                unparkSuccessor(h);
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Acquires in shared mode, ignoring interrupts.  Implemented by
-     * first invoking at least once {@link #tryAcquireShared},
-     * returning on success.  Otherwise the thread is queued, possibly
-     * repeatedly blocking and unblocking, invoking {@link
-     * #tryAcquireShared} until success.
-     *
-     * @param arg the acquire argument.  This value is conveyed to
-     *        {@link #tryAcquireShared} but is otherwise uninterpreted
-     *        and can represent anything you like.
-     */
-    public final void acquireShared(int arg) {
-        if (tryAcquireShared(arg) < 0)
-            doAcquireShared(arg);
-    }
-
-    /**
-     * Acquires in shared mode, aborting if interrupted.  Implemented
-     * by first checking interrupt status, then invoking at least once
-     * {@link #tryAcquireShared}, returning on success.  Otherwise the
-     * thread is queued, possibly repeatedly blocking and unblocking,
-     * invoking {@link #tryAcquireShared} until success or the thread
-     * is interrupted.
-     * @param arg the acquire argument
-     * This value is conveyed to {@link #tryAcquireShared} but is
-     * otherwise uninterpreted and can represent anything
-     * you like.
-     * @throws InterruptedException if the current thread is interrupted
-     */
-    public final void acquireSharedInterruptibly(int arg)
-            throws InterruptedException {
-        if (Thread.interrupted())
-            throw new InterruptedException();
-        if (tryAcquireShared(arg) < 0)
-            doAcquireSharedInterruptibly(arg);
-    }
-
-    /**
-     * Attempts to acquire in shared mode, aborting if interrupted, and
-     * failing if the given timeout elapses.  Implemented by first
-     * checking interrupt status, then invoking at least once {@link
-     * #tryAcquireShared}, returning on success.  Otherwise, the
-     * thread is queued, possibly repeatedly blocking and unblocking,
-     * invoking {@link #tryAcquireShared} until success or the thread
-     * is interrupted or the timeout elapses.
-     *
-     * @param arg the acquire argument.  This value is conveyed to
-     *        {@link #tryAcquireShared} but is otherwise uninterpreted
-     *        and can represent anything you like.
-     * @param nanosTimeout the maximum number of nanoseconds to wait
-     * @return {@code true} if acquired; {@code false} if timed out
-     * @throws InterruptedException if the current thread is interrupted
-     */
-    public final boolean tryAcquireSharedNanos(int arg, long nanosTimeout)
-            throws InterruptedException {
-        if (Thread.interrupted())
-            throw new InterruptedException();
-        return tryAcquireShared(arg) >= 0 ||
-            doAcquireSharedNanos(arg, nanosTimeout);
-    }
-
-    /**
-     * Releases in shared mode.  Implemented by unblocking one or more
-     * threads if {@link #tryReleaseShared} returns true.
-     *
-     * @param arg the release argument.  This value is conveyed to
-     *        {@link #tryReleaseShared} but is otherwise uninterpreted
-     *        and can represent anything you like.
-     * @return the value returned from {@link #tryReleaseShared}
-     */
-    public final boolean releaseShared(int arg) {
-        if (tryReleaseShared(arg)) {
-            doReleaseShared();
-            return true;
-        }
-        return false;
-    }
-
-    // Queue inspection methods
-
-    /**
-     * Queries whether any threads are waiting to acquire. Note that
-     * because cancellations due to interrupts and timeouts may occur
-     * at any time, a {@code true} return does not guarantee that any
-     * other thread will ever acquire.
-     *
-     * <p>In this implementation, this operation returns in
-     * constant time.
-     *
-     * @return {@code true} if there may be other threads waiting to acquire
-     */
-    public final boolean hasQueuedThreads() {
-        return head != tail;
-    }
-
-    /**
-     * Queries whether any threads have ever contended to acquire this
-     * synchronizer; that is if an acquire method has ever blocked.
-     *
-     * <p>In this implementation, this operation returns in
-     * constant time.
-     *
-     * @return {@code true} if there has ever been contention
-     */
-    public final boolean hasContended() {
-        return head != null;
-    }
-
-    /**
-     * Returns the first (longest-waiting) thread in the queue, or
-     * {@code null} if no threads are currently queued.
-     *
-     * <p>In this implementation, this operation normally returns in
-     * constant time, but may iterate upon contention if other threads are
-     * concurrently modifying the queue.
-     *
-     * @return the first (longest-waiting) thread in the queue, or
-     *         {@code null} if no threads are currently queued
-     */
-    public final Thread getFirstQueuedThread() {
-        // handle only fast path, else relay
-        return (head == tail) ? null : fullGetFirstQueuedThread();
-    }
-
-    /**
-     * Version of getFirstQueuedThread called when fastpath fails
-     */
-    private Thread fullGetFirstQueuedThread() {
-        /*
-         * The first node is normally head.next. Try to get its
-         * thread field, ensuring consistent reads: If thread
-         * field is nulled out or s.prev is no longer head, then
-         * some other thread(s) concurrently performed setHead in
-         * between some of our reads. We try this twice before
-         * resorting to traversal.
-         */
-        Node h, s;
-        Thread st;
-        if (((h = head) != null && (s = h.next) != null &&
-             s.prev == head && (st = s.thread) != null) ||
-            ((h = head) != null && (s = h.next) != null &&
-             s.prev == head && (st = s.thread) != null))
-            return st;
-
-        /*
-         * Head's next field might not have been set yet, or may have
-         * been unset after setHead. So we must check to see if tail
-         * is actually first node. If not, we continue on, safely
-         * traversing from tail back to head to find first,
-         * guaranteeing termination.
-         */
-
-        Node t = tail;
-        Thread firstThread = null;
-        while (t != null && t != head) {
-            Thread tt = t.thread;
-            if (tt != null)
-                firstThread = tt;
-            t = t.prev;
-        }
-        return firstThread;
-    }
-
-    /**
-     * Returns true if the given thread is currently queued.
-     *
-     * <p>This implementation traverses the queue to determine
-     * presence of the given thread.
-     *
-     * @param thread the thread
-     * @return {@code true} if the given thread is on the queue
-     * @throws NullPointerException if the thread is null
-     */
-    public final boolean isQueued(Thread thread) {
-        if (thread == null)
-            throw new NullPointerException();
-        for (Node p = tail; p != null; p = p.prev)
-            if (p.thread == thread)
-                return true;
-        return false;
-    }
-
-    /**
-     * Returns {@code true} if the apparent first queued thread, if one
-     * exists, is waiting in exclusive mode.  If this method returns
-     * {@code true}, and the current thread is attempting to acquire in
-     * shared mode (that is, this method is invoked from {@link
-     * #tryAcquireShared}) then it is guaranteed that the current thread
-     * is not the first queued thread.  Used only as a heuristic in
-     * ReentrantReadWriteLock.
-     */
-    final boolean apparentlyFirstQueuedIsExclusive() {
-        Node h, s;
-        return (h = head) != null &&
-            (s = h.next)  != null &&
-            !s.isShared()         &&
-            s.thread != null;
-    }
-
-    /**
-     * Queries whether any threads have been waiting to acquire longer
-     * than the current thread.
-     *
-     * <p>An invocation of this method is equivalent to (but may be
-     * more efficient than):
-     *  <pre> {@code
-     * getFirstQueuedThread() != Thread.currentThread() &&
-     * hasQueuedThreads()}</pre>
-     *
-     * <p>Note that because cancellations due to interrupts and
-     * timeouts may occur at any time, a {@code true} return does not
-     * guarantee that some other thread will acquire before the current
-     * thread.  Likewise, it is possible for another thread to win a
-     * race to enqueue after this method has returned {@code false},
-     * due to the queue being empty.
-     *
-     * <p>This method is designed to be used by a fair synchronizer to
-     * avoid <a href="AbstractQueuedSynchronizer#barging">barging</a>.
-     * Such a synchronizer's {@link #tryAcquire} method should return
-     * {@code false}, and its {@link #tryAcquireShared} method should
-     * return a negative value, if this method returns {@code true}
-     * (unless this is a reentrant acquire).  For example, the {@code
-     * tryAcquire} method for a fair, reentrant, exclusive mode
-     * synchronizer might look like this:
-     *
-     *  <pre> {@code
-     * protected boolean tryAcquire(int arg) {
-     *   if (isHeldExclusively()) {
-     *     // A reentrant acquire; increment hold count
-     *     return true;
-     *   } else if (hasQueuedPredecessors()) {
-     *     return false;
-     *   } else {
-     *     // try to acquire normally
-     *   }
-     * }}</pre>
-     *
-     * @return {@code true} if there is a queued thread preceding the
-     *         current thread, and {@code false} if the current thread
-     *         is at the head of the queue or the queue is empty
-     * @since 1.7
-     */
-    public final boolean hasQueuedPredecessors() {
-        // The correctness of this depends on head being initialized
-        // before tail and on head.next being accurate if the current
-        // thread is first in queue.
-        Node t = tail; // Read fields in reverse initialization order
-        Node h = head;
-        Node s;
-        return h != t &&
-            ((s = h.next) == null || s.thread != Thread.currentThread());
-    }
-
-
-    // Instrumentation and monitoring methods
-
-    /**
-     * Returns an estimate of the number of threads waiting to
-     * acquire.  The value is only an estimate because the number of
-     * threads may change dynamically while this method traverses
-     * internal data structures.  This method is designed for use in
-     * monitoring system state, not for synchronization
-     * control.
-     *
-     * @return the estimated number of threads waiting to acquire
-     */
-    public final int getQueueLength() {
-        int n = 0;
-        for (Node p = tail; p != null; p = p.prev) {
-            if (p.thread != null)
-                ++n;
-        }
-        return n;
-    }
-
-    /**
-     * Returns a collection containing threads that may be waiting to
-     * acquire.  Because the actual set of threads may change
-     * dynamically while constructing this result, the returned
-     * collection is only a best-effort estimate.  The elements of the
-     * returned collection are in no particular order.  This method is
-     * designed to facilitate construction of subclasses that provide
-     * more extensive monitoring facilities.
-     *
-     * @return the collection of threads
-     */
-    public final Collection<Thread> getQueuedThreads() {
-        ArrayList<Thread> list = new ArrayList<Thread>();
-        for (Node p = tail; p != null; p = p.prev) {
-            Thread t = p.thread;
-            if (t != null)
-                list.add(t);
-        }
-        return list;
-    }
-
-    /**
-     * Returns a collection containing threads that may be waiting to
-     * acquire in exclusive mode. This has the same properties
-     * as {@link #getQueuedThreads} except that it only returns
-     * those threads waiting due to an exclusive acquire.
-     *
-     * @return the collection of threads
-     */
-    public final Collection<Thread> getExclusiveQueuedThreads() {
-        ArrayList<Thread> list = new ArrayList<Thread>();
-        for (Node p = tail; p != null; p = p.prev) {
-            if (!p.isShared()) {
-                Thread t = p.thread;
-                if (t != null)
-                    list.add(t);
-            }
-        }
-        return list;
-    }
-
-    /**
-     * Returns a collection containing threads that may be waiting to
-     * acquire in shared mode. This has the same properties
-     * as {@link #getQueuedThreads} except that it only returns
-     * those threads waiting due to a shared acquire.
-     *
-     * @return the collection of threads
-     */
-    public final Collection<Thread> getSharedQueuedThreads() {
-        ArrayList<Thread> list = new ArrayList<Thread>();
-        for (Node p = tail; p != null; p = p.prev) {
-            if (p.isShared()) {
-                Thread t = p.thread;
-                if (t != null)
-                    list.add(t);
-            }
-        }
-        return list;
-    }
-
-    /**
-     * Returns a string identifying this synchronizer, as well as its state.
-     * The state, in brackets, includes the String {@code "State ="}
-     * followed by the current value of {@link #getState}, and either
-     * {@code "nonempty"} or {@code "empty"} depending on whether the
-     * queue is empty.
-     *
-     * @return a string identifying this synchronizer, as well as its state
-     */
-    public String toString() {
-        int s = getState();
-        String q  = hasQueuedThreads() ? "non" : "";
-        return super.toString() +
-            "[State = " + s + ", " + q + "empty queue]";
-    }
-
-
-    // Internal support methods for Conditions
-
-    /**
-     * Returns true if a node, always one that was initially placed on
-     * a condition queue, is now waiting to reacquire on sync queue.
-     * @param node the node
-     * @return true if is reacquiring
-     */
-    final boolean isOnSyncQueue(Node node) {
-        if (node.waitStatus == Node.CONDITION || node.prev == null)
-            return false;
-        if (node.next != null) // If has successor, it must be on queue
-            return true;
-        /*
-         * node.prev can be non-null, but not yet on queue because
-         * the CAS to place it on queue can fail. So we have to
-         * traverse from tail to make sure it actually made it.  It
-         * will always be near the tail in calls to this method, and
-         * unless the CAS failed (which is unlikely), it will be
-         * there, so we hardly ever traverse much.
-         */
-        return findNodeFromTail(node);
-    }
-
-    /**
-     * Returns true if node is on sync queue by searching backwards from tail.
-     * Called only when needed by isOnSyncQueue.
-     * @return true if present
-     */
-    private boolean findNodeFromTail(Node node) {
-        Node t = tail;
-        for (;;) {
-            if (t == node)
-                return true;
-            if (t == null)
-                return false;
-            t = t.prev;
-        }
-    }
-
-    /**
-     * Transfers a node from a condition queue onto sync queue.
-     * Returns true if successful.
-     * @param node the node
-     * @return true if successfully transferred (else the node was
-     * cancelled before signal).
-     */
-    final boolean transferForSignal(Node node) {
-        /*
-         * If cannot change waitStatus, the node has been cancelled.
-         */
-        if (!compareAndSetWaitStatus(node, Node.CONDITION, 0))
-            return false;
-
-        /*
-         * Splice onto queue and try to set waitStatus of predecessor to
-         * indicate that thread is (probably) waiting. If cancelled or
-         * attempt to set waitStatus fails, wake up to resync (in which
-         * case the waitStatus can be transiently and harmlessly wrong).
-         */
-        Node p = enq(node);
-        int ws = p.waitStatus;
-        if (ws > 0 || !compareAndSetWaitStatus(p, ws, Node.SIGNAL))
-            LockSupport.unpark(node.thread);
-        return true;
-    }
-
-    /**
-     * Transfers node, if necessary, to sync queue after a cancelled
-     * wait. Returns true if thread was cancelled before being
-     * signalled.
-     * @param current the waiting thread
-     * @param node its node
-     * @return true if cancelled before the node was signalled
-     */
-    final boolean transferAfterCancelledWait(Node node) {
-        if (compareAndSetWaitStatus(node, Node.CONDITION, 0)) {
-            enq(node);
-            return true;
-        }
-        /*
-         * If we lost out to a signal(), then we can't proceed
-         * until it finishes its enq().  Cancelling during an
-         * incomplete transfer is both rare and transient, so just
-         * spin.
-         */
-        while (!isOnSyncQueue(node))
-            Thread.yield();
-        return false;
-    }
-
-    /**
-     * Invokes release with current state value; returns saved state.
-     * Cancels node and throws exception on failure.
-     * @param node the condition node for this wait
-     * @return previous sync state
-     */
-    final int fullyRelease(Node node) {
-        boolean failed = true;
-        try {
-            int savedState = getState();
-            if (release(savedState)) {
-                failed = false;
-                return savedState;
-            } else {
-                throw new IllegalMonitorStateException();
-            }
-        } finally {
-            if (failed)
-                node.waitStatus = Node.CANCELLED;
-        }
-    }
-
-    // Instrumentation methods for conditions
-
-    /**
-     * Queries whether the given ConditionObject
-     * uses this synchronizer as its lock.
-     *
-     * @param condition the condition
-     * @return <tt>true</tt> if owned
-     * @throws NullPointerException if the condition is null
-     */
-    public final boolean owns(ConditionObject condition) {
-        if (condition == null)
-            throw new NullPointerException();
-        return condition.isOwnedBy(this);
-    }
-
-    /**
-     * Queries whether any threads are waiting on the given condition
-     * associated with this synchronizer. Note that because timeouts
-     * and interrupts may occur at any time, a <tt>true</tt> return
-     * does not guarantee that a future <tt>signal</tt> will awaken
-     * any threads.  This method is designed primarily for use in
-     * monitoring of the system state.
-     *
-     * @param condition the condition
-     * @return <tt>true</tt> if there are any waiting threads
-     * @throws IllegalMonitorStateException if exclusive synchronization
-     *         is not held
-     * @throws IllegalArgumentException if the given condition is
-     *         not associated with this synchronizer
-     * @throws NullPointerException if the condition is null
-     */
-    public final boolean hasWaiters(ConditionObject condition) {
-        if (!owns(condition))
-            throw new IllegalArgumentException("Not owner");
-        return condition.hasWaiters();
-    }
-
-    /**
-     * Returns an estimate of the number of threads waiting on the
-     * given condition associated with this synchronizer. Note that
-     * because timeouts and interrupts may occur at any time, the
-     * estimate serves only as an upper bound on the actual number of
-     * waiters.  This method is designed for use in monitoring of the
-     * system state, not for synchronization control.
-     *
-     * @param condition the condition
-     * @return the estimated number of waiting threads
-     * @throws IllegalMonitorStateException if exclusive synchronization
-     *         is not held
-     * @throws IllegalArgumentException if the given condition is
-     *         not associated with this synchronizer
-     * @throws NullPointerException if the condition is null
-     */
-    public final int getWaitQueueLength(ConditionObject condition) {
-        if (!owns(condition))
-            throw new IllegalArgumentException("Not owner");
-        return condition.getWaitQueueLength();
-    }
-
-    /**
-     * Returns a collection containing those threads that may be
-     * waiting on the given condition associated with this
-     * synchronizer.  Because the actual set of threads may change
-     * dynamically while constructing this result, the returned
-     * collection is only a best-effort estimate. The elements of the
-     * returned collection are in no particular order.
-     *
-     * @param condition the condition
-     * @return the collection of threads
-     * @throws IllegalMonitorStateException if exclusive synchronization
-     *         is not held
-     * @throws IllegalArgumentException if the given condition is
-     *         not associated with this synchronizer
-     * @throws NullPointerException if the condition is null
-     */
-    public final Collection<Thread> getWaitingThreads(ConditionObject condition) {
-        if (!owns(condition))
-            throw new IllegalArgumentException("Not owner");
-        return condition.getWaitingThreads();
-    }
-
-    /**
-     * Condition implementation for a {@link
-     * AbstractQueuedSynchronizer} serving as the basis of a {@link
-     * Lock} implementation.
-     *
-     * <p>Method documentation for this class describes mechanics,
-     * not behavioral specifications from the point of view of Lock
-     * and Condition users. Exported versions of this class will in
-     * general need to be accompanied by documentation describing
-     * condition semantics that rely on those of the associated
-     * <tt>AbstractQueuedSynchronizer</tt>.
-     *
-     * <p>This class is Serializable, but all fields are transient,
-     * so deserialized conditions have no waiters.
-     */
-    public class ConditionObject implements Condition, java.io.Serializable {
-        private static final long serialVersionUID = 1173984872572414699L;
-        /** First node of condition queue. */
-        private transient Node firstWaiter;
-        /** Last node of condition queue. */
-        private transient Node lastWaiter;
-
-        /**
-         * Creates a new <tt>ConditionObject</tt> instance.
-         */
-        public ConditionObject() { }
-
-        // Internal methods
-
-        /**
-         * Adds a new waiter to wait queue.
-         * @return its new wait node
-         */
-        private Node addConditionWaiter() {
-            Node t = lastWaiter;
-            // If lastWaiter is cancelled, clean out.
-            if (t != null && t.waitStatus != Node.CONDITION) {
-                unlinkCancelledWaiters();
-                t = lastWaiter;
-            }
-            Node node = new Node(Thread.currentThread(), Node.CONDITION);
-            if (t == null)
-                firstWaiter = node;
-            else
-                t.nextWaiter = node;
-            lastWaiter = node;
-            return node;
-        }
-
-        /**
-         * Removes and transfers nodes until hit non-cancelled one or
-         * null. Split out from signal in part to encourage compilers
-         * to inline the case of no waiters.
-         * @param first (non-null) the first node on condition queue
-         */
-        private void doSignal(Node first) {
-            do {
-                if ( (firstWaiter = first.nextWaiter) == null)
-                    lastWaiter = null;
-                first.nextWaiter = null;
-            } while (!transferForSignal(first) &&
-                     (first = firstWaiter) != null);
-        }
-
-        /**
-         * Removes and transfers all nodes.
-         * @param first (non-null) the first node on condition queue
-         */
-        private void doSignalAll(Node first) {
-            lastWaiter = firstWaiter = null;
-            do {
-                Node next = first.nextWaiter;
-                first.nextWaiter = null;
-                transferForSignal(first);
-                first = next;
-            } while (first != null);
-        }
-
-        /**
-         * Unlinks cancelled waiter nodes from condition queue.
-         * Called only while holding lock. This is called when
-         * cancellation occurred during condition wait, and upon
-         * insertion of a new waiter when lastWaiter is seen to have
-         * been cancelled. This method is needed to avoid garbage
-         * retention in the absence of signals. So even though it may
-         * require a full traversal, it comes into play only when
-         * timeouts or cancellations occur in the absence of
-         * signals. It traverses all nodes rather than stopping at a
-         * particular target to unlink all pointers to garbage nodes
-         * without requiring many re-traversals during cancellation
-         * storms.
-         */
-        private void unlinkCancelledWaiters() {
-            Node t = firstWaiter;
-            Node trail = null;
-            while (t != null) {
-                Node next = t.nextWaiter;
-                if (t.waitStatus != Node.CONDITION) {
-                    t.nextWaiter = null;
-                    if (trail == null)
-                        firstWaiter = next;
-                    else
-                        trail.nextWaiter = next;
-                    if (next == null)
-                        lastWaiter = trail;
-                }
-                else
-                    trail = t;
-                t = next;
-            }
-        }
-
-        // public methods
-
-        /**
-         * Moves the longest-waiting thread, if one exists, from the
-         * wait queue for this condition to the wait queue for the
-         * owning lock.
-         *
-         * @throws IllegalMonitorStateException if {@link #isHeldExclusively}
-         *         returns {@code false}
-         */
-        public final void signal() {
-            if (!isHeldExclusively())
-                throw new IllegalMonitorStateException();
-            Node first = firstWaiter;
-            if (first != null)
-                doSignal(first);
-        }
-
-        /**
-         * Moves all threads from the wait queue for this condition to
-         * the wait queue for the owning lock.
-         *
-         * @throws IllegalMonitorStateException if {@link #isHeldExclusively}
-         *         returns {@code false}
-         */
-        public final void signalAll() {
-            if (!isHeldExclusively())
-                throw new IllegalMonitorStateException();
-            Node first = firstWaiter;
-            if (first != null)
-                doSignalAll(first);
-        }
-
-        /**
-         * Implements uninterruptible condition wait.
-         * <ol>
-         * <li> Save lock state returned by {@link #getState}.
-         * <li> Invoke {@link #release} with
-         *      saved state as argument, throwing
-         *      IllegalMonitorStateException if it fails.
-         * <li> Block until signalled.
-         * <li> Reacquire by invoking specialized version of
-         *      {@link #acquire} with saved state as argument.
-         * </ol>
-         */
-        public final void awaitUninterruptibly() {
-            Node node = addConditionWaiter();
-            int savedState = fullyRelease(node);
-            boolean interrupted = false;
-            while (!isOnSyncQueue(node)) {
-                LockSupport.park(this);
-                if (Thread.interrupted())
-                    interrupted = true;
-            }
-            if (acquireQueued(node, savedState) || interrupted)
-                selfInterrupt();
-        }
-
-        /*
-         * For interruptible waits, we need to track whether to throw
-         * InterruptedException, if interrupted while blocked on
-         * condition, versus reinterrupt current thread, if
-         * interrupted while blocked waiting to re-acquire.
-         */
-
-        /** Mode meaning to reinterrupt on exit from wait */
-        private static final int REINTERRUPT =  1;
-        /** Mode meaning to throw InterruptedException on exit from wait */
-        private static final int THROW_IE    = -1;
-
-        /**
-         * Checks for interrupt, returning THROW_IE if interrupted
-         * before signalled, REINTERRUPT if after signalled, or
-         * 0 if not interrupted.
-         */
-        private int checkInterruptWhileWaiting(Node node) {
-            return Thread.interrupted() ?
-                (transferAfterCancelledWait(node) ? THROW_IE : REINTERRUPT) :
-                0;
-        }
-
-        /**
-         * Throws InterruptedException, reinterrupts current thread, or
-         * does nothing, depending on mode.
-         */
-        private void reportInterruptAfterWait(int interruptMode)
-            throws InterruptedException {
-            if (interruptMode == THROW_IE)
-                throw new InterruptedException();
-            else if (interruptMode == REINTERRUPT)
-                selfInterrupt();
-        }
-
-        /**
-         * Implements interruptible condition wait.
-         * <ol>
-         * <li> If current thread is interrupted, throw InterruptedException.
-         * <li> Save lock state returned by {@link #getState}.
-         * <li> Invoke {@link #release} with
-         *      saved state as argument, throwing
-         *      IllegalMonitorStateException if it fails.
-         * <li> Block until signalled or interrupted.
-         * <li> Reacquire by invoking specialized version of
-         *      {@link #acquire} with saved state as argument.
-         * <li> If interrupted while blocked in step 4, throw InterruptedException.
-         * </ol>
-         */
-        public final void await() throws InterruptedException {
-            if (Thread.interrupted())
-                throw new InterruptedException();
-            Node node = addConditionWaiter();
-            int savedState = fullyRelease(node);
-            int interruptMode = 0;
-            while (!isOnSyncQueue(node)) {
-                LockSupport.park(this);
-                if ((interruptMode = checkInterruptWhileWaiting(node)) != 0)
-                    break;
-            }
-            if (acquireQueued(node, savedState) && interruptMode != THROW_IE)
-                interruptMode = REINTERRUPT;
-            if (node.nextWaiter != null) // clean up if cancelled
-                unlinkCancelledWaiters();
-            if (interruptMode != 0)
-                reportInterruptAfterWait(interruptMode);
-        }
-
-        /**
-         * Implements timed condition wait.
-         * <ol>
-         * <li> If current thread is interrupted, throw InterruptedException.
-         * <li> Save lock state returned by {@link #getState}.
-         * <li> Invoke {@link #release} with
-         *      saved state as argument, throwing
-         *      IllegalMonitorStateException if it fails.
-         * <li> Block until signalled, interrupted, or timed out.
-         * <li> Reacquire by invoking specialized version of
-         *      {@link #acquire} with saved state as argument.
-         * <li> If interrupted while blocked in step 4, throw InterruptedException.
-         * </ol>
-         */
-        public final long awaitNanos(long nanosTimeout)
-                throws InterruptedException {
-            if (Thread.interrupted())
-                throw new InterruptedException();
-            Node node = addConditionWaiter();
-            int savedState = fullyRelease(node);
-            long lastTime = System.nanoTime();
-            int interruptMode = 0;
-            while (!isOnSyncQueue(node)) {
-                if (nanosTimeout <= 0L) {
-                    transferAfterCancelledWait(node);
-                    break;
-                }
-                LockSupport.parkNanos(this, nanosTimeout);
-                if ((interruptMode = checkInterruptWhileWaiting(node)) != 0)
-                    break;
-
-                long now = System.nanoTime();
-                nanosTimeout -= now - lastTime;
-                lastTime = now;
-            }
-            if (acquireQueued(node, savedState) && interruptMode != THROW_IE)
-                interruptMode = REINTERRUPT;
-            if (node.nextWaiter != null)
-                unlinkCancelledWaiters();
-            if (interruptMode != 0)
-                reportInterruptAfterWait(interruptMode);
-            return nanosTimeout - (System.nanoTime() - lastTime);
-        }
-
-        /**
-         * Implements absolute timed condition wait.
-         * <ol>
-         * <li> If current thread is interrupted, throw InterruptedException.
-         * <li> Save lock state returned by {@link #getState}.
-         * <li> Invoke {@link #release} with
-         *      saved state as argument, throwing
-         *      IllegalMonitorStateException if it fails.
-         * <li> Block until signalled, interrupted, or timed out.
-         * <li> Reacquire by invoking specialized version of
-         *      {@link #acquire} with saved state as argument.
-         * <li> If interrupted while blocked in step 4, throw InterruptedException.
-         * <li> If timed out while blocked in step 4, return false, else true.
-         * </ol>
-         */
-        public final boolean awaitUntil(Date deadline)
-                throws InterruptedException {
-            if (deadline == null)
-                throw new NullPointerException();
-            long abstime = deadline.getTime();
-            if (Thread.interrupted())
-                throw new InterruptedException();
-            Node node = addConditionWaiter();
-            int savedState = fullyRelease(node);
-            boolean timedout = false;
-            int interruptMode = 0;
-            while (!isOnSyncQueue(node)) {
-                if (System.currentTimeMillis() > abstime) {
-                    timedout = transferAfterCancelledWait(node);
-                    break;
-                }
-                LockSupport.parkUntil(this, abstime);
-                if ((interruptMode = checkInterruptWhileWaiting(node)) != 0)
-                    break;
-            }
-            if (acquireQueued(node, savedState) && interruptMode != THROW_IE)
-                interruptMode = REINTERRUPT;
-            if (node.nextWaiter != null)
-                unlinkCancelledWaiters();
-            if (interruptMode != 0)
-                reportInterruptAfterWait(interruptMode);
-            return !timedout;
-        }
-
-        /**
-         * Implements timed condition wait.
-         * <ol>
-         * <li> If current thread is interrupted, throw InterruptedException.
-         * <li> Save lock state returned by {@link #getState}.
-         * <li> Invoke {@link #release} with
-         *      saved state as argument, throwing
-         *      IllegalMonitorStateException if it fails.
-         * <li> Block until signalled, interrupted, or timed out.
-         * <li> Reacquire by invoking specialized version of
-         *      {@link #acquire} with saved state as argument.
-         * <li> If interrupted while blocked in step 4, throw InterruptedException.
-         * <li> If timed out while blocked in step 4, return false, else true.
-         * </ol>
-         */
-        public final boolean await(long time, TimeUnit unit)
-                throws InterruptedException {
-            if (unit == null)
-                throw new NullPointerException();
-            long nanosTimeout = unit.toNanos(time);
-            if (Thread.interrupted())
-                throw new InterruptedException();
-            Node node = addConditionWaiter();
-            int savedState = fullyRelease(node);
-            long lastTime = System.nanoTime();
-            boolean timedout = false;
-            int interruptMode = 0;
-            while (!isOnSyncQueue(node)) {
-                if (nanosTimeout <= 0L) {
-                    timedout = transferAfterCancelledWait(node);
-                    break;
-                }
-                if (nanosTimeout >= spinForTimeoutThreshold)
-                    LockSupport.parkNanos(this, nanosTimeout);
-                if ((interruptMode = checkInterruptWhileWaiting(node)) != 0)
-                    break;
-                long now = System.nanoTime();
-                nanosTimeout -= now - lastTime;
-                lastTime = now;
-            }
-            if (acquireQueued(node, savedState) && interruptMode != THROW_IE)
-                interruptMode = REINTERRUPT;
-            if (node.nextWaiter != null)
-                unlinkCancelledWaiters();
-            if (interruptMode != 0)
-                reportInterruptAfterWait(interruptMode);
-            return !timedout;
-        }
-
-        //  support for instrumentation
-
-        /**
-         * Returns true if this condition was created by the given
-         * synchronization object.
-         *
-         * @return {@code true} if owned
-         */
-        final boolean isOwnedBy(AbstractQueuedSynchronizer sync) {
-            return sync == AbstractQueuedSynchronizer.this;
-        }
-
-        /**
-         * Queries whether any threads are waiting on this condition.
-         * Implements {@link AbstractQueuedSynchronizer#hasWaiters}.
-         *
-         * @return {@code true} if there are any waiting threads
-         * @throws IllegalMonitorStateException if {@link #isHeldExclusively}
-         *         returns {@code false}
-         */
-        protected final boolean hasWaiters() {
-            if (!isHeldExclusively())
-                throw new IllegalMonitorStateException();
-            for (Node w = firstWaiter; w != null; w = w.nextWaiter) {
-                if (w.waitStatus == Node.CONDITION)
-                    return true;
-            }
-            return false;
-        }
-
-        /**
-         * Returns an estimate of the number of threads waiting on
-         * this condition.
-         * Implements {@link AbstractQueuedSynchronizer#getWaitQueueLength}.
-         *
-         * @return the estimated number of waiting threads
-         * @throws IllegalMonitorStateException if {@link #isHeldExclusively}
-         *         returns {@code false}
-         */
-        protected final int getWaitQueueLength() {
-            if (!isHeldExclusively())
-                throw new IllegalMonitorStateException();
-            int n = 0;
-            for (Node w = firstWaiter; w != null; w = w.nextWaiter) {
-                if (w.waitStatus == Node.CONDITION)
-                    ++n;
-            }
-            return n;
-        }
-
-        /**
-         * Returns a collection containing those threads that may be
-         * waiting on this Condition.
-         * Implements {@link AbstractQueuedSynchronizer#getWaitingThreads}.
-         *
-         * @return the collection of threads
-         * @throws IllegalMonitorStateException if {@link #isHeldExclusively}
-         *         returns {@code false}
-         */
-        protected final Collection<Thread> getWaitingThreads() {
-            if (!isHeldExclusively())
-                throw new IllegalMonitorStateException();
-            ArrayList<Thread> list = new ArrayList<Thread>();
-            for (Node w = firstWaiter; w != null; w = w.nextWaiter) {
-                if (w.waitStatus == Node.CONDITION) {
-                    Thread t = w.thread;
-                    if (t != null)
-                        list.add(t);
-                }
-            }
-            return list;
-        }
-    }
-
-    /**
-     * Setup to support compareAndSet. We need to natively implement
-     * this here: For the sake of permitting future enhancements, we
-     * cannot explicitly subclass AtomicInteger, which would be
-     * efficient and useful otherwise. So, as the lesser of evils, we
-     * natively implement using hotspot intrinsics API. And while we
-     * are at it, we do the same for other CASable fields (which could
-     * otherwise be done with atomic field updaters).
-     */
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-    private static final long stateOffset;
-    private static final long headOffset;
-    private static final long tailOffset;
-    private static final long waitStatusOffset;
-    private static final long nextOffset;
-
-    static {
-        try {
-            stateOffset = unsafe.objectFieldOffset
-                (AbstractQueuedSynchronizer.class.getDeclaredField("state"));
-            headOffset = unsafe.objectFieldOffset
-                (AbstractQueuedSynchronizer.class.getDeclaredField("head"));
-            tailOffset = unsafe.objectFieldOffset
-                (AbstractQueuedSynchronizer.class.getDeclaredField("tail"));
-            waitStatusOffset = unsafe.objectFieldOffset
-                (Node.class.getDeclaredField("waitStatus"));
-            nextOffset = unsafe.objectFieldOffset
-                (Node.class.getDeclaredField("next"));
-
-        } catch (Exception ex) { throw new Error(ex); }
-    }
-
-    /**
-     * CAS head field. Used only by enq.
-     */
-    private final boolean compareAndSetHead(Node update) {
-        return unsafe.compareAndSwapObject(this, headOffset, null, update);
-    }
-
-    /**
-     * CAS tail field. Used only by enq.
-     */
-    private final boolean compareAndSetTail(Node expect, Node update) {
-        return unsafe.compareAndSwapObject(this, tailOffset, expect, update);
-    }
-
-    /**
-     * CAS waitStatus field of a node.
-     */
-    private static final boolean compareAndSetWaitStatus(Node node,
-                                                         int expect,
-                                                         int update) {
-        return unsafe.compareAndSwapInt(node, waitStatusOffset,
-                                        expect, update);
-    }
-
-    /**
-     * CAS next field of a node.
-     */
-    private static final boolean compareAndSetNext(Node node,
-                                                   Node expect,
-                                                   Node update) {
-        return unsafe.compareAndSwapObject(node, nextOffset, expect, update);
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/locks/Condition.java b/ojluni/src/main/java/java/util/concurrent/locks/Condition.java
deleted file mode 100755
index 8bdbede..0000000
--- a/ojluni/src/main/java/java/util/concurrent/locks/Condition.java
+++ /dev/null
@@ -1,488 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.locks;
-import java.util.concurrent.*;
-import java.util.Date;
-
-/**
- * {@code Condition} factors out the {@code Object} monitor
- * methods ({@link Object#wait() wait}, {@link Object#notify notify}
- * and {@link Object#notifyAll notifyAll}) into distinct objects to
- * give the effect of having multiple wait-sets per object, by
- * combining them with the use of arbitrary {@link Lock} implementations.
- * Where a {@code Lock} replaces the use of {@code synchronized} methods
- * and statements, a {@code Condition} replaces the use of the Object
- * monitor methods.
- *
- * <p>Conditions (also known as <em>condition queues</em> or
- * <em>condition variables</em>) provide a means for one thread to
- * suspend execution (to &quot;wait&quot;) until notified by another
- * thread that some state condition may now be true.  Because access
- * to this shared state information occurs in different threads, it
- * must be protected, so a lock of some form is associated with the
- * condition. The key property that waiting for a condition provides
- * is that it <em>atomically</em> releases the associated lock and
- * suspends the current thread, just like {@code Object.wait}.
- *
- * <p>A {@code Condition} instance is intrinsically bound to a lock.
- * To obtain a {@code Condition} instance for a particular {@link Lock}
- * instance use its {@link Lock#newCondition newCondition()} method.
- *
- * <p>As an example, suppose we have a bounded buffer which supports
- * {@code put} and {@code take} methods.  If a
- * {@code take} is attempted on an empty buffer, then the thread will block
- * until an item becomes available; if a {@code put} is attempted on a
- * full buffer, then the thread will block until a space becomes available.
- * We would like to keep waiting {@code put} threads and {@code take}
- * threads in separate wait-sets so that we can use the optimization of
- * only notifying a single thread at a time when items or spaces become
- * available in the buffer. This can be achieved using two
- * {@link Condition} instances.
- * <pre>
- * class BoundedBuffer {
- *   <b>final Lock lock = new ReentrantLock();</b>
- *   final Condition notFull  = <b>lock.newCondition(); </b>
- *   final Condition notEmpty = <b>lock.newCondition(); </b>
- *
- *   final Object[] items = new Object[100];
- *   int putptr, takeptr, count;
- *
- *   public void put(Object x) throws InterruptedException {
- *     <b>lock.lock();
- *     try {</b>
- *       while (count == items.length)
- *         <b>notFull.await();</b>
- *       items[putptr] = x;
- *       if (++putptr == items.length) putptr = 0;
- *       ++count;
- *       <b>notEmpty.signal();</b>
- *     <b>} finally {
- *       lock.unlock();
- *     }</b>
- *   }
- *
- *   public Object take() throws InterruptedException {
- *     <b>lock.lock();
- *     try {</b>
- *       while (count == 0)
- *         <b>notEmpty.await();</b>
- *       Object x = items[takeptr];
- *       if (++takeptr == items.length) takeptr = 0;
- *       --count;
- *       <b>notFull.signal();</b>
- *       return x;
- *     <b>} finally {
- *       lock.unlock();
- *     }</b>
- *   }
- * }
- * </pre>
- *
- * (The {@link java.util.concurrent.ArrayBlockingQueue} class provides
- * this functionality, so there is no reason to implement this
- * sample usage class.)
- *
- * <p>A {@code Condition} implementation can provide behavior and semantics
- * that is
- * different from that of the {@code Object} monitor methods, such as
- * guaranteed ordering for notifications, or not requiring a lock to be held
- * when performing notifications.
- * If an implementation provides such specialized semantics then the
- * implementation must document those semantics.
- *
- * <p>Note that {@code Condition} instances are just normal objects and can
- * themselves be used as the target in a {@code synchronized} statement,
- * and can have their own monitor {@link Object#wait wait} and
- * {@link Object#notify notification} methods invoked.
- * Acquiring the monitor lock of a {@code Condition} instance, or using its
- * monitor methods, has no specified relationship with acquiring the
- * {@link Lock} associated with that {@code Condition} or the use of its
- * {@linkplain #await waiting} and {@linkplain #signal signalling} methods.
- * It is recommended that to avoid confusion you never use {@code Condition}
- * instances in this way, except perhaps within their own implementation.
- *
- * <p>Except where noted, passing a {@code null} value for any parameter
- * will result in a {@link NullPointerException} being thrown.
- *
- * <h3>Implementation Considerations</h3>
- *
- * <p>When waiting upon a {@code Condition}, a &quot;<em>spurious
- * wakeup</em>&quot; is permitted to occur, in
- * general, as a concession to the underlying platform semantics.
- * This has little practical impact on most application programs as a
- * {@code Condition} should always be waited upon in a loop, testing
- * the state predicate that is being waited for.  An implementation is
- * free to remove the possibility of spurious wakeups but it is
- * recommended that applications programmers always assume that they can
- * occur and so always wait in a loop.
- *
- * <p>The three forms of condition waiting
- * (interruptible, non-interruptible, and timed) may differ in their ease of
- * implementation on some platforms and in their performance characteristics.
- * In particular, it may be difficult to provide these features and maintain
- * specific semantics such as ordering guarantees.
- * Further, the ability to interrupt the actual suspension of the thread may
- * not always be feasible to implement on all platforms.
- *
- * <p>Consequently, an implementation is not required to define exactly the
- * same guarantees or semantics for all three forms of waiting, nor is it
- * required to support interruption of the actual suspension of the thread.
- *
- * <p>An implementation is required to
- * clearly document the semantics and guarantees provided by each of the
- * waiting methods, and when an implementation does support interruption of
- * thread suspension then it must obey the interruption semantics as defined
- * in this interface.
- *
- * <p>As interruption generally implies cancellation, and checks for
- * interruption are often infrequent, an implementation can favor responding
- * to an interrupt over normal method return. This is true even if it can be
- * shown that the interrupt occurred after another action that may have
- * unblocked the thread. An implementation should document this behavior.
- *
- * @since 1.5
- * @author Doug Lea
- */
-public interface Condition {
-
-    /**
-     * Causes the current thread to wait until it is signalled or
-     * {@linkplain Thread#interrupt interrupted}.
-     *
-     * <p>The lock associated with this {@code Condition} is atomically
-     * released and the current thread becomes disabled for thread scheduling
-     * purposes and lies dormant until <em>one</em> of four things happens:
-     * <ul>
-     * <li>Some other thread invokes the {@link #signal} method for this
-     * {@code Condition} and the current thread happens to be chosen as the
-     * thread to be awakened; or
-     * <li>Some other thread invokes the {@link #signalAll} method for this
-     * {@code Condition}; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts} the
-     * current thread, and interruption of thread suspension is supported; or
-     * <li>A &quot;<em>spurious wakeup</em>&quot; occurs.
-     * </ul>
-     *
-     * <p>In all cases, before this method can return the current thread must
-     * re-acquire the lock associated with this condition. When the
-     * thread returns it is <em>guaranteed</em> to hold this lock.
-     *
-     * <p>If the current thread:
-     * <ul>
-     * <li>has its interrupted status set on entry to this method; or
-     * <li>is {@linkplain Thread#interrupt interrupted} while waiting
-     * and interruption of thread suspension is supported,
-     * </ul>
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared. It is not specified, in the first
-     * case, whether or not the test for interruption occurs before the lock
-     * is released.
-     *
-     * <p><b>Implementation Considerations</b>
-     *
-     * <p>The current thread is assumed to hold the lock associated with this
-     * {@code Condition} when this method is called.
-     * It is up to the implementation to determine if this is
-     * the case and if not, how to respond. Typically, an exception will be
-     * thrown (such as {@link IllegalMonitorStateException}) and the
-     * implementation must document that fact.
-     *
-     * <p>An implementation can favor responding to an interrupt over normal
-     * method return in response to a signal. In that case the implementation
-     * must ensure that the signal is redirected to another waiting thread, if
-     * there is one.
-     *
-     * @throws InterruptedException if the current thread is interrupted
-     *         (and interruption of thread suspension is supported)
-     */
-    void await() throws InterruptedException;
-
-    /**
-     * Causes the current thread to wait until it is signalled.
-     *
-     * <p>The lock associated with this condition is atomically
-     * released and the current thread becomes disabled for thread scheduling
-     * purposes and lies dormant until <em>one</em> of three things happens:
-     * <ul>
-     * <li>Some other thread invokes the {@link #signal} method for this
-     * {@code Condition} and the current thread happens to be chosen as the
-     * thread to be awakened; or
-     * <li>Some other thread invokes the {@link #signalAll} method for this
-     * {@code Condition}; or
-     * <li>A &quot;<em>spurious wakeup</em>&quot; occurs.
-     * </ul>
-     *
-     * <p>In all cases, before this method can return the current thread must
-     * re-acquire the lock associated with this condition. When the
-     * thread returns it is <em>guaranteed</em> to hold this lock.
-     *
-     * <p>If the current thread's interrupted status is set when it enters
-     * this method, or it is {@linkplain Thread#interrupt interrupted}
-     * while waiting, it will continue to wait until signalled. When it finally
-     * returns from this method its interrupted status will still
-     * be set.
-     *
-     * <p><b>Implementation Considerations</b>
-     *
-     * <p>The current thread is assumed to hold the lock associated with this
-     * {@code Condition} when this method is called.
-     * It is up to the implementation to determine if this is
-     * the case and if not, how to respond. Typically, an exception will be
-     * thrown (such as {@link IllegalMonitorStateException}) and the
-     * implementation must document that fact.
-     */
-    void awaitUninterruptibly();
-
-    /**
-     * Causes the current thread to wait until it is signalled or interrupted,
-     * or the specified waiting time elapses.
-     *
-     * <p>The lock associated with this condition is atomically
-     * released and the current thread becomes disabled for thread scheduling
-     * purposes and lies dormant until <em>one</em> of five things happens:
-     * <ul>
-     * <li>Some other thread invokes the {@link #signal} method for this
-     * {@code Condition} and the current thread happens to be chosen as the
-     * thread to be awakened; or
-     * <li>Some other thread invokes the {@link #signalAll} method for this
-     * {@code Condition}; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts} the
-     * current thread, and interruption of thread suspension is supported; or
-     * <li>The specified waiting time elapses; or
-     * <li>A &quot;<em>spurious wakeup</em>&quot; occurs.
-     * </ul>
-     *
-     * <p>In all cases, before this method can return the current thread must
-     * re-acquire the lock associated with this condition. When the
-     * thread returns it is <em>guaranteed</em> to hold this lock.
-     *
-     * <p>If the current thread:
-     * <ul>
-     * <li>has its interrupted status set on entry to this method; or
-     * <li>is {@linkplain Thread#interrupt interrupted} while waiting
-     * and interruption of thread suspension is supported,
-     * </ul>
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared. It is not specified, in the first
-     * case, whether or not the test for interruption occurs before the lock
-     * is released.
-     *
-     * <p>The method returns an estimate of the number of nanoseconds
-     * remaining to wait given the supplied {@code nanosTimeout}
-     * value upon return, or a value less than or equal to zero if it
-     * timed out. This value can be used to determine whether and how
-     * long to re-wait in cases where the wait returns but an awaited
-     * condition still does not hold. Typical uses of this method take
-     * the following form:
-     *
-     *  <pre> {@code
-     * boolean aMethod(long timeout, TimeUnit unit) {
-     *   long nanos = unit.toNanos(timeout);
-     *   lock.lock();
-     *   try {
-     *     while (!conditionBeingWaitedFor()) {
-     *       if (nanos <= 0L)
-     *         return false;
-     *       nanos = theCondition.awaitNanos(nanos);
-     *     }
-     *     // ...
-     *   } finally {
-     *     lock.unlock();
-     *   }
-     * }}</pre>
-     *
-     * <p> Design note: This method requires a nanosecond argument so
-     * as to avoid truncation errors in reporting remaining times.
-     * Such precision loss would make it difficult for programmers to
-     * ensure that total waiting times are not systematically shorter
-     * than specified when re-waits occur.
-     *
-     * <p><b>Implementation Considerations</b>
-     *
-     * <p>The current thread is assumed to hold the lock associated with this
-     * {@code Condition} when this method is called.
-     * It is up to the implementation to determine if this is
-     * the case and if not, how to respond. Typically, an exception will be
-     * thrown (such as {@link IllegalMonitorStateException}) and the
-     * implementation must document that fact.
-     *
-     * <p>An implementation can favor responding to an interrupt over normal
-     * method return in response to a signal, or over indicating the elapse
-     * of the specified waiting time. In either case the implementation
-     * must ensure that the signal is redirected to another waiting thread, if
-     * there is one.
-     *
-     * @param nanosTimeout the maximum time to wait, in nanoseconds
-     * @return an estimate of the {@code nanosTimeout} value minus
-     *         the time spent waiting upon return from this method.
-     *         A positive value may be used as the argument to a
-     *         subsequent call to this method to finish waiting out
-     *         the desired time.  A value less than or equal to zero
-     *         indicates that no time remains.
-     * @throws InterruptedException if the current thread is interrupted
-     *         (and interruption of thread suspension is supported)
-     */
-    long awaitNanos(long nanosTimeout) throws InterruptedException;
-
-    /**
-     * Causes the current thread to wait until it is signalled or interrupted,
-     * or the specified waiting time elapses. This method is behaviorally
-     * equivalent to:<br>
-     * <pre>
-     *   awaitNanos(unit.toNanos(time)) &gt; 0
-     * </pre>
-     * @param time the maximum time to wait
-     * @param unit the time unit of the {@code time} argument
-     * @return {@code false} if the waiting time detectably elapsed
-     *         before return from the method, else {@code true}
-     * @throws InterruptedException if the current thread is interrupted
-     *         (and interruption of thread suspension is supported)
-     */
-    boolean await(long time, TimeUnit unit) throws InterruptedException;
-
-    /**
-     * Causes the current thread to wait until it is signalled or interrupted,
-     * or the specified deadline elapses.
-     *
-     * <p>The lock associated with this condition is atomically
-     * released and the current thread becomes disabled for thread scheduling
-     * purposes and lies dormant until <em>one</em> of five things happens:
-     * <ul>
-     * <li>Some other thread invokes the {@link #signal} method for this
-     * {@code Condition} and the current thread happens to be chosen as the
-     * thread to be awakened; or
-     * <li>Some other thread invokes the {@link #signalAll} method for this
-     * {@code Condition}; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts} the
-     * current thread, and interruption of thread suspension is supported; or
-     * <li>The specified deadline elapses; or
-     * <li>A &quot;<em>spurious wakeup</em>&quot; occurs.
-     * </ul>
-     *
-     * <p>In all cases, before this method can return the current thread must
-     * re-acquire the lock associated with this condition. When the
-     * thread returns it is <em>guaranteed</em> to hold this lock.
-     *
-     *
-     * <p>If the current thread:
-     * <ul>
-     * <li>has its interrupted status set on entry to this method; or
-     * <li>is {@linkplain Thread#interrupt interrupted} while waiting
-     * and interruption of thread suspension is supported,
-     * </ul>
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared. It is not specified, in the first
-     * case, whether or not the test for interruption occurs before the lock
-     * is released.
-     *
-     *
-     * <p>The return value indicates whether the deadline has elapsed,
-     * which can be used as follows:
-     *  <pre> {@code
-     * boolean aMethod(Date deadline) {
-     *   boolean stillWaiting = true;
-     *   lock.lock();
-     *   try {
-     *     while (!conditionBeingWaitedFor()) {
-     *       if (!stillWaiting)
-     *         return false;
-     *       stillWaiting = theCondition.awaitUntil(deadline);
-     *     }
-     *     // ...
-     *   } finally {
-     *     lock.unlock();
-     *   }
-     * }}</pre>
-     *
-     * <p><b>Implementation Considerations</b>
-     *
-     * <p>The current thread is assumed to hold the lock associated with this
-     * {@code Condition} when this method is called.
-     * It is up to the implementation to determine if this is
-     * the case and if not, how to respond. Typically, an exception will be
-     * thrown (such as {@link IllegalMonitorStateException}) and the
-     * implementation must document that fact.
-     *
-     * <p>An implementation can favor responding to an interrupt over normal
-     * method return in response to a signal, or over indicating the passing
-     * of the specified deadline. In either case the implementation
-     * must ensure that the signal is redirected to another waiting thread, if
-     * there is one.
-     *
-     * @param deadline the absolute time to wait until
-     * @return {@code false} if the deadline has elapsed upon return, else
-     *         {@code true}
-     * @throws InterruptedException if the current thread is interrupted
-     *         (and interruption of thread suspension is supported)
-     */
-    boolean awaitUntil(Date deadline) throws InterruptedException;
-
-    /**
-     * Wakes up one waiting thread.
-     *
-     * <p>If any threads are waiting on this condition then one
-     * is selected for waking up. That thread must then re-acquire the
-     * lock before returning from {@code await}.
-     *
-     * <p><b>Implementation Considerations</b>
-     *
-     * <p>An implementation may (and typically does) require that the
-     * current thread hold the lock associated with this {@code
-     * Condition} when this method is called. Implementations must
-     * document this precondition and any actions taken if the lock is
-     * not held. Typically, an exception such as {@link
-     * IllegalMonitorStateException} will be thrown.
-     */
-    void signal();
-
-    /**
-     * Wakes up all waiting threads.
-     *
-     * <p>If any threads are waiting on this condition then they are
-     * all woken up. Each thread must re-acquire the lock before it can
-     * return from {@code await}.
-     *
-     * <p><b>Implementation Considerations</b>
-     *
-     * <p>An implementation may (and typically does) require that the
-     * current thread hold the lock associated with this {@code
-     * Condition} when this method is called. Implementations must
-     * document this precondition and any actions taken if the lock is
-     * not held. Typically, an exception such as {@link
-     * IllegalMonitorStateException} will be thrown.
-     */
-    void signalAll();
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/locks/Lock.java b/ojluni/src/main/java/java/util/concurrent/locks/Lock.java
deleted file mode 100755
index 8ed346c..0000000
--- a/ojluni/src/main/java/java/util/concurrent/locks/Lock.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.locks;
-import java.util.concurrent.TimeUnit;
-
-/**
- * {@code Lock} implementations provide more extensive locking
- * operations than can be obtained using {@code synchronized} methods
- * and statements.  They allow more flexible structuring, may have
- * quite different properties, and may support multiple associated
- * {@link Condition} objects.
- *
- * <p>A lock is a tool for controlling access to a shared resource by
- * multiple threads. Commonly, a lock provides exclusive access to a
- * shared resource: only one thread at a time can acquire the lock and
- * all access to the shared resource requires that the lock be
- * acquired first. However, some locks may allow concurrent access to
- * a shared resource, such as the read lock of a {@link ReadWriteLock}.
- *
- * <p>The use of {@code synchronized} methods or statements provides
- * access to the implicit monitor lock associated with every object, but
- * forces all lock acquisition and release to occur in a block-structured way:
- * when multiple locks are acquired they must be released in the opposite
- * order, and all locks must be released in the same lexical scope in which
- * they were acquired.
- *
- * <p>While the scoping mechanism for {@code synchronized} methods
- * and statements makes it much easier to program with monitor locks,
- * and helps avoid many common programming errors involving locks,
- * there are occasions where you need to work with locks in a more
- * flexible way. For example, some algorithms for traversing
- * concurrently accessed data structures require the use of
- * &quot;hand-over-hand&quot; or &quot;chain locking&quot;: you
- * acquire the lock of node A, then node B, then release A and acquire
- * C, then release B and acquire D and so on.  Implementations of the
- * {@code Lock} interface enable the use of such techniques by
- * allowing a lock to be acquired and released in different scopes,
- * and allowing multiple locks to be acquired and released in any
- * order.
- *
- * <p>With this increased flexibility comes additional
- * responsibility. The absence of block-structured locking removes the
- * automatic release of locks that occurs with {@code synchronized}
- * methods and statements. In most cases, the following idiom
- * should be used:
- *
- * <pre><tt>     Lock l = ...;
- *     l.lock();
- *     try {
- *         // access the resource protected by this lock
- *     } finally {
- *         l.unlock();
- *     }
- * </tt></pre>
- *
- * When locking and unlocking occur in different scopes, care must be
- * taken to ensure that all code that is executed while the lock is
- * held is protected by try-finally or try-catch to ensure that the
- * lock is released when necessary.
- *
- * <p>{@code Lock} implementations provide additional functionality
- * over the use of {@code synchronized} methods and statements by
- * providing a non-blocking attempt to acquire a lock ({@link
- * #tryLock()}), an attempt to acquire the lock that can be
- * interrupted ({@link #lockInterruptibly}, and an attempt to acquire
- * the lock that can timeout ({@link #tryLock(long, TimeUnit)}).
- *
- * <p>A {@code Lock} class can also provide behavior and semantics
- * that is quite different from that of the implicit monitor lock,
- * such as guaranteed ordering, non-reentrant usage, or deadlock
- * detection. If an implementation provides such specialized semantics
- * then the implementation must document those semantics.
- *
- * <p>Note that {@code Lock} instances are just normal objects and can
- * themselves be used as the target in a {@code synchronized} statement.
- * Acquiring the
- * monitor lock of a {@code Lock} instance has no specified relationship
- * with invoking any of the {@link #lock} methods of that instance.
- * It is recommended that to avoid confusion you never use {@code Lock}
- * instances in this way, except within their own implementation.
- *
- * <p>Except where noted, passing a {@code null} value for any
- * parameter will result in a {@link NullPointerException} being
- * thrown.
- *
- * <h3>Memory Synchronization</h3>
- *
- * <p>All {@code Lock} implementations <em>must</em> enforce the same
- * memory synchronization semantics as provided by the built-in monitor
- * lock, as described in section 17.4 of
- * <cite>The Java&trade; Language Specification</cite>:
- * <ul>
- * <li>A successful {@code lock} operation has the same memory
- * synchronization effects as a successful <em>Lock</em> action.
- * <li>A successful {@code unlock} operation has the same
- * memory synchronization effects as a successful <em>Unlock</em> action.
- * </ul>
- *
- * Unsuccessful locking and unlocking operations, and reentrant
- * locking/unlocking operations, do not require any memory
- * synchronization effects.
- *
- * <h3>Implementation Considerations</h3>
- *
- * <p> The three forms of lock acquisition (interruptible,
- * non-interruptible, and timed) may differ in their performance
- * characteristics, ordering guarantees, or other implementation
- * qualities.  Further, the ability to interrupt the <em>ongoing</em>
- * acquisition of a lock may not be available in a given {@code Lock}
- * class.  Consequently, an implementation is not required to define
- * exactly the same guarantees or semantics for all three forms of
- * lock acquisition, nor is it required to support interruption of an
- * ongoing lock acquisition.  An implementation is required to clearly
- * document the semantics and guarantees provided by each of the
- * locking methods. It must also obey the interruption semantics as
- * defined in this interface, to the extent that interruption of lock
- * acquisition is supported: which is either totally, or only on
- * method entry.
- *
- * <p>As interruption generally implies cancellation, and checks for
- * interruption are often infrequent, an implementation can favor responding
- * to an interrupt over normal method return. This is true even if it can be
- * shown that the interrupt occurred after another action may have unblocked
- * the thread. An implementation should document this behavior.
- *
- * @see ReentrantLock
- * @see Condition
- * @see ReadWriteLock
- *
- * @since 1.5
- * @author Doug Lea
- */
-public interface Lock {
-
-    /**
-     * Acquires the lock.
-     *
-     * <p>If the lock is not available then the current thread becomes
-     * disabled for thread scheduling purposes and lies dormant until the
-     * lock has been acquired.
-     *
-     * <p><b>Implementation Considerations</b>
-     *
-     * <p>A {@code Lock} implementation may be able to detect erroneous use
-     * of the lock, such as an invocation that would cause deadlock, and
-     * may throw an (unchecked) exception in such circumstances.  The
-     * circumstances and the exception type must be documented by that
-     * {@code Lock} implementation.
-     */
-    void lock();
-
-    /**
-     * Acquires the lock unless the current thread is
-     * {@linkplain Thread#interrupt interrupted}.
-     *
-     * <p>Acquires the lock if it is available and returns immediately.
-     *
-     * <p>If the lock is not available then the current thread becomes
-     * disabled for thread scheduling purposes and lies dormant until
-     * one of two things happens:
-     *
-     * <ul>
-     * <li>The lock is acquired by the current thread; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts} the
-     * current thread, and interruption of lock acquisition is supported.
-     * </ul>
-     *
-     * <p>If the current thread:
-     * <ul>
-     * <li>has its interrupted status set on entry to this method; or
-     * <li>is {@linkplain Thread#interrupt interrupted} while acquiring the
-     * lock, and interruption of lock acquisition is supported,
-     * </ul>
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared.
-     *
-     * <p><b>Implementation Considerations</b>
-     *
-     * <p>The ability to interrupt a lock acquisition in some
-     * implementations may not be possible, and if possible may be an
-     * expensive operation.  The programmer should be aware that this
-     * may be the case. An implementation should document when this is
-     * the case.
-     *
-     * <p>An implementation can favor responding to an interrupt over
-     * normal method return.
-     *
-     * <p>A {@code Lock} implementation may be able to detect
-     * erroneous use of the lock, such as an invocation that would
-     * cause deadlock, and may throw an (unchecked) exception in such
-     * circumstances.  The circumstances and the exception type must
-     * be documented by that {@code Lock} implementation.
-     *
-     * @throws InterruptedException if the current thread is
-     *         interrupted while acquiring the lock (and interruption
-     *         of lock acquisition is supported).
-     */
-    void lockInterruptibly() throws InterruptedException;
-
-    /**
-     * Acquires the lock only if it is free at the time of invocation.
-     *
-     * <p>Acquires the lock if it is available and returns immediately
-     * with the value {@code true}.
-     * If the lock is not available then this method will return
-     * immediately with the value {@code false}.
-     *
-     * <p>A typical usage idiom for this method would be:
-     * <pre>
-     *      Lock lock = ...;
-     *      if (lock.tryLock()) {
-     *          try {
-     *              // manipulate protected state
-     *          } finally {
-     *              lock.unlock();
-     *          }
-     *      } else {
-     *          // perform alternative actions
-     *      }
-     * </pre>
-     * This usage ensures that the lock is unlocked if it was acquired, and
-     * doesn't try to unlock if the lock was not acquired.
-     *
-     * @return {@code true} if the lock was acquired and
-     *         {@code false} otherwise
-     */
-    boolean tryLock();
-
-    /**
-     * Acquires the lock if it is free within the given waiting time and the
-     * current thread has not been {@linkplain Thread#interrupt interrupted}.
-     *
-     * <p>If the lock is available this method returns immediately
-     * with the value {@code true}.
-     * If the lock is not available then
-     * the current thread becomes disabled for thread scheduling
-     * purposes and lies dormant until one of three things happens:
-     * <ul>
-     * <li>The lock is acquired by the current thread; or
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts} the
-     * current thread, and interruption of lock acquisition is supported; or
-     * <li>The specified waiting time elapses
-     * </ul>
-     *
-     * <p>If the lock is acquired then the value {@code true} is returned.
-     *
-     * <p>If the current thread:
-     * <ul>
-     * <li>has its interrupted status set on entry to this method; or
-     * <li>is {@linkplain Thread#interrupt interrupted} while acquiring
-     * the lock, and interruption of lock acquisition is supported,
-     * </ul>
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared.
-     *
-     * <p>If the specified waiting time elapses then the value {@code false}
-     * is returned.
-     * If the time is
-     * less than or equal to zero, the method will not wait at all.
-     *
-     * <p><b>Implementation Considerations</b>
-     *
-     * <p>The ability to interrupt a lock acquisition in some implementations
-     * may not be possible, and if possible may
-     * be an expensive operation.
-     * The programmer should be aware that this may be the case. An
-     * implementation should document when this is the case.
-     *
-     * <p>An implementation can favor responding to an interrupt over normal
-     * method return, or reporting a timeout.
-     *
-     * <p>A {@code Lock} implementation may be able to detect
-     * erroneous use of the lock, such as an invocation that would cause
-     * deadlock, and may throw an (unchecked) exception in such circumstances.
-     * The circumstances and the exception type must be documented by that
-     * {@code Lock} implementation.
-     *
-     * @param time the maximum time to wait for the lock
-     * @param unit the time unit of the {@code time} argument
-     * @return {@code true} if the lock was acquired and {@code false}
-     *         if the waiting time elapsed before the lock was acquired
-     *
-     * @throws InterruptedException if the current thread is interrupted
-     *         while acquiring the lock (and interruption of lock
-     *         acquisition is supported)
-     */
-    boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
-
-    /**
-     * Releases the lock.
-     *
-     * <p><b>Implementation Considerations</b>
-     *
-     * <p>A {@code Lock} implementation will usually impose
-     * restrictions on which thread can release a lock (typically only the
-     * holder of the lock can release it) and may throw
-     * an (unchecked) exception if the restriction is violated.
-     * Any restrictions and the exception
-     * type must be documented by that {@code Lock} implementation.
-     */
-    void unlock();
-
-    /**
-     * Returns a new {@link Condition} instance that is bound to this
-     * {@code Lock} instance.
-     *
-     * <p>Before waiting on the condition the lock must be held by the
-     * current thread.
-     * A call to {@link Condition#await()} will atomically release the lock
-     * before waiting and re-acquire the lock before the wait returns.
-     *
-     * <p><b>Implementation Considerations</b>
-     *
-     * <p>The exact operation of the {@link Condition} instance depends on
-     * the {@code Lock} implementation and must be documented by that
-     * implementation.
-     *
-     * @return A new {@link Condition} instance for this {@code Lock} instance
-     * @throws UnsupportedOperationException if this {@code Lock}
-     *         implementation does not support conditions
-     */
-    Condition newCondition();
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/locks/LockSupport.java b/ojluni/src/main/java/java/util/concurrent/locks/LockSupport.java
deleted file mode 100755
index 7b829f6..0000000
--- a/ojluni/src/main/java/java/util/concurrent/locks/LockSupport.java
+++ /dev/null
@@ -1,385 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.locks;
-import java.util.concurrent.*;
-import sun.misc.Unsafe;
-
-
-/**
- * Basic thread blocking primitives for creating locks and other
- * synchronization classes.
- *
- * <p>This class associates, with each thread that uses it, a permit
- * (in the sense of the {@link java.util.concurrent.Semaphore
- * Semaphore} class). A call to {@code park} will return immediately
- * if the permit is available, consuming it in the process; otherwise
- * it <em>may</em> block.  A call to {@code unpark} makes the permit
- * available, if it was not already available. (Unlike with Semaphores
- * though, permits do not accumulate. There is at most one.)
- *
- * <p>Methods {@code park} and {@code unpark} provide efficient
- * means of blocking and unblocking threads that do not encounter the
- * problems that cause the deprecated methods {@code Thread.suspend}
- * and {@code Thread.resume} to be unusable for such purposes: Races
- * between one thread invoking {@code park} and another thread trying
- * to {@code unpark} it will preserve liveness, due to the
- * permit. Additionally, {@code park} will return if the caller's
- * thread was interrupted, and timeout versions are supported. The
- * {@code park} method may also return at any other time, for "no
- * reason", so in general must be invoked within a loop that rechecks
- * conditions upon return. In this sense {@code park} serves as an
- * optimization of a "busy wait" that does not waste as much time
- * spinning, but must be paired with an {@code unpark} to be
- * effective.
- *
- * <p>The three forms of {@code park} each also support a
- * {@code blocker} object parameter. This object is recorded while
- * the thread is blocked to permit monitoring and diagnostic tools to
- * identify the reasons that threads are blocked. (Such tools may
- * access blockers using method {@link #getBlocker}.) The use of these
- * forms rather than the original forms without this parameter is
- * strongly encouraged. The normal argument to supply as a
- * {@code blocker} within a lock implementation is {@code this}.
- *
- * <p>These methods are designed to be used as tools for creating
- * higher-level synchronization utilities, and are not in themselves
- * useful for most concurrency control applications.  The {@code park}
- * method is designed for use only in constructions of the form:
- * <pre>while (!canProceed()) { ... LockSupport.park(this); }</pre>
- * where neither {@code canProceed} nor any other actions prior to the
- * call to {@code park} entail locking or blocking.  Because only one
- * permit is associated with each thread, any intermediary uses of
- * {@code park} could interfere with its intended effects.
- *
- * <p><b>Sample Usage.</b> Here is a sketch of a first-in-first-out
- * non-reentrant lock class:
- * <pre>{@code
- * class FIFOMutex {
- *   private final AtomicBoolean locked = new AtomicBoolean(false);
- *   private final Queue<Thread> waiters
- *     = new ConcurrentLinkedQueue<Thread>();
- *
- *   public void lock() {
- *     boolean wasInterrupted = false;
- *     Thread current = Thread.currentThread();
- *     waiters.add(current);
- *
- *     // Block while not first in queue or cannot acquire lock
- *     while (waiters.peek() != current ||
- *            !locked.compareAndSet(false, true)) {
- *        LockSupport.park(this);
- *        if (Thread.interrupted()) // ignore interrupts while waiting
- *          wasInterrupted = true;
- *     }
- *
- *     waiters.remove();
- *     if (wasInterrupted)          // reassert interrupt status on exit
- *        current.interrupt();
- *   }
- *
- *   public void unlock() {
- *     locked.set(false);
- *     LockSupport.unpark(waiters.peek());
- *   }
- * }}</pre>
- */
-
-public class LockSupport {
-    private LockSupport() {} // Cannot be instantiated.
-
-    // Hotspot implementation via intrinsics API
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-    private static final long parkBlockerOffset;
-
-    static {
-        try {
-            parkBlockerOffset = unsafe.objectFieldOffset
-                (java.lang.Thread.class.getDeclaredField("parkBlocker"));
-        } catch (Exception ex) { throw new Error(ex); }
-    }
-
-    private static void setBlocker(Thread t, Object arg) {
-        // Even though volatile, hotspot doesn't need a write barrier here.
-        unsafe.putObject(t, parkBlockerOffset, arg);
-    }
-
-    /**
-     * Makes available the permit for the given thread, if it
-     * was not already available.  If the thread was blocked on
-     * {@code park} then it will unblock.  Otherwise, its next call
-     * to {@code park} is guaranteed not to block. This operation
-     * is not guaranteed to have any effect at all if the given
-     * thread has not been started.
-     *
-     * @param thread the thread to unpark, or {@code null}, in which case
-     *        this operation has no effect
-     */
-    public static void unpark(Thread thread) {
-        if (thread != null)
-            unsafe.unpark(thread);
-    }
-
-    /**
-     * Disables the current thread for thread scheduling purposes unless the
-     * permit is available.
-     *
-     * <p>If the permit is available then it is consumed and the call returns
-     * immediately; otherwise
-     * the current thread becomes disabled for thread scheduling
-     * purposes and lies dormant until one of three things happens:
-     *
-     * <ul>
-     * <li>Some other thread invokes {@link #unpark unpark} with the
-     * current thread as the target; or
-     *
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * the current thread; or
-     *
-     * <li>The call spuriously (that is, for no reason) returns.
-     * </ul>
-     *
-     * <p>This method does <em>not</em> report which of these caused the
-     * method to return. Callers should re-check the conditions which caused
-     * the thread to park in the first place. Callers may also determine,
-     * for example, the interrupt status of the thread upon return.
-     *
-     * @param blocker the synchronization object responsible for this
-     *        thread parking
-     * @since 1.6
-     */
-    public static void park(Object blocker) {
-        Thread t = Thread.currentThread();
-        setBlocker(t, blocker);
-        unsafe.park(false, 0L);
-        setBlocker(t, null);
-    }
-
-    /**
-     * Disables the current thread for thread scheduling purposes, for up to
-     * the specified waiting time, unless the permit is available.
-     *
-     * <p>If the permit is available then it is consumed and the call
-     * returns immediately; otherwise the current thread becomes disabled
-     * for thread scheduling purposes and lies dormant until one of four
-     * things happens:
-     *
-     * <ul>
-     * <li>Some other thread invokes {@link #unpark unpark} with the
-     * current thread as the target; or
-     *
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * the current thread; or
-     *
-     * <li>The specified waiting time elapses; or
-     *
-     * <li>The call spuriously (that is, for no reason) returns.
-     * </ul>
-     *
-     * <p>This method does <em>not</em> report which of these caused the
-     * method to return. Callers should re-check the conditions which caused
-     * the thread to park in the first place. Callers may also determine,
-     * for example, the interrupt status of the thread, or the elapsed time
-     * upon return.
-     *
-     * @param blocker the synchronization object responsible for this
-     *        thread parking
-     * @param nanos the maximum number of nanoseconds to wait
-     * @since 1.6
-     */
-    public static void parkNanos(Object blocker, long nanos) {
-        if (nanos > 0) {
-            Thread t = Thread.currentThread();
-            setBlocker(t, blocker);
-            unsafe.park(false, nanos);
-            setBlocker(t, null);
-        }
-    }
-
-    /**
-     * Disables the current thread for thread scheduling purposes, until
-     * the specified deadline, unless the permit is available.
-     *
-     * <p>If the permit is available then it is consumed and the call
-     * returns immediately; otherwise the current thread becomes disabled
-     * for thread scheduling purposes and lies dormant until one of four
-     * things happens:
-     *
-     * <ul>
-     * <li>Some other thread invokes {@link #unpark unpark} with the
-     * current thread as the target; or
-     *
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts} the
-     * current thread; or
-     *
-     * <li>The specified deadline passes; or
-     *
-     * <li>The call spuriously (that is, for no reason) returns.
-     * </ul>
-     *
-     * <p>This method does <em>not</em> report which of these caused the
-     * method to return. Callers should re-check the conditions which caused
-     * the thread to park in the first place. Callers may also determine,
-     * for example, the interrupt status of the thread, or the current time
-     * upon return.
-     *
-     * @param blocker the synchronization object responsible for this
-     *        thread parking
-     * @param deadline the absolute time, in milliseconds from the Epoch,
-     *        to wait until
-     * @since 1.6
-     */
-    public static void parkUntil(Object blocker, long deadline) {
-        Thread t = Thread.currentThread();
-        setBlocker(t, blocker);
-        unsafe.park(true, deadline);
-        setBlocker(t, null);
-    }
-
-    /**
-     * Returns the blocker object supplied to the most recent
-     * invocation of a park method that has not yet unblocked, or null
-     * if not blocked.  The value returned is just a momentary
-     * snapshot -- the thread may have since unblocked or blocked on a
-     * different blocker object.
-     *
-     * @param t the thread
-     * @return the blocker
-     * @throws NullPointerException if argument is null
-     * @since 1.6
-     */
-    public static Object getBlocker(Thread t) {
-        if (t == null)
-            throw new NullPointerException();
-        return unsafe.getObjectVolatile(t, parkBlockerOffset);
-    }
-
-    /**
-     * Disables the current thread for thread scheduling purposes unless the
-     * permit is available.
-     *
-     * <p>If the permit is available then it is consumed and the call
-     * returns immediately; otherwise the current thread becomes disabled
-     * for thread scheduling purposes and lies dormant until one of three
-     * things happens:
-     *
-     * <ul>
-     *
-     * <li>Some other thread invokes {@link #unpark unpark} with the
-     * current thread as the target; or
-     *
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * the current thread; or
-     *
-     * <li>The call spuriously (that is, for no reason) returns.
-     * </ul>
-     *
-     * <p>This method does <em>not</em> report which of these caused the
-     * method to return. Callers should re-check the conditions which caused
-     * the thread to park in the first place. Callers may also determine,
-     * for example, the interrupt status of the thread upon return.
-     */
-    public static void park() {
-        unsafe.park(false, 0L);
-    }
-
-    /**
-     * Disables the current thread for thread scheduling purposes, for up to
-     * the specified waiting time, unless the permit is available.
-     *
-     * <p>If the permit is available then it is consumed and the call
-     * returns immediately; otherwise the current thread becomes disabled
-     * for thread scheduling purposes and lies dormant until one of four
-     * things happens:
-     *
-     * <ul>
-     * <li>Some other thread invokes {@link #unpark unpark} with the
-     * current thread as the target; or
-     *
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * the current thread; or
-     *
-     * <li>The specified waiting time elapses; or
-     *
-     * <li>The call spuriously (that is, for no reason) returns.
-     * </ul>
-     *
-     * <p>This method does <em>not</em> report which of these caused the
-     * method to return. Callers should re-check the conditions which caused
-     * the thread to park in the first place. Callers may also determine,
-     * for example, the interrupt status of the thread, or the elapsed time
-     * upon return.
-     *
-     * @param nanos the maximum number of nanoseconds to wait
-     */
-    public static void parkNanos(long nanos) {
-        if (nanos > 0)
-            unsafe.park(false, nanos);
-    }
-
-    /**
-     * Disables the current thread for thread scheduling purposes, until
-     * the specified deadline, unless the permit is available.
-     *
-     * <p>If the permit is available then it is consumed and the call
-     * returns immediately; otherwise the current thread becomes disabled
-     * for thread scheduling purposes and lies dormant until one of four
-     * things happens:
-     *
-     * <ul>
-     * <li>Some other thread invokes {@link #unpark unpark} with the
-     * current thread as the target; or
-     *
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * the current thread; or
-     *
-     * <li>The specified deadline passes; or
-     *
-     * <li>The call spuriously (that is, for no reason) returns.
-     * </ul>
-     *
-     * <p>This method does <em>not</em> report which of these caused the
-     * method to return. Callers should re-check the conditions which caused
-     * the thread to park in the first place. Callers may also determine,
-     * for example, the interrupt status of the thread, or the current time
-     * upon return.
-     *
-     * @param deadline the absolute time, in milliseconds from the Epoch,
-     *        to wait until
-     */
-    public static void parkUntil(long deadline) {
-        unsafe.park(true, deadline);
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/locks/ReadWriteLock.java b/ojluni/src/main/java/java/util/concurrent/locks/ReadWriteLock.java
deleted file mode 100755
index fd6632b..0000000
--- a/ojluni/src/main/java/java/util/concurrent/locks/ReadWriteLock.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.locks;
-
-/**
- * A <tt>ReadWriteLock</tt> maintains a pair of associated {@link
- * Lock locks}, one for read-only operations and one for writing.
- * The {@link #readLock read lock} may be held simultaneously by
- * multiple reader threads, so long as there are no writers.  The
- * {@link #writeLock write lock} is exclusive.
- *
- * <p>All <tt>ReadWriteLock</tt> implementations must guarantee that
- * the memory synchronization effects of <tt>writeLock</tt> operations
- * (as specified in the {@link Lock} interface) also hold with respect
- * to the associated <tt>readLock</tt>. That is, a thread successfully
- * acquiring the read lock will see all updates made upon previous
- * release of the write lock.
- *
- * <p>A read-write lock allows for a greater level of concurrency in
- * accessing shared data than that permitted by a mutual exclusion lock.
- * It exploits the fact that while only a single thread at a time (a
- * <em>writer</em> thread) can modify the shared data, in many cases any
- * number of threads can concurrently read the data (hence <em>reader</em>
- * threads).
- * In theory, the increase in concurrency permitted by the use of a read-write
- * lock will lead to performance improvements over the use of a mutual
- * exclusion lock. In practice this increase in concurrency will only be fully
- * realized on a multi-processor, and then only if the access patterns for
- * the shared data are suitable.
- *
- * <p>Whether or not a read-write lock will improve performance over the use
- * of a mutual exclusion lock depends on the frequency that the data is
- * read compared to being modified, the duration of the read and write
- * operations, and the contention for the data - that is, the number of
- * threads that will try to read or write the data at the same time.
- * For example, a collection that is initially populated with data and
- * thereafter infrequently modified, while being frequently searched
- * (such as a directory of some kind) is an ideal candidate for the use of
- * a read-write lock. However, if updates become frequent then the data
- * spends most of its time being exclusively locked and there is little, if any
- * increase in concurrency. Further, if the read operations are too short
- * the overhead of the read-write lock implementation (which is inherently
- * more complex than a mutual exclusion lock) can dominate the execution
- * cost, particularly as many read-write lock implementations still serialize
- * all threads through a small section of code. Ultimately, only profiling
- * and measurement will establish whether the use of a read-write lock is
- * suitable for your application.
- *
- *
- * <p>Although the basic operation of a read-write lock is straight-forward,
- * there are many policy decisions that an implementation must make, which
- * may affect the effectiveness of the read-write lock in a given application.
- * Examples of these policies include:
- * <ul>
- * <li>Determining whether to grant the read lock or the write lock, when
- * both readers and writers are waiting, at the time that a writer releases
- * the write lock. Writer preference is common, as writes are expected to be
- * short and infrequent. Reader preference is less common as it can lead to
- * lengthy delays for a write if the readers are frequent and long-lived as
- * expected. Fair, or &quot;in-order&quot; implementations are also possible.
- *
- * <li>Determining whether readers that request the read lock while a
- * reader is active and a writer is waiting, are granted the read lock.
- * Preference to the reader can delay the writer indefinitely, while
- * preference to the writer can reduce the potential for concurrency.
- *
- * <li>Determining whether the locks are reentrant: can a thread with the
- * write lock reacquire it? Can it acquire a read lock while holding the
- * write lock? Is the read lock itself reentrant?
- *
- * <li>Can the write lock be downgraded to a read lock without allowing
- * an intervening writer? Can a read lock be upgraded to a write lock,
- * in preference to other waiting readers or writers?
- *
- * </ul>
- * You should consider all of these things when evaluating the suitability
- * of a given implementation for your application.
- *
- * @see ReentrantReadWriteLock
- * @see Lock
- * @see ReentrantLock
- *
- * @since 1.5
- * @author Doug Lea
- */
-public interface ReadWriteLock {
-    /**
-     * Returns the lock used for reading.
-     *
-     * @return the lock used for reading.
-     */
-    Lock readLock();
-
-    /**
-     * Returns the lock used for writing.
-     *
-     * @return the lock used for writing.
-     */
-    Lock writeLock();
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/locks/ReentrantLock.java b/ojluni/src/main/java/java/util/concurrent/locks/ReentrantLock.java
deleted file mode 100755
index 9952c8c..0000000
--- a/ojluni/src/main/java/java/util/concurrent/locks/ReentrantLock.java
+++ /dev/null
@@ -1,770 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.locks;
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.concurrent.atomic.*;
-
-/**
- * A reentrant mutual exclusion {@link Lock} with the same basic
- * behavior and semantics as the implicit monitor lock accessed using
- * {@code synchronized} methods and statements, but with extended
- * capabilities.
- *
- * <p>A {@code ReentrantLock} is <em>owned</em> by the thread last
- * successfully locking, but not yet unlocking it. A thread invoking
- * {@code lock} will return, successfully acquiring the lock, when
- * the lock is not owned by another thread. The method will return
- * immediately if the current thread already owns the lock. This can
- * be checked using methods {@link #isHeldByCurrentThread}, and {@link
- * #getHoldCount}.
- *
- * <p>The constructor for this class accepts an optional
- * <em>fairness</em> parameter.  When set {@code true}, under
- * contention, locks favor granting access to the longest-waiting
- * thread.  Otherwise this lock does not guarantee any particular
- * access order.  Programs using fair locks accessed by many threads
- * may display lower overall throughput (i.e., are slower; often much
- * slower) than those using the default setting, but have smaller
- * variances in times to obtain locks and guarantee lack of
- * starvation. Note however, that fairness of locks does not guarantee
- * fairness of thread scheduling. Thus, one of many threads using a
- * fair lock may obtain it multiple times in succession while other
- * active threads are not progressing and not currently holding the
- * lock.
- * Also note that the untimed {@link #tryLock() tryLock} method does not
- * honor the fairness setting. It will succeed if the lock
- * is available even if other threads are waiting.
- *
- * <p>It is recommended practice to <em>always</em> immediately
- * follow a call to {@code lock} with a {@code try} block, most
- * typically in a before/after construction such as:
- *
- * <pre>
- * class X {
- *   private final ReentrantLock lock = new ReentrantLock();
- *   // ...
- *
- *   public void m() {
- *     lock.lock();  // block until condition holds
- *     try {
- *       // ... method body
- *     } finally {
- *       lock.unlock()
- *     }
- *   }
- * }
- * </pre>
- *
- * <p>In addition to implementing the {@link Lock} interface, this
- * class defines methods {@code isLocked} and
- * {@code getLockQueueLength}, as well as some associated
- * {@code protected} access methods that may be useful for
- * instrumentation and monitoring.
- *
- * <p>Serialization of this class behaves in the same way as built-in
- * locks: a deserialized lock is in the unlocked state, regardless of
- * its state when serialized.
- *
- * <p>This lock supports a maximum of 2147483647 recursive locks by
- * the same thread. Attempts to exceed this limit result in
- * {@link Error} throws from locking methods.
- *
- * @since 1.5
- * @author Doug Lea
- */
-public class ReentrantLock implements Lock, java.io.Serializable {
-    private static final long serialVersionUID = 7373984872572414699L;
-    /** Synchronizer providing all implementation mechanics */
-    private final Sync sync;
-
-    /**
-     * Base of synchronization control for this lock. Subclassed
-     * into fair and nonfair versions below. Uses AQS state to
-     * represent the number of holds on the lock.
-     */
-    abstract static class Sync extends AbstractQueuedSynchronizer {
-        private static final long serialVersionUID = -5179523762034025860L;
-
-        /**
-         * Performs {@link Lock#lock}. The main reason for subclassing
-         * is to allow fast path for nonfair version.
-         */
-        abstract void lock();
-
-        /**
-         * Performs non-fair tryLock.  tryAcquire is
-         * implemented in subclasses, but both need nonfair
-         * try for trylock method.
-         */
-        final boolean nonfairTryAcquire(int acquires) {
-            final Thread current = Thread.currentThread();
-            int c = getState();
-            if (c == 0) {
-                if (compareAndSetState(0, acquires)) {
-                    setExclusiveOwnerThread(current);
-                    return true;
-                }
-            }
-            else if (current == getExclusiveOwnerThread()) {
-                int nextc = c + acquires;
-                if (nextc < 0) // overflow
-                    throw new Error("Maximum lock count exceeded");
-                setState(nextc);
-                return true;
-            }
-            return false;
-        }
-
-        protected final boolean tryRelease(int releases) {
-            int c = getState() - releases;
-            if (Thread.currentThread() != getExclusiveOwnerThread())
-                throw new IllegalMonitorStateException();
-            boolean free = false;
-            if (c == 0) {
-                free = true;
-                setExclusiveOwnerThread(null);
-            }
-            setState(c);
-            return free;
-        }
-
-        protected final boolean isHeldExclusively() {
-            // While we must in general read state before owner,
-            // we don't need to do so to check if current thread is owner
-            return getExclusiveOwnerThread() == Thread.currentThread();
-        }
-
-        final ConditionObject newCondition() {
-            return new ConditionObject();
-        }
-
-        // Methods relayed from outer class
-
-        final Thread getOwner() {
-            return getState() == 0 ? null : getExclusiveOwnerThread();
-        }
-
-        final int getHoldCount() {
-            return isHeldExclusively() ? getState() : 0;
-        }
-
-        final boolean isLocked() {
-            return getState() != 0;
-        }
-
-        /**
-         * Reconstitutes this lock instance from a stream.
-         * @param s the stream
-         */
-        private void readObject(java.io.ObjectInputStream s)
-            throws java.io.IOException, ClassNotFoundException {
-            s.defaultReadObject();
-            setState(0); // reset to unlocked state
-        }
-    }
-
-    /**
-     * Sync object for non-fair locks
-     */
-    static final class NonfairSync extends Sync {
-        private static final long serialVersionUID = 7316153563782823691L;
-
-        /**
-         * Performs lock.  Try immediate barge, backing up to normal
-         * acquire on failure.
-         */
-        final void lock() {
-            if (compareAndSetState(0, 1))
-                setExclusiveOwnerThread(Thread.currentThread());
-            else
-                acquire(1);
-        }
-
-        protected final boolean tryAcquire(int acquires) {
-            return nonfairTryAcquire(acquires);
-        }
-    }
-
-    /**
-     * Sync object for fair locks
-     */
-    static final class FairSync extends Sync {
-        private static final long serialVersionUID = -3000897897090466540L;
-
-        final void lock() {
-            acquire(1);
-        }
-
-        /**
-         * Fair version of tryAcquire.  Don't grant access unless
-         * recursive call or no waiters or is first.
-         */
-        protected final boolean tryAcquire(int acquires) {
-            final Thread current = Thread.currentThread();
-            int c = getState();
-            if (c == 0) {
-                if (!hasQueuedPredecessors() &&
-                    compareAndSetState(0, acquires)) {
-                    setExclusiveOwnerThread(current);
-                    return true;
-                }
-            }
-            else if (current == getExclusiveOwnerThread()) {
-                int nextc = c + acquires;
-                if (nextc < 0)
-                    throw new Error("Maximum lock count exceeded");
-                setState(nextc);
-                return true;
-            }
-            return false;
-        }
-    }
-
-    /**
-     * Creates an instance of {@code ReentrantLock}.
-     * This is equivalent to using {@code ReentrantLock(false)}.
-     */
-    public ReentrantLock() {
-        sync = new NonfairSync();
-    }
-
-    /**
-     * Creates an instance of {@code ReentrantLock} with the
-     * given fairness policy.
-     *
-     * @param fair {@code true} if this lock should use a fair ordering policy
-     */
-    public ReentrantLock(boolean fair) {
-        sync = fair ? new FairSync() : new NonfairSync();
-    }
-
-    /**
-     * Acquires the lock.
-     *
-     * <p>Acquires the lock if it is not held by another thread and returns
-     * immediately, setting the lock hold count to one.
-     *
-     * <p>If the current thread already holds the lock then the hold
-     * count is incremented by one and the method returns immediately.
-     *
-     * <p>If the lock is held by another thread then the
-     * current thread becomes disabled for thread scheduling
-     * purposes and lies dormant until the lock has been acquired,
-     * at which time the lock hold count is set to one.
-     */
-    public void lock() {
-        sync.lock();
-    }
-
-    /**
-     * Acquires the lock unless the current thread is
-     * {@linkplain Thread#interrupt interrupted}.
-     *
-     * <p>Acquires the lock if it is not held by another thread and returns
-     * immediately, setting the lock hold count to one.
-     *
-     * <p>If the current thread already holds this lock then the hold count
-     * is incremented by one and the method returns immediately.
-     *
-     * <p>If the lock is held by another thread then the
-     * current thread becomes disabled for thread scheduling
-     * purposes and lies dormant until one of two things happens:
-     *
-     * <ul>
-     *
-     * <li>The lock is acquired by the current thread; or
-     *
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts} the
-     * current thread.
-     *
-     * </ul>
-     *
-     * <p>If the lock is acquired by the current thread then the lock hold
-     * count is set to one.
-     *
-     * <p>If the current thread:
-     *
-     * <ul>
-     *
-     * <li>has its interrupted status set on entry to this method; or
-     *
-     * <li>is {@linkplain Thread#interrupt interrupted} while acquiring
-     * the lock,
-     *
-     * </ul>
-     *
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared.
-     *
-     * <p>In this implementation, as this method is an explicit
-     * interruption point, preference is given to responding to the
-     * interrupt over normal or reentrant acquisition of the lock.
-     *
-     * @throws InterruptedException if the current thread is interrupted
-     */
-    public void lockInterruptibly() throws InterruptedException {
-        sync.acquireInterruptibly(1);
-    }
-
-    /**
-     * Acquires the lock only if it is not held by another thread at the time
-     * of invocation.
-     *
-     * <p>Acquires the lock if it is not held by another thread and
-     * returns immediately with the value {@code true}, setting the
-     * lock hold count to one. Even when this lock has been set to use a
-     * fair ordering policy, a call to {@code tryLock()} <em>will</em>
-     * immediately acquire the lock if it is available, whether or not
-     * other threads are currently waiting for the lock.
-     * This &quot;barging&quot; behavior can be useful in certain
-     * circumstances, even though it breaks fairness. If you want to honor
-     * the fairness setting for this lock, then use
-     * {@link #tryLock(long, TimeUnit) tryLock(0, TimeUnit.SECONDS) }
-     * which is almost equivalent (it also detects interruption).
-     *
-     * <p> If the current thread already holds this lock then the hold
-     * count is incremented by one and the method returns {@code true}.
-     *
-     * <p>If the lock is held by another thread then this method will return
-     * immediately with the value {@code false}.
-     *
-     * @return {@code true} if the lock was free and was acquired by the
-     *         current thread, or the lock was already held by the current
-     *         thread; and {@code false} otherwise
-     */
-    public boolean tryLock() {
-        return sync.nonfairTryAcquire(1);
-    }
-
-    /**
-     * Acquires the lock if it is not held by another thread within the given
-     * waiting time and the current thread has not been
-     * {@linkplain Thread#interrupt interrupted}.
-     *
-     * <p>Acquires the lock if it is not held by another thread and returns
-     * immediately with the value {@code true}, setting the lock hold count
-     * to one. If this lock has been set to use a fair ordering policy then
-     * an available lock <em>will not</em> be acquired if any other threads
-     * are waiting for the lock. This is in contrast to the {@link #tryLock()}
-     * method. If you want a timed {@code tryLock} that does permit barging on
-     * a fair lock then combine the timed and un-timed forms together:
-     *
-     * <pre>if (lock.tryLock() || lock.tryLock(timeout, unit) ) { ... }
-     * </pre>
-     *
-     * <p>If the current thread
-     * already holds this lock then the hold count is incremented by one and
-     * the method returns {@code true}.
-     *
-     * <p>If the lock is held by another thread then the
-     * current thread becomes disabled for thread scheduling
-     * purposes and lies dormant until one of three things happens:
-     *
-     * <ul>
-     *
-     * <li>The lock is acquired by the current thread; or
-     *
-     * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-     * the current thread; or
-     *
-     * <li>The specified waiting time elapses
-     *
-     * </ul>
-     *
-     * <p>If the lock is acquired then the value {@code true} is returned and
-     * the lock hold count is set to one.
-     *
-     * <p>If the current thread:
-     *
-     * <ul>
-     *
-     * <li>has its interrupted status set on entry to this method; or
-     *
-     * <li>is {@linkplain Thread#interrupt interrupted} while
-     * acquiring the lock,
-     *
-     * </ul>
-     * then {@link InterruptedException} is thrown and the current thread's
-     * interrupted status is cleared.
-     *
-     * <p>If the specified waiting time elapses then the value {@code false}
-     * is returned.  If the time is less than or equal to zero, the method
-     * will not wait at all.
-     *
-     * <p>In this implementation, as this method is an explicit
-     * interruption point, preference is given to responding to the
-     * interrupt over normal or reentrant acquisition of the lock, and
-     * over reporting the elapse of the waiting time.
-     *
-     * @param timeout the time to wait for the lock
-     * @param unit the time unit of the timeout argument
-     * @return {@code true} if the lock was free and was acquired by the
-     *         current thread, or the lock was already held by the current
-     *         thread; and {@code false} if the waiting time elapsed before
-     *         the lock could be acquired
-     * @throws InterruptedException if the current thread is interrupted
-     * @throws NullPointerException if the time unit is null
-     *
-     */
-    public boolean tryLock(long timeout, TimeUnit unit)
-            throws InterruptedException {
-        return sync.tryAcquireNanos(1, unit.toNanos(timeout));
-    }
-
-    /**
-     * Attempts to release this lock.
-     *
-     * <p>If the current thread is the holder of this lock then the hold
-     * count is decremented.  If the hold count is now zero then the lock
-     * is released.  If the current thread is not the holder of this
-     * lock then {@link IllegalMonitorStateException} is thrown.
-     *
-     * @throws IllegalMonitorStateException if the current thread does not
-     *         hold this lock
-     */
-    public void unlock() {
-        sync.release(1);
-    }
-
-    /**
-     * Returns a {@link Condition} instance for use with this
-     * {@link Lock} instance.
-     *
-     * <p>The returned {@link Condition} instance supports the same
-     * usages as do the {@link Object} monitor methods ({@link
-     * Object#wait() wait}, {@link Object#notify notify}, and {@link
-     * Object#notifyAll notifyAll}) when used with the built-in
-     * monitor lock.
-     *
-     * <ul>
-     *
-     * <li>If this lock is not held when any of the {@link Condition}
-     * {@linkplain Condition#await() waiting} or {@linkplain
-     * Condition#signal signalling} methods are called, then an {@link
-     * IllegalMonitorStateException} is thrown.
-     *
-     * <li>When the condition {@linkplain Condition#await() waiting}
-     * methods are called the lock is released and, before they
-     * return, the lock is reacquired and the lock hold count restored
-     * to what it was when the method was called.
-     *
-     * <li>If a thread is {@linkplain Thread#interrupt interrupted}
-     * while waiting then the wait will terminate, an {@link
-     * InterruptedException} will be thrown, and the thread's
-     * interrupted status will be cleared.
-     *
-     * <li> Waiting threads are signalled in FIFO order.
-     *
-     * <li>The ordering of lock reacquisition for threads returning
-     * from waiting methods is the same as for threads initially
-     * acquiring the lock, which is in the default case not specified,
-     * but for <em>fair</em> locks favors those threads that have been
-     * waiting the longest.
-     *
-     * </ul>
-     *
-     * @return the Condition object
-     */
-    public Condition newCondition() {
-        return sync.newCondition();
-    }
-
-    /**
-     * Queries the number of holds on this lock by the current thread.
-     *
-     * <p>A thread has a hold on a lock for each lock action that is not
-     * matched by an unlock action.
-     *
-     * <p>The hold count information is typically only used for testing and
-     * debugging purposes. For example, if a certain section of code should
-     * not be entered with the lock already held then we can assert that
-     * fact:
-     *
-     * <pre>
-     * class X {
-     *   ReentrantLock lock = new ReentrantLock();
-     *   // ...
-     *   public void m() {
-     *     assert lock.getHoldCount() == 0;
-     *     lock.lock();
-     *     try {
-     *       // ... method body
-     *     } finally {
-     *       lock.unlock();
-     *     }
-     *   }
-     * }
-     * </pre>
-     *
-     * @return the number of holds on this lock by the current thread,
-     *         or zero if this lock is not held by the current thread
-     */
-    public int getHoldCount() {
-        return sync.getHoldCount();
-    }
-
-    /**
-     * Queries if this lock is held by the current thread.
-     *
-     * <p>Analogous to the {@link Thread#holdsLock} method for built-in
-     * monitor locks, this method is typically used for debugging and
-     * testing. For example, a method that should only be called while
-     * a lock is held can assert that this is the case:
-     *
-     * <pre>
-     * class X {
-     *   ReentrantLock lock = new ReentrantLock();
-     *   // ...
-     *
-     *   public void m() {
-     *       assert lock.isHeldByCurrentThread();
-     *       // ... method body
-     *   }
-     * }
-     * </pre>
-     *
-     * <p>It can also be used to ensure that a reentrant lock is used
-     * in a non-reentrant manner, for example:
-     *
-     * <pre>
-     * class X {
-     *   ReentrantLock lock = new ReentrantLock();
-     *   // ...
-     *
-     *   public void m() {
-     *       assert !lock.isHeldByCurrentThread();
-     *       lock.lock();
-     *       try {
-     *           // ... method body
-     *       } finally {
-     *           lock.unlock();
-     *       }
-     *   }
-     * }
-     * </pre>
-     *
-     * @return {@code true} if current thread holds this lock and
-     *         {@code false} otherwise
-     */
-    public boolean isHeldByCurrentThread() {
-        return sync.isHeldExclusively();
-    }
-
-    /**
-     * Queries if this lock is held by any thread. This method is
-     * designed for use in monitoring of the system state,
-     * not for synchronization control.
-     *
-     * @return {@code true} if any thread holds this lock and
-     *         {@code false} otherwise
-     */
-    public boolean isLocked() {
-        return sync.isLocked();
-    }
-
-    /**
-     * Returns {@code true} if this lock has fairness set true.
-     *
-     * @return {@code true} if this lock has fairness set true
-     */
-    public final boolean isFair() {
-        return sync instanceof FairSync;
-    }
-
-    /**
-     * Returns the thread that currently owns this lock, or
-     * {@code null} if not owned. When this method is called by a
-     * thread that is not the owner, the return value reflects a
-     * best-effort approximation of current lock status. For example,
-     * the owner may be momentarily {@code null} even if there are
-     * threads trying to acquire the lock but have not yet done so.
-     * This method is designed to facilitate construction of
-     * subclasses that provide more extensive lock monitoring
-     * facilities.
-     *
-     * @return the owner, or {@code null} if not owned
-     */
-    protected Thread getOwner() {
-        return sync.getOwner();
-    }
-
-    /**
-     * Queries whether any threads are waiting to acquire this lock. Note that
-     * because cancellations may occur at any time, a {@code true}
-     * return does not guarantee that any other thread will ever
-     * acquire this lock.  This method is designed primarily for use in
-     * monitoring of the system state.
-     *
-     * @return {@code true} if there may be other threads waiting to
-     *         acquire the lock
-     */
-    public final boolean hasQueuedThreads() {
-        return sync.hasQueuedThreads();
-    }
-
-
-    /**
-     * Queries whether the given thread is waiting to acquire this
-     * lock. Note that because cancellations may occur at any time, a
-     * {@code true} return does not guarantee that this thread
-     * will ever acquire this lock.  This method is designed primarily for use
-     * in monitoring of the system state.
-     *
-     * @param thread the thread
-     * @return {@code true} if the given thread is queued waiting for this lock
-     * @throws NullPointerException if the thread is null
-     */
-    public final boolean hasQueuedThread(Thread thread) {
-        return sync.isQueued(thread);
-    }
-
-
-    /**
-     * Returns an estimate of the number of threads waiting to
-     * acquire this lock.  The value is only an estimate because the number of
-     * threads may change dynamically while this method traverses
-     * internal data structures.  This method is designed for use in
-     * monitoring of the system state, not for synchronization
-     * control.
-     *
-     * @return the estimated number of threads waiting for this lock
-     */
-    public final int getQueueLength() {
-        return sync.getQueueLength();
-    }
-
-    /**
-     * Returns a collection containing threads that may be waiting to
-     * acquire this lock.  Because the actual set of threads may change
-     * dynamically while constructing this result, the returned
-     * collection is only a best-effort estimate.  The elements of the
-     * returned collection are in no particular order.  This method is
-     * designed to facilitate construction of subclasses that provide
-     * more extensive monitoring facilities.
-     *
-     * @return the collection of threads
-     */
-    protected Collection<Thread> getQueuedThreads() {
-        return sync.getQueuedThreads();
-    }
-
-    /**
-     * Queries whether any threads are waiting on the given condition
-     * associated with this lock. Note that because timeouts and
-     * interrupts may occur at any time, a {@code true} return does
-     * not guarantee that a future {@code signal} will awaken any
-     * threads.  This method is designed primarily for use in
-     * monitoring of the system state.
-     *
-     * @param condition the condition
-     * @return {@code true} if there are any waiting threads
-     * @throws IllegalMonitorStateException if this lock is not held
-     * @throws IllegalArgumentException if the given condition is
-     *         not associated with this lock
-     * @throws NullPointerException if the condition is null
-     */
-    public boolean hasWaiters(Condition condition) {
-        if (condition == null)
-            throw new NullPointerException();
-        if (!(condition instanceof AbstractQueuedSynchronizer.ConditionObject))
-            throw new IllegalArgumentException("not owner");
-        return sync.hasWaiters((AbstractQueuedSynchronizer.ConditionObject)condition);
-    }
-
-    /**
-     * Returns an estimate of the number of threads waiting on the
-     * given condition associated with this lock. Note that because
-     * timeouts and interrupts may occur at any time, the estimate
-     * serves only as an upper bound on the actual number of waiters.
-     * This method is designed for use in monitoring of the system
-     * state, not for synchronization control.
-     *
-     * @param condition the condition
-     * @return the estimated number of waiting threads
-     * @throws IllegalMonitorStateException if this lock is not held
-     * @throws IllegalArgumentException if the given condition is
-     *         not associated with this lock
-     * @throws NullPointerException if the condition is null
-     */
-    public int getWaitQueueLength(Condition condition) {
-        if (condition == null)
-            throw new NullPointerException();
-        if (!(condition instanceof AbstractQueuedSynchronizer.ConditionObject))
-            throw new IllegalArgumentException("not owner");
-        return sync.getWaitQueueLength((AbstractQueuedSynchronizer.ConditionObject)condition);
-    }
-
-    /**
-     * Returns a collection containing those threads that may be
-     * waiting on the given condition associated with this lock.
-     * Because the actual set of threads may change dynamically while
-     * constructing this result, the returned collection is only a
-     * best-effort estimate. The elements of the returned collection
-     * are in no particular order.  This method is designed to
-     * facilitate construction of subclasses that provide more
-     * extensive condition monitoring facilities.
-     *
-     * @param condition the condition
-     * @return the collection of threads
-     * @throws IllegalMonitorStateException if this lock is not held
-     * @throws IllegalArgumentException if the given condition is
-     *         not associated with this lock
-     * @throws NullPointerException if the condition is null
-     */
-    protected Collection<Thread> getWaitingThreads(Condition condition) {
-        if (condition == null)
-            throw new NullPointerException();
-        if (!(condition instanceof AbstractQueuedSynchronizer.ConditionObject))
-            throw new IllegalArgumentException("not owner");
-        return sync.getWaitingThreads((AbstractQueuedSynchronizer.ConditionObject)condition);
-    }
-
-    /**
-     * Returns a string identifying this lock, as well as its lock state.
-     * The state, in brackets, includes either the String {@code "Unlocked"}
-     * or the String {@code "Locked by"} followed by the
-     * {@linkplain Thread#getName name} of the owning thread.
-     *
-     * @return a string identifying this lock, as well as its lock state
-     */
-    public String toString() {
-        Thread o = sync.getOwner();
-        return super.toString() + ((o == null) ?
-                                   "[Unlocked]" :
-                                   "[Locked by thread " + o.getName() + "]");
-    }
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/locks/ReentrantReadWriteLock.java b/ojluni/src/main/java/java/util/concurrent/locks/ReentrantReadWriteLock.java
deleted file mode 100755
index fbafd3c..0000000
--- a/ojluni/src/main/java/java/util/concurrent/locks/ReentrantReadWriteLock.java
+++ /dev/null
@@ -1,1486 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-package java.util.concurrent.locks;
-import java.util.concurrent.*;
-import java.util.concurrent.atomic.*;
-import java.util.*;
-
-/**
- * An implementation of {@link ReadWriteLock} supporting similar
- * semantics to {@link ReentrantLock}.
- * <p>This class has the following properties:
- *
- * <ul>
- * <li><b>Acquisition order</b>
- *
- * <p> This class does not impose a reader or writer preference
- * ordering for lock access.  However, it does support an optional
- * <em>fairness</em> policy.
- *
- * <dl>
- * <dt><b><i>Non-fair mode (default)</i></b>
- * <dd>When constructed as non-fair (the default), the order of entry
- * to the read and write lock is unspecified, subject to reentrancy
- * constraints.  A nonfair lock that is continuously contended may
- * indefinitely postpone one or more reader or writer threads, but
- * will normally have higher throughput than a fair lock.
- * <p>
- *
- * <dt><b><i>Fair mode</i></b>
- * <dd> When constructed as fair, threads contend for entry using an
- * approximately arrival-order policy. When the currently held lock
- * is released either the longest-waiting single writer thread will
- * be assigned the write lock, or if there is a group of reader threads
- * waiting longer than all waiting writer threads, that group will be
- * assigned the read lock.
- *
- * <p>A thread that tries to acquire a fair read lock (non-reentrantly)
- * will block if either the write lock is held, or there is a waiting
- * writer thread. The thread will not acquire the read lock until
- * after the oldest currently waiting writer thread has acquired and
- * released the write lock. Of course, if a waiting writer abandons
- * its wait, leaving one or more reader threads as the longest waiters
- * in the queue with the write lock free, then those readers will be
- * assigned the read lock.
- *
- * <p>A thread that tries to acquire a fair write lock (non-reentrantly)
- * will block unless both the read lock and write lock are free (which
- * implies there are no waiting threads).  (Note that the non-blocking
- * {@link ReadLock#tryLock()} and {@link WriteLock#tryLock()} methods
- * do not honor this fair setting and will acquire the lock if it is
- * possible, regardless of waiting threads.)
- * <p>
- * </dl>
- *
- * <li><b>Reentrancy</b>
- *
- * <p>This lock allows both readers and writers to reacquire read or
- * write locks in the style of a {@link ReentrantLock}. Non-reentrant
- * readers are not allowed until all write locks held by the writing
- * thread have been released.
- *
- * <p>Additionally, a writer can acquire the read lock, but not
- * vice-versa.  Among other applications, reentrancy can be useful
- * when write locks are held during calls or callbacks to methods that
- * perform reads under read locks.  If a reader tries to acquire the
- * write lock it will never succeed.
- *
- * <li><b>Lock downgrading</b>
- * <p>Reentrancy also allows downgrading from the write lock to a read lock,
- * by acquiring the write lock, then the read lock and then releasing the
- * write lock. However, upgrading from a read lock to the write lock is
- * <b>not</b> possible.
- *
- * <li><b>Interruption of lock acquisition</b>
- * <p>The read lock and write lock both support interruption during lock
- * acquisition.
- *
- * <li><b>{@link Condition} support</b>
- * <p>The write lock provides a {@link Condition} implementation that
- * behaves in the same way, with respect to the write lock, as the
- * {@link Condition} implementation provided by
- * {@link ReentrantLock#newCondition} does for {@link ReentrantLock}.
- * This {@link Condition} can, of course, only be used with the write lock.
- *
- * <p>The read lock does not support a {@link Condition} and
- * {@code readLock().newCondition()} throws
- * {@code UnsupportedOperationException}.
- *
- * <li><b>Instrumentation</b>
- * <p>This class supports methods to determine whether locks
- * are held or contended. These methods are designed for monitoring
- * system state, not for synchronization control.
- * </ul>
- *
- * <p>Serialization of this class behaves in the same way as built-in
- * locks: a deserialized lock is in the unlocked state, regardless of
- * its state when serialized.
- *
- * <p><b>Sample usages</b>. Here is a code sketch showing how to perform
- * lock downgrading after updating a cache (exception handling is
- * particularly tricky when handling multiple locks in a non-nested
- * fashion):
- *
- * <pre> {@code
- * class CachedData {
- *   Object data;
- *   volatile boolean cacheValid;
- *   final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
- *
- *   void processCachedData() {
- *     rwl.readLock().lock();
- *     if (!cacheValid) {
- *        // Must release read lock before acquiring write lock
- *        rwl.readLock().unlock();
- *        rwl.writeLock().lock();
- *        try {
- *          // Recheck state because another thread might have
- *          // acquired write lock and changed state before we did.
- *          if (!cacheValid) {
- *            data = ...
- *            cacheValid = true;
- *          }
- *          // Downgrade by acquiring read lock before releasing write lock
- *          rwl.readLock().lock();
- *        } finally {
- *          rwl.writeLock().unlock(); // Unlock write, still hold read
- *        }
- *     }
- *
- *     try {
- *       use(data);
- *     } finally {
- *       rwl.readLock().unlock();
- *     }
- *   }
- * }}</pre>
- *
- * ReentrantReadWriteLocks can be used to improve concurrency in some
- * uses of some kinds of Collections. This is typically worthwhile
- * only when the collections are expected to be large, accessed by
- * more reader threads than writer threads, and entail operations with
- * overhead that outweighs synchronization overhead. For example, here
- * is a class using a TreeMap that is expected to be large and
- * concurrently accessed.
- *
- * <pre>{@code
- * class RWDictionary {
- *    private final Map<String, Data> m = new TreeMap<String, Data>();
- *    private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
- *    private final Lock r = rwl.readLock();
- *    private final Lock w = rwl.writeLock();
- *
- *    public Data get(String key) {
- *        r.lock();
- *        try { return m.get(key); }
- *        finally { r.unlock(); }
- *    }
- *    public String[] allKeys() {
- *        r.lock();
- *        try { return m.keySet().toArray(); }
- *        finally { r.unlock(); }
- *    }
- *    public Data put(String key, Data value) {
- *        w.lock();
- *        try { return m.put(key, value); }
- *        finally { w.unlock(); }
- *    }
- *    public void clear() {
- *        w.lock();
- *        try { m.clear(); }
- *        finally { w.unlock(); }
- *    }
- * }}</pre>
- *
- * <h3>Implementation Notes</h3>
- *
- * <p>This lock supports a maximum of 65535 recursive write locks
- * and 65535 read locks. Attempts to exceed these limits result in
- * {@link Error} throws from locking methods.
- *
- * @since 1.5
- * @author Doug Lea
- *
- */
-public class ReentrantReadWriteLock
-        implements ReadWriteLock, java.io.Serializable {
-    private static final long serialVersionUID = -6992448646407690164L;
-    /** Inner class providing readlock */
-    private final ReentrantReadWriteLock.ReadLock readerLock;
-    /** Inner class providing writelock */
-    private final ReentrantReadWriteLock.WriteLock writerLock;
-    /** Performs all synchronization mechanics */
-    final Sync sync;
-
-    /**
-     * Creates a new {@code ReentrantReadWriteLock} with
-     * default (nonfair) ordering properties.
-     */
-    public ReentrantReadWriteLock() {
-        this(false);
-    }
-
-    /**
-     * Creates a new {@code ReentrantReadWriteLock} with
-     * the given fairness policy.
-     *
-     * @param fair {@code true} if this lock should use a fair ordering policy
-     */
-    public ReentrantReadWriteLock(boolean fair) {
-        sync = fair ? new FairSync() : new NonfairSync();
-        readerLock = new ReadLock(this);
-        writerLock = new WriteLock(this);
-    }
-
-    public ReentrantReadWriteLock.WriteLock writeLock() { return writerLock; }
-    public ReentrantReadWriteLock.ReadLock  readLock()  { return readerLock; }
-
-    /**
-     * Synchronization implementation for ReentrantReadWriteLock.
-     * Subclassed into fair and nonfair versions.
-     */
-    abstract static class Sync extends AbstractQueuedSynchronizer {
-        private static final long serialVersionUID = 6317671515068378041L;
-
-        /*
-         * Read vs write count extraction constants and functions.
-         * Lock state is logically divided into two unsigned shorts:
-         * The lower one representing the exclusive (writer) lock hold count,
-         * and the upper the shared (reader) hold count.
-         */
-
-        static final int SHARED_SHIFT   = 16;
-        static final int SHARED_UNIT    = (1 << SHARED_SHIFT);
-        static final int MAX_COUNT      = (1 << SHARED_SHIFT) - 1;
-        static final int EXCLUSIVE_MASK = (1 << SHARED_SHIFT) - 1;
-
-        /** Returns the number of shared holds represented in count  */
-        static int sharedCount(int c)    { return c >>> SHARED_SHIFT; }
-        /** Returns the number of exclusive holds represented in count  */
-        static int exclusiveCount(int c) { return c & EXCLUSIVE_MASK; }
-
-        /**
-         * A counter for per-thread read hold counts.
-         * Maintained as a ThreadLocal; cached in cachedHoldCounter
-         */
-        static final class HoldCounter {
-            int count = 0;
-            // Use id, not reference, to avoid garbage retention
-            final long tid = Thread.currentThread().getId();
-        }
-
-        /**
-         * ThreadLocal subclass. Easiest to explicitly define for sake
-         * of deserialization mechanics.
-         */
-        static final class ThreadLocalHoldCounter
-            extends ThreadLocal<HoldCounter> {
-            public HoldCounter initialValue() {
-                return new HoldCounter();
-            }
-        }
-
-        /**
-         * The number of reentrant read locks held by current thread.
-         * Initialized only in constructor and readObject.
-         * Removed whenever a thread's read hold count drops to 0.
-         */
-        private transient ThreadLocalHoldCounter readHolds;
-
-        /**
-         * The hold count of the last thread to successfully acquire
-         * readLock. This saves ThreadLocal lookup in the common case
-         * where the next thread to release is the last one to
-         * acquire. This is non-volatile since it is just used
-         * as a heuristic, and would be great for threads to cache.
-         *
-         * <p>Can outlive the Thread for which it is caching the read
-         * hold count, but avoids garbage retention by not retaining a
-         * reference to the Thread.
-         *
-         * <p>Accessed via a benign data race; relies on the memory
-         * model's final field and out-of-thin-air guarantees.
-         */
-        private transient HoldCounter cachedHoldCounter;
-
-        /**
-         * firstReader is the first thread to have acquired the read lock.
-         * firstReaderHoldCount is firstReader's hold count.
-         *
-         * <p>More precisely, firstReader is the unique thread that last
-         * changed the shared count from 0 to 1, and has not released the
-         * read lock since then; null if there is no such thread.
-         *
-         * <p>Cannot cause garbage retention unless the thread terminated
-         * without relinquishing its read locks, since tryReleaseShared
-         * sets it to null.
-         *
-         * <p>Accessed via a benign data race; relies on the memory
-         * model's out-of-thin-air guarantees for references.
-         *
-         * <p>This allows tracking of read holds for uncontended read
-         * locks to be very cheap.
-         */
-        private transient Thread firstReader = null;
-        private transient int firstReaderHoldCount;
-
-        Sync() {
-            readHolds = new ThreadLocalHoldCounter();
-            setState(getState()); // ensures visibility of readHolds
-        }
-
-        /*
-         * Acquires and releases use the same code for fair and
-         * nonfair locks, but differ in whether/how they allow barging
-         * when queues are non-empty.
-         */
-
-        /**
-         * Returns true if the current thread, when trying to acquire
-         * the read lock, and otherwise eligible to do so, should block
-         * because of policy for overtaking other waiting threads.
-         */
-        abstract boolean readerShouldBlock();
-
-        /**
-         * Returns true if the current thread, when trying to acquire
-         * the write lock, and otherwise eligible to do so, should block
-         * because of policy for overtaking other waiting threads.
-         */
-        abstract boolean writerShouldBlock();
-
-        /*
-         * Note that tryRelease and tryAcquire can be called by
-         * Conditions. So it is possible that their arguments contain
-         * both read and write holds that are all released during a
-         * condition wait and re-established in tryAcquire.
-         */
-
-        protected final boolean tryRelease(int releases) {
-            if (!isHeldExclusively())
-                throw new IllegalMonitorStateException();
-            int nextc = getState() - releases;
-            boolean free = exclusiveCount(nextc) == 0;
-            if (free)
-                setExclusiveOwnerThread(null);
-            setState(nextc);
-            return free;
-        }
-
-        protected final boolean tryAcquire(int acquires) {
-            /*
-             * Walkthrough:
-             * 1. If read count nonzero or write count nonzero
-             *    and owner is a different thread, fail.
-             * 2. If count would saturate, fail. (This can only
-             *    happen if count is already nonzero.)
-             * 3. Otherwise, this thread is eligible for lock if
-             *    it is either a reentrant acquire or
-             *    queue policy allows it. If so, update state
-             *    and set owner.
-             */
-            Thread current = Thread.currentThread();
-            int c = getState();
-            int w = exclusiveCount(c);
-            if (c != 0) {
-                // (Note: if c != 0 and w == 0 then shared count != 0)
-                if (w == 0 || current != getExclusiveOwnerThread())
-                    return false;
-                if (w + exclusiveCount(acquires) > MAX_COUNT)
-                    throw new Error("Maximum lock count exceeded");
-                // Reentrant acquire
-                setState(c + acquires);
-                return true;
-            }
-            if (writerShouldBlock() ||
-                !compareAndSetState(c, c + acquires))
-                return false;
-            setExclusiveOwnerThread(current);
-            return true;
-        }
-
-        protected final boolean tryReleaseShared(int unused) {
-            Thread current = Thread.currentThread();
-            if (firstReader == current) {
-                // assert firstReaderHoldCount > 0;
-                if (firstReaderHoldCount == 1)
-                    firstReader = null;
-                else
-                    firstReaderHoldCount--;
-            } else {
-                HoldCounter rh = cachedHoldCounter;
-                if (rh == null || rh.tid != current.getId())
-                    rh = readHolds.get();
-                int count = rh.count;
-                if (count <= 1) {
-                    readHolds.remove();
-                    if (count <= 0)
-                        throw unmatchedUnlockException();
-                }
-                --rh.count;
-            }
-            for (;;) {
-                int c = getState();
-                int nextc = c - SHARED_UNIT;
-                if (compareAndSetState(c, nextc))
-                    // Releasing the read lock has no effect on readers,
-                    // but it may allow waiting writers to proceed if
-                    // both read and write locks are now free.
-                    return nextc == 0;
-            }
-        }
-
-        private IllegalMonitorStateException unmatchedUnlockException() {
-            return new IllegalMonitorStateException(
-                "attempt to unlock read lock, not locked by current thread");
-        }
-
-        protected final int tryAcquireShared(int unused) {
-            /*
-             * Walkthrough:
-             * 1. If write lock held by another thread, fail.
-             * 2. Otherwise, this thread is eligible for
-             *    lock wrt state, so ask if it should block
-             *    because of queue policy. If not, try
-             *    to grant by CASing state and updating count.
-             *    Note that step does not check for reentrant
-             *    acquires, which is postponed to full version
-             *    to avoid having to check hold count in
-             *    the more typical non-reentrant case.
-             * 3. If step 2 fails either because thread
-             *    apparently not eligible or CAS fails or count
-             *    saturated, chain to version with full retry loop.
-             */
-            Thread current = Thread.currentThread();
-            int c = getState();
-            if (exclusiveCount(c) != 0 &&
-                getExclusiveOwnerThread() != current)
-                return -1;
-            int r = sharedCount(c);
-            if (!readerShouldBlock() &&
-                r < MAX_COUNT &&
-                compareAndSetState(c, c + SHARED_UNIT)) {
-                if (r == 0) {
-                    firstReader = current;
-                    firstReaderHoldCount = 1;
-                } else if (firstReader == current) {
-                    firstReaderHoldCount++;
-                } else {
-                    HoldCounter rh = cachedHoldCounter;
-                    if (rh == null || rh.tid != current.getId())
-                        cachedHoldCounter = rh = readHolds.get();
-                    else if (rh.count == 0)
-                        readHolds.set(rh);
-                    rh.count++;
-                }
-                return 1;
-            }
-            return fullTryAcquireShared(current);
-        }
-
-        /**
-         * Full version of acquire for reads, that handles CAS misses
-         * and reentrant reads not dealt with in tryAcquireShared.
-         */
-        final int fullTryAcquireShared(Thread current) {
-            /*
-             * This code is in part redundant with that in
-             * tryAcquireShared but is simpler overall by not
-             * complicating tryAcquireShared with interactions between
-             * retries and lazily reading hold counts.
-             */
-            HoldCounter rh = null;
-            for (;;) {
-                int c = getState();
-                if (exclusiveCount(c) != 0) {
-                    if (getExclusiveOwnerThread() != current)
-                        return -1;
-                    // else we hold the exclusive lock; blocking here
-                    // would cause deadlock.
-                } else if (readerShouldBlock()) {
-                    // Make sure we're not acquiring read lock reentrantly
-                    if (firstReader == current) {
-                        // assert firstReaderHoldCount > 0;
-                    } else {
-                        if (rh == null) {
-                            rh = cachedHoldCounter;
-                            if (rh == null || rh.tid != current.getId()) {
-                                rh = readHolds.get();
-                                if (rh.count == 0)
-                                    readHolds.remove();
-                            }
-                        }
-                        if (rh.count == 0)
-                            return -1;
-                    }
-                }
-                if (sharedCount(c) == MAX_COUNT)
-                    throw new Error("Maximum lock count exceeded");
-                if (compareAndSetState(c, c + SHARED_UNIT)) {
-                    if (sharedCount(c) == 0) {
-                        firstReader = current;
-                        firstReaderHoldCount = 1;
-                    } else if (firstReader == current) {
-                        firstReaderHoldCount++;
-                    } else {
-                        if (rh == null)
-                            rh = cachedHoldCounter;
-                        if (rh == null || rh.tid != current.getId())
-                            rh = readHolds.get();
-                        else if (rh.count == 0)
-                            readHolds.set(rh);
-                        rh.count++;
-                        cachedHoldCounter = rh; // cache for release
-                    }
-                    return 1;
-                }
-            }
-        }
-
-        /**
-         * Performs tryLock for write, enabling barging in both modes.
-         * This is identical in effect to tryAcquire except for lack
-         * of calls to writerShouldBlock.
-         */
-        final boolean tryWriteLock() {
-            Thread current = Thread.currentThread();
-            int c = getState();
-            if (c != 0) {
-                int w = exclusiveCount(c);
-                if (w == 0 || current != getExclusiveOwnerThread())
-                    return false;
-                if (w == MAX_COUNT)
-                    throw new Error("Maximum lock count exceeded");
-            }
-            if (!compareAndSetState(c, c + 1))
-                return false;
-            setExclusiveOwnerThread(current);
-            return true;
-        }
-
-        /**
-         * Performs tryLock for read, enabling barging in both modes.
-         * This is identical in effect to tryAcquireShared except for
-         * lack of calls to readerShouldBlock.
-         */
-        final boolean tryReadLock() {
-            Thread current = Thread.currentThread();
-            for (;;) {
-                int c = getState();
-                if (exclusiveCount(c) != 0 &&
-                    getExclusiveOwnerThread() != current)
-                    return false;
-                int r = sharedCount(c);
-                if (r == MAX_COUNT)
-                    throw new Error("Maximum lock count exceeded");
-                if (compareAndSetState(c, c + SHARED_UNIT)) {
-                    if (r == 0) {
-                        firstReader = current;
-                        firstReaderHoldCount = 1;
-                    } else if (firstReader == current) {
-                        firstReaderHoldCount++;
-                    } else {
-                        HoldCounter rh = cachedHoldCounter;
-                        if (rh == null || rh.tid != current.getId())
-                            cachedHoldCounter = rh = readHolds.get();
-                        else if (rh.count == 0)
-                            readHolds.set(rh);
-                        rh.count++;
-                    }
-                    return true;
-                }
-            }
-        }
-
-        protected final boolean isHeldExclusively() {
-            // While we must in general read state before owner,
-            // we don't need to do so to check if current thread is owner
-            return getExclusiveOwnerThread() == Thread.currentThread();
-        }
-
-        // Methods relayed to outer class
-
-        final ConditionObject newCondition() {
-            return new ConditionObject();
-        }
-
-        final Thread getOwner() {
-            // Must read state before owner to ensure memory consistency
-            return ((exclusiveCount(getState()) == 0) ?
-                    null :
-                    getExclusiveOwnerThread());
-        }
-
-        final int getReadLockCount() {
-            return sharedCount(getState());
-        }
-
-        final boolean isWriteLocked() {
-            return exclusiveCount(getState()) != 0;
-        }
-
-        final int getWriteHoldCount() {
-            return isHeldExclusively() ? exclusiveCount(getState()) : 0;
-        }
-
-        final int getReadHoldCount() {
-            if (getReadLockCount() == 0)
-                return 0;
-
-            Thread current = Thread.currentThread();
-            if (firstReader == current)
-                return firstReaderHoldCount;
-
-            HoldCounter rh = cachedHoldCounter;
-            if (rh != null && rh.tid == current.getId())
-                return rh.count;
-
-            int count = readHolds.get().count;
-            if (count == 0) readHolds.remove();
-            return count;
-        }
-
-        /**
-         * Reconstitute this lock instance from a stream
-         * @param s the stream
-         */
-        private void readObject(java.io.ObjectInputStream s)
-            throws java.io.IOException, ClassNotFoundException {
-            s.defaultReadObject();
-            readHolds = new ThreadLocalHoldCounter();
-            setState(0); // reset to unlocked state
-        }
-
-        final int getCount() { return getState(); }
-    }
-
-    /**
-     * Nonfair version of Sync
-     */
-    static final class NonfairSync extends Sync {
-        private static final long serialVersionUID = -8159625535654395037L;
-        final boolean writerShouldBlock() {
-            return false; // writers can always barge
-        }
-        final boolean readerShouldBlock() {
-            /* As a heuristic to avoid indefinite writer starvation,
-             * block if the thread that momentarily appears to be head
-             * of queue, if one exists, is a waiting writer.  This is
-             * only a probabilistic effect since a new reader will not
-             * block if there is a waiting writer behind other enabled
-             * readers that have not yet drained from the queue.
-             */
-            return apparentlyFirstQueuedIsExclusive();
-        }
-    }
-
-    /**
-     * Fair version of Sync
-     */
-    static final class FairSync extends Sync {
-        private static final long serialVersionUID = -2274990926593161451L;
-        final boolean writerShouldBlock() {
-            return hasQueuedPredecessors();
-        }
-        final boolean readerShouldBlock() {
-            return hasQueuedPredecessors();
-        }
-    }
-
-    /**
-     * The lock returned by method {@link ReentrantReadWriteLock#readLock}.
-     */
-    public static class ReadLock implements Lock, java.io.Serializable {
-        private static final long serialVersionUID = -5992448646407690164L;
-        private final Sync sync;
-
-        /**
-         * Constructor for use by subclasses
-         *
-         * @param lock the outer lock object
-         * @throws NullPointerException if the lock is null
-         */
-        protected ReadLock(ReentrantReadWriteLock lock) {
-            sync = lock.sync;
-        }
-
-        /**
-         * Acquires the read lock.
-         *
-         * <p>Acquires the read lock if the write lock is not held by
-         * another thread and returns immediately.
-         *
-         * <p>If the write lock is held by another thread then
-         * the current thread becomes disabled for thread scheduling
-         * purposes and lies dormant until the read lock has been acquired.
-         */
-        public void lock() {
-            sync.acquireShared(1);
-        }
-
-        /**
-         * Acquires the read lock unless the current thread is
-         * {@linkplain Thread#interrupt interrupted}.
-         *
-         * <p>Acquires the read lock if the write lock is not held
-         * by another thread and returns immediately.
-         *
-         * <p>If the write lock is held by another thread then the
-         * current thread becomes disabled for thread scheduling
-         * purposes and lies dormant until one of two things happens:
-         *
-         * <ul>
-         *
-         * <li>The read lock is acquired by the current thread; or
-         *
-         * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-         * the current thread.
-         *
-         * </ul>
-         *
-         * <p>If the current thread:
-         *
-         * <ul>
-         *
-         * <li>has its interrupted status set on entry to this method; or
-         *
-         * <li>is {@linkplain Thread#interrupt interrupted} while
-         * acquiring the read lock,
-         *
-         * </ul>
-         *
-         * then {@link InterruptedException} is thrown and the current
-         * thread's interrupted status is cleared.
-         *
-         * <p>In this implementation, as this method is an explicit
-         * interruption point, preference is given to responding to
-         * the interrupt over normal or reentrant acquisition of the
-         * lock.
-         *
-         * @throws InterruptedException if the current thread is interrupted
-         */
-        public void lockInterruptibly() throws InterruptedException {
-            sync.acquireSharedInterruptibly(1);
-        }
-
-        /**
-         * Acquires the read lock only if the write lock is not held by
-         * another thread at the time of invocation.
-         *
-         * <p>Acquires the read lock if the write lock is not held by
-         * another thread and returns immediately with the value
-         * {@code true}. Even when this lock has been set to use a
-         * fair ordering policy, a call to {@code tryLock()}
-         * <em>will</em> immediately acquire the read lock if it is
-         * available, whether or not other threads are currently
-         * waiting for the read lock.  This &quot;barging&quot; behavior
-         * can be useful in certain circumstances, even though it
-         * breaks fairness. If you want to honor the fairness setting
-         * for this lock, then use {@link #tryLock(long, TimeUnit)
-         * tryLock(0, TimeUnit.SECONDS) } which is almost equivalent
-         * (it also detects interruption).
-         *
-         * <p>If the write lock is held by another thread then
-         * this method will return immediately with the value
-         * {@code false}.
-         *
-         * @return {@code true} if the read lock was acquired
-         */
-        public  boolean tryLock() {
-            return sync.tryReadLock();
-        }
-
-        /**
-         * Acquires the read lock if the write lock is not held by
-         * another thread within the given waiting time and the
-         * current thread has not been {@linkplain Thread#interrupt
-         * interrupted}.
-         *
-         * <p>Acquires the read lock if the write lock is not held by
-         * another thread and returns immediately with the value
-         * {@code true}. If this lock has been set to use a fair
-         * ordering policy then an available lock <em>will not</em> be
-         * acquired if any other threads are waiting for the
-         * lock. This is in contrast to the {@link #tryLock()}
-         * method. If you want a timed {@code tryLock} that does
-         * permit barging on a fair lock then combine the timed and
-         * un-timed forms together:
-         *
-         * <pre>if (lock.tryLock() || lock.tryLock(timeout, unit) ) { ... }
-         * </pre>
-         *
-         * <p>If the write lock is held by another thread then the
-         * current thread becomes disabled for thread scheduling
-         * purposes and lies dormant until one of three things happens:
-         *
-         * <ul>
-         *
-         * <li>The read lock is acquired by the current thread; or
-         *
-         * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-         * the current thread; or
-         *
-         * <li>The specified waiting time elapses.
-         *
-         * </ul>
-         *
-         * <p>If the read lock is acquired then the value {@code true} is
-         * returned.
-         *
-         * <p>If the current thread:
-         *
-         * <ul>
-         *
-         * <li>has its interrupted status set on entry to this method; or
-         *
-         * <li>is {@linkplain Thread#interrupt interrupted} while
-         * acquiring the read lock,
-         *
-         * </ul> then {@link InterruptedException} is thrown and the
-         * current thread's interrupted status is cleared.
-         *
-         * <p>If the specified waiting time elapses then the value
-         * {@code false} is returned.  If the time is less than or
-         * equal to zero, the method will not wait at all.
-         *
-         * <p>In this implementation, as this method is an explicit
-         * interruption point, preference is given to responding to
-         * the interrupt over normal or reentrant acquisition of the
-         * lock, and over reporting the elapse of the waiting time.
-         *
-         * @param timeout the time to wait for the read lock
-         * @param unit the time unit of the timeout argument
-         * @return {@code true} if the read lock was acquired
-         * @throws InterruptedException if the current thread is interrupted
-         * @throws NullPointerException if the time unit is null
-         *
-         */
-        public boolean tryLock(long timeout, TimeUnit unit)
-                throws InterruptedException {
-            return sync.tryAcquireSharedNanos(1, unit.toNanos(timeout));
-        }
-
-        /**
-         * Attempts to release this lock.
-         *
-         * <p> If the number of readers is now zero then the lock
-         * is made available for write lock attempts.
-         */
-        public  void unlock() {
-            sync.releaseShared(1);
-        }
-
-        /**
-         * Throws {@code UnsupportedOperationException} because
-         * {@code ReadLocks} do not support conditions.
-         *
-         * @throws UnsupportedOperationException always
-         */
-        public Condition newCondition() {
-            throw new UnsupportedOperationException();
-        }
-
-        /**
-         * Returns a string identifying this lock, as well as its lock state.
-         * The state, in brackets, includes the String {@code "Read locks ="}
-         * followed by the number of held read locks.
-         *
-         * @return a string identifying this lock, as well as its lock state
-         */
-        public String toString() {
-            int r = sync.getReadLockCount();
-            return super.toString() +
-                "[Read locks = " + r + "]";
-        }
-    }
-
-    /**
-     * The lock returned by method {@link ReentrantReadWriteLock#writeLock}.
-     */
-    public static class WriteLock implements Lock, java.io.Serializable {
-        private static final long serialVersionUID = -4992448646407690164L;
-        private final Sync sync;
-
-        /**
-         * Constructor for use by subclasses
-         *
-         * @param lock the outer lock object
-         * @throws NullPointerException if the lock is null
-         */
-        protected WriteLock(ReentrantReadWriteLock lock) {
-            sync = lock.sync;
-        }
-
-        /**
-         * Acquires the write lock.
-         *
-         * <p>Acquires the write lock if neither the read nor write lock
-         * are held by another thread
-         * and returns immediately, setting the write lock hold count to
-         * one.
-         *
-         * <p>If the current thread already holds the write lock then the
-         * hold count is incremented by one and the method returns
-         * immediately.
-         *
-         * <p>If the lock is held by another thread then the current
-         * thread becomes disabled for thread scheduling purposes and
-         * lies dormant until the write lock has been acquired, at which
-         * time the write lock hold count is set to one.
-         */
-        public void lock() {
-            sync.acquire(1);
-        }
-
-        /**
-         * Acquires the write lock unless the current thread is
-         * {@linkplain Thread#interrupt interrupted}.
-         *
-         * <p>Acquires the write lock if neither the read nor write lock
-         * are held by another thread
-         * and returns immediately, setting the write lock hold count to
-         * one.
-         *
-         * <p>If the current thread already holds this lock then the
-         * hold count is incremented by one and the method returns
-         * immediately.
-         *
-         * <p>If the lock is held by another thread then the current
-         * thread becomes disabled for thread scheduling purposes and
-         * lies dormant until one of two things happens:
-         *
-         * <ul>
-         *
-         * <li>The write lock is acquired by the current thread; or
-         *
-         * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-         * the current thread.
-         *
-         * </ul>
-         *
-         * <p>If the write lock is acquired by the current thread then the
-         * lock hold count is set to one.
-         *
-         * <p>If the current thread:
-         *
-         * <ul>
-         *
-         * <li>has its interrupted status set on entry to this method;
-         * or
-         *
-         * <li>is {@linkplain Thread#interrupt interrupted} while
-         * acquiring the write lock,
-         *
-         * </ul>
-         *
-         * then {@link InterruptedException} is thrown and the current
-         * thread's interrupted status is cleared.
-         *
-         * <p>In this implementation, as this method is an explicit
-         * interruption point, preference is given to responding to
-         * the interrupt over normal or reentrant acquisition of the
-         * lock.
-         *
-         * @throws InterruptedException if the current thread is interrupted
-         */
-        public void lockInterruptibly() throws InterruptedException {
-            sync.acquireInterruptibly(1);
-        }
-
-        /**
-         * Acquires the write lock only if it is not held by another thread
-         * at the time of invocation.
-         *
-         * <p>Acquires the write lock if neither the read nor write lock
-         * are held by another thread
-         * and returns immediately with the value {@code true},
-         * setting the write lock hold count to one. Even when this lock has
-         * been set to use a fair ordering policy, a call to
-         * {@code tryLock()} <em>will</em> immediately acquire the
-         * lock if it is available, whether or not other threads are
-         * currently waiting for the write lock.  This &quot;barging&quot;
-         * behavior can be useful in certain circumstances, even
-         * though it breaks fairness. If you want to honor the
-         * fairness setting for this lock, then use {@link
-         * #tryLock(long, TimeUnit) tryLock(0, TimeUnit.SECONDS) }
-         * which is almost equivalent (it also detects interruption).
-         *
-         * <p> If the current thread already holds this lock then the
-         * hold count is incremented by one and the method returns
-         * {@code true}.
-         *
-         * <p>If the lock is held by another thread then this method
-         * will return immediately with the value {@code false}.
-         *
-         * @return {@code true} if the lock was free and was acquired
-         * by the current thread, or the write lock was already held
-         * by the current thread; and {@code false} otherwise.
-         */
-        public boolean tryLock( ) {
-            return sync.tryWriteLock();
-        }
-
-        /**
-         * Acquires the write lock if it is not held by another thread
-         * within the given waiting time and the current thread has
-         * not been {@linkplain Thread#interrupt interrupted}.
-         *
-         * <p>Acquires the write lock if neither the read nor write lock
-         * are held by another thread
-         * and returns immediately with the value {@code true},
-         * setting the write lock hold count to one. If this lock has been
-         * set to use a fair ordering policy then an available lock
-         * <em>will not</em> be acquired if any other threads are
-         * waiting for the write lock. This is in contrast to the {@link
-         * #tryLock()} method. If you want a timed {@code tryLock}
-         * that does permit barging on a fair lock then combine the
-         * timed and un-timed forms together:
-         *
-         * <pre>if (lock.tryLock() || lock.tryLock(timeout, unit) ) { ... }
-         * </pre>
-         *
-         * <p>If the current thread already holds this lock then the
-         * hold count is incremented by one and the method returns
-         * {@code true}.
-         *
-         * <p>If the lock is held by another thread then the current
-         * thread becomes disabled for thread scheduling purposes and
-         * lies dormant until one of three things happens:
-         *
-         * <ul>
-         *
-         * <li>The write lock is acquired by the current thread; or
-         *
-         * <li>Some other thread {@linkplain Thread#interrupt interrupts}
-         * the current thread; or
-         *
-         * <li>The specified waiting time elapses
-         *
-         * </ul>
-         *
-         * <p>If the write lock is acquired then the value {@code true} is
-         * returned and the write lock hold count is set to one.
-         *
-         * <p>If the current thread:
-         *
-         * <ul>
-         *
-         * <li>has its interrupted status set on entry to this method;
-         * or
-         *
-         * <li>is {@linkplain Thread#interrupt interrupted} while
-         * acquiring the write lock,
-         *
-         * </ul>
-         *
-         * then {@link InterruptedException} is thrown and the current
-         * thread's interrupted status is cleared.
-         *
-         * <p>If the specified waiting time elapses then the value
-         * {@code false} is returned.  If the time is less than or
-         * equal to zero, the method will not wait at all.
-         *
-         * <p>In this implementation, as this method is an explicit
-         * interruption point, preference is given to responding to
-         * the interrupt over normal or reentrant acquisition of the
-         * lock, and over reporting the elapse of the waiting time.
-         *
-         * @param timeout the time to wait for the write lock
-         * @param unit the time unit of the timeout argument
-         *
-         * @return {@code true} if the lock was free and was acquired
-         * by the current thread, or the write lock was already held by the
-         * current thread; and {@code false} if the waiting time
-         * elapsed before the lock could be acquired.
-         *
-         * @throws InterruptedException if the current thread is interrupted
-         * @throws NullPointerException if the time unit is null
-         *
-         */
-        public boolean tryLock(long timeout, TimeUnit unit)
-                throws InterruptedException {
-            return sync.tryAcquireNanos(1, unit.toNanos(timeout));
-        }
-
-        /**
-         * Attempts to release this lock.
-         *
-         * <p>If the current thread is the holder of this lock then
-         * the hold count is decremented. If the hold count is now
-         * zero then the lock is released.  If the current thread is
-         * not the holder of this lock then {@link
-         * IllegalMonitorStateException} is thrown.
-         *
-         * @throws IllegalMonitorStateException if the current thread does not
-         * hold this lock.
-         */
-        public void unlock() {
-            sync.release(1);
-        }
-
-        /**
-         * Returns a {@link Condition} instance for use with this
-         * {@link Lock} instance.
-         * <p>The returned {@link Condition} instance supports the same
-         * usages as do the {@link Object} monitor methods ({@link
-         * Object#wait() wait}, {@link Object#notify notify}, and {@link
-         * Object#notifyAll notifyAll}) when used with the built-in
-         * monitor lock.
-         *
-         * <ul>
-         *
-         * <li>If this write lock is not held when any {@link
-         * Condition} method is called then an {@link
-         * IllegalMonitorStateException} is thrown.  (Read locks are
-         * held independently of write locks, so are not checked or
-         * affected. However it is essentially always an error to
-         * invoke a condition waiting method when the current thread
-         * has also acquired read locks, since other threads that
-         * could unblock it will not be able to acquire the write
-         * lock.)
-         *
-         * <li>When the condition {@linkplain Condition#await() waiting}
-         * methods are called the write lock is released and, before
-         * they return, the write lock is reacquired and the lock hold
-         * count restored to what it was when the method was called.
-         *
-         * <li>If a thread is {@linkplain Thread#interrupt interrupted} while
-         * waiting then the wait will terminate, an {@link
-         * InterruptedException} will be thrown, and the thread's
-         * interrupted status will be cleared.
-         *
-         * <li> Waiting threads are signalled in FIFO order.
-         *
-         * <li>The ordering of lock reacquisition for threads returning
-         * from waiting methods is the same as for threads initially
-         * acquiring the lock, which is in the default case not specified,
-         * but for <em>fair</em> locks favors those threads that have been
-         * waiting the longest.
-         *
-         * </ul>
-         *
-         * @return the Condition object
-         */
-        public Condition newCondition() {
-            return sync.newCondition();
-        }
-
-        /**
-         * Returns a string identifying this lock, as well as its lock
-         * state.  The state, in brackets includes either the String
-         * {@code "Unlocked"} or the String {@code "Locked by"}
-         * followed by the {@linkplain Thread#getName name} of the owning thread.
-         *
-         * @return a string identifying this lock, as well as its lock state
-         */
-        public String toString() {
-            Thread o = sync.getOwner();
-            return super.toString() + ((o == null) ?
-                                       "[Unlocked]" :
-                                       "[Locked by thread " + o.getName() + "]");
-        }
-
-        /**
-         * Queries if this write lock is held by the current thread.
-         * Identical in effect to {@link
-         * ReentrantReadWriteLock#isWriteLockedByCurrentThread}.
-         *
-         * @return {@code true} if the current thread holds this lock and
-         *         {@code false} otherwise
-         * @since 1.6
-         */
-        public boolean isHeldByCurrentThread() {
-            return sync.isHeldExclusively();
-        }
-
-        /**
-         * Queries the number of holds on this write lock by the current
-         * thread.  A thread has a hold on a lock for each lock action
-         * that is not matched by an unlock action.  Identical in effect
-         * to {@link ReentrantReadWriteLock#getWriteHoldCount}.
-         *
-         * @return the number of holds on this lock by the current thread,
-         *         or zero if this lock is not held by the current thread
-         * @since 1.6
-         */
-        public int getHoldCount() {
-            return sync.getWriteHoldCount();
-        }
-    }
-
-    // Instrumentation and status
-
-    /**
-     * Returns {@code true} if this lock has fairness set true.
-     *
-     * @return {@code true} if this lock has fairness set true
-     */
-    public final boolean isFair() {
-        return sync instanceof FairSync;
-    }
-
-    /**
-     * Returns the thread that currently owns the write lock, or
-     * {@code null} if not owned. When this method is called by a
-     * thread that is not the owner, the return value reflects a
-     * best-effort approximation of current lock status. For example,
-     * the owner may be momentarily {@code null} even if there are
-     * threads trying to acquire the lock but have not yet done so.
-     * This method is designed to facilitate construction of
-     * subclasses that provide more extensive lock monitoring
-     * facilities.
-     *
-     * @return the owner, or {@code null} if not owned
-     */
-    protected Thread getOwner() {
-        return sync.getOwner();
-    }
-
-    /**
-     * Queries the number of read locks held for this lock. This
-     * method is designed for use in monitoring system state, not for
-     * synchronization control.
-     * @return the number of read locks held.
-     */
-    public int getReadLockCount() {
-        return sync.getReadLockCount();
-    }
-
-    /**
-     * Queries if the write lock is held by any thread. This method is
-     * designed for use in monitoring system state, not for
-     * synchronization control.
-     *
-     * @return {@code true} if any thread holds the write lock and
-     *         {@code false} otherwise
-     */
-    public boolean isWriteLocked() {
-        return sync.isWriteLocked();
-    }
-
-    /**
-     * Queries if the write lock is held by the current thread.
-     *
-     * @return {@code true} if the current thread holds the write lock and
-     *         {@code false} otherwise
-     */
-    public boolean isWriteLockedByCurrentThread() {
-        return sync.isHeldExclusively();
-    }
-
-    /**
-     * Queries the number of reentrant write holds on this lock by the
-     * current thread.  A writer thread has a hold on a lock for
-     * each lock action that is not matched by an unlock action.
-     *
-     * @return the number of holds on the write lock by the current thread,
-     *         or zero if the write lock is not held by the current thread
-     */
-    public int getWriteHoldCount() {
-        return sync.getWriteHoldCount();
-    }
-
-    /**
-     * Queries the number of reentrant read holds on this lock by the
-     * current thread.  A reader thread has a hold on a lock for
-     * each lock action that is not matched by an unlock action.
-     *
-     * @return the number of holds on the read lock by the current thread,
-     *         or zero if the read lock is not held by the current thread
-     * @since 1.6
-     */
-    public int getReadHoldCount() {
-        return sync.getReadHoldCount();
-    }
-
-    /**
-     * Returns a collection containing threads that may be waiting to
-     * acquire the write lock.  Because the actual set of threads may
-     * change dynamically while constructing this result, the returned
-     * collection is only a best-effort estimate.  The elements of the
-     * returned collection are in no particular order.  This method is
-     * designed to facilitate construction of subclasses that provide
-     * more extensive lock monitoring facilities.
-     *
-     * @return the collection of threads
-     */
-    protected Collection<Thread> getQueuedWriterThreads() {
-        return sync.getExclusiveQueuedThreads();
-    }
-
-    /**
-     * Returns a collection containing threads that may be waiting to
-     * acquire the read lock.  Because the actual set of threads may
-     * change dynamically while constructing this result, the returned
-     * collection is only a best-effort estimate.  The elements of the
-     * returned collection are in no particular order.  This method is
-     * designed to facilitate construction of subclasses that provide
-     * more extensive lock monitoring facilities.
-     *
-     * @return the collection of threads
-     */
-    protected Collection<Thread> getQueuedReaderThreads() {
-        return sync.getSharedQueuedThreads();
-    }
-
-    /**
-     * Queries whether any threads are waiting to acquire the read or
-     * write lock. Note that because cancellations may occur at any
-     * time, a {@code true} return does not guarantee that any other
-     * thread will ever acquire a lock.  This method is designed
-     * primarily for use in monitoring of the system state.
-     *
-     * @return {@code true} if there may be other threads waiting to
-     *         acquire the lock
-     */
-    public final boolean hasQueuedThreads() {
-        return sync.hasQueuedThreads();
-    }
-
-    /**
-     * Queries whether the given thread is waiting to acquire either
-     * the read or write lock. Note that because cancellations may
-     * occur at any time, a {@code true} return does not guarantee
-     * that this thread will ever acquire a lock.  This method is
-     * designed primarily for use in monitoring of the system state.
-     *
-     * @param thread the thread
-     * @return {@code true} if the given thread is queued waiting for this lock
-     * @throws NullPointerException if the thread is null
-     */
-    public final boolean hasQueuedThread(Thread thread) {
-        return sync.isQueued(thread);
-    }
-
-    /**
-     * Returns an estimate of the number of threads waiting to acquire
-     * either the read or write lock.  The value is only an estimate
-     * because the number of threads may change dynamically while this
-     * method traverses internal data structures.  This method is
-     * designed for use in monitoring of the system state, not for
-     * synchronization control.
-     *
-     * @return the estimated number of threads waiting for this lock
-     */
-    public final int getQueueLength() {
-        return sync.getQueueLength();
-    }
-
-    /**
-     * Returns a collection containing threads that may be waiting to
-     * acquire either the read or write lock.  Because the actual set
-     * of threads may change dynamically while constructing this
-     * result, the returned collection is only a best-effort estimate.
-     * The elements of the returned collection are in no particular
-     * order.  This method is designed to facilitate construction of
-     * subclasses that provide more extensive monitoring facilities.
-     *
-     * @return the collection of threads
-     */
-    protected Collection<Thread> getQueuedThreads() {
-        return sync.getQueuedThreads();
-    }
-
-    /**
-     * Queries whether any threads are waiting on the given condition
-     * associated with the write lock. Note that because timeouts and
-     * interrupts may occur at any time, a {@code true} return does
-     * not guarantee that a future {@code signal} will awaken any
-     * threads.  This method is designed primarily for use in
-     * monitoring of the system state.
-     *
-     * @param condition the condition
-     * @return {@code true} if there are any waiting threads
-     * @throws IllegalMonitorStateException if this lock is not held
-     * @throws IllegalArgumentException if the given condition is
-     *         not associated with this lock
-     * @throws NullPointerException if the condition is null
-     */
-    public boolean hasWaiters(Condition condition) {
-        if (condition == null)
-            throw new NullPointerException();
-        if (!(condition instanceof AbstractQueuedSynchronizer.ConditionObject))
-            throw new IllegalArgumentException("not owner");
-        return sync.hasWaiters((AbstractQueuedSynchronizer.ConditionObject)condition);
-    }
-
-    /**
-     * Returns an estimate of the number of threads waiting on the
-     * given condition associated with the write lock. Note that because
-     * timeouts and interrupts may occur at any time, the estimate
-     * serves only as an upper bound on the actual number of waiters.
-     * This method is designed for use in monitoring of the system
-     * state, not for synchronization control.
-     *
-     * @param condition the condition
-     * @return the estimated number of waiting threads
-     * @throws IllegalMonitorStateException if this lock is not held
-     * @throws IllegalArgumentException if the given condition is
-     *         not associated with this lock
-     * @throws NullPointerException if the condition is null
-     */
-    public int getWaitQueueLength(Condition condition) {
-        if (condition == null)
-            throw new NullPointerException();
-        if (!(condition instanceof AbstractQueuedSynchronizer.ConditionObject))
-            throw new IllegalArgumentException("not owner");
-        return sync.getWaitQueueLength((AbstractQueuedSynchronizer.ConditionObject)condition);
-    }
-
-    /**
-     * Returns a collection containing those threads that may be
-     * waiting on the given condition associated with the write lock.
-     * Because the actual set of threads may change dynamically while
-     * constructing this result, the returned collection is only a
-     * best-effort estimate. The elements of the returned collection
-     * are in no particular order.  This method is designed to
-     * facilitate construction of subclasses that provide more
-     * extensive condition monitoring facilities.
-     *
-     * @param condition the condition
-     * @return the collection of threads
-     * @throws IllegalMonitorStateException if this lock is not held
-     * @throws IllegalArgumentException if the given condition is
-     *         not associated with this lock
-     * @throws NullPointerException if the condition is null
-     */
-    protected Collection<Thread> getWaitingThreads(Condition condition) {
-        if (condition == null)
-            throw new NullPointerException();
-        if (!(condition instanceof AbstractQueuedSynchronizer.ConditionObject))
-            throw new IllegalArgumentException("not owner");
-        return sync.getWaitingThreads((AbstractQueuedSynchronizer.ConditionObject)condition);
-    }
-
-    /**
-     * Returns a string identifying this lock, as well as its lock state.
-     * The state, in brackets, includes the String {@code "Write locks ="}
-     * followed by the number of reentrantly held write locks, and the
-     * String {@code "Read locks ="} followed by the number of held
-     * read locks.
-     *
-     * @return a string identifying this lock, as well as its lock state
-     */
-    public String toString() {
-        int c = sync.getCount();
-        int w = Sync.exclusiveCount(c);
-        int r = Sync.sharedCount(c);
-
-        return super.toString() +
-            "[Write locks = " + w + ", Read locks = " + r + "]";
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/concurrent/locks/package-info.java b/ojluni/src/main/java/java/util/concurrent/locks/package-info.java
deleted file mode 100755
index 97dfcc9..0000000
--- a/ojluni/src/main/java/java/util/concurrent/locks/package-info.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-/**
- * Interfaces and classes providing a framework for locking and waiting
- * for conditions that is distinct from built-in synchronization and
- * monitors.  The framework permits much greater flexibility in the use of
- * locks and conditions, at the expense of more awkward syntax.
- *
- * <p>The {@link java.util.concurrent.locks.Lock} interface supports
- * locking disciplines that differ in semantics (reentrant, fair, etc),
- * and that can be used in non-block-structured contexts including
- * hand-over-hand and lock reordering algorithms.  The main implementation
- * is {@link java.util.concurrent.locks.ReentrantLock}.
- *
- * <p>The {@link java.util.concurrent.locks.ReadWriteLock} interface
- * similarly defines locks that may be shared among readers but are
- * exclusive to writers.  Only a single implementation, {@link
- * java.util.concurrent.locks.ReentrantReadWriteLock}, is provided, since
- * it covers most standard usage contexts.  But programmers may create
- * their own implementations to cover nonstandard requirements.
- *
- * <p>The {@link java.util.concurrent.locks.Condition} interface
- * describes condition variables that may be associated with Locks.
- * These are similar in usage to the implicit monitors accessed using
- * {@code Object.wait}, but offer extended capabilities.
- * In particular, multiple {@code Condition} objects may be associated
- * with a single {@code Lock}.  To avoid compatibility issues, the
- * names of {@code Condition} methods are different from the
- * corresponding {@code Object} versions.
- *
- * <p>The {@link java.util.concurrent.locks.AbstractQueuedSynchronizer}
- * class serves as a useful superclass for defining locks and other
- * synchronizers that rely on queuing blocked threads.  The {@link
- * java.util.concurrent.locks.AbstractQueuedLongSynchronizer} class
- * provides the same functionality but extends support to 64 bits of
- * synchronization state.  Both extend class {@link
- * java.util.concurrent.locks.AbstractOwnableSynchronizer}, a simple
- * class that helps record the thread currently holding exclusive
- * synchronization.  The {@link java.util.concurrent.locks.LockSupport}
- * class provides lower-level blocking and unblocking support that is
- * useful for those developers implementing their own customized lock
- * classes.
- *
- * @since 1.5
- */
-package java.util.concurrent.locks;
diff --git a/ojluni/src/main/java/java/util/concurrent/package-info.java b/ojluni/src/main/java/java/util/concurrent/package-info.java
deleted file mode 100755
index 8116e82..0000000
--- a/ojluni/src/main/java/java/util/concurrent/package-info.java
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * 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 file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-/**
- * Utility classes commonly useful in concurrent programming.  This
- * package includes a few small standardized extensible frameworks, as
- * well as some classes that provide useful functionality and are
- * otherwise tedious or difficult to implement.  Here are brief
- * descriptions of the main components.  See also the
- * {@link java.util.concurrent.locks} and
- * {@link java.util.concurrent.atomic} packages.
- *
- * <h2>Executors</h2>
- *
- * <b>Interfaces.</b>
- *
- * {@link java.util.concurrent.Executor} is a simple standardized
- * interface for defining custom thread-like subsystems, including
- * thread pools, asynchronous IO, and lightweight task frameworks.
- * Depending on which concrete Executor class is being used, tasks may
- * execute in a newly created thread, an existing task-execution thread,
- * or the thread calling {@link java.util.concurrent.Executor#execute
- * execute}, and may execute sequentially or concurrently.
- *
- * {@link java.util.concurrent.ExecutorService} provides a more
- * complete asynchronous task execution framework.  An
- * ExecutorService manages queuing and scheduling of tasks,
- * and allows controlled shutdown.
- *
- * The {@link java.util.concurrent.ScheduledExecutorService}
- * subinterface and associated interfaces add support for
- * delayed and periodic task execution.  ExecutorServices
- * provide methods arranging asynchronous execution of any
- * function expressed as {@link java.util.concurrent.Callable},
- * the result-bearing analog of {@link java.lang.Runnable}.
- *
- * A {@link java.util.concurrent.Future} returns the results of
- * a function, allows determination of whether execution has
- * completed, and provides a means to cancel execution.
- *
- * A {@link java.util.concurrent.RunnableFuture} is a {@code Future}
- * that possesses a {@code run} method that upon execution,
- * sets its results.
- *
- * <p>
- *
- * <b>Implementations.</b>
- *
- * Classes {@link java.util.concurrent.ThreadPoolExecutor} and
- * {@link java.util.concurrent.ScheduledThreadPoolExecutor}
- * provide tunable, flexible thread pools.
- *
- * The {@link java.util.concurrent.Executors} class provides
- * factory methods for the most common kinds and configurations
- * of Executors, as well as a few utility methods for using
- * them.  Other utilities based on {@code Executors} include the
- * concrete class {@link java.util.concurrent.FutureTask}
- * providing a common extensible implementation of Futures, and
- * {@link java.util.concurrent.ExecutorCompletionService}, that
- * assists in coordinating the processing of groups of
- * asynchronous tasks.
- *
- * <p>Class {@link java.util.concurrent.ForkJoinPool} provides an
- * Executor primarily designed for processing instances of {@link
- * java.util.concurrent.ForkJoinTask} and its subclasses.  These
- * classes employ a work-stealing scheduler that attains high
- * throughput for tasks conforming to restrictions that often hold in
- * computation-intensive parallel processing.
- *
- * <h2>Queues</h2>
- *
- * The {@link java.util.concurrent.ConcurrentLinkedQueue} class
- * supplies an efficient scalable thread-safe non-blocking FIFO
- * queue.
- *
- * <p>Five implementations in {@code java.util.concurrent} support
- * the extended {@link java.util.concurrent.BlockingQueue}
- * interface, that defines blocking versions of put and take:
- * {@link java.util.concurrent.LinkedBlockingQueue},
- * {@link java.util.concurrent.ArrayBlockingQueue},
- * {@link java.util.concurrent.SynchronousQueue},
- * {@link java.util.concurrent.PriorityBlockingQueue}, and
- * {@link java.util.concurrent.DelayQueue}.
- * The different classes cover the most common usage contexts
- * for producer-consumer, messaging, parallel tasking, and
- * related concurrent designs.
- *
- * <p> Extended interface {@link java.util.concurrent.TransferQueue},
- * and implementation {@link java.util.concurrent.LinkedTransferQueue}
- * introduce a synchronous {@code transfer} method (along with related
- * features) in which a producer may optionally block awaiting its
- * consumer.
- *
- * <p>The {@link java.util.concurrent.BlockingDeque} interface
- * extends {@code BlockingQueue} to support both FIFO and LIFO
- * (stack-based) operations.
- * Class {@link java.util.concurrent.LinkedBlockingDeque}
- * provides an implementation.
- *
- * <h2>Timing</h2>
- *
- * The {@link java.util.concurrent.TimeUnit} class provides
- * multiple granularities (including nanoseconds) for
- * specifying and controlling time-out based operations.  Most
- * classes in the package contain operations based on time-outs
- * in addition to indefinite waits.  In all cases that
- * time-outs are used, the time-out specifies the minimum time
- * that the method should wait before indicating that it
- * timed-out.  Implementations make a &quot;best effort&quot;
- * to detect time-outs as soon as possible after they occur.
- * However, an indefinite amount of time may elapse between a
- * time-out being detected and a thread actually executing
- * again after that time-out.  All methods that accept timeout
- * parameters treat values less than or equal to zero to mean
- * not to wait at all.  To wait "forever", you can use a value
- * of {@code Long.MAX_VALUE}.
- *
- * <h2>Synchronizers</h2>
- *
- * Five classes aid common special-purpose synchronization idioms.
- * <ul>
- *
- * <li>{@link java.util.concurrent.Semaphore} is a classic concurrency tool.
- *
- * <li>{@link java.util.concurrent.CountDownLatch} is a very simple yet
- * very common utility for blocking until a given number of signals,
- * events, or conditions hold.
- *
- * <li>A {@link java.util.concurrent.CyclicBarrier} is a resettable
- * multiway synchronization point useful in some styles of parallel
- * programming.
- *
- * <li>A {@link java.util.concurrent.Phaser} provides
- * a more flexible form of barrier that may be used to control phased
- * computation among multiple threads.
- *
- * <li>An {@link java.util.concurrent.Exchanger} allows two threads to
- * exchange objects at a rendezvous point, and is useful in several
- * pipeline designs.
- *
- * </ul>
- *
- * <h2>Concurrent Collections</h2>
- *
- * Besides Queues, this package supplies Collection implementations
- * designed for use in multithreaded contexts:
- * {@link java.util.concurrent.ConcurrentHashMap},
- * {@link java.util.concurrent.ConcurrentSkipListMap},
- * {@link java.util.concurrent.ConcurrentSkipListSet},
- * {@link java.util.concurrent.CopyOnWriteArrayList}, and
- * {@link java.util.concurrent.CopyOnWriteArraySet}.
- * When many threads are expected to access a given collection, a
- * {@code ConcurrentHashMap} is normally preferable to a synchronized
- * {@code HashMap}, and a {@code ConcurrentSkipListMap} is normally
- * preferable to a synchronized {@code TreeMap}.
- * A {@code CopyOnWriteArrayList} is preferable to a synchronized
- * {@code ArrayList} when the expected number of reads and traversals
- * greatly outnumber the number of updates to a list.
-
- * <p>The "Concurrent" prefix used with some classes in this package
- * is a shorthand indicating several differences from similar
- * "synchronized" classes.  For example {@code java.util.Hashtable} and
- * {@code Collections.synchronizedMap(new HashMap())} are
- * synchronized.  But {@link
- * java.util.concurrent.ConcurrentHashMap} is "concurrent".  A
- * concurrent collection is thread-safe, but not governed by a
- * single exclusion lock.  In the particular case of
- * ConcurrentHashMap, it safely permits any number of
- * concurrent reads as well as a tunable number of concurrent
- * writes.  "Synchronized" classes can be useful when you need
- * to prevent all access to a collection via a single lock, at
- * the expense of poorer scalability.  In other cases in which
- * multiple threads are expected to access a common collection,
- * "concurrent" versions are normally preferable.  And
- * unsynchronized collections are preferable when either
- * collections are unshared, or are accessible only when
- * holding other locks.
- *
- * <p>Most concurrent Collection implementations (including most
- * Queues) also differ from the usual java.util conventions in that
- * their Iterators provide <em>weakly consistent</em> rather than
- * fast-fail traversal.  A weakly consistent iterator is thread-safe,
- * but does not necessarily freeze the collection while iterating, so
- * it may (or may not) reflect any updates since the iterator was
- * created.
- *
- * <h2><a name="MemoryVisibility">Memory Consistency Properties</a></h2>
- *
- * Chapter 17 of
- * <cite>The Java&trade; Language Specification</cite>
- * defines the
- * <i>happens-before</i> relation on memory operations such as reads and
- * writes of shared variables.  The results of a write by one thread are
- * guaranteed to be visible to a read by another thread only if the write
- * operation <i>happens-before</i> the read operation.  The
- * {@code synchronized} and {@code volatile} constructs, as well as the
- * {@code Thread.start()} and {@code Thread.join()} methods, can form
- * <i>happens-before</i> relationships.  In particular:
- *
- * <ul>
- *   <li>Each action in a thread <i>happens-before</i> every action in that
- *   thread that comes later in the program's order.
- *
- *   <li>An unlock ({@code synchronized} block or method exit) of a
- *   monitor <i>happens-before</i> every subsequent lock ({@code synchronized}
- *   block or method entry) of that same monitor.  And because
- *   the <i>happens-before</i> relation is transitive, all actions
- *   of a thread prior to unlocking <i>happen-before</i> all actions
- *   subsequent to any thread locking that monitor.
- *
- *   <li>A write to a {@code volatile} field <i>happens-before</i> every
- *   subsequent read of that same field.  Writes and reads of
- *   {@code volatile} fields have similar memory consistency effects
- *   as entering and exiting monitors, but do <em>not</em> entail
- *   mutual exclusion locking.
- *
- *   <li>A call to {@code start} on a thread <i>happens-before</i> any
- *   action in the started thread.
- *
- *   <li>All actions in a thread <i>happen-before</i> any other thread
- *   successfully returns from a {@code join} on that thread.
- *
- * </ul>
- *
- *
- * The methods of all classes in {@code java.util.concurrent} and its
- * subpackages extend these guarantees to higher-level
- * synchronization.  In particular:
- *
- * <ul>
- *
- *   <li>Actions in a thread prior to placing an object into any concurrent
- *   collection <i>happen-before</i> actions subsequent to the access or
- *   removal of that element from the collection in another thread.
- *
- *   <li>Actions in a thread prior to the submission of a {@code Runnable}
- *   to an {@code Executor} <i>happen-before</i> its execution begins.
- *   Similarly for {@code Callables} submitted to an {@code ExecutorService}.
- *
- *   <li>Actions taken by the asynchronous computation represented by a
- *   {@code Future} <i>happen-before</i> actions subsequent to the
- *   retrieval of the result via {@code Future.get()} in another thread.
- *
- *   <li>Actions prior to "releasing" synchronizer methods such as
- *   {@code Lock.unlock}, {@code Semaphore.release}, and
- *   {@code CountDownLatch.countDown} <i>happen-before</i> actions
- *   subsequent to a successful "acquiring" method such as
- *   {@code Lock.lock}, {@code Semaphore.acquire},
- *   {@code Condition.await}, and {@code CountDownLatch.await} on the
- *   same synchronizer object in another thread.
- *
- *   <li>For each pair of threads that successfully exchange objects via
- *   an {@code Exchanger}, actions prior to the {@code exchange()}
- *   in each thread <i>happen-before</i> those subsequent to the
- *   corresponding {@code exchange()} in another thread.
- *
- *   <li>Actions prior to calling {@code CyclicBarrier.await} and
- *   {@code Phaser.awaitAdvance} (as well as its variants)
- *   <i>happen-before</i> actions performed by the barrier action, and
- *   actions performed by the barrier action <i>happen-before</i> actions
- *   subsequent to a successful return from the corresponding {@code await}
- *   in other threads.
- *
- * </ul>
- *
- * @since 1.5
- */
-package java.util.concurrent;
diff --git a/ojluni/src/main/java/java/util/jar/JavaUtilJarAccessImpl.java b/ojluni/src/main/java/java/util/jar/JavaUtilJarAccessImpl.java
deleted file mode 100755
index c53ba0c..0000000
--- a/ojluni/src/main/java/java/util/jar/JavaUtilJarAccessImpl.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2002, 2011, 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.
- */
-
-package java.util.jar;
-
-import java.io.IOException;
-import java.net.URL;
-import java.security.CodeSource;
-import java.util.Enumeration;
-import java.util.List;
-import sun.misc.JavaUtilJarAccess;
-
-class JavaUtilJarAccessImpl implements JavaUtilJarAccess {
-    public boolean jarFileHasClassPathAttribute(JarFile jar) throws IOException {
-        return jar.hasClassPathAttribute();
-    }
-
-    public CodeSource[] getCodeSources(JarFile jar, URL url) {
-        return jar.getCodeSources(url);
-    }
-
-    public CodeSource getCodeSource(JarFile jar, URL url, String name) {
-        return jar.getCodeSource(url, name);
-    }
-
-    public Enumeration<String> entryNames(JarFile jar, CodeSource[] cs) {
-        return jar.entryNames(cs);
-    }
-
-    public Enumeration<JarEntry> entries2(JarFile jar) {
-        return jar.entries2();
-    }
-
-    public void setEagerValidation(JarFile jar, boolean eager) {
-        jar.setEagerValidation(eager);
-    }
-
-    public List getManifestDigests(JarFile jar) {
-        return jar.getManifestDigests();
-    }
-}
diff --git a/ojluni/src/main/java/java/util/regex/ASCII.java b/ojluni/src/main/java/java/util/regex/ASCII.java
deleted file mode 100755
index a50fa98..0000000
--- a/ojluni/src/main/java/java/util/regex/ASCII.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright (c) 1999, 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.
- */
-
-package java.util.regex;
-
-
-/**
- * Utility class that implements the standard C ctype functionality.
- *
- * @author Hong Zhang
- */
-
-final class ASCII {
-
-    static final int UPPER   = 0x00000100;
-
-    static final int LOWER   = 0x00000200;
-
-    static final int DIGIT   = 0x00000400;
-
-    static final int SPACE   = 0x00000800;
-
-    static final int PUNCT   = 0x00001000;
-
-    static final int CNTRL   = 0x00002000;
-
-    static final int BLANK   = 0x00004000;
-
-    static final int HEX     = 0x00008000;
-
-    static final int UNDER   = 0x00010000;
-
-    static final int ASCII   = 0x0000FF00;
-
-    static final int ALPHA   = (UPPER|LOWER);
-
-    static final int ALNUM   = (UPPER|LOWER|DIGIT);
-
-    static final int GRAPH   = (PUNCT|UPPER|LOWER|DIGIT);
-
-    static final int WORD    = (UPPER|LOWER|UNDER|DIGIT);
-
-    static final int XDIGIT  = (HEX);
-
-    private static final int[] ctype = new int[] {
-        CNTRL,                  /* 00 (NUL) */
-        CNTRL,                  /* 01 (SOH) */
-        CNTRL,                  /* 02 (STX) */
-        CNTRL,                  /* 03 (ETX) */
-        CNTRL,                  /* 04 (EOT) */
-        CNTRL,                  /* 05 (ENQ) */
-        CNTRL,                  /* 06 (ACK) */
-        CNTRL,                  /* 07 (BEL) */
-        CNTRL,                  /* 08 (BS)  */
-        SPACE+CNTRL+BLANK,      /* 09 (HT)  */
-        SPACE+CNTRL,            /* 0A (LF)  */
-        SPACE+CNTRL,            /* 0B (VT)  */
-        SPACE+CNTRL,            /* 0C (FF)  */
-        SPACE+CNTRL,            /* 0D (CR)  */
-        CNTRL,                  /* 0E (SI)  */
-        CNTRL,                  /* 0F (SO)  */
-        CNTRL,                  /* 10 (DLE) */
-        CNTRL,                  /* 11 (DC1) */
-        CNTRL,                  /* 12 (DC2) */
-        CNTRL,                  /* 13 (DC3) */
-        CNTRL,                  /* 14 (DC4) */
-        CNTRL,                  /* 15 (NAK) */
-        CNTRL,                  /* 16 (SYN) */
-        CNTRL,                  /* 17 (ETB) */
-        CNTRL,                  /* 18 (CAN) */
-        CNTRL,                  /* 19 (EM)  */
-        CNTRL,                  /* 1A (SUB) */
-        CNTRL,                  /* 1B (ESC) */
-        CNTRL,                  /* 1C (FS)  */
-        CNTRL,                  /* 1D (GS)  */
-        CNTRL,                  /* 1E (RS)  */
-        CNTRL,                  /* 1F (US)  */
-        SPACE+BLANK,            /* 20 SPACE */
-        PUNCT,                  /* 21 !     */
-        PUNCT,                  /* 22 "     */
-        PUNCT,                  /* 23 #     */
-        PUNCT,                  /* 24 $     */
-        PUNCT,                  /* 25 %     */
-        PUNCT,                  /* 26 &     */
-        PUNCT,                  /* 27 '     */
-        PUNCT,                  /* 28 (     */
-        PUNCT,                  /* 29 )     */
-        PUNCT,                  /* 2A *     */
-        PUNCT,                  /* 2B +     */
-        PUNCT,                  /* 2C ,     */
-        PUNCT,                  /* 2D -     */
-        PUNCT,                  /* 2E .     */
-        PUNCT,                  /* 2F /     */
-        DIGIT+HEX+0,            /* 30 0     */
-        DIGIT+HEX+1,            /* 31 1     */
-        DIGIT+HEX+2,            /* 32 2     */
-        DIGIT+HEX+3,            /* 33 3     */
-        DIGIT+HEX+4,            /* 34 4     */
-        DIGIT+HEX+5,            /* 35 5     */
-        DIGIT+HEX+6,            /* 36 6     */
-        DIGIT+HEX+7,            /* 37 7     */
-        DIGIT+HEX+8,            /* 38 8     */
-        DIGIT+HEX+9,            /* 39 9     */
-        PUNCT,                  /* 3A :     */
-        PUNCT,                  /* 3B ;     */
-        PUNCT,                  /* 3C <     */
-        PUNCT,                  /* 3D =     */
-        PUNCT,                  /* 3E >     */
-        PUNCT,                  /* 3F ?     */
-        PUNCT,                  /* 40 @     */
-        UPPER+HEX+10,           /* 41 A     */
-        UPPER+HEX+11,           /* 42 B     */
-        UPPER+HEX+12,           /* 43 C     */
-        UPPER+HEX+13,           /* 44 D     */
-        UPPER+HEX+14,           /* 45 E     */
-        UPPER+HEX+15,           /* 46 F     */
-        UPPER+16,               /* 47 G     */
-        UPPER+17,               /* 48 H     */
-        UPPER+18,               /* 49 I     */
-        UPPER+19,               /* 4A J     */
-        UPPER+20,               /* 4B K     */
-        UPPER+21,               /* 4C L     */
-        UPPER+22,               /* 4D M     */
-        UPPER+23,               /* 4E N     */
-        UPPER+24,               /* 4F O     */
-        UPPER+25,               /* 50 P     */
-        UPPER+26,               /* 51 Q     */
-        UPPER+27,               /* 52 R     */
-        UPPER+28,               /* 53 S     */
-        UPPER+29,               /* 54 T     */
-        UPPER+30,               /* 55 U     */
-        UPPER+31,               /* 56 V     */
-        UPPER+32,               /* 57 W     */
-        UPPER+33,               /* 58 X     */
-        UPPER+34,               /* 59 Y     */
-        UPPER+35,               /* 5A Z     */
-        PUNCT,                  /* 5B [     */
-        PUNCT,                  /* 5C \     */
-        PUNCT,                  /* 5D ]     */
-        PUNCT,                  /* 5E ^     */
-        PUNCT|UNDER,            /* 5F _     */
-        PUNCT,                  /* 60 `     */
-        LOWER+HEX+10,           /* 61 a     */
-        LOWER+HEX+11,           /* 62 b     */
-        LOWER+HEX+12,           /* 63 c     */
-        LOWER+HEX+13,           /* 64 d     */
-        LOWER+HEX+14,           /* 65 e     */
-        LOWER+HEX+15,           /* 66 f     */
-        LOWER+16,               /* 67 g     */
-        LOWER+17,               /* 68 h     */
-        LOWER+18,               /* 69 i     */
-        LOWER+19,               /* 6A j     */
-        LOWER+20,               /* 6B k     */
-        LOWER+21,               /* 6C l     */
-        LOWER+22,               /* 6D m     */
-        LOWER+23,               /* 6E n     */
-        LOWER+24,               /* 6F o     */
-        LOWER+25,               /* 70 p     */
-        LOWER+26,               /* 71 q     */
-        LOWER+27,               /* 72 r     */
-        LOWER+28,               /* 73 s     */
-        LOWER+29,               /* 74 t     */
-        LOWER+30,               /* 75 u     */
-        LOWER+31,               /* 76 v     */
-        LOWER+32,               /* 77 w     */
-        LOWER+33,               /* 78 x     */
-        LOWER+34,               /* 79 y     */
-        LOWER+35,               /* 7A z     */
-        PUNCT,                  /* 7B {     */
-        PUNCT,                  /* 7C |     */
-        PUNCT,                  /* 7D }     */
-        PUNCT,                  /* 7E ~     */
-        CNTRL,                  /* 7F (DEL) */
-    };
-
-    static int getType(int ch) {
-        return ((ch & 0xFFFFFF80) == 0 ? ctype[ch] : 0);
-    }
-
-    static boolean isType(int ch, int type) {
-        return (getType(ch) & type) != 0;
-    }
-
-    static boolean isAscii(int ch) {
-        return ((ch & 0xFFFFFF80) == 0);
-    }
-
-    static boolean isAlpha(int ch) {
-        return isType(ch, ALPHA);
-    }
-
-    static boolean isDigit(int ch) {
-        return ((ch-'0')|('9'-ch)) >= 0;
-    }
-
-    static boolean isAlnum(int ch) {
-        return isType(ch, ALNUM);
-    }
-
-    static boolean isGraph(int ch) {
-        return isType(ch, GRAPH);
-    }
-
-    static boolean isPrint(int ch) {
-        return ((ch-0x20)|(0x7E-ch)) >= 0;
-    }
-
-    static boolean isPunct(int ch) {
-        return isType(ch, PUNCT);
-    }
-
-    static boolean isSpace(int ch) {
-        return isType(ch, SPACE);
-    }
-
-    static boolean isHexDigit(int ch) {
-        return isType(ch, HEX);
-    }
-
-    static boolean isOctDigit(int ch) {
-        return ((ch-'0')|('7'-ch)) >= 0;
-    }
-
-    static boolean isCntrl(int ch) {
-        return isType(ch, CNTRL);
-    }
-
-    static boolean isLower(int ch) {
-        return ((ch-'a')|('z'-ch)) >= 0;
-    }
-
-    static boolean isUpper(int ch) {
-        return ((ch-'A')|('Z'-ch)) >= 0;
-    }
-
-    static boolean isWord(int ch) {
-        return isType(ch, WORD);
-    }
-
-    static int toDigit(int ch) {
-        return (ctype[ch & 0x7F] & 0x3F);
-    }
-
-    static int toLower(int ch) {
-        return isUpper(ch) ? (ch + 0x20) : ch;
-    }
-
-    static int toUpper(int ch) {
-        return isLower(ch) ? (ch - 0x20) : ch;
-    }
-
-}
diff --git a/ojluni/src/main/java/java/util/regex/UnicodeProp.java b/ojluni/src/main/java/java/util/regex/UnicodeProp.java
deleted file mode 100755
index d1a68c0..0000000
--- a/ojluni/src/main/java/java/util/regex/UnicodeProp.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Copyright (c) 2011, 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.
- */
-
-package java.util.regex;
-
-import java.util.HashMap;
-import java.util.Locale;
-
-enum UnicodeProp {
-
-    ALPHABETIC {
-        public boolean is(int ch) {
-            return Character.isAlphabetic(ch);
-        }
-    },
-
-    LETTER {
-        public boolean is(int ch) {
-            return Character.isLetter(ch);
-        }
-    },
-
-    IDEOGRAPHIC {
-        public boolean is(int ch) {
-            return Character.isIdeographic(ch);
-        }
-    },
-
-    LOWERCASE {
-        public boolean is(int ch) {
-            return Character.isLowerCase(ch);
-        }
-    },
-
-    UPPERCASE {
-        public boolean is(int ch) {
-            return Character.isUpperCase(ch);
-        }
-    },
-
-    TITLECASE {
-        public boolean is(int ch) {
-            return Character.isTitleCase(ch);
-        }
-    },
-
-    WHITE_SPACE {
-        // \p{Whitespace}
-        public boolean is(int ch) {
-            return ((((1 << Character.SPACE_SEPARATOR) |
-                      (1 << Character.LINE_SEPARATOR) |
-                      (1 << Character.PARAGRAPH_SEPARATOR)) >> Character.getType(ch)) & 1)
-                   != 0 || (ch >= 0x9 && ch <= 0xd) || (ch == 0x85);
-        }
-    },
-
-    CONTROL {
-        // \p{gc=Control}
-        public boolean is(int ch) {
-            return Character.getType(ch) == Character.CONTROL;
-        }
-    },
-
-    PUNCTUATION {
-        // \p{gc=Punctuation}
-        public boolean is(int ch) {
-            return ((((1 << Character.CONNECTOR_PUNCTUATION) |
-                      (1 << Character.DASH_PUNCTUATION) |
-                      (1 << Character.START_PUNCTUATION) |
-                      (1 << Character.END_PUNCTUATION) |
-                      (1 << Character.OTHER_PUNCTUATION) |
-                      (1 << Character.INITIAL_QUOTE_PUNCTUATION) |
-                      (1 << Character.FINAL_QUOTE_PUNCTUATION)) >> Character.getType(ch)) & 1)
-                   != 0;
-        }
-    },
-
-    HEX_DIGIT {
-        // \p{gc=Decimal_Number}
-        // \p{Hex_Digit}    -> PropList.txt: Hex_Digit
-        public boolean is(int ch) {
-            return DIGIT.is(ch) ||
-                   (ch >= 0x0030 && ch <= 0x0039) ||
-                   (ch >= 0x0041 && ch <= 0x0046) ||
-                   (ch >= 0x0061 && ch <= 0x0066) ||
-                   (ch >= 0xFF10 && ch <= 0xFF19) ||
-                   (ch >= 0xFF21 && ch <= 0xFF26) ||
-                   (ch >= 0xFF41 && ch <= 0xFF46);
-        }
-    },
-
-    ASSIGNED {
-        public boolean is(int ch) {
-            return Character.getType(ch) != Character.UNASSIGNED;
-        }
-    },
-
-    NONCHARACTER_CODE_POINT {
-        // PropList.txt:Noncharacter_Code_Point
-        public boolean is(int ch) {
-            return (ch & 0xfffe) == 0xfffe || (ch >= 0xfdd0 && ch <= 0xfdef);
-        }
-    },
-
-    DIGIT {
-        // \p{gc=Decimal_Number}
-        public boolean is(int ch) {
-            return Character.isDigit(ch);
-        }
-    },
-
-    ALNUM {
-        // \p{alpha}
-        // \p{digit}
-        public boolean is(int ch) {
-            return ALPHABETIC.is(ch) || DIGIT.is(ch);
-        }
-    },
-
-    BLANK {
-        // \p{Whitespace} --
-        // [\N{LF} \N{VT} \N{FF} \N{CR} \N{NEL}  -> 0xa, 0xb, 0xc, 0xd, 0x85
-        //  \p{gc=Line_Separator}
-        //  \p{gc=Paragraph_Separator}]
-        public boolean is(int ch) {
-            return Character.getType(ch) == Character.SPACE_SEPARATOR ||
-                   ch == 0x9; // \N{HT}
-        }
-    },
-
-    GRAPH {
-        // [^
-        //  \p{space}
-        //  \p{gc=Control}
-        //  \p{gc=Surrogate}
-        //  \p{gc=Unassigned}]
-        public boolean is(int ch) {
-            return ((((1 << Character.SPACE_SEPARATOR) |
-                      (1 << Character.LINE_SEPARATOR) |
-                      (1 << Character.PARAGRAPH_SEPARATOR) |
-                      (1 << Character.CONTROL) |
-                      (1 << Character.SURROGATE) |
-                      (1 << Character.UNASSIGNED)) >> Character.getType(ch)) & 1)
-                   == 0;
-        }
-    },
-
-    PRINT {
-        // \p{graph}
-        // \p{blank}
-        // -- \p{cntrl}
-        public boolean is(int ch) {
-            return (GRAPH.is(ch) || BLANK.is(ch)) && !CONTROL.is(ch);
-        }
-    },
-
-    WORD {
-        //  \p{alpha}
-        //  \p{gc=Mark}
-        //  \p{digit}
-        //  \p{gc=Connector_Punctuation}
-
-        public boolean is(int ch) {
-            return ALPHABETIC.is(ch) ||
-                   ((((1 << Character.NON_SPACING_MARK) |
-                      (1 << Character.ENCLOSING_MARK) |
-                      (1 << Character.COMBINING_SPACING_MARK) |
-                      (1 << Character.DECIMAL_DIGIT_NUMBER) |
-                      (1 << Character.CONNECTOR_PUNCTUATION)) >> Character.getType(ch)) & 1)
-                   != 0;
-        }
-    };
-
-    private final static HashMap<String, String> posix = new HashMap<>();
-    private final static HashMap<String, String> aliases = new HashMap<>();
-    static {
-        posix.put("ALPHA", "ALPHABETIC");
-        posix.put("LOWER", "LOWERCASE");
-        posix.put("UPPER", "UPPERCASE");
-        posix.put("SPACE", "WHITE_SPACE");
-        posix.put("PUNCT", "PUNCTUATION");
-        posix.put("XDIGIT","HEX_DIGIT");
-        posix.put("ALNUM", "ALNUM");
-        posix.put("CNTRL", "CONTROL");
-        posix.put("DIGIT", "DIGIT");
-        posix.put("BLANK", "BLANK");
-        posix.put("GRAPH", "GRAPH");
-        posix.put("PRINT", "PRINT");
-
-        aliases.put("WHITESPACE", "WHITE_SPACE");
-        aliases.put("HEXDIGIT","HEX_DIGIT");
-        aliases.put("NONCHARACTERCODEPOINT", "NONCHARACTER_CODE_POINT");
-    }
-
-    public static UnicodeProp forName(String propName) {
-        propName = propName.toUpperCase(Locale.ENGLISH);
-        String alias = aliases.get(propName);
-        if (alias != null)
-            propName = alias;
-        try {
-            return valueOf (propName);
-        } catch (IllegalArgumentException x) {}
-        return null;
-    }
-
-    public static UnicodeProp forPOSIXName(String propName) {
-        propName = posix.get(propName.toUpperCase(Locale.ENGLISH));
-        if (propName == null)
-            return null;
-        return valueOf (propName);
-    }
-
-    public abstract boolean is(int ch);
-}
diff --git a/ojluni/src/main/java/javax/security/auth/RefreshFailedException.java b/ojluni/src/main/java/javax/security/auth/RefreshFailedException.java
deleted file mode 100755
index 3c51f1a..0000000
--- a/ojluni/src/main/java/javax/security/auth/RefreshFailedException.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1999, 2003, 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.
- */
-
-package javax.security.auth;
-
-/**
- * Signals that a <code>refresh</code> operation failed.
- *
- * <p> This exception is thrown by credentials implementing
- * the <code>Refreshable</code> interface when the <code>refresh</code>
- * method fails.
- *
- */
-public class RefreshFailedException extends Exception {
-
-    private static final long serialVersionUID = 5058444488565265840L;
-
-    /**
-     * Constructs a RefreshFailedException with no detail message. A detail
-     * message is a String that describes this particular exception.
-     */
-    public RefreshFailedException() {
-        super();
-    }
-
-    /**
-     * Constructs a RefreshFailedException with the specified detail
-     * message.  A detail message is a String that describes this particular
-     * exception.
-     *
-     * <p>
-     *
-     * @param msg the detail message.
-     */
-    public RefreshFailedException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/Refreshable.java b/ojluni/src/main/java/javax/security/auth/Refreshable.java
deleted file mode 100755
index 23ea81c..0000000
--- a/ojluni/src/main/java/javax/security/auth/Refreshable.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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.
- */
-
-package javax.security.auth;
-
-/**
- * Objects such as credentials may optionally implement this
- * interface to provide the capability to refresh itself.
- * For example, a credential with a particular time-restricted lifespan
- * may implement this interface to allow callers to refresh the time period
- * for which it is valid.
- *
- * @see javax.security.auth.Subject
- */
-public interface Refreshable {
-
-    /**
-     * Determine if this <code>Object</code> is current.
-     *
-     * <p>
-     *
-     * @return true if this <code>Object</code> is currently current,
-     *          false otherwise.
-     */
-    boolean isCurrent();
-
-    /**
-     * Update or extend the validity period for this
-     * <code>Object</code>.
-     *
-     * <p>
-     *
-     * @exception SecurityException if the caller does not have permission
-     *          to update or extend the validity period for this
-     *          <code>Object</code>. <p>
-     *
-     * @exception RefreshFailedException if the refresh attempt failed.
-     */
-    void refresh() throws RefreshFailedException;
-}
diff --git a/ojluni/src/main/java/javax/security/auth/callback/ChoiceCallback.java b/ojluni/src/main/java/javax/security/auth/callback/ChoiceCallback.java
deleted file mode 100755
index 422e50c..0000000
--- a/ojluni/src/main/java/javax/security/auth/callback/ChoiceCallback.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (c) 1999, 2003, 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.
- */
-
-package javax.security.auth.callback;
-
-/**
- * <p> Underlying security services instantiate and pass a
- * <code>ChoiceCallback</code> to the <code>handle</code>
- * method of a <code>CallbackHandler</code> to display a list of choices
- * and to retrieve the selected choice(s).
- *
- * @see javax.security.auth.callback.CallbackHandler
- */
-public class ChoiceCallback implements Callback, java.io.Serializable {
-
-    private static final long serialVersionUID = -3975664071579892167L;
-
-    /**
-     * @serial
-     * @since 1.4
-     */
-    private String prompt;
-    /**
-     * @serial the list of choices
-     * @since 1.4
-     */
-    private String[] choices;
-    /**
-     * @serial the choice to be used as the default choice
-     * @since 1.4
-     */
-    private int defaultChoice;
-    /**
-     * @serial whether multiple selections are allowed from the list of
-     * choices
-     * @since 1.4
-     */
-    private boolean multipleSelectionsAllowed;
-    /**
-     * @serial the selected choices, represented as indexes into the
-     *          <code>choices</code> list.
-     * @since 1.4
-     */
-    private int[] selections;
-
-    /**
-     * Construct a <code>ChoiceCallback</code> with a prompt,
-     * a list of choices, a default choice, and a boolean specifying
-     * whether or not multiple selections from the list of choices are allowed.
-     *
-     * <p>
-     *
-     * @param prompt the prompt used to describe the list of choices. <p>
-     *
-     * @param choices the list of choices. <p>
-     *
-     * @param defaultChoice the choice to be used as the default choice
-     *                  when the list of choices are displayed.  This value
-     *                  is represented as an index into the
-     *                  <code>choices</code> array. <p>
-     *
-     * @param multipleSelectionsAllowed boolean specifying whether or
-     *                  not multiple selections can be made from the
-     *                  list of choices.
-     *
-     * @exception IllegalArgumentException if <code>prompt</code> is null,
-     *                  if <code>prompt</code> has a length of 0,
-     *                  if <code>choices</code> is null,
-     *                  if <code>choices</code> has a length of 0,
-     *                  if any element from <code>choices</code> is null,
-     *                  if any element from <code>choices</code>
-     *                  has a length of 0 or if <code>defaultChoice</code>
-     *                  does not fall within the array boundaries of
-     *                  <code>choices</code>.
-     */
-    public ChoiceCallback(String prompt, String[] choices,
-                int defaultChoice, boolean multipleSelectionsAllowed) {
-
-        if (prompt == null || prompt.length() == 0 ||
-            choices == null || choices.length == 0 ||
-            defaultChoice < 0 || defaultChoice >= choices.length)
-            throw new IllegalArgumentException();
-
-        for (int i = 0; i < choices.length; i++) {
-            if (choices[i] == null || choices[i].length() == 0)
-                throw new IllegalArgumentException();
-        }
-
-        this.prompt = prompt;
-        this.choices = choices;
-        this.defaultChoice = defaultChoice;
-        this.multipleSelectionsAllowed = multipleSelectionsAllowed;
-    }
-
-    /**
-     * Get the prompt.
-     *
-     * <p>
-     *
-     * @return the prompt.
-     */
-    public String getPrompt() {
-        return prompt;
-    }
-
-    /**
-     * Get the list of choices.
-     *
-     * <p>
-     *
-     * @return the list of choices.
-     */
-    public String[] getChoices() {
-        return choices;
-    }
-
-    /**
-     * Get the defaultChoice.
-     *
-     * <p>
-     *
-     * @return the defaultChoice, represented as an index into
-     *          the <code>choices</code> list.
-     */
-    public int getDefaultChoice() {
-        return defaultChoice;
-    }
-
-    /**
-     * Get the boolean determining whether multiple selections from
-     * the <code>choices</code> list are allowed.
-     *
-     * <p>
-     *
-     * @return whether multiple selections are allowed.
-     */
-    public boolean allowMultipleSelections() {
-        return multipleSelectionsAllowed;
-    }
-
-    /**
-     * Set the selected choice.
-     *
-     * <p>
-     *
-     * @param selection the selection represented as an index into the
-     *          <code>choices</code> list.
-     *
-     * @see #getSelectedIndexes
-     */
-    public void setSelectedIndex(int selection) {
-        this.selections = new int[1];
-        this.selections[0] = selection;
-    }
-
-    /**
-     * Set the selected choices.
-     *
-     * <p>
-     *
-     * @param selections the selections represented as indexes into the
-     *          <code>choices</code> list.
-     *
-     * @exception UnsupportedOperationException if multiple selections are
-     *          not allowed, as determined by
-     *          <code>allowMultipleSelections</code>.
-     *
-     * @see #getSelectedIndexes
-     */
-    public void setSelectedIndexes(int[] selections) {
-        if (!multipleSelectionsAllowed)
-            throw new UnsupportedOperationException();
-        this.selections = selections;
-    }
-
-    /**
-     * Get the selected choices.
-     *
-     * <p>
-     *
-     * @return the selected choices, represented as indexes into the
-     *          <code>choices</code> list.
-     *
-     * @see #setSelectedIndexes
-     */
-    public int[] getSelectedIndexes() {
-        return selections;
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/callback/ConfirmationCallback.java b/ojluni/src/main/java/javax/security/auth/callback/ConfirmationCallback.java
deleted file mode 100755
index a410c7b..0000000
--- a/ojluni/src/main/java/javax/security/auth/callback/ConfirmationCallback.java
+++ /dev/null
@@ -1,501 +0,0 @@
-/*
- * Copyright (c) 1999, 2003, 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.
- */
-
-package javax.security.auth.callback;
-
-/**
- * <p> Underlying security services instantiate and pass a
- * <code>ConfirmationCallback</code> to the <code>handle</code>
- * method of a <code>CallbackHandler</code> to ask for YES/NO,
- * OK/CANCEL, YES/NO/CANCEL or other similar confirmations.
- *
- * @see javax.security.auth.callback.CallbackHandler
- */
-public class ConfirmationCallback implements Callback, java.io.Serializable {
-
-    private static final long serialVersionUID = -9095656433782481624L;
-
-    /**
-     * Unspecified option type.
-     *
-     * <p> The <code>getOptionType</code> method returns this
-     * value if this <code>ConfirmationCallback</code> was instantiated
-     * with <code>options</code> instead of an <code>optionType</code>.
-     */
-    public static final int UNSPECIFIED_OPTION          = -1;
-
-    /**
-     * YES/NO confirmation option.
-     *
-     * <p> An underlying security service specifies this as the
-     * <code>optionType</code> to a <code>ConfirmationCallback</code>
-     * constructor if it requires a confirmation which can be answered
-     * with either <code>YES</code> or <code>NO</code>.
-     */
-    public static final int YES_NO_OPTION               = 0;
-
-    /**
-     * YES/NO/CANCEL confirmation confirmation option.
-     *
-     * <p> An underlying security service specifies this as the
-     * <code>optionType</code> to a <code>ConfirmationCallback</code>
-     * constructor if it requires a confirmation which can be answered
-     * with either <code>YES</code>, <code>NO</code> or <code>CANCEL</code>.
-     */
-    public static final int YES_NO_CANCEL_OPTION        = 1;
-
-    /**
-     * OK/CANCEL confirmation confirmation option.
-     *
-     * <p> An underlying security service specifies this as the
-     * <code>optionType</code> to a <code>ConfirmationCallback</code>
-     * constructor if it requires a confirmation which can be answered
-     * with either <code>OK</code> or <code>CANCEL</code>.
-     */
-    public static final int OK_CANCEL_OPTION            = 2;
-
-    /**
-     * YES option.
-     *
-     * <p> If an <code>optionType</code> was specified to this
-     * <code>ConfirmationCallback</code>, this option may be specified as a
-     * <code>defaultOption</code> or returned as the selected index.
-     */
-    public static final int YES                         = 0;
-
-    /**
-     * NO option.
-     *
-     * <p> If an <code>optionType</code> was specified to this
-     * <code>ConfirmationCallback</code>, this option may be specified as a
-     * <code>defaultOption</code> or returned as the selected index.
-     */
-    public static final int NO                          = 1;
-
-    /**
-     * CANCEL option.
-     *
-     * <p> If an <code>optionType</code> was specified to this
-     * <code>ConfirmationCallback</code>, this option may be specified as a
-     * <code>defaultOption</code> or returned as the selected index.
-     */
-    public static final int CANCEL                      = 2;
-
-    /**
-     * OK option.
-     *
-     * <p> If an <code>optionType</code> was specified to this
-     * <code>ConfirmationCallback</code>, this option may be specified as a
-     * <code>defaultOption</code> or returned as the selected index.
-     */
-    public static final int OK                          = 3;
-
-    /** INFORMATION message type.  */
-    public static final int INFORMATION                 = 0;
-
-    /** WARNING message type. */
-    public static final int WARNING                     = 1;
-
-    /** ERROR message type. */
-    public static final int ERROR                       = 2;
-    /**
-     * @serial
-     * @since 1.4
-     */
-    private String prompt;
-    /**
-     * @serial
-     * @since 1.4
-     */
-    private int messageType;
-    /**
-     * @serial
-     * @since 1.4
-     */
-    private int optionType = UNSPECIFIED_OPTION;
-    /**
-     * @serial
-     * @since 1.4
-     */
-    private int defaultOption;
-    /**
-     * @serial
-     * @since 1.4
-     */
-    private String[] options;
-    /**
-     * @serial
-     * @since 1.4
-     */
-    private int selection;
-
-    /**
-     * Construct a <code>ConfirmationCallback</code> with a
-     * message type, an option type and a default option.
-     *
-     * <p> Underlying security services use this constructor if
-     * they require either a YES/NO, YES/NO/CANCEL or OK/CANCEL
-     * confirmation.
-     *
-     * <p>
-     *
-     * @param messageType the message type (<code>INFORMATION</code>,
-     *                  <code>WARNING</code> or <code>ERROR</code>). <p>
-     *
-     * @param optionType the option type (<code>YES_NO_OPTION</code>,
-     *                  <code>YES_NO_CANCEL_OPTION</code> or
-     *                  <code>OK_CANCEL_OPTION</code>). <p>
-     *
-     * @param defaultOption the default option
-     *                  from the provided optionType (<code>YES</code>,
-     *                  <code>NO</code>, <code>CANCEL</code> or
-     *                  <code>OK</code>).
-     *
-     * @exception IllegalArgumentException if messageType is not either
-     *                  <code>INFORMATION</code>, <code>WARNING</code>,
-     *                  or <code>ERROR</code>, if optionType is not either
-     *                  <code>YES_NO_OPTION</code>,
-     *                  <code>YES_NO_CANCEL_OPTION</code>, or
-     *                  <code>OK_CANCEL_OPTION</code>,
-     *                  or if <code>defaultOption</code>
-     *                  does not correspond to one of the options in
-     *                  <code>optionType</code>.
-     */
-    public ConfirmationCallback(int messageType,
-                int optionType, int defaultOption) {
-
-        if (messageType < INFORMATION || messageType > ERROR ||
-            optionType < YES_NO_OPTION || optionType > OK_CANCEL_OPTION)
-            throw new IllegalArgumentException();
-
-        switch (optionType) {
-        case YES_NO_OPTION:
-            if (defaultOption != YES && defaultOption != NO)
-                throw new IllegalArgumentException();
-            break;
-        case YES_NO_CANCEL_OPTION:
-            if (defaultOption != YES && defaultOption != NO &&
-                defaultOption != CANCEL)
-                throw new IllegalArgumentException();
-            break;
-        case OK_CANCEL_OPTION:
-            if (defaultOption != OK && defaultOption != CANCEL)
-                throw new IllegalArgumentException();
-            break;
-        }
-
-        this.messageType = messageType;
-        this.optionType = optionType;
-        this.defaultOption = defaultOption;
-    }
-
-    /**
-     * Construct a <code>ConfirmationCallback</code> with a
-     * message type, a list of options and a default option.
-     *
-     * <p> Underlying security services use this constructor if
-     * they require a confirmation different from the available preset
-     * confirmations provided (for example, CONTINUE/ABORT or STOP/GO).
-     * The confirmation options are listed in the <code>options</code> array,
-     * and are displayed by the <code>CallbackHandler</code> implementation
-     * in a manner consistent with the way preset options are displayed.
-     *
-     * <p>
-     *
-     * @param messageType the message type (<code>INFORMATION</code>,
-     *                  <code>WARNING</code> or <code>ERROR</code>). <p>
-     *
-     * @param options the list of confirmation options. <p>
-     *
-     * @param defaultOption the default option, represented as an index
-     *                  into the <code>options</code> array.
-     *
-     * @exception IllegalArgumentException if messageType is not either
-     *                  <code>INFORMATION</code>, <code>WARNING</code>,
-     *                  or <code>ERROR</code>, if <code>options</code> is null,
-     *                  if <code>options</code> has a length of 0,
-     *                  if any element from <code>options</code> is null,
-     *                  if any element from <code>options</code>
-     *                  has a length of 0, or if <code>defaultOption</code>
-     *                  does not lie within the array boundaries of
-     *                  <code>options</code>.
-     */
-    public ConfirmationCallback(int messageType,
-                String[] options, int defaultOption) {
-
-        if (messageType < INFORMATION || messageType > ERROR ||
-            options == null || options.length == 0 ||
-            defaultOption < 0 || defaultOption >= options.length)
-            throw new IllegalArgumentException();
-
-        for (int i = 0; i < options.length; i++) {
-            if (options[i] == null || options[i].length() == 0)
-                throw new IllegalArgumentException();
-        }
-
-        this.messageType = messageType;
-        this.options = options;
-        this.defaultOption = defaultOption;
-    }
-
-    /**
-     * Construct a <code>ConfirmationCallback</code> with a prompt,
-     * message type, an option type and a default option.
-     *
-     * <p> Underlying security services use this constructor if
-     * they require either a YES/NO, YES/NO/CANCEL or OK/CANCEL
-     * confirmation.
-     *
-     * <p>
-     *
-     * @param prompt the prompt used to describe the list of options. <p>
-     *
-     * @param messageType the message type (<code>INFORMATION</code>,
-     *                  <code>WARNING</code> or <code>ERROR</code>). <p>
-     *
-     * @param optionType the option type (<code>YES_NO_OPTION</code>,
-     *                  <code>YES_NO_CANCEL_OPTION</code> or
-     *                  <code>OK_CANCEL_OPTION</code>). <p>
-     *
-     * @param defaultOption the default option
-     *                  from the provided optionType (<code>YES</code>,
-     *                  <code>NO</code>, <code>CANCEL</code> or
-     *                  <code>OK</code>).
-     *
-     * @exception IllegalArgumentException if <code>prompt</code> is null,
-     *                  if <code>prompt</code> has a length of 0,
-     *                  if messageType is not either
-     *                  <code>INFORMATION</code>, <code>WARNING</code>,
-     *                  or <code>ERROR</code>, if optionType is not either
-     *                  <code>YES_NO_OPTION</code>,
-     *                  <code>YES_NO_CANCEL_OPTION</code>, or
-     *                  <code>OK_CANCEL_OPTION</code>,
-     *                  or if <code>defaultOption</code>
-     *                  does not correspond to one of the options in
-     *                  <code>optionType</code>.
-     */
-    public ConfirmationCallback(String prompt, int messageType,
-                int optionType, int defaultOption) {
-
-        if (prompt == null || prompt.length() == 0 ||
-            messageType < INFORMATION || messageType > ERROR ||
-            optionType < YES_NO_OPTION || optionType > OK_CANCEL_OPTION)
-            throw new IllegalArgumentException();
-
-        switch (optionType) {
-        case YES_NO_OPTION:
-            if (defaultOption != YES && defaultOption != NO)
-                throw new IllegalArgumentException();
-            break;
-        case YES_NO_CANCEL_OPTION:
-            if (defaultOption != YES && defaultOption != NO &&
-                defaultOption != CANCEL)
-                throw new IllegalArgumentException();
-            break;
-        case OK_CANCEL_OPTION:
-            if (defaultOption != OK && defaultOption != CANCEL)
-                throw new IllegalArgumentException();
-            break;
-        }
-
-        this.prompt = prompt;
-        this.messageType = messageType;
-        this.optionType = optionType;
-        this.defaultOption = defaultOption;
-    }
-
-    /**
-     * Construct a <code>ConfirmationCallback</code> with a prompt,
-     * message type, a list of options and a default option.
-     *
-     * <p> Underlying security services use this constructor if
-     * they require a confirmation different from the available preset
-     * confirmations provided (for example, CONTINUE/ABORT or STOP/GO).
-     * The confirmation options are listed in the <code>options</code> array,
-     * and are displayed by the <code>CallbackHandler</code> implementation
-     * in a manner consistent with the way preset options are displayed.
-     *
-     * <p>
-     *
-     * @param prompt the prompt used to describe the list of options. <p>
-     *
-     * @param messageType the message type (<code>INFORMATION</code>,
-     *                  <code>WARNING</code> or <code>ERROR</code>). <p>
-     *
-     * @param options the list of confirmation options. <p>
-     *
-     * @param defaultOption the default option, represented as an index
-     *                  into the <code>options</code> array.
-     *
-     * @exception IllegalArgumentException if <code>prompt</code> is null,
-     *                  if <code>prompt</code> has a length of 0,
-     *                  if messageType is not either
-     *                  <code>INFORMATION</code>, <code>WARNING</code>,
-     *                  or <code>ERROR</code>, if <code>options</code> is null,
-     *                  if <code>options</code> has a length of 0,
-     *                  if any element from <code>options</code> is null,
-     *                  if any element from <code>options</code>
-     *                  has a length of 0, or if <code>defaultOption</code>
-     *                  does not lie within the array boundaries of
-     *                  <code>options</code>.
-     */
-    public ConfirmationCallback(String prompt, int messageType,
-                String[] options, int defaultOption) {
-
-        if (prompt == null || prompt.length() == 0 ||
-            messageType < INFORMATION || messageType > ERROR ||
-            options == null || options.length == 0 ||
-            defaultOption < 0 || defaultOption >= options.length)
-            throw new IllegalArgumentException();
-
-        for (int i = 0; i < options.length; i++) {
-            if (options[i] == null || options[i].length() == 0)
-                throw new IllegalArgumentException();
-        }
-
-        this.prompt = prompt;
-        this.messageType = messageType;
-        this.options = options;
-        this.defaultOption = defaultOption;
-    }
-
-    /**
-     * Get the prompt.
-     *
-     * <p>
-     *
-     * @return the prompt, or null if this <code>ConfirmationCallback</code>
-     *          was instantiated without a <code>prompt</code>.
-     */
-    public String getPrompt() {
-        return prompt;
-    }
-
-    /**
-     * Get the message type.
-     *
-     * <p>
-     *
-     * @return the message type (<code>INFORMATION</code>,
-     *          <code>WARNING</code> or <code>ERROR</code>).
-     */
-    public int getMessageType() {
-        return messageType;
-    }
-
-    /**
-     * Get the option type.
-     *
-     * <p> If this method returns <code>UNSPECIFIED_OPTION</code>, then this
-     * <code>ConfirmationCallback</code> was instantiated with
-     * <code>options</code> instead of an <code>optionType</code>.
-     * In this case, invoke the <code>getOptions</code> method
-     * to determine which confirmation options to display.
-     *
-     * <p>
-     *
-     * @return the option type (<code>YES_NO_OPTION</code>,
-     *          <code>YES_NO_CANCEL_OPTION</code> or
-     *          <code>OK_CANCEL_OPTION</code>), or
-     *          <code>UNSPECIFIED_OPTION</code> if this
-     *          <code>ConfirmationCallback</code> was instantiated with
-     *          <code>options</code> instead of an <code>optionType</code>.
-     */
-    public int getOptionType() {
-        return optionType;
-    }
-
-    /**
-     * Get the confirmation options.
-     *
-     * <p>
-     *
-     * @return the list of confirmation options, or null if this
-     *          <code>ConfirmationCallback</code> was instantiated with
-     *          an <code>optionType</code> instead of <code>options</code>.
-     */
-    public String[] getOptions() {
-        return options;
-    }
-
-    /**
-     * Get the default option.
-     *
-     * <p>
-     *
-     * @return the default option, represented as
-     *          <code>YES</code>, <code>NO</code>, <code>OK</code> or
-     *          <code>CANCEL</code> if an <code>optionType</code>
-     *          was specified to the constructor of this
-     *          <code>ConfirmationCallback</code>.
-     *          Otherwise, this method returns the default option as
-     *          an index into the
-     *          <code>options</code> array specified to the constructor
-     *          of this <code>ConfirmationCallback</code>.
-     */
-    public int getDefaultOption() {
-        return defaultOption;
-    }
-
-    /**
-     * Set the selected confirmation option.
-     *
-     * <p>
-     *
-     * @param selection the selection represented as <code>YES</code>,
-     *          <code>NO</code>, <code>OK</code> or <code>CANCEL</code>
-     *          if an <code>optionType</code> was specified to the constructor
-     *          of this <code>ConfirmationCallback</code>.
-     *          Otherwise, the selection represents the index into the
-     *          <code>options</code> array specified to the constructor
-     *          of this <code>ConfirmationCallback</code>.
-     *
-     * @see #getSelectedIndex
-     */
-    public void setSelectedIndex(int selection) {
-        this.selection = selection;
-    }
-
-    /**
-     * Get the selected confirmation option.
-     *
-     * <p>
-     *
-     * @return the selected confirmation option represented as
-     *          <code>YES</code>, <code>NO</code>, <code>OK</code> or
-     *          <code>CANCEL</code> if an <code>optionType</code>
-     *          was specified to the constructor of this
-     *          <code>ConfirmationCallback</code>.
-     *          Otherwise, this method returns the selected confirmation
-     *          option as an index into the
-     *          <code>options</code> array specified to the constructor
-     *          of this <code>ConfirmationCallback</code>.
-     *
-     * @see #setSelectedIndex
-     */
-    public int getSelectedIndex() {
-        return selection;
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/callback/LanguageCallback.java b/ojluni/src/main/java/javax/security/auth/callback/LanguageCallback.java
deleted file mode 100755
index 8bcdb09..0000000
--- a/ojluni/src/main/java/javax/security/auth/callback/LanguageCallback.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 1999, 2003, 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.
- */
-
-package javax.security.auth.callback;
-
-import java.util.Locale;
-
-/**
- * <p> Underlying security services instantiate and pass a
- * <code>LanguageCallback</code> to the <code>handle</code>
- * method of a <code>CallbackHandler</code> to retrieve the <code>Locale</code>
- * used for localizing text.
- *
- * @see javax.security.auth.callback.CallbackHandler
- */
-public class LanguageCallback implements Callback, java.io.Serializable {
-
-    private static final long serialVersionUID = 2019050433478903213L;
-
-    /**
-     * @serial
-     * @since 1.4
-     */
-    private Locale locale;
-
-    /**
-     * Construct a <code>LanguageCallback</code>.
-     */
-    public LanguageCallback() { }
-
-    /**
-     * Set the retrieved <code>Locale</code>.
-     *
-     * <p>
-     *
-     * @param locale the retrieved <code>Locale</code>.
-     *
-     * @see #getLocale
-     */
-    public void setLocale(Locale locale) {
-        this.locale = locale;
-    }
-
-    /**
-     * Get the retrieved <code>Locale</code>.
-     *
-     * <p>
-     *
-     * @return the retrieved <code>Locale</code>, or null
-     *          if no <code>Locale</code> could be retrieved.
-     *
-     * @see #setLocale
-     */
-    public Locale getLocale() {
-        return locale;
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/callback/NameCallback.java b/ojluni/src/main/java/javax/security/auth/callback/NameCallback.java
deleted file mode 100755
index b8e92c6..0000000
--- a/ojluni/src/main/java/javax/security/auth/callback/NameCallback.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 1999, 2003, 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.
- */
-
-package javax.security.auth.callback;
-
-/**
- * <p> Underlying security services instantiate and pass a
- * <code>NameCallback</code> to the <code>handle</code>
- * method of a <code>CallbackHandler</code> to retrieve name information.
- *
- * @see javax.security.auth.callback.CallbackHandler
- */
-public class NameCallback implements Callback, java.io.Serializable {
-
-    private static final long serialVersionUID = 3770938795909392253L;
-
-    /**
-     * @serial
-     * @since 1.4
-     */
-    private String prompt;
-    /**
-     * @serial
-     * @since 1.4
-     */
-    private String defaultName;
-    /**
-     * @serial
-     * @since 1.4
-     */
-    private String inputName;
-
-    /**
-     * Construct a <code>NameCallback</code> with a prompt.
-     *
-     * <p>
-     *
-     * @param prompt the prompt used to request the name.
-     *
-     * @exception IllegalArgumentException if <code>prompt</code> is null
-     *                  or if <code>prompt</code> has a length of 0.
-     */
-    public NameCallback(String prompt) {
-        if (prompt == null || prompt.length() == 0)
-            throw new IllegalArgumentException();
-        this.prompt = prompt;
-    }
-
-    /**
-     * Construct a <code>NameCallback</code> with a prompt
-     * and default name.
-     *
-     * <p>
-     *
-     * @param prompt the prompt used to request the information. <p>
-     *
-     * @param defaultName the name to be used as the default name displayed
-     *                  with the prompt.
-     *
-     * @exception IllegalArgumentException if <code>prompt</code> is null,
-     *                  if <code>prompt</code> has a length of 0,
-     *                  if <code>defaultName</code> is null,
-     *                  or if <code>defaultName</code> has a length of 0.
-     */
-    public NameCallback(String prompt, String defaultName) {
-        if (prompt == null || prompt.length() == 0 ||
-            defaultName == null || defaultName.length() == 0)
-            throw new IllegalArgumentException();
-
-        this.prompt = prompt;
-        this.defaultName = defaultName;
-    }
-
-    /**
-     * Get the prompt.
-     *
-     * <p>
-     *
-     * @return the prompt.
-     */
-    public String getPrompt() {
-        return prompt;
-    }
-
-    /**
-     * Get the default name.
-     *
-     * <p>
-     *
-     * @return the default name, or null if this <code>NameCallback</code>
-     *          was not instantiated with a <code>defaultName</code>.
-     */
-    public String getDefaultName() {
-        return defaultName;
-    }
-
-    /**
-     * Set the retrieved name.
-     *
-     * <p>
-     *
-     * @param name the retrieved name (which may be null).
-     *
-     * @see #getName
-     */
-    public void setName(String name) {
-        this.inputName = name;
-    }
-
-    /**
-     * Get the retrieved name.
-     *
-     * <p>
-     *
-     * @return the retrieved name (which may be null)
-     *
-     * @see #setName
-     */
-    public String getName() {
-        return inputName;
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/callback/TextInputCallback.java b/ojluni/src/main/java/javax/security/auth/callback/TextInputCallback.java
deleted file mode 100755
index a611bea..0000000
--- a/ojluni/src/main/java/javax/security/auth/callback/TextInputCallback.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 1999, 2003, 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.
- */
-
-package javax.security.auth.callback;
-
-/**
- * <p> Underlying security services instantiate and pass a
- * <code>TextInputCallback</code> to the <code>handle</code>
- * method of a <code>CallbackHandler</code> to retrieve generic text
- * information.
- *
- * @see javax.security.auth.callback.CallbackHandler
- */
-public class TextInputCallback implements Callback, java.io.Serializable {
-
-    private static final long serialVersionUID = -8064222478852811804L;
-
-    /**
-     * @serial
-     * @since 1.4
-     */
-    private String prompt;
-    /**
-     * @serial
-     * @since 1.4
-     */
-    private String defaultText;
-    /**
-     * @serial
-     * @since 1.4
-     */
-    private String inputText;
-
-    /**
-     * Construct a <code>TextInputCallback</code> with a prompt.
-     *
-     * <p>
-     *
-     * @param prompt the prompt used to request the information.
-     *
-     * @exception IllegalArgumentException if <code>prompt</code> is null
-     *                  or if <code>prompt</code> has a length of 0.
-     */
-    public TextInputCallback(String prompt) {
-        if (prompt == null || prompt.length() == 0)
-            throw new IllegalArgumentException();
-        this.prompt = prompt;
-    }
-
-    /**
-     * Construct a <code>TextInputCallback</code> with a prompt
-     * and default input value.
-     *
-     * <p>
-     *
-     * @param prompt the prompt used to request the information. <p>
-     *
-     * @param defaultText the text to be used as the default text displayed
-     *                  with the prompt.
-     *
-     * @exception IllegalArgumentException if <code>prompt</code> is null,
-     *                  if <code>prompt</code> has a length of 0,
-     *                  if <code>defaultText</code> is null
-     *                  or if <code>defaultText</code> has a length of 0.
-     */
-    public TextInputCallback(String prompt, String defaultText) {
-        if (prompt == null || prompt.length() == 0 ||
-            defaultText == null || defaultText.length() == 0)
-            throw new IllegalArgumentException();
-
-        this.prompt = prompt;
-        this.defaultText = defaultText;
-    }
-
-    /**
-     * Get the prompt.
-     *
-     * <p>
-     *
-     * @return the prompt.
-     */
-    public String getPrompt() {
-        return prompt;
-    }
-
-    /**
-     * Get the default text.
-     *
-     * <p>
-     *
-     * @return the default text, or null if this <code>TextInputCallback</code>
-     *          was not instantiated with <code>defaultText</code>.
-     */
-    public String getDefaultText() {
-        return defaultText;
-    }
-
-    /**
-     * Set the retrieved text.
-     *
-     * <p>
-     *
-     * @param text the retrieved text, which may be null.
-     *
-     * @see #getText
-     */
-    public void setText(String text) {
-        this.inputText = text;
-    }
-
-    /**
-     * Get the retrieved text.
-     *
-     * <p>
-     *
-     * @return the retrieved text, which may be null.
-     *
-     * @see #setText
-     */
-    public String getText() {
-        return inputText;
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/callback/TextOutputCallback.java b/ojluni/src/main/java/javax/security/auth/callback/TextOutputCallback.java
deleted file mode 100755
index f8bc460..0000000
--- a/ojluni/src/main/java/javax/security/auth/callback/TextOutputCallback.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 1999, 2003, 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.
- */
-
-package javax.security.auth.callback;
-
-/**
- * <p> Underlying security services instantiate and pass a
- * <code>TextOutputCallback</code> to the <code>handle</code>
- * method of a <code>CallbackHandler</code> to display information messages,
- * warning messages and error messages.
- *
- * @see javax.security.auth.callback.CallbackHandler
- */
-public class TextOutputCallback implements Callback, java.io.Serializable {
-
-    private static final long serialVersionUID = 1689502495511663102L;
-
-    /** Information message. */
-    public static final int INFORMATION         = 0;
-    /** Warning message. */
-    public static final int WARNING             = 1;
-    /** Error message. */
-    public static final int ERROR               = 2;
-
-    /**
-     * @serial
-     * @since 1.4
-     */
-    private int messageType;
-    /**
-     * @serial
-     * @since 1.4
-     */
-    private String message;
-
-    /**
-     * Construct a TextOutputCallback with a message type and message
-     * to be displayed.
-     *
-     * <p>
-     *
-     * @param messageType the message type (<code>INFORMATION</code>,
-     *                  <code>WARNING</code> or <code>ERROR</code>). <p>
-     *
-     * @param message the message to be displayed. <p>
-     *
-     * @exception IllegalArgumentException if <code>messageType</code>
-     *                  is not either <code>INFORMATION</code>,
-     *                  <code>WARNING</code> or <code>ERROR</code>,
-     *                  if <code>message</code> is null,
-     *                  or if <code>message</code> has a length of 0.
-     */
-    public TextOutputCallback(int messageType, String message) {
-        if ((messageType != INFORMATION &&
-                messageType != WARNING && messageType != ERROR) ||
-            message == null || message.length() == 0)
-            throw new IllegalArgumentException();
-
-        this.messageType = messageType;
-        this.message = message;
-    }
-
-    /**
-     * Get the message type.
-     *
-     * <p>
-     *
-     * @return the message type (<code>INFORMATION</code>,
-     *                  <code>WARNING</code> or <code>ERROR</code>).
-     */
-    public int getMessageType() {
-        return messageType;
-    }
-
-    /**
-     * Get the message to be displayed.
-     *
-     * <p>
-     *
-     * @return the message to be displayed.
-     */
-    public String getMessage() {
-        return message;
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/kerberos/DelegationPermission.java b/ojluni/src/main/java/javax/security/auth/kerberos/DelegationPermission.java
deleted file mode 100755
index 3ab9beb..0000000
--- a/ojluni/src/main/java/javax/security/auth/kerberos/DelegationPermission.java
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, 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.
- */
-
-package javax.security.auth.kerberos;
-
-import java.util.*;
-import java.security.Permission;
-import java.security.BasicPermission;
-import java.security.PermissionCollection;
-import java.io.ObjectStreamField;
-import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.IOException;
-
-/**
- * This class is used to restrict the usage of the Kerberos
- * delegation model, ie: forwardable and proxiable tickets.
- * <p>
- * The target name of this <code>Permission</code> specifies a pair of
- * kerberos service principals. The first is the subordinate service principal
- * being entrusted to use the TGT. The second service principal designates
- * the target service the subordinate service principal is to
- * interact with on behalf of the initiating KerberosPrincipal. This
- * latter service principal is specified to restrict the use of a
- * proxiable ticket.
- * <p>
- * For example, to specify the "host" service use of a forwardable TGT the
- * target permission is specified as follows:
- * <p>
- * <pre>
- *  DelegationPermission("\"host/foo.example.com@EXAMPLE.COM\" \"krbtgt/EXAMPLE.COM@EXAMPLE.COM\"");
- * </pre>
- * <p>
- * To give the "backup" service a proxiable nfs service ticket the target permission
- * might be specified:
- * <p>
- * <pre>
- *  DelegationPermission("\"backup/bar.example.com@EXAMPLE.COM\" \"nfs/home.EXAMPLE.COM@EXAMPLE.COM\"");
- * </pre>
- *
- * @since 1.4
- */
-
-public final class DelegationPermission extends BasicPermission
-    implements java.io.Serializable {
-
-    private static final long serialVersionUID = 883133252142523922L;
-
-    private transient String subordinate, service;
-
-    /**
-     * Create a new <code>DelegationPermission</code>
-     * with the specified subordinate and target principals.
-     *
-     * <p>
-     *
-     * @param principals the name of the subordinate and target principals
-     *
-     * @throws NullPointerException if <code>principals</code> is <code>null</code>.
-     * @throws IllegalArgumentException if <code>principals</code> is empty.
-     */
-    public DelegationPermission(String principals) {
-        super(principals);
-        init(principals);
-    }
-
-    /**
-     * Create a new <code>DelegationPermission</code>
-     * with the specified subordinate and target principals.
-     * <p>
-     *
-     * @param principals the name of the subordinate and target principals
-     * <p>
-     * @param actions should be null.
-     *
-     * @throws NullPointerException if <code>principals</code> is <code>null</code>.
-     * @throws IllegalArgumentException if <code>principals</code> is empty.
-     */
-    public DelegationPermission(String principals, String actions) {
-        super(principals, actions);
-        init(principals);
-    }
-
-
-    /**
-     * Initialize the DelegationPermission object.
-     */
-    private void init(String target) {
-
-        StringTokenizer t = null;
-        if (!target.startsWith("\"")) {
-            throw new IllegalArgumentException
-                ("service principal [" + target +
-                 "] syntax invalid: " +
-                 "improperly quoted");
-        } else {
-            t = new StringTokenizer(target, "\"", false);
-            subordinate = t.nextToken();
-            if (t.countTokens() == 2) {
-                t.nextToken();  // bypass whitespace
-                service = t.nextToken();
-            } else if (t.countTokens() > 0) {
-                throw new IllegalArgumentException
-                    ("service principal [" + t.nextToken() +
-                     "] syntax invalid: " +
-                     "improperly quoted");
-            }
-        }
-    }
-
-    /**
-     * Checks if this Kerberos delegation permission object "implies" the
-     * specified permission.
-     * <P>
-     * If none of the above are true, <code>implies</code> returns false.
-     * @param p the permission to check against.
-     *
-     * @return true if the specified permission is implied by this object,
-     * false if not.
-     */
-    public boolean implies(Permission p) {
-        if (!(p instanceof DelegationPermission))
-            return false;
-
-        DelegationPermission that = (DelegationPermission) p;
-        if (this.subordinate.equals(that.subordinate) &&
-            this.service.equals(that.service))
-            return true;
-
-        return false;
-    }
-
-
-    /**
-     * Checks two DelegationPermission objects for equality.
-     * <P>
-     * @param obj the object to test for equality with this object.
-     *
-     * @return true if <i>obj</i> is a DelegationPermission, and
-     *  has the same subordinate and service principal as this.
-     *  DelegationPermission object.
-     */
-    public boolean equals(Object obj) {
-        if (obj == this)
-            return true;
-
-        if (! (obj instanceof DelegationPermission))
-            return false;
-
-        DelegationPermission that = (DelegationPermission) obj;
-        return implies(that);
-    }
-
-    /**
-     * Returns the hash code value for this object.
-     *
-     * @return a hash code value for this object.
-     */
-
-    public int hashCode() {
-        return getName().hashCode();
-    }
-
-
-    /**
-     * Returns a PermissionCollection object for storing
-     * DelegationPermission objects.
-     * <br>
-     * DelegationPermission objects must be stored in a manner that
-     * allows them to be inserted into the collection in any order, but
-     * that also enables the PermissionCollection implies method to
-     * be implemented in an efficient (and consistent) manner.
-     *
-     * @return a new PermissionCollection object suitable for storing
-     * DelegationPermissions.
-     */
-
-    public PermissionCollection newPermissionCollection() {
-        return new KrbDelegationPermissionCollection();
-    }
-
-    /**
-     * WriteObject is called to save the state of the DelegationPermission
-     * to a stream. The actions are serialized, and the superclass
-     * takes care of the name.
-     */
-    private synchronized void writeObject(java.io.ObjectOutputStream s)
-        throws IOException
-    {
-        s.defaultWriteObject();
-    }
-
-    /**
-     * readObject is called to restore the state of the
-     * DelegationPermission from a stream.
-     */
-    private synchronized void readObject(java.io.ObjectInputStream s)
-         throws IOException, ClassNotFoundException
-    {
-        // Read in the action, then initialize the rest
-        s.defaultReadObject();
-        init(getName());
-    }
-
-    /*
-      public static void main(String args[]) throws Exception {
-      DelegationPermission this_ =
-      new DelegationPermission(args[0]);
-      DelegationPermission that_ =
-      new DelegationPermission(args[1]);
-      System.out.println("-----\n");
-      System.out.println("this.implies(that) = " + this_.implies(that_));
-      System.out.println("-----\n");
-      System.out.println("this = "+this_);
-      System.out.println("-----\n");
-      System.out.println("that = "+that_);
-      System.out.println("-----\n");
-
-      KrbDelegationPermissionCollection nps =
-      new KrbDelegationPermissionCollection();
-      nps.add(this_);
-      nps.add(new DelegationPermission("\"host/foo.example.com@EXAMPLE.COM\" \"CN=Gary Ellison/OU=JSN/O=SUNW/L=Palo Alto/ST=CA/C=US\""));
-      try {
-      nps.add(new DelegationPermission("host/foo.example.com@EXAMPLE.COM \"CN=Gary Ellison/OU=JSN/O=SUNW/L=Palo Alto/ST=CA/C=US\""));
-      } catch (Exception e) {
-      System.err.println(e);
-      }
-
-      System.out.println("nps.implies(that) = " + nps.implies(that_));
-      System.out.println("-----\n");
-
-      Enumeration e = nps.elements();
-
-      while (e.hasMoreElements()) {
-      DelegationPermission x =
-      (DelegationPermission) e.nextElement();
-      System.out.println("nps.e = " + x);
-      }
-      }
-    */
-}
-
-
-final class KrbDelegationPermissionCollection extends PermissionCollection
-    implements java.io.Serializable {
-
-    // Not serialized; see serialization section at end of class.
-    private transient List<Permission> perms;
-
-    public KrbDelegationPermissionCollection() {
-        perms = new ArrayList<Permission>();
-    }
-
-
-    /**
-     * Check and see if this collection of permissions implies the permissions
-     * expressed in "permission".
-     *
-     * @param p the Permission object to compare
-     *
-     * @return true if "permission" is a proper subset of a permission in
-     * the collection, false if not.
-     */
-
-    public boolean implies(Permission permission) {
-        if (! (permission instanceof DelegationPermission))
-                return false;
-
-        synchronized (this) {
-            for (Permission x : perms) {
-                if (x.implies(permission))
-                    return true;
-            }
-        }
-        return false;
-
-    }
-
-    /**
-     * Adds a permission to the DelegationPermissions. The key for
-     * the hash is the name.
-     *
-     * @param permission the Permission object to add.
-     *
-     * @exception IllegalArgumentException - if the permission is not a
-     *                                       DelegationPermission
-     *
-     * @exception SecurityException - if this PermissionCollection object
-     *                                has been marked readonly
-     */
-
-    public void add(Permission permission) {
-        if (! (permission instanceof DelegationPermission))
-            throw new IllegalArgumentException("invalid permission: "+
-                                               permission);
-        if (isReadOnly())
-            throw new SecurityException("attempt to add a Permission to a readonly PermissionCollection");
-
-        synchronized (this) {
-            perms.add(0, permission);
-        }
-    }
-
-    /**
-     * Returns an enumeration of all the DelegationPermission objects
-     * in the container.
-     *
-     * @return an enumeration of all the DelegationPermission objects.
-     */
-
-    public Enumeration<Permission> elements() {
-        // Convert Iterator into Enumeration
-        synchronized (this) {
-            return Collections.enumeration(perms);
-        }
-    }
-
-    private static final long serialVersionUID = -3383936936589966948L;
-
-    // Need to maintain serialization interoperability with earlier releases,
-    // which had the serializable field:
-    //    private Vector permissions;
-    /**
-     * @serialField permissions java.util.Vector
-     *     A list of DelegationPermission objects.
-     */
-    private static final ObjectStreamField[] serialPersistentFields = {
-        new ObjectStreamField("permissions", Vector.class),
-    };
-
-    /**
-     * @serialData "permissions" field (a Vector containing the DelegationPermissions).
-     */
-    /*
-     * Writes the contents of the perms field out as a Vector for
-     * serialization compatibility with earlier releases.
-     */
-    private void writeObject(ObjectOutputStream out) throws IOException {
-        // Don't call out.defaultWriteObject()
-
-        // Write out Vector
-        Vector<Permission> permissions = new Vector<>(perms.size());
-
-        synchronized (this) {
-            permissions.addAll(perms);
-        }
-
-        ObjectOutputStream.PutField pfields = out.putFields();
-        pfields.put("permissions", permissions);
-        out.writeFields();
-    }
-
-    /*
-     * Reads in a Vector of DelegationPermissions and saves them in the perms field.
-     */
-    private void readObject(ObjectInputStream in) throws IOException,
-    ClassNotFoundException {
-        // Don't call defaultReadObject()
-
-        // Read in serialized fields
-        ObjectInputStream.GetField gfields = in.readFields();
-
-        // Get the one we want
-        Vector<Permission> permissions =
-                (Vector<Permission>)gfields.get("permissions", null);
-        perms = new ArrayList<Permission>(permissions.size());
-        perms.addAll(permissions);
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/kerberos/JavaxSecurityAuthKerberosAccessImpl.java b/ojluni/src/main/java/javax/security/auth/kerberos/JavaxSecurityAuthKerberosAccessImpl.java
deleted file mode 100755
index 56ed40e..0000000
--- a/ojluni/src/main/java/javax/security/auth/kerberos/JavaxSecurityAuthKerberosAccessImpl.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2011, 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.
- */
-
-package javax.security.auth.kerberos;
-
-import sun.misc.JavaxSecurityAuthKerberosAccess;
-import sun.security.krb5.EncryptionKey;
-import sun.security.krb5.PrincipalName;
-
-class JavaxSecurityAuthKerberosAccessImpl
-        implements JavaxSecurityAuthKerberosAccess {
-    public EncryptionKey[] keyTabGetEncryptionKeys(
-            KeyTab ktab, PrincipalName principal) {
-        return ktab.getEncryptionKeys(principal);
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/kerberos/KerberosKey.java b/ojluni/src/main/java/javax/security/auth/kerberos/KerberosKey.java
deleted file mode 100755
index ba530f9..0000000
--- a/ojluni/src/main/java/javax/security/auth/kerberos/KerberosKey.java
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, 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.
- */
-
-package javax.security.auth.kerberos;
-
-import java.util.Arrays;
-import javax.crypto.SecretKey;
-import javax.security.auth.Destroyable;
-import javax.security.auth.DestroyFailedException;
-
-/**
- * This class encapsulates a long term secret key for a Kerberos
- * principal.<p>
- *
- * All Kerberos JAAS login modules that obtain a principal's password and
- * generate the secret key from it should use this class.
- * Sometimes, such as when authenticating a server in
- * the absence of user-to-user authentication, the login module will store
- * an instance of this class in the private credential set of a
- * {@link javax.security.auth.Subject Subject} during the commit phase of the
- * authentication process.<p>
- *
- * A Kerberos service using a keytab to read secret keys should use
- * the {@link KeyTab} class, where latest keys can be read when needed.<p>
- *
- * It might be necessary for the application to be granted a
- * {@link javax.security.auth.PrivateCredentialPermission
- * PrivateCredentialPermission} if it needs to access the KerberosKey
- * instance from a Subject. This permission is not needed when the
- * application depends on the default JGSS Kerberos mechanism to access the
- * KerberosKey. In that case, however, the application will need an
- * appropriate
- * {@link javax.security.auth.kerberos.ServicePermission ServicePermission}.
- *
- * @author Mayank Upadhyay
- * @since 1.4
- */
-public class KerberosKey implements SecretKey, Destroyable {
-
-    private static final long serialVersionUID = -4625402278148246993L;
-
-   /**
-     * The principal that this secret key belongs to.
-     *
-     * @serial
-     */
-    private KerberosPrincipal principal;
-
-   /**
-     * the version number of this secret key
-     *
-     * @serial
-     */
-    private int versionNum;
-
-   /**
-    * <code>KeyImpl</code> is serialized by writing out the ASN1 Encoded bytes
-    * of the encryption key.
-    * The ASN1 encoding is defined in RFC4120 and as  follows:
-    * <pre>
-    * EncryptionKey   ::= SEQUENCE {
-    *           keytype   [0] Int32 -- actually encryption type --,
-    *           keyvalue  [1] OCTET STRING
-    * }
-    * </pre>
-    *
-    * @serial
-    */
-
-    private KeyImpl key;
-    private transient boolean destroyed = false;
-
-    /**
-     * Constructs a KerberosKey from the given bytes when the key type and
-     * key version number are known. This can be used when reading the secret
-     * key information from a Kerberos "keytab".
-     *
-     * @param principal the principal that this secret key belongs to
-     * @param keyBytes the raw bytes for the secret key
-     * @param keyType the key type for the secret key as defined by the
-     * Kerberos protocol specification.
-     * @param versionNum the version number of this secret key
-     */
-    public KerberosKey(KerberosPrincipal principal,
-                       byte[] keyBytes,
-                       int keyType,
-                       int versionNum) {
-        this.principal = principal;
-        this.versionNum = versionNum;
-        key = new KeyImpl(keyBytes, keyType);
-    }
-
-    /**
-     * Constructs a KerberosKey from a principal's password.
-     *
-     * @param principal the principal that this password belongs to
-     * @param password the password that should be used to compute the key
-     * @param algorithm the name for the algorithm that this key will be
-     * used for. This parameter may be null in which case the default
-     * algorithm "DES" will be assumed.
-     * @throws IllegalArgumentException if the name of the
-     * algorithm passed is unsupported.
-     */
-    public KerberosKey(KerberosPrincipal principal,
-                       char[] password,
-                       String algorithm) {
-
-        this.principal = principal;
-        // Pass principal in for salt
-        key = new KeyImpl(principal, password, algorithm);
-    }
-
-    /**
-     * Returns the principal that this key belongs to.
-     *
-     * @return the principal this key belongs to.
-     */
-    public final KerberosPrincipal getPrincipal() {
-        if (destroyed)
-            throw new IllegalStateException("This key is no longer valid");
-        return principal;
-    }
-
-    /**
-     * Returns the key version number.
-     *
-     * @return the key version number.
-     */
-    public final int getVersionNumber() {
-        if (destroyed)
-            throw new IllegalStateException("This key is no longer valid");
-        return versionNum;
-    }
-
-    /**
-     * Returns the key type for this long-term key.
-     *
-     * @return the key type.
-     */
-    public final int getKeyType() {
-        if (destroyed)
-            throw new IllegalStateException("This key is no longer valid");
-        return key.getKeyType();
-    }
-
-    /*
-     * Methods from java.security.Key
-     */
-
-    /**
-     * Returns the standard algorithm name for this key. For
-     * example, "DES" would indicate that this key is a DES key.
-     * See Appendix A in the <a href=
-     * "../../../../../technotes/guides/security/crypto/CryptoSpec.html#AppA">
-     * Java Cryptography Architecture API Specification &amp; Reference
-     * </a>
-     * for information about standard algorithm names.
-     *
-     * @return the name of the algorithm associated with this key.
-     */
-    public final String getAlgorithm() {
-        if (destroyed)
-            throw new IllegalStateException("This key is no longer valid");
-        return key.getAlgorithm();
-    }
-
-    /**
-     * Returns the name of the encoding format for this secret key.
-     *
-     * @return the String "RAW"
-     */
-    public final String getFormat() {
-        if (destroyed)
-            throw new IllegalStateException("This key is no longer valid");
-        return key.getFormat();
-    }
-
-    /**
-     * Returns the key material of this secret key.
-     *
-     * @return the key material
-     */
-    public final byte[] getEncoded() {
-        if (destroyed)
-            throw new IllegalStateException("This key is no longer valid");
-        return key.getEncoded();
-    }
-
-    /**
-     * Destroys this key. A call to any of its other methods after this
-     * will cause an  IllegalStateException to be thrown.
-     *
-     * @throws DestroyFailedException if some error occurs while destorying
-     * this key.
-     */
-    public void destroy() throws DestroyFailedException {
-        if (!destroyed) {
-            key.destroy();
-            principal = null;
-            destroyed = true;
-        }
-    }
-
-
-    /** Determines if this key has been destroyed.*/
-    public boolean isDestroyed() {
-        return destroyed;
-    }
-
-    public String toString() {
-        if (destroyed) {
-            return "Destroyed Principal";
-        }
-        return "Kerberos Principal " + principal.toString() +
-                "Key Version " + versionNum +
-                "key "  + key.toString();
-    }
-
-    /**
-     * Returns a hashcode for this KerberosKey.
-     *
-     * @return a hashCode() for the <code>KerberosKey</code>
-     * @since 1.6
-     */
-    public int hashCode() {
-        int result = 17;
-        if (isDestroyed()) {
-            return result;
-        }
-        result = 37 * result + Arrays.hashCode(getEncoded());
-        result = 37 * result + getKeyType();
-        if (principal != null) {
-            result = 37 * result + principal.hashCode();
-        }
-        return result * 37 + versionNum;
-    }
-
-    /**
-     * Compares the specified Object with this KerberosKey for equality.
-     * Returns true if the given object is also a
-     * <code>KerberosKey</code> and the two
-     * <code>KerberosKey</code> instances are equivalent.
-     *
-     * @param other the Object to compare to
-     * @return true if the specified object is equal to this KerberosKey,
-     * false otherwise. NOTE: Returns false if either of the KerberosKey
-     * objects has been destroyed.
-     * @since 1.6
-     */
-    public boolean equals(Object other) {
-
-        if (other == this)
-            return true;
-
-        if (! (other instanceof KerberosKey)) {
-            return false;
-        }
-
-        KerberosKey otherKey = ((KerberosKey) other);
-        if (isDestroyed() || otherKey.isDestroyed()) {
-            return false;
-        }
-
-        if (versionNum != otherKey.getVersionNumber() ||
-                getKeyType() != otherKey.getKeyType() ||
-                !Arrays.equals(getEncoded(), otherKey.getEncoded())) {
-            return false;
-        }
-
-        if (principal == null) {
-            if (otherKey.getPrincipal() != null) {
-                return false;
-            }
-        } else {
-            if (!principal.equals(otherKey.getPrincipal())) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/kerberos/KerberosPrincipal.java b/ojluni/src/main/java/javax/security/auth/kerberos/KerberosPrincipal.java
deleted file mode 100755
index 99d6593..0000000
--- a/ojluni/src/main/java/javax/security/auth/kerberos/KerberosPrincipal.java
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.
- */
-
-package javax.security.auth.kerberos;
-
-import java.io.*;
-import sun.security.krb5.Asn1Exception;
-import sun.security.krb5.KrbException;
-import sun.security.krb5.PrincipalName;
-import sun.security.krb5.Realm;
-import sun.security.util.*;
-
-/**
- * This class encapsulates a Kerberos principal.
- *
- * @author Mayank Upadhyay
- * @since 1.4
- */
-
-public final class KerberosPrincipal
-    implements java.security.Principal, java.io.Serializable {
-
-    private static final long serialVersionUID = -7374788026156829911L;
-
-    //name types
-
-    /**
-     * unknown name type.
-     */
-
-    public static final int KRB_NT_UNKNOWN =   0;
-
-    /**
-     * user principal name type.
-     */
-
-    public static final int KRB_NT_PRINCIPAL = 1;
-
-    /**
-     * service and other unique instance (krbtgt) name type.
-     */
-    public static final int KRB_NT_SRV_INST =  2;
-
-    /**
-     * service with host name as instance (telnet, rcommands) name type.
-     */
-
-    public static final int KRB_NT_SRV_HST =   3;
-
-    /**
-     * service with host as remaining components name type.
-     */
-
-    public static final int KRB_NT_SRV_XHST =  4;
-
-    /**
-     * unique ID name type.
-     */
-
-    public static final int KRB_NT_UID = 5;
-
-
-    private transient String fullName;
-
-    private transient String realm;
-
-    private transient int nameType;
-
-    private static final char NAME_REALM_SEPARATOR = '@';
-
-    /**
-     * Constructs a KerberosPrincipal from the provided string input. The
-     * name type for this  principal defaults to
-     * {@link #KRB_NT_PRINCIPAL KRB_NT_PRINCIPAL}
-     * This string is assumed to contain a name in the format
-     * that is specified in Section 2.1.1. (Kerberos Principal Name Form) of
-     * <a href=http://www.ietf.org/rfc/rfc1964.txt> RFC 1964 </a>
-     * (for example, <i>duke@FOO.COM</i>, where <i>duke</i>
-     * represents a principal, and <i>FOO.COM</i> represents a realm).
-     *
-     * <p>If the input name does not contain a realm, the default realm
-     * is used. The default realm can be specified either in a Kerberos
-     * configuration file or via the java.security.krb5.realm
-     * system property. For more information,
-     * <a href="../../../../../technotes/guides/security/jgss/tutorials/index.html">
-     * Kerberos Requirements </a>
-     *
-     * @param name the principal name
-     * @throws IllegalArgumentException if name is improperly
-     * formatted, if name is null, or if name does not contain
-     * the realm to use and the default realm is not specified
-     * in either a Kerberos configuration file or via the
-     * java.security.krb5.realm system property.
-     */
-    public KerberosPrincipal(String name) {
-
-        PrincipalName krb5Principal = null;
-
-        try {
-            // Appends the default realm if it is missing
-            krb5Principal = new PrincipalName(name, KRB_NT_PRINCIPAL);
-        } catch (KrbException e) {
-            throw new IllegalArgumentException(e.getMessage());
-        }
-        nameType = KRB_NT_PRINCIPAL;  // default name type
-        fullName = krb5Principal.toString();
-        realm = krb5Principal.getRealmString();
-    }
-
-    /**
-     * Constructs a KerberosPrincipal from the provided string and
-     * name type input.  The string is assumed to contain a name in the
-     * format that is specified in Section 2.1 (Mandatory Name Forms) of
-     * <a href=http://www.ietf.org/rfc/rfc1964.txt>RFC 1964</a>.
-     * Valid name types are specified in Section 6.2 (Principal Names) of
-     * <a href=http://www.ietf.org/rfc/rfc4120.txt>RFC 4120</a>.
-     * The input name must be consistent with the provided name type.
-     * (for example, <i>duke@FOO.COM</i>, is a valid input string for the
-     * name type, KRB_NT_PRINCIPAL where <i>duke</i>
-     * represents a principal, and <i>FOO.COM</i> represents a realm).
-
-     * <p> If the input name does not contain a realm, the default realm
-     * is used. The default realm can be specified either in a Kerberos
-     * configuration file or via the java.security.krb5.realm
-     * system property. For more information, see
-     * <a href="../../../../../technotes/guides/security/jgss/tutorials/index.html">
-     * Kerberos Requirements</a>.
-     *
-     * @param name the principal name
-     * @param nameType the name type of the principal
-     * @throws IllegalArgumentException if name is improperly
-     * formatted, if name is null, if the nameType is not supported,
-     * or if name does not contain the realm to use and the default
-     * realm is not specified in either a Kerberos configuration
-     * file or via the java.security.krb5.realm system property.
-     */
-
-    public KerberosPrincipal(String name, int nameType) {
-
-        PrincipalName krb5Principal = null;
-
-        try {
-            // Appends the default realm if it is missing
-            krb5Principal  = new PrincipalName(name,nameType);
-        } catch (KrbException e) {
-            throw new IllegalArgumentException(e.getMessage());
-        }
-
-        this.nameType = nameType;
-        fullName = krb5Principal.toString();
-        realm = krb5Principal.getRealmString();
-    }
-    /**
-     * Returns the realm component of this Kerberos principal.
-     *
-     * @return the realm component of this Kerberos principal.
-     */
-    public String getRealm() {
-        return realm;
-    }
-
-    /**
-     * Returns a hashcode for this principal. The hash code is defined to
-     * be the result of the following  calculation:
-     * <pre><code>
-     *  hashCode = getName().hashCode();
-     * </code></pre>
-     *
-     * @return a hashCode() for the <code>KerberosPrincipal</code>
-     */
-    public int hashCode() {
-        return getName().hashCode();
-    }
-
-    /**
-     * Compares the specified Object with this Principal for equality.
-     * Returns true if the given object is also a
-     * <code>KerberosPrincipal</code> and the two
-     * <code>KerberosPrincipal</code> instances are equivalent.
-     * More formally two <code>KerberosPrincipal</code> instances are equal
-     * if the values returned by <code>getName()</code> are equal and the
-     * values returned by <code>getNameType()</code> are equal.
-     *
-     * @param other the Object to compare to
-     * @return true if the Object passed in represents the same principal
-     * as this one, false otherwise.
-     */
-    public boolean equals(Object other) {
-
-        if (other == this)
-            return true;
-
-        if (! (other instanceof KerberosPrincipal)) {
-            return false;
-        } else {
-            String myFullName = getName();
-            String otherFullName = ((KerberosPrincipal) other).getName();
-            if (nameType == ((KerberosPrincipal)other).nameType &&
-                myFullName.equals(otherFullName)) {
-                 return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Save the KerberosPrincipal object to a stream
-     *
-     * @serialData this <code>KerberosPrincipal</code> is serialized
-     *          by writing out the PrincipalName and the
-     *          realm in their DER-encoded form as specified in Section 5.2.2 of
-     *          <a href=http://www.ietf.org/rfc/rfc4120.txt> RFC4120</a>.
-     */
-
-    private void writeObject(ObjectOutputStream oos)
-        throws IOException {
-
-        PrincipalName krb5Principal = null;
-        try {
-            krb5Principal  = new PrincipalName(fullName,nameType);
-            oos.writeObject(krb5Principal.asn1Encode());
-            oos.writeObject(krb5Principal.getRealm().asn1Encode());
-        } catch (Exception e) {
-            IOException ioe = new IOException(e.getMessage());
-            ioe.initCause(e);
-            throw ioe;
-        }
-    }
-
-    /**
-     * Reads this object from a stream (i.e., deserializes it)
-     */
-
-    private void readObject(ObjectInputStream ois)
-         throws IOException, ClassNotFoundException {
-        byte[] asn1EncPrincipal = (byte [])ois.readObject();
-        byte[] encRealm = (byte [])ois.readObject();
-        try {
-           PrincipalName krb5Principal = new PrincipalName(new
-                                                DerValue(asn1EncPrincipal));
-           realm = (new Realm(new DerValue(encRealm))).toString();
-           fullName = krb5Principal.toString() + NAME_REALM_SEPARATOR +
-                         realm.toString();
-           nameType = krb5Principal.getNameType();
-        } catch (Exception e) {
-            IOException ioe = new IOException(e.getMessage());
-            ioe.initCause(e);
-            throw ioe;
-        }
-    }
-
-    /**
-     * The returned string corresponds to the single-string
-     * representation of a Kerberos Principal name as specified in
-     * Section 2.1 of <a href=http://www.ietf.org/rfc/rfc1964.txt>RFC 1964</a>.
-     *
-     * @return the principal name.
-     */
-    public String getName() {
-        return fullName;
-    }
-
-    /**
-     * Returns the name type of the KerberosPrincipal. Valid name types
-     * are specified in Section 6.2 of
-     * <a href=http://www.ietf.org/rfc/rfc4120.txt> RFC4120</a>.
-     *
-     * @return the name type.
-     *
-     */
-
-    public int getNameType() {
-        return nameType;
-    }
-
-    // Inherits javadocs from Object
-    public String toString() {
-        return getName();
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/kerberos/KerberosTicket.java b/ojluni/src/main/java/javax/security/auth/kerberos/KerberosTicket.java
deleted file mode 100755
index e7e4821..0000000
--- a/ojluni/src/main/java/javax/security/auth/kerberos/KerberosTicket.java
+++ /dev/null
@@ -1,784 +0,0 @@
-/*
- * Copyright (c) 2000, 2008, 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.
- */
-
-package javax.security.auth.kerberos;
-
-import java.io.*;
-import java.util.Date;
-import java.util.Arrays;
-import java.net.InetAddress;
-import javax.crypto.SecretKey;
-import javax.security.auth.Refreshable;
-import javax.security.auth.Destroyable;
-import javax.security.auth.RefreshFailedException;
-import javax.security.auth.DestroyFailedException;
-import sun.misc.HexDumpEncoder;
-import sun.security.krb5.EncryptionKey;
-import sun.security.krb5.Asn1Exception;
-import sun.security.util.*;
-
-/**
- * This class encapsulates a Kerberos ticket and associated
- * information as viewed from the client's point of view. It captures all
- * information that the Key Distribution Center (KDC) sends to the client
- * in the reply message KDC-REP defined in the Kerberos Protocol
- * Specification (<a href=http://www.ietf.org/rfc/rfc4120.txt>RFC 4120</a>).
- * <p>
- * All Kerberos JAAS login modules that authenticate a user to a KDC should
- * use this class. Where available, the login module might even read this
- * information from a ticket cache in the operating system instead of
- * directly communicating with the KDC. During the commit phase of the JAAS
- * authentication process, the JAAS login module should instantiate this
- * class and store the instance in the private credential set of a
- * {@link javax.security.auth.Subject Subject}.<p>
- *
- * It might be necessary for the application to be granted a
- * {@link javax.security.auth.PrivateCredentialPermission
- * PrivateCredentialPermission} if it needs to access a KerberosTicket
- * instance from a Subject. This permission is not needed when the
- * application depends on the default JGSS Kerberos mechanism to access the
- * KerberosTicket. In that case, however, the application will need an
- * appropriate
- * {@link javax.security.auth.kerberos.ServicePermission ServicePermission}.
- * <p>
- * Note that this class is applicable to both ticket granting tickets and
- * other regular service tickets. A ticket granting ticket is just a
- * special case of a more generalized service ticket.
- *
- * @see javax.security.auth.Subject
- * @see javax.security.auth.PrivateCredentialPermission
- * @see javax.security.auth.login.LoginContext
- * @see org.ietf.jgss.GSSCredential
- * @see org.ietf.jgss.GSSManager
- *
- * @author Mayank Upadhyay
- * @since 1.4
- */
-public class KerberosTicket implements Destroyable, Refreshable,
-         java.io.Serializable {
-
-    private static final long serialVersionUID = 7395334370157380539L;
-
-    // XXX Make these flag indices public
-    private static final int FORWARDABLE_TICKET_FLAG = 1;
-    private static final int FORWARDED_TICKET_FLAG   = 2;
-    private static final int PROXIABLE_TICKET_FLAG   = 3;
-    private static final int PROXY_TICKET_FLAG       = 4;
-    private static final int POSTDATED_TICKET_FLAG   = 6;
-    private static final int RENEWABLE_TICKET_FLAG   = 8;
-    private static final int INITIAL_TICKET_FLAG     = 9;
-
-    private static final int NUM_FLAGS = 32;
-
-    /**
-     *
-     * ASN.1 DER Encoding of the Ticket as defined in the
-     * Kerberos Protocol Specification RFC4120.
-     *
-     * @serial
-     */
-
-    private byte[] asn1Encoding;
-
-    /**
-     *<code>KeyImpl</code> is serialized by writing out the ASN1 Encoded bytes
-     * of the encryption key. The ASN1 encoding is defined in RFC4120 and as
-     * follows:
-     * <pre>
-     * EncryptionKey   ::= SEQUENCE {
-     *          keytype    [0] Int32 -- actually encryption type --,
-     *          keyvalue   [1] OCTET STRING
-     * }
-     * </pre>
-     *
-     * @serial
-     */
-
-    private KeyImpl sessionKey;
-
-    /**
-     *
-     * Ticket Flags as defined in the Kerberos Protocol Specification RFC4120.
-     *
-     * @serial
-     */
-
-    private boolean[] flags;
-
-    /**
-     *
-     * Time of initial authentication
-     *
-     * @serial
-     */
-
-    private Date authTime;
-
-    /**
-     *
-     * Time after which the ticket is valid.
-     * @serial
-     */
-    private Date startTime;
-
-    /**
-     *
-     * Time after which the ticket will not be honored. (its expiration time).
-     *
-     * @serial
-     */
-
-    private Date endTime;
-
-    /**
-     *
-     * For renewable Tickets it indicates the maximum endtime that may be
-     * included in a renewal. It can be thought of as the absolute expiration
-     * time for the ticket, including all renewals. This field may be null
-     * for tickets that are not renewable.
-     *
-     * @serial
-     */
-
-    private Date renewTill;
-
-    /**
-     *
-     * Client that owns the service ticket
-     *
-     * @serial
-     */
-
-    private KerberosPrincipal client;
-
-    /**
-     *
-     * The service for which the ticket was issued.
-     *
-     * @serial
-     */
-
-    private KerberosPrincipal server;
-
-    /**
-     *
-     * The addresses from where the ticket may be used by the client.
-     * This field may be null when the ticket is usable from any address.
-     *
-     * @serial
-     */
-
-
-    private InetAddress[] clientAddresses;
-
-    private transient boolean destroyed = false;
-
-    /**
-     * Constructs a KerberosTicket using credentials information that a
-     * client either receives from a KDC or reads from a cache.
-     *
-     * @param asn1Encoding the ASN.1 encoding of the ticket as defined by
-     * the Kerberos protocol specification.
-     * @param client the client that owns this service
-     * ticket
-     * @param server the service that this ticket is for
-     * @param sessionKey the raw bytes for the session key that must be
-     * used to encrypt the authenticator that will be sent to the server
-     * @param keyType the key type for the session key as defined by the
-     * Kerberos protocol specification.
-     * @param flags the ticket flags. Each element in this array indicates
-     * the value for the corresponding bit in the ASN.1 BitString that
-     * represents the ticket flags. If the number of elements in this array
-     * is less than the number of flags used by the Kerberos protocol,
-     * then the missing flags will be filled in with false.
-     * @param authTime the time of initial authentication for the client
-     * @param startTime the time after which the ticket will be valid. This
-     * may be null in which case the value of authTime is treated as the
-     * startTime.
-     * @param endTime the time after which the ticket will no longer be
-     * valid
-     * @param renewTill an absolute expiration time for the ticket,
-     * including all renewal that might be possible. This field may be null
-     * for tickets that are not renewable.
-     * @param clientAddresses the addresses from where the ticket may be
-     * used by the client. This field may be null when the ticket is usable
-     * from any address.
-     */
-    public KerberosTicket(byte[] asn1Encoding,
-                         KerberosPrincipal client,
-                         KerberosPrincipal server,
-                         byte[] sessionKey,
-                         int keyType,
-                         boolean[] flags,
-                         Date authTime,
-                         Date startTime,
-                         Date endTime,
-                         Date renewTill,
-                         InetAddress[] clientAddresses) {
-
-        init(asn1Encoding, client, server, sessionKey, keyType, flags,
-            authTime, startTime, endTime, renewTill, clientAddresses);
-    }
-
-    private void init(byte[] asn1Encoding,
-                         KerberosPrincipal client,
-                         KerberosPrincipal server,
-                         byte[] sessionKey,
-                         int keyType,
-                         boolean[] flags,
-                         Date authTime,
-                         Date startTime,
-                         Date endTime,
-                         Date renewTill,
-                         InetAddress[] clientAddresses) {
-        if (sessionKey == null)
-           throw new IllegalArgumentException("Session key for ticket"
-                                              + " cannot be null");
-        init(asn1Encoding, client, server,
-             new KeyImpl(sessionKey, keyType), flags, authTime,
-             startTime, endTime, renewTill, clientAddresses);
-    }
-
-    private void init(byte[] asn1Encoding,
-                         KerberosPrincipal client,
-                         KerberosPrincipal server,
-                         KeyImpl sessionKey,
-                         boolean[] flags,
-                         Date authTime,
-                         Date startTime,
-                         Date endTime,
-                         Date renewTill,
-                         InetAddress[] clientAddresses) {
-        if (asn1Encoding == null)
-           throw new IllegalArgumentException("ASN.1 encoding of ticket"
-                                              + " cannot be null");
-        this.asn1Encoding = asn1Encoding.clone();
-
-        if (client == null)
-           throw new IllegalArgumentException("Client name in ticket"
-                                              + " cannot be null");
-        this.client = client;
-
-        if (server == null)
-           throw new IllegalArgumentException("Server name in ticket"
-                                              + " cannot be null");
-        this.server = server;
-
-        // Caller needs to make sure `sessionKey` will not be null
-        this.sessionKey = sessionKey;
-
-        if (flags != null) {
-           if (flags.length >= NUM_FLAGS)
-                this.flags = flags.clone();
-           else {
-                this.flags = new boolean[NUM_FLAGS];
-                // Fill in whatever we have
-                for (int i = 0; i < flags.length; i++)
-                    this.flags[i] = flags[i];
-           }
-        } else
-           this.flags = new boolean[NUM_FLAGS];
-
-        if (this.flags[RENEWABLE_TICKET_FLAG]) {
-           if (renewTill == null)
-                throw new IllegalArgumentException("The renewable period "
-                       + "end time cannot be null for renewable tickets.");
-
-           this.renewTill = new Date(renewTill.getTime());
-        }
-
-        if (authTime != null) {
-            this.authTime = new Date(authTime.getTime());
-        }
-        if (startTime != null) {
-            this.startTime = new Date(startTime.getTime());
-        } else {
-            this.startTime = this.authTime;
-        }
-
-        if (endTime == null)
-           throw new IllegalArgumentException("End time for ticket validity"
-                                              + " cannot be null");
-        this.endTime = new Date(endTime.getTime());
-
-        if (clientAddresses != null)
-           this.clientAddresses = clientAddresses.clone();
-    }
-
-    /**
-     * Returns the client principal associated with this ticket.
-     *
-     * @return the client principal.
-     */
-    public final KerberosPrincipal getClient() {
-        return client;
-    }
-
-    /**
-     * Returns the service principal associated with this ticket.
-     *
-     * @return the service principal.
-     */
-    public final KerberosPrincipal getServer() {
-        return server;
-    }
-
-    /**
-     * Returns the session key associated with this ticket.
-     *
-     * @return the session key.
-     */
-    public final SecretKey getSessionKey() {
-        if (destroyed)
-            throw new IllegalStateException("This ticket is no longer valid");
-        return sessionKey;
-    }
-
-    /**
-     * Returns the key type of the session key associated with this
-     * ticket as defined by the Kerberos Protocol Specification.
-     *
-     * @return the key type of the session key associated with this
-     * ticket.
-     *
-     * @see #getSessionKey()
-     */
-    public final int getSessionKeyType() {
-        if (destroyed)
-            throw new IllegalStateException("This ticket is no longer valid");
-        return sessionKey.getKeyType();
-    }
-
-    /**
-     * Determines if this ticket is forwardable.
-     *
-     * @return true if this ticket is forwardable, false if not.
-     */
-    public final boolean isForwardable() {
-        return flags[FORWARDABLE_TICKET_FLAG];
-    }
-
-    /**
-     * Determines if this ticket had been forwarded or was issued based on
-     * authentication involving a forwarded ticket-granting ticket.
-     *
-     * @return true if this ticket had been forwarded or was issued based on
-     * authentication involving a forwarded ticket-granting ticket,
-     * false otherwise.
-     */
-    public final boolean isForwarded() {
-        return flags[FORWARDED_TICKET_FLAG];
-    }
-
-    /**
-     * Determines if this ticket is proxiable.
-     *
-     * @return true if this ticket is proxiable, false if not.
-     */
-    public final boolean isProxiable() {
-        return flags[PROXIABLE_TICKET_FLAG];
-    }
-
-    /**
-     * Determines is this ticket is a proxy-ticket.
-     *
-     * @return true if this ticket is a proxy-ticket, false if not.
-     */
-    public final boolean isProxy() {
-        return flags[PROXY_TICKET_FLAG];
-    }
-
-
-    /**
-     * Determines is this ticket is post-dated.
-     *
-     * @return true if this ticket is post-dated, false if not.
-     */
-    public final boolean isPostdated() {
-        return flags[POSTDATED_TICKET_FLAG];
-    }
-
-    /**
-     * Determines is this ticket is renewable. If so, the {@link #refresh()
-     * refresh} method can be called, assuming the validity period for
-     * renewing is not already over.
-     *
-     * @return true if this ticket is renewable, false if not.
-     */
-    public final boolean isRenewable() {
-        return flags[RENEWABLE_TICKET_FLAG];
-    }
-
-    /**
-     * Determines if this ticket was issued using the Kerberos AS-Exchange
-     * protocol, and not issued based on some ticket-granting ticket.
-     *
-     * @return true if this ticket was issued using the Kerberos AS-Exchange
-     * protocol, false if not.
-     */
-    public final boolean isInitial() {
-        return flags[INITIAL_TICKET_FLAG];
-    }
-
-    /**
-     * Returns the flags associated with this ticket. Each element in the
-     * returned array indicates the value for the corresponding bit in the
-     * ASN.1 BitString that represents the ticket flags.
-     *
-     * @return the flags associated with this ticket.
-     */
-    public final boolean[]  getFlags() {
-        return (flags == null? null: flags.clone());
-    }
-
-    /**
-     * Returns the time that the client was authenticated.
-     *
-     * @return the time that the client was authenticated
-     *         or null if not set.
-     */
-    public final java.util.Date getAuthTime() {
-        return (authTime == null) ? null : (Date)authTime.clone();
-    }
-
-    /**
-     * Returns the start time for this ticket's validity period.
-     *
-     * @return the start time for this ticket's validity period
-     *         or null if not set.
-     */
-    public final java.util.Date getStartTime() {
-        return (startTime == null) ? null : (Date)startTime.clone();
-    }
-
-    /**
-     * Returns the expiration time for this ticket's validity period.
-     *
-     * @return the expiration time for this ticket's validity period.
-     */
-    public final java.util.Date getEndTime() {
-        return (Date) endTime.clone();
-    }
-
-    /**
-     * Returns the latest expiration time for this ticket, including all
-     * renewals. This will return a null value for non-renewable tickets.
-     *
-     * @return the latest expiration time for this ticket.
-     */
-    public final java.util.Date getRenewTill() {
-        return (renewTill == null) ? null: (Date)renewTill.clone();
-    }
-
-    /**
-     * Returns a list of addresses from where the ticket can be used.
-     *
-     * @return ths list of addresses or null, if the field was not
-     * provided.
-     */
-    public final java.net.InetAddress[] getClientAddresses() {
-        return (clientAddresses == null) ? null: clientAddresses.clone();
-    }
-
-    /**
-     * Returns an ASN.1 encoding of the entire ticket.
-     *
-     * @return an ASN.1 encoding of the entire ticket.
-     */
-    public final byte[] getEncoded() {
-        if (destroyed)
-            throw new IllegalStateException("This ticket is no longer valid");
-        return asn1Encoding.clone();
-    }
-
-    /** Determines if this ticket is still current.  */
-    public boolean isCurrent() {
-        return (System.currentTimeMillis() <= getEndTime().getTime());
-    }
-
-    /**
-     * Extends the validity period of this ticket. The ticket will contain
-     * a new session key if the refresh operation succeeds. The refresh
-     * operation will fail if the ticket is not renewable or the latest
-     * allowable renew time has passed. Any other error returned by the
-     * KDC will also cause this method to fail.
-     *
-     * Note: This method is not synchronized with the the accessor
-     * methods of this object. Hence callers need to be aware of multiple
-     * threads that might access this and try to renew it at the same
-     * time.
-     *
-     * @throws RefreshFailedException if the ticket is not renewable, or
-     * the latest allowable renew time has passed, or the KDC returns some
-     * error.
-     *
-     * @see #isRenewable()
-     * @see #getRenewTill()
-     */
-    public void refresh() throws RefreshFailedException {
-
-        if (destroyed)
-            throw new RefreshFailedException("A destroyed ticket "
-                                             + "cannot be renewd.");
-
-        if (!isRenewable())
-            throw new RefreshFailedException("This ticket is not renewable");
-
-        if (System.currentTimeMillis() > getRenewTill().getTime())
-            throw new RefreshFailedException("This ticket is past "
-                                             + "its last renewal time.");
-        Throwable e = null;
-        sun.security.krb5.Credentials krb5Creds = null;
-
-        try {
-            krb5Creds = new sun.security.krb5.Credentials(asn1Encoding,
-                                                    client.toString(),
-                                                    server.toString(),
-                                                    sessionKey.getEncoded(),
-                                                    sessionKey.getKeyType(),
-                                                    flags,
-                                                    authTime,
-                                                    startTime,
-                                                    endTime,
-                                                    renewTill,
-                                                    clientAddresses);
-            krb5Creds = krb5Creds.renew();
-        } catch (sun.security.krb5.KrbException krbException) {
-            e = krbException;
-        } catch (java.io.IOException ioException) {
-            e = ioException;
-        }
-
-        if (e != null) {
-            RefreshFailedException rfException
-                = new RefreshFailedException("Failed to renew Kerberos Ticket "
-                                             + "for client " + client
-                                             + " and server " + server
-                                             + " - " + e.getMessage());
-            rfException.initCause(e);
-            throw rfException;
-        }
-
-        /*
-         * In case multiple threads try to refresh it at the same time.
-         */
-        synchronized (this) {
-            try {
-                this.destroy();
-            } catch (DestroyFailedException dfException) {
-                // Squelch it since we don't care about the old ticket.
-            }
-            init(krb5Creds.getEncoded(),
-                 new KerberosPrincipal(krb5Creds.getClient().getName()),
-                 new KerberosPrincipal(krb5Creds.getServer().getName(),
-                                        KerberosPrincipal.KRB_NT_SRV_INST),
-                 krb5Creds.getSessionKey().getBytes(),
-                 krb5Creds.getSessionKey().getEType(),
-                 krb5Creds.getFlags(),
-                 krb5Creds.getAuthTime(),
-                 krb5Creds.getStartTime(),
-                 krb5Creds.getEndTime(),
-                 krb5Creds.getRenewTill(),
-                 krb5Creds.getClientAddresses());
-            destroyed = false;
-        }
-    }
-
-    /**
-     * Destroys the ticket and destroys any sensitive information stored in
-     * it.
-     */
-    public void destroy() throws DestroyFailedException {
-        if (!destroyed) {
-            Arrays.fill(asn1Encoding, (byte) 0);
-            client = null;
-            server = null;
-            sessionKey.destroy();
-            flags = null;
-            authTime = null;
-            startTime = null;
-            endTime = null;
-            renewTill = null;
-            clientAddresses = null;
-            destroyed = true;
-        }
-    }
-
-    /**
-     * Determines if this ticket has been destroyed.
-     */
-    public boolean isDestroyed() {
-        return destroyed;
-    }
-
-    public String toString() {
-        if (destroyed)
-            throw new IllegalStateException("This ticket is no longer valid");
-        StringBuffer caddrBuf = new StringBuffer();
-        if (clientAddresses != null) {
-            for (int i = 0; i < clientAddresses.length; i++) {
-                caddrBuf.append("clientAddresses[" + i + "] = " +
-                                 clientAddresses[i].toString());
-            }
-        }
-        return ("Ticket (hex) = " + "\n" +
-                 (new HexDumpEncoder()).encodeBuffer(asn1Encoding) + "\n" +
-                "Client Principal = " + client.toString() + "\n" +
-                "Server Principal = " + server.toString() + "\n" +
-                "Session Key = " + sessionKey.toString() + "\n" +
-                "Forwardable Ticket " + flags[FORWARDABLE_TICKET_FLAG] + "\n" +
-                "Forwarded Ticket " + flags[FORWARDED_TICKET_FLAG] + "\n" +
-                "Proxiable Ticket " + flags[PROXIABLE_TICKET_FLAG] + "\n" +
-                "Proxy Ticket " + flags[PROXY_TICKET_FLAG] + "\n" +
-                "Postdated Ticket " + flags[POSTDATED_TICKET_FLAG] + "\n" +
-                "Renewable Ticket " + flags[RENEWABLE_TICKET_FLAG] + "\n" +
-                "Initial Ticket " + flags[RENEWABLE_TICKET_FLAG] + "\n" +
-                "Auth Time = " + String.valueOf(authTime) + "\n" +
-                "Start Time = " + String.valueOf(startTime) + "\n" +
-                "End Time = " + endTime.toString() + "\n" +
-                "Renew Till = " + String.valueOf(renewTill) + "\n" +
-                "Client Addresses " +
-                (clientAddresses == null ? " Null " : caddrBuf.toString() +
-                "\n"));
-    }
-
-    /**
-     * Returns a hashcode for this KerberosTicket.
-     *
-     * @return a hashCode() for the <code>KerberosTicket</code>
-     * @since 1.6
-     */
-    public int hashCode() {
-        int result = 17;
-        if (isDestroyed()) {
-            return result;
-        }
-        result = result * 37 + Arrays.hashCode(getEncoded());
-        result = result * 37 + endTime.hashCode();
-        result = result * 37 + client.hashCode();
-        result = result * 37 + server.hashCode();
-        result = result * 37 + sessionKey.hashCode();
-
-        // authTime may be null
-        if (authTime != null) {
-            result = result * 37 + authTime.hashCode();
-        }
-
-        // startTime may be null
-        if (startTime != null) {
-            result = result * 37 + startTime.hashCode();
-        }
-
-        // renewTill may be null
-        if (renewTill != null) {
-            result = result * 37 + renewTill.hashCode();
-        }
-
-        // clientAddress may be null, the array's hashCode is 0
-        result = result * 37 + Arrays.hashCode(clientAddresses);
-        return result * 37 + Arrays.hashCode(flags);
-    }
-
-    /**
-     * Compares the specified Object with this KerberosTicket for equality.
-     * Returns true if the given object is also a
-     * <code>KerberosTicket</code> and the two
-     * <code>KerberosTicket</code> instances are equivalent.
-     *
-     * @param other the Object to compare to
-     * @return true if the specified object is equal to this KerberosTicket,
-     * false otherwise. NOTE: Returns false if either of the KerberosTicket
-     * objects has been destroyed.
-     * @since 1.6
-     */
-    public boolean equals(Object other) {
-
-        if (other == this)
-            return true;
-
-        if (! (other instanceof KerberosTicket)) {
-            return false;
-        }
-
-        KerberosTicket otherTicket = ((KerberosTicket) other);
-        if (isDestroyed() || otherTicket.isDestroyed()) {
-            return false;
-        }
-
-        if (!Arrays.equals(getEncoded(), otherTicket.getEncoded()) ||
-                !endTime.equals(otherTicket.getEndTime()) ||
-                !server.equals(otherTicket.getServer()) ||
-                !client.equals(otherTicket.getClient()) ||
-                !sessionKey.equals(otherTicket.getSessionKey()) ||
-                !Arrays.equals(clientAddresses, otherTicket.getClientAddresses()) ||
-                !Arrays.equals(flags, otherTicket.getFlags())) {
-            return false;
-        }
-
-        // authTime may be null
-        if (authTime == null) {
-            if (otherTicket.getAuthTime() != null)
-                return false;
-        } else {
-            if (!authTime.equals(otherTicket.getAuthTime()))
-                return false;
-        }
-
-        // startTime may be null
-        if (startTime == null) {
-            if (otherTicket.getStartTime() != null)
-                return false;
-        } else {
-            if (!startTime.equals(otherTicket.getStartTime()))
-                return false;
-        }
-
-        if (renewTill == null) {
-            if (otherTicket.getRenewTill() != null)
-                return false;
-        } else {
-            if (!renewTill.equals(otherTicket.getRenewTill()))
-                return false;
-        }
-
-        return true;
-    }
-
-    private void readObject(ObjectInputStream s)
-        throws IOException, ClassNotFoundException {
-        s.defaultReadObject();
-        if (sessionKey == null) {
-           throw new InvalidObjectException("Session key cannot be null");
-        }
-        try {
-            init(asn1Encoding, client, server, sessionKey,
-                 flags, authTime, startTime, endTime,
-                 renewTill, clientAddresses);
-        } catch (IllegalArgumentException iae) {
-            throw (InvalidObjectException)
-                new InvalidObjectException(iae.getMessage()).initCause(iae);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/kerberos/KeyImpl.java b/ojluni/src/main/java/javax/security/auth/kerberos/KeyImpl.java
deleted file mode 100755
index 9755cb0..0000000
--- a/ojluni/src/main/java/javax/security/auth/kerberos/KeyImpl.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright (c) 2000, 2010, 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.
- */
-
-package javax.security.auth.kerberos;
-
-import java.io.*;
-import java.util.Arrays;
-import javax.crypto.SecretKey;
-import javax.security.auth.Destroyable;
-import javax.security.auth.DestroyFailedException;
-import sun.misc.HexDumpEncoder;
-import sun.security.krb5.Asn1Exception;
-import sun.security.krb5.PrincipalName;
-import sun.security.krb5.EncryptionKey;
-import sun.security.krb5.EncryptedData;
-import sun.security.krb5.KrbException;
-import sun.security.krb5.KrbCryptoException;
-import sun.security.util.DerValue;
-
-/**
- * This class encapsulates a Kerberos encryption key. It is not associated
- * with a principal and may represent an ephemeral session key.
- *
- * @author Mayank Upadhyay
- * @since 1.4
- *
- * @serial include
- */
-class KeyImpl implements SecretKey, Destroyable, Serializable {
-
-    private static final long serialVersionUID = -7889313790214321193L;
-
-    private transient byte[] keyBytes;
-    private transient int keyType;
-    private transient volatile boolean destroyed = false;
-
-
-    /**
-     * Constructs a KeyImpl from the given bytes.
-     *
-     * @param keyBytes the raw bytes for the secret key
-     * @param keyType the key type for the secret key as defined by the
-     * Kerberos protocol specification.
-     */
-    public KeyImpl(byte[] keyBytes,
-                       int keyType) {
-        this.keyBytes = keyBytes.clone();
-        this.keyType = keyType;
-    }
-
-    /**
-     * Constructs a KeyImpl from a password.
-     *
-     * @param principal the principal from which to derive the salt
-     * @param password the password that should be used to compute the
-     * key.
-     * @param algorithm the name for the algorithm that this key wil be
-     * used for. This parameter may be null in which case "DES" will be
-     * assumed.
-     */
-    public KeyImpl(KerberosPrincipal principal,
-                   char[] password,
-                   String algorithm) {
-
-        try {
-            PrincipalName princ = new PrincipalName(principal.getName());
-            EncryptionKey key =
-                new EncryptionKey(password, princ.getSalt(), algorithm);
-            this.keyBytes = key.getBytes();
-            this.keyType = key.getEType();
-        } catch (KrbException e) {
-            throw new IllegalArgumentException(e.getMessage());
-        }
-    }
-
-    /**
-     * Returns the keyType for this key as defined in the Kerberos Spec.
-     */
-    public final int getKeyType() {
-        if (destroyed)
-            throw new IllegalStateException("This key is no longer valid");
-        return keyType;
-    }
-
-    /*
-     * Methods from java.security.Key
-     */
-
-    public final String getAlgorithm() {
-        return getAlgorithmName(keyType);
-    }
-
-    private String getAlgorithmName(int eType) {
-        if (destroyed)
-            throw new IllegalStateException("This key is no longer valid");
-
-        switch (eType) {
-        case EncryptedData.ETYPE_DES_CBC_CRC:
-        case EncryptedData.ETYPE_DES_CBC_MD5:
-            return "DES";
-
-        case EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD:
-            return "DESede";
-
-        case EncryptedData.ETYPE_ARCFOUR_HMAC:
-            return "ArcFourHmac";
-
-        case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96:
-            return "AES128";
-
-        case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96:
-            return "AES256";
-
-        case EncryptedData.ETYPE_NULL:
-            return "NULL";
-
-        default:
-            throw new IllegalArgumentException(
-                "Unsupported encryption type: " + eType);
-        }
-    }
-
-    public final String getFormat() {
-        if (destroyed)
-            throw new IllegalStateException("This key is no longer valid");
-        return "RAW";
-    }
-
-    public final byte[] getEncoded() {
-        if (destroyed)
-            throw new IllegalStateException("This key is no longer valid");
-        return keyBytes.clone();
-    }
-
-    public void destroy() throws DestroyFailedException {
-        if (!destroyed) {
-            destroyed = true;
-            Arrays.fill(keyBytes, (byte) 0);
-        }
-    }
-
-    public boolean isDestroyed() {
-        return destroyed;
-    }
-
-    /**
-     * @serialData this <code>KeyImpl</code> is serialized by
-     * writing out the ASN1 Encoded bytes of the encryption key.
-     * The ASN1 encoding is defined in RFC4120 and as  follows:
-     * EncryptionKey   ::= SEQUENCE {
-     *          keytype    [0] Int32 -- actually encryption type --,
-     *          keyvalue   [1] OCTET STRING
-     * }
-     */
-    private void writeObject(ObjectOutputStream ois)
-                throws IOException {
-        if (destroyed) {
-           throw new IOException("This key is no longer valid");
-        }
-
-        try {
-           ois.writeObject((new EncryptionKey(keyType, keyBytes)).asn1Encode());
-        } catch (Asn1Exception ae) {
-           throw new IOException(ae.getMessage());
-        }
-    }
-
-    private void readObject(ObjectInputStream ois)
-                throws IOException, ClassNotFoundException {
-        try {
-            EncryptionKey encKey = new EncryptionKey(new
-                                     DerValue((byte[])ois.readObject()));
-            keyType = encKey.getEType();
-            keyBytes = encKey.getBytes();
-        } catch (Asn1Exception ae) {
-            throw new IOException(ae.getMessage());
-        }
-    }
-
-    public String toString() {
-        HexDumpEncoder hd = new HexDumpEncoder();
-        return "EncryptionKey: keyType=" + keyType
-                          + " keyBytes (hex dump)="
-                          + (keyBytes == null || keyBytes.length == 0 ?
-                             " Empty Key" :
-                             '\n' + hd.encodeBuffer(keyBytes)
-                          + '\n');
-
-
-    }
-
-    public int hashCode() {
-        int result = 17;
-        if(isDestroyed()) {
-            return result;
-        }
-        result = 37 * result + Arrays.hashCode(keyBytes);
-        return 37 * result + keyType;
-    }
-
-    public boolean equals(Object other) {
-
-        if (other == this)
-            return true;
-
-        if (! (other instanceof KeyImpl)) {
-            return false;
-        }
-
-        KeyImpl otherKey = ((KeyImpl) other);
-        if (isDestroyed() || otherKey.isDestroyed()) {
-            return false;
-        }
-
-        if(keyType != otherKey.getKeyType() ||
-                !Arrays.equals(keyBytes, otherKey.getEncoded())) {
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/kerberos/KeyTab.java b/ojluni/src/main/java/javax/security/auth/kerberos/KeyTab.java
deleted file mode 100755
index c2f8dd7..0000000
--- a/ojluni/src/main/java/javax/security/auth/kerberos/KeyTab.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright (c) 2011, 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.
- */
-
-package javax.security.auth.kerberos;
-
-import java.io.File;
-import java.util.Objects;
-import sun.misc.SharedSecrets;
-import sun.security.krb5.EncryptionKey;
-import sun.security.krb5.PrincipalName;
-import sun.security.krb5.RealmException;
-
-/**
- * This class encapsulates a keytab file.
- * <p>
- * A Kerberos JAAS login module that obtains long term secret keys from a
- * keytab file should use this class. The login module will store
- * an instance of this class in the private credential set of a
- * {@link javax.security.auth.Subject Subject} during the commit phase of the
- * authentication process.
- * <p>
- * It might be necessary for the application to be granted a
- * {@link javax.security.auth.PrivateCredentialPermission
- * PrivateCredentialPermission} if it needs to access the KeyTab
- * instance from a Subject. This permission is not needed when the
- * application depends on the default JGSS Kerberos mechanism to access the
- * KeyTab. In that case, however, the application will need an appropriate
- * {@link javax.security.auth.kerberos.ServicePermission ServicePermission}.
- * <p>
- * The keytab file format is described at
- * <a href="http://www.ioplex.com/utilities/keytab.txt">
- * http://www.ioplex.com/utilities/keytab.txt</a>.
- *
- * @since 1.7
- */
-public final class KeyTab {
-
-    /*
-     * Impl notes:
-     *
-     * This class is only a name, a permanent link to the keytab source
-     * (can be missing). Itself has no content. In order to read content,
-     * take a snapshot and read from it.
-     *
-     * The snapshot is of type sun.security.krb5.internal.ktab.KeyTab, which
-     * contains the content of the keytab file when the snapshot is taken.
-     * Itself has no refresh function and mostly an immutable class (except
-     * for the create/add/save methods only used by the ktab command).
-     */
-
-    // Source, null if using the default one. Note that the default name
-    // is maintained in snapshot, this field is never "resolved".
-    private final File file;
-
-    // Set up JavaxSecurityAuthKerberosAccess in SharedSecrets
-    static {
-        SharedSecrets.setJavaxSecurityAuthKerberosAccess(
-                new JavaxSecurityAuthKerberosAccessImpl());
-    }
-
-    private KeyTab(File file) {
-        this.file = file;
-    }
-
-    /**
-     * Returns a {@code KeyTab} instance from a {@code File} object.
-     * <p>
-     * The result of this method is never null. This method only associates
-     * the returned {@code KeyTab} object with the file and does not read it.
-     * @param file the keytab {@code File} object, must not be null
-     * @return the keytab instance
-     * @throws NullPointerException if the {@code file} argument is null
-     */
-    public static KeyTab getInstance(File file) {
-        if (file == null) {
-            throw new NullPointerException("file must be non null");
-        }
-        return new KeyTab(file);
-    }
-
-    /**
-     * Returns the default {@code KeyTab} instance.
-     * <p>
-     * The result of this method is never null. This method only associates
-     * the returned {@code KeyTab} object with the default keytab file and
-     * does not read it.
-     * @return the default keytab instance.
-     */
-    public static KeyTab getInstance() {
-        return new KeyTab(null);
-    }
-
-    //Takes a snapshot of the keytab content
-    private sun.security.krb5.internal.ktab.KeyTab takeSnapshot() {
-        return sun.security.krb5.internal.ktab.KeyTab.getInstance(file);
-    }
-
-    /**
-     * Returns fresh keys for the given Kerberos principal.
-     * <p>
-     * Implementation of this method should make sure the returned keys match
-     * the latest content of the keytab file. The result is a newly created
-     * copy that can be modified by the caller without modifying the keytab
-     * object. The caller should {@link KerberosKey#destroy() destroy} the
-     * result keys after they are used.
-     * <p>
-     * Please note that the keytab file can be created after the
-     * {@code KeyTab} object is instantiated and its content may change over
-     * time. Therefore, an application should call this method only when it
-     * needs to use the keys. Any previous result from an earlier invocation
-     * could potentially be expired.
-     * <p>
-     * If there is any error (say, I/O error or format error)
-     * during the reading process of the KeyTab file, a saved result should be
-     * returned. If there is no saved result (say, this is the first time this
-     * method is called, or, all previous read attempts failed), an empty array
-     * should be returned. This can make sure the result is not drastically
-     * changed during the (probably slow) update of the keytab file.
-     * <p>
-     * Each time this method is called and the reading of the file succeeds
-     * with no exception (say, I/O error or file format error),
-     * the result should be saved for {@code principal}. The implementation can
-     * also save keys for other principals having keys in the same keytab object
-     * if convenient.
-     * <p>
-     * Any unsupported key read from the keytab is ignored and not included
-     * in the result.
-     *
-     * @param principal the Kerberos principal, must not be null.
-     * @return the keys (never null, may be empty)
-     * @throws NullPointerException if the {@code principal}
-     * argument is null
-     * @throws SecurityException if a security manager exists and the read
-     * access to the keytab file is not permitted
-     */
-    public KerberosKey[] getKeys(KerberosPrincipal principal) {
-        try {
-            EncryptionKey[] keys = takeSnapshot().readServiceKeys(
-                    new PrincipalName(principal.getName()));
-            KerberosKey[] kks = new KerberosKey[keys.length];
-            for (int i=0; i<kks.length; i++) {
-                Integer tmp = keys[i].getKeyVersionNumber();
-                kks[i] = new KerberosKey(
-                        principal,
-                        keys[i].getBytes(),
-                        keys[i].getEType(),
-                        tmp == null ? 0 : tmp.intValue());
-                keys[i].destroy();
-            }
-            return kks;
-        } catch (RealmException re) {
-            return new KerberosKey[0];
-        }
-    }
-
-    EncryptionKey[] getEncryptionKeys(PrincipalName principal) {
-        return takeSnapshot().readServiceKeys(principal);
-    }
-
-    /**
-     * Checks if the keytab file exists. Implementation of this method
-     * should make sure that the result matches the latest status of the
-     * keytab file.
-     * <p>
-     * The caller can use the result to determine if it should fallback to
-     * another mechanism to read the keys.
-     * @return true if the keytab file exists; false otherwise.
-     * @throws SecurityException if a security manager exists and the read
-     * access to the keytab file is not permitted
-     */
-    public boolean exists() {
-        return !takeSnapshot().isMissing();
-    }
-
-    public String toString() {
-        return file == null ? "Default keytab" : file.toString();
-    }
-
-    /**
-     * Returns a hashcode for this KeyTab.
-     *
-     * @return a hashCode() for the <code>KeyTab</code>
-     */
-    public int hashCode() {
-        return Objects.hash(file);
-    }
-
-    /**
-     * Compares the specified Object with this KeyTab for equality.
-     * Returns true if the given object is also a
-     * <code>KeyTab</code> and the two
-     * <code>KeyTab</code> instances are equivalent.
-     *
-     * @param other the Object to compare to
-     * @return true if the specified object is equal to this KeyTab
-     */
-    public boolean equals(Object other) {
-        if (other == this)
-            return true;
-
-        if (! (other instanceof KeyTab)) {
-            return false;
-        }
-
-        KeyTab otherKtab = (KeyTab) other;
-        return Objects.equals(otherKtab.file, file);
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/kerberos/ServicePermission.java b/ojluni/src/main/java/javax/security/auth/kerberos/ServicePermission.java
deleted file mode 100755
index 566c719..0000000
--- a/ojluni/src/main/java/javax/security/auth/kerberos/ServicePermission.java
+++ /dev/null
@@ -1,599 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, 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.
- */
-
-package javax.security.auth.kerberos;
-
-import java.util.*;
-import java.security.Permission;
-import java.security.PermissionCollection;
-import java.io.ObjectStreamField;
-import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.IOException;
-
-/**
- * This class is used to protect Kerberos services and the
- * credentials necessary to access those services. There is a one to
- * one mapping of a service principal and the credentials necessary
- * to access the service. Therefore granting access to a service
- * principal implicitly grants access to the credential necessary to
- * establish a security context with the service principal. This
- * applies regardless of whether the credentials are in a cache
- * or acquired via an exchange with the KDC. The credential can
- * be either a ticket granting ticket, a service ticket or a secret
- * key from a key table.
- * <p>
- * A ServicePermission contains a service principal name and
- * a list of actions which specify the context the credential can be
- * used within.
- * <p>
- * The service principal name is the canonical name of the
- * <code>KereberosPrincipal</code> supplying the service, that is
- * the KerberosPrincipal represents a Kerberos service
- * principal. This name is treated in a case sensitive manner.
- * An asterisk may appear by itself, to signify any service principal.
- * <p>
- * Granting this permission implies that the caller can use a cached
- * credential (TGT, service ticket or secret key) within the context
- * designated by the action. In the case of the TGT, granting this
- * permission also implies that the TGT can be obtained by an
- * Authentication Service exchange.
- * <p>
- * The possible actions are:
- * <p>
- * <pre>
- *    initiate -              allow the caller to use the credential to
- *                            initiate a security context with a service
- *                            principal.
- *
- *    accept -                allow the caller to use the credential to
- *                            accept security context as a particular
- *                            principal.
- * </pre>
- *
- * For example, to specify the permission to access to the TGT to
- * initiate a security context the permission is constructed as follows:
- * <p>
- * <pre>
- *     ServicePermission("krbtgt/EXAMPLE.COM@EXAMPLE.COM", "initiate");
- * </pre>
- * <p>
- * To obtain a service ticket to initiate a context with the "host"
- * service the permission is constructed as follows:
- * <pre>
- *     ServicePermission("host/foo.example.com@EXAMPLE.COM", "initiate");
- * </pre>
- * <p>
- * For a Kerberized server the action is "accept". For example, the permission
- * necessary to access and use the secret key of the  Kerberized "host"
- * service (telnet and the likes)  would be constructed as follows:
- * <p>
- * <pre>
- *     ServicePermission("host/foo.example.com@EXAMPLE.COM", "accept");
- * </pre>
- *
- * @since 1.4
- */
-
-public final class ServicePermission extends Permission
-    implements java.io.Serializable {
-
-    private static final long serialVersionUID = -1227585031618624935L;
-
-    /**
-     * Initiate a security context to the specified service
-     */
-    private final static int INITIATE   = 0x1;
-
-    /**
-     * Accept a security context
-     */
-    private final static int ACCEPT     = 0x2;
-
-    /**
-     * All actions
-     */
-    private final static int ALL        = INITIATE|ACCEPT;
-
-    /**
-     * No actions.
-     */
-    private final static int NONE    = 0x0;
-
-    // the actions mask
-    private transient int mask;
-
-    /**
-     * the actions string.
-     *
-     * @serial
-     */
-
-    private String actions; // Left null as long as possible, then
-                            // created and re-used in the getAction function.
-
-    /**
-     * Create a new <code>ServicePermission</code>
-     * with the specified <code>servicePrincipal</code>
-     * and <code>action</code>.
-     *
-     * @param servicePrincipal the name of the service principal.
-     * An asterisk may appear by itself, to signify any service principal.
-     * <p>
-     * @param action the action string
-     */
-    public ServicePermission(String servicePrincipal, String action) {
-        super(servicePrincipal);
-        init(servicePrincipal, getMask(action));
-    }
-
-
-    /**
-     * Initialize the ServicePermission object.
-     */
-    private void init(String servicePrincipal, int mask) {
-
-        if (servicePrincipal == null)
-                throw new NullPointerException("service principal can't be null");
-
-        if ((mask & ALL) != mask)
-            throw new IllegalArgumentException("invalid actions mask");
-
-        this.mask = mask;
-    }
-
-
-    /**
-     * Checks if this Kerberos service permission object "implies" the
-     * specified permission.
-     * <P>
-     * If none of the above are true, <code>implies</code> returns false.
-     * @param p the permission to check against.
-     *
-     * @return true if the specified permission is implied by this object,
-     * false if not.
-     */
-    public boolean implies(Permission p) {
-        if (!(p instanceof ServicePermission))
-            return false;
-
-        ServicePermission that = (ServicePermission) p;
-
-        return ((this.mask & that.mask) == that.mask) &&
-            impliesIgnoreMask(that);
-    }
-
-
-    boolean impliesIgnoreMask(ServicePermission p) {
-        return ((this.getName().equals("*")) ||
-                this.getName().equals(p.getName()));
-    }
-
-    /**
-     * Checks two ServicePermission objects for equality.
-     * <P>
-     * @param obj the object to test for equality with this object.
-     *
-     * @return true if <i>obj</i> is a ServicePermission, and has the
-     *  same service principal, and actions as this
-     * ServicePermission object.
-     */
-    public boolean equals(Object obj) {
-        if (obj == this)
-            return true;
-
-        if (! (obj instanceof ServicePermission))
-            return false;
-
-        ServicePermission that = (ServicePermission) obj;
-        return ((this.mask & that.mask) == that.mask) &&
-            this.getName().equals(that.getName());
-
-
-    }
-
-    /**
-     * Returns the hash code value for this object.
-     *
-     * @return a hash code value for this object.
-     */
-
-    public int hashCode() {
-        return (getName().hashCode() ^ mask);
-    }
-
-
-    /**
-     * Returns the "canonical string representation" of the actions in the
-     * specified mask.
-     * Always returns present actions in the following order:
-     * initiate, accept.
-     *
-     * @param mask a specific integer action mask to translate into a string
-     * @return the canonical string representation of the actions
-     */
-    private static String getActions(int mask)
-    {
-        StringBuilder sb = new StringBuilder();
-        boolean comma = false;
-
-        if ((mask & INITIATE) == INITIATE) {
-            if (comma) sb.append(',');
-            else comma = true;
-            sb.append("initiate");
-        }
-
-        if ((mask & ACCEPT) == ACCEPT) {
-            if (comma) sb.append(',');
-            else comma = true;
-            sb.append("accept");
-        }
-
-        return sb.toString();
-    }
-
-    /**
-     * Returns the canonical string representation of the actions.
-     * Always returns present actions in the following order:
-     * initiate, accept.
-     */
-
-    public String getActions() {
-        if (actions == null)
-            actions = getActions(this.mask);
-
-        return actions;
-    }
-
-
-    /**
-     * Returns a PermissionCollection object for storing
-     * ServicePermission objects.
-     * <br>
-     * ServicePermission objects must be stored in a manner that
-     * allows them to be inserted into the collection in any order, but
-     * that also enables the PermissionCollection implies method to
-     * be implemented in an efficient (and consistent) manner.
-     *
-     * @return a new PermissionCollection object suitable for storing
-     * ServicePermissions.
-     */
-
-    public PermissionCollection newPermissionCollection() {
-        return new KrbServicePermissionCollection();
-    }
-
-    /**
-     * Return the current action mask.
-     *
-     * @return the actions mask.
-     */
-
-    int getMask() {
-        return mask;
-    }
-
-    /**
-     * Convert an action string to an integer actions mask.
-     *
-     * @param action the action string
-     * @return the action mask
-     */
-
-    private static int getMask(String action) {
-
-        if (action == null) {
-            throw new NullPointerException("action can't be null");
-        }
-
-        if (action.equals("")) {
-            throw new IllegalArgumentException("action can't be empty");
-        }
-
-        int mask = NONE;
-
-        char[] a = action.toCharArray();
-
-        int i = a.length - 1;
-        if (i < 0)
-            return mask;
-
-        while (i != -1) {
-            char c;
-
-            // skip whitespace
-            while ((i!=-1) && ((c = a[i]) == ' ' ||
-                               c == '\r' ||
-                               c == '\n' ||
-                               c == '\f' ||
-                               c == '\t'))
-                i--;
-
-            // check for the known strings
-            int matchlen;
-
-            if (i >= 7 && (a[i-7] == 'i' || a[i-7] == 'I') &&
-                          (a[i-6] == 'n' || a[i-6] == 'N') &&
-                          (a[i-5] == 'i' || a[i-5] == 'I') &&
-                          (a[i-4] == 't' || a[i-4] == 'T') &&
-                          (a[i-3] == 'i' || a[i-3] == 'I') &&
-                          (a[i-2] == 'a' || a[i-2] == 'A') &&
-                          (a[i-1] == 't' || a[i-1] == 'T') &&
-                          (a[i] == 'e' || a[i] == 'E'))
-            {
-                matchlen = 8;
-                mask |= INITIATE;
-
-            } else if (i >= 5 && (a[i-5] == 'a' || a[i-5] == 'A') &&
-                                 (a[i-4] == 'c' || a[i-4] == 'C') &&
-                                 (a[i-3] == 'c' || a[i-3] == 'C') &&
-                                 (a[i-2] == 'e' || a[i-2] == 'E') &&
-                                 (a[i-1] == 'p' || a[i-1] == 'P') &&
-                                 (a[i] == 't' || a[i] == 'T'))
-            {
-                matchlen = 6;
-                mask |= ACCEPT;
-
-            } else {
-                // parse error
-                throw new IllegalArgumentException(
-                        "invalid permission: " + action);
-            }
-
-            // make sure we didn't just match the tail of a word
-            // like "ackbarfaccept".  Also, skip to the comma.
-            boolean seencomma = false;
-            while (i >= matchlen && !seencomma) {
-                switch(a[i-matchlen]) {
-                case ',':
-                    seencomma = true;
-                    /*FALLTHROUGH*/
-                case ' ': case '\r': case '\n':
-                case '\f': case '\t':
-                    break;
-                default:
-                    throw new IllegalArgumentException(
-                            "invalid permission: " + action);
-                }
-                i--;
-            }
-
-            // point i at the location of the comma minus one (or -1).
-            i -= matchlen;
-        }
-
-        return mask;
-    }
-
-
-    /**
-     * WriteObject is called to save the state of the ServicePermission
-     * to a stream. The actions are serialized, and the superclass
-     * takes care of the name.
-     */
-    private void writeObject(java.io.ObjectOutputStream s)
-        throws IOException
-    {
-        // Write out the actions. The superclass takes care of the name
-        // call getActions to make sure actions field is initialized
-        if (actions == null)
-            getActions();
-        s.defaultWriteObject();
-    }
-
-    /**
-     * readObject is called to restore the state of the
-     * ServicePermission from a stream.
-     */
-    private void readObject(java.io.ObjectInputStream s)
-         throws IOException, ClassNotFoundException
-    {
-        // Read in the action, then initialize the rest
-        s.defaultReadObject();
-        init(getName(),getMask(actions));
-    }
-
-
-    /*
-      public static void main(String args[]) throws Exception {
-      ServicePermission this_ =
-      new ServicePermission(args[0], "accept");
-      ServicePermission that_ =
-      new ServicePermission(args[1], "accept,initiate");
-      System.out.println("-----\n");
-      System.out.println("this.implies(that) = " + this_.implies(that_));
-      System.out.println("-----\n");
-      System.out.println("this = "+this_);
-      System.out.println("-----\n");
-      System.out.println("that = "+that_);
-      System.out.println("-----\n");
-
-      KrbServicePermissionCollection nps =
-      new KrbServicePermissionCollection();
-      nps.add(this_);
-      nps.add(new ServicePermission("nfs/example.com@EXAMPLE.COM",
-      "accept"));
-      nps.add(new ServicePermission("host/example.com@EXAMPLE.COM",
-      "initiate"));
-      System.out.println("nps.implies(that) = " + nps.implies(that_));
-      System.out.println("-----\n");
-
-      Enumeration e = nps.elements();
-
-      while (e.hasMoreElements()) {
-      ServicePermission x =
-      (ServicePermission) e.nextElement();
-      System.out.println("nps.e = " + x);
-      }
-
-      }
-    */
-
-}
-
-
-final class KrbServicePermissionCollection extends PermissionCollection
-    implements java.io.Serializable {
-
-    // Not serialized; see serialization section at end of class
-    private transient List<Permission> perms;
-
-    public KrbServicePermissionCollection() {
-        perms = new ArrayList<Permission>();
-    }
-
-    /**
-     * Check and see if this collection of permissions implies the permissions
-     * expressed in "permission".
-     *
-     * @param p the Permission object to compare
-     *
-     * @return true if "permission" is a proper subset of a permission in
-     * the collection, false if not.
-     */
-
-    public boolean implies(Permission permission) {
-        if (! (permission instanceof ServicePermission))
-                return false;
-
-        ServicePermission np = (ServicePermission) permission;
-        int desired = np.getMask();
-        int effective = 0;
-        int needed = desired;
-
-        synchronized (this) {
-            int len = perms.size();
-
-            // need to deal with the case where the needed permission has
-            // more than one action and the collection has individual permissions
-            // that sum up to the needed.
-
-            for (int i = 0; i < len; i++) {
-                ServicePermission x = (ServicePermission) perms.get(i);
-
-                //System.out.println("  trying "+x);
-                if (((needed & x.getMask()) != 0) && x.impliesIgnoreMask(np)) {
-                    effective |=  x.getMask();
-                    if ((effective & desired) == desired)
-                        return true;
-                    needed = (desired ^ effective);
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Adds a permission to the ServicePermissions. The key for
-     * the hash is the name.
-     *
-     * @param permission the Permission object to add.
-     *
-     * @exception IllegalArgumentException - if the permission is not a
-     *                                       ServicePermission
-     *
-     * @exception SecurityException - if this PermissionCollection object
-     *                                has been marked readonly
-     */
-
-    public void add(Permission permission) {
-        if (! (permission instanceof ServicePermission))
-            throw new IllegalArgumentException("invalid permission: "+
-                                               permission);
-        if (isReadOnly())
-            throw new SecurityException("attempt to add a Permission to a readonly PermissionCollection");
-
-        synchronized (this) {
-            perms.add(0, permission);
-        }
-    }
-
-    /**
-     * Returns an enumeration of all the ServicePermission objects
-     * in the container.
-     *
-     * @return an enumeration of all the ServicePermission objects.
-     */
-
-    public Enumeration<Permission> elements() {
-        // Convert Iterator into Enumeration
-        synchronized (this) {
-            return Collections.enumeration(perms);
-        }
-    }
-
-    private static final long serialVersionUID = -4118834211490102011L;
-
-    // Need to maintain serialization interoperability with earlier releases,
-    // which had the serializable field:
-    // private Vector permissions;
-
-    /**
-     * @serialField permissions java.util.Vector
-     *     A list of ServicePermission objects.
-     */
-    private static final ObjectStreamField[] serialPersistentFields = {
-        new ObjectStreamField("permissions", Vector.class),
-    };
-
-    /**
-     * @serialData "permissions" field (a Vector containing the ServicePermissions).
-     */
-    /*
-     * Writes the contents of the perms field out as a Vector for
-     * serialization compatibility with earlier releases.
-     */
-    private void writeObject(ObjectOutputStream out) throws IOException {
-        // Don't call out.defaultWriteObject()
-
-        // Write out Vector
-        Vector<Permission> permissions = new Vector<>(perms.size());
-
-        synchronized (this) {
-            permissions.addAll(perms);
-        }
-
-        ObjectOutputStream.PutField pfields = out.putFields();
-        pfields.put("permissions", permissions);
-        out.writeFields();
-    }
-
-    /*
-     * Reads in a Vector of ServicePermissions and saves them in the perms field.
-     */
-    private void readObject(ObjectInputStream in) throws IOException,
-    ClassNotFoundException {
-        // Don't call defaultReadObject()
-
-        // Read in serialized fields
-        ObjectInputStream.GetField gfields = in.readFields();
-
-        // Get the one we want
-        Vector<Permission> permissions =
-                (Vector<Permission>)gfields.get("permissions", null);
-        perms = new ArrayList<Permission>(permissions.size());
-        perms.addAll(permissions);
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/login/AccountException.java b/ojluni/src/main/java/javax/security/auth/login/AccountException.java
deleted file mode 100755
index 90d9262..0000000
--- a/ojluni/src/main/java/javax/security/auth/login/AccountException.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package javax.security.auth.login;
-
-/**
- * A generic account exception.
- *
- * @since 1.5
- */
-public class AccountException extends LoginException {
-
-    private static final long serialVersionUID = -2112878680072211787L;
-
-    /**
-     * Constructs a AccountException with no detail message. A detail
-     * message is a String that describes this particular exception.
-     */
-    public AccountException() {
-        super();
-    }
-
-    /**
-     * Constructs a AccountException with the specified detail message.
-     * A detail message is a String that describes this particular
-     * exception.
-     *
-     * <p>
-     *
-     * @param msg the detail message.
-     */
-    public AccountException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/login/AccountExpiredException.java b/ojluni/src/main/java/javax/security/auth/login/AccountExpiredException.java
deleted file mode 100755
index 40e8a13..0000000
--- a/ojluni/src/main/java/javax/security/auth/login/AccountExpiredException.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-package javax.security.auth.login;
-
-/**
- * Signals that a user account has expired.
- *
- * <p> This exception is thrown by LoginModules when they determine
- * that an account has expired.  For example, a <code>LoginModule</code>,
- * after successfully authenticating a user, may determine that the
- * user's account has expired.  In this case the <code>LoginModule</code>
- * throws this exception to notify the application.  The application can
- * then take the appropriate steps to notify the user.
- *
- */
-public class AccountExpiredException extends AccountException {
-
-    private static final long serialVersionUID = -6064064890162661560L;
-
-    /**
-     * Constructs a AccountExpiredException with no detail message. A detail
-     * message is a String that describes this particular exception.
-     */
-    public AccountExpiredException() {
-        super();
-    }
-
-    /**
-     * Constructs a AccountExpiredException with the specified detail
-     * message.  A detail message is a String that describes this particular
-     * exception.
-     *
-     * <p>
-     *
-     * @param msg the detail message.
-     */
-    public AccountExpiredException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/login/AccountLockedException.java b/ojluni/src/main/java/javax/security/auth/login/AccountLockedException.java
deleted file mode 100755
index 18982e2..0000000
--- a/ojluni/src/main/java/javax/security/auth/login/AccountLockedException.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package javax.security.auth.login;
-
-/**
- * Signals that an account was locked.
- *
- * <p> This exception may be thrown by a LoginModule if it
- * determines that authentication is being attempted on a
- * locked account.
- *
- * @since 1.5
- */
-public class AccountLockedException extends AccountException {
-
-    private static final long serialVersionUID = 8280345554014066334L;
-
-    /**
-     * Constructs a AccountLockedException with no detail message.
-     * A detail message is a String that describes this particular exception.
-     */
-    public AccountLockedException() {
-        super();
-    }
-
-    /**
-     * Constructs a AccountLockedException with the specified
-     * detail message. A detail message is a String that describes
-     * this particular exception.
-     *
-     * <p>
-     *
-     * @param msg the detail message.
-     */
-    public AccountLockedException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/login/AccountNotFoundException.java b/ojluni/src/main/java/javax/security/auth/login/AccountNotFoundException.java
deleted file mode 100755
index d976bc8..0000000
--- a/ojluni/src/main/java/javax/security/auth/login/AccountNotFoundException.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package javax.security.auth.login;
-
-/**
- * Signals that an account was not found.
- *
- * <p> This exception may be thrown by a LoginModule if it is unable
- * to locate an account necessary to perform authentication.
- *
- * @since 1.5
- */
-public class AccountNotFoundException extends AccountException {
-
-    private static final long serialVersionUID = 1498349563916294614L;
-
-    /**
-     * Constructs a AccountNotFoundException with no detail message.
-     * A detail message is a String that describes this particular exception.
-     */
-    public AccountNotFoundException() {
-        super();
-    }
-
-    /**
-     * Constructs a AccountNotFoundException with the specified
-     * detail message. A detail message is a String that describes
-     * this particular exception.
-     *
-     * <p>
-     *
-     * @param msg the detail message.
-     */
-    public AccountNotFoundException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/login/CredentialException.java b/ojluni/src/main/java/javax/security/auth/login/CredentialException.java
deleted file mode 100755
index 2f6bdf2..0000000
--- a/ojluni/src/main/java/javax/security/auth/login/CredentialException.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package javax.security.auth.login;
-
-/**
- * A generic credential exception.
- *
- * @since 1.5
- */
-public class CredentialException extends LoginException {
-
-    private static final long serialVersionUID = -4772893876810601859L;
-
-    /**
-     * Constructs a CredentialException with no detail message. A detail
-     * message is a String that describes this particular exception.
-     */
-    public CredentialException() {
-        super();
-    }
-
-    /**
-     * Constructs a CredentialException with the specified detail message.
-     * A detail message is a String that describes this particular
-     * exception.
-     *
-     * <p>
-     *
-     * @param msg the detail message.
-     */
-    public CredentialException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/login/CredentialExpiredException.java b/ojluni/src/main/java/javax/security/auth/login/CredentialExpiredException.java
deleted file mode 100755
index c3298c0..0000000
--- a/ojluni/src/main/java/javax/security/auth/login/CredentialExpiredException.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-package javax.security.auth.login;
-
-/**
- * Signals that a <code>Credential</code> has expired.
- *
- * <p> This exception is thrown by LoginModules when they determine
- * that a <code>Credential</code> has expired.
- * For example, a <code>LoginModule</code> authenticating a user
- * in its <code>login</code> method may determine that the user's
- * password, although entered correctly, has expired.  In this case
- * the <code>LoginModule</code> throws this exception to notify
- * the application.  The application can then take the appropriate
- * steps to assist the user in updating the password.
- *
- */
-public class CredentialExpiredException extends CredentialException {
-
-    private static final long serialVersionUID = -5344739593859737937L;
-
-    /**
-     * Constructs a CredentialExpiredException with no detail message. A detail
-     * message is a String that describes this particular exception.
-     */
-    public CredentialExpiredException() {
-        super();
-    }
-
-    /**
-     * Constructs a CredentialExpiredException with the specified detail
-     * message.  A detail message is a String that describes this particular
-     * exception.
-     *
-     * <p>
-     *
-     * @param msg the detail message.
-     */
-    public CredentialExpiredException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/login/CredentialNotFoundException.java b/ojluni/src/main/java/javax/security/auth/login/CredentialNotFoundException.java
deleted file mode 100755
index 0708fe7..0000000
--- a/ojluni/src/main/java/javax/security/auth/login/CredentialNotFoundException.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package javax.security.auth.login;
-
-/**
- * Signals that a credential was not found.
- *
- * <p> This exception may be thrown by a LoginModule if it is unable
- * to locate a credential necessary to perform authentication.
- *
- * @since 1.5
- */
-public class CredentialNotFoundException extends CredentialException {
-
-    private static final long serialVersionUID = -7779934467214319475L;
-
-    /**
-     * Constructs a CredentialNotFoundException with no detail message.
-     * A detail message is a String that describes this particular exception.
-     */
-    public CredentialNotFoundException() {
-        super();
-    }
-
-    /**
-     * Constructs a CredentialNotFoundException with the specified
-     * detail message. A detail message is a String that describes
-     * this particular exception.
-     *
-     * <p>
-     *
-     * @param msg the detail message.
-     */
-    public CredentialNotFoundException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/login/FailedLoginException.java b/ojluni/src/main/java/javax/security/auth/login/FailedLoginException.java
deleted file mode 100755
index 5c632bb..0000000
--- a/ojluni/src/main/java/javax/security/auth/login/FailedLoginException.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-package javax.security.auth.login;
-
-/**
- * Signals that user authentication failed.
- *
- * <p> This exception is thrown by LoginModules if authentication failed.
- * For example, a <code>LoginModule</code> throws this exception if
- * the user entered an incorrect password.
- *
- */
-public class FailedLoginException extends LoginException {
-
-    private static final long serialVersionUID = 802556922354616286L;
-
-    /**
-     * Constructs a FailedLoginException with no detail message. A detail
-     * message is a String that describes this particular exception.
-     */
-    public FailedLoginException() {
-        super();
-    }
-
-    /**
-     * Constructs a FailedLoginException with the specified detail
-     * message.  A detail message is a String that describes this particular
-     * exception.
-     *
-     * <p>
-     *
-     * @param msg the detail message.
-     */
-    public FailedLoginException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/login/LoginContext.java b/ojluni/src/main/java/javax/security/auth/login/LoginContext.java
deleted file mode 100755
index 6fb484a..0000000
--- a/ojluni/src/main/java/javax/security/auth/login/LoginContext.java
+++ /dev/null
@@ -1,996 +0,0 @@
-/*
- * Copyright (c) 1998, 2010, 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.
- */
-
-package javax.security.auth.login;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.HashMap;
-import java.text.MessageFormat;
-import javax.security.auth.Subject;
-import javax.security.auth.AuthPermission;
-import javax.security.auth.callback.*;
-import java.security.AccessController;
-import java.security.AccessControlContext;
-import sun.security.util.PendingException;
-import sun.security.util.ResourcesMgr;
-
-/**
- * <p> The <code>LoginContext</code> class describes the basic methods used
- * to authenticate Subjects and provides a way to develop an
- * application independent of the underlying authentication technology.
- * A <code>Configuration</code> specifies the authentication technology, or
- * <code>LoginModule</code>, to be used with a particular application.
- * Different LoginModules can be plugged in under an application
- * without requiring any modifications to the application itself.
- *
- * <p> In addition to supporting <i>pluggable</i> authentication, this class
- * also supports the notion of <i>stacked</i> authentication.
- * Applications may be configured to use more than one
- * LoginModule.  For example, one could
- * configure both a Kerberos LoginModule and a smart card
- * LoginModule under an application.
- *
- * <p> A typical caller instantiates a LoginContext with
- * a <i>name</i> and a <code>CallbackHandler</code>.
- * LoginContext uses the <i>name</i> as the index into a
- * Configuration to determine which LoginModules should be used,
- * and which ones must succeed in order for the overall authentication to
- * succeed.  The <code>CallbackHandler</code> is passed to the underlying
- * LoginModules so they may communicate and interact with users
- * (prompting for a username and password via a graphical user interface,
- * for example).
- *
- * <p> Once the caller has instantiated a LoginContext,
- * it invokes the <code>login</code> method to authenticate
- * a <code>Subject</code>.  The <code>login</code> method invokes
- * the configured modules to perform their respective types of authentication
- * (username/password, smart card pin verification, etc.).
- * Note that the LoginModules will not attempt authentication retries nor
- * introduce delays if the authentication fails.
- * Such tasks belong to the LoginContext caller.
- *
- * <p> If the <code>login</code> method returns without
- * throwing an exception, then the overall authentication succeeded.
- * The caller can then retrieve
- * the newly authenticated Subject by invoking the
- * <code>getSubject</code> method.  Principals and Credentials associated
- * with the Subject may be retrieved by invoking the Subject's
- * respective <code>getPrincipals</code>, <code>getPublicCredentials</code>,
- * and <code>getPrivateCredentials</code> methods.
- *
- * <p> To logout the Subject, the caller calls
- * the <code>logout</code> method.  As with the <code>login</code>
- * method, this <code>logout</code> method invokes the <code>logout</code>
- * method for the configured modules.
- *
- * <p> A LoginContext should not be used to authenticate
- * more than one Subject.  A separate LoginContext
- * should be used to authenticate each different Subject.
- *
- * <p> The following documentation applies to all LoginContext constructors:
- * <ol>
- *
- * <li> <code>Subject</code>
- * <ul>
- * <li> If the constructor has a Subject
- * input parameter, the LoginContext uses the caller-specified
- * Subject object.
- * <p>
- * <li> If the caller specifies a <code>null</code> Subject
- * and a <code>null</code> value is permitted,
- * the LoginContext instantiates a new Subject.
- * <p>
- * <li> If the constructor does <b>not</b> have a Subject
- * input parameter, the LoginContext instantiates a new Subject.
- * <p>
- * </ul>
- *
- * <li> <code>Configuration</code>
- * <ul>
- * <li> If the constructor has a Configuration
- * input parameter and the caller specifies a non-null Configuration,
- * the LoginContext uses the caller-specified Configuration.
- * <p>
- * If the constructor does <b>not</b> have a Configuration
- * input parameter, or if the caller specifies a <code>null</code>
- * Configuration object, the constructor uses the following call to
- * get the installed Configuration:
- * <pre>
- *      config = Configuration.getConfiguration();
- * </pre>
- * For both cases,
- * the <i>name</i> argument given to the constructor is passed to the
- * <code>Configuration.getAppConfigurationEntry</code> method.
- * If the Configuration has no entries for the specified <i>name</i>,
- * then the <code>LoginContext</code> calls
- * <code>getAppConfigurationEntry</code> with the name, "<i>other</i>"
- * (the default entry name).  If there is no entry for "<i>other</i>",
- * then a <code>LoginException</code> is thrown.
- * <p>
- * <li> When LoginContext uses the installed Configuration, the caller
- * requires the createLoginContext.<em>name</em> and possibly
- * createLoginContext.other AuthPermissions. Furthermore, the
- * LoginContext will invoke configured modules from within an
- * <code>AccessController.doPrivileged</code> call so that modules that
- * perform security-sensitive tasks (such as connecting to remote hosts,
- * and updating the Subject) will require the respective permissions, but
- * the callers of the LoginContext will not require those permissions.
- * <p>
- * <li> When LoginContext uses a caller-specified Configuration, the caller
- * does not require any createLoginContext AuthPermission.  The LoginContext
- * saves the <code>AccessControlContext</code> for the caller,
- * and invokes the configured modules from within an
- * <tt>AccessController.doPrivileged</tt> call constrained by that context.
- * This means the caller context (stored when the LoginContext was created)
- * must have sufficient permissions to perform any security-sensitive tasks
- * that the modules may perform.
- * <p>
- * </ul>
- *
- * <li> <code>CallbackHandler</code>
- * <ul>
- * <li> If the constructor has a CallbackHandler
- * input parameter, the LoginContext uses the caller-specified
- * CallbackHandler object.
- * <p>
- * <li> If the constructor does <b>not</b> have a CallbackHandler
- * input parameter, or if the caller specifies a <code>null</code>
- * CallbackHandler object (and a <code>null</code> value is permitted),
- * the LoginContext queries the
- * <i>auth.login.defaultCallbackHandler</i> security property
- * for the fully qualified class name of a default handler implementation.
- * If the security property is not set,
- * then the underlying modules will not have a
- * CallbackHandler for use in communicating
- * with users.  The caller thus assumes that the configured
- * modules have alternative means for authenticating the user.
- *
- * <p>
- * <li> When the LoginContext uses the installed Configuration (instead of
- * a caller-specified Configuration, see above),
- * then this LoginContext must wrap any
- * caller-specified or default CallbackHandler implementation
- * in a new CallbackHandler implementation
- * whose <code>handle</code> method implementation invokes the
- * specified CallbackHandler's <code>handle</code> method in a
- * <code>java.security.AccessController.doPrivileged</code> call
- * constrained by the caller's current <code>AccessControlContext</code>.
- * </ul>
- * </ol>
- *
- * <p> Note that Security Properties
- * (such as <code>auth.login.defaultCallbackHandler</code>)
- * can be set programmatically via the
- * <code>java.security.Security</code> class,
- * or statically in the Java security properties file located in the
- * file named &lt;JAVA_HOME&gt;/lib/security/java.security.
- * &lt;JAVA_HOME&gt; refers to the value of the java.home system property,
- * and specifies the directory where the JRE is installed.
- *
- * @see java.security.Security
- * @see javax.security.auth.AuthPermission
- * @see javax.security.auth.Subject
- * @see javax.security.auth.callback.CallbackHandler
- * @see javax.security.auth.login.Configuration
- * @see javax.security.auth.spi.LoginModule
- */
-public class LoginContext {
-
-    private static final String INIT_METHOD             = "initialize";
-    private static final String LOGIN_METHOD            = "login";
-    private static final String COMMIT_METHOD           = "commit";
-    private static final String ABORT_METHOD            = "abort";
-    private static final String LOGOUT_METHOD           = "logout";
-    private static final String OTHER                   = "other";
-    private static final String DEFAULT_HANDLER         =
-                                "auth.login.defaultCallbackHandler";
-    private Subject subject = null;
-    private boolean subjectProvided = false;
-    private boolean loginSucceeded = false;
-    private CallbackHandler callbackHandler;
-    private Map state = new HashMap();
-
-    private Configuration config;
-    private boolean configProvided = false;
-    private AccessControlContext creatorAcc = null;
-    private ModuleInfo[] moduleStack;
-    private ClassLoader contextClassLoader = null;
-    private static final Class[] PARAMS = { };
-
-    // state saved in the event a user-specified asynchronous exception
-    // was specified and thrown
-
-    private int moduleIndex = 0;
-    private LoginException firstError = null;
-    private LoginException firstRequiredError = null;
-    private boolean success = false;
-
-    private static final sun.security.util.Debug debug =
-        sun.security.util.Debug.getInstance("logincontext", "\t[LoginContext]");
-
-    private void init(String name) throws LoginException {
-
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null && !configProvided) {
-            sm.checkPermission(new AuthPermission
-                                ("createLoginContext." + name));
-        }
-
-        if (name == null)
-            throw new LoginException
-                (ResourcesMgr.getString("Invalid.null.input.name"));
-
-        // get the Configuration
-        if (config == null) {
-            config = java.security.AccessController.doPrivileged
-                (new java.security.PrivilegedAction<Configuration>() {
-                public Configuration run() {
-                    return Configuration.getConfiguration();
-                }
-            });
-        }
-
-        // get the LoginModules configured for this application
-        AppConfigurationEntry[] entries = config.getAppConfigurationEntry(name);
-        if (entries == null) {
-
-            if (sm != null && !configProvided) {
-                sm.checkPermission(new AuthPermission
-                                ("createLoginContext." + OTHER));
-            }
-
-            entries = config.getAppConfigurationEntry(OTHER);
-            if (entries == null) {
-                MessageFormat form = new MessageFormat(ResourcesMgr.getString
-                        ("No.LoginModules.configured.for.name"));
-                Object[] source = {name};
-                throw new LoginException(form.format(source));
-            }
-        }
-        moduleStack = new ModuleInfo[entries.length];
-        for (int i = 0; i < entries.length; i++) {
-            // clone returned array
-            moduleStack[i] = new ModuleInfo
-                                (new AppConfigurationEntry
-                                        (entries[i].getLoginModuleName(),
-                                        entries[i].getControlFlag(),
-                                        entries[i].getOptions()),
-                                null);
-        }
-
-        contextClassLoader = java.security.AccessController.doPrivileged
-                (new java.security.PrivilegedAction<ClassLoader>() {
-                public ClassLoader run() {
-                    return Thread.currentThread().getContextClassLoader();
-                }
-        });
-    }
-
-    private void loadDefaultCallbackHandler() throws LoginException {
-
-        // get the default handler class
-        try {
-
-            final ClassLoader finalLoader = contextClassLoader;
-
-            this.callbackHandler = java.security.AccessController.doPrivileged(
-                new java.security.PrivilegedExceptionAction<CallbackHandler>() {
-                public CallbackHandler run() throws Exception {
-                    String defaultHandler = java.security.Security.getProperty
-                        (DEFAULT_HANDLER);
-                    if (defaultHandler == null || defaultHandler.length() == 0)
-                        return null;
-                    Class c = Class.forName(defaultHandler,
-                                        true,
-                                        finalLoader);
-                    return (CallbackHandler)c.newInstance();
-                }
-            });
-        } catch (java.security.PrivilegedActionException pae) {
-            throw new LoginException(pae.getException().toString());
-        }
-
-        // secure it with the caller's ACC
-        if (this.callbackHandler != null && !configProvided) {
-            this.callbackHandler = new SecureCallbackHandler
-                                (java.security.AccessController.getContext(),
-                                this.callbackHandler);
-        }
-    }
-
-    /**
-     * Instantiate a new <code>LoginContext</code> object with a name.
-     *
-     * @param name the name used as the index into the
-     *          <code>Configuration</code>.
-     *
-     * @exception LoginException if the caller-specified <code>name</code>
-     *          does not appear in the <code>Configuration</code>
-     *          and there is no <code>Configuration</code> entry
-     *          for "<i>other</i>", or if the
-     *          <i>auth.login.defaultCallbackHandler</i>
-     *          security property was set, but the implementation
-     *          class could not be loaded.
-     *          <p>
-     * @exception SecurityException if a SecurityManager is set and
-     *          the caller does not have
-     *          AuthPermission("createLoginContext.<i>name</i>"),
-     *          or if a configuration entry for <i>name</i> does not exist and
-     *          the caller does not additionally have
-     *          AuthPermission("createLoginContext.other")
-     */
-    public LoginContext(String name) throws LoginException {
-        init(name);
-        loadDefaultCallbackHandler();
-    }
-
-    /**
-     * Instantiate a new <code>LoginContext</code> object with a name
-     * and a <code>Subject</code> object.
-     *
-     * <p>
-     *
-     * @param name the name used as the index into the
-     *          <code>Configuration</code>. <p>
-     *
-     * @param subject the <code>Subject</code> to authenticate.
-     *
-     * @exception LoginException if the caller-specified <code>name</code>
-     *          does not appear in the <code>Configuration</code>
-     *          and there is no <code>Configuration</code> entry
-     *          for "<i>other</i>", if the caller-specified <code>subject</code>
-     *          is <code>null</code>, or if the
-     *          <i>auth.login.defaultCallbackHandler</i>
-     *          security property was set, but the implementation
-     *          class could not be loaded.
-     *          <p>
-     * @exception SecurityException if a SecurityManager is set and
-     *          the caller does not have
-     *          AuthPermission("createLoginContext.<i>name</i>"),
-     *          or if a configuration entry for <i>name</i> does not exist and
-     *          the caller does not additionally have
-     *          AuthPermission("createLoginContext.other")
-     */
-    public LoginContext(String name, Subject subject)
-    throws LoginException {
-        init(name);
-        if (subject == null)
-            throw new LoginException
-                (ResourcesMgr.getString("invalid.null.Subject.provided"));
-        this.subject = subject;
-        subjectProvided = true;
-        loadDefaultCallbackHandler();
-    }
-
-    /**
-     * Instantiate a new <code>LoginContext</code> object with a name
-     * and a <code>CallbackHandler</code> object.
-     *
-     * <p>
-     *
-     * @param name the name used as the index into the
-     *          <code>Configuration</code>. <p>
-     *
-     * @param callbackHandler the <code>CallbackHandler</code> object used by
-     *          LoginModules to communicate with the user.
-     *
-     * @exception LoginException if the caller-specified <code>name</code>
-     *          does not appear in the <code>Configuration</code>
-     *          and there is no <code>Configuration</code> entry
-     *          for "<i>other</i>", or if the caller-specified
-     *          <code>callbackHandler</code> is <code>null</code>.
-     *          <p>
-     * @exception SecurityException if a SecurityManager is set and
-     *          the caller does not have
-     *          AuthPermission("createLoginContext.<i>name</i>"),
-     *          or if a configuration entry for <i>name</i> does not exist and
-     *          the caller does not additionally have
-     *          AuthPermission("createLoginContext.other")
-     */
-    public LoginContext(String name, CallbackHandler callbackHandler)
-    throws LoginException {
-        init(name);
-        if (callbackHandler == null)
-            throw new LoginException(ResourcesMgr.getString
-                                ("invalid.null.CallbackHandler.provided"));
-        this.callbackHandler = new SecureCallbackHandler
-                                (java.security.AccessController.getContext(),
-                                callbackHandler);
-    }
-
-    /**
-     * Instantiate a new <code>LoginContext</code> object with a name,
-     * a <code>Subject</code> to be authenticated, and a
-     * <code>CallbackHandler</code> object.
-     *
-     * <p>
-     *
-     * @param name the name used as the index into the
-     *          <code>Configuration</code>. <p>
-     *
-     * @param subject the <code>Subject</code> to authenticate. <p>
-     *
-     * @param callbackHandler the <code>CallbackHandler</code> object used by
-     *          LoginModules to communicate with the user.
-     *
-     * @exception LoginException if the caller-specified <code>name</code>
-     *          does not appear in the <code>Configuration</code>
-     *          and there is no <code>Configuration</code> entry
-     *          for "<i>other</i>", or if the caller-specified
-     *          <code>subject</code> is <code>null</code>,
-     *          or if the caller-specified
-     *          <code>callbackHandler</code> is <code>null</code>.
-     *          <p>
-     * @exception SecurityException if a SecurityManager is set and
-     *          the caller does not have
-     *          AuthPermission("createLoginContext.<i>name</i>"),
-     *          or if a configuration entry for <i>name</i> does not exist and
-     *          the caller does not additionally have
-     *          AuthPermission("createLoginContext.other")
-     */
-    public LoginContext(String name, Subject subject,
-                        CallbackHandler callbackHandler) throws LoginException {
-        this(name, subject);
-        if (callbackHandler == null)
-            throw new LoginException(ResourcesMgr.getString
-                                ("invalid.null.CallbackHandler.provided"));
-        this.callbackHandler = new SecureCallbackHandler
-                                (java.security.AccessController.getContext(),
-                                callbackHandler);
-    }
-
-    /**
-     * Instantiate a new <code>LoginContext</code> object with a name,
-     * a <code>Subject</code> to be authenticated,
-     * a <code>CallbackHandler</code> object, and a login
-     * <code>Configuration</code>.
-     *
-     * <p>
-     *
-     * @param name the name used as the index into the caller-specified
-     *          <code>Configuration</code>. <p>
-     *
-     * @param subject the <code>Subject</code> to authenticate,
-     *          or <code>null</code>. <p>
-     *
-     * @param callbackHandler the <code>CallbackHandler</code> object used by
-     *          LoginModules to communicate with the user, or <code>null</code>.
-     *          <p>
-     *
-     * @param config the <code>Configuration</code> that lists the
-     *          login modules to be called to perform the authentication,
-     *          or <code>null</code>.
-     *
-     * @exception LoginException if the caller-specified <code>name</code>
-     *          does not appear in the <code>Configuration</code>
-     *          and there is no <code>Configuration</code> entry
-     *          for "<i>other</i>".
-     *          <p>
-     * @exception SecurityException if a SecurityManager is set,
-     *          <i>config</i> is <code>null</code>,
-     *          and either the caller does not have
-     *          AuthPermission("createLoginContext.<i>name</i>"),
-     *          or if a configuration entry for <i>name</i> does not exist and
-     *          the caller does not additionally have
-     *          AuthPermission("createLoginContext.other")
-     *
-     * @since 1.5
-     */
-    public LoginContext(String name, Subject subject,
-                        CallbackHandler callbackHandler,
-                        Configuration config) throws LoginException {
-        this.config = config;
-        configProvided = (config != null) ? true : false;
-        if (configProvided) {
-            creatorAcc = java.security.AccessController.getContext();
-        }
-
-        init(name);
-        if (subject != null) {
-            this.subject = subject;
-            subjectProvided = true;
-        }
-        if (callbackHandler == null) {
-            loadDefaultCallbackHandler();
-        } else if (!configProvided) {
-            this.callbackHandler = new SecureCallbackHandler
-                                (java.security.AccessController.getContext(),
-                                callbackHandler);
-        } else {
-            this.callbackHandler = callbackHandler;
-        }
-    }
-
-    /**
-     * Perform the authentication.
-     *
-     * <p> This method invokes the <code>login</code> method for each
-     * LoginModule configured for the <i>name</i> specified to the
-     * <code>LoginContext</code> constructor, as determined by the login
-     * <code>Configuration</code>.  Each <code>LoginModule</code>
-     * then performs its respective type of authentication
-     * (username/password, smart card pin verification, etc.).
-     *
-     * <p> This method completes a 2-phase authentication process by
-     * calling each configured LoginModule's <code>commit</code> method
-     * if the overall authentication succeeded (the relevant REQUIRED,
-     * REQUISITE, SUFFICIENT, and OPTIONAL LoginModules succeeded),
-     * or by calling each configured LoginModule's <code>abort</code> method
-     * if the overall authentication failed.  If authentication succeeded,
-     * each successful LoginModule's <code>commit</code> method associates
-     * the relevant Principals and Credentials with the <code>Subject</code>.
-     * If authentication failed, each LoginModule's <code>abort</code> method
-     * removes/destroys any previously stored state.
-     *
-     * <p> If the <code>commit</code> phase of the authentication process
-     * fails, then the overall authentication fails and this method
-     * invokes the <code>abort</code> method for each configured
-     * <code>LoginModule</code>.
-     *
-     * <p> If the <code>abort</code> phase
-     * fails for any reason, then this method propagates the
-     * original exception thrown either during the <code>login</code> phase
-     * or the <code>commit</code> phase.  In either case, the overall
-     * authentication fails.
-     *
-     * <p> In the case where multiple LoginModules fail,
-     * this method propagates the exception raised by the first
-     * <code>LoginModule</code> which failed.
-     *
-     * <p> Note that if this method enters the <code>abort</code> phase
-     * (either the <code>login</code> or <code>commit</code> phase failed),
-     * this method invokes all LoginModules configured for the
-     * application regardless of their respective <code>Configuration</code>
-     * flag parameters.  Essentially this means that <code>Requisite</code>
-     * and <code>Sufficient</code> semantics are ignored during the
-     * <code>abort</code> phase.  This guarantees that proper cleanup
-     * and state restoration can take place.
-     *
-     * <p>
-     *
-     * @exception LoginException if the authentication fails.
-     */
-    public void login() throws LoginException {
-
-        loginSucceeded = false;
-
-        if (subject == null) {
-            subject = new Subject();
-        }
-
-        try {
-            if (configProvided) {
-                // module invoked in doPrivileged with creatorAcc
-                invokeCreatorPriv(LOGIN_METHOD);
-                invokeCreatorPriv(COMMIT_METHOD);
-            } else {
-                // module invoked in doPrivileged
-                invokePriv(LOGIN_METHOD);
-                invokePriv(COMMIT_METHOD);
-            }
-            loginSucceeded = true;
-        } catch (LoginException le) {
-            try {
-                if (configProvided) {
-                    invokeCreatorPriv(ABORT_METHOD);
-                } else {
-                    invokePriv(ABORT_METHOD);
-                }
-            } catch (LoginException le2) {
-                throw le;
-            }
-            throw le;
-        }
-    }
-
-    /**
-     * Logout the <code>Subject</code>.
-     *
-     * <p> This method invokes the <code>logout</code> method for each
-     * <code>LoginModule</code> configured for this <code>LoginContext</code>.
-     * Each <code>LoginModule</code> performs its respective logout procedure
-     * which may include removing/destroying
-     * <code>Principal</code> and <code>Credential</code> information
-     * from the <code>Subject</code> and state cleanup.
-     *
-     * <p> Note that this method invokes all LoginModules configured for the
-     * application regardless of their respective
-     * <code>Configuration</code> flag parameters.  Essentially this means
-     * that <code>Requisite</code> and <code>Sufficient</code> semantics are
-     * ignored for this method.  This guarantees that proper cleanup
-     * and state restoration can take place.
-     *
-     * <p>
-     *
-     * @exception LoginException if the logout fails.
-     */
-    public void logout() throws LoginException {
-        if (subject == null) {
-            throw new LoginException(ResourcesMgr.getString
-                ("null.subject.logout.called.before.login"));
-        }
-
-        if (configProvided) {
-            // module invoked in doPrivileged with creatorAcc
-            invokeCreatorPriv(LOGOUT_METHOD);
-        } else {
-            // module invoked in doPrivileged
-            invokePriv(LOGOUT_METHOD);
-        }
-    }
-
-    /**
-     * Return the authenticated Subject.
-     *
-     * <p>
-     *
-     * @return the authenticated Subject.  If the caller specified a
-     *          Subject to this LoginContext's constructor,
-     *          this method returns the caller-specified Subject.
-     *          If a Subject was not specified and authentication succeeds,
-     *          this method returns the Subject instantiated and used for
-     *          authentication by this LoginContext.
-     *          If a Subject was not specified, and authentication fails or
-     *          has not been attempted, this method returns null.
-     */
-    public Subject getSubject() {
-        if (!loginSucceeded && !subjectProvided)
-            return null;
-        return subject;
-    }
-
-    private void clearState() {
-        moduleIndex = 0;
-        firstError = null;
-        firstRequiredError = null;
-        success = false;
-    }
-
-    private void throwException(LoginException originalError, LoginException le)
-    throws LoginException {
-
-        // first clear state
-        clearState();
-
-        // throw the exception
-        LoginException error = (originalError != null) ? originalError : le;
-        throw error;
-    }
-
-    /**
-     * Invokes the login, commit, and logout methods
-     * from a LoginModule inside a doPrivileged block.
-     *
-     * This version is called if the caller did not instantiate
-     * the LoginContext with a Configuration object.
-     */
-    private void invokePriv(final String methodName) throws LoginException {
-        try {
-            java.security.AccessController.doPrivileged
-                (new java.security.PrivilegedExceptionAction<Void>() {
-                public Void run() throws LoginException {
-                    invoke(methodName);
-                    return null;
-                }
-            });
-        } catch (java.security.PrivilegedActionException pae) {
-            throw (LoginException)pae.getException();
-        }
-    }
-
-    /**
-     * Invokes the login, commit, and logout methods
-     * from a LoginModule inside a doPrivileged block restricted
-     * by creatorAcc
-     *
-     * This version is called if the caller instantiated
-     * the LoginContext with a Configuration object.
-     */
-    private void invokeCreatorPriv(final String methodName)
-                throws LoginException {
-        try {
-            java.security.AccessController.doPrivileged
-                (new java.security.PrivilegedExceptionAction<Void>() {
-                public Void run() throws LoginException {
-                    invoke(methodName);
-                    return null;
-                }
-            }, creatorAcc);
-        } catch (java.security.PrivilegedActionException pae) {
-            throw (LoginException)pae.getException();
-        }
-    }
-
-    private void invoke(String methodName) throws LoginException {
-
-        // start at moduleIndex
-        // - this can only be non-zero if methodName is LOGIN_METHOD
-
-        for (int i = moduleIndex; i < moduleStack.length; i++, moduleIndex++) {
-            try {
-
-                int mIndex = 0;
-                Method[] methods = null;
-
-                if (moduleStack[i].module != null) {
-                    methods = moduleStack[i].module.getClass().getMethods();
-                } else {
-
-                    // instantiate the LoginModule
-                    Class c = Class.forName
-                                (moduleStack[i].entry.getLoginModuleName(),
-                                true,
-                                contextClassLoader);
-
-                    Constructor constructor = c.getConstructor(PARAMS);
-                    Object[] args = { };
-
-                    // allow any object to be a LoginModule
-                    // as long as it conforms to the interface
-                    moduleStack[i].module = constructor.newInstance(args);
-
-                    methods = moduleStack[i].module.getClass().getMethods();
-
-                    // call the LoginModule's initialize method
-                    for (mIndex = 0; mIndex < methods.length; mIndex++) {
-                        if (methods[mIndex].getName().equals(INIT_METHOD))
-                            break;
-                    }
-
-                    Object[] initArgs = {subject,
-                                        callbackHandler,
-                                        state,
-                                        moduleStack[i].entry.getOptions() };
-                    // invoke the LoginModule initialize method
-                    methods[mIndex].invoke(moduleStack[i].module, initArgs);
-                }
-
-                // find the requested method in the LoginModule
-                for (mIndex = 0; mIndex < methods.length; mIndex++) {
-                    if (methods[mIndex].getName().equals(methodName))
-                        break;
-                }
-
-                // set up the arguments to be passed to the LoginModule method
-                Object[] args = { };
-
-                // invoke the LoginModule method
-                boolean status = ((Boolean)methods[mIndex].invoke
-                                (moduleStack[i].module, args)).booleanValue();
-
-                if (status == true) {
-
-                    // if SUFFICIENT, return if no prior REQUIRED errors
-                    if (!methodName.equals(ABORT_METHOD) &&
-                        !methodName.equals(LOGOUT_METHOD) &&
-                        moduleStack[i].entry.getControlFlag() ==
-                    AppConfigurationEntry.LoginModuleControlFlag.SUFFICIENT &&
-                        firstRequiredError == null) {
-
-                        // clear state
-                        clearState();
-
-                        if (debug != null)
-                            debug.println(methodName + " SUFFICIENT success");
-                        return;
-                    }
-
-                    if (debug != null)
-                        debug.println(methodName + " success");
-                    success = true;
-                } else {
-                    if (debug != null)
-                        debug.println(methodName + " ignored");
-                }
-
-            } catch (NoSuchMethodException nsme) {
-                MessageFormat form = new MessageFormat(ResourcesMgr.getString
-                        ("unable.to.instantiate.LoginModule.module.because.it.does.not.provide.a.no.argument.constructor"));
-                Object[] source = {moduleStack[i].entry.getLoginModuleName()};
-                throwException(null, new LoginException(form.format(source)));
-            } catch (InstantiationException ie) {
-                throwException(null, new LoginException(ResourcesMgr.getString
-                        ("unable.to.instantiate.LoginModule.") +
-                        ie.getMessage()));
-            } catch (ClassNotFoundException cnfe) {
-                throwException(null, new LoginException(ResourcesMgr.getString
-                        ("unable.to.find.LoginModule.class.") +
-                        cnfe.getMessage()));
-            } catch (IllegalAccessException iae) {
-                throwException(null, new LoginException(ResourcesMgr.getString
-                        ("unable.to.access.LoginModule.") +
-                        iae.getMessage()));
-            } catch (InvocationTargetException ite) {
-
-                // failure cases
-
-                LoginException le;
-
-                if (ite.getCause() instanceof PendingException &&
-                    methodName.equals(LOGIN_METHOD)) {
-
-                    // XXX
-                    //
-                    // if a module's LOGIN_METHOD threw a PendingException
-                    // then immediately throw it.
-                    //
-                    // when LoginContext is called again,
-                    // the module that threw the exception is invoked first
-                    // (the module list is not invoked from the start).
-                    // previously thrown exception state is still present.
-                    //
-                    // it is assumed that the module which threw
-                    // the exception can have its
-                    // LOGIN_METHOD invoked twice in a row
-                    // without any commit/abort in between.
-                    //
-                    // in all cases when LoginContext returns
-                    // (either via natural return or by throwing an exception)
-                    // we need to call clearState before returning.
-                    // the only time that is not true is in this case -
-                    // do not call throwException here.
-
-                    throw (PendingException)ite.getCause();
-
-                } else if (ite.getCause() instanceof LoginException) {
-
-                    le = (LoginException)ite.getCause();
-
-                } else if (ite.getCause() instanceof SecurityException) {
-
-                    // do not want privacy leak
-                    // (e.g., sensitive file path in exception msg)
-
-                    le = new LoginException("Security Exception");
-                    le.initCause(new SecurityException());
-                    if (debug != null) {
-                        debug.println
-                            ("original security exception with detail msg " +
-                            "replaced by new exception with empty detail msg");
-                        debug.println("original security exception: " +
-                                ite.getCause().toString());
-                    }
-                } else {
-
-                    // capture an unexpected LoginModule exception
-                    java.io.StringWriter sw = new java.io.StringWriter();
-                    ite.getCause().printStackTrace
-                                                (new java.io.PrintWriter(sw));
-                    sw.flush();
-                    le = new LoginException(sw.toString());
-                }
-
-                if (moduleStack[i].entry.getControlFlag() ==
-                    AppConfigurationEntry.LoginModuleControlFlag.REQUISITE) {
-
-                    if (debug != null)
-                        debug.println(methodName + " REQUISITE failure");
-
-                    // if REQUISITE, then immediately throw an exception
-                    if (methodName.equals(ABORT_METHOD) ||
-                        methodName.equals(LOGOUT_METHOD)) {
-                        if (firstRequiredError == null)
-                            firstRequiredError = le;
-                    } else {
-                        throwException(firstRequiredError, le);
-                    }
-
-                } else if (moduleStack[i].entry.getControlFlag() ==
-                    AppConfigurationEntry.LoginModuleControlFlag.REQUIRED) {
-
-                    if (debug != null)
-                        debug.println(methodName + " REQUIRED failure");
-
-                    // mark down that a REQUIRED module failed
-                    if (firstRequiredError == null)
-                        firstRequiredError = le;
-
-                } else {
-
-                    if (debug != null)
-                        debug.println(methodName + " OPTIONAL failure");
-
-                    // mark down that an OPTIONAL module failed
-                    if (firstError == null)
-                        firstError = le;
-                }
-            }
-        }
-
-        // we went thru all the LoginModules.
-        if (firstRequiredError != null) {
-            // a REQUIRED module failed -- return the error
-            throwException(firstRequiredError, null);
-        } else if (success == false && firstError != null) {
-            // no module succeeded -- return the first error
-            throwException(firstError, null);
-        } else if (success == false) {
-            // no module succeeded -- all modules were IGNORED
-            throwException(new LoginException
-                (ResourcesMgr.getString("Login.Failure.all.modules.ignored")),
-                null);
-        } else {
-            // success
-
-            clearState();
-            return;
-        }
-    }
-
-    /**
-     * Wrap the caller-specified CallbackHandler in our own
-     * and invoke it within a privileged block, constrained by
-     * the caller's AccessControlContext.
-     */
-    private static class SecureCallbackHandler implements CallbackHandler {
-
-        private final java.security.AccessControlContext acc;
-        private final CallbackHandler ch;
-
-        SecureCallbackHandler(java.security.AccessControlContext acc,
-                        CallbackHandler ch) {
-            this.acc = acc;
-            this.ch = ch;
-        }
-
-        public void handle(final Callback[] callbacks)
-                throws java.io.IOException, UnsupportedCallbackException {
-            try {
-                java.security.AccessController.doPrivileged
-                    (new java.security.PrivilegedExceptionAction<Void>() {
-                    public Void run() throws java.io.IOException,
-                                        UnsupportedCallbackException {
-                        ch.handle(callbacks);
-                        return null;
-                    }
-                }, acc);
-            } catch (java.security.PrivilegedActionException pae) {
-                if (pae.getException() instanceof java.io.IOException) {
-                    throw (java.io.IOException)pae.getException();
-                } else {
-                    throw (UnsupportedCallbackException)pae.getException();
-                }
-            }
-        }
-    }
-
-    /**
-     * LoginModule information -
-     *          incapsulates Configuration info and actual module instances
-     */
-    private static class ModuleInfo {
-        AppConfigurationEntry entry;
-        Object module;
-
-        ModuleInfo(AppConfigurationEntry newEntry, Object newModule) {
-            this.entry = newEntry;
-            this.module = newModule;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/auth/spi/LoginModule.java b/ojluni/src/main/java/javax/security/auth/spi/LoginModule.java
deleted file mode 100755
index e807497..0000000
--- a/ojluni/src/main/java/javax/security/auth/spi/LoginModule.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (c) 1998, 2004, 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.
- */
-
-package javax.security.auth.spi;
-
-import javax.security.auth.Subject;
-import javax.security.auth.AuthPermission;
-import javax.security.auth.callback.*;
-import javax.security.auth.login.*;
-import java.util.Map;
-
-/**
- * <p> <code>LoginModule</code> describes the interface
- * implemented by authentication technology providers.  LoginModules
- * are plugged in under applications to provide a particular type of
- * authentication.
- *
- * <p> While applications write to the <code>LoginContext</code> API,
- * authentication technology providers implement the
- * <code>LoginModule</code> interface.
- * A <code>Configuration</code> specifies the LoginModule(s)
- * to be used with a particular login application.  Therefore different
- * LoginModules can be plugged in under the application without
- * requiring any modifications to the application itself.
- *
- * <p> The <code>LoginContext</code> is responsible for reading the
- * <code>Configuration</code> and instantiating the appropriate
- * LoginModules.  Each <code>LoginModule</code> is initialized with
- * a <code>Subject</code>, a <code>CallbackHandler</code>, shared
- * <code>LoginModule</code> state, and LoginModule-specific options.
- *
- * The <code>Subject</code> represents the
- * <code>Subject</code> currently being authenticated and is updated
- * with relevant Credentials if authentication succeeds.
- * LoginModules use the <code>CallbackHandler</code> to
- * communicate with users.  The <code>CallbackHandler</code> may be
- * used to prompt for usernames and passwords, for example.
- * Note that the <code>CallbackHandler</code> may be null.  LoginModules
- * which absolutely require a <code>CallbackHandler</code> to authenticate
- * the <code>Subject</code> may throw a <code>LoginException</code>.
- * LoginModules optionally use the shared state to share information
- * or data among themselves.
- *
- * <p> The LoginModule-specific options represent the options
- * configured for this <code>LoginModule</code> by an administrator or user
- * in the login <code>Configuration</code>.
- * The options are defined by the <code>LoginModule</code> itself
- * and control the behavior within it.  For example, a
- * <code>LoginModule</code> may define options to support debugging/testing
- * capabilities.  Options are defined using a key-value syntax,
- * such as <i>debug=true</i>.  The <code>LoginModule</code>
- * stores the options as a <code>Map</code> so that the values may
- * be retrieved using the key.  Note that there is no limit to the number
- * of options a <code>LoginModule</code> chooses to define.
- *
- * <p> The calling application sees the authentication process as a single
- * operation.  However, the authentication process within the
- * <code>LoginModule</code> proceeds in two distinct phases.
- * In the first phase, the LoginModule's
- * <code>login</code> method gets invoked by the LoginContext's
- * <code>login</code> method.  The <code>login</code>
- * method for the <code>LoginModule</code> then performs
- * the actual authentication (prompt for and verify a password for example)
- * and saves its authentication status as private state
- * information.  Once finished, the LoginModule's <code>login</code>
- * method either returns <code>true</code> (if it succeeded) or
- * <code>false</code> (if it should be ignored), or throws a
- * <code>LoginException</code> to specify a failure.
- * In the failure case, the <code>LoginModule</code> must not retry the
- * authentication or introduce delays.  The responsibility of such tasks
- * belongs to the application.  If the application attempts to retry
- * the authentication, the LoginModule's <code>login</code> method will be
- * called again.
- *
- * <p> In the second phase, if the LoginContext's overall authentication
- * succeeded (the relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL
- * LoginModules succeeded), then the <code>commit</code>
- * method for the <code>LoginModule</code> gets invoked.
- * The <code>commit</code> method for a <code>LoginModule</code> checks its
- * privately saved state to see if its own authentication succeeded.
- * If the overall <code>LoginContext</code> authentication succeeded
- * and the LoginModule's own authentication succeeded, then the
- * <code>commit</code> method associates the relevant
- * Principals (authenticated identities) and Credentials (authentication data
- * such as cryptographic keys) with the <code>Subject</code>
- * located within the <code>LoginModule</code>.
- *
- * <p> If the LoginContext's overall authentication failed (the relevant
- * REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules did not succeed),
- * then the <code>abort</code> method for each <code>LoginModule</code>
- * gets invoked.  In this case, the <code>LoginModule</code> removes/destroys
- * any authentication state originally saved.
- *
- * <p> Logging out a <code>Subject</code> involves only one phase.
- * The <code>LoginContext</code> invokes the LoginModule's <code>logout</code>
- * method.  The <code>logout</code> method for the <code>LoginModule</code>
- * then performs the logout procedures, such as removing Principals or
- * Credentials from the <code>Subject</code> or logging session information.
- *
- * <p> A <code>LoginModule</code> implementation must have a constructor with
- * no arguments.  This allows classes which load the <code>LoginModule</code>
- * to instantiate it.
- *
- * @see javax.security.auth.login.LoginContext
- * @see javax.security.auth.login.Configuration
- */
-public interface LoginModule {
-
-    /**
-     * Initialize this LoginModule.
-     *
-     * <p> This method is called by the <code>LoginContext</code>
-     * after this <code>LoginModule</code> has been instantiated.
-     * The purpose of this method is to initialize this
-     * <code>LoginModule</code> with the relevant information.
-     * If this <code>LoginModule</code> does not understand
-     * any of the data stored in <code>sharedState</code> or
-     * <code>options</code> parameters, they can be ignored.
-     *
-     * <p>
-     *
-     * @param subject the <code>Subject</code> to be authenticated. <p>
-     *
-     * @param callbackHandler a <code>CallbackHandler</code> for communicating
-     *                  with the end user (prompting for usernames and
-     *                  passwords, for example). <p>
-     *
-     * @param sharedState state shared with other configured LoginModules. <p>
-     *
-     * @param options options specified in the login
-     *                  <code>Configuration</code> for this particular
-     *                  <code>LoginModule</code>.
-     */
-    void initialize(Subject subject, CallbackHandler callbackHandler,
-                    Map<String,?> sharedState,
-                    Map<String,?> options);
-
-    /**
-     * Method to authenticate a <code>Subject</code> (phase 1).
-     *
-     * <p> The implementation of this method authenticates
-     * a <code>Subject</code>.  For example, it may prompt for
-     * <code>Subject</code> information such
-     * as a username and password and then attempt to verify the password.
-     * This method saves the result of the authentication attempt
-     * as private state within the LoginModule.
-     *
-     * <p>
-     *
-     * @exception LoginException if the authentication fails
-     *
-     * @return true if the authentication succeeded, or false if this
-     *                  <code>LoginModule</code> should be ignored.
-     */
-    boolean login() throws LoginException;
-
-    /**
-     * Method to commit the authentication process (phase 2).
-     *
-     * <p> This method is called if the LoginContext's
-     * overall authentication succeeded
-     * (the relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules
-     * succeeded).
-     *
-     * <p> If this LoginModule's own authentication attempt
-     * succeeded (checked by retrieving the private state saved by the
-     * <code>login</code> method), then this method associates relevant
-     * Principals and Credentials with the <code>Subject</code> located in the
-     * <code>LoginModule</code>.  If this LoginModule's own
-     * authentication attempted failed, then this method removes/destroys
-     * any state that was originally saved.
-     *
-     * <p>
-     *
-     * @exception LoginException if the commit fails
-     *
-     * @return true if this method succeeded, or false if this
-     *                  <code>LoginModule</code> should be ignored.
-     */
-    boolean commit() throws LoginException;
-
-    /**
-     * Method to abort the authentication process (phase 2).
-     *
-     * <p> This method is called if the LoginContext's
-     * overall authentication failed.
-     * (the relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules
-     * did not succeed).
-     *
-     * <p> If this LoginModule's own authentication attempt
-     * succeeded (checked by retrieving the private state saved by the
-     * <code>login</code> method), then this method cleans up any state
-     * that was originally saved.
-     *
-     * <p>
-     *
-     * @exception LoginException if the abort fails
-     *
-     * @return true if this method succeeded, or false if this
-     *                  <code>LoginModule</code> should be ignored.
-     */
-    boolean abort() throws LoginException;
-
-    /**
-     * Method which logs out a <code>Subject</code>.
-     *
-     * <p>An implementation of this method might remove/destroy a Subject's
-     * Principals and Credentials.
-     *
-     * <p>
-     *
-     * @exception LoginException if the logout fails
-     *
-     * @return true if this method succeeded, or false if this
-     *                  <code>LoginModule</code> should be ignored.
-     */
-    boolean logout() throws LoginException;
-}
diff --git a/ojluni/src/main/java/javax/security/auth/x500/X500PrivateCredential.java b/ojluni/src/main/java/javax/security/auth/x500/X500PrivateCredential.java
deleted file mode 100755
index 64bd142..0000000
--- a/ojluni/src/main/java/javax/security/auth/x500/X500PrivateCredential.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 2000, 2001, 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.
- */
-
-package javax.security.auth.x500;
-
-import java.security.PrivateKey;
-import java.security.cert.X509Certificate;
-import javax.security.auth.Destroyable;
-
-/**
- * <p> This class represents an <code>X500PrivateCredential</code>.
- * It associates an X.509 certificate, corresponding private key and the
- * KeyStore alias used to reference that exact key pair in the KeyStore.
- * This enables looking up the private credentials for an X.500 principal
- * in a subject.
- *
- */
-public final class X500PrivateCredential implements Destroyable {
-    private X509Certificate cert;
-    private PrivateKey key;
-    private String alias;
-
-    /**
-     * Creates an X500PrivateCredential that associates an X.509 certificate,
-     * a private key and the KeyStore alias.
-     * <p>
-     * @param cert X509Certificate
-     * @param key  PrivateKey for the certificate
-     * @exception IllegalArgumentException if either <code>cert</code> or
-     * <code>key</code> is null
-     *
-     */
-
-    public X500PrivateCredential(X509Certificate cert, PrivateKey key) {
-        if (cert == null || key == null )
-            throw new IllegalArgumentException();
-        this.cert = cert;
-        this.key = key;
-        this.alias=null;
-    }
-
-    /**
-     * Creates an X500PrivateCredential that associates an X.509 certificate,
-     * a private key and the KeyStore alias.
-     * <p>
-     * @param cert X509Certificate
-     * @param key  PrivateKey for the certificate
-     * @param alias KeyStore alias
-     * @exception IllegalArgumentException if either <code>cert</code>,
-     * <code>key</code> or <code>alias</code> is null
-     *
-     */
-    public X500PrivateCredential(X509Certificate cert, PrivateKey key,
-                                 String alias) {
-        if (cert == null || key == null|| alias == null )
-            throw new IllegalArgumentException();
-        this.cert = cert;
-        this.key = key;
-        this.alias=alias;
-    }
-
-    /**
-     * Returns the X.509 certificate.
-     * <p>
-     * @return the X509Certificate
-     */
-
-    public X509Certificate getCertificate() {
-        return cert;
-    }
-
-    /**
-     * Returns the PrivateKey.
-     * <p>
-     * @return the PrivateKey
-     */
-    public PrivateKey getPrivateKey() {
-        return key;
-    }
-
-    /**
-     * Returns the KeyStore alias.
-     * <p>
-     * @return the KeyStore alias
-     */
-
-    public String getAlias() {
-        return alias;
-    }
-
-    /**
-     * Clears the references to the X.509 certificate, private key and the
-     * KeyStore alias in this object.
-     */
-
-    public void destroy() {
-        cert = null;
-        key = null;
-        alias =null;
-    }
-
-    /**
-     * Determines if the references to the X.509 certificate and private key
-     * in this object have been cleared.
-     * <p>
-     * @return true if X509Certificate and the PrivateKey are null
-
-     */
-    public boolean isDestroyed() {
-        return cert == null && key == null && alias==null;
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/sasl/AuthenticationException.java b/ojluni/src/main/java/javax/security/sasl/AuthenticationException.java
deleted file mode 100755
index ea76d1a..0000000
--- a/ojluni/src/main/java/javax/security/sasl/AuthenticationException.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package javax.security.sasl;
-
-/**
- * This exception is thrown by a SASL mechanism implementation
- * to indicate that the SASL
- * exchange has failed due to reasons related to authentication, such as
- * an invalid identity, passphrase, or key.
- * <p>
- * Note that the lack of an AuthenticationException does not mean that
- * the failure was not due to an authentication error.  A SASL mechanism
- * implementation might throw the more general SaslException instead of
- * AuthenticationException if it is unable to determine the nature
- * of the failure, or if does not want to disclose the nature of
- * the failure, for example, due to security reasons.
- *
- * @since 1.5
- *
- * @author Rosanna Lee
- * @author Rob Weltman
- */
-public class AuthenticationException extends SaslException {
-    /**
-     * Constructs a new instance of <tt>AuthenticationException</tt>.
-     * The root exception and the detailed message are null.
-     */
-    public AuthenticationException () {
-        super();
-    }
-
-    /**
-     * Constructs a new instance of <tt>AuthenticationException</tt>
-     * with a detailed message.
-     * The root exception is null.
-     * @param detail A possibly null string containing details of the exception.
-     *
-     * @see java.lang.Throwable#getMessage
-     */
-    public AuthenticationException (String detail) {
-        super(detail);
-    }
-
-    /**
-     * Constructs a new instance of <tt>AuthenticationException</tt> with a detailed message
-     * and a root exception.
-     *
-     * @param detail A possibly null string containing details of the exception.
-     * @param ex A possibly null root exception that caused this exception.
-     *
-     * @see java.lang.Throwable#getMessage
-     * @see #getCause
-     */
-    public AuthenticationException (String detail, Throwable ex) {
-        super(detail, ex);
-    }
-
-    /** Use serialVersionUID from JSR 28 RI for interoperability */
-    private static final long serialVersionUID = -3579708765071815007L;
-}
diff --git a/ojluni/src/main/java/javax/security/sasl/AuthorizeCallback.java b/ojluni/src/main/java/javax/security/sasl/AuthorizeCallback.java
deleted file mode 100755
index 0824cb2..0000000
--- a/ojluni/src/main/java/javax/security/sasl/AuthorizeCallback.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 2000, 2004, 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.
- */
-
-package javax.security.sasl;
-
-import javax.security.auth.callback.Callback;
-
-/**
-  * This callback is used by <tt>SaslServer</tt> to determine whether
-  * one entity (identified by an authenticated authentication id)
-  * can act on
-  * behalf of another entity (identified by an authorization id).
-  *
-  * @since 1.5
-  *
-  * @author Rosanna Lee
-  * @author Rob Weltman
-  */
-public class AuthorizeCallback implements Callback, java.io.Serializable {
-    /**
-     * The (authenticated) authentication id to check.
-     * @serial
-     */
-    private String authenticationID;
-
-    /**
-     * The authorization id to check.
-     * @serial
-     */
-    private String authorizationID;
-
-    /**
-     * The id of the authorized entity. If null, the id of
-     * the authorized entity is authorizationID.
-     * @serial
-     */
-    private String authorizedID;
-
-    /**
-     * A flag indicating whether the authentication id is allowed to
-     * act on behalf of the authorization id.
-     * @serial
-     */
-    private boolean authorized;
-
-    /**
-     * Constructs an instance of <tt>AuthorizeCallback</tt>.
-     *
-     * @param authnID   The (authenticated) authentication id.
-     * @param authzID   The authorization id.
-     */
-    public AuthorizeCallback(String authnID, String authzID) {
-        authenticationID = authnID;
-        authorizationID = authzID;
-    }
-
-    /**
-     * Returns the authentication id to check.
-     * @return The authentication id to check.
-     */
-    public String getAuthenticationID() {
-        return authenticationID;
-    }
-
-    /**
-     * Returns the authorization id to check.
-     * @return The authentication id to check.
-     */
-    public String getAuthorizationID() {
-        return authorizationID;
-    }
-
-    /**
-     * Determines whether the authentication id is allowed to
-     * act on behalf of the authorization id.
-     *
-     * @return <tt>true</tt> if authorization is allowed; <tt>false</tt> otherwise
-     * @see #setAuthorized(boolean)
-     * @see #getAuthorizedID()
-     */
-    public boolean isAuthorized() {
-        return authorized;
-    }
-
-    /**
-     * Sets whether the authorization is allowed.
-     * @param ok <tt>true</tt> if authorization is allowed; <tt>false</tt> otherwise
-     * @see #isAuthorized
-     * @see #setAuthorizedID(java.lang.String)
-     */
-    public void setAuthorized(boolean ok) {
-        authorized = ok;
-    }
-
-    /**
-     * Returns the id of the authorized user.
-     * @return The id of the authorized user. <tt>null</tt> means the
-     * authorization failed.
-     * @see #setAuthorized(boolean)
-     * @see #setAuthorizedID(java.lang.String)
-     */
-    public String getAuthorizedID() {
-        if (!authorized) {
-            return null;
-        }
-        return (authorizedID == null) ? authorizationID : authorizedID;
-    }
-
-    /**
-     * Sets the id of the authorized entity. Called by handler only when the id
-     * is different from getAuthorizationID(). For example, the id
-     * might need to be canonicalized for the environment in which it
-     * will be used.
-     * @param id The id of the authorized user.
-     * @see #setAuthorized(boolean)
-     * @see #getAuthorizedID
-     */
-    public void setAuthorizedID(String id) {
-        authorizedID = id;
-    }
-
-    private static final long serialVersionUID = -2353344186490470805L;
-}
diff --git a/ojluni/src/main/java/javax/security/sasl/RealmCallback.java b/ojluni/src/main/java/javax/security/sasl/RealmCallback.java
deleted file mode 100755
index b9d30d1..0000000
--- a/ojluni/src/main/java/javax/security/sasl/RealmCallback.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2000, 2003, 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.
- */
-
-package javax.security.sasl;
-
-import javax.security.auth.callback.TextInputCallback;
-
-/**
-  * This callback is used by <tt>SaslClient</tt> and <tt>SaslServer</tt>
-  * to retrieve realm information.
-  *
-  * @since 1.5
-  *
-  * @author Rosanna Lee
-  * @author Rob Weltman
-  */
-public class RealmCallback extends TextInputCallback {
-
-    /**
-     * Constructs a <tt>RealmCallback</tt> with a prompt.
-     *
-     * @param prompt The non-null prompt to use to request the realm information.
-     * @throws IllegalArgumentException If <tt>prompt</tt> is null or
-     * the empty string.
-     */
-    public RealmCallback(String prompt) {
-        super(prompt);
-    }
-
-    /**
-     * Constructs a <tt>RealmCallback</tt> with a prompt and default
-     * realm information.
-     *
-     * @param prompt The non-null prompt to use to request the realm information.
-     * @param defaultRealmInfo The non-null default realm information to use.
-     * @throws IllegalArgumentException If <tt>prompt</tt> is null or
-     * the empty string,
-     * or if <tt>defaultRealm</tt> is empty or null.
-     */
-    public RealmCallback(String prompt, String defaultRealmInfo) {
-        super(prompt, defaultRealmInfo);
-    }
-
-    private static final long serialVersionUID = -4342673378785456908L;
-}
diff --git a/ojluni/src/main/java/javax/security/sasl/RealmChoiceCallback.java b/ojluni/src/main/java/javax/security/sasl/RealmChoiceCallback.java
deleted file mode 100755
index 3ee292a..0000000
--- a/ojluni/src/main/java/javax/security/sasl/RealmChoiceCallback.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2000, 2003, 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.
- */
-
-package javax.security.sasl;
-
-import javax.security.auth.callback.ChoiceCallback;
-
-/**
-  * This callback is used by <tt>SaslClient</tt> and <tt>SaslServer</tt>
-  * to obtain a realm given a list of realm choices.
-  *
-  * @since 1.5
-  *
-  * @author Rosanna Lee
-  * @author Rob Weltman
-  */
-public class RealmChoiceCallback extends ChoiceCallback {
-
-    /**
-     * Constructs a <tt>RealmChoiceCallback</tt> with a prompt, a list of
-     * choices and a default choice.
-     *
-     * @param prompt the non-null prompt to use to request the realm.
-     * @param choices the non-null list of realms to choose from.
-     * @param defaultChoice the choice to be used as the default choice
-     * when the list of choices is displayed. It is an index into
-     * the <tt>choices</tt> arary.
-     * @param multiple true if multiple choices allowed; false otherwise
-     * @throws IllegalArgumentException If <tt>prompt</tt> is null or the empty string,
-     * if <tt>choices</tt> has a length of 0, if any element from
-     * <tt>choices</tt> is null or empty, or if <tt>defaultChoice</tt>
-     * does not fall within the array boundary of <tt>choices</tt>
-     */
-    public RealmChoiceCallback(String prompt, String[]choices,
-        int defaultChoice, boolean multiple) {
-        super(prompt, choices, defaultChoice, multiple);
-    }
-
-    private static final long serialVersionUID = -8588141348846281332L;
-}
diff --git a/ojluni/src/main/java/javax/security/sasl/Sasl.java b/ojluni/src/main/java/javax/security/sasl/Sasl.java
deleted file mode 100755
index 4188c41..0000000
--- a/ojluni/src/main/java/javax/security/sasl/Sasl.java
+++ /dev/null
@@ -1,606 +0,0 @@
-/*
- * Copyright (c) 1999, 2006, 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.
- */
-
-package javax.security.sasl;
-
-import javax.security.auth.callback.CallbackHandler;
-
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.Collections;
-import java.security.Provider;
-import java.security.Security;
-
-/**
- * A static class for creating SASL clients and servers.
- *<p>
- * This class defines the policy of how to locate, load, and instantiate
- * SASL clients and servers.
- *<p>
- * For example, an application or library gets a SASL client by doing
- * something like:
- *<blockquote><pre>
- * SaslClient sc = Sasl.createSaslClient(mechanisms,
- *     authorizationId, protocol, serverName, props, callbackHandler);
- *</pre></blockquote>
- * It can then proceed to use the instance to create an authentication connection.
- *<p>
- * Similarly, a server gets a SASL server by using code that looks as follows:
- *<blockquote><pre>
- * SaslServer ss = Sasl.createSaslServer(mechanism,
- *     protocol, serverName, props, callbackHandler);
- *</pre></blockquote>
- *
- * @since 1.5
- *
- * @author Rosanna Lee
- * @author Rob Weltman
- */
-public class Sasl {
-    // Cannot create one of these
-    private Sasl() {
-    }
-
-    /**
-     * The name of a property that specifies the quality-of-protection to use.
-     * The property contains a comma-separated, ordered list
-     * of quality-of-protection values that the
-     * client or server is willing to support.  A qop value is one of
-     * <ul>
-     * <li><tt>"auth"</tt> - authentication only</li>
-     * <li><tt>"auth-int"</tt> - authentication plus integrity protection</li>
-     * <li><tt>"auth-conf"</tt> - authentication plus integrity and confidentiality
-     * protection</li>
-     * </ul>
-     *
-     * The order of the list specifies the preference order of the client or
-     * server. If this property is absent, the default qop is <tt>"auth"</tt>.
-     * The value of this constant is <tt>"javax.security.sasl.qop"</tt>.
-     */
-    public static final String QOP = "javax.security.sasl.qop";
-
-    /**
-     * The name of a property that specifies the cipher strength to use.
-     * The property contains a comma-separated, ordered list
-     * of cipher strength values that
-     * the client or server is willing to support. A strength value is one of
-     * <ul>
-     * <li><tt>"low"</tt></li>
-     * <li><tt>"medium"</tt></li>
-     * <li><tt>"high"</tt></li>
-     * </ul>
-     * The order of the list specifies the preference order of the client or
-     * server.  An implementation should allow configuration of the meaning
-     * of these values.  An application may use the Java Cryptography
-     * Extension (JCE) with JCE-aware mechanisms to control the selection of
-     * cipher suites that match the strength values.
-     * <BR>
-     * If this property is absent, the default strength is
-     * <tt>"high,medium,low"</tt>.
-     * The value of this constant is <tt>"javax.security.sasl.strength"</tt>.
-     */
-    public static final String STRENGTH = "javax.security.sasl.strength";
-
-    /**
-     * The name of a property that specifies whether the
-     * server must authenticate to the client. The property contains
-     * <tt>"true"</tt> if the server must
-     * authenticate the to client; <tt>"false"</tt> otherwise.
-     * The default is <tt>"false"</tt>.
-     * <br>The value of this constant is
-     * <tt>"javax.security.sasl.server.authentication"</tt>.
-     */
-    public static final String SERVER_AUTH =
-    "javax.security.sasl.server.authentication";
-
-    /**
-     * The name of a property that specifies the maximum size of the receive
-     * buffer in bytes of <tt>SaslClient</tt>/<tt>SaslServer</tt>.
-     * The property contains the string representation of an integer.
-     * <br>If this property is absent, the default size
-     * is defined by the mechanism.
-     * <br>The value of this constant is <tt>"javax.security.sasl.maxbuffer"</tt>.
-     */
-    public static final String MAX_BUFFER = "javax.security.sasl.maxbuffer";
-
-    /**
-     * The name of a property that specifies the maximum size of the raw send
-     * buffer in bytes of <tt>SaslClient</tt>/<tt>SaslServer</tt>.
-     * The property contains the string representation of an integer.
-     * The value of this property is negotiated between the client and server
-     * during the authentication exchange.
-     * <br>The value of this constant is <tt>"javax.security.sasl.rawsendsize"</tt>.
-     */
-    public static final String RAW_SEND_SIZE = "javax.security.sasl.rawsendsize";
-
-    /**
-     * The name of a property that specifies whether to reuse previously
-     * authenticated session information. The property contains "true" if the
-     * mechanism implementation may attempt to reuse previously authenticated
-     * session information; it contains "false" if the implementation must
-     * not reuse previously authenticated session information.  A setting of
-     * "true" serves only as a hint: it does not necessarily entail actual
-     * reuse because reuse might not be possible due to a number of reasons,
-     * including, but not limited to, lack of mechanism support for reuse,
-     * expiration of reusable information, and the peer's refusal to support
-     * reuse.
-     *
-     * The property's default value is "false".  The value of this constant
-     * is "javax.security.sasl.reuse".
-     *
-     * Note that all other parameters and properties required to create a
-     * SASL client/server instance must be provided regardless of whether
-     * this property has been supplied. That is, you cannot supply any less
-     * information in anticipation of reuse.
-     *
-     * Mechanism implementations that support reuse might allow customization
-     * of its implementation, for factors such as cache size, timeouts, and
-     * criteria for reuseability. Such customizations are
-     * implementation-dependent.
-     */
-     public static final String REUSE = "javax.security.sasl.reuse";
-
-    /**
-     * The name of a property that specifies
-     * whether mechanisms susceptible to simple plain passive attacks (e.g.,
-     * "PLAIN") are not permitted. The property
-     * contains <tt>"true"</tt> if such mechanisms are not permitted;
-     * <tt>"false"</tt> if such mechanisms are permitted.
-     * The default is <tt>"false"</tt>.
-     * <br>The value of this constant is
-     * <tt>"javax.security.sasl.policy.noplaintext"</tt>.
-     */
-    public static final String POLICY_NOPLAINTEXT =
-    "javax.security.sasl.policy.noplaintext";
-
-    /**
-     * The name of a property that specifies whether
-     * mechanisms susceptible to active (non-dictionary) attacks
-     * are not permitted.
-     * The property contains <tt>"true"</tt>
-     * if mechanisms susceptible to active attacks
-     * are not permitted; <tt>"false"</tt> if such mechanisms are permitted.
-     * The default is <tt>"false"</tt>.
-     * <br>The value of this constant is
-     * <tt>"javax.security.sasl.policy.noactive"</tt>.
-     */
-    public static final String POLICY_NOACTIVE =
-    "javax.security.sasl.policy.noactive";
-
-    /**
-     * The name of a property that specifies whether
-     * mechanisms susceptible to passive dictionary attacks are not permitted.
-     * The property contains <tt>"true"</tt>
-     * if mechanisms susceptible to dictionary attacks are not permitted;
-     * <tt>"false"</tt> if such mechanisms are permitted.
-     * The default is <tt>"false"</tt>.
-     *<br>
-     * The value of this constant is
-     * <tt>"javax.security.sasl.policy.nodictionary"</tt>.
-     */
-    public static final String POLICY_NODICTIONARY =
-    "javax.security.sasl.policy.nodictionary";
-
-    /**
-     * The name of a property that specifies whether mechanisms that accept
-     * anonymous login are not permitted. The property contains <tt>"true"</tt>
-     * if mechanisms that accept anonymous login are not permitted;
-     * <tt>"false"</tt>
-     * if such mechanisms are permitted. The default is <tt>"false"</tt>.
-     *<br>
-     * The value of this constant is
-     * <tt>"javax.security.sasl.policy.noanonymous"</tt>.
-     */
-    public static final String POLICY_NOANONYMOUS =
-    "javax.security.sasl.policy.noanonymous";
-
-     /**
-      * The name of a property that specifies whether mechanisms that implement
-      * forward secrecy between sessions are required. Forward secrecy
-      * means that breaking into one session will not automatically
-      * provide information for breaking into future sessions.
-      * The property
-      * contains <tt>"true"</tt> if mechanisms that implement forward secrecy
-      * between sessions are required; <tt>"false"</tt> if such mechanisms
-      * are not required. The default is <tt>"false"</tt>.
-      *<br>
-      * The value of this constant is
-      * <tt>"javax.security.sasl.policy.forward"</tt>.
-      */
-    public static final String POLICY_FORWARD_SECRECY =
-    "javax.security.sasl.policy.forward";
-
-    /**
-     * The name of a property that specifies whether
-     * mechanisms that pass client credentials are required. The property
-     * contains <tt>"true"</tt> if mechanisms that pass
-     * client credentials are required; <tt>"false"</tt>
-     * if such mechanisms are not required. The default is <tt>"false"</tt>.
-     *<br>
-     * The value of this constant is
-     * <tt>"javax.security.sasl.policy.credentials"</tt>.
-     */
-    public static final String POLICY_PASS_CREDENTIALS =
-    "javax.security.sasl.policy.credentials";
-
-    /**
-     * The name of a property that specifies the credentials to use.
-     * The property contains a mechanism-specific Java credential object.
-     * Mechanism implementations may examine the value of this property
-     * to determine whether it is a class that they support.
-     * The property may be used to supply credentials to a mechanism that
-     * supports delegated authentication.
-     *<br>
-     * The value of this constant is
-     * <tt>"javax.security.sasl.credentials"</tt>.
-     */
-    public static final String CREDENTIALS = "javax.security.sasl.credentials";
-
-    /**
-     * Creates a <tt>SaslClient</tt> using the parameters supplied.
-     *
-     * This method uses the
-<a href="{@docRoot}/../technotes/guides/security/crypto/CryptoSpec.html#Provider">JCA Security Provider Framework</a>, described in the
-     * "Java Cryptography Architecture API Specification & Reference", for
-     * locating and selecting a <tt>SaslClient</tt> implementation.
-     *
-     * First, it
-     * obtains an ordered list of <tt>SaslClientFactory</tt> instances from
-     * the registered security providers for the "SaslClientFactory" service
-     * and the specified SASL mechanism(s). It then invokes
-     * <tt>createSaslClient()</tt> on each factory instance on the list
-     * until one produces a non-null <tt>SaslClient</tt> instance. It returns
-     * the non-null <tt>SaslClient</tt> instance, or null if the search fails
-     * to produce a non-null <tt>SaslClient</tt> instance.
-     *<p>
-     * A security provider for SaslClientFactory registers with the
-     * JCA Security Provider Framework keys of the form <br>
-     * <tt>SaslClientFactory.<em>mechanism_name</em></tt>
-     * <br>
-     * and values that are class names of implementations of
-     * <tt>javax.security.sasl.SaslClientFactory</tt>.
-     *
-     * For example, a provider that contains a factory class,
-     * <tt>com.wiz.sasl.digest.ClientFactory</tt>, that supports the
-     * "DIGEST-MD5" mechanism would register the following entry with the JCA:
-     * <tt>SaslClientFactory.DIGEST-MD5 com.wiz.sasl.digest.ClientFactory</tt>
-     *<p>
-     * See the
-     * "Java Cryptography Architecture API Specification & Reference"
-     * for information about how to install and configure security service
-     *  providers.
-     *
-     * @param mechanisms The non-null list of mechanism names to try. Each is the
-     * IANA-registered name of a SASL mechanism. (e.g. "GSSAPI", "CRAM-MD5").
-     * @param authorizationId The possibly null protocol-dependent
-     * identification to be used for authorization.
-     * If null or empty, the server derives an authorization
-     * ID from the client's authentication credentials.
-     * When the SASL authentication completes successfully,
-     * the specified entity is granted access.
-     *
-     * @param protocol The non-null string name of the protocol for which
-     * the authentication is being performed (e.g., "ldap").
-     *
-     * @param serverName The non-null fully-qualified host name of the server
-     * to authenticate to.
-     *
-     * @param props The possibly null set of properties used to
-     * select the SASL mechanism and to configure the authentication
-     * exchange of the selected mechanism.
-     * For example, if <tt>props</tt> contains the
-     * <code>Sasl.POLICY_NOPLAINTEXT</code> property with the value
-     * <tt>"true"</tt>, then the selected
-     * SASL mechanism must not be susceptible to simple plain passive attacks.
-     * In addition to the standard properties declared in this class,
-     * other, possibly mechanism-specific, properties can be included.
-     * Properties not relevant to the selected mechanism are ignored,
-     * including any map entries with non-String keys.
-     *
-     * @param cbh The possibly null callback handler to used by the SASL
-     * mechanisms to get further information from the application/library
-     * to complete the authentication. For example, a SASL mechanism might
-     * require the authentication ID, password and realm from the caller.
-     * The authentication ID is requested by using a <tt>NameCallback</tt>.
-     * The password is requested by using a <tt>PasswordCallback</tt>.
-     * The realm is requested by using a <tt>RealmChoiceCallback</tt> if there is a list
-     * of realms to choose from, and by using a <tt>RealmCallback</tt> if
-     * the realm must be entered.
-     *
-     *@return A possibly null <tt>SaslClient</tt> created using the parameters
-     * supplied. If null, cannot find a <tt>SaslClientFactory</tt>
-     * that will produce one.
-     *@exception SaslException If cannot create a <tt>SaslClient</tt> because
-     * of an error.
-     */
-    public static SaslClient createSaslClient(
-        String[] mechanisms,
-        String authorizationId,
-        String protocol,
-        String serverName,
-        Map<String,?> props,
-        CallbackHandler cbh) throws SaslException {
-
-        SaslClient mech = null;
-        SaslClientFactory fac;
-        String className;
-        String mechName;
-
-        for (int i = 0; i < mechanisms.length; i++) {
-            if ((mechName=mechanisms[i]) == null) {
-                throw new NullPointerException(
-                    "Mechanism name cannot be null");
-            } else if (mechName.length() == 0) {
-                continue;
-            }
-            String mechFilter = "SaslClientFactory." + mechName;
-            Provider[] provs = Security.getProviders(mechFilter);
-            for (int j = 0; provs != null && j < provs.length; j++) {
-                className = provs[j].getProperty(mechFilter);
-                if (className == null) {
-                    // Case is ignored
-                    continue;
-                }
-
-                fac = (SaslClientFactory) loadFactory(provs[j], className);
-                if (fac != null) {
-                    mech = fac.createSaslClient(
-                        new String[]{mechanisms[i]}, authorizationId,
-                        protocol, serverName, props, cbh);
-                    if (mech != null) {
-                        return mech;
-                    }
-                }
-            }
-        }
-
-        return null;
-    }
-
-    private static Object loadFactory(Provider p, String className)
-        throws SaslException {
-        try {
-            /*
-             * Load the implementation class with the same class loader
-             * that was used to load the provider.
-             * In order to get the class loader of a class, the
-             * caller's class loader must be the same as or an ancestor of
-             * the class loader being returned. Otherwise, the caller must
-             * have "getClassLoader" permission, or a SecurityException
-             * will be thrown.
-             */
-            ClassLoader cl = p.getClass().getClassLoader();
-            Class implClass;
-            implClass = Class.forName(className, true, cl);
-            return implClass.newInstance();
-        } catch (ClassNotFoundException e) {
-            throw new SaslException("Cannot load class " + className, e);
-        } catch (InstantiationException e) {
-            throw new SaslException("Cannot instantiate class " + className, e);
-        } catch (IllegalAccessException e) {
-            throw new SaslException("Cannot access class " + className, e);
-        } catch (SecurityException e) {
-            throw new SaslException("Cannot access class " + className, e);
-        }
-    }
-
-
-    /**
-     * Creates a <tt>SaslServer</tt> for the specified mechanism.
-     *
-     * This method uses the
-<a href="{@docRoot}/../technotes/guides/security/crypto/CryptoSpec.html#Provider">JCA Security Provider Framework</a>,
-     * described in the
-     * "Java Cryptography Architecture API Specification & Reference", for
-     * locating and selecting a <tt>SaslServer</tt> implementation.
-     *
-     * First, it
-     * obtains an ordered list of <tt>SaslServerFactory</tt> instances from
-     * the registered security providers for the "SaslServerFactory" service
-     * and the specified mechanism. It then invokes
-     * <tt>createSaslServer()</tt> on each factory instance on the list
-     * until one produces a non-null <tt>SaslServer</tt> instance. It returns
-     * the non-null <tt>SaslServer</tt> instance, or null if the search fails
-     * to produce a non-null <tt>SaslServer</tt> instance.
-     *<p>
-     * A security provider for SaslServerFactory registers with the
-     * JCA Security Provider Framework keys of the form <br>
-     * <tt>SaslServerFactory.<em>mechanism_name</em></tt>
-     * <br>
-     * and values that are class names of implementations of
-     * <tt>javax.security.sasl.SaslServerFactory</tt>.
-     *
-     * For example, a provider that contains a factory class,
-     * <tt>com.wiz.sasl.digest.ServerFactory</tt>, that supports the
-     * "DIGEST-MD5" mechanism would register the following entry with the JCA:
-     * <tt>SaslServerFactory.DIGEST-MD5  com.wiz.sasl.digest.ServerFactory</tt>
-     *<p>
-     * See the
-     * "Java Cryptography Architecture API Specification & Reference"
-     * for information about how to install and configure security
-     * service providers.
-     *
-     * @param mechanism The non-null mechanism name. It must be an
-     * IANA-registered name of a SASL mechanism. (e.g. "GSSAPI", "CRAM-MD5").
-     * @param protocol The non-null string name of the protocol for which
-     * the authentication is being performed (e.g., "ldap").
-     * @param serverName The non-null fully qualified host name of the server.
-     * @param props The possibly null set of properties used to
-     * select the SASL mechanism and to configure the authentication
-     * exchange of the selected mechanism.
-     * For example, if <tt>props</tt> contains the
-     * <code>Sasl.POLICY_NOPLAINTEXT</code> property with the value
-     * <tt>"true"</tt>, then the selected
-     * SASL mechanism must not be susceptible to simple plain passive attacks.
-     * In addition to the standard properties declared in this class,
-     * other, possibly mechanism-specific, properties can be included.
-     * Properties not relevant to the selected mechanism are ignored,
-     * including any map entries with non-String keys.
-     *
-     * @param cbh The possibly null callback handler to used by the SASL
-     * mechanisms to get further information from the application/library
-     * to complete the authentication. For example, a SASL mechanism might
-     * require the authentication ID, password and realm from the caller.
-     * The authentication ID is requested by using a <tt>NameCallback</tt>.
-     * The password is requested by using a <tt>PasswordCallback</tt>.
-     * The realm is requested by using a <tt>RealmChoiceCallback</tt> if there is a list
-     * of realms to choose from, and by using a <tt>RealmCallback</tt> if
-     * the realm must be entered.
-     *
-     *@return A possibly null <tt>SaslServer</tt> created using the parameters
-     * supplied. If null, cannot find a <tt>SaslServerFactory</tt>
-     * that will produce one.
-     *@exception SaslException If cannot create a <tt>SaslServer</tt> because
-     * of an error.
-     **/
-    public static SaslServer
-        createSaslServer(String mechanism,
-                    String protocol,
-                    String serverName,
-                    Map<String,?> props,
-                    javax.security.auth.callback.CallbackHandler cbh)
-        throws SaslException {
-
-        SaslServer mech = null;
-        SaslServerFactory fac;
-        String className;
-
-        if (mechanism == null) {
-            throw new NullPointerException("Mechanism name cannot be null");
-        } else if (mechanism.length() == 0) {
-            return null;
-        }
-
-        String mechFilter = "SaslServerFactory." + mechanism;
-        Provider[] provs = Security.getProviders(mechFilter);
-        for (int j = 0; provs != null && j < provs.length; j++) {
-            className = provs[j].getProperty(mechFilter);
-            if (className == null) {
-                throw new SaslException("Provider does not support " +
-                    mechFilter);
-            }
-            fac = (SaslServerFactory) loadFactory(provs[j], className);
-            if (fac != null) {
-                mech = fac.createSaslServer(
-                    mechanism, protocol, serverName, props, cbh);
-                if (mech != null) {
-                    return mech;
-                }
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Gets an enumeration of known factories for producing <tt>SaslClient</tt>.
-     * This method uses the same algorithm for locating factories as
-     * <tt>createSaslClient()</tt>.
-     * @return A non-null enumeration of known factories for producing
-     * <tt>SaslClient</tt>.
-     * @see #createSaslClient
-     */
-    public static Enumeration<SaslClientFactory> getSaslClientFactories() {
-        Set<Object> facs = getFactories("SaslClientFactory");
-        final Iterator<Object> iter = facs.iterator();
-        return new Enumeration<SaslClientFactory>() {
-            public boolean hasMoreElements() {
-                return iter.hasNext();
-            }
-            public SaslClientFactory nextElement() {
-                return (SaslClientFactory)iter.next();
-            }
-        };
-    }
-
-    /**
-     * Gets an enumeration of known factories for producing <tt>SaslServer</tt>.
-     * This method uses the same algorithm for locating factories as
-     * <tt>createSaslServer()</tt>.
-     * @return A non-null enumeration of known factories for producing
-     * <tt>SaslServer</tt>.
-     * @see #createSaslServer
-     */
-    public static Enumeration<SaslServerFactory> getSaslServerFactories() {
-        Set<Object> facs = getFactories("SaslServerFactory");
-        final Iterator<Object> iter = facs.iterator();
-        return new Enumeration<SaslServerFactory>() {
-            public boolean hasMoreElements() {
-                return iter.hasNext();
-            }
-            public SaslServerFactory nextElement() {
-                return (SaslServerFactory)iter.next();
-            }
-        };
-    }
-
-    private static Set<Object> getFactories(String serviceName) {
-        HashSet<Object> result = new HashSet<Object>();
-
-        if ((serviceName == null) || (serviceName.length() == 0) ||
-            (serviceName.endsWith("."))) {
-            return result;
-        }
-
-
-        Provider[] providers = Security.getProviders();
-        HashSet<String> classes = new HashSet<String>();
-        Object fac;
-
-        for (int i = 0; i < providers.length; i++) {
-            classes.clear();
-
-            // Check the keys for each provider.
-            for (Enumeration e = providers[i].keys(); e.hasMoreElements(); ) {
-                String currentKey = (String)e.nextElement();
-                if (currentKey.startsWith(serviceName)) {
-                    // We should skip the currentKey if it contains a
-                    // whitespace. The reason is: such an entry in the
-                    // provider property contains attributes for the
-                    // implementation of an algorithm. We are only interested
-                    // in entries which lead to the implementation
-                    // classes.
-                    if (currentKey.indexOf(" ") < 0) {
-                        String className = providers[i].getProperty(currentKey);
-                        if (!classes.contains(className)) {
-                            classes.add(className);
-                            try {
-                                fac = loadFactory(providers[i], className);
-                                if (fac != null) {
-                                    result.add(fac);
-                                }
-                            }catch (Exception ignore) {
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return Collections.unmodifiableSet(result);
-    }
-}
diff --git a/ojluni/src/main/java/javax/security/sasl/SaslClient.java b/ojluni/src/main/java/javax/security/sasl/SaslClient.java
deleted file mode 100755
index 010246c..0000000
--- a/ojluni/src/main/java/javax/security/sasl/SaslClient.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (c) 1999, 2003, 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.
- */
-
-package javax.security.sasl;
-
-/**
- * Performs SASL authentication as a client.
- *<p>
- * A protocol library such as one for LDAP gets an instance of this
- * class in order to perform authentication defined by a specific SASL
- * mechanism. Invoking methods on the <tt>SaslClient</tt> instance
- * process challenges and create responses according to the SASL
- * mechanism implemented by the <tt>SaslClient</tt>.
- * As the authentication proceeds, the instance
- * encapsulates the state of a SASL client's authentication exchange.
- *<p>
- * Here's an example of how an LDAP library might use a <tt>SaslClient</tt>.
- * It first gets an instance of a <tt>SaslClient</tt>:
- *<blockquote><pre>
- * SaslClient sc = Sasl.createSaslClient(mechanisms,
- *     authorizationId, protocol, serverName, props, callbackHandler);
- *</pre></blockquote>
- * It can then proceed to use the client for authentication.
- * For example, an LDAP library might use the client as follows:
- *<blockquote><pre>
- * // Get initial response and send to server
- * byte[] response = (sc.hasInitialResponse() ? sc.evaluateChallenge(new byte[0]) :
- *     null);
- * LdapResult res = ldap.sendBindRequest(dn, sc.getName(), response);
- * while (!sc.isComplete() &&
- *     (res.status == SASL_BIND_IN_PROGRESS || res.status == SUCCESS)) {
- *     response = sc.evaluateChallenge(res.getBytes());
- *     if (res.status == SUCCESS) {
- *         // we're done; don't expect to send another BIND
- *         if (response != null) {
- *             throw new SaslException(
- *                 "Protocol error: attempting to send response after completion");
- *         }
- *         break;
- *     }
- *     res = ldap.sendBindRequest(dn, sc.getName(), response);
- * }
- * if (sc.isComplete() && res.status == SUCCESS) {
- *    String qop = (String) sc.getNegotiatedProperty(Sasl.QOP);
- *    if (qop != null
- *        && (qop.equalsIgnoreCase("auth-int")
- *            || qop.equalsIgnoreCase("auth-conf"))) {
- *
- *      // Use SaslClient.wrap() and SaslClient.unwrap() for future
- *      // communication with server
- *      ldap.in = new SecureInputStream(sc, ldap.in);
- *      ldap.out = new SecureOutputStream(sc, ldap.out);
- *    }
- * }
- *</pre></blockquote>
- *
- * If the mechanism has an initial response, the library invokes
- * <tt>evaluateChallenge()</tt> with an empty
- * challenge and to get initial response.
- * Protocols such as IMAP4, which do not include an initial response with
- * their first authentication command to the server, initiates the
- * authentication without first calling <tt>hasInitialResponse()</tt>
- * or <tt>evaluateChallenge()</tt>.
- * When the server responds to the command, it sends an initial challenge.
- * For a SASL mechanism in which the client sends data first, the server should
- * have issued a challenge with no data. This will then result in a call
- * (on the client) to <tt>evaluateChallenge()</tt> with an empty challenge.
- *
- * @since 1.5
- *
- * @see Sasl
- * @see SaslClientFactory
- *
- * @author Rosanna Lee
- * @author Rob Weltman
- */
-public abstract interface SaslClient {
-
-    /**
-     * Returns the IANA-registered mechanism name of this SASL client.
-     * (e.g. "CRAM-MD5", "GSSAPI").
-     * @return A non-null string representing the IANA-registered mechanism name.
-     */
-    public abstract String getMechanismName();
-
-    /**
-     * Determines whether this mechanism has an optional initial response.
-     * If true, caller should call <tt>evaluateChallenge()</tt> with an
-     * empty array to get the initial response.
-     *
-     * @return true if this mechanism has an initial response.
-     */
-    public abstract boolean hasInitialResponse();
-
-    /**
-     * Evaluates the challenge data and generates a response.
-     * If a challenge is received from the server during the authentication
-     * process, this method is called to prepare an appropriate next
-     * response to submit to the server.
-     *
-     * @param challenge The non-null challenge sent from the server.
-     * The challenge array may have zero length.
-     *
-     * @return The possibly null reponse to send to the server.
-     * It is null if the challenge accompanied a "SUCCESS" status and the challenge
-     * only contains data for the client to update its state and no response
-     * needs to be sent to the server. The response is a zero-length byte
-     * array if the client is to send a response with no data.
-     * @exception SaslException If an error occurred while processing
-     * the challenge or generating a response.
-     */
-    public abstract byte[] evaluateChallenge(byte[] challenge)
-        throws SaslException;
-
-    /**
-      * Determines whether the authentication exchange has completed.
-      * This method may be called at any time, but typically, it
-      * will not be called until the caller has received indication
-      * from the server
-      * (in a protocol-specific manner) that the exchange has completed.
-      *
-      * @return true if the authentication exchange has completed; false otherwise.
-      */
-    public abstract boolean isComplete();
-
-    /**
-     * Unwraps a byte array received from the server.
-     * This method can be called only after the authentication exchange has
-     * completed (i.e., when <tt>isComplete()</tt> returns true) and only if
-     * the authentication exchange has negotiated integrity and/or privacy
-     * as the quality of protection; otherwise, an
-     * <tt>IllegalStateException</tt> is thrown.
-     *<p>
-     * <tt>incoming</tt> is the contents of the SASL buffer as defined in RFC 2222
-     * without the leading four octet field that represents the length.
-     * <tt>offset</tt> and <tt>len</tt> specify the portion of <tt>incoming</tt>
-     * to use.
-     *
-     * @param incoming A non-null byte array containing the encoded bytes
-     *                from the server.
-     * @param offset The starting position at <tt>incoming</tt> of the bytes to use.
-     * @param len The number of bytes from <tt>incoming</tt> to use.
-     * @return A non-null byte array containing the decoded bytes.
-     * @exception SaslException if <tt>incoming</tt> cannot be successfully
-     * unwrapped.
-     * @exception IllegalStateException if the authentication exchange has
-     * not completed, or  if the negotiated quality of protection
-     * has neither integrity nor privacy.
-     */
-    public abstract byte[] unwrap(byte[] incoming, int offset, int len)
-        throws SaslException;
-
-    /**
-     * Wraps a byte array to be sent to the server.
-     * This method can be called only after the authentication exchange has
-     * completed (i.e., when <tt>isComplete()</tt> returns true) and only if
-     * the authentication exchange has negotiated integrity and/or privacy
-     * as the quality of protection; otherwise, an
-     * <tt>IllegalStateException</tt> is thrown.
-     *<p>
-     * The result of this method will make up the contents of the SASL buffer
-     * as defined in RFC 2222 without the leading four octet field that
-     * represents the length.
-     * <tt>offset</tt> and <tt>len</tt> specify the portion of <tt>outgoing</tt>
-     * to use.
-     *
-     * @param outgoing A non-null byte array containing the bytes to encode.
-     * @param offset The starting position at <tt>outgoing</tt> of the bytes to use.
-     * @param len The number of bytes from <tt>outgoing</tt> to use.
-     * @return A non-null byte array containing the encoded bytes.
-     * @exception SaslException if <tt>outgoing</tt> cannot be successfully
-     * wrapped.
-     * @exception IllegalStateException if the authentication exchange has
-     * not completed, or if the negotiated quality of protection
-     * has neither integrity nor privacy.
-     */
-    public abstract byte[] wrap(byte[] outgoing, int offset, int len)
-        throws SaslException;
-
-    /**
-     * Retrieves the negotiated property.
-     * This method can be called only after the authentication exchange has
-     * completed (i.e., when <tt>isComplete()</tt> returns true); otherwise, an
-     * <tt>IllegalStateException</tt> is thrown.
-     *
-     * @param propName The non-null property name.
-     * @return The value of the negotiated property. If null, the property was
-     * not negotiated or is not applicable to this mechanism.
-     * @exception IllegalStateException if this authentication exchange
-     * has not completed
-     */
-
-    public abstract Object getNegotiatedProperty(String propName);
-
-     /**
-      * Disposes of any system resources or security-sensitive information
-      * the SaslClient might be using. Invoking this method invalidates
-      * the SaslClient instance. This method is idempotent.
-      * @throws SaslException If a problem was encountered while disposing
-      * the resources.
-      */
-    public abstract void dispose() throws SaslException;
-}
diff --git a/ojluni/src/main/java/javax/security/sasl/SaslClientFactory.java b/ojluni/src/main/java/javax/security/sasl/SaslClientFactory.java
deleted file mode 100755
index e32b34c..0000000
--- a/ojluni/src/main/java/javax/security/sasl/SaslClientFactory.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 1999, 2006, 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.
- */
-
-package javax.security.sasl;
-
-import java.util.Map;
-import javax.security.auth.callback.CallbackHandler;
-
-/**
- * An interface for creating instances of <tt>SaslClient</tt>.
- * A class that implements this interface
- * must be thread-safe and handle multiple simultaneous
- * requests. It must also have a public constructor that accepts no
- * argument.
- *<p>
- * This interface is not normally accessed directly by a client, which will use the
- * <tt>Sasl</tt> static methods
- * instead. However, a particular environment may provide and install a
- * new or different <tt>SaslClientFactory</tt>.
- *
- * @since 1.5
- *
- * @see SaslClient
- * @see Sasl
- *
- * @author Rosanna Lee
- * @author Rob Weltman
- */
-public abstract interface SaslClientFactory {
-    /**
-     * Creates a SaslClient using the parameters supplied.
-     *
-     * @param mechanisms The non-null list of mechanism names to try. Each is the
-     * IANA-registered name of a SASL mechanism. (e.g. "GSSAPI", "CRAM-MD5").
-     * @param authorizationId The possibly null protocol-dependent
-     * identification to be used for authorization.
-     * If null or empty, the server derives an authorization
-     * ID from the client's authentication credentials.
-     * When the SASL authentication completes successfully,
-     * the specified entity is granted access.
-     * @param protocol The non-null string name of the protocol for which
-     * the authentication is being performed (e.g., "ldap").
-     * @param serverName The non-null fully qualified host name
-     * of the server to authenticate to.
-     * @param props The possibly null set of properties used to select the SASL
-     * mechanism and to configure the authentication exchange of the selected
-     * mechanism. See the <tt>Sasl</tt> class for a list of standard properties.
-     * Other, possibly mechanism-specific, properties can be included.
-     * Properties not relevant to the selected mechanism are ignored,
-     * including any map entries with non-String keys.
-     *
-     * @param cbh The possibly null callback handler to used by the SASL
-     * mechanisms to get further information from the application/library
-     * to complete the authentication. For example, a SASL mechanism might
-     * require the authentication ID, password and realm from the caller.
-     * The authentication ID is requested by using a <tt>NameCallback</tt>.
-     * The password is requested by using a <tt>PasswordCallback</tt>.
-     * The realm is requested by using a <tt>RealmChoiceCallback</tt> if there is a list
-     * of realms to choose from, and by using a <tt>RealmCallback</tt> if
-     * the realm must be entered.
-     *
-     *@return A possibly null <tt>SaslClient</tt> created using the parameters
-     * supplied. If null, this factory cannot produce a <tt>SaslClient</tt>
-     * using the parameters supplied.
-     *@exception SaslException If cannot create a <tt>SaslClient</tt> because
-     * of an error.
-     */
-    public abstract SaslClient createSaslClient(
-        String[] mechanisms,
-        String authorizationId,
-        String protocol,
-        String serverName,
-        Map<String,?> props,
-        CallbackHandler cbh) throws SaslException;
-
-    /**
-     * Returns an array of names of mechanisms that match the specified
-     * mechanism selection policies.
-     * @param props The possibly null set of properties used to specify the
-     * security policy of the SASL mechanisms. For example, if <tt>props</tt>
-     * contains the <tt>Sasl.POLICY_NOPLAINTEXT</tt> property with the value
-     * <tt>"true"</tt>, then the factory must not return any SASL mechanisms
-     * that are susceptible to simple plain passive attacks.
-     * See the <tt>Sasl</tt> class for a complete list of policy properties.
-     * Non-policy related properties, if present in <tt>props</tt>, are ignored,
-     * including any map entries with non-String keys.
-     * @return A non-null array containing a IANA-registered SASL mechanism names.
-     */
-    public abstract String[] getMechanismNames(Map<String,?> props);
-}
diff --git a/ojluni/src/main/java/javax/security/sasl/SaslException.java b/ojluni/src/main/java/javax/security/sasl/SaslException.java
deleted file mode 100755
index ee82c6e..0000000
--- a/ojluni/src/main/java/javax/security/sasl/SaslException.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 1999, 2003, 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.
- */
-
-package javax.security.sasl;
-
-import java.io.IOException;
-
-/**
- * This class represents an error that has occurred when using SASL.
- *
- * @since 1.5
- *
- * @author Rosanna Lee
- * @author Rob Weltman
- */
-
-public class SaslException extends IOException {
-    /**
-     * The possibly null root cause exception.
-     * @serial
-     */
-    // Required for serialization interoperability with JSR 28
-    private Throwable _exception;
-
-    /**
-     * Constructs a new instance of <tt>SaslException</tt>.
-     * The root exception and the detailed message are null.
-     */
-    public SaslException () {
-        super();
-    }
-
-    /**
-     * Constructs a new instance of <tt>SaslException</tt> with a detailed message.
-     * The root exception is null.
-     * @param detail A possibly null string containing details of the exception.
-     *
-     * @see java.lang.Throwable#getMessage
-     */
-    public SaslException (String detail) {
-        super(detail);
-    }
-
-    /**
-     * Constructs a new instance of <tt>SaslException</tt> with a detailed message
-     * and a root exception.
-     * For example, a SaslException might result from a problem with
-     * the callback handler, which might throw a NoSuchCallbackException if
-     * it does not support the requested callback, or throw an IOException
-     * if it had problems obtaining data for the callback. The
-     * SaslException's root exception would be then be the exception thrown
-     * by the callback handler.
-     *
-     * @param detail A possibly null string containing details of the exception.
-     * @param ex A possibly null root exception that caused this exception.
-     *
-     * @see java.lang.Throwable#getMessage
-     * @see #getCause
-     */
-    public SaslException (String detail, Throwable ex) {
-        super(detail);
-        if (ex != null) {
-            initCause(ex);
-        }
-    }
-
-    /*
-     * Override Throwable.getCause() to ensure deserialized object from
-     * JSR 28 would return same value for getCause() (i.e., _exception).
-     */
-    public Throwable getCause() {
-        return _exception;
-    }
-
-    /*
-     * Override Throwable.initCause() to match getCause() by updating
-     * _exception as well.
-     */
-    public Throwable initCause(Throwable cause) {
-        super.initCause(cause);
-        _exception = cause;
-        return this;
-    }
-
-    /**
-     * Returns the string representation of this exception.
-     * The string representation contains
-     * this exception's class name, its detailed messsage, and if
-     * it has a root exception, the string representation of the root
-     * exception. This string representation
-     * is meant for debugging and not meant to be interpreted
-     * programmatically.
-     * @return The non-null string representation of this exception.
-     * @see java.lang.Throwable#getMessage
-     */
-    // Override Throwable.toString() to conform to JSR 28
-    public String toString() {
-        String answer = super.toString();
-        if (_exception != null && _exception != this) {
-            answer += " [Caused by " + _exception.toString() + "]";
-        }
-        return answer;
-    }
-
-    /** Use serialVersionUID from JSR 28 RI for interoperability */
-    private static final long serialVersionUID = 4579784287983423626L;
-}
diff --git a/ojluni/src/main/java/javax/security/sasl/SaslServer.java b/ojluni/src/main/java/javax/security/sasl/SaslServer.java
deleted file mode 100755
index 54ba684..0000000
--- a/ojluni/src/main/java/javax/security/sasl/SaslServer.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Copyright (c) 2000, 2004, 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.
- */
-
-package javax.security.sasl;
-
-/**
- * Performs SASL authentication as a server.
- *<p>
- * A server such an LDAP server gets an instance of this
- * class in order to perform authentication defined by a specific SASL
- * mechanism. Invoking methods on the <tt>SaslServer</tt> instance
- * generates challenges according to the SASL
- * mechanism implemented by the <tt>SaslServer</tt>.
- * As the authentication proceeds, the instance
- * encapsulates the state of a SASL server's authentication exchange.
- *<p>
- * Here's an example of how an LDAP server might use a <tt>SaslServer</tt>.
- * It first gets an instance of a <tt>SaslServer</tt> for the SASL mechanism
- * requested by the client:
- *<blockquote><pre>
- * SaslServer ss = Sasl.createSaslServer(mechanism,
- *     "ldap", myFQDN, props, callbackHandler);
- *</pre></blockquote>
- * It can then proceed to use the server for authentication.
- * For example, suppose the LDAP server received an LDAP BIND request
- * containing the name of the SASL mechanism and an (optional) initial
- * response. It then might use the server as follows:
- *<blockquote><pre>
- * while (!ss.isComplete()) {
- *     try {
- *         byte[] challenge = ss.evaluateResponse(response);
- *         if (ss.isComplete()) {
- *             status = ldap.sendBindResponse(mechanism, challenge, SUCCESS);
- *         } else {
- *             status = ldap.sendBindResponse(mechanism, challenge,
-                   SASL_BIND_IN_PROGRESS);
- *             response = ldap.readBindRequest();
- *         }
- *     } catch (SaslException e) {
- *          status = ldap.sendErrorResponse(e);
- *          break;
- *     }
- * }
- * if (ss.isComplete() && status == SUCCESS) {
- *    String qop = (String) sc.getNegotiatedProperty(Sasl.QOP);
- *    if (qop != null
- *        && (qop.equalsIgnoreCase("auth-int")
- *            || qop.equalsIgnoreCase("auth-conf"))) {
- *
- *      // Use SaslServer.wrap() and SaslServer.unwrap() for future
- *      // communication with client
- *      ldap.in = new SecureInputStream(ss, ldap.in);
- *      ldap.out = new SecureOutputStream(ss, ldap.out);
- *    }
- * }
- *</pre></blockquote>
- *
- * @since 1.5
- *
- * @see Sasl
- * @see SaslServerFactory
- *
- * @author Rosanna Lee
- * @author Rob Weltman
- */
-public abstract interface SaslServer {
-
-    /**
-     * Returns the IANA-registered mechanism name of this SASL server.
-     * (e.g. "CRAM-MD5", "GSSAPI").
-     * @return A non-null string representing the IANA-registered mechanism name.
-     */
-    public abstract String getMechanismName();
-
-    /**
-     * Evaluates the response data and generates a challenge.
-     *
-     * If a response is received from the client during the authentication
-     * process, this method is called to prepare an appropriate next
-     * challenge to submit to the client. The challenge is null if the
-     * authentication has succeeded and no more challenge data is to be sent
-     * to the client. It is non-null if the authentication must be continued
-     * by sending a challenge to the client, or if the authentication has
-     * succeeded but challenge data needs to be processed by the client.
-     * <tt>isComplete()</tt> should be called
-     * after each call to <tt>evaluateResponse()</tt>,to determine if any further
-     * response is needed from the client.
-     *
-     * @param response The non-null (but possibly empty) response sent
-     * by the client.
-     *
-     * @return The possibly null challenge to send to the client.
-     * It is null if the authentication has succeeded and there is
-     * no more challenge data to be sent to the client.
-     * @exception SaslException If an error occurred while processing
-     * the response or generating a challenge.
-     */
-    public abstract byte[] evaluateResponse(byte[] response)
-        throws SaslException;
-
-    /**
-      * Determines whether the authentication exchange has completed.
-      * This method is typically called after each invocation of
-      * <tt>evaluateResponse()</tt> to determine whether the
-      * authentication has completed successfully or should be continued.
-      * @return true if the authentication exchange has completed; false otherwise.
-      */
-    public abstract boolean isComplete();
-
-    /**
-     * Reports the authorization ID in effect for the client of this
-     * session.
-     * This method can only be called if isComplete() returns true.
-     * @return The authorization ID of the client.
-     * @exception IllegalStateException if this authentication session has not completed
-     */
-    public String getAuthorizationID();
-
-    /**
-     * Unwraps a byte array received from the client.
-     * This method can be called only after the authentication exchange has
-     * completed (i.e., when <tt>isComplete()</tt> returns true) and only if
-     * the authentication exchange has negotiated integrity and/or privacy
-     * as the quality of protection; otherwise,
-     * an <tt>IllegalStateException</tt> is thrown.
-     *<p>
-     * <tt>incoming</tt> is the contents of the SASL buffer as defined in RFC 2222
-     * without the leading four octet field that represents the length.
-     * <tt>offset</tt> and <tt>len</tt> specify the portion of <tt>incoming</tt>
-     * to use.
-     *
-     * @param incoming A non-null byte array containing the encoded bytes
-     *                from the client.
-     * @param offset The starting position at <tt>incoming</tt> of the bytes to use.
-     * @param len The number of bytes from <tt>incoming</tt> to use.
-     * @return A non-null byte array containing the decoded bytes.
-     * @exception SaslException if <tt>incoming</tt> cannot be successfully
-     * unwrapped.
-     * @exception IllegalStateException if the authentication exchange has
-     * not completed, or if the negotiated quality of protection
-     * has neither integrity nor privacy
-     */
-    public abstract byte[] unwrap(byte[] incoming, int offset, int len)
-        throws SaslException;
-
-    /**
-     * Wraps a byte array to be sent to the client.
-     * This method can be called only after the authentication exchange has
-     * completed (i.e., when <tt>isComplete()</tt> returns true) and only if
-     * the authentication exchange has negotiated integrity and/or privacy
-     * as the quality of protection; otherwise, a <tt>SaslException</tt> is thrown.
-     *<p>
-     * The result of this method
-     * will make up the contents of the SASL buffer as defined in RFC 2222
-     * without the leading four octet field that represents the length.
-     * <tt>offset</tt> and <tt>len</tt> specify the portion of <tt>outgoing</tt>
-     * to use.
-     *
-     * @param outgoing A non-null byte array containing the bytes to encode.
-     * @param offset The starting position at <tt>outgoing</tt> of the bytes to use.
-     * @param len The number of bytes from <tt>outgoing</tt> to use.
-     * @return A non-null byte array containing the encoded bytes.
-     * @exception SaslException if <tt>outgoing</tt> cannot be successfully
-     * wrapped.
-     * @exception IllegalStateException if the authentication exchange has
-     * not completed, or if the negotiated quality of protection has
-     * neither integrity nor privacy.
-     */
-    public abstract byte[] wrap(byte[] outgoing, int offset, int len)
-        throws SaslException;
-
-    /**
-     * Retrieves the negotiated property.
-     * This method can be called only after the authentication exchange has
-     * completed (i.e., when <tt>isComplete()</tt> returns true); otherwise, an
-     * <tt>IllegalStateException</tt> is thrown.
-     *
-     * @param propName the property
-     * @return The value of the negotiated property. If null, the property was
-     * not negotiated or is not applicable to this mechanism.
-     * @exception IllegalStateException if this authentication exchange has not completed
-     */
-
-    public abstract Object getNegotiatedProperty(String propName);
-
-     /**
-      * Disposes of any system resources or security-sensitive information
-      * the SaslServer might be using. Invoking this method invalidates
-      * the SaslServer instance. This method is idempotent.
-      * @throws SaslException If a problem was encountered while disposing
-      * the resources.
-      */
-    public abstract void dispose() throws SaslException;
-}
diff --git a/ojluni/src/main/java/javax/security/sasl/SaslServerFactory.java b/ojluni/src/main/java/javax/security/sasl/SaslServerFactory.java
deleted file mode 100755
index 525b5be..0000000
--- a/ojluni/src/main/java/javax/security/sasl/SaslServerFactory.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.
- */
-
-package javax.security.sasl;
-
-import java.util.Map;
-import javax.security.auth.callback.CallbackHandler;
-
-/**
- * An interface for creating instances of <tt>SaslServer</tt>.
- * A class that implements this interface
- * must be thread-safe and handle multiple simultaneous
- * requests. It must also have a public constructor that accepts no
- * argument.
- *<p>
- * This interface is not normally accessed directly by a server, which will use the
- * <tt>Sasl</tt> static methods
- * instead. However, a particular environment may provide and install a
- * new or different <tt>SaslServerFactory</tt>.
- *
- * @since 1.5
- *
- * @see SaslServer
- * @see Sasl
- *
- * @author Rosanna Lee
- * @author Rob Weltman
- */
-public abstract interface SaslServerFactory {
-    /**
-     * Creates a <tt>SaslServer</tt> using the parameters supplied.
-     * It returns null
-     * if no <tt>SaslServer</tt> can be created using the parameters supplied.
-     * Throws <tt>SaslException</tt> if it cannot create a <tt>SaslServer</tt>
-     * because of an error.
-     *
-     * @param mechanism The non-null
-     * IANA-registered name of a SASL mechanism. (e.g. "GSSAPI", "CRAM-MD5").
-     * @param protocol The non-null string name of the protocol for which
-     * the authentication is being performed (e.g., "ldap").
-     * @param serverName The non-null fully qualified host name of the server
-     * to authenticate to.
-     * @param props The possibly null set of properties used to select the SASL
-     * mechanism and to configure the authentication exchange of the selected
-     * mechanism. See the <tt>Sasl</tt> class for a list of standard properties.
-     * Other, possibly mechanism-specific, properties can be included.
-     * Properties not relevant to the selected mechanism are ignored,
-     * including any map entries with non-String keys.
-     *
-     * @param cbh The possibly null callback handler to used by the SASL
-     * mechanisms to get further information from the application/library
-     * to complete the authentication. For example, a SASL mechanism might
-     * require the authentication ID, password and realm from the caller.
-     * The authentication ID is requested by using a <tt>NameCallback</tt>.
-     * The password is requested by using a <tt>PasswordCallback</tt>.
-     * The realm is requested by using a <tt>RealmChoiceCallback</tt> if there is a list
-     * of realms to choose from, and by using a <tt>RealmCallback</tt> if
-     * the realm must be entered.
-     *
-     *@return A possibly null <tt>SaslServer</tt> created using the parameters
-     * supplied. If null, this factory cannot produce a <tt>SaslServer</tt>
-     * using the parameters supplied.
-     *@exception SaslException If cannot create a <tt>SaslServer</tt> because
-     * of an error.
-     */
-    public abstract SaslServer createSaslServer(
-        String mechanism,
-        String protocol,
-        String serverName,
-        Map<String,?> props,
-        CallbackHandler cbh) throws SaslException;
-
-    /**
-     * Returns an array of names of mechanisms that match the specified
-     * mechanism selection policies.
-     * @param props The possibly null set of properties used to specify the
-     * security policy of the SASL mechanisms. For example, if <tt>props</tt>
-     * contains the <tt>Sasl.POLICY_NOPLAINTEXT</tt> property with the value
-     * <tt>"true"</tt>, then the factory must not return any SASL mechanisms
-     * that are susceptible to simple plain passive attacks.
-     * See the <tt>Sasl</tt> class for a complete list of policy properties.
-     * Non-policy related properties, if present in <tt>props</tt>, are ignored,
-     * including any map entries with non-String keys.
-     * @return A non-null array containing a IANA-registered SASL mechanism names.
-     */
-    public abstract String[] getMechanismNames(Map<String,?> props);
-}
diff --git a/ojluni/src/main/java/javax/sql/XAConnection.java b/ojluni/src/main/java/javax/sql/XAConnection.java
deleted file mode 100755
index 394e269..0000000
--- a/ojluni/src/main/java/javax/sql/XAConnection.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.
- */
-
-package javax.sql;
-
-import java.sql.*;
-
-
-/**
- * An object that provides support for distributed
- * transactions.  An <code>XAConnection</code> object  may be enlisted
- * in a distributed transaction by means of an <code>XAResource</code> object.
- * A transaction manager, usually part of a middle tier server, manages an
- * <code>XAConnection</code> object through the <code>XAResource</code> object.
- * <P>
- * An application programmer does not use this interface directly; rather,
- * it is used by a transaction manager working in the middle tier server.
- *
- * @since 1.4
- */
-
-public interface XAConnection extends PooledConnection {
-
-
-  /**
-   * Retrieves an <code>XAResource</code> object that
-   * the transaction manager will use
-   * to manage this <code>XAConnection</code> object's participation in a
-   * distributed transaction.
-   *
-   * @return the <code>XAResource</code> object
-   * @exception SQLException if a database access error occurs
-   * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-   * this method
-   * @since 1.4
-   */
-  javax.transaction.xa.XAResource getXAResource() throws SQLException;
-
- }
diff --git a/ojluni/src/main/java/javax/sql/XADataSource.java b/ojluni/src/main/java/javax/sql/XADataSource.java
deleted file mode 100755
index 1d4c300..0000000
--- a/ojluni/src/main/java/javax/sql/XADataSource.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.
- */
-
-package javax.sql;
-
-import java.sql.*;
-
-/**
- * A factory for <code>XAConnection</code> objects that is used internally.
- * An object that implements the <code>XADataSource</code> interface is
- * typically registered with a naming service that uses the
- * Java Naming and Directory Interface<sup><font size=-3>TM</font></sup>
- * (JNDI).
- *
- * @since 1.4
- */
-
-public interface XADataSource extends CommonDataSource {
-
-  /**
-   * Attempts to establish a physical database connection that can be
-   * used in a distributed transaction.
-   *
-   * @return  an <code>XAConnection</code> object, which represents a
-   *          physical connection to a data source, that can be used in
-   *          a distributed transaction
-   * @exception SQLException if a database access error occurs
-   * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-   * this method
-   * @since 1.4
-   */
-  XAConnection getXAConnection() throws SQLException;
-
-  /**
-   * Attempts to establish a physical database connection, using the given
-   * user name and password. The connection that is returned is one that
-   * can be used in a distributed transaction.
-   *
-   * @param user the database user on whose behalf the connection is being made
-   * @param password the user's password
-   * @return  an <code>XAConnection</code> object, which represents a
-   *          physical connection to a data source, that can be used in
-   *          a distributed transaction
-   * @exception SQLException if a database access error occurs
-   * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-   * this method
-   * @since 1.4
-   */
-  XAConnection getXAConnection(String user, String password)
-    throws SQLException;
- }
diff --git a/ojluni/src/main/java/javax/sql/rowset/BaseRowSet.java b/ojluni/src/main/java/javax/sql/rowset/BaseRowSet.java
deleted file mode 100755
index cf0bbec..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/BaseRowSet.java
+++ /dev/null
@@ -1,4512 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-package javax.sql.rowset;
-
-import java.sql.*;
-import javax.sql.*;
-import java.util.*;
-import java.io.*;
-import java.math.*;
-import java.io.Serializable;
-
-import javax.sql.rowset.serial.*;
-
-/**
- * An abstract class providing a <code>RowSet</code> object with its basic functionality.
- * The basic functions include having properties and sending event notifications,
- * which all JavaBeans<sup><font size=-2>TM</font></sup> components must implement.
- * <P>
- * <h3>1.0 Overview</h3>
- * The <code>BaseRowSet</code> class provides the core functionality
- * for all <code>RowSet</code> implementations,
- * and all standard implementations <b>may</b> use this class in combination with
- * one or more <code>RowSet</code> interfaces in order to provide a standard
- * vendor-specific implementation.  To clarify, all implementations must implement
- * at least one of the <code>RowSet</code> interfaces (<code>JdbcRowSet</code>,
- * <code>CachedRowSet</code>, <code>JoinRowSet</code>, <code>FilteredRowSet</code>,
- * or <code>WebRowSet</code>). This means that any implementation that extends
- * the <code>BaseRowSet</code> class must also implement one of the <code>RowSet</code>
- * interfaces.
- * <p>
- * The <code>BaseRowSet</code> class provides the following:
- * <p>
- * <UL>
- * <LI><b>Properties</b>
- *     <ul>
- *     <li>Fields for storing current properties
- *     <li>Methods for getting and setting properties
- *     </ul>
- *  <p>
- * <LI><b>Event notification</b>
- * <P>
- * <LI><b>A complete set of setter methods</b> for setting the parameters in a
- *      <code>RowSet</code> object's command
- *  <p>
- * <LI> <b>Streams</b>
- *  <ul>
- *  <li>Fields for storing stream instances
- *  <li>Constants for indicating the type of a stream
- *  </ul>
- *  <p>
- * </UL>
- *
- * <h3>2.0 Setting Properties</h3>
- * All rowsets maintain a set of properties, which will usually be set using
- * a tool.  The number and kinds of properties a rowset has will vary,
- * depending on what the <code>RowSet</code> implementation does and how it gets
- * its data.  For example,
- * rowsets that get their data from a <code>ResultSet</code> object need to
- * set the properties that are required for making a database connection.
- * If a <code>RowSet</code> object uses the <code>DriverManager</code> facility to make a
- * connection, it needs to set a property for the JDBC URL that identifies the
- * appropriate driver, and it needs to set the properties that give the
- * user name and password.
- * If, on the other hand, the rowset uses a <code>DataSource</code> object
- * to make the connection, which is the preferred method, it does not need to
- * set the property for the JDBC URL.  Instead, it needs to set the property
- * for the logical name of the data source along with the properties for
- * the user name and password.
- * <P>
- * NOTE:  In order to use a <code>DataSource</code> object for making a
- * connection, the <code>DataSource</code> object must have been registered
- * with a naming service that uses the Java Naming and Directory
- * Interface<sup><font size=-2>TM</font></sup> (JNDI) API.  This registration
- * is usually done by a person acting in the capacity of a system administrator.
- * <P>
- * <h3>3.0 Setting the Command and Its Parameters</h3>
- * When a rowset gets its data from a relational database, it executes a command (a query)
- * that produces a <code>ResultSet</code> object.  This query is the command that is set
- * for the <code>RowSet</code> object's command property.  The rowset populates itself with data by reading the
- * data from the <code>ResultSet</code> object into itself. If the query
- * contains placeholders for values to be set, the <code>BaseRowSet</code> setter methods
- * are used to set these values. All setter methods allow these values to be set
- * to <code>null</code> if required.
- * <P>
- * The following code fragment illustrates how the
- * <code>CachedRowSet</code><sup><font size=-2>TM</font></sup>
- * object <code>crs</code> might have its command property set.  Note that if a
- * tool is used to set properties, this is the code that the tool would use.
- * <PRE>
- *    crs.setCommand("SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS" +
- *                   "WHERE CREDIT_LIMIT > ? AND REGION = ?");
- * </PRE>
- * <P>
- * In this example, the values for <code>CREDIT_LIMIT</code> and
- * <code>REGION</code> are placeholder parameters, which are indicated with a
- * question mark (?).  The first question mark is placeholder parameter number
- * <code>1</code>, the second question mark is placeholder parameter number
- * <code>2</code>, and so on.  Any placeholder parameters must be set with
- * values before the query can be executed. To set these
- * placeholder parameters, the <code>BaseRowSet</code> class provides a set of setter
- * methods, similar to those provided by the <code>PreparedStatement</code>
- * interface, for setting values of each data type.  A <code>RowSet</code> object stores the
- * parameter values internally, and its <code>execute</code> method uses them internally
- * to set values for the placeholder parameters
- * before it sends the command to the DBMS to be executed.
- * <P>
- * The following code fragment demonstrates
- * setting the two parameters in the query from the previous example.
- * <PRE>
- *    crs.setInt(1, 5000);
- *    crs.setString(2, "West");
- * </PRE>
- * If the <code>execute</code> method is called at this point, the query
- * sent to the DBMS will be:
- * <PRE>
- *    "SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS" +
- *                   "WHERE CREDIT_LIMIT > 5000 AND REGION = 'West'"
- * </PRE>
- * NOTE: Setting <code>Array</code>, <code>Clob</code>, <code>Blob</code> and
- * <code>Ref</code> objects as a command parameter, stores these values as
- * <code>SerialArray</code>, <code>SerialClob</code>, <code>SerialBlob</code>
- * and <code>SerialRef</code> objects respectively.
- *
- * <h3>4.0 Handling of Parameters Behind the Scenes</h3>
- *
- * NOTE: The <code>BaseRowSet</code> class provides two kinds of setter methods,
- * those that set properties and those that set placeholder parameters. The setter
- * methods discussed in this section are those that set placeholder parameters.
- * <P>
- * The placeholder parameters set with the <code>BaseRowSet</code> setter methods
- * are stored as objects in an internal <code>Hashtable</code> object.
- * Primitives are stored as their <code>Object</code> type. For example, <code>byte</code>
- * is stored as <code>Byte</code> object, and <code>int</code> is stored as
- * an <code>Integer</code> object.
- * When the method <code>execute</code> is called, the values in the
- * <code>Hashtable</code> object are substituted for the appropriate placeholder
- * parameters in the command.
- * <P)>
- * A call to the method <code>getParams</code> returns the values stored in the
- * <code>Hashtable</code> object as an array of <code>Object</code> instances.
- * An element in this array may be a simple <code>Object</code> instance or an
- * array (which is a type of <code>Object</code>). The particular setter method used
- * determines whether an element in this array is an <code>Object</code> or an array.
- * <P>
- * The majority of methods for setting placeholder parameters take two parameters,
- *  with the first parameter
- * indicating which placeholder parameter is to be set, and the second parameter
- * giving the value to be set.  Methods such as <code>setInt</code>,
- * <code>setString</code>, <code>setBoolean</code>, and <code>setLong</code> fall into
- * this category.  After these methods have been called, a call to the method
- * <code>getParams</code> will return an array with the values that have been set. Each
- * element in the array is an <code>Object</code> instance representing the
- * values that have been set. The order of these values in the array is determined by the
- * <code>int</code> (the first parameter) passed to the setter method. The values in the
- * array are the values (the second parameter) passed to the setter method.
- * In other words, the first element in the array is the value
- * to be set for the first placeholder parameter in the <code>RowSet</code> object's
- * command. The second element is the value to
- * be set for the second placeholder parameter, and so on.
- * <P>
- * Several setter methods send the driver and DBMS information beyond the value to be set.
- * When the method <code>getParams</code> is called after one of these setter methods has
- * been used, the elements in the array will themselves be arrays to accommodate the
- * additional information. In this category, the method <code>setNull</code> is a special case
- * because one version takes only
- * two parameters (<code>setNull(int parameterIndex, int SqlType)</code>). Nevertheless,
- * it requires
- * an array to contain the information that will be passed to the driver and DBMS.  The first
- * element in this array is the value to be set, which is <code>null</code>, and the
- * second element is the <code>int</code> supplied for <i>sqlType</i>, which
- * indicates the type of SQL value that is being set to <code>null</code>. This information
- * is needed by some DBMSs and is therefore required in order to ensure that applications
- * are portable.
- * The other version is intended to be used when the value to be set to <code>null</code>
- * is a user-defined type. It takes three parameters
- * (<code>setNull(int parameterIndex, int sqlType, String typeName)</code>) and also
- * requires an array to contain the information to be passed to the driver and DBMS.
- * The first two elements in this array are the same as for the first version of
- * <code>setNull</code>.  The third element, <i>typeName</i>, gives the SQL name of
- * the user-defined type. As is true with the other setter methods, the number of the
- * placeholder parameter to be set is indicated by an element's position in the array
- * returned by <code>getParams</code>.  So, for example, if the parameter
- * supplied to <code>setNull</code> is <code>2</code>, the second element in the array
- * returned by <code>getParams</code> will be an array of two or three elements.
- * <P>
- * Some methods, such as <code>setObject</code> and <code>setDate</code> have versions
- * that take more than two parameters, with the extra parameters giving information
- * to the driver or the DBMS. For example, the methods <code>setDate</code>,
- * <code>setTime</code>, and <code>setTimestamp</code> can take a <code>Calendar</code>
- * object as their third parameter.  If the DBMS does not store time zone information,
- * the drivern uses the <code>Calendar</code> object to construct the <code>Date</code>,
- * <code>Time</code>, or <code>Timestamp</code> object being set. As is true with other
- * methods that provide additional information, the element in the array returned
- * by <code>getParams</code> is an array instead of a simple <code>Object</code> instance.
- * <P>
- * The methods <code>setAsciiStream</code>, <code>setBinaryStream</code>,
- * <code>setCharacterStream</code>, and <code>setUnicodeStream</code> (which is
- * deprecated, so applications should use <code>getCharacterStream</code> instead)
- * take three parameters, so for them, the element in the array returned by
- * <code>getParams</code> is also an array.  What is different about these setter
- * methods is that in addition to the information provided by parameters, the array contains
- * one of the <code>BaseRowSet</code> constants indicating the type of stream being set.
-* <p>
-* NOTE: The method <code>getParams</code> is called internally by
-* <code>RowSet</code> implementations extending this class; it is not normally called by an
-* application programmer directly.
-*
-* <h3>5.0 Event Notification</h3>
-* The <code>BaseRowSet</code> class provides the event notification
-* mechanism for rowsets.  It contains the field
-* <code>listeners</code>, methods for adding and removing listeners, and
-* methods for notifying listeners of changes.
-* <P>
-* A listener is an object that has implemented the <code>RowSetListener</code> interface.
-* If it has been added to a <code>RowSet</code> object's list of listeners, it will be notified
-*  when an event occurs on that <code>RowSet</code> object.  Each listener's
-* implementation of the <code>RowSetListener</code> methods defines what that object
-* will do when it is notified that an event has occurred.
-* <P>
-* There are three possible events for a <code>RowSet</code> object:
-* <OL>
-* <LI>the cursor moves
-* <LI>an individual row is changed (updated, deleted, or inserted)
-* <LI>the contents of the entire <code>RowSet</code> object  are changed
-* </OL>
-* <P>
-* The <code>BaseRowSet</code> method used for the notification indicates the
-* type of event that has occurred.  For example, the method
-* <code>notifyRowChanged</code> indicates that a row has been updated,
-* deleted, or inserted.  Each of the notification methods creates a
-* <code>RowSetEvent</code> object, which is supplied to the listener in order to
-* identify the <code>RowSet</code> object on which the event occurred.
-* What the listener does with this information, which may be nothing, depends on how it was
-* implemented.
-* <p>
-* <h3>6.0 Default Behavior</h3>
-* A default <code>BaseRowSet</code> object is initialized with many starting values.
-*
-* The following is true of a default <code>RowSet</code> instance that extends
-* the <code>BaseRowSet</code> class:
-* <UL>
-*   <LI>Has a scrollable cursor and does not show changes
-*       made by others.
-*   <LI>Is updatable.
-*   <LI>Does not show rows that have been deleted.
-*   <LI>Has no time limit for how long a driver may take to
-*       execute the <code>RowSet</code> object's command.
-*   <LI>Has no limit for the number of rows it may contain.
-*   <LI>Has no limit for the number of bytes a column may contain. NOTE: This
-*   limit applies only to columns that hold values of the
-*   following types:  <code>BINARY</code>, <code>VARBINARY</code>,
-*   <code>LONGVARBINARY</code>, <code>CHAR</code>, <code>VARCHAR</code>,
-*   and <code>LONGVARCHAR</code>.
-*   <LI>Will not see uncommitted data (make "dirty" reads).
-*   <LI>Has escape processing turned on.
-*   <LI>Has its connection's type map set to <code>null</code>.
-*   <LI>Has an empty <code>Vector</code> object for storing the values set
-*       for the placeholder parameters in the <code>RowSet</code> object's command.
-* </UL>
-* <p>
-* If other values are desired, an application must set the property values
-* explicitly. For example, the following line of code sets the maximum number
-* of rows for the <code>CachedRowSet</code> object <i>crs</i> to 500.
-* <PRE>
-*    crs.setMaxRows(500);
-* </PRE>
-* Methods implemented in extensions of this <code>BaseRowSet</code> class <b>must</b> throw an
-* <code>SQLException</code> object for any violation of the defined assertions.  Also, if the
-* extending class overrides and reimplements any <code>BaseRowSet</code> method and encounters
-* connectivity or underlying data source issues, that method <b>may</b> in addition throw an
-* <code>SQLException</code> object for that reason.
-*/
-
-public abstract class BaseRowSet implements Serializable, Cloneable {
-
-    /**
-     * A constant indicating to a <code>RowSetReaderImpl</code> object
-     * that a given parameter is a Unicode stream. This
-     * <code>RowSetReaderImpl</code> object is provided as an extension of the
-     * <code>SyncProvider</code> abstract class defined in the
-     * <code>SyncFactory</code> static factory SPI mechanism.
-     */
-    public static final int UNICODE_STREAM_PARAM = 0;
-
-    /**
-     * A constant indicating to a <code>RowSetReaderImpl</code> object
-     * that a given parameter is a binary stream. A
-     * <code>RowSetReaderImpl</code> object is provided as an extension of the
-     * <code>SyncProvider</code> abstract class defined in the
-     * <code>SyncFactory</code> static factory SPI mechanism.
-     */
-    public static final int BINARY_STREAM_PARAM = 1;
-
-    /**
-     * A constant indicating to a <code>RowSetReaderImpl</code> object
-     * that a given parameter is an ASCII stream. A
-     * <code>RowSetReaderImpl</code> object is provided as an extension of the
-     * <code>SyncProvider</code> abstract class defined in the
-     * <code>SyncFactory</code> static factory SPI mechanism.
-     */
-    public static final int ASCII_STREAM_PARAM = 2;
-
-    /**
-     * The <code>InputStream</code> object that will be
-     * returned by the method <code>getBinaryStream</code>, which is
-     * specified in the <code>ResultSet</code> interface.
-     * @serial
-     */
-    protected java.io.InputStream binaryStream;
-
-    /**
-     * The <code>InputStream</code> object that will be
-     * returned by the method <code>getUnicodeStream</code>,
-     * which is specified in the <code>ResultSet</code> interface.
-     * @serial
-     */
-    protected java.io.InputStream unicodeStream;
-
-    /**
-     * The <code>InputStream</code> object that will be
-     * returned by the method <code>getAsciiStream</code>,
-     * which is specified in the <code>ResultSet</code> interface.
-     * @serial
-     */
-    protected java.io.InputStream asciiStream;
-
-    /**
-     * The <code>Reader</code> object that will be
-     * returned by the method <code>getCharacterStream</code>,
-     * which is specified in the <code>ResultSet</code> interface.
-     * @serial
-     */
-    protected java.io.Reader charStream;
-
-    /**
-     * The query that will be sent to the DBMS for execution when the
-     * method <code>execute</code> is called.
-     * @serial
-     */
-    private String command;
-
-    /**
-     * The JDBC URL the reader, writer, or both supply to the method
-     * <code>DriverManager.getConnection</code> when the
-     * <code>DriverManager</code> is used to get a connection.
-     * <P>
-     * The JDBC URL identifies the driver to be used to make the conndection.
-     * This URL can be found in the documentation supplied by the driver
-     * vendor.
-     * @serial
-     */
-    private String URL;
-
-    /**
-     * The logical name of the data source that the reader/writer should use
-     * in order to retrieve a <code>DataSource</code> object from a Java
-     * Directory and Naming Interface (JNDI) naming service.
-     * @serial
-     */
-    private String dataSource;
-
-    /**
-     * The user name the reader, writer, or both supply to the method
-     * <code>DriverManager.getConnection</code> when the
-     * <code>DriverManager</code> is used to get a connection.
-     * @serial
-     */
-    private transient String username;
-
-    /**
-     * The password the reader, writer, or both supply to the method
-     * <code>DriverManager.getConnection</code> when the
-     * <code>DriverManager</code> is used to get a connection.
-     * @serial
-     */
-    private transient String password;
-
-    /**
-     * A constant indicating the type of this JDBC <code>RowSet</code>
-     * object. It must be one of the following <code>ResultSet</code>
-     * constants:  <code>TYPE_FORWARD_ONLY</code>,
-     * <code>TYPE_SCROLL_INSENSITIVE</code>, or
-     * <code>TYPE_SCROLL_SENSITIVE</code>.
-     * @serial
-     */
-    private int rowSetType = ResultSet.TYPE_SCROLL_INSENSITIVE;
-
-    /**
-     * A <code>boolean</code> indicating whether deleted rows are visible in this
-     * JDBC <code>RowSet</code> object .
-     * @serial
-     */
-    private boolean showDeleted = false; // default is false
-
-    /**
-     * The maximum number of seconds the driver
-     * will wait for a command to execute.  This limit applies while
-     * this JDBC <code>RowSet</code> object is connected to its data
-     * source, that is, while it is populating itself with
-     * data and while it is writing data back to the data source.
-     * @serial
-     */
-    private int queryTimeout = 0; // default is no timeout
-
-    /**
-     * The maximum number of rows the reader should read.
-     * @serial
-     */
-    private int maxRows = 0; // default is no limit
-
-    /**
-     * The maximum field size the reader should read.
-     * @serial
-     */
-    private int maxFieldSize = 0; // default is no limit
-
-    /**
-     * A constant indicating the concurrency of this JDBC <code>RowSet</code>
-     * object. It must be one of the following <code>ResultSet</code>
-     * constants: <code>CONCUR_READ_ONLY</code> or
-     * <code>CONCUR_UPDATABLE</code>.
-     * @serial
-     */
-    private int concurrency = ResultSet.CONCUR_UPDATABLE;
-
-    /**
-     * A <code>boolean</code> indicating whether this JDBC <code>RowSet</code>
-     * object is read-only.  <code>true</code> indicates that it is read-only;
-     * <code>false</code> that it is writable.
-     * @serial
-     */
-    private boolean readOnly;
-
-    /**
-     * A <code>boolean</code> indicating whether the reader for this
-     * JDBC <code>RowSet</code> object should perform escape processing.
-     * <code>true</code> means that escape processing is turned on;
-     * <code>false</code> that it is not. The default is <code>true</code>.
-     * @serial
-     */
-    private boolean escapeProcessing;
-
-    /**
-     * A constant indicating the isolation level of the connection
-     * for this JDBC <code>RowSet</code> object . It must be one of
-     * the following <code>Connection</code> constants:
-     * <code>TRANSACTION_NONE</code>,
-     * <code>TRANSACTION_READ_UNCOMMITTED</code>,
-     * <code>TRANSACTION_READ_COMMITTED</code>,
-     * <code>TRANSACTION_REPEATABLE_READ</code> or
-     * <code>TRANSACTION_SERIALIZABLE</code>.
-     * @serial
-     */
-    private int isolation;
-
-    /**
-     * A constant used as a hint to the driver that indicates the direction in
-     * which data from this JDBC <code>RowSet</code> object  is going
-     * to be fetched. The following <code>ResultSet</code> constants are
-     * possible values:
-     * <code>FETCH_FORWARD</code>,
-     * <code>FETCH_REVERSE</code>,
-     * <code>FETCH_UNKNOWN</code>.
-     * <P>
-     * Unused at this time.
-     * @serial
-     */
-    private int fetchDir = ResultSet.FETCH_FORWARD; // default fetch direction
-
-    /**
-     * A hint to the driver that indicates the expected number of rows
-     * in this JDBC <code>RowSet</code> object .
-     * <P>
-     * Unused at this time.
-     * @serial
-     */
-    private int fetchSize = 0; // default fetchSize
-
-    /**
-     * The <code>java.util.Map</code> object that contains entries mapping
-     * SQL type names to classes in the Java programming language for the
-     * custom mapping of user-defined types.
-     * @serial
-     */
-    private Map<String, Class<?>> map;
-
-    /**
-     * A <code>Vector</code> object that holds the list of listeners
-     * that have registered with this <code>RowSet</code> object.
-     * @serial
-     */
-    private Vector<RowSetListener> listeners;
-
-    /**
-     * A <code>Vector</code> object that holds the parameters set
-     * for this <code>RowSet</code> object's current command.
-     * @serial
-     */
-    private Hashtable<Integer, Object> params; // could be transient?
-
-    /**
-     * Constructs a new <code>BaseRowSet</code> object initialized with
-     * a default <code>Vector</code> object for its <code>listeners</code>
-     * field. The other default values with which it is initialized are listed
-     * in Section 6.0 of the class comment for this class.
-     */
-    public BaseRowSet() {
-        // allocate the listeners collection
-        listeners = new Vector<RowSetListener>();
-    }
-
-    /**
-     * Performs the necessary internal configurations and initializations
-     * to allow any JDBC <code>RowSet</code> implementation to start using
-     * the standard facilities provided by a <code>BaseRowSet</code>
-     * instance. This method <b>should</b> be called after the <code>RowSet</code> object
-     * has been instantiated to correctly initialize all parameters. This method
-     * <b>should</b> never be called by an application, but is called from with
-     * a <code>RowSet</code> implementation extending this class.
-     */
-    protected void initParams() {
-        params = new Hashtable<Integer, Object>();
-    }
-
-    //--------------------------------------------------------------------
-    // Events
-    //--------------------------------------------------------------------
-
-    /**
-    * The listener will be notified whenever an event occurs on this <code>RowSet</code>
-    * object.
-    * <P>
-    * A listener might, for example, be a table or graph that needs to
-    * be updated in order to accurately reflect the current state of
-    * the <code>RowSet</code> object.
-    * <p>
-    * <b>Note</b>: if the <code>RowSetListener</code> object is
-    * <code>null</code>, this method silently discards the <code>null</code>
-    * value and does not add a null reference to the set of listeners.
-    * <p>
-    * <b>Note</b>: if the listener is already set, and the new <code>RowSetListerner</code>
-    * instance is added to the set of listeners already registered to receive
-    * event notifications from this <code>RowSet</code>.
-    *
-    * @param listener an object that has implemented the
-    *     <code>javax.sql.RowSetListener</code> interface and wants to be notified
-    *     of any events that occur on this <code>RowSet</code> object; May be
-    *     null.
-    * @see #removeRowSetListener
-    */
-    public void addRowSetListener(RowSetListener listener) {
-        listeners.add(listener);
-    }
-
-    /**
-    * Removes the designated object from this <code>RowSet</code> object's list of listeners.
-    * If the given argument is not a registered listener, this method
-    * does nothing.
-    *
-    *  <b>Note</b>: if the <code>RowSetListener</code> object is
-    * <code>null</code>, this method silently discards the <code>null</code>
-    * value.
-    *
-    * @param listener a <code>RowSetListener</code> object that is on the list
-    *        of listeners for this <code>RowSet</code> object
-    * @see #addRowSetListener
-    */
-    public void removeRowSetListener(RowSetListener listener) {
-        listeners.remove(listener);
-    }
-
-    /**
-     * Determine if instance of this class extends the RowSet interface.
-     */
-    private void checkforRowSetInterface() throws SQLException {
-        if ((this instanceof javax.sql.RowSet) == false) {
-            throw new SQLException("The class extending abstract class BaseRowSet " +
-                "must implement javax.sql.RowSet or one of it's sub-interfaces.");
-        }
-    }
-
-    /**
-    * Notifies all of the listeners registered with this
-    * <code>RowSet</code> object that its cursor has moved.
-    * <P>
-    * When an application calls a method to move the cursor,
-    * that method moves the cursor and then calls this method
-    * internally. An application <b>should</b> never invoke
-    * this method directly.
-    *
-    * @throws SQLException if the class extending the <code>BaseRowSet</code>
-    *     abstract class does not implement the <code>RowSet</code> interface or
-    *     one of it's sub-interfaces.
-    */
-    protected void notifyCursorMoved() throws SQLException {
-        checkforRowSetInterface();
-        if (listeners.isEmpty() == false) {
-            RowSetEvent event = new RowSetEvent((RowSet)this);
-            for (Iterator i = listeners.iterator(); i.hasNext(); ) {
-                ((RowSetListener)i.next()).cursorMoved(event);
-            }
-        }
-    }
-
-    /**
-    * Notifies all of the listeners registered with this <code>RowSet</code> object that
-    * one of its rows has changed.
-    * <P>
-    * When an application calls a method that changes a row, such as
-    * the <code>CachedRowSet</code> methods <code>insertRow</code>,
-    * <code>updateRow</code>, or <code>deleteRow</code>,
-    * that method calls <code>notifyRowChanged</code>
-    * internally. An application <b>should</b> never invoke
-    * this method directly.
-    *
-    * @throws SQLException if the class extending the <code>BaseRowSet</code>
-    *     abstract class does not implement the <code>RowSet</code> interface or
-    *     one of it's sub-interfaces.
-    */
-    protected void notifyRowChanged() throws SQLException {
-        checkforRowSetInterface();
-        if (listeners.isEmpty() == false) {
-                RowSetEvent event = new RowSetEvent((RowSet)this);
-                for (Iterator i = listeners.iterator(); i.hasNext(); ) {
-                        ((RowSetListener)i.next()).rowChanged(event);
-                }
-        }
-    }
-
-   /**
-    * Notifies all of the listeners registered with this <code>RowSet</code>
-    * object that its entire contents have changed.
-    * <P>
-    * When an application calls methods that change the entire contents
-    * of the <code>RowSet</code> object, such as the <code>CachedRowSet</code> methods
-    * <code>execute</code>, <code>populate</code>, <code>restoreOriginal</code>,
-    * or <code>release</code>, that method calls <code>notifyRowSetChanged</code>
-    * internally (either directly or indirectly). An application <b>should</b>
-    * never invoke this method directly.
-    *
-    * @throws SQLException if the class extending the <code>BaseRowSet</code>
-    *     abstract class does not implement the <code>RowSet</code> interface or
-    *     one of it's sub-interfaces.
-    */
-    protected void notifyRowSetChanged() throws SQLException {
-        checkforRowSetInterface();
-        if (listeners.isEmpty() == false) {
-                RowSetEvent event = new RowSetEvent((RowSet)this);
-                for (Iterator i = listeners.iterator(); i.hasNext(); ) {
-                        ((RowSetListener)i.next()).rowSetChanged(event);
-                }
-        }
-}
-
-    /**
-     * Retrieves the SQL query that is the command for this
-     * <code>RowSet</code> object. The command property contains the query that
-     * will be executed to populate this <code>RowSet</code> object.
-     * <P>
-     * The SQL query returned by this method is used by <code>RowSet</code> methods
-     * such as <code>execute</code> and <code>populate</code>, which may be implemented
-     * by any class that extends the <code>BaseRowSet</code> abstract class and
-     * implements one or more of the standard JSR-114 <code>RowSet</code>
-     * interfaces.
-     * <P>
-     * The command is used by the <code>RowSet</code> object's
-     * reader to obtain a <code>ResultSet</code> object.  The reader then
-     * reads the data from the <code>ResultSet</code> object and uses it to
-     * to populate this <code>RowSet</code> object.
-     * <P>
-     * The default value for the <code>command</code> property is <code>null</code>.
-     *
-     * @return the <code>String</code> that is the value for this
-     *         <code>RowSet</code> object's <code>command</code> property;
-     *         may be <code>null</code>
-     * @see #setCommand
-     */
-    public String getCommand() {
-        return command;
-    }
-
-    /**
-     * Sets this <code>RowSet</code> object's <code>command</code> property to
-     * the given <code>String</code> object and clears the parameters, if any,
-     * that were set for the previous command.
-     * <P>
-     * The <code>command</code> property may not be needed if the <code>RowSet</code>
-     * object gets its data from a source that does not support commands,
-     * such as a spreadsheet or other tabular file.
-     * Thus, this property is optional and may be <code>null</code>.
-     *
-     * @param cmd a <code>String</code> object containing an SQL query
-     *            that will be set as this <code>RowSet</code> object's command
-     *            property; may be <code>null</code> but may not be an empty string
-     * @throws SQLException if an empty string is provided as the command value
-     * @see #getCommand
-     */
-    public void setCommand(String cmd) throws SQLException {
-        // cmd equal to null or
-        // cmd with length 0 (implies url =="")
-        // are not independent events.
-
-        if(cmd == null) {
-           command = null;
-        } else if (cmd.length() == 0) {
-            throw new SQLException("Invalid command string detected. " +
-            "Cannot be of length less than 0");
-        } else {
-            // "unbind" any parameters from any previous command.
-            if(params == null){
-                 throw new SQLException("Set initParams() before setCommand");
-            }
-            params.clear();
-            command = cmd;
-        }
-
-    }
-
-    /**
-     * Retrieves the JDBC URL that this <code>RowSet</code> object's
-     * <code>javax.sql.Reader</code> object uses to make a connection
-     * with a relational database using a JDBC technology-enabled driver.
-     *<P>
-     * The <code>Url</code> property will be <code>null</code> if the underlying data
-     * source is a non-SQL data source, such as a spreadsheet or an XML
-     * data source.
-     *
-     * @return a <code>String</code> object that contains the JDBC URL
-     *         used to establish the connection for this <code>RowSet</code>
-     *         object; may be <code>null</code> (default value) if not set
-     * @throws SQLException if an error occurs retrieving the URL value
-     * @see #setUrl
-     */
-    public String getUrl() throws SQLException {
-        return URL;
-    }
-
-    /**
-     * Sets the Url property for this <code>RowSet</code> object
-     * to the given <code>String</code> object and sets the dataSource name
-     * property to <code>null</code>. The Url property is a
-     * JDBC URL that is used when
-     * the connection is created using a JDBC technology-enabled driver
-     * ("JDBC driver") and the <code>DriverManager</code>.
-     * The correct JDBC URL for the specific driver to be used can be found
-     * in the driver documentation.  Although there are guidelines for for how
-     * a JDBC URL is formed,
-     * a driver vendor can specify any <code>String</code> object except
-     * one with a length of <code>0</code> (an empty string).
-     * <P>
-     * Setting the Url property is optional if connections are established using
-     * a <code>DataSource</code> object instead of the <code>DriverManager</code>.
-     * The driver will use either the URL property or the
-     * dataSourceName property to create a connection, whichever was
-     * specified most recently. If an application uses a JDBC URL, it
-     * must load a JDBC driver that accepts the JDBC URL before it uses the
-     * <code>RowSet</code> object to connect to a database.  The <code>RowSet</code>
-     * object will use the URL internally to create a database connection in order
-     * to read or write data.
-     *
-     * @param url a <code>String</code> object that contains the JDBC URL
-     *     that will be used to establish the connection to a database for this
-     *     <code>RowSet</code> object; may be <code>null</code> but must not
-     *     be an empty string
-     * @throws SQLException if an error occurs setting the Url property or the
-     *     parameter supplied is a string with a length of <code>0</code> (an
-     *     empty string)
-     * @see #getUrl
-     */
-    public void setUrl(String url) throws SQLException {
-        if(url == null) {
-           url = null;
-        } else if (url.length() < 1) {
-            throw new SQLException("Invalid url string detected. " +
-            "Cannot be of length less than 1");
-        } else {
-            URL = url;
-        }
-
-        dataSource = null;
-
-    }
-
-    /**
-     * Returns the logical name that when supplied to a naming service
-     * that uses the Java Naming and Directory Interface (JNDI) API, will
-     * retrieve a <code>javax.sql.DataSource</code> object. This
-     * <code>DataSource</code> object can be used to establish a connection
-     * to the data source that it represents.
-     * <P>
-     * Users should set either the url or the data source name property.
-     * The driver will use the property set most recently to establish a
-     * connection.
-     *
-     * @return a <code>String</code> object that identifies the
-     *         <code>DataSource</code> object to be used for making a
-     *         connection; if no logical name has been set, <code>null</code>
-     *         is returned.
-     * @see #setDataSourceName
-     */
-    public String getDataSourceName() {
-        return dataSource;
-    }
-
-
-    /**
-     * Sets the <code>DataSource</code> name property for this <code>RowSet</code>
-     * object to the given logical name and sets this <code>RowSet</code> object's
-     * Url property to <code>null</code>. The name must have been bound to a
-     * <code>DataSource</code> object in a JNDI naming service so that an
-     * application can do a lookup using that name to retrieve the
-     * <code>DataSource</code> object bound to it. The <code>DataSource</code>
-     * object can then be used to establish a connection to the data source it
-     * represents.
-     * <P>
-     * Users should set either the Url property or the dataSourceName property.
-     * If both properties are set, the driver will use the property set most recently.
-     *
-     * @param name a <code>String</code> object with the name that can be supplied
-     *     to a naming service based on JNDI technology to retrieve the
-     *     <code>DataSource</code> object that can be used to get a connection;
-     *     may be <code>null</code> but must not be an empty string
-     * @throws SQLException if an empty string is provided as the <code>DataSource</code>
-     *    name
-     * @see #getDataSourceName
-     */
-    public void setDataSourceName(String name) throws SQLException {
-
-        if (name == null) {
-            dataSource = null;
-        } else if (name.equals("")) {
-           throw new SQLException("DataSource name cannot be empty string");
-        } else {
-           dataSource = name;
-        }
-
-        URL = null;
-    }
-
-    /**
-     * Returns the user name used to create a database connection.  Because it
-     * is not serialized, the username property is set at runtime before
-     * calling the method <code>execute</code>.
-     *
-     * @return the <code>String</code> object containing the user name that
-     *         is supplied to the data source to create a connection; may be
-     *         <code>null</code> (default value) if not set
-     * @see #setUsername
-     */
-    public String getUsername() {
-        return username;
-    }
-
-    /**
-     * Sets the username property for this <code>RowSet</code> object
-     * to the given user name. Because it
-     * is not serialized, the username property is set at run time before
-     * calling the method <code>execute</code>.
-     *
-     * @param name the <code>String</code> object containing the user name that
-     *     is supplied to the data source to create a connection. It may be null.
-     * @see #getUsername
-     */
-    public void setUsername(String name) {
-        if(name == null)
-        {
-           username = null;
-        } else {
-           username = name;
-        }
-    }
-
-    /**
-     * Returns the password used to create a database connection for this
-     * <code>RowSet</code> object.  Because the password property is not
-     * serialized, it is set at run time before calling the method
-     * <code>execute</code>. The default value is <code>null</code>
-     *
-     * @return the <code>String</code> object that represents the password
-     *         that must be supplied to the database to create a connection
-     * @see #setPassword
-     */
-    public String getPassword() {
-        return password;
-    }
-
-    /**
-     * Sets the password used to create a database connection for this
-     * <code>RowSet</code> object to the given <code>String</code>
-     * object.  Because the password property is not
-     * serialized, it is set at run time before calling the method
-     * <code>execute</code>.
-     *
-     * @param pass the <code>String</code> object that represents the password
-     *     that is supplied to the database to create a connection. It may be
-     *     null.
-     * @see #getPassword
-     */
-    public void setPassword(String pass) {
-        if(pass == null)
-        {
-           password = null;
-        } else {
-           password = pass;
-        }
-    }
-
-    /**
-     * Sets the type for this <code>RowSet</code> object to the specified type.
-     * The default type is <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>.
-     *
-     * @param type one of the following constants:
-     *             <code>ResultSet.TYPE_FORWARD_ONLY</code>,
-     *             <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
-     *             <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
-     * @throws SQLException if the parameter supplied is not one of the
-     *         following constants:
-     *          <code>ResultSet.TYPE_FORWARD_ONLY</code> or
-     *          <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>
-     *          <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
-     * @see #getConcurrency
-     * @see #getType
-     */
-    public void setType(int type) throws SQLException {
-
-        if ((type != ResultSet.TYPE_FORWARD_ONLY) &&
-           (type != ResultSet.TYPE_SCROLL_INSENSITIVE) &&
-           (type != ResultSet.TYPE_SCROLL_SENSITIVE)) {
-                throw new SQLException("Invalid type of RowSet set. Must be either " +
-                "ResultSet.TYPE_FORWARD_ONLY or ResultSet.TYPE_SCROLL_INSENSITIVE " +
-                "or ResultSet.TYPE_SCROLL_SENSITIVE.");
-        }
-        this.rowSetType = type;
-    }
-
-    /**
-     * Returns the type of this <code>RowSet</code> object. The type is initially
-     * determined by the statement that created the <code>RowSet</code> object.
-     * The <code>RowSet</code> object can call the method
-     * <code>setType</code> at any time to change its
-     * type.  The default is <code>TYPE_SCROLL_INSENSITIVE</code>.
-     *
-     * @return the type of this JDBC <code>RowSet</code>
-     *         object, which must be one of the following:
-     *         <code>ResultSet.TYPE_FORWARD_ONLY</code>,
-     *         <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
-     *         <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
-     * @throws SQLException if an error occurs getting the type of
-     *     of this <code>RowSet</code> object
-     * @see #setType
-     */
-    public int getType() throws SQLException {
-        return rowSetType;
-    }
-
-    /**
-     * Sets the concurrency for this <code>RowSet</code> object to
-     * the specified concurrency. The default concurrency for any <code>RowSet</code>
-     * object (connected or disconnected) is <code>ResultSet.CONCUR_UPDATABLE</code>,
-     * but this method may be called at any time to change the concurrency.
-     * <P>
-     * @param concurrency one of the following constants:
-     *                    <code>ResultSet.CONCUR_READ_ONLY</code> or
-     *                    <code>ResultSet.CONCUR_UPDATABLE</code>
-     * @throws SQLException if the parameter supplied is not one of the
-     *         following constants:
-     *          <code>ResultSet.CONCUR_UPDATABLE</code> or
-     *          <code>ResultSet.CONCUR_READ_ONLY</code>
-     * @see #getConcurrency
-     * @see #isReadOnly
-     */
-    public void setConcurrency(int concurrency) throws SQLException {
-
-        if((concurrency != ResultSet.CONCUR_READ_ONLY) &&
-           (concurrency != ResultSet.CONCUR_UPDATABLE)) {
-                throw new SQLException("Invalid concurrency set. Must be either " +
-                "ResultSet.CONCUR_READ_ONLY or ResultSet.CONCUR_UPDATABLE.");
-        }
-        this.concurrency = concurrency;
-    }
-
-    /**
-     * Returns a <code>boolean</code> indicating whether this
-     * <code>RowSet</code> object is read-only.
-     * Any attempts to update a read-only <code>RowSet</code> object will result in an
-     * <code>SQLException</code> being thrown. By default,
-     * rowsets are updatable if updates are possible.
-     *
-     * @return <code>true</code> if this <code>RowSet</code> object
-     *         cannot be updated; <code>false</code> otherwise
-     * @see #setConcurrency
-     * @see #setReadOnly
-     */
-    public boolean isReadOnly() {
-        return readOnly;
-    };
-
-    /**
-     * Sets this <code>RowSet</code> object's readOnly  property to the given <code>boolean</code>.
-     *
-     * @param value <code>true</code> to indicate that this
-     *              <code>RowSet</code> object is read-only;
-     *              <code>false</code> to indicate that it is updatable
-     */
-    public void setReadOnly(boolean value) {
-        readOnly = value;
-    }
-
-    /**
-     * Returns the transaction isolation property for this
-     * <code>RowSet</code> object's connection. This property represents
-     * the transaction isolation level requested for use in transactions.
-     * <P>
-     * For <code>RowSet</code> implementations such as
-     * the <code>CachedRowSet</code> that operate in a disconnected environment,
-     * the <code>SyncProvider</code> object
-     * offers complementary locking and data integrity options. The
-     * options described below are pertinent only to connected <code>RowSet</code>
-     * objects (<code>JdbcRowSet</code> objects).
-     *
-     * @return one of the following constants:
-     *         <code>Connection.TRANSACTION_NONE</code>,
-     *         <code>Connection.TRANSACTION_READ_UNCOMMITTED</code>,
-     *         <code>Connection.TRANSACTION_READ_COMMITTED</code>,
-     *         <code>Connection.TRANSACTION_REPEATABLE_READ</code>, or
-     *         <code>Connection.TRANSACTION_SERIALIZABLE</code>
-     * @see javax.sql.rowset.spi.SyncFactory
-     * @see javax.sql.rowset.spi.SyncProvider
-     * @see #setTransactionIsolation
-
-     */
-    public int getTransactionIsolation() {
-        return isolation;
-    };
-
-    /**
-     * Sets the transaction isolation property for this JDBC <code>RowSet</code> object to the given
-     * constant. The DBMS will use this transaction isolation level for
-     * transactions if it can.
-     * <p>
-     * For <code>RowSet</code> implementations such as
-     * the <code>CachedRowSet</code> that operate in a disconnected environment,
-     * the <code>SyncProvider</code> object being used
-     * offers complementary locking and data integrity options. The
-     * options described below are pertinent only to connected <code>RowSet</code>
-     * objects (<code>JdbcRowSet</code> objects).
-     *
-     * @param level one of the following constants, listed in ascending order:
-     *              <code>Connection.TRANSACTION_NONE</code>,
-     *              <code>Connection.TRANSACTION_READ_UNCOMMITTED</code>,
-     *              <code>Connection.TRANSACTION_READ_COMMITTED</code>,
-     *              <code>Connection.TRANSACTION_REPEATABLE_READ</code>, or
-     *              <code>Connection.TRANSACTION_SERIALIZABLE</code>
-     * @throws SQLException if the given parameter is not one of the Connection
-     *          constants
-     * @see javax.sql.rowset.spi.SyncFactory
-     * @see javax.sql.rowset.spi.SyncProvider
-     * @see #getTransactionIsolation
-     */
-    public void setTransactionIsolation(int level) throws SQLException {
-        if ((level != Connection.TRANSACTION_NONE) &&
-           (level != Connection.TRANSACTION_READ_COMMITTED) &&
-           (level != Connection.TRANSACTION_READ_UNCOMMITTED) &&
-           (level != Connection.TRANSACTION_REPEATABLE_READ) &&
-           (level != Connection.TRANSACTION_SERIALIZABLE))
-            {
-                throw new SQLException("Invalid transaction isolation set. Must " +
-                "be either " +
-                "Connection.TRANSACTION_NONE or " +
-                "Connection.TRANSACTION_READ_UNCOMMITTED or " +
-                "Connection.TRANSACTION_READ_COMMITTED or " +
-                "Connection.RRANSACTION_REPEATABLE_READ or " +
-                "Connection.TRANSACTION_SERIALIZABLE");
-            }
-        this.isolation = level;
-    }
-
-    /**
-     * Retrieves the type map associated with the <code>Connection</code>
-     * object for this <code>RowSet</code> object.
-     * <P>
-     * Drivers that support the JDBC 3.0 API will create
-     * <code>Connection</code> objects with an associated type map.
-     * This type map, which is initially empty, can contain one or more
-     * fully-qualified SQL names and <code>Class</code> objects indicating
-     * the class to which the named SQL value will be mapped. The type mapping
-     * specified in the connection's type map is used for custom type mapping
-     * when no other type map supersedes it.
-     * <p>
-     * If a type map is explicitly supplied to a method that can perform
-     * custom mapping, that type map supersedes the connection's type map.
-     *
-     * @return the <code>java.util.Map</code> object that is the type map
-     *         for this <code>RowSet</code> object's connection
-     */
-    public java.util.Map<String,Class<?>> getTypeMap() {
-        return map;
-    }
-
-    /**
-     * Installs the given <code>java.util.Map</code> object as the type map
-     * associated with the <code>Connection</code> object for this
-     * <code>RowSet</code> object.  The custom mapping indicated in
-     * this type map will be used unless a different type map is explicitly
-     * supplied to a method, in which case the type map supplied will be used.
-     *
-     * @param map a <code>java.util.Map</code> object that contains the
-     *     mapping from SQL type names for user defined types (UDT) to classes in
-     *     the Java programming language.  Each entry in the <code>Map</code>
-     *     object consists of the fully qualified SQL name of a UDT and the
-     *     <code>Class</code> object for the <code>SQLData</code> implementation
-     *     of that UDT. May be <code>null</code>.
-     */
-    public void setTypeMap(java.util.Map<String,Class<?>> map) {
-        this.map = map;
-    }
-
-    /**
-     * Retrieves the maximum number of bytes that can be used for a column
-     * value in this <code>RowSet</code> object.
-     * This limit applies only to columns that hold values of the
-     * following types:  <code>BINARY</code>, <code>VARBINARY</code>,
-     * <code>LONGVARBINARY</code>, <code>CHAR</code>, <code>VARCHAR</code>,
-     * and <code>LONGVARCHAR</code>.  If the limit is exceeded, the excess
-     * data is silently discarded.
-     *
-     * @return an <code>int</code> indicating the current maximum column size
-     *     limit; zero means that there is no limit
-     * @throws SQLException if an error occurs internally determining the
-     *    maximum limit of the column size
-     */
-    public int getMaxFieldSize() throws SQLException {
-        return maxFieldSize;
-    }
-
-    /**
-     * Sets the maximum number of bytes that can be used for a column
-     * value in this <code>RowSet</code> object to the given number.
-     * This limit applies only to columns that hold values of the
-     * following types:  <code>BINARY</code>, <code>VARBINARY</code>,
-     * <code>LONGVARBINARY</code>, <code>CHAR</code>, <code>VARCHAR</code>,
-     * and <code>LONGVARCHAR</code>.  If the limit is exceeded, the excess
-     * data is silently discarded. For maximum portability, it is advisable to
-     * use values greater than 256.
-     *
-     * @param max an <code>int</code> indicating the new maximum column size
-     *     limit; zero means that there is no limit
-     * @throws SQLException if (1) an error occurs internally setting the
-     *     maximum limit of the column size or (2) a size of less than 0 is set
-     */
-    public void setMaxFieldSize(int max) throws SQLException {
-        if (max < 0) {
-            throw new SQLException("Invalid max field size set. Cannot be of " +
-            "value: " + max);
-        }
-        maxFieldSize = max;
-    }
-
-    /**
-     * Retrieves the maximum number of rows that this <code>RowSet</code> object may contain. If
-     * this limit is exceeded, the excess rows are silently dropped.
-     *
-     * @return an <code>int</code> indicating the current maximum number of
-     *     rows; zero means that there is no limit
-     * @throws SQLException if an error occurs internally determining the
-     *     maximum limit of rows that a <code>Rowset</code> object can contain
-     */
-    public int getMaxRows() throws SQLException {
-        return maxRows;
-    }
-
-    /**
-     * Sets the maximum number of rows that this <code>RowSet</code> object may contain to
-     * the given number. If this limit is exceeded, the excess rows are
-     * silently dropped.
-     *
-     * @param max an <code>int</code> indicating the current maximum number
-     *     of rows; zero means that there is no limit
-     * @throws SQLException if an error occurs internally setting the
-     *     maximum limit on the number of rows that a JDBC <code>RowSet</code> object
-     *     can contain; or if <i>max</i> is less than <code>0</code>; or
-     *     if <i>max</i> is less than the <code>fetchSize</code> of the
-     *     <code>RowSet</code>
-     */
-    public void setMaxRows(int max) throws SQLException {
-        if (max < 0) {
-            throw new SQLException("Invalid max row size set. Cannot be of " +
-                "value: " + max);
-        } else if (max < this.getFetchSize()) {
-            throw new SQLException("Invalid max row size set. Cannot be less " +
-                "than the fetchSize.");
-        }
-        this.maxRows = max;
-    }
-
-    /**
-     * Sets to the given <code>boolean</code> whether or not the driver will
-     * scan for escape syntax and do escape substitution before sending SQL
-     * statements to the database. The default is for the driver to do escape
-     * processing.
-     * <P>
-     * Note: Since <code>PreparedStatement</code> objects have usually been
-     * parsed prior to making this call, disabling escape processing for
-     * prepared statements will likely have no effect.
-     *
-     * @param enable <code>true</code> to enable escape processing;
-     *     <code>false</code> to disable it
-     * @throws SQLException if an error occurs setting the underlying JDBC
-     * technology-enabled driver to process the escape syntax
-     */
-    public void setEscapeProcessing(boolean enable) throws SQLException {
-        escapeProcessing = enable;
-    }
-
-    /**
-     * Retrieves the maximum number of seconds the driver will wait for a
-     * query to execute. If the limit is exceeded, an <code>SQLException</code>
-     * is thrown.
-     *
-     * @return the current query timeout limit in seconds; zero means that
-     *     there is no limit
-     * @throws SQLException if an error occurs in determining the query
-     *     time-out value
-     */
-    public int getQueryTimeout() throws SQLException {
-        return queryTimeout;
-    }
-
-    /**
-     * Sets to the given number the maximum number of seconds the driver will
-     * wait for a query to execute. If the limit is exceeded, an
-     * <code>SQLException</code> is thrown.
-     *
-     * @param seconds the new query time-out limit in seconds; zero means that
-     *     there is no limit; must not be less than zero
-     * @throws SQLException if an error occurs setting the query
-     *     time-out or if the query time-out value is less than 0
-     */
-    public void setQueryTimeout(int seconds) throws SQLException {
-        if (seconds < 0) {
-            throw new SQLException("Invalid query timeout value set. Cannot be " +
-            "of value: " + seconds);
-        }
-        this.queryTimeout = seconds;
-    }
-
-    /**
-     * Retrieves a <code>boolean</code> indicating whether rows marked
-     * for deletion appear in the set of current rows.
-     * The default value is <code>false</code>.
-     * <P>
-     * Note: Allowing deleted rows to remain visible complicates the behavior
-     * of some of the methods.  However, most <code>RowSet</code> object users
-     * can simply ignore this extra detail because only sophisticated
-     * applications will likely want to take advantage of this feature.
-     *
-     * @return <code>true</code> if deleted rows are visible;
-     *         <code>false</code> otherwise
-     * @throws SQLException if an error occurs determining if deleted rows
-     * are visible or not
-     * @see #setShowDeleted
-     */
-    public boolean getShowDeleted() throws SQLException {
-        return showDeleted;
-    }
-
-    /**
-     * Sets the property <code>showDeleted</code> to the given
-     * <code>boolean</code> value, which determines whether
-     * rows marked for deletion appear in the set of current rows.
-     *
-     * @param value <code>true</code> if deleted rows should be shown;
-     *     <code>false</code> otherwise
-     * @throws SQLException if an error occurs setting whether deleted
-     *     rows are visible or not
-     * @see #getShowDeleted
-     */
-    public void setShowDeleted(boolean value) throws SQLException {
-        showDeleted = value;
-    }
-
-    /**
-     * Ascertains whether escape processing is enabled for this
-     * <code>RowSet</code> object.
-     *
-     * @return <code>true</code> if escape processing is turned on;
-     *         <code>false</code> otherwise
-     * @throws SQLException if an error occurs determining if escape
-     *     processing is enabled or not or if the internal escape
-     *     processing trigger has not been enabled
-     */
-    public boolean getEscapeProcessing() throws SQLException {
-        return escapeProcessing;
-    }
-
-    /**
-     * Gives the driver a performance hint as to the direction in
-     * which the rows in this <code>RowSet</code> object will be
-     * processed.  The driver may ignore this hint.
-     * <P>
-     * A <code>RowSet</code> object inherits the default properties of the
-     * <code>ResultSet</code> object from which it got its data.  That
-     * <code>ResultSet</code> object's default fetch direction is set by
-     * the <code>Statement</code> object that created it.
-     * <P>
-     * This method applies to a <code>RowSet</code> object only while it is
-     * connected to a database using a JDBC driver.
-     * <p>
-     * A <code>RowSet</code> object may use this method at any time to change
-     * its setting for the fetch direction.
-     *
-     * @param direction one of <code>ResultSet.FETCH_FORWARD</code>,
-     *                  <code>ResultSet.FETCH_REVERSE</code>, or
-     *                  <code>ResultSet.FETCH_UNKNOWN</code>
-     * @throws SQLException if (1) the <code>RowSet</code> type is
-     *     <code>TYPE_FORWARD_ONLY</code> and the given fetch direction is not
-     *     <code>FETCH_FORWARD</code> or (2) the given fetch direction is not
-     *     one of the following:
-     *        ResultSet.FETCH_FORWARD,
-     *        ResultSet.FETCH_REVERSE, or
-     *        ResultSet.FETCH_UNKNOWN
-     * @see #getFetchDirection
-     */
-    public void setFetchDirection(int direction) throws SQLException {
-        // Changed the condition checking to the below as there were two
-        // conditions that had to be checked
-        // 1. RowSet is TYPE_FORWARD_ONLY and direction is not FETCH_FORWARD
-        // 2. Direction is not one of the valid values
-
-        if (((getType() == ResultSet.TYPE_FORWARD_ONLY) && (direction != ResultSet.FETCH_FORWARD)) ||
-            ((direction != ResultSet.FETCH_FORWARD) &&
-            (direction != ResultSet.FETCH_REVERSE) &&
-            (direction != ResultSet.FETCH_UNKNOWN))) {
-            throw new SQLException("Invalid Fetch Direction");
-        }
-        fetchDir = direction;
-    }
-
-    /**
-     * Retrieves this <code>RowSet</code> object's current setting for the
-     * fetch direction. The default type is <code>ResultSet.FETCH_FORWARD</code>
-     *
-     * @return one of <code>ResultSet.FETCH_FORWARD</code>,
-     *                  <code>ResultSet.FETCH_REVERSE</code>, or
-     *                  <code>ResultSet.FETCH_UNKNOWN</code>
-     * @throws SQLException if an error occurs in determining the
-     *     current fetch direction for fetching rows
-     * @see #setFetchDirection
-     */
-    public int getFetchDirection() throws SQLException {
-
-        //Added the following code to throw a
-        //SQL Exception if the fetchDir is not
-        //set properly.Bug id:4914155
-
-        // This checking is not necessary!
-
-        /*
-         if((fetchDir != ResultSet.FETCH_FORWARD) &&
-           (fetchDir != ResultSet.FETCH_REVERSE) &&
-           (fetchDir != ResultSet.FETCH_UNKNOWN)) {
-            throw new SQLException("Fetch Direction Invalid");
-         }
-         */
-        return (fetchDir);
-    }
-
-    /**
-     * Sets the fetch size for this <code>RowSet</code> object to the given number of
-     * rows.  The fetch size gives a JDBC technology-enabled driver ("JDBC driver")
-     * a hint as to the
-     * number of rows that should be fetched from the database when more rows
-     * are needed for this <code>RowSet</code> object. If the fetch size specified
-     * is zero, the driver ignores the value and is free to make its own best guess
-     * as to what the fetch size should be.
-     * <P>
-     * A <code>RowSet</code> object inherits the default properties of the
-     * <code>ResultSet</code> object from which it got its data.  That
-     * <code>ResultSet</code> object's default fetch size is set by
-     * the <code>Statement</code> object that created it.
-     * <P>
-     * This method applies to a <code>RowSet</code> object only while it is
-     * connected to a database using a JDBC driver.
-     * For connected <code>RowSet</code> implementations such as
-     * <code>JdbcRowSet</code>, this method has a direct and immediate effect
-     * on the underlying JDBC driver.
-     * <P>
-     * A <code>RowSet</code> object may use this method at any time to change
-     * its setting for the fetch size.
-     * <p>
-     * For <code>RowSet</code> implementations such as
-     * <code>CachedRowSet</code>, which operate in a disconnected environment,
-     * the <code>SyncProvider</code> object being used
-     * may leverage the fetch size to poll the data source and
-     * retrieve a number of rows that do not exceed the fetch size and that may
-     * form a subset of the actual rows returned by the original query. This is
-     * an implementation variance determined by the specific <code>SyncProvider</code>
-     * object employed by the disconnected <code>RowSet</code> object.
-     * <P>
-     *
-     * @param rows the number of rows to fetch; <code>0</code> to let the
-     *        driver decide what the best fetch size is; must not be less
-     *        than <code>0</code> or more than the maximum number of rows
-     *        allowed for this <code>RowSet</code> object (the number returned
-     *        by a call to the method {@link #getMaxRows})
-     * @throws SQLException if the specified fetch size is less than <code>0</code>
-     *        or more than the limit for the maximum number of rows
-     * @see #getFetchSize
-     */
-    public void setFetchSize(int rows) throws SQLException {
-        //Added this checking as maxRows can be 0 when this function is called
-        //maxRows = 0 means rowset can hold any number of rows, os this checking
-        // is needed to take care of this condition.
-        if (getMaxRows() == 0 && rows >= 0)  {
-            fetchSize = rows;
-            return;
-        }
-        if ((rows < 0) || (rows > getMaxRows())) {
-            throw new SQLException("Invalid fetch size set. Cannot be of " +
-            "value: " + rows);
-        }
-        fetchSize = rows;
-    }
-
-    /**
-     * Returns the fetch size for this <code>RowSet</code> object. The default
-     * value is zero.
-     *
-     * @return the number of rows suggested as the fetch size when this <code>RowSet</code> object
-     *     needs more rows from the database
-     * @throws SQLException if an error occurs determining the number of rows in the
-     *     current fetch size
-     * @see #setFetchSize
-     */
-    public int getFetchSize() throws SQLException {
-        return fetchSize;
-    }
-
-    /**
-     * Returns the concurrency for this <code>RowSet</code> object.
-     * The default is <code>CONCUR_UPDATABLE</code> for both connected and
-     * disconnected <code>RowSet</code> objects.
-     * <P>
-     * An application can call the method <code>setConcurrency</code> at any time
-     * to change a <code>RowSet</code> object's concurrency.
-     * <p>
-     * @return the concurrency type for this <code>RowSet</code>
-     *     object, which must be one of the following:
-     *     <code>ResultSet.CONCUR_READ_ONLY</code> or
-     *     <code>ResultSet.CONCUR_UPDATABLE</code>
-     * @throws SQLException if an error occurs getting the concurrency
-     *     of this <code>RowSet</code> object
-     * @see #setConcurrency
-     * @see #isReadOnly
-     */
-    public int getConcurrency() throws SQLException {
-        return concurrency;
-    }
-
-    //-----------------------------------------------------------------------
-    // Parameters
-    //-----------------------------------------------------------------------
-
-    /**
-     * Checks the given index to see whether it is less than <code>1</code> and
-     * throws an <code>SQLException</code> object if it is.
-     * <P>
-     * This method is called by many methods internally; it is never
-     * called by an application directly.
-     *
-     * @param idx an <code>int</code> indicating which parameter is to be
-     *     checked; the first parameter is <code>1</code>
-     * @throws SQLException if the parameter is less than <code>1</code>
-     */
-    private void checkParamIndex(int idx) throws SQLException {
-        if ((idx < 1)) {
-            throw new SQLException("Invalid Parameter Index");
-        }
-    }
-
-    //---------------------------------------------------------------------
-    // setter methods for setting the parameters in a <code>RowSet</code> object's command
-    //---------------------------------------------------------------------
-
-    /**
-     * Sets the designated parameter to SQL <code>NULL</code>.
-     * Note that the parameter's SQL type must be specified using one of the
-         * type codes defined in <code>java.sql.Types</code>.  This SQL type is
-     * specified in the second parameter.
-     * <p>
-     * Note that the second parameter tells the DBMS the data type of the value being
-     * set to <code>NULL</code>. Some DBMSs require this information, so it is required
-     * in order to make code more portable.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <P>
-     * Calls made to the method <code>getParams</code> after this version of
-     * <code>setNull</code>
-     * has been called will return an <code>Object</code> array containing the parameter values that
-     * have been set.  In that array, the element that represents the values
-     * set with this method will itself be an array. The first element of that array
-     * is <code>null</code>.
-     * The second element is the value set for <i>sqlType</i>.
-     * The parameter number is indicated by an element's position in the array
-     * returned by the method <code>getParams</code>,
-     * with the first element being the value for the first placeholder parameter, the
-     * second element being the value for the second placeholder parameter, and so on.
-     * In other words, if the second placeholder parameter is being set to
-     * <code>null</code>, the array containing it will be the second element in
-     * the array returned by <code>getParams</code>.
-     * <P>
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param sqlType an <code>int</code> that is one of the SQL type codes
-     *        defined in the class {@link java.sql.Types}. If a non-standard
-     *        <i>sqlType</i> is supplied, this method will not throw a
-     *        <code>SQLException</code>. This allows implicit support for
-     *        non-standard SQL types.
-     * @throws SQLException if a database access error occurs or the given
-     *        parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setNull(int parameterIndex, int sqlType) throws SQLException {
-        Object nullVal[];
-        checkParamIndex(parameterIndex);
-
-        nullVal = new Object[2];
-        nullVal[0] = null;
-        nullVal[1] = Integer.valueOf(sqlType);
-
-       if (params == null){
-            throw new SQLException("Set initParams() before setNull");
-       }
-
-        params.put(Integer.valueOf(parameterIndex - 1), nullVal);
-    }
-
-    /**
-     * Sets the designated parameter to SQL <code>NULL</code>.
-     *
-     * Although this version of the  method <code>setNull</code> is intended
-     * for user-defined
-     * and <code>REF</code> parameters, this method may be used to set a null
-     * parameter for any JDBC type. The following are user-defined types:
-     * <code>STRUCT</code>, <code>DISTINCT</code>, and <code>JAVA_OBJECT</code>,
-     * and named array types.
-     *
-     * <P><B>Note:</B> To be portable, applications must give the
-     * SQL type code and the fully qualified SQL type name when specifying
-     * a <code>NULL</code> user-defined or <code>REF</code> parameter.
-     * In the case of a user-defined type, the name is the type name of
-     * the parameter itself.  For a <code>REF</code> parameter, the name is
-     * the type name of the referenced type.  If a JDBC technology-enabled
-     * driver does not need the type code or type name information,
-     * it may ignore it.
-     * <P>
-     * If the parameter does not have a user-defined or <code>REF</code> type,
-     * the given <code>typeName</code> parameter is ignored.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <P>
-     * Calls made to the method <code>getParams</code> after this version of
-     * <code>setNull</code>
-     * has been called will return an <code>Object</code> array containing the parameter values that
-     * have been set.  In that array, the element that represents the values
-     * set with this method will itself be an array. The first element of that array
-     * is <code>null</code>.
-     * The second element is the value set for <i>sqlType</i>, and the third
-     * element is the value set for <i>typeName</i>.
-     * The parameter number is indicated by an element's position in the array
-     * returned by the method <code>getParams</code>,
-     * with the first element being the value for the first placeholder parameter, the
-     * second element being the value for the second placeholder parameter, and so on.
-     * In other words, if the second placeholder parameter is being set to
-     * <code>null</code>, the array containing it will be the second element in
-     * the array returned by <code>getParams</code>.
-     * <P>
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param sqlType a value from <code>java.sql.Types</code>
-     * @param typeName the fully qualified name of an SQL user-defined type,
-     *                 which is ignored if the parameter is not a user-defined
-     *                 type or <code>REF</code> value
-     * @throws SQLException if an error occurs or the given parameter index
-     *            is out of bounds
-     * @see #getParams
-     */
-    public void setNull(int parameterIndex, int sqlType, String typeName)
-        throws SQLException {
-
-        Object nullVal[];
-        checkParamIndex(parameterIndex);
-
-        nullVal = new Object[3];
-        nullVal[0] = null;
-        nullVal[1] = Integer.valueOf(sqlType);
-        nullVal[2] = typeName;
-
-       if(params == null){
-            throw new SQLException("Set initParams() before setNull");
-       }
-
-        params.put(Integer.valueOf(parameterIndex - 1), nullVal);
-    }
-
-
-    /**
-     * Sets the designated parameter to the given <code>boolean</code> in the
-     * Java programming language.  The driver converts this to an SQL
-     * <code>BIT</code> value when it sends it to the database.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code>, <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <p>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the parameter value
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setBoolean(int parameterIndex, boolean x) throws SQLException {
-        checkParamIndex(parameterIndex);
-
-       if(params == null){
-            throw new SQLException("Set initParams() before setNull");
-       }
-
-        params.put(Integer.valueOf(parameterIndex - 1), Boolean.valueOf(x));
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>byte</code> in the Java
-     * programming language.  The driver converts this to an SQL
-     * <code>TINYINT</code> value when it sends it to the database.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <p>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the parameter value
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setByte(int parameterIndex, byte x) throws SQLException {
-        checkParamIndex(parameterIndex);
-
-       if(params == null){
-            throw new SQLException("Set initParams() before setByte");
-       }
-
-        params.put(Integer.valueOf(parameterIndex - 1), Byte.valueOf(x));
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>short</code> in the
-     * Java programming language.  The driver converts this to an SQL
-     * <code>SMALLINT</code> value when it sends it to the database.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <p>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <p>
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the parameter value
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setShort(int parameterIndex, short x) throws SQLException {
-        checkParamIndex(parameterIndex);
-
-        if(params == null){
-             throw new SQLException("Set initParams() before setShort");
-        }
-
-        params.put(Integer.valueOf(parameterIndex - 1), Short.valueOf(x));
-    }
-
-    /**
-     * Sets the designated parameter to an <code>int</code> in the Java
-     * programming language.  The driver converts this to an SQL
-     * <code>INTEGER</code> value when it sends it to the database.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the parameter value
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setInt(int parameterIndex, int x) throws SQLException {
-        checkParamIndex(parameterIndex);
-        if(params == null){
-             throw new SQLException("Set initParams() before setInt");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), Integer.valueOf(x));
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>long</code> in the Java
-     * programming language.  The driver converts this to an SQL
-     * <code>BIGINT</code> value when it sends it to the database.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the parameter value
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setLong(int parameterIndex, long x) throws SQLException {
-        checkParamIndex(parameterIndex);
-        if(params == null){
-             throw new SQLException("Set initParams() before setLong");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), Long.valueOf(x));
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>float</code> in the
-     * Java programming language.  The driver converts this to an SQL
-     * <code>FLOAT</code> value when it sends it to the database.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the parameter value
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setFloat(int parameterIndex, float x) throws SQLException {
-        checkParamIndex(parameterIndex);
-        if(params == null){
-             throw new SQLException("Set initParams() before setFloat");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), new Float(x));
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>double</code> in the
-     * Java programming language.  The driver converts this to an SQL
-     * <code>DOUBLE</code> value when it sends it to the database.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * S
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the parameter value
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setDouble(int parameterIndex, double x) throws SQLException {
-        checkParamIndex(parameterIndex);
-        if(params == null){
-             throw new SQLException("Set initParams() before setDouble");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), new Double(x));
-    }
-
-    /**
-     * Sets the designated parameter to the given
-     * <code>java.lang.BigDecimal</code> value.  The driver converts this to
-     * an SQL <code>NUMERIC</code> value when it sends it to the database.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * Note: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the parameter value
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setBigDecimal(int parameterIndex, java.math.BigDecimal x) throws SQLException {
-        checkParamIndex(parameterIndex);
-        if(params == null){
-             throw new SQLException("Set initParams() before setBigDecimal");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), x);
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>String</code>
-     * value.  The driver converts this to an SQL
-     * <code>VARCHAR</code> or <code>LONGVARCHAR</code> value
-     * (depending on the argument's size relative to the driver's limits
-     * on <code>VARCHAR</code> values) when it sends it to the database.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <p>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <p>
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the parameter value
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setString(int parameterIndex, String x) throws SQLException {
-        checkParamIndex(parameterIndex);
-        if(params == null){
-             throw new SQLException("Set initParams() before setString");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), x);
-    }
-
-    /**
-     * Sets the designated parameter to the given array of bytes.
-     * The driver converts this to an SQL
-     * <code>VARBINARY</code> or <code>LONGVARBINARY</code> value
-     * (depending on the argument's size relative to the driver's limits
-     * on <code>VARBINARY</code> values) when it sends it to the database.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <p>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the parameter value
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setBytes(int parameterIndex, byte x[]) throws SQLException {
-        checkParamIndex(parameterIndex);
-        if(params == null){
-             throw new SQLException("Set initParams() before setBytes");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), x);
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>java.sql.Date</code>
-     * value. The driver converts this to an SQL
-     * <code>DATE</code> value when it sends it to the database.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <P>
-     * Calls made to the method <code>getParams</code> after this version
-     * of <code>setDate</code>
-     * has been called will return an array with the value to be set for
-     * placeholder parameter number <i>parameterIndex</i> being the <code>Date</code>
-     * object supplied as the second parameter.
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the parameter value
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setDate(int parameterIndex, java.sql.Date x) throws SQLException {
-        checkParamIndex(parameterIndex);
-
-        if(params == null){
-             throw new SQLException("Set initParams() before setDate");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), x);
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>java.sql.Time</code>
-     * value.  The driver converts this to an SQL <code>TIME</code> value
-     * when it sends it to the database.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <P>
-     * Calls made to the method <code>getParams</code> after this version
-     * of the method <code>setTime</code>
-     * has been called will return an array of the parameters that have been set.
-     * The parameter to be set for parameter placeholder number <i>parameterIndex</i>
-     * will be the <code>Time</code> object that was set as the second parameter
-     * to this method.
-     * <P>
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x a <code>java.sql.Time</code> object, which is to be set as the value
-     *              for placeholder parameter <i>parameterIndex</i>
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setTime(int parameterIndex, java.sql.Time x) throws SQLException {
-        checkParamIndex(parameterIndex);
-        if(params == null){
-             throw new SQLException("Set initParams() before setTime");
-        }
-
-        params.put(Integer.valueOf(parameterIndex - 1), x);
-    }
-
-    /**
-     * Sets the designated parameter to the given
-     * <code>java.sql.Timestamp</code> value.
-     * The driver converts this to an SQL <code>TIMESTAMP</code> value when it
-     * sends it to the database.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <P>
-     * Calls made to the method <code>getParams</code> after this version of
-     * <code>setTimestamp</code>
-     * has been called will return an array with the value for parameter placeholder
-     * number <i>parameterIndex</i> being the <code>Timestamp</code> object that was
-     * supplied as the second parameter to this method.
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x a <code>java.sql.Timestamp</code> object
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setTimestamp(int parameterIndex, java.sql.Timestamp x) throws SQLException {
-        checkParamIndex(parameterIndex);
-        if(params == null){
-             throw new SQLException("Set initParams() before setTimestamp");
-        }
-
-        params.put(Integer.valueOf(parameterIndex - 1), x);
-    }
-
-    /**
-     * Sets the designated parameter to the given
-     * <code>java.io.InputStream</code> object,
-     * which will have the specified number of bytes.
-     * The contents of the stream will be read and sent to the database.
-     * This method throws an <code>SQLException</code> object if the number of bytes
-     * read and sent to the database is not equal to <i>length</i>.
-     * <P>
-     * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
-     * parameter, it may be more practical to send it via a
-     * <code>java.io.InputStream</code> object. A JDBC technology-enabled
-     * driver will read the data from the stream as needed until it reaches
-     * end-of-file. The driver will do any necessary conversion from ASCII to
-     * the database <code>CHAR</code> format.
-     *
-     * <P><B>Note:</B> This stream object can be either a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * Note: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <P>
-     * Calls made to the method <code>getParams</code> after <code>setAsciiStream</code>
-     * has been called will return an array containing the parameter values that
-     * have been set.  The element in the array that represents the values
-     * set with this method will itself be an array. The first element of that array
-     * is the given <code>java.io.InputStream</code> object.
-     * The second element is the value set for <i>length</i>.
-     * The third element is an internal <code>BaseRowSet</code> constant
-     * specifying that the stream passed to this method is an ASCII stream.
-     * The parameter number is indicated by an element's position in the array
-     * returned by the method <code>getParams</code>,
-     * with the first element being the value for the first placeholder parameter, the
-     * second element being the value for the second placeholder parameter, and so on.
-     * In other words, if the input stream being set is the value for the second
-     * placeholder parameter, the array containing it will be the second element in
-     * the array returned by <code>getParams</code>.
-     * <P>
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is element number <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the Java input stream that contains the ASCII parameter value
-     * @param length the number of bytes in the stream. This is the number of bytes
-     *       the driver will send to the DBMS; lengths of 0 or less are
-     *       are undefined but will cause an invalid length exception to be
-     *       thrown in the underlying JDBC driver.
-     * @throws SQLException if an error occurs, the parameter index is out of bounds,
-     *       or when connected to a data source, the number of bytes the driver reads
-     *       and sends to the database is not equal to the number of bytes specified
-     *       in <i>length</i>
-     * @see #getParams
-     */
-    public void setAsciiStream(int parameterIndex, java.io.InputStream x, int length) throws SQLException {
-        Object asciiStream[];
-        checkParamIndex(parameterIndex);
-
-        asciiStream = new Object[3];
-        asciiStream[0] = x;
-        asciiStream[1] = Integer.valueOf(length);
-        asciiStream[2] = Integer.valueOf(ASCII_STREAM_PARAM);
-
-        if(params == null){
-             throw new SQLException("Set initParams() before setAsciiStream");
-        }
-
-        params.put(Integer.valueOf(parameterIndex - 1), asciiStream);
-    }
-
-  /**
-   * Sets the designated parameter in this <code>RowSet</code> object's command
-   * to the given input stream.
-   * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
-   * parameter, it may be more practical to send it via a
-   * <code>java.io.InputStream</code>. Data will be read from the stream
-   * as needed until end-of-file is reached.  The JDBC driver will
-   * do any necessary conversion from ASCII to the database char format.
-   *
-   * <P><B>Note:</B> This stream object can either be a standard
-   * Java stream object or your own subclass that implements the
-   * standard interface.
-   * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-   * it might be more efficient to use a version of
-   * <code>setAsciiStream</code> which takes a length parameter.
-   *
-   * @param parameterIndex the first parameter is 1, the second is 2, ...
-   * @param x the Java input stream that contains the ASCII parameter value
-   * @exception SQLException if a database access error occurs or
-   * this method is called on a closed <code>PreparedStatement</code>
-   * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-   * @since 1.6
-   */
-  public void setAsciiStream(int parameterIndex, java.io.InputStream x)
-                      throws SQLException {
-      throw new SQLFeatureNotSupportedException("Feature not supported");
-  }
-
-    /**
-     * Sets the designated parameter to the given <code>java.io.InputStream</code>
-     * object, which will have the specified number of bytes.
-     * The contents of the stream will be read and sent to the database.
-     * This method throws an <code>SQLException</code> object if the number of bytes
-     * read and sent to the database is not equal to <i>length</i>.
-     * <P>
-     * When a very large binary value is input to a
-     * <code>LONGVARBINARY</code> parameter, it may be more practical
-     * to send it via a <code>java.io.InputStream</code> object.
-     * A JDBC technology-enabled driver will read the data from the
-     * stream as needed until it reaches end-of-file.
-     *
-     * <P><B>Note:</B> This stream object can be either a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     *<P>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <P>
-     * Calls made to the method <code>getParams</code> after <code>setBinaryStream</code>
-     * has been called will return an array containing the parameter values that
-     * have been set.  In that array, the element that represents the values
-     * set with this method will itself be an array. The first element of that array
-     * is the given <code>java.io.InputStream</code> object.
-     * The second element is the value set for <i>length</i>.
-     * The third element is an internal <code>BaseRowSet</code> constant
-     * specifying that the stream passed to this method is a binary stream.
-     * The parameter number is indicated by an element's position in the array
-     * returned by the method <code>getParams</code>,
-     * with the first element being the value for the first placeholder parameter, the
-     * second element being the value for the second placeholder parameter, and so on.
-     * In other words, if the input stream being set is the value for the second
-     * placeholder parameter, the array containing it will be the second element in
-     * the array returned by <code>getParams</code>.
-     * <P>
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is element number <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the input stream that contains the binary value to be set
-     * @param length the number of bytes in the stream; lengths of 0 or less are
-     *         are undefined but will cause an invalid length exception to be
-     *         thrown in the underlying JDBC driver.
-     * @throws SQLException if an error occurs, the parameter index is out of bounds,
-     *         or when connected to a data source, the number of bytes the driver
-     *         reads and sends to the database is not equal to the number of bytes
-     *         specified in <i>length</i>
-     * @see #getParams
-     */
-    public void setBinaryStream(int parameterIndex, java.io.InputStream x, int length) throws SQLException {
-        Object binaryStream[];
-        checkParamIndex(parameterIndex);
-
-        binaryStream = new Object[3];
-        binaryStream[0] = x;
-        binaryStream[1] = Integer.valueOf(length);
-        binaryStream[2] = Integer.valueOf(BINARY_STREAM_PARAM);
-        if(params == null){
-             throw new SQLException("Set initParams() before setBinaryStream");
-        }
-
-        params.put(Integer.valueOf(parameterIndex - 1), binaryStream);
-    }
-
-
-   /**
-   * Sets the designated parameter in this <code>RowSet</code> object's command
-   * to the given input stream.
-   * When a very large binary value is input to a <code>LONGVARBINARY</code>
-   * parameter, it may be more practical to send it via a
-   * <code>java.io.InputStream</code> object. The data will be read from the
-   * stream as needed until end-of-file is reached.
-   *
-   * <P><B>Note:</B> This stream object can either be a standard
-   * Java stream object or your own subclass that implements the
-   * standard interface.
-   * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-   * it might be more efficient to use a version of
-   * <code>setBinaryStream</code> which takes a length parameter.
-   *
-   * @param parameterIndex the first parameter is 1, the second is 2, ...
-   * @param x the java input stream which contains the binary parameter value
-   * @exception SQLException if a database access error occurs or
-   * this method is called on a closed <code>PreparedStatement</code>
-   * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-   * @since 1.6
-   */
-  public void setBinaryStream(int parameterIndex, java.io.InputStream x)
-                              throws SQLException {
-      throw new SQLFeatureNotSupportedException("Feature not supported");
-  }
-
-
-    /**
-     * Sets the designated parameter to the given
-     * <code>java.io.InputStream</code> object, which will have the specified
-     * number of bytes. The contents of the stream will be read and sent
-     * to the database.
-     * This method throws an <code>SQLException</code> if the number of bytes
-     * read and sent to the database is not equal to <i>length</i>.
-     * <P>
-     * When a very large Unicode value is input to a
-     * <code>LONGVARCHAR</code> parameter, it may be more practical
-     * to send it via a <code>java.io.InputStream</code> object.
-     * A JDBC technology-enabled driver will read the data from the
-     * stream as needed, until it reaches end-of-file.
-     * The driver will do any necessary conversion from Unicode to the
-     * database <code>CHAR</code> format.
-     * The byte format of the Unicode stream must be Java UTF-8, as
-     * defined in the Java Virtual Machine Specification.
-     *
-     * <P><B>Note:</B> This stream object can be either a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <P>
-     * This method is deprecated; the method <code>getCharacterStream</code>
-     * should be used in its place.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Calls made to the method <code>getParams</code> after <code>setUnicodeStream</code>
-     * has been called will return an array containing the parameter values that
-     * have been set.  In that array, the element that represents the values
-     * set with this method will itself be an array. The first element of that array
-     * is the given <code>java.io.InputStream</code> object.
-     * The second element is the value set for <i>length</i>.
-     * The third element is an internal <code>BaseRowSet</code> constant
-     * specifying that the stream passed to this method is a Unicode stream.
-     * The parameter number is indicated by an element's position in the array
-     * returned by the method <code>getParams</code>,
-     * with the first element being the value for the first placeholder parameter, the
-     * second element being the value for the second placeholder parameter, and so on.
-     * In other words, if the input stream being set is the value for the second
-     * placeholder parameter, the array containing it will be the second element in
-     * the array returned by <code>getParams</code>.
-     * <P>
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is element number <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the <code>java.io.InputStream</code> object that contains the
-     *          UNICODE parameter value
-     * @param length the number of bytes in the input stream
-     * @throws SQLException if an error occurs, the parameter index is out of bounds,
-     *         or the number of bytes the driver reads and sends to the database is
-     *         not equal to the number of bytes specified in <i>length</i>
-     * @deprecated getCharacterStream should be used in its place
-     * @see #getParams
-     */
-
-    public void setUnicodeStream(int parameterIndex, java.io.InputStream x, int length) throws SQLException {
-        Object unicodeStream[];
-        checkParamIndex(parameterIndex);
-
-        unicodeStream = new Object[3];
-        unicodeStream[0] = x;
-        unicodeStream[1] = Integer.valueOf(length);
-        unicodeStream[2] = Integer.valueOf(UNICODE_STREAM_PARAM);
-        if(params == null){
-             throw new SQLException("Set initParams() before setUnicodeStream");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), unicodeStream);
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>java.io.Reader</code>
-     * object, which will have the specified number of characters. The
-     * contents of the reader will be read and sent to the database.
-     * This method throws an <code>SQLException</code> if the number of bytes
-     * read and sent to the database is not equal to <i>length</i>.
-     * <P>
-     * When a very large Unicode value is input to a
-     * <code>LONGVARCHAR</code> parameter, it may be more practical
-     * to send it via a <code>Reader</code> object.
-     * A JDBC technology-enabled driver will read the data from the
-     * stream as needed until it reaches end-of-file.
-     * The driver will do any necessary conversion from Unicode to the
-     * database <code>CHAR</code> format.
-     * The byte format of the Unicode stream must be Java UTF-8, as
-     * defined in the Java Virtual Machine Specification.
-     *
-     * <P><B>Note:</B> This stream object can be either a standard
-     * Java stream object or your own subclass that implements the
-     * standard interface.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <P>
-     * Calls made to the method <code>getParams</code> after
-     * <code>setCharacterStream</code>
-     * has been called will return an array containing the parameter values that
-     * have been set.  In that array, the element that represents the values
-     * set with this method will itself be an array. The first element of that array
-     * is the given <code>java.io.Reader</code> object.
-     * The second element is the value set for <i>length</i>.
-     * The parameter number is indicated by an element's position in the array
-     * returned by the method <code>getParams</code>,
-     * with the first element being the value for the first placeholder parameter, the
-     * second element being the value for the second placeholder parameter, and so on.
-     * In other words, if the reader being set is the value for the second
-     * placeholder parameter, the array containing it will be the second element in
-     * the array returned by <code>getParams</code>.
-     * <P>
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is element number <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param reader the <code>Reader</code> object that contains the
-     *        Unicode data
-     * @param length the number of characters in the stream; lengths of 0 or
-     *        less are undefined but will cause an invalid length exception to
-     *        be thrown in the underlying JDBC driver.
-     * @throws SQLException if an error occurs, the parameter index is out of bounds,
-     *        or when connected to a data source, the number of bytes the driver
-     *        reads and sends to the database is not equal to the number of bytes
-     *        specified in <i>length</i>
-     * @see #getParams
-     */
-    public void setCharacterStream(int parameterIndex, Reader reader, int length) throws SQLException {
-        Object charStream[];
-        checkParamIndex(parameterIndex);
-
-        charStream = new Object[2];
-        charStream[0] = reader;
-        charStream[1] = Integer.valueOf(length);
-        if(params == null){
-             throw new SQLException("Set initParams() before setCharacterStream");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), charStream);
-    }
-
-   /**
-   * Sets the designated parameter in this <code>RowSet</code> object's command
-   * to the given <code>Reader</code>
-   * object.
-   * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-   * parameter, it may be more practical to send it via a
-   * <code>java.io.Reader</code> object. The data will be read from the stream
-   * as needed until end-of-file is reached.  The JDBC driver will
-   * do any necessary conversion from UNICODE to the database char format.
-   *
-   * <P><B>Note:</B> This stream object can either be a standard
-   * Java stream object or your own subclass that implements the
-   * standard interface.
-   * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-   * it might be more efficient to use a version of
-   * <code>setCharacterStream</code> which takes a length parameter.
-   *
-   * @param parameterIndex the first parameter is 1, the second is 2, ...
-   * @param reader the <code>java.io.Reader</code> object that contains the
-   *        Unicode data
-   * @exception SQLException if a database access error occurs or
-   * this method is called on a closed <code>PreparedStatement</code>
-   * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-   * @since 1.6
-   */
-  public void setCharacterStream(int parameterIndex,
-                          java.io.Reader reader) throws SQLException {
-      throw new SQLFeatureNotSupportedException("Feature not supported");
-  }
-
-    /**
-     * Sets the designated parameter to an <code>Object</code> in the Java
-     * programming language. The second parameter must be an
-     * <code>Object</code> type.  For integral values, the
-     * <code>java.lang</code> equivalent
-     * objects should be used. For example, use the class <code>Integer</code>
-     * for an <code>int</code>.
-     * <P>
-     * The driver converts this object to the specified
-     * target SQL type before sending it to the database.
-     * If the object has a custom mapping (is of a class implementing
-     * <code>SQLData</code>), the driver should call the method
-     * <code>SQLData.writeSQL</code> to write the object to the SQL
-     * data stream. If, on the other hand, the object is of a class
-     * implementing <code>Ref</code>, <code>Blob</code>, <code>Clob</code>,
-     * <code>Struct</code>, or <code>Array</code>,
-     * the driver should pass it to the database as a value of the
-     * corresponding SQL type.
-     * <P>
-     * <p>Note that this method may be used to pass database-
-     * specific abstract data types.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <P>
-     * Calls made to the method <code>getParams</code> after this version of
-     * <code>setObject</code>
-     * has been called will return an array containing the parameter values that
-     * have been set.  In that array, the element that represents the values
-     * set with this method will itself be an array. The first element of that array
-     * is the given <code>Object</code> instance, and the
-     * second element is the value set for <i>targetSqlType</i>.  The
-     * third element is the value set for <i>scale</i>, which the driver will
-     * ignore if the type of the object being set is not
-     * <code>java.sql.Types.NUMERIC</code> or <code>java.sql.Types.DECIMAL</code>.
-     * The parameter number is indicated by an element's position in the array
-     * returned by the method <code>getParams</code>,
-     * with the first element being the value for the first placeholder parameter, the
-     * second element being the value for the second placeholder parameter, and so on.
-     * In other words, if the object being set is the value for the second
-     * placeholder parameter, the array containing it will be the second element in
-     * the array returned by <code>getParams</code>.
-     *<P>
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is element number <i>parameterIndex</i> -1.
-     *
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the <code>Object</code> containing the input parameter value;
-     *        must be an <code>Object</code> type
-     * @param targetSqlType the SQL type (as defined in <code>java.sql.Types</code>)
-     *        to be sent to the database. The <code>scale</code> argument may
-     *        further qualify this type. If a non-standard <i>targetSqlType</i>
-     *        is supplied, this method will not throw a <code>SQLException</code>.
-     *        This allows implicit support for non-standard SQL types.
-     * @param scale for the types <code>java.sql.Types.DECIMAL</code> and
-     *        <code>java.sql.Types.NUMERIC</code>, this is the number
-     *        of digits after the decimal point.  For all other types, this
-     *        value will be ignored.
-     * @throws SQLException if an error occurs or the parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setObject(int parameterIndex, Object x, int targetSqlType, int scale) throws SQLException {
-        Object obj[];
-        checkParamIndex(parameterIndex);
-
-        obj = new Object[3];
-        obj[0] = x;
-        obj[1] = Integer.valueOf(targetSqlType);
-        obj[2] = Integer.valueOf(scale);
-        if(params == null){
-             throw new SQLException("Set initParams() before setObject");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), obj);
-    }
-
-    /**
-     * Sets the value of the designated parameter with the given
-     * <code>Object</code> value.
-     * This method is like <code>setObject(int parameterIndex, Object x, int
-     * targetSqlType, int scale)</code> except that it assumes a scale of zero.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <P>
-     * Calls made to the method <code>getParams</code> after this version of
-     * <code>setObject</code>
-     * has been called will return an array containing the parameter values that
-     * have been set.  In that array, the element that represents the values
-     * set with this method will itself be an array. The first element of that array
-     * is the given <code>Object</code> instance.
-     * The second element is the value set for <i>targetSqlType</i>.
-     * The parameter number is indicated by an element's position in the array
-     * returned by the method <code>getParams</code>,
-     * with the first element being the value for the first placeholder parameter, the
-     * second element being the value for the second placeholder parameter, and so on.
-     * In other words, if the object being set is the value for the second
-     * placeholder parameter, the array containing it will be the second element in
-     * the array returned by <code>getParams</code>.
-     * <P>
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is element number <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the <code>Object</code> containing the input parameter value;
-     *        must be an <code>Object</code> type
-     * @param targetSqlType the SQL type (as defined in <code>java.sql.Types</code>)
-     *        to be sent to the database. If a non-standard <i>targetSqlType</i>
-     *        is supplied, this method will not throw a <code>SQLException</code>.
-     *        This allows implicit support for non-standard SQL types.
-     * @throws SQLException if an error occurs or the parameter index
-     *        is out of bounds
-     * @see #getParams
-     */
-    public void setObject(int parameterIndex, Object x, int targetSqlType) throws SQLException {
-        Object obj[];
-        checkParamIndex(parameterIndex);
-
-        obj = new Object[2];
-        obj[0] = x;
-        obj[1] = Integer.valueOf(targetSqlType);
-        if (params == null){
-             throw new SQLException("Set initParams() before setObject");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), obj);
-    }
-
-    /**
-     * Sets the designated parameter to an <code>Object</code> in the Java
-     * programming language. The second parameter must be an
-     * <code>Object</code>
-     * type.  For integral values, the <code>java.lang</code> equivalent
-     * objects should be used. For example, use the class <code>Integer</code>
-     * for an <code>int</code>.
-     * <P>
-     * The JDBC specification defines a standard mapping from
-     * Java <code>Object</code> types to SQL types.  The driver will
-     * use this standard mapping to  convert the given object
-     * to its corresponding SQL type before sending it to the database.
-     * If the object has a custom mapping (is of a class implementing
-     * <code>SQLData</code>), the driver should call the method
-     * <code>SQLData.writeSQL</code> to write the object to the SQL
-     * data stream.
-     * <P>
-     * If, on the other hand, the object is of a class
-     * implementing <code>Ref</code>, <code>Blob</code>, <code>Clob</code>,
-     * <code>Struct</code>, or <code>Array</code>,
-     * the driver should pass it to the database as a value of the
-     * corresponding SQL type.
-     * <P>
-     * This method throws an exception if there
-     * is an ambiguity, for example, if the object is of a class
-     * implementing more than one interface.
-     * <P>
-     * Note that this method may be used to pass database-specific
-     * abstract data types.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <p>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <P>
-     * After this method has been called, a call to the
-     * method <code>getParams</code>
-     * will return an object array of the current command parameters, which will
-     * include the <code>Object</code> set for placeholder parameter number
-     * <code>parameterIndex</code>.
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is element number <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x the object containing the input parameter value
-     * @throws SQLException if an error occurs the
-     *                         parameter index is out of bounds, or there
-     *                         is ambiguity in the implementation of the
-     *                         object being set
-     * @see #getParams
-     */
-    public void setObject(int parameterIndex, Object x) throws SQLException {
-        checkParamIndex(parameterIndex);
-        if (params == null) {
-             throw new SQLException("Set initParams() before setObject");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), x);
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>Ref</code> object in
-     * the Java programming language.  The driver converts this to an SQL
-     * <code>REF</code> value when it sends it to the database. Internally, the
-     * <code>Ref</code> is represented as a <code>SerialRef</code> to ensure
-     * serializability.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <p>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <p>
-     * After this method has been called, a call to the
-     * method <code>getParams</code>
-     * will return an object array of the current command parameters, which will
-     * include the <code>Ref</code> object set for placeholder parameter number
-     * <code>parameterIndex</code>.
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is element number <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param ref a <code>Ref</code> object representing an SQL <code>REF</code>
-     *         value; cannot be null
-     * @throws SQLException if an error occurs; the parameter index is out of
-     *         bounds or the <code>Ref</code> object is <code>null</code>; or
-     *         the <code>Ref</code> object returns a <code>null</code> base type
-     *         name.
-     * @see #getParams
-     * @see javax.sql.rowset.serial.SerialRef
-     */
-    public void setRef (int parameterIndex, Ref ref) throws SQLException {
-        checkParamIndex(parameterIndex);
-        if (params == null) {
-             throw new SQLException("Set initParams() before setRef");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), new SerialRef(ref));
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>Blob</code> object in
-     * the Java programming language.  The driver converts this to an SQL
-     * <code>BLOB</code> value when it sends it to the database. Internally,
-     * the <code>Blob</code> is represented as a <code>SerialBlob</code>
-     * to ensure serializability.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <p>
-     * After this method has been called, a call to the
-     * method <code>getParams</code>
-     * will return an object array of the current command parameters, which will
-     * include the <code>Blob</code> object set for placeholder parameter number
-     * <code>parameterIndex</code>.
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is element number <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x a <code>Blob</code> object representing an SQL
-     *          <code>BLOB</code> value
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     * @see javax.sql.rowset.serial.SerialBlob
-     */
-    public void setBlob (int parameterIndex, Blob x) throws SQLException {
-        checkParamIndex(parameterIndex);
-        if(params == null){
-             throw new SQLException("Set initParams() before setBlob");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), new SerialBlob(x));
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>Clob</code> object in
-     * the Java programming language.  The driver converts this to an SQL
-     * <code>CLOB</code> value when it sends it to the database. Internally, the
-     * <code>Clob</code> is represented as a <code>SerialClob</code> to ensure
-     * serializability.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <p>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <p>
-     * After this method has been called, a call to the
-     * method <code>getParams</code>
-     * will return an object array of the current command parameters, which will
-     * include the <code>Clob</code> object set for placeholder parameter number
-     * <code>parameterIndex</code>.
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is element number <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *     in this <code>RowSet</code> object's command that is to be set.
-     *     The first parameter is 1, the second is 2, and so on; must be
-     *     <code>1</code> or greater
-     * @param x a <code>Clob</code> object representing an SQL
-     *     <code>CLOB</code> value; cannot be null
-     * @throws SQLException if an error occurs; the parameter index is out of
-     *     bounds or the <code>Clob</code> is null
-     * @see #getParams
-     * @see javax.sql.rowset.serial.SerialBlob
-     */
-    public void setClob (int parameterIndex, Clob x) throws SQLException {
-        checkParamIndex(parameterIndex);
-        if(params == null){
-             throw new SQLException("Set initParams() before setClob");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), new SerialClob(x));
-    }
-
-    /**
-     * Sets the designated parameter to an <code>Array</code> object in the
-     * Java programming language.  The driver converts this to an SQL
-     * <code>ARRAY</code> value when it sends it to the database. Internally,
-     * the <code>Array</code> is represented as a <code>SerialArray</code>
-     * to ensure serializability.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * Note: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <p>
-     * After this method has been called, a call to the
-     * method <code>getParams</code>
-     * will return an object array of the current command parameters, which will
-     * include the <code>Array</code> object set for placeholder parameter number
-     * <code>parameterIndex</code>.
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is element number <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param array an <code>Array</code> object representing an SQL
-     *        <code>ARRAY</code> value; cannot be null. The <code>Array</code> object
-     *        passed to this method must return a non-null Object for all
-     *        <code>getArray()</code> method calls. A null value will cause a
-     *        <code>SQLException</code> to be thrown.
-     * @throws SQLException if an error occurs; the parameter index is out of
-     *        bounds or the <code>ARRAY</code> is null
-     * @see #getParams
-     * @see javax.sql.rowset.serial.SerialArray
-     */
-    public void setArray (int parameterIndex, Array array) throws SQLException {
-        checkParamIndex(parameterIndex);
-        if (params == null){
-             throw new SQLException("Set initParams() before setArray");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), new SerialArray(array));
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>java.sql.Date</code>
-     * object.
-     * When the DBMS does not store time zone information, the driver will use
-     * the given <code>Calendar</code> object to construct the SQL <code>DATE</code>
-     * value to send to the database. With a
-     * <code>Calendar</code> object, the driver can calculate the date
-     * taking into account a custom time zone.  If no <code>Calendar</code>
-     * object is specified, the driver uses the time zone of the Virtual Machine
-     * that is running the application.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <P>
-     * Calls made to the method <code>getParams</code> after this version of
-     * <code>setDate</code>
-     * has been called will return an array containing the parameter values that
-     * have been set.  In that array, the element that represents the values
-     * set with this method will itself be an array. The first element of that array
-     * is the given <code>java.sql.Date</code> object.
-     * The second element is the value set for <i>cal</i>.
-     * The parameter number is indicated by an element's position in the array
-     * returned by the method <code>getParams</code>,
-     * with the first element being the value for the first placeholder parameter, the
-     * second element being the value for the second placeholder parameter, and so on.
-     * In other words, if the date being set is the value for the second
-     * placeholder parameter, the array containing it will be the second element in
-     * the array returned by <code>getParams</code>.
-     * <P>
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x a <code>java.sql.Date</code> object representing an SQL
-     *        <code>DATE</code> value
-     * @param cal a <code>java.util.Calendar</code> object to use when
-     *        when constructing the date
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setDate(int parameterIndex, java.sql.Date x, Calendar cal) throws SQLException {
-        Object date[];
-        checkParamIndex(parameterIndex);
-
-        date = new Object[2];
-        date[0] = x;
-        date[1] = cal;
-        if(params == null){
-             throw new SQLException("Set initParams() before setDate");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), date);
-    }
-
-    /**
-     * Sets the designated parameter to the given <code>java.sql.Time</code>
-     * object.  The driver converts this
-     * to an SQL <code>TIME</code> value when it sends it to the database.
-     * <P>
-     * When the DBMS does not store time zone information, the driver will use
-     * the given <code>Calendar</code> object to construct the SQL <code>TIME</code>
-     * value to send to the database. With a
-     * <code>Calendar</code> object, the driver can calculate the date
-     * taking into account a custom time zone.  If no <code>Calendar</code>
-     * object is specified, the driver uses the time zone of the Virtual Machine
-     * that is running the application.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <P>
-     * Calls made to the method <code>getParams</code> after this version of
-     * <code>setTime</code>
-     * has been called will return an array containing the parameter values that
-     * have been set.  In that array, the element that represents the values
-     * set with this method will itself be an array. The first element of that array
-     * is the given <code>java.sql.Time</code> object.
-     * The second element is the value set for <i>cal</i>.
-     * The parameter number is indicated by an element's position in the array
-     * returned by the method <code>getParams</code>,
-     * with the first element being the value for the first placeholder parameter, the
-     * second element being the value for the second placeholder parameter, and so on.
-     * In other words, if the time being set is the value for the second
-     * placeholder parameter, the array containing it will be the second element in
-     * the array returned by <code>getParams</code>.
-     * <P>
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x a <code>java.sql.Time</code> object
-     * @param cal the <code>java.util.Calendar</code> object the driver can use to
-     *         construct the time
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setTime(int parameterIndex, java.sql.Time x, Calendar cal) throws SQLException {
-        Object time[];
-        checkParamIndex(parameterIndex);
-
-        time = new Object[2];
-        time[0] = x;
-        time[1] = cal;
-        if(params == null){
-             throw new SQLException("Set initParams() before setTime");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), time);
-    }
-
-    /**
-     * Sets the designated parameter to the given
-     * <code>java.sql.Timestamp</code> object.  The driver converts this
-     * to an SQL <code>TIMESTAMP</code> value when it sends it to the database.
-     * <P>
-     * When the DBMS does not store time zone information, the driver will use
-     * the given <code>Calendar</code> object to construct the SQL <code>TIMESTAMP</code>
-     * value to send to the database. With a
-     * <code>Calendar</code> object, the driver can calculate the timestamp
-     * taking into account a custom time zone.  If no <code>Calendar</code>
-     * object is specified, the driver uses the time zone of the Virtual Machine
-     * that is running the application.
-     * <P>
-     * The parameter value set by this method is stored internally and
-     * will be supplied as the appropriate parameter in this <code>RowSet</code>
-     * object's command when the method <code>execute</code> is called.
-     * Methods such as <code>execute</code> and <code>populate</code> must be
-     * provided in any class that extends this class and implements one or
-     * more of the standard JSR-114 <code>RowSet</code> interfaces.
-     * <P>
-     * NOTE: <code>JdbcRowSet</code> does not require the <code>populate</code> method
-     * as it is undefined in this class.
-     * <P>
-     * Calls made to the method <code>getParams</code> after this version of
-     * <code>setTimestamp</code>
-     * has been called will return an array containing the parameter values that
-     * have been set.  In that array, the element that represents the values
-     * set with this method will itself be an array. The first element of that array
-     * is the given <code>java.sql.Timestamp</code> object.
-     * The second element is the value set for <i>cal</i>.
-     * The parameter number is indicated by an element's position in the array
-     * returned by the method <code>getParams</code>,
-     * with the first element being the value for the first placeholder parameter, the
-     * second element being the value for the second placeholder parameter, and so on.
-     * In other words, if the timestamp being set is the value for the second
-     * placeholder parameter, the array containing it will be the second element in
-     * the array returned by <code>getParams</code>.
-     * <P>
-     * Note that because the numbering of elements in an array starts at zero,
-     * the array element that corresponds to placeholder parameter number
-     * <i>parameterIndex</i> is <i>parameterIndex</i> -1.
-     *
-     * @param parameterIndex the ordinal number of the placeholder parameter
-     *        in this <code>RowSet</code> object's command that is to be set.
-     *        The first parameter is 1, the second is 2, and so on; must be
-     *        <code>1</code> or greater
-     * @param x a <code>java.sql.Timestamp</code> object
-     * @param cal the <code>java.util.Calendar</code> object the driver can use to
-     *         construct the timestamp
-     * @throws SQLException if an error occurs or the
-     *                         parameter index is out of bounds
-     * @see #getParams
-     */
-    public void setTimestamp(int parameterIndex, java.sql.Timestamp x, Calendar cal) throws SQLException {
-        Object timestamp[];
-        checkParamIndex(parameterIndex);
-
-        timestamp = new Object[2];
-        timestamp[0] = x;
-        timestamp[1] = cal;
-        if(params == null){
-             throw new SQLException("Set initParams() before setTimestamp");
-        }
-        params.put(Integer.valueOf(parameterIndex - 1), timestamp);
-    }
-
-    /**
-     * Clears all of the current parameter values in this <code>RowSet</code>
-     * object's internal representation of the parameters to be set in
-     * this <code>RowSet</code> object's command when it is executed.
-     * <P>
-     * In general, parameter values remain in force for repeated use in
-     * this <code>RowSet</code> object's command. Setting a parameter value with the
-     * setter methods automatically clears the value of the
-     * designated parameter and replaces it with the new specified value.
-     * <P>
-     * This method is called internally by the <code>setCommand</code>
-     * method to clear all of the parameters set for the previous command.
-     * <P>
-     * Furthermore, this method differs from the <code>initParams</code>
-     * method in that it maintains the schema of the <code>RowSet</code> object.
-     *
-     * @throws SQLException if an error occurs clearing the parameters
-     */
-    public void clearParameters() throws SQLException {
-        params.clear();
-    }
-
-    /**
-     * Retrieves an array containing the parameter values (both Objects and
-     * primitives) that have been set for this
-     * <code>RowSet</code> object's command and throws an <code>SQLException</code> object
-     * if all parameters have not been set.   Before the command is sent to the
-     * DBMS to be executed, these parameters will be substituted
-     * for placeholder parameters in the  <code>PreparedStatement</code> object
-     * that is the command for a <code>RowSet</code> implementation extending
-     * the <code>BaseRowSet</code> class.
-     * <P>
-     * Each element in the array that is returned is an <code>Object</code> instance
-     * that contains the values of the parameters supplied to a setter method.
-     * The order of the elements is determined by the value supplied for
-     * <i>parameterIndex</i>.  If the setter method takes only the parameter index
-     * and the value to be set (possibly null), the array element will contain the value to be set
-     * (which will be expressed as an <code>Object</code>).  If there are additional
-     * parameters, the array element will itself be an array containing the value to be set
-     * plus any additional parameter values supplied to the setter method. If the method
-     * sets a stream, the array element includes the type of stream being supplied to the
-     * method. These additional parameters are for the use of the driver or the DBMS and may or
-     * may not be used.
-     * <P>
-     * NOTE: Stored parameter values of types <code>Array</code>, <code>Blob</code>,
-     * <code>Clob</code> and <code>Ref</code> are returned as <code>SerialArray</code>,
-     * <code>SerialBlob</code>, <code>SerialClob</code> and <code>SerialRef</code>
-     * respectively.
-     *
-     * @return an array of <code>Object</code> instances that includes the
-     *         parameter values that may be set in this <code>RowSet</code> object's
-     *         command; an empty array if no parameters have been set
-     * @throws SQLException if an error occurs retrieveing the object array of
-     *         parameters of this <code>RowSet</code> object or if not all parameters have
-     *         been set
-     */
-    public Object[] getParams() throws SQLException {
-        if (params == null) {
-
-            initParams();
-            Object [] paramsArray = new Object[params.size()];
-            return paramsArray;
-
-        } else {
-            // The parameters may be set in random order
-            // but all must be set, check to verify all
-            // have been set till the last parameter
-            // else throw exception.
-
-            Object[] paramsArray = new Object[params.size()];
-            for (int i = 0; i < params.size(); i++) {
-               paramsArray[i] = params.get(Integer.valueOf(i));
-               if (paramsArray[i] == null) {
-                 throw new SQLException("missing parameter: " + (i + 1));
-               } //end if
-            } //end for
-            return paramsArray;
-
-        } //end if
-
-    } //end getParams
-
-
- /**
-    * Sets the designated parameter to SQL <code>NULL</code>.
-    *
-    * <P><B>Note:</B> You must specify the parameter's SQL type.
-    *
-    * @param parameterName the name of the parameter
-    * @param sqlType the SQL type code defined in <code>java.sql.Types</code>
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.4
-    */
-   public void setNull(String parameterName, int sqlType) throws SQLException {
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to SQL <code>NULL</code>.
-    * This version of the method <code>setNull</code> should
-    * be used for user-defined types and REF type parameters.  Examples
-    * of user-defined types include: STRUCT, DISTINCT, JAVA_OBJECT, and
-    * named array types.
-    *
-    * <P><B>Note:</B> To be portable, applications must give the
-    * SQL type code and the fully-qualified SQL type name when specifying
-    * a NULL user-defined or REF parameter.  In the case of a user-defined type
-    * the name is the type name of the parameter itself.  For a REF
-    * parameter, the name is the type name of the referenced type.  If
-    * a JDBC driver does not need the type code or type name information,
-    * it may ignore it.
-    *
-    * Although it is intended for user-defined and Ref parameters,
-    * this method may be used to set a null parameter of any JDBC type.
-    * If the parameter does not have a user-defined or REF type, the given
-    * typeName is ignored.
-    *
-    *
-    * @param parameterName the name of the parameter
-    * @param sqlType a value from <code>java.sql.Types</code>
-    * @param typeName the fully-qualified name of an SQL user-defined type;
-    *        ignored if the parameter is not a user-defined type or
-    *        SQL <code>REF</code> value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.4
-    */
-   public void setNull (String parameterName, int sqlType, String typeName)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given Java <code>boolean</code> value.
-    * The driver converts this
-    * to an SQL <code>BIT</code> or <code>BOOLEAN</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setBoolean(String parameterName, boolean x) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given Java <code>byte</code> value.
-    * The driver converts this
-    * to an SQL <code>TINYINT</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setByte(String parameterName, byte x) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given Java <code>short</code> value.
-    * The driver converts this
-    * to an SQL <code>SMALLINT</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setShort(String parameterName, short x) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to the given Java <code>int</code> value.
-    * The driver converts this
-    * to an SQL <code>INTEGER</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setInt(String parameterName, int x) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to the given Java <code>long</code> value.
-    * The driver converts this
-    * to an SQL <code>BIGINT</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setLong(String parameterName, long x) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to the given Java <code>float</code> value.
-    * The driver converts this
-    * to an SQL <code>FLOAT</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setFloat(String parameterName, float x) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to the given Java <code>double</code> value.
-    * The driver converts this
-    * to an SQL <code>DOUBLE</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setDouble(String parameterName, double x) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given
-    * <code>java.math.BigDecimal</code> value.
-    * The driver converts this to an SQL <code>NUMERIC</code> value when
-    * it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setBigDecimal(String parameterName, BigDecimal x) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given Java <code>String</code> value.
-    * The driver converts this
-    * to an SQL <code>VARCHAR</code> or <code>LONGVARCHAR</code> value
-    * (depending on the argument's
-    * size relative to the driver's limits on <code>VARCHAR</code> values)
-    * when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setString(String parameterName, String x) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given Java array of bytes.
-    * The driver converts this to an SQL <code>VARBINARY</code> or
-    * <code>LONGVARBINARY</code> (depending on the argument's size relative
-    * to the driver's limits on <code>VARBINARY</code> values) when it sends
-    * it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setBytes(String parameterName, byte x[]) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Timestamp</code> value.
-    * The driver
-    * converts this to an SQL <code>TIMESTAMP</code> value when it sends it to the
-    * database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setTimestamp(String parameterName, java.sql.Timestamp x)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given input stream, which will have
-    * the specified number of bytes.
-    * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
-    * parameter, it may be more practical to send it via a
-    * <code>java.io.InputStream</code>. Data will be read from the stream
-    * as needed until end-of-file is reached.  The JDBC driver will
-    * do any necessary conversion from ASCII to the database char format.
-    *
-    * <P><B>Note:</B> This stream object can either be a standard
-    * Java stream object or your own subclass that implements the
-    * standard interface.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the Java input stream that contains the ASCII parameter value
-    * @param length the number of bytes in the stream
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.4
-    */
-   public void setAsciiStream(String parameterName, java.io.InputStream x, int length)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to the given input stream, which will have
-    * the specified number of bytes.
-    * When a very large binary value is input to a <code>LONGVARBINARY</code>
-    * parameter, it may be more practical to send it via a
-    * <code>java.io.InputStream</code> object. The data will be read from the stream
-    * as needed until end-of-file is reached.
-    *
-    * <P><B>Note:</B> This stream object can either be a standard
-    * Java stream object or your own subclass that implements the
-    * standard interface.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the java input stream which contains the binary parameter value
-    * @param length the number of bytes in the stream
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.4
-    */
-   public void setBinaryStream(String parameterName, java.io.InputStream x,
-                        int length) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-  /**
-    * Sets the designated parameter to the given <code>Reader</code>
-    * object, which is the given number of characters long.
-    * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-    * parameter, it may be more practical to send it via a
-    * <code>java.io.Reader</code> object. The data will be read from the stream
-    * as needed until end-of-file is reached.  The JDBC driver will
-    * do any necessary conversion from UNICODE to the database char format.
-    *
-    * <P><B>Note:</B> This stream object can either be a standard
-    * Java stream object or your own subclass that implements the
-    * standard interface.
-    *
-    * @param parameterName the name of the parameter
-    * @param reader the <code>java.io.Reader</code> object that
-    *        contains the UNICODE data used as the designated parameter
-    * @param length the number of characters in the stream
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.4
-    */
-   public void setCharacterStream(String parameterName,
-                           java.io.Reader reader,
-                           int length) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-  /**
-   * Sets the designated parameter to the given input stream.
-   * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
-   * parameter, it may be more practical to send it via a
-   * <code>java.io.InputStream</code>. Data will be read from the stream
-   * as needed until end-of-file is reached.  The JDBC driver will
-   * do any necessary conversion from ASCII to the database char format.
-   *
-   * <P><B>Note:</B> This stream object can either be a standard
-   * Java stream object or your own subclass that implements the
-   * standard interface.
-   * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-   * it might be more efficient to use a version of
-   * <code>setAsciiStream</code> which takes a length parameter.
-   *
-   * @param parameterName the name of the parameter
-   * @param x the Java input stream that contains the ASCII parameter value
-   * @exception SQLException if a database access error occurs or
-   * this method is called on a closed <code>CallableStatement</code>
-   * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-     * @since 1.6
-  */
-  public void setAsciiStream(String parameterName, java.io.InputStream x)
-          throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to the given input stream.
-    * When a very large binary value is input to a <code>LONGVARBINARY</code>
-    * parameter, it may be more practical to send it via a
-    * <code>java.io.InputStream</code> object. The data will be read from the
-    * stream as needed until end-of-file is reached.
-    *
-    * <P><B>Note:</B> This stream object can either be a standard
-    * Java stream object or your own subclass that implements the
-    * standard interface.
-    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-    * it might be more efficient to use a version of
-    * <code>setBinaryStream</code> which takes a length parameter.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the java input stream which contains the binary parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    * @since 1.6
-    */
-   public void setBinaryStream(String parameterName, java.io.InputStream x)
-   throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-
- /**
-    * Sets the designated parameter to the given <code>Reader</code>
-    * object.
-    * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
-    * parameter, it may be more practical to send it via a
-    * <code>java.io.Reader</code> object. The data will be read from the stream
-    * as needed until end-of-file is reached.  The JDBC driver will
-    * do any necessary conversion from UNICODE to the database char format.
-    *
-    * <P><B>Note:</B> This stream object can either be a standard
-    * Java stream object or your own subclass that implements the
-    * standard interface.
-    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-    * it might be more efficient to use a version of
-    * <code>setCharacterStream</code> which takes a length parameter.
-    *
-    * @param parameterName the name of the parameter
-    * @param reader the <code>java.io.Reader</code> object that contains the
-    *        Unicode data
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    * @since 1.6
-    */
-   public void setCharacterStream(String parameterName,
-                         java.io.Reader reader) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-  * Sets the designated parameter in this <code>RowSet</code> object's command
-  * to a <code>Reader</code> object. The
-  * <code>Reader</code> reads the data till end-of-file is reached. The
-  * driver does the necessary conversion from Java character format to
-  * the national character set in the database.
-
-  * <P><B>Note:</B> This stream object can either be a standard
-  * Java stream object or your own subclass that implements the
-  * standard interface.
-  * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-  * it might be more efficient to use a version of
-  * <code>setNCharacterStream</code> which takes a length parameter.
-  *
-  * @param parameterIndex of the first parameter is 1, the second is 2, ...
-  * @param value the parameter value
-  * @throws SQLException if the driver does not support national
-  *         character sets;  if the driver can detect that a data conversion
-  *  error could occur ; if a database access error occurs; or
-  * this method is called on a closed <code>PreparedStatement</code>
-  * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-  * @since 1.6
-  */
-  public void setNCharacterStream(int parameterIndex, Reader value) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-
- /**
-    * Sets the value of the designated parameter with the given object. The second
-    * argument must be an object type; for integral values, the
-    * <code>java.lang</code> equivalent objects should be used.
-    *
-    * <p>The given Java object will be converted to the given targetSqlType
-    * before being sent to the database.
-    *
-    * If the object has a custom mapping (is of a class implementing the
-    * interface <code>SQLData</code>),
-    * the JDBC driver should call the method <code>SQLData.writeSQL</code> to write it
-    * to the SQL data stream.
-    * If, on the other hand, the object is of a class implementing
-    * <code>Ref</code>, <code>Blob</code>, <code>Clob</code>,  <code>NClob</code>,
-    *  <code>Struct</code>, <code>java.net.URL</code>,
-    * or <code>Array</code>, the driver should pass it to the database as a
-    * value of the corresponding SQL type.
-    * <P>
-    * Note that this method may be used to pass datatabase-
-    * specific abstract data types.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the object containing the input parameter value
-    * @param targetSqlType the SQL type (as defined in java.sql.Types) to be
-    * sent to the database. The scale argument may further qualify this type.
-    * @param scale for java.sql.Types.DECIMAL or java.sql.Types.NUMERIC types,
-    *          this is the number of digits after the decimal point.  For all other
-    *          types, this value will be ignored.
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if <code>targetSqlType</code> is
-    * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,
-    * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>,
-    * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
-    *  <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
-    * or  <code>STRUCT</code> data type and the JDBC driver does not support
-    * this data type
-    * @see Types
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setObject(String parameterName, Object x, int targetSqlType, int scale)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-
- /**
-    * Sets the value of the designated parameter with the given object.
-    * This method is like the method <code>setObject</code>
-    * above, except that it assumes a scale of zero.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the object containing the input parameter value
-    * @param targetSqlType the SQL type (as defined in java.sql.Types) to be
-    *                      sent to the database
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if <code>targetSqlType</code> is
-    * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,
-    * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>,
-    * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
-    *  <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
-    * or  <code>STRUCT</code> data type and the JDBC driver does not support
-    * this data type
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setObject(String parameterName, Object x, int targetSqlType)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-   * Sets the value of the designated parameter with the given object.
-   * The second parameter must be of type <code>Object</code>; therefore, the
-   * <code>java.lang</code> equivalent objects should be used for built-in types.
-   *
-   * <p>The JDBC specification specifies a standard mapping from
-   * Java <code>Object</code> types to SQL types.  The given argument
-   * will be converted to the corresponding SQL type before being
-   * sent to the database.
-   *
-   * <p>Note that this method may be used to pass datatabase-
-   * specific abstract data types, by using a driver-specific Java
-   * type.
-   *
-   * If the object is of a class implementing the interface <code>SQLData</code>,
-   * the JDBC driver should call the method <code>SQLData.writeSQL</code>
-   * to write it to the SQL data stream.
-   * If, on the other hand, the object is of a class implementing
-   * <code>Ref</code>, <code>Blob</code>, <code>Clob</code>,  <code>NClob</code>,
-   *  <code>Struct</code>, <code>java.net.URL</code>,
-   * or <code>Array</code>, the driver should pass it to the database as a
-   * value of the corresponding SQL type.
-   * <P>
-   * This method throws an exception if there is an ambiguity, for example, if the
-   * object is of a class implementing more than one of the interfaces named above.
-   *
-   * @param parameterName the name of the parameter
-   * @param x the object containing the input parameter value
-   * @exception SQLException if a database access error occurs,
-   * this method is called on a closed <code>CallableStatement</code> or if the given
-   *            <code>Object</code> parameter is ambiguous
-   * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-   * this method
-   * @see #getParams
-   * @since 1.4
-   */
-  public void setObject(String parameterName, Object x) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-
- /**
-    * Sets the designated parameter to a <code>InputStream</code> object.  The inputstream must contain  the number
-    * of characters specified by length otherwise a <code>SQLException</code> will be
-    * generated when the <code>PreparedStatement</code> is executed.
-    * This method differs from the <code>setBinaryStream (int, InputStream, int)</code>
-    * method because it informs the driver that the parameter value should be
-    * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
-    * the driver may have to do extra work to determine whether the parameter
-    * data should be sent to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
-    * @param parameterIndex index of the first parameter is 1,
-    * the second is 2, ...
-    * @param inputStream An object that contains the data to set the parameter
-    * value to.
-    * @param length the number of bytes in the parameter data.
-    * @throws SQLException if a database access error occurs,
-    * this method is called on a closed <code>PreparedStatement</code>,
-    * if parameterIndex does not correspond
-    * to a parameter marker in the SQL statement,  if the length specified
-    * is less than zero or if the number of bytes in the inputstream does not match
-    * the specfied length.
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    *
-    * @since 1.6
-    */
-    public void setBlob(int parameterIndex, InputStream inputStream, long length)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to a <code>InputStream</code> object.
-    * This method differs from the <code>setBinaryStream (int, InputStream)</code>
-    * method because it informs the driver that the parameter value should be
-    * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
-    * the driver may have to do extra work to determine whether the parameter
-    * data should be sent to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
-    *
-    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-    * it might be more efficient to use a version of
-    * <code>setBlob</code> which takes a length parameter.
-    *
-    * @param parameterIndex index of the first parameter is 1,
-    * the second is 2, ...
-    * @param inputStream An object that contains the data to set the parameter
-    * value to.
-    * @throws SQLException if a database access error occurs,
-    * this method is called on a closed <code>PreparedStatement</code> or
-    * if parameterIndex does not correspond
-    * to a parameter marker in the SQL statement,
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    *
-    * @since 1.6
-    */
-    public void setBlob(int parameterIndex, InputStream inputStream)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to a <code>InputStream</code> object.  The <code>inputstream</code> must contain  the number
-     * of characters specified by length, otherwise a <code>SQLException</code> will be
-     * generated when the <code>CallableStatement</code> is executed.
-     * This method differs from the <code>setBinaryStream (int, InputStream, int)</code>
-     * method because it informs the driver that the parameter value should be
-     * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
-     * the driver may have to do extra work to determine whether the parameter
-     * data should be sent to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
-     *
-     * @param parameterName the name of the parameter to be set
-     * the second is 2, ...
-     *
-     * @param inputStream An object that contains the data to set the parameter
-     * value to.
-     * @param length the number of bytes in the parameter data.
-     * @throws SQLException  if parameterIndex does not correspond
-     * to a parameter marker in the SQL statement,  or if the length specified
-     * is less than zero; if the number of bytes in the inputstream does not match
-     * the specfied length; if a database access error occurs or
-     * this method is called on a closed <code>CallableStatement</code>
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     *
-     * @since 1.6
-     */
-     public void setBlob(String parameterName, InputStream inputStream, long length)
-        throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Blob</code> object.
-    * The driver converts this to an SQL <code>BLOB</code> value when it
-    * sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x a <code>Blob</code> object that maps an SQL <code>BLOB</code> value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.6
-    */
-   public void setBlob (String parameterName, Blob x) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to a <code>InputStream</code> object.
-    * This method differs from the <code>setBinaryStream (int, InputStream)</code>
-    * method because it informs the driver that the parameter value should be
-    * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
-    * the driver may have to do extra work to determine whether the parameter
-    * data should be send to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
-    *
-    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-    * it might be more efficient to use a version of
-    * <code>setBlob</code> which takes a length parameter.
-    *
-    * @param parameterName the name of the parameter
-    * @param inputStream An object that contains the data to set the parameter
-    * value to.
-    * @throws SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    *
-    * @since 1.6
-    */
-    public void setBlob(String parameterName, InputStream inputStream)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-   * Sets the designated parameter to a <code>Reader</code> object.  The reader must contain  the number
-   * of characters specified by length otherwise a <code>SQLException</code> will be
-   * generated when the <code>PreparedStatement</code> is executed.
-   *This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
-   * because it informs the driver that the parameter value should be sent to
-   * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-   * driver may have to do extra work to determine whether the parameter
-   * data should be sent to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
-   * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-   * @param reader An object that contains the data to set the parameter value to.
-   * @param length the number of characters in the parameter data.
-   * @throws SQLException if a database access error occurs, this method is called on
-   * a closed <code>PreparedStatement</code>, if parameterIndex does not correspond to a parameter
-   * marker in the SQL statement, or if the length specified is less than zero.
-   *
-   * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-   * @since 1.6
-   */
-   public void setClob(int parameterIndex, Reader reader, long length)
-     throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-/**
-   * Sets the designated parameter to a <code>Reader</code> object.
-   * This method differs from the <code>setCharacterStream (int, Reader)</code> method
-   * because it informs the driver that the parameter value should be sent to
-   * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-   * driver may have to do extra work to determine whether the parameter
-   * data should be sent to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
-   *
-   * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-   * it might be more efficient to use a version of
-   * <code>setClob</code> which takes a length parameter.
-   *
-   * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-   * @param reader An object that contains the data to set the parameter value to.
-   * @throws SQLException if a database access error occurs, this method is called on
-   * a closed <code>PreparedStatement</code>or if parameterIndex does not correspond to a parameter
-   * marker in the SQL statement
-   *
-   * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-   * @since 1.6
-   */
-   public void setClob(int parameterIndex, Reader reader)
-     throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to a <code>Reader</code> object.  The <code>reader</code> must contain  the number
-               * of characters specified by length otherwise a <code>SQLException</code> will be
-               * generated when the <code>CallableStatement</code> is executed.
-              * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
-              * because it informs the driver that the parameter value should be sent to
-              * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-              * driver may have to do extra work to determine whether the parameter
-              * data should be send to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
-              * @param parameterName the name of the parameter to be set
-              * @param reader An object that contains the data to set the parameter value to.
-              * @param length the number of characters in the parameter data.
-              * @throws SQLException if parameterIndex does not correspond to a parameter
-              * marker in the SQL statement; if the length specified is less than zero;
-              * a database access error occurs or
-              * this method is called on a closed <code>CallableStatement</code>
-              * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-              * this method
-              *
-              * @since 1.6
-              */
-              public void setClob(String parameterName, Reader reader, long length)
-      throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-  /**
-    * Sets the designated parameter to the given <code>java.sql.Clob</code> object.
-    * The driver converts this to an SQL <code>CLOB</code> value when it
-    * sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x a <code>Clob</code> object that maps an SQL <code>CLOB</code> value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @since 1.6
-    */
-   public void setClob (String parameterName, Clob x) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to a <code>Reader</code> object.
-    * This method differs from the <code>setCharacterStream (int, Reader)</code> method
-    * because it informs the driver that the parameter value should be sent to
-    * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-    * driver may have to do extra work to determine whether the parameter
-    * data should be send to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
-    *
-    * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-    * it might be more efficient to use a version of
-    * <code>setClob</code> which takes a length parameter.
-    *
-    * @param parameterName the name of the parameter
-    * @param reader An object that contains the data to set the parameter value to.
-    * @throws SQLException if a database access error occurs or this method is called on
-    * a closed <code>CallableStatement</code>
-    *
-    * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-    * @since 1.6
-    */
-    public void setClob(String parameterName, Reader reader)
-      throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Date</code> value
-    * using the default time zone of the virtual machine that is running
-    * the application.
-    * The driver converts this
-    * to an SQL <code>DATE</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setDate(String parameterName, java.sql.Date x)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Date</code> value,
-    * using the given <code>Calendar</code> object.  The driver uses
-    * the <code>Calendar</code> object to construct an SQL <code>DATE</code> value,
-    * which the driver then sends to the database.  With a
-    * a <code>Calendar</code> object, the driver can calculate the date
-    * taking into account a custom timezone.  If no
-    * <code>Calendar</code> object is specified, the driver uses the default
-    * timezone, which is that of the virtual machine running the application.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @param cal the <code>Calendar</code> object the driver will use
-    *            to construct the date
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setDate(String parameterName, java.sql.Date x, Calendar cal)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Time</code> value.
-    * The driver converts this
-    * to an SQL <code>TIME</code> value when it sends it to the database.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setTime(String parameterName, java.sql.Time x)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Time</code> value,
-    * using the given <code>Calendar</code> object.  The driver uses
-    * the <code>Calendar</code> object to construct an SQL <code>TIME</code> value,
-    * which the driver then sends to the database.  With a
-    * a <code>Calendar</code> object, the driver can calculate the time
-    * taking into account a custom timezone.  If no
-    * <code>Calendar</code> object is specified, the driver uses the default
-    * timezone, which is that of the virtual machine running the application.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @param cal the <code>Calendar</code> object the driver will use
-    *            to construct the time
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setTime(String parameterName, java.sql.Time x, Calendar cal)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-    * Sets the designated parameter to the given <code>java.sql.Timestamp</code> value,
-    * using the given <code>Calendar</code> object.  The driver uses
-    * the <code>Calendar</code> object to construct an SQL <code>TIMESTAMP</code> value,
-    * which the driver then sends to the database.  With a
-    * a <code>Calendar</code> object, the driver can calculate the timestamp
-    * taking into account a custom timezone.  If no
-    * <code>Calendar</code> object is specified, the driver uses the default
-    * timezone, which is that of the virtual machine running the application.
-    *
-    * @param parameterName the name of the parameter
-    * @param x the parameter value
-    * @param cal the <code>Calendar</code> object the driver will use
-    *            to construct the timestamp
-    * @exception SQLException if a database access error occurs or
-    * this method is called on a closed <code>CallableStatement</code>
-    * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-    * this method
-    * @see #getParams
-    * @since 1.4
-    */
-   public void setTimestamp(String parameterName, java.sql.Timestamp x, Calendar cal)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-   * Sets the designated parameter to the given <code>java.sql.SQLXML</code> object. The driver converts this to an
-    * SQL <code>XML</code> value when it sends it to the database.
-    * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-    * @param xmlObject a <code>SQLXML</code> object that maps an SQL <code>XML</code> value
-    * @throws SQLException if a database access error occurs, this method
-    *  is called on a closed result set,
-    * the <code>java.xml.transform.Result</code>,
-    *  <code>Writer</code> or <code>OutputStream</code> has not been closed
-    * for the <code>SQLXML</code> object  or
-    *  if there is an error processing the XML value.  The <code>getCause</code> method
-    *  of the exception may provide a more detailed exception, for example, if the
-    *  stream does not contain valid XML.
-    * @since 1.6
-    */
-   public void setSQLXML(int parameterIndex, SQLXML xmlObject) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-  /**
-   * Sets the designated parameter to the given <code>java.sql.SQLXML</code> object. The driver converts this to an
-    * <code>SQL XML</code> value when it sends it to the database.
-    * @param parameterName the name of the parameter
-    * @param xmlObject a <code>SQLXML</code> object that maps an <code>SQL XML</code> value
-    * @throws SQLException if a database access error occurs, this method
-    *  is called on a closed result set,
-    * the <code>java.xml.transform.Result</code>,
-    *  <code>Writer</code> or <code>OutputStream</code> has not been closed
-    * for the <code>SQLXML</code> object  or
-    *  if there is an error processing the XML value.  The <code>getCause</code> method
-    *  of the exception may provide a more detailed exception, for example, if the
-    *  stream does not contain valid XML.
-    * @since 1.6
-    */
-   public void setSQLXML(String parameterName, SQLXML xmlObject) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-  * Sets the designated parameter to the given <code>java.sql.RowId</code> object. The
-  * driver converts this to a SQL <code>ROWID</code> value when it sends it
-  * to the database
-  *
-  * @param parameterIndex the first parameter is 1, the second is 2, ...
-  * @param x the parameter value
-  * @throws SQLException if a database access error occurs
-  *
-  * @since 1.6
-  */
- public void setRowId(int parameterIndex, RowId x) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
- * Sets the designated parameter to the given <code>java.sql.RowId</code> object. The
- * driver converts this to a SQL <code>ROWID</code> when it sends it to the
- * database.
- *
- * @param parameterName the name of the parameter
- * @param x the parameter value
- * @throws SQLException if a database access error occurs
- * @since 1.6
- */
- public void setRowId(String parameterName, RowId x) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
- /**
-  * Sets the designated paramter to the given <code>String</code> object.
-  * The driver converts this to a SQL <code>NCHAR</code> or
-  * <code>NVARCHAR</code> or <code>LONGNVARCHAR</code> value
-  * (depending on the argument's
-  * size relative to the driver's limits on <code>NVARCHAR</code> values)
-  * when it sends it to the database.
-  *
-  * @param parameterIndex of the first parameter is 1, the second is 2, ...
-  * @param value the parameter value
-  * @throws SQLException if the driver does not support national
-  *         character sets;  if the driver can detect that a data conversion
-  *  error could occur ; or if a database access error occurs
-  * @since 1.6
-  */
-  public void setNString(int parameterIndex, String value) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-  * Sets the designated paramter to the given <code>String</code> object.
-  * The driver converts this to a SQL <code>NCHAR</code> or
-  * <code>NVARCHAR</code> or <code>LONGNVARCHAR</code>
-  * @param parameterName the name of the column to be set
-  * @param value the parameter value
-  * @throws SQLException if the driver does not support national
-  *         character sets;  if the driver can detect that a data conversion
-  *  error could occur; or if a database access error occurs
-  * @since 1.6
-  */
- public void setNString(String parameterName, String value)
-         throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-  * Sets the designated parameter to a <code>Reader</code> object. The
-  * <code>Reader</code> reads the data till end-of-file is reached. The
-  * driver does the necessary conversion from Java character format to
-  * the national character set in the database.
-  * @param parameterIndex of the first parameter is 1, the second is 2, ...
-  * @param value the parameter value
-  * @param length the number of characters in the parameter data.
-  * @throws SQLException if the driver does not support national
-  *         character sets;  if the driver can detect that a data conversion
-  *  error could occur ; or if a database access error occurs
-  * @since 1.6
-  */
-  public void setNCharacterStream(int parameterIndex, Reader value, long length) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-  * Sets the designated parameter to a <code>Reader</code> object. The
-  * <code>Reader</code> reads the data till end-of-file is reached. The
-  * driver does the necessary conversion from Java character format to
-  * the national character set in the database.
-  * @param parameterName the name of the column to be set
-  * @param value the parameter value
-  * @param length the number of characters in the parameter data.
-  * @throws SQLException if the driver does not support national
-  *         character sets;  if the driver can detect that a data conversion
-  *  error could occur; or if a database access error occurs
-  * @since 1.6
-  */
- public void setNCharacterStream(String parameterName, Reader value, long length)
-         throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-  * Sets the designated parameter to a <code>Reader</code> object. The
-  * <code>Reader</code> reads the data till end-of-file is reached. The
-  * driver does the necessary conversion from Java character format to
-  * the national character set in the database.
-
-  * <P><B>Note:</B> This stream object can either be a standard
-  * Java stream object or your own subclass that implements the
-  * standard interface.
-  * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-  * it might be more efficient to use a version of
-  * <code>setNCharacterStream</code> which takes a length parameter.
-  *
-  * @param parameterName the name of the parameter
-  * @param value the parameter value
-  * @throws SQLException if the driver does not support national
-  *         character sets;  if the driver can detect that a data conversion
-  *  error could occur ; if a database access error occurs; or
-  * this method is called on a closed <code>CallableStatement</code>
-  * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-  * @since 1.6
-  */
-  public void setNCharacterStream(String parameterName, Reader value) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
- * Sets the designated parameter to a <code>java.sql.NClob</code> object. The object
- * implements the <code>java.sql.NClob</code> interface. This <code>NClob</code>
- * object maps to a SQL <code>NCLOB</code>.
- * @param parameterName the name of the column to be set
- * @param value the parameter value
- * @throws SQLException if the driver does not support national
- *         character sets;  if the driver can detect that a data conversion
- *  error could occur; or if a database access error occurs
- * @since 1.6
- */
- public void setNClob(String parameterName, NClob value) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-  * Sets the designated parameter to a <code>Reader</code> object.  The <code>reader</code> must contain    * the number
-             * of characters specified by length otherwise a <code>SQLException</code> will be
-            * generated when the <code>CallableStatement</code> is executed.
-            * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
-            * because it informs the driver that the parameter value should be sent to
-            * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-            * driver may have to do extra work to determine whether the parameter
-            * data should be send to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
-            *
-            * @param parameterName the name of the parameter to be set
-            * @param reader An object that contains the data to set the parameter value to.
-            * @param length the number of characters in the parameter data.
-            * @throws SQLException if parameterIndex does not correspond to a parameter
-            * marker in the SQL statement; if the length specified is less than zero;
-            * if the driver does not support national
-            *         character sets;  if the driver can detect that a data conversion
-            *  error could occur; if a database access error occurs or
-            * this method is called on a closed <code>CallableStatement</code>
-            * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-            * this method
-            * @since 1.6
-            */
-            public void setNClob(String parameterName, Reader reader, long length)
-    throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-  * Sets the designated parameter to a <code>Reader</code> object.
-  * This method differs from the <code>setCharacterStream (int, Reader)</code> method
-  * because it informs the driver that the parameter value should be sent to
-  * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-  * driver may have to do extra work to determine whether the parameter
-  * data should be send to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
-  * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-  * it might be more efficient to use a version of
-  * <code>setNClob</code> which takes a length parameter.
-  *
-  * @param parameterName the name of the parameter
-  * @param reader An object that contains the data to set the parameter value to.
-  * @throws SQLException if the driver does not support national character sets;
-  * if the driver can detect that a data conversion
-  *  error could occur;  if a database access error occurs or
-  * this method is called on a closed <code>CallableStatement</code>
-  * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-  *
-  * @since 1.6
-  */
-  public void setNClob(String parameterName, Reader reader)
-    throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-    /**
-     * Sets the designated parameter to a <code>Reader</code> object.  The reader must contain  the number
-     * of characters specified by length otherwise a <code>SQLException</code> will be
-     * generated when the <code>PreparedStatement</code> is executed.
-     * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
-     * because it informs the driver that the parameter value should be sent to
-     * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-     * driver may have to do extra work to determine whether the parameter
-     * data should be sent to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
-     * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-     * @param reader An object that contains the data to set the parameter value to.
-     * @param length the number of characters in the parameter data.
-     * @throws SQLException if parameterIndex does not correspond to a parameter
-     * marker in the SQL statement; if the length specified is less than zero;
-     * if the driver does not support national character sets;
-     * if the driver can detect that a data conversion
-     *  error could occur;  if a database access error occurs or
-     * this method is called on a closed <code>PreparedStatement</code>
-     * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-     *
-     * @since 1.6
-     */
-     public void setNClob(int parameterIndex, Reader reader, long length)
-       throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-    /**
-     * Sets the designated parameter to a <code>java.sql.NClob</code> object. The driver converts this oa
-     * SQL <code>NCLOB</code> value when it sends it to the database.
-     * @param parameterIndex of the first parameter is 1, the second is 2, ...
-     * @param value the parameter value
-     * @throws SQLException if the driver does not support national
-     *         character sets;  if the driver can detect that a data conversion
-     *  error could occur ; or if a database access error occurs
-     * @since 1.6
-     */
-     public void setNClob(int parameterIndex, NClob value) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-  * Sets the designated parameter to a <code>Reader</code> object.
-  * This method differs from the <code>setCharacterStream (int, Reader)</code> method
-  * because it informs the driver that the parameter value should be sent to
-  * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
-  * driver may have to do extra work to determine whether the parameter
-  * data should be sent to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
-  * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
-  * it might be more efficient to use a version of
-  * <code>setNClob</code> which takes a length parameter.
-  *
-  * @param parameterIndex index of the first parameter is 1, the second is 2, ...
-  * @param reader An object that contains the data to set the parameter value to.
-  * @throws SQLException if parameterIndex does not correspond to a parameter
-  * marker in the SQL statement;
-  * if the driver does not support national character sets;
-  * if the driver can detect that a data conversion
-  *  error could occur;  if a database access error occurs or
-  * this method is called on a closed <code>PreparedStatement</code>
-  * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-  *
-  * @since 1.6
-  */
-  public void setNClob(int parameterIndex, Reader reader)
-    throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
- /**
-  * Sets the designated parameter to the given <code>java.net.URL</code> value.
-  * The driver converts this to an SQL <code>DATALINK</code> value
-  * when it sends it to the database.
-  *
-  * @param parameterIndex the first parameter is 1, the second is 2, ...
-  * @param x the <code>java.net.URL</code> object to be set
-  * @exception SQLException if a database access error occurs or
-  * this method is called on a closed <code>PreparedStatement</code>
-  * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
-  * @since 1.4
-  */
-  public void setURL(int parameterIndex, java.net.URL x) throws SQLException{
-        throw new SQLFeatureNotSupportedException("Feature not supported");
-   }
-
-
-
-    static final long serialVersionUID = 4886719666485113312L;
-
-} //end class
diff --git a/ojluni/src/main/java/javax/sql/rowset/CachedRowSet.java b/ojluni/src/main/java/javax/sql/rowset/CachedRowSet.java
deleted file mode 100755
index 7861223..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/CachedRowSet.java
+++ /dev/null
@@ -1,1625 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-package javax.sql.rowset;
-
-import java.sql.*;
-import javax.sql.*;
-import javax.naming.*;
-import java.io.*;
-import java.math.*;
-import java.util.*;
-
-import javax.sql.rowset.spi.*;
-
-/**
- * The interface that all standard implementations of
- * <code>CachedRowSet</code> must implement.
- * <P>
- * The reference implementation of the <code>CachedRowSet</code> interface provided
- * by Oracle Corporation is a standard implementation. Developers may use this implementation
- * just as it is, they may extend it, or they may choose to write their own implementations
- * of this interface.
- * <P>
- * A <code>CachedRowSet</code> object is a container for rows of data
- * that caches its rows in memory, which makes it possible to operate without always being
- * connected to its data source. Further, it is a
- * JavaBeans<sup><font size=-2>TM</font></sup> component and is scrollable,
- * updatable, and serializable. A <code>CachedRowSet</code> object typically
- * contains rows from a result set, but it can also contain rows from any file
- * with a tabular format, such as a spread sheet.  The reference implementation
- * supports getting data only from a <code>ResultSet</code> object, but
- * developers can extend the <code>SyncProvider</code> implementations to provide
- * access to other tabular data sources.
- * <P>
- * An application can modify the data in a <code>CachedRowSet</code> object, and
- * those modifications can then be propagated back to the source of the data.
- * <P>
- * A <code>CachedRowSet</code> object is a <i>disconnected</i> rowset, which means
- * that it makes use of a connection to its data source only briefly. It connects to its
- * data source while it is reading data to populate itself with rows and again
- * while it is propagating changes back to its underlying data source. The rest
- * of the time, a <code>CachedRowSet</code> object is disconnected, including
- * while its data is being modified. Being disconnected makes a <code>RowSet</code>
- * object much leaner and therefore much easier to pass to another component.  For
- * example, a disconnected <code>RowSet</code> object can be serialized and passed
- * over the wire to a thin client such as a personal digital assistant (PDA).
- * <P>
- *
- * <h3>1.0 Creating a <code>CachedRowSet</code> Object</h3>
- * The following line of code uses the default constructor for
- * <code>CachedRowSet</code>
- * supplied in the reference implementation (RI) to create a default
- * <code>CachedRowSet</code> object.
- * <PRE>
- *     CachedRowSetImpl crs = new CachedRowSetImpl();
- * </PRE>
- * This new <code>CachedRowSet</code> object will have its properties set to the
- * default properties of a <code>BaseRowSet</code> object, and, in addition, it will
- * have an <code>RIOptimisticProvider</code> object as its synchronization provider.
- * <code>RIOptimisticProvider</code>, one of two <code>SyncProvider</code>
- * implementations included in the RI, is the default provider that the
- * <code>SyncFactory</code> singleton will supply when no synchronization
- * provider is specified.
- * <P>
- * A <code>SyncProvider</code> object provides a <code>CachedRowSet</code> object
- * with a reader (a <code>RowSetReader</code> object) for reading data from a
- * data source to populate itself with data. A reader can be implemented to read
- * data from a <code>ResultSet</code> object or from a file with a tabular format.
- * A <code>SyncProvider</code> object also provides
- * a writer (a <code>RowSetWriter</code> object) for synchronizing any
- * modifications to the <code>CachedRowSet</code> object's data made while it was
- * disconnected with the data in the underlying data source.
- * <P>
- * A writer can be implemented to exercise various degrees of care in checking
- * for conflicts and in avoiding them.
- * (A conflict occurs when a value in the data source has been changed after
- * the rowset populated itself with that value.)
- * The <code>RIOptimisticProvider</code> implementation assumes there will be
- * few or no conflicts and therefore sets no locks. It updates the data source
- * with values from the <code>CachedRowSet</code> object only if there are no
- * conflicts.
- * Other writers can be implemented so that they always write modified data to
- * the data source, which can be accomplished either by not checking for conflicts
- * or, on the other end of the spectrum, by setting locks sufficient to prevent data
- * in the data source from being changed. Still other writer implementations can be
- * somewhere in between.
- * <P>
- * A <code>CachedRowSet</code> object may use any
- * <code>SyncProvider</code> implementation that has been registered
- * with the <code>SyncFactory</code> singleton. An application
- * can find out which <code>SyncProvider</code> implementations have been
- * registered by calling the following line of code.
- * <PRE>
- *      java.util.Enumeration providers = SyncFactory.getRegisteredProviders();
- * </PRE>
- * <P>
- * There are two ways for a <code>CachedRowSet</code> object to specify which
- * <code>SyncProvider</code> object it will use.
- * <UL)
- *     <LI>Supplying the name of the implementation to the constructor<BR>
- *     The following line of code creates the <code>CachedRowSet</code>
- *     object <i>crs2</i> that is initialized with default values except that its
- *     <code>SyncProvider</code> object is the one specified.
- *     <PRE>
- *          CachedRowSetImpl crs2 = new CachedRowSetImpl(
- *                                 "com.fred.providers.HighAvailabilityProvider");
- *     </PRE>
- *     <LI>Setting the <code>SyncProvider</code> using the <code>CachedRowSet</code>
- *         method <code>setSyncProvider</code><BR>
- *      The following line of code resets the <code>SyncProvider</code> object
- *      for <i>crs</i>, the <code>CachedRowSet</code> object created with the
- *      default constructor.
- *      <PRE>
- *           crs.setSyncProvider("com.fred.providers.HighAvailabilityProvider");
- *      </PRE>
- * </UL)
- * See the comments for <code>SyncFactory</code> and <code>SyncProvider</code> for
- * more details.
- *
- * <P>
- * <h3>2.0 Retrieving Data from a <code>CachedRowSet</code> Object</h3>
- * Data is retrieved from a <code>CachedRowSet</code> object by using the
- * getter methods inherited from the <code>ResultSet</code>
- * interface.  The following examples, in which <code>crs</code> is a
- * <code>CachedRowSet</code>
- * object, demonstrate how to iterate through the rows, retrieving the column
- * values in each row.  The first example uses the version of the
- * getter methods that take a column number; the second example
- * uses the version that takes a column name. Column numbers are generally
- * used when the <code>RowSet</code> object's command
- * is of the form <code>SELECT * FROM TABLENAME</code>; column names are most
- * commonly used when the command specifies columns by name.
- * <PRE>
- *    while (crs.next()) {
- *        String name = crs.getString(1);
- *        int id = crs.getInt(2);
- *        Clob comment = crs.getClob(3);
- *        short dept = crs.getShort(4);
- *        System.out.println(name + "  " + id + "  " + comment + "  " + dept);
- *    }
- * </PRE>
- *
- * <PRE>
- *    while (crs.next()) {
- *        String name = crs.getString("NAME");
- *        int id = crs.getInt("ID");
- *        Clob comment = crs.getClob("COM");
- *        short dept = crs.getShort("DEPT");
- *        System.out.println(name + "  " + id + "  " + comment + "  " + dept);
- *    }
- * </PRE>
- * <h4>2.1 Retrieving <code>RowSetMetaData</code></h4>
- * An application can get information about the columns in a <code>CachedRowSet</code>
- * object by calling <code>ResultSetMetaData</code> and <code>RowSetMetaData</code>
- * methods on a <code>RowSetMetaData</code> object. The following code fragment,
- * in which <i>crs</i> is a <code>CachedRowSet</code> object, illustrates the process.
- * The first line creates a <code>RowSetMetaData</code> object with information
- * about the columns in <i>crs</i>.  The method <code>getMetaData</code>,
- * inherited from the <code>ResultSet</code> interface, returns a
- * <code>ResultSetMetaData</code> object, which is cast to a
- * <code>RowSetMetaData</code> object before being assigned to the variable
- * <i>rsmd</i>.  The second line finds out how many columns <i>jrs</i> has, and
- * the third line gets the JDBC type of values stored in the second column of
- * <code>jrs</code>.
- * <PRE>
- *     RowSetMetaData rsmd = (RowSetMetaData)crs.getMetaData();
- *     int count = rsmd.getColumnCount();
- *     int type = rsmd.getColumnType(2);
- * </PRE>
- * The <code>RowSetMetaData</code> interface differs from the
- * <code>ResultSetMetaData</code> interface in two ways.
- * <UL>
- *   <LI><i>It includes <code>setter</code> methods:</i> A <code>RowSet</code>
- *   object uses these methods internally when it is populated with data from a
- *   different <code>ResultSet</code> object.
- *   <P>
- *   <LI><i>It contains fewer <code>getter</code> methods:</i> Some
- *   <code>ResultSetMetaData</code> methods to not apply to a <code>RowSet</code>
- *   object. For example, methods retrieving whether a column value is writable
- *   or read only do not apply because all of a <code>RowSet</code> object's
- *   columns will be writable or read only, depending on whether the rowset is
- *   updatable or not.
- * </UL>
- * NOTE: In order to return a <code>RowSetMetaData</code> object, implementations must
- * override the <code>getMetaData()</code> method defined in
- * <code>java.sql.ResultSet</code> and return a <code>RowSetMetaData</code> object.
- *
- * <h3>3.0 Updating a <code>CachedRowSet</code> Object</h3>
- * Updating a <code>CachedRowSet</code> object is similar to updating a
- * <code>ResultSet</code> object, but because the rowset is not connected to
- * its data source while it is being updated, it must take an additional step
- * to effect changes in its underlying data source. After calling the method
- * <code>updateRow</code> or <code>insertRow</code>, a
- * <code>CachedRowSet</code>
- * object must also call the method <code>acceptChanges</code> to have updates
- * written to the data source. The following example, in which the cursor is
- * on a row in the <code>CachedRowSet</code> object <i>crs</i>, shows
- * the code required to update two column values in the current row and also
- * update the <code>RowSet</code> object's underlying data source.
- * <PRE>
- *     crs.updateShort(3, 58);
- *     crs.updateInt(4, 150000);
- *     crs.updateRow();
- *     crs.acceptChanges();
- * </PRE>
- * <P>
- * The next example demonstrates moving to the insert row, building a new
- * row on the insert row, inserting it into the rowset, and then calling the
- * method <code>acceptChanges</code> to add the new row to the underlying data
- * source.  Note that as with the getter methods, the  updater methods may take
- * either a column index or a column name to designate the column being acted upon.
- * <PRE>
- *     crs.moveToInsertRow();
- *     crs.updateString("Name", "Shakespeare");
- *     crs.updateInt("ID", 10098347);
- *     crs.updateShort("Age", 58);
- *     crs.updateInt("Sal", 150000);
- *     crs.insertRow();
- *     crs.moveToCurrentRow();
- *     crs.acceptChanges();
- * </PRE>
- * <P>
- * NOTE: Where the <code>insertRow()</code> method inserts the contents of a
- * <code>CachedRowSet</code> object's insert row is implementation-defined.
- * The reference implementation for the <code>CachedRowSet</code> interface
- * inserts a new row immediately following the current row, but it could be
- * implemented to insert new rows in any number of other places.
- * <P>
- * Another thing to note about these examples is how they use the method
- * <code>acceptChanges</code>.  It is this method that propagates changes in
- * a <code>CachedRowSet</code> object back to the underlying data source,
- * calling on the <code>RowSet</code> object's writer internally to write
- * changes to the data source. To do this, the writer has to incur the expense
- * of establishing a connection with that data source. The
- * preceding two code fragments call the method <code>acceptChanges</code>
- * immediately after calling <code>updateRow</code> or <code>insertRow</code>.
- * However, when there are multiple rows being changed, it is more efficient to call
- * <code>acceptChanges</code> after all calls to <code>updateRow</code>
- * and <code>insertRow</code> have been made.  If <code>acceptChanges</code>
- * is called only once, only one connection needs to be established.
- * <P>
- * <h3>4.0 Updating the Underlying Data Source</h3>
- * When the method <code>acceptChanges</code> is executed, the
- * <code>CachedRowSet</code> object's writer, a <code>RowSetWriterImpl</code>
- * object, is called behind the scenes to write the changes made to the
- * rowset to the underlying data source. The writer is implemented to make a
- * connection to the data source and write updates to it.
- * <P>
- * A writer is made available through an implementation of the
- * <code>SyncProvider</code> interface, as discussed in section 1,
- * "Creating a <code>CachedRowSet</code> Object."
- * The default reference implementation provider, <code>RIOptimisticProvider</code>,
- * has its writer implemented to use an optimistic concurrency control
- * mechanism. That is, it maintains no locks in the underlying database while
- * the rowset is disconnected from the database and simply checks to see if there
- * are any conflicts before writing data to the data source.  If there are any
- * conflicts, it does not write anything to the data source.
- * <P>
- * The reader/writer facility
- * provided by the <code>SyncProvider</code> class is pluggable, allowing for the
- * customization of data retrieval and updating. If a different concurrency
- * control mechanism is desired, a different implementation of
- * <code>SyncProvider</code> can be plugged in using the method
- * <code>setSyncProvider</code>.
- * <P>
- * In order to use the optimistic concurrency control routine, the
- * <code>RIOptismisticProvider</code> maintains both its current
- * value and its original value (the value it had immediately preceding the
- * current value). Note that if no changes have been made to the data in a
- * <code>RowSet</code> object, its current values and its original values are the same,
- * both being the values with which the <code>RowSet</code> object was initially
- * populated.  However, once any values in the <code>RowSet</code> object have been
- * changed, the current values and the original values will be different, though at
- * this stage, the original values are still the initial values. With any subsequent
- * changes to data in a <code>RowSet</code> object, its original values and current
- * values will still differ, but its original values will be the values that
- * were previously the current values.
- * <P>
- * Keeping track of original values allows the writer to compare the <code>RowSet</code>
- * object's original value with the value in the database. If the values in
- * the database differ from the <code>RowSet</code> object's original values, which means that
- * the values in the database have been changed, there is a conflict.
- * Whether a writer checks for conflicts, what degree of checking it does, and how
- * it handles conflicts all depend on how it is implemented.
- * <P>
- * <h3>5.0 Registering and Notifying Listeners</h3>
- * Being JavaBeans components, all rowsets participate in the JavaBeans event
- * model, inheriting methods for registering listeners and notifying them of
- * changes from the <code>BaseRowSet</code> class.  A listener for a
- * <code>CachedRowSet</code> object is a component that wants to be notified
- * whenever there is a change in the rowset.  For example, if a
- * <code>CachedRowSet</code> object contains the results of a query and
- * those
- * results are being displayed in, say, a table and a bar graph, the table and
- * bar graph could be registered as listeners with the rowset so that they can
- * update themselves to reflect changes. To become listeners, the table and
- * bar graph classes must implement the <code>RowSetListener</code> interface.
- * Then they can be added to the <Code>CachedRowSet</code> object's list of
- * listeners, as is illustrated in the following lines of code.
- * <PRE>
- *    crs.addRowSetListener(table);
- *    crs.addRowSetListener(barGraph);
- * </PRE>
- * Each <code>CachedRowSet</code> method that moves the cursor or changes
- * data also notifies registered listeners of the changes, so
- * <code>table</code> and <code>barGraph</code> will be notified when there is
- * a change in <code>crs</code>.
- * <P>
- * <h3>6.0 Passing Data to Thin Clients</h3>
- * One of the main reasons to use a <code>CachedRowSet</code> object is to
- * pass data between different components of an application. Because it is
- * serializable, a <code>CachedRowSet</code> object can be used, for example,
- * to send the result of a query executed by an enterprise JavaBeans component
- * running in a server environment over a network to a client running in a
- * web browser.
- * <P>
- * While a <code>CachedRowSet</code> object is disconnected, it can be much
- * leaner than a <code>ResultSet</code> object with the same data.
- * As a result, it can be especially suitable for sending data to a thin client
- * such as a PDA, where it would be inappropriate to use a JDBC driver
- * due to resource limitations or security considerations.
- * Thus, a <code>CachedRowSet</code> object provides a means to "get rows in"
- * without the need to implement the full JDBC API.
- * <P>
- * <h3>7.0 Scrolling and Updating</h3>
- * A second major use for <code>CachedRowSet</code> objects is to provide
- * scrolling and updating for <code>ResultSet</code> objects that
- * do not provide these capabilities themselves.  In other words, a
- * <code>CachedRowSet</code> object can be used to augment the
- * capabilities of a JDBC technology-enabled driver (hereafter called a
- * "JDBC driver") when the DBMS does not provide full support for scrolling and
- * updating. To achieve the effect of making a non-scrollble and read-only
- * <code>ResultSet</code> object scrollable and updatable, a programmer
- * simply needs to create a <code>CachedRowSet</code> object populated
- * with that <code>ResultSet</code> object's data.  This is demonstrated
- * in the following code fragment, where <code>stmt</code> is a
- * <code>Statement</code> object.
- * <PRE>
- *    ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEES");
- *    CachedRowSetImpl crs = new CachedRowSetImpl();
- *    crs.populate(rs);
- * </PRE>
- * <P>
- * The object <code>crs</code> now contains the data from the table
- * <code>EMPLOYEES</code>, just as the object <code>rs</code> does.
- * The difference is that the cursor for <code>crs</code> can be moved
- * forward, backward, or to a particular row even if the cursor for
- * <code>rs</code> can move only forward.  In addition, <code>crs</code> is
- * updatable even if <code>rs</code> is not because by default, a
- * <code>CachedRowSet</code> object is both scrollable and updatable.
- * <P>
- * In summary, a <code>CachedRowSet</code> object can be thought of as simply
- * a disconnected set of rows that are being cached outside of a data source.
- * Being thin and serializable, it can easily be sent across a wire,
- * and it is well suited to sending data to a thin client. However, a
- * <code>CachedRowSet</code> object does have a limitation: It is limited in
- * size by the amount of data it can store in memory at one time.
- * <P>
- * <h3>8.0 Getting Universal Data Access</h3>
- * Another advantage of the <code>CachedRowSet</code> class is that it makes it
- * possible to retrieve and store data from sources other than a relational
- * database. The reader for a rowset can be implemented to read and populate
- * its rowset with data from any tabular data source, including a spreadsheet
- * or flat file.
- * Because both a <code>CachedRowSet</code> object and its metadata can be
- * created from scratch, a component that acts as a factory for rowsets
- * can use this capability to create a rowset containing data from
- * non-SQL data sources. Nevertheless, it is expected that most of the time,
- * <code>CachedRowSet</code> objects will contain data that was fetched
- * from an SQL database using the JDBC API.
- * <P>
- * <h3>9.0 Setting Properties</h3>
- * All rowsets maintain a set of properties, which will usually be set using
- * a tool.  The number and kinds of properties a rowset has will vary,
- * depending on what the rowset does and how it gets its data.  For example,
- * rowsets that get their data from a <code>ResultSet</code> object need to
- * set the properties that are required for making a database connection.
- * If a rowset uses the <code>DriverManager</code> facility to make a
- * connection, it needs to set a property for the JDBC URL that identifies
- * the appropriate driver, and it needs to set the properties that give the
- * user name and password.
- * If, on the other hand, the rowset uses a <code>DataSource</code> object
- * to make the connection, which is the preferred method, it does not need to
- * set the property for the JDBC URL.  Instead, it needs to set
- * properties for the logical name of the data source, for the user name,
- * and for the password.
- * <P>
- * NOTE:  In order to use a <code>DataSource</code> object for making a
- * connection, the <code>DataSource</code> object must have been registered
- * with a naming service that uses the Java Naming and Directory
- * Interface<sup><font size=-2>TM</font></sup> (JNDI) API.  This registration
- * is usually done by a person acting in the capacity of a system
- * administrator.
- * <P>
- * In order to be able to populate itself with data from a database, a rowset
- * needs to set a command property.  This property is a query that is a
- * <code>PreparedStatement</code> object, which allows the query to have
- * parameter placeholders that are set at run time, as opposed to design time.
- * To set these placeholder parameters with values, a rowset provides
- * setter methods for setting values of each data type,
- * similar to the setter methods provided by the <code>PreparedStatement</code>
- * interface.
- * <P>
- * The following code fragment illustrates how the <code>CachedRowSet</code>
- * object <code>crs</code> might have its command property set.  Note that if a
- * tool is used to set properties, this is the code that the tool would use.
- * <PRE>
- *    crs.setCommand("SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS " +
- *                   "WHERE CREDIT_LIMIT > ? AND REGION = ?");
- * </PRE>
- * <P>
- * The values that will be used to set the command's placeholder parameters are
- * contained in the <code>RowSet</code> object's <code>params</code> field, which is a
- * <code>Vector</code> object.
- * The <code>CachedRowSet</code> class provides a set of setter
- * methods for setting the elements in its <code>params</code> field.  The
- * following code fragment demonstrates setting the two parameters in the
- * query from the previous example.
- * <PRE>
- *    crs.setInt(1, 5000);
- *    crs.setString(2, "West");
- * </PRE>
- * <P>
- * The <code>params</code> field now contains two elements, each of which is
- * an array two elements long.  The first element is the parameter number;
- * the second is the value to be set.
- * In this case, the first element of <code>params</code> is
- * <code>1</code>, <code>5000</code>, and the second element is <code>2</code>,
- * <code>"West"</code>.  When an application calls the method
- * <code>execute</code>, it will in turn call on this <code>RowSet</code> object's reader,
- * which will in turn invoke its <code>readData</code> method. As part of
- * its implementation, <code>readData</code> will get the values in
- * <code>params</code> and use them to set the command's placeholder
- * parameters.
- * The following code fragment gives an idea of how the reader
- * does this, after obtaining the <code>Connection</code> object
- * <code>con</code>.
- * <PRE>
- *    PreparedStatement pstmt = con.prepareStatement(crs.getCommand());
- *    reader.decodeParams();
- *    // decodeParams figures out which setter methods to use and does something
- *    // like the following:
- *    //    for (i = 0; i < params.length; i++) {
- *    //        pstmt.setObject(i + 1, params[i]);
- *    //    }
- * </PRE>
- * <P>
- * At this point, the command for <code>crs</code> is the query <code>"SELECT
- * FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS WHERE CREDIT_LIMIT > 5000
- * AND REGION = "West"</code>.  After the <code>readData</code> method executes
- * this command with the following line of code, it will have the data from
- * <code>rs</code> with which to populate <code>crs</code>.
- * <PRE>
- *     ResultSet rs = pstmt.executeQuery();
- * </PRE>
- * <P>
- * The preceding code fragments give an idea of what goes on behind the
- * scenes; they would not appear in an application, which would not invoke
- * methods like <code>readData</code> and <code>decodeParams</code>.
- * In contrast, the following code fragment shows what an application might do.
- * It sets the rowset's command, sets the command's parameters, and executes
- * the command. Simply by calling the <code>execute</code> method,
- * <code>crs</code> populates itself with the requested data from the
- * table <code>CUSTOMERS</code>.
- * <PRE>
- *    crs.setCommand("SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS" +
- *                   "WHERE CREDIT_LIMIT > ? AND REGION = ?");
- *    crs.setInt(1, 5000);
- *    crs.setString(2, "West");
- *    crs.execute();
- * </PRE>
- *
- * <h3>10.0 Paging Data</h3>
- * Because a <code>CachedRowSet</code> object stores data in memory,
- * the amount of data that it can contain at any one
- * time is determined by the amount of memory available. To get around this limitation,
- * a <code>CachedRowSet</code> object can retrieve data from a <code>ResultSet</code>
- * object in chunks of data, called <i>pages</i>. To take advantage of this mechanism,
- * an application sets the number of rows to be included in a page using the method
- * <code>setPageSize</code>. In other words, if the page size is set to five, a chunk
- * of five rows of
- * data will be fetched from the data source at one time. An application can also
- * optionally set the maximum number of rows that may be fetched at one time.  If the
- * maximum number of rows is set to zero, or no maximum number of rows is set, there is
- * no limit to the number of rows that may be fetched at a time.
- * <P>
- * After properties have been set,
- * the <code>CachedRowSet</code> object must be populated with data
- * using either the method <code>populate</code> or the method <code>execute</code>.
- * The following lines of code demonstrate using the method <code>populate</code>.
- * Note that this version of the method takes two parameters, a <code>ResultSet</code>
- * handle and the row in the <code>ResultSet</code> object from which to start
- * retrieving rows.
- * <PRE>
- *     CachedRowSet crs = new CachedRowSetImpl();
- *     crs.setMaxRows(20);
- *     crs.setPageSize(4);
- *     crs.populate(rsHandle, 10);
- * </PRE>
- * When this code runs, <i>crs</i> will be populated with four rows from
- * <i>rsHandle</i> starting with the tenth row.
- * <P>
- * The next code fragment shows populating a <code>CachedRowSet</code> object using the
- * method <code>execute</code>, which may or may not take a <code>Connection</code>
- * object as a parameter.  This code passes <code>execute</code> the <code>Connection</code>
- * object <i>conHandle</i>.
- * <P>
- * Note that there are two differences between the following code
- * fragment and the previous one. First, the method <code>setMaxRows</code> is not
- * called, so there is no limit set for the number of rows that <i>crs</i> may contain.
- * (Remember that <i>crs</i> always has the overriding limit of how much data it can
- * store in memory.) The second difference is that the you cannot pass the method
- * <code>execute</code> the number of the row in the <code>ResultSet</code> object
- * from which to start retrieving rows. This method always starts with the first row.
- * <PRE>
- *     CachedRowSet crs = new CachedRowSetImpl();
- *     crs.setPageSize(5);
- *     crs.execute(conHandle);
- * </PRE>
- * After this code has run, <i>crs</i> will contain five rows of data from the
- * <code>ResultSet</code> object produced by the command for <i>crs</i>. The writer
- * for <i>crs</i> will use <i>conHandle</i> to connect to the data source and
- * execute the command for <i>crs</i>. An application is then able to operate on the
- * data in <i>crs</i> in the same way that it would operate on data in any other
- * <code>CachedRowSet</code> object.
- * <P>
- * To access the next page (chunk of data), an application calls the method
- * <code>nextPage</code>.  This method creates a new <code>CachedRowSet</code> object
- * and fills it with the next page of data.  For example, assume that the
- * <code>CachedRowSet</code> object's command returns a <code>ResultSet</code> object
- * <i>rs</i> with 1000 rows of data.  If the page size has been set to 100, the first
- *  call to the method <code>nextPage</code> will create a <code>CachedRowSet</code> object
- * containing the first 100 rows of <i>rs</i>. After doing what it needs to do with the
- * data in these first 100 rows, the application can again call the method
- * <code>nextPage</code> to create another <code>CachedRowSet</code> object
- * with the second 100 rows from <i>rs</i>. The data from the first <code>CachedRowSet</code>
- * object will no longer be in memory because it is replaced with the data from the
- * second <code>CachedRowSet</code> object. After the tenth call to the method <code>nextPage</code>,
- * the tenth <code>CachedRowSet</code> object will contain the last 100 rows of data from
- * <i>rs</i>, which are stored in memory. At any given time, the data from only one
- * <code>CachedRowSet</code> object is stored in memory.
- * <P>
- * The method <code>nextPage</code> returns <code>true</code> as long as the current
- * page is not the last page of rows and <code>false</code> when there are no more pages.
- * It can therefore be used in a <code>while</code> loop to retrieve all of the pages,
- * as is demonstrated in the following lines of code.
- * <PRE>
- *     CachedRowSet crs = CachedRowSetImpl();
- *     crs.setPageSize(100);
- *     crs.execute(conHandle);
- *
- *     while(crs.nextPage()) {
- *         while(crs.next()) {
- *             . . . // operate on chunks (of 100 rows each) in crs,
- *                   // row by row
- *         }
- *     }
- * </PRE>
- * After this code fragment has been run, the application will have traversed all
- * 1000 rows, but it will have had no more than 100 rows in memory at a time.
- * <P>
- * The <code>CachedRowSet</code> interface also defines the method <code>previousPage</code>.
- * Just as the method <code>nextPage</code> is analogous to the <code>ResultSet</code>
- * method <code>next</code>, the method <code>previousPage</code> is analogous to
- * the <code>ResultSet</code> method <code>previous</code>.  Similar to the method
- * <code>nextPage</code>, <code>previousPage</code> creates a <code>CachedRowSet</code>
- * object containing the number of rows set as the page size.  So, for instance, the
- * method <code>previousPage</code> could be used in a <code>while</code> loop at
- * the end of the preceding code fragment to navigate back through the pages from the last
- * page to the first page.
- * The method <code>previousPage</code> is also similar to <code>nextPage</code>
- * in that it can be used in a <code>while</code>
- * loop, except that it returns <code>true</code> as long as there is another page
- * preceding it and <code>false</code> when there are no more pages ahead of it.
- * <P>
- * By positioning the cursor after the last row for each page,
- * as is done in the following code fragment, the method <code>previous</code>
- * navigates from the last row to the first row in each page.
- * The code could also have left the cursor before the first row on each page and then
- * used the method <code>next</code> in a <code>while</code> loop to navigate each page
- * from the first row to the last row.
- * <P>
- * The following code fragment assumes a continuation from the previous code fragment,
- * meaning that the cursor for the tenth <code>CachedRowSet</code> object is on the
- * last row.  The code moves the cursor to after the last row so that the first
- * call to the method <code>previous</code> will put the cursor back on the last row.
- * After going through all of the rows in the last page (the <code>CachedRowSet</code>
- * object <i>crs</i>), the code then enters
- * the <code>while</code> loop to get to the ninth page, go through the rows backwards,
- * go to the eighth page, go through the rows backwards, and so on to the first row
- * of the first page.
- *
- * <PRE>
- *     crs.afterLast();
- *     while(crs.previous())  {
- *         . . . // navigate through the rows, last to first
- *     {
- *     while(crs.previousPage())  {
- *         crs.afterLast();
- *         while(crs.previous())  {
- *             . . . // go from the last row to the first row of each page
- *         }
- *     }
- * </PRE>
- *
- * @author Jonathan Bruce
- */
-
-public interface CachedRowSet extends RowSet, Joinable {
-
-   /**
-    * Populates this <code>CachedRowSet</code> object with data from
-    * the given <code>ResultSet</code> object.
-    * <P>
-    * This method can be used as an alternative to the <code>execute</code> method when an
-    * application has a connection to an open <code>ResultSet</code> object.
-    * Using the method <code>populate</code> can be more efficient than using
-    * the version of the <code>execute</code> method that takes no parameters
-    * because it does not open a new connection and re-execute this
-    * <code>CachedRowSet</code> object's command. Using the <code>populate</code>
-    * method is more a matter of convenience when compared to using the version
-    * of <code>execute</code> that takes a <code>ResultSet</code> object.
-    *
-    * @param data the <code>ResultSet</code> object containing the data
-    * to be read into this <code>CachedRowSet</code> object
-    * @throws SQLException if a null <code>ResultSet</code> object is supplied
-    * or this <code>CachedRowSet</code> object cannot
-    * retrieve the associated <code>ResultSetMetaData</code> object
-    * @see #execute
-    * @see java.sql.ResultSet
-    * @see java.sql.ResultSetMetaData
-    */
-    public void populate(ResultSet data) throws SQLException;
-
-   /**
-    * Populates this <code>CachedRowSet</code> object with data, using the
-    * given connection to produce the result set from which the data will be read.
-    * This method should close any database connections that it creates to
-    * ensure that this <code>CachedRowSet</code> object is disconnected except when
-    * it is reading data from its data source or writing data to its data source.
-    * <P>
-    * The reader for this <code>CachedRowSet</code> object
-    * will use <i>conn</i> to establish a connection to the data source
-    * so that it can execute the rowset's command and read data from the
-    * the resulting <code>ResultSet</code> object into this
-    * <code>CachedRowSet</code> object. This method also closes <i>conn</i>
-    * after it has populated this <code>CachedRowSet</code> object.
-    * <P>
-    * If this method is called when an implementation has already been
-    * populated, the contents and the metadata are (re)set. Also, if this method is
-    * called before the method <code>acceptChanges</code> has been called
-    * to commit outstanding updates, those updates are lost.
-    *
-    * @param conn a standard JDBC <code>Connection</code> object with valid
-    * properties
-    * @throws SQLException if an invalid <code>Connection</code> object is supplied
-    * or an error occurs in establishing the connection to the
-    * data source
-    * @see #populate
-    * @see java.sql.Connection
-    */
-    public void execute(Connection conn) throws SQLException;
-
-   /**
-    * Propagates row update, insert and delete changes made to this
-    * <code>CachedRowSet</code> object to the underlying data source.
-    * <P>
-    * This method calls on this <code>CachedRowSet</code> object's writer
-    * to do the work behind the scenes.
-    * Standard <code>CachedRowSet</code> implementations should use the
-    * <code>SyncFactory</code> singleton
-    * to obtain a <code>SyncProvider</code> instance providing a
-    * <code>RowSetWriter</code> object (writer).  The writer will attempt
-    * to propagate changes made in this <code>CachedRowSet</code> object
-    * back to the data source.
-    * <P>
-    * When the method <code>acceptChanges</code> executes successfully, in
-    * addition to writing changes to the data source, it
-    * makes the values in the current row be the values in the original row.
-    * <P>
-    * Depending on the synchronization level of the <code>SyncProvider</code>
-    * implementation being used, the writer will compare the original values
-    * with those in the data source to check for conflicts. When there is a conflict,
-    * the <code>RIOptimisticProvider</code> implementation, for example, throws a
-    * <code>SyncProviderException</code> and does not write anything to the
-    * data source.
-    * <P>
-    * An application may choose to catch the <code>SyncProviderException</code>
-    * object and retrieve the <code>SyncResolver</code> object it contains.
-    * The <code>SyncResolver</code> object lists the conflicts row by row and
-    * sets a lock on the data source to avoid further conflicts while the
-    * current conflicts are being resolved.
-    * Further, for each conflict, it provides methods for examining the conflict
-    * and setting the value that should be persisted in the data source.
-    * After all conflicts have been resolved, an application must call the
-    * <code>acceptChanges</code> method again to write resolved values to the
-    * data source.  If all of the values in the data source are already the
-    * values to be persisted, the method <code>acceptChanges</code> does nothing.
-    * <P>
-    * Some provider implementations may use locks to ensure that there are no
-    * conflicts.  In such cases, it is guaranteed that the writer will succeed in
-    * writing changes to the data source when the method <code>acceptChanges</code>
-    * is called.  This method may be called immediately after the methods
-    * <code>updateRow</code>, <code>insertRow</code>, or <code>deleteRow</code>
-    * have been called, but it is more efficient to call it only once after
-    * all changes have been made so that only one connection needs to be
-    * established.
-    * <P>
-    * Note: The <code>acceptChanges()</code> method will determine if the
-    * <code>COMMIT_ON_ACCEPT_CHANGES</code> is set to true or not. If it is set
-    * to true, all updates in the synchronization are committed to the data
-    * source. Otherwise, the application <b>must</b> explicity call the
-    * <code>commit()</code> or <code>rollback()</code> methods as appropriate.
-    *
-    * @throws SQLException if the cursor is on the insert row
-    * @throws SyncProviderException if the underlying
-    * synchronization provider's writer fails to write the updates
-    * back to the data source
-    * @see #acceptChanges(java.sql.Connection)
-    * @see javax.sql.RowSetWriter
-    * @see javax.sql.rowset.spi.SyncFactory
-    * @see javax.sql.rowset.spi.SyncProvider
-    * @see javax.sql.rowset.spi.SyncProviderException
-    * @see javax.sql.rowset.spi.SyncResolver
-    */
-    public void acceptChanges() throws SyncProviderException;
-
-   /**
-    * Propagates all row update, insert and delete changes to the
-    * data source backing this <code>CachedRowSet</code> object
-    * using the specified <code>Connection</code> object to establish a
-    * connection to the data source.
-    * <P>
-    * The other version of the <code>acceptChanges</code> method is not passed
-    * a connection because it uses
-    * the <code>Connection</code> object already defined within the <code>RowSet</code>
-    * object, which is the connection used for populating it initially.
-    * <P>
-    * This form of the method <code>acceptChanges</code> is similar to the
-    * form that takes no arguments; however, unlike the other form, this form
-    * can be used only when the underlying data source is a JDBC data source.
-    * The updated <code>Connection</code> properties must be used by the
-    * <code>SyncProvider</code> to reset the <code>RowSetWriter</code>
-    * configuration to ensure that the contents of the <code>CachedRowSet</code>
-    * object are synchronized correctly.
-    * <P>
-    * When the method <code>acceptChanges</code> executes successfully, in
-    * addition to writing changes to the data source, it
-    * makes the values in the current row be the values in the original row.
-    * <P>
-    * Depending on the synchronization level of the <code>SyncProvider</code>
-    * implementation being used, the writer will compare the original values
-    * with those in the data source to check for conflicts. When there is a conflict,
-    * the <code>RIOptimisticProvider</code> implementation, for example, throws a
-    * <code>SyncProviderException</code> and does not write anything to the
-    * data source.
-    * <P>
-    * An application may choose to catch the <code>SyncProviderException</code>
-    * object and retrieve the <code>SyncResolver</code> object it contains.
-    * The <code>SyncResolver</code> object lists the conflicts row by row and
-    * sets a lock on the data source to avoid further conflicts while the
-    * current conflicts are being resolved.
-    * Further, for each conflict, it provides methods for examining the conflict
-    * and setting the value that should be persisted in the data source.
-    * After all conflicts have been resolved, an application must call the
-    * <code>acceptChanges</code> method again to write resolved values to the
-    * data source.  If all of the values in the data source are already the
-    * values to be persisted, the method <code>acceptChanges</code> does nothing.
-    * <P>
-    * Some provider implementations may use locks to ensure that there are no
-    * conflicts.  In such cases, it is guaranteed that the writer will succeed in
-    * writing changes to the data source when the method <code>acceptChanges</code>
-    * is called.  This method may be called immediately after the methods
-    * <code>updateRow</code>, <code>insertRow</code>, or <code>deleteRow</code>
-    * have been called, but it is more efficient to call it only once after
-    * all changes have been made so that only one connection needs to be
-    * established.
-    * <P>
-    * Note: The <code>acceptChanges()</code> method will determine if the
-    * <code>COMMIT_ON_ACCEPT_CHANGES</code> is set to true or not. If it is set
-    * to true, all updates in the synchronization are committed to the data
-    * source. Otherwise, the application <b>must</b> explicity call the
-    * <code>commit</code> or <code>rollback</code> methods as appropriate.
-    *
-    * @param con a standard JDBC <code>Connection</code> object
-    * @throws SQLException if the cursor is on the insert row
-    * @throws SyncProviderException if the underlying
-    * synchronization provider's writer fails to write the updates
-    * back to the data source
-    * @see #acceptChanges()
-    * @see javax.sql.RowSetWriter
-    * @see javax.sql.rowset.spi.SyncFactory
-    * @see javax.sql.rowset.spi.SyncProvider
-    * @see javax.sql.rowset.spi.SyncProviderException
-    * @see javax.sql.rowset.spi.SyncResolver
-    */
-    public void acceptChanges(Connection con) throws SyncProviderException;
-
-   /**
-    * Restores this <code>CachedRowSet</code> object to its original
-    * value, that is, its value before the last set of changes. If there
-    * have been no changes to the rowset or only one set of changes,
-    * the original value is the value with which this <code>CachedRowSet</code> object
-    * was populated; otherwise, the original value is
-    * the value it had immediately before its current value.
-    * <P>
-    * When this method is called, a <code>CachedRowSet</code> implementation
-    * must ensure that all updates, inserts, and deletes to the current
-    * rowset instance are replaced by the previous values. In addition,
-    * the cursor should be
-    * reset to the first row and a <code>rowSetChanged</code> event
-    * should be fired to notify all registered listeners.
-    *
-    * @throws SQLException if an error occurs rolling back the current value of
-    *       this <code>CachedRowSet</code> object to its previous value
-    * @see javax.sql.RowSetListener#rowSetChanged
-    */
-    public void restoreOriginal() throws SQLException;
-
-   /**
-    * Releases the current contents of this <code>CachedRowSet</code>
-    * object and sends a <code>rowSetChanged</code> event to all
-    * registered listeners. Any outstanding updates are discarded and
-    * the rowset contains no rows after this method is called. There
-    * are no interactions with the underlying data source, and any rowset
-    * content, metadata, and content updates should be non-recoverable.
-    * <P>
-    * This <code>CachedRowSet</code> object should lock until its contents and
-    * associated updates are fully cleared, thus preventing 'dirty' reads by
-    * other components that hold a reference to this <code>RowSet</code> object.
-    * In addition, the contents cannot be released
-    * until all all components reading this <code>CachedRowSet</code> object
-    * have completed their reads. This <code>CachedRowSet</code> object
-    * should be returned to normal behavior after firing the
-    * <code>rowSetChanged</code> event.
-    * <P>
-    * The metadata, including JDBC properties and Synchronization SPI
-    * properties, are maintained for future use. It is important that
-    * properties such as the <code>command</code> property be
-    * relevant to the originating data source from which this <code>CachedRowSet</code>
-    * object was originally established.
-    * <P>
-    * This method empties a rowset, as opposed to the <code>close</code> method,
-    * which marks the entire rowset as recoverable to allow the garbage collector
-    * the rowset's Java VM resources.
-    *
-    * @throws SQLException if an error occurs flushing the contents of this
-    * <code>CachedRowSet</code> object
-    * @see javax.sql.RowSetListener#rowSetChanged
-    * @see java.sql.ResultSet#close
-    */
-    public void release() throws SQLException;
-
-   /**
-    * Cancels the deletion of the current row and notifies listeners that
-    * a row has changed. After this method is called, the current row is
-    * no longer marked for deletion. This method can be called at any
-    * time during the lifetime of the rowset.
-    * <P>
-    * In addition, multiple cancellations of row deletions can be made
-    * by adjusting the position of the cursor using any of the cursor
-    * position control methods such as:
-    * <ul>
-    * <li><code>CachedRowSet.absolute</code>
-    * <li><code>CachedRowSet.first</code>
-    * <li><code>CachedRowSet.last</code>
-    * </ul>
-    *
-    * @throws SQLException if (1) the current row has not been deleted or
-    * (2) the cursor is on the insert row, before the first row, or
-    * after the last row
-    * @see javax.sql.rowset.CachedRowSet#undoInsert
-    * @see java.sql.ResultSet#cancelRowUpdates
-    */
-    public void undoDelete() throws SQLException;
-
-   /**
-    * Immediately removes the current row from this <code>CachedRowSet</code>
-    * object if the row has been inserted, and also notifies listeners that a
-    * row has changed. This method can be called at any time during the
-    * lifetime of a rowset and assuming the current row is within
-    * the exception limitations (see below), it cancels the row insertion
-    * of the current row.
-    * <P>
-    * In addition, multiple cancellations of row insertions can be made
-    * by adjusting the position of the cursor using any of the cursor
-    * position control methods such as:
-    * <ul>
-    * <li><code>CachedRowSet.absolute</code>
-    * <li><code>CachedRowSet.first</code>
-    * <li><code>CachedRowSet.last</code>
-    * </ul>
-    *
-    * @throws SQLException if (1) the current row has not been inserted or (2)
-    * the cursor is before the first row, after the last row, or on the
-    * insert row
-    * @see javax.sql.rowset.CachedRowSet#undoDelete
-    * @see java.sql.ResultSet#cancelRowUpdates
-    */
-    public void undoInsert() throws SQLException;
-
-
-   /**
-    * Immediately reverses the last update operation if the
-    * row has been modified. This method can be
-    * called to reverse updates on all columns until all updates in a row have
-    * been rolled back to their state just prior to the last synchronization
-    * (<code>acceptChanges</code>) or population. This method may also be called
-    * while performing updates to the insert row.
-    * <P>
-    * <code>undoUpdate</code> may be called at any time during the lifetime of a
-    * rowset; however, after a synchronization has occurred, this method has no
-    * effect until further modification to the rowset data has occurred.
-    *
-    * @throws SQLException if the cursor is before the first row or after the last
-    *     row in in this <code>CachedRowSet</code> object
-    * @see #undoDelete
-    * @see #undoInsert
-    * @see java.sql.ResultSet#cancelRowUpdates
-    */
-    public void undoUpdate() throws SQLException;
-
-   /**
-    * Indicates whether the designated column in the current row of this
-    * <code>CachedRowSet</code> object has been updated.
-    *
-    * @param idx an <code>int</code> identifying the column to be checked for updates
-    * @return <code>true</code> if the designated column has been visibly updated;
-    * <code>false</code> otherwise
-    * @throws SQLException if the cursor is on the insert row, before the first row,
-    *     or after the last row
-    * @see java.sql.DatabaseMetaData#updatesAreDetected
-    */
-    public boolean columnUpdated(int idx) throws SQLException;
-
-
-   /**
-    * Indicates whether the designated column in the current row of this
-    * <code>CachedRowSet</code> object has been updated.
-    *
-    * @param columnName a <code>String</code> object giving the name of the
-    *        column to be checked for updates
-    * @return <code>true</code> if the column has been visibly updated;
-    * <code>false</code> otherwise
-    * @throws SQLException if the cursor is on the insert row, before the first row,
-    *      or after the last row
-    * @see java.sql.DatabaseMetaData#updatesAreDetected
-    */
-    public boolean columnUpdated(String columnName) throws SQLException;
-
-   /**
-    * Converts this <code>CachedRowSet</code> object to a <code>Collection</code>
-    * object that contains all of this <code>CachedRowSet</code> object's data.
-    * Implementations have some latitude in
-    * how they can represent this <code>Collection</code> object because of the
-    * abstract nature of the <code>Collection</code> framework.
-    * Each row must be fully represented in either a
-    * general purpose <code>Collection</code> implementation or a specialized
-    * <code>Collection</code> implementation, such as a <code>TreeMap</code>
-    * object or a <code>Vector</code> object.
-    * An SQL <code>NULL</code> column value must be represented as a <code>null</code>
-    * in the Java programming language.
-    * <P>
-    * The standard reference implementation for the <code>CachedRowSet</code>
-    * interface uses a <code>TreeMap</code> object for the rowset, with the
-    * values in each row being contained in  <code>Vector</code> objects. It is
-    * expected that most implementations will do the same.
-    * <P>
-    * The <code>TreeMap</code> type of collection guarantees that the map will be in
-    * ascending key order, sorted according to the natural order for the
-    * key's class.
-    * Each key references a <code>Vector</code> object that corresponds to one
-    * row of a <code>RowSet</code> object. Therefore, the size of each
-    * <code>Vector</code> object  must be exactly equal to the number of
-    * columns in the <code>RowSet</code> object.
-    * The key used by the <code>TreeMap</code> collection is determined by the
-    * implementation, which may choose to leverage a set key that is
-    * available within the internal <code>RowSet</code> tabular structure by
-    * virtue of a key already set either on the <code>RowSet</code> object
-    * itself or on the underlying SQL data.
-    * <P>
-    *
-    * @return a <code>Collection</code> object that contains the values in
-    * each row in this <code>CachedRowSet</code> object
-    * @throws SQLException if an error occurs generating the collection
-    * @see #toCollection(int)
-    * @see #toCollection(String)
-    */
-    public Collection<?> toCollection() throws SQLException;
-
-   /**
-    * Converts the designated column in this <code>CachedRowSet</code> object
-    * to a <code>Collection</code> object. Implementations have some latitude in
-    * how they can represent this <code>Collection</code> object because of the
-    * abstract nature of the <code>Collection</code> framework.
-    * Each column value should be fully represented in either a
-    * general purpose <code>Collection</code> implementation or a specialized
-    * <code>Collection</code> implementation, such as a <code>Vector</code> object.
-    * An SQL <code>NULL</code> column value must be represented as a <code>null</code>
-    * in the Java programming language.
-    * <P>
-    * The standard reference implementation uses a <code>Vector</code> object
-    * to contain the column values, and it is expected
-    * that most implementations will do the same. If a <code>Vector</code> object
-    * is used, it size must be exactly equal to the number of rows
-    * in this <code>CachedRowSet</code> object.
-    *
-    * @param column an <code>int</code> indicating the column whose values
-    *        are to be represented in a <code>Collection</code> object
-    * @return a <code>Collection</code> object that contains the values
-    * stored in the specified column of this <code>CachedRowSet</code>
-    * object
-    * @throws SQLException if an error occurs generating the collection or
-    * an invalid column id is provided
-    * @see #toCollection
-    * @see #toCollection(String)
-    */
-    public Collection<?> toCollection(int column) throws SQLException;
-
-   /**
-    * Converts the designated column in this <code>CachedRowSet</code> object
-    * to a <code>Collection</code> object. Implementations have some latitude in
-    * how they can represent this <code>Collection</code> object because of the
-    * abstract nature of the <code>Collection</code> framework.
-    * Each column value should be fully represented in either a
-    * general purpose <code>Collection</code> implementation or a specialized
-    * <code>Collection</code> implementation, such as a <code>Vector</code> object.
-    * An SQL <code>NULL</code> column value must be represented as a <code>null</code>
-    * in the Java programming language.
-    * <P>
-    * The standard reference implementation uses a <code>Vector</code> object
-    * to contain the column values, and it is expected
-    * that most implementations will do the same. If a <code>Vector</code> object
-    * is used, it size must be exactly equal to the number of rows
-    * in this <code>CachedRowSet</code> object.
-    *
-    * @param column a <code>String</code> object giving the name of the
-    *        column whose values are to be represented in a collection
-    * @return a <code>Collection</code> object that contains the values
-    * stored in the specified column of this <code>CachedRowSet</code>
-    * object
-    * @throws SQLException if an error occurs generating the collection or
-    * an invalid column id is provided
-    * @see #toCollection
-    * @see #toCollection(int)
-    */
-    public Collection<?> toCollection(String column) throws SQLException;
-
-   /**
-    * Retrieves the <code>SyncProvider</code> implementation for this
-    * <code>CachedRowSet</code> object. Internally, this method is used by a rowset
-    * to trigger read or write actions between the rowset
-    * and the data source. For example, a rowset may need to get a handle
-    * on the the rowset reader (<code>RowSetReader</code> object) from the
-    * <code>SyncProvider</code> to allow the rowset to be populated.
-    * <pre>
-    *     RowSetReader rowsetReader = null;
-    *     SyncProvider provider =
-    *         SyncFactory.getInstance("javax.sql.rowset.provider.RIOptimisticProvider");
-    *         if (provider instanceof RIOptimisticProvider) {
-    *             rowsetReader = provider.getRowSetReader();
-    *         }
-    * </pre>
-    * Assuming <i>rowsetReader</i> is a private, accessible field within
-    * the rowset implementation, when an application calls the <code>execute</code>
-    * method, it in turn calls on the reader's <code>readData</code> method
-    * to populate the <code>RowSet</code> object.
-    *<pre>
-    *     rowsetReader.readData((RowSetInternal)this);
-    * </pre>
-    * <P>
-    * In addition, an application can use the <code>SyncProvider</code> object
-    * returned by this method to call methods that return information about the
-    * <code>SyncProvider</code> object, including information about the
-    * vendor, version, provider identification, synchronization grade, and locks
-    * it currently has set.
-    *
-    * @return the <code>SyncProvider</code> object that was set when the rowset
-    *      was instantiated, or if none was was set, the default provider
-    * @throws SQLException if an error occurs while returning the
-    * <code>SyncProvider</code> object
-    * @see #setSyncProvider
-    */
-    public SyncProvider getSyncProvider() throws SQLException;
-
-   /**
-    * Sets the <code>SyncProvider</code> objec for this <code>CachedRowSet</code>
-    * object to the one specified.  This method
-    * allows the <code>SyncProvider</code> object to be reset.
-    * <P>
-    * A <code>CachedRowSet</code> implementation should always be instantiated
-    * with an available <code>SyncProvider</code> mechanism, but there are
-    * cases where resetting the <code>SyncProvider</code> object is desirable
-    * or necessary. For example, an application might want to use the default
-    * <code>SyncProvider</code> object for a time and then choose to use a provider
-    * that has more recently become available and better fits its needs.
-    * <P>
-    * Resetting the <code>SyncProvider</code> object causes the
-    * <code>RowSet</code> object to request a new <code>SyncProvider</code> implementation
-    * from the <code>SyncFactory</code>. This has the effect of resetting
-    * all previous connections and relationships with the originating
-    * data source and can potentially drastically change the synchronization
-    * behavior of a disconnected rowset.
-    *
-    * @param provider a <code>String</code> object giving the fully qualified class
-    *        name of a <code>SyncProvider</code> implementation
-    * @throws SQLException if an error occurs while attempting to reset the
-    * <code>SyncProvider</code> implementation
-    * @see #getSyncProvider
-    */
-    public void setSyncProvider(String provider) throws SQLException;
-
-   /**
-    * Returns the number of rows in this <code>CachedRowSet</code>
-    * object.
-    *
-    * @return number of rows in the rowset
-    */
-    public int size();
-
-   /**
-    * Sets the metadata for this <code>CachedRowSet</code> object with
-    * the given <code>RowSetMetaData</code> object. When a
-    * <code>RowSetReader</code> object is reading the contents of a rowset,
-    * it creates a <code>RowSetMetaData</code> object and initializes
-    * it using the methods in the <code>RowSetMetaData</code> implementation.
-    * The reference implementation uses the <code>RowSetMetaDataImpl</code>
-    * class. When the reader has completed reading the rowset contents,
-    * this method is called internally to pass the <code>RowSetMetaData</code>
-    * object to the rowset.
-    *
-    * @param md a <code>RowSetMetaData</code> object containing
-    * metadata about the columns in this <code>CachedRowSet</code> object
-    * @throws SQLException if invalid metadata is supplied to the
-    * rowset
-    */
-    public void setMetaData(RowSetMetaData md) throws SQLException;
-
-   /**
-    * Returns a <code>ResultSet</code> object containing the original value of this
-    * <code>CachedRowSet</code> object.
-    * <P>
-    * The cursor for the <code>ResultSet</code>
-    * object should be positioned before the first row.
-    * In addition, the returned <code>ResultSet</code> object should have the following
-    * properties:
-    * <UL>
-    * <LI>ResultSet.TYPE_SCROLL_INSENSITIVE
-    * <LI>ResultSet.CONCUR_UPDATABLE
-    * </UL>
-    * <P>
-    * The original value for a <code>RowSet</code> object is the value it had before
-    * the last synchronization with the underlying data source.  If there have been
-    * no synchronizations, the original value will be the value with which the
-    * <code>RowSet</code> object was populated.  This method is called internally
-    * when an aplication calls the method <code>acceptChanges</code> and the
-    * <code>SyncProvider</code> object has been implemented to check for conflicts.
-    * If this is the case, the writer compares the original value with the value
-    * currently in the data source to check for conflicts.
-    *
-    * @return a <code>ResultSet</code> object that contains the original value for
-    *         this <code>CachedRowSet</code> object
-    * @throws SQLException if an error occurs producing the
-    * <code>ResultSet</code> object
-    */
-   public ResultSet getOriginal() throws SQLException;
-
-   /**
-    * Returns a <code>ResultSet</code> object containing the original value for the
-    * current row only of this <code>CachedRowSet</code> object.
-    * <P>
-    * The cursor for the <code>ResultSet</code>
-    * object should be positioned before the first row.
-    * In addition, the returned <code>ResultSet</code> object should have the following
-    * properties:
-    * <UL>
-    * <LI>ResultSet.TYPE_SCROLL_INSENSITIVE
-    * <LI>ResultSet.CONCUR_UPDATABLE
-    * </UL>
-    *
-    * @return the original result set of the row
-    * @throws SQLException if there is no current row
-    * @see #setOriginalRow
-    */
-    public ResultSet getOriginalRow() throws SQLException;
-
-   /**
-    * Sets the current row in this <code>CachedRowSet</code> object as the original
-    * row.
-    * <P>
-    * This method is called internally after the any modified values in the current
-    * row have been synchronized with the data source. The current row must be tagged
-    * as no longer inserted, deleted or updated.
-    * <P>
-    * A call to <code>setOriginalRow</code> is irreversible.
-    *
-    * @throws SQLException if there is no current row or an error is
-    * encountered resetting the contents of the original row
-    * @see #getOriginalRow
-    */
-    public void setOriginalRow() throws SQLException;
-
-   /**
-    * Returns an identifier for the object (table) that was used to
-    * create this <code>CachedRowSet</code> object. This name may be set on multiple occasions,
-    * and the specification imposes no limits on how many times this
-    * may occur or whether standard implementations should keep track
-    * of previous table names.
-    *
-    * @return a <code>String</code> object giving the name of the table that is the
-    *         source of data for this <code>CachedRowSet</code> object or <code>null</code>
-    *         if no name has been set for the table
-    * @throws SQLException if an error is encountered returning the table name
-    * @see javax.sql.RowSetMetaData#getTableName
-    */
-    public String getTableName() throws SQLException;
-
-   /**
-    * Sets the identifier for the table from which this <code>CachedRowSet</code>
-    * object was derived to the given table name. The writer uses this name to
-    * determine which table to use when comparing the values in the data source with the
-    * <code>CachedRowSet</code> object's values during a synchronization attempt.
-    * The table identifier also indicates where modified values from this
-    * <code>CachedRowSet</code> object should be written.
-    * <P>
-    * The implementation of this <code>CachedRowSet</code> object may obtain the
-    * the name internally from the <code>RowSetMetaDataImpl</code> object.
-    *
-    * @param tabName a <code>String</code> object identifying the table from which this
-             <code>CachedRowSet</code> object was derived; cannot be <code>null</code>
-    *         but may be an empty string
-    * @throws SQLException if an error is encountered naming the table or
-    *     <i>tabName</i> is <code>null</code>
-    * @see javax.sql.RowSetMetaData#setTableName
-    * @see javax.sql.RowSetWriter
-    * @see javax.sql.rowset.spi.SyncProvider
-    */
-   public void setTableName(String tabName) throws SQLException;
-
-   /**
-    * Returns an array containing one or more column numbers indicating the columns
-    * that form a key that uniquely
-    * identifies a row in this <code>CachedRowSet</code> object.
-    *
-    * @return an array containing the column number or numbers that indicate which columns
-    *       constitute a primary key
-    *       for a row in this <code>CachedRowSet</code> object. This array should be
-    *       empty if no columns are representative of a primary key.
-    * @throws SQLException if this <code>CachedRowSet</code> object is empty
-    * @see #setKeyColumns
-    * @see Joinable#getMatchColumnIndexes
-    * @see Joinable#getMatchColumnNames
-    */
-    public int[] getKeyColumns() throws SQLException;
-
-   /**
-    * Sets this <code>CachedRowSet</code> object's <code>keyCols</code>
-    * field with the given array of column numbers, which forms a key
-    * for uniquely identifying a row in this <code>CachedRowSet</code> object.
-    * <p>
-    * If a <code>CachedRowSet</code> object becomes part of a <code>JoinRowSet</code>
-    * object, the keys defined by this method and the resulting constraints are
-    * maintained if the columns designated as key columns also become match
-    * columns.
-    *
-    * @param keys an array of <code>int</code> indicating the columns that form
-    *        a primary key for this <code>CachedRowSet</code> object; every
-    *        element in the array must be greater than <code>0</code> and
-    *        less than or equal to the number of columns in this rowset
-    * @throws SQLException if any of the numbers in the given array
-    *            are not valid for this rowset
-    * @see #getKeyColumns
-    * @see Joinable#setMatchColumn(String)
-    * @see Joinable#setMatchColumn(int)
-
-    */
-    public void setKeyColumns(int[] keys) throws SQLException;
-
-
-   /**
-    * Returns a new <code>RowSet</code> object backed by the same data as
-    * that of this <code>CachedRowSet</code> object. In effect, both
-    * <code>CachedRowSet</code> objects have a cursor over the same data.
-    * As a result, any changes made by a duplicate are visible to the original
-    * and to any other duplicates, just as a change made by the original is visible
-    * to all of its duplicates. If a duplicate calls a method that changes the
-    * underlying data, the method it calls notifies all registered listeners
-    * just as it would when it is called by the original <code>CachedRowSet</code>
-    * object.
-    * <P>
-    * In addition, any <code>RowSet</code> object
-    * created by this method will have the same properties as this
-    * <code>CachedRowSet</code> object. For example, if this <code>CachedRowSet</code>
-    * object is read-only, all of its duplicates will also be read-only. If it is
-    * changed to be updatable, the duplicates also become updatable.
-    * <P>
-    * NOTE: If multiple threads access <code>RowSet</code> objects created from
-    * the <code>createShared()</code> method, the following behavior is specified
-    * to preserve shared data integrity: reads and writes of all
-    * shared <code>RowSet</code> objects should be made serially between each
-    * object and the single underlying tabular structure.
-    *
-    * @return a new shared <code>RowSet</code> object that has the same properties
-    *         as this <code>CachedRowSet</code> object and that has a cursor over
-    *         the same data
-    * @throws SQLException if an error occurs or cloning is not
-    * supported in the underlying platform
-    * @see javax.sql.RowSetEvent
-    * @see javax.sql.RowSetListener
-    */
-    public RowSet createShared() throws SQLException;
-
-   /**
-    * Creates a <code>RowSet</code> object that is a deep copy of the data in
-    * this <code>CachedRowSet</code> object. In contrast to
-    * the <code>RowSet</code> object generated from a <code>createShared</code>
-    * call, updates made to the copy of the original <code>RowSet</code> object
-    * must not be visible to the original <code>RowSet</code> object. Also, any
-    * event listeners that are registered with the original
-    * <code>RowSet</code> must not have scope over the new
-    * <code>RowSet</code> copies. In addition, any constraint restrictions
-    * established must be maintained.
-    *
-    * @return a new <code>RowSet</code> object that is a deep copy
-    * of this <code>CachedRowSet</code> object and is
-    * completely independent of this <code>CachedRowSet</code> object
-    * @throws SQLException if an error occurs in generating the copy of
-    * the of this <code>CachedRowSet</code> object
-    * @see #createShared
-    * @see #createCopySchema
-    * @see #createCopyNoConstraints
-    * @see javax.sql.RowSetEvent
-    * @see javax.sql.RowSetListener
-    */
-    public CachedRowSet createCopy() throws SQLException;
-
-    /**
-     * Creates a <code>CachedRowSet</code> object that is an empty copy of this
-     * <code>CachedRowSet</code> object.  The copy
-     * must not contain any contents but only represent the table
-     * structure of the original <code>CachedRowSet</code> object. In addition, primary
-     * or foreign key constraints set in the originating <code>CachedRowSet</code> object must
-     * be equally enforced in the new empty <code>CachedRowSet</code> object.
-     * In contrast to
-     * the <code>RowSet</code> object generated from a <code>createShared</code> method
-     * call, updates made to a copy of this <code>CachedRowSet</code> object with the
-     * <code>createCopySchema</code> method must not be visible to it.
-     * <P>
-     * Applications can form a <code>WebRowSet</code> object from the <code>CachedRowSet</code>
-     * object returned by this method in order
-     * to export the <code>RowSet</code> schema definition to XML for future use.
-     *
-     * @throws SQLException if an error occurs in cloning the structure of this
-     *         <code>CachedRowSet</code> object
-     * @see #createShared
-     * @see #createCopySchema
-     * @see #createCopyNoConstraints
-     * @see javax.sql.RowSetEvent
-     * @see javax.sql.RowSetListener
-     */
-    public CachedRowSet createCopySchema() throws SQLException;
-
-    /**
-     * Creates a <code>CachedRowSet</code> object that is a deep copy of
-     * this <code>CachedRowSet</code> object's data but is independent of it.
-     * In contrast to
-     * the <code>RowSet</code> object generated from a <code>createShared</code>
-     * method call, updates made to a copy of this <code>CachedRowSet</code> object
-     * must not be visible to it. Also, any
-     * event listeners that are registered with this
-     * <code>CachedRowSet</code> object must not have scope over the new
-     * <code>RowSet</code> object. In addition, any constraint restrictions
-     * established for this <code>CachedRowSet</code> object must <b>not</b> be maintained
-     * in the copy.
-     *
-     * @return a new <code>CachedRowSet</code> object that is a deep copy
-     *     of this <code>CachedRowSet</code> object and is
-     *     completely independent of this  <code>CachedRowSet</code> object
-     * @throws SQLException if an error occurs in generating the copy of
-     *     the of this <code>CachedRowSet</code> object
-     * @see #createCopy
-     * @see #createShared
-     * @see #createCopySchema
-     * @see javax.sql.RowSetEvent
-     * @see javax.sql.RowSetListener
-     */
-    public CachedRowSet createCopyNoConstraints() throws SQLException;
-
-    /**
-     * Retrieves the first warning reported by calls on this <code>RowSet</code> object.
-     * Subsequent warnings on this <code>RowSet</code> object will be chained to the
-     * <code>RowSetWarning</code> object that this method returns.
-     *
-     * The warning chain is automatically cleared each time a new row is read.
-     * This method may not be called on a RowSet object that has been closed;
-     * doing so will cause a <code>SQLException</code> to be thrown.
-     *
-     * @return RowSetWarning the first <code>RowSetWarning</code>
-     * object reported or null if there are none
-     * @throws SQLException if this method is called on a closed RowSet
-     * @see RowSetWarning
-     */
-    public RowSetWarning getRowSetWarnings() throws SQLException;
-
-    /**
-     * Retrieves a <code>boolean</code> indicating whether rows marked
-     * for deletion appear in the set of current rows. If <code>true</code> is
-     * returned, deleted rows are visible with the current rows. If
-     * <code>false</code> is returned, rows are not visible with the set of
-     * current rows. The default value is <code>false</code>.
-     * <P>
-     * Standard rowset implementations may choose to restrict this behavior
-     * due to security considerations or to better fit certain deployment
-     * scenarios. This is left as implementation defined and does not
-     * represent standard behavior.
-     * <P>
-     * Note: Allowing deleted rows to remain visible complicates the behavior
-     * of some standard JDBC <code>RowSet</code> Implementations methods.
-     * However, most rowset users can simply ignore this extra detail because
-     * only very specialized applications will likely want to take advantage of
-     * this feature.
-     *
-     * @return <code>true</code> if deleted rows are visible;
-     *         <code>false</code> otherwise
-     * @throws SQLException if a rowset implementation is unable to
-     * to determine whether rows marked for deletion are visible
-     * @see #setShowDeleted
-     */
-    public boolean getShowDeleted() throws SQLException;
-
-    /**
-     * Sets the property <code>showDeleted</code> to the given
-     * <code>boolean</code> value, which determines whether
-     * rows marked for deletion appear in the set of current rows.
-     * If the value is set to <code>true</code>, deleted rows are immediately
-     * visible with the set of current rows. If the value is set to
-     * <code>false</code>, the deleted rows are set as invisible with the
-     * current set of rows.
-     * <P>
-     * Standard rowset implementations may choose to restrict this behavior
-     * due to security considerations or to better fit certain deployment
-     * scenarios. This is left as implementations defined and does not
-     * represent standard behavior.
-     *
-     * @param b <code>true</code> if deleted rows should be shown;
-     *              <code>false</code> otherwise
-     * @exception SQLException if a rowset implementation is unable to
-     * to reset whether deleted rows should be visible
-     * @see #getShowDeleted
-     */
-    public void setShowDeleted(boolean b) throws SQLException;
-
-    /**
-     * Each <code>CachedRowSet</code> object's <code>SyncProvider</code> contains
-     * a <code>Connection</code> object from the <code>ResultSet</code> or JDBC
-     * properties passed to it's constructors. This method wraps the
-     * <code>Connection</code> commit method to allow flexible
-     * auto commit or non auto commit transactional control support.
-     * <p>
-     * Makes all changes that are performed by the <code>acceptChanges()</code>
-     * method since the previous commit/rollback permanent. This method should
-     * be used only when auto-commit mode has been disabled.
-     *
-     * @throws SQLException if a database access error occurs or this
-     * Connection object within this <code>CachedRowSet</code> is in auto-commit mode
-     * @see java.sql.Connection#setAutoCommit
-     */
-    public void commit() throws SQLException;
-
-    /**
-     * Each <code>CachedRowSet</code> object's <code>SyncProvider</code> contains
-     * a <code>Connection</code> object from the original <code>ResultSet</code>
-     * or JDBC properties passed to it.
-     * <p>
-     * Undoes all changes made in the current transaction.  This method
-     * should be used only when auto-commit mode has been disabled.
-     *
-     * @throws SQLException if a database access error occurs or this Connection
-     * object within this <code>CachedRowSet</code> is in auto-commit mode.
-     */
-    public void rollback() throws SQLException;
-
-    /**
-     * Each <code>CachedRowSet</code> object's <code>SyncProvider</code> contains
-     * a <code>Connection</code> object from the original <code>ResultSet</code>
-     * or JDBC properties passed to it.
-     * <p>
-     * Undoes all changes made in the current transaction back to the last
-     * <code>Savepoint</code> transaction marker. This method should be used only
-     * when auto-commit mode has been disabled.
-     *
-     * @param s A <code>Savepoint</code> transaction marker
-     * @throws SQLException if a database access error occurs or this Connection
-     * object within this <code>CachedRowSet</code> is in auto-commit mode.
-     */
-    public void rollback(Savepoint s) throws SQLException;
-
-    /**
-     * Causes the <code>CachedRowSet</code> object's <code>SyncProvider</code>
-     * to commit the changes when <code>acceptChanges()</code> is called. If
-     * set to false, the changes will <b>not</b> be committed until one of the
-     * <code>CachedRowSet</code> interface transaction methods is called.
-     *
-     * @deprecated Because this field is final (it is part of an interface),
-     *  its value cannot be changed.
-     * @see #commit
-     * @see #rollback
-     */
-    @Deprecated
-    public static final boolean COMMIT_ON_ACCEPT_CHANGES = true;
-
-    /**
-     * Notifies registered listeners that a RowSet object in the given RowSetEvent
-     * object has populated a number of additional rows. The <code>numRows</code> parameter
-     * ensures that this event will only be fired every <code>numRow</code>.
-     * <p>
-     * The source of the event can be retrieved with the method event.getSource.
-     *
-     * @param event a <code>RowSetEvent</code> object that contains the
-     *     <code>RowSet</code> object that is the source of the events
-     * @param numRows when populating, the number of rows interval on which the
-     *     <code>CachedRowSet</code> populated should fire; the default value
-     *     is zero; cannot be less than <code>fetchSize</code> or zero
-     */
-    public void rowSetPopulated(RowSetEvent event, int numRows) throws SQLException;
-
-    /**
-     * Populates this <code>CachedRowSet</code> object with data from
-     * the given <code>ResultSet</code> object. While related to the <code>populate(ResultSet)</code>
-     * method, an additional parameter is provided to allow starting position within
-     * the <code>ResultSet</code> from where to populate the CachedRowSet
-     * instance.
-     * <P>
-     * This method can be used as an alternative to the <code>execute</code> method when an
-     * application has a connection to an open <code>ResultSet</code> object.
-     * Using the method <code>populate</code> can be more efficient than using
-     * the version of the <code>execute</code> method that takes no parameters
-     * because it does not open a new connection and re-execute this
-     * <code>CachedRowSet</code> object's command. Using the <code>populate</code>
-     *  method is more a matter of convenience when compared to using the version
-     * of <code>execute</code> that takes a <code>ResultSet</code> object.
-     *
-     * @param startRow the position in the <code>ResultSet</code> from where to start
-     *                populating the records in this <code>CachedRowSet</code>
-     * @param rs the <code>ResultSet</code> object containing the data
-     * to be read into this <code>CachedRowSet</code> object
-     * @throws SQLException if a null <code>ResultSet</code> object is supplied
-     * or this <code>CachedRowSet</code> object cannot
-     * retrieve the associated <code>ResultSetMetaData</code> object
-     * @see #execute
-     * @see #populate(ResultSet)
-     * @see java.sql.ResultSet
-     * @see java.sql.ResultSetMetaData
-    */
-    public void populate(ResultSet rs, int startRow) throws SQLException;
-
-    /**
-     * Sets the <code>CachedRowSet</code> object's page-size. A <code>CachedRowSet</code>
-     * may be configured to populate itself in page-size sized batches of rows. When
-     * either <code>populate()</code> or <code>execute()</code> are called, the
-     * <code>CachedRowSet</code> fetches an additional page according to the
-     * original SQL query used to populate the RowSet.
-     *
-     * @param size the page-size of the <code>CachedRowSet</code>
-     * @throws SQLException if an error occurs setting the <code>CachedRowSet</code>
-     *      page size or if the page size is less than 0.
-     */
-    public void setPageSize(int size) throws SQLException;
-
-    /**
-     * Returns the page-size for the <code>CachedRowSet</code> object
-     *
-     * @return an <code>int</code> page size
-     */
-    public int getPageSize();
-
-    /**
-     * Increments the current page of the <code>CachedRowSet</code>. This causes
-     * the <code>CachedRowSet</code> implementation to fetch the next page-size
-     * rows and populate the RowSet, if remaining rows remain within scope of the
-     * original SQL query used to populated the RowSet.
-     *
-     * @return true if more pages exist; false if this is the last page
-     * @throws SQLException if an error occurs fetching the next page, or if this
-     *     method is called prematurely before populate or execute.
-     */
-    public boolean nextPage() throws SQLException;
-
-    /**
-     * Decrements the current page of the <code>CachedRowSet</code>. This causes
-     * the <code>CachedRowSet</code> implementation to fetch the previous page-size
-     * rows and populate the RowSet. The amount of rows returned in the previous
-     * page must always remain within scope of the original SQL query used to
-     * populate the RowSet.
-     *
-     * @return true if the previous page is successfully retrieved; false if this
-     *     is the first page.
-     * @throws SQLException if an error occurs fetching the previous page, or if
-     *     this method is called prematurely before populate or execute.
-     */
-    public boolean previousPage() throws SQLException;
-
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/FilteredRowSet.java b/ojluni/src/main/java/javax/sql/rowset/FilteredRowSet.java
deleted file mode 100755
index 15bfa42..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/FilteredRowSet.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package javax.sql.rowset;
-
-import java.sql.*;
-import javax.sql.*;
-import javax.naming.*;
-import java.io.*;
-import java.math.*;
-
-/**
- * The standard interface that all standard implementations of
- * <code>FilteredRowSet</code> must implement. The <code>FilteredRowSetImpl</code> class
- * provides the reference implementation which may be extended if required.
- * Alternatively, a vendor is free to implement its own version
- * by implementing this interface.
- *
- * <h3>1.0 Background</h3>
- *
- * There are occasions when a <code>RowSet</code> object has a need to provide a degree
- * of filtering to its contents. One possible solution is to provide
- * a query language for all standard <code>RowSet</code> implementations; however,
- * this is an impractical approach for lightweight components such as disconnected
- * <code>RowSet</code>
- * objects. The <code>FilteredRowSet</code> interface seeks to address this need
- * without supplying a heavyweight query language along with the processing that
- * such a query language would require.
- * <p>
- * A JDBC <code>FilteredRowSet</code> standard implementation implements the
- * <code>RowSet</code> interfaces and extends the
- * <code>CachedRowSet</code><sup><font size=-2>TM</font></sup> class. The
- * <code>CachedRowSet</code> class provides a set of protected cursor manipulation
- * methods, which a <code>FilteredRowSet</code> implementation can override
- * to supply filtering support.
- *
- * <h3>2.0 Predicate Sharing</h3>
- *
- * If a <code>FilteredRowSet</code> implementation is shared using the
- * inherited <code>createShared</code> method in parent interfaces, the
- * <code>Predicate</code> should be shared without modification by all
- * <code>FilteredRowSet</code> instance clones.
- *
- * <h3>3.0 Usage</h3>
- * <p>
- * By implementing a <code>Predicate</code> (see example in <a href="Predicate.html">Predicate</a>
- * class JavaDoc), a <code>FilteredRowSet</code> could then be used as described
- * below.
- * <P>
- * <code>
- * <pre>
- *     FilteredRowSet frs = new FilteredRowSetImpl();
- *     frs.populate(rs);
- *
- *     Range name = new Range("Alpha", "Bravo", "columnName");
- *     frs.setFilter(name);
- *
- *     frs.next() // only names from "Alpha" to "Bravo" will be returned
- * </pre>
- * </code>
- * In the example above, we initialize a <code>Range</code> object which
- * implements the <code>Predicate</code> interface. This object expresses
- * the following constraints: All rows outputted or modified from this
- * <code>FilteredRowSet</code> object must fall between the values 'Alpha' and
- * 'Bravo' both values inclusive, in the column 'columnName'. If a filter is
- * applied to a <code>FilteredRowSet</code> object that contains no data that
- * falls within the range of the filter, no rows are returned.
- * <p>
- * This framework allows multiple classes implementing predicates to be
- * used in combination to achieved the required filtering result with
- * out the need for query language processing.
- * <p>
- * <h3>4.0 Updating a <code>FilteredRowSet</code> Object</h3>
- * The predicate set on a <code>FilteredRowSet</code> object
- * applies a criterion on all rows in a
- * <code>RowSet</code> object to manage a subset of rows in a <code>RowSet</code>
- * object. This criterion governs the subset of rows that are visible and also
- * defines which rows can be modified, deleted or inserted.
- * <p>
- * Therefore, the predicate set on a <code>FilteredRowSet</code> object must be
- * considered as bi-directional and the set criterion as the gating mechanism
- * for all views and updates to the <code>FilteredRowSet</code> object. Any attempt
- * to update the <code>FilteredRowSet</code> that violates the criterion will
- * result in a <code>SQLException</code> object being thrown.
- * <p>
- * The <code>FilteredRowSet</code> range criterion can be modified by applying
- * a new <code>Predicate</code> object to the <code>FilteredRowSet</code>
- * instance at any time. This is  possible if no additional references to the
- * <code>FilteredRowSet</code> object are detected. A new filter has has an
- * immediate effect on criterion enforcement within the
- * <code>FilteredRowSet</code> object, and all subsequent views and updates will be
- * subject to similar enforcement.
- * <p>
- * <h3>5.0 Behavior of Rows Outside the Filter</h3>
- * Rows that fall outside of the filter set on a <code>FilteredRowSet</code>
- * object cannot be modified until the filter is removed or a
- * new filter is applied.
- * <p>
- * Furthermore, only rows that fall within the bounds of a filter will be
- * synchronized with the data source.
- *
- * @author Jonathan Bruce
- */
-
-public interface FilteredRowSet extends WebRowSet {
-
-   /**
-    * Applies the given <code>Predicate</code> object to this
-    * <code>FilteredRowSet</code>
-    * object. The filter applies controls both to inbound and outbound views,
-    * constraining which rows are visible and which
-    * rows can be manipulated.
-    * <p>
-    * A new <code>Predicate</code> object may be set at any time. This has the
-    * effect of changing constraints on the <code>RowSet</code> object's data.
-    * In addition, modifying the filter at runtime presents issues whereby
-    * multiple components may be operating on one <code>FilteredRowSet</code> object.
-    * Application developers must take responsibility for managing multiple handles
-    * to <code>FilteredRowSet</code> objects when their underling <code>Predicate</code>
-    * objects change.
-    *
-    * @param p a <code>Predicate</code> object defining the filter for this
-    * <code>FilteredRowSet</code> object. Setting a <b>null</b> value
-    * will clear the predicate, allowing all rows to become visible.
-    *
-    * @throws SQLException if an error occurs when setting the
-    *     <code>Predicate</code> object
-    */
-    public void setFilter(Predicate p) throws SQLException;
-
-   /**
-    * Retrieves the active filter for this <code>FilteredRowSet</code> object.
-    *
-    * @return p the <code>Predicate</code> for this <code>FilteredRowSet</code>
-    * object; <code>null</code> if no filter has been set.
-    */
-    public Predicate getFilter() ;
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/JdbcRowSet.java b/ojluni/src/main/java/javax/sql/rowset/JdbcRowSet.java
deleted file mode 100755
index 448f4cd..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/JdbcRowSet.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.
- */
-
-package javax.sql.rowset;
-
-import java.sql.*;
-import javax.sql.*;
-import javax.naming.*;
-import java.io.*;
-import java.math.*;
-import java.io.*;
-
-/**
- * The standard interface that all standard implementations of
- * <code>JdbcRowSet</code> must implement.
- *
- * <h3>1.0 Overview</h3>
- * A wrapper around a <code>ResultSet</code> object that makes it possible
- * to use the result set as a JavaBeans<sup><font size=-2>TM</font></sup>
- * component.  Thus, a <code>JdbcRowSet</code> object can be one of the Beans that
- * a tool makes available for composing an application.  Because
- * a <code>JdbcRowSet</code> is a connected rowset, that is, it continually
- * maintains its connection to a database using a JDBC technology-enabled
- * driver, it also effectively makes the driver a JavaBeans component.
- * <P>
- * Because it is always connected to its database, an instance of
- * <code>JdbcRowSet</code>
- * can simply take calls invoked on it and in turn call them on its
- * <code>ResultSet</code> object. As a consequence, a result set can, for
- * example, be a component in a Swing application.
- * <P>
- * Another advantage of a <code>JdbcRowSet</code> object is that it can be
- * used to make a <code>ResultSet</code> object scrollable and updatable.  All
- * <code>RowSet</code> objects are by default scrollable and updatable. If
- * the driver and database being used do not support scrolling and/or updating
- * of result sets, an application can populate a <code>JdbcRowSet</code> object
- * with the data of a <code>ResultSet</code> object and then operate on the
- * <code>JdbcRowSet</code> object as if it were the <code>ResultSet</code>
- * object.
- * <P>
- * <h3>2.0 Creating a <code>JdbcRowSet</code> Object</h3>
- * The reference implementation of the <code>JdbcRowSet</code> interface,
- * <code>JdbcRowSetImpl</code>, provides an implementation of
- * the default constructor.  A new instance is initialized with
- * default values, which can be set with new values as needed. A
- * new instance is not really functional until its <code>execute</code>
- * method is called. In general, this method does the following:
- * <UL>
- *   <LI> establishes a connection with a database
- *   <LI> creates a <code>PreparedStatement</code> object and sets any of its
- *        placeholder parameters
- *   <LI> executes the statement to create a <code>ResultSet</code> object
- * </UL>
- * If the <code>execute</code> method is successful, it will set the
- * appropriate private <code>JdbcRowSet</code> fields with the following:
- * <UL>
- *  <LI> a <code>Connection</code> object -- the connection between the rowset
- *       and the database
- *  <LI> a <code>PreparedStatement</code> object -- the query that produces
- *       the result set
- *  <LI> a <code>ResultSet</code> object -- the result set that the rowset's
- *       command produced and that is being made, in effect, a JavaBeans
- *       component
- * </UL>
- * If these fields have not been set, meaning that the <code>execute</code>
- * method has not executed successfully, no methods other than
- * <code>execute</code> and <code>close</code> may be called on the
- * rowset.  All other public methods will throw an exception.
- * <P>
- * Before calling the <code>execute</code> method, however, the command
- * and properties needed for establishing a connection must be set.
- * The following code fragment creates a <code>JdbcRowSetImpl</code> object,
- * sets the command and connection properties, sets the placeholder parameter,
- * and then invokes the method <code>execute</code>.
- * <PRE>
- *     JdbcRowSetImpl jrs = new JdbcRowSetImpl();
- *     jrs.setCommand("SELECT * FROM TITLES WHERE TYPE = ?");
- *     jrs.setURL("jdbc:myDriver:myAttribute");
- *     jrs.setUsername("cervantes");
- *     jrs.setPassword("sancho");
- *     jrs.setString(1, "BIOGRAPHY");
- *     jrs.execute();
- * </PRE>
- * The variable <code>jrs</code> now represents an instance of
- * <code>JdbcRowSetImpl</code> that is a thin wrapper around the
- * <code>ResultSet</code> object containing all the rows in the
- * table <code>TITLES</code> where the type of book is biography.
- * At this point, operations called on <code>jrs</code> will
- * affect the rows in the result set, which is effectively a JavaBeans
- * component.
- * <P>
- * The implementation of the <code>RowSet</code> method <code>execute</code> in the
- * <code>JdbcRowSet</code> reference implementation differs from that in the
- * <code>CachedRowSet</code><sup><font size=-2>TM</font></sup>
- * reference implementation to account for the different
- * requirements of connected and disconnected <code>RowSet</code> objects.
- * <p>
- *
- * @author Jonathan Bruce
- */
-
-public interface JdbcRowSet extends RowSet, Joinable {
-
-    /**
-     * Retrieves a <code>boolean</code> indicating whether rows marked
-     * for deletion appear in the set of current rows. If <code>true</code> is
-     * returned, deleted rows are visible with the current rows. If
-     * <code>false</code> is returned, rows are not visible with the set of
-     * current rows. The default value is <code>false</code>.
-     * <P>
-     * Standard rowset implementations may choose to restrict this behavior
-     * for security considerations or for certain deployment
-     * scenarios. The visibility of deleted rows is implementation-defined
-     * and does not represent standard behavior.
-     * <P>
-     * Note: Allowing deleted rows to remain visible complicates the behavior
-     * of some standard JDBC <code>RowSet</code> implementations methods.
-     * However, most rowset users can simply ignore this extra detail because
-     * only very specialized applications will likely want to take advantage of
-     * this feature.
-     *
-     * @return <code>true</code> if deleted rows are visible;
-     *         <code>false</code> otherwise
-     * @exception SQLException if a rowset implementation is unable to
-     *          to determine whether rows marked for deletion remain visible
-     * @see #setShowDeleted
-     */
-    public boolean getShowDeleted() throws SQLException;
-
-    /**
-     * Sets the property <code>showDeleted</code> to the given
-     * <code>boolean</code> value. This property determines whether
-     * rows marked for deletion continue to appear in the set of current rows.
-     * If the value is set to <code>true</code>, deleted rows are immediately
-     * visible with the set of current rows. If the value is set to
-     * <code>false</code>, the deleted rows are set as invisible with the
-     * current set of rows.
-     * <P>
-     * Standard rowset implementations may choose to restrict this behavior
-     * for security considerations or for certain deployment
-     * scenarios. This is left as implementation-defined and does not
-     * represent standard behavior.
-     *
-     * @param b <code>true</code> if deleted rows should be shown;
-     *              <code>false</code> otherwise
-     * @exception SQLException if a rowset implementation is unable to
-     *          to reset whether deleted rows should be visible
-     * @see #getShowDeleted
-     */
-    public void setShowDeleted(boolean b) throws SQLException;
-
-    /**
-     * Retrieves the first warning reported by calls on this <code>JdbcRowSet</code>
-     * object.
-     * If a second warning was reported on this <code>JdbcRowSet</code> object,
-     * it will be chained to the first warning and can be retrieved by
-     * calling the method <code>RowSetWarning.getNextWarning</code> on the
-     * first warning. Subsequent warnings on this <code>JdbcRowSet</code>
-     * object will be chained to the <code>RowSetWarning</code> objects
-     * returned by the method <code>RowSetWarning.getNextWarning</code>.
-     *
-     * The warning chain is automatically cleared each time a new row is read.
-     * This method may not be called on a <code>RowSet</code> object
-     * that has been closed;
-     * doing so will cause an <code>SQLException</code> to be thrown.
-     * <P>
-     * Because it is always connected to its data source, a <code>JdbcRowSet</code>
-     * object can rely on the presence of active
-     * <code>Statement</code>, <code>Connection</code>, and <code>ResultSet</code>
-     * instances. This means that  applications can obtain additional
-     * <code>SQLWarning</code>
-     * notifications by calling the <code>getNextWarning</code> methods that
-     * they provide.
-     * Disconnected <code>Rowset</code> objects, such as a
-     * <code>CachedRowSet</code> object, do not have access to
-     * these <code>getNextWarning</code> methods.
-     *
-     * @return the first <code>RowSetWarning</code>
-     * object reported on this <code>JdbcRowSet</code> object
-     * or <code>null</code> if there are none
-     * @throws SQLException if this method is called on a closed
-     * <code>JdbcRowSet</code> object
-     * @see RowSetWarning
-     */
-    public RowSetWarning getRowSetWarnings() throws SQLException;
-
-   /**
-    * Each <code>JdbcRowSet</code> contains a <code>Connection</code> object from
-    * the <code>ResultSet</code> or JDBC properties passed to it's constructors.
-    * This method wraps the <code>Connection</code> commit method to allow flexible
-    * auto commit or non auto commit transactional control support.
-    * <p>
-    * Makes all changes made since the previous commit/rollback permanent
-    * and releases any database locks currently held by this Connection
-    * object. This method should be used only when auto-commit mode has
-    * been disabled.
-    *
-    * @throws SQLException if a database access error occurs or this
-    * Connection object within this <code>JdbcRowSet</code> is in auto-commit mode
-    * @see java.sql.Connection#setAutoCommit
-    */
-    public void commit() throws SQLException;
-
-
-   /**
-    * Each <code>JdbcRowSet</code> contains a <code>Connection</code> object from
-    * the original <code>ResultSet</code> or JDBC properties passed to it. This
-    * method wraps the <code>Connection</code>'s <code>getAutoCommit</code> method
-    * to allow an application to determine the <code>JdbcRowSet</code> transaction
-    * behavior.
-    * <p>
-    * Sets this connection's auto-commit mode to the given state. If a
-    * connection is in auto-commit mode, then all its SQL statements will
-    * be executed and committed as individual transactions. Otherwise, its
-    * SQL statements are grouped into transactions that are terminated by a
-    * call to either the method commit or the method rollback. By default,
-    * new connections are in auto-commit mode.
-    *
-    * @throws SQLException if a database access error occurs
-    * @see java.sql.Connection#getAutoCommit()
-    */
-    public boolean getAutoCommit() throws SQLException;
-
-
-   /**
-    * Each <code>JdbcRowSet</code> contains a <code>Connection</code> object from
-    * the original <code>ResultSet</code> or JDBC properties passed to it. This
-    * method wraps the <code>Connection</code>'s <code>getAutoCommit</code> method
-    * to allow an application to set the <code>JdbcRowSet</code> transaction behavior.
-    * <p>
-    * Sets the current auto-commit mode for this <code>Connection</code> object.
-    *
-    * @throws SQLException if a database access error occurs
-    * @see java.sql.Connection#setAutoCommit(boolean)
-    */
-    public void setAutoCommit(boolean autoCommit) throws SQLException;
-
-    /**
-     * Each <code>JdbcRowSet</code> contains a <code>Connection</code> object from
-     * the original <code>ResultSet</code> or JDBC properties passed to it.
-     * Undoes all changes made in the current transaction and releases any
-     * database locks currently held by this <code>Connection</code> object. This method
-     * should be used only when auto-commit mode has been disabled.
-     *
-     * @throws SQLException if a database access error occurs or this <code>Connection</code>
-     * object within this <code>JdbcRowSet</code> is in auto-commit mode.
-     * @see #rollback(Savepoint)
-     */
-     public void rollback() throws SQLException;
-
-
-    /**
-     * Each <code>JdbcRowSet</code> contains a <code>Connection</code> object from
-     * the original <code>ResultSet</code> or JDBC properties passed to it.
-     * Undoes all changes made in the current transaction to the last set savepoint
-     * and releases any database locks currently held by this <code>Connection</code>
-     * object. This method should be used only when auto-commit mode has been disabled.
-     *
-     * @throws SQLException if a database access error occurs or this <code>Connection</code>
-     * object within this <code>JdbcRowSet</code> is in auto-commit mode.
-     * @see #rollback
-     */
-    public void rollback(Savepoint s) throws SQLException;
-
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/JoinRowSet.java b/ojluni/src/main/java/javax/sql/rowset/JoinRowSet.java
deleted file mode 100755
index dbb903b..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/JoinRowSet.java
+++ /dev/null
@@ -1,537 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package javax.sql.rowset;
-
-import java.sql.*;
-import javax.sql.*;
-import javax.naming.*;
-import java.io.*;
-import java.math.*;
-import java.util.*;
-
-import javax.sql.rowset.*;
-
-/**
- * The <code>JoinRowSet</code> interface provides a mechanism for combining related
- * data from different <code>RowSet</code> objects into one <code>JoinRowSet</code>
- * object, which represents an SQL <code>JOIN</code>.
- * In other words, a <code>JoinRowSet</code> object acts as a
- * container for the data from <code>RowSet</code> objects that form an SQL
- * <code>JOIN</code> relationship.
- * <P>
- * The <code>Joinable</code> interface provides the methods for setting,
- * retrieving, and unsetting a match column, the basis for
- * establishing an SQL <code>JOIN</code> relationship. The match column may
- * alternatively be set by supplying it to the appropriate version of the
- * <code>JointRowSet</code> method <code>addRowSet</code>.
- * <P>
- * <p>
- * <h3>1.0 Overview</h3>
- * Disconnected <code>RowSet</code> objects (<code>CachedRowSet</code> objects
- * and implementations extending the <code>CachedRowSet</code> interface)
- * do not have a standard way to establish an SQL <code>JOIN</code> between
- * <code>RowSet</code> objects without the expensive operation of
- * reconnecting to the data source. The <code>JoinRowSet</code>
- * interface is specifically designed to address this need.
- * <P>
- * Any <code>RowSet</code> object
- * can be added to a <code>JoinRowSet</code> object to become
- * part of an SQL <code>JOIN</code> relationship. This means that both connected
- * and disconnected <code>RowSet</code> objects can be part of a <code>JOIN</code>.
- * <code>RowSet</code> objects operating in a connected environment
- * (<code>JdbcRowSet</code> objects) are
- * encouraged to use the database to which they are already
- * connected to establish SQL <code>JOIN</code> relationships between
- * tables directly. However, it is possible for a
- * <code>JdbcRowSet</code> object to be added to a <code>JoinRowSet</code> object
- * if necessary.
- * <P>
- * Any number of <code>RowSet</code> objects can be added to an
- * instance of <code>JoinRowSet</code> provided that they
- * can be related in an SQL <code>JOIN</code>.
- * By definition, the SQL <code>JOIN</code> statement is used to
- * combine the data contained in two or more relational database tables based
- * upon a common attribute. The <code>Joinable</code> interface provides the methods
- * for establishing a common attribute, which is done by setting a
- * <i>match column</i>. The match column commonly coincides with
- * the primary key, but there is
- * no requirement that the match column be the same as the primary key.
- * By establishing and then enforcing column matches,
- * a <code>JoinRowSet</code> object establishes <code>JOIN</code> relationships
- * between <code>RowSet</code> objects without the assistance of an available
- * relational database.
- * <P>
- * The type of <code>JOIN</code> to be established is determined by setting
- * one of the <code>JoinRowSet</code> constants using the method
- * <code>setJoinType</code>. The following SQL <code>JOIN</code> types can be set:
- * <UL>
- *  <LI><code>CROSS_JOIN</code>
- *  <LI><code>FULL_JOIN</code>
- *  <LI><code>INNER_JOIN</code> - the default if no <code>JOIN</code> type has been set
- *  <LI><code>LEFT_OUTER_JOIN</code>
- *  <LI><code>RIGHT_OUTER_JOIN</code>
- * </UL>
- * Note that if no type is set, the <code>JOIN</code> will automatically be an
- * inner join. The comments for the fields in the
- * <code>JoinRowSet</code> interface explain these <code>JOIN</code> types, which are
- * standard SQL <code>JOIN</code> types.
- * <P>
- * <h3>2.0 Using a <code>JoinRowSet</code> Object for Creating a <code>JOIN</code></h3>
- * When a <code>JoinRowSet</code> object is created, it is empty.
- * The first <code>RowSet</code> object to be added becomes the basis for the
- * <code>JOIN</code> relationship.
- * Applications must determine which column in each of the
- * <code>RowSet</code> objects to be added to the <code>JoinRowSet</code> object
- * should be the match column. All of the
- * <code>RowSet</code> objects must contain a match column, and the values in
- * each match column must be ones that can be compared to values in the other match
- * columns. The columns do not have to have the same name, though they often do,
- * and they do not have to store the exact same data type as long as the data types
- * can be compared.
- * <P>
- * A match column can be be set in two ways:
- * <ul>
- *  <li>By calling the <code>Joinable</code> method <code>setMatchColumn</code><br>
- *  This is the only method that can set the match column before a <code>RowSet</code>
- *  object is added to a <code>JoinRowSet</code> object. The <code>RowSet</code> object
- *  must have implemented the <code>Joinable</code> interface in order to use the method
- *  <code>setMatchColumn</code>. Once the match column value
- *  has been set, this method can be used to reset the match column at any time.
- *  <li>By calling one of the versions of the <code>JoinRowSet</code> method
- *  <code>addRowSet</code> that takes a column name or number (or an array of
- *  column names or numbers)<BR>
- *  Four of the five <code>addRowSet</code> methods take a match column as a parameter.
- *  These four methods set or reset the match column at the time a <code>RowSet</code>
- *  object is being added to a <code>JoinRowSet</code> object.
- * </ul>
- * <h3>3.0 Sample Usage</h3>
- * <p>
- * The following code fragment adds two <code>CachedRowSet</code>
- * objects to a <code>JoinRowSet</code> object. Note that in this example,
- * no SQL <code>JOIN</code> type is set, so the default <code>JOIN</code> type,
- * which is <i>INNER_JOIN</i>, is established.
- * <p>
- * In the following code fragment, the table <code>EMPLOYEES</code>, whose match
- * column is set to the first column (<code>EMP_ID</code>), is added to the
- * <code>JoinRowSet</code> object <i>jrs</i>. Then
- * the table <code>ESSP_BONUS_PLAN</code>, whose match column is likewise
- * the <code>EMP_ID</code> column, is added. When this second
- * table is added to <i>jrs</i>, only the rows in
- * <code>ESSP_BONUS_PLAN</code> whose <code>EMP_ID</code> value matches an
- * <code>EMP_ID</code> value in the <code>EMPLOYEES</code> table are added.
- * In this case, everyone in the bonus plan is an employee, so all of the rows
- * in the table <code>ESSP_BONUS_PLAN</code> are added to the <code>JoinRowSet</code>
- * object.  In this example, both <code>CachedRowSet</code> objects being added
- * have implemented the <code>Joinable</code> interface and can therefore call
- * the <code>Joinable</code> method <code>setMatchColumn</code>.
- * <PRE>
- *     JoinRowSet jrs = new JoinRowSetImpl();
- *
- *     ResultSet rs1 = stmt.executeQuery("SELECT * FROM EMPLOYEES");
- *     CachedRowSet empl = new CachedRowSetImpl();
- *     empl.populate(rs1);
- *     empl.setMatchColumn(1);
- *     jrs.addRowSet(empl);
- *
- *     ResultSet rs2 = stmt.executeQuery("SELECT * FROM ESSP_BONUS_PLAN");
- *     CachedRowSet bonus = new CachedRowSetImpl();
- *     bonus.populate(rs2);
- *     bonus.setMatchColumn(1); // EMP_ID is the first column
- *     jrs.addRowSet(bonus);
- * </PRE>
- * <P>
- * At this point, <i>jrs</i> is an inside JOIN of the two <code>RowSet</code> objects
- * based on their <code>EMP_ID</code> columns. The application can now browse the
- * combined data as if it were browsing one single <code>RowSet</code> object.
- * Because <i>jrs</i> is itself a <code>RowSet</code> object, an application can
- * navigate or modify it using <code>RowSet</code> methods.
- * <PRE>
- *     jrs.first();
- *     int employeeID = jrs.getInt(1);
- *     String employeeName = jrs.getString(2);
- * </PRE>
- * <P>
- * Note that because the SQL <code>JOIN</code> must be enforced when an application
- * adds a second or subsequent <code>RowSet</code> object, there
- * may be an initial degradation in performance while the <code>JOIN</code> is
- * being performed.
- * <P>
- * The following code fragment adds an additional <code>CachedRowSet</code> object.
- * In this case, the match column (<code>EMP_ID</code>) is set when the
- * <code>CachedRowSet</code> object is added to the <code>JoinRowSet</code> object.
- * <PRE>
- *     ResultSet rs3 = stmt.executeQuery("SELECT * FROM 401K_CONTRIB");
- *     CachedRowSet fourO1k = new CachedRowSetImpl();
- *     four01k.populate(rs3);
- *     jrs.addRowSet(four01k, 1);
- * </PRE>
- * <P>
- * The <code>JoinRowSet</code> object <i>jrs</i> now contains values from all three
- * tables. The data in each row in <i>four01k</i> in which the value for the
- * <code>EMP_ID</code> column matches a value for the <code>EMP_ID</code> column
- * in <i>jrs</i> has been added to <i>jrs</i>.
- * <P>
- * <h3>4.0 <code>JoinRowSet</code> Methods</h3>
- * The <code>JoinRowSet</code> interface supplies several methods for adding
- * <code>RowSet</code> objects and for getting information about the
- * <code>JoinRowSet</code> object.
- * <UL>
- *   <LI>Methods for adding one or more <code>RowSet</code> objects<BR>
- *       These methods allow an application to add one <code>RowSet</code> object
- *       at a time or to add multiple <code>RowSet</code> objects at one time. In
- *       either case, the methods may specify the match column for each
- *       <code>RowSet</code> object being added.
- *   <LI>Methods for getting information<BR>
- *       One method retrieves the <code>RowSet</code> objects in the
- *       <code>JoinRowSet</code> object, and another method retrieves the
- *       <code>RowSet</code> names.  A third method retrieves either the SQL
- *       <code>WHERE</code> clause used behind the scenes to form the
- *       <code>JOIN</code> or a text description of what the <code>WHERE</code>
- *       clause does.
- *   <LI>Methods related to the type of <code>JOIN</code><BR>
- *       One method sets the <code>JOIN</code> type, and five methods find out whether
- *       the <code>JoinRowSet</code> object supports a given type.
- *   <LI>A method to make a separate copy of the <code>JoinRowSet</code> object<BR>
- *       This method creates a copy that can be persisted to the data source.
- * </UL>
- * <P>
- */
-
-public interface JoinRowSet extends WebRowSet {
-
-    /**
-     * Adds the given <code>RowSet</code> object to this <code>JoinRowSet</code>
-     * object. If the <code>RowSet</code> object
-     * is the first to be added to this <code>JoinRowSet</code>
-     * object, it forms the basis of the <code>JOIN</code> relationship to be
-     * established.
-     * <P>
-     * This method should be used only when the given <code>RowSet</code>
-     * object already has a match column that was set with the <code>Joinable</code>
-     * method <code>setMatchColumn</code>.
-     * <p>
-     * Note: A <code>Joinable</code> object is any <code>RowSet</code> object
-     * that has implemented the <code>Joinable</code> interface.
-     *
-     * @param rowset the <code>RowSet</code> object that is to be added to this
-     *        <code>JoinRowSet</code> object; it must implement the
-     *        <code>Joinable</code> interface and have a match column set
-     * @throws SQLException if (1) an empty rowset is added to the to this
-     *         <code>JoinRowSet</code> object, (2) a match column has not been
-     *         set for <i>rowset</i>, or (3) <i>rowset</i>
-     *         violates the active <code>JOIN</code>
-     * @see Joinable#setMatchColumn
-     */
-    public void addRowSet(Joinable rowset) throws SQLException;
-
-    /**
-     * Adds the given <code>RowSet</code> object to this <code>JoinRowSet</code>
-     * object and sets the designated column as the match column for
-     * the <code>RowSet</code> object. If the <code>RowSet</code> object
-     * is the first to be added to this <code>JoinRowSet</code>
-     * object, it forms the basis of the <code>JOIN</code> relationship to be
-     * established.
-     * <P>
-     * This method should be used when <i>RowSet</i> does not already have a match
-     * column set.
-     *
-     * @param rowset the <code>RowSet</code> object that is to be added to this
-     *        <code>JoinRowSet</code> object; it may implement the
-     *        <code>Joinable</code> interface
-     * @param columnIdx an <code>int</code> that identifies the column to become the
-     *         match column
-     * @throws SQLException if (1) <i>rowset</i> is an empty rowset or
-     *         (2) <i>rowset</i> violates the active <code>JOIN</code>
-     * @see Joinable#unsetMatchColumn
-     */
-    public void addRowSet(RowSet rowset, int columnIdx) throws SQLException;
-
-    /**
-     * Adds <i>rowset</i> to this <code>JoinRowSet</code> object and
-     * sets the designated column as the match column. If <i>rowset</i>
-     * is the first to be added to this <code>JoinRowSet</code>
-     * object, it forms the basis for the <code>JOIN</code> relationship to be
-     * established.
-     * <P>
-     * This method should be used when the given <code>RowSet</code> object
-     * does not already have a match column.
-     *
-     * @param rowset the <code>RowSet</code> object that is to be added to this
-     *        <code>JoinRowSet</code> object; it may implement the
-     *        <code>Joinable</code> interface
-     * @param columnName the <code>String</code> object giving the name of the
-     *        column to be set as the match column
-     * @throws SQLException if (1) <i>rowset</i> is an empty rowset or
-     *         (2) the match column for <i>rowset</i> does not satisfy the
-     *         conditions of the <code>JOIN</code>
-     */
-     public void addRowSet(RowSet rowset,
-                           String columnName) throws SQLException;
-
-    /**
-     * Adds one or more <code>RowSet</code> objects contained in the given
-     * array of <code>RowSet</code> objects to this <code>JoinRowSet</code>
-     * object and sets the match column for
-     * each of the <code>RowSet</code> objects to the match columns
-     * in the given array of column indexes. The first element in
-     * <i>columnIdx</i> is set as the match column for the first
-     * <code>RowSet</code> object in <i>rowset</i>, the second element of
-     * <i>columnIdx</i> is set as the match column for the second element
-     * in <i>rowset</i>, and so on.
-     * <P>
-     * The first <code>RowSet</code> object added to this <code>JoinRowSet</code>
-     * object forms the basis for the <code>JOIN</code> relationship.
-     * <P>
-     * This method should be used when the given <code>RowSet</code> object
-     * does not already have a match column.
-     *
-     * @param rowset an array of one or more <code>RowSet</code> objects
-     *        to be added to the <code>JOIN</code>; it may implement the
-     *        <code>Joinable</code> interface
-     * @param columnIdx an array of <code>int</code> values indicating the index(es)
-     *        of the columns to be set as the match columns for the <code>RowSet</code>
-     *        objects in <i>rowset</i>
-     * @throws SQLException if (1) an empty rowset is added to this
-     *         <code>JoinRowSet</code> object, (2) a match column is not set
-     *         for a <code>RowSet</code> object in <i>rowset</i>, or (3)
-     *         a <code>RowSet</code> object being added violates the active
-     *         <code>JOIN</code>
-     */
-    public void addRowSet(RowSet[] rowset,
-                          int[] columnIdx) throws SQLException;
-
-    /**
-     * Adds one or more <code>RowSet</code> objects contained in the given
-     * array of <code>RowSet</code> objects to this <code>JoinRowSet</code>
-     * object and sets the match column for
-     * each of the <code>RowSet</code> objects to the match columns
-     * in the given array of column names. The first element in
-     * <i>columnName</i> is set as the match column for the first
-     * <code>RowSet</code> object in <i>rowset</i>, the second element of
-     * <i>columnName</i> is set as the match column for the second element
-     * in <i>rowset</i>, and so on.
-     * <P>
-     * The first <code>RowSet</code> object added to this <code>JoinRowSet</code>
-     * object forms the basis for the <code>JOIN</code> relationship.
-     * <P>
-     * This method should be used when the given <code>RowSet</code> object(s)
-     * does not already have a match column.
-     *
-     * @param rowset an array of one or more <code>RowSet</code> objects
-     *        to be added to the <code>JOIN</code>; it may implement the
-     *        <code>Joinable</code> interface
-     * @param columnName an array of <code>String</code> values indicating the
-     *        names of the columns to be set as the match columns for the
-     *        <code>RowSet</code> objects in <i>rowset</i>
-     * @throws SQLException if (1) an empty rowset is added to this
-     *         <code>JoinRowSet</code> object, (2) a match column is not set
-     *         for a <code>RowSet</code> object in <i>rowset</i>, or (3)
-     *         a <code>RowSet</code> object being added violates the active
-     *         <code>JOIN</code>
-     */
-    public void addRowSet(RowSet[] rowset,
-                          String[] columnName) throws SQLException;
-
-    /**
-     * Returns a <code>Collection</code> object containing the
-     * <code>RowSet</code> objects that have been added to this
-     * <code>JoinRowSet</code> object.
-     * This should return the 'n' number of RowSet contained
-     * within the <code>JOIN</code> and maintain any updates that have occured while in
-     * this union.
-     *
-     * @return a <code>Collection</code> object consisting of the
-     *        <code>RowSet</code> objects added to this <code>JoinRowSet</code>
-     *        object
-     * @throws SQLException if an error occurs generating the
-     *         <code>Collection</code> object to be returned
-     */
-    public Collection<?> getRowSets() throws java.sql.SQLException;
-
-    /**
-     * Returns a <code>String</code> array containing the names of the
-     *         <code>RowSet</code> objects added to this <code>JoinRowSet</code>
-     *         object.
-     *
-     * @return a <code>String</code> array of the names of the
-     *         <code>RowSet</code> objects in this <code>JoinRowSet</code>
-     *         object
-     * @throws SQLException if an error occurs retrieving the names of
-     *         the <code>RowSet</code> objects
-     * @see CachedRowSet#setTableName
-     */
-    public String[] getRowSetNames() throws java.sql.SQLException;
-
-    /**
-     * Creates a new <code>CachedRowSet</code> object containing the
-     * data in this <code>JoinRowSet</code> object, which can be saved
-     * to a data source using the <code>SyncProvider</code> object for
-     * the <code>CachedRowSet</code> object.
-     * <P>
-     * If any updates or modifications have been applied to the JoinRowSet
-     * the CachedRowSet returned by the method will not be able to persist
-     * it's changes back to the originating rows and tables in the
-     * in the datasource. The CachedRowSet instance returned should not
-     * contain modification data and it should clear all properties of
-     * it's originating SQL statement. An application should reset the
-     * SQL statement using the <code>RowSet.setCommand</code> method.
-     * <p>
-     * In order to allow changes to be persisted back to the datasource
-     * to the originating tables, the <code>acceptChanges</code> method
-     * should be used and called on a JoinRowSet object instance. Implementations
-     * can leverage the internal data and update tracking in their
-     * implementations to interact with the SyncProvider to persist any
-     * changes.
-     *
-     * @return a CachedRowSet containing the contents of the JoinRowSet
-     * @throws SQLException if an error occurs assembling the CachedRowSet
-     * object
-     * @see javax.sql.RowSet
-     * @see javax.sql.rowset.CachedRowSet
-     * @see javax.sql.rowset.spi.SyncProvider
-     */
-    public CachedRowSet toCachedRowSet() throws java.sql.SQLException;
-
-    /**
-     * Indicates if CROSS_JOIN is supported by a JoinRowSet
-     * implementation
-     *
-     * @return true if the CROSS_JOIN is supported; false otherwise
-     */
-    public boolean supportsCrossJoin();
-
-    /**
-     * Indicates if INNER_JOIN is supported by a JoinRowSet
-     * implementation
-     *
-     * @return true is the INNER_JOIN is supported; false otherwise
-     */
-    public boolean supportsInnerJoin();
-
-    /**
-     * Indicates if LEFT_OUTER_JOIN is supported by a JoinRowSet
-     * implementation
-     *
-     * @return true is the LEFT_OUTER_JOIN is supported; false otherwise
-     */
-    public boolean supportsLeftOuterJoin();
-
-    /**
-     * Indicates if RIGHT_OUTER_JOIN is supported by a JoinRowSet
-     * implementation
-     *
-     * @return true is the RIGHT_OUTER_JOIN is supported; false otherwise
-     */
-    public boolean supportsRightOuterJoin();
-
-    /**
-     * Indicates if FULL_JOIN is supported by a JoinRowSet
-     * implementation
-     *
-     * @return true is the FULL_JOIN is supported; false otherwise
-     */
-    public boolean supportsFullJoin();
-
-    /**
-     * Allow the application to adjust the type of <code>JOIN</code> imposed
-     * on tables contained within the JoinRowSet object instance.
-     * Implementations should throw a SQLException if they do
-     * not support a given <code>JOIN</code> type.
-     *
-     * @param joinType the standard JoinRowSet.XXX static field definition
-     * of a SQL <code>JOIN</code> to re-configure a JoinRowSet instance on
-     * the fly.
-     * @throws SQLException if an unsupported <code>JOIN</code> type is set
-     * @see #getJoinType
-     */
-    public void setJoinType(int joinType) throws SQLException;
-
-    /**
-     * Return a SQL-like description of the WHERE clause being used
-     * in a JoinRowSet object. An implementation can describe
-     * the WHERE clause of the SQL <code>JOIN</code> by supplying a SQL
-     * strings description of <code>JOIN</code> or provide a textual
-     * description to assist applications using a <code>JoinRowSet</code>
-     *
-     * @return whereClause a textual or SQL description of the logical
-     * WHERE clause used in the JoinRowSet instance
-     * @throws SQLException if an error occurs in generating a representation
-     * of the WHERE clause.
-     */
-    public String getWhereClause() throws SQLException;
-
-    /**
-     * Returns a <code>int</code> describing the set SQL <code>JOIN</code> type
-     * governing this JoinRowSet instance. The returned type will be one of
-     * standard JoinRowSet types: <code>CROSS_JOIN</code>, <code>INNER_JOIN</code>,
-     * <code>LEFT_OUTER_JOIN</code>, <code>RIGHT_OUTER_JOIN</code> or
-     * <code>FULL_JOIN</code>.
-     *
-     * @return joinType one of the standard JoinRowSet static field
-     *     definitions of a SQL <code>JOIN</code>. <code>JoinRowSet.INNER_JOIN</code>
-     *     is returned as the default <code>JOIN</code> type is no type has been
-     *     explicitly set.
-     * @throws SQLException if an error occurs determining the SQL <code>JOIN</code>
-     *     type supported by the JoinRowSet instance.
-     * @see #setJoinType
-     */
-    public int getJoinType() throws SQLException;
-
-    /**
-     * An ANSI-style <code>JOIN</code> providing a cross product of two tables
-     */
-    public static int CROSS_JOIN = 0;
-
-    /**
-     * An ANSI-style <code>JOIN</code> providing a inner join between two tables. Any
-     * unmatched rows in either table of the join should be discarded.
-     */
-    public static int INNER_JOIN = 1;
-
-    /**
-     * An ANSI-style <code>JOIN</code> providing a left outer join between two
-     * tables. In SQL, this is described where all records should be
-     * returned from the left side of the JOIN statement.
-     */
-    public static int LEFT_OUTER_JOIN = 2;
-
-    /**
-     * An ANSI-style <code>JOIN</code> providing a right outer join between
-     * two tables. In SQL, this is described where all records from the
-     * table on the right side of the JOIN statement even if the table
-     * on the left has no matching record.
-     */
-    public static int RIGHT_OUTER_JOIN = 3;
-
-    /**
-     * An ANSI-style <code>JOIN</code> providing a a full JOIN. Specifies that all
-     * rows from either table be returned regardless of matching
-     * records on the other table.
-     */
-    public static int FULL_JOIN = 4;
-
-
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/Joinable.java b/ojluni/src/main/java/javax/sql/rowset/Joinable.java
deleted file mode 100755
index 7a78947..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/Joinable.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package javax.sql.rowset;
-
-import java.sql.SQLException;
-
-/**
- * <h3>1.0 Background</h3>
- * The <code>Joinable</code> interface provides the methods for getting and
- * setting a match column, which is the basis for forming the SQL <code>JOIN</code>
- * formed by adding <code>RowSet</code> objects to a <code>JoinRowSet</code>
- * object.
- * <P>
- * Any standard <code>RowSet</code> implementation <b>may</b> implement
- * the <code>Joinable</code> interface in order to be
- * added to a <code>JoinRowSet</code> object. Implementing this interface gives
- * a <code>RowSet</code> object the ability to use <code>Joinable</code> methods,
- * which set, retrieve, and get information about match columns.  An
- * application may add a
- * <code>RowSet</code> object that has not implemented the <code>Joinable</code>
- * interface to a <code>JoinRowSet</code> object, but to do so it must use one
- * of the <code>JoinRowSet.addRowSet</code> methods that takes both a
- * <code>RowSet</code> object and a match column or an array of <code>RowSet</code>
- * objects and an array of match columns.
- * <P>
- * To get access to the methods in the <code>Joinable</code> interface, a
- * <code>RowSet</code> object implements at least one of the
- * five standard <code>RowSet</code> interfaces and also implements the
- * <code>Joinable</code> interface.  In addition, most <code>RowSet</code>
- * objects extend the <code>BaseRowSet</code> class.  For example:
- * <pre>
- *     class MyRowSetImpl extends BaseRowSet implements CachedRowSet, Joinable {
- *         :
- *         :
- *     }
- * </pre>
- * <P>
- * <h3>2.0 Usage Guidelines</h3>
- * <P>
- * The methods in the <code>Joinable</code> interface allow a <code>RowSet</code> object
- * to set a match column, retrieve a match column, or unset a match column, which is
- * the column upon which an SQL <code>JOIN</code> can be based.
- * An instance of a class that implements these methods can be added to a
- * <code>JoinRowSet</code> object to allow an SQL <code>JOIN</code> relationship to
- *  be established.
- * <p>
- * <pre>
- *     CachedRowSet crs = new MyRowSetImpl();
- *     crs.populate((ResultSet)rs);
- *     (Joinable)crs.setMatchColumnIndex(1);
- *
- *     JoinRowSet jrs = new JoinRowSetImpl();
- *     jrs.addRowSet(crs);
- * </pre>
- * In the previous example, <i>crs</i> is a <code>CachedRowSet</code> object that
- * has emplemented the <code>Joinable</code> interface.  In the following example,
- * <i>crs2</i> has not, so it must supply the match column as an argument to the
- * <code>addRowSet</code> method. This example assumes that column 1 is the match
- * column.
- * <PRE>
- *     CachedRowSet crs2 = new MyRowSetImpl();
- *     crs2.populate((ResultSet)rs);
- *
- *     JoinRowSet jrs2 = new JoinRowSetImpl();
- *     jrs2.addRowSet(crs2, 1);
- * </PRE>
- * <p>
- * The <code>JoinRowSet</code> interface makes it possible to get data from one or
- * more <code>RowSet</code> objects consolidated into one table without having to incur
- * the expense of creating a connection to a database. It is therefore ideally suited
- * for use by disconnected <code>RowSet</code> objects. Nevertheless, any
- * <code>RowSet</code> object <b>may</b> implement this interface
- * regardless of whether it is connected or disconnected. Note that a
- * <code>JdbcRowSet</code> object, being always connected to its data source, can
- * become part of an SQL <code>JOIN</code> directly without having to become part
- * of a <code>JoinRowSet</code> object.
- * <P>
- * <h3>3.0 Managing Multiple Match Columns</h3>
- * The index array passed into the <code>setMatchColumn</code> methods indicates
- * how many match columns are being set (the length of the array) in addition to
- * which columns will be used for the match. For example:
- * <pre>
- *     int[] i = {1, 2, 4, 7}; // indicates four match columns, with column
- *                             // indexes 1, 2, 4, 7 participating in the JOIN.
- *     Joinable.setMatchColumn(i);
- * </pre>
- * Subsequent match columns may be added as follows to a different <code>Joinable</code>
- * object (a <code>RowSet</code> object that has implemented the <code>Joinable</code>
- * interface).
- * <pre>
- *     int[] w = {3, 2, 5, 3};
- *     Joinable2.setMatchColumn(w);
- * </pre>
- * When an application adds two or more <code>RowSet</code> objects to a
- * <code>JoinRowSet</code> object, the order of the indexes in the array is
- * particularly important. Each index of
- * the array maps directly to the corresponding index of the previously added
- * <code>RowSet</code> object. If overlap or underlap occurs, the match column
- * data is maintained in the event an additional <code>Joinable</code> RowSet is
- * added and needs to relate to the match column data. Therefore, applications
- * can set multiple match columns in any order, but
- * this order has a direct effect on the outcome of the <code>SQL</code> JOIN.
- * <p>
- * This assertion applies in exactly the same manner when column names are used
- * rather than column indexes to indicate match columns.
- *
- * @see JoinRowSet
- * @author  Jonathan Bruce
- */
-public interface Joinable {
-
-    /**
-     * Sets the designated column as the match column for this <code>RowSet</code>
-     * object. A <code>JoinRowSet</code> object can now add this <code>RowSet</code>
-     * object based on the match column.
-     * <p>
-     * Sub-interfaces such as the <code>CachedRowSet</code><sup><font size=-2>TM</font></sup>
-     * interface define the method <code>CachedRowSet.setKeyColumns</code>, which allows
-     * primary key semantics to be enforced on specific columns.
-     * Implementations of the <code>setMatchColumn(int columnIdx)</code> method
-     * should ensure that the constraints on the key columns are maintained when
-     * a <code>CachedRowSet</code> object sets a primary key column as a match column.
-     *
-     * @param columnIdx an <code>int</code> identifying the index of the column to be
-     *        set as the match column
-     * @throws SQLException if an invalid column index is set
-     * @see #setMatchColumn(int[])
-     * @see #unsetMatchColumn(int)
-     *
-     */
-    public void setMatchColumn(int columnIdx) throws SQLException;
-
-    /**
-     * Sets the designated columns as the match column for this <code>RowSet</code>
-     * object. A <code>JoinRowSet</code> object can now add this <code>RowSet</code>
-     * object based on the match column.
-     *
-     * @param columnIdxes an array of <code>int</code> identifying the indexes of the
-     *      columns to be set as the match columns
-     * @throws SQLException if an invalid column index is set
-     * @see #setMatchColumn(int[])
-     * @see #unsetMatchColumn(int[])
-     */
-    public void setMatchColumn(int[] columnIdxes) throws SQLException;
-
-    /**
-     * Sets the designated column as the match column for this <code>RowSet</code>
-     * object. A <code>JoinRowSet</code> object can now add this <code>RowSet</code>
-     * object based on the match column.
-     * <p>
-     * Subinterfaces such as the <code>CachedRowSet</code> interface define
-     * the method <code>CachedRowSet.setKeyColumns</code>, which allows
-     * primary key semantics to be enforced on specific columns.
-     * Implementations of the <code>setMatchColumn(String columnIdx)</code> method
-     * should ensure that the constraints on the key columns are maintained when
-     * a <code>CachedRowSet</code> object sets a primary key column as a match column.
-     *
-     * @param columnName a <code>String</code> object giving the name of the column
-     *      to be set as the match column
-     * @throws SQLException if an invalid column name is set, the column name
-     *      is a null, or the column name is an empty string
-     * @see #unsetMatchColumn
-     * @see #setMatchColumn(int[])
-     */
-    public void setMatchColumn(String columnName) throws SQLException;
-
-    /**
-     * Sets the designated columns as the match column for this <code>RowSet</code>
-     * object. A <code>JoinRowSet</code> object can now add this <code>RowSet</code>
-     * object based on the match column.
-     *
-     * @param columnNames an array of <code>String</code> objects giving the names
-     *     of the column to be set as the match columns
-     * @throws SQLException if an invalid column name is set, the column name
-     *      is a null, or the column name is an empty string
-     * @see #unsetMatchColumn
-     * @see #setMatchColumn(int[])
-     */
-    public void setMatchColumn(String[] columnNames) throws SQLException;
-
-    /**
-     * Retrieves the indexes of the match columns that were set for this
-     * <code>RowSet</code> object with the method
-     * <code>setMatchColumn(int[] columnIdxes)</code>.
-     *
-     * @return an <code>int</code> array identifying the indexes of the columns
-     *         that were set as the match columns for this <code>RowSet</code> object
-     * @throws SQLException if no match column has been set
-     * @see #setMatchColumn
-     * @see #unsetMatchColumn
-     */
-    public int[] getMatchColumnIndexes() throws SQLException;
-
-    /**
-     * Retrieves the names of the match columns that were set for this
-     * <code>RowSet</code> object with the method
-     * <code>setMatchColumn(String [] columnNames)</code>.
-     *
-     * @return an array of <code>String</code> objects giving the names of the columns
-     *         set as the match columns for this <code>RowSet</code> object
-     * @throws SQLException if no match column has been set
-     * @see #setMatchColumn
-     * @see #unsetMatchColumn
-     *
-     */
-    public String[] getMatchColumnNames() throws SQLException;
-
-    /**
-     * Unsets the designated column as the match column for this <code>RowSet</code>
-     * object.
-     * <P>
-     * <code>RowSet</code> objects that implement the <code>Joinable</code> interface
-     * must ensure that a key-like constraint continues to be enforced until the
-     * method <code>CachedRowSet.unsetKeyColumns</code> has been called on the
-     * designated column.
-     *
-     * @param columnIdx an <code>int</code> that identifies the index of the column
-     *          that is to be unset as a match column
-     * @throws SQLException if an invalid column index is designated or if
-     *          the designated column was not previously set as a match
-     *          column
-     * @see #setMatchColumn
-     */
-    public void unsetMatchColumn(int columnIdx) throws SQLException;
-
-    /**
-     * Unsets the designated columns as the match column for this <code>RowSet</code>
-     * object.
-     *
-     * @param columnIdxes an arrary of <code>int</code> that identifies the indexes
-     *     of the columns that are to be unset as match columns
-     * @throws SQLException if an invalid column index is designated or if
-     *          the designated column was not previously set as a match
-     *          column
-     * @see #setMatchColumn
-     */
-    public void unsetMatchColumn(int[] columnIdxes) throws SQLException;
-
-    /**
-     * Unsets the designated column as the match column for this <code>RowSet</code>
-     * object.
-     * <P>
-     * <code>RowSet</code> objects that implement the <code>Joinable</code> interface
-     * must ensure that a key-like constraint continues to be enforced until the
-     * method <code>CachedRowSet.unsetKeyColumns</code> has been called on the
-     * designated column.
-     *
-     * @param columnName a <code>String</code> object giving the name of the column
-     *          that is to be unset as a match column
-     * @throws SQLException if an invalid column name is designated or
-     *          the designated column was not previously set as a match
-     *          column
-     * @see #setMatchColumn
-     */
-    public void unsetMatchColumn(String columnName) throws SQLException;
-
-    /**
-     * Unsets the designated columns as the match columns for this <code>RowSet</code>
-     * object.
-     *
-     * @param columnName an array of <code>String</code> objects giving the names of
-     *     the columns that are to be unset as the match columns
-     * @throws SQLException if an invalid column name is designated or the
-     *     designated column was not previously set as a match column
-     * @see #setMatchColumn
-     */
-    public void unsetMatchColumn(String[] columnName) throws SQLException;
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/Predicate.java b/ojluni/src/main/java/javax/sql/rowset/Predicate.java
deleted file mode 100755
index a9672c9..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/Predicate.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package javax.sql.rowset;
-
-import javax.sql.*;
-import java.sql.*;
-
-/**
- * The standard interface that provides the framework for all
- * <code>FilteredRowSet</code> objects to describe their filters.
- * <p>
- * <h3>1.0 Background</h3>
- * The <code>Predicate</code> interface is a standard interface that
- * applications can implement to define the filter they wish to apply to a
- * a <code>FilteredRowSet</code> object. A <code>FilteredRowSet</code>
- * object consumes implementations of this interface and enforces the
- * constraints defined in the implementation of the method <code>evaluate</code>.
- * A <code>FilteredRowSet</code> object enforces the filter constraints in a
- * bi-directional manner: It outputs only rows that are within
- * the constraints of the filter; and conversely, it inserts, modifies, or updates
- * only rows that are within the constraints of the filter.
- *
- * <h3>2.0 Implementation Guidelines</h3>
- * In order to supply a predicate for the <code>FilteredRowSet</code>.
- * this interface must be implemented.  At this time, the JDBC RowSet
- * Implementations (JSR-114) does not specify any standard filters definitions.
- * By specifying a standard means and mechanism for a range of filters to be
- * defined and deployed with both the reference and vendor implementations
- * of the <code>FilteredRowSet</code> interface, this allows for a flexible
- * and application motivated implementations of <code>Predicate</code> to emerge.
- * <p>
- * A sample implementation would look something like this:
- * <pre>
- * <code>
- *    public class Range implements Predicate {
- *
- *       private Object lo[];
- *       private Object hi[];
- *       private int idx[];
- *
- *       public Range(Object[] lo, Object[] hi, int[] idx) {
- *          this.lo = lo;
- *          this.hi = hi;
- *          this.idx = idx;
- *       }
- *
- *      public boolean evaluate(RowSet rs) {
- *          CachedRowSet crs = (CachedRowSet)rs;
- *          boolean bool1,bool2;
- *
- *          // Check the present row determine if it lies
- *          // within the filtering criteria.
- *
- *          for (int i = 0; i < idx.length; i++) {
- *
- *              if ((rs.getObject(idx[i]) >= lo[i]) &&
- *                  (rs.getObject(idx[i]) >= hi[i]) {
- *                  bool1 = true; // within filter constraints
- *          } else {
- *            bool2 = true; // outside of filter constraints
- *          }
- *      }
- *
- *      if (bool2) {
- *         return false;
- *      } else {
- *         return true;
- *      }
- *  }
- * </code>
- * </pre>
- * <P>
- * The example above implements a simple range predicate. Note, that
- * implementations should but are not required to provider <code>String</code>
- * and integer index based constructors to provide for JDBC RowSet Implementation
- * applications that use both column identification conventions.
- *
- * @author Jonathan Bruce, Amit Handa
- *
- */
-
- // <h3>3.0 FilteredRowSet Internals</h3>
- // internalNext, Frist, Last. Discuss guidelines on how to approach this
- // and cite examples in reference implementations.
-public interface Predicate {
-    /**
-     * This method is typically called a <code>FilteredRowSet</code> object
-     * internal methods (not public) that control the <code>RowSet</code> object's
-     * cursor moving  from row to the next. In addition, if this internal method
-     * moves the cursor onto a row that has been deleted, the internal method will
-     * continue to ove the cursor until a valid row is found.
-     *
-     * @return <code>true</code> if there are more rows in the filter;
-     *     <code>false</code> otherwise
-     */
-    public boolean evaluate(RowSet rs);
-
-
-    /**
-     * This method is called by a <code>FilteredRowSet</code> object
-     * to check whether the value lies between the filtering criterion (or criteria
-     * if multiple constraints exist) set using the <code>setFilter()</code> method.
-     * <P>
-     * The <code>FilteredRowSet</code> object will use this method internally
-     * while inserting new rows to a <code>FilteredRowSet</code> instance.
-     *
-     * @param value An <code>Object</code> value which needs to be checked,
-     *        whether it can be part of this <code>FilterRowSet</code> object.
-     * @param column a <code>int</code> object that must match the
-     *        SQL index of a column in this <code>RowSet</code> object. This must
-     *        have been passed to <code>Predicate</code> as one of the columns
-     *        for filtering while initializing a <code>Predicate</code>
-     * @return <code>true</code> ifrow value lies within the filter;
-     *     <code>false</code> otherwise
-     * @throws SQLException if the column is not part of filtering criteria
-     */
-    public boolean evaluate(Object value, int column) throws SQLException;
-
-    /**
-     * This method is called by the <code>FilteredRowSet</code> object
-     * to check whether the value lies between the filtering criteria set
-     * using the setFilter method.
-     * <P>
-     * The <code>FilteredRowSet</code> object will use this method internally
-     * while inserting new rows to a <code>FilteredRowSet</code> instance.
-     *
-     * @param value An <code>Object</code> value which needs to be checked,
-     * whether it can be part of this <code>FilterRowSet</code>.
-     *
-     * @param columnName a <code>String</code> object that must match the
-     *        SQL name of a column in this <code>RowSet</code>, ignoring case. This must
-     *        have been passed to <code>Predicate</code> as one of the columns for filtering
-     *        while initializing a <code>Predicate</code>
-     *
-     * @return <code>true</code> if value lies within the filter; <code>false</code> otherwise
-     *
-     * @throws SQLException if the column is not part of filtering criteria
-     */
-    public boolean evaluate(Object value, String columnName) throws SQLException;
-
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/RowSetFactory.java b/ojluni/src/main/java/javax/sql/rowset/RowSetFactory.java
deleted file mode 100755
index 71d2ec5..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/RowSetFactory.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2010, 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.
- */
-
-package javax.sql.rowset;
-
-import java.sql.SQLException;
-
-/**
- * An interface that defines the implementation of a factory that is used
- * to obtain different types of {@code RowSet} implementations.
- *
- * @author Lance Andersen
- * @since 1.7
- */
-public interface RowSetFactory{
-
-    /**
-     * <p>Creates a new instance of a CachedRowSet.</p>
-     *
-     * @return A new instance of a CachedRowSet.
-     *
-     * @throws SQLException if a CachedRowSet cannot
-     *   be created.
-     *
-     * @since 1.7
-     */
-    public CachedRowSet createCachedRowSet() throws SQLException;
-
-    /**
-     * <p>Creates a new instance of a FilteredRowSet.</p>
-     *
-     * @return A new instance of a FilteredRowSet.
-     *
-     * @throws SQLException if a FilteredRowSet cannot
-     *   be created.
-     *
-     * @since 1.7
-     */
-    public FilteredRowSet createFilteredRowSet() throws SQLException;
-
-    /**
-     * <p>Creates a new instance of a JdbcRowSet.</p>
-     *
-     * @return A new instance of a JdbcRowSet.
-     *
-     * @throws SQLException if a JdbcRowSet cannot
-     *   be created.
-     *
-     * @since 1.7
-     */
-    public  JdbcRowSet createJdbcRowSet() throws SQLException;
-
-    /**
-     * <p>Creates a new instance of a JoinRowSet.</p>
-     *
-     * @return A new instance of a JoinRowSet.
-     *
-     * @throws SQLException if a JoinRowSet cannot
-     *   be created.
-     *
-     * @since 1.7
-     */
-    public  JoinRowSet createJoinRowSet() throws SQLException;
-
-    /**
-     * <p>Creates a new instance of a WebRowSet.</p>
-     *
-     * @return A new instance of a WebRowSet.
-     *
-     * @throws SQLException if a WebRowSet cannot
-     *   be created.
-     *
-     * @since 1.7
-     */
-    public  WebRowSet createWebRowSet() throws SQLException;
-
-}
\ No newline at end of file
diff --git a/ojluni/src/main/java/javax/sql/rowset/RowSetMetaDataImpl.java b/ojluni/src/main/java/javax/sql/rowset/RowSetMetaDataImpl.java
deleted file mode 100755
index f4591c0..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/RowSetMetaDataImpl.java
+++ /dev/null
@@ -1,1095 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-package javax.sql.rowset;
-
-import java.sql.*;
-import javax.sql.*;
-import java.io.*;
-
-import java.lang.reflect.*;
-
-/**
- * Provides implementations for the methods that set and get
- * metadata information about a <code>RowSet</code> object's columns.
- * A <code>RowSetMetaDataImpl</code> object keeps track of the
- * number of columns in the rowset and maintains an internal array
- * of column attributes for each column.
- * <P>
- * A <code>RowSet</code> object creates a <code>RowSetMetaDataImpl</code>
- * object internally in order to set and retrieve information about
- * its columns.
- * <P>
- * NOTE: All metadata in a <code>RowSetMetaDataImpl</code> object
- * should be considered as unavailable until the <code>RowSet</code> object
- * that it describes is populated.
- * Therefore, any <code>RowSetMetaDataImpl</code> method that retrieves information
- * is defined as having unspecified behavior when it is called
- * before the <code>RowSet</code> object contains data.
- */
-public class RowSetMetaDataImpl implements RowSetMetaData,  Serializable {
-
-    /**
-     * The number of columns in the <code>RowSet</code> object that created
-     * this <code>RowSetMetaDataImpl</code> object.
-     * @serial
-     */
-    private int colCount;
-
-    /**
-     * An array of <code>ColInfo</code> objects used to store information
-     * about each column in the <code>RowSet</code> object for which
-     * this <code>RowSetMetaDataImpl</code> object was created. The first
-     * <code>ColInfo</code> object in this array contains information about
-     * the first column in the <code>RowSet</code> object, the second element
-     * contains information about the second column, and so on.
-     * @serial
-     */
-    private ColInfo[] colInfo;
-
-    /**
-     * Checks to see that the designated column is a valid column number for
-     * the <code>RowSet</code> object for which this <code>RowSetMetaDataImpl</code>
-     * was created. To be valid, a column number must be greater than
-     * <code>0</code> and less than or equal to the number of columns in a row.
-     * @throws <code>SQLException</code> with the message "Invalid column index"
-     *        if the given column number is out of the range of valid column
-     *        numbers for the <code>RowSet</code> object
-     */
-    private void checkColRange(int col) throws SQLException {
-        if (col <= 0 || col > colCount) {
-            throw new SQLException("Invalid column index :"+col);
-        }
-    }
-
-    /**
-     * Checks to see that the given SQL type is a valid column type and throws an
-     * <code>SQLException</code> object if it is not.
-     * To be valid, a SQL type must be one of the constant values
-     * in the <code><a href="../../sql/Types.html">java.sql.Types</a></code>
-     * class.
-     *
-     * @param SQLType an <code>int</code> defined in the class <code>java.sql.Types</code>
-     * @throws SQLException if the given <code>int</code> is not a constant defined in the
-     *         class <code>java.sql.Types</code>
-     */
-    private void checkColType(int SQLType) throws SQLException {
-        try {
-            Class c = java.sql.Types.class;
-            Field[] publicFields = c.getFields();
-            int fieldValue = 0;
-            for (int i = 0; i < publicFields.length; i++) {
-                fieldValue = publicFields[i].getInt(c);
-                if (fieldValue == SQLType) {
-                    return;
-                 }
-            }
-        } catch (Exception e) {
-            throw new SQLException(e.getMessage());
-        }
-        throw new SQLException("Invalid SQL type for column");
-    }
-
-    /**
-     * Sets to the given number the number of columns in the <code>RowSet</code>
-     * object for which this <code>RowSetMetaDataImpl</code> object was created.
-     *
-     * @param columnCount an <code>int</code> giving the number of columns in the
-     *        <code>RowSet</code> object
-     * @throws SQLException if the given number is equal to or less than zero
-     */
-    public void setColumnCount(int columnCount) throws SQLException {
-
-        if (columnCount <= 0) {
-            throw new SQLException("Invalid column count. Cannot be less " +
-                "or equal to zero");
-            }
-
-       colCount = columnCount;
-
-       // If the colCount is Integer.MAX_VALUE,
-       // we do not initialize the colInfo object.
-       // even if we try to initialize the colCount with
-       // colCount = Integer.MAx_VALUE-1, the colInfo
-       // initialization fails throwing an ERROR
-       // OutOfMemory Exception. So we do not initialize
-       // colInfo at Integer.MAX_VALUE. This is to pass TCK.
-
-       if(!(colCount == Integer.MAX_VALUE)) {
-            colInfo = new ColInfo[colCount + 1];
-
-           for (int i=1; i <= colCount; i++) {
-                 colInfo[i] = new ColInfo();
-           }
-       }
-
-
-    }
-
-    /**
-     * Sets whether the designated column is automatically
-     * numbered, thus read-only, to the given <code>boolean</code>
-     * value.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns
-     *        in the rowset, inclusive
-     * @param property <code>true</code> if the given column is
-     *                 automatically incremented; <code>false</code>
-     *                 otherwise
-     * @throws <code>SQLException</code> if a database access error occurs or
-     *         the given index is out of bounds
-     */
-    public void setAutoIncrement(int columnIndex, boolean property) throws SQLException {
-        checkColRange(columnIndex);
-        colInfo[columnIndex].autoIncrement = property;
-    }
-
-    /**
-     * Sets whether the name of the designated column is case sensitive to
-     * the given <code>boolean</code>.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns
-     *        in the rowset, inclusive
-     * @param property <code>true</code> to indicate that the column
-     *                 name is case sensitive; <code>false</code> otherwise
-     * @throws SQLException if a database access error occurs or
-     *         the given column number is out of bounds
-     */
-    public void setCaseSensitive(int columnIndex, boolean property) throws SQLException {
-        checkColRange(columnIndex);
-        colInfo[columnIndex].caseSensitive = property;
-    }
-
-    /**
-     * Sets whether a value stored in the designated column can be used
-     * in a <code>WHERE</code> clause to the given <code>boolean</code> value.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *                    must be between <code>1</code> and the number
-     *                    of columns in the rowset, inclusive
-     * @param property <code>true</code> to indicate that a column
-     *                 value can be used in a <code>WHERE</code> clause;
-     *                 <code>false</code> otherwise
-     *
-     * @throws <code>SQLException</code> if a database access error occurs or
-     *         the given column number is out of bounds
-     */
-    public void setSearchable(int columnIndex, boolean property)
-        throws SQLException {
-        checkColRange(columnIndex);
-        colInfo[columnIndex].searchable = property;
-    }
-
-    /**
-     * Sets whether a value stored in the designated column is a cash
-     * value to the given <code>boolean</code>.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     * must be between <code>1</code> and the number of columns,
-     * inclusive between <code>1</code> and the number of columns, inclusive
-     * @param property true if the value is a cash value; false otherwise.
-     * @throws <code>SQLException</code> if a database access error occurs
-     *         or the given column number is out of bounds
-     */
-    public void setCurrency(int columnIndex, boolean property)
-        throws SQLException {
-        checkColRange(columnIndex);
-        colInfo[columnIndex].currency = property;
-    }
-
-    /**
-     * Sets whether a value stored in the designated column can be set
-     * to <code>NULL</code> to the given constant from the interface
-     * <code>ResultSetMetaData</code>.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @param property one of the following <code>ResultSetMetaData</code> constants:
-     *                 <code>columnNoNulls</code>,
-     *                 <code>columnNullable</code>, or
-     *                 <code>columnNullableUnknown</code>
-     *
-     * @throws <code>SQLException</code> if a database access error occurs,
-     *         the given column number is out of bounds, or the value supplied
-     *         for the <i>property</i> parameter is not one of the following
-     *         constants:
-     *           <code>ResultSetMetaData.columnNoNulls</code>,
-     *           <code>ResultSetMetaData.columnNullable</code>, or
-     *           <code>ResultSetMetaData.columnNullableUnknown</code>
-     */
-    public void setNullable(int columnIndex, int property) throws SQLException {
-        if ((property < ResultSetMetaData.columnNoNulls) ||
-            property > ResultSetMetaData.columnNullableUnknown) {
-                throw new SQLException("Invalid nullable constant set. Must be " +
-                    "either columnNoNulls, columnNullable or columnNullableUnknown");
-        }
-        checkColRange(columnIndex);
-        colInfo[columnIndex].nullable = property;
-    }
-
-    /**
-     * Sets whether a value stored in the designated column is a signed
-     * number to the given <code>boolean</code>.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @param property <code>true</code> to indicate that a column
-     *                 value is a signed number;
-     *                 <code>false</code> to indicate that it is not
-     * @throws SQLException if a database access error occurs
-     *         or the given column number is out of bounds
-     */
-    public void setSigned(int columnIndex, boolean property) throws SQLException {
-        checkColRange(columnIndex);
-        colInfo[columnIndex].signed = property;
-    }
-
-    /**
-     * Sets the normal maximum number of chars in the designated column
-     * to the given number.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @param size the maximum size of the column in chars; must be
-     *        <code>0</code> or more
-     * @throws SQLException if a database access error occurs,
-     *        the given column number is out of bounds, or <i>size</i> is
-     *        less than <code>0</code>
-     */
-    public void setColumnDisplaySize(int columnIndex, int size) throws SQLException {
-        if (size < 0) {
-            throw new SQLException("Invalid column display size. Cannot be less " +
-                "than zero");
-        }
-        checkColRange(columnIndex);
-        colInfo[columnIndex].columnDisplaySize = size;
-    }
-
-    /**
-     * Sets the suggested column label for use in printouts and
-     * displays, if any, to <i>label</i>. If <i>label</i> is
-     * <code>null</code>, the column label is set to an empty string
-     * ("").
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @param label the column label to be used in printouts and displays; if the
-     *        column label is <code>null</code>, an empty <code>String</code> is
-     *        set
-     * @throws SQLException if a database access error occurs
-     *         or the given column index is out of bounds
-     */
-    public void setColumnLabel(int columnIndex, String label) throws SQLException {
-        checkColRange(columnIndex);
-        if (label != null) {
-            colInfo[columnIndex].columnLabel = label;
-        } else {
-            colInfo[columnIndex].columnLabel = "";
-        }
-    }
-
-    /**
-     * Sets the column name of the designated column to the given name.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *      must be between <code>1</code> and the number of columns, inclusive
-     * @param columnName a <code>String</code> object indicating the column name;
-     *      if the given name is <code>null</code>, an empty <code>String</code>
-     *      is set
-     * @throws SQLException if a database access error occurs or the given column
-     *      index is out of bounds
-     */
-    public void setColumnName(int columnIndex, String columnName) throws SQLException {
-        checkColRange(columnIndex);
-        if (columnName != null) {
-            colInfo[columnIndex].columnName = columnName;
-        } else {
-            colInfo[columnIndex].columnName = "";
-        }
-    }
-
-    /**
-     * Sets the designated column's table's schema name, if any, to
-     * <i>schemaName</i>. If <i>schemaName</i> is <code>null</code>,
-     * the schema name is set to an empty string ("").
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @param schemaName the schema name for the table from which a value in the
-     *        designated column was derived; may be an empty <code>String</code>
-     *        or <code>null</code>
-     * @throws SQLException if a database access error occurs
-     *        or the given column number is out of bounds
-     */
-    public void setSchemaName(int columnIndex, String schemaName) throws SQLException {
-        checkColRange(columnIndex);
-        if (schemaName != null ) {
-            colInfo[columnIndex].schemaName = schemaName;
-        } else {
-            colInfo[columnIndex].schemaName = "";
-        }
-    }
-
-    /**
-     * Sets the total number of decimal digits in a value stored in the
-     * designated column to the given number.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @param precision the total number of decimal digits; must be <code>0</code>
-     *        or more
-     * @throws SQLException if a database access error occurs,
-     *         <i>columnIndex</i> is out of bounds, or <i>precision</i>
-     *         is less than <code>0</code>
-     */
-    public void setPrecision(int columnIndex, int precision) throws SQLException {
-
-        if (precision < 0) {
-            throw new SQLException("Invalid precision value. Cannot be less " +
-                "than zero");
-        }
-        checkColRange(columnIndex);
-        colInfo[columnIndex].colPrecision = precision;
-    }
-
-    /**
-     * Sets the number of digits to the right of the decimal point in a value
-     * stored in the designated column to the given number.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @param scale the number of digits to the right of the decimal point; must be
-     *        zero or greater
-     * @throws SQLException if a database access error occurs,
-     *         <i>columnIndex</i> is out of bounds, or <i>scale</i>
-     *         is less than <code>0</code>
-     */
-    public void setScale(int columnIndex, int scale) throws SQLException {
-        if (scale < 0) {
-            throw new SQLException("Invalid scale size. Cannot be less " +
-                "than zero");
-        }
-        checkColRange(columnIndex);
-        colInfo[columnIndex].colScale = scale;
-    }
-
-    /**
-     * Sets the name of the table from which the designated column
-     * was derived to the given table name.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @param tableName the column's table name; may be <code>null</code> or an
-     *        empty string
-     * @throws SQLException if a database access error occurs
-     *         or the given column number is out of bounds
-     */
-    public void setTableName(int columnIndex, String tableName) throws SQLException {
-        checkColRange(columnIndex);
-        if (tableName != null) {
-            colInfo[columnIndex].tableName = tableName;
-        } else {
-            colInfo[columnIndex].tableName = "";
-        }
-    }
-
-    /**
-     * Sets the catalog name of the table from which the designated
-     * column was derived to <i>catalogName</i>. If <i>catalogName</i>
-     * is <code>null</code>, the catalog name is set to an empty string.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @param catalogName the column's table's catalog name; if the catalogName
-     *        is <code>null</code>, an empty <code>String</code> is set
-     * @throws SQLException if a database access error occurs
-     *         or the given column number is out of bounds
-     */
-    public void setCatalogName(int columnIndex, String catalogName) throws SQLException {
-        checkColRange(columnIndex);
-        if (catalogName != null)
-            colInfo[columnIndex].catName = catalogName;
-        else
-            colInfo[columnIndex].catName = "";
-    }
-
-    /**
-     * Sets the SQL type code for values stored in the designated column
-     * to the given type code from the class <code>java.sql.Types</code>.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @param SQLType the designated column's SQL type, which must be one of the
-     *                constants in the class <code>java.sql.Types</code>
-     * @throws SQLException if a database access error occurs,
-     *         the given column number is out of bounds, or the column type
-     *         specified is not one of the constants in
-     *         <code>java.sql.Types</code>
-     * @see java.sql.Types
-     */
-    public void setColumnType(int columnIndex, int SQLType) throws SQLException {
-        // examine java.sql.Type reflectively, loop on the fields and check
-        // this. Separate out into a private method
-        checkColType(SQLType);
-        checkColRange(columnIndex);
-        colInfo[columnIndex].colType = SQLType;
-    }
-
-    /**
-     * Sets the type name used by the data source for values stored in the
-     * designated column to the given type name.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     * must be between <code>1</code> and the number of columns, inclusive
-     * @param typeName the data source-specific type name; if <i>typeName</i> is
-     *        <code>null</code>, an empty <code>String</code> is set
-     * @throws SQLException if a database access error occurs
-     *         or the given column number is out of bounds
-     */
-    public void setColumnTypeName(int columnIndex, String typeName)
-        throws SQLException {
-        checkColRange(columnIndex);
-        if (typeName != null) {
-            colInfo[columnIndex].colTypeName = typeName;
-        } else {
-            colInfo[columnIndex].colTypeName = "";
-        }
-    }
-
-    /**
-     * Retrieves the number of columns in the <code>RowSet</code> object
-     * for which this <code>RowSetMetaDataImpl</code> object was created.
-     *
-     * @return the number of columns
-     * @throws SQLException if an error occurs determining the column count
-     */
-    public int getColumnCount() throws SQLException {
-        return colCount;
-    }
-
-    /**
-     * Retrieves whether a value stored in the designated column is
-     * automatically numbered, and thus readonly.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *         must be between <code>1</code> and the number of columns, inclusive
-     * @return <code>true</code> if the column is automatically numbered;
-     *         <code>false</code> otherwise
-     * @throws SQLException if a database access error occurs
-     * or the given column number is out of bounds
-     */
-    public boolean isAutoIncrement(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        return colInfo[columnIndex].autoIncrement;
-    }
-
-    /**
-     * Indicates whether the case of the designated column's name
-     * matters.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     * must be between <code>1</code> and the number of columns, inclusive
-     * @return <code>true</code> if the column name is case sensitive;
-     *          <code>false</code> otherwise
-     * @throws SQLException if a database access error occurs
-     * or the given column number is out of bounds
-     */
-    public boolean isCaseSensitive(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        return colInfo[columnIndex].caseSensitive;
-    }
-
-    /**
-     * Indicates whether a value stored in the designated column
-     * can be used in a <code>WHERE</code> clause.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @return <code>true</code> if a value in the designated column can be used in a
-     *         <code>WHERE</code> clause; <code>false</code> otherwise
-     * @throws SQLException if a database access error occurs
-     *         or the given column number is out of bounds
-     */
-    public boolean isSearchable(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        return colInfo[columnIndex].searchable;
-    }
-
-    /**
-     * Indicates whether a value stored in the designated column
-     * is a cash value.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @return <code>true</code> if a value in the designated column is a cash value;
-     *         <code>false</code> otherwise
-     * @throws SQLException if a database access error occurs
-     *         or the given column number is out of bounds
-     */
-    public boolean isCurrency(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        return colInfo[columnIndex].currency;
-    }
-
-    /**
-     * Retrieves a constant indicating whether it is possible
-     * to store a <code>NULL</code> value in the designated column.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @return a constant from the <code>ResultSetMetaData</code> interface;
-     *         either <code>columnNoNulls</code>,
-     *         <code>columnNullable</code>, or
-     *         <code>columnNullableUnknown</code>
-     * @throws SQLException if a database access error occurs
-     *         or the given column number is out of bounds
-     */
-    public int isNullable(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        return colInfo[columnIndex].nullable;
-    }
-
-    /**
-     * Indicates whether a value stored in the designated column is
-     * a signed number.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @return <code>true</code> if if a value in the designated column is a signed
-     *         number; <code>false</code> otherwise
-     * @throws SQLException if a database access error occurs
-     *         or the given column number is out of bounds
-     */
-    public boolean isSigned(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        return colInfo[columnIndex].signed;
-    }
-
-    /**
-     * Retrieves the normal maximum width in chars of the designated column.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @return the maximum number of chars that can be displayed in the designated
-     *         column
-     * @throws SQLException if a database access error occurs
-     *         or the given column number is out of bounds
-     */
-    public int getColumnDisplaySize(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        return colInfo[columnIndex].columnDisplaySize;
-    }
-
-    /**
-     * Retrieves the the suggested column title for the designated
-     * column for use in printouts and displays.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @return the suggested column name to use in printouts and displays
-     * @throws SQLException if a database access error occurs
-     *         or the given column number is out of bounds
-     */
-    public String getColumnLabel(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        return colInfo[columnIndex].columnLabel;
-    }
-
-    /**
-     * Retrieves the name of the designated column.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     * must be between <code>1</code> and the number of columns, inclusive
-     * @return the column name of the designated column
-     * @throws SQLException if a database access error occurs
-     * or the given column number is out of bounds
-     */
-    public String getColumnName(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        return colInfo[columnIndex].columnName;
-    }
-
-    /**
-     * Retrieves the schema name of the table from which the value
-     * in the designated column was derived.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *         must be between <code>1</code> and the number of columns,
-     *         inclusive
-     * @return the schema name or an empty <code>String</code> if no schema
-     *         name is available
-     * @throws SQLException if a database access error occurs
-     * or the given column number is out of bounds
-     */
-    public String getSchemaName(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        String str ="";
-        if(colInfo[columnIndex].schemaName == null){
-        } else {
-              str = colInfo[columnIndex].schemaName;
-        }
-        return str;
-    }
-
-    /**
-     * Retrieves the total number of digits for values stored in
-     * the designated column.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     * must be between <code>1</code> and the number of columns, inclusive
-     * @return the precision for values stored in the designated column
-     * @throws SQLException if a database access error occurs
-     * or the given column number is out of bounds
-     */
-    public int getPrecision(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        return colInfo[columnIndex].colPrecision;
-    }
-
-    /**
-     * Retrieves the number of digits to the right of the decimal point
-     * for values stored in the designated column.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     * must be between <code>1</code> and the number of columns, inclusive
-     * @return the scale for values stored in the designated column
-     * @throws SQLException if a database access error occurs
-     * or the given column number is out of bounds
-     */
-    public int getScale(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        return colInfo[columnIndex].colScale;
-    }
-
-    /**
-     * Retrieves the name of the table from which the value
-     * in the designated column was derived.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     * must be between <code>1</code> and the number of columns, inclusive
-     * @return the table name or an empty <code>String</code> if no table name
-     *         is available
-     * @throws SQLException if a database access error occurs
-     * or the given column number is out of bounds
-     */
-    public String getTableName(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        return colInfo[columnIndex].tableName;
-    }
-
-    /**
-     * Retrieves the catalog name of the table from which the value
-     * in the designated column was derived.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     * must be between <code>1</code> and the number of columns, inclusive
-     * @return the catalog name of the column's table or an empty
-     *         <code>String</code> if no catalog name is available
-     * @throws SQLException if a database access error occurs
-     * or the given column number is out of bounds
-     */
-    public String getCatalogName(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        String str ="";
-        if(colInfo[columnIndex].catName == null){
-        } else {
-           str = colInfo[columnIndex].catName;
-        }
-        return str;
-    }
-
-    /**
-     * Retrieves the type code (one of the <code>java.sql.Types</code>
-     * constants) for the SQL type of the value stored in the
-     * designated column.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     * must be between <code>1</code> and the number of columns, inclusive
-     * @return an <code>int</code> representing the SQL type of values
-     * stored in the designated column
-     * @throws SQLException if a database access error occurs
-     * or the given column number is out of bounds
-     * @see java.sql.Types
-     */
-    public int getColumnType(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        return colInfo[columnIndex].colType;
-    }
-
-    /**
-     * Retrieves the DBMS-specific type name for values stored in the
-     * designated column.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     * must be between <code>1</code> and the number of columns, inclusive
-     * @return the type name used by the data source
-     * @throws SQLException if a database access error occurs
-     * or the given column number is out of bounds
-     */
-    public String getColumnTypeName(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        return colInfo[columnIndex].colTypeName;
-    }
-
-
-    /**
-     * Indicates whether the designated column is definitely
-     * not writable, thus readonly.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     * must be between <code>1</code> and the number of columns, inclusive
-     * @return <code>true</code> if this <code>RowSet</code> object is read-Only
-     * and thus not updatable; <code>false</code> otherwise
-     * @throws SQLException if a database access error occurs
-     * or the given column number is out of bounds
-     */
-    public boolean isReadOnly(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        return colInfo[columnIndex].readOnly;
-    }
-
-    /**
-     * Indicates whether it is possible for a write operation on
-     * the designated column to succeed. A return value of
-     * <code>true</code> means that a write operation may or may
-     * not succeed.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *         must be between <code>1</code> and the number of columns, inclusive
-     * @return <code>true</code> if a write operation on the designated column may
-     *          will succeed; <code>false</code> otherwise
-     * @throws SQLException if a database access error occurs
-     *         or the given column number is out of bounds
-     */
-    public boolean isWritable(int columnIndex) throws SQLException {
-        checkColRange(columnIndex);
-        return colInfo[columnIndex].writable;
-    }
-
-    /**
-     * Indicates whether a write operation on the designated column
-     * will definitely succeed.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     * must be between <code>1</code> and the number of columns, inclusive
-     * @return <code>true</code> if a write operation on the designated column will
-     *         definitely succeed; <code>false</code> otherwise
-     * @throws SQLException if a database access error occurs
-     * or the given column number is out of bounds
-     */
-    public  boolean isDefinitelyWritable(int columnIndex)
-        throws SQLException { return true;}
-
-    /**
-     * Retrieves the fully-qualified name of the class in the Java
-     * programming language to which a value in the designated column
-     * will be mapped.  For example, if the value is an <code>int</code>,
-     * the class name returned by this method will be
-     * <code>java.lang.Integer</code>.
-     * <P>
-     * If the value in the designated column has a custom mapping,
-     * this method returns the name of the class that implements
-     * <code>SQLData</code>. When the method <code>ResultSet.getObject</code>
-     * is called to retrieve a value from the designated column, it will
-     * create an instance of this class or one of its subclasses.
-     *
-     * @param columnIndex the first column is 1, the second is 2, and so on;
-     *        must be between <code>1</code> and the number of columns, inclusive
-     * @return the fully-qualified name of the class in the Java programming
-     *        language that would be used by the method <code>RowSet.getObject</code> to
-     *        retrieve the value in the specified column. This is the class
-     *        name used for custom mapping when there is a custom mapping.
-     * @throws SQLException if a database access error occurs
-     *         or the given column number is out of bounds
-     */
-    public String getColumnClassName(int columnIndex) throws SQLException {
-        String className = String.class.getName();
-
-        int sqlType = getColumnType(columnIndex);
-
-        switch (sqlType) {
-
-        case Types.NUMERIC:
-        case Types.DECIMAL:
-            className = java.math.BigDecimal.class.getName();
-            break;
-
-        case Types.BIT:
-            className = java.lang.Boolean.class.getName();
-            break;
-
-        case Types.TINYINT:
-            className = java.lang.Byte.class.getName();
-            break;
-
-        case Types.SMALLINT:
-            className = java.lang.Short.class.getName();
-            break;
-
-        case Types.INTEGER:
-            className = java.lang.Integer.class.getName();
-            break;
-
-        case Types.BIGINT:
-            className = java.lang.Long.class.getName();
-            break;
-
-        case Types.REAL:
-            className = java.lang.Float.class.getName();
-            break;
-
-        case Types.FLOAT:
-        case Types.DOUBLE:
-            className = java.lang.Double.class.getName();
-            break;
-
-        case Types.BINARY:
-        case Types.VARBINARY:
-        case Types.LONGVARBINARY:
-            className = "byte[]";
-            break;
-
-        case Types.DATE:
-            className = java.sql.Date.class.getName();
-            break;
-
-        case Types.TIME:
-            className = java.sql.Time.class.getName();
-            break;
-
-        case Types.TIMESTAMP:
-            className = java.sql.Timestamp.class.getName();
-            break;
-
-        case Types.BLOB:
-            className = java.sql.Blob.class.getName();
-            break;
-
-        case Types.CLOB:
-            className = java.sql.Clob.class.getName();
-            break;
-        }
-
-        return className;
-    }
-
-    /**
-     * Returns an object that implements the given interface to allow access to non-standard methods,
-     * or standard methods not exposed by the proxy.
-     * The result may be either the object found to implement the interface or a proxy for that object.
-     * If the receiver implements the interface then that is the object. If the receiver is a wrapper
-     * and the wrapped object implements the interface then that is the object. Otherwise the object is
-     *  the result of calling <code>unwrap</code> recursively on the wrapped object. If the receiver is not a
-     * wrapper and does not implement the interface, then an <code>SQLException</code> is thrown.
-     *
-     * @param iface A Class defining an interface that the result must implement.
-     * @return an object that implements the interface. May be a proxy for the actual implementing object.
-     * @throws java.sql.SQLException If no object found that implements the interface
-     * @since 1.6
-     */
-    public <T> T unwrap(java.lang.Class<T> iface) throws java.sql.SQLException {
-
-        if(isWrapperFor(iface)) {
-            return iface.cast(this);
-        } else {
-            throw new SQLException("unwrap failed for:"+ iface);
-        }
-    }
-
-    /**
-     * Returns true if this either implements the interface argument or is directly or indirectly a wrapper
-     * for an object that does. Returns false otherwise. If this implements the interface then return true,
-     * else if this is a wrapper then return the result of recursively calling <code>isWrapperFor</code> on the wrapped
-     * object. If this does not implement the interface and is not a wrapper, return false.
-     * This method should be implemented as a low-cost operation compared to <code>unwrap</code> so that
-     * callers can use this method to avoid expensive <code>unwrap</code> calls that may fail. If this method
-     * returns true then calling <code>unwrap</code> with the same argument should succeed.
-     *
-     * @param interfaces a Class defining an interface.
-     * @return true if this implements the interface or directly or indirectly wraps an object that does.
-     * @throws java.sql.SQLException  if an error occurs while determining whether this is a wrapper
-     * for an object with the given interface.
-     * @since 1.6
-     */
-    public boolean isWrapperFor(Class<?> interfaces) throws SQLException {
-        return interfaces.isInstance(this);
-    }
-
-    static final long serialVersionUID = 6893806403181801867L;
-
-    private class ColInfo implements Serializable {
-        /**
-         * The field that indicates whether the value in this column is a number
-         * that is incremented automatically, which makes the value read-only.
-         * <code>true</code> means that the value in this column
-         * is automatically numbered; <code>false</code> means that it is not.
-         *
-         * @serial
-         */
-        public boolean autoIncrement;
-
-        /**
-         * The field that indicates whether the value in this column is case sensitive.
-         * <code>true</code> means that it is; <code>false</code> that it is not.
-         *
-         * @serial
-         */
-        public boolean caseSensitive;
-
-        /**
-         * The field that indicates whether the value in this column is a cash value
-         * <code>true</code> means that it is; <code>false</code> that it is not.
-         *
-         * @serial
-         */
-        public boolean currency;
-
-        /**
-         * The field that indicates whether the value in this column is nullable.
-         * The possible values are the <code>ResultSet</code> constants
-         * <code>columnNoNulls</code>, <code>columnNullable</code>, and
-         * <code>columnNullableUnknown</code>.
-         *
-         * @serial
-         */
-        public int nullable;
-
-        /**
-         * The field that indicates whether the value in this column is a signed number.
-         * <code>true</code> means that it is; <code>false</code> that it is not.
-         *
-         * @serial
-         */
-        public boolean signed;
-
-        /**
-         * The field that indicates whether the value in this column can be used in
-         * a <code>WHERE</code> clause.
-         * <code>true</code> means that it can; <code>false</code> that it cannot.
-         *
-         * @serial
-         */
-        public boolean searchable;
-
-        /**
-         * The field that indicates the normal maximum width in characters for
-         * this column.
-         *
-         * @serial
-         */
-        public int columnDisplaySize;
-
-        /**
-         * The field that holds the suggested column title for this column, to be
-         * used in printing and displays.
-         *
-         * @serial
-         */
-        public String columnLabel;
-
-        /**
-         * The field that holds the name of this column.
-         *
-         * @serial
-         */
-        public  String columnName;
-
-        /**
-         * The field that holds the schema name for the table from which this column
-         * was derived.
-         *
-         * @serial
-         */
-        public String schemaName;
-
-        /**
-         * The field that holds the precision of the value in this column.  For number
-         * types, the precision is the total number of decimal digits; for character types,
-         * it is the maximum number of characters; for binary types, it is the maximum
-         * length in bytes.
-         *
-         * @serial
-         */
-        public int colPrecision;
-
-        /**
-         * The field that holds the scale (number of digits to the right of the decimal
-         * point) of the value in this column.
-         *
-         * @serial
-         */
-        public int colScale;
-
-        /**
-         * The field that holds the name of the table from which this column
-         * was derived.  This value may be the empty string if there is no
-         * table name, such as when this column is produced by a join.
-         *
-         * @serial
-         */
-        public String tableName ="";
-
-        /**
-         * The field that holds the catalog name for the table from which this column
-         * was derived.  If the DBMS does not support catalogs, the value may be the
-         * empty string.
-         *
-         * @serial
-         */
-        public String catName;
-
-        /**
-         * The field that holds the type code from the class <code>java.sql.Types</code>
-         * indicating the type of the value in this column.
-         *
-         * @serial
-         */
-        public int colType;
-
-        /**
-         * The field that holds the the type name used by this particular data source
-         * for the value stored in this column.
-         *
-         * @serial
-         */
-        public String colTypeName;
-
-        /**
-         * The field that holds the updatablity boolean per column of a RowSet
-         *
-         * @serial
-         */
-        public boolean readOnly = false;
-
-        /**
-         * The field that hold the writable boolean per column of a RowSet
-         *
-         *@serial
-         */
-        public boolean writable = true;
-    }
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/RowSetProvider.java b/ojluni/src/main/java/javax/sql/rowset/RowSetProvider.java
deleted file mode 100755
index c161ede..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/RowSetProvider.java
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * Copyright (c) 2010, 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.
- */
-
-package javax.sql.rowset;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.sql.SQLException;
-import java.util.ServiceConfigurationError;
-import java.util.ServiceLoader;
-
-/**
- * A factory API that enables applications to obtain a
- * {@code RowSetFactory} implementation  that can be used to create different
- * types of {@code RowSet} implementations.
- * <p>
- * Example:
- * </p>
- * <pre>
- * RowSetFactory aFactory = RowSetProvider.newFactory();
- * CachedRowSet crs = aFactory.createCachedRowSet();
- * ...
- * RowSetFactory rsf = RowSetProvider.newFactory("com.sun.rowset.RowSetFactoryImpl", null);
- * WebRowSet wrs = rsf.createWebRowSet();
- * </pre>
- *<p>
- * Tracing of this class may be enabled by setting the System property
- * {@code javax.sql.rowset.RowSetFactory.debug} to any value but {@code false}.
- * </p>
- *
- * @author Lance Andersen
- * @since 1.7
- */
-public class RowSetProvider {
-
-    private static final String ROWSET_DEBUG_PROPERTY = "javax.sql.rowset.RowSetProvider.debug";
-    private static final String ROWSET_FACTORY_IMPL = "com.sun.rowset.RowSetFactoryImpl";
-    private static final String ROWSET_FACTORY_NAME = "javax.sql.rowset.RowSetFactory";
-    /**
-     * Internal debug flag.
-     */
-    private static boolean debug = true;
-
-
-    static {
-        // Check to see if the debug property is set
-        String val = getSystemProperty(ROWSET_DEBUG_PROPERTY);
-        // Allow simply setting the prop to turn on debug
-        debug = val != null && !"false".equals(val);
-    }
-
-
-    protected RowSetProvider () {
-    }
-
-    /**
-     * <p>Creates a new instance of a <code>RowSetFactory</code>
-     * implementation.  This method uses the following
-     * look up order to determine
-     * the <code>RowSetFactory</code> implementation class to load:</p>
-     * <ul>
-     * <li>
-     * The System property {@code javax.sql.rowset.RowSetFactory}.  For example:
-     * <ul>
-     * <li>
-     * -Djavax.sql.rowset.RowSetFactory=com.sun.rowset.RowSetFactoryImpl
-     * </li>
-     * </ul>
-     * <li>
-     * The {@link ServiceLoader} API. The {@code ServiceLoader} API will look
-     * for a class name in the file
-     * {@code META-INF/services/javax.sql.rowset.RowSetFactory}
-     * in jars available to the runtime. For example, to have the the RowSetFactory
-     * implementation {@code com.sun.rowset.RowSetFactoryImpl } loaded, the
-     * entry in {@code META-INF/services/javax.sql.rowset.RowSetFactory} would be:
-     *  <ul>
-     * <li>
-     * {@code com.sun.rowset.RowSetFactoryImpl }
-     * </li>
-     * </ul>
-     * </li>
-     * <li>
-     * Platform default <code>RowSetFactory</code> instance.
-     * </li>
-     * </ul>
-     *
-     * <p>Once an application has obtained a reference to a {@code RowSetFactory},
-     * it can use the factory to obtain RowSet instances.</p>
-     *
-     * @return New instance of a <code>RowSetFactory</code>
-     *
-     * @throws SQLException if the default factory class cannot be loaded,
-     * instantiated. The cause will be set to actual Exception
-     *
-     * @see ServiceLoader
-     * @since 1.7
-     */
-    public static RowSetFactory newFactory()
-            throws SQLException {
-        // Use the system property first
-        RowSetFactory factory = null;
-        String factoryClassName = null;
-        try {
-            trace("Checking for Rowset System Property...");
-            factoryClassName = getSystemProperty(ROWSET_FACTORY_NAME);
-            if (factoryClassName != null) {
-                trace("Found system property, value=" + factoryClassName);
-                factory = (RowSetFactory) getFactoryClass(factoryClassName, null, true).newInstance();
-            }
-        } catch (ClassNotFoundException e) {
-            throw new SQLException(
-                    "RowSetFactory: " + factoryClassName + " not found", e);
-        } catch (Exception e) {
-            throw new SQLException(
-                    "RowSetFactory: " + factoryClassName + " could not be instantiated: " + e,
-                    e);
-        }
-
-        // Check to see if we found the RowSetFactory via a System property
-        if (factory == null) {
-            // If the RowSetFactory is not found via a System Property, now
-            // look it up via the ServiceLoader API and if not found, use the
-            // Java SE default.
-            factory = loadViaServiceLoader();
-            factory =
-                    factory == null ? newFactory(ROWSET_FACTORY_IMPL, null) : factory;
-        }
-        return (factory);
-    }
-
-    /**
-     * <p>Creates  a new instance of a <code>RowSetFactory</code> from the
-     * specified factory class name.
-     * This function is useful when there are multiple providers in the classpath.
-     * It gives more control to the application as it can specify which provider
-     * should be loaded.</p>
-     *
-     * <p>Once an application has obtained a reference to a <code>RowSetFactory</code>
-     * it can use the factory to obtain RowSet instances.</p>
-     *
-     * @param factoryClassName fully qualified factory class name that
-     * provides  an implementation of <code>javax.sql.rowset.RowSetFactory</code>.
-     *
-     * @param cl <code>ClassLoader</code> used to load the factory
-     * class. If <code>null</code> current <code>Thread</code>'s context
-     * classLoader is used to load the factory class.
-     *
-     * @return New instance of a <code>RowSetFactory</code>
-     *
-     * @throws SQLException if <code>factoryClassName</code> is
-     * <code>null</code>, or the factory class cannot be loaded, instantiated.
-     *
-     * @see #newFactory()
-     *
-     * @since 1.7
-     */
-    public static RowSetFactory newFactory(String factoryClassName, ClassLoader cl)
-            throws SQLException {
-
-        trace("***In newInstance()");
-        try {
-            Class providerClass = getFactoryClass(factoryClassName, cl, false);
-            RowSetFactory instance = (RowSetFactory) providerClass.newInstance();
-            if (debug) {
-                trace("Created new instance of " + providerClass +
-                        " using ClassLoader: " + cl);
-            }
-            return instance;
-        } catch (ClassNotFoundException x) {
-            throw new SQLException(
-                    "Provider " + factoryClassName + " not found", x);
-        } catch (Exception x) {
-            throw new SQLException(
-                    "Provider " + factoryClassName + " could not be instantiated: " + x,
-                    x);
-        }
-    }
-
-    /*
-     * Returns the class loader to be used.
-     * @return The ClassLoader to use.
-     *
-     */
-    static private ClassLoader getContextClassLoader() throws SecurityException {
-        return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
-
-            public ClassLoader run() {
-                ClassLoader cl = null;
-
-                cl = Thread.currentThread().getContextClassLoader();
-
-                if (cl == null) {
-                    cl = ClassLoader.getSystemClassLoader();
-                }
-
-                return cl;
-            }
-        });
-    }
-
-    /**
-     * Attempt to load a class using the class loader supplied. If that fails
-     * and fall back is enabled, the current (i.e. bootstrap) class loader is
-     * tried.
-     *
-     * If the class loader supplied is <code>null</code>, first try using the
-     * context class loader followed by the current class loader.
-     *  @return The class which was loaded
-     */
-    static private Class getFactoryClass(String factoryClassName, ClassLoader cl,
-            boolean doFallback) throws ClassNotFoundException {
-        try {
-            if (cl == null) {
-                cl = getContextClassLoader();
-                if (cl == null) {
-                    throw new ClassNotFoundException();
-                } else {
-                    return cl.loadClass(factoryClassName);
-                }
-            } else {
-                return cl.loadClass(factoryClassName);
-            }
-        } catch (ClassNotFoundException e) {
-            if (doFallback) {
-                // Use current class loader
-                return Class.forName(factoryClassName, true, RowSetFactory.class.getClassLoader());
-            } else {
-                throw e;
-            }
-        }
-    }
-
-    /**
-     * Use the ServiceLoader mechanism to load  the default RowSetFactory
-     * @return default RowSetFactory Implementation
-     */
-    static private RowSetFactory loadViaServiceLoader() throws SQLException {
-        RowSetFactory theFactory = null;
-        try {
-            trace("***in loadViaServiceLoader():");
-            for (RowSetFactory factory : ServiceLoader.load(javax.sql.rowset.RowSetFactory.class)) {
-                trace(" Loading done by the java.util.ServiceLoader :" + factory.getClass().getName());
-                theFactory = factory;
-                break;
-            }
-        } catch (ServiceConfigurationError e) {
-            throw new SQLException(
-                    "RowSetFactory: Error locating RowSetFactory using Service "
-                    + "Loader API: " + e, e);
-        }
-        return theFactory;
-
-    }
-
-    /**
-     * Returns the requested System Property.  If a {@code SecurityException}
-     * occurs, just return NULL
-     * @param propName - System property to retrieve
-     * @return The System property value or NULL if the property does not exist
-     * or a {@code SecurityException} occurs.
-     */
-    static private String getSystemProperty(final String propName) {
-        String property = null;
-        try {
-            property = AccessController.doPrivileged(new PrivilegedAction<String>() {
-
-                public String run() {
-                    return System.getProperty(propName);
-                }
-            });
-        } catch (SecurityException se) {
-            if (debug) {
-                se.printStackTrace();
-            }
-        }
-        return property;
-    }
-
-    /**
-     * Debug routine which will output tracing if the System Property
-     * -Djavax.sql.rowset.RowSetFactory.debug is set
-     * @param msg - The debug message to display
-     */
-    private static void trace(String msg) {
-        if (debug) {
-            System.err.println("###RowSets: " + msg);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/RowSetWarning.java b/ojluni/src/main/java/javax/sql/rowset/RowSetWarning.java
deleted file mode 100755
index 57b9e43..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/RowSetWarning.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package javax.sql.rowset;
-
-import java.sql.SQLException;
-
-/**
- * An extension of <code>SQLException</code> that provides information
- * about database warnings set on <code>RowSet</code> objects.
- * Warnings are silently chained to the object whose method call
- * caused it to be reported.
- * This class complements the <code>SQLWarning</code> class.
- * <P>
- * Rowset warnings may be retrieved from <code>JdbcRowSet</code>,
- * <code>CachedRowSet</code><sup><font size=-2>TM</font></sup>,
- * <code>WebRowSet</code>, <code>FilteredRowSet</code>, or <code>JoinRowSet</code>
- * implementations. To retrieve the first warning reported on any
- * <code>RowSet</code>
- * implementation,  use the method <code>getRowSetWarnings</code> defined
- * in the <code>JdbcRowSet</code> interface or the <code>CachedRowSet</code>
- * interface. To retrieve a warning chained to the first warning, use the
- * <code>RowSetWarning</code> method
- * <code>getNextWarning</code>. To retrieve subsequent warnings, call
- * <code>getNextWarning</code> on each <code>RowSetWarning</code> object that is
- * returned.
- * <P>
- * The inherited methods <code>getMessage</code>, <code>getSQLState</code>,
- * and <code>getErrorCode</code> retrieve information contained in a
- * <code>RowSetWarning</code> object.
- */
-public class RowSetWarning extends SQLException {
-
-    /**
-     * RowSetWarning object handle.
-     */
-     private RowSetWarning rwarning;
-
-    /**
-     * Constructs a <code>RowSetWarning</code> object
-     * with the given value for the reason; SQLState defaults to null,
-     * and vendorCode defaults to 0.
-     *
-     * @param reason a <code>String</code> object giving a description
-     *        of the warning; if the <code>String</code> is <code>null</code>,
-     *        this constructor behaves like the default (zero parameter)
-     *        <code>RowSetWarning</code> constructor
-     */
-    public RowSetWarning(String reason) {
-        super(reason);
-    }
-
-    /**
-     * Constructs a default <code>RowSetWarning</code> object. The reason
-     * defaults to <code>null</code>, SQLState defaults to null and vendorCode
-     * defaults to 0.
-     */
-    public RowSetWarning() {
-        super();
-    }
-
-    /**
-     * Constructs a <code>RowSetWarning</code> object initialized with the
-     * given values for the reason and SQLState. The vendor code defaults to 0.
-     *
-     * If the <code>reason</code> or <code>SQLState</code> parameters are <code>null</code>,
-     * this constructor behaves like the default (zero parameter)
-     * <code>RowSetWarning</code> constructor.
-     *
-     * @param reason a <code>String</code> giving a description of the
-     *        warning;
-     * @param SQLState an XOPEN code identifying the warning; if a non standard
-     *        XOPEN <i>SQLState</i> is supplied, no exception is thrown.
-     */
-    public RowSetWarning(java.lang.String reason, java.lang.String SQLState) {
-        super(reason, SQLState);
-    }
-
-    /**
-     * Constructs a fully specified <code>RowSetWarning</code> object initialized
-     * with the given values for the reason, SQLState and vendorCode.
-     *
-     * If the <code>reason</code>, or the  <code>SQLState</code>
-     * parameters are <code>null</code>, this constructor behaves like the default
-     * (zero parameter) <code>RowSetWarning</code> constructor.
-     *
-     * @param reason a <code>String</code> giving a description of the
-     *        warning;
-     * @param SQLState an XOPEN code identifying the warning; if a non standard
-     *        XPOEN <i>SQLState</i> is supplied, no exception is thrown.
-     * @param vendorCode a database vendor-specific warning code
-     */
-    public RowSetWarning(java.lang.String reason, java.lang.String SQLState, int vendorCode) {
-        super(reason, SQLState, vendorCode);
-    }
-
-    /**
-     * Retrieves the warning chained to this <code>RowSetWarning</code>
-     * object.
-     *
-     * @return the <code>RowSetWarning</code> object chained to this one; if no
-     *         <code>RowSetWarning</code> object is chained to this one,
-     *         <code>null</code> is returned (default value)
-     * @see #setNextWarning
-     */
-    public RowSetWarning getNextWarning() {
-        return rwarning;
-    }
-
-    /**
-     * Sets <i>warning</i> as the next warning, that is, the warning chained
-     * to this <code>RowSetWarning</code> object.
-     *
-     * @param warning the <code>RowSetWarning</code> object to be set as the
-     *     next warning; if the <code>RowSetWarning</code> is null, this
-     *     represents the finish point in the warning chain
-     * @see #getNextWarning
-     */
-    public void setNextWarning(RowSetWarning warning) {
-        rwarning = warning;
-    }
-
-    static final long serialVersionUID = 6678332766434564774L;
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/WebRowSet.java b/ojluni/src/main/java/javax/sql/rowset/WebRowSet.java
deleted file mode 100755
index abef62f..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/WebRowSet.java
+++ /dev/null
@@ -1,499 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-package javax.sql.rowset;
-
-import java.sql.*;
-import javax.sql.*;
-import javax.naming.*;
-import java.io.*;
-import java.math.*;
-import org.xml.sax.*;
-
-/**
- * The standard interface that all implementations of a <code>WebRowSet</code>
- * must implement.
- * <P>
- * <h3>1.0 Overview</h3>
- * The <code>WebRowSetImpl</code> provides the standard
- * reference implementation, which may be extended if required.
- * <P>
- * The standard WebRowSet XML Schema definition is available at the following
- * URI:
- * <ul>
- * <pre>
- * <a href="http://java.sun.com/xml/ns/jdbc/webrowset.xsd">http://java.sun.com/xml/ns/jdbc/webrowset.xsd</a>
- * </pre>
- * </ul>
- * It describes the standard XML document format required when describing a
- * <code>RowSet</code> object in XML and must be used be all standard implementations
- * of the <code>WebRowSet</code> interface to ensure interoperability. In addition,
- * the <code>WebRowSet</code> schema uses specific SQL/XML Schema annotations,
- * thus ensuring greater cross
- * platform inter-operability. This is an effort currently under way at the ISO
- * organization. The SQL/XML definition is available at the following URI:
- * <ul>
- * <pre>
- * <a href="http://standards.iso.org/iso/9075/2002/12/sqlxml">http://standards.iso.org/iso/9075/2002/12/sqlxml</a>
- * </pre>
- * </ul>
- * The schema definition describes the internal data of a <code>RowSet</code> object
- * in three distinct areas:
- * <UL>
- * <li><b>properties</b></li>
- * These properties describe the standard synchronization provider properties in
- * addition to the more general <code>RowSet</code> properties.
- * <p>
- * <li><b>metadata</b></li>
- * This describes the metadata associated with the tabular structure governed by a
- * <code>WebRowSet</code> object. The metadata described is closely aligned with the
- * metadata accessible in the underlying <code>java.sql.ResultSet</code> interface.
- * <p>
- * <li><b>data</b></li>
- * This describes the original data (the state of data since the last population
- * or last synchronization of the <code>WebRowSet</code> object) and the current
- * data. By keeping track of the delta between the original data and the current data,
- * a <code>WebRowSet</code> maintains
- * the ability to synchronize changes in its data back to the originating data source.
- * </ul>
- * <P>
- * <h3>2.0 WebRowSet States</h3>
- * The following sections demonstrates how a <code>WebRowSet</code> implementation
- * should use the XML Schema to describe update, insert, and delete operations
- * and to describe the state of a <code>WebRowSet</code> object in XML.
- * <p>
- * <h4>2.1 State 1 - Outputting a <code>WebRowSet</code> Object to XML</h3>
- * In this example, a <code>WebRowSet</code> object is created and populated with a simple 2 column,
- * 5 row table from a data source. Having the 5 rows in a <code>WebRowSet</code> object
- * makes it possible to describe them in XML. The
- * metadata describing the various standard JavaBeans properties as defined
- * in the RowSet interface plus the standard properties defined in
- * the <code>CachedRowSet</code><sup><font size=-2>TM</font></sup> interface
- * provide key details that describe WebRowSet
- * properties. Outputting the WebRowSet object to XML using the standard
- * <code>writeXml</code> methods describes the internal properties as follows:
- * <PRE>
- * &lt;<font color=red>properties</font>&gt;
- *       &lt;<font color=red>command</font>&gt;select co1, col2 from test_table&lt;<font color=red>/command</font>&gt;
- *      &lt;<font color=red>concurrency</font>&gt;1&lt;<font color=red>/concurrency</font>&gt;
- *      &lt;<font color=red>datasource/</font>&gt;
- *      &lt;<font color=red>escape-processing</font>&gt;true&lt;<font color=red>/escape-processing</font>&gt;
- *      &lt;<font color=red>fetch-direction</font>&gt;0&lt;<font color=red>/fetch-direction</font>&gt;
- *      &lt;<font color=red>fetch-size</font>&gt;0&lt;<font color=red>/fetch-size</font>&gt;
- *      &lt;<font color=red>isolation-level</font>&gt;1&lt;<font color=red>/isolation-level</font>&gt;
- *      &lt;<font color=red>key-columns/</font>&gt;
- *      &lt;<font color=red>map/</font>&gt;
- *      &lt;<font color=red>max-field-size</font>&gt;0&lt;<font color=red>/max-field-size</font>&gt;
- *      &lt;<font color=red>max-rows</font>&gt;0&lt;<font color=red>/max-rows</font>&gt;
- *      &lt;<font color=red>query-timeout</font>&gt;0&lt;<font color=red>/query-timeout</font>&gt;
- *      &lt;<font color=red>read-only</font>&gt;false&lt;<font color=red>/read-only</font>&gt;
- *      &lt;<font color=red>rowset-type</font>&gt;TRANSACTION_READ_UNCOMMITED&lt;<font color=red>/rowset-type</font>&gt;
- *      &lt;<font color=red>show-deleted</font>&gt;false&lt;<font color=red>/show-deleted</font>&gt;
- *      &lt;<font color=red>table-name/</font>&gt;
- *      &lt;<font color=red>url</font>&gt;jdbc:thin:oracle&lt;<font color=red>/url</font>&gt;
- *      &lt;<font color=red>sync-provider</font>&gt;
- *              &lt;<font color=red>sync-provider-name</font>&gt;.com.rowset.provider.RIOptimisticProvider&lt;<font color=red>/sync-provider-name</font>&gt;
- *              &lt;<font color=red>sync-provider-vendor</font>&gt;Oracle Corporation&lt;<font color=red>/sync-provider-vendor</font>&gt;
- *              &lt;<font color=red>sync-provider-version</font>&gt;1.0&lt;<font color=red>/sync-provider-name</font>&gt;
- *              &lt;<font color=red>sync-provider-grade</font>&gt;LOW&lt;<font color=red>/sync-provider-grade</font>&gt;
- *              &lt;<font color=red>data-source-lock</font>&gt;NONE&lt;<font color=red>/data-source-lock</font>&gt;
- *      &lt;<font color=red>/sync-provider</font>&gt;
- * &lt;<font color=red>/properties</font>&gt;
- * </PRE>
- * The meta-data describing the make up of the WebRowSet is described
- * in XML as detailed below. Note both columns are described between the
- * <code>column-definition</code> tags.
- * <PRE>
- * &lt;<font color=red>metadata</font>&gt;
- *      &lt;<font color=red>column-count</font>&gt;2&lt;<font color=red>/column-count</font>&gt;
- *      &lt;<font color=red>column-definition</font>&gt;
- *              &lt;<font color=red>column-index</font>&gt;1&lt;<font color=red>/column-index</font>&gt;
- *              &lt;<font color=red>auto-increment</font>&gt;false&lt;<font color=red>/auto-increment</font>&gt;
- *              &lt;<font color=red>case-sensitive</font>&gt;true&lt;<font color=red>/case-sensitive</font>&gt;
- *              &lt;<font color=red>currency</font>&gt;false&lt;<font color=red>/currency</font>&gt;
- *              &lt;<font color=red>nullable</font>&gt;1&lt;<font color=red>/nullable</font>&gt;
- *              &lt;<font color=red>signed</font>&gt;false&lt;<font color=red>/signed</font>&gt;
- *              &lt;<font color=red>searchable</font>&gt;true&lt;<font color=red>/searchable</font>&gt;
- *              &lt;<font color=red>column-display-size</font>&gt;10&lt;<font color=red>/column-display-size</font>&gt;
- *              &lt;<font color=red>column-label</font>&gt;COL1&lt;<font color=red>/column-label</font>&gt;
- *              &lt;<font color=red>column-name</font>&gt;COL1&lt;<font color=red>/column-name</font>&gt;
- *              &lt;<font color=red>schema-name/</font>&gt;
- *              &lt;<font color=red>column-precision</font>&gt;10&lt;<font color=red>/column-precision</font>&gt;
- *              &lt;<font color=red>column-scale</font>&gt;0&lt;<font color=red>/column-scale</font>&gt;
- *              &lt;<font color=red>table-name/</font>&gt;
- *              &lt;<font color=red>catalog-name/</font>&gt;
- *              &lt;<font color=red>column-type</font>&gt;1&lt;<font color=red>/column-type</font>&gt;
- *              &lt;<font color=red>column-type-name</font>&gt;CHAR&lt;<font color=red>/column-type-name</font>&gt;
- *      &lt;<font color=red>/column-definition</font>&gt;
- *      &lt;<font color=red>column-definition</font>&gt;
- *              &lt;<font color=red>column-index</font>&gt;2&lt;<font color=red>/column-index</font>&gt;
- *              &lt;<font color=red>auto-increment</font>&gt;false&lt;<font color=red>/auto-increment</font>&gt;
- *              &lt;<font color=red>case-sensitive</font>&gt;false&lt;<font color=red>/case-sensitive</font>&gt;
- *              &lt;<font color=red>currency</font>&gt;false&lt;<font color=red>/currency</font>&gt;
- *              &lt;<font color=red>nullable</font>&gt;1&lt;<font color=red>/nullable</font>&gt;
- *              &lt;<font color=red>signed</font>&gt;true&lt;<font color=red>/signed</font>&gt;
- *              &lt;<font color=red>searchable</font>&gt;true&lt;<font color=red>/searchable</font>&gt;
- *              &lt;<font color=red>column-display-size</font>&gt;39&lt;<font color=red>/column-display-size</font>&gt;
- *              &lt;<font color=red>column-label</font>&gt;COL2&lt;<font color=red>/column-label</font>&gt;
- *              &lt;<font color=red>column-name</font>&gt;COL2&lt;<font color=red>/column-name</font>&gt;
- *              &lt;<font color=red>schema-name/</font>&gt;
- *              &lt;<font color=red>column-precision</font>&gt;38&lt;<font color=red>/column-precision</font>&gt;
- *              &lt;<font color=red>column-scale</font>&gt;0&lt;<font color=red>/column-scale</font>&gt;
- *              &lt;<font color=red>table-name/</font>&gt;
- *              &lt;<font color=red>catalog-name/</font>&gt;
- *              &lt;<font color=red>column-type</font>&gt;3&lt;<font color=red>/column-type</font>&gt;
- *              &lt;<font color=red>column-type-name</font>&gt;NUMBER&lt;<font color=red>/column-type-name</font>&gt;
- *      &lt;<font color=red>/column-definition</font>&gt;
- * &lt;<font color=red>/metadata</font>&gt;
- * </PRE>
- * Having detailed how the properties and metadata are described, the following details
- * how the contents of a <code>WebRowSet</code> object is described in XML. Note, that
- * this describes a <code>WebRowSet</code> object that has not undergone any
- * modifications since its instantiation.
- * A <code>currentRow</code> tag is mapped to each row of the table structure that the
- * <code>WebRowSet</code> object provides. A <code>columnValue</code> tag may contain
- * either the <code>stringData</code> or <code>binaryData</code> tag, according to
- * the SQL type that
- * the XML value is mapping back to. The <code>binaryData</code> tag contains data in the
- * Base64 encoding and is typically used for <code>BLOB</code> and <code>CLOB</code> type data.
- * <PRE>
- * &lt;<font color=red>data</font>&gt;
- *      &lt;<font color=red>currentRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      firstrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      1
- *              &lt;<font color=red>/columnValue</font>&gt;
- *      &lt;<font color=red>/currentRow</font>&gt;
- *      &lt;<font color=red>currentRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      secondrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      2
- *              &lt;<font color=red>/columnValue</font>&gt;
- *      &lt;<font color=red>/currentRow</font>&gt;
- *      &lt;<font color=red>currentRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      thirdrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      3
- *              &lt;<font color=red>/columnValue</font>&gt;
- *      &lt;<font color=red>/currentRow</font>&gt;
- *      &lt;<font color=red>currentRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      fourthrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      4
- *              &lt;<font color=red>/columnValue</font>&gt;
- *      &lt;<font color=red>/currentRow</font>&gt;
- * &lt;<font color=red>/data</font>&gt;
- * </PRE>
- * <h4>2.2 State 2 - Deleting a Row</h4>
- * Deleting a row in a <code>WebRowSet</code> object involves simply moving to the row
- * to be deleted and then calling the method <code>deleteRow</code>, as in any other
- * <code>RowSet</code> object.  The following
- * two lines of code, in which <i>wrs</i> is a <code>WebRowSet</code> object, delete
- * the third row.
- * <PRE>
- *     wrs.absolute(3);
- *     wrs.deleteRow();
- * </PRE>
- * The XML description shows the third row is marked as a <code>deleteRow</code>,
- *  which eliminates the third row in the <code>WebRowSet</code> object.
- * <PRE>
- * &lt;<font color=red>data</font>&gt;
- *      &lt;<font color=red>currentRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      firstrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      1
- *              &lt;<font color=red>/columnValue</font>&gt;
- *      &lt;<font color=red>/currentRow</font>&gt;
- *      &lt;<font color=red>currentRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      secondrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      2
- *              &lt;<font color=red>/columnValue</font>&gt;
- *      &lt;<font color=red>/currentRow</font>&gt;
- *      &lt;<font color=red>deleteRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      thirdrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      3
- *              &lt;<font color=red>/columnValue</font>&gt;
- *      &lt;<font color=red>/deleteRow</font>&gt;
- *      &lt;<font color=red>currentRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      fourthrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      4
- *              &lt;<font color=red>/columnValue</font>&gt;
- *      &lt;<font color=red>/currentRow</font>&gt;
- * &lt;<font color=red>/data</font>&gt;
- * </PRE>
- * <h4>2.3 State 3 - Inserting a Row</h4>
- * A <code>WebRowSet</code> object can insert a new row by moving to the insert row,
- * calling the appropriate updater methods for each column in the row, and then
- * calling the method <code>insertRow</code>.
- * <PRE>
- * wrs.moveToInsertRow();
- * wrs.updateString(1, "fifththrow");
- * wrs.updateString(2, "5");
- * wrs.insertRow();
- * </PRE>
- * The following code fragment changes the second column value in the row just inserted.
- * Note that this code applies when new rows are inserted right after the current row,
- * which is why the method <code>next</code> moves the cursor to the correct row.
- * Calling the method <code>acceptChanges</code> writes the change to the data source.
- *
- * <PRE>
- * wrs.moveToCurrentRow();
- * wrs.next();
- * wrs.updateString(2, "V");
- * wrs.acceptChanges();
- * :
- * </PRE>
- * Describing this in XML demonstrates where the Java code inserts a new row and then
- * performs an update on the newly inserted row on an individual field.
- * <PRE>
- * &lt;<font color=red>data</font>&gt;
- *      &lt;<font color=red>currentRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      firstrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      1
- *              &lt;<font color=red>/columnValue</font>&gt;
- *      &lt;<font color=red>/currentRow</font>&gt;
- *      &lt;<font color=red>currentRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      secondrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      2
- *              &lt;<font color=red>/columnValue</font>&gt;
- *      &lt;<font color=red>/currentRow</font>&gt;
- *      &lt;<font color=red>currentRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      newthirdrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      III
- *              &lt;<font color=red>/columnValue</font>&gt;
- *      &lt;<font color=red>/currentRow</font>&gt;
- *      &lt;<font color=red>insertRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      fifthrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      5
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>updateValue</font>&gt;
- *                      V
- *              &lt;<font color=red>/updateValue</font>&gt;
- *      &lt;<font color=red>/insertRow</font>&gt;
- *      &lt;<font color=red>currentRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      fourthrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      4
- *              &lt;<font color=red>/columnValue</font>&gt;
- *      &lt;<font color=red>/currentRow</font>&gt;
- * &lt;<font color=red>/date</font>&gt;
- * </PRE>
- * <h4>2.4 State 4 - Modifying a Row</h4>
- * Modifying a row produces specific XML that records both the new value and the
- * value that was replaced.  The value that was replaced becomes the original value,
- * and the new value becomes the current value. The following
- * code moves the cursor to a specific row, performs some modifications, and updates
- * the row when complete.
- * <PRE>
- * wrs.absolute(5);
- * wrs.updateString(1, "new4thRow");
- * wrs.updateString(2, "IV");
- * wrs.updateRow();
- * </PRE>
- * In XML, this is described by the <code>modifyRow</code> tag. Both the original and new
- * values are contained within the tag for original row tracking purposes.
- * <PRE>
- * &lt;<font color=red>data</font>&gt;
- *      &lt;<font color=red>currentRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      firstrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      1
- *              &lt;<font color=red>/columnValue</font>&gt;
- *      &lt;<font color=red>/currentRow</font>&gt;
- *      &lt;<font color=red>currentRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      secondrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      2
- *              &lt;<font color=red>/columnValue</font>&gt;
- *      &lt;<font color=red>/currentRow</font>&gt;
- *      &lt;<font color=red>currentRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      newthirdrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      III
- *              &lt;<font color=red>/columnValue</font>&gt;
- *      &lt;<font color=red>/currentRow</font>&gt;
- *      &lt;<font color=red>currentRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      fifthrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      5
- *              &lt;<font color=red>/columnValue</font>&gt;
- *      &lt;<font color=red>/currentRow</font>&gt;
- *      &lt;<font color=red>modifyRow</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      fourthrow
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>updateValue</font>&gt;
- *                      new4thRow
- *              &lt;<font color=red>/updateValue</font>&gt;
- *              &lt;<font color=red>columnValue</font>&gt;
- *                      4
- *              &lt;<font color=red>/columnValue</font>&gt;
- *              &lt;<font color=red>updateValue</font>&gt;
- *                      IV
- *              &lt;<font color=red>/updateValue</font>&gt;
- *      &lt;<font color=red>/modifyRow</font>&gt;
- * &lt;<font color=red>/data</font>&gt;
- * </PRE>
- *
- * @see javax.sql.rowset.JdbcRowSet
- * @see javax.sql.rowset.CachedRowSet
- * @see javax.sql.rowset.FilteredRowSet
- * @see javax.sql.rowset.JoinRowSet
- */
-
-public interface WebRowSet extends CachedRowSet {
-
-   /**
-    * Reads a <code>WebRowSet</code> object in its XML format from the given
-    * <code>Reader</code> object.
-    *
-    * @param reader the <code>java.io.Reader</code> stream from which this
-    *        <code>WebRowSet</code> object will be populated
-
-    * @throws SQLException if a database access error occurs
-    */
-    public void readXml(java.io.Reader reader) throws SQLException;
-
-    /**
-     * Reads a stream based XML input to populate this <code>WebRowSet</code>
-     * object.
-     *
-     * @param iStream the <code>java.io.InputStream</code> from which this
-     *        <code>WebRowSet</code> object will be populated
-     * @throws SQLException if a data source access error occurs
-     * @throws IOException if an IO exception occurs
-     */
-    public void readXml(java.io.InputStream iStream) throws SQLException, IOException;
-
-   /**
-    * Populates this <code>WebRowSet</code> object with
-    * the contents of the given <code>ResultSet</code> object and writes its
-    * data, properties, and metadata
-    * to the given <code>Writer</code> object in XML format.
-    * <p>
-    * NOTE: The <code>WebRowSet</code> cursor may be moved to write out the
-    * contents to the XML data source. If implemented in this way, the cursor <b>must</b>
-    * be returned to its position just prior to the <code>writeXml()</code> call.
-    *
-    * @param rs the <code>ResultSet</code> object with which to populate this
-    *        <code>WebRowSet</code> object
-    * @param writer the <code>java.io.Writer</code> object to write to.
-    * @throws SQLException if an error occurs writing out the rowset
-    *          contents in XML format
-    */
-    public void writeXml(ResultSet rs, java.io.Writer writer) throws SQLException;
-
-   /**
-    * Populates this <code>WebRowSet</code> object with
-    * the contents of the given <code>ResultSet</code> object and writes its
-    * data, properties, and metadata
-    * to the given <code>OutputStream</code> object in XML format.
-    * <p>
-    * NOTE: The <code>WebRowSet</code> cursor may be moved to write out the
-    * contents to the XML data source. If implemented in this way, the cursor <b>must</b>
-    * be returned to its position just prior to the <code>writeXml()</code> call.
-    *
-    * @param rs the <code>ResultSet</code> object with which to populate this
-    *        <code>WebRowSet</code> object
-    * @param oStream the <code>java.io.OutputStream</code> to write to
-    * @throws SQLException if a data source access error occurs
-    * @throws IOException if a IO exception occurs
-    */
-    public void writeXml(ResultSet rs, java.io.OutputStream oStream) throws SQLException, IOException;
-
-   /**
-    * Writes the data, properties, and metadata for this <code>WebRowSet</code> object
-    * to the given <code>Writer</code> object in XML format.
-    *
-    * @param writer the <code>java.io.Writer</code> stream to write to
-    * @throws SQLException if an error occurs writing out the rowset
-    *          contents to XML
-    */
-    public void writeXml(java.io.Writer writer) throws SQLException;
-
-    /**
-     * Writes the data, properties, and metadata for this <code>WebRowSet</code> object
-     * to the given <code>OutputStream</code> object in XML format.
-     *
-     * @param oStream the <code>java.io.OutputStream</code> stream to write to
-     * @throws SQLException if a data source access error occurs
-     * @throws IOException if a IO exception occurs
-     */
-    public void writeXml(java.io.OutputStream oStream) throws SQLException, IOException;
-
-    /**
-     * The public identifier for the XML Schema definition that defines the XML
-     * tags and their valid values for a <code>WebRowSet</code> implementation.
-     */
-    public static String PUBLIC_XML_SCHEMA =
-        "--//Oracle Corporation//XSD Schema//EN";
-
-    /**
-     * The URL for the XML Schema definition file that defines the XML tags and
-     * their valid values for a <code>WebRowSet</code> implementation.
-     */
-    public static String SCHEMA_SYSTEM_ID = "http://java.sun.com/xml/ns/jdbc/webrowset.xsd";
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/serial/SQLInputImpl.java b/ojluni/src/main/java/javax/sql/rowset/serial/SQLInputImpl.java
deleted file mode 100755
index c84527d..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/serial/SQLInputImpl.java
+++ /dev/null
@@ -1,830 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.
- */
-
-package javax.sql.rowset.serial;
-
-import java.sql.*;
-import javax.sql.*;
-import java.io.*;
-import java.math.*;
-import java.util.Map;
-
-/**
- * An input stream used for custom mapping user-defined types (UDTs).
- * An <code>SQLInputImpl</code> object is an input stream that contains a
- * stream of values that are the attributes of a UDT.
- * <p>
- * This class is used by the driver behind the scenes when the method
- * <code>getObject</code> is called on an SQL structured or distinct type
- * that has a custom mapping; a programmer never invokes
- * <code>SQLInputImpl</code> methods directly. They are provided here as a
- * convenience for those who write <code>RowSet</code> implementations.
- * <P>
- * The <code>SQLInputImpl</code> class provides a set of
- * reader methods analogous to the <code>ResultSet</code> getter
- * methods.  These methods make it possible to read the values in an
- * <code>SQLInputImpl</code> object.
- * <P>
- * The method <code>wasNull</code> is used to determine whether the
- * the last value read was SQL <code>NULL</code>.
- * <P>When the method <code>getObject</code> is called with an
- * object of a class implementing the interface <code>SQLData</code>,
- * the JDBC driver calls the method <code>SQLData.getSQLType</code>
- * to determine the SQL type of the UDT being custom mapped. The driver
- * creates an instance of <code>SQLInputImpl</code>, populating it with the
- * attributes of the UDT.  The driver then passes the input
- * stream to the method <code>SQLData.readSQL</code>, which in turn
- * calls the <code>SQLInputImpl</code> reader methods
- * to read the attributes from the input stream.
- * @see java.sql.SQLData
- */
-public class SQLInputImpl implements SQLInput {
-
-    /**
-     * <code>true</code> if the last value returned was <code>SQL NULL</code>;
-     * <code>false</code> otherwise.
-     */
-    private boolean lastValueWasNull;
-
-    /**
-     * The current index into the array of SQL structured type attributes
-     * that will be read from this <code>SQLInputImpl</code> object and
-     * mapped to the fields of a class in the Java programming language.
-     */
-    private int idx;
-
-    /**
-     * The array of attributes to be read from this stream.  The order
-     * of the attributes is the same as the order in which they were
-     * listed in the SQL definition of the UDT.
-     */
-    private Object attrib[];
-
-    /**
-     * The type map to use when the method <code>readObject</code>
-     * is invoked. This is a <code>java.util.Map</code> object in which
-     * there may be zero or more entries.  Each entry consists of the
-     * fully qualified name of a UDT (the value to be mapped) and the
-     * <code>Class</code> object for a class that implements
-     * <code>SQLData</code> (the Java class that defines how the UDT
-     * will be mapped).
-     */
-    private Map map;
-
-
-    /**
-     * Creates an <code>SQLInputImpl</code> object initialized with the
-     * given array of attributes and the given type map. If any of the
-     * attributes is a UDT whose name is in an entry in the type map,
-     * the attribute will be mapped according to the corresponding
-     * <code>SQLData</code> implementation.
-     *
-     * @param attributes an array of <code>Object</code> instances in which
-     *        each element is an attribute of a UDT. The order of the
-     *        attributes in the array is the same order in which
-     *        the attributes were defined in the UDT definition.
-     * @param map a <code>java.util.Map</code> object containing zero or more
-     *        entries, with each entry consisting of 1) a <code>String</code>
-     *        giving the fully
-     *        qualified name of the UDT and 2) the <code>Class</code> object
-     *        for the <code>SQLData</code> implementation that defines how
-     *        the UDT is to be mapped
-     * @throws SQLException if the <code>attributes</code> or the <code>map</code>
-     *        is a <code>null</code> value
-     */
-
-    public SQLInputImpl(Object[] attributes, Map<String,Class<?>> map)
-        throws SQLException
-    {
-        if ((attributes == null) || (map == null)) {
-            throw new SQLException("Cannot instantiate a SQLInputImpl " +
-            "object with null parameters");
-        }
-        // assign our local reference to the attribute stream
-        attrib = attributes;
-        // init the index point before the head of the stream
-        idx = -1;
-        // set the map
-        this.map = map;
-    }
-
-
-    /**
-     * Retrieves the next attribute in this <code>SQLInputImpl</code> object
-     * as an <code>Object</code> in the Java programming language.
-     *
-     * @return the next value in the input stream
-     *         as an <code>Object</code> in the Java programming language
-     * @throws SQLException if the read position is located at an invalid
-     *         position or if there are no further values in the stream
-     */
-    private Object getNextAttribute() throws SQLException {
-        if (++idx >= attrib.length) {
-            throw new SQLException("SQLInputImpl exception: Invalid read " +
-                                   "position");
-        } else {
-            return attrib[idx];
-        }
-    }
-
-
-    //================================================================
-    // Methods for reading attributes from the stream of SQL data.
-    // These methods correspond to the column-accessor methods of
-    // java.sql.ResultSet.
-    //================================================================
-
-    /**
-     * Retrieves the next attribute in this <code>SQLInputImpl</code> object as
-     * a <code>String</code> in the Java programming language.
-     * <p>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type; this responsibility is delegated
-     * to the UDT mapping as defined by a <code>SQLData</code>
-     * implementation.
-     * <p>
-     * @return the next attribute in this <code>SQLInputImpl</code> object;
-     *     if the value is <code>SQL NULL</code>, return <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     *     position or if there are no further values in the stream.
-     */
-    public String readString() throws SQLException {
-
-        String attrib = (String)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return null;
-        } else {
-            lastValueWasNull = false;
-            return attrib;
-        }
-    }
-
-    /**
-     * Retrieves the next attribute in this <code>SQLInputImpl</code> object as
-     * a <code>boolean</code> in the Java programming language.
-     * <p>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type; this responsibility is delegated
-     * to the UDT mapping as defined by a <code>SQLData</code>
-     * implementation.
-     * <p>
-     * @return the next attribute in this <code>SQLInputImpl</code> object;
-     *     if the value is <code>SQL NULL</code>, return <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     *     position or if there are no further values in the stream.
-     */
-    public boolean readBoolean() throws SQLException {
-
-        Boolean attrib = (Boolean)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return false;
-        } else {
-            lastValueWasNull = false;
-            return attrib.booleanValue();
-        }
-    }
-
-    /**
-     * Retrieves the next attribute in this <code>SQLInputImpl</code> object as
-     * a <code>byte</code> in the Java programming language.
-     * <p>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type; this responsibility is delegated
-     * to the UDT mapping as defined by a <code>SQLData</code>
-     * implementation.
-     * <p>
-     * @return the next attribute in this <code>SQLInputImpl</code> object;
-     *     if the value is <code>SQL NULL</code>, return <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     *     position or if there are no further values in the stream
-     */
-    public byte readByte() throws SQLException {
-        Byte attrib = (Byte)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return (byte)0;
-        } else {
-            lastValueWasNull = false;
-            return attrib.byteValue();
-        }
-    }
-
-    /**
-     * Retrieves the next attribute in this <code>SQLInputImpl</code> object
-     * as a <code>short</code> in the Java programming language.
-     * <P>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type; this responsibility is delegated
-     * to the UDT mapping as defined by a <code>SQLData</code> implementation.
-     * <P>
-     * @return the next attribute in this <code>SQLInputImpl</code> object;
-     *       if the value is <code>SQL NULL</code>, return <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     *       position or if there are no more values in the stream
-     */
-    public short readShort() throws SQLException {
-        Short attrib = (Short)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return (short)0;
-        } else {
-            lastValueWasNull = false;
-            return attrib.shortValue();
-        }
-    }
-
-    /**
-     * Retrieves the next attribute in this <code>SQLInputImpl</code> object
-     * as an <code>int</code> in the Java programming language.
-     * <P>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type; this responsibility is delegated
-     * to the UDT mapping as defined by a <code>SQLData</code> implementation.
-     * <P>
-     * @return the next attribute in this <code>SQLInputImpl</code> object;
-     *       if the value is <code>SQL NULL</code>, return <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     *       position or if there are no more values in the stream
-     */
-    public int readInt() throws SQLException {
-        Integer attrib = (Integer)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return (int)0;
-        } else {
-            lastValueWasNull = false;
-            return attrib.intValue();
-        }
-    }
-
-    /**
-     * Retrieves the next attribute in this <code>SQLInputImpl</code> object
-     * as a <code>long</code> in the Java programming language.
-     * <P>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type; this responsibility is delegated
-     * to the UDT mapping as defined by a <code>SQLData</code> implementation.
-     * <P>
-     * @return the next attribute in this <code>SQLInputImpl</code> object;
-     *       if the value is <code>SQL NULL</code>, return <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     *       position or if there are no more values in the stream
-     */
-    public long readLong() throws SQLException {
-        Long attrib = (Long)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return (long)0;
-        } else {
-            lastValueWasNull = false;
-            return attrib.longValue();
-        }
-    }
-
-    /**
-     * Retrieves the next attribute in this <code>SQLInputImpl</code> object
-     * as a <code>float</code> in the Java programming language.
-     * <P>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type; this responsibility is delegated
-     * to the UDT mapping as defined by a <code>SQLData</code> implementation.
-     * <P>
-     * @return the next attribute in this <code>SQLInputImpl</code> object;
-     *       if the value is <code>SQL NULL</code>, return <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     *       position or if there are no more values in the stream
-     */
-    public float readFloat() throws SQLException {
-        Float attrib = (Float)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return (float)0;
-        } else {
-            lastValueWasNull = false;
-            return attrib.floatValue();
-        }
-    }
-
-    /**
-     * Retrieves the next attribute in this <code>SQLInputImpl</code> object
-     * as a <code>double</code> in the Java programming language.
-     * <P>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type; this responsibility is delegated
-     * to the UDT mapping as defined by a <code>SQLData</code> implementation.
-     * <P>
-     * @return the next attribute in this <code>SQLInputImpl</code> object;
-     *       if the value is <code>SQL NULL</code>, return <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     *       position or if there are no more values in the stream
-     */
-    public double readDouble() throws SQLException {
-        Double attrib = (Double)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return (double)0;
-        } else {
-            lastValueWasNull = false;
-            return attrib.doubleValue();
-        }
-    }
-
-    /**
-     * Retrieves the next attribute in this <code>SQLInputImpl</code> object
-     * as a <code>java.math.BigDecimal</code>.
-     * <P>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type; this responsibility is delegated
-     * to the UDT mapping as defined by a <code>SQLData</code> implementation.
-     * <P>
-     * @return the next attribute in this <code>SQLInputImpl</code> object;
-     *       if the value is <code>SQL NULL</code>, return <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     *       position or if there are no more values in the stream
-     */
-    public java.math.BigDecimal readBigDecimal() throws SQLException {
-        java.math.BigDecimal attrib = (java.math.BigDecimal)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return null;
-        } else {
-            lastValueWasNull = false;
-            return attrib;
-        }
-    }
-
-    /**
-     * Retrieves the next attribute in this <code>SQLInputImpl</code> object
-     * as an array of bytes.
-     * <p>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type; this responsibility is delegated
-     * to the UDT mapping as defined by a <code>SQLData</code> implementation.
-     * <P>
-     * @return the next attribute in this <code>SQLInputImpl</code> object;
-     *       if the value is <code>SQL NULL</code>, return <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     *       position or if there are no more values in the stream
-     */
-    public byte[] readBytes() throws SQLException {
-        byte[] attrib = (byte[])getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return null;
-        } else {
-            lastValueWasNull = false;
-            return attrib;
-        }
-    }
-
-    /**
-     * Retrieves the next attribute in this <code>SQLInputImpl</code> as
-     * a <code>java.sql.Date</code> object.
-     * <P>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type; this responsibility is delegated
-     * to the UDT mapping as defined by a <code>SQLData</code> implementation.
-     * <P>
-     * @return the next attribute in this <code>SQLInputImpl</code> object;
-     *       if the value is <code>SQL NULL</code>, return <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     *       position or if there are no more values in the stream
-     */
-    public java.sql.Date readDate() throws SQLException {
-        java.sql.Date attrib = (java.sql.Date)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return null;
-        } else {
-            lastValueWasNull = false;
-            return attrib;
-        }
-    }
-
-    /**
-     * Retrieves the next attribute in this <code>SQLInputImpl</code> object as
-     * a <code>java.sql.Time</code> object.
-     * <P>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type as this responsibility is delegated
-     * to the UDT mapping as implemented by a <code>SQLData</code>
-     * implementation.
-     *
-     * @return the attribute; if the value is <code>SQL NULL</code>, return
-     * <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     * position; or if there are no further values in the stream.
-     */
-    public java.sql.Time readTime() throws SQLException {
-        java.sql.Time attrib = (java.sql.Time)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return null;
-        } else {
-            lastValueWasNull = false;
-            return attrib;
-        }
-    }
-
-    /**
-     * Retrieves the next attribute in this <code>SQLInputImpl</code> object as
-     * a <code>java.sql.Timestamp</code> object.
-     *
-     * @return the attribute; if the value is <code>SQL NULL</code>, return
-     * <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     * position; or if there are no further values in the stream.
-     */
-    public java.sql.Timestamp readTimestamp() throws SQLException {
-        java.sql.Timestamp attrib = (java.sql.Timestamp)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return null;
-        } else {
-            lastValueWasNull = false;
-            return attrib;
-        }
-    }
-
-    /**
-     * Retrieves the next attribute in this <code>SQLInputImpl</code> object
-     * as a stream of Unicode characters.
-     * <P>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type as this responsibility is delegated
-     * to the UDT mapping as implemented by a <code>SQLData</code>
-     * implementation.
-     *
-     * @return the attribute; if the value is <code>SQL NULL</code>, return <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     * position; or if there are no further values in the stream.
-     */
-    public java.io.Reader readCharacterStream() throws SQLException {
-        java.io.Reader attrib = (java.io.Reader)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return null;
-        } else {
-            lastValueWasNull = false;
-            return attrib;
-        }
-    }
-
-    /**
-     * Returns the next attribute in this <code>SQLInputImpl</code> object
-     * as a stream of ASCII characters.
-     * <P>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type as this responsibility is delegated
-     * to the UDT mapping as implemented by a <code>SQLData</code>
-     * implementation.
-     *
-     * @return the attribute; if the value is <code>SQL NULL</code>,
-     * return <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     * position; or if there are no further values in the stream.
-     */
-    public java.io.InputStream readAsciiStream() throws SQLException {
-        java.io.InputStream attrib = (java.io.InputStream)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return null;
-        } else {
-            lastValueWasNull = false;
-            return attrib;
-        }
-    }
-
-    /**
-     * Returns the next attribute in this <code>SQLInputImpl</code> object
-     * as a stream of uninterpreted bytes.
-     * <P>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type as this responsibility is delegated
-     * to the UDT mapping as implemented by a <code>SQLData</code>
-     * implementation.
-     *
-     * @return the attribute; if the value is <code>SQL NULL</code>, return
-     * <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     * position; or if there are no further values in the stream.
-     */
-    public java.io.InputStream readBinaryStream() throws SQLException {
-        java.io.InputStream attrib = (java.io.InputStream)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return null;
-        } else {
-            lastValueWasNull = false;
-            return attrib;
-        }
-    }
-
-    //================================================================
-    // Methods for reading items of SQL user-defined types from the stream.
-    //================================================================
-
-    /**
-     * Retrieves the value at the head of this <code>SQLInputImpl</code>
-     * object as an <code>Object</code> in the Java programming language.  The
-     * actual type of the object returned is determined by the default
-     * mapping of SQL types to types in the Java programming language unless
-     * there is a custom mapping, in which case the type of the object
-     * returned is determined by this stream's type map.
-     * <P>
-     * The JDBC technology-enabled driver registers a type map with the stream
-     * before passing the stream to the application.
-     * <P>
-     * When the datum at the head of the stream is an SQL <code>NULL</code>,
-     * this method returns <code>null</code>.  If the datum is an SQL
-     * structured or distinct type with a custom mapping, this method
-     * determines the SQL type of the datum at the head of the stream,
-     * constructs an object of the appropriate class, and calls the method
-     * <code>SQLData.readSQL</code> on that object. The <code>readSQL</code>
-     * method then calls the appropriate <code>SQLInputImpl.readXXX</code>
-     * methods to retrieve the attribute values from the stream.
-     *
-     * @return the value at the head of the stream as an <code>Object</code>
-     *         in the Java programming language; <code>null</code> if
-     *         the value is SQL <code>NULL</code>
-     * @throws SQLException if the read position is located at an invalid
-     * position; or if there are no further values in the stream.
-     */
-    public Object readObject() throws SQLException {
-        Object attrib = (Object)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return null;
-        } else {
-            lastValueWasNull = false;
-            if (attrib instanceof Struct) {
-                Struct s = (Struct)attrib;
-                // look up the class in the map
-                Class c = (Class)map.get(s.getSQLTypeName());
-                if (c != null) {
-                    // create new instance of the class
-                    SQLData obj = null;
-                    try {
-                        obj = (SQLData)c.newInstance();
-                    } catch (java.lang.InstantiationException ex) {
-                        throw new SQLException("Unable to instantiate: " +
-                                               ex.getMessage());
-                    } catch (java.lang.IllegalAccessException ex) {
-                        throw new SQLException("Unable to instantiate: " +
-                                               ex.getMessage());
-                    }
-                    // get the attributes from the struct
-                    Object attribs[] = s.getAttributes(map);
-                    // create the SQLInput "stream"
-                    SQLInputImpl sqlInput = new SQLInputImpl(attribs, map);
-                    // read the values...
-                    obj.readSQL(sqlInput, s.getSQLTypeName());
-                    return (Object)obj;
-                }
-            }
-            return (Object)attrib;
-        }
-    }
-
-    /**
-     * Retrieves the value at the head of this <code>SQLInputImpl</code> object
-     * as a <code>Ref</code> object in the Java programming language.
-     *
-     * @return a <code>Ref</code> object representing the SQL
-     *         <code>REF</code> value at the head of the stream; if the value
-     *         is <code>SQL NULL</code> return <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     *         position; or if there are no further values in the stream.
-     */
-    public Ref readRef() throws SQLException {
-        Ref attrib = (Ref)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return null;
-        } else {
-            lastValueWasNull = false;
-            return attrib;
-        }
-    }
-
-    /**
-     * Retrieves the <code>BLOB</code> value at the head of this
-     * <code>SQLInputImpl</code> object as a <code>Blob</code> object
-     * in the Java programming language.
-     * <P>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type as this responsibility is delegated
-     * to the UDT mapping as implemented by a <code>SQLData</code>
-     * implementation.
-     *
-     * @return a <code>Blob</code> object representing the SQL
-     *         <code>BLOB</code> value at the head of this stream;
-     *         if the value is <code>SQL NULL</code>, return
-     *         <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     * position; or if there are no further values in the stream.
-     */
-    public Blob readBlob() throws SQLException {
-        Blob attrib = (Blob)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return null;
-        } else {
-            lastValueWasNull = false;
-            return attrib;
-        }
-    }
-
-    /**
-     * Retrieves the <code>CLOB</code> value at the head of this
-     * <code>SQLInputImpl</code> object as a <code>Clob</code> object
-     * in the Java programming language.
-     * <P>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type as this responsibility is delegated
-     * to the UDT mapping as implemented by a <code>SQLData</code>
-     * implementation.
-     *
-     * @return a <code>Clob</code> object representing the SQL
-     *         <code>CLOB</code> value at the head of the stream;
-     *         if the value is <code>SQL NULL</code>, return
-     *         <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     * position; or if there are no further values in the stream.
-     */
-    public Clob readClob() throws SQLException {
-
-        Clob attrib = (Clob)getNextAttribute();
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return null;
-        } else {
-            lastValueWasNull = false;
-            return attrib;
-        }
-    }
-
-    /**
-     * Reads an SQL <code>ARRAY</code> value from the stream and
-     * returns it as an <code>Array</code> object in the Java programming
-     * language.
-     * <P>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type as this responsibility is delegated
-     * to the UDT mapping as implemented by a <code>SQLData</code>
-     * implementation.
-     *
-     * @return an <code>Array</code> object representing the SQL
-     *         <code>ARRAY</code> value at the head of the stream; *
-     *         if the value is <code>SQL NULL</code>, return
-     *         <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     * position; or if there are no further values in the stream.
-
-     */
-    public Array readArray() throws SQLException {
-        Array attrib = (Array)getNextAttribute();
-
-        if (attrib == null) {
-            lastValueWasNull = true;
-            return null;
-        } else {
-            lastValueWasNull = false;
-            return attrib;
-        }
-    }
-
-    /**
-     * Ascertains whether the last value read from this
-     * <code>SQLInputImpl</code> object was <code>null</code>.
-     *
-     * @return <code>true</code> if the SQL value read most recently was
-     *         <code>null</code>; otherwise, <code>false</code>; by default it
-     *         will return false
-     * @throws SQLException if an error occurs determining the last value
-     *         read was a <code>null</code> value or not;
-     */
-    public boolean wasNull() throws SQLException {
-        return lastValueWasNull;
-    }
-
-    /**
-     * Reads an SQL <code>DATALINK</code> value from the stream and
-     * returns it as an <code>URL</code> object in the Java programming
-     * language.
-     * <P>
-     * This method does not perform type-safe checking to determine if the
-     * returned type is the expected type as this responsibility is delegated
-     * to the UDT mapping as implemented by a <code>SQLData</code>
-     * implementation.
-     *
-     * @return an <code>URL</code> object representing the SQL
-     *         <code>DATALINK</code> value at the head of the stream; *
-     *         if the value is <code>SQL NULL</code>, return
-     *         <code>null</code>
-     * @throws SQLException if the read position is located at an invalid
-     * position; or if there are no further values in the stream.
-     */
-    public java.net.URL readURL() throws SQLException {
-        throw new SQLException("Operation not supported");
-    }
-
-    //---------------------------- JDBC 4.0 -------------------------
-
-    /**
-     * Reads an SQL <code>NCLOB</code> value from the stream and returns it as a
-     * <code>Clob</code> object in the Java programming language.
-     *
-     * @return a <code>NClob</code> object representing data of the SQL <code>NCLOB</code> value
-     * at the head of the stream; <code>null</code> if the value read is
-     * SQL <code>NULL</code>
-     * @exception SQLException if a database access error occurs
-     */
-     public NClob readNClob() throws SQLException {
-        throw new UnsupportedOperationException("Operation not supported");
-    }
-
-    /**
-     * Reads the next attribute in the stream and returns it as a <code>String</code>
-     * in the Java programming language. It is intended for use when
-     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
-     * and <code>LONGNVARCHAR</code> columns.
-     *
-     * @return the attribute; if the value is SQL <code>NULL</code>, returns <code>null</code>
-     * @exception SQLException if a database access error occurs
-     */
-    public String readNString() throws SQLException {
-        throw new UnsupportedOperationException("Operation not supported");
-    }
-
-    /**
-     * Reads an SQL <code>XML</code> value from the stream and returns it as a
-     * <code>SQLXML</code> object in the Java programming language.
-     *
-     * @return a <code>SQLXML</code> object representing data of the SQL <code>XML</code> value
-     * at the head of the stream; <code>null</code> if the value read is
-     * SQL <code>NULL</code>
-     * @exception SQLException if a database access error occurs
-     */
-    public SQLXML readSQLXML() throws SQLException {
-        throw new UnsupportedOperationException("Operation not supported");
-    }
-
-     /**
-     * Reads an SQL <code>ROWID</code> value from the stream and returns it as a
-     * <code>RowId</code> object in the Java programming language.
-     *
-     * @return a <code>RowId</code> object representing data of the SQL <code>ROWID</code> value
-     * at the head of the stream; <code>null</code> if the value read is
-     * SQL <code>NULL</code>
-     * @exception SQLException if a database access error occurs
-     */
-    public RowId readRowId() throws SQLException {
-        throw new UnsupportedOperationException("Operation not supported");
-    }
-
-
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/serial/SQLOutputImpl.java b/ojluni/src/main/java/javax/sql/rowset/serial/SQLOutputImpl.java
deleted file mode 100755
index 7b5d8d4..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/serial/SQLOutputImpl.java
+++ /dev/null
@@ -1,618 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-package javax.sql.rowset.serial;
-
-import java.sql.*;
-import javax.sql.*;
-import java.io.*;
-import java.lang.String;
-import java.math.*;
-import java.util.Map;
-import java.util.Vector;
-
-/**
- * The output stream for writing the attributes of a
- * custom-mapped user-defined type (UDT) back to the database.
- * The driver uses this interface internally, and its
- * methods are never directly invoked by an application programmer.
- * <p>
- * When an application calls the
- * method <code>PreparedStatement.setObject</code>, the driver
- * checks to see whether the value to be written is a UDT with
- * a custom mapping.  If it is, there will be an entry in a
- * type map containing the <code>Class</code> object for the
- * class that implements <code>SQLData</code> for this UDT.
- * If the value to be written is an instance of <code>SQLData</code>,
- * the driver will create an instance of <code>SQLOutputImpl</code>
- * and pass it to the method <code>SQLData.writeSQL</code>.
- * The method <code>writeSQL</code> in turn calls the
- * appropriate <code>SQLOutputImpl.writeXXX</code> methods
- * to write data from the <code>SQLData</code> object to
- * the <code>SQLOutputImpl</code> output stream as the
- * representation of an SQL user-defined type.
- */
-public class SQLOutputImpl implements SQLOutput {
-
-    /**
-     * A reference to an existing vector that
-     * contains the attributes of a <code>Struct</code> object.
-     */
-    private Vector attribs;
-
-    /**
-     * The type map the driver supplies to a newly created
-     * <code>SQLOutputImpl</code> object.  This type map
-     * indicates the <code>SQLData</code> class whose
-     * <code>writeSQL</code> method will be called.  This
-     * method will in turn call the appropriate
-     * <code>SQLOutputImpl</code> writer methods.
-     */
-    private Map map;
-
-    /**
-     * Creates a new <code>SQLOutputImpl</code> object
-     * initialized with the given vector of attributes and
-     * type map.  The driver will use the type map to determine
-     * which <code>SQLData.writeSQL</code> method to invoke.
-     * This method will then call the appropriate
-     * <code>SQLOutputImpl</code> writer methods in order and
-     * thereby write the attributes to the new output stream.
-     *
-     * @param attributes a <code>Vector</code> object containing the attributes of
-     *        the UDT to be mapped to one or more objects in the Java
-     *        programming language
-     *
-     * @param map a <code>java.util.Map</code> object containing zero or
-     *        more entries, with each entry consisting of 1) a <code>String</code>
-     *        giving the fully qualified name of a UDT and 2) the
-     *        <code>Class</code> object for the <code>SQLData</code> implementation
-     *        that defines how the UDT is to be mapped
-     * @throws SQLException if the <code>attributes</code> or the <code>map</code>
-     *        is a <code>null</code> value
-     */
-    public SQLOutputImpl(Vector<?> attributes, Map<String,?> map)
-        throws SQLException
-    {
-        if ((attributes == null) || (map == null)) {
-            throw new SQLException("Cannot instantiate a SQLOutputImpl " +
-            "instance with null parameters");
-        }
-        this.attribs = attributes;
-        this.map = map;
-    }
-
-    //================================================================
-    // Methods for writing attributes to the stream of SQL data.
-    // These methods correspond to the column-accessor methods of
-    // java.sql.ResultSet.
-    //================================================================
-
-    /**
-     * Writes a <code>String</code> in the Java programming language
-     * to this <code>SQLOutputImpl</code> object. The driver converts
-     * it to an SQL <code>CHAR</code>, <code>VARCHAR</code>, or
-     * <code>LONGVARCHAR</code> before returning it to the database.
-     *
-     * @param x the value to pass to the database
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeString(String x) throws SQLException {
-        //System.out.println("Adding :"+x);
-        attribs.add(x);
-    }
-
-    /**
-     * Writes a <code>boolean</code> in the Java programming language
-     * to this <code>SQLOutputImpl</code> object. The driver converts
-     * it to an SQL <code>BIT</code> before returning it to the database.
-     *
-     * @param x the value to pass to the database
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeBoolean(boolean x) throws SQLException {
-        attribs.add(Boolean.valueOf(x));
-    }
-
-    /**
-     * Writes a <code>byte</code> in the Java programming language
-     * to this <code>SQLOutputImpl</code> object. The driver converts
-     * it to an SQL <code>BIT</code> before returning it to the database.
-     *
-     * @param x the value to pass to the database
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeByte(byte x) throws SQLException {
-        attribs.add(Byte.valueOf(x));
-    }
-
-    /**
-     * Writes a <code>short</code> in the Java programming language
-     * to this <code>SQLOutputImpl</code> object. The driver converts
-     * it to an SQL <code>SMALLINT</code> before returning it to the database.
-     *
-     * @param x the value to pass to the database
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeShort(short x) throws SQLException {
-        attribs.add(Short.valueOf(x));
-    }
-
-    /**
-     * Writes an <code>int</code> in the Java programming language
-     * to this <code>SQLOutputImpl</code> object. The driver converts
-     * it to an SQL <code>INTEGER</code> before returning it to the database.
-     *
-     * @param x the value to pass to the database
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeInt(int x) throws SQLException {
-        attribs.add(Integer.valueOf(x));
-    }
-
-    /**
-     * Writes a <code>long</code> in the Java programming language
-     * to this <code>SQLOutputImpl</code> object. The driver converts
-     * it to an SQL <code>BIGINT</code> before returning it to the database.
-     *
-     * @param x the value to pass to the database
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeLong(long x) throws SQLException {
-        attribs.add(Long.valueOf(x));
-    }
-
-    /**
-     * Writes a <code>float</code> in the Java programming language
-     * to this <code>SQLOutputImpl</code> object. The driver converts
-     * it to an SQL <code>REAL</code> before returning it to the database.
-     *
-     * @param x the value to pass to the database
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeFloat(float x) throws SQLException {
-        attribs.add(new Float(x));
-    }
-
-    /**
-     * Writes a <code>double</code> in the Java programming language
-     * to this <code>SQLOutputImpl</code> object. The driver converts
-     * it to an SQL <code>DOUBLE</code> before returning it to the database.
-     *
-     * @param x the value to pass to the database
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeDouble(double x) throws SQLException{
-        attribs.add(new Double(x));
-    }
-
-    /**
-     * Writes a <code>java.math.BigDecimal</code> object in the Java programming
-     * language to this <code>SQLOutputImpl</code> object. The driver converts
-     * it to an SQL <code>NUMERIC</code> before returning it to the database.
-     *
-     * @param x the value to pass to the database
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeBigDecimal(java.math.BigDecimal x) throws SQLException{
-        attribs.add(x);
-    }
-
-    /**
-     * Writes an array of <code>bytes</code> in the Java programming language
-     * to this <code>SQLOutputImpl</code> object. The driver converts
-     * it to an SQL <code>VARBINARY</code> or <code>LONGVARBINARY</code>
-     * before returning it to the database.
-     *
-     * @param x the value to pass to the database
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeBytes(byte[] x) throws SQLException {
-        attribs.add(x);
-    }
-
-    /**
-     * Writes a <code>java.sql.Date</code> object in the Java programming
-     * language to this <code>SQLOutputImpl</code> object. The driver converts
-     * it to an SQL <code>DATE</code> before returning it to the database.
-     *
-     * @param x the value to pass to the database
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeDate(java.sql.Date x) throws SQLException {
-        attribs.add(x);
-    }
-
-    /**
-     * Writes a <code>java.sql.Time</code> object in the Java programming
-     * language to this <code>SQLOutputImpl</code> object. The driver converts
-     * it to an SQL <code>TIME</code> before returning it to the database.
-     *
-     * @param x the value to pass to the database
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeTime(java.sql.Time x) throws SQLException {
-        attribs.add(x);
-    }
-
-    /**
-     * Writes a <code>java.sql.Timestamp</code> object in the Java programming
-     * language to this <code>SQLOutputImpl</code> object. The driver converts
-     * it to an SQL <code>TIMESTAMP</code> before returning it to the database.
-     *
-     * @param x the value to pass to the database
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeTimestamp(java.sql.Timestamp x) throws SQLException {
-        attribs.add(x);
-    }
-
-    /**
-     * Writes a stream of Unicode characters to this
-     * <code>SQLOutputImpl</code> object. The driver will do any necessary
-     * conversion from Unicode to the database <code>CHAR</code> format.
-     *
-     * @param x the value to pass to the database
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeCharacterStream(java.io.Reader x) throws SQLException {
-         BufferedReader bufReader = new BufferedReader(x);
-         try {
-             int i;
-             while( (i = bufReader.read()) != -1 ) {
-                char ch = (char)i;
-                StringBuffer strBuf = new StringBuffer();
-                strBuf.append(ch);
-
-                String str = new String(strBuf);
-                String strLine = bufReader.readLine();
-
-                writeString(str.concat(strLine));
-             }
-         } catch(IOException ioe) {
-
-         }
-    }
-
-    /**
-     * Writes a stream of ASCII characters to this
-     * <code>SQLOutputImpl</code> object. The driver will do any necessary
-     * conversion from ASCII to the database <code>CHAR</code> format.
-     *
-     * @param x the value to pass to the database
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeAsciiStream(java.io.InputStream x) throws SQLException {
-         BufferedReader bufReader = new BufferedReader(new InputStreamReader(x));
-         try {
-               int i;
-               while( (i=bufReader.read()) != -1 ) {
-                char ch = (char)i;
-
-                StringBuffer strBuf = new StringBuffer();
-                strBuf.append(ch);
-
-                String str = new String(strBuf);
-                String strLine = bufReader.readLine();
-
-                writeString(str.concat(strLine));
-            }
-          }catch(IOException ioe) {
-            throw new SQLException(ioe.getMessage());
-        }
-    }
-
-    /**
-     * Writes a stream of uninterpreted bytes to this <code>SQLOutputImpl</code>
-     * object.
-     *
-     * @param x the value to pass to the database
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeBinaryStream(java.io.InputStream x) throws SQLException {
-         BufferedReader bufReader = new BufferedReader(new InputStreamReader(x));
-         try {
-               int i;
-             while( (i=bufReader.read()) != -1 ) {
-                char ch = (char)i;
-
-                StringBuffer strBuf = new StringBuffer();
-                strBuf.append(ch);
-
-                String str = new String(strBuf);
-                String strLine = bufReader.readLine();
-
-                writeString(str.concat(strLine));
-             }
-        } catch(IOException ioe) {
-            throw new SQLException(ioe.getMessage());
-        }
-    }
-
-    //================================================================
-    // Methods for writing items of SQL user-defined types to the stream.
-    // These methods pass objects to the database as values of SQL
-    // Structured Types, Distinct Types, Constructed Types, and Locator
-    // Types.  They decompose the Java object(s) and write leaf data
-    // items using the methods above.
-    //================================================================
-
-    /**
-     * Writes to the stream the data contained in the given
-     * <code>SQLData</code> object.
-     * When the <code>SQLData</code> object is <code>null</code>, this
-     * method writes an SQL <code>NULL</code> to the stream.
-     * Otherwise, it calls the <code>SQLData.writeSQL</code>
-     * method of the given object, which
-     * writes the object's attributes to the stream.
-     * <P>
-     * The implementation of the method <code>SQLData.writeSQ</code>
-     * calls the appropriate <code>SQLOutputImpl.writeXXX</code> method(s)
-     * for writing each of the object's attributes in order.
-     * The attributes must be read from an <code>SQLInput</code>
-     * input stream and written to an <code>SQLOutputImpl</code>
-     * output stream in the same order in which they were
-     * listed in the SQL definition of the user-defined type.
-     *
-     * @param x the object representing data of an SQL structured or
-     *          distinct type
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeObject(SQLData x) throws SQLException {
-
-        /*
-         * Except for the types that are passed as objects
-         * this seems to be the only way for an object to
-         * get a null value for a field in a structure.
-         *
-         * Note: this means that the class defining SQLData
-         * will need to track if a field is SQL null for itself
-         */
-        if (x == null) {
-            attribs.add(x);
-            return;
-        }
-
-        /*
-         * We have to write out a SerialStruct that contains
-         * the name of this class otherwise we don't know
-         * what to re-instantiate during readSQL()
-         */
-        attribs.add(new SerialStruct((SQLData)x, map));
-    }
-
-    /**
-     * Writes a <code>Ref</code> object in the Java programming language
-     * to this <code>SQLOutputImpl</code> object.  The driver converts
-     * it to a serializable <code>SerialRef</code> SQL <code>REF</code> value
-     * before returning it to the database.
-     *
-     * @param x an object representing an SQL <code>REF</code> value
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeRef(Ref x) throws SQLException {
-        if (x == null) {
-            attribs.add(x);
-            return;
-        }
-        attribs.add(new SerialRef(x));
-    }
-
-    /**
-     * Writes a <code>Blob</code> object in the Java programming language
-     * to this <code>SQLOutputImpl</code> object.  The driver converts
-     * it to a serializable <code>SerialBlob</code> SQL <code>BLOB</code> value
-     * before returning it to the database.
-     *
-     * @param x an object representing an SQL <code>BLOB</code> value
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeBlob(Blob x) throws SQLException {
-        if (x == null) {
-            attribs.add(x);
-            return;
-        }
-        attribs.add(new SerialBlob(x));
-    }
-
-    /**
-     * Writes a <code>Clob</code> object in the Java programming language
-     * to this <code>SQLOutputImpl</code> object.  The driver converts
-     * it to a serializable <code>SerialClob</code> SQL <code>CLOB</code> value
-     * before returning it to the database.
-     *
-     * @param x an object representing an SQL <code>CLOB</code> value
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeClob(Clob x) throws SQLException {
-        if (x == null) {
-            attribs.add(x);
-            return;
-        }
-        attribs.add(new SerialClob(x));
-    }
-
-    /**
-     * Writes a <code>Struct</code> object in the Java
-     * programming language to this <code>SQLOutputImpl</code>
-     * object. The driver converts this value to an SQL structured type
-     * before returning it to the database.
-     * <P>
-     * This method should be used when an SQL structured type has been
-     * mapped to a <code>Struct</code> object in the Java programming
-     * language (the standard mapping).  The method
-     * <code>writeObject</code> should be used if an SQL structured type
-     * has been custom mapped to a class in the Java programming language.
-     *
-     * @param x an object representing the attributes of an SQL structured type
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeStruct(Struct x) throws SQLException {
-        SerialStruct s = new SerialStruct(x,map);;
-        attribs.add(s);
-    }
-
-    /**
-     * Writes an <code>Array</code> object in the Java
-     * programming language to this <code>SQLOutputImpl</code>
-     * object. The driver converts this value to a serializable
-     * <code>SerialArray</code> SQL <code>ARRAY</code>
-     * value before returning it to the database.
-     *
-     * @param x an object representing an SQL <code>ARRAY</code> value
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeArray(Array x) throws SQLException {
-        if (x == null) {
-            attribs.add(x);
-            return;
-        }
-        attribs.add(new SerialArray(x, map));
-    }
-
-    /**
-     * Writes an <code>java.sql.Type.DATALINK</code> object in the Java
-     * programming language to this <code>SQLOutputImpl</code> object. The
-     * driver converts this value to a serializable <code>SerialDatalink</code>
-     * SQL <code>DATALINK</code> value before return it to the database.
-     *
-     * @param url an object representing a SQL <code>DATALINK</code> value
-     * @throws SQLException if the <code>SQLOutputImpl</code> object is in
-     *        use by a <code>SQLData</code> object attempting to write the attribute
-     *        values of a UDT to the database.
-     */
-    public void writeURL(java.net.URL url) throws SQLException {
-        if (url == null) {
-            attribs.add(url);
-            return;
-        }
-        attribs.add(new SerialDatalink(url));
-
-    }
-
-
-    /**
-   * Writes the next attribute to the stream as a <code>String</code>
-   * in the Java programming language. The driver converts this to a
-   * SQL <code>NCHAR</code> or
-   * <code>NVARCHAR</code> or <code>LONGNVARCHAR</code> value
-   * (depending on the argument's
-   * size relative to the driver's limits on <code>NVARCHAR</code> values)
-   * when it sends it to the stream.
-   *
-   * @param x the value to pass to the database
-   * @exception SQLException if a database access error occurs
-   * @since 1.6
-   */
-   public void writeNString(String x) throws SQLException {
-        throw new UnsupportedOperationException("Operation not supported");
-    }
-
-  /**
-   * Writes an SQL <code>NCLOB</code> value to the stream.
-   *
-   * @param x a <code>NClob</code> object representing data of an SQL
-   * <code>NCLOB</code> value
-   *
-   * @exception SQLException if a database access error occurs
-   * @since 1.6
-   */
-   public void writeNClob(NClob x) throws SQLException {
-        throw new UnsupportedOperationException("Operation not supported");
-    }
-
-
-  /**
-   * Writes an SQL <code>ROWID</code> value to the stream.
-   *
-   * @param x a <code>RowId</code> object representing data of an SQL
-   * <code>ROWID</code> value
-   *
-   * @exception SQLException if a database access error occurs
-   * @since 1.6
-   */
-   public void writeRowId(RowId x) throws SQLException {
-        throw new UnsupportedOperationException("Operation not supported");
-    }
-
-
-  /**
-   * Writes an SQL <code>XML</code> value to the stream.
-   *
-   * @param x a <code>SQLXML</code> object representing data of an SQL
-   * <code>XML</code> value
-   *
-   * @exception SQLException if a database access error occurs
-   * @since 1.6
-   */
-   public void writeSQLXML(SQLXML x) throws SQLException {
-        throw new UnsupportedOperationException("Operation not supported");
-    }
-
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/serial/SerialArray.java b/ojluni/src/main/java/javax/sql/rowset/serial/SerialArray.java
deleted file mode 100755
index 17856e1..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/serial/SerialArray.java
+++ /dev/null
@@ -1,535 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.
- */
-
-package javax.sql.rowset.serial;
-
-import java.sql.*;
-import java.io.*;
-import java.util.Map;
-import java.net.URL;
-
-
-/**
- * A serialized version of an <code>Array</code>
- * object, which is the mapping in the Java programming language of an SQL
- * <code>ARRAY</code> value.
- * <P>
- * The <code>SerialArray</code> class provides a constructor for creating
- * a <code>SerialArray</code> instance from an <code>Array</code> object,
- * methods for getting the base type and the SQL name for the base type, and
- * methods for copying all or part of a <code>SerialArray</code> object.
- * <P>
- * Note: In order for this class to function correctly, a connection to the
- * data source
- * must be available in order for the SQL <code>Array</code> object to be
- * materialized (have all of its elements brought to the client server)
- * if necessary. At this time, logical pointers to the data in the data source,
- * such as locators, are not currently supported.
- */
-public class SerialArray implements Array, Serializable, Cloneable {
-
-        /**
-         * A serialized array in which each element is an <code>Object</code>
-         * in the Java programming language that represents an element
-         * in the SQL <code>ARRAY</code> value.
-         * @serial
-         */
-    private Object[] elements;
-
-        /**
-         * The SQL type of the elements in this <code>SerialArray</code> object.  The
-         * type is expressed as one of the constants from the class
-         * <code>java.sql.Types</code>.
-         * @serial
-         */
-    private int baseType;
-
-        /**
-         * The type name used by the DBMS for the elements in the SQL <code>ARRAY</code>
-         * value that this <code>SerialArray</code> object represents.
-         * @serial
-         */
-    private String baseTypeName;
-
-        /**
-         * The number of elements in this <code>SerialArray</code> object, which
-         * is also the number of elements in the SQL <code>ARRAY</code> value
-         * that this <code>SerialArray</code> object represents.
-         * @serial
-         */
-    private int len;
-
-    /**
-     * Constructs a new <code>SerialArray</code> object from the given
-     * <code>Array</code> object, using the given type map for the custom
-     * mapping of each element when the elements are SQL UDTs.
-     * <P>
-     * This method does custom mapping if the array elements are a UDT
-     * and the given type map has an entry for that UDT.
-     * Custom mapping is recursive,
-     * meaning that if, for instance, an element of an SQL structured type
-     * is an SQL structured type that itself has an element that is an SQL
-     * structured type, each structured type that has a custom mapping will be
-     * mapped according to the given type map.
-     * <P>
-     * The new <code>SerialArray</code>
-     * object contains the same elements as the <code>Array</code> object
-     * from which it is built, except when the base type is the SQL type
-     * <code>STRUCT</code>, <code>ARRAY</code>, <code>BLOB</code>,
-     * <code>CLOB</code>, <code>DATALINK</code> or <code>JAVA_OBJECT</code>.
-     * In this case, each element in the new
-     * <code>SerialArray</code> object is the appropriate serialized form,
-     * that is, a <code>SerialStruct</code>, <code>SerialArray</code>,
-     * <code>SerialBlob</code>, <code>SerialClob</code>,
-     * <code>SerialDatalink</code>, or <code>SerialJavaObject</code> object.
-     * <P>
-     * Note: (1) The <code>Array</code> object from which a <code>SerialArray</code>
-     * object is created must have materialized the SQL <code>ARRAY</code> value's
-     * data on the client before it is passed to the constructor.  Otherwise,
-     * the new <code>SerialArray</code> object will contain no data.
-     * <p>
-     * Note: (2) If the <code>Array</code> contains <code>java.sql.Types.JAVA_OBJECT</code>
-     * types, the <code>SerialJavaObject</code> constructor is called where checks
-     * are made to ensure this object is serializable.
-     * <p>
-     * Note: (3) The <code>Array</code> object supplied to this constructor cannot
-     * return <code>null</code> for any <code>Array.getArray()</code> methods.
-     * <code>SerialArray</code> cannot serialize null array values.
-     *
-     *
-     * @param array the <code>Array</code> object to be serialized
-     * @param map a <code>java.util.Map</code> object in which
-     *        each entry consists of 1) a <code>String</code> object
-     *        giving the fully qualified name of a UDT (an SQL structured type or
-     *        distinct type) and 2) the
-     *        <code>Class</code> object for the <code>SQLData</code> implementation
-     *        that defines how the UDT is to be mapped. The <i>map</i>
-     *        parameter does not have any effect for <code>Blob</code>,
-     *        <code>Clob</code>, <code>DATALINK</code>, or
-     *        <code>JAVA_OBJECT</code> types.
-     * @throws SerialException if an error occurs serializing the
-     *        <code>Array</code> object
-     * @throws SQLException if a database access error occurs or if the
-     *        <i>array</i> or the <i>map</i> values are <code>null</code>
-     */
-     public SerialArray(Array array, Map<String,Class<?>> map)
-         throws SerialException, SQLException
-     {
-
-        if ((array == null) || (map == null)) {
-            throw new SQLException("Cannot instantiate a SerialArray " +
-            "object with null parameters");
-        }
-
-        if ((elements = (Object[])array.getArray()) == null) {
-             throw new SQLException("Invalid Array object. Calls to Array.getArray() " +
-                 "return null value which cannot be serialized");
-         }
-
-        elements = (Object[])array.getArray(map);
-        baseType = array.getBaseType();
-        baseTypeName = array.getBaseTypeName();
-        len = elements.length;
-
-        switch (baseType) {
-            case java.sql.Types.STRUCT:
-                for (int i = 0; i < len; i++) {
-                    elements[i] = new SerialStruct((Struct)elements[i], map);
-                }
-            break;
-
-            case java.sql.Types.ARRAY:
-                for (int i = 0; i < len; i++) {
-                    elements[i] = new SerialArray((Array)elements[i], map);
-                }
-            break;
-
-            case java.sql.Types.BLOB:
-            for (int i = 0; i < len; i++) {
-                elements[i] = new SerialBlob((Blob)elements[i]);
-            }
-            break;
-
-            case java.sql.Types.CLOB:
-                for (int i = 0; i < len; i++) {
-                    elements[i] = new SerialClob((Clob)elements[i]);
-                }
-            break;
-
-            case java.sql.Types.DATALINK:
-                for (int i = 0; i < len; i++) {
-                    elements[i] = new SerialDatalink((URL)elements[i]);
-                }
-            break;
-
-            case java.sql.Types.JAVA_OBJECT:
-                for (int i = 0; i < len; i++) {
-                elements[i] = new SerialJavaObject((Object)elements[i]);
-            }
-        default:
-            ;
-        }
-  }
-
-    /**
-     * This method frees the <code>Array</code> object and releases the resources that
-     * it holds. The object is invalid once the <code>free</code>
-     * method is called.
-     *<p>
-     * After <code>free</code> has been called, any attempt to invoke a
-     * method other than <code>free</code> will result in a <code>SQLException</code>
-     * being thrown.  If <code>free</code> is called multiple times, the subsequent
-     * calls to <code>free</code> are treated as a no-op.
-     *<p>
-     *
-     * @throws SQLException if an error occurs releasing
-     * the Array's resources
-     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
-     * this method
-     * @since 1.6
-     */
-    public void free() throws SQLException {
-         throw new SQLFeatureNotSupportedException("Feature not supported");
-    }
-
-    /**
-     * Constructs a new <code>SerialArray</code> object from the given
-     * <code>Array</code> object.
-     * <P>
-     * This constructor does not do custom mapping.  If the base type of the array
-     * is an SQL structured type and custom mapping is desired, the constructor
-     * <code>SerialArray(Array array, Map map)</code> should be used.
-     * <P>
-     * The new <code>SerialArray</code>
-     * object contains the same elements as the <code>Array</code> object
-     * from which it is built, except when the base type is the SQL type
-     * <code>BLOB</code>,
-     * <code>CLOB</code>, <code>DATALINK</code> or <code>JAVA_OBJECT</code>.
-     * In this case, each element in the new
-     * <code>SerialArray</code> object is the appropriate serialized form,
-     * that is, a <code>SerialBlob</code>, <code>SerialClob</code>,
-     * <code>SerialDatalink</code>, or <code>SerialJavaObject</code> object.
-     * <P>
-     * Note: (1) The <code>Array</code> object from which a <code>SerialArray</code>
-     * object is created must have materialized the SQL <code>ARRAY</code> value's
-     * data on the client before it is passed to the constructor.  Otherwise,
-     * the new <code>SerialArray</code> object will contain no data.
-     * <p>
-     * Note: (2) The <code>Array</code> object supplied to this constructor cannot
-     * return <code>null</code> for any <code>Array.getArray()</code> methods.
-     * <code>SerialArray</code> cannot serialize <code>null</code> array values.
-     *
-     * @param array the <code>Array</code> object to be serialized
-     * @throws SerialException if an error occurs serializing the
-     *     <code>Array</code> object
-     * @throws SQLException if a database access error occurs or the
-     *     <i>array</i> parameter is <code>null</code>.
-     */
-     public SerialArray(Array array) throws SerialException, SQLException {
-         if (array == null) {
-             throw new SQLException("Cannot instantiate a SerialArray " +
-                 "object with a null Array object");
-         }
-
-         if ((elements = (Object[])array.getArray()) == null) {
-             throw new SQLException("Invalid Array object. Calls to Array.getArray() " +
-                 "return null value which cannot be serialized");
-         }
-
-         //elements = (Object[])array.getArray();
-         baseType = array.getBaseType();
-         baseTypeName = array.getBaseTypeName();
-         len = elements.length;
-
-        switch (baseType) {
-
-        case java.sql.Types.BLOB:
-            for (int i = 0; i < len; i++) {
-                elements[i] = new SerialBlob((Blob)elements[i]);
-            }
-            break;
-
-        case java.sql.Types.CLOB:
-            for (int i = 0; i < len; i++) {
-                elements[i] = new SerialClob((Clob)elements[i]);
-            }
-            break;
-
-        case java.sql.Types.DATALINK:
-            for (int i = 0; i < len; i++) {
-                elements[i] = new SerialDatalink((URL)elements[i]);
-            }
-            break;
-
-        case java.sql.Types.JAVA_OBJECT:
-            for (int i = 0; i < len; i++) {
-                elements[i] = new SerialJavaObject((Object)elements[i]);
-            }
-
-        default:
-            ;
-        }
-
-
-    }
-
-        /**
-         * Returns a new array that is a copy of this <code>SerialArray</code>
-         * object.
-         *
-         * @return a copy of this <code>SerialArray</code> object as an
-         *         <code>Object</code> in the Java programming language
-         * @throws SerialException if an error occurs retrieving a copy of
-     *         this <code>SerialArray</code> object
-         */
-    public Object getArray() throws SerialException {
-        Object dst = new Object[len];
-        System.arraycopy((Object)elements, 0, dst, 0, len);
-        return dst;
-    }
-
- //[if an error occurstype map used??]
-        /**
-         * Returns a new array that is a copy of this <code>SerialArray</code>
-         * object, using the given type map for the custom
-         * mapping of each element when the elements are SQL UDTs.
-         * <P>
-         * This method does custom mapping if the array elements are a UDT
-         * and the given type map has an entry for that UDT.
-     * Custom mapping is recursive,
-         * meaning that if, for instance, an element of an SQL structured type
-         * is an SQL structured type that itself has an element that is an SQL
-         * structured type, each structured type that has a custom mapping will be
-         * mapped according to the given type map.
-         *
-     * @param map a <code>java.util.Map</code> object in which
-     *        each entry consists of 1) a <code>String</code> object
-     *        giving the fully qualified name of a UDT and 2) the
-     *        <code>Class</code> object for the <code>SQLData</code> implementation
-     *        that defines how the UDT is to be mapped
-         * @return a copy of this <code>SerialArray</code> object as an
-         *         <code>Object</code> in the Java programming language
-         * @throws SerialException if an error occurs
-         */
-    public Object getArray(Map<String, Class<?>> map) throws SerialException {
-        Object dst[] = new Object[len];
-        System.arraycopy((Object)elements, 0, dst, 0, len);
-        return dst;
-    }
-
-        /**
-         * Returns a new array that is a copy of a slice
-         * of this <code>SerialArray</code> object, starting with the
-         * element at the given index and containing the given number
-         * of consecutive elements.
-         *
-         * @param index the index into this <code>SerialArray</code> object
-         *              of the first element to be copied;
-         *              the index of the first element is <code>0</code>
-         * @param count the number of consecutive elements to be copied, starting
-         *              at the given index
-         * @return a copy of the designated elements in this <code>SerialArray</code>
-         *         object as an <code>Object</code> in the Java programming language
-         * @throws SerialException if an error occurs
-         */
-    public Object getArray(long index, int count) throws SerialException {
-        Object dst = new Object[count];
-        System.arraycopy((Object)elements, (int)index, dst, 0, count);
-        return dst;
-    }
-
-        /**
-         * Returns a new array that is a copy of a slice
-         * of this <code>SerialArray</code> object, starting with the
-         * element at the given index and containing the given number
-         * of consecutive elements.
-         * <P>
-         * This method does custom mapping if the array elements are a UDT
-         * and the given type map has an entry for that UDT.
-     * Custom mapping is recursive,
-         * meaning that if, for instance, an element of an SQL structured type
-         * is an SQL structured type that itself has an element that is an SQL
-         * structured type, each structured type that has a custom mapping will be
-         * mapped according to the given type map.
-         *
-         * @param index the index into this <code>SerialArray</code> object
-         *              of the first element to be copied; the index of the
-         *              first element in the array is <code>0</code>
-         * @param count the number of consecutive elements to be copied, starting
-         *              at the given index
-     * @param map a <code>java.util.Map</code> object in which
-     *        each entry consists of 1) a <code>String</code> object
-     *        giving the fully qualified name of a UDT and 2) the
-     *        <code>Class</code> object for the <code>SQLData</code> implementation
-     *        that defines how the UDT is to be mapped
-         * @return a copy of the designated elements in this <code>SerialArray</code>
-         *         object as an <code>Object</code> in the Java programming language
-         * @throws SerialException if an error occurs
-         */
-    public Object getArray(long index, int count, Map<String,Class<?>> map)
-        throws SerialException
-    {
-        Object dst = new Object[count];
-        System.arraycopy((Object)elements, (int)index, dst, 0, count);
-        return dst;
-    }
-
-        /**
-         * Retrieves the SQL type of the elements in this <code>SerialArray</code>
-         * object.  The <code>int</code> returned is one of the constants in the class
-         * <code>java.sql.Types</code>.
-         *
-         * @return one of the constants in <code>java.sql.Types</code>, indicating
-         *         the SQL type of the elements in this <code>SerialArray</code> object
-         * @throws SerialException if an error occurs
-         */
-    public int getBaseType() throws SerialException {
-        return baseType;
-    }
-
-        /**
-         * Retrieves the DBMS-specific type name for the elements in this
-         * <code>SerialArray</code> object.
-         *
-         * @return the SQL type name used by the DBMS for the base type of this
-     *         <code>SerialArray</code> object
-         * @throws SerialException if an error occurs
-         */
-    public String getBaseTypeName() throws SerialException {
-        return baseTypeName;
-    }
-
-    /**
-     * Retrieves a <code>ResultSet</code> object holding the elements of
-     * the subarray that starts at
-     * index <i>index</i> and contains up to <i>count</i> successive elements.
-     * This method uses the connection's type map to map the elements of
-     * the array if the map contains
-     * an entry for the base type. Otherwise, the standard mapping is used.
-     *
-     * @param index the index into this <code>SerialArray</code> object
-     *         of the first element to be copied; the index of the
-     *         first element in the array is <code>0</code>
-     * @param count the number of consecutive elements to be copied, starting
-     *         at the given index
-     * @return a <code>ResultSet</code> object containing the designated
-     *         elements in this <code>SerialArray</code> object, with a
-     *         separate row for each element
-     * @throws SerialException, which in turn throws an
-     *         <code>UnsupportedOperationException</code>, if this method is called
-     */
-    public ResultSet getResultSet(long index, int count) throws SerialException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     *
-     * Retrieves a <code>ResultSet</code> object that contains all of
-     * the elements of the SQL <code>ARRAY</code>
-     * value represented by this <code>SerialArray</code> object. This method uses
-     * the specified map for type map customizations unless the base type of the
-     * array does not match a user-defined type (UDT) in <i>map</i>, in
-     * which case it uses the
-     * standard mapping. This version of the method <code>getResultSet</code>
-     * uses either the given type map or the standard mapping; it never uses the
-     * type map associated with the connection.
-     *
-     * @param map a <code>java.util.Map</code> object in which
-     *        each entry consists of 1) a <code>String</code> object
-     *        giving the fully qualified name of a UDT and 2) the
-     *        <code>Class</code> object for the <code>SQLData</code> implementation
-     *        that defines how the UDT is to be mapped
-     * @return a <code>ResultSet</code> object containing all of the
-     *         elements in this <code>SerialArray</code> object, with a
-     *         separate row for each element
-     * @throws SerialException, which in turn throws an
-     *         <code>UnsupportedOperationException</code>, if this method is called
-     */
-    public ResultSet getResultSet(Map<String, Class<?>> map)
-        throws SerialException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Retrieves a <code>ResultSet</code> object that contains all of
-     * the elements in the <code>ARRAY</code> value that this
-     * <code>SerialArray</code> object represents.
-     * If appropriate, the elements of the array are mapped using the connection's
-     * type map; otherwise, the standard mapping is used.
-     *
-     * @return a <code>ResultSet</code> object containing all of the
-     *         elements in this <code>SerialArray</code> object, with a
-     *         separate row for each element
-     * @throws SerialException if called, which in turn throws an
-     *         <code>UnsupportedOperationException</code>, if this method is called
-     */
-    public ResultSet getResultSet() throws SerialException {
-        throw new UnsupportedOperationException();
-    }
-
-
-    /**
-     * Retrieves a result set holding the elements of the subarray that starts at
-     * Retrieves a <code>ResultSet</code> object that contains a subarray of the
-     * elements in this <code>SerialArray</code> object, starting at
-     * index <i>index</i> and containing up to <i>count</i> successive
-     * elements. This method uses
-     * the specified map for type map customizations unless the base type of the
-     * array does not match a user-defined type (UDT) in <i>map</i>, in
-     * which case it uses the
-     * standard mapping. This version of the method <code>getResultSet</code> uses
-     * either the given type map or the standard mapping; it never uses the type
-     * map associated with the connection.
-     *
-     * @param index the index into this <code>SerialArray</code> object
-     *              of the first element to be copied; the index of the
-     *              first element in the array is <code>0</code>
-     * @param count the number of consecutive elements to be copied, starting
-     *              at the given index
-     * @param map a <code>java.util.Map</code> object in which
-     *        each entry consists of 1) a <code>String</code> object
-     *        giving the fully qualified name of a UDT and 2) the
-     *        <code>Class</code> object for the <code>SQLData</code> implementation
-     *        that defines how the UDT is to be mapped
-     * @return a <code>ResultSet</code> object containing the designated
-     *         elements in this <code>SerialArray</code> object, with a
-     *         separate row for each element
-     * @throws SerialException if called, which in turn throws an
-     *         <code>UnsupportedOperationException</code>
-     */
-    public ResultSet getResultSet(long index, int count,
-                                  Map<String,Class<?>> map)
-        throws SerialException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * The identifier that assists in the serialization of this <code>SerialArray</code>
-     * object.
-     */
-    static final long serialVersionUID = -8466174297270688520L;
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/serial/SerialBlob.java b/ojluni/src/main/java/javax/sql/rowset/serial/SerialBlob.java
deleted file mode 100755
index aed1124..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/serial/SerialBlob.java
+++ /dev/null
@@ -1,457 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-package javax.sql.rowset.serial;
-
-import java.sql.*;
-import java.io.*;
-import java.lang.reflect.*;
-
-
-/**
- * A serialized mapping in the Java programming language of an SQL
- * <code>BLOB</code> value.
- * <P>
- * The <code>SerialBlob</code> class provides a constructor for creating
- * an instance from a <code>Blob</code> object.  Note that the
- * <code>Blob</code>
- * object should have brought the SQL <code>BLOB</code> value's data over
- * to the client before a <code>SerialBlob</code> object
- * is constructed from it.  The data of an SQL <code>BLOB</code> value can
- * be materialized on the client as an array of bytes (using the method
- * <code>Blob.getBytes</code>) or as a stream of uninterpreted bytes
- * (using the method <code>Blob.getBinaryStream</code>).
- * <P>
- * <code>SerialBlob</code> methods make it possible to make a copy of a
- * <code>SerialBlob</code> object as an array of bytes or as a stream.
- * They also make it possible to locate a given pattern of bytes or a
- * <code>Blob</code> object within a <code>SerialBlob</code> object
- * and to update or truncate a <code>Blob</code> object.
- *
- * @author Jonathan Bruce
- */
-public class SerialBlob implements Blob, Serializable, Cloneable {
-
-    /**
-     * A serialized array of uninterpreted bytes representing the
-     * value of this <code>SerialBlob</code> object.
-     * @serial
-     */
-    private byte buf[];
-
-    /**
-     * The internal representation of the <code>Blob</code> object on which this
-     * <code>SerialBlob</code> object is based.
-     */
-    private Blob blob;
-
-    /**
-     * The number of bytes in this <code>SerialBlob</code> object's
-     * array of bytes.
-     * @serial
-     */
-    private long len;
-
-    /**
-     * The orginal number of bytes in this <code>SerialBlob</code> object's
-     * array of bytes when it was first established.
-     * @serial
-     */
-    private long origLen;
-
-    /**
-     * Constructs a <code>SerialBlob</code> object that is a serialized version of
-     * the given <code>byte</code> array.
-     * <p>
-     * The new <code>SerialBlob</code> object is initialized with the data from the
-     * <code>byte</code> array, thus allowing disconnected <code>RowSet</code>
-     * objects to establish serialized <code>Blob</code> objects without
-     * touching the data source.
-     *
-     * @param b the <code>byte</code> array containing the data for the
-     *        <code>Blob</code> object to be serialized
-     * @throws SerialException if an error occurs during serialization
-     * @throws SQLException if a SQL errors occurs
-     */
-    public SerialBlob(byte[] b) throws SerialException, SQLException {
-
-        len = b.length;
-        buf = new byte[(int)len];
-        for(int i = 0; i < len; i++) {
-           buf[i] = b[i];
-        }
-        origLen = len;
-    }
-
-
-    /**
-     * Constructs a <code>SerialBlob</code> object that is a serialized
-     * version of the given <code>Blob</code> object.
-     * <P>
-     * The new <code>SerialBlob</code> object is initialized with the
-     * data from the <code>Blob</code> object; therefore, the
-     * <code>Blob</code> object should have previously brought the
-     * SQL <code>BLOB</code> value's data over to the client from
-     * the database. Otherwise, the new <code>SerialBlob</code> object
-     * will contain no data.
-     *
-     * @param blob the <code>Blob</code> object from which this
-     *     <code>SerialBlob</code> object is to be constructed;
-     *     cannot be null.
-     * @throws SerialException if an error occurs during serialization
-     * @throws SQLException if the <code>Blob</code> passed to this
-     *     to this constructor is a <code>null</code>.
-     * @see java.sql.Blob
-     */
-    public SerialBlob (Blob blob) throws SerialException, SQLException {
-
-        if (blob == null) {
-            throw new SQLException("Cannot instantiate a SerialBlob " +
-                 "object with a null Blob object");
-        }
-
-        len = blob.length();
-        buf = blob.getBytes(1, (int)len );
-        this.blob = blob;
-
-         //if ( len < 10240000)
-         // len = 10240000;
-        origLen = len;
-    }
-
-    /**
-     * Copies the specified number of bytes, starting at the given
-     * position, from this <code>SerialBlob</code> object to
-     * another array of bytes.
-     * <P>
-     * Note that if the given number of bytes to be copied is larger than
-     * the length of this <code>SerialBlob</code> object's array of
-     * bytes, the given number will be shortened to the array's length.
-     *
-     * @param pos the ordinal position of the first byte in this
-     *            <code>SerialBlob</code> object to be copied;
-     *            numbering starts at <code>1</code>; must not be less
-     *            than <code>1</code> and must be less than or equal
-     *            to the length of this <code>SerialBlob</code> object
-     * @param length the number of bytes to be copied
-     * @return an array of bytes that is a copy of a region of this
-     *         <code>SerialBlob</code> object, starting at the given
-     *         position and containing the given number of consecutive bytes
-     * @throws SerialException if the given starting position is out of bounds
-     */
-    public byte[] getBytes(long pos, int length) throws SerialException {
-        if (length > len) {
-            length = (int)len;
-        }
-
-        if (pos < 1 || len - pos < 0 ) {
-            throw new SerialException("Invalid arguments: position cannot be "
-                    + "less than 1 or greater than the length of the SerialBlob");
-        }
-
-        pos--; // correct pos to array index
-
-        byte[] b = new byte[length];
-
-        for (int i = 0; i < length; i++) {
-            b[i] = this.buf[(int)pos];
-            pos++;
-        }
-        return b;
-    }
-
-    /**
-     * Retrieves the number of bytes in this <code>SerialBlob</code>
-     * object's array of bytes.
-     *
-     * @return a <code>long</code> indicating the length in bytes of this
-     *         <code>SerialBlob</code> object's array of bytes
-     * @throws SerialException if an error occurs
-     */
-    public long length() throws SerialException {
-        return len;
-    }
-
-    /**
-     * Returns this <code>SerialBlob</code> object as an input stream.
-     * Unlike the related method, <code>setBinaryStream</code>,
-     * a stream is produced regardless of whether the <code>SerialBlob</code>
-     * was created with a <code>Blob</code> object or a <code>byte</code> array.
-     *
-     * @return a <code>java.io.InputStream</code> object that contains
-     *         this <code>SerialBlob</code> object's array of bytes
-     * @throws SerialException if an error occurs
-     * @see #setBinaryStream
-     */
-    public java.io.InputStream getBinaryStream() throws SerialException {
-         InputStream stream = new ByteArrayInputStream(buf);
-         return (java.io.InputStream)stream;
-    }
-
-    /**
-     * Returns the position in this <code>SerialBlob</code> object where
-     * the given pattern of bytes begins, starting the search at the
-     * specified position.
-     *
-     * @param pattern the pattern of bytes for which to search
-     * @param start the position of the byte in this
-     *              <code>SerialBlob</code> object from which to begin
-     *              the search; the first position is <code>1</code>;
-     *              must not be less than <code>1</code> nor greater than
-     *              the length of this <code>SerialBlob</code> object
-     * @return the position in this <code>SerialBlob</code> object
-     *         where the given pattern begins, starting at the specified
-     *         position; <code>-1</code> if the pattern is not found
-     *         or the given starting position is out of bounds; position
-     *         numbering for the return value starts at <code>1</code>
-     * @throws SerialException if an error occurs when serializing the blob
-     * @throws SQLException if there is an error accessing the <code>BLOB</code>
-     *         value from the database
-     */
-    public long position(byte[] pattern, long start)
-                throws SerialException, SQLException {
-        if (start < 1 || start > len) {
-            return -1;
-        }
-
-        int pos = (int)start-1; // internally Blobs are stored as arrays.
-        int i = 0;
-        long patlen = pattern.length;
-
-        while (pos < len) {
-            if (pattern[i] == buf[pos]) {
-                if (i + 1 == patlen) {
-                    return (pos + 1) - (patlen - 1);
-                }
-                i++; pos++; // increment pos, and i
-            } else if (pattern[i] != buf[pos]) {
-                pos++; // increment pos only
-            }
-        }
-        return -1; // not found
-    }
-
-    /**
-     * Returns the position in this <code>SerialBlob</code> object where
-     * the given <code>Blob</code> object begins, starting the search at the
-     * specified position.
-     *
-     * @param pattern the <code>Blob</code> object for which to search;
-     * @param start the position of the byte in this
-     *              <code>SerialBlob</code> object from which to begin
-     *              the search; the first position is <code>1</code>;
-     *              must not be less than <code>1</code> nor greater than
-     *              the length of this <code>SerialBlob</code> object
-     * @return the position in this <code>SerialBlob</code> object
-     *         where the given <code>Blob</code> object begins, starting
-     *         at the specified position; <code>-1</code> if the pattern is
-     *         not found or the given starting position is out of bounds;
-     *         position numbering for the return value starts at <code>1</code>
-     * @throws SerialException if an error occurs when serializing the blob
-     * @throws SQLException if there is an error accessing the <code>BLOB</code>
-     *         value from the database
-     */
-    public long position(Blob pattern, long start)
-       throws SerialException, SQLException {
-        return position(pattern.getBytes(1, (int)(pattern.length())), start);
-    }
-
-    /**
-     * Writes the given array of bytes to the <code>BLOB</code> value that
-     * this <code>Blob</code> object represents, starting at position
-     * <code>pos</code>, and returns the number of bytes written.
-     *
-     * @param pos the position in the SQL <code>BLOB</code> value at which
-     *     to start writing. The first position is <code>1</code>;
-     *     must not be less than <code>1</code> nor greater than
-     *     the length of this <code>SerialBlob</code> object.
-     * @param bytes the array of bytes to be written to the <code>BLOB</code>
-     *        value that this <code>Blob</code> object represents
-     * @return the number of bytes written
-     * @throws SerialException if there is an error accessing the
-     *     <code>BLOB</code> value; or if an invalid position is set; if an
-     *     invalid offset value is set
-     * @throws SQLException if there is an error accessing the <code>BLOB</code>
-     *         value from the database
-     * @see #getBytes
-     */
-    public int setBytes(long pos, byte[] bytes)
-        throws SerialException, SQLException {
-        return (setBytes(pos, bytes, 0, bytes.length));
-    }
-
-    /**
-     * Writes all or part of the given <code>byte</code> array to the
-     * <code>BLOB</code> value that this <code>Blob</code> object represents
-     * and returns the number of bytes written.
-     * Writing starts at position <code>pos</code> in the <code>BLOB</code>
-     * value; <i>len</i> bytes from the given byte array are written.
-     *
-     * @param pos the position in the <code>BLOB</code> object at which
-     *     to start writing. The first position is <code>1</code>;
-     *     must not be less than <code>1</code> nor greater than
-     *     the length of this <code>SerialBlob</code> object.
-     * @param bytes the array of bytes to be written to the <code>BLOB</code>
-     *     value
-     * @param offset the offset in the <code>byte</code> array at which
-     *     to start reading the bytes. The first offset position is
-     *     <code>0</code>; must not be less than <code>0</code> nor greater
-     *     than the length of the <code>byte</code> array
-     * @param length the number of bytes to be written to the
-     *     <code>BLOB</code> value from the array of bytes <i>bytes</i>.
-     *
-     * @return the number of bytes written
-     * @throws SerialException if there is an error accessing the
-     *     <code>BLOB</code> value; if an invalid position is set; if an
-     *     invalid offset value is set; if number of bytes to be written
-     *     is greater than the <code>SerialBlob</code> length; or the combined
-     *     values of the length and offset is greater than the Blob buffer
-     * @throws SQLException if there is an error accessing the <code>BLOB</code>
-     *         value from the database.
-     * @see #getBytes
-     */
-    public int setBytes(long pos, byte[] bytes, int offset, int length)
-        throws SerialException, SQLException {
-
-        if (offset < 0 || offset > bytes.length) {
-            throw new SerialException("Invalid offset in byte array set");
-        }
-
-        if (pos < 1 || pos > this.length()) {
-            throw new SerialException("Invalid position in BLOB object set");
-        }
-
-        if ((long)(length) > origLen) {
-            throw new SerialException("Buffer is not sufficient to hold the value");
-        }
-
-        if ((length + offset) > bytes.length) {
-            throw new SerialException("Invalid OffSet. Cannot have combined offset " +
-                "and length that is greater that the Blob buffer");
-        }
-
-        int i = 0;
-        pos--; // correct to array indexing
-        while ( i < length || (offset + i +1) < (bytes.length-offset) ) {
-            this.buf[(int)pos + i] = bytes[offset + i ];
-            i++;
-        }
-        return i;
-    }
-
-    /**
-     * Retrieves a stream that can be used to write to the <code>BLOB</code>
-     * value that this <code>Blob</code> object represents.  The stream begins
-     * at position <code>pos</code>. This method forwards the
-     * <code>setBinaryStream()</code> call to the underlying <code>Blob</code> in
-     * the event that this <code>SerialBlob</code> object is instantiated with a
-     * <code>Blob</code>. If this <code>SerialBlob</code> is instantiated with
-     * a <code>byte</code> array, a <code>SerialException</code> is thrown.
-     *
-     * @param pos the position in the <code>BLOB</code> value at which
-     *        to start writing
-     * @return a <code>java.io.OutputStream</code> object to which data can
-     *         be written
-     * @throws SQLException if there is an error accessing the
-     *            <code>BLOB</code> value
-     * @throws SerialException if the SerialBlob in not instantiated with a
-     *     <code>Blob</code> object that supports <code>setBinaryStream()</code>
-     * @see #getBinaryStream
-     */
-    public java.io.OutputStream setBinaryStream(long pos)
-        throws SerialException, SQLException {
-        if (this.blob.setBinaryStream(pos) != null) {
-            return this.blob.setBinaryStream(pos);
-        } else {
-            throw new SerialException("Unsupported operation. SerialBlob cannot " +
-                "return a writable binary stream, unless instantiated with a Blob object " +
-                "that provides a setBinaryStream() implementation");
-        }
-    }
-
-    /**
-     * Truncates the <code>BLOB</code> value that this <code>Blob</code>
-     * object represents to be <code>len</code> bytes in length.
-     *
-     * @param length the length, in bytes, to which the <code>BLOB</code>
-     *        value that this <code>Blob</code> object represents should be
-     *        truncated
-     * @throws SerialException if there is an error accessing the Blob value;
-     *     or the length to truncate is greater that the SerialBlob length
-     */
-    public void truncate(long length) throws SerialException {
-
-         if (length > len) {
-            throw new SerialException
-               ("Length more than what can be truncated");
-         } else if((int)length == 0) {
-              buf = new byte[0];
-              len = length;
-         } else {
-              len = length;
-              buf = this.getBytes(1, (int)len);
-         }
-    }
-
-
-    /**
-     * Returns an <code>InputStream</code> object that contains a partial <code>Blob</code> value,
-     * starting  with the byte specified by pos, which is length bytes in length.
-     *
-     * @param pos the offset to the first byte of the partial value to be retrieved.
-     *  The first byte in the <code>Blob</code> is at position 1
-     * @param length the length in bytes of the partial value to be retrieved
-     * @return <code>InputStream</code> through which the partial <code>Blob</code> value can be read.
-     * @throws SQLException if pos is less than 1 or if pos is greater than the number of bytes
-     * in the <code>Blob</code> or if pos + length is greater than the number of bytes
-     * in the <code>Blob</code>
-     *
-     * @since 1.6
-     */
-    public InputStream getBinaryStream(long pos,long length) throws SQLException {
-        throw new java.lang.UnsupportedOperationException("Not supported");
-    }
-
-
-    /**
-     * This method frees the <code>Blob</code> object and releases the resources that it holds.
-     * <code>Blob</code> object. The object is invalid once the <code>free</code>
-     * method is called. If <code>free</code> is called multiple times, the subsequent
-     * calls to <code>free</code> are treated as a no-op.
-     *
-     * @throws SQLException if an error occurs releasing
-     * the Blob's resources
-     * @since 1.6
-     */
-    public void free() throws SQLException {
-        throw new java.lang.UnsupportedOperationException("Not supported");
-    }
-    /**
-         * The identifier that assists in the serialization of this <code>SerialBlob</code>
-     * object.
-     */
-
-    static final long serialVersionUID = -8144641928112860441L;
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/serial/SerialClob.java b/ojluni/src/main/java/javax/sql/rowset/serial/SerialClob.java
deleted file mode 100755
index 3792ebd..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/serial/SerialClob.java
+++ /dev/null
@@ -1,522 +0,0 @@
-/*
- * Copyright (c) 2003, 2011, 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.
- */
-
-package javax.sql.rowset.serial;
-
-import java.sql.*;
-import java.io.*;
-
-/**
- * A serialized mapping in the Java programming language of an SQL
- * <code>CLOB</code> value.
- * <P>
- * The <code>SerialClob</code> class provides a constructor for creating
- * an instance from a <code>Clob</code> object.  Note that the <code>Clob</code>
- * object should have brought the SQL <code>CLOB</code> value's data over
- * to the client before a <code>SerialClob</code> object
- * is constructed from it.  The data of an SQL <code>CLOB</code> value can
- * be materialized on the client as a stream of Unicode characters.
- * <P>
- * <code>SerialClob</code> methods make it possible to get a substring
- * from a <code>SerialClob</code> object or to locate the start of
- * a pattern of characters.
- *
- * @author Jonathan Bruce
- */
-public class SerialClob implements Clob, Serializable, Cloneable {
-
-    /**
-     * A serialized array of characters containing the data of the SQL
-     * <code>CLOB</code> value that this <code>SerialClob</code> object
-     * represents.
-     *
-     * @serial
-     */
-    private char buf[];
-
-    /**
-     * Internal Clob representation if SerialClob is initialized with a
-     * Clob. Null if SerialClob is initialized with a char[].
-     */
-    private final Clob clob;
-
-    /**
-     * The length in characters of this <code>SerialClob</code> object's
-     * internal array of characters.
-     *
-     * @serial
-     */
-    private long len;
-
-    /**
-     * The original length in characters of this <code>SerialClob</code>
-     * object's internal array of characters.
-     *
-     * @serial
-     */
-    private final long origLen;
-
-    /**
-     * Constructs a <code>SerialClob</code> object that is a serialized version of
-     * the given <code>char</code> array.
-     * <p>
-     * The new <code>SerialClob</code> object is initialized with the data from the
-     * <code>char</code> array, thus allowing disconnected <code>RowSet</code>
-     * objects to establish a serialized <code>Clob</code> object without touching
-     * the data source.
-     *
-     * @param ch the char array representing the <code>Clob</code> object to be
-     *         serialized
-     * @throws SerialException if an error occurs during serialization
-     * @throws SQLException if a SQL error occurs
-     */
-    public SerialClob(char ch[]) throws SerialException, SQLException {
-
-        // %%% JMB. Agreed. Add code here to throw a SQLException if no
-        // support is available for locatorsUpdateCopy=false
-        // Serializing locators is not supported.
-
-        len = ch.length;
-        buf = new char[(int)len];
-        for (int i = 0; i < len ; i++){
-           buf[i] = ch[i];
-        }
-        origLen = len;
-        clob = null;
-    }
-
-    /**
-     * Constructs a <code>SerialClob</code> object that is a serialized
-     * version of the given <code>Clob</code> object.
-     * <P>
-     * The new <code>SerialClob</code> object is initialized with the
-     * data from the <code>Clob</code> object; therefore, the
-     * <code>Clob</code> object should have previously brought the
-     * SQL <code>CLOB</code> value's data over to the client from
-     * the database. Otherwise, the new <code>SerialClob</code> object
-     * object will contain no data.
-     * <p>
-     * Note: The <code>Clob</code> object supplied to this constructor must
-     * return non-null for both the <code>Clob.getCharacterStream()</code>
-     * and <code>Clob.getAsciiStream</code> methods. This <code>SerialClob</code>
-     * constructor cannot serialize a <code>Clob</code> object in this instance
-     * and will throw an <code>SQLException</code> object.
-     *
-     * @param  clob the <code>Clob</code> object from which this
-     *     <code>SerialClob</code> object is to be constructed; cannot be null
-     * @throws SerialException if an error occurs during serialization
-     * @throws SQLException if a SQL error occurs in capturing the CLOB;
-     *     if the <code>Clob</code> object is a null; or if either of the
-     *     <code>Clob.getCharacterStream()</code> and <code>Clob.getAsciiStream()</code>
-     *     methods on the <code>Clob</code> returns a null
-     * @see java.sql.Clob
-     */
-    public SerialClob(Clob clob) throws SerialException, SQLException {
-
-        if (clob == null) {
-            throw new SQLException("Cannot instantiate a SerialClob " +
-                "object with a null Clob object");
-        }
-        len = clob.length();
-        this.clob = clob;
-        buf = new char[(int)len];
-        int read = 0;
-        int offset = 0;
-
-        try (Reader charStream = clob.getCharacterStream()) {
-            if (charStream == null) {
-                throw new SQLException("Invalid Clob object. The call to getCharacterStream " +
-                    "returned null which cannot be serialized.");
-            }
-
-            // Note: get an ASCII stream in order to null-check it,
-            // even though we don't do anything with it.
-            try (InputStream asciiStream = clob.getAsciiStream()) {
-                if (asciiStream == null) {
-                    throw new SQLException("Invalid Clob object. The call to getAsciiStream " +
-                        "returned null which cannot be serialized.");
-                }
-            }
-
-            try (Reader reader = new BufferedReader(charStream)) {
-                do {
-                    read = reader.read(buf, offset, (int)(len - offset));
-                    offset += read;
-                } while (read > 0);
-            }
-        } catch (java.io.IOException ex) {
-            throw new SerialException("SerialClob: " + ex.getMessage());
-        }
-
-        origLen = len;
-    }
-
-    /**
-     * Retrieves the number of characters in this <code>SerialClob</code>
-     * object's array of characters.
-     *
-     * @return a <code>long</code> indicating the length in characters of this
-     *         <code>SerialClob</code> object's array of character
-     * @throws SerialException if an error occurs
-     */
-    public long length() throws SerialException {
-        return len;
-    }
-
-    /**
-     * Returns this <code>SerialClob</code> object's data as a stream
-     * of Unicode characters. Unlike the related method, <code>getAsciiStream</code>,
-     * a stream is produced regardless of whether the <code>SerialClob</code> object
-     * was created with a <code>Clob</code> object or a <code>char</code> array.
-     *
-     * @return a <code>java.io.Reader</code> object containing this
-     *         <code>SerialClob</code> object's data
-     * @throws SerialException if an error occurs
-     */
-    public java.io.Reader getCharacterStream() throws SerialException {
-        return (java.io.Reader) new CharArrayReader(buf);
-    }
-
-    /**
-     * Retrieves the <code>CLOB</code> value designated by this <code>SerialClob</code>
-     * object as an ascii stream. This method forwards the <code>getAsciiStream</code>
-     * call to the underlying <code>Clob</code> object in the event that this
-     * <code>SerialClob</code> object is instantiated with a <code>Clob</code>
-     * object. If this <code>SerialClob</code> object is instantiated with
-     * a <code>char</code> array, a <code>SerialException</code> object is thrown.
-     *
-     * @return a <code>java.io.InputStream</code> object containing
-     *     this <code>SerialClob</code> object's data
-     * @throws SerialException if this <code>SerialClob</code> object was not instantiated
-     *     with a <code>Clob</code> object
-     * @throws SQLException if there is an error accessing the
-     *     <code>CLOB</code> value represented by the <code>Clob</code> object that was
-     *     used to create this <code>SerialClob</code> object
-     */
-    public java.io.InputStream getAsciiStream() throws SerialException, SQLException {
-        if (this.clob != null) {
-            return this.clob.getAsciiStream();
-        } else {
-            throw new SerialException("Unsupported operation. SerialClob cannot " +
-                "return a the CLOB value as an ascii stream, unless instantiated " +
-                "with a fully implemented Clob object.");
-        }
-    }
-
-    /**
-     * Returns a copy of the substring contained in this
-     * <code>SerialClob</code> object, starting at the given position
-     * and continuing for the specified number or characters.
-     *
-     * @param pos the position of the first character in the substring
-     *            to be copied; the first character of the
-     *            <code>SerialClob</code> object is at position
-     *            <code>1</code>; must not be less than <code>1</code>,
-     *            and the sum of the starting position and the length
-     *            of the substring must be less than the length of this
-     *            <code>SerialClob</code> object
-     * @param length the number of characters in the substring to be
-     *               returned; must not be greater than the length of
-     *               this <code>SerialClob</code> object, and the
-     *               sum of the starting position and the length
-     *               of the substring must be less than the length of this
-     *               <code>SerialClob</code> object
-     * @return a <code>String</code> object containing a substring of
-     *         this <code>SerialClob</code> object beginning at the
-     *         given position and containing the specified number of
-     *         consecutive characters
-     * @throws SerialException if either of the arguments is out of bounds
-     */
-    public String getSubString(long pos, int length) throws SerialException {
-
-        if (pos < 1 || pos > this.length()) {
-            throw new SerialException("Invalid position in BLOB object set");
-        }
-
-        if ((pos-1) + length > this.length()) {
-            throw new SerialException("Invalid position and substring length");
-        }
-
-        try {
-            return new String(buf, (int)pos - 1, length);
-
-        } catch (StringIndexOutOfBoundsException e) {
-            throw new SerialException("StringIndexOutOfBoundsException: " +
-                e.getMessage());
-        }
-
-    }
-
-    /**
-     * Returns the position in this <code>SerialClob</code> object
-     * where the given <code>String</code> object begins, starting
-     * the search at the specified position. This method returns
-     * <code>-1</code> if the pattern is not found.
-     *
-     * @param searchStr the <code>String</code> object for which to
-     *                  search
-     * @param start the position in this <code>SerialClob</code> object
-     *         at which to start the search; the first position is
-     *         <code>1</code>; must not be less than <code>1</code> nor
-     *         greater than the length of this <code>SerialClob</code> object
-     * @return the position at which the given <code>String</code> object
-     *         begins, starting the search at the specified position;
-     *         <code>-1</code> if the given <code>String</code> object is
-     *         not found or the starting position is out of bounds; position
-     *         numbering for the return value starts at <code>1</code>
-     * @throws SerialException if an error occurs locating the String signature
-     * @throws SQLException if there is an error accessing the Blob value
-     *         from the database.
-     */
-    public long position(String searchStr, long start)
-        throws SerialException, SQLException {
-
-        if (start < 1 || start > len) {
-            return -1;
-        }
-
-        char pattern[] = searchStr.toCharArray();
-
-        int pos = (int)start-1;
-        int i = 0;
-        long patlen = pattern.length;
-
-        while (pos < len) {
-            if (pattern[i] == buf[pos]) {
-                if (i + 1 == patlen) {
-                    return (pos + 1) - (patlen - 1);
-                }
-                i++; pos++; // increment pos, and i
-
-            } else if (pattern[i] != buf[pos]) {
-                pos++; // increment pos only
-            }
-        }
-        return -1; // not found
-    }
-
-    /**
-     * Returns the position in this <code>SerialClob</code> object
-     * where the given <code>Clob</code> signature begins, starting
-     * the search at the specified position. This method returns
-     * <code>-1</code> if the pattern is not found.
-     *
-     * @param searchStr the <code>Clob</code> object for which to search
-     * @param start the position in this <code>SerialClob</code> object
-     *        at which to begin the search; the first position is
-     *         <code>1</code>; must not be less than <code>1</code> nor
-     *         greater than the length of this <code>SerialClob</code> object
-     * @return the position at which the given <code>Clob</code>
-     *         object begins in this <code>SerialClob</code> object,
-     *         at or after the specified starting position
-     * @throws SerialException if an error occurs locating the Clob signature
-     * @throws SQLException if there is an error accessing the Blob value
-     *         from the database
-     */
-    public long position(Clob searchStr, long start)
-        throws SerialException, SQLException {
-
-        return position(searchStr.getSubString(1,(int)searchStr.length()), start);
-    }
-
-    /**
-     * Writes the given Java <code>String</code> to the <code>CLOB</code>
-     * value that this <code>SerialClob</code> object represents, at the position
-     * <code>pos</code>.
-     *
-     * @param pos the position at which to start writing to the <code>CLOB</code>
-     *         value that this <code>SerialClob</code> object represents; the first
-     *         position is <code>1</code>; must not be less than <code>1</code> nor
-     *         greater than the length of this <code>SerialClob</code> object
-     * @param str the string to be written to the <code>CLOB</code>
-     *        value that this <code>SerialClob</code> object represents
-     * @return the number of characters written
-     * @throws SerialException if there is an error accessing the
-     *     <code>CLOB</code> value; if an invalid position is set; if an
-     *     invalid offset value is set; if number of bytes to be written
-     *     is greater than the <code>SerialClob</code> length; or the combined
-     *     values of the length and offset is greater than the Clob buffer
-     */
-    public int setString(long pos, String str) throws SerialException {
-        return (setString(pos, str, 0, str.length()));
-    }
-
-    /**
-     * Writes <code>len</code> characters of <code>str</code>, starting
-     * at character <code>offset</code>, to the <code>CLOB</code> value
-     * that this <code>Clob</code> represents.
-     *
-     * @param pos the position at which to start writing to the <code>CLOB</code>
-     *         value that this <code>SerialClob</code> object represents; the first
-     *         position is <code>1</code>; must not be less than <code>1</code> nor
-     *         greater than the length of this <code>SerialClob</code> object
-     * @param str the string to be written to the <code>CLOB</code>
-     *        value that this <code>Clob</code> object represents
-     * @param offset the offset into <code>str</code> to start reading
-     *        the characters to be written
-     * @param length the number of characters to be written
-     * @return the number of characters written
-     * @throws SerialException if there is an error accessing the
-     *     <code>CLOB</code> value; if an invalid position is set; if an
-     *     invalid offset value is set; if number of bytes to be written
-     *     is greater than the <code>SerialClob</code> length; or the combined
-     *     values of the length and offset is greater than the Clob buffer
-     */
-    public int setString(long pos, String str, int offset, int length)
-        throws SerialException {
-        String temp = str.substring(offset);
-        char cPattern[] = temp.toCharArray();
-
-        if (offset < 0 || offset > str.length()) {
-            throw new SerialException("Invalid offset in byte array set");
-        }
-
-        if (pos < 1 || pos > this.length()) {
-            throw new SerialException("Invalid position in BLOB object set");
-        }
-
-        if ((long)(length) > origLen) {
-            throw new SerialException("Buffer is not sufficient to hold the value");
-        }
-
-        if ((length + offset) > str.length()) {
-            // need check to ensure length + offset !> bytes.length
-            throw new SerialException("Invalid OffSet. Cannot have combined offset " +
-                " and length that is greater that the Blob buffer");
-        }
-
-        int i = 0;
-        pos--;  //values in the array are at position one less
-        while ( i < length || (offset + i +1) < (str.length() - offset ) ) {
-            this.buf[(int)pos + i ] = cPattern[offset + i ];
-            i++;
-        }
-        return i;
-    }
-
-    /**
-     * Retrieves a stream to be used to write Ascii characters to the
-     * <code>CLOB</code> value that this <code>SerialClob</code> object represents,
-     * starting at position <code>pos</code>. This method forwards the
-     * <code>setAsciiStream()</code> call to the underlying <code>Clob</code> object in
-     * the event that this <code>SerialClob</code> object is instantiated with a
-     * <code>Clob</code> object. If this <code>SerialClob</code> object is instantiated
-     *  with a <code>char</code> array, a <code>SerialException</code> object is thrown.
-     *
-     * @param pos the position at which to start writing to the
-     *        <code>CLOB</code> object
-     * @return the stream to which ASCII encoded characters can be written
-     * @throws SerialException if SerialClob is not instantiated with a
-     *     Clob object that supports <code>setAsciiStream</code>
-     * @throws SQLException if there is an error accessing the
-     *     <code>CLOB</code> value
-     * @see #getAsciiStream
-     */
-    public java.io.OutputStream setAsciiStream(long pos)
-        throws SerialException, SQLException {
-         if (this.clob.setAsciiStream(pos) != null) {
-             return this.clob.setAsciiStream(pos);
-         } else {
-             throw new SerialException("Unsupported operation. SerialClob cannot " +
-                "return a writable ascii stream\n unless instantiated with a Clob object " +
-                "that has a setAsciiStream() implementation");
-         }
-    }
-
-    /**
-     * Retrieves a stream to be used to write a stream of Unicode characters
-     * to the <code>CLOB</code> value that this <code>SerialClob</code> object
-     * represents, at position <code>pos</code>. This method forwards the
-     * <code>setCharacterStream()</code> call to the underlying <code>Clob</code>
-     * object in the event that this <code>SerialClob</code> object is instantiated with a
-     * <code>Clob</code> object. If this <code>SerialClob</code> object is instantiated with
-     * a <code>char</code> array, a <code>SerialException</code> is thrown.
-     *
-     * @param  pos the position at which to start writing to the
-     *        <code>CLOB</code> value
-     *
-     * @return a stream to which Unicode encoded characters can be written
-     * @throws SerialException if the SerialClob is not instantiated with
-     *     a Clob object that supports <code>setCharacterStream</code>
-     * @throws SQLException if there is an error accessing the
-     *            <code>CLOB</code> value
-     * @see #getCharacterStream
-     */
-    public java.io.Writer setCharacterStream(long pos)
-        throws SerialException, SQLException {
-        if (this.clob.setCharacterStream(pos) != null) {
-            return this.clob.setCharacterStream(pos);
-        } else {
-            throw new SerialException("Unsupported operation. SerialClob cannot " +
-                "return a writable character stream\n unless instantiated with a Clob object " +
-                "that has a setCharacterStream implementation");
-        }
-    }
-
-    /**
-     * Truncates the <code>CLOB</code> value that this <code>SerialClob</code>
-     * object represents so that it has a length of <code>len</code>
-     * characters.
-     * <p>
-     * Truncating a <code>SerialClob</code> object to length 0 has the effect of
-     * clearing its contents.
-     *
-     * @param length the length, in bytes, to which the <code>CLOB</code>
-     *        value should be truncated
-     * @throws SQLException if there is an error accessing the
-     *        <code>CLOB</code> value
-     */
-    public void truncate(long length) throws SerialException {
-         if (length > len) {
-            throw new SerialException
-               ("Length more than what can be truncated");
-         } else {
-              len = length;
-              // re-size the buffer
-
-              if (len == 0) {
-                  buf = new char[] {};
-              } else {
-                buf = (this.getSubString(1, (int)len)).toCharArray();
-              }
-
-         }
-    }
-
-
-    public Reader getCharacterStream(long pos, long length) throws SQLException {
-        throw new java.lang.UnsupportedOperationException("Not supported");
-    }
-
-    public void free() throws SQLException {
-        throw new java.lang.UnsupportedOperationException("Not supported");
-    }
-
-    /**
-         * The identifier that assists in the serialization of this <code>SerialClob</code>
-     * object.
-     */
-    static final long serialVersionUID = -1662519690087375313L;
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/serial/SerialDatalink.java b/ojluni/src/main/java/javax/sql/rowset/serial/SerialDatalink.java
deleted file mode 100755
index 6958cc8..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/serial/SerialDatalink.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package javax.sql.rowset.serial;
-
-import java.sql.*;
-import java.io.*;
-import java.net.URL;
-
-
-/**
- * A serialized mapping in the Java programming language of an SQL
- * <code>DATALINK</code> value. A <code>DATALINK</code> value
- * references a file outside of the underlying data source that the
- * data source manages.
- * <P>
- * <code>RowSet</code> implementations can use the method <code>RowSet.getURL</code>
- * to retrieve a <code>java.net.URL</code> object, which can be used
- * to manipulate the external data.
- * <pre>
- *      java.net.URL url = rowset.getURL(1);
- * </pre>
- */
-public class SerialDatalink implements Serializable, Cloneable {
-
-    /**
-     * The extracted URL field retrieved from the DATALINK field.
-     * @serial
-     */
-    private URL url;
-
-    /**
-     * The SQL type of the elements in this <code>SerialDatalink</code>
-     * object.  The type is expressed as one of the contants from the
-     * class <code>java.sql.Types</code>.
-     * @serial
-     */
-    private int baseType;
-
-    /**
-     * The type name used by the DBMS for the elements in the SQL
-     * <code>DATALINK</code> value that this SerialDatalink object
-     * represents.
-     * @serial
-     */
-    private String baseTypeName;
-
-    /**
-      * Constructs a new <code>SerialDatalink</code> object from the given
-      * <code>java.net.URL</code> object.
-      * <P>
-      * @throws SerialException if url parameter is a null
-      */
-    public SerialDatalink(URL url) throws SerialException {
-        if (url == null) {
-            throw new SerialException("Cannot serialize empty URL instance");
-        }
-        this.url = url;
-    }
-
-    /**
-     * Returns a new URL that is a copy of this <code>SerialDatalink</code>
-     * object.
-     *
-     * @return a copy of this <code>SerialDatalink</code> object as a
-     * <code>URL</code> object in the Java programming language.
-     * @throws SerialException if the <code>URL</code> object cannot be de-serialized
-     */
-    public URL getDatalink() throws SerialException {
-
-        URL aURL = null;
-
-        try {
-            aURL = new URL((this.url).toString());
-        } catch (java.net.MalformedURLException e) {
-            throw new SerialException("MalformedURLException: " + e.getMessage());
-        }
-        return aURL;
-    }
-
-
-    /**
-         * The identifier that assists in the serialization of this <code>SerialDatalink</code>
-     * object.
-     */
-    static final long serialVersionUID = 2826907821828733626L;
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/serial/SerialException.java b/ojluni/src/main/java/javax/sql/rowset/serial/SerialException.java
deleted file mode 100755
index e2d0c11..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/serial/SerialException.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package javax.sql.rowset.serial;
-
-import java.sql.SQLException;
-
-/**
- * Indicates and an error with the serialization or de-serialization of
- * SQL types such as <code>BLOB, CLOB, STRUCT or ARRAY</code> in
- * addition to SQL types such as <code>DATALINK and JAVAOBJECT</code>
- *
- */
-public class SerialException extends java.sql.SQLException {
-
-    /**
-     * Creates a new <code>SerialException</code> without a
-     * message.
-     */
-     public SerialException() {
-     }
-
-    /**
-     * Creates a new <code>SerialException</code> with the
-     * specified message.
-     *
-     * @param msg the detail message
-     */
-    public SerialException(String msg) {
-        super(msg);
-    }
-
-    static final long serialVersionUID = -489794565168592690L;
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/serial/SerialJavaObject.java b/ojluni/src/main/java/javax/sql/rowset/serial/SerialJavaObject.java
deleted file mode 100755
index 9a48936..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/serial/SerialJavaObject.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * 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.
- */
-
-package javax.sql.rowset.serial;
-
-import java.io.*;
-import java.lang.reflect.*;
-import javax.sql.rowset.RowSetWarning;
-import sun.reflect.CallerSensitive;
-import sun.reflect.Reflection;
-import sun.reflect.misc.ReflectUtil;
-
-/**
- * A serializable mapping in the Java programming language of an SQL
- * <code>JAVA_OBJECT</code> value. Assuming the Java object
- * implements the <code>Serializable</code> interface, this class simply wraps the
- * serialization process.
- * <P>
- * If however, the serialization is not possible because
- * the Java object is not immediately serializable, this class will
- * attempt to serialize all non-static members to permit the object
- * state to be serialized.
- * Static or transient fields cannot be serialized; an attempt to serialize
- * them will result in a <code>SerialException</code> object being thrown.
- *
- * @author Jonathan Bruce
- */
-public class SerialJavaObject implements Serializable, Cloneable {
-
-    /**
-     * Placeholder for object to be serialized.
-     */
-    private final Object obj;
-
-
-   /**
-    * Placeholder for all fields in the <code>JavaObject</code> being serialized.
-    */
-    private transient Field[] fields;
-
-    /**
-     * Constructor for <code>SerialJavaObject</code> helper class.
-     * <p>
-     *
-     * @param obj the Java <code>Object</code> to be serialized
-     * @throws SerialException if the object is found not to be serializable
-     */
-    public SerialJavaObject(Object obj) throws SerialException {
-
-        // if any static fields are found, an exception
-        // should be thrown
-
-
-        // get Class. Object instance should always be available
-        Class<?> c = obj.getClass();
-
-        // determine if object implements Serializable i/f
-        if (!(obj instanceof java.io.Serializable)) {
-            setWarning(new RowSetWarning("Warning, the object passed to the constructor does not implement Serializable"));
-        }
-
-        // can only determine public fields (obviously). If
-        // any of these are static, this should invalidate
-        // the action of attempting to persist these fields
-        // in a serialized form
-
-        boolean anyStaticFields = false;
-        fields = c.getFields();
-
-        for (int i = 0; i < fields.length; i++ ) {
-            if ( fields[i].getModifiers() == Modifier.STATIC ) {
-                anyStaticFields = true;
-            }
-        }
-
-
-        if (anyStaticFields) {
-            throw new SerialException("Located static fields in " +
-                "object instance. Cannot serialize");
-        }
-
-        this.obj = obj;
-    }
-
-    /**
-     * Returns an <code>Object</code> that is a copy of this <code>SerialJavaObject</code>
-     * object.
-     *
-     * @return a copy of this <code>SerialJavaObject</code> object as an
-     *         <code>Object</code> in the Java programming language
-     * @throws SerialException if the instance is corrupt
-     */
-    public Object getObject() throws SerialException {
-        return this.obj;
-    }
-
-    /**
-     * Returns an array of <code>Field</code> objects that contains each
-     * field of the object that this helper class is serializing.
-     *
-     * @return an array of <code>Field</code> objects
-     * @throws SerialException if an error is encountered accessing
-     * the serialized object
-     * @see Class#getFields
-     */
-    @CallerSensitive
-    public Field[] getFields() throws SerialException {
-        if (fields != null) {
-            Class<?> c = this.obj.getClass();
-            SecurityManager sm = System.getSecurityManager();
-            if (sm != null) {
-                /*
-                 * Check if the caller is allowed to access the specified class's package.
-                 * If access is denied, throw a SecurityException.
-                 */
-                Class<?> caller = sun.reflect.Reflection.getCallerClass();
-                if (ReflectUtil.needsPackageAccessCheck(caller.getClassLoader(),
-                                                        c.getClassLoader())) {
-                    ReflectUtil.checkPackageAccess(c);
-                }
-            }
-            return c.getFields();
-        } else {
-            throw new SerialException("SerialJavaObject does not contain" +
-                " a serialized object instance");
-        }
-    }
-
-    /**
-         * The identifier that assists in the serialization of this
-     * <code>SerialJavaObject</code> object.
-     */
-    static final long serialVersionUID = -1465795139032831023L;
-
-    /**
-     * A container for the warnings issued on this <code>SerialJavaObject</code>
-     * object. When there are multiple warnings, each warning is chained to the
-     * previous warning.
-     */
-    java.util.Vector chain;
-
-    /**
-     * Registers the given warning.
-     */
-    private void setWarning(RowSetWarning e) {
-        if (chain == null) {
-            chain = new java.util.Vector();
-        }
-        chain.add(e);
-    }
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/serial/SerialRef.java b/ojluni/src/main/java/javax/sql/rowset/serial/SerialRef.java
deleted file mode 100755
index 8503caa..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/serial/SerialRef.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-package javax.sql.rowset.serial;
-
-import java.sql.*;
-import java.io.*;
-import java.util.*;
-
-/**
- * A serialized mapping of a <code>Ref</code> object, which is the mapping in the
- * Java programming language of an SQL <code>REF</code> value.
- * <p>
- * The <code>SerialRef</code> class provides a constructor  for
- * creating a <code>SerialRef</code> instance from a <code>Ref</code>
- * object and provides methods for getting and setting the <code>Ref</code> object.
- */
-public class SerialRef implements Ref, Serializable, Cloneable {
-
-    /**
-     * String containing the base type name.
-     * @serial
-     */
-    private String baseTypeName;
-
-    /**
-     * This will store the type <code>Ref</code> as an <code>Object</code>.
-     */
-    private Object object;
-
-    /**
-     * Private copy of the Ref reference.
-     */
-    private Ref reference;
-
-    /**
-     * Constructs a <code>SerialRef</code> object from the given <code>Ref</code>
-     * object.
-     *
-     * @param ref a Ref object; cannot be <code>null</code>
-     * @throws SQLException if a database access occurs; if <code>ref</code>
-     *     is <code>null</code>; or if the <code>Ref</code> object returns a
-     *     <code>null</code> value base type name.
-     * @throws SerialException if an error occurs serializing the <code>Ref</code>
-     *     object
-     */
-    public SerialRef(Ref ref) throws SerialException, SQLException {
-        if (ref == null) {
-            throw new SQLException("Cannot instantiate a SerialRef object " +
-                "with a null Ref object");
-        }
-        reference = ref;
-        object = ref;
-        if (ref.getBaseTypeName() == null) {
-            throw new SQLException("Cannot instantiate a SerialRef object " +
-                "that returns a null base type name");
-        } else {
-            baseTypeName = ref.getBaseTypeName();
-        }
-    }
-
-    /**
-     * Returns a string describing the base type name of the <code>Ref</code>.
-     *
-     * @return a string of the base type name of the Ref
-     * @throws SerialException in no Ref object has been set
-     */
-    public String getBaseTypeName() throws SerialException {
-        return baseTypeName;
-    }
-
-    /**
-     * Returns an <code>Object</code> representing the SQL structured type
-     * to which this <code>SerialRef</code> object refers.  The attributes
-     * of the structured type are mapped according to the given type map.
-     *
-     * @param map a <code>java.util.Map</code> object containing zero or
-     *        more entries, with each entry consisting of 1) a <code>String</code>
-     *        giving the fully qualified name of a UDT and 2) the
-     *        <code>Class</code> object for the <code>SQLData</code> implementation
-     *        that defines how the UDT is to be mapped
-     * @return an object instance resolved from the Ref reference and mapped
-     *        according to the supplied type map
-     * @throws SerialException if an error is encountered in the reference
-     *        resolution
-     */
-    public Object getObject(java.util.Map<String,Class<?>> map)
-        throws SerialException
-    {
-        map = new Hashtable(map);
-        if (object != null) {
-            return map.get(object);
-        } else {
-            throw new SerialException("The object is not set");
-        }
-    }
-
-    /**
-     * Returns an <code>Object</code> representing the SQL structured type
-     * to which this <code>SerialRef</code> object refers.
-     *
-     * @return an object instance resolved from the Ref reference
-     * @throws SerialException if an error is encountered in the reference
-     *         resolution
-     */
-    public Object getObject() throws SerialException {
-
-        if (reference != null) {
-            try {
-                return reference.getObject();
-            } catch (SQLException e) {
-                throw new SerialException("SQLException: " + e.getMessage());
-            }
-        }
-
-        if (object != null) {
-            return object;
-        }
-
-
-        throw new SerialException("The object is not set");
-
-    }
-
-    /**
-     * Sets the SQL structured type that this <code>SerialRef</code> object
-     * references to the given <code>Object</code> object.
-     *
-     * @param obj an <code>Object</code> representing the SQL structured type
-     *        to be referenced
-     * @throws SerialException if an error is encountered generating the
-     * the structured type referenced by this <code>SerialRef</code> object
-     */
-    public void setObject(Object obj) throws SerialException {
-        try {
-            reference.setObject(obj);
-        } catch (SQLException e) {
-            throw new SerialException("SQLException: " + e.getMessage());
-        }
-        object = obj;
-    }
-
-    /**
-         * The identifier that assists in the serialization of this <code>SerialRef</code>
-     * object.
-     */
-    static final long serialVersionUID = -4727123500609662274L;
-
-
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/serial/SerialStruct.java b/ojluni/src/main/java/javax/sql/rowset/serial/SerialStruct.java
deleted file mode 100755
index b546da7..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/serial/SerialStruct.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-package javax.sql.rowset.serial;
-
-import java.sql.*;
-import javax.sql.*;
-import java.io.*;
-import java.math.*;
-import java.util.Map;
-import java.util.Vector;
-
-import javax.sql.rowset.*;
-
-/**
- * A serialized mapping in the Java programming language of an SQL
- * structured type. Each attribute that is not already serialized
- * is mapped to a serialized form, and if an attribute is itself
- * a structured type, each of its attributes that is not already
- * serialized is mapped to a serialized form.
- * <P>
- * In addition, the structured type is custom mapped to a class in the
- * Java programming language if there is such a mapping, as are
- * its attributes, if appropriate.
- * <P>
- * The <code>SerialStruct</code> class provides a constructor for creating
- * an instance from a <code>Struct</code> object, a method for retrieving
- * the SQL type name of the SQL structured type in the database, and methods
- * for retrieving its attribute values.
- */
-public class SerialStruct implements Struct, Serializable, Cloneable {
-
-
-    /**
-     * The SQL type name for the structured type that this
-     * <code>SerialStruct</code> object represents.  This is the name
-     * used in the SQL definition of the SQL structured type.
-     *
-     * @serial
-     */
-    private String SQLTypeName;
-
-    /**
-     * An array of <code>Object</code> instances in  which each
-     * element is an attribute of the SQL structured type that this
-     * <code>SerialStruct</code> object represents.  The attributes are
-     * ordered according to their order in the definition of the
-     * SQL structured type.
-     *
-     * @serial
-     */
-    private Object attribs[];
-
-    /**
-     * Constructs a <code>SerialStruct</code> object from the given
-     * <code>Struct</code> object, using the given <code>java.util.Map</code>
-     * object for custom mapping the SQL structured type or any of its
-     * attributes that are SQL structured types.
-     *
-     * @param map a <code>java.util.Map</code> object in which
-     *        each entry consists of 1) a <code>String</code> object
-     *        giving the fully qualified name of a UDT and 2) the
-     *        <code>Class</code> object for the <code>SQLData</code> implementation
-     *        that defines how the UDT is to be mapped
-     * @throws SerialException if an error occurs
-     * @see java.sql.Struct
-     */
-     public SerialStruct(Struct in, Map<String,Class<?>> map)
-         throws SerialException
-     {
-
-        try {
-
-        // get the type name
-        SQLTypeName = in.getSQLTypeName();
-        System.out.println("SQLTypeName: " + SQLTypeName);
-
-        // get the attributes of the struct
-        attribs = in.getAttributes(map);
-
-        /*
-         * the array may contain further Structs
-         * and/or classes that have been mapped,
-         * other types that we have to serialize
-         */
-        mapToSerial(map);
-
-        } catch (SQLException e) {
-            throw new SerialException(e.getMessage());
-        }
-    }
-
-     /**
-      * Constructs a <code>SerialStruct</code> object from the
-      * given <code>SQLData</code> object, using the given type
-      * map to custom map it to a class in the Java programming
-      * language.  The type map gives the SQL type and the class
-      * to which it is mapped.  The <code>SQLData</code> object
-      * defines the class to which the SQL type will be mapped.
-      *
-      * @param in an instance of the <code>SQLData</code> class
-      *           that defines the mapping of the SQL structured
-      *           type to one or more objects in the Java programming language
-      * @param map a <code>java.util.Map</code> object in which
-      *        each entry consists of 1) a <code>String</code> object
-      *        giving the fully qualified name of a UDT and 2) the
-      *        <code>Class</code> object for the <code>SQLData</code> implementation
-      *        that defines how the UDT is to be mapped
-      * @throws SerialException if an error occurs
-      */
-    public SerialStruct(SQLData in, Map<String,Class<?>> map)
-        throws SerialException
-    {
-
-        try {
-
-        //set the type name
-        SQLTypeName = in.getSQLTypeName();
-
-        Vector tmp = new Vector();
-        in.writeSQL(new SQLOutputImpl(tmp, map));
-        attribs = tmp.toArray();
-
-        } catch (SQLException e) {
-            throw new SerialException(e.getMessage());
-        }
-    }
-
-
-    /**
-     * Retrieves the SQL type name for this <code>SerialStruct</code>
-     * object. This is the name used in the SQL definition of the
-     * structured type
-     *
-     * @return a <code>String</code> object representing the SQL
-     *         type name for the SQL structured type that this
-     *         <code>SerialStruct</code> object represents
-     * @throws SerialException if an error occurs
-     */
-    public String getSQLTypeName() throws SerialException {
-        return SQLTypeName;
-    }
-
-    /**
-     * Retrieves an array of <code>Object</code> values containing the
-     * attributes of the SQL structured type that this
-     * <code>SerialStruct</code> object represents.
-     *
-     * @return an array of <code>Object</code> values, with each
-     *         element being an attribute of the SQL structured type
-     *         that this <code>SerialStruct</code> object represents
-     * @throws SerialException if an error occurs
-     */
-    public Object[]  getAttributes() throws SerialException {
-        return attribs;
-    }
-
-    /**
-     * Retrieves the attributes for the SQL structured type that
-     * this <code>SerialStruct</code> represents as an array of
-     * <code>Object</code> values, using the given type map for
-     * custom mapping if appropriate.
-     *
-     * @param map a <code>java.util.Map</code> object in which
-     *        each entry consists of 1) a <code>String</code> object
-     *        giving the fully qualified name of a UDT and 2) the
-     *        <code>Class</code> object for the <code>SQLData</code> implementation
-     *        that defines how the UDT is to be mapped
-     * @return an array of <code>Object</code> values, with each
-     *         element being an attribute of the SQL structured
-     *         type that this <code>SerialStruct</code> object
-     *         represents
-     * @throws SerialException if an error occurs
-     */
-    public Object[] getAttributes(Map<String,Class<?>> map)
-        throws SerialException
-    {
-       return attribs;
-    }
-
-
-    /**
-     * Maps attributes of an SQL structured type that are not
-     * serialized to a serialized form, using the given type map
-     * for custom mapping when appropriate.  The following types
-     * in the Java programming language are mapped to their
-     * serialized forms:  <code>Struct</code>, <code>SQLData</code>,
-     * <code>Ref</code>, <code>Blob</code>, <code>Clob</code>, and
-     * <code>Array</code>.
-     * <P>
-     * This method is called internally and is not used by an
-     * application programmer.
-     *
-     * @param map a <code>java.util.Map</code> object in which
-     *        each entry consists of 1) a <code>String</code> object
-     *        giving the fully qualified name of a UDT and 2) the
-     *        <code>Class</code> object for the <code>SQLData</code> implementation
-     *        that defines how the UDT is to be mapped
-     * @throws SerialException if an error occurs
-     */
-    private void mapToSerial(Map map) throws SerialException {
-
-        try {
-
-        for (int i = 0; i < attribs.length; i++) {
-            if (attribs[i] instanceof Struct) {
-                attribs[i] = new SerialStruct((Struct)attribs[i], map);
-            } else if (attribs[i] instanceof SQLData) {
-                attribs[i] = new SerialStruct((SQLData)attribs[i], map);
-            } else if (attribs[i] instanceof Blob) {
-                attribs[i] = new SerialBlob((Blob)attribs[i]);
-            } else if (attribs[i] instanceof Clob) {
-                attribs[i] = new SerialClob((Clob)attribs[i]);
-            } else if (attribs[i] instanceof Ref) {
-                attribs[i] = new SerialRef((Ref)attribs[i]);
-            } else if (attribs[i] instanceof java.sql.Array) {
-                attribs[i] = new SerialArray((java.sql.Array)attribs[i], map);
-            }
-        }
-
-        } catch (SQLException e) {
-            throw new SerialException(e.getMessage());
-        }
-        return;
-    }
-
-    /**
-     * The identifier that assists in the serialization of this
-     * <code>SerialStruct</code> object.
-     */
-    static final long serialVersionUID = -8322445504027483372L;
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/spi/SyncFactory.java b/ojluni/src/main/java/javax/sql/rowset/spi/SyncFactory.java
deleted file mode 100755
index 4e2b164..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/spi/SyncFactory.java
+++ /dev/null
@@ -1,934 +0,0 @@
-/*
- * Copyright (c) 2003, 2011, 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.
- */
-
-package javax.sql.rowset.spi;
-
-import java.util.logging.*;
-import java.util.*;
-
-import java.sql.*;
-import javax.sql.*;
-
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.FileNotFoundException;
-
-import javax.naming.*;
-
-/**
- * The Service Provider Interface (SPI) mechanism that generates <code>SyncProvider</code>
- * instances to be used by disconnected <code>RowSet</code> objects.
- * The <code>SyncProvider</code> instances in turn provide the
- * <code>javax.sql.RowSetReader</code> object the <code>RowSet</code> object
- * needs to populate itself with data and the
- * <code>javax.sql.RowSetWriter</code> object it needs to
- * propagate changes to its
- * data back to the underlying data source.
- * <P>
- * Because the methods in the <code>SyncFactory</code> class are all static,
- * there is only one <code>SyncFactory</code> object
- * per Java VM at any one time. This ensures that there is a single source from which a
- * <code>RowSet</code> implementation can obtain its <code>SyncProvider</code>
- * implementation.
- * <p>
- * <h3>1.0 Overview</h3>
- * The <code>SyncFactory</code> class provides an internal registry of available
- * synchronization provider implementations (<code>SyncProvider</code> objects).
- * This registry may be queried to determine which
- * synchronization providers are available.
- * The following line of code gets an enumeration of the providers currently registered.
- * <PRE>
- *     java.util.Enumeration e = SyncFactory.getRegisteredProviders();
- * </PRE>
- * All standard <code>RowSet</code> implementations must provide at least two providers:
- * <UL>
- *  <LI>an optimistic provider for use with a <code>CachedRowSet</code> implementation
- *     or an implementation derived from it
- *  <LI>an XML provider, which is used for reading and writing XML, such as with
- *       <code>WebRowSet</code> objects
- * </UL>
- * Note that the JDBC RowSet Implementations include the <code>SyncProvider</code>
- * implemtations <code>RIOptimisticProvider</code> and <code>RIXmlProvider</code>,
- * which satisfy this requirement.
- * <P>
- * The <code>SyncFactory</code> class provides accessor methods to assist
- * applications in determining which synchronization providers are currently
- * registered with the <code>SyncFactory</code>.
- * <p>
- * Other methods let <code>RowSet</code> persistence providers be
- * registered or de-registered with the factory mechanism. This
- * allows additional synchronization provider implementations to be made
- * available to <code>RowSet</code> objects at run time.
- * <p>
- * Applications can apply a degree of filtering to determine the level of
- * synchronization that a <code>SyncProvider</code> implementation offers.
- * The following criteria determine whether a provider is
- * made available to a <code>RowSet</code> object:
- * <ol>
- * <li>If a particular provider is specified by a <code>RowSet</code> object, and
- * the <code>SyncFactory</code> does not contain a reference to this provider,
- * a <code>SyncFactoryException</code> is thrown stating that the synchronization
- * provider could not be found.
- * <p>
- * <li>If a <code>RowSet</code> implementation is instantiated with a specified
- * provider and the specified provider has been properly registered, the
- * requested provider is supplied. Otherwise a <code>SyncFactoryException</code>
- * is thrown.
- * <p>
- * <li>If a <code>RowSet</code> object does not specify a
- * <code>SyncProvider</code> implementation and no additional
- * <code>SyncProvider</code> implementations are available, the reference
- * implementation providers are supplied.
- * </ol>
- * <h3>2.0 Registering <code>SyncProvider</code> Implementations</h3>
- * <p>
- * Both vendors and developers can register <code>SyncProvider</code>
- * implementations using one of the following mechanisms.
- * <ul>
- * <LI><B>Using the command line</B><BR>
- * The name of the provider is supplied on the command line, which will add
- * the provider to the system properties.
- * For example:
- * <PRE>
- *    -Drowset.provider.classname=com.fred.providers.HighAvailabilityProvider
- * </PRE>
- * <li><b>Using the Standard Properties File</b><BR>
- * The reference implementation is targeted
- * to ship with J2SE 1.5, which will include an additional resource file
- * that may be edited by hand. Here is an example of the properties file
- * included in the reference implementation:
- * <PRE>
- *   #Default JDBC RowSet sync providers listing
- *   #
- *
- *   # Optimistic synchronization provider
- *   rowset.provider.classname.0=com.sun.rowset.providers.RIOptimisticProvider
- *   rowset.provider.vendor.0=Oracle Corporation
- *   rowset.provider.version.0=1.0
- *
- *   # XML Provider using standard XML schema
- *   rowset.provider.classname.1=com.sun.rowset.providers.RIXMLProvider
- *   rowset.provider.vendor.1=Oracle Corporation
- *   rowset.provider.version.1=1.0
- * </PRE>
- * The <code>SyncFactory</code> checks this file and registers the
- * <code>SyncProvider</code> implementations that it contains. A
- * developer or vendor can add other implementations to this file.
- * For example, here is a possible addition:
- * <PRE>
- *     rowset.provider.classname.2=com.fred.providers.HighAvailabilityProvider
- *     rowset.provider.vendor.2=Fred, Inc.
- *     rowset.provider.version.2=1.0
- * </PRE>
- * <p>
- * <li><b>Using a JNDI Context</b><BR>
- * Available providers can be registered on a JNDI
- * context, and the <code>SyncFactory</code> will attempt to load
- * <code>SyncProvider</code> implementations from that JNDI context.
- * For example, the following code fragment registers a provider implementation
- * on a JNDI context.  This is something a deployer would normally do. In this
- * example, <code>MyProvider</code> is being registered on a CosNaming
- * namespace, which is the namespace used by J2EE resources.
- * <PRE>
- *    import javax.naming.*;
- *
- *    Hashtable svrEnv = new  Hashtable();
- *    srvEnv.put(Context.INITIAL_CONTEXT_FACTORY, "CosNaming");
- *
- *    Context ctx = new InitialContext(svrEnv);
- *    com.fred.providers.MyProvider = new MyProvider();
- *    ctx.rebind("providers/MyProvider", syncProvider);
- * </PRE>
- * </ul>
- * Next, an application will register the JNDI context with the
- * <code>SyncFactory</code> instance.  This allows the <code>SyncFactory</code>
- * to browse within the JNDI context looking for <code>SyncProvider</code>
- * implementations.
- * <PRE>
- *    Hashtable appEnv = new Hashtable();
- *    appEnv.put(Context.INITIAL_CONTEXT_FACTORY, "CosNaming");
- *    appEnv.put(Context.PROVIDER_URL, "iiop://hostname/providers");
- *    Context ctx = new InitialContext(appEnv);
- *
- *    SyncFactory.registerJNDIContext(ctx);
- * </PRE>
- * If a <code>RowSet</code> object attempts to obtain a <code>MyProvider</code>
- * object, the <code>SyncFactory</code> will try to locate it. First it searches
- * for it in the system properties, then it looks in the resource files, and
- * finally it checks the JNDI context that has been set. The <code>SyncFactory</code>
- * instance verifies that the requested provider is a valid extension of the
- * <code>SyncProvider</code> abstract class and then gives it to the
- * <code>RowSet</code> object. In the following code fragment, a new
- * <code>CachedRowSet</code> object is created and initialized with
- * <i>env</i>, which contains the binding to <code>MyProvider</code>.
- * <PRE>
- *    Hashtable env = new Hashtable();
- *    env.put(SyncFactory.ROWSET_SYNC_PROVIDER, "com.fred.providers.MyProvider");
- *    CachedRowSet crs = new com.sun.rowset.CachedRowSetImpl(env);
- * </PRE>
- * Further details on these mechanisms are available in the
- * <code>javax.sql.rowset.spi</code> package specification.
- *
- * @author  Jonathan Bruce
- * @see javax.sql.rowset.spi.SyncProvider
- * @see javax.sql.rowset.spi.SyncFactoryException
- */
-public class SyncFactory {
-
-    /**
-     * Creates a new <code>SyncFactory</code> object, which is the singleton
-     * instance.
-     * Having a private constructor guarantees that no more than
-     * one <code>SyncProvider</code> object can exist at a time.
-     */
-    private SyncFactory() {
-    }
-
-    /**
-     * The standard property-id for a synchronization provider implementation
-     * name.
-     */
-    public static final String ROWSET_SYNC_PROVIDER =
-            "rowset.provider.classname";
-    /**
-     * The standard property-id for a synchronization provider implementation
-     * vendor name.
-     */
-    public static final String ROWSET_SYNC_VENDOR =
-            "rowset.provider.vendor";
-    /**
-     * The standard property-id for a synchronization provider implementation
-     * version tag.
-     */
-    public static final String ROWSET_SYNC_PROVIDER_VERSION =
-            "rowset.provider.version";
-    /**
-     * The standard resource file name.
-     */
-    private static String ROWSET_PROPERTIES = "rowset.properties";
-    /**
-     * The RI Optimistic Provider.
-     */
-    private static String default_provider =
-            "com.sun.rowset.providers.RIOptimisticProvider";
-    /**
-     *  Permission required to invoke setJNDIContext and setLogger
-     */
-    private static final SQLPermission SET_SYNCFACTORY_PERMISSION =
-            new SQLPermission("setSyncFactory");
-    /**
-     * The initial JNDI context where <code>SyncProvider</code> implementations can
-     * be stored and from which they can be invoked.
-     */
-    private static Context ic;
-    /**
-     * The <code>Logger</code> object to be used by the <code>SyncFactory</code>.
-     */
-    private static volatile Logger rsLogger;
-    /**
-     *
-     */
-    private static Level rsLevel;
-    /**
-     * The registry of available <code>SyncProvider</code> implementations.
-     * See section 2.0 of the class comment for <code>SyncFactory</code> for an
-     * explanation of how a provider can be added to this registry.
-     */
-    private static Hashtable implementations;
-    /**
-     * Internal sync object used to maintain the SPI as a singleton
-     */
-    private static Object logSync = new Object();
-    /**
-     * Internal PrintWriter field for logging facility
-     */
-    private static java.io.PrintWriter logWriter = null;
-
-    /**
-     * Adds the the given synchronization provider to the factory register. Guidelines
-     * are provided in the <code>SyncProvider</code> specification for the
-     * required naming conventions for <code>SyncProvider</code>
-     * implementations.
-     * <p>
-     * Synchronization providers bound to a JNDI context can be
-     * registered by binding a SyncProvider instance to a JNDI namespace.
-     * <ul>
-     * <pre>
-     * SyncProvider p = new MySyncProvider();
-     * InitialContext ic = new InitialContext();
-     * ic.bind ("jdbc/rowset/MySyncProvider", p);
-     * </pre>
-     * </ul>
-     * Furthermore, an initial JNDI context should be set with the
-     * <code>SyncFactory</code> using the <code>setJNDIContext</code> method.
-     * The <code>SyncFactory</code> leverages this context to search for
-     * available <code>SyncProvider</code> objects bound to the JNDI
-     * context and its child nodes.
-     *
-     * @param providerID A <code>String</code> object with the unique ID of the
-     *             synchronization provider being registered
-     * @throws SyncFactoryException if an attempt is made to supply an empty
-     *         or null provider name
-     * @see #setJNDIContext
-     */
-    public static synchronized void registerProvider(String providerID)
-            throws SyncFactoryException {
-
-        ProviderImpl impl = new ProviderImpl();
-        impl.setClassname(providerID);
-        initMapIfNecessary();
-        implementations.put(providerID, impl);
-
-    }
-
-    /**
-     * Returns the <code>SyncFactory</code> singleton.
-     *
-     * @return the <code>SyncFactory</code> instance
-     */
-    public static SyncFactory getSyncFactory() {
-        /*
-         * Using Initialization on Demand Holder idiom as
-         * Effective Java 2nd Edition,ITEM 71, indicates it is more performant
-         * than the Double-Check Locking idiom.
-         */
-        return SyncFactoryHolder.factory;
-    }
-
-    /**
-     * Removes the designated currently registered synchronization provider from the
-     * Factory SPI register.
-     *
-     * @param providerID The unique-id of the synchronization provider
-     * @throws SyncFactoryException If an attempt is made to
-     * unregister a SyncProvider implementation that was not registered.
-     */
-    public static synchronized void unregisterProvider(String providerID)
-            throws SyncFactoryException {
-        initMapIfNecessary();
-        if (implementations.containsKey(providerID)) {
-            implementations.remove(providerID);
-        }
-    }
-    private static String colon = ":";
-    private static String strFileSep = "/";
-
-    private static synchronized void initMapIfNecessary() throws SyncFactoryException {
-
-        // Local implementation class names and keys from Properties
-        // file, translate names into Class objects using Class.forName
-        // and store mappings
-        Properties properties = new Properties();
-
-        if (implementations == null) {
-            implementations = new Hashtable();
-
-            try {
-
-                // check if user is supplying his Synchronisation Provider
-                // Implementation if not using Oracle's implementation.
-                // properties.load(new FileInputStream(ROWSET_PROPERTIES));
-
-                // The rowset.properties needs to be in jdk/jre/lib when
-                // integrated with jdk.
-                // else it should be picked from -D option from command line.
-
-                // -Drowset.properties will add to standard properties. Similar
-                // keys will over-write
-
-                /*
-                 * Dependent on application
-                 */
-                String strRowsetProperties = System.getProperty("rowset.properties");
-                if (strRowsetProperties != null) {
-                    // Load user's implementation of SyncProvider
-                    // here. -Drowset.properties=/abc/def/pqr.txt
-                    ROWSET_PROPERTIES = strRowsetProperties;
-                    try (FileInputStream fis = new FileInputStream(ROWSET_PROPERTIES)) {
-                        properties.load(fis);
-                    }
-                    parseProperties(properties);
-                }
-
-                /*
-                 * Always available
-                 */
-                ROWSET_PROPERTIES = "javax" + strFileSep + "sql" +
-                        strFileSep + "rowset" + strFileSep +
-                        "rowset.properties";
-
-                ClassLoader cl = Thread.currentThread().getContextClassLoader();
-
-                try (InputStream stream =
-                         (cl == null) ? ClassLoader.getSystemResourceAsStream(ROWSET_PROPERTIES)
-                                      : cl.getResourceAsStream(ROWSET_PROPERTIES)) {
-                    if (stream == null) {
-                        throw new SyncFactoryException(
-                            "Resource " + ROWSET_PROPERTIES + " not found");
-                    }
-                    properties.load(stream);
-                }
-
-                parseProperties(properties);
-
-            // removed else, has properties should sum together
-
-            } catch (FileNotFoundException e) {
-                throw new SyncFactoryException("Cannot locate properties file: " + e);
-            } catch (IOException e) {
-                throw new SyncFactoryException("IOException: " + e);
-            }
-
-            /*
-             * Now deal with -Drowset.provider.classname
-             * load additional properties from -D command line
-             */
-            properties.clear();
-            String providerImpls = System.getProperty(ROWSET_SYNC_PROVIDER);
-
-            if (providerImpls != null) {
-                int i = 0;
-                if (providerImpls.indexOf(colon) > 0) {
-                    StringTokenizer tokenizer = new StringTokenizer(providerImpls, colon);
-                    while (tokenizer.hasMoreElements()) {
-                        properties.put(ROWSET_SYNC_PROVIDER + "." + i, tokenizer.nextToken());
-                        i++;
-                    }
-                } else {
-                    properties.put(ROWSET_SYNC_PROVIDER, providerImpls);
-                }
-                parseProperties(properties);
-            }
-        }
-    }
-
-    /**
-     * The internal debug switch.
-     */
-    private static boolean debug = false;
-    /**
-     * Internal registry count for the number of providers contained in the
-     * registry.
-     */
-    private static int providerImplIndex = 0;
-
-    /**
-     * Internal handler for all standard property parsing. Parses standard
-     * ROWSET properties and stores lazy references into the the internal registry.
-     */
-    private static void parseProperties(Properties p) {
-
-        ProviderImpl impl = null;
-        String key = null;
-        String[] propertyNames = null;
-
-        for (Enumeration e = p.propertyNames(); e.hasMoreElements();) {
-
-            String str = (String) e.nextElement();
-
-            int w = str.length();
-
-            if (str.startsWith(SyncFactory.ROWSET_SYNC_PROVIDER)) {
-
-                impl = new ProviderImpl();
-                impl.setIndex(providerImplIndex++);
-
-                if (w == (SyncFactory.ROWSET_SYNC_PROVIDER).length()) {
-                    // no property index has been set.
-                    propertyNames = getPropertyNames(false);
-                } else {
-                    // property index has been set.
-                    propertyNames = getPropertyNames(true, str.substring(w - 1));
-                }
-
-                key = p.getProperty(propertyNames[0]);
-                impl.setClassname(key);
-                impl.setVendor(p.getProperty(propertyNames[1]));
-                impl.setVersion(p.getProperty(propertyNames[2]));
-                implementations.put(key, impl);
-            }
-        }
-    }
-
-    /**
-     * Used by the parseProperties methods to disassemble each property tuple.
-     */
-    private static String[] getPropertyNames(boolean append) {
-        return getPropertyNames(append, null);
-    }
-
-    /**
-     * Disassembles each property and its associated value. Also handles
-     * overloaded property names that contain indexes.
-     */
-    private static String[] getPropertyNames(boolean append,
-            String propertyIndex) {
-        String dot = ".";
-        String[] propertyNames =
-                new String[]{SyncFactory.ROWSET_SYNC_PROVIDER,
-            SyncFactory.ROWSET_SYNC_VENDOR,
-            SyncFactory.ROWSET_SYNC_PROVIDER_VERSION};
-        if (append) {
-            for (int i = 0; i < propertyNames.length; i++) {
-                propertyNames[i] = propertyNames[i] +
-                        dot +
-                        propertyIndex;
-            }
-            return propertyNames;
-        } else {
-            return propertyNames;
-        }
-    }
-
-    /**
-     * Internal debug method that outputs the registry contents.
-     */
-    private static void showImpl(ProviderImpl impl) {
-        System.out.println("Provider implementation:");
-        System.out.println("Classname: " + impl.getClassname());
-        System.out.println("Vendor: " + impl.getVendor());
-        System.out.println("Version: " + impl.getVersion());
-        System.out.println("Impl index: " + impl.getIndex());
-    }
-
-    /**
-     * Returns the <code>SyncProvider</code> instance identified by <i>providerID</i>.
-     *
-     * @param providerID the unique identifier of the provider
-     * @return a <code>SyncProvider</code> implementation
-     * @throws SyncFactoryException If the SyncProvider cannot be found,
-     * the providerID is {@code null}, or
-     * some error was encountered when trying to invoke this provider.
-     */
-    public static SyncProvider getInstance(String providerID)
-            throws SyncFactoryException {
-
-        if(providerID == null) {
-            throw new SyncFactoryException("The providerID cannot be null");
-        }
-
-        initMapIfNecessary(); // populate HashTable
-        initJNDIContext();    // check JNDI context for any additional bindings
-
-        ProviderImpl impl = (ProviderImpl) implementations.get(providerID);
-
-        if (impl == null) {
-            // Requested SyncProvider is unavailable. Return default provider.
-            return new com.sun.rowset.providers.RIOptimisticProvider();
-        }
-
-        // Attempt to invoke classname from registered SyncProvider list
-        Class c = null;
-        try {
-            ClassLoader cl = Thread.currentThread().getContextClassLoader();
-
-            /**
-             * The SyncProvider implementation of the user will be in
-             * the classpath. We need to find the ClassLoader which loads
-             * this SyncFactory and try to laod the SyncProvider class from
-             * there.
-             **/
-            c = Class.forName(providerID, true, cl);
-
-            if (c != null) {
-                return (SyncProvider) c.newInstance();
-            } else {
-                return new com.sun.rowset.providers.RIOptimisticProvider();
-            }
-
-        } catch (IllegalAccessException e) {
-            throw new SyncFactoryException("IllegalAccessException: " + e.getMessage());
-        } catch (InstantiationException e) {
-            throw new SyncFactoryException("InstantiationException: " + e.getMessage());
-        } catch (ClassNotFoundException e) {
-            throw new SyncFactoryException("ClassNotFoundException: " + e.getMessage());
-        }
-    }
-
-    /**
-     * Returns an Enumeration of currently registered synchronization
-     * providers.  A <code>RowSet</code> implementation may use any provider in
-     * the enumeration as its <code>SyncProvider</code> object.
-     * <p>
-     * At a minimum, the reference synchronization provider allowing
-     * RowSet content data to be stored using a JDBC driver should be
-     * possible.
-     *
-     * @return Enumeration  A enumeration of available synchronization
-     * providers that are registered with this Factory
-     */
-    public static Enumeration<SyncProvider> getRegisteredProviders()
-            throws SyncFactoryException {
-        initMapIfNecessary();
-        // return a collection of classnames
-        // of type SyncProvider
-        return implementations.elements();
-    }
-
-    /**
-     * Sets the logging object to be used by the <code>SyncProvider</code>
-     * implementation provided by the <code>SyncFactory</code>. All
-     * <code>SyncProvider</code> implementations can log their events to
-     * this object and the application can retrieve a handle to this
-     * object using the <code>getLogger</code> method.
-     * <p>
-     * This method checks to see that there is an {@code SQLPermission}
-     * object  which grants the permission {@code setSyncFactory}
-     * before allowing the method to succeed.  If a
-     * {@code SecurityManager} exists and its
-     * {@code checkPermission} method denies calling {@code setLogger},
-     * this method throws a
-     * {@code java.lang.SecurityException}.
-     *
-     * @param logger A Logger object instance
-     * @throws java.lang.SecurityException if a security manager exists and its
-     *   {@code checkPermission} method denies calling {@code setLogger}
-     * @throws NullPointerException if the logger is null
-     * @see SecurityManager#checkPermission
-     */
-    public static void setLogger(Logger logger) {
-
-        SecurityManager sec = System.getSecurityManager();
-        if (sec != null) {
-            sec.checkPermission(SET_SYNCFACTORY_PERMISSION);
-        }
-
-        if(logger == null){
-            throw new NullPointerException("You must provide a Logger");
-        }
-        rsLogger = logger;
-    }
-
-    /**
-     * Sets the logging object that is used by <code>SyncProvider</code>
-     * implementations provided by the <code>SyncFactory</code> SPI. All
-     * <code>SyncProvider</code> implementations can log their events
-     * to this object and the application can retrieve a handle to this
-     * object using the <code>getLogger</code> method.
-     * <p>
-     * This method checks to see that there is an {@code SQLPermission}
-     * object  which grants the permission {@code setSyncFactory}
-     * before allowing the method to succeed.  If a
-     * {@code SecurityManager} exists and its
-     * {@code checkPermission} method denies calling {@code setLogger},
-     * this method throws a
-     * {@code java.lang.SecurityException}.
-     *
-     * @param logger a Logger object instance
-     * @param level a Level object instance indicating the degree of logging
-     * required
-     * @throws java.lang.SecurityException if a security manager exists and its
-     *   {@code checkPermission} method denies calling {@code setLogger}
-     * @throws java.util.logging.LoggingPermission if a security manager exists and its
-     *   {@code checkPermission} method denies calling {@code setLevel}
-     * @throws NullPointerException if the logger is null
-     * @see SecurityManager#checkPermission
-     * @see LoggingPermission
-     */
-    public static void setLogger(Logger logger, Level level) {
-        // singleton
-        SecurityManager sec = System.getSecurityManager();
-        if (sec != null) {
-            sec.checkPermission(SET_SYNCFACTORY_PERMISSION);
-        }
-
-        if(logger == null){
-            throw new NullPointerException("You must provide a Logger");
-        }
-        logger.setLevel(level);
-        rsLogger = logger;
-    }
-
-    /**
-     * Returns the logging object for applications to retrieve
-     * synchronization events posted by SyncProvider implementations.
-     *
-     * @throws SyncFactoryException if no logging object has been set.
-     */
-    public static Logger getLogger() throws SyncFactoryException {
-
-        Logger result = rsLogger;
-        // only one logger per session
-        if (result == null) {
-            throw new SyncFactoryException("(SyncFactory) : No logger has been set");
-        }
-
-        return result;
-    }
-
-    /**
-     * Sets the initial JNDI context from which SyncProvider implementations
-     * can be retrieved from a JNDI namespace
-     * <p>
-     *  This method checks to see that there is an {@code SQLPermission}
-     * object  which grants the permission {@code setSyncFactory}
-     * before allowing the method to succeed.  If a
-     * {@code SecurityManager} exists and its
-     * {@code checkPermission} method denies calling {@code setJNDIContext},
-     * this method throws a
-     * {@code java.lang.SecurityException}.
-     *
-     * @param ctx a valid JNDI context
-     * @throws SyncFactoryException if the supplied JNDI context is null
-     * @throws java.lang.SecurityException if a security manager exists and its
-     *  {@code checkPermission} method denies calling {@code setJNDIContext}
-     * @see SecurityManager#checkPermission
-     */
-    public static synchronized void setJNDIContext(javax.naming.Context ctx)
-            throws SyncFactoryException {
-        SecurityManager sec = System.getSecurityManager();
-        if (sec != null) {
-            sec.checkPermission(SET_SYNCFACTORY_PERMISSION);
-        }
-        if (ctx == null) {
-            throw new SyncFactoryException("Invalid JNDI context supplied");
-        }
-        ic = ctx;
-    }
-
-    /**
-     * Controls JNDI context initialization.
-     *
-     * @throws SyncFactoryException if an error occurs parsing the JNDI context
-     */
-    private static synchronized void initJNDIContext() throws SyncFactoryException {
-
-        if ((ic != null) && (lazyJNDICtxRefresh == false)) {
-            try {
-                parseProperties(parseJNDIContext());
-                lazyJNDICtxRefresh = true; // touch JNDI namespace once.
-            } catch (NamingException e) {
-                e.printStackTrace();
-                throw new SyncFactoryException("SPI: NamingException: " + e.getExplanation());
-            } catch (Exception e) {
-                e.printStackTrace();
-                throw new SyncFactoryException("SPI: Exception: " + e.getMessage());
-            }
-        }
-    }
-    /**
-     * Internal switch indicating whether the JNDI namespace should be re-read.
-     */
-    private static boolean lazyJNDICtxRefresh = false;
-
-    /**
-     * Parses the set JNDI Context and passes bindings to the enumerateBindings
-     * method when complete.
-     */
-    private static Properties parseJNDIContext() throws NamingException {
-
-        NamingEnumeration bindings = ic.listBindings("");
-        Properties properties = new Properties();
-
-        // Hunt one level below context for available SyncProvider objects
-        enumerateBindings(bindings, properties);
-
-        return properties;
-    }
-
-    /**
-     * Scans each binding on JNDI context and determines if any binding is an
-     * instance of SyncProvider, if so, add this to the registry and continue to
-     * scan the current context using a re-entrant call to this method until all
-     * bindings have been enumerated.
-     */
-    private static void enumerateBindings(NamingEnumeration bindings,
-            Properties properties) throws NamingException {
-
-        boolean syncProviderObj = false; // move to parameters ?
-
-        try {
-            Binding bd = null;
-            Object elementObj = null;
-            String element = null;
-            while (bindings.hasMore()) {
-                bd = (Binding) bindings.next();
-                element = bd.getName();
-                elementObj = bd.getObject();
-
-                if (!(ic.lookup(element) instanceof Context)) {
-                    // skip directories/sub-contexts
-                    if (ic.lookup(element) instanceof SyncProvider) {
-                        syncProviderObj = true;
-                    }
-                }
-
-                if (syncProviderObj) {
-                    SyncProvider sync = (SyncProvider) elementObj;
-                    properties.put(SyncFactory.ROWSET_SYNC_PROVIDER,
-                            sync.getProviderID());
-                    syncProviderObj = false; // reset
-                }
-
-            }
-        } catch (javax.naming.NotContextException e) {
-            bindings.next();
-            // Re-entrant call into method
-            enumerateBindings(bindings, properties);
-        }
-    }
-
-    /**
-     * Lazy initialization Holder class used by {@code getSyncFactory}
-     */
-    private static class SyncFactoryHolder {
-        static final SyncFactory factory = new SyncFactory();
-    }
-}
-
-/**
- * Internal class that defines the lazy reference construct for each registered
- * SyncProvider implementation.
- */
-class ProviderImpl extends SyncProvider {
-
-    private String className = null;
-    private String vendorName = null;
-    private String ver = null;
-    private int index;
-
-    public void setClassname(String classname) {
-        className = classname;
-    }
-
-    public String getClassname() {
-        return className;
-    }
-
-    public void setVendor(String vendor) {
-        vendorName = vendor;
-    }
-
-    public String getVendor() {
-        return vendorName;
-    }
-
-    public void setVersion(String providerVer) {
-        ver = providerVer;
-    }
-
-    public String getVersion() {
-        return ver;
-    }
-
-    public void setIndex(int i) {
-        index = i;
-    }
-
-    public int getIndex() {
-        return index;
-    }
-
-    public int getDataSourceLock() throws SyncProviderException {
-
-        int dsLock = 0;
-        try {
-            dsLock = SyncFactory.getInstance(className).getDataSourceLock();
-        } catch (SyncFactoryException sfEx) {
-
-            throw new SyncProviderException(sfEx.getMessage());
-        }
-
-        return dsLock;
-    }
-
-    public int getProviderGrade() {
-
-        int grade = 0;
-
-        try {
-            grade = SyncFactory.getInstance(className).getProviderGrade();
-        } catch (SyncFactoryException sfEx) {
-            //
-        }
-
-        return grade;
-    }
-
-    public String getProviderID() {
-        return className;
-    }
-
-    /*
-    public javax.sql.RowSetInternal getRowSetInternal() {
-    try
-    {
-    return SyncFactory.getInstance(className).getRowSetInternal();
-    } catch(SyncFactoryException sfEx) {
-    //
-    }
-    }
-     */
-    public javax.sql.RowSetReader getRowSetReader() {
-
-        RowSetReader rsReader = null;
-
-        try {
-            rsReader = SyncFactory.getInstance(className).getRowSetReader();
-        } catch (SyncFactoryException sfEx) {
-            //
-        }
-
-        return rsReader;
-
-    }
-
-    public javax.sql.RowSetWriter getRowSetWriter() {
-
-        RowSetWriter rsWriter = null;
-        try {
-            rsWriter = SyncFactory.getInstance(className).getRowSetWriter();
-        } catch (SyncFactoryException sfEx) {
-            //
-        }
-
-        return rsWriter;
-    }
-
-    public void setDataSourceLock(int param)
-            throws SyncProviderException {
-
-        try {
-            SyncFactory.getInstance(className).setDataSourceLock(param);
-        } catch (SyncFactoryException sfEx) {
-
-            throw new SyncProviderException(sfEx.getMessage());
-        }
-    }
-
-    public int supportsUpdatableView() {
-
-        int view = 0;
-
-        try {
-            view = SyncFactory.getInstance(className).supportsUpdatableView();
-        } catch (SyncFactoryException sfEx) {
-            //
-        }
-
-        return view;
-    }
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/spi/SyncFactoryException.java b/ojluni/src/main/java/javax/sql/rowset/spi/SyncFactoryException.java
deleted file mode 100755
index c904c9e..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/spi/SyncFactoryException.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package javax.sql.rowset.spi;
-
-import java.sql.SQLException;
-
-/**
- * Indicates an error with <code>SyncFactory</code> mechanism. A disconnected
- * RowSet implementation cannot be used  without a <code>SyncProvider</code>
- * being successfully instantiated
- *
- * @author Jonathan Bruce
- * @see javax.sql.rowset.spi.SyncFactory
- * @see javax.sql.rowset.spi.SyncFactoryException
- */
-public class SyncFactoryException extends java.sql.SQLException {
-
-    /**
-     * Creates new <code>SyncFactoryException</code> without detail message.
-     */
-    public SyncFactoryException() {
-    }
-
-    /**
-     * Constructs an <code>SyncFactoryException</code> with the specified
-     * detail message.
-     *
-     * @param msg the detail message.
-     */
-    public SyncFactoryException(String msg) {
-        super(msg);
-    }
-
-    static final long serialVersionUID = -4354595476433200352L;
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/spi/SyncProvider.java b/ojluni/src/main/java/javax/sql/rowset/spi/SyncProvider.java
deleted file mode 100755
index 8142599..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/spi/SyncProvider.java
+++ /dev/null
@@ -1,430 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-package javax.sql.rowset.spi;
-
-import javax.sql.*;
-
-/**
- * The synchronization mechanism that provides reader/writer capabilities for
- * disconnected <code>RowSet</code> objects.
- * A <code>SyncProvider</code> implementation is a class that extends the
- * <code>SyncProvider</code> abstract class.
- * <P>
- * A <code>SyncProvider</code> implementation is
- * identified by a unique ID, which is its fully qualified class name.
- * This name must be registered with the
- * <code>SyncFactory</code> SPI, thus making the implementation available to
- * all <code>RowSet</code> implementations.
- * The factory mechanism in the reference implementation uses this name to instantiate
- * the implementation, which can then provide a <code>RowSet</code> object with its
- * reader (a <code>javax.sql.RowSetReader</code> object) and its writer (a
- * <code>javax.sql.RowSetWriter</code> object).
- * <P>
- * The Jdbc <code>RowSet</code> Implementations specification provides two
- * reference implementations of the <code>SyncProvider</code> abstract class:
- * <code>RIOptimisticProvider</code> and <code>RIXMLProvider</code>.
- * The <code>RIOptimisticProvider</code> can set any <code>RowSet</code>
- * implementation with a <code>RowSetReader</code> object and a
- * <code>RowSetWriter</code> object.  However, only the <code>RIXMLProvider</code>
- * implementation can set an <code>XmlReader</code> object and an
- * <code>XmlWriter</code> object. A <code>WebRowSet</code> object uses the
- * <code>XmlReader</code> object to read data in XML format to populate itself with that
- * data.  It uses the <code>XmlWriter</code> object to write itself to a stream or
- * <code>java.io.Writer</code> object in XML format.
- * <P>
- * <h3>1.0 Naming Convention for Implementations</h3>
- * As a guide  to naming <code>SyncProvider</code>
- * implementations, the following should be noted:
- * <UL>
- * <li>The name for a <code>SyncProvider</code> implementation
- * is its fully qualified class name.
- * <li>It is recommended that vendors supply a
- * <code>SyncProvider</code> implementation in a package named <code>providers</code>.
- * </UL>
- * <p>
- * For instance, if a vendor named Fred, Inc. offered a
- * <code>SyncProvider</code> implementation, you could have the following:
- * <PRE>
- *     Vendor name:  Fred, Inc.
- *     Domain name of vendor:  com.fred
- *     Package name:  com.fred.providers
- *     SyncProvider implementation class name:  HighAvailabilityProvider
- *
- *     Fully qualified class name of SyncProvider implementation:
- *                        com.fred.providers.HighAvailabilityProvider
- * </PRE>
- * <P>
- * The following line of code uses the fully qualified name to register
- * this implementation with the <code>SyncFactory</code> static instance.
- * <PRE>
- *     SyncFactory.registerProvider(
- *                          "com.fred.providers.HighAvailabilityProvider");
- * </PRE>
- * <P>
- * The default <code>SyncProvider</code> object provided with the reference
- * implementation uses the following name:
- * <pre>
- *     com.sun.rowset.providers.RIOptimisticProvider
- * </pre>
- * <p>
- * A vendor can register a <code>SyncProvider</code> implementation class name
- * with Oracle Corporation by sending email to jdbc@sun.com.
- * Oracle will maintain a database listing the
- * available <code>SyncProvider</code> implementations for use with compliant
- * <code>RowSet</code> implementations.  This database will be similar to the
- * one already maintained to list available JDBC drivers.
- * <P>
- * Vendors should refer to the reference implementation synchronization
- * providers for additional guidance on how to implement a new
- * <code>SyncProvider</code> implementation.
- *
- * <h3>2.0 How a <code>RowSet</code> Object Gets Its Provider</h3>
- *
- * A disconnected <code>Rowset</code> object may get access to a
- * <code>SyncProvider</code> object in one of the following two ways:
- * <UL>
- *  <LI>Using a constructor<BR>
- *      <PRE>
- *       CachedRowSet crs = new CachedRowSet(
- *                  "com.fred.providers.HighAvailabilitySyncProvider");
- *      </PRE>
- *  <LI>Using the <code>setSyncProvider</code> method
- *      <PRE>
- *       CachedRowSet crs = new CachedRowSet();
- *       crs.setSyncProvider("com.fred.providers.HighAvailabilitySyncProvider");
- *      </PRE>
-
- * </UL>
- * <p>
- * By default, the reference implementations of the <code>RowSet</code> synchronization
- * providers are always available to the Java platform.
- * If no other pluggable synchronization providers have been correctly
- * registered, the <code>SyncFactory</code> will automatically generate
- * an instance of the default <code>SyncProvider</code> reference implementation.
- * Thus, in the preceding code fragment, if no implementation named
- * <code>com.fred.providers.HighAvailabilitySyncProvider</code> has been
- * registered with the <code>SyncFactory</code> instance, <i>crs</i> will be
- * assigned the default provider in the reference implementation, which is
- * <code>com.sun.rowset.providers.RIOptimisticProvider</code>.
- * <p>
- * <h3>3.0 Violations and Synchronization Issues</h3>
- * If an update between a disconnected <code>RowSet</code> object
- * and a data source violates
- * the original query or the underlying data source constraints, this will
- * result in undefined behavior for all disconnected <code>RowSet</code> implementations
- * and their designated <code>SyncProvider</code> implementations.
- * Not defining the behavior when such violations occur offers greater flexibility
- * for a <code>SyncProvider</code>
- * implementation to determine its own best course of action.
- * <p>
- * A <code>SyncProvider</code> implementation
- * may choose to implement a specific handler to
- * handle a subset of query violations.
- * However if an original query violation or a more general data source constraint
- * violation is not handled by the <code>SyncProvider</code> implementation,
- * all <code>SyncProvider</code>
- * objects must throw a <code>SyncProviderException</code>.
- * <p>
- * <h3>4.0 Updatable SQL VIEWs</h3>
- * It is possible for any disconnected or connected <code>RowSet</code> object to be populated
- * from an SQL query that is formulated originally from an SQL <code>VIEW</code>.
- * While in many cases it is possible for an update to be performed to an
- * underlying view, such an update requires additional metadata, which may vary.
- * The <code>SyncProvider</code> class provides two constants to indicate whether
- * an implementation supports updating an SQL <code>VIEW</code>.
- * <ul>
- * <li><code><b>NONUPDATABLE_VIEW_SYNC</b></code> - Indicates that a <code>SyncProvider</code>
- * implementation does not support synchronization with an SQL <code>VIEW</code> as the
- * underlying source of data for the <code>RowSet</code> object.
- * <li><code><b>UPDATABLE_VIEW_SYNC</b></code> - Indicates that a
- * <code>SyncProvider</code> implementation
- * supports synchronization with an SQL <code>VIEW</code> as the underlying source
- * of data.
- * </ul>
- * <P>
- * The default is for a <code>RowSet</code> object not to be updatable if it was
- * populated with data from an SQL <code>VIEW</code>.
- * <P>
- * <h3>5.0 <code>SyncProvider</code> Constants</h3>
- * The <code>SyncProvider</code> class provides three sets of constants that
- * are used as return values or parameters for <code>SyncProvider</code> methods.
- * <code>SyncProvider</code> objects may be implemented to perform synchronization
- * between a <code>RowSet</code> object and its underlying data source with varying
- * degrees of of care. The first group of constants indicate how synchronization
- * is handled. For example, <code>GRADE_NONE</code> indicates that a
- * <code>SyncProvider</code> object will not take any care to see what data is
- * valid and will simply write the <code>RowSet</code> data to the data source.
- * <code>GRADE_MODIFIED_AT_COMMIT</code> indicates that the provider will check
- * only modified data for validity.  Other grades check all data for validity
- * or set locks when data is modified or loaded.
- * <OL>
- *  <LI>Constants to indicate the synchronization grade of a
- *     <code>SyncProvider</code> object
- *   <UL>
- *    <LI>SyncProvider.GRADE_NONE
- *    <LI>SyncProvider.GRADE_MODIFIED_AT_COMMIT
- *    <LI>SyncProvider.GRADE_CHECK_ALL_AT_COMMIT
- *    <LI>SyncProvider.GRADE_LOCK_WHEN_MODIFIED
- *    <LI>SyncProvider.GRADE_LOCK_WHEN_LOADED
- *   </UL>
- *  <LI>Constants to indicate what locks are set on the data source
- *   <UL>
- *     <LI>SyncProvider.DATASOURCE_NO_LOCK
- *     <LI>SyncProvider.DATASOURCE_ROW_LOCK
- *     <LI>SyncProvider.DATASOURCE_TABLE_LOCK
- *     <LI>SyncProvider.DATASOURCE_DB_LOCK
- *   </UL>
- *  <LI>Constants to indicate whether a <code>SyncProvider</code> object can
- *       perform updates to an SQL <code>VIEW</code> <BR>
- *       These constants are explained in the preceding section (4.0).
- *   <UL>
- *     <LI>SyncProvider.UPDATABLE_VIEW_SYNC
- *     <LI>SyncProvider.NONUPDATABLE_VIEW_SYNC
- *   </UL>
- * </OL>
- *
- * @author Jonathan Bruce
- * @see javax.sql.rowset.spi.SyncFactory
- * @see javax.sql.rowset.spi.SyncFactoryException
- */
-public abstract class SyncProvider {
-
-   /**
-    * Creates a default <code>SyncProvider</code> object.
-    */
-    public SyncProvider() {
-    }
-
-    /**
-     * Returns the unique identifier for this <code>SyncProvider</code> object.
-     *
-     * @return a <code>String</code> object with the fully qualified class name of
-     *         this <code>SyncProvider</code> object
-     */
-    public abstract String getProviderID();
-
-    /**
-     * Returns a <code>javax.sql.RowSetReader</code> object, which can be used to
-     * populate a <code>RowSet</code> object with data.
-     *
-     * @return a <code>javax.sql.RowSetReader</code> object
-     */
-    public abstract RowSetReader getRowSetReader();
-
-    /**
-     * Returns a <code>javax.sql.RowSetWriter</code> object, which can be
-     * used to write a <code>RowSet</code> object's data back to the
-     * underlying data source.
-     *
-     * @return a <code>javax.sql.RowSetWriter</code> object
-     */
-    public abstract RowSetWriter getRowSetWriter();
-
-    /**
-     * Returns a constant indicating the
-     * grade of synchronization a <code>RowSet</code> object can expect from
-     * this <code>SyncProvider</code> object.
-     *
-     * @return an int that is one of the following constants:
-     *           SyncProvider.GRADE_NONE,
-     *           SyncProvider.GRADE_CHECK_MODIFIED_AT_COMMIT,
-     *           SyncProvider.GRADE_CHECK_ALL_AT_COMMIT,
-     *           SyncProvider.GRADE_LOCK_WHEN_MODIFIED,
-     *           SyncProvider.GRADE_LOCK_WHEN_LOADED
-     */
-    public abstract int getProviderGrade();
-
-
-    /**
-     * Sets a lock on the underlying data source at the level indicated by
-     * <i>datasource_lock</i>. This should cause the
-     * <code>SyncProvider</code> to adjust its behavior by increasing or
-     * decreasing the level of optimism it provides for a successful
-     * synchronization.
-     *
-     * @param datasource_lock one of the following constants indicating the severity
-     *           level of data source lock required:
-     * <pre>
-     *           SyncProvider.DATASOURCE_NO_LOCK,
-     *           SyncProvider.DATASOURCE_ROW_LOCK,
-     *           SyncProvider.DATASOURCE_TABLE_LOCK,
-     *           SyncProvider.DATASOURCE_DB_LOCK,
-     * </pre>
-     * @throws SyncProviderException if an unsupported data source locking level
-     *           is set.
-     * @see #getDataSourceLock
-     */
-    public abstract void setDataSourceLock(int datasource_lock)
-        throws SyncProviderException;
-
-    /**
-     * Returns the current data source lock severity level active in this
-     * <code>SyncProvider</code> implementation.
-     *
-     * @return a constant indicating the current level of data source lock
-     *        active in this <code>SyncProvider</code> object;
-     *         one of the following:
-     * <pre>
-     *           SyncProvider.DATASOURCE_NO_LOCK,
-     *           SyncProvider.DATASOURCE_ROW_LOCK,
-     *           SyncProvider.DATASOURCE_TABLE_LOCK,
-     *           SyncProvider.DATASOURCE_DB_LOCK
-     * </pre>
-     * @throws SyncProviderExceptiom if an error occurs determining the data
-     *        source locking level.
-     * @see #setDataSourceLock
-
-     */
-    public abstract int getDataSourceLock()
-        throws SyncProviderException;
-
-    /**
-     * Returns whether this <code>SyncProvider</code> implementation
-     * can perform synchronization between a <code>RowSet</code> object
-     * and the SQL <code>VIEW</code> in the data source from which
-     * the <code>RowSet</code> object got its data.
-     *
-     * @return an <code>int</code> saying whether this <code>SyncProvider</code>
-     *         object supports updating an SQL <code>VIEW</code>; one of the
-     *         following:
-     *            SyncProvider.UPDATABLE_VIEW_SYNC,
-     *            SyncProvider.NONUPDATABLE_VIEW_SYNC
-     */
-    public abstract int supportsUpdatableView();
-
-    /**
-     * Returns the release version of this <code>SyncProvider</code> instance.
-     *
-     * @return a <code>String</code> detailing the release version of the
-     *     <code>SyncProvider</code> implementation
-     */
-    public abstract String getVersion();
-
-    /**
-     * Returns the vendor name of this <code>SyncProvider</code> instance
-     *
-     * @return a <code>String</code> detailing the vendor name of this
-     *     <code>SyncProvider</code> implementation
-     */
-    public abstract String getVendor();
-
-    /*
-     * Standard description of synchronization grades that a SyncProvider
-     * could provide.
-     */
-
-    /**
-     * Indicates that no synchronization with the originating data source is
-     * provided. A <code>SyncProvider</code>
-     * implementation returning this grade will simply attempt to write
-     * updates in the <code>RowSet</code> object to the underlying data
-     * source without checking the validity of any data.
-     *
-     */
-    public static final int GRADE_NONE = 1;
-
-    /**
-     * Indicates a low level optimistic synchronization grade with
-     * respect to the originating data source.
-     *
-     * A <code>SyncProvider</code> implementation
-     * returning this grade will check only rows that have changed.
-     *
-     */
-    public static final int GRADE_CHECK_MODIFIED_AT_COMMIT = 2;
-
-    /**
-     * Indicates a high level optimistic synchronization grade with
-     * respect to the originating data source.
-     *
-     * A <code>SyncProvider</code> implementation
-     * returning this grade will check all rows, including rows that have not
-     * changed.
-     */
-    public static final int GRADE_CHECK_ALL_AT_COMMIT = 3;
-
-    /**
-     * Indicates a pessimistic synchronization grade with
-     * respect to the originating data source.
-     *
-     * A <code>SyncProvider</code>
-     * implementation returning this grade will lock the row in the originating
-     * data source.
-     */
-    public static final int GRADE_LOCK_WHEN_MODIFIED = 4;
-
-    /**
-     * Indicates the most pessimistic synchronization grade with
-     * respect to the originating
-     * data source. A <code>SyncProvider</code>
-     * implementation returning this grade will lock the entire view and/or
-     * table affected by the original statement used to populate a
-     * <code>RowSet</code> object.
-     */
-    public static final int GRADE_LOCK_WHEN_LOADED = 5;
-
-    /**
-     * Indicates that no locks remain on the originating data source. This is the default
-     * lock setting for all <code>SyncProvider</code> implementations unless
-     * otherwise directed by a <code>RowSet</code> object.
-     */
-    public static final int DATASOURCE_NO_LOCK = 1;
-
-    /**
-     * Indicates that a lock is placed on the rows that are touched by the original
-     * SQL statement used to populate the <code>RowSet</code> object
-     * that is using this <code>SyncProvider</code> object.
-     */
-    public static final int DATASOURCE_ROW_LOCK = 2;
-
-    /**
-     * Indicates that a lock is placed on all tables that are touched by the original
-     * SQL statement used to populate the <code>RowSet</code> object
-     * that is using this <code>SyncProvider</code> object.
-     */
-    public static final int DATASOURCE_TABLE_LOCK = 3;
-
-    /**
-     * Indicates that a lock is placed on the entire data source that is the source of
-     * data for the <code>RowSet</code> object
-     * that is using this <code>SyncProvider</code> object.
-     */
-    public static final int DATASOURCE_DB_LOCK = 4;
-
-    /**
-     * Indicates that a <code>SyncProvider</code> implementation
-     * supports synchronization between a <code>RowSet</code> object and
-     * the SQL <code>VIEW</code> used to populate it.
-     */
-    public static final int UPDATABLE_VIEW_SYNC = 5;
-
-    /**
-     * Indicates that a <code>SyncProvider</code> implementation
-     * does <B>not</B> support synchronization between a <code>RowSet</code>
-     * object and the SQL <code>VIEW</code> used to populate it.
-     */
-    public static final int NONUPDATABLE_VIEW_SYNC = 6;
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/spi/SyncProviderException.java b/ojluni/src/main/java/javax/sql/rowset/spi/SyncProviderException.java
deleted file mode 100755
index 57f9930..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/spi/SyncProviderException.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.
- */
-
-package javax.sql.rowset.spi;
-
-import java.sql.SQLException;
-import javax.sql.rowset.*;
-
-/**
- * Indicates an error with the <code>SyncProvider</code> mechanism. This exception
- * is created by a <code>SyncProvider</code> abstract class extension if it
- * encounters violations in reading from or writing to the originating data source.
- * <P>
- * If it is implemented to do so, the <code>SyncProvider</code> object may also create a
- * <code>SyncResolver</code> object and either initialize the <code>SyncProviderException</code>
- * object with it at construction time or set it with the <code>SyncProvider</code> object at
- * a later time.
- * <P>
- * The method <code>acceptChanges</code> will throw this exception after the writer
- * has finished checking for conflicts and has found one or more conflicts. An
- * application may catch a <code>SyncProviderException</code> object and call its
- * <code>getSyncResolver</code> method to get its <code>SyncResolver</code> object.
- * See the code fragment in the interface comment for
- * <a href="SyncResolver.html"><code>SyncResolver</code></a> for an example.
- * This <code>SyncResolver</code> object will mirror the <code>RowSet</code>
- * object that generated the exception, except that it will contain only the values
- * from the data source that are in conflict.  All other values in the <code>SyncResolver</code>
- * object will be <code>null</code>.
- * <P>
- * The <code>SyncResolver</code> object may be used to examine and resolve
- * each conflict in a row and then go to the next row with a conflict to
- * repeat the procedure.
- * <P>
- * A <code>SyncProviderException</code> object may or may not contain a description of the
- * condition causing the exception.  The inherited method <code>getMessage</code> may be
- * called to retrieve the description if there is one.
- *
- * @author Jonathan Bruce
- * @see javax.sql.rowset.spi.SyncFactory
- * @see javax.sql.rowset.spi.SyncResolver
- * @see javax.sql.rowset.spi.SyncFactoryException
- */
-public class SyncProviderException extends java.sql.SQLException {
-
-    /**
-     * The instance of <code>javax.sql.rowset.spi.SyncResolver</code> that
-     * this <code>SyncProviderException</code> object will return when its
-     * <code>getSyncResolver</code> method is called.
-     */
-     private SyncResolver syncResolver = null;
-
-    /**
-     * Creates a new <code>SyncProviderException</code> object without a detail message.
-     */
-    public SyncProviderException() {
-        super();
-    }
-
-    /**
-     * Constructs a <code>SyncProviderException</code> object with the specified
-     * detail message.
-     *
-     * @param msg the detail message
-     */
-    public SyncProviderException(String msg)  {
-        super(msg);
-    }
-
-    /**
-     * Constructs a <code>SyncProviderException</code> object with the specified
-     * <code>SyncResolver</code> instance.
-     *
-     * @param syncResolver the <code>SyncResolver</code> instance used to
-     *     to process the synchronization conflicts
-     * @throws IllegalArgumentException if the <code>SyncResolver</code> object
-     *     is <code>null</code>.
-     */
-    public SyncProviderException(SyncResolver syncResolver)  {
-        if (syncResolver == null) {
-            throw new IllegalArgumentException("Cannot instantiate a SyncProviderException " +
-                "with a null SyncResolver object");
-        } else {
-            this.syncResolver = syncResolver;
-        }
-    }
-
-    /**
-     * Retrieves the <code>SyncResolver</code> object that has been set for
-     * this <code>SyncProviderException</code> object, or
-     * if none has been set, an instance of the default <code>SyncResolver</code>
-     * implementation included in the reference implementation.
-     * <P>
-     * If a <code>SyncProviderException</code> object is thrown, an application
-     * may use this method to generate a <code>SyncResolver</code> object
-     * with which to resolve the conflict or conflicts that caused the
-     * exception to be thrown.
-     *
-     * @return the <code>SyncResolver</code> object set for this
-     *     <code>SyncProviderException</code> object or, if none has
-     *     been set, an instance of the default <code>SyncResolver</code>
-     *     implementation. In addition, the default <code>SyncResolver</code>
-     *     implementation is also returned if the <code>SyncResolver()</code> or
-     *     <code>SyncResolver(String)</code> constructors are used to instantiate
-     *     the <code>SyncResolver</code> instance.
-     */
-    public SyncResolver getSyncResolver() {
-        if (syncResolver != null) {
-            return syncResolver;
-        } else {
-            try {
-              syncResolver = new com.sun.rowset.internal.SyncResolverImpl();
-            } catch (SQLException sqle) {
-            }
-            return syncResolver;
-        }
-    }
-
-    /**
-     * Sets the <code>SyncResolver</code> object for this
-     * <code>SyncProviderException</code> object to the one supplied.
-     * If the argument supplied is <code>null</code>, a call to the method
-     * <code>getSyncResolver</code> will return the default reference
-     * implementation of the <code>SyncResolver</code> interface.
-     *
-     * @param syncResolver the <code>SyncResolver</code> object to be set;
-     *     cannot be <code>null</code>
-     * @throws IllegalArgumentException if the <code>SyncResolver</code> object
-     *     is <code>null</code>.
-     * @see #getSyncResolver
-     */
-    public void setSyncResolver(SyncResolver syncResolver) {
-        if (syncResolver == null) {
-            throw new IllegalArgumentException("Cannot set a null SyncResolver " +
-                "object");
-        } else {
-            this.syncResolver = syncResolver;
-        }
-    }
-
-    static final long serialVersionUID = -939908523620640692L;
-
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/spi/SyncResolver.java b/ojluni/src/main/java/javax/sql/rowset/spi/SyncResolver.java
deleted file mode 100755
index 87b5393..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/spi/SyncResolver.java
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package javax.sql.rowset.spi;
-
-import javax.sql.RowSet;
-import java.sql.SQLException;
-
-/**
- * Defines a framework that allows applications to use a manual decision tree
- * to decide what should be done when a synchronization conflict occurs.
- * Although it is not mandatory for
- * applications to resolve synchronization conflicts manually, this
- * framework provides the means to delegate to the application when conflicts
- * arise.
- * <p>
- * Note that a conflict is a situation where the <code>RowSet</code> object's original
- * values for a row do not match the values in the data source, which indicates that
- * the data source row has been modified since the last synchronization. Note also that
- * a <code>RowSet</code> object's original values are the values it had just prior to the
- * the last synchronization, which are not necessarily its initial values.
- * <p>
- *
- * <H2>Description of a <code>SyncResolver</code> Object</H2>
- *
- * A <code>SyncResolver</code> object is a specialized <code>RowSet</code> object
- * that implements the <code>SyncResolver</code> interface.
- * It <b>may</b> operate as either a connected <code>RowSet</code> object (an
- * implementation of the <code>JdbcRowSet</code> interface) or a connected
- * <code>RowSet</code> object (an implementation of the
- * <code>CachedRowSet</code> interface or one of its subinterfaces). For information
- * on the subinterfaces, see the
- * <a href="../package-summary.html"><code>javax.sql.rowset</code></a> package
- * description. The reference implementation for <code>SyncResolver</code> implements
- * the <code>CachedRowSet</code> interface, but other implementations
- * may choose to implement the <code>JdbcRowSet</code> interface to satisfy
- * particular needs.
- * <P>
- * After an application has attempted to synchronize a <code>RowSet</code> object with
- * the data source (by calling the <code>CachedRowSet</code>
- * method <code>acceptChanges</code>), and one or more conflicts have been found,
- * a rowset's <code>SyncProvider</code> object creates an instance of
- * <code>SyncResolver</code>. This new <code>SyncResolver</code> object has
- * the same number of rows and columns as the
- * <code>RowSet</code> object that was attempting the synchronization. The
- * <code>SyncResolver</code> object contains the values from the data source that caused
- * the conflict(s) and <code>null</code> for all other values.
- * In addition, it contains information about each conflict.
- * <P>
- *
- * <H2>Getting and Using a <code>SyncResolver</code> Object</H2>
- *
- * When the method <code>acceptChanges</code> encounters conflicts, the
- * <code>SyncProvider</code> object creates a <code>SyncProviderException</code>
- * object and sets it with the new <code>SyncResolver</code> object. The method
- * <code>acceptChanges</code> will throw this exception, which
- * the application can then catch and use to retrieve the
- * <code>SyncResolver</code> object it contains. The following code snippet uses the
- * <code>SyncProviderException</code> method <code>getSyncResolver</code> to get
- * the <code>SyncResolver</code> object <i>resolver</i>.
- * <PRE>
- *     } catch (SyncProviderException spe) {
- *         SyncResolver resolver = spe.getSyncResolver();
- *     ...
- *     }
- * </PRE>
- * <P>
- * With <i>resolver</i> in hand, an application can use it to get the information
- * it contains about the conflict or conflicts.  A <code>SyncResolver</code> object
- * such as <i>resolver</i> keeps
- * track of the conflicts for each row in which there is a conflict.  It also places a
- * lock on the table or tables affected by the rowset's command so that no more
- * conflicts can occur while the current conflicts are being resolved.
- * <P>
- * The following kinds of information can be obtained from a <code>SyncResolver</code>
- * object:
- * <P>
- *    <LI>What operation was being attempted when a conflict occurred<BR>
- * The <code>SyncProvider</code> interface defines four constants
- * describing states that may occur. Three
- * constants describe the type of operation (update, delete, or insert) that a
- * <code>RowSet</code> object was attempting to perform when a conflict was discovered,
- * and the fourth indicates that there is no conflict.
- * These constants are the possible return values when a <code>SyncResolver</code> object
- * calls the method <code>getStatus</code>.
- * <PRE>
- *     int operation = resolver.getStatus();
- * </PRE>
- * <P>
- *    <LI>The value in the data source that caused a conflict<BR>
- * A conflict exists when a value that a <code>RowSet</code> object has changed
- * and is attempting to write to the data source
- * has also been changed in the data source since the last synchronization.  An
- * application can call the <code>SyncResolver</code> method
- * <code>getConflictValue</code > to retrieve the
- * value in the data source that is the cause of the conflict because the values in a
- * <code>SyncResolver</code> object are the conflict values from the data source.
- * <PRE>
- *     java.lang.Object conflictValue = resolver.getConflictValue(2);
- * </PRE>
- * Note that the column in <i>resolver</i> can be designated by the column number,
- * as is done in the preceding line of code, or by the column name.
- * </UL>
- * <P>
- * With the information retrieved from the methods <code>getStatus</code> and
- * <code>getConflictValue</code>, the application may make a determination as to
- * which value should be persisted in the data source. The application then calls the
- * <code>SyncResolver</code> method <code>setResolvedValue</code>, which sets the value
- * to be persisted in the <code>RowSet</code> object and also in the data source.
- * <PRE>
- *     resolver.setResolvedValue("DEPT", 8390426);
- * </PRE>
- * In the preceding line of code,
- * the column name designates the column in the <code>RowSet</code> object
- * that is to be set with the given value. The column number can also be used to
- * designate the column.
- * <P>
- * An application calls the method <code>setResolvedValue</code> after it has
- * resolved all of the conflicts in the current conflict row and repeats this process
- * for each conflict row in the <code>SyncResolver</code> object.
- * <P>
- *
- * <H2>Navigating a <code>SyncResolver</code> Object</H2>
- *
- * Because a <code>SyncResolver</code> object is a <code>RowSet</code> object, an
- * application can use all of the <code>RowSet</code> methods for moving the cursor
- * to navigate a <code>SyncResolver</code> object. For example, an application can
- * use the <code>RowSet</code> method <code>next</code> to get to each row and then
- * call the <code>SyncResolver</code> method <code>getStatus</code> to see if the row
- * contains a conflict.  In a row with one or more conflicts, the application can
- * iterate through the columns to find any non-null values, which will be the values
- * from the data source that are in conflict.
- * <P>
- * To make it easier to navigate a <code>SyncResolver</code> object, especially when
- * there are large numbers of rows with no conflicts, the <code>SyncResolver</code>
- * interface defines the methods <code>nextConflict</code> and
- * <code>previousConflict</code>, which move only to rows
- * that contain at least one conflict value. Then an application can call the
- * <code>SyncResolver</code> method <code>getConflictValue</code>, supplying it
- * with the column number, to get the conflict value itself. The code fragment in the
- * next section gives an example.
- *
- * <H2>Code Example</H2>
- *
- * The following code fragment demonstrates how a disconnected <code>RowSet</code>
- * object <i>crs</i> might attempt to synchronize itself with the
- * underlying data source and then resolve the conflicts. In the <code>try</code>
- * block, <i>crs</i> calls the method <code>acceptChanges</code>, passing it the
- * <code>Connection</code> object <i>con</i>.  If there are no conflicts, the
- * changes in <i>crs</i> are simply written to the data source.  However, if there
- * is a conflict, the method <code>acceptChanges</code> throws a
- * <code>SyncProviderException</code> object, and the
- * <code>catch</code> block takes effect.  In this example, which
- * illustrates one of the many ways a <code>SyncResolver</code> object can be used,
- * the <code>SyncResolver</code> method <code>nextConflict</code> is used in a
- * <code>while</code> loop. The loop will end when <code>nextConflict</code> returns
- * <code>false</code>, which will occur when there are no more conflict rows in the
- * <code>SyncResolver</code> object <i>resolver</i>. In This particular code fragment,
- * <i>resolver</i> looks for rows that have update conflicts (rows with the status
- * <code>SyncResolver.UPDATE_ROW_CONFLICT</code>), and the rest of this code fragment
- * executes only for rows where conflicts occurred because <i>crs</i> was attempting an
- * update.
- * <P>
- * After the cursor for <i>resolver</i> has moved to the next conflict row that
- * has an update conflict, the method <code>getRow</code> indicates the number of the
- * current row, and
- * the cursor for the <code>CachedRowSet</code> object <i>crs</i> is moved to
- * the comparable row in <i>crs</i>. By iterating
- * through the columns of that row in both <i>resolver</i> and <i>crs</i>, the conflicting
- * values can be retrieved and compared to decide which one should be persisted. In this
- * code fragment, the value in <i>crs</i> is the one set as the resolved value, which means
- * that it will be used to overwrite the conflict value in the data source.
- *
- * <PRE>
- *     try {
- *
- *         crs.acceptChanges(con);
- *
- *     } catch (SyncProviderException spe) {
- *
- *         SyncResolver resolver = spe.getSyncResolver();
- *
- *         Object crsValue;  // value in the <code>RowSet</code> object
- *         Object resolverValue:  // value in the <code>SyncResolver</code> object
- *         Object resolvedValue:  // value to be persisted
- *
- *         while(resolver.nextConflict())  {
- *             if(resolver.getStatus() == SyncResolver.UPDATE_ROW_CONFLICT)  {
- *                 int row = resolver.getRow();
- *                 crs.absolute(row);
- *
- *                 int colCount = crs.getMetaData().getColumnCount();
- *                 for(int j = 1; j <= colCount; j++) {
- *                     if (resolver.getConflictValue(j) != null)  {
- *                         crsValue = crs.getObject(j);
- *                         resolverValue = resolver.getConflictValue(j);
- *                         . . .
- *                         // compare crsValue and resolverValue to determine
- *                         // which should be the resolved value (the value to persist)
- *                         resolvedValue = crsValue;
- *
- *                         resolver.setResolvedValue(j, resolvedValue);
- *                      }
- *                  }
- *              }
- *          }
- *      }
- * </PRE>
- * @author  Jonathan Bruce
- */
-
-public interface SyncResolver extends RowSet {
-    /**
-     * Indicates that a conflict occurred while the <code>RowSet</code> object was
-     * attempting to update a row in the data source.
-     * The values in the data source row to be updated differ from the
-     * <code>RowSet</code> object's original values for that row, which means that
-     * the row in the data source has been updated or deleted since the last
-     * synchronization.
-     */
-     public static int UPDATE_ROW_CONFLICT = 0;
-
-    /**
-     * Indicates that a conflict occurred while the <code>RowSet</code> object was
-     * attempting to delete a row in the data source.
-     * The values in the data source row to be updated differ from the
-     * <code>RowSet</code> object's original values for that row, which means that
-     * the row in the data source has been updated or deleted since the last
-     * synchronization.
-     */
-    public static int DELETE_ROW_CONFLICT = 1;
-
-   /**
-    * Indicates that a conflict occurred while the <code>RowSet</code> object was
-    * attempting to insert a row into the data source.  This means that a
-    * row with the same primary key as the row to be inserted has been inserted
-    * into the data source since the last synchronization.
-    */
-    public static int INSERT_ROW_CONFLICT = 2;
-
-    /**
-     * Indicates that <b>no</b> conflict occured while the <code>RowSet</code> object
-     * was attempting to update, delete or insert a row in the data source. The values in
-     * the <code>SyncResolver</code> will contain <code>null</code> values only as an indication
-     * that no information in pertitent to the conflict resolution in this row.
-     */
-    public static int NO_ROW_CONFLICT = 3;
-
-    /**
-     * Retrieves the conflict status of the current row of this <code>SyncResolver</code>,
-     * which indicates the operation
-     * the <code>RowSet</code> object was attempting when the conflict occurred.
-     *
-     * @return one of the following constants:
-     *         <code>SyncResolver.UPDATE_ROW_CONFLICT</code>,
-     *         <code>SyncResolver.DELETE_ROW_CONFLICT</code>,
-     *         <code>SyncResolver.INSERT_ROW_CONFLICT</code>, or
-     *         <code>SyncResolver.NO_ROW_CONFLICT</code>
-     */
-    public int getStatus();
-
-    /**
-     * Retrieves the value in the designated column in the current row of this
-     * <code>SyncResolver</code> object, which is the value in the data source
-     * that caused a conflict.
-     *
-     * @param index an <code>int</code> designating the column in this row of this
-     *        <code>SyncResolver</code> object from which to retrieve the value
-     *        causing a conflict
-     * @return the value of the designated column in the current row of this
-     *         <code>SyncResolver</code> object
-     * @throws SQLException if a database access error occurs
-     */
-    public Object getConflictValue(int index) throws SQLException;
-
-    /**
-     * Retrieves the value in the designated column in the current row of this
-     * <code>SyncResolver</code> object, which is the value in the data source
-     * that caused a conflict.
-     *
-     * @param columnName a <code>String</code> object designating the column in this row of this
-     *        <code>SyncResolver</code> object from which to retrieve the value
-     *        causing a conflict
-     * @return the value of the designated column in the current row of this
-     *         <code>SyncResolver</code> object
-     * @throws SQLException if a database access error occurs
-     */
-    public Object getConflictValue(String columnName) throws SQLException;
-
-    /**
-     * Sets <i>obj</i> as the value in column <i>index</i> in the current row of the
-     * <code>RowSet</code> object that is being synchronized. <i>obj</i>
-     * is set as the value in the data source internally.
-     *
-     * @param index an <code>int</code> giving the number of the column into which to
-     *        set the value to be persisted
-     * @param obj an <code>Object</code> that is the value to be set in the
-     *        <code>RowSet</code> object and persisted in the data source
-     * @throws SQLException if a database access error occurs
-     */
-    public void setResolvedValue(int index, Object obj) throws SQLException;
-
-    /**
-     * Sets <i>obj</i> as the value in column <i>columnName</i> in the current row of the
-     * <code>RowSet</code> object that is being synchronized. <i>obj</i>
-     * is set as the value in the data source internally.
-     *
-     * @param columnName a <code>String</code> object giving the name of the column
-     *        into which to set the value to be persisted
-     * @param obj an <code>Object</code> that is the value to be set in the
-     *        <code>RowSet</code> object and persisted in the data source
-     * @throws SQLException if a database access error occurs
-     */
-    public void setResolvedValue(String columnName, Object obj) throws SQLException;
-
-    /**
-     * Moves the cursor down from its current position to the next row that contains
-     * a conflict value. A <code>SyncResolver</code> object's
-     * cursor is initially positioned before the first conflict row; the first call to the
-     * method <code>nextConflict</code> makes the first conflict row the current row;
-     * the second call makes the second conflict row the current row, and so on.
-     * <p>
-     * A call to the method <code>nextConflict</code> will implicitly close
-     * an input stream if one is open and will clear the <code>SyncResolver</code>
-     * object's warning chain.
-     *
-     * @return <code>true</code> if the new current row is valid; <code>false</code>
-     *         if there are no more rows
-     * @throws SQLException if a database access error occurs or the result set type
-     *     is <code>TYPE_FORWARD_ONLY</code>
-     *
-     */
-    public boolean nextConflict() throws SQLException;
-
-    /**
-     * Moves the cursor up from its current position to the previous conflict
-     * row in this <code>SyncResolver</code> object.
-     * <p>
-     * A call to the method <code>previousConflict</code> will implicitly close
-     * an input stream if one is open and will clear the <code>SyncResolver</code>
-     * object's warning chain.
-     *
-     * @return <code>true</code> if the cursor is on a valid row; <code>false</code>
-     *     if it is off the result set
-     * @throws SQLException if a database access error occurs or the result set type
-     *     is <code>TYPE_FORWARD_ONLY</code>
-     */
-    public boolean previousConflict() throws SQLException;
-
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/spi/TransactionalWriter.java b/ojluni/src/main/java/javax/sql/rowset/spi/TransactionalWriter.java
deleted file mode 100755
index 812cf5b..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/spi/TransactionalWriter.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package javax.sql.rowset.spi;
-
-import java.sql.SQLException;
-import java.io.Reader;
-
-import javax.sql.RowSetWriter;
-import javax.sql.rowset.*;
-import java.sql.Savepoint;
-
-/**
- * A specialized interface that facilitates an extension of the standard
- * <code>SyncProvider</code> abstract class so that it has finer grained
- * transaction control.
- * <p>
- * If one or more disconnected <code>RowSet</code> objects are particating
- * in a global transaction, they may wish to coordinate their synchronization
- * commits to preserve data integrity and reduce the number of
- * sychronization exceptions. If this is the case, an application should set
- * the <code>CachedRowSet</code> constant <code>COMMIT_ON_ACCEPT_CHANGES</code>
- * to <code>false</code> and use the <code>commit</code> and <code>rollback</code>
- * methods defined in this interface to manage transaction boundaries.
- */
-public interface TransactionalWriter extends RowSetWriter {
-
-    /**
-     * Makes permanent all changes that have been performed by the
-     * <code>acceptChanges</code> method since the last call to either the
-     * <code>commit</code> or <code>rollback</code> methods.
-     * This method should be used only when auto-commit mode has been disabled.
-     *
-     * @throws SQLException  if a database access error occurs or the
-     *         <code>Connection</code> object within this <code>CachedRowSet</code>
-     *         object is in auto-commit mode
-     */
-    public void commit() throws SQLException;
-
-    /**
-     * Undoes all changes made in the current transaction. This method should be
-     * used only when auto-commit mode has been disabled.
-     *
-     * @throws SQLException if a database access error occurs or the <code>Connection</code>
-     *         object within this <code>CachedRowSet</code> object is in auto-commit mode
-     */
-    public void rollback() throws SQLException;
-
-    /**
-     * Undoes all changes made in the current transaction made prior to the given
-     * <code>Savepoint</code> object.  This method should be used only when auto-commit
-     * mode has been disabled.
-     *
-     * @param s a <code>Savepoint</code> object marking a savepoint in the current
-     *        transaction.  All changes made before <i>s</i> was set will be undone.
-     *        All changes made after <i>s</i> was set will be made permanent.
-     * @throws SQLException if a database access error occurs or the <code>Connection</code>
-     *         object within this <code>CachedRowSet</code> object is in auto-commit mode
-     */
-    public void rollback(Savepoint s) throws SQLException;
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/spi/XmlReader.java b/ojluni/src/main/java/javax/sql/rowset/spi/XmlReader.java
deleted file mode 100755
index 8306b92..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/spi/XmlReader.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package javax.sql.rowset.spi;
-
-import java.sql.SQLException;
-import java.io.Reader;
-
-import javax.sql.RowSetReader;
-import javax.sql.rowset.*;
-
-/**
- * A specialized interface that facilitates an extension of the
- * <code>SyncProvider</code> abstract class for XML orientated
- * synchronization providers.
- * <P>
- * <code>SyncProvider</code>  implementations that supply XML data reader
- * capabilities such as output XML stream capabilities can implement this
- * interface to provider standard <code>XmlReader</code> objects to
- * <code>WebRowSet</code> implementations.
- * <p>
- * An <code>XmlReader</code> object is registered as the
- * XML reader for a <code>WebRowSet</code> by being assigned to the
- * rowset's <code>xmlReader</code> field. When the <code>WebRowSet</code>
- * object's <code>readXml</code> method is invoked, it in turn invokes
- * its XML reader's <code>readXML</code> method.
- */
-public interface XmlReader extends RowSetReader {
-
-  /**
-   * Reads and parses the given <code>WebRowSet</code> object from the given
-   * input stream in XML format. The <code>xmlReader</code> field of the
-   * given <code>WebRowSet</code> object must contain this
-   * <code>XmlReader</code> object.
-   * <P>
-   * If a parsing error occurs, the exception that is thrown will
-   * include information about the location of the error in the
-   * original XML document.
-   *
-   * @param caller the <code>WebRowSet</code> object to be parsed, whose
-   *        <code>xmlReader</code> field must contain a reference to
-   *        this <code>XmlReader</code> object
-   * @param reader the <code>java.io.Reader</code> object from which
-   *        <code>caller</code> will be read
-   * @throws SQLException if a database access error occurs or
-   *            this <code>XmlReader</code> object is not the reader
-   *            for the given rowset
-   */
-  public void readXML(WebRowSet caller, java.io.Reader reader)
-    throws SQLException;
-
-}
diff --git a/ojluni/src/main/java/javax/sql/rowset/spi/XmlWriter.java b/ojluni/src/main/java/javax/sql/rowset/spi/XmlWriter.java
deleted file mode 100755
index 0e49d83..0000000
--- a/ojluni/src/main/java/javax/sql/rowset/spi/XmlWriter.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package javax.sql.rowset.spi;
-
-import java.sql.SQLException;
-import java.io.Writer;
-
-import javax.sql.RowSetWriter;
-import javax.sql.rowset.*;
-
-/**
- * A specialized interface that facilitates an extension of the
- * <code>SyncProvider</code> abstract class for XML orientated
- * synchronization providers.
- * <p>
- * <code>SyncProvider</code>  implementations that supply XML data writer
- * capabilities such as output XML stream capabilities can implement this
- * interface to provider standard <code>XmlWriter</code> objects to
- * <code>WebRowSet</code> implementations.
- * <P>
- * Writing a <code>WebRowSet</code> object includes printing the
- * rowset's data, metadata, and properties, all with the
- * appropriate XML tags.
- */
-public interface XmlWriter extends RowSetWriter {
-
-  /**
-   * Writes the given <code>WebRowSet</code> object to the specified
-   * <code>java.io.Writer</code> output stream as an XML document.
-   * This document includes the rowset's data, metadata, and properties
-   * plus the appropriate XML tags.
-   * <P>
-   * The <code>caller</code> parameter must be a <code>WebRowSet</code>
-   * object whose <code>XmlWriter</code> field contains a reference to
-   * this <code>XmlWriter</code> object.
-   *
-   * @param caller the <code>WebRowSet</code> instance to be written,
-   *        for which this <code>XmlWriter</code> object is the writer
-   * @param writer the <code>java.io.Writer</code> object that serves
-   *        as the output stream for writing <code>caller</code> as
-   *        an XML document
-   * @throws SQLException if a database access error occurs or
-   *            this <code>XmlWriter</code> object is not the writer
-   *            for the given <code>WebRowSet</code> object
-   */
-  public void writeXML(WebRowSet caller, java.io.Writer writer)
-    throws SQLException;
-
-
-
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharASCII.java b/ojluni/src/main/java/sun/io/ByteToCharASCII.java
deleted file mode 100755
index b36d239..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharASCII.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package sun.io;
-
-/**
- * A algorithmic conversion from ASCII to Unicode
- *
- * @author Limin Shi
- */
-public class ByteToCharASCII extends ByteToCharConverter {
-
-    // Return the character set id
-    public String getCharacterEncoding()
-    {
-        return "ASCII";
-    }
-
-    public int flush(char[] output, int outStart, int outEnd) {
-        // This converter will not buffer any data.
-        byteOff = charOff = 0;
-        return 0;
-    }
-
-    /**
-     * Algorithmic character conversion
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws ConversionBufferFullException, UnknownCharacterException
-    {
-        byte    inputByte;
-
-        charOff = outOff;
-        byteOff = inOff;
-
-        // Loop until we hit the end of the input
-        while(byteOff < inEnd)
-        {
-            // If we don't have room for the output, throw an exception
-            if (charOff >= outEnd)
-                throw new ConversionBufferFullException();
-
-            // Convert the input byte
-            inputByte = input[byteOff++];
-
-            if (inputByte >= 0)
-                output[charOff++] = (char)inputByte;
-            else {
-                if (subMode)
-                    output[charOff++] = '\uFFFD';       // Replace Char
-                else {
-                    badInputLength = 1;
-                    throw new UnknownCharacterException();
-                }
-            }
-        }
-
-        // Return the length written to the output buffer
-        return charOff-outOff;
-    }
-
-    /*
-     *   Reset after finding bad input
-     */
-    public void reset() {
-        byteOff = charOff = 0;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharBig5.java b/ojluni/src/main/java/sun/io/ByteToCharBig5.java
deleted file mode 100755
index 31b2ce4..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharBig5.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.DoubleByte;
-import sun.nio.cs.ext.Big5;
-
-/**
- * Tables and data to convert Big5 to Unicode
- *
- */
-
-public class ByteToCharBig5 extends ByteToCharDBCS_ASCII {
-
-    private static DoubleByte.Decoder dec =
-        (DoubleByte.Decoder)new Big5().newDecoder();
-
-    public String getCharacterEncoding() {
-        return "Big5";
-    }
-
-    public ByteToCharBig5() {
-        super(dec);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharBig5_HKSCS.java b/ojluni/src/main/java/sun/io/ByteToCharBig5_HKSCS.java
deleted file mode 100755
index dc36675..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharBig5_HKSCS.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2001, 2010, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.Big5_HKSCS;
-import sun.nio.cs.ext.HKSCS;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class ByteToCharBig5_HKSCS extends ByteToCharDBCS_ASCII {
-
-    protected static HKSCS.Decoder dec =
-        (HKSCS.Decoder)new Big5_HKSCS().newDecoder();
-
-
-    public String getCharacterEncoding() {
-        return "Big5_HKSCS";
-    }
-
-    public ByteToCharBig5_HKSCS() {
-        super(dec);
-    }
-
-    protected char decodeDouble(int byte1, int byte2) {
-        char c = dec.decodeDouble(byte1, byte2);
-        if (c == UNMAPPABLE_DECODING)
-            c = dec.decodeBig5(byte1, byte2);
-        return c;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharBig5_Solaris.java b/ojluni/src/main/java/sun/io/ByteToCharBig5_Solaris.java
deleted file mode 100755
index a6cd945..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharBig5_Solaris.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2001, 2010, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.DoubleByte;
-import sun.nio.cs.ext.Big5_Solaris;
-
-public class ByteToCharBig5_Solaris extends ByteToCharDBCS_ASCII {
-
-    private static DoubleByte.Decoder dec =
-        (DoubleByte.Decoder)new Big5_Solaris().newDecoder();
-
-    public String getCharacterEncoding() {
-        return "Big5_Solaris";
-    }
-
-    public ByteToCharBig5_Solaris() {
-        super(dec);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharConverter.java b/ojluni/src/main/java/sun/io/ByteToCharConverter.java
deleted file mode 100755
index 99a1f29..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharConverter.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * Copyright (c) 1996, 2004, 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.
- */
-
-package sun.io;
-
-import java.io.*;
-
-
-/**
- * An abstract base class for subclasses which convert character data
- * in an external encoding into Unicode characters.
- *
- * @author Asmus Freytag
- * @author Lloyd Honomichl
- *
- * @deprecated Replaced by {@link java.nio.charset}.  THIS API WILL BE
- * REMOVED IN J2SE 1.6.
- */
-@Deprecated
-public abstract class ByteToCharConverter {
-
-    /*
-     * Substitution mode flag.
-     */
-    protected boolean subMode = true;
-
-    /*
-     * Characters to use for automatic substitution.
-     */
-    protected char[] subChars = { '\uFFFD' };
-
-    /*
-     * Offset of next character to be output
-     */
-    protected int charOff;
-
-    /*
-     * Offset of next byte to be converted
-     */
-    protected int byteOff;
-
-    /*
-     * Length of bad input that caused a MalformedInputException.
-     */
-    protected int badInputLength;
-
-    /**
-     * Create an instance of the default ByteToCharConverter subclass.
-     */
-    public static ByteToCharConverter getDefault() {
-        Object cvt;
-        cvt = Converters.newDefaultConverter(Converters.BYTE_TO_CHAR);
-        return (ByteToCharConverter)cvt;
-    }
-
-    /**
-     * Returns appropriate ByteToCharConverter subclass instance.
-     * @param string represents encoding
-     */
-    public static ByteToCharConverter getConverter(String encoding)
-        throws UnsupportedEncodingException
-    {
-        Object cvt;
-        cvt = Converters.newConverter(Converters.BYTE_TO_CHAR, encoding);
-        return (ByteToCharConverter)cvt;
-    }
-
-    /**
-     * Returns the character set id for the conversion
-     */
-    public abstract String getCharacterEncoding();
-
-    /**
-     * Converts an array of bytes containing characters in an external
-     * encoding into an array of Unicode characters.  This  method allows
-     * a buffer by buffer conversion of a data stream.  The state of the
-     * conversion is saved between calls to convert.  Among other things,
-     * this means multibyte input sequences can be split between calls.
-     * If a call to convert results in an exception, the conversion may be
-     * continued by calling convert again with suitably modified parameters.
-     * All conversions should be finished with a call to the flush method.
-     *
-     * @return the number of bytes written to output.
-     * @param input byte array containing text to be converted.
-     * @param inStart begin conversion at this offset in input array.
-     * @param inEnd stop conversion at this offset in input array (exclusive).
-     * @param output character array to receive conversion result.
-     * @param outStart start writing to output array at this offset.
-     * @param outEnd stop writing to output array at this offset (exclusive).
-     * @exception MalformedInputException if the input buffer contains any
-     * sequence of bytes that is illegal for the input character set.
-     * @exception UnknownCharacterException for any character that
-     * that cannot be converted to Unicode. Thrown only when converter
-     * is not in substitution mode.
-     * @exception ConversionBufferFullException if output array is filled prior
-     * to converting all the input.
-     */
-    public abstract int convert(byte[] input, int inStart, int inEnd,
-                                char[] output, int outStart, int outEnd)
-            throws MalformedInputException,
-                   UnknownCharacterException,
-                   ConversionBufferFullException;
-
-    /**
-     * Converts an array of bytes containing characters in an external
-     * encoding into an array of Unicode characters.  Unlike convert,
-     * this method does not do incremental conversion.  It assumes that
-     * the given input array contains all the characters to be
-     * converted. The state of the converter is reset at the beginning
-     * of this method and is left in the reset state on successful
-     * termination.  The converter is not reset if an exception is
-     * thrown.  This allows the caller to determine where the bad input
-     * was encountered by calling nextByteIndex.
-     * <p>
-     * This method uses substitution mode when performing the
-     * conversion.  The method setSubstitutionChars may be used to
-     * determine what characters are substituted.  Even though substitution
-     * mode is used, the state of the converter's substitution mode is
-     * not changed at the end of this method.
-     *
-     * @return an array of chars containing the converted characters.
-     * @param input array containing Unicode characters to be converted.
-     * @exception MalformedInputException if the input buffer contains any
-     * sequence of chars that is illegal in the input character encoding.
-     * After this exception is thrown,
-     * the method nextByteIndex can be called to obtain the index of the
-     * first invalid input byte and getBadInputLength can be called
-     * to determine the length of the invalid input.
-     *
-     * @see   #nextByteIndex
-     * @see   #setSubstitutionMode
-     * @see   sun.io.CharToByteConverter#setSubstitutionBytes(byte[])
-     * @see   #getBadInputLength
-     */
-    public char[] convertAll( byte input[] ) throws MalformedInputException {
-        reset();
-        boolean savedSubMode = subMode;
-        subMode = true;
-
-        char[] output = new char[ getMaxCharsPerByte() * input.length ];
-
-        try {
-            int outputLength = convert( input, 0, input.length,
-                                        output, 0, output.length );
-            outputLength += flush( output, outputLength, output.length );
-
-            char [] returnedOutput = new char[ outputLength ];
-            System.arraycopy( output, 0, returnedOutput, 0, outputLength );
-            return returnedOutput;
-        }
-        catch( ConversionBufferFullException e ) {
-            //Not supposed to happen.  If it does, getMaxCharsPerByte() lied.
-            throw new
-                InternalError("this.getMaxCharsBerByte returned bad value");
-        }
-        catch( UnknownCharacterException e ) {
-            // Not supposed to happen since we're in substitution mode.
-            throw new InternalError();
-        }
-        finally {
-            subMode = savedSubMode;
-        }
-    }
-
-    /**
-     * Writes any remaining output to the output buffer and resets the
-     * converter to its initial state.
-     *
-     * @param output char array to receive flushed output.
-     * @param outStart start writing to output array at this offset.
-     * @param outEnd stop writing to output array at this offset (exclusive).
-     * @exception MalformedInputException if the output to be flushed contained
-     * a partial or invalid multibyte character sequence.  flush will
-     * write what it can to the output buffer and reset the converter before
-     * throwing this exception.  An additional call to flush is not required.
-     * @exception ConversionBufferFullException if output array is filled
-     * before all the output can be flushed. flush will write what it can
-     * to the output buffer and remember its state.  An additional call to
-     * flush with a new output buffer will conclude the operation.
-     */
-    public abstract int flush( char[] output, int outStart, int outEnd )
-        throws MalformedInputException, ConversionBufferFullException;
-
-    /**
-     * Resets converter to its initial state.
-     */
-    public abstract void reset();
-
-    /**
-     * Returns the maximum number of characters needed to convert a byte. Useful
-     * for calculating the maximum output buffer size needed for a particular
-     * input buffer.
-     */
-    public int getMaxCharsPerByte() {
-        // Until UTF-16, this will do for every encoding
-        return 1;
-    }
-
-    /**
-     * Returns the length, in bytes, of the input which caused a
-     * MalformedInputException.  Always refers to the last
-     * MalformedInputException thrown by the converter.  If none have
-     * ever been thrown, returns 0.
-     */
-    public int getBadInputLength() {
-        return badInputLength;
-    }
-
-    /**
-     * Returns the index of the  character just past the last character
-     * written by the previous call to convert.
-     */
-    public int nextCharIndex() {
-        return charOff;
-    }
-
-    /**
-     * Returns the index of the byte just past the last byte successfully
-     * converted by the previous call to convert.
-     */
-    public int nextByteIndex() {
-        return byteOff;
-    }
-
-    /**
-     * Sets converter into substitution mode.  In substitution mode,
-     * the converter will replace untranslatable characters in the source
-     * encoding with the substitution character set by setSubstitionChars.
-     * When not in substitution mode, the converter will throw an
-     * UnknownCharacterException when it encounters untranslatable input.
-     *
-     * @param doSub if true, enable substitution mode.
-     * @see #setSubstitutionChars
-     */
-    public void setSubstitutionMode(boolean doSub) {
-        subMode = doSub;
-    }
-
-    /**
-     * Sets the substitution characters to use when the converter is in
-     * substitution mode.  The given chars must not be
-     * longer than the value returned by getMaxCharsPerByte for this
-     * converter.
-     *
-     * @param newSubBytes the substitution bytes
-     * @exception IllegalArgumentException if given byte array is longer than
-     *    the value returned by the method getMaxBytesPerChar.
-     * @see #setSubstitutionMode
-     * @see #getMaxBytesPerChar
-     */
-    /**
-     * sets the substitution character to use
-     * @param c the substitution character
-     */
-    public void setSubstitutionChars(char[] c)
-        throws IllegalArgumentException
-    {
-        if( c.length > getMaxCharsPerByte() ) {
-            throw new IllegalArgumentException();
-        }
-
-        subChars = new char[ c.length ];
-        System.arraycopy( c, 0, subChars, 0, c.length );
-    }
-
-    /**
-     * returns a string representation of the character conversion
-     */
-    public String toString() {
-        return "ByteToCharConverter: " + getCharacterEncoding();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp037.java b/ojluni/src/main/java/sun/io/ByteToCharCp037.java
deleted file mode 100755
index cc3ce47..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp037.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM037;
-
-/**
- * A table to convert to Cp037 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp037 extends ByteToCharSingleByte {
-
-    private final static IBM037 nioCoder = new IBM037();
-
-    public String getCharacterEncoding() {
-        return "Cp037";
-    }
-
-    public ByteToCharCp037() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1006.java b/ojluni/src/main/java/sun/io/ByteToCharCp1006.java
deleted file mode 100755
index c7ef9b5..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1006.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1006;
-
-/**
- * A table to convert to Cp1006 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1006 extends ByteToCharSingleByte {
-
-    private final static IBM1006 nioCoder = new IBM1006();
-
-    public String getCharacterEncoding() {
-        return "Cp1006";
-    }
-
-    public ByteToCharCp1006() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1025.java b/ojluni/src/main/java/sun/io/ByteToCharCp1025.java
deleted file mode 100755
index 21f960d..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1025.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1025;
-
-/**
- * A table to convert to Cp1025 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1025 extends ByteToCharSingleByte {
-
-    private final static IBM1025 nioCoder = new IBM1025();
-
-    public String getCharacterEncoding() {
-        return "Cp1025";
-    }
-
-    public ByteToCharCp1025() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1026.java b/ojluni/src/main/java/sun/io/ByteToCharCp1026.java
deleted file mode 100755
index d09eadb..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1026.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1026;
-
-/**
- * A table to convert to Cp1026 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1026 extends ByteToCharSingleByte {
-
-    private final static IBM1026 nioCoder = new IBM1026();
-
-    public String getCharacterEncoding() {
-        return "Cp1026";
-    }
-
-    public ByteToCharCp1026() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1046.java b/ojluni/src/main/java/sun/io/ByteToCharCp1046.java
deleted file mode 100755
index 6a99f4f..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1046.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1046;
-
-/**
- * A table to convert to Cp1046 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1046 extends ByteToCharSingleByte {
-
-    private final static IBM1046 nioCoder = new IBM1046();
-
-    public String getCharacterEncoding() {
-        return "Cp1046";
-    }
-
-    public ByteToCharCp1046() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1047.java b/ojluni/src/main/java/sun/io/ByteToCharCp1047.java
deleted file mode 100755
index 0dd8743..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1047.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1047;
-
-/**
- * A table to convert to Cp1047 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1047 extends ByteToCharSingleByte {
-
-    private final static IBM1047 nioCoder = new IBM1047();
-
-    public String getCharacterEncoding() {
-        return "Cp1047";
-    }
-
-    public ByteToCharCp1047() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1097.java b/ojluni/src/main/java/sun/io/ByteToCharCp1097.java
deleted file mode 100755
index ca64a1f..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1097.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1097;
-
-/**
- * A table to convert to Cp1097 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1097 extends ByteToCharSingleByte {
-
-    private final static IBM1097 nioCoder = new IBM1097();
-
-    public String getCharacterEncoding() {
-        return "Cp1097";
-    }
-
-    public ByteToCharCp1097() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1098.java b/ojluni/src/main/java/sun/io/ByteToCharCp1098.java
deleted file mode 100755
index b2f28c3..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1098.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1098;
-
-/**
- * A table to convert to Cp1098 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1098 extends ByteToCharSingleByte {
-
-    private final static IBM1098 nioCoder = new IBM1098();
-
-    public String getCharacterEncoding() {
-        return "Cp1098";
-    }
-
-    public ByteToCharCp1098() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1112.java b/ojluni/src/main/java/sun/io/ByteToCharCp1112.java
deleted file mode 100755
index 582ffad..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1112.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1112;
-
-/**
- * A table to convert to Cp1112 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1112 extends ByteToCharSingleByte {
-
-    private final static IBM1112 nioCoder = new IBM1112();
-
-    public String getCharacterEncoding() {
-        return "Cp1112";
-    }
-
-    public ByteToCharCp1112() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1122.java b/ojluni/src/main/java/sun/io/ByteToCharCp1122.java
deleted file mode 100755
index 8719bf2..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1122.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1122;
-
-/**
- * A table to convert to Cp1122 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1122 extends ByteToCharSingleByte {
-
-    private final static IBM1122 nioCoder = new IBM1122();
-
-    public String getCharacterEncoding() {
-        return "Cp1122";
-    }
-
-    public ByteToCharCp1122() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1123.java b/ojluni/src/main/java/sun/io/ByteToCharCp1123.java
deleted file mode 100755
index 13feb79..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1123.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1123;
-
-/**
- * A table to convert to Cp1123 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1123 extends ByteToCharSingleByte {
-
-    private final static IBM1123 nioCoder = new IBM1123();
-
-    public String getCharacterEncoding() {
-        return "Cp1123";
-    }
-
-    public ByteToCharCp1123() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1124.java b/ojluni/src/main/java/sun/io/ByteToCharCp1124.java
deleted file mode 100755
index 00d4fcc..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1124.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1124;
-
-/**
- * A table to convert to Cp1124 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1124 extends ByteToCharSingleByte {
-
-    private final static IBM1124 nioCoder = new IBM1124();
-
-    public String getCharacterEncoding() {
-        return "Cp1124";
-    }
-
-    public ByteToCharCp1124() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1140.java b/ojluni/src/main/java/sun/io/ByteToCharCp1140.java
deleted file mode 100755
index 96a82a9..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1140.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package sun.io;
-
-/**
- * A table to convert Cp1140 to Unicode.  This converter differs from
- * Cp037 is one code point, 0x9F, which changes from \u00A4 to \u20AC.
- * @author  Alan Liu
- */
-public class ByteToCharCp1140 extends ByteToCharCp037 {
-    public ByteToCharCp1140() {}
-
-    public String getCharacterEncoding() {
-        return "Cp1140";
-    }
-
-    protected char getUnicode(int byteIndex) {
-        // Change single code point with respect to parent.
-        // Cast to byte to get sign extension to match byteIndex.
-        return (byteIndex == (byte)0x9F) ? '\u20AC' : super.getUnicode(byteIndex);
-    }
-}
-
-//eof
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1141.java b/ojluni/src/main/java/sun/io/ByteToCharCp1141.java
deleted file mode 100755
index ea14cb9..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1141.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package sun.io;
-
-/**
- * A table to convert Cp1141 to Unicode.  This converter differs from
- * Cp273 is one code point, 0x9F, which changes from \u00A4 to \u20AC.
- * @author  Alan Liu
- */
-public class ByteToCharCp1141 extends ByteToCharCp273 {
-    public ByteToCharCp1141() {}
-
-    public String getCharacterEncoding() {
-        return "Cp1141";
-    }
-
-    protected char getUnicode(int byteIndex) {
-        // Change single code point with respect to parent.
-        // Cast to byte to get sign extension to match byteIndex.
-        return (byteIndex == (byte)0x9F) ? '\u20AC' : super.getUnicode(byteIndex);
-    }
-}
-
-//eof
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1142.java b/ojluni/src/main/java/sun/io/ByteToCharCp1142.java
deleted file mode 100755
index 5097d72..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1142.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package sun.io;
-
-/**
- * A table to convert Cp1142 to Unicode.  This converter differs from
- * Cp277 is one code point, 0x5A, which changes from \u00A4 to \u20AC.
- * @author  Alan Liu
- */
-public class ByteToCharCp1142 extends ByteToCharCp277 {
-    public ByteToCharCp1142() {}
-
-    public String getCharacterEncoding() {
-        return "Cp1142";
-    }
-
-    protected char getUnicode(int byteIndex) {
-        // Change single code point with respect to parent.
-        // [Careful -- if the code point in question is >= 0x80, make
-        //  sure you do the comparison like this: (byteIndex == (byte)0x??)]
-        return (byteIndex == 0x5A) ? '\u20AC' : super.getUnicode(byteIndex);
-    }
-}
-
-//eof
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1143.java b/ojluni/src/main/java/sun/io/ByteToCharCp1143.java
deleted file mode 100755
index a3b0ed9..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1143.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package sun.io;
-
-/**
- * A table to convert Cp1143 to Unicode.  This converter differs from
- * Cp278 is one code point, 0x5A, which changes from \u00A4 to \u20AC.
- * @author  Alan Liu
- */
-public class ByteToCharCp1143 extends ByteToCharCp278 {
-    public ByteToCharCp1143() {}
-
-    public String getCharacterEncoding() {
-        return "Cp1143";
-    }
-
-    protected char getUnicode(int byteIndex) {
-        // Change single code point with respect to parent.
-        // [Careful -- if the code point in question is >= 0x80, make
-        //  sure you do the comparison like this: (byteIndex == (byte)0x??)]
-        return (byteIndex == 0x5A) ? '\u20AC' : super.getUnicode(byteIndex);
-    }
-}
-
-//eof
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1144.java b/ojluni/src/main/java/sun/io/ByteToCharCp1144.java
deleted file mode 100755
index cb6bb7d..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1144.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package sun.io;
-
-/**
- * A table to convert Cp1144 to Unicode.  This converter differs from
- * Cp280 is one code point, 0x9F, which changes from \u00A4 to \u20AC.
- * @author  Alan Liu
- */
-public class ByteToCharCp1144 extends ByteToCharCp280 {
-    public ByteToCharCp1144() {}
-
-    public String getCharacterEncoding() {
-        return "Cp1144";
-    }
-
-    protected char getUnicode(int byteIndex) {
-        // Change single code point with respect to parent.
-        // Cast to byte to get sign extension to match byteIndex.
-        return (byteIndex == (byte)0x9F) ? '\u20AC' : super.getUnicode(byteIndex);
-    }
-}
-
-//eof
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1145.java b/ojluni/src/main/java/sun/io/ByteToCharCp1145.java
deleted file mode 100755
index a11b819..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1145.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package sun.io;
-
-/**
- * A table to convert Cp1145 to Unicode.  This converter differs from
- * Cp284 is one code point, 0x9F, which changes from \u00A4 to \u20AC.
- * @author  Alan Liu
- */
-public class ByteToCharCp1145 extends ByteToCharCp284 {
-    public ByteToCharCp1145() {}
-
-    public String getCharacterEncoding() {
-        return "Cp1145";
-    }
-
-    protected char getUnicode(int byteIndex) {
-        // Change single code point with respect to parent.
-        // Cast to byte to get sign extension to match byteIndex.
-        return (byteIndex == (byte)0x9F) ? '\u20AC' : super.getUnicode(byteIndex);
-    }
-}
-
-//eof
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1146.java b/ojluni/src/main/java/sun/io/ByteToCharCp1146.java
deleted file mode 100755
index 017f60f..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1146.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package sun.io;
-
-/**
- * A table to convert Cp1146 to Unicode.  This converter differs from
- * Cp285 is one code point, 0x9F, which changes from \u00A4 to \u20AC.
- * @author  Alan Liu
- */
-public class ByteToCharCp1146 extends ByteToCharCp285 {
-    public ByteToCharCp1146() {}
-
-    public String getCharacterEncoding() {
-        return "Cp1146";
-    }
-
-    protected char getUnicode(int byteIndex) {
-        // Change single code point with respect to parent.
-        // Cast to byte to get sign extension to match byteIndex.
-        return (byteIndex == (byte)0x9F) ? '\u20AC' : super.getUnicode(byteIndex);
-    }
-}
-
-//eof
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1147.java b/ojluni/src/main/java/sun/io/ByteToCharCp1147.java
deleted file mode 100755
index 98926bb..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1147.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package sun.io;
-
-/**
- * A table to convert Cp1147 to Unicode.  This converter differs from
- * Cp297 is one code point, 0x9F, which changes from \u00A4 to \u20AC.
- * @author  Alan Liu
- */
-public class ByteToCharCp1147 extends ByteToCharCp297 {
-    public ByteToCharCp1147() {}
-
-    public String getCharacterEncoding() {
-        return "Cp1147";
-    }
-
-    protected char getUnicode(int byteIndex) {
-        // Change single code point with respect to parent.
-        // Cast to byte to get sign extension to match byteIndex.
-        return (byteIndex == (byte)0x9F) ? '\u20AC' : super.getUnicode(byteIndex);
-    }
-}
-
-//eof
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1148.java b/ojluni/src/main/java/sun/io/ByteToCharCp1148.java
deleted file mode 100755
index 90bd067..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1148.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package sun.io;
-
-/**
- * A table to convert Cp1148 to Unicode.  This converter differs from
- * Cp500 is one code point, 0x9F, which changes from \u00A4 to \u20AC.
- * @author  Alan Liu
- */
-public class ByteToCharCp1148 extends ByteToCharCp500 {
-    public ByteToCharCp1148() {}
-
-    public String getCharacterEncoding() {
-        return "Cp1148";
-    }
-
-    protected char getUnicode(int byteIndex) {
-        // Change single code point with respect to parent.
-        // Cast to byte to get sign extension to match byteIndex.
-        return (byteIndex == (byte)0x9F) ? '\u20AC' : super.getUnicode(byteIndex);
-    }
-}
-
-//eof
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1149.java b/ojluni/src/main/java/sun/io/ByteToCharCp1149.java
deleted file mode 100755
index 105e737..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1149.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package sun.io;
-
-/**
- * A table to convert Cp1149 to Unicode.  This converter differs from
- * Cp871 is one code point, 0x9F, which changes from \u00A4 to \u20AC.
- * @author  Alan Liu
- */
-public class ByteToCharCp1149 extends ByteToCharCp871 {
-    public ByteToCharCp1149() {}
-
-    public String getCharacterEncoding() {
-        return "Cp1149";
-    }
-
-    protected char getUnicode(int byteIndex) {
-        // Change single code point with respect to parent.
-        // Cast to byte to get sign extension to match byteIndex.
-        return (byteIndex == (byte)0x9F) ? '\u20AC' : super.getUnicode(byteIndex);
-    }
-}
-
-//eof
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1250.java b/ojluni/src/main/java/sun/io/ByteToCharCp1250.java
deleted file mode 100755
index a493cd6..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1250.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.MS1250;
-
-/**
- * A table to convert Cp1250 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1250 extends ByteToCharSingleByte {
-
-    private final static MS1250 nioCoder = new MS1250();
-
-    public String getCharacterEncoding() {
-        return "Cp1250";
-    }
-
-    public ByteToCharCp1250() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1251.java b/ojluni/src/main/java/sun/io/ByteToCharCp1251.java
deleted file mode 100755
index b337e35..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1251.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.MS1251;
-
-/**
- * A table to convert Cp1251 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1251 extends ByteToCharSingleByte {
-
-    private final static MS1251 nioCoder = new MS1251();
-
-    public String getCharacterEncoding() {
-        return "Cp1251";
-    }
-
-    public ByteToCharCp1251() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1252.java b/ojluni/src/main/java/sun/io/ByteToCharCp1252.java
deleted file mode 100755
index bd1e764..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1252.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.MS1252;
-
-/**
- * A table to convert Cp1252 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1252 extends ByteToCharSingleByte {
-
-    private final static MS1252 nioCoder = new MS1252();
-
-    public String getCharacterEncoding() {
-        return "Cp1252";
-    }
-
-    public ByteToCharCp1252() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1253.java b/ojluni/src/main/java/sun/io/ByteToCharCp1253.java
deleted file mode 100755
index fdf0470..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1253.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.MS1253;
-
-/**
- * A table to convert Cp1253 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1253 extends ByteToCharSingleByte {
-
-    private final static MS1253 nioCoder = new MS1253();
-
-    public String getCharacterEncoding() {
-        return "Cp1253";
-    }
-
-    public ByteToCharCp1253() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1254.java b/ojluni/src/main/java/sun/io/ByteToCharCp1254.java
deleted file mode 100755
index f370e04..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1254.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.MS1254;
-
-/**
- * A table to convert Cp1254 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1254 extends ByteToCharSingleByte {
-
-    private final static MS1254 nioCoder = new MS1254();
-
-    public String getCharacterEncoding() {
-        return "Cp1254";
-    }
-
-    public ByteToCharCp1254() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1255.java b/ojluni/src/main/java/sun/io/ByteToCharCp1255.java
deleted file mode 100755
index f703761..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1255.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MS1255;
-
-/**
- * A table to convert Cp1255 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1255 extends ByteToCharSingleByte {
-
-    private final static MS1255 nioCoder = new MS1255();
-
-    public String getCharacterEncoding() {
-        return "Cp1255";
-    }
-
-    public ByteToCharCp1255() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1256.java b/ojluni/src/main/java/sun/io/ByteToCharCp1256.java
deleted file mode 100755
index ce7edd1..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1256.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MS1256;
-
-/**
- * A table to convert Cp1256 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1256 extends ByteToCharSingleByte {
-
-    private final static MS1256 nioCoder = new MS1256();
-
-    public String getCharacterEncoding() {
-        return "Cp1256";
-    }
-
-    public ByteToCharCp1256() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1257.java b/ojluni/src/main/java/sun/io/ByteToCharCp1257.java
deleted file mode 100755
index 2691caf..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1257.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.MS1257;
-
-/**
- * A table to convert Cp1257 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1257 extends ByteToCharSingleByte {
-
-    private final static MS1257 nioCoder = new MS1257();
-
-    public String getCharacterEncoding() {
-        return "Cp1257";
-    }
-
-    public ByteToCharCp1257() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1258.java b/ojluni/src/main/java/sun/io/ByteToCharCp1258.java
deleted file mode 100755
index 70b101c..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1258.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MS1258;
-
-/**
- * A table to convert Cp1258 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp1258 extends ByteToCharSingleByte {
-
-    private final static MS1258 nioCoder = new MS1258();
-
-    public String getCharacterEncoding() {
-        return "Cp1258";
-    }
-
-    public ByteToCharCp1258() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1381.java b/ojluni/src/main/java/sun/io/ByteToCharCp1381.java
deleted file mode 100755
index c38b96b..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1381.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp1381 extends ByteToCharDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp1381";
-    }
-
-    public ByteToCharCp1381() {
-        super((DoubleByte.Decoder)new IBM1381().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp1383.java b/ojluni/src/main/java/sun/io/ByteToCharCp1383.java
deleted file mode 100755
index cf0b06e..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp1383.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp1383 extends ByteToCharEUC2 {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp1383";
-    }
-
-    public ByteToCharCp1383() {
-        super((DoubleByte.Decoder)new IBM1383().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp273.java b/ojluni/src/main/java/sun/io/ByteToCharCp273.java
deleted file mode 100755
index af0cbc6..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp273.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM273;
-
-/**
- * A table to convert to Cp273 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp273 extends ByteToCharSingleByte {
-
-    private final static IBM273 nioCoder = new IBM273();
-
-    public String getCharacterEncoding() {
-        return "Cp273";
-    }
-
-    public ByteToCharCp273() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp277.java b/ojluni/src/main/java/sun/io/ByteToCharCp277.java
deleted file mode 100755
index fd749ea..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp277.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM277;
-
-/**
- * A table to convert to Cp277 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp277 extends ByteToCharSingleByte {
-
-    private final static IBM277 nioCoder = new IBM277();
-
-    public String getCharacterEncoding() {
-        return "Cp277";
-    }
-
-    public ByteToCharCp277() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp278.java b/ojluni/src/main/java/sun/io/ByteToCharCp278.java
deleted file mode 100755
index 334c587..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp278.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM278;
-
-/**
- * A table to convert to Cp278 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp278 extends ByteToCharSingleByte {
-
-    private final static IBM278 nioCoder = new IBM278();
-
-    public String getCharacterEncoding() {
-        return "Cp278";
-    }
-
-    public ByteToCharCp278() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp280.java b/ojluni/src/main/java/sun/io/ByteToCharCp280.java
deleted file mode 100755
index 72cb21c..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp280.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM280;
-
-/**
- * A table to convert to Cp280 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp280 extends ByteToCharSingleByte {
-
-    private final static IBM280 nioCoder = new IBM280();
-
-    public String getCharacterEncoding() {
-        return "Cp280";
-    }
-
-    public ByteToCharCp280() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp284.java b/ojluni/src/main/java/sun/io/ByteToCharCp284.java
deleted file mode 100755
index 83089d9..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp284.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM284;
-
-/**
- * A table to convert to Cp284 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp284 extends ByteToCharSingleByte {
-
-    private final static IBM284 nioCoder = new IBM284();
-
-    public String getCharacterEncoding() {
-        return "Cp284";
-    }
-
-    public ByteToCharCp284() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp285.java b/ojluni/src/main/java/sun/io/ByteToCharCp285.java
deleted file mode 100755
index d652f40..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp285.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM285;
-
-/**
- * A table to convert to Cp285 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp285 extends ByteToCharSingleByte {
-
-    private final static IBM285 nioCoder = new IBM285();
-
-    public String getCharacterEncoding() {
-        return "Cp285";
-    }
-
-    public ByteToCharCp285() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp297.java b/ojluni/src/main/java/sun/io/ByteToCharCp297.java
deleted file mode 100755
index 67fed6d..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp297.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM297;
-
-/**
- * A table to convert to Cp297 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp297 extends ByteToCharSingleByte {
-
-    private final static IBM297 nioCoder = new IBM297();
-
-    public String getCharacterEncoding() {
-        return "Cp297";
-    }
-
-    public ByteToCharCp297() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp33722.java b/ojluni/src/main/java/sun/io/ByteToCharCp33722.java
deleted file mode 100755
index 68db184..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp33722.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.IBM33722;
-
-/**
-* @author Malcolm Ayres
-*/
-public class ByteToCharCp33722 extends ByteToCharConverter
-{
-    private final int G0 = 0;
-    private final int G1 = 1;
-    private final int G2 = 2;
-    private final int G3 = 3;
-    private final int G4 = 4;
-    private final int SS2 =  0x8E;
-    private final int SS3 =  0x8F;
-
-    private int firstByte, state;
-    private String byteToCharTable;
-    private String mappingTableG1;
-    private String mappingTableG2;
-    private String mappingTableG3;
-
-    private final static IBM33722 nioCoder = new IBM33722();
-
-    public ByteToCharCp33722() {
-        super();
-        state = G0;
-        byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-        mappingTableG1 = nioCoder.getDecoderMappingTableG1();
-        mappingTableG2 = nioCoder.getDecoderMappingTableG2();
-        mappingTableG3 = nioCoder.getDecoderMappingTableG3();
-    }
-
-    /**
-      * Return the character set id
-      */
-    public String getCharacterEncoding()
-    {
-       return "Cp33722";
-    }
-
-    /**
-      * flush out any residual data and reset the buffer state
-      */
-    public int flush(char[] output, int outStart, int outEnd)
-       throws MalformedInputException
-    {
-        if (state != G0) {
-            reset();
-            badInputLength = 0;
-            throw new MalformedInputException();
-        }
-
-        reset();
-        return 0;
-    }
-
-    /**
-     *  Resets the converter.
-     */
-    public void reset() {
-        state = G0;
-        charOff = byteOff = 0;
-    }
-
-    /**
-     * Character conversion
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-
-       int       byte1;
-       char      outputChar = '\uFFFD';
-
-       byteOff = inOff;
-       charOff = outOff;
-
-       while (byteOff < inEnd) {
-
-          byte1 = input[byteOff];
-          if (byte1 < 0)
-            byte1 += 256;
-
-          switch (state) {
-             case G0:
-                if (byte1 == SS2)                       // drop into G2 set
-                   state = G2;
-                else if (byte1 == SS3)                  // drop into G3 set
-                   state = G3;
-                else if ( byte1 <= 0x9f )               // valid single byte
-                   outputChar = byteToCharTable.charAt(byte1);
-                else if (byte1 < 0xa1 || byte1 > 0xfe) {  // valid G1 set 1st byte
-                   badInputLength = 1;
-                   throw new MalformedInputException();
-                } else {
-                   firstByte = byte1;                   // save the 1st byte
-                   state = G1;
-                }
-                break;
-
-             case G1:
-                state = G0;
-                if ( byte1 < 0xa1 || byte1 > 0xfe) {    // valid second byte for G1
-                   badInputLength = 1;
-                   throw new MalformedInputException();
-                }
-                outputChar = mappingTableG1.charAt(((firstByte - 0xa1) * 94)  + byte1 - 0xa1);
-                break;
-
-             case G2:
-                state = G0;                             // valid first byte for G2
-                if ( byte1 < 0xa1 || byte1 > 0xfe) {
-                   badInputLength = 1;
-                   throw new MalformedInputException();
-                }
-                outputChar = mappingTableG2.charAt(byte1 - 0xa1);
-                break;
-
-             case G3:
-                if ( byte1 < 0xa1 || byte1 > 0xfe) {    // valid first byte for G3
-                   state = G0;
-                   badInputLength = 1;
-                   throw new MalformedInputException();
-                }
-                firstByte = byte1;
-                state = G4;
-                break;
-
-             case G4:
-                state = G0;                             // valid second byte for G3
-                if ( byte1 < 0xa1 || byte1 > 0xfe) {
-                   badInputLength = 1;
-                   throw new MalformedInputException();
-                }
-                outputChar = mappingTableG3.charAt(((firstByte - 0xa1) * 94)  + byte1 - 0xa1);
-                break;
-
-          }
-
-          if (state == G0) {
-             if (outputChar == '\uFFFD') {
-                if (subMode)
-                   outputChar = subChars[0];
-                else {
-                   badInputLength = 1;
-                   throw new UnknownCharacterException();
-                }
-             }
-
-             if (charOff >= outEnd)
-                throw new ConversionBufferFullException();
-
-             output[charOff++] = outputChar;
-          }
-
-          byteOff++;
-
-       }
-
-       return charOff - outOff;
-
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp420.java b/ojluni/src/main/java/sun/io/ByteToCharCp420.java
deleted file mode 100755
index 17a80a1..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp420.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM420;
-
-/**
- * A table to convert to Cp420 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp420 extends ByteToCharSingleByte {
-
-    private final static IBM420 nioCoder = new IBM420();
-
-    public String getCharacterEncoding() {
-        return "Cp420";
-    }
-
-    public ByteToCharCp420() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp424.java b/ojluni/src/main/java/sun/io/ByteToCharCp424.java
deleted file mode 100755
index be4d135..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp424.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM424;
-
-/**
- * A table to convert to Cp424 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp424 extends ByteToCharSingleByte {
-
-    private final static IBM424 nioCoder = new IBM424();
-
-    public String getCharacterEncoding() {
-        return "Cp424";
-    }
-
-    public ByteToCharCp424() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp437.java b/ojluni/src/main/java/sun/io/ByteToCharCp437.java
deleted file mode 100755
index d509f42..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp437.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.IBM437;
-
-/**
- * A table to convert to Cp437 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp437 extends ByteToCharSingleByte {
-
-    private final static IBM437 nioCoder = new IBM437();
-
-    public String getCharacterEncoding() {
-        return "Cp437";
-    }
-
-    public ByteToCharCp437() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp500.java b/ojluni/src/main/java/sun/io/ByteToCharCp500.java
deleted file mode 100755
index 41e488f..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp500.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM500;
-
-/**
- * A table to convert to Cp500 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp500 extends ByteToCharSingleByte {
-
-    private final static IBM500 nioCoder = new IBM500();
-
-    public String getCharacterEncoding() {
-        return "Cp500";
-    }
-
-    public ByteToCharCp500() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp737.java b/ojluni/src/main/java/sun/io/ByteToCharCp737.java
deleted file mode 100755
index e7ca4d3..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp737.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.IBM737;
-
-/**
- * A table to convert to Cp737 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp737 extends ByteToCharSingleByte {
-
-    private final static IBM737 nioCoder = new IBM737();
-
-    public String getCharacterEncoding() {
-        return "Cp737";
-    }
-
-    public ByteToCharCp737() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp775.java b/ojluni/src/main/java/sun/io/ByteToCharCp775.java
deleted file mode 100755
index 3e06491..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp775.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.IBM775;
-
-/**
- * A table to convert to Cp775 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp775 extends ByteToCharSingleByte {
-
-    private final static IBM775 nioCoder = new IBM775();
-
-    public String getCharacterEncoding() {
-        return "Cp775";
-    }
-
-    public ByteToCharCp775() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp833.java b/ojluni/src/main/java/sun/io/ByteToCharCp833.java
deleted file mode 100755
index 6549828..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp833.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2010, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM833;
-
-public class ByteToCharCp833 extends ByteToCharSingleByte {
-
-    private final static IBM833 nioCoder = new IBM833();
-
-    public String getCharacterEncoding() {
-        return "Cp833";
-    }
-
-    public ByteToCharCp833() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
-
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp834.java b/ojluni/src/main/java/sun/io/ByteToCharCp834.java
deleted file mode 100755
index 2019a6b..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp834.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2006, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp834 extends ByteToCharDBCS_ASCII {
-
-    public String getCharacterEncoding() {
-        return "Cp834";
-    }
-
-    public ByteToCharCp834() {
-        super((DoubleByte.Decoder)new IBM834().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp838.java b/ojluni/src/main/java/sun/io/ByteToCharCp838.java
deleted file mode 100755
index 74166ab..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp838.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM838;
-
-/**
- * A table to convert to Cp838 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp838 extends ByteToCharSingleByte {
-
-    private final static IBM838 nioCoder = new IBM838();
-
-    public String getCharacterEncoding() {
-        return "Cp838";
-    }
-
-    public ByteToCharCp838() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp850.java b/ojluni/src/main/java/sun/io/ByteToCharCp850.java
deleted file mode 100755
index 1713108..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp850.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 1996, 2002, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.IBM850;
-
-/**
- * A table to convert to Cp850 to Unicode
- *
- * @author  ConverterGenerator tool
- * @version >= JDK1.1.6
- */
-
-public class ByteToCharCp850 extends ByteToCharSingleByte {
-
-    public String getCharacterEncoding() {
-        return "Cp850";
-    }
-
-    public ByteToCharCp850() {
-        super.byteToCharTable = new IBM850().getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp852.java b/ojluni/src/main/java/sun/io/ByteToCharCp852.java
deleted file mode 100755
index 851eb2b..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp852.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.IBM852;
-
-/**
- * A table to convert to Cp852 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp852 extends ByteToCharSingleByte {
-
-    private final static IBM852 nioCoder = new IBM852();
-
-    public String getCharacterEncoding() {
-        return "Cp852";
-    }
-
-    public ByteToCharCp852() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp855.java b/ojluni/src/main/java/sun/io/ByteToCharCp855.java
deleted file mode 100755
index dc48df3..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp855.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.IBM855;
-
-/**
- * A table to convert to Cp855 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp855 extends ByteToCharSingleByte {
-
-    private final static IBM855 nioCoder = new IBM855();
-
-    public String getCharacterEncoding() {
-        return "Cp855";
-    }
-
-    public ByteToCharCp855() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp856.java b/ojluni/src/main/java/sun/io/ByteToCharCp856.java
deleted file mode 100755
index 404d237..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp856.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM856;
-
-/**
- * A table to convert to Cp856 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp856 extends ByteToCharSingleByte {
-
-    private final static IBM856 nioCoder = new IBM856();
-
-    public String getCharacterEncoding() {
-        return "Cp856";
-    }
-
-    public ByteToCharCp856() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp857.java b/ojluni/src/main/java/sun/io/ByteToCharCp857.java
deleted file mode 100755
index 16dbb9d..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp857.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.IBM857;
-
-/**
- * A table to convert to Cp857 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp857 extends ByteToCharSingleByte {
-
-    private final static IBM857 nioCoder = new IBM857();
-
-    public String getCharacterEncoding() {
-        return "Cp857";
-    }
-
-    public ByteToCharCp857() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp858.java b/ojluni/src/main/java/sun/io/ByteToCharCp858.java
deleted file mode 100755
index 480c67b..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp858.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package sun.io;
-
-/**
- * A table to convert Cp858 to Unicode.  This converter differs from
- * Cp850 is one code point, 0xD5, which changes from \u0131 to \u20AC.
- * @author  Alan Liu
- */
-public class ByteToCharCp858 extends ByteToCharCp850 {
-    public ByteToCharCp858() {}
-
-    public String getCharacterEncoding() {
-        return "Cp858";
-    }
-
-    protected char getUnicode(int byteIndex) {
-        // Change single code point with respect to parent.
-        // Cast to byte to get sign extension to match byteIndex.
-        return (byteIndex == (byte)0xD5) ? '\u20AC' : super.getUnicode(byteIndex);
-    }
-}
-
-//eof
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp860.java b/ojluni/src/main/java/sun/io/ByteToCharCp860.java
deleted file mode 100755
index 0b9ec7c..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp860.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM860;
-
-/**
- * A table to convert to Cp860 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp860 extends ByteToCharSingleByte {
-
-    private final static IBM860 nioCoder = new IBM860();
-
-    public String getCharacterEncoding() {
-        return "Cp860";
-    }
-
-    public ByteToCharCp860() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp861.java b/ojluni/src/main/java/sun/io/ByteToCharCp861.java
deleted file mode 100755
index 450e5bd..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp861.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM861;
-
-/**
- * A table to convert to Cp861 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp861 extends ByteToCharSingleByte {
-
-    private final static IBM861 nioCoder = new IBM861();
-
-    public String getCharacterEncoding() {
-        return "Cp861";
-    }
-
-    public ByteToCharCp861() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp862.java b/ojluni/src/main/java/sun/io/ByteToCharCp862.java
deleted file mode 100755
index b0420dd..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp862.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.IBM862;
-
-/**
- * A table to convert to Cp862 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp862 extends ByteToCharSingleByte {
-
-    private final static IBM862 nioCoder = new IBM862();
-
-    public String getCharacterEncoding() {
-        return "Cp862";
-    }
-
-    public ByteToCharCp862() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp863.java b/ojluni/src/main/java/sun/io/ByteToCharCp863.java
deleted file mode 100755
index 7dcd64c..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp863.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM863;
-
-/**
- * A table to convert to Cp863 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp863 extends ByteToCharSingleByte {
-
-    private final static IBM863 nioCoder = new IBM863();
-
-    public String getCharacterEncoding() {
-        return "Cp863";
-    }
-
-    public ByteToCharCp863() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp864.java b/ojluni/src/main/java/sun/io/ByteToCharCp864.java
deleted file mode 100755
index 7aa11fa..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp864.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM864;
-
-/**
- * A table to convert to Cp864 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp864 extends ByteToCharSingleByte {
-
-    private final static IBM864 nioCoder = new IBM864();
-
-    public String getCharacterEncoding() {
-        return "Cp864";
-    }
-
-    public ByteToCharCp864() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp865.java b/ojluni/src/main/java/sun/io/ByteToCharCp865.java
deleted file mode 100755
index 75e0fef..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp865.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM865;
-
-/**
- * A table to convert to Cp865 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp865 extends ByteToCharSingleByte {
-
-    private final static IBM865 nioCoder = new IBM865();
-
-    public String getCharacterEncoding() {
-        return "Cp865";
-    }
-
-    public ByteToCharCp865() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp866.java b/ojluni/src/main/java/sun/io/ByteToCharCp866.java
deleted file mode 100755
index df47322..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp866.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.IBM866;
-
-/**
- * A table to convert to Cp866 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp866 extends ByteToCharSingleByte {
-
-    private final static IBM866 nioCoder = new IBM866();
-
-    public String getCharacterEncoding() {
-        return "Cp866";
-    }
-
-    public ByteToCharCp866() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp868.java b/ojluni/src/main/java/sun/io/ByteToCharCp868.java
deleted file mode 100755
index af21983..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp868.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM868;
-
-/**
- * A table to convert to Cp868 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp868 extends ByteToCharSingleByte {
-
-    private final static IBM868 nioCoder = new IBM868();
-
-    public String getCharacterEncoding() {
-        return "Cp868";
-    }
-
-    public ByteToCharCp868() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp869.java b/ojluni/src/main/java/sun/io/ByteToCharCp869.java
deleted file mode 100755
index 10f6576..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp869.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM869;
-
-/**
- * A table to convert to Cp869 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp869 extends ByteToCharSingleByte {
-
-    private final static IBM869 nioCoder = new IBM869();
-
-    public String getCharacterEncoding() {
-        return "Cp869";
-    }
-
-    public ByteToCharCp869() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp870.java b/ojluni/src/main/java/sun/io/ByteToCharCp870.java
deleted file mode 100755
index 463d1ef..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp870.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM870;
-
-/**
- * A table to convert to Cp870 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp870 extends ByteToCharSingleByte {
-
-    private final static IBM870 nioCoder = new IBM870();
-
-    public String getCharacterEncoding() {
-        return "Cp870";
-    }
-
-    public ByteToCharCp870() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp871.java b/ojluni/src/main/java/sun/io/ByteToCharCp871.java
deleted file mode 100755
index b6a59ad..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp871.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM871;
-
-/**
- * A table to convert to Cp871 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp871 extends ByteToCharSingleByte {
-
-    private final static IBM871 nioCoder = new IBM871();
-
-    public String getCharacterEncoding() {
-        return "Cp871";
-    }
-
-    public ByteToCharCp871() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp874.java b/ojluni/src/main/java/sun/io/ByteToCharCp874.java
deleted file mode 100755
index 0eabc28..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp874.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.IBM874;
-
-/**
- * A table to convert to Cp874 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp874 extends ByteToCharSingleByte {
-
-    private final static IBM874 nioCoder = new IBM874();
-
-    public String getCharacterEncoding() {
-        return "Cp874";
-    }
-
-    public ByteToCharCp874() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp875.java b/ojluni/src/main/java/sun/io/ByteToCharCp875.java
deleted file mode 100755
index c08e956..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp875.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM875;
-
-/**
- * A table to convert to Cp875 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp875 extends ByteToCharSingleByte {
-
-    private final static IBM875 nioCoder = new IBM875();
-
-    public String getCharacterEncoding() {
-        return "Cp875";
-    }
-
-    public ByteToCharCp875() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp918.java b/ojluni/src/main/java/sun/io/ByteToCharCp918.java
deleted file mode 100755
index 858b311..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp918.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM918;
-
-/**
- * A table to convert to Cp918 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp918 extends ByteToCharSingleByte {
-
-    private final static IBM918 nioCoder = new IBM918();
-
-    public String getCharacterEncoding() {
-        return "Cp918";
-    }
-
-    public ByteToCharCp918() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp921.java b/ojluni/src/main/java/sun/io/ByteToCharCp921.java
deleted file mode 100755
index 4105b07..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp921.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM921;
-
-/**
- * A table to convert to Cp921 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp921 extends ByteToCharSingleByte {
-
-    private final static IBM921 nioCoder = new IBM921();
-
-    public String getCharacterEncoding() {
-        return "Cp921";
-    }
-
-    public ByteToCharCp921() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp922.java b/ojluni/src/main/java/sun/io/ByteToCharCp922.java
deleted file mode 100755
index fa66bea..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp922.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM922;
-
-/**
- * A table to convert to Cp922 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharCp922 extends ByteToCharSingleByte {
-
-    private final static IBM922 nioCoder = new IBM922();
-
-    public String getCharacterEncoding() {
-        return "Cp922";
-    }
-
-    public ByteToCharCp922() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp930.java b/ojluni/src/main/java/sun/io/ByteToCharCp930.java
deleted file mode 100755
index 0e47346..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp930.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp930 extends ByteToCharDBCS_EBCDIC {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp930";
-    }
-
-    public ByteToCharCp930() {
-        super((DoubleByte.Decoder)new IBM930().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp933.java b/ojluni/src/main/java/sun/io/ByteToCharCp933.java
deleted file mode 100755
index 6310f2d..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp933.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp933 extends ByteToCharDBCS_EBCDIC {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp933";
-    }
-
-    public ByteToCharCp933() {
-        super((DoubleByte.Decoder)new IBM933().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp935.java b/ojluni/src/main/java/sun/io/ByteToCharCp935.java
deleted file mode 100755
index 2c67eec..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp935.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp935 extends ByteToCharDBCS_EBCDIC {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp935";
-    }
-
-    public ByteToCharCp935() {
-        super((DoubleByte.Decoder)new IBM935().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp937.java b/ojluni/src/main/java/sun/io/ByteToCharCp937.java
deleted file mode 100755
index cd4ed0e..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp937.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp937 extends ByteToCharDBCS_EBCDIC {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp937";
-    }
-
-    public ByteToCharCp937() {
-        super((DoubleByte.Decoder)new IBM937().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp939.java b/ojluni/src/main/java/sun/io/ByteToCharCp939.java
deleted file mode 100755
index e4d81b1..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp939.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp939 extends ByteToCharDBCS_EBCDIC {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp939";
-    }
-
-    public ByteToCharCp939() {
-        super((DoubleByte.Decoder)new IBM939().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp942.java b/ojluni/src/main/java/sun/io/ByteToCharCp942.java
deleted file mode 100755
index 5970999..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp942.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp942 extends ByteToCharDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp942";
-    }
-
-    public ByteToCharCp942() {
-        super((DoubleByte.Decoder)new IBM942().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp942C.java b/ojluni/src/main/java/sun/io/ByteToCharCp942C.java
deleted file mode 100755
index 8b03dc4..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp942C.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp942C extends ByteToCharDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp942C";
-    }
-
-    public ByteToCharCp942C() {
-        super((DoubleByte.Decoder)new IBM942C().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp943.java b/ojluni/src/main/java/sun/io/ByteToCharCp943.java
deleted file mode 100755
index 798e696..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp943.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp943 extends ByteToCharDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp943";
-    }
-
-    public ByteToCharCp943() {
-        super((DoubleByte.Decoder)new IBM943().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp943C.java b/ojluni/src/main/java/sun/io/ByteToCharCp943C.java
deleted file mode 100755
index ea99f9f..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp943C.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp943C extends ByteToCharDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp943C";
-    }
-
-    public ByteToCharCp943C() {
-        super((DoubleByte.Decoder)new IBM943C().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp948.java b/ojluni/src/main/java/sun/io/ByteToCharCp948.java
deleted file mode 100755
index 0c68eda..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp948.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp948 extends ByteToCharDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp948";
-    }
-
-    public ByteToCharCp948() {
-        super((DoubleByte.Decoder)new IBM948().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp949.java b/ojluni/src/main/java/sun/io/ByteToCharCp949.java
deleted file mode 100755
index ab239a7..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp949.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp949 extends ByteToCharDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp949";
-    }
-
-    public ByteToCharCp949() {
-        super((DoubleByte.Decoder)new IBM949().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp949C.java b/ojluni/src/main/java/sun/io/ByteToCharCp949C.java
deleted file mode 100755
index 894bd3d..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp949C.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp949C extends ByteToCharDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp949C";
-    }
-
-    public ByteToCharCp949C() {
-        super((DoubleByte.Decoder)new IBM949C().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp950.java b/ojluni/src/main/java/sun/io/ByteToCharCp950.java
deleted file mode 100755
index fc5ca80..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp950.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp950 extends ByteToCharDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp950";
-    }
-
-    public ByteToCharCp950() {
-        super((DoubleByte.Decoder)new IBM950().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp964.java b/ojluni/src/main/java/sun/io/ByteToCharCp964.java
deleted file mode 100755
index 0bcef26..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp964.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.IBM964;
-
-/**
-* @author Malcolm Ayres
-*/
-public class ByteToCharCp964 extends ByteToCharConverter
-{
-    private final static IBM964 nioCoder = new IBM964();
-
-    private final int G0 = 0;
-    private final int G1 = 1;
-    private final int G2 = 2;
-    private final int G3 = 3;
-    private final int G4 = 4;
-    private final int SS2 =  0x8E;
-    private final int SS3 =  0x8F;
-
-    private int firstByte, state;
-
-    private String byteToCharTable;
-    private String mappingTableG1;
-    private String mappingTableG2;
-    private String mappingTableG2a2;
-    private String mappingTableG2ac;
-    private String mappingTableG2ad;
-
-
-    public ByteToCharCp964() {
-       super();
-       state = G0;
-       byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-       mappingTableG1 = nioCoder.getDecoderMappingTableG1();
-       mappingTableG2a2 = nioCoder.getDecoderMappingTableG2a2();
-       mappingTableG2ac = nioCoder.getDecoderMappingTableG2ac();
-       mappingTableG2ad = nioCoder.getDecoderMappingTableG2ad();
-    }
-
-    /**
-      * Return the character set id
-      */
-    public String getCharacterEncoding()
-    {
-       return "Cp964";
-    }
-
-    /**
-      * flush out any residual data and reset the buffer state
-      */
-    public int flush(char[] output, int outStart, int outEnd)
-       throws MalformedInputException
-    {
-       if (state != G0) {
-          reset();
-          badInputLength = 0;
-          throw new MalformedInputException();
-       }
-
-       reset();
-       return 0;
-    }
-
-    /**
-     *  Resets the converter.
-     */
-    public void reset() {
-       state = G0;
-       charOff = byteOff = 0;
-    }
-
-    /**
-     * Character conversion
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-
-       int       byte1;
-       char      outputChar = '\uFFFD';
-
-       byteOff = inOff;
-       charOff = outOff;
-
-       while (byteOff < inEnd) {
-
-          byte1 = input[byteOff];
-          if (byte1 < 0)
-            byte1 += 256;
-
-          switch (state) {
-             case G0:
-                if (byte1 == SS2)
-                   state = G2;
-                else if (byte1 == SS3) {
-                   badInputLength = 1;
-                   throw new MalformedInputException();
-                }
-                else if ( byte1 <= 0x9f )               // valid single byte
-                   outputChar = byteToCharTable.charAt(byte1);
-                else if (byte1 < 0xa1 || byte1 > 0xfe) {
-                   badInputLength = 1;
-                   throw new MalformedInputException();
-                } else {                                // valid 1st byte for G1
-                   firstByte = byte1;
-                   state = G1;
-                }
-                break;
-
-             case G1:
-                state = G0;
-                if ( byte1 < 0xa1 || byte1 > 0xfe) {   // valid second byte for G1
-                   badInputLength = 1;
-                   throw new MalformedInputException();
-                }
-                outputChar = mappingTableG1.charAt(((firstByte - 0xa1) * 94)  + byte1 - 0xa1);
-                break;
-
-             case G2:
-                // set the correct mapping table for supported G2 sets
-                if ( byte1 == 0xa2)
-                  mappingTableG2 = mappingTableG2a2;
-                else
-                if ( byte1 == 0xac)
-                  mappingTableG2 = mappingTableG2ac;
-                else
-                if ( byte1 == 0xad)
-                  mappingTableG2 = mappingTableG2ad;
-                else {
-                   state = G0;
-                   badInputLength = 1;
-                   throw new MalformedInputException();
-                }
-                state = G3;
-                break;
-
-             case G3:
-                if ( byte1 < 0xa1 || byte1 > 0xfe) {  // valid 1st byte for G2 set
-                   state = G0;
-                   badInputLength = 1;
-                   throw new MalformedInputException();
-                }
-                firstByte = byte1;
-                state = G4;
-                break;
-
-             case G4:
-                state = G0;
-                if ( byte1 < 0xa1 || byte1 > 0xfe) { // valid 2nd byte for G2 set
-                   badInputLength = 1;
-                   throw new MalformedInputException();
-                }
-                outputChar = mappingTableG2.charAt(((firstByte - 0xa1) * 94)  + byte1 - 0xa1);
-                break;
-
-          }
-
-          if (state == G0) {
-             if (outputChar == '\uFFFD') {
-                if (subMode)
-                   outputChar = subChars[0];
-                else {
-                   badInputLength = 1;
-                   throw new UnknownCharacterException();
-                }
-             }
-
-             if (charOff >= outEnd)
-                throw new ConversionBufferFullException();
-
-             output[charOff++] = outputChar;
-          }
-
-          byteOff++;
-
-       }
-
-       return charOff - outOff;
-
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharCp970.java b/ojluni/src/main/java/sun/io/ByteToCharCp970.java
deleted file mode 100755
index 03c272d..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharCp970.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharCp970 extends ByteToCharEUC2 {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp970";
-    }
-
-    public ByteToCharCp970() {
-        super((DoubleByte.Decoder)new IBM970().newDecoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharDBCS_ASCII.java b/ojluni/src/main/java/sun/io/ByteToCharDBCS_ASCII.java
deleted file mode 100755
index ee93c03..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharDBCS_ASCII.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.DoubleByte;
-import static sun.nio.cs.CharsetMapping.*;
-
-public abstract class ByteToCharDBCS_ASCII extends ByteToCharConverter
-{
-    private boolean savedBytePresent;
-    private int savedByte;
-
-    private DoubleByte.Decoder dec;
-
-    public ByteToCharDBCS_ASCII(DoubleByte.Decoder dec) {
-        super();
-        savedBytePresent = false;
-        this.dec = dec;
-    }
-
-    char decodeSingle(int b) {
-        return dec.decodeSingle(b);
-    }
-
-    char decodeDouble(int b1, int b2) {
-        return dec.decodeDouble(b1, b2);
-    }
-
-    public int flush(char [] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-
-       if (savedBytePresent) {
-           reset();
-           badInputLength = 0;
-           throw new MalformedInputException();
-       }
-
-       reset();
-       return 0;
-    }
-
-    /**
-     * Character conversion
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-        int inputSize;
-        char    outputChar = UNMAPPABLE_DECODING;
-
-        charOff = outOff;
-        byteOff = inOff;
-
-        while(byteOff < inEnd)
-        {
-           int byte1;
-
-           if (!savedBytePresent) {
-              byte1 = input[byteOff] & 0xff;
-              inputSize = 1;
-           } else {
-              byte1 = savedByte;
-              savedBytePresent = false;
-              inputSize = 0;
-           }
-
-           outputChar = decodeSingle(byte1);
-           if (outputChar == UNMAPPABLE_DECODING) {
-
-              if (byteOff + inputSize >= inEnd) {
-                savedByte = byte1;
-                savedBytePresent = true;
-                byteOff += inputSize;
-                break;
-              }
-
-              outputChar = decodeDouble(byte1, input[byteOff+inputSize] & 0xff);
-              inputSize++;
-           }
-
-           if (outputChar == UNMAPPABLE_DECODING) {
-              if (subMode)
-                 outputChar = subChars[0];
-              else {
-                 badInputLength = inputSize;
-                 throw new UnknownCharacterException();
-              }
-           }
-
-           if (charOff >= outEnd)
-              throw new ConversionBufferFullException();
-
-           output[charOff++] = outputChar;
-           byteOff += inputSize;
-
-        }
-
-        return charOff - outOff;
-    }
-
-    /**
-     *  Resets the converter.
-     */
-    public void reset() {
-       charOff = byteOff = 0;
-       savedBytePresent = false;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharDBCS_EBCDIC.java b/ojluni/src/main/java/sun/io/ByteToCharDBCS_EBCDIC.java
deleted file mode 100755
index 37442f4..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharDBCS_EBCDIC.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.DoubleByte;
-import static sun.nio.cs.CharsetMapping.*;
-
-public abstract class ByteToCharDBCS_EBCDIC extends ByteToCharConverter
-{
-
-    private static final int SBCS = 0;
-    private static final int DBCS = 1;
-
-    private static final int SO = 0x0e;
-    private static final int SI = 0x0f;
-
-    private int  currentState;
-    private boolean savedBytePresent;
-    private int savedByte;
-
-    private DoubleByte.Decoder dec;
-
-    public ByteToCharDBCS_EBCDIC(DoubleByte.Decoder dec) {
-       super();
-       currentState = SBCS;
-       savedBytePresent = false;
-       this.dec = dec;
-    }
-
-    char decodeSingle(int b) {
-        return dec.decodeSingle(b);
-    }
-
-    char decodeDouble(int b1, int b2) {
-        return dec.decodeDouble(b1, b2);
-    }
-
-    public int flush(char [] output, int outStart, int outEnd)
-       throws MalformedInputException
-    {
-
-       if (savedBytePresent) {
-           reset();
-           badInputLength = 0;
-           throw new MalformedInputException();
-       }
-
-       reset();
-       return 0;
-    }
-
-    /**
-     * Character conversion
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-       int  inputSize;
-       char outputChar = UNMAPPABLE_DECODING;
-
-       charOff = outOff;
-       byteOff = inOff;
-
-       while(byteOff < inEnd) {
-          int byte1, byte2;
-
-          if (!savedBytePresent) {
-            byte1 = input[byteOff] & 0xff;
-            inputSize = 1;
-          } else {
-            byte1 = savedByte;
-            savedBytePresent = false;
-            inputSize = 0;
-          }
-
-          if (byte1 == SO) {
-
-             // For SO characters - simply validate the state and if OK
-             //    update the state and go to the next byte
-
-             if (currentState != SBCS) {
-                badInputLength = 1;
-                throw new MalformedInputException();
-             } else {
-                currentState = DBCS;
-                byteOff += inputSize;
-             }
-          }
-
-          else
-             if (byte1 == SI) {
-                // For SI characters - simply validate the state and if OK
-                //    update the state and go to the next byte
-
-                if (currentState != DBCS) {
-                   badInputLength = 1;
-                   throw new MalformedInputException();
-                } else {
-                   currentState = SBCS;
-                   byteOff+= inputSize;
-                }
-             } else {
-
-                // Process the real data characters
-
-                if (currentState == SBCS) {
-                   outputChar = decodeSingle(byte1);
-                } else {
-
-                   // for a DBCS character - architecture dictates the
-                   // valid range of 1st bytes
-
-                   if (byte1 < 0x40 || byte1 > 0xfe) {
-                      badInputLength = 1;
-                      throw new MalformedInputException();
-                   }
-
-                   if (byteOff + inputSize >= inEnd) {
-                      // We have been split in the middle if a character
-                      // save the first byte for next time around
-
-                      savedByte = byte1;
-                      savedBytePresent = true;
-                      byteOff += inputSize;
-                      break;
-                   }
-
-                   byte2 = input[byteOff+inputSize] & 0xff;
-                   inputSize++;
-
-                   // validate the pair of bytes meet the architecture
-
-                   if ((byte1 != 0x40 || byte2 != 0x40) &&
-                      (byte2 < 0x41 || byte2 > 0xfe)) {
-                      badInputLength = 2;
-                      throw new MalformedInputException();
-                   }
-
-                   outputChar = decodeDouble(byte1, byte2);
-                }
-
-                if (outputChar == UNMAPPABLE_DECODING) {
-                   if (subMode)
-                      outputChar = subChars[0];
-                   else {
-                      badInputLength = inputSize;
-                      throw new UnknownCharacterException();
-                   }
-                }
-
-                if (charOff >= outEnd)
-                   throw new ConversionBufferFullException();
-
-                output[charOff++] = outputChar;
-                byteOff += inputSize;
-             }
-
-       }
-
-       return charOff - outOff;
-    }
-
-
-    /**
-     *  Resets the converter.
-     */
-    public void reset() {
-       charOff = byteOff = 0;
-       currentState = SBCS;
-       savedBytePresent = false;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharDoubleByte.java b/ojluni/src/main/java/sun/io/ByteToCharDoubleByte.java
deleted file mode 100755
index 7e78e3b..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharDoubleByte.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright (c) 1997, 2002, 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.
- */
-
-package sun.io;
-
-/**
- * @author Limin Shi
- *         Sean Jiang
- */
-
-public abstract class ByteToCharDoubleByte extends ByteToCharConverter {
-    protected byte savedByte;
-
-    /*
-     * 1st level index, provided by subclass
-     */
-    protected short index1[];
-
-    /*
-     * 2nd level index, provided by subclass
-     * every string has 0x10*(end-start+1) characters.
-     */
-    protected String  index2[];
-
-    protected int start;
-    protected int end;
-
-    /*
-     * Size of bad input that caused conversion to stop
-     */
-    protected int     badInputLength;
-
-    public ByteToCharDoubleByte() {
-        super();
-        savedByte = 0;
-    }
-
-
-    public short[] getIndex1() {
-        return(index1);
-    }
-
-    public String[] getIndex2() {
-        return(index2);
-    }
-
-    public int flush(char[] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        if (savedByte != 0) {
-            reset();
-            badInputLength = 0;
-            throw new MalformedInputException();
-        }
-        reset();
-        return 0;
-    }
-
-    /**
-     * Converts sequences of bytes to characters.
-     * Conversions that result in Exceptions can be restarted by calling
-     * convert again, with appropriately modified parameters.
-     * @return the characters written to output.
-     * @param input byte array containing text in Double/single Byte
-     * @param inStart offset in input array
-     * @param inEnd offset of last byte to be converted
-     * @param output character array to receive conversion result
-     * @param outStart starting offset
-     * @param outEnd offset of last byte to be written to
-     * @throw UnsupportedCharacterException for any bytes
-     * that cannot be converted to the external character set.
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-        char    outputChar = REPLACE_CHAR;
-        int     inputSize = 0;          // Size of input
-
-        // Record beginning offsets
-        charOff = outOff;
-        byteOff = inOff;
-
-        // Loop until we hit the end of the input
-        while (byteOff < inEnd) {
-            int byte1, byte2;
-
-            if (savedByte == 0) {
-                byte1 = input[byteOff];
-                inputSize = 1;
-            } else {
-                byte1 = savedByte;
-                savedByte = 0;
-                inputSize = 0;
-            }
-
-            outputChar = convSingleByte(byte1);
-
-            if (outputChar == REPLACE_CHAR) {   // DoubleByte char
-                if (byteOff + inputSize >= inEnd) {
-                    // split in the middle of a character
-                    // save the first byte for next time around
-                    savedByte = (byte) byte1;
-                    byteOff += inputSize;
-                    break;
-                }
-
-                byte1 &= 0xff;
-                byte2 = input[byteOff + inputSize] & 0xff;
-
-                inputSize++;
-                outputChar = getUnicode(byte1, byte2);
-            }
-
-            if (outputChar == REPLACE_CHAR) {
-                if (subMode)
-                    outputChar = subChars[0];
-                else {
-                    badInputLength = inputSize;
-                    throw new UnknownCharacterException();
-                }
-            }
-
-            if (charOff >= outEnd)
-                throw new ConversionBufferFullException();
-
-            output[charOff++] = outputChar;
-            byteOff += inputSize;
-        }
-
-        return charOff - outOff;
-    }
-
-    /**
-     * Resets the converter.
-     * Call this method to reset the converter to its initial state
-     */
-    public void reset() {
-        byteOff = charOff = 0;
-        savedByte = 0;
-    }
-
-
-    /*
-     * Can be changed by subclass
-     */
-    protected char convSingleByte(int b) {
-        if (b >= 0)
-            return (char) b;
-        return REPLACE_CHAR;
-    }
-
-    /*
-     * Can be changed by subclass
-     */
-    protected char getUnicode(int byte1, int byte2) {
-        // Fix for bug 4117820 - similar fix for bug 4121358 put
-        // into ByteToCharEUC_JP.getUnicode()
-        if (((byte1 < 0) || (byte1 > index1.length))
-            || ((byte2 < start) || (byte2 > end)))
-            return REPLACE_CHAR;
-
-        int n = (index1[byte1] & 0xf) * (end - start + 1) + (byte2 - start);
-        return index2[index1[byte1] >> 4].charAt(n);
-    }
-
-    protected final static char REPLACE_CHAR = '\uFFFD';
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharEUC.java b/ojluni/src/main/java/sun/io/ByteToCharEUC.java
deleted file mode 100755
index 94a9801..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharEUC.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-package sun.io;
-
-/**
-* @author Malcolm Ayres
-*/
-public abstract class ByteToCharEUC extends ByteToCharConverter
-{
-    private final int G0 = 0;
-    private final int G1 = 1;
-    private final int SS2 =  0x8E;
-    private final int SS3 =  0x8F;
-
-    private int firstByte, state;
-
-    protected String  mappingTableG1;
-    protected String  byteToCharTable;
-
-
-    public ByteToCharEUC() {
-        super();
-        state = G0;
-    }
-
-    /**
-      * flush out any residual data and reset the buffer state
-      */
-    public int flush(char[] output, int outStart, int outEnd)
-       throws MalformedInputException
-    {
-       if (state != G0) {
-          reset();
-          badInputLength = 0;
-          throw new MalformedInputException();
-       }
-
-       reset();
-       return 0;
-    }
-
-    /**
-     *  Resets the converter.
-     */
-    public void reset() {
-       state = G0;
-       charOff = byteOff = 0;
-    }
-
-    /**
-     * Character conversion
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-
-       int       byte1;
-       char      outputChar = '\uFFFD';
-
-       byteOff = inOff;
-       charOff = outOff;
-
-       while (byteOff < inEnd) {
-
-          byte1 = input[byteOff];
-          if (byte1 < 0)
-             byte1 += 256;
-
-          switch (state) {
-             case G0:
-                if (byte1 == SS2 ||                // no general support
-                    byte1 == SS3 ) {               //    for g2 or g3
-                   badInputLength = 1;
-                   throw new MalformedInputException();
-                }
-
-                if ( byte1 <= 0x9f )               // < 0x9f has its own table
-                   outputChar = byteToCharTable.charAt(byte1);
-                else
-                   if (byte1 < 0xa1 || byte1 > 0xfe) {  // byte within range?
-                      badInputLength = 1;
-                      throw new MalformedInputException();
-                   } else {                       // G1 set first byte
-                      firstByte = byte1;
-                      state = G1;
-                   }
-                break;
-
-             case G1:
-
-                state = G0;
-                if ( byte1 < 0xa1 || byte1 > 0xfe) {  // valid G1 set second byte
-                   badInputLength = 1;
-                   throw new MalformedInputException();
-                }
-
-                outputChar = mappingTableG1.charAt(((firstByte - 0xa1) * 94) + byte1 - 0xa1);
-                break;
-
-          }
-
-          if (state == G0) {
-             if (outputChar == '\uFFFD') {
-                if (subMode)
-                   outputChar = subChars[0];
-                else {
-                   badInputLength = 1;
-                   throw new UnknownCharacterException();
-                }
-             }
-
-             if (charOff >= outEnd)
-                throw new ConversionBufferFullException();
-
-             output[charOff++] = outputChar;
-          }
-
-          byteOff++;
-
-       }
-
-       return charOff - outOff;
-
-   }
-
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharEUC2.java b/ojluni/src/main/java/sun/io/ByteToCharEUC2.java
deleted file mode 100755
index e5d50ce..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharEUC2.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.DoubleByte;
-import static sun.nio.cs.CharsetMapping.*;
-
-public abstract class ByteToCharEUC2 extends ByteToCharConverter
-{
-    private final int G0 = 0;
-    private final int G1 = 1;
-    private final int SS2 =  0x8E;
-    private final int SS3 =  0x8F;
-
-    private int firstByte, state;
-
-    private DoubleByte.Decoder dec;
-
-    public ByteToCharEUC2(DoubleByte.Decoder dec) {
-        super();
-        state = G0;
-        this.dec = dec;
-    }
-
-    char decodeSingle(int b) {
-        return dec.decodeSingle(b);
-    }
-
-    char decodeDouble(int b1, int b2) {
-        return dec.decodeDouble(b1, b2);
-    }
-
-    /**
-      * flush out any residual data and reset the buffer state
-      */
-    public int flush(char[] output, int outStart, int outEnd)
-       throws MalformedInputException
-    {
-       if (state != G0) {
-          reset();
-          badInputLength = 0;
-          throw new MalformedInputException();
-       }
-
-       reset();
-       return 0;
-    }
-
-    /**
-     *  Resets the converter.
-     */
-    public void reset() {
-       state = G0;
-       charOff = byteOff = 0;
-    }
-
-    /**
-     * Character conversion
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-        int       byte1;
-        char      outputChar = UNMAPPABLE_DECODING;
-        byteOff = inOff;
-        charOff = outOff;
-
-        while (byteOff < inEnd) {
-            byte1 = input[byteOff] & 0xff;
-            switch (state) {
-            case G0:
-                if (byte1 == SS2 ||                // no general support
-                    byte1 == SS3 ) {               //    for g2 or g3
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-                if ( byte1 <= 0x9f )               // < 0x9f has its own table
-                    outputChar = decodeSingle(byte1);
-                else
-                    if (byte1 < 0xa1 || byte1 > 0xfe) {  // byte within range?
-                        badInputLength = 1;
-                        throw new MalformedInputException();
-                    } else {                       // G1 set first byte
-                        firstByte = byte1;
-                        state = G1;
-                    }
-                break;
-            case G1:
-                state = G0;
-                if ( byte1 < 0xa1 || byte1 > 0xfe) {  // valid G1 set second byte
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-                outputChar = decodeDouble(firstByte, byte1);
-                break;
-            }
-            if (state == G0) {
-                if (outputChar == UNMAPPABLE_DECODING) {
-                    if (subMode)
-                        outputChar = subChars[0];
-                    else {
-                        badInputLength = 1;
-                        throw new UnknownCharacterException();
-                    }
-                }
-                if (charOff >= outEnd)
-                    throw new ConversionBufferFullException();
-                output[charOff++] = outputChar;
-            }
-            byteOff++;
-         }
-         return charOff - outOff;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharEUC_CN.java b/ojluni/src/main/java/sun/io/ByteToCharEUC_CN.java
deleted file mode 100755
index b30f3c7..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharEUC_CN.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharEUC_CN extends ByteToCharDBCS_ASCII {
-
-    private static DoubleByte.Decoder dec =
-        (DoubleByte.Decoder)new EUC_CN().newDecoder();
-
-    public String getCharacterEncoding() {
-        return "EUC_CN";
-    }
-
-    public ByteToCharEUC_CN() {
-        super(dec);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharEUC_JP.java b/ojluni/src/main/java/sun/io/ByteToCharEUC_JP.java
deleted file mode 100755
index bcf0c70..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharEUC_JP.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-/**
- * @author Limin Shi
- */
-
-public class ByteToCharEUC_JP extends ByteToCharJIS0208 {
-    private byte savedSecond = 0;
-
-    ByteToCharJIS0201 bcJIS0201 = new ByteToCharJIS0201();
-    ByteToCharJIS0212 bcJIS0212 = new ByteToCharJIS0212();
-
-    public ByteToCharEUC_JP() {
-        super();
-        start = 0xA1;
-        end = 0xFE;
-        savedSecond = 0;
-    }
-
-    public int flush(char[] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        if (savedSecond != 0) {
-            reset();
-            throw new MalformedInputException();
-        }
-        reset();
-        return 0;
-    }
-
-    /**
-     * Resets the converter.
-     * Call this method to reset the converter to its initial state
-     */
-    public void reset() {
-        super.reset();
-        savedSecond = 0;
-    }
-
-    public String getCharacterEncoding() {
-        return "EUC_JP";
-    }
-
-    protected char convSingleByte(int b) {
-        if (b < 0 || b > 0x7F)
-            return REPLACE_CHAR;
-        return bcJIS0201.getUnicode(b);
-    }
-
-    protected char getUnicode(int byte1, int byte2) {
-        if (byte1 == 0x8E) {
-            return bcJIS0201.getUnicode(byte2 - 256);
-        }
-        // Fix for bug 4121358 - similar fix for bug 4117820 put
-        // into ByteToCharDoubleByte.getUnicode()
-        if (((byte1 < 0) || (byte1 > index1.length))
-            || ((byte2 < start) || (byte2 > end)))
-            return REPLACE_CHAR;
-
-        int n = (index1[byte1 - 0x80] & 0xf) * (end - start + 1)
-                + (byte2 - start);
-        return index2[index1[byte1 - 0x80] >> 4].charAt(n);
-    }
-
-    protected char decode0212(int byte1, int byte2) {
-        return bcJIS0212.getUnicode(byte1, byte2);
-    }
-
-    /**
-     * Converts sequences of bytes to characters.
-     * Conversions that result in Exceptions can be restarted by calling
-     * convert again, with appropriately modified parameters.
-     * @return the characters written to output.
-     * @param input byte array containing text in Double/single Byte
-     * @param inStart offset in input array
-     * @param inEnd offset of last byte to be converted
-     * @param output character array to receive conversion result
-     * @param outStart starting offset
-     * @param outEnd offset of last byte to be written to
-     * @throw UnsupportedCharacterException for any bytes
-     * that cannot be converted to the external character set.
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws UnknownCharacterException,
-               ConversionBufferFullException
-    {
-        char    outputChar = REPLACE_CHAR;
-        int     inputSize = 0;          // Size of input
-
-        // Record beginning offsets
-        charOff = outOff;
-        byteOff = inOff;
-
-        // Loop until we hit the end of the input
-        while (byteOff < inEnd) {
-            int byte1, byte2;
-
-            if (savedByte == 0) {
-                byte1 = input[byteOff];
-                inputSize = 1;
-            } else {
-                byte1 = savedByte;
-                savedByte = 0;
-                inputSize = 0;
-            }
-
-            outputChar = convSingleByte(byte1);
-
-            if (outputChar == REPLACE_CHAR) {   // Multibyte char
-                if ((byte1 & 0xff) == 0x8F) {   // JIS0212
-                    if (byteOff + inputSize + 1 >= inEnd) {
-                        // split in the middle of a character
-                        // save the first 2 bytes for next time around
-                        savedByte = (byte) byte1;
-                        byteOff += inputSize;
-                        if (byteOff < inEnd) {
-                            savedSecond = input[byteOff];
-                            byteOff++;
-                        }
-                        break;
-                    }
-                    if (savedSecond != 0) {
-                        byte1 = savedSecond & 0xff;
-                        savedSecond = 0;
-                    } else {
-                        byte1 = input[byteOff + inputSize] & 0xff;
-                        inputSize++;
-                    }
-                    byte2 = input[byteOff + inputSize] & 0xff;
-                    inputSize++;
-                    outputChar = decode0212(byte1-0x80, byte2-0x80);
-                } else { // JIS0208
-                    if (byteOff + inputSize >= inEnd) {
-                        // split in the middle of a character
-                        // save the first byte for next time around
-                        savedByte = (byte) byte1;
-                        byteOff += inputSize;
-                        break;
-                    }
-                    byte1 &= 0xff;
-                    byte2 = input[byteOff + inputSize] & 0xff;
-                    inputSize++;
-                    outputChar = getUnicode(byte1, byte2);
-                }
-            }
-
-            if (outputChar == REPLACE_CHAR) {
-                if (subMode)
-                    outputChar = subChars[0];
-                else {
-                    badInputLength = inputSize;
-                    throw new UnknownCharacterException();
-                }
-            }
-
-            if (charOff >= outEnd)
-                throw new ConversionBufferFullException();
-
-            output[charOff++] = outputChar;
-            byteOff += inputSize;
-        }
-
-        return charOff - outOff;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharEUC_JP_LINUX.java b/ojluni/src/main/java/sun/io/ByteToCharEUC_JP_LINUX.java
deleted file mode 100755
index 5cf0b20..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharEUC_JP_LINUX.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package sun.io;
-
-/**
- * Class for converting bytes to characters for the EUC-JP encoding in
- * linux. This converter supports the JIS0201 and the JIS0208 encoding and
- * omits support for the JIS212 encoding.
- *
- * @author Naveen Sanjeeva
- */
-
-public class ByteToCharEUC_JP_LINUX extends  ByteToCharJIS0208 {
-    private byte savedSecond = 0;
-    ByteToCharJIS0201 bcJIS0201 = new ByteToCharJIS0201();
-
-    public ByteToCharEUC_JP_LINUX() {
-        super();
-        start = 0xA1;
-        end = 0xFE;
-        savedSecond = 0;
-    }
-
-    public int flush(char[] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        if (savedSecond != 0) {
-            reset();
-            throw new MalformedInputException();
-        }
-        reset();
-        return 0;
-    }
-
-    /**
-     * Resets the converter.
-     * Call this method to reset the converter to its initial state
-     */
-    public void reset() {
-        super.reset();
-        savedSecond = 0;
-    }
-
-    public String getCharacterEncoding() {
-        return "EUC_JP_LINUX";
-    }
-
-    protected char convSingleByte(int b) {
-        if (b < 0 || b > 0x7F)
-            return REPLACE_CHAR;
-        return bcJIS0201.getUnicode(b);
-    }
-
-    protected char getUnicode(int byte1, int byte2) {
-        if (byte1 == 0x8E) {
-            return bcJIS0201.getUnicode(byte2 - 256);
-        }
-        // Fix for bug 4121358 - similar fix for bug 4117820 put
-        // into ByteToCharDoubleByte.getUnicode()
-        if (((byte1 < 0) || (byte1 > index1.length))
-            || ((byte2 < start) || (byte2 > end)))
-            return REPLACE_CHAR;
-
-        int n = (index1[byte1 - 0x80] & 0xf) * (end - start + 1)
-                + (byte2 - start);
-        return index2[index1[byte1 - 0x80] >> 4].charAt(n);
-    }
-
-    /**
-     * Converts sequences of bytes to characters.
-     * Conversions that result in Exceptions can be restarted by calling
-     * convert again, with appropriately modified parameters.
-     * @return the characters written to output.
-     * @param input byte array containing text in Double/single Byte
-     * @param inStart offset in input array
-     * @param inEnd offset of last byte to be converted
-     * @param output character array to receive conversion result
-     * @param outStart starting offset
-     * @param outEnd offset of last byte to be written to
-     * @throw UnsupportedCharacterException for any bytes
-     * that cannot be converted to the external character set.
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws UnknownCharacterException,
-               ConversionBufferFullException
-    {
-        char    outputChar = REPLACE_CHAR;
-        int     inputSize = 0;          // Size of input
-
-        // Record beginning offsets
-        charOff = outOff;
-        byteOff = inOff;
-
-        // Loop until we hit the end of the input
-        while (byteOff < inEnd) {
-            int byte1, byte2;
-
-            if (savedByte == 0) {
-                byte1 = input[byteOff];
-                inputSize = 1;
-            } else {
-                byte1 = savedByte;
-                savedByte = 0;
-                inputSize = 0;
-            }
-
-            outputChar = convSingleByte(byte1);
-
-            if (outputChar == REPLACE_CHAR) {   // Multibyte char
-                if ((byte1 & 0xff) != 0x8F) {   // JIS0208
-                    if (byteOff + inputSize >= inEnd) {
-                        // split in the middle of a character
-                        // save the first byte for next time around
-                        savedByte = (byte) byte1;
-                        byteOff += inputSize;
-                        break;
-                    }
-                    byte1 &= 0xff;
-                    byte2 = input[byteOff + inputSize] & 0xff;
-                    inputSize++;
-                    outputChar = getUnicode(byte1, byte2);
-                } else if ((byte1 & 0xff) == 0x8F) {   // JIS0212
-                    // Handling of 3-byte sequences for this converter involves
-                    // just ignoring the relevant bytes and returning a
-                    // suitable substitute char if one exists.
-                    if (byteOff + inputSize + 1 >= inEnd) {
-                        // split in the middle of a character
-                        // save the first 2 bytes for next time around
-                        savedByte = (byte) byte1;
-                        byteOff += inputSize;
-                        if (byteOff < inEnd) {
-                            savedSecond = input[byteOff];
-                            byteOff++;
-                        }
-                        break;
-                    }
-
-                    // Skip over the saved bytes if any
-                    if (savedSecond != 0) {
-                        savedSecond = 0;
-                    } else {
-                        inputSize++;
-                    }
-                    inputSize++;
-                }
-            }
-
-            if (outputChar == REPLACE_CHAR) {
-                if (subMode)
-                    outputChar = subChars[0];
-                else {
-                    badInputLength = inputSize;
-                    throw new UnknownCharacterException();
-                }
-            }
-
-            if (charOff >= outEnd)
-                throw new ConversionBufferFullException();
-
-            output[charOff++] = outputChar;
-            byteOff += inputSize;
-        }
-
-        return charOff - outOff;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharEUC_JP_Solaris.java b/ojluni/src/main/java/sun/io/ByteToCharEUC_JP_Solaris.java
deleted file mode 100755
index 3353a74..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharEUC_JP_Solaris.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.JIS_X_0208_Solaris_Decoder;
-import sun.nio.cs.ext.JIS_X_0212_Solaris_Decoder;
-/**
- *
- * @author Limin Shi
- * @author Ian Little
- *
- * EUC_JP variant converter for Solaris with vendor defined chars
- * added (4765370)
- */
-
-
-public class ByteToCharEUC_JP_Solaris extends ByteToCharEUC_JP {
-    private byte savedSecond = 0;
-
-    ByteToCharJIS0201 bcJIS0201 = new ByteToCharJIS0201();
-    ByteToCharJIS0212_Solaris bcJIS0212 = new ByteToCharJIS0212_Solaris();
-
-    short[] j0208Index1 = JIS_X_0208_Solaris_Decoder.getIndex1();
-    String[] j0208Index2 = JIS_X_0208_Solaris_Decoder.getIndex2();
-    ByteToCharJIS0212_Solaris j0212Decoder = new ByteToCharJIS0212_Solaris();
-
-    public ByteToCharEUC_JP_Solaris() {
-        super();
-        start = 0xA1;
-        end = 0xFE;
-        savedSecond = 0;
-    }
-
-    public int flush(char[] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        if (savedSecond != 0) {
-            reset();
-            throw new MalformedInputException();
-        }
-        reset();
-        return 0;
-    }
-
-    /**
-     * Resets the converter.
-     * Call this method to reset the converter to its initial state
-     */
-    public void reset() {
-        super.reset();
-        savedSecond = 0;
-    }
-
-    public String getCharacterEncoding() {
-        return "eucJP-open";
-    }
-
-    protected char convSingleByte(int b) {
-        if (b < 0 || b > 0x7F)
-            return REPLACE_CHAR;
-        return bcJIS0201.getUnicode(b);
-    }
-
-    protected char getUnicode(int byte1, int byte2) {
-        if (byte1 == 0x8E) {
-            return bcJIS0201.getUnicode(byte2 - 256);
-        }
-        // Fix for bug 4121358 - similar fix for bug 4117820 put
-        // into ByteToCharDoubleByte.getUnicode()
-        if (((byte1 < 0) || (byte1 > j0208Index1.length))
-            || ((byte2 < start) || (byte2 > end)))
-            return REPLACE_CHAR;
-
-        char result = super.getUnicode(byte1, byte2);
-        if (result != '\uFFFD') {
-            return result;
-        } else {
-            int n = (j0208Index1[byte1 - 0x80] & 0xf) * (end - start + 1)
-                + (byte2 - start);
-        return j0208Index2[j0208Index1[byte1 - 0x80] >> 4].charAt(n);
-        }
-    }
-
-    protected char decode0212(int byte1, int byte2) {
-        return j0212Decoder.getUnicode(byte1, byte2);
-    }
-
-    /**
-     * Converts sequences of bytes to characters.
-     * Conversions that result in Exceptions can be restarted by calling
-     * convert again, with appropriately modified parameters.
-     * @return the characters written to output.
-     * @param input byte array containing text in Double/single Byte
-     * @param inStart offset in input array
-     * @param inEnd offset of last byte to be converted
-     * @param output character array to receive conversion result
-     * @param outStart starting offset
-     * @param outEnd offset of last byte to be written to
-     * @throw UnsupportedCharacterException for any bytes
-     * that cannot be converted to the external character set.
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws UnknownCharacterException,
-               ConversionBufferFullException
-    {
-        char    outputChar = REPLACE_CHAR;
-        int     inputSize = 0;          // Size of input
-
-        // Record beginning offsets
-        charOff = outOff;
-        byteOff = inOff;
-
-        // Loop until we hit the end of the input
-        while (byteOff < inEnd) {
-            int byte1, byte2;
-
-            if (savedByte == 0) {
-                byte1 = input[byteOff];
-                inputSize = 1;
-            } else {
-                byte1 = savedByte;
-                savedByte = 0;
-                inputSize = 0;
-            }
-
-            outputChar = convSingleByte(byte1);
-
-            if (outputChar == REPLACE_CHAR) {   // Multibyte char
-                if ((byte1 & 0xff) == 0x8F) {   // JIS0212
-                    if (byteOff + inputSize + 1 >= inEnd) {
-                        // split in the middle of a character
-                        // save the first 2 bytes for next time around
-                        savedByte = (byte) byte1;
-                        byteOff += inputSize;
-                        if (byteOff < inEnd) {
-                            savedSecond = input[byteOff];
-                            byteOff++;
-                        }
-                        break;
-                    }
-                    if (savedSecond != 0) {
-                        byte1 = savedSecond & 0xff;
-                        savedSecond = 0;
-                    } else {
-                        byte1 = input[byteOff + inputSize] & 0xff;
-                        inputSize++;
-                    }
-                    byte2 = input[byteOff + inputSize] & 0xff;
-                    inputSize++;
-                    outputChar = bcJIS0212.getUnicode(byte1-0x80, byte2-0x80);
-                } else { // JIS0208
-                    if (byteOff + inputSize >= inEnd) {
-                        // split in the middle of a character
-                        // save the first byte for next time around
-                        savedByte = (byte) byte1;
-                        byteOff += inputSize;
-                        break;
-                    }
-                    byte1 &= 0xff;
-                    byte2 = input[byteOff + inputSize] & 0xff;
-                    inputSize++;
-                    outputChar = getUnicode(byte1, byte2);
-                }
-            }
-
-            if (outputChar == REPLACE_CHAR) {
-                if (subMode)
-                    outputChar = subChars[0];
-                else {
-                    badInputLength = inputSize;
-                    throw new UnknownCharacterException();
-                }
-            }
-
-            if (charOff >= outEnd)
-                throw new ConversionBufferFullException();
-
-            output[charOff++] = outputChar;
-            byteOff += inputSize;
-        }
-
-        return charOff - outOff;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharEUC_KR.java b/ojluni/src/main/java/sun/io/ByteToCharEUC_KR.java
deleted file mode 100755
index 5b1901a..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharEUC_KR.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharEUC_KR extends ByteToCharDBCS_ASCII {
-
-    private static DoubleByte.Decoder dec =
-        (DoubleByte.Decoder)new EUC_KR().newDecoder();
-
-    public String getCharacterEncoding() {
-        return "EUC_KR";
-    }
-
-    public ByteToCharEUC_KR() {
-        super(dec);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharEUC_TW.java b/ojluni/src/main/java/sun/io/ByteToCharEUC_TW.java
deleted file mode 100755
index 97493c3..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharEUC_TW.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (c) 1996, 2004, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.EUC_TW;
-
-/*
- * @author Limin Shi
- */
-public class ByteToCharEUC_TW extends ByteToCharConverter
-{
-    private final byte G0 = 0;
-    private final byte G1 = 1;
-    private final byte G2 = 2;
-    private final byte G3 = 3;
-    private final byte G4 = 4;
-    private final byte MSB = (byte) 0x80;
-    private final byte SS2 = (byte) 0x8E;
-
-    private byte firstByte = 0, state = G0;
-    private int cnsPlane = 0;
-
-    private EUC_TW.Decoder dec = (EUC_TW.Decoder)(new EUC_TW().newDecoder());
-
-    public ByteToCharEUC_TW() {
-    }
-
-    public int flush(char[] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        if (state != G0) {
-            state = G0;
-            firstByte = 0;
-            badInputLength = 0;
-            throw new MalformedInputException();
-        }
-        reset();
-        return 0;
-    }
-
-    public void reset() {
-        dec.reset();
-        state = G0;
-        firstByte = 0;
-        byteOff = charOff = 0;
-    }
-
-    /**
-     * Character conversion
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-        int inputSize = 0;
-        char[] c1 = new char[1];
-
-        byteOff = inOff;
-        charOff = outOff;
-
-        cnsPlane = 3;
-        while (byteOff < inEnd) {
-            if (charOff >= outEnd)
-                throw new ConversionBufferFullException();
-            char[] outputChar = null;
-            switch (state) {
-            case G0:
-                if ( (input[byteOff] & MSB) == 0) {     // ASCII
-                    outputChar = c1;
-                    outputChar[0] = (char) input[byteOff];
-                } else if (input[byteOff] == SS2) {     // Codeset 2
-                    state = G2;
-                } else {                                // Codeset 1
-                    firstByte = input[byteOff];
-                    state = G1;
-                }
-                break;
-            case G1:
-                inputSize = 2;
-                if ( (input[byteOff] & MSB) != 0) {     // 2nd byte
-                    cnsPlane = 0;
-                    outputChar = dec.toUnicode(firstByte & 0xff,
-                                               input[byteOff] & 0xff,
-                                               cnsPlane);
-                } else {                                // Error
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-                firstByte = 0;
-                state = G0;
-                break;
-            case G2:
-                cnsPlane = (input[byteOff] & (byte)0x0f);
-                // Adjust String array index for plan 15
-                cnsPlane = (cnsPlane == 15)? 8 : cnsPlane;
-
-                if (cnsPlane < 15) {
-                     state = G3;
-                } else {
-                    badInputLength = 2;
-                    throw new MalformedInputException();
-                }
-
-                break;
-            case G3:
-                if ( (input[byteOff] & MSB) != 0) {     // 1st byte
-                    firstByte = input[byteOff];
-                    state = G4;
-                } else {                                // Error
-                    state = G0;
-                    badInputLength = 2;
-                    throw new MalformedInputException();
-                }
-                break;
-            case G4:
-                if ( (input[byteOff] & MSB) != 0) {     // 2nd byte
-                    outputChar = dec.toUnicode(firstByte & 0xff,
-                                               input[byteOff] & 0xff,
-                                               cnsPlane - 1);
-                } else {                                // Error
-                    badInputLength = 3;
-                    throw new MalformedInputException();
-                }
-                firstByte = 0;
-                state = G0;
-                break;
-            }
-            byteOff++;
-            if (state == G0) {
-                if (outputChar == null) {
-                    if (subMode) {               // substitution enabled
-                        outputChar = c1;
-                        outputChar[0] = subChars[0];
-                    } else {
-                        badInputLength = inputSize;
-                        throw new UnknownCharacterException();
-                    }
-                }
-                output[charOff++] = outputChar[0];
-            }
-        }
-        return charOff - outOff;
-    }
-
-
-    /**
-     * Return the character set ID
-     */
-    public String getCharacterEncoding() {
-        return "EUC_TW";
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharGB18030.java b/ojluni/src/main/java/sun/io/ByteToCharGB18030.java
deleted file mode 100755
index 52b1f76..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharGB18030.java
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * Copyright (c) 2001, 2003, 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.
- */
-
-/*
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.GB18030;
-
-public class ByteToCharGB18030 extends ByteToCharGB18030DB {
-
-    private static final int GB18030_SINGLE_BYTE = 1;
-    private static final int GB18030_DOUBLE_BYTE = 2;
-    private static final int GB18030_FOUR_BYTE = 3;
-    private static short[] decoderIndex1;
-    private static String[] decoderIndex2;
-
-    private int currentState;
-    private int savedSize;
-    private byte[] savedBytes;
-
-    public ByteToCharGB18030() {
-        super();
-        GB18030 nioCoder = new GB18030();
-        savedBytes = new byte[3];
-        currentState = GB18030_DOUBLE_BYTE;
-        decoderIndex1 = nioCoder.getDecoderIndex1();
-        decoderIndex2 = nioCoder.getDecoderIndex2();
-        savedSize = 0;
-    }
-
-    public short[] getOuter() {
-        return(index1);
-    }
-
-    public String[] getInner() {
-        return(index2);
-    }
-
-    public short[] getDBIndex1() {
-        return(super.index1);
-    }
-
-    public String[] getDBIndex2() {
-        return(super.index2);
-    }
-
-    public int flush(char [] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        if (savedSize != 0) {
-            savedSize = 0;
-            currentState = GB18030_DOUBLE_BYTE;
-            badInputLength = 0;
-            throw new MalformedInputException();
-        }
-        byteOff = charOff = 0;
-        return 0;
-    }
-
-
-    /**
-     * Character conversion
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-        int inputSize = 0;
-        char outputChar = '\uFFFD';
-        // readOff keeps the actual buffer's pointer.
-        // byteOff keeps original buffer's pointer.
-        int readOff = byteOff = inOff;
-
-        if (savedSize != 0) {
-            // Filter illegal bytes when they are detected in saved
-            // partial input from a previous conversion attempt.
-            if (((savedBytes[0] & 0xFF) < 0x81 || savedBytes[0] > 0xFE) ||
-                 (savedSize > 1 &&
-                 (savedBytes[1] & 0xFF) < 0x30 ) ||
-                 (savedSize > 2 &&
-                 ((savedBytes[2] & 0xFF) < 0x81 ||
-                 (savedBytes[2] & 0xFF) > 0xFE ))) {
-                    badInputLength = 0;
-                    throw new MalformedInputException();
-            }
-
-            byte[] newBuf = new byte[inEnd - inOff + savedSize];
-            for (int i = 0; i < savedSize; i++) {
-                newBuf[i] = savedBytes[i];
-            }
-            System.arraycopy(input, inOff, newBuf, savedSize, inEnd - inOff);
-            byteOff -= savedSize;
-            input = newBuf;
-            inOff = 0;
-            inEnd = newBuf.length;
-            savedSize = 0;
-        }
-
-        charOff = outOff;
-        readOff = inOff;
-
-        while(readOff < inEnd) {
-            int byte1 = 0 , byte2 = 0, byte3 = 0, byte4 = 0;
-
-            // Is there room in the output buffer for the result?
-            if (charOff >= outEnd) {
-                throw new ConversionBufferFullException();
-            }
-
-            // Get the input byte
-            byte1 = input[readOff++] & 0xFF;
-            inputSize = 1;
-
-            if ((byte1 & (byte)0x80) == 0){ // US-ASCII range
-                outputChar = (char)byte1;
-                currentState = GB18030_SINGLE_BYTE;
-            }
-
-            else if (byte1 < 0x81 || byte1 > 0xfe) {
-                if (subMode)
-                    outputChar = subChars[0];
-                else {
-                    badInputLength = 1;
-                    throw new UnknownCharacterException();
-                }
-            }
-            else {
-                // Either 2 or 4 byte sequence follows
-                // If an underrun is detected save for later
-                // replay.
-
-                if (readOff + inputSize > inEnd) {
-                    savedBytes[0]=(byte)byte1;
-                    savedSize = 1;
-                    break;
-                }
-
-                byte2 = input[readOff++] & 0xFF;
-                inputSize = 2;
-
-                if (byte2 < 0x30) {
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-                else if (byte2 >= 0x30 && byte2 <= 0x39) {
-                    currentState = GB18030_FOUR_BYTE;
-                    inputSize = 4;
-
-                    if (readOff + 2 > inEnd) {
-                        if (readOff + 1 > inEnd) {
-                            savedBytes[0] = (byte)byte1;
-                            savedBytes[1] = (byte)byte2;
-                            savedSize = 2;
-                        }
-                        else {
-                            savedBytes[0] = (byte)byte1;
-                            savedBytes[1] = (byte)byte2;
-                            savedBytes[2] = input[readOff++];
-                            savedSize = 3;
-                        }
-                        break;
-                    }
-                    byte3 = input[readOff++] & 0xFF;
-                    if (byte3 < 0x81 || byte3 > 0xfe) {
-                        badInputLength = 3;
-                        throw new MalformedInputException();
-                    }
-
-                    byte4 = input[readOff++] & 0xFF;
-
-                    if (byte4 < 0x30 || byte4 > 0x39) {
-                        badInputLength = 4;
-                        throw new MalformedInputException();
-                    }
-                }
-                else if (byte2 == 0x7f || byte2 == 0xff ||
-                        (byte2 < 0x40 )) {
-                   badInputLength = 2;
-                   throw new MalformedInputException();
-                }
-                else
-                    currentState = GB18030_DOUBLE_BYTE;
-            }
-
-            switch (currentState){
-                case GB18030_SINGLE_BYTE:
-                    output[charOff++] = (char)(byte1);
-                    break;
-                case GB18030_DOUBLE_BYTE:
-                    output[charOff++] = super.getUnicode(byte1, byte2);
-                    break;
-                case GB18030_FOUR_BYTE:
-                    int offset = (((byte1 - 0x81) * 10 +
-                                   (byte2 - 0x30)) * 126 +
-                                    byte3 - 0x81) * 10 + byte4 - 0x30;
-                    int hiByte = (offset >>8) & 0xFF;
-                    int lowByte = (offset & 0xFF);
-
-                // Mixture of table lookups and algorithmic calculation
-                // of character values.
-
-                // BMP Ranges
-
-                if (offset <= 0x4A62)
-                    output[charOff++] = getChar(offset);
-                else if (offset > 0x4A62 && offset <= 0x82BC)
-                    output[charOff++] = (char) (offset + 0x5543);
-                else if (offset >= 0x82BD && offset <= 0x830D)
-                    output[charOff++] = getChar(offset);
-                else if (offset >= 0x830D && offset <= 0x93A8)
-                    output[charOff++] = (char) (offset + 0x6557);
-                else if (offset >= 0x93A9 && offset <= 0x99FB)
-                    output[charOff++] = getChar(offset);
-                // Supplemental UCS planes handled via surrogates
-                else if (offset >= 0x2E248 && offset < 0x12E248) {
-                    if (offset >= 0x12E248) {
-                        if (subMode)
-                           return subChars[0];
-                        else {
-                           badInputLength = 4;
-                           throw new UnknownCharacterException();
-                        }
-                    }
-
-                    if (charOff +2 > outEnd) {
-                        throw new ConversionBufferFullException();
-                    }
-                    offset -= 0x1e248;
-                    char highSurr = (char) ((offset - 0x10000) / 0x400 + 0xD800);
-                    char lowSurr = (char) ((offset - 0x10000) % 0x400 + 0xDC00);
-                    output[charOff++] = highSurr;
-                    output[charOff++] = lowSurr;
-                }
-                else {
-                    badInputLength = 4;
-                    throw new MalformedInputException();
-                    }
-                break;
-              }
-        byteOff += inputSize;
-        }
-
-        byteOff += savedSize;
-        return charOff - outOff;
-    }
-
-    public void reset() {
-        byteOff = charOff = 0;
-        currentState = GB18030_DOUBLE_BYTE;
-        savedSize = 0;
-    }
-
-    public String getCharacterEncoding() {
-        return "GB18030";
-    }
-
-    private char getChar(int offset) throws UnknownCharacterException {
-        int byte1 = (offset >>8) & 0xFF;
-        int byte2 = (offset & 0xFF);
-        int start = 0, end = 0xFF;
-
-        if (((byte1 < 0) || (byte1 > getOuter().length))
-             || ((byte2 < start) || (byte2 > end))) {
-                if (subMode)
-                   return subChars[0];
-                else {
-                   badInputLength = 1;
-                   throw new UnknownCharacterException();
-                }
-        }
-
-        int n = (decoderIndex1[byte1] & 0xf) * (end - start + 1) + (byte2 - start);
-        return decoderIndex2[decoderIndex1[byte1] >> 4].charAt(n);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharGB18030DB.java b/ojluni/src/main/java/sun/io/ByteToCharGB18030DB.java
deleted file mode 100755
index d1766df..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharGB18030DB.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2001, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.GB18030;
-
-
-/**
- * Tables and data to convert the two-byte portion of GB18030 to Unicode
- * The class is package level accessibility as it is just used for the
- * convenience of the main GB18030 converter.
- *
- * @author  ConverterGenerator tool
- */
-
-abstract class ByteToCharGB18030DB extends ByteToCharDoubleByte {
-
-    public String getCharacterEncoding() {
-        return "ByteToCharGB18030DB";
-    }
-
-    public ByteToCharGB18030DB() {
-        GB18030 nioCoder = new GB18030();
-        super.index1 = nioCoder.getSubDecoderIndex1();
-        super.index2 = nioCoder.getSubDecoderIndex2();
-        start = 0x40;
-        end = 0xFE;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharGBK.java b/ojluni/src/main/java/sun/io/ByteToCharGBK.java
deleted file mode 100755
index 2840489..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharGBK.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharGBK extends ByteToCharDBCS_ASCII {
-
-    private static DoubleByte.Decoder dec =
-        (DoubleByte.Decoder)new GBK().newDecoder();
-
-    public String getCharacterEncoding() {
-        return "GBK";
-    }
-
-    public ByteToCharGBK() {
-        super(dec);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharISCII91.java b/ojluni/src/main/java/sun/io/ByteToCharISCII91.java
deleted file mode 100755
index baa1bca..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharISCII91.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.ISCII91;
-
-/*
- * Copyright (c) 1998 International Business Machines.
- * All Rights Reserved.
- *
- * Author : Sunanda Bera, C. Thirumalesh
- * Last Modified : 23,November,1998
- *
- * Purpose : Defines class ByteToCharISCII91.
- *
- *
- * Revision History
- * ======== =======
- *
- * Date        By            Description
- * ----        --            -----------
- *
- *
- */
-
-/**
- * Converter class. Converts between Unicode encoding and ISCII91 encoding.
- * ISCII91 is the character encoding as defined in Indian Standard document
- * IS 13194:1991 ( Indian Script Code for Information Interchange ).
- *
- * @see sun.io.ByteToCharConverter
- */
-public class ByteToCharISCII91 extends ByteToCharConverter {
-
-    private static final char[] directMapTable = ISCII91.getDirectMapTable();
-
-    private static final char NUKTA_CHAR = '\u093c';
-    private static final char HALANT_CHAR = '\u094d';
-    private static final char ZWNJ_CHAR = '\u200c';
-    private static final char ZWJ_CHAR = '\u200d';
-    private static final char INVALID_CHAR = '\uffff';
-
-    private char contextChar = INVALID_CHAR;
-    private boolean needFlushing = false;
-
-/**
- * Converts ISCII91 characters to Unicode.
- * @see sun.io.ByteToCharConverter#convert
- */
-    public int convert(byte input[], int inStart, int inEnd,
-                        char output[], int outStart, int outEnd)
-    throws ConversionBufferFullException, UnknownCharacterException {
-        /*Rules:
-         * 1)ATR,EXT,following character to be replaced with '\ufffd'
-         * 2)Halant + Halant => '\u094d' (Virama) + '\u200c'(ZWNJ)
-         * 3)Halant + Nukta => '\u094d' (Virama) + '\u200d'(ZWJ)
-         */
-        charOff = outStart;
-        byteOff = inStart;
-        while (byteOff < inEnd) {
-            if (charOff >= outEnd) {
-                throw new ConversionBufferFullException();
-            }
-            int index = input[byteOff++];
-            index = ( index < 0 )? ( index + 255 ):index;
-            char currentChar = directMapTable[index];
-
-            // if the contextChar is either ATR || EXT set the output to '\ufffd'
-            if(contextChar == '\ufffd') {
-                output[charOff++] = '\ufffd';
-                contextChar = INVALID_CHAR;
-                needFlushing = false;
-                continue;
-            }
-
-            switch(currentChar) {
-            case '\u0901':
-            case '\u0907':
-            case '\u0908':
-            case '\u090b':
-            case '\u093f':
-            case '\u0940':
-            case '\u0943':
-            case '\u0964':
-                if(needFlushing) {
-                    output[charOff++] = contextChar;
-                    contextChar = currentChar;
-                    continue;
-                }
-                contextChar = currentChar;
-                needFlushing = true;
-                continue;
-            case NUKTA_CHAR:
-                switch(contextChar) {
-                case '\u0901':
-                    output[charOff] = '\u0950';
-                    break;
-                case '\u0907':
-                    output[charOff] = '\u090c';
-                    break;
-                case '\u0908':
-                    output[charOff] = '\u0961';
-                    break;
-                case '\u090b':
-                    output[charOff] = '\u0960';
-                    break;
-                case '\u093f':
-                    output[charOff] = '\u0962';
-                    break;
-                case '\u0940':
-                    output[charOff] = '\u0963';
-                    break;
-                case '\u0943':
-                    output[charOff] = '\u0944';
-                    break;
-                case '\u0964':
-                    output[charOff] = '\u093d';
-                    break;
-                case HALANT_CHAR:
-                    if(needFlushing) {
-                        output[charOff++] = contextChar;
-                        contextChar = currentChar;
-                        continue;
-                    }
-                    output[charOff] = ZWJ_CHAR;
-                    break;
-                default:
-                    if(needFlushing) {
-                        output[charOff++] = contextChar;
-                        contextChar = currentChar;
-                        continue;
-                    }
-                    output[charOff] = NUKTA_CHAR;
-                }
-                break;
-            case HALANT_CHAR:
-                if(needFlushing) {
-                    output[charOff++] = contextChar;
-                    contextChar = currentChar;
-                    continue;
-                }
-                if(contextChar == HALANT_CHAR) {
-                    output[charOff] = ZWNJ_CHAR;
-                    break;
-                }
-                output[charOff] = HALANT_CHAR;
-                break;
-            case INVALID_CHAR:
-                if(needFlushing) {
-                    output[charOff++] = contextChar;
-                    contextChar = currentChar;
-                    continue;
-                }
-                if(subMode) {
-                    output[charOff] = subChars[0];
-                    break;
-                } else {
-                    contextChar = INVALID_CHAR;
-                    throw new UnknownCharacterException();
-                }
-            default:
-                if(needFlushing) {
-                    output[charOff++] = contextChar;
-                    contextChar = currentChar;
-                    continue;
-                }
-                output[charOff] = currentChar;
-                break;
-        }//end switch
-
-        contextChar = currentChar;
-        needFlushing = false;
-        charOff++;
-        }//end while
-        return charOff - outStart;
-    } //convert()
-
-/**
- * @see sun.io.ByteToCharConverter#flush
- */
-    public  int flush( char[] output, int outStart, int outEnd )
-    throws MalformedInputException, ConversionBufferFullException
-    {
-        int charsWritten = 0;
-        //if the last char was not flushed, flush it!
-        if(needFlushing) {
-            output[outStart] = contextChar;
-            charsWritten = 1;
-        }
-        contextChar = INVALID_CHAR;
-        needFlushing = false;
-        byteOff = charOff = 0;
-        return charsWritten;
-    }//flush()
-/**
- * Returns the character set id for the conversion.
- */
-    public String getCharacterEncoding()
-    {
-        return "ISCII91";
-    }//getCharacterEncoding()
-/**
- * @see sun.io.ByteToCharConverter#reset
- */
-    public void reset()
-    {
-        byteOff = charOff = 0;
-    }//reset()
-
-}//end of class definition
diff --git a/ojluni/src/main/java/sun/io/ByteToCharISO2022.java b/ojluni/src/main/java/sun/io/ByteToCharISO2022.java
deleted file mode 100755
index f827972..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharISO2022.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * Copyright (c) 1997, 2010, 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.
- */
-
-package sun.io;
-
-/**
- * An algorithmic conversion from ISO 2022 to Unicode
- *
- * @author Tom Zhou
- */
-public abstract class ByteToCharISO2022 extends ByteToCharConverter
-{
-    // Value to be filled by subclass
-    protected String SODesignator[];
-    protected String SS2Designator[] = null;
-    protected String SS3Designator[] = null;
-
-    protected ByteToCharConverter SOConverter[];
-    protected ByteToCharConverter SS2Converter[] = null;
-    protected ByteToCharConverter SS3Converter[] = null;
-
-    private static final byte ISO_ESC = 0x1b;
-    private static final byte ISO_SI = 0x0f;
-    private static final byte ISO_SO = 0x0e;
-    private static final byte ISO_SS2_7 = 0x4e;
-    private static final byte ISO_SS3_7 = 0x4f;
-    private static final byte MSB = (byte)0x80;
-    private static final char REPLACE_CHAR = '\uFFFD';
-    private static final byte maximumDesignatorLength = 3;
-
-    private static final byte SOFlag = 0;
-    private static final byte SS2Flag = 1;
-    private static final byte SS3Flag = 2;
-    private static final byte G0 = 0;
-    private static final byte G1 = 1;
-
-    private ByteToCharConverter tmpConverter[];
-
-    private int curSODes, curSS2Des, curSS3Des;
-    private boolean shiftout;
-
-    private byte remainByte[] = new byte[10];
-    private int remainIndex = -1;
-    private byte state, firstByte;
-
-    public void reset()
-    {
-        int i = 0;
-
-        shiftout = false;
-        state = G0;
-        firstByte = 0;
-
-        curSODes = 0;
-        curSS2Des = 0;
-        curSS3Des = 0;
-
-        charOff = byteOff = 0;
-        remainIndex = -1;
-
-        for(i = 0; i < remainByte.length; i++)
-            remainByte[i] = 0;
-    }
-
-    public int flush(char[] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        int i;
-        if (state != G0) {
-            badInputLength = 0;
-            throw new MalformedInputException();
-        }
-        reset();
-        return 0;
-    }
-
-    private byte[] savetyGetSrc(byte[] input, int inOff, int inEnd, int nbytes)
-    {
-        int i;
-        byte tmp[];
-
-        if(inOff <= (inEnd-nbytes+1))
-            tmp = new byte[nbytes];
-        else
-            tmp = new byte[inEnd-inOff];
-
-        for(i = 0; i < tmp.length; i++)
-            tmp[i] = input[inOff+i];
-        return tmp;
-    }
-
-    private char getUnicode(byte byte1, byte byte2, byte shiftFlag)
-    {
-        byte1 |= MSB;
-        byte2 |= MSB;
-
-        byte[] tmpByte = {byte1,byte2};
-        char[] tmpChar = new char[1];
-        int     i = 0,
-                tmpIndex = 0;
-
-        switch(shiftFlag) {
-        case SOFlag:
-            tmpIndex = curSODes;
-            tmpConverter = SOConverter;
-            break;
-        case SS2Flag:
-            tmpIndex = curSS2Des;
-            tmpConverter = SS2Converter;
-            break;
-        case SS3Flag:
-            tmpIndex = curSS3Des;
-            tmpConverter = SS3Converter;
-            break;
-        }
-
-        for(i = 0; i < tmpConverter.length; i++) {
-            if(tmpIndex == i) {
-                try {
-                    tmpConverter[i].convert(tmpByte, 0, 2, tmpChar, 0, 1);
-                } catch (Exception e) {}
-                return tmpChar[0];
-            }
-        }
-        return REPLACE_CHAR;
-    }
-
-    public final int convert(byte[] input, int inOff, int inEnd,
-                             char[] output, int outOff, int outEnd)
-                             throws ConversionBufferFullException,
-                                    MalformedInputException
-    {
-        int i;
-        int DesignatorLength = 0;
-        charOff  =  outOff;
-        byteOff  =  inOff;
-
-        // Loop until we hit the end of the input
-        while (byteOff < inEnd) {
-            // If we don't have room for the output, throw an exception
-            if (charOff >= outEnd)
-                throw new ConversionBufferFullException();
-            if(remainIndex < 0) {
-                remainByte[0] = input[byteOff];
-                remainIndex = 0;
-                byteOff++;
-            }
-            switch (remainByte[0]) {
-            case ISO_SO:
-                shiftout = true;
-                if(remainIndex > 0)
-                    System.arraycopy(remainByte, 1, remainByte, 0, remainIndex);
-                remainIndex--;
-                break;
-            case ISO_SI:
-                shiftout = false;
-                if(remainIndex > 0)
-                    System.arraycopy(remainByte, 1, remainByte, 0, remainIndex);
-                remainIndex--;
-                break;
-             case ISO_ESC:
-                byte tmp[] = savetyGetSrc(input, byteOff, inEnd,
-                               (maximumDesignatorLength-remainIndex));
-                System.arraycopy(tmp, 0, remainByte, remainIndex+1, tmp.length);
-                remainIndex += tmp.length;
-                byteOff += tmp.length;
-                if(tmp.length<(maximumDesignatorLength-remainIndex))
-                    break;
-                String tmpString = new String(remainByte, 1, remainIndex);
-                for (i = 0; i < SODesignator.length; i++) {
-                    if(tmpString.indexOf(SODesignator[i]) == 0) {
-                        curSODes = i;
-                        DesignatorLength = SODesignator[i].length();
-                        break;
-                    }
-                }
-
-                if (DesignatorLength == 0 ) { // Designator not recognized
-                   badInputLength = tmp.length;
-                   throw new MalformedInputException();
-                }
-
-                if (i == SODesignator.length) {
-                    for (i = 0; i < SS2Designator.length; i++) {
-                        if(tmpString.indexOf(SS2Designator[i]) == 0) {
-                            curSS2Des = i;
-                            DesignatorLength = SS2Designator[i].length();
-                            break;
-                        }
-                    }
-                    if(i == SS2Designator.length) {
-                        for(i = 0; i < SS3Designator.length; i++) {
-                            if (tmpString.indexOf(SS3Designator[i]) == 0) {
-                                curSS3Des = i;
-                                DesignatorLength = SS3Designator[i].length();
-                                break;
-                            }
-                        }
-                        if (i == SS3Designator.length) {
-                            switch(remainByte[1]) {
-                            case ISO_SS2_7:
-                                output[charOff] = getUnicode(remainByte[2],
-                                                          remainByte[3],
-                                                          SS2Flag);
-                                charOff++;
-                                DesignatorLength = 3;
-                                break;
-                            case ISO_SS3_7:
-                                output[charOff] = getUnicode(remainByte[2],
-                                                          remainByte[3],
-                                                          SS3Flag);
-                                charOff++;
-                                DesignatorLength = 3;
-                                break;
-                            default:
-                                DesignatorLength = 0;
-                            }
-                        }
-                    }
-                }
-                if (remainIndex > DesignatorLength) {
-                    for(i = 0; i < remainIndex-DesignatorLength; i++)
-                        remainByte[i] = remainByte[DesignatorLength+1+i];
-                    remainIndex = i-1;
-                } else {
-                    remainIndex = -1;
-                }
-                break;
-            default:
-                if (!shiftout) {
-                    output[charOff] = (char)remainByte[0];
-                    charOff++;
-                } else {
-                    switch (state) {
-                    case G0:
-                        firstByte = remainByte[0];
-                        state = G1;
-                        break;
-                    case G1:
-                        output[charOff] = getUnicode(firstByte, remainByte[0],
-                                                  SOFlag);
-                        charOff++;
-                        state = G0;
-                        break;
-                    }
-                }
-                if (remainIndex > 0)
-                    System.arraycopy(remainByte, 1, remainByte, 0, remainIndex);
-                remainIndex--;
-            }
-        }
-        return charOff - outOff;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharISO2022CN.java b/ojluni/src/main/java/sun/io/ByteToCharISO2022CN.java
deleted file mode 100755
index 1213606..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharISO2022CN.java
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * Copyright (c) 1997, 2001, 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.
- */
-
-package sun.io;
-
-/**
- * @author Tom Zhou
- */
-public class ByteToCharISO2022CN extends ByteToCharConverter
-{
-    private String SODesignator[];
-    private String SS2Designator[] = null;
-    private String SS3Designator[] = null;
-    private ByteToCharConverter SOConverter[];
-    private ByteToCharConverter SS2Converter[] = null;
-    private ByteToCharConverter SS3Converter[] = null;
-
-    private static final byte ISO_ESC = 0x1b;
-    private static final byte ISO_SI = 0x0f;
-    private static final byte ISO_SO = 0x0e;
-    private static final byte ISO_SS2_7 = 0x4e;
-    private static final byte ISO_SS3_7 = 0x4f;
-    private static final byte MSB = (byte)0x80;
-    private static final char REPLACE_CHAR = '\uFFFD';
-    private static final byte maximumDesignatorLength = 3;
-
-    private static final byte SOFlag = 0;
-    private static final byte SS2Flag = 1;
-    private static final byte SS3Flag = 2;
-    private static final byte G0 = 0;
-    private static final byte G1 = 1;
-
-    private ByteToCharConverter tmpConverter[];
-
-    private int curSODes, curSS2Des, curSS3Des;
-    private boolean shiftout;
-
-    private byte remainByte[] = new byte[10];
-    private int remainIndex = -1;
-    private byte state, firstByte;
-
-    public void reset()
-    {
-        int i = 0;
-
-        shiftout = false;
-        state = G0;
-        firstByte = 0;
-
-        curSODes = 0;
-        curSS2Des = 0;
-        curSS3Des = 0;
-
-        charOff = byteOff = 0;
-        remainIndex = -1;
-
-        for(i = 0; i < remainByte.length; i++)
-            remainByte[i] = 0;
-    }
-
-    public int flush(char[] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        int i;
-        if (state != G0) {
-            badInputLength = 0;
-            throw new MalformedInputException();
-        }
-        reset();
-        return 0;
-    }
-
-    private byte[] savetyGetSrc(byte[] input, int inOff, int inEnd, int nbytes)
-    {
-        int i;
-        byte tmp[];
-
-        if(inOff <= (inEnd-nbytes+1))
-            tmp = new byte[nbytes];
-        else
-            tmp = new byte[inEnd-inOff];
-
-        for(i = 0; i < tmp.length; i++)
-            tmp[i] = input[inOff+i];
-        return tmp;
-    }
-
-    private char getUnicode(byte byte1, byte byte2, byte shiftFlag)
-    {
-        byte1 |= MSB;
-        byte2 |= MSB;
-        char[] tmpChar = new char[1];
-
-        switch(shiftFlag) {
-        case SOFlag:
-            try {
-                byte[] tmpByte = {byte1,byte2};
-                SOConverter[curSODes].convert(tmpByte, 0, 2, tmpChar, 0, 1);
-            }
-            catch (Exception e) {}
-            break;
-        case SS2Flag:
-            try {
-                byte[] tmpByte = {(byte)0x8e, (byte)0xa2, byte1, byte2};
-                SS2Converter[curSS2Des].convert(tmpByte, 0, 4, tmpChar, 0, 1);
-            }
-            catch (Exception e){}
-            break;
-        case SS3Flag:
-            try {
-                byte[] tmpByte = {(byte)0x8e, (byte)0xa3, byte1,byte2};
-                SS3Converter[curSS3Des].convert(tmpByte, 0, 4, tmpChar, 0, 1);
-            }
-            catch (Exception e){}
-            break;
-        default:
-            tmpChar[0] = REPLACE_CHAR;
-        }
-        return tmpChar[0];
-    }
-
-    public final int convert(byte[] input, int inOff, int inEnd,
-                             char[] output, int outOff, int outEnd)
-                             throws ConversionBufferFullException,
-                                    MalformedInputException
-    {
-        int i;
-        int DesignatorLength = 0;
-        charOff  =  outOff;
-        byteOff  =  inOff;
-
-        // Loop until we hit the end of the input
-        while (byteOff < inEnd) {
-            // If we don't have room for the output, throw an exception
-            if (charOff >= outEnd)
-                throw new ConversionBufferFullException();
-            if(remainIndex < 0) {
-                remainByte[0] = input[byteOff];
-                remainIndex = 0;
-                byteOff++;
-            }
-            switch (remainByte[0]) {
-            case ISO_SO:
-                shiftout = true;
-                if(remainIndex > 0)
-                    System.arraycopy(remainByte, 1, remainByte, 0, remainIndex);
-                remainIndex--;
-                break;
-            case ISO_SI:
-                shiftout = false;
-                if(remainIndex > 0)
-                    System.arraycopy(remainByte, 1, remainByte, 0, remainIndex);
-                remainIndex--;
-                break;
-             case ISO_ESC:
-                byte tmp[] = savetyGetSrc(input, byteOff, inEnd,
-                               (maximumDesignatorLength-remainIndex));
-                System.arraycopy(tmp, 0, remainByte, remainIndex+1, tmp.length);
-
-                remainIndex += tmp.length;
-                byteOff += tmp.length;
-                if(tmp.length<(maximumDesignatorLength-remainIndex))
-                    break;
-                String tmpString = new String(remainByte, 1, remainIndex);
-                for (i = 0; i < SODesignator.length; i++) {
-                    if(tmpString.indexOf(SODesignator[i]) == 0) {
-                        curSODes = i;
-                        DesignatorLength = SODesignator[i].length();
-                        break;
-                    }
-                }
-
-                if (DesignatorLength == 0) { // designator not recognized
-                   badInputLength = tmp.length;
-                   throw new MalformedInputException();
-                }
-
-                if (i == SODesignator.length) {
-                    for (i = 0; i < SS2Designator.length; i++) {
-                        if(tmpString.indexOf(SS2Designator[i]) == 0) {
-                            curSS2Des = i;
-                            DesignatorLength = SS2Designator[i].length();
-                            break;
-                        }
-                    }
-                    if(i == SS2Designator.length) {
-                        for(i = 0; i < SS3Designator.length; i++) {
-                            if (tmpString.indexOf(SS3Designator[i]) == 0) {
-                                curSS3Des = i;
-                                DesignatorLength = SS3Designator[i].length();
-                                break;
-                            }
-                        }
-                        if (i == SS3Designator.length) {
-                            switch(remainByte[1]) {
-                            case ISO_SS2_7:
-                                output[charOff] = getUnicode(remainByte[2],
-                                                          remainByte[3],
-                                                          SS2Flag);
-                                charOff++;
-                                DesignatorLength = 3;
-                                break;
-                            case ISO_SS3_7:
-                                output[charOff] = getUnicode(remainByte[2],
-                                                          remainByte[3],
-                                                          SS3Flag);
-                                charOff++;
-                                DesignatorLength = 3;
-                                break;
-                            default:
-                                DesignatorLength = 0;
-                            }
-                        }
-                    }
-                }
-                if (remainIndex > DesignatorLength) {
-                    for(i = 0; i < remainIndex-DesignatorLength; i++)
-                        remainByte[i] = remainByte[DesignatorLength+1+i];
-                    remainIndex = i-1;
-                } else {
-                    remainIndex = -1;
-                }
-                break;
-            default:
-                if (!shiftout) {
-                    output[charOff] = (char)remainByte[0];
-                    charOff++;
-                } else {
-                    switch (state) {
-                    case G0:
-                        firstByte = remainByte[0];
-                        state = G1;
-                        break;
-                    case G1:
-                        output[charOff] = getUnicode(firstByte, remainByte[0],
-                                                  SOFlag);
-                        charOff++;
-                        state = G0;
-                        break;
-                    }
-                }
-                if (remainIndex > 0)
-                    System.arraycopy(remainByte, 1, remainByte, 0, remainIndex);
-                remainIndex--;
-            }
-        }
-        return charOff - outOff;
-    }
-
-    public ByteToCharISO2022CN()
-    {
-        SODesignator = new String[3];
-        SODesignator[0] = "$A";
-        SODesignator[1] = "$)A";
-        SODesignator[2] = "$)G";
-        SS2Designator = new String[1];
-        SS2Designator[0] = "$*H";
-        SS3Designator = new String[1];
-        SS3Designator[0] = "$+I";
-
-        SOConverter = new ByteToCharConverter[3];
-        SS2Converter = new ByteToCharConverter[1];
-        SS3Converter = new ByteToCharConverter[1];
-
-        try {
-            SOConverter[0] = SOConverter[1]
-                        = ByteToCharConverter.getConverter("GB2312");
-            SOConverter[2] = SS2Converter[0] = SS3Converter[0]
-                        = ByteToCharConverter.getConverter("CNS11643");
-        } catch (Exception e) {};
-    }
-
-    // Return the character set id
-    public String getCharacterEncoding()
-    {
-        return "ISO2022CN";
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharISO2022JP.java b/ojluni/src/main/java/sun/io/ByteToCharISO2022JP.java
deleted file mode 100755
index 0519cf9..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharISO2022JP.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, 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.
- */
-
-package sun.io;
-
-public class ByteToCharISO2022JP extends ByteToCharJIS0208 {
-
-    private static final int ASCII = 0;                 // ESC ( B
-    private static final int JISX0201_1976 = 1;         // ESC ( J
-    private static final int JISX0208_1978 = 2;         // ESC $ @
-    private static final int JISX0208_1983 = 3;         // ESC $ B
-    private static final int JISX0201_1976_KANA = 4;    // ESC ( I
-    private static final int SHIFTOUT = 5;              // SO (0x0e)
-
-    private int currentState;
-    private int savedSize;
-    private byte[] savedBytes;
-
-    public ByteToCharISO2022JP() {
-        super();
-        savedBytes = new byte[2];
-        currentState = ASCII;
-        savedSize = 0;
-    }
-
-    public int flush(char [] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        if (savedSize != 0) {
-            savedSize = 0;
-            currentState = ASCII;
-            badInputLength = 0;
-            throw new MalformedInputException();
-        }
-        byteOff = charOff = 0;
-        return 0;
-    }
-
-
-    /**
-     * Character conversion
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-        int previousState = ASCII;
-        int inputSize = 0;
-        char outputChar = '\uFFFD';
-        // readOff keeps the actual buffer's pointer.
-        // byteOff keeps original buffer's pointer.
-        int readOff = byteOff = inOff;
-
-        if (savedSize != 0) {
-            if (savedBytes[0] == 0x1b) { // ESC
-                if ((savedSize == 2 &&
-                     (savedBytes[1] == 0x28 &&
-                      input[0] != 'B' &&
-                      input[0] != 'J' &&
-                      input[0] != 'I') &&
-                     (savedBytes[1] == 0x24 &&
-                      input[0] != '@' &&
-                      input[0] != 'B')) ||
-                    ((savedSize == 1) &&
-                     (input[0] != 0x28 &&
-                      input[0] != 0x24))) {
-                    badInputLength = 0;
-                    throw new MalformedInputException();
-                }
-                if ((inEnd - inOff) == 1 && savedSize == 1 &&
-                    savedBytes[0] == 0x1b) {
-                    savedSize = 2;
-                    savedBytes[1] = input[0];
-                    byteOff++;
-                    return 0;
-                }
-            }
-            byte[] newBuf = new byte[inEnd - inOff + savedSize];
-            for (int i = 0; i < savedSize; i++) {
-                newBuf[i] = savedBytes[i];
-            }
-            System.arraycopy(input, inOff, newBuf, savedSize, inEnd - inOff);
-            byteOff -= savedSize;
-            input = newBuf;
-            inOff = 0;
-            inEnd = newBuf.length;
-            savedSize = 0;
-        }
-
-        charOff = outOff;
-        readOff = inOff;
-
-        while(readOff < inEnd) {
-            int byte1, byte2, byte3;
-            boolean noOutput = false;
-
-            // Is there room in the output buffer for the result?
-            if (charOff >= outEnd) {
-                throw new ConversionBufferFullException();
-            }
-
-            // Get the input byte
-            byte1 = input[readOff] & 0xFF;
-            inputSize = 1;
-
-            if ((byte1 & (byte)0x80) != 0){
-                badInputLength = 1;
-                throw new MalformedInputException();
-            }
-
-            // Is this a escape sequence?
-            while (byte1 == 0x1b || byte1 == 0x0e || byte1 == 0x0f) {
-                if (byte1 == 0x1b){  // ESC
-                    if (readOff + inputSize + 1 >= inEnd) {
-                        if (readOff + inputSize >= inEnd) {
-                            savedSize = 1;
-                            savedBytes[0] = (byte)byte1;
-                        } else {
-                            savedSize = 2;
-                            savedBytes[0] = (byte)byte1;
-                            savedBytes[1] = input[readOff + inputSize];
-                            inputSize++;
-                        }
-                        break;
-                    }
-                    byte2 = input[readOff + inputSize] & 0xFF;
-                    inputSize++;
-                    if ((byte2 & (byte)0x80) != 0){
-                        badInputLength = 2;
-                        throw new MalformedInputException();
-                    }
-                    if (byte2 == 0x28){
-                        byte3 = input[readOff + inputSize] & 0xFF;
-                        inputSize++;
-                        if (byte3 == 'B'){
-                            currentState = ASCII;
-                        } else if (byte3 == 'J'){
-                            currentState = JISX0201_1976;
-                        } else if (byte3 == 'I'){
-                            currentState = JISX0201_1976_KANA;
-                        } else {
-                            // illegal ESC sequence
-                            badInputLength = 3;
-                            throw new MalformedInputException();
-                        }
-                    } else if (byte2 == '$'){
-                        byte3 = input[readOff + inputSize] & 0xFF;
-                        inputSize++;
-                        if ((byte3 & (byte)0x80) != 0){
-                            badInputLength = 3;
-                            throw new MalformedInputException();
-                        }
-                        if (byte3 == '@'){
-                            currentState = JISX0208_1978;
-                        } else if (byte3 == 'B'){
-                            currentState = JISX0208_1983;
-                        } else {
-                            // illegal ESC sequence
-                            badInputLength = 3;
-                            throw new MalformedInputException();
-                        }
-                    } else {
-                        // illegal ESC sequence
-                        badInputLength = 2;
-                        throw new MalformedInputException();
-                    }
-                    if (readOff + inputSize >= inEnd) {
-                        noOutput = true;
-                        break;
-                    } else {
-                        byte1 = input[readOff + inputSize];
-                        inputSize++;
-                    }
-                } else if (byte1 == 0x0e){  // shift out for one byte kana
-                    previousState = currentState;
-                    currentState = SHIFTOUT;
-                    if (readOff + inputSize >= inEnd) {
-                        noOutput = true;
-                        break;
-                    }
-                    byte1 = input[readOff + inputSize];
-                    inputSize++;
-                    if ((byte1 & (byte)0x80) != 0){
-                        badInputLength = 1;
-                        throw new MalformedInputException();
-                    }
-                } else if (byte1 == 0x0f){  // shift in for previous mode
-                    currentState = previousState;
-                    if (readOff + inputSize >= inEnd) {
-                        noOutput = true;
-                        break;
-                    }
-                    byte1 = input[readOff + inputSize];
-                    inputSize++;
-                    if ((byte1 & (byte)0x80) != 0){
-                        badInputLength = 1;
-                        throw new MalformedInputException();
-                    }
-                }
-            }
-            if (noOutput || savedSize != 0) {
-                byteOff += inputSize;
-                break;
-            }
-            noOutput = false;
-            switch (currentState){
-              case ASCII:
-                outputChar = (char)(byte1 & 0xff);
-                break;
-              case JISX0201_1976:
-                switch (byte1) {
-                  case 0x5c:
-                    outputChar = '\u00a5';
-                    break;
-                  case 0x7e:
-                    outputChar = '\u203e';
-                    break;
-                  default:
-                    outputChar = (char)byte1;
-                    break;
-                }
-                break;
-              case JISX0208_1978:
-              case JISX0208_1983:
-                if (readOff + inputSize >= inEnd) {
-                    savedSize = 1;
-                    savedBytes[0] = (byte)byte1;
-                    break;
-                }
-                byte2 = input[readOff + inputSize] & 0xff;
-                inputSize++;
-                if ((byte2 & (byte)0x80) != 0){
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-                // jisx0208Chars table convert FULLWIDTH_REVERSE_SOLIDUS
-                // 0x2140 to REVERSE_SOLIDUS (BACKSLASH) 0x5c.
-                // This behavior causes problem because
-                // 0x5c is special escape character for java.
-                if (byte1 == 0x21 && byte2 == 0x40) {
-                    outputChar = '\uFF3C';
-                } else {
-                    try {
-                        outputChar = getUnicode(byte1, byte2);
-                    } catch (ArrayIndexOutOfBoundsException e) {
-                        outputChar = '\uFFFD';
-                    }
-                }
-                break;
-              case JISX0201_1976_KANA:
-              case SHIFTOUT:
-                if (byte1 > 0x60) {
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-                outputChar = (char)(byte1 + 0xff40);
-                break;
-            }
-
-            if (savedSize != 0) {
-                byteOff += inputSize;
-                break;
-            }
-
-            if (outputChar == '\uFFFD') {
-                if (subMode)
-                    outputChar = subChars[0];
-                else {
-                    badInputLength = inputSize;
-                    throw new UnknownCharacterException();
-                }
-            }
-            readOff += inputSize;
-            byteOff += inputSize;
-            output[charOff++] = outputChar;
-        }
-
-        return charOff - outOff;
-    }
-
-    public void reset() {
-        byteOff = charOff = 0;
-        currentState = ASCII;
-        savedSize = 0;
-    }
-
-    public String getCharacterEncoding() {
-        return "ISO2022JP";
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharISO2022KR.java b/ojluni/src/main/java/sun/io/ByteToCharISO2022KR.java
deleted file mode 100755
index 40514db..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharISO2022KR.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package sun.io;
-
-public class ByteToCharISO2022KR extends ByteToCharISO2022
-{
-    public ByteToCharISO2022KR()
-    {
-        SODesignator = new String[1];
-        SODesignator[0] = "$)C";
-
-        SOConverter = new ByteToCharConverter[1];
-
-        try {
-            SOConverter[0] = ByteToCharConverter.getConverter("KSC5601");
-        } catch (Exception e) {};
-    }
-
-    // Return the character set id
-    public String getCharacterEncoding()
-    {
-        return "ISO2022KR";
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharISO8859_1.java b/ojluni/src/main/java/sun/io/ByteToCharISO8859_1.java
deleted file mode 100755
index b9cb76a..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharISO8859_1.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 1996, 1997, 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.
- */
-package sun.io;
-
-/**
-* A algorithmic conversion from ISO 8859-1 to Unicode
-*
-* @author Lloyd Honomichl
-* @author Asmus Freytag
-*/
-public class ByteToCharISO8859_1 extends ByteToCharConverter {
-
-    // Return the character set id
-    public String getCharacterEncoding()
-    {
-        return "ISO8859_1";
-    }
-
-    public int flush(char[] output, int outStart, int outEnd) {
-        // This converter will not buffer any data.
-        byteOff = charOff = 0;
-        return 0;
-    }
-
-    /**
-    * Algorithmic character conversion
-    */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-
-        throws ConversionBufferFullException
-    {
-        int bound = inOff + (outEnd - outOff);
-        if (bound >= inEnd) {
-             bound = inEnd;
-        }
-        int bytesWritten = inEnd - inOff;
-
-
-        // Loop until we hit the end of the input
-        try {
-            while(inOff < bound) {
-                output[outOff++] = (char) (0xff & input[inOff++]);
-            }
-        } finally {
-            charOff = outOff;
-            byteOff = inOff;
-        }
-
-        // If we don't have room for the output, throw an exception
-        if (bound < inEnd)
-            throw new ConversionBufferFullException();
-
-        // Return the length written to the output buffer
-        return bytesWritten;
-    }
-
-    /*
-        Reset after finding bad input
-    */
-    public void reset() {
-        byteOff = charOff = 0;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharISO8859_13.java b/ojluni/src/main/java/sun/io/ByteToCharISO8859_13.java
deleted file mode 100755
index a6d0e1b..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharISO8859_13.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1999, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ISO_8859_13;
-
-/**
- * A table to convert ISO8859_13 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharISO8859_13 extends ByteToCharSingleByte {
-
-    private final static ISO_8859_13 nioCoder = new ISO_8859_13();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_13";
-    }
-
-    public ByteToCharISO8859_13() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharISO8859_15.java b/ojluni/src/main/java/sun/io/ByteToCharISO8859_15.java
deleted file mode 100755
index 40428f4..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharISO8859_15.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- */
-
-package sun.io;
-
-import sun.nio.cs.ISO_8859_15;
-
-/**
- * A table to convert ISO8859_15 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharISO8859_15 extends ByteToCharSingleByte {
-
-    private final static ISO_8859_15 nioCoder = new ISO_8859_15();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_15";
-    }
-
-    public ByteToCharISO8859_15() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharISO8859_2.java b/ojluni/src/main/java/sun/io/ByteToCharISO8859_2.java
deleted file mode 100755
index 21befbf..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharISO8859_2.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ISO_8859_2;
-
-/**
- * A table to convert ISO8859_2 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharISO8859_2 extends ByteToCharSingleByte {
-
-    private final static ISO_8859_2 nioCoder = new ISO_8859_2();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_2";
-    }
-
-    public ByteToCharISO8859_2() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharISO8859_3.java b/ojluni/src/main/java/sun/io/ByteToCharISO8859_3.java
deleted file mode 100755
index 1d84bbb..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharISO8859_3.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.ISO_8859_3;
-
-/**
- * A table to convert ISO8859_3 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharISO8859_3 extends ByteToCharSingleByte {
-
-    private final static ISO_8859_3 nioCoder = new ISO_8859_3();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_3";
-    }
-
-    public ByteToCharISO8859_3() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharISO8859_4.java b/ojluni/src/main/java/sun/io/ByteToCharISO8859_4.java
deleted file mode 100755
index 6281b55..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharISO8859_4.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ISO_8859_4;
-
-/**
- * A table to convert ISO8859_4 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharISO8859_4 extends ByteToCharSingleByte {
-
-    private final static ISO_8859_4 nioCoder = new ISO_8859_4();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_4";
-    }
-
-    public ByteToCharISO8859_4() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharISO8859_5.java b/ojluni/src/main/java/sun/io/ByteToCharISO8859_5.java
deleted file mode 100755
index bf798bd..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharISO8859_5.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ISO_8859_5;
-
-/**
- * A table to convert ISO8859_5 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharISO8859_5 extends ByteToCharSingleByte {
-
-    private final static ISO_8859_5 nioCoder = new ISO_8859_5();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_5";
-    }
-
-    public ByteToCharISO8859_5() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharISO8859_6.java b/ojluni/src/main/java/sun/io/ByteToCharISO8859_6.java
deleted file mode 100755
index 2acee21..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharISO8859_6.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.ISO_8859_6;
-
-/**
- * A table to convert ISO8859_6 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharISO8859_6 extends ByteToCharSingleByte {
-
-    private final static ISO_8859_6 nioCoder = new ISO_8859_6();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_6";
-    }
-
-    public ByteToCharISO8859_6() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharISO8859_7.java b/ojluni/src/main/java/sun/io/ByteToCharISO8859_7.java
deleted file mode 100755
index 440e76c..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharISO8859_7.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ISO_8859_7;
-
-
-/**
- * A table to convert ISO8859_7 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharISO8859_7 extends ByteToCharSingleByte {
-
-    private final static ISO_8859_7 nioCoder = new ISO_8859_7();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_7";
-    }
-
-    public ByteToCharISO8859_7() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharISO8859_8.java b/ojluni/src/main/java/sun/io/ByteToCharISO8859_8.java
deleted file mode 100755
index 565e3bd..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharISO8859_8.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.ISO_8859_8;
-
-/**
- * A table to convert ISO8859_8 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharISO8859_8 extends ByteToCharSingleByte {
-
-    private final static ISO_8859_8 nioCoder = new ISO_8859_8();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_8";
-    }
-
-    public ByteToCharISO8859_8() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharISO8859_9.java b/ojluni/src/main/java/sun/io/ByteToCharISO8859_9.java
deleted file mode 100755
index 7bedec0..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharISO8859_9.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ISO_8859_9;
-
-/**
- * A table to convert ISO8859_9 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharISO8859_9 extends ByteToCharSingleByte {
-
-    private final static ISO_8859_9 nioCoder = new ISO_8859_9();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_9";
-    }
-
-    public ByteToCharISO8859_9() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharJIS0201.java b/ojluni/src/main/java/sun/io/ByteToCharJIS0201.java
deleted file mode 100755
index e84cab6..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharJIS0201.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.
- */
-
-package sun.io;
-
-/**
- * A table to convert JIS0201 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-class ByteToCharJIS0201 extends ByteToCharSingleByte {
-
-    public String getCharacterEncoding() {
-        return "JIS0201";
-    }
-
-    public ByteToCharJIS0201() {
-        super.byteToCharTable = byteToCharTable;
-    }
-
-    private final static String byteToCharTable =
-
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0x80 - 0x87
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0x88 - 0x8F
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0x90 - 0x97
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0x98 - 0x9F
-        "\uFFFD\uFF61\uFF62\uFF63\uFF64\uFF65\uFF66\uFF67" +    // 0xA0 - 0xA7
-        "\uFF68\uFF69\uFF6A\uFF6B\uFF6C\uFF6D\uFF6E\uFF6F" +    // 0xA8 - 0xAF
-        "\uFF70\uFF71\uFF72\uFF73\uFF74\uFF75\uFF76\uFF77" +    // 0xB0 - 0xB7
-        "\uFF78\uFF79\uFF7A\uFF7B\uFF7C\uFF7D\uFF7E\uFF7F" +    // 0xB8 - 0xBF
-        "\uFF80\uFF81\uFF82\uFF83\uFF84\uFF85\uFF86\uFF87" +    // 0xC0 - 0xC7
-        "\uFF88\uFF89\uFF8A\uFF8B\uFF8C\uFF8D\uFF8E\uFF8F" +    // 0xC8 - 0xCF
-        "\uFF90\uFF91\uFF92\uFF93\uFF94\uFF95\uFF96\uFF97" +    // 0xD0 - 0xD7
-        "\uFF98\uFF99\uFF9A\uFF9B\uFF9C\uFF9D\uFF9E\uFF9F" +    // 0xD8 - 0xDF
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0xE0 - 0xE7
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0xE8 - 0xEF
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0xF0 - 0xF7
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0xF8 - 0xFF
-        "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" +    // 0x00 - 0x07
-        "\b\t\n\u000B\f\r\u000E\u000F" +        // 0x08 - 0x0F
-        "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" +    // 0x10 - 0x17
-        "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" +    // 0x18 - 0x1F
-        "\u0020\u0021\"\u0023\u0024\u0025\u0026\'" +    // 0x20 - 0x27
-        "\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F" +    // 0x28 - 0x2F
-        "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037" +    // 0x30 - 0x37
-        "\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u003F" +    // 0x38 - 0x3F
-        "\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047" +    // 0x40 - 0x47
-        "\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F" +    // 0x48 - 0x4F
-        "\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057" +    // 0x50 - 0x57
-        "\u0058\u0059\u005A\u005B\\\u005D\u005E\u005F" +        // 0x58 - 0x5F
-        "\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067" +    // 0x60 - 0x67
-        "\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F" +    // 0x68 - 0x6F
-        "\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077" +    // 0x70 - 0x77
-        "\u0078\u0079\u007A\u007B\u007C\u007D\u007E\u007F";     // 0x78 - 0x7F
-
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharJIS0208.java b/ojluni/src/main/java/sun/io/ByteToCharJIS0208.java
deleted file mode 100755
index fb674e2..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharJIS0208.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-/**
- * Tables and data to convert JIS0208 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-import sun.nio.cs.ext.JIS_X_0208_Decoder;
-
-public class ByteToCharJIS0208 extends ByteToCharDoubleByte {
-
-    public String getCharacterEncoding() {
-        return "JIS0208";
-    }
-
-    public ByteToCharJIS0208() {
-        super.index1 = JIS_X_0208_Decoder.getIndex1();
-        super.index2 = JIS_X_0208_Decoder.getIndex2();
-        start = 0x21;
-        end = 0x7E;
-    }
-
-    protected char convSingleByte(int b) {
-        //Fix bug#4179800 - JIS0208 is 7bit,double-byte encoding
-        return REPLACE_CHAR;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharJIS0208_Solaris.java b/ojluni/src/main/java/sun/io/ByteToCharJIS0208_Solaris.java
deleted file mode 100755
index 2b64b6e..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharJIS0208_Solaris.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.JIS_X_0208_Solaris_Decoder;
-
-/**
- * Tables and data to convert JIS0208_Solaris to Unicode
- *
- * Vendor defined chars added for benefit of vendor defined character
- * supplemented mappings for EUC-JP-Solaris/PCK Solaris variants of EUC-JP
- * and SJIS/Shift_JIS (4765370)
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharJIS0208_Solaris extends ByteToCharDoubleByte {
-
-    public String getCharacterEncoding() {
-        return "JIS0208_Solaris";
-    }
-
-    protected char convSingleByte(int b) {
-        //Fix bug#4179800 - JIS0208 is 7bit,double-byte encoding
-        return REPLACE_CHAR;
-    }
-
-    public ByteToCharJIS0208_Solaris() {
-        super.index1 = JIS_X_0208_Solaris_Decoder.getIndex1();
-        super.index2 = JIS_X_0208_Solaris_Decoder.getIndex2();
-        start = 0x21;
-        end = 0x7E;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharJIS0212.java b/ojluni/src/main/java/sun/io/ByteToCharJIS0212.java
deleted file mode 100755
index bc9486f..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharJIS0212.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.JIS_X_0212_Decoder;
-
-/**
- * Tables and data to convert JIS0212 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-
-public class ByteToCharJIS0212 extends ByteToCharDoubleByte {
-
-    public String getCharacterEncoding() {
-        return "JIS0212";
-    }
-
-    protected char convSingleByte(int b) {
-        //Fix bug#4179800 - JIS0212 is 7bit,double-byte encoding
-        return REPLACE_CHAR;
-    }
-
-    public ByteToCharJIS0212() {
-        super.index1 = JIS_X_0212_Decoder.getIndex1();
-        super.index2 = JIS_X_0212_Decoder.getIndex2();
-        start = 0x21;
-        end = 0x7E;
-     }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharJIS0212_Solaris.java b/ojluni/src/main/java/sun/io/ByteToCharJIS0212_Solaris.java
deleted file mode 100755
index 8ea0247..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharJIS0212_Solaris.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.JIS_X_0212_Solaris_Decoder;
-
-/**
- * Tables and data to convert JIS0212_Solaris to Unicode
- * Solaris ==> vendor defined characters -- NEC row 13 + IBM extended
- *         selected character set.
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharJIS0212_Solaris extends ByteToCharDoubleByte {
-
-    public String getCharacterEncoding() {
-        return "JIS0212_Solaris";
-    }
-
-    protected char convSingleByte(int b) {
-        //Fix bug#4179800 - JIS0212 is 7bit,double-byte encoding
-        return REPLACE_CHAR;
-    }
-
-    public ByteToCharJIS0212_Solaris() {
-        super.index1 = JIS_X_0212_Solaris_Decoder.getIndex1();
-        super.index2 = JIS_X_0212_Solaris_Decoder.getIndex2();
-        start = 0x21;
-        end = 0x7E;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharJISAutoDetect.java b/ojluni/src/main/java/sun/io/ByteToCharJISAutoDetect.java
deleted file mode 100755
index 47cc33c..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharJISAutoDetect.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright (c) 1997, 2010, 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.
- */
-package sun.io;
-
-import java.io.UnsupportedEncodingException;
-import sun.nio.cs.ext.JISAutoDetect;
-
-public class ByteToCharJISAutoDetect extends ByteToCharConverter {
-
-    private final static int EUCJP_MASK = 0x01;
-    private final static int SJIS2B_MASK = 0x02;
-    private final static int SJIS1B_MASK = 0x04;
-    private final static int EUCJP_KANA1_MASK = 0x08;
-    private final static int EUCJP_KANA2_MASK = 0x10;
-    private final static byte[] maskTable1 = JISAutoDetect.getByteMask1();
-    private final static byte[] maskTable2 = JISAutoDetect.getByteMask2();
-
-    private final static int SS2 = 0x8e;
-    private final static int SS3 = 0x8f;
-
-    // SJISName is set to either "SJIS" or "MS932"
-    private String SJISName;
-    private String EUCJPName;
-
-    private String convName = null;
-    private ByteToCharConverter detectedConv = null;
-    private ByteToCharConverter defaultConv = null;
-
-    public ByteToCharJISAutoDetect() {
-        super();
-        SJISName = CharacterEncoding.getSJISName();
-        EUCJPName = CharacterEncoding.getEUCJPName();
-        defaultConv = new ByteToCharISO8859_1();
-        defaultConv.subChars = subChars;
-        defaultConv.subMode = subMode;
-    }
-
-    public int flush(char [] output, int outStart, int outEnd)
-        throws MalformedInputException, ConversionBufferFullException
-    {
-        badInputLength = 0;
-        if(detectedConv != null)
-             return detectedConv.flush(output, outStart, outEnd);
-        else
-             return defaultConv.flush(output, outStart, outEnd);
-    }
-
-
-    /**
-     * Character conversion
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-        int num = 0;
-
-        charOff = outOff;
-        byteOff = inOff;
-
-        try {
-            if (detectedConv == null) {
-                int euckana = 0;
-                int ss2count = 0;
-                int firstmask = 0;
-                int secondmask = 0;
-                int cnt;
-                boolean nonAsciiFound = false;
-
-                for (cnt = inOff; cnt < inEnd; cnt++) {
-                    firstmask = 0;
-                    secondmask = 0;
-                    int byte1 = input[cnt]&0xff;
-                    int byte2;
-
-                    // TODO: should check valid escape sequences!
-                    if (byte1 == 0x1b) {
-                        convName = "ISO2022JP";
-                        break;
-                    }
-
-                    // Try to convert all leading ASCII characters.
-                    if ((nonAsciiFound == false) && (byte1 < 0x80)) {
-                        if (charOff >= outEnd)
-                            throw new ConversionBufferFullException();
-                        output[charOff++] = (char) byte1;
-                        byteOff++;
-                        num++;
-                        continue;
-                    }
-
-                    // We can no longer convert ASCII.
-                    nonAsciiFound = true;
-
-                    firstmask = maskTable1[byte1];
-                    if (byte1 == SS2)
-                        ss2count++;
-
-                    if (firstmask != 0) {
-                        if (cnt+1 < inEnd) {
-                            byte2 = input[++cnt] & 0xff;
-                            secondmask = maskTable2[byte2];
-                            int mask = firstmask & secondmask;
-                            if (mask == EUCJP_MASK) {
-                                convName = EUCJPName;
-                                break;
-                            }
-                            if ((mask == SJIS2B_MASK) || (mask == SJIS1B_MASK)
-                                || (JISAutoDetect.canBeSJIS1B(firstmask) && secondmask == 0)) {
-                                convName = SJISName;
-                                break;
-                            }
-
-                            // If the first byte is a SS3 and the third byte
-                            // is not an EUC byte, it should be SJIS.
-                            // Otherwise, we can't determine it yet, but it's
-                            // very likely SJIS. So we don't take the EUCJP CS3
-                            // character boundary. If we tried both
-                            // possibilities here, it might be able to be
-                            // determined correctly.
-                            if ((byte1 == SS3) && JISAutoDetect.canBeEUCJP(secondmask)) {
-                                if (cnt+1 < inEnd) {
-                                    int nextbyte = input[cnt+1] & 0xff;
-                                    if (! JISAutoDetect.canBeEUCJP(maskTable2[nextbyte]))
-                                        convName = SJISName;
-                                } else
-                                    convName = SJISName;
-                            }
-                            if (JISAutoDetect.canBeEUCKana(firstmask, secondmask))
-                                euckana++;
-                        } else {
-                            if ((firstmask & SJIS1B_MASK) != 0) {
-                                convName = SJISName;
-                                break;
-                            }
-                        }
-                    }
-                }
-
-                if (nonAsciiFound && (convName == null)) {
-                    if ((euckana > 1) || (ss2count > 1))
-                        convName = EUCJPName;
-                    else
-                        convName = SJISName;
-                }
-
-                if (convName != null) {
-                    try {
-                        detectedConv = ByteToCharConverter.getConverter(convName);
-                        detectedConv.subChars = subChars;
-                        detectedConv.subMode = subMode;
-                    } catch (UnsupportedEncodingException e){
-                        detectedConv = null;
-                        convName = null;
-                    }
-                }
-            }
-        } catch (ConversionBufferFullException bufferFullException) {
-                throw bufferFullException;
-        } catch (Exception e) {
-            // If we fail to detect the converter needed for any reason,
-            // use the default converter.
-            detectedConv = defaultConv;
-        }
-
-        // If we've converted all ASCII characters, then return.
-        if (byteOff == inEnd) {
-            return num;
-        }
-
-        if(detectedConv != null) {
-            try {
-                num += detectedConv.convert(input, inOff + num, inEnd,
-                                            output, outOff + num, outEnd);
-            } finally {
-                charOff = detectedConv.nextCharIndex();
-                byteOff = detectedConv.nextByteIndex();
-                badInputLength = detectedConv.badInputLength;
-            }
-        } else {
-            try {
-                num += defaultConv.convert(input, inOff + num, inEnd,
-                                           output, outOff + num, outEnd);
-            } finally {
-                charOff = defaultConv.nextCharIndex();
-                byteOff = defaultConv.nextByteIndex();
-                badInputLength = defaultConv.badInputLength;
-            }
-        }
-        return num;
-    }
-
-    public void reset() {
-        if(detectedConv != null) {
-             detectedConv.reset();
-             detectedConv = null;
-             convName = null;
-        } else
-             defaultConv.reset();
-        charOff = byteOff = 0;
-    }
-
-    public String getCharacterEncoding() {
-        return "JISAutoDetect";
-    }
-
-    public String toString() {
-        String s = getCharacterEncoding();
-        if (detectedConv != null) {
-            s += "[" + detectedConv.getCharacterEncoding() + "]";
-        } else {
-            s += "[unknown]";
-        }
-        return s;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharJohab.java b/ojluni/src/main/java/sun/io/ByteToCharJohab.java
deleted file mode 100755
index aa1c0da..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharJohab.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharJohab extends ByteToCharDBCS_ASCII {
-
-    private static DoubleByte.Decoder dec =
-        (DoubleByte.Decoder)new Johab().newDecoder();
-
-    public String getCharacterEncoding() {
-        return "Johab";
-    }
-
-    public ByteToCharJohab() {
-        super(dec);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharKOI8_R.java b/ojluni/src/main/java/sun/io/ByteToCharKOI8_R.java
deleted file mode 100755
index 877077a..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharKOI8_R.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.KOI8_R;
-
-/**
- * A table to convert KOI8_R to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharKOI8_R extends ByteToCharSingleByte {
-
-    private final static KOI8_R nioCoder = new KOI8_R();
-
-    public String getCharacterEncoding() {
-        return "KOI8_R";
-    }
-
-    public ByteToCharKOI8_R() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMS874.java b/ojluni/src/main/java/sun/io/ByteToCharMS874.java
deleted file mode 100755
index 290ecc1..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMS874.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MS874;
-
-/**
- * A table to convert MS874 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharMS874 extends ByteToCharSingleByte {
-
-    private final static MS874 nioCoder = new MS874();
-
-    public String getCharacterEncoding() {
-        return "MS874";
-    }
-
-    public ByteToCharMS874() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMS932.java b/ojluni/src/main/java/sun/io/ByteToCharMS932.java
deleted file mode 100755
index 6dcd8f9..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMS932.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharMS932 extends ByteToCharDBCS_ASCII {
-
-    private static DoubleByte.Decoder dec =
-        (DoubleByte.Decoder)new MS932().newDecoder();
-
-    public String getCharacterEncoding() {
-        return "MS932";
-    }
-
-    public ByteToCharMS932() {
-        super(dec);
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMS936.java b/ojluni/src/main/java/sun/io/ByteToCharMS936.java
deleted file mode 100755
index 6ad7bbc..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMS936.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharMS936 extends ByteToCharDBCS_ASCII {
-
-    private static DoubleByte.Decoder dec =
-        (DoubleByte.Decoder)new MS936().newDecoder();
-
-    public String getCharacterEncoding() {
-        return "MS936";
-    }
-
-    public ByteToCharMS936() {
-        super(dec);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMS949.java b/ojluni/src/main/java/sun/io/ByteToCharMS949.java
deleted file mode 100755
index 1506166..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMS949.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharMS949 extends ByteToCharDBCS_ASCII {
-
-    private static DoubleByte.Decoder dec =
-        (DoubleByte.Decoder)new MS949().newDecoder();
-
-
-    public String getCharacterEncoding() {
-        return "MS949";
-    }
-
-    public ByteToCharMS949() {
-        super(dec);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMS950.java b/ojluni/src/main/java/sun/io/ByteToCharMS950.java
deleted file mode 100755
index 1d6026c..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMS950.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class ByteToCharMS950 extends ByteToCharDBCS_ASCII {
-
-    private static DoubleByte.Decoder dec =
-        (DoubleByte.Decoder)new MS950().newDecoder();
-
-    public String getCharacterEncoding() {
-        return "MS950";
-    }
-
-    public ByteToCharMS950() {
-        super(dec);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMS950_HKSCS.java b/ojluni/src/main/java/sun/io/ByteToCharMS950_HKSCS.java
deleted file mode 100755
index f03b641..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMS950_HKSCS.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2002, 2010, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.HKSCS;
-import sun.nio.cs.ext.MS950_HKSCS;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class ByteToCharMS950_HKSCS extends ByteToCharDBCS_ASCII {
-
-    private static HKSCS.Decoder dec =
-        (HKSCS.Decoder)new MS950_HKSCS().newDecoder();
-
-    public String getCharacterEncoding() {
-        return "MS950_HKSCS";
-    }
-
-    public ByteToCharMS950_HKSCS() {
-        super(dec);
-    }
-
-    protected char decodeDouble(int byte1, int byte2) {
-        char c = dec.decodeDouble(byte1, byte2);
-        if (c == UNMAPPABLE_DECODING)
-            c = dec.decodeBig5(byte1, byte2);
-        return c;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMacArabic.java b/ojluni/src/main/java/sun/io/ByteToCharMacArabic.java
deleted file mode 100755
index f2c69e5..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMacArabic.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MacArabic;
-
-/**
- * A table to convert to MacArabic to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharMacArabic extends ByteToCharSingleByte {
-
-    private final static MacArabic nioCoder = new MacArabic();
-
-    public String getCharacterEncoding() {
-        return "MacArabic";
-    }
-
-    public ByteToCharMacArabic() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMacCentralEurope.java b/ojluni/src/main/java/sun/io/ByteToCharMacCentralEurope.java
deleted file mode 100755
index 3b9c02f..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMacCentralEurope.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MacCentralEurope;
-
-/**
- * A table to convert to MacCentralEurope to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharMacCentralEurope extends ByteToCharSingleByte {
-
-    private final static MacCentralEurope nioCoder = new MacCentralEurope();
-
-    public String getCharacterEncoding() {
-        return "MacCentralEurope";
-    }
-
-    public ByteToCharMacCentralEurope() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMacCroatian.java b/ojluni/src/main/java/sun/io/ByteToCharMacCroatian.java
deleted file mode 100755
index 5c9202e..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMacCroatian.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MacCroatian;
-
-/**
- * A table to convert to MacCroatian to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharMacCroatian extends ByteToCharSingleByte {
-
-    private final static MacCroatian nioCoder = new MacCroatian();
-
-    public String getCharacterEncoding() {
-        return "MacCroatian";
-    }
-
-    public ByteToCharMacCroatian() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMacCyrillic.java b/ojluni/src/main/java/sun/io/ByteToCharMacCyrillic.java
deleted file mode 100755
index 63f66d3..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMacCyrillic.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MacCyrillic;
-
-/**
- * A table to convert to MacCyrillic to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharMacCyrillic extends ByteToCharSingleByte {
-
-    private final static MacCyrillic nioCoder = new MacCyrillic();
-
-    public String getCharacterEncoding() {
-        return "MacCyrillic";
-    }
-
-    public ByteToCharMacCyrillic() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMacDingbat.java b/ojluni/src/main/java/sun/io/ByteToCharMacDingbat.java
deleted file mode 100755
index ac04fc0..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMacDingbat.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MacDingbat;
-
-/**
- * A table to convert to MacDingbat to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharMacDingbat extends ByteToCharSingleByte {
-
-    private final static MacDingbat nioCoder = new MacDingbat();
-
-    public String getCharacterEncoding() {
-        return "MacDingbat";
-    }
-
-    public ByteToCharMacDingbat() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMacGreek.java b/ojluni/src/main/java/sun/io/ByteToCharMacGreek.java
deleted file mode 100755
index d7274ba..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMacGreek.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MacGreek;
-
-/**
- * A table to convert to MacGreek to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharMacGreek extends ByteToCharSingleByte {
-
-    private final static MacGreek nioCoder = new MacGreek();
-
-    public String getCharacterEncoding() {
-        return "MacGreek";
-    }
-
-    public ByteToCharMacGreek() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMacHebrew.java b/ojluni/src/main/java/sun/io/ByteToCharMacHebrew.java
deleted file mode 100755
index 562c165..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMacHebrew.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MacHebrew;
-
-/**
- * A table to convert to MacHebrew to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharMacHebrew extends ByteToCharSingleByte {
-
-    private final static MacHebrew nioCoder = new MacHebrew();
-
-    public String getCharacterEncoding() {
-        return "MacHebrew";
-    }
-
-    public ByteToCharMacHebrew() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMacIceland.java b/ojluni/src/main/java/sun/io/ByteToCharMacIceland.java
deleted file mode 100755
index 9322d4c..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMacIceland.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MacIceland;
-
-/**
- * A table to convert to MacIceland to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharMacIceland extends ByteToCharSingleByte {
-
-    private final static MacIceland nioCoder = new MacIceland();
-
-    public String getCharacterEncoding() {
-        return "MacIceland";
-    }
-
-    public ByteToCharMacIceland() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMacRoman.java b/ojluni/src/main/java/sun/io/ByteToCharMacRoman.java
deleted file mode 100755
index bb64677..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMacRoman.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MacRoman;
-
-/**
- * A table to convert to MacRoman to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharMacRoman extends ByteToCharSingleByte {
-
-    private final static MacRoman nioCoder = new MacRoman();
-
-    public String getCharacterEncoding() {
-        return "MacRoman";
-    }
-
-    public ByteToCharMacRoman() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMacRomania.java b/ojluni/src/main/java/sun/io/ByteToCharMacRomania.java
deleted file mode 100755
index 9567cc1..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMacRomania.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MacRomania;
-
-/**
- * A table to convert to MacRomania to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharMacRomania extends ByteToCharSingleByte {
-
-    private final static MacRomania nioCoder = new MacRomania();
-
-    public String getCharacterEncoding() {
-        return "MacRomania";
-    }
-
-    public ByteToCharMacRomania() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMacSymbol.java b/ojluni/src/main/java/sun/io/ByteToCharMacSymbol.java
deleted file mode 100755
index 3a5b7a3..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMacSymbol.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MacSymbol;
-
-/**
- * A table to convert to MacSymbol to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharMacSymbol extends ByteToCharSingleByte {
-
-    private final static MacSymbol nioCoder = new MacSymbol();
-
-    public String getCharacterEncoding() {
-        return "MacSymbol";
-    }
-
-    public ByteToCharMacSymbol() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMacThai.java b/ojluni/src/main/java/sun/io/ByteToCharMacThai.java
deleted file mode 100755
index bcef9e8..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMacThai.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MacThai;
-
-/**
- * A table to convert to MacThai to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharMacThai extends ByteToCharSingleByte {
-
-    private final static MacThai nioCoder = new MacThai();
-
-    public String getCharacterEncoding() {
-        return "MacThai";
-    }
-
-    public ByteToCharMacThai() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMacTurkish.java b/ojluni/src/main/java/sun/io/ByteToCharMacTurkish.java
deleted file mode 100755
index 7ab11b0..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMacTurkish.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MacTurkish;
-
-/**
- * A table to convert to MacTurkish to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharMacTurkish extends ByteToCharSingleByte {
-
-    private final static MacTurkish nioCoder = new MacTurkish();
-
-    public String getCharacterEncoding() {
-        return "MacTurkish";
-    }
-
-    public ByteToCharMacTurkish() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharMacUkraine.java b/ojluni/src/main/java/sun/io/ByteToCharMacUkraine.java
deleted file mode 100755
index f24d777..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharMacUkraine.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MacUkraine;
-
-/**
- * A table to convert to MacUkraine to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharMacUkraine extends ByteToCharSingleByte {
-
-    private final static MacUkraine nioCoder = new MacUkraine();
-
-    public String getCharacterEncoding() {
-        return "MacUkraine";
-    }
-
-    public ByteToCharMacUkraine() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharPCK.java b/ojluni/src/main/java/sun/io/ByteToCharPCK.java
deleted file mode 100755
index 0646f68..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharPCK.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.JIS_X_0208_Solaris_Decoder;
-
-/**
- *
- * @author Limin Shi
- * @author Mark Son-Bell
- * @author Ian Little
- *
- *
- * PCK Converter for Solaris ja locales
- * refer to : Solaris manpage man PCK(5)
- * Incorporates mappings from NEC row 13 and IBM select extension chars
- * in addition to those defined within JIS X0208:1997 (bugID: 4765370)
- *
- */
-
-public class ByteToCharPCK extends ByteToCharSJIS {
-    ByteToCharJIS0201 bcJIS0201 = new ByteToCharJIS0201();
-    ByteToCharJIS0208_Solaris bcJIS0208 = new ByteToCharJIS0208_Solaris();
-
-    public String getCharacterEncoding() {
-        return "PCK";
-    }
-
-    protected char convSingleByte(int b) {
-        // If the high bits are all off, it's ASCII == Unicode
-        if ((b & 0xFF80) == 0) {
-            return (char)b;
-        }
-        return bcJIS0201.getUnicode(b);
-    }
-
-    protected char getUnicode(int c1, int c2) {
-        char outChar;
-        if ((outChar = super.getUnicode(c1, c2)) != '\uFFFD') {
-           // Map JIS X 0208:1983 0x213D <--> U+2015
-           return ((outChar != '\u2014')? outChar: '\u2015');
-        } else {
-            int adjust = c2 < 0x9F ? 1 : 0;
-            int rowOffset = c1 < 0xA0 ? 0x70 : 0xB0;
-            int cellOffset = (adjust == 1) ? (c2 > 0x7F ? 0x20 : 0x1F) : 0x7E;
-            int b1 = ((c1 - rowOffset) << 1) - adjust;
-            int b2 = c2 - cellOffset;
-            outChar = bcJIS0208.getUnicode(b1, b2);
-            return outChar;
-        }
-    }
-
-    String prt(int i) {
-        return Integer.toString(i,16);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharSJIS.java b/ojluni/src/main/java/sun/io/ByteToCharSJIS.java
deleted file mode 100755
index 79ae211..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharSJIS.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 1996, 1998, 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.
- */
-
-package sun.io;
-
-/**
- * The SJIS converters follow the Shift JIS definition in the JIS
- * X0208:1997 standard as much as possible. The MS932 converters must
- * be used where the Microsoft Code Page 932 character repertoire and
- * Unicode mappings are required.
- *
- * @author Limin Shi
- * @author Mark Son-Bell
- */
-
-public class ByteToCharSJIS extends ByteToCharJIS0208 {
-    ByteToCharJIS0201 bcJIS0201 = new ByteToCharJIS0201();
-
-    public String getCharacterEncoding() {
-        return "SJIS";
-    }
-
-    protected char convSingleByte(int b) {
-        // If the high bits are all off, it's ASCII == Unicode
-        if ((b & 0xFF80) == 0) {
-            return (char)b;
-        }
-        return bcJIS0201.getUnicode(b);
-    }
-
-    protected char getUnicode(int c1, int c2) {
-        int adjust = c2 < 0x9F ? 1 : 0;
-        int rowOffset = c1 < 0xA0 ? 0x70 : 0xB0;
-        int cellOffset = (adjust == 1) ? (c2 > 0x7F ? 0x20 : 0x1F) : 0x7E;
-        int b1 = ((c1 - rowOffset) << 1) - adjust;
-        int b2 = c2 - cellOffset;
-        return super.getUnicode(b1, b2);
-    }
-
-    String prt(int i) {
-        return Integer.toString(i,16);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharSingleByte.java b/ojluni/src/main/java/sun/io/ByteToCharSingleByte.java
deleted file mode 100755
index c271262..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharSingleByte.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 1996, 2002, 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.
- */
-
-package sun.io;
-
-/**
- * A table driven conversion from byte to char for single byte  character sets.
- * The needed data tables will reside in a character set specific subclass.
- *
- * @author Lloyd Honomichl
- * @author Asmus Freytag
- */
-public abstract class ByteToCharSingleByte extends ByteToCharConverter {
-
-    /**
-     * Mapping table. Values supplied by subclass
-     */
-    protected String byteToCharTable;
-
-    public String getByteToCharTable() {
-        return byteToCharTable;
-    }
-
-    public int flush(char[] output, int outStart, int outEnd) {
-        byteOff = charOff = 0;
-        return 0;
-    }
-
-    /**
-     * Converts bytes to characters according to the selected character
-     * encoding.
-     * Maintains internal state, so that conversions that result in
-     * exceptions can be restarted by calling convert again, with
-     * appropriately modified parameters.
-     * Call reset before converting input that is not a continuation of
-     * the previous call.
-     * @return the number of characters written to output.
-     * @param input byte array containing text in character set
-     * @param inStart offset in input array
-     * @param inEnd offset of last byte to be converted
-     * @param output character array to receive conversion result
-     * @param outStart starting offset
-     * @param outEnd offset of last character to be written to
-     * @throw MalformedInputException for any sequence of bytes that is
-     * illegal for the input character set, including any partial multi-byte
-     * sequence which occurs at the end of an input buffer.
-     * @throw UnsupportedCharacterException for any sequence of bytes that
-     * contain a character not supported in the current conversion.
-     * @throw BufferFullException whenever the output buffer is full
-     * before the input is exhausted.
-     * @see #reset
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws UnknownCharacterException,
-               MalformedInputException,
-               ConversionBufferFullException
-    {
-        char    outputChar;
-        int     byteIndex;
-
-        charOff = outOff;
-        byteOff = inOff;
-
-        // Loop until we hit the end of the input
-        while(byteOff < inEnd) {
-
-            byteIndex = input[byteOff];
-
-            /* old source
-             *outputChar = byteToCharTable[input[byteOff] + 128];
-             */
-            // Lookup the output character
-            outputChar = getUnicode(byteIndex);
-
-            // Is the output unmappable?
-            if (outputChar == '\uFFFD') {
-                if (subMode) {
-                    outputChar = subChars[0];
-                } else {
-                    badInputLength = 1;
-                    throw new UnknownCharacterException();
-                }
-            }
-
-            // If we don't have room for the output, throw an exception
-            if (charOff >= outEnd)
-                throw new ConversionBufferFullException();
-
-            // Put the character in the output buffer
-            output[charOff]= outputChar;
-            charOff++;
-            byteOff++;
-        }
-
-        // Return the length written to the output buffer
-        return charOff-outOff;
-    }
-
-    protected char getUnicode(int byteIndex) {
-        int n = byteIndex + 128;
-        if (n >= byteToCharTable.length() || n < 0)
-            return '\uFFFD';
-        return byteToCharTable.charAt(n);
-    }
-
-    /**
-     *  Resets the converter.
-     *  Call this method to reset the converter to its initial state
-     */
-    public void reset() {
-        byteOff = charOff = 0;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharTIS620.java b/ojluni/src/main/java/sun/io/ByteToCharTIS620.java
deleted file mode 100755
index 7826b5b..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharTIS620.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.TIS_620;
-
-/**
- * A table to convert TIS620 to Unicode
- *
- * @author  ConverterGenerator tool
- */
-
-public class ByteToCharTIS620 extends ByteToCharSingleByte {
-
-    private final static TIS_620 nioCoder = new TIS_620();
-
-    public String getCharacterEncoding() {
-        return "TIS620";
-    }
-
-    public ByteToCharTIS620() {
-        super.byteToCharTable = nioCoder.getDecoderSingleByteMappings();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharUTF16.java b/ojluni/src/main/java/sun/io/ByteToCharUTF16.java
deleted file mode 100755
index ae5616b..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharUTF16.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.
- */
-
-package sun.io;
-
-
-/**
- * Convert byte arrays containing Unicode characters into arrays of actual
- * Unicode characters, assuming an initial byte-order mark.
- */
-
-public class ByteToCharUTF16 extends ByteToCharUnicode {
-
-    public ByteToCharUTF16() {
-        super(AUTO, true);
-    }
-
-    public String getCharacterEncoding() {
-        return "UTF-16";
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharUTF8.java b/ojluni/src/main/java/sun/io/ByteToCharUTF8.java
deleted file mode 100755
index 3abe593..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharUTF8.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, 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.
- */
-package sun.io;
-
-
-/**
- * UCS Transformation Format 8 (UTF-8) -> UCS2 (UTF16) converter
- *
- * see CharToByteUTF8.java about UTF-8 format
- */
-
-public class ByteToCharUTF8 extends ByteToCharConverter {
-
-    private int savedSize;
-    private byte[] savedBytes;
-
-    public ByteToCharUTF8() {
-        super();
-        savedSize = 0;
-        savedBytes = new byte[5];
-    }
-
-    public int flush(char[] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        if (savedSize != 0) {
-            savedSize = 0;
-            badInputLength = 0;
-            throw new MalformedInputException();
-        }
-        byteOff = charOff = 0;
-        return 0;
-    }
-
-    /**
-     * Character converson
-     */
-    public int convert(byte[] input, int inOff, int inEnd,
-                       char[] output, int outOff, int outEnd)
-        throws MalformedInputException, ConversionBufferFullException
-    {
-        int byte1, byte2, byte3, byte4;
-        char[] outputChar = new char[2];
-        int outputSize;
-        int byteOffAdjustment = 0;
-
-        if (savedSize != 0) {
-            byte[] newBuf;
-            newBuf = new byte[inEnd - inOff + savedSize];
-            for (int i = 0; i < savedSize; i++) {
-                newBuf[i] = savedBytes[i];
-            }
-            System.arraycopy(input, inOff, newBuf, savedSize, inEnd - inOff);
-            input = newBuf;
-            inOff = 0;
-            inEnd = newBuf.length;
-            byteOffAdjustment = -savedSize;
-            savedSize = 0;
-        }
-
-        charOff = outOff;
-        byteOff = inOff;
-        int startByteOff;
-
-        while(byteOff < inEnd) {
-
-            startByteOff = byteOff;
-            byte1 = input[byteOff++] & 0xff;
-
-            if ((byte1 & 0x80) == 0){
-                outputChar[0] = (char)byte1;
-                outputSize = 1;
-            } else if ((byte1 & 0xe0) == 0xc0) {
-                if (byteOff >= inEnd) {
-                    savedSize = 1;
-                    savedBytes[0] = (byte)byte1;
-                    break;
-                }
-                byte2 = input[byteOff++] & 0xff;
-                if ((byte2 & 0xc0) != 0x80) {
-                    badInputLength = 2;
-                    byteOff += byteOffAdjustment;
-                    throw new MalformedInputException();
-                }
-                outputChar[0] = (char)(((byte1 & 0x1f) << 6) | (byte2 & 0x3f));
-                outputSize = 1;
-            } else if ((byte1 & 0xf0) == 0xe0){
-                if (byteOff + 1 >= inEnd) {
-                        savedBytes[0] = (byte)byte1;
-                    if (byteOff >= inEnd) {
-                        savedSize = 1;
-                    } else {
-                        savedSize = 2;
-                        savedBytes[1] = input[byteOff++];
-                    }
-                    break;
-                }
-                byte2 = input[byteOff++] & 0xff;
-                byte3 = input[byteOff++] & 0xff;
-                if ((byte2 & 0xc0) != 0x80 || (byte3 & 0xc0) != 0x80) {
-                    badInputLength = 3;
-                    byteOff += byteOffAdjustment;
-                    throw new MalformedInputException();
-                }
-                outputChar[0] = (char)(((byte1 & 0x0f) << 12)
-                                       | ((byte2 & 0x3f) << 6)
-                                       | (byte3 & 0x3f));
-                outputSize = 1;
-            } else if ((byte1 & 0xf8) == 0xf0) {
-                if (byteOff + 2 >= inEnd) {
-                    savedBytes[0] = (byte)byte1;
-                    if (byteOff >= inEnd) {
-                        savedSize = 1;
-                    } else if (byteOff + 1 >= inEnd) {
-                        savedSize = 2;
-                        savedBytes[1] = input[byteOff++];
-                    } else {
-                        savedSize = 3;
-                        savedBytes[1] = input[byteOff++];
-                        savedBytes[2] = input[byteOff++];
-                    }
-                    break;
-                }
-                byte2 = input[byteOff++] & 0xff;
-                byte3 = input[byteOff++] & 0xff;
-                byte4 = input[byteOff++] & 0xff;
-                if ((byte2 & 0xc0) != 0x80 ||
-                    (byte3 & 0xc0) != 0x80 ||
-                    (byte4 & 0xc0) != 0x80) {
-                    badInputLength = 4;
-                    byteOff += byteOffAdjustment;
-                    throw new MalformedInputException();
-                }
-                // this byte sequence is UTF16 character
-                int ucs4 = (0x07 & byte1) << 18 |
-                           (0x3f & byte2) << 12 |
-                           (0x3f & byte3) <<  6 |
-                           (0x3f & byte4);
-                outputChar[0] = (char)((ucs4 - 0x10000) / 0x400 + 0xd800);
-                outputChar[1] = (char)((ucs4 - 0x10000) % 0x400 + 0xdc00);
-                outputSize = 2;
-            } else {
-                badInputLength = 1;
-                byteOff += byteOffAdjustment;
-                throw new MalformedInputException();
-            }
-
-            if (charOff + outputSize > outEnd) {
-                byteOff = startByteOff;
-                byteOff += byteOffAdjustment;
-                throw new ConversionBufferFullException();
-            }
-
-            for (int i = 0; i < outputSize; i++) {
-                output[charOff + i] = outputChar[i];
-            }
-            charOff += outputSize;
-        }
-
-        byteOff += byteOffAdjustment;
-        return charOff - outOff;
-    }
-
-    /*
-     * Return the character set id
-     */
-    public String getCharacterEncoding() {
-        return "UTF8";
-    }
-
-    /*
-     *   Reset after finding bad input
-     */
-    public void reset() {
-        byteOff = charOff = 0;
-        savedSize = 0;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharUnicode.java b/ojluni/src/main/java/sun/io/ByteToCharUnicode.java
deleted file mode 100755
index 083cf99..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharUnicode.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-package sun.io;
-import java.io.*;
-
-
-/**
- * Convert byte arrays containing Unicode characters into arrays of actual
- * Unicode characters.  This class may be used directly, in which case it
- * expects the input byte array to begin with a byte-order mark, or it may be
- * subclassed in order to preset the byte order and mark behavior.
- *
- * <p> Whether or not a mark is expected, if a mark that does not match the
- * established byte order is later discovered then a
- * <tt>MalformedInputException</tt> will be thrown by the <tt>convert</tt>
- * method.  If a correct mark is seen later in the input stream, it is passed
- * through as a character.
- *
- * @see ByteToCharUnicodeLittle
- * @see ByteToCharUnicodeLittleUnmarked
- * @see ByteToCharUnicodeBig
- * @see ByteToCharUnicodeBigUnmarked
- *
- * @author      Mark Reinhold
- */
-
-public class ByteToCharUnicode extends ByteToCharConverter {
-
-    static final char BYTE_ORDER_MARK = (char) 0xfeff;
-    static final char REVERSED_MARK = (char) 0xfffe;
-
-    static final int AUTO = 0;
-    static final int BIG = 1;
-    static final int LITTLE = 2;
-
-    int originalByteOrder;      /* Byte order specified at creation */
-    int byteOrder;              /* Byte order in use */
-    boolean usesMark;           /* Look for a mark and interpret it */
-
-    /**
-     * Creates a Unicode byte-to-char converter that expects the first pair of
-     * input bytes to be a byte-order mark, which will be interpreted and
-     * discarded.  If the first pair of bytes is not such a mark then a
-     * <tt>MalformedInputException</tt> will be thrown by the convert method.
-     */
-    public ByteToCharUnicode() {
-        originalByteOrder = byteOrder = AUTO;
-        usesMark = true;
-    }
-
-    /**
-     * Creates a Unicode byte-to-char converter that uses the given byte order
-     * and may or may not insist upon an initial byte-order mark.
-     */
-    protected ByteToCharUnicode(int bo, boolean m) {
-        originalByteOrder = byteOrder = bo;
-        usesMark = m;
-    }
-
-    public String getCharacterEncoding() {
-        switch (originalByteOrder) {
-        case BIG:
-            return usesMark ? "UnicodeBig" : "UnicodeBigUnmarked";
-        case LITTLE:
-            return usesMark ? "UnicodeLittle" : "UnicodeLittleUnmarked";
-        default:
-            return "Unicode";
-        }
-    }
-
-    boolean started = false;
-    int leftOverByte;
-    boolean leftOver = false;
-
-    public int convert(byte[] in, int inOff, int inEnd,
-                       char[] out, int outOff, int outEnd)
-        throws ConversionBufferFullException, MalformedInputException
-    {
-        byteOff = inOff;
-        charOff = outOff;
-
-        if (inOff >= inEnd)
-            return 0;
-
-        int b1, b2;
-        int bc = 0;
-        int inI = inOff, outI = outOff;
-
-        if (leftOver) {
-            b1 = leftOverByte & 0xff;
-            leftOver = false;
-        }
-        else {
-            b1 = in[inI++] & 0xff;
-        }
-        bc = 1;
-
-        if (usesMark && !started) {     /* Read initial byte-order mark */
-            if (inI < inEnd) {
-                b2 = in[inI++] & 0xff;
-                bc = 2;
-
-                char c = (char) ((b1 << 8) | b2);
-                int bo = AUTO;
-
-                if (c == BYTE_ORDER_MARK)
-                    bo = BIG;
-                else if (c == REVERSED_MARK)
-                    bo = LITTLE;
-
-                if (byteOrder == AUTO) {
-                    if (bo == AUTO) {
-                        badInputLength = bc;
-                        throw new
-                            MalformedInputException("Missing byte-order mark");
-                    }
-                    byteOrder = bo;
-                    if (inI < inEnd) {
-                        b1 = in[inI++] & 0xff;
-                        bc = 1;
-                    }
-                }
-                else if (bo == AUTO) {
-                    inI--;
-                    bc = 1;
-                }
-                else if (byteOrder == bo) {
-                    if (inI < inEnd) {
-                        b1 = in[inI++] & 0xff;
-                        bc = 1;
-                    }
-                }
-                else {
-                    badInputLength = bc;
-                    throw new
-                        MalformedInputException("Incorrect byte-order mark");
-                }
-
-                started = true;
-            }
-        }
-
-        /* Loop invariant: (b1 contains the next input byte) && (bc == 1) */
-        while (inI < inEnd) {
-            b2 = in[inI++] & 0xff;
-            bc = 2;
-
-            char c;
-            if (byteOrder == BIG)
-                c = (char) ((b1 << 8) | b2);
-            else
-                c = (char) ((b2 << 8) | b1);
-
-            if (c == REVERSED_MARK)
-                throw new
-                    MalformedInputException("Reversed byte-order mark");
-
-            if (outI >= outEnd)
-                throw new ConversionBufferFullException();
-            out[outI++] = c;
-            byteOff = inI;
-            charOff = outI;
-
-            if (inI < inEnd) {
-                b1 = in[inI++] & 0xff;
-                bc = 1;
-            }
-        }
-
-        if (bc == 1) {
-            leftOverByte = b1;
-            byteOff = inI;
-            leftOver = true;
-        }
-
-        return outI - outOff;
-    }
-
-    public void reset() {
-        leftOver = false;
-        byteOff = charOff = 0;
-        started = false;
-        byteOrder = originalByteOrder;
-    }
-
-    public int flush(char buf[], int off, int len)
-        throws MalformedInputException
-    {
-        if (leftOver) {
-            reset();
-            throw new MalformedInputException();
-        }
-        byteOff = charOff = 0;
-        return 0;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharUnicodeBig.java b/ojluni/src/main/java/sun/io/ByteToCharUnicodeBig.java
deleted file mode 100755
index 40ccbed..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharUnicodeBig.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-package sun.io;
-import java.io.*;
-
-
-/**
- * Convert byte arrays containing Unicode characters into arrays of actual
- * Unicode characters, assuming a big-endian byte order.
- *
- * @author      Mark Reinhold
- */
-
-public class ByteToCharUnicodeBig extends ByteToCharUnicode {
-
-    public ByteToCharUnicodeBig() {
-        super(BIG, true);
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharUnicodeBigUnmarked.java b/ojluni/src/main/java/sun/io/ByteToCharUnicodeBigUnmarked.java
deleted file mode 100755
index 01a1a8f..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharUnicodeBigUnmarked.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.
- */
-
-package sun.io;
-import java.io.*;
-
-
-/**
- * Convert byte arrays containing Unicode characters into arrays of actual
- * Unicode characters, assuming a big-endian byte order and requiring no
- * byte-order mark.
- *
- * @author      Mark Reinhold
- */
-
-public class ByteToCharUnicodeBigUnmarked extends ByteToCharUnicode {
-
-    public ByteToCharUnicodeBigUnmarked() {
-        super(BIG, false);
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharUnicodeLittle.java b/ojluni/src/main/java/sun/io/ByteToCharUnicodeLittle.java
deleted file mode 100755
index cc5a15846..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharUnicodeLittle.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-package sun.io;
-import java.io.*;
-
-
-/**
- * Convert byte arrays containing Unicode characters into arrays of actual
- * Unicode characters, assuming a little-endian byte order.
- *
- * @author      Mark Reinhold
- */
-
-public class ByteToCharUnicodeLittle extends ByteToCharUnicode {
-
-    public ByteToCharUnicodeLittle() {
-        super(LITTLE, true);
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/ByteToCharUnicodeLittleUnmarked.java b/ojluni/src/main/java/sun/io/ByteToCharUnicodeLittleUnmarked.java
deleted file mode 100755
index f77eb83..0000000
--- a/ojluni/src/main/java/sun/io/ByteToCharUnicodeLittleUnmarked.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.
- */
-
-package sun.io;
-import java.io.*;
-
-
-/**
- * Convert byte arrays containing Unicode characters into arrays of actual
- * Unicode characters, assuming a little-endian byte order and requiring no
- * byte-order mark.
- *
- * @author      Mark Reinhold
- */
-
-public class ByteToCharUnicodeLittleUnmarked extends ByteToCharUnicode {
-
-    public ByteToCharUnicodeLittleUnmarked() {
-        super(LITTLE, false);
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteASCII.java b/ojluni/src/main/java/sun/io/CharToByteASCII.java
deleted file mode 100755
index 51895be..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteASCII.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package sun.io;
-
-public class CharToByteASCII extends CharToByteConverter {
-
-    // Return the character set ID
-    public String getCharacterEncoding()
-    {
-        return "ASCII";
-    }
-
-    private char highHalfZoneCode;
-
-    public int flush(byte[] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        if (highHalfZoneCode != 0) {
-            highHalfZoneCode = 0;
-            throw new MalformedInputException
-                ("String ends with <High Half Zone code> of UTF16");
-        }
-        byteOff = charOff = 0;
-        return 0;
-    }
-
-    /*
-    * Character conversion
-    */
-    public int convert(char[] input, int inOff, int inEnd,
-                       byte[] output, int outOff, int outEnd)
-        throws MalformedInputException,
-               UnknownCharacterException,
-               ConversionBufferFullException
-    {
-        char    inputChar;          // Input character to be converted
-        byte[]  outputByte;         // Output byte written to output
-        byte[]  tmpArray = new byte[1];
-        int     inputSize;          // Size of input
-        int     outputSize;         // Size of output
-
-        // Record beginning offsets
-        charOff = inOff;
-        byteOff = outOff;
-
-        if (highHalfZoneCode != 0) {
-            inputChar = highHalfZoneCode;
-            highHalfZoneCode = 0;
-            if (input[inOff] >= 0xdc00 && input[inOff] <= 0xdfff) {
-                // This is legal UTF16 sequence.
-                badInputLength = 1;
-                throw new UnknownCharacterException();
-            } else {
-                // This is illegal UTF16 sequence.
-                badInputLength = 0;
-                throw new MalformedInputException
-                    ("Previous converted string ends with " +
-                     "<High Half Zone Code> of UTF16 " +
-                     ", but this string is not begin with <Low Half Zone>");
-            }
-        }
-
-        // Loop until we hit the end of the input
-        while(charOff < inEnd) {
-            outputByte = tmpArray;
-
-            // Get the input character
-            inputChar = input[charOff];
-
-            // default outputSize
-            outputSize = 1;
-
-            // Assume this is a simple character
-            inputSize = 1;
-
-            // Is this a high surrogate?
-            if(inputChar >= '\uD800' && inputChar <= '\uDBFF') {
-                // Is this the last character in the input?
-                if (charOff + 1 == inEnd) {
-                    highHalfZoneCode = inputChar;
-                    break;
-                }
-
-                // Is there a low surrogate following?
-                inputChar = input[charOff + 1];
-                if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                    // We have a valid surrogate pair.  Too bad we don't map
-                    //  surrogates.  Is substitution enabled?
-                    if (subMode) {
-                        outputByte = subBytes;
-                        outputSize = subBytes.length;
-                        inputSize = 2;
-                    } else {
-                        badInputLength = 2;
-                        throw new UnknownCharacterException();
-                    }
-                } else {
-                    // We have a malformed surrogate pair
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-            }
-            // Is this an unaccompanied low surrogate?
-            else if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                badInputLength = 1;
-                throw new MalformedInputException();
-            }
-            // Not part of a surrogate, so try to convert
-            else {
-                // Is this character mappable?
-                if (inputChar <= '\u007F') {
-                    outputByte[0] = (byte)inputChar;
-                } else {
-                    // Is substitution enabled?
-                    if (subMode) {
-                        outputByte = subBytes;
-                        outputSize = subBytes.length;
-                    } else {
-                        badInputLength = 1;
-                        throw new UnknownCharacterException();
-                    }
-                }
-            }
-
-            // If we don't have room for the output, throw an exception
-            if (byteOff + outputSize > outEnd)
-                throw new ConversionBufferFullException();
-
-            // Put the byte in the output buffer
-            for (int i = 0; i < outputSize; i++) {
-                output[byteOff++] = outputByte[i];
-            }
-            charOff += inputSize;
-        }
-
-        // Return the length written to the output buffer
-        return byteOff-outOff;
-    }
-
-    // Determine if a character is mappable or not
-    public boolean canConvert(char ch)
-    {
-        return (ch <= '\u007F');
-    }
-
-    // Reset the converter
-    public void reset()
-    {
-        byteOff = charOff = 0;
-        highHalfZoneCode = 0;
-    }
-
-    /**
-     * returns the maximum number of bytes needed to convert a char
-     */
-    public int getMaxBytesPerChar()
-    {
-        return 1;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteBig5.java b/ojluni/src/main/java/sun/io/CharToByteBig5.java
deleted file mode 100755
index c6ef3e4..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteBig5.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.DoubleByte;
-import sun.nio.cs.ext.Big5;
-
-/**
- * Tables and data to convert Unicode to Big5
- *
- */
-
-public class CharToByteBig5 extends CharToByteDBCS_ASCII {
-
-    private static DoubleByte.Encoder enc =
-        (DoubleByte.Encoder)new Big5().newEncoder();
-
-    public String getCharacterEncoding() {
-        return "Big5";
-    }
-
-    public CharToByteBig5() {
-        super(enc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteBig5_HKSCS.java b/ojluni/src/main/java/sun/io/CharToByteBig5_HKSCS.java
deleted file mode 100755
index 706e905..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteBig5_HKSCS.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2001, 2010, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.DoubleByte;
-import sun.nio.cs.ext.Big5_HKSCS;
-
-public class CharToByteBig5_HKSCS extends CharToByteDBCS_ASCII {
-    private static DoubleByte.Encoder enc =
-        (DoubleByte.Encoder)new Big5_HKSCS().newEncoder();
-
-    public String getCharacterEncoding() {
-        return "Big5_HKSCS";
-    }
-
-    public CharToByteBig5_HKSCS() {
-        super(enc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteBig5_Solaris.java b/ojluni/src/main/java/sun/io/CharToByteBig5_Solaris.java
deleted file mode 100755
index 503d7b2..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteBig5_Solaris.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2001, 2010, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.DoubleByte;
-import sun.nio.cs.ext.Big5_Solaris;
-
-public class CharToByteBig5_Solaris extends CharToByteDBCS_ASCII {
-
-    private static DoubleByte.Encoder enc =
-        (DoubleByte.Encoder)new Big5_Solaris().newEncoder();
-
-    public String getCharacterEncoding() {
-        return "Big5_Solaris";
-    }
-
-    public CharToByteBig5_Solaris() {
-        super(enc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteConverter.java b/ojluni/src/main/java/sun/io/CharToByteConverter.java
deleted file mode 100755
index 2a8a9b7..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteConverter.java
+++ /dev/null
@@ -1,419 +0,0 @@
-/*
- * Copyright (c) 1996, 2004, 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.
- */
-
-package sun.io;
-
-import java.io.*;
-
-
-/**
- * An abstract base class for subclasses which convert Unicode
- * characters into an external encoding.
- *
- * @author Asmus Freytag
- * @author Lloyd Honomichl, Novell, Inc.
- *
- * @deprecated Replaced by {@link java.nio.charset}.  THIS API WILL BE
- * REMOVED IN J2SE 1.6.
- */
-@Deprecated
-public abstract class CharToByteConverter {
-
-    /**
-     * Substitution mode flag.
-     */
-    protected boolean subMode = true;
-
-    /**
-     * Bytes to substitute for unmappable input.
-     */
-    protected byte[] subBytes = { (byte)'?' };
-
-    /**
-     * Offset of next character to be converted.
-     */
-    protected int charOff;
-
-    /**
-     * Offset of next byte to be output.
-     */
-    protected int byteOff;
-
-    /**
-     * Length of bad input that caused conversion to stop.
-     */
-    protected int badInputLength;
-
-    /**
-     * Create an instance of the default CharToByteConverter subclass.
-     */
-    public static CharToByteConverter getDefault() {
-        Object cvt;
-        cvt = Converters.newDefaultConverter(Converters.CHAR_TO_BYTE);
-        return (CharToByteConverter)cvt;
-    }
-
-    /**
-     * Returns appropriate CharToByteConverter subclass instance.
-     * @param string represets encoding
-     */
-    public static CharToByteConverter getConverter(String encoding)
-        throws UnsupportedEncodingException
-    {
-        Object cvt;
-        cvt = Converters.newConverter(Converters.CHAR_TO_BYTE, encoding);
-        return (CharToByteConverter)cvt;
-    }
-
-    /**
-     * Returns the character set id for the conversion.
-     */
-    public abstract String getCharacterEncoding();
-
-    /**
-     * Converts an array of Unicode characters into an array of bytes
-     * in the target character encoding.  This method allows a buffer by
-     * buffer conversion of a data stream.  The state of the conversion is
-     * saved between calls to convert.  If a call to convert results in
-     * an exception, the conversion may be continued by calling convert again
-     * with suitably modified parameters.  All conversions should be finished
-     * with a call to the flush method.
-     *
-     * @return the number of bytes written to output.
-     * @param input array containing Unicode characters to be converted.
-     * @param inStart begin conversion at this offset in input array.
-     * @param inEnd stop conversion at this offset in input array (exclusive).
-     * @param output byte array to receive conversion result.
-     * @param outStart start writing to output array at this offset.
-     * @param outEnd stop writing to output array at this offset (exclusive).
-     * @exception MalformedInputException if the input buffer contains any
-     * sequence of chars that is illegal in Unicode (principally unpaired
-     * surrogates and \uFFFF or \uFFFE). After this exception is thrown,
-     * the method nextCharIndex can be called to obtain the index of the
-     * first invalid input character.  The MalformedInputException can
-     * be queried for the length of the invalid input.
-     * @exception UnknownCharacterException for any character that
-     * that cannot be converted to the external character encoding. Thrown
-     * only when converter is not in substitution mode.
-     * @exception ConversionBufferFullException if output array is filled prior
-     * to converting all the input.
-     */
-    public abstract int convert(char[] input, int inStart, int inEnd,
-                                byte[] output, int outStart, int outEnd)
-        throws MalformedInputException,
-               UnknownCharacterException,
-               ConversionBufferFullException;
-
-    /*
-     * Converts any array of characters, including malformed surrogate
-     * pairs, into an array of bytes in the target character encoding.
-     * A precondition is that substitution mode is turned on. This method
-     * allows a buffer by buffer conversion of a data stream.
-     * The state of the conversion is saved between calls to convert.
-     * All conversions should be finished with a call to the flushAny method.
-     *
-     * @return the number of bytes written to output.
-     * @param input array containing Unicode characters to be converted.
-     * @param inStart begin conversion at this offset in input array.
-     * @param inEnd stop conversion at this offset in input array (exclusive).
-     * @param output byte array to receive conversion result.
-     * @param outStart start writing to output array at this offset.
-     * @param outEnd stop writing to output array at this offset (exclusive).
-     * @exception ConversionBufferFullException if output array is filled prior
-     * to converting all the input.
-     */
-    public int convertAny(char[] input, int inStart, int inEnd,
-                          byte[] output, int outStart, int outEnd)
-        throws ConversionBufferFullException
-    {
-        if (!subMode) {             /* Precondition: subMode == true */
-            throw new IllegalStateException("Substitution mode is not on");
-        }
-        /* Rely on the untested precondition that the indices are meaningful */
-        /* For safety, use the public interface to charOff and byteOff, but
-           badInputLength is directly modified.*/
-        int localInOff = inStart;
-        int localOutOff = outStart;
-        while(localInOff < inEnd) {
-            try {
-                int discard = convert(input, localInOff, inEnd,
-                                      output, localOutOff, outEnd);
-                return (nextByteIndex() - outStart);
-            } catch (MalformedInputException e) {
-                byte[] s = subBytes;
-                int subSize = s.length;
-                localOutOff = nextByteIndex();
-                if ((localOutOff + subSize) > outEnd)
-                    throw new ConversionBufferFullException();
-                for (int i = 0; i < subSize; i++)
-                    output[localOutOff++] = s[i];
-                localInOff = nextCharIndex();
-                localInOff += badInputLength;
-                badInputLength = 0;
-                if (localInOff >= inEnd){
-                    byteOff = localOutOff;
-                    return (byteOff - outStart);
-                }
-                continue;
-            }catch (UnknownCharacterException e) {
-                /* Should never occur, since subMode == true */
-                throw new Error("UnknownCharacterException thrown "
-                                + "in substititution mode",
-                                e);
-            }
-        }
-        return (nextByteIndex() - outStart);
-    }
-
-
-
-    /**
-     * Converts an array of Unicode characters into an array of bytes
-     * in the target character encoding.  Unlike convert, this method
-     * does not do incremental conversion.  It assumes that the given
-     * input array contains all the characters to be converted. The
-     * state of the converter is reset at the beginning of this method
-     * and is left in the reset state on successful termination.
-     * The converter is not reset if an exception is thrown.
-     * This allows the caller to determine where the bad input
-     * was encountered by calling nextCharIndex.
-     * <p>
-     * This method uses substitution mode when performing the conversion.
-     * The method setSubstitutionBytes may be used to determine what
-     * bytes are substituted.  Even though substitution mode is used,
-     * the state of the converter's substitution mode is not changed
-     * at the end of this method.
-     *
-     * @return an array of bytes containing the converted characters.
-     * @param input array containing Unicode characters to be converted.
-     * @exception MalformedInputException if the input buffer contains any
-     * sequence of chars that is illegal in Unicode (principally unpaired
-     * surrogates and \uFFFF or \uFFFE). After this exception is thrown,
-     * the method nextCharIndex can be called to obtain the index of the
-     * first invalid input character and getBadInputLength can be called
-     * to determine the length of the invalid input.
-     *
-     * @see   #nextCharIndex
-     * @see   #setSubstitutionMode
-     * @see   #setSubstitutionBytes
-     * @see   #getBadInputLength
-     */
-    public byte[] convertAll( char input[] ) throws MalformedInputException {
-        reset();
-        boolean savedSubMode = subMode;
-        subMode = true;
-
-        byte[] output = new byte[ getMaxBytesPerChar() * input.length ];
-
-        try {
-            int outputLength = convert( input, 0, input.length,
-                                        output, 0, output.length );
-            outputLength += flush( output, nextByteIndex(), output.length );
-
-            byte [] returnedOutput = new byte[ outputLength ];
-            System.arraycopy( output, 0, returnedOutput, 0, outputLength );
-            return returnedOutput;
-        }
-        catch( ConversionBufferFullException e ) {
-            //Not supposed to happen.  If it does, getMaxBytesPerChar() lied.
-            throw new
-                InternalError("this.getMaxBytesPerChar returned bad value");
-        }
-        catch( UnknownCharacterException e ) {
-            // Not supposed to happen since we're in substitution mode.
-            throw new InternalError();
-        }
-        finally {
-            subMode = savedSubMode;
-        }
-    }
-
-    /**
-     * Writes any remaining output to the output buffer and resets the
-     * converter to its initial state.
-     *
-     * @param output byte array to receive flushed output.
-     * @param outStart start writing to output array at this offset.
-     * @param outEnd stop writing to output array at this offset (exclusive).
-     * @exception MalformedInputException if the output to be flushed contained
-     * a partial or invalid multibyte character sequence.  Will occur if the
-     * input buffer on the last call to convert ended with the first character
-     * of a surrogate pair. flush will write what it can to the output buffer
-     * and reset the converter before throwing this exception.  An additional
-     * call to flush is not required.
-     * @exception ConversionBufferFullException if output array is filled
-     * before all the output can be flushed. flush will write what it can
-     * to the output buffer and remember its state.  An additional call to
-     * flush with a new output buffer will conclude the operation.
-     */
-    public abstract int flush( byte[] output, int outStart, int outEnd )
-        throws MalformedInputException, ConversionBufferFullException;
-
-    /**
-     * Writes any remaining output to the output buffer and resets the
-     * converter to its initial state. May only be called when substitution
-     * mode is turned on, and never complains about malformed input (always
-     * substitutes).
-     *
-     * @param output byte array to receive flushed output.
-     * @param outStart start writing to output array at this offset.
-     * @param outEnd stop writing to output array at this offset (exclusive).
-     * @return number of bytes writter into output.
-     * @exception ConversionBufferFullException if output array is filled
-     * before all the output can be flushed. flush will write what it can
-     * to the output buffer and remember its state.  An additional call to
-     * flush with a new output buffer will conclude the operation.
-     */
-    public int flushAny( byte[] output, int outStart, int outEnd )
-        throws ConversionBufferFullException
-    {
-        if (!subMode) {             /* Precondition: subMode == true */
-            throw new IllegalStateException("Substitution mode is not on");
-        }
-        try {
-            return flush(output, outStart, outEnd);
-        } catch (MalformedInputException e) {
-            /* Assume that if a malformed input exception has occurred,
-               no useful data has been placed in the output buffer.
-               i.e. there is no mixture of left over good + some bad data.
-               Usually occurs with a trailing high surrogate pair element.
-               Special cases occur in Cp970, 949c and 933 that seem
-               to be covered, but may require further investigation */
-            int subSize = subBytes.length;
-            byte[] s = subBytes;
-            int outIndex = outStart;
-            if ((outStart + subSize) > outEnd)
-                throw new ConversionBufferFullException();
-            for (int i = 0; i < subSize; i++)
-                output[outIndex++] = s[i];
-            byteOff = charOff = 0; // Reset the internal state.
-            badInputLength = 0;
-            return subSize;
-        }
-    }
-
-    /**
-     * Resets converter to its initial state.
-     */
-    public abstract void reset();
-
-    /**
-     * Returns true if the given character can be converted to the
-     * target character encoding.
-     * @return true if given character is translatable, false otherwise.
-     * @param c character to test
-     */
-    public boolean canConvert(char c) {
-        try {
-            //FIXME output buffer size should use getMaxBytesPerChar value.
-            char[] input = new char[1];
-            byte[] output = new byte[3];
-            input[0] = c;
-            convert(input, 0, 1, output, 0, 3);
-            return true;
-        } catch(CharConversionException e){
-            return false;
-        }
-    }
-
-    /**
-     * Returns the maximum number of bytes needed to convert a char. Useful
-     * for calculating the maximum output buffer size needed for a particular
-     * input buffer.
-     */
-    public abstract int getMaxBytesPerChar();
-
-    /**
-     * Returns the length, in chars, of the input which caused a
-     * MalformedInputException.  Always refers to the last
-     * MalformedInputException thrown by the converter.  If none have
-     * ever been thrown, returns 0.
-     */
-    public int getBadInputLength() {
-        return badInputLength;
-    }
-
-    /**
-     * Returns the index of the character just past
-     * the last character successfully converted by the previous call
-     * to convert.
-     */
-    public int nextCharIndex() {
-        return charOff;
-    }
-
-    /**
-     * Returns the index of the byte just past the last byte written by
-     * the previous call to convert.
-     */
-    public int nextByteIndex() {
-        return byteOff;
-    }
-
-    /**
-     * Sets converter into substitution mode.  In substitution mode,
-     * the converter will replace untranslatable characters in the source
-     * encoding with the substitution character set by setSubstitutionBytes.
-     * When not in substitution mode, the converter will throw an
-     * UnknownCharacterException when it encounters untranslatable input.
-     *
-     * @param doSub if true, enable substitution mode.
-     * @see #setSubstitutionBytes
-     */
-    public void setSubstitutionMode(boolean doSub) {
-        subMode = doSub;
-    }
-
-    /**
-     * Sets the substitution bytes to use when the converter is in
-     * substitution mode.  The given bytes should represent a valid
-     * character in the target character encoding and must not be
-     * longer than the value returned by getMaxBytesPerChar for this
-     * converter.
-     *
-     * @param newSubBytes the substitution bytes
-     * @exception IllegalArgumentException if given byte array is longer than
-     *    the value returned by the method getMaxBytesPerChar.
-     * @see #setSubstitutionMode
-     * @see #getMaxBytesPerChar
-     */
-    public void setSubstitutionBytes( byte[] newSubBytes )
-        throws IllegalArgumentException
-    {
-        if( newSubBytes.length > getMaxBytesPerChar() ) {
-            throw new IllegalArgumentException();
-        }
-
-        subBytes = new byte[ newSubBytes.length ];
-        System.arraycopy( newSubBytes, 0, subBytes, 0, newSubBytes.length );
-    }
-
-    /**
-     * Returns a string representation of the class.
-     */
-    public String toString() {
-        return "CharToByteConverter: " + getCharacterEncoding();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp037.java b/ojluni/src/main/java/sun/io/CharToByteCp037.java
deleted file mode 100755
index 91a8bf6..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp037.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM037;
-
-/**
- * Tables and data to convert Unicode to Cp037
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp037 extends CharToByteSingleByte {
-
-    private final static IBM037 nioCoder = new IBM037();
-
-    public String getCharacterEncoding() {
-        return "Cp037";
-    }
-
-    public CharToByteCp037() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1006.java b/ojluni/src/main/java/sun/io/CharToByteCp1006.java
deleted file mode 100755
index b55c112..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1006.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1006;
-
-/**
- * Tables and data to convert Unicode to Cp1006
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1006 extends CharToByteSingleByte {
-
-    private final static IBM1006 nioCoder = new IBM1006();
-
-    public String getCharacterEncoding() {
-        return "Cp1006";
-    }
-
-    public CharToByteCp1006() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1025.java b/ojluni/src/main/java/sun/io/CharToByteCp1025.java
deleted file mode 100755
index 247ae26..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1025.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1025;
-
-/**
- * Tables and data to convert Unicode to Cp1025
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1025 extends CharToByteSingleByte {
-
-    private final static IBM1025 nioCoder = new IBM1025();
-
-    public String getCharacterEncoding() {
-        return "Cp1025";
-    }
-
-    public CharToByteCp1025() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1026.java b/ojluni/src/main/java/sun/io/CharToByteCp1026.java
deleted file mode 100755
index 74962a8..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1026.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1026;
-
-/**
- * Tables and data to convert Unicode to Cp1026
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1026 extends CharToByteSingleByte {
-
-    private final static IBM1026 nioCoder = new IBM1026();
-
-    public String getCharacterEncoding() {
-        return "Cp1026";
-    }
-
-    public CharToByteCp1026() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1046.java b/ojluni/src/main/java/sun/io/CharToByteCp1046.java
deleted file mode 100755
index 4bd9a3c..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1046.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1046;
-
-/**
- * Tables and data to convert Unicode to Cp1046
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1046 extends CharToByteSingleByte {
-
-    private final static IBM1046 nioCoder = new IBM1046();
-
-    public String getCharacterEncoding() {
-        return "Cp1046";
-    }
-
-    public CharToByteCp1046() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1047.java b/ojluni/src/main/java/sun/io/CharToByteCp1047.java
deleted file mode 100755
index 0cb64cc..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1047.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1047;
-
-/**
- * Tables and data to convert Unicode to Cp1047
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1047 extends CharToByteSingleByte {
-
-    private final static IBM1047 nioCoder = new IBM1047();
-
-    public String getCharacterEncoding() {
-        return "Cp1047";
-    }
-
-    public CharToByteCp1047() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1097.java b/ojluni/src/main/java/sun/io/CharToByteCp1097.java
deleted file mode 100755
index 812467e..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1097.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1097;
-
-/**
- * Tables and data to convert Unicode to Cp1097
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1097 extends CharToByteSingleByte {
-
-    private final static IBM1097 nioCoder = new IBM1097();
-
-    public String getCharacterEncoding() {
-        return "Cp1097";
-    }
-
-    public CharToByteCp1097() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1098.java b/ojluni/src/main/java/sun/io/CharToByteCp1098.java
deleted file mode 100755
index a291bda..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1098.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1098;
-
-/**
- * Tables and data to convert Unicode to Cp1098
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1098 extends CharToByteSingleByte {
-
-    private final static IBM1098 nioCoder = new IBM1098();
-
-    public String getCharacterEncoding() {
-        return "Cp1098";
-    }
-
-    public CharToByteCp1098() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1112.java b/ojluni/src/main/java/sun/io/CharToByteCp1112.java
deleted file mode 100755
index 460b663..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1112.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1112;
-
-/**
- * Tables and data to convert Unicode to Cp1112
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1112 extends CharToByteSingleByte {
-
-    private final static IBM1112 nioCoder = new IBM1112();
-
-    public String getCharacterEncoding() {
-        return "Cp1112";
-    }
-
-    public CharToByteCp1112() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1122.java b/ojluni/src/main/java/sun/io/CharToByteCp1122.java
deleted file mode 100755
index 3eb8d35..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1122.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1122;
-
-/**
- * Tables and data to convert Unicode to Cp1122
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1122 extends CharToByteSingleByte {
-
-    private final static IBM1122 nioCoder = new IBM1122();
-
-    public String getCharacterEncoding() {
-        return "Cp1122";
-    }
-
-    public CharToByteCp1122() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1123.java b/ojluni/src/main/java/sun/io/CharToByteCp1123.java
deleted file mode 100755
index 9c7e287..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1123.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1123;
-
-/**
- * Tables and data to convert Unicode to Cp1123
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1123 extends CharToByteSingleByte {
-
-    private final static IBM1123 nioCoder = new IBM1123();
-
-    public String getCharacterEncoding() {
-        return "Cp1123";
-    }
-
-    public CharToByteCp1123() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1124.java b/ojluni/src/main/java/sun/io/CharToByteCp1124.java
deleted file mode 100755
index 5948002..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1124.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1124;
-
-/**
- * Tables and data to convert Unicode to Cp1124
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1124 extends CharToByteSingleByte {
-
-    private final static IBM1124 nioCoder = new IBM1124();
-
-    public String getCharacterEncoding() {
-        return "Cp1124";
-    }
-
-    public CharToByteCp1124() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1140.java b/ojluni/src/main/java/sun/io/CharToByteCp1140.java
deleted file mode 100755
index 5b17ee4..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1140.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1140;
-
-/**
- * Tables and data to convert Unicode to Cp1140
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1140 extends CharToByteSingleByte {
-
-    private final static IBM1140 nioCoder = new IBM1140();
-
-    public String getCharacterEncoding() {
-        return "Cp1140";
-    }
-
-    public CharToByteCp1140() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1141.java b/ojluni/src/main/java/sun/io/CharToByteCp1141.java
deleted file mode 100755
index fd662c7..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1141.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1141;
-
-/**
- * Tables and data to convert Unicode to Cp1141
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1141 extends CharToByteSingleByte {
-
-    private final static IBM1141 nioCoder = new IBM1141();
-
-    public String getCharacterEncoding() {
-        return "Cp1141";
-    }
-
-    public CharToByteCp1141() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1142.java b/ojluni/src/main/java/sun/io/CharToByteCp1142.java
deleted file mode 100755
index 0b3a11c..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1142.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1142;
-
-/**
- * Tables and data to convert Unicode to Cp1142
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1142 extends CharToByteSingleByte {
-
-    private final static IBM1142 nioCoder = new IBM1142();
-
-    public String getCharacterEncoding() {
-        return "Cp1142";
-    }
-
-    public CharToByteCp1142() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1143.java b/ojluni/src/main/java/sun/io/CharToByteCp1143.java
deleted file mode 100755
index 5417a92..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1143.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1143;
-
-/**
- * Tables and data to convert Unicode to Cp1143
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1143 extends CharToByteSingleByte {
-
-    private final static IBM1143 nioCoder = new IBM1143();
-
-    public String getCharacterEncoding() {
-        return "Cp1143";
-    }
-
-    public CharToByteCp1143() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1144.java b/ojluni/src/main/java/sun/io/CharToByteCp1144.java
deleted file mode 100755
index d7eaa74..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1144.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1144;
-
-/**
- * Tables and data to convert Unicode to Cp1144
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1144 extends CharToByteSingleByte {
-
-    private final static IBM1144 nioCoder = new IBM1144();
-
-    public String getCharacterEncoding() {
-        return "Cp1144";
-    }
-
-    public CharToByteCp1144() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1145.java b/ojluni/src/main/java/sun/io/CharToByteCp1145.java
deleted file mode 100755
index 637af83..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1145.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1145;
-
-/**
- * Tables and data to convert Unicode to Cp1145
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1145 extends CharToByteSingleByte {
-
-    private final static IBM1145 nioCoder = new IBM1145();
-
-    public String getCharacterEncoding() {
-        return "Cp1145";
-    }
-
-    public CharToByteCp1145() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1146.java b/ojluni/src/main/java/sun/io/CharToByteCp1146.java
deleted file mode 100755
index 580209d..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1146.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1146;
-
-/**
- * Tables and data to convert Unicode to Cp1146
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1146 extends CharToByteSingleByte {
-
-    private final static IBM1146 nioCoder = new IBM1146();
-
-    public String getCharacterEncoding() {
-        return "Cp1146";
-    }
-
-    public CharToByteCp1146() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1147.java b/ojluni/src/main/java/sun/io/CharToByteCp1147.java
deleted file mode 100755
index f88a3a9..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1147.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1147;
-
-/**
- * Tables and data to convert Unicode to Cp1147
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1147 extends CharToByteSingleByte {
-
-    private final static IBM1147 nioCoder = new IBM1147();
-
-    public String getCharacterEncoding() {
-        return "Cp1147";
-    }
-
-    public CharToByteCp1147() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1148.java b/ojluni/src/main/java/sun/io/CharToByteCp1148.java
deleted file mode 100755
index 421761b..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1148.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1148;
-
-/**
- * Tables and data to convert Unicode to Cp1148
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1148 extends CharToByteSingleByte {
-
-    private final static IBM1148 nioCoder = new IBM1148();
-
-    public String getCharacterEncoding() {
-        return "Cp1148";
-    }
-
-    public CharToByteCp1148() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1149.java b/ojluni/src/main/java/sun/io/CharToByteCp1149.java
deleted file mode 100755
index 3103faf..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1149.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM1149;
-
-/**
- * Tables and data to convert Unicode to Cp1149
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1149 extends CharToByteSingleByte {
-
-    private final static IBM1149 nioCoder = new IBM1149();
-
-    public String getCharacterEncoding() {
-        return "Cp1149";
-    }
-
-    public CharToByteCp1149() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1250.java b/ojluni/src/main/java/sun/io/CharToByteCp1250.java
deleted file mode 100755
index 7561b5c..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1250.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.MS1250;
-
-/**
- * Tables and data to convert Unicode to Cp1250
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1250 extends CharToByteSingleByte {
-
-    private final static MS1250 nioCoder = new MS1250();
-
-    public String getCharacterEncoding() {
-        return "Cp1250";
-    }
-
-    public CharToByteCp1250() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1251.java b/ojluni/src/main/java/sun/io/CharToByteCp1251.java
deleted file mode 100755
index 9eb0dcb..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1251.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.MS1251;
-
-/**
- * Tables and data to convert Unicode to Cp1251
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1251 extends CharToByteSingleByte {
-
-    private final static MS1251 nioCoder = new MS1251();
-
-    public String getCharacterEncoding() {
-        return "Cp1251";
-    }
-
-    public CharToByteCp1251() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1252.java b/ojluni/src/main/java/sun/io/CharToByteCp1252.java
deleted file mode 100755
index 0bfc2cd..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1252.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.MS1252;
-
-/**
- * Tables and data to convert Unicode to Cp1252
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1252 extends CharToByteSingleByte {
-
-    private final static MS1252 nioCoder = new MS1252();
-
-    public String getCharacterEncoding() {
-        return "Cp1252";
-    }
-
-    public CharToByteCp1252() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1253.java b/ojluni/src/main/java/sun/io/CharToByteCp1253.java
deleted file mode 100755
index 7aaef74..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1253.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.MS1253;
-
-/**
- * Tables and data to convert Unicode to Cp1253
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1253 extends CharToByteSingleByte {
-
-    private final static MS1253 nioCoder = new MS1253();
-
-    public String getCharacterEncoding() {
-        return "Cp1253";
-    }
-
-    public CharToByteCp1253() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1254.java b/ojluni/src/main/java/sun/io/CharToByteCp1254.java
deleted file mode 100755
index 8ebc626..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1254.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.MS1254;
-
-/**
- * Tables and data to convert Unicode to Cp1254
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1254 extends CharToByteSingleByte {
-
-    private final static MS1254 nioCoder = new MS1254();
-
-    public String getCharacterEncoding() {
-        return "Cp1254";
-    }
-
-    public CharToByteCp1254() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1255.java b/ojluni/src/main/java/sun/io/CharToByteCp1255.java
deleted file mode 100755
index 4bb8da7..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1255.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MS1255;
-
-/**
- * Tables and data to convert Unicode to Cp1255
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1255 extends CharToByteSingleByte {
-
-    private final static MS1255 nioCoder = new MS1255();
-
-    public String getCharacterEncoding() {
-        return "Cp1255";
-    }
-
-    public CharToByteCp1255() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1256.java b/ojluni/src/main/java/sun/io/CharToByteCp1256.java
deleted file mode 100755
index 638df51..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1256.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MS1256;
-
-/**
- * Tables and data to convert Unicode to Cp1256
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1256 extends CharToByteSingleByte {
-
-    private final static MS1256 nioCoder = new MS1256();
-
-    public String getCharacterEncoding() {
-        return "Cp1256";
-    }
-
-    public CharToByteCp1256() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1257.java b/ojluni/src/main/java/sun/io/CharToByteCp1257.java
deleted file mode 100755
index d5c174f..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1257.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.MS1257;
-
-/**
- * Tables and data to convert Unicode to Cp1257
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1257 extends CharToByteSingleByte {
-
-    private final static MS1257 nioCoder = new MS1257();
-
-    public String getCharacterEncoding() {
-        return "Cp1257";
-    }
-
-    public CharToByteCp1257() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1258.java b/ojluni/src/main/java/sun/io/CharToByteCp1258.java
deleted file mode 100755
index b6e2711..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1258.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MS1258;
-
-/**
- * Tables and data to convert Unicode to Cp1258
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp1258 extends CharToByteSingleByte {
-
-    private final static MS1258 nioCoder = new MS1258();
-
-    public String getCharacterEncoding() {
-        return "Cp1258";
-    }
-
-    public CharToByteCp1258() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1381.java b/ojluni/src/main/java/sun/io/CharToByteCp1381.java
deleted file mode 100755
index 06dfc91..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1381.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteCp1381 extends CharToByteDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp1381";
-    }
-
-    public CharToByteCp1381() {
-        super((DoubleByte.Encoder)new IBM1381().newEncoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp1383.java b/ojluni/src/main/java/sun/io/CharToByteCp1383.java
deleted file mode 100755
index 7e61beb..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp1383.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteCp1383 extends CharToByteDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp1383";
-    }
-
-    public CharToByteCp1383() {
-        super((DoubleByte.Encoder)new IBM1383().newEncoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp273.java b/ojluni/src/main/java/sun/io/CharToByteCp273.java
deleted file mode 100755
index dc617bf..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp273.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM273;
-
-/**
- * Tables and data to convert Unicode to Cp273
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp273 extends CharToByteSingleByte {
-
-    private final static IBM273 nioCoder = new IBM273();
-
-    public String getCharacterEncoding() {
-        return "Cp273";
-    }
-
-    public CharToByteCp273() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp277.java b/ojluni/src/main/java/sun/io/CharToByteCp277.java
deleted file mode 100755
index 7d36a3e..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp277.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM277;
-
-/**
- * Tables and data to convert Unicode to Cp277
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp277 extends CharToByteSingleByte {
-
-    private final static IBM277 nioCoder = new IBM277();
-
-    public String getCharacterEncoding() {
-        return "Cp277";
-    }
-
-    public CharToByteCp277() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp278.java b/ojluni/src/main/java/sun/io/CharToByteCp278.java
deleted file mode 100755
index 555dac4..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp278.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM278;
-
-/**
- * Tables and data to convert Unicode to Cp278
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp278 extends CharToByteSingleByte {
-
-    private final static IBM278 nioCoder = new IBM278();
-
-    public String getCharacterEncoding() {
-        return "Cp278";
-    }
-
-    public CharToByteCp278() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp280.java b/ojluni/src/main/java/sun/io/CharToByteCp280.java
deleted file mode 100755
index e02c1ed..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp280.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM280;
-
-/**
- * Tables and data to convert Unicode to Cp280
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp280 extends CharToByteSingleByte {
-
-    private final static IBM280 nioCoder = new IBM280();
-
-    public String getCharacterEncoding() {
-        return "Cp280";
-    }
-
-    public CharToByteCp280() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp284.java b/ojluni/src/main/java/sun/io/CharToByteCp284.java
deleted file mode 100755
index 110463c..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp284.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM284;
-
-/**
- * Tables and data to convert Unicode to Cp284
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp284 extends CharToByteSingleByte {
-
-    private final static IBM284 nioCoder = new IBM284();
-
-    public String getCharacterEncoding() {
-        return "Cp284";
-    }
-
-    public CharToByteCp284() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp285.java b/ojluni/src/main/java/sun/io/CharToByteCp285.java
deleted file mode 100755
index f26a378..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp285.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM285;
-
-/**
- * Tables and data to convert Unicode to Cp285
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp285 extends CharToByteSingleByte {
-
-    private final static IBM285 nioCoder = new IBM285();
-
-    public String getCharacterEncoding() {
-        return "Cp285";
-    }
-
-    public CharToByteCp285() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp297.java b/ojluni/src/main/java/sun/io/CharToByteCp297.java
deleted file mode 100755
index e459019..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp297.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM297;
-
-/**
- * Tables and data to convert Unicode to Cp297
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp297 extends CharToByteSingleByte {
-
-    private final static IBM297 nioCoder = new IBM297();
-
-    public String getCharacterEncoding() {
-        return "Cp297";
-    }
-
-    public CharToByteCp297() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp33722.java b/ojluni/src/main/java/sun/io/CharToByteCp33722.java
deleted file mode 100755
index be12f54..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp33722.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.IBM33722;
-
-/**
-* Tables and data to convert Unicode to Cp33722
-*
-* @author Malcolm Ayres, assisted by UniMap program
-*/
-public class CharToByteCp33722
-        extends CharToByteEUC
-
-{
-        private final static IBM33722 nioCoder = new IBM33722();
-
-        // Return the character set id
-        public String getCharacterEncoding()
-        {
-                return "Cp33722";
-        }
-
-        public int getMaxBytesPerChar() {
-                return 3;
-        }
-
-        public CharToByteCp33722()
-        {
-                super();
-                super.mask1 = 0xFFE0;
-                super.mask2 = 0x001F;
-                super.shift = 5;
-                super.index1 = nioCoder.getEncoderIndex1();
-                super.index2 = nioCoder.getEncoderIndex2();
-                super.index2a = nioCoder.getEncoderIndex2a();
-                super.index2b = nioCoder.getEncoderIndex2b();
-        }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp420.java b/ojluni/src/main/java/sun/io/CharToByteCp420.java
deleted file mode 100755
index e4dbf42..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp420.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM420;
-
-/**
- * Tables and data to convert Unicode to Cp420
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp420 extends CharToByteSingleByte {
-
-    private final static IBM420 nioCoder = new IBM420();
-
-    public String getCharacterEncoding() {
-        return "Cp420";
-    }
-
-    public CharToByteCp420() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp424.java b/ojluni/src/main/java/sun/io/CharToByteCp424.java
deleted file mode 100755
index 99f2ca4..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp424.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM424;
-
-/**
- * Tables and data to convert Unicode to Cp424
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp424 extends CharToByteSingleByte {
-
-    private final static IBM424 nioCoder = new IBM424();
-
-    public String getCharacterEncoding() {
-        return "Cp424";
-    }
-
-    public CharToByteCp424() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp437.java b/ojluni/src/main/java/sun/io/CharToByteCp437.java
deleted file mode 100755
index 8c24b71..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp437.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.IBM437;
-
-/**
- * Tables and data to convert Unicode to Cp437
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp437 extends CharToByteSingleByte {
-
-    private final static IBM437 nioCoder = new IBM437();
-
-    public String getCharacterEncoding() {
-        return "Cp437";
-    }
-
-    public CharToByteCp437() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp500.java b/ojluni/src/main/java/sun/io/CharToByteCp500.java
deleted file mode 100755
index 6a0bf25..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp500.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM500;
-
-/**
- * Tables and data to convert Unicode to Cp500
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp500 extends CharToByteSingleByte {
-
-    private final static IBM500 nioCoder = new IBM500();
-
-    public String getCharacterEncoding() {
-        return "Cp500";
-    }
-
-    public CharToByteCp500() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp737.java b/ojluni/src/main/java/sun/io/CharToByteCp737.java
deleted file mode 100755
index f1f26e4..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp737.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.IBM737;
-
-/**
- * Tables and data to convert Unicode to Cp737
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp737 extends CharToByteSingleByte {
-
-    private final static IBM737 nioCoder = new IBM737();
-
-    public String getCharacterEncoding() {
-        return "Cp737";
-    }
-
-    public CharToByteCp737() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp775.java b/ojluni/src/main/java/sun/io/CharToByteCp775.java
deleted file mode 100755
index 7dba769..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp775.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.IBM775;
-
-/**
- * Tables and data to convert Unicode to Cp775
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp775 extends CharToByteSingleByte {
-
-    private final static IBM775 nioCoder = new IBM775();
-
-    public String getCharacterEncoding() {
-        return "Cp775";
-    }
-
-    public CharToByteCp775() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp833.java b/ojluni/src/main/java/sun/io/CharToByteCp833.java
deleted file mode 100755
index 23f34c5..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp833.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2010, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM833;
-
-public class CharToByteCp833 extends CharToByteSingleByte {
-
-    private final static IBM833 nioCoder = new IBM833();
-
-    public String getCharacterEncoding() {
-        return "Cp833";
-    }
-
-    public CharToByteCp833() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
-
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp834.java b/ojluni/src/main/java/sun/io/CharToByteCp834.java
deleted file mode 100755
index 9494c07..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp834.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2006, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-//EBIDIC DBCSONLY Korean
-
-public class CharToByteCp834 extends CharToByteDBCS_ASCII {
-
-    public CharToByteCp834() {
-       super((DoubleByte.Encoder)new IBM834().newEncoder());
-       subBytes = new byte[] {(byte)0xfe, (byte)0xfe};
-    }
-
-    public int getMaxBytesPerChar() {
-       return 2;
-    }
-
-    public String getCharacterEncoding() {
-       return "Cp834";
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp838.java b/ojluni/src/main/java/sun/io/CharToByteCp838.java
deleted file mode 100755
index ee750db..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp838.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM838;
-
-/**
- * Tables and data to convert Unicode to Cp838
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp838 extends CharToByteSingleByte {
-
-    private final static IBM838 nioCoder = new IBM838();
-
-    public String getCharacterEncoding() {
-        return "Cp838";
-    }
-
-    public CharToByteCp838() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp850.java b/ojluni/src/main/java/sun/io/CharToByteCp850.java
deleted file mode 100755
index c79e0c4..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp850.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.IBM850;
-
-/**
- * Tables and data to convert Unicode to Cp850
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp850 extends CharToByteSingleByte {
-
-    private final static IBM850 nioCoder = new IBM850();
-
-    public String getCharacterEncoding() {
-        return "Cp850";
-    }
-
-    public CharToByteCp850() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp852.java b/ojluni/src/main/java/sun/io/CharToByteCp852.java
deleted file mode 100755
index 47c17ef..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp852.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.IBM852;
-
-/**
- * Tables and data to convert Unicode to Cp852
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp852 extends CharToByteSingleByte {
-
-    private final static IBM852 nioCoder = new IBM852();
-
-    public String getCharacterEncoding() {
-        return "Cp852";
-    }
-
-    public CharToByteCp852() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp855.java b/ojluni/src/main/java/sun/io/CharToByteCp855.java
deleted file mode 100755
index e16fc69..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp855.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.IBM855;
-
-/**
- * Tables and data to convert Unicode to Cp855
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp855 extends CharToByteSingleByte {
-
-    private final static IBM855 nioCoder = new IBM855();
-
-    public String getCharacterEncoding() {
-        return "Cp855";
-    }
-
-    public CharToByteCp855() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp856.java b/ojluni/src/main/java/sun/io/CharToByteCp856.java
deleted file mode 100755
index d18d47b..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp856.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM856;
-
-/**
- * Tables and data to convert Unicode to Cp856
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp856 extends CharToByteSingleByte {
-
-    private final static IBM856 nioCoder = new IBM856();
-
-    public String getCharacterEncoding() {
-        return "Cp856";
-    }
-
-    public CharToByteCp856() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp857.java b/ojluni/src/main/java/sun/io/CharToByteCp857.java
deleted file mode 100755
index 79055f0..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp857.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.IBM857;
-
-/**
- * Tables and data to convert Unicode to Cp857
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp857 extends CharToByteSingleByte {
-
-    private final static IBM857 nioCoder = new IBM857();
-
-    public String getCharacterEncoding() {
-        return "Cp857";
-    }
-
-    public CharToByteCp857() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp858.java b/ojluni/src/main/java/sun/io/CharToByteCp858.java
deleted file mode 100755
index 3d6b849..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp858.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- */
-
-package sun.io;
-
-import sun.nio.cs.IBM858;
-
-/**
- * Tables and data to convert Unicode to Cp858
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp858 extends CharToByteSingleByte {
-
-    public String getCharacterEncoding() {
-        return "Cp858";
-    }
-
-    private final static IBM858 nioCoder = new IBM858();
-
-    public CharToByteCp858() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp860.java b/ojluni/src/main/java/sun/io/CharToByteCp860.java
deleted file mode 100755
index 46b07ee..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp860.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM860;
-
-/**
- * Tables and data to convert Unicode to Cp860
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp860 extends CharToByteSingleByte {
-
-    private final static IBM860 nioCoder = new IBM860();
-
-    public String getCharacterEncoding() {
-        return "Cp860";
-    }
-
-    public CharToByteCp860() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp861.java b/ojluni/src/main/java/sun/io/CharToByteCp861.java
deleted file mode 100755
index d0c1f32..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp861.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM861;
-
-/**
- * Tables and data to convert Unicode to Cp861
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp861 extends CharToByteSingleByte {
-
-    private final static IBM861 nioCoder = new IBM861();
-
-    public String getCharacterEncoding() {
-        return "Cp861";
-    }
-
-    public CharToByteCp861() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp862.java b/ojluni/src/main/java/sun/io/CharToByteCp862.java
deleted file mode 100755
index c819680..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp862.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.IBM862;
-
-/**
- * Tables and data to convert Unicode to Cp862
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp862 extends CharToByteSingleByte {
-
-    private final static IBM862 nioCoder = new IBM862();
-
-    public String getCharacterEncoding() {
-        return "Cp862";
-    }
-
-    public CharToByteCp862() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp863.java b/ojluni/src/main/java/sun/io/CharToByteCp863.java
deleted file mode 100755
index 1786e8c..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp863.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM863;
-
-/**
- * Tables and data to convert Unicode to Cp863
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp863 extends CharToByteSingleByte {
-
-    private final static IBM863 nioCoder = new IBM863();
-
-    public String getCharacterEncoding() {
-        return "Cp863";
-    }
-
-    public CharToByteCp863() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp864.java b/ojluni/src/main/java/sun/io/CharToByteCp864.java
deleted file mode 100755
index 08381d2..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp864.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM864;
-
-/**
- * Tables and data to convert Unicode to Cp864
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp864 extends CharToByteSingleByte {
-
-    private final static IBM864 nioCoder = new IBM864();
-
-    public String getCharacterEncoding() {
-        return "Cp864";
-    }
-
-    public CharToByteCp864() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp865.java b/ojluni/src/main/java/sun/io/CharToByteCp865.java
deleted file mode 100755
index 36da989..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp865.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM865;
-
-/**
- * Tables and data to convert Unicode to Cp865
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp865 extends CharToByteSingleByte {
-
-    private final static IBM865 nioCoder = new IBM865();
-
-    public String getCharacterEncoding() {
-        return "Cp865";
-    }
-
-    public CharToByteCp865() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp866.java b/ojluni/src/main/java/sun/io/CharToByteCp866.java
deleted file mode 100755
index 73bd8f3..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp866.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.IBM866;
-
-/**
- * Tables and data to convert Unicode to Cp866
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp866 extends CharToByteSingleByte {
-
-    private final static IBM866 nioCoder = new IBM866();
-
-    public String getCharacterEncoding() {
-        return "Cp866";
-    }
-
-    public CharToByteCp866() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp868.java b/ojluni/src/main/java/sun/io/CharToByteCp868.java
deleted file mode 100755
index af40daf..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp868.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM868;
-
-/**
- * Tables and data to convert Unicode to Cp868
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp868 extends CharToByteSingleByte {
-
-    private final static IBM868 nioCoder = new IBM868();
-
-    public String getCharacterEncoding() {
-        return "Cp868";
-    }
-
-    public CharToByteCp868() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp869.java b/ojluni/src/main/java/sun/io/CharToByteCp869.java
deleted file mode 100755
index d431953..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp869.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM869;
-
-/**
- * Tables and data to convert Unicode to Cp869
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp869 extends CharToByteSingleByte {
-
-    private final static IBM869 nioCoder = new IBM869();
-
-    public String getCharacterEncoding() {
-        return "Cp869";
-    }
-
-    public CharToByteCp869() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp870.java b/ojluni/src/main/java/sun/io/CharToByteCp870.java
deleted file mode 100755
index f7e6217..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp870.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM870;
-
-/**
- * Tables and data to convert Unicode to Cp870
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp870 extends CharToByteSingleByte {
-
-    private final static IBM870 nioCoder = new IBM870();
-
-    public String getCharacterEncoding() {
-        return "Cp870";
-    }
-
-    public CharToByteCp870() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp871.java b/ojluni/src/main/java/sun/io/CharToByteCp871.java
deleted file mode 100755
index 3b79a90..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp871.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM871;
-
-/**
- * Tables and data to convert Unicode to Cp871
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp871 extends CharToByteSingleByte {
-
-    private final static IBM871 nioCoder = new IBM871();
-
-    public String getCharacterEncoding() {
-        return "Cp871";
-    }
-
-    public CharToByteCp871() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp874.java b/ojluni/src/main/java/sun/io/CharToByteCp874.java
deleted file mode 100755
index 4b5461f..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp874.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.IBM874;
-
-/**
- * Tables and data to convert Unicode to Cp874
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp874 extends CharToByteSingleByte {
-
-    private final static IBM874 nioCoder = new IBM874();
-
-    public String getCharacterEncoding() {
-        return "Cp874";
-    }
-
-    public CharToByteCp874() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp875.java b/ojluni/src/main/java/sun/io/CharToByteCp875.java
deleted file mode 100755
index 503582d..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp875.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM875;
-
-/**
- * Tables and data to convert Unicode to Cp875
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp875 extends CharToByteSingleByte {
-
-    private final static IBM875 nioCoder = new IBM875();
-
-    public String getCharacterEncoding() {
-        return "Cp875";
-    }
-
-    public CharToByteCp875() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp918.java b/ojluni/src/main/java/sun/io/CharToByteCp918.java
deleted file mode 100755
index ce51a36..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp918.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM918;
-
-/**
- * Tables and data to convert Unicode to Cp918
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp918 extends CharToByteSingleByte {
-
-    private final static IBM918 nioCoder = new IBM918();
-
-    public String getCharacterEncoding() {
-        return "Cp918";
-    }
-
-    public CharToByteCp918() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp921.java b/ojluni/src/main/java/sun/io/CharToByteCp921.java
deleted file mode 100755
index 1589592..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp921.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM921;
-
-/**
- * Tables and data to convert Unicode to Cp921
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp921 extends CharToByteSingleByte {
-
-    private final static IBM921 nioCoder = new IBM921();
-
-    public String getCharacterEncoding() {
-        return "Cp921";
-    }
-
-    public CharToByteCp921() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp922.java b/ojluni/src/main/java/sun/io/CharToByteCp922.java
deleted file mode 100755
index 222d67d..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp922.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.IBM922;
-
-/**
- * Tables and data to convert Unicode to Cp922
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteCp922 extends CharToByteSingleByte {
-
-    private final static IBM922 nioCoder = new IBM922();
-
-    public String getCharacterEncoding() {
-        return "Cp922";
-    }
-
-    public CharToByteCp922() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp930.java b/ojluni/src/main/java/sun/io/CharToByteCp930.java
deleted file mode 100755
index 9e5132b..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp930.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteCp930 extends CharToByteDBCS_EBCDIC {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp930";
-    }
-
-    public CharToByteCp930() {
-        super((DoubleByte.Encoder)new IBM930().newEncoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp933.java b/ojluni/src/main/java/sun/io/CharToByteCp933.java
deleted file mode 100755
index 2146278..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp933.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteCp933 extends CharToByteDBCS_EBCDIC {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp933";
-    }
-
-    public CharToByteCp933() {
-        super((DoubleByte.Encoder)new IBM933().newEncoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp935.java b/ojluni/src/main/java/sun/io/CharToByteCp935.java
deleted file mode 100755
index e72126f..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp935.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteCp935 extends CharToByteDBCS_EBCDIC {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp935";
-    }
-
-    public CharToByteCp935() {
-        super((DoubleByte.Encoder)new IBM935().newEncoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp937.java b/ojluni/src/main/java/sun/io/CharToByteCp937.java
deleted file mode 100755
index c698cd4..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp937.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteCp937 extends CharToByteDBCS_EBCDIC {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp937";
-    }
-
-    public CharToByteCp937() {
-        super((DoubleByte.Encoder)new IBM937().newEncoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp939.java b/ojluni/src/main/java/sun/io/CharToByteCp939.java
deleted file mode 100755
index c9d7c00..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp939.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteCp939 extends CharToByteDBCS_EBCDIC {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp939";
-    }
-
-    public CharToByteCp939() {
-        super((DoubleByte.Encoder)new IBM939().newEncoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp942.java b/ojluni/src/main/java/sun/io/CharToByteCp942.java
deleted file mode 100755
index 7abd3e1..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp942.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteCp942  extends CharToByteDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp942";
-    }
-
-    public CharToByteCp942() {
-        super((DoubleByte.Encoder)new IBM942().newEncoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp942C.java b/ojluni/src/main/java/sun/io/CharToByteCp942C.java
deleted file mode 100755
index 55778c1..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp942C.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteCp942C extends CharToByteDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp942C";
-    }
-
-    public CharToByteCp942C() {
-        super((DoubleByte.Encoder)new IBM942C().newEncoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp943.java b/ojluni/src/main/java/sun/io/CharToByteCp943.java
deleted file mode 100755
index 794a3f5..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp943.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteCp943 extends CharToByteDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp943";
-    }
-
-    public CharToByteCp943() {
-        super((DoubleByte.Encoder)new IBM943().newEncoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp943C.java b/ojluni/src/main/java/sun/io/CharToByteCp943C.java
deleted file mode 100755
index c43ee4e..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp943C.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteCp943C extends CharToByteDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp943C";
-    }
-
-    public CharToByteCp943C() {
-        super((DoubleByte.Encoder)new IBM943C().newEncoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp948.java b/ojluni/src/main/java/sun/io/CharToByteCp948.java
deleted file mode 100755
index 3f74a10..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp948.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteCp948 extends CharToByteDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp948";
-    }
-
-    public CharToByteCp948() {
-        super((DoubleByte.Encoder)new IBM948().newEncoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp949.java b/ojluni/src/main/java/sun/io/CharToByteCp949.java
deleted file mode 100755
index 573dae9..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp949.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteCp949 extends CharToByteDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp949";
-    }
-
-    public CharToByteCp949() {
-        super((DoubleByte.Encoder)new IBM949().newEncoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp949C.java b/ojluni/src/main/java/sun/io/CharToByteCp949C.java
deleted file mode 100755
index e72b679..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp949C.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteCp949C extends CharToByteDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp949C";
-    }
-
-    public CharToByteCp949C() {
-        super((DoubleByte.Encoder)new IBM949C().newEncoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp950.java b/ojluni/src/main/java/sun/io/CharToByteCp950.java
deleted file mode 100755
index ac58ebf..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp950.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteCp950 extends CharToByteDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp950";
-    }
-
-    public CharToByteCp950() {
-        super((DoubleByte.Encoder)new IBM950().newEncoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp964.java b/ojluni/src/main/java/sun/io/CharToByteCp964.java
deleted file mode 100755
index 4a09cd0..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp964.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.IBM964;
-
-/**
-* Tables and data to convert Unicode to Cp964
-*
-* @author Malcolm Ayres, assisted by UniMap program
-*/
-public class CharToByteCp964
-        extends CharToByteEUC
-
-{
-        private final static IBM964 nioCoder = new IBM964();
-
-        // Return the character set id
-        public String getCharacterEncoding()
-        {
-                return "Cp964";
-        }
-
-        public int getMaxBytesPerChar() {
-                return 4;
-        }
-
-        public CharToByteCp964()
-        {
-                super();
-                super.mask1 = 0xFFC0;
-                super.mask2 = 0x003F;
-                super.shift = 6;
-                super.index1 = nioCoder.getEncoderIndex1();
-                super.index2 = nioCoder.getEncoderIndex2();
-                super.index2a = nioCoder.getEncoderIndex2a();
-                super.index2b = nioCoder.getEncoderIndex2b();
-                super.index2c = nioCoder.getEncoderIndex2c();
-        }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteCp970.java b/ojluni/src/main/java/sun/io/CharToByteCp970.java
deleted file mode 100755
index 4041ca7..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteCp970.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-// EUC_Simple is the same as DBCS_ASCII
-public class CharToByteCp970 extends CharToByteDBCS_ASCII {
-
-    // Return the character set id
-    public String getCharacterEncoding() {
-        return "Cp970";
-    }
-
-    public CharToByteCp970() {
-        super((DoubleByte.Encoder)new IBM970().newEncoder());
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteDBCS_ASCII.java b/ojluni/src/main/java/sun/io/CharToByteDBCS_ASCII.java
deleted file mode 100755
index ca261fc..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteDBCS_ASCII.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (c) 1997, 2010, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.DoubleByte;
-import static sun.nio.cs.CharsetMapping.*;
-
-public abstract class CharToByteDBCS_ASCII extends CharToByteConverter
-{
-
-    private char highHalfZoneCode;
-    private byte[] outputByte = new byte[2];
-
-    private DoubleByte.Encoder enc;
-
-    public CharToByteDBCS_ASCII(DoubleByte.Encoder enc) {
-        super();
-        this.enc = enc;
-    }
-
-    int encodeChar(char c) {
-        return enc.encodeChar(c);
-    }
-
-    /**
-      * flush out any residual data and reset the buffer state
-      */
-    public int flush(byte [] output, int outStart, int outEnd)
-        throws MalformedInputException, ConversionBufferFullException
-    {
-
-       if (highHalfZoneCode != 0) {
-          reset();
-          badInputLength = 0;
-          throw new MalformedInputException();
-       }
-
-       reset();
-       return 0;
-    }
-
-    /**
-     * Character conversion
-     */
-    public int convert(char[] input, int inOff, int inEnd,
-                       byte[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-        char    inputChar;
-        int     inputSize;
-
-        byteOff = outOff;
-        charOff = inOff;
-
-        while(charOff < inEnd) {
-            int   index;
-            int   theBytes;
-            int   spaceNeeded;
-
-            if (highHalfZoneCode == 0) {
-                inputChar = input[charOff];
-                inputSize = 1;
-            } else {
-                inputChar = highHalfZoneCode;
-                inputSize = 0;
-                highHalfZoneCode = 0;
-            }
-
-            // Is this a high surrogate?
-            if (Character.isHighSurrogate(inputChar)) {
-                // Is this the last character of the input?
-                if (charOff + inputSize >= inEnd) {
-                    highHalfZoneCode = inputChar;
-                    charOff += inputSize;
-                    break;
-                }
-
-                // Is there a low surrogate following?
-                inputChar = input[charOff + inputSize];
-                if (Character.isLowSurrogate(inputChar)) {
-                    // We have a valid surrogate pair.  Too bad we don't do
-                    // surrogates.  Is substitution enabled?
-                    if (subMode) {
-                        if (subBytes.length == 1) {
-                            outputByte[0] = 0x00;
-                            outputByte[1] = subBytes[0];
-                        }
-                        else {
-                            outputByte[0] = subBytes[0];
-                            outputByte[1] = subBytes[1];
-                        }
-                        inputSize++;
-                    } else {
-                        badInputLength = 2;
-                        throw new UnknownCharacterException();
-                    }
-                 } else {
-                     // We have a malformed surrogate pair
-                     badInputLength = 1;
-                     throw new MalformedInputException();
-                 }
-            }
-            // Is this an unaccompanied low surrogate?
-            else if (Character.isLowSurrogate(inputChar)) {
-                badInputLength = 1;
-                throw new MalformedInputException();
-            } else {
-
-                // We have a valid character, get the bytes for it
-                theBytes = encodeChar(inputChar);
-                if (theBytes == UNMAPPABLE_ENCODING) {
-                    // if there was no mapping - look for substitution characters
-                    if (subMode) {
-                        if (subBytes.length == 1) {
-                            outputByte[0] = 0x00;
-                            outputByte[1] = subBytes[0];
-                        } else {
-                            outputByte[0] = subBytes[0];
-                            outputByte[1] = subBytes[1];
-                        }
-                    } else {
-                        badInputLength = 1;
-                        throw new UnknownCharacterException();
-                    }
-                } else {
-                    outputByte[0] = (byte)(theBytes >>8);
-                    outputByte[1] = (byte)theBytes;
-                }
-            }
-            if (outputByte[0] == 0x00)
-                spaceNeeded = 1;
-            else
-                spaceNeeded = 2;
-
-            if (byteOff + spaceNeeded > outEnd)
-                throw new ConversionBufferFullException();
-
-            if (spaceNeeded == 1)
-                output[byteOff++] = outputByte[1];
-            else {
-                output[byteOff++] = outputByte[0];
-                output[byteOff++] = outputByte[1];
-            }
-
-            charOff += inputSize;
-        }
-        return byteOff - outOff;
-    }
-
-    /**
-     * Resets converter to its initial state.
-     */
-    public void reset() {
-       charOff = byteOff = 0;
-       highHalfZoneCode = 0;
-    }
-
-    /**
-     * Returns the maximum number of bytes needed to convert a char.
-     */
-    public int getMaxBytesPerChar() {
-        return 2;
-    }
-
-    /**
-     * Returns true if the given character can be converted to the
-     * target character encoding.
-     */
-    public boolean canConvert(char c) {
-        return encodeChar(c) != UNMAPPABLE_ENCODING;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteDBCS_EBCDIC.java b/ojluni/src/main/java/sun/io/CharToByteDBCS_EBCDIC.java
deleted file mode 100755
index 8a7a1fd..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteDBCS_EBCDIC.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Copyright (c) 1997, 2010, 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.
- */
-package sun.io;
-
-import sun.nio.cs.ext.DoubleByte;
-import static sun.nio.cs.CharsetMapping.*;
-
-public abstract class CharToByteDBCS_EBCDIC extends CharToByteConverter
-{
-    private static final int SBCS = 0;
-    private static final int DBCS = 1;
-
-    private static final byte SO = 0x0e;
-    private static final byte SI = 0x0f;
-
-    private int  currentState;
-    private char highHalfZoneCode;
-    private byte[] outputByte = new byte[2];
-
-    private DoubleByte.Encoder enc;
-
-    public CharToByteDBCS_EBCDIC(DoubleByte.Encoder enc) {
-        super();
-        highHalfZoneCode = 0;
-        currentState = SBCS;
-        this.enc = enc;
-    }
-
-    int encodeChar(char c) {
-        return enc.encodeChar(c);
-    }
-
-    /**
-      * flush out any residual data and reset the buffer state
-      */
-    public int flush(byte [] output, int outStart, int outEnd)
-        throws MalformedInputException, ConversionBufferFullException
-    {
-        int bytesOut = 0;
-
-        if (highHalfZoneCode != 0) {
-            reset();
-            badInputLength = 0;
-            throw new MalformedInputException();
-        }
-
-        if (currentState == DBCS) {
-          if (outStart >= outEnd)
-            throw new ConversionBufferFullException();
-          output[outStart] = SI;
-          bytesOut++;
-        }
-
-        reset();
-        return bytesOut;
-    }
-
-    /**
-     * Character conversion
-     */
-    public int convert(char[] input, int inOff, int inEnd,
-                       byte[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-        char    inputChar;
-        int     inputSize;
-
-        byteOff = outOff;
-        charOff = inOff;
-
-        while(charOff < inEnd) {
-
-           int   index;
-           int   theBytes;
-           int   spaceNeeded;
-
-           if (highHalfZoneCode == 0) {
-              inputChar = input[charOff];
-              inputSize = 1;
-           } else {
-              inputChar = highHalfZoneCode;
-              inputSize = 0;
-              highHalfZoneCode = 0;
-           }
-
-           // Is this a high surrogate?
-           if (Character.isHighSurrogate(inputChar)) {
-              // Is this the last character of the input?
-              if (charOff + inputSize >= inEnd) {
-                 highHalfZoneCode = inputChar;
-                 charOff += inputSize;
-                 break;
-              }
-
-              // Is there a low surrogate following?
-              inputChar = input[charOff + inputSize];
-              if (Character.isLowSurrogate(inputChar)) {
-                 // We have a valid surrogate pair.  Too bad we don't do
-                 // surrogates.  Is substitution enabled?
-                 if (subMode) {
-                    if (subBytes.length == 1) {
-                       outputByte[0] = 0x00;
-                       outputByte[1] = subBytes[0];
-                    }
-                    else {
-                       outputByte[0] = subBytes[0];
-                       outputByte[1] = subBytes[1];
-                    }
-                    inputSize++;
-                 } else {
-                    badInputLength = 2;
-                    throw new UnknownCharacterException();
-                 }
-              } else {
-                 // We have a malformed surrogate pair
-                 badInputLength = 1;
-                 throw new MalformedInputException();
-              }
-           }
-           // Is this an unaccompanied low surrogate?
-           else if (Character.isLowSurrogate(inputChar)) {
-               badInputLength = 1;
-               throw new MalformedInputException();
-           } else {
-
-               // We have a valid character, get the bytes for it
-               theBytes = encodeChar(inputChar);
-               if (theBytes == UNMAPPABLE_ENCODING) {
-                   // if there was no mapping - look for substitution characters
-                   if (subMode) {
-                       if (subBytes.length == 1) {
-                           outputByte[0] = 0x00;
-                           outputByte[1] = subBytes[0];
-                       } else {
-                           outputByte[0] = subBytes[0];
-                           outputByte[1] = subBytes[1];
-                       }
-                   } else {
-                       badInputLength = 1;
-                       throw new UnknownCharacterException();
-                   }
-               } else {
-                   outputByte[0] = (byte)((theBytes & 0x0000ff00)>>8);
-                   outputByte[1] = (byte)(theBytes & 0x000000ff);
-               }
-           }
-
-           //Set the output buffer into the correct state
-
-           if (currentState == DBCS && outputByte[0] == 0x00) {
-              if (byteOff >= outEnd)
-                 throw new ConversionBufferFullException();
-              currentState = SBCS;
-              output[byteOff++] = SI;
-           } else
-              if (currentState == SBCS && outputByte[0] != 0x00) {
-                 if (byteOff >= outEnd) {
-                    throw new ConversionBufferFullException();
-                 }
-                 currentState = DBCS;
-                 output[byteOff++] = SO;
-              }
-
-           if (currentState == DBCS)
-              spaceNeeded = 2;
-           else
-              spaceNeeded = 1;
-
-           if (byteOff + spaceNeeded > outEnd) {
-              throw new ConversionBufferFullException();
-           }
-
-           if (currentState == SBCS)
-              output[byteOff++] = outputByte[1];
-           else {
-              output[byteOff++] = outputByte[0];
-              output[byteOff++] = outputByte[1];
-           }
-
-           charOff += inputSize;
-        }
-        return byteOff - outOff;
-    }
-
-
-
-    /**
-     * Resets converter to its initial state.
-     */
-    public void reset() {
-       charOff = byteOff = 0;
-       highHalfZoneCode = 0;
-       currentState = SBCS;
-    }
-
-
-    /**
-     * Returns the maximum number of bytes needed to convert a char.
-     */
-    public int getMaxBytesPerChar() {
-       return 4;    //Fixed with bug 4199599 so tests would pass.
-    }
-
-
-    /**
-     * Sets the substitution bytes to use when the converter is in
-     * substitution mode.  The given bytes should represent a valid
-     * character in the target character encoding.
-     */
-
-    public void setSubstitutionBytes( byte[] newSubBytes )
-       throws IllegalArgumentException
-    {
-       if( newSubBytes.length > 2 || newSubBytes.length == 0) {
-           throw new IllegalArgumentException();
-       }
-
-       subBytes = new byte[ newSubBytes.length ];
-       System.arraycopy( newSubBytes, 0, subBytes, 0, newSubBytes.length );
-
-    }
-
-    /**
-     * Returns true if the given character can be converted to the
-     * target character encoding.
-     */
-    public boolean canConvert(char c) {
-        return encodeChar(c) != UNMAPPABLE_ENCODING;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteDoubleByte.java b/ojluni/src/main/java/sun/io/CharToByteDoubleByte.java
deleted file mode 100755
index d39fde7..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteDoubleByte.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (c) 1997, 2002, 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.
- */
-
-package sun.io;
-
-/**
- * @author Limin Shi
- */
-
-public abstract class CharToByteDoubleByte extends CharToByteConverter {
-
-    /*
-     * 1st level index, provided by subclass
-     */
-    protected short index1[];
-
-    /*
-     * 2nd level index, provided by subclass
-     */
-    protected String  index2[];
-
-    protected char highHalfZoneCode;
-
-    public short[] getIndex1() {
-        return index1;
-    }
-
-    public String[] getIndex2() {
-        return index2;
-    }
-
-    public int flush(byte[] output, int outStart, int outEnd)
-        throws MalformedInputException, ConversionBufferFullException
-    {
-        if (highHalfZoneCode != 0) {
-            highHalfZoneCode = 0;
-            badInputLength = 0;
-            throw new MalformedInputException();
-        }
-        byteOff = charOff = 0;
-        return 0;
-    }
-
-    /**
-     * Converts characters to sequences of bytes.
-     * Conversions that result in Exceptions can be restarted by calling
-     * convert again, with appropriately modified parameters.
-     * @return the characters written to output.
-     * @param input char array containing text in Unicode
-     * @param inStart offset in input array
-     * @param inEnd offset of last byte to be converted
-     * @param output byte array to receive conversion result
-     * @param outStart starting offset
-     * @param outEnd offset of last byte to be written to
-     * @throw UnsupportedCharacterException for any character
-     * that cannot be converted to the external character set.
-     */
-    public int convert(char[] input, int inOff, int inEnd,
-                       byte[] output, int outOff, int outEnd)
-        throws MalformedInputException, UnknownCharacterException,
-               ConversionBufferFullException
-    {
-        char    inputChar;                 // Input character to be converted
-        byte[]  outputByte;                // Output byte written to output
-        int     inputSize = 0;             // Size of input
-        int     outputSize = 0;            // Size of output
-        byte[]  tmpbuf = new byte[2];
-
-        // Record beginning offsets
-        charOff = inOff;
-        byteOff = outOff;
-
-        if (highHalfZoneCode != 0) {
-            inputChar = highHalfZoneCode;
-            highHalfZoneCode = 0;
-            if (input[inOff] >= 0xdc00 && input[inOff] <= 0xdfff) {
-                // This is legal UTF16 sequence.
-                badInputLength = 1;
-                throw new UnknownCharacterException();
-            } else {
-                // This is illegal UTF16 sequence.
-                badInputLength = 0;
-                throw new MalformedInputException();
-            }
-        }
-
-        // Loop until we hit the end of the input
-        while(charOff < inEnd) {
-            inputSize = 1;
-            outputByte = tmpbuf;
-            inputChar = input[charOff]; // Get the input character
-
-            // Is this a high surrogate?
-            if(inputChar >= '\uD800' && inputChar <= '\uDBFF') {
-                // Is this the last character of the input?
-                if (charOff + 1 >= inEnd) {
-                    highHalfZoneCode = inputChar;
-                    break;
-                }
-
-                // Is there a low surrogate following?
-                inputChar = input[charOff + 1];
-                if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                    // We have a valid surrogate pair.  Too bad we don't do
-                    // surrogates.  Is substitution enabled?
-                    if (subMode) {
-                        outputByte = subBytes;
-                        outputSize = subBytes.length;
-                        inputSize = 2;
-                    } else {
-                        badInputLength = 2;
-                        throw new UnknownCharacterException();
-                    }
-                } else {
-                    // We have a malformed surrogate pair
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-            }
-            // Is this an unaccompanied low surrogate?
-            else if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                badInputLength = 1;
-                throw new MalformedInputException();
-            } else {
-                outputSize = convSingleByte(inputChar, outputByte);
-                if (outputSize == 0) { // DoubleByte
-                    int ncode = getNative(inputChar);
-                    if (ncode != 0 ) {
-                        outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
-                        outputByte[1] = (byte) (ncode & 0xff);
-                        outputSize = 2;
-                    } else {
-                        if (subMode) {
-                            outputByte = subBytes;
-                            outputSize = subBytes.length;
-                        } else {
-                            badInputLength = 1;
-                            throw new UnknownCharacterException();
-                        }
-                    }
-                }
-            }
-
-            // If we don't have room for the output, throw an exception
-            if (byteOff + outputSize > outEnd)
-                throw new ConversionBufferFullException();
-
-            // Put the byte in the output buffer
-            for (int i = 0; i < outputSize; i++) {
-                output[byteOff++] = outputByte[i];
-            }
-            charOff += inputSize;
-        }
-        // Return the length written to the output buffer
-        return byteOff - outOff;
-    }
-
-
-    /**
-     * the maximum number of bytes needed to hold a converted char
-     * @returns the maximum number of bytes needed for a converted char
-     */
-    public int getMaxBytesPerChar() {
-        return 2;
-    }
-
-    /**
-     *  Resets the converter.
-     * Call this method to reset the converter to its initial state
-     */
-    public void reset() {
-        byteOff = charOff = 0;
-        highHalfZoneCode = 0;
-    }
-
-    /**
-     * Return whether a character is mappable or not
-     * @return true if a character is mappable
-     */
-    public boolean canConvert(char ch) {
-        byte[] outByte = new byte[2];
-
-        if ((ch == (char) 0) || (convSingleByte(ch, outByte) != 0))
-            return true;
-        if (this.getNative(ch) != 0)
-            return true;
-        return false;
-    }
-
-
-    /*
-     * Can be changed by subclass
-     */
-    protected int convSingleByte(char inputChar, byte[] outputByte) {
-        if (inputChar < 0x80) {
-            outputByte[0] = (byte)(inputChar & 0x7f);
-            return 1;
-        }
-        return 0;
-    }
-
-    /*
-     * Can be changed by subclass
-     */
-    protected int getNative(char ch) {
-        int offset = index1[((ch & 0xff00) >> 8 )] << 8;
-        return index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteEUC.java b/ojluni/src/main/java/sun/io/CharToByteEUC.java
deleted file mode 100755
index dd02692..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteEUC.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-package sun.io;
-
-public abstract class CharToByteEUC extends CharToByteConverter
-{
-
-    private char highHalfZoneCode;
-    private byte[] outputByte;
-
-    protected short  index1[];
-    protected String index2;
-    protected String index2a;
-    protected String index2b;
-    protected String index2c;
-    protected int    mask1;
-    protected int    mask2;
-    protected int    shift;
-
-    private byte[] workByte = new byte[4];
-
-    /**
-      * flush out any residual data and reset the buffer state
-      */
-    public int flush(byte [] output, int outStart, int outEnd)
-        throws MalformedInputException, ConversionBufferFullException
-    {
-
-       if (highHalfZoneCode != 0) {
-          reset();
-          badInputLength = 0;
-          throw new MalformedInputException();
-       }
-
-       reset();
-       return 0;
-    }
-
-    /**
-     * Character conversion
-     */
-    public int convert(char[] input, int inOff, int inEnd,
-                       byte[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-        char    inputChar;
-        int     inputSize;
-
-        byteOff = outOff;
-        charOff = inOff;
-
-        while(charOff < inEnd) {
-
-           outputByte = workByte;
-
-           int     index;
-           int     theBytes;
-           int     spaceNeeded;
-           boolean allZeroes = true;
-           int     i;
-
-
-           if (highHalfZoneCode == 0) {
-              inputChar = input[charOff];
-              inputSize = 1;
-           } else {
-              inputChar = highHalfZoneCode;
-              inputSize = 0;
-              highHalfZoneCode = 0;
-           }
-
-
-           // Is this a high surrogate?
-           if(inputChar >= '\ud800' && inputChar <= '\udbff') {
-              // Is this the last character of the input?
-              if (charOff + inputSize >= inEnd) {
-                 highHalfZoneCode = inputChar;
-                 charOff += inputSize;
-                 break;
-              }
-
-              // Is there a low surrogate following?
-              inputChar = input[charOff + inputSize];
-              if (inputChar >= '\udc00' && inputChar <= '\udfff') {
-
-                 // We have a valid surrogate pair.  Too bad we don't do
-                 // surrogates.  Is substitution enabled?
-                 if (subMode) {
-                    outputByte = subBytes;
-                    inputSize++;
-                 } else {
-                    badInputLength = 2;
-                    throw new UnknownCharacterException();
-                 }
-              } else {
-
-                 // We have a malformed surrogate pair
-                 badInputLength = 1;
-                 throw new MalformedInputException();
-              }
-           }
-
-           // Is this an unaccompanied low surrogate?
-           else
-              if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                 badInputLength = 1;
-                 throw new MalformedInputException();
-              } else {
-
-                 String theChars;
-                 char   aChar;
-
-                 // We have a valid character, get the bytes for it
-                 index = index1[((inputChar & mask1) >> shift)] + (inputChar & mask2);
-
-                 if (index < 7500)
-                   theChars = index2;
-                 else
-                   if (index < 15000) {
-                     index = index - 7500;
-                     theChars = index2a;
-                   }
-                   else
-                     if (index < 22500){
-                       index = index - 15000;
-                       theChars = index2b;
-                     }
-                     else {
-                       index = index - 22500;
-                       theChars = index2c;
-                     }
-
-                 aChar = theChars.charAt(2*index);
-                 outputByte[0] = (byte)((aChar & 0xff00)>>8);
-                 outputByte[1] = (byte)(aChar & 0x00ff);
-                 aChar = theChars.charAt(2*index + 1);
-                 outputByte[2] = (byte)((aChar & 0xff00)>>8);
-                 outputByte[3] = (byte)(aChar & 0x00ff);
-              }
-
-           // if there was no mapping - look for substitution characters
-
-           for (i = 0; i < outputByte.length; i++) {
-             if (outputByte[i] != 0x00) {
-               allZeroes = false;
-               break;
-             }
-           }
-
-           if (allZeroes && inputChar != '\u0000')
-           {
-              if (subMode) {
-                 outputByte = subBytes;
-              } else {
-                badInputLength = 1;
-                throw new UnknownCharacterException();
-              }
-           }
-
-           int oindex = 0;
-           for (spaceNeeded = outputByte.length; spaceNeeded > 1; spaceNeeded--){
-             if (outputByte[oindex++] != 0x00 )
-               break;
-           }
-
-           if (byteOff + spaceNeeded > outEnd)
-              throw new ConversionBufferFullException();
-
-
-           for (i = outputByte.length - spaceNeeded; i < outputByte.length; i++) {
-              output[byteOff++] = outputByte[i];
-           }
-
-           charOff += inputSize;
-        }
-
-        return byteOff - outOff;
-    }
-
-    /**
-     * Resets converter to its initial state.
-     */
-    public void reset() {
-       charOff = byteOff = 0;
-       highHalfZoneCode = 0;
-    }
-
-    /**
-     * Returns the maximum number of bytes needed to convert a char.
-     */
-    public int getMaxBytesPerChar() {
-        return 2;
-    }
-
-
-    /**
-     * Returns true if the given character can be converted to the
-     * target character encoding.
-     */
-    public boolean canConvert(char ch) {
-       int    index;
-       String theChars;
-
-       index = index1[((ch & mask1) >> shift)] + (ch & mask2);
-
-       if (index < 7500)
-         theChars = index2;
-       else
-         if (index < 15000) {
-           index = index - 7500;
-           theChars = index2a;
-         }
-         else
-           if (index < 22500){
-             index = index - 15000;
-             theChars = index2b;
-           }
-           else {
-             index = index - 22500;
-             theChars = index2c;
-           }
-
-       if (theChars.charAt(2*index) != '\u0000' ||
-                    theChars.charAt(2*index + 1) != '\u0000')
-         return (true);
-
-       // only return true if input char was unicode null - all others are
-       //     undefined
-       return( ch == '\u0000');
-
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteEUC_CN.java b/ojluni/src/main/java/sun/io/CharToByteEUC_CN.java
deleted file mode 100755
index aa286b0..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteEUC_CN.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteEUC_CN extends CharToByteDBCS_ASCII {
-
-    private static DoubleByte.Encoder enc =
-        (DoubleByte.Encoder)new EUC_CN().newEncoder();
-
-    public String getCharacterEncoding() {
-        return "EUC_CN";
-    }
-
-    public CharToByteEUC_CN() {
-        super(enc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteEUC_JP.java b/ojluni/src/main/java/sun/io/CharToByteEUC_JP.java
deleted file mode 100755
index 797c9e7..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteEUC_JP.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-package sun.io;
-
-/**
- * @author Limin Shi
- */
-
-public class CharToByteEUC_JP extends CharToByteJIS0208 {
-    CharToByteJIS0201 cbJIS0201 = new CharToByteJIS0201();
-    CharToByteJIS0212 cbJIS0212 = new CharToByteJIS0212();
-
-    public String getCharacterEncoding() {
-        return "EUC_JP";
-    }
-
-    protected int convSingleByte(char inputChar, byte[] outputByte) {
-        byte b;
-
-        if (inputChar == 0) {
-            outputByte[0] = (byte)0;
-            return 1;
-        }
-
-        if ((b = cbJIS0201.getNative(inputChar)) == 0)
-            return 0;
-
-        if (b > 0 && b < 128) {
-            outputByte[0] = b;
-            return 1;
-        }
-        outputByte[0] = (byte)0x8E;
-        outputByte[1] = b;
-        return 2;
-    }
-
-    protected int getNative(char ch) {
-        int offset = index1[((ch & 0xff00) >> 8 )] << 8;
-        int r = index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
-        if (r != 0)
-            return r + 0x8080;
-        r = cbJIS0212.getNative(ch);
-        if (r == 0)
-            return r;
-        return r + 0x8F8080;
-    }
-
-
-    /**
-     * Converts characters to sequences of bytes.
-     * Conversions that result in Exceptions can be restarted by calling
-     * convert again, with appropriately modified parameters.
-     * @return the characters written to output.
-     * @param input char array containing text in Unicode
-     * @param inStart offset in input array
-     * @param inEnd offset of last byte to be converted
-     * @param output byte array to receive conversion result
-     * @param outStart starting offset
-     * @param outEnd offset of last byte to be written to
-     * @throw UnsupportedCharacterException for any character
-     * that cannot be converted to the external character set.
-     */
-    public int convert(char[] input, int inOff, int inEnd,
-                       byte[] output, int outOff, int outEnd)
-        throws MalformedInputException, UnknownCharacterException,
-               ConversionBufferFullException
-    {
-        char    inputChar;                 // Input character to be converted
-        byte[]  outputByte;                // Output byte written to output
-        int     inputSize = 0;             // Size of input
-        int     outputSize = 0;            // Size of output
-        byte[]  tmpbuf = new byte[4];
-
-        // Record beginning offsets
-        charOff = inOff;
-        byteOff = outOff;
-
-        if (highHalfZoneCode != 0) {
-            inputChar = highHalfZoneCode;
-            highHalfZoneCode = 0;
-            if (input[inOff] >= 0xdc00 && input[inOff] <= 0xdfff) {
-                // This is legal UTF16 sequence.
-                badInputLength = 1;
-                throw new UnknownCharacterException();
-            } else {
-                // This is illegal UTF16 sequence.
-                badInputLength = 0;
-                throw new MalformedInputException();
-            }
-        }
-
-        // Loop until we hit the end of the input
-        while(charOff < inEnd) {
-            inputSize = 1;
-            outputByte = tmpbuf;
-            inputChar = input[charOff]; // Get the input character
-
-            // Is this a high surrogate?
-            if(inputChar >= '\uD800' && inputChar <= '\uDBFF') {
-                // Is this the last character of the input?
-                if (charOff + 1 >= inEnd) {
-                    highHalfZoneCode = inputChar;
-                    break;
-                }
-
-                // Is there a low surrogate following?
-                inputChar = input[charOff + 1];
-                if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                    // We have a valid surrogate pair.  Too bad we don't do
-                    // surrogates.  Is substitution enabled?
-                    if (subMode) {
-                        outputByte = subBytes;
-                        outputSize = subBytes.length;
-                        inputSize = 2;
-                    } else {
-                        badInputLength = 2;
-                        throw new UnknownCharacterException();
-                    }
-                } else {
-                    // We have a malformed surrogate pair
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-            }
-            // Is this an unaccompanied low surrogate?
-            else if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                badInputLength = 1;
-                throw new MalformedInputException();
-            } else {
-                outputSize = convSingleByte(inputChar, outputByte);
-                if (outputSize == 0) { // DoubleByte
-                    int ncode = getNative(inputChar);
-                    if (ncode != 0 ) {
-                        if ((ncode & 0xFF0000) == 0) {
-                            outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
-                            outputByte[1] = (byte) (ncode & 0xff);
-                            outputSize = 2;
-                        } else {
-                            outputByte[0] = (byte) 0x8F;
-                            outputByte[1] = (byte) ((ncode & 0xff00) >> 8);
-                            outputByte[2] = (byte) (ncode & 0xff);
-                            outputSize = 3;
-                        }
-                    } else {
-                        if (subMode) {
-                            outputByte = subBytes;
-                            outputSize = subBytes.length;
-                        } else {
-                            badInputLength = 1;
-                            throw new UnknownCharacterException();
-                        }
-                    }
-                }
-            }
-
-            // If we don't have room for the output, throw an exception
-            if (byteOff + outputSize > outEnd)
-                throw new ConversionBufferFullException();
-
-            // Put the byte in the output buffer
-            for (int i = 0; i < outputSize; i++) {
-                output[byteOff++] = outputByte[i];
-            }
-            charOff += inputSize;
-        }
-        // Return the length written to the output buffer
-        return byteOff - outOff;
-    }
-
-
-    /**
-     * the maximum number of bytes needed to hold a converted char
-     * @returns the maximum number of bytes needed for a converted char
-     */
-    public int getMaxBytesPerChar() {
-        return 3;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteEUC_JP_LINUX.java b/ojluni/src/main/java/sun/io/CharToByteEUC_JP_LINUX.java
deleted file mode 100755
index dc0c0dc..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteEUC_JP_LINUX.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package sun.io;
-
-/**
- * Class for converting characters to bytes for the EUC-JP encoding in
- * linux. This converter supports the JIS0201 and the JIS0208 encoding and
- * omits support for the JIS212 encoding.
- *
- * @author Naveen Sanjeeva
- */
-
-public class CharToByteEUC_JP_LINUX extends CharToByteJIS0208 {
-    CharToByteJIS0201 cbJIS0201 = new CharToByteJIS0201();
-
-    public String getCharacterEncoding() {
-        return "EUC_JP_LINUX";
-    }
-
-    protected int convSingleByte(char inputChar, byte[] outputByte) {
-        byte b;
-
-        if (inputChar == 0) {
-            outputByte[0] = (byte)0;
-            return 1;
-        }
-
-        if ((b = cbJIS0201.getNative(inputChar)) == 0)
-            return 0;
-
-        if (b > 0 && b < 128) {
-            outputByte[0] = b;
-            return 1;
-        }
-        outputByte[0] = (byte)0x8E;
-        outputByte[1] = b;
-        return 2;
-    }
-
-    protected int getNative(char ch) {
-        int offset = index1[((ch & 0xff00) >> 8 )] << 8;
-        int r = index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
-        if (r != 0)
-            return r + 0x8080;
-        return r;
-    }
-
-    /**
-     * Converts characters to sequences of bytes.
-     * Conversions that result in Exceptions can be restarted by calling
-     * convert again, with appropriately modified parameters.
-     * @return the characters written to output.
-     * @param input char array containing text in Unicode
-     * @param inStart offset in input array
-     * @param inEnd offset of last byte to be converted
-     * @param output byte array to receive conversion result
-     * @param outStart starting offset
-     * @param outEnd offset of last byte to be written to
-     * @throw UnsupportedCharacterException for any character
-     * that cannot be converted to the external character set.
-     */
-    public int convert(char[] input, int inOff, int inEnd,
-                       byte[] output, int outOff, int outEnd)
-        throws MalformedInputException, UnknownCharacterException,
-               ConversionBufferFullException
-    {
-        char    inputChar;                 // Input character to be converted
-        byte[]  outputByte;                // Output byte written to output
-        int     inputSize = 0;             // Size of input
-        int     outputSize = 0;            // Size of output
-        byte[]  tmpbuf = new byte[4];
-
-        // Record beginning offsets
-        charOff = inOff;
-        byteOff = outOff;
-
-        if (highHalfZoneCode != 0) {
-            inputChar = highHalfZoneCode;
-            highHalfZoneCode = 0;
-            if (input[inOff] >= 0xdc00 && input[inOff] <= 0xdfff) {
-                // This is legal UTF16 sequence.
-                badInputLength = 1;
-                throw new UnknownCharacterException();
-            } else {
-                // This is illegal UTF16 sequence.
-                badInputLength = 0;
-                throw new MalformedInputException();
-            }
-        }
-
-        // Loop until we hit the end of the input
-        while(charOff < inEnd) {
-            inputSize = 1;
-            outputByte = tmpbuf;
-            inputChar = input[charOff]; // Get the input character
-
-            // Is this a high surrogate?
-            if(inputChar >= '\uD800' && inputChar <= '\uDBFF') {
-                // Is this the last character of the input?
-                if (charOff + 1 >= inEnd) {
-                    highHalfZoneCode = inputChar;
-                    break;
-                }
-
-                // Is there a low surrogate following?
-                inputChar = input[charOff + 1];
-                if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                    // We have a valid surrogate pair.  Too bad we don't do
-                    // surrogates.  Is substitution enabled?
-                    if (subMode) {
-                        outputByte = subBytes;
-                        outputSize = subBytes.length;
-                        inputSize = 2;
-                    } else {
-                        badInputLength = 2;
-                        throw new UnknownCharacterException();
-                    }
-                } else {
-                    // We have a malformed surrogate pair
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-            }
-            // Is this an unaccompanied low surrogate?
-            else if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                badInputLength = 1;
-                throw new MalformedInputException();
-            } else {
-                outputSize = convSingleByte(inputChar, outputByte);
-                if (outputSize == 0) { // DoubleByte
-                    int ncode = getNative(inputChar);
-                    if (ncode != 0 && ((ncode & 0xFF0000) == 0)) {
-                            outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
-                            outputByte[1] = (byte) (ncode & 0xff);
-                            outputSize = 2;
-                    } else {
-                        if (subMode) {
-                            outputByte = subBytes;
-                            outputSize = subBytes.length;
-                        } else {
-                            badInputLength = 1;
-                            throw new UnknownCharacterException();
-                        }
-                    }
-                }
-            }
-
-            // If we don't have room for the output, throw an exception
-            if (byteOff + outputSize > outEnd)
-                throw new ConversionBufferFullException();
-
-            // Put the byte in the output buffer
-            for (int i = 0; i < outputSize; i++) {
-                output[byteOff++] = outputByte[i];
-            }
-            charOff += inputSize;
-        }
-        // Return the length written to the output buffer
-        return byteOff - outOff;
-    }
-
-
-    /**
-     * the maximum number of bytes needed to hold a converted char
-     * @returns the maximum number of bytes needed for a converted char
-     */
-    public int getMaxBytesPerChar() {
-        return 2;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteEUC_JP_Solaris.java b/ojluni/src/main/java/sun/io/CharToByteEUC_JP_Solaris.java
deleted file mode 100755
index 73337d5..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteEUC_JP_Solaris.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.JIS_X_0208_Solaris_Encoder;
-import sun.nio.cs.ext.JIS_X_0212_Solaris_Encoder;
-
-/**
- * @author Limin Shi
- * @author Ian Little
- *
- * EUC_JP variant converter for Solaris with vendor defined chars
- * added (4765370)
- */
-
-public class CharToByteEUC_JP_Solaris extends CharToByteEUC_JP {
-    CharToByteJIS0201 cbJIS0201 = new CharToByteJIS0201();
-    CharToByteJIS0212_Solaris cbJIS0212 = new CharToByteJIS0212_Solaris();
-
-    short[] j0208Index1 = JIS_X_0208_Solaris_Encoder.getIndex1();
-    String[] j0208Index2 = JIS_X_0208_Solaris_Encoder.getIndex2();
-
-    public String getCharacterEncoding() {
-        return "eucJP-open";
-    }
-
-    protected int convSingleByte(char inputChar, byte[] outputByte) {
-        byte b;
-
-        if (inputChar == 0) {
-            outputByte[0] = (byte)0;
-            return 1;
-        }
-
-        if ((b = cbJIS0201.getNative(inputChar)) == 0)
-            return 0;
-
-        if (b > 0 && b < 128) {
-            outputByte[0] = b;
-            return 1;
-        }
-        outputByte[0] = (byte)0x8E;
-        outputByte[1] = b;
-        return 2;
-    }
-
-    protected int getNative(char ch) {
-        int r = super.getNative(ch);
-        if (r != 0) {
-            return r;
-        } else {
-            int offset = j0208Index1[((ch & 0xff00) >> 8 )] << 8;
-            r = j0208Index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
-            if (r > 0x7500)
-                return 0x8f8080 + cbJIS0212.getNative(ch);
-        }
-        return (r == 0)? r : r + 0x8080;
-    }
-
-
-    /**
-     * Converts characters to sequences of bytes.
-     * Conversions that result in Exceptions can be restarted by calling
-     * convert again, with appropriately modified parameters.
-     * @return the characters written to output.
-     * @param input char array containing text in Unicode
-     * @param inStart offset in input array
-     * @param inEnd offset of last byte to be converted
-     * @param output byte array to receive conversion result
-     * @param outStart starting offset
-     * @param outEnd offset of last byte to be written to
-     * @throw UnsupportedCharacterException for any character
-     * that cannot be converted to the external character set.
-     */
-    public int convert(char[] input, int inOff, int inEnd,
-                       byte[] output, int outOff, int outEnd)
-        throws MalformedInputException, UnknownCharacterException,
-               ConversionBufferFullException
-    {
-        char    inputChar;                 // Input character to be converted
-        byte[]  outputByte;                // Output byte written to output
-        int     inputSize = 0;             // Size of input
-        int     outputSize = 0;            // Size of output
-        byte[]  tmpbuf = new byte[4];
-
-        // Record beginning offsets
-        charOff = inOff;
-        byteOff = outOff;
-
-        if (highHalfZoneCode != 0) {
-            inputChar = highHalfZoneCode;
-            highHalfZoneCode = 0;
-            if (input[inOff] >= 0xdc00 && input[inOff] <= 0xdfff) {
-                // This is legal UTF16 sequence.
-                badInputLength = 1;
-                throw new UnknownCharacterException();
-            } else {
-                // This is illegal UTF16 sequence.
-                badInputLength = 0;
-                throw new MalformedInputException();
-            }
-        }
-
-        // Loop until we hit the end of the input
-        while(charOff < inEnd) {
-            inputSize = 1;
-            outputByte = tmpbuf;
-            inputChar = input[charOff]; // Get the input character
-
-            // Is this a high surrogate?
-            if(inputChar >= '\uD800' && inputChar <= '\uDBFF') {
-                // Is this the last character of the input?
-                if (charOff + 1 >= inEnd) {
-                    highHalfZoneCode = inputChar;
-                    break;
-                }
-
-                // Is there a low surrogate following?
-                inputChar = input[charOff + 1];
-                if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                    // We have a valid surrogate pair.  Too bad we don't do
-                    // surrogates.  Is substitution enabled?
-                    if (subMode) {
-                        outputByte = subBytes;
-                        outputSize = subBytes.length;
-                        inputSize = 2;
-                    } else {
-                        badInputLength = 2;
-                        throw new UnknownCharacterException();
-                    }
-                } else {
-                    // We have a malformed surrogate pair
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-            }
-            // Is this an unaccompanied low surrogate?
-            else if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                badInputLength = 1;
-                throw new MalformedInputException();
-            } else {
-                outputSize = convSingleByte(inputChar, outputByte);
-                if (outputSize == 0) { // DoubleByte
-                    int ncode = getNative(inputChar);
-                    if (ncode != 0 ) {
-                        if ((ncode & 0xFF0000) == 0) {
-                            outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
-                            outputByte[1] = (byte) (ncode & 0xff);
-                            outputSize = 2;
-                        } else {
-                            outputByte[0] = (byte) 0x8F;
-                            outputByte[1] = (byte) ((ncode & 0xff00) >> 8);
-                            outputByte[2] = (byte) (ncode & 0xff);
-                            outputSize = 3;
-                        }
-                    } else {
-                        if (subMode) {
-                            outputByte = subBytes;
-                            outputSize = subBytes.length;
-                        } else {
-                            badInputLength = 1;
-                            throw new UnknownCharacterException();
-                        }
-                    }
-                }
-            }
-
-            // If we don't have room for the output, throw an exception
-            if (byteOff + outputSize > outEnd)
-                throw new ConversionBufferFullException();
-
-            // Put the byte in the output buffer
-            for (int i = 0; i < outputSize; i++) {
-                output[byteOff++] = outputByte[i];
-            }
-            charOff += inputSize;
-        }
-        // Return the length written to the output buffer
-        return byteOff - outOff;
-    }
-
-
-    /**
-     * the maximum number of bytes needed to hold a converted char
-     * @returns the maximum number of bytes needed for a converted char
-     */
-    public int getMaxBytesPerChar() {
-        return 3;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteEUC_KR.java b/ojluni/src/main/java/sun/io/CharToByteEUC_KR.java
deleted file mode 100755
index 9796ebe..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteEUC_KR.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteEUC_KR extends CharToByteDBCS_ASCII {
-
-    private static DoubleByte.Encoder enc =
-        (DoubleByte.Encoder)new EUC_KR().newEncoder();
-
-    public String getCharacterEncoding() {
-        return "EUC_KR";
-    }
-
-    public CharToByteEUC_KR() {
-        super(enc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteEUC_TW.java b/ojluni/src/main/java/sun/io/CharToByteEUC_TW.java
deleted file mode 100755
index a8d46eb..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteEUC_TW.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.EUC_TW;
-
-/*
- * @author Limin Shi
- */
-
-public class CharToByteEUC_TW extends CharToByteConverter
-{
-    private final EUC_TW.Encoder enc = (EUC_TW.Encoder)(new EUC_TW().newEncoder());
-
-    public int flush(byte[] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        reset();
-        return 0;
-    }
-
-    public void reset() {
-        byteOff = charOff = 0;
-    }
-
-    public boolean canConvert(char ch){
-        return enc.canEncode(ch);
-    }
-
-    /**
-     * Character conversion
-     */
-    public int convert(char[] input, int inOff, int inEnd,
-                       byte[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-        int outputSize;
-        byte [] tmpbuf = new byte[4];;
-        byte [] outputByte;
-        byteOff = outOff;
-
-        //Fixed 4122961 by bringing the charOff++ out to this
-        // loop where it belongs, changing the loop from
-        // while(){} to for(){}.
-        for (charOff = inOff; charOff < inEnd; charOff++) {
-            outputByte = tmpbuf;
-            if ( input[charOff] < 0x80) {       // ASCII
-                outputSize = 1;
-                outputByte[0] = (byte)(input[charOff] & 0x7f);
-            } else {
-                outputSize = enc.toEUC(input[charOff], outputByte);
-            }
-
-            if (outputSize == -1) {
-                if (subMode) {
-                    outputByte = subBytes;
-                    outputSize = subBytes.length;
-                } else {
-                    badInputLength = 1;
-                    throw new UnknownCharacterException();
-                }
-            }
-
-            if (outEnd - byteOff < outputSize)
-                throw new ConversionBufferFullException();
-
-            for (int i = 0; i < outputSize; i++)
-                output[byteOff++] = outputByte[i];
-        }
-
-        return byteOff - outOff;
-
-    }
-
-    /**
-     * returns the maximum number of bytes needed to convert a char
-     */
-    public int getMaxBytesPerChar() {
-        return 4;
-    }
-
-    /**
-     * Return the character set ID
-     */
-    public String getCharacterEncoding() {
-        return "EUC_TW";
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteGB18030.java b/ojluni/src/main/java/sun/io/CharToByteGB18030.java
deleted file mode 100755
index 0dce04d..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteGB18030.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Copyright (c) 2001, 2003, 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.
- */
-
-/*
- */
-
-
-package sun.io;
-import sun.nio.cs.ext.GB18030;
-
-public class CharToByteGB18030 extends CharToByteConverter
-{
-
-    private char highHalfZoneCode;
-    boolean flushed = true;
-
-    private final static int GB18030_SINGLE_BYTE = 1;
-    private final static int GB18030_DOUBLE_BYTE = 2;
-    private final static int GB18030_FOUR_BYTE = 3;
-    private static short[] index1;
-    private static String[] index2;
-    private int currentState;
-
-    public CharToByteGB18030() {
-        GB18030 nioCoder = new GB18030();
-        currentState = GB18030_DOUBLE_BYTE;
-        subBytes = new byte[1];
-        subBytes[0] = (byte)'?';
-        index1 = nioCoder.getEncoderIndex1();
-        index2 = nioCoder.getEncoderIndex2();
-    }
-
-    public int flush(byte[] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        if (highHalfZoneCode != 0) {
-            highHalfZoneCode = 0;
-            badInputLength = 0;
-            throw new MalformedInputException();
-        }
-        reset();
-        flushed = true;
-        return 0;
-    }
-
-    public void reset() {
-        byteOff = charOff = 0;
-        currentState = GB18030_DOUBLE_BYTE;
-    }
-
-    public boolean canConvert(char c) {
-        // converts all but unpaired surrogates
-        // and illegal chars, U+FFFE & U+FFFF
-
-        if ((c >= 0xd800 && c <=0xdfff) || (c >= 0xfffe))
-            return false;
-        else
-            return true;
-    }
-
-    /**
-     * Character conversion
-     */
-    public int convert(char[] input, int inOff, int inEnd,
-                       byte[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-        int linearDiffValue = 0;
-        int hiByte = 0 , loByte = 0;  // low and high order bytes
-        char inputChar;  // Input character to be converted
-        charOff = inOff;
-        byteOff = outOff;
-        int inputSize;  // Size of the input
-        int outputSize; // Size of the output
-
-        flushed = false;
-
-        if (highHalfZoneCode != 0) {
-            if (input[inOff] >= 0xDC00 && input[inOff] <= 0xDFFF) {
-
-                // This is legal UTF16 sequence, so shunt in the high
-                // surrogate for conversion by convert() loop.
-
-                char[] newBuf = new char[inEnd - inOff + 1];
-                newBuf[0] = highHalfZoneCode;
-                System.arraycopy(input, inOff, newBuf, 1, inEnd - inOff);
-                charOff -= 1;
-                input = newBuf;
-                inOff = 0;
-                inEnd = newBuf.length;
-                highHalfZoneCode = 0;
-            } else {
-                // This is illegal UTF16 sequence.
-                badInputLength = 0;
-                throw new MalformedInputException();
-            }
-        }
-
-        // Main encode loop
-
-        while (charOff < inEnd) {
-            inputChar = input[charOff++];
-
-            if(inputChar >= '\uD800' && inputChar <= '\uDBFF') {
-                // Is this the last character of the input?
-                if (charOff + 1 > inEnd) {
-                    highHalfZoneCode = inputChar;
-                    break;
-                }
-
-                char previousChar = inputChar;
-                inputChar = input[charOff];
-
-                // Is there a low surrogate following?
-                if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                    inputSize = 2;
-                    charOff++;
-                    linearDiffValue = ( previousChar - 0xD800) * 0x400 +
-                                ( inputChar - 0xDC00) + 0x2E248;
-
-                    currentState = GB18030_FOUR_BYTE;
-                } else {
-                    // We have a malformed surrogate pair
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-            }
-            // Is this an unaccompanied low surrogate?
-            else if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                badInputLength = 1;
-                throw new MalformedInputException();
-            }
-
-            // Not part of a surrogate
-            else if (inputChar >= 0x0000 && inputChar <= 0x007F) {
-                if (byteOff >= outEnd) {
-                   throw new ConversionBufferFullException();
-                }
-                currentState = GB18030_SINGLE_BYTE;
-                output[byteOff++] = (byte) inputChar;
-            }
-            else if (inputChar <= 0xA4C6 || inputChar >= 0xE000) {
-                int outByteVal = getGB18030(index1, index2, inputChar);
-
-                if (outByteVal == 0xFFFD ) {
-                    if (subMode) {
-                        if (byteOff >= outEnd) {
-                           throw new ConversionBufferFullException();
-                        } else {
-                            output[byteOff++] = subBytes[0];
-                            continue;
-                        }
-                    } else {
-                        badInputLength = 1;
-                        throw new UnknownCharacterException();
-                    }
-                }
-
-                hiByte = (outByteVal & 0xFF00) >> 8;
-                loByte = (outByteVal & 0xFF);
-
-                linearDiffValue = (hiByte - 0x20) * 256 + loByte;
-
-                if (inputChar >= 0xE000 && inputChar < 0xF900)
-                        linearDiffValue += 0x82BD;
-                else if (inputChar >= 0xF900)
-                        linearDiffValue += 0x93A9;
-
-                if (hiByte > 0x80)
-                     currentState = GB18030_DOUBLE_BYTE;
-                else
-                     currentState = GB18030_FOUR_BYTE;
-            }
-            else if (inputChar >= 0xA4C7 && inputChar <= 0xD7FF) {
-                linearDiffValue = inputChar - 0x5543;
-                currentState = GB18030_FOUR_BYTE;
-            }
-            else {
-                badInputLength = 1;
-                throw new MalformedInputException();
-            }
-
-            if (currentState == GB18030_SINGLE_BYTE)
-                continue;
-
-            if (currentState == GB18030_DOUBLE_BYTE) {
-                if (byteOff + 2 > outEnd) {
-                    throw new ConversionBufferFullException();
-                }
-                output[byteOff++] = (byte)hiByte;
-                output[byteOff++] = (byte)loByte;
-            }
-            else { // Four Byte encoding
-                if (byteOff + 4 > outEnd) {
-                    throw new ConversionBufferFullException();
-                }
-
-                byte b1, b2, b3, b4;
-
-                b4 = (byte)((linearDiffValue % 10) + 0x30);
-                linearDiffValue /= 10;
-                b3 = (byte)((linearDiffValue % 126) + 0x81);
-                linearDiffValue /= 126;
-                b2 = (byte)((linearDiffValue % 10) + 0x30);
-                b1 = (byte)((linearDiffValue / 10) + 0x81);
-                output[byteOff++] = b1;
-                output[byteOff++] = b2;
-                output[byteOff++] = b3;
-                output[byteOff++] = b4;
-            }
-        }
-        // Return number of bytes written to the output buffer.
-        return byteOff - outOff;
-    }
-
-
-    /**
-     * returns the maximum number of bytes needed to convert a char
-     */
-    public int getMaxBytesPerChar() {
-        return 4;
-    }
-
-
-    /**
-     * Return the character set ID
-     */
-    public String getCharacterEncoding() {
-        return "GB18030";
-    }
-
-    private int getGB18030(short[] outerIndex, String[] innerIndex, char ch) {
-        int offset = outerIndex[((ch & 0xff00) >> 8 )] << 8;
-
-        return innerIndex[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteGBK.java b/ojluni/src/main/java/sun/io/CharToByteGBK.java
deleted file mode 100755
index 85beef0..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteGBK.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteGBK extends CharToByteDBCS_ASCII {
-
-    private static DoubleByte.Encoder enc =
-        (DoubleByte.Encoder)new GBK().newEncoder();
-
-    public String getCharacterEncoding() {
-        return "GBK";
-    }
-
-    public CharToByteGBK() {
-        super(enc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteISCII91.java b/ojluni/src/main/java/sun/io/CharToByteISCII91.java
deleted file mode 100755
index b500aaa..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISCII91.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.ISCII91;
-
-/*
- * Copyright (c) 1998 International Business Machines.
- * All Rights Reserved.
- *
- * Author : Sunanda Bera, C. Thirumalesh
- * Last Modified : 11,December,1998
- *
- * Purpose : Defines class CharToByteISCII91.
- *
- *
- * Revision History
- * ======== =======
- *
- * Date        By            Description
- * ----        --            -----------
- * March 29, 1999 John Raley Removed MalformedInputException; modified substitution logic
- *
- */
-
-/**
- * Converter class. Converts between ISCII91 encoding and Unicode encoding.
- * ISCII91 is the character encoding as defined in Indian Standard document
- * IS 13194:1991 ( Indian Script Code for Information Interchange ).
- *
- * @see sun.io.CharToByteConverter
- */
-
-/*
- * {jbr} I am not sure this class adheres to code converter conventions.
- * Need to investigate.
- * Might should recode as a subclass of CharToByteSingleByte.
- */
-
-public class CharToByteISCII91 extends CharToByteConverter {
-
-        private static final byte NO_CHAR = (byte)255;
-
-        //private final static ISCII91 nioCoder = new ISCII91();
-        private final static byte[] directMapTable = ISCII91.getEncoderMappingTable();
-
-        private static final char NUKTA_CHAR = '\u093c';
-        private static final char HALANT_CHAR = '\u094d';
-
-
-/**
- * @return true for Devanagari and ASCII range and for the special characters
- *              Zero Width Joiner and Zero Width Non-Joiner
- * @see sun.io.CharToByteConverter#canConvert
- *
- */
-        public boolean canConvert(char ch) {
-        //check for Devanagari range,ZWJ,ZWNJ and ASCII range.
-        return ((ch >= 0x0900 && ch <= 0x097f) || (ch == 0x200d || ch == 0x200c)
-                                || (ch >= 0x0000 && ch <= 0x007f) );
-        } //canConvert()
-/**
- * Converts both Devanagari and ASCII range of characters.
- * @see sun.io.CharToByteConverter#convert
- */
-    public int convert(char[] input, int inStart, int inEnd, byte[] output, int outStart, int outEnd) throws MalformedInputException, UnknownCharacterException, ConversionBufferFullException {
-
-        charOff = inStart;
-        byteOff = outStart;
-
-        for (;charOff < inEnd; charOff++) {
-
-            char inputChar = input[charOff];
-            int index = Integer.MIN_VALUE;
-            boolean isSurrogatePair = false;
-
-            //check if input is in ASCII RANGE
-            if (inputChar >= 0x0000 && inputChar <= 0x007f) {
-                if (byteOff >= outEnd) {
-                        throw new ConversionBufferFullException();
-                }
-                output[byteOff++] = (byte) inputChar;
-                continue;
-            }
-
-            // if inputChar == ZWJ replace it with halant
-            // if inputChar == ZWNJ replace it with Nukta
-            if (inputChar == 0x200c) {
-                inputChar = HALANT_CHAR;
-            }
-            else if (inputChar == 0x200d) {
-                inputChar = NUKTA_CHAR;
-            }
-
-            if (inputChar >= 0x0900 && inputChar <= 0x097f) {
-                index = ((int)(inputChar) - 0x0900)*2;
-            }
-
-            // If input char is a high surrogate, ensure that the following
-            // char is a low surrogate.  If not, throw a MalformedInputException.
-            // Leave index untouched so substitution or an UnknownCharacterException
-            // will result.
-            else if (inputChar >= 0xd800 && inputChar <= 0xdbff) {
-                if (charOff < inEnd-1) {
-                    char nextChar = input[charOff];
-                    if (nextChar >= 0xdc00 && nextChar <= 0xdfff) {
-                        charOff++;
-                        isSurrogatePair = true;
-                    }
-                }
-                if (!isSurrogatePair) {
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-            }
-            else if (inputChar >= 0xdc00 && inputChar <= 0xdfff) {
-                badInputLength = 1;
-                throw new MalformedInputException();
-            }
-
-            if (index == Integer.MIN_VALUE || directMapTable[index] == NO_CHAR) {
-                if (subMode) {
-                    if (byteOff + subBytes.length >= outEnd) {
-                            throw new ConversionBufferFullException();
-                    }
-                    System.arraycopy(subBytes, 0, output, byteOff, subBytes.length);
-                    byteOff += subBytes.length;
-                } else {
-                    badInputLength = isSurrogatePair? 2 : 1;
-                    throw new UnknownCharacterException();
-                }
-            }
-            else {
-                if(byteOff >= outEnd) {
-                    throw new ConversionBufferFullException();
-                }
-                output[byteOff++] = directMapTable[index++];
-                if(directMapTable[index] != NO_CHAR) {
-                    if(byteOff >= outEnd) {
-                            throw new ConversionBufferFullException();
-                    }
-                    output[byteOff++] = directMapTable[index];
-                }
-            }
-
-        } //end for
-
-        return byteOff - outStart;
-    } //end of routine convert.
-
-/**
-* @see sun.io.CharToByteConverter#flush
-*/
-        public int flush( byte[] output, int outStart, int outEnd )
-        throws MalformedInputException, ConversionBufferFullException {
-        byteOff = charOff = 0;
-        return 0;
-        }//flush()
-/**
- * @return The character encoding as a String.
- */
-        public String getCharacterEncoding() {
-        return "ISCII91";
-        }//getCharacterEncoding
-/**
- * @see sun.io.CharToByteConverter#getMaxBytesPerChar
- */
-        public int getMaxBytesPerChar() {
-        return 2;
-        }//getMaxBytesPerChar()
-/**
- * @see sun.io.CharToByteConverter#reset
- */
-        public void reset() {
-        byteOff = charOff = 0;
-        }
-} //end of class definition
diff --git a/ojluni/src/main/java/sun/io/CharToByteISO2022.java b/ojluni/src/main/java/sun/io/CharToByteISO2022.java
deleted file mode 100755
index b49690c..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISO2022.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package sun.io;
-
-/**
-* @author Tom Zhou
-*/
-
-public abstract class CharToByteISO2022 extends CharToByteConverter
-{
-    private final byte ISO_ESC = 0x1b;
-    private final byte ISO_SI = 0x0f;
-    private final byte ISO_SO = 0x0e;
-    private final byte ISO_SS2_7 = 0x4e;
-    private final byte ISO_SS3_7 = 0x4f;
-    private final byte SS2 = (byte)0x8e;
-    private final byte P2 = (byte)0xA2;
-    private final byte P3 = (byte)0xA3;
-    private final byte MSB = (byte)0x80;
-
-    protected final byte maximumDesignatorLength = 4;
-
-    protected String SODesignator,
-                     SS2Designator = null,
-                     SS3Designator = null;
-
-    protected CharToByteConverter codeConverter;
-
-    private boolean shiftout = false;
-    private boolean SODesDefined = false;
-    private boolean SS2DesDefined = false;
-    private boolean SS3DesDefined = false;
-
-    private boolean newshiftout = false;
-    private boolean newSODesDefined = false;
-    private boolean newSS2DesDefined = false;
-    private boolean newSS3DesDefined = false;
-
-    public int flush(byte[] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        reset();
-        return 0;
-    }
-
-    public void reset() {
-        shiftout = false;
-        SODesDefined = false;
-        SS2DesDefined = false;
-        SS3DesDefined = false;
-        byteOff = charOff = 0;
-    }
-
-    public boolean canConvert(char ch)
-    {
-        if (ch<0x80)
-           return true;
-        return codeConverter.canConvert(ch);
-    }
-
-    private int unicodeToNative(char unicode, byte ebyte[])
-    {
-        int     index = 0;
-        byte    tmpByte[];
-        byte    convByte[] = new byte[codeConverter.getMaxBytesPerChar()];
-        char    convChar[] = {unicode};
-        int     converted;
-
-        try{
-            converted = codeConverter.convert(convChar, 0, 1, convByte, 0,
-                                        codeConverter.getMaxBytesPerChar());
-        } catch(Exception e) {
-            return -1;
-        }
-
-        if (converted == 2) {
-            if (!SODesDefined) {
-                newSODesDefined = true;
-                ebyte[0] = ISO_ESC;
-                tmpByte = SODesignator.getBytes();
-                System.arraycopy(tmpByte,0,ebyte,1,tmpByte.length);
-                index = tmpByte.length+1;
-            }
-            if (!shiftout) {
-                newshiftout = true;
-                ebyte[index++] = ISO_SO;
-            }
-            ebyte[index++] = (byte)(convByte[0]&0x7f);
-            ebyte[index++] = (byte)(convByte[1]&0x7f);
-        } else {
-            if((convByte[0] == SS2)&&(convByte[1] == P2)) {
-                if (!SS2DesDefined) {
-                    newSS2DesDefined = true;
-                    ebyte[0] = ISO_ESC;
-                    tmpByte = SS2Designator.getBytes();
-                    System.arraycopy(tmpByte,0,ebyte,1,tmpByte.length);
-                    index = tmpByte.length+1;
-                }
-                ebyte[index++] = ISO_ESC;
-                ebyte[index++] = ISO_SS2_7;
-                ebyte[index++] = (byte)(convByte[2]&0x7f);
-                ebyte[index++] = (byte)(convByte[3]&0x7f);
-            }
-            if((convByte[0] == SS2)&&(convByte[1] == 0xA3))
-            {
-                if(!SS3DesDefined){
-                    newSS3DesDefined = true;
-                    ebyte[0] = ISO_ESC;
-                    tmpByte = SS3Designator.getBytes();
-                    System.arraycopy(tmpByte,0,ebyte,1,tmpByte.length);
-                    index = tmpByte.length+1;
-                }
-                ebyte[index++] = ISO_ESC;
-                ebyte[index++] = ISO_SS3_7;
-                ebyte[index++] = (byte)(convByte[2]&0x7f);
-                ebyte[index++] = (byte)(convByte[3]&0x7f);
-            }
-        }
-        return index;
-    }
-
-    /**
-     * Character conversion
-     */
-    public int convert(char[] input, int inOff, int inEnd,
-                       byte[] output, int outOff, int outEnd)
-        throws UnknownCharacterException, MalformedInputException,
-               ConversionBufferFullException
-    {
-        int outputSize;
-        byte [] tmpbuf = new byte[this.getMaxBytesPerChar()];
-        byte [] outputByte;
-
-        byteOff = outOff;
-
-        newshiftout = shiftout;
-        newSODesDefined = SODesDefined;
-        newSS2DesDefined = SS2DesDefined;
-        newSS3DesDefined = SS3DesDefined;
-
-        //Fixed 4122961 by bringing the charOff++ out to this
-        // loop where it belongs, changing the loop from
-        // while(){} to for(){}.
-        for (charOff = inOff; charOff < inEnd; charOff++) {
-            outputByte = tmpbuf;
-            if (input[charOff] < 0x80) {        // ASCII
-                if (shiftout){
-                    newshiftout = false;
-                    outputSize = 2;
-                    outputByte[0] = ISO_SI;
-                    outputByte[1] = (byte)(input[charOff] & 0x7f);
-                } else {
-                    outputSize = 1;
-                    outputByte[0] = (byte)(input[charOff] & 0x7f);
-                }
-                if(input[charOff] == '\n'){
-                    newSODesDefined = false;
-                    newSS2DesDefined = false;
-                    newSS3DesDefined = false;
-                }
-            } else {
-                outputSize = unicodeToNative(input[charOff], outputByte);
-            }
-
-            if (outputSize == -1) {
-                if (subMode) {
-                    if(!newSODesDefined){
-                        newSODesDefined = !newSODesDefined;
-                        outputByte[0] = ISO_SO;
-                        outputByte[1] = (byte)'?';
-                        outputSize = 2;
-                    } else {
-                        outputByte = subBytes;
-                        outputSize = subBytes.length;
-                    }
-                } else {
-                    badInputLength = 1;
-                    throw new UnknownCharacterException();
-                }
-            }
-
-            if (outEnd - byteOff < outputSize)
-                throw new ConversionBufferFullException();
-
-            for (int i = 0; i < outputSize; i++)
-                output[byteOff++] = outputByte[i];
-
-            // Bug 4266772. Update statuses only when output buffer has been
-            // updated. When ConversionBufferFullException() has been throwed
-            // we want to keep old statuses for next call.
-            shiftout = newshiftout;
-            SODesDefined = newSODesDefined;
-            SS2DesDefined = newSS2DesDefined;
-            SS3DesDefined = newSS3DesDefined;
-        }
-        return byteOff - outOff;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteISO2022CN_CNS.java b/ojluni/src/main/java/sun/io/CharToByteISO2022CN_CNS.java
deleted file mode 100755
index 0c1ef30..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISO2022CN_CNS.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package sun.io;
-
-/**
-* @author Tom Zhou
-*/
-
-public class CharToByteISO2022CN_CNS extends CharToByteISO2022
-{
-    public CharToByteISO2022CN_CNS()
-    {
-        SODesignator = "$)G";
-        SS2Designator = "$*H";
-        SS3Designator = "$+I";
-        try {
-            codeConverter = CharToByteConverter.getConverter("CNS11643");
-        } catch (Exception e) {};
-    }
-
-    /**
-     * returns the maximum number of bytes needed to convert a char
-     */
-    public int getMaxBytesPerChar()
-    {
-        return maximumDesignatorLength+4;
-    }
-
-    /**
-     * Return the character set ID
-     */
-    public String getCharacterEncoding()
-    {
-        return "ISO2022CN_CNS";
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteISO2022CN_GB.java b/ojluni/src/main/java/sun/io/CharToByteISO2022CN_GB.java
deleted file mode 100755
index 7edbc9f..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISO2022CN_GB.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package sun.io;
-
-/**
-* @author Tom Zhou
-*/
-
-public class CharToByteISO2022CN_GB extends CharToByteISO2022
-{
-    public CharToByteISO2022CN_GB()
-    {
-        SODesignator = "$)A";
-        try {
-            codeConverter = CharToByteConverter.getConverter("GB2312");
-        } catch (Exception e) {};
-    }
-
-    /**
-     * returns the maximum number of bytes needed to convert a char
-     */
-    public int getMaxBytesPerChar()
-    {
-        return maximumDesignatorLength+4;
-    }
-
-    /**
-     * Return the character set ID
-     */
-    public String getCharacterEncoding()
-    {
-        return "ISO2022CN_GB";
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteISO2022JP.java b/ojluni/src/main/java/sun/io/CharToByteISO2022JP.java
deleted file mode 100755
index 3cf4d77..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISO2022JP.java
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-package sun.io;
-import java.io.*;
-
-public class CharToByteISO2022JP extends CharToByteJIS0208 {
-
-    private static final int ASCII = 0;                 // ESC ( B
-    private static final int JISX0201_1976 = 1;         // ESC ( J
-    private static final int JISX0208_1978 = 2;         // ESC $ @
-    private static final int JISX0208_1983 = 3;         // ESC $ B
-    private static final int JISX0201_1976_KANA = 4;    // ESC ( I
-
-    private char highHalfZoneCode;
-    private boolean flushed = true;
-
-    // JIS is state full encoding, so currentMode keep the
-    // current codeset
-    private int currentMode = ASCII;
-
-    /**
-     * Bytes for substitute for unmappable input.
-     */
-    // XXX: Assumes subBytes are ASCII string. Need to change Escape sequence
-    // for other character sets.
-    protected byte[] subBytesEscape = { (byte)0x1b, (byte)0x28, (byte)0x42 }; // ESC ( B
-    protected int subBytesMode = ASCII;
-
-    public int flush(byte[] output, int outStart, int outEnd)
-        throws MalformedInputException, ConversionBufferFullException
-    {
-        if (highHalfZoneCode != 0) {
-            highHalfZoneCode = 0;
-            badInputLength = 0;
-            throw new MalformedInputException();
-        }
-
-        if (!flushed && (currentMode != ASCII)) {
-            if (outEnd - outStart < 3) {
-                throw new ConversionBufferFullException();
-            }
-            output[outStart]     = (byte)0x1b;
-            output[outStart + 1] = (byte)0x28;
-            output[outStart + 2] = (byte)0x42;
-            byteOff += 3;
-            byteOff = charOff = 0;
-            flushed = true;
-            currentMode = ASCII;
-            return 3;
-        }
-        return 0;
-    }
-
-    public int convert(char[] input, int inOff, int inEnd,
-                       byte[] output, int outOff, int outEnd)
-        throws MalformedInputException, UnknownCharacterException,
-               ConversionBufferFullException
-
-    {
-        char    inputChar;          // Input character to be converted
-        int     inputSize;          // Size of the input
-        int     outputSize;         // Size of the output
-
-        // Buffer for output bytes
-        byte[]  tmpArray = new byte[6];
-        byte[]  outputByte;
-
-        flushed = false;
-
-        // Make copies of input and output indexes
-        charOff = inOff;
-        byteOff = outOff;
-
-        if (highHalfZoneCode != 0) {
-            inputChar = highHalfZoneCode;
-            highHalfZoneCode = 0;
-            if (input[inOff] >= 0xdc00 && input[inOff] <= 0xdfff) {
-                // This is legal UTF16 sequence.
-                badInputLength = 1;
-                throw new UnknownCharacterException();
-            } else {
-                // This is illegal UTF16 sequence.
-                badInputLength = 0;
-                throw new MalformedInputException();
-            }
-        }
-
-        // Loop until we run out of input
-        while(charOff < inEnd) {
-            outputByte = tmpArray;
-            int newMode = currentMode; // Trace character mode changing
-
-            // Get the input character
-            inputChar = input[charOff];
-            inputSize = 1;
-            outputSize = 1;
-
-            // Is this a high surrogate?
-            if(inputChar >= '\uD800' && inputChar <= '\uDBFF') {
-                // Is this the last character of the input?
-                if (charOff + 1 >= inEnd) {
-                    highHalfZoneCode = inputChar;
-                    break;
-                }
-
-                // Is there a low surrogate following?
-                inputChar = input[charOff + 1];
-                if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                    // We have a valid surrogate pair.  Too bad we don't do
-                    // surrogates.  Is substitution enabled?
-                    if (subMode) {
-                        if (currentMode != subBytesMode) {
-                            System.arraycopy(subBytesEscape, 0, outputByte, 0,
-                                             subBytesEscape.length);
-                            outputSize = subBytesEscape.length;
-                            System.arraycopy(subBytes, 0, outputByte,
-                                             outputSize, subBytes.length);
-                            outputSize += subBytes.length;
-                            newMode = subBytesMode;
-                        } else {
-                            outputByte = subBytes;
-                            outputSize = subBytes.length;
-                        }
-                        inputSize = 2;
-                    } else {
-                        badInputLength = 2;
-                        throw new UnknownCharacterException();
-                    }
-                } else {
-                    // We have a malformed surrogate pair
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-            }
-
-            // Is this an unaccompanied low surrogate?
-            else if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                badInputLength = 1;
-                throw new MalformedInputException();
-            } else {
-                // Not part of a surrogate
-
-                // Does this map to the Roman range?
-                if (inputChar <= '\u007F') {
-                    if (currentMode != ASCII) {
-                        outputByte[0] = (byte)0x1b;
-                        outputByte[1] = (byte)0x28;
-                        outputByte[2] = (byte)0x42;
-                        outputByte[3] = (byte)inputChar;
-                        outputSize = 4;
-                        newMode = ASCII;
-                    } else {
-                        outputByte[0] = (byte)inputChar;
-                        outputSize = 1;
-                    }
-                }
-                // Is it a single byte kana?
-                else if (inputChar >= 0xFF61 && inputChar <= 0xFF9F) {
-                    if (currentMode != JISX0201_1976_KANA) {
-                        outputByte[0] = (byte)0x1b;
-                        outputByte[1] = (byte)0x28;
-                        outputByte[2] = (byte)0x49;
-                        outputByte[3] = (byte)(inputChar - 0xff40);
-                        outputSize = 4;
-                        newMode = JISX0201_1976_KANA;
-                    } else {
-                        outputByte[0] = (byte)(inputChar - 0xff40);
-                        outputSize = 1;
-                    }
-                }
-                // Is it a yen sign?
-                else if (inputChar == '\u00A5') {
-                    if (currentMode != JISX0201_1976) {
-                        outputByte[0] = (byte)0x1b;
-                        outputByte[1] = (byte)0x28;
-                        outputByte[2] = (byte)0x4a;
-                        outputByte[3] = (byte)0x5c;
-                        outputSize = 4;
-                        newMode = JISX0201_1976;
-                    } else {
-                        outputByte[0] = (byte)0x5C;
-                        outputSize = 1;
-                    }
-                }
-                // Is it a tilde?
-                else if (inputChar == '\u203E')
-                    {
-                        if (currentMode != JISX0201_1976) {
-                            outputByte[0] = (byte)0x1b;
-                            outputByte[1] = (byte)0x28;
-                            outputByte[2] = (byte)0x4a;
-                            outputByte[3] = (byte)0x7e;
-                            outputSize = 4;
-                            newMode = JISX0201_1976;
-                        } else {
-                            outputByte[0] = (byte)0x7e;
-                            outputSize = 1;
-                        }
-                    }
-                // Is it a JIS-X-0208 character?
-                else {
-                    int index = getNative(inputChar);
-                    if (index != 0) {
-                        if (currentMode != JISX0208_1983) {
-                            outputByte[0] = (byte)0x1b;
-                            outputByte[1] = (byte)0x24;
-                            outputByte[2] = (byte)0x42;
-                            outputByte[3] = (byte)(index >> 8);
-                            outputByte[4] = (byte)(index & 0xff);
-                            outputSize = 5;
-                            newMode = JISX0208_1983;
-                        } else {
-                            outputByte[0] = (byte)(index >> 8);
-                            outputByte[1] = (byte)(index & 0xff);
-                            outputSize = 2;
-                        }
-                    }
-                    // It doesn't map to JIS-0208!
-                    else {
-                        if (subMode) {
-                            if (currentMode != subBytesMode) {
-                                System.arraycopy(subBytesEscape, 0, outputByte, 0,
-                                                 subBytesEscape.length);
-                                outputSize = subBytesEscape.length;
-                                System.arraycopy(subBytes, 0, outputByte,
-                                                 outputSize, subBytes.length);
-                                outputSize += subBytes.length;
-                                newMode = subBytesMode;
-                            } else {
-                                outputByte = subBytes;
-                                outputSize = subBytes.length;
-                            }
-                        } else {
-                            badInputLength = 1;
-                            throw new UnknownCharacterException();
-                        }
-                    }
-                }
-            }
-
-            // Is there room in the output buffer?
-            // XXX: The code assumes output buffer can hold at least 5 bytes,
-            // in this coverter case. However, there is no way for apps to
-            // see how many bytes will be necessary for next call.
-            // getMaxBytesPerChar() should be overriden in every subclass of
-            // CharToByteConverter and reflect real value (5 for this).
-            if (byteOff + outputSize > outEnd)
-                throw new ConversionBufferFullException();
-
-            // Put the output into the buffer
-            for ( int i = 0 ; i < outputSize ; i++ )
-                output[byteOff++] = outputByte[i];
-
-            // Advance the input pointer
-            charOff += inputSize;
-
-            // We can successfuly output the characters, changes
-            // current mode. Fix for 4251646.
-            currentMode = newMode;
-        }
-
-        // return mode ASCII at the end
-        if (currentMode != ASCII){
-            if (byteOff + 3 > outEnd)
-                throw new ConversionBufferFullException();
-
-            output[byteOff++] = 0x1b;
-            output[byteOff++] = 0x28;
-            output[byteOff++] = 0x42;
-            currentMode = ASCII;
-        }
-
-        // Return the length written to the output buffer
-        return byteOff-outOff;
-    }
-
-    // Reset
-    public void reset() {
-        highHalfZoneCode = 0;
-        byteOff = charOff = 0;
-        currentMode = ASCII;
-    }
-
-    /**
-     * returns the maximum number of bytes needed to convert a char
-     */
-    public int getMaxBytesPerChar() {
-        return 8;
-    }
-
-    // Return the character set ID
-    public String getCharacterEncoding() {
-        return "ISO2022JP";
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteISO2022KR.java b/ojluni/src/main/java/sun/io/CharToByteISO2022KR.java
deleted file mode 100755
index 092cc2b..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISO2022KR.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1997, 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.
- */
-
-package sun.io;
-
-public class CharToByteISO2022KR extends CharToByteISO2022
-{
-    public CharToByteISO2022KR()
-    {
-        SODesignator = "$)C";
-        try {
-            codeConverter = CharToByteConverter.getConverter("KSC5601");
-        } catch (Exception e) {};
-    }
-
-    /**
-     * returns the maximum number of bytes needed to convert a char
-     */
-    public int getMaxBytesPerChar()
-    {
-        return maximumDesignatorLength+4;
-    }
-
-    /**
-     * Return the character set ID
-     */
-    public String getCharacterEncoding()
-    {
-        return "ISO2022KR";
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteISO8859_1.java b/ojluni/src/main/java/sun/io/CharToByteISO8859_1.java
deleted file mode 100755
index 1708600..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISO8859_1.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (c) 1996, 1998, 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.
- */
-package sun.io;
-
-public class CharToByteISO8859_1 extends CharToByteConverter {
-
-    // Return the character set ID
-    public String getCharacterEncoding()
-    {
-        return "ISO8859_1";
-    }
-
-    private char highHalfZoneCode;
-
-    public int flush(byte[] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        if (highHalfZoneCode != 0) {
-            highHalfZoneCode = 0;
-            throw new MalformedInputException
-                ("String ends with <High Half Zone code> of UTF16");
-        }
-        byteOff = charOff = 0;
-        return 0;
-    }
-
-    /*
-    * Character conversion
-    */
-    public int convert(char[] input, int inOff, int inEnd,
-                       byte[] output, int outOff, int outEnd)
-        throws MalformedInputException,
-               UnknownCharacterException,
-               ConversionBufferFullException
-
-    {
-
-        char    inputChar;          // Input character to be converted
-        byte[]  outputByte;         // Output byte written to output
-        byte[]  tmpArray = new byte[1];
-        int     inputSize;          // Size of input
-        int     outputSize;         // Size of output
-
-        // Record beginning offsets
-        charOff = inOff;
-        byteOff = outOff;
-
-        if (highHalfZoneCode != 0) {
-            inputChar = highHalfZoneCode;
-            highHalfZoneCode = 0;
-            if (input[inOff] >= 0xdc00 && input[inOff] <= 0xdfff) {
-                // This is legal UTF16 sequence.
-                if (subMode) {
-                    outputSize = subBytes.length;
-                    if (byteOff + outputSize > outEnd)
-                        throw new ConversionBufferFullException();
-                    for(int i = 0; i < outputSize; i++)
-                        output[byteOff++] = subBytes[i];
-                    charOff += 1;
-                } else {
-                    badInputLength = 1;
-                    throw new UnknownCharacterException();
-                }
-            } else {
-                // This is illegal UTF16 sequence.
-                badInputLength = 0;
-                throw new MalformedInputException
-                    ("Previous converted string ends with " +
-                     "<High Half Zone Code> of UTF16 " +
-                     ", but this string is not begin with <Low Half Zone>");
-            }
-        }
-
-        // Loop until we hit the end of the input
-        while(charOff < inEnd) {
-            outputByte = tmpArray;
-
-            // Get the input character
-            inputChar = input[charOff];
-
-            // default outputSize
-            outputSize = 1;
-
-            // Assume this is a simple character
-            inputSize = 1;
-
-            // Is this a high surrogate?
-            if(inputChar >= '\uD800' && inputChar <= '\uDBFF') {
-                // Is this the last character in the input?
-                if (charOff + 1 == inEnd) {
-                    highHalfZoneCode = inputChar;
-                    break;
-                }
-
-                // Is there a low surrogate following?
-                inputChar = input[charOff + 1];
-                if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                    // We have a valid surrogate pair.  Too bad we don't map
-                    //  surrogates.  Is substitution enabled?
-                    if (subMode) {
-                        outputByte = subBytes;
-                        outputSize = subBytes.length;
-                        inputSize = 2;
-                    } else {
-                        badInputLength = 2;
-                        throw new UnknownCharacterException();
-                    }
-                } else {
-                    // We have a malformed surrogate pair
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-            }
-            // Is this an unaccompanied low surrogate?
-            else if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                badInputLength = 1;
-                throw new MalformedInputException();
-            }
-            // Not part of a surrogate, so try to convert
-            else {
-                // Is this character mappable?
-                if (inputChar <= '\u00FF') {
-                        outputByte[0] = (byte)inputChar;
-                } else {
-                    // Is substitution enabled?
-                    if (subMode) {
-                        outputByte = subBytes;
-                        outputSize = subBytes.length;
-                    } else {
-                        badInputLength = 1;
-                        throw new UnknownCharacterException();
-                    }
-                }
-            }
-
-            // If we don't have room for the output, throw an exception
-            if (byteOff + outputSize > outEnd)
-                throw new ConversionBufferFullException();
-
-            // Put the byte in the output buffer
-            for (int i = 0; i < outputSize; i++) {
-                output[byteOff++] = outputByte[i];
-            }
-            charOff += inputSize;
-        }
-
-        // Return the length written to the output buffer
-        return byteOff-outOff;
-    }
-
-    // Determine if a character is mappable or not
-    public boolean canConvert(char ch)
-    {
-        return (ch <= '\u00FF');
-    }
-
-    // Reset the converter
-    public void reset()
-    {
-        byteOff = charOff = 0;
-        highHalfZoneCode = 0;
-    }
-
-    /**
-    * returns the maximum number of bytes needed to convert a char
-    */
-    public int getMaxBytesPerChar()
-    {
-        return 1;
-    }
-
-
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteISO8859_13.java b/ojluni/src/main/java/sun/io/CharToByteISO8859_13.java
deleted file mode 100755
index 4158595..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISO8859_13.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1999, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ISO_8859_13;
-
-/**
- * Tables and data to convert Unicode to ISO8859_13
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteISO8859_13 extends CharToByteSingleByte {
-
-    private final static ISO_8859_13 nioCoder = new ISO_8859_13();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_13";
-    }
-
-    public CharToByteISO8859_13() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteISO8859_15.java b/ojluni/src/main/java/sun/io/CharToByteISO8859_15.java
deleted file mode 100755
index 65436ff..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISO8859_15.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- */
-
-package sun.io;
-
-import sun.nio.cs.ISO_8859_15;
-
-/**
- * Tables and data to convert Unicode to ISO8859_15
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteISO8859_15 extends CharToByteSingleByte {
-
-    private final static ISO_8859_15 nioCoder = new ISO_8859_15();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_15";
-    }
-
-    public CharToByteISO8859_15() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteISO8859_2.java b/ojluni/src/main/java/sun/io/CharToByteISO8859_2.java
deleted file mode 100755
index 0ea9562..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISO8859_2.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ISO_8859_2;
-
-/**
- * Tables and data to convert Unicode to ISO8859_2
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteISO8859_2 extends CharToByteSingleByte {
-
-    private final static ISO_8859_2 nioCoder = new ISO_8859_2();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_2";
-    }
-
-    public CharToByteISO8859_2() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteISO8859_3.java b/ojluni/src/main/java/sun/io/CharToByteISO8859_3.java
deleted file mode 100755
index 78b29f4..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISO8859_3.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.ISO_8859_3;
-
-/**
- * Tables and data to convert Unicode to ISO8859_3
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteISO8859_3 extends CharToByteSingleByte {
-
-    private final static ISO_8859_3 nioCoder = new ISO_8859_3();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_3";
-    }
-
-    public CharToByteISO8859_3() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteISO8859_4.java b/ojluni/src/main/java/sun/io/CharToByteISO8859_4.java
deleted file mode 100755
index c6055e1..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISO8859_4.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ISO_8859_4;
-
-/**
- * Tables and data to convert Unicode to ISO8859_4
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteISO8859_4 extends CharToByteSingleByte {
-
-    private final static ISO_8859_4 nioCoder = new ISO_8859_4();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_4";
-    }
-
-    public CharToByteISO8859_4() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteISO8859_5.java b/ojluni/src/main/java/sun/io/CharToByteISO8859_5.java
deleted file mode 100755
index 84e8f4d..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISO8859_5.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ISO_8859_5;
-
-/**
- * Tables and data to convert Unicode to ISO8859_5
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteISO8859_5 extends CharToByteSingleByte {
-
-    private final static ISO_8859_5 nioCoder = new ISO_8859_5();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_5";
-    }
-
-    public CharToByteISO8859_5() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteISO8859_6.java b/ojluni/src/main/java/sun/io/CharToByteISO8859_6.java
deleted file mode 100755
index d724187..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISO8859_6.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.ISO_8859_6;
-
-/**
- * Tables and data to convert Unicode to ISO8859_6
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteISO8859_6 extends CharToByteSingleByte {
-
-    private final static ISO_8859_6 nioCoder = new ISO_8859_6();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_6";
-    }
-
-    public CharToByteISO8859_6() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteISO8859_7.java b/ojluni/src/main/java/sun/io/CharToByteISO8859_7.java
deleted file mode 100755
index 3607958..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISO8859_7.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ISO_8859_7;
-
-
-/**
- * Tables and data to convert Unicode to ISO8859_7
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteISO8859_7 extends CharToByteSingleByte {
-
-    public String getCharacterEncoding() {
-        return "ISO8859_7";
-    }
-
-    private final static ISO_8859_7 nioCoder = new ISO_8859_7();
-
-    public CharToByteISO8859_7() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteISO8859_8.java b/ojluni/src/main/java/sun/io/CharToByteISO8859_8.java
deleted file mode 100755
index 47465f9..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISO8859_8.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.ISO_8859_8;
-
-/**
- * Tables and data to convert Unicode to ISO8859_8
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteISO8859_8 extends CharToByteSingleByte {
-
-    private final static ISO_8859_8 nioCoder = new ISO_8859_8();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_8";
-    }
-
-    public CharToByteISO8859_8() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteISO8859_9.java b/ojluni/src/main/java/sun/io/CharToByteISO8859_9.java
deleted file mode 100755
index 58ce4dc..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteISO8859_9.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ISO_8859_9;
-
-/**
- * Tables and data to convert Unicode to ISO8859_9
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteISO8859_9 extends CharToByteSingleByte {
-
-    private final static ISO_8859_9 nioCoder = new ISO_8859_9();
-
-    public String getCharacterEncoding() {
-        return "ISO8859_9";
-    }
-
-    public CharToByteISO8859_9() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteJIS0201.java b/ojluni/src/main/java/sun/io/CharToByteJIS0201.java
deleted file mode 100755
index cc4c6bf..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteJIS0201.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (c) 1996, 2008, 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.
- */
-
-package sun.io;
-
-/**
- * Tables and data to convert Unicode to JIS0201
- *
- * @author  ConverterGenerator tool
- * @version >= JDK1.1.6
- */
-
-class CharToByteJIS0201 extends CharToByteSingleByte {
-
-    public String getCharacterEncoding() {
-        return "JIS0201";
-    }
-
-    public CharToByteJIS0201() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        /*
-        super.index1 = index1;
-        super.index2 = index2;
-        */
-    }
-
-    public byte getNative(char inputChar) {
-        return (byte)index2.charAt(index1[(inputChar & mask1) >> shift]
-                + (inputChar & mask2));
-    }
-
-   public boolean canConvert(char ch) {
-        if (index2.charAt(index1[((ch & mask1) >> shift)] + (ch & mask2)) != '\u0000')
-            return true;
-        return (ch == '\u0000');
-    }
-
-    private final static String index2 =
-
-        "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" +
-        "\b\t\n\u000B\f\r\u000E\u000F" +
-        "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" +
-        "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" +
-        "\u0020\u0021\"\u0023\u0024\u0025\u0026\'" +
-        "\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F" +
-        "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037" +
-        "\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u003F" +
-        "\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047" +
-        "\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F" +
-        "\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057" +
-        "\u0058\u0059\u005A\u005B\\\u005D\u005E\u005F" +
-        "\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067" +
-        "\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F" +
-        "\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077" +
-        "\u0078\u0079\u007A\u007B\u007C\u007D\u007E\u007F" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\\\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u007E\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8" +
-        "\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0" +
-        "\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8" +
-        "\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0" +
-        "\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8" +
-        "\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0" +
-        "\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8" +
-        "\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-    private final static short index1[] = {
-        0, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-        166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-        360, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-        166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-        166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-        166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-        166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-        166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-        166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-        166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-        166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-        166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-        166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-        166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-        166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-        166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 519,
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteJIS0208.java b/ojluni/src/main/java/sun/io/CharToByteJIS0208.java
deleted file mode 100755
index 367f1fa..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteJIS0208.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.JIS_X_0208_Encoder;
-
-/**
- * Tables and data to convert Unicode to JIS0208
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteJIS0208 extends CharToByteDoubleByte {
-
-    public String getCharacterEncoding() {
-        return "JIS0208";
-    }
-
-    public CharToByteJIS0208() {
-        super.index1 = JIS_X_0208_Encoder.getIndex1();
-        super.index2 = JIS_X_0208_Encoder.getIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteJIS0208_Solaris.java b/ojluni/src/main/java/sun/io/CharToByteJIS0208_Solaris.java
deleted file mode 100755
index f026f28..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteJIS0208_Solaris.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.JIS_X_0208_Solaris_Encoder;
-
-/**
- * Tables and data to convert Unicode to JIS0208_Solaris
- *
- *
- * Vendor defined chars added for benefit of vendor defined character
- * supplemented mappings for EUC-JP-Solaris/PCK Solaris variants of EUC-JP
- * and SJIS/Shift_JIS (4765370)
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteJIS0208_Solaris extends CharToByteDoubleByte {
-
-    public String getCharacterEncoding() {
-        return "JIS0208_Solaris";
-    }
-
-    public CharToByteJIS0208_Solaris() {
-        super.index1 = JIS_X_0208_Solaris_Encoder.getIndex1();
-        super.index2 = JIS_X_0208_Solaris_Encoder.getIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteJIS0212.java b/ojluni/src/main/java/sun/io/CharToByteJIS0212.java
deleted file mode 100755
index 18607555..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteJIS0212.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-
-package sun.io;
-import sun.nio.cs.ext.JIS_X_0212_Encoder;
-
-/**
- * Tables and data to convert Unicode to JIS0212
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteJIS0212 extends CharToByteDoubleByte {
-    public String getCharacterEncoding() {
-        return "JIS0212";
-    }
-
-    public CharToByteJIS0212() {
-        super.index1 = JIS_X_0212_Encoder.getIndex1();
-        super.index2 = JIS_X_0212_Encoder.getIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteJIS0212_Solaris.java b/ojluni/src/main/java/sun/io/CharToByteJIS0212_Solaris.java
deleted file mode 100755
index 43c4670..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteJIS0212_Solaris.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.JIS_X_0212_Solaris_Encoder;
-
-/**
- * Tables and data to convert Unicode to JIS0212_Solaris
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteJIS0212_Solaris extends CharToByteDoubleByte {
-
-    public String getCharacterEncoding() {
-        return "JIS0212_Solaris";
-    }
-
-    public CharToByteJIS0212_Solaris() {
-        super.index1 = JIS_X_0212_Solaris_Encoder.getIndex1();
-        super.index2 = JIS_X_0212_Solaris_Encoder.getIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteJohab.java b/ojluni/src/main/java/sun/io/CharToByteJohab.java
deleted file mode 100755
index d0536f1..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteJohab.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteJohab extends CharToByteDBCS_ASCII {
-
-    private static DoubleByte.Encoder enc =
-        (DoubleByte.Encoder)new Johab().newEncoder();
-
-    public String getCharacterEncoding() {
-        return "Johab";
-    }
-
-    public CharToByteJohab() {
-        super(enc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteKOI8_R.java b/ojluni/src/main/java/sun/io/CharToByteKOI8_R.java
deleted file mode 100755
index 7688541..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteKOI8_R.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.KOI8_R;
-
-/**
- * Tables and data to convert Unicode to KOI8_R
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteKOI8_R extends CharToByteSingleByte {
-
-    private final static KOI8_R nioCoder = new KOI8_R();
-
-    public String getCharacterEncoding() {
-        return "KOI8_R";
-    }
-
-    public CharToByteKOI8_R() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMS874.java b/ojluni/src/main/java/sun/io/CharToByteMS874.java
deleted file mode 100755
index b855d63..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMS874.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.MS874;
-
-/**
- * Tables and data to convert Unicode to MS874
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteMS874 extends CharToByteSingleByte {
-
-    private final static MS874 nioCoder = new MS874();
-
-    public String getCharacterEncoding() {
-        return "MS874";
-    }
-
-    public CharToByteMS874() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMS932.java b/ojluni/src/main/java/sun/io/CharToByteMS932.java
deleted file mode 100755
index 1768752..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMS932.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteMS932 extends CharToByteDBCS_ASCII {
-
-    private static DoubleByte.Encoder enc =
-        (DoubleByte.Encoder)new MS932().newEncoder();
-
-    public String getCharacterEncoding() {
-        return "MS932";
-    }
-
-    public CharToByteMS932() {
-        super(enc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMS936.java b/ojluni/src/main/java/sun/io/CharToByteMS936.java
deleted file mode 100755
index 362c3a9..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMS936.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteMS936 extends CharToByteDBCS_ASCII {
-
-    private static DoubleByte.Encoder enc =
-        (DoubleByte.Encoder)new MS936().newEncoder();
-
-    public String getCharacterEncoding() {
-        return "MS936";
-    }
-
-    public CharToByteMS936() {
-        super(enc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMS949.java b/ojluni/src/main/java/sun/io/CharToByteMS949.java
deleted file mode 100755
index 11e678d..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMS949.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteMS949 extends CharToByteDBCS_ASCII {
-
-    private static DoubleByte.Encoder enc =
-        (DoubleByte.Encoder)new MS949().newEncoder();
-
-    public String getCharacterEncoding() {
-        return "MS949";
-    }
-
-    public CharToByteMS949() {
-        super(enc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMS950.java b/ojluni/src/main/java/sun/io/CharToByteMS950.java
deleted file mode 100755
index 8ec65a9..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMS950.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-
-package sun.io;
-
-import sun.nio.cs.ext.*;
-
-public class CharToByteMS950 extends CharToByteDBCS_ASCII {
-
-    private static DoubleByte.Encoder enc =
-        (DoubleByte.Encoder)new MS950().newEncoder();
-
-    public String getCharacterEncoding() {
-        return "MS950";
-    }
-
-    public CharToByteMS950() {
-        super(enc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMS950_HKSCS.java b/ojluni/src/main/java/sun/io/CharToByteMS950_HKSCS.java
deleted file mode 100755
index 540d3aa..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMS950_HKSCS.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2002, 2010, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.DoubleByte;
-import sun.nio.cs.ext.MS950_HKSCS;
-
-public class CharToByteMS950_HKSCS extends CharToByteDBCS_ASCII {
-
-    private static DoubleByte.Encoder enc =
-        (DoubleByte.Encoder)new MS950_HKSCS().newEncoder();
-
-    public String getCharacterEncoding() {
-        return "MS950_HKSCS";
-    }
-
-    public CharToByteMS950_HKSCS() {
-        super(enc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMacArabic.java b/ojluni/src/main/java/sun/io/CharToByteMacArabic.java
deleted file mode 100755
index 1cd58c8..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMacArabic.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.MacArabic;
-
-/**
- * Tables and data to convert Unicode to MacArabic
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteMacArabic extends CharToByteSingleByte {
-
-    private final static MacArabic nioCoder = new MacArabic();
-
-    public String getCharacterEncoding() {
-        return "MacArabic";
-    }
-
-    public CharToByteMacArabic() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMacCentralEurope.java b/ojluni/src/main/java/sun/io/CharToByteMacCentralEurope.java
deleted file mode 100755
index 7ddfd29..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMacCentralEurope.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.MacCentralEurope;
-
-/**
- * Tables and data to convert Unicode to MacCentralEurope
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteMacCentralEurope extends CharToByteSingleByte {
-
-    private final static MacCentralEurope nioCoder = new MacCentralEurope();
-
-    public String getCharacterEncoding() {
-        return "MacCentralEurope";
-    }
-
-    public CharToByteMacCentralEurope() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMacCroatian.java b/ojluni/src/main/java/sun/io/CharToByteMacCroatian.java
deleted file mode 100755
index 2ff6d0a..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMacCroatian.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.MacCroatian;
-
-/**
- * Tables and data to convert Unicode to MacCroatian
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteMacCroatian extends CharToByteSingleByte {
-
-    private final static MacCroatian nioCoder = new MacCroatian();
-
-    public String getCharacterEncoding() {
-        return "MacCroatian";
-    }
-
-    public CharToByteMacCroatian() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMacCyrillic.java b/ojluni/src/main/java/sun/io/CharToByteMacCyrillic.java
deleted file mode 100755
index 17aefefc..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMacCyrillic.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.MacCyrillic;
-
-/**
- * Tables and data to convert Unicode to MacCyrillic
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteMacCyrillic extends CharToByteSingleByte {
-
-    private final static MacCyrillic nioCoder = new MacCyrillic();
-
-    public String getCharacterEncoding() {
-        return "MacCyrillic";
-    }
-
-    public CharToByteMacCyrillic() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMacDingbat.java b/ojluni/src/main/java/sun/io/CharToByteMacDingbat.java
deleted file mode 100755
index 0d53511..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMacDingbat.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.MacDingbat;
-
-/**
- * Tables and data to convert Unicode to MacDingbat
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteMacDingbat extends CharToByteSingleByte {
-
-    private final static MacDingbat nioCoder = new MacDingbat();
-
-    public String getCharacterEncoding() {
-        return "MacDingbat";
-    }
-
-    public CharToByteMacDingbat() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMacGreek.java b/ojluni/src/main/java/sun/io/CharToByteMacGreek.java
deleted file mode 100755
index a520a13..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMacGreek.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.MacGreek;
-
-/**
- * Tables and data to convert Unicode to MacGreek
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteMacGreek extends CharToByteSingleByte {
-
-    private final static MacGreek nioCoder = new MacGreek();
-
-    public String getCharacterEncoding() {
-        return "MacGreek";
-    }
-
-    public CharToByteMacGreek() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMacHebrew.java b/ojluni/src/main/java/sun/io/CharToByteMacHebrew.java
deleted file mode 100755
index c725c90..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMacHebrew.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.MacHebrew;
-
-/**
- * Tables and data to convert Unicode to MacHebrew
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteMacHebrew extends CharToByteSingleByte {
-
-    private final static MacHebrew nioCoder = new MacHebrew();
-
-    public String getCharacterEncoding() {
-        return "MacHebrew";
-    }
-
-    public CharToByteMacHebrew() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMacIceland.java b/ojluni/src/main/java/sun/io/CharToByteMacIceland.java
deleted file mode 100755
index 8b4d2dc..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMacIceland.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.MacIceland;
-
-/**
- * Tables and data to convert Unicode to MacIceland
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteMacIceland extends CharToByteSingleByte {
-
-    private final static MacIceland nioCoder = new MacIceland();
-
-    public String getCharacterEncoding() {
-        return "MacIceland";
-    }
-
-    public CharToByteMacIceland() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMacRoman.java b/ojluni/src/main/java/sun/io/CharToByteMacRoman.java
deleted file mode 100755
index ea6b1a2..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMacRoman.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.MacRoman;
-
-/**
- * Tables and data to convert Unicode to MacRoman
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteMacRoman extends CharToByteSingleByte {
-
-    private final static MacRoman nioCoder = new MacRoman();
-
-    public String getCharacterEncoding() {
-        return "MacRoman";
-    }
-
-    public CharToByteMacRoman() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMacRomania.java b/ojluni/src/main/java/sun/io/CharToByteMacRomania.java
deleted file mode 100755
index bad0a86..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMacRomania.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.MacRomania;
-
-/**
- * Tables and data to convert Unicode to MacRomania
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteMacRomania extends CharToByteSingleByte {
-
-    private final static MacRomania nioCoder = new MacRomania();
-
-    public String getCharacterEncoding() {
-        return "MacRomania";
-    }
-
-    public CharToByteMacRomania() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMacSymbol.java b/ojluni/src/main/java/sun/io/CharToByteMacSymbol.java
deleted file mode 100755
index 6043cd0..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMacSymbol.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.MacSymbol;
-
-/**
- * Tables and data to convert Unicode to MacSymbol
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteMacSymbol extends CharToByteSingleByte {
-
-    private final static MacSymbol nioCoder = new MacSymbol();
-
-    public String getCharacterEncoding() {
-        return "MacSymbol";
-    }
-
-    public CharToByteMacSymbol() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMacThai.java b/ojluni/src/main/java/sun/io/CharToByteMacThai.java
deleted file mode 100755
index 3d6f73f..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMacThai.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.MacThai;
-
-/**
- * Tables and data to convert Unicode to MacThai
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteMacThai extends CharToByteSingleByte {
-
-    private final static MacThai nioCoder = new MacThai();
-
-    public String getCharacterEncoding() {
-        return "MacThai";
-    }
-
-    public CharToByteMacThai() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMacTurkish.java b/ojluni/src/main/java/sun/io/CharToByteMacTurkish.java
deleted file mode 100755
index 3e8aaa1a..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMacTurkish.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.MacTurkish;
-
-/**
- * Tables and data to convert Unicode to MacTurkish
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteMacTurkish extends CharToByteSingleByte {
-
-    private final static MacTurkish nioCoder = new MacTurkish();
-
-    public String getCharacterEncoding() {
-        return "MacTurkish";
-    }
-
-    public CharToByteMacTurkish() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteMacUkraine.java b/ojluni/src/main/java/sun/io/CharToByteMacUkraine.java
deleted file mode 100755
index 714fd38..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteMacUkraine.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.MacUkraine;
-
-/**
- * Tables and data to convert Unicode to MacUkraine
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteMacUkraine extends CharToByteSingleByte {
-
-    private final static MacUkraine nioCoder = new MacUkraine();
-
-    public String getCharacterEncoding() {
-        return "MacUkraine";
-    }
-
-    public CharToByteMacUkraine() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToBytePCK.java b/ojluni/src/main/java/sun/io/CharToBytePCK.java
deleted file mode 100755
index 89c13cd..0000000
--- a/ojluni/src/main/java/sun/io/CharToBytePCK.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.JIS_X_0208_Solaris_Encoder;
-
-/**
- * @author Limin Shi
- * @author Mark Son-Bell
- * @author Ian Little
- *
- * PCK char->byte converter for Solaris platform containing additional
- * mappings for vendor defined chars (NEC row 13 & IBM extension chars)
- * (bugID 4765370)
- */
-public class CharToBytePCK extends CharToByteSJIS {
-    CharToByteJIS0201 cbJIS0201 = new CharToByteJIS0201();
-    short[] j0208Index1 = JIS_X_0208_Solaris_Encoder.getIndex1();
-    String[] j0208Index2 = JIS_X_0208_Solaris_Encoder.getIndex2();
-
-    public String getCharacterEncoding() {
-        return "PCK";
-    }
-
-    protected int convSingleByte(char inputChar, byte[] outputByte) {
-        byte b;
-
-        // \u0000 - \u007F map straight through
-        if ((inputChar & 0xFF80) == 0) {
-            outputByte[0] = (byte)inputChar;
-            return 1;
-        }
-
-        if ((b = cbJIS0201.getNative(inputChar)) == 0)
-            return 0;
-
-        outputByte[0] = b;
-        return 1;
-    }
-
-    protected int getNative(char ch) {
-        int result = 0;
-
-         switch (ch) {
-            case '\u2015':
-                return 0x815C;
-            case '\u2014':
-                return 0;
-            default:
-                break;
-        }
-
-        if ((result = super.getNative(ch)) != 0) {
-            return result;
-        } else {
-            int offset = j0208Index1[ch >> 8] << 8;
-            int pos = j0208Index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
-
-            if (pos != 0) {
-                /*
-                 * This algorithm for converting from JIS to SJIS comes from Ken Lunde's
-                 * "Understanding Japanese Information Processing", pg 163.
-                 */
-                int c1 = (pos >> 8) & 0xff;
-                int c2 = pos & 0xff;
-                int rowOffset = c1 < 0x5F ? 0x70 : 0xB0;
-                int cellOffset = (c1 % 2 == 1) ? (c2 > 0x5F ? 0x20 : 0x1F) : 0x7E;
-                result =  ((((c1 + 1 ) >> 1) + rowOffset) << 8) | (c2 + cellOffset);
-            }
-        }
-        return result;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteSJIS.java b/ojluni/src/main/java/sun/io/CharToByteSJIS.java
deleted file mode 100755
index 1c5969d..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteSJIS.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 1996, 1998, 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.
- */
-
-package sun.io;
-
-/**
- * @author Limin Shi
- * @author Mark Son-Bell
- */
-
-public class CharToByteSJIS extends CharToByteJIS0208 {
-    CharToByteJIS0201 cbJIS0201 = new CharToByteJIS0201();
-
-    public String getCharacterEncoding() {
-        return "SJIS";
-    }
-
-    protected int convSingleByte(char inputChar, byte[] outputByte) {
-        byte b;
-
-        // \u0000 - \u007F map straight through
-        if ((inputChar & 0xFF80) == 0) {
-            outputByte[0] = (byte)inputChar;
-            return 1;
-        }
-
-        if ((b = cbJIS0201.getNative(inputChar)) == 0)
-            return 0;
-
-        outputByte[0] = b;
-        return 1;
-    }
-
-    protected int getNative(char ch) {
-        int offset = index1[ch >> 8] << 8;
-        int pos = index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
-        if (pos == 0) {
-            /* Zero value indicates this Unicode has no mapping to JIS0208.
-             * We bail here because the JIS -> SJIS algorithm produces
-             * bogus SJIS values for invalid JIS input.  Zero should be the
-             * only invalid JIS value in our table.
-             */
-            return 0;
-        }
-        /*
-         * This algorithm for converting from JIS to SJIS comes from Ken Lunde's
-         * "Understanding Japanese Information Processing", pg 163.
-         */
-        int c1 = (pos >> 8) & 0xff;
-        int c2 = pos & 0xff;
-        int rowOffset = c1 < 0x5F ? 0x70 : 0xB0;
-        int cellOffset = (c1 % 2 == 1) ? (c2 > 0x5F ? 0x20 : 0x1F) : 0x7E;
-        return ((((c1 + 1 ) >> 1) + rowOffset) << 8) | (c2 + cellOffset);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteSingleByte.java b/ojluni/src/main/java/sun/io/CharToByteSingleByte.java
deleted file mode 100755
index 026a066..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteSingleByte.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * Copyright (c) 1996, 2008, 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.
- */
-
-package sun.io;
-
-import static sun.nio.cs.CharsetMapping.*;
-
-/**
-* A table driven conversion from char to byte for single byte
-* character sets.  Tables will reside in the class CharToByteYYYYY,
-* where YYYYY is a unique character set identifier
-
-    < TBD: Tables are of the form... >
-
-*
-* @author Lloyd Honomichl
-* @author Asmus Freytag
-* @version 8/28/96
-*/
-
-public abstract class CharToByteSingleByte extends CharToByteConverter {
-
-    /*
-     * 1st level index, provided by subclass
-     */
-    protected char[] index1;
-
-    /*
-     * 2nd level index, provided by subclass
-     */
-    protected char[] index2;
-
-    /*
-     * Mask to isolate bits for 1st level index, from subclass
-     */
-    protected int   mask1;
-
-    /*
-     * Mask to isolate bits for 2nd level index, from subclass
-     */
-    protected int   mask2;
-
-    /*
-     * Shift to isolate bits for 1st level index, from subclass
-     */
-    protected int   shift;
-
-    private char highHalfZoneCode;
-
-    public char[] getIndex1() {
-        return index1;
-    }
-
-    public char[] getIndex2() {
-        return index2;
-    }
-    public int flush(byte[] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        if (highHalfZoneCode != 0) {
-            highHalfZoneCode = 0;
-            badInputLength = 0;
-            throw new MalformedInputException();
-        }
-        byteOff = charOff = 0;
-        return 0;
-    }
-
-    /**
-     * Converts characters to sequences of bytes.
-     * Conversions that result in Exceptions can be restarted by calling
-     * convert again, with appropriately modified parameters.
-     * @return the characters written to output.
-     * @param input char array containing text in Unicode
-     * @param inStart offset in input array
-     * @param inEnd offset of last byte to be converted
-     * @param output byte array to receive conversion result
-     * @param outStart starting offset
-     * @param outEnd offset of last byte to be written to
-     * @throw MalformedInputException for any sequence of chars that is
-     * illegal in Unicode (principally unpaired surrogates
-     * and \uFFFF or \uFFFE), including any partial surrogate pair
-     * which occurs at the end of an input buffer.
-     * @throw UnsupportedCharacterException for any character that
-     * that cannot be converted to the external character set.
-     */
-    public int convert(char[] input, int inOff, int inEnd,
-                       byte[] output, int outOff, int outEnd)
-        throws MalformedInputException,
-               UnknownCharacterException,
-               ConversionBufferFullException
-    {
-        char    inputChar;          // Input character to be converted
-        byte[]  outputByte;         // Output byte written to output
-        int     inputSize;          // Size of input
-        int     outputSize;         // Size of output
-
-        byte[]  tmpArray = new byte[1];
-
-        // Record beginning offsets
-        charOff = inOff;
-        byteOff = outOff;
-
-        if (highHalfZoneCode != 0) {
-            inputChar = highHalfZoneCode;
-            highHalfZoneCode = 0;
-            if (input[inOff] >= 0xdc00 && input[inOff] <= 0xdfff) {
-                // This is legal UTF16 sequence.
-                badInputLength = 1;
-                throw new UnknownCharacterException();
-            } else {
-                // This is illegal UTF16 sequence.
-                badInputLength = 0;
-                throw new MalformedInputException();
-            }
-        }
-
-        // Loop until we hit the end of the input
-        while(charOff < inEnd) {
-
-            outputByte = tmpArray;
-
-            // Get the input character
-            inputChar = input[charOff];
-
-            // Default output size
-            outputSize = 1;
-
-            // Assume this is a simple character
-            inputSize = 1;
-
-            // Is this a high surrogate?
-            if(inputChar >= '\uD800' && inputChar <= '\uDBFF') {
-                // Is this the last character in the input?
-                if (charOff + 1 >= inEnd) {
-                    highHalfZoneCode = inputChar;
-                    break;
-                }
-
-                // Is there a low surrogate following?
-                inputChar = input[charOff + 1];
-                if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                    // We have a valid surrogate pair.  Too bad we don't map
-                    //  surrogates.  Is substitution enabled?
-                    if (subMode) {
-                        outputByte = subBytes;
-                        outputSize = subBytes.length;
-                        inputSize = 2;
-                    } else {
-                        badInputLength = 2;
-                        throw new UnknownCharacterException();
-                    }
-                } else {
-                    // We have a malformed surrogate pair
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-            }
-
-            // Is this an unaccompanied low surrogate?
-            else if (inputChar >= '\uDC00' && inputChar <= '\uDFFF') {
-                badInputLength = 1;
-                throw new MalformedInputException();
-            }
-
-            // Not part of a surrogate, so look it up
-            else {
-                // Get output using two level lookup
-                outputByte[0] = getNative(inputChar);
-
-                // Might this character be unmappable?
-                if (outputByte[0] == 0) {
-                    // If outputByte is zero because the input was zero
-                    //  then this character is actually mappable
-                    if (input[charOff] != '\u0000') {
-                        // We have an unmappable character
-                        // Is substitution enabled?
-                        if (subMode) {
-                            outputByte = subBytes;
-                            outputSize = subBytes.length;
-                        } else {
-                            badInputLength = 1;
-                            throw new UnknownCharacterException();
-                        }
-                    }
-                }
-            }
-
-            // If we don't have room for the output, throw an exception
-            if (byteOff + outputSize > outEnd)
-                throw new ConversionBufferFullException();
-
-            // Put the byte in the output buffer
-            for (int i = 0; i < outputSize; i++) {
-                output[byteOff++] = outputByte[i];
-            }
-            charOff += inputSize;
-
-        }
-
-        // Return the length written to the output buffer
-        return byteOff - outOff;
-    }
-
-    /**
-     * the maximum number of bytes needed to hold a converted char
-     * @returns the maximum number of bytes needed for a converted char
-     */
-    public int getMaxBytesPerChar() {
-        return 1;
-    }
-
-    int encodeChar(char ch) {
-        char index = index1[ch >> 8];
-        if (index == UNMAPPABLE_ENCODING)
-            return UNMAPPABLE_ENCODING;
-        return index2[index + (ch & 0xff)];
-    }
-
-    public byte getNative(char inputChar) {
-        int b = encodeChar(inputChar);
-        if (b == UNMAPPABLE_ENCODING)
-            return 0;
-        return (byte)b;
-    }
-
-    /**
-     *  Resets the converter.
-     * Call this method to reset the converter to its initial state
-     */
-    public void reset() {
-        byteOff = charOff = 0;
-        highHalfZoneCode = 0;
-    }
-
-    /**
-     * Return whether a character is mappable or not
-     * @return true if a character is mappable
-     */
-    public boolean canConvert(char ch) {
-        return encodeChar(ch) != UNMAPPABLE_ENCODING;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteTIS620.java b/ojluni/src/main/java/sun/io/CharToByteTIS620.java
deleted file mode 100755
index 9ab8977..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteTIS620.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1997, 2003, 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.
- */
-
-package sun.io;
-
-import sun.nio.cs.ext.TIS_620;
-
-/**
- * Tables and data to convert Unicode to TIS620
- *
- * @author  ConverterGenerator tool
- */
-
-public class CharToByteTIS620 extends CharToByteSingleByte {
-
-    private final static TIS_620 nioCoder = new TIS_620();
-
-    public String getCharacterEncoding() {
-        return "TIS620";
-    }
-
-    public CharToByteTIS620() {
-        super.mask1 = 0xFF00;
-        super.mask2 = 0x00FF;
-        super.shift = 8;
-        super.index1 = nioCoder.getEncoderIndex1();
-        super.index2 = nioCoder.getEncoderIndex2();
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteUTF16.java b/ojluni/src/main/java/sun/io/CharToByteUTF16.java
deleted file mode 100755
index bebdda2..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteUTF16.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.
- */
-
-package sun.io;
-
-
-/**
- * Convert arrays containing Unicode characters into arrays of bytes, using
- * big-endian byte order and writing an initial byte-order mark.
- */
-
-public class CharToByteUTF16 extends CharToByteUnicode {
-
-    public CharToByteUTF16() {
-        super(BIG, true);
-    }
-
-    public String getCharacterEncoding() {
-        return "UTF-16";
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteUTF8.java b/ojluni/src/main/java/sun/io/CharToByteUTF8.java
deleted file mode 100755
index b25a2f2..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteUTF8.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 1996, 1997, 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.
- */
-package sun.io;
-
-
-/**
- * UCS2 (UTF16) -> UCS Transformation Format 8 (UTF-8) converter
- * It's represented like below.
- *
- * # Bits   Bit pattern
- * 1    7   0xxxxxxx
- * 2   11   110xxxxx 10xxxxxx
- * 3   16   1110xxxx 10xxxxxx 10xxxxxx
- * 4   21   11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
- * 5   26   111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
- * 6   31   1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
- *
- *     UCS2 uses 1-3 / UTF16 uses 1-4 / UCS4 uses 1-6
- */
-
-public class CharToByteUTF8 extends CharToByteConverter {
-
-    private char highHalfZoneCode;
-
-    public int flush(byte[] output, int outStart, int outEnd)
-        throws MalformedInputException
-    {
-        if (highHalfZoneCode != 0) {
-            highHalfZoneCode = 0;
-            badInputLength = 0;
-            throw new MalformedInputException();
-        }
-        byteOff = charOff = 0;
-        return 0;
-    }
-
-    /**
-     * Character conversion
-     */
-    public int convert(char[] input, int inOff, int inEnd,
-                       byte[] output, int outOff, int outEnd)
-        throws ConversionBufferFullException, MalformedInputException
-    {
-        char inputChar;
-        byte[] outputByte = new byte[6];
-        int inputSize;
-        int outputSize;
-
-        charOff = inOff;
-        byteOff = outOff;
-
-        if (highHalfZoneCode != 0) {
-            inputChar = highHalfZoneCode;
-            highHalfZoneCode = 0;
-            if (input[inOff] >= 0xdc00 && input[inOff] <= 0xdfff) {
-                // This is legal UTF16 sequence.
-                int ucs4 = (highHalfZoneCode - 0xd800) * 0x400
-                    + (input[inOff] - 0xdc00) + 0x10000;
-                output[0] = (byte)(0xf0 | ((ucs4 >> 18)) & 0x07);
-                output[1] = (byte)(0x80 | ((ucs4 >> 12) & 0x3f));
-                output[2] = (byte)(0x80 | ((ucs4 >> 6) & 0x3f));
-                output[3] = (byte)(0x80 | (ucs4 & 0x3f));
-                charOff++;
-                highHalfZoneCode = 0;
-            } else {
-                // This is illegal UTF16 sequence.
-                badInputLength = 0;
-                throw new MalformedInputException();
-            }
-        }
-
-        while(charOff < inEnd) {
-            inputChar = input[charOff];
-            if (inputChar < 0x80) {
-                outputByte[0] = (byte)inputChar;
-                inputSize = 1;
-                outputSize = 1;
-            } else if (inputChar < 0x800) {
-                outputByte[0] = (byte)(0xc0 | ((inputChar >> 6) & 0x1f));
-                outputByte[1] = (byte)(0x80 | (inputChar & 0x3f));
-                inputSize = 1;
-                outputSize = 2;
-            } else if (inputChar >= 0xd800 && inputChar <= 0xdbff) {
-                // this is <high-half zone code> in UTF-16
-                if (charOff + 1 >= inEnd) {
-                    highHalfZoneCode = inputChar;
-                    break;
-                }
-                // check next char is valid <low-half zone code>
-                char lowChar = input[charOff + 1];
-                if (lowChar < 0xdc00 || lowChar > 0xdfff) {
-                    badInputLength = 1;
-                    throw new MalformedInputException();
-                }
-                int ucs4 = (inputChar - 0xd800) * 0x400 + (lowChar - 0xdc00)
-                    + 0x10000;
-                outputByte[0] = (byte)(0xf0 | ((ucs4 >> 18)) & 0x07);
-                outputByte[1] = (byte)(0x80 | ((ucs4 >> 12) & 0x3f));
-                outputByte[2] = (byte)(0x80 | ((ucs4 >> 6) & 0x3f));
-                outputByte[3] = (byte)(0x80 | (ucs4 & 0x3f));
-                outputSize = 4;
-                inputSize = 2;
-            } else {
-                outputByte[0] = (byte)(0xe0 | ((inputChar >> 12)) & 0x0f);
-                outputByte[1] = (byte)(0x80 | ((inputChar >> 6) & 0x3f));
-                outputByte[2] = (byte)(0x80 | (inputChar & 0x3f));
-                inputSize = 1;
-                outputSize = 3;
-            }
-            if (byteOff + outputSize > outEnd) {
-                throw new ConversionBufferFullException();
-            }
-            for (int i = 0; i < outputSize; i++) {
-                output[byteOff++] = outputByte[i];
-            }
-            charOff += inputSize;
-        }
-        return byteOff - outOff;
-    }
-
-    public boolean canConvert(char ch) {
-        return true;
-    }
-
-    public int getMaxBytesPerChar() {
-        return 3;
-    }
-
-    public void reset() {
-        byteOff = charOff = 0;
-        highHalfZoneCode = 0;
-    }
-
-    public String getCharacterEncoding() {
-        return "UTF8";
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteUnicode.java b/ojluni/src/main/java/sun/io/CharToByteUnicode.java
deleted file mode 100755
index d7b19e1..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteUnicode.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, 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.
- */
-
-package sun.io;
-import java.io.*;
-
-
-/**
- * Convert arrays containing Unicode characters into arrays of bytes, using the
- * platform-default byte order.
- *
- * @author      Mark Reinhold
- */
-
-public class CharToByteUnicode extends CharToByteConverter {
-
-    static final char BYTE_ORDER_MARK = (char) 0xfeff;
-    protected boolean usesMark = true;      /* A mark should be written */
-    private boolean markWritten = false;  /* A mark has been written */
-
-    static final int UNKNOWN = 0;
-    static final int BIG = 1;
-    static final int LITTLE = 2;
-    protected int byteOrder = UNKNOWN;
-
-    public CharToByteUnicode() {
-        String enc = java.security.AccessController.doPrivileged(
-           new sun.security.action.GetPropertyAction("sun.io.unicode.encoding",
-                                                          "UnicodeBig"));
-        if (enc.equals("UnicodeBig"))
-            byteOrder = BIG;
-        else if (enc.equals("UnicodeLittle"))
-            byteOrder = LITTLE;
-        else
-            byteOrder = BIG;
-    }
-
-    public CharToByteUnicode(int byteOrder, boolean usesMark) {
-        this.byteOrder = byteOrder;
-        this.usesMark = usesMark;
-    }
-
-    public CharToByteUnicode(boolean usesMark) {
-        this();
-        this.usesMark = usesMark;
-    }
-
-    public String getCharacterEncoding() {
-        switch (byteOrder) {
-        case BIG:
-            return usesMark ? "UnicodeBig" : "UnicodeBigUnmarked";
-        case LITTLE:
-            return usesMark ? "UnicodeLittle" : "UnicodeLittleUnmarked";
-        default:
-            return "UnicodeUnknown";
-        }
-    }
-
-    public int convert(char in[], int inOff, int inEnd,
-                       byte out[], int outOff, int outEnd)
-        throws ConversionBufferFullException, MalformedInputException
-    {
-        charOff = inOff;
-        byteOff = outOff;
-
-        if (inOff >= inEnd)
-            return 0;
-
-        int inI = inOff,
-            outI = outOff,
-            outTop = outEnd - 2;
-
-        if (usesMark && !markWritten) {
-            if (outI > outTop)
-                throw new ConversionBufferFullException();
-            if (byteOrder == BIG) {
-                out[outI++] = (byte) (BYTE_ORDER_MARK >> 8);
-                out[outI++] = (byte) (BYTE_ORDER_MARK & 0xff);
-            }
-            else {
-                out[outI++] = (byte) (BYTE_ORDER_MARK & 0xff);
-                out[outI++] = (byte) (BYTE_ORDER_MARK >> 8);
-            }
-            markWritten = true;
-        }
-
-        if (byteOrder == BIG) {
-            while (inI < inEnd) {
-                if (outI > outTop) {
-                    charOff = inI;
-                    byteOff = outI;
-                    throw new ConversionBufferFullException();
-                }
-                char c = in[inI++];
-                out[outI++] = (byte) (c >> 8);
-                out[outI++] = (byte) (c & 0xff);
-            }
-        }
-        else {
-            while (inI < inEnd) {
-                if (outI > outTop) {
-                    charOff = inI;
-                    byteOff = outI;
-                    throw new ConversionBufferFullException();
-                }
-                char c = in[inI++];
-                out[outI++] = (byte) (c & 0xff);
-                out[outI++] = (byte) (c >> 8);
-            }
-        }
-
-        charOff = inI;
-        byteOff = outI;
-        return outI - outOff;
-    }
-
-    public int flush(byte in[], int inOff, int inEnd) {
-        byteOff = charOff = 0;
-        return 0;
-    }
-
-    public void reset () {
-        byteOff = charOff = 0;
-        markWritten = false;
-    }
-
-    public int getMaxBytesPerChar() {
-        return 4;               /* To allow for writing the byte-order mark */
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteUnicodeBig.java b/ojluni/src/main/java/sun/io/CharToByteUnicodeBig.java
deleted file mode 100755
index c1c3892..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteUnicodeBig.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-package sun.io;
-
-
-/**
- * Convert arrays containing Unicode characters into arrays of bytes, using
- * big-endian byte order.
- *
- * @author      Mark Reinhold
- */
-
-public class CharToByteUnicodeBig extends CharToByteUnicode {
-
-    public CharToByteUnicodeBig () {
-        byteOrder = BIG;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteUnicodeBigUnmarked.java b/ojluni/src/main/java/sun/io/CharToByteUnicodeBigUnmarked.java
deleted file mode 100755
index d6a7d27..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteUnicodeBigUnmarked.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-package sun.io;
-
-
-/**
- * Convert arrays containing Unicode characters into arrays of bytes, using
- * big-endian byte order; do not write a byte-order mark before the first
- * converted character.
- *
- * @author      Mark Reinhold
- */
-
-public class CharToByteUnicodeBigUnmarked extends CharToByteUnicode {
-
-    public CharToByteUnicodeBigUnmarked () {
-        byteOrder = BIG;
-        usesMark = false;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteUnicodeLittle.java b/ojluni/src/main/java/sun/io/CharToByteUnicodeLittle.java
deleted file mode 100755
index d734571..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteUnicodeLittle.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-package sun.io;
-
-
-/**
- * Convert arrays containing Unicode characters into arrays of bytes, using
- * little-endian byte order.
- *
- * @author      Mark Reinhold
- */
-
-public class CharToByteUnicodeLittle extends CharToByteUnicode {
-
-    public CharToByteUnicodeLittle () {
-        byteOrder = LITTLE;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/CharToByteUnicodeLittleUnmarked.java b/ojluni/src/main/java/sun/io/CharToByteUnicodeLittleUnmarked.java
deleted file mode 100755
index 7595159..0000000
--- a/ojluni/src/main/java/sun/io/CharToByteUnicodeLittleUnmarked.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-package sun.io;
-
-
-/**
- * Convert arrays containing Unicode characters into arrays of bytes, using
- * little-endian byte order; do not write a byte-order mark before the first
- * converted character.
- *
- * @author      Mark Reinhold
- */
-
-public class CharToByteUnicodeLittleUnmarked extends CharToByteUnicode {
-
-    public CharToByteUnicodeLittleUnmarked () {
-        byteOrder = LITTLE;
-        usesMark = false;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/CharacterEncoding.java b/ojluni/src/main/java/sun/io/CharacterEncoding.java
deleted file mode 100755
index f577a9b..0000000
--- a/ojluni/src/main/java/sun/io/CharacterEncoding.java
+++ /dev/null
@@ -1,900 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, 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.
- */
-
-package sun.io;
-
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import sun.security.action.GetPropertyAction;
-
-/*
- * This class is public in sun.io, so other sun.* packages (such as
- * HotJava) can use it, without exposing it to java.*.
- * Translates IANA encoding name to the string which is the part of
- * converter class.
- */
-
-/**
- * @deprecated Replaced by {@link java.nio.charset}.  THIS API WILL BE
- * REMOVED IN J2SE 1.6.
- */
-@Deprecated
-public class CharacterEncoding {
-
-    private static boolean sjisIsMS932;
-
-    private static Map<String,String> aliasTable;
-    private static volatile boolean installedAll;
-
-    static {
-        aliasTable = new HashMap<>(460, 1.0f);                    /* MDA */
-
-        aliasTable.put("us-ascii",              "ASCII");
-        aliasTable.put("ascii",                 "ASCII");
-        aliasTable.put("646",                   "ASCII");       // Solaris POSIX locale
-        aliasTable.put("iso_646.irv:1983",      "ASCII");       // Linux POSIX locale
-        aliasTable.put("ansi_x3.4-1968",        "ASCII");       // Caldera linux
-        aliasTable.put("iso646-us",             "ASCII");
-        aliasTable.put("default",               "ASCII");       // compatibility with obsolete "Default" converters
-        aliasTable.put("ascii7",                "ASCII");       // compatibility with obsolete "Default" converters
-
-        // Core encodings
-        aliasTable.put("8859_1",                "ISO8859_1");
-        aliasTable.put("iso8859_1",             "ISO8859_1");
-        aliasTable.put("utf-8",                 "UTF8");
-        aliasTable.put("utf8",                  "UTF8");
-        aliasTable.put("utf-16le",              "UnicodeLittleUnmarked");
-
-        // Standard encodings used on Solaris and Linux
-        aliasTable.put("iso8859-1",             "ISO8859_1");
-        aliasTable.put("iso8859-2",             "ISO8859_2");
-        aliasTable.put("iso8859-4",             "ISO8859_4");
-        aliasTable.put("iso8859-5",             "ISO8859_5");
-        aliasTable.put("iso8859-6",             "ISO8859_6");
-        aliasTable.put("iso8859-8",             "ISO8859_8");
-        aliasTable.put("iso8859-9",             "ISO8859_9");
-        aliasTable.put("iso8859-13",            "ISO8859_13");
-        aliasTable.put("iso8859-15",            "ISO8859_15");
-        aliasTable.put("5601",                  "EUC_KR");
-        aliasTable.put("ansi-1251",             "Cp1251");
-        aliasTable.put("big5",                  "Big5");
-        aliasTable.put("big5hk",                "Big5_HKSCS");
-        aliasTable.put("eucjp",                 "EUC_JP");
-        aliasTable.put("cns11643",              "EUC_TW");
-        aliasTable.put("gb2312",                "EUC_CN");
-        aliasTable.put("gb18030",               "GB18030");
-        aliasTable.put("gbk",                   "GBK");
-        aliasTable.put("koi8-r",                "KOI8_R");
-        aliasTable.put("tis620.2533",           "TIS620");
-
-        // Windows encodings
-        aliasTable.put("cp1250",                "Cp1250");
-        aliasTable.put("cp1251",                "Cp1251");
-        aliasTable.put("cp1252",                "Cp1252");
-        aliasTable.put("cp1253",                "Cp1253");
-        aliasTable.put("cp1254",                "Cp1254");
-        aliasTable.put("cp1255",                "Cp1255");
-        aliasTable.put("cp1256",                "Cp1256");
-        aliasTable.put("cp1257",                "Cp1257");
-        aliasTable.put("cp1258",                "Cp1258");
-        aliasTable.put("ms874",                 "MS874");
-        aliasTable.put("ms932",                 "MS932");
-        aliasTable.put("ms949",                 "MS949");
-        aliasTable.put("ms950",                 "MS950");
-        aliasTable.put("ms1361",                "MS1361");
-    }
-
-    public static String aliasName(String name){
-
-        if (name.startsWith("\1")) {
-            // Emergency access to old converters
-            name = name.substring(1);
-        }
-        // need to use Locale.US so we can load ISO converters in tr_TR locale
-        String lower = name.toLowerCase(Locale.US);
-        String val = aliasTable.get(lower);
-
-        if (val == null && !installedAll) {
-            installAll();
-            val = aliasTable.get(lower);
-        }
-        return val;
-    }
-
-    private static synchronized void installAll() {
-        if (!installedAll) {
-            GetPropertyAction a = new GetPropertyAction("sun.nio.cs.map");
-            String map = AccessController.doPrivileged(a);
-            if (map != null) {
-                sjisIsMS932 = map.equalsIgnoreCase("Windows-31J/Shift_JIS");
-            } else {
-                sjisIsMS932 = false;
-            }
-
-            // MIBenum: 4
-            aliasTable.put("8859_1",                "ISO8859_1");
-            aliasTable.put("iso_8859-1:1987",       "ISO8859_1");
-            aliasTable.put("iso-ir-100",            "ISO8859_1");
-            aliasTable.put("iso_8859-1",            "ISO8859_1");
-            aliasTable.put("iso-8859-1",            "ISO8859_1");
-            aliasTable.put("iso8859-1",             "ISO8859_1");
-            aliasTable.put("latin1",                "ISO8859_1");
-            aliasTable.put("l1",                    "ISO8859_1");
-            aliasTable.put("ibm819",                "ISO8859_1");
-            aliasTable.put("ibm-819",               "ISO8859_1");
-            aliasTable.put("cp819",                 "ISO8859_1");
-            aliasTable.put("819",                   "ISO8859_1");
-            aliasTable.put("csisolatin1",           "ISO8859_1");
-
-            // MIBenum: 5
-            aliasTable.put("8859_2",                "ISO8859_2");
-            aliasTable.put("iso_8859-2:1987",       "ISO8859_2");
-            aliasTable.put("iso-ir-101",            "ISO8859_2");
-            aliasTable.put("iso_8859-2",            "ISO8859_2");
-            aliasTable.put("iso-8859-2",            "ISO8859_2");
-            aliasTable.put("iso8859-2",             "ISO8859_2");
-            aliasTable.put("latin2",                "ISO8859_2");
-            aliasTable.put("l2",                    "ISO8859_2");
-            aliasTable.put("ibm912",                "ISO8859_2");
-            aliasTable.put("ibm-912",               "ISO8859_2");
-            aliasTable.put("cp912",                 "ISO8859_2");
-            aliasTable.put("912",                   "ISO8859_2");
-            aliasTable.put("csisolatin2",           "ISO8859_2");
-
-            // MIBenum: 6
-            aliasTable.put("8859_3",                "ISO8859_3");
-            aliasTable.put("iso_8859-3:1988",       "ISO8859_3");
-            aliasTable.put("iso-ir-109",            "ISO8859_3");
-            aliasTable.put("iso_8859-3",            "ISO8859_3");
-            aliasTable.put("iso-8859-3",            "ISO8859_3");
-            aliasTable.put("iso8859-3",             "ISO8859_3");
-            aliasTable.put("latin3",                "ISO8859_3");
-            aliasTable.put("l3",                    "ISO8859_3");
-            aliasTable.put("ibm913",                "ISO8859_3");
-            aliasTable.put("ibm-913",               "ISO8859_3");
-            aliasTable.put("cp913",                 "ISO8859_3");
-            aliasTable.put("913",                   "ISO8859_3");
-            aliasTable.put("csisolatin3",           "ISO8859_3");
-
-            // MIBenum: 7
-            aliasTable.put("8859_4",                "ISO8859_4");
-            aliasTable.put("iso_8859-4:1988",       "ISO8859_4");
-            aliasTable.put("iso-ir-110",            "ISO8859_4");
-            aliasTable.put("iso_8859-4",            "ISO8859_4");
-            aliasTable.put("iso-8859-4",            "ISO8859_4");
-            aliasTable.put("iso8859-4",             "ISO8859_4");
-            aliasTable.put("latin4",                "ISO8859_4");
-            aliasTable.put("l4",                    "ISO8859_4");
-            aliasTable.put("ibm914",                "ISO8859_4");
-            aliasTable.put("ibm-914",               "ISO8859_4");
-            aliasTable.put("cp914",                 "ISO8859_4");
-            aliasTable.put("914",                   "ISO8859_4");
-            aliasTable.put("csisolatin4",           "ISO8859_4");
-
-            // MIBenum: 8
-            aliasTable.put("8859_5",                "ISO8859_5");
-            aliasTable.put("iso_8859-5:1988",       "ISO8859_5");
-            aliasTable.put("iso-ir-144",            "ISO8859_5");
-            aliasTable.put("iso_8859-5",            "ISO8859_5");
-            aliasTable.put("iso-8859-5",            "ISO8859_5");
-            aliasTable.put("iso8859-5",             "ISO8859_5");
-            aliasTable.put("cyrillic",              "ISO8859_5");
-            aliasTable.put("csisolatincyrillic",    "ISO8859_5");
-            aliasTable.put("ibm915",                "ISO8859_5");
-            aliasTable.put("ibm-915",               "ISO8859_5");
-            aliasTable.put("cp915",                 "ISO8859_5");
-            aliasTable.put("915",                   "ISO8859_5");
-
-            // MIBenum: 9
-            aliasTable.put("8859_6",                "ISO8859_6");
-            aliasTable.put("iso_8859-6:1987",       "ISO8859_6");
-            aliasTable.put("iso-ir-127",            "ISO8859_6");
-            aliasTable.put("iso_8859-6",            "ISO8859_6");
-            aliasTable.put("iso-8859-6",            "ISO8859_6");
-            aliasTable.put("iso8859-6",             "ISO8859_6");
-            aliasTable.put("ecma-114",              "ISO8859_6");
-            aliasTable.put("asmo-708",              "ISO8859_6");
-            aliasTable.put("arabic",                "ISO8859_6");
-            aliasTable.put("csisolatinarabic",      "ISO8859_6");
-            aliasTable.put("ibm1089",               "ISO8859_6");
-            aliasTable.put("ibm-1089",              "ISO8859_6");
-            aliasTable.put("cp1089",                "ISO8859_6");
-            aliasTable.put("1089",                  "ISO8859_6");
-
-            // MIBenum: 10
-            aliasTable.put("8859_7",                "ISO8859_7");
-            aliasTable.put("iso_8859-7:1987",       "ISO8859_7");
-            aliasTable.put("iso-ir-126",            "ISO8859_7");
-            aliasTable.put("iso_8859-7",            "ISO8859_7");
-            aliasTable.put("iso-8859-7",            "ISO8859_7");
-            aliasTable.put("iso8859-7",             "ISO8859_7");
-            aliasTable.put("elot_928",              "ISO8859_7");
-            aliasTable.put("ecma-118",              "ISO8859_7");
-            aliasTable.put("greek",                 "ISO8859_7");
-            aliasTable.put("greek8",                "ISO8859_7");
-            aliasTable.put("csisolatingreek",       "ISO8859_7");
-            aliasTable.put("ibm813",                "ISO8859_7");
-            aliasTable.put("ibm-813",               "ISO8859_7");
-            aliasTable.put("cp813",                 "ISO8859_7");
-            aliasTable.put("813",                   "ISO8859_7");
-            aliasTable.put("sun_eu_greek",          "ISO8859_7");
-
-            // MIBenum: 11
-            aliasTable.put("8859_8",                "ISO8859_8");
-            aliasTable.put("iso_8859-8:1988",       "ISO8859_8");
-            aliasTable.put("iso-ir-138",            "ISO8859_8");
-            aliasTable.put("iso_8859-8",            "ISO8859_8");
-            aliasTable.put("iso-8859-8",            "ISO8859_8");
-            aliasTable.put("iso8859-8",             "ISO8859_8");
-            aliasTable.put("hebrew",                "ISO8859_8");
-            aliasTable.put("csisolatinhebrew",      "ISO8859_8");
-            aliasTable.put("ibm916",                "ISO8859_8");
-            aliasTable.put("ibm-916",               "ISO8859_8");
-            aliasTable.put("cp916",                 "ISO8859_8");
-            aliasTable.put("916",                   "ISO8859_8");
-
-            // MIBenum: 12
-            aliasTable.put("8859_9",                "ISO8859_9");
-            aliasTable.put("iso-ir-148",            "ISO8859_9");
-            aliasTable.put("iso_8859-9",            "ISO8859_9");
-            aliasTable.put("iso-8859-9",            "ISO8859_9");
-            aliasTable.put("iso8859-9",             "ISO8859_9");
-            aliasTable.put("latin5",                "ISO8859_9");
-            aliasTable.put("l5",                    "ISO8859_9");
-            aliasTable.put("ibm920",                "ISO8859_9");
-            aliasTable.put("ibm-920",               "ISO8859_9");
-            aliasTable.put("cp920",                 "ISO8859_9");
-            aliasTable.put("920",                   "ISO8859_9");
-            aliasTable.put("csisolatin5",           "ISO8859_9");
-
-            // MIBenum: ???
-            aliasTable.put("8859_13",               "ISO8859_13");
-            aliasTable.put("iso_8859-13",           "ISO8859_13");
-            aliasTable.put("iso-8859-13",           "ISO8859_13");
-            aliasTable.put("iso8859-13",            "ISO8859_13");
-
-
-            // MIBenum: ????
-            aliasTable.put("8859_15",               "ISO8859_15");
-            aliasTable.put("iso-8859-15",           "ISO8859_15");
-            aliasTable.put("iso_8859-15",           "ISO8859_15");
-            aliasTable.put("iso8859-15",            "ISO8859_15");
-            aliasTable.put("ibm923",                "ISO8859_15");
-            aliasTable.put("ibm-923",               "ISO8859_15");
-            aliasTable.put("cp923",                 "ISO8859_15");
-            aliasTable.put("923",                   "ISO8859_15");
-            aliasTable.put("latin0",                "ISO8859_15");
-            aliasTable.put("latin9",                "ISO8859_15");
-            aliasTable.put("csisolatin0",           "ISO8859_15");
-            aliasTable.put("csisolatin9",           "ISO8859_15");
-
-            //For compatibility purpose
-            aliasTable.put("iso8859_15_fdis",       "ISO8859_15");
-
-            // MIBenum: 106
-            aliasTable.put("utf-8",                 "UTF8");
-
-            // Alias recommended in RFC 1641
-            aliasTable.put("unicode-1-1-utf-8",     "UTF8");
-
-            // MIBenum: 1010
-            aliasTable.put("unicode-1-1",           "UnicodeBigUnmarked");
-
-            // MIBenum: 1000
-            aliasTable.put("iso-10646-ucs-2",       "UnicodeBigUnmarked");
-
-            // Per Unicode standard
-            aliasTable.put("utf-16be",              "UnicodeBigUnmarked");
-            aliasTable.put("utf-16le",              "UnicodeLittleUnmarked");
-            aliasTable.put("utf-16",                "UTF16");
-
-            // Used by drag-and-drop subsystem
-            aliasTable.put("x-utf-16be",            "UnicodeBigUnmarked");
-            aliasTable.put("x-utf-16le",            "UnicodeLittleUnmarked");
-
-            aliasTable.put("unicode",               "Unicode");
-
-            // MIBenum: ????
-            aliasTable.put("ibm037",                "Cp037");
-            aliasTable.put("ibm-037",               "Cp037");
-            aliasTable.put("cp037",                 "Cp037");
-            aliasTable.put("037",                   "Cp037");
-
-            // MIBenum: ????
-            aliasTable.put("ibm273",                "Cp273");
-            aliasTable.put("ibm-273",               "Cp273");
-            aliasTable.put("cp273",                 "Cp273");
-            aliasTable.put("273",                   "Cp273");
-
-            // MIBenum: ????
-            aliasTable.put("ibm277",                "Cp277");
-            aliasTable.put("ibm-277",               "Cp277");
-            aliasTable.put("cp277",                 "Cp277");
-            aliasTable.put("277",                   "Cp277");
-
-            // MIBenum: ????
-            aliasTable.put("ibm278",                "Cp278");
-            aliasTable.put("ibm-278",               "Cp278");
-            aliasTable.put("cp278",                 "Cp278");
-            aliasTable.put("278",                   "Cp278");
-
-            // MIBenum: ????
-            aliasTable.put("ibm280",                "Cp280");
-            aliasTable.put("ibm-280",               "Cp280");
-            aliasTable.put("cp280",                 "Cp280");
-            aliasTable.put("280",                   "Cp280");
-
-            // MIBenum: ????
-            aliasTable.put("ibm284",                "Cp284");
-            aliasTable.put("ibm-284",               "Cp284");
-            aliasTable.put("cp284",                 "Cp284");
-            aliasTable.put("284",                   "Cp284");
-
-            // MIBenum: ????
-            aliasTable.put("ibm285",                "Cp285");
-            aliasTable.put("ibm-285",               "Cp285");
-            aliasTable.put("cp285",                 "Cp285");
-            aliasTable.put("285",                   "Cp285");
-
-            // MIBenum: ????
-            aliasTable.put("ibm297",                "Cp297");
-            aliasTable.put("ibm-297",               "Cp297");
-            aliasTable.put("cp297",                 "Cp297");
-            aliasTable.put("297",                   "Cp297");
-
-            // MIBenum: ????
-            aliasTable.put("ibm420",                "Cp420");
-            aliasTable.put("ibm-420",               "Cp420");
-            aliasTable.put("cp420",                 "Cp420");
-            aliasTable.put("420",                   "Cp420");
-
-            // MIBenum: ????
-            aliasTable.put("ibm424",                "Cp424");
-            aliasTable.put("ibm-424",               "Cp424");
-            aliasTable.put("cp424",                 "Cp424");
-            aliasTable.put("424",                   "Cp424");
-
-            // MIBenum: 2011
-            aliasTable.put("ibm437",                "Cp437");
-            aliasTable.put("ibm-437",               "Cp437");
-            aliasTable.put("cp437",                 "Cp437");
-            aliasTable.put("437",                   "Cp437");
-            aliasTable.put("cspc8codepage437",      "Cp437");
-
-            // MIBenum: ????
-            aliasTable.put("ibm500",                "Cp500");
-            aliasTable.put("ibm-500",               "Cp500");
-            aliasTable.put("cp500",                 "Cp500");
-            aliasTable.put("500",                   "Cp500");
-
-            // MIBenum: ????
-            aliasTable.put("ibm737",                "Cp737");
-            aliasTable.put("ibm-737",               "Cp737");
-            aliasTable.put("cp737",                 "Cp737");
-            aliasTable.put("737",                   "Cp737");
-
-            // MIBenum: ????
-            aliasTable.put("ibm775",                "Cp775");
-            aliasTable.put("ibm-775",               "Cp775");
-            aliasTable.put("cp775",                 "Cp775");
-            aliasTable.put("775",                   "Cp775");
-
-            aliasTable.put("ibm833",                "Cp833");
-            aliasTable.put("ibm-833",               "Cp833");
-            aliasTable.put("cp833",                 "Cp833");
-            aliasTable.put("833",                   "Cp833");
-
-            aliasTable.put("ibm834",                "Cp834");
-            aliasTable.put("ibm-834",               "Cp834");
-            aliasTable.put("cp834",                 "Cp834");
-            aliasTable.put("834",                   "Cp834");
-
-            // MIBenum: ????
-            aliasTable.put("ibm838",                "Cp838");         /* MDA */
-            aliasTable.put("ibm-838",               "Cp838");         /* MDA */
-            aliasTable.put("cp838",                 "Cp838");         /* MDA */
-            aliasTable.put("838",                   "Cp838");         /* MDA */
-
-            // "Cp850"
-            // MIBenum: 2009
-            aliasTable.put("ibm850",                "Cp850");
-            aliasTable.put("ibm-850",               "Cp850");
-            aliasTable.put("cp850",                 "Cp850");
-            aliasTable.put("850",                   "Cp850");
-            aliasTable.put("cspc850multilingual",   "Cp850");
-
-            // "Cp852"
-            // MIBenum: 2010
-            aliasTable.put("ibm852",                "Cp852");
-            aliasTable.put("ibm-852",               "Cp852");
-            aliasTable.put("cp852",                 "Cp852");
-            aliasTable.put("852",                   "Cp852");
-            aliasTable.put("cspcp852",              "Cp852");
-
-            // "Cp855"
-            // MIBenum: 2046
-            aliasTable.put("ibm855",                "Cp855");
-            aliasTable.put("ibm-855",               "Cp855");
-            aliasTable.put("cp855",                 "Cp855");
-            aliasTable.put("855",                   "Cp855");
-            aliasTable.put("cspcp855",              "Cp855");
-
-            // "Cp855"
-            // MIBenum: ???
-            aliasTable.put("ibm856",                "Cp856");
-            aliasTable.put("ibm-856",               "Cp856");
-            aliasTable.put("cp856",                 "Cp856");
-            aliasTable.put("856",                   "Cp856");
-
-            // "Cp857"
-            // MIBenum: 2047
-            aliasTable.put("ibm857",                "Cp857");
-            aliasTable.put("ibm-857",               "Cp857");
-            aliasTable.put("cp857",                 "Cp857");
-            aliasTable.put("857",                   "Cp857");
-            aliasTable.put("csibm857",              "Cp857");
-
-            // "Cp860"
-            // MIBenum: 2048
-            aliasTable.put("ibm860",                "Cp860");
-            aliasTable.put("ibm-860",               "Cp860");
-            aliasTable.put("cp860",                 "Cp860");
-            aliasTable.put("860",                   "Cp860");
-            aliasTable.put("csibm860",              "Cp860");
-
-            // MIBenum: 2049
-            aliasTable.put("ibm861",                "Cp861");
-            aliasTable.put("ibm-861",               "Cp861");
-            aliasTable.put("cp861",                 "Cp861");
-            aliasTable.put("cp-is",                 "Cp861");
-            aliasTable.put("861",                   "Cp861");
-            aliasTable.put("csibm861",              "Cp861");
-
-            // MIBenum: 2013
-            aliasTable.put("ibm862",                "Cp862");
-            aliasTable.put("ibm-862",               "Cp862");
-            aliasTable.put("cp862",                 "Cp862");
-            aliasTable.put("862",                   "Cp862");
-            aliasTable.put("cspc862latinhebrew",    "Cp862");
-
-            // MIBenum: 2050
-            aliasTable.put("ibm863",                "Cp863");
-            aliasTable.put("ibm-863",               "Cp863");
-            aliasTable.put("cp863",                 "Cp863");
-            aliasTable.put("863",                   "Cp863");
-            aliasTable.put("csibm863",              "Cp863");
-
-            // MIBenum: 2051
-            aliasTable.put("ibm864",                "Cp864");
-            aliasTable.put("ibm-864",               "Cp864");
-            aliasTable.put("cp864",                 "Cp864");
-            aliasTable.put("csibm864",              "Cp864");
-
-            // MIBenum: 2052
-            aliasTable.put("ibm865",                "Cp865");
-            aliasTable.put("ibm-865",               "Cp865");
-            aliasTable.put("cp865",                 "Cp865");
-            aliasTable.put("865",                   "Cp865");
-            aliasTable.put("csibm865",              "Cp865");
-
-            // MIBenum: ????
-            aliasTable.put("ibm866",                "Cp866");
-            aliasTable.put("ibm-866",               "Cp866");
-            aliasTable.put("cp866",                 "Cp866");
-            aliasTable.put("866",                   "Cp866");
-            aliasTable.put("csibm866",              "Cp866");
-
-            // MIBenum: ????
-            aliasTable.put("ibm868",                "Cp868");
-            aliasTable.put("ibm-868",               "Cp868");
-            aliasTable.put("cp868",                 "Cp868");
-            aliasTable.put("868",                   "Cp868");
-
-            // MIBenum: 2054
-            aliasTable.put("ibm869",                "Cp869");
-            aliasTable.put("ibm-869",               "Cp869");
-            aliasTable.put("cp869",                 "Cp869");
-            aliasTable.put("869",                   "Cp869");
-            aliasTable.put("cp-gr",                 "Cp869");
-            aliasTable.put("csibm869",              "Cp869");
-
-            // MIBenum: ????
-            aliasTable.put("ibm870",                "Cp870");
-            aliasTable.put("ibm-870",               "Cp870");
-            aliasTable.put("cp870",                 "Cp870");
-            aliasTable.put("870",                   "Cp870");
-
-            // MIBenum: ????
-            aliasTable.put("ibm871",                "Cp871");
-            aliasTable.put("ibm-871",               "Cp871");
-            aliasTable.put("cp871",                 "Cp871");
-            aliasTable.put("871",                   "Cp871");
-
-            // MIBenum: ????
-            aliasTable.put("ibm874",                "Cp874");
-            aliasTable.put("ibm-874",               "Cp874");
-            aliasTable.put("cp874",                 "Cp874");
-            aliasTable.put("874",                   "Cp874");
-
-            // MIBenum: ????
-            aliasTable.put("ibm875",                "Cp875");
-            aliasTable.put("ibm-875",               "Cp875");
-            aliasTable.put("cp875",                 "Cp875");
-            aliasTable.put("875",                   "Cp875");
-
-            // MIBenum: ????
-            aliasTable.put("ibm918",                "Cp918");
-            aliasTable.put("ibm-918",               "Cp918");
-            aliasTable.put("cp918",                 "Cp918");
-            aliasTable.put("918",                   "Cp918");
-
-            // MIBenum: ????
-            aliasTable.put("ibm921",                "Cp921");
-            aliasTable.put("ibm-921",               "Cp921");
-            aliasTable.put("cp921",                 "Cp921");
-            aliasTable.put("921",                   "Cp921");
-
-            // MIBenum: ????
-            aliasTable.put("ibm922",                "Cp922");
-            aliasTable.put("ibm-922",               "Cp922");
-            aliasTable.put("cp922",                 "Cp922");
-            aliasTable.put("922",                   "Cp922");
-
-            // MIBenum: ????
-            aliasTable.put("ibm930",                "Cp930");         /* MDA */
-            aliasTable.put("ibm-930",               "Cp930");         /* MDA */
-            aliasTable.put("cp930",                 "Cp930");         /* MDA */
-            aliasTable.put("930",                   "Cp930");         /* MDA */
-
-            // MIBenum: ????
-            aliasTable.put("ibm933",                "Cp933");         /* MDA */
-            aliasTable.put("ibm-933",               "Cp933");         /* MDA */
-            aliasTable.put("cp933",                 "Cp933");         /* MDA */
-            aliasTable.put("933",                   "Cp933");         /* MDA */
-
-            // MIBenum: ????
-            aliasTable.put("ibm935",                "Cp935");         /* MDA */
-            aliasTable.put("ibm-935",               "Cp935");         /* MDA */
-            aliasTable.put("cp935",                 "Cp935");         /* MDA */
-            aliasTable.put("935",                   "Cp935");         /* MDA */
-
-            // MIBenum: ????
-            aliasTable.put("ibm937",                "Cp937");         /* MDA */
-            aliasTable.put("ibm-937",               "Cp937");         /* MDA */
-            aliasTable.put("cp937",                 "Cp937");         /* MDA */
-            aliasTable.put("937",                   "Cp937");         /* MDA */
-
-            // MIBenum: ????
-            aliasTable.put("ibm939",                "Cp939");         /* MDA */
-            aliasTable.put("ibm-939",               "Cp939");         /* MDA */
-            aliasTable.put("cp939",                 "Cp939");         /* MDA */
-            aliasTable.put("939",                   "Cp939");         /* MDA */
-
-            // MIBenum: ????
-            aliasTable.put("ibm942",                "Cp942");         /* MDA */
-            aliasTable.put("ibm-942",               "Cp942");         /* MDA */
-            aliasTable.put("cp942",                 "Cp942");         /* MDA */
-            aliasTable.put("942",                   "Cp942");         /* MDA */
-
-            // MIBenum: ????
-            aliasTable.put("ibm943",                "Cp943");         /* ibm.3158 */
-            aliasTable.put("ibm-943",               "Cp943");         /* ibm.3158 */
-            aliasTable.put("cp943",                 "Cp943");         /* ibm.3158 */
-            aliasTable.put("943",                   "Cp943");         /* ibm.3158 */
-
-            // MIBenum: ????
-            aliasTable.put("ibm948",                "Cp948");         /* MDA */
-            aliasTable.put("ibm-948",               "Cp948");         /* MDA */
-            aliasTable.put("cp948",                 "Cp948");         /* MDA */
-            aliasTable.put("948",                   "Cp948");         /* MDA */
-
-            // MIBenum: ????
-            aliasTable.put("ibm949",                "Cp949");         /* MDA */
-            aliasTable.put("ibm-949",               "Cp949");         /* MDA */
-            aliasTable.put("cp949",                 "Cp949");         /* MDA */
-            aliasTable.put("949",                   "Cp949");         /* MDA */
-
-            // MIBenum: ????
-            aliasTable.put("ibm950",                "Cp950");         /* MDA */
-            aliasTable.put("ibm-950",               "Cp950");         /* MDA */
-            aliasTable.put("cp950",                 "Cp950");         /* MDA */
-            aliasTable.put("950",                   "Cp950");         /* MDA */
-
-            // MIBenum: ????
-            aliasTable.put("ibm964",                "Cp964");         /* MDA */
-            aliasTable.put("ibm-964",               "Cp964");         /* MDA */
-            aliasTable.put("cp964",                 "Cp964");         /* MDA */
-            aliasTable.put("964",                   "Cp964");         /* MDA */
-
-            // MIBenum: ????
-            aliasTable.put("ibm970",                "Cp970");         /* MDA */
-            aliasTable.put("ibm-970",               "Cp970");         /* MDA */
-            aliasTable.put("cp970",                 "Cp970");         /* MDA */
-            aliasTable.put("970",                   "Cp970");         /* MDA */
-
-            // MIBenum: ????
-            aliasTable.put("ibm1006",               "Cp1006");
-            aliasTable.put("ibm-1006",              "Cp1006");
-            aliasTable.put("cp1006",                "Cp1006");
-            aliasTable.put("1006",                  "Cp1006");
-
-            // MIBenum: ????
-            aliasTable.put("ibm1025",               "Cp1025");
-            aliasTable.put("ibm-1025",              "Cp1025");
-            aliasTable.put("cp1025",                "Cp1025");
-            aliasTable.put("1025",                  "Cp1025");
-
-            // MIBenum: ????
-            aliasTable.put("ibm1026",               "Cp1026");
-            aliasTable.put("ibm-1026",              "Cp1026");
-            aliasTable.put("cp1026",                "Cp1026");
-            aliasTable.put("1026",                  "Cp1026");
-
-            // MIBenum: ????
-            aliasTable.put("ibm1097",               "Cp1097");
-            aliasTable.put("ibm-1097",              "Cp1097");
-            aliasTable.put("cp1097",                "Cp1097");
-            aliasTable.put("1097",                  "Cp1097");
-
-            // MIBenum: ????
-            aliasTable.put("ibm1098",               "Cp1098");
-            aliasTable.put("ibm-1098",              "Cp1098");
-            aliasTable.put("cp1098",                "Cp1098");
-            aliasTable.put("1098",                  "Cp1098");
-
-            // MIBenum: ????
-            aliasTable.put("ibm1112",               "Cp1112");
-            aliasTable.put("ibm-1112",              "Cp1112");
-            aliasTable.put("cp1112",                "Cp1112");
-            aliasTable.put("1112",                  "Cp1112");
-
-            // MIBenum: ????
-            aliasTable.put("ibm1122",               "Cp1122");
-            aliasTable.put("ibm-1122",              "Cp1122");
-            aliasTable.put("cp1122",                "Cp1122");
-            aliasTable.put("1122",                  "Cp1122");
-
-            // MIBenum: ????
-            aliasTable.put("ibm1123",               "Cp1123");
-            aliasTable.put("ibm-1123",              "Cp1123");
-            aliasTable.put("cp1123",                "Cp1123");
-            aliasTable.put("1123",                  "Cp1123");
-
-            // MIBenum: ????
-            aliasTable.put("ibm1124",               "Cp1124");
-            aliasTable.put("ibm-1124",              "Cp1124");
-            aliasTable.put("cp1124",                "Cp1124");
-            aliasTable.put("1124",                  "Cp1124");
-
-            // MIBenum: ????
-            aliasTable.put("ibm1381",               "Cp1381");        /* MDA */
-            aliasTable.put("ibm-1381",              "Cp1381");        /* MDA */
-            aliasTable.put("cp1381",                "Cp1381");        /* MDA */
-            aliasTable.put("1381",                  "Cp1381");        /* MDA */
-
-            // MIBenum: ????
-            aliasTable.put("ibm1383",               "Cp1383");        /* MDA */
-            aliasTable.put("ibm-1383",              "Cp1383");        /* MDA */
-            aliasTable.put("cp1383",                "Cp1383");        /* MDA */
-            aliasTable.put("1383",                  "Cp1383");        /* MDA */
-
-            // Specialized auto-detection for Japanese charsets
-            aliasTable.put("jis auto detect",       "JISAutoDetect");
-
-            // MIBenum: 16/39
-            aliasTable.put("jis",                   "ISO2022JP");
-            aliasTable.put("iso-2022-jp",           "ISO2022JP");
-            aliasTable.put("csiso2022jp",           "ISO2022JP");
-            aliasTable.put("jis_encoding",          "ISO2022JP");
-            aliasTable.put("csjisencoding",         "ISO2022JP");
-
-            // MIBenum: 17/2024
-            aliasTable.put("windows-31j",           "MS932");
-            aliasTable.put("cswindows31j",          "MS932");
-
-            // JIS-defined Shift JIS
-            aliasTable.put("\u30b7\u30d5\u30c8\u7b26\u53f7\u5316\u8868\u73fe",
-                           "SJIS");                             // JIS name
-            aliasTable.put("pck", "PCK");           // Case independent PCK alias
-
-            if (sjisIsMS932) {
-                aliasTable.put("shift_jis",         "MS932");   // IANA shift jis aliases
-                aliasTable.put("csshiftjis",        "MS932");   // updated per 4556882
-                aliasTable.put("x-sjis",            "MS932");
-                aliasTable.put("ms_kanji",          "MS932");
-            } else {
-                aliasTable.put("shift_jis",         "SJIS");    // IANA shift jis aliases
-                aliasTable.put("csshiftjis",        "SJIS");
-                aliasTable.put("x-sjis",            "SJIS");
-                aliasTable.put("ms_kanji",          "SJIS");
-            }
-
-            // MIBenum: 18
-            // Japanese EUC
-            aliasTable.put("eucjis",                "EUC_JP");
-            aliasTable.put("euc-jp",                "EUC_JP");
-            aliasTable.put("eucjp",                 "EUC_JP");
-            aliasTable.put("extended_unix_code_packed_format_for_japanese",
-                           "EUC_JP");
-            aliasTable.put("cseucpkdfmtjapanese",   "EUC_JP");
-            aliasTable.put("x-euc-jp",              "EUC_JP");
-            aliasTable.put("x-eucjp",               "EUC_JP");
-            aliasTable.put("eucjp-open",            "EUC_JP_Solaris"); // 1.3.1_x compatibility
-
-            // For handing only JIS0202 and JIS0208 in linux
-            aliasTable.put("euc-jp-linux",          "EUC_JP_LINUX");
-
-            // MIBenum: 874
-            aliasTable.put("windows-874",           "MS874");
-
-            // MIBenum: 2250
-            aliasTable.put("windows-1250",          "Cp1250");
-
-            // MIBenum: 2251
-            aliasTable.put("windows-1251",          "Cp1251");
-            aliasTable.put("ansi-1251",             "Cp1251"); // Solaris ru_RU.ANSI1251 locale
-
-            // MIBenum: 2252
-            aliasTable.put("windows-1252",          "Cp1252");
-
-            // MIBenum: 2253
-            aliasTable.put("windows-1253",          "Cp1253");
-
-            // MIBenum: 2254
-            aliasTable.put("windows-1254",          "Cp1254");
-
-            // MIBenum: 2255
-            aliasTable.put("windows-1255",          "Cp1255");
-
-            // MIBenum: 2256
-            aliasTable.put("windows-1256",          "Cp1256");
-
-            // MIBenum: 2257
-            aliasTable.put("windows-1257",          "Cp1257");
-
-            // MIBenum: 2258
-            aliasTable.put("windows-1258",          "Cp1258");
-
-            // MIBenum: ????
-            aliasTable.put("ibm33722",              "Cp33722");       /* MDA */
-            aliasTable.put("ibm-33722",             "Cp33722");       /* MDA */
-            aliasTable.put("cp33722",               "Cp33722");       /* MDA */
-            aliasTable.put("33722",                 "Cp33722");       /* MDA */
-
-            // Russian KOI8-R
-            aliasTable.put("koi8-r",                "KOI8_R");
-            aliasTable.put("koi8",                  "KOI8_R");
-            aliasTable.put("cskoi8r",               "KOI8_R");
-
-            // Simplified Chinese
-            aliasTable.put("gb2312",                "EUC_CN");
-            aliasTable.put("gb2312-80",             "EUC_CN");
-            aliasTable.put("gb2312-1980",           "EUC_CN");
-            aliasTable.put("euc-cn",                "EUC_CN");
-            aliasTable.put("euccn",                 "EUC_CN");
-
-            aliasTable.put("big5",                  "Big5");
-            aliasTable.put("big5hk",                "Big5_HKSCS");
-            aliasTable.put("big5-hkscs",            "Big5_HKSCS");
-            // Added for future compatibility, explicit mapping to Unicode 3.0
-            aliasTable.put("big5-hkscs:unicode3.0", "Big5_HKSCS");
-            aliasTable.put("big5_solaris",          "Big5_Solaris");
-
-            // Traditional Chinese
-            aliasTable.put("cns11643",              "EUC_TW");
-            aliasTable.put("euc-tw",                "EUC_TW");
-            aliasTable.put("euctw",                 "EUC_TW");
-
-            // Korean
-            aliasTable.put("ksc5601",               "EUC_KR");
-            aliasTable.put("euc-kr",                "EUC_KR");
-            aliasTable.put("euckr",                 "EUC_KR");
-            aliasTable.put("ks_c_5601-1987",        "EUC_KR");
-            aliasTable.put("ksc5601-1987",          "EUC_KR");
-            aliasTable.put("ksc5601_1987",          "EUC_KR");
-            aliasTable.put("ksc_5601",              "EUC_KR");
-            aliasTable.put("5601",                  "EUC_KR");
-
-            aliasTable.put("ksc5601-1992",          "Johab");
-            aliasTable.put("ksc5601_1992",          "Johab");
-            aliasTable.put("ms1361",                "Johab");
-
-            aliasTable.put("windows-949",           "MS949");
-
-            //MIBenum: 37
-            aliasTable.put("iso-2022-kr",           "ISO2022KR");
-            aliasTable.put("csiso2022kr",           "ISO2022KR");
-
-            // Thai
-            aliasTable.put("tis620.2533",           "TIS620");
-            aliasTable.put("tis-620",               "TIS620"); // Linux name
-
-            // X11 Compound Text
-            aliasTable.put("x-compound-text",       "COMPOUND_TEXT");
-            aliasTable.put("x11-compound_text",     "COMPOUND_TEXT");
-
-            // Variants
-            aliasTable.put("cp942c", "Cp942C");
-            aliasTable.put("cp943c", "Cp943C");
-            aliasTable.put("cp949c", "Cp949C");
-            aliasTable.put("iscii", "ISCII91");
-
-            installedAll = true;
-        }
-    }
-
-    /**
-     * For Solaris:
-     * always returns "PCK"
-     *
-     * For other platforms:
-     * method returns "MS932" if the file.encoding property value is "MS932"
-     * or an alias of "MS932"
-     * otherwise, "SJIS", regardless of its
-     * actual file.encoding value. This method is called from the JIS
-     * Auto Detect converter.
-     */
-    static String getSJISName() {
-        String encodeName = AccessController.doPrivileged(
-                                               new PrivilegedAction<String>() {
-            public String run() {
-                String osName = System.getProperty("os.name");
-                if (osName.equals("Solaris") || osName.equals("SunOS")){
-                    return "PCK";
-                }
-                else {
-                    return System.getProperty("file.encoding", null);
-                }
-            }
-        });
-
-        if (encodeName != null) {
-            if (encodeName.equals("MS932"))
-                return encodeName;
-            encodeName = aliasName(encodeName);
-        }
-        return (encodeName != null && encodeName.equals("MS932")) ? encodeName : "SJIS";
-    }
-
-
-    static String getEUCJPName() {
-      String encodeName = AccessController.doPrivileged(
-                                              new PrivilegedAction<String>() {
-          public String run() {
-              String osName = System.getProperty("os.name");
-              if (osName.equals("Solaris") || osName.equals("SunOS"))
-                  return "eucJP-open";
-              else
-                  return "EUC_JP";
-          }
-      });
-      return encodeName;
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/ConversionBufferFullException.java b/ojluni/src/main/java/sun/io/ConversionBufferFullException.java
deleted file mode 100755
index b267a9b..0000000
--- a/ojluni/src/main/java/sun/io/ConversionBufferFullException.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1996, 2007, 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.
- */
-
-package sun.io;
-
-
-/**
- * The output buffer for a character conversion is full, but additional
- * input remains to be converted
- *
- * @author Asmus Freytag
- *
- * @deprecated Replaced by {@link java.nio.charset}.  THIS API WILL BE
- * REMOVED IN J2SE 1.6.
- */
-@Deprecated
-public class ConversionBufferFullException
-    extends java.io.CharConversionException
-{
-    private static final long serialVersionUID = -6537318994265003622L;
-
-    /**
-     * Constructs a BufferFullException with no detail message.
-     * A detail message is a String that describes this particular exception.
-     */
-    public ConversionBufferFullException() {
-        super();
-    }
-
-    /**
-     * Constructs a BufferFullException with the specified detail message.
-     * A detail message is a String that describes this particular exception.
-     * @param s the String containing a detail message
-     */
-    public ConversionBufferFullException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/Converters.java b/ojluni/src/main/java/sun/io/Converters.java
deleted file mode 100755
index d09bc1e..0000000
--- a/ojluni/src/main/java/sun/io/Converters.java
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * Copyright (c) 1998, 2010, 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.
- */
-
-package sun.io;
-
-import java.io.UnsupportedEncodingException;
-import java.lang.ref.SoftReference;
-import java.util.Properties;
-
-/**
- * Package-private utility class that caches the default converter classes and
- * provides other logic common to both the ByteToCharConverter and
- * CharToByteConverter classes.
- *
- * @author   Mark Reinhold
- * @since    1.2
- *
- * @deprecated Replaced by {@link java.nio.charset}.  THIS API WILL BE
- * REMOVED IN J2SE 1.6.
- */
-@Deprecated
-public class Converters {
-
-    private Converters() { }    /* To prevent instantiation */
-
-    /* Lock for all static fields in this class */
-    private static Object lock = Converters.class;
-
-    /* Cached values of system properties */
-    private static String converterPackageName = null;  /* file.encoding.pkg */
-    private static String defaultEncoding = null;       /* file.encoding */
-
-    /* Converter type constants and names */
-    public static final int BYTE_TO_CHAR = 0;
-    public static final int CHAR_TO_BYTE = 1;
-    private static final String[] converterPrefix = { "ByteToChar",
-                                                      "CharToByte" };
-
-
-    // -- Converter class cache --
-
-    private static final int CACHE_SIZE = 3;
-
-    /* For the default charset, whatever it turns out to be */
-    private static final Object DEFAULT_NAME = new Object();
-
-    /* Cached converter classes, CACHE_SIZE per converter type.  Each cache
-     * entry is a soft reference to a two-object array; the first element of
-     * the array is the converter class, the second is an object (typically a
-     * string) representing the encoding name that was used to request the
-     * converter, e.g.,
-     *
-     *     ((Object[])classCache[CHAR_TO_BYTE][i].get())[0]
-     *
-     * will be a CharToByteConverter and
-     *
-     *     ((Object[])classCache[CHAR_TO_BYTE][i].get())[1]
-     *
-     * will be the string encoding name used to request it, assuming that cache
-     * entry i is valid.
-     *
-     * Ordinarily we'd do this with a private static utility class, but since
-     * this code can be involved in the startup sequence it's important to keep
-     * the footprint down.
-     */
-    @SuppressWarnings("unchecked")
-    private static SoftReference<Object[]>[][] classCache
-        = (SoftReference<Object[]>[][]) new SoftReference<?>[][] {
-            new SoftReference<?>[CACHE_SIZE],
-            new SoftReference<?>[CACHE_SIZE]
-        };
-
-    private static void moveToFront(Object[] oa, int i) {
-        Object ob = oa[i];
-        for (int j = i; j > 0; j--)
-            oa[j] = oa[j - 1];
-        oa[0] = ob;
-    }
-
-    private static Class<?> cache(int type, Object encoding) {
-        SoftReference<Object[]>[] srs = classCache[type];
-        for (int i = 0; i < CACHE_SIZE; i++) {
-            SoftReference<Object[]> sr = srs[i];
-            if (sr == null)
-                continue;
-            Object[] oa = sr.get();
-            if (oa == null) {
-                srs[i] = null;
-                continue;
-            }
-            if (oa[1].equals(encoding)) {
-                moveToFront(srs, i);
-                return (Class<?>)oa[0];
-            }
-        }
-        return null;
-    }
-
-    private static Class<?> cache(int type, Object encoding, Class<?> c) {
-        SoftReference<Object[]>[] srs = classCache[type];
-        srs[CACHE_SIZE - 1] = new SoftReference<>(new Object[] { c, encoding });
-        moveToFront(srs, CACHE_SIZE - 1);
-        return c;
-    }
-
-    /* Used to avoid doing expensive charset lookups for charsets that are not
-     * yet directly supported by NIO.
-     */
-    public static boolean isCached(int type, String encoding) {
-        synchronized (lock) {
-            SoftReference<Object[]>[] srs = classCache[type];
-            for (int i = 0; i < CACHE_SIZE; i++) {
-                SoftReference<Object[]> sr = srs[i];
-                if (sr == null)
-                    continue;
-                Object[] oa = sr.get();
-                if (oa == null) {
-                    srs[i] = null;
-                    continue;
-                }
-                if (oa[1].equals(encoding))
-                    return true;
-            }
-            return false;
-        }
-    }
-
-
-
-    /** Get the name of the converter package */
-    private static String getConverterPackageName() {
-        String cp = converterPackageName;
-        if (cp != null) return cp;
-        java.security.PrivilegedAction<String> pa =
-            new sun.security.action.GetPropertyAction("file.encoding.pkg");
-        cp = java.security.AccessController.doPrivileged(pa);
-        if (cp != null) {
-            /* Property is set, so take it as the true converter package */
-            converterPackageName = cp;
-        } else {
-            /* Fall back to sun.io */
-            cp = "sun.io";
-        }
-        return cp;
-    }
-
-    public static String getDefaultEncodingName() {
-        synchronized (lock) {
-            if (defaultEncoding == null) {
-                java.security.PrivilegedAction<String> pa =
-                    new sun.security.action.GetPropertyAction("file.encoding");
-                defaultEncoding = java.security.AccessController.doPrivileged(pa);
-            }
-        }
-        return defaultEncoding;
-    }
-
-    public static void resetDefaultEncodingName() {
-        // This method should only be called during VM initialization.
-        if (sun.misc.VM.isBooted())
-            return;
-
-        synchronized (lock) {
-            defaultEncoding = "ISO-8859-1";
-            Properties p = System.getProperties();
-            p.setProperty("file.encoding", defaultEncoding);
-            System.setProperties(p);
-        }
-    }
-
-    /**
-     * Get the class that implements the given type of converter for the named
-     * encoding, or throw an UnsupportedEncodingException if no such class can
-     * be found
-     */
-    private static Class<?> getConverterClass(int type, String encoding)
-        throws UnsupportedEncodingException
-    {
-        String enc = null;
-
-        /* "ISO8859_1" is the canonical name for the ISO-Latin-1 encoding.
-           Native code in the JDK commonly uses the alias "8859_1" instead of
-           "ISO8859_1".  We hardwire this alias here in order to avoid loading
-           the full alias table just for this case. */
-        if (!encoding.equals("ISO8859_1")) {
-            if (encoding.equals("8859_1")) {
-                enc = "ISO8859_1";
-            /*
-             * On Solaris with nl_langinfo() called in GetJavaProperties():
-             *
-             *   locale undefined -> NULL -> hardcoded default
-             *   "C" locale       -> "" -> hardcoded default    (on 2.6)
-             *   "C" locale       -> "646"                      (on 2.7)
-             *   "en_US" locale -> "ISO8859-1"
-             *   "en_GB" locale -> "ISO8859-1"                  (on 2.7)
-             *   "en_UK" locale -> "ISO8859-1"                  (on 2.6)
-             */
-            } else if (encoding.equals("ISO8859-1")) {
-                enc = "ISO8859_1";
-            } else if (encoding.equals("646")) {
-                enc = "ASCII";
-            } else {
-                enc = CharacterEncoding.aliasName(encoding);
-            }
-        }
-        if (enc == null) {
-            enc = encoding;
-        }
-
-        try {
-            return Class.forName(getConverterPackageName()
-                                 + "." + converterPrefix[type] + enc);
-        } catch(ClassNotFoundException e) {
-            throw new UnsupportedEncodingException(enc);
-        }
-
-    }
-
-    /**
-     * Instantiate the given converter class, or throw an
-     * UnsupportedEncodingException if it cannot be instantiated
-     */
-    private static Object newConverter(String enc, Class<?> c)
-        throws UnsupportedEncodingException
-    {
-        try {
-            return c.newInstance();
-        } catch(InstantiationException e) {
-            throw new UnsupportedEncodingException(enc);
-        } catch(IllegalAccessException e) {
-            throw new UnsupportedEncodingException(enc);
-        }
-    }
-
-    /**
-     * Create a converter object that implements the given type of converter
-     * for the given encoding, or throw an UnsupportedEncodingException if no
-     * appropriate converter class can be found and instantiated
-     */
-    static Object newConverter(int type, String enc)
-        throws UnsupportedEncodingException
-    {
-        Class<?> c;
-        synchronized (lock) {
-            c = cache(type, enc);
-            if (c == null) {
-                c = getConverterClass(type, enc);
-                if (!c.getName().equals("sun.io.CharToByteUTF8"))
-                    cache(type, enc, c);
-            }
-        }
-        return newConverter(enc, c);
-    }
-
-    /**
-     * Find the class that implements the given type of converter for the
-     * default encoding.  If the default encoding cannot be determined or is
-     * not yet defined, return a class that implements the fallback default
-     * encoding, which is just ISO 8859-1.
-     */
-    private static Class<?> getDefaultConverterClass(int type) {
-        boolean fillCache = false;
-        Class<?> c;
-
-        /* First check the class cache */
-        c = cache(type, DEFAULT_NAME);
-        if (c != null)
-            return c;
-
-        /* Determine the encoding name */
-        String enc = getDefaultEncodingName();
-        if (enc != null) {
-            /* file.encoding has been set, so cache the converter class */
-            fillCache = true;
-        } else {
-            /* file.encoding has not been set, so use a default encoding which
-               will not be cached */
-            enc = "ISO8859_1";
-        }
-
-        /* We have an encoding name; try to find its class */
-        try {
-            c = getConverterClass(type, enc);
-            if (fillCache) {
-                cache(type, DEFAULT_NAME, c);
-            }
-        } catch (UnsupportedEncodingException x) {
-            /* Can't find the default class, so fall back to ISO 8859-1 */
-            try {
-                c = getConverterClass(type, "ISO8859_1");
-            } catch (UnsupportedEncodingException y) {
-                throw new InternalError("Cannot find default "
-                                        + converterPrefix[type]
-                                        + " converter class");
-            }
-        }
-        return c;
-
-    }
-
-    /**
-     * Create a converter object that implements the given type of converter
-     * for the default encoding, falling back to ISO 8859-1 if the default
-     * encoding cannot be determined.
-     */
-    static Object newDefaultConverter(int type) {
-        Class<?> c;
-        synchronized (lock) {
-            c = getDefaultConverterClass(type);
-        }
-        try {
-            return newConverter("", c);
-        } catch (UnsupportedEncodingException x) {
-            throw new InternalError("Cannot instantiate default converter"
-                                    + " class " + c.getName());
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/io/MalformedInputException.java b/ojluni/src/main/java/sun/io/MalformedInputException.java
deleted file mode 100755
index 8788815..0000000
--- a/ojluni/src/main/java/sun/io/MalformedInputException.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1996, 2007, 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.
- */
-
-package sun.io;
-
-
-/**
-* The input string or input byte array to a character conversion
-* contains a malformed sequence of characters or bytes.
-*
-* @author Asmus Freytag
-*
-* @deprecated Replaced by {@link java.nio.charset}.  THIS API WILL BE
-* REMOVED IN J2SE 1.6.
-*/
-@Deprecated
-public class MalformedInputException
-    extends java.io.CharConversionException
-{
-    private static final long serialVersionUID = 2585413228493157652L;
-
-    /**
-     * Constructs a MalformedInputException with no detail message.
-     * A detail message is a String that describes this particular exception.
-     */
-    public MalformedInputException() {
-        super();
-    }
-
-    /**
-     * Constructs a MalformedInputException with the specified detail message.
-     * A detail message is a String that describes this particular exception.
-     * @param s the String containing a detail message
-     */
-    public MalformedInputException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/sun/io/UnknownCharacterException.java b/ojluni/src/main/java/sun/io/UnknownCharacterException.java
deleted file mode 100755
index efe33b9..0000000
--- a/ojluni/src/main/java/sun/io/UnknownCharacterException.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1996, 2007, 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.
- */
-
-package sun.io;
-
-
-/**
-* A character conversion encountered a character
-* that does not have an assigned mapping, and automatic
-* substitution is not selected
-*
-* @author Asmus Freytag
-* @deprecated Replaced by {@link java.nio.charset}.  THIS API WILL BE
-* REMOVED IN J2SE 1.6.
-*/
-@Deprecated
-public class UnknownCharacterException
-    extends java.io.CharConversionException
-{
-    private static final long serialVersionUID = -8563196502398436986L;
-
-    /**
-     * Constructs a UnknownCharacterException with no detail message.
-     * A detail message is a String that describes this particular exception.
-     */
-    public UnknownCharacterException() {
-        super();
-    }
-
-    /**
-     * Constructs a UnknownCharacterException with the specified detail message.
-     * A detail message is a String that describes this particular exception.
-     * @param s the String containing a detail message
-     */
-    public UnknownCharacterException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/CRC16.java b/ojluni/src/main/java/sun/misc/CRC16.java
deleted file mode 100755
index 1fa6adc..0000000
--- a/ojluni/src/main/java/sun/misc/CRC16.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 1994, 1995, 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.
- */
-
-package sun.misc;
-
-/**
- * The CRC-16 class calculates a 16 bit cyclic redundancy check of a set
- * of bytes. This error detecting code is used to determine if bit rot
- * has occured in a byte stream.
- */
-
-public class CRC16 {
-
-    /** value contains the currently computed CRC, set it to 0 initally */
-    public int value;
-
-    public CRC16() {
-        value = 0;
-    }
-
-    /** update CRC with byte b */
-    public void update(byte aByte) {
-        int a, b;
-
-        a = (int) aByte;
-        for (int count = 7; count >=0; count--) {
-            a = a << 1;
-            b = (a >>> 8) & 1;
-            if ((value & 0x8000) != 0) {
-                value = ((value << 1) + b) ^ 0x1021;
-            } else {
-                value = (value << 1) + b;
-            }
-        }
-        value = value & 0xffff;
-        return;
-    }
-
-    /** reset CRC value to 0 */
-    public void reset() {
-        value = 0;
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/Cache.java b/ojluni/src/main/java/sun/misc/Cache.java
deleted file mode 100755
index 9a3f134..0000000
--- a/ojluni/src/main/java/sun/misc/Cache.java
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * Copyright (c) 1995, 1996, 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.
- */
-
-package sun.misc;
-
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-
-/**
- * Caches the collision list.
- */
-class CacheEntry extends Ref {
-    int hash;
-    Object key;
-    CacheEntry next;
-    public Object reconstitute() {
-        return null;
-    }
-}
-
-/**
- * The Cache class. Maps keys to values. Any object can be used as
- * a key and/or value.  This is very similar to the Hashtable
- * class, except that after putting an object into the Cache,
- * it is not guaranteed that a subsequent get will return it.
- * The Cache will automatically remove entries if memory is
- * getting tight and if the entry is not referenced from outside
- * the Cache.<p>
- *
- * To sucessfully store and retrieve objects from a hash table the
- * object used as the key must implement the hashCode() and equals()
- * methods.<p>
- *
- * This example creates a Cache of numbers. It uses the names of
- * the numbers as keys:
- * <pre>
- *      Cache numbers = new Cache();
- *      numbers.put("one", new Integer(1));
- *      numbers.put("two", new Integer(1));
- *      numbers.put("three", new Integer(1));
- * </pre>
- * To retrieve a number use:
- * <pre>
- *      Integer n = (Integer)numbers.get("two");
- *      if (n != null) {
- *          System.out.println("two = " + n);
- *      }
- * </pre>
- *
- * @see java.lang.Object#hashCode
- * @see java.lang.Object#equals
- * @see sun.misc.Ref
- */
-public
-class Cache extends Dictionary {
-    /**
-     * The hash table data.
-     */
-    private CacheEntry table[];
-
-    /**
-     * The total number of entries in the hash table.
-     */
-    private int count;
-
-    /**
-     * Rehashes the table when count exceeds this threshold.
-     */
-    private int threshold;
-
-    /**
-     * The load factor for the hashtable.
-     */
-    private float loadFactor;
-
-    private void init(int initialCapacity, float loadFactor) {
-        if ((initialCapacity <= 0) || (loadFactor <= 0.0)) {
-            throw new IllegalArgumentException();
-        }
-        this.loadFactor = loadFactor;
-        table = new CacheEntry[initialCapacity];
-        threshold = (int) (initialCapacity * loadFactor);
-    }
-
-    /**
-     * Constructs a new, empty Cache with the specified initial
-     * capacity and the specified load factor.
-     * @param initialCapacity the initial number of buckets
-     * @param loadFactor a number between 0.0 and 1.0, it defines
-     *          the threshold for rehashing the Cache into
-     *          a bigger one.
-     * @exception IllegalArgumentException If the initial capacity
-     * is less than or equal to zero.
-     * @exception IllegalArgumentException If the load factor is
-     * less than or equal to zero.
-     */
-    public Cache (int initialCapacity, float loadFactor) {
-        init(initialCapacity, loadFactor);
-    }
-
-    /**
-     * Constructs a new, empty Cache with the specified initial
-     * capacity.
-     * @param initialCapacity the initial number of buckets
-     */
-    public Cache (int initialCapacity) {
-        init(initialCapacity, 0.75f);
-    }
-
-    /**
-     * Constructs a new, empty Cache. A default capacity and load factor
-     * is used. Note that the Cache will automatically grow when it gets
-     * full.
-     */
-    public Cache () {
-        try {
-            init(101, 0.75f);
-        } catch (IllegalArgumentException ex) {
-            // This should never happen
-            throw new Error("panic");
-        }
-    }
-
-    /**
-     * Returns the number of elements contained within the Cache.
-     */
-    public int size() {
-        return count;
-    }
-
-    /**
-     * Returns true if the Cache contains no elements.
-     */
-    public boolean isEmpty() {
-        return count == 0;
-    }
-
-    /**
-     * Returns an enumeration of the Cache's keys.
-     * @see Cache#elements
-     * @see Enumeration
-     */
-    public synchronized Enumeration keys() {
-        return new CacheEnumerator(table, true);
-    }
-
-    /**
-     * Returns an enumeration of the elements. Use the Enumeration methods
-     * on the returned object to fetch the elements sequentially.
-     * @see Cache#keys
-     * @see Enumeration
-     */
-    public synchronized Enumeration elements() {
-        return new CacheEnumerator(table, false);
-    }
-
-    /**
-     * Gets the object associated with the specified key in the Cache.
-     * @param key the key in the hash table
-     * @returns the element for the key or null if the key
-     *          is not defined in the hash table.
-     * @see Cache#put
-     */
-    public synchronized Object get(Object key) {
-        CacheEntry tab[] = table;
-        int hash = key.hashCode();
-        int index = (hash & 0x7FFFFFFF) % tab.length;
-        for (CacheEntry e = tab[index]; e != null; e = e.next) {
-            if ((e.hash == hash) && e.key.equals(key)) {
-                return e.check();
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Rehashes the contents of the table into a bigger table.
-     * This is method is called automatically when the Cache's
-     * size exceeds the threshold.
-     */
-    protected void rehash() {
-        int oldCapacity = table.length;
-        CacheEntry oldTable[] = table;
-
-        int newCapacity = oldCapacity * 2 + 1;
-        CacheEntry newTable[] = new CacheEntry[newCapacity];
-
-        threshold = (int) (newCapacity * loadFactor);
-        table = newTable;
-
-        // System.out.println("rehash old=" + oldCapacity + ", new=" +
-        // newCapacity + ", thresh=" + threshold + ", count=" + count);
-
-        for (int i = oldCapacity; i-- > 0;) {
-            for (CacheEntry old = oldTable[i]; old != null;) {
-                CacheEntry e = old;
-                old = old.next;
-                if (e.check() != null) {
-                    int index = (e.hash & 0x7FFFFFFF) % newCapacity;
-                    e.next = newTable[index];
-                    newTable[index] = e;
-                } else
-                    count--;    /* remove entries that have disappeared */
-            }
-        }
-    }
-
-    /**
-     * Puts the specified element into the Cache, using the specified
-     * key.  The element may be retrieved by doing a get() with the same
-     * key.  The key and the element cannot be null.
-     * @param key the specified hashtable key
-     * @param value the specified element
-     * @return the old value of the key, or null if it did not have one.
-     * @exception NullPointerException If the value of the specified
-     * element is null.
-     * @see Cache#get
-     */
-    public synchronized Object put(Object key, Object value) {
-        // Make sure the value is not null
-        if (value == null) {
-            throw new NullPointerException();
-        }
-        // Makes sure the key is not already in the cache.
-        CacheEntry tab[] = table;
-        int hash = key.hashCode();
-        int index = (hash & 0x7FFFFFFF) % tab.length;
-        CacheEntry ne = null;
-        for (CacheEntry e = tab[index]; e != null; e = e.next) {
-            if ((e.hash == hash) && e.key.equals(key)) {
-                Object old = e.check();
-                e.setThing(value);
-                return old;
-            } else if (e.check() == null)
-                ne = e;         /* reuse old flushed value */
-        }
-
-        if (count >= threshold) {
-            // Rehash the table if the threshold is exceeded
-            rehash();
-            return put(key, value);
-        }
-        // Creates the new entry.
-        if (ne == null) {
-            ne = new CacheEntry ();
-            ne.next = tab[index];
-            tab[index] = ne;
-            count++;
-        }
-        ne.hash = hash;
-        ne.key = key;
-        ne.setThing(value);
-        return null;
-    }
-
-    /**
-     * Removes the element corresponding to the key. Does nothing if the
-     * key is not present.
-     * @param key the key that needs to be removed
-     * @return the value of key, or null if the key was not found.
-     */
-    public synchronized Object remove(Object key) {
-        CacheEntry tab[] = table;
-        int hash = key.hashCode();
-        int index = (hash & 0x7FFFFFFF) % tab.length;
-        for (CacheEntry e = tab[index], prev = null; e != null; prev = e, e = e.next) {
-            if ((e.hash == hash) && e.key.equals(key)) {
-                if (prev != null) {
-                    prev.next = e.next;
-                } else {
-                    tab[index] = e.next;
-                }
-                count--;
-                return e.check();
-            }
-        }
-        return null;
-    }
-}
-
-/**
- * A Cache enumerator class.  This class should remain opaque
- * to the client. It will use the Enumeration interface.
- */
-class CacheEnumerator implements Enumeration {
-    boolean keys;
-    int index;
-    CacheEntry table[];
-    CacheEntry entry;
-
-    CacheEnumerator (CacheEntry table[], boolean keys) {
-        this.table = table;
-        this.keys = keys;
-        this.index = table.length;
-    }
-
-    public boolean hasMoreElements() {
-        while (index >= 0) {
-            while (entry != null)
-                if (entry.check() != null)
-                    return true;
-                else
-                    entry = entry.next;
-            while (--index >= 0 && (entry = table[index]) == null) ;
-        }
-        return false;
-    }
-
-    public Object nextElement() {
-        while (index >= 0) {
-            if (entry == null)
-                while (--index >= 0 && (entry = table[index]) == null) ;
-            if (entry != null) {
-                CacheEntry e = entry;
-                entry = e.next;
-                if (e.check() != null)
-                    return keys ? e.key : e.check();
-            }
-        }
-        throw new NoSuchElementException("CacheEnumerator");
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/misc/ClassFileTransformer.java b/ojluni/src/main/java/sun/misc/ClassFileTransformer.java
deleted file mode 100755
index 61524ba..0000000
--- a/ojluni/src/main/java/sun/misc/ClassFileTransformer.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2001, 2008, 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.
- */
-package sun.misc;
-
-import java.util.ArrayList;
-
-/**
- * This is an abstract base class which is called by java.lang.ClassLoader
- * when ClassFormatError is thrown inside defineClass().
- *
- * The purpose of this class is to allow applications (e.g. Java Plug-in)
- * to have a chance to transform the byte code from one form to another
- * if necessary.
- *
- * One application of this class is used by Java Plug-in to transform
- * malformed JDK 1.1 class file into a well-formed Java 2 class file
- * on-the-fly, so JDK 1.1 applets with malformed class file in the
- * Internet may run in Java 2 after transformation.
- *
- * @author      Stanley Man-Kit Ho
- */
-
-public abstract class ClassFileTransformer
-{
-    // Singleton of ClassFileTransformer
-    //
-    private static ArrayList<ClassFileTransformer> transformerList
-        = new ArrayList<ClassFileTransformer>();
-    private static ClassFileTransformer[] transformers
-        = new ClassFileTransformer[0];
-
-    /**
-     * Add the class file transformer object.
-     *
-     * @param t Class file transformer instance
-     */
-    public static void add(ClassFileTransformer t)
-    {
-        synchronized(transformerList)
-        {
-            transformerList.add(t);
-            transformers = transformerList.toArray(new ClassFileTransformer[0]);
-        }
-    }
-
-    /**
-     * Get the array of ClassFileTransformer object.
-     *
-     * @return ClassFileTransformer object array
-     */
-    public static ClassFileTransformer[] getTransformers()
-    {
-        // transformers is not intended to be changed frequently,
-        // so it is okay to not put synchronized block here
-        // to speed up performance.
-        //
-        return transformers;
-    }
-
-
-    /**
-     * Transform a byte array from one to the other.
-     *
-     * @param b Byte array
-     * @param off Offset
-     * @param len Length of byte array
-     * @return Transformed byte array
-     */
-    public abstract byte[] transform(byte[] b, int off, int len)
-                           throws ClassFormatError;
-}
diff --git a/ojluni/src/main/java/sun/misc/ClassLoaderUtil.java b/ojluni/src/main/java/sun/misc/ClassLoaderUtil.java
deleted file mode 100755
index 61106db..0000000
--- a/ojluni/src/main/java/sun/misc/ClassLoaderUtil.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (c) 2006, 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.
- */
-
-package sun.misc;
-
-/**
- * Provides utility functions related to URLClassLoaders or subclasses of it.
- *
- *                  W  A  R  N  I  N  G
- *
- * This class uses undocumented, unpublished, private data structures inside
- * java.net.URLClassLoader and sun.misc.URLClassPath.  Use with extreme caution.
- *
- * @author      tjquinn
- */
-
-
-import java.io.IOException;
-import java.net.URLClassLoader;
-import java.util.*;
-import java.util.jar.JarFile;
-
-public class ClassLoaderUtil {
-
-    /**
-     * Releases resources held by a URLClassLoader. A new classloader must
-     * be created before the underlying resources can be accessed again.
-     * @param classLoader the instance of URLClassLoader (or a subclass)
-     */
-    public static void releaseLoader(URLClassLoader classLoader) {
-        releaseLoader(classLoader, null);
-    }
-
-    /**
-     * Releases resources held by a URLClassLoader.  Notably, close the jars
-     * opened by the loader. Initializes and updates the List of
-     * jars that have been successfully closed.
-     * <p>
-     * @param classLoader the instance of URLClassLoader (or a subclass)
-     * @param jarsClosed a List of Strings that will contain the names of jars
-     *  successfully closed; can be null if the caller does not need the information returned
-     * @return a List of IOExceptions reporting jars that failed to close; null
-     * indicates that an error other than an IOException occurred attempting to
-     * release the loader; empty indicates a successful release; non-empty
-     * indicates at least one error attempting to close an open jar.
-     */
-    public static List<IOException> releaseLoader(URLClassLoader classLoader, List<String> jarsClosed) {
-
-        List<IOException> ioExceptions = new LinkedList<IOException>();
-
-        try {
-            /* Records all IOExceptions thrown while closing jar files. */
-
-            if (jarsClosed != null) {
-                jarsClosed.clear();
-            }
-
-            URLClassPath ucp = SharedSecrets.getJavaNetAccess()
-                                                .getURLClassPath(classLoader);
-            ArrayList loaders = ucp.loaders;
-            Stack urls = ucp.urls;
-            HashMap lmap = ucp.lmap;
-
-            /*
-             *The urls variable in the URLClassPath object holds URLs that have not yet
-             *been used to resolve a resource or load a class and, therefore, do
-             *not yet have a loader associated with them.  Clear the stack so any
-             *future requests that might incorrectly reach the loader cannot be
-             *resolved and cannot open a jar file after we think we've closed
-             *them all.
-             */
-            synchronized(urls) {
-                urls.clear();
-            }
-
-            /*
-             *Also clear the map of URLs to loaders so the class loader cannot use
-             *previously-opened jar files - they are about to be closed.
-             */
-            synchronized(lmap) {
-                lmap.clear();
-            }
-
-            /*
-             *The URLClassPath object's path variable records the list of all URLs that are on
-             *the URLClassPath's class path.  Leave that unchanged.  This might
-             *help someone trying to debug why a released class loader is still used.
-             *Because the stack and lmap are now clear, code that incorrectly uses a
-             *the released class loader will trigger an exception if the
-             *class or resource would have been resolved by the class
-             *loader (and no other) if it had not been released.
-             *
-             *The list of URLs might provide some hints to the person as to where
-             *in the code the class loader was set up, which might in turn suggest
-             *where in the code the class loader needs to stop being used.
-             *The URLClassPath does not use the path variable to open new jar
-             *files - it uses the urls Stack for that - so leaving the path variable
-             *will not by itself allow the class loader to continue handling requests.
-             */
-
-            /*
-             *For each loader, close the jar file associated with that loader.
-             *
-             *The URLClassPath's use of loaders is sync-ed on the entire URLClassPath
-             *object.
-             */
-            synchronized (ucp) {
-                for (Object o : loaders) {
-                    if (o != null) {
-                        /*
-                         *If the loader is a JarLoader inner class and its jarFile
-                         *field is non-null then try to close that jar file.  Add
-                         *it to the list of closed files if successful.
-                         */
-                        if (o instanceof URLClassPath.JarLoader) {
-                                URLClassPath.JarLoader jl = (URLClassPath.JarLoader)o;
-                                JarFile jarFile = jl.getJarFile();
-                                try {
-                                    if (jarFile != null) {
-                                        jarFile.close();
-                                        if (jarsClosed != null) {
-                                            jarsClosed.add(jarFile.getName());
-                                        }
-                                    }
-                                } catch (IOException ioe) {
-                                    /*
-                                     *Wrap the IOException to identify which jar
-                                     *could not be closed and add it to the list
-                                     *of IOExceptions to be returned to the caller.
-                                     */
-                                    String jarFileName = (jarFile == null) ? "filename not available":jarFile.getName();
-                                    String msg = "Error closing JAR file: " + jarFileName;
-                                    IOException newIOE = new IOException(msg);
-                                    newIOE.initCause(ioe);
-                                    ioExceptions.add(newIOE);
-                                }
-                        }
-                    }
-                }
-                /*
-                 *Now clear the loaders ArrayList.
-                 */
-                loaders.clear();
-            }
-        } catch (Throwable t) {
-            throw new RuntimeException (t);
-        }
-        return ioExceptions;
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/Compare.java b/ojluni/src/main/java/sun/misc/Compare.java
deleted file mode 100755
index 400fc17..0000000
--- a/ojluni/src/main/java/sun/misc/Compare.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 1996, 1997, 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.
- */
-
-/**
- * Compare: an interface to enable users to define the result of
- *          a comparison of two objects.
- *
- * @author Sunita Mani
- */
-
-package sun.misc;
-
-public interface Compare {
-
-    /**
-     * doCompare
-     *
-     * @param  obj1 first object to compare.
-     * @param  obj2 second object to compare.
-     * @return -1 if obj1 < obj2, 0 if obj1 == obj2, 1 if obj1 > obj2.
-     */
-    public int doCompare(Object obj1, Object obj2);
-
-}
diff --git a/ojluni/src/main/java/sun/misc/ConditionLock.java b/ojluni/src/main/java/sun/misc/ConditionLock.java
deleted file mode 100755
index e1af525..0000000
--- a/ojluni/src/main/java/sun/misc/ConditionLock.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 1994, 2005, 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.
- */
-
-package sun.misc;
-
-/**
- * ConditionLock is a Lock with a built in state variable.  This class
- * provides the ability to wait for the state variable to be set to a
- * desired value and then acquire the lock.<p>
- *
- * The lockWhen() and unlockWith() methods can be safely intermixed
- * with the lock() and unlock() methods. However if there is a thread
- * waiting for the state variable to become a particular value and you
- * simply call Unlock(), that thread will not be able to acquire the
- * lock until the state variable equals its desired value. <p>
- *
- * @author      Peter King
- */
-public final
-class ConditionLock extends Lock {
-    private int state = 0;
-
-    /**
-     * Creates a ConditionLock.
-     */
-    public ConditionLock () {
-    }
-
-    /**
-     * Creates a ConditionLock in an initialState.
-     */
-    public ConditionLock (int initialState) {
-        state = initialState;
-    }
-
-    /**
-     * Acquires the lock when the state variable equals the desired state.
-     *
-     * @param desiredState the desired state
-     * @exception  java.lang.InterruptedException if any thread has
-     *               interrupted this thread.
-     */
-    public synchronized void lockWhen(int desiredState)
-        throws InterruptedException
-    {
-        while (state != desiredState) {
-            wait();
-        }
-        lock();
-    }
-
-    /**
-     * Releases the lock, and sets the state to a new value.
-     * @param newState the new state
-     */
-    public synchronized void unlockWith(int newState) {
-        state = newState;
-        unlock();
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/ExtensionDependency.java b/ojluni/src/main/java/sun/misc/ExtensionDependency.java
deleted file mode 100755
index ca9ad72..0000000
--- a/ojluni/src/main/java/sun/misc/ExtensionDependency.java
+++ /dev/null
@@ -1,568 +0,0 @@
-/*
- * Copyright (c) 1999, 2008, 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.
- */
-
-package sun.misc;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.FileNotFoundException;
-import java.util.StringTokenizer;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.jar.JarFile;
-import java.util.jar.Manifest;
-import java.util.jar.Attributes;
-import java.util.jar.Attributes.Name;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedExceptionAction;
-import java.security.PrivilegedActionException;
-import java.net.URL;
-import java.net.MalformedURLException;
-import sun.net.www.ParseUtil;
-
-/**
- * <p>
- * This class checks dependent extensions a particular jar file may have
- * declared through its manifest attributes.
- * </p>
- * Jar file declared dependent extensions through the extension-list
- * attribute. The extension-list contains a list of keys used to
- * fetch the other attributes describing the required extension.
- * If key is the extension key declared in the extension-list
- * attribute, the following describing attribute can be found in
- * the manifest :
- * key-Extension-Name:  (Specification package name)
- * key-Specification-Version: (Specification-Version)
- * key-Implementation-Version: (Implementation-Version)
- * key-Implementation-Vendor-Id: (Imlementation-Vendor-Id)
- * key-Implementation-Version: (Implementation version)
- * key-Implementation-URL: (URL to download the requested extension)
- * <p>
- * This class also maintain versioning consistency of installed
- * extensions dependencies declared in jar file manifest.
- * </p>
- * @author  Jerome Dochez
- */
-public class ExtensionDependency {
-
-    /* Callbak interfaces to delegate installation of missing extensions */
-    private static Vector providers;
-
-    /**
-     * <p>
-     * Register an ExtensionInstallationProvider. The provider is responsible
-     * for handling the installation (upgrade) of any missing extensions.
-     * </p>
-     * @param eip ExtensionInstallationProvider implementation
-     */
-    public synchronized static void addExtensionInstallationProvider
-        (ExtensionInstallationProvider eip)
-    {
-        if (providers == null) {
-            providers = new Vector();
-        }
-        providers.add(eip);
-    }
-
-    /**
-     * <p>
-     * Unregister a previously installed installation provider
-     * </p>
-     */
-    public synchronized  static void removeExtensionInstallationProvider
-        (ExtensionInstallationProvider eip)
-    {
-        providers.remove(eip);
-    }
-
-    /**
-     * <p>
-     * Checks the dependencies of the jar file on installed extension.
-     * </p>
-     * @param jarFile containing the attriutes declaring the dependencies
-     */
-    public static boolean checkExtensionsDependencies(JarFile jar)
-    {
-        if (providers == null) {
-            // no need to bother, nobody is registered to install missing
-            // extensions
-            return true;
-        }
-
-        try {
-            ExtensionDependency extDep = new ExtensionDependency();
-            return extDep.checkExtensions(jar);
-        } catch (ExtensionInstallationException e) {
-            debug(e.getMessage());
-        }
-        return false;
-    }
-
-    /*
-     * Check for all declared required extensions in the jar file
-     * manifest.
-     */
-    protected boolean checkExtensions(JarFile jar)
-        throws ExtensionInstallationException
-    {
-        Manifest man;
-        try {
-            man = jar.getManifest();
-        } catch (IOException e) {
-            return false;
-        }
-
-        if (man == null) {
-            // The applet does not define a manifest file, so
-            // we just assume all dependencies are satisfied.
-            return true;
-        }
-
-        boolean result = true;
-        Attributes attr = man.getMainAttributes();
-        if (attr != null) {
-            // Let's get the list of declared dependencies
-            String value = attr.getValue(Name.EXTENSION_LIST);
-            if (value != null) {
-                StringTokenizer st = new StringTokenizer(value);
-                // Iterate over all declared dependencies
-                while (st.hasMoreTokens()) {
-                    String extensionName = st.nextToken();
-                    debug("The file " + jar.getName() +
-                          " appears to depend on " + extensionName);
-                    // Sanity Check
-                    String extName = extensionName + "-" +
-                        Name.EXTENSION_NAME.toString();
-                    if (attr.getValue(extName) == null) {
-                        debug("The jar file " + jar.getName() +
-                              " appers to depend on "
-                              + extensionName + " but does not define the " +
-                              extName + " attribute in its manifest ");
-
-                    } else {
-                        if (!checkExtension(extensionName, attr)) {
-                            debug("Failed installing " + extensionName);
-                            result = false;
-                        }
-                    }
-                }
-            } else {
-                debug("No dependencies for " + jar.getName());
-            }
-        }
-        return result;
-    }
-
-
-    /*
-     * <p>
-     * Check that a particular dependency on an extension is satisfied.
-     * </p>
-     * @param extensionName is the key used for the attributes in the manifest
-     * @param attr is the attributes of the manifest file
-     *
-     * @return true if the dependency is satisfied by the installed extensions
-     */
-    protected synchronized boolean checkExtension(final String extensionName,
-                                     final Attributes attr)
-        throws ExtensionInstallationException
-    {
-        debug("Checking extension " + extensionName);
-        if (checkExtensionAgainstInstalled(extensionName, attr))
-            return true;
-
-        debug("Extension not currently installed ");
-        ExtensionInfo reqInfo = new ExtensionInfo(extensionName, attr);
-        return installExtension(reqInfo, null);
-    }
-
-    /*
-     * <p>
-     * Check if a particular extension is part of the currently installed
-     * extensions.
-     * </p>
-     * @param extensionName is the key for the attributes in the manifest
-     * @param attr is the attributes of the manifest
-     *
-     * @return true if the requested extension is already installed
-     */
-    boolean checkExtensionAgainstInstalled(String extensionName,
-                                           Attributes attr)
-        throws ExtensionInstallationException
-    {
-        File fExtension = checkExtensionExists(extensionName);
-
-        if (fExtension != null) {
-        // Extension already installed, just check against this one
-            try {
-                if (checkExtensionAgainst(extensionName, attr, fExtension))
-                    return true;
-            } catch (FileNotFoundException e) {
-                debugException(e);
-            } catch (IOException e) {
-                debugException(e);
-            }
-            return false;
-
-        } else {
-        // Not sure if extension is already installed, so check all the
-        // installed extension jar files to see if we get a match
-
-            File[] installedExts;
-
-            try {
-            // Get the list of installed extension jar files so we can
-            // compare the installed versus the requested extension
-                installedExts = getInstalledExtensions();
-            } catch(IOException e) {
-                debugException(e);
-                return false;
-            }
-
-            for (int i=0;i<installedExts.length;i++) {
-                try {
-                    if (checkExtensionAgainst(extensionName, attr, installedExts[i]))
-                        return true;
-                } catch (FileNotFoundException e) {
-                    debugException(e);
-                } catch (IOException e) {
-                    debugException(e);
-                    // let's continue with the next installed extension
-                }
-            }
-        }
-        return false;
-    }
-
-    /*
-     * <p>
-     * Check if the requested extension described by the attributes
-     * in the manifest under the key extensionName is compatible with
-     * the jar file.
-     * </p>
-     *
-     * @param extensionName key in the attibute list
-     * @param attr manifest file attributes
-     * @param file installed extension jar file to compare the requested
-     * extension against.
-     */
-    protected boolean checkExtensionAgainst(String extensionName,
-                                            Attributes attr,
-                                            final File file)
-        throws IOException,
-               FileNotFoundException,
-               ExtensionInstallationException
-    {
-
-        debug("Checking extension " + extensionName +
-              " against " + file.getName());
-
-        // Load the jar file ...
-        Manifest man;
-        try {
-            man = AccessController.doPrivileged(
-                new PrivilegedExceptionAction<Manifest>() {
-                    public Manifest run()
-                            throws IOException, FileNotFoundException {
-                         if (!file.exists())
-                             throw new FileNotFoundException(file.getName());
-                         JarFile jarFile =  new JarFile(file);
-                         return jarFile.getManifest();
-                     }
-                 });
-        } catch(PrivilegedActionException e) {
-            if (e.getException() instanceof FileNotFoundException)
-                throw (FileNotFoundException) e.getException();
-            throw (IOException) e.getException();
-        }
-
-        // Construct the extension information object
-        ExtensionInfo reqInfo = new ExtensionInfo(extensionName, attr);
-        debug("Requested Extension : " + reqInfo);
-
-        int isCompatible = ExtensionInfo.INCOMPATIBLE;
-        ExtensionInfo instInfo = null;
-
-        if (man != null) {
-            Attributes instAttr = man.getMainAttributes();
-            if (instAttr != null) {
-                instInfo = new ExtensionInfo(null, instAttr);
-                debug("Extension Installed " + instInfo);
-                isCompatible = instInfo.isCompatibleWith(reqInfo);
-                switch(isCompatible) {
-                case ExtensionInfo.COMPATIBLE:
-                    debug("Extensions are compatible");
-                    return true;
-
-                case ExtensionInfo.INCOMPATIBLE:
-                    debug("Extensions are incompatible");
-                    return false;
-
-                default:
-                    // everything else
-                    debug("Extensions require an upgrade or vendor switch");
-                    return installExtension(reqInfo, instInfo);
-
-                }
-            }
-        }
-        return false;
-    }
-
-    /*
-     * <p>
-     * An required extension is missing, if an ExtensionInstallationProvider is
-     * registered, delegate the installation of that particular extension to it.
-     * </p>
-     *
-     * @param reqInfo Missing extension information
-     * @param instInfo Older installed version information
-     *
-     * @return true if the installation is successful
-     */
-    protected boolean installExtension(ExtensionInfo reqInfo,
-                                       ExtensionInfo instInfo)
-        throws ExtensionInstallationException
-    {
-
-        Vector currentProviders;
-        synchronized(providers) {
-            currentProviders = (Vector) providers.clone();
-        }
-        for (Enumeration e=currentProviders.elements();e.hasMoreElements();) {
-            ExtensionInstallationProvider eip =
-                (ExtensionInstallationProvider) e.nextElement();
-
-            if (eip!=null) {
-                // delegate the installation to the provider
-                if (eip.installExtension(reqInfo, instInfo)) {
-                    debug(reqInfo.name + " installation successful");
-                    Launcher.ExtClassLoader cl = (Launcher.ExtClassLoader)
-                        Launcher.getLauncher().getClassLoader().getParent();
-                    addNewExtensionsToClassLoader(cl);
-                    return true;
-                }
-            }
-        }
-        // We have tried all of our providers, noone could install this
-        // extension, we just return failure at this point
-        debug(reqInfo.name + " installation failed");
-        return false;
-    }
-
-    /**
-     * <p>
-     * Checks if the extension, that is specified in the extension-list in
-     * the applet jar manifest, is already installed (i.e. exists in the
-     * extension directory).
-     * </p>
-     *
-     * @param extensionName extension name in the extension-list
-     *
-     * @return the extension if it exists in the extension directory
-     */
-    private File checkExtensionExists(String extensionName) {
-        // Function added to fix bug 4504166
-        final String extName = extensionName;
-        final String[] fileExt = {".jar", ".zip"};
-
-        return AccessController.doPrivileged(
-            new PrivilegedAction<File>() {
-                public File run() {
-                    try {
-                        File fExtension;
-                        File[] dirs = getExtDirs();
-
-                        // Search the extension directories for the extension that is specified
-                        // in the attribute extension-list in the applet jar manifest
-                        for (int i=0;i<dirs.length;i++) {
-                            for (int j=0;j<fileExt.length;j++) {
-                                if (extName.toLowerCase().endsWith(fileExt[j])) {
-                                    fExtension = new File(dirs[i], extName);
-                                } else {
-                                    fExtension = new File(dirs[i], extName+fileExt[j]);
-                                }
-                                debug("checkExtensionExists:fileName " + fExtension.getName());
-                                if (fExtension.exists()) {
-                                    return fExtension;
-                                }
-                            }
-                        }
-                        return null;
-
-                    } catch(Exception e) {
-                         debugException(e);
-                         return null;
-                    }
-                }
-            });
-    }
-
-    /**
-     * <p>
-     * @return the java.ext.dirs property as a list of directory
-     * </p>
-     */
-    private static File[] getExtDirs() {
-        String s = java.security.AccessController.doPrivileged(
-                new sun.security.action.GetPropertyAction("java.ext.dirs"));
-
-        File[] dirs;
-        if (s != null) {
-            StringTokenizer st =
-                new StringTokenizer(s, File.pathSeparator);
-            int count = st.countTokens();
-            debug("getExtDirs count " + count);
-            dirs = new File[count];
-            for (int i = 0; i < count; i++) {
-                dirs[i] = new File(st.nextToken());
-                debug("getExtDirs dirs["+i+"] "+ dirs[i]);
-            }
-        } else {
-            dirs = new File[0];
-            debug("getExtDirs dirs " + dirs);
-        }
-        debug("getExtDirs dirs.length " + dirs.length);
-        return dirs;
-    }
-
-    /*
-     * <p>
-     * Scan the directories and return all files installed in those
-     * </p>
-     * @param dirs list of directories to scan
-     *
-     * @return the list of files installed in all the directories
-     */
-    private static File[] getExtFiles(File[] dirs) throws IOException {
-        Vector<File> urls = new Vector<File>();
-        for (int i = 0; i < dirs.length; i++) {
-            String[] files = dirs[i].list(new JarFilter());
-            if (files != null) {
-                debug("getExtFiles files.length " + files.length);
-                for (int j = 0; j < files.length; j++) {
-                    File f = new File(dirs[i], files[j]);
-                    urls.add(f);
-                    debug("getExtFiles f["+j+"] "+ f);
-                }
-            }
-        }
-        File[] ua = new File[urls.size()];
-        urls.copyInto(ua);
-        debug("getExtFiles ua.length " + ua.length);
-        return ua;
-    }
-
-    /*
-     * <p>
-     * @return the list of installed extensions jar files
-     * </p>
-     */
-    private File[] getInstalledExtensions() throws IOException {
-        return AccessController.doPrivileged(
-            new PrivilegedAction<File[]>() {
-                public File[] run() {
-                     try {
-                         return getExtFiles(getExtDirs());
-                     } catch(IOException e) {
-                         debug("Cannot get list of installed extensions");
-                         debugException(e);
-                        return new File[0];
-                     }
-                 }
-            });
-    }
-
-    /*
-     * <p>
-     * Add the newly installed jar file to the extension class loader.
-     * </p>
-     *
-     * @param cl the current installed extension class loader
-     *
-     * @return true if successful
-     */
-    private Boolean addNewExtensionsToClassLoader(Launcher.ExtClassLoader cl) {
-        try {
-            File[] installedExts = getInstalledExtensions();
-            for (int i=0;i<installedExts.length;i++) {
-                final File instFile = installedExts[i];
-                URL instURL = AccessController.doPrivileged(
-                    new PrivilegedAction<URL>() {
-                        public URL run() {
-                            try {
-                                return ParseUtil.fileToEncodedURL(instFile);
-                            } catch (MalformedURLException e) {
-                                debugException(e);
-                                return null;
-                            }
-                        }
-                    });
-                if (instURL != null) {
-                    URL[] urls = cl.getURLs();
-                    boolean found=false;
-                    for (int j = 0; j<urls.length; j++) {
-                        debug("URL["+j+"] is " + urls[j] + " looking for "+
-                                           instURL);
-                        if (urls[j].toString().compareToIgnoreCase(
-                                    instURL.toString())==0) {
-                            found=true;
-                            debug("Found !");
-                        }
-                    }
-                    if (!found) {
-                        debug("Not Found ! adding to the classloader " +
-                              instURL);
-                        cl.addExtURL(instURL);
-                    }
-                }
-            }
-        } catch (MalformedURLException e) {
-            e.printStackTrace();
-        } catch (IOException e) {
-            e.printStackTrace();
-            // let's continue with the next installed extension
-        }
-        return Boolean.TRUE;
-    }
-
-    // True to display all debug and trace messages
-    static final boolean DEBUG = false;
-
-    private static void debug(String s) {
-        if (DEBUG) {
-            System.err.println(s);
-        }
-    }
-
-    private void debugException(Throwable e) {
-        if (DEBUG) {
-            e.printStackTrace();
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/misc/ExtensionInfo.java b/ojluni/src/main/java/sun/misc/ExtensionInfo.java
deleted file mode 100755
index 8b53637..0000000
--- a/ojluni/src/main/java/sun/misc/ExtensionInfo.java
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
- * Copyright (c) 1999, 2004, 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.
- */
-
-package sun.misc;
-
-import java.util.StringTokenizer;
-import java.util.jar.Attributes;
-import java.util.jar.Attributes.Name;
-import java.util.ResourceBundle;
-import java.util.MissingResourceException;
-import java.text.MessageFormat;
-import java.lang.Character.*;
-
-
-/**
- * This class holds all necessary information to install or
- * upgrade a extension on the user's disk
- *
- * @author  Jerome Dochez
- */
-public class ExtensionInfo {
-
-    /**
-     * <p>
-     * public static values returned by the isCompatible method
-     * </p>
-     */
-    public static final int COMPATIBLE = 0;
-    public static final int REQUIRE_SPECIFICATION_UPGRADE = 1;
-    public static final int REQUIRE_IMPLEMENTATION_UPGRADE = 2;
-    public static final int REQUIRE_VENDOR_SWITCH = 3;
-    public static final int INCOMPATIBLE = 4;
-
-    /**
-     * <p>
-     * attributes fully describer an extension. The underlying described
-     * extension may be installed and requested.
-     * <p>
-     */
-    public String title;
-    public String name;
-    public String specVersion;
-    public String specVendor;
-    public String implementationVersion;
-    public String vendor;
-    public String vendorId;
-    public String url;
-
-    // For I18N support
-    private static final ResourceBundle rb =
-        ResourceBundle.getBundle("sun.misc.resources.Messages");
-
-
-    /**
-     * <p>
-     * Create a new uninitialized extension information object
-     * </p>
-     */
-    public ExtensionInfo() {
-    }
-
-    /**
-     * <p>
-     * Create and initialize an extension information object.
-     * The initialization uses the attributes passed as being
-     * the content of a manifest file to load the extension
-     * information from.
-     * Since manifest file may contain information on several
-     * extension they may depend on, the extension key parameter
-     * is prepanded to the attribute name to make the key used
-     * to retrieve the attribute from the manifest file
-     * <p>
-     * @param extensionKey unique extension key in the manifest
-     * @param attr Attributes of a manifest file
-     */
-    public ExtensionInfo(String extensionKey, Attributes attr)
-        throws NullPointerException
-    {
-        String s;
-        if (extensionKey!=null) {
-            s = extensionKey + "-";
-        } else {
-            s ="";
-        }
-
-        String attrKey = s + Name.EXTENSION_NAME.toString();
-        name = attr.getValue(attrKey);
-        if (name != null)
-            name = name.trim();
-
-        attrKey = s + Name.SPECIFICATION_TITLE.toString();
-        title = attr.getValue(attrKey);
-        if (title != null)
-            title = title.trim();
-
-        attrKey = s + Name.SPECIFICATION_VERSION.toString();
-        specVersion = attr.getValue(attrKey);
-        if (specVersion != null)
-            specVersion = specVersion.trim();
-
-        attrKey = s + Name.SPECIFICATION_VENDOR.toString();
-        specVendor = attr.getValue(attrKey);
-        if (specVendor != null)
-            specVendor = specVendor.trim();
-
-        attrKey = s + Name.IMPLEMENTATION_VERSION.toString();
-        implementationVersion = attr.getValue(attrKey);
-        if (implementationVersion != null)
-            implementationVersion = implementationVersion.trim();
-
-        attrKey = s + Name.IMPLEMENTATION_VENDOR.toString();
-        vendor = attr.getValue(attrKey);
-        if (vendor != null)
-            vendor = vendor.trim();
-
-        attrKey = s + Name.IMPLEMENTATION_VENDOR_ID.toString();
-        vendorId = attr.getValue(attrKey);
-        if (vendorId != null)
-            vendorId = vendorId.trim();
-
-        attrKey =s + Name.IMPLEMENTATION_URL.toString();
-        url = attr.getValue(attrKey);
-        if (url != null)
-            url = url.trim();
-    }
-
-    /**
-     * <p>
-     * @return true if the extension described by this extension information
-     * is compatible with the extension described by the extension
-     * information passed as a parameter
-     * </p>
-     *
-     * @param the requested extension information to compare to
-     */
-    public int isCompatibleWith(ExtensionInfo ei) {
-
-        if (name == null || ei.name == null)
-            return INCOMPATIBLE;
-        if (name.compareTo(ei.name)==0) {
-            // is this true, if not spec version is specified, we consider
-            // the value as being "any".
-            if (specVersion == null || ei.specVersion == null)
-                return COMPATIBLE;
-
-            int version = compareExtensionVersion(specVersion, ei.specVersion);
-            if (version<0) {
-                // this extension specification is "older"
-                if (vendorId != null && ei.vendorId !=null) {
-                    if (vendorId.compareTo(ei.vendorId)!=0) {
-                        return REQUIRE_VENDOR_SWITCH;
-                    }
-                }
-                return REQUIRE_SPECIFICATION_UPGRADE;
-            } else {
-                // the extension spec is compatible, let's look at the
-                // implementation attributes
-                if (vendorId != null && ei.vendorId != null) {
-                    // They care who provides the extension
-                    if (vendorId.compareTo(ei.vendorId)!=0) {
-                        // They want to use another vendor implementation
-                        return REQUIRE_VENDOR_SWITCH;
-                    } else {
-                        // Vendor matches, let's see the implementation version
-                        if (implementationVersion != null && ei.implementationVersion != null) {
-                            // they care about the implementation version
-                            version = compareExtensionVersion(implementationVersion, ei.implementationVersion);
-                            if (version<0) {
-                                // This extension is an older implementation
-                                return REQUIRE_IMPLEMENTATION_UPGRADE;
-                            }
-                        }
-                    }
-                }
-                // All othe cases, we consider the extensions to be compatible
-                return COMPATIBLE;
-            }
-        }
-        return INCOMPATIBLE;
-    }
-
-    /**
-     * <p>
-     * helper method to print sensible information on the undelying described
-     * extension
-     * </p>
-     */
-    public String toString() {
-        return "Extension : title(" + title + "), name(" + name + "), spec vendor(" +
-            specVendor + "), spec version(" + specVersion + "), impl vendor(" +
-            vendor + "), impl vendor id(" + vendorId + "), impl version(" +
-            implementationVersion + "), impl url(" + url + ")";
-    }
-
-    /*
-     * <p>
-     * helper method to compare two versions.
-     * version are in the x.y.z.t pattern.
-     * </p>
-     * @param source version to compare to
-     * @param target version used to compare against
-     * @return < 0 if source < version
-     *         > 0 if source > version
-     *         = 0 if source = version
-     */
-    private int compareExtensionVersion(String source, String target)
-        throws NumberFormatException
-    {
-        source = source.toLowerCase();
-        target = target.toLowerCase();
-
-        return strictCompareExtensionVersion(source, target);
-    }
-
-
-    /*
-     * <p>
-     * helper method to compare two versions.
-     * version are in the x.y.z.t pattern.
-     * </p>
-     * @param source version to compare to
-     * @param target version used to compare against
-     * @return < 0 if source < version
-     *         > 0 if source > version
-     *         = 0 if source = version
-     */
-    private int strictCompareExtensionVersion(String source, String target)
-        throws NumberFormatException
-    {
-        if (source.equals(target))
-            return 0;
-
-        StringTokenizer stk = new StringTokenizer(source, ".,");
-        StringTokenizer ttk = new StringTokenizer(target, ".,");
-
-        // Compare number
-        int n = 0, m = 0, result = 0;
-
-        // Convert token into meaning number for comparision
-        if (stk.hasMoreTokens())
-            n = convertToken(stk.nextToken().toString());
-
-        // Convert token into meaning number for comparision
-        if (ttk.hasMoreTokens())
-            m = convertToken(ttk.nextToken().toString());
-
-        if (n > m)
-            return 1;
-        else if (m > n)
-            return -1;
-        else
-        {
-            // Look for index of "." in the string
-            int sIdx = source.indexOf(".");
-            int tIdx = target.indexOf(".");
-
-            if (sIdx == -1)
-                sIdx = source.length() - 1;
-
-            if (tIdx == -1)
-                tIdx = target.length() - 1;
-
-            return strictCompareExtensionVersion(source.substring(sIdx + 1),
-                                                 target.substring(tIdx + 1));
-        }
-    }
-
-    private int convertToken(String token)
-    {
-        if (token == null || token.equals(""))
-            return 0;
-
-        int charValue = 0;
-        int charVersion = 0;
-        int patchVersion = 0;
-        int strLength = token.length();
-        int endIndex = strLength;
-        char lastChar;
-
-        Object[] args = {name};
-        MessageFormat mf = new MessageFormat(rb.getString("optpkg.versionerror"));
-        String versionError = mf.format(args);
-
-        // Look for "-" for pre-release
-        int prIndex = token.indexOf("-");
-
-        // Look for "_" for patch release
-        int patchIndex = token.indexOf("_");
-
-        if (prIndex == -1 && patchIndex == -1)
-        {
-            // This is a FCS release
-            try {
-                return Integer.parseInt(token) * 100;
-            } catch (NumberFormatException e) {
-                System.out.println(versionError);
-                return 0;
-            }
-        }
-        else if (patchIndex != -1)
-        {
-            // This is a patch (update) release
-            int prversion;
-            try {
-                // Obtain the version
-                prversion = Integer.parseInt(token.substring(0, patchIndex));
-
-                // Check to see if the patch version is in the n.n.n_nnl format (special release)
-                lastChar = token.charAt(strLength-1);
-                if (Character.isLetter(lastChar)) {
-                    // letters a-z have values from 10-35
-                    charValue = Character.getNumericValue(lastChar);
-                    endIndex = strLength-1;
-
-                    // Obtain the patch version id
-                    patchVersion = Integer.parseInt(token.substring(patchIndex+1, endIndex));
-
-                    if (charValue >= Character.getNumericValue('a') && charValue <= Character.getNumericValue('z')) {
-                        // This is a special release
-                        charVersion = (patchVersion * 100) + charValue;
-                    } else {
-                        // character is not a a-z letter, ignore
-                        charVersion = 0;
-                        System.out.println(versionError);
-                    }
-                } else {
-                    // This is a regular update release. Obtain the patch version id
-                    patchVersion = Integer.parseInt(token.substring(patchIndex+1, endIndex));
-                }
-            } catch (NumberFormatException e) {
-                System.out.println(versionError);
-                return 0;
-            }
-            return prversion * 100 + (patchVersion + charVersion);
-        }
-        else
-        {
-            //This is a milestone release, either a early access, alpha, beta, or RC
-
-            // Obtain the version
-            int mrversion;
-            try {
-                mrversion = Integer.parseInt(token.substring(0, prIndex));
-            } catch (NumberFormatException e) {
-                System.out.println(versionError);
-                return 0;
-            }
-
-            // Obtain the patch version string, including the milestone + version
-            String prString = token.substring(prIndex + 1);
-
-            // Milestone version
-            String msVersion = "";
-            int delta = 0;
-
-            if (prString.indexOf("ea") != -1)
-            {
-                msVersion = prString.substring(2);
-                delta = 50;
-            }
-            else if (prString.indexOf("alpha") != -1)
-            {
-                msVersion = prString.substring(5);
-                delta = 40;
-            }
-            else if (prString.indexOf("beta") != -1)
-            {
-                msVersion = prString.substring(4);
-                delta = 30;
-            }
-            else if (prString.indexOf("rc") != -1)
-            {
-                msVersion = prString.substring(2);
-                delta = 20;
-            }
-
-            if (msVersion == null || msVersion.equals(""))
-            {
-                // No version after the milestone, assume 0
-                return mrversion * 100 - delta ;
-            }
-            else
-            {
-                // Convert the milestone version
-                try {
-                    return mrversion * 100 - delta + Integer.parseInt(msVersion);
-                } catch (NumberFormatException e) {
-                    System.out.println(versionError);
-                    return 0;
-                }
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/ExtensionInstallationException.java b/ojluni/src/main/java/sun/misc/ExtensionInstallationException.java
deleted file mode 100755
index 61f484a..0000000
--- a/ojluni/src/main/java/sun/misc/ExtensionInstallationException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.
- */
-
-package sun.misc;
-
-/*
- * Exception when installation of an extension has failed for
- * any reason
- *
- * @author  Jerome Dochez
- */
-
-public class ExtensionInstallationException extends Exception {
-
-    /*
-     * <p>
-     * Construct a new exception with an exception reason
-     * </p>
-     */
-    public ExtensionInstallationException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/ExtensionInstallationProvider.java b/ojluni/src/main/java/sun/misc/ExtensionInstallationProvider.java
deleted file mode 100755
index 0b24a13..0000000
--- a/ojluni/src/main/java/sun/misc/ExtensionInstallationProvider.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.
- */
-
-package sun.misc;
-
-/**
- * This interface defines the contract a extension installation capable
- * provided to the extension installation dependency mechanism to
- * install new extensions on the user's disk
- *
- * @author  Jerome Dochez
- */
-public interface ExtensionInstallationProvider {
-
-    /*
-     * <p>
-     * Request the installation of an extension in the extension directory
-     * </p>
-     *
-     * @param requestExtInfo information on the extension that need to be
-     * installed
-     * @param installedExtInfo information on the current compatible installed
-     * extension. Can be null if no current installation has been found.
-     * @return true if the installation is successful, false if the
-     * installation could not be attempted.
-     * @exception ExtensionInstallationException if an installation was
-     * attempted but did not succeed.
-     */
-    boolean installExtension(ExtensionInfo requestExtInfo,
-                             ExtensionInfo installedExtInfo)
-        throws ExtensionInstallationException;
-}
diff --git a/ojluni/src/main/java/sun/misc/GC.java b/ojluni/src/main/java/sun/misc/GC.java
deleted file mode 100755
index c77bf1d..0000000
--- a/ojluni/src/main/java/sun/misc/GC.java
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
- * Copyright (c) 1998, 2008, 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.
- */
-
-package sun.misc;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-
-/**
- * Support for garbage-collection latency requests.
- *
- * @author   Mark Reinhold
- * @since    1.2
- */
-
-public class GC {
-
-    private GC() { }            /* To prevent instantiation */
-
-
-    /* Latency-target value indicating that there's no active target
-     */
-    private static final long NO_TARGET = Long.MAX_VALUE;
-
-    /* The current latency target, or NO_TARGET if there is no target
-     */
-    private static long latencyTarget = NO_TARGET;
-
-    /* The daemon thread that implements the latency-target mechanism,
-     * or null if there is presently no daemon thread
-     */
-    private static Thread daemon = null;
-
-    /* The lock object for the latencyTarget and daemon fields.  The daemon
-     * thread, if it exists, waits on this lock for notification that the
-     * latency target has changed.
-     */
-    private static class LatencyLock extends Object { };
-    private static Object lock = new LatencyLock();
-
-
-    /**
-     * Returns the maximum <em>object-inspection age</em>, which is the number
-     * of real-time milliseconds that have elapsed since the
-     * least-recently-inspected heap object was last inspected by the garbage
-     * collector.
-     *
-     * <p> For simple stop-the-world collectors this value is just the time
-     * since the most recent collection.  For generational collectors it is the
-     * time since the oldest generation was most recently collected.  Other
-     * collectors are free to return a pessimistic estimate of the elapsed
-     * time, or simply the time since the last full collection was performed.
-     *
-     * <p> Note that in the presence of reference objects, a given object that
-     * is no longer strongly reachable may have to be inspected multiple times
-     * before it can be reclaimed.
-     */
-    public static native long maxObjectInspectionAge();
-
-
-    private static class Daemon extends Thread {
-
-        public void run() {
-            for (;;) {
-                long l;
-                synchronized (lock) {
-
-                    l = latencyTarget;
-                    if (l == NO_TARGET) {
-                        /* No latency target, so exit */
-                        GC.daemon = null;
-                        return;
-                    }
-
-                    long d = maxObjectInspectionAge();
-                    if (d >= l) {
-                        /* Do a full collection.  There is a remote possibility
-                         * that a full collection will occurr between the time
-                         * we sample the inspection age and the time the GC
-                         * actually starts, but this is sufficiently unlikely
-                         * that it doesn't seem worth the more expensive JVM
-                         * interface that would be required.
-                         */
-                        System.gc();
-                        d = 0;
-                    }
-
-                    /* Wait for the latency period to expire,
-                     * or for notification that the period has changed
-                     */
-                    try {
-                        lock.wait(l - d);
-                    } catch (InterruptedException x) {
-                        continue;
-                    }
-                }
-            }
-        }
-
-        private Daemon(ThreadGroup tg) {
-            super(tg, "GC Daemon");
-        }
-
-        /* Create a new daemon thread in the root thread group */
-        public static void create() {
-            PrivilegedAction<Void> pa = new PrivilegedAction<Void>() {
-                public Void run() {
-                    ThreadGroup tg = Thread.currentThread().getThreadGroup();
-                    for (ThreadGroup tgn = tg;
-                         tgn != null;
-                         tg = tgn, tgn = tg.getParent());
-                    Daemon d = new Daemon(tg);
-                    d.setDaemon(true);
-                    d.setPriority(Thread.MIN_PRIORITY + 1);
-                    d.start();
-                    GC.daemon = d;
-                    return null;
-                }};
-            AccessController.doPrivileged(pa);
-        }
-
-    }
-
-
-    /* Sets the latency target to the given value.
-     * Must be invoked while holding the lock.
-     */
-    private static void setLatencyTarget(long ms) {
-        latencyTarget = ms;
-        if (daemon == null) {
-            /* Create a new daemon thread */
-            Daemon.create();
-        } else {
-            /* Notify the existing daemon thread
-             * that the lateency target has changed
-             */
-            lock.notify();
-        }
-    }
-
-
-    /**
-     * Represents an active garbage-collection latency request.  Instances of
-     * this class are created by the <code>{@link #requestLatency}</code>
-     * method.  Given a request, the only interesting operation is that of
-     * cancellation.
-     */
-    public static class LatencyRequest
-        implements Comparable<LatencyRequest> {
-
-        /* Instance counter, used to generate unique identifers */
-        private static long counter = 0;
-
-        /* Sorted set of active latency requests */
-        private static SortedSet<LatencyRequest> requests = null;
-
-        /* Examine the request set and reset the latency target if necessary.
-         * Must be invoked while holding the lock.
-         */
-        private static void adjustLatencyIfNeeded() {
-            if ((requests == null) || requests.isEmpty()) {
-                if (latencyTarget != NO_TARGET) {
-                    setLatencyTarget(NO_TARGET);
-                }
-            } else {
-                LatencyRequest r = requests.first();
-                if (r.latency != latencyTarget) {
-                    setLatencyTarget(r.latency);
-                }
-            }
-        }
-
-        /* The requested latency, or NO_TARGET
-         * if this request has been cancelled
-         */
-        private long latency;
-
-        /* Unique identifier for this request */
-        private long id;
-
-        private LatencyRequest(long ms) {
-            if (ms <= 0) {
-                throw new IllegalArgumentException("Non-positive latency: "
-                                                   + ms);
-            }
-            this.latency = ms;
-            synchronized (lock) {
-                this.id = ++counter;
-                if (requests == null) {
-                    requests = new TreeSet<LatencyRequest>();
-                }
-                requests.add(this);
-                adjustLatencyIfNeeded();
-            }
-        }
-
-        /**
-         * Cancels this latency request.
-         *
-         * @throws  IllegalStateException
-         *          If this request has already been cancelled
-         */
-        public void cancel() {
-            synchronized (lock) {
-                if (this.latency == NO_TARGET) {
-                    throw new IllegalStateException("Request already"
-                                                    + " cancelled");
-                }
-                if (!requests.remove(this)) {
-                    throw new InternalError("Latency request "
-                                            + this + " not found");
-                }
-                if (requests.isEmpty()) requests = null;
-                this.latency = NO_TARGET;
-                adjustLatencyIfNeeded();
-            }
-        }
-
-        public int compareTo(LatencyRequest r) {
-            long d = this.latency - r.latency;
-            if (d == 0) d = this.id - r.id;
-            return (d < 0) ? -1 : ((d > 0) ? +1 : 0);
-        }
-
-        public String toString() {
-            return (LatencyRequest.class.getName()
-                    + "[" + latency + "," + id + "]");
-        }
-
-    }
-
-
-    /**
-     * Makes a new request for a garbage-collection latency of the given
-     * number of real-time milliseconds.  A low-priority daemon thread makes a
-     * best effort to ensure that the maximum object-inspection age never
-     * exceeds the smallest of the currently active requests.
-     *
-     * @param   latency
-     *          The requested latency
-     *
-     * @throws  IllegalArgumentException
-     *          If the given <code>latency</code> is non-positive
-     */
-    public static LatencyRequest requestLatency(long latency) {
-        return new LatencyRequest(latency);
-    }
-
-
-    /**
-     * Returns the current smallest garbage-collection latency request, or zero
-     * if there are no active requests.
-     */
-    public static long currentLatencyTarget() {
-        long t = latencyTarget;
-        return (t == NO_TARGET) ? 0 : t;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/misc/JarFilter.java b/ojluni/src/main/java/sun/misc/JarFilter.java
deleted file mode 100755
index 0af055f..0000000
--- a/ojluni/src/main/java/sun/misc/JarFilter.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2001, 2006, 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.
- */
-
-package sun.misc;
-
-import java.io.File;
-import java.io.FilenameFilter;
-
-/**
- * <p>
- * This class checks that only jar and zip files are included in the file list.
- * This class is used in extension installation support (ExtensionDependency).
- * <p>
- *
- * @author  Michael Colburn
- */
-public class JarFilter implements FilenameFilter {
-
-    public boolean accept(File dir, String name) {
-        String lower = name.toLowerCase();
-        return lower.endsWith(".jar") || lower.endsWith(".zip");
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/JavaAWTAccess.java b/ojluni/src/main/java/sun/misc/JavaAWTAccess.java
deleted file mode 100755
index 462eb9a..0000000
--- a/ojluni/src/main/java/sun/misc/JavaAWTAccess.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2012, 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.
- */
-
-package sun.misc;
-
-public interface JavaAWTAccess {
-    public Object getContext();
-    public Object getExecutionContext();
-
-    public Object get(Object context, Object key);
-    public void put(Object context, Object key, Object value);
-    public void remove(Object context, Object key);
-
-    // convenience methods whose context is the object returned by getContext()
-    public Object get(Object key);
-    public void put(Object key, Object value);
-    public void remove(Object key);
-    public boolean isDisposed();
-    public boolean isMainAppContext();
-}
diff --git a/ojluni/src/main/java/sun/misc/JavaIOAccess.java b/ojluni/src/main/java/sun/misc/JavaIOAccess.java
deleted file mode 100755
index ab2888b..0000000
--- a/ojluni/src/main/java/sun/misc/JavaIOAccess.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-package sun.misc;
-import java.io.Console;
-import java.nio.charset.Charset;
-
-public interface JavaIOAccess {
-    public Console console();
-    public Charset charset();
-}
diff --git a/ojluni/src/main/java/sun/misc/JavaIOFileDescriptorAccess.java b/ojluni/src/main/java/sun/misc/JavaIOFileDescriptorAccess.java
deleted file mode 100755
index 9e987e6..0000000
--- a/ojluni/src/main/java/sun/misc/JavaIOFileDescriptorAccess.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2007, 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.
- */
-package sun.misc;
-
-import java.io.FileDescriptor;
-
-/*
- * @author Chris Hegarty
- */
-
-public interface JavaIOFileDescriptorAccess {
-    public void set(FileDescriptor obj, int fd);
-    public int get(FileDescriptor fd);
-
-    // Only valid on Windows
-    public void setHandle(FileDescriptor obj, long handle);
-    public long getHandle(FileDescriptor obj);
-}
diff --git a/ojluni/src/main/java/sun/misc/JavaLangAccess.java b/ojluni/src/main/java/sun/misc/JavaLangAccess.java
deleted file mode 100755
index 45a37ab..0000000
--- a/ojluni/src/main/java/sun/misc/JavaLangAccess.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.
- */
-
-package sun.misc;
-
-import sun.reflect.ConstantPool;
-import sun.reflect.annotation.AnnotationType;
-import sun.nio.ch.Interruptible;
-
-public interface JavaLangAccess {
-    /** Return the constant pool for a class. */
-    ConstantPool getConstantPool(Class klass);
-
-    /**
-     * Set the AnnotationType instance corresponding to this class.
-     * (This method only applies to annotation types.)
-     */
-    void setAnnotationType(Class klass, AnnotationType annotationType);
-
-    /**
-     * Get the AnnotationType instance corresponding to this class.
-     * (This method only applies to annotation types.)
-     */
-    AnnotationType getAnnotationType(Class klass);
-
-    /**
-     * Returns the elements of an enum class or null if the
-     * Class object does not represent an enum type;
-     * the result is uncloned, cached, and shared by all callers.
-     */
-    <E extends Enum<E>> E[] getEnumConstantsShared(Class<E> klass);
-
-    /** Set thread's blocker field. */
-    void blockedOn(Thread t, Interruptible b);
-
-    /**
-     * Registers a shutdown hook.
-     *
-     * It is expected that this method with registerShutdownInProgress=true
-     * is only used to register DeleteOnExitHook since the first file
-     * may be added to the delete on exit list by the application shutdown
-     * hooks.
-     *
-     * @params slot  the slot in the shutdown hook array, whose element
-     *               will be invoked in order during shutdown
-     * @params registerShutdownInProgress true to allow the hook
-     *               to be registered even if the shutdown is in progress.
-     * @params hook  the hook to be registered
-     *
-     * @throw IllegalStateException if shutdown is in progress and
-     *          the slot is not valid to register.
-     */
-    void registerShutdownHook(int slot, boolean registerShutdownInProgress, Runnable hook);
-
-    /**
-     * Returns the number of stack frames represented by the given throwable.
-     */
-    int getStackTraceDepth(Throwable t);
-
-    /**
-     * Returns the ith StackTraceElement for the given throwable.
-     */
-    StackTraceElement getStackTraceElement(Throwable t, int i);
-
-    /**
-     * Returns the murmur hash value for the specified String.
-     */
-    int getStringHash32(String string);
-}
diff --git a/ojluni/src/main/java/sun/misc/JavaNetAccess.java b/ojluni/src/main/java/sun/misc/JavaNetAccess.java
deleted file mode 100755
index cc7bec1..0000000
--- a/ojluni/src/main/java/sun/misc/JavaNetAccess.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2006, 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.
- */
-
-package sun.misc;
-
-import java.net.URLClassLoader;
-
-public interface JavaNetAccess {
-    /**
-     * return the URLClassPath belonging to the given loader
-     */
-    URLClassPath getURLClassPath (URLClassLoader u);
-}
diff --git a/ojluni/src/main/java/sun/misc/JavaNetHttpCookieAccess.java b/ojluni/src/main/java/sun/misc/JavaNetHttpCookieAccess.java
deleted file mode 100755
index 129703f..0000000
--- a/ojluni/src/main/java/sun/misc/JavaNetHttpCookieAccess.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2012, 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.
- */
-
-package sun.misc;
-
-import java.net.HttpCookie;
-import java.util.List;
-
-public interface JavaNetHttpCookieAccess {
-    /*
-     * Constructs cookies from Set-Cookie or Set-Cookie2 header string,
-     * retaining the original header String in the cookie itself.
-     */
-    public List<HttpCookie> parse(String header);
-
-    /*
-     * Returns the original header this cookie was consructed from, if it was
-     * constructed by parsing a header, otherwise null.
-     */
-    public String header(HttpCookie cookie);
-}
-
diff --git a/ojluni/src/main/java/sun/misc/JavaNioAccess.java b/ojluni/src/main/java/sun/misc/JavaNioAccess.java
deleted file mode 100755
index e4f0a78..0000000
--- a/ojluni/src/main/java/sun/misc/JavaNioAccess.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2007, 2011, 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.
- */
-
-package sun.misc;
-
-import java.nio.Buffer;
-import java.nio.ByteBuffer;
-
-public interface JavaNioAccess {
-    /**
-     * Provides access to information on buffer usage.
-     */
-    interface BufferPool {
-        String getName();
-        long getCount();
-        long getTotalCapacity();
-        long getMemoryUsed();
-    }
-    BufferPool getDirectBufferPool();
-
-    /**
-     * Constructs a direct ByteBuffer referring to the block of memory starting
-     * at the given memory address and and extending {@code cap} bytes.
-     * The {@code ob} parameter is an arbitrary object that is attached
-     * to the resulting buffer.
-     */
-    ByteBuffer newDirectByteBuffer(long addr, int cap, Object ob);
-
-    /**
-     * Truncates a buffer by changing its capacity to 0.
-     */
-    void truncate(Buffer buf);
-
-}
diff --git a/ojluni/src/main/java/sun/misc/JavaSecurityAccess.java b/ojluni/src/main/java/sun/misc/JavaSecurityAccess.java
deleted file mode 100755
index ac30582..0000000
--- a/ojluni/src/main/java/sun/misc/JavaSecurityAccess.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2010, 2011, 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.
- */
-
-package sun.misc;
-
-import java.security.AccessControlContext;
-import java.security.PrivilegedAction;
-
-public interface JavaSecurityAccess {
-
-    <T> T doIntersectionPrivilege(PrivilegedAction<T> action,
-                                  AccessControlContext stack,
-                                  AccessControlContext context);
-
-    <T> T doIntersectionPrivilege(PrivilegedAction<T> action,
-                                  AccessControlContext context);
-
-}
diff --git a/ojluni/src/main/java/sun/misc/JavaUtilJarAccess.java b/ojluni/src/main/java/sun/misc/JavaUtilJarAccess.java
deleted file mode 100755
index 0f1efd1..0000000
--- a/ojluni/src/main/java/sun/misc/JavaUtilJarAccess.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2002, 2011, 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.
- */
-
-package sun.misc;
-
-import java.io.IOException;
-import java.net.URL;
-import java.security.CodeSource;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-
-public interface JavaUtilJarAccess {
-    public boolean jarFileHasClassPathAttribute(JarFile jar) throws IOException;
-    public CodeSource[] getCodeSources(JarFile jar, URL url);
-    public CodeSource getCodeSource(JarFile jar, URL url, String name);
-    public Enumeration<String> entryNames(JarFile jar, CodeSource[] cs);
-    public Enumeration<JarEntry> entries2(JarFile jar);
-    public void setEagerValidation(JarFile jar, boolean eager);
-    public List getManifestDigests(JarFile jar);
-}
diff --git a/ojluni/src/main/java/sun/misc/JavaUtilZipAccess.java b/ojluni/src/main/java/sun/misc/JavaUtilZipAccess.java
deleted file mode 100755
index b29d7ed..0000000
--- a/ojluni/src/main/java/sun/misc/JavaUtilZipAccess.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2011, 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.
- */
-
-package sun.misc;
-
-import java.util.zip.Adler32;
-import java.nio.ByteBuffer;
-
-public interface JavaUtilZipAccess {
-    public void update(Adler32 adler32, ByteBuffer buf);
-}
diff --git a/ojluni/src/main/java/sun/misc/JavaUtilZipFileAccess.java b/ojluni/src/main/java/sun/misc/JavaUtilZipFileAccess.java
deleted file mode 100755
index f7f878b..0000000
--- a/ojluni/src/main/java/sun/misc/JavaUtilZipFileAccess.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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.
- */
-
-package sun.misc;
-
-import java.util.zip.ZipFile;
-
-public interface JavaUtilZipFileAccess {
-    public boolean startsWithLocHeader(ZipFile zip);
-}
diff --git a/ojluni/src/main/java/sun/misc/JavaxSecurityAuthKerberosAccess.java b/ojluni/src/main/java/sun/misc/JavaxSecurityAuthKerberosAccess.java
deleted file mode 100755
index 9c8f9f2..0000000
--- a/ojluni/src/main/java/sun/misc/JavaxSecurityAuthKerberosAccess.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2011, 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.
- */
-
-package sun.misc;
-
-import javax.security.auth.kerberos.KeyTab;
-import sun.security.krb5.EncryptionKey;
-import sun.security.krb5.PrincipalName;
-
-/**
- * An unsafe tunnel to get non-public access to classes in the
- * javax.security.auth.kerberos package.
- */
-public interface JavaxSecurityAuthKerberosAccess {
-    /**
-     * Returns keys for a principal in a keytab.
-     * @return the keys, never null, can be empty.
-     */
-    public EncryptionKey[] keyTabGetEncryptionKeys(
-            KeyTab ktab, PrincipalName principal);
-}
diff --git a/ojluni/src/main/java/sun/misc/Launcher.java b/ojluni/src/main/java/sun/misc/Launcher.java
deleted file mode 100755
index 97d437e..0000000
--- a/ojluni/src/main/java/sun/misc/Launcher.java
+++ /dev/null
@@ -1,587 +0,0 @@
-/*
- * Copyright (c) 1998, 2011, 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.
- */
-
-package sun.misc;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.FilePermission;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.net.MalformedURLException;
-import java.net.URLStreamHandler;
-import java.net.URLStreamHandlerFactory;
-import java.util.HashSet;
-import java.util.StringTokenizer;
-import java.util.Set;
-import java.util.Vector;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedExceptionAction;
-import java.security.AccessControlContext;
-import java.security.PermissionCollection;
-import java.security.Permissions;
-import java.security.Permission;
-import java.security.ProtectionDomain;
-import java.security.CodeSource;
-import sun.security.util.SecurityConstants;
-import sun.net.www.ParseUtil;
-
-/**
- * This class is used by the system to launch the main application.
-Launcher */
-public class Launcher {
-    private static URLStreamHandlerFactory factory = new Factory();
-    private static Launcher launcher = new Launcher();
-    private static String bootClassPath =
-        System.getProperty("sun.boot.class.path");
-
-    public static Launcher getLauncher() {
-        return launcher;
-    }
-
-    private ClassLoader loader;
-
-    public Launcher() {
-        // Create the extension class loader
-        ClassLoader extcl;
-        try {
-            extcl = ExtClassLoader.getExtClassLoader();
-        } catch (IOException e) {
-            throw new InternalError(
-                "Could not create extension class loader");
-        }
-
-        // Now create the class loader to use to launch the application
-        try {
-            loader = AppClassLoader.getAppClassLoader(extcl);
-        } catch (IOException e) {
-            throw new InternalError(
-                "Could not create application class loader");
-        }
-
-        // Also set the context class loader for the primordial thread.
-        Thread.currentThread().setContextClassLoader(loader);
-
-        // Finally, install a security manager if requested
-        String s = System.getProperty("java.security.manager");
-        if (s != null) {
-            SecurityManager sm = null;
-            if ("".equals(s) || "default".equals(s)) {
-                sm = new java.lang.SecurityManager();
-            } else {
-                try {
-                    sm = (SecurityManager)loader.loadClass(s).newInstance();
-                } catch (IllegalAccessException e) {
-                } catch (InstantiationException e) {
-                } catch (ClassNotFoundException e) {
-                } catch (ClassCastException e) {
-                }
-            }
-            if (sm != null) {
-                System.setSecurityManager(sm);
-            } else {
-                throw new InternalError(
-                    "Could not create SecurityManager: " + s);
-            }
-        }
-    }
-
-    /*
-     * Returns the class loader used to launch the main application.
-     */
-    public ClassLoader getClassLoader() {
-        return loader;
-    }
-
-    /*
-     * The class loader used for loading installed extensions.
-     */
-    static class ExtClassLoader extends URLClassLoader {
-
-        static {
-            ClassLoader.registerAsParallelCapable();
-        }
-
-        /**
-         * create an ExtClassLoader. The ExtClassLoader is created
-         * within a context that limits which files it can read
-         */
-        public static ExtClassLoader getExtClassLoader() throws IOException
-        {
-            final File[] dirs = getExtDirs();
-
-            try {
-                // Prior implementations of this doPrivileged() block supplied
-                // aa synthesized ACC via a call to the private method
-                // ExtClassLoader.getContext().
-
-                return AccessController.doPrivileged(
-                    new PrivilegedExceptionAction<ExtClassLoader>() {
-                        public ExtClassLoader run() throws IOException {
-                            int len = dirs.length;
-                            for (int i = 0; i < len; i++) {
-                                MetaIndex.registerDirectory(dirs[i]);
-                            }
-                            return new ExtClassLoader(dirs);
-                        }
-                    });
-            } catch (java.security.PrivilegedActionException e) {
-                throw (IOException) e.getException();
-            }
-        }
-
-        void addExtURL(URL url) {
-            super.addURL(url);
-        }
-
-        /*
-         * Creates a new ExtClassLoader for the specified directories.
-         */
-        public ExtClassLoader(File[] dirs) throws IOException {
-            super(getExtURLs(dirs), null, factory);
-        }
-
-        private static File[] getExtDirs() {
-            String s = System.getProperty("java.ext.dirs");
-            File[] dirs;
-            if (s != null) {
-                StringTokenizer st =
-                    new StringTokenizer(s, File.pathSeparator);
-                int count = st.countTokens();
-                dirs = new File[count];
-                for (int i = 0; i < count; i++) {
-                    dirs[i] = new File(st.nextToken());
-                }
-            } else {
-                dirs = new File[0];
-            }
-            return dirs;
-        }
-
-        private static URL[] getExtURLs(File[] dirs) throws IOException {
-            Vector<URL> urls = new Vector<URL>();
-            for (int i = 0; i < dirs.length; i++) {
-                String[] files = dirs[i].list();
-                if (files != null) {
-                    for (int j = 0; j < files.length; j++) {
-                        if (!files[j].equals("meta-index")) {
-                            File f = new File(dirs[i], files[j]);
-                            urls.add(getFileURL(f));
-                        }
-                    }
-                }
-            }
-            URL[] ua = new URL[urls.size()];
-            urls.copyInto(ua);
-            return ua;
-        }
-
-        /*
-         * Searches the installed extension directories for the specified
-         * library name. For each extension directory, we first look for
-         * the native library in the subdirectory whose name is the value
-         * of the system property <code>os.arch</code>. Failing that, we
-         * look in the extension directory itself.
-         */
-        public String findLibrary(String name) {
-            name = System.mapLibraryName(name);
-            URL[] urls = super.getURLs();
-            File prevDir = null;
-            for (int i = 0; i < urls.length; i++) {
-                // Get the ext directory from the URL
-                File dir = new File(urls[i].getPath()).getParentFile();
-                if (dir != null && !dir.equals(prevDir)) {
-                    // Look in architecture-specific subdirectory first
-                    // Read from the saved system properties to avoid deadlock
-                    String arch = VM.getSavedProperty("os.arch");
-                    if (arch != null) {
-                        File file = new File(new File(dir, arch), name);
-                        if (file.exists()) {
-                            return file.getAbsolutePath();
-                        }
-                    }
-                    // Then check the extension directory
-                    File file = new File(dir, name);
-                    if (file.exists()) {
-                        return file.getAbsolutePath();
-                    }
-                }
-                prevDir = dir;
-            }
-            return null;
-        }
-
-        private static AccessControlContext getContext(File[] dirs)
-            throws IOException
-        {
-            PathPermissions perms =
-                new PathPermissions(dirs);
-
-            ProtectionDomain domain = new ProtectionDomain(
-                new CodeSource(perms.getCodeBase(),
-                    (java.security.cert.Certificate[]) null),
-                perms);
-
-            AccessControlContext acc =
-                new AccessControlContext(new ProtectionDomain[] { domain });
-
-            return acc;
-        }
-    }
-
-    /**
-     * The class loader used for loading from java.class.path.
-     * runs in a restricted security context.
-     */
-    static class AppClassLoader extends URLClassLoader {
-
-        static {
-            ClassLoader.registerAsParallelCapable();
-        }
-
-        public static ClassLoader getAppClassLoader(final ClassLoader extcl)
-            throws IOException
-        {
-            final String s = System.getProperty("java.class.path");
-            final File[] path = (s == null) ? new File[0] : getClassPath(s);
-
-            // Note: on bugid 4256530
-            // Prior implementations of this doPrivileged() block supplied
-            // a rather restrictive ACC via a call to the private method
-            // AppClassLoader.getContext(). This proved overly restrictive
-            // when loading  classes. Specifically it prevent
-            // accessClassInPackage.sun.* grants from being honored.
-            //
-            return AccessController.doPrivileged(
-                new PrivilegedAction<AppClassLoader>() {
-                    public AppClassLoader run() {
-                    URL[] urls =
-                        (s == null) ? new URL[0] : pathToURLs(path);
-                    return new AppClassLoader(urls, extcl);
-                }
-            });
-        }
-
-        /*
-         * Creates a new AppClassLoader
-         */
-        AppClassLoader(URL[] urls, ClassLoader parent) {
-            super(urls, parent, factory);
-        }
-
-        /**
-         * Override loadClass so we can checkPackageAccess.
-         */
-        public Class loadClass(String name, boolean resolve)
-            throws ClassNotFoundException
-        {
-            int i = name.lastIndexOf('.');
-            if (i != -1) {
-                SecurityManager sm = System.getSecurityManager();
-                if (sm != null) {
-                    sm.checkPackageAccess(name.substring(0, i));
-                }
-            }
-            return (super.loadClass(name, resolve));
-        }
-
-        /**
-         * allow any classes loaded from classpath to exit the VM.
-         */
-        protected PermissionCollection getPermissions(CodeSource codesource)
-        {
-            PermissionCollection perms = super.getPermissions(codesource);
-            perms.add(new RuntimePermission("exitVM"));
-            return perms;
-        }
-
-        /**
-         * This class loader supports dynamic additions to the class path
-         * at runtime.
-         *
-         * @see java.lang.instrument.Instrumentation#appendToSystemClassPathSearch
-         */
-        private void appendToClassPathForInstrumentation(String path) {
-            assert(Thread.holdsLock(this));
-
-            // addURL is a no-op if path already contains the URL
-            super.addURL( getFileURL(new File(path)) );
-        }
-
-        /**
-         * create a context that can read any directories (recursively)
-         * mentioned in the class path. In the case of a jar, it has to
-         * be the directory containing the jar, not just the jar, as jar
-         * files might refer to other jar files.
-         */
-
-        private static AccessControlContext getContext(File[] cp)
-            throws java.net.MalformedURLException
-        {
-            PathPermissions perms =
-                new PathPermissions(cp);
-
-            ProtectionDomain domain =
-                new ProtectionDomain(new CodeSource(perms.getCodeBase(),
-                    (java.security.cert.Certificate[]) null),
-                perms);
-
-            AccessControlContext acc =
-                new AccessControlContext(new ProtectionDomain[] { domain });
-
-            return acc;
-        }
-    }
-
-    private static class BootClassPathHolder {
-        static final URLClassPath bcp;
-        static {
-            URL[] urls;
-            if (bootClassPath != null) {
-                urls = AccessController.doPrivileged(
-                    new PrivilegedAction<URL[]>() {
-                        public URL[] run() {
-                            File[] classPath = getClassPath(bootClassPath);
-                            int len = classPath.length;
-                            Set<File> seenDirs = new HashSet<File>();
-                            for (int i = 0; i < len; i++) {
-                                File curEntry = classPath[i];
-                                // Negative test used to properly handle
-                                // nonexistent jars on boot class path
-                                if (!curEntry.isDirectory()) {
-                                    curEntry = curEntry.getParentFile();
-                                }
-                                if (curEntry != null && seenDirs.add(curEntry)) {
-                                    MetaIndex.registerDirectory(curEntry);
-                                }
-                            }
-                            return pathToURLs(classPath);
-                        }
-                    }
-                );
-            } else {
-                urls = new URL[0];
-            }
-            bcp = new URLClassPath(urls, factory);
-        }
-    }
-
-    public static URLClassPath getBootstrapClassPath() {
-        return BootClassPathHolder.bcp;
-    }
-
-    private static URL[] pathToURLs(File[] path) {
-        URL[] urls = new URL[path.length];
-        for (int i = 0; i < path.length; i++) {
-            urls[i] = getFileURL(path[i]);
-        }
-        // DEBUG
-        //for (int i = 0; i < urls.length; i++) {
-        //  System.out.println("urls[" + i + "] = " + '"' + urls[i] + '"');
-        //}
-        return urls;
-    }
-
-    private static File[] getClassPath(String cp) {
-        File[] path;
-        if (cp != null) {
-            int count = 0, maxCount = 1;
-            int pos = 0, lastPos = 0;
-            // Count the number of separators first
-            while ((pos = cp.indexOf(File.pathSeparator, lastPos)) != -1) {
-                maxCount++;
-                lastPos = pos + 1;
-            }
-            path = new File[maxCount];
-            lastPos = pos = 0;
-            // Now scan for each path component
-            while ((pos = cp.indexOf(File.pathSeparator, lastPos)) != -1) {
-                if (pos - lastPos > 0) {
-                    path[count++] = new File(cp.substring(lastPos, pos));
-                } else {
-                    // empty path component translates to "."
-                    path[count++] = new File(".");
-                }
-                lastPos = pos + 1;
-            }
-            // Make sure we include the last path component
-            if (lastPos < cp.length()) {
-                path[count++] = new File(cp.substring(lastPos));
-            } else {
-                path[count++] = new File(".");
-            }
-            // Trim array to correct size
-            if (count != maxCount) {
-                File[] tmp = new File[count];
-                System.arraycopy(path, 0, tmp, 0, count);
-                path = tmp;
-            }
-        } else {
-            path = new File[0];
-        }
-        // DEBUG
-        //for (int i = 0; i < path.length; i++) {
-        //  System.out.println("path[" + i + "] = " + '"' + path[i] + '"');
-        //}
-        return path;
-    }
-
-    private static URLStreamHandler fileHandler;
-
-    static URL getFileURL(File file) {
-        try {
-            file = file.getCanonicalFile();
-        } catch (IOException e) {}
-
-        try {
-            return ParseUtil.fileToEncodedURL(file);
-        } catch (MalformedURLException e) {
-            // Should never happen since we specify the protocol...
-            throw new InternalError();
-        }
-    }
-
-    /*
-     * The stream handler factory for loading system protocol handlers.
-     */
-    private static class Factory implements URLStreamHandlerFactory {
-        private static String PREFIX = "sun.net.www.protocol";
-
-        public URLStreamHandler createURLStreamHandler(String protocol) {
-            String name = PREFIX + "." + protocol + ".Handler";
-            try {
-                Class c = Class.forName(name);
-                return (URLStreamHandler)c.newInstance();
-            } catch (ClassNotFoundException e) {
-                e.printStackTrace();
-            } catch (InstantiationException e) {
-                e.printStackTrace();
-            } catch (IllegalAccessException e) {
-                e.printStackTrace();
-            }
-            throw new InternalError("could not load " + protocol +
-                                    "system protocol handler");
-        }
-    }
-}
-
-class PathPermissions extends PermissionCollection {
-    // use serialVersionUID from JDK 1.2.2 for interoperability
-    private static final long serialVersionUID = 8133287259134945693L;
-
-    private File path[];
-    private Permissions perms;
-
-    URL codeBase;
-
-    PathPermissions(File path[])
-    {
-        this.path = path;
-        this.perms = null;
-        this.codeBase = null;
-    }
-
-    URL getCodeBase()
-    {
-        return codeBase;
-    }
-
-    public void add(java.security.Permission permission) {
-        throw new SecurityException("attempt to add a permission");
-    }
-
-    private synchronized void init()
-    {
-        if (perms != null)
-            return;
-
-        perms = new Permissions();
-
-        // this is needed to be able to create the classloader itself!
-        perms.add(SecurityConstants.CREATE_CLASSLOADER_PERMISSION);
-
-        // add permission to read any "java.*" property
-        perms.add(new java.util.PropertyPermission("java.*",
-            SecurityConstants.PROPERTY_READ_ACTION));
-
-        AccessController.doPrivileged(new PrivilegedAction<Void>() {
-            public Void run() {
-                for (int i=0; i < path.length; i++) {
-                    File f = path[i];
-                    String path;
-                    try {
-                        path = f.getCanonicalPath();
-                    } catch (IOException ioe) {
-                        path = f.getAbsolutePath();
-                    }
-                    if (i == 0) {
-                        codeBase = Launcher.getFileURL(new File(path));
-                    }
-                    if (f.isDirectory()) {
-                        if (path.endsWith(File.separator)) {
-                            perms.add(new FilePermission(path+"-",
-                                SecurityConstants.FILE_READ_ACTION));
-                        } else {
-                            perms.add(new FilePermission(
-                                path + File.separator+"-",
-                                SecurityConstants.FILE_READ_ACTION));
-                        }
-                    } else {
-                        int endIndex = path.lastIndexOf(File.separatorChar);
-                        if (endIndex != -1) {
-                            path = path.substring(0, endIndex+1) + "-";
-                            perms.add(new FilePermission(path,
-                                SecurityConstants.FILE_READ_ACTION));
-                        } else {
-                            // XXX?
-                        }
-                    }
-                }
-                return null;
-            }
-        });
-    }
-
-    public boolean implies(java.security.Permission permission) {
-        if (perms == null)
-            init();
-        return perms.implies(permission);
-    }
-
-    public java.util.Enumeration<Permission> elements() {
-        if (perms == null)
-            init();
-        synchronized (perms) {
-            return perms.elements();
-        }
-    }
-
-    public String toString() {
-        if (perms == null)
-            init();
-        return perms.toString();
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/Lock.java b/ojluni/src/main/java/sun/misc/Lock.java
deleted file mode 100755
index 7dc7b5b..0000000
--- a/ojluni/src/main/java/sun/misc/Lock.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 1994, 2005, 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.
- */
-
-package sun.misc;
-
-/**
- * The Lock class provides a simple, useful interface to a lock.
- * Unlike monitors which synchronize access to an object, locks
- * synchronize access to an arbitrary set of resources (objects,
- * methods, variables, etc.). <p>
- *
- * The programmer using locks must be responsible for clearly defining
- * the semantics of their use and should handle deadlock avoidance in
- * the face of exceptions. <p>
- *
- * For example, if you want to protect a set of method invocations with
- * a lock, and one of the methods may throw an exception, you must be
- * prepared to release the lock similarly to the following example:
- * <pre>
- *      class SomeClass {
- *          Lock myLock = new Lock();
-
- *          void someMethod() {
- *              myLock.lock();
- *              try {
- *                  StartOperation();
- *                  ContinueOperation();
- *                  EndOperation();
- *              } finally {
- *                  myLock.unlock();
- *              }
- *          }
- *      }
- * </pre>
- *
- * @author      Peter King
- */
-public
-class Lock {
-    private boolean locked = false;
-
-    /**
-     * Create a lock, which is initially not locked.
-     */
-    public Lock () {
-    }
-
-    /**
-     * Acquire the lock.  If someone else has the lock, wait until it
-     * has been freed, and then try to acquire it again.  This method
-     * will not return until the lock has been acquired.
-     *
-     * @exception  java.lang.InterruptedException if any thread has
-     *               interrupted this thread.
-     */
-    public final synchronized void lock() throws InterruptedException {
-        while (locked) {
-            wait();
-        }
-        locked = true;
-    }
-
-    /**
-     * Release the lock.  If someone else is waiting for the lock, the
-     * will be notitified so they can try to acquire the lock again.
-     */
-    public final synchronized void unlock() {
-        locked = false;
-        notifyAll();
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/NativeSignalHandler.java b/ojluni/src/main/java/sun/misc/NativeSignalHandler.java
deleted file mode 100755
index 39c68c2..0000000
--- a/ojluni/src/main/java/sun/misc/NativeSignalHandler.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package sun.misc;
-
-/* A package-private class implementing a signal handler in native code. */
-
-final class NativeSignalHandler implements SignalHandler {
-
-    private final long handler;
-
-    long getHandler() {
-        return handler;
-    }
-
-    NativeSignalHandler(long handler) {
-        this.handler = handler;
-    }
-
-    public void handle(Signal sig) {
-        handle0(sig.getNumber(), handler);
-    }
-
-    private static native void handle0(int number, long handler);
-}
diff --git a/ojluni/src/main/java/sun/misc/OSEnvironment.java b/ojluni/src/main/java/sun/misc/OSEnvironment.java
deleted file mode 100755
index 5004fd1..0000000
--- a/ojluni/src/main/java/sun/misc/OSEnvironment.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.misc;
-
-public class OSEnvironment {
-
-    /*
-     * Initialize any miscellenous operating system settings that need to be set
-     * for the class libraries.
-     */
-    public static void initialize() {
-        // no-op on Solaris and Linux
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/misc/Perf.java b/ojluni/src/main/java/sun/misc/Perf.java
deleted file mode 100755
index bafd39d..0000000
--- a/ojluni/src/main/java/sun/misc/Perf.java
+++ /dev/null
@@ -1,539 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.
- */
-package sun.misc;
-
-import java.nio.ByteBuffer;
-import java.security.Permission;
-import java.security.PrivilegedAction;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-
-/**
- * The Perf class provides the ability to attach to an instrumentation
- * buffer maintained by a Java virtual machine. The instrumentation
- * buffer may be for the Java virtual machine running the methods of
- * this class or it may be for another Java virtual machine on the
- * same system.
- * <p>
- * In addition, this class provides methods to create instrumentation
- * objects in the instrumentation buffer for the Java virtual machine
- * that is running these methods. It also contains methods for acquiring
- * the value of a platform specific high resolution clock for time
- * stamp and interval measurement purposes.
- *
- * @author   Brian Doherty
- * @since    1.4.2
- * @see      #getPerf
- * @see      sun.misc.Perf$GetPerfAction
- * @see      java.nio.ByteBuffer
- */
-public final class Perf {
-
-    private static Perf instance;
-
-    private static final int PERF_MODE_RO = 0;
-    private static final int PERF_MODE_RW = 1;
-
-    private Perf() { }    // prevent instantiation
-
-    /**
-     * The GetPerfAction class is a convenience class for acquiring access
-     * to the singleton Perf instance using the
-     * <code>AccessController.doPrivileged()</code> method.
-     * <p>
-     * An instance of this class can be used as the argument to
-     * <code>AccessController.doPrivileged(PrivilegedAction)</code>.
-     * <p> Here is a suggested idiom for use of this class:
-     *
-     * <blockquote><pre>
-     * class MyTrustedClass {
-     *   private static final Perf perf =
-     *       AccessController.doPrivileged(new Perf.GetPerfAction<Perf>());
-     *   ...
-     * }
-     * </pre></blockquote>
-     * <p>
-     * In the presence of a security manager, the <code>MyTrustedClass</code>
-     * class in the above example will need to be granted the
-     * <em>"sun.misc.Perf.getPerf"</em> <code>RuntimePermission</code>
-     * permission in order to successfully acquire the singleton Perf instance.
-     * <p>
-     * Please note that the <em>"sun.misc.Perf.getPerf"</em> permission
-     * is not a JDK specified permission.
-     *
-     * @see  java.security.AccessController#doPrivileged(PrivilegedAction)
-     * @see  java.lang.RuntimePermission
-     */
-    public static class GetPerfAction implements PrivilegedAction<Perf>
-    {
-        /**
-         * Run the <code>Perf.getPerf()</code> method in a privileged context.
-         *
-         * @see #getPerf
-         */
-        public Perf run() {
-            return getPerf();
-        }
-    }
-
-    /**
-     * Return a reference to the singleton Perf instance.
-     * <p>
-     * The getPerf() method returns the singleton instance of the Perf
-     * class. The returned object provides the caller with the capability
-     * for accessing the instrumentation buffer for this or another local
-     * Java virtual machine.
-     * <p>
-     * If a security manager is installed, its <code>checkPermission</code>
-     * method is called with a <code>RuntimePermission</code> with a target
-     * of <em>"sun.misc.Perf.getPerf"</em>. A security exception will result
-     * if the caller has not been granted this permission.
-     * <p>
-     * Access to the returned <code>Perf</code> object should be protected
-     * by its caller and not passed on to untrusted code. This object can
-     * be used to attach to the instrumentation buffer provided by this Java
-     * virtual machine or for those of other Java virtual machines running
-     * on the same system. The instrumentation buffer may contain senstitive
-     * information. API's built on top of this interface may want to provide
-     * finer grained access control to the contents of individual
-     * instrumentation objects contained within the buffer.
-     * <p>
-     * Please note that the <em>"sun.misc.Perf.getPerf"</em> permission
-     * is not a JDK specified permission.
-     *
-     * @return       A reference to the singleton Perf instance.
-     * @throws AccessControlException  if a security manager exists and
-     *               its <code>checkPermission</code> method doesn't allow
-     *               access to the <em>"sun.misc.Perf.getPerf"</em> target.
-     * @see  java.lang.RuntimePermission
-     * @see  #attach
-     */
-    public static Perf getPerf()
-    {
-        SecurityManager security = System.getSecurityManager();
-        if (security != null) {
-            Permission perm = new RuntimePermission("sun.misc.Perf.getPerf");
-            security.checkPermission(perm);
-        }
-
-        return instance;
-    }
-
-    /**
-     * Attach to the instrumentation buffer for the specified Java virtual
-     * machine.
-     * <p>
-     * This method will attach to the instrumentation buffer for the
-     * specified virtual machine. It returns a <code>ByteBuffer</code> object
-     * that is initialized to access the instrumentation buffer for the
-     * indicated Java virtual machine. The <code>lvmid</code> parameter is
-     * a integer value that uniquely identifies the target local Java virtual
-     * machine. It is typically, but not necessarily, the process id of
-     * the target Java virtual machine.
-     * <p>
-     * If the <code>lvmid</code> identifies a Java virtual machine different
-     * from the one running this method, then the coherency characteristics
-     * of the buffer are implementation dependent. Implementations that do
-     * not support named, coherent, shared memory may return a
-     * <code>ByteBuffer</code> object that contains only a snap shot of the
-     * data in the instrumentation buffer. Implementations that support named,
-     * coherent, shared memory, may return a <code>ByteBuffer</code> object
-     * that will be changing dynamically over time as the target Java virtual
-     * machine updates its mapping of this buffer.
-     * <p>
-     * If the <code>lvmid</code> is 0 or equal to the actual <code>lvmid</code>
-     * for the Java virtual machine running this method, then the returned
-     * <code>ByteBuffer</code> object will always be coherent and dynamically
-     * changing.
-     * <p>
-     * The attach mode specifies the access permissions requested for the
-     * instrumentation buffer of the target virtual machine. The permitted
-     * access permissions are:
-     * <p>
-     * <bl>
-     * <li>"r"  - Read only access. This Java virtual machine has only
-     * read access to the instrumentation buffer for the target Java
-     * virtual machine.
-     * <li>"rw"  - Read/Write access. This Java virtual machine has read and
-     * write access to the instrumentation buffer for the target Java virtual
-     * machine. This mode is currently not supported and is reserved for
-     * future enhancements.
-     * </bl>
-     *
-     * @param   lvmid            an integer that uniquely identifies the
-     *                           target local Java virtual machine.
-     * @param   mode             a string indicating the attach mode.
-     * @return  ByteBuffer       a direct allocated byte buffer
-     * @throws  IllegalArgumentException  The lvmid or mode was invalid.
-     * @throws  IOException      An I/O error occurred while trying to acquire
-     *                           the instrumentation buffer.
-     * @throws  OutOfMemoryError The instrumentation buffer could not be mapped
-     *                           into the virtual machine's address space.
-     * @see     java.nio.ByteBuffer
-     */
-    public ByteBuffer attach(int lvmid, String mode)
-           throws IllegalArgumentException, IOException
-    {
-        if (mode.compareTo("r") == 0) {
-            return attachImpl(null, lvmid, PERF_MODE_RO);
-        }
-        else if (mode.compareTo("rw") == 0) {
-            return attachImpl(null, lvmid, PERF_MODE_RW);
-        }
-        else {
-            throw new IllegalArgumentException("unknown mode");
-        }
-    }
-
-    /**
-     * Attach to the instrumentation buffer for the specified Java virtual
-     * machine owned by the given user.
-     * <p>
-     * This method behaves just as the <code>attach(int lvmid, String mode)
-     * </code> method, except that it only searches for Java virtual machines
-     * owned by the specified user.
-     *
-     * @param   user             A <code>String</code> object containing the
-     *                           name of the user that owns the target Java
-     *                           virtual machine.
-     * @param   lvmid            an integer that uniquely identifies the
-     *                           target local Java virtual machine.
-     * @param   mode             a string indicating the attach mode.
-     * @return  ByteBuffer       a direct allocated byte buffer
-     * @throws  IllegalArgumentException  The lvmid or mode was invalid.
-     * @throws  IOException      An I/O error occurred while trying to acquire
-     *                           the instrumentation buffer.
-     * @throws  OutOfMemoryError The instrumentation buffer could not be mapped
-     *                           into the virtual machine's address space.
-     * @see     java.nio.ByteBuffer
-     */
-    public ByteBuffer attach(String user, int lvmid, String mode)
-           throws IllegalArgumentException, IOException
-    {
-        if (mode.compareTo("r") == 0) {
-            return attachImpl(user, lvmid, PERF_MODE_RO);
-        }
-        else if (mode.compareTo("rw") == 0) {
-            return attachImpl(user, lvmid, PERF_MODE_RW);
-        }
-        else {
-            throw new IllegalArgumentException("unknown mode");
-        }
-    }
-
-    /**
-     * Call the implementation specific attach method.
-     * <p>
-     * This method calls into the Java virtual machine to perform the platform
-     * specific attach method. Buffers returned from this method are
-     * internally managed as <code>PhantomRefereces</code> to provide for
-     * guaranteed, secure release of the native resources.
-     *
-     * @param   user             A <code>String</code> object containing the
-     *                           name of the user that owns the target Java
-     *                           virtual machine.
-     * @param   lvmid            an integer that uniquely identifies the
-     *                           target local Java virtual machine.
-     * @param   mode             a string indicating the attach mode.
-     * @return  ByteBuffer       a direct allocated byte buffer
-     * @throws  IllegalArgumentException  The lvmid or mode was invalid.
-     * @throws  IOException      An I/O error occurred while trying to acquire
-     *                           the instrumentation buffer.
-     * @throws  OutOfMemoryError The instrumentation buffer could not be mapped
-     *                           into the virtual machine's address space.
-     */
-    private ByteBuffer attachImpl(String user, int lvmid, int mode)
-            throws IllegalArgumentException, IOException
-    {
-        final ByteBuffer b = attach(user, lvmid, mode);
-
-        if (lvmid == 0) {
-            // The native instrumentation buffer for this Java virtual
-            // machine is never unmapped.
-            return b;
-        }
-        else {
-            // This is an instrumentation buffer for another Java virtual
-            // machine with native resources that need to be managed. We
-            // create a duplicate of the native ByteBuffer and manage it
-            // with a Cleaner object (PhantomReference). When the duplicate
-            // becomes only phantomly reachable, the native resources will
-            // be released.
-
-            final ByteBuffer dup = b.duplicate();
-            Cleaner.create(dup, new Runnable() {
-                    public void run() {
-                        try {
-                            instance.detach(b);
-                        }
-                        catch (Throwable th) {
-                            // avoid crashing the reference handler thread,
-                            // but provide for some diagnosability
-                            assert false : th.toString();
-                        }
-                    }
-                });
-            return dup;
-        }
-    }
-
-    /**
-     * Native method to perform the implementation specific attach mechanism.
-     * <p>
-     * The implementation of this method may return distinct or identical
-     * <code>ByteBuffer</code> objects for two distinct calls requesting
-     * attachment to the same Java virtual machine.
-     * <p>
-     * For the Sun HotSpot JVM, two distinct calls to attach to the same
-     * target Java virtual machine will result in two distinct ByteBuffer
-     * objects returned by this method. This may change in a future release.
-     *
-     * @param   user             A <code>String</code> object containing the
-     *                           name of the user that owns the target Java
-     *                           virtual machine.
-     * @param   lvmid            an integer that uniquely identifies the
-     *                           target local Java virtual machine.
-     * @param   mode             a string indicating the attach mode.
-     * @return  ByteBuffer       a direct allocated byte buffer
-     * @throws  IllegalArgumentException  The lvmid or mode was invalid.
-     * @throws  IOException      An I/O error occurred while trying to acquire
-     *                           the instrumentation buffer.
-     * @throws  OutOfMemoryError The instrumentation buffer could not be mapped
-     *                           into the virtual machine's address space.
-     */
-    private native ByteBuffer attach(String user, int lvmid, int mode)
-                   throws IllegalArgumentException, IOException;
-
-    /**
-     * Native method to perform the implementation specific detach mechanism.
-     * <p>
-     * If this method is passed a <code>ByteBuffer</code> object that is
-     * not created by the <code>attach</code> method, then the results of
-     * this method are undefined, with unpredictable and potentially damaging
-     * effects to the Java virtual machine. To prevent accidental or malicious
-     * use of this method, all native ByteBuffer created by the <code>
-     * attach</code> method are managed internally as PhantomReferences
-     * and resources are freed by the system.
-     * <p>
-     * If this method is passed a <code>ByteBuffer</code> object created
-     * by the <code>attach</code> method with a lvmid for the Java virtual
-     * machine running this method (lvmid=0, for example), then the detach
-     * request is silently ignored.
-     *
-     * @param ByteBuffer  A direct allocated byte buffer created by the
-     *                    <code>attach</code> method.
-     * @see   java.nio.ByteBuffer
-     * @see   #attach
-     */
-    private native void detach(ByteBuffer bb);
-
-    /**
-     * Create a <code>long</code> scalar entry in the instrumentation buffer
-     * with the given variability characteristic, units, and initial value.
-     * <p>
-     * Access to the instrument is provided through the returned <code>
-     * ByteBuffer</code> object. Typically, this object should be wrapped
-     * with <code>LongBuffer</code> view object.
-     *
-     * @param   variability the variability characteristic for this entry.
-     * @param   units       the units for this entry.
-     * @param   name        the name of this entry.
-     * @param   value       the initial value for this entry.
-     * @return  ByteBuffer  a direct allocated ByteBuffer object that
-     *                      allows write access to a native memory location
-     *                      containing a <code>long</code> value.
-     *
-     * see sun.misc.perf.Variability
-     * see sun.misc.perf.Units
-     * @see java.nio.ByteBuffer
-     */
-    public native ByteBuffer createLong(String name, int variability,
-                                        int units, long value);
-
-    /**
-     * Create a <code>String</code> entry in the instrumentation buffer with
-     * the given variability characteristic, units, and initial value.
-     * <p>
-     * The maximum length of the <code>String</code> stored in this string
-     * instrument is given in by <code>maxLength</code> parameter. Updates
-     * to this instrument with <code>String</code> values with lengths greater
-     * than <code>maxLength</code> will be truncated to <code>maxLength</code>.
-     * The truncated value will be terminated by a null character.
-     * <p>
-     * The underlying implementation may further limit the length of the
-     * value, but will continue to preserve the null terminator.
-     * <p>
-     * Access to the instrument is provided through the returned <code>
-     * ByteBuffer</code> object.
-     *
-     * @param   variability the variability characteristic for this entry.
-     * @param   units       the units for this entry.
-     * @param   name        the name of this entry.
-     * @param   value       the initial value for this entry.
-     * @param   maxLength   the maximum string length for this string
-     *                      instrument.
-     * @return  ByteBuffer  a direct allocated ByteBuffer that allows
-     *                      write access to a native memory location
-     *                      containing a <code>long</code> value.
-     *
-     * see sun.misc.perf.Variability
-     * see sun.misc.perf.Units
-     * @see java.nio.ByteBuffer
-     */
-    public ByteBuffer createString(String name, int variability,
-                                   int units, String value, int maxLength)
-    {
-        byte[] v = getBytes(value);
-        byte[] v1 = new byte[v.length+1];
-        System.arraycopy(v, 0, v1, 0, v.length);
-        v1[v.length] = '\0';
-        return createByteArray(name, variability, units, v1, Math.max(v1.length, maxLength));
-    }
-
-    /**
-     * Create a <code>String</code> entry in the instrumentation buffer with
-     * the given variability characteristic, units, and initial value.
-     * <p>
-     * The maximum length of the <code>String</code> stored in this string
-     * instrument is implied by the length of the <code>value</code> parameter.
-     * Subsequent updates to the value of this instrument will be truncated
-     * to this implied maximum length. The truncated value will be terminated
-     * by a null character.
-     * <p>
-     * The underlying implementation may further limit the length of the
-     * initial or subsequent value, but will continue to preserve the null
-     * terminator.
-     * <p>
-     * Access to the instrument is provided through the returned <code>
-     * ByteBuffer</code> object.
-     *
-     * @param   variability the variability characteristic for this entry.
-     * @param   units       the units for this entry.
-     * @param   name        the name of this entry.
-     * @param   value       the initial value for this entry.
-     * @return  ByteBuffer  a direct allocated ByteBuffer that allows
-     *                      write access to a native memory location
-     *                      containing a <code>long</code> value.
-     *
-     * see sun.misc.perf.Variability
-     * see sun.misc.perf.Units
-     * @see java.nio.ByteBuffer
-     */
-    public ByteBuffer createString(String name, int variability,
-                                   int units, String value)
-    {
-        byte[] v = getBytes(value);
-        byte[] v1 = new byte[v.length+1];
-        System.arraycopy(v, 0, v1, 0, v.length);
-        v1[v.length] = '\0';
-        return createByteArray(name, variability, units, v1, v1.length);
-    }
-
-    /**
-     * Create a <code>byte</code> vector entry in the instrumentation buffer
-     * with the given variability characteristic, units, and initial value.
-     * <p>
-     * The <code>maxLength</code> parameter limits the size of the byte
-     * array instrument such that the initial or subsequent updates beyond
-     * this length are silently ignored. No special handling of truncated
-     * updates is provided.
-     * <p>
-     * The underlying implementation may further limit the length of the
-     * length of the initial or subsequent value.
-     * <p>
-     * Access to the instrument is provided through the returned <code>
-     * ByteBuffer</code> object.
-     *
-     * @param   variability the variability characteristic for this entry.
-     * @param   units       the units for this entry.
-     * @param   name        the name of this entry.
-     * @param   value       the initial value for this entry.
-     * @param   maxLength   the maximum length of this byte array.
-     * @return  ByteBuffer  a direct allocated byte buffer that allows
-     *                      write access to a native memory location
-     *                      containing a <code>long</code> value.
-     *
-     * see sun.misc.perf.Variability
-     * see sun.misc.perf.Units
-     * @see java.nio.ByteBuffer
-     */
-    public native ByteBuffer createByteArray(String name, int variability,
-                                             int units, byte[] value,
-                                             int maxLength);
-
-
-    /**
-     * convert string to an array of UTF-8 bytes
-     */
-    private static byte[] getBytes(String s)
-    {
-        byte[] bytes = null;
-
-        try {
-            bytes = s.getBytes("UTF-8");
-        }
-        catch (UnsupportedEncodingException e) {
-            // ignore, UTF-8 encoding is always known
-        }
-
-        return bytes;
-    }
-
-    /**
-     * Return the value of the High Resolution Counter.
-     *
-     * The High Resolution Counter returns the number of ticks since
-     * since the start of the Java virtual machine. The resolution of
-     * the counter is machine dependent and can be determined from the
-     * value return by the {@link #highResFrequency} method.
-     *
-     * @return  the number of ticks of machine dependent resolution since
-     *          the start of the Java virtual machine.
-     *
-     * @see #highResFrequency
-     * @see java.lang.System#currentTimeMillis()
-     */
-    public native long highResCounter();
-
-    /**
-     * Returns the frequency of the High Resolution Counter, in ticks per
-     * second.
-     *
-     * This value can be used to convert the value of the High Resolution
-     * Counter, as returned from a call to the {@link #highResCounter} method,
-     * into the number of seconds since the start of the Java virtual machine.
-     *
-     * @return  the frequency of the High Resolution Counter.
-     * @see #highResCounter
-     */
-    public native long highResFrequency();
-
-    private static native void registerNatives();
-
-    static {
-        registerNatives();
-        instance = new Perf();
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/PerfCounter.java b/ojluni/src/main/java/sun/misc/PerfCounter.java
deleted file mode 100755
index 9d0b8fe..0000000
--- a/ojluni/src/main/java/sun/misc/PerfCounter.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-
-package sun.misc;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.LongBuffer;
-import java.security.AccessController;
-
-/**
- * Performance counter support for internal JRE classes.
- * This class defines a fixed list of counters for the platform
- * to use as an interim solution until RFE# 6209222 is implemented.
- * The perf counters will be created in the jvmstat perf buffer
- * that the HotSpot VM creates. The default size is 32K and thus
- * the number of counters is bounded.  You can alter the size
- * with -XX:PerfDataMemorySize=<bytes> option. If there is
- * insufficient memory in the jvmstat perf buffer, the C heap memory
- * will be used and thus the application will continue to run if
- * the counters added exceeds the buffer size but the counters
- * will be missing.
- *
- * See HotSpot jvmstat implementation for certain circumstances
- * that the jvmstat perf buffer is not supported.
- *
- */
-public class PerfCounter {
-    private static final Perf perf =
-        AccessController.doPrivileged(new Perf.GetPerfAction());
-
-    // Must match values defined in hotspot/src/share/vm/runtime/perfdata.hpp
-    private final static int V_Constant  = 1;
-    private final static int V_Monotonic = 2;
-    private final static int V_Variable  = 3;
-    private final static int U_None      = 1;
-
-    private final String name;
-    private final LongBuffer lb;
-
-    private PerfCounter(String name, int type) {
-        this.name = name;
-        ByteBuffer bb = perf.createLong(name, U_None, type, 0L);
-        bb.order(ByteOrder.nativeOrder());
-        this.lb = bb.asLongBuffer();
-    }
-
-    static PerfCounter newPerfCounter(String name) {
-        return new PerfCounter(name, V_Variable);
-    }
-
-    static PerfCounter newConstantPerfCounter(String name) {
-        PerfCounter c = new PerfCounter(name, V_Constant);
-        return c;
-    }
-
-    /**
-     * Returns the current value of the perf counter.
-     */
-    public synchronized long get() {
-        return lb.get(0);
-    }
-
-    /**
-     * Sets the value of the perf counter to the given newValue.
-     */
-    public synchronized void set(long newValue) {
-        lb.put(0, newValue);
-    }
-
-    /**
-     * Adds the given value to the perf counter.
-     */
-    public synchronized void add(long value) {
-        long res = get() + value;
-        lb.put(0, res);
-    }
-
-    /**
-     * Increments the perf counter with 1.
-     */
-    public void increment() {
-        add(1);
-    }
-
-    /**
-     * Adds the given interval to the perf counter.
-     */
-    public void addTime(long interval) {
-        add(interval);
-    }
-
-    /**
-     * Adds the elapsed time from the given start time (ns) to the perf counter.
-     */
-    public void addElapsedTimeFrom(long startTime) {
-        add(System.nanoTime() - startTime);
-    }
-
-    @Override
-    public String toString() {
-        return name + " = " + get();
-    }
-
-    static class CoreCounters {
-        static final PerfCounter pdt   = newPerfCounter("sun.classloader.parentDelegationTime");
-        static final PerfCounter lc    = newPerfCounter("sun.classloader.findClasses");
-        static final PerfCounter lct   = newPerfCounter("sun.classloader.findClassTime");
-        static final PerfCounter rcbt  = newPerfCounter("sun.urlClassLoader.readClassBytesTime");
-        static final PerfCounter zfc   = newPerfCounter("sun.zip.zipFiles");
-        static final PerfCounter zfot  = newPerfCounter("sun.zip.zipFile.openTime");
-    }
-
-    static class WindowsClientCounters {
-        static final PerfCounter d3dAvailable = newConstantPerfCounter("sun.java2d.d3d.available");
-    }
-
-    /**
-     * Number of findClass calls
-     */
-    public static PerfCounter getFindClasses() {
-        return CoreCounters.lc;
-    }
-
-    /**
-     * Time (ns) spent in finding classes that includes
-     * lookup and read class bytes and defineClass
-     */
-    public static PerfCounter getFindClassTime() {
-        return CoreCounters.lct;
-    }
-
-    /**
-     * Time (ns) spent in finding classes
-     */
-    public static PerfCounter getReadClassBytesTime() {
-        return CoreCounters.rcbt;
-    }
-
-    /**
-     * Time (ns) spent in the parent delegation to
-     * the parent of the defining class loader
-     */
-    public static PerfCounter getParentDelegationTime() {
-        return CoreCounters.pdt;
-    }
-
-    /**
-     * Number of zip files opened.
-     */
-    public static PerfCounter getZipFileCount() {
-        return CoreCounters.zfc;
-    }
-
-    /**
-     * Time (ns) spent in opening the zip files that
-     * includes building the entries hash table
-     */
-    public static PerfCounter getZipFileOpenTime() {
-        return CoreCounters.zfot;
-    }
-
-    /**
-     * D3D graphic pipeline available
-     */
-    public static PerfCounter getD3DAvailable() {
-        return WindowsClientCounters.d3dAvailable;
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/PerformanceLogger.java b/ojluni/src/main/java/sun/misc/PerformanceLogger.java
deleted file mode 100755
index 71f4f30..0000000
--- a/ojluni/src/main/java/sun/misc/PerformanceLogger.java
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * Copyright (c) 2002, 2008, 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.
- */
-
-
-
-package sun.misc;
-
-import java.util.Vector;
-import java.io.FileWriter;
-import java.io.File;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-
-/**
- * This class is intended to be a central place for the jdk to
- * log timing events of interest.  There is pre-defined event
- * of startTime, as well as a general
- * mechanism of setting aribtrary times in an array.
- * All unreserved times in the array can be used by callers
- * in application-defined situations.  The caller is responsible
- * for setting and getting all times and for doing whatever
- * analysis is interesting; this class is merely a central container
- * for those timing values.
- * Note that, due to the variables in this class being static,
- * use of particular time values by multiple applets will cause
- * confusing results.  For example, if plugin runs two applets
- * simultaneously, the initTime for those applets will collide
- * and the results may be undefined.
- * <P>
- * To automatically track startup performance in an app or applet,
- * use the command-line parameter sun.perflog as follows:<BR>
- *     -Dsun.perflog[=file:<filename>]
- * <BR>
- * where simply using the parameter with no value will enable output
- * to the console and a value of "file:<filename>" will cause
- * that given filename to be created and used for all output.
- * <P>
- * By default, times are measured using System.currentTimeMillis().  To use
- * System.nanoTime() instead, add the command-line parameter:<BR>
-       -Dsun.perflog.nano=true
- * <BR>
- * <P>
- * <B>Warning: Use at your own risk!</B>
- * This class is intended for internal testing
- * purposes only and may be removed at any time.  More
- * permanent monitoring and profiling APIs are expected to be
- * developed for future releases and this class will cease to
- * exist once those APIs are in place.
- * @author Chet Haase
- */
-public class PerformanceLogger {
-
-    // Timing values of global interest
-    private static final int START_INDEX    = 0;    // VM start
-    private static final int LAST_RESERVED  = START_INDEX;
-
-    private static boolean perfLoggingOn = false;
-    private static boolean useNanoTime = false;
-    private static Vector<TimeData> times;
-    private static String logFileName = null;
-    private static Writer logWriter = null;
-    private static long baseTime;
-
-    static {
-        String perfLoggingProp =
-            java.security.AccessController.doPrivileged(
-            new sun.security.action.GetPropertyAction("sun.perflog"));
-        if (perfLoggingProp != null) {
-            perfLoggingOn = true;
-
-            // Check if we should use nanoTime
-            String perfNanoProp =
-                java.security.AccessController.doPrivileged(
-                new sun.security.action.GetPropertyAction("sun.perflog.nano"));
-            if (perfNanoProp != null) {
-                useNanoTime = true;
-            }
-
-            // Now, figure out what the user wants to do with the data
-            if (perfLoggingProp.regionMatches(true, 0, "file:", 0, 5)) {
-                logFileName = perfLoggingProp.substring(5);
-            }
-            if (logFileName != null) {
-                if (logWriter == null) {
-                    java.security.AccessController.doPrivileged(
-                    new java.security.PrivilegedAction<Void>() {
-                        public Void run() {
-                            try {
-                                File logFile = new File(logFileName);
-                                logFile.createNewFile();
-                                logWriter = new FileWriter(logFile);
-                            } catch (Exception e) {
-                                System.out.println(e + ": Creating logfile " +
-                                                   logFileName +
-                                                   ".  Log to console");
-                            }
-                            return null;
-                        }
-                    });
-                }
-            }
-            if (logWriter == null) {
-                logWriter = new OutputStreamWriter(System.out);
-            }
-        }
-        times = new Vector<TimeData>(10);
-        // Reserve predefined slots
-        for (int i = 0; i <= LAST_RESERVED; ++i) {
-            times.add(new TimeData("Time " + i + " not set", 0));
-        }
-    }
-
-    /**
-     * Returns status of whether logging is enabled or not.  This is
-     * provided as a convenience method so that users do not have to
-     * perform the same GetPropertyAction check as above to determine whether
-     * to enable performance logging.
-     */
-    public static boolean loggingEnabled() {
-        return perfLoggingOn;
-    }
-
-
-    /**
-     * Internal class used to store time/message data together.
-     */
-    static class TimeData {
-        String message;
-        long time;
-
-        TimeData(String message, long time) {
-            this.message = message;
-            this.time = time;
-        }
-
-        String getMessage() {
-            return message;
-        }
-
-        long getTime() {
-            return time;
-        }
-    }
-
-    /**
-     * Return the current time, in millis or nanos as appropriate
-     */
-    private static long getCurrentTime() {
-        if (useNanoTime) {
-            return System.nanoTime();
-        } else {
-            return System.currentTimeMillis();
-        }
-    }
-
-    /**
-     * Sets the start time.  Ideally, this is the earliest time available
-     * during the startup of a Java applet or application.  This time is
-     * later used to analyze the difference between the initial startup
-     * time and other events in the system (such as an applet's init time).
-     */
-    public static void setStartTime(String message) {
-        if (loggingEnabled()) {
-            long nowTime = getCurrentTime();
-            setStartTime(message, nowTime);
-        }
-    }
-
-    /**
-     * Sets the base time, output can then
-     * be displayed as offsets from the base time;.
-     */
-    public static void setBaseTime(long time) {
-        if (loggingEnabled()) {
-            baseTime = time;
-        }
-    }
-
-    /**
-     * Sets the start time.
-     * This version of the method is
-     * given the time to log, instead of expecting this method to
-     * get the time itself.  This is done in case the time was
-     * recorded much earlier than this method was called.
-     */
-    public static void setStartTime(String message, long time) {
-        if (loggingEnabled()) {
-            times.set(START_INDEX, new TimeData(message, time));
-        }
-    }
-
-    /**
-     * Gets the start time, which should be the time when
-     * the java process started, prior to the VM actually being
-     * loaded.
-     */
-    public static long getStartTime() {
-        if (loggingEnabled()) {
-            return times.get(START_INDEX).getTime();
-        } else {
-            return 0;
-        }
-    }
-
-    /**
-     * Sets the value of a given time and returns the index of the
-     * slot that that time was stored in.
-     */
-    public static int setTime(String message) {
-        if (loggingEnabled()) {
-            long nowTime = getCurrentTime();
-            return setTime(message, nowTime);
-        } else {
-            return 0;
-        }
-    }
-
-    /**
-     * Sets the value of a given time and returns the index of the
-     * slot that that time was stored in.
-     * This version of the method is
-     * given the time to log, instead of expecting this method to
-     * get the time itself.  This is done in case the time was
-     * recorded much earlier than this method was called.
-     */
-    public static int setTime(String message, long time) {
-        if (loggingEnabled()) {
-            // times is already synchronized, but we need to ensure that
-            // the size used in times.set() is the same used when returning
-            // the index of that operation.
-            synchronized (times) {
-                times.add(new TimeData(message, time));
-                return (times.size() - 1);
-            }
-        } else {
-            return 0;
-        }
-    }
-
-    /**
-     * Returns time at given index.
-     */
-    public static long getTimeAtIndex(int index) {
-        if (loggingEnabled()) {
-            return times.get(index).getTime();
-        } else {
-            return 0;
-        }
-    }
-
-    /**
-     * Returns message at given index.
-     */
-    public static String getMessageAtIndex(int index) {
-        if (loggingEnabled()) {
-            return times.get(index).getMessage();
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Outputs all data to parameter-specified Writer object
-     */
-    public static void outputLog(Writer writer) {
-        if (loggingEnabled()) {
-            try {
-                synchronized(times) {
-                    for (int i = 0; i < times.size(); ++i) {
-                        TimeData td = times.get(i);
-                        if (td != null) {
-                            writer.write(i + " " + td.getMessage() + ": " +
-                                         (td.getTime() - baseTime) + "\n");
-
-                        }
-                    }
-                }
-                writer.flush();
-            } catch (Exception e) {
-                System.out.println(e + ": Writing performance log to " +
-                                   writer);
-            }
-        }
-    }
-
-    /**
-     * Outputs all data to whatever location the user specified
-     * via sun.perflog command-line parameter.
-     */
-    public static void outputLog() {
-        outputLog(logWriter);
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/ProxyGenerator.java b/ojluni/src/main/java/sun/misc/ProxyGenerator.java
deleted file mode 100755
index 7e3cc91..0000000
--- a/ojluni/src/main/java/sun/misc/ProxyGenerator.java
+++ /dev/null
@@ -1,2009 +0,0 @@
-/*
- * Copyright (c) 1999, 2008, 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.
- */
-
-package sun.misc;
-
-import java.io.ByteArrayOutputStream;
-import java.io.DataOutputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.lang.reflect.Array;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import sun.security.action.GetBooleanAction;
-
-/**
- * ProxyGenerator contains the code to generate a dynamic proxy class
- * for the java.lang.reflect.Proxy API.
- *
- * The external interfaces to ProxyGenerator is the static
- * "generateProxyClass" method.
- *
- * @author      Peter Jones
- * @since       1.3
- */
-public class ProxyGenerator {
-    /*
-     * In the comments below, "JVMS" refers to The Java Virtual Machine
-     * Specification Second Edition and "JLS" refers to the original
-     * version of The Java Language Specification, unless otherwise
-     * specified.
-     */
-
-    /* generate 1.5-era class file version */
-    private static final int CLASSFILE_MAJOR_VERSION = 49;
-    private static final int CLASSFILE_MINOR_VERSION = 0;
-
-    /*
-     * beginning of constants copied from
-     * sun.tools.java.RuntimeConstants (which no longer exists):
-     */
-
-    /* constant pool tags */
-    private static final int CONSTANT_UTF8              = 1;
-    private static final int CONSTANT_UNICODE           = 2;
-    private static final int CONSTANT_INTEGER           = 3;
-    private static final int CONSTANT_FLOAT             = 4;
-    private static final int CONSTANT_LONG              = 5;
-    private static final int CONSTANT_DOUBLE            = 6;
-    private static final int CONSTANT_CLASS             = 7;
-    private static final int CONSTANT_STRING            = 8;
-    private static final int CONSTANT_FIELD             = 9;
-    private static final int CONSTANT_METHOD            = 10;
-    private static final int CONSTANT_INTERFACEMETHOD   = 11;
-    private static final int CONSTANT_NAMEANDTYPE       = 12;
-
-    /* access and modifier flags */
-    private static final int ACC_PUBLIC                 = 0x00000001;
-    private static final int ACC_PRIVATE                = 0x00000002;
-//  private static final int ACC_PROTECTED              = 0x00000004;
-    private static final int ACC_STATIC                 = 0x00000008;
-    private static final int ACC_FINAL                  = 0x00000010;
-//  private static final int ACC_SYNCHRONIZED           = 0x00000020;
-//  private static final int ACC_VOLATILE               = 0x00000040;
-//  private static final int ACC_TRANSIENT              = 0x00000080;
-//  private static final int ACC_NATIVE                 = 0x00000100;
-//  private static final int ACC_INTERFACE              = 0x00000200;
-//  private static final int ACC_ABSTRACT               = 0x00000400;
-    private static final int ACC_SUPER                  = 0x00000020;
-//  private static final int ACC_STRICT                 = 0x00000800;
-
-    /* opcodes */
-//  private static final int opc_nop                    = 0;
-    private static final int opc_aconst_null            = 1;
-//  private static final int opc_iconst_m1              = 2;
-    private static final int opc_iconst_0               = 3;
-//  private static final int opc_iconst_1               = 4;
-//  private static final int opc_iconst_2               = 5;
-//  private static final int opc_iconst_3               = 6;
-//  private static final int opc_iconst_4               = 7;
-//  private static final int opc_iconst_5               = 8;
-//  private static final int opc_lconst_0               = 9;
-//  private static final int opc_lconst_1               = 10;
-//  private static final int opc_fconst_0               = 11;
-//  private static final int opc_fconst_1               = 12;
-//  private static final int opc_fconst_2               = 13;
-//  private static final int opc_dconst_0               = 14;
-//  private static final int opc_dconst_1               = 15;
-    private static final int opc_bipush                 = 16;
-    private static final int opc_sipush                 = 17;
-    private static final int opc_ldc                    = 18;
-    private static final int opc_ldc_w                  = 19;
-//  private static final int opc_ldc2_w                 = 20;
-    private static final int opc_iload                  = 21;
-    private static final int opc_lload                  = 22;
-    private static final int opc_fload                  = 23;
-    private static final int opc_dload                  = 24;
-    private static final int opc_aload                  = 25;
-    private static final int opc_iload_0                = 26;
-//  private static final int opc_iload_1                = 27;
-//  private static final int opc_iload_2                = 28;
-//  private static final int opc_iload_3                = 29;
-    private static final int opc_lload_0                = 30;
-//  private static final int opc_lload_1                = 31;
-//  private static final int opc_lload_2                = 32;
-//  private static final int opc_lload_3                = 33;
-    private static final int opc_fload_0                = 34;
-//  private static final int opc_fload_1                = 35;
-//  private static final int opc_fload_2                = 36;
-//  private static final int opc_fload_3                = 37;
-    private static final int opc_dload_0                = 38;
-//  private static final int opc_dload_1                = 39;
-//  private static final int opc_dload_2                = 40;
-//  private static final int opc_dload_3                = 41;
-    private static final int opc_aload_0                = 42;
-//  private static final int opc_aload_1                = 43;
-//  private static final int opc_aload_2                = 44;
-//  private static final int opc_aload_3                = 45;
-//  private static final int opc_iaload                 = 46;
-//  private static final int opc_laload                 = 47;
-//  private static final int opc_faload                 = 48;
-//  private static final int opc_daload                 = 49;
-//  private static final int opc_aaload                 = 50;
-//  private static final int opc_baload                 = 51;
-//  private static final int opc_caload                 = 52;
-//  private static final int opc_saload                 = 53;
-//  private static final int opc_istore                 = 54;
-//  private static final int opc_lstore                 = 55;
-//  private static final int opc_fstore                 = 56;
-//  private static final int opc_dstore                 = 57;
-    private static final int opc_astore                 = 58;
-//  private static final int opc_istore_0               = 59;
-//  private static final int opc_istore_1               = 60;
-//  private static final int opc_istore_2               = 61;
-//  private static final int opc_istore_3               = 62;
-//  private static final int opc_lstore_0               = 63;
-//  private static final int opc_lstore_1               = 64;
-//  private static final int opc_lstore_2               = 65;
-//  private static final int opc_lstore_3               = 66;
-//  private static final int opc_fstore_0               = 67;
-//  private static final int opc_fstore_1               = 68;
-//  private static final int opc_fstore_2               = 69;
-//  private static final int opc_fstore_3               = 70;
-//  private static final int opc_dstore_0               = 71;
-//  private static final int opc_dstore_1               = 72;
-//  private static final int opc_dstore_2               = 73;
-//  private static final int opc_dstore_3               = 74;
-    private static final int opc_astore_0               = 75;
-//  private static final int opc_astore_1               = 76;
-//  private static final int opc_astore_2               = 77;
-//  private static final int opc_astore_3               = 78;
-//  private static final int opc_iastore                = 79;
-//  private static final int opc_lastore                = 80;
-//  private static final int opc_fastore                = 81;
-//  private static final int opc_dastore                = 82;
-    private static final int opc_aastore                = 83;
-//  private static final int opc_bastore                = 84;
-//  private static final int opc_castore                = 85;
-//  private static final int opc_sastore                = 86;
-    private static final int opc_pop                    = 87;
-//  private static final int opc_pop2                   = 88;
-    private static final int opc_dup                    = 89;
-//  private static final int opc_dup_x1                 = 90;
-//  private static final int opc_dup_x2                 = 91;
-//  private static final int opc_dup2                   = 92;
-//  private static final int opc_dup2_x1                = 93;
-//  private static final int opc_dup2_x2                = 94;
-//  private static final int opc_swap                   = 95;
-//  private static final int opc_iadd                   = 96;
-//  private static final int opc_ladd                   = 97;
-//  private static final int opc_fadd                   = 98;
-//  private static final int opc_dadd                   = 99;
-//  private static final int opc_isub                   = 100;
-//  private static final int opc_lsub                   = 101;
-//  private static final int opc_fsub                   = 102;
-//  private static final int opc_dsub                   = 103;
-//  private static final int opc_imul                   = 104;
-//  private static final int opc_lmul                   = 105;
-//  private static final int opc_fmul                   = 106;
-//  private static final int opc_dmul                   = 107;
-//  private static final int opc_idiv                   = 108;
-//  private static final int opc_ldiv                   = 109;
-//  private static final int opc_fdiv                   = 110;
-//  private static final int opc_ddiv                   = 111;
-//  private static final int opc_irem                   = 112;
-//  private static final int opc_lrem                   = 113;
-//  private static final int opc_frem                   = 114;
-//  private static final int opc_drem                   = 115;
-//  private static final int opc_ineg                   = 116;
-//  private static final int opc_lneg                   = 117;
-//  private static final int opc_fneg                   = 118;
-//  private static final int opc_dneg                   = 119;
-//  private static final int opc_ishl                   = 120;
-//  private static final int opc_lshl                   = 121;
-//  private static final int opc_ishr                   = 122;
-//  private static final int opc_lshr                   = 123;
-//  private static final int opc_iushr                  = 124;
-//  private static final int opc_lushr                  = 125;
-//  private static final int opc_iand                   = 126;
-//  private static final int opc_land                   = 127;
-//  private static final int opc_ior                    = 128;
-//  private static final int opc_lor                    = 129;
-//  private static final int opc_ixor                   = 130;
-//  private static final int opc_lxor                   = 131;
-//  private static final int opc_iinc                   = 132;
-//  private static final int opc_i2l                    = 133;
-//  private static final int opc_i2f                    = 134;
-//  private static final int opc_i2d                    = 135;
-//  private static final int opc_l2i                    = 136;
-//  private static final int opc_l2f                    = 137;
-//  private static final int opc_l2d                    = 138;
-//  private static final int opc_f2i                    = 139;
-//  private static final int opc_f2l                    = 140;
-//  private static final int opc_f2d                    = 141;
-//  private static final int opc_d2i                    = 142;
-//  private static final int opc_d2l                    = 143;
-//  private static final int opc_d2f                    = 144;
-//  private static final int opc_i2b                    = 145;
-//  private static final int opc_i2c                    = 146;
-//  private static final int opc_i2s                    = 147;
-//  private static final int opc_lcmp                   = 148;
-//  private static final int opc_fcmpl                  = 149;
-//  private static final int opc_fcmpg                  = 150;
-//  private static final int opc_dcmpl                  = 151;
-//  private static final int opc_dcmpg                  = 152;
-//  private static final int opc_ifeq                   = 153;
-//  private static final int opc_ifne                   = 154;
-//  private static final int opc_iflt                   = 155;
-//  private static final int opc_ifge                   = 156;
-//  private static final int opc_ifgt                   = 157;
-//  private static final int opc_ifle                   = 158;
-//  private static final int opc_if_icmpeq              = 159;
-//  private static final int opc_if_icmpne              = 160;
-//  private static final int opc_if_icmplt              = 161;
-//  private static final int opc_if_icmpge              = 162;
-//  private static final int opc_if_icmpgt              = 163;
-//  private static final int opc_if_icmple              = 164;
-//  private static final int opc_if_acmpeq              = 165;
-//  private static final int opc_if_acmpne              = 166;
-//  private static final int opc_goto                   = 167;
-//  private static final int opc_jsr                    = 168;
-//  private static final int opc_ret                    = 169;
-//  private static final int opc_tableswitch            = 170;
-//  private static final int opc_lookupswitch           = 171;
-    private static final int opc_ireturn                = 172;
-    private static final int opc_lreturn                = 173;
-    private static final int opc_freturn                = 174;
-    private static final int opc_dreturn                = 175;
-    private static final int opc_areturn                = 176;
-    private static final int opc_return                 = 177;
-    private static final int opc_getstatic              = 178;
-    private static final int opc_putstatic              = 179;
-    private static final int opc_getfield               = 180;
-//  private static final int opc_putfield               = 181;
-    private static final int opc_invokevirtual          = 182;
-    private static final int opc_invokespecial          = 183;
-    private static final int opc_invokestatic           = 184;
-    private static final int opc_invokeinterface        = 185;
-    private static final int opc_new                    = 187;
-//  private static final int opc_newarray               = 188;
-    private static final int opc_anewarray              = 189;
-//  private static final int opc_arraylength            = 190;
-    private static final int opc_athrow                 = 191;
-    private static final int opc_checkcast              = 192;
-//  private static final int opc_instanceof             = 193;
-//  private static final int opc_monitorenter           = 194;
-//  private static final int opc_monitorexit            = 195;
-    private static final int opc_wide                   = 196;
-//  private static final int opc_multianewarray         = 197;
-//  private static final int opc_ifnull                 = 198;
-//  private static final int opc_ifnonnull              = 199;
-//  private static final int opc_goto_w                 = 200;
-//  private static final int opc_jsr_w                  = 201;
-
-    // end of constants copied from sun.tools.java.RuntimeConstants
-
-    /** name of the superclass of proxy classes */
-    private final static String superclassName = "java/lang/reflect/Proxy";
-
-    /** name of field for storing a proxy instance's invocation handler */
-    private final static String handlerFieldName = "h";
-
-    /** debugging flag for saving generated class files */
-    private final static boolean saveGeneratedFiles =
-        java.security.AccessController.doPrivileged(
-            new GetBooleanAction(
-                "sun.misc.ProxyGenerator.saveGeneratedFiles")).booleanValue();
-
-    /**
-     * Generate a proxy class given a name and a list of proxy interfaces.
-     */
-    public static byte[] generateProxyClass(final String name,
-                                            Class[] interfaces)
-    {
-        ProxyGenerator gen = new ProxyGenerator(name, interfaces);
-        final byte[] classFile = gen.generateClassFile();
-
-        if (saveGeneratedFiles) {
-            java.security.AccessController.doPrivileged(
-            new java.security.PrivilegedAction<Void>() {
-                public Void run() {
-                    try {
-                        FileOutputStream file =
-                            new FileOutputStream(dotToSlash(name) + ".class");
-                        file.write(classFile);
-                        file.close();
-                        return null;
-                    } catch (IOException e) {
-                        throw new InternalError(
-                            "I/O exception saving generated file: " + e);
-                    }
-                }
-            });
-        }
-
-        return classFile;
-    }
-
-    /* preloaded Method objects for methods in java.lang.Object */
-    private static Method hashCodeMethod;
-    private static Method equalsMethod;
-    private static Method toStringMethod;
-    static {
-        try {
-            hashCodeMethod = Object.class.getMethod("hashCode");
-            equalsMethod =
-                Object.class.getMethod("equals", new Class[] { Object.class });
-            toStringMethod = Object.class.getMethod("toString");
-        } catch (NoSuchMethodException e) {
-            throw new NoSuchMethodError(e.getMessage());
-        }
-    }
-
-    /** name of proxy class */
-    private String className;
-
-    /** proxy interfaces */
-    private Class[] interfaces;
-
-    /** constant pool of class being generated */
-    private ConstantPool cp = new ConstantPool();
-
-    /** FieldInfo struct for each field of generated class */
-    private List<FieldInfo> fields = new ArrayList<FieldInfo>();
-
-    /** MethodInfo struct for each method of generated class */
-    private List<MethodInfo> methods = new ArrayList<MethodInfo>();
-
-    /**
-     * maps method signature string to list of ProxyMethod objects for
-     * proxy methods with that signature
-     */
-    private Map<String, List<ProxyMethod>> proxyMethods =
-        new HashMap<String,List<ProxyMethod>>();
-
-    /** count of ProxyMethod objects added to proxyMethods */
-    private int proxyMethodCount = 0;
-
-    /**
-     * Construct a ProxyGenerator to generate a proxy class with the
-     * specified name and for the given interfaces.
-     *
-     * A ProxyGenerator object contains the state for the ongoing
-     * generation of a particular proxy class.
-     */
-    private ProxyGenerator(String className, Class[] interfaces) {
-        this.className = className;
-        this.interfaces = interfaces;
-    }
-
-    /**
-     * Generate a class file for the proxy class.  This method drives the
-     * class file generation process.
-     */
-    private byte[] generateClassFile() {
-
-        /* ============================================================
-         * Step 1: Assemble ProxyMethod objects for all methods to
-         * generate proxy dispatching code for.
-         */
-
-        /*
-         * Record that proxy methods are needed for the hashCode, equals,
-         * and toString methods of java.lang.Object.  This is done before
-         * the methods from the proxy interfaces so that the methods from
-         * java.lang.Object take precedence over duplicate methods in the
-         * proxy interfaces.
-         */
-        addProxyMethod(hashCodeMethod, Object.class);
-        addProxyMethod(equalsMethod, Object.class);
-        addProxyMethod(toStringMethod, Object.class);
-
-        /*
-         * Now record all of the methods from the proxy interfaces, giving
-         * earlier interfaces precedence over later ones with duplicate
-         * methods.
-         */
-        for (int i = 0; i < interfaces.length; i++) {
-            Method[] methods = interfaces[i].getMethods();
-            for (int j = 0; j < methods.length; j++) {
-                addProxyMethod(methods[j], interfaces[i]);
-            }
-        }
-
-        /*
-         * For each set of proxy methods with the same signature,
-         * verify that the methods' return types are compatible.
-         */
-        for (List<ProxyMethod> sigmethods : proxyMethods.values()) {
-            checkReturnTypes(sigmethods);
-        }
-
-        /* ============================================================
-         * Step 2: Assemble FieldInfo and MethodInfo structs for all of
-         * fields and methods in the class we are generating.
-         */
-        try {
-            methods.add(generateConstructor());
-
-            for (List<ProxyMethod> sigmethods : proxyMethods.values()) {
-                for (ProxyMethod pm : sigmethods) {
-
-                    // add static field for method's Method object
-                    fields.add(new FieldInfo(pm.methodFieldName,
-                        "Ljava/lang/reflect/Method;",
-                         ACC_PRIVATE | ACC_STATIC));
-
-                    // generate code for proxy method and add it
-                    methods.add(pm.generateMethod());
-                }
-            }
-
-            methods.add(generateStaticInitializer());
-
-        } catch (IOException e) {
-            throw new InternalError("unexpected I/O Exception");
-        }
-
-        if (methods.size() > 65535) {
-            throw new IllegalArgumentException("method limit exceeded");
-        }
-        if (fields.size() > 65535) {
-            throw new IllegalArgumentException("field limit exceeded");
-        }
-
-        /* ============================================================
-         * Step 3: Write the final class file.
-         */
-
-        /*
-         * Make sure that constant pool indexes are reserved for the
-         * following items before starting to write the final class file.
-         */
-        cp.getClass(dotToSlash(className));
-        cp.getClass(superclassName);
-        for (int i = 0; i < interfaces.length; i++) {
-            cp.getClass(dotToSlash(interfaces[i].getName()));
-        }
-
-        /*
-         * Disallow new constant pool additions beyond this point, since
-         * we are about to write the final constant pool table.
-         */
-        cp.setReadOnly();
-
-        ByteArrayOutputStream bout = new ByteArrayOutputStream();
-        DataOutputStream dout = new DataOutputStream(bout);
-
-        try {
-            /*
-             * Write all the items of the "ClassFile" structure.
-             * See JVMS section 4.1.
-             */
-                                        // u4 magic;
-            dout.writeInt(0xCAFEBABE);
-                                        // u2 minor_version;
-            dout.writeShort(CLASSFILE_MINOR_VERSION);
-                                        // u2 major_version;
-            dout.writeShort(CLASSFILE_MAJOR_VERSION);
-
-            cp.write(dout);             // (write constant pool)
-
-                                        // u2 access_flags;
-            dout.writeShort(ACC_PUBLIC | ACC_FINAL | ACC_SUPER);
-                                        // u2 this_class;
-            dout.writeShort(cp.getClass(dotToSlash(className)));
-                                        // u2 super_class;
-            dout.writeShort(cp.getClass(superclassName));
-
-                                        // u2 interfaces_count;
-            dout.writeShort(interfaces.length);
-                                        // u2 interfaces[interfaces_count];
-            for (int i = 0; i < interfaces.length; i++) {
-                dout.writeShort(cp.getClass(
-                    dotToSlash(interfaces[i].getName())));
-            }
-
-                                        // u2 fields_count;
-            dout.writeShort(fields.size());
-                                        // field_info fields[fields_count];
-            for (FieldInfo f : fields) {
-                f.write(dout);
-            }
-
-                                        // u2 methods_count;
-            dout.writeShort(methods.size());
-                                        // method_info methods[methods_count];
-            for (MethodInfo m : methods) {
-                m.write(dout);
-            }
-
-                                         // u2 attributes_count;
-            dout.writeShort(0); // (no ClassFile attributes for proxy classes)
-
-        } catch (IOException e) {
-            throw new InternalError("unexpected I/O Exception");
-        }
-
-        return bout.toByteArray();
-    }
-
-    /**
-     * Add another method to be proxied, either by creating a new
-     * ProxyMethod object or augmenting an old one for a duplicate
-     * method.
-     *
-     * "fromClass" indicates the proxy interface that the method was
-     * found through, which may be different from (a subinterface of)
-     * the method's "declaring class".  Note that the first Method
-     * object passed for a given name and descriptor identifies the
-     * Method object (and thus the declaring class) that will be
-     * passed to the invocation handler's "invoke" method for a given
-     * set of duplicate methods.
-     */
-    private void addProxyMethod(Method m, Class fromClass) {
-        String name = m.getName();
-        Class[] parameterTypes = m.getParameterTypes();
-        Class returnType = m.getReturnType();
-        Class[] exceptionTypes = m.getExceptionTypes();
-
-        String sig = name + getParameterDescriptors(parameterTypes);
-        List<ProxyMethod> sigmethods = proxyMethods.get(sig);
-        if (sigmethods != null) {
-            for (ProxyMethod pm : sigmethods) {
-                if (returnType == pm.returnType) {
-                    /*
-                     * Found a match: reduce exception types to the
-                     * greatest set of exceptions that can thrown
-                     * compatibly with the throws clauses of both
-                     * overridden methods.
-                     */
-                    List<Class<?>> legalExceptions = new ArrayList<Class<?>>();
-                    collectCompatibleTypes(
-                        exceptionTypes, pm.exceptionTypes, legalExceptions);
-                    collectCompatibleTypes(
-                        pm.exceptionTypes, exceptionTypes, legalExceptions);
-                    pm.exceptionTypes = new Class[legalExceptions.size()];
-                    pm.exceptionTypes =
-                        legalExceptions.toArray(pm.exceptionTypes);
-                    return;
-                }
-            }
-        } else {
-            sigmethods = new ArrayList<ProxyMethod>(3);
-            proxyMethods.put(sig, sigmethods);
-        }
-        sigmethods.add(new ProxyMethod(name, parameterTypes, returnType,
-                                       exceptionTypes, fromClass));
-    }
-
-    /**
-     * For a given set of proxy methods with the same signature, check
-     * that their return types are compatible according to the Proxy
-     * specification.
-     *
-     * Specifically, if there is more than one such method, then all
-     * of the return types must be reference types, and there must be
-     * one return type that is assignable to each of the rest of them.
-     */
-    private static void checkReturnTypes(List<ProxyMethod> methods) {
-        /*
-         * If there is only one method with a given signature, there
-         * cannot be a conflict.  This is the only case in which a
-         * primitive (or void) return type is allowed.
-         */
-        if (methods.size() < 2) {
-            return;
-        }
-
-        /*
-         * List of return types that are not yet known to be
-         * assignable from ("covered" by) any of the others.
-         */
-        LinkedList<Class<?>> uncoveredReturnTypes = new LinkedList<Class<?>>();
-
-    nextNewReturnType:
-        for (ProxyMethod pm : methods) {
-            Class<?> newReturnType = pm.returnType;
-            if (newReturnType.isPrimitive()) {
-                throw new IllegalArgumentException(
-                    "methods with same signature " +
-                    getFriendlyMethodSignature(pm.methodName,
-                                               pm.parameterTypes) +
-                    " but incompatible return types: " +
-                    newReturnType.getName() + " and others");
-            }
-            boolean added = false;
-
-            /*
-             * Compare the new return type to the existing uncovered
-             * return types.
-             */
-            ListIterator<Class<?>> liter = uncoveredReturnTypes.listIterator();
-            while (liter.hasNext()) {
-                Class<?> uncoveredReturnType = liter.next();
-
-                /*
-                 * If an existing uncovered return type is assignable
-                 * to this new one, then we can forget the new one.
-                 */
-                if (newReturnType.isAssignableFrom(uncoveredReturnType)) {
-                    assert !added;
-                    continue nextNewReturnType;
-                }
-
-                /*
-                 * If the new return type is assignable to an existing
-                 * uncovered one, then should replace the existing one
-                 * with the new one (or just forget the existing one,
-                 * if the new one has already be put in the list).
-                 */
-                if (uncoveredReturnType.isAssignableFrom(newReturnType)) {
-                    // (we can assume that each return type is unique)
-                    if (!added) {
-                        liter.set(newReturnType);
-                        added = true;
-                    } else {
-                        liter.remove();
-                    }
-                }
-            }
-
-            /*
-             * If we got through the list of existing uncovered return
-             * types without an assignability relationship, then add
-             * the new return type to the list of uncovered ones.
-             */
-            if (!added) {
-                uncoveredReturnTypes.add(newReturnType);
-            }
-        }
-
-        /*
-         * We shouldn't end up with more than one return type that is
-         * not assignable from any of the others.
-         */
-        if (uncoveredReturnTypes.size() > 1) {
-            ProxyMethod pm = methods.get(0);
-            throw new IllegalArgumentException(
-                "methods with same signature " +
-                getFriendlyMethodSignature(pm.methodName, pm.parameterTypes) +
-                " but incompatible return types: " + uncoveredReturnTypes);
-        }
-    }
-
-    /**
-     * A FieldInfo object contains information about a particular field
-     * in the class being generated.  The class mirrors the data items of
-     * the "field_info" structure of the class file format (see JVMS 4.5).
-     */
-    private class FieldInfo {
-        public int accessFlags;
-        public String name;
-        public String descriptor;
-
-        public FieldInfo(String name, String descriptor, int accessFlags) {
-            this.name = name;
-            this.descriptor = descriptor;
-            this.accessFlags = accessFlags;
-
-            /*
-             * Make sure that constant pool indexes are reserved for the
-             * following items before starting to write the final class file.
-             */
-            cp.getUtf8(name);
-            cp.getUtf8(descriptor);
-        }
-
-        public void write(DataOutputStream out) throws IOException {
-            /*
-             * Write all the items of the "field_info" structure.
-             * See JVMS section 4.5.
-             */
-                                        // u2 access_flags;
-            out.writeShort(accessFlags);
-                                        // u2 name_index;
-            out.writeShort(cp.getUtf8(name));
-                                        // u2 descriptor_index;
-            out.writeShort(cp.getUtf8(descriptor));
-                                        // u2 attributes_count;
-            out.writeShort(0);  // (no field_info attributes for proxy classes)
-        }
-    }
-
-    /**
-     * An ExceptionTableEntry object holds values for the data items of
-     * an entry in the "exception_table" item of the "Code" attribute of
-     * "method_info" structures (see JVMS 4.7.3).
-     */
-    private static class ExceptionTableEntry {
-        public short startPc;
-        public short endPc;
-        public short handlerPc;
-        public short catchType;
-
-        public ExceptionTableEntry(short startPc, short endPc,
-                                   short handlerPc, short catchType)
-        {
-            this.startPc = startPc;
-            this.endPc = endPc;
-            this.handlerPc = handlerPc;
-            this.catchType = catchType;
-        }
-    };
-
-    /**
-     * A MethodInfo object contains information about a particular method
-     * in the class being generated.  This class mirrors the data items of
-     * the "method_info" structure of the class file format (see JVMS 4.6).
-     */
-    private class MethodInfo {
-        public int accessFlags;
-        public String name;
-        public String descriptor;
-        public short maxStack;
-        public short maxLocals;
-        public ByteArrayOutputStream code = new ByteArrayOutputStream();
-        public List<ExceptionTableEntry> exceptionTable =
-            new ArrayList<ExceptionTableEntry>();
-        public short[] declaredExceptions;
-
-        public MethodInfo(String name, String descriptor, int accessFlags) {
-            this.name = name;
-            this.descriptor = descriptor;
-            this.accessFlags = accessFlags;
-
-            /*
-             * Make sure that constant pool indexes are reserved for the
-             * following items before starting to write the final class file.
-             */
-            cp.getUtf8(name);
-            cp.getUtf8(descriptor);
-            cp.getUtf8("Code");
-            cp.getUtf8("Exceptions");
-        }
-
-        public void write(DataOutputStream out) throws IOException {
-            /*
-             * Write all the items of the "method_info" structure.
-             * See JVMS section 4.6.
-             */
-                                        // u2 access_flags;
-            out.writeShort(accessFlags);
-                                        // u2 name_index;
-            out.writeShort(cp.getUtf8(name));
-                                        // u2 descriptor_index;
-            out.writeShort(cp.getUtf8(descriptor));
-                                        // u2 attributes_count;
-            out.writeShort(2);  // (two method_info attributes:)
-
-            // Write "Code" attribute. See JVMS section 4.7.3.
-
-                                        // u2 attribute_name_index;
-            out.writeShort(cp.getUtf8("Code"));
-                                        // u4 attribute_length;
-            out.writeInt(12 + code.size() + 8 * exceptionTable.size());
-                                        // u2 max_stack;
-            out.writeShort(maxStack);
-                                        // u2 max_locals;
-            out.writeShort(maxLocals);
-                                        // u2 code_length;
-            out.writeInt(code.size());
-                                        // u1 code[code_length];
-            code.writeTo(out);
-                                        // u2 exception_table_length;
-            out.writeShort(exceptionTable.size());
-            for (ExceptionTableEntry e : exceptionTable) {
-                                        // u2 start_pc;
-                out.writeShort(e.startPc);
-                                        // u2 end_pc;
-                out.writeShort(e.endPc);
-                                        // u2 handler_pc;
-                out.writeShort(e.handlerPc);
-                                        // u2 catch_type;
-                out.writeShort(e.catchType);
-            }
-                                        // u2 attributes_count;
-            out.writeShort(0);
-
-            // write "Exceptions" attribute.  See JVMS section 4.7.4.
-
-                                        // u2 attribute_name_index;
-            out.writeShort(cp.getUtf8("Exceptions"));
-                                        // u4 attributes_length;
-            out.writeInt(2 + 2 * declaredExceptions.length);
-                                        // u2 number_of_exceptions;
-            out.writeShort(declaredExceptions.length);
-                        // u2 exception_index_table[number_of_exceptions];
-            for (int i = 0; i < declaredExceptions.length; i++) {
-                out.writeShort(declaredExceptions[i]);
-            }
-        }
-
-    }
-
-    /**
-     * A ProxyMethod object represents a proxy method in the proxy class
-     * being generated: a method whose implementation will encode and
-     * dispatch invocations to the proxy instance's invocation handler.
-     */
-    private class ProxyMethod {
-
-        public String methodName;
-        public Class[] parameterTypes;
-        public Class returnType;
-        public Class[] exceptionTypes;
-        public Class fromClass;
-        public String methodFieldName;
-
-        private ProxyMethod(String methodName, Class[] parameterTypes,
-                            Class returnType, Class[] exceptionTypes,
-                            Class fromClass)
-        {
-            this.methodName = methodName;
-            this.parameterTypes = parameterTypes;
-            this.returnType = returnType;
-            this.exceptionTypes = exceptionTypes;
-            this.fromClass = fromClass;
-            this.methodFieldName = "m" + proxyMethodCount++;
-        }
-
-        /**
-         * Return a MethodInfo object for this method, including generating
-         * the code and exception table entry.
-         */
-        private MethodInfo generateMethod() throws IOException {
-            String desc = getMethodDescriptor(parameterTypes, returnType);
-            MethodInfo minfo = new MethodInfo(methodName, desc,
-                ACC_PUBLIC | ACC_FINAL);
-
-            int[] parameterSlot = new int[parameterTypes.length];
-            int nextSlot = 1;
-            for (int i = 0; i < parameterSlot.length; i++) {
-                parameterSlot[i] = nextSlot;
-                nextSlot += getWordsPerType(parameterTypes[i]);
-            }
-            int localSlot0 = nextSlot;
-            short pc, tryBegin = 0, tryEnd;
-
-            DataOutputStream out = new DataOutputStream(minfo.code);
-
-            code_aload(0, out);
-
-            out.writeByte(opc_getfield);
-            out.writeShort(cp.getFieldRef(
-                superclassName,
-                handlerFieldName, "Ljava/lang/reflect/InvocationHandler;"));
-
-            code_aload(0, out);
-
-            out.writeByte(opc_getstatic);
-            out.writeShort(cp.getFieldRef(
-                dotToSlash(className),
-                methodFieldName, "Ljava/lang/reflect/Method;"));
-
-            if (parameterTypes.length > 0) {
-
-                code_ipush(parameterTypes.length, out);
-
-                out.writeByte(opc_anewarray);
-                out.writeShort(cp.getClass("java/lang/Object"));
-
-                for (int i = 0; i < parameterTypes.length; i++) {
-
-                    out.writeByte(opc_dup);
-
-                    code_ipush(i, out);
-
-                    codeWrapArgument(parameterTypes[i], parameterSlot[i], out);
-
-                    out.writeByte(opc_aastore);
-                }
-            } else {
-
-                out.writeByte(opc_aconst_null);
-            }
-
-            out.writeByte(opc_invokeinterface);
-            out.writeShort(cp.getInterfaceMethodRef(
-                "java/lang/reflect/InvocationHandler",
-                "invoke",
-                "(Ljava/lang/Object;Ljava/lang/reflect/Method;" +
-                    "[Ljava/lang/Object;)Ljava/lang/Object;"));
-            out.writeByte(4);
-            out.writeByte(0);
-
-            if (returnType == void.class) {
-
-                out.writeByte(opc_pop);
-
-                out.writeByte(opc_return);
-
-            } else {
-
-                codeUnwrapReturnValue(returnType, out);
-            }
-
-            tryEnd = pc = (short) minfo.code.size();
-
-            List<Class<?>> catchList = computeUniqueCatchList(exceptionTypes);
-            if (catchList.size() > 0) {
-
-                for (Class<?> ex : catchList) {
-                    minfo.exceptionTable.add(new ExceptionTableEntry(
-                        tryBegin, tryEnd, pc,
-                        cp.getClass(dotToSlash(ex.getName()))));
-                }
-
-                out.writeByte(opc_athrow);
-
-                pc = (short) minfo.code.size();
-
-                minfo.exceptionTable.add(new ExceptionTableEntry(
-                    tryBegin, tryEnd, pc, cp.getClass("java/lang/Throwable")));
-
-                code_astore(localSlot0, out);
-
-                out.writeByte(opc_new);
-                out.writeShort(cp.getClass(
-                    "java/lang/reflect/UndeclaredThrowableException"));
-
-                out.writeByte(opc_dup);
-
-                code_aload(localSlot0, out);
-
-                out.writeByte(opc_invokespecial);
-
-                out.writeShort(cp.getMethodRef(
-                    "java/lang/reflect/UndeclaredThrowableException",
-                    "<init>", "(Ljava/lang/Throwable;)V"));
-
-                out.writeByte(opc_athrow);
-            }
-
-            if (minfo.code.size() > 65535) {
-                throw new IllegalArgumentException("code size limit exceeded");
-            }
-
-            minfo.maxStack = 10;
-            minfo.maxLocals = (short) (localSlot0 + 1);
-            minfo.declaredExceptions = new short[exceptionTypes.length];
-            for (int i = 0; i < exceptionTypes.length; i++) {
-                minfo.declaredExceptions[i] = cp.getClass(
-                    dotToSlash(exceptionTypes[i].getName()));
-            }
-
-            return minfo;
-        }
-
-        /**
-         * Generate code for wrapping an argument of the given type
-         * whose value can be found at the specified local variable
-         * index, in order for it to be passed (as an Object) to the
-         * invocation handler's "invoke" method.  The code is written
-         * to the supplied stream.
-         */
-        private void codeWrapArgument(Class type, int slot,
-                                      DataOutputStream out)
-            throws IOException
-        {
-            if (type.isPrimitive()) {
-                PrimitiveTypeInfo prim = PrimitiveTypeInfo.get(type);
-
-                if (type == int.class ||
-                    type == boolean.class ||
-                    type == byte.class ||
-                    type == char.class ||
-                    type == short.class)
-                {
-                    code_iload(slot, out);
-                } else if (type == long.class) {
-                    code_lload(slot, out);
-                } else if (type == float.class) {
-                    code_fload(slot, out);
-                } else if (type == double.class) {
-                    code_dload(slot, out);
-                } else {
-                    throw new AssertionError();
-                }
-
-                out.writeByte(opc_invokestatic);
-                out.writeShort(cp.getMethodRef(
-                    prim.wrapperClassName,
-                    "valueOf", prim.wrapperValueOfDesc));
-
-            } else {
-
-                code_aload(slot, out);
-            }
-        }
-
-        /**
-         * Generate code for unwrapping a return value of the given
-         * type from the invocation handler's "invoke" method (as type
-         * Object) to its correct type.  The code is written to the
-         * supplied stream.
-         */
-        private void codeUnwrapReturnValue(Class type, DataOutputStream out)
-            throws IOException
-        {
-            if (type.isPrimitive()) {
-                PrimitiveTypeInfo prim = PrimitiveTypeInfo.get(type);
-
-                out.writeByte(opc_checkcast);
-                out.writeShort(cp.getClass(prim.wrapperClassName));
-
-                out.writeByte(opc_invokevirtual);
-                out.writeShort(cp.getMethodRef(
-                    prim.wrapperClassName,
-                    prim.unwrapMethodName, prim.unwrapMethodDesc));
-
-                if (type == int.class ||
-                    type == boolean.class ||
-                    type == byte.class ||
-                    type == char.class ||
-                    type == short.class)
-                {
-                    out.writeByte(opc_ireturn);
-                } else if (type == long.class) {
-                    out.writeByte(opc_lreturn);
-                } else if (type == float.class) {
-                    out.writeByte(opc_freturn);
-                } else if (type == double.class) {
-                    out.writeByte(opc_dreturn);
-                } else {
-                    throw new AssertionError();
-                }
-
-            } else {
-
-                out.writeByte(opc_checkcast);
-                out.writeShort(cp.getClass(dotToSlash(type.getName())));
-
-                out.writeByte(opc_areturn);
-            }
-        }
-
-        /**
-         * Generate code for initializing the static field that stores
-         * the Method object for this proxy method.  The code is written
-         * to the supplied stream.
-         */
-        private void codeFieldInitialization(DataOutputStream out)
-            throws IOException
-        {
-            codeClassForName(fromClass, out);
-
-            code_ldc(cp.getString(methodName), out);
-
-            code_ipush(parameterTypes.length, out);
-
-            out.writeByte(opc_anewarray);
-            out.writeShort(cp.getClass("java/lang/Class"));
-
-            for (int i = 0; i < parameterTypes.length; i++) {
-
-                out.writeByte(opc_dup);
-
-                code_ipush(i, out);
-
-                if (parameterTypes[i].isPrimitive()) {
-                    PrimitiveTypeInfo prim =
-                        PrimitiveTypeInfo.get(parameterTypes[i]);
-
-                    out.writeByte(opc_getstatic);
-                    out.writeShort(cp.getFieldRef(
-                        prim.wrapperClassName, "TYPE", "Ljava/lang/Class;"));
-
-                } else {
-                    codeClassForName(parameterTypes[i], out);
-                }
-
-                out.writeByte(opc_aastore);
-            }
-
-            out.writeByte(opc_invokevirtual);
-            out.writeShort(cp.getMethodRef(
-                "java/lang/Class",
-                "getMethod",
-                "(Ljava/lang/String;[Ljava/lang/Class;)" +
-                "Ljava/lang/reflect/Method;"));
-
-            out.writeByte(opc_putstatic);
-            out.writeShort(cp.getFieldRef(
-                dotToSlash(className),
-                methodFieldName, "Ljava/lang/reflect/Method;"));
-        }
-    }
-
-    /**
-     * Generate the constructor method for the proxy class.
-     */
-    private MethodInfo generateConstructor() throws IOException {
-        MethodInfo minfo = new MethodInfo(
-            "<init>", "(Ljava/lang/reflect/InvocationHandler;)V",
-            ACC_PUBLIC);
-
-        DataOutputStream out = new DataOutputStream(minfo.code);
-
-        code_aload(0, out);
-
-        code_aload(1, out);
-
-        out.writeByte(opc_invokespecial);
-        out.writeShort(cp.getMethodRef(
-            superclassName,
-            "<init>", "(Ljava/lang/reflect/InvocationHandler;)V"));
-
-        out.writeByte(opc_return);
-
-        minfo.maxStack = 10;
-        minfo.maxLocals = 2;
-        minfo.declaredExceptions = new short[0];
-
-        return minfo;
-    }
-
-    /**
-     * Generate the static initializer method for the proxy class.
-     */
-    private MethodInfo generateStaticInitializer() throws IOException {
-        MethodInfo minfo = new MethodInfo(
-            "<clinit>", "()V", ACC_STATIC);
-
-        int localSlot0 = 1;
-        short pc, tryBegin = 0, tryEnd;
-
-        DataOutputStream out = new DataOutputStream(minfo.code);
-
-        for (List<ProxyMethod> sigmethods : proxyMethods.values()) {
-            for (ProxyMethod pm : sigmethods) {
-                pm.codeFieldInitialization(out);
-            }
-        }
-
-        out.writeByte(opc_return);
-
-        tryEnd = pc = (short) minfo.code.size();
-
-        minfo.exceptionTable.add(new ExceptionTableEntry(
-            tryBegin, tryEnd, pc,
-            cp.getClass("java/lang/NoSuchMethodException")));
-
-        code_astore(localSlot0, out);
-
-        out.writeByte(opc_new);
-        out.writeShort(cp.getClass("java/lang/NoSuchMethodError"));
-
-        out.writeByte(opc_dup);
-
-        code_aload(localSlot0, out);
-
-        out.writeByte(opc_invokevirtual);
-        out.writeShort(cp.getMethodRef(
-            "java/lang/Throwable", "getMessage", "()Ljava/lang/String;"));
-
-        out.writeByte(opc_invokespecial);
-        out.writeShort(cp.getMethodRef(
-            "java/lang/NoSuchMethodError", "<init>", "(Ljava/lang/String;)V"));
-
-        out.writeByte(opc_athrow);
-
-        pc = (short) minfo.code.size();
-
-        minfo.exceptionTable.add(new ExceptionTableEntry(
-            tryBegin, tryEnd, pc,
-            cp.getClass("java/lang/ClassNotFoundException")));
-
-        code_astore(localSlot0, out);
-
-        out.writeByte(opc_new);
-        out.writeShort(cp.getClass("java/lang/NoClassDefFoundError"));
-
-        out.writeByte(opc_dup);
-
-        code_aload(localSlot0, out);
-
-        out.writeByte(opc_invokevirtual);
-        out.writeShort(cp.getMethodRef(
-            "java/lang/Throwable", "getMessage", "()Ljava/lang/String;"));
-
-        out.writeByte(opc_invokespecial);
-        out.writeShort(cp.getMethodRef(
-            "java/lang/NoClassDefFoundError",
-            "<init>", "(Ljava/lang/String;)V"));
-
-        out.writeByte(opc_athrow);
-
-        if (minfo.code.size() > 65535) {
-            throw new IllegalArgumentException("code size limit exceeded");
-        }
-
-        minfo.maxStack = 10;
-        minfo.maxLocals = (short) (localSlot0 + 1);
-        minfo.declaredExceptions = new short[0];
-
-        return minfo;
-    }
-
-
-    /*
-     * =============== Code Generation Utility Methods ===============
-     */
-
-    /*
-     * The following methods generate code for the load or store operation
-     * indicated by their name for the given local variable.  The code is
-     * written to the supplied stream.
-     */
-
-    private void code_iload(int lvar, DataOutputStream out)
-        throws IOException
-    {
-        codeLocalLoadStore(lvar, opc_iload, opc_iload_0, out);
-    }
-
-    private void code_lload(int lvar, DataOutputStream out)
-        throws IOException
-    {
-        codeLocalLoadStore(lvar, opc_lload, opc_lload_0, out);
-    }
-
-    private void code_fload(int lvar, DataOutputStream out)
-        throws IOException
-    {
-        codeLocalLoadStore(lvar, opc_fload, opc_fload_0, out);
-    }
-
-    private void code_dload(int lvar, DataOutputStream out)
-        throws IOException
-    {
-        codeLocalLoadStore(lvar, opc_dload, opc_dload_0, out);
-    }
-
-    private void code_aload(int lvar, DataOutputStream out)
-        throws IOException
-    {
-        codeLocalLoadStore(lvar, opc_aload, opc_aload_0, out);
-    }
-
-//  private void code_istore(int lvar, DataOutputStream out)
-//      throws IOException
-//  {
-//      codeLocalLoadStore(lvar, opc_istore, opc_istore_0, out);
-//  }
-
-//  private void code_lstore(int lvar, DataOutputStream out)
-//      throws IOException
-//  {
-//      codeLocalLoadStore(lvar, opc_lstore, opc_lstore_0, out);
-//  }
-
-//  private void code_fstore(int lvar, DataOutputStream out)
-//      throws IOException
-//  {
-//      codeLocalLoadStore(lvar, opc_fstore, opc_fstore_0, out);
-//  }
-
-//  private void code_dstore(int lvar, DataOutputStream out)
-//      throws IOException
-//  {
-//      codeLocalLoadStore(lvar, opc_dstore, opc_dstore_0, out);
-//  }
-
-    private void code_astore(int lvar, DataOutputStream out)
-        throws IOException
-    {
-        codeLocalLoadStore(lvar, opc_astore, opc_astore_0, out);
-    }
-
-    /**
-     * Generate code for a load or store instruction for the given local
-     * variable.  The code is written to the supplied stream.
-     *
-     * "opcode" indicates the opcode form of the desired load or store
-     * instruction that takes an explicit local variable index, and
-     * "opcode_0" indicates the corresponding form of the instruction
-     * with the implicit index 0.
-     */
-    private void codeLocalLoadStore(int lvar, int opcode, int opcode_0,
-                                    DataOutputStream out)
-        throws IOException
-    {
-        assert lvar >= 0 && lvar <= 0xFFFF;
-        if (lvar <= 3) {
-            out.writeByte(opcode_0 + lvar);
-        } else if (lvar <= 0xFF) {
-            out.writeByte(opcode);
-            out.writeByte(lvar & 0xFF);
-        } else {
-            /*
-             * Use the "wide" instruction modifier for local variable
-             * indexes that do not fit into an unsigned byte.
-             */
-            out.writeByte(opc_wide);
-            out.writeByte(opcode);
-            out.writeShort(lvar & 0xFFFF);
-        }
-    }
-
-    /**
-     * Generate code for an "ldc" instruction for the given constant pool
-     * index (the "ldc_w" instruction is used if the index does not fit
-     * into an unsigned byte).  The code is written to the supplied stream.
-     */
-    private void code_ldc(int index, DataOutputStream out)
-        throws IOException
-    {
-        assert index >= 0 && index <= 0xFFFF;
-        if (index <= 0xFF) {
-            out.writeByte(opc_ldc);
-            out.writeByte(index & 0xFF);
-        } else {
-            out.writeByte(opc_ldc_w);
-            out.writeShort(index & 0xFFFF);
-        }
-    }
-
-    /**
-     * Generate code to push a constant integer value on to the operand
-     * stack, using the "iconst_<i>", "bipush", or "sipush" instructions
-     * depending on the size of the value.  The code is written to the
-     * supplied stream.
-     */
-    private void code_ipush(int value, DataOutputStream out)
-        throws IOException
-    {
-        if (value >= -1 && value <= 5) {
-            out.writeByte(opc_iconst_0 + value);
-        } else if (value >= Byte.MIN_VALUE && value <= Byte.MAX_VALUE) {
-            out.writeByte(opc_bipush);
-            out.writeByte(value & 0xFF);
-        } else if (value >= Short.MIN_VALUE && value <= Short.MAX_VALUE) {
-            out.writeByte(opc_sipush);
-            out.writeShort(value & 0xFFFF);
-        } else {
-            throw new AssertionError();
-        }
-    }
-
-    /**
-     * Generate code to invoke the Class.forName with the name of the given
-     * class to get its Class object at runtime.  The code is written to
-     * the supplied stream.  Note that the code generated by this method
-     * may caused the checked ClassNotFoundException to be thrown.
-     */
-    private void codeClassForName(Class cl, DataOutputStream out)
-        throws IOException
-    {
-        code_ldc(cp.getString(cl.getName()), out);
-
-        out.writeByte(opc_invokestatic);
-        out.writeShort(cp.getMethodRef(
-            "java/lang/Class",
-            "forName", "(Ljava/lang/String;)Ljava/lang/Class;"));
-    }
-
-
-    /*
-     * ==================== General Utility Methods ====================
-     */
-
-    /**
-     * Convert a fully qualified class name that uses '.' as the package
-     * separator, the external representation used by the Java language
-     * and APIs, to a fully qualified class name that uses '/' as the
-     * package separator, the representation used in the class file
-     * format (see JVMS section 4.2).
-     */
-    private static String dotToSlash(String name) {
-        return name.replace('.', '/');
-    }
-
-    /**
-     * Return the "method descriptor" string for a method with the given
-     * parameter types and return type.  See JVMS section 4.3.3.
-     */
-    private static String getMethodDescriptor(Class[] parameterTypes,
-                                              Class returnType)
-    {
-        return getParameterDescriptors(parameterTypes) +
-            ((returnType == void.class) ? "V" : getFieldType(returnType));
-    }
-
-    /**
-     * Return the list of "parameter descriptor" strings enclosed in
-     * parentheses corresponding to the given parameter types (in other
-     * words, a method descriptor without a return descriptor).  This
-     * string is useful for constructing string keys for methods without
-     * regard to their return type.
-     */
-    private static String getParameterDescriptors(Class[] parameterTypes) {
-        StringBuilder desc = new StringBuilder("(");
-        for (int i = 0; i < parameterTypes.length; i++) {
-            desc.append(getFieldType(parameterTypes[i]));
-        }
-        desc.append(')');
-        return desc.toString();
-    }
-
-    /**
-     * Return the "field type" string for the given type, appropriate for
-     * a field descriptor, a parameter descriptor, or a return descriptor
-     * other than "void".  See JVMS section 4.3.2.
-     */
-    private static String getFieldType(Class type) {
-        if (type.isPrimitive()) {
-            return PrimitiveTypeInfo.get(type).baseTypeString;
-        } else if (type.isArray()) {
-            /*
-             * According to JLS 20.3.2, the getName() method on Class does
-             * return the VM type descriptor format for array classes (only);
-             * using that should be quicker than the otherwise obvious code:
-             *
-             *     return "[" + getTypeDescriptor(type.getComponentType());
-             */
-            return type.getName().replace('.', '/');
-        } else {
-            return "L" + dotToSlash(type.getName()) + ";";
-        }
-    }
-
-    /**
-     * Returns a human-readable string representing the signature of a
-     * method with the given name and parameter types.
-     */
-    private static String getFriendlyMethodSignature(String name,
-                                                     Class[] parameterTypes)
-    {
-        StringBuilder sig = new StringBuilder(name);
-        sig.append('(');
-        for (int i = 0; i < parameterTypes.length; i++) {
-            if (i > 0) {
-                sig.append(',');
-            }
-            Class parameterType = parameterTypes[i];
-            int dimensions = 0;
-            while (parameterType.isArray()) {
-                parameterType = parameterType.getComponentType();
-                dimensions++;
-            }
-            sig.append(parameterType.getName());
-            while (dimensions-- > 0) {
-                sig.append("[]");
-            }
-        }
-        sig.append(')');
-        return sig.toString();
-    }
-
-    /**
-     * Return the number of abstract "words", or consecutive local variable
-     * indexes, required to contain a value of the given type.  See JVMS
-     * section 3.6.1.
-     *
-     * Note that the original version of the JVMS contained a definition of
-     * this abstract notion of a "word" in section 3.4, but that definition
-     * was removed for the second edition.
-     */
-    private static int getWordsPerType(Class type) {
-        if (type == long.class || type == double.class) {
-            return 2;
-        } else {
-            return 1;
-        }
-    }
-
-    /**
-     * Add to the given list all of the types in the "from" array that
-     * are not already contained in the list and are assignable to at
-     * least one of the types in the "with" array.
-     *
-     * This method is useful for computing the greatest common set of
-     * declared exceptions from duplicate methods inherited from
-     * different interfaces.
-     */
-    private static void collectCompatibleTypes(Class<?>[] from,
-                                               Class<?>[] with,
-                                               List<Class<?>> list)
-    {
-        for (int i = 0; i < from.length; i++) {
-            if (!list.contains(from[i])) {
-                for (int j = 0; j < with.length; j++) {
-                    if (with[j].isAssignableFrom(from[i])) {
-                        list.add(from[i]);
-                        break;
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Given the exceptions declared in the throws clause of a proxy method,
-     * compute the exceptions that need to be caught from the invocation
-     * handler's invoke method and rethrown intact in the method's
-     * implementation before catching other Throwables and wrapping them
-     * in UndeclaredThrowableExceptions.
-     *
-     * The exceptions to be caught are returned in a List object.  Each
-     * exception in the returned list is guaranteed to not be a subclass of
-     * any of the other exceptions in the list, so the catch blocks for
-     * these exceptions may be generated in any order relative to each other.
-     *
-     * Error and RuntimeException are each always contained by the returned
-     * list (if none of their superclasses are contained), since those
-     * unchecked exceptions should always be rethrown intact, and thus their
-     * subclasses will never appear in the returned list.
-     *
-     * The returned List will be empty if java.lang.Throwable is in the
-     * given list of declared exceptions, indicating that no exceptions
-     * need to be caught.
-     */
-    private static List<Class<?>> computeUniqueCatchList(Class<?>[] exceptions) {
-        List<Class<?>> uniqueList = new ArrayList<Class<?>>();
-                                                // unique exceptions to catch
-
-        uniqueList.add(Error.class);            // always catch/rethrow these
-        uniqueList.add(RuntimeException.class);
-
-    nextException:
-        for (int i = 0; i < exceptions.length; i++) {
-            Class<?> ex = exceptions[i];
-            if (ex.isAssignableFrom(Throwable.class)) {
-                /*
-                 * If Throwable is declared to be thrown by the proxy method,
-                 * then no catch blocks are necessary, because the invoke
-                 * can, at most, throw Throwable anyway.
-                 */
-                uniqueList.clear();
-                break;
-            } else if (!Throwable.class.isAssignableFrom(ex)) {
-                /*
-                 * Ignore types that cannot be thrown by the invoke method.
-                 */
-                continue;
-            }
-            /*
-             * Compare this exception against the current list of
-             * exceptions that need to be caught:
-             */
-            for (int j = 0; j < uniqueList.size();) {
-                Class<?> ex2 = uniqueList.get(j);
-                if (ex2.isAssignableFrom(ex)) {
-                    /*
-                     * if a superclass of this exception is already on
-                     * the list to catch, then ignore this one and continue;
-                     */
-                    continue nextException;
-                } else if (ex.isAssignableFrom(ex2)) {
-                    /*
-                     * if a subclass of this exception is on the list
-                     * to catch, then remove it;
-                     */
-                    uniqueList.remove(j);
-                } else {
-                    j++;        // else continue comparing.
-                }
-            }
-            // This exception is unique (so far): add it to the list to catch.
-            uniqueList.add(ex);
-        }
-        return uniqueList;
-    }
-
-    /**
-     * A PrimitiveTypeInfo object contains assorted information about
-     * a primitive type in its public fields.  The struct for a particular
-     * primitive type can be obtained using the static "get" method.
-     */
-    private static class PrimitiveTypeInfo {
-
-        /** "base type" used in various descriptors (see JVMS section 4.3.2) */
-        public String baseTypeString;
-
-        /** name of corresponding wrapper class */
-        public String wrapperClassName;
-
-        /** method descriptor for wrapper class "valueOf" factory method */
-        public String wrapperValueOfDesc;
-
-        /** name of wrapper class method for retrieving primitive value */
-        public String unwrapMethodName;
-
-        /** descriptor of same method */
-        public String unwrapMethodDesc;
-
-        private static Map<Class,PrimitiveTypeInfo> table =
-            new HashMap<Class,PrimitiveTypeInfo>();
-        static {
-            add(byte.class, Byte.class);
-            add(char.class, Character.class);
-            add(double.class, Double.class);
-            add(float.class, Float.class);
-            add(int.class, Integer.class);
-            add(long.class, Long.class);
-            add(short.class, Short.class);
-            add(boolean.class, Boolean.class);
-        }
-
-        private static void add(Class primitiveClass, Class wrapperClass) {
-            table.put(primitiveClass,
-                      new PrimitiveTypeInfo(primitiveClass, wrapperClass));
-        }
-
-        private PrimitiveTypeInfo(Class primitiveClass, Class wrapperClass) {
-            assert primitiveClass.isPrimitive();
-
-            baseTypeString =
-                Array.newInstance(primitiveClass, 0)
-                .getClass().getName().substring(1);
-            wrapperClassName = dotToSlash(wrapperClass.getName());
-            wrapperValueOfDesc =
-                "(" + baseTypeString + ")L" + wrapperClassName + ";";
-            unwrapMethodName = primitiveClass.getName() + "Value";
-            unwrapMethodDesc = "()" + baseTypeString;
-        }
-
-        public static PrimitiveTypeInfo get(Class cl) {
-            return table.get(cl);
-        }
-    }
-
-
-    /**
-     * A ConstantPool object represents the constant pool of a class file
-     * being generated.  This representation of a constant pool is designed
-     * specifically for use by ProxyGenerator; in particular, it assumes
-     * that constant pool entries will not need to be resorted (for example,
-     * by their type, as the Java compiler does), so that the final index
-     * value can be assigned and used when an entry is first created.
-     *
-     * Note that new entries cannot be created after the constant pool has
-     * been written to a class file.  To prevent such logic errors, a
-     * ConstantPool instance can be marked "read only", so that further
-     * attempts to add new entries will fail with a runtime exception.
-     *
-     * See JVMS section 4.4 for more information about the constant pool
-     * of a class file.
-     */
-    private static class ConstantPool {
-
-        /**
-         * list of constant pool entries, in constant pool index order.
-         *
-         * This list is used when writing the constant pool to a stream
-         * and for assigning the next index value.  Note that element 0
-         * of this list corresponds to constant pool index 1.
-         */
-        private List<Entry> pool = new ArrayList<Entry>(32);
-
-        /**
-         * maps constant pool data of all types to constant pool indexes.
-         *
-         * This map is used to look up the index of an existing entry for
-         * values of all types.
-         */
-        private Map<Object,Short> map = new HashMap<Object,Short>(16);
-
-        /** true if no new constant pool entries may be added */
-        private boolean readOnly = false;
-
-        /**
-         * Get or assign the index for a CONSTANT_Utf8 entry.
-         */
-        public short getUtf8(String s) {
-            if (s == null) {
-                throw new NullPointerException();
-            }
-            return getValue(s);
-        }
-
-        /**
-         * Get or assign the index for a CONSTANT_Integer entry.
-         */
-        public short getInteger(int i) {
-            return getValue(new Integer(i));
-        }
-
-        /**
-         * Get or assign the index for a CONSTANT_Float entry.
-         */
-        public short getFloat(float f) {
-            return getValue(new Float(f));
-        }
-
-        /**
-         * Get or assign the index for a CONSTANT_Class entry.
-         */
-        public short getClass(String name) {
-            short utf8Index = getUtf8(name);
-            return getIndirect(new IndirectEntry(
-                CONSTANT_CLASS, utf8Index));
-        }
-
-        /**
-         * Get or assign the index for a CONSTANT_String entry.
-         */
-        public short getString(String s) {
-            short utf8Index = getUtf8(s);
-            return getIndirect(new IndirectEntry(
-                CONSTANT_STRING, utf8Index));
-        }
-
-        /**
-         * Get or assign the index for a CONSTANT_FieldRef entry.
-         */
-        public short getFieldRef(String className,
-                                 String name, String descriptor)
-        {
-            short classIndex = getClass(className);
-            short nameAndTypeIndex = getNameAndType(name, descriptor);
-            return getIndirect(new IndirectEntry(
-                CONSTANT_FIELD, classIndex, nameAndTypeIndex));
-        }
-
-        /**
-         * Get or assign the index for a CONSTANT_MethodRef entry.
-         */
-        public short getMethodRef(String className,
-                                  String name, String descriptor)
-        {
-            short classIndex = getClass(className);
-            short nameAndTypeIndex = getNameAndType(name, descriptor);
-            return getIndirect(new IndirectEntry(
-                CONSTANT_METHOD, classIndex, nameAndTypeIndex));
-        }
-
-        /**
-         * Get or assign the index for a CONSTANT_InterfaceMethodRef entry.
-         */
-        public short getInterfaceMethodRef(String className, String name,
-                                           String descriptor)
-        {
-            short classIndex = getClass(className);
-            short nameAndTypeIndex = getNameAndType(name, descriptor);
-            return getIndirect(new IndirectEntry(
-                CONSTANT_INTERFACEMETHOD, classIndex, nameAndTypeIndex));
-        }
-
-        /**
-         * Get or assign the index for a CONSTANT_NameAndType entry.
-         */
-        public short getNameAndType(String name, String descriptor) {
-            short nameIndex = getUtf8(name);
-            short descriptorIndex = getUtf8(descriptor);
-            return getIndirect(new IndirectEntry(
-                CONSTANT_NAMEANDTYPE, nameIndex, descriptorIndex));
-        }
-
-        /**
-         * Set this ConstantPool instance to be "read only".
-         *
-         * After this method has been called, further requests to get
-         * an index for a non-existent entry will cause an InternalError
-         * to be thrown instead of creating of the entry.
-         */
-        public void setReadOnly() {
-            readOnly = true;
-        }
-
-        /**
-         * Write this constant pool to a stream as part of
-         * the class file format.
-         *
-         * This consists of writing the "constant_pool_count" and
-         * "constant_pool[]" items of the "ClassFile" structure, as
-         * described in JVMS section 4.1.
-         */
-        public void write(OutputStream out) throws IOException {
-            DataOutputStream dataOut = new DataOutputStream(out);
-
-            // constant_pool_count: number of entries plus one
-            dataOut.writeShort(pool.size() + 1);
-
-            for (Entry e : pool) {
-                e.write(dataOut);
-            }
-        }
-
-        /**
-         * Add a new constant pool entry and return its index.
-         */
-        private short addEntry(Entry entry) {
-            pool.add(entry);
-            /*
-             * Note that this way of determining the index of the
-             * added entry is wrong if this pool supports
-             * CONSTANT_Long or CONSTANT_Double entries.
-             */
-            if (pool.size() >= 65535) {
-                throw new IllegalArgumentException(
-                    "constant pool size limit exceeded");
-            }
-            return (short) pool.size();
-        }
-
-        /**
-         * Get or assign the index for an entry of a type that contains
-         * a direct value.  The type of the given object determines the
-         * type of the desired entry as follows:
-         *
-         *      java.lang.String        CONSTANT_Utf8
-         *      java.lang.Integer       CONSTANT_Integer
-         *      java.lang.Float         CONSTANT_Float
-         *      java.lang.Long          CONSTANT_Long
-         *      java.lang.Double        CONSTANT_DOUBLE
-         */
-        private short getValue(Object key) {
-            Short index = map.get(key);
-            if (index != null) {
-                return index.shortValue();
-            } else {
-                if (readOnly) {
-                    throw new InternalError(
-                        "late constant pool addition: " + key);
-                }
-                short i = addEntry(new ValueEntry(key));
-                map.put(key, new Short(i));
-                return i;
-            }
-        }
-
-        /**
-         * Get or assign the index for an entry of a type that contains
-         * references to other constant pool entries.
-         */
-        private short getIndirect(IndirectEntry e) {
-            Short index = map.get(e);
-            if (index != null) {
-                return index.shortValue();
-            } else {
-                if (readOnly) {
-                    throw new InternalError("late constant pool addition");
-                }
-                short i = addEntry(e);
-                map.put(e, new Short(i));
-                return i;
-            }
-        }
-
-        /**
-         * Entry is the abstact superclass of all constant pool entry types
-         * that can be stored in the "pool" list; its purpose is to define a
-         * common method for writing constant pool entries to a class file.
-         */
-        private static abstract class Entry {
-            public abstract void write(DataOutputStream out)
-                throws IOException;
-        }
-
-        /**
-         * ValueEntry represents a constant pool entry of a type that
-         * contains a direct value (see the comments for the "getValue"
-         * method for a list of such types).
-         *
-         * ValueEntry objects are not used as keys for their entries in the
-         * Map "map", so no useful hashCode or equals methods are defined.
-         */
-        private static class ValueEntry extends Entry {
-            private Object value;
-
-            public ValueEntry(Object value) {
-                this.value = value;
-            }
-
-            public void write(DataOutputStream out) throws IOException {
-                if (value instanceof String) {
-                    out.writeByte(CONSTANT_UTF8);
-                    out.writeUTF((String) value);
-                } else if (value instanceof Integer) {
-                    out.writeByte(CONSTANT_INTEGER);
-                    out.writeInt(((Integer) value).intValue());
-                } else if (value instanceof Float) {
-                    out.writeByte(CONSTANT_FLOAT);
-                    out.writeFloat(((Float) value).floatValue());
-                } else if (value instanceof Long) {
-                    out.writeByte(CONSTANT_LONG);
-                    out.writeLong(((Long) value).longValue());
-                } else if (value instanceof Double) {
-                    out.writeDouble(CONSTANT_DOUBLE);
-                    out.writeDouble(((Double) value).doubleValue());
-                } else {
-                    throw new InternalError("bogus value entry: " + value);
-                }
-            }
-        }
-
-        /**
-         * IndirectEntry represents a constant pool entry of a type that
-         * references other constant pool entries, i.e., the following types:
-         *
-         *      CONSTANT_Class, CONSTANT_String, CONSTANT_Fieldref,
-         *      CONSTANT_Methodref, CONSTANT_InterfaceMethodref, and
-         *      CONSTANT_NameAndType.
-         *
-         * Each of these entry types contains either one or two indexes of
-         * other constant pool entries.
-         *
-         * IndirectEntry objects are used as the keys for their entries in
-         * the Map "map", so the hashCode and equals methods are overridden
-         * to allow matching.
-         */
-        private static class IndirectEntry extends Entry {
-            private int tag;
-            private short index0;
-            private short index1;
-
-            /**
-             * Construct an IndirectEntry for a constant pool entry type
-             * that contains one index of another entry.
-             */
-            public IndirectEntry(int tag, short index) {
-                this.tag = tag;
-                this.index0 = index;
-                this.index1 = 0;
-            }
-
-            /**
-             * Construct an IndirectEntry for a constant pool entry type
-             * that contains two indexes for other entries.
-             */
-            public IndirectEntry(int tag, short index0, short index1) {
-                this.tag = tag;
-                this.index0 = index0;
-                this.index1 = index1;
-            }
-
-            public void write(DataOutputStream out) throws IOException {
-                out.writeByte(tag);
-                out.writeShort(index0);
-                /*
-                 * If this entry type contains two indexes, write
-                 * out the second, too.
-                 */
-                if (tag == CONSTANT_FIELD ||
-                    tag == CONSTANT_METHOD ||
-                    tag == CONSTANT_INTERFACEMETHOD ||
-                    tag == CONSTANT_NAMEANDTYPE)
-                {
-                    out.writeShort(index1);
-                }
-            }
-
-            public int hashCode() {
-                return tag + index0 + index1;
-            }
-
-            public boolean equals(Object obj) {
-                if (obj instanceof IndirectEntry) {
-                    IndirectEntry other = (IndirectEntry) obj;
-                    if (tag == other.tag &&
-                        index0 == other.index0 && index1 == other.index1)
-                    {
-                        return true;
-                    }
-                }
-                return false;
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/Queue.java b/ojluni/src/main/java/sun/misc/Queue.java
deleted file mode 100755
index 4edc8c9..0000000
--- a/ojluni/src/main/java/sun/misc/Queue.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-package sun.misc;
-
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-
-/**
- * Queue: implements a simple queue mechanism.  Allows for enumeration of the
- * elements.
- *
- * @author Herb Jellinek
- */
-
-public class Queue {
-
-    int length = 0;
-
-    QueueElement head = null;
-    QueueElement tail = null;
-
-    public Queue() {
-    }
-
-    /**
-     * Enqueue an object.
-     */
-    public synchronized void enqueue(Object obj) {
-
-        QueueElement newElt = new QueueElement(obj);
-
-        if (head == null) {
-            head = newElt;
-            tail = newElt;
-            length = 1;
-        } else {
-            newElt.next = head;
-            head.prev = newElt;
-            head = newElt;
-            length++;
-        }
-        notify();
-    }
-
-    /**
-     * Dequeue the oldest object on the queue.  Will wait indefinitely.
-     *
-     * @return    the oldest object on the queue.
-     * @exception java.lang.InterruptedException if any thread has
-     *              interrupted this thread.
-     */
-    public Object dequeue() throws InterruptedException {
-        return dequeue(0L);
-    }
-
-    /**
-     * Dequeue the oldest object on the queue.
-     * @param timeOut the number of milliseconds to wait for something
-     * to arrive.
-     *
-     * @return    the oldest object on the queue.
-     * @exception java.lang.InterruptedException if any thread has
-     *              interrupted this thread.
-     */
-    public synchronized Object dequeue(long timeOut)
-        throws InterruptedException {
-
-        while (tail == null) {
-            wait(timeOut);
-        }
-        QueueElement elt = tail;
-        tail = elt.prev;
-        if (tail == null) {
-            head = null;
-        } else {
-            tail.next = null;
-        }
-        length--;
-        return elt.obj;
-    }
-
-    /**
-     * Is the queue empty?
-     * @return true if the queue is empty.
-     */
-    public synchronized boolean isEmpty() {
-        return (tail == null);
-    }
-
-    /**
-     * Returns an enumeration of the elements in Last-In, First-Out
-     * order. Use the Enumeration methods on the returned object to
-     * fetch the elements sequentially.
-     */
-    public final synchronized Enumeration elements() {
-        return new LIFOQueueEnumerator(this);
-    }
-
-    /**
-     * Returns an enumeration of the elements in First-In, First-Out
-     * order. Use the Enumeration methods on the returned object to
-     * fetch the elements sequentially.
-     */
-    public final synchronized Enumeration reverseElements() {
-        return new FIFOQueueEnumerator(this);
-    }
-
-    public synchronized void dump(String msg) {
-        System.err.println(">> "+msg);
-        System.err.println("["+length+" elt(s); head = "+
-                           (head == null ? "null" : (head.obj)+"")+
-                           " tail = "+(tail == null ? "null" : (tail.obj)+""));
-        QueueElement cursor = head;
-        QueueElement last = null;
-        while (cursor != null) {
-            System.err.println("  "+cursor);
-            last = cursor;
-            cursor = cursor.next;
-        }
-        if (last != tail) {
-            System.err.println("  tail != last: "+tail+", "+last);
-        }
-        System.err.println("]");
-    }
-}
-
-final class FIFOQueueEnumerator implements Enumeration {
-    Queue queue;
-    QueueElement cursor;
-
-    FIFOQueueEnumerator(Queue q) {
-        queue = q;
-        cursor = q.tail;
-    }
-
-    public boolean hasMoreElements() {
-        return (cursor != null);
-    }
-
-    public Object nextElement() {
-        synchronized (queue) {
-            if (cursor != null) {
-                QueueElement result = cursor;
-                cursor = cursor.prev;
-                return result.obj;
-            }
-        }
-        throw new NoSuchElementException("FIFOQueueEnumerator");
-    }
-}
-
-final class LIFOQueueEnumerator implements Enumeration {
-    Queue queue;
-    QueueElement cursor;
-
-    LIFOQueueEnumerator(Queue q) {
-        queue = q;
-        cursor = q.head;
-    }
-
-    public boolean hasMoreElements() {
-        return (cursor != null);
-    }
-
-    public Object nextElement() {
-        synchronized (queue) {
-            if (cursor != null) {
-                QueueElement result = cursor;
-                cursor = cursor.next;
-                return result.obj;
-            }
-        }
-        throw new NoSuchElementException("LIFOQueueEnumerator");
-    }
-}
-
-class QueueElement {
-    QueueElement next = null;
-    QueueElement prev = null;
-
-    Object obj = null;
-
-    QueueElement(Object obj) {
-        this.obj = obj;
-    }
-
-    public String toString() {
-        return "QueueElement[obj="+obj+(prev == null ? " null" : " prev")+
-            (next == null ? " null" : " next")+"]";
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/Ref.java b/ojluni/src/main/java/sun/misc/Ref.java
deleted file mode 100755
index 770cb3d..0000000
--- a/ojluni/src/main/java/sun/misc/Ref.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 1995, 2004, 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.
- */
-
-package sun.misc;
-import java.lang.ref.SoftReference;
-
-
-/**
- * A "Ref" is an indirect reference to an object that the garbage collector
- * knows about.  An application should override the reconstitute() method with one
- * that will construct the object based on information in the Ref, often by
- * reading from a file.  The get() method retains a cache of the result of the last call to
- * reconstitute() in the Ref.  When space gets tight, the garbage collector
- * will clear old Ref cache entries when there are no other pointers to the
- * object.  In normal usage, Ref will always be subclassed.  The subclass will add the
- * instance variables necessary for the reconstitute() method to work.  It will also add a
- * constructor to set them up, and write a version of reconstitute().
- *
- * @deprecated This class has been replaced by
- * <code>java.util.SoftReference</code>.
- *
- * @see java.util.SoftReference
- *
- */
-@Deprecated
-
-public abstract class Ref {
-
-    private SoftReference soft = null;
-
-    /**
-     * Returns a pointer to the object referenced by this Ref.  If the object
-     * has been thrown away by the garbage collector, it will be
-     * reconstituted. This method does everything necessary to ensure that the garbage
-     * collector throws things away in Least Recently Used(LRU) order.  Applications should
-     * never override this method. The get() method effectively caches calls to
-     * reconstitute().
-     */
-    public synchronized Object get() {
-        Object t = check();
-        if (t == null) {
-            t = reconstitute();
-            setThing(t);
-        }
-        return t;
-    }
-
-    /**
-     * Returns a pointer to the object referenced by this Ref by
-     * reconstituting it from some external source (such as a file).  This method should not
-     * bother with caching since the method get() will deal with that.
-     * <p>
-     * In normal usage, Ref will always be subclassed.  The subclass will add
-     * the instance variables necessary for reconstitute() to work.  It will
-     * also add a constructor to set them up, and write a version of
-     * reconstitute().
-     */
-    public abstract Object reconstitute();
-
-    /**
-     * Flushes the cached object.  Forces the next invocation of get() to
-     * invoke reconstitute().
-     */
-    public synchronized void flush() {
-        SoftReference s = soft;
-        if (s != null) s.clear();
-        soft = null;
-    }
-
-    /**
-     * Sets the thing to the specified object.
-     * @param thing the specified object
-     */
-    public synchronized void setThing(Object thing) {
-        flush();
-        soft = new SoftReference(thing);
-    }
-
-    /**
-     * Checks to see what object is being pointed at by this Ref and returns it.
-     */
-    public synchronized Object check() {
-        SoftReference s = soft;
-        if (s == null) return null;
-        return s.get();
-    }
-
-    /**
-     * Constructs a new Ref.
-     */
-    public Ref() { }
-
-    /**
-     * Constructs a new Ref that initially points to thing.
-     */
-    public Ref(Object thing) {
-        setThing(thing);
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/misc/Regexp.java b/ojluni/src/main/java/sun/misc/Regexp.java
deleted file mode 100755
index 4d48836..0000000
--- a/ojluni/src/main/java/sun/misc/Regexp.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (c) 1995, 2004, 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.
- */
-
-package sun.misc;
-
-/**
- * A class to represent a regular expression.  Only handles '*'s.
- * @author  James Gosling
- */
-
-public class Regexp {
-    /** if true then the matching process ignores case. */
-    public boolean ignoreCase;
-
-    /*
-     * regular expressions are carved into three regions: a constant string
-     * prefix, a constant string suffix, and a series of floating strings in
-     * between.  In the input regular expression, they are separated by *s
-     */
-    public String exp;
-    public String prefix, suffix;
-    public boolean exact;
-    public int prefixLen, suffixLen, totalLen;
-    public String mids[];
-
-    /** Create a new regular expression object.  The regular expression
-        is a series of constant strings separated by *s.  For example:
-        <dl>
-        <dt>*.gif       <dd>Matches any string that ends in ".gif".
-        <dt>/tmp/*      <dd>Matches any string that starts with "/tmp/".
-        <dt>/tmp/*.gif  <dd>Matches any string that starts with "/tmp/" and ends
-                        with ".gif".
-        <dt>/tmp/*new*.gif <dd>Matches any string that starts with "/tmp/"
-                        and ends with ".gif" and has "new" somewhere in between.
-        </dl>
-     */
-    public Regexp (String s) {
-        exp = s;
-        int firstst = s.indexOf('*');
-        int lastst = s.lastIndexOf('*');
-        if (firstst < 0) {
-            totalLen = s.length();
-            exact = true;       // no * s
-        } else {
-            prefixLen = firstst;
-            if (firstst == 0)
-                prefix = null;
-            else
-                prefix = s.substring(0, firstst);
-            suffixLen = s.length() - lastst - 1;
-            if (suffixLen == 0)
-                suffix = null;
-            else
-                suffix = s.substring(lastst + 1);
-            int nmids = 0;
-            int pos = firstst;
-            while (pos < lastst && pos >= 0) {
-                nmids++;
-                pos = s.indexOf('*', pos + 1);
-            }
-            totalLen = prefixLen + suffixLen;
-            if (nmids > 0) {
-                mids = new String[nmids];
-                pos = firstst;
-                for (int i = 0; i < nmids; i++) {
-                    pos++;
-                    int npos = s.indexOf('*', pos);
-                    if (pos < npos) {
-                        mids[i] = s.substring(pos, npos);
-                        totalLen += mids[i].length();
-                    }
-                    pos = npos;
-                }
-            }
-        }
-    }
-
-    /** Returns true iff the String s matches this regular expression. */
-    final boolean matches(String s) {
-        return matches(s, 0, s.length());
-    }
-
-    /** Returns true iff the substring of s from offset for len characters
-        matches this regular expression. */
-    boolean matches(String s, int offset, int len) {
-        if (exact)
-            return len == totalLen &&
-                exp.regionMatches(ignoreCase, 0, s, offset, len);
-        if (len < totalLen)
-            return false;
-        if (prefixLen > 0 &&
-                !prefix.regionMatches(ignoreCase,
-                                      0, s, offset, prefixLen)
-                ||
-                suffixLen > 0 &&
-                !suffix.regionMatches(ignoreCase,
-                                      0, s, offset + len - suffixLen,
-                                      suffixLen))
-            return false;
-        if (mids == null)
-            return true;
-        int nmids = mids.length;
-        int spos = offset + prefixLen;
-        int limit = offset+len-suffixLen;
-        for (int i = 0; i<nmids; i++) {
-            String ms = mids[i];
-            int ml = ms.length();
-            while (spos+ml<=limit &&
-                   !ms.regionMatches(ignoreCase,
-                                     0, s, spos, ml))
-                spos++;
-            if (spos+ml>limit)
-                return false;
-            spos+=ml;
-        }
-        return true;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/misc/Request.java b/ojluni/src/main/java/sun/misc/Request.java
deleted file mode 100755
index 5301e4c..0000000
--- a/ojluni/src/main/java/sun/misc/Request.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-package sun.misc;
-
-/**
- * Requests are functor objects; that is, they provide part of the mechanism
- * for deferred function application.
- *
- * @author      Steven B. Byrne
- */
-
-abstract public class Request {
-    /**
-     * The main task of the Request object is to be exectuted from a request
-     * queue.
-     */
-    abstract public void execute();
-}
diff --git a/ojluni/src/main/java/sun/misc/RequestProcessor.java b/ojluni/src/main/java/sun/misc/RequestProcessor.java
deleted file mode 100755
index ae9e1b9..0000000
--- a/ojluni/src/main/java/sun/misc/RequestProcessor.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-package sun.misc;
-
-/**
- * The request processor allows functors (Request instances) to be created
- * in arbitrary threads, and to be posted for execution in a non-restricted
- * thread.
- *
- * @author      Steven B. Byrne
- */
-
-
-public class RequestProcessor implements Runnable {
-
-    private static Queue requestQueue;
-    private static Thread dispatcher;
-
-    /**
-     * Queues a Request instance for execution by the request procesor
-     * thread.
-     */
-    public static void postRequest(Request req) {
-        lazyInitialize();
-        requestQueue.enqueue(req);
-    }
-
-    /**
-     * Process requests as they are queued.
-     */
-    public void run() {
-        lazyInitialize();
-        while (true) {
-            try {
-                Object obj = requestQueue.dequeue();
-                if (obj instanceof Request) { // ignore bogons
-                    Request req = (Request)obj;
-                    try {
-                        req.execute();
-                    } catch (Throwable t) {
-                        // do nothing at the moment...maybe report an error
-                        // in the future
-                    }
-                }
-            } catch (InterruptedException e) {
-                // do nothing at the present time.
-            }
-        }
-    }
-
-
-    /**
-     * This method initiates the request processor thread.  It is safe
-     * to call it after the thread has been started.  It provides a way for
-     * clients to deliberately control the context in which the request
-     * processor thread is created
-     */
-    public static synchronized void startProcessing() {
-        if (dispatcher == null) {
-            dispatcher = new Thread(new RequestProcessor(), "Request Processor");
-            dispatcher.setPriority(Thread.NORM_PRIORITY + 2);
-            dispatcher.start();
-        }
-    }
-
-
-    /**
-     * This method performs lazy initialization.
-     */
-    private static synchronized void lazyInitialize() {
-        if (requestQueue == null) {
-            requestQueue = new Queue();
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/misc/SharedSecrets.java b/ojluni/src/main/java/sun/misc/SharedSecrets.java
deleted file mode 100755
index 05a6411..0000000
--- a/ojluni/src/main/java/sun/misc/SharedSecrets.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright (c) 2002, 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.
- */
-
-package sun.misc;
-
-import java.util.jar.JarFile;
-import java.io.Console;
-import java.io.FileDescriptor;
-import java.security.ProtectionDomain;
-import java.util.zip.Adler32;
-import javax.security.auth.kerberos.KeyTab;
-
-import java.security.AccessController;
-
-/** A repository of "shared secrets", which are a mechanism for
-    calling implementation-private methods in another package without
-    using reflection. A package-private class implements a public
-    interface and provides the ability to call package-private methods
-    within that package; the object implementing that interface is
-    provided through a third package to which access is restricted.
-    This framework avoids the primary disadvantage of using reflection
-    for this purpose, namely the loss of compile-time checking. */
-
-public class SharedSecrets {
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-    private static JavaUtilJarAccess javaUtilJarAccess;
-    private static JavaLangAccess javaLangAccess;
-    private static JavaIOAccess javaIOAccess;
-    private static JavaNetAccess javaNetAccess;
-    private static JavaNetHttpCookieAccess javaNetHttpCookieAccess;
-    private static JavaNioAccess javaNioAccess;
-    private static JavaIOFileDescriptorAccess javaIOFileDescriptorAccess;
-    private static JavaSecurityProtectionDomainAccess javaSecurityProtectionDomainAccess;
-    private static JavaSecurityAccess javaSecurityAccess;
-    private static JavaxSecurityAuthKerberosAccess javaxSecurityAuthKerberosAccess;
-    private static JavaUtilZipAccess javaUtilZipAccess;
-    private static JavaUtilZipFileAccess javaUtilZipFileAccess;
-    private static JavaAWTAccess javaAWTAccess;
-
-    public static JavaUtilJarAccess javaUtilJarAccess() {
-        if (javaUtilJarAccess == null) {
-            // Ensure JarFile is initialized; we know that that class
-            // provides the shared secret
-            unsafe.ensureClassInitialized(JarFile.class);
-        }
-        return javaUtilJarAccess;
-    }
-
-    public static void setJavaUtilJarAccess(JavaUtilJarAccess access) {
-        javaUtilJarAccess = access;
-    }
-
-    public static void setJavaLangAccess(JavaLangAccess jla) {
-        javaLangAccess = jla;
-    }
-
-    public static JavaLangAccess getJavaLangAccess() {
-        return javaLangAccess;
-    }
-
-    public static void setJavaNetAccess(JavaNetAccess jna) {
-        javaNetAccess = jna;
-    }
-
-    public static JavaNetAccess getJavaNetAccess() {
-        return javaNetAccess;
-    }
-
-    public static void setJavaNetHttpCookieAccess(JavaNetHttpCookieAccess a) {
-        javaNetHttpCookieAccess = a;
-    }
-
-    public static JavaNetHttpCookieAccess getJavaNetHttpCookieAccess() {
-        if (javaNetHttpCookieAccess == null)
-            unsafe.ensureClassInitialized(java.net.HttpCookie.class);
-        return javaNetHttpCookieAccess;
-    }
-
-    public static void setJavaNioAccess(JavaNioAccess jna) {
-        javaNioAccess = jna;
-    }
-
-    public static JavaNioAccess getJavaNioAccess() {
-        if (javaNioAccess == null) {
-            // Ensure java.nio.ByteOrder is initialized; we know that
-            // this class initializes java.nio.Bits that provides the
-            // shared secret.
-            unsafe.ensureClassInitialized(java.nio.ByteOrder.class);
-        }
-        return javaNioAccess;
-    }
-
-    public static void setJavaIOAccess(JavaIOAccess jia) {
-        javaIOAccess = jia;
-    }
-
-    public static JavaIOAccess getJavaIOAccess() {
-        if (javaIOAccess == null) {
-            unsafe.ensureClassInitialized(Console.class);
-        }
-        return javaIOAccess;
-    }
-
-    public static void setJavaIOFileDescriptorAccess(JavaIOFileDescriptorAccess jiofda) {
-        javaIOFileDescriptorAccess = jiofda;
-    }
-
-    public static JavaIOFileDescriptorAccess getJavaIOFileDescriptorAccess() {
-        if (javaIOFileDescriptorAccess == null)
-            unsafe.ensureClassInitialized(FileDescriptor.class);
-
-        return javaIOFileDescriptorAccess;
-    }
-
-    public static void setJavaSecurityProtectionDomainAccess
-        (JavaSecurityProtectionDomainAccess jspda) {
-            javaSecurityProtectionDomainAccess = jspda;
-    }
-
-    public static JavaSecurityProtectionDomainAccess
-        getJavaSecurityProtectionDomainAccess() {
-            if (javaSecurityProtectionDomainAccess == null)
-                unsafe.ensureClassInitialized(ProtectionDomain.class);
-            return javaSecurityProtectionDomainAccess;
-    }
-
-    public static void setJavaSecurityAccess(JavaSecurityAccess jsa) {
-        javaSecurityAccess = jsa;
-    }
-
-    public static JavaSecurityAccess getJavaSecurityAccess() {
-        if (javaSecurityAccess == null) {
-            unsafe.ensureClassInitialized(AccessController.class);
-        }
-        return javaSecurityAccess;
-    }
-
-    public static void setJavaxSecurityAuthKerberosAccess
-            (JavaxSecurityAuthKerberosAccess jsaka) {
-        javaxSecurityAuthKerberosAccess = jsaka;
-    }
-
-    public static JavaxSecurityAuthKerberosAccess
-            getJavaxSecurityAuthKerberosAccess() {
-        if (javaxSecurityAuthKerberosAccess == null)
-            unsafe.ensureClassInitialized(KeyTab.class);
-        return javaxSecurityAuthKerberosAccess;
-    }
-
-    public static void setJavaUtilZipAccess(JavaUtilZipAccess access) {
-        javaUtilZipAccess = access;
-    }
-
-    public static JavaUtilZipAccess getJavaUtilZipAccess() {
-        if (javaUtilZipAccess == null) {
-            unsafe.ensureClassInitialized(Adler32.class);
-        }
-        return javaUtilZipAccess;
-    }
-
-    public static JavaUtilZipFileAccess getJavaUtilZipFileAccess() {
-        if (javaUtilZipFileAccess == null)
-            unsafe.ensureClassInitialized(java.util.zip.ZipFile.class);
-        return javaUtilZipFileAccess;
-    }
-
-    public static void setJavaUtilZipFileAccess(JavaUtilZipFileAccess access) {
-        javaUtilZipFileAccess = access;
-    }
-
-    public static void setJavaAWTAccess(JavaAWTAccess jaa) {
-        javaAWTAccess = jaa;
-    }
-
-    public static JavaAWTAccess getJavaAWTAccess() {
-        // this may return null in which case calling code needs to
-        // provision for.
-        if (javaAWTAccess == null || javaAWTAccess.getContext() == null) {
-            return null;
-        }
-        return javaAWTAccess;
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/Signal.java b/ojluni/src/main/java/sun/misc/Signal.java
deleted file mode 100755
index 613cc38..0000000
--- a/ojluni/src/main/java/sun/misc/Signal.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (c) 1998, 2007, 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.
- */
-
-package sun.misc;
-import java.util.Hashtable;
-
-/**
- * This class provides ANSI/ISO C signal support. A Java program can register
- * signal handlers for the current process. There are two restrictions:
- * <ul>
- * <li>
- * Java code cannot register a handler for signals that are already used
- * by the Java VM implementation. The <code>Signal.handle</code>
- * function raises an <code>IllegalArgumentException</code> if such an attempt
- * is made.
- * <li>
- * When <code>Signal.handle</code> is called, the VM internally registers a
- * special C signal handler. There is no way to force the Java signal handler
- * to run synchronously before the C signal handler returns. Instead, when the
- * VM receives a signal, the special C signal handler creates a new thread
- * (at priority <code>Thread.MAX_PRIORITY</code>) to
- * run the registered Java signal handler. The C signal handler immediately
- * returns. Note that because the Java signal handler runs in a newly created
- * thread, it may not actually be executed until some time after the C signal
- * handler returns.
- * </ul>
- * <p>
- * Signal objects are created based on their names. For example:
- * <blockquote><pre>
- * new Signal("INT");
- * </blockquote></pre>
- * constructs a signal object corresponding to <code>SIGINT</code>, which is
- * typically produced when the user presses <code>Ctrl-C</code> at the command line.
- * The <code>Signal</code> constructor throws <code>IllegalArgumentException</code>
- * when it is passed an unknown signal.
- * <p>
- * This is an example of how Java code handles <code>SIGINT</code>:
- * <blockquote><pre>
- * SignalHandler handler = new SignalHandler () {
- *     public void handle(Signal sig) {
- *       ... // handle SIGINT
- *     }
- * };
- * Signal.handle(new Signal("INT"), handler);
- * </blockquote></pre>
- *
- * @author   Sheng Liang
- * @author   Bill Shannon
- * @see      sun.misc.SignalHandler
- * @since    1.2
- */
-public final class Signal {
-    private static Hashtable handlers = new Hashtable(4);
-    private static Hashtable signals = new Hashtable(4);
-
-    private int number;
-    private String name;
-
-    /* Returns the signal number */
-    public int getNumber() {
-        return number;
-    }
-
-    /**
-     * Returns the signal name.
-     *
-     * @return the name of the signal.
-     * @see sun.misc.Signal#Signal(String name)
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Compares the equality of two <code>Signal</code> objects.
-     *
-     * @param other the object to compare with.
-     * @return whether two <code>Signal</code> objects are equal.
-     */
-    public boolean equals(Object other) {
-        if (this == other) {
-            return true;
-        }
-        if (other == null || !(other instanceof Signal)) {
-            return false;
-        }
-        Signal other1 = (Signal)other;
-        return name.equals(other1.name) && (number == other1.number);
-    }
-
-    /**
-     * Returns a hashcode for this Signal.
-     *
-     * @return  a hash code value for this object.
-     */
-    public int hashCode() {
-        return number;
-    }
-
-    /**
-     * Returns a string representation of this signal. For example, "SIGINT"
-     * for an object constructed using <code>new Signal ("INT")</code>.
-     *
-     * @return a string representation of the signal
-     */
-    public String toString() {
-        return "SIG" + name;
-    }
-
-    /**
-     * Constructs a signal from its name.
-     *
-     * @param name the name of the signal.
-     * @exception IllegalArgumentException unknown signal
-     * @see sun.misc.Signal#getName()
-     */
-    public Signal(String name) {
-        number = findSignal(name);
-        this.name = name;
-        if (number < 0) {
-            throw new IllegalArgumentException("Unknown signal: " + name);
-        }
-    }
-
-    /**
-     * Registers a signal handler.
-     *
-     * @param sig a signal
-     * @param handler the handler to be registered with the given signal.
-     * @result the old handler
-     * @exception IllegalArgumentException the signal is in use by the VM
-     * @see sun.misc.Signal#raise(Signal sig)
-     * @see sun.misc.SignalHandler
-     * @see sun.misc.SignalHandler#SIG_DFL
-     * @see sun.misc.SignalHandler#SIG_IGN
-     */
-    public static synchronized SignalHandler handle(Signal sig,
-                                                    SignalHandler handler)
-        throws IllegalArgumentException {
-        long newH = (handler instanceof NativeSignalHandler) ?
-                      ((NativeSignalHandler)handler).getHandler() : 2;
-        long oldH = handle0(sig.number, newH);
-        if (oldH == -1) {
-            throw new IllegalArgumentException
-                ("Signal already used by VM or OS: " + sig);
-        }
-        signals.put(new Integer(sig.number), sig);
-        synchronized (handlers) {
-            SignalHandler oldHandler = (SignalHandler)handlers.get(sig);
-            handlers.remove(sig);
-            if (newH == 2) {
-                handlers.put(sig, handler);
-            }
-            if (oldH == 0) {
-                return SignalHandler.SIG_DFL;
-            } else if (oldH == 1) {
-                return SignalHandler.SIG_IGN;
-            } else if (oldH == 2) {
-                return oldHandler;
-            } else {
-                return new NativeSignalHandler(oldH);
-            }
-        }
-    }
-
-    /**
-     * Raises a signal in the current process.
-     *
-     * @param sig a signal
-     * @see sun.misc.Signal#handle(Signal sig, SignalHandler handler)
-     */
-    public static void raise(Signal sig) throws IllegalArgumentException {
-        if (handlers.get(sig) == null) {
-            throw new IllegalArgumentException("Unhandled signal: " + sig);
-        }
-        raise0(sig.number);
-    }
-
-    /* Called by the VM to execute Java signal handlers. */
-    private static void dispatch(final int number) {
-        final Signal sig = (Signal)signals.get(new Integer(number));
-        final SignalHandler handler = (SignalHandler)handlers.get(sig);
-
-        Runnable runnable = new Runnable () {
-            public void run() {
-              // Don't bother to reset the priority. Signal handler will
-              // run at maximum priority inherited from the VM signal
-              // dispatch thread.
-              // Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
-                handler.handle(sig);
-            }
-        };
-        if (handler != null) {
-            new Thread(runnable, sig + " handler").start();
-        }
-    }
-
-    /* Find the signal number, given a name. Returns -1 for unknown signals. */
-    private static native int findSignal(String sigName);
-    /* Registers a native signal handler, and returns the old handler.
-     * Handler values:
-     *   0     default handler
-     *   1     ignore the signal
-     *   2     call back to Signal.dispatch
-     *   other arbitrary native signal handlers
-     */
-    private static native long handle0(int sig, long nativeH);
-    /* Raise a given signal number */
-    private static native void raise0(int sig);
-}
diff --git a/ojluni/src/main/java/sun/misc/SignalHandler.java b/ojluni/src/main/java/sun/misc/SignalHandler.java
deleted file mode 100755
index e6cc96e..0000000
--- a/ojluni/src/main/java/sun/misc/SignalHandler.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.
- */
-
-package sun.misc;
-
-/**
- * This is the signal handler interface expected in <code>Signal.handle</code>.
- *
- * @author   Sheng Liang
- * @author   Bill Shannon
- * @see      sun.misc.Signal
- * @since    1.2
- */
-
-public interface SignalHandler {
-
-    /**
-     * The default signal handler
-     */
-    public static final SignalHandler SIG_DFL = new NativeSignalHandler(0);
-    /**
-     * Ignore the signal
-     */
-    public static final SignalHandler SIG_IGN = new NativeSignalHandler(1);
-
-    /**
-     * Handle the given signal
-     *
-     * @param sig a signal object
-     */
-    public void handle(Signal sig);
-}
diff --git a/ojluni/src/main/java/sun/misc/Sort.java b/ojluni/src/main/java/sun/misc/Sort.java
deleted file mode 100755
index adf8e78..0000000
--- a/ojluni/src/main/java/sun/misc/Sort.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-/**
- * Sort: a class that uses the quicksort algorithm to sort an
- *       array of objects.
- *
- * @author Sunita Mani
- */
-
-package sun.misc;
-
-public class Sort {
-
-    private static void swap(Object arr[], int i, int j) {
-        Object tmp;
-
-        tmp = arr[i];
-        arr[i] = arr[j];
-        arr[j] = tmp;
-    }
-
-    /**
-     * quicksort the array of objects.
-     *
-     * @param arr[] - an array of objects
-     * @param left - the start index - from where to begin sorting
-     * @param right - the last index.
-     * @param comp - an object that implemnts the Compare interface to resolve thecomparison.
-     */
-    public static void quicksort(Object arr[], int left, int right, Compare comp) {
-        int i, last;
-
-        if (left >= right) { /* do nothing if array contains fewer than two */
-            return;          /* two elements */
-        }
-        swap(arr, left, (left+right) / 2);
-        last = left;
-        for (i = left+1; i <= right; i++) {
-            if (comp.doCompare(arr[i], arr[left]) < 0) {
-                swap(arr, ++last, i);
-            }
-        }
-        swap(arr, left, last);
-        quicksort(arr, left, last-1, comp);
-        quicksort(arr, last+1, right, comp);
-    }
-
-    public static void quicksort(Object arr[], Compare comp) {
-        quicksort(arr, 0, arr.length-1, comp);
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/Timeable.java b/ojluni/src/main/java/sun/misc/Timeable.java
deleted file mode 100755
index da6c60d..0000000
--- a/ojluni/src/main/java/sun/misc/Timeable.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 1995, 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.
- */
-
-package sun.misc;
-
-/**
- * This interface is used by the Timer class.  A class that uses
- * Timer objects must implement this interface.
- *
- * @see Timer
- * @author Patrick Chan
- */
-public interface Timeable {
-    /**
-     * This method is executed every time a timer owned by this
-     * object ticks.  An object can own more than one timer but
-     * all timers call this method when they tick;
-     * you can use the supplied timer parameter to determine
-     * which timer has ticked.
-     * @param timer a handle to the timer that has just ticked.
-     */
-    public void tick(Timer timer);
-}
diff --git a/ojluni/src/main/java/sun/misc/Timer.java b/ojluni/src/main/java/sun/misc/Timer.java
deleted file mode 100755
index 71e0881..0000000
--- a/ojluni/src/main/java/sun/misc/Timer.java
+++ /dev/null
@@ -1,647 +0,0 @@
-/*
- * Copyright (c) 1995, 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.
- */
-
-package sun.misc;
-
-/**
-    A Timer object is used by algorithms that require timed events.
-    For example, in an animation loop, a timer would help in
-    determining when to change frames.
-
-    A timer has an interval which determines when it "ticks";
-    that is, a timer delays for the specified interval and then
-    it calls the owner's tick() method.
-
-    Here's an example of creating a timer with a 5 sec interval:
-
-    <pre>
-    class Main implements Timeable {
-        public void tick(Timer timer) {
-            System.out.println("tick");
-        }
-        public static void main(String args[]) {
-            (new Timer(this, 5000)).cont();
-        }
-    }
-    </pre>
-
-    A timer can be stopped, continued, or reset at any time.
-    A timer's state is not stopped while it's calling the
-    owner's tick() method.
-
-    A timer can be regular or irregular.  If in regular mode,
-    a timer ticks at the specified interval, regardless of
-    how long the owner's tick() method takes.  While the timer
-    is running, no ticks are ever discarded.  That means that if
-    the owner's tick() method takes longer than the interval,
-    the ticks that would have occurred are delivered immediately.
-
-    In irregular mode, a timer starts delaying for exactly
-    the specified interval only after the tick() method returns.
-
-    Synchronization issues: do not hold the timer's monitor
-    while calling any of the Timer operations below otherwise
-    the Timer class will deadlock.
-
-    @author     Patrick Chan
-*/
-
-/*
-    Synchronization issues:  there are two data structures that
-    require locking.  A Timer object and the Timer queue
-    (described in the TimerThread class).  To avoid deadlock,
-    the timer queue monitor is always acquired before the timer
-    object's monitor.  However, the timer queue monitor is acquired
-    only if the timer operation will make use of the timer
-    queue, e.g. stop().
-
-    The class monitor on the class TimerThread severs as the monitor
-    to the timer queue.
-
-    Possible feature: perhaps a timer should have an associated
-    thread priority.  The thread that makes the callback temporarily
-    takes on that priority before calling the owner's tick() method.
-*/
-
-public class Timer {
-    /**
-     * This is the owner of the timer.  Its tick method is
-     * called when the timer ticks.
-     */
-    public Timeable owner;
-
-    /*
-     * This is the interval of time in ms.
-     */
-    long interval;
-
-    /*
-     * This variable is used for two different purposes.
-     * This is done in order to save space.
-     * If 'stopped' is true, this variable holds the time
-     * that the timer was stopped; otherwise, this variable
-     * is used by the TimerThread to determine when the timer
-     * should tick.
-     */
-    long sleepUntil;
-
-    /*
-     * This is the time remaining before the timer ticks.  It
-     * is only valid if 'stopped' is true.  If the timer is
-     * continued, the next tick will happen remaingTime
-     * milliseconds later.
-     */
-    long remainingTime;
-
-    /*
-     * True iff the timer is in regular mode.
-     */
-    boolean regular;
-
-    /*
-     * True iff the timer has been stopped.
-     */
-    boolean stopped;
-
-    /* **************************************************************
-     * Timer queue-related variables
-     * ************************************************************** */
-
-    /*
-     * A link to another timer object.  This is used while the
-     * timer object is enqueued in the timer queue.
-     */
-    Timer next;
-
-    /* **************************************************************
-     * Timer methods
-     * ************************************************************** */
-
-    /*
-     * This variable holds a handle to the TimerThread class for
-     * the purpose of getting at the class monitor.  The reason
-     * why Class.forName("TimerThread") is not used is because it
-     * doesn't appear to work when loaded via a net class loader.
-     */
-    static TimerThread timerThread = null;
-
-    /**
-     * Creates a timer object that is owned by 'owner' and
-     * with the interval 'interval' milliseconds.  The new timer
-     * object is stopped and is regular.  getRemainingTime()
-     * return 'interval' at this point.  getStopTime() returns
-     * the time this object was created.
-     * @param owner    owner of the timer object
-     * @param interval interval of the timer in milliseconds
-     */
-    public Timer(Timeable owner, long interval) {
-        this.owner = owner;
-        this.interval = interval;
-        remainingTime = interval;
-        regular = true;
-        sleepUntil = System.currentTimeMillis();
-        stopped = true;
-        synchronized (getClass()) {
-            if (timerThread == null) {
-                timerThread = new TimerThread();
-            }
-        }
-    }
-
-    /**
-     * Returns true if this timer is stopped.
-     */
-    public synchronized boolean isStopped() {
-        return stopped;
-    }
-
-    /**
-     * Stops the timer.  The amount of time the timer has already
-     * delayed is saved so if the timer is continued, it will only
-     * delay for the amount of time remaining.
-     * Note that even after stopping a timer, one more tick may
-     * still occur.
-     * This method is MT-safe; i.e. it is synchronized but for
-     * implementation reasons, the synchronized modifier cannot
-     * be included in the method declaration.
-     */
-    public void stop() {
-        long now = System.currentTimeMillis();
-
-        synchronized (timerThread) {
-            synchronized (this) {
-                if (!stopped) {
-                    TimerThread.dequeue(this);
-                    remainingTime = Math.max(0, sleepUntil - now);
-                    sleepUntil = now;        // stop time
-                    stopped = true;
-                }
-            }
-        }
-    }
-
-    /**
-     * Continue the timer.  The next tick will come at getRemainingTime()
-     * milliseconds later.  If the timer is not stopped, this
-     * call will be a no-op.
-     * This method is MT-safe; i.e. it is synchronized but for
-     * implementation reasons, the synchronized modifier cannot
-     * be included in the method declaration.
-     */
-    public void cont() {
-        synchronized (timerThread) {
-            synchronized (this) {
-                if (stopped) {
-                    // The TimerTickThread avoids requeuing the
-                    // timer only if the sleepUntil value has changed.
-                    // The following guarantees that the sleepUntil
-                    // value will be different; without this guarantee,
-                    // it's theoretically possible for the timer to be
-                    // inserted twice.
-                    sleepUntil = Math.max(sleepUntil + 1,
-                        System.currentTimeMillis() + remainingTime);
-                    TimerThread.enqueue(this);
-                    stopped = false;
-                }
-            }
-        }
-    }
-
-    /**
-     * Resets the timer's remaining time to the timer's interval.
-     * If the timer's running state is not altered.
-     */
-    public void reset() {
-        synchronized (timerThread) {
-            synchronized (this) {
-                setRemainingTime(interval);
-            }
-        }
-    }
-
-    /**
-     * Returns the time at which the timer was last stopped.  The
-     * return value is valid only if the timer is stopped.
-     */
-    public synchronized long getStopTime() {
-        return sleepUntil;
-    }
-
-    /**
-     * Returns the timer's interval.
-     */
-    public synchronized long getInterval() {
-        return interval;
-    }
-
-    /**
-     * Changes the timer's interval.  The new interval setting
-     * does not take effect until after the next tick.
-     * This method does not alter the remaining time or the
-     * running state of the timer.
-     * @param interval new interval of the timer in milliseconds
-     */
-    public synchronized void setInterval(long interval) {
-        this.interval = interval;
-    }
-
-    /**
-     * Returns the remaining time before the timer's next tick.
-     * The return value is valid only if timer is stopped.
-     */
-    public synchronized long getRemainingTime() {
-        return remainingTime;
-    }
-
-    /**
-     * Sets the remaining time before the timer's next tick.
-     * This method does not alter the timer's running state.
-     * This method is MT-safe; i.e. it is synchronized but for
-     * implementation reasons, the synchronized modifier cannot
-     * be included in the method declaration.
-     * @param time new remaining time in milliseconds.
-     */
-    public void setRemainingTime(long time) {
-        synchronized (timerThread) {
-            synchronized (this) {
-                if (stopped) {
-                    remainingTime = time;
-                } else {
-                    stop();
-                    remainingTime = time;
-                    cont();
-                }
-            }
-        }
-    }
-
-    /**
-     * In regular mode, a timer ticks at the specified interval,
-     * regardless of how long the owner's tick() method takes.
-     * While the timer is running, no ticks are ever discarded.
-     * That means that if the owner's tick() method takes longer
-     * than the interval, the ticks that would have occurred are
-     * delivered immediately.
-     *
-     * In irregular mode, a timer starts delaying for exactly
-     * the specified interval only after the tick() method returns.
-     */
-    public synchronized void setRegular(boolean regular) {
-        this.regular = regular;
-    }
-
-    /*
-     * This method is used only for testing purposes.
-     */
-    protected Thread getTimerThread() {
-        return TimerThread.timerThread;
-    }
-}
-
-
-/*
-
-This class implements the timer queue and is exclusively used by the
-Timer class.  There are only two methods exported to the Timer class -
-enqueue, for inserting a timer into queue and dequeue, for removing
-a timer from the queue.
-
-A timer in the timer queue is awaiting a tick.  When a timer is to be
-ticked, it is removed from the timer queue before the owner's tick()
-method is called.
-
-A single timer thread manages the timer queue.  This timer thread
-looks at the head of the timer queue and delays until it's time for
-the timer to tick.  When the time comes, the timer thread creates a
-callback thread to call the timer owner's tick() method.  The timer
-thread then processes the next timer in the queue.
-
-When a timer is inserted at the head of the queue, the timer thread is
-notified.  This causes the timer thread to prematurely wake up and
-process the new head of the queue.
-
-*/
-
-class TimerThread extends Thread {
-    /*
-     * Set to true to get debugging output.
-     */
-    public static boolean debug = false;
-
-    /*
-     * This is a handle to the thread managing the thread queue.
-     */
-    static TimerThread timerThread;
-
-    /*
-     * This flag is set if the timer thread has been notified
-     * while it was in the timed wait.  This flag allows the
-     * timer thread to tell whether or not the wait completed.
-     */
-    static boolean notified = false;
-
-    protected TimerThread() {
-        super("TimerThread");
-        timerThread = this;
-        start();
-    }
-
-    public synchronized void run() {
-        while (true) {
-            long delay;
-
-            while (timerQueue == null) {
-                try {
-                    wait();
-                } catch (InterruptedException ex) {
-                   // Just drop through and check timerQueue.
-                }
-            }
-            notified = false;
-            delay = timerQueue.sleepUntil - System.currentTimeMillis();
-            if (delay > 0) {
-                try {
-                    wait(delay);
-                } catch (InterruptedException ex) {
-                    // Just drop through.
-                }
-            }
-            // remove from timer queue.
-            if (!notified) {
-                Timer timer = timerQueue;
-                timerQueue = timerQueue.next;
-                TimerTickThread thr = TimerTickThread.call(
-                    timer, timer.sleepUntil);
-                if (debug) {
-                    long delta = (System.currentTimeMillis() - timer.sleepUntil);
-                    System.out.println("tick(" + thr.getName() + ","
-                        + timer.interval + ","+delta+ ")");
-                    if (delta > 250) {
-                        System.out.println("*** BIG DELAY ***");
-                    }
-                }
-            }
-        }
-    }
-
-    /* *******************************************************
-       Timer Queue
-       ******************************************************* */
-
-    /*
-     * The timer queue is a queue of timers waiting to tick.
-     */
-    static Timer timerQueue = null;
-
-    /*
-     * Uses timer.sleepUntil to determine where in the queue
-     * to insert the timer object.
-     * A new ticker thread is created only if the timer
-     * is inserted at the beginning of the queue.
-     * The timer must not already be in the queue.
-     * Assumes the caller has the TimerThread monitor.
-     */
-    static protected void enqueue(Timer timer) {
-        Timer prev = null;
-        Timer cur = timerQueue;
-
-        if (cur == null || timer.sleepUntil <= cur.sleepUntil) {
-            // insert at front of queue
-            timer.next = timerQueue;
-            timerQueue = timer;
-            notified = true;
-            timerThread.notify();
-        } else {
-            do {
-                prev = cur;
-                cur = cur.next;
-            } while (cur != null && timer.sleepUntil > cur.sleepUntil);
-            // insert or append to the timer queue
-            timer.next = cur;
-            prev.next = timer;
-        }
-        if (debug) {
-            long now = System.currentTimeMillis();
-
-            System.out.print(Thread.currentThread().getName()
-                + ": enqueue " + timer.interval + ": ");
-            cur = timerQueue;
-            while(cur != null) {
-                long delta = cur.sleepUntil - now;
-                System.out.print(cur.interval + "(" + delta + ") ");
-                cur = cur.next;
-            }
-            System.out.println();
-        }
-    }
-
-    /*
-     * If the timer is not in the queue, returns false;
-     * otherwise removes the timer from the timer queue and returns true.
-     * Assumes the caller has the TimerThread monitor.
-     */
-    static protected boolean dequeue(Timer timer) {
-        Timer prev = null;
-        Timer cur = timerQueue;
-
-        while (cur != null && cur != timer) {
-            prev = cur;
-            cur = cur.next;
-        }
-        if (cur == null) {
-            if (debug) {
-                System.out.println(Thread.currentThread().getName()
-                    + ": dequeue " + timer.interval + ": no-op");
-            }
-            return false;
-        }       if (prev == null) {
-            timerQueue = timer.next;
-            notified = true;
-            timerThread.notify();
-        } else {
-            prev.next = timer.next;
-        }
-        timer.next = null;
-        if (debug) {
-            long now = System.currentTimeMillis();
-
-            System.out.print(Thread.currentThread().getName()
-                + ": dequeue " + timer.interval + ": ");
-            cur = timerQueue;
-            while(cur != null) {
-                long delta = cur.sleepUntil - now;
-                System.out.print(cur.interval + "(" + delta + ") ");
-                cur = cur.next;
-            }
-            System.out.println();
-        }
-        return true;
-    }
-
-    /*
-     * Inserts the timer back into the queue.  This method
-     * is used by a callback thread after it has called the
-     * timer owner's tick() method.  This method recomputes
-     * the sleepUntil field.
-     * Assumes the caller has the TimerThread and Timer monitor.
-     */
-    protected static void requeue(Timer timer) {
-        if (!timer.stopped) {
-            long now = System.currentTimeMillis();
-            if (timer.regular) {
-                timer.sleepUntil += timer.interval;
-            } else {
-                timer.sleepUntil = now + timer.interval;
-            }
-            enqueue(timer);
-        } else if (debug) {
-            System.out.println(Thread.currentThread().getName()
-                + ": requeue " + timer.interval + ": no-op");
-        }
-    }
-}
-
-/*
-
-This class implements a simple thread whose only purpose is to call a
-timer owner's tick() method.  A small fixed-sized pool of threads is
-maintained and is protected by the class monitor.  If the pool is
-exhausted, a new thread is temporarily created and destroyed when
-done.
-
-A thread that's in the pool waits on it's own monitor.  When the
-thread is retrieved from the pool, the retriever notifies the thread's
-monitor.
-
-*/
-
-class TimerTickThread extends Thread {
-    /*
-     * Maximum size of the thread pool.
-     */
-    static final int MAX_POOL_SIZE = 3;
-
-    /*
-     * Number of threads in the pool.
-     */
-    static int curPoolSize = 0;
-
-    /*
-     * The pool of timer threads.
-     */
-    static TimerTickThread pool = null;
-
-    /*
-     * Is used when linked into the thread pool.
-     */
-    TimerTickThread next = null;
-
-    /*
-     * This is the handle to the timer whose owner's
-     * tick() method will be called.
-     */
-    Timer timer;
-
-    /*
-     * The value of a timer's sleepUntil value is captured here.
-     * This is used to determine whether or not the timer should
-     * be reinserted into the queue.  If the timer's sleepUntil
-     * value has changed, the timer is not reinserted.
-     */
-    long lastSleepUntil;
-
-    /*
-     * Creates a new callback thread to call the timer owner's
-     * tick() method.  A thread is taken from the pool if one
-     * is available, otherwise, a new thread is created.
-     * The thread handle is returned.
-     */
-    protected static synchronized TimerTickThread call(
-            Timer timer, long sleepUntil) {
-        TimerTickThread thread = pool;
-
-        if (thread == null) {
-            // create one.
-            thread = new TimerTickThread();
-            thread.timer = timer;
-            thread.lastSleepUntil = sleepUntil;
-            thread.start();
-        } else {
-            pool = pool.next;
-            thread.timer = timer;
-            thread.lastSleepUntil = sleepUntil;
-            synchronized (thread) {
-                thread.notify();
-            }
-        }
-        return thread;
-    }
-
-    /*
-     * Returns false if the thread should simply exit;
-     * otherwise the thread is returned the pool, where
-     * it waits to be notified.  (I did try to use the
-     * class monitor but the time between the notify
-     * and breaking out of the wait seemed to take
-     * significantly longer; need to look into this later.)
-     */
-    private boolean returnToPool() {
-        synchronized (getClass()) {
-            if (curPoolSize >= MAX_POOL_SIZE) {
-                return false;
-            }
-            next = pool;
-            pool = this;
-            curPoolSize++;
-            timer = null;
-        }
-        while (timer == null) {
-            synchronized (this) {
-                try {
-                    wait();
-                } catch (InterruptedException ex) {
-                   // Just drop through and retest timer.
-                }
-            }
-        }
-        synchronized (getClass()) {
-            curPoolSize--;
-        }
-        return true;
-    }
-
-    public void run() {
-        do {
-            timer.owner.tick(timer);
-            synchronized (TimerThread.timerThread) {
-                synchronized (timer) {
-                    if (lastSleepUntil == timer.sleepUntil) {
-                        TimerThread.requeue(timer);
-                    }
-                }
-            }
-        } while (returnToPool());
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/UCDecoder.java b/ojluni/src/main/java/sun/misc/UCDecoder.java
deleted file mode 100755
index 81793a3..0000000
--- a/ojluni/src/main/java/sun/misc/UCDecoder.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Copyright (c) 1995, 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.
- */
-package sun.misc;
-
-import java.io.OutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.PushbackInputStream;
-import java.io.PrintStream;
-import java.io.IOException;
-
-/**
- * This class implements a robust character decoder. The decoder will
- * converted encoded text into binary data.
- *
- * The basic encoding unit is a 3 character atom. It encodes two bytes
- * of data. Bytes are encoded into a 64 character set, the characters
- * were chosen specifically because they appear in all codesets.
- * We don't care what their numerical equivalent is because
- * we use a character array to map them. This is like UUencoding
- * with the dependency on ASCII removed.
- *
- * The three chars that make up an atom are encoded as follows:
- * <pre>
- *      00xxxyyy 00axxxxx 00byyyyy
- *      00 = leading zeros, all values are 0 - 63
- *      xxxyyy - Top 3 bits of X, Top 3 bits of Y
- *      axxxxx - a = X parity bit, xxxxx lower 5 bits of X
- *      byyyyy - b = Y parity bit, yyyyy lower 5 bits of Y
- * </pre>
- *
- * The atoms are arranged into lines suitable for inclusion into an
- * email message or text file. The number of bytes that are encoded
- * per line is 48 which keeps the total line length  under 80 chars)
- *
- * Each line has the form(
- * <pre>
- *  *(LLSS)(DDDD)(DDDD)(DDDD)...(CRC)
- *  Where each (xxx) represents a three character atom.
- *  (LLSS) - 8 bit length (high byte), and sequence number
- *           modulo 256;
- *  (DDDD) - Data byte atoms, if length is odd, last data
- *           atom has (DD00) (high byte data, low byte 0)
- *  (CRC)  - 16 bit CRC for the line, includes length,
- *           sequence, and all data bytes. If there is a
- *           zero pad byte (odd length) it is _NOT_
- *           included in the CRC.
- * </pre>
- *
- * If an error is encountered during decoding this class throws a
- * CEFormatException. The specific detail messages are:
- *
- * <pre>
- *    "UCDecoder: High byte parity error."
- *    "UCDecoder: Low byte parity error."
- *    "UCDecoder: Out of sequence line."
- *    "UCDecoder: CRC check failed."
- * </pre>
- *
- * @author      Chuck McManis
- * @see         CharacterEncoder
- * @see         UCEncoder
- */
-public class UCDecoder extends CharacterDecoder {
-
-    /** This class encodes two bytes per atom. */
-    protected int bytesPerAtom() {
-        return (2);
-    }
-
-    /** this class encodes 48 bytes per line */
-    protected int bytesPerLine() {
-        return (48);
-    }
-
-    /* this is the UCE mapping of 0-63 to characters .. */
-    private final static byte map_array[] = {
-        //     0         1         2         3         4         5         6         7
-        (byte)'0',(byte)'1',(byte)'2',(byte)'3',(byte)'4',(byte)'5',(byte)'6',(byte)'7', // 0
-        (byte)'8',(byte)'9',(byte)'A',(byte)'B',(byte)'C',(byte)'D',(byte)'E',(byte)'F', // 1
-        (byte)'G',(byte)'H',(byte)'I',(byte)'J',(byte)'K',(byte)'L',(byte)'M',(byte)'N', // 2
-        (byte)'O',(byte)'P',(byte)'Q',(byte)'R',(byte)'S',(byte)'T',(byte)'U',(byte)'V', // 3
-        (byte)'W',(byte)'X',(byte)'Y',(byte)'Z',(byte)'a',(byte)'b',(byte)'c',(byte)'d', // 4
-        (byte)'e',(byte)'f',(byte)'g',(byte)'h',(byte)'i',(byte)'j',(byte)'k',(byte)'l', // 5
-        (byte)'m',(byte)'n',(byte)'o',(byte)'p',(byte)'q',(byte)'r',(byte)'s',(byte)'t', // 6
-        (byte)'u',(byte)'v',(byte)'w',(byte)'x',(byte)'y',(byte)'z',(byte)'(',(byte)')'  // 7
-    };
-
-    private int sequence;
-    private byte tmp[] = new byte[2];
-    private CRC16 crc = new CRC16();
-
-    /**
-     * Decode one atom - reads the characters from the input stream, decodes
-     * them, and checks for valid parity.
-     */
-    protected void decodeAtom(PushbackInputStream inStream, OutputStream outStream, int l) throws IOException {
-        int i, p1, p2, np1, np2;
-        byte a = -1, b = -1, c = -1;
-        byte high_byte, low_byte;
-        byte tmp[] = new byte[3];
-
-        i = inStream.read(tmp);
-        if (i != 3) {
-                throw new CEStreamExhausted();
-        }
-        for (i = 0; (i < 64) && ((a == -1) || (b == -1) || (c == -1)); i++) {
-            if (tmp[0] == map_array[i]) {
-                a = (byte) i;
-            }
-            if (tmp[1] == map_array[i]) {
-                b = (byte) i;
-            }
-            if (tmp[2] == map_array[i]) {
-                c = (byte) i;
-            }
-        }
-        high_byte = (byte) (((a & 0x38) << 2) + (b & 0x1f));
-        low_byte = (byte) (((a & 0x7) << 5) + (c & 0x1f));
-        p1 = 0;
-        p2 = 0;
-        for (i = 1; i < 256; i = i * 2) {
-            if ((high_byte & i) != 0)
-                p1++;
-            if ((low_byte & i) != 0)
-                p2++;
-        }
-        np1 = (b & 32) / 32;
-        np2 = (c & 32) / 32;
-        if ((p1 & 1) != np1) {
-            throw new CEFormatException("UCDecoder: High byte parity error.");
-        }
-        if ((p2 & 1) != np2) {
-            throw new CEFormatException("UCDecoder: Low byte parity error.");
-        }
-        outStream.write(high_byte);
-        crc.update(high_byte);
-        if (l == 2) {
-            outStream.write(low_byte);
-            crc.update(low_byte);
-        }
-    }
-
-    private ByteArrayOutputStream lineAndSeq = new ByteArrayOutputStream(2);
-
-    /**
-     * decodeBufferPrefix initializes the sequence number to zero.
-     */
-    protected void decodeBufferPrefix(PushbackInputStream inStream, OutputStream outStream) {
-        sequence = 0;
-    }
-
-    /**
-     * decodeLinePrefix reads the sequence number and the number of
-     * encoded bytes from the line. If the sequence number is not the
-     * previous sequence number + 1 then an exception is thrown.
-     * UCE lines are line terminator immune, they all start with *
-     * so the other thing this method does is scan for the next line
-     * by looking for the * character.
-     *
-     * @exception CEFormatException out of sequence lines detected.
-     */
-    protected int decodeLinePrefix(PushbackInputStream inStream, OutputStream outStream)  throws IOException {
-        int     i;
-        int     nLen, nSeq;
-        byte    xtmp[];
-        int     c;
-
-        crc.value = 0;
-        while (true) {
-            c = inStream.read(tmp, 0, 1);
-            if (c == -1) {
-                throw new CEStreamExhausted();
-            }
-            if (tmp[0] == '*') {
-                break;
-            }
-        }
-        lineAndSeq.reset();
-        decodeAtom(inStream, lineAndSeq, 2);
-        xtmp = lineAndSeq.toByteArray();
-        nLen = xtmp[0] & 0xff;
-        nSeq = xtmp[1] & 0xff;
-        if (nSeq != sequence) {
-            throw new CEFormatException("UCDecoder: Out of sequence line.");
-        }
-        sequence = (sequence + 1) & 0xff;
-        return (nLen);
-    }
-
-
-    /**
-     * this method reads the CRC that is at the end of every line and
-     * verifies that it matches the computed CRC.
-     *
-     * @exception CEFormatException if CRC check fails.
-     */
-    protected void decodeLineSuffix(PushbackInputStream inStream, OutputStream outStream) throws IOException {
-        int i;
-        int lineCRC = crc.value;
-        int readCRC;
-        byte tmp[];
-
-        lineAndSeq.reset();
-        decodeAtom(inStream, lineAndSeq, 2);
-        tmp = lineAndSeq.toByteArray();
-        readCRC = ((tmp[0] << 8) & 0xFF00) + (tmp[1] & 0xff);
-        if (readCRC != lineCRC) {
-            throw new CEFormatException("UCDecoder: CRC check failed.");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/UCEncoder.java b/ojluni/src/main/java/sun/misc/UCEncoder.java
deleted file mode 100755
index 159da28..0000000
--- a/ojluni/src/main/java/sun/misc/UCEncoder.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (c) 1995, 1997, 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.
- */
-package sun.misc;
-
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.io.IOException;
-
-/**
- * This class implements a robust character encoder. The encoder is designed
- * to convert binary data into printable characters. The characters are
- * assumed to exist but they are not assumed to be ASCII, the complete set
- * is 0-9, A-Z, a-z, "(", and ")".
- *
- * The basic encoding unit is a 3 character atom. It encodes two bytes
- * of data. Bytes are encoded into a 64 character set, the characters
- * were chosen specifically because they appear in all codesets.
- * We don't care what their numerical equivalent is because
- * we use a character array to map them. This is like UUencoding
- * with the dependency on ASCII removed.
- *
- * The three chars that make up an atom are encoded as follows:
- * <pre>
- *      00xxxyyy 00axxxxx 00byyyyy
- *      00 = leading zeros, all values are 0 - 63
- *      xxxyyy - Top 3 bits of X, Top 3 bits of Y
- *      axxxxx - a = X parity bit, xxxxx lower 5 bits of X
- *      byyyyy - b = Y parity bit, yyyyy lower 5 bits of Y
- * </pre>
- *
- * The atoms are arranged into lines suitable for inclusion into an
- * email message or text file. The number of bytes that are encoded
- * per line is 48 which keeps the total line length  under 80 chars)
- *
- * Each line has the form(
- * <pre>
- *  *(LLSS)(DDDD)(DDDD)(DDDD)...(CRC)
- *  Where each (xxx) represents a three character atom.
- *  (LLSS) - 8 bit length (high byte), and sequence number
- *           modulo 256;
- *  (DDDD) - Data byte atoms, if length is odd, last data
- *           atom has (DD00) (high byte data, low byte 0)
- *  (CRC)  - 16 bit CRC for the line, includes length,
- *           sequence, and all data bytes. If there is a
- *           zero pad byte (odd length) it is _NOT_
- *           included in the CRC.
- * </pre>
- *
- * @author      Chuck McManis
- * @see         CharacterEncoder
- * @see         UCDecoder
- */
-public class UCEncoder extends CharacterEncoder {
-
-    /** this clase encodes two bytes per atom */
-    protected int bytesPerAtom() {
-        return (2);
-    }
-
-    /** this class encodes 48 bytes per line */
-    protected int bytesPerLine() {
-        return (48);
-    }
-
-    /* this is the UCE mapping of 0-63 to characters .. */
-    private final static byte map_array[] = {
-        //     0         1         2         3         4         5         6         7
-        (byte)'0',(byte)'1',(byte)'2',(byte)'3',(byte)'4',(byte)'5',(byte)'6',(byte)'7', // 0
-        (byte)'8',(byte)'9',(byte)'A',(byte)'B',(byte)'C',(byte)'D',(byte)'E',(byte)'F', // 1
-        (byte)'G',(byte)'H',(byte)'I',(byte)'J',(byte)'K',(byte)'L',(byte)'M',(byte)'N', // 2
-        (byte)'O',(byte)'P',(byte)'Q',(byte)'R',(byte)'S',(byte)'T',(byte)'U',(byte)'V', // 3
-        (byte)'W',(byte)'X',(byte)'Y',(byte)'Z',(byte)'a',(byte)'b',(byte)'c',(byte)'d', // 4
-        (byte)'e',(byte)'f',(byte)'g',(byte)'h',(byte)'i',(byte)'j',(byte)'k',(byte)'l', // 5
-        (byte)'m',(byte)'n',(byte)'o',(byte)'p',(byte)'q',(byte)'r',(byte)'s',(byte)'t', // 6
-        (byte)'u',(byte)'v',(byte)'w',(byte)'x',(byte)'y',(byte)'z',(byte)'(',(byte)')'  // 7
-    };
-
-    private int sequence;
-    private byte tmp[] = new byte[2];
-    private CRC16 crc = new CRC16();
-
-    /**
-     * encodeAtom - take two bytes and encode them into the correct
-     * three characters. If only one byte is to be encoded, the other
-     * must be zero. The padding byte is not included in the CRC computation.
-     */
-    protected void encodeAtom(OutputStream outStream, byte data[], int offset, int len) throws IOException
-    {
-        int     i;
-        int     p1, p2; // parity bits
-        byte    a, b;
-
-        a = data[offset];
-        if (len == 2) {
-            b = data[offset+1];
-        } else {
-            b = 0;
-        }
-        crc.update(a);
-        if (len == 2) {
-            crc.update(b);
-        }
-        outStream.write(map_array[((a >>> 2) & 0x38) + ((b >>> 5) & 0x7)]);
-        p1 = 0; p2 = 0;
-        for (i = 1; i < 256; i = i * 2) {
-            if ((a & i) != 0) {
-                p1++;
-            }
-            if ((b & i) != 0) {
-                p2++;
-            }
-        }
-        p1 = (p1 & 1) * 32;
-        p2 = (p2 & 1) * 32;
-        outStream.write(map_array[(a & 31) + p1]);
-        outStream.write(map_array[(b & 31) + p2]);
-        return;
-    }
-
-    /**
-     * Each UCE encoded line starts with a prefix of '*[XXX]', where
-     * the sequence number and the length are encoded in the first
-     * atom.
-     */
-    protected void encodeLinePrefix(OutputStream outStream, int length) throws IOException {
-        outStream.write('*');
-        crc.value = 0;
-        tmp[0] = (byte) length;
-        tmp[1] = (byte) sequence;
-        sequence = (sequence + 1) & 0xff;
-        encodeAtom(outStream, tmp, 0, 2);
-    }
-
-
-    /**
-     * each UCE encoded line ends with YYY and encoded version of the
-     * 16 bit checksum. The most significant byte of the check sum
-     * is always encoded FIRST.
-     */
-    protected void encodeLineSuffix(OutputStream outStream) throws IOException {
-        tmp[0] = (byte) ((crc.value >>> 8) & 0xff);
-        tmp[1] = (byte) (crc.value & 0xff);
-        encodeAtom(outStream, tmp, 0, 2);
-        super.pStream.println();
-    }
-
-    /**
-     * The buffer prefix code is used to initialize the sequence number
-     * to zero.
-     */
-    protected void encodeBufferPrefix(OutputStream a) throws IOException {
-        sequence = 0;
-        super.encodeBufferPrefix(a);
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/UUDecoder.java b/ojluni/src/main/java/sun/misc/UUDecoder.java
deleted file mode 100755
index 57cc6a4..0000000
--- a/ojluni/src/main/java/sun/misc/UUDecoder.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright (c) 1995, 2001, 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.
- */
-package sun.misc;
-
-import java.io.PushbackInputStream;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.io.IOException;
-
-/**
- * This class implements a Berkeley uu character decoder. This decoder
- * was made famous by the uudecode program.
- *
- * The basic character coding is algorithmic, taking 6 bits of binary
- * data and adding it to an ASCII ' ' (space) character. This converts
- * these six bits into a printable representation. Note that it depends
- * on the ASCII character encoding standard for english. Groups of three
- * bytes are converted into 4 characters by treating the three bytes
- * a four 6 bit groups, group 1 is byte 1's most significant six bits,
- * group 2 is byte 1's least significant two bits plus byte 2's four
- * most significant bits. etc.
- *
- * In this encoding, the buffer prefix is:
- * <pre>
- *     begin [mode] [filename]
- * </pre>
- *
- * This is followed by one or more lines of the form:
- * <pre>
- *      (len)(data)(data)(data) ...
- * </pre>
- * where (len) is the number of bytes on this line. Note that groupings
- * are always four characters, even if length is not a multiple of three
- * bytes. When less than three characters are encoded, the values of the
- * last remaining bytes is undefined and should be ignored.
- *
- * The last line of data in a uuencoded buffer is represented by a single
- * space character. This is translated by the decoding engine to a line
- * length of zero. This is immediately followed by a line which contains
- * the word 'end[newline]'
- *
- * If an error is encountered during decoding this class throws a
- * CEFormatException. The specific detail messages are:
- *
- * <pre>
- *      "UUDecoder: No begin line."
- *      "UUDecoder: Malformed begin line."
- *      "UUDecoder: Short Buffer."
- *      "UUDecoder: Bad Line Length."
- *      "UUDecoder: Missing 'end' line."
- * </pre>
- *
- * @author      Chuck McManis
- * @see         CharacterDecoder
- * @see         UUEncoder
- */
-public class UUDecoder extends CharacterDecoder {
-
-    /**
-     * This string contains the name that was in the buffer being decoded.
-     */
-    public String bufferName;
-
-    /**
-     * Represents UNIX(tm) mode bits. Generally three octal digits
-     * representing read, write, and execute permission of the owner,
-     * group owner, and  others. They should be interpreted as the bit groups:
-     * <pre>
-     * (owner) (group) (others)
-     *  rwx      rwx     rwx    (r = read, w = write, x = execute)
-     *</pre>
-     *
-     */
-    public int mode;
-
-
-    /**
-     * UU encoding specifies 3 bytes per atom.
-     */
-    protected int bytesPerAtom() {
-        return (3);
-    }
-
-    /**
-     * All UU lines have 45 bytes on them, for line length of 15*4+1 or 61
-     * characters per line.
-     */
-    protected int bytesPerLine() {
-        return (45);
-    }
-
-    /** This is used to decode the atoms */
-    private byte decoderBuffer[] = new byte[4];
-
-    /**
-     * Decode a UU atom. Note that if l is less than 3 we don't write
-     * the extra bits, however the encoder always encodes 4 character
-     * groups even when they are not needed.
-     */
-    protected void decodeAtom(PushbackInputStream inStream, OutputStream outStream, int l)
-        throws IOException {
-        int i, c1, c2, c3, c4;
-        int a, b, c;
-        StringBuffer x = new StringBuffer();
-
-        for (i = 0; i < 4; i++) {
-            c1 = inStream.read();
-            if (c1 == -1) {
-                throw new CEStreamExhausted();
-            }
-            x.append((char)c1);
-            decoderBuffer[i] = (byte) ((c1 - ' ') & 0x3f);
-        }
-        a = ((decoderBuffer[0] << 2) & 0xfc) | ((decoderBuffer[1] >>> 4) & 3);
-        b = ((decoderBuffer[1] << 4) & 0xf0) | ((decoderBuffer[2] >>> 2) & 0xf);
-        c = ((decoderBuffer[2] << 6) & 0xc0) | (decoderBuffer[3] & 0x3f);
-        outStream.write((byte)(a & 0xff));
-        if (l > 1) {
-            outStream.write((byte)( b & 0xff));
-        }
-        if (l > 2) {
-            outStream.write((byte)(c&0xff));
-        }
-    }
-
-    /**
-     * For uuencoded buffers, the data begins with a line of the form:
-     *          begin MODE FILENAME
-     * This line always starts in column 1.
-     */
-    protected void decodeBufferPrefix(PushbackInputStream inStream, OutputStream outStream) throws IOException {
-        int     c;
-        StringBuffer q = new StringBuffer(32);
-        String r;
-        boolean sawNewLine;
-
-        /*
-         * This works by ripping through the buffer until it finds a 'begin'
-         * line or the end of the buffer.
-         */
-        sawNewLine = true;
-        while (true) {
-            c = inStream.read();
-            if (c == -1) {
-                throw new CEFormatException("UUDecoder: No begin line.");
-            }
-            if ((c == 'b')  && sawNewLine){
-                c = inStream.read();
-                if (c == 'e') {
-                    break;
-                }
-            }
-            sawNewLine = (c == '\n') || (c == '\r');
-        }
-
-        /*
-         * Now we think its begin, (we've seen ^be) so verify it here.
-         */
-        while ((c != '\n') && (c != '\r')) {
-            c = inStream.read();
-            if (c == -1) {
-                throw new CEFormatException("UUDecoder: No begin line.");
-            }
-            if ((c != '\n') && (c != '\r')) {
-                q.append((char)c);
-            }
-        }
-        r = q.toString();
-        if (r.indexOf(' ') != 3) {
-                throw new CEFormatException("UUDecoder: Malformed begin line.");
-        }
-        mode = Integer.parseInt(r.substring(4,7));
-        bufferName = r.substring(r.indexOf(' ',6)+1);
-        /*
-         * Check for \n after \r
-         */
-        if (c == '\r') {
-            c = inStream.read ();
-            if ((c != '\n') && (c != -1))
-                inStream.unread (c);
-        }
-    }
-
-    /**
-     * In uuencoded buffers, encoded lines start with a character that
-     * represents the number of bytes encoded in this line. The last
-     * line of input is always a line that starts with a single space
-     * character, which would be a zero length line.
-     */
-    protected int decodeLinePrefix(PushbackInputStream inStream, OutputStream outStream) throws IOException {
-        int     c;
-
-        c = inStream.read();
-        if (c == ' ') {
-            c = inStream.read(); /* discard the (first)trailing CR or LF  */
-            c = inStream.read(); /* check for a second one  */
-            if ((c != '\n') && (c != -1))
-                inStream.unread (c);
-            throw new CEStreamExhausted();
-        } else if (c == -1) {
-            throw new CEFormatException("UUDecoder: Short Buffer.");
-        }
-
-        c = (c - ' ') & 0x3f;
-        if (c > bytesPerLine()) {
-            throw new CEFormatException("UUDecoder: Bad Line Length.");
-        }
-        return (c);
-    }
-
-
-    /**
-     * Find the end of the line for the next operation.
-     * The following sequences are recognized as end-of-line
-     * CR, CR LF, or LF
-     */
-    protected void decodeLineSuffix(PushbackInputStream inStream, OutputStream outStream) throws IOException {
-        int c;
-        while (true) {
-            c = inStream.read();
-            if (c == -1) {
-                throw new CEStreamExhausted();
-            }
-            if (c == '\n') {
-                break;
-            }
-            if (c == '\r') {
-                c = inStream.read();
-                if ((c != '\n') && (c != -1)) {
-                    inStream.unread (c);
-                }
-                break;
-            }
-        }
-    }
-
-    /**
-     * UUencoded files have a buffer suffix which consists of the word
-     * end. This line should immediately follow the line with a single
-     * space in it.
-     */
-    protected void decodeBufferSuffix(PushbackInputStream inStream, OutputStream outStream) throws IOException  {
-        int     c;
-
-        c = inStream.read(decoderBuffer);
-        if ((decoderBuffer[0] != 'e') || (decoderBuffer[1] != 'n') ||
-            (decoderBuffer[2] != 'd')) {
-            throw new CEFormatException("UUDecoder: Missing 'end' line.");
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/misc/UUEncoder.java b/ojluni/src/main/java/sun/misc/UUEncoder.java
deleted file mode 100755
index a52f235..0000000
--- a/ojluni/src/main/java/sun/misc/UUEncoder.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (c) 1995, 2004, 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.
- */
-package sun.misc;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.io.IOException;
-
-/**
- * This class implements a Berkeley uu character encoder. This encoder
- * was made famous by uuencode program.
- *
- * The basic character coding is algorithmic, taking 6 bits of binary
- * data and adding it to an ASCII ' ' (space) character. This converts
- * these six bits into a printable representation. Note that it depends
- * on the ASCII character encoding standard for english. Groups of three
- * bytes are converted into 4 characters by treating the three bytes
- * a four 6 bit groups, group 1 is byte 1's most significant six bits,
- * group 2 is byte 1's least significant two bits plus byte 2's four
- * most significant bits. etc.
- *
- * In this encoding, the buffer prefix is:
- * <pre>
- *     begin [mode] [filename]
- * </pre>
- *
- * This is followed by one or more lines of the form:
- * <pre>
- *      (len)(data)(data)(data) ...
- * </pre>
- * where (len) is the number of bytes on this line. Note that groupings
- * are always four characters, even if length is not a multiple of three
- * bytes. When less than three characters are encoded, the values of the
- * last remaining bytes is undefined and should be ignored.
- *
- * The last line of data in a uuencoded file is represented by a single
- * space character. This is translated by the decoding engine to a line
- * length of zero. This is immediately followed by a line which contains
- * the word 'end[newline]'
- *
- * @author      Chuck McManis
- * @see         CharacterEncoder
- * @see         UUDecoder
- */
-public class UUEncoder extends CharacterEncoder {
-
-    /**
-     * This name is stored in the begin line.
-     */
-    private String bufferName;
-
-    /**
-     * Represents UNIX(tm) mode bits. Generally three octal digits representing
-     * read, write, and execute permission of the owner, group owner, and
-     * others. They should be interpreted as the bit groups:
-     * (owner) (group) (others)
-     *  rwx      rwx     rwx    (r = read, w = write, x = execute)
-     *
-     * By default these are set to 644 (UNIX rw-r--r-- permissions).
-     */
-    private int mode;
-
-
-    /**
-     * Default - buffer begin line will be:
-     * <pre>
-     *  begin 644 encoder.buf
-     * </pre>
-     */
-    public UUEncoder() {
-        bufferName = "encoder.buf";
-        mode = 644;
-    }
-
-    /**
-     * Specifies a name for the encoded buffer, begin line will be:
-     * <pre>
-     *  begin 644 [FNAME]
-     * </pre>
-     */
-    public UUEncoder(String fname) {
-        bufferName = fname;
-        mode = 644;
-    }
-
-    /**
-     * Specifies a name and mode for the encoded buffer, begin line will be:
-     * <pre>
-     *  begin [MODE] [FNAME]
-     * </pre>
-     */
-    public UUEncoder(String fname, int newMode) {
-        bufferName = fname;
-        mode = newMode;
-    }
-
-    /** number of bytes per atom in uuencoding is 3 */
-    protected int bytesPerAtom() {
-        return (3);
-    }
-
-    /** number of bytes per line in uuencoding is 45 */
-    protected int bytesPerLine() {
-        return (45);
-    }
-
-    /**
-     * encodeAtom - take three bytes and encodes them into 4 characters
-     * If len is less than 3 then remaining bytes are filled with '1'.
-     * This insures that the last line won't end in spaces and potentiallly
-     * be truncated.
-     */
-    protected void encodeAtom(OutputStream outStream, byte data[], int offset, int len)
-        throws IOException {
-        byte    a, b = 1, c = 1;
-        int     c1, c2, c3, c4;
-
-        a = data[offset];
-        if (len > 1) {
-            b = data[offset+1];
-        }
-        if (len > 2) {
-            c = data[offset+2];
-        }
-
-        c1 = (a >>> 2) & 0x3f;
-        c2 = ((a << 4) & 0x30) | ((b >>> 4) & 0xf);
-        c3 = ((b << 2) & 0x3c) | ((c >>> 6) & 0x3);
-        c4 = c & 0x3f;
-        outStream.write(c1 + ' ');
-        outStream.write(c2 + ' ');
-        outStream.write(c3 + ' ');
-        outStream.write(c4 + ' ');
-        return;
-    }
-
-    /**
-     * Encode the line prefix which consists of the single character. The
-     * lenght is added to the value of ' ' (32 decimal) and printed.
-     */
-    protected void encodeLinePrefix(OutputStream outStream, int length)
-        throws IOException {
-        outStream.write((length & 0x3f) + ' ');
-    }
-
-
-    /**
-     * The line suffix for uuencoded files is simply a new line.
-     */
-    protected void encodeLineSuffix(OutputStream outStream) throws IOException {
-        pStream.println();
-    }
-
-    /**
-     * encodeBufferPrefix writes the begin line to the output stream.
-     */
-    protected void encodeBufferPrefix(OutputStream a) throws IOException {
-        super.pStream = new PrintStream(a);
-        super.pStream.print("begin "+mode+" ");
-        if (bufferName != null) {
-            super.pStream.println(bufferName);
-        } else {
-            super.pStream.println("encoder.bin");
-        }
-        super.pStream.flush();
-    }
-
-    /**
-     * encodeBufferSuffix writes the single line containing space (' ') and
-     * the line containing the word 'end' to the output stream.
-     */
-    protected void encodeBufferSuffix(OutputStream a) throws IOException {
-        super.pStream.println(" \nend");
-        super.pStream.flush();
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/misc/Unsafe.java b/ojluni/src/main/java/sun/misc/Unsafe.java
deleted file mode 100755
index c263a65..0000000
--- a/ojluni/src/main/java/sun/misc/Unsafe.java
+++ /dev/null
@@ -1,1021 +0,0 @@
-/*
- * Copyright (c) 2000, 2009, 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.
- */
-
-package sun.misc;
-
-import java.security.*;
-import java.lang.reflect.*;
-
-import sun.reflect.CallerSensitive;
-import sun.reflect.Reflection;
-
-
-/**
- * A collection of methods for performing low-level, unsafe operations.
- * Although the class and all methods are public, use of this class is
- * limited because only trusted code can obtain instances of it.
- *
- * @author John R. Rose
- * @see #getUnsafe
- */
-
-public final class Unsafe {
-
-    private static native void registerNatives();
-    static {
-        registerNatives();
-        sun.reflect.Reflection.registerMethodsToFilter(Unsafe.class, "getUnsafe");
-    }
-
-    private Unsafe() {}
-
-    private static final Unsafe theUnsafe = new Unsafe();
-
-    /**
-     * Provides the caller with the capability of performing unsafe
-     * operations.
-     *
-     * <p> The returned <code>Unsafe</code> object should be carefully guarded
-     * by the caller, since it can be used to read and write data at arbitrary
-     * memory addresses.  It must never be passed to untrusted code.
-     *
-     * <p> Most methods in this class are very low-level, and correspond to a
-     * small number of hardware instructions (on typical machines).  Compilers
-     * are encouraged to optimize these methods accordingly.
-     *
-     * <p> Here is a suggested idiom for using unsafe operations:
-     *
-     * <blockquote><pre>
-     * class MyTrustedClass {
-     *   private static final Unsafe unsafe = Unsafe.getUnsafe();
-     *   ...
-     *   private long myCountAddress = ...;
-     *   public int getCount() { return unsafe.getByte(myCountAddress); }
-     * }
-     * </pre></blockquote>
-     *
-     * (It may assist compilers to make the local variable be
-     * <code>final</code>.)
-     *
-     * @exception  SecurityException  if a security manager exists and its
-     *             <code>checkPropertiesAccess</code> method doesn't allow
-     *             access to the system properties.
-     */
-    @CallerSensitive
-    public static Unsafe getUnsafe() {
-        Class cc = Reflection.getCallerClass();
-        if (cc.getClassLoader() != null)
-            throw new SecurityException("Unsafe");
-        return theUnsafe;
-    }
-
-    /// peek and poke operations
-    /// (compilers should optimize these to memory ops)
-
-    // These work on object fields in the Java heap.
-    // They will not work on elements of packed arrays.
-
-    /**
-     * Fetches a value from a given Java variable.
-     * More specifically, fetches a field or array element within the given
-     * object <code>o</code> at the given offset, or (if <code>o</code> is
-     * null) from the memory address whose numerical value is the given
-     * offset.
-     * <p>
-     * The results are undefined unless one of the following cases is true:
-     * <ul>
-     * <li>The offset was obtained from {@link #objectFieldOffset} on
-     * the {@link java.lang.reflect.Field} of some Java field and the object
-     * referred to by <code>o</code> is of a class compatible with that
-     * field's class.
-     *
-     * <li>The offset and object reference <code>o</code> (either null or
-     * non-null) were both obtained via {@link #staticFieldOffset}
-     * and {@link #staticFieldBase} (respectively) from the
-     * reflective {@link Field} representation of some Java field.
-     *
-     * <li>The object referred to by <code>o</code> is an array, and the offset
-     * is an integer of the form <code>B+N*S</code>, where <code>N</code> is
-     * a valid index into the array, and <code>B</code> and <code>S</code> are
-     * the values obtained by {@link #arrayBaseOffset} and {@link
-     * #arrayIndexScale} (respectively) from the array's class.  The value
-     * referred to is the <code>N</code><em>th</em> element of the array.
-     *
-     * </ul>
-     * <p>
-     * If one of the above cases is true, the call references a specific Java
-     * variable (field or array element).  However, the results are undefined
-     * if that variable is not in fact of the type returned by this method.
-     * <p>
-     * This method refers to a variable by means of two parameters, and so
-     * it provides (in effect) a <em>double-register</em> addressing mode
-     * for Java variables.  When the object reference is null, this method
-     * uses its offset as an absolute address.  This is similar in operation
-     * to methods such as {@link #getInt(long)}, which provide (in effect) a
-     * <em>single-register</em> addressing mode for non-Java variables.
-     * However, because Java variables may have a different layout in memory
-     * from non-Java variables, programmers should not assume that these
-     * two addressing modes are ever equivalent.  Also, programmers should
-     * remember that offsets from the double-register addressing mode cannot
-     * be portably confused with longs used in the single-register addressing
-     * mode.
-     *
-     * @param o Java heap object in which the variable resides, if any, else
-     *        null
-     * @param offset indication of where the variable resides in a Java heap
-     *        object, if any, else a memory address locating the variable
-     *        statically
-     * @return the value fetched from the indicated Java variable
-     * @throws RuntimeException No defined exceptions are thrown, not even
-     *         {@link NullPointerException}
-     */
-    public native int getInt(Object o, long offset);
-
-    /**
-     * Stores a value into a given Java variable.
-     * <p>
-     * The first two parameters are interpreted exactly as with
-     * {@link #getInt(Object, long)} to refer to a specific
-     * Java variable (field or array element).  The given value
-     * is stored into that variable.
-     * <p>
-     * The variable must be of the same type as the method
-     * parameter <code>x</code>.
-     *
-     * @param o Java heap object in which the variable resides, if any, else
-     *        null
-     * @param offset indication of where the variable resides in a Java heap
-     *        object, if any, else a memory address locating the variable
-     *        statically
-     * @param x the value to store into the indicated Java variable
-     * @throws RuntimeException No defined exceptions are thrown, not even
-     *         {@link NullPointerException}
-     */
-    public native void putInt(Object o, long offset, int x);
-
-    /**
-     * Fetches a reference value from a given Java variable.
-     * @see #getInt(Object, long)
-     */
-    public native Object getObject(Object o, long offset);
-
-    /**
-     * Stores a reference value into a given Java variable.
-     * <p>
-     * Unless the reference <code>x</code> being stored is either null
-     * or matches the field type, the results are undefined.
-     * If the reference <code>o</code> is non-null, car marks or
-     * other store barriers for that object (if the VM requires them)
-     * are updated.
-     * @see #putInt(Object, int, int)
-     */
-    public native void putObject(Object o, long offset, Object x);
-
-    /** @see #getInt(Object, long) */
-    public native boolean getBoolean(Object o, long offset);
-    /** @see #putInt(Object, int, int) */
-    public native void    putBoolean(Object o, long offset, boolean x);
-    /** @see #getInt(Object, long) */
-    public native byte    getByte(Object o, long offset);
-    /** @see #putInt(Object, int, int) */
-    public native void    putByte(Object o, long offset, byte x);
-    /** @see #getInt(Object, long) */
-    public native short   getShort(Object o, long offset);
-    /** @see #putInt(Object, int, int) */
-    public native void    putShort(Object o, long offset, short x);
-    /** @see #getInt(Object, long) */
-    public native char    getChar(Object o, long offset);
-    /** @see #putInt(Object, int, int) */
-    public native void    putChar(Object o, long offset, char x);
-    /** @see #getInt(Object, long) */
-    public native long    getLong(Object o, long offset);
-    /** @see #putInt(Object, int, int) */
-    public native void    putLong(Object o, long offset, long x);
-    /** @see #getInt(Object, long) */
-    public native float   getFloat(Object o, long offset);
-    /** @see #putInt(Object, int, int) */
-    public native void    putFloat(Object o, long offset, float x);
-    /** @see #getInt(Object, long) */
-    public native double  getDouble(Object o, long offset);
-    /** @see #putInt(Object, int, int) */
-    public native void    putDouble(Object o, long offset, double x);
-
-    /**
-     * This method, like all others with 32-bit offsets, was native
-     * in a previous release but is now a wrapper which simply casts
-     * the offset to a long value.  It provides backward compatibility
-     * with bytecodes compiled against 1.4.
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public int getInt(Object o, int offset) {
-        return getInt(o, (long)offset);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public void putInt(Object o, int offset, int x) {
-        putInt(o, (long)offset, x);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public Object getObject(Object o, int offset) {
-        return getObject(o, (long)offset);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public void putObject(Object o, int offset, Object x) {
-        putObject(o, (long)offset, x);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public boolean getBoolean(Object o, int offset) {
-        return getBoolean(o, (long)offset);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public void putBoolean(Object o, int offset, boolean x) {
-        putBoolean(o, (long)offset, x);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public byte getByte(Object o, int offset) {
-        return getByte(o, (long)offset);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public void putByte(Object o, int offset, byte x) {
-        putByte(o, (long)offset, x);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public short getShort(Object o, int offset) {
-        return getShort(o, (long)offset);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public void putShort(Object o, int offset, short x) {
-        putShort(o, (long)offset, x);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public char getChar(Object o, int offset) {
-        return getChar(o, (long)offset);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public void putChar(Object o, int offset, char x) {
-        putChar(o, (long)offset, x);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public long getLong(Object o, int offset) {
-        return getLong(o, (long)offset);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public void putLong(Object o, int offset, long x) {
-        putLong(o, (long)offset, x);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public float getFloat(Object o, int offset) {
-        return getFloat(o, (long)offset);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public void putFloat(Object o, int offset, float x) {
-        putFloat(o, (long)offset, x);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public double getDouble(Object o, int offset) {
-        return getDouble(o, (long)offset);
-    }
-
-    /**
-     * @deprecated As of 1.4.1, cast the 32-bit offset argument to a long.
-     * See {@link #staticFieldOffset}.
-     */
-    @Deprecated
-    public void putDouble(Object o, int offset, double x) {
-        putDouble(o, (long)offset, x);
-    }
-
-    // These work on values in the C heap.
-
-    /**
-     * Fetches a value from a given memory address.  If the address is zero, or
-     * does not point into a block obtained from {@link #allocateMemory}, the
-     * results are undefined.
-     *
-     * @see #allocateMemory
-     */
-    public native byte    getByte(long address);
-
-    /**
-     * Stores a value into a given memory address.  If the address is zero, or
-     * does not point into a block obtained from {@link #allocateMemory}, the
-     * results are undefined.
-     *
-     * @see #getByte(long)
-     */
-    public native void    putByte(long address, byte x);
-
-    /** @see #getByte(long) */
-    public native short   getShort(long address);
-    /** @see #putByte(long, byte) */
-    public native void    putShort(long address, short x);
-    /** @see #getByte(long) */
-    public native char    getChar(long address);
-    /** @see #putByte(long, byte) */
-    public native void    putChar(long address, char x);
-    /** @see #getByte(long) */
-    public native int     getInt(long address);
-    /** @see #putByte(long, byte) */
-    public native void    putInt(long address, int x);
-    /** @see #getByte(long) */
-    public native long    getLong(long address);
-    /** @see #putByte(long, byte) */
-    public native void    putLong(long address, long x);
-    /** @see #getByte(long) */
-    public native float   getFloat(long address);
-    /** @see #putByte(long, byte) */
-    public native void    putFloat(long address, float x);
-    /** @see #getByte(long) */
-    public native double  getDouble(long address);
-    /** @see #putByte(long, byte) */
-    public native void    putDouble(long address, double x);
-
-    /**
-     * Fetches a native pointer from a given memory address.  If the address is
-     * zero, or does not point into a block obtained from {@link
-     * #allocateMemory}, the results are undefined.
-     *
-     * <p> If the native pointer is less than 64 bits wide, it is extended as
-     * an unsigned number to a Java long.  The pointer may be indexed by any
-     * given byte offset, simply by adding that offset (as a simple integer) to
-     * the long representing the pointer.  The number of bytes actually read
-     * from the target address maybe determined by consulting {@link
-     * #addressSize}.
-     *
-     * @see #allocateMemory
-     */
-    public native long getAddress(long address);
-
-    /**
-     * Stores a native pointer into a given memory address.  If the address is
-     * zero, or does not point into a block obtained from {@link
-     * #allocateMemory}, the results are undefined.
-     *
-     * <p> The number of bytes actually written at the target address maybe
-     * determined by consulting {@link #addressSize}.
-     *
-     * @see #getAddress(long)
-     */
-    public native void putAddress(long address, long x);
-
-    /// wrappers for malloc, realloc, free:
-
-    /**
-     * Allocates a new block of native memory, of the given size in bytes.  The
-     * contents of the memory are uninitialized; they will generally be
-     * garbage.  The resulting native pointer will never be zero, and will be
-     * aligned for all value types.  Dispose of this memory by calling {@link
-     * #freeMemory}, or resize it with {@link #reallocateMemory}.
-     *
-     * @throws IllegalArgumentException if the size is negative or too large
-     *         for the native size_t type
-     *
-     * @throws OutOfMemoryError if the allocation is refused by the system
-     *
-     * @see #getByte(long)
-     * @see #putByte(long, byte)
-     */
-    public native long allocateMemory(long bytes);
-
-    /**
-     * Resizes a new block of native memory, to the given size in bytes.  The
-     * contents of the new block past the size of the old block are
-     * uninitialized; they will generally be garbage.  The resulting native
-     * pointer will be zero if and only if the requested size is zero.  The
-     * resulting native pointer will be aligned for all value types.  Dispose
-     * of this memory by calling {@link #freeMemory}, or resize it with {@link
-     * #reallocateMemory}.  The address passed to this method may be null, in
-     * which case an allocation will be performed.
-     *
-     * @throws IllegalArgumentException if the size is negative or too large
-     *         for the native size_t type
-     *
-     * @throws OutOfMemoryError if the allocation is refused by the system
-     *
-     * @see #allocateMemory
-     */
-    public native long reallocateMemory(long address, long bytes);
-
-    /**
-     * Sets all bytes in a given block of memory to a fixed value
-     * (usually zero).
-     *
-     * <p>This method determines a block's base address by means of two parameters,
-     * and so it provides (in effect) a <em>double-register</em> addressing mode,
-     * as discussed in {@link #getInt(Object,long)}.  When the object reference is null,
-     * the offset supplies an absolute base address.
-     *
-     * <p>The stores are in coherent (atomic) units of a size determined
-     * by the address and length parameters.  If the effective address and
-     * length are all even modulo 8, the stores take place in 'long' units.
-     * If the effective address and length are (resp.) even modulo 4 or 2,
-     * the stores take place in units of 'int' or 'short'.
-     *
-     * @since 1.7
-     */
-    public native void setMemory(Object o, long offset, long bytes, byte value);
-
-    /**
-     * Sets all bytes in a given block of memory to a fixed value
-     * (usually zero).  This provides a <em>single-register</em> addressing mode,
-     * as discussed in {@link #getInt(Object,long)}.
-     *
-     * <p>Equivalent to <code>setMemory(null, address, bytes, value)</code>.
-     */
-    public void setMemory(long address, long bytes, byte value) {
-        setMemory(null, address, bytes, value);
-    }
-
-    /**
-     * Sets all bytes in a given block of memory to a copy of another
-     * block.
-     *
-     * <p>This method determines each block's base address by means of two parameters,
-     * and so it provides (in effect) a <em>double-register</em> addressing mode,
-     * as discussed in {@link #getInt(Object,long)}.  When the object reference is null,
-     * the offset supplies an absolute base address.
-     *
-     * <p>The transfers are in coherent (atomic) units of a size determined
-     * by the address and length parameters.  If the effective addresses and
-     * length are all even modulo 8, the transfer takes place in 'long' units.
-     * If the effective addresses and length are (resp.) even modulo 4 or 2,
-     * the transfer takes place in units of 'int' or 'short'.
-     *
-     * @since 1.7
-     */
-    public native void copyMemory(Object srcBase, long srcOffset,
-                                  Object destBase, long destOffset,
-                                  long bytes);
-    /**
-     * Sets all bytes in a given block of memory to a copy of another
-     * block.  This provides a <em>single-register</em> addressing mode,
-     * as discussed in {@link #getInt(Object,long)}.
-     *
-     * Equivalent to <code>copyMemory(null, srcAddress, null, destAddress, bytes)</code>.
-     */
-    public void copyMemory(long srcAddress, long destAddress, long bytes) {
-        copyMemory(null, srcAddress, null, destAddress, bytes);
-    }
-
-    /**
-     * Disposes of a block of native memory, as obtained from {@link
-     * #allocateMemory} or {@link #reallocateMemory}.  The address passed to
-     * this method may be null, in which case no action is taken.
-     *
-     * @see #allocateMemory
-     */
-    public native void freeMemory(long address);
-
-    /// random queries
-
-    /**
-     * This constant differs from all results that will ever be returned from
-     * {@link #staticFieldOffset}, {@link #objectFieldOffset},
-     * or {@link #arrayBaseOffset}.
-     */
-    public static final int INVALID_FIELD_OFFSET   = -1;
-
-    /**
-     * Returns the offset of a field, truncated to 32 bits.
-     * This method is implemented as follows:
-     * <blockquote><pre>
-     * public int fieldOffset(Field f) {
-     *     if (Modifier.isStatic(f.getModifiers()))
-     *         return (int) staticFieldOffset(f);
-     *     else
-     *         return (int) objectFieldOffset(f);
-     * }
-     * </pre></blockquote>
-     * @deprecated As of 1.4.1, use {@link #staticFieldOffset} for static
-     * fields and {@link #objectFieldOffset} for non-static fields.
-     */
-    @Deprecated
-    public int fieldOffset(Field f) {
-        if (Modifier.isStatic(f.getModifiers()))
-            return (int) staticFieldOffset(f);
-        else
-            return (int) objectFieldOffset(f);
-    }
-
-    /**
-     * Returns the base address for accessing some static field
-     * in the given class.  This method is implemented as follows:
-     * <blockquote><pre>
-     * public Object staticFieldBase(Class c) {
-     *     Field[] fields = c.getDeclaredFields();
-     *     for (int i = 0; i < fields.length; i++) {
-     *         if (Modifier.isStatic(fields[i].getModifiers())) {
-     *             return staticFieldBase(fields[i]);
-     *         }
-     *     }
-     *     return null;
-     * }
-     * </pre></blockquote>
-     * @deprecated As of 1.4.1, use {@link #staticFieldBase(Field)}
-     * to obtain the base pertaining to a specific {@link Field}.
-     * This method works only for JVMs which store all statics
-     * for a given class in one place.
-     */
-    @Deprecated
-    public Object staticFieldBase(Class c) {
-        Field[] fields = c.getDeclaredFields();
-        for (int i = 0; i < fields.length; i++) {
-            if (Modifier.isStatic(fields[i].getModifiers())) {
-                return staticFieldBase(fields[i]);
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Report the location of a given field in the storage allocation of its
-     * class.  Do not expect to perform any sort of arithmetic on this offset;
-     * it is just a cookie which is passed to the unsafe heap memory accessors.
-     *
-     * <p>Any given field will always have the same offset and base, and no
-     * two distinct fields of the same class will ever have the same offset
-     * and base.
-     *
-     * <p>As of 1.4.1, offsets for fields are represented as long values,
-     * although the Sun JVM does not use the most significant 32 bits.
-     * However, JVM implementations which store static fields at absolute
-     * addresses can use long offsets and null base pointers to express
-     * the field locations in a form usable by {@link #getInt(Object,long)}.
-     * Therefore, code which will be ported to such JVMs on 64-bit platforms
-     * must preserve all bits of static field offsets.
-     * @see #getInt(Object, long)
-     */
-    public native long staticFieldOffset(Field f);
-
-    /**
-     * Report the location of a given static field, in conjunction with {@link
-     * #staticFieldBase}.
-     * <p>Do not expect to perform any sort of arithmetic on this offset;
-     * it is just a cookie which is passed to the unsafe heap memory accessors.
-     *
-     * <p>Any given field will always have the same offset, and no two distinct
-     * fields of the same class will ever have the same offset.
-     *
-     * <p>As of 1.4.1, offsets for fields are represented as long values,
-     * although the Sun JVM does not use the most significant 32 bits.
-     * It is hard to imagine a JVM technology which needs more than
-     * a few bits to encode an offset within a non-array object,
-     * However, for consistency with other methods in this class,
-     * this method reports its result as a long value.
-     * @see #getInt(Object, long)
-     */
-    public native long objectFieldOffset(Field f);
-
-    /**
-     * Report the location of a given static field, in conjunction with {@link
-     * #staticFieldOffset}.
-     * <p>Fetch the base "Object", if any, with which static fields of the
-     * given class can be accessed via methods like {@link #getInt(Object,
-     * long)}.  This value may be null.  This value may refer to an object
-     * which is a "cookie", not guaranteed to be a real Object, and it should
-     * not be used in any way except as argument to the get and put routines in
-     * this class.
-     */
-    public native Object staticFieldBase(Field f);
-
-    /**
-     * Detect if the given class may need to be initialized. This is often
-     * needed in conjunction with obtaining the static field base of a
-     * class.
-     * @return false only if a call to {@code ensureClassInitialized} would have no effect
-     */
-    public native boolean shouldBeInitialized(Class<?> c);
-
-    /**
-     * Ensure the given class has been initialized. This is often
-     * needed in conjunction with obtaining the static field base of a
-     * class.
-     */
-    public native void ensureClassInitialized(Class c);
-
-    /**
-     * Report the offset of the first element in the storage allocation of a
-     * given array class.  If {@link #arrayIndexScale} returns a non-zero value
-     * for the same class, you may use that scale factor, together with this
-     * base offset, to form new offsets to access elements of arrays of the
-     * given class.
-     *
-     * @see #getInt(Object, long)
-     * @see #putInt(Object, long, int)
-     */
-    public native int arrayBaseOffset(Class arrayClass);
-
-    /** The value of {@code arrayBaseOffset(boolean[].class)} */
-    public static final int ARRAY_BOOLEAN_BASE_OFFSET
-            = theUnsafe.arrayBaseOffset(boolean[].class);
-
-    /** The value of {@code arrayBaseOffset(byte[].class)} */
-    public static final int ARRAY_BYTE_BASE_OFFSET
-            = theUnsafe.arrayBaseOffset(byte[].class);
-
-    /** The value of {@code arrayBaseOffset(short[].class)} */
-    public static final int ARRAY_SHORT_BASE_OFFSET
-            = theUnsafe.arrayBaseOffset(short[].class);
-
-    /** The value of {@code arrayBaseOffset(char[].class)} */
-    public static final int ARRAY_CHAR_BASE_OFFSET
-            = theUnsafe.arrayBaseOffset(char[].class);
-
-    /** The value of {@code arrayBaseOffset(int[].class)} */
-    public static final int ARRAY_INT_BASE_OFFSET
-            = theUnsafe.arrayBaseOffset(int[].class);
-
-    /** The value of {@code arrayBaseOffset(long[].class)} */
-    public static final int ARRAY_LONG_BASE_OFFSET
-            = theUnsafe.arrayBaseOffset(long[].class);
-
-    /** The value of {@code arrayBaseOffset(float[].class)} */
-    public static final int ARRAY_FLOAT_BASE_OFFSET
-            = theUnsafe.arrayBaseOffset(float[].class);
-
-    /** The value of {@code arrayBaseOffset(double[].class)} */
-    public static final int ARRAY_DOUBLE_BASE_OFFSET
-            = theUnsafe.arrayBaseOffset(double[].class);
-
-    /** The value of {@code arrayBaseOffset(Object[].class)} */
-    public static final int ARRAY_OBJECT_BASE_OFFSET
-            = theUnsafe.arrayBaseOffset(Object[].class);
-
-    /**
-     * Report the scale factor for addressing elements in the storage
-     * allocation of a given array class.  However, arrays of "narrow" types
-     * will generally not work properly with accessors like {@link
-     * #getByte(Object, int)}, so the scale factor for such classes is reported
-     * as zero.
-     *
-     * @see #arrayBaseOffset
-     * @see #getInt(Object, long)
-     * @see #putInt(Object, long, int)
-     */
-    public native int arrayIndexScale(Class arrayClass);
-
-    /** The value of {@code arrayIndexScale(boolean[].class)} */
-    public static final int ARRAY_BOOLEAN_INDEX_SCALE
-            = theUnsafe.arrayIndexScale(boolean[].class);
-
-    /** The value of {@code arrayIndexScale(byte[].class)} */
-    public static final int ARRAY_BYTE_INDEX_SCALE
-            = theUnsafe.arrayIndexScale(byte[].class);
-
-    /** The value of {@code arrayIndexScale(short[].class)} */
-    public static final int ARRAY_SHORT_INDEX_SCALE
-            = theUnsafe.arrayIndexScale(short[].class);
-
-    /** The value of {@code arrayIndexScale(char[].class)} */
-    public static final int ARRAY_CHAR_INDEX_SCALE
-            = theUnsafe.arrayIndexScale(char[].class);
-
-    /** The value of {@code arrayIndexScale(int[].class)} */
-    public static final int ARRAY_INT_INDEX_SCALE
-            = theUnsafe.arrayIndexScale(int[].class);
-
-    /** The value of {@code arrayIndexScale(long[].class)} */
-    public static final int ARRAY_LONG_INDEX_SCALE
-            = theUnsafe.arrayIndexScale(long[].class);
-
-    /** The value of {@code arrayIndexScale(float[].class)} */
-    public static final int ARRAY_FLOAT_INDEX_SCALE
-            = theUnsafe.arrayIndexScale(float[].class);
-
-    /** The value of {@code arrayIndexScale(double[].class)} */
-    public static final int ARRAY_DOUBLE_INDEX_SCALE
-            = theUnsafe.arrayIndexScale(double[].class);
-
-    /** The value of {@code arrayIndexScale(Object[].class)} */
-    public static final int ARRAY_OBJECT_INDEX_SCALE
-            = theUnsafe.arrayIndexScale(Object[].class);
-
-    /**
-     * Report the size in bytes of a native pointer, as stored via {@link
-     * #putAddress}.  This value will be either 4 or 8.  Note that the sizes of
-     * other primitive types (as stored in native memory blocks) is determined
-     * fully by their information content.
-     */
-    public native int addressSize();
-
-    /** The value of {@code addressSize()} */
-    public static final int ADDRESS_SIZE = theUnsafe.addressSize();
-
-    /**
-     * Report the size in bytes of a native memory page (whatever that is).
-     * This value will always be a power of two.
-     */
-    public native int pageSize();
-
-
-    /// random trusted operations from JNI:
-
-    /**
-     * Tell the VM to define a class, without security checks.  By default, the
-     * class loader and protection domain come from the caller's class.
-     */
-    public native Class defineClass(String name, byte[] b, int off, int len,
-                                    ClassLoader loader,
-                                    ProtectionDomain protectionDomain);
-
-    /**
-     * @deprecated Use defineClass(String, byte[], int, int, ClassLoader, ProtectionDomain)
-     *             instead. This method will be removed in JDK 8.
-     */
-    @Deprecated
-    @CallerSensitive
-    public native Class defineClass(String name, byte[] b, int off, int len);
-
-    /**
-     * Define a class but do not make it known to the class loader or system dictionary.
-     * <p>
-     * For each CP entry, the corresponding CP patch must either be null or have
-     * the a format that matches its tag:
-     * <ul>
-     * <li>Integer, Long, Float, Double: the corresponding wrapper object type from java.lang
-     * <li>Utf8: a string (must have suitable syntax if used as signature or name)
-     * <li>Class: any java.lang.Class object
-     * <li>String: any object (not just a java.lang.String)
-     * <li>InterfaceMethodRef: (NYI) a method handle to invoke on that call site's arguments
-     * </ul>
-     * @params hostClass context for linkage, access control, protection domain, and class loader
-     * @params data      bytes of a class file
-     * @params cpPatches where non-null entries exist, they replace corresponding CP entries in data
-     */
-    public native Class defineAnonymousClass(Class hostClass, byte[] data, Object[] cpPatches);
-
-
-    /** Allocate an instance but do not run any constructor.
-        Initializes the class if it has not yet been. */
-    public native Object allocateInstance(Class cls)
-        throws InstantiationException;
-
-    /** Lock the object.  It must get unlocked via {@link #monitorExit}. */
-    public native void monitorEnter(Object o);
-
-    /**
-     * Unlock the object.  It must have been locked via {@link
-     * #monitorEnter}.
-     */
-    public native void monitorExit(Object o);
-
-    /**
-     * Tries to lock the object.  Returns true or false to indicate
-     * whether the lock succeeded.  If it did, the object must be
-     * unlocked via {@link #monitorExit}.
-     */
-    public native boolean tryMonitorEnter(Object o);
-
-    /** Throw the exception without telling the verifier. */
-    public native void throwException(Throwable ee);
-
-
-    /**
-     * Atomically update Java variable to <tt>x</tt> if it is currently
-     * holding <tt>expected</tt>.
-     * @return <tt>true</tt> if successful
-     */
-    public final native boolean compareAndSwapObject(Object o, long offset,
-                                                     Object expected,
-                                                     Object x);
-
-    /**
-     * Atomically update Java variable to <tt>x</tt> if it is currently
-     * holding <tt>expected</tt>.
-     * @return <tt>true</tt> if successful
-     */
-    public final native boolean compareAndSwapInt(Object o, long offset,
-                                                  int expected,
-                                                  int x);
-
-    /**
-     * Atomically update Java variable to <tt>x</tt> if it is currently
-     * holding <tt>expected</tt>.
-     * @return <tt>true</tt> if successful
-     */
-    public final native boolean compareAndSwapLong(Object o, long offset,
-                                                   long expected,
-                                                   long x);
-
-    /**
-     * Fetches a reference value from a given Java variable, with volatile
-     * load semantics. Otherwise identical to {@link #getObject(Object, long)}
-     */
-    public native Object getObjectVolatile(Object o, long offset);
-
-    /**
-     * Stores a reference value into a given Java variable, with
-     * volatile store semantics. Otherwise identical to {@link #putObject(Object, long, Object)}
-     */
-    public native void    putObjectVolatile(Object o, long offset, Object x);
-
-    /** Volatile version of {@link #getInt(Object, long)}  */
-    public native int     getIntVolatile(Object o, long offset);
-
-    /** Volatile version of {@link #putInt(Object, long, int)}  */
-    public native void    putIntVolatile(Object o, long offset, int x);
-
-    /** Volatile version of {@link #getBoolean(Object, long)}  */
-    public native boolean getBooleanVolatile(Object o, long offset);
-
-    /** Volatile version of {@link #putBoolean(Object, long, boolean)}  */
-    public native void    putBooleanVolatile(Object o, long offset, boolean x);
-
-    /** Volatile version of {@link #getByte(Object, long)}  */
-    public native byte    getByteVolatile(Object o, long offset);
-
-    /** Volatile version of {@link #putByte(Object, long, byte)}  */
-    public native void    putByteVolatile(Object o, long offset, byte x);
-
-    /** Volatile version of {@link #getShort(Object, long)}  */
-    public native short   getShortVolatile(Object o, long offset);
-
-    /** Volatile version of {@link #putShort(Object, long, short)}  */
-    public native void    putShortVolatile(Object o, long offset, short x);
-
-    /** Volatile version of {@link #getChar(Object, long)}  */
-    public native char    getCharVolatile(Object o, long offset);
-
-    /** Volatile version of {@link #putChar(Object, long, char)}  */
-    public native void    putCharVolatile(Object o, long offset, char x);
-
-    /** Volatile version of {@link #getLong(Object, long)}  */
-    public native long    getLongVolatile(Object o, long offset);
-
-    /** Volatile version of {@link #putLong(Object, long, long)}  */
-    public native void    putLongVolatile(Object o, long offset, long x);
-
-    /** Volatile version of {@link #getFloat(Object, long)}  */
-    public native float   getFloatVolatile(Object o, long offset);
-
-    /** Volatile version of {@link #putFloat(Object, long, float)}  */
-    public native void    putFloatVolatile(Object o, long offset, float x);
-
-    /** Volatile version of {@link #getDouble(Object, long)}  */
-    public native double  getDoubleVolatile(Object o, long offset);
-
-    /** Volatile version of {@link #putDouble(Object, long, double)}  */
-    public native void    putDoubleVolatile(Object o, long offset, double x);
-
-    /**
-     * Version of {@link #putObjectVolatile(Object, long, Object)}
-     * that does not guarantee immediate visibility of the store to
-     * other threads. This method is generally only useful if the
-     * underlying field is a Java volatile (or if an array cell, one
-     * that is otherwise only accessed using volatile accesses).
-     */
-    public native void    putOrderedObject(Object o, long offset, Object x);
-
-    /** Ordered/Lazy version of {@link #putIntVolatile(Object, long, int)}  */
-    public native void    putOrderedInt(Object o, long offset, int x);
-
-    /** Ordered/Lazy version of {@link #putLongVolatile(Object, long, long)} */
-    public native void    putOrderedLong(Object o, long offset, long x);
-
-    /**
-     * Unblock the given thread blocked on <tt>park</tt>, or, if it is
-     * not blocked, cause the subsequent call to <tt>park</tt> not to
-     * block.  Note: this operation is "unsafe" solely because the
-     * caller must somehow ensure that the thread has not been
-     * destroyed. Nothing special is usually required to ensure this
-     * when called from Java (in which there will ordinarily be a live
-     * reference to the thread) but this is not nearly-automatically
-     * so when calling from native code.
-     * @param thread the thread to unpark.
-     *
-     */
-    public native void unpark(Object thread);
-
-    /**
-     * Block current thread, returning when a balancing
-     * <tt>unpark</tt> occurs, or a balancing <tt>unpark</tt> has
-     * already occurred, or the thread is interrupted, or, if not
-     * absolute and time is not zero, the given time nanoseconds have
-     * elapsed, or if absolute, the given deadline in milliseconds
-     * since Epoch has passed, or spuriously (i.e., returning for no
-     * "reason"). Note: This operation is in the Unsafe class only
-     * because <tt>unpark</tt> is, so it would be strange to place it
-     * elsewhere.
-     */
-    public native void park(boolean isAbsolute, long time);
-
-    /**
-     * Gets the load average in the system run queue assigned
-     * to the available processors averaged over various periods of time.
-     * This method retrieves the given <tt>nelem</tt> samples and
-     * assigns to the elements of the given <tt>loadavg</tt> array.
-     * The system imposes a maximum of 3 samples, representing
-     * averages over the last 1,  5,  and  15 minutes, respectively.
-     *
-     * @params loadavg an array of double of size nelems
-     * @params nelems the number of samples to be retrieved and
-     *         must be 1 to 3.
-     *
-     * @return the number of samples actually retrieved; or -1
-     *         if the load average is unobtainable.
-     */
-    public native int getLoadAverage(double[] loadavg, int nelems);
-}
diff --git a/ojluni/src/main/java/sun/misc/VMNotification.java b/ojluni/src/main/java/sun/misc/VMNotification.java
deleted file mode 100755
index bf4abef..0000000
--- a/ojluni/src/main/java/sun/misc/VMNotification.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 1996, 2004, 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.
- */
-
-package sun.misc;
-
-/** @deprecated */
-@Deprecated
-public interface VMNotification {
-
-    // when the vm switches allocation states, we get notified
-    // (possible semantics: if the state changes while in this
-    // notification, don't recursively notify).
-    // oldState and newState may be the same if we are just releasing
-    // suspended threads.
-    void newAllocState(int oldState, int newState,
-                       boolean threadsSuspended);
-}
diff --git a/ojluni/src/main/java/sun/misc/VMSupport.java b/ojluni/src/main/java/sun/misc/VMSupport.java
deleted file mode 100755
index bc5488c..0000000
--- a/ojluni/src/main/java/sun/misc/VMSupport.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-package sun.misc;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.Properties;
-import java.util.Set;
-import java.util.jar.JarFile;
-import java.util.jar.Manifest;
-import java.util.jar.Attributes;
-
-/*
- * Support class used by JVMTI and VM attach mechanism.
- */
-public class VMSupport {
-
-    private static Properties agentProps = null;
-    /**
-     * Returns the agent properties.
-     */
-    public static synchronized Properties getAgentProperties() {
-        if (agentProps == null) {
-            agentProps = new Properties();
-            initAgentProperties(agentProps);
-        }
-        return agentProps;
-    }
-    private static native Properties initAgentProperties(Properties props);
-
-    /**
-     * Write the given properties list to a byte array and return it. Properties with
-     * a key or value that is not a String is filtered out. The stream written to the byte
-     * array is ISO 8859-1 encoded.
-     */
-    private static byte[] serializePropertiesToByteArray(Properties p) throws IOException {
-        ByteArrayOutputStream out = new ByteArrayOutputStream(4096);
-
-        Properties props = new Properties();
-
-        // stringPropertyNames() returns a snapshot of the property keys
-        Set<String> keyset = p.stringPropertyNames();
-        for (String key : keyset) {
-            String value = p.getProperty(key);
-            props.put(key, value);
-        }
-
-        props.store(out, null);
-        return out.toByteArray();
-    }
-
-    public static byte[] serializePropertiesToByteArray() throws IOException {
-        return serializePropertiesToByteArray(System.getProperties());
-    }
-
-    public static byte[] serializeAgentPropertiesToByteArray() throws IOException {
-        return serializePropertiesToByteArray(getAgentProperties());
-    }
-
-    /*
-     * Returns true if the given JAR file has the Class-Path attribute in the
-     * main section of the JAR manifest. Throws RuntimeException if the given
-     * path is not a JAR file or some other error occurs.
-     */
-    public static boolean isClassPathAttributePresent(String path) {
-        try {
-            Manifest man = (new JarFile(path)).getManifest();
-            if (man != null) {
-                if (man.getMainAttributes().getValue(Attributes.Name.CLASS_PATH) != null) {
-                    return true;
-                }
-            }
-            return false;
-        } catch (IOException ioe) {
-            throw new RuntimeException(ioe.getMessage());
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/misc/resources/Messages.java b/ojluni/src/main/java/sun/misc/resources/Messages.java
deleted file mode 100755
index 56f76bb..0000000
--- a/ojluni/src/main/java/sun/misc/resources/Messages.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, 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.
- */
-
-package sun.misc.resources;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for sun.misc.
- *
- * @author Michael Colburn
- */
-
-public class Messages extends java.util.ListResourceBundle {
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     * <p>
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-
-    private static final Object[][] contents = {
-        { "optpkg.versionerror", "ERROR: Invalid version format used in {0} JAR file. Check the documentation for the supported version format." },
-        { "optpkg.attributeerror", "ERROR: The required {0} JAR manifest attribute is not set in {1} JAR file." },
-        { "optpkg.attributeserror", "ERROR: Some required JAR manifest attributes are not set in {0} JAR file." }
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/misc/resources/Messages_de.java b/ojluni/src/main/java/sun/misc/resources/Messages_de.java
deleted file mode 100755
index 9f063e8..0000000
--- a/ojluni/src/main/java/sun/misc/resources/Messages_de.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, 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.
- */
-
-package sun.misc.resources;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for sun.misc.
- *
- * @author Michael Colburn
- */
-
-public class Messages_de extends java.util.ListResourceBundle {
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     * <p>
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-
-    private static final Object[][] contents = {
-        { "optpkg.versionerror", "ERROR: In JAR-Datei {0} wurde ein ung\u00FCltiges Versionsformat verwendet. Pr\u00FCfen Sie in der Dokumentation, welches Versionsformat unterst\u00FCtzt wird." },
-        { "optpkg.attributeerror", "ERROR: In JAR-Datei {1} ist das erforderliche JAR-Manifestattribut {0} nicht festgelegt." },
-        { "optpkg.attributeserror", "ERROR: In JAR-Datei {0} sind einige erforderliche JAR-Manifestattribute nicht festgelegt." }
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/misc/resources/Messages_es.java b/ojluni/src/main/java/sun/misc/resources/Messages_es.java
deleted file mode 100755
index d46419e..0000000
--- a/ojluni/src/main/java/sun/misc/resources/Messages_es.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, 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.
- */
-
-package sun.misc.resources;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for sun.misc.
- *
- * @author Michael Colburn
- */
-
-public class Messages_es extends java.util.ListResourceBundle {
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     * <p>
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-
-    private static final Object[][] contents = {
-        { "optpkg.versionerror", "ERROR: el formato del archivo JAR {0} pertenece a una versi\u00F3n no v\u00E1lida. Busque en la documentaci\u00F3n el formato de una versi\u00F3n soportada." },
-        { "optpkg.attributeerror", "ERROR: el atributo obligatorio JAR manifest {0} no est\u00E1 definido en el archivo JAR {1}." },
-        { "optpkg.attributeserror", "ERROR: algunos atributos obligatorios JAR manifest no est\u00E1n definidos en el archivo JAR {0}." }
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/misc/resources/Messages_fr.java b/ojluni/src/main/java/sun/misc/resources/Messages_fr.java
deleted file mode 100755
index 9ed71c9..0000000
--- a/ojluni/src/main/java/sun/misc/resources/Messages_fr.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, 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.
- */
-
-package sun.misc.resources;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for sun.misc.
- *
- * @author Michael Colburn
- */
-
-public class Messages_fr extends java.util.ListResourceBundle {
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     * <p>
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-
-    private static final Object[][] contents = {
-        { "optpkg.versionerror", "ERREUR\u00A0: le format de version utilis\u00E9 pour le fichier JAR {0} n''est pas valide. Pour conna\u00EEtre le format de version pris en charge, consultez la documentation." },
-        { "optpkg.attributeerror", "ERREUR\u00A0: l''attribut manifest JAR {0} obligatoire n''est pas d\u00E9fini dans le fichier JAR {1}." },
-        { "optpkg.attributeserror", "ERREUR\u00A0: certains attributs manifest JAR obligatoires ne sont pas d\u00E9finis dans le fichier JAR {0}." }
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/misc/resources/Messages_it.java b/ojluni/src/main/java/sun/misc/resources/Messages_it.java
deleted file mode 100755
index 956caaa..0000000
--- a/ojluni/src/main/java/sun/misc/resources/Messages_it.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, 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.
- */
-
-package sun.misc.resources;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for sun.misc.
- *
- * @author Michael Colburn
- */
-
-public class Messages_it extends java.util.ListResourceBundle {
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     * <p>
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-
-    private static final Object[][] contents = {
-        { "optpkg.versionerror", "ERRORE: Formato versione non valido nel file JAR {0}. Verificare nella documentazione il formato della versione supportato." },
-        { "optpkg.attributeerror", "ERRORE: L''attributo manifest JAR {0} richiesto non \u00E8 impostato nel file JAR {1}." },
-        { "optpkg.attributeserror", "ERRORE: Alcuni attributi manifesti JAR obbligatori non sono impostati nel file JAR {0}." }
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/misc/resources/Messages_ja.java b/ojluni/src/main/java/sun/misc/resources/Messages_ja.java
deleted file mode 100755
index 95c7990..0000000
--- a/ojluni/src/main/java/sun/misc/resources/Messages_ja.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, 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.
- */
-
-package sun.misc.resources;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for sun.misc.
- *
- * @author Michael Colburn
- */
-
-public class Messages_ja extends java.util.ListResourceBundle {
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     * <p>
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-
-    private static final Object[][] contents = {
-        { "optpkg.versionerror", "\u30A8\u30E9\u30FC: JAR\u30D5\u30A1\u30A4\u30EB{0}\u3067\u7121\u52B9\u306A\u30D0\u30FC\u30B8\u30E7\u30F3\u5F62\u5F0F\u304C\u4F7F\u7528\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u308B\u30D0\u30FC\u30B8\u30E7\u30F3\u5F62\u5F0F\u306B\u3064\u3044\u3066\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002" },
-        { "optpkg.attributeerror", "\u30A8\u30E9\u30FC: \u5FC5\u8981\u306AJAR\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u5C5E\u6027{0}\u304CJAR\u30D5\u30A1\u30A4\u30EB{1}\u306B\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002" },
-        { "optpkg.attributeserror", "\u30A8\u30E9\u30FC: \u8907\u6570\u306E\u5FC5\u8981\u306AJAR\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u5C5E\u6027\u304CJAR\u30D5\u30A1\u30A4\u30EB{0}\u306B\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002" }
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/misc/resources/Messages_ko.java b/ojluni/src/main/java/sun/misc/resources/Messages_ko.java
deleted file mode 100755
index 60b4ef0..0000000
--- a/ojluni/src/main/java/sun/misc/resources/Messages_ko.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, 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.
- */
-
-package sun.misc.resources;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for sun.misc.
- *
- * @author Michael Colburn
- */
-
-public class Messages_ko extends java.util.ListResourceBundle {
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     * <p>
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-
-    private static final Object[][] contents = {
-        { "optpkg.versionerror", "\uC624\uB958: {0} JAR \uD30C\uC77C\uC5D0 \uBD80\uC801\uD569\uD55C \uBC84\uC804 \uD615\uC2DD\uC774 \uC0AC\uC6A9\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uC124\uBA85\uC11C\uC5D0\uC11C \uC9C0\uC6D0\uB418\uB294 \uBC84\uC804 \uD615\uC2DD\uC744 \uD655\uC778\uD558\uC2ED\uC2DC\uC624." },
-        { "optpkg.attributeerror", "\uC624\uB958: \uD544\uC694\uD55C {0} JAR manifest \uC18D\uC131\uC774 {1} JAR \uD30C\uC77C\uC5D0 \uC124\uC815\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4." },
-        { "optpkg.attributeserror", "\uC624\uB958: \uD544\uC694\uD55C \uC77C\uBD80 JAR manifest \uC18D\uC131\uC774 {0} JAR \uD30C\uC77C\uC5D0 \uC124\uC815\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4." }
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/misc/resources/Messages_pt_BR.java b/ojluni/src/main/java/sun/misc/resources/Messages_pt_BR.java
deleted file mode 100755
index e588028..0000000
--- a/ojluni/src/main/java/sun/misc/resources/Messages_pt_BR.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, 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.
- */
-
-package sun.misc.resources;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for sun.misc.
- *
- * @author Michael Colburn
- */
-
-public class Messages_pt_BR extends java.util.ListResourceBundle {
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     * <p>
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-
-    private static final Object[][] contents = {
-        { "optpkg.versionerror", "ERRO: formato de vers\u00E3o inv\u00E1lido usado no arquivo JAR {0}. Verifique a documenta\u00E7\u00E3o para obter o formato de vers\u00E3o suportado." },
-        { "optpkg.attributeerror", "ERRO: o atributo de manifesto JAR {0} necess\u00E1rio n\u00E3o est\u00E1 definido no arquivo JAR {1}." },
-        { "optpkg.attributeserror", "ERRO: alguns atributos de manifesto JAR necess\u00E1rios n\u00E3o est\u00E3o definidos no arquivo JAR {0}." }
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/misc/resources/Messages_sv.java b/ojluni/src/main/java/sun/misc/resources/Messages_sv.java
deleted file mode 100755
index c6770c2..0000000
--- a/ojluni/src/main/java/sun/misc/resources/Messages_sv.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, 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.
- */
-
-package sun.misc.resources;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for sun.misc.
- *
- * @author Michael Colburn
- */
-
-public class Messages_sv extends java.util.ListResourceBundle {
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     * <p>
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-
-    private static final Object[][] contents = {
-        { "optpkg.versionerror", "FEL: Ogiltigt versionsformat i {0} JAR-fil. Kontrollera i dokumentationen vilket versionsformat som st\u00F6ds." },
-        { "optpkg.attributeerror", "FEL: Obligatoriskt JAR manifest-attribut {0} \u00E4r inte inst\u00E4llt i {1} JAR-filen." },
-        { "optpkg.attributeserror", "FEL: Vissa obligatoriska JAR manifest-attribut \u00E4r inte inst\u00E4llda i {0} JAR-filen." }
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/misc/resources/Messages_zh_CN.java b/ojluni/src/main/java/sun/misc/resources/Messages_zh_CN.java
deleted file mode 100755
index 5ee47f9..0000000
--- a/ojluni/src/main/java/sun/misc/resources/Messages_zh_CN.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, 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.
- */
-
-package sun.misc.resources;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for sun.misc.
- *
- * @author Michael Colburn
- */
-
-public class Messages_zh_CN extends java.util.ListResourceBundle {
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     * <p>
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-
-    private static final Object[][] contents = {
-        { "optpkg.versionerror", "\u9519\u8BEF: {0} JAR \u6587\u4EF6\u4E2D\u4F7F\u7528\u7684\u7248\u672C\u683C\u5F0F\u65E0\u6548\u3002\u8BF7\u68C0\u67E5\u6587\u6863\u4EE5\u4E86\u89E3\u652F\u6301\u7684\u7248\u672C\u683C\u5F0F\u3002" },
-        { "optpkg.attributeerror", "\u9519\u8BEF: \u5FC5\u8981\u7684{0} JAR \u6E05\u5355\u5C5E\u6027\u672A\u5728{1} JAR \u6587\u4EF6\u4E2D\u8BBE\u7F6E\u3002" },
-        { "optpkg.attributeserror", "\u9519\u8BEF: \u67D0\u4E9B\u5FC5\u8981\u7684 JAR \u6E05\u5355\u5C5E\u6027\u672A\u5728{0} JAR \u6587\u4EF6\u4E2D\u8BBE\u7F6E\u3002" }
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/misc/resources/Messages_zh_TW.java b/ojluni/src/main/java/sun/misc/resources/Messages_zh_TW.java
deleted file mode 100755
index 7b39584..0000000
--- a/ojluni/src/main/java/sun/misc/resources/Messages_zh_TW.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, 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.
- */
-
-package sun.misc.resources;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for sun.misc.
- *
- * @author Michael Colburn
- */
-
-public class Messages_zh_TW extends java.util.ListResourceBundle {
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     * <p>
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-
-    private static final Object[][] contents = {
-        { "optpkg.versionerror", "\u932F\u8AA4: {0} JAR \u6A94\u4F7F\u7528\u4E86\u7121\u6548\u7684\u7248\u672C\u683C\u5F0F\u3002\u8ACB\u6AA2\u67E5\u6587\u4EF6\uFF0C\u4EE5\u7372\u5F97\u652F\u63F4\u7684\u7248\u672C\u683C\u5F0F\u3002" },
-        { "optpkg.attributeerror", "\u932F\u8AA4: {1} JAR \u6A94\u4E2D\u672A\u8A2D\u5B9A\u5FC5\u8981\u7684 {0} JAR \u8CC7\u8A0A\u6E05\u55AE\u5C6C\u6027\u3002" },
-        { "optpkg.attributeserror", "\u932F\u8AA4: {0} JAR \u6A94\u4E2D\u672A\u8A2D\u5B9A\u67D0\u4E9B\u5FC5\u8981\u7684 JAR \u8CC7\u8A0A\u6E05\u55AE\u5C6C\u6027\u3002" }
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/net/NetworkServer.java b/ojluni/src/main/java/sun/net/NetworkServer.java
deleted file mode 100755
index cb6d4c8..0000000
--- a/ojluni/src/main/java/sun/net/NetworkServer.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 1995, 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.
- */
-package sun.net;
-
-import java.io.*;
-import java.net.Socket;
-import java.net.ServerSocket;
-
-/**
- * This is the base class for network servers.  To define a new type
- * of server define a new subclass of NetworkServer with a serviceRequest
- * method that services one request.  Start the server by executing:
- * <pre>
- *      new MyServerClass().startServer(port);
- * </pre>
- */
-public class NetworkServer implements Runnable, Cloneable {
-    /** Socket for communicating with client. */
-    public Socket clientSocket = null;
-    private Thread serverInstance;
-    private ServerSocket serverSocket;
-
-    /** Stream for printing to the client. */
-    public PrintStream clientOutput;
-
-    /** Buffered stream for reading replies from client. */
-    public InputStream clientInput;
-
-    /** Close an open connection to the client. */
-    public void close() throws IOException {
-        clientSocket.close();
-        clientSocket = null;
-        clientInput = null;
-        clientOutput = null;
-    }
-
-    /** Return client connection status */
-    public boolean clientIsOpen() {
-        return clientSocket != null;
-    }
-
-    final public void run() {
-        if (serverSocket != null) {
-            Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
-            // System.out.print("Server starts " + serverSocket + "\n");
-            while (true) {
-                try {
-                    Socket ns = serverSocket.accept();
-//                  System.out.print("New connection " + ns + "\n");
-                    NetworkServer n = (NetworkServer)clone();
-                    n.serverSocket = null;
-                    n.clientSocket = ns;
-                    new Thread(n).start();
-                } catch(Exception e) {
-                    System.out.print("Server failure\n");
-                    e.printStackTrace();
-                    try {
-                        serverSocket.close();
-                    } catch(IOException e2) {}
-                    System.out.print("cs="+serverSocket+"\n");
-                    break;
-                }
-            }
-//          close();
-        } else {
-            try {
-                clientOutput = new PrintStream(
-                        new BufferedOutputStream(clientSocket.getOutputStream()),
-                                               false, "ISO8859_1");
-                clientInput = new BufferedInputStream(clientSocket.getInputStream());
-                serviceRequest();
-                // System.out.print("Service handler exits
-                // "+clientSocket+"\n");
-            } catch(Exception e) {
-                // System.out.print("Service handler failure\n");
-                // e.printStackTrace();
-            }
-            try {
-                close();
-            } catch(IOException e2) {}
-        }
-    }
-
-    /** Start a server on port <i>port</i>.  It will call serviceRequest()
-        for each new connection. */
-    final public void startServer(int port) throws IOException {
-        serverSocket = new ServerSocket(port, 50);
-        serverInstance = new Thread(this);
-        serverInstance.start();
-    }
-
-    /** Service one request.  It is invoked with the clientInput and
-        clientOutput streams initialized.  This method handles one client
-        connection. When it is done, it can simply exit. The default
-        server just echoes it's input. It is invoked in it's own private
-        thread. */
-    public void serviceRequest() throws IOException {
-        byte buf[] = new byte[300];
-        int n;
-        clientOutput.print("Echo server " + getClass().getName() + "\n");
-        clientOutput.flush();
-        while ((n = clientInput.read(buf, 0, buf.length)) >= 0) {
-            clientOutput.write(buf, 0, n);
-        }
-    }
-
-    public static void main(String argv[]) {
-        try {
-            new NetworkServer ().startServer(8888);
-        } catch (IOException e) {
-            System.out.print("Server failed: "+e+"\n");
-        }
-    }
-
-    /**
-     * Clone this object;
-     */
-    public Object clone() {
-        try {
-            return super.clone();
-        } catch (CloneNotSupportedException e) {
-            // this shouldn't happen, since we are Cloneable
-            throw new InternalError();
-        }
-    }
-
-    public NetworkServer () {
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/URLCanonicalizer.java b/ojluni/src/main/java/sun/net/URLCanonicalizer.java
deleted file mode 100755
index dfa84bb..0000000
--- a/ojluni/src/main/java/sun/net/URLCanonicalizer.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-package sun.net;
-
-/**
- * Helper class to map URL "abbreviations" to real URLs.
- * The default implementation supports the following mappings:
- *   ftp.mumble.bar/... => ftp://ftp.mumble.bar/...
- *   gopher.mumble.bar/... => gopher://gopher.mumble.bar/...
- *   other.name.dom/... => http://other.name.dom/...
- *   /foo/... => file:/foo/...
- *
- * Full URLs (those including a protocol name) are passed through unchanged.
- *
- * Subclassers can override or extend this behavior to support different
- * or additional canonicalization policies.
- *
- * @author      Steve Byrne
- */
-
-public class URLCanonicalizer {
-    /**
-     * Creates the default canonicalizer instance.
-     */
-    public URLCanonicalizer() { }
-
-    /**
-     * Given a possibly abbreviated URL (missing a protocol name, typically),
-     * this method's job is to transform that URL into a canonical form,
-     * by including a protocol name and additional syntax, if necessary.
-     *
-     * For a correctly formed URL, this method should just return its argument.
-     */
-    public String canonicalize(String simpleURL) {
-        String resultURL = simpleURL;
-        if (simpleURL.startsWith("ftp.")) {
-            resultURL = "ftp://" + simpleURL;
-        } else if (simpleURL.startsWith("gopher.")) {
-            resultURL = "gopher://" + simpleURL;
-        } else if (simpleURL.startsWith("/")) {
-            resultURL = "file:" + simpleURL;
-        } else if (!hasProtocolName(simpleURL)) {
-            if (isSimpleHostName(simpleURL)) {
-                simpleURL = "www." + simpleURL + ".com";
-            }
-            resultURL = "http://" + simpleURL;
-        }
-
-        return resultURL;
-    }
-
-    /**
-     * Given a possibly abbreviated URL, this predicate function returns
-     * true if it appears that the URL contains a protocol name
-     */
-    public boolean hasProtocolName(String url) {
-        int index = url.indexOf(':');
-        if (index <= 0) {       // treat ":foo" as not having a protocol spec
-            return false;
-        }
-
-        for (int i = 0; i < index; i++) {
-            char c = url.charAt(i);
-
-            // REMIND: this is a guess at legal characters in a protocol --
-            // need to be verified
-            if ((c >= 'A' && c <= 'Z')
-                || (c >= 'a' && c <= 'z')
-                || (c == '-')) {
-                continue;
-            }
-
-            // found an illegal character
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Returns true if the URL is just a single name, no periods or
-     * slashes, false otherwise
-     **/
-    protected boolean isSimpleHostName(String url) {
-
-        for (int i = 0; i < url.length(); i++) {
-            char c = url.charAt(i);
-
-            // REMIND: this is a guess at legal characters in a protocol --
-            // need to be verified
-            if ((c >= 'A' && c <= 'Z')
-                || (c >= 'a' && c <= 'z')
-                || (c >= '0' && c <= '9')
-                || (c == '-')) {
-                continue;
-            }
-
-            // found an illegal character
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/dns/ResolverConfiguration.java b/ojluni/src/main/java/sun/net/dns/ResolverConfiguration.java
deleted file mode 100755
index 4ab30b2..0000000
--- a/ojluni/src/main/java/sun/net/dns/ResolverConfiguration.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 2002, 2010, 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.
- */
-
-package sun.net.dns;
-
-import java.util.List;
-
-/**
- * The configuration of the client resolver.
- *
- * <p>A ResolverConfiguration is a singleton that represents the
- * configuration of the client resolver. The ResolverConfiguration
- * is opened by invoking the {@link #open() open} method.
- *
- * @since 1.4
- */
-
-public abstract class ResolverConfiguration {
-
-    private static final Object lock = new Object();
-
-    private static ResolverConfiguration provider;
-
-    protected ResolverConfiguration() { }
-
-    /**
-     * Opens the resolver configuration.
-     *
-     * @return the resolver configuration
-     */
-    public static ResolverConfiguration open() {
-        synchronized (lock) {
-            if (provider == null) {
-                provider = new sun.net.dns.ResolverConfigurationImpl();
-            }
-            return provider;
-        }
-    }
-
-    /**
-     * Returns a list corresponding to the domain search path. The
-     * list is ordered by the search order used for host name lookup.
-     * Each element in the list returns a {@link java.lang.String}
-     * containing a domain name or suffix.
-     *
-     * @return list of domain names
-     */
-    public abstract List<String> searchlist();
-
-    /**
-     * Returns a list of name servers used for host name lookup.
-     * Each element in the list returns a {@link java.lang.String}
-     * containing the textual representation of the IP address of
-     * the name server.
-     *
-     * @return list of the name servers
-     */
-    public abstract List<String> nameservers();
-
-
-    /**
-     * Options representing certain resolver variables of
-     * a {@link ResolverConfiguration}.
-     */
-    public static abstract class Options {
-
-        /**
-         * Returns the maximum number of attempts the resolver
-         * will connect to each name server before giving up
-         * and returning an error.
-         *
-         * @return the resolver attempts value or -1 is unknown
-         */
-        public int attempts() {
-            return -1;
-        }
-
-        /**
-         * Returns the basic retransmit timeout, in milliseconds,
-         * used by the resolver. The resolver will typically use
-         * an exponential backoff algorithm where the timeout is
-         * doubled for every retransmit attempt. The basic
-         * retransmit timeout, returned here, is the initial
-         * timeout for the exponential backoff algorithm.
-         *
-         * @return the basic retransmit timeout value or -1
-         *         if unknown
-         */
-        public int retrans() {
-            return -1;
-        }
-    }
-
-    /**
-     * Returns the {@link #Options} for the resolver.
-     *
-     * @return options for the resolver
-     */
-    public abstract Options options();
-}
diff --git a/ojluni/src/main/java/sun/net/dns/ResolverConfigurationImpl.java b/ojluni/src/main/java/sun/net/dns/ResolverConfigurationImpl.java
deleted file mode 100755
index 3695b5d..0000000
--- a/ojluni/src/main/java/sun/net/dns/ResolverConfigurationImpl.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Copyright (c) 2002, 2010, 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.
- */
-
-package sun.net.dns;
-
-import java.util.List;
-import java.util.LinkedList;
-import java.util.StringTokenizer;
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-
-/*
- * An implementation of ResolverConfiguration for Solaris
- * and Linux.
- */
-
-public class ResolverConfigurationImpl
-    extends ResolverConfiguration
-{
-    // Lock helds whilst loading configuration or checking
-    private static Object lock = new Object();
-
-    // Time of last refresh.
-    private static long lastRefresh = -1;
-
-    // Cache timeout (300 seconds) - should be converted into property
-    // or configured as preference in the future.
-    private static final int TIMEOUT = 300000;
-
-    // Resolver options
-    private final Options opts;
-
-    // Parse /etc/resolv.conf to get the values for a particular
-    // keyword.
-    //
-    private LinkedList<String> resolvconf(String keyword,
-                                          int maxperkeyword,
-                                          int maxkeywords)
-    {
-        LinkedList<String> ll = new LinkedList<>();
-
-        try {
-            BufferedReader in =
-                new BufferedReader(new FileReader("/etc/resolv.conf"));
-            String line;
-            while ((line = in.readLine()) != null) {
-                int maxvalues = maxperkeyword;
-                if (line.length() == 0)
-                   continue;
-                if (line.charAt(0) == '#' || line.charAt(0) == ';')
-                    continue;
-                if (!line.startsWith(keyword))
-                    continue;
-                String value = line.substring(keyword.length());
-                if (value.length() == 0)
-                    continue;
-                if (value.charAt(0) != ' ' && value.charAt(0) != '\t')
-                    continue;
-                StringTokenizer st = new StringTokenizer(value, " \t");
-                while (st.hasMoreTokens()) {
-                    String val = st.nextToken();
-                    if (val.charAt(0) == '#' || val.charAt(0) == ';') {
-                        break;
-                    }
-                    ll.add(val);
-                    if (--maxvalues == 0) {
-                        break;
-                    }
-                }
-                if (--maxkeywords == 0) {
-                    break;
-                }
-            }
-            in.close();
-        } catch (IOException ioe) {
-            // problem reading value
-        }
-
-        return ll;
-    }
-
-    private LinkedList<String> searchlist;
-    private LinkedList<String> nameservers;
-
-
-    // Load DNS configuration from OS
-
-    private void loadConfig() {
-        assert Thread.holdsLock(lock);
-
-        // check if cached settings have expired.
-        if (lastRefresh >= 0) {
-            long currTime = System.currentTimeMillis();
-            if ((currTime - lastRefresh) < TIMEOUT) {
-                return;
-            }
-        }
-
-        // get the name servers from /etc/resolv.conf
-        nameservers =
-            java.security.AccessController.doPrivileged(
-                new java.security.PrivilegedAction<LinkedList<String>>() {
-                    public LinkedList<String> run() {
-                        // typically MAXNS is 3 but we've picked 5 here
-                        // to allow for additional servers if required.
-                        return resolvconf("nameserver", 1, 5);
-                    } /* run */
-                });
-
-        // get the search list (or domain)
-        searchlist = getSearchList();
-
-        // update the timestamp on the configuration
-        lastRefresh = System.currentTimeMillis();
-    }
-
-
-    // obtain search list or local domain
-
-    private LinkedList<String> getSearchList() {
-
-        LinkedList<String> sl;
-
-        // first try the search keyword in /etc/resolv.conf
-
-        sl = java.security.AccessController.doPrivileged(
-                 new java.security.PrivilegedAction<LinkedList<String>>() {
-                    public LinkedList<String> run() {
-                        LinkedList ll;
-
-                        // first try search keyword (max 6 domains)
-                        ll = resolvconf("search", 6, 1);
-                        if (ll.size() > 0) {
-                            return ll;
-                        }
-
-                        return null;
-
-                    } /* run */
-
-                });
-        if (sl != null) {
-            return sl;
-        }
-
-        // No search keyword so use local domain
-
-
-        // LOCALDOMAIN has absolute priority on Solaris
-
-        String localDomain = localDomain0();
-        if (localDomain != null && localDomain.length() > 0) {
-            sl = new LinkedList();
-            sl.add(localDomain);
-            return sl;
-        }
-
-        // try domain keyword in /etc/resolv.conf
-
-        sl = java.security.AccessController.doPrivileged(
-                 new java.security.PrivilegedAction<LinkedList<String>>() {
-                    public LinkedList<String> run() {
-                        LinkedList<String> ll;
-
-                        ll = resolvconf("domain", 1, 1);
-                        if (ll.size() > 0) {
-                            return ll;
-                        }
-                        return null;
-
-                    } /* run */
-                });
-        if (sl != null) {
-            return sl;
-        }
-
-        // no local domain so try fallback (RPC) domain or
-        // hostname
-
-        sl = new LinkedList<>();
-        String domain = fallbackDomain0();
-        if (domain != null && domain.length() > 0) {
-            sl.add(domain);
-        }
-
-        return sl;
-    }
-
-
-    // ----
-
-    ResolverConfigurationImpl() {
-        opts = new OptionsImpl();
-    }
-
-    public List<String> searchlist() {
-        synchronized (lock) {
-            loadConfig();
-
-            // List is mutable so return a shallow copy
-            return (List)searchlist.clone();
-        }
-    }
-
-    public List<String> nameservers() {
-        synchronized (lock) {
-            loadConfig();
-
-            // List is mutable so return a shallow copy
-            return (List)nameservers.clone();
-         }
-    }
-
-    public Options options() {
-        return opts;
-    }
-
-
-    // --- Native methods --
-
-    static native String localDomain0();
-
-    static native String fallbackDomain0();
-
-    static {
-        java.security.AccessController.doPrivileged(
-            new sun.security.action.LoadLibraryAction("net"));
-    }
-
-}
-
-/**
- * Implementation of {@link ResolverConfiguration.Options}
- */
-class OptionsImpl extends ResolverConfiguration.Options {
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/AuthFilter.java b/ojluni/src/main/java/sun/net/httpserver/AuthFilter.java
deleted file mode 100755
index 5b270833..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/AuthFilter.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2006, 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.
- */
-
-package sun.net.httpserver;
-
-import com.sun.net.httpserver.*;
-import java.io.*;
-import java.nio.*;
-import java.nio.channels.*;
-import sun.net.www.MessageHeader;
-import java.util.*;
-import javax.security.auth.*;
-import javax.security.auth.callback.*;
-import javax.security.auth.login.*;
-
-public class AuthFilter extends Filter {
-
-    private Authenticator authenticator;
-
-    public AuthFilter (Authenticator authenticator) {
-        this.authenticator = authenticator;
-    }
-
-    public String description () {
-        return "Authentication filter";
-    }
-
-    public void setAuthenticator (Authenticator a) {
-        authenticator = a;
-    }
-
-    public void consumeInput (HttpExchange t) throws IOException {
-        InputStream i = t.getRequestBody();
-        byte[] b = new byte [4096];
-        while (i.read (b) != -1);
-        i.close ();
-    }
-
-    /**
-     * The filter's implementation, which is invoked by the server
-     */
-    public void doFilter (HttpExchange t, Filter.Chain chain) throws IOException
-    {
-        if (authenticator != null) {
-            Authenticator.Result r = authenticator.authenticate (t);
-            if (r instanceof Authenticator.Success) {
-                Authenticator.Success s = (Authenticator.Success)r;
-                ExchangeImpl e = ExchangeImpl.get (t);
-                e.setPrincipal (s.getPrincipal());
-                chain.doFilter (t);
-            } else if (r instanceof Authenticator.Retry) {
-                Authenticator.Retry ry = (Authenticator.Retry)r;
-                consumeInput (t);
-                t.sendResponseHeaders (ry.getResponseCode(), -1);
-            } else if (r instanceof Authenticator.Failure) {
-                Authenticator.Failure f = (Authenticator.Failure)r;
-                consumeInput (t);
-                t.sendResponseHeaders (f.getResponseCode(), -1);
-            }
-        } else {
-            chain.doFilter (t);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/ChunkedInputStream.java b/ojluni/src/main/java/sun/net/httpserver/ChunkedInputStream.java
deleted file mode 100755
index 387ec1c..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/ChunkedInputStream.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (c) 2005, 2011, 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.
- */
-
-package sun.net.httpserver;
-
-import java.io.*;
-import java.net.*;
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-class ChunkedInputStream extends LeftOverInputStream {
-    ChunkedInputStream (ExchangeImpl t, InputStream src) {
-        super (t, src);
-    }
-
-    private int remaining;
-
-    /* true when a chunk header needs to be read */
-
-    private boolean needToReadHeader = true;
-
-    final static char CR = '\r';
-    final static char LF = '\n';
-    /*
-     * Maximum chunk header size of 2KB + 2 bytes for CRLF
-     */
-    private final static int MAX_CHUNK_HEADER_SIZE = 2050;
-
-    private int numeric (char[] arr, int nchars) throws IOException {
-        assert arr.length >= nchars;
-        int len = 0;
-        for (int i=0; i<nchars; i++) {
-            char c = arr[i];
-            int val=0;
-            if (c>='0' && c <='9') {
-                val = c - '0';
-            } else if (c>='a' && c<= 'f') {
-                val = c - 'a' + 10;
-            } else if (c>='A' && c<= 'F') {
-                val = c - 'A' + 10;
-            } else {
-                throw new IOException ("invalid chunk length");
-            }
-            len = len * 16 + val;
-        }
-        return len;
-    }
-
-    /* read the chunk header line and return the chunk length
-     * any chunk extensions are ignored
-     */
-    private int readChunkHeader () throws IOException {
-        boolean gotCR = false;
-        int c;
-        char[] len_arr = new char [16];
-        int len_size = 0;
-        boolean end_of_len = false;
-        int read = 0;
-
-        while ((c=in.read())!= -1) {
-            char ch = (char) c;
-            read++;
-            if ((len_size == len_arr.length -1) ||
-                (read > MAX_CHUNK_HEADER_SIZE))
-            {
-                throw new IOException ("invalid chunk header");
-            }
-            if (gotCR) {
-                if (ch == LF) {
-                    int l = numeric (len_arr, len_size);
-                    return l;
-                } else {
-                    gotCR = false;
-                }
-                if (!end_of_len) {
-                    len_arr[len_size++] = ch;
-                }
-            } else {
-                if (ch == CR) {
-                    gotCR = true;
-                } else if (ch == ';') {
-                    end_of_len = true;
-                } else if (!end_of_len) {
-                    len_arr[len_size++] = ch;
-                }
-            }
-        }
-        throw new IOException ("end of stream reading chunk header");
-    }
-
-    protected int readImpl (byte[]b, int off, int len) throws IOException {
-        if (eof) {
-            return -1;
-        }
-        if (needToReadHeader) {
-            remaining = readChunkHeader();
-            if (remaining == 0) {
-                eof = true;
-                consumeCRLF();
-                t.getServerImpl().requestCompleted (t.getConnection());
-                return -1;
-            }
-            needToReadHeader = false;
-        }
-        if (len > remaining) {
-            len = remaining;
-        }
-        int n = in.read(b, off, len);
-        if (n > -1) {
-            remaining -= n;
-        }
-        if (remaining == 0) {
-            needToReadHeader = true;
-            consumeCRLF();
-        }
-        return n;
-    }
-
-    private void consumeCRLF () throws IOException {
-        char c;
-        c = (char)in.read(); /* CR */
-        if (c != CR) {
-            throw new IOException ("invalid chunk end");
-        }
-        c = (char)in.read(); /* LF */
-        if (c != LF) {
-            throw new IOException ("invalid chunk end");
-        }
-    }
-
-    /**
-     * returns the number of bytes available to read in the current chunk
-     * which may be less than the real amount, but we'll live with that
-     * limitation for the moment. It only affects potential efficiency
-     * rather than correctness.
-     */
-    public int available () throws IOException {
-        if (eof || closed) {
-            return 0;
-        }
-        int n = in.available();
-        return n > remaining? remaining: n;
-    }
-
-    /* called after the stream is closed to see if bytes
-     * have been read from the underlying channel
-     * and buffered internally
-     */
-    public boolean isDataBuffered () throws IOException {
-        assert eof;
-        return in.available() > 0;
-    }
-
-    public boolean markSupported () {return false;}
-
-    public void mark (int l) {
-    }
-
-    public void reset () throws IOException {
-        throw new IOException ("mark/reset not supported");
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/ChunkedOutputStream.java b/ojluni/src/main/java/sun/net/httpserver/ChunkedOutputStream.java
deleted file mode 100755
index b79dc75..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/ChunkedOutputStream.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (c) 2005, 2008, 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.
- */
-
-package sun.net.httpserver;
-
-import java.io.*;
-import java.net.*;
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-/**
- * a class which allows the caller to write an arbitrary
- * number of bytes to an underlying stream.
- * normal close() does not close the underlying stream
- *
- * This class is buffered.
- *
- * Each chunk is written in one go as :-
- * abcd\r\nxxxxxxxxxxxxxx\r\n
- *
- * abcd is the chunk-size, and xxx is the chunk data
- * If the length is less than 4 chars (in size) then the buffer
- * is written with an offset.
- * Final chunk is:
- * 0\r\n\r\n
- */
-
-class ChunkedOutputStream extends FilterOutputStream
-{
-    private boolean closed = false;
-    /* max. amount of user data per chunk */
-    final static int CHUNK_SIZE = 4096;
-    /* allow 4 bytes for chunk-size plus 4 for CRLFs */
-    final static int OFFSET = 6; /* initial <=4 bytes for len + CRLF */
-    private int pos = OFFSET;
-    private int count = 0;
-    private byte[] buf = new byte [CHUNK_SIZE+OFFSET+2];
-    ExchangeImpl t;
-
-    ChunkedOutputStream (ExchangeImpl t, OutputStream src) {
-        super (src);
-        this.t = t;
-    }
-
-    public void write (int b) throws IOException {
-        if (closed) {
-            throw new StreamClosedException ();
-        }
-        buf [pos++] = (byte)b;
-        count ++;
-        if (count == CHUNK_SIZE) {
-            writeChunk();
-        }
-        assert count < CHUNK_SIZE;
-    }
-
-    public void write (byte[]b, int off, int len) throws IOException {
-        if (closed) {
-            throw new StreamClosedException ();
-        }
-        int remain = CHUNK_SIZE - count;
-        if (len > remain) {
-            System.arraycopy (b,off,buf,pos,remain);
-            count = CHUNK_SIZE;
-            writeChunk();
-            len -= remain;
-            off += remain;
-            while (len >= CHUNK_SIZE) {
-                System.arraycopy (b,off,buf,OFFSET,CHUNK_SIZE);
-                len -= CHUNK_SIZE;
-                off += CHUNK_SIZE;
-                count = CHUNK_SIZE;
-                writeChunk();
-            }
-        }
-        if (len > 0) {
-            System.arraycopy (b,off,buf,pos,len);
-            count += len;
-            pos += len;
-        }
-        if (count == CHUNK_SIZE) {
-            writeChunk();
-        }
-    }
-
-    /**
-     * write out a chunk , and reset the pointers
-     * chunk does not have to be CHUNK_SIZE bytes
-     * count must == number of user bytes (<= CHUNK_SIZE)
-     */
-    private void writeChunk () throws IOException {
-        char[] c = Integer.toHexString (count).toCharArray();
-        int clen = c.length;
-        int startByte = 4 - clen;
-        int i;
-        for (i=0; i<clen; i++) {
-            buf[startByte+i] = (byte)c[i];
-        }
-        buf[startByte + (i++)] = '\r';
-        buf[startByte + (i++)] = '\n';
-        buf[startByte + (i++) + count] = '\r';
-        buf[startByte + (i++) + count] = '\n';
-        out.write (buf, startByte, i+count);
-        count = 0;
-        pos = OFFSET;
-    }
-
-    public void close () throws IOException {
-        if (closed) {
-            return;
-        }
-        flush();
-        try {
-            /* write an empty chunk */
-            writeChunk();
-            out.flush();
-            LeftOverInputStream is = t.getOriginalInputStream();
-            if (!is.isClosed()) {
-                is.close();
-            }
-        /* some clients close the connection before empty chunk is sent */
-        } catch (IOException e) {
-
-        } finally {
-            closed = true;
-        }
-
-        WriteFinishedEvent e = new WriteFinishedEvent (t);
-        t.getHttpContext().getServerImpl().addEvent (e);
-    }
-
-    public void flush () throws IOException {
-        if (closed) {
-            throw new StreamClosedException ();
-        }
-        if (count > 0) {
-            writeChunk();
-        }
-        out.flush();
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/Code.java b/ojluni/src/main/java/sun/net/httpserver/Code.java
deleted file mode 100755
index 032dbb7..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/Code.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-package sun.net.httpserver;
-
-class Code {
-
-    public static final int HTTP_CONTINUE = 100;
-    public static final int HTTP_OK = 200;
-    public static final int HTTP_CREATED = 201;
-    public static final int HTTP_ACCEPTED = 202;
-    public static final int HTTP_NOT_AUTHORITATIVE = 203;
-    public static final int HTTP_NO_CONTENT = 204;
-    public static final int HTTP_RESET = 205;
-    public static final int HTTP_PARTIAL = 206;
-    public static final int HTTP_MULT_CHOICE = 300;
-    public static final int HTTP_MOVED_PERM = 301;
-    public static final int HTTP_MOVED_TEMP = 302;
-    public static final int HTTP_SEE_OTHER = 303;
-    public static final int HTTP_NOT_MODIFIED = 304;
-    public static final int HTTP_USE_PROXY = 305;
-    public static final int HTTP_BAD_REQUEST = 400;
-    public static final int HTTP_UNAUTHORIZED = 401;
-    public static final int HTTP_PAYMENT_REQUIRED = 402;
-    public static final int HTTP_FORBIDDEN = 403;
-    public static final int HTTP_NOT_FOUND = 404;
-    public static final int HTTP_BAD_METHOD = 405;
-    public static final int HTTP_NOT_ACCEPTABLE = 406;
-    public static final int HTTP_PROXY_AUTH = 407;
-    public static final int HTTP_CLIENT_TIMEOUT = 408;
-    public static final int HTTP_CONFLICT = 409;
-    public static final int HTTP_GONE = 410;
-    public static final int HTTP_LENGTH_REQUIRED = 411;
-    public static final int HTTP_PRECON_FAILED = 412;
-    public static final int HTTP_ENTITY_TOO_LARGE = 413;
-    public static final int HTTP_REQ_TOO_LONG = 414;
-    public static final int HTTP_UNSUPPORTED_TYPE = 415;
-    public static final int HTTP_INTERNAL_ERROR = 500;
-    public static final int HTTP_NOT_IMPLEMENTED = 501;
-    public static final int HTTP_BAD_GATEWAY = 502;
-    public static final int HTTP_UNAVAILABLE = 503;
-    public static final int HTTP_GATEWAY_TIMEOUT = 504;
-    public static final int HTTP_VERSION = 505;
-
-    static String msg (int code) {
-
-      switch (code) {
-        case HTTP_OK: return " OK";
-        case HTTP_CONTINUE: return " Continue";
-        case HTTP_CREATED: return " Created";
-        case HTTP_ACCEPTED: return " Accepted";
-        case HTTP_NOT_AUTHORITATIVE: return " Non-Authoritative Information";
-        case HTTP_NO_CONTENT: return " No Content";
-        case HTTP_RESET: return " Reset Content";
-        case HTTP_PARTIAL: return " Partial Content";
-        case HTTP_MULT_CHOICE: return " Multiple Choices";
-        case HTTP_MOVED_PERM: return " Moved Permanently";
-        case HTTP_MOVED_TEMP: return " Temporary Redirect";
-        case HTTP_SEE_OTHER: return " See Other";
-        case HTTP_NOT_MODIFIED: return " Not Modified";
-        case HTTP_USE_PROXY: return " Use Proxy";
-        case HTTP_BAD_REQUEST: return " Bad Request";
-        case HTTP_UNAUTHORIZED: return " Unauthorized" ;
-        case HTTP_PAYMENT_REQUIRED: return " Payment Required";
-        case HTTP_FORBIDDEN: return " Forbidden";
-        case HTTP_NOT_FOUND: return " Not Found";
-        case HTTP_BAD_METHOD: return " Method Not Allowed";
-        case HTTP_NOT_ACCEPTABLE: return " Not Acceptable";
-        case HTTP_PROXY_AUTH: return " Proxy Authentication Required";
-        case HTTP_CLIENT_TIMEOUT: return " Request Time-Out";
-        case HTTP_CONFLICT: return " Conflict";
-        case HTTP_GONE: return " Gone";
-        case HTTP_LENGTH_REQUIRED: return " Length Required";
-        case HTTP_PRECON_FAILED: return " Precondition Failed";
-        case HTTP_ENTITY_TOO_LARGE: return " Request Entity Too Large";
-        case HTTP_REQ_TOO_LONG: return " Request-URI Too Large";
-        case HTTP_UNSUPPORTED_TYPE: return " Unsupported Media Type";
-        case HTTP_INTERNAL_ERROR: return " Internal Server Error";
-        case HTTP_NOT_IMPLEMENTED: return " Not Implemented";
-        case HTTP_BAD_GATEWAY: return " Bad Gateway";
-        case HTTP_UNAVAILABLE: return " Service Unavailable";
-        case HTTP_GATEWAY_TIMEOUT: return " Gateway Timeout";
-        case HTTP_VERSION: return " HTTP Version Not Supported";
-        default: return "";
-      }
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/ContextList.java b/ojluni/src/main/java/sun/net/httpserver/ContextList.java
deleted file mode 100755
index 929e7bb..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/ContextList.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.net.httpserver;
-
-import java.util.*;
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-class ContextList {
-
-    final static int MAX_CONTEXTS = 50;
-
-    LinkedList<HttpContextImpl> list = new LinkedList<HttpContextImpl>();
-
-    public synchronized void add (HttpContextImpl ctx) {
-        assert ctx.getPath() != null;
-        list.add (ctx);
-    }
-
-    public synchronized int size () {
-        return list.size();
-    }
-
-   /* initially contexts are located only by protocol:path.
-    * Context with longest prefix matches (currently case-sensitive)
-    */
-    synchronized HttpContextImpl findContext (String protocol, String path) {
-        return findContext (protocol, path, false);
-    }
-
-    synchronized HttpContextImpl findContext (String protocol, String path, boolean exact) {
-        protocol = protocol.toLowerCase();
-        String longest = "";
-        HttpContextImpl lc = null;
-        for (HttpContextImpl ctx: list) {
-            if (!ctx.getProtocol().equals(protocol)) {
-                continue;
-            }
-            String cpath = ctx.getPath();
-            if (exact && !cpath.equals (path)) {
-                continue;
-            } else if (!exact && !path.startsWith(cpath)) {
-                continue;
-            }
-            if (cpath.length() > longest.length()) {
-                longest = cpath;
-                lc = ctx;
-            }
-        }
-        return lc;
-    }
-
-    public synchronized void remove (String protocol, String path)
-        throws IllegalArgumentException
-    {
-        HttpContextImpl ctx = findContext (protocol, path, true);
-        if (ctx == null) {
-            throw new IllegalArgumentException ("cannot remove element from list");
-        }
-        list.remove (ctx);
-    }
-
-    public synchronized void remove (HttpContextImpl context)
-        throws IllegalArgumentException
-    {
-        for (HttpContextImpl ctx: list) {
-            if (ctx.equals (context)) {
-                list.remove (ctx);
-                return;
-            }
-        }
-        throw new IllegalArgumentException ("no such context in list");
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/DefaultHttpServerProvider.java b/ojluni/src/main/java/sun/net/httpserver/DefaultHttpServerProvider.java
deleted file mode 100755
index fe746be..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/DefaultHttpServerProvider.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.net.httpserver;
-
-import java.net.*;
-import java.io.*;
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-public class DefaultHttpServerProvider extends HttpServerProvider {
-    public HttpServer createHttpServer (InetSocketAddress addr, int backlog) throws IOException {
-        return new HttpServerImpl (addr, backlog);
-    }
-
-    public HttpsServer createHttpsServer (InetSocketAddress addr, int backlog) throws IOException {
-        return new HttpsServerImpl (addr, backlog);
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/Event.java b/ojluni/src/main/java/sun/net/httpserver/Event.java
deleted file mode 100755
index f019ede..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/Event.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2005, 2010, 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.
- */
-
-package sun.net.httpserver;
-
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-class Event {
-
-    ExchangeImpl exchange;
-
-    protected Event (ExchangeImpl t) {
-        this.exchange = t;
-    }
-}
-
-class WriteFinishedEvent extends Event {
-    WriteFinishedEvent (ExchangeImpl t) {
-        super (t);
-        assert !t.writefinished;
-        t.writefinished = true;
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/ExchangeImpl.java b/ojluni/src/main/java/sun/net/httpserver/ExchangeImpl.java
deleted file mode 100755
index eac2bc3..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/ExchangeImpl.java
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
- * Copyright (c) 2005, 2010, 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.
- */
-
-package sun.net.httpserver;
-
-import java.io.*;
-import java.net.*;
-import javax.net.ssl.*;
-import java.util.*;
-import java.util.logging.Logger;
-import java.text.*;
-import com.sun.net.httpserver.*;
-
-class ExchangeImpl {
-
-    Headers reqHdrs, rspHdrs;
-    Request req;
-    String method;
-    boolean writefinished;
-    URI uri;
-    HttpConnection connection;
-    long reqContentLen;
-    long rspContentLen;
-    /* raw streams which access the socket directly */
-    InputStream ris;
-    OutputStream ros;
-    Thread thread;
-    /* close the underlying connection when this exchange finished */
-    boolean close;
-    boolean closed;
-    boolean http10 = false;
-
-    /* for formatting the Date: header */
-    private static final String pattern = "EEE, dd MMM yyyy HH:mm:ss zzz";
-    private static final TimeZone gmtTZ = TimeZone.getTimeZone("GMT");
-    private static final ThreadLocal<DateFormat> dateFormat =
-         new ThreadLocal<DateFormat>() {
-             @Override protected DateFormat initialValue() {
-                 DateFormat df = new SimpleDateFormat(pattern, Locale.US);
-                 df.setTimeZone(gmtTZ);
-                 return df;
-         }
-     };
-
-    private static final String HEAD = "HEAD";
-
-    /* streams which take care of the HTTP protocol framing
-     * and are passed up to higher layers
-     */
-    InputStream uis;
-    OutputStream uos;
-    LeftOverInputStream uis_orig; // uis may have be a user supplied wrapper
-    PlaceholderOutputStream uos_orig;
-
-    boolean sentHeaders; /* true after response headers sent */
-    Map<String,Object> attributes;
-    int rcode = -1;
-    HttpPrincipal principal;
-    ServerImpl server;
-
-    ExchangeImpl (
-        String m, URI u, Request req, long len, HttpConnection connection
-    ) throws IOException {
-        this.req = req;
-        this.reqHdrs = req.headers();
-        this.rspHdrs = new Headers();
-        this.method = m;
-        this.uri = u;
-        this.connection = connection;
-        this.reqContentLen = len;
-        /* ros only used for headers, body written directly to stream */
-        this.ros = req.outputStream();
-        this.ris = req.inputStream();
-        server = getServerImpl();
-        server.startExchange();
-    }
-
-    public Headers getRequestHeaders () {
-        return new UnmodifiableHeaders (reqHdrs);
-    }
-
-    public Headers getResponseHeaders () {
-        return rspHdrs;
-    }
-
-    public URI getRequestURI () {
-        return uri;
-    }
-
-    public String getRequestMethod (){
-        return method;
-    }
-
-    public HttpContextImpl getHttpContext (){
-        return connection.getHttpContext();
-    }
-
-    private boolean isHeadRequest() {
-        return HEAD.equals(getRequestMethod());
-    }
-
-    public void close () {
-        if (closed) {
-            return;
-        }
-        closed = true;
-
-        /* close the underlying connection if,
-         * a) the streams not set up yet, no response can be sent, or
-         * b) if the wrapper output stream is not set up, or
-         * c) if the close of the input/outpu stream fails
-         */
-        try {
-            if (uis_orig == null || uos == null) {
-                connection.close();
-                return;
-            }
-            if (!uos_orig.isWrapped()) {
-                connection.close();
-                return;
-            }
-            if (!uis_orig.isClosed()) {
-                uis_orig.close();
-            }
-            uos.close();
-        } catch (IOException e) {
-            connection.close();
-        }
-    }
-
-    public InputStream getRequestBody () {
-        if (uis != null) {
-            return uis;
-        }
-        if (reqContentLen == -1L) {
-            uis_orig = new ChunkedInputStream (this, ris);
-            uis = uis_orig;
-        } else {
-            uis_orig = new FixedLengthInputStream (this, ris, reqContentLen);
-            uis = uis_orig;
-        }
-        return uis;
-    }
-
-    LeftOverInputStream getOriginalInputStream () {
-        return uis_orig;
-    }
-
-    public int getResponseCode () {
-        return rcode;
-    }
-
-    public OutputStream getResponseBody () {
-        /* TODO. Change spec to remove restriction below. Filters
-         * cannot work with this restriction
-         *
-         * if (!sentHeaders) {
-         *    throw new IllegalStateException ("headers not sent");
-         * }
-         */
-        if (uos == null) {
-            uos_orig = new PlaceholderOutputStream (null);
-            uos = uos_orig;
-        }
-        return uos;
-    }
-
-
-    /* returns the place holder stream, which is the stream
-     * returned from the 1st call to getResponseBody()
-     * The "real" ouputstream is then placed inside this
-     */
-    PlaceholderOutputStream getPlaceholderResponseBody () {
-        getResponseBody();
-        return uos_orig;
-    }
-
-    public void sendResponseHeaders (int rCode, long contentLen)
-    throws IOException
-    {
-        if (sentHeaders) {
-            throw new IOException ("headers already sent");
-        }
-        this.rcode = rCode;
-        String statusLine = "HTTP/1.1 "+rCode+Code.msg(rCode)+"\r\n";
-        OutputStream tmpout = new BufferedOutputStream (ros);
-        PlaceholderOutputStream o = getPlaceholderResponseBody();
-        tmpout.write (bytes(statusLine, 0), 0, statusLine.length());
-        boolean noContentToSend = false; // assume there is content
-        rspHdrs.set ("Date", dateFormat.get().format (new Date()));
-
-        /* check for response type that is not allowed to send a body */
-
-        if ((rCode>=100 && rCode <200) /* informational */
-            ||(rCode == 204)           /* no content */
-            ||(rCode == 304))          /* not modified */
-        {
-            if (contentLen != -1) {
-                Logger logger = server.getLogger();
-                String msg = "sendResponseHeaders: rCode = "+ rCode
-                    + ": forcing contentLen = -1";
-                logger.warning (msg);
-            }
-            contentLen = -1;
-        }
-
-        if (isHeadRequest()) {
-            /* HEAD requests should not set a content length by passing it
-             * through this API, but should instead manually set the required
-             * headers.*/
-            if (contentLen >= 0) {
-                final Logger logger = server.getLogger();
-                String msg =
-                    "sendResponseHeaders: being invoked with a content length for a HEAD request";
-                logger.warning (msg);
-            }
-            noContentToSend = true;
-            contentLen = 0;
-        } else { /* not a HEAD request */
-            if (contentLen == 0) {
-                if (http10) {
-                    o.setWrappedStream (new UndefLengthOutputStream (this, ros));
-                    close = true;
-                } else {
-                    rspHdrs.set ("Transfer-encoding", "chunked");
-                    o.setWrappedStream (new ChunkedOutputStream (this, ros));
-                }
-            } else {
-                if (contentLen == -1) {
-                    noContentToSend = true;
-                    contentLen = 0;
-                }
-                rspHdrs.set("Content-length", Long.toString(contentLen));
-                o.setWrappedStream (new FixedLengthOutputStream (this, ros, contentLen));
-            }
-        }
-        write (rspHdrs, tmpout);
-        this.rspContentLen = contentLen;
-        tmpout.flush() ;
-        tmpout = null;
-        sentHeaders = true;
-        if (noContentToSend) {
-            WriteFinishedEvent e = new WriteFinishedEvent (this);
-            server.addEvent (e);
-            closed = true;
-        }
-        server.logReply (rCode, req.requestLine(), null);
-    }
-
-    void write (Headers map, OutputStream os) throws IOException {
-        Set<Map.Entry<String,List<String>>> entries = map.entrySet();
-        for (Map.Entry<String,List<String>> entry : entries) {
-            String key = entry.getKey();
-            byte[] buf;
-            List<String> values = entry.getValue();
-            for (String val : values) {
-                int i = key.length();
-                buf = bytes (key, 2);
-                buf[i++] = ':';
-                buf[i++] = ' ';
-                os.write (buf, 0, i);
-                buf = bytes (val, 2);
-                i = val.length();
-                buf[i++] = '\r';
-                buf[i++] = '\n';
-                os.write (buf, 0, i);
-            }
-        }
-        os.write ('\r');
-        os.write ('\n');
-    }
-
-    private byte[] rspbuf = new byte [128]; // used by bytes()
-
-    /**
-     * convert string to byte[], using rspbuf
-     * Make sure that at least "extra" bytes are free at end
-     * of rspbuf. Reallocate rspbuf if not big enough.
-     * caller must check return value to see if rspbuf moved
-     */
-    private byte[] bytes (String s, int extra) {
-        int slen = s.length();
-        if (slen+extra > rspbuf.length) {
-            int diff = slen + extra - rspbuf.length;
-            rspbuf = new byte [2* (rspbuf.length + diff)];
-        }
-        char c[] = s.toCharArray();
-        for (int i=0; i<c.length; i++) {
-            rspbuf[i] = (byte)c[i];
-        }
-        return rspbuf;
-    }
-
-    public InetSocketAddress getRemoteAddress (){
-        Socket s = connection.getChannel().socket();
-        InetAddress ia = s.getInetAddress();
-        int port = s.getPort();
-        return new InetSocketAddress (ia, port);
-    }
-
-    public InetSocketAddress getLocalAddress (){
-        Socket s = connection.getChannel().socket();
-        InetAddress ia = s.getLocalAddress();
-        int port = s.getLocalPort();
-        return new InetSocketAddress (ia, port);
-    }
-
-    public String getProtocol (){
-        String reqline = req.requestLine();
-        int index = reqline.lastIndexOf (' ');
-        return reqline.substring (index+1);
-    }
-
-    public SSLSession getSSLSession () {
-        SSLEngine e = connection.getSSLEngine();
-        if (e == null) {
-            return null;
-        }
-        return e.getSession();
-    }
-
-    public Object getAttribute (String name) {
-        if (name == null) {
-            throw new NullPointerException ("null name parameter");
-        }
-        if (attributes == null) {
-            attributes = getHttpContext().getAttributes();
-        }
-        return attributes.get (name);
-    }
-
-    public void setAttribute (String name, Object value) {
-        if (name == null) {
-            throw new NullPointerException ("null name parameter");
-        }
-        if (attributes == null) {
-            attributes = getHttpContext().getAttributes();
-        }
-        attributes.put (name, value);
-    }
-
-    public void setStreams (InputStream i, OutputStream o) {
-        assert uis != null;
-        if (i != null) {
-            uis = i;
-        }
-        if (o != null) {
-            uos = o;
-        }
-    }
-
-    /**
-     * PP
-     */
-    HttpConnection getConnection () {
-        return connection;
-    }
-
-    ServerImpl getServerImpl () {
-        return getHttpContext().getServerImpl();
-    }
-
-    public HttpPrincipal getPrincipal () {
-        return principal;
-    }
-
-    void setPrincipal (HttpPrincipal principal) {
-        this.principal = principal;
-    }
-
-    static ExchangeImpl get (HttpExchange t) {
-        if (t instanceof HttpExchangeImpl) {
-            return ((HttpExchangeImpl)t).getExchangeImpl();
-        } else {
-            assert t instanceof HttpsExchangeImpl;
-            return ((HttpsExchangeImpl)t).getExchangeImpl();
-        }
-    }
-}
-
-/**
- * An OutputStream which wraps another stream
- * which is supplied either at creation time, or sometime later.
- * If a caller/user tries to write to this stream before
- * the wrapped stream has been provided, then an IOException will
- * be thrown.
- */
-class PlaceholderOutputStream extends java.io.OutputStream {
-
-    OutputStream wrapped;
-
-    PlaceholderOutputStream (OutputStream os) {
-        wrapped = os;
-    }
-
-    void setWrappedStream (OutputStream os) {
-        wrapped = os;
-    }
-
-    boolean isWrapped () {
-        return wrapped != null;
-    }
-
-    private void checkWrap () throws IOException {
-        if (wrapped == null) {
-            throw new IOException ("response headers not sent yet");
-        }
-    }
-
-    public void write(int b) throws IOException {
-        checkWrap();
-        wrapped.write (b);
-    }
-
-    public void write(byte b[]) throws IOException {
-        checkWrap();
-        wrapped.write (b);
-    }
-
-    public void write(byte b[], int off, int len) throws IOException {
-        checkWrap();
-        wrapped.write (b, off, len);
-    }
-
-    public void flush() throws IOException {
-        checkWrap();
-        wrapped.flush();
-    }
-
-    public void close() throws IOException {
-        checkWrap();
-        wrapped.close();
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/FixedLengthInputStream.java b/ojluni/src/main/java/sun/net/httpserver/FixedLengthInputStream.java
deleted file mode 100755
index 4d80992..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/FixedLengthInputStream.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2005, 2010, 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.
- */
-
-package sun.net.httpserver;
-
-import java.io.*;
-import java.net.*;
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-/**
- * a class which allows the caller to read up to a defined
- * number of bytes off an underlying stream
- * close() does not close the underlying stream
- */
-
-class FixedLengthInputStream extends LeftOverInputStream {
-    private long remaining;
-
-    FixedLengthInputStream (ExchangeImpl t, InputStream src, long len) {
-        super (t, src);
-        this.remaining = len;
-    }
-
-    protected int readImpl (byte[]b, int off, int len) throws IOException {
-
-        eof = (remaining == 0L);
-        if (eof) {
-            return -1;
-        }
-        if (len > remaining) {
-            len = (int)remaining;
-        }
-        int n = in.read(b, off, len);
-        if (n > -1) {
-            remaining -= n;
-            if (remaining == 0) {
-                t.getServerImpl().requestCompleted (t.getConnection());
-            }
-        }
-        return n;
-    }
-
-    public int available () throws IOException {
-        if (eof) {
-            return 0;
-        }
-        int n = in.available();
-        return n < remaining? n: (int)remaining;
-    }
-
-    public boolean markSupported () {return false;}
-
-    public void mark (int l) {
-    }
-
-    public void reset () throws IOException {
-        throw new IOException ("mark/reset not supported");
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/FixedLengthOutputStream.java b/ojluni/src/main/java/sun/net/httpserver/FixedLengthOutputStream.java
deleted file mode 100755
index 8b43164..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/FixedLengthOutputStream.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-package sun.net.httpserver;
-
-import java.io.*;
-import java.net.*;
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-/**
- * a class which allows the caller to write up to a defined
- * number of bytes to an underlying stream. The caller *must*
- * write the pre-defined number or else an exception will be thrown
- * and the whole request aborted.
- * normal close() does not close the underlying stream
- */
-
-class FixedLengthOutputStream extends FilterOutputStream
-{
-    private long remaining;
-    private boolean eof = false;
-    private boolean closed = false;
-    ExchangeImpl t;
-
-    FixedLengthOutputStream (ExchangeImpl t, OutputStream src, long len) {
-        super (src);
-        this.t = t;
-        this.remaining = len;
-    }
-
-    public void write (int b) throws IOException {
-        if (closed) {
-            throw new IOException ("stream closed");
-        }
-        eof = (remaining == 0);
-        if (eof) {
-            throw new StreamClosedException();
-        }
-        out.write(b);
-        remaining --;
-    }
-
-    public void write (byte[]b, int off, int len) throws IOException {
-        if (closed) {
-            throw new IOException ("stream closed");
-        }
-        eof = (remaining == 0);
-        if (eof) {
-            throw new StreamClosedException();
-        }
-        if (len > remaining) {
-            // stream is still open, caller can retry
-            throw new IOException ("too many bytes to write to stream");
-        }
-        out.write(b, off, len);
-        remaining -= len;
-    }
-
-    public void close () throws IOException {
-        if (closed) {
-            return;
-        }
-        closed = true;
-        if (remaining > 0) {
-            t.close();
-            throw new IOException ("insufficient bytes written to stream");
-        }
-        flush();
-        eof = true;
-        LeftOverInputStream is = t.getOriginalInputStream();
-        if (!is.isClosed()) {
-            try {
-                is.close();
-            } catch (IOException e) {}
-        }
-        WriteFinishedEvent e = new WriteFinishedEvent (t);
-        t.getHttpContext().getServerImpl().addEvent (e);
-    }
-
-    // flush is a pass-through
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/HttpConnection.java b/ojluni/src/main/java/sun/net/httpserver/HttpConnection.java
deleted file mode 100755
index c9f31ef..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/HttpConnection.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (c) 2005, 2010, 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.
- */
-
-package sun.net.httpserver;
-
-import java.io.*;
-import javax.net.ssl.*;
-import java.nio.channels.*;
-import java.util.logging.Logger;
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-/**
- * encapsulates all the connection specific state for a HTTP/S connection
- * one of these is hung from the selector attachment and is used to locate
- * everything from that.
- */
-class HttpConnection {
-
-    HttpContextImpl context;
-    SSLEngine engine;
-    SSLContext sslContext;
-    SSLStreams sslStreams;
-
-    /* high level streams returned to application */
-    InputStream i;
-
-    /* low level stream that sits directly over channel */
-    InputStream raw;
-    OutputStream rawout;
-
-    SocketChannel chan;
-    SelectionKey selectionKey;
-    String protocol;
-    long time;
-    volatile long creationTime; // time this connection was created
-    volatile long rspStartedTime; // time we started writing the response
-    int remaining;
-    boolean closed = false;
-    Logger logger;
-
-    public enum State {IDLE, REQUEST, RESPONSE};
-    volatile State state;
-
-    public String toString() {
-        String s = null;
-        if (chan != null) {
-            s = chan.toString();
-        }
-        return s;
-    }
-
-    HttpConnection () {
-    }
-
-    void setChannel (SocketChannel c) {
-        chan = c;
-    }
-
-    void setContext (HttpContextImpl ctx) {
-        context = ctx;
-    }
-
-    State getState() {
-        return state;
-    }
-
-    void setState (State s) {
-        state = s;
-    }
-
-    void setParameters (
-        InputStream in, OutputStream rawout, SocketChannel chan,
-        SSLEngine engine, SSLStreams sslStreams, SSLContext sslContext, String protocol,
-        HttpContextImpl context, InputStream raw
-    )
-    {
-        this.context = context;
-        this.i = in;
-        this.rawout = rawout;
-        this.raw = raw;
-        this.protocol = protocol;
-        this.engine = engine;
-        this.chan = chan;
-        this.sslContext = sslContext;
-        this.sslStreams = sslStreams;
-        this.logger = context.getLogger();
-    }
-
-    SocketChannel getChannel () {
-        return chan;
-    }
-
-    synchronized void close () {
-        if (closed) {
-            return;
-        }
-        closed = true;
-        if (logger != null && chan != null) {
-            logger.finest ("Closing connection: " + chan.toString());
-        }
-
-        if (!chan.isOpen()) {
-            ServerImpl.dprint ("Channel already closed");
-            return;
-        }
-        try {
-            /* need to ensure temporary selectors are closed */
-            if (raw != null) {
-                raw.close();
-            }
-        } catch (IOException e) {
-            ServerImpl.dprint (e);
-        }
-        try {
-            if (rawout != null) {
-                rawout.close();
-            }
-        } catch (IOException e) {
-            ServerImpl.dprint (e);
-        }
-        try {
-            if (sslStreams != null) {
-                sslStreams.close();
-            }
-        } catch (IOException e) {
-            ServerImpl.dprint (e);
-        }
-        try {
-            chan.close();
-        } catch (IOException e) {
-            ServerImpl.dprint (e);
-        }
-    }
-
-    /* remaining is the number of bytes left on the lowest level inputstream
-     * after the exchange is finished
-     */
-    void setRemaining (int r) {
-        remaining = r;
-    }
-
-    int getRemaining () {
-        return remaining;
-    }
-
-    SelectionKey getSelectionKey () {
-        return selectionKey;
-    }
-
-    InputStream getInputStream () {
-            return i;
-    }
-
-    OutputStream getRawOutputStream () {
-            return rawout;
-    }
-
-    String getProtocol () {
-            return protocol;
-    }
-
-    SSLEngine getSSLEngine () {
-            return engine;
-    }
-
-    SSLContext getSSLContext () {
-            return sslContext;
-    }
-
-    HttpContextImpl getHttpContext () {
-            return context;
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/HttpContextImpl.java b/ojluni/src/main/java/sun/net/httpserver/HttpContextImpl.java
deleted file mode 100755
index c7e7095..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/HttpContextImpl.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-package sun.net.httpserver;
-import java.io.*;
-import java.util.*;
-import java.util.logging.Logger;
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-/**
- * HttpContext represents a mapping between a protocol (http or https) together with a root URI path
- * to a {@link HttpHandler} which is invoked to handle requests destined
- * for the protocol/path on the associated HttpServer.
- * <p>
- * HttpContext instances are created by {@link HttpServer#createContext(String,String,HttpHandler,Object)}
- * <p>
- */
-class HttpContextImpl extends HttpContext {
-
-    private String path;
-    private String protocol;
-    private HttpHandler handler;
-    private Map<String,Object> attributes = new HashMap<String,Object>();
-    private ServerImpl server;
-    /* system filters, not visible to applications */
-    private LinkedList<Filter> sfilters = new LinkedList<Filter>();
-    /* user filters, set by applications */
-    private LinkedList<Filter> ufilters = new LinkedList<Filter>();
-    private Authenticator authenticator;
-    private AuthFilter authfilter;
-
-    /**
-     * constructor is package private.
-     */
-    HttpContextImpl (String protocol, String path, HttpHandler cb, ServerImpl server) {
-        if (path == null || protocol == null || path.length() < 1 || path.charAt(0) != '/') {
-            throw new IllegalArgumentException ("Illegal value for path or protocol");
-        }
-        this.protocol = protocol.toLowerCase();
-        this.path = path;
-        if (!this.protocol.equals ("http") && !this.protocol.equals ("https")) {
-            throw new IllegalArgumentException ("Illegal value for protocol");
-        }
-        this.handler = cb;
-        this.server = server;
-        authfilter = new AuthFilter(null);
-        sfilters.add (authfilter);
-    }
-
-    /**
-     * returns the handler for this context
-     * @return the HttpHandler for this context
-     */
-    public HttpHandler getHandler () {
-        return handler;
-    }
-
-    public void setHandler (HttpHandler h) {
-        if (h == null) {
-            throw new NullPointerException ("Null handler parameter");
-        }
-        if (handler != null) {
-            throw new IllegalArgumentException ("handler already set");
-        }
-        handler = h;
-    }
-
-    /**
-     * returns the path this context was created with
-     * @return this context's path
-     */
-    public String getPath() {
-        return path;
-    }
-
-    /**
-     * returns the server this context was created with
-     * @return this context's server
-     */
-    public HttpServer getServer () {
-        return server.getWrapper();
-    }
-
-    ServerImpl getServerImpl () {
-        return server;
-    }
-
-    /**
-     * returns the protocol this context was created with
-     * @return this context's path
-     */
-    public String getProtocol() {
-        return protocol;
-    }
-
-    /**
-     * returns a mutable Map, which can be used to pass
-     * configuration and other data to Filter modules
-     * and to the context's exchange handler.
-     * <p>
-     * Every attribute stored in this Map will be visible to
-     * every HttpExchange processed by this context
-     */
-    public Map<String,Object> getAttributes() {
-        return attributes;
-    }
-
-    public List<Filter> getFilters () {
-        return ufilters;
-    }
-
-    List<Filter> getSystemFilters () {
-        return sfilters;
-    }
-
-    public Authenticator setAuthenticator (Authenticator auth) {
-        Authenticator old = authenticator;
-        authenticator = auth;
-        authfilter.setAuthenticator (auth);
-        return old;
-    }
-
-    public Authenticator getAuthenticator () {
-        return authenticator;
-    }
-    Logger getLogger () {
-        return server.getLogger();
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/HttpError.java b/ojluni/src/main/java/sun/net/httpserver/HttpError.java
deleted file mode 100755
index de9dfba..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/HttpError.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2005, 2008, 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.
- */
-
-package sun.net.httpserver;
-
-/**
- * A Http error
- */
-class HttpError extends RuntimeException {
-    private static final long serialVersionUID = 8769596371344178179L;
-
-    public HttpError (String msg) {
-        super (msg);
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/HttpExchangeImpl.java b/ojluni/src/main/java/sun/net/httpserver/HttpExchangeImpl.java
deleted file mode 100755
index daeaea8..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/HttpExchangeImpl.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-package sun.net.httpserver;
-
-import java.io.*;
-import java.nio.*;
-import java.nio.channels.*;
-import java.net.*;
-import javax.net.ssl.*;
-import java.util.*;
-import sun.net.www.MessageHeader;
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-class HttpExchangeImpl extends HttpExchange {
-
-    ExchangeImpl impl;
-
-    HttpExchangeImpl (ExchangeImpl impl) {
-        this.impl = impl;
-    }
-
-    public Headers getRequestHeaders () {
-        return impl.getRequestHeaders();
-    }
-
-    public Headers getResponseHeaders () {
-        return impl.getResponseHeaders();
-    }
-
-    public URI getRequestURI () {
-        return impl.getRequestURI();
-    }
-
-    public String getRequestMethod (){
-        return impl.getRequestMethod();
-    }
-
-    public HttpContextImpl getHttpContext (){
-        return impl.getHttpContext();
-    }
-
-    public void close () {
-        impl.close();
-    }
-
-    public InputStream getRequestBody () {
-        return impl.getRequestBody();
-    }
-
-    public int getResponseCode () {
-        return impl.getResponseCode();
-    }
-
-    public OutputStream getResponseBody () {
-        return impl.getResponseBody();
-    }
-
-
-    public void sendResponseHeaders (int rCode, long contentLen)
-    throws IOException
-    {
-        impl.sendResponseHeaders (rCode, contentLen);
-    }
-
-    public InetSocketAddress getRemoteAddress (){
-        return impl.getRemoteAddress();
-    }
-
-    public InetSocketAddress getLocalAddress (){
-        return impl.getLocalAddress();
-    }
-
-    public String getProtocol (){
-        return impl.getProtocol();
-    }
-
-    public Object getAttribute (String name) {
-        return impl.getAttribute (name);
-    }
-
-    public void setAttribute (String name, Object value) {
-        impl.setAttribute (name, value);
-    }
-
-    public void setStreams (InputStream i, OutputStream o) {
-        impl.setStreams (i, o);
-    }
-
-    public HttpPrincipal getPrincipal () {
-        return impl.getPrincipal();
-    }
-
-    ExchangeImpl getExchangeImpl () {
-        return impl;
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/HttpServerImpl.java b/ojluni/src/main/java/sun/net/httpserver/HttpServerImpl.java
deleted file mode 100755
index e6e0ad8..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/HttpServerImpl.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.net.httpserver;
-
-import java.net.*;
-import java.io.*;
-import java.nio.*;
-import java.security.*;
-import java.nio.channels.*;
-import java.util.*;
-import java.util.concurrent.*;
-import javax.net.ssl.*;
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-public class HttpServerImpl extends HttpServer {
-
-    ServerImpl server;
-
-    HttpServerImpl () throws IOException {
-        this (new InetSocketAddress(80), 0);
-    }
-
-    HttpServerImpl (
-        InetSocketAddress addr, int backlog
-    ) throws IOException {
-        server = new ServerImpl (this, "http", addr, backlog);
-    }
-
-    public void bind (InetSocketAddress addr, int backlog) throws IOException {
-        server.bind (addr, backlog);
-    }
-
-    public void start () {
-        server.start();
-    }
-
-    public void setExecutor (Executor executor) {
-        server.setExecutor(executor);
-    }
-
-    public Executor getExecutor () {
-        return server.getExecutor();
-    }
-
-    public void stop (int delay) {
-        server.stop (delay);
-    }
-
-    public HttpContextImpl createContext (String path, HttpHandler handler) {
-        return server.createContext (path, handler);
-    }
-
-    public HttpContextImpl createContext (String path) {
-        return server.createContext (path);
-    }
-
-    public void removeContext (String path) throws IllegalArgumentException {
-        server.removeContext (path);
-    }
-
-    public void removeContext (HttpContext context) throws IllegalArgumentException {
-        server.removeContext (context);
-    }
-
-    public InetSocketAddress getAddress() {
-        return server.getAddress();
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/HttpsExchangeImpl.java b/ojluni/src/main/java/sun/net/httpserver/HttpsExchangeImpl.java
deleted file mode 100755
index 7b38de5..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/HttpsExchangeImpl.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-package sun.net.httpserver;
-
-import java.io.*;
-import java.nio.*;
-import java.nio.channels.*;
-import java.net.*;
-import javax.net.ssl.*;
-import java.util.*;
-import sun.net.www.MessageHeader;
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-class HttpsExchangeImpl extends HttpsExchange {
-
-    ExchangeImpl impl;
-
-    HttpsExchangeImpl (ExchangeImpl impl) throws IOException {
-        this.impl = impl;
-    }
-
-    public Headers getRequestHeaders () {
-        return impl.getRequestHeaders();
-    }
-
-    public Headers getResponseHeaders () {
-        return impl.getResponseHeaders();
-    }
-
-    public URI getRequestURI () {
-        return impl.getRequestURI();
-    }
-
-    public String getRequestMethod (){
-        return impl.getRequestMethod();
-    }
-
-    public HttpContextImpl getHttpContext (){
-        return impl.getHttpContext();
-    }
-
-    public void close () {
-        impl.close();
-    }
-
-    public InputStream getRequestBody () {
-        return impl.getRequestBody();
-    }
-
-    public int getResponseCode () {
-        return impl.getResponseCode();
-    }
-
-    public OutputStream getResponseBody () {
-        return impl.getResponseBody();
-    }
-
-
-    public void sendResponseHeaders (int rCode, long contentLen)
-    throws IOException
-    {
-        impl.sendResponseHeaders (rCode, contentLen);
-    }
-
-    public InetSocketAddress getRemoteAddress (){
-        return impl.getRemoteAddress();
-    }
-
-    public InetSocketAddress getLocalAddress (){
-        return impl.getLocalAddress();
-    }
-
-    public String getProtocol (){
-        return impl.getProtocol();
-    }
-
-    public SSLSession getSSLSession () {
-        return impl.getSSLSession ();
-    }
-
-    public Object getAttribute (String name) {
-        return impl.getAttribute (name);
-    }
-
-    public void setAttribute (String name, Object value) {
-        impl.setAttribute (name, value);
-    }
-
-    public void setStreams (InputStream i, OutputStream o) {
-        impl.setStreams (i, o);
-    }
-
-    public HttpPrincipal getPrincipal () {
-        return impl.getPrincipal();
-    }
-
-    ExchangeImpl getExchangeImpl () {
-        return impl;
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/HttpsServerImpl.java b/ojluni/src/main/java/sun/net/httpserver/HttpsServerImpl.java
deleted file mode 100755
index f6b94db..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/HttpsServerImpl.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.net.httpserver;
-
-import java.net.*;
-import java.io.*;
-import java.nio.*;
-import java.security.*;
-import java.nio.channels.*;
-import java.util.*;
-import java.util.concurrent.*;
-import javax.net.ssl.*;
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-public class HttpsServerImpl extends HttpsServer {
-
-    ServerImpl server;
-
-    HttpsServerImpl () throws IOException {
-        this (new InetSocketAddress(443), 0);
-    }
-
-    HttpsServerImpl (
-        InetSocketAddress addr, int backlog
-    ) throws IOException {
-        server = new ServerImpl (this, "https", addr, backlog);
-    }
-
-    public void setHttpsConfigurator (HttpsConfigurator config) {
-        server.setHttpsConfigurator (config);
-    }
-
-    public HttpsConfigurator getHttpsConfigurator () {
-        return server.getHttpsConfigurator();
-    }
-
-    public void bind (InetSocketAddress addr, int backlog) throws IOException {
-        server.bind (addr, backlog);
-    }
-
-    public void start () {
-        server.start();
-    }
-
-    public void setExecutor (Executor executor) {
-        server.setExecutor(executor);
-    }
-
-    public Executor getExecutor () {
-        return server.getExecutor();
-    }
-
-    public void stop (int delay) {
-        server.stop (delay);
-    }
-
-    public HttpContextImpl createContext (String path, HttpHandler handler) {
-        return server.createContext (path, handler);
-    }
-
-    public HttpContextImpl createContext (String path) {
-        return server.createContext (path);
-    }
-
-    public void removeContext (String path) throws IllegalArgumentException {
-        server.removeContext (path);
-    }
-
-    public void removeContext (HttpContext context) throws IllegalArgumentException {
-        server.removeContext (context);
-    }
-
-    public InetSocketAddress getAddress() {
-        return server.getAddress();
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/LeftOverInputStream.java b/ojluni/src/main/java/sun/net/httpserver/LeftOverInputStream.java
deleted file mode 100755
index c715d72..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/LeftOverInputStream.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, 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.
- */
-
-package sun.net.httpserver;
-
-import java.io.*;
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-/**
- * a (filter) input stream which can tell us if bytes are "left over"
- * on the underlying stream which can be read (without blocking)
- * on another instance of this class.
- *
- * The class can also report if all bytes "expected" to be read
- * were read, by the time close() was called. In that case,
- * bytes may be drained to consume them (by calling drain() ).
- *
- * isEOF() returns true, when all expected bytes have been read
- */
-abstract class LeftOverInputStream extends FilterInputStream {
-    ExchangeImpl t;
-    ServerImpl server;
-    protected boolean closed = false;
-    protected boolean eof = false;
-    byte[] one = new byte [1];
-
-    public LeftOverInputStream (ExchangeImpl t, InputStream src) {
-        super (src);
-        this.t = t;
-        this.server = t.getServerImpl();
-    }
-    /**
-     * if bytes are left over buffered on *the UNDERLYING* stream
-     */
-    public boolean isDataBuffered () throws IOException {
-        assert eof;
-        return super.available() > 0;
-    }
-
-    public void close () throws IOException {
-        if (closed) {
-            return;
-        }
-        closed = true;
-        if (!eof) {
-            eof = drain (ServerConfig.getDrainAmount());
-        }
-    }
-
-    public boolean isClosed () {
-        return closed;
-    }
-
-    public boolean isEOF () {
-        return eof;
-    }
-
-    protected abstract int readImpl (byte[]b, int off, int len) throws IOException;
-
-    public synchronized int read () throws IOException {
-        if (closed) {
-            throw new IOException ("Stream is closed");
-        }
-        int c = readImpl (one, 0, 1);
-        if (c == -1 || c == 0) {
-            return c;
-        } else {
-            return one[0] & 0xFF;
-        }
-    }
-
-    public synchronized int read (byte[]b, int off, int len) throws IOException {
-        if (closed) {
-            throw new IOException ("Stream is closed");
-        }
-        return readImpl (b, off, len);
-    }
-
-    /**
-     * read and discard up to l bytes or "eof" occurs,
-     * (whichever is first). Then return true if the stream
-     * is at eof (ie. all bytes were read) or false if not
-     * (still bytes to be read)
-     */
-    public boolean drain (long l) throws IOException {
-        int bufSize = 2048;
-        byte[] db = new byte [bufSize];
-        while (l > 0) {
-            long len = readImpl (db, 0, bufSize);
-            if (len == -1) {
-                eof = true;
-                return true;
-            } else {
-                l = l - len;
-            }
-        }
-        return false;
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/Request.java b/ojluni/src/main/java/sun/net/httpserver/Request.java
deleted file mode 100755
index 7e8fd90..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/Request.java
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
- * Copyright (c) 2005, 2010, 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.
- */
-
-package sun.net.httpserver;
-
-import java.util.*;
-import java.nio.*;
-import java.net.*;
-import java.io.*;
-import java.nio.channels.*;
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-/**
- */
-class Request {
-
-    final static int BUF_LEN = 2048;
-    final static byte CR = 13;
-    final static byte LF = 10;
-
-    private String startLine;
-    private SocketChannel chan;
-    private InputStream is;
-    private OutputStream os;
-
-    Request (InputStream rawInputStream, OutputStream rawout) throws IOException {
-        this.chan = chan;
-        is = rawInputStream;
-        os = rawout;
-        do {
-            startLine = readLine();
-            if (startLine == null) {
-                return;
-            }
-            /* skip blank lines */
-        } while (startLine == null ? false : startLine.equals (""));
-    }
-
-
-    char[] buf = new char [BUF_LEN];
-    int pos;
-    StringBuffer lineBuf;
-
-    public InputStream inputStream () {
-        return is;
-    }
-
-    public OutputStream outputStream () {
-        return os;
-    }
-
-    /**
-     * read a line from the stream returning as a String.
-     * Not used for reading headers.
-     */
-
-    public String readLine () throws IOException {
-        boolean gotCR = false, gotLF = false;
-        pos = 0; lineBuf = new StringBuffer();
-        while (!gotLF) {
-            int c = is.read();
-            if (c == -1) {
-                return null;
-            }
-            if (gotCR) {
-                if (c == LF) {
-                    gotLF = true;
-                } else {
-                    gotCR = false;
-                    consume (CR);
-                    consume (c);
-                }
-            } else {
-                if (c == CR) {
-                    gotCR = true;
-                } else {
-                    consume (c);
-                }
-            }
-        }
-        lineBuf.append (buf, 0, pos);
-        return new String (lineBuf);
-    }
-
-    private void consume (int c) {
-        if (pos == BUF_LEN) {
-            lineBuf.append (buf);
-            pos = 0;
-        }
-        buf[pos++] = (char)c;
-    }
-
-    /**
-     * returns the request line (first line of a request)
-     */
-    public String requestLine () {
-        return startLine;
-    }
-
-    Headers hdrs = null;
-
-    Headers headers () throws IOException {
-        if (hdrs != null) {
-            return hdrs;
-        }
-        hdrs = new Headers();
-
-        char s[] = new char[10];
-        int len = 0;
-
-        int firstc = is.read();
-
-        // check for empty headers
-        if (firstc == CR || firstc == LF) {
-            int c = is.read();
-            if (c == CR || c == LF) {
-                return hdrs;
-            }
-            s[0] = (char)firstc;
-            len = 1;
-            firstc = c;
-        }
-
-        while (firstc != LF && firstc != CR && firstc >= 0) {
-            int keyend = -1;
-            int c;
-            boolean inKey = firstc > ' ';
-            s[len++] = (char) firstc;
-    parseloop:{
-                while ((c = is.read()) >= 0) {
-                    switch (c) {
-                      case ':':
-                        if (inKey && len > 0)
-                            keyend = len;
-                        inKey = false;
-                        break;
-                      case '\t':
-                        c = ' ';
-                      case ' ':
-                        inKey = false;
-                        break;
-                      case CR:
-                      case LF:
-                        firstc = is.read();
-                        if (c == CR && firstc == LF) {
-                            firstc = is.read();
-                            if (firstc == CR)
-                                firstc = is.read();
-                        }
-                        if (firstc == LF || firstc == CR || firstc > ' ')
-                            break parseloop;
-                        /* continuation */
-                        c = ' ';
-                        break;
-                    }
-                    if (len >= s.length) {
-                        char ns[] = new char[s.length * 2];
-                        System.arraycopy(s, 0, ns, 0, len);
-                        s = ns;
-                    }
-                    s[len++] = (char) c;
-                }
-                firstc = -1;
-            }
-            while (len > 0 && s[len - 1] <= ' ')
-                len--;
-            String k;
-            if (keyend <= 0) {
-                k = null;
-                keyend = 0;
-            } else {
-                k = String.copyValueOf(s, 0, keyend);
-                if (keyend < len && s[keyend] == ':')
-                    keyend++;
-                while (keyend < len && s[keyend] <= ' ')
-                    keyend++;
-            }
-            String v;
-            if (keyend >= len)
-                v = new String();
-            else
-                v = String.copyValueOf(s, keyend, len - keyend);
-
-            if (hdrs.size() >= ServerConfig.getMaxReqHeaders()) {
-                throw new IOException("Maximum number of request headers (" +
-                        "sun.net.httpserver.maxReqHeaders) exceeded, " +
-                        ServerConfig.getMaxReqHeaders() + ".");
-            }
-
-            hdrs.add (k,v);
-            len = 0;
-        }
-        return hdrs;
-    }
-
-    /**
-     * Implements blocking reading semantics on top of a non-blocking channel
-     */
-
-    static class ReadStream extends InputStream {
-        SocketChannel channel;
-        ByteBuffer chanbuf;
-        byte[] one;
-        private boolean closed = false, eof = false;
-        ByteBuffer markBuf; /* reads may be satisifed from this buffer */
-        boolean marked;
-        boolean reset;
-        int readlimit;
-        static long readTimeout;
-        ServerImpl server;
-        final static int BUFSIZE = 8 * 1024;
-
-        public ReadStream (ServerImpl server, SocketChannel chan) throws IOException {
-            this.channel = chan;
-            this.server = server;
-            chanbuf = ByteBuffer.allocate (BUFSIZE);
-            chanbuf.clear();
-            one = new byte[1];
-            closed = marked = reset = false;
-        }
-
-        public synchronized int read (byte[] b) throws IOException {
-            return read (b, 0, b.length);
-        }
-
-        public synchronized int read () throws IOException {
-            int result = read (one, 0, 1);
-            if (result == 1) {
-                return one[0] & 0xFF;
-            } else {
-                return -1;
-            }
-        }
-
-        public synchronized int read (byte[] b, int off, int srclen) throws IOException {
-
-            int canreturn, willreturn;
-
-            if (closed)
-                throw new IOException ("Stream closed");
-
-            if (eof) {
-                return -1;
-            }
-
-            assert channel.isBlocking();
-
-            if (off < 0 || srclen < 0|| srclen > (b.length-off)) {
-                throw new IndexOutOfBoundsException ();
-            }
-
-            if (reset) { /* satisfy from markBuf */
-                canreturn = markBuf.remaining ();
-                willreturn = canreturn>srclen ? srclen : canreturn;
-                markBuf.get(b, off, willreturn);
-                if (canreturn == willreturn) {
-                    reset = false;
-                }
-            } else { /* satisfy from channel */
-                chanbuf.clear ();
-                if (srclen <  BUFSIZE) {
-                    chanbuf.limit (srclen);
-                }
-                do {
-                    willreturn = channel.read (chanbuf);
-                } while (willreturn == 0);
-                if (willreturn == -1) {
-                    eof = true;
-                    return -1;
-                }
-                chanbuf.flip ();
-                chanbuf.get(b, off, willreturn);
-
-                if (marked) { /* copy into markBuf */
-                    try {
-                        markBuf.put (b, off, willreturn);
-                    } catch (BufferOverflowException e) {
-                        marked = false;
-                    }
-                }
-            }
-            return willreturn;
-        }
-
-        public boolean markSupported () {
-            return true;
-        }
-
-        /* Does not query the OS socket */
-        public synchronized int available () throws IOException {
-            if (closed)
-                throw new IOException ("Stream is closed");
-
-            if (eof)
-                return -1;
-
-            if (reset)
-                return markBuf.remaining();
-
-            return chanbuf.remaining();
-        }
-
-        public void close () throws IOException {
-            if (closed) {
-                return;
-            }
-            channel.close ();
-            closed = true;
-        }
-
-        public synchronized void mark (int readlimit) {
-            if (closed)
-                return;
-            this.readlimit = readlimit;
-            markBuf = ByteBuffer.allocate (readlimit);
-            marked = true;
-            reset = false;
-        }
-
-        public synchronized void reset () throws IOException {
-            if (closed )
-                return;
-            if (!marked)
-                throw new IOException ("Stream not marked");
-            marked = false;
-            reset = true;
-            markBuf.flip ();
-        }
-    }
-
-    static class WriteStream extends java.io.OutputStream {
-        SocketChannel channel;
-        ByteBuffer buf;
-        SelectionKey key;
-        boolean closed;
-        byte[] one;
-        ServerImpl server;
-
-        public WriteStream (ServerImpl server, SocketChannel channel) throws IOException {
-            this.channel = channel;
-            this.server = server;
-            assert channel.isBlocking();
-            closed = false;
-            one = new byte [1];
-            buf = ByteBuffer.allocate (4096);
-        }
-
-        public synchronized void write (int b) throws IOException {
-            one[0] = (byte)b;
-            write (one, 0, 1);
-        }
-
-        public synchronized void write (byte[] b) throws IOException {
-            write (b, 0, b.length);
-        }
-
-        public synchronized void write (byte[] b, int off, int len) throws IOException {
-            int l = len;
-            if (closed)
-                throw new IOException ("stream is closed");
-
-            int cap = buf.capacity();
-            if (cap < len) {
-                int diff = len - cap;
-                buf = ByteBuffer.allocate (2*(cap+diff));
-            }
-            buf.clear();
-            buf.put (b, off, len);
-            buf.flip ();
-            int n;
-            while ((n = channel.write (buf)) < l) {
-                l -= n;
-                if (l == 0)
-                    return;
-            }
-        }
-
-        public void close () throws IOException {
-            if (closed)
-                return;
-            //server.logStackTrace ("Request.OS.close: isOpen="+channel.isOpen());
-            channel.close ();
-            closed = true;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/SSLStreams.java b/ojluni/src/main/java/sun/net/httpserver/SSLStreams.java
deleted file mode 100755
index c6b87cd..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/SSLStreams.java
+++ /dev/null
@@ -1,662 +0,0 @@
-/*
- * Copyright (c) 2005, 2010, 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.
- */
-
-package sun.net.httpserver;
-
-import java.net.*;
-import java.nio.*;
-import java.io.*;
-import java.nio.channels.*;
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.concurrent.locks.*;
-import javax.net.ssl.*;
-import javax.net.ssl.SSLEngineResult.*;
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-/**
- * given a non-blocking SocketChannel, it produces
- * (blocking) streams which encrypt/decrypt the SSL content
- * and handle the SSL handshaking automatically.
- */
-
-class SSLStreams {
-
-    SSLContext sslctx;
-    SocketChannel chan;
-    TimeSource time;
-    ServerImpl server;
-    SSLEngine engine;
-    EngineWrapper wrapper;
-    OutputStream os;
-    InputStream is;
-
-    /* held by thread doing the hand-shake on this connection */
-    Lock handshaking = new ReentrantLock();
-
-    SSLStreams (ServerImpl server, SSLContext sslctx, SocketChannel chan) throws IOException {
-        this.server = server;
-        this.time= (TimeSource)server;
-        this.sslctx= sslctx;
-        this.chan= chan;
-        InetSocketAddress addr =
-                (InetSocketAddress)chan.socket().getRemoteSocketAddress();
-        engine = sslctx.createSSLEngine (addr.getHostName(), addr.getPort());
-        engine.setUseClientMode (false);
-        HttpsConfigurator cfg = server.getHttpsConfigurator();
-        configureEngine (cfg, addr);
-        wrapper = new EngineWrapper (chan, engine);
-    }
-
-    private void configureEngine(HttpsConfigurator cfg, InetSocketAddress addr){
-        if (cfg != null) {
-            Parameters params = new Parameters (cfg, addr);
-//BEGIN_TIGER_EXCLUDE
-            cfg.configure (params);
-            SSLParameters sslParams = params.getSSLParameters();
-            if (sslParams != null) {
-                engine.setSSLParameters (sslParams);
-            } else
-//END_TIGER_EXCLUDE
-            {
-                /* tiger compatibility */
-                if (params.getCipherSuites() != null) {
-                    try {
-                        engine.setEnabledCipherSuites (
-                            params.getCipherSuites()
-                        );
-                    } catch (IllegalArgumentException e) { /* LOG */}
-                }
-                engine.setNeedClientAuth (params.getNeedClientAuth());
-                engine.setWantClientAuth (params.getWantClientAuth());
-                if (params.getProtocols() != null) {
-                    try {
-                        engine.setEnabledProtocols (
-                            params.getProtocols()
-                        );
-                    } catch (IllegalArgumentException e) { /* LOG */}
-                }
-            }
-        }
-    }
-
-    class Parameters extends HttpsParameters {
-        InetSocketAddress addr;
-        HttpsConfigurator cfg;
-
-        Parameters (HttpsConfigurator cfg, InetSocketAddress addr) {
-            this.addr = addr;
-            this.cfg = cfg;
-        }
-        public InetSocketAddress getClientAddress () {
-            return addr;
-        }
-        public HttpsConfigurator getHttpsConfigurator() {
-            return cfg;
-        }
-//BEGIN_TIGER_EXCLUDE
-        SSLParameters params;
-        public void setSSLParameters (SSLParameters p) {
-            params = p;
-        }
-        SSLParameters getSSLParameters () {
-            return params;
-        }
-//END_TIGER_EXCLUDE
-    }
-
-    /**
-     * cleanup resources allocated inside this object
-     */
-    void close () throws IOException {
-        wrapper.close();
-    }
-
-    /**
-     * return the SSL InputStream
-     */
-    InputStream getInputStream () throws IOException {
-        if (is == null) {
-            is = new InputStream();
-        }
-        return is;
-    }
-
-    /**
-     * return the SSL OutputStream
-     */
-    OutputStream getOutputStream () throws IOException {
-        if (os == null) {
-            os = new OutputStream();
-        }
-        return os;
-    }
-
-    SSLEngine getSSLEngine () {
-        return engine;
-    }
-
-    /**
-     * request the engine to repeat the handshake on this session
-     * the handshake must be driven by reads/writes on the streams
-     * Normally, not necessary to call this.
-     */
-    void beginHandshake() throws SSLException {
-        engine.beginHandshake();
-    }
-
-    class WrapperResult {
-        SSLEngineResult result;
-
-        /* if passed in buffer was not big enough then the
-         * a reallocated buffer is returned here
-         */
-        ByteBuffer buf;
-    }
-
-    int app_buf_size;
-    int packet_buf_size;
-
-    enum BufType {
-        PACKET, APPLICATION
-    };
-
-    private ByteBuffer allocate (BufType type) {
-        return allocate (type, -1);
-    }
-
-    private ByteBuffer allocate (BufType type, int len) {
-        assert engine != null;
-        synchronized (this) {
-            int size;
-            if (type == BufType.PACKET) {
-                if (packet_buf_size == 0) {
-                    SSLSession sess = engine.getSession();
-                    packet_buf_size = sess.getPacketBufferSize();
-                }
-                if (len > packet_buf_size) {
-                    packet_buf_size = len;
-                }
-                size = packet_buf_size;
-            } else {
-                if (app_buf_size == 0) {
-                    SSLSession sess = engine.getSession();
-                    app_buf_size = sess.getApplicationBufferSize();
-                }
-                if (len > app_buf_size) {
-                    app_buf_size = len;
-                }
-                size = app_buf_size;
-            }
-            return ByteBuffer.allocate (size);
-        }
-    }
-
-    /* reallocates the buffer by :-
-     * 1. creating a new buffer double the size of the old one
-     * 2. putting the contents of the old buffer into the new one
-     * 3. set xx_buf_size to the new size if it was smaller than new size
-     *
-     * flip is set to true if the old buffer needs to be flipped
-     * before it is copied.
-     */
-    private ByteBuffer realloc (ByteBuffer b, boolean flip, BufType type) {
-        synchronized (this) {
-            int nsize = 2 * b.capacity();
-            ByteBuffer n = allocate (type, nsize);
-            if (flip) {
-                b.flip();
-            }
-            n.put(b);
-            b = n;
-        }
-        return b;
-    }
-    /**
-     * This is a thin wrapper over SSLEngine and the SocketChannel,
-     * which guarantees the ordering of wraps/unwraps with respect to the underlying
-     * channel read/writes. It handles the UNDER/OVERFLOW status codes
-     * It does not handle the handshaking status codes, or the CLOSED status code
-     * though once the engine is closed, any attempt to read/write to it
-     * will get an exception.  The overall result is returned.
-     * It functions synchronously/blocking
-     */
-    class EngineWrapper {
-
-        SocketChannel chan;
-        SSLEngine engine;
-        Object wrapLock, unwrapLock;
-        ByteBuffer unwrap_src, wrap_dst;
-        boolean closed = false;
-        int u_remaining; // the number of bytes left in unwrap_src after an unwrap()
-
-        EngineWrapper (SocketChannel chan, SSLEngine engine) throws IOException {
-            this.chan = chan;
-            this.engine = engine;
-            wrapLock = new Object();
-            unwrapLock = new Object();
-            unwrap_src = allocate(BufType.PACKET);
-            wrap_dst = allocate(BufType.PACKET);
-        }
-
-        void close () throws IOException {
-        }
-
-        /* try to wrap and send the data in src. Handles OVERFLOW.
-         * Might block if there is an outbound blockage or if another
-         * thread is calling wrap(). Also, might not send any data
-         * if an unwrap is needed.
-         */
-        WrapperResult wrapAndSend(ByteBuffer src) throws IOException {
-            return wrapAndSendX(src, false);
-        }
-
-        WrapperResult wrapAndSendX(ByteBuffer src, boolean ignoreClose) throws IOException {
-            if (closed && !ignoreClose) {
-                throw new IOException ("Engine is closed");
-            }
-            Status status;
-            WrapperResult r = new WrapperResult();
-            synchronized (wrapLock) {
-                wrap_dst.clear();
-                do {
-                    r.result = engine.wrap (src, wrap_dst);
-                    status = r.result.getStatus();
-                    if (status == Status.BUFFER_OVERFLOW) {
-                        wrap_dst = realloc (wrap_dst, true, BufType.PACKET);
-                    }
-                } while (status == Status.BUFFER_OVERFLOW);
-                if (status == Status.CLOSED && !ignoreClose) {
-                    closed = true;
-                    return r;
-                }
-                if (r.result.bytesProduced() > 0) {
-                    wrap_dst.flip();
-                    int l = wrap_dst.remaining();
-                    assert l == r.result.bytesProduced();
-                    while (l>0) {
-                        l -= chan.write (wrap_dst);
-                    }
-                }
-            }
-            return r;
-        }
-
-        /* block until a complete message is available and return it
-         * in dst, together with the Result. dst may have been re-allocated
-         * so caller should check the returned value in Result
-         * If handshaking is in progress then, possibly no data is returned
-         */
-        WrapperResult recvAndUnwrap(ByteBuffer dst) throws IOException {
-            Status status = Status.OK;
-            WrapperResult r = new WrapperResult();
-            r.buf = dst;
-            if (closed) {
-                throw new IOException ("Engine is closed");
-            }
-            boolean needData;
-            if (u_remaining > 0) {
-                unwrap_src.compact();
-                unwrap_src.flip();
-                needData = false;
-            } else {
-                unwrap_src.clear();
-                needData = true;
-            }
-            synchronized (unwrapLock) {
-                int x;
-                do {
-                    if (needData) {
-                        do {
-                        x = chan.read (unwrap_src);
-                        } while (x == 0);
-                        if (x == -1) {
-                            throw new IOException ("connection closed for reading");
-                        }
-                        unwrap_src.flip();
-                    }
-                    r.result = engine.unwrap (unwrap_src, r.buf);
-                    status = r.result.getStatus();
-                    if (status == Status.BUFFER_UNDERFLOW) {
-                        if (unwrap_src.limit() == unwrap_src.capacity()) {
-                            /* buffer not big enough */
-                            unwrap_src = realloc (
-                                unwrap_src, false, BufType.PACKET
-                            );
-                        } else {
-                            /* Buffer not full, just need to read more
-                             * data off the channel. Reset pointers
-                             * for reading off SocketChannel
-                             */
-                            unwrap_src.position (unwrap_src.limit());
-                            unwrap_src.limit (unwrap_src.capacity());
-                        }
-                        needData = true;
-                    } else if (status == Status.BUFFER_OVERFLOW) {
-                        r.buf = realloc (r.buf, true, BufType.APPLICATION);
-                        needData = false;
-                    } else if (status == Status.CLOSED) {
-                        closed = true;
-                        r.buf.flip();
-                        return r;
-                    }
-                } while (status != Status.OK);
-            }
-            u_remaining = unwrap_src.remaining();
-            return r;
-        }
-    }
-
-    /**
-     * send the data in the given ByteBuffer. If a handshake is needed
-     * then this is handled within this method. When this call returns,
-     * all of the given user data has been sent and any handshake has been
-     * completed. Caller should check if engine has been closed.
-     */
-    public WrapperResult sendData (ByteBuffer src) throws IOException {
-        WrapperResult r=null;
-        while (src.remaining() > 0) {
-            r = wrapper.wrapAndSend(src);
-            Status status = r.result.getStatus();
-            if (status == Status.CLOSED) {
-                doClosure ();
-                return r;
-            }
-            HandshakeStatus hs_status = r.result.getHandshakeStatus();
-            if (hs_status != HandshakeStatus.FINISHED &&
-                hs_status != HandshakeStatus.NOT_HANDSHAKING)
-            {
-                doHandshake(hs_status);
-            }
-        }
-        return r;
-    }
-
-    /**
-     * read data thru the engine into the given ByteBuffer. If the
-     * given buffer was not large enough, a new one is allocated
-     * and returned. This call handles handshaking automatically.
-     * Caller should check if engine has been closed.
-     */
-    public WrapperResult recvData (ByteBuffer dst) throws IOException {
-        /* we wait until some user data arrives */
-        WrapperResult r = null;
-        assert dst.position() == 0;
-        while (dst.position() == 0) {
-            r = wrapper.recvAndUnwrap (dst);
-            dst = (r.buf != dst) ? r.buf: dst;
-            Status status = r.result.getStatus();
-            if (status == Status.CLOSED) {
-                doClosure ();
-                return r;
-            }
-
-            HandshakeStatus hs_status = r.result.getHandshakeStatus();
-            if (hs_status != HandshakeStatus.FINISHED &&
-                hs_status != HandshakeStatus.NOT_HANDSHAKING)
-            {
-                doHandshake (hs_status);
-            }
-        }
-        dst.flip();
-        return r;
-    }
-
-    /* we've received a close notify. Need to call wrap to send
-     * the response
-     */
-    void doClosure () throws IOException {
-        try {
-            handshaking.lock();
-            ByteBuffer tmp = allocate(BufType.APPLICATION);
-            WrapperResult r;
-            do {
-                tmp.clear();
-                tmp.flip ();
-                r = wrapper.wrapAndSendX (tmp, true);
-            } while (r.result.getStatus() != Status.CLOSED);
-        } finally {
-            handshaking.unlock();
-        }
-    }
-
-    /* do the (complete) handshake after acquiring the handshake lock.
-     * If two threads call this at the same time, then we depend
-     * on the wrapper methods being idempotent. eg. if wrapAndSend()
-     * is called with no data to send then there must be no problem
-     */
-    void doHandshake (HandshakeStatus hs_status) throws IOException {
-        try {
-            handshaking.lock();
-            ByteBuffer tmp = allocate(BufType.APPLICATION);
-            while (hs_status != HandshakeStatus.FINISHED &&
-                   hs_status != HandshakeStatus.NOT_HANDSHAKING)
-            {
-                WrapperResult r = null;
-                switch (hs_status) {
-                    case NEED_TASK:
-                        Runnable task;
-                        while ((task = engine.getDelegatedTask()) != null) {
-                            /* run in current thread, because we are already
-                             * running an external Executor
-                             */
-                            task.run();
-                        }
-                        /* fall thru - call wrap again */
-                    case NEED_WRAP:
-                        tmp.clear();
-                        tmp.flip();
-                        r = wrapper.wrapAndSend(tmp);
-                        break;
-
-                    case NEED_UNWRAP:
-                        tmp.clear();
-                        r = wrapper.recvAndUnwrap (tmp);
-                        if (r.buf != tmp) {
-                            tmp = r.buf;
-                        }
-                        assert tmp.position() == 0;
-                        break;
-                }
-                hs_status = r.result.getHandshakeStatus();
-            }
-        } finally {
-            handshaking.unlock();
-        }
-    }
-
-    /**
-     * represents an SSL input stream. Multiple https requests can
-     * be sent over one stream. closing this stream causes an SSL close
-     * input.
-     */
-    class InputStream extends java.io.InputStream {
-
-        ByteBuffer bbuf;
-        boolean closed = false;
-
-        /* this stream eof */
-        boolean eof = false;
-
-        boolean needData = true;
-
-        InputStream () {
-            bbuf = allocate (BufType.APPLICATION);
-        }
-
-        public int read (byte[] buf, int off, int len) throws IOException {
-            if (closed) {
-                throw new IOException ("SSL stream is closed");
-            }
-            if (eof) {
-                return 0;
-            }
-            int available=0;
-            if (!needData) {
-                available = bbuf.remaining();
-                needData = (available==0);
-            }
-            if (needData) {
-                bbuf.clear();
-                WrapperResult r = recvData (bbuf);
-                bbuf = r.buf== bbuf? bbuf: r.buf;
-                if ((available=bbuf.remaining()) == 0) {
-                    eof = true;
-                    return 0;
-                } else {
-                    needData = false;
-                }
-            }
-            /* copy as much as possible from buf into users buf */
-            if (len > available) {
-                len = available;
-            }
-            bbuf.get (buf, off, len);
-            return len;
-        }
-
-        public int available () throws IOException {
-            return bbuf.remaining();
-        }
-
-        public boolean markSupported () {
-            return false; /* not possible with SSLEngine */
-        }
-
-        public void reset () throws IOException {
-            throw new IOException ("mark/reset not supported");
-        }
-
-        public long skip (long s) throws IOException {
-            int n = (int)s;
-            if (closed) {
-                throw new IOException ("SSL stream is closed");
-            }
-            if (eof) {
-                return 0;
-            }
-            int ret = n;
-            while (n > 0) {
-                if (bbuf.remaining() >= n) {
-                    bbuf.position (bbuf.position()+n);
-                    return ret;
-                } else {
-                    n -= bbuf.remaining();
-                    bbuf.clear();
-                    WrapperResult r = recvData (bbuf);
-                    bbuf = r.buf==bbuf? bbuf: r.buf;
-                }
-            }
-            return ret; /* not reached */
-        }
-
-        /**
-         * close the SSL connection. All data must have been consumed
-         * before this is called. Otherwise an exception will be thrown.
-         * [Note. May need to revisit this. not quite the normal close() symantics
-         */
-        public void close () throws IOException {
-            eof = true;
-            engine.closeInbound ();
-        }
-
-        public int read (byte[] buf) throws IOException {
-            return read (buf, 0, buf.length);
-        }
-
-        byte single[] = new byte [1];
-
-        public int read () throws IOException {
-            int n = read (single, 0, 1);
-            if (n == 0) {
-                return -1;
-            } else {
-                return single[0] & 0xFF;
-            }
-        }
-    }
-
-    /**
-     * represents an SSL output stream. plain text data written to this stream
-     * is encrypted by the stream. Multiple HTTPS responses can be sent on
-     * one stream. closing this stream initiates an SSL closure
-     */
-    class OutputStream extends java.io.OutputStream {
-        ByteBuffer buf;
-        boolean closed = false;
-        byte single[] = new byte[1];
-
-        OutputStream() {
-            buf = allocate(BufType.APPLICATION);
-        }
-
-        public void write(int b) throws IOException {
-            single[0] = (byte)b;
-            write (single, 0, 1);
-        }
-
-        public void write(byte b[]) throws IOException {
-            write (b, 0, b.length);
-        }
-        public void write(byte b[], int off, int len) throws IOException {
-            if (closed) {
-                throw new IOException ("output stream is closed");
-            }
-            while (len > 0) {
-                int l = len > buf.capacity() ? buf.capacity() : len;
-                buf.clear();
-                buf.put (b, off, l);
-                len -= l;
-                off += l;
-                buf.flip();
-                WrapperResult r = sendData (buf);
-                if (r.result.getStatus() == Status.CLOSED) {
-                    closed = true;
-                    if (len > 0) {
-                        throw new IOException ("output stream is closed");
-                    }
-                }
-            }
-        }
-
-        public void flush() throws IOException {
-            /* no-op */
-        }
-
-        public void close() throws IOException {
-            WrapperResult r=null;
-            engine.closeOutbound();
-            closed = true;
-            HandshakeStatus stat = HandshakeStatus.NEED_WRAP;
-            buf.clear();
-            while (stat == HandshakeStatus.NEED_WRAP) {
-                r = wrapper.wrapAndSend (buf);
-                stat = r.result.getHandshakeStatus();
-            }
-            assert r.result.getStatus() == Status.CLOSED;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/ServerConfig.java b/ojluni/src/main/java/sun/net/httpserver/ServerConfig.java
deleted file mode 100755
index e5f5d93..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/ServerConfig.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (c) 2005, 2011, 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.
- */
-
-package sun.net.httpserver;
-
-import java.util.logging.Logger;
-import java.security.PrivilegedAction;
-
-/**
- * Parameters that users will not likely need to set
- * but are useful for debugging
- */
-
-class ServerConfig {
-
-    static int clockTick;
-
-    static final int DEFAULT_CLOCK_TICK = 10000 ; // 10 sec.
-
-    /* These values must be a reasonable multiple of clockTick */
-    static final long DEFAULT_IDLE_INTERVAL = 30 ; // 5 min
-    static final int DEFAULT_MAX_IDLE_CONNECTIONS = 200 ;
-
-    static final long DEFAULT_MAX_REQ_TIME = -1; // default: forever
-    static final long DEFAULT_MAX_RSP_TIME = -1; // default: forever
-    static final long DEFAULT_TIMER_MILLIS = 1000;
-    static final int  DEFAULT_MAX_REQ_HEADERS = 200;
-    static final long DEFAULT_DRAIN_AMOUNT = 64 * 1024;
-
-    static long idleInterval;
-    static long drainAmount;    // max # of bytes to drain from an inputstream
-    static int maxIdleConnections;
-    // The maximum number of request headers allowable
-    private static int maxReqHeaders;
-    // max time a request or response is allowed to take
-    static long maxReqTime;
-    static long maxRspTime;
-    static long timerMillis;
-    static boolean debug;
-
-    // the value of the TCP_NODELAY socket-level option
-    static boolean noDelay;
-
-    static {
-        java.security.AccessController.doPrivileged(
-            new PrivilegedAction<Void>() {
-                @Override
-                public Void run () {
-                    idleInterval = Long.getLong("sun.net.httpserver.idleInterval",
-                            DEFAULT_IDLE_INTERVAL) * 1000;
-
-                    clockTick = Integer.getInteger("sun.net.httpserver.clockTick",
-                            DEFAULT_CLOCK_TICK);
-
-                    maxIdleConnections = Integer.getInteger(
-                            "sun.net.httpserver.maxIdleConnections",
-                            DEFAULT_MAX_IDLE_CONNECTIONS);
-
-                    drainAmount = Long.getLong("sun.net.httpserver.drainAmount",
-                            DEFAULT_DRAIN_AMOUNT);
-
-                    maxReqHeaders = Integer.getInteger(
-                            "sun.net.httpserver.maxReqHeaders",
-                            DEFAULT_MAX_REQ_HEADERS);
-
-                    maxReqTime = Long.getLong("sun.net.httpserver.maxReqTime",
-                            DEFAULT_MAX_REQ_TIME);
-
-                    maxRspTime = Long.getLong("sun.net.httpserver.maxRspTime",
-                            DEFAULT_MAX_RSP_TIME);
-
-                    timerMillis = Long.getLong("sun.net.httpserver.timerMillis",
-                            DEFAULT_TIMER_MILLIS);
-
-                    debug = Boolean.getBoolean("sun.net.httpserver.debug");
-
-                    noDelay = Boolean.getBoolean("sun.net.httpserver.nodelay");
-
-                    return null;
-                }
-            });
-
-    }
-
-
-    static void checkLegacyProperties (final Logger logger) {
-
-        // legacy properties that are no longer used
-        // print a warning to logger if they are set.
-
-        java.security.AccessController.doPrivileged(
-            new PrivilegedAction<Void>() {
-                public Void run () {
-                    if (System.getProperty("sun.net.httpserver.readTimeout")
-                                                !=null)
-                    {
-                        logger.warning ("sun.net.httpserver.readTimeout "+
-                            "property is no longer used. "+
-                            "Use sun.net.httpserver.maxReqTime instead."
-                        );
-                    }
-                    if (System.getProperty("sun.net.httpserver.writeTimeout")
-                                                !=null)
-                    {
-                        logger.warning ("sun.net.httpserver.writeTimeout "+
-                            "property is no longer used. Use "+
-                            "sun.net.httpserver.maxRspTime instead."
-                        );
-                    }
-                    if (System.getProperty("sun.net.httpserver.selCacheTimeout")
-                                                !=null)
-                    {
-                        logger.warning ("sun.net.httpserver.selCacheTimeout "+
-                            "property is no longer used."
-                        );
-                    }
-                    return null;
-                }
-            }
-        );
-    }
-
-    static boolean debugEnabled () {
-        return debug;
-    }
-
-    static long getIdleInterval () {
-        return idleInterval;
-    }
-
-    static int getClockTick () {
-        return clockTick;
-    }
-
-    static int getMaxIdleConnections () {
-        return maxIdleConnections;
-    }
-
-    static long getDrainAmount () {
-        return drainAmount;
-    }
-
-    static int getMaxReqHeaders() {
-        return maxReqHeaders;
-    }
-
-    static long getMaxReqTime () {
-        return maxReqTime;
-    }
-
-    static long getMaxRspTime () {
-        return maxRspTime;
-    }
-
-    static long getTimerMillis () {
-        return timerMillis;
-    }
-
-    static boolean noDelay() {
-        return noDelay;
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/ServerImpl.java b/ojluni/src/main/java/sun/net/httpserver/ServerImpl.java
deleted file mode 100755
index 2b53c1e..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/ServerImpl.java
+++ /dev/null
@@ -1,882 +0,0 @@
-/*
- * Copyright (c) 2005, 2011, 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.
- */
-
-package sun.net.httpserver;
-
-import java.net.*;
-import java.io.*;
-import java.nio.channels.*;
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-import javax.net.ssl.*;
-import com.sun.net.httpserver.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import sun.net.httpserver.HttpConnection.State;
-
-/**
- * Provides implementation for both HTTP and HTTPS
- */
-class ServerImpl implements TimeSource {
-
-    private String protocol;
-    private boolean https;
-    private Executor executor;
-    private HttpsConfigurator httpsConfig;
-    private SSLContext sslContext;
-    private ContextList contexts;
-    private InetSocketAddress address;
-    private ServerSocketChannel schan;
-    private Selector selector;
-    private SelectionKey listenerKey;
-    private Set<HttpConnection> idleConnections;
-    private Set<HttpConnection> allConnections;
-    /* following two are used to keep track of the times
-     * when a connection/request is first received
-     * and when we start to send the response
-     */
-    private Set<HttpConnection> reqConnections;
-    private Set<HttpConnection> rspConnections;
-    private List<Event> events;
-    private Object lolock = new Object();
-    private volatile boolean finished = false;
-    private volatile boolean terminating = false;
-    private boolean bound = false;
-    private boolean started = false;
-    private volatile long time;  /* current time */
-    private volatile long subticks = 0;
-    private volatile long ticks; /* number of clock ticks since server started */
-    private HttpServer wrapper;
-
-    final static int CLOCK_TICK = ServerConfig.getClockTick();
-    final static long IDLE_INTERVAL = ServerConfig.getIdleInterval();
-    final static int MAX_IDLE_CONNECTIONS = ServerConfig.getMaxIdleConnections();
-    final static long TIMER_MILLIS = ServerConfig.getTimerMillis ();
-    final static long MAX_REQ_TIME=getTimeMillis(ServerConfig.getMaxReqTime());
-    final static long MAX_RSP_TIME=getTimeMillis(ServerConfig.getMaxRspTime());
-    final static boolean timer1Enabled = MAX_REQ_TIME != -1 || MAX_RSP_TIME != -1;
-
-    private Timer timer, timer1;
-    private Logger logger;
-
-    ServerImpl (
-        HttpServer wrapper, String protocol, InetSocketAddress addr, int backlog
-    ) throws IOException {
-
-        this.protocol = protocol;
-        this.wrapper = wrapper;
-        this.logger = Logger.getLogger ("com.sun.net.httpserver");
-        ServerConfig.checkLegacyProperties (logger);
-        https = protocol.equalsIgnoreCase ("https");
-        this.address = addr;
-        contexts = new ContextList();
-        schan = ServerSocketChannel.open();
-        if (addr != null) {
-            ServerSocket socket = schan.socket();
-            socket.bind (addr, backlog);
-            bound = true;
-        }
-        selector = Selector.open ();
-        schan.configureBlocking (false);
-        listenerKey = schan.register (selector, SelectionKey.OP_ACCEPT);
-        dispatcher = new Dispatcher();
-        idleConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
-        allConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
-        reqConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
-        rspConnections = Collections.synchronizedSet (new HashSet<HttpConnection>());
-        time = System.currentTimeMillis();
-        timer = new Timer ("server-timer", true);
-        timer.schedule (new ServerTimerTask(), CLOCK_TICK, CLOCK_TICK);
-        if (timer1Enabled) {
-            timer1 = new Timer ("server-timer1", true);
-            timer1.schedule (new ServerTimerTask1(),TIMER_MILLIS,TIMER_MILLIS);
-            logger.config ("HttpServer timer1 enabled period in ms:  "+TIMER_MILLIS);
-            logger.config ("MAX_REQ_TIME:  "+MAX_REQ_TIME);
-            logger.config ("MAX_RSP_TIME:  "+MAX_RSP_TIME);
-        }
-        events = new LinkedList<Event>();
-        logger.config ("HttpServer created "+protocol+" "+ addr);
-    }
-
-    public void bind (InetSocketAddress addr, int backlog) throws IOException {
-        if (bound) {
-            throw new BindException ("HttpServer already bound");
-        }
-        if (addr == null) {
-            throw new NullPointerException ("null address");
-        }
-        ServerSocket socket = schan.socket();
-        socket.bind (addr, backlog);
-        bound = true;
-    }
-
-    public void start () {
-        if (!bound || started || finished) {
-            throw new IllegalStateException ("server in wrong state");
-        }
-        if (executor == null) {
-            executor = new DefaultExecutor();
-        }
-        Thread t = new Thread (dispatcher);
-        started = true;
-        t.start();
-    }
-
-    public void setExecutor (Executor executor) {
-        if (started) {
-            throw new IllegalStateException ("server already started");
-        }
-        this.executor = executor;
-    }
-
-    private static class DefaultExecutor implements Executor {
-        public void execute (Runnable task) {
-            task.run();
-        }
-    }
-
-    public Executor getExecutor () {
-        return executor;
-    }
-
-    public void setHttpsConfigurator (HttpsConfigurator config) {
-        if (config == null) {
-            throw new NullPointerException ("null HttpsConfigurator");
-        }
-        if (started) {
-            throw new IllegalStateException ("server already started");
-        }
-        this.httpsConfig = config;
-        sslContext = config.getSSLContext();
-    }
-
-    public HttpsConfigurator getHttpsConfigurator () {
-        return httpsConfig;
-    }
-
-    public void stop (int delay) {
-        if (delay < 0) {
-            throw new IllegalArgumentException ("negative delay parameter");
-        }
-        terminating = true;
-        try { schan.close(); } catch (IOException e) {}
-        selector.wakeup();
-        long latest = System.currentTimeMillis() + delay * 1000;
-        while (System.currentTimeMillis() < latest) {
-            delay();
-            if (finished) {
-                break;
-            }
-        }
-        finished = true;
-        selector.wakeup();
-        synchronized (allConnections) {
-            for (HttpConnection c : allConnections) {
-                c.close();
-            }
-        }
-        allConnections.clear();
-        idleConnections.clear();
-        timer.cancel();
-        if (timer1Enabled) {
-            timer1.cancel();
-        }
-    }
-
-    Dispatcher dispatcher;
-
-    public synchronized HttpContextImpl createContext (String path, HttpHandler handler) {
-        if (handler == null || path == null) {
-            throw new NullPointerException ("null handler, or path parameter");
-        }
-        HttpContextImpl context = new HttpContextImpl (protocol, path, handler, this);
-        contexts.add (context);
-        logger.config ("context created: " + path);
-        return context;
-    }
-
-    public synchronized HttpContextImpl createContext (String path) {
-        if (path == null) {
-            throw new NullPointerException ("null path parameter");
-        }
-        HttpContextImpl context = new HttpContextImpl (protocol, path, null, this);
-        contexts.add (context);
-        logger.config ("context created: " + path);
-        return context;
-    }
-
-    public synchronized void removeContext (String path) throws IllegalArgumentException {
-        if (path == null) {
-            throw new NullPointerException ("null path parameter");
-        }
-        contexts.remove (protocol, path);
-        logger.config ("context removed: " + path);
-    }
-
-    public synchronized void removeContext (HttpContext context) throws IllegalArgumentException {
-        if (!(context instanceof HttpContextImpl)) {
-            throw new IllegalArgumentException ("wrong HttpContext type");
-        }
-        contexts.remove ((HttpContextImpl)context);
-        logger.config ("context removed: " + context.getPath());
-    }
-
-    public InetSocketAddress getAddress() {
-        return AccessController.doPrivileged(
-                new PrivilegedAction<InetSocketAddress>() {
-                    public InetSocketAddress run() {
-                        return
-                            (InetSocketAddress)schan.socket()
-                                .getLocalSocketAddress();
-                    }
-                });
-    }
-
-    Selector getSelector () {
-        return selector;
-    }
-
-    void addEvent (Event r) {
-        synchronized (lolock) {
-            events.add (r);
-            selector.wakeup();
-        }
-    }
-
-    /* main server listener task */
-
-    class Dispatcher implements Runnable {
-
-        private void handleEvent (Event r) {
-            ExchangeImpl t = r.exchange;
-            HttpConnection c = t.getConnection();
-            try {
-                if (r instanceof WriteFinishedEvent) {
-
-                    int exchanges = endExchange();
-                    if (terminating && exchanges == 0) {
-                        finished = true;
-                    }
-                    responseCompleted (c);
-                    LeftOverInputStream is = t.getOriginalInputStream();
-                    if (!is.isEOF()) {
-                        t.close = true;
-                    }
-                    if (t.close || idleConnections.size() >= MAX_IDLE_CONNECTIONS) {
-                        c.close();
-                        allConnections.remove (c);
-                    } else {
-                        if (is.isDataBuffered()) {
-                            /* don't re-enable the interestops, just handle it */
-                            requestStarted (c);
-                            handle (c.getChannel(), c);
-                        } else {
-                            connsToRegister.add (c);
-                        }
-                    }
-                }
-            } catch (IOException e) {
-                logger.log (
-                    Level.FINER, "Dispatcher (1)", e
-                );
-                c.close();
-            }
-        }
-
-        final LinkedList<HttpConnection> connsToRegister =
-                new LinkedList<HttpConnection>();
-
-        void reRegister (HttpConnection c) {
-            /* re-register with selector */
-            try {
-                SocketChannel chan = c.getChannel();
-                chan.configureBlocking (false);
-                SelectionKey key = chan.register (selector, SelectionKey.OP_READ);
-                key.attach (c);
-                c.selectionKey = key;
-                c.time = getTime() + IDLE_INTERVAL;
-                idleConnections.add (c);
-            } catch (IOException e) {
-                dprint(e);
-                logger.log(Level.FINER, "Dispatcher(8)", e);
-                c.close();
-            }
-        }
-
-        public void run() {
-            while (!finished) {
-                try {
-                    ListIterator<HttpConnection> li =
-                        connsToRegister.listIterator();
-                    for (HttpConnection c : connsToRegister) {
-                        reRegister(c);
-                    }
-                    connsToRegister.clear();
-
-                    List<Event> list = null;
-                    selector.select(1000);
-                    synchronized (lolock) {
-                        if (events.size() > 0) {
-                            list = events;
-                            events = new LinkedList<Event>();
-                        }
-                    }
-
-                    if (list != null) {
-                        for (Event r: list) {
-                            handleEvent (r);
-                        }
-                    }
-
-                    /* process the selected list now  */
-
-                    Set<SelectionKey> selected = selector.selectedKeys();
-                    Iterator<SelectionKey> iter = selected.iterator();
-                    while (iter.hasNext()) {
-                        SelectionKey key = iter.next();
-                        iter.remove ();
-                        if (key.equals (listenerKey)) {
-                            if (terminating) {
-                                continue;
-                            }
-                            SocketChannel chan = schan.accept();
-
-                            // Set TCP_NODELAY, if appropriate
-                            if (ServerConfig.noDelay()) {
-                                chan.socket().setTcpNoDelay(true);
-                            }
-
-                            if (chan == null) {
-                                continue; /* cancel something ? */
-                            }
-                            chan.configureBlocking (false);
-                            SelectionKey newkey = chan.register (selector, SelectionKey.OP_READ);
-                            HttpConnection c = new HttpConnection ();
-                            c.selectionKey = newkey;
-                            c.setChannel (chan);
-                            newkey.attach (c);
-                            requestStarted (c);
-                            allConnections.add (c);
-                        } else {
-                            try {
-                                if (key.isReadable()) {
-                                    boolean closed;
-                                    SocketChannel chan = (SocketChannel)key.channel();
-                                    HttpConnection conn = (HttpConnection)key.attachment();
-
-                                    key.cancel();
-                                    chan.configureBlocking (true);
-                                    if (idleConnections.remove(conn)) {
-                                        // was an idle connection so add it
-                                        // to reqConnections set.
-                                        requestStarted (conn);
-                                    }
-                                    handle (chan, conn);
-                                } else {
-                                    assert false;
-                                }
-                            } catch (CancelledKeyException e) {
-                                handleException(key, null);
-                            } catch (IOException e) {
-                                handleException(key, e);
-                            }
-                        }
-                    }
-                    // call the selector just to process the cancelled keys
-                    selector.selectNow();
-                } catch (IOException e) {
-                    logger.log (Level.FINER, "Dispatcher (4)", e);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    logger.log (Level.FINER, "Dispatcher (7)", e);
-                }
-            }
-        }
-
-        private void handleException (SelectionKey key, Exception e) {
-            HttpConnection conn = (HttpConnection)key.attachment();
-            if (e != null) {
-                logger.log (Level.FINER, "Dispatcher (2)", e);
-            }
-            closeConnection(conn);
-        }
-
-        public void handle (SocketChannel chan, HttpConnection conn)
-        throws IOException
-        {
-            try {
-                Exchange t = new Exchange (chan, protocol, conn);
-                executor.execute (t);
-            } catch (HttpError e1) {
-                logger.log (Level.FINER, "Dispatcher (4)", e1);
-                closeConnection(conn);
-            } catch (IOException e) {
-                logger.log (Level.FINER, "Dispatcher (5)", e);
-                closeConnection(conn);
-            }
-        }
-    }
-
-    static boolean debug = ServerConfig.debugEnabled ();
-
-    static synchronized void dprint (String s) {
-        if (debug) {
-            System.out.println (s);
-        }
-    }
-
-    static synchronized void dprint (Exception e) {
-        if (debug) {
-            System.out.println (e);
-            e.printStackTrace();
-        }
-    }
-
-    Logger getLogger () {
-        return logger;
-    }
-
-    private void closeConnection(HttpConnection conn) {
-        conn.close();
-        allConnections.remove(conn);
-        switch (conn.getState()) {
-        case REQUEST:
-            reqConnections.remove(conn);
-            break;
-        case RESPONSE:
-            rspConnections.remove(conn);
-            break;
-        case IDLE:
-            idleConnections.remove(conn);
-            break;
-        }
-        assert !reqConnections.remove(conn);
-        assert !rspConnections.remove(conn);
-        assert !idleConnections.remove(conn);
-    }
-
-        /* per exchange task */
-
-    class Exchange implements Runnable {
-        SocketChannel chan;
-        HttpConnection connection;
-        HttpContextImpl context;
-        InputStream rawin;
-        OutputStream rawout;
-        String protocol;
-        ExchangeImpl tx;
-        HttpContextImpl ctx;
-        boolean rejected = false;
-
-        Exchange (SocketChannel chan, String protocol, HttpConnection conn) throws IOException {
-            this.chan = chan;
-            this.connection = conn;
-            this.protocol = protocol;
-        }
-
-        public void run () {
-            /* context will be null for new connections */
-            context = connection.getHttpContext();
-            boolean newconnection;
-            SSLEngine engine = null;
-            String requestLine = null;
-            SSLStreams sslStreams = null;
-            try {
-                if (context != null ) {
-                    this.rawin = connection.getInputStream();
-                    this.rawout = connection.getRawOutputStream();
-                    newconnection = false;
-                } else {
-                    /* figure out what kind of connection this is */
-                    newconnection = true;
-                    if (https) {
-                        if (sslContext == null) {
-                            logger.warning ("SSL connection received. No https contxt created");
-                            throw new HttpError ("No SSL context established");
-                        }
-                        sslStreams = new SSLStreams (ServerImpl.this, sslContext, chan);
-                        rawin = sslStreams.getInputStream();
-                        rawout = sslStreams.getOutputStream();
-                        engine = sslStreams.getSSLEngine();
-                        connection.sslStreams = sslStreams;
-                    } else {
-                        rawin = new BufferedInputStream(
-                            new Request.ReadStream (
-                                ServerImpl.this, chan
-                        ));
-                        rawout = new Request.WriteStream (
-                            ServerImpl.this, chan
-                        );
-                    }
-                    connection.raw = rawin;
-                    connection.rawout = rawout;
-                }
-                Request req = new Request (rawin, rawout);
-                requestLine = req.requestLine();
-                if (requestLine == null) {
-                    /* connection closed */
-                    closeConnection(connection);
-                    return;
-                }
-                int space = requestLine.indexOf (' ');
-                if (space == -1) {
-                    reject (Code.HTTP_BAD_REQUEST,
-                            requestLine, "Bad request line");
-                    return;
-                }
-                String method = requestLine.substring (0, space);
-                int start = space+1;
-                space = requestLine.indexOf(' ', start);
-                if (space == -1) {
-                    reject (Code.HTTP_BAD_REQUEST,
-                            requestLine, "Bad request line");
-                    return;
-                }
-                String uriStr = requestLine.substring (start, space);
-                URI uri = new URI (uriStr);
-                start = space+1;
-                String version = requestLine.substring (start);
-                Headers headers = req.headers();
-                String s = headers.getFirst ("Transfer-encoding");
-                long clen = 0L;
-                if (s !=null && s.equalsIgnoreCase ("chunked")) {
-                    clen = -1L;
-                } else {
-                    s = headers.getFirst ("Content-Length");
-                    if (s != null) {
-                        clen = Long.parseLong(s);
-                    }
-                    if (clen == 0) {
-                        requestCompleted (connection);
-                    }
-                }
-                ctx = contexts.findContext (protocol, uri.getPath());
-                if (ctx == null) {
-                    reject (Code.HTTP_NOT_FOUND,
-                            requestLine, "No context found for request");
-                    return;
-                }
-                connection.setContext (ctx);
-                if (ctx.getHandler() == null) {
-                    reject (Code.HTTP_INTERNAL_ERROR,
-                            requestLine, "No handler for context");
-                    return;
-                }
-                tx = new ExchangeImpl (
-                    method, uri, req, clen, connection
-                );
-                String chdr = headers.getFirst("Connection");
-                Headers rheaders = tx.getResponseHeaders();
-
-                if (chdr != null && chdr.equalsIgnoreCase ("close")) {
-                    tx.close = true;
-                }
-                if (version.equalsIgnoreCase ("http/1.0")) {
-                    tx.http10 = true;
-                    if (chdr == null) {
-                        tx.close = true;
-                        rheaders.set ("Connection", "close");
-                    } else if (chdr.equalsIgnoreCase ("keep-alive")) {
-                        rheaders.set ("Connection", "keep-alive");
-                        int idle=(int)ServerConfig.getIdleInterval()/1000;
-                        int max=(int)ServerConfig.getMaxIdleConnections();
-                        String val = "timeout="+idle+", max="+max;
-                        rheaders.set ("Keep-Alive", val);
-                    }
-                }
-
-                if (newconnection) {
-                    connection.setParameters (
-                        rawin, rawout, chan, engine, sslStreams,
-                        sslContext, protocol, ctx, rawin
-                    );
-                }
-                /* check if client sent an Expect 100 Continue.
-                 * In that case, need to send an interim response.
-                 * In future API may be modified to allow app to
-                 * be involved in this process.
-                 */
-                String exp = headers.getFirst("Expect");
-                if (exp != null && exp.equalsIgnoreCase ("100-continue")) {
-                    logReply (100, requestLine, null);
-                    sendReply (
-                        Code.HTTP_CONTINUE, false, null
-                    );
-                }
-                /* uf is the list of filters seen/set by the user.
-                 * sf is the list of filters established internally
-                 * and which are not visible to the user. uc and sc
-                 * are the corresponding Filter.Chains.
-                 * They are linked together by a LinkHandler
-                 * so that they can both be invoked in one call.
-                 */
-                List<Filter> sf = ctx.getSystemFilters();
-                List<Filter> uf = ctx.getFilters();
-
-                Filter.Chain sc = new Filter.Chain(sf, ctx.getHandler());
-                Filter.Chain uc = new Filter.Chain(uf, new LinkHandler (sc));
-
-                /* set up the two stream references */
-                tx.getRequestBody();
-                tx.getResponseBody();
-                if (https) {
-                    uc.doFilter (new HttpsExchangeImpl (tx));
-                } else {
-                    uc.doFilter (new HttpExchangeImpl (tx));
-                }
-
-            } catch (IOException e1) {
-                logger.log (Level.FINER, "ServerImpl.Exchange (1)", e1);
-                closeConnection(connection);
-            } catch (NumberFormatException e3) {
-                reject (Code.HTTP_BAD_REQUEST,
-                        requestLine, "NumberFormatException thrown");
-            } catch (URISyntaxException e) {
-                reject (Code.HTTP_BAD_REQUEST,
-                        requestLine, "URISyntaxException thrown");
-            } catch (Exception e4) {
-                logger.log (Level.FINER, "ServerImpl.Exchange (2)", e4);
-                closeConnection(connection);
-            }
-        }
-
-        /* used to link to 2 or more Filter.Chains together */
-
-        class LinkHandler implements HttpHandler {
-            Filter.Chain nextChain;
-
-            LinkHandler (Filter.Chain nextChain) {
-                this.nextChain = nextChain;
-            }
-
-            public void handle (HttpExchange exchange) throws IOException {
-                nextChain.doFilter (exchange);
-            }
-        }
-
-        void reject (int code, String requestStr, String message) {
-            rejected = true;
-            logReply (code, requestStr, message);
-            sendReply (
-                code, false, "<h1>"+code+Code.msg(code)+"</h1>"+message
-            );
-            closeConnection(connection);
-        }
-
-        void sendReply (
-            int code, boolean closeNow, String text)
-        {
-            try {
-                StringBuilder builder = new StringBuilder (512);
-                builder.append ("HTTP/1.1 ")
-                    .append (code).append (Code.msg(code)).append ("\r\n");
-
-                if (text != null && text.length() != 0) {
-                    builder.append ("Content-Length: ")
-                        .append (text.length()).append ("\r\n")
-                        .append ("Content-Type: text/html\r\n");
-                } else {
-                    builder.append ("Content-Length: 0\r\n");
-                    text = "";
-                }
-                if (closeNow) {
-                    builder.append ("Connection: close\r\n");
-                }
-                builder.append ("\r\n").append (text);
-                String s = builder.toString();
-                byte[] b = s.getBytes("ISO8859_1");
-                rawout.write (b);
-                rawout.flush();
-                if (closeNow) {
-                    closeConnection(connection);
-                }
-            } catch (IOException e) {
-                logger.log (Level.FINER, "ServerImpl.sendReply", e);
-                closeConnection(connection);
-            }
-        }
-
-    }
-
-    void logReply (int code, String requestStr, String text) {
-        if (!logger.isLoggable(Level.FINE)) {
-            return;
-        }
-        if (text == null) {
-            text = "";
-        }
-        String r;
-        if (requestStr.length() > 80) {
-           r = requestStr.substring (0, 80) + "<TRUNCATED>";
-        } else {
-           r = requestStr;
-        }
-        String message = r + " [" + code + " " +
-                    Code.msg(code) + "] ("+text+")";
-        logger.fine (message);
-    }
-
-    long getTicks() {
-        return ticks;
-    }
-
-    public long getTime() {
-        return time;
-    }
-
-    void delay () {
-        Thread.yield();
-        try {
-            Thread.sleep (200);
-        } catch (InterruptedException e) {}
-    }
-
-    private int exchangeCount = 0;
-
-    synchronized void startExchange () {
-        exchangeCount ++;
-    }
-
-    synchronized int endExchange () {
-        exchangeCount --;
-        assert exchangeCount >= 0;
-        return exchangeCount;
-    }
-
-    HttpServer getWrapper () {
-        return wrapper;
-    }
-
-    void requestStarted (HttpConnection c) {
-        c.creationTime = getTime();
-        c.setState (State.REQUEST);
-        reqConnections.add (c);
-    }
-
-    // called after a request has been completely read
-    // by the server. This stops the timer which would
-    // close the connection if the request doesn't arrive
-    // quickly enough. It then starts the timer
-    // that ensures the client reads the response in a timely
-    // fashion.
-
-    void requestCompleted (HttpConnection c) {
-        assert c.getState() == State.REQUEST;
-        reqConnections.remove (c);
-        c.rspStartedTime = getTime();
-        rspConnections.add (c);
-        c.setState (State.RESPONSE);
-    }
-
-    // called after response has been sent
-    void responseCompleted (HttpConnection c) {
-        assert c.getState() == State.RESPONSE;
-        rspConnections.remove (c);
-        c.setState (State.IDLE);
-    }
-
-    /**
-     * TimerTask run every CLOCK_TICK ms
-     */
-    class ServerTimerTask extends TimerTask {
-        public void run () {
-            LinkedList<HttpConnection> toClose = new LinkedList<HttpConnection>();
-            time = System.currentTimeMillis();
-            ticks ++;
-            synchronized (idleConnections) {
-                for (HttpConnection c : idleConnections) {
-                    if (c.time <= time) {
-                        toClose.add (c);
-                    }
-                }
-                for (HttpConnection c : toClose) {
-                    idleConnections.remove (c);
-                    allConnections.remove (c);
-                    c.close();
-                }
-            }
-        }
-    }
-
-    class ServerTimerTask1 extends TimerTask {
-
-        // runs every TIMER_MILLIS
-        public void run () {
-            LinkedList<HttpConnection> toClose = new LinkedList<HttpConnection>();
-            time = System.currentTimeMillis();
-            synchronized (reqConnections) {
-                if (MAX_REQ_TIME != -1) {
-                    for (HttpConnection c : reqConnections) {
-                        if (c.creationTime + TIMER_MILLIS + MAX_REQ_TIME <= time) {
-                            toClose.add (c);
-                        }
-                    }
-                    for (HttpConnection c : toClose) {
-                        logger.log (Level.FINE, "closing: no request: " + c);
-                        reqConnections.remove (c);
-                        allConnections.remove (c);
-                        c.close();
-                    }
-                }
-            }
-            toClose = new LinkedList<HttpConnection>();
-            synchronized (rspConnections) {
-                if (MAX_RSP_TIME != -1) {
-                    for (HttpConnection c : rspConnections) {
-                        if (c.rspStartedTime + TIMER_MILLIS +MAX_RSP_TIME <= time) {
-                            toClose.add (c);
-                        }
-                    }
-                    for (HttpConnection c : toClose) {
-                        logger.log (Level.FINE, "closing: no response: " + c);
-                        rspConnections.remove (c);
-                        allConnections.remove (c);
-                        c.close();
-                    }
-                }
-            }
-        }
-    }
-
-    void logStackTrace (String s) {
-        logger.finest (s);
-        StringBuilder b = new StringBuilder ();
-        StackTraceElement[] e = Thread.currentThread().getStackTrace();
-        for (int i=0; i<e.length; i++) {
-            b.append (e[i].toString()).append("\n");
-        }
-        logger.finest (b.toString());
-    }
-
-    static long getTimeMillis(long secs) {
-        if (secs == -1) {
-            return -1;
-        } else {
-            return secs * 1000;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/StreamClosedException.java b/ojluni/src/main/java/sun/net/httpserver/StreamClosedException.java
deleted file mode 100755
index 4bbff5c..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/StreamClosedException.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2005, 2008, 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.
- */
-
-package sun.net.httpserver;
-
-import java.io.*;
-
-class StreamClosedException extends IOException {
-    private static final long serialVersionUID = -4485921499356327937L;
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/TimeSource.java b/ojluni/src/main/java/sun/net/httpserver/TimeSource.java
deleted file mode 100755
index 6a6827c..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/TimeSource.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.net.httpserver;
-
-interface TimeSource {
-    public long getTime();
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/UndefLengthOutputStream.java b/ojluni/src/main/java/sun/net/httpserver/UndefLengthOutputStream.java
deleted file mode 100755
index 2918e42..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/UndefLengthOutputStream.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2007, 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.
- */
-
-package sun.net.httpserver;
-
-import java.io.*;
-import java.net.*;
-import com.sun.net.httpserver.*;
-import com.sun.net.httpserver.spi.*;
-
-/**
- * a class which allows the caller to write an indefinite
- * number of bytes to an underlying stream , but without using
- * chunked encoding. Used for http/1.0 clients only
- * The underlying connection needs to be closed afterwards.
- */
-
-class UndefLengthOutputStream extends FilterOutputStream
-{
-    private boolean closed = false;
-    ExchangeImpl t;
-
-    UndefLengthOutputStream (ExchangeImpl t, OutputStream src) {
-        super (src);
-        this.t = t;
-    }
-
-    public void write (int b) throws IOException {
-        if (closed) {
-            throw new IOException ("stream closed");
-        }
-        out.write(b);
-    }
-
-    public void write (byte[]b, int off, int len) throws IOException {
-        if (closed) {
-            throw new IOException ("stream closed");
-        }
-        out.write(b, off, len);
-    }
-
-    public void close () throws IOException {
-        if (closed) {
-            return;
-        }
-        closed = true;
-        flush();
-        LeftOverInputStream is = t.getOriginalInputStream();
-        if (!is.isClosed()) {
-            try {
-                is.close();
-            } catch (IOException e) {}
-        }
-        WriteFinishedEvent e = new WriteFinishedEvent (t);
-        t.getHttpContext().getServerImpl().addEvent (e);
-    }
-
-    // flush is a pass-through
-}
diff --git a/ojluni/src/main/java/sun/net/httpserver/UnmodifiableHeaders.java b/ojluni/src/main/java/sun/net/httpserver/UnmodifiableHeaders.java
deleted file mode 100755
index 661f6a0..0000000
--- a/ojluni/src/main/java/sun/net/httpserver/UnmodifiableHeaders.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.net.httpserver;
-
-import java.util.*;
-import com.sun.net.httpserver.*;
-
-class UnmodifiableHeaders extends Headers {
-
-        Headers map;
-
-        UnmodifiableHeaders(Headers map) {
-            this.map = map;
-        }
-
-        public int size() {return map.size();}
-
-        public boolean isEmpty() {return map.isEmpty();}
-
-        public boolean containsKey(Object key) {
-            return map.containsKey (key);
-        }
-
-        public boolean containsValue(Object value) {
-            return map.containsValue(value);
-        }
-
-        public List<String> get(Object key) {
-            return map.get(key);
-        }
-
-        public String getFirst (String key) {
-            return map.getFirst(key);
-        }
-
-
-        public List<String> put(String key, List<String> value) {
-            return map.put (key, value);
-        }
-
-        public void add (String key, String value) {
-            throw new UnsupportedOperationException ("unsupported operation");
-        }
-
-        public void set (String key, String value) {
-            throw new UnsupportedOperationException ("unsupported operation");
-        }
-
-        public List<String> remove(Object key) {
-            throw new UnsupportedOperationException ("unsupported operation");
-        }
-
-        public void putAll(Map<? extends String,? extends List<String>> t)  {
-            throw new UnsupportedOperationException ("unsupported operation");
-        }
-
-        public void clear() {
-            throw new UnsupportedOperationException ("unsupported operation");
-        }
-
-        public Set<String> keySet() {
-            return Collections.unmodifiableSet (map.keySet());
-        }
-
-        public Collection<List<String>> values() {
-            return Collections.unmodifiableCollection(map.values());
-        }
-
-        /* TODO check that contents of set are not modifable : security */
-
-        public Set<Map.Entry<String, List<String>>> entrySet() {
-            return Collections.unmodifiableSet (map.entrySet());
-        }
-
-        public boolean equals(Object o) {return map.equals(o);}
-
-        public int hashCode() {return map.hashCode();}
-    }
diff --git a/ojluni/src/main/java/sun/net/spi/nameservice/dns/DNSNameService.java b/ojluni/src/main/java/sun/net/spi/nameservice/dns/DNSNameService.java
deleted file mode 100755
index 9142de0..0000000
--- a/ojluni/src/main/java/sun/net/spi/nameservice/dns/DNSNameService.java
+++ /dev/null
@@ -1,501 +0,0 @@
-/*
- * Copyright (c) 2000, 2010, 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.
- */
-
-package sun.net.spi.nameservice.dns;
-
-import java.lang.ref.SoftReference;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import javax.naming.*;
-import javax.naming.directory.*;
-import javax.naming.spi.NamingManager;
-import java.util.*;
-import sun.net.util.IPAddressUtil;
-import sun.net.dns.ResolverConfiguration;
-import sun.net.spi.nameservice.*;
-import java.security.AccessController;
-import sun.security.action.*;
-
-/*
- * A name service provider based on JNDI-DNS.
- */
-
-public final class DNSNameService implements NameService {
-
-    // List of domains specified by property
-    private LinkedList<String> domainList = null;
-
-    // JNDI-DNS URL for name servers specified via property
-    private String nameProviderUrl = null;
-
-    // Per-thread soft cache of the last temporary context
-    private static ThreadLocal<SoftReference<ThreadContext>> contextRef =
-            new ThreadLocal<>();
-
-    // Simple class to encapsulate the temporary context
-    private static class ThreadContext {
-        private DirContext dirCtxt;
-        private List<String> nsList;
-
-        public ThreadContext(DirContext dirCtxt, List<String> nsList) {
-            this.dirCtxt = dirCtxt;
-            this.nsList = nsList;
-        }
-
-        public DirContext dirContext() {
-            return dirCtxt;
-        }
-
-        public List<String> nameservers() {
-            return nsList;
-        }
-    }
-
-    // Returns a per-thread DirContext
-    private DirContext getTemporaryContext() throws NamingException {
-        SoftReference<ThreadContext> ref = contextRef.get();
-        ThreadContext thrCtxt = null;
-        List<String> nsList = null;
-
-        // if no property specified we need to obtain the list of servers
-        //
-        if (nameProviderUrl == null)
-            nsList = ResolverConfiguration.open().nameservers();
-
-        // if soft reference hasn't been gc'ed no property has been
-        // specified then we need to check if the DNS configuration
-        // has changed.
-        //
-        if ((ref != null) && ((thrCtxt = ref.get()) != null)) {
-            if (nameProviderUrl == null) {
-                if (!thrCtxt.nameservers().equals(nsList)) {
-                    // DNS configuration has changed
-                    thrCtxt = null;
-                }
-            }
-        }
-
-        // new thread context needs to be created
-        if (thrCtxt == null) {
-            final Hashtable<String,Object> env = new Hashtable<>();
-            env.put("java.naming.factory.initial",
-                    "com.sun.jndi.dns.DnsContextFactory");
-
-            // If no nameservers property specified we create provider URL
-            // based on system configured name servers
-            //
-            String provUrl = nameProviderUrl;
-            if (provUrl == null) {
-                provUrl = createProviderURL(nsList);
-                if (provUrl.length() == 0) {
-                    throw new RuntimeException("bad nameserver configuration");
-                }
-            }
-            env.put("java.naming.provider.url", provUrl);
-
-            // Need to create directory context in privileged block
-            // as JNDI-DNS needs to resolve the name servers.
-            //
-            DirContext dirCtxt;
-            try {
-                dirCtxt = java.security.AccessController.doPrivileged(
-                        new java.security.PrivilegedExceptionAction<DirContext>() {
-                            public DirContext run() throws NamingException {
-                                // Create the DNS context using NamingManager rather than using
-                                // the initial context constructor. This avoids having the initial
-                                // context constructor call itself.
-                                Context ctx = NamingManager.getInitialContext(env);
-                                if (!(ctx instanceof DirContext)) {
-                                    return null; // cannot create a DNS context
-                                }
-                                return (DirContext)ctx;
-                            }
-                    });
-            } catch (java.security.PrivilegedActionException pae) {
-                throw (NamingException)pae.getException();
-            }
-
-            // create new soft reference to our thread context
-            //
-            thrCtxt = new ThreadContext(dirCtxt, nsList);
-            contextRef.set(new SoftReference(thrCtxt));
-        }
-
-        return thrCtxt.dirContext();
-    }
-
-    /**
-     * Resolves the specified entry in DNS.
-     *
-     * Canonical name records are recursively resolved (to a maximum
-     * of 5 to avoid performance hit and potential CNAME loops).
-     *
-     * @param   ctx     JNDI directory context
-     * @param   name    name to resolve
-     * @param   ids     record types to search
-     * @param   depth   call depth - pass as 0.
-     *
-     * @return  array list with results (will have at least on entry)
-     *
-     * @throws  UnknownHostException if lookup fails or other error.
-     */
-    private ArrayList<String> resolve(final DirContext ctx, final String name,
-                                      final String[] ids, int depth)
-            throws UnknownHostException
-    {
-        ArrayList<String> results = new ArrayList<>();
-        Attributes attrs;
-
-        // do the query
-        try {
-            attrs = java.security.AccessController.doPrivileged(
-                    new java.security.PrivilegedExceptionAction<Attributes>() {
-                        public Attributes run() throws NamingException {
-                            return ctx.getAttributes(name, ids);
-                        }
-                });
-        } catch (java.security.PrivilegedActionException pae) {
-            throw new UnknownHostException(pae.getException().getMessage());
-        }
-
-        // non-requested type returned so enumeration is empty
-        NamingEnumeration<? extends Attribute> ne = attrs.getAll();
-        if (!ne.hasMoreElements()) {
-            throw new UnknownHostException("DNS record not found");
-        }
-
-        // iterate through the returned attributes
-        UnknownHostException uhe = null;
-        try {
-            while (ne.hasMoreElements()) {
-                Attribute attr = ne.next();
-                String attrID = attr.getID();
-
-                for (NamingEnumeration e = attr.getAll(); e.hasMoreElements();) {
-                    String addr = (String)e.next();
-
-                    // for canoncical name records do recursive lookup
-                    // - also check for CNAME loops to avoid stack overflow
-
-                    if (attrID.equals("CNAME")) {
-                        if (depth > 4) {
-                            throw new UnknownHostException(name + ": possible CNAME loop");
-                        }
-                        try {
-                            results.addAll(resolve(ctx, addr, ids, depth+1));
-                        } catch (UnknownHostException x) {
-                            // canonical name can't be resolved.
-                            if (uhe == null)
-                                uhe = x;
-                        }
-                    } else {
-                        results.add(addr);
-                    }
-                }
-            }
-        } catch (NamingException nx) {
-            throw new UnknownHostException(nx.getMessage());
-        }
-
-        // pending exception as canonical name could not be resolved.
-        if (results.isEmpty() && uhe != null) {
-            throw uhe;
-        }
-
-        return results;
-    }
-
-    public DNSNameService() throws Exception {
-
-        // default domain
-        String domain = AccessController.doPrivileged(
-            new GetPropertyAction("sun.net.spi.nameservice.domain"));
-        if (domain != null && domain.length() > 0) {
-            domainList = new LinkedList();
-            domainList.add(domain);
-        }
-
-        // name servers
-        String nameservers = AccessController.doPrivileged(
-            new GetPropertyAction("sun.net.spi.nameservice.nameservers"));
-        if (nameservers != null && nameservers.length() > 0) {
-            nameProviderUrl = createProviderURL(nameservers);
-            if (nameProviderUrl.length() == 0) {
-                throw new RuntimeException("malformed nameservers property");
-            }
-
-        } else {
-
-            // no property specified so check host DNS resolver configured
-            // with at least one nameserver in dotted notation.
-            //
-            List<String> nsList = ResolverConfiguration.open().nameservers();
-            if (nsList.isEmpty()) {
-                throw new RuntimeException("no nameservers provided");
-            }
-            boolean found = false;
-            for (String addr: nsList) {
-                if (IPAddressUtil.isIPv4LiteralAddress(addr) ||
-                    IPAddressUtil.isIPv6LiteralAddress(addr)) {
-                    found = true;
-                    break;
-                }
-            }
-            if (!found) {
-                throw new RuntimeException("bad nameserver configuration");
-            }
-        }
-    }
-
-    public InetAddress[] lookupAllHostAddr(String host) throws UnknownHostException {
-
-        // DNS records that we search for
-        String[] ids = {"A", "AAAA", "CNAME"};
-
-        // first get directory context
-        DirContext ctx;
-        try {
-            ctx = getTemporaryContext();
-        } catch (NamingException nx) {
-            throw new Error(nx);
-        }
-
-        ArrayList results = null;
-        UnknownHostException uhe = null;
-
-        // If host already contains a domain name then just look it up
-        if (host.indexOf('.') >= 0) {
-            try {
-                results = resolve(ctx, host, ids, 0);
-            } catch (UnknownHostException x) {
-                uhe = x;
-            }
-        }
-
-        // Here we try to resolve the host using the domain suffix or
-        // the domain suffix search list. If the host cannot be resolved
-        // using the domain suffix then we attempt devolution of
-        // the suffix - eg: if we are searching for "foo" and our
-        // domain suffix is "eng.sun.com" we will try to resolve
-        // "foo.eng.sun.com" and "foo.sun.com".
-        // It's not normal to attempt devolation with domains on the
-        // domain suffix search list - however as ResolverConfiguration
-        // doesn't distinguish domain or search list in the list it
-        // returns we approximate by doing devolution on the domain
-        // suffix if the list has one entry.
-
-        if (results == null) {
-            List<String> searchList = null;
-            Iterator<String> i;
-            boolean usingSearchList = false;
-
-            if (domainList != null) {
-                i = domainList.iterator();
-            } else {
-                searchList = ResolverConfiguration.open().searchlist();
-                if (searchList.size() > 1) {
-                    usingSearchList = true;
-                }
-                i = searchList.iterator();
-            }
-
-            // iterator through each domain suffix
-            while (i.hasNext()) {
-                String parentDomain = i.next();
-                int start = 0;
-                while ((start = parentDomain.indexOf(".")) != -1
-                       && start < parentDomain.length() -1) {
-                    try {
-                        results = resolve(ctx, host+"."+parentDomain, ids, 0);
-                        break;
-                    } catch (UnknownHostException x) {
-                        uhe = x;
-                        if (usingSearchList) {
-                            break;
-                        }
-
-                        // devolve
-                        parentDomain = parentDomain.substring(start+1);
-                    }
-                }
-                if (results != null) {
-                    break;
-                }
-            }
-        }
-
-        // finally try the host if it doesn't have a domain name
-        if (results == null && (host.indexOf('.') < 0)) {
-            results = resolve(ctx, host, ids, 0);
-        }
-
-        // if not found then throw the (last) exception thrown.
-        if (results == null) {
-            assert uhe != null;
-            throw uhe;
-        }
-
-        /**
-         * Convert the array list into a byte aray list - this
-         * filters out any invalid IPv4/IPv6 addresses.
-         */
-        assert results.size() > 0;
-        InetAddress[] addrs = new InetAddress[results.size()];
-        int count = 0;
-        for (int i=0; i<results.size(); i++) {
-            String addrString = (String)results.get(i);
-            byte addr[] = IPAddressUtil.textToNumericFormatV4(addrString);
-            if (addr == null) {
-                addr = IPAddressUtil.textToNumericFormatV6(addrString);
-            }
-            if (addr != null) {
-                addrs[count++] = InetAddress.getByAddress(host, addr);
-            }
-        }
-
-        /**
-         * If addresses are filtered then we need to resize the
-         * array. Additionally if all addresses are filtered then
-         * we throw an exception.
-         */
-        if (count == 0) {
-            throw new UnknownHostException(host + ": no valid DNS records");
-        }
-        if (count < results.size()) {
-            InetAddress[] tmp = new InetAddress[count];
-            for (int i=0; i<count; i++) {
-                tmp[i] = addrs[i];
-            }
-            addrs = tmp;
-        }
-
-        return addrs;
-    }
-
-    /**
-     * Reverse lookup code. I.E: find a host name from an IP address.
-     * IPv4 addresses are mapped in the IN-ADDR.ARPA. top domain, while
-     * IPv6 addresses can be in IP6.ARPA or IP6.INT.
-     * In both cases the address has to be converted into a dotted form.
-     */
-    public String getHostByAddr(byte[] addr) throws UnknownHostException {
-        String host = null;
-        try {
-            String literalip = "";
-            String[] ids = { "PTR" };
-            DirContext ctx;
-            ArrayList<String> results = null;
-            try {
-                ctx = getTemporaryContext();
-            } catch (NamingException nx) {
-                throw new Error(nx);
-            }
-            if (addr.length == 4) { // IPv4 Address
-                for (int i = addr.length-1; i >= 0; i--) {
-                    literalip += (addr[i] & 0xff) +".";
-                }
-                literalip += "IN-ADDR.ARPA.";
-
-                results = resolve(ctx, literalip, ids, 0);
-                host = results.get(0);
-            } else if (addr.length == 16) { // IPv6 Address
-                /**
-                 * Because RFC 3152 changed the root domain name for reverse
-                 * lookups from IP6.INT. to IP6.ARPA., we need to check
-                 * both. I.E. first the new one, IP6.ARPA, then if it fails
-                 * the older one, IP6.INT
-                 */
-
-                for (int i = addr.length-1; i >= 0; i--) {
-                    literalip += Integer.toHexString((addr[i] & 0x0f)) +"."
-                        +Integer.toHexString((addr[i] & 0xf0) >> 4) +".";
-                }
-                String ip6lit = literalip + "IP6.ARPA.";
-
-                try {
-                    results = resolve(ctx, ip6lit, ids, 0);
-                    host = results.get(0);
-                } catch (UnknownHostException e) {
-                    host = null;
-                }
-                if (host == null) {
-                    // IP6.ARPA lookup failed, let's try the older IP6.INT
-                    ip6lit = literalip + "IP6.INT.";
-                    results = resolve(ctx, ip6lit, ids, 0);
-                    host = results.get(0);
-                }
-            }
-        } catch (Exception e) {
-            throw new UnknownHostException(e.getMessage());
-        }
-        // Either we couldn't find it or the address was neither IPv4 or IPv6
-        if (host == null)
-            throw new UnknownHostException();
-        // remove trailing dot
-        if (host.endsWith(".")) {
-            host = host.substring(0, host.length() - 1);
-        }
-        return host;
-    }
-
-
-    // ---------
-
-    private static void appendIfLiteralAddress(String addr, StringBuffer sb) {
-        if (IPAddressUtil.isIPv4LiteralAddress(addr)) {
-            sb.append("dns://" + addr + " ");
-        } else {
-            if (IPAddressUtil.isIPv6LiteralAddress(addr)) {
-                sb.append("dns://[" + addr + "] ");
-            }
-        }
-    }
-
-    /*
-     * @return String containing the JNDI-DNS provider URL
-     *         corresponding to the supplied List of nameservers.
-     */
-    private static String createProviderURL(List<String> nsList) {
-        StringBuffer sb = new StringBuffer();
-        for (String s: nsList) {
-            appendIfLiteralAddress(s, sb);
-        }
-        return sb.toString();
-    }
-
-    /*
-     * @return String containing the JNDI-DNS provider URL
-     *         corresponding to the list of nameservers
-     *         contained in the provided str.
-     */
-    private static String createProviderURL(String str) {
-        StringBuffer sb = new StringBuffer();
-        StringTokenizer st = new StringTokenizer(str, ",");
-        while (st.hasMoreTokens()) {
-            appendIfLiteralAddress(st.nextToken(), sb);
-        }
-        return sb.toString();
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/spi/nameservice/dns/DNSNameServiceDescriptor.java b/ojluni/src/main/java/sun/net/spi/nameservice/dns/DNSNameServiceDescriptor.java
deleted file mode 100755
index b18e4b1..0000000
--- a/ojluni/src/main/java/sun/net/spi/nameservice/dns/DNSNameServiceDescriptor.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 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.
- */
-
-package sun.net.spi.nameservice.dns;
-
-import sun.net.spi.nameservice.*;
-
-public final class DNSNameServiceDescriptor implements NameServiceDescriptor {
-    /**
-     * Create a new instance of the corresponding name service.
-     */
-    public NameService createNameService() throws Exception {
-        return new DNSNameService();
-    }
-
-    /**
-     * Returns this service provider's name
-     *
-     */
-    public String getProviderName() {
-        return "sun";
-    }
-
-    /**
-     * Returns this name service type
-     * "dns" "nis" etc
-     */
-    public String getType() {
-        return "dns";
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/content/audio/aiff.java b/ojluni/src/main/java/sun/net/www/content/audio/aiff.java
deleted file mode 100755
index 802942d..0000000
--- a/ojluni/src/main/java/sun/net/www/content/audio/aiff.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Basic .aiff audio handler.
- * @author  Jeff Nisewanger
- */
-package sun.net.www.content.audio;
-
-import java.net.*;
-import java.io.IOException;
-import sun.applet.AppletAudioClip;
-
-/**
- * Returns an AppletAudioClip object.
- */
-public class aiff extends ContentHandler {
-    public Object getContent(URLConnection uc) throws IOException {
-        return new AppletAudioClip(uc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/content/audio/basic.java b/ojluni/src/main/java/sun/net/www/content/audio/basic.java
deleted file mode 100755
index 0389a3a..0000000
--- a/ojluni/src/main/java/sun/net/www/content/audio/basic.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Basic .au and .snd audio handler.
- * @author  Jeff Nisewanger
- */
-package sun.net.www.content.audio;
-
-import java.net.*;
-import java.io.IOException;
-import sun.applet.AppletAudioClip;
-
-/**
- * Returns an AppletAudioClip object.
- * This provides backwards compatibility with the behavior
- * of ClassLoader.getResource().getContent() on JDK1.1.
- */
-public class basic extends ContentHandler {
-    public Object getContent(URLConnection uc) throws IOException {
-        return new AppletAudioClip(uc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/content/audio/wav.java b/ojluni/src/main/java/sun/net/www/content/audio/wav.java
deleted file mode 100755
index 9d76ee1..0000000
--- a/ojluni/src/main/java/sun/net/www/content/audio/wav.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Basic .wav audio handler.
- * @author  Jeff Nisewanger
- */
-package sun.net.www.content.audio;
-
-import java.net.*;
-import java.io.IOException;
-import sun.applet.AppletAudioClip;
-
-/**
- * Returns an AppletAudioClip object.
- */
-public class wav extends ContentHandler {
-    public Object getContent(URLConnection uc) throws IOException {
-        return new AppletAudioClip(uc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/content/audio/x_aiff.java b/ojluni/src/main/java/sun/net/www/content/audio/x_aiff.java
deleted file mode 100755
index 1c7d94b..0000000
--- a/ojluni/src/main/java/sun/net/www/content/audio/x_aiff.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Basic .aiff audio handler.
- * @author  Jeff Nisewanger
- */
-package sun.net.www.content.audio;
-
-import java.net.*;
-import java.io.IOException;
-import sun.applet.AppletAudioClip;
-
-/**
- * Returns an AppletAudioClip object.
- */
-public class x_aiff extends ContentHandler {
-    public Object getContent(URLConnection uc) throws IOException {
-        return new AppletAudioClip(uc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/content/audio/x_wav.java b/ojluni/src/main/java/sun/net/www/content/audio/x_wav.java
deleted file mode 100755
index 4aa765d..0000000
--- a/ojluni/src/main/java/sun/net/www/content/audio/x_wav.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Basic .wav audio handler.
- * @author  Jeff Nisewanger
- */
-package sun.net.www.content.audio;
-
-import java.net.*;
-import java.io.IOException;
-import sun.applet.AppletAudioClip;
-
-/**
- * Returns an AppletAudioClip object.
- */
-public class x_wav extends ContentHandler {
-    public Object getContent(URLConnection uc) throws IOException {
-        return new AppletAudioClip(uc);
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/content/image/gif.java b/ojluni/src/main/java/sun/net/www/content/image/gif.java
deleted file mode 100755
index d388fad..0000000
--- a/ojluni/src/main/java/sun/net/www/content/image/gif.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 1994, 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.
- */
-
-package sun.net.www.content.image;
-
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.*;
-import sun.awt.image.*;
-import java.io.InputStream;
-import java.io.IOException;
-import java.awt.Image;
-import java.awt.Toolkit;
-
-
-public class gif extends ContentHandler {
-    public Object getContent(URLConnection urlc) throws java.io.IOException {
-        return new URLImageSource(urlc);
-    }
-
-    public Object getContent(URLConnection urlc, Class[] classes) throws IOException {
-        for (int i = 0; i < classes.length; i++) {
-          if (classes[i].isAssignableFrom(URLImageSource.class)) {
-                return new URLImageSource(urlc);
-          }
-          if (classes[i].isAssignableFrom(Image.class)) {
-            Toolkit tk = Toolkit.getDefaultToolkit();
-            return tk.createImage(new URLImageSource(urlc));
-          }
-        }
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/content/image/jpeg.java b/ojluni/src/main/java/sun/net/www/content/image/jpeg.java
deleted file mode 100755
index 382d363..0000000
--- a/ojluni/src/main/java/sun/net/www/content/image/jpeg.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1995, 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.
- */
-
-package sun.net.www.content.image;
-
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.*;
-import sun.awt.image.*;
-import java.io.InputStream;
-import java.io.IOException;
-import java.awt.Image;
-import java.awt.Toolkit;
-
-public class jpeg extends ContentHandler {
-    public Object getContent(URLConnection urlc) throws java.io.IOException {
-        return new URLImageSource(urlc);
-    }
-
-    public Object getContent(URLConnection urlc, Class[] classes) throws IOException {
-        for (int i = 0; i < classes.length; i++) {
-          if (classes[i].isAssignableFrom(URLImageSource.class)) {
-                return new URLImageSource(urlc);
-          }
-          if (classes[i].isAssignableFrom(Image.class)) {
-            Toolkit tk = Toolkit.getDefaultToolkit();
-            return tk.createImage(new URLImageSource(urlc));
-          }
-        }
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/content/image/png.java b/ojluni/src/main/java/sun/net/www/content/image/png.java
deleted file mode 100755
index 607402c..0000000
--- a/ojluni/src/main/java/sun/net/www/content/image/png.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.
- */
-
-package sun.net.www.content.image;
-
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.*;
-import java.io.InputStream;
-import java.io.IOException;
-import sun.awt.image.*;
-import java.awt.Image;
-import java.awt.Toolkit;
-
-public class png extends ContentHandler {
-    public Object getContent(URLConnection urlc) throws java.io.IOException {
-        return new URLImageSource(urlc);
-    }
-
-    public Object getContent(URLConnection urlc, Class[] classes) throws IOException {
-        for (int i = 0; i < classes.length; i++) {
-          if (classes[i].isAssignableFrom(URLImageSource.class)) {
-                return new URLImageSource(urlc);
-          }
-          if (classes[i].isAssignableFrom(Image.class)) {
-            Toolkit tk = Toolkit.getDefaultToolkit();
-            return tk.createImage(new URLImageSource(urlc));
-          }
-        }
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/content/image/x_xbitmap.java b/ojluni/src/main/java/sun/net/www/content/image/x_xbitmap.java
deleted file mode 100755
index eea24fd..0000000
--- a/ojluni/src/main/java/sun/net/www/content/image/x_xbitmap.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 1994, 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.
- */
-
-package sun.net.www.content.image;
-
-import java.net.*;
-import sun.awt.image.*;
-import java.awt.Image;
-import java.awt.Toolkit;
-
-public class x_xbitmap extends ContentHandler {
-    public Object getContent(URLConnection urlc) throws java.io.IOException {
-        return new URLImageSource(urlc);
-    }
-
-    public Object getContent(URLConnection urlc, Class[] classes) throws java.io.IOException {
-        for (int i = 0; i < classes.length; i++) {
-          if (classes[i].isAssignableFrom(URLImageSource.class)) {
-                return new URLImageSource(urlc);
-          }
-          if (classes[i].isAssignableFrom(Image.class)) {
-            Toolkit tk = Toolkit.getDefaultToolkit();
-            return tk.createImage(new URLImageSource(urlc));
-          }
-        }
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/content/image/x_xpixmap.java b/ojluni/src/main/java/sun/net/www/content/image/x_xpixmap.java
deleted file mode 100755
index 31e83aa..0000000
--- a/ojluni/src/main/java/sun/net/www/content/image/x_xpixmap.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 1994, 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.
- */
-
-package sun.net.www.content.image;
-
-import java.net.*;
-import sun.awt.image.*;
-import java.awt.Image;
-import java.awt.Toolkit;
-
-public class x_xpixmap extends ContentHandler {
-    public Object getContent(URLConnection urlc) throws java.io.IOException {
-        return new URLImageSource(urlc);
-    }
-
-    public Object getContent(URLConnection urlc, Class[] classes) throws java.io.IOException {
-        for (int i = 0; i < classes.length; i++) {
-          if (classes[i].isAssignableFrom(URLImageSource.class)) {
-                return new URLImageSource(urlc);
-          }
-          if (classes[i].isAssignableFrom(Image.class)) {
-            Toolkit tk = Toolkit.getDefaultToolkit();
-            return tk.createImage(new URLImageSource(urlc));
-          }
-        }
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/content/text/Generic.java b/ojluni/src/main/java/sun/net/www/content/text/Generic.java
deleted file mode 100755
index 800c5c7..0000000
--- a/ojluni/src/main/java/sun/net/www/content/text/Generic.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 1994, 1995, 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.
- */
-
-/*
- * Generic text file handler
- */
-package sun.net.www.content.text;
-
-public class Generic extends plain {
-    /* nothing to do since Generic is identical to plain! */
-}
diff --git a/ojluni/src/main/java/sun/net/www/content/text/PlainTextInputStream.java b/ojluni/src/main/java/sun/net/www/content/text/PlainTextInputStream.java
deleted file mode 100755
index 6291cfb..0000000
--- a/ojluni/src/main/java/sun/net/www/content/text/PlainTextInputStream.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1996, 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.
- */
-
-package sun.net.www.content.text;
-import java.io.InputStream;
-import java.io.FilterInputStream;
-
-/**
- * PlainTextInputStream class extends the FilterInputStream class.
- * Currently all calls to the PlainTextInputStream object will call
- * the corresponding methods in the FilterInputStream class.  Hence
- * for now its use is more semantic.
- *
- * @author Sunita Mani
- */
-public class PlainTextInputStream extends FilterInputStream {
-
-    /**
-     * Calls FilterInputStream's constructor.
-     * @param an InputStream
-     */
-    PlainTextInputStream(InputStream is) {
-        super(is);
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/content/text/plain.java b/ojluni/src/main/java/sun/net/www/content/text/plain.java
deleted file mode 100755
index 3283655..0000000
--- a/ojluni/src/main/java/sun/net/www/content/text/plain.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1994, 1996, 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.
- */
-
-/**
- * Plain text file handler.
- * @author  Steven B. Byrne
- */
-package sun.net.www.content.text;
-import java.net.*;
-import java.io.InputStream;
-import java.io.IOException;
-
-public class plain extends ContentHandler {
-    /**
-     * Returns a PlainTextInputStream object from which data
-     * can be read.
-     */
-    public Object getContent(URLConnection uc) {
-        try {
-            InputStream is = uc.getInputStream();
-            return new PlainTextInputStream(uc.getInputStream());
-        } catch (IOException e) {
-            return "Error reading document:\n" + e.toString();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/protocol/FileURLConnection.java b/ojluni/src/main/java/sun/net/www/protocol/FileURLConnection.java
deleted file mode 100644
index 1997cb0..0000000
--- a/ojluni/src/main/java/sun/net/www/protocol/FileURLConnection.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Copyright (c) 1995, 2010, 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.
- */
-
-/**
- * Open an file input stream given a URL.
- * @author      James Gosling
- * @author      Steven B. Byrne
- */
-
-package sun.net.www.protocol.file;
-
-import java.net.URL;
-import java.net.FileNameMap;
-import java.io.*;
-import java.text.Collator;
-import java.security.Permission;
-import sun.net.*;
-import sun.net.www.*;
-import java.util.*;
-import java.text.SimpleDateFormat;
-
-import sun.security.action.GetPropertyAction;
-import sun.security.action.GetIntegerAction;
-import sun.security.action.GetBooleanAction;
-
-public class FileURLConnection extends URLConnection {
-
-    static String CONTENT_LENGTH = "content-length";
-    static String CONTENT_TYPE = "content-type";
-    static String TEXT_PLAIN = "text/plain";
-    static String LAST_MODIFIED = "last-modified";
-
-    String contentType;
-    InputStream is;
-
-    File file;
-    String filename;
-    boolean isDirectory = false;
-    boolean exists = false;
-    List<String> files;
-
-    long length = -1;
-    long lastModified = 0;
-
-    protected FileURLConnection(URL u, File file) {
-        super(u);
-        this.file = file;
-    }
-
-    /*
-     * Note: the semantics of FileURLConnection object is that the
-     * results of the various URLConnection calls, such as
-     * getContentType, getInputStream or getContentLength reflect
-     * whatever was true when connect was called.
-     */
-    public void connect() throws IOException {
-        if (!connected) {
-            try {
-                filename = file.toString();
-                isDirectory = file.isDirectory();
-                if (isDirectory) {
-                    String[] fileList = file.list();
-                    if (fileList == null)
-                        throw new FileNotFoundException(filename + " exists, but is not accessible");
-                    files = Arrays.<String>asList(fileList);
-                } else {
-
-                    is = new BufferedInputStream(new FileInputStream(filename));
-
-                    // Check if URL should be metered
-                    boolean meteredInput = ProgressMonitor.getDefault().shouldMeterInput(url, "GET");
-                    if (meteredInput)   {
-                        ProgressSource pi = new ProgressSource(url, "GET", file.length());
-                        is = new MeteredStream(is, pi, file.length());
-                    }
-                }
-            } catch (IOException e) {
-                throw e;
-            }
-            connected = true;
-        }
-    }
-
-    private boolean initializedHeaders = false;
-
-    private void initializeHeaders() {
-        try {
-            connect();
-            exists = file.exists();
-        } catch (IOException e) {
-        }
-        if (!initializedHeaders || !exists) {
-            length = file.length();
-            lastModified = file.lastModified();
-
-            if (!isDirectory) {
-                FileNameMap map = java.net.URLConnection.getFileNameMap();
-                contentType = map.getContentTypeFor(filename);
-                if (contentType != null) {
-                    properties.add(CONTENT_TYPE, contentType);
-                }
-                properties.add(CONTENT_LENGTH, String.valueOf(length));
-
-                /*
-                 * Format the last-modified field into the preferred
-                 * Internet standard - ie: fixed-length subset of that
-                 * defined by RFC 1123
-                 */
-                if (lastModified != 0) {
-                    Date date = new Date(lastModified);
-                    SimpleDateFormat fo =
-                        new SimpleDateFormat ("EEE, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US);
-                    fo.setTimeZone(TimeZone.getTimeZone("GMT"));
-                    properties.add(LAST_MODIFIED, fo.format(date));
-                }
-            } else {
-                properties.add(CONTENT_TYPE, TEXT_PLAIN);
-            }
-            initializedHeaders = true;
-        }
-    }
-
-    public String getHeaderField(String name) {
-        initializeHeaders();
-        return super.getHeaderField(name);
-    }
-
-    public String getHeaderField(int n) {
-        initializeHeaders();
-        return super.getHeaderField(n);
-    }
-
-    public int getContentLength() {
-        initializeHeaders();
-        if (length > Integer.MAX_VALUE)
-            return -1;
-        return (int) length;
-    }
-
-    public long getContentLengthLong() {
-        initializeHeaders();
-        return length;
-    }
-
-    public String getHeaderFieldKey(int n) {
-        initializeHeaders();
-        return super.getHeaderFieldKey(n);
-    }
-
-    public MessageHeader getProperties() {
-        initializeHeaders();
-        return super.getProperties();
-    }
-
-    public long getLastModified() {
-        initializeHeaders();
-        return lastModified;
-    }
-
-    public synchronized InputStream getInputStream()
-        throws IOException {
-
-        int iconHeight;
-        int iconWidth;
-
-        connect();
-
-        if (is == null) {
-            if (isDirectory) {
-                FileNameMap map = java.net.URLConnection.getFileNameMap();
-
-                StringBuffer buf = new StringBuffer();
-
-                if (files == null) {
-                    throw new FileNotFoundException(filename);
-                }
-
-                Collections.sort(files, Collator.getInstance());
-
-                for (int i = 0 ; i < files.size() ; i++) {
-                    String fileName = files.get(i);
-                    buf.append(fileName);
-                    buf.append("\n");
-                }
-                // Put it into a (default) locale-specific byte-stream.
-                is = new ByteArrayInputStream(buf.toString().getBytes());
-            } else {
-                throw new FileNotFoundException(filename);
-            }
-        }
-        return is;
-    }
-
-    Permission permission;
-
-    /* since getOutputStream isn't supported, only read permission is
-     * relevant
-     */
-    public Permission getPermission() throws IOException {
-        if (permission == null) {
-            String decodedPath = ParseUtil.decode(url.getPath());
-            if (File.separatorChar == '/') {
-                permission = new FilePermission(decodedPath, "read");
-            } else {
-                permission = new FilePermission(
-                        decodedPath.replace('/',File.separatorChar), "read");
-            }
-        }
-        return permission;
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/protocol/http/logging/HttpLogFormatter.java b/ojluni/src/main/java/sun/net/www/protocol/http/logging/HttpLogFormatter.java
deleted file mode 100755
index be2869c..0000000
--- a/ojluni/src/main/java/sun/net/www/protocol/http/logging/HttpLogFormatter.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-
-package sun.net.www.protocol.http.logging;
-
-import java.util.logging.LogRecord;
-import java.util.regex.*;
-
-/**
- * A Formatter to make the HTTP logs a bit more palatable to the developer
- * looking at them. The idea is to present the HTTP events in such a way that
- * commands and headers are easily spotted (i.e. on separate lines).
- * @author jccollet
- */
-public class HttpLogFormatter extends java.util.logging.SimpleFormatter {
-    // Pattern for MessageHeader data. Mostly pairs within curly brackets
-    private static volatile Pattern pattern = null;
-    // Pattern for Cookies
-    private static volatile Pattern cpattern = null;
-
-    public HttpLogFormatter() {
-        if (pattern == null) {
-            pattern = Pattern.compile("\\{[^\\}]*\\}");
-            cpattern = Pattern.compile("[^,\\] ]{2,}");
-        }
-    }
-
-    @Override
-    public String format(LogRecord record) {
-        String sourceClassName = record.getSourceClassName();
-        if (sourceClassName == null ||
-            !(sourceClassName.startsWith("sun.net.www.protocol.http") ||
-              sourceClassName.startsWith("sun.net.www.http"))) {
-            return super.format(record);
-        }
-        String src = record.getMessage();
-        StringBuilder buf = new StringBuilder("HTTP: ");
-        if (src.startsWith("sun.net.www.MessageHeader@")) {
-            // MessageHeader logs are composed of pairs within curly brackets
-            // Let's extract them to make it more readable. That way we get one
-            // header pair (name, value) per line. A lot easier to read.
-            Matcher match = pattern.matcher(src);
-            while (match.find()) {
-                int i = match.start();
-                int j = match.end();
-                String s = src.substring(i + 1, j - 1);
-                if (s.startsWith("null: ")) {
-                    s = s.substring(6);
-                }
-                if (s.endsWith(": null")) {
-                    s = s.substring(0, s.length() - 6);
-                }
-                buf.append("\t").append(s).append("\n");
-            }
-        } else if (src.startsWith("Cookies retrieved: {")) {
-            // This comes from the Cookie handler, let's clean up the format a bit
-            String s = src.substring(20);
-            buf.append("Cookies from handler:\n");
-            while (s.length() >= 7) {
-                if (s.startsWith("Cookie=[")) {
-                    String s2 = s.substring(8);
-                    int c = s2.indexOf("Cookie2=[");
-                    if (c > 0) {
-                        s2 = s2.substring(0, c-1);
-                        s = s2.substring(c);
-                    } else {
-                        s = "";
-                    }
-                    if (s2.length() < 4) {
-                        continue;
-                    }
-                    Matcher m = cpattern.matcher(s2);
-                    while (m.find()) {
-                        int i = m.start();
-                        int j = m.end();
-                        if (i >= 0) {
-                            String cookie = s2.substring(i + 1, j > 0 ? j - 1 : s2.length() - 1);
-                            buf.append("\t").append(cookie).append("\n");
-                        }
-                    }
-                }
-                if (s.startsWith("Cookie2=[")) {
-                    String s2 = s.substring(9);
-                    int c = s2.indexOf("Cookie=[");
-                    if (c > 0) {
-                        s2 = s2.substring(0, c-1);
-                        s = s2.substring(c);
-                    } else {
-                        s = "";
-                    }
-                    Matcher m = cpattern.matcher(s2);
-                    while (m.find()) {
-                        int i = m.start();
-                        int j = m.end();
-                        if (i >= 0) {
-                            String cookie = s2.substring(i+1, j > 0 ? j-1 : s2.length() - 1);
-                            buf.append("\t").append(cookie).append("\n");
-                        }
-                    }
-                }
-            }
-        } else {
-            // Anything else we let as is.
-            buf.append(src).append("\n");
-        }
-        return buf.toString();
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/net/www/protocol/http/ntlm/NTLMAuthentication.java b/ojluni/src/main/java/sun/net/www/protocol/http/ntlm/NTLMAuthentication.java
deleted file mode 100755
index 0d89833..0000000
--- a/ojluni/src/main/java/sun/net/www/protocol/http/ntlm/NTLMAuthentication.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright (c) 2005, 2011, 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.
- */
-
-package sun.net.www.protocol.http.ntlm;
-
-import com.sun.security.ntlm.Client;
-import com.sun.security.ntlm.NTLMException;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.PasswordAuthentication;
-import java.net.UnknownHostException;
-import java.net.URL;
-import java.security.GeneralSecurityException;
-
-import sun.net.www.HeaderParser;
-import sun.net.www.protocol.http.AuthenticationInfo;
-import sun.net.www.protocol.http.AuthScheme;
-import sun.net.www.protocol.http.HttpURLConnection;
-
-/**
- * NTLMAuthentication:
- *
- * @author Michael McMahon
- */
-
-/*
- * NTLM authentication is nominally based on the framework defined in RFC2617,
- * but differs from the standard (Basic & Digest) schemes as follows:
- *
- * 1. A complete authentication requires three request/response transactions
- *    as shown below:
- *            REQ ------------------------------->
- *            <---- 401 (signalling NTLM) --------
- *
- *            REQ (with type1 NTLM msg) --------->
- *            <---- 401 (with type 2 NTLM msg) ---
- *
- *            REQ (with type3 NTLM msg) --------->
- *            <---- OK ---------------------------
- *
- * 2. The scope of the authentication is the TCP connection (which must be kept-alive)
- *    after the type2 response is received. This means that NTLM does not work end-to-end
- *    through a proxy, rather between client and proxy, or between client and server (with no proxy)
- */
-
-public class NTLMAuthentication extends AuthenticationInfo {
-    private static final long serialVersionUID = 170L;
-
-    private static final NTLMAuthenticationCallback NTLMAuthCallback =
-        NTLMAuthenticationCallback.getNTLMAuthenticationCallback();
-
-    private String hostname;
-    private static String defaultDomain; /* Domain to use if not specified by user */
-
-    static {
-        defaultDomain = java.security.AccessController.doPrivileged(
-            new sun.security.action.GetPropertyAction("http.auth.ntlm.domain",
-                                                      "domain"));
-    };
-
-    public static boolean supportsTransparentAuth () {
-        return false;
-    }
-
-    /**
-     * Returns true if the given site is trusted, i.e. we can try
-     * transparent Authentication.
-     */
-    public static boolean isTrustedSite(URL url) {
-        return NTLMAuthCallback.isTrustedSite(url);
-    }
-
-    private void init0() {
-
-        hostname = java.security.AccessController.doPrivileged(
-            new java.security.PrivilegedAction<String>() {
-            public String run() {
-                String localhost;
-                try {
-                    localhost = InetAddress.getLocalHost().getHostName().toUpperCase();
-                } catch (UnknownHostException e) {
-                     localhost = "localhost";
-                }
-                return localhost;
-            }
-        });
-        int x = hostname.indexOf ('.');
-        if (x != -1) {
-            hostname = hostname.substring (0, x);
-        }
-    };
-
-    PasswordAuthentication pw;
-
-    Client client;
-    /**
-     * Create a NTLMAuthentication:
-     * Username may be specified as domain<BACKSLASH>username in the application Authenticator.
-     * If this notation is not used, then the domain will be taken
-     * from a system property: "http.auth.ntlm.domain".
-     */
-    public NTLMAuthentication(boolean isProxy, URL url, PasswordAuthentication pw) {
-        super(isProxy ? PROXY_AUTHENTICATION : SERVER_AUTHENTICATION,
-                AuthScheme.NTLM,
-                url,
-                "");
-        init (pw);
-    }
-
-    private void init (PasswordAuthentication pw) {
-        String username;
-        String ntdomain;
-        char[] password;
-        this.pw = pw;
-        String s = pw.getUserName();
-        int i = s.indexOf ('\\');
-        if (i == -1) {
-            username = s;
-            ntdomain = defaultDomain;
-        } else {
-            ntdomain = s.substring (0, i).toUpperCase();
-            username = s.substring (i+1);
-        }
-        password = pw.getPassword();
-        init0();
-        try {
-            client = new Client(System.getProperty("ntlm.version"), hostname,
-                    username, ntdomain, password);
-        } catch (NTLMException ne) {
-            try {
-                client = new Client(null, hostname, username, ntdomain, password);
-            } catch (NTLMException ne2) {
-                // Will never happen
-                throw new AssertionError("Really?");
-            }
-        }
-    }
-
-   /**
-    * Constructor used for proxy entries
-    */
-    public NTLMAuthentication(boolean isProxy, String host, int port,
-                                PasswordAuthentication pw) {
-        super(isProxy ? PROXY_AUTHENTICATION : SERVER_AUTHENTICATION,
-                AuthScheme.NTLM,
-                host,
-                port,
-                "");
-        init (pw);
-    }
-
-    /**
-     * @return true if this authentication supports preemptive authorization
-     */
-    @Override
-    public boolean supportsPreemptiveAuthorization() {
-        return false;
-    }
-
-    /**
-     * Not supported. Must use the setHeaders() method
-     */
-    @Override
-    public String getHeaderValue(URL url, String method) {
-        throw new RuntimeException ("getHeaderValue not supported");
-    }
-
-    /**
-     * Check if the header indicates that the current auth. parameters are stale.
-     * If so, then replace the relevant field with the new value
-     * and return true. Otherwise return false.
-     * returning true means the request can be retried with the same userid/password
-     * returning false means we have to go back to the user to ask for a new
-     * username password.
-     */
-    @Override
-    public boolean isAuthorizationStale (String header) {
-        return false; /* should not be called for ntlm */
-    }
-
-    /**
-     * Set header(s) on the given connection.
-     * @param conn The connection to apply the header(s) to
-     * @param p A source of header values for this connection, not used because
-     *          HeaderParser converts the fields to lower case, use raw instead
-     * @param raw The raw header field.
-     * @return true if all goes well, false if no headers were set.
-     */
-    @Override
-    public synchronized boolean setHeaders(HttpURLConnection conn, HeaderParser p, String raw) {
-
-        try {
-            String response;
-            if (raw.length() < 6) { /* NTLM<sp> */
-                response = buildType1Msg ();
-            } else {
-                String msg = raw.substring (5); /* skip NTLM<sp> */
-                response = buildType3Msg (msg);
-            }
-            conn.setAuthenticationProperty(getHeaderName(), response);
-            return true;
-        } catch (IOException e) {
-            return false;
-        } catch (GeneralSecurityException e) {
-            return false;
-        }
-    }
-
-    private String buildType1Msg () {
-        byte[] msg = client.type1();
-        String result = "NTLM " + (new B64Encoder()).encode (msg);
-        return result;
-    }
-
-    private String buildType3Msg (String challenge) throws GeneralSecurityException,
-                                                           IOException  {
-        /* First decode the type2 message to get the server nonce */
-        /* nonce is located at type2[24] for 8 bytes */
-
-        byte[] type2 = (new sun.misc.BASE64Decoder()).decodeBuffer (challenge);
-        byte[] nonce = new byte[8];
-        new java.util.Random().nextBytes(nonce);
-        byte[] msg = client.type3(type2, nonce);
-        String result = "NTLM " + (new B64Encoder()).encode (msg);
-        return result;
-    }
-}
-
-class B64Encoder extends sun.misc.BASE64Encoder {
-    /* to force it to to the entire encoding in one line */
-    protected int bytesPerLine () {
-        return 1024;
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/protocol/http/ntlm/NTLMAuthenticationCallback.java b/ojluni/src/main/java/sun/net/www/protocol/http/ntlm/NTLMAuthenticationCallback.java
deleted file mode 100755
index 9288631..0000000
--- a/ojluni/src/main/java/sun/net/www/protocol/http/ntlm/NTLMAuthenticationCallback.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2011, 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.
- */
-
-package sun.net.www.protocol.http.ntlm;
-
-import java.net.URL;
-
-/**
- * This class is used to call back to deployment to determine if a given
- * URL is trusted. Transparent authentication (try with logged in users
- * credentials without prompting) should only be tried with trusted sites.
- */
-public abstract class NTLMAuthenticationCallback {
-    private static volatile NTLMAuthenticationCallback callback =
-            new DefaultNTLMAuthenticationCallback();
-
-    public static void setNTLMAuthenticationCallback(
-            NTLMAuthenticationCallback callback) {
-        NTLMAuthenticationCallback.callback = callback;
-    }
-
-    public static NTLMAuthenticationCallback getNTLMAuthenticationCallback() {
-        return callback;
-    }
-
-    /**
-     * Returns true if the given site is trusted, i.e. we can try
-     * transparent Authentication.
-     */
-    public abstract boolean isTrustedSite(URL url);
-
-    static class DefaultNTLMAuthenticationCallback extends NTLMAuthenticationCallback {
-        @Override
-        public boolean isTrustedSite(URL url) { return true; }
-    }
-}
-
diff --git a/ojluni/src/main/java/sun/net/www/protocol/http/spnego/NegotiateCallbackHandler.java b/ojluni/src/main/java/sun/net/www/protocol/http/spnego/NegotiateCallbackHandler.java
deleted file mode 100755
index db03ab5..0000000
--- a/ojluni/src/main/java/sun/net/www/protocol/http/spnego/NegotiateCallbackHandler.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2005, 2010, 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.
- */
-
-package sun.net.www.protocol.http.spnego;
-
-import java.io.IOException;
-import java.net.Authenticator;
-import java.net.PasswordAuthentication;
-import java.util.Arrays;
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.NameCallback;
-import javax.security.auth.callback.PasswordCallback;
-import javax.security.auth.callback.UnsupportedCallbackException;
-import sun.net.www.protocol.http.HttpCallerInfo;
-
-/**
- * @since 1.6
- * Special callback handler used in JGSS for the HttpCaller.
- */
-public class NegotiateCallbackHandler implements CallbackHandler {
-
-    private String username;
-    private char[] password;
-
-    /**
-     * Authenticator asks for username and password in a single prompt,
-     * but CallbackHandler checks one by one. So, no matter which callback
-     * gets handled first, make sure Authenticator is only called once.
-     */
-    private boolean answered;
-
-    private final HttpCallerInfo hci;
-
-    public NegotiateCallbackHandler(HttpCallerInfo hci) {
-        this.hci = hci;
-    }
-
-    private void getAnswer() {
-        if (!answered) {
-            answered = true;
-            PasswordAuthentication passAuth =
-                    Authenticator.requestPasswordAuthentication(
-                    hci.host, hci.addr, hci.port, hci.protocol,
-                    hci.prompt, hci.scheme, hci.url, hci.authType);
-            /**
-             * To be compatible with existing callback handler implementations,
-             * when the underlying Authenticator is canceled, username and
-             * password are assigned null. No exception is thrown.
-             */
-            if (passAuth != null) {
-                username = passAuth.getUserName();
-                password = passAuth.getPassword();
-            }
-        }
-    }
-
-    public void handle(Callback[] callbacks) throws
-            UnsupportedCallbackException, IOException {
-        for (int i=0; i<callbacks.length; i++) {
-            Callback callBack = callbacks[i];
-
-            if (callBack instanceof NameCallback) {
-                getAnswer();
-                ((NameCallback)callBack).setName(username);
-            } else if (callBack instanceof PasswordCallback) {
-                getAnswer();
-                ((PasswordCallback)callBack).setPassword(password);
-                if (password != null) Arrays.fill(password, ' ');
-            } else {
-                throw new UnsupportedCallbackException(callBack,
-                        "Call back not supported");
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/protocol/http/spnego/NegotiatorImpl.java b/ojluni/src/main/java/sun/net/www/protocol/http/spnego/NegotiatorImpl.java
deleted file mode 100755
index e241a36..0000000
--- a/ojluni/src/main/java/sun/net/www/protocol/http/spnego/NegotiatorImpl.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 2005, 2009, 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.
- */
-
-package sun.net.www.protocol.http.spnego;
-
-import com.sun.security.jgss.ExtendedGSSContext;
-import java.io.IOException;
-
-import org.ietf.jgss.GSSContext;
-import org.ietf.jgss.GSSException;
-import org.ietf.jgss.GSSName;
-import org.ietf.jgss.Oid;
-
-import sun.net.www.protocol.http.HttpCallerInfo;
-import sun.net.www.protocol.http.Negotiator;
-import sun.security.jgss.GSSManagerImpl;
-import sun.security.jgss.GSSUtil;
-import sun.security.jgss.HttpCaller;
-
-/**
- * This class encapsulates all JAAS and JGSS API calls in a separate class
- * outside NegotiateAuthentication.java so that J2SE build can go smoothly
- * without the presence of it.
- *
- * @author weijun.wang@sun.com
- * @since 1.6
- */
-public class NegotiatorImpl extends Negotiator {
-
-    private static final boolean DEBUG =
-        java.security.AccessController.doPrivileged(
-              new sun.security.action.GetBooleanAction("sun.security.krb5.debug"));
-
-    private GSSContext context;
-    private byte[] oneToken;
-
-    /**
-     * Initialize the object, which includes:<ul>
-     * <li>Find out what GSS mechanism to use from the system property
-     * <code>http.negotiate.mechanism.oid</code>, defaults SPNEGO
-     * <li>Creating the GSSName for the target host, "HTTP/"+hostname
-     * <li>Creating GSSContext
-     * <li>A first call to initSecContext</ul>
-     */
-    private void init(HttpCallerInfo hci) throws GSSException {
-        final Oid oid;
-
-        if (hci.scheme.equalsIgnoreCase("Kerberos")) {
-            // we can only use Kerberos mech when the scheme is kerberos
-            oid = GSSUtil.GSS_KRB5_MECH_OID;
-        } else {
-            String pref = java.security.AccessController.doPrivileged(
-                    new java.security.PrivilegedAction<String>() {
-                        public String run() {
-                            return System.getProperty(
-                                "http.auth.preference",
-                                "spnego");
-                        }
-                    });
-            if (pref.equalsIgnoreCase("kerberos")) {
-                oid = GSSUtil.GSS_KRB5_MECH_OID;
-            } else {
-                // currently there is no 3rd mech we can use
-                oid = GSSUtil.GSS_SPNEGO_MECH_OID;
-            }
-        }
-
-        GSSManagerImpl manager = new GSSManagerImpl(
-                new HttpCaller(hci));
-
-        // RFC 4559 4.1 uses uppercase service name "HTTP".
-        // RFC 4120 6.2.1 demands the host be lowercase
-        String peerName = "HTTP@" + hci.host.toLowerCase();
-
-        GSSName serverName = manager.createName(peerName,
-                GSSName.NT_HOSTBASED_SERVICE);
-        context = manager.createContext(serverName,
-                                        oid,
-                                        null,
-                                        GSSContext.DEFAULT_LIFETIME);
-
-        // Always respect delegation policy in HTTP/SPNEGO.
-        if (context instanceof ExtendedGSSContext) {
-            ((ExtendedGSSContext)context).requestDelegPolicy(true);
-        }
-        oneToken = context.initSecContext(new byte[0], 0, 0);
-    }
-
-    /**
-     * Constructor
-     * @throws java.io.IOException If negotiator cannot be constructed
-     */
-    public NegotiatorImpl(HttpCallerInfo hci) throws IOException {
-        try {
-            init(hci);
-        } catch (GSSException e) {
-            if (DEBUG) {
-                System.out.println("Negotiate support not initiated, will " +
-                        "fallback to other scheme if allowed. Reason:");
-                e.printStackTrace();
-            }
-            IOException ioe = new IOException("Negotiate support not initiated");
-            ioe.initCause(e);
-            throw ioe;
-        }
-    }
-
-    /**
-     * Return the first token of GSS, in SPNEGO, it's called NegTokenInit
-     * @return the first token
-     */
-    @Override
-    public byte[] firstToken() {
-        return oneToken;
-    }
-
-    /**
-     * Return the rest tokens of GSS, in SPNEGO, it's called NegTokenTarg
-     * @param token the token received from server
-     * @return the next token
-     * @throws java.io.IOException if the token cannot be created successfully
-     */
-    @Override
-    public byte[] nextToken(byte[] token) throws IOException {
-        try {
-            return context.initSecContext(token, 0, token.length);
-        } catch (GSSException e) {
-            if (DEBUG) {
-                System.out.println("Negotiate support cannot continue. Reason:");
-                e.printStackTrace();
-            }
-            IOException ioe = new IOException("Negotiate support cannot continue");
-            ioe.initCause(e);
-            throw ioe;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/net/www/protocol/https/DefaultHostnameVerifier.java b/ojluni/src/main/java/sun/net/www/protocol/https/DefaultHostnameVerifier.java
deleted file mode 100755
index e199858..0000000
--- a/ojluni/src/main/java/sun/net/www/protocol/https/DefaultHostnameVerifier.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.net.www.protocol.https;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLSession;
-
-/**
- * <code>HostnameVerifier</code> provides a callback mechanism so that
- * implementers of this interface can supply a policy for
- * handling the case where the host to connect to and
- * the server name from the certificate mismatch.
- *
- * The default implementation will deny such connections.
- *
- * @author Xuelei Fan
- */
-final public class DefaultHostnameVerifier implements HostnameVerifier {
-    public boolean verify(String hostname, SSLSession session) {
-        return false;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/ch/EventPortSelectorImpl.java b/ojluni/src/main/java/sun/nio/ch/EventPortSelectorImpl.java
deleted file mode 100755
index 2b89dad..0000000
--- a/ojluni/src/main/java/sun/nio/ch/EventPortSelectorImpl.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (c) 2012, 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.
- */
-
-package sun.nio.ch;
-
-import java.io.IOException;
-import java.nio.channels.*;
-import java.nio.channels.spi.*;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Iterator;
-
-/**
- * Selector implementation based on the Solaris event port mechanism.
- */
-
-class EventPortSelectorImpl
-    extends SelectorImpl
-{
-    private final EventPortWrapper pollWrapper;
-
-    // Maps from file descriptors to keys
-    private Map<Integer,SelectionKeyImpl> fdToKey;
-
-    // True if this Selector has been closed
-    private boolean closed = false;
-
-    // Lock for interrupt triggering and clearing
-    private final Object interruptLock = new Object();
-    private boolean interruptTriggered = false;
-
-    /**
-     * Package private constructor called by factory method in
-     * the abstract superclass Selector.
-     */
-    EventPortSelectorImpl(SelectorProvider sp) throws IOException {
-        super(sp);
-        pollWrapper = new EventPortWrapper();
-        fdToKey = new HashMap<>();
-    }
-
-    protected int doSelect(long timeout) throws IOException {
-        if (closed)
-            throw new ClosedSelectorException();
-        processDeregisterQueue();
-        int entries;
-        try {
-            begin();
-            entries = pollWrapper.poll(timeout);
-        } finally {
-            end();
-        }
-        processDeregisterQueue();
-        int numKeysUpdated = updateSelectedKeys(entries);
-        if (pollWrapper.interrupted()) {
-            synchronized (interruptLock) {
-                interruptTriggered = false;
-            }
-        }
-        return numKeysUpdated;
-    }
-
-    private int updateSelectedKeys(int entries) {
-        int numKeysUpdated = 0;
-        for (int i=0; i<entries; i++) {
-            int nextFD = pollWrapper.getDescriptor(i);
-            SelectionKeyImpl ski = fdToKey.get(Integer.valueOf(nextFD));
-            if (ski != null) {
-                int rOps = pollWrapper.getEventOps(i);
-                if (selectedKeys.contains(ski)) {
-                    if (ski.channel.translateAndSetReadyOps(rOps, ski)) {
-                        numKeysUpdated++;
-                    }
-                } else {
-                    ski.channel.translateAndSetReadyOps(rOps, ski);
-                    if ((ski.nioReadyOps() & ski.nioInterestOps()) != 0) {
-                        selectedKeys.add(ski);
-                        numKeysUpdated++;
-                    }
-                }
-            }
-        }
-        return numKeysUpdated;
-    }
-
-    protected void implClose() throws IOException {
-        if (closed)
-            return;
-        closed = true;
-
-        // prevent further wakeup
-        synchronized (interruptLock) {
-            interruptTriggered = true;
-        }
-
-        pollWrapper.close();
-        selectedKeys = null;
-
-        // Deregister channels
-        Iterator<SelectionKey> i = keys.iterator();
-        while (i.hasNext()) {
-            SelectionKeyImpl ski = (SelectionKeyImpl)i.next();
-            deregister(ski);
-            SelectableChannel selch = ski.channel();
-            if (!selch.isOpen() && !selch.isRegistered())
-                ((SelChImpl)selch).kill();
-            i.remove();
-        }
-    }
-
-    protected void implRegister(SelectionKeyImpl ski) {
-        int fd = IOUtil.fdVal(ski.channel.getFD());
-        fdToKey.put(Integer.valueOf(fd), ski);
-        keys.add(ski);
-    }
-
-    protected void implDereg(SelectionKeyImpl ski) throws IOException {
-        int i = ski.getIndex();
-        assert (i >= 0);
-        int fd = ski.channel.getFDVal();
-        fdToKey.remove(Integer.valueOf(fd));
-        pollWrapper.release(fd);
-        ski.setIndex(-1);
-        keys.remove(ski);
-        selectedKeys.remove(ski);
-        deregister((AbstractSelectionKey)ski);
-        SelectableChannel selch = ski.channel();
-        if (!selch.isOpen() && !selch.isRegistered())
-            ((SelChImpl)selch).kill();
-    }
-
-    public void putEventOps(SelectionKeyImpl sk, int ops) {
-        if (closed)
-            throw new ClosedSelectorException();
-        int fd = sk.channel.getFDVal();
-        pollWrapper.setInterest(fd, ops);
-    }
-
-    public Selector wakeup() {
-        synchronized (interruptLock) {
-            if (!interruptTriggered) {
-                pollWrapper.interrupt();
-                interruptTriggered = true;
-            }
-        }
-        return this;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/ch/EventPortSelectorProvider.java b/ojluni/src/main/java/sun/nio/ch/EventPortSelectorProvider.java
deleted file mode 100755
index 25546e3..0000000
--- a/ojluni/src/main/java/sun/nio/ch/EventPortSelectorProvider.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2012, 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.
- */
-
-package sun.nio.ch;
-
-import java.io.IOException;
-import java.nio.channels.*;
-import java.nio.channels.spi.*;
-
-public class EventPortSelectorProvider
-    extends SelectorProviderImpl
-{
-    public AbstractSelector openSelector() throws IOException {
-        return new EventPortSelectorImpl(this);
-    }
-
-    public Channel inheritedChannel() throws IOException {
-        return InheritedChannel.getChannel();
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/ch/EventPortWrapper.java b/ojluni/src/main/java/sun/nio/ch/EventPortWrapper.java
deleted file mode 100755
index 8e6ec43..0000000
--- a/ojluni/src/main/java/sun/nio/ch/EventPortWrapper.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (c) 2012, 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.
- */
-
-package sun.nio.ch;
-
-import sun.misc.Unsafe;
-import java.io.IOException;
-import java.util.*;
-import static sun.nio.ch.SolarisEventPort.*;
-
-/**
- * Manages a Solaris event port and manipulates a native array of pollfd structs
- * on Solaris.
- */
-
-class EventPortWrapper {
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-    private static final int addressSize = unsafe.addressSize();
-
-    // Maximum number of open file descriptors
-    static final int   OPEN_MAX     = IOUtil.fdLimit();
-
-    // Maximum number of events to retrive in one call to port_getn
-    static final int   POLL_MAX     =  Math.min(OPEN_MAX-1, 1024);
-
-    // initial size of the array to hold pending updates
-    private final int INITIAL_PENDING_UPDATE_SIZE = 256;
-
-    // maximum size of updateArray
-    private final int MAX_UPDATE_ARRAY_SIZE = Math.min(OPEN_MAX, 64*1024);
-
-    // special update status to indicate that it should be ignored
-    private static final byte IGNORE = -1;
-
-    // port file descriptor
-    private final int pfd;
-
-    // the poll array (populated by port_getn)
-    private final long pollArrayAddress;
-    private final AllocatedNativeObject pollArray;
-
-    // required when accessing the update* fields
-    private final Object updateLock = new Object();
-
-    // the number of pending updates
-    private int updateCount;
-
-    // queue of file descriptors with updates pending
-    private int[] updateDescriptors = new int[INITIAL_PENDING_UPDATE_SIZE];
-
-    // events for file descriptors with registration changes pending, indexed
-    // by file descriptor and stored as bytes for efficiency reasons. For
-    // file descriptors higher than MAX_UPDATE_ARRAY_SIZE (unlimited case at
-    // least then the update is stored in a map.
-    private final byte[] eventsLow = new byte[MAX_UPDATE_ARRAY_SIZE];
-    private Map<Integer,Byte> eventsHigh;
-    // Used by release and updateRegistrations to track whether a file
-    // descriptor is registered with /dev/poll.
-    private final BitSet registered = new BitSet();
-
-    // bit set to indicate if a file descriptor has been visited when
-    // processing updates (used to avoid duplicates calls to port_associate)
-    private BitSet visited = new BitSet();
-
-    EventPortWrapper() throws IOException {
-        int allocationSize = POLL_MAX * SIZEOF_PORT_EVENT;
-        pollArray = new AllocatedNativeObject(allocationSize, true);
-        pollArrayAddress = pollArray.address();
-        this.pfd = port_create();
-        if (OPEN_MAX > MAX_UPDATE_ARRAY_SIZE)
-            eventsHigh = new HashMap<>();
-    }
-
-    void close() throws IOException {
-        port_close(pfd);
-        pollArray.free();
-    }
-
-    private short getSource(int i) {
-        int offset = SIZEOF_PORT_EVENT * i + OFFSETOF_SOURCE;
-        return pollArray.getShort(offset);
-    }
-
-    int getEventOps(int i) {
-        int offset = SIZEOF_PORT_EVENT * i + OFFSETOF_EVENTS;
-        return pollArray.getInt(offset);
-    }
-
-    int getDescriptor(int i) {
-        int offset = SIZEOF_PORT_EVENT * i + OFFSETOF_OBJECT;
-        if (addressSize == 4) {
-            return pollArray.getInt(offset);
-        } else {
-            return (int) pollArray.getLong(offset);
-        }
-    }
-
-    private void setDescriptor(int i, int fd) {
-        int offset = SIZEOF_PORT_EVENT * i + OFFSETOF_OBJECT;
-        if (addressSize == 4) {
-            pollArray.putInt(offset, fd);
-        } else {
-            pollArray.putLong(offset, fd);
-        }
-    }
-
-    private void setUpdate(int fd, byte events) {
-        if (fd < MAX_UPDATE_ARRAY_SIZE) {
-            eventsLow[fd] = events;
-        } else {
-            eventsHigh.put(Integer.valueOf(fd), Byte.valueOf(events));
-        }
-    }
-
-    private byte getUpdate(int fd) {
-        if (fd < MAX_UPDATE_ARRAY_SIZE) {
-            return eventsLow[fd];
-        } else {
-            Byte result = eventsHigh.get(Integer.valueOf(fd));
-            // result should never be null
-            return result.byteValue();
-        }
-    }
-
-    int poll(long timeout) throws IOException {
-        // update registrations prior to poll
-        synchronized (updateLock) {
-
-            // process newest updates first
-            int i = updateCount - 1;
-            while (i >= 0) {
-                int fd = updateDescriptors[i];
-                if (!visited.get(fd)) {
-                    short ev = getUpdate(fd);
-                    if (ev != IGNORE) {
-                        if (ev == 0) {
-                            if (registered.get(fd)) {
-                                port_dissociate(pfd, PORT_SOURCE_FD, (long)fd);
-                                registered.clear(fd);
-                            }
-                        } else {
-                            if (port_associate(pfd, PORT_SOURCE_FD, (long)fd, ev)) {
-                                registered.set(fd);
-                            }
-                        }
-
-                    }
-                    visited.set(fd);
-                }
-                i--;
-            }
-            updateCount = 0;
-        }
-
-        // poll for events
-        int updated = port_getn(pfd, pollArrayAddress, POLL_MAX, timeout);
-
-        // after polling we need to queue all polled file descriptors as they
-        // are candidates to register for the next poll.
-        synchronized (updateLock) {
-            for (int i=0; i<updated; i++) {
-                if (getSource(i) == PORT_SOURCE_USER) {
-                    interrupted = true;
-                    setDescriptor(i, -1);
-                } else {
-                    // the default is to re-associate for the next poll
-                    int fd = getDescriptor(i);
-                    registered.clear(fd);
-                    setInterest(fd);
-                }
-            }
-        }
-
-        return updated;
-    }
-
-    private void setInterest(int fd) {
-        assert Thread.holdsLock(updateLock);
-
-        // record the file descriptor and events, expanding the
-        // respective arrays first if necessary.
-        int oldCapacity = updateDescriptors.length;
-        if (updateCount >= oldCapacity) {
-            int newCapacity = oldCapacity + INITIAL_PENDING_UPDATE_SIZE;
-            int[] newDescriptors = new int[newCapacity];
-            System.arraycopy(updateDescriptors, 0, newDescriptors, 0, oldCapacity);
-            updateDescriptors = newDescriptors;
-        }
-        updateDescriptors[updateCount++] = fd;
-        visited.clear(fd);
-    }
-
-    void setInterest(int fd, int mask) {
-        synchronized (updateLock) {
-            setInterest(fd);
-            setUpdate(fd, (byte)mask);
-            assert getUpdate(fd) == mask;
-        }
-    }
-
-    void release(int fd) {
-        synchronized (updateLock) {
-            if (registered.get(fd)) {
-                try {
-                    port_dissociate(pfd, PORT_SOURCE_FD, (long)fd);
-                } catch (IOException ioe) {
-                    InternalError x =
-                        new InternalError(ioe.getMessage());
-                    x.initCause(ioe);
-                    throw x;
-                }
-                registered.clear(fd);
-            }
-            setUpdate(fd, IGNORE);
-        }
-    }
-
-    // -- wakeup support --
-
-    private boolean interrupted;
-
-    public void interrupt() {
-        try {
-            port_send(pfd, 0);
-        } catch (IOException ioe) {
-            InternalError x =
-                new InternalError(ioe.getMessage());
-            x.initCause(ioe);
-            throw x;
-        }
-    }
-
-    boolean interrupted() {
-        return interrupted;
-    }
-
-    void clearInterrupted() {
-        interrupted = false;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/ch/SctpAssocChange.java b/ojluni/src/main/java/sun/nio/ch/SctpAssocChange.java
deleted file mode 100755
index fe4c533..0000000
--- a/ojluni/src/main/java/sun/nio/ch/SctpAssocChange.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-package sun.nio.ch;
-
-import com.sun.nio.sctp.Association;
-import com.sun.nio.sctp.AssociationChangeNotification;
-
-/**
- * An implementation of AssociationChangeNotification
- */
-public class SctpAssocChange extends AssociationChangeNotification
-    implements SctpNotification
-{
-    /* static final ints so that they can be referenced from native */
-    private final static int SCTP_COMM_UP = 1;
-    private final static int SCTP_COMM_LOST = 2;
-    private final static int SCTP_RESTART = 3;
-    private final static int SCTP_SHUTDOWN = 4;
-    private final static int SCTP_CANT_START = 5;
-
-    private Association association;
-
-    /* assocId is used to lookup the association before the notification is
-     * returned to user code */
-    private int assocId;
-    private AssocChangeEvent event;
-    private int maxOutStreams;
-    private int maxInStreams;
-
-    /* Invoked from native */
-    private SctpAssocChange(int assocId,
-                            int intEvent,
-                            int maxOutStreams,
-                            int maxInStreams) {
-        switch (intEvent) {
-            case SCTP_COMM_UP :
-                this.event = AssocChangeEvent.COMM_UP;
-                break;
-            case SCTP_COMM_LOST :
-                this.event = AssocChangeEvent.COMM_LOST;
-                break;
-            case SCTP_RESTART :
-                this.event = AssocChangeEvent.RESTART;
-                break;
-            case SCTP_SHUTDOWN :
-                this.event = AssocChangeEvent.SHUTDOWN;
-                break;
-            case SCTP_CANT_START :
-                this.event = AssocChangeEvent.CANT_START;
-                break;
-            default :
-                throw new AssertionError(
-                      "Unknown Association Change Event type: " + intEvent);
-        }
-
-        this.assocId = assocId;
-        this.maxOutStreams = maxOutStreams;
-        this.maxInStreams = maxInStreams;
-    }
-
-    @Override
-    public int assocId() {
-        return assocId;
-    }
-
-    @Override
-    public void setAssociation(Association association) {
-        this.association = association;
-    }
-
-    @Override
-    public Association association() {
-        assert association != null;
-        return association;
-    }
-
-    @Override
-    public AssocChangeEvent event() {
-        return event;
-    }
-
-    int maxOutStreams() {
-        return maxOutStreams;
-    }
-
-    int maxInStreams() {
-        return maxInStreams;
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append(super.toString()).append(" [");
-        sb.append("Association:").append(association);
-        sb.append(", Event: ").append(event).append("]");
-        return sb.toString();
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/ch/SctpAssociationImpl.java b/ojluni/src/main/java/sun/nio/ch/SctpAssociationImpl.java
deleted file mode 100755
index c6688c3..0000000
--- a/ojluni/src/main/java/sun/nio/ch/SctpAssociationImpl.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-package sun.nio.ch;
-
-import com.sun.nio.sctp.Association;
-
-/**
- * An implementation of Association
- */
-public class SctpAssociationImpl extends Association {
-    public SctpAssociationImpl(int associationID,
-                               int maxInStreams,
-                               int maxOutStreams) {
-        super(associationID, maxInStreams, maxOutStreams);
-    }
-
-    @Override
-    public String toString() {
-        StringBuffer sb = new StringBuffer(super.toString());
-        return sb.append("[associationID:")
-                 .append(associationID())
-                 .append(", maxIn:")
-                 .append(maxInboundStreams())
-                 .append(", maxOut:")
-                 .append(maxOutboundStreams())
-                 .append("]")
-                 .toString();
-    }
-}
-
diff --git a/ojluni/src/main/java/sun/nio/ch/SctpChannelImpl.java b/ojluni/src/main/java/sun/nio/ch/SctpChannelImpl.java
deleted file mode 100755
index 4c332bd..0000000
--- a/ojluni/src/main/java/sun/nio/ch/SctpChannelImpl.java
+++ /dev/null
@@ -1,1107 +0,0 @@
-/*
- * Copyright (c) 2009, 2010, 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.
- */
-package sun.nio.ch;
-
-import java.net.InetAddress;
-import java.net.SocketAddress;
-import java.net.SocketException;
-import java.net.InetSocketAddress;
-import java.io.FileDescriptor;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.Set;
-import java.util.HashSet;
-import java.nio.ByteBuffer;
-import java.nio.channels.SelectionKey;
-import java.nio.channels.ClosedChannelException;
-import java.nio.channels.ConnectionPendingException;
-import java.nio.channels.NoConnectionPendingException;
-import java.nio.channels.AlreadyConnectedException;
-import java.nio.channels.NotYetBoundException;
-import java.nio.channels.NotYetConnectedException;
-import java.nio.channels.spi.SelectorProvider;
-import com.sun.nio.sctp.AbstractNotificationHandler;
-import com.sun.nio.sctp.Association;
-import com.sun.nio.sctp.AssociationChangeNotification;
-import com.sun.nio.sctp.HandlerResult;
-import com.sun.nio.sctp.IllegalReceiveException;
-import com.sun.nio.sctp.InvalidStreamException;
-import com.sun.nio.sctp.IllegalUnbindException;
-import com.sun.nio.sctp.MessageInfo;
-import com.sun.nio.sctp.NotificationHandler;
-import com.sun.nio.sctp.SctpChannel;
-import com.sun.nio.sctp.SctpSocketOption;
-import sun.nio.ch.PollArrayWrapper;
-import sun.nio.ch.SelChImpl;
-import static com.sun.nio.sctp.SctpStandardSocketOptions.*;
-import static sun.nio.ch.SctpResultContainer.SEND_FAILED;
-import static sun.nio.ch.SctpResultContainer.ASSOCIATION_CHANGED;
-import static sun.nio.ch.SctpResultContainer.PEER_ADDRESS_CHANGED;
-import static sun.nio.ch.SctpResultContainer.SHUTDOWN;
-
-/**
- * An implementation of an SctpChannel
- */
-public class SctpChannelImpl extends SctpChannel
-    implements SelChImpl
-{
-    private final FileDescriptor fd;
-
-    private final int fdVal;
-
-    /* IDs of native threads doing send and receivess, for signalling */
-    private volatile long receiverThread = 0;
-    private volatile long senderThread = 0;
-
-    /* Lock held by current receiving or connecting thread */
-    private final Object receiveLock = new Object();
-
-    /* Lock held by current sending or connecting thread */
-    private final Object sendLock = new Object();
-
-    private final ThreadLocal<Boolean> receiveInvoked =
-        new ThreadLocal<Boolean>() {
-             @Override protected Boolean initialValue() {
-                 return Boolean.FALSE;
-            }
-    };
-
-    /* Lock held by any thread that modifies the state fields declared below
-       DO NOT invoke a blocking I/O operation while holding this lock! */
-    private final Object stateLock = new Object();
-
-    private enum ChannelState {
-        UNINITIALIZED,
-        UNCONNECTED,
-        PENDING,
-        CONNECTED,
-        KILLPENDING,
-        KILLED,
-    }
-    /* -- The following fields are protected by stateLock -- */
-    private ChannelState state = ChannelState.UNINITIALIZED;
-
-    /* Binding; Once bound the port will remain constant. */
-    int port = -1;
-    private HashSet<InetSocketAddress> localAddresses = new HashSet<InetSocketAddress>();
-    /* Has the channel been bound to the wildcard address */
-    private boolean wildcard; /* false */
-    //private InetSocketAddress remoteAddress = null;
-
-    /* Input/Output open */
-    private boolean readyToConnect;
-
-    /* Shutdown */
-    private boolean isShutdown;
-
-    private Association association;
-
-    private Set<SocketAddress> remoteAddresses = Collections.EMPTY_SET;
-
-    /* -- End of fields protected by stateLock -- */
-
-    /**
-     * Constructor for normal connecting sockets
-     */
-    public SctpChannelImpl(SelectorProvider provider) throws IOException {
-        //TODO: update provider remove public modifier
-        super(provider);
-        this.fd = SctpNet.socket(true);
-        this.fdVal = IOUtil.fdVal(fd);
-        this.state = ChannelState.UNCONNECTED;
-    }
-
-    /**
-     * Constructor for sockets obtained from server sockets
-     */
-    public SctpChannelImpl(SelectorProvider provider, FileDescriptor fd)
-         throws IOException {
-        this(provider, fd, null);
-    }
-
-    /**
-     * Constructor for sockets obtained from branching
-     */
-    public SctpChannelImpl(SelectorProvider provider,
-                           FileDescriptor fd,
-                           Association association)
-            throws IOException {
-        super(provider);
-        this.fd = fd;
-        this.fdVal = IOUtil.fdVal(fd);
-        this.state = ChannelState.CONNECTED;
-        port = (Net.localAddress(fd)).getPort();
-
-        if (association != null) { /* branched */
-            this.association = association;
-        } else { /* obtained from server channel */
-            /* Receive COMM_UP */
-            ByteBuffer buf = Util.getTemporaryDirectBuffer(50);
-            try {
-                receive(buf, null, null, true);
-            } finally {
-                Util.releaseTemporaryDirectBuffer(buf);
-            }
-        }
-    }
-
-    /**
-     * Binds the channel's socket to a local address.
-     */
-    @Override
-    public SctpChannel bind(SocketAddress local) throws IOException {
-        synchronized (receiveLock) {
-            synchronized (sendLock) {
-                synchronized (stateLock) {
-                    ensureOpenAndUnconnected();
-                    if (isBound())
-                        SctpNet.throwAlreadyBoundException();
-                    InetSocketAddress isa = (local == null) ?
-                        new InetSocketAddress(0) : Net.checkAddress(local);
-                    Net.bind(fd, isa.getAddress(), isa.getPort());
-                    InetSocketAddress boundIsa = Net.localAddress(fd);
-                    port = boundIsa.getPort();
-                    localAddresses.add(isa);
-                    if (isa.getAddress().isAnyLocalAddress())
-                        wildcard = true;
-                }
-            }
-        }
-        return this;
-    }
-
-    @Override
-    public SctpChannel bindAddress(InetAddress address)
-            throws IOException {
-        bindUnbindAddress(address, true);
-        localAddresses.add(new InetSocketAddress(address, port));
-        return this;
-    }
-
-    @Override
-    public SctpChannel unbindAddress(InetAddress address)
-            throws IOException {
-        bindUnbindAddress(address, false);
-        localAddresses.remove(new InetSocketAddress(address, port));
-        return this;
-    }
-
-    private SctpChannel bindUnbindAddress(InetAddress address, boolean add)
-            throws IOException {
-        if (address == null)
-            throw new IllegalArgumentException();
-
-        synchronized (receiveLock) {
-            synchronized (sendLock) {
-                synchronized (stateLock) {
-                    if (!isOpen())
-                        throw new ClosedChannelException();
-                    if (!isBound())
-                        throw new NotYetBoundException();
-                    if (wildcard)
-                        throw new IllegalStateException(
-                                "Cannot add or remove addresses from a channel that is bound to the wildcard address");
-                    if (address.isAnyLocalAddress())
-                        throw new IllegalArgumentException(
-                                "Cannot add or remove the wildcard address");
-                    if (add) {
-                        for (InetSocketAddress addr : localAddresses) {
-                            if (addr.getAddress().equals(address)) {
-                                SctpNet.throwAlreadyBoundException();
-                            }
-                        }
-                    } else { /*removing */
-                        /* Verify that there is more than one address
-                         * and that address is already bound */
-                        if (localAddresses.size() <= 1)
-                            throw new IllegalUnbindException("Cannot remove address from a channel with only one address bound");
-                        boolean foundAddress = false;
-                        for (InetSocketAddress addr : localAddresses) {
-                            if (addr.getAddress().equals(address)) {
-                                foundAddress = true;
-                                break;
-                            }
-                        }
-                        if (!foundAddress )
-                            throw new IllegalUnbindException("Cannot remove address from a channel that is not bound to that address");
-                    }
-
-                    SctpNet.bindx(fdVal, new InetAddress[]{address}, port, add);
-
-                    /* Update our internal Set to reflect the addition/removal */
-                    if (add)
-                        localAddresses.add(new InetSocketAddress(address, port));
-                    else {
-                        for (InetSocketAddress addr : localAddresses) {
-                            if (addr.getAddress().equals(address)) {
-                                localAddresses.remove(addr);
-                                break;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return this;
-    }
-
-    private boolean isBound() {
-        synchronized (stateLock) {
-            return port == -1 ? false : true;
-        }
-    }
-
-    private boolean isConnected() {
-        synchronized (stateLock) {
-            return (state == ChannelState.CONNECTED);
-        }
-    }
-
-    private void ensureOpenAndUnconnected() throws IOException {
-        synchronized (stateLock) {
-            if (!isOpen())
-                throw new ClosedChannelException();
-            if (isConnected())
-                throw new AlreadyConnectedException();
-            if (state == ChannelState.PENDING)
-                throw new ConnectionPendingException();
-        }
-    }
-
-    private boolean ensureReceiveOpen() throws ClosedChannelException {
-        synchronized (stateLock) {
-            if (!isOpen())
-                throw new ClosedChannelException();
-            if (!isConnected())
-                throw new NotYetConnectedException();
-            else
-                return true;
-        }
-    }
-
-    private void ensureSendOpen() throws ClosedChannelException {
-        synchronized (stateLock) {
-            if (!isOpen())
-                throw new ClosedChannelException();
-            if (isShutdown)
-                throw new ClosedChannelException();
-            if (!isConnected())
-                throw new NotYetConnectedException();
-        }
-    }
-
-    private void receiverCleanup() throws IOException {
-        synchronized (stateLock) {
-            receiverThread = 0;
-            if (state == ChannelState.KILLPENDING)
-                kill();
-        }
-    }
-
-    private void senderCleanup() throws IOException {
-        synchronized (stateLock) {
-            senderThread = 0;
-            if (state == ChannelState.KILLPENDING)
-                kill();
-        }
-    }
-
-    @Override
-    public Association association() throws ClosedChannelException {
-        synchronized (stateLock) {
-            if (!isOpen())
-                throw new ClosedChannelException();
-            if (!isConnected())
-                return null;
-
-            return association;
-        }
-    }
-
-    @Override
-    public boolean connect(SocketAddress endpoint) throws IOException {
-        synchronized (receiveLock) {
-            synchronized (sendLock) {
-                ensureOpenAndUnconnected();
-                InetSocketAddress isa = Net.checkAddress(endpoint);
-                SecurityManager sm = System.getSecurityManager();
-                if (sm != null)
-                    sm.checkConnect(isa.getAddress().getHostAddress(),
-                                    isa.getPort());
-                synchronized (blockingLock()) {
-                    int n = 0;
-                    try {
-                        try {
-                            begin();
-                            synchronized (stateLock) {
-                                if (!isOpen()) {
-                                    return false;
-                                }
-                                receiverThread = NativeThread.current();
-                            }
-                            for (;;) {
-                                InetAddress ia = isa.getAddress();
-                                if (ia.isAnyLocalAddress())
-                                    ia = InetAddress.getLocalHost();
-                                n = SctpNet.connect(fdVal, ia, isa.getPort());
-                                if (  (n == IOStatus.INTERRUPTED)
-                                      && isOpen())
-                                    continue;
-                                break;
-                            }
-                        } finally {
-                            receiverCleanup();
-                            end((n > 0) || (n == IOStatus.UNAVAILABLE));
-                            assert IOStatus.check(n);
-                        }
-                    } catch (IOException x) {
-                        /* If an exception was thrown, close the channel after
-                         * invoking end() so as to avoid bogus
-                         * AsynchronousCloseExceptions */
-                        close();
-                        throw x;
-                    }
-
-                    if (n > 0) {
-                        synchronized (stateLock) {
-                            /* Connection succeeded */
-                            state = ChannelState.CONNECTED;
-                            if (!isBound()) {
-                                InetSocketAddress boundIsa =
-                                        Net.localAddress(fd);
-                                port = boundIsa.getPort();
-                            }
-
-                            /* Receive COMM_UP */
-                            ByteBuffer buf = Util.getTemporaryDirectBuffer(50);
-                            try {
-                                receive(buf, null, null, true);
-                            } finally {
-                                Util.releaseTemporaryDirectBuffer(buf);
-                            }
-
-                            /* cache remote addresses */
-                            try {
-                                remoteAddresses = getRemoteAddresses();
-                            } catch (IOException unused) { /* swallow exception */ }
-
-                            return true;
-                        }
-                    } else  {
-                        synchronized (stateLock) {
-                            /* If nonblocking and no exception then connection
-                             * pending; disallow another invocation */
-                            if (!isBlocking())
-                                state = ChannelState.PENDING;
-                            else
-                                assert false;
-                        }
-                    }
-                }
-                return false;
-            }
-        }
-    }
-
-    @Override
-    public boolean connect(SocketAddress endpoint,
-                           int maxOutStreams,
-                           int maxInStreams)
-            throws IOException {
-        ensureOpenAndUnconnected();
-        return setOption(SCTP_INIT_MAXSTREAMS, InitMaxStreams.
-                create(maxInStreams, maxOutStreams)).connect(endpoint);
-
-    }
-
-    @Override
-    public boolean isConnectionPending() {
-        synchronized (stateLock) {
-            return (state == ChannelState.PENDING);
-        }
-    }
-
-    @Override
-    public boolean finishConnect() throws IOException {
-        synchronized (receiveLock) {
-            synchronized (sendLock) {
-                synchronized (stateLock) {
-                    if (!isOpen())
-                        throw new ClosedChannelException();
-                    if (isConnected())
-                        return true;
-                    if (state != ChannelState.PENDING)
-                        throw new NoConnectionPendingException();
-                }
-                int n = 0;
-                try {
-                    try {
-                        begin();
-                        synchronized (blockingLock()) {
-                            synchronized (stateLock) {
-                                if (!isOpen()) {
-                                    return false;
-                                }
-                                receiverThread = NativeThread.current();
-                            }
-                            if (!isBlocking()) {
-                                for (;;) {
-                                    n = checkConnect(fd, false, readyToConnect);
-                                    if (  (n == IOStatus.INTERRUPTED)
-                                          && isOpen())
-                                        continue;
-                                    break;
-                                }
-                            } else {
-                                for (;;) {
-                                    n = checkConnect(fd, true, readyToConnect);
-                                    if (n == 0) {
-                                        // Loop in case of
-                                        // spurious notifications
-                                        continue;
-                                    }
-                                    if (  (n == IOStatus.INTERRUPTED)
-                                          && isOpen())
-                                        continue;
-                                    break;
-                                }
-                            }
-                        }
-                    } finally {
-                        synchronized (stateLock) {
-                            receiverThread = 0;
-                            if (state == ChannelState.KILLPENDING) {
-                                kill();
-                                /* poll()/getsockopt() does not report
-                                 * error (throws exception, with n = 0)
-                                 * on Linux platform after dup2 and
-                                 * signal-wakeup. Force n to 0 so the
-                                 * end() can throw appropriate exception */
-                                n = 0;
-                            }
-                        }
-                        end((n > 0) || (n == IOStatus.UNAVAILABLE));
-                        assert IOStatus.check(n);
-                    }
-                } catch (IOException x) {
-                    /* If an exception was thrown, close the channel after
-                     * invoking end() so as to avoid bogus
-                     * AsynchronousCloseExceptions */
-                    close();
-                    throw x;
-                }
-
-                if (n > 0) {
-                    synchronized (stateLock) {
-                        state = ChannelState.CONNECTED;
-                        if (!isBound()) {
-                            InetSocketAddress boundIsa =
-                                    Net.localAddress(fd);
-                            port = boundIsa.getPort();
-                        }
-
-                        /* Receive COMM_UP */
-                        ByteBuffer buf = Util.getTemporaryDirectBuffer(50);
-                        try {
-                            receive(buf, null, null, true);
-                        } finally {
-                            Util.releaseTemporaryDirectBuffer(buf);
-                        }
-
-                        /* cache remote addresses */
-                        try {
-                            remoteAddresses = getRemoteAddresses();
-                        } catch (IOException unused) { /* swallow exception */ }
-
-                        return true;
-                    }
-                }
-            }
-        }
-        return false;
-    }
-
-    @Override
-    protected void implConfigureBlocking(boolean block) throws IOException {
-        IOUtil.configureBlocking(fd, block);
-    }
-
-    @Override
-    public void implCloseSelectableChannel() throws IOException {
-        synchronized (stateLock) {
-            SctpNet.preClose(fdVal);
-
-            if (receiverThread != 0)
-                NativeThread.signal(receiverThread);
-
-            if (senderThread != 0)
-                NativeThread.signal(senderThread);
-
-            if (!isRegistered())
-                kill();
-        }
-    }
-
-    @Override
-    public FileDescriptor getFD() {
-        return fd;
-    }
-
-    @Override
-    public int getFDVal() {
-        return fdVal;
-    }
-
-    /**
-     * Translates native poll revent ops into a ready operation ops
-     */
-    private boolean translateReadyOps(int ops, int initialOps, SelectionKeyImpl sk) {
-        int intOps = sk.nioInterestOps();
-        int oldOps = sk.nioReadyOps();
-        int newOps = initialOps;
-
-        if ((ops & PollArrayWrapper.POLLNVAL) != 0) {
-            /* This should only happen if this channel is pre-closed while a
-             * selection operation is in progress
-             * ## Throw an error if this channel has not been pre-closed */
-            return false;
-        }
-
-        if ((ops & (PollArrayWrapper.POLLERR
-                    | PollArrayWrapper.POLLHUP)) != 0) {
-            newOps = intOps;
-            sk.nioReadyOps(newOps);
-            /* No need to poll again in checkConnect,
-             * the error will be detected there */
-            readyToConnect = true;
-            return (newOps & ~oldOps) != 0;
-        }
-
-        if (((ops & PollArrayWrapper.POLLIN) != 0) &&
-            ((intOps & SelectionKey.OP_READ) != 0) &&
-            isConnected())
-            newOps |= SelectionKey.OP_READ;
-
-        if (((ops & PollArrayWrapper.POLLCONN) != 0) &&
-            ((intOps & SelectionKey.OP_CONNECT) != 0) &&
-            ((state == ChannelState.UNCONNECTED) || (state == ChannelState.PENDING))) {
-            newOps |= SelectionKey.OP_CONNECT;
-            readyToConnect = true;
-        }
-
-        if (((ops & PollArrayWrapper.POLLOUT) != 0) &&
-            ((intOps & SelectionKey.OP_WRITE) != 0) &&
-            isConnected())
-            newOps |= SelectionKey.OP_WRITE;
-
-        sk.nioReadyOps(newOps);
-        return (newOps & ~oldOps) != 0;
-    }
-
-    @Override
-    public boolean translateAndUpdateReadyOps(int ops, SelectionKeyImpl sk) {
-        return translateReadyOps(ops, sk.nioReadyOps(), sk);
-    }
-
-    @Override
-    @SuppressWarnings("all")
-    public boolean translateAndSetReadyOps(int ops, SelectionKeyImpl sk) {
-        return translateReadyOps(ops, 0, sk);
-    }
-
-    @Override
-    public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) {
-        int newOps = 0;
-        if ((ops & SelectionKey.OP_READ) != 0)
-            newOps |= PollArrayWrapper.POLLIN;
-        if ((ops & SelectionKey.OP_WRITE) != 0)
-            newOps |= PollArrayWrapper.POLLOUT;
-        if ((ops & SelectionKey.OP_CONNECT) != 0)
-            newOps |= PollArrayWrapper.POLLCONN;
-        sk.selector.putEventOps(sk, newOps);
-    }
-
-    @Override
-    public void kill() throws IOException {
-        synchronized (stateLock) {
-            if (state == ChannelState.KILLED)
-                return;
-            if (state == ChannelState.UNINITIALIZED) {
-                state = ChannelState.KILLED;
-                return;
-            }
-            assert !isOpen() && !isRegistered();
-
-            /* Postpone the kill if there is a waiting reader
-             * or writer thread. */
-            if (receiverThread == 0 && senderThread == 0) {
-                SctpNet.close(fdVal);
-                state = ChannelState.KILLED;
-            } else {
-                state = ChannelState.KILLPENDING;
-            }
-        }
-    }
-
-    @Override
-    public <T> SctpChannel setOption(SctpSocketOption<T> name, T value)
-            throws IOException {
-        if (name == null)
-            throw new NullPointerException();
-        if (!supportedOptions().contains(name))
-            throw new UnsupportedOperationException("'" + name + "' not supported");
-
-        synchronized (stateLock) {
-            if (!isOpen())
-                throw new ClosedChannelException();
-
-            SctpNet.setSocketOption(fdVal, name, value, 0 /*oneToOne*/);
-        }
-        return this;
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public <T> T getOption(SctpSocketOption<T> name) throws IOException {
-        if (name == null)
-            throw new NullPointerException();
-        if (!supportedOptions().contains(name))
-            throw new UnsupportedOperationException("'" + name + "' not supported");
-
-        synchronized (stateLock) {
-            if (!isOpen())
-                throw new ClosedChannelException();
-
-            return (T)SctpNet.getSocketOption(fdVal, name, 0 /*oneToOne*/);
-        }
-    }
-
-    private static class DefaultOptionsHolder {
-        static final Set<SctpSocketOption<?>> defaultOptions = defaultOptions();
-
-        private static Set<SctpSocketOption<?>> defaultOptions() {
-            HashSet<SctpSocketOption<?>> set = new HashSet<SctpSocketOption<?>>(10);
-            set.add(SCTP_DISABLE_FRAGMENTS);
-            set.add(SCTP_EXPLICIT_COMPLETE);
-            set.add(SCTP_FRAGMENT_INTERLEAVE);
-            set.add(SCTP_INIT_MAXSTREAMS);
-            set.add(SCTP_NODELAY);
-            set.add(SCTP_PRIMARY_ADDR);
-            set.add(SCTP_SET_PEER_PRIMARY_ADDR);
-            set.add(SO_SNDBUF);
-            set.add(SO_RCVBUF);
-            set.add(SO_LINGER);
-            return Collections.unmodifiableSet(set);
-        }
-    }
-
-    @Override
-    public final Set<SctpSocketOption<?>> supportedOptions() {
-        return DefaultOptionsHolder.defaultOptions;
-    }
-
-    @Override
-    public <T> MessageInfo receive(ByteBuffer buffer,
-                                   T attachment,
-                                   NotificationHandler<T> handler)
-            throws IOException {
-        return receive(buffer, attachment, handler, false);
-    }
-
-    private <T> MessageInfo receive(ByteBuffer buffer,
-                                    T attachment,
-                                    NotificationHandler<T> handler,
-                                    boolean fromConnect)
-            throws IOException {
-        if (buffer == null)
-            throw new IllegalArgumentException("buffer cannot be null");
-
-        if (buffer.isReadOnly())
-            throw new IllegalArgumentException("Read-only buffer");
-
-        if (receiveInvoked.get())
-            throw new IllegalReceiveException(
-                    "cannot invoke receive from handler");
-        receiveInvoked.set(Boolean.TRUE);
-
-        try {
-            SctpResultContainer resultContainer = new SctpResultContainer();
-            do {
-                resultContainer.clear();
-                synchronized (receiveLock) {
-                    if (!ensureReceiveOpen())
-                        return null;
-
-                    int n = 0;
-                    try {
-                        begin();
-
-                        synchronized (stateLock) {
-                            if(!isOpen())
-                                return null;
-                            receiverThread = NativeThread.current();
-                        }
-
-                        do {
-                            n = receive(fdVal, buffer, resultContainer, fromConnect);
-                        } while ((n == IOStatus.INTERRUPTED) && isOpen());
-                    } finally {
-                        receiverCleanup();
-                        end((n > 0) || (n == IOStatus.UNAVAILABLE));
-                        assert IOStatus.check(n);
-                    }
-
-                    if (!resultContainer.isNotification()) {
-                        /* message or nothing */
-                        if (resultContainer.hasSomething()) {
-                            /* Set the association before returning */
-                            SctpMessageInfoImpl info =
-                                    resultContainer.getMessageInfo();
-                            synchronized (stateLock) {
-                                assert association != null;
-                                info.setAssociation(association);
-                            }
-                            return info;
-                        } else
-                            /* Non-blocking may return null if nothing available*/
-                            return null;
-                    } else { /* notification */
-                        synchronized (stateLock) {
-                            handleNotificationInternal(
-                                    resultContainer);
-                        }
-                    }
-
-                    if (fromConnect)  {
-                        /* If we reach here, then it was connect that invoked
-                         * receive and received the COMM_UP. We have already
-                         * handled the COMM_UP with the internal notification
-                         * handler. Simply return. */
-                        return null;
-                    }
-                }  /* receiveLock */
-            } while (handler == null ? true :
-                (invokeNotificationHandler(resultContainer, handler, attachment)
-                 == HandlerResult.CONTINUE));
-
-            return null;
-        } finally {
-            receiveInvoked.set(Boolean.FALSE);
-        }
-    }
-
-    private int receive(int fd,
-                        ByteBuffer dst,
-                        SctpResultContainer resultContainer,
-                        boolean peek)
-            throws IOException {
-        int pos = dst.position();
-        int lim = dst.limit();
-        assert (pos <= lim);
-        int rem = (pos <= lim ? lim - pos : 0);
-        if (dst instanceof DirectBuffer && rem > 0)
-            return receiveIntoNativeBuffer(fd, resultContainer, dst, rem, pos, peek);
-
-        /* Substitute a native buffer */
-        int newSize = Math.max(rem, 1);
-        ByteBuffer bb = Util.getTemporaryDirectBuffer(newSize);
-        try {
-            int n = receiveIntoNativeBuffer(fd, resultContainer, bb, newSize, 0, peek);
-            bb.flip();
-            if (n > 0 && rem > 0)
-                dst.put(bb);
-            return n;
-        } finally {
-            Util.releaseTemporaryDirectBuffer(bb);
-        }
-    }
-
-    private int receiveIntoNativeBuffer(int fd,
-                                        SctpResultContainer resultContainer,
-                                        ByteBuffer bb,
-                                        int rem,
-                                        int pos,
-                                        boolean peek)
-        throws IOException
-    {
-        int n = receive0(fd, resultContainer, ((DirectBuffer)bb).address() + pos, rem, peek);
-
-        if (n > 0)
-            bb.position(pos + n);
-        return n;
-    }
-
-    private InternalNotificationHandler<?> internalNotificationHandler =
-            new InternalNotificationHandler();
-
-    private void handleNotificationInternal(SctpResultContainer resultContainer)
-    {
-        invokeNotificationHandler(resultContainer,
-                internalNotificationHandler, null);
-    }
-
-    private class InternalNotificationHandler<T>
-            extends AbstractNotificationHandler<T>
-    {
-        @Override
-        public HandlerResult handleNotification(
-                AssociationChangeNotification not, T unused) {
-            if (not.event().equals(
-                    AssociationChangeNotification.AssocChangeEvent.COMM_UP) &&
-                    association == null) {
-                SctpAssocChange sac = (SctpAssocChange) not;
-                association = new SctpAssociationImpl
-                       (sac.assocId(), sac.maxInStreams(), sac.maxOutStreams());
-            }
-            return HandlerResult.CONTINUE;
-        }
-    }
-
-    private <T> HandlerResult invokeNotificationHandler
-                                 (SctpResultContainer resultContainer,
-                                  NotificationHandler<T> handler,
-                                  T attachment) {
-        SctpNotification notification = resultContainer.notification();
-        synchronized (stateLock) {
-            notification.setAssociation(association);
-        }
-
-        if (!(handler instanceof AbstractNotificationHandler)) {
-            return handler.handleNotification(notification, attachment);
-        }
-
-        /* AbstractNotificationHandler */
-        AbstractNotificationHandler absHandler =
-                (AbstractNotificationHandler)handler;
-        switch(resultContainer.type()) {
-            case ASSOCIATION_CHANGED :
-                return absHandler.handleNotification(
-                        resultContainer.getAssociationChanged(), attachment);
-            case PEER_ADDRESS_CHANGED :
-                return absHandler.handleNotification(
-                        resultContainer.getPeerAddressChanged(), attachment);
-            case SEND_FAILED :
-                return absHandler.handleNotification(
-                        resultContainer.getSendFailed(), attachment);
-            case SHUTDOWN :
-                return absHandler.handleNotification(
-                        resultContainer.getShutdown(), attachment);
-            default :
-                /* implementation specific handlers */
-                return absHandler.handleNotification(
-                        resultContainer.notification(), attachment);
-        }
-    }
-
-    private void checkAssociation(Association sendAssociation) {
-        synchronized (stateLock) {
-            if (sendAssociation != null && !sendAssociation.equals(association)) {
-                throw new IllegalArgumentException(
-                        "Cannot send to another association");
-            }
-        }
-    }
-
-    private void checkStreamNumber(int streamNumber) {
-        synchronized (stateLock) {
-            if (association != null) {
-                if (streamNumber < 0 ||
-                      streamNumber >= association.maxOutboundStreams())
-                    throw new InvalidStreamException();
-            }
-        }
-    }
-
-    /* TODO: Add support for ttl and isComplete to both 121 12M
-     *       SCTP_EOR not yet supported on reference platforms
-     *       TTL support limited...
-     */
-    @Override
-    public int send(ByteBuffer buffer, MessageInfo messageInfo)
-            throws IOException {
-        if (buffer == null)
-            throw new IllegalArgumentException("buffer cannot be null");
-
-        if (messageInfo == null)
-            throw new IllegalArgumentException("messageInfo cannot be null");
-
-        checkAssociation(messageInfo.association());
-        checkStreamNumber(messageInfo.streamNumber());
-
-        synchronized (sendLock) {
-            ensureSendOpen();
-
-            int n = 0;
-            try {
-                begin();
-
-                synchronized (stateLock) {
-                    if(!isOpen())
-                        return 0;
-                    senderThread = NativeThread.current();
-                }
-
-                do {
-                    n = send(fdVal, buffer, messageInfo);
-                } while ((n == IOStatus.INTERRUPTED) && isOpen());
-
-                return IOStatus.normalize(n);
-            } finally {
-                senderCleanup();
-                end((n > 0) || (n == IOStatus.UNAVAILABLE));
-                assert IOStatus.check(n);
-            }
-        }
-    }
-
-    private int send(int fd, ByteBuffer src, MessageInfo messageInfo)
-            throws IOException {
-        int streamNumber = messageInfo.streamNumber();
-        SocketAddress target = messageInfo.address();
-        boolean unordered = messageInfo.isUnordered();
-        int ppid = messageInfo.payloadProtocolID();
-
-        if (src instanceof DirectBuffer)
-            return sendFromNativeBuffer(fd, src, target, streamNumber,
-                    unordered, ppid);
-
-        /* Substitute a native buffer */
-        int pos = src.position();
-        int lim = src.limit();
-        assert (pos <= lim && streamNumber >= 0);
-
-        int rem = (pos <= lim ? lim - pos : 0);
-        ByteBuffer bb = Util.getTemporaryDirectBuffer(rem);
-        try {
-            bb.put(src);
-            bb.flip();
-            /* Do not update src until we see how many bytes were written */
-            src.position(pos);
-
-            int n = sendFromNativeBuffer(fd, bb, target, streamNumber,
-                    unordered, ppid);
-            if (n > 0) {
-                /* now update src */
-                src.position(pos + n);
-            }
-            return n;
-        } finally {
-            Util.releaseTemporaryDirectBuffer(bb);
-        }
-    }
-
-    private int sendFromNativeBuffer(int fd,
-                                     ByteBuffer bb,
-                                     SocketAddress target,
-                                     int streamNumber,
-                                     boolean unordered,
-                                     int ppid)
-            throws IOException {
-        InetAddress addr = null;     // no preferred address
-        int port = 0;
-        if (target != null) {
-            InetSocketAddress isa = Net.checkAddress(target);
-            addr = isa.getAddress();
-            port = isa.getPort();
-        }
-
-        int pos = bb.position();
-        int lim = bb.limit();
-        assert (pos <= lim);
-        int rem = (pos <= lim ? lim - pos : 0);
-
-        int written = send0(fd, ((DirectBuffer)bb).address() + pos, rem, addr,
-                            port, -1 /*121*/, streamNumber, unordered, ppid);
-        if (written > 0)
-            bb.position(pos + written);
-        return written;
-    }
-
-    @Override
-    public SctpChannel shutdown() throws IOException {
-        synchronized(stateLock) {
-            if (isShutdown)
-                return this;
-
-            ensureSendOpen();
-            SctpNet.shutdown(fdVal, -1);
-            if (senderThread != 0)
-                NativeThread.signal(senderThread);
-            isShutdown = true;
-        }
-        return this;
-    }
-
-    @Override
-    public Set<SocketAddress> getAllLocalAddresses()
-            throws IOException {
-        synchronized (stateLock) {
-            if (!isOpen())
-                throw new ClosedChannelException();
-            if (!isBound())
-                return Collections.EMPTY_SET;
-
-            return SctpNet.getLocalAddresses(fdVal);
-        }
-    }
-
-    @Override
-    public Set<SocketAddress> getRemoteAddresses()
-            throws IOException {
-        synchronized (stateLock) {
-            if (!isOpen())
-                throw new ClosedChannelException();
-            if (!isConnected() || isShutdown)
-                return Collections.EMPTY_SET;
-
-            try {
-                return SctpNet.getRemoteAddresses(fdVal, 0/*unused*/);
-            } catch (SocketException unused) {
-                /* an open connected channel should always have remote addresses */
-                return remoteAddresses;
-            }
-        }
-    }
-
-    /* Native */
-    private static native void initIDs();
-
-    static native int receive0(int fd, SctpResultContainer resultContainer,
-            long address, int length, boolean peek) throws IOException;
-
-    static native int send0(int fd, long address, int length,
-            InetAddress addr, int port, int assocId, int streamNumber,
-            boolean unordered, int ppid) throws IOException;
-
-    private static native int checkConnect(FileDescriptor fd, boolean block,
-            boolean ready) throws IOException;
-
-    static {
-        Util.load();   /* loads nio & net native libraries */
-        java.security.AccessController.doPrivileged(
-                new sun.security.action.LoadLibraryAction("sctp"));
-        initIDs();
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/ch/SctpMessageInfoImpl.java b/ojluni/src/main/java/sun/nio/ch/SctpMessageInfoImpl.java
deleted file mode 100755
index 676ac9c..0000000
--- a/ojluni/src/main/java/sun/nio/ch/SctpMessageInfoImpl.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-package sun.nio.ch;
-
-import java.net.SocketAddress;
-import com.sun.nio.sctp.MessageInfo;
-import com.sun.nio.sctp.Association;
-
-/**
- * An implementation of a MessageInfo.
- */
-public class SctpMessageInfoImpl extends MessageInfo {
-    private final SocketAddress address;
-    private final int bytes;          /* 0 */
-
-    private Association association;
-    private int assocId;
-    private int streamNumber;
-    private boolean complete = true;
-    private boolean unordered;  /* false */
-    private long timeToLive;    /* 0L */
-    private int ppid;           /* 0 */
-
-    public SctpMessageInfoImpl(Association association,
-                               SocketAddress address,
-                               int streamNumber) {
-        this.association = association;
-        this.address = address;
-        this.streamNumber = streamNumber;
-        bytes = 0;
-    }
-
-    /* Invoked from native */
-    private SctpMessageInfoImpl(int assocId,
-                                SocketAddress address,
-                                int bytes,
-                                int streamNumber,
-                                boolean complete,
-                                boolean unordered,
-                                int ppid) {
-        this.assocId = assocId;
-        this.address = address;
-        this.bytes = bytes;
-        this.streamNumber = streamNumber;
-        this.complete = complete;
-        this.unordered = unordered;
-        this.ppid = ppid;
-    }
-
-    @Override
-    public Association association() {
-        return association;
-    }
-
-    /**
-     * SctpMessageInfoImpl instances created from native will need to have their
-     * association set from the channel.
-     */
-    void setAssociation(Association association) {
-        this.association = association;
-    }
-
-    int associationID() {
-        return assocId;
-    }
-
-    @Override
-    public SocketAddress address() {
-        return address;
-    }
-
-    @Override
-    public int bytes() {
-        return bytes;
-    }
-
-    @Override
-    public int streamNumber() {
-        return streamNumber;
-    }
-
-    @Override
-    public MessageInfo streamNumber(int streamNumber) {
-        if (streamNumber < 0 || streamNumber > 65536)
-            throw new IllegalArgumentException("Invalid stream number");
-
-        this.streamNumber = streamNumber;
-        return this;
-    }
-
-    @Override
-    public int payloadProtocolID() {
-        return ppid;
-    }
-
-    @Override
-    public MessageInfo payloadProtocolID(int ppid) {
-        this.ppid = ppid;
-        return this;
-    }
-
-    @Override
-    public boolean isComplete() {
-        return complete;
-    }
-
-    @Override
-    public MessageInfo complete(boolean complete) {
-        this.complete = complete;
-        return this;
-    }
-
-    @Override
-    public boolean isUnordered() {
-        return unordered;
-    }
-
-    @Override
-    public MessageInfo unordered(boolean unordered) {
-        this.unordered = unordered;
-        return this;
-    }
-
-    @Override
-    public long timeToLive() {
-        return timeToLive;
-    }
-
-    @Override
-    public MessageInfo timeToLive(long millis) {
-        timeToLive = millis;
-        return this;
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder(super.toString());
-        sb.append( "[Address: ").append(address)
-          .append(", Association: ").append(association)
-          .append(", Assoc ID: ").append(assocId)
-          .append(", Bytes: ").append(bytes)
-          .append(", Stream Number: ").append(streamNumber)
-          .append(", Complete: ").append(complete)
-          .append(", isUnordered: ").append(unordered)
-          .append("]");
-        return sb.toString();
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/ch/SctpMultiChannelImpl.java b/ojluni/src/main/java/sun/nio/ch/SctpMultiChannelImpl.java
deleted file mode 100755
index 82152de..0000000
--- a/ojluni/src/main/java/sun/nio/ch/SctpMultiChannelImpl.java
+++ /dev/null
@@ -1,993 +0,0 @@
-/*
- * Copyright (c) 2009, 2010, 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.
- */
-package sun.nio.ch;
-
-import java.net.InetAddress;
-import java.net.SocketAddress;
-import java.net.SocketException;
-import java.net.InetSocketAddress;
-import java.io.FileDescriptor;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.Map.Entry;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.HashMap;
-import java.nio.ByteBuffer;
-import java.nio.channels.SelectionKey;
-import java.nio.channels.ClosedChannelException;
-import java.nio.channels.NotYetBoundException;
-import java.nio.channels.spi.SelectorProvider;
-import com.sun.nio.sctp.AbstractNotificationHandler;
-import com.sun.nio.sctp.Association;
-import com.sun.nio.sctp.AssociationChangeNotification;
-import com.sun.nio.sctp.HandlerResult;
-import com.sun.nio.sctp.IllegalReceiveException;
-import com.sun.nio.sctp.InvalidStreamException;
-import com.sun.nio.sctp.IllegalUnbindException;
-import com.sun.nio.sctp.NotificationHandler;
-import com.sun.nio.sctp.MessageInfo;
-import com.sun.nio.sctp.SctpChannel;
-import com.sun.nio.sctp.SctpMultiChannel;
-import com.sun.nio.sctp.SctpSocketOption;
-import static com.sun.nio.sctp.SctpStandardSocketOptions.*;
-import static sun.nio.ch.SctpResultContainer.*;
-
-/**
- * An implementation of SctpMultiChannel
- */
-public class SctpMultiChannelImpl extends SctpMultiChannel
-    implements SelChImpl
-{
-    private final FileDescriptor fd;
-
-    private final int fdVal;
-
-    /* IDs of native threads doing send and receives, for signalling */
-    private volatile long receiverThread = 0;
-    private volatile long senderThread = 0;
-
-    /* Lock held by current receiving thread */
-    private final Object receiveLock = new Object();
-
-    /* Lock held by current sending thread */
-    private final Object sendLock = new Object();
-
-    /* Lock held by any thread that modifies the state fields declared below
-     * DO NOT invoke a blocking I/O operation while holding this lock! */
-    private final Object stateLock = new Object();
-
-    private enum ChannelState {
-        UNINITIALIZED,
-        KILLPENDING,
-        KILLED,
-    }
-
-    /* -- The following fields are protected by stateLock -- */
-    private ChannelState state = ChannelState.UNINITIALIZED;
-
-    /* Binding: Once bound the port will remain constant. */
-    int port = -1;
-    private HashSet<InetSocketAddress> localAddresses = new HashSet<InetSocketAddress>();
-    /* Has the channel been bound to the wildcard address */
-    private boolean wildcard; /* false */
-
-    /* Keeps a map of addresses to association, and visa versa */
-    private HashMap<SocketAddress, Association> addressMap =
-                         new HashMap<SocketAddress, Association>();
-    private HashMap<Association, Set<SocketAddress>> associationMap =
-                         new HashMap<Association, Set<SocketAddress>>();
-
-    /* -- End of fields protected by stateLock -- */
-
-    /* If an association has been shutdown mark it for removal after
-     * the user handler has been invoked */
-    private final ThreadLocal<Association> associationToRemove =
-        new ThreadLocal<Association>() {
-             @Override protected Association initialValue() {
-                 return null;
-            }
-    };
-
-    /* A notification handler cannot invoke receive */
-    private final ThreadLocal<Boolean> receiveInvoked =
-        new ThreadLocal<Boolean>() {
-             @Override protected Boolean initialValue() {
-                 return Boolean.FALSE;
-            }
-    };
-
-    public SctpMultiChannelImpl(SelectorProvider provider)
-            throws IOException {
-        //TODO: update provider, remove public modifier
-        super(provider);
-        this.fd = SctpNet.socket(false /*one-to-many*/);
-        this.fdVal = IOUtil.fdVal(fd);
-    }
-
-    @Override
-    public SctpMultiChannel bind(SocketAddress local, int backlog)
-            throws IOException {
-        synchronized (receiveLock) {
-            synchronized (sendLock) {
-                synchronized (stateLock) {
-                    ensureOpen();
-                    if (isBound())
-                        SctpNet.throwAlreadyBoundException();
-                    InetSocketAddress isa = (local == null) ?
-                        new InetSocketAddress(0) : Net.checkAddress(local);
-
-                    SecurityManager sm = System.getSecurityManager();
-                    if (sm != null)
-                        sm.checkListen(isa.getPort());
-                    Net.bind(fd, isa.getAddress(), isa.getPort());
-
-                    InetSocketAddress boundIsa = Net.localAddress(fd);
-                    port = boundIsa.getPort();
-                    localAddresses.add(isa);
-                    if (isa.getAddress().isAnyLocalAddress())
-                        wildcard = true;
-
-                    SctpNet.listen(fdVal, backlog < 1 ? 50 : backlog);
-                }
-            }
-        }
-        return this;
-    }
-
-    @Override
-    public SctpMultiChannel bindAddress(InetAddress address)
-            throws IOException {
-        return bindUnbindAddress(address, true);
-    }
-
-    @Override
-    public SctpMultiChannel unbindAddress(InetAddress address)
-            throws IOException {
-        return bindUnbindAddress(address, false);
-    }
-
-    private SctpMultiChannel bindUnbindAddress(InetAddress address,
-                                               boolean add)
-            throws IOException {
-        if (address == null)
-            throw new IllegalArgumentException();
-
-        synchronized (receiveLock) {
-            synchronized (sendLock) {
-                synchronized (stateLock) {
-                    if (!isOpen())
-                        throw new ClosedChannelException();
-                    if (!isBound())
-                        throw new NotYetBoundException();
-                    if (wildcard)
-                        throw new IllegalStateException(
-                                "Cannot add or remove addresses from a channel that is bound to the wildcard address");
-                    if (address.isAnyLocalAddress())
-                        throw new IllegalArgumentException(
-                                "Cannot add or remove the wildcard address");
-                    if (add) {
-                        for (InetSocketAddress addr : localAddresses) {
-                            if (addr.getAddress().equals(address)) {
-                                SctpNet.throwAlreadyBoundException();
-                            }
-                        }
-                    } else { /*removing */
-                        /* Verify that there is more than one address
-                         * and that address is already bound */
-                        if (localAddresses.size() <= 1)
-                            throw new IllegalUnbindException("Cannot remove address from a channel with only one address bound");
-                        boolean foundAddress = false;
-                        for (InetSocketAddress addr : localAddresses) {
-                            if (addr.getAddress().equals(address)) {
-                                foundAddress = true;
-                                break;
-                            }
-                        }
-                        if (!foundAddress )
-                            throw new IllegalUnbindException("Cannot remove address from a channel that is not bound to that address");
-                    }
-
-                    SctpNet.bindx(fdVal, new InetAddress[]{address}, port, add);
-
-                    /* Update our internal Set to reflect the addition/removal */
-                    if (add)
-                        localAddresses.add(new InetSocketAddress(address, port));
-                    else {
-                        for (InetSocketAddress addr : localAddresses) {
-                            if (addr.getAddress().equals(address)) {
-                                localAddresses.remove(addr);
-                                break;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return this;
-    }
-
-    @Override
-    public Set<Association> associations()
-            throws ClosedChannelException, NotYetBoundException {
-        synchronized (stateLock) {
-            if (!isOpen())
-                throw new ClosedChannelException();
-            if (!isBound())
-                throw new NotYetBoundException();
-
-            return Collections.unmodifiableSet(associationMap.keySet());
-        }
-    }
-
-    private boolean isBound() {
-        synchronized (stateLock) {
-            return port == -1 ? false : true;
-        }
-    }
-
-    private void ensureOpen() throws IOException {
-        synchronized (stateLock) {
-            if (!isOpen())
-                throw new ClosedChannelException();
-        }
-    }
-
-    private void receiverCleanup() throws IOException {
-        synchronized (stateLock) {
-            receiverThread = 0;
-            if (state == ChannelState.KILLPENDING)
-                kill();
-        }
-    }
-
-    private void senderCleanup() throws IOException {
-        synchronized (stateLock) {
-            senderThread = 0;
-            if (state == ChannelState.KILLPENDING)
-                kill();
-        }
-    }
-
-    @Override
-    protected void implConfigureBlocking(boolean block) throws IOException {
-        IOUtil.configureBlocking(fd, block);
-    }
-
-    @Override
-    public void implCloseSelectableChannel() throws IOException {
-        synchronized (stateLock) {
-            SctpNet.preClose(fdVal);
-
-            if (receiverThread != 0)
-                NativeThread.signal(receiverThread);
-
-            if (senderThread != 0)
-                NativeThread.signal(senderThread);
-
-            if (!isRegistered())
-                kill();
-        }
-    }
-
-    @Override
-    public FileDescriptor getFD() {
-        return fd;
-    }
-
-    @Override
-    public int getFDVal() {
-        return fdVal;
-    }
-
-    /**
-     * Translates native poll revent ops into a ready operation ops
-     */
-    private boolean translateReadyOps(int ops, int initialOps,
-                                      SelectionKeyImpl sk) {
-        int intOps = sk.nioInterestOps();
-        int oldOps = sk.nioReadyOps();
-        int newOps = initialOps;
-
-        if ((ops & PollArrayWrapper.POLLNVAL) != 0) {
-            /* This should only happen if this channel is pre-closed while a
-             * selection operation is in progress
-             * ## Throw an error if this channel has not been pre-closed */
-            return false;
-        }
-
-        if ((ops & (PollArrayWrapper.POLLERR
-                    | PollArrayWrapper.POLLHUP)) != 0) {
-            newOps = intOps;
-            sk.nioReadyOps(newOps);
-            return (newOps & ~oldOps) != 0;
-        }
-
-        if (((ops & PollArrayWrapper.POLLIN) != 0) &&
-            ((intOps & SelectionKey.OP_READ) != 0))
-            newOps |= SelectionKey.OP_READ;
-
-        if (((ops & PollArrayWrapper.POLLOUT) != 0) &&
-            ((intOps & SelectionKey.OP_WRITE) != 0))
-            newOps |= SelectionKey.OP_WRITE;
-
-        sk.nioReadyOps(newOps);
-        return (newOps & ~oldOps) != 0;
-    }
-
-    @Override
-    public boolean translateAndUpdateReadyOps(int ops, SelectionKeyImpl sk) {
-        return translateReadyOps(ops, sk.nioReadyOps(), sk);
-    }
-
-    @Override
-    public boolean translateAndSetReadyOps(int ops, SelectionKeyImpl sk) {
-        return translateReadyOps(ops, 0, sk);
-    }
-
-    @Override
-    public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) {
-        int newOps = 0;
-        if ((ops & SelectionKey.OP_READ) != 0)
-            newOps |= PollArrayWrapper.POLLIN;
-        if ((ops & SelectionKey.OP_WRITE) != 0)
-            newOps |= PollArrayWrapper.POLLOUT;
-        sk.selector.putEventOps(sk, newOps);
-    }
-
-    @Override
-    public void kill() throws IOException {
-        synchronized (stateLock) {
-            if (state == ChannelState.KILLED)
-                return;
-            if (state == ChannelState.UNINITIALIZED) {
-                state = ChannelState.KILLED;
-                return;
-            }
-            assert !isOpen() && !isRegistered();
-
-            /* Postpone the kill if there is a thread sending or receiving. */
-            if (receiverThread == 0 && senderThread == 0) {
-                SctpNet.close(fdVal);
-                state = ChannelState.KILLED;
-            } else {
-                state = ChannelState.KILLPENDING;
-            }
-        }
-    }
-
-    @Override
-    public <T> SctpMultiChannel setOption(SctpSocketOption<T> name,
-                                          T value,
-                                          Association association)
-            throws IOException {
-        if (name == null)
-            throw new NullPointerException();
-        if (!(supportedOptions().contains(name)))
-            throw new UnsupportedOperationException("'" + name + "' not supported");
-
-        synchronized (stateLock) {
-            if (association != null && (name.equals(SCTP_PRIMARY_ADDR) ||
-                    name.equals(SCTP_SET_PEER_PRIMARY_ADDR))) {
-                checkAssociation(association);
-            }
-            if (!isOpen())
-                throw new ClosedChannelException();
-
-            int assocId = association == null ? 0 : association.associationID();
-            SctpNet.setSocketOption(fdVal, name, value, assocId);
-        }
-        return this;
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public <T> T getOption(SctpSocketOption<T> name, Association association)
-            throws IOException {
-        if (name == null)
-            throw new NullPointerException();
-        if (!supportedOptions().contains(name))
-            throw new UnsupportedOperationException("'" + name + "' not supported");
-
-        synchronized (stateLock) {
-            if (association != null && (name.equals(SCTP_PRIMARY_ADDR) ||
-                    name.equals(SCTP_SET_PEER_PRIMARY_ADDR))) {
-                checkAssociation(association);
-            }
-            if (!isOpen())
-                throw new ClosedChannelException();
-
-            int assocId = association == null ? 0 : association.associationID();
-            return (T)SctpNet.getSocketOption(fdVal, name, assocId);
-        }
-    }
-
-    private static class DefaultOptionsHolder {
-        static final Set<SctpSocketOption<?>> defaultOptions = defaultOptions();
-
-        private static Set<SctpSocketOption<?>> defaultOptions() {
-            HashSet<SctpSocketOption<?>> set = new HashSet<SctpSocketOption<?>>(10);
-            set.add(SCTP_DISABLE_FRAGMENTS);
-            set.add(SCTP_EXPLICIT_COMPLETE);
-            set.add(SCTP_FRAGMENT_INTERLEAVE);
-            set.add(SCTP_INIT_MAXSTREAMS);
-            set.add(SCTP_NODELAY);
-            set.add(SCTP_PRIMARY_ADDR);
-            set.add(SCTP_SET_PEER_PRIMARY_ADDR);
-            set.add(SO_SNDBUF);
-            set.add(SO_RCVBUF);
-            set.add(SO_LINGER);
-            return Collections.unmodifiableSet(set);
-        }
-    }
-
-    @Override
-    public final Set<SctpSocketOption<?>> supportedOptions() {
-        return DefaultOptionsHolder.defaultOptions;
-    }
-
-    @Override
-    public <T> MessageInfo receive(ByteBuffer buffer,
-                                   T attachment,
-                                   NotificationHandler<T> handler)
-            throws IOException {
-        if (buffer == null)
-            throw new IllegalArgumentException("buffer cannot be null");
-
-        if (buffer.isReadOnly())
-            throw new IllegalArgumentException("Read-only buffer");
-
-        if (receiveInvoked.get())
-            throw new IllegalReceiveException(
-                    "cannot invoke receive from handler");
-        receiveInvoked.set(Boolean.TRUE);
-
-        try {
-            SctpResultContainer resultContainer = new SctpResultContainer();
-            do {
-                resultContainer.clear();
-                synchronized (receiveLock) {
-                    ensureOpen();
-                    if (!isBound())
-                        throw new NotYetBoundException();
-
-                    int n = 0;
-                    try {
-                        begin();
-
-                        synchronized (stateLock) {
-                            if(!isOpen())
-                                return null;
-                            receiverThread = NativeThread.current();
-                        }
-
-                        do {
-                            n = receive(fdVal, buffer, resultContainer);
-                        } while ((n == IOStatus.INTERRUPTED) && isOpen());
-
-                    } finally {
-                        receiverCleanup();
-                        end((n > 0) || (n == IOStatus.UNAVAILABLE));
-                        assert IOStatus.check(n);
-                    }
-
-                    if (!resultContainer.isNotification()) {
-                        /* message or nothing */
-                        if (resultContainer.hasSomething()) {
-                            /* Set the association before returning */
-                            SctpMessageInfoImpl info =
-                                    resultContainer.getMessageInfo();
-                            info.setAssociation(lookupAssociation(info.
-                                    associationID()));
-                            SecurityManager sm = System.getSecurityManager();
-                            if (sm != null) {
-                                InetSocketAddress isa  = (InetSocketAddress)info.address();
-                                if (!addressMap.containsKey(isa)) {
-                                    /* must be a new association */
-                                    try {
-                                        sm.checkAccept(isa.getAddress().getHostAddress(),
-                                                       isa.getPort());
-                                    } catch (SecurityException se) {
-                                        buffer.clear();
-                                        throw se;
-                                    }
-                                }
-                            }
-
-                            assert info.association() != null;
-                            return info;
-                        } else  {
-                          /* Non-blocking may return null if nothing available*/
-                            return null;
-                        }
-                    } else { /* notification */
-                        synchronized (stateLock) {
-                            handleNotificationInternal(
-                                    resultContainer);
-                        }
-                    }
-                } /* receiveLock */
-            } while (handler == null ? true :
-                (invokeNotificationHandler(resultContainer, handler, attachment)
-                 == HandlerResult.CONTINUE));
-        } finally {
-            receiveInvoked.set(Boolean.FALSE);
-        }
-
-        return null;
-    }
-
-    private int receive(int fd,
-                        ByteBuffer dst,
-                        SctpResultContainer resultContainer)
-            throws IOException {
-        int pos = dst.position();
-        int lim = dst.limit();
-        assert (pos <= lim);
-        int rem = (pos <= lim ? lim - pos : 0);
-        if (dst instanceof DirectBuffer && rem > 0)
-            return receiveIntoNativeBuffer(fd, resultContainer, dst, rem, pos);
-
-        /* Substitute a native buffer. */
-        int newSize = Math.max(rem, 1);
-        ByteBuffer bb = Util.getTemporaryDirectBuffer(newSize);
-        try {
-            int n = receiveIntoNativeBuffer(fd, resultContainer, bb, newSize, 0);
-            bb.flip();
-            if (n > 0 && rem > 0)
-                dst.put(bb);
-            return n;
-        } finally {
-            Util.releaseTemporaryDirectBuffer(bb);
-        }
-    }
-
-    private int receiveIntoNativeBuffer(int fd,
-                                        SctpResultContainer resultContainer,
-                                        ByteBuffer bb,
-                                        int rem,
-                                        int pos)
-            throws IOException {
-        int n = receive0(fd, resultContainer, ((DirectBuffer)bb).address() + pos, rem);
-        if (n > 0)
-            bb.position(pos + n);
-        return n;
-    }
-
-    private InternalNotificationHandler internalNotificationHandler =
-            new InternalNotificationHandler();
-
-    private void handleNotificationInternal(SctpResultContainer resultContainer)
-    {
-        invokeNotificationHandler(resultContainer,
-                internalNotificationHandler, null);
-    }
-
-    private class InternalNotificationHandler<T>
-            extends AbstractNotificationHandler<T>
-    {
-        @Override
-        public HandlerResult handleNotification(
-                AssociationChangeNotification not, T unused) {
-            SctpAssocChange sac = (SctpAssocChange) not;
-
-            /* Update map to reflect change in association */
-            switch (not.event()) {
-                case COMM_UP :
-                    Association newAssociation = new SctpAssociationImpl
-                       (sac.assocId(), sac.maxInStreams(), sac.maxOutStreams());
-                    addAssociation(newAssociation);
-                    break;
-                case SHUTDOWN :
-                case COMM_LOST :
-                //case RESTART: ???
-                    /* mark association for removal after user handler invoked*/
-                    associationToRemove.set(lookupAssociation(sac.assocId()));
-            }
-            return HandlerResult.CONTINUE;
-        }
-    }
-
-    private <T> HandlerResult invokeNotificationHandler(
-                                   SctpResultContainer resultContainer,
-                                   NotificationHandler<T> handler,
-                                   T attachment) {
-        HandlerResult result;
-        SctpNotification notification = resultContainer.notification();
-        notification.setAssociation(lookupAssociation(notification.assocId()));
-
-        if (!(handler instanceof AbstractNotificationHandler)) {
-            result = handler.handleNotification(notification, attachment);
-        } else { /* AbstractNotificationHandler */
-            AbstractNotificationHandler absHandler =
-                    (AbstractNotificationHandler)handler;
-            switch(resultContainer.type()) {
-                case ASSOCIATION_CHANGED :
-                    result = absHandler.handleNotification(
-                            resultContainer.getAssociationChanged(), attachment);
-                    break;
-                case PEER_ADDRESS_CHANGED :
-                    result = absHandler.handleNotification(
-                            resultContainer.getPeerAddressChanged(), attachment);
-                    break;
-                case SEND_FAILED :
-                    result = absHandler.handleNotification(
-                            resultContainer.getSendFailed(), attachment);
-                    break;
-                case SHUTDOWN :
-                    result =  absHandler.handleNotification(
-                            resultContainer.getShutdown(), attachment);
-                    break;
-                default :
-                    /* implementation specific handlers */
-                    result =  absHandler.handleNotification(
-                            resultContainer.notification(), attachment);
-            }
-        }
-
-        if (!(handler instanceof InternalNotificationHandler)) {
-            /* Only remove associations after user handler
-             * has finished with them */
-            Association assoc = associationToRemove.get();
-            if (assoc != null) {
-                removeAssociation(assoc);
-                associationToRemove.set(null);
-            }
-
-        }
-
-        return result;
-    }
-
-    private Association lookupAssociation(int assocId) {
-        /* Lookup the association in our internal map */
-        synchronized (stateLock) {
-            Set<Association> assocs = associationMap.keySet();
-            for (Association a : assocs) {
-                if (a.associationID() == assocId) {
-                    return a;
-                }
-            }
-        }
-        return null;
-    }
-
-    private void addAssociation(Association association) {
-        synchronized (stateLock) {
-            int assocId = association.associationID();
-            Set<SocketAddress> addresses = null;
-
-            try {
-                addresses = SctpNet.getRemoteAddresses(fdVal, assocId);
-            } catch (IOException unused) {
-                /* OK, determining connected addresses may not be possible
-                 * shutdown, connection lost, etc */
-            }
-
-            associationMap.put(association, addresses);
-            if (addresses != null) {
-                for (SocketAddress addr : addresses)
-                    addressMap.put(addr, association);
-            }
-        }
-    }
-
-    private void removeAssociation(Association association) {
-        synchronized (stateLock) {
-            int assocId = association.associationID();
-            Set<SocketAddress> addresses = null;
-
-             try {
-                addresses = SctpNet.getRemoteAddresses(fdVal, assocId);
-            } catch (IOException unused) {
-                /* OK, determining connected addresses may not be possible
-                 * shutdown, connection lost, etc */
-            }
-
-            Set<Association> assocs = associationMap.keySet();
-            for (Association a : assocs) {
-                if (a.associationID() == assocId) {
-                    associationMap.remove(a);
-                    break;
-                }
-            }
-            if (addresses != null) {
-                for (SocketAddress addr : addresses)
-                    addressMap.remove(addr);
-            } else {
-                /* We cannot determine the connected addresses */
-                Set<java.util.Map.Entry<SocketAddress, Association>> addrAssocs =
-                        addressMap.entrySet();
-                Iterator<Entry<SocketAddress, Association>> iterator = addrAssocs.iterator();
-                while (iterator.hasNext()) {
-                    Entry<SocketAddress, Association> entry = iterator.next();
-                    if (entry.getValue().equals(association)) {
-                        iterator.remove();
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * @throws  IllegalArgumentException
-     *          If the given association is not controlled by this channel
-     *
-     * @return  {@code true} if, and only if, the given association is one
-     *          of the current associations controlled by this channel
-     */
-    private boolean checkAssociation(Association messageAssoc) {
-        synchronized (stateLock) {
-            for (Association association : associationMap.keySet()) {
-                if (messageAssoc.equals(association)) {
-                    return true;
-                }
-            }
-        }
-        throw new IllegalArgumentException(
-              "Given Association is not controlled by this channel");
-    }
-
-    private void checkStreamNumber(Association assoc, int streamNumber) {
-        synchronized (stateLock) {
-            if (streamNumber < 0 || streamNumber >= assoc.maxOutboundStreams())
-                throw new InvalidStreamException();
-        }
-    }
-
-    /* TODO: Add support for ttl and isComplete to both 121 12M
-     *       SCTP_EOR not yet supported on reference platforms
-     *       TTL support limited...
-     */
-    @Override
-    public int send(ByteBuffer buffer, MessageInfo messageInfo)
-            throws IOException {
-        if (buffer == null)
-            throw new IllegalArgumentException("buffer cannot be null");
-
-        if (messageInfo == null)
-            throw new IllegalArgumentException("messageInfo cannot be null");
-
-        synchronized (sendLock) {
-            ensureOpen();
-
-            if (!isBound())
-                bind(null, 0);
-
-            int n = 0;
-            try {
-                int assocId = -1;
-                SocketAddress address = null;
-                begin();
-
-                synchronized (stateLock) {
-                    if(!isOpen())
-                        return 0;
-                    senderThread = NativeThread.current();
-
-                    /* Determine what address or association to send to */
-                    Association assoc = messageInfo.association();
-                    InetSocketAddress addr = (InetSocketAddress)messageInfo.address();
-                    if (assoc != null) {
-                        checkAssociation(assoc);
-                        checkStreamNumber(assoc, messageInfo.streamNumber());
-                        assocId = assoc.associationID();
-                        /* have we also got a preferred address */
-                        if (addr != null) {
-                            if (!assoc.equals(addressMap.get(addr)))
-                                throw new IllegalArgumentException("given preferred address is not part of this association");
-                            address = addr;
-                        }
-                    } else if (addr != null) {
-                        address = addr;
-                        Association association = addressMap.get(addr);
-                        if (association != null) {
-                            checkStreamNumber(association, messageInfo.streamNumber());
-                            assocId = association.associationID();
-
-                        } else { /* must be new association */
-                            SecurityManager sm = System.getSecurityManager();
-                            if (sm != null)
-                                sm.checkConnect(addr.getAddress().getHostAddress(),
-                                                addr.getPort());
-                        }
-                    } else {
-                        throw new AssertionError(
-                            "Both association and address cannot be null");
-                    }
-                }
-
-                do {
-                    n = send(fdVal, buffer, assocId, address, messageInfo);
-                } while ((n == IOStatus.INTERRUPTED) && isOpen());
-
-                return IOStatus.normalize(n);
-            } finally {
-                senderCleanup();
-                end((n > 0) || (n == IOStatus.UNAVAILABLE));
-                assert IOStatus.check(n);
-            }
-        }
-    }
-
-    private int send(int fd,
-                     ByteBuffer src,
-                     int assocId,
-                     SocketAddress target,
-                     MessageInfo messageInfo)
-            throws IOException {
-        int streamNumber = messageInfo.streamNumber();
-        boolean unordered = messageInfo.isUnordered();
-        int ppid = messageInfo.payloadProtocolID();
-
-        if (src instanceof DirectBuffer)
-            return sendFromNativeBuffer(fd, src, target, assocId,
-                    streamNumber, unordered, ppid);
-
-        /* Substitute a native buffer */
-        int pos = src.position();
-        int lim = src.limit();
-        assert (pos <= lim && streamNumber >= 0);
-
-        int rem = (pos <= lim ? lim - pos : 0);
-        ByteBuffer bb = Util.getTemporaryDirectBuffer(rem);
-        try {
-            bb.put(src);
-            bb.flip();
-            /* Do not update src until we see how many bytes were written */
-            src.position(pos);
-
-            int n = sendFromNativeBuffer(fd, bb, target, assocId,
-                    streamNumber, unordered, ppid);
-            if (n > 0) {
-                /* now update src */
-                src.position(pos + n);
-            }
-            return n;
-        } finally {
-            Util.releaseTemporaryDirectBuffer(bb);
-        }
-    }
-
-    private int sendFromNativeBuffer(int fd,
-                                     ByteBuffer bb,
-                                     SocketAddress target,
-                                     int assocId,
-                                     int streamNumber,
-                                     boolean unordered,
-                                     int ppid)
-            throws IOException {
-        InetAddress addr = null;     // no preferred address
-        int port = 0;
-        if (target != null) {
-            InetSocketAddress isa = Net.checkAddress(target);
-            addr = isa.getAddress();
-            port = isa.getPort();
-        }
-        int pos = bb.position();
-        int lim = bb.limit();
-        assert (pos <= lim);
-        int rem = (pos <= lim ? lim - pos : 0);
-
-        int written = send0(fd, ((DirectBuffer)bb).address() + pos, rem, addr,
-                            port, assocId, streamNumber, unordered, ppid);
-        if (written > 0)
-            bb.position(pos + written);
-        return written;
-    }
-
-    @Override
-    public SctpMultiChannel shutdown(Association association)
-            throws IOException {
-        synchronized (stateLock) {
-            checkAssociation(association);
-            if (!isOpen())
-                throw new ClosedChannelException();
-
-            SctpNet.shutdown(fdVal, association.associationID());
-        }
-        return this;
-    }
-
-    @Override
-    public Set<SocketAddress> getAllLocalAddresses()
-            throws IOException {
-        synchronized (stateLock) {
-            if (!isOpen())
-                throw new ClosedChannelException();
-            if (!isBound())
-                return Collections.EMPTY_SET;
-
-            return SctpNet.getLocalAddresses(fdVal);
-        }
-    }
-
-    @Override
-    public Set<SocketAddress> getRemoteAddresses(Association association)
-            throws IOException {
-        synchronized (stateLock) {
-            checkAssociation(association);
-            if (!isOpen())
-                throw new ClosedChannelException();
-
-            try {
-                return SctpNet.getRemoteAddresses(fdVal, association.associationID());
-            } catch (SocketException se) {
-                /* a valid association should always have remote addresses */
-                Set<SocketAddress> addrs = associationMap.get(association);
-                return addrs != null ? addrs : Collections.EMPTY_SET;
-            }
-        }
-    }
-
-    @Override
-    public SctpChannel branch(Association association)
-            throws IOException {
-        synchronized (stateLock) {
-            checkAssociation(association);
-            if (!isOpen())
-                throw new ClosedChannelException();
-
-            FileDescriptor bFd = SctpNet.branch(fdVal,
-                                                association.associationID());
-            /* successfully branched, we can now remove it from assoc list */
-            removeAssociation(association);
-
-            return new SctpChannelImpl(provider(), bFd, association);
-        }
-    }
-
-    /* Use common native implementation shared between
-     * one-to-one and one-to-many */
-    private static int receive0(int fd,
-                                SctpResultContainer resultContainer,
-                                long address,
-                                int length)
-            throws IOException{
-        return SctpChannelImpl.receive0(fd, resultContainer, address,
-                length, false /*peek */);
-    }
-
-    private static int send0(int fd,
-                             long address,
-                             int length,
-                             InetAddress addr,
-                             int port,
-                             int assocId,
-                             int streamNumber,
-                             boolean unordered,
-                             int ppid)
-            throws IOException {
-        return SctpChannelImpl.send0(fd, address, length, addr, port, assocId,
-                streamNumber, unordered, ppid);
-    }
-
-    static {
-        Util.load();   /* loads nio & net native libraries */
-        java.security.AccessController.doPrivileged(
-                new sun.security.action.LoadLibraryAction("sctp"));
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/ch/SctpNet.java b/ojluni/src/main/java/sun/nio/ch/SctpNet.java
deleted file mode 100755
index 7ef4424..0000000
--- a/ojluni/src/main/java/sun/nio/ch/SctpNet.java
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- * Copyright (c) 2009, 2010, 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.
- */
-package sun.nio.ch;
-
-import java.io.FileDescriptor;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.nio.channels.AlreadyBoundException;
-import java.util.Set;
-import java.util.HashSet;
-import java.security.AccessController;
-import sun.security.action.GetPropertyAction;
-import com.sun.nio.sctp.SctpSocketOption;
-import static com.sun.nio.sctp.SctpStandardSocketOptions.*;
-import java.security.PrivilegedExceptionAction;
-
-public class SctpNet {
-    static final String osName = AccessController.doPrivileged(
-                    new GetPropertyAction("os.name"));
-
-    // Value of jdk.net.revealLocalAddress
-    private static boolean revealLocalAddress;
-
-    // True if jdk.net.revealLocalAddress had been read
-    private static volatile boolean propRevealLocalAddr;
-
-    /* -- Miscellaneous SCTP utilities -- */
-
-    private static boolean IPv4MappedAddresses() {
-        if ("SunOS".equals(osName)) {
-            /* Solaris supports IPv4Mapped Addresses with bindx */
-            return true;
-        } /* else {  //other OS/implementations  */
-
-        /* lksctp/linux requires Ipv4 addresses */
-        return false;
-    }
-
-    static boolean throwAlreadyBoundException() throws IOException {
-        throw new AlreadyBoundException();
-    }
-
-    static void listen(int fd, int backlog) throws IOException {
-        listen0(fd, backlog);
-    }
-
-    static int connect(int fd, InetAddress remote, int remotePort)
-            throws IOException {
-        return connect0(fd, remote, remotePort);
-    }
-
-    static void close(int fd) throws IOException {
-        close0(fd);
-    }
-
-    static void preClose(int fd) throws IOException {
-        preClose0(fd);
-    }
-
-    /**
-     * @param  oneToOne
-     *         if {@code true} returns a one-to-one sctp socket, otherwise
-     *         returns a one-to-many sctp socket
-     */
-    static FileDescriptor socket(boolean oneToOne) throws IOException {
-        int nativefd = socket0(oneToOne);
-        return IOUtil.newFD(nativefd);
-    }
-
-    static void bindx(int fd, InetAddress[] addrs, int port, boolean add)
-            throws IOException {
-        bindx(fd, addrs, port, addrs.length, add,
-                IPv4MappedAddresses());
-    }
-
-    static Set<SocketAddress> getLocalAddresses(int fd)
-            throws IOException {
-        Set<SocketAddress> set = null;
-        SocketAddress[] saa = getLocalAddresses0(fd);
-
-        if (saa != null) {
-            set = getRevealedLocalAddressSet(saa);
-        }
-
-        return set;
-    }
-
-    private static Set<SocketAddress> getRevealedLocalAddressSet(
-            SocketAddress[] saa)
-    {
-         SecurityManager sm = System.getSecurityManager();
-         Set<SocketAddress> set = new HashSet<>(saa.length);
-         for (SocketAddress sa : saa) {
-             set.add(getRevealedLocalAddress(sa, sm));
-         }
-         return set;
-    }
-
-    private static SocketAddress getRevealedLocalAddress(SocketAddress sa,
-                                                         SecurityManager sm)
-    {
-        if (sm == null || sa == null)
-            return sa;
-        InetSocketAddress ia = (InetSocketAddress)sa;
-        if (!propRevealLocalAddr) {
-            try {
-                revealLocalAddress = Boolean.parseBoolean(
-                      AccessController.doPrivileged(
-                          new PrivilegedExceptionAction<String>() {
-                              public String run() {
-                                  return System.getProperty(
-                                      "jdk.net.revealLocalAddress");
-                              }
-                          }));
-
-            } catch (Exception e) {
-                // revealLocalAddress is false
-            }
-            propRevealLocalAddr = true;
-        }
-        if (!revealLocalAddress) {
-           try{
-               sm.checkConnect(ia.getAddress().getHostAddress(), -1);
-               //Security check passed
-           } catch (SecurityException e) {
-                //Return loopback address
-                return new InetSocketAddress(
-                        InetAddress.getLoopbackAddress(), ia.getPort());
-           }
-        }
-
-        // Security check passed or jdk.net.revealLocalAddress set to true
-        return sa;
-
-    }
-
-    static Set<SocketAddress> getRemoteAddresses(int fd, int assocId)
-            throws IOException {
-        HashSet<SocketAddress> set = null;
-        SocketAddress[] saa = getRemoteAddresses0(fd, assocId);
-
-        if (saa != null) {
-            set = new HashSet<SocketAddress>(saa.length);
-            for (SocketAddress sa : saa)
-                set.add(sa);
-        }
-
-        return set;
-    }
-
-    static void setSocketOption(int fd,
-                                SctpSocketOption name,
-                                Object value,
-                                int assocId)
-            throws IOException {
-        if (value == null)
-            throw new IllegalArgumentException("Invalid option value");
-
-        Class<?> type = name.type();
-        if (!type.isInstance(value))
-            throw new IllegalArgumentException("Invalid option value");
-
-        if (name.equals(SCTP_INIT_MAXSTREAMS)) {
-            InitMaxStreams maxStreamValue = (InitMaxStreams)value;
-            SctpNet.setInitMsgOption0(fd,
-                 maxStreamValue.maxInStreams(), maxStreamValue.maxOutStreams());
-        } else if (name.equals(SCTP_PRIMARY_ADDR) ||
-                   name.equals(SCTP_SET_PEER_PRIMARY_ADDR)) {
-
-            SocketAddress addr  = (SocketAddress) value;
-            if (addr == null)
-                throw new IllegalArgumentException("Invalid option value");
-
-            Net.checkAddress(addr);
-            InetSocketAddress netAddr = (InetSocketAddress)addr;
-
-            if (name.equals(SCTP_PRIMARY_ADDR)) {
-                setPrimAddrOption0(fd,
-                                   assocId,
-                                   netAddr.getAddress(),
-                                   netAddr.getPort());
-            } else {
-                setPeerPrimAddrOption0(fd,
-                                       assocId,
-                                       netAddr.getAddress(),
-                                       netAddr.getPort(),
-                                       IPv4MappedAddresses());
-            }
-        } else if (name.equals(SCTP_DISABLE_FRAGMENTS) ||
-            name.equals(SCTP_EXPLICIT_COMPLETE) ||
-            name.equals(SCTP_FRAGMENT_INTERLEAVE) ||
-            name.equals(SCTP_NODELAY) ||
-            name.equals(SO_SNDBUF) ||
-            name.equals(SO_RCVBUF) ||
-            name.equals(SO_LINGER)) {
-            setIntOption(fd, name, value);
-        } else {
-            throw new AssertionError("Unknown socket option");
-        }
-    }
-
-    static Object getSocketOption(int fd, SctpSocketOption name, int assocId)
-             throws IOException {
-         if (name.equals(SCTP_SET_PEER_PRIMARY_ADDR)) {
-            throw new IllegalArgumentException(
-                    "SCTP_SET_PEER_PRIMARY_ADDR cannot be retrieved");
-        } else if (name.equals(SCTP_INIT_MAXSTREAMS)) {
-            /* container for holding maxIn/Out streams */
-            int[] values = new int[2];
-            SctpNet.getInitMsgOption0(fd, values);
-            return InitMaxStreams.create(values[0], values[1]);
-        } else if (name.equals(SCTP_PRIMARY_ADDR)) {
-            return getPrimAddrOption0(fd, assocId);
-        } else if (name.equals(SCTP_DISABLE_FRAGMENTS) ||
-            name.equals(SCTP_EXPLICIT_COMPLETE) ||
-            name.equals(SCTP_FRAGMENT_INTERLEAVE) ||
-            name.equals(SCTP_NODELAY) ||
-            name.equals(SO_SNDBUF) ||
-            name.equals(SO_RCVBUF) ||
-            name.equals(SO_LINGER)) {
-            return getIntOption(fd, name);
-        } else {
-            throw new AssertionError("Unknown socket option");
-        }
-    }
-
-    static void setIntOption(int fd, SctpSocketOption name, Object value)
-            throws IOException {
-        if (value == null)
-            throw new IllegalArgumentException("Invalid option value");
-
-        Class<?> type = name.type();
-        if (type != Integer.class && type != Boolean.class)
-            throw new AssertionError("Should not reach here");
-
-        if (name == SO_RCVBUF ||
-            name == SO_SNDBUF)
-        {
-            int i = ((Integer)value).intValue();
-            if (i < 0)
-                throw new IllegalArgumentException(
-                        "Invalid send/receive buffer size");
-        } else if (name == SO_LINGER) {
-            int i = ((Integer)value).intValue();
-            if (i < 0)
-                value = Integer.valueOf(-1);
-            if (i > 65535)
-                value = Integer.valueOf(65535);
-        } else if (name.equals(SCTP_FRAGMENT_INTERLEAVE)) {
-            int i = ((Integer)value).intValue();
-            if (i < 0 || i > 2)
-                throw new IllegalArgumentException(
-                        "Invalid value for SCTP_FRAGMENT_INTERLEAVE");
-        }
-
-        int arg;
-        if (type == Integer.class) {
-            arg = ((Integer)value).intValue();
-        } else {
-            boolean b = ((Boolean)value).booleanValue();
-            arg = (b) ? 1 : 0;
-        }
-
-        setIntOption0(fd, ((SctpStdSocketOption)name).constValue(), arg);
-    }
-
-    static Object getIntOption(int fd, SctpSocketOption name)
-            throws IOException {
-        Class<?> type = name.type();
-
-        if (type != Integer.class && type != Boolean.class)
-            throw new AssertionError("Should not reach here");
-
-        if (!(name instanceof SctpStdSocketOption))
-            throw new AssertionError("Should not reach here");
-
-        int value = getIntOption0(fd,
-                ((SctpStdSocketOption)name).constValue());
-
-        if (type == Integer.class) {
-            return Integer.valueOf(value);
-        } else {
-            return (value == 0) ? Boolean.FALSE : Boolean.TRUE;
-        }
-    }
-
-    static void shutdown(int fd, int assocId)
-            throws IOException {
-        shutdown0(fd, assocId);
-    }
-
-    static FileDescriptor branch(int fd, int assocId) throws IOException {
-        int nativefd = branch0(fd, assocId);
-        return IOUtil.newFD(nativefd);
-    }
-
-    /* Native Methods */
-    static native int socket0(boolean oneToOne) throws IOException;
-
-    static native void listen0(int fd, int backlog) throws IOException;
-
-    static native int connect0(int fd, InetAddress remote, int remotePort)
-        throws IOException;
-
-    static native void close0(int fd) throws IOException;
-
-    static native void preClose0(int fd) throws IOException;
-
-    static native void bindx(int fd, InetAddress[] addrs, int port, int length,
-            boolean add, boolean preferIPv6) throws IOException;
-
-    static native int getIntOption0(int fd, int opt) throws IOException;
-
-    static native void setIntOption0(int fd, int opt, int arg)
-        throws IOException;
-
-    static native SocketAddress[] getLocalAddresses0(int fd) throws IOException;
-
-    static native SocketAddress[] getRemoteAddresses0(int fd, int assocId)
-            throws IOException;
-
-    static native int branch0(int fd, int assocId) throws IOException;
-
-    static native void setPrimAddrOption0(int fd, int assocId, InetAddress ia,
-            int port) throws IOException;
-
-    static native void setPeerPrimAddrOption0(int fd, int assocId,
-            InetAddress ia, int port, boolean preferIPv6) throws IOException;
-
-    static native SocketAddress getPrimAddrOption0(int fd, int assocId)
-            throws IOException;
-
-    /* retVals [0] maxInStreams, [1] maxOutStreams */
-    static native void getInitMsgOption0(int fd, int[] retVals) throws IOException;
-
-    static native void setInitMsgOption0(int fd, int arg1, int arg2)
-            throws IOException;
-
-    static native void shutdown0(int fd, int assocId);
-
-    static native void init();
-
-    static {
-        init();
-    }
-}
-
diff --git a/ojluni/src/main/java/sun/nio/ch/SctpNotification.java b/ojluni/src/main/java/sun/nio/ch/SctpNotification.java
deleted file mode 100755
index d35ea80..0000000
--- a/ojluni/src/main/java/sun/nio/ch/SctpNotification.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-package sun.nio.ch;
-
-import com.sun.nio.sctp.Association;
-import com.sun.nio.sctp.Notification;
-
-/**
- * All Notification implemenations MUST implement this interface to provide
- * access to the native association identidier.
- */
-interface SctpNotification extends Notification {
-    int assocId();
-    void setAssociation(Association association);
-}
diff --git a/ojluni/src/main/java/sun/nio/ch/SctpPeerAddrChange.java b/ojluni/src/main/java/sun/nio/ch/SctpPeerAddrChange.java
deleted file mode 100755
index 1b89f63..0000000
--- a/ojluni/src/main/java/sun/nio/ch/SctpPeerAddrChange.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-package sun.nio.ch;
-
-import java.net.SocketAddress;
-import com.sun.nio.sctp.Association;
-import com.sun.nio.sctp.PeerAddressChangeNotification;
-
-/**
- * An implementation of PeerAddressChangeNotification
- */
-public class SctpPeerAddrChange extends PeerAddressChangeNotification
-    implements SctpNotification
-{
-    /* static final ints so that they can be referenced from native */
-    private final static int SCTP_ADDR_AVAILABLE = 1;
-    private final static int SCTP_ADDR_UNREACHABLE = 2;
-    private final static int SCTP_ADDR_REMOVED = 3;
-    private final static int SCTP_ADDR_ADDED = 4;
-    private final static int SCTP_ADDR_MADE_PRIM = 5;
-    private final static int SCTP_ADDR_CONFIRMED =6;
-
-    private Association association;
-
-    /* assocId is used to lookup the association before the notification is
-     * returned to user code */
-    private int assocId;
-    private SocketAddress address;
-    private AddressChangeEvent event;
-
-    /* Invoked from native */
-    private SctpPeerAddrChange(int assocId, SocketAddress address, int intEvent) {
-        switch (intEvent) {
-            case SCTP_ADDR_AVAILABLE :
-                this.event = AddressChangeEvent.ADDR_AVAILABLE;
-                break;
-            case SCTP_ADDR_UNREACHABLE :
-                this.event = AddressChangeEvent.ADDR_UNREACHABLE;
-                break;
-            case SCTP_ADDR_REMOVED :
-                this.event = AddressChangeEvent.ADDR_REMOVED;
-                break;
-            case SCTP_ADDR_ADDED :
-                this.event = AddressChangeEvent.ADDR_ADDED;
-                break;
-            case SCTP_ADDR_MADE_PRIM :
-                this.event = AddressChangeEvent.ADDR_MADE_PRIMARY;
-                break;
-            case SCTP_ADDR_CONFIRMED :
-                this.event = AddressChangeEvent.ADDR_CONFIRMED;
-                break;
-            default:
-                throw new AssertionError("Unknown event type");
-        }
-        this.assocId = assocId;
-        this.address = address;
-    }
-
-    @Override
-    public int assocId() {
-        return assocId;
-    }
-
-    @Override
-    public void setAssociation(Association association) {
-        this.association = association;
-    }
-
-    @Override
-    public SocketAddress address() {
-        assert address != null;
-        return address;
-    }
-
-    @Override
-    public Association association() {
-        assert association != null;
-        return association;
-    }
-
-    @Override
-    public AddressChangeEvent event() {
-        assert event != null;
-        return event;
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append(super.toString()).append(" [");
-        sb.append("Address: ").append(address);
-        sb.append(", Association:").append(association);
-        sb.append(", Event: ").append(event).append("]");
-        return sb.toString();
-    }
-}
-
diff --git a/ojluni/src/main/java/sun/nio/ch/SctpResultContainer.java b/ojluni/src/main/java/sun/nio/ch/SctpResultContainer.java
deleted file mode 100755
index f6c09d3..0000000
--- a/ojluni/src/main/java/sun/nio/ch/SctpResultContainer.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-package sun.nio.ch;
-
-/**
- * Wraps the actual message or notification so that it can be
- * set and returned from the native receive implementation.
- */
-public class SctpResultContainer {
-    /* static final ints so that they can be referenced from native */
-    static final int NOTHING = 0;
-    static final int MESSAGE = 1;
-    static final int SEND_FAILED = 2;
-    static final int ASSOCIATION_CHANGED = 3;
-    static final int PEER_ADDRESS_CHANGED = 4;
-    static final int SHUTDOWN = 5;
-
-    private Object value;
-    private int type;
-
-    int type() {
-        return type;
-    }
-
-    boolean hasSomething() {
-        return type() != NOTHING;
-    }
-
-    boolean isNotification() {
-        return type() != MESSAGE && type() != NOTHING ? true : false;
-    }
-
-    void clear() {
-        type = NOTHING;
-        value = null;
-    }
-
-    SctpNotification notification() {
-        assert type() != MESSAGE && type() != NOTHING;
-
-        return (SctpNotification) value;
-    }
-
-    SctpMessageInfoImpl getMessageInfo() {
-        assert type() == MESSAGE;
-
-        if (value instanceof SctpMessageInfoImpl)
-            return (SctpMessageInfoImpl) value;
-
-        return null;
-    }
-
-    SctpSendFailed getSendFailed() {
-        assert type() == SEND_FAILED;
-
-        if (value instanceof SctpSendFailed)
-            return (SctpSendFailed) value;
-
-        return null;
-    }
-
-    SctpAssocChange getAssociationChanged() {
-        assert type() == ASSOCIATION_CHANGED;
-
-        if (value instanceof SctpAssocChange)
-            return (SctpAssocChange) value;
-
-        return null;
-    }
-
-    SctpPeerAddrChange getPeerAddressChanged() {
-        assert type() == PEER_ADDRESS_CHANGED;
-
-        if (value instanceof SctpPeerAddrChange)
-            return (SctpPeerAddrChange) value;
-
-        return null;
-    }
-
-    SctpShutdown getShutdown() {
-        assert type() == SHUTDOWN;
-
-        if (value instanceof SctpShutdown)
-            return (SctpShutdown) value;
-
-        return null;
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append("Type: ");
-        switch (type) {
-            case NOTHING:              sb.append("NOTHING");             break;
-            case MESSAGE:              sb.append("MESSAGE");             break;
-            case SEND_FAILED:          sb.append("SEND FAILED");         break;
-            case ASSOCIATION_CHANGED:  sb.append("ASSOCIATION CHANGE");  break;
-            case PEER_ADDRESS_CHANGED: sb.append("PEER ADDRESS CHANGE"); break;
-            case SHUTDOWN:             sb.append("SHUTDOWN");            break;
-            default :                  sb.append("Unknown result type");
-        }
-        sb.append(", Value: ");
-        sb.append((value == null) ? "null" : value.toString());
-        return sb.toString();
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/ch/SctpSendFailed.java b/ojluni/src/main/java/sun/nio/ch/SctpSendFailed.java
deleted file mode 100755
index ff71bdf..0000000
--- a/ojluni/src/main/java/sun/nio/ch/SctpSendFailed.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-package sun.nio.ch;
-
-import java.nio.ByteBuffer;
-import java.net.SocketAddress;
-import com.sun.nio.sctp.Association;
-import com.sun.nio.sctp.SendFailedNotification;
-
-/**
- * An implementation of SendFailedNotification
- */
-public class SctpSendFailed extends SendFailedNotification
-    implements SctpNotification
-{
-    private Association association;
-    /* assocId is used to lookup the association before the notification is
-     * returned to user code */
-    private int assocId;
-    private SocketAddress address;
-    private ByteBuffer buffer;
-    private int errorCode;
-    private int streamNumber;
-
-    /* Invoked from native */
-    private SctpSendFailed(int assocId,
-                           SocketAddress address,
-                           ByteBuffer buffer,
-                           int errorCode,
-                           int streamNumber) {
-        this.assocId = assocId;
-        this.errorCode = errorCode;
-        this.streamNumber = streamNumber;
-        this.address = address;
-        this.buffer = buffer;
-    }
-
-    @Override
-    public int assocId() {
-        return assocId;
-    }
-
-    @Override
-    public void setAssociation(Association association) {
-        this.association = association;
-    }
-
-    @Override
-    public Association association() {
-        /* may be null */
-        return association;
-    }
-
-    @Override
-    public SocketAddress address() {
-        assert address != null;
-        return address;
-    }
-
-    @Override
-    public ByteBuffer buffer() {
-        assert buffer != null;
-        return buffer;
-    }
-
-    @Override
-    public int errorCode() {
-        return errorCode;
-    }
-
-    @Override
-    public int streamNumber() {
-        return streamNumber;
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append(super.toString()).append(" [");
-        sb.append("Association:").append(association);
-        sb.append(", Address: ").append(address);
-        sb.append(", buffer: ").append(buffer);
-        sb.append(", errorCode: ").append(errorCode);
-        sb.append(", streamNumber: ").append(streamNumber);
-        sb.append("]");
-        return sb.toString();
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/ch/SctpServerChannelImpl.java b/ojluni/src/main/java/sun/nio/ch/SctpServerChannelImpl.java
deleted file mode 100755
index 845ac8e..0000000
--- a/ojluni/src/main/java/sun/nio/ch/SctpServerChannelImpl.java
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- * Copyright (c) 2009, 2010, 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.
- */
-package sun.nio.ch;
-
-import java.net.SocketAddress;
-import java.net.InetSocketAddress;
-import java.net.InetAddress;
-import java.io.FileDescriptor;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.Set;
-import java.util.HashSet;
-import java.nio.channels.SelectionKey;
-import java.nio.channels.ClosedChannelException;
-import java.nio.channels.NotYetBoundException;
-import java.nio.channels.spi.SelectorProvider;
-import com.sun.nio.sctp.IllegalUnbindException;
-import com.sun.nio.sctp.SctpChannel;
-import com.sun.nio.sctp.SctpServerChannel;
-import com.sun.nio.sctp.SctpSocketOption;
-import com.sun.nio.sctp.SctpStandardSocketOptions;
-
-/**
- * An implementation of SctpServerChannel
- */
-public class SctpServerChannelImpl extends SctpServerChannel
-    implements SelChImpl
-{
-    private final FileDescriptor fd;
-
-    private final int fdVal;
-
-    /* IDs of native thread doing accept, for signalling */
-    private volatile long thread = 0;
-
-    /* Lock held by thread currently blocked in this channel */
-    private final Object lock = new Object();
-
-    /* Lock held by any thread that modifies the state fields declared below
-     * DO NOT invoke a blocking I/O operation while holding this lock! */
-    private final Object stateLock = new Object();
-
-    private enum ChannelState {
-        UNINITIALIZED,
-        INUSE,
-        KILLPENDING,
-        KILLED,
-    }
-    /* -- The following fields are protected by stateLock -- */
-    private ChannelState state = ChannelState.UNINITIALIZED;
-
-    /* Binding: Once bound the port will remain constant. */
-    int port = -1;
-    private HashSet<InetSocketAddress> localAddresses = new HashSet<InetSocketAddress>();
-    /* Has the channel been bound to the wildcard address */
-    private boolean wildcard; /* false */
-
-    /* -- End of fields protected by stateLock -- */
-
-    /**
-     * Initializes a new instance of this class.
-     */
-    public SctpServerChannelImpl(SelectorProvider provider)
-            throws IOException {
-        //TODO: update provider remove public modifier
-        super(provider);
-        this.fd = SctpNet.socket(true);
-        this.fdVal = IOUtil.fdVal(fd);
-        this.state = ChannelState.INUSE;
-    }
-
-    @Override
-    public SctpServerChannel bind(SocketAddress local, int backlog)
-            throws IOException {
-        synchronized (lock) {
-            synchronized (stateLock) {
-                if (!isOpen())
-                    throw new ClosedChannelException();
-                if (isBound())
-                    SctpNet.throwAlreadyBoundException();
-
-                InetSocketAddress isa = (local == null) ?
-                    new InetSocketAddress(0) : Net.checkAddress(local);
-                SecurityManager sm = System.getSecurityManager();
-                if (sm != null)
-                    sm.checkListen(isa.getPort());
-                Net.bind(fd, isa.getAddress(), isa.getPort());
-
-                InetSocketAddress boundIsa = Net.localAddress(fd);
-                port = boundIsa.getPort();
-                localAddresses.add(isa);
-                    if (isa.getAddress().isAnyLocalAddress())
-                        wildcard = true;
-
-                SctpNet.listen(fdVal, backlog < 1 ? 50 : backlog);
-            }
-        }
-        return this;
-    }
-
-    @Override
-    public SctpServerChannel bindAddress(InetAddress address)
-            throws IOException {
-        return bindUnbindAddress(address, true);
-    }
-
-    @Override
-    public SctpServerChannel unbindAddress(InetAddress address)
-            throws IOException {
-        return bindUnbindAddress(address, false);
-    }
-
-    private SctpServerChannel bindUnbindAddress(InetAddress address, boolean add)
-            throws IOException {
-        if (address == null)
-            throw new IllegalArgumentException();
-
-        synchronized (lock) {
-            synchronized (stateLock) {
-                if (!isOpen())
-                    throw new ClosedChannelException();
-                if (!isBound())
-                    throw new NotYetBoundException();
-                if (wildcard)
-                    throw new IllegalStateException(
-                            "Cannot add or remove addresses from a channel that is bound to the wildcard address");
-                if (address.isAnyLocalAddress())
-                    throw new IllegalArgumentException(
-                            "Cannot add or remove the wildcard address");
-                if (add) {
-                    for (InetSocketAddress addr : localAddresses) {
-                        if (addr.getAddress().equals(address)) {
-                            SctpNet.throwAlreadyBoundException();
-                        }
-                    }
-                } else { /*removing */
-                    /* Verify that there is more than one address
-                     * and that address is already bound */
-                    if (localAddresses.size() <= 1)
-                        throw new IllegalUnbindException("Cannot remove address from a channel with only one address bound");
-                    boolean foundAddress = false;
-                    for (InetSocketAddress addr : localAddresses) {
-                        if (addr.getAddress().equals(address)) {
-                            foundAddress = true;
-                            break;
-                        }
-                    }
-                    if (!foundAddress )
-                        throw new IllegalUnbindException("Cannot remove address from a channel that is not bound to that address");
-                }
-
-                SctpNet.bindx(fdVal, new InetAddress[]{address}, port, add);
-
-                /* Update our internal Set to reflect the addition/removal */
-                if (add)
-                    localAddresses.add(new InetSocketAddress(address, port));
-                else {
-                    for (InetSocketAddress addr : localAddresses) {
-                        if (addr.getAddress().equals(address)) {
-                            localAddresses.remove(addr);
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-        return this;
-    }
-
-    private boolean isBound() {
-        synchronized (stateLock) {
-            return port == -1 ? false : true;
-        }
-    }
-
-    private void acceptCleanup() throws IOException {
-        synchronized (stateLock) {
-            thread = 0;
-            if (state == ChannelState.KILLPENDING)
-                kill();
-        }
-    }
-
-    @Override
-    public SctpChannel accept() throws IOException {
-        synchronized (lock) {
-            if (!isOpen())
-                throw new ClosedChannelException();
-            if (!isBound())
-                throw new NotYetBoundException();
-            SctpChannel sc = null;
-
-            int n = 0;
-            FileDescriptor newfd = new FileDescriptor();
-            InetSocketAddress[] isaa = new InetSocketAddress[1];
-
-            try {
-                begin();
-                if (!isOpen())
-                    return null;
-                thread = NativeThread.current();
-                for (;;) {
-                    n = accept0(fd, newfd, isaa);
-                    if ((n == IOStatus.INTERRUPTED) && isOpen())
-                        continue;
-                    break;
-                }
-            } finally {
-                acceptCleanup();
-                end(n > 0);
-                assert IOStatus.check(n);
-            }
-
-            if (n < 1)
-                return null;
-
-            IOUtil.configureBlocking(newfd, true);
-            InetSocketAddress isa = isaa[0];
-            sc = new SctpChannelImpl(provider(), newfd);
-
-            SecurityManager sm = System.getSecurityManager();
-            if (sm != null)
-                sm.checkAccept(isa.getAddress().getHostAddress(),
-                               isa.getPort());
-
-            return sc;
-        }
-    }
-
-    @Override
-    protected void implConfigureBlocking(boolean block) throws IOException {
-        IOUtil.configureBlocking(fd, block);
-    }
-
-    @Override
-    public void implCloseSelectableChannel() throws IOException {
-        synchronized (stateLock) {
-            SctpNet.preClose(fdVal);
-            if (thread != 0)
-                NativeThread.signal(thread);
-            if (!isRegistered())
-                kill();
-        }
-    }
-
-    @Override
-    public void kill() throws IOException {
-        synchronized (stateLock) {
-            if (state == ChannelState.KILLED)
-                return;
-            if (state == ChannelState.UNINITIALIZED) {
-                state = ChannelState.KILLED;
-                return;
-            }
-            assert !isOpen() && !isRegistered();
-
-            // Postpone the kill if there is a thread in accept
-            if (thread == 0) {
-                SctpNet.close(fdVal);
-                state = ChannelState.KILLED;
-            } else {
-                state = ChannelState.KILLPENDING;
-            }
-        }
-    }
-
-    @Override
-    public FileDescriptor getFD() {
-        return fd;
-    }
-
-    @Override
-    public int getFDVal() {
-        return fdVal;
-    }
-
-    /**
-     * Translates native poll revent ops into a ready operation ops
-     */
-    private boolean translateReadyOps(int ops, int initialOps,
-                                     SelectionKeyImpl sk) {
-        int intOps = sk.nioInterestOps();
-        int oldOps = sk.nioReadyOps();
-        int newOps = initialOps;
-
-        if ((ops & PollArrayWrapper.POLLNVAL) != 0) {
-            /* This should only happen if this channel is pre-closed while a
-             * selection operation is in progress
-             * ## Throw an error if this channel has not been pre-closed */
-            return false;
-        }
-
-        if ((ops & (PollArrayWrapper.POLLERR
-                    | PollArrayWrapper.POLLHUP)) != 0) {
-            newOps = intOps;
-            sk.nioReadyOps(newOps);
-            return (newOps & ~oldOps) != 0;
-        }
-
-        if (((ops & PollArrayWrapper.POLLIN) != 0) &&
-            ((intOps & SelectionKey.OP_ACCEPT) != 0))
-                newOps |= SelectionKey.OP_ACCEPT;
-
-        sk.nioReadyOps(newOps);
-        return (newOps & ~oldOps) != 0;
-    }
-
-    @Override
-    public boolean translateAndUpdateReadyOps(int ops, SelectionKeyImpl sk) {
-        return translateReadyOps(ops, sk.nioReadyOps(), sk);
-    }
-
-    @Override
-    public boolean translateAndSetReadyOps(int ops, SelectionKeyImpl sk) {
-        return translateReadyOps(ops, 0, sk);
-    }
-
-    @Override
-    public void translateAndSetInterestOps(int ops, SelectionKeyImpl sk) {
-        int newOps = 0;
-
-        /* Translate ops */
-        if ((ops & SelectionKey.OP_ACCEPT) != 0)
-            newOps |= PollArrayWrapper.POLLIN;
-        /* Place ops into pollfd array */
-        sk.selector.putEventOps(sk, newOps);
-
-    }
-
-    @Override
-    public <T> SctpServerChannel setOption(SctpSocketOption<T> name, T value)
-            throws IOException {
-        if (name == null)
-            throw new NullPointerException();
-        if (!supportedOptions().contains(name))
-            throw new UnsupportedOperationException("'" + name + "' not supported");
-
-        synchronized (stateLock) {
-            if (!isOpen())
-                throw new ClosedChannelException();
-
-            SctpNet.setSocketOption(fdVal, name, value, 0 /*oneToOne*/);
-            return this;
-        }
-    }
-
-    @Override
-    public <T> T getOption(SctpSocketOption<T> name) throws IOException {
-        if (name == null)
-            throw new NullPointerException();
-        if (!supportedOptions().contains(name))
-            throw new UnsupportedOperationException("'" + name + "' not supported");
-
-        synchronized (stateLock) {
-            if (!isOpen())
-                throw new ClosedChannelException();
-
-            return (T) SctpNet.getSocketOption(fdVal, name, 0 /*oneToOne*/);
-        }
-    }
-
-    private static class DefaultOptionsHolder {
-        static final Set<SctpSocketOption<?>> defaultOptions = defaultOptions();
-
-        private static Set<SctpSocketOption<?>> defaultOptions() {
-            HashSet<SctpSocketOption<?>> set = new HashSet<SctpSocketOption<?>>(1);
-            set.add(SctpStandardSocketOptions.SCTP_INIT_MAXSTREAMS);
-            return Collections.unmodifiableSet(set);
-        }
-    }
-
-    @Override
-    public final Set<SctpSocketOption<?>> supportedOptions() {
-        return DefaultOptionsHolder.defaultOptions;
-    }
-
-    @Override
-    public Set<SocketAddress> getAllLocalAddresses()
-            throws IOException {
-        synchronized (stateLock) {
-            if (!isOpen())
-                throw new ClosedChannelException();
-            if (!isBound())
-                return Collections.EMPTY_SET;
-
-            return SctpNet.getLocalAddresses(fdVal);
-        }
-    }
-
-    /* Native */
-    private static native void initIDs();
-
-    private static native int accept0(FileDescriptor ssfd,
-        FileDescriptor newfd, InetSocketAddress[] isaa) throws IOException;
-
-    static {
-        Util.load();   // loads nio & net native libraries
-        java.security.AccessController.doPrivileged(
-                new sun.security.action.LoadLibraryAction("sctp"));
-        initIDs();
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/ch/SctpShutdown.java b/ojluni/src/main/java/sun/nio/ch/SctpShutdown.java
deleted file mode 100755
index 9da2375..0000000
--- a/ojluni/src/main/java/sun/nio/ch/SctpShutdown.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-package sun.nio.ch;
-
-import com.sun.nio.sctp.Association;
-import com.sun.nio.sctp.ShutdownNotification;
-
-/**
- * An implementation of ShutdownNotification
- */
-public class SctpShutdown extends ShutdownNotification
-    implements SctpNotification
-{
-    private Association association;
-    /* assocId is used to lookup the association before the notification is
-     * returned to user code */
-    private int assocId;
-
-    /* Invoked from native */
-    private SctpShutdown(int assocId) {
-        this.assocId = assocId;
-    }
-
-    @Override
-    public int assocId() {
-        return assocId;
-    }
-
-    @Override
-    public void setAssociation(Association association) {
-        this.association = association;
-    }
-
-    @Override
-    public Association association() {
-        assert association != null;
-        return association;
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append(super.toString()).append(" [");
-        sb.append("Association:").append(association).append("]");
-        return sb.toString();
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/ch/SctpStdSocketOption.java b/ojluni/src/main/java/sun/nio/ch/SctpStdSocketOption.java
deleted file mode 100755
index f94c759..0000000
--- a/ojluni/src/main/java/sun/nio/ch/SctpStdSocketOption.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-package sun.nio.ch;
-
-import com.sun.nio.sctp.SctpSocketOption;
-
-public class SctpStdSocketOption<T>
-    implements SctpSocketOption<T>
-{
-    /* for native mapping of int options */
-    public static final int SCTP_DISABLE_FRAGMENTS = 1;
-    public static final int SCTP_EXPLICIT_COMPLETE = 2;
-    public static final int SCTP_FRAGMENT_INTERLEAVE = 3;
-    public static final int SCTP_NODELAY = 4;
-    public static final int SO_SNDBUF = 5;
-    public static final int SO_RCVBUF = 6;
-    public static final int SO_LINGER = 7;
-
-    private final String name;
-    private final Class<T> type;
-
-    /* for native mapping of int options */
-    private int constValue;
-
-    public SctpStdSocketOption(String name, Class<T> type) {
-        this.name = name;
-        this.type = type;
-    }
-
-    public SctpStdSocketOption(String name, Class<T> type, int constValue) {
-        this.name = name;
-        this.type = type;
-        this.constValue = constValue;
-    }
-
-    @Override
-    public String name() {
-        return name;
-    }
-
-    @Override
-    public Class<T> type() {
-        return type;
-    }
-
-    @Override
-    public String toString() {
-        return name;
-    }
-
-    int constValue() {
-        return constValue;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/ch/Secrets.java b/ojluni/src/main/java/sun/nio/ch/Secrets.java
deleted file mode 100755
index f76ab1d..0000000
--- a/ojluni/src/main/java/sun/nio/ch/Secrets.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2010, 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.
- */
-
-package sun.nio.ch;
-
-import java.nio.channels.SocketChannel;
-import java.nio.channels.ServerSocketChannel;
-import java.nio.channels.spi.SelectorProvider;
-import java.io.FileDescriptor;
-import java.io.IOException;
-
-/**
- * Provides access to implementation private constructors and methods.
- */
-
-public final class Secrets {
-    private Secrets() { }
-
-    private static SelectorProvider provider() {
-        SelectorProvider p = SelectorProvider.provider();
-        if (!(p instanceof SelectorProviderImpl))
-            throw new UnsupportedOperationException();
-        return p;
-    }
-
-    public static SocketChannel newSocketChannel(FileDescriptor fd) {
-        try {
-            return new SocketChannelImpl(provider(), fd, false);
-        } catch (IOException ioe) {
-            throw new AssertionError(ioe);
-        }
-    }
-
-    public static ServerSocketChannel newServerSocketChannel(FileDescriptor fd) {
-        try {
-            return new ServerSocketChannelImpl(provider(), fd, false);
-        } catch (IOException ioe) {
-            throw new AssertionError(ioe);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/ch/SolarisAsynchronousChannelProvider.java b/ojluni/src/main/java/sun/nio/ch/SolarisAsynchronousChannelProvider.java
deleted file mode 100755
index b77f292..0000000
--- a/ojluni/src/main/java/sun/nio/ch/SolarisAsynchronousChannelProvider.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2008, 2010, 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.
- */
-
-package sun.nio.ch;
-
-import java.nio.channels.*;
-import java.nio.channels.spi.AsynchronousChannelProvider;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.ThreadFactory;
-import java.io.IOException;
-
-public class SolarisAsynchronousChannelProvider
-    extends AsynchronousChannelProvider
-{
-    private static volatile SolarisEventPort defaultEventPort;
-
-    private SolarisEventPort defaultEventPort() throws IOException {
-        if (defaultEventPort == null) {
-            synchronized (SolarisAsynchronousChannelProvider.class) {
-                if (defaultEventPort == null) {
-                    defaultEventPort =
-                        new SolarisEventPort(this, ThreadPool.getDefault()).start();
-                }
-            }
-        }
-        return defaultEventPort;
-    }
-
-    public SolarisAsynchronousChannelProvider() {
-    }
-
-    @Override
-    public AsynchronousChannelGroup openAsynchronousChannelGroup(int nThreads, ThreadFactory factory)
-        throws IOException
-    {
-        return new SolarisEventPort(this, ThreadPool.create(nThreads, factory)).start();
-    }
-
-    @Override
-    public AsynchronousChannelGroup openAsynchronousChannelGroup(ExecutorService executor, int initialSize)
-        throws IOException
-    {
-        return new SolarisEventPort(this, ThreadPool.wrap(executor, initialSize)).start();
-    }
-
-    private SolarisEventPort toEventPort(AsynchronousChannelGroup group)
-        throws IOException
-    {
-        if (group == null) {
-            return defaultEventPort();
-        } else {
-            if (!(group instanceof SolarisEventPort))
-                throw new IllegalChannelGroupException();
-            return (SolarisEventPort)group;
-        }
-    }
-
-    @Override
-    public AsynchronousServerSocketChannel openAsynchronousServerSocketChannel(AsynchronousChannelGroup group)
-        throws IOException
-    {
-        return new UnixAsynchronousServerSocketChannelImpl(toEventPort(group));
-    }
-
-    @Override
-    public AsynchronousSocketChannel openAsynchronousSocketChannel(AsynchronousChannelGroup group)
-        throws IOException
-    {
-        return new UnixAsynchronousSocketChannelImpl(toEventPort(group));
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/ch/SolarisEventPort.java b/ojluni/src/main/java/sun/nio/ch/SolarisEventPort.java
deleted file mode 100755
index 9e4072a..0000000
--- a/ojluni/src/main/java/sun/nio/ch/SolarisEventPort.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-package sun.nio.ch;
-
-import java.nio.channels.spi.AsynchronousChannelProvider;
-import java.util.concurrent.RejectedExecutionException;
-import java.io.IOException;
-import sun.misc.Unsafe;
-
-/**
- * Provides an AsynchronousChannelGroup implementation based on the Solaris 10
- * event port framework and also provides direct access to that framework.
- */
-
-class SolarisEventPort
-    extends Port
-{
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-    private static final int addressSize = unsafe.addressSize();
-
-    private static int dependsArch(int value32, int value64) {
-        return (addressSize == 4) ? value32 : value64;
-    }
-
-    /*
-     * typedef struct port_event {
-     *     int             portev_events;
-     *     ushort_t        portev_source;
-     *     ushort_t        portev_pad;
-     *     uintptr_t       portev_object;
-     *     void            *portev_user;
-     * } port_event_t;
-     */
-    static final int SIZEOF_PORT_EVENT  = dependsArch(16, 24);
-    static final int OFFSETOF_EVENTS    = 0;
-    static final int OFFSETOF_SOURCE    = 4;
-    static final int OFFSETOF_OBJECT    = 8;
-
-    // port sources
-    static final short PORT_SOURCE_USER     = 3;
-    static final short PORT_SOURCE_FD       = 4;
-
-    // file descriptor to event port.
-    private final int port;
-
-    // true when port is closed
-    private boolean closed;
-
-    SolarisEventPort(AsynchronousChannelProvider provider, ThreadPool pool)
-        throws IOException
-    {
-        super(provider, pool);
-
-        // create event port
-        this.port = port_create();
-    }
-
-    SolarisEventPort start() {
-        startThreads(new EventHandlerTask());
-        return this;
-    }
-
-    // releass resources
-    private void implClose() {
-        synchronized (this) {
-            if (closed)
-                return;
-            closed = true;
-        }
-        port_close(port);
-    }
-
-    private void wakeup() {
-        try {
-            port_send(port, 0);
-        } catch (IOException x) {
-            throw new AssertionError(x);
-        }
-    }
-
-    @Override
-    void executeOnHandlerTask(Runnable task) {
-        synchronized (this) {
-            if (closed)
-                throw new RejectedExecutionException();
-            offerTask(task);
-            wakeup();
-        }
-    }
-
-    @Override
-    void shutdownHandlerTasks() {
-       /*
-         * If no tasks are running then just release resources; otherwise
-         * write to the one end of the socketpair to wakeup any polling threads..
-         */
-        int nThreads = threadCount();
-        if (nThreads == 0) {
-            implClose();
-        } else {
-            // send user event to wakeup each thread
-            while (nThreads-- > 0) {
-                try {
-                    port_send(port, 0);
-                } catch (IOException x) {
-                    throw new AssertionError(x);
-                }
-            }
-        }
-    }
-
-    @Override
-    void startPoll(int fd, int events) {
-        // (re-)associate file descriptor
-        // no need to translate events
-        try {
-            port_associate(port, PORT_SOURCE_FD, fd, events);
-        } catch (IOException x) {
-            throw new AssertionError();     // should not happen
-        }
-    }
-
-    /*
-     * Task to read a single event from the port and dispatch it to the
-     * channel's onEvent handler.
-     */
-    private class EventHandlerTask implements Runnable {
-        public void run() {
-            Invoker.GroupAndInvokeCount myGroupAndInvokeCount =
-                Invoker.getGroupAndInvokeCount();
-            final boolean isPooledThread = (myGroupAndInvokeCount != null);
-            boolean replaceMe = false;
-            long address = unsafe.allocateMemory(SIZEOF_PORT_EVENT);
-            try {
-                for (;;) {
-                    // reset invoke count
-                    if (isPooledThread)
-                        myGroupAndInvokeCount.resetInvokeCount();
-
-                    // wait for I/O completion event
-                    // A error here is fatal (thread will not be replaced)
-                    replaceMe = false;
-                    try {
-                        port_get(port, address);
-                    } catch (IOException x) {
-                        x.printStackTrace();
-                        return;
-                    }
-
-                    // event source
-                    short source = unsafe.getShort$(address + OFFSETOF_SOURCE);
-                    if (source != PORT_SOURCE_FD) {
-                        // user event is trigger to invoke task or shutdown
-                        if (source == PORT_SOURCE_USER) {
-                            Runnable task = pollTask();
-                            if (task == null) {
-                                // shutdown request
-                                return;
-                            }
-                            // run task (may throw error/exception)
-                            replaceMe = true;
-                            task.run();
-                        }
-                        // ignore
-                        continue;
-                    }
-
-                    // pe->portev_object is file descriptor
-                    int fd = (int)unsafe.getAddress(address + OFFSETOF_OBJECT);
-                    // pe->portev_events
-                    int events = unsafe.getInt$(address + OFFSETOF_EVENTS);
-
-                    // lookup channel
-                    PollableChannel ch;
-                    fdToChannelLock.readLock().lock();
-                    try {
-                        ch = fdToChannel.get(fd);
-                    } finally {
-                        fdToChannelLock.readLock().unlock();
-                    }
-
-                    // notify channel
-                    if (ch != null) {
-                        replaceMe = true;
-                        // no need to translate events
-                        ch.onEvent(events, isPooledThread);
-                    }
-                }
-            } finally {
-                // free per-thread resources
-                unsafe.freeMemory(address);
-                // last task to exit when shutdown release resources
-                int remaining = threadExit(this, replaceMe);
-                if (remaining == 0 && isShutdown())
-                    implClose();
-            }
-        }
-    }
-
-    /**
-     * Creates an event port
-     */
-    static native int port_create() throws IOException;
-
-    /**
-     * Associates specific events of a given object with a port
-     */
-    static native boolean port_associate(int port, int source, long object, int events)
-        throws IOException;
-
-    /**
-     * Removes the association of an object with a port.
-     */
-    static native boolean port_dissociate(int port, int source, long object)
-        throws IOException;
-
-    /**
-     * Retrieves a single event from a port
-     */
-    static native void port_get(int port, long pe) throws IOException;
-
-    /**
-     * Retrieves at most {@code max} events from a port.
-     */
-    static native int port_getn(int port, long address, int max, long timeout)
-        throws IOException;
-
-    /**
-     * Sends a user-defined eventto a specified  port.
-     */
-    static native void port_send(int port, int events) throws IOException;
-
-    /**
-     * Closes a port.
-     */
-    static native void port_close(int port);
-
-
-    static {
-        Util.load();
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/AbstractCharsetProvider.java b/ojluni/src/main/java/sun/nio/cs/AbstractCharsetProvider.java
deleted file mode 100755
index 60d9896..0000000
--- a/ojluni/src/main/java/sun/nio/cs/AbstractCharsetProvider.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (c) 2000, 2010, 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.
- */
-
-package sun.nio.cs;
-
-import java.lang.ref.SoftReference;
-import java.nio.charset.Charset;
-import java.nio.charset.spi.CharsetProvider;
-import java.util.ArrayList;
-import java.util.TreeMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import sun.misc.ASCIICaseInsensitiveComparator;
-
-
-/**
- * Abstract base class for charset providers.
- *
- * @author Mark Reinhold
- */
-
-public class AbstractCharsetProvider
-    extends CharsetProvider
-{
-
-    /* Maps canonical names to class names
-     */
-    private Map<String,String> classMap
-        = new TreeMap<>(ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
-
-    /* Maps alias names to canonical names
-     */
-    private Map<String,String> aliasMap
-        = new TreeMap<>(ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
-
-    /* Maps canonical names to alias-name arrays
-     */
-    private Map<String,String[]> aliasNameMap
-        = new TreeMap<>(ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
-
-    /* Maps canonical names to soft references that hold cached instances
-     */
-    private Map<String,SoftReference<Charset>> cache
-        = new TreeMap<>(ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
-
-    private String packagePrefix;
-
-    protected AbstractCharsetProvider() {
-        packagePrefix = "sun.nio.cs";
-    }
-
-    protected AbstractCharsetProvider(String pkgPrefixName) {
-        packagePrefix = pkgPrefixName;
-    }
-
-    /* Add an entry to the given map, but only if no mapping yet exists
-     * for the given name.
-     */
-    private static <K,V> void put(Map<K,V> m, K name, V value) {
-        if (!m.containsKey(name))
-            m.put(name, value);
-    }
-
-    private static <K,V> void remove(Map<K,V> m, K name) {
-        V x  = m.remove(name);
-        assert (x != null);
-    }
-
-    /* Declare support for the given charset
-     */
-    protected void charset(String name, String className, String[] aliases) {
-        synchronized (this) {
-            put(classMap, name, className);
-            for (int i = 0; i < aliases.length; i++)
-                put(aliasMap, aliases[i], name);
-            put(aliasNameMap, name, aliases);
-            cache.clear();
-        }
-    }
-
-    protected void deleteCharset(String name, String[] aliases) {
-        synchronized (this) {
-            remove(classMap, name);
-            for (int i = 0; i < aliases.length; i++)
-                remove(aliasMap, aliases[i]);
-            remove(aliasNameMap, name);
-            cache.clear();
-        }
-    }
-
-    /* Late initialization hook, needed by some providers
-     */
-    protected void init() { }
-
-    private String canonicalize(String charsetName) {
-        String acn = aliasMap.get(charsetName);
-        return (acn != null) ? acn : charsetName;
-    }
-
-    private Charset lookup(String csn) {
-
-        // Check cache first
-        SoftReference<Charset> sr = cache.get(csn);
-        if (sr != null) {
-            Charset cs = sr.get();
-            if (cs != null)
-                return cs;
-        }
-
-        // Do we even support this charset?
-        String cln = classMap.get(csn);
-
-        if (cln == null)
-            return null;
-
-        // Instantiate the charset and cache it
-        try {
-
-            Class<?> c = Class.forName(packagePrefix + "." + cln,
-                                       true,
-                                       this.getClass().getClassLoader());
-
-            Charset cs = (Charset)c.newInstance();
-            cache.put(csn, new SoftReference<Charset>(cs));
-            return cs;
-        } catch (ClassNotFoundException x) {
-            return null;
-        } catch (IllegalAccessException x) {
-            return null;
-        } catch (InstantiationException x) {
-            return null;
-        }
-    }
-
-    public final Charset charsetForName(String charsetName) {
-        synchronized (this) {
-            init();
-            return lookup(canonicalize(charsetName));
-        }
-    }
-
-    public final Iterator<Charset> charsets() {
-
-        final ArrayList<String> ks;
-        synchronized (this) {
-            init();
-            ks = new ArrayList<>(classMap.keySet());
-        }
-
-        return new Iterator<Charset>() {
-                Iterator<String> i = ks.iterator();
-
-                public boolean hasNext() {
-                    return i.hasNext();
-                }
-
-                public Charset next() {
-                    String csn = i.next();
-                    synchronized (AbstractCharsetProvider.this) {
-                        return lookup(csn);
-                    }
-                }
-
-                public void remove() {
-                    throw new UnsupportedOperationException();
-                }
-            };
-    }
-
-    public final String[] aliases(String charsetName) {
-        synchronized (this) {
-            init();
-            return aliasNameMap.get(charsetName);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/CharsetMapping.java b/ojluni/src/main/java/sun/nio/cs/CharsetMapping.java
deleted file mode 100755
index c5586f0..0000000
--- a/ojluni/src/main/java/sun/nio/cs/CharsetMapping.java
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-package sun.nio.cs;
-
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.*;
-import java.security.*;
-
-public class CharsetMapping {
-    public final static char UNMAPPABLE_DECODING = '\uFFFD';
-    public final static int  UNMAPPABLE_ENCODING = 0xFFFD;
-
-    char[] b2cSB;                //singlebyte b->c
-    char[] b2cDB1;               //dobulebyte b->c /db1
-    char[] b2cDB2;               //dobulebyte b->c /db2
-
-    int    b2Min, b2Max;         //min/max(start/end) value of 2nd byte
-    int    b1MinDB1, b1MaxDB1;   //min/Max(start/end) value of 1st byte/db1
-    int    b1MinDB2, b1MaxDB2;   //min/Max(start/end) value of 1st byte/db2
-    int    dbSegSize;
-
-    char[] c2b;
-    char[] c2bIndex;
-
-    // Supplementary
-    char[] b2cSupp;
-    char[] c2bSupp;
-
-    // Composite
-    Entry[] b2cComp;
-    Entry[] c2bComp;
-
-    public char decodeSingle(int b) {
-        return b2cSB[b];
-    }
-
-    public char decodeDouble(int b1, int b2) {
-        if (b2 >= b2Min && b2 < b2Max) {
-            b2 -= b2Min;
-            if (b1 >= b1MinDB1 && b1 <= b1MaxDB1) {
-                b1 -= b1MinDB1;
-                return b2cDB1[b1 * dbSegSize + b2];
-            }
-            if (b1 >= b1MinDB2 && b1 <= b1MaxDB2) {
-                b1 -= b1MinDB2;
-                return b2cDB2[b1 * dbSegSize + b2];
-            }
-        }
-        return UNMAPPABLE_DECODING;
-    }
-
-    // for jis0213 all supplementary characters are in 0x2xxxx range,
-    // so only the xxxx part is now stored, should actually store the
-    // codepoint value instead.
-    public char[] decodeSurrogate(int db, char[] cc) {
-        int end = b2cSupp.length / 2;
-        int i = Arrays.binarySearch(b2cSupp, 0, end, (char)db);
-        if (i >= 0) {
-            Character.toChars(b2cSupp[end + i] + 0x20000, cc, 0);
-            return cc;
-        }
-        return null;
-    }
-
-    public char[] decodeComposite(Entry comp, char[] cc) {
-        int i = findBytes(b2cComp, comp);
-        if (i >= 0) {
-            cc[0] = (char)b2cComp[i].cp;
-            cc[1] = (char)b2cComp[i].cp2;
-            return cc;
-        }
-        return null;
-    }
-
-    public int encodeChar(char ch) {
-        int index = c2bIndex[ch >> 8];
-        if (index == 0xffff)
-            return UNMAPPABLE_ENCODING;
-        return c2b[index + (ch & 0xff)];
-    }
-
-    public int encodeSurrogate(char hi, char lo) {
-        int cp = Character.toCodePoint(hi, lo);
-        if (cp < 0x20000 || cp >= 0x30000)
-            return UNMAPPABLE_ENCODING;
-        int end = c2bSupp.length / 2;
-        int i = Arrays.binarySearch(c2bSupp, 0, end, (char)cp);
-        if (i >= 0)
-            return c2bSupp[end + i];
-        return UNMAPPABLE_ENCODING;
-    }
-
-    public boolean isCompositeBase(Entry comp) {
-        if (comp.cp <= 0x31f7 && comp.cp >= 0xe6) {
-            return (findCP(c2bComp, comp) >= 0);
-        }
-        return false;
-    }
-
-    public int encodeComposite(Entry comp) {
-        int i = findComp(c2bComp, comp);
-        if (i >= 0)
-            return c2bComp[i].bs;
-        return UNMAPPABLE_ENCODING;
-    }
-
-    // init the CharsetMapping object from the .dat binary file
-    public static CharsetMapping get(final InputStream is) {
-        return AccessController.doPrivileged(new PrivilegedAction<CharsetMapping>() {
-            public CharsetMapping run() {
-                return new CharsetMapping().load(is);
-            }
-        });
-    }
-
-    public static class Entry {
-        public int bs;   //byte sequence reps
-        public int cp;   //Unicode codepoint
-        public int cp2;  //CC of composite
-    }
-
-    static Comparator<Entry> comparatorBytes =
-        new Comparator<Entry>() {
-            public int compare(Entry m1, Entry m2) {
-                return m1.bs - m2.bs;
-            }
-            public boolean equals(Object obj) {
-                return this == obj;
-            }
-    };
-
-    static Comparator<Entry> comparatorCP =
-        new Comparator<Entry>() {
-            public int compare(Entry m1, Entry m2) {
-                return m1.cp - m2.cp;
-            }
-            public boolean equals(Object obj) {
-                return this == obj;
-            }
-    };
-
-    static Comparator<Entry> comparatorComp =
-        new Comparator<Entry>() {
-            public int compare(Entry m1, Entry m2) {
-                 int v = m1.cp - m2.cp;
-                 if (v == 0)
-                   v = m1.cp2 - m2.cp2;
-                 return v;
-            }
-            public boolean equals(Object obj) {
-                return this == obj;
-            }
-    };
-
-    static int findBytes(Entry[] a, Entry k) {
-        return Arrays.binarySearch(a, 0, a.length, k, comparatorBytes);
-    }
-
-    static int findCP(Entry[] a, Entry k) {
-        return Arrays.binarySearch(a, 0, a.length, k, comparatorCP);
-    }
-
-    static int findComp(Entry[] a, Entry k) {
-        return Arrays.binarySearch(a, 0, a.length, k, comparatorComp);
-    }
-
-    /*****************************************************************************/
-    // tags of different charset mapping tables
-    private final static int MAP_SINGLEBYTE      = 0x1; // 0..256  : c
-    private final static int MAP_DOUBLEBYTE1     = 0x2; // min..max: c
-    private final static int MAP_DOUBLEBYTE2     = 0x3; // min..max: c [DB2]
-    private final static int MAP_SUPPLEMENT      = 0x5; //           db,c
-    private final static int MAP_SUPPLEMENT_C2B  = 0x6; //           c,db
-    private final static int MAP_COMPOSITE       = 0x7; //           db,base,cc
-    private final static int MAP_INDEXC2B        = 0x8; // index table of c->bb
-
-    private static final boolean readNBytes(InputStream in, byte[] bb, int N)
-        throws IOException
-    {
-        int off = 0;
-        while (N > 0) {
-            int n = in.read(bb, off, N);
-            if (n == -1)
-                return false;
-            N = N - n;
-            off += n;
-        }
-        return true;
-    }
-
-    int off = 0;
-    byte[] bb;
-    private char[] readCharArray() {
-        // first 2 bytes are the number of "chars" stored in this table
-        int size  = ((bb[off++]&0xff)<<8) | (bb[off++]&0xff);
-        char [] cc = new char[size];
-        for (int i = 0; i < size; i++) {
-            cc[i] = (char)(((bb[off++]&0xff)<<8) | (bb[off++]&0xff));
-        }
-        return cc;
-    }
-
-    void readSINGLEBYTE() {
-        char[] map = readCharArray();
-        for (int i = 0; i < map.length; i++) {
-            char c = map[i];
-            if (c != UNMAPPABLE_DECODING) {
-                c2b[c2bIndex[c >> 8] + (c&0xff)] = (char)i;
-            }
-        }
-        b2cSB = map;
-    }
-
-    void readINDEXC2B() {
-        char[] map = readCharArray();
-        for (int i = map.length - 1; i >= 0; i--) {
-            if (c2b == null && map[i] != -1) {
-                c2b = new char[map[i] + 256];
-                Arrays.fill(c2b, (char)UNMAPPABLE_ENCODING);
-                break;
-            }
-        }
-        c2bIndex = map;
-    }
-
-    char[] readDB(int b1Min, int b2Min, int segSize) {
-        char[] map = readCharArray();
-        for (int i = 0; i < map.length; i++) {
-            char c = map[i];
-            if (c != UNMAPPABLE_DECODING) {
-                int b1 = i / segSize;
-                int b2 = i % segSize;
-                int b = (b1 + b1Min)* 256 + (b2 + b2Min);
-                //System.out.printf("    DB %x\t%x%n", b, c & 0xffff);
-                c2b[c2bIndex[c >> 8] + (c&0xff)] = (char)(b);
-            }
-        }
-        return map;
-    }
-
-    void readDOUBLEBYTE1() {
-        b1MinDB1 = ((bb[off++]&0xff)<<8) | (bb[off++]&0xff);
-        b1MaxDB1 = ((bb[off++]&0xff)<<8) | (bb[off++]&0xff);
-        b2Min =    ((bb[off++]&0xff)<<8) | (bb[off++]&0xff);
-        b2Max =    ((bb[off++]&0xff)<<8) | (bb[off++]&0xff);
-        dbSegSize = b2Max - b2Min + 1;
-        b2cDB1 = readDB(b1MinDB1, b2Min, dbSegSize);
-    }
-
-    void readDOUBLEBYTE2() {
-        b1MinDB2 = ((bb[off++]&0xff)<<8) | (bb[off++]&0xff);
-        b1MaxDB2 = ((bb[off++]&0xff)<<8) | (bb[off++]&0xff);
-        b2Min =    ((bb[off++]&0xff)<<8) | (bb[off++]&0xff);
-        b2Max =    ((bb[off++]&0xff)<<8) | (bb[off++]&0xff);
-        dbSegSize = b2Max - b2Min + 1;
-        b2cDB2 = readDB(b1MinDB2, b2Min, dbSegSize);
-    }
-
-    void readCOMPOSITE() {
-        char[] map = readCharArray();
-        int mLen = map.length/3;
-        b2cComp = new Entry[mLen];
-        c2bComp = new Entry[mLen];
-        for (int i = 0, j= 0; i < mLen; i++) {
-            Entry m = new Entry();
-            m.bs = map[j++];
-            m.cp = map[j++];
-            m.cp2 = map[j++];
-            b2cComp[i] = m;
-            c2bComp[i] = m;
-        }
-        Arrays.sort(c2bComp, 0, c2bComp.length, comparatorComp);
-    }
-
-    CharsetMapping load(InputStream in) {
-        try {
-            // The first 4 bytes are the size of the total data followed in
-            // this .dat file.
-            int len = ((in.read()&0xff) << 24) | ((in.read()&0xff) << 16) |
-                      ((in.read()&0xff) << 8) | (in.read()&0xff);
-            bb = new byte[len];
-            off = 0;
-            //System.out.printf("In : Total=%d%n", len);
-            // Read in all bytes
-            if (!readNBytes(in, bb, len))
-                throw new RuntimeException("Corrupted data file");
-            in.close();
-
-            while (off < len) {
-                int type = ((bb[off++]&0xff)<<8) | (bb[off++]&0xff);
-                switch(type) {
-                case MAP_INDEXC2B:
-                    readINDEXC2B();
-                    break;
-                case MAP_SINGLEBYTE:
-                    readSINGLEBYTE();
-                    break;
-                case MAP_DOUBLEBYTE1:
-                    readDOUBLEBYTE1();
-                    break;
-                case MAP_DOUBLEBYTE2:
-                    readDOUBLEBYTE2();
-                    break;
-                case MAP_SUPPLEMENT:
-                    b2cSupp = readCharArray();
-                    break;
-                case MAP_SUPPLEMENT_C2B:
-                    c2bSupp = readCharArray();
-                    break;
-                case MAP_COMPOSITE:
-                    readCOMPOSITE();
-                    break;
-                default:
-                    throw new RuntimeException("Corrupted data file");
-                }
-            }
-            bb = null;
-            return this;
-        } catch (IOException x) {
-            x.printStackTrace();
-            return null;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/FastCharsetProvider.java b/ojluni/src/main/java/sun/nio/cs/FastCharsetProvider.java
deleted file mode 100755
index 23c207e..0000000
--- a/ojluni/src/main/java/sun/nio/cs/FastCharsetProvider.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (c) 2004, 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.
- */
-
-package sun.nio.cs;
-
-import java.lang.ref.SoftReference;
-import java.nio.charset.Charset;
-import java.nio.charset.spi.CharsetProvider;
-import java.util.Iterator;
-import java.util.Map;
-
-
-/**
- * Abstract base class for fast charset providers.
- *
- * @author Mark Reinhold
- */
-
-public class FastCharsetProvider
-    extends CharsetProvider
-{
-
-    // Maps canonical names to class names
-    private Map<String,String> classMap;
-
-    // Maps alias names to canonical names
-    private Map<String,String> aliasMap;
-
-    // Maps canonical names to cached instances
-    private Map<String,Charset> cache;
-
-    private String packagePrefix;
-
-    protected FastCharsetProvider(String pp,
-                                  Map<String,String> am,
-                                  Map<String,String> cm,
-                                  Map<String,Charset> c)
-    {
-        packagePrefix = pp;
-        aliasMap = am;
-        classMap = cm;
-        cache = c;
-    }
-
-    private String canonicalize(String csn) {
-        String acn = aliasMap.get(csn);
-        return (acn != null) ? acn : csn;
-    }
-
-    // Private ASCII-only version, optimized for interpretation during startup
-    //
-    private static String toLower(String s) {
-        int n = s.length();
-        boolean allLower = true;
-        for (int i = 0; i < n; i++) {
-            int c = s.charAt(i);
-            if (((c - 'A') | ('Z' - c)) >= 0) {
-                allLower = false;
-                break;
-            }
-        }
-        if (allLower)
-            return s;
-        char[] ca = new char[n];
-        for (int i = 0; i < n; i++) {
-            int c = s.charAt(i);
-            if (((c - 'A') | ('Z' - c)) >= 0)
-                ca[i] = (char)(c + 0x20);
-            else
-                ca[i] = (char)c;
-        }
-        return new String(ca);
-    }
-
-    private Charset lookup(String charsetName) {
-
-        String csn = canonicalize(toLower(charsetName));
-
-        // Check cache first
-        Charset cs = cache.get(csn);
-        if (cs != null)
-            return cs;
-
-        // Do we even support this charset?
-        String cln = classMap.get(csn);
-        if (cln == null)
-            return null;
-
-        if (cln.equals("US_ASCII")) {
-            cs = new US_ASCII();
-            cache.put(csn, cs);
-            return cs;
-        }
-
-        // Instantiate the charset and cache it
-        try {
-            Class c = Class.forName(packagePrefix + "." + cln,
-                                    true,
-                                    this.getClass().getClassLoader());
-            cs = (Charset)c.newInstance();
-            cache.put(csn, cs);
-            return cs;
-        } catch (ClassNotFoundException x) {
-            return null;
-        } catch (IllegalAccessException x) {
-            return null;
-        } catch (InstantiationException x) {
-            return null;
-        }
-    }
-
-    public final Charset charsetForName(String charsetName) {
-        synchronized (this) {
-            return lookup(canonicalize(charsetName));
-        }
-    }
-
-    public final Iterator<Charset> charsets() {
-
-        return new Iterator<Charset>() {
-
-                Iterator<String> i = classMap.keySet().iterator();
-
-                public boolean hasNext() {
-                    return i.hasNext();
-                }
-
-                public Charset next() {
-                    String csn = i.next();
-                    return lookup(csn);
-                }
-
-                public void remove() {
-                    throw new UnsupportedOperationException();
-                }
-
-            };
-
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ISO_8859_1.java b/ojluni/src/main/java/sun/nio/cs/ISO_8859_1.java
deleted file mode 100755
index 7da5c12..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ISO_8859_1.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright (c) 2000, 2004, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import java.util.Arrays;
-
-class ISO_8859_1
-    extends Charset
-    implements HistoricallyNamedCharset
-{
-
-    public ISO_8859_1() {
-        super("ISO-8859-1", StandardCharsets.aliases_ISO_8859_1);
-    }
-
-    public String historicalName() {
-        return "ISO8859_1";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs instanceof US_ASCII)
-                || (cs instanceof ISO_8859_1));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    private static class Decoder extends CharsetDecoder
-                                 implements ArrayDecoder {
-        private Decoder(Charset cs) {
-            super(cs, 1.0f, 1.0f);
-        }
-
-        private CoderResult decodeArrayLoop(ByteBuffer src,
-                                            CharBuffer dst)
-        {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-                while (sp < sl) {
-                    byte b = sa[sp];
-                    if (dp >= dl)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = (char)(b & 0xff);
-                    sp++;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult decodeBufferLoop(ByteBuffer src,
-                                             CharBuffer dst)
-        {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    byte b = src.get();
-                    if (!dst.hasRemaining())
-                        return CoderResult.OVERFLOW;
-                    dst.put((char)(b & 0xff));
-                    mark++;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src,
-                                         CharBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-
-        public int decode(byte[] src, int sp, int len, char[] dst) {
-            if (len > dst.length)
-                len = dst.length;
-            int dp = 0;
-            while (dp < len)
-                dst[dp++] = (char)(src[sp++] & 0xff);
-            return dp;
-        }
-    }
-
-    private static class Encoder extends CharsetEncoder
-                                 implements ArrayEncoder {
-        private Encoder(Charset cs) {
-            super(cs, 1.0f, 1.0f);
-        }
-
-        public boolean canEncode(char c) {
-            return c <= '\u00FF';
-        }
-
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;  // we accept any byte value
-        }
-
-        private final Surrogate.Parser sgp = new Surrogate.Parser();
-
-        private CoderResult encodeArrayLoop(CharBuffer src,
-                                            ByteBuffer dst)
-        {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if (c <= '\u00FF') {
-                        if (dp >= dl)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = (byte)c;
-                        sp++;
-                        continue;
-                    }
-                    if (sgp.parse(c, sa, sp, sl) < 0)
-                        return sgp.error();
-                    return sgp.unmappableResult();
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult encodeBufferLoop(CharBuffer src,
-                                             ByteBuffer dst)
-        {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    char c = src.get();
-                    if (c <= '\u00FF') {
-                        if (!dst.hasRemaining())
-                            return CoderResult.OVERFLOW;
-                        dst.put((byte)c);
-                        mark++;
-                        continue;
-                    }
-                    if (sgp.parse(c, src) < 0)
-                        return sgp.error();
-                    return sgp.unmappableResult();
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src,
-                                         ByteBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return encodeArrayLoop(src, dst);
-            else
-                return encodeBufferLoop(src, dst);
-        }
-
-        private byte repl = (byte)'?';
-        protected void implReplaceWith(byte[] newReplacement) {
-            repl = newReplacement[0];
-        }
-
-        public int encode(char[] src, int sp, int len, byte[] dst) {
-            int dp = 0;
-            int sl = sp + Math.min(len, dst.length);
-            while (sp < sl) {
-                char c = src[sp++];
-                if (c <= '\u00FF') {
-                    dst[dp++] = (byte)c;
-                    continue;
-                }
-                if (Character.isHighSurrogate(c) && sp < sl &&
-                    Character.isLowSurrogate(src[sp])) {
-                    if (len > dst.length) {
-                        sl++;
-                        len--;
-                    }
-                    sp++;
-                }
-                dst[dp++] = repl;
-            }
-            return dp;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ISO_8859_15.java b/ojluni/src/main/java/sun/nio/cs/ISO_8859_15.java
deleted file mode 100644
index 065df15..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ISO_8859_15.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import sun.nio.cs.StandardCharsets;
-import sun.nio.cs.SingleByte;
-import sun.nio.cs.HistoricallyNamedCharset;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class ISO_8859_15 extends Charset implements HistoricallyNamedCharset
-{
-    public ISO_8859_15() {
-        super("ISO-8859-15", StandardCharsets.aliases_ISO_8859_15);
-    }
-
-    public String historicalName() {
-        return "ISO8859_15";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII")) || (cs instanceof ISO_8859_15));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new SingleByte.Decoder(this, b2c);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new SingleByte.Encoder(this, c2b, c2bIndex);
-    }
-
-    public String getDecoderSingleByteMappings() {
-        return b2cTable;
-    }
-
-    public char[] getEncoderIndex2() {
-        return c2b;
-    }
-
-    public char[] getEncoderIndex1() {
-        return c2bIndex;
-    }
-
-    private final static String b2cTable = 
-        "\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087" +      // 0x80 - 0x87
-        "\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F" +      // 0x88 - 0x8f
-        "\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097" +      // 0x90 - 0x97
-        "\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F" +      // 0x98 - 0x9f
-        "\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u0160\u00A7" +      // 0xa0 - 0xa7
-        "\u0161\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF" +      // 0xa8 - 0xaf
-        "\u00B0\u00B1\u00B2\u00B3\u017D\u00B5\u00B6\u00B7" +      // 0xb0 - 0xb7
-        "\u017E\u00B9\u00BA\u00BB\u0152\u0153\u0178\u00BF" +      // 0xb8 - 0xbf
-        "\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7" +      // 0xc0 - 0xc7
-        "\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF" +      // 0xc8 - 0xcf
-        "\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7" +      // 0xd0 - 0xd7
-        "\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF" +      // 0xd8 - 0xdf
-        "\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7" +      // 0xe0 - 0xe7
-        "\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF" +      // 0xe8 - 0xef
-        "\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7" +      // 0xf0 - 0xf7
-        "\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF" +      // 0xf8 - 0xff
-        "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" +      // 0x00 - 0x07
-        "\b\t\n\u000B\f\r\u000E\u000F" +      // 0x08 - 0x0f
-        "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" +      // 0x10 - 0x17
-        "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" +      // 0x18 - 0x1f
-        "\u0020\u0021\"\u0023\u0024\u0025\u0026\'" +      // 0x20 - 0x27
-        "\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F" +      // 0x28 - 0x2f
-        "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037" +      // 0x30 - 0x37
-        "\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u003F" +      // 0x38 - 0x3f
-        "\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047" +      // 0x40 - 0x47
-        "\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F" +      // 0x48 - 0x4f
-        "\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057" +      // 0x50 - 0x57
-        "\u0058\u0059\u005A\u005B\\\u005D\u005E\u005F" +      // 0x58 - 0x5f
-        "\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067" +      // 0x60 - 0x67
-        "\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F" +      // 0x68 - 0x6f
-        "\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077" +      // 0x70 - 0x77
-        "\u0078\u0079\u007A\u007B\u007C\u007D\u007E\u007F" ;      // 0x78 - 0x7f
-
-
-    private final static char[] b2c = b2cTable.toCharArray();
-    private final static char[] c2b = new char[0x300];
-    private final static char[] c2bIndex = new char[0x100];
-
-    static {
-        char[] b2cMap = b2c;
-        char[] c2bNR = null;
-        SingleByte.initC2B(b2cMap, c2bNR, c2b, c2bIndex);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/MS1252.java b/ojluni/src/main/java/sun/nio/cs/MS1252.java
deleted file mode 100644
index c8d7faf..0000000
--- a/ojluni/src/main/java/sun/nio/cs/MS1252.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import sun.nio.cs.StandardCharsets;
-import sun.nio.cs.SingleByte;
-import sun.nio.cs.HistoricallyNamedCharset;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class MS1252 extends Charset implements HistoricallyNamedCharset
-{
-    public MS1252() {
-        super("windows-1252", StandardCharsets.aliases_MS1252);
-    }
-
-    public String historicalName() {
-        return "Cp1252";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII")) || (cs instanceof MS1252));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new SingleByte.Decoder(this, b2c);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new SingleByte.Encoder(this, c2b, c2bIndex);
-    }
-
-    public String getDecoderSingleByteMappings() {
-        return b2cTable;
-    }
-
-    public char[] getEncoderIndex2() {
-        return c2b;
-    }
-
-    public char[] getEncoderIndex1() {
-        return c2bIndex;
-    }
-
-    private final static String b2cTable = 
-        "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021" +      // 0x80 - 0x87
-        "\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD" +      // 0x88 - 0x8f
-        "\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014" +      // 0x90 - 0x97
-        "\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178" +      // 0x98 - 0x9f
-        "\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7" +      // 0xa0 - 0xa7
-        "\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF" +      // 0xa8 - 0xaf
-        "\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7" +      // 0xb0 - 0xb7
-        "\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF" +      // 0xb8 - 0xbf
-        "\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7" +      // 0xc0 - 0xc7
-        "\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF" +      // 0xc8 - 0xcf
-        "\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7" +      // 0xd0 - 0xd7
-        "\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF" +      // 0xd8 - 0xdf
-        "\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7" +      // 0xe0 - 0xe7
-        "\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF" +      // 0xe8 - 0xef
-        "\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7" +      // 0xf0 - 0xf7
-        "\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF" +      // 0xf8 - 0xff
-        "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" +      // 0x00 - 0x07
-        "\b\t\n\u000B\f\r\u000E\u000F" +      // 0x08 - 0x0f
-        "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" +      // 0x10 - 0x17
-        "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" +      // 0x18 - 0x1f
-        "\u0020\u0021\"\u0023\u0024\u0025\u0026\'" +      // 0x20 - 0x27
-        "\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F" +      // 0x28 - 0x2f
-        "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037" +      // 0x30 - 0x37
-        "\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u003F" +      // 0x38 - 0x3f
-        "\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047" +      // 0x40 - 0x47
-        "\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F" +      // 0x48 - 0x4f
-        "\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057" +      // 0x50 - 0x57
-        "\u0058\u0059\u005A\u005B\\\u005D\u005E\u005F" +      // 0x58 - 0x5f
-        "\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067" +      // 0x60 - 0x67
-        "\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F" +      // 0x68 - 0x6f
-        "\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077" +      // 0x70 - 0x77
-        "\u0078\u0079\u007A\u007B\u007C\u007D\u007E\u007F" ;      // 0x78 - 0x7f
-
-
-    private final static char[] b2c = b2cTable.toCharArray();
-    private final static char[] c2b = new char[0x600];
-    private final static char[] c2bIndex = new char[0x100];
-
-    static {
-        char[] b2cMap = b2c;
-        char[] c2bNR = null;
-        SingleByte.initC2B(b2cMap, c2bNR, c2b, c2bIndex);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/SingleByte.java b/ojluni/src/main/java/sun/nio/cs/SingleByte.java
deleted file mode 100755
index c78b8e2..0000000
--- a/ojluni/src/main/java/sun/nio/cs/SingleByte.java
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.Buffer;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import java.util.Arrays;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class SingleByte
-{
-    private static final CoderResult withResult(CoderResult cr,
-                                                Buffer src, int sp,
-                                                Buffer dst, int dp)
-    {
-        src.position(sp - src.arrayOffset());
-        dst.position(dp - dst.arrayOffset());
-        return cr;
-    }
-
-    final public static class Decoder extends CharsetDecoder
-                                      implements ArrayDecoder {
-        private final char[] b2c;
-
-        public Decoder(Charset cs, char[] b2c) {
-            super(cs, 1.0f, 1.0f);
-            this.b2c = b2c;
-        }
-
-        private CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            CoderResult cr = CoderResult.UNDERFLOW;
-            if ((dl - dp) < (sl - sp)) {
-                sl = sp + (dl - dp);
-                cr = CoderResult.OVERFLOW;
-            }
-
-            while (sp < sl) {
-                char c = decode(sa[sp]);
-                if (c == UNMAPPABLE_DECODING) {
-                    return withResult(CoderResult.unmappableForLength(1),
-                               src, sp, dst, dp);
-                }
-                da[dp++] = c;
-                sp++;
-            }
-            return withResult(cr, src, sp, dst, dp);
-        }
-
-        private CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    char c = decode(src.get());
-                    if (c == UNMAPPABLE_DECODING)
-                        return CoderResult.unmappableForLength(1);
-                    if (!dst.hasRemaining())
-                        return CoderResult.OVERFLOW;
-                    dst.put(c);
-                    mark++;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            if (src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-
-        private final char decode(int b) {
-            return b2c[b + 128];
-        }
-
-        private char repl = '\uFFFD';
-        protected void implReplaceWith(String newReplacement) {
-            repl = newReplacement.charAt(0);
-        }
-
-        public int decode(byte[] src, int sp, int len, char[] dst) {
-            if (len > dst.length)
-                len = dst.length;
-            int dp = 0;
-            while (dp < len) {
-                dst[dp] = decode(src[sp++]);
-                if (dst[dp] == UNMAPPABLE_DECODING) {
-                    dst[dp] = repl;
-                }
-                dp++;
-            }
-            return dp;
-        }
-    }
-
-    final public static class Encoder extends CharsetEncoder
-                                      implements ArrayEncoder {
-        private Surrogate.Parser sgp;
-        private final char[] c2b;
-        private final char[] c2bIndex;
-
-        public Encoder(Charset cs, char[] c2b, char[] c2bIndex) {
-            super(cs, 1.0f, 1.0f);
-            this.c2b = c2b;
-            this.c2bIndex = c2bIndex;
-        }
-
-        public boolean canEncode(char c) {
-            return encode(c) != UNMAPPABLE_ENCODING;
-        }
-
-        public boolean isLegalReplacement(byte[] repl) {
-            return ((repl.length == 1 && repl[0] == (byte)'?') ||
-                    super.isLegalReplacement(repl));
-        }
-
-        private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            CoderResult cr = CoderResult.UNDERFLOW;
-            if ((dl - dp) < (sl - sp)) {
-                sl = sp + (dl - dp);
-                cr = CoderResult.OVERFLOW;
-            }
-
-            while (sp < sl) {
-                char c = sa[sp];
-                int b = encode(c);
-                if (b == UNMAPPABLE_ENCODING) {
-                    if (Character.isSurrogate(c)) {
-                        if (sgp == null)
-                            sgp = new Surrogate.Parser();
-                        if (sgp.parse(c, sa, sp, sl) < 0)
-                            return withResult(sgp.error(), src, sp, dst, dp);
-                        return withResult(sgp.unmappableResult(), src, sp, dst, dp);
-                    }
-                    return withResult(CoderResult.unmappableForLength(1),
-                               src, sp, dst, dp);
-                }
-                da[dp++] = (byte)b;
-                sp++;
-            }
-            return withResult(cr, src, sp, dst, dp);
-        }
-
-        private CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    char c = src.get();
-                    int b = encode(c);
-                    if (b == UNMAPPABLE_ENCODING) {
-                        if (Character.isSurrogate(c)) {
-                            if (sgp == null)
-                                sgp = new Surrogate.Parser();
-                            if (sgp.parse(c, src) < 0)
-                                return sgp.error();
-                            return sgp.unmappableResult();
-                        }
-                        return CoderResult.unmappableForLength(1);
-                    }
-                    if (!dst.hasRemaining())
-                        return CoderResult.OVERFLOW;
-                    dst.put((byte)b);
-                    mark++;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            if (src.hasArray() && dst.hasArray())
-                return encodeArrayLoop(src, dst);
-            else
-                return encodeBufferLoop(src, dst);
-        }
-
-        private final int encode(char ch) {
-            char index = c2bIndex[ch >> 8];
-            if (index == UNMAPPABLE_ENCODING)
-                return UNMAPPABLE_ENCODING;
-            return c2b[index + (ch & 0xff)];
-        }
-
-        private byte repl = (byte)'?';
-        protected void implReplaceWith(byte[] newReplacement) {
-            repl = newReplacement[0];
-        }
-
-        public int encode(char[] src, int sp, int len, byte[] dst) {
-            int dp = 0;
-            int sl = sp + Math.min(len, dst.length);
-            while (sp < sl) {
-                char c = src[sp++];
-                int b = encode(c);
-                if (b != UNMAPPABLE_ENCODING) {
-                    dst[dp++] = (byte)b;
-                    continue;
-                }
-                if (Character.isHighSurrogate(c) && sp < sl &&
-                    Character.isLowSurrogate(src[sp])) {
-                    if (len > dst.length) {
-                        sl++;
-                        len--;
-                    }
-                    sp++;
-                }
-                dst[dp++] = repl;
-            }
-            return dp;
-        }
-    }
-
-    // init the c2b and c2bIndex tables from b2c.
-    public static void initC2B(char[] b2c, char[] c2bNR,
-                               char[] c2b, char[] c2bIndex) {
-        for (int i = 0; i < c2bIndex.length; i++)
-            c2bIndex[i] = UNMAPPABLE_ENCODING;
-        for (int i = 0; i < c2b.length; i++)
-            c2b[i] = UNMAPPABLE_ENCODING;
-        int off = 0;
-        for (int i = 0; i < b2c.length; i++) {
-            char c = b2c[i];
-            if (c == UNMAPPABLE_DECODING)
-                continue;
-            int index = (c >> 8);
-            if (c2bIndex[index] == UNMAPPABLE_ENCODING) {
-                c2bIndex[index] = (char)off;
-                off += 0x100;
-            }
-            index = c2bIndex[index] + (c & 0xff);
-            c2b[index] = (char)((i>=0x80)?(i-0x80):(i+0x80));
-        }
-        if (c2bNR != null) {
-            // c-->b nr entries
-            int i = 0;
-            while (i < c2bNR.length) {
-                char b = c2bNR[i++];
-                char c = c2bNR[i++];
-                int index = (c >> 8);
-                if (c2bIndex[index] == UNMAPPABLE_ENCODING) {
-                    c2bIndex[index] = (char)off;
-                    off += 0x100;
-                }
-                index = c2bIndex[index] + (c & 0xff);
-                c2b[index] = b;
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/SingleByteDecoder.java b/ojluni/src/main/java/sun/nio/cs/SingleByteDecoder.java
deleted file mode 100755
index 77f20ba..0000000
--- a/ojluni/src/main/java/sun/nio/cs/SingleByteDecoder.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.
- */
-
-/*
- */
-
-package sun.nio.cs;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CoderResult;
-import java.nio.charset.CharacterCodingException;
-import java.nio.charset.MalformedInputException;
-import java.nio.charset.UnmappableCharacterException;
-
-
-public abstract class SingleByteDecoder
-    extends CharsetDecoder
-{
-
-    private final String byteToCharTable;
-
-    protected SingleByteDecoder(Charset cs, String byteToCharTable) {
-        super(cs, 1.0f, 1.0f);
-        this.byteToCharTable = byteToCharTable;
-    }
-
-    private CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
-        byte[] sa = src.array();
-        int sp = src.arrayOffset() + src.position();
-        int sl = src.arrayOffset() + src.limit();
-        assert (sp <= sl);
-        sp = (sp <= sl ? sp : sl);
-        char[] da = dst.array();
-        int dp = dst.arrayOffset() + dst.position();
-        int dl = dst.arrayOffset() + dst.limit();
-        assert (dp <= dl);
-        dp = (dp <= dl ? dp : dl);
-
-        try {
-            while (sp < sl) {
-                int b = sa[sp];
-
-                char c = decode(b);
-                if (c == '\uFFFD')
-                    return CoderResult.unmappableForLength(1);
-                if (dl - dp < 1)
-                    return CoderResult.OVERFLOW;
-                da[dp++] = c;
-                sp++;
-            }
-            return CoderResult.UNDERFLOW;
-        } finally {
-            src.position(sp - src.arrayOffset());
-            dst.position(dp - dst.arrayOffset());
-        }
-    }
-
-    private CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
-        int mark = src.position();
-        try {
-            while (src.hasRemaining()) {
-                int b = src.get();
-
-                char c = decode(b);
-                if (c == '\uFFFD')
-                    return CoderResult.unmappableForLength(1);
-                if (!dst.hasRemaining())
-                    return CoderResult.OVERFLOW;
-                mark++;
-                dst.put(c);
-            }
-            return CoderResult.UNDERFLOW;
-        } finally {
-            src.position(mark);
-        }
-    }
-
-    protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-        if (true && src.hasArray() && dst.hasArray())
-            return decodeArrayLoop(src, dst);
-        else
-            return decodeBufferLoop(src, dst);
-    }
-
-    public char decode(int byteIndex) {
-        int n = byteIndex + 128;
-        if (n >= byteToCharTable.length() || n < 0)
-            return '\uFFFD';
-        return byteToCharTable.charAt(n);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/SingleByteEncoder.java b/ojluni/src/main/java/sun/nio/cs/SingleByteEncoder.java
deleted file mode 100755
index e88b0fa..0000000
--- a/ojluni/src/main/java/sun/nio/cs/SingleByteEncoder.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (c) 2000, 2004, 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.
- */
-
-/*
- */
-
-package sun.nio.cs;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import java.nio.charset.CharacterCodingException;
-import java.nio.charset.MalformedInputException;
-import java.nio.charset.UnmappableCharacterException;
-import sun.nio.cs.Surrogate;
-
-
-public abstract class SingleByteEncoder
-    extends CharsetEncoder
-{
-
-    private final short index1[];
-    private final String index2;
-    private final int mask1;
-    private final int mask2;
-    private final int shift;
-
-    private final Surrogate.Parser sgp = new Surrogate.Parser();
-
-    protected SingleByteEncoder(Charset cs,
-                                short[] index1, String index2,
-                                int mask1, int mask2, int shift)
-    {
-        super(cs, 1.0f, 1.0f);
-        this.index1 = index1;
-        this.index2 = index2;
-        this.mask1 = mask1;
-        this.mask2 = mask2;
-        this.shift = shift;
-    }
-
-    public boolean canEncode(char c) {
-        char testEncode = index2.charAt(index1[(c & mask1) >> shift]
-                                        + (c & mask2));
-        return testEncode != '\u0000' || c == '\u0000';
-    }
-
-    private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
-        char[] sa = src.array();
-        int sp = src.arrayOffset() + src.position();
-        int sl = src.arrayOffset() + src.limit();
-        assert (sp <= sl);
-        sp = (sp <= sl ? sp : sl);
-        byte[] da = dst.array();
-        int dp = dst.arrayOffset() + dst.position();
-        int dl = dst.arrayOffset() + dst.limit();
-        assert (dp <= dl);
-        dp = (dp <= dl ? dp : dl);
-
-        try {
-            while (sp < sl) {
-                char c = sa[sp];
-                if (Character.isSurrogate(c)) {
-                    if (sgp.parse(c, sa, sp, sl) < 0)
-                        return sgp.error();
-                    return sgp.unmappableResult();
-                }
-                if (c >= '\uFFFE')
-                    return CoderResult.unmappableForLength(1);
-                if (dl - dp < 1)
-                    return CoderResult.OVERFLOW;
-
-                char e = index2.charAt(index1[(c & mask1) >> shift]
-                                       + (c & mask2));
-
-                // If output byte is zero because input char is zero
-                // then character is mappable, o.w. fail
-                if (e == '\u0000' && c != '\u0000')
-                    return CoderResult.unmappableForLength(1);
-
-                sp++;
-                da[dp++] = (byte)e;
-            }
-            return CoderResult.UNDERFLOW;
-        } finally {
-            src.position(sp - src.arrayOffset());
-            dst.position(dp - dst.arrayOffset());
-        }
-    }
-
-    private CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
-        int mark = src.position();
-        try {
-            while (src.hasRemaining()) {
-                char c = src.get();
-                if (Character.isSurrogate(c)) {
-                    if (sgp.parse(c, src) < 0)
-                        return sgp.error();
-                    return sgp.unmappableResult();
-                }
-                if (c >= '\uFFFE')
-                    return CoderResult.unmappableForLength(1);
-                if (!dst.hasRemaining())
-                    return CoderResult.OVERFLOW;
-
-                char e = index2.charAt(index1[(c & mask1) >> shift]
-                                       + (c & mask2));
-
-                // If output byte is zero because input char is zero
-                // then character is mappable, o.w. fail
-                if (e == '\u0000' && c != '\u0000')
-                    return CoderResult.unmappableForLength(1);
-
-                mark++;
-                dst.put((byte)e);
-            }
-            return CoderResult.UNDERFLOW;
-        } finally {
-            src.position(mark);
-        }
-    }
-
-    protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-        if (true && src.hasArray() && dst.hasArray())
-            return encodeArrayLoop(src, dst);
-        else
-            return encodeBufferLoop(src, dst);
-    }
-
-    public byte encode(char inputChar) {
-        return (byte)index2.charAt(index1[(inputChar & mask1) >> shift] +
-                (inputChar & mask2));
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/StandardCharsets.java b/ojluni/src/main/java/sun/nio/cs/StandardCharsets.java
deleted file mode 100644
index ae2c712..0000000
--- a/ojluni/src/main/java/sun/nio/cs/StandardCharsets.java
+++ /dev/null
@@ -1,705 +0,0 @@
-/*
- * Copyright (c) 2000, 2007, 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 file was mechanically generated: Do not edit! -- //
-
-package sun.nio.cs;
-
-import java.nio.charset.*;
-
-
-public class StandardCharsets
-    extends FastCharsetProvider
-{
-
-    static final String[] aliases_US_ASCII = new String[] {
-        "iso-ir-6",
-        "ANSI_X3.4-1986",
-        "ISO_646.irv:1991",
-        "ASCII",
-        "ISO646-US",
-        "us",
-        "IBM367",
-        "cp367",
-        "csASCII",
-        "default",
-        "646",
-        "iso_646.irv:1983",
-        "ANSI_X3.4-1968",
-        "ascii7",
-    };
-
-    static final String[] aliases_UTF_8 = new String[] {
-        "UTF8",
-        "unicode-1-1-utf-8",
-    };
-
-    static final String[] aliases_UTF_16 = new String[] {
-        "UTF_16",
-        "utf16",
-        "unicode",
-        "UnicodeBig",
-    };
-
-    static final String[] aliases_UTF_16BE = new String[] {
-        "UTF_16BE",
-        "ISO-10646-UCS-2",
-        "X-UTF-16BE",
-        "UnicodeBigUnmarked",
-    };
-
-    static final String[] aliases_UTF_16LE = new String[] {
-        "UTF_16LE",
-        "X-UTF-16LE",
-        "UnicodeLittleUnmarked",
-    };
-
-    static final String[] aliases_UTF_16LE_BOM = new String[] {
-        "UnicodeLittle",
-    };
-
-    static final String[] aliases_UTF_32 = new String[] {
-        "UTF_32",
-        "UTF32",
-    };
-
-    static final String[] aliases_UTF_32LE = new String[] {
-        "UTF_32LE",
-        "X-UTF-32LE",
-    };
-
-    static final String[] aliases_UTF_32BE = new String[] {
-        "UTF_32BE",
-        "X-UTF-32BE",
-    };
-
-    static final String[] aliases_UTF_32LE_BOM = new String[] {
-        "UTF_32LE_BOM",
-        "UTF-32LE-BOM",
-    };
-
-    static final String[] aliases_UTF_32BE_BOM = new String[] {
-        "UTF_32BE_BOM",
-        "UTF-32BE-BOM",
-    };
-
-    static final String[] aliases_ISO_8859_1 = new String[] {
-        "iso-ir-100",
-        "ISO_8859-1",
-        "latin1",
-        "l1",
-        "IBM819",
-        "cp819",
-        "csISOLatin1",
-        "819",
-        "IBM-819",
-        "ISO8859_1",
-        "ISO_8859-1:1987",
-        "ISO_8859_1",
-        "8859_1",
-        "ISO8859-1",
-    };
-
-    static final String[] aliases_ISO_8859_2 = new String[] {
-        "iso8859_2",
-        "8859_2",
-        "iso-ir-101",
-        "ISO_8859-2",
-        "ISO_8859-2:1987",
-        "ISO8859-2",
-        "latin2",
-        "l2",
-        "ibm912",
-        "ibm-912",
-        "cp912",
-        "912",
-        "csISOLatin2",
-    };
-
-    static final String[] aliases_ISO_8859_4 = new String[] {
-        "iso8859_4",
-        "iso8859-4",
-        "8859_4",
-        "iso-ir-110",
-        "ISO_8859-4",
-        "ISO_8859-4:1988",
-        "latin4",
-        "l4",
-        "ibm914",
-        "ibm-914",
-        "cp914",
-        "914",
-        "csISOLatin4",
-    };
-
-    static final String[] aliases_ISO_8859_5 = new String[] {
-        "iso8859_5",
-        "8859_5",
-        "iso-ir-144",
-        "ISO_8859-5",
-        "ISO_8859-5:1988",
-        "ISO8859-5",
-        "cyrillic",
-        "ibm915",
-        "ibm-915",
-        "cp915",
-        "915",
-        "csISOLatinCyrillic",
-    };
-
-    static final String[] aliases_ISO_8859_7 = new String[] {
-        "iso8859_7",
-        "8859_7",
-        "iso-ir-126",
-        "ISO_8859-7",
-        "ISO_8859-7:1987",
-        "ELOT_928",
-        "ECMA-118",
-        "greek",
-        "greek8",
-        "csISOLatinGreek",
-        "sun_eu_greek",
-        "ibm813",
-        "ibm-813",
-        "813",
-        "cp813",
-        "iso8859-7",
-    };
-
-    static final String[] aliases_ISO_8859_9 = new String[] {
-        "iso8859_9",
-        "8859_9",
-        "iso-ir-148",
-        "ISO_8859-9",
-        "ISO_8859-9:1989",
-        "ISO8859-9",
-        "latin5",
-        "l5",
-        "ibm920",
-        "ibm-920",
-        "920",
-        "cp920",
-        "csISOLatin5",
-    };
-
-    static final String[] aliases_ISO_8859_13 = new String[] {
-        "iso8859_13",
-        "8859_13",
-        "iso_8859-13",
-        "ISO8859-13",
-    };
-
-    static final String[] aliases_ISO_8859_15 = new String[] {
-        "ISO_8859-15",
-        "8859_15",
-        "ISO-8859-15",
-        "ISO8859_15",
-        "ISO8859-15",
-        "IBM923",
-        "IBM-923",
-        "cp923",
-        "923",
-        "LATIN0",
-        "LATIN9",
-        "L9",
-        "csISOlatin0",
-        "csISOlatin9",
-        "ISO8859_15_FDIS",
-    };
-
-    static final String[] aliases_KOI8_R = new String[] {
-        "koi8_r",
-        "koi8",
-        "cskoi8r",
-    };
-
-    static final String[] aliases_KOI8_U = new String[] {
-        "koi8_u",
-    };
-
-    static final String[] aliases_MS1250 = new String[] {
-        "cp1250",
-        "cp5346",
-    };
-
-    static final String[] aliases_MS1251 = new String[] {
-        "cp1251",
-        "cp5347",
-        "ansi-1251",
-    };
-
-    static final String[] aliases_MS1252 = new String[] {
-        "cp1252",
-        "cp5348",
-    };
-
-    static final String[] aliases_MS1253 = new String[] {
-        "cp1253",
-        "cp5349",
-    };
-
-    static final String[] aliases_MS1254 = new String[] {
-        "cp1254",
-        "cp5350",
-    };
-
-    static final String[] aliases_MS1257 = new String[] {
-        "cp1257",
-        "cp5353",
-    };
-
-    static final String[] aliases_IBM437 = new String[] {
-        "cp437",
-        "ibm437",
-        "ibm-437",
-        "437",
-        "cspc8codepage437",
-        "windows-437",
-    };
-
-    static final String[] aliases_IBM737 = new String[] {
-        "cp737",
-        "ibm737",
-        "ibm-737",
-        "737",
-    };
-
-    static final String[] aliases_IBM775 = new String[] {
-        "cp775",
-        "ibm775",
-        "ibm-775",
-        "775",
-    };
-
-    static final String[] aliases_IBM850 = new String[] {
-        "cp850",
-        "ibm-850",
-        "ibm850",
-        "850",
-        "cspc850multilingual",
-    };
-
-    static final String[] aliases_IBM852 = new String[] {
-        "cp852",
-        "ibm852",
-        "ibm-852",
-        "852",
-        "csPCp852",
-    };
-
-    static final String[] aliases_IBM855 = new String[] {
-        "cp855",
-        "ibm-855",
-        "ibm855",
-        "855",
-        "cspcp855",
-    };
-
-    static final String[] aliases_IBM857 = new String[] {
-        "cp857",
-        "ibm857",
-        "ibm-857",
-        "857",
-        "csIBM857",
-    };
-
-    static final String[] aliases_IBM858 = new String[] {
-        "cp858",
-        "ccsid00858",
-        "cp00858",
-        "858",
-        "PC-Multilingual-850+euro",
-    };
-
-    static final String[] aliases_IBM862 = new String[] {
-        "cp862",
-        "ibm862",
-        "ibm-862",
-        "862",
-        "csIBM862",
-        "cspc862latinhebrew",
-    };
-
-    static final String[] aliases_IBM866 = new String[] {
-        "cp866",
-        "ibm866",
-        "ibm-866",
-        "866",
-        "csIBM866",
-    };
-
-    static final String[] aliases_IBM874 = new String[] {
-        "cp874",
-        "ibm874",
-        "ibm-874",
-        "874",
-    };
-
-    private static final class Aliases
-        extends sun.util.PreHashedMap<String>
-    {
-
-        private static final int ROWS = 1024;
-        private static final int SIZE = 209;
-        private static final int SHIFT = 0;
-        private static final int MASK = 0x3ff;
-
-        private Aliases() {
-            super(ROWS, SIZE, SHIFT, MASK);
-        }
-
-        protected void init(Object[] ht) {
-            ht[1] = new Object[] { "csisolatin0", "iso-8859-15" };
-            ht[2] = new Object[] { "csisolatin1", "iso-8859-1" };
-            ht[3] = new Object[] { "csisolatin2", "iso-8859-2" };
-            ht[5] = new Object[] { "csisolatin4", "iso-8859-4" };
-            ht[6] = new Object[] { "csisolatin5", "iso-8859-9" };
-            ht[10] = new Object[] { "csisolatin9", "iso-8859-15" };
-            ht[19] = new Object[] { "unicodelittle", "x-utf-16le-bom" };
-            ht[24] = new Object[] { "iso646-us", "us-ascii" };
-            ht[25] = new Object[] { "iso_8859-7:1987", "iso-8859-7" };
-            ht[26] = new Object[] { "912", "iso-8859-2" };
-            ht[28] = new Object[] { "914", "iso-8859-4" };
-            ht[29] = new Object[] { "915", "iso-8859-5" };
-            ht[55] = new Object[] { "920", "iso-8859-9" };
-            ht[58] = new Object[] { "923", "iso-8859-15" };
-            ht[86] = new Object[] { "csisolatincyrillic", "iso-8859-5",
-                         new Object[] { "8859_1", "iso-8859-1" } };
-            ht[87] = new Object[] { "8859_2", "iso-8859-2" };
-            ht[89] = new Object[] { "8859_4", "iso-8859-4" };
-            ht[90] = new Object[] { "813", "iso-8859-7",
-                         new Object[] { "8859_5", "iso-8859-5" } };
-            ht[92] = new Object[] { "8859_7", "iso-8859-7" };
-            ht[94] = new Object[] { "8859_9", "iso-8859-9" };
-            ht[95] = new Object[] { "iso_8859-1:1987", "iso-8859-1" };
-            ht[96] = new Object[] { "819", "iso-8859-1" };
-            ht[106] = new Object[] { "unicode-1-1-utf-8", "utf-8" };
-            ht[121] = new Object[] { "x-utf-16le", "utf-16le" };
-            ht[125] = new Object[] { "ecma-118", "iso-8859-7" };
-            ht[134] = new Object[] { "koi8_r", "koi8-r" };
-            ht[137] = new Object[] { "koi8_u", "koi8-u" };
-            ht[141] = new Object[] { "cp912", "iso-8859-2" };
-            ht[143] = new Object[] { "cp914", "iso-8859-4" };
-            ht[144] = new Object[] { "cp915", "iso-8859-5" };
-            ht[170] = new Object[] { "cp920", "iso-8859-9" };
-            ht[173] = new Object[] { "cp923", "iso-8859-15" };
-            ht[177] = new Object[] { "utf_32le_bom", "x-utf-32le-bom" };
-            ht[192] = new Object[] { "utf_16be", "utf-16be" };
-            ht[199] = new Object[] { "cspc8codepage437", "ibm437",
-                         new Object[] { "ansi-1251", "windows-1251" } };
-            ht[205] = new Object[] { "cp813", "iso-8859-7" };
-            ht[211] = new Object[] { "850", "ibm850",
-                         new Object[] { "cp819", "iso-8859-1" } };
-            ht[213] = new Object[] { "852", "ibm852" };
-            ht[216] = new Object[] { "855", "ibm855" };
-            ht[218] = new Object[] { "857", "ibm857",
-                         new Object[] { "iso-ir-6", "us-ascii" } };
-            ht[219] = new Object[] { "858", "ibm00858",
-                         new Object[] { "737", "x-ibm737" } };
-            ht[225] = new Object[] { "csascii", "us-ascii" };
-            ht[244] = new Object[] { "862", "ibm862" };
-            ht[248] = new Object[] { "866", "ibm866" };
-            ht[253] = new Object[] { "x-utf-32be", "utf-32be" };
-            ht[254] = new Object[] { "iso_8859-2:1987", "iso-8859-2" };
-            ht[259] = new Object[] { "unicodebig", "utf-16" };
-            ht[269] = new Object[] { "iso8859_15_fdis", "iso-8859-15" };
-            ht[277] = new Object[] { "874", "x-ibm874" };
-            ht[280] = new Object[] { "unicodelittleunmarked", "utf-16le" };
-            ht[283] = new Object[] { "iso8859_1", "iso-8859-1" };
-            ht[284] = new Object[] { "iso8859_2", "iso-8859-2" };
-            ht[286] = new Object[] { "iso8859_4", "iso-8859-4" };
-            ht[287] = new Object[] { "iso8859_5", "iso-8859-5" };
-            ht[289] = new Object[] { "iso8859_7", "iso-8859-7" };
-            ht[291] = new Object[] { "iso8859_9", "iso-8859-9" };
-            ht[294] = new Object[] { "ibm912", "iso-8859-2" };
-            ht[296] = new Object[] { "ibm914", "iso-8859-4" };
-            ht[297] = new Object[] { "ibm915", "iso-8859-5" };
-            ht[305] = new Object[] { "iso_8859-13", "iso-8859-13" };
-            ht[307] = new Object[] { "iso_8859-15", "iso-8859-15" };
-            ht[312] = new Object[] { "greek8", "iso-8859-7",
-                         new Object[] { "646", "us-ascii" } };
-            ht[321] = new Object[] { "ibm-912", "iso-8859-2" };
-            ht[323] = new Object[] { "ibm920", "iso-8859-9",
-                         new Object[] { "ibm-914", "iso-8859-4" } };
-            ht[324] = new Object[] { "ibm-915", "iso-8859-5" };
-            ht[325] = new Object[] { "l1", "iso-8859-1" };
-            ht[326] = new Object[] { "cp850", "ibm850",
-                         new Object[] { "ibm923", "iso-8859-15",
-                             new Object[] { "l2", "iso-8859-2" } } };
-            ht[327] = new Object[] { "cyrillic", "iso-8859-5" };
-            ht[328] = new Object[] { "cp852", "ibm852",
-                         new Object[] { "l4", "iso-8859-4" } };
-            ht[329] = new Object[] { "l5", "iso-8859-9" };
-            ht[331] = new Object[] { "cp855", "ibm855" };
-            ht[333] = new Object[] { "cp857", "ibm857",
-                         new Object[] { "l9", "iso-8859-15" } };
-            ht[334] = new Object[] { "cp858", "ibm00858",
-                         new Object[] { "cp737", "x-ibm737" } };
-            ht[336] = new Object[] { "iso_8859_1", "iso-8859-1" };
-            ht[339] = new Object[] { "koi8", "koi8-r" };
-            ht[341] = new Object[] { "775", "ibm775" };
-            ht[345] = new Object[] { "iso_8859-9:1989", "iso-8859-9" };
-            ht[350] = new Object[] { "ibm-920", "iso-8859-9" };
-            ht[353] = new Object[] { "ibm-923", "iso-8859-15" };
-            ht[358] = new Object[] { "ibm813", "iso-8859-7" };
-            ht[359] = new Object[] { "cp862", "ibm862" };
-            ht[363] = new Object[] { "cp866", "ibm866" };
-            ht[364] = new Object[] { "ibm819", "iso-8859-1" };
-            ht[378] = new Object[] { "ansi_x3.4-1968", "us-ascii" };
-            ht[385] = new Object[] { "ibm-813", "iso-8859-7" };
-            ht[391] = new Object[] { "ibm-819", "iso-8859-1" };
-            ht[392] = new Object[] { "cp874", "x-ibm874" };
-            ht[405] = new Object[] { "iso-ir-100", "iso-8859-1" };
-            ht[406] = new Object[] { "iso-ir-101", "iso-8859-2" };
-            ht[408] = new Object[] { "437", "ibm437" };
-            ht[421] = new Object[] { "iso-8859-15", "iso-8859-15" };
-            ht[428] = new Object[] { "latin0", "iso-8859-15" };
-            ht[429] = new Object[] { "latin1", "iso-8859-1" };
-            ht[430] = new Object[] { "latin2", "iso-8859-2" };
-            ht[432] = new Object[] { "latin4", "iso-8859-4" };
-            ht[433] = new Object[] { "latin5", "iso-8859-9" };
-            ht[436] = new Object[] { "iso-ir-110", "iso-8859-4" };
-            ht[437] = new Object[] { "latin9", "iso-8859-15" };
-            ht[438] = new Object[] { "ansi_x3.4-1986", "us-ascii" };
-            ht[443] = new Object[] { "utf-32be-bom", "x-utf-32be-bom" };
-            ht[456] = new Object[] { "cp775", "ibm775" };
-            ht[473] = new Object[] { "iso-ir-126", "iso-8859-7" };
-            ht[479] = new Object[] { "ibm850", "ibm850" };
-            ht[481] = new Object[] { "ibm852", "ibm852" };
-            ht[484] = new Object[] { "ibm855", "ibm855" };
-            ht[486] = new Object[] { "ibm857", "ibm857" };
-            ht[487] = new Object[] { "ibm737", "x-ibm737" };
-            ht[502] = new Object[] { "utf_16le", "utf-16le" };
-            ht[506] = new Object[] { "ibm-850", "ibm850" };
-            ht[508] = new Object[] { "ibm-852", "ibm852" };
-            ht[511] = new Object[] { "ibm-855", "ibm855" };
-            ht[512] = new Object[] { "ibm862", "ibm862" };
-            ht[513] = new Object[] { "ibm-857", "ibm857" };
-            ht[514] = new Object[] { "ibm-737", "x-ibm737" };
-            ht[516] = new Object[] { "ibm866", "ibm866" };
-            ht[520] = new Object[] { "unicodebigunmarked", "utf-16be" };
-            ht[523] = new Object[] { "cp437", "ibm437" };
-            ht[524] = new Object[] { "utf16", "utf-16" };
-            ht[533] = new Object[] { "iso-ir-144", "iso-8859-5" };
-            ht[537] = new Object[] { "iso-ir-148", "iso-8859-9" };
-            ht[539] = new Object[] { "ibm-862", "ibm862" };
-            ht[543] = new Object[] { "ibm-866", "ibm866" };
-            ht[545] = new Object[] { "ibm874", "x-ibm874" };
-            ht[563] = new Object[] { "x-utf-32le", "utf-32le" };
-            ht[572] = new Object[] { "ibm-874", "x-ibm874" };
-            ht[573] = new Object[] { "iso_8859-4:1988", "iso-8859-4" };
-            ht[577] = new Object[] { "default", "us-ascii" };
-            ht[582] = new Object[] { "utf32", "utf-32" };
-            ht[583] = new Object[] { "pc-multilingual-850+euro", "ibm00858" };
-            ht[588] = new Object[] { "elot_928", "iso-8859-7" };
-            ht[593] = new Object[] { "csisolatingreek", "iso-8859-7" };
-            ht[598] = new Object[] { "csibm857", "ibm857" };
-            ht[609] = new Object[] { "ibm775", "ibm775" };
-            ht[617] = new Object[] { "cp1250", "windows-1250" };
-            ht[618] = new Object[] { "cp1251", "windows-1251" };
-            ht[619] = new Object[] { "cp1252", "windows-1252" };
-            ht[620] = new Object[] { "cp1253", "windows-1253" };
-            ht[621] = new Object[] { "cp1254", "windows-1254" };
-            ht[624] = new Object[] { "csibm862", "ibm862",
-                         new Object[] { "cp1257", "windows-1257" } };
-            ht[628] = new Object[] { "csibm866", "ibm866" };
-            ht[632] = new Object[] { "iso8859_13", "iso-8859-13" };
-            ht[634] = new Object[] { "iso8859_15", "iso-8859-15",
-                         new Object[] { "utf_32be", "utf-32be" } };
-            ht[635] = new Object[] { "utf_32be_bom", "x-utf-32be-bom" };
-            ht[636] = new Object[] { "ibm-775", "ibm775" };
-            ht[654] = new Object[] { "cp00858", "ibm00858" };
-            ht[669] = new Object[] { "8859_13", "iso-8859-13" };
-            ht[670] = new Object[] { "us", "us-ascii" };
-            ht[671] = new Object[] { "8859_15", "iso-8859-15" };
-            ht[676] = new Object[] { "ibm437", "ibm437" };
-            ht[679] = new Object[] { "cp367", "us-ascii" };
-            ht[686] = new Object[] { "iso-10646-ucs-2", "utf-16be" };
-            ht[703] = new Object[] { "ibm-437", "ibm437" };
-            ht[710] = new Object[] { "iso8859-13", "iso-8859-13" };
-            ht[712] = new Object[] { "iso8859-15", "iso-8859-15" };
-            ht[732] = new Object[] { "iso_8859-5:1988", "iso-8859-5" };
-            ht[733] = new Object[] { "unicode", "utf-16" };
-            ht[768] = new Object[] { "greek", "iso-8859-7" };
-            ht[774] = new Object[] { "ascii7", "us-ascii" };
-            ht[781] = new Object[] { "iso8859-1", "iso-8859-1" };
-            ht[782] = new Object[] { "iso8859-2", "iso-8859-2" };
-            ht[783] = new Object[] { "cskoi8r", "koi8-r" };
-            ht[784] = new Object[] { "iso8859-4", "iso-8859-4" };
-            ht[785] = new Object[] { "iso8859-5", "iso-8859-5" };
-            ht[787] = new Object[] { "iso8859-7", "iso-8859-7" };
-            ht[789] = new Object[] { "iso8859-9", "iso-8859-9" };
-            ht[813] = new Object[] { "ccsid00858", "ibm00858" };
-            ht[818] = new Object[] { "cspc862latinhebrew", "ibm862" };
-            ht[832] = new Object[] { "ibm367", "us-ascii" };
-            ht[834] = new Object[] { "iso_8859-1", "iso-8859-1" };
-            ht[835] = new Object[] { "iso_8859-2", "iso-8859-2",
-                         new Object[] { "x-utf-16be", "utf-16be" } };
-            ht[836] = new Object[] { "sun_eu_greek", "iso-8859-7" };
-            ht[837] = new Object[] { "iso_8859-4", "iso-8859-4" };
-            ht[838] = new Object[] { "iso_8859-5", "iso-8859-5" };
-            ht[840] = new Object[] { "cspcp852", "ibm852",
-                         new Object[] { "iso_8859-7", "iso-8859-7" } };
-            ht[842] = new Object[] { "iso_8859-9", "iso-8859-9" };
-            ht[843] = new Object[] { "cspcp855", "ibm855" };
-            ht[846] = new Object[] { "windows-437", "ibm437" };
-            ht[849] = new Object[] { "ascii", "us-ascii" };
-            ht[881] = new Object[] { "utf8", "utf-8" };
-            ht[896] = new Object[] { "iso_646.irv:1983", "us-ascii" };
-            ht[909] = new Object[] { "cp5346", "windows-1250" };
-            ht[910] = new Object[] { "cp5347", "windows-1251" };
-            ht[911] = new Object[] { "cp5348", "windows-1252" };
-            ht[912] = new Object[] { "cp5349", "windows-1253" };
-            ht[925] = new Object[] { "iso_646.irv:1991", "us-ascii" };
-            ht[934] = new Object[] { "cp5350", "windows-1254" };
-            ht[937] = new Object[] { "cp5353", "windows-1257" };
-            ht[944] = new Object[] { "utf_32le", "utf-32le" };
-            ht[957] = new Object[] { "utf_16", "utf-16" };
-            ht[993] = new Object[] { "cspc850multilingual", "ibm850" };
-            ht[1009] = new Object[] { "utf-32le-bom", "x-utf-32le-bom" };
-            ht[1015] = new Object[] { "utf_32", "utf-32" };
-        }
-
-    }
-
-    private static final class Classes
-        extends sun.util.PreHashedMap<String>
-    {
-
-        private static final int ROWS = 32;
-        private static final int SIZE = 38;
-        private static final int SHIFT = 1;
-        private static final int MASK = 0x1f;
-
-        private Classes() {
-            super(ROWS, SIZE, SHIFT, MASK);
-        }
-
-        protected void init(Object[] ht) {
-            ht[0] = new Object[] { "ibm862", "IBM862" };
-            ht[2] = new Object[] { "ibm866", "IBM866",
-                         new Object[] { "utf-32", "UTF_32",
-                             new Object[] { "utf-16le", "UTF_16LE" } } };
-            ht[3] = new Object[] { "windows-1251", "MS1251",
-                         new Object[] { "windows-1250", "MS1250" } };
-            ht[4] = new Object[] { "windows-1253", "MS1253",
-                         new Object[] { "windows-1252", "MS1252",
-                             new Object[] { "utf-32be", "UTF_32BE" } } };
-            ht[5] = new Object[] { "windows-1254", "MS1254",
-                         new Object[] { "utf-16", "UTF_16" } };
-            ht[6] = new Object[] { "windows-1257", "MS1257" };
-            ht[7] = new Object[] { "utf-16be", "UTF_16BE" };
-            ht[8] = new Object[] { "iso-8859-2", "ISO_8859_2",
-                         new Object[] { "iso-8859-1", "ISO_8859_1" } };
-            ht[9] = new Object[] { "iso-8859-4", "ISO_8859_4",
-                         new Object[] { "utf-8", "UTF_8" } };
-            ht[10] = new Object[] { "iso-8859-5", "ISO_8859_5" };
-            ht[11] = new Object[] { "x-ibm874", "IBM874",
-                         new Object[] { "iso-8859-7", "ISO_8859_7" } };
-            ht[12] = new Object[] { "iso-8859-9", "ISO_8859_9" };
-            ht[14] = new Object[] { "x-ibm737", "IBM737" };
-            ht[15] = new Object[] { "ibm850", "IBM850" };
-            ht[16] = new Object[] { "ibm852", "IBM852",
-                         new Object[] { "ibm775", "IBM775" } };
-            ht[17] = new Object[] { "iso-8859-13", "ISO_8859_13",
-                         new Object[] { "us-ascii", "US_ASCII" } };
-            ht[18] = new Object[] { "ibm855", "IBM855",
-                         new Object[] { "ibm437", "IBM437",
-                             new Object[] { "iso-8859-15", "ISO_8859_15" } } };
-            ht[19] = new Object[] { "ibm00858", "IBM858",
-                         new Object[] { "ibm857", "IBM857",
-                             new Object[] { "x-utf-32le-bom", "UTF_32LE_BOM" } } };
-            ht[22] = new Object[] { "x-utf-16le-bom", "UTF_16LE_BOM" };
-            ht[24] = new Object[] { "x-utf-32be-bom", "UTF_32BE_BOM" };
-            ht[28] = new Object[] { "koi8-r", "KOI8_R" };
-            ht[29] = new Object[] { "koi8-u", "KOI8_U" };
-            ht[31] = new Object[] { "utf-32le", "UTF_32LE" };
-        }
-
-    }
-
-    private static final class Cache
-        extends sun.util.PreHashedMap<Charset>
-    {
-
-        private static final int ROWS = 32;
-        private static final int SIZE = 38;
-        private static final int SHIFT = 1;
-        private static final int MASK = 0x1f;
-
-        private Cache() {
-            super(ROWS, SIZE, SHIFT, MASK);
-        }
-
-        protected void init(Object[] ht) {
-            ht[0] = new Object[] { "ibm862", null };
-            ht[2] = new Object[] { "ibm866", null,
-                         new Object[] { "utf-32", null,
-                             new Object[] { "utf-16le", null } } };
-            ht[3] = new Object[] { "windows-1251", null,
-                         new Object[] { "windows-1250", null } };
-            ht[4] = new Object[] { "windows-1253", null,
-                         new Object[] { "windows-1252", null,
-                             new Object[] { "utf-32be", null } } };
-            ht[5] = new Object[] { "windows-1254", null,
-                         new Object[] { "utf-16", null } };
-            ht[6] = new Object[] { "windows-1257", null };
-            ht[7] = new Object[] { "utf-16be", null };
-            ht[8] = new Object[] { "iso-8859-2", null,
-                         new Object[] { "iso-8859-1", null } };
-            ht[9] = new Object[] { "iso-8859-4", null,
-                         new Object[] { "utf-8", null } };
-            ht[10] = new Object[] { "iso-8859-5", null };
-            ht[11] = new Object[] { "x-ibm874", null,
-                         new Object[] { "iso-8859-7", null } };
-            ht[12] = new Object[] { "iso-8859-9", null };
-            ht[14] = new Object[] { "x-ibm737", null };
-            ht[15] = new Object[] { "ibm850", null };
-            ht[16] = new Object[] { "ibm852", null,
-                         new Object[] { "ibm775", null } };
-            ht[17] = new Object[] { "iso-8859-13", null,
-                         new Object[] { "us-ascii", null } };
-            ht[18] = new Object[] { "ibm855", null,
-                         new Object[] { "ibm437", null,
-                             new Object[] { "iso-8859-15", null } } };
-            ht[19] = new Object[] { "ibm00858", null,
-                         new Object[] { "ibm857", null,
-                             new Object[] { "x-utf-32le-bom", null } } };
-            ht[22] = new Object[] { "x-utf-16le-bom", null };
-            ht[24] = new Object[] { "x-utf-32be-bom", null };
-            ht[28] = new Object[] { "koi8-r", null };
-            ht[29] = new Object[] { "koi8-u", null };
-            ht[31] = new Object[] { "utf-32le", null };
-        }
-
-    }
-
-    public StandardCharsets() {
-        super("sun.nio.cs", new Aliases(), new Classes(), new Cache());
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/Surrogate.java b/ojluni/src/main/java/sun/nio/cs/Surrogate.java
deleted file mode 100755
index 8b2fcf6..0000000
--- a/ojluni/src/main/java/sun/nio/cs/Surrogate.java
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
- * Copyright (c) 2000, 2010, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.CharBuffer;
-import java.nio.charset.CoderResult;
-import java.nio.charset.MalformedInputException;
-import java.nio.charset.UnmappableCharacterException;
-
-/**
- * Utility class for dealing with surrogates.
- *
- * @author Mark Reinhold
- * @author Martin Buchholz
- * @author Ulf Zibis
- */
-public class Surrogate {
-
-    private Surrogate() { }
-
-    // TODO: Deprecate/remove the following redundant definitions
-    public static final char MIN_HIGH = Character.MIN_HIGH_SURROGATE;
-    public static final char MAX_HIGH = Character.MAX_HIGH_SURROGATE;
-    public static final char MIN_LOW  = Character.MIN_LOW_SURROGATE;
-    public static final char MAX_LOW  = Character.MAX_LOW_SURROGATE;
-    public static final char MIN      = Character.MIN_SURROGATE;
-    public static final char MAX      = Character.MAX_SURROGATE;
-    public static final int UCS4_MIN  = Character.MIN_SUPPLEMENTARY_CODE_POINT;
-    public static final int UCS4_MAX  = Character.MAX_CODE_POINT;
-
-    /**
-     * Tells whether or not the given value is in the high surrogate range.
-     * Use of {@link Character#isHighSurrogate} is generally preferred.
-     */
-    public static boolean isHigh(int c) {
-        return (MIN_HIGH <= c) && (c <= MAX_HIGH);
-    }
-
-    /**
-     * Tells whether or not the given value is in the low surrogate range.
-     * Use of {@link Character#isLowSurrogate} is generally preferred.
-     */
-    public static boolean isLow(int c) {
-        return (MIN_LOW <= c) && (c <= MAX_LOW);
-    }
-
-    /**
-     * Tells whether or not the given value is in the surrogate range.
-     * Use of {@link Character#isSurrogate} is generally preferred.
-     */
-    public static boolean is(int c) {
-        return (MIN <= c) && (c <= MAX);
-    }
-
-    /**
-     * Tells whether or not the given UCS-4 character must be represented as a
-     * surrogate pair in UTF-16.
-     * Use of {@link Character#isSupplementaryCodePoint} is generally preferred.
-     */
-    public static boolean neededFor(int uc) {
-        return Character.isSupplementaryCodePoint(uc);
-    }
-
-    /**
-     * Returns the high UTF-16 surrogate for the given supplementary UCS-4 character.
-     * Use of {@link Character#highSurrogate} is generally preferred.
-     */
-    public static char high(int uc) {
-        assert Character.isSupplementaryCodePoint(uc);
-        return Character.highSurrogate(uc);
-    }
-
-    /**
-     * Returns the low UTF-16 surrogate for the given supplementary UCS-4 character.
-     * Use of {@link Character#lowSurrogate} is generally preferred.
-     */
-    public static char low(int uc) {
-        assert Character.isSupplementaryCodePoint(uc);
-        return Character.lowSurrogate(uc);
-    }
-
-    /**
-     * Converts the given surrogate pair into a 32-bit UCS-4 character.
-     * Use of {@link Character#toCodePoint} is generally preferred.
-     */
-    public static int toUCS4(char c, char d) {
-        assert Character.isHighSurrogate(c) && Character.isLowSurrogate(d);
-        return Character.toCodePoint(c, d);
-    }
-
-    /**
-     * Surrogate parsing support.  Charset implementations may use instances of
-     * this class to handle the details of parsing UTF-16 surrogate pairs.
-     */
-    public static class Parser {
-
-        public Parser() { }
-
-        private int character;          // UCS-4
-        private CoderResult error = CoderResult.UNDERFLOW;
-        private boolean isPair;
-
-        /**
-         * Returns the UCS-4 character previously parsed.
-         */
-        public int character() {
-            assert (error == null);
-            return character;
-        }
-
-        /**
-         * Tells whether or not the previously-parsed UCS-4 character was
-         * originally represented by a surrogate pair.
-         */
-        public boolean isPair() {
-            assert (error == null);
-            return isPair;
-        }
-
-        /**
-         * Returns the number of UTF-16 characters consumed by the previous
-         * parse.
-         */
-        public int increment() {
-            assert (error == null);
-            return isPair ? 2 : 1;
-        }
-
-        /**
-         * If the previous parse operation detected an error, return the object
-         * describing that error.
-         */
-        public CoderResult error() {
-            assert (error != null);
-            return error;
-        }
-
-        /**
-         * Returns an unmappable-input result object, with the appropriate
-         * input length, for the previously-parsed character.
-         */
-        public CoderResult unmappableResult() {
-            assert (error == null);
-            return CoderResult.unmappableForLength(isPair ? 2 : 1);
-        }
-
-        /**
-         * Parses a UCS-4 character from the given source buffer, handling
-         * surrogates.
-         *
-         * @param  c    The first character
-         * @param  in   The source buffer, from which one more character
-         *              will be consumed if c is a high surrogate
-         *
-         * @returns  Either a parsed UCS-4 character, in which case the isPair()
-         *           and increment() methods will return meaningful values, or
-         *           -1, in which case error() will return a descriptive result
-         *           object
-         */
-        public int parse(char c, CharBuffer in) {
-            if (Character.isHighSurrogate(c)) {
-                if (!in.hasRemaining()) {
-                    error = CoderResult.UNDERFLOW;
-                    return -1;
-                }
-                char d = in.get();
-                if (Character.isLowSurrogate(d)) {
-                    character = Character.toCodePoint(c, d);
-                    isPair = true;
-                    error = null;
-                    return character;
-                }
-                error = CoderResult.malformedForLength(1);
-                return -1;
-            }
-            if (Character.isLowSurrogate(c)) {
-                error = CoderResult.malformedForLength(1);
-                return -1;
-            }
-            character = c;
-            isPair = false;
-            error = null;
-            return character;
-        }
-
-        /**
-         * Parses a UCS-4 character from the given source buffer, handling
-         * surrogates.
-         *
-         * @param  c    The first character
-         * @param  ia   The input array, from which one more character
-         *              will be consumed if c is a high surrogate
-         * @param  ip   The input index
-         * @param  il   The input limit
-         *
-         * @returns  Either a parsed UCS-4 character, in which case the isPair()
-         *           and increment() methods will return meaningful values, or
-         *           -1, in which case error() will return a descriptive result
-         *           object
-         */
-        public int parse(char c, char[] ia, int ip, int il) {
-            assert (ia[ip] == c);
-            if (Character.isHighSurrogate(c)) {
-                if (il - ip < 2) {
-                    error = CoderResult.UNDERFLOW;
-                    return -1;
-                }
-                char d = ia[ip + 1];
-                if (Character.isLowSurrogate(d)) {
-                    character = Character.toCodePoint(c, d);
-                    isPair = true;
-                    error = null;
-                    return character;
-                }
-                error = CoderResult.malformedForLength(1);
-                return -1;
-            }
-            if (Character.isLowSurrogate(c)) {
-                error = CoderResult.malformedForLength(1);
-                return -1;
-            }
-            character = c;
-            isPair = false;
-            error = null;
-            return character;
-        }
-
-    }
-
-    /**
-     * Surrogate generation support.  Charset implementations may use instances
-     * of this class to handle the details of generating UTF-16 surrogate
-     * pairs.
-     */
-    public static class Generator {
-
-        public Generator() { }
-
-        private CoderResult error = CoderResult.OVERFLOW;
-
-        /**
-         * If the previous generation operation detected an error, return the
-         * object describing that error.
-         */
-        public CoderResult error() {
-            assert error != null;
-            return error;
-        }
-
-        /**
-         * Generates one or two UTF-16 characters to represent the given UCS-4
-         * character.
-         *
-         * @param  uc   The UCS-4 character
-         * @param  len  The number of input bytes from which the UCS-4 value
-         *              was constructed (used when creating result objects)
-         * @param  dst  The destination buffer, to which one or two UTF-16
-         *              characters will be written
-         *
-         * @returns  Either a positive count of the number of UTF-16 characters
-         *           written to the destination buffer, or -1, in which case
-         *           error() will return a descriptive result object
-         */
-        public int generate(int uc, int len, CharBuffer dst) {
-            if (Character.isBmpCodePoint(uc)) {
-                char c = (char) uc;
-                if (Character.isSurrogate(c)) {
-                    error = CoderResult.malformedForLength(len);
-                    return -1;
-                }
-                if (dst.remaining() < 1) {
-                    error = CoderResult.OVERFLOW;
-                    return -1;
-                }
-                dst.put(c);
-                error = null;
-                return 1;
-            } else if (Character.isValidCodePoint(uc)) {
-                if (dst.remaining() < 2) {
-                    error = CoderResult.OVERFLOW;
-                    return -1;
-                }
-                dst.put(Character.highSurrogate(uc));
-                dst.put(Character.lowSurrogate(uc));
-                error = null;
-                return 2;
-            } else {
-                error = CoderResult.unmappableForLength(len);
-                return -1;
-            }
-        }
-
-        /**
-         * Generates one or two UTF-16 characters to represent the given UCS-4
-         * character.
-         *
-         * @param  uc   The UCS-4 character
-         * @param  len  The number of input bytes from which the UCS-4 value
-         *              was constructed (used when creating result objects)
-         * @param  da   The destination array, to which one or two UTF-16
-         *              characters will be written
-         * @param  dp   The destination position
-         * @param  dl   The destination limit
-         *
-         * @returns  Either a positive count of the number of UTF-16 characters
-         *           written to the destination buffer, or -1, in which case
-         *           error() will return a descriptive result object
-         */
-        public int generate(int uc, int len, char[] da, int dp, int dl) {
-            if (Character.isBmpCodePoint(uc)) {
-                char c = (char) uc;
-                if (Character.isSurrogate(c)) {
-                    error = CoderResult.malformedForLength(len);
-                    return -1;
-                }
-                if (dl - dp < 1) {
-                    error = CoderResult.OVERFLOW;
-                    return -1;
-                }
-                da[dp] = c;
-                error = null;
-                return 1;
-            } else if (Character.isValidCodePoint(uc)) {
-                if (dl - dp < 2) {
-                    error = CoderResult.OVERFLOW;
-                    return -1;
-                }
-                da[dp] = Character.highSurrogate(uc);
-                da[dp + 1] = Character.lowSurrogate(uc);
-                error = null;
-                return 2;
-            } else {
-                error = CoderResult.unmappableForLength(len);
-                return -1;
-            }
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/US_ASCII.java b/ojluni/src/main/java/sun/nio/cs/US_ASCII.java
deleted file mode 100755
index 816a1ac..0000000
--- a/ojluni/src/main/java/sun/nio/cs/US_ASCII.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright (c) 2000, 2004, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import java.util.Arrays;
-
-public class US_ASCII
-    extends Charset
-    implements HistoricallyNamedCharset
-{
-
-    public US_ASCII() {
-        super("US-ASCII", StandardCharsets.aliases_US_ASCII);
-    }
-
-    public String historicalName() {
-        return "ASCII";
-    }
-
-    public boolean contains(Charset cs) {
-        return (cs instanceof US_ASCII);
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    private static class Decoder extends CharsetDecoder
-                                 implements ArrayDecoder {
-
-        private Decoder(Charset cs) {
-            super(cs, 1.0f, 1.0f);
-        }
-
-        private CoderResult decodeArrayLoop(ByteBuffer src,
-                                            CharBuffer dst)
-        {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-                while (sp < sl) {
-                    byte b = sa[sp];
-                    if (b >= 0) {
-                        if (dp >= dl)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = (char)b;
-                        sp++;
-                        continue;
-                    }
-                    return CoderResult.malformedForLength(1);
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult decodeBufferLoop(ByteBuffer src,
-                                             CharBuffer dst)
-        {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    byte b = src.get();
-                    if (b >= 0) {
-                        if (!dst.hasRemaining())
-                            return CoderResult.OVERFLOW;
-                        dst.put((char)b);
-                        mark++;
-                        continue;
-                    }
-                    return CoderResult.malformedForLength(1);
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src,
-                                         CharBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-
-        private char repl = '\uFFFD';
-        protected void implReplaceWith(String newReplacement) {
-            repl = newReplacement.charAt(0);
-        }
-
-        public int decode(byte[] src, int sp, int len, char[] dst) {
-            int dp = 0;
-            len = Math.min(len, dst.length);
-            while (dp < len) {
-                byte b = src[sp++];
-                if (b >= 0)
-                    dst[dp++] = (char)b;
-                else
-                    dst[dp++] = repl;
-            }
-            return dp;
-        }
-    }
-
-    private static class Encoder extends CharsetEncoder
-                                 implements ArrayEncoder {
-
-        private Encoder(Charset cs) {
-            super(cs, 1.0f, 1.0f);
-        }
-
-        public boolean canEncode(char c) {
-            return c < 0x80;
-        }
-
-        public boolean isLegalReplacement(byte[] repl) {
-            return (repl.length == 1 && repl[0] >= 0) ||
-                   super.isLegalReplacement(repl);
-        }
-
-        private final Surrogate.Parser sgp = new Surrogate.Parser();
-        private CoderResult encodeArrayLoop(CharBuffer src,
-                                            ByteBuffer dst)
-        {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if (c < 0x80) {
-                        if (dp >= dl)
-                            return CoderResult.OVERFLOW;
-                        da[dp] = (byte)c;
-                        sp++; dp++;
-                        continue;
-                    }
-                    if (sgp.parse(c, sa, sp, sl) < 0)
-                        return sgp.error();
-                    return sgp.unmappableResult();
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult encodeBufferLoop(CharBuffer src,
-                                             ByteBuffer dst)
-        {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    char c = src.get();
-                    if (c < 0x80) {
-                        if (!dst.hasRemaining())
-                            return CoderResult.OVERFLOW;
-                        dst.put((byte)c);
-                        mark++;
-                        continue;
-                    }
-                    if (sgp.parse(c, src) < 0)
-                        return sgp.error();
-                    return sgp.unmappableResult();
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src,
-                                         ByteBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return encodeArrayLoop(src, dst);
-            else
-                return encodeBufferLoop(src, dst);
-        }
-
-        private byte repl = (byte)'?';
-        protected void implReplaceWith(byte[] newReplacement) {
-            repl = newReplacement[0];
-        }
-
-        public int encode(char[] src, int sp, int len, byte[] dst) {
-            int dp = 0;
-            int sl = sp + Math.min(len, dst.length);
-            while (sp < sl) {
-                char c = src[sp++];
-                if (c < 0x80) {
-                    dst[dp++] = (byte)c;
-                    continue;
-                }
-                if (Character.isHighSurrogate(c) && sp < sl &&
-                    Character.isLowSurrogate(src[sp])) {
-                    if (len > dst.length) {
-                        sl++;
-                        len--;
-                    }
-                    sp++;
-                }
-                dst[dp++] = repl;
-            }
-            return dp;
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/UTF_16.java b/ojluni/src/main/java/sun/nio/cs/UTF_16.java
deleted file mode 100755
index a5d72ff..0000000
--- a/ojluni/src/main/java/sun/nio/cs/UTF_16.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2000, 2005, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
-class UTF_16 extends Unicode
-{
-
-    public UTF_16() {
-        super("UTF-16", StandardCharsets.aliases_UTF_16);
-    }
-
-    public String historicalName() {
-        return "UTF-16";
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    private static class Decoder extends UnicodeDecoder {
-
-        public Decoder(Charset cs) {
-            super(cs, NONE);
-        }
-    }
-
-    private static class Encoder extends UnicodeEncoder {
-
-        public Encoder(Charset cs) {
-            super(cs, BIG, true);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/UTF_16BE.java b/ojluni/src/main/java/sun/nio/cs/UTF_16BE.java
deleted file mode 100755
index a7c89c6..0000000
--- a/ojluni/src/main/java/sun/nio/cs/UTF_16BE.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2000, 2005, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
-class UTF_16BE extends Unicode
-{
-
-    public UTF_16BE() {
-        super("UTF-16BE", StandardCharsets.aliases_UTF_16BE);
-    }
-
-    public String historicalName() {
-        return "UnicodeBigUnmarked";
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    private static class Decoder extends UnicodeDecoder {
-
-        public Decoder(Charset cs) {
-            super(cs, BIG);
-        }
-    }
-
-    private static class Encoder extends UnicodeEncoder {
-
-        public Encoder(Charset cs) {
-           super(cs, BIG, false);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/UTF_16LE.java b/ojluni/src/main/java/sun/nio/cs/UTF_16LE.java
deleted file mode 100755
index c24c1f5..0000000
--- a/ojluni/src/main/java/sun/nio/cs/UTF_16LE.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2000, 2005, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
-class UTF_16LE extends Unicode
-{
-
-    public UTF_16LE() {
-        super("UTF-16LE", StandardCharsets.aliases_UTF_16LE);
-    }
-
-    public String historicalName() {
-        return "UnicodeLittleUnmarked";
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    private static class Decoder extends UnicodeDecoder {
-
-        public Decoder(Charset cs) {
-            super(cs, LITTLE);
-        }
-    }
-
-    private static class Encoder extends UnicodeEncoder {
-
-        public Encoder(Charset cs) {
-            super(cs, LITTLE, false);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/UTF_16LE_BOM.java b/ojluni/src/main/java/sun/nio/cs/UTF_16LE_BOM.java
deleted file mode 100755
index 86ac2a5..0000000
--- a/ojluni/src/main/java/sun/nio/cs/UTF_16LE_BOM.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
-class UTF_16LE_BOM extends Unicode
-{
-
-    public UTF_16LE_BOM() {
-        super("x-UTF-16LE-BOM", StandardCharsets.aliases_UTF_16LE_BOM);
-    }
-
-    public String historicalName() {
-        return "UnicodeLittle";
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    private static class Decoder extends UnicodeDecoder {
-
-        public Decoder(Charset cs) {
-            super(cs, NONE, LITTLE);
-        }
-    }
-
-    private static class Encoder extends UnicodeEncoder {
-
-        public Encoder(Charset cs) {
-            super(cs, LITTLE, true);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/UTF_32.java b/ojluni/src/main/java/sun/nio/cs/UTF_32.java
deleted file mode 100755
index 3165f75..0000000
--- a/ojluni/src/main/java/sun/nio/cs/UTF_32.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
-public class UTF_32 extends Unicode
-{
-    public UTF_32() {
-        super("UTF-32", StandardCharsets.aliases_UTF_32);
-    }
-
-    public String historicalName() {
-        return "UTF-32";
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new UTF_32Coder.Decoder(this, UTF_32Coder.NONE);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new UTF_32Coder.Encoder(this, UTF_32Coder.BIG, false);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/UTF_32BE.java b/ojluni/src/main/java/sun/nio/cs/UTF_32BE.java
deleted file mode 100755
index cf025f1..0000000
--- a/ojluni/src/main/java/sun/nio/cs/UTF_32BE.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
-public class UTF_32BE extends Unicode
-{
-    public UTF_32BE() {
-        super("UTF-32BE", StandardCharsets.aliases_UTF_32BE);
-    }
-
-    public String historicalName() {
-        return "UTF-32BE";
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new UTF_32Coder.Decoder(this, UTF_32Coder.BIG);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new UTF_32Coder.Encoder(this, UTF_32Coder.BIG, false);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/UTF_32BE_BOM.java b/ojluni/src/main/java/sun/nio/cs/UTF_32BE_BOM.java
deleted file mode 100755
index 3de22bd..0000000
--- a/ojluni/src/main/java/sun/nio/cs/UTF_32BE_BOM.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
-public class UTF_32BE_BOM extends Unicode
-{
-    public UTF_32BE_BOM() {
-        super("X-UTF-32BE-BOM", StandardCharsets.aliases_UTF_32BE_BOM);
-    }
-
-    public String historicalName() {
-        return "X-UTF-32BE-BOM";
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new UTF_32Coder.Decoder(this, UTF_32Coder.BIG);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new UTF_32Coder.Encoder(this, UTF_32Coder.BIG, true);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/UTF_32Coder.java b/ojluni/src/main/java/sun/nio/cs/UTF_32Coder.java
deleted file mode 100755
index c6f38ec..0000000
--- a/ojluni/src/main/java/sun/nio/cs/UTF_32Coder.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright (c) 2005, 2010, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CoderResult;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
-class UTF_32Coder {
-    protected static final int BOM_BIG = 0xFEFF;
-    protected static final int BOM_LITTLE = 0xFFFE0000;
-    protected static final int NONE = 0;
-    protected static final int BIG = 1;
-    protected static final int LITTLE = 2;
-
-    protected static class Decoder extends CharsetDecoder {
-        private int currentBO;
-        private int expectedBO;
-
-        protected Decoder(Charset cs, int bo) {
-            super(cs, 0.25f, 1.0f);
-            this.expectedBO = bo;
-            this.currentBO = NONE;
-        }
-
-        private int getCP(ByteBuffer src) {
-            return (currentBO==BIG)
-              ?(((src.get() & 0xff) << 24) |
-                ((src.get() & 0xff) << 16) |
-                ((src.get() & 0xff) <<  8) |
-                (src.get() & 0xff))
-              :((src.get() & 0xff) |
-                ((src.get() & 0xff) <<  8) |
-                ((src.get() & 0xff) << 16) |
-                ((src.get() & 0xff) << 24));
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            if (src.remaining() < 4)
-                return CoderResult.UNDERFLOW;
-            int mark = src.position();
-            int cp;
-            try {
-                if (currentBO == NONE) {
-                    cp = ((src.get() & 0xff) << 24) |
-                         ((src.get() & 0xff) << 16) |
-                         ((src.get() & 0xff) <<  8) |
-                         (src.get() & 0xff);
-                    if (cp == BOM_BIG && expectedBO != LITTLE) {
-                        currentBO = BIG;
-                        mark += 4;
-                    } else if (cp == BOM_LITTLE && expectedBO != BIG) {
-                        currentBO = LITTLE;
-                        mark += 4;
-                    } else {
-                        if (expectedBO == NONE)
-                            currentBO = BIG;
-                        else
-                            currentBO = expectedBO;
-                        src.position(mark);
-                    }
-                }
-                while (src.remaining() >= 4) {
-                    cp = getCP(src);
-                    if (Character.isBmpCodePoint(cp)) {
-                        if (!dst.hasRemaining())
-                            return CoderResult.OVERFLOW;
-                        mark += 4;
-                        dst.put((char) cp);
-                    } else if (Character.isValidCodePoint(cp)) {
-                        if (dst.remaining() < 2)
-                            return CoderResult.OVERFLOW;
-                        mark += 4;
-                        dst.put(Character.highSurrogate(cp));
-                        dst.put(Character.lowSurrogate(cp));
-                    } else {
-                        return CoderResult.malformedForLength(4);
-                    }
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-        protected void implReset() {
-            currentBO = NONE;
-        }
-    }
-
-    protected static class Encoder extends CharsetEncoder {
-        private boolean doBOM = false;
-        private boolean doneBOM = true;
-        private int byteOrder;
-
-        protected void put(int cp, ByteBuffer dst) {
-            if (byteOrder==BIG) {
-                dst.put((byte)(cp >> 24));
-                dst.put((byte)(cp >> 16));
-                dst.put((byte)(cp >> 8));
-                dst.put((byte)cp);
-            } else {
-                dst.put((byte)cp);
-                dst.put((byte)(cp >>  8));
-                dst.put((byte)(cp >> 16));
-                dst.put((byte)(cp >> 24));
-            }
-        }
-
-        protected Encoder(Charset cs, int byteOrder, boolean doBOM) {
-            super(cs, 4.0f,
-                  doBOM?8.0f:4.0f,
-                  (byteOrder==BIG)?new byte[]{(byte)0, (byte)0, (byte)0xff, (byte)0xfd}
-                                  :new byte[]{(byte)0xfd, (byte)0xff, (byte)0, (byte)0});
-            this.byteOrder = byteOrder;
-            this.doBOM = doBOM;
-            this.doneBOM = !doBOM;
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            int mark = src.position();
-            if (!doneBOM && src.hasRemaining()) {
-                if (dst.remaining() < 4)
-                    return CoderResult.OVERFLOW;
-                put(BOM_BIG, dst);
-                doneBOM = true;
-            }
-            try {
-                while (src.hasRemaining()) {
-                    char c = src.get();
-                    if (!Character.isSurrogate(c)) {
-                        if (dst.remaining() < 4)
-                            return CoderResult.OVERFLOW;
-                        mark++;
-                        put(c, dst);
-                    } else if (Character.isHighSurrogate(c)) {
-                        if (!src.hasRemaining())
-                            return CoderResult.UNDERFLOW;
-                        char low = src.get();
-                        if (Character.isLowSurrogate(low)) {
-                            if (dst.remaining() < 4)
-                                return CoderResult.OVERFLOW;
-                            mark += 2;
-                            put(Character.toCodePoint(c, low), dst);
-                        } else {
-                            return CoderResult.malformedForLength(1);
-                        }
-                    } else {
-                        // assert Character.isLowSurrogate(c);
-                        return CoderResult.malformedForLength(1);
-                    }
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected void implReset() {
-            doneBOM = !doBOM;
-        }
-
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/UTF_32LE.java b/ojluni/src/main/java/sun/nio/cs/UTF_32LE.java
deleted file mode 100755
index 697bb45..0000000
--- a/ojluni/src/main/java/sun/nio/cs/UTF_32LE.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
-public class UTF_32LE extends Unicode
-{
-    public UTF_32LE() {
-        super("UTF-32LE", StandardCharsets.aliases_UTF_32LE);
-    }
-
-    public String historicalName() {
-        return "UTF-32LE";
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new UTF_32Coder.Decoder(this, UTF_32Coder.LITTLE);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new UTF_32Coder.Encoder(this, UTF_32Coder.LITTLE, false);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/UTF_32LE_BOM.java b/ojluni/src/main/java/sun/nio/cs/UTF_32LE_BOM.java
deleted file mode 100755
index 9db63f9..0000000
--- a/ojluni/src/main/java/sun/nio/cs/UTF_32LE_BOM.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
-public class UTF_32LE_BOM extends Unicode
-{
-    public UTF_32LE_BOM() {
-        super("X-UTF-32LE-BOM", StandardCharsets.aliases_UTF_32LE_BOM);
-    }
-
-    public String historicalName() {
-        return "X-UTF-32LE-BOM";
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new UTF_32Coder.Decoder(this, UTF_32Coder.LITTLE);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new UTF_32Coder.Encoder(this, UTF_32Coder.LITTLE, true);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/UTF_8.java b/ojluni/src/main/java/sun/nio/cs/UTF_8.java
deleted file mode 100755
index 56d6bcc..0000000
--- a/ojluni/src/main/java/sun/nio/cs/UTF_8.java
+++ /dev/null
@@ -1,669 +0,0 @@
-/*
- * Copyright (c) 2000, 2010, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.Buffer;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import java.nio.charset.CodingErrorAction;
-
-/* Legal UTF-8 Byte Sequences
- *
- * #    Code Points      Bits   Bit/Byte pattern
- * 1                     7      0xxxxxxx
- *      U+0000..U+007F          00..7F
- *
- * 2                     11     110xxxxx    10xxxxxx
- *      U+0080..U+07FF          C2..DF      80..BF
- *
- * 3                     16     1110xxxx    10xxxxxx    10xxxxxx
- *      U+0800..U+0FFF          E0          A0..BF      80..BF
- *      U+1000..U+FFFF          E1..EF      80..BF      80..BF
- *
- * 4                     21     11110xxx    10xxxxxx    10xxxxxx    10xxxxxx
- *     U+10000..U+3FFFF         F0          90..BF      80..BF      80..BF
- *     U+40000..U+FFFFF         F1..F3      80..BF      80..BF      80..BF
- *    U+100000..U10FFFF         F4          80..8F      80..BF      80..BF
- *
- */
-
-class UTF_8 extends Unicode
-{
-    public UTF_8() {
-        super("UTF-8", StandardCharsets.aliases_UTF_8);
-    }
-
-    public String historicalName() {
-        return "UTF8";
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    static final void updatePositions(Buffer src, int sp,
-                                      Buffer dst, int dp) {
-        src.position(sp - src.arrayOffset());
-        dst.position(dp - dst.arrayOffset());
-    }
-
-    private static class Decoder extends CharsetDecoder
-                                 implements ArrayDecoder {
-        private Decoder(Charset cs) {
-            super(cs, 1.0f, 1.0f);
-        }
-
-        private static boolean isNotContinuation(int b) {
-            return (b & 0xc0) != 0x80;
-        }
-
-        //  [C2..DF] [80..BF]
-        private static boolean isMalformed2(int b1, int b2) {
-            return (b1 & 0x1e) == 0x0 || (b2 & 0xc0) != 0x80;
-        }
-
-        //  [E0]     [A0..BF] [80..BF]
-        //  [E1..EF] [80..BF] [80..BF]
-        private static boolean isMalformed3(int b1, int b2, int b3) {
-            return (b1 == (byte)0xe0 && (b2 & 0xe0) == 0x80) ||
-                   (b2 & 0xc0) != 0x80 || (b3 & 0xc0) != 0x80;
-        }
-
-        //  [F0]     [90..BF] [80..BF] [80..BF]
-        //  [F1..F3] [80..BF] [80..BF] [80..BF]
-        //  [F4]     [80..8F] [80..BF] [80..BF]
-        //  only check 80-be range here, the [0xf0,0x80...] and [0xf4,0x90-...]
-        //  will be checked by Character.isSupplementaryCodePoint(uc)
-        private static boolean isMalformed4(int b2, int b3, int b4) {
-            return (b2 & 0xc0) != 0x80 || (b3 & 0xc0) != 0x80 ||
-                   (b4 & 0xc0) != 0x80;
-        }
-
-        private static CoderResult lookupN(ByteBuffer src, int n)
-        {
-            for (int i = 1; i < n; i++) {
-               if (isNotContinuation(src.get()))
-                   return CoderResult.malformedForLength(i);
-            }
-            return CoderResult.malformedForLength(n);
-        }
-
-        private static CoderResult malformedN(ByteBuffer src, int nb) {
-            switch (nb) {
-            case 1:
-                int b1 = src.get();
-                if ((b1 >> 2) == -2) {
-                    // 5 bytes 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
-                    if (src.remaining() < 4)
-                        return CoderResult.UNDERFLOW;
-                    return lookupN(src, 5);
-                }
-                if ((b1 >> 1) == -2) {
-                    // 6 bytes 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
-                    if (src.remaining() < 5)
-                        return CoderResult.UNDERFLOW;
-                    return lookupN(src, 6);
-                }
-                return CoderResult.malformedForLength(1);
-            case 2:                    // always 1
-                return CoderResult.malformedForLength(1);
-            case 3:
-                b1 = src.get();
-                int b2 = src.get();    // no need to lookup b3
-                return CoderResult.malformedForLength(
-                    ((b1 == (byte)0xe0 && (b2 & 0xe0) == 0x80) ||
-                     isNotContinuation(b2))?1:2);
-            case 4:  // we don't care the speed here
-                b1 = src.get() & 0xff;
-                b2 = src.get() & 0xff;
-                if (b1 > 0xf4 ||
-                    (b1 == 0xf0 && (b2 < 0x90 || b2 > 0xbf)) ||
-                    (b1 == 0xf4 && (b2 & 0xf0) != 0x80) ||
-                    isNotContinuation(b2))
-                    return CoderResult.malformedForLength(1);
-                if (isNotContinuation(src.get()))
-                    return CoderResult.malformedForLength(2);
-                return CoderResult.malformedForLength(3);
-            default:
-                assert false;
-                return null;
-            }
-        }
-
-        private static CoderResult malformed(ByteBuffer src, int sp,
-                                             CharBuffer dst, int dp,
-                                             int nb)
-        {
-            src.position(sp - src.arrayOffset());
-            CoderResult cr = malformedN(src, nb);
-            updatePositions(src, sp, dst, dp);
-            return cr;
-        }
-
-        private static CoderResult malformed(ByteBuffer src,
-                                             int mark, int nb)
-        {
-            src.position(mark);
-            CoderResult cr = malformedN(src, nb);
-            src.position(mark);
-            return cr;
-        }
-
-        private static CoderResult xflow(Buffer src, int sp, int sl,
-                                         Buffer dst, int dp, int nb) {
-            updatePositions(src, sp, dst, dp);
-            return (nb == 0 || sl - sp < nb)
-                   ?CoderResult.UNDERFLOW:CoderResult.OVERFLOW;
-        }
-
-        private static CoderResult xflow(Buffer src, int mark, int nb) {
-            CoderResult cr = (nb == 0 || src.remaining() < (nb - 1))
-                             ?CoderResult.UNDERFLOW:CoderResult.OVERFLOW;
-            src.position(mark);
-            return cr;
-        }
-
-        private CoderResult decodeArrayLoop(ByteBuffer src,
-                                            CharBuffer dst)
-        {
-            // This method is optimized for ASCII input.
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            int dlASCII = dp + Math.min(sl - sp, dl - dp);
-
-            // ASCII only loop
-            while (dp < dlASCII && sa[sp] >= 0)
-                da[dp++] = (char) sa[sp++];
-
-            while (sp < sl) {
-                int b1 = sa[sp];
-                if (b1 >= 0) {
-                    // 1 byte, 7 bits: 0xxxxxxx
-                    if (dp >= dl)
-                        return xflow(src, sp, sl, dst, dp, 1);
-                    da[dp++] = (char) b1;
-                    sp++;
-                } else if ((b1 >> 5) == -2) {
-                    // 2 bytes, 11 bits: 110xxxxx 10xxxxxx
-                    if (sl - sp < 2 || dp >= dl)
-                        return xflow(src, sp, sl, dst, dp, 2);
-                    int b2 = sa[sp + 1];
-                    if (isMalformed2(b1, b2))
-                        return malformed(src, sp, dst, dp, 2);
-                    da[dp++] = (char) (((b1 << 6) ^ b2)
-                                       ^
-                                       (((byte) 0xC0 << 6) ^
-                                        ((byte) 0x80 << 0)));
-                    sp += 2;
-                } else if ((b1 >> 4) == -2) {
-                    // 3 bytes, 16 bits: 1110xxxx 10xxxxxx 10xxxxxx
-                    if (sl - sp < 3 || dp >= dl)
-                        return xflow(src, sp, sl, dst, dp, 3);
-                    int b2 = sa[sp + 1];
-                    int b3 = sa[sp + 2];
-                    if (isMalformed3(b1, b2, b3))
-                        return malformed(src, sp, dst, dp, 3);
-                    da[dp++] = (char)
-                        ((b1 << 12) ^
-                         (b2 <<  6) ^
-                         (b3 ^
-                          (((byte) 0xE0 << 12) ^
-                           ((byte) 0x80 <<  6) ^
-                           ((byte) 0x80 <<  0))));
-                    sp += 3;
-                } else if ((b1 >> 3) == -2) {
-                    // 4 bytes, 21 bits: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
-                    if (sl - sp < 4 || dl - dp < 2)
-                        return xflow(src, sp, sl, dst, dp, 4);
-                    int b2 = sa[sp + 1];
-                    int b3 = sa[sp + 2];
-                    int b4 = sa[sp + 3];
-                    int uc = ((b1 << 18) ^
-                              (b2 << 12) ^
-                              (b3 <<  6) ^
-                              (b4 ^
-                               (((byte) 0xF0 << 18) ^
-                                ((byte) 0x80 << 12) ^
-                                ((byte) 0x80 <<  6) ^
-                                ((byte) 0x80 <<  0))));
-                    if (isMalformed4(b2, b3, b4) ||
-                        // shortest form check
-                        !Character.isSupplementaryCodePoint(uc)) {
-                        return malformed(src, sp, dst, dp, 4);
-                    }
-                    da[dp++] = Character.highSurrogate(uc);
-                    da[dp++] = Character.lowSurrogate(uc);
-                    sp += 4;
-                } else
-                    return malformed(src, sp, dst, dp, 1);
-            }
-            return xflow(src, sp, sl, dst, dp, 0);
-        }
-
-        private CoderResult decodeBufferLoop(ByteBuffer src,
-                                             CharBuffer dst)
-        {
-            int mark = src.position();
-            int limit = src.limit();
-            while (mark < limit) {
-                int b1 = src.get();
-                if (b1 >= 0) {
-                    // 1 byte, 7 bits: 0xxxxxxx
-                    if (dst.remaining() < 1)
-                        return xflow(src, mark, 1); // overflow
-                    dst.put((char) b1);
-                    mark++;
-                } else if ((b1 >> 5) == -2) {
-                    // 2 bytes, 11 bits: 110xxxxx 10xxxxxx
-                    if (limit - mark < 2|| dst.remaining() < 1)
-                        return xflow(src, mark, 2);
-                    int b2 = src.get();
-                    if (isMalformed2(b1, b2))
-                        return malformed(src, mark, 2);
-                    dst.put((char) (((b1 << 6) ^ b2)
-                                    ^
-                                    (((byte) 0xC0 << 6) ^
-                                     ((byte) 0x80 << 0))));
-                    mark += 2;
-                } else if ((b1 >> 4) == -2) {
-                    // 3 bytes, 16 bits: 1110xxxx 10xxxxxx 10xxxxxx
-                    if (limit - mark < 3 || dst.remaining() < 1)
-                        return xflow(src, mark, 3);
-                    int b2 = src.get();
-                    int b3 = src.get();
-                    if (isMalformed3(b1, b2, b3))
-                        return malformed(src, mark, 3);
-                    dst.put((char)
-                            ((b1 << 12) ^
-                             (b2 <<  6) ^
-                             (b3 ^
-                              (((byte) 0xE0 << 12) ^
-                               ((byte) 0x80 <<  6) ^
-                               ((byte) 0x80 <<  0)))));
-                    mark += 3;
-                } else if ((b1 >> 3) == -2) {
-                    // 4 bytes, 21 bits: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
-                    if (limit - mark < 4 || dst.remaining() < 2)
-                        return xflow(src, mark, 4);
-                    int b2 = src.get();
-                    int b3 = src.get();
-                    int b4 = src.get();
-                    int uc = ((b1 << 18) ^
-                              (b2 << 12) ^
-                              (b3 <<  6) ^
-                              (b4 ^
-                               (((byte) 0xF0 << 18) ^
-                                ((byte) 0x80 << 12) ^
-                                ((byte) 0x80 <<  6) ^
-                                ((byte) 0x80 <<  0))));
-                    if (isMalformed4(b2, b3, b4) ||
-                        // shortest form check
-                        !Character.isSupplementaryCodePoint(uc)) {
-                        return malformed(src, mark, 4);
-                    }
-                    dst.put(Character.highSurrogate(uc));
-                    dst.put(Character.lowSurrogate(uc));
-                    mark += 4;
-                } else {
-                    return malformed(src, mark, 1);
-                }
-            }
-            return xflow(src, mark, 0);
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src,
-                                         CharBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-
-        private static ByteBuffer getByteBuffer(ByteBuffer bb, byte[] ba, int sp)
-        {
-            if (bb == null)
-                bb = ByteBuffer.wrap(ba);
-            bb.position(sp);
-            return bb;
-        }
-
-        // returns -1 if there is malformed byte(s) and the
-        // "action" for malformed input is not REPLACE.
-        public int decode(byte[] sa, int sp, int len, char[] da) {
-            final int sl = sp + len;
-            int dp = 0;
-            int dlASCII = Math.min(len, da.length);
-            ByteBuffer bb = null;  // only necessary if malformed
-
-            // ASCII only optimized loop
-            while (dp < dlASCII && sa[sp] >= 0)
-                da[dp++] = (char) sa[sp++];
-
-            while (sp < sl) {
-                int b1 = sa[sp++];
-                if (b1 >= 0) {
-                    // 1 byte, 7 bits: 0xxxxxxx
-                    da[dp++] = (char) b1;
-                } else if ((b1 >> 5) == -2) {
-                    // 2 bytes, 11 bits: 110xxxxx 10xxxxxx
-                    if (sp < sl) {
-                        int b2 = sa[sp++];
-                        if (isMalformed2(b1, b2)) {
-                            if (malformedInputAction() != CodingErrorAction.REPLACE)
-                                return -1;
-                            da[dp++] = replacement().charAt(0);
-                            sp--;            // malformedN(bb, 2) always returns 1
-                        } else {
-                            da[dp++] = (char) (((b1 << 6) ^ b2)^
-                                           (((byte) 0xC0 << 6) ^
-                                            ((byte) 0x80 << 0)));
-                        }
-                        continue;
-                    }
-                    if (malformedInputAction() != CodingErrorAction.REPLACE)
-                        return -1;
-                    da[dp++] = replacement().charAt(0);
-                    return dp;
-                } else if ((b1 >> 4) == -2) {
-                    // 3 bytes, 16 bits: 1110xxxx 10xxxxxx 10xxxxxx
-                    if (sp + 1 < sl) {
-                        int b2 = sa[sp++];
-                        int b3 = sa[sp++];
-                        if (isMalformed3(b1, b2, b3)) {
-                            if (malformedInputAction() != CodingErrorAction.REPLACE)
-                                return -1;
-                            da[dp++] = replacement().charAt(0);
-                            sp -=3;
-                            bb = getByteBuffer(bb, sa, sp);
-                            sp += malformedN(bb, 3).length();
-                        } else {
-                            da[dp++] = (char)((b1 << 12) ^
-                                              (b2 <<  6) ^
-                                              (b3 ^
-                                              (((byte) 0xE0 << 12) ^
-                                              ((byte) 0x80 <<  6) ^
-                                              ((byte) 0x80 <<  0))));
-                        }
-                        continue;
-                    }
-                    if (malformedInputAction() != CodingErrorAction.REPLACE)
-                        return -1;
-                    da[dp++] = replacement().charAt(0);
-                    return dp;
-                } else if ((b1 >> 3) == -2) {
-                    // 4 bytes, 21 bits: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
-                    if (sp + 2 < sl) {
-                        int b2 = sa[sp++];
-                        int b3 = sa[sp++];
-                        int b4 = sa[sp++];
-                        int uc = ((b1 << 18) ^
-                                  (b2 << 12) ^
-                                  (b3 <<  6) ^
-                                  (b4 ^
-                                   (((byte) 0xF0 << 18) ^
-                                   ((byte) 0x80 << 12) ^
-                                   ((byte) 0x80 <<  6) ^
-                                   ((byte) 0x80 <<  0))));
-                        if (isMalformed4(b2, b3, b4) ||
-                            // shortest form check
-                            !Character.isSupplementaryCodePoint(uc)) {
-                            if (malformedInputAction() != CodingErrorAction.REPLACE)
-                                return -1;
-                            da[dp++] = replacement().charAt(0);
-                            sp -= 4;
-                            bb = getByteBuffer(bb, sa, sp);
-                            sp += malformedN(bb, 4).length();
-                        } else {
-                            da[dp++] = Character.highSurrogate(uc);
-                            da[dp++] = Character.lowSurrogate(uc);
-                        }
-                        continue;
-                    }
-                    if (malformedInputAction() != CodingErrorAction.REPLACE)
-                        return -1;
-                    da[dp++] = replacement().charAt(0);
-                    return dp;
-                } else {
-                    if (malformedInputAction() != CodingErrorAction.REPLACE)
-                        return -1;
-                    da[dp++] = replacement().charAt(0);
-                    sp--;
-                    bb = getByteBuffer(bb, sa, sp);
-                    CoderResult cr = malformedN(bb, 1);
-                    if (!cr.isError()) {
-                        // leading byte for 5 or 6-byte, but don't have enough
-                        // bytes in buffer to check. Consumed rest as malformed.
-                        return dp;
-                    }
-                    sp +=  cr.length();
-                }
-            }
-            return dp;
-        }
-    }
-
-    private static class Encoder extends CharsetEncoder
-                                 implements ArrayEncoder {
-
-        private Encoder(Charset cs) {
-            super(cs, 1.1f, 3.0f);
-        }
-
-        public boolean canEncode(char c) {
-            return !Character.isSurrogate(c);
-        }
-
-        public boolean isLegalReplacement(byte[] repl) {
-            return ((repl.length == 1 && repl[0] >= 0) ||
-                    super.isLegalReplacement(repl));
-        }
-
-        private static CoderResult overflow(CharBuffer src, int sp,
-                                            ByteBuffer dst, int dp) {
-            updatePositions(src, sp, dst, dp);
-            return CoderResult.OVERFLOW;
-        }
-
-        private static CoderResult overflow(CharBuffer src, int mark) {
-            src.position(mark);
-            return CoderResult.OVERFLOW;
-        }
-
-        private Surrogate.Parser sgp;
-        private CoderResult encodeArrayLoop(CharBuffer src,
-                                            ByteBuffer dst)
-        {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            int dlASCII = dp + Math.min(sl - sp, dl - dp);
-
-            // ASCII only loop
-            while (dp < dlASCII && sa[sp] < '\u0080')
-                da[dp++] = (byte) sa[sp++];
-            while (sp < sl) {
-                char c = sa[sp];
-                if (c < 0x80) {
-                    // Have at most seven bits
-                    if (dp >= dl)
-                        return overflow(src, sp, dst, dp);
-                    da[dp++] = (byte)c;
-                } else if (c < 0x800) {
-                    // 2 bytes, 11 bits
-                    if (dl - dp < 2)
-                        return overflow(src, sp, dst, dp);
-                    da[dp++] = (byte)(0xc0 | (c >> 6));
-                    da[dp++] = (byte)(0x80 | (c & 0x3f));
-                } else if (Character.isSurrogate(c)) {
-                    // Have a surrogate pair
-                    if (sgp == null)
-                        sgp = new Surrogate.Parser();
-                    int uc = sgp.parse(c, sa, sp, sl);
-                    if (uc < 0) {
-                        updatePositions(src, sp, dst, dp);
-                        return sgp.error();
-                    }
-                    if (dl - dp < 4)
-                        return overflow(src, sp, dst, dp);
-                    da[dp++] = (byte)(0xf0 | ((uc >> 18)));
-                    da[dp++] = (byte)(0x80 | ((uc >> 12) & 0x3f));
-                    da[dp++] = (byte)(0x80 | ((uc >>  6) & 0x3f));
-                    da[dp++] = (byte)(0x80 | (uc & 0x3f));
-                    sp++;  // 2 chars
-                } else {
-                    // 3 bytes, 16 bits
-                    if (dl - dp < 3)
-                        return overflow(src, sp, dst, dp);
-                    da[dp++] = (byte)(0xe0 | ((c >> 12)));
-                    da[dp++] = (byte)(0x80 | ((c >>  6) & 0x3f));
-                    da[dp++] = (byte)(0x80 | (c & 0x3f));
-                }
-                sp++;
-            }
-            updatePositions(src, sp, dst, dp);
-            return CoderResult.UNDERFLOW;
-        }
-
-        private CoderResult encodeBufferLoop(CharBuffer src,
-                                             ByteBuffer dst)
-        {
-            int mark = src.position();
-            while (src.hasRemaining()) {
-                char c = src.get();
-                if (c < 0x80) {
-                    // Have at most seven bits
-                    if (!dst.hasRemaining())
-                        return overflow(src, mark);
-                    dst.put((byte)c);
-                } else if (c < 0x800) {
-                    // 2 bytes, 11 bits
-                    if (dst.remaining() < 2)
-                        return overflow(src, mark);
-                    dst.put((byte)(0xc0 | (c >> 6)));
-                    dst.put((byte)(0x80 | (c & 0x3f)));
-                } else if (Character.isSurrogate(c)) {
-                    // Have a surrogate pair
-                    if (sgp == null)
-                        sgp = new Surrogate.Parser();
-                    int uc = sgp.parse(c, src);
-                    if (uc < 0) {
-                        src.position(mark);
-                        return sgp.error();
-                    }
-                    if (dst.remaining() < 4)
-                        return overflow(src, mark);
-                    dst.put((byte)(0xf0 | ((uc >> 18))));
-                    dst.put((byte)(0x80 | ((uc >> 12) & 0x3f)));
-                    dst.put((byte)(0x80 | ((uc >>  6) & 0x3f)));
-                    dst.put((byte)(0x80 | (uc & 0x3f)));
-                    mark++;  // 2 chars
-                } else {
-                    // 3 bytes, 16 bits
-                    if (dst.remaining() < 3)
-                        return overflow(src, mark);
-                    dst.put((byte)(0xe0 | ((c >> 12))));
-                    dst.put((byte)(0x80 | ((c >>  6) & 0x3f)));
-                    dst.put((byte)(0x80 | (c & 0x3f)));
-                }
-                mark++;
-            }
-            src.position(mark);
-            return CoderResult.UNDERFLOW;
-        }
-
-        protected final CoderResult encodeLoop(CharBuffer src,
-                                               ByteBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return encodeArrayLoop(src, dst);
-            else
-                return encodeBufferLoop(src, dst);
-        }
-
-        // returns -1 if there is malformed char(s) and the
-        // "action" for malformed input is not REPLACE.
-        public int encode(char[] sa, int sp, int len, byte[] da) {
-            int sl = sp + len;
-            int dp = 0;
-            int dlASCII = dp + Math.min(len, da.length);
-
-            // ASCII only optimized loop
-            while (dp < dlASCII && sa[sp] < '\u0080')
-                da[dp++] = (byte) sa[sp++];
-
-            while (sp < sl) {
-                char c = sa[sp++];
-                if (c < 0x80) {
-                    // Have at most seven bits
-                    da[dp++] = (byte)c;
-                } else if (c < 0x800) {
-                    // 2 bytes, 11 bits
-                    da[dp++] = (byte)(0xc0 | (c >> 6));
-                    da[dp++] = (byte)(0x80 | (c & 0x3f));
-                } else if (Character.isSurrogate(c)) {
-                    if (sgp == null)
-                        sgp = new Surrogate.Parser();
-                    int uc = sgp.parse(c, sa, sp - 1, sl);
-                    if (uc < 0) {
-                        if (malformedInputAction() != CodingErrorAction.REPLACE)
-                            return -1;
-                        da[dp++] = replacement()[0];
-                    } else {
-                        da[dp++] = (byte)(0xf0 | ((uc >> 18)));
-                        da[dp++] = (byte)(0x80 | ((uc >> 12) & 0x3f));
-                        da[dp++] = (byte)(0x80 | ((uc >>  6) & 0x3f));
-                        da[dp++] = (byte)(0x80 | (uc & 0x3f));
-                        sp++;  // 2 chars
-                    }
-                } else {
-                    // 3 bytes, 16 bits
-                    da[dp++] = (byte)(0xe0 | ((c >> 12)));
-                    da[dp++] = (byte)(0x80 | ((c >>  6) & 0x3f));
-                    da[dp++] = (byte)(0x80 | (c & 0x3f));
-                }
-            }
-            return dp;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/Unicode.java b/ojluni/src/main/java/sun/nio/cs/Unicode.java
deleted file mode 100755
index ed8d677..0000000
--- a/ojluni/src/main/java/sun/nio/cs/Unicode.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.charset.Charset;
-
-abstract class Unicode extends Charset
-    implements HistoricallyNamedCharset
-{
-    public Unicode(String name, String[] aliases) {
-        super(name, aliases);
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs instanceof US_ASCII)
-                || (cs instanceof ISO_8859_1)
-                || (cs instanceof ISO_8859_15)
-                || (cs instanceof MS1252)
-                || (cs instanceof UTF_8)
-                || (cs instanceof UTF_16)
-                || (cs instanceof UTF_16BE)
-                || (cs instanceof UTF_16LE)
-                || (cs instanceof UTF_16LE_BOM)
-                || (cs.name().equals("GBK"))
-                || (cs.name().equals("GB18030"))
-                || (cs.name().equals("ISO-8859-2"))
-                || (cs.name().equals("ISO-8859-3"))
-                || (cs.name().equals("ISO-8859-4"))
-                || (cs.name().equals("ISO-8859-5"))
-                || (cs.name().equals("ISO-8859-6"))
-                || (cs.name().equals("ISO-8859-7"))
-                || (cs.name().equals("ISO-8859-8"))
-                || (cs.name().equals("ISO-8859-9"))
-                || (cs.name().equals("ISO-8859-13"))
-                || (cs.name().equals("JIS_X0201"))
-                || (cs.name().equals("x-JIS0208"))
-                || (cs.name().equals("JIS_X0212-1990"))
-                || (cs.name().equals("GB2312"))
-                || (cs.name().equals("EUC-KR"))
-                || (cs.name().equals("x-EUC-TW"))
-                || (cs.name().equals("EUC-JP"))
-                || (cs.name().equals("x-euc-jp-linux"))
-                || (cs.name().equals("KOI8-R"))
-                || (cs.name().equals("TIS-620"))
-                || (cs.name().equals("x-ISCII91"))
-                || (cs.name().equals("windows-1251"))
-                || (cs.name().equals("windows-1253"))
-                || (cs.name().equals("windows-1254"))
-                || (cs.name().equals("windows-1255"))
-                || (cs.name().equals("windows-1256"))
-                || (cs.name().equals("windows-1257"))
-                || (cs.name().equals("windows-1258"))
-                || (cs.name().equals("windows-932"))
-                || (cs.name().equals("x-mswin-936"))
-                || (cs.name().equals("x-windows-949"))
-                || (cs.name().equals("x-windows-950"))
-                || (cs.name().equals("windows-31j"))
-                || (cs.name().equals("Big5"))
-                || (cs.name().equals("Big5-HKSCS"))
-                || (cs.name().equals("x-MS950-HKSCS"))
-                || (cs.name().equals("ISO-2022-JP"))
-                || (cs.name().equals("ISO-2022-KR"))
-                || (cs.name().equals("x-ISO-2022-CN-CNS"))
-                || (cs.name().equals("x-ISO-2022-CN-GB"))
-                || (cs.name().equals("Big5-HKSCS"))
-                || (cs.name().equals("x-Johab"))
-                || (cs.name().equals("Shift_JIS")));
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/UnicodeDecoder.java b/ojluni/src/main/java/sun/nio/cs/UnicodeDecoder.java
deleted file mode 100755
index c3509d7..0000000
--- a/ojluni/src/main/java/sun/nio/cs/UnicodeDecoder.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CoderResult;
-import java.nio.charset.CharacterCodingException;
-import java.nio.charset.MalformedInputException;
-
-
-abstract class UnicodeDecoder extends CharsetDecoder {
-
-    protected static final char BYTE_ORDER_MARK = (char) 0xfeff;
-    protected static final char REVERSED_MARK = (char) 0xfffe;
-
-    protected static final int NONE = 0;
-    protected static final int BIG = 1;
-    protected static final int LITTLE = 2;
-
-    private final int expectedByteOrder;
-    private int currentByteOrder;
-    private int defaultByteOrder = BIG;
-
-    public UnicodeDecoder(Charset cs, int bo) {
-        super(cs, 0.5f, 1.0f);
-        expectedByteOrder = currentByteOrder = bo;
-    }
-
-    public UnicodeDecoder(Charset cs, int bo, int defaultBO) {
-        this(cs, bo);
-        defaultByteOrder = defaultBO;
-    }
-
-    private char decode(int b1, int b2) {
-        if (currentByteOrder == BIG)
-            return (char)((b1 << 8) | b2);
-        else
-            return (char)((b2 << 8) | b1);
-    }
-
-    protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-        int mark = src.position();
-
-        try {
-            while (src.remaining() > 1) {
-                int b1 = src.get() & 0xff;
-                int b2 = src.get() & 0xff;
-
-                // Byte Order Mark interpretation
-                if (currentByteOrder == NONE) {
-                    char c = (char)((b1 << 8) | b2);
-                    if (c == BYTE_ORDER_MARK) {
-                        currentByteOrder = BIG;
-                        mark += 2;
-                        continue;
-                    } else if (c == REVERSED_MARK) {
-                        currentByteOrder = LITTLE;
-                        mark += 2;
-                        continue;
-                    } else {
-                        currentByteOrder = defaultByteOrder;
-                        // FALL THROUGH to process b1, b2 normally
-                    }
-                }
-
-                char c = decode(b1, b2);
-
-                if (c == REVERSED_MARK) {
-                    // A reversed BOM cannot occur within middle of stream
-                    return CoderResult.malformedForLength(2);
-                }
-
-                // Surrogates
-                if (Character.isSurrogate(c)) {
-                    if (Character.isHighSurrogate(c)) {
-                        if (src.remaining() < 2)
-                            return CoderResult.UNDERFLOW;
-                        char c2 = decode(src.get() & 0xff, src.get() & 0xff);
-                        if (!Character.isLowSurrogate(c2))
-                            return CoderResult.malformedForLength(4);
-                        if (dst.remaining() < 2)
-                            return CoderResult.OVERFLOW;
-                        mark += 4;
-                        dst.put(c);
-                        dst.put(c2);
-                        continue;
-                    }
-                    // Unpaired low surrogate
-                    return CoderResult.malformedForLength(2);
-                }
-
-                if (!dst.hasRemaining())
-                    return CoderResult.OVERFLOW;
-                mark += 2;
-                dst.put(c);
-
-            }
-            return CoderResult.UNDERFLOW;
-
-        } finally {
-            src.position(mark);
-        }
-    }
-
-    protected void implReset() {
-        currentByteOrder = expectedByteOrder;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/UnicodeEncoder.java b/ojluni/src/main/java/sun/nio/cs/UnicodeEncoder.java
deleted file mode 100755
index 7b34fb2..0000000
--- a/ojluni/src/main/java/sun/nio/cs/UnicodeEncoder.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (c) 2000, 2010, 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.
- */
-
-package sun.nio.cs;
-
-import java.nio.*;
-import java.nio.charset.*;
-
-/**
- * Base class for different flavors of UTF-16 encoders
- */
-public abstract class UnicodeEncoder extends CharsetEncoder {
-
-    protected static final char BYTE_ORDER_MARK = '\uFEFF';
-    protected static final char REVERSED_MARK = '\uFFFE';
-
-    protected static final int BIG = 0;
-    protected static final int LITTLE = 1;
-
-    private int byteOrder;      /* Byte order in use */
-    private boolean usesMark;   /* Write an initial BOM */
-    private boolean needsMark;
-
-    protected UnicodeEncoder(Charset cs, int bo, boolean m) {
-        super(cs, 2.0f,
-              // Four bytes max if you need a BOM
-              m ? 4.0f : 2.0f,
-              // Replacement depends upon byte order
-              ((bo == BIG)
-               ? new byte[] { (byte)0xff, (byte)0xfd }
-               : new byte[] { (byte)0xfd, (byte)0xff }));
-        usesMark = needsMark = m;
-        byteOrder = bo;
-    }
-
-    private void put(char c, ByteBuffer dst) {
-        if (byteOrder == BIG) {
-            dst.put((byte)(c >> 8));
-            dst.put((byte)(c & 0xff));
-        } else {
-            dst.put((byte)(c & 0xff));
-            dst.put((byte)(c >> 8));
-        }
-    }
-
-    private final Surrogate.Parser sgp = new Surrogate.Parser();
-
-    protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-        int mark = src.position();
-
-        if (needsMark && src.hasRemaining()) {
-            if (dst.remaining() < 2)
-                return CoderResult.OVERFLOW;
-            put(BYTE_ORDER_MARK, dst);
-            needsMark = false;
-        }
-        try {
-            while (src.hasRemaining()) {
-                char c = src.get();
-                if (!Character.isSurrogate(c)) {
-                    if (dst.remaining() < 2)
-                        return CoderResult.OVERFLOW;
-                    mark++;
-                    put(c, dst);
-                    continue;
-                }
-                int d = sgp.parse(c, src);
-                if (d < 0)
-                    return sgp.error();
-                if (dst.remaining() < 4)
-                    return CoderResult.OVERFLOW;
-                mark += 2;
-                put(Character.highSurrogate(d), dst);
-                put(Character.lowSurrogate(d), dst);
-            }
-            return CoderResult.UNDERFLOW;
-        } finally {
-            src.position(mark);
-        }
-    }
-
-    protected void implReset() {
-        needsMark = usesMark;
-    }
-
-    public boolean canEncode(char c) {
-        return ! Character.isSurrogate(c);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/Big5_HKSCS.java b/ojluni/src/main/java/sun/nio/cs/ext/Big5_HKSCS.java
deleted file mode 100755
index 7bed42e..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/Big5_HKSCS.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2010, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import sun.nio.cs.HistoricallyNamedCharset;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class Big5_HKSCS extends Charset implements HistoricallyNamedCharset
-{
-    public Big5_HKSCS() {
-        super("Big5-HKSCS", ExtendedCharsets.aliasesFor("Big5-HKSCS"));
-    }
-
-    public String historicalName() {
-        return "Big5_HKSCS";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof Big5)
-                || (cs instanceof Big5_HKSCS));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    static class Decoder extends HKSCS.Decoder {
-        private static DoubleByte.Decoder big5 =
-            (DoubleByte.Decoder)new Big5().newDecoder();
-
-        private static char[][] b2cBmp = new char[0x100][];
-        private static char[][] b2cSupp = new char[0x100][];
-        static {
-            initb2c(b2cBmp, HKSCSMapping.b2cBmpStr);
-            initb2c(b2cSupp, HKSCSMapping.b2cSuppStr);
-        }
-
-        private Decoder(Charset cs) {
-            super(cs, big5, b2cBmp, b2cSupp);
-        }
-    }
-
-    static class Encoder extends HKSCS.Encoder {
-        private static DoubleByte.Encoder big5 =
-            (DoubleByte.Encoder)new Big5().newEncoder();
-
-        static char[][] c2bBmp = new char[0x100][];
-        static char[][] c2bSupp = new char[0x100][];
-        static {
-            initc2b(c2bBmp, HKSCSMapping.b2cBmpStr, HKSCSMapping.pua);
-            initc2b(c2bSupp, HKSCSMapping.b2cSuppStr, null);
-        }
-
-        private Encoder(Charset cs) {
-            super(cs, big5, c2bBmp, c2bSupp);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/Big5_HKSCS_2001.java b/ojluni/src/main/java/sun/nio/cs/ext/Big5_HKSCS_2001.java
deleted file mode 100755
index 1514e2e..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/Big5_HKSCS_2001.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2002, 2010, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import sun.nio.cs.HistoricallyNamedCharset;
-
-public class Big5_HKSCS_2001 extends Charset
-{
-    public Big5_HKSCS_2001() {
-        super("x-Big5-HKSCS-2001", ExtendedCharsets.aliasesFor("x-Big5-HKSCS-2001"));
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof Big5)
-                || (cs instanceof Big5_HKSCS_2001));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    private static class Decoder extends HKSCS.Decoder {
-        private static DoubleByte.Decoder big5 =
-            (DoubleByte.Decoder)new Big5().newDecoder();
-
-        private static char[][] b2cBmp = new char[0x100][];
-        private static char[][] b2cSupp = new char[0x100][];
-        static {
-            initb2c(b2cBmp, HKSCS2001Mapping.b2cBmpStr);
-            initb2c(b2cSupp, HKSCS2001Mapping.b2cSuppStr);
-        }
-
-        private Decoder(Charset cs) {
-            super(cs, big5, b2cBmp, b2cSupp);
-        }
-    }
-
-    private static class Encoder extends HKSCS.Encoder {
-        private static DoubleByte.Encoder big5 =
-            (DoubleByte.Encoder)new Big5().newEncoder();
-
-        static char[][] c2bBmp = new char[0x100][];
-        static char[][] c2bSupp = new char[0x100][];
-        static {
-            initc2b(c2bBmp, HKSCS2001Mapping.b2cBmpStr,
-                    HKSCS2001Mapping.pua);
-            initc2b(c2bSupp, HKSCS2001Mapping.b2cSuppStr, null);
-        }
-
-        private Encoder(Charset cs) {
-            super(cs, big5, c2bBmp, c2bSupp);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/Big5_Solaris.java b/ojluni/src/main/java/sun/nio/cs/ext/Big5_Solaris.java
deleted file mode 100755
index bf98320..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/Big5_Solaris.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 2004, 2010, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import sun.nio.cs.HistoricallyNamedCharset;
-import java.util.Arrays;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class Big5_Solaris extends Charset implements HistoricallyNamedCharset
-{
-    public Big5_Solaris() {
-        super("x-Big5-Solaris", ExtendedCharsets.aliasesFor("x-Big5-Solaris"));
-    }
-
-    public String historicalName() {
-        return "Big5_Solaris";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof Big5)
-                || (cs instanceof Big5_Solaris));
-    }
-
-    public CharsetDecoder newDecoder() {
-        initb2c();
-        return new  DoubleByte.Decoder(this, b2c, b2cSB, 0x40, 0xfe);
-    }
-
-    public CharsetEncoder newEncoder() {
-        initc2b();
-        return new DoubleByte.Encoder(this, c2b, c2bIndex);
-    }
-
-    static char[][] b2c;
-    static char[] b2cSB;
-    private static volatile boolean b2cInitialized = false;
-
-    static void initb2c() {
-        if (b2cInitialized)
-            return;
-        synchronized (Big5_Solaris.class) {
-            if (b2cInitialized)
-                return;
-            Big5.initb2c();
-            b2c = Big5.b2c.clone();
-            // Big5 Solaris implementation has 7 additional mappings
-            int[] sol = new int[] {
-                0xF9D6, 0x7881,
-                0xF9D7, 0x92B9,
-                0xF9D8, 0x88CF,
-                0xF9D9, 0x58BB,
-                0xF9DA, 0x6052,
-                0xF9DB, 0x7CA7,
-                0xF9DC, 0x5AFA };
-            if (b2c[0xf9] == DoubleByte.B2C_UNMAPPABLE) {
-                b2c[0xf9] = new char[0xfe - 0x40 + 1];
-                Arrays.fill(b2c[0xf9], UNMAPPABLE_DECODING);
-            }
-
-            for (int i = 0; i < sol.length;) {
-                b2c[0xf9][sol[i++] & 0xff - 0x40] = (char)sol[i++];
-            }
-            b2cSB = Big5.b2cSB;
-            b2cInitialized = true;
-        }
-    }
-
-    static char[] c2b;
-    static char[] c2bIndex;
-    private static volatile boolean c2bInitialized = false;
-
-    static void initc2b() {
-        if (c2bInitialized)
-            return;
-        synchronized (Big5_Solaris.class) {
-            if (c2bInitialized)
-                return;
-            Big5.initc2b();
-            c2b = Big5.c2b.clone();
-            c2bIndex = Big5.c2bIndex.clone();
-            int[] sol = new int[] {
-                0x7881, 0xF9D6,
-                0x92B9, 0xF9D7,
-                0x88CF, 0xF9D8,
-                0x58BB, 0xF9D9,
-                0x6052, 0xF9DA,
-                0x7CA7, 0xF9DB,
-                0x5AFA, 0xF9DC };
-
-            for (int i = 0; i < sol.length;) {
-                int c = sol[i++];
-                // no need to check c2bIndex[c >>8], we know it points
-                // to the appropriate place.
-                c2b[c2bIndex[c >> 8] + (c & 0xff)] = (char)sol[i++];
-            }
-            c2bInitialized = true;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/COMPOUND_TEXT.java b/ojluni/src/main/java/sun/nio/cs/ext/COMPOUND_TEXT.java
deleted file mode 100755
index 06d5997..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/COMPOUND_TEXT.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-
-public class COMPOUND_TEXT extends Charset {
-    public COMPOUND_TEXT () {
-        super("x-COMPOUND_TEXT",
-              ExtendedCharsets.aliasesFor("x-COMPOUND_TEXT"));
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new COMPOUND_TEXT_Encoder(this);
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new COMPOUND_TEXT_Decoder(this);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof COMPOUND_TEXT;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/COMPOUND_TEXT_Decoder.java b/ojluni/src/main/java/sun/nio/cs/ext/COMPOUND_TEXT_Decoder.java
deleted file mode 100755
index b47097a..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/COMPOUND_TEXT_Decoder.java
+++ /dev/null
@@ -1,714 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.nio.cs.ext;
-import java.io.ByteArrayOutputStream;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.*;
-
-/**
- * An algorithmic conversion from COMPOUND_TEXT to Unicode.
- */
-
-public class COMPOUND_TEXT_Decoder extends CharsetDecoder {
-
-    private static final int NORMAL_BYTES             =  0;
-    private static final int NONSTANDARD_BYTES        =  1;
-    private static final int VERSION_SEQUENCE_V       =  2;
-    private static final int VERSION_SEQUENCE_TERM    =  3;
-    private static final int ESCAPE_SEQUENCE          =  4;
-    private static final int CHARSET_NGIIF            =  5;
-    private static final int CHARSET_NLIIF            =  6;
-    private static final int CHARSET_NLIF             =  7;
-    private static final int CHARSET_NRIIF            =  8;
-    private static final int CHARSET_NRIF             =  9;
-    private static final int CHARSET_NONSTANDARD_FOML = 10;
-    private static final int CHARSET_NONSTANDARD_OML  = 11;
-    private static final int CHARSET_NONSTANDARD_ML   = 12;
-    private static final int CHARSET_NONSTANDARD_L    = 13;
-    private static final int CHARSET_NONSTANDARD      = 14;
-    private static final int CHARSET_LIIF             = 15;
-    private static final int CHARSET_LIF              = 16;
-    private static final int CHARSET_RIIF             = 17;
-    private static final int CHARSET_RIF              = 18;
-    private static final int CONTROL_SEQUENCE_PIF     = 19;
-    private static final int CONTROL_SEQUENCE_IF      = 20;
-    private static final int EXTENSION_ML             = 21;
-    private static final int EXTENSION_L              = 22;
-    private static final int EXTENSION                = 23;
-    private static final int ESCAPE_SEQUENCE_OTHER    = 24;
-
-    private static final String ERR_LATIN1 = "ISO8859_1 unsupported";
-    private static final String ERR_ILLSTATE = "Illegal state";
-    private static final String ERR_ESCBYTE =
-        "Illegal byte in 0x1B escape sequence";
-    private static final String ERR_ENCODINGBYTE =
-        "Illegal byte in non-standard character set name";
-    private static final String ERR_CTRLBYTE =
-        "Illegal byte in 0x9B control sequence";
-    private static final String ERR_CTRLPI =
-        "P following I in 0x9B control sequence";
-    private static final String ERR_VERSTART =
-        "Versioning escape sequence can only appear at start of byte stream";
-    private static final String ERR_VERMANDATORY =
-        "Cannot parse mandatory extensions";
-    private static final String ERR_ENCODING = "Unknown encoding: ";
-    private static final String ERR_FLUSH =
-        "Escape sequence, control sequence, or ML extension not terminated";
-
-    private int state = NORMAL_BYTES ;
-    private int ext_count, ext_offset;
-    private boolean versionSequenceAllowed = true;
-    private byte[] byteBuf = new byte[1];
-    private ByteBuffer inBB = ByteBuffer.allocate(16);
-    private ByteArrayOutputStream queue = new ByteArrayOutputStream(),
-        encodingQueue = new ByteArrayOutputStream();
-
-    private CharsetDecoder glDecoder, grDecoder, nonStandardDecoder,
-        lastDecoder;
-    private boolean glHigh = false, grHigh = true;
-
-
-    public COMPOUND_TEXT_Decoder(Charset cs) {
-        super(cs, 1.0f, 1.0f);
-        try {
-            // Initial state in ISO 2022 designates Latin-1 charset.
-            glDecoder = Charset.forName("ASCII").newDecoder();
-            grDecoder = Charset.forName("ISO8859_1").newDecoder();
-        } catch (IllegalArgumentException e) {
-            error(ERR_LATIN1);
-        }
-        initDecoder(glDecoder);
-        initDecoder(grDecoder);
-    }
-
-    protected CoderResult decodeLoop(ByteBuffer src, CharBuffer des) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        byte[] input = src.array();
-        int inOff = src.arrayOffset() + src.position();
-        int inEnd = src.arrayOffset() + src.limit();
-
-        try {
-            while (inOff < inEnd && cr.isUnderflow()) {
-                // Byte parsing is done with shorts instead of bytes because
-                // Java bytes are signed, while COMPOUND_TEXT bytes are not. If
-                // we used the Java byte type, the > and < tests during parsing
-                // would not work correctly.
-                cr = handleByte((short)(input[inOff] & 0xFF), des);
-                inOff++;
-            }
-            return cr;
-        } finally {
-            src.position(inOff - src.arrayOffset());
-        }
-    }
-
-    private CoderResult handleByte(short newByte, CharBuffer cb) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        switch (state) {
-        case NORMAL_BYTES:
-            cr= normalBytes(newByte, cb);
-            break;
-        case NONSTANDARD_BYTES:
-            cr = nonStandardBytes(newByte, cb);
-            break;
-        case VERSION_SEQUENCE_V:
-        case VERSION_SEQUENCE_TERM:
-            cr = versionSequence(newByte);
-            break;
-        case ESCAPE_SEQUENCE:
-            cr = escapeSequence(newByte);
-            break;
-        case CHARSET_NGIIF:
-            cr = charset94N(newByte);
-            break;
-        case CHARSET_NLIIF:
-        case CHARSET_NLIF:
-            cr = charset94NL(newByte, cb);
-            break;
-        case CHARSET_NRIIF:
-        case CHARSET_NRIF:
-            cr = charset94NR(newByte, cb);
-            break;
-        case CHARSET_NONSTANDARD_FOML:
-        case CHARSET_NONSTANDARD_OML:
-        case CHARSET_NONSTANDARD_ML:
-        case CHARSET_NONSTANDARD_L:
-        case CHARSET_NONSTANDARD:
-            cr = charsetNonStandard(newByte, cb);
-            break;
-        case CHARSET_LIIF:
-        case CHARSET_LIF:
-            cr = charset9496L(newByte, cb);
-            break;
-        case CHARSET_RIIF:
-        case CHARSET_RIF:
-            cr = charset9496R(newByte, cb);
-            break;
-        case CONTROL_SEQUENCE_PIF:
-        case CONTROL_SEQUENCE_IF:
-            cr = controlSequence(newByte);
-            break;
-        case EXTENSION_ML:
-        case EXTENSION_L:
-        case EXTENSION:
-            cr = extension(newByte);
-            break;
-        case ESCAPE_SEQUENCE_OTHER:
-            cr = escapeSequenceOther(newByte);
-            break;
-        default:
-            error(ERR_ILLSTATE);
-        }
-        return cr;
-    }
-
-    private CoderResult normalBytes(short newByte, CharBuffer cb) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        if ((newByte >= 0x00 && newByte <= 0x1F) || // C0
-            (newByte >= 0x80 && newByte <= 0x9F)) { // C1
-            char newChar;
-
-            switch (newByte) {
-            case 0x1B:
-                state = ESCAPE_SEQUENCE;
-                queue.write(newByte);
-                return cr;
-            case 0x9B:
-                state = CONTROL_SEQUENCE_PIF;
-                versionSequenceAllowed = false;
-                queue.write(newByte);
-                return cr;
-            case 0x09:
-                versionSequenceAllowed = false;
-                newChar = '\t';
-                break;
-            case 0x0A:
-                versionSequenceAllowed = false;
-                newChar = '\n';
-                break;
-            default:
-                versionSequenceAllowed = false;
-                return cr;
-            }
-            if (!cb.hasRemaining())
-                return CoderResult.OVERFLOW;
-            else
-                cb.put(newChar);
-        } else {
-            CharsetDecoder decoder;
-            boolean high;
-            versionSequenceAllowed = false;
-
-            if (newByte >= 0x20 && newByte <= 0x7F) {
-                decoder = glDecoder;
-                high = glHigh;
-            } else /* if (newByte >= 0xA0 && newByte <= 0xFF) */ {
-                decoder = grDecoder;
-                high = grHigh;
-            }
-            if (lastDecoder != null && decoder != lastDecoder) {
-                cr = flushDecoder(lastDecoder, cb);
-            }
-            lastDecoder = decoder;
-
-            if (decoder != null) {
-                byte b = (byte)newByte;
-                if (high) {
-                    b |= 0x80;
-                } else {
-                    b &= 0x7F;
-                }
-                inBB.put(b);
-                inBB.flip();
-                cr = decoder.decode(inBB, cb, false);
-                if (!inBB.hasRemaining() || cr.isMalformed()) {
-                    inBB.clear();
-                } else {
-                  int pos = inBB.limit();
-                  inBB.clear();
-                  inBB.position(pos);
-                }
-            } else if (cb.remaining() < replacement().length()) {
-                cb.put(replacement());
-            } else {
-                return CoderResult.OVERFLOW;
-            }
-        }
-        return cr;
-    }
-
-    private CoderResult nonStandardBytes(short newByte, CharBuffer cb)
-    {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        if (nonStandardDecoder != null) {
-            //byteBuf[0] = (byte)newByte;
-            inBB.put((byte)newByte);
-            inBB.flip();
-            cr = nonStandardDecoder.decode(inBB, cb, false);
-            if (!inBB.hasRemaining()) {
-                inBB.clear();
-            } else {
-                int pos = inBB.limit();
-                inBB.clear();
-                inBB.position(pos);
-            }
-        } else if (cb.remaining() < replacement().length()) {
-            cb.put(replacement());
-        } else {
-            return CoderResult.OVERFLOW;
-        }
-
-        ext_offset++;
-        if (ext_offset >= ext_count) {
-            ext_offset = ext_count = 0;
-            state = NORMAL_BYTES;
-            cr = flushDecoder(nonStandardDecoder, cb);
-            nonStandardDecoder = null;
-        }
-        return cr;
-    }
-
-    private CoderResult escapeSequence(short newByte) {
-        switch (newByte) {
-        case 0x23:
-            state = VERSION_SEQUENCE_V;
-            break;
-        case 0x24:
-            state = CHARSET_NGIIF;
-            versionSequenceAllowed = false;
-            break;
-        case 0x25:
-            state = CHARSET_NONSTANDARD_FOML;
-            versionSequenceAllowed = false;
-            break;
-        case 0x28:
-            state = CHARSET_LIIF;
-            versionSequenceAllowed = false;
-            break;
-        case 0x29:
-        case 0x2D:
-            state = CHARSET_RIIF;
-            versionSequenceAllowed = false;
-            break;
-        default:
-            // escapeSequenceOther will write to queue if appropriate
-            return escapeSequenceOther(newByte);
-        }
-
-        queue.write(newByte);
-        return CoderResult.UNDERFLOW;
-    }
-
-    /**
-     * Test for unknown, but valid, escape sequences.
-     */
-    private CoderResult escapeSequenceOther(short newByte) {
-        if (newByte >= 0x20 && newByte <= 0x2F) {
-            // {I}
-            state = ESCAPE_SEQUENCE_OTHER;
-            versionSequenceAllowed = false;
-            queue.write(newByte);
-        } else if (newByte >= 0x30 && newByte <= 0x7E) {
-            // F -- end of sequence
-            state = NORMAL_BYTES;
-            versionSequenceAllowed = false;
-            queue.reset();
-        } else {
-            return malformedInput(ERR_ESCBYTE);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    /**
-     * Parses directionality, as well as unknown, but valid, control sequences.
-     */
-    private CoderResult controlSequence(short newByte) {
-        if (newByte >= 0x30 && newByte <= 0x3F) {
-            // {P}
-            if (state == CONTROL_SEQUENCE_IF) {
-                // P no longer allowed
-                return malformedInput(ERR_CTRLPI);
-            }
-            queue.write(newByte);
-        } else if (newByte >= 0x20 && newByte <= 0x2F) {
-            // {I}
-            state = CONTROL_SEQUENCE_IF;
-            queue.write(newByte);
-        } else if (newByte >= 0x40 && newByte <= 0x7E) {
-            // F -- end of sequence
-            state = NORMAL_BYTES;
-            queue.reset();
-        } else {
-            return malformedInput(ERR_CTRLBYTE);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult versionSequence(short newByte) {
-        if (state == VERSION_SEQUENCE_V) {
-            if (newByte >= 0x20 && newByte <= 0x2F) {
-                state = VERSION_SEQUENCE_TERM;
-                queue.write(newByte);
-            } else {
-                return escapeSequenceOther(newByte);
-            }
-        } else /* if (state == VERSION_SEQUENCE_TERM) */ {
-            switch (newByte) {
-            case 0x30:
-                if (!versionSequenceAllowed) {
-                    return malformedInput(ERR_VERSTART);
-                }
-
-                // OK to ignore extensions
-                versionSequenceAllowed = false;
-                state = NORMAL_BYTES;
-                queue.reset();
-                break;
-            case 0x31:
-                return malformedInput((versionSequenceAllowed)
-                               ? ERR_VERMANDATORY : ERR_VERSTART);
-            default:
-                return escapeSequenceOther(newByte);
-            }
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult charset94N(short newByte) {
-        switch (newByte) {
-        case 0x28:
-            state = CHARSET_NLIIF;
-            break;
-        case 0x29:
-            state = CHARSET_NRIIF;
-            break;
-        default:
-            // escapeSequenceOther will write byte if appropriate
-            return escapeSequenceOther(newByte);
-        }
-
-        queue.write(newByte);
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult charset94NL(short newByte, CharBuffer cb) {
-        if (newByte >= 0x21 &&
-            newByte <= (state == CHARSET_NLIIF ? 0x23 : 0x2F)) {
-            // {I}
-            state = CHARSET_NLIF;
-            queue.write(newByte);
-        } else if (newByte >= 0x40 && newByte <= 0x7E) {
-            // F
-            return switchDecoder(newByte, cb);
-        } else {
-            return escapeSequenceOther(newByte);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult charset94NR(short newByte, CharBuffer cb)
-    {
-        if (newByte >= 0x21 &&
-            newByte <= (state == CHARSET_NRIIF ? 0x23 : 0x2F)) {
-            // {I}
-            state = CHARSET_NRIF;
-            queue.write(newByte);
-        } else if (newByte >= 0x40 && newByte <= 0x7E) {
-            // F
-            return switchDecoder(newByte, cb);
-        } else {
-            return escapeSequenceOther(newByte);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult charset9496L(short newByte, CharBuffer cb) {
-        if (newByte >= 0x21 &&
-            newByte <= (state == CHARSET_LIIF ? 0x23 : 0x2F)) {
-            // {I}
-            state = CHARSET_LIF;
-            queue.write(newByte);
-            return CoderResult.UNDERFLOW;
-        } else if (newByte >= 0x40 && newByte <= 0x7E) {
-            // F
-            return switchDecoder(newByte, cb);
-        } else {
-            return escapeSequenceOther(newByte);
-        }
-    }
-
-    private CoderResult charset9496R(short newByte, CharBuffer cb) {
-        if (newByte >= 0x21 &&
-            newByte <= (state == CHARSET_RIIF ? 0x23 : 0x2F)) {
-            // {I}
-            state = CHARSET_RIF;
-            queue.write(newByte);
-            return CoderResult.UNDERFLOW;
-        } else if (newByte >= 0x40 && newByte <= 0x7E) {
-            // F
-            return switchDecoder(newByte, cb);
-        } else {
-            return escapeSequenceOther(newByte);
-        }
-    }
-
-    private CoderResult charsetNonStandard(short newByte, CharBuffer cb) {
-        switch (state) {
-        case CHARSET_NONSTANDARD_FOML:
-            if (newByte == 0x2F) {
-                state = CHARSET_NONSTANDARD_OML;
-                queue.write(newByte);
-            } else {
-                return escapeSequenceOther(newByte);
-            }
-            break;
-        case CHARSET_NONSTANDARD_OML:
-            if (newByte >= 0x30 && newByte <= 0x34) {
-                state = CHARSET_NONSTANDARD_ML;
-                queue.write(newByte);
-            } else if (newByte >= 0x35 && newByte <= 0x3F) {
-                state = EXTENSION_ML;
-                queue.write(newByte);
-            } else {
-                return escapeSequenceOther(newByte);
-            }
-            break;
-        case CHARSET_NONSTANDARD_ML:
-            ext_count = (newByte & 0x7F) * 0x80;
-            state = CHARSET_NONSTANDARD_L;
-            break;
-        case CHARSET_NONSTANDARD_L:
-            ext_count = ext_count + (newByte & 0x7F);
-            state = (ext_count > 0) ? CHARSET_NONSTANDARD : NORMAL_BYTES;
-            break;
-        case CHARSET_NONSTANDARD:
-            if (newByte == 0x3F || newByte == 0x2A) {
-                queue.reset(); // In this case, only current byte is bad.
-                return malformedInput(ERR_ENCODINGBYTE);
-            }
-            ext_offset++;
-            if (ext_offset >= ext_count) {
-                ext_offset = ext_count = 0;
-                state = NORMAL_BYTES;
-                queue.reset();
-                encodingQueue.reset();
-            } else if (newByte == 0x02) {
-                // encoding name terminator
-                return switchDecoder((short)0, cb);
-            } else {
-                encodingQueue.write(newByte);
-            }
-            break;
-        default:
-            error(ERR_ILLSTATE);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult extension(short newByte) {
-        switch (state) {
-        case EXTENSION_ML:
-            ext_count = (newByte & 0x7F) * 0x80;
-            state = EXTENSION_L;
-            break;
-        case EXTENSION_L:
-            ext_count = ext_count + (newByte & 0x7F);
-            state = (ext_count > 0) ? EXTENSION : NORMAL_BYTES;
-            break;
-        case EXTENSION:
-            // Consume 'count' bytes. Don't bother putting them on the queue.
-            // There may be too many and we can't do anything with them anyway.
-            ext_offset++;
-            if (ext_offset >= ext_count) {
-                ext_offset = ext_count = 0;
-                state = NORMAL_BYTES;
-                queue.reset();
-            }
-            break;
-        default:
-            error(ERR_ILLSTATE);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    /**
-     * Preconditions:
-     *   1. 'queue' contains ControlSequence.escSequence
-     *   2. 'encodingQueue' contains ControlSequence.encoding
-     */
-    private CoderResult switchDecoder(short lastByte, CharBuffer cb) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        CharsetDecoder decoder = null;
-        boolean high = false;
-        byte[] escSequence;
-        byte[] encoding = null;
-
-        if (lastByte != 0) {
-            queue.write(lastByte);
-        }
-
-        escSequence = queue.toByteArray();
-        queue.reset();
-
-        if (state == CHARSET_NONSTANDARD) {
-            encoding = encodingQueue.toByteArray();
-            encodingQueue.reset();
-            decoder = CompoundTextSupport.
-                getNonStandardDecoder(escSequence, encoding);
-        } else {
-            decoder = CompoundTextSupport.getStandardDecoder(escSequence);
-            high = CompoundTextSupport.getHighBit(escSequence);
-        }
-        if (decoder != null) {
-            initDecoder(decoder);
-        } else if (unmappableCharacterAction() == CodingErrorAction.REPORT) {
-            int badInputLength = 1;
-            if (encoding != null) {
-                badInputLength = encoding.length;
-            } else if (escSequence.length > 0) {
-                badInputLength = escSequence.length;
-            }
-            return CoderResult.unmappableForLength(badInputLength);
-        }
-
-        if (state == CHARSET_NLIIF || state == CHARSET_NLIF ||
-            state == CHARSET_LIIF || state == CHARSET_LIF)
-        {
-            if (lastDecoder == glDecoder) {
-                cr = flushDecoder(glDecoder, cb);
-            }
-            glDecoder = lastDecoder = decoder;
-            glHigh = high;
-            state = NORMAL_BYTES;
-        } else if (state == CHARSET_NRIIF || state == CHARSET_NRIF ||
-                   state == CHARSET_RIIF || state == CHARSET_RIF) {
-            if (lastDecoder == grDecoder) {
-                cr = flushDecoder(grDecoder, cb);
-            }
-            grDecoder = lastDecoder = decoder;
-            grHigh = high;
-            state = NORMAL_BYTES;
-        } else if (state == CHARSET_NONSTANDARD) {
-            if (lastDecoder != null) {
-                cr = flushDecoder(lastDecoder, cb);
-                lastDecoder = null;
-            }
-            nonStandardDecoder = decoder;
-            state = NONSTANDARD_BYTES;
-        } else {
-            error(ERR_ILLSTATE);
-        }
-        return cr;
-    }
-
-    private ByteBuffer fbb= ByteBuffer.allocate(0);
-    private CoderResult flushDecoder(CharsetDecoder dec, CharBuffer cb) {
-        dec.decode(fbb, cb, true);
-        CoderResult cr = dec.flush(cb);
-        dec.reset();  //reuse
-        return cr;
-    }
-
-    private CoderResult malformedInput(String msg) {
-        int badInputLength = queue.size() + 1 /* current byte */ ;
-        queue.reset();
-        //TBD: nowhere to put the msg in CoderResult
-        return CoderResult.malformedForLength(badInputLength);
-    }
-
-    private void error(String msg) {
-        // For now, throw InternalError. Convert to 'assert' keyword later.
-        throw new InternalError(msg);
-    }
-
-    protected CoderResult implFlush(CharBuffer out) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        if (lastDecoder != null)
-          cr = flushDecoder(lastDecoder, out);
-        if (state != NORMAL_BYTES)
-            //TBD message ERR_FLUSH;
-            cr = CoderResult.malformedForLength(0);
-        reset();
-        return cr;
-    }
-
-    /**
-     * Resets the decoder.
-     * Call this method to reset the decoder to its initial state
-     */
-    protected void implReset() {
-        state = NORMAL_BYTES;
-        ext_count = ext_offset = 0;
-        versionSequenceAllowed = true;
-        queue.reset();
-        encodingQueue.reset();
-        nonStandardDecoder = lastDecoder = null;
-        glHigh = false;
-        grHigh = true;
-        try {
-            // Initial state in ISO 2022 designates Latin-1 charset.
-            glDecoder = Charset.forName("ASCII").newDecoder();
-            grDecoder = Charset.forName("ISO8859_1").newDecoder();
-        } catch (IllegalArgumentException e) {
-            error(ERR_LATIN1);
-        }
-        initDecoder(glDecoder);
-        initDecoder(grDecoder);
-    }
-
-    protected void implOnMalformedInput(CodingErrorAction newAction) {
-        if (glDecoder != null)
-            glDecoder.onMalformedInput(newAction);
-        if (grDecoder != null)
-            grDecoder.onMalformedInput(newAction);
-        if (nonStandardDecoder != null)
-            nonStandardDecoder.onMalformedInput(newAction);
-    }
-
-    protected void implOnUnmappableCharacter(CodingErrorAction newAction) {
-        if (glDecoder != null)
-            glDecoder.onUnmappableCharacter(newAction);
-        if (grDecoder != null)
-            grDecoder.onUnmappableCharacter(newAction);
-        if (nonStandardDecoder != null)
-            nonStandardDecoder.onUnmappableCharacter(newAction);
-    }
-
-    protected void implReplaceWith(String newReplacement) {
-        if (glDecoder != null)
-            glDecoder.replaceWith(newReplacement);
-        if (grDecoder != null)
-            grDecoder.replaceWith(newReplacement);
-        if (nonStandardDecoder != null)
-            nonStandardDecoder.replaceWith(newReplacement);
-    }
-
-    private void initDecoder(CharsetDecoder dec) {
-        dec.onUnmappableCharacter(CodingErrorAction.REPLACE)
-            .replaceWith(replacement());
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/COMPOUND_TEXT_Encoder.java b/ojluni/src/main/java/sun/nio/cs/ext/COMPOUND_TEXT_Encoder.java
deleted file mode 100755
index 15e0f46..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/COMPOUND_TEXT_Encoder.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * Copyright (c) 2001, 2010, 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.
- */
-package sun.nio.cs.ext;
-
-import java.io.ByteArrayOutputStream;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.*;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-public class COMPOUND_TEXT_Encoder extends CharsetEncoder {
-
-    /**
-     * NOTE: The following four static variables should be used *only* for
-     * testing whether a encoder can encode a specific character. They
-     * cannot be used for actual encoding because they are shared across all
-     * COMPOUND_TEXT encoders and may be stateful.
-     */
-    private static final Map<String,CharsetEncoder> encodingToEncoderMap =
-      Collections.synchronizedMap(new HashMap<String,CharsetEncoder>(21, 1.0f));
-    private static final CharsetEncoder latin1Encoder;
-    private static final CharsetEncoder defaultEncoder;
-    private static final boolean defaultEncodingSupported;
-
-    static {
-        CharsetEncoder encoder = Charset.defaultCharset().newEncoder();
-        String encoding = encoder.charset().name();
-        if ("ISO8859_1".equals(encoding)) {
-            latin1Encoder = encoder;
-            defaultEncoder = encoder;
-            defaultEncodingSupported = true;
-        } else {
-            try {
-                latin1Encoder =
-                    Charset.forName("ISO8859_1").newEncoder();
-            } catch (IllegalArgumentException e) {
-                throw new ExceptionInInitializerError
-                    ("ISO8859_1 unsupported");
-            }
-            defaultEncoder = encoder;
-            defaultEncodingSupported = CompoundTextSupport.getEncodings().
-                contains(defaultEncoder.charset().name());
-        }
-    }
-
-    private CharsetEncoder encoder;
-    private char[] charBuf = new char[1];
-    private CharBuffer charbuf = CharBuffer.wrap(charBuf);
-    private ByteArrayOutputStream nonStandardCharsetBuffer;
-    private byte[] byteBuf;
-    private ByteBuffer bytebuf;
-    private int numNonStandardChars, nonStandardEncodingLen;
-
-    public COMPOUND_TEXT_Encoder(Charset cs) {
-        super(cs,
-              (float)(CompoundTextSupport.MAX_CONTROL_SEQUENCE_LEN + 2),
-              (float)(CompoundTextSupport.MAX_CONTROL_SEQUENCE_LEN + 2));
-        try {
-            encoder = Charset.forName("ISO8859_1").newEncoder();
-        } catch (IllegalArgumentException cannotHappen) {}
-        initEncoder(encoder);
-    }
-
-    protected CoderResult encodeLoop(CharBuffer src, ByteBuffer des) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        char[] input = src.array();
-        int inOff = src.arrayOffset() + src.position();
-        int inEnd = src.arrayOffset() + src.limit();
-
-        try {
-            while (inOff < inEnd && cr.isUnderflow()) {
-                charBuf[0] = input[inOff];
-                if (charBuf[0] <= '\u0008' ||
-                    (charBuf[0] >= '\u000B' && charBuf[0] <= '\u001F') ||
-                    (charBuf[0] >= '\u0080' && charBuf[0] <= '\u009F')) {
-                    // The compound text specification only permits the octets
-                    // 0x09, 0x0A, 0x1B, and 0x9B in C0 and C1. Of these, 1B and
-                    // 9B must also be removed because they initiate control
-                    // sequences.
-                    charBuf[0] = '?';
-                }
-
-                CharsetEncoder enc = getEncoder(charBuf[0]);
-                //System.out.println("char=" + charBuf[0] + ", enc=" + enc);
-                if (enc == null) {
-                    if (unmappableCharacterAction()
-                        == CodingErrorAction.REPORT) {
-                        charBuf[0] = '?';
-                        enc = latin1Encoder;
-                    } else {
-                        return CoderResult.unmappableForLength(1);
-                    }
-                }
-                if (enc != encoder) {
-                    if (nonStandardCharsetBuffer != null) {
-                        cr = flushNonStandardCharsetBuffer(des);
-                    } else {
-                        //cr= encoder.flush(des);
-                        flushEncoder(encoder, des);
-                    }
-                    if (!cr.isUnderflow())
-                        return cr;
-                    byte[] escSequence = CompoundTextSupport.
-                        getEscapeSequence(enc.charset().name());
-                    if (escSequence == null) {
-                        throw new InternalError("Unknown encoding: " +
-                                                enc.charset().name());
-                    } else if (escSequence[1] == (byte)0x25 &&
-                               escSequence[2] == (byte)0x2F) {
-                        initNonStandardCharsetBuffer(enc, escSequence);
-                    } else if (des.remaining() >= escSequence.length) {
-                        des.put(escSequence, 0, escSequence.length);
-                    } else {
-                        return CoderResult.OVERFLOW;
-                    }
-                    encoder = enc;
-                    continue;
-                }
-                charbuf.rewind();
-                if (nonStandardCharsetBuffer == null) {
-                    cr = encoder.encode(charbuf, des, false);
-                } else {
-                    bytebuf.clear();
-                    cr = encoder.encode(charbuf, bytebuf, false);
-                    bytebuf.flip();
-                    nonStandardCharsetBuffer.write(byteBuf,
-                                                   0, bytebuf.limit());
-                    numNonStandardChars++;
-                }
-                inOff++;
-            }
-            return cr;
-        } finally {
-            src.position(inOff - src.arrayOffset());
-        }
-    }
-
-    protected CoderResult implFlush(ByteBuffer out) {
-        CoderResult cr = (nonStandardCharsetBuffer != null)
-            ? flushNonStandardCharsetBuffer(out)
-            //: encoder.flush(out);
-            : flushEncoder(encoder, out);
-        reset();
-        return cr;
-    }
-
-    private void initNonStandardCharsetBuffer(CharsetEncoder c,
-                                              byte[] escSequence)
-    {
-        nonStandardCharsetBuffer = new ByteArrayOutputStream();
-        byteBuf = new byte[(int)c.maxBytesPerChar()];
-        bytebuf = ByteBuffer.wrap(byteBuf);
-        nonStandardCharsetBuffer.write(escSequence, 0, escSequence.length);
-        nonStandardCharsetBuffer.write(0); // M placeholder
-        nonStandardCharsetBuffer.write(0); // L placeholder
-        byte[] encoding = CompoundTextSupport.
-            getEncoding(c.charset().name());
-        if (encoding == null) {
-            throw new InternalError
-                ("Unknown encoding: " + encoder.charset().name());
-        }
-        nonStandardCharsetBuffer.write(encoding, 0, encoding.length);
-        nonStandardCharsetBuffer.write(0x02); // divider
-        nonStandardEncodingLen = encoding.length + 1;
-    }
-
-    private CoderResult flushNonStandardCharsetBuffer(ByteBuffer out) {
-        if (numNonStandardChars > 0) {
-            byte[] flushBuf = new byte[(int)encoder.maxBytesPerChar() *
-                                       numNonStandardChars];
-            ByteBuffer bb = ByteBuffer.wrap(flushBuf);
-            flushEncoder(encoder, bb);
-            bb.flip();
-            nonStandardCharsetBuffer.write(flushBuf, 0, bb.limit());
-            numNonStandardChars = 0;
-        }
-
-        int numBytes = nonStandardCharsetBuffer.size();
-        int nonStandardBytesOff = 6 + nonStandardEncodingLen;
-
-        if (out.remaining() < (numBytes - nonStandardBytesOff) +
-            nonStandardBytesOff * (((numBytes - nonStandardBytesOff) /
-                                    ((1 << 14) - 1)) + 1))
-        {
-            return CoderResult.OVERFLOW;
-        }
-
-        byte[] nonStandardBytes =
-            nonStandardCharsetBuffer.toByteArray();
-
-        // The non-standard charset header only supports 2^14-1 bytes of data.
-        // If we have more than that, we have to repeat the header.
-        do {
-            out.put((byte)0x1B);
-            out.put((byte)0x25);
-            out.put((byte)0x2F);
-            out.put(nonStandardBytes[3]);
-
-            int toWrite = Math.min(numBytes - nonStandardBytesOff,
-                                   (1 << 14) - 1 - nonStandardEncodingLen);
-
-            out.put((byte)
-                (((toWrite + nonStandardEncodingLen) / 0x80) | 0x80)); // M
-            out.put((byte)
-                (((toWrite + nonStandardEncodingLen) % 0x80) | 0x80)); // L
-            out.put(nonStandardBytes, 6, nonStandardEncodingLen);
-            out.put(nonStandardBytes, nonStandardBytesOff, toWrite);
-            nonStandardBytesOff += toWrite;
-        } while (nonStandardBytesOff < numBytes);
-
-        nonStandardCharsetBuffer = null;
-        byteBuf = null;
-        nonStandardEncodingLen = 0;
-        return CoderResult.UNDERFLOW;
-    }
-
-    /**
-     * Resets the encoder.
-     * Call this method to reset the encoder to its initial state
-     */
-    protected void implReset() {
-        numNonStandardChars = nonStandardEncodingLen = 0;
-        nonStandardCharsetBuffer = null;
-        byteBuf = null;
-        try {
-            encoder = Charset.forName("ISO8859_1").newEncoder();
-        } catch (IllegalArgumentException cannotHappen) {
-        }
-        initEncoder(encoder);
-    }
-
-    /**
-     * Return whether a character is mappable or not
-     * @return true if a character is mappable
-     */
-    public boolean canEncode(char ch) {
-        return getEncoder(ch) != null;
-    }
-
-    protected void implOnMalformedInput(CodingErrorAction newAction) {
-        encoder.onUnmappableCharacter(newAction);
-    }
-
-    protected void implOnUnmappableCharacter(CodingErrorAction newAction) {
-        encoder.onUnmappableCharacter(newAction);
-    }
-
-    protected void implReplaceWith(byte[] newReplacement) {
-        if (encoder != null)
-            encoder.replaceWith(newReplacement);
-    }
-
-    /**
-     * Try to figure out which CharsetEncoder to use for conversion
-     * of the specified Unicode character. The target character encoding
-     * of the returned encoder is approved to be used with Compound Text.
-     *
-     * @param ch Unicode character
-     * @return CharsetEncoder to convert the given character
-     */
-    private CharsetEncoder getEncoder(char ch) {
-        // 1. Try the current encoder.
-        if (encoder.canEncode(ch)) {
-            return encoder;
-        }
-
-        // 2. Try the default encoder.
-        if (defaultEncodingSupported && defaultEncoder.canEncode(ch)) {
-            CharsetEncoder retval = null;
-            try {
-                retval = defaultEncoder.charset().newEncoder();
-            } catch (UnsupportedOperationException cannotHappen) {
-            }
-            initEncoder(retval);
-            return retval;
-        }
-
-        // 3. Try ISO8859-1.
-        if (latin1Encoder.canEncode(ch)) {
-            CharsetEncoder retval = null;
-            try {
-                retval = latin1Encoder.charset().newEncoder();
-            } catch (UnsupportedOperationException cannotHappen) {}
-            initEncoder(retval);
-            return retval;
-        }
-
-        // 4. Brute force search of all supported encodings.
-        for (String encoding : CompoundTextSupport.getEncodings())
-        {
-            CharsetEncoder enc = encodingToEncoderMap.get(encoding);
-            if (enc == null) {
-                enc = CompoundTextSupport.getEncoder(encoding);
-                if (enc == null) {
-                    throw new InternalError("Unsupported encoding: " +
-                                            encoding);
-                }
-                encodingToEncoderMap.put(encoding, enc);
-            }
-            if (enc.canEncode(ch)) {
-                CharsetEncoder retval = CompoundTextSupport.getEncoder(encoding);
-                initEncoder(retval);
-                return retval;
-            }
-        }
-
-        return null;
-    }
-
-    private void initEncoder(CharsetEncoder enc) {
-        try {
-            enc.onUnmappableCharacter(CodingErrorAction.REPLACE)
-                .replaceWith(replacement());
-        } catch (IllegalArgumentException x) {}
-    }
-
-    private CharBuffer fcb= CharBuffer.allocate(0);
-    private CoderResult flushEncoder(CharsetEncoder enc, ByteBuffer bb) {
-        enc.encode(fcb, bb, true);
-        return enc.flush(bb);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/CompoundTextSupport.java b/ojluni/src/main/java/sun/nio/cs/ext/CompoundTextSupport.java
deleted file mode 100755
index bb61426..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/CompoundTextSupport.java
+++ /dev/null
@@ -1,548 +0,0 @@
-/*
- * Copyright (c) 2001, 2010, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.util.Collections;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.nio.charset.*;
-
-final class CompoundTextSupport {
-
-    private static final class ControlSequence {
-
-        final int hash;
-        final byte[] escSequence;
-        final byte[] encoding;
-
-        ControlSequence(byte[] escSequence) {
-            this(escSequence, null);
-        }
-        ControlSequence(byte[] escSequence, byte[] encoding) {
-            if (escSequence == null) {
-                throw new NullPointerException();
-            }
-
-            this.escSequence = escSequence;
-            this.encoding = encoding;
-
-            int hash = 0;
-            int length = escSequence.length;
-
-            for (int i = 0; i < escSequence.length; i++) {
-                hash += (((int)escSequence[i]) & 0xff) << (i % 4);
-            }
-            if (encoding != null) {
-                for (int i = 0; i < encoding.length; i++) {
-                    hash += (((int)encoding[i]) & 0xff) << (i % 4);
-                }
-                length += 2 /* M L */ + encoding.length + 1 /* 0x02 */;
-            }
-
-            this.hash = hash;
-
-            if (MAX_CONTROL_SEQUENCE_LEN < length) {
-                MAX_CONTROL_SEQUENCE_LEN = length;
-            }
-        }
-
-        public boolean equals(Object obj) {
-            if (this == obj) {
-                return true;
-            }
-            if (!(obj instanceof ControlSequence)) {
-                return false;
-            }
-            ControlSequence rhs = (ControlSequence)obj;
-            if (escSequence != rhs.escSequence) {
-                if (escSequence.length != rhs.escSequence.length) {
-                    return false;
-                }
-                for (int i = 0; i < escSequence.length; i++) {
-                    if (escSequence[i] != rhs.escSequence[i]) {
-                        return false;
-                    }
-                }
-            }
-            if (encoding != rhs.encoding) {
-                if (encoding == null || rhs.encoding == null ||
-                    encoding.length != rhs.encoding.length)
-                {
-                    return false;
-                }
-                for (int i = 0; i < encoding.length; i++) {
-                    if (encoding[i] != rhs.encoding[i]) {
-                        return false;
-                    }
-                }
-            }
-            return true;
-        }
-
-        public int hashCode() {
-            return hash;
-        }
-
-        ControlSequence concatenate(ControlSequence rhs) {
-            if (encoding != null) {
-                throw new IllegalArgumentException
-                    ("cannot concatenate to a non-standard charset escape " +
-                     "sequence");
-            }
-
-            int len = escSequence.length + rhs.escSequence.length;
-            byte[] newEscSequence = new byte[len];
-            System.arraycopy(escSequence, 0, newEscSequence, 0,
-                             escSequence.length);
-            System.arraycopy(rhs.escSequence, 0, newEscSequence,
-                             escSequence.length, rhs.escSequence.length);
-            return new ControlSequence(newEscSequence, rhs.encoding);
-        }
-    }
-
-    static int MAX_CONTROL_SEQUENCE_LEN;
-
-    /**
-     * Maps a GL or GR escape sequence to an encoding.
-     */
-    private static final Map<ControlSequence, String> sequenceToEncodingMap;
-
-    /**
-     * Indicates whether a particular encoding wants the high bit turned on
-     * or off.
-     */
-    private static final Map<ControlSequence, Boolean> highBitsMap;
-
-    /**
-     * Maps an encoding to an escape sequence. Rather than manage two
-     * converters in CharToByteCOMPOUND_TEXT, we output escape sequences which
-     * modify both GL and GR if necessary. This makes the output slightly less
-     * efficient, but our code much simpler.
-     */
-    private static final Map<String, ControlSequence> encodingToSequenceMap;
-
-    /**
-     * The keys of 'encodingToSequenceMap', sorted in preferential order.
-     */
-    private static final List<String> encodings;
-
-    static {
-        HashMap<ControlSequence, String> tSequenceToEncodingMap =
-            new HashMap<>(33, 1.0f);
-        HashMap<ControlSequence, Boolean> tHighBitsMap =
-            new HashMap<>(31, 1.0f);
-        HashMap<String, ControlSequence> tEncodingToSequenceMap =
-            new HashMap<>(21, 1.0f);
-        ArrayList<String> tEncodings = new ArrayList<>(21);
-
-        if (!(isEncodingSupported("US-ASCII") &&
-              isEncodingSupported("ISO-8859-1")))
-        {
-            throw new ExceptionInInitializerError
-                ("US-ASCII and ISO-8859-1 unsupported");
-        }
-
-        ControlSequence leftAscii = // high bit off, leave off
-            new ControlSequence(new byte[] { 0x1B, 0x28, 0x42 });
-        tSequenceToEncodingMap.put(leftAscii, "US-ASCII");
-        tHighBitsMap.put(leftAscii, Boolean.FALSE);
-
-        {
-            ControlSequence rightAscii = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x29, 0x42 });
-            tSequenceToEncodingMap.put(rightAscii, "US-ASCII");
-            tHighBitsMap.put(rightAscii, Boolean.FALSE);
-        }
-
-        {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x41 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-1");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-1", fullSet);
-            tEncodings.add("ISO-8859-1");
-        }
-        if (isEncodingSupported("ISO-8859-2")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x42 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-2");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-2", fullSet);
-            tEncodings.add("ISO-8859-2");
-        }
-        if (isEncodingSupported("ISO-8859-3")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x43 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-3");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-3", fullSet);
-            tEncodings.add("ISO-8859-3");
-        }
-        if (isEncodingSupported("ISO-8859-4")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x44 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-4");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-4", fullSet);
-            tEncodings.add("ISO-8859-4");
-        }
-        if (isEncodingSupported("ISO-8859-5")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x4C });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-5");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-5", fullSet);
-            tEncodings.add("ISO-8859-5");
-        }
-        if (isEncodingSupported("ISO-8859-6")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x47 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-6");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-6", fullSet);
-            tEncodings.add("ISO-8859-6");
-        }
-        if (isEncodingSupported("ISO-8859-7")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x46 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-7");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-7", fullSet);
-            tEncodings.add("ISO-8859-7");
-        }
-        if (isEncodingSupported("ISO-8859-8")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x48 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-8");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-8", fullSet);
-            tEncodings.add("ISO-8859-8");
-        }
-        if (isEncodingSupported("ISO-8859-9")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x4D });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-9");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-9", fullSet);
-            tEncodings.add("ISO-8859-9");
-        }
-        if (isEncodingSupported("JIS_X0201")) {
-            ControlSequence glLeft = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x28, 0x4A });
-            ControlSequence glRight = // high bit off, turn on
-                new ControlSequence(new byte[] { 0x1B, 0x28, 0x49 });
-            ControlSequence grLeft = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x29, 0x4A });
-            ControlSequence grRight = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x29, 0x49 });
-            tSequenceToEncodingMap.put(glLeft, "JIS_X0201");
-            tSequenceToEncodingMap.put(glRight, "JIS_X0201");
-            tSequenceToEncodingMap.put(grLeft, "JIS_X0201");
-            tSequenceToEncodingMap.put(grRight, "JIS_X0201");
-            tHighBitsMap.put(glLeft, Boolean.FALSE);
-            tHighBitsMap.put(glRight, Boolean.TRUE);
-            tHighBitsMap.put(grLeft, Boolean.FALSE);
-            tHighBitsMap.put(grRight, Boolean.TRUE);
-
-            ControlSequence fullSet = glLeft.concatenate(grRight);
-            tEncodingToSequenceMap.put("JIS_X0201", fullSet);
-            tEncodings.add("JIS_X0201");
-        }
-        if (isEncodingSupported("X11GB2312")) {
-            ControlSequence leftHalf =  // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x41 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x41 });
-            tSequenceToEncodingMap.put(leftHalf, "X11GB2312");
-            tSequenceToEncodingMap.put(rightHalf, "X11GB2312");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("X11GB2312", leftHalf);
-            tEncodings.add("X11GB2312");
-        }
-        if (isEncodingSupported("x-JIS0208")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x42 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x42 });
-            tSequenceToEncodingMap.put(leftHalf, "x-JIS0208");
-            tSequenceToEncodingMap.put(rightHalf, "x-JIS0208");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("x-JIS0208", leftHalf);
-            tEncodings.add("x-JIS0208");
-        }
-        if (isEncodingSupported("X11KSC5601")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x43 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x43 });
-            tSequenceToEncodingMap.put(leftHalf, "X11KSC5601");
-            tSequenceToEncodingMap.put(rightHalf, "X11KSC5601");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("X11KSC5601", leftHalf);
-            tEncodings.add("X11KSC5601");
-        }
-
-        // Encodings not listed in Compound Text Encoding spec
-
-        // Esc seq: -b
-        if (isEncodingSupported("ISO-8859-15")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x62 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-15");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-15", fullSet);
-            tEncodings.add("ISO-8859-15");
-        }
-        // Esc seq: -T
-        if (isEncodingSupported("TIS-620")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x54 });
-            tSequenceToEncodingMap.put(rightHalf, "TIS-620");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("TIS-620", fullSet);
-            tEncodings.add("TIS-620");
-        }
-        if (isEncodingSupported("JIS_X0212-1990")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x44 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x44 });
-            tSequenceToEncodingMap.put(leftHalf, "JIS_X0212-1990");
-            tSequenceToEncodingMap.put(rightHalf, "JIS_X0212-1990");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("JIS_X0212-1990", leftHalf);
-            tEncodings.add("JIS_X0212-1990");
-        }
-        if (isEncodingSupported("X11CNS11643P1")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x47 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x47 });
-            tSequenceToEncodingMap.put(leftHalf, "X11CNS11643P1");
-            tSequenceToEncodingMap.put(rightHalf, "X11CNS11643P1");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("X11CNS11643P1", leftHalf);
-            tEncodings.add("X11CNS11643P1");
-        }
-        if (isEncodingSupported("X11CNS11643P2")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x48 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x48 });
-            tSequenceToEncodingMap.put(leftHalf, "X11CNS11643P2");
-            tSequenceToEncodingMap.put(rightHalf, "X11CNS11643P2");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("X11CNS11643P2", leftHalf);
-            tEncodings.add("X11CNS11643P2");
-        }
-        if (isEncodingSupported("X11CNS11643P3")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x49 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x49 });
-            tSequenceToEncodingMap.put(leftHalf, "X11CNS11643P3");
-            tSequenceToEncodingMap.put(rightHalf, "X11CNS11643P3");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("X11CNS11643P3", leftHalf);
-            tEncodings.add("X11CNS11643P3");
-        }
-        // Esc seq: %/2??SUN-KSC5601.1992-3
-        if (isEncodingSupported("x-Johab")) {
-            // 0x32 looks wrong. It's copied from the Sun X11 Compound Text
-            // support code. It implies that all Johab characters comprise two
-            // octets, which isn't true. Johab supports the ASCII/KS-Roman
-            // characters from 0x21-0x7E with single-byte representations.
-            ControlSequence johab = new ControlSequence(
-                new byte[] { 0x1b, 0x25, 0x2f, 0x32 },
-                new byte[] { 0x53, 0x55, 0x4e, 0x2d, 0x4b, 0x53, 0x43, 0x35,
-                             0x36, 0x30, 0x31, 0x2e, 0x31, 0x39, 0x39, 0x32,
-                             0x2d, 0x33 });
-            tSequenceToEncodingMap.put(johab, "x-Johab");
-            tEncodingToSequenceMap.put("x-Johab", johab);
-            tEncodings.add("x-Johab");
-        }
-        // Esc seq: %/2??SUN-BIG5-1
-        if (isEncodingSupported("Big5")) {
-            // 0x32 looks wrong. It's copied from the Sun X11 Compound Text
-            // support code. It implies that all Big5 characters comprise two
-            // octets, which isn't true. Big5 supports the ASCII/CNS-Roman
-            // characters from 0x21-0x7E with single-byte representations.
-            ControlSequence big5 = new ControlSequence(
-                new byte[] { 0x1b, 0x25, 0x2f, 0x32 },
-                new byte[] { 0x53, 0x55, 0x4e, 0x2d, 0x42, 0x49, 0x47, 0x35,
-                             0x2d, 0x31 });
-            tSequenceToEncodingMap.put(big5, "Big5");
-            tEncodingToSequenceMap.put("Big5", big5);
-            tEncodings.add("Big5");
-        }
-
-        sequenceToEncodingMap =
-            Collections.unmodifiableMap(tSequenceToEncodingMap);
-        highBitsMap = Collections.unmodifiableMap(tHighBitsMap);
-        encodingToSequenceMap =
-            Collections.unmodifiableMap(tEncodingToSequenceMap);
-        encodings = Collections.unmodifiableList(tEncodings);
-    }
-
-    private static boolean isEncodingSupported(String encoding) {
-        try {
-            if (Charset.isSupported(encoding))
-                return true;
-        } catch (IllegalArgumentException x) { }
-        return (getDecoder(encoding) != null &&
-                getEncoder(encoding) != null);
-    }
-
-
-    // For Decoder
-    static CharsetDecoder getStandardDecoder(byte[] escSequence) {
-        return getNonStandardDecoder(escSequence, null);
-    }
-    static boolean getHighBit(byte[] escSequence) {
-        Boolean bool = highBitsMap.get(new ControlSequence(escSequence));
-        return (bool == Boolean.TRUE);
-    }
-    static CharsetDecoder getNonStandardDecoder(byte[] escSequence,
-                                                       byte[] encoding) {
-        return getDecoder(sequenceToEncodingMap.get
-            (new ControlSequence(escSequence, encoding)));
-    }
-    static CharsetDecoder getDecoder(String enc) {
-        if (enc == null) {
-            return null;
-        }
-        Charset cs = null;
-        try {
-            cs = Charset.forName(enc);
-        } catch (IllegalArgumentException e) {
-            Class<?> cls;
-            try {
-                cls = Class.forName("sun.awt.motif." + enc);
-            } catch (ClassNotFoundException ee) {
-                return null;
-            }
-            try {
-                cs = (Charset)cls.newInstance();
-            } catch (InstantiationException ee) {
-                return null;
-            } catch (IllegalAccessException ee) {
-                return null;
-            }
-        }
-        try {
-            return cs.newDecoder();
-        } catch (UnsupportedOperationException e) {}
-        return null;
-    }
-
-
-    // For Encoder
-    static byte[] getEscapeSequence(String encoding) {
-        ControlSequence seq = encodingToSequenceMap.get(encoding);
-        if (seq != null) {
-            return seq.escSequence;
-        }
-        return null;
-    }
-    static byte[] getEncoding(String encoding) {
-        ControlSequence seq = encodingToSequenceMap.get(encoding);
-        if (seq != null) {
-            return seq.encoding;
-        }
-        return null;
-    }
-    static List<String> getEncodings() {
-        return encodings;
-    }
-    static CharsetEncoder getEncoder(String enc) {
-        if (enc == null) {
-            return null;
-        }
-        Charset cs = null;
-        try {
-            cs = Charset.forName(enc);
-        } catch (IllegalArgumentException e) {
-            Class<?> cls;
-            try {
-                cls = Class.forName("sun.awt.motif." + enc);
-            } catch (ClassNotFoundException ee) {
-                return null;
-            }
-            try {
-                cs = (Charset)cls.newInstance();
-            } catch (InstantiationException ee) {
-                return null;
-            } catch (IllegalAccessException ee) {
-                return null;
-            }
-        }
-        try {
-            return cs.newEncoder();
-        } catch (Throwable e) {}
-        return null;
-    }
-
-    // Not an instantiable class
-    private CompoundTextSupport() {}
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/DelegatableDecoder.java b/ojluni/src/main/java/sun/nio/cs/ext/DelegatableDecoder.java
deleted file mode 100755
index 13b4975..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/DelegatableDecoder.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2004, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.CoderResult;
-
-/**
- * A decoder that can be delegated to by another decoder
- * when normal inheritance cannot be used.
- * Used by autodecting decoders.
- */
-interface DelegatableDecoder {
-    CoderResult decodeLoop(ByteBuffer src, CharBuffer dst);
-    void implReset();
-    CoderResult implFlush(CharBuffer out);
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/DoubleByte.java b/ojluni/src/main/java/sun/nio/cs/ext/DoubleByte.java
deleted file mode 100755
index ce66105..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/DoubleByte.java
+++ /dev/null
@@ -1,752 +0,0 @@
-/*
- * Copyright (c) 2009, 2010, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import java.util.Arrays;
-import sun.nio.cs.Surrogate;
-import static sun.nio.cs.CharsetMapping.*;
-
-/*
- * Four types of "DoubleByte" charsets are implemented in this class
- * (1)DoubleByte
- *    The "mostly widely used" multibyte charset, a combination of
- *    a singlebyte character set (usually the ASCII charset) and a
- *    doublebyte character set. The codepoint values of singlebyte
- *    and doublebyte don't overlap. Microsoft's multibyte charsets
- *    and IBM's "DBCS_ASCII" charsets, such as IBM1381, 942, 943,
- *    948, 949 and 950 are such charsets.
- *
- * (2)DoubleByte_EBCDIC
- *    IBM EBCDIC Mix multibyte charset. Use SO and SI to shift (switch)
- *    in and out between the singlebyte character set and doublebyte
- *    character set.
- *
- * (3)DoubleByte_SIMPLE_EUC
- *    It's a "simple" form of EUC encoding scheme, only have the
- *    singlebyte character set G0 and one doublebyte character set
- *    G1 are defined, G2 (with SS2) and G3 (with SS3) are not used.
- *    So it is actually the same as the "typical" type (1) mentioned
- *    above, except it return "malformed" for the SS2 and SS3 when
- *    decoding.
- *
- * (4)DoubleByte ONLY
- *    A "pure" doublebyte only character set. From implementation
- *    point of view, this is the type (1) with "decodeSingle" always
- *    returns unmappable.
- *
- * For simplicity, all implementations share the same decoding and
- * encoding data structure.
- *
- * Decoding:
- *
- *    char[][] b2c;
- *    char[] b2cSB;
- *    int b2Min, b2Max
- *
- *    public char decodeSingle(int b) {
- *        return b2cSB.[b];
- *    }
- *
- *    public char decodeDouble(int b1, int b2) {
- *        if (b2 < b2Min || b2 > b2Max)
- *            return UNMAPPABLE_DECODING;
- *         return b2c[b1][b2 - b2Min];
- *    }
- *
- *    (1)b2Min, b2Max are the corresponding min and max value of the
- *       low-half of the double-byte.
- *    (2)The high 8-bit/b1 of the double-byte are used to indexed into
- *       b2c array.
- *
- * Encoding:
- *
- *    char[] c2b;
- *    char[] c2bIndex;
- *
- *    public int encodeChar(char ch) {
- *        return c2b[c2bIndex[ch >> 8] + (ch & 0xff)];
- *    }
- *
- */
-
-public class DoubleByte {
-
-    public final static char[] B2C_UNMAPPABLE;
-    static {
-        B2C_UNMAPPABLE = new char[0x100];
-        Arrays.fill(B2C_UNMAPPABLE, UNMAPPABLE_DECODING);
-    }
-
-    public static class Decoder extends CharsetDecoder
-                                implements DelegatableDecoder
-    {
-
-        final char[][] b2c;
-        final char[] b2cSB;
-        final int b2Min;
-        final int b2Max;
-
-        // for SimpleEUC override
-        protected CoderResult crMalformedOrUnderFlow(int b) {
-            return CoderResult.UNDERFLOW;
-        }
-
-        protected CoderResult crMalformedOrUnmappable(int b) {
-            return CoderResult.unmappableForLength(2);
-        }
-
-        Decoder(Charset cs, float avgcpb, float maxcpb,
-                char[][] b2c, char[] b2cSB,
-                int b2Min, int b2Max) {
-            super(cs, avgcpb, maxcpb);
-            this.b2c = b2c;
-            this.b2cSB = b2cSB;
-            this.b2Min = b2Min;
-            this.b2Max = b2Max;
-        }
-
-        Decoder(Charset cs, char[][] b2c, char[] b2cSB, int b2Min, int b2Max) {
-            this(cs, 0.5f, 1.0f, b2c, b2cSB, b2Min, b2Max);
-        }
-
-        protected CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl && dp < dl) {
-                    // inline the decodeSingle/Double() for better performance
-                    int inSize = 1;
-                    int b1 = sa[sp] & 0xff;
-                    char c = b2cSB[b1];
-                    if (c == UNMAPPABLE_DECODING) {
-                        if (sl - sp < 2)
-                            return crMalformedOrUnderFlow(b1);
-                        int b2 = sa[sp + 1] & 0xff;
-                        if (b2 < b2Min || b2 > b2Max ||
-                            (c = b2c[b1][b2 - b2Min]) == UNMAPPABLE_DECODING) {
-                            return crMalformedOrUnmappable(b1);
-                        }
-                        inSize++;
-                    }
-                    da[dp++] = c;
-                    sp += inSize;
-                }
-                return (sp >= sl) ? CoderResult.UNDERFLOW
-                                  : CoderResult.OVERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        protected CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
-            int mark = src.position();
-            try {
-
-                while (src.hasRemaining() && dst.hasRemaining()) {
-                    int b1 = src.get() & 0xff;
-                    char c = b2cSB[b1];
-                    int inSize = 1;
-                    if (c == UNMAPPABLE_DECODING) {
-                        if (src.remaining() < 1)
-                            return crMalformedOrUnderFlow(b1);
-                        int b2 = src.get() & 0xff;
-                        if (b2 < b2Min || b2 > b2Max ||
-                            (c = b2c[b1][b2 - b2Min]) == UNMAPPABLE_DECODING)
-                            return crMalformedOrUnmappable(b1);
-                        inSize++;
-                    }
-                    dst.put(c);
-                    mark += inSize;
-                }
-                return src.hasRemaining()? CoderResult.OVERFLOW
-                                         : CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        // Make some protected methods public for use by JISAutoDetect
-        public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            if (src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-
-        public void implReset() {
-            super.implReset();
-        }
-
-        public CoderResult implFlush(CharBuffer out) {
-            return super.implFlush(out);
-        }
-
-        // decode loops are not using decodeSingle/Double() for performance
-        // reason.
-        public char decodeSingle(int b) {
-            return b2cSB[b];
-        }
-
-        public char decodeDouble(int b1, int b2) {
-            if (b2 < b2Min || b2 > b2Max)
-                return UNMAPPABLE_DECODING;
-            return  b2c[b1][b2 - b2Min];
-        }
-    }
-
-    // IBM_EBCDIC_DBCS
-    public static class Decoder_EBCDIC extends Decoder {
-        private static final int SBCS = 0;
-        private static final int DBCS = 1;
-        private static final int SO = 0x0e;
-        private static final int SI = 0x0f;
-        private int  currentState;
-
-        Decoder_EBCDIC(Charset cs,
-                       char[][] b2c, char[] b2cSB, int b2Min, int b2Max) {
-            super(cs, b2c, b2cSB, b2Min, b2Max);
-        }
-
-        public void implReset() {
-            currentState = SBCS;
-        }
-
-        // Check validity of dbcs ebcdic byte pair values
-        //
-        // First byte : 0x41 -- 0xFE
-        // Second byte: 0x41 -- 0xFE
-        // Doublebyte blank: 0x4040
-        //
-        // The validation implementation in "old" DBCS_IBM_EBCDIC and sun.io
-        // as
-        //            if ((b1 != 0x40 || b2 != 0x40) &&
-        //                (b2 < 0x41 || b2 > 0xfe)) {...}
-        // is not correct/complete (range check for b1)
-        //
-        private static boolean isDoubleByte(int b1, int b2) {
-            return (0x41 <= b1 && b1 <= 0xfe && 0x41 <= b2 && b2 <= 0xfe)
-                   || (b1 == 0x40 && b2 == 0x40); // DBCS-HOST SPACE
-        }
-
-        protected CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                // don't check dp/dl together here, it's possible to
-                // decdoe a SO/SI without space in output buffer.
-                while (sp < sl) {
-                    int b1 = sa[sp] & 0xff;
-                    int inSize = 1;
-                    if (b1 == SO) {  // Shift out
-                        if (currentState != SBCS)
-                            return CoderResult.malformedForLength(1);
-                        else
-                            currentState = DBCS;
-                    } else if (b1 == SI) {
-                        if (currentState != DBCS)
-                            return CoderResult.malformedForLength(1);
-                        else
-                            currentState = SBCS;
-                    } else {
-                        char c =  UNMAPPABLE_DECODING;
-                        if (currentState == SBCS) {
-                            c = b2cSB[b1];
-                            if (c == UNMAPPABLE_DECODING)
-                                return CoderResult.unmappableForLength(1);
-                        } else {
-                            if (sl - sp < 2)
-                                return CoderResult.UNDERFLOW;
-                            int b2 = sa[sp + 1] & 0xff;
-                            if (b2 < b2Min || b2 > b2Max ||
-                                (c = b2c[b1][b2 - b2Min]) == UNMAPPABLE_DECODING) {
-                                if (!isDoubleByte(b1, b2))
-                                    return CoderResult.malformedForLength(2);
-                                return CoderResult.unmappableForLength(2);
-                            }
-                            inSize++;
-                        }
-                        if (dl - dp < 1)
-                            return CoderResult.OVERFLOW;
-
-                        da[dp++] = c;
-                    }
-                    sp += inSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        protected CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    int b1 = src.get() & 0xff;
-                    int inSize = 1;
-                    if (b1 == SO) {  // Shift out
-                        if (currentState != SBCS)
-                            return CoderResult.malformedForLength(1);
-                        else
-                            currentState = DBCS;
-                    } else if (b1 == SI) {
-                        if (currentState != DBCS)
-                            return CoderResult.malformedForLength(1);
-                        else
-                            currentState = SBCS;
-                    } else {
-                        char c = UNMAPPABLE_DECODING;
-                        if (currentState == SBCS) {
-                            c = b2cSB[b1];
-                            if (c == UNMAPPABLE_DECODING)
-                                return CoderResult.unmappableForLength(1);
-                        } else {
-                            if (src.remaining() < 1)
-                                return CoderResult.UNDERFLOW;
-                            int b2 = src.get()&0xff;
-                            if (b2 < b2Min || b2 > b2Max ||
-                                (c = b2c[b1][b2 - b2Min]) == UNMAPPABLE_DECODING) {
-                                if (!isDoubleByte(b1, b2))
-                                    return CoderResult.malformedForLength(2);
-                                return CoderResult.unmappableForLength(2);
-                            }
-                            inSize++;
-                        }
-
-                        if (dst.remaining() < 1)
-                            return CoderResult.OVERFLOW;
-
-                        dst.put(c);
-                    }
-                    mark += inSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-    }
-
-    // EBCDIC_DBCS_ONLY
-    public static class Decoder_EBCDIC_DBCSONLY extends Decoder {
-        static final char[] b2cSB;
-        static {
-            b2cSB = new char[0x100];
-            Arrays.fill(b2cSB, UNMAPPABLE_DECODING);
-        }
-        Decoder_EBCDIC_DBCSONLY(Charset cs, char[][] b2c, int b2Min, int b2Max) {
-            super(cs, 0.5f, 1.0f, b2c, b2cSB, b2Min, b2Max);
-        }
-    }
-
-    // EUC_SIMPLE
-    // The only thing we need to "override" is to check SS2/SS3 and
-    // return "malformed" if found
-    public static class Decoder_EUC_SIM extends Decoder {
-        private final int SS2 =  0x8E;
-        private final int SS3 =  0x8F;
-
-        Decoder_EUC_SIM(Charset cs,
-                        char[][] b2c, char[] b2cSB, int b2Min, int b2Max) {
-            super(cs, b2c, b2cSB, b2Min, b2Max);
-        }
-
-        // No support provided for G2/G3 for SimpleEUC
-        protected CoderResult crMalformedOrUnderFlow(int b) {
-            if (b == SS2 || b == SS3 )
-                return CoderResult.malformedForLength(1);
-            return CoderResult.UNDERFLOW;
-        }
-
-        protected CoderResult crMalformedOrUnmappable(int b) {
-            if (b == SS2 || b == SS3 )
-                return CoderResult.malformedForLength(1);
-            return CoderResult.unmappableForLength(2);
-        }
-    }
-
-    public static class Encoder extends CharsetEncoder {
-        final int MAX_SINGLEBYTE = 0xff;
-        private final char[] c2b;
-        private final char[] c2bIndex;
-        Surrogate.Parser sgp;
-
-        protected Encoder(Charset cs, char[] c2b, char[] c2bIndex) {
-            super(cs, 2.0f, 2.0f);
-            this.c2b = c2b;
-            this.c2bIndex = c2bIndex;
-        }
-
-        Encoder(Charset cs, float avg, float max, byte[] repl, char[] c2b, char[] c2bIndex) {
-            super(cs, avg, max, repl);
-            this.c2b = c2b;
-            this.c2bIndex = c2bIndex;
-        }
-
-        public boolean canEncode(char c) {
-            return encodeChar(c) != UNMAPPABLE_ENCODING;
-        }
-
-        Surrogate.Parser sgp() {
-            if (sgp == null)
-                sgp = new Surrogate.Parser();
-            return sgp;
-        }
-
-        protected CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    int bb = encodeChar(c);
-                    if (bb == UNMAPPABLE_ENCODING) {
-                        if (Character.isSurrogate(c)) {
-                            if (sgp().parse(c, sa, sp, sl) < 0)
-                                return sgp.error();
-                            return sgp.unmappableResult();
-                        }
-                        return CoderResult.unmappableForLength(1);
-                    }
-
-                    if (bb > MAX_SINGLEBYTE) {    // DoubleByte
-                        if (dl - dp < 2)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = (byte)(bb >> 8);
-                        da[dp++] = (byte)bb;
-                    } else {                      // SingleByte
-                        if (dl - dp < 1)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = (byte)bb;
-                    }
-
-                    sp++;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        protected CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    char c = src.get();
-                    int bb = encodeChar(c);
-                    if (bb == UNMAPPABLE_ENCODING) {
-                        if (Character.isSurrogate(c)) {
-                            if (sgp().parse(c, src) < 0)
-                                return sgp.error();
-                            return sgp.unmappableResult();
-                        }
-                        return CoderResult.unmappableForLength(1);
-                    }
-                    if (bb > MAX_SINGLEBYTE) {  // DoubleByte
-                        if (dst.remaining() < 2)
-                            return CoderResult.OVERFLOW;
-                        dst.put((byte)(bb >> 8));
-                        dst.put((byte)(bb));
-                    } else {
-                        if (dst.remaining() < 1)
-                        return CoderResult.OVERFLOW;
-                        dst.put((byte)bb);
-                    }
-                    mark++;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            if (src.hasArray() && dst.hasArray())
-                return encodeArrayLoop(src, dst);
-            else
-                return encodeBufferLoop(src, dst);
-        }
-
-        public int encodeChar(char ch) {
-            return c2b[c2bIndex[ch >> 8] + (ch & 0xff)];
-        }
-
-        // init the c2b and c2bIndex tables from b2c.
-        static void initC2B(String[] b2c, String b2cSB, String b2cNR,  String c2bNR,
-                            int b2Min, int b2Max,
-                            char[] c2b, char[] c2bIndex)
-        {
-            Arrays.fill(c2b, (char)UNMAPPABLE_ENCODING);
-            int off = 0x100;
-
-            char[][] b2c_ca = new char[b2c.length][];
-            char[] b2cSB_ca = null;
-            if (b2cSB != null)
-                b2cSB_ca = b2cSB.toCharArray();
-
-            for (int i = 0; i < b2c.length; i++) {
-                if (b2c[i] == null)
-                    continue;
-                b2c_ca[i] = b2c[i].toCharArray();
-            }
-
-            if (b2cNR != null) {
-                int j = 0;
-                while (j < b2cNR.length()) {
-                    char b  = b2cNR.charAt(j++);
-                    char c  = b2cNR.charAt(j++);
-                    if (b < 0x100 && b2cSB_ca != null) {
-                        if (b2cSB_ca[b] == c)
-                            b2cSB_ca[b] = UNMAPPABLE_DECODING;
-                    } else {
-                        if (b2c_ca[b >> 8][(b & 0xff) - b2Min] == c)
-                            b2c_ca[b >> 8][(b & 0xff) - b2Min] = UNMAPPABLE_DECODING;
-                    }
-                }
-            }
-
-            if (b2cSB_ca != null) {      // SingleByte
-                for (int b = 0; b < b2cSB_ca.length; b++) {
-                    char c = b2cSB_ca[b];
-                    if (c == UNMAPPABLE_DECODING)
-                        continue;
-                    int index = c2bIndex[c >> 8];
-                    if (index == 0) {
-                        index = off;
-                        off += 0x100;
-                        c2bIndex[c >> 8] = (char)index;
-                    }
-                    c2b[index + (c & 0xff)] = (char)b;
-                }
-            }
-
-            for (int b1 = 0; b1 < b2c.length; b1++) {  // DoubleByte
-                char[] db = b2c_ca[b1];
-                if (db == null)
-                    continue;
-                for (int b2 = b2Min; b2 <= b2Max; b2++) {
-                    char c = db[b2 - b2Min];
-                    if (c == UNMAPPABLE_DECODING)
-                        continue;
-                    int index = c2bIndex[c >> 8];
-                    if (index == 0) {
-                        index = off;
-                        off += 0x100;
-                        c2bIndex[c >> 8] = (char)index;
-                    }
-                    c2b[index + (c & 0xff)] = (char)((b1 << 8) | b2);
-                }
-            }
-
-            if (c2bNR != null) {
-                // add c->b only nr entries
-                for (int i = 0; i < c2bNR.length(); i += 2) {
-                    char b = c2bNR.charAt(i);
-                    char c = c2bNR.charAt(i + 1);
-                    int index = (c >> 8);
-                    if (c2bIndex[index] == 0) {
-                        c2bIndex[index] = (char)off;
-                        off += 0x100;
-                    }
-                    index = c2bIndex[index] + (c & 0xff);
-                    c2b[index] = b;
-                }
-            }
-        }
-    }
-
-    // EBCDIC_DBCS_ONLY
-    public static class Encoder_EBCDIC_DBCSONLY extends Encoder {
-        Encoder_EBCDIC_DBCSONLY(Charset cs, byte[] repl,
-                                char[] c2b, char[] c2bIndex) {
-            super(cs, 2.0f, 2.0f, repl, c2b, c2bIndex);
-        }
-
-        public int encodeChar(char ch) {
-            int bb = super.encodeChar(ch);
-            if (bb <= MAX_SINGLEBYTE)
-                return UNMAPPABLE_ENCODING;
-            return bb;
-        }
-    }
-
-    // for IBM_EBCDIC_DBCS
-    public static class Encoder_EBCDIC extends Encoder {
-        static final int SBCS = 0;
-        static final int DBCS = 1;
-        static final byte SO = 0x0e;
-        static final byte SI = 0x0f;
-
-        protected int  currentState = SBCS;
-
-        Encoder_EBCDIC(Charset cs, char[] c2b, char[] c2bIndex) {
-            super(cs, 4.0f, 5.0f, new byte[] {(byte)0x6f}, c2b, c2bIndex);
-        }
-
-        protected void implReset() {
-            currentState = SBCS;
-        }
-
-        protected CoderResult implFlush(ByteBuffer out) {
-            if (currentState == DBCS) {
-                if (out.remaining() < 1)
-                    return CoderResult.OVERFLOW;
-                out.put(SI);
-            }
-            implReset();
-            return CoderResult.UNDERFLOW;
-        }
-
-        protected CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    int bb = encodeChar(c);
-                    if (bb == UNMAPPABLE_ENCODING) {
-                        if (Character.isSurrogate(c)) {
-                            if (sgp().parse(c, sa, sp, sl) < 0)
-                                return sgp.error();
-                            return sgp.unmappableResult();
-                        }
-                        return CoderResult.unmappableForLength(1);
-                    }
-                    if (bb > MAX_SINGLEBYTE) {  // DoubleByte
-                        if (currentState == SBCS) {
-                            if (dl - dp < 1)
-                                return CoderResult.OVERFLOW;
-                            currentState = DBCS;
-                            da[dp++] = SO;
-                        }
-                        if (dl - dp < 2)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = (byte)(bb >> 8);
-                        da[dp++] = (byte)bb;
-                    } else {                    // SingleByte
-                        if (currentState == DBCS) {
-                            if (dl - dp < 1)
-                                return CoderResult.OVERFLOW;
-                            currentState = SBCS;
-                            da[dp++] = SI;
-                        }
-                        if (dl - dp < 1)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = (byte)bb;
-
-                    }
-                    sp++;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        protected CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    char c = src.get();
-                    int bb = encodeChar(c);
-                    if (bb == UNMAPPABLE_ENCODING) {
-                        if (Character.isSurrogate(c)) {
-                            if (sgp().parse(c, src) < 0)
-                                return sgp.error();
-                            return sgp.unmappableResult();
-                        }
-                        return CoderResult.unmappableForLength(1);
-                    }
-                    if (bb > MAX_SINGLEBYTE) {  // DoubleByte
-                        if (currentState == SBCS) {
-                            if (dst.remaining() < 1)
-                                return CoderResult.OVERFLOW;
-                            currentState = DBCS;
-                            dst.put(SO);
-                        }
-                        if (dst.remaining() < 2)
-                            return CoderResult.OVERFLOW;
-                        dst.put((byte)(bb >> 8));
-                        dst.put((byte)(bb));
-                    } else {                  // Single-byte
-                        if (currentState == DBCS) {
-                            if (dst.remaining() < 1)
-                                return CoderResult.OVERFLOW;
-                            currentState = SBCS;
-                            dst.put(SI);
-                        }
-                        if (dst.remaining() < 1)
-                            return CoderResult.OVERFLOW;
-                        dst.put((byte)bb);
-                    }
-                    mark++;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-    }
-
-    // EUC_SIMPLE
-    public static class Encoder_EUC_SIM extends Encoder {
-        Encoder_EUC_SIM(Charset cs, char[] c2b, char[] c2bIndex) {
-            super(cs, c2b, c2bIndex);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/DoubleByteDecoder.java b/ojluni/src/main/java/sun/nio/cs/ext/DoubleByteDecoder.java
deleted file mode 100755
index da244fa..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/DoubleByteDecoder.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CoderResult;
-
-abstract class DoubleByteDecoder
-    extends CharsetDecoder
-{
-
-    private short index1[];
-
-    /*
-     * 2nd level index, provided by subclass
-     * every string has 0x10*(end-start+1) characters.
-     */
-    private String  index2[];
-
-    protected int start;
-    protected int end;
-
-    protected static final char REPLACE_CHAR = '\uFFFD';
-    protected char highSurrogate;
-    protected char lowSurrogate;
-
-    protected DoubleByteDecoder(Charset cs, short[] index1, String[] index2,
-                                int start, int end ) {
-        super(cs, 0.5f, 1.0f);
-        this.index1 = index1;
-        this.index2 = index2;
-        this.start = start;
-        this.end = end;
-    }
-
-    private CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
-        byte[] sa = src.array();
-        int sp = src.arrayOffset() + src.position();
-        int sl = src.arrayOffset() + src.limit();
-        assert (sp <= sl);
-        sp = (sp <= sl ? sp : sl);
-        char[] da = dst.array();
-        int dp = dst.arrayOffset() + dst.position();
-        int dl = dst.arrayOffset() + dst.limit();
-        assert (dp <= dl);
-        dp = (dp <= dl ? dp : dl);
-
-        try {
-            while (sp < sl) {
-                int b1, b2;
-                b1 = sa[sp];
-                int inputSize = 1;
-                int outputSize = 1;
-                highSurrogate = lowSurrogate = 0;
-                char c = decodeSingle(b1);
-                if (c == REPLACE_CHAR) {
-                    b1 &= 0xff;
-                    if (sl - sp < 2)
-                        return CoderResult.UNDERFLOW;
-                    b2 = sa[sp + 1] & 0xff;
-                    c = decodeDouble(b1, b2);
-                    inputSize = 2;
-                    if (c == REPLACE_CHAR)
-                        return CoderResult.unmappableForLength(inputSize);
-                    outputSize = (highSurrogate > 0) ? 2: 1;
-                }
-
-                if (dl - dp < outputSize)
-                    return CoderResult.OVERFLOW;
-                if (outputSize == 2) {
-                    da[dp++] = highSurrogate;
-                    da[dp++] = lowSurrogate;
-                } else {
-                    da[dp++] = c;
-                }
-                sp += inputSize;
-            }
-            return CoderResult.UNDERFLOW;
-        } finally {
-            src.position(sp - src.arrayOffset());
-            dst.position(dp - dst.arrayOffset());
-        }
-    }
-
-    private CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
-        int mark = src.position();
-        int inputSize = 0;
-        int outputSize = 0;
-        try {
-            while (src.hasRemaining()) {
-                int b1 = src.get();
-                inputSize = 1;
-                outputSize = 1;
-                highSurrogate = lowSurrogate = 0;
-
-                char c = decodeSingle(b1);
-
-                if (c == REPLACE_CHAR) {
-                    if (src.remaining() < 1)
-                        return CoderResult.UNDERFLOW;
-                    b1 &= 0xff;
-                    int b2 = src.get() & 0xff;
-                    inputSize = 2;
-
-                    c = decodeDouble(b1, b2);
-
-                    if (c == REPLACE_CHAR)
-                        return CoderResult.unmappableForLength(2);
-
-                    outputSize =  (highSurrogate > 0) ? 2: 1;
-                }
-                if (dst.remaining() < outputSize)
-                    return CoderResult.OVERFLOW;
-                mark += inputSize;
-
-                if (outputSize == 2) {
-                    dst.put(highSurrogate);
-                    dst.put(lowSurrogate);
-                } else {
-                    dst.put(c);
-                }
-            }
-            return CoderResult.UNDERFLOW;
-        } finally {
-            src.position(mark);
-        }
-    }
-
-    protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-        if (src.hasArray() && dst.hasArray())
-            return decodeArrayLoop(src, dst);
-        else
-            return decodeBufferLoop(src, dst);
-    }
-
-    /*
-     * Can be changed by subclass
-     */
-    protected char decodeSingle(int b) {
-        if (b >= 0)
-            return (char) b;
-        return REPLACE_CHAR;
-    }
-
-    protected char decodeDouble(int byte1, int byte2) {
-        if (((byte1 < 0) || (byte1 > index1.length))
-            || ((byte2 < start) || (byte2 > end)))
-            return REPLACE_CHAR;
-
-        int n = (index1[byte1] & 0xf) * (end - start + 1) + (byte2 - start);
-        return index2[index1[byte1] >> 4].charAt(n);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/DoubleByteEncoder.java b/ojluni/src/main/java/sun/nio/cs/ext/DoubleByteEncoder.java
deleted file mode 100755
index bd28a38..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/DoubleByteEncoder.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.Surrogate;
-
-public abstract class DoubleByteEncoder
-    extends CharsetEncoder
-{
-
-    private short index1[];
-    private String index2[];
-
-    private final Surrogate.Parser sgp = new Surrogate.Parser();
-
-    protected DoubleByteEncoder(Charset cs,
-                                short[] index1, String[] index2)
-    {
-        super(cs, 2.0f, 2.0f);
-        this.index1 = index1;
-        this.index2 = index2;
-    }
-
-    protected DoubleByteEncoder(Charset cs,
-                                short[] index1, String[] index2,
-                                float avg, float max)
-    {
-        super(cs, avg, max);
-        this.index1 = index1;
-        this.index2 = index2;
-    }
-
-    protected DoubleByteEncoder(Charset cs,
-                                short[] index1, String[] index2, byte[] repl)
-    {
-        super(cs, 2.0f, 2.0f, repl);
-        this.index1 = index1;
-        this.index2 = index2;
-    }
-
-
-    protected DoubleByteEncoder(Charset cs,
-                                short[] index1, String[] index2,
-                                byte[] repl, float avg, float max)
-    {
-        super(cs, avg, max,repl);
-        this.index1 = index1;
-        this.index2 = index2;
-    }
-
-    public boolean canEncode(char c) {
-        return (encodeSingle(c) != -1 ||
-                encodeDouble(c) != 0);
-    }
-
-    private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
-        char[] sa = src.array();
-        int sp = src.arrayOffset() + src.position();
-        int sl = src.arrayOffset() + src.limit();
-        byte[] da = dst.array();
-        int dp = dst.arrayOffset() + dst.position();
-        int dl = dst.arrayOffset() + dst.limit();
-
-        try {
-            while (sp < sl) {
-                char c = sa[sp];
-                if (Character.isSurrogate(c)) {
-                    if (sgp.parse(c, sa, sp, sl) < 0)
-                        return sgp.error();
-                    if (sl - sp < 2)
-                        return CoderResult.UNDERFLOW;
-                    char c2 = sa[sp + 1];
-
-                    byte[] outputBytes = new byte[2];
-                    outputBytes = encodeSurrogate(c, c2);
-
-                    if (outputBytes == null) {
-                        return sgp.unmappableResult();
-                    }
-                    else {
-                        if (dl - dp < 2)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = outputBytes[0];
-                        da[dp++] = outputBytes[1];
-                        sp += 2;
-                        continue;
-                    }
-                }
-                if (c >= '\uFFFE')
-                    return CoderResult.unmappableForLength(1);
-
-                int b = encodeSingle(c);
-                if (b != -1) { // Single Byte
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = (byte)b;
-                    sp++;
-                    continue;
-                }
-
-                int ncode  = encodeDouble(c);
-                if (ncode != 0 && c != '\u0000' ) {
-                    if (dl - dp < 2)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = (byte) ((ncode & 0xff00) >> 8);
-                    da[dp++] = (byte) (ncode & 0xff);
-                    sp++;
-                    continue;
-                }
-                return CoderResult.unmappableForLength(1);
-                }
-            return CoderResult.UNDERFLOW;
-        } finally {
-            src.position(sp - src.arrayOffset());
-            dst.position(dp - dst.arrayOffset());
-        }
-    }
-
-    private CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
-        int mark = src.position();
-
-        try {
-            while (src.hasRemaining()) {
-                char c = src.get();
-                if (Character.isSurrogate(c)) {
-                    int surr;
-                    if ((surr = sgp.parse(c, src)) < 0)
-                        return sgp.error();
-                    char c2 = Surrogate.low(surr);
-                    byte[] outputBytes = new byte[2];
-                    outputBytes = encodeSurrogate(c, c2);
-
-                    if (outputBytes == null) {
-                        return sgp.unmappableResult();
-                    } else {
-                        if (dst.remaining() < 2)
-                            return CoderResult.OVERFLOW;
-                        mark += 2;
-                        dst.put(outputBytes[0]);
-                        dst.put(outputBytes[1]);
-                        continue;
-                    }
-                }
-                if (c >= '\uFFFE')
-                    return CoderResult.unmappableForLength(1);
-                int b = encodeSingle(c);
-
-                if (b != -1) { // Single-byte character
-                    if (dst.remaining() < 1)
-                        return CoderResult.OVERFLOW;
-                    mark++;
-                    dst.put((byte)b);
-                    continue;
-                }
-                // Double Byte character
-
-                int ncode = encodeDouble(c);
-                if (ncode != 0 && c != '\u0000') {
-                    if (dst.remaining() < 2)
-                        return CoderResult.OVERFLOW;
-                    mark++;
-                    dst.put((byte) ((ncode & 0xff00) >> 8));
-                    dst.put((byte) ncode);
-                    continue;
-                }
-                return CoderResult.unmappableForLength(1);
-            }
-
-            return CoderResult.UNDERFLOW;
-        } finally {
-            src.position(mark);
-        }
-    }
-
-    protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-        if (true && src.hasArray() && dst.hasArray())
-            return encodeArrayLoop(src, dst);
-        else
-            return encodeBufferLoop(src, dst);
-    }
-
-    /*
-     * Can be changed by subclass
-     */
-    protected int encodeDouble(char ch) {
-        int offset = index1[((ch & 0xff00) >> 8 )] << 8;
-        return index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
-    }
-
-    /*
-     * Can be changed by subclass
-     */
-    protected int encodeSingle(char inputChar) {
-        if (inputChar < 0x80)
-            return (byte)inputChar;
-        else
-            return -1;
-    }
-
-    /**
-     *  Protected method which should be overridden by concrete DBCS
-     *  CharsetEncoder classes which included supplementary characters
-     *  within their mapping coverage.
-     *  null return value indicates surrogate values could not be
-     *  handled or encoded.
-     */
-    protected byte[] encodeSurrogate(char highSurrogate, char lowSurrogate) {
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/EUC_JP.java b/ojluni/src/main/java/sun/nio/cs/ext/EUC_JP.java
deleted file mode 100755
index 53c868c..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/EUC_JP.java
+++ /dev/null
@@ -1,423 +0,0 @@
-/*
- * Copyright (c) 2002, 2010, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.HistoricallyNamedCharset;
-import sun.nio.cs.Surrogate;
-
-public class EUC_JP
-    extends Charset
-    implements HistoricallyNamedCharset
-{
-    public EUC_JP() {
-        super("EUC-JP", ExtendedCharsets.aliasesFor("EUC-JP"));
-    }
-
-    public String historicalName() {
-        return "EUC_JP";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof JIS_X_0201)
-                || (cs instanceof JIS_X_0208)
-                || (cs instanceof JIS_X_0212)
-                || (cs instanceof EUC_JP));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-
-        // Need to force the replacement byte to 0x3f
-        // because JIS_X_0208_Encoder defines its own
-        // alternative 2 byte substitution to permit it
-        // to exist as a self-standing Encoder
-
-        byte[] replacementBytes = { (byte)0x3f };
-        return new Encoder(this).replaceWith(replacementBytes);
-    }
-
-
-    static class Decoder extends JIS_X_0208_Decoder
-        implements DelegatableDecoder {
-
-        JIS_X_0201.Decoder decoderJ0201;
-        JIS_X_0212_Decoder decoderJ0212;
-
-        private static final short[] j0208Index1 =
-          JIS_X_0208_Decoder.getIndex1();
-        private static final String[] j0208Index2 =
-          JIS_X_0208_Decoder.getIndex2();
-
-        protected Decoder(Charset cs) {
-            super(cs);
-            decoderJ0201 = new JIS_X_0201.Decoder(cs);
-            decoderJ0212 = new JIS_X_0212_Decoder(cs);
-            start = 0xa1;
-            end = 0xfe;
-        }
-        protected char decode0212(int byte1, int byte2) {
-             return decoderJ0212.decodeDouble(byte1, byte2);
-        }
-
-        protected char decodeDouble(int byte1, int byte2) {
-            if (byte1 == 0x8e) {
-                return decoderJ0201.decode(byte2 - 256);
-            }
-            // Fix for bug 4121358 - similar fix for bug 4117820 put
-            // into ByteToCharDoubleByte.getUnicode()
-            if (((byte1 < 0) || (byte1 > getIndex1().length))
-                || ((byte2 < start) || (byte2 > end)))
-                return REPLACE_CHAR;
-
-            int n = (j0208Index1[byte1 - 0x80] & 0xf) * (end - start + 1)
-                    + (byte2 - start);
-            return j0208Index2[j0208Index1[byte1 - 0x80] >> 4].charAt(n);
-        }
-
-        private CoderResult decodeArrayLoop(ByteBuffer src,
-                                            CharBuffer dst)
-        {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            int b1 = 0, b2 = 0;
-            int inputSize = 0;
-            char outputChar = REPLACE_CHAR; // U+FFFD;
-
-            try {
-                while (sp < sl) {
-                    b1 = sa[sp] & 0xff;
-                    inputSize = 1;
-
-                    if ((b1 & 0x80) == 0) {
-                        outputChar = (char)b1;
-                    }
-                    else {      // Multibyte char
-                        if ((b1 & 0xff) == 0x8f) {   // JIS0212
-                            if (sp + 3 > sl)
-                               return CoderResult.UNDERFLOW;
-                            b1 = sa[sp + 1] & 0xff;
-                            b2 = sa[sp + 2] & 0xff;
-                            inputSize += 2;
-                            outputChar = decode0212(b1-0x80, b2-0x80);
-                        } else {
-                          // JIS0208
-                            if (sp + 2 > sl)
-                               return CoderResult.UNDERFLOW;
-                            b2 = sa[sp + 1] & 0xff;
-                            inputSize++;
-                            outputChar = decodeDouble(b1, b2);
-                        }
-                    }
-                    if (outputChar == REPLACE_CHAR) { // can't be decoded
-                        return CoderResult.unmappableForLength(inputSize);
-                    }
-                    if (dp + 1 > dl)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = outputChar;
-                    sp += inputSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult decodeBufferLoop(ByteBuffer src,
-                                             CharBuffer dst)
-        {
-            int mark = src.position();
-            int b1 = 0, b2 = 0;
-            int inputSize = 0;
-
-            char outputChar = REPLACE_CHAR; // U+FFFD;
-
-            try {
-                while (src.hasRemaining()) {
-                    b1 = src.get() & 0xff;
-                    inputSize = 1;
-
-                    if ((b1 & 0x80) == 0) {
-                        outputChar = (char)b1;
-                    } else {    // Multibyte char
-                        if ((b1 & 0xff) == 0x8f) {   // JIS0212
-                            if (src.remaining() < 2)
-                               return CoderResult.UNDERFLOW;
-                            b1 = src.get() & 0xff;
-                            b2 = src.get() & 0xff;
-                            inputSize += 2;
-                            outputChar = decode0212(b1-0x80, b2-0x80);
-                        } else {
-                          // JIS0208
-                            if (src.remaining() < 1)
-                               return CoderResult.UNDERFLOW;
-                            b2 = src.get() & 0xff;
-                            inputSize++;
-                            outputChar = decodeDouble(b1, b2);
-                        }
-                    }
-
-                    if (outputChar == REPLACE_CHAR) {
-                        return CoderResult.unmappableForLength(inputSize);
-                    }
-                if (dst.remaining() < 1)
-                    return CoderResult.OVERFLOW;
-                dst.put(outputChar);
-                mark += inputSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        // Make some protected methods public for use by JISAutoDetect
-        public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            if (src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-        public void implReset() {
-            super.implReset();
-        }
-        public CoderResult implFlush(CharBuffer out) {
-            return super.implFlush(out);
-        }
-    }
-
-
-    static class Encoder extends JIS_X_0208_Encoder {
-
-        JIS_X_0201.Encoder encoderJ0201;
-        JIS_X_0212_Encoder encoderJ0212;
-
-        private static final short[] j0208Index1 =
-          JIS_X_0208_Encoder.getIndex1();
-        private static final String[] j0208Index2 =
-          JIS_X_0208_Encoder.getIndex2();
-
-        private final Surrogate.Parser sgp = new Surrogate.Parser();
-
-        protected Encoder(Charset cs) {
-            super(cs, 3.0f, 3.0f);
-            encoderJ0201 = new JIS_X_0201.Encoder(cs);
-            encoderJ0212 = new JIS_X_0212_Encoder(cs);
-        }
-
-        public boolean canEncode(char c) {
-            byte[]  encodedBytes = new byte[3];
-
-            if (encodeSingle(c, encodedBytes) == 0) { //doublebyte
-                if (encodeDouble(c) == 0)
-                    return false;
-            }
-            return true;
-        }
-
-        protected int encodeSingle(char inputChar, byte[] outputByte) {
-            byte b;
-
-            if (inputChar == 0) {
-                outputByte[0] = (byte)0;
-                return 1;
-            }
-
-            if ((b = encoderJ0201.encode(inputChar)) == 0)
-                return 0;
-
-            if (b > 0 && b < 128) {
-                outputByte[0] = b;
-                return 1;
-            }
-
-            outputByte[0] = (byte)0x8e;
-            outputByte[1] = b;
-            return 2;
-        }
-
-        protected int encodeDouble(char ch) {
-            int offset = j0208Index1[((ch & 0xff00) >> 8 )] << 8;
-            int r = j0208Index2[offset >> 12].charAt((offset & 0xfff) +
-                    (ch & 0xff));
-            if (r != 0)
-                return r + 0x8080;
-            r = encoderJ0212.encodeDouble(ch);
-            if (r == 0)
-                return r;
-            return r + 0x8F8080;
-        }
-
-        private CoderResult encodeArrayLoop(CharBuffer src,
-                                            ByteBuffer dst)
-        {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            int outputSize = 0;
-            byte[]  outputByte;
-            int     inputSize = 0;                 // Size of input
-            byte[]  tmpBuf = new byte[3];
-
-            try {
-                while (sp < sl) {
-                    outputByte = tmpBuf;
-                    char c = sa[sp];
-
-                    if (Character.isSurrogate(c)) {
-                        if (sgp.parse(c, sa, sp, sl) < 0)
-                            return sgp.error();
-                        return sgp.unmappableResult();
-                    }
-
-                    outputSize = encodeSingle(c, outputByte);
-
-                    if (outputSize == 0) { // DoubleByte
-                        int ncode = encodeDouble(c);
-                        if (ncode != 0 ) {
-                            if ((ncode & 0xFF0000) == 0) {
-                                outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
-                                outputByte[1] = (byte) (ncode & 0xff);
-                                outputSize = 2;
-                            } else {
-                                outputByte[0] = (byte) 0x8f;
-                                outputByte[1] = (byte) ((ncode & 0xff00) >> 8);
-                                outputByte[2] = (byte) (ncode & 0xff);
-                                outputSize = 3;
-                            }
-                        } else {
-                                return CoderResult.unmappableForLength(1);
-                        }
-                    }
-                    if (dl - dp < outputSize)
-                        return CoderResult.OVERFLOW;
-                    // Put the byte in the output buffer
-                    for (int i = 0; i < outputSize; i++) {
-                        da[dp++] = outputByte[i];
-                    }
-                    sp++;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult encodeBufferLoop(CharBuffer src,
-                                             ByteBuffer dst)
-        {
-            int outputSize = 0;
-            byte[]  outputByte;
-            int     inputSize = 0;                 // Size of input
-            byte[]  tmpBuf = new byte[3];
-
-            int mark = src.position();
-
-            try {
-                while (src.hasRemaining()) {
-                    outputByte = tmpBuf;
-                    char c = src.get();
-                    if (Character.isSurrogate(c)) {
-                        if (sgp.parse(c, src) < 0)
-                            return sgp.error();
-                        return sgp.unmappableResult();
-                    }
-
-                    outputSize = encodeSingle(c, outputByte);
-                    if (outputSize == 0) { // DoubleByte
-                        int ncode = encodeDouble(c);
-                        if (ncode != 0 ) {
-                            if ((ncode & 0xFF0000) == 0) {
-                                outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
-                                outputByte[1] = (byte) (ncode & 0xff);
-                                outputSize = 2;
-                            } else {
-                                outputByte[0] = (byte) 0x8f;
-                                outputByte[1] = (byte) ((ncode & 0xff00) >> 8);
-                                outputByte[2] = (byte) (ncode & 0xff);
-                                outputSize = 3;
-                            }
-                        } else {
-                                return CoderResult.unmappableForLength(1);
-                        }
-                    }
-
-                    if (dst.remaining() < outputSize)
-                        return CoderResult.OVERFLOW;
-                    // Put the byte in the output buffer
-                    for (int i = 0; i < outputSize; i++) {
-                        dst.put(outputByte[i]);
-                    }
-                    mark++;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src,
-                                         ByteBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return encodeArrayLoop(src, dst);
-            else
-                return encodeBufferLoop(src, dst);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/EUC_JP_LINUX.java b/ojluni/src/main/java/sun/nio/cs/ext/EUC_JP_LINUX.java
deleted file mode 100755
index dccb0f8..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/EUC_JP_LINUX.java
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * Copyright (c) 2002, 2010, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.HistoricallyNamedCharset;
-import sun.nio.cs.Surrogate;
-
-public class EUC_JP_LINUX
-    extends Charset
-    implements HistoricallyNamedCharset
-{
-    public EUC_JP_LINUX() {
-        super("x-euc-jp-linux", ExtendedCharsets.aliasesFor("x-euc-jp-linux"));
-    }
-
-    public String historicalName() {
-        return "EUC_JP_LINUX";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs instanceof JIS_X_0201)
-               || (cs.name().equals("US-ASCII"))
-               || (cs instanceof EUC_JP_LINUX));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    private static class Decoder extends CharsetDecoder {
-        JIS_X_0201.Decoder decoderJ0201;
-        protected final char REPLACE_CHAR='\uFFFD';
-
-        private static final int start = 0xa1;
-        private static final int end = 0xfe;
-        private static final short[] jis0208Index1 =
-            JIS_X_0208_Decoder.getIndex1();
-        private static final String[] jis0208Index2 =
-            JIS_X_0208_Decoder.getIndex2();
-
-        private Decoder(Charset cs) {
-            super(cs, 1.0f, 1.0f);
-            decoderJ0201 = new JIS_X_0201.Decoder(cs);
-        }
-
-        protected char convSingleByte(int b) {
-            if (b < 0 || b > 0x7f)
-                return REPLACE_CHAR;
-            return decoderJ0201.decode(b);
-        }
-
-        protected char decodeDouble(int byte1, int byte2) {
-            if (byte1 == 0x8e) {
-                return decoderJ0201.decode(byte2 - 256);
-            }
-
-            if (((byte1 < 0) || (byte1 > jis0208Index1.length))
-                || ((byte2 < start) || (byte2 > end)))
-                return REPLACE_CHAR;
-
-            int n = (jis0208Index1[byte1 - 0x80] & 0xf) * (end - start + 1)
-                    + (byte2 - start);
-            return jis0208Index2[jis0208Index1[byte1 - 0x80] >> 4].charAt(n);
-        }
-
-        private CoderResult decodeArrayLoop(ByteBuffer src,
-                                            CharBuffer dst)
-        {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            int b1 = 0, b2 = 0;
-            int inputSize = 0;
-            char outputChar = REPLACE_CHAR; // U+FFFD;
-
-            try {
-                while (sp < sl) {
-                    b1 = sa[sp] & 0xff;
-                    inputSize = 1;
-                    if ((b1 & 0x80) == 0) {
-                        outputChar = (char)b1;
-                    }
-                    else {      // Multibyte char
-                        if ((b1 & 0xff) == 0x8f) {   // JIS0212
-                            if (sp + 3 > sl)
-                               return CoderResult.UNDERFLOW;
-                            inputSize = 3;
-                            return CoderResult.unmappableForLength(inputSize); // substitute
-                        } else {
-                          // JIS0208
-                            if (sp + 2 > sl)
-                               return CoderResult.UNDERFLOW;
-                            b2 = sa[sp + 1] & 0xff;
-                            inputSize = 2;
-                            outputChar = decodeDouble(b1, b2);
-                        }
-                    }
-                    if (outputChar == REPLACE_CHAR) { // can't be decoded
-                        return CoderResult.unmappableForLength(inputSize);
-                    }
-                    if (dp + 1 > dl)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = outputChar;
-                    sp += inputSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult decodeBufferLoop(ByteBuffer src,
-                                             CharBuffer dst)
-        {
-            int mark = src.position();
-            char outputChar = REPLACE_CHAR; // U+FFFD;
-
-            try {
-                while (src.hasRemaining()) {
-                    int b1 = src.get() & 0xff;
-                    int inputSize = 1;
-
-                    if ((b1 & 0x80) == 0) {
-                        outputChar = (char)b1;
-                    } else {    // Multibyte char
-
-                        if ((b1 & 0xff) == 0x8f) { // JIS0212 not supported
-                            if (src.remaining() < 2)
-                                return CoderResult.UNDERFLOW;
-                            return CoderResult.unmappableForLength(3);
-                        } else {
-                            // JIS0208
-                            if (src.remaining() < 1)
-                                return CoderResult.UNDERFLOW;
-                            int b2 = src.get() & 0xff;
-                            inputSize++;
-                            outputChar = decodeDouble(b1, b2);
-                        }
-                    }
-
-                    if (outputChar == REPLACE_CHAR)
-                        return CoderResult.unmappableForLength(inputSize);
-                    if (dst.remaining() < 1)
-                        return CoderResult.OVERFLOW;
-                    dst.put(outputChar);
-                    mark += inputSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src,
-                                         CharBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-    }
-
-
-    private static class Encoder extends CharsetEncoder {
-
-        JIS_X_0201.Encoder encoderJ0201;
-
-        private final Surrogate.Parser sgp = new Surrogate.Parser();
-        private static final short[] jis0208Index1 =
-            JIS_X_0208_Encoder.getIndex1();
-        private static final String[] jis0208Index2 =
-            JIS_X_0208_Encoder.getIndex2();
-
-        private Encoder(Charset cs) {
-            super(cs, 2.0f, 2.0f);
-            encoderJ0201 = new JIS_X_0201.Encoder(cs);
-        }
-
-        public boolean canEncode(char c) {
-            byte[]  encodedBytes = new byte[2];
-
-            if (encodeSingle(c, encodedBytes) == 0) { //doublebyte
-                if (encodeDouble(c) == 0)
-                    return false;
-            }
-            return true;
-        }
-
-        protected int encodeSingle(char inputChar, byte[] outputByte) {
-            byte b;
-
-            if (inputChar == 0) {
-                outputByte[0] = (byte)0;
-                return 1;
-            }
-
-            if ((b = encoderJ0201.encode(inputChar)) == 0)
-                return 0;
-
-            if (b > 0 && b < 128) {
-                outputByte[0] = b;
-                return 1;
-            }
-            outputByte[0] = (byte)0x8e;
-            outputByte[1] = b;
-            return 2;
-        }
-
-        protected int encodeDouble(char ch) {
-            int offset = jis0208Index1[((ch & 0xff00) >> 8 )] << 8;
-            int r = jis0208Index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
-            if (r != 0)
-                return r + 0x8080;
-            return r;
-        }
-
-        private CoderResult encodeArrayLoop(CharBuffer src,
-                                            ByteBuffer dst)
-        {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            final byte[]  outputByte = new byte[2];
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-
-                    if (Character.isSurrogate(c)) {
-                        if (sgp.parse(c, sa, sp, sl) < 0)
-                            return sgp.error();
-                        return sgp.unmappableResult();
-                    }
-
-                    int outputSize = encodeSingle(c, outputByte);
-                    if (outputSize == 0) { // DoubleByte
-                        int ncode = encodeDouble(c);
-                        if (ncode != 0 && ((ncode & 0xFF0000) == 0)) {
-                                outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
-                                outputByte[1] = (byte) (ncode & 0xff);
-                                outputSize = 2;
-                        } else {
-                                return CoderResult.unmappableForLength(1);
-                        }
-                    }
-
-                    if (dl - dp < outputSize)
-                        return CoderResult.OVERFLOW;
-                    // Put the byte in the output buffer
-                    for (int i = 0; i < outputSize; i++) {
-                        da[dp++] = outputByte[i];
-                    }
-                    sp++;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult encodeBufferLoop(CharBuffer src,
-                                             ByteBuffer dst)
-        {
-            final byte[]  outputByte = new byte[4];
-            int mark = src.position();
-
-            try {
-                while (src.hasRemaining()) {
-                    char c = src.get();
-                    if (Character.isSurrogate(c)) {
-                        if (sgp.parse(c, src) < 0)
-                            return sgp.error();
-                        return sgp.unmappableResult();
-                    }
-
-                    int outputSize = encodeSingle(c, outputByte);
-                    if (outputSize == 0) { // DoubleByte
-                        int ncode = encodeDouble(c);
-                        if (ncode != 0 ) {
-                            if ((ncode & 0xFF0000) == 0) {
-                                outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
-                                outputByte[1] = (byte) (ncode & 0xff);
-                                outputSize = 2;
-                            }
-                        } else {
-                                return CoderResult.unmappableForLength(1);
-                        }
-                    }
-
-                    if (dst.remaining() < outputSize)
-                        return CoderResult.OVERFLOW;
-
-                    // Put the byte in the output buffer
-                    for (int i = 0; i < outputSize; i++) {
-                        dst.put(outputByte[i]);
-                    }
-                    mark++;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src,
-                                         ByteBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return encodeArrayLoop(src, dst);
-            else
-                return encodeBufferLoop(src, dst);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/EUC_JP_Open.java b/ojluni/src/main/java/sun/nio/cs/ext/EUC_JP_Open.java
deleted file mode 100755
index d6ad2fa..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/EUC_JP_Open.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.HistoricallyNamedCharset;
-import sun.nio.cs.Surrogate;
-
-public class EUC_JP_Open
-    extends Charset
-    implements HistoricallyNamedCharset
-{
-    public EUC_JP_Open() {
-        super("x-eucJP-Open", ExtendedCharsets.aliasesFor("x-eucJP-Open"));
-    }
-
-    public String historicalName() {
-        return "EUC_JP_Solaris";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof JIS_X_0201)
-                || (cs instanceof EUC_JP));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-
-        // Need to force the replacement byte to 0x3f
-        // because JIS_X_0208_Encoder defines its own
-        // alternative 2 byte substitution to permit it
-        // to exist as a self-standing Encoder
-
-        byte[] replacementBytes = { (byte)0x3f };
-        return new Encoder(this).replaceWith(replacementBytes);
-    }
-
-    private static class Decoder extends EUC_JP.Decoder {
-        JIS_X_0201.Decoder decoderJ0201;
-        JIS_X_0212_Solaris_Decoder decodeMappingJ0212;
-        JIS_X_0208_Solaris_Decoder decodeMappingJ0208;
-
-        private static final short[] j0208Index1 =
-          JIS_X_0208_Solaris_Decoder.getIndex1();
-        private static final String[] j0208Index2 =
-          JIS_X_0208_Solaris_Decoder.getIndex2();
-        private static final int start = 0xa1;
-        private static final int end = 0xfe;
-
-        protected final char REPLACE_CHAR='\uFFFD';
-
-        private Decoder(Charset cs) {
-            super(cs);
-            decoderJ0201 = new JIS_X_0201.Decoder(cs);
-            decodeMappingJ0212 = new JIS_X_0212_Solaris_Decoder(cs);
-        }
-
-
-        protected char decode0212(int byte1, int byte2) {
-             return decodeMappingJ0212.decodeDouble(byte1, byte2);
-
-        }
-
-        protected char decodeDouble(int byte1, int byte2) {
-            if (byte1 == 0x8e) {
-                return decoderJ0201.decode(byte2 - 256);
-            }
-
-            if (((byte1 < 0)
-                || (byte1 > j0208Index1.length))
-                || ((byte2 < start)
-                || (byte2 > end)))
-                return REPLACE_CHAR;
-
-            char result = super.decodeDouble(byte1, byte2);
-            if (result != '\uFFFD') {
-                return result;
-            } else {
-                int n = (j0208Index1[byte1 - 0x80] & 0xf) *
-                        (end - start + 1)
-                        + (byte2 - start);
-                return j0208Index2[j0208Index1[byte1 - 0x80] >> 4].charAt(n);
-            }
-        }
-    }
-
-
-    private static class Encoder extends EUC_JP.Encoder {
-
-        JIS_X_0201.Encoder encoderJ0201;
-        JIS_X_0212_Solaris_Encoder encoderJ0212;
-
-        private static final short[] j0208Index1 =
-            JIS_X_0208_Solaris_Encoder.getIndex1();
-        private static final String[] j0208Index2 =
-            JIS_X_0208_Solaris_Encoder.getIndex2();
-
-        private final Surrogate.Parser sgp = new Surrogate.Parser();
-
-        private Encoder(Charset cs) {
-            super(cs);
-            encoderJ0201 = new JIS_X_0201.Encoder(cs);
-            encoderJ0212 = new JIS_X_0212_Solaris_Encoder(cs);
-        }
-
-        protected int encodeSingle(char inputChar, byte[] outputByte) {
-            byte b;
-
-            if (inputChar == 0) {
-                outputByte[0] = (byte)0;
-                return 1;
-            }
-
-            if ((b = encoderJ0201.encode(inputChar)) == 0)
-                return 0;
-
-            if (b > 0 && b < 128) {
-                outputByte[0] = b;
-                return 1;
-            }
-
-            outputByte[0] = (byte)0x8e;
-            outputByte[1] = b;
-            return 2;
-        }
-
-        protected int encodeDouble(char ch) {
-            int r = super.encodeDouble(ch);
-            if (r != 0) {
-                return r;
-            }
-            else {
-                int offset = j0208Index1[((ch & 0xff00) >> 8 )] << 8;
-                r = j0208Index2[offset >> 12].charAt((offset & 0xfff) +
-                    (ch & 0xFF));
-                if (r > 0x7500)
-                   return 0x8F8080 + encoderJ0212.encodeDouble(ch);
-                }
-                return (r==0 ? 0: r + 0x8080);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/EUC_TW.java b/ojluni/src/main/java/sun/nio/cs/ext/EUC_TW.java
deleted file mode 100755
index d922eff..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/EUC_TW.java
+++ /dev/null
@@ -1,546 +0,0 @@
-/*
- * Copyright (c) 2009, 2010, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.io.*;
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import java.util.Arrays;
-import sun.nio.cs.HistoricallyNamedCharset;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class EUC_TW extends Charset implements HistoricallyNamedCharset
-{
-    private static final int SS2 = 0x8E;
-
-    /*
-       (1) EUC_TW
-       Second byte of EUC_TW for cs2 is in range of
-       0xA1-0xB0 for plane 1-16. According to CJKV /163,
-       plane1 is coded in both cs1 and cs2. This impl
-       however does not decode the codepoints of plane1
-       in cs2, so only p2-p7 and p15 are supported in cs2.
-
-       Plane2  0xA2;
-       Plane3  0xA3;
-       Plane4  0xA4;
-       Plane5  0xA5;
-       Plane6  0xA6;
-       Plane7  0xA7;
-       Plane15 0xAF;
-
-       (2) Mapping
-       The fact that all supplementary characters encoded in EUC_TW are
-       in 0x2xxxx range gives us the room to optimize the data tables.
-
-       Decoding:
-       (1) save the lower 16-bit value of all codepoints of b->c mapping
-           in a String array table  String[plane] b2c.
-       (2) save "codepoint is supplementary" info (one bit) in a
-           byte[] b2cIsSupp, so 8 codepoints (same codepoint value, different
-           plane No) share one byte.
-
-       Encoding:
-       (1)c->b mappings are stored in
-          char[]c2b/char[]c2bIndex
-          char[]c2bSupp/char[]c2bIndexsupp  (indexed by lower 16-bit
-       (2)byte[] c2bPlane stores the "plane info" of each euc-tw codepoints,
-          BMP and Supp share the low/high 4 bits of one byte.
-
-       Mapping tables are stored separated in EUC_TWMapping, which
-       is generated by tool.
-     */
-
-    public EUC_TW() {
-        super("x-EUC-TW", ExtendedCharsets.aliasesFor("x-EUC-TW"));
-    }
-
-    public String historicalName() {
-        return "EUC_TW";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof EUC_TW));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    public static class Decoder extends CharsetDecoder {
-        public Decoder(Charset cs) {
-            super(cs, 2.0f, 2.0f);
-        }
-
-        char[] c1 = new char[1];
-        char[] c2 = new char[2];
-        public char[] toUnicode(int b1, int b2, int p) {
-            return decode(b1, b2, p, c1, c2);
-        }
-
-        static final String[] b2c =  EUC_TWMapping.b2c;
-        static final int b1Min    =  EUC_TWMapping.b1Min;
-        static final int b1Max    =  EUC_TWMapping.b1Max;
-        static final int b2Min    =  EUC_TWMapping.b2Min;
-        static final int b2Max    =  EUC_TWMapping.b2Max;
-        static final int dbSegSize = b2Max - b2Min + 1;
-        static final byte[] b2cIsSupp;
-
-        // adjust from cns planeNo to the plane index of b2c
-        static final byte[] cnspToIndex = new byte[0x100];
-        static {
-            Arrays.fill(cnspToIndex, (byte)-1);
-            cnspToIndex[0xa2] = 1; cnspToIndex[0xa3] = 2; cnspToIndex[0xa4] = 3;
-            cnspToIndex[0xa5] = 4; cnspToIndex[0xa6] = 5; cnspToIndex[0xa7] = 6;
-            cnspToIndex[0xaf] = 7;
-        }
-
-        //static final BitSet b2cIsSupp;
-        static {
-            String b2cIsSuppStr = EUC_TWMapping.b2cIsSuppStr;
-            // work on a local copy is much faster than operate
-            // directly on b2cIsSupp
-            byte[] flag = new byte[b2cIsSuppStr.length() << 1];
-            int off = 0;
-            for (int i = 0; i < b2cIsSuppStr.length(); i++) {
-                char c = b2cIsSuppStr.charAt(i);
-                flag[off++] = (byte)(c >> 8);
-                flag[off++] = (byte)(c & 0xff);
-            }
-            b2cIsSupp = flag;
-        }
-
-        static boolean isLegalDB(int b) {
-           return b >= b1Min && b <= b1Max;
-        }
-
-        static char[] decode(int b1, int b2, int p, char[] c1, char[] c2)
-        {
-            if (b1 < b1Min || b1 > b1Max || b2 < b2Min || b2 > b2Max)
-                return null;
-            int index = (b1 - b1Min) * dbSegSize + b2 - b2Min;
-            char c = b2c[p].charAt(index);
-            if (c == UNMAPPABLE_DECODING)
-                return null;
-            if ((b2cIsSupp[index] & (1 << p)) == 0) {
-                c1[0] = c;
-                return c1;
-            } else {
-                c2[0] = Character.highSurrogate(0x20000 + c);
-                c2[1] = Character.lowSurrogate(0x20000 + c);
-                return c2;
-            }
-        }
-
-        private CoderResult decodeArrayLoop(ByteBuffer src,
-                                            CharBuffer dst)
-        {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            try {
-                while (sp < sl) {
-                    int byte1 = sa[sp] & 0xff;
-                    if (byte1 == SS2) { // Codeset 2  G2
-                        if ( sl - sp < 4)
-                            return CoderResult.UNDERFLOW;
-                        int cnsPlane = cnspToIndex[sa[sp + 1] & 0xff];
-                        if (cnsPlane < 0)
-                            return CoderResult.malformedForLength(2);
-                        byte1 = sa[sp + 2] & 0xff;
-                        int byte2 = sa[sp + 3] & 0xff;
-                        char[] cc = toUnicode(byte1, byte2, cnsPlane);
-                        if (cc == null) {
-                            if (!isLegalDB(byte1) || !isLegalDB(byte2))
-                                return CoderResult.malformedForLength(4);
-                            return CoderResult.unmappableForLength(4);
-                        }
-                        if (dl - dp < cc.length)
-                            return CoderResult.OVERFLOW;
-                        if (cc.length == 1) {
-                            da[dp++] = cc[0];
-                        } else {
-                            da[dp++] = cc[0];
-                            da[dp++] = cc[1];
-                        }
-                        sp += 4;
-                    } else if (byte1 < 0x80) {  // ASCII      G0
-                        if (dl - dp < 1)
-                           return CoderResult.OVERFLOW;
-                        da[dp++] = (char) byte1;
-                        sp++;
-                    } else {                    // Codeset 1  G1
-                        if ( sl - sp < 2)
-                            return CoderResult.UNDERFLOW;
-                        int byte2 = sa[sp + 1] & 0xff;
-                        char[] cc = toUnicode(byte1, byte2, 0);
-                        if (cc == null) {
-                            if (!isLegalDB(byte1) || !isLegalDB(byte2))
-                                return CoderResult.malformedForLength(1);
-                            return CoderResult.unmappableForLength(2);
-                        }
-                        if (dl - dp < 1)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = cc[0];
-                        sp += 2;
-                    }
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult decodeBufferLoop(ByteBuffer src,
-                                             CharBuffer dst)
-        {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    int byte1 = src.get() & 0xff;
-                    if (byte1 == SS2) {            // Codeset 2  G2
-                        if ( src.remaining() < 3)
-                            return CoderResult.UNDERFLOW;
-                        int cnsPlane = cnspToIndex[src.get() & 0xff];
-                        if (cnsPlane < 0)
-                            return CoderResult.malformedForLength(2);
-                        byte1 = src.get() & 0xff;
-                        int byte2 = src.get() & 0xff;
-                        char[] cc = toUnicode(byte1, byte2, cnsPlane);
-                        if (cc == null) {
-                            if (!isLegalDB(byte1) || !isLegalDB(byte2))
-                                return CoderResult.malformedForLength(4);
-                            return CoderResult.unmappableForLength(4);
-                        }
-                        if (dst.remaining() < cc.length)
-                            return CoderResult.OVERFLOW;
-                        if (cc.length == 1) {
-                            dst.put(cc[0]);
-                        } else {
-                            dst.put(cc[0]);
-                            dst.put(cc[1]);
-                        }
-                        mark += 4;
-                    } else if (byte1 < 0x80) {        // ASCII      G0
-                        if (!dst.hasRemaining())
-                           return CoderResult.OVERFLOW;
-                        dst.put((char) byte1);
-                        mark++;
-                    } else {                          // Codeset 1  G1
-                        if (!src.hasRemaining())
-                            return CoderResult.UNDERFLOW;
-                        int byte2 = src.get() & 0xff;
-                        char[] cc = toUnicode(byte1, byte2, 0);
-                        if (cc == null) {
-                            if (!isLegalDB(byte1) || !isLegalDB(byte2))
-                                return CoderResult.malformedForLength(1);
-                            return CoderResult.unmappableForLength(2);
-                        }
-                        if (!dst.hasRemaining())
-                            return CoderResult.OVERFLOW;
-                        dst.put(cc[0]);
-                        mark +=2;
-                    }
-               }
-               return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-    }
-
-    public static class Encoder extends CharsetEncoder {
-        private byte[] bb = new byte[4];
-
-        public Encoder(Charset cs) {
-            super(cs, 4.0f, 4.0f);
-        }
-
-        public boolean canEncode(char c) {
-            return (c <= '\u007f' || toEUC(c, bb) != -1);
-        }
-
-        public boolean canEncode(CharSequence cs) {
-            int i = 0;
-            while (i < cs.length()) {
-                char c = cs.charAt(i++);
-                if (Character.isHighSurrogate(c)) {
-                    if (i == cs.length())
-                        return false;
-                    char low = cs.charAt(i++);
-                    if (!Character.isLowSurrogate(low) || toEUC(c, low, bb) == -1)
-                        return false;
-                } else if (!canEncode(c)) {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        public int toEUC(char hi, char low, byte[] bb) {
-            return encode(hi, low, bb);
-        }
-
-        public int toEUC(char c, byte[] bb) {
-            return encode(c, bb);
-        }
-
-        private CoderResult encodeArrayLoop(CharBuffer src,
-                                            ByteBuffer dst)
-        {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            int inSize;
-            int outSize;
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    inSize = 1;
-                    if (c < 0x80) {  // ASCII
-                        bb[0] = (byte)c;
-                        outSize = 1;
-                    } else {
-                        outSize = toEUC(c, bb);
-                        if (outSize == -1) {
-                            // to check surrogates only after BMP failed
-                            // has the benefit of improving the BMP encoding
-                            // 10% faster, with the price of the slowdown of
-                            // supplementary character encoding. given the use
-                            // of supplementary characters is really rare, this
-                            // is something worth doing.
-                            if (Character.isHighSurrogate(c)) {
-                                if ((sp + 1) == sl)
-                                    return CoderResult.UNDERFLOW;
-                                if (!Character.isLowSurrogate(sa[sp + 1]))
-                                    return CoderResult.malformedForLength(1);
-                                outSize = toEUC(c, sa[sp+1], bb);
-                                    inSize = 2;
-                            } else if (Character.isLowSurrogate(c)) {
-                                return CoderResult.malformedForLength(1);
-                            }
-                        }
-                    }
-                    if (outSize == -1)
-                        return CoderResult.unmappableForLength(inSize);
-                    if ( dl - dp < outSize)
-                        return CoderResult.OVERFLOW;
-                    for (int i = 0; i < outSize; i++)
-                        da[dp++] = bb[i];
-                    sp  += inSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult encodeBufferLoop(CharBuffer src,
-                                             ByteBuffer dst)
-        {
-            int outSize;
-            int inSize;
-            int mark = src.position();
-
-            try {
-                while (src.hasRemaining()) {
-                    inSize = 1;
-                    char c = src.get();
-                    if (c < 0x80) {   // ASCII
-                        outSize = 1;
-                        bb[0] = (byte)c;
-                    } else {
-                        outSize = toEUC(c, bb);
-                        if (outSize == -1) {
-                            if (Character.isHighSurrogate(c)) {
-                                if (!src.hasRemaining())
-                                    return CoderResult.UNDERFLOW;
-                                char c2 = src.get();
-                                if (!Character.isLowSurrogate(c2))
-                                    return CoderResult.malformedForLength(1);
-                                outSize = toEUC(c, c2, bb);
-                                inSize = 2;
-                            } else if (Character.isLowSurrogate(c)) {
-                                return CoderResult.malformedForLength(1);
-                            }
-                        }
-                    }
-                    if (outSize == -1)
-                        return CoderResult.unmappableForLength(inSize);
-                    if (dst.remaining() < outSize)
-                        return CoderResult.OVERFLOW;
-                    for (int i = 0; i < outSize; i++)
-                        dst.put(bb[i]);
-                    mark += inSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return encodeArrayLoop(src, dst);
-            else
-                return encodeBufferLoop(src, dst);
-        }
-
-        static int encode(char hi, char low, byte[] bb) {
-            int c = Character.toCodePoint(hi, low);
-            if ((c & 0xf0000) != 0x20000)
-                return -1;
-            c -= 0x20000;
-            int index = c2bSuppIndex[c >> 8];
-            if (index  == UNMAPPABLE_ENCODING)
-                return -1;
-            index = index + (c & 0xff);
-            int db = c2bSupp[index];
-            if (db == UNMAPPABLE_ENCODING)
-                return -1;
-            int p = (c2bPlane[index] >> 4) & 0xf;
-            bb[0] = (byte)SS2;
-            bb[1] = (byte)(0xa0 | p);
-            bb[2] = (byte)(db >> 8);
-            bb[3] = (byte)db;
-            return 4;
-        }
-
-        static int encode(char c, byte[] bb) {
-            int index = c2bIndex[c >> 8];
-            if (index  == UNMAPPABLE_ENCODING)
-                return -1;
-            index = index + (c & 0xff);
-            int db = c2b[index];
-            if (db == UNMAPPABLE_ENCODING)
-                return -1;
-            int p = c2bPlane[index] & 0xf;
-            if (p == 0) {
-                bb[0] = (byte)(db >> 8);
-                bb[1] = (byte)db;
-                return 2;
-            } else {
-                bb[0] = (byte)SS2;
-                bb[1] = (byte)(0xa0 | p);
-                bb[2] = (byte)(db >> 8);
-                bb[3] = (byte)db;
-                return 4;
-            }
-        }
-
-        static final char[] c2b;
-        static final char[] c2bIndex;
-        static final char[] c2bSupp;
-        static final char[] c2bSuppIndex;
-        static final byte[] c2bPlane;
-        static {
-            int b1Min    =  Decoder.b1Min;
-            int b1Max    =  Decoder.b1Max;
-            int b2Min    =  Decoder.b2Min;
-            int b2Max    =  Decoder.b2Max;
-            int dbSegSize = Decoder.dbSegSize;
-            String[] b2c = Decoder.b2c;
-            byte[] b2cIsSupp = Decoder.b2cIsSupp;
-
-            c2bIndex = EUC_TWMapping.c2bIndex;
-            c2bSuppIndex = EUC_TWMapping.c2bSuppIndex;
-            char[] c2b0 = new char[EUC_TWMapping.C2BSIZE];
-            char[] c2bSupp0 = new char[EUC_TWMapping.C2BSUPPSIZE];
-            byte[] c2bPlane0 = new byte[Math.max(EUC_TWMapping.C2BSIZE,
-                                                 EUC_TWMapping.C2BSUPPSIZE)];
-
-            Arrays.fill(c2b0, (char)UNMAPPABLE_ENCODING);
-            Arrays.fill(c2bSupp0, (char)UNMAPPABLE_ENCODING);
-
-            for (int p = 0; p < b2c.length; p++) {
-                String db = b2c[p];
-                /*
-                   adjust the "plane" from 0..7 to 0, 2, 3, 4, 5, 6, 7, 0xf,
-                   which helps balance between footprint (to save the plane
-                   info in 4 bits) and runtime performance (to require only
-                   one operation "0xa0 | plane" to encode the plane byte)
-                */
-                int plane = p;
-                if (plane == 7)
-                    plane = 0xf;
-                else if (plane != 0)
-                    plane = p + 1;
-
-                int off = 0;
-                for (int b1 = b1Min; b1 <= b1Max; b1++) {
-                    for (int b2 = b2Min; b2 <= b2Max; b2++) {
-                        char c = db.charAt(off);
-                        if (c != UNMAPPABLE_DECODING) {
-                            if ((b2cIsSupp[off] & (1 << p)) != 0) {
-                                int index = c2bSuppIndex[c >> 8] + (c&0xff);
-                                c2bSupp0[index] = (char)((b1 << 8) + b2);
-                                c2bPlane0[index] |= (byte)(plane << 4);
-                            } else {
-                                int index = c2bIndex[c >> 8] + (c&0xff);
-                                c2b0[index] = (char)((b1 << 8) + b2);
-                                c2bPlane0[index] |= (byte)plane;
-                            }
-                        }
-                        off++;
-                    }
-                }
-            }
-            c2b = c2b0;
-            c2bSupp = c2bSupp0;
-            c2bPlane = c2bPlane0;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/ExtendedCharsets.java b/ojluni/src/main/java/sun/nio/cs/ext/ExtendedCharsets.java
deleted file mode 100755
index 299db8f..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/ExtendedCharsets.java
+++ /dev/null
@@ -1,1299 +0,0 @@
-/*
- * Copyright (c) 2002, 2012, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.lang.ref.SoftReference;
-import java.nio.charset.Charset;
-import java.nio.charset.spi.CharsetProvider;
-import sun.nio.cs.AbstractCharsetProvider;
-import java.security.AccessController;
-import sun.security.action.GetPropertyAction;
-
-
-/**
- * Provider for extended charsets.
- */
-
-public class ExtendedCharsets
-    extends AbstractCharsetProvider
-{
-
-    static volatile ExtendedCharsets instance = null;
-
-    public ExtendedCharsets() {
-
-        super("sun.nio.cs.ext");  // identify provider pkg name.
-
-        // Traditional Chinese
-
-        charset("Big5", "Big5",
-                new String[] {
-                    // IANA aliases
-                    "csBig5"
-                });
-
-        charset("x-MS950-HKSCS-XP", "MS950_HKSCS_XP",
-                new String[] {
-                    "MS950_HKSCS_XP"  // JDK historical;
-                });
-
-        charset("x-MS950-HKSCS", "MS950_HKSCS",
-                new String[] {
-                    // IANA aliases
-                    "MS950_HKSCS"     // JDK historical;
-                });
-
-        charset("x-windows-950", "MS950",
-                new String[] {
-                    "ms950",    // JDK historical
-                    "windows-950"
-                });
-
-        charset("x-windows-874", "MS874",
-                new String[] {
-                    "ms874",  // JDK historical
-                    "ms-874",
-                    "windows-874" });
-
-        charset("x-EUC-TW", "EUC_TW",
-                new String[] {
-                    "euc_tw", // JDK historical
-                    "euctw",
-                    "cns11643",
-                    "EUC-TW"
-                });
-
-        charset("Big5-HKSCS", "Big5_HKSCS",
-                new String[] {
-                    "Big5_HKSCS", // JDK historical
-                    "big5hk",
-                    "big5-hkscs",
-                    "big5hkscs"   // Linux alias
-                });
-
-        charset("x-Big5-HKSCS-2001", "Big5_HKSCS_2001",
-                new String[] {
-                    "Big5_HKSCS_2001",
-                    "big5hk-2001",
-                    "big5-hkscs-2001",
-                    "big5-hkscs:unicode3.0",
-                    "big5hkscs-2001",
-                });
-
-        charset("x-Big5-Solaris", "Big5_Solaris",
-                new String[] {
-                    "Big5_Solaris", // JDK historical
-                });
-
-        // Simplified Chinese
-        charset("GBK", "GBK",
-                new String[] {
-                    "windows-936",
-                    "CP936"
-                });
-
-        charset("GB18030", "GB18030",
-                new String[] {
-                    "gb18030-2000"
-                });
-
-        charset("GB2312", "EUC_CN",
-                new String[] {
-                    // IANA aliases
-                    "gb2312",
-                    "gb2312-80",
-                    "gb2312-1980",
-                    "euc-cn",
-                    "euccn",
-                    "x-EUC-CN", // 1.4 compatability
-                    "EUC_CN" //JDK historical
-                });
-
-        charset("x-mswin-936", "MS936",
-                new String[] {
-                    "ms936", // historical
-                    // IANA aliases
-                    "ms_936"
-                });
-
-        // The definition of this charset may be overridden by the init method,
-        // below, if the sun.nio.cs.map property is defined.
-        //
-        charset("Shift_JIS", "SJIS",
-                new String[] {
-                    // IANA aliases
-                    "sjis", // historical
-                    "shift_jis",
-                    "shift-jis",
-                    "ms_kanji",
-                    "x-sjis",
-                    "csShiftJIS"
-                });
-
-        // The definition of this charset may be overridden by the init method,
-        // below, if the sun.nio.cs.map property is defined.
-        //
-        charset("windows-31j", "MS932",
-                new String[] {
-                    "MS932", // JDK historical
-                    "windows-932",
-                    "csWindows31J"
-                });
-
-        charset("JIS_X0201", "JIS_X_0201",
-                new String[] {
-                    "JIS0201", // JDK historical
-                    // IANA aliases
-                    "JIS_X0201",
-                    "X0201",
-                    "csHalfWidthKatakana"
-                });
-
-        charset("x-JIS0208", "JIS_X_0208",
-                new String[] {
-                    "JIS0208", // JDK historical
-                    // IANA aliases
-                    "JIS_C6226-1983",
-                    "iso-ir-87",
-                    "x0208",
-                    "JIS_X0208-1983",
-                    "csISO87JISX0208"
-                });
-
-        charset("JIS_X0212-1990", "JIS_X_0212",
-                new String[] {
-                    "JIS0212", // JDK historical
-                    // IANA aliases
-                    "jis_x0212-1990",
-                    "x0212",
-                    "iso-ir-159",
-                    "csISO159JISX02121990"
-                });
-
-        charset("x-SJIS_0213", "SJIS_0213",
-                new String[] {
-                    "sjis-0213",
-                    "sjis_0213",
-                    "sjis:2004",
-                    "sjis_0213:2004",
-                    "shift_jis_0213:2004",
-                    "shift_jis:2004"
-                });
-
-        charset("x-MS932_0213", "MS932_0213",
-                new String[] {
-                    "MS932-0213",
-                    "MS932_0213",
-                    "MS932:2004",
-                    "windows-932-0213",
-                    "windows-932:2004"
-                });
-
-        charset("EUC-JP", "EUC_JP",
-                new String[] {
-                    "euc_jp", // JDK historical
-                    // IANA aliases
-                    "eucjis",
-                    "eucjp",
-                    "Extended_UNIX_Code_Packed_Format_for_Japanese",
-                    "csEUCPkdFmtjapanese",
-                    "x-euc-jp",
-                    "x-eucjp"
-                });
-
-        charset("x-euc-jp-linux", "EUC_JP_LINUX",
-                new String[] {
-                    "euc_jp_linux", // JDK historical
-                    "euc-jp-linux"
-                });
-
-        charset("x-eucjp-open", "EUC_JP_Open",
-                new String[] {
-                    "EUC_JP_Solaris",   // JDK historical
-                    "eucJP-open"
-                });
-
-        charset("x-PCK", "PCK",
-                new String[] {
-                    // IANA aliases
-                    "pck" // historical
-                });
-
-        charset("ISO-2022-JP", "ISO2022_JP",
-            new String[] {
-            // IANA aliases
-            "iso2022jp", // historical
-            "jis",
-            "csISO2022JP",
-            "jis_encoding",
-            "csjisencoding"
-        });
-
-        charset("ISO-2022-JP-2", "ISO2022_JP_2",
-            new String[] {
-            // IANA aliases
-            "csISO2022JP2",
-            "iso2022jp2"
-        });
-
-        charset("x-windows-50221", "MS50221",
-            new String[] {
-            "ms50221", // historical
-            "cp50221",
-        });
-
-        charset("x-windows-50220", "MS50220",
-            new String[] {
-            "ms50220", // historical
-            "cp50220",
-        });
-
-        charset("x-windows-iso2022jp", "MSISO2022JP",
-            new String[] {
-            "windows-iso2022jp", // historical
-        });
-
-        charset("x-JISAutoDetect", "JISAutoDetect",
-                new String[] {
-                    "JISAutoDetect" // historical
-                });
-
-        // Korean
-        charset("EUC-KR", "EUC_KR",
-                new String[] {
-                    "euc_kr", // JDK historical
-                    // IANA aliases
-                    "ksc5601",
-                    "euckr",
-                    "ks_c_5601-1987",
-                    "ksc5601-1987",
-                    "ksc5601_1987",
-                    "ksc_5601",
-                    "csEUCKR",
-                    "5601"
-                });
-
-        charset("x-windows-949", "MS949",
-                new String[] {
-                    "ms949",    // JDK historical
-                    "windows949",
-                    "windows-949",
-                    // IANA aliases
-                    "ms_949"
-                });
-
-        charset("x-Johab", "Johab",
-                new String[] {
-                        "ksc5601-1992",
-                        "ksc5601_1992",
-                        "ms1361",
-                        "johab" // JDK historical
-                });
-
-        charset("ISO-2022-KR", "ISO2022_KR",
-                new String[] {
-                        "ISO2022KR", // JDK historical
-                        "csISO2022KR"
-                });
-
-        charset("ISO-2022-CN", "ISO2022_CN",
-                new String[] {
-                        "ISO2022CN", // JDK historical
-                        "csISO2022CN"
-                });
-
-        charset("x-ISO-2022-CN-CNS", "ISO2022_CN_CNS",
-                new String[] {
-                        "ISO2022CN_CNS", // JDK historical
-                        "ISO-2022-CN-CNS"
-                });
-
-        charset("x-ISO-2022-CN-GB", "ISO2022_CN_GB",
-                new String[] {
-                        "ISO2022CN_GB", // JDK historical
-                        "ISO-2022-CN-GB"
-                });
-
-        charset("x-ISCII91", "ISCII91",
-                new String[] {
-                        "iscii",
-                        "ST_SEV_358-88",
-                        "iso-ir-153",
-                        "csISO153GOST1976874",
-                        "ISCII91" // JDK historical
-                });
-
-        charset("ISO-8859-3", "ISO_8859_3",
-                new String[] {
-                    "iso8859_3", // JDK historical
-                    "8859_3",
-                    "ISO_8859-3:1988",
-                    "iso-ir-109",
-                    "ISO_8859-3",
-                    "ISO8859-3",
-                    "latin3",
-                    "l3",
-                    "ibm913",
-                    "ibm-913",
-                    "cp913",
-                    "913",
-                    "csISOLatin3"
-                });
-
-        charset("ISO-8859-6", "ISO_8859_6",
-                new String[] {
-                    "iso8859_6", // JDK historical
-                    "8859_6",
-                    "iso-ir-127",
-                    "ISO_8859-6",
-                    "ISO_8859-6:1987",
-                    "ISO8859-6",
-                    "ECMA-114",
-                    "ASMO-708",
-                    "arabic",
-                    "ibm1089",
-                    "ibm-1089",
-                    "cp1089",
-                    "1089",
-                    "csISOLatinArabic"
-                });
-
-        charset("ISO-8859-8", "ISO_8859_8",
-                new String[] {
-                    "iso8859_8", // JDK historical
-                    "8859_8",
-                    "iso-ir-138",
-                    "ISO_8859-8",
-                    "ISO_8859-8:1988",
-                    "ISO8859-8",
-                    "cp916",
-                    "916",
-                    "ibm916",
-                    "ibm-916",
-                    "hebrew",
-                    "csISOLatinHebrew"
-                });
-
-        charset("x-ISO-8859-11", "ISO_8859_11",
-                new String[] {
-                    "iso-8859-11",
-                    "iso8859_11"
-                });
-
-        charset("TIS-620", "TIS_620",
-                new String[] {
-                    "tis620", // JDK historical
-                    "tis620.2533"
-                });
-
-        // Various Microsoft Windows international codepages
-
-        charset("windows-1255", "MS1255",
-                new String[] {
-                    "cp1255" // JDK historical
-                });
-
-        charset("windows-1256", "MS1256",
-                new String[] {
-                    "cp1256" // JDK historical
-                });
-
-        charset("windows-1258", "MS1258",
-                new String[] {
-                    "cp1258" // JDK historical
-                });
-
-        // IBM & PC/MSDOS encodings
-
-        charset("x-IBM942", "IBM942",
-                new String[] {
-                    "cp942", // JDK historical
-                    "ibm942",
-                    "ibm-942",
-                    "942"
-                });
-
-        charset("x-IBM942C", "IBM942C",
-                new String[] {
-                    "cp942C", // JDK historical
-                    "ibm942C",
-                    "ibm-942C",
-                    "942C"
-                });
-
-        charset("x-IBM943", "IBM943",
-                new String[] {
-                    "cp943", // JDK historical
-                    "ibm943",
-                    "ibm-943",
-                    "943"
-                });
-
-        charset("x-IBM943C", "IBM943C",
-                new String[] {
-                    "cp943C", // JDK historical
-                    "ibm943C",
-                    "ibm-943C",
-                    "943C"
-                });
-
-        charset("x-IBM948", "IBM948",
-                new String[] {
-                    "cp948", // JDK historical
-                    "ibm948",
-                    "ibm-948",
-                    "948"
-                });
-
-        charset("x-IBM950", "IBM950",
-                new String[] {
-                    "cp950", // JDK historical
-                    "ibm950",
-                    "ibm-950",
-                    "950"
-                });
-
-        charset("x-IBM930", "IBM930",
-                new String[] {
-                    "cp930", // JDK historical
-                    "ibm930",
-                    "ibm-930",
-                    "930"
-                });
-
-        charset("x-IBM935", "IBM935",
-                new String[] {
-                    "cp935", // JDK historical
-                    "ibm935",
-                    "ibm-935",
-                    "935"
-                });
-
-        charset("x-IBM937", "IBM937",
-                new String[] {
-                    "cp937", // JDK historical
-                    "ibm937",
-                    "ibm-937",
-                    "937"
-                });
-
-        charset("x-IBM856", "IBM856",
-                new String[] {
-                    "cp856", // JDK historical
-                    "ibm-856",
-                    "ibm856",
-                    "856"
-                });
-
-        charset("IBM860", "IBM860",
-                new String[] {
-                    "cp860", // JDK historical
-                    "ibm860",
-                    "ibm-860",
-                    "860",
-                    "csIBM860"
-                });
-        charset("IBM861", "IBM861",
-                new String[] {
-                    "cp861", // JDK historical
-                    "ibm861",
-                    "ibm-861",
-                    "861",
-                    "csIBM861",
-                    "cp-is"
-                });
-
-        charset("IBM863", "IBM863",
-                new String[] {
-                    "cp863", // JDK historical
-                    "ibm863",
-                    "ibm-863",
-                    "863",
-                    "csIBM863"
-                });
-
-        charset("IBM864", "IBM864",
-                new String[] {
-                    "cp864", // JDK historical
-                    "ibm864",
-                    "ibm-864",
-                    "864",
-                    "csIBM864"
-                });
-
-        charset("IBM865", "IBM865",
-                new String[] {
-                    "cp865", // JDK historical
-                    "ibm865",
-                    "ibm-865",
-                    "865",
-                    "csIBM865"
-                });
-
-        charset("IBM868", "IBM868",
-                new String[] {
-                    "cp868", // JDK historical
-                    "ibm868",
-                    "ibm-868",
-                    "868",
-                    "cp-ar",
-                    "csIBM868"
-                });
-
-        charset("IBM869", "IBM869",
-                new String[] {
-                    "cp869", // JDK historical
-                    "ibm869",
-                    "ibm-869",
-                    "869",
-                    "cp-gr",
-                    "csIBM869"
-                });
-
-        charset("x-IBM921", "IBM921",
-                new String[] {
-                    "cp921", // JDK historical
-                    "ibm921",
-                    "ibm-921",
-                    "921"
-                });
-
-        charset("x-IBM1006", "IBM1006",
-                new String[] {
-                    "cp1006", // JDK historical
-                    "ibm1006",
-                    "ibm-1006",
-                    "1006"
-                });
-
-        charset("x-IBM1046", "IBM1046",
-                new String[] {
-                    "cp1046", // JDK historical
-                    "ibm1046",
-                    "ibm-1046",
-                    "1046"
-                });
-
-        charset("IBM1047", "IBM1047",
-                new String[] {
-                    "cp1047", // JDK historical
-                    "ibm-1047",
-                    "1047"
-                });
-
-        charset("x-IBM1098", "IBM1098",
-                new String[] {
-                    "cp1098", // JDK historical
-                    "ibm1098",
-                    "ibm-1098",
-                    "1098",
-                });
-
-        charset("IBM037", "IBM037",
-                new String[] {
-                    "cp037", // JDK historical
-                    "ibm037",
-                    "ebcdic-cp-us",
-                    "ebcdic-cp-ca",
-                    "ebcdic-cp-wt",
-                    "ebcdic-cp-nl",
-                    "csIBM037",
-                    "cs-ebcdic-cp-us",
-                    "cs-ebcdic-cp-ca",
-                    "cs-ebcdic-cp-wt",
-                    "cs-ebcdic-cp-nl",
-                    "ibm-037",
-                    "ibm-37",
-                    "cpibm37",
-                    "037"
-                });
-
-        charset("x-IBM1025", "IBM1025",
-                new String[] {
-                    "cp1025", // JDK historical
-                    "ibm1025",
-                    "ibm-1025",
-                    "1025"
-                });
-
-        charset("IBM1026", "IBM1026",
-                new String[] {
-                    "cp1026", // JDK historical
-                    "ibm1026",
-                    "ibm-1026",
-                    "1026"
-                });
-
-        charset("x-IBM1112", "IBM1112",
-                new String[] {
-                    "cp1112", // JDK historical
-                    "ibm1112",
-                    "ibm-1112",
-                    "1112"
-                });
-
-        charset("x-IBM1122", "IBM1122",
-                new String[] {
-                    "cp1122", // JDK historical
-                    "ibm1122",
-                    "ibm-1122",
-                    "1122"
-                });
-
-        charset("x-IBM1123", "IBM1123",
-                new String[] {
-                    "cp1123", // JDK historical
-                    "ibm1123",
-                    "ibm-1123",
-                    "1123"
-                });
-
-        charset("x-IBM1124", "IBM1124",
-                new String[] {
-                    "cp1124", // JDK historical
-                    "ibm1124",
-                    "ibm-1124",
-                    "1124"
-                });
-
-        charset("x-IBM1364", "IBM1364",
-                new String[] {
-                    "cp1364",
-                    "ibm1364",
-                    "ibm-1364",
-                    "1364"
-                });
-
-        charset("IBM273", "IBM273",
-                new String[] {
-                    "cp273", // JDK historical
-                    "ibm273",
-                    "ibm-273",
-                    "273"
-                });
-
-        charset("IBM277", "IBM277",
-                new String[] {
-                    "cp277", // JDK historical
-                    "ibm277",
-                    "ibm-277",
-                    "277"
-                });
-
-        charset("IBM278", "IBM278",
-                new String[] {
-                    "cp278", // JDK historical
-                    "ibm278",
-                    "ibm-278",
-                    "278",
-                    "ebcdic-sv",
-                    "ebcdic-cp-se",
-                    "csIBM278"
-                });
-
-        charset("IBM280", "IBM280",
-                new String[] {
-                    "cp280", // JDK historical
-                    "ibm280",
-                    "ibm-280",
-                    "280"
-                });
-
-        charset("IBM284", "IBM284",
-                new String[] {
-                    "cp284", // JDK historical
-                    "ibm284",
-                    "ibm-284",
-                    "284",
-                    "csIBM284",
-                    "cpibm284"
-                });
-
-        charset("IBM285", "IBM285",
-                new String[] {
-                    "cp285", // JDK historical
-                    "ibm285",
-                    "ibm-285",
-                    "285",
-                    "ebcdic-cp-gb",
-                    "ebcdic-gb",
-                    "csIBM285",
-                    "cpibm285"
-                });
-
-        charset("IBM297", "IBM297",
-                new String[] {
-                    "cp297", // JDK historical
-                    "ibm297",
-                    "ibm-297",
-                    "297",
-                    "ebcdic-cp-fr",
-                    "cpibm297",
-                    "csIBM297",
-                });
-
-        charset("IBM420", "IBM420",
-                new String[] {
-                    "cp420", // JDK historical
-                    "ibm420",
-                    "ibm-420",
-                    "ebcdic-cp-ar1",
-                    "420",
-                    "csIBM420"
-                });
-
-        charset("IBM424", "IBM424",
-                new String[] {
-                    "cp424", // JDK historical
-                    "ibm424",
-                    "ibm-424",
-                    "424",
-                    "ebcdic-cp-he",
-                    "csIBM424"
-                });
-
-        charset("IBM500", "IBM500",
-                new String[] {
-                    "cp500", // JDK historical
-                    "ibm500",
-                    "ibm-500",
-                    "500",
-                    "ebcdic-cp-ch",
-                    "ebcdic-cp-bh",
-                    "csIBM500"
-                });
-
-        charset("x-IBM833", "IBM833",
-                new String[] {
-                     "cp833",
-                     "ibm833",
-                     "ibm-833"
-                 });
-
-        //EBCDIC DBCS-only Korean
-        charset("x-IBM834", "IBM834",
-                new String[] {
-                    "cp834",
-                    "ibm834",
-                    "834",
-                    "ibm-834"
-        });
-
-
-        charset("IBM-Thai", "IBM838",
-                new String[] {
-                    "cp838", // JDK historical
-                    "ibm838",
-                    "ibm-838",
-                    "838"
-                });
-
-        charset("IBM870", "IBM870",
-                new String[] {
-                    "cp870", // JDK historical
-                    "ibm870",
-                    "ibm-870",
-                    "870",
-                    "ebcdic-cp-roece",
-                    "ebcdic-cp-yu",
-                    "csIBM870"
-                });
-
-        charset("IBM871", "IBM871",
-                new String[] {
-                    "cp871", // JDK historical
-                    "ibm871",
-                    "ibm-871",
-                    "871",
-                    "ebcdic-cp-is",
-                    "csIBM871"
-                });
-
-        charset("x-IBM875", "IBM875",
-                new String[] {
-                    "cp875", // JDK historical
-                    "ibm875",
-                    "ibm-875",
-                    "875"
-                });
-
-        charset("IBM918", "IBM918",
-                new String[] {
-                    "cp918", // JDK historical
-                    "ibm-918",
-                    "918",
-                    "ebcdic-cp-ar2"
-                });
-
-        charset("x-IBM922", "IBM922",
-                new String[] {
-                    "cp922", // JDK historical
-                    "ibm922",
-                    "ibm-922",
-                    "922"
-                });
-
-        charset("x-IBM1097", "IBM1097",
-                new String[] {
-                    "cp1097", // JDK historical
-                    "ibm1097",
-                    "ibm-1097",
-                    "1097"
-                });
-
-        charset("x-IBM949", "IBM949",
-                new String[] {
-                    "cp949", // JDK historical
-                    "ibm949",
-                    "ibm-949",
-                    "949"
-                });
-
-        charset("x-IBM949C", "IBM949C",
-                new String[] {
-                    "cp949C", // JDK historical
-                    "ibm949C",
-                    "ibm-949C",
-                    "949C"
-                });
-
-        charset("x-IBM939", "IBM939",
-                new String[] {
-                    "cp939", // JDK historical
-                    "ibm939",
-                    "ibm-939",
-                    "939"
-                });
-
-        charset("x-IBM933", "IBM933",
-                new String[] {
-                    "cp933", // JDK historical
-                    "ibm933",
-                    "ibm-933",
-                    "933"
-                });
-
-        charset("x-IBM1381", "IBM1381",
-                new String[] {
-                    "cp1381", // JDK historical
-                    "ibm1381",
-                    "ibm-1381",
-                    "1381"
-                });
-
-        charset("x-IBM1383", "IBM1383",
-                new String[] {
-                    "cp1383", // JDK historical
-                    "ibm1383",
-                    "ibm-1383",
-                    "1383"
-                });
-
-        charset("x-IBM970", "IBM970",
-                new String[] {
-                    "cp970", // JDK historical
-                    "ibm970",
-                    "ibm-970",
-                    "ibm-eucKR",
-                    "970"
-                });
-
-        charset("x-IBM964", "IBM964",
-                new String[] {
-                    "cp964", // JDK historical
-                    "ibm964",
-                    "ibm-964",
-                    "964"
-                });
-
-        charset("x-IBM33722", "IBM33722",
-                new String[] {
-                    "cp33722", // JDK historical
-                    "ibm33722",
-                    "ibm-33722",
-                    "ibm-5050", // from IBM alias list
-                    "ibm-33722_vascii_vpua", // from IBM alias list
-                    "33722"
-                });
-
-        charset("IBM01140", "IBM1140",
-                new String[] {
-                    "cp1140", // JDK historical
-                    "ccsid01140",
-                    "cp01140",
-                    "1140",
-                    "ebcdic-us-037+euro"
-                });
-
-        charset("IBM01141", "IBM1141",
-                new String[] {
-                    "cp1141", // JDK historical
-                    "ccsid01141",
-                    "cp01141",
-                    "1141",
-                    "ebcdic-de-273+euro"
-                });
-
-        charset("IBM01142", "IBM1142",
-                new String[] {
-                    "cp1142", // JDK historical
-                    "ccsid01142",
-                    "cp01142",
-                    "1142",
-                    "ebcdic-no-277+euro",
-                    "ebcdic-dk-277+euro"
-                });
-
-        charset("IBM01143", "IBM1143",
-                new String[] {
-                    "cp1143", // JDK historical
-                    "ccsid01143",
-                    "cp01143",
-                    "1143",
-                    "ebcdic-fi-278+euro",
-                    "ebcdic-se-278+euro"
-                });
-
-        charset("IBM01144", "IBM1144",
-                new String[] {
-                    "cp1144", // JDK historical
-                    "ccsid01144",
-                    "cp01144",
-                    "1144",
-                    "ebcdic-it-280+euro"
-                });
-
-        charset("IBM01145", "IBM1145",
-                new String[] {
-                    "cp1145", // JDK historical
-                    "ccsid01145",
-                    "cp01145",
-                    "1145",
-                    "ebcdic-es-284+euro"
-                });
-
-        charset("IBM01146", "IBM1146",
-                new String[] {
-                    "cp1146", // JDK historical
-                    "ccsid01146",
-                    "cp01146",
-                    "1146",
-                    "ebcdic-gb-285+euro"
-                });
-
-        charset("IBM01147", "IBM1147",
-                new String[] {
-                    "cp1147", // JDK historical
-                    "ccsid01147",
-                    "cp01147",
-                    "1147",
-                    "ebcdic-fr-277+euro"
-                });
-
-        charset("IBM01148", "IBM1148",
-                new String[] {
-                    "cp1148", // JDK historical
-                    "ccsid01148",
-                    "cp01148",
-                    "1148",
-                    "ebcdic-international-500+euro"
-                });
-
-        charset("IBM01149", "IBM1149",
-                new String[] {
-                    "cp1149", // JDK historical
-                    "ccsid01149",
-                    "cp01149",
-                    "1149",
-                    "ebcdic-s-871+euro"
-                });
-
-        // Macintosh MacOS/Apple char encodingd
-
-
-        charset("x-MacRoman", "MacRoman",
-                new String[] {
-                    "MacRoman" // JDK historical
-                });
-
-        charset("x-MacCentralEurope", "MacCentralEurope",
-                new String[] {
-                    "MacCentralEurope" // JDK historical
-                });
-
-        charset("x-MacCroatian", "MacCroatian",
-                new String[] {
-                    "MacCroatian" // JDK historical
-                });
-
-
-        charset("x-MacGreek", "MacGreek",
-                new String[] {
-                    "MacGreek" // JDK historical
-                });
-
-        charset("x-MacCyrillic", "MacCyrillic",
-                new String[] {
-                    "MacCyrillic" // JDK historical
-                });
-
-        charset("x-MacUkraine", "MacUkraine",
-                new String[] {
-                    "MacUkraine" // JDK historical
-                });
-
-        charset("x-MacTurkish", "MacTurkish",
-                new String[] {
-                    "MacTurkish" // JDK historical
-                });
-
-        charset("x-MacArabic", "MacArabic",
-                new String[] {
-                    "MacArabic" // JDK historical
-                });
-
-        charset("x-MacHebrew", "MacHebrew",
-                new String[] {
-                    "MacHebrew" // JDK historical
-                });
-
-        charset("x-MacIceland", "MacIceland",
-                new String[] {
-                    "MacIceland" // JDK historical
-                });
-
-        charset("x-MacRomania", "MacRomania",
-                new String[] {
-                    "MacRomania" // JDK historical
-                });
-
-        charset("x-MacThai", "MacThai",
-                new String[] {
-                    "MacThai" // JDK historical
-                });
-
-        charset("x-MacSymbol", "MacSymbol",
-                new String[] {
-                    "MacSymbol" // JDK historical
-                });
-
-        charset("x-MacDingbat", "MacDingbat",
-                new String[] {
-                    "MacDingbat" // JDK historical
-                });
-
-        instance = this;
-
-    }
-
-    private boolean initialized = false;
-
-    // If the sun.nio.cs.map property is defined on the command line we won't
-    // see it in the system-properties table until after the charset subsystem
-    // has been initialized.  We therefore delay the effect of this property
-    // until after the JRE has completely booted.
-    //
-    // At the moment following values for this property are supported, property
-    // value string is case insensitive.
-    //
-    // (1)"Windows-31J/Shift_JIS"
-    // In 1.4.1 we added a correct implementation of the Shift_JIS charset
-    // but in previous releases this charset name had been treated as an alias
-    // for Windows-31J, aka MS932. Users who have existing code that depends
-    // upon this alias can restore the previous behavior by defining this
-    // property to have this value.
-    //
-    // (2)"x-windows-50221/ISO-2022-JP"
-    //    "x-windows-50220/ISO-2022-JP"
-    //    "x-windows-iso2022jp/ISO-2022-JP"
-    // The charset ISO-2022-JP is a "standard based" implementation by default,
-    // which supports ASCII, JIS_X_0201 and JIS_X_0208 mappings based encoding
-    // and decoding only.
-    // There are three Microsoft iso-2022-jp variants, namely x-windows-50220,
-    // x-windows-50221 and x-windows-iso2022jp which behaves "slightly" differently
-    // compared to the "standard based" implementation. See ISO2022_JP.java for
-    // detailed description. Users who prefer the behavior of MS iso-2022-jp
-    // variants should use these names explicitly instead of using "ISO-2022-JP"
-    // and its aliases. However for those who need the ISO-2022-JP charset behaves
-    // exactly the same as MS variants do, above properties can be defined to
-    // switch.
-    //
-    // If we need to define other charset-alias mappings in the future then
-    // this property could be further extended, the general idea being that its
-    // value should be of the form
-    //
-    //     new-charset-1/old-charset-1,new-charset-2/old-charset-2,...
-    //
-    // where each charset named to the left of a slash is intended to replace
-    // (most) uses of the charset named to the right of the slash.
-    //
-    protected void init() {
-        if (initialized)
-            return;
-        if (!sun.misc.VM.isBooted())
-            return;
-
-        String map = AccessController.doPrivileged(
-            new GetPropertyAction("sun.nio.cs.map"));
-        boolean sjisIsMS932 = false;
-        boolean iso2022jpIsMS50221 = false;
-        boolean iso2022jpIsMS50220 = false;
-        boolean iso2022jpIsMSISO2022JP = false;
-        if (map != null) {
-            String[] maps = map.split(",");
-            for (int i = 0; i < maps.length; i++) {
-                if (maps[i].equalsIgnoreCase("Windows-31J/Shift_JIS")) {
-                    sjisIsMS932 = true;
-                } else if (maps[i].equalsIgnoreCase("x-windows-50221/ISO-2022-JP")) {
-                    iso2022jpIsMS50221 = true;
-                } else if (maps[i].equalsIgnoreCase("x-windows-50220/ISO-2022-JP")) {
-                    iso2022jpIsMS50220 = true;
-                } else if (maps[i].equalsIgnoreCase("x-windows-iso2022jp/ISO-2022-JP")) {
-                    iso2022jpIsMSISO2022JP = true;
-                }
-            }
-        }
-        if (sjisIsMS932) {
-            deleteCharset("Shift_JIS",
-                          new String[] {
-                              // IANA aliases
-                              "sjis", // historical
-                              "shift_jis",
-                              "shift-jis",
-                              "ms_kanji",
-                              "x-sjis",
-                              "csShiftJIS"
-                          });
-            deleteCharset("windows-31j",
-                          new String[] {
-                              "MS932", // JDK historical
-                              "windows-932",
-                              "csWindows31J"
-                          });
-            charset("Shift_JIS", "SJIS",
-                    new String[] {
-                        // IANA aliases
-                        "sjis"          // JDK historical
-                    });
-            charset("windows-31j", "MS932",
-                    new String[] {
-                        "MS932",        // JDK historical
-                        "windows-932",
-                        "csWindows31J",
-                        "shift-jis",
-                        "ms_kanji",
-                        "x-sjis",
-                        "csShiftJIS",
-                        // This alias takes precedence over the actual
-                        // Shift_JIS charset itself since aliases are always
-                        // resolved first, before looking up canonical names.
-                        "shift_jis"
-                    });
-        }
-        if (iso2022jpIsMS50221 ||
-            iso2022jpIsMS50220 ||
-            iso2022jpIsMSISO2022JP) {
-            deleteCharset("ISO-2022-JP",
-                          new String[] {
-                              "iso2022jp",
-                                "jis",
-                                "csISO2022JP",
-                                "jis_encoding",
-                                "csjisencoding"
-                          });
-            if (iso2022jpIsMS50221) {
-                deleteCharset("x-windows-50221",
-                              new String[] {
-                                  "cp50221",
-                                  "ms50221"
-                              });
-                charset("x-windows-50221", "MS50221",
-                        new String[] {
-                            "cp50221",
-                            "ms50221",
-                            "iso-2022-jp",
-                            "iso2022jp",
-                            "jis",
-                            "csISO2022JP",
-                            "jis_encoding",
-                            "csjisencoding"
-                        });
-            } else if (iso2022jpIsMS50220) {
-                deleteCharset("x-windows-50220",
-                              new String[] {
-                                  "cp50220",
-                                  "ms50220"
-                              });
-                charset("x-windows-50220", "MS50220",
-                        new String[] {
-                            "cp50220",
-                            "ms50220",
-                            "iso-2022-jp",
-                            "iso2022jp",
-                            "jis",
-                            "csISO2022JP",
-                            "jis_encoding",
-                            "csjisencoding"
-                        });
-            } else {
-                deleteCharset("x-windows-iso2022jp",
-                              new String[] {
-                                  "windows-iso2022jp"
-                              });
-                charset("x-windows-iso2022jp", "MSISO2022JP",
-                        new String[] {
-                            "windows-iso2022jp",
-                            "iso-2022-jp",
-                            "iso2022jp",
-                            "jis",
-                            "csISO2022JP",
-                            "jis_encoding",
-                            "csjisencoding"
-                        });
-
-
-            }
-        }
-        String osName = AccessController.doPrivileged(
-            new GetPropertyAction("os.name"));
-        if ("SunOS".equals(osName) || "Linux".equals(osName)
-               || osName.contains("OS X")) {
-            charset("x-COMPOUND_TEXT", "COMPOUND_TEXT",
-                    new String[] {
-                        "COMPOUND_TEXT",        // JDK historical
-                        "x11-compound_text",
-                        "x-compound-text"
-                    });
-        }
-        initialized = true;
-    }
-
-    public static String[] aliasesFor(String charsetName) {
-        if (instance == null)
-            return null;
-        return instance.aliases(charsetName);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/GB18030.java b/ojluni/src/main/java/sun/nio/cs/ext/GB18030.java
deleted file mode 100755
index daffbe4..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/GB18030.java
+++ /dev/null
@@ -1,12802 +0,0 @@
-/*
- * Copyright (c) 2002, 2010, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.Surrogate;
-
-public class GB18030
-    extends Charset
-{
-    private static final int GB18030_SINGLE_BYTE = 1;
-    private static final int GB18030_DOUBLE_BYTE = 2;
-    private static final int GB18030_FOUR_BYTE = 3;
-
-    public GB18030() {
-        super("GB18030", ExtendedCharsets.aliasesFor("GB18030"));
-    }
-
-    public short[] getDecoderIndex1() {
-        return decoderIndex1;
-    }
-
-    public String[] getDecoderIndex2() {
-        return decoderIndex2;
-    }
-
-    public short[] getSubDecoderIndex1() {
-        return index1;
-    }
-
-    public String[] getSubDecoderIndex2() {
-        return index2;
-    }
-
-    public short[] getEncoderIndex1() {
-        return encoderIndex1;
-    }
-
-    public String[] getEncoderIndex2() {
-        return encoderIndex2;
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs.name().equals("GBK"))
-                || (cs.name().equals("ISO-8859-1"))
-                || (cs.name().equals("ISO-8859-2"))
-                || (cs.name().equals("ISO-8859-3"))
-                || (cs.name().equals("ISO-8859-4"))
-                || (cs.name().equals("ISO-8859-5"))
-                || (cs.name().equals("ISO-8859-6"))
-                || (cs.name().equals("ISO-8859-7"))
-                || (cs.name().equals("ISO-8859-8"))
-                || (cs.name().equals("ISO-8859-9"))
-                || (cs.name().equals("ISO-8859-13"))
-                || (cs.name().equals("UTF-8"))
-                || (cs.name().equals("UTF-16"))
-                || (cs.name().equals("UTF-16LE"))
-                || (cs.name().equals("UTF-16BE"))
-                || (cs.name().equals("ISO-8859-15"))
-                || (cs.name().equals("windows-1251"))
-                || (cs.name().equals("windows-1252"))
-                || (cs.name().equals("windows-1253"))
-                || (cs.name().equals("windows-1254"))
-                || (cs.name().equals("windows-1255"))
-                || (cs.name().equals("windows-1256"))
-                || (cs.name().equals("windows-1257"))
-                || (cs.name().equals("windows-1258"))
-                || (cs.name().equals("windows-932"))
-                || (cs.name().equals("x-mswin-936"))
-                || (cs.name().equals("x-windows-949"))
-                || (cs.name().equals("x-windows-950"))
-                || (cs.name().equals("windows-31j"))
-                || (cs.name().equals("JIS_X0201"))
-                || (cs.name().equals("JIS_X0208-1990"))
-                || (cs.name().equals("JIS_X0212"))
-                || (cs.name().equals("Shift_JIS"))
-                || (cs.name().equals("GB2312"))
-                || (cs.name().equals("EUC-KR"))
-                || (cs.name().equals("x-EUC-TW"))
-                || (cs.name().equals("EUC-JP"))
-                || (cs.name().equals("euc-jp-linux"))
-                || (cs.name().equals("KOI8-R"))
-                || (cs.name().equals("TIS-620"))
-                || (cs.name().equals("x-ISCII91"))
-                || (cs.name().equals("Big5"))
-                || (cs.name().equals("Big5-HKSCS"))
-                || (cs.name().equals("x-MS950-HKSCS"))
-                || (cs.name().equals("ISO-2022-JP"))
-                || (cs.name().equals("ISO-2022-KR"))
-                || (cs.name().equals("x-ISO-2022-CN-CNS"))
-                || (cs.name().equals("x-ISO-2022-CN-GB"))
-                || (cs.name().equals("x-Johab"))
-                || (cs instanceof GB18030));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    private final static String innerDecoderIndex0=
-        "\u0080"+
-        "\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088"+
-        "\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090"+
-        "\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098"+
-        "\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0"+
-        "\u00A1\u00A2\u00A3\u00A5\u00A6\u00A9\u00AA\u00AB"+
-        "\u00AC\u00AD\u00AE\u00AF\u00B2\u00B3\u00B4\u00B5"+
-        "\u00B6\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE"+
-        "\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6"+
-        "\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE"+
-        "\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6"+
-        "\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF"+
-        "\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00EB\u00EE"+
-        "\u00EF\u00F0\u00F1\u00F4\u00F5\u00F6\u00F8\u00FB"+
-        "\u00FD\u00FE\u00FF\u0100\u0102\u0103\u0104\u0105"+
-        "\u0106\u0107\u0108\u0109\u010A\u010B\u010C\u010D"+
-        "\u010E\u010F\u0110\u0111\u0112\u0114\u0115\u0116"+
-        "\u0117\u0118\u0119\u011A\u011C\u011D\u011E\u011F"+
-        "\u0120\u0121\u0122\u0123\u0124\u0125\u0126\u0127"+
-        "\u0128\u0129\u012A\u012C\u012D\u012E\u012F\u0130"+
-        "\u0131\u0132\u0133\u0134\u0135\u0136\u0137\u0138"+
-        "\u0139\u013A\u013B\u013C\u013D\u013E\u013F\u0140"+
-        "\u0141\u0142\u0143\u0145\u0146\u0147\u0149\u014A"+
-        "\u014B\u014C\u014E\u014F\u0150\u0151\u0152\u0153"+
-        "\u0154\u0155\u0156\u0157\u0158\u0159\u015A\u015B"+
-        "\u015C\u015D\u015E\u015F\u0160\u0161\u0162\u0163"+
-        "\u0164\u0165\u0166\u0167\u0168\u0169\u016A\u016C"+
-        "\u016D\u016E\u016F\u0170\u0171\u0172\u0173\u0174"+
-        "\u0175\u0176\u0177\u0178\u0179\u017A\u017B\u017C"+
-        "\u017D\u017E\u017F\u0180\u0181\u0182\u0183\u0184"+
-        "\u0185\u0186\u0187\u0188\u0189\u018A\u018B\u018C"+
-        "\u018D\u018E\u018F\u0190\u0191\u0192\u0193\u0194"+
-        "\u0195\u0196\u0197\u0198\u0199\u019A\u019B"+
-        "\u019C\u019D\u019E\u019F\u01A0\u01A1\u01A2\u01A3"+
-        "\u01A4\u01A5\u01A6\u01A7\u01A8\u01A9\u01AA\u01AB"+
-        "\u01AC\u01AD\u01AE\u01AF\u01B0\u01B1\u01B2\u01B3"+
-        "\u01B4\u01B5\u01B6\u01B7\u01B8\u01B9\u01BA\u01BB"+
-        "\u01BC\u01BD\u01BE\u01BF\u01C0\u01C1\u01C2\u01C3"+
-        "\u01C4\u01C5\u01C6\u01C7\u01C8\u01C9\u01CA\u01CB"+
-        "\u01CC\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9"+
-        "\u01DB\u01DD\u01DE\u01DF\u01E0\u01E1\u01E2\u01E3"+
-        "\u01E4\u01E5\u01E6\u01E7\u01E8\u01E9\u01EA\u01EB"+
-        "\u01EC\u01ED\u01EE\u01EF\u01F0\u01F1\u01F2\u01F3"+
-        "\u01F4\u01F5\u01F6\u01F7\u01F8\u01FA\u01FB\u01FC"+
-        "\u01FD\u01FE\u01FF\u0200\u0201\u0202\u0203\u0204"+
-        "\u0205\u0206\u0207\u0208\u0209\u020A\u020B\u020C"+
-        "\u020D\u020E\u020F\u0210\u0211\u0212\u0213\u0214"+
-        "\u0215\u0216\u0217\u0218\u0219\u021A\u021B\u021C"+
-        "\u021D\u021E\u021F\u0220\u0221\u0222\u0223\u0224"+
-        "\u0225\u0226\u0227\u0228\u0229\u022A\u022B\u022C"+
-        "\u022D\u022E\u022F\u0230\u0231\u0232\u0233\u0234"+
-        "\u0235\u0236\u0237\u0238\u0239\u023A\u023B\u023C"+
-        "\u023D\u023E\u023F\u0240\u0241\u0242\u0243\u0244"+
-        "\u0245\u0246\u0247\u0248\u0249\u024A\u024B\u024C"+
-        "\u024D\u024E\u024F\u0250\u0252\u0253\u0254\u0255"+
-        "\u0256\u0257\u0258\u0259\u025A\u025B\u025C\u025D"+
-        "\u025E\u025F\u0260\u0262\u0263\u0264\u0265\u0266"+
-        "\u0267\u0268\u0269\u026A\u026B\u026C\u026D\u026E"+
-        "\u026F\u0270\u0271\u0272\u0273\u0274\u0275\u0276"+
-        "\u0277\u0278\u0279\u027A\u027B\u027C\u027D\u027E"+
-        "\u027F\u0280\u0281\u0282\u0283\u0284\u0285\u0286"+
-        "\u0287\u0288\u0289\u028A\u028B\u028C\u028D\u028E"+
-        "\u028F\u0290\u0291\u0292\u0293\u0294\u0295\u0296"+
-        "\u0297\u0298\u0299\u029A\u029B\u029C\u029D\u029E"+
-        "\u029F\u02A0\u02A1\u02A2\u02A3\u02A4\u02A5\u02A6"+
-        "\u02A7\u02A8\u02A9\u02AA\u02AB\u02AC\u02AD\u02AE"+
-        "\u02AF\u02B0\u02B1\u02B2\u02B3\u02B4\u02B5\u02B6"+
-        "\u02B7\u02B8\u02B9\u02BA\u02BB\u02BC\u02BD\u02BE"+
-        "\u02BF\u02C0\u02C1\u02C2\u02C3\u02C4\u02C5\u02C6"+
-        "\u02C8\u02CC\u02CD\u02CE\u02CF\u02D0\u02D1\u02D2"+
-        "\u02D3\u02D4\u02D5\u02D6\u02D7\u02D8\u02DA\u02DB"+
-        "\u02DC\u02DD\u02DE\u02DF\u02E0\u02E1\u02E2\u02E3"+
-        "\u02E4\u02E5\u02E6\u02E7\u02E8\u02E9\u02EA\u02EB"+
-        "\u02EC\u02ED\u02EE\u02EF\u02F0\u02F1\u02F2\u02F3"+
-        "\u02F4\u02F5\u02F6\u02F7\u02F8\u02F9\u02FA\u02FB"+
-        "\u02FC\u02FD\u02FE\u02FF\u0300\u0301\u0302\u0303"+
-        "\u0304\u0305\u0306\u0307\u0308\u0309\u030A\u030B"+
-        "\u030C\u030D\u030E\u030F\u0310\u0311\u0312\u0313"+
-        "\u0314\u0315\u0316\u0317\u0318\u0319\u031A\u031B"+
-        "\u031C\u031D\u031E\u031F\u0320\u0321\u0322\u0323"+
-        "\u0324\u0325\u0326\u0327\u0328\u0329\u032A\u032B"+
-        "\u032C\u032D\u032E\u032F\u0330\u0331\u0332\u0333"+
-        "\u0334\u0335\u0336\u0337\u0338\u0339\u033A\u033B"+
-        "\u033C\u033D\u033E\u033F\u0340\u0341\u0342\u0343"+
-        "\u0344\u0345\u0346\u0347\u0348\u0349\u034A\u034B"+
-        "\u034C\u034D\u034E\u034F\u0350\u0351\u0352\u0353"+
-        "\u0354\u0355\u0356\u0357\u0358\u0359\u035A\u035B"+
-        "\u035C\u035D\u035E\u035F\u0360\u0361\u0362\u0363"+
-        "\u0364\u0365\u0366\u0367\u0368\u0369\u036A\u036B"+
-        "\u036C\u036D\u036E\u036F\u0370\u0371\u0372\u0373"+
-        "\u0374\u0375\u0376\u0377\u0378\u0379\u037A\u037B"+
-        "\u037C\u037D\u037E\u037F\u0380\u0381\u0382\u0383"+
-        "\u0384\u0385\u0386\u0387\u0388\u0389\u038A\u038B"+
-        "\u038C\u038D\u038E\u038F\u0390\u03A2\u03AA\u03AB"+
-        "\u03AC\u03AD\u03AE\u03AF\u03B0\u03C2\u03CA\u03CB"+
-        "\u03CC\u03CD\u03CE\u03CF\u03D0\u03D1\u03D2\u03D3"+
-        "\u03D4\u03D5\u03D6\u03D7\u03D8\u03D9\u03DA\u03DB"+
-        "\u03DC\u03DD\u03DE\u03DF\u03E0\u03E1\u03E2\u03E3"+
-        "\u03E4\u03E5\u03E6\u03E7\u03E8\u03E9\u03EA\u03EB"+
-        "\u03EC\u03ED\u03EE\u03EF\u03F0\u03F1\u03F2\u03F3"+
-        "\u03F4\u03F5\u03F6\u03F7\u03F8\u03F9\u03FA\u03FB"+
-        "\u03FC\u03FD\u03FE\u03FF\u0400\u0402\u0403\u0404"+
-        "\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C"+
-        "\u040D\u040E\u040F\u0450\u0452\u0453\u0454\u0455"+
-        "\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u045D"+
-        "\u045E\u045F\u0460\u0461\u0462\u0463\u0464\u0465"+
-        "\u0466\u0467\u0468\u0469\u046A\u046B\u046C\u046D"+
-        "\u046E\u046F\u0470\u0471\u0472\u0473\u0474\u0475"+
-        "\u0476\u0477\u0478\u0479\u047A\u047B\u047C\u047D"+
-        "\u047E\u047F\u0480\u0481\u0482\u0483\u0484\u0485"+
-        "\u0486\u0487\u0488\u0489\u048A\u048B\u048C\u048D"+
-        "\u048E\u048F\u0490\u0491\u0492\u0493\u0494\u0495"+
-        "\u0496\u0497\u0498\u0499\u049A\u049B\u049C\u049D"+
-        "\u049E\u049F\u04A0\u04A1\u04A2\u04A3\u04A4\u04A5"+
-        "\u04A6\u04A7\u04A8\u04A9\u04AA\u04AB\u04AC\u04AD"+
-        "\u04AE\u04AF\u04B0\u04B1\u04B2\u04B3\u04B4\u04B5"+
-        "\u04B6\u04B7\u04B8\u04B9\u04BA\u04BB\u04BC\u04BD"+
-        "\u04BE\u04BF\u04C0\u04C1\u04C2\u04C3\u04C4\u04C5"+
-        "\u04C6\u04C7\u04C8\u04C9\u04CA\u04CB\u04CC\u04CD"+
-        "\u04CE\u04CF\u04D0\u04D1\u04D2\u04D3\u04D4\u04D5"+
-        "\u04D6\u04D7\u04D8\u04D9\u04DA\u04DB\u04DC\u04DD"+
-        "\u04DE\u04DF\u04E0\u04E1\u04E2\u04E3\u04E4\u04E5"+
-        "\u04E6\u04E7\u04E8\u04E9\u04EA\u04EB\u04EC\u04ED"+
-        "\u04EE\u04EF\u04F0\u04F1\u04F2\u04F3\u04F4\u04F5"+
-        "\u04F6\u04F7\u04F8\u04F9\u04FA\u04FB\u04FC\u04FD"+
-        "\u04FE\u04FF\u0500\u0501\u0502\u0503\u0504\u0505"+
-        "\u0506\u0507\u0508\u0509\u050A\u050B\u050C\u050D"+
-        "\u050E\u050F\u0510\u0511\u0512\u0513\u0514\u0515"+
-        "\u0516\u0517\u0518\u0519\u051A\u051B\u051C\u051D"+
-        "\u051E\u051F\u0520\u0521\u0522\u0523\u0524\u0525"+
-        "\u0526\u0527\u0528\u0529\u052A\u052B\u052C\u052D"+
-        "\u052E\u052F\u0530\u0531\u0532\u0533\u0534\u0535"+
-        "\u0536\u0537\u0538\u0539\u053A\u053B\u053C\u053D"+
-        "\u053E\u053F\u0540\u0541\u0542\u0543\u0544\u0545"+
-        "\u0546\u0547\u0548\u0549\u054A\u054B\u054C\u054D"+
-        "\u054E\u054F\u0550\u0551\u0552\u0553\u0554\u0555"+
-        "\u0556\u0557\u0558\u0559\u055A\u055B\u055C\u055D"+
-        "\u055E\u055F\u0560\u0561\u0562\u0563\u0564\u0565"+
-        "\u0566\u0567\u0568\u0569\u056A\u056B\u056C\u056D"+
-        "\u056E\u056F\u0570\u0571\u0572\u0573\u0574\u0575"+
-        "\u0576\u0577\u0578\u0579\u057A\u057B\u057C\u057D"+
-        "\u057E\u057F\u0580\u0581\u0582\u0583\u0584\u0585"+
-        "\u0586\u0587\u0588\u0589\u058A\u058B\u058C\u058D"+
-        "\u058E\u058F\u0590\u0591\u0592\u0593\u0594\u0595"+
-        "\u0596\u0597\u0598\u0599\u059A\u059B\u059C\u059D"+
-        "\u059E\u059F\u05A0\u05A1\u05A2\u05A3\u05A4\u05A5"+
-        "\u05A6\u05A7\u05A8\u05A9\u05AA\u05AB\u05AC\u05AD"+
-        "\u05AE\u05AF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5"+
-        "\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD"+
-        "\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05C4\u05C5"+
-        "\u05C6\u05C7\u05C8\u05C9\u05CA\u05CB\u05CC\u05CD"+
-        "\u05CE\u05CF\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5"+
-        "\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD"+
-        "\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5"+
-        "\u05E6\u05E7\u05E8\u05E9\u05EA\u05EB\u05EC\u05ED"+
-        "\u05EE\u05EF\u05F0\u05F1\u05F2\u05F3\u05F4\u05F5"+
-        "\u05F6\u05F7\u05F8\u05F9\u05FA\u05FB\u05FC\u05FD"+
-        "\u05FE\u05FF\u0600\u0601\u0602\u0603\u0604\u0605"+
-        "\u0606\u0607\u0608\u0609\u060A\u060B\u060C\u060D"+
-        "\u060E\u060F\u0610\u0611\u0612\u0613\u0614\u0615"+
-        "\u0616\u0617\u0618\u0619\u061A\u061B\u061C\u061D"+
-        "\u061E\u061F\u0620\u0621\u0622\u0623\u0624\u0625"+
-        "\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D"+
-        "\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635"+
-        "\u0636\u0637\u0638\u0639\u063A\u063B\u063C\u063D"+
-        "\u063E\u063F\u0640\u0641\u0642\u0643\u0644\u0645"+
-        "\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D"+
-        "\u064E\u064F\u0650\u0651\u0652\u0653\u0654\u0655"+
-        "\u0656\u0657\u0658\u0659\u065A\u065B\u065C\u065D"+
-        "\u065E\u065F\u0660\u0661\u0662\u0663\u0664\u0665"+
-        "\u0666\u0667\u0668\u0669\u066A\u066B\u066C\u066D"+
-        "\u066E\u066F\u0670\u0671\u0672\u0673\u0674\u0675"+
-        "\u0676\u0677\u0678\u0679\u067A\u067B\u067C\u067D"+
-        "\u067E\u067F\u0680\u0681\u0682\u0683\u0684\u0685"+
-        "\u0686\u0687\u0688\u0689\u068A\u068B\u068C\u068D"+
-        "\u068E\u068F\u0690\u0691\u0692\u0693\u0694\u0695"+
-        "\u0696\u0697\u0698\u0699\u069A\u069B\u069C\u069D"+
-        "\u069E\u069F\u06A0\u06A1\u06A2\u06A3\u06A4\u06A5"+
-        "\u06A6\u06A7\u06A8\u06A9\u06AA\u06AB\u06AC\u06AD"+
-        "\u06AE\u06AF\u06B0\u06B1\u06B2\u06B3\u06B4\u06B5"+
-        "\u06B6\u06B7\u06B8\u06B9\u06BA\u06BB\u06BC\u06BD"+
-        "\u06BE\u06BF\u06C0\u06C1\u06C2\u06C3\u06C4\u06C5"+
-        "\u06C6\u06C7\u06C8\u06C9\u06CA\u06CB\u06CC\u06CD"+
-        "\u06CE\u06CF\u06D0\u06D1\u06D2\u06D3\u06D4\u06D5"+
-        "\u06D6\u06D7\u06D8\u06D9\u06DA\u06DB\u06DC\u06DD"+
-        "\u06DE\u06DF\u06E0\u06E1\u06E2\u06E3\u06E4\u06E5"+
-        "\u06E6\u06E7\u06E8\u06E9\u06EA\u06EB\u06EC\u06ED"+
-        "\u06EE\u06EF\u06F0\u06F1\u06F2\u06F3\u06F4\u06F5"+
-        "\u06F6\u06F7\u06F8\u06F9\u06FA\u06FB\u06FC\u06FD"+
-        "\u06FE\u06FF\u0700\u0701\u0702\u0703\u0704\u0705"+
-        "\u0706\u0707\u0708\u0709\u070A\u070B\u070C\u070D"+
-        "\u070E\u070F\u0710\u0711\u0712\u0713\u0714\u0715"+
-        "\u0716\u0717\u0718\u0719\u071A\u071B\u071C\u071D"+
-        "\u071E\u071F\u0720\u0721\u0722\u0723\u0724\u0725"+
-        "\u0726\u0727\u0728\u0729\u072A\u072B\u072C\u072D"+
-        "\u072E\u072F\u0730\u0731\u0732\u0733\u0734\u0735"+
-        "\u0736\u0737\u0738\u0739\u073A\u073B\u073C\u073D"+
-        "\u073E\u073F\u0740\u0741\u0742\u0743\u0744\u0745"+
-        "\u0746\u0747\u0748\u0749\u074A\u074B\u074C\u074D"+
-        "\u074E\u074F\u0750\u0751\u0752\u0753\u0754\u0755"+
-        "\u0756\u0757\u0758\u0759\u075A\u075B\u075C\u075D"+
-        "\u075E\u075F\u0760\u0761\u0762\u0763\u0764\u0765"+
-        "\u0766\u0767\u0768\u0769\u076A\u076B\u076C\u076D"+
-        "\u076E\u076F\u0770\u0771\u0772\u0773\u0774\u0775"+
-        "\u0776\u0777\u0778\u0779\u077A\u077B\u077C\u077D"+
-        "\u077E\u077F\u0780\u0781\u0782\u0783\u0784\u0785"+
-        "\u0786\u0787\u0788\u0789\u078A\u078B\u078C\u078D"+
-        "\u078E\u078F\u0790\u0791\u0792\u0793\u0794\u0795"+
-        "\u0796\u0797\u0798\u0799\u079A\u079B\u079C\u079D"+
-        "\u079E\u079F\u07A0\u07A1\u07A2\u07A3\u07A4\u07A5"+
-        "\u07A6\u07A7\u07A8\u07A9\u07AA\u07AB\u07AC\u07AD"+
-        "\u07AE\u07AF\u07B0\u07B1\u07B2\u07B3\u07B4\u07B5"+
-        "\u07B6\u07B7\u07B8\u07B9\u07BA\u07BB\u07BC\u07BD"+
-        "\u07BE\u07BF\u07C0\u07C1\u07C2\u07C3\u07C4\u07C5"+
-        "\u07C6\u07C7\u07C8\u07C9\u07CA\u07CB\u07CC\u07CD"+
-        "\u07CE\u07CF\u07D0\u07D1\u07D2\u07D3\u07D4\u07D5"+
-        "\u07D6\u07D7\u07D8\u07D9\u07DA\u07DB\u07DC\u07DD"+
-        "\u07DE\u07DF\u07E0\u07E1\u07E2\u07E3\u07E4\u07E5"+
-        "\u07E6\u07E7\u07E8\u07E9\u07EA\u07EB\u07EC\u07ED"+
-        "\u07EE\u07EF\u07F0\u07F1\u07F2\u07F3\u07F4\u07F5"+
-        "\u07F6\u07F7\u07F8\u07F9\u07FA\u07FB\u07FC\u07FD"+
-        "\u07FE\u07FF\u0800\u0801\u0802\u0803\u0804\u0805"+
-        "\u0806\u0807\u0808\u0809\u080A\u080B\u080C\u080D"+
-        "\u080E\u080F\u0810\u0811\u0812\u0813\u0814\u0815"+
-        "\u0816\u0817\u0818\u0819\u081A\u081B\u081C\u081D"+
-        "\u081E\u081F\u0820\u0821\u0822\u0823\u0824\u0825"+
-        "\u0826\u0827\u0828\u0829\u082A\u082B\u082C\u082D"+
-        "\u082E\u082F\u0830\u0831\u0832\u0833\u0834\u0835"+
-        "\u0836\u0837\u0838\u0839\u083A\u083B\u083C\u083D"+
-        "\u083E\u083F\u0840\u0841\u0842\u0843\u0844\u0845"+
-        "\u0846\u0847\u0848\u0849\u084A\u084B\u084C\u084D"+
-        "\u084E\u084F\u0850\u0851\u0852\u0853\u0854\u0855"+
-        "\u0856\u0857\u0858\u0859\u085A\u085B\u085C\u085D"+
-        "\u085E\u085F\u0860\u0861\u0862\u0863\u0864\u0865"+
-        "\u0866\u0867\u0868\u0869\u086A\u086B\u086C\u086D"+
-        "\u086E\u086F\u0870\u0871\u0872\u0873\u0874\u0875"+
-        "\u0876\u0877\u0878\u0879\u087A\u087B\u087C\u087D"+
-        "\u087E\u087F\u0880\u0881\u0882\u0883\u0884\u0885"+
-        "\u0886\u0887\u0888\u0889\u088A\u088B\u088C\u088D"+
-        "\u088E\u088F\u0890\u0891\u0892\u0893\u0894\u0895"+
-        "\u0896\u0897\u0898\u0899\u089A\u089B\u089C\u089D"+
-        "\u089E\u089F\u08A0\u08A1\u08A2\u08A3\u08A4\u08A5"+
-        "\u08A6\u08A7\u08A8\u08A9\u08AA\u08AB\u08AC\u08AD"+
-        "\u08AE\u08AF\u08B0\u08B1\u08B2\u08B3\u08B4\u08B5"+
-        "\u08B6\u08B7\u08B8\u08B9\u08BA\u08BB\u08BC\u08BD"+
-        "\u08BE\u08BF\u08C0\u08C1\u08C2\u08C3\u08C4\u08C5"+
-        "\u08C6\u08C7\u08C8\u08C9\u08CA\u08CB\u08CC\u08CD"+
-        "\u08CE\u08CF\u08D0\u08D1\u08D2\u08D3\u08D4\u08D5"+
-        "\u08D6\u08D7\u08D8\u08D9\u08DA\u08DB\u08DC\u08DD"+
-        "\u08DE\u08DF\u08E0\u08E1\u08E2\u08E3\u08E4\u08E5"+
-        "\u08E6\u08E7\u08E8\u08E9\u08EA\u08EB\u08EC\u08ED"+
-        "\u08EE\u08EF\u08F0\u08F1\u08F2\u08F3\u08F4\u08F5"+
-        "\u08F6\u08F7\u08F8\u08F9\u08FA\u08FB\u08FC\u08FD"+
-        "\u08FE\u08FF\u0900\u0901\u0902\u0903\u0904\u0905"+
-        "\u0906\u0907\u0908\u0909\u090A\u090B\u090C\u090D"+
-        "\u090E\u090F\u0910\u0911\u0912\u0913\u0914\u0915"+
-        "\u0916\u0917\u0918\u0919\u091A\u091B\u091C\u091D"+
-        "\u091E\u091F\u0920\u0921\u0922\u0923\u0924\u0925"+
-        "\u0926\u0927\u0928\u0929\u092A\u092B\u092C\u092D"+
-        "\u092E\u092F\u0930\u0931\u0932\u0933\u0934\u0935"+
-        "\u0936\u0937\u0938\u0939\u093A\u093B\u093C\u093D"+
-        "\u093E\u093F\u0940\u0941\u0942\u0943\u0944\u0945"+
-        "\u0946\u0947\u0948\u0949\u094A\u094B\u094C\u094D"+
-        "\u094E\u094F\u0950\u0951\u0952\u0953\u0954\u0955"+
-        "\u0956\u0957\u0958\u0959\u095A\u095B\u095C\u095D"+
-        "\u095E\u095F\u0960\u0961\u0962\u0963\u0964\u0965"+
-        "\u0966\u0967\u0968\u0969\u096A\u096B\u096C\u096D"+
-        "\u096E\u096F\u0970\u0971\u0972\u0973\u0974\u0975"+
-        "\u0976\u0977\u0978\u0979\u097A\u097B\u097C\u097D"+
-        "\u097E\u097F\u0980\u0981\u0982\u0983\u0984\u0985"+
-        "\u0986\u0987\u0988\u0989\u098A\u098B\u098C\u098D"+
-        "\u098E\u098F\u0990\u0991\u0992\u0993\u0994\u0995"+
-        "\u0996\u0997\u0998\u0999\u099A\u099B\u099C\u099D"+
-        "\u099E\u099F\u09A0\u09A1\u09A2\u09A3\u09A4\u09A5"+
-        "\u09A6\u09A7\u09A8\u09A9\u09AA\u09AB\u09AC\u09AD"+
-        "\u09AE\u09AF\u09B0\u09B1\u09B2\u09B3\u09B4\u09B5"+
-        "\u09B6\u09B7\u09B8\u09B9\u09BA\u09BB\u09BC\u09BD"+
-        "\u09BE\u09BF\u09C0\u09C1\u09C2\u09C3\u09C4\u09C5"+
-        "\u09C6\u09C7\u09C8\u09C9\u09CA\u09CB\u09CC\u09CD"+
-        "\u09CE\u09CF\u09D0\u09D1\u09D2\u09D3\u09D4\u09D5"+
-        "\u09D6\u09D7\u09D8\u09D9\u09DA\u09DB\u09DC\u09DD"+
-        "\u09DE\u09DF\u09E0\u09E1\u09E2\u09E3\u09E4\u09E5"+
-        "\u09E6\u09E7\u09E8\u09E9\u09EA\u09EB\u09EC\u09ED"+
-        "\u09EE\u09EF\u09F0\u09F1\u09F2\u09F3\u09F4\u09F5"+
-        "\u09F6\u09F7\u09F8\u09F9\u09FA\u09FB\u09FC\u09FD"+
-        "\u09FE\u09FF\u0A00\u0A01\u0A02\u0A03\u0A04\u0A05"+
-        "\u0A06\u0A07\u0A08\u0A09\u0A0A\u0A0B\u0A0C\u0A0D"+
-        "\u0A0E\u0A0F\u0A10\u0A11\u0A12\u0A13\u0A14\u0A15"+
-        "\u0A16\u0A17\u0A18\u0A19\u0A1A\u0A1B\u0A1C\u0A1D"+
-        "\u0A1E\u0A1F\u0A20\u0A21\u0A22\u0A23\u0A24\u0A25"+
-        "\u0A26\u0A27\u0A28\u0A29\u0A2A\u0A2B\u0A2C\u0A2D"+
-        "\u0A2E\u0A2F\u0A30\u0A31\u0A32\u0A33\u0A34\u0A35"+
-        "\u0A36\u0A37\u0A38\u0A39\u0A3A\u0A3B\u0A3C\u0A3D"+
-        "\u0A3E\u0A3F\u0A40\u0A41\u0A42\u0A43\u0A44\u0A45"+
-        "\u0A46\u0A47\u0A48\u0A49\u0A4A\u0A4B\u0A4C\u0A4D"+
-        "\u0A4E\u0A4F\u0A50\u0A51\u0A52\u0A53\u0A54\u0A55"+
-        "\u0A56\u0A57\u0A58\u0A59\u0A5A\u0A5B\u0A5C\u0A5D"+
-        "\u0A5E\u0A5F\u0A60\u0A61\u0A62\u0A63\u0A64\u0A65"+
-        "\u0A66\u0A67\u0A68\u0A69\u0A6A\u0A6B\u0A6C\u0A6D"+
-        "\u0A6E\u0A6F\u0A70\u0A71\u0A72\u0A73\u0A74\u0A75"+
-        "\u0A76\u0A77\u0A78\u0A79\u0A7A\u0A7B\u0A7C\u0A7D"+
-        "\u0A7E\u0A7F\u0A80\u0A81\u0A82\u0A83\u0A84\u0A85"+
-        "\u0A86\u0A87\u0A88\u0A89\u0A8A\u0A8B\u0A8C\u0A8D"+
-        "\u0A8E\u0A8F\u0A90\u0A91\u0A92\u0A93\u0A94\u0A95"+
-        "\u0A96\u0A97\u0A98\u0A99\u0A9A\u0A9B\u0A9C\u0A9D"+
-        "\u0A9E\u0A9F\u0AA0\u0AA1\u0AA2\u0AA3\u0AA4\u0AA5"+
-        "\u0AA6\u0AA7\u0AA8\u0AA9\u0AAA\u0AAB\u0AAC\u0AAD"+
-        "\u0AAE\u0AAF\u0AB0\u0AB1\u0AB2\u0AB3\u0AB4\u0AB5"+
-        "\u0AB6\u0AB7\u0AB8\u0AB9\u0ABA\u0ABB\u0ABC\u0ABD"+
-        "\u0ABE\u0ABF\u0AC0\u0AC1\u0AC2\u0AC3\u0AC4\u0AC5"+
-        "\u0AC6\u0AC7\u0AC8\u0AC9\u0ACA\u0ACB\u0ACC\u0ACD"+
-        "\u0ACE\u0ACF\u0AD0\u0AD1\u0AD2\u0AD3\u0AD4\u0AD5"+
-        "\u0AD6\u0AD7\u0AD8\u0AD9\u0ADA\u0ADB\u0ADC\u0ADD"+
-        "\u0ADE\u0ADF\u0AE0\u0AE1\u0AE2\u0AE3\u0AE4\u0AE5"+
-        "\u0AE6\u0AE7\u0AE8\u0AE9\u0AEA\u0AEB\u0AEC\u0AED"+
-        "\u0AEE\u0AEF\u0AF0\u0AF1\u0AF2\u0AF3\u0AF4\u0AF5"+
-        "\u0AF6\u0AF7\u0AF8\u0AF9\u0AFA\u0AFB\u0AFC\u0AFD"+
-        "\u0AFE\u0AFF\u0B00\u0B01\u0B02\u0B03\u0B04\u0B05"+
-        "\u0B06\u0B07\u0B08\u0B09\u0B0A\u0B0B\u0B0C\u0B0D"+
-        "\u0B0E\u0B0F\u0B10\u0B11\u0B12\u0B13\u0B14\u0B15"+
-        "\u0B16\u0B17\u0B18\u0B19\u0B1A\u0B1B\u0B1C\u0B1D"+
-        "\u0B1E\u0B1F\u0B20\u0B21\u0B22\u0B23\u0B24\u0B25"+
-        "\u0B26\u0B27\u0B28\u0B29\u0B2A\u0B2B\u0B2C\u0B2D"+
-        "\u0B2E\u0B2F\u0B30\u0B31\u0B32\u0B33\u0B34\u0B35"+
-        "\u0B36\u0B37\u0B38\u0B39\u0B3A\u0B3B\u0B3C\u0B3D"+
-        "\u0B3E\u0B3F\u0B40\u0B41\u0B42\u0B43\u0B44\u0B45"+
-        "\u0B46\u0B47\u0B48\u0B49\u0B4A\u0B4B\u0B4C\u0B4D"+
-        "\u0B4E\u0B4F\u0B50\u0B51\u0B52\u0B53\u0B54\u0B55"+
-        "\u0B56\u0B57\u0B58\u0B59\u0B5A\u0B5B\u0B5C\u0B5D"+
-        "\u0B5E\u0B5F\u0B60\u0B61\u0B62\u0B63\u0B64\u0B65"+
-        "\u0B66\u0B67\u0B68\u0B69\u0B6A\u0B6B\u0B6C\u0B6D"+
-        "\u0B6E\u0B6F\u0B70\u0B71\u0B72\u0B73\u0B74\u0B75"+
-        "\u0B76\u0B77\u0B78\u0B79\u0B7A\u0B7B\u0B7C\u0B7D"+
-        "\u0B7E\u0B7F\u0B80\u0B81\u0B82\u0B83\u0B84\u0B85"+
-        "\u0B86\u0B87\u0B88\u0B89\u0B8A\u0B8B\u0B8C\u0B8D"+
-        "\u0B8E\u0B8F\u0B90\u0B91\u0B92\u0B93\u0B94\u0B95"+
-        "\u0B96\u0B97\u0B98\u0B99\u0B9A\u0B9B\u0B9C\u0B9D"+
-        "\u0B9E\u0B9F\u0BA0\u0BA1\u0BA2\u0BA3\u0BA4\u0BA5"+
-        "\u0BA6\u0BA7\u0BA8\u0BA9\u0BAA\u0BAB\u0BAC\u0BAD"+
-        "\u0BAE\u0BAF\u0BB0\u0BB1\u0BB2\u0BB3\u0BB4\u0BB5"+
-        "\u0BB6\u0BB7\u0BB8\u0BB9\u0BBA\u0BBB\u0BBC\u0BBD"+
-        "\u0BBE\u0BBF\u0BC0\u0BC1\u0BC2\u0BC3\u0BC4\u0BC5"+
-        "\u0BC6\u0BC7\u0BC8\u0BC9\u0BCA\u0BCB\u0BCC\u0BCD"+
-        "\u0BCE\u0BCF\u0BD0\u0BD1\u0BD2\u0BD3\u0BD4\u0BD5"+
-        "\u0BD6\u0BD7\u0BD8\u0BD9\u0BDA\u0BDB\u0BDC\u0BDD"+
-        "\u0BDE\u0BDF\u0BE0\u0BE1\u0BE2\u0BE3\u0BE4\u0BE5"+
-        "\u0BE6\u0BE7\u0BE8\u0BE9\u0BEA\u0BEB\u0BEC\u0BED"+
-        "\u0BEE\u0BEF\u0BF0\u0BF1\u0BF2\u0BF3\u0BF4\u0BF5"+
-        "\u0BF6\u0BF7\u0BF8\u0BF9\u0BFA\u0BFB\u0BFC\u0BFD"+
-        "\u0BFE\u0BFF\u0C00\u0C01\u0C02\u0C03\u0C04\u0C05"+
-        "\u0C06\u0C07\u0C08\u0C09\u0C0A\u0C0B\u0C0C\u0C0D"+
-        "\u0C0E\u0C0F\u0C10\u0C11\u0C12\u0C13\u0C14\u0C15"+
-        "\u0C16\u0C17\u0C18\u0C19\u0C1A\u0C1B\u0C1C\u0C1D"+
-        "\u0C1E\u0C1F\u0C20\u0C21\u0C22\u0C23\u0C24\u0C25"+
-        "\u0C26\u0C27\u0C28\u0C29\u0C2A\u0C2B\u0C2C\u0C2D"+
-        "\u0C2E\u0C2F\u0C30\u0C31\u0C32\u0C33\u0C34\u0C35"+
-        "\u0C36\u0C37\u0C38\u0C39\u0C3A\u0C3B\u0C3C\u0C3D"+
-        "\u0C3E\u0C3F\u0C40\u0C41\u0C42\u0C43\u0C44\u0C45"+
-        "\u0C46\u0C47\u0C48\u0C49\u0C4A\u0C4B\u0C4C\u0C4D"+
-        "\u0C4E\u0C4F\u0C50\u0C51\u0C52\u0C53\u0C54\u0C55"+
-        "\u0C56\u0C57\u0C58\u0C59\u0C5A\u0C5B\u0C5C\u0C5D"+
-        "\u0C5E\u0C5F\u0C60\u0C61\u0C62\u0C63\u0C64\u0C65"+
-        "\u0C66\u0C67\u0C68\u0C69\u0C6A\u0C6B\u0C6C\u0C6D"+
-        "\u0C6E\u0C6F\u0C70\u0C71\u0C72\u0C73\u0C74\u0C75"+
-        "\u0C76\u0C77\u0C78\u0C79\u0C7A\u0C7B\u0C7C\u0C7D"+
-        "\u0C7E\u0C7F\u0C80\u0C81\u0C82\u0C83\u0C84\u0C85"+
-        "\u0C86\u0C87\u0C88\u0C89\u0C8A\u0C8B\u0C8C\u0C8D"+
-        "\u0C8E\u0C8F\u0C90\u0C91\u0C92\u0C93\u0C94\u0C95"+
-        "\u0C96\u0C97\u0C98\u0C99\u0C9A\u0C9B\u0C9C\u0C9D"+
-        "\u0C9E\u0C9F\u0CA0\u0CA1\u0CA2\u0CA3\u0CA4\u0CA5"+
-        "\u0CA6\u0CA7\u0CA8\u0CA9\u0CAA\u0CAB\u0CAC\u0CAD"+
-        "\u0CAE\u0CAF\u0CB0\u0CB1\u0CB2\u0CB3\u0CB4\u0CB5"+
-        "\u0CB6\u0CB7\u0CB8\u0CB9\u0CBA\u0CBB\u0CBC\u0CBD"+
-        "\u0CBE\u0CBF\u0CC0\u0CC1\u0CC2\u0CC3\u0CC4\u0CC5"+
-        "\u0CC6\u0CC7\u0CC8\u0CC9\u0CCA\u0CCB\u0CCC\u0CCD"+
-        "\u0CCE\u0CCF\u0CD0\u0CD1\u0CD2\u0CD3\u0CD4\u0CD5"+
-        "\u0CD6\u0CD7\u0CD8\u0CD9\u0CDA\u0CDB\u0CDC\u0CDD"+
-        "\u0CDE\u0CDF\u0CE0\u0CE1\u0CE2\u0CE3\u0CE4\u0CE5"+
-        "\u0CE6\u0CE7\u0CE8\u0CE9\u0CEA\u0CEB\u0CEC\u0CED"+
-        "\u0CEE\u0CEF\u0CF0\u0CF1\u0CF2\u0CF3\u0CF4\u0CF5"+
-        "\u0CF6\u0CF7\u0CF8\u0CF9\u0CFA\u0CFB\u0CFC\u0CFD"+
-        "\u0CFE\u0CFF\u0D00\u0D01\u0D02\u0D03\u0D04\u0D05"+
-        "\u0D06\u0D07\u0D08\u0D09\u0D0A\u0D0B\u0D0C\u0D0D"+
-        "\u0D0E\u0D0F\u0D10\u0D11\u0D12\u0D13\u0D14\u0D15"+
-        "\u0D16\u0D17\u0D18\u0D19\u0D1A\u0D1B\u0D1C\u0D1D"+
-        "\u0D1E\u0D1F\u0D20\u0D21\u0D22\u0D23\u0D24\u0D25"+
-        "\u0D26\u0D27\u0D28\u0D29\u0D2A\u0D2B\u0D2C\u0D2D"+
-        "\u0D2E\u0D2F\u0D30\u0D31\u0D32\u0D33\u0D34\u0D35"+
-        "\u0D36\u0D37\u0D38\u0D39\u0D3A\u0D3B\u0D3C\u0D3D"+
-        "\u0D3E\u0D3F\u0D40\u0D41\u0D42\u0D43\u0D44\u0D45"+
-        "\u0D46\u0D47\u0D48\u0D49\u0D4A\u0D4B\u0D4C\u0D4D"+
-        "\u0D4E\u0D4F\u0D50\u0D51\u0D52\u0D53\u0D54\u0D55"+
-        "\u0D56\u0D57\u0D58\u0D59\u0D5A\u0D5B\u0D5C\u0D5D"+
-        "\u0D5E\u0D5F\u0D60\u0D61\u0D62\u0D63\u0D64\u0D65"+
-        "\u0D66\u0D67\u0D68\u0D69\u0D6A\u0D6B\u0D6C\u0D6D"+
-        "\u0D6E\u0D6F\u0D70\u0D71\u0D72\u0D73\u0D74\u0D75"+
-        "\u0D76\u0D77\u0D78\u0D79\u0D7A\u0D7B\u0D7C\u0D7D"+
-        "\u0D7E\u0D7F\u0D80\u0D81\u0D82\u0D83\u0D84\u0D85"+
-        "\u0D86\u0D87\u0D88\u0D89\u0D8A\u0D8B\u0D8C\u0D8D"+
-        "\u0D8E\u0D8F\u0D90\u0D91\u0D92\u0D93\u0D94\u0D95"+
-        "\u0D96\u0D97\u0D98\u0D99\u0D9A\u0D9B\u0D9C\u0D9D"+
-        "\u0D9E\u0D9F\u0DA0\u0DA1\u0DA2\u0DA3\u0DA4\u0DA5"+
-        "\u0DA6\u0DA7\u0DA8\u0DA9\u0DAA\u0DAB\u0DAC\u0DAD"+
-        "\u0DAE\u0DAF\u0DB0\u0DB1\u0DB2\u0DB3\u0DB4\u0DB5"+
-        "\u0DB6\u0DB7\u0DB8\u0DB9\u0DBA\u0DBB\u0DBC\u0DBD"+
-        "\u0DBE\u0DBF\u0DC0\u0DC1\u0DC2\u0DC3\u0DC4\u0DC5"+
-        "\u0DC6\u0DC7\u0DC8\u0DC9\u0DCA\u0DCB\u0DCC\u0DCD"+
-        "\u0DCE\u0DCF\u0DD0\u0DD1\u0DD2\u0DD3\u0DD4\u0DD5"+
-        "\u0DD6\u0DD7\u0DD8\u0DD9\u0DDA\u0DDB\u0DDC\u0DDD"+
-        "\u0DDE\u0DDF\u0DE0\u0DE1\u0DE2\u0DE3\u0DE4\u0DE5"+
-        "\u0DE6\u0DE7\u0DE8\u0DE9\u0DEA\u0DEB\u0DEC\u0DED"+
-        "\u0DEE\u0DEF\u0DF0\u0DF1\u0DF2\u0DF3\u0DF4\u0DF5"+
-        "\u0DF6\u0DF7\u0DF8\u0DF9\u0DFA\u0DFB\u0DFC\u0DFD"+
-        "\u0DFE\u0DFF\u0E00\u0E01\u0E02\u0E03\u0E04\u0E05"+
-        "\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D"+
-        "\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15"+
-        "\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D"+
-        "\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25"+
-        "\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D"+
-        "\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35"+
-        "\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E3B\u0E3C\u0E3D"+
-        "\u0E3E\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45"+
-        "\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D"+
-        "\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55"+
-        "\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\u0E5C\u0E5D"+
-        "\u0E5E\u0E5F\u0E60\u0E61\u0E62\u0E63\u0E64\u0E65"+
-        "\u0E66\u0E67\u0E68\u0E69\u0E6A\u0E6B\u0E6C\u0E6D"+
-        "\u0E6E\u0E6F\u0E70\u0E71\u0E72\u0E73\u0E74\u0E75"+
-        "\u0E76\u0E77\u0E78\u0E79\u0E7A\u0E7B\u0E7C\u0E7D"+
-        "\u0E7E\u0E7F\u0E80\u0E81\u0E82\u0E83\u0E84\u0E85"+
-        "\u0E86\u0E87\u0E88\u0E89\u0E8A\u0E8B\u0E8C\u0E8D"+
-        "\u0E8E\u0E8F\u0E90\u0E91\u0E92\u0E93\u0E94\u0E95"+
-        "\u0E96\u0E97\u0E98\u0E99\u0E9A\u0E9B\u0E9C\u0E9D"+
-        "\u0E9E\u0E9F\u0EA0\u0EA1\u0EA2\u0EA3\u0EA4\u0EA5"+
-        "\u0EA6\u0EA7\u0EA8\u0EA9\u0EAA\u0EAB\u0EAC\u0EAD"+
-        "\u0EAE\u0EAF\u0EB0\u0EB1\u0EB2\u0EB3\u0EB4\u0EB5"+
-        "\u0EB6\u0EB7\u0EB8\u0EB9\u0EBA\u0EBB\u0EBC\u0EBD"+
-        "\u0EBE\u0EBF\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EC5"+
-        "\u0EC6\u0EC7\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD"+
-        "\u0ECE\u0ECF\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5"+
-        "\u0ED6\u0ED7\u0ED8\u0ED9\u0EDA\u0EDB\u0EDC\u0EDD"+
-        "\u0EDE\u0EDF\u0EE0\u0EE1\u0EE2\u0EE3\u0EE4\u0EE5"+
-        "\u0EE6\u0EE7\u0EE8\u0EE9\u0EEA\u0EEB\u0EEC\u0EED"+
-        "\u0EEE\u0EEF\u0EF0\u0EF1\u0EF2\u0EF3\u0EF4\u0EF5"+
-        "\u0EF6\u0EF7\u0EF8\u0EF9\u0EFA\u0EFB\u0EFC\u0EFD"+
-        "\u0EFE\u0EFF\u0F00\u0F01\u0F02\u0F03\u0F04\u0F05"+
-        "\u0F06\u0F07\u0F08\u0F09\u0F0A\u0F0B\u0F0C\u0F0D"+
-        "\u0F0E\u0F0F\u0F10\u0F11\u0F12\u0F13\u0F14\u0F15"+
-        "\u0F16\u0F17\u0F18\u0F19\u0F1A\u0F1B\u0F1C\u0F1D"+
-        "\u0F1E\u0F1F\u0F20\u0F21\u0F22\u0F23\u0F24\u0F25"+
-        "\u0F26\u0F27\u0F28\u0F29\u0F2A\u0F2B\u0F2C\u0F2D"+
-        "\u0F2E\u0F2F\u0F30\u0F31\u0F32\u0F33\u0F34\u0F35"+
-        "\u0F36\u0F37\u0F38\u0F39\u0F3A\u0F3B\u0F3C\u0F3D"+
-        "\u0F3E\u0F3F\u0F40\u0F41\u0F42\u0F43\u0F44\u0F45"+
-        "\u0F46\u0F47\u0F48\u0F49\u0F4A\u0F4B\u0F4C\u0F4D"+
-        "\u0F4E\u0F4F\u0F50\u0F51\u0F52\u0F53\u0F54\u0F55"+
-        "\u0F56\u0F57\u0F58\u0F59\u0F5A\u0F5B\u0F5C\u0F5D"+
-        "\u0F5E\u0F5F\u0F60\u0F61\u0F62\u0F63\u0F64\u0F65"+
-        "\u0F66\u0F67\u0F68\u0F69\u0F6A\u0F6B\u0F6C\u0F6D"+
-        "\u0F6E\u0F6F\u0F70\u0F71\u0F72\u0F73\u0F74\u0F75"+
-        "\u0F76\u0F77\u0F78\u0F79\u0F7A\u0F7B\u0F7C\u0F7D"+
-        "\u0F7E\u0F7F\u0F80\u0F81\u0F82\u0F83\u0F84\u0F85"+
-        "\u0F86\u0F87\u0F88\u0F89\u0F8A\u0F8B\u0F8C\u0F8D"+
-        "\u0F8E\u0F8F\u0F90\u0F91\u0F92\u0F93\u0F94\u0F95"+
-        "\u0F96\u0F97\u0F98\u0F99\u0F9A\u0F9B\u0F9C\u0F9D"+
-        "\u0F9E\u0F9F\u0FA0\u0FA1\u0FA2\u0FA3\u0FA4\u0FA5"+
-        "\u0FA6\u0FA7\u0FA8\u0FA9\u0FAA\u0FAB\u0FAC\u0FAD"+
-        "\u0FAE\u0FAF\u0FB0\u0FB1\u0FB2\u0FB3\u0FB4\u0FB5"+
-        "\u0FB6\u0FB7\u0FB8\u0FB9\u0FBA\u0FBB\u0FBC\u0FBD"+
-        "\u0FBE\u0FBF\u0FC0\u0FC1\u0FC2\u0FC3\u0FC4\u0FC5"+
-        "\u0FC6\u0FC7\u0FC8\u0FC9\u0FCA\u0FCB\u0FCC\u0FCD"+
-        "\u0FCE\u0FCF\u0FD0\u0FD1\u0FD2\u0FD3\u0FD4\u0FD5"+
-        "\u0FD6\u0FD7\u0FD8\u0FD9\u0FDA\u0FDB\u0FDC\u0FDD"+
-        "\u0FDE\u0FDF\u0FE0\u0FE1\u0FE2\u0FE3\u0FE4\u0FE5"+
-        "\u0FE6\u0FE7\u0FE8\u0FE9\u0FEA\u0FEB\u0FEC\u0FED"+
-        "\u0FEE\u0FEF\u0FF0\u0FF1\u0FF2\u0FF3\u0FF4\u0FF5"+
-        "\u0FF6\u0FF7\u0FF8\u0FF9\u0FFA\u0FFB\u0FFC\u0FFD"+
-        "\u0FFE\u0FFF\u1000\u1001\u1002\u1003\u1004\u1005"+
-        "\u1006\u1007\u1008\u1009\u100A\u100B\u100C\u100D"+
-        "\u100E\u100F\u1010\u1011\u1012\u1013\u1014\u1015"+
-        "\u1016\u1017\u1018\u1019\u101A\u101B\u101C\u101D"+
-        "\u101E\u101F\u1020\u1021\u1022\u1023\u1024\u1025"+
-        "\u1026\u1027\u1028\u1029\u102A\u102B\u102C\u102D"+
-        "\u102E\u102F\u1030\u1031\u1032\u1033\u1034\u1035"+
-        "\u1036\u1037\u1038\u1039\u103A\u103B\u103C\u103D"+
-        "\u103E\u103F\u1040\u1041\u1042\u1043\u1044\u1045"+
-        "\u1046\u1047\u1048\u1049\u104A\u104B\u104C\u104D"+
-        "\u104E\u104F\u1050\u1051\u1052\u1053\u1054\u1055"+
-        "\u1056\u1057\u1058\u1059\u105A\u105B\u105C\u105D"+
-        "\u105E\u105F\u1060\u1061\u1062\u1063\u1064\u1065"+
-        "\u1066\u1067\u1068\u1069\u106A\u106B\u106C\u106D"+
-        "\u106E\u106F\u1070\u1071\u1072\u1073\u1074\u1075"+
-        "\u1076\u1077\u1078\u1079\u107A\u107B\u107C\u107D"+
-        "\u107E\u107F\u1080\u1081\u1082\u1083\u1084\u1085"+
-        "\u1086\u1087\u1088\u1089\u108A\u108B\u108C\u108D"+
-        "\u108E\u108F\u1090\u1091\u1092\u1093\u1094\u1095"+
-        "\u1096\u1097\u1098\u1099\u109A\u109B\u109C\u109D"+
-        "\u109E\u109F\u10A0\u10A1\u10A2\u10A3\u10A4\u10A5"+
-        "\u10A6\u10A7\u10A8\u10A9\u10AA\u10AB\u10AC\u10AD"+
-        "\u10AE\u10AF\u10B0\u10B1\u10B2\u10B3\u10B4\u10B5"+
-        "\u10B6\u10B7\u10B8\u10B9\u10BA\u10BB\u10BC\u10BD"+
-        "\u10BE\u10BF\u10C0\u10C1\u10C2\u10C3\u10C4\u10C5"+
-        "\u10C6\u10C7\u10C8\u10C9\u10CA\u10CB\u10CC\u10CD"+
-        "\u10CE\u10CF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5"+
-        "\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD"+
-        "\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5"+
-        "\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED"+
-        "\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5"+
-        "\u10F6\u10F7\u10F8\u10F9\u10FA\u10FB\u10FC\u10FD"+
-        "\u10FE\u10FF\u1100\u1101\u1102\u1103\u1104\u1105"+
-        "\u1106\u1107\u1108\u1109\u110A\u110B\u110C\u110D"+
-        "\u110E\u110F\u1110\u1111\u1112\u1113\u1114\u1115"+
-        "\u1116\u1117\u1118\u1119\u111A\u111B\u111C\u111D";
-
-    private final static String innerDecoderIndex1=
-        "\u111E\u111F\u1120\u1121\u1122\u1123\u1124\u1125"+
-        "\u1126\u1127\u1128\u1129\u112A\u112B\u112C\u112D"+
-        "\u112E\u112F\u1130\u1131\u1132\u1133\u1134\u1135"+
-        "\u1136\u1137\u1138\u1139\u113A\u113B\u113C\u113D"+
-        "\u113E\u113F\u1140\u1141\u1142\u1143\u1144\u1145"+
-        "\u1146\u1147\u1148\u1149\u114A\u114B\u114C\u114D"+
-        "\u114E\u114F\u1150\u1151\u1152\u1153\u1154\u1155"+
-        "\u1156\u1157\u1158\u1159\u115A\u115B\u115C\u115D"+
-        "\u115E\u115F\u1160\u1161\u1162\u1163\u1164\u1165"+
-        "\u1166\u1167\u1168\u1169\u116A\u116B\u116C\u116D"+
-        "\u116E\u116F\u1170\u1171\u1172\u1173\u1174\u1175"+
-        "\u1176\u1177\u1178\u1179\u117A\u117B\u117C\u117D"+
-        "\u117E\u117F\u1180\u1181\u1182\u1183\u1184\u1185"+
-        "\u1186\u1187\u1188\u1189\u118A\u118B\u118C\u118D"+
-        "\u118E\u118F\u1190\u1191\u1192\u1193\u1194\u1195"+
-        "\u1196\u1197\u1198\u1199\u119A\u119B\u119C\u119D"+
-        "\u119E\u119F\u11A0\u11A1\u11A2\u11A3\u11A4\u11A5"+
-        "\u11A6\u11A7\u11A8\u11A9\u11AA\u11AB\u11AC\u11AD"+
-        "\u11AE\u11AF\u11B0\u11B1\u11B2\u11B3\u11B4\u11B5"+
-        "\u11B6\u11B7\u11B8\u11B9\u11BA\u11BB\u11BC\u11BD"+
-        "\u11BE\u11BF\u11C0\u11C1\u11C2\u11C3\u11C4\u11C5"+
-        "\u11C6\u11C7\u11C8\u11C9\u11CA\u11CB\u11CC\u11CD"+
-        "\u11CE\u11CF\u11D0\u11D1\u11D2\u11D3\u11D4\u11D5"+
-        "\u11D6\u11D7\u11D8\u11D9\u11DA\u11DB\u11DC\u11DD"+
-        "\u11DE\u11DF\u11E0\u11E1\u11E2\u11E3\u11E4\u11E5"+
-        "\u11E6\u11E7\u11E8\u11E9\u11EA\u11EB\u11EC\u11ED"+
-        "\u11EE\u11EF\u11F0\u11F1\u11F2\u11F3\u11F4\u11F5"+
-        "\u11F6\u11F7\u11F8\u11F9\u11FA\u11FB\u11FC\u11FD"+
-        "\u11FE\u11FF\u1200\u1201\u1202\u1203\u1204\u1205"+
-        "\u1206\u1207\u1208\u1209\u120A\u120B\u120C\u120D"+
-        "\u120E\u120F\u1210\u1211\u1212\u1213\u1214\u1215"+
-        "\u1216\u1217\u1218\u1219\u121A\u121B\u121C\u121D"+
-        "\u121E\u121F\u1220\u1221\u1222\u1223\u1224\u1225"+
-        "\u1226\u1227\u1228\u1229\u122A\u122B\u122C\u122D"+
-        "\u122E\u122F\u1230\u1231\u1232\u1233\u1234\u1235"+
-        "\u1236\u1237\u1238\u1239\u123A\u123B\u123C\u123D"+
-        "\u123E\u123F\u1240\u1241\u1242\u1243\u1244\u1245"+
-        "\u1246\u1247\u1248\u1249\u124A\u124B\u124C\u124D"+
-        "\u124E\u124F\u1250\u1251\u1252\u1253\u1254\u1255"+
-        "\u1256\u1257\u1258\u1259\u125A\u125B\u125C\u125D"+
-        "\u125E\u125F\u1260\u1261\u1262\u1263\u1264\u1265"+
-        "\u1266\u1267\u1268\u1269\u126A\u126B\u126C\u126D"+
-        "\u126E\u126F\u1270\u1271\u1272\u1273\u1274\u1275"+
-        "\u1276\u1277\u1278\u1279\u127A\u127B\u127C\u127D"+
-        "\u127E\u127F\u1280\u1281\u1282\u1283\u1284\u1285"+
-        "\u1286\u1287\u1288\u1289\u128A\u128B\u128C\u128D"+
-        "\u128E\u128F\u1290\u1291\u1292\u1293\u1294\u1295"+
-        "\u1296\u1297\u1298\u1299\u129A\u129B\u129C\u129D"+
-        "\u129E\u129F\u12A0\u12A1\u12A2\u12A3\u12A4\u12A5"+
-        "\u12A6\u12A7\u12A8\u12A9\u12AA\u12AB\u12AC\u12AD"+
-        "\u12AE\u12AF\u12B0\u12B1\u12B2\u12B3\u12B4\u12B5"+
-        "\u12B6\u12B7\u12B8\u12B9\u12BA\u12BB\u12BC\u12BD"+
-        "\u12BE\u12BF\u12C0\u12C1\u12C2\u12C3\u12C4\u12C5"+
-        "\u12C6\u12C7\u12C8\u12C9\u12CA\u12CB\u12CC\u12CD"+
-        "\u12CE\u12CF\u12D0\u12D1\u12D2\u12D3\u12D4\u12D5"+
-        "\u12D6\u12D7\u12D8\u12D9\u12DA\u12DB\u12DC\u12DD"+
-        "\u12DE\u12DF\u12E0\u12E1\u12E2\u12E3\u12E4\u12E5"+
-        "\u12E6\u12E7\u12E8\u12E9\u12EA\u12EB\u12EC\u12ED"+
-        "\u12EE\u12EF\u12F0\u12F1\u12F2\u12F3\u12F4\u12F5"+
-        "\u12F6\u12F7\u12F8\u12F9\u12FA\u12FB\u12FC\u12FD"+
-        "\u12FE\u12FF\u1300\u1301\u1302\u1303\u1304\u1305"+
-        "\u1306\u1307\u1308\u1309\u130A\u130B\u130C\u130D"+
-        "\u130E\u130F\u1310\u1311\u1312\u1313\u1314\u1315"+
-        "\u1316\u1317\u1318\u1319\u131A\u131B\u131C\u131D"+
-        "\u131E\u131F\u1320\u1321\u1322\u1323\u1324\u1325"+
-        "\u1326\u1327\u1328\u1329\u132A\u132B\u132C\u132D"+
-        "\u132E\u132F\u1330\u1331\u1332\u1333\u1334\u1335"+
-        "\u1336\u1337\u1338\u1339\u133A\u133B\u133C\u133D"+
-        "\u133E\u133F\u1340\u1341\u1342\u1343\u1344\u1345"+
-        "\u1346\u1347\u1348\u1349\u134A\u134B\u134C\u134D"+
-        "\u134E\u134F\u1350\u1351\u1352\u1353\u1354\u1355"+
-        "\u1356\u1357\u1358\u1359\u135A\u135B\u135C\u135D"+
-        "\u135E\u135F\u1360\u1361\u1362\u1363\u1364\u1365"+
-        "\u1366\u1367\u1368\u1369\u136A\u136B\u136C\u136D"+
-        "\u136E\u136F\u1370\u1371\u1372\u1373\u1374\u1375"+
-        "\u1376\u1377\u1378\u1379\u137A\u137B\u137C\u137D"+
-        "\u137E\u137F\u1380\u1381\u1382\u1383\u1384\u1385"+
-        "\u1386\u1387\u1388\u1389\u138A\u138B\u138C\u138D"+
-        "\u138E\u138F\u1390\u1391\u1392\u1393\u1394\u1395"+
-        "\u1396\u1397\u1398\u1399\u139A\u139B\u139C\u139D"+
-        "\u139E\u139F\u13A0\u13A1\u13A2\u13A3\u13A4\u13A5"+
-        "\u13A6\u13A7\u13A8\u13A9\u13AA\u13AB\u13AC\u13AD"+
-        "\u13AE\u13AF\u13B0\u13B1\u13B2\u13B3\u13B4\u13B5"+
-        "\u13B6\u13B7\u13B8\u13B9\u13BA\u13BB\u13BC\u13BD"+
-        "\u13BE\u13BF\u13C0\u13C1\u13C2\u13C3\u13C4\u13C5"+
-        "\u13C6\u13C7\u13C8\u13C9\u13CA\u13CB\u13CC\u13CD"+
-        "\u13CE\u13CF\u13D0\u13D1\u13D2\u13D3\u13D4\u13D5"+
-        "\u13D6\u13D7\u13D8\u13D9\u13DA\u13DB\u13DC\u13DD"+
-        "\u13DE\u13DF\u13E0\u13E1\u13E2\u13E3\u13E4\u13E5"+
-        "\u13E6\u13E7\u13E8\u13E9\u13EA\u13EB\u13EC\u13ED"+
-        "\u13EE\u13EF\u13F0\u13F1\u13F2\u13F3\u13F4\u13F5"+
-        "\u13F6\u13F7\u13F8\u13F9\u13FA\u13FB\u13FC\u13FD"+
-        "\u13FE\u13FF\u1400\u1401\u1402\u1403\u1404\u1405"+
-        "\u1406\u1407\u1408\u1409\u140A\u140B\u140C\u140D"+
-        "\u140E\u140F\u1410\u1411\u1412\u1413\u1414\u1415"+
-        "\u1416\u1417\u1418\u1419\u141A\u141B\u141C\u141D"+
-        "\u141E\u141F\u1420\u1421\u1422\u1423\u1424\u1425"+
-        "\u1426\u1427\u1428\u1429\u142A\u142B\u142C\u142D"+
-        "\u142E\u142F\u1430\u1431\u1432\u1433\u1434\u1435"+
-        "\u1436\u1437\u1438\u1439\u143A\u143B\u143C\u143D"+
-        "\u143E\u143F\u1440\u1441\u1442\u1443\u1444\u1445"+
-        "\u1446\u1447\u1448\u1449\u144A\u144B\u144C\u144D"+
-        "\u144E\u144F\u1450\u1451\u1452\u1453\u1454\u1455"+
-        "\u1456\u1457\u1458\u1459\u145A\u145B\u145C\u145D"+
-        "\u145E\u145F\u1460\u1461\u1462\u1463\u1464\u1465"+
-        "\u1466\u1467\u1468\u1469\u146A\u146B\u146C\u146D"+
-        "\u146E\u146F\u1470\u1471\u1472\u1473\u1474\u1475"+
-        "\u1476\u1477\u1478\u1479\u147A\u147B\u147C\u147D"+
-        "\u147E\u147F\u1480\u1481\u1482\u1483\u1484\u1485"+
-        "\u1486\u1487\u1488\u1489\u148A\u148B\u148C\u148D"+
-        "\u148E\u148F\u1490\u1491\u1492\u1493\u1494\u1495"+
-        "\u1496\u1497\u1498\u1499\u149A\u149B\u149C\u149D"+
-        "\u149E\u149F\u14A0\u14A1\u14A2\u14A3\u14A4\u14A5"+
-        "\u14A6\u14A7\u14A8\u14A9\u14AA\u14AB\u14AC\u14AD"+
-        "\u14AE\u14AF\u14B0\u14B1\u14B2\u14B3\u14B4\u14B5"+
-        "\u14B6\u14B7\u14B8\u14B9\u14BA\u14BB\u14BC\u14BD"+
-        "\u14BE\u14BF\u14C0\u14C1\u14C2\u14C3\u14C4\u14C5"+
-        "\u14C6\u14C7\u14C8\u14C9\u14CA\u14CB\u14CC\u14CD"+
-        "\u14CE\u14CF\u14D0\u14D1\u14D2\u14D3\u14D4\u14D5"+
-        "\u14D6\u14D7\u14D8\u14D9\u14DA\u14DB\u14DC\u14DD"+
-        "\u14DE\u14DF\u14E0\u14E1\u14E2\u14E3\u14E4\u14E5"+
-        "\u14E6\u14E7\u14E8\u14E9\u14EA\u14EB\u14EC\u14ED"+
-        "\u14EE\u14EF\u14F0\u14F1\u14F2\u14F3\u14F4\u14F5"+
-        "\u14F6\u14F7\u14F8\u14F9\u14FA\u14FB\u14FC\u14FD"+
-        "\u14FE\u14FF\u1500\u1501\u1502\u1503\u1504\u1505"+
-        "\u1506\u1507\u1508\u1509\u150A\u150B\u150C\u150D"+
-        "\u150E\u150F\u1510\u1511\u1512\u1513\u1514\u1515"+
-        "\u1516\u1517\u1518\u1519\u151A\u151B\u151C\u151D"+
-        "\u151E\u151F\u1520\u1521\u1522\u1523\u1524\u1525"+
-        "\u1526\u1527\u1528\u1529\u152A\u152B\u152C\u152D"+
-        "\u152E\u152F\u1530\u1531\u1532\u1533\u1534\u1535"+
-        "\u1536\u1537\u1538\u1539\u153A\u153B\u153C\u153D"+
-        "\u153E\u153F\u1540\u1541\u1542\u1543\u1544\u1545"+
-        "\u1546\u1547\u1548\u1549\u154A\u154B\u154C\u154D"+
-        "\u154E\u154F\u1550\u1551\u1552\u1553\u1554\u1555"+
-        "\u1556\u1557\u1558\u1559\u155A\u155B\u155C\u155D"+
-        "\u155E\u155F\u1560\u1561\u1562\u1563\u1564\u1565"+
-        "\u1566\u1567\u1568\u1569\u156A\u156B\u156C\u156D"+
-        "\u156E\u156F\u1570\u1571\u1572\u1573\u1574\u1575"+
-        "\u1576\u1577\u1578\u1579\u157A\u157B\u157C\u157D"+
-        "\u157E\u157F\u1580\u1581\u1582\u1583\u1584\u1585"+
-        "\u1586\u1587\u1588\u1589\u158A\u158B\u158C\u158D"+
-        "\u158E\u158F\u1590\u1591\u1592\u1593\u1594\u1595"+
-        "\u1596\u1597\u1598\u1599\u159A\u159B\u159C\u159D"+
-        "\u159E\u159F\u15A0\u15A1\u15A2\u15A3\u15A4\u15A5"+
-        "\u15A6\u15A7\u15A8\u15A9\u15AA\u15AB\u15AC\u15AD"+
-        "\u15AE\u15AF\u15B0\u15B1\u15B2\u15B3\u15B4\u15B5"+
-        "\u15B6\u15B7\u15B8\u15B9\u15BA\u15BB\u15BC\u15BD"+
-        "\u15BE\u15BF\u15C0\u15C1\u15C2\u15C3\u15C4\u15C5"+
-        "\u15C6\u15C7\u15C8\u15C9\u15CA\u15CB\u15CC\u15CD"+
-        "\u15CE\u15CF\u15D0\u15D1\u15D2\u15D3\u15D4\u15D5"+
-        "\u15D6\u15D7\u15D8\u15D9\u15DA\u15DB\u15DC\u15DD"+
-        "\u15DE\u15DF\u15E0\u15E1\u15E2\u15E3\u15E4\u15E5"+
-        "\u15E6\u15E7\u15E8\u15E9\u15EA\u15EB\u15EC\u15ED"+
-        "\u15EE\u15EF\u15F0\u15F1\u15F2\u15F3\u15F4\u15F5"+
-        "\u15F6\u15F7\u15F8\u15F9\u15FA\u15FB\u15FC\u15FD"+
-        "\u15FE\u15FF\u1600\u1601\u1602\u1603\u1604\u1605"+
-        "\u1606\u1607\u1608\u1609\u160A\u160B\u160C\u160D"+
-        "\u160E\u160F\u1610\u1611\u1612\u1613\u1614\u1615"+
-        "\u1616\u1617\u1618\u1619\u161A\u161B\u161C\u161D"+
-        "\u161E\u161F\u1620\u1621\u1622\u1623\u1624\u1625"+
-        "\u1626\u1627\u1628\u1629\u162A\u162B\u162C\u162D"+
-        "\u162E\u162F\u1630\u1631\u1632\u1633\u1634\u1635"+
-        "\u1636\u1637\u1638\u1639\u163A\u163B\u163C\u163D"+
-        "\u163E\u163F\u1640\u1641\u1642\u1643\u1644\u1645"+
-        "\u1646\u1647\u1648\u1649\u164A\u164B\u164C\u164D"+
-        "\u164E\u164F\u1650\u1651\u1652\u1653\u1654\u1655"+
-        "\u1656\u1657\u1658\u1659\u165A\u165B\u165C\u165D"+
-        "\u165E\u165F\u1660\u1661\u1662\u1663\u1664\u1665"+
-        "\u1666\u1667\u1668\u1669\u166A\u166B\u166C\u166D"+
-        "\u166E\u166F\u1670\u1671\u1672\u1673\u1674\u1675"+
-        "\u1676\u1677\u1678\u1679\u167A\u167B\u167C\u167D"+
-        "\u167E\u167F\u1680\u1681\u1682\u1683\u1684\u1685"+
-        "\u1686\u1687\u1688\u1689\u168A\u168B\u168C\u168D"+
-        "\u168E\u168F\u1690\u1691\u1692\u1693\u1694\u1695"+
-        "\u1696\u1697\u1698\u1699\u169A\u169B\u169C\u169D"+
-        "\u169E\u169F\u16A0\u16A1\u16A2\u16A3\u16A4\u16A5"+
-        "\u16A6\u16A7\u16A8\u16A9\u16AA\u16AB\u16AC\u16AD"+
-        "\u16AE\u16AF\u16B0\u16B1\u16B2\u16B3\u16B4\u16B5"+
-        "\u16B6\u16B7\u16B8\u16B9\u16BA\u16BB\u16BC\u16BD"+
-        "\u16BE\u16BF\u16C0\u16C1\u16C2\u16C3\u16C4\u16C5"+
-        "\u16C6\u16C7\u16C8\u16C9\u16CA\u16CB\u16CC\u16CD"+
-        "\u16CE\u16CF\u16D0\u16D1\u16D2\u16D3\u16D4\u16D5"+
-        "\u16D6\u16D7\u16D8\u16D9\u16DA\u16DB\u16DC\u16DD"+
-        "\u16DE\u16DF\u16E0\u16E1\u16E2\u16E3\u16E4\u16E5"+
-        "\u16E6\u16E7\u16E8\u16E9\u16EA\u16EB\u16EC\u16ED"+
-        "\u16EE\u16EF\u16F0\u16F1\u16F2\u16F3\u16F4\u16F5"+
-        "\u16F6\u16F7\u16F8\u16F9\u16FA\u16FB\u16FC\u16FD"+
-        "\u16FE\u16FF\u1700\u1701\u1702\u1703\u1704\u1705"+
-        "\u1706\u1707\u1708\u1709\u170A\u170B\u170C\u170D"+
-        "\u170E\u170F\u1710\u1711\u1712\u1713\u1714\u1715"+
-        "\u1716\u1717\u1718\u1719\u171A\u171B\u171C\u171D"+
-        "\u171E\u171F\u1720\u1721\u1722\u1723\u1724\u1725"+
-        "\u1726\u1727\u1728\u1729\u172A\u172B\u172C\u172D"+
-        "\u172E\u172F\u1730\u1731\u1732\u1733\u1734\u1735"+
-        "\u1736\u1737\u1738\u1739\u173A\u173B\u173C\u173D"+
-        "\u173E\u173F\u1740\u1741\u1742\u1743\u1744\u1745"+
-        "\u1746\u1747\u1748\u1749\u174A\u174B\u174C\u174D"+
-        "\u174E\u174F\u1750\u1751\u1752\u1753\u1754\u1755"+
-        "\u1756\u1757\u1758\u1759\u175A\u175B\u175C\u175D"+
-        "\u175E\u175F\u1760\u1761\u1762\u1763\u1764\u1765"+
-        "\u1766\u1767\u1768\u1769\u176A\u176B\u176C\u176D"+
-        "\u176E\u176F\u1770\u1771\u1772\u1773\u1774\u1775"+
-        "\u1776\u1777\u1778\u1779\u177A\u177B\u177C\u177D"+
-        "\u177E\u177F\u1780\u1781\u1782\u1783\u1784\u1785"+
-        "\u1786\u1787\u1788\u1789\u178A\u178B\u178C\u178D"+
-        "\u178E\u178F\u1790\u1791\u1792\u1793\u1794\u1795"+
-        "\u1796\u1797\u1798\u1799\u179A\u179B\u179C\u179D"+
-        "\u179E\u179F\u17A0\u17A1\u17A2\u17A3\u17A4\u17A5"+
-        "\u17A6\u17A7\u17A8\u17A9\u17AA\u17AB\u17AC\u17AD"+
-        "\u17AE\u17AF\u17B0\u17B1\u17B2\u17B3\u17B4\u17B5"+
-        "\u17B6\u17B7\u17B8\u17B9\u17BA\u17BB\u17BC\u17BD"+
-        "\u17BE\u17BF\u17C0\u17C1\u17C2\u17C3\u17C4\u17C5"+
-        "\u17C6\u17C7\u17C8\u17C9\u17CA\u17CB\u17CC\u17CD"+
-        "\u17CE\u17CF\u17D0\u17D1\u17D2\u17D3\u17D4\u17D5"+
-        "\u17D6\u17D7\u17D8\u17D9\u17DA\u17DB\u17DC\u17DD"+
-        "\u17DE\u17DF\u17E0\u17E1\u17E2\u17E3\u17E4\u17E5"+
-        "\u17E6\u17E7\u17E8\u17E9\u17EA\u17EB\u17EC\u17ED"+
-        "\u17EE\u17EF\u17F0\u17F1\u17F2\u17F3\u17F4\u17F5"+
-        "\u17F6\u17F7\u17F8\u17F9\u17FA\u17FB\u17FC\u17FD"+
-        "\u17FE\u17FF\u1800\u1801\u1802\u1803\u1804\u1805"+
-        "\u1806\u1807\u1808\u1809\u180A\u180B\u180C\u180D"+
-        "\u180E\u180F\u1810\u1811\u1812\u1813\u1814\u1815"+
-        "\u1816\u1817\u1818\u1819\u181A\u181B\u181C\u181D"+
-        "\u181E\u181F\u1820\u1821\u1822\u1823\u1824\u1825"+
-        "\u1826\u1827\u1828\u1829\u182A\u182B\u182C\u182D"+
-        "\u182E\u182F\u1830\u1831\u1832\u1833\u1834\u1835"+
-        "\u1836\u1837\u1838\u1839\u183A\u183B\u183C\u183D"+
-        "\u183E\u183F\u1840\u1841\u1842\u1843\u1844\u1845"+
-        "\u1846\u1847\u1848\u1849\u184A\u184B\u184C\u184D"+
-        "\u184E\u184F\u1850\u1851\u1852\u1853\u1854\u1855"+
-        "\u1856\u1857\u1858\u1859\u185A\u185B\u185C\u185D"+
-        "\u185E\u185F\u1860\u1861\u1862\u1863\u1864\u1865"+
-        "\u1866\u1867\u1868\u1869\u186A\u186B\u186C\u186D"+
-        "\u186E\u186F\u1870\u1871\u1872\u1873\u1874\u1875"+
-        "\u1876\u1877\u1878\u1879\u187A\u187B\u187C\u187D"+
-        "\u187E\u187F\u1880\u1881\u1882\u1883\u1884\u1885"+
-        "\u1886\u1887\u1888\u1889\u188A\u188B\u188C\u188D"+
-        "\u188E\u188F\u1890\u1891\u1892\u1893\u1894\u1895"+
-        "\u1896\u1897\u1898\u1899\u189A\u189B\u189C\u189D"+
-        "\u189E\u189F\u18A0\u18A1\u18A2\u18A3\u18A4\u18A5"+
-        "\u18A6\u18A7\u18A8\u18A9\u18AA\u18AB\u18AC\u18AD"+
-        "\u18AE\u18AF\u18B0\u18B1\u18B2\u18B3\u18B4\u18B5"+
-        "\u18B6\u18B7\u18B8\u18B9\u18BA\u18BB\u18BC\u18BD"+
-        "\u18BE\u18BF\u18C0\u18C1\u18C2\u18C3\u18C4\u18C5"+
-        "\u18C6\u18C7\u18C8\u18C9\u18CA\u18CB\u18CC\u18CD"+
-        "\u18CE\u18CF\u18D0\u18D1\u18D2\u18D3\u18D4\u18D5"+
-        "\u18D6\u18D7\u18D8\u18D9\u18DA\u18DB\u18DC\u18DD"+
-        "\u18DE\u18DF\u18E0\u18E1\u18E2\u18E3\u18E4\u18E5"+
-        "\u18E6\u18E7\u18E8\u18E9\u18EA\u18EB\u18EC\u18ED"+
-        "\u18EE\u18EF\u18F0\u18F1\u18F2\u18F3\u18F4\u18F5"+
-        "\u18F6\u18F7\u18F8\u18F9\u18FA\u18FB\u18FC\u18FD"+
-        "\u18FE\u18FF\u1900\u1901\u1902\u1903\u1904\u1905"+
-        "\u1906\u1907\u1908\u1909\u190A\u190B\u190C\u190D"+
-        "\u190E\u190F\u1910\u1911\u1912\u1913\u1914\u1915"+
-        "\u1916\u1917\u1918\u1919\u191A\u191B\u191C\u191D"+
-        "\u191E\u191F\u1920\u1921\u1922\u1923\u1924\u1925"+
-        "\u1926\u1927\u1928\u1929\u192A\u192B\u192C\u192D"+
-        "\u192E\u192F\u1930\u1931\u1932\u1933\u1934\u1935"+
-        "\u1936\u1937\u1938\u1939\u193A\u193B\u193C\u193D"+
-        "\u193E\u193F\u1940\u1941\u1942\u1943\u1944\u1945"+
-        "\u1946\u1947\u1948\u1949\u194A\u194B\u194C\u194D"+
-        "\u194E\u194F\u1950\u1951\u1952\u1953\u1954\u1955"+
-        "\u1956\u1957\u1958\u1959\u195A\u195B\u195C\u195D"+
-        "\u195E\u195F\u1960\u1961\u1962\u1963\u1964\u1965"+
-        "\u1966\u1967\u1968\u1969\u196A\u196B\u196C\u196D"+
-        "\u196E\u196F\u1970\u1971\u1972\u1973\u1974\u1975"+
-        "\u1976\u1977\u1978\u1979\u197A\u197B\u197C\u197D"+
-        "\u197E\u197F\u1980\u1981\u1982\u1983\u1984\u1985"+
-        "\u1986\u1987\u1988\u1989\u198A\u198B\u198C\u198D"+
-        "\u198E\u198F\u1990\u1991\u1992\u1993\u1994\u1995"+
-        "\u1996\u1997\u1998\u1999\u199A\u199B\u199C\u199D"+
-        "\u199E\u199F\u19A0\u19A1\u19A2\u19A3\u19A4\u19A5"+
-        "\u19A6\u19A7\u19A8\u19A9\u19AA\u19AB\u19AC\u19AD"+
-        "\u19AE\u19AF\u19B0\u19B1\u19B2\u19B3\u19B4\u19B5"+
-        "\u19B6\u19B7\u19B8\u19B9\u19BA\u19BB\u19BC\u19BD"+
-        "\u19BE\u19BF\u19C0\u19C1\u19C2\u19C3\u19C4\u19C5"+
-        "\u19C6\u19C7\u19C8\u19C9\u19CA\u19CB\u19CC\u19CD"+
-        "\u19CE\u19CF\u19D0\u19D1\u19D2\u19D3\u19D4\u19D5"+
-        "\u19D6\u19D7\u19D8\u19D9\u19DA\u19DB\u19DC\u19DD"+
-        "\u19DE\u19DF\u19E0\u19E1\u19E2\u19E3\u19E4\u19E5"+
-        "\u19E6\u19E7\u19E8\u19E9\u19EA\u19EB\u19EC\u19ED"+
-        "\u19EE\u19EF\u19F0\u19F1\u19F2\u19F3\u19F4\u19F5"+
-        "\u19F6\u19F7\u19F8\u19F9\u19FA\u19FB\u19FC\u19FD"+
-        "\u19FE\u19FF\u1A00\u1A01\u1A02\u1A03\u1A04\u1A05"+
-        "\u1A06\u1A07\u1A08\u1A09\u1A0A\u1A0B\u1A0C\u1A0D"+
-        "\u1A0E\u1A0F\u1A10\u1A11\u1A12\u1A13\u1A14\u1A15"+
-        "\u1A16\u1A17\u1A18\u1A19\u1A1A\u1A1B\u1A1C\u1A1D"+
-        "\u1A1E\u1A1F\u1A20\u1A21\u1A22\u1A23\u1A24\u1A25"+
-        "\u1A26\u1A27\u1A28\u1A29\u1A2A\u1A2B\u1A2C\u1A2D"+
-        "\u1A2E\u1A2F\u1A30\u1A31\u1A32\u1A33\u1A34\u1A35"+
-        "\u1A36\u1A37\u1A38\u1A39\u1A3A\u1A3B\u1A3C\u1A3D"+
-        "\u1A3E\u1A3F\u1A40\u1A41\u1A42\u1A43\u1A44\u1A45"+
-        "\u1A46\u1A47\u1A48\u1A49\u1A4A\u1A4B\u1A4C\u1A4D"+
-        "\u1A4E\u1A4F\u1A50\u1A51\u1A52\u1A53\u1A54\u1A55"+
-        "\u1A56\u1A57\u1A58\u1A59\u1A5A\u1A5B\u1A5C\u1A5D"+
-        "\u1A5E\u1A5F\u1A60\u1A61\u1A62\u1A63\u1A64\u1A65"+
-        "\u1A66\u1A67\u1A68\u1A69\u1A6A\u1A6B\u1A6C\u1A6D"+
-        "\u1A6E\u1A6F\u1A70\u1A71\u1A72\u1A73\u1A74\u1A75"+
-        "\u1A76\u1A77\u1A78\u1A79\u1A7A\u1A7B\u1A7C\u1A7D"+
-        "\u1A7E\u1A7F\u1A80\u1A81\u1A82\u1A83\u1A84\u1A85"+
-        "\u1A86\u1A87\u1A88\u1A89\u1A8A\u1A8B\u1A8C\u1A8D"+
-        "\u1A8E\u1A8F\u1A90\u1A91\u1A92\u1A93\u1A94\u1A95"+
-        "\u1A96\u1A97\u1A98\u1A99\u1A9A\u1A9B\u1A9C\u1A9D"+
-        "\u1A9E\u1A9F\u1AA0\u1AA1\u1AA2\u1AA3\u1AA4\u1AA5"+
-        "\u1AA6\u1AA7\u1AA8\u1AA9\u1AAA\u1AAB\u1AAC\u1AAD"+
-        "\u1AAE\u1AAF\u1AB0\u1AB1\u1AB2\u1AB3\u1AB4\u1AB5"+
-        "\u1AB6\u1AB7\u1AB8\u1AB9\u1ABA\u1ABB\u1ABC\u1ABD"+
-        "\u1ABE\u1ABF\u1AC0\u1AC1\u1AC2\u1AC3\u1AC4\u1AC5"+
-        "\u1AC6\u1AC7\u1AC8\u1AC9\u1ACA\u1ACB\u1ACC\u1ACD"+
-        "\u1ACE\u1ACF\u1AD0\u1AD1\u1AD2\u1AD3\u1AD4\u1AD5"+
-        "\u1AD6\u1AD7\u1AD8\u1AD9\u1ADA\u1ADB\u1ADC\u1ADD"+
-        "\u1ADE\u1ADF\u1AE0\u1AE1\u1AE2\u1AE3\u1AE4\u1AE5"+
-        "\u1AE6\u1AE7\u1AE8\u1AE9\u1AEA\u1AEB\u1AEC\u1AED"+
-        "\u1AEE\u1AEF\u1AF0\u1AF1\u1AF2\u1AF3\u1AF4\u1AF5"+
-        "\u1AF6\u1AF7\u1AF8\u1AF9\u1AFA\u1AFB\u1AFC\u1AFD"+
-        "\u1AFE\u1AFF\u1B00\u1B01\u1B02\u1B03\u1B04\u1B05"+
-        "\u1B06\u1B07\u1B08\u1B09\u1B0A\u1B0B\u1B0C\u1B0D"+
-        "\u1B0E\u1B0F\u1B10\u1B11\u1B12\u1B13\u1B14\u1B15"+
-        "\u1B16\u1B17\u1B18\u1B19\u1B1A\u1B1B\u1B1C\u1B1D"+
-        "\u1B1E\u1B1F\u1B20\u1B21\u1B22\u1B23\u1B24\u1B25"+
-        "\u1B26\u1B27\u1B28\u1B29\u1B2A\u1B2B\u1B2C\u1B2D"+
-        "\u1B2E\u1B2F\u1B30\u1B31\u1B32\u1B33\u1B34\u1B35"+
-        "\u1B36\u1B37\u1B38\u1B39\u1B3A\u1B3B\u1B3C\u1B3D"+
-        "\u1B3E\u1B3F\u1B40\u1B41\u1B42\u1B43\u1B44\u1B45"+
-        "\u1B46\u1B47\u1B48\u1B49\u1B4A\u1B4B\u1B4C\u1B4D"+
-        "\u1B4E\u1B4F\u1B50\u1B51\u1B52\u1B53\u1B54\u1B55"+
-        "\u1B56\u1B57\u1B58\u1B59\u1B5A\u1B5B\u1B5C\u1B5D"+
-        "\u1B5E\u1B5F\u1B60\u1B61\u1B62\u1B63\u1B64\u1B65"+
-        "\u1B66\u1B67\u1B68\u1B69\u1B6A\u1B6B\u1B6C\u1B6D"+
-        "\u1B6E\u1B6F\u1B70\u1B71\u1B72\u1B73\u1B74\u1B75"+
-        "\u1B76\u1B77\u1B78\u1B79\u1B7A\u1B7B\u1B7C\u1B7D"+
-        "\u1B7E\u1B7F\u1B80\u1B81\u1B82\u1B83\u1B84\u1B85"+
-        "\u1B86\u1B87\u1B88\u1B89\u1B8A\u1B8B\u1B8C\u1B8D"+
-        "\u1B8E\u1B8F\u1B90\u1B91\u1B92\u1B93\u1B94\u1B95"+
-        "\u1B96\u1B97\u1B98\u1B99\u1B9A\u1B9B\u1B9C\u1B9D"+
-        "\u1B9E\u1B9F\u1BA0\u1BA1\u1BA2\u1BA3\u1BA4\u1BA5"+
-        "\u1BA6\u1BA7\u1BA8\u1BA9\u1BAA\u1BAB\u1BAC\u1BAD"+
-        "\u1BAE\u1BAF\u1BB0\u1BB1\u1BB2\u1BB3\u1BB4\u1BB5"+
-        "\u1BB6\u1BB7\u1BB8\u1BB9\u1BBA\u1BBB\u1BBC\u1BBD"+
-        "\u1BBE\u1BBF\u1BC0\u1BC1\u1BC2\u1BC3\u1BC4\u1BC5"+
-        "\u1BC6\u1BC7\u1BC8\u1BC9\u1BCA\u1BCB\u1BCC\u1BCD"+
-        "\u1BCE\u1BCF\u1BD0\u1BD1\u1BD2\u1BD3\u1BD4\u1BD5"+
-        "\u1BD6\u1BD7\u1BD8\u1BD9\u1BDA\u1BDB\u1BDC\u1BDD"+
-        "\u1BDE\u1BDF\u1BE0\u1BE1\u1BE2\u1BE3\u1BE4\u1BE5"+
-        "\u1BE6\u1BE7\u1BE8\u1BE9\u1BEA\u1BEB\u1BEC\u1BED"+
-        "\u1BEE\u1BEF\u1BF0\u1BF1\u1BF2\u1BF3\u1BF4\u1BF5"+
-        "\u1BF6\u1BF7\u1BF8\u1BF9\u1BFA\u1BFB\u1BFC\u1BFD"+
-        "\u1BFE\u1BFF\u1C00\u1C01\u1C02\u1C03\u1C04\u1C05"+
-        "\u1C06\u1C07\u1C08\u1C09\u1C0A\u1C0B\u1C0C\u1C0D"+
-        "\u1C0E\u1C0F\u1C10\u1C11\u1C12\u1C13\u1C14\u1C15"+
-        "\u1C16\u1C17\u1C18\u1C19\u1C1A\u1C1B\u1C1C\u1C1D"+
-        "\u1C1E\u1C1F\u1C20\u1C21\u1C22\u1C23\u1C24\u1C25"+
-        "\u1C26\u1C27\u1C28\u1C29\u1C2A\u1C2B\u1C2C\u1C2D"+
-        "\u1C2E\u1C2F\u1C30\u1C31\u1C32\u1C33\u1C34\u1C35"+
-        "\u1C36\u1C37\u1C38\u1C39\u1C3A\u1C3B\u1C3C\u1C3D"+
-        "\u1C3E\u1C3F\u1C40\u1C41\u1C42\u1C43\u1C44\u1C45"+
-        "\u1C46\u1C47\u1C48\u1C49\u1C4A\u1C4B\u1C4C\u1C4D"+
-        "\u1C4E\u1C4F\u1C50\u1C51\u1C52\u1C53\u1C54\u1C55"+
-        "\u1C56\u1C57\u1C58\u1C59\u1C5A\u1C5B\u1C5C\u1C5D"+
-        "\u1C5E\u1C5F\u1C60\u1C61\u1C62\u1C63\u1C64\u1C65"+
-        "\u1C66\u1C67\u1C68\u1C69\u1C6A\u1C6B\u1C6C\u1C6D"+
-        "\u1C6E\u1C6F\u1C70\u1C71\u1C72\u1C73\u1C74\u1C75"+
-        "\u1C76\u1C77\u1C78\u1C79\u1C7A\u1C7B\u1C7C\u1C7D"+
-        "\u1C7E\u1C7F\u1C80\u1C81\u1C82\u1C83\u1C84\u1C85"+
-        "\u1C86\u1C87\u1C88\u1C89\u1C8A\u1C8B\u1C8C\u1C8D"+
-        "\u1C8E\u1C8F\u1C90\u1C91\u1C92\u1C93\u1C94\u1C95"+
-        "\u1C96\u1C97\u1C98\u1C99\u1C9A\u1C9B\u1C9C\u1C9D"+
-        "\u1C9E\u1C9F\u1CA0\u1CA1\u1CA2\u1CA3\u1CA4\u1CA5"+
-        "\u1CA6\u1CA7\u1CA8\u1CA9\u1CAA\u1CAB\u1CAC\u1CAD"+
-        "\u1CAE\u1CAF\u1CB0\u1CB1\u1CB2\u1CB3\u1CB4\u1CB5"+
-        "\u1CB6\u1CB7\u1CB8\u1CB9\u1CBA\u1CBB\u1CBC\u1CBD"+
-        "\u1CBE\u1CBF\u1CC0\u1CC1\u1CC2\u1CC3\u1CC4\u1CC5"+
-        "\u1CC6\u1CC7\u1CC8\u1CC9\u1CCA\u1CCB\u1CCC\u1CCD"+
-        "\u1CCE\u1CCF\u1CD0\u1CD1\u1CD2\u1CD3\u1CD4\u1CD5"+
-        "\u1CD6\u1CD7\u1CD8\u1CD9\u1CDA\u1CDB\u1CDC\u1CDD"+
-        "\u1CDE\u1CDF\u1CE0\u1CE1\u1CE2\u1CE3\u1CE4\u1CE5"+
-        "\u1CE6\u1CE7\u1CE8\u1CE9\u1CEA\u1CEB\u1CEC\u1CED"+
-        "\u1CEE\u1CEF\u1CF0\u1CF1\u1CF2\u1CF3\u1CF4\u1CF5"+
-        "\u1CF6\u1CF7\u1CF8\u1CF9\u1CFA\u1CFB\u1CFC\u1CFD"+
-        "\u1CFE\u1CFF\u1D00\u1D01\u1D02\u1D03\u1D04\u1D05"+
-        "\u1D06\u1D07\u1D08\u1D09\u1D0A\u1D0B\u1D0C\u1D0D"+
-        "\u1D0E\u1D0F\u1D10\u1D11\u1D12\u1D13\u1D14\u1D15"+
-        "\u1D16\u1D17\u1D18\u1D19\u1D1A\u1D1B\u1D1C\u1D1D"+
-        "\u1D1E\u1D1F\u1D20\u1D21\u1D22\u1D23\u1D24\u1D25"+
-        "\u1D26\u1D27\u1D28\u1D29\u1D2A\u1D2B\u1D2C\u1D2D"+
-        "\u1D2E\u1D2F\u1D30\u1D31\u1D32\u1D33\u1D34\u1D35"+
-        "\u1D36\u1D37\u1D38\u1D39\u1D3A\u1D3B\u1D3C\u1D3D"+
-        "\u1D3E\u1D3F\u1D40\u1D41\u1D42\u1D43\u1D44\u1D45"+
-        "\u1D46\u1D47\u1D48\u1D49\u1D4A\u1D4B\u1D4C\u1D4D"+
-        "\u1D4E\u1D4F\u1D50\u1D51\u1D52\u1D53\u1D54\u1D55"+
-        "\u1D56\u1D57\u1D58\u1D59\u1D5A\u1D5B\u1D5C\u1D5D"+
-        "\u1D5E\u1D5F\u1D60\u1D61\u1D62\u1D63\u1D64\u1D65"+
-        "\u1D66\u1D67\u1D68\u1D69\u1D6A\u1D6B\u1D6C\u1D6D"+
-        "\u1D6E\u1D6F\u1D70\u1D71\u1D72\u1D73\u1D74\u1D75"+
-        "\u1D76\u1D77\u1D78\u1D79\u1D7A\u1D7B\u1D7C\u1D7D"+
-        "\u1D7E\u1D7F\u1D80\u1D81\u1D82\u1D83\u1D84\u1D85"+
-        "\u1D86\u1D87\u1D88\u1D89\u1D8A\u1D8B\u1D8C\u1D8D"+
-        "\u1D8E\u1D8F\u1D90\u1D91\u1D92\u1D93\u1D94\u1D95"+
-        "\u1D96\u1D97\u1D98\u1D99\u1D9A\u1D9B\u1D9C\u1D9D"+
-        "\u1D9E\u1D9F\u1DA0\u1DA1\u1DA2\u1DA3\u1DA4\u1DA5"+
-        "\u1DA6\u1DA7\u1DA8\u1DA9\u1DAA\u1DAB\u1DAC\u1DAD"+
-        "\u1DAE\u1DAF\u1DB0\u1DB1\u1DB2\u1DB3\u1DB4\u1DB5"+
-        "\u1DB6\u1DB7\u1DB8\u1DB9\u1DBA\u1DBB\u1DBC\u1DBD"+
-        "\u1DBE\u1DBF\u1DC0\u1DC1\u1DC2\u1DC3\u1DC4\u1DC5"+
-        "\u1DC6\u1DC7\u1DC8\u1DC9\u1DCA\u1DCB\u1DCC\u1DCD"+
-        "\u1DCE\u1DCF\u1DD0\u1DD1\u1DD2\u1DD3\u1DD4\u1DD5"+
-        "\u1DD6\u1DD7\u1DD8\u1DD9\u1DDA\u1DDB\u1DDC\u1DDD"+
-        "\u1DDE\u1DDF\u1DE0\u1DE1\u1DE2\u1DE3\u1DE4\u1DE5"+
-        "\u1DE6\u1DE7\u1DE8\u1DE9\u1DEA\u1DEB\u1DEC\u1DED"+
-        "\u1DEE\u1DEF\u1DF0\u1DF1\u1DF2\u1DF3\u1DF4\u1DF5"+
-        "\u1DF6\u1DF7\u1DF8\u1DF9\u1DFA\u1DFB\u1DFC\u1DFD"+
-        "\u1DFE\u1DFF\u1E00\u1E01\u1E02\u1E03\u1E04\u1E05"+
-        "\u1E06\u1E07\u1E08\u1E09\u1E0A\u1E0B\u1E0C\u1E0D"+
-        "\u1E0E\u1E0F\u1E10\u1E11\u1E12\u1E13\u1E14\u1E15"+
-        "\u1E16\u1E17\u1E18\u1E19\u1E1A\u1E1B\u1E1C\u1E1D"+
-        "\u1E1E\u1E1F\u1E20\u1E21\u1E22\u1E23\u1E24\u1E25"+
-        "\u1E26\u1E27\u1E28\u1E29\u1E2A\u1E2B\u1E2C\u1E2D"+
-        "\u1E2E\u1E2F\u1E30\u1E31\u1E32\u1E33\u1E34\u1E35"+
-        "\u1E36\u1E37\u1E38\u1E39\u1E3A\u1E3B\u1E3C\u1E3D"+
-        "\u1E3E\u1E3F\u1E40\u1E41\u1E42\u1E43\u1E44\u1E45"+
-        "\u1E46\u1E47\u1E48\u1E49\u1E4A\u1E4B\u1E4C\u1E4D"+
-        "\u1E4E\u1E4F\u1E50\u1E51\u1E52\u1E53\u1E54\u1E55"+
-        "\u1E56\u1E57\u1E58\u1E59\u1E5A\u1E5B\u1E5C\u1E5D"+
-        "\u1E5E\u1E5F\u1E60\u1E61\u1E62\u1E63\u1E64\u1E65"+
-        "\u1E66\u1E67\u1E68\u1E69\u1E6A\u1E6B\u1E6C\u1E6D"+
-        "\u1E6E\u1E6F\u1E70\u1E71\u1E72\u1E73\u1E74\u1E75"+
-        "\u1E76\u1E77\u1E78\u1E79\u1E7A\u1E7B\u1E7C\u1E7D"+
-        "\u1E7E\u1E7F\u1E80\u1E81\u1E82\u1E83\u1E84\u1E85"+
-        "\u1E86\u1E87\u1E88\u1E89\u1E8A\u1E8B\u1E8C\u1E8D"+
-        "\u1E8E\u1E8F\u1E90\u1E91\u1E92\u1E93\u1E94\u1E95"+
-        "\u1E96\u1E97\u1E98\u1E99\u1E9A\u1E9B\u1E9C\u1E9D"+
-        "\u1E9E\u1E9F\u1EA0\u1EA1\u1EA2\u1EA3\u1EA4\u1EA5"+
-        "\u1EA6\u1EA7\u1EA8\u1EA9\u1EAA\u1EAB\u1EAC\u1EAD"+
-        "\u1EAE\u1EAF\u1EB0\u1EB1\u1EB2\u1EB3\u1EB4\u1EB5"+
-        "\u1EB6\u1EB7\u1EB8\u1EB9\u1EBA\u1EBB\u1EBC\u1EBD"+
-        "\u1EBE\u1EBF\u1EC0\u1EC1\u1EC2\u1EC3\u1EC4\u1EC5"+
-        "\u1EC6\u1EC7\u1EC8\u1EC9\u1ECA\u1ECB\u1ECC\u1ECD"+
-        "\u1ECE\u1ECF\u1ED0\u1ED1\u1ED2\u1ED3\u1ED4\u1ED5"+
-        "\u1ED6\u1ED7\u1ED8\u1ED9\u1EDA\u1EDB\u1EDC\u1EDD"+
-        "\u1EDE\u1EDF\u1EE0\u1EE1\u1EE2\u1EE3\u1EE4\u1EE5"+
-        "\u1EE6\u1EE7\u1EE8\u1EE9\u1EEA\u1EEB\u1EEC\u1EED"+
-        "\u1EEE\u1EEF\u1EF0\u1EF1\u1EF2\u1EF3\u1EF4\u1EF5"+
-        "\u1EF6\u1EF7\u1EF8\u1EF9\u1EFA\u1EFB\u1EFC\u1EFD"+
-        "\u1EFE\u1EFF\u1F00\u1F01\u1F02\u1F03\u1F04\u1F05"+
-        "\u1F06\u1F07\u1F08\u1F09\u1F0A\u1F0B\u1F0C\u1F0D"+
-        "\u1F0E\u1F0F\u1F10\u1F11\u1F12\u1F13\u1F14\u1F15"+
-        "\u1F16\u1F17\u1F18\u1F19\u1F1A\u1F1B\u1F1C\u1F1D"+
-        "\u1F1E\u1F1F\u1F20\u1F21\u1F22\u1F23\u1F24\u1F25"+
-        "\u1F26\u1F27\u1F28\u1F29\u1F2A\u1F2B\u1F2C\u1F2D"+
-        "\u1F2E\u1F2F\u1F30\u1F31\u1F32\u1F33\u1F34\u1F35"+
-        "\u1F36\u1F37\u1F38\u1F39\u1F3A\u1F3B\u1F3C\u1F3D"+
-        "\u1F3E\u1F3F\u1F40\u1F41\u1F42\u1F43\u1F44\u1F45"+
-        "\u1F46\u1F47\u1F48\u1F49\u1F4A\u1F4B\u1F4C\u1F4D"+
-        "\u1F4E\u1F4F\u1F50\u1F51\u1F52\u1F53\u1F54\u1F55"+
-        "\u1F56\u1F57\u1F58\u1F59\u1F5A\u1F5B\u1F5C\u1F5D"+
-        "\u1F5E\u1F5F\u1F60\u1F61\u1F62\u1F63\u1F64\u1F65"+
-        "\u1F66\u1F67\u1F68\u1F69\u1F6A\u1F6B\u1F6C\u1F6D"+
-        "\u1F6E\u1F6F\u1F70\u1F71\u1F72\u1F73\u1F74\u1F75"+
-        "\u1F76\u1F77\u1F78\u1F79\u1F7A\u1F7B\u1F7C\u1F7D"+
-        "\u1F7E\u1F7F\u1F80\u1F81\u1F82\u1F83\u1F84\u1F85"+
-        "\u1F86\u1F87\u1F88\u1F89\u1F8A\u1F8B\u1F8C\u1F8D"+
-        "\u1F8E\u1F8F\u1F90\u1F91\u1F92\u1F93\u1F94\u1F95"+
-        "\u1F96\u1F97\u1F98\u1F99\u1F9A\u1F9B\u1F9C\u1F9D"+
-        "\u1F9E\u1F9F\u1FA0\u1FA1\u1FA2\u1FA3\u1FA4\u1FA5"+
-        "\u1FA6\u1FA7\u1FA8\u1FA9\u1FAA\u1FAB\u1FAC\u1FAD"+
-        "\u1FAE\u1FAF\u1FB0\u1FB1\u1FB2\u1FB3\u1FB4\u1FB5"+
-        "\u1FB6\u1FB7\u1FB8\u1FB9\u1FBA\u1FBB\u1FBC\u1FBD"+
-        "\u1FBE\u1FBF\u1FC0\u1FC1\u1FC2\u1FC3\u1FC4\u1FC5"+
-        "\u1FC6\u1FC7\u1FC8\u1FC9\u1FCA\u1FCB\u1FCC\u1FCD"+
-        "\u1FCE\u1FCF\u1FD0\u1FD1\u1FD2\u1FD3\u1FD4\u1FD5"+
-        "\u1FD6\u1FD7\u1FD8\u1FD9\u1FDA\u1FDB\u1FDC\u1FDD"+
-        "\u1FDE\u1FDF\u1FE0\u1FE1\u1FE2\u1FE3\u1FE4\u1FE5"+
-        "\u1FE6\u1FE7\u1FE8\u1FE9\u1FEA\u1FEB\u1FEC\u1FED"+
-        "\u1FEE\u1FEF\u1FF0\u1FF1\u1FF2\u1FF3\u1FF4\u1FF5"+
-        "\u1FF6\u1FF7\u1FF8\u1FF9\u1FFA\u1FFB\u1FFC\u1FFD"+
-        "\u1FFE\u1FFF\u2000\u2001\u2002\u2003\u2004\u2005"+
-        "\u2006\u2007\u2008\u2009\u200A\u200B\u200C\u200D"+
-        "\u200E\u200F\u2011\u2012\u2017\u201A\u201B\u201E"+
-        "\u201F\u2020\u2021\u2022\u2023\u2024\u2027\u2028"+
-        "\u2029\u202A\u202B\u202C\u202D\u202E\u202F\u2031"+
-        "\u2034\u2036\u2037\u2038\u2039\u203A\u203C\u203D"+
-        "\u203E\u203F\u2040\u2041\u2042\u2043\u2044\u2045"+
-        "\u2046\u2047\u2048\u2049\u204A\u204B\u204C\u204D"+
-        "\u204E\u204F\u2050\u2051\u2052\u2053\u2054\u2055"+
-        "\u2056\u2057\u2058\u2059\u205A\u205B\u205C\u205D"+
-        "\u205E\u205F\u2060\u2061\u2062\u2063\u2064\u2065"+
-        "\u2066\u2067\u2068\u2069\u206A\u206B\u206C\u206D"+
-        "\u206E\u206F\u2070\u2071\u2072\u2073\u2074\u2075"+
-        "\u2076\u2077\u2078\u2079\u207A\u207B\u207C\u207D"+
-        "\u207E\u207F\u2080\u2081\u2082\u2083\u2084\u2085"+
-        "\u2086\u2087\u2088\u2089\u208A\u208B\u208C\u208D"+
-        "\u208E\u208F\u2090\u2091\u2092\u2093\u2094\u2095"+
-        "\u2096\u2097\u2098\u2099\u209A\u209B\u209C\u209D"+
-        "\u209E\u209F\u20A0\u20A1\u20A2\u20A3\u20A4\u20A5"+
-        "\u20A6\u20A7\u20A8\u20A9\u20AA\u20AB\u20AD\u20AE"+
-        "\u20AF\u20B0\u20B1\u20B2\u20B3\u20B4\u20B5\u20B6"+
-        "\u20B7\u20B8\u20B9\u20BA\u20BB\u20BC\u20BD\u20BE"+
-        "\u20BF\u20C0\u20C1\u20C2\u20C3\u20C4\u20C5\u20C6"+
-        "\u20C7\u20C8\u20C9\u20CA\u20CB\u20CC\u20CD\u20CE"+
-        "\u20CF\u20D0\u20D1\u20D2\u20D3\u20D4\u20D5\u20D6"+
-        "\u20D7\u20D8\u20D9\u20DA\u20DB\u20DC\u20DD\u20DE"+
-        "\u20DF\u20E0\u20E1\u20E2\u20E3\u20E4\u20E5\u20E6"+
-        "\u20E7\u20E8\u20E9\u20EA\u20EB\u20EC\u20ED\u20EE"+
-        "\u20EF\u20F0\u20F1\u20F2\u20F3\u20F4\u20F5\u20F6"+
-        "\u20F7\u20F8\u20F9\u20FA\u20FB\u20FC\u20FD\u20FE"+
-        "\u20FF\u2100\u2101\u2102\u2104\u2106\u2107\u2108"+
-        "\u210A\u210B\u210C\u210D\u210E\u210F\u2110\u2111"+
-        "\u2112\u2113\u2114\u2115\u2117\u2118\u2119\u211A"+
-        "\u211B\u211C\u211D\u211E\u211F\u2120\u2122\u2123"+
-        "\u2124\u2125\u2126\u2127\u2128\u2129\u212A\u212B"+
-        "\u212C\u212D\u212E\u212F\u2130\u2131\u2132\u2133";
-
-    private final static String innerDecoderIndex2=
-        "\u2134\u2135\u2136\u2137\u2138\u2139\u213A\u213B"+
-        "\u213C\u213D\u213E\u213F\u2140\u2141\u2142\u2143"+
-        "\u2144\u2145\u2146\u2147\u2148\u2149\u214A\u214B"+
-        "\u214C\u214D\u214E\u214F\u2150\u2151\u2152\u2153"+
-        "\u2154\u2155\u2156\u2157\u2158\u2159\u215A\u215B"+
-        "\u215C\u215D\u215E\u215F\u216C\u216D\u216E\u216F"+
-        "\u217A\u217B\u217C\u217D\u217E\u217F\u2180\u2181"+
-        "\u2182\u2183\u2184\u2185\u2186\u2187\u2188\u2189"+
-        "\u218A\u218B\u218C\u218D\u218E\u218F\u2194\u2195"+
-        "\u219A\u219B\u219C\u219D\u219E\u219F\u21A0\u21A1"+
-        "\u21A2\u21A3\u21A4\u21A5\u21A6\u21A7\u21A8\u21A9"+
-        "\u21AA\u21AB\u21AC\u21AD\u21AE\u21AF\u21B0\u21B1"+
-        "\u21B2\u21B3\u21B4\u21B5\u21B6\u21B7\u21B8\u21B9"+
-        "\u21BA\u21BB\u21BC\u21BD\u21BE\u21BF\u21C0\u21C1"+
-        "\u21C2\u21C3\u21C4\u21C5\u21C6\u21C7\u21C8\u21C9"+
-        "\u21CA\u21CB\u21CC\u21CD\u21CE\u21CF\u21D0\u21D1"+
-        "\u21D2\u21D3\u21D4\u21D5\u21D6\u21D7\u21D8\u21D9"+
-        "\u21DA\u21DB\u21DC\u21DD\u21DE\u21DF\u21E0\u21E1"+
-        "\u21E2\u21E3\u21E4\u21E5\u21E6\u21E7\u21E8\u21E9"+
-        "\u21EA\u21EB\u21EC\u21ED\u21EE\u21EF\u21F0\u21F1"+
-        "\u21F2\u21F3\u21F4\u21F5\u21F6\u21F7\u21F8\u21F9"+
-        "\u21FA\u21FB\u21FC\u21FD\u21FE\u21FF\u2200\u2201"+
-        "\u2202\u2203\u2204\u2205\u2206\u2207\u2209\u220A"+
-        "\u220B\u220C\u220D\u220E\u2210\u2212\u2213\u2214"+
-        "\u2216\u2217\u2218\u2219\u221B\u221C\u2221\u2222"+
-        "\u2224\u2226\u222C\u222D\u222F\u2230\u2231\u2232"+
-        "\u2233\u2238\u2239\u223A\u223B\u223C\u223E\u223F"+
-        "\u2240\u2241\u2242\u2243\u2244\u2245\u2246\u2247"+
-        "\u2249\u224A\u224B\u224D\u224E\u224F\u2250\u2251"+
-        "\u2253\u2254\u2255\u2256\u2257\u2258\u2259\u225A"+
-        "\u225B\u225C\u225D\u225E\u225F\u2262\u2263\u2268"+
-        "\u2269\u226A\u226B\u226C\u226D\u2270\u2271\u2272"+
-        "\u2273\u2274\u2275\u2276\u2277\u2278\u2279\u227A"+
-        "\u227B\u227C\u227D\u227E\u227F\u2280\u2281\u2282"+
-        "\u2283\u2284\u2285\u2286\u2287\u2288\u2289\u228A"+
-        "\u228B\u228C\u228D\u228E\u228F\u2290\u2291\u2292"+
-        "\u2293\u2294\u2296\u2297\u2298\u229A\u229B\u229C"+
-        "\u229D\u229E\u229F\u22A0\u22A1\u22A2\u22A3\u22A4"+
-        "\u22A6\u22A7\u22A8\u22A9\u22AA\u22AB\u22AC\u22AD"+
-        "\u22AE\u22AF\u22B0\u22B1\u22B2\u22B3\u22B4\u22B5"+
-        "\u22B6\u22B7\u22B8\u22B9\u22BA\u22BB\u22BC\u22BD"+
-        "\u22BE\u22C0\u22C1\u22C2\u22C3\u22C4\u22C5\u22C6"+
-        "\u22C7\u22C8\u22C9\u22CA\u22CB\u22CC\u22CD\u22CE"+
-        "\u22CF\u22D0\u22D1\u22D2\u22D3\u22D4\u22D5\u22D6"+
-        "\u22D7\u22D8\u22D9\u22DA\u22DB\u22DC\u22DD\u22DE"+
-        "\u22DF\u22E0\u22E1\u22E2\u22E3\u22E4\u22E5\u22E6"+
-        "\u22E7\u22E8\u22E9\u22EA\u22EB\u22EC\u22ED\u22EE"+
-        "\u22EF\u22F0\u22F1\u22F2\u22F3\u22F4\u22F5\u22F6"+
-        "\u22F7\u22F8\u22F9\u22FA\u22FB\u22FC\u22FD\u22FE"+
-        "\u22FF\u2300\u2301\u2302\u2303\u2304\u2305\u2306"+
-        "\u2307\u2308\u2309\u230A\u230B\u230C\u230D\u230E"+
-        "\u230F\u2310\u2311\u2313\u2314\u2315\u2316\u2317"+
-        "\u2318\u2319\u231A\u231B\u231C\u231D\u231E\u231F"+
-        "\u2320\u2321\u2322\u2323\u2324\u2325\u2326\u2327"+
-        "\u2328\u2329\u232A\u232B\u232C\u232D\u232E\u232F"+
-        "\u2330\u2331\u2332\u2333\u2334\u2335\u2336\u2337"+
-        "\u2338\u2339\u233A\u233B\u233C\u233D\u233E\u233F"+
-        "\u2340\u2341\u2342\u2343\u2344\u2345\u2346\u2347"+
-        "\u2348\u2349\u234A\u234B\u234C\u234D\u234E\u234F"+
-        "\u2350\u2351\u2352\u2353\u2354\u2355\u2356\u2357"+
-        "\u2358\u2359\u235A\u235B\u235C\u235D\u235E\u235F"+
-        "\u2360\u2361\u2362\u2363\u2364\u2365\u2366\u2367"+
-        "\u2368\u2369\u236A\u236B\u236C\u236D\u236E\u236F"+
-        "\u2370\u2371\u2372\u2373\u2374\u2375\u2376\u2377"+
-        "\u2378\u2379\u237A\u237B\u237C\u237D\u237E\u237F"+
-        "\u2380\u2381\u2382\u2383\u2384\u2385\u2386\u2387"+
-        "\u2388\u2389\u238A\u238B\u238C\u238D\u238E\u238F"+
-        "\u2390\u2391\u2392\u2393\u2394\u2395\u2396\u2397"+
-        "\u2398\u2399\u239A\u239B\u239C\u239D\u239E\u239F"+
-        "\u23A0\u23A1\u23A2\u23A3\u23A4\u23A5\u23A6\u23A7"+
-        "\u23A8\u23A9\u23AA\u23AB\u23AC\u23AD\u23AE\u23AF"+
-        "\u23B0\u23B1\u23B2\u23B3\u23B4\u23B5\u23B6\u23B7"+
-        "\u23B8\u23B9\u23BA\u23BB\u23BC\u23BD\u23BE\u23BF"+
-        "\u23C0\u23C1\u23C2\u23C3\u23C4\u23C5\u23C6\u23C7"+
-        "\u23C8\u23C9\u23CA\u23CB\u23CC\u23CD\u23CE\u23CF"+
-        "\u23D0\u23D1\u23D2\u23D3\u23D4\u23D5\u23D6\u23D7"+
-        "\u23D8\u23D9\u23DA\u23DB\u23DC\u23DD\u23DE\u23DF"+
-        "\u23E0\u23E1\u23E2\u23E3\u23E4\u23E5\u23E6\u23E7"+
-        "\u23E8\u23E9\u23EA\u23EB\u23EC\u23ED\u23EE\u23EF"+
-        "\u23F0\u23F1\u23F2\u23F3\u23F4\u23F5\u23F6\u23F7"+
-        "\u23F8\u23F9\u23FA\u23FB\u23FC\u23FD\u23FE\u23FF"+
-        "\u2400\u2401\u2402\u2403\u2404\u2405\u2406\u2407"+
-        "\u2408\u2409\u240A\u240B\u240C\u240D\u240E\u240F"+
-        "\u2410\u2411\u2412\u2413\u2414\u2415\u2416\u2417"+
-        "\u2418\u2419\u241A\u241B\u241C\u241D\u241E\u241F"+
-        "\u2420\u2421\u2422\u2423\u2424\u2425\u2426\u2427"+
-        "\u2428\u2429\u242A\u242B\u242C\u242D\u242E\u242F"+
-        "\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437"+
-        "\u2438\u2439\u243A\u243B\u243C\u243D\u243E\u243F"+
-        "\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447"+
-        "\u2448\u2449\u244A\u244B\u244C\u244D\u244E\u244F"+
-        "\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457"+
-        "\u2458\u2459\u245A\u245B\u245C\u245D\u245E\u245F"+
-        "\u246A\u246B\u246C\u246D\u246E\u246F\u2470\u2471"+
-        "\u2472\u2473\u249C\u249D\u249E\u249F\u24A0\u24A1"+
-        "\u24A2\u24A3\u24A4\u24A5\u24A6\u24A7\u24A8\u24A9"+
-        "\u24AA\u24AB\u24AC\u24AD\u24AE\u24AF\u24B0\u24B1"+
-        "\u24B2\u24B3\u24B4\u24B5\u24B6\u24B7\u24B8\u24B9"+
-        "\u24BA\u24BB\u24BC\u24BD\u24BE\u24BF\u24C0\u24C1"+
-        "\u24C2\u24C3\u24C4\u24C5\u24C6\u24C7\u24C8\u24C9"+
-        "\u24CA\u24CB\u24CC\u24CD\u24CE\u24CF\u24D0\u24D1"+
-        "\u24D2\u24D3\u24D4\u24D5\u24D6\u24D7\u24D8\u24D9"+
-        "\u24DA\u24DB\u24DC\u24DD\u24DE\u24DF\u24E0\u24E1"+
-        "\u24E2\u24E3\u24E4\u24E5\u24E6\u24E7\u24E8\u24E9"+
-        "\u24EA\u24EB\u24EC\u24ED\u24EE\u24EF\u24F0\u24F1"+
-        "\u24F2\u24F3\u24F4\u24F5\u24F6\u24F7\u24F8\u24F9"+
-        "\u24FA\u24FB\u24FC\u24FD\u24FE\u24FF\u254C\u254D"+
-        "\u254E\u254F\u2574\u2575\u2576\u2577\u2578\u2579"+
-        "\u257A\u257B\u257C\u257D\u257E\u257F\u2580\u2590"+
-        "\u2591\u2592\u2596\u2597\u2598\u2599\u259A\u259B"+
-        "\u259C\u259D\u259E\u259F\u25A2\u25A3\u25A4\u25A5"+
-        "\u25A6\u25A7\u25A8\u25A9\u25AA\u25AB\u25AC\u25AD"+
-        "\u25AE\u25AF\u25B0\u25B1\u25B4\u25B5\u25B6\u25B7"+
-        "\u25B8\u25B9\u25BA\u25BB\u25BE\u25BF\u25C0\u25C1"+
-        "\u25C2\u25C3\u25C4\u25C5\u25C8\u25C9\u25CA\u25CC"+
-        "\u25CD\u25D0\u25D1\u25D2\u25D3\u25D4\u25D5\u25D6"+
-        "\u25D7\u25D8\u25D9\u25DA\u25DB\u25DC\u25DD\u25DE"+
-        "\u25DF\u25E0\u25E1\u25E6\u25E7\u25E8\u25E9\u25EA"+
-        "\u25EB\u25EC\u25ED\u25EE\u25EF\u25F0\u25F1\u25F2"+
-        "\u25F3\u25F4\u25F5\u25F6\u25F7\u25F8\u25F9\u25FA"+
-        "\u25FB\u25FC\u25FD\u25FE\u25FF\u2600\u2601\u2602"+
-        "\u2603\u2604\u2607\u2608\u260A\u260B\u260C\u260D"+
-        "\u260E\u260F\u2610\u2611\u2612\u2613\u2614\u2615"+
-        "\u2616\u2617\u2618\u2619\u261A\u261B\u261C\u261D"+
-        "\u261E\u261F\u2620\u2621\u2622\u2623\u2624\u2625"+
-        "\u2626\u2627\u2628\u2629\u262A\u262B\u262C\u262D"+
-        "\u262E\u262F\u2630\u2631\u2632\u2633\u2634\u2635"+
-        "\u2636\u2637\u2638\u2639\u263A\u263B\u263C\u263D"+
-        "\u263E\u263F\u2641\u2643\u2644\u2645\u2646\u2647"+
-        "\u2648\u2649\u264A\u264B\u264C\u264D\u264E\u264F"+
-        "\u2650\u2651\u2652\u2653\u2654\u2655\u2656\u2657"+
-        "\u2658\u2659\u265A\u265B\u265C\u265D\u265E\u265F"+
-        "\u2660\u2661\u2662\u2663\u2664\u2665\u2666\u2667"+
-        "\u2668\u2669\u266A\u266B\u266C\u266D\u266E\u266F"+
-        "\u2670\u2671\u2672\u2673\u2674\u2675\u2676\u2677"+
-        "\u2678\u2679\u267A\u267B\u267C\u267D\u267E\u267F"+
-        "\u2680\u2681\u2682\u2683\u2684\u2685\u2686\u2687"+
-        "\u2688\u2689\u268A\u268B\u268C\u268D\u268E\u268F"+
-        "\u2690\u2691\u2692\u2693\u2694\u2695\u2696\u2697"+
-        "\u2698\u2699\u269A\u269B\u269C\u269D\u269E\u269F"+
-        "\u26A0\u26A1\u26A2\u26A3\u26A4\u26A5\u26A6\u26A7"+
-        "\u26A8\u26A9\u26AA\u26AB\u26AC\u26AD\u26AE\u26AF"+
-        "\u26B0\u26B1\u26B2\u26B3\u26B4\u26B5\u26B6\u26B7"+
-        "\u26B8\u26B9\u26BA\u26BB\u26BC\u26BD\u26BE\u26BF"+
-        "\u26C0\u26C1\u26C2\u26C3\u26C4\u26C5\u26C6\u26C7"+
-        "\u26C8\u26C9\u26CA\u26CB\u26CC\u26CD\u26CE\u26CF"+
-        "\u26D0\u26D1\u26D2\u26D3\u26D4\u26D5\u26D6\u26D7"+
-        "\u26D8\u26D9\u26DA\u26DB\u26DC\u26DD\u26DE\u26DF"+
-        "\u26E0\u26E1\u26E2\u26E3\u26E4\u26E5\u26E6\u26E7"+
-        "\u26E8\u26E9\u26EA\u26EB\u26EC\u26ED\u26EE\u26EF"+
-        "\u26F0\u26F1\u26F2\u26F3\u26F4\u26F5\u26F6\u26F7"+
-        "\u26F8\u26F9\u26FA\u26FB\u26FC\u26FD\u26FE\u26FF"+
-        "\u2700\u2701\u2702\u2703\u2704\u2705\u2706\u2707"+
-        "\u2708\u2709\u270A\u270B\u270C\u270D\u270E\u270F"+
-        "\u2710\u2711\u2712\u2713\u2714\u2715\u2716\u2717"+
-        "\u2718\u2719\u271A\u271B\u271C\u271D\u271E\u271F"+
-        "\u2720\u2721\u2722\u2723\u2724\u2725\u2726\u2727"+
-        "\u2728\u2729\u272A\u272B\u272C\u272D\u272E\u272F"+
-        "\u2730\u2731\u2732\u2733\u2734\u2735\u2736\u2737"+
-        "\u2738\u2739\u273A\u273B\u273C\u273D\u273E\u273F"+
-        "\u2740\u2741\u2742\u2743\u2744\u2745\u2746\u2747"+
-        "\u2748\u2749\u274A\u274B\u274C\u274D\u274E\u274F"+
-        "\u2750\u2751\u2752\u2753\u2754\u2755\u2756\u2757"+
-        "\u2758\u2759\u275A\u275B\u275C\u275D\u275E\u275F"+
-        "\u2760\u2761\u2762\u2763\u2764\u2765\u2766\u2767"+
-        "\u2768\u2769\u276A\u276B\u276C\u276D\u276E\u276F"+
-        "\u2770\u2771\u2772\u2773\u2774\u2775\u2776\u2777"+
-        "\u2778\u2779\u277A\u277B\u277C\u277D\u277E\u277F"+
-        "\u2780\u2781\u2782\u2783\u2784\u2785\u2786\u2787"+
-        "\u2788\u2789\u278A\u278B\u278C\u278D\u278E\u278F"+
-        "\u2790\u2791\u2792\u2793\u2794\u2795\u2796\u2797"+
-        "\u2798\u2799\u279A\u279B\u279C\u279D\u279E\u279F"+
-        "\u27A0\u27A1\u27A2\u27A3\u27A4\u27A5\u27A6\u27A7"+
-        "\u27A8\u27A9\u27AA\u27AB\u27AC\u27AD\u27AE\u27AF"+
-        "\u27B0\u27B1\u27B2\u27B3\u27B4\u27B5\u27B6\u27B7"+
-        "\u27B8\u27B9\u27BA\u27BB\u27BC\u27BD\u27BE\u27BF"+
-        "\u27C0\u27C1\u27C2\u27C3\u27C4\u27C5\u27C6\u27C7"+
-        "\u27C8\u27C9\u27CA\u27CB\u27CC\u27CD\u27CE\u27CF"+
-        "\u27D0\u27D1\u27D2\u27D3\u27D4\u27D5\u27D6\u27D7"+
-        "\u27D8\u27D9\u27DA\u27DB\u27DC\u27DD\u27DE\u27DF"+
-        "\u27E0\u27E1\u27E2\u27E3\u27E4\u27E5\u27E6\u27E7"+
-        "\u27E8\u27E9\u27EA\u27EB\u27EC\u27ED\u27EE\u27EF"+
-        "\u27F0\u27F1\u27F2\u27F3\u27F4\u27F5\u27F6\u27F7"+
-        "\u27F8\u27F9\u27FA\u27FB\u27FC\u27FD\u27FE\u27FF"+
-        "\u2800\u2801\u2802\u2803\u2804\u2805\u2806\u2807"+
-        "\u2808\u2809\u280A\u280B\u280C\u280D\u280E\u280F"+
-        "\u2810\u2811\u2812\u2813\u2814\u2815\u2816\u2817"+
-        "\u2818\u2819\u281A\u281B\u281C\u281D\u281E\u281F"+
-        "\u2820\u2821\u2822\u2823\u2824\u2825\u2826\u2827"+
-        "\u2828\u2829\u282A\u282B\u282C\u282D\u282E\u282F"+
-        "\u2830\u2831\u2832\u2833\u2834\u2835\u2836\u2837"+
-        "\u2838\u2839\u283A\u283B\u283C\u283D\u283E\u283F"+
-        "\u2840\u2841\u2842\u2843\u2844\u2845\u2846\u2847"+
-        "\u2848\u2849\u284A\u284B\u284C\u284D\u284E\u284F"+
-        "\u2850\u2851\u2852\u2853\u2854\u2855\u2856\u2857"+
-        "\u2858\u2859\u285A\u285B\u285C\u285D\u285E\u285F"+
-        "\u2860\u2861\u2862\u2863\u2864\u2865\u2866\u2867"+
-        "\u2868\u2869\u286A\u286B\u286C\u286D\u286E\u286F"+
-        "\u2870\u2871\u2872\u2873\u2874\u2875\u2876\u2877"+
-        "\u2878\u2879\u287A\u287B\u287C\u287D\u287E\u287F"+
-        "\u2880\u2881\u2882\u2883\u2884\u2885\u2886\u2887"+
-        "\u2888\u2889\u288A\u288B\u288C\u288D\u288E\u288F"+
-        "\u2890\u2891\u2892\u2893\u2894\u2895\u2896\u2897"+
-        "\u2898\u2899\u289A\u289B\u289C\u289D\u289E\u289F"+
-        "\u28A0\u28A1\u28A2\u28A3\u28A4\u28A5\u28A6\u28A7"+
-        "\u28A8\u28A9\u28AA\u28AB\u28AC\u28AD\u28AE\u28AF"+
-        "\u28B0\u28B1\u28B2\u28B3\u28B4\u28B5\u28B6\u28B7"+
-        "\u28B8\u28B9\u28BA\u28BB\u28BC\u28BD\u28BE\u28BF"+
-        "\u28C0\u28C1\u28C2\u28C3\u28C4\u28C5\u28C6\u28C7"+
-        "\u28C8\u28C9\u28CA\u28CB\u28CC\u28CD\u28CE\u28CF"+
-        "\u28D0\u28D1\u28D2\u28D3\u28D4\u28D5\u28D6\u28D7"+
-        "\u28D8\u28D9\u28DA\u28DB\u28DC\u28DD\u28DE\u28DF"+
-        "\u28E0\u28E1\u28E2\u28E3\u28E4\u28E5\u28E6\u28E7"+
-        "\u28E8\u28E9\u28EA\u28EB\u28EC\u28ED\u28EE\u28EF"+
-        "\u28F0\u28F1\u28F2\u28F3\u28F4\u28F5\u28F6\u28F7"+
-        "\u28F8\u28F9\u28FA\u28FB\u28FC\u28FD\u28FE\u28FF"+
-        "\u2900\u2901\u2902\u2903\u2904\u2905\u2906\u2907"+
-        "\u2908\u2909\u290A\u290B\u290C\u290D\u290E\u290F"+
-        "\u2910\u2911\u2912\u2913\u2914\u2915\u2916\u2917"+
-        "\u2918\u2919\u291A\u291B\u291C\u291D\u291E\u291F"+
-        "\u2920\u2921\u2922\u2923\u2924\u2925\u2926\u2927"+
-        "\u2928\u2929\u292A\u292B\u292C\u292D\u292E\u292F"+
-        "\u2930\u2931\u2932\u2933\u2934\u2935\u2936\u2937"+
-        "\u2938\u2939\u293A\u293B\u293C\u293D\u293E\u293F"+
-        "\u2940\u2941\u2942\u2943\u2944\u2945\u2946\u2947"+
-        "\u2948\u2949\u294A\u294B\u294C\u294D\u294E\u294F"+
-        "\u2950\u2951\u2952\u2953\u2954\u2955\u2956\u2957"+
-        "\u2958\u2959\u295A\u295B\u295C\u295D\u295E\u295F"+
-        "\u2960\u2961\u2962\u2963\u2964\u2965\u2966\u2967"+
-        "\u2968\u2969\u296A\u296B\u296C\u296D\u296E\u296F"+
-        "\u2970\u2971\u2972\u2973\u2974\u2975\u2976\u2977"+
-        "\u2978\u2979\u297A\u297B\u297C\u297D\u297E\u297F"+
-        "\u2980\u2981\u2982\u2983\u2984\u2985\u2986\u2987"+
-        "\u2988\u2989\u298A\u298B\u298C\u298D\u298E\u298F"+
-        "\u2990\u2991\u2992\u2993\u2994\u2995\u2996\u2997"+
-        "\u2998\u2999\u299A\u299B\u299C\u299D\u299E\u299F"+
-        "\u29A0\u29A1\u29A2\u29A3\u29A4\u29A5\u29A6\u29A7"+
-        "\u29A8\u29A9\u29AA\u29AB\u29AC\u29AD\u29AE\u29AF"+
-        "\u29B0\u29B1\u29B2\u29B3\u29B4\u29B5\u29B6\u29B7"+
-        "\u29B8\u29B9\u29BA\u29BB\u29BC\u29BD\u29BE\u29BF"+
-        "\u29C0\u29C1\u29C2\u29C3\u29C4\u29C5\u29C6\u29C7"+
-        "\u29C8\u29C9\u29CA\u29CB\u29CC\u29CD\u29CE\u29CF"+
-        "\u29D0\u29D1\u29D2\u29D3\u29D4\u29D5\u29D6\u29D7"+
-        "\u29D8\u29D9\u29DA\u29DB\u29DC\u29DD\u29DE\u29DF"+
-        "\u29E0\u29E1\u29E2\u29E3\u29E4\u29E5\u29E6\u29E7"+
-        "\u29E8\u29E9\u29EA\u29EB\u29EC\u29ED\u29EE\u29EF"+
-        "\u29F0\u29F1\u29F2\u29F3\u29F4\u29F5\u29F6\u29F7"+
-        "\u29F8\u29F9\u29FA\u29FB\u29FC\u29FD\u29FE\u29FF"+
-        "\u2A00\u2A01\u2A02\u2A03\u2A04\u2A05\u2A06\u2A07"+
-        "\u2A08\u2A09\u2A0A\u2A0B\u2A0C\u2A0D\u2A0E\u2A0F"+
-        "\u2A10\u2A11\u2A12\u2A13\u2A14\u2A15\u2A16\u2A17"+
-        "\u2A18\u2A19\u2A1A\u2A1B\u2A1C\u2A1D\u2A1E\u2A1F"+
-        "\u2A20\u2A21\u2A22\u2A23\u2A24\u2A25\u2A26\u2A27"+
-        "\u2A28\u2A29\u2A2A\u2A2B\u2A2C\u2A2D\u2A2E\u2A2F"+
-        "\u2A30\u2A31\u2A32\u2A33\u2A34\u2A35\u2A36\u2A37"+
-        "\u2A38\u2A39\u2A3A\u2A3B\u2A3C\u2A3D\u2A3E\u2A3F"+
-        "\u2A40\u2A41\u2A42\u2A43\u2A44\u2A45\u2A46\u2A47"+
-        "\u2A48\u2A49\u2A4A\u2A4B\u2A4C\u2A4D\u2A4E\u2A4F"+
-        "\u2A50\u2A51\u2A52\u2A53\u2A54\u2A55\u2A56\u2A57"+
-        "\u2A58\u2A59\u2A5A\u2A5B\u2A5C\u2A5D\u2A5E\u2A5F"+
-        "\u2A60\u2A61\u2A62\u2A63\u2A64\u2A65\u2A66\u2A67"+
-        "\u2A68\u2A69\u2A6A\u2A6B\u2A6C\u2A6D\u2A6E\u2A6F"+
-        "\u2A70\u2A71\u2A72\u2A73\u2A74\u2A75\u2A76\u2A77"+
-        "\u2A78\u2A79\u2A7A\u2A7B\u2A7C\u2A7D\u2A7E\u2A7F"+
-        "\u2A80\u2A81\u2A82\u2A83\u2A84\u2A85\u2A86\u2A87"+
-        "\u2A88\u2A89\u2A8A\u2A8B\u2A8C\u2A8D\u2A8E\u2A8F"+
-        "\u2A90\u2A91\u2A92\u2A93\u2A94\u2A95\u2A96\u2A97"+
-        "\u2A98\u2A99\u2A9A\u2A9B\u2A9C\u2A9D\u2A9E\u2A9F"+
-        "\u2AA0\u2AA1\u2AA2\u2AA3\u2AA4\u2AA5\u2AA6\u2AA7"+
-        "\u2AA8\u2AA9\u2AAA\u2AAB\u2AAC\u2AAD\u2AAE\u2AAF"+
-        "\u2AB0\u2AB1\u2AB2\u2AB3\u2AB4\u2AB5\u2AB6\u2AB7"+
-        "\u2AB8\u2AB9\u2ABA\u2ABB\u2ABC\u2ABD\u2ABE\u2ABF"+
-        "\u2AC0\u2AC1\u2AC2\u2AC3\u2AC4\u2AC5\u2AC6\u2AC7"+
-        "\u2AC8\u2AC9\u2ACA\u2ACB\u2ACC\u2ACD\u2ACE\u2ACF"+
-        "\u2AD0\u2AD1\u2AD2\u2AD3\u2AD4\u2AD5\u2AD6\u2AD7"+
-        "\u2AD8\u2AD9\u2ADA\u2ADB\u2ADC\u2ADD\u2ADE\u2ADF"+
-        "\u2AE0\u2AE1\u2AE2\u2AE3\u2AE4\u2AE5\u2AE6\u2AE7"+
-        "\u2AE8\u2AE9\u2AEA\u2AEB\u2AEC\u2AED\u2AEE\u2AEF"+
-        "\u2AF0\u2AF1\u2AF2\u2AF3\u2AF4\u2AF5\u2AF6\u2AF7"+
-        "\u2AF8\u2AF9\u2AFA\u2AFB\u2AFC\u2AFD\u2AFE\u2AFF"+
-        "\u2B00\u2B01\u2B02\u2B03\u2B04\u2B05\u2B06\u2B07"+
-        "\u2B08\u2B09\u2B0A\u2B0B\u2B0C\u2B0D\u2B0E\u2B0F"+
-        "\u2B10\u2B11\u2B12\u2B13\u2B14\u2B15\u2B16\u2B17"+
-        "\u2B18\u2B19\u2B1A\u2B1B\u2B1C\u2B1D\u2B1E\u2B1F"+
-        "\u2B20\u2B21\u2B22\u2B23\u2B24\u2B25\u2B26\u2B27"+
-        "\u2B28\u2B29\u2B2A\u2B2B\u2B2C\u2B2D\u2B2E\u2B2F"+
-        "\u2B30\u2B31\u2B32\u2B33\u2B34\u2B35\u2B36\u2B37"+
-        "\u2B38\u2B39\u2B3A\u2B3B\u2B3C\u2B3D\u2B3E\u2B3F"+
-        "\u2B40\u2B41\u2B42\u2B43\u2B44\u2B45\u2B46\u2B47"+
-        "\u2B48\u2B49\u2B4A\u2B4B\u2B4C\u2B4D\u2B4E\u2B4F"+
-        "\u2B50\u2B51\u2B52\u2B53\u2B54\u2B55\u2B56\u2B57"+
-        "\u2B58\u2B59\u2B5A\u2B5B\u2B5C\u2B5D\u2B5E\u2B5F"+
-        "\u2B60\u2B61\u2B62\u2B63\u2B64\u2B65\u2B66\u2B67"+
-        "\u2B68\u2B69\u2B6A\u2B6B\u2B6C\u2B6D\u2B6E\u2B6F"+
-        "\u2B70\u2B71\u2B72\u2B73\u2B74\u2B75\u2B76\u2B77"+
-        "\u2B78\u2B79\u2B7A\u2B7B\u2B7C\u2B7D\u2B7E\u2B7F"+
-        "\u2B80\u2B81\u2B82\u2B83\u2B84\u2B85\u2B86\u2B87"+
-        "\u2B88\u2B89\u2B8A\u2B8B\u2B8C\u2B8D\u2B8E\u2B8F"+
-        "\u2B90\u2B91\u2B92\u2B93\u2B94\u2B95\u2B96\u2B97"+
-        "\u2B98\u2B99\u2B9A\u2B9B\u2B9C\u2B9D\u2B9E\u2B9F"+
-        "\u2BA0\u2BA1\u2BA2\u2BA3\u2BA4\u2BA5\u2BA6\u2BA7"+
-        "\u2BA8\u2BA9\u2BAA\u2BAB\u2BAC\u2BAD\u2BAE\u2BAF"+
-        "\u2BB0\u2BB1\u2BB2\u2BB3\u2BB4\u2BB5\u2BB6\u2BB7"+
-        "\u2BB8\u2BB9\u2BBA\u2BBB\u2BBC\u2BBD\u2BBE\u2BBF"+
-        "\u2BC0\u2BC1\u2BC2\u2BC3\u2BC4\u2BC5\u2BC6\u2BC7"+
-        "\u2BC8\u2BC9\u2BCA\u2BCB\u2BCC\u2BCD\u2BCE\u2BCF"+
-        "\u2BD0\u2BD1\u2BD2\u2BD3\u2BD4\u2BD5\u2BD6\u2BD7"+
-        "\u2BD8\u2BD9\u2BDA\u2BDB\u2BDC\u2BDD\u2BDE\u2BDF"+
-        "\u2BE0\u2BE1\u2BE2\u2BE3\u2BE4\u2BE5\u2BE6\u2BE7"+
-        "\u2BE8\u2BE9\u2BEA\u2BEB\u2BEC\u2BED\u2BEE\u2BEF"+
-        "\u2BF0\u2BF1\u2BF2\u2BF3\u2BF4\u2BF5\u2BF6\u2BF7"+
-        "\u2BF8\u2BF9\u2BFA\u2BFB\u2BFC\u2BFD\u2BFE\u2BFF"+
-        "\u2C00\u2C01\u2C02\u2C03\u2C04\u2C05\u2C06\u2C07"+
-        "\u2C08\u2C09\u2C0A\u2C0B\u2C0C\u2C0D\u2C0E\u2C0F"+
-        "\u2C10\u2C11\u2C12\u2C13\u2C14\u2C15\u2C16\u2C17"+
-        "\u2C18\u2C19\u2C1A\u2C1B\u2C1C\u2C1D\u2C1E\u2C1F"+
-        "\u2C20\u2C21\u2C22\u2C23\u2C24\u2C25\u2C26\u2C27"+
-        "\u2C28\u2C29\u2C2A\u2C2B\u2C2C\u2C2D\u2C2E\u2C2F"+
-        "\u2C30\u2C31\u2C32\u2C33\u2C34\u2C35\u2C36\u2C37"+
-        "\u2C38\u2C39\u2C3A\u2C3B\u2C3C\u2C3D\u2C3E\u2C3F"+
-        "\u2C40\u2C41\u2C42\u2C43\u2C44\u2C45\u2C46\u2C47"+
-        "\u2C48\u2C49\u2C4A\u2C4B\u2C4C\u2C4D\u2C4E\u2C4F"+
-        "\u2C50\u2C51\u2C52\u2C53\u2C54\u2C55\u2C56\u2C57"+
-        "\u2C58\u2C59\u2C5A\u2C5B\u2C5C\u2C5D\u2C5E\u2C5F"+
-        "\u2C60\u2C61\u2C62\u2C63\u2C64\u2C65\u2C66\u2C67"+
-        "\u2C68\u2C69\u2C6A\u2C6B\u2C6C\u2C6D\u2C6E\u2C6F"+
-        "\u2C70\u2C71\u2C72\u2C73\u2C74\u2C75\u2C76\u2C77"+
-        "\u2C78\u2C79\u2C7A\u2C7B\u2C7C\u2C7D\u2C7E\u2C7F"+
-        "\u2C80\u2C81\u2C82\u2C83\u2C84\u2C85\u2C86\u2C87"+
-        "\u2C88\u2C89\u2C8A\u2C8B\u2C8C\u2C8D\u2C8E\u2C8F"+
-        "\u2C90\u2C91\u2C92\u2C93\u2C94\u2C95\u2C96\u2C97"+
-        "\u2C98\u2C99\u2C9A\u2C9B\u2C9C\u2C9D\u2C9E\u2C9F"+
-        "\u2CA0\u2CA1\u2CA2\u2CA3\u2CA4\u2CA5\u2CA6\u2CA7"+
-        "\u2CA8\u2CA9\u2CAA\u2CAB\u2CAC\u2CAD\u2CAE\u2CAF"+
-        "\u2CB0\u2CB1\u2CB2\u2CB3\u2CB4\u2CB5\u2CB6\u2CB7"+
-        "\u2CB8\u2CB9\u2CBA\u2CBB\u2CBC\u2CBD\u2CBE\u2CBF"+
-        "\u2CC0\u2CC1\u2CC2\u2CC3\u2CC4\u2CC5\u2CC6\u2CC7"+
-        "\u2CC8\u2CC9\u2CCA\u2CCB\u2CCC\u2CCD\u2CCE\u2CCF"+
-        "\u2CD0\u2CD1\u2CD2\u2CD3\u2CD4\u2CD5\u2CD6\u2CD7"+
-        "\u2CD8\u2CD9\u2CDA\u2CDB\u2CDC\u2CDD\u2CDE\u2CDF"+
-        "\u2CE0\u2CE1\u2CE2\u2CE3\u2CE4\u2CE5\u2CE6\u2CE7"+
-        "\u2CE8\u2CE9\u2CEA\u2CEB\u2CEC\u2CED\u2CEE\u2CEF"+
-        "\u2CF0\u2CF1\u2CF2\u2CF3\u2CF4\u2CF5\u2CF6\u2CF7"+
-        "\u2CF8\u2CF9\u2CFA\u2CFB\u2CFC\u2CFD\u2CFE\u2CFF"+
-        "\u2D00\u2D01\u2D02\u2D03\u2D04\u2D05\u2D06\u2D07"+
-        "\u2D08\u2D09\u2D0A\u2D0B\u2D0C\u2D0D\u2D0E\u2D0F"+
-        "\u2D10\u2D11\u2D12\u2D13\u2D14\u2D15\u2D16\u2D17"+
-        "\u2D18\u2D19\u2D1A\u2D1B\u2D1C\u2D1D\u2D1E\u2D1F"+
-        "\u2D20\u2D21\u2D22\u2D23\u2D24\u2D25\u2D26\u2D27"+
-        "\u2D28\u2D29\u2D2A\u2D2B\u2D2C\u2D2D\u2D2E\u2D2F"+
-        "\u2D30\u2D31\u2D32\u2D33\u2D34\u2D35\u2D36\u2D37"+
-        "\u2D38\u2D39\u2D3A\u2D3B\u2D3C\u2D3D\u2D3E\u2D3F"+
-        "\u2D40\u2D41\u2D42\u2D43\u2D44\u2D45\u2D46\u2D47"+
-        "\u2D48\u2D49\u2D4A\u2D4B\u2D4C\u2D4D\u2D4E\u2D4F"+
-        "\u2D50\u2D51\u2D52\u2D53\u2D54\u2D55\u2D56\u2D57"+
-        "\u2D58\u2D59\u2D5A\u2D5B\u2D5C\u2D5D\u2D5E\u2D5F"+
-        "\u2D60\u2D61\u2D62\u2D63\u2D64\u2D65\u2D66\u2D67"+
-        "\u2D68\u2D69\u2D6A\u2D6B\u2D6C\u2D6D\u2D6E\u2D6F"+
-        "\u2D70\u2D71\u2D72\u2D73\u2D74\u2D75\u2D76\u2D77"+
-        "\u2D78\u2D79\u2D7A\u2D7B\u2D7C\u2D7D\u2D7E\u2D7F"+
-        "\u2D80\u2D81\u2D82\u2D83\u2D84\u2D85\u2D86\u2D87"+
-        "\u2D88\u2D89\u2D8A\u2D8B\u2D8C\u2D8D\u2D8E\u2D8F"+
-        "\u2D90\u2D91\u2D92\u2D93\u2D94\u2D95\u2D96\u2D97"+
-        "\u2D98\u2D99\u2D9A\u2D9B\u2D9C\u2D9D\u2D9E\u2D9F"+
-        "\u2DA0\u2DA1\u2DA2\u2DA3\u2DA4\u2DA5\u2DA6\u2DA7"+
-        "\u2DA8\u2DA9\u2DAA\u2DAB\u2DAC\u2DAD\u2DAE\u2DAF"+
-        "\u2DB0\u2DB1\u2DB2\u2DB3\u2DB4\u2DB5\u2DB6\u2DB7"+
-        "\u2DB8\u2DB9\u2DBA\u2DBB\u2DBC\u2DBD\u2DBE\u2DBF"+
-        "\u2DC0\u2DC1\u2DC2\u2DC3\u2DC4\u2DC5\u2DC6\u2DC7"+
-        "\u2DC8\u2DC9\u2DCA\u2DCB\u2DCC\u2DCD\u2DCE\u2DCF"+
-        "\u2DD0\u2DD1\u2DD2\u2DD3\u2DD4\u2DD5\u2DD6\u2DD7"+
-        "\u2DD8\u2DD9\u2DDA\u2DDB\u2DDC\u2DDD\u2DDE\u2DDF"+
-        "\u2DE0\u2DE1\u2DE2\u2DE3\u2DE4\u2DE5\u2DE6\u2DE7"+
-        "\u2DE8\u2DE9\u2DEA\u2DEB\u2DEC\u2DED\u2DEE\u2DEF"+
-        "\u2DF0\u2DF1\u2DF2\u2DF3\u2DF4\u2DF5\u2DF6\u2DF7"+
-        "\u2DF8\u2DF9\u2DFA\u2DFB\u2DFC\u2DFD\u2DFE\u2DFF"+
-        "\u2E00\u2E01\u2E02\u2E03\u2E04\u2E05\u2E06\u2E07"+
-        "\u2E08\u2E09\u2E0A\u2E0B\u2E0C\u2E0D\u2E0E\u2E0F"+
-        "\u2E10\u2E11\u2E12\u2E13\u2E14\u2E15\u2E16\u2E17"+
-        "\u2E18\u2E19\u2E1A\u2E1B\u2E1C\u2E1D\u2E1E\u2E1F"+
-        "\u2E20\u2E21\u2E22\u2E23\u2E24\u2E25\u2E26\u2E27"+
-        "\u2E28\u2E29\u2E2A\u2E2B\u2E2C\u2E2D\u2E2E\u2E2F"+
-        "\u2E30\u2E31\u2E32\u2E33\u2E34\u2E35\u2E36\u2E37"+
-        "\u2E38\u2E39\u2E3A\u2E3B\u2E3C\u2E3D\u2E3E\u2E3F"+
-        "\u2E40\u2E41\u2E42\u2E43\u2E44\u2E45\u2E46\u2E47"+
-        "\u2E48\u2E49\u2E4A\u2E4B\u2E4C\u2E4D\u2E4E\u2E4F"+
-        "\u2E50\u2E51\u2E52\u2E53\u2E54\u2E55\u2E56\u2E57"+
-        "\u2E58\u2E59\u2E5A\u2E5B\u2E5C\u2E5D\u2E5E\u2E5F"+
-        "\u2E60\u2E61\u2E62\u2E63\u2E64\u2E65\u2E66\u2E67"+
-        "\u2E68\u2E69\u2E6A\u2E6B\u2E6C\u2E6D\u2E6E\u2E6F"+
-        "\u2E70\u2E71\u2E72\u2E73\u2E74\u2E75\u2E76\u2E77"+
-        "\u2E78\u2E79\u2E7A\u2E7B\u2E7C\u2E7D\u2E7E\u2E7F"+
-        "\u2E80\u2E82\u2E83\u2E85\u2E86\u2E87\u2E89\u2E8A"+
-        "\u2E8D\u2E8E\u2E8F\u2E90\u2E91\u2E92\u2E93\u2E94"+
-        "\u2E95\u2E96\u2E98\u2E99\u2E9A\u2E9B\u2E9C\u2E9D"+
-        "\u2E9E\u2E9F\u2EA0\u2EA1\u2EA2\u2EA3\u2EA4\u2EA5"+
-        "\u2EA6\u2EA8\u2EA9\u2EAB\u2EAC\u2EAD\u2EAF\u2EB0"+
-        "\u2EB1\u2EB2\u2EB4\u2EB5\u2EB8\u2EB9\u2EBA\u2EBC"+
-        "\u2EBD\u2EBE\u2EBF\u2EC0\u2EC1\u2EC2\u2EC3\u2EC4"+
-        "\u2EC5\u2EC6\u2EC7\u2EC8\u2EC9\u2ECB\u2ECC\u2ECD"+
-        "\u2ECE\u2ECF\u2ED0\u2ED1\u2ED2\u2ED3\u2ED4\u2ED5"+
-        "\u2ED6\u2ED7\u2ED8\u2ED9\u2EDA\u2EDB\u2EDC\u2EDD"+
-        "\u2EDE\u2EDF\u2EE0\u2EE1\u2EE2\u2EE3\u2EE4\u2EE5"+
-        "\u2EE6\u2EE7\u2EE8\u2EE9\u2EEA\u2EEB\u2EEC\u2EED"+
-        "\u2EEE\u2EEF\u2EF0\u2EF1\u2EF2\u2EF3\u2EF4\u2EF5"+
-        "\u2EF6\u2EF7\u2EF8\u2EF9\u2EFA\u2EFB\u2EFC\u2EFD"+
-        "\u2EFE\u2EFF\u2F00\u2F01\u2F02\u2F03\u2F04\u2F05"+
-        "\u2F06\u2F07\u2F08\u2F09\u2F0A\u2F0B\u2F0C\u2F0D"+
-        "\u2F0E\u2F0F\u2F10\u2F11\u2F12\u2F13\u2F14\u2F15"+
-        "\u2F16\u2F17\u2F18\u2F19\u2F1A\u2F1B\u2F1C\u2F1D"+
-        "\u2F1E\u2F1F\u2F20\u2F21\u2F22\u2F23\u2F24\u2F25"+
-        "\u2F26\u2F27\u2F28\u2F29\u2F2A\u2F2B\u2F2C\u2F2D"+
-        "\u2F2E\u2F2F\u2F30\u2F31\u2F32\u2F33\u2F34\u2F35"+
-        "\u2F36\u2F37\u2F38\u2F39\u2F3A\u2F3B\u2F3C\u2F3D"+
-        "\u2F3E\u2F3F\u2F40\u2F41\u2F42\u2F43\u2F44\u2F45"+
-        "\u2F46\u2F47\u2F48\u2F49\u2F4A\u2F4B\u2F4C\u2F4D"+
-        "\u2F4E\u2F4F\u2F50\u2F51\u2F52\u2F53\u2F54\u2F55"+
-        "\u2F56\u2F57\u2F58\u2F59\u2F5A\u2F5B\u2F5C\u2F5D"+
-        "\u2F5E\u2F5F\u2F60\u2F61\u2F62\u2F63\u2F64\u2F65"+
-        "\u2F66\u2F67\u2F68\u2F69\u2F6A\u2F6B\u2F6C\u2F6D"+
-        "\u2F6E\u2F6F\u2F70\u2F71\u2F72\u2F73\u2F74\u2F75"+
-        "\u2F76\u2F77\u2F78\u2F79\u2F7A\u2F7B\u2F7C\u2F7D"+
-        "\u2F7E\u2F7F\u2F80\u2F81\u2F82\u2F83\u2F84\u2F85"+
-        "\u2F86\u2F87\u2F88\u2F89\u2F8A\u2F8B\u2F8C\u2F8D"+
-        "\u2F8E\u2F8F\u2F90\u2F91\u2F92\u2F93\u2F94\u2F95"+
-        "\u2F96\u2F97\u2F98\u2F99\u2F9A\u2F9B\u2F9C\u2F9D"+
-        "\u2F9E\u2F9F\u2FA0\u2FA1\u2FA2\u2FA3\u2FA4\u2FA5"+
-        "\u2FA6\u2FA7\u2FA8\u2FA9\u2FAA\u2FAB\u2FAC\u2FAD"+
-        "\u2FAE\u2FAF\u2FB0\u2FB1\u2FB2\u2FB3\u2FB4\u2FB5"+
-        "\u2FB6\u2FB7\u2FB8\u2FB9\u2FBA\u2FBB\u2FBC\u2FBD"+
-        "\u2FBE\u2FBF\u2FC0\u2FC1\u2FC2\u2FC3\u2FC4\u2FC5"+
-        "\u2FC6\u2FC7\u2FC8\u2FC9\u2FCA\u2FCB\u2FCC\u2FCD"+
-        "\u2FCE\u2FCF\u2FD0\u2FD1\u2FD2\u2FD3\u2FD4\u2FD5"+
-        "\u2FD6\u2FD7\u2FD8\u2FD9\u2FDA\u2FDB\u2FDC\u2FDD"+
-        "\u2FDE\u2FDF\u2FE0\u2FE1\u2FE2\u2FE3\u2FE4\u2FE5"+
-        "\u2FE6\u2FE7\u2FE8\u2FE9\u2FEA\u2FEB\u2FEC\u2FED"+
-        "\u2FEE\u2FEF\u2FFC\u2FFD\u2FFE\u2FFF\u3004\u3018"+
-        "\u3019\u301A\u301B\u301C\u301F\u3020\u302A\u302B"+
-        "\u302C\u302D\u302E\u302F\u3030\u3031\u3032\u3033"+
-        "\u3034\u3035\u3036\u3037\u3038\u3039\u303A\u303B"+
-        "\u303C\u303D\u303F\u3040\u3094\u3095\u3096\u3097"+
-        "\u3098\u3099\u309A\u309F\u30A0\u30F7\u30F8\u30F9"+
-        "\u30FA\u30FB\u30FF\u3100\u3101\u3102\u3103\u3104"+
-        "\u312A\u312B\u312C\u312D\u312E\u312F\u3130\u3131"+
-        "\u3132\u3133\u3134\u3135\u3136\u3137\u3138\u3139"+
-        "\u313A\u313B\u313C\u313D\u313E\u313F\u3140\u3141"+
-        "\u3142\u3143\u3144\u3145\u3146\u3147\u3148\u3149"+
-        "\u314A\u314B\u314C\u314D\u314E\u314F\u3150\u3151"+
-        "\u3152\u3153\u3154\u3155\u3156\u3157\u3158\u3159"+
-        "\u315A\u315B\u315C\u315D\u315E\u315F\u3160\u3161"+
-        "\u3162\u3163\u3164\u3165\u3166\u3167\u3168\u3169"+
-        "\u316A\u316B\u316C\u316D\u316E\u316F\u3170\u3171"+
-        "\u3172\u3173\u3174\u3175\u3176\u3177\u3178\u3179"+
-        "\u317A\u317B\u317C\u317D\u317E\u317F\u3180\u3181"+
-        "\u3182\u3183\u3184\u3185\u3186\u3187\u3188\u3189"+
-        "\u318A\u318B\u318C\u318D\u318E\u318F\u3190\u3191"+
-        "\u3192\u3193\u3194\u3195\u3196\u3197\u3198\u3199"+
-        "\u319A\u319B\u319C\u319D\u319E\u319F\u31A0\u31A1"+
-        "\u31A2\u31A3\u31A4\u31A5\u31A6\u31A7\u31A8\u31A9"+
-        "\u31AA\u31AB\u31AC\u31AD\u31AE\u31AF\u31B0\u31B1"+
-        "\u31B2\u31B3\u31B4\u31B5\u31B6\u31B7\u31B8\u31B9"+
-        "\u31BA\u31BB\u31BC\u31BD\u31BE\u31BF\u31C0\u31C1"+
-        "\u31C2\u31C3\u31C4\u31C5\u31C6\u31C7\u31C8\u31C9"+
-        "\u31CA\u31CB\u31CC\u31CD\u31CE\u31CF\u31D0\u31D1"+
-        "\u31D2\u31D3\u31D4\u31D5\u31D6\u31D7\u31D8\u31D9"+
-        "\u31DA\u31DB\u31DC\u31DD\u31DE\u31DF\u31E0\u31E1"+
-        "\u31E2\u31E3\u31E4\u31E5\u31E6\u31E7\u31E8\u31E9"+
-        "\u31EA\u31EB\u31EC\u31ED\u31EE\u31EF\u31F0\u31F1"+
-        "\u31F2\u31F3\u31F4\u31F5\u31F6\u31F7\u31F8\u31F9"+
-        "\u31FA\u31FB\u31FC\u31FD\u31FE\u31FF\u3200\u3201"+
-        "\u3202\u3203\u3204\u3205\u3206\u3207\u3208\u3209"+
-        "\u320A\u320B\u320C\u320D\u320E\u320F\u3210\u3211"+
-        "\u3212\u3213\u3214\u3215\u3216\u3217\u3218\u3219"+
-        "\u321A\u321B\u321C\u321D\u321E\u321F\u322A\u322B"+
-        "\u322C\u322D\u322E\u322F\u3230\u3232\u3233\u3234"+
-        "\u3235\u3236\u3237\u3238\u3239\u323A\u323B\u323C"+
-        "\u323D\u323E\u323F\u3240\u3241\u3242\u3243\u3244"+
-        "\u3245\u3246\u3247\u3248\u3249\u324A\u324B\u324C"+
-        "\u324D\u324E\u324F\u3250\u3251\u3252\u3253\u3254"+
-        "\u3255\u3256\u3257\u3258\u3259\u325A\u325B\u325C"+
-        "\u325D\u325E\u325F\u3260\u3261\u3262\u3263\u3264"+
-        "\u3265\u3266\u3267\u3268\u3269\u326A\u326B\u326C"+
-        "\u326D\u326E\u326F\u3270\u3271\u3272\u3273\u3274"+
-        "\u3275\u3276\u3277\u3278\u3279\u327A\u327B\u327C"+
-        "\u327D\u327E\u327F\u3280\u3281\u3282\u3283\u3284"+
-        "\u3285\u3286\u3287\u3288\u3289\u328A\u328B\u328C"+
-        "\u328D\u328E\u328F\u3290\u3291\u3292\u3293\u3294"+
-        "\u3295\u3296\u3297\u3298\u3299\u329A\u329B\u329C"+
-        "\u329D\u329E\u329F\u32A0\u32A1\u32A2\u32A4\u32A5"+
-        "\u32A6\u32A7\u32A8\u32A9\u32AA\u32AB\u32AC\u32AD"+
-        "\u32AE\u32AF\u32B0\u32B1\u32B2\u32B3\u32B4\u32B5"+
-        "\u32B6\u32B7\u32B8\u32B9\u32BA\u32BB\u32BC\u32BD"+
-        "\u32BE\u32BF\u32C0\u32C1\u32C2\u32C3\u32C4\u32C5"+
-        "\u32C6\u32C7\u32C8\u32C9\u32CA\u32CB\u32CC\u32CD"+
-        "\u32CE\u32CF\u32D0\u32D1\u32D2\u32D3\u32D4\u32D5"+
-        "\u32D6\u32D7\u32D8\u32D9\u32DA\u32DB\u32DC\u32DD"+
-        "\u32DE\u32DF\u32E0\u32E1\u32E2\u32E3\u32E4\u32E5"+
-        "\u32E6\u32E7\u32E8\u32E9\u32EA\u32EB\u32EC\u32ED"+
-        "\u32EE\u32EF\u32F0\u32F1\u32F2\u32F3\u32F4\u32F5"+
-        "\u32F6\u32F7\u32F8\u32F9\u32FA\u32FB\u32FC\u32FD"+
-        "\u32FE\u32FF\u3300\u3301\u3302\u3303\u3304\u3305"+
-        "\u3306\u3307\u3308\u3309\u330A\u330B\u330C\u330D"+
-        "\u330E\u330F\u3310\u3311\u3312\u3313\u3314\u3315"+
-        "\u3316\u3317\u3318\u3319\u331A\u331B\u331C\u331D"+
-        "\u331E\u331F\u3320\u3321\u3322\u3323\u3324\u3325"+
-        "\u3326\u3327\u3328\u3329\u332A\u332B\u332C\u332D"+
-        "\u332E\u332F\u3330\u3331\u3332\u3333\u3334\u3335"+
-        "\u3336\u3337\u3338\u3339\u333A\u333B\u333C\u333D"+
-        "\u333E\u333F\u3340\u3341\u3342\u3343\u3344\u3345"+
-        "\u3346\u3347\u3348\u3349\u334A\u334B\u334C\u334D"+
-        "\u334E\u334F\u3350\u3351\u3352\u3353\u3354\u3355"+
-        "\u3356\u3357\u3358\u3359\u335A\u335B\u335C\u335D";
-
-    private final static String innerDecoderIndex3=
-        "\u335E\u335F\u3360\u3361\u3362\u3363\u3364\u3365"+
-        "\u3366\u3367\u3368\u3369\u336A\u336B\u336C\u336D"+
-        "\u336E\u336F\u3370\u3371\u3372\u3373\u3374\u3375"+
-        "\u3376\u3377\u3378\u3379\u337A\u337B\u337C\u337D"+
-        "\u337E\u337F\u3380\u3381\u3382\u3383\u3384\u3385"+
-        "\u3386\u3387\u3388\u3389\u338A\u338B\u338C\u338D"+
-        "\u3390\u3391\u3392\u3393\u3394\u3395\u3396\u3397"+
-        "\u3398\u3399\u339A\u339B\u339F\u33A0\u33A2\u33A3"+
-        "\u33A4\u33A5\u33A6\u33A7\u33A8\u33A9\u33AA\u33AB"+
-        "\u33AC\u33AD\u33AE\u33AF\u33B0\u33B1\u33B2\u33B3"+
-        "\u33B4\u33B5\u33B6\u33B7\u33B8\u33B9\u33BA\u33BB"+
-        "\u33BC\u33BD\u33BE\u33BF\u33C0\u33C1\u33C2\u33C3"+
-        "\u33C5\u33C6\u33C7\u33C8\u33C9\u33CA\u33CB\u33CC"+
-        "\u33CD\u33CF\u33D0\u33D3\u33D4\u33D6\u33D7\u33D8"+
-        "\u33D9\u33DA\u33DB\u33DC\u33DD\u33DE\u33DF\u33E0"+
-        "\u33E1\u33E2\u33E3\u33E4\u33E5\u33E6\u33E7\u33E8"+
-        "\u33E9\u33EA\u33EB\u33EC\u33ED\u33EE\u33EF\u33F0"+
-        "\u33F1\u33F2\u33F3\u33F4\u33F5\u33F6\u33F7\u33F8"+
-        "\u33F9\u33FA\u33FB\u33FC\u33FD\u33FE\u33FF\u3400"+
-        "\u3401\u3402\u3403\u3404\u3405\u3406\u3407\u3408"+
-        "\u3409\u340A\u340B\u340C\u340D\u340E\u340F\u3410"+
-        "\u3411\u3412\u3413\u3414\u3415\u3416\u3417\u3418"+
-        "\u3419\u341A\u341B\u341C\u341D\u341E\u341F\u3420"+
-        "\u3421\u3422\u3423\u3424\u3425\u3426\u3427\u3428"+
-        "\u3429\u342A\u342B\u342C\u342D\u342E\u342F\u3430"+
-        "\u3431\u3432\u3433\u3434\u3435\u3436\u3437\u3438"+
-        "\u3439\u343A\u343B\u343C\u343D\u343E\u343F\u3440"+
-        "\u3441\u3442\u3443\u3444\u3445\u3446\u3448\u3449"+
-        "\u344A\u344B\u344C\u344D\u344E\u344F\u3450\u3451"+
-        "\u3452\u3453\u3454\u3455\u3456\u3457\u3458\u3459"+
-        "\u345A\u345B\u345C\u345D\u345E\u345F\u3460\u3461"+
-        "\u3462\u3463\u3464\u3465\u3466\u3467\u3468\u3469"+
-        "\u346A\u346B\u346C\u346D\u346E\u346F\u3470\u3471"+
-        "\u3472\u3474\u3475\u3476\u3477\u3478\u3479\u347A"+
-        "\u347B\u347C\u347D\u347E\u347F\u3480\u3481\u3482"+
-        "\u3483\u3484\u3485\u3486\u3487\u3488\u3489\u348A"+
-        "\u348B\u348C\u348D\u348E\u348F\u3490\u3491\u3492"+
-        "\u3493\u3494\u3495\u3496\u3497\u3498\u3499\u349A"+
-        "\u349B\u349C\u349D\u349E\u349F\u34A0\u34A1\u34A2"+
-        "\u34A3\u34A4\u34A5\u34A6\u34A7\u34A8\u34A9\u34AA"+
-        "\u34AB\u34AC\u34AD\u34AE\u34AF\u34B0\u34B1\u34B2"+
-        "\u34B3\u34B4\u34B5\u34B6\u34B7\u34B8\u34B9\u34BA"+
-        "\u34BB\u34BC\u34BD\u34BE\u34BF\u34C0\u34C1\u34C2"+
-        "\u34C3\u34C4\u34C5\u34C6\u34C7\u34C8\u34C9\u34CA"+
-        "\u34CB\u34CC\u34CD\u34CE\u34CF\u34D0\u34D1\u34D2"+
-        "\u34D3\u34D4\u34D5\u34D6\u34D7\u34D8\u34D9\u34DA"+
-        "\u34DB\u34DC\u34DD\u34DE\u34DF\u34E0\u34E1\u34E2"+
-        "\u34E3\u34E4\u34E5\u34E6\u34E7\u34E8\u34E9\u34EA"+
-        "\u34EB\u34EC\u34ED\u34EE\u34EF\u34F0\u34F1\u34F2"+
-        "\u34F3\u34F4\u34F5\u34F6\u34F7\u34F8\u34F9\u34FA"+
-        "\u34FB\u34FC\u34FD\u34FE\u34FF\u3500\u3501\u3502"+
-        "\u3503\u3504\u3505\u3506\u3507\u3508\u3509\u350A"+
-        "\u350B\u350C\u350D\u350E\u350F\u3510\u3511\u3512"+
-        "\u3513\u3514\u3515\u3516\u3517\u3518\u3519\u351A"+
-        "\u351B\u351C\u351D\u351E\u351F\u3520\u3521\u3522"+
-        "\u3523\u3524\u3525\u3526\u3527\u3528\u3529\u352A"+
-        "\u352B\u352C\u352D\u352E\u352F\u3530\u3531\u3532"+
-        "\u3533\u3534\u3535\u3536\u3537\u3538\u3539\u353A"+
-        "\u353B\u353C\u353D\u353E\u353F\u3540\u3541\u3542"+
-        "\u3543\u3544\u3545\u3546\u3547\u3548\u3549\u354A"+
-        "\u354B\u354C\u354D\u354E\u354F\u3550\u3551\u3552"+
-        "\u3553\u3554\u3555\u3556\u3557\u3558\u3559\u355A"+
-        "\u355B\u355C\u355D\u355E\u355F\u3560\u3561\u3562"+
-        "\u3563\u3564\u3565\u3566\u3567\u3568\u3569\u356A"+
-        "\u356B\u356C\u356D\u356E\u356F\u3570\u3571\u3572"+
-        "\u3573\u3574\u3575\u3576\u3577\u3578\u3579\u357A"+
-        "\u357B\u357C\u357D\u357E\u357F\u3580\u3581\u3582"+
-        "\u3583\u3584\u3585\u3586\u3587\u3588\u3589\u358A"+
-        "\u358B\u358C\u358D\u358E\u358F\u3590\u3591\u3592"+
-        "\u3593\u3594\u3595\u3596\u3597\u3598\u3599\u359A"+
-        "\u359B\u359C\u359D\u359F\u35A0\u35A1\u35A2\u35A3"+
-        "\u35A4\u35A5\u35A6\u35A7\u35A8\u35A9\u35AA\u35AB"+
-        "\u35AC\u35AD\u35AE\u35AF\u35B0\u35B1\u35B2\u35B3"+
-        "\u35B4\u35B5\u35B6\u35B7\u35B8\u35B9\u35BA\u35BB"+
-        "\u35BC\u35BD\u35BE\u35BF\u35C0\u35C1\u35C2\u35C3"+
-        "\u35C4\u35C5\u35C6\u35C7\u35C8\u35C9\u35CA\u35CB"+
-        "\u35CC\u35CD\u35CE\u35CF\u35D0\u35D1\u35D2\u35D3"+
-        "\u35D4\u35D5\u35D6\u35D7\u35D8\u35D9\u35DA\u35DB"+
-        "\u35DC\u35DD\u35DE\u35DF\u35E0\u35E1\u35E2\u35E3"+
-        "\u35E4\u35E5\u35E6\u35E7\u35E8\u35E9\u35EA\u35EB"+
-        "\u35EC\u35ED\u35EE\u35EF\u35F0\u35F1\u35F2\u35F3"+
-        "\u35F4\u35F5\u35F6\u35F7\u35F8\u35F9\u35FA\u35FB"+
-        "\u35FC\u35FD\u35FE\u35FF\u3600\u3601\u3602\u3603"+
-        "\u3604\u3605\u3606\u3607\u3608\u3609\u360A\u360B"+
-        "\u360C\u360D\u360F\u3610\u3611\u3612\u3613\u3614"+
-        "\u3615\u3616\u3617\u3618\u3619\u361B\u361C\u361D"+
-        "\u361E\u361F\u3620\u3621\u3622\u3623\u3624\u3625"+
-        "\u3626\u3627\u3628\u3629\u362A\u362B\u362C\u362D"+
-        "\u362E\u362F\u3630\u3631\u3632\u3633\u3634\u3635"+
-        "\u3636\u3637\u3638\u3639\u363A\u363B\u363C\u363D"+
-        "\u363E\u363F\u3640\u3641\u3642\u3643\u3644\u3645"+
-        "\u3646\u3647\u3648\u3649\u364A\u364B\u364C\u364D"+
-        "\u364E\u364F\u3650\u3651\u3652\u3653\u3654\u3655"+
-        "\u3656\u3657\u3658\u3659\u365A\u365B\u365C\u365D"+
-        "\u365E\u365F\u3660\u3661\u3662\u3663\u3664\u3665"+
-        "\u3666\u3667\u3668\u3669\u366A\u366B\u366C\u366D"+
-        "\u366E\u366F\u3670\u3671\u3672\u3673\u3674\u3675"+
-        "\u3676\u3677\u3678\u3679\u367A\u367B\u367C\u367D"+
-        "\u367E\u367F\u3680\u3681\u3682\u3683\u3684\u3685"+
-        "\u3686\u3687\u3688\u3689\u368A\u368B\u368C\u368D"+
-        "\u368E\u368F\u3690\u3691\u3692\u3693\u3694\u3695"+
-        "\u3696\u3697\u3698\u3699\u369A\u369B\u369C\u369D"+
-        "\u369E\u369F\u36A0\u36A1\u36A2\u36A3\u36A4\u36A5"+
-        "\u36A6\u36A7\u36A8\u36A9\u36AA\u36AB\u36AC\u36AD"+
-        "\u36AE\u36AF\u36B0\u36B1\u36B2\u36B3\u36B4\u36B5"+
-        "\u36B6\u36B7\u36B8\u36B9\u36BA\u36BB\u36BC\u36BD"+
-        "\u36BE\u36BF\u36C0\u36C1\u36C2\u36C3\u36C4\u36C5"+
-        "\u36C6\u36C7\u36C8\u36C9\u36CA\u36CB\u36CC\u36CD"+
-        "\u36CE\u36CF\u36D0\u36D1\u36D2\u36D3\u36D4\u36D5"+
-        "\u36D6\u36D7\u36D8\u36D9\u36DA\u36DB\u36DC\u36DD"+
-        "\u36DE\u36DF\u36E0\u36E1\u36E2\u36E3\u36E4\u36E5"+
-        "\u36E6\u36E7\u36E8\u36E9\u36EA\u36EB\u36EC\u36ED"+
-        "\u36EE\u36EF\u36F0\u36F1\u36F2\u36F3\u36F4\u36F5"+
-        "\u36F6\u36F7\u36F8\u36F9\u36FA\u36FB\u36FC\u36FD"+
-        "\u36FE\u36FF\u3700\u3701\u3702\u3703\u3704\u3705"+
-        "\u3706\u3707\u3708\u3709\u370A\u370B\u370C\u370D"+
-        "\u370E\u370F\u3710\u3711\u3712\u3713\u3714\u3715"+
-        "\u3716\u3717\u3718\u3719\u371A\u371B\u371C\u371D"+
-        "\u371E\u371F\u3720\u3721\u3722\u3723\u3724\u3725"+
-        "\u3726\u3727\u3728\u3729\u372A\u372B\u372C\u372D"+
-        "\u372E\u372F\u3730\u3731\u3732\u3733\u3734\u3735"+
-        "\u3736\u3737\u3738\u3739\u373A\u373B\u373C\u373D"+
-        "\u373E\u373F\u3740\u3741\u3742\u3743\u3744\u3745"+
-        "\u3746\u3747\u3748\u3749\u374A\u374B\u374C\u374D"+
-        "\u374E\u374F\u3750\u3751\u3752\u3753\u3754\u3755"+
-        "\u3756\u3757\u3758\u3759\u375A\u375B\u375C\u375D"+
-        "\u375E\u375F\u3760\u3761\u3762\u3763\u3764\u3765"+
-        "\u3766\u3767\u3768\u3769\u376A\u376B\u376C\u376D"+
-        "\u376E\u376F\u3770\u3771\u3772\u3773\u3774\u3775"+
-        "\u3776\u3777\u3778\u3779\u377A\u377B\u377C\u377D"+
-        "\u377E\u377F\u3780\u3781\u3782\u3783\u3784\u3785"+
-        "\u3786\u3787\u3788\u3789\u378A\u378B\u378C\u378D"+
-        "\u378E\u378F\u3790\u3791\u3792\u3793\u3794\u3795"+
-        "\u3796\u3797\u3798\u3799\u379A\u379B\u379C\u379D"+
-        "\u379E\u379F\u37A0\u37A1\u37A2\u37A3\u37A4\u37A5"+
-        "\u37A6\u37A7\u37A8\u37A9\u37AA\u37AB\u37AC\u37AD"+
-        "\u37AE\u37AF\u37B0\u37B1\u37B2\u37B3\u37B4\u37B5"+
-        "\u37B6\u37B7\u37B8\u37B9\u37BA\u37BB\u37BC\u37BD"+
-        "\u37BE\u37BF\u37C0\u37C1\u37C2\u37C3\u37C4\u37C5"+
-        "\u37C6\u37C7\u37C8\u37C9\u37CA\u37CB\u37CC\u37CD"+
-        "\u37CE\u37CF\u37D0\u37D1\u37D2\u37D3\u37D4\u37D5"+
-        "\u37D6\u37D7\u37D8\u37D9\u37DA\u37DB\u37DC\u37DD"+
-        "\u37DE\u37DF\u37E0\u37E1\u37E2\u37E3\u37E4\u37E5"+
-        "\u37E6\u37E7\u37E8\u37E9\u37EA\u37EB\u37EC\u37ED"+
-        "\u37EE\u37EF\u37F0\u37F1\u37F2\u37F3\u37F4\u37F5"+
-        "\u37F6\u37F7\u37F8\u37F9\u37FA\u37FB\u37FC\u37FD"+
-        "\u37FE\u37FF\u3800\u3801\u3802\u3803\u3804\u3805"+
-        "\u3806\u3807\u3808\u3809\u380A\u380B\u380C\u380D"+
-        "\u380E\u380F\u3810\u3811\u3812\u3813\u3814\u3815"+
-        "\u3816\u3817\u3818\u3819\u381A\u381B\u381C\u381D"+
-        "\u381E\u381F\u3820\u3821\u3822\u3823\u3824\u3825"+
-        "\u3826\u3827\u3828\u3829\u382A\u382B\u382C\u382D"+
-        "\u382E\u382F\u3830\u3831\u3832\u3833\u3834\u3835"+
-        "\u3836\u3837\u3838\u3839\u383A\u383B\u383C\u383D"+
-        "\u383E\u383F\u3840\u3841\u3842\u3843\u3844\u3845"+
-        "\u3846\u3847\u3848\u3849\u384A\u384B\u384C\u384D"+
-        "\u384E\u384F\u3850\u3851\u3852\u3853\u3854\u3855"+
-        "\u3856\u3857\u3858\u3859\u385A\u385B\u385C\u385D"+
-        "\u385E\u385F\u3860\u3861\u3862\u3863\u3864\u3865"+
-        "\u3866\u3867\u3868\u3869\u386A\u386B\u386C\u386D"+
-        "\u386E\u386F\u3870\u3871\u3872\u3873\u3874\u3875"+
-        "\u3876\u3877\u3878\u3879\u387A\u387B\u387C\u387D"+
-        "\u387E\u387F\u3880\u3881\u3882\u3883\u3884\u3885"+
-        "\u3886\u3887\u3888\u3889\u388A\u388B\u388C\u388D"+
-        "\u388E\u388F\u3890\u3891\u3892\u3893\u3894\u3895"+
-        "\u3896\u3897\u3898\u3899\u389A\u389B\u389C\u389D"+
-        "\u389E\u389F\u38A0\u38A1\u38A2\u38A3\u38A4\u38A5"+
-        "\u38A6\u38A7\u38A8\u38A9\u38AA\u38AB\u38AC\u38AD"+
-        "\u38AE\u38AF\u38B0\u38B1\u38B2\u38B3\u38B4\u38B5"+
-        "\u38B6\u38B7\u38B8\u38B9\u38BA\u38BB\u38BC\u38BD"+
-        "\u38BE\u38BF\u38C0\u38C1\u38C2\u38C3\u38C4\u38C5"+
-        "\u38C6\u38C7\u38C8\u38C9\u38CA\u38CB\u38CC\u38CD"+
-        "\u38CE\u38CF\u38D0\u38D1\u38D2\u38D3\u38D4\u38D5"+
-        "\u38D6\u38D7\u38D8\u38D9\u38DA\u38DB\u38DC\u38DD"+
-        "\u38DE\u38DF\u38E0\u38E1\u38E2\u38E3\u38E4\u38E5"+
-        "\u38E6\u38E7\u38E8\u38E9\u38EA\u38EB\u38EC\u38ED"+
-        "\u38EE\u38EF\u38F0\u38F1\u38F2\u38F3\u38F4\u38F5"+
-        "\u38F6\u38F7\u38F8\u38F9\u38FA\u38FB\u38FC\u38FD"+
-        "\u38FE\u38FF\u3900\u3901\u3902\u3903\u3904\u3905"+
-        "\u3906\u3907\u3908\u3909\u390A\u390B\u390C\u390D"+
-        "\u390E\u390F\u3910\u3911\u3912\u3913\u3914\u3915"+
-        "\u3916\u3917\u3919\u391A\u391B\u391C\u391D\u391E"+
-        "\u391F\u3920\u3921\u3922\u3923\u3924\u3925\u3926"+
-        "\u3927\u3928\u3929\u392A\u392B\u392C\u392D\u392E"+
-        "\u392F\u3930\u3931\u3932\u3933\u3934\u3935\u3936"+
-        "\u3937\u3938\u3939\u393A\u393B\u393C\u393D\u393E"+
-        "\u393F\u3940\u3941\u3942\u3943\u3944\u3945\u3946"+
-        "\u3947\u3948\u3949\u394A\u394B\u394C\u394D\u394E"+
-        "\u394F\u3950\u3951\u3952\u3953\u3954\u3955\u3956"+
-        "\u3957\u3958\u3959\u395A\u395B\u395C\u395D\u395E"+
-        "\u395F\u3960\u3961\u3962\u3963\u3964\u3965\u3966"+
-        "\u3967\u3968\u3969\u396A\u396B\u396C\u396D\u396F"+
-        "\u3970\u3971\u3972\u3973\u3974\u3975\u3976\u3977"+
-        "\u3978\u3979\u397A\u397B\u397C\u397D\u397E\u397F"+
-        "\u3980\u3981\u3982\u3983\u3984\u3985\u3986\u3987"+
-        "\u3988\u3989\u398A\u398B\u398C\u398D\u398E\u398F"+
-        "\u3990\u3991\u3992\u3993\u3994\u3995\u3996\u3997"+
-        "\u3998\u3999\u399A\u399B\u399C\u399D\u399E\u399F"+
-        "\u39A0\u39A1\u39A2\u39A3\u39A4\u39A5\u39A6\u39A7"+
-        "\u39A8\u39A9\u39AA\u39AB\u39AC\u39AD\u39AE\u39AF"+
-        "\u39B0\u39B1\u39B2\u39B3\u39B4\u39B5\u39B6\u39B7"+
-        "\u39B8\u39B9\u39BA\u39BB\u39BC\u39BD\u39BE\u39BF"+
-        "\u39C0\u39C1\u39C2\u39C3\u39C4\u39C5\u39C6\u39C7"+
-        "\u39C8\u39C9\u39CA\u39CB\u39CC\u39CD\u39CE\u39D1"+
-        "\u39D2\u39D3\u39D4\u39D5\u39D6\u39D7\u39D8\u39D9"+
-        "\u39DA\u39DB\u39DC\u39DD\u39DE\u39E0\u39E1\u39E2"+
-        "\u39E3\u39E4\u39E5\u39E6\u39E7\u39E8\u39E9\u39EA"+
-        "\u39EB\u39EC\u39ED\u39EE\u39EF\u39F0\u39F1\u39F2"+
-        "\u39F3\u39F4\u39F5\u39F6\u39F7\u39F8\u39F9\u39FA"+
-        "\u39FB\u39FC\u39FD\u39FE\u39FF\u3A00\u3A01\u3A02"+
-        "\u3A03\u3A04\u3A05\u3A06\u3A07\u3A08\u3A09\u3A0A"+
-        "\u3A0B\u3A0C\u3A0D\u3A0E\u3A0F\u3A10\u3A11\u3A12"+
-        "\u3A13\u3A14\u3A15\u3A16\u3A17\u3A18\u3A19\u3A1A"+
-        "\u3A1B\u3A1C\u3A1D\u3A1E\u3A1F\u3A20\u3A21\u3A22"+
-        "\u3A23\u3A24\u3A25\u3A26\u3A27\u3A28\u3A29\u3A2A"+
-        "\u3A2B\u3A2C\u3A2D\u3A2E\u3A2F\u3A30\u3A31\u3A32"+
-        "\u3A33\u3A34\u3A35\u3A36\u3A37\u3A38\u3A39\u3A3A"+
-        "\u3A3B\u3A3C\u3A3D\u3A3E\u3A3F\u3A40\u3A41\u3A42"+
-        "\u3A43\u3A44\u3A45\u3A46\u3A47\u3A48\u3A49\u3A4A"+
-        "\u3A4B\u3A4C\u3A4D\u3A4E\u3A4F\u3A50\u3A51\u3A52"+
-        "\u3A53\u3A54\u3A55\u3A56\u3A57\u3A58\u3A59\u3A5A"+
-        "\u3A5B\u3A5C\u3A5D\u3A5E\u3A5F\u3A60\u3A61\u3A62"+
-        "\u3A63\u3A64\u3A65\u3A66\u3A67\u3A68\u3A69\u3A6A"+
-        "\u3A6B\u3A6C\u3A6D\u3A6E\u3A6F\u3A70\u3A71\u3A72"+
-        "\u3A74\u3A75\u3A76\u3A77\u3A78\u3A79\u3A7A\u3A7B"+
-        "\u3A7C\u3A7D\u3A7E\u3A7F\u3A80\u3A81\u3A82\u3A83"+
-        "\u3A84\u3A85\u3A86\u3A87\u3A88\u3A89\u3A8A\u3A8B"+
-        "\u3A8C\u3A8D\u3A8E\u3A8F\u3A90\u3A91\u3A92\u3A93"+
-        "\u3A94\u3A95\u3A96\u3A97\u3A98\u3A99\u3A9A\u3A9B"+
-        "\u3A9C\u3A9D\u3A9E\u3A9F\u3AA0\u3AA1\u3AA2\u3AA3"+
-        "\u3AA4\u3AA5\u3AA6\u3AA7\u3AA8\u3AA9\u3AAA\u3AAB"+
-        "\u3AAC\u3AAD\u3AAE\u3AAF\u3AB0\u3AB1\u3AB2\u3AB3"+
-        "\u3AB4\u3AB5\u3AB6\u3AB7\u3AB8\u3AB9\u3ABA\u3ABB"+
-        "\u3ABC\u3ABD\u3ABE\u3ABF\u3AC0\u3AC1\u3AC2\u3AC3"+
-        "\u3AC4\u3AC5\u3AC6\u3AC7\u3AC8\u3AC9\u3ACA\u3ACB"+
-        "\u3ACC\u3ACD\u3ACE\u3ACF\u3AD0\u3AD1\u3AD2\u3AD3"+
-        "\u3AD4\u3AD5\u3AD6\u3AD7\u3AD8\u3AD9\u3ADA\u3ADB"+
-        "\u3ADC\u3ADD\u3ADE\u3ADF\u3AE0\u3AE1\u3AE2\u3AE3"+
-        "\u3AE4\u3AE5\u3AE6\u3AE7\u3AE8\u3AE9\u3AEA\u3AEB"+
-        "\u3AEC\u3AED\u3AEE\u3AEF\u3AF0\u3AF1\u3AF2\u3AF3"+
-        "\u3AF4\u3AF5\u3AF6\u3AF7\u3AF8\u3AF9\u3AFA\u3AFB"+
-        "\u3AFC\u3AFD\u3AFE\u3AFF\u3B00\u3B01\u3B02\u3B03"+
-        "\u3B04\u3B05\u3B06\u3B07\u3B08\u3B09\u3B0A\u3B0B"+
-        "\u3B0C\u3B0D\u3B0E\u3B0F\u3B10\u3B11\u3B12\u3B13"+
-        "\u3B14\u3B15\u3B16\u3B17\u3B18\u3B19\u3B1A\u3B1B"+
-        "\u3B1C\u3B1D\u3B1E\u3B1F\u3B20\u3B21\u3B22\u3B23"+
-        "\u3B24\u3B25\u3B26\u3B27\u3B28\u3B29\u3B2A\u3B2B"+
-        "\u3B2C\u3B2D\u3B2E\u3B2F\u3B30\u3B31\u3B32\u3B33"+
-        "\u3B34\u3B35\u3B36\u3B37\u3B38\u3B39\u3B3A\u3B3B"+
-        "\u3B3C\u3B3D\u3B3E\u3B3F\u3B40\u3B41\u3B42\u3B43"+
-        "\u3B44\u3B45\u3B46\u3B47\u3B48\u3B49\u3B4A\u3B4B"+
-        "\u3B4C\u3B4D\u3B4F\u3B50\u3B51\u3B52\u3B53\u3B54"+
-        "\u3B55\u3B56\u3B57\u3B58\u3B59\u3B5A\u3B5B\u3B5C"+
-        "\u3B5D\u3B5E\u3B5F\u3B60\u3B61\u3B62\u3B63\u3B64"+
-        "\u3B65\u3B66\u3B67\u3B68\u3B69\u3B6A\u3B6B\u3B6C"+
-        "\u3B6D\u3B6E\u3B6F\u3B70\u3B71\u3B72\u3B73\u3B74"+
-        "\u3B75\u3B76\u3B77\u3B78\u3B79\u3B7A\u3B7B\u3B7C"+
-        "\u3B7D\u3B7E\u3B7F\u3B80\u3B81\u3B82\u3B83\u3B84"+
-        "\u3B85\u3B86\u3B87\u3B88\u3B89\u3B8A\u3B8B\u3B8C"+
-        "\u3B8D\u3B8E\u3B8F\u3B90\u3B91\u3B92\u3B93\u3B94"+
-        "\u3B95\u3B96\u3B97\u3B98\u3B99\u3B9A\u3B9B\u3B9C"+
-        "\u3B9D\u3B9E\u3B9F\u3BA0\u3BA1\u3BA2\u3BA3\u3BA4"+
-        "\u3BA5\u3BA6\u3BA7\u3BA8\u3BA9\u3BAA\u3BAB\u3BAC"+
-        "\u3BAD\u3BAE\u3BAF\u3BB0\u3BB1\u3BB2\u3BB3\u3BB4"+
-        "\u3BB5\u3BB6\u3BB7\u3BB8\u3BB9\u3BBA\u3BBB\u3BBC"+
-        "\u3BBD\u3BBE\u3BBF\u3BC0\u3BC1\u3BC2\u3BC3\u3BC4"+
-        "\u3BC5\u3BC6\u3BC7\u3BC8\u3BC9\u3BCA\u3BCB\u3BCC"+
-        "\u3BCD\u3BCE\u3BCF\u3BD0\u3BD1\u3BD2\u3BD3\u3BD4"+
-        "\u3BD5\u3BD6\u3BD7\u3BD8\u3BD9\u3BDA\u3BDB\u3BDC"+
-        "\u3BDD\u3BDE\u3BDF\u3BE0\u3BE1\u3BE2\u3BE3\u3BE4"+
-        "\u3BE5\u3BE6\u3BE7\u3BE8\u3BE9\u3BEA\u3BEB\u3BEC"+
-        "\u3BED\u3BEE\u3BEF\u3BF0\u3BF1\u3BF2\u3BF3\u3BF4"+
-        "\u3BF5\u3BF6\u3BF7\u3BF8\u3BF9\u3BFA\u3BFB\u3BFC"+
-        "\u3BFD\u3BFE\u3BFF\u3C00\u3C01\u3C02\u3C03\u3C04"+
-        "\u3C05\u3C06\u3C07\u3C08\u3C09\u3C0A\u3C0B\u3C0C"+
-        "\u3C0D\u3C0E\u3C0F\u3C10\u3C11\u3C12\u3C13\u3C14"+
-        "\u3C15\u3C16\u3C17\u3C18\u3C19\u3C1A\u3C1B\u3C1C"+
-        "\u3C1D\u3C1E\u3C1F\u3C20\u3C21\u3C22\u3C23\u3C24"+
-        "\u3C25\u3C26\u3C27\u3C28\u3C29\u3C2A\u3C2B\u3C2C"+
-        "\u3C2D\u3C2E\u3C2F\u3C30\u3C31\u3C32\u3C33\u3C34"+
-        "\u3C35\u3C36\u3C37\u3C38\u3C39\u3C3A\u3C3B\u3C3C"+
-        "\u3C3D\u3C3E\u3C3F\u3C40\u3C41\u3C42\u3C43\u3C44"+
-        "\u3C45\u3C46\u3C47\u3C48\u3C49\u3C4A\u3C4B\u3C4C"+
-        "\u3C4D\u3C4E\u3C4F\u3C50\u3C51\u3C52\u3C53\u3C54"+
-        "\u3C55\u3C56\u3C57\u3C58\u3C59\u3C5A\u3C5B\u3C5C"+
-        "\u3C5D\u3C5E\u3C5F\u3C60\u3C61\u3C62\u3C63\u3C64"+
-        "\u3C65\u3C66\u3C67\u3C68\u3C69\u3C6A\u3C6B\u3C6C"+
-        "\u3C6D\u3C6F\u3C70\u3C71\u3C72\u3C73\u3C74\u3C75"+
-        "\u3C76\u3C77\u3C78\u3C79\u3C7A\u3C7B\u3C7C\u3C7D"+
-        "\u3C7E\u3C7F\u3C80\u3C81\u3C82\u3C83\u3C84\u3C85"+
-        "\u3C86\u3C87\u3C88\u3C89\u3C8A\u3C8B\u3C8C\u3C8D"+
-        "\u3C8E\u3C8F\u3C90\u3C91\u3C92\u3C93\u3C94\u3C95"+
-        "\u3C96\u3C97\u3C98\u3C99\u3C9A\u3C9B\u3C9C\u3C9D"+
-        "\u3C9E\u3C9F\u3CA0\u3CA1\u3CA2\u3CA3\u3CA4\u3CA5"+
-        "\u3CA6\u3CA7\u3CA8\u3CA9\u3CAA\u3CAB\u3CAC\u3CAD"+
-        "\u3CAE\u3CAF\u3CB0\u3CB1\u3CB2\u3CB3\u3CB4\u3CB5"+
-        "\u3CB6\u3CB7\u3CB8\u3CB9\u3CBA\u3CBB\u3CBC\u3CBD"+
-        "\u3CBE\u3CBF\u3CC0\u3CC1\u3CC2\u3CC3\u3CC4\u3CC5"+
-        "\u3CC6\u3CC7\u3CC8\u3CC9\u3CCA\u3CCB\u3CCC\u3CCD"+
-        "\u3CCE\u3CCF\u3CD0\u3CD1\u3CD2\u3CD3\u3CD4\u3CD5"+
-        "\u3CD6\u3CD7\u3CD8\u3CD9\u3CDA\u3CDB\u3CDC\u3CDD"+
-        "\u3CDE\u3CDF\u3CE1\u3CE2\u3CE3\u3CE4\u3CE5\u3CE6"+
-        "\u3CE7\u3CE8\u3CE9\u3CEA\u3CEB\u3CEC\u3CED\u3CEE"+
-        "\u3CEF\u3CF0\u3CF1\u3CF2\u3CF3\u3CF4\u3CF5\u3CF6"+
-        "\u3CF7\u3CF8\u3CF9\u3CFA\u3CFB\u3CFC\u3CFD\u3CFE"+
-        "\u3CFF\u3D00\u3D01\u3D02\u3D03\u3D04\u3D05\u3D06"+
-        "\u3D07\u3D08\u3D09\u3D0A\u3D0B\u3D0C\u3D0D\u3D0E"+
-        "\u3D0F\u3D10\u3D11\u3D12\u3D13\u3D14\u3D15\u3D16"+
-        "\u3D17\u3D18\u3D19\u3D1A\u3D1B\u3D1C\u3D1D\u3D1E"+
-        "\u3D1F\u3D20\u3D21\u3D22\u3D23\u3D24\u3D25\u3D26"+
-        "\u3D27\u3D28\u3D29\u3D2A\u3D2B\u3D2C\u3D2D\u3D2E"+
-        "\u3D2F\u3D30\u3D31\u3D32\u3D33\u3D34\u3D35\u3D36"+
-        "\u3D37\u3D38\u3D39\u3D3A\u3D3B\u3D3C\u3D3D\u3D3E"+
-        "\u3D3F\u3D40\u3D41\u3D42\u3D43\u3D44\u3D45\u3D46"+
-        "\u3D47\u3D48\u3D49\u3D4A\u3D4B\u3D4C\u3D4D\u3D4E"+
-        "\u3D4F\u3D50\u3D51\u3D52\u3D53\u3D54\u3D55\u3D56"+
-        "\u3D57\u3D58\u3D59\u3D5A\u3D5B\u3D5C\u3D5D\u3D5E"+
-        "\u3D5F\u3D60\u3D61\u3D62\u3D63\u3D64\u3D65\u3D66"+
-        "\u3D67\u3D68\u3D69\u3D6A\u3D6B\u3D6C\u3D6D\u3D6E"+
-        "\u3D6F\u3D70\u3D71\u3D72\u3D73\u3D74\u3D75\u3D76"+
-        "\u3D77\u3D78\u3D79\u3D7A\u3D7B\u3D7C\u3D7D\u3D7E"+
-        "\u3D7F\u3D80\u3D81\u3D82\u3D83\u3D84\u3D85\u3D86"+
-        "\u3D87\u3D88\u3D89\u3D8A\u3D8B\u3D8C\u3D8D\u3D8E"+
-        "\u3D8F\u3D90\u3D91\u3D92\u3D93\u3D94\u3D95\u3D96"+
-        "\u3D97\u3D98\u3D99\u3D9A\u3D9B\u3D9C\u3D9D\u3D9E"+
-        "\u3D9F\u3DA0\u3DA1\u3DA2\u3DA3\u3DA4\u3DA5\u3DA6"+
-        "\u3DA7\u3DA8\u3DA9\u3DAA\u3DAB\u3DAC\u3DAD\u3DAE"+
-        "\u3DAF\u3DB0\u3DB1\u3DB2\u3DB3\u3DB4\u3DB5\u3DB6"+
-        "\u3DB7\u3DB8\u3DB9\u3DBA\u3DBB\u3DBC\u3DBD\u3DBE"+
-        "\u3DBF\u3DC0\u3DC1\u3DC2\u3DC3\u3DC4\u3DC5\u3DC6"+
-        "\u3DC7\u3DC8\u3DC9\u3DCA\u3DCB\u3DCC\u3DCD\u3DCE"+
-        "\u3DCF\u3DD0\u3DD1\u3DD2\u3DD3\u3DD4\u3DD5\u3DD6"+
-        "\u3DD7\u3DD8\u3DD9\u3DDA\u3DDB\u3DDC\u3DDD\u3DDE"+
-        "\u3DDF\u3DE0\u3DE1\u3DE2\u3DE3\u3DE4\u3DE5\u3DE6"+
-        "\u3DE7\u3DE8\u3DE9\u3DEA\u3DEB\u3DEC\u3DED\u3DEE"+
-        "\u3DEF\u3DF0\u3DF1\u3DF2\u3DF3\u3DF4\u3DF5\u3DF6"+
-        "\u3DF7\u3DF8\u3DF9\u3DFA\u3DFB\u3DFC\u3DFD\u3DFE"+
-        "\u3DFF\u3E00\u3E01\u3E02\u3E03\u3E04\u3E05\u3E06"+
-        "\u3E07\u3E08\u3E09\u3E0A\u3E0B\u3E0C\u3E0D\u3E0E"+
-        "\u3E0F\u3E10\u3E11\u3E12\u3E13\u3E14\u3E15\u3E16"+
-        "\u3E17\u3E18\u3E19\u3E1A\u3E1B\u3E1C\u3E1D\u3E1E"+
-        "\u3E1F\u3E20\u3E21\u3E22\u3E23\u3E24\u3E25\u3E26"+
-        "\u3E27\u3E28\u3E29\u3E2A\u3E2B\u3E2C\u3E2D\u3E2E"+
-        "\u3E2F\u3E30\u3E31\u3E32\u3E33\u3E34\u3E35\u3E36"+
-        "\u3E37\u3E38\u3E39\u3E3A\u3E3B\u3E3C\u3E3D\u3E3E"+
-        "\u3E3F\u3E40\u3E41\u3E42\u3E43\u3E44\u3E45\u3E46"+
-        "\u3E47\u3E48\u3E49\u3E4A\u3E4B\u3E4C\u3E4D\u3E4E"+
-        "\u3E4F\u3E50\u3E51\u3E52\u3E53\u3E54\u3E55\u3E56"+
-        "\u3E57\u3E58\u3E59\u3E5A\u3E5B\u3E5C\u3E5D\u3E5E"+
-        "\u3E5F\u3E60\u3E61\u3E62\u3E63\u3E64\u3E65\u3E66"+
-        "\u3E67\u3E68\u3E69\u3E6A\u3E6B\u3E6C\u3E6D\u3E6E"+
-        "\u3E6F\u3E70\u3E71\u3E72\u3E73\u3E74\u3E75\u3E76"+
-        "\u3E77\u3E78\u3E79\u3E7A\u3E7B\u3E7C\u3E7D\u3E7E"+
-        "\u3E7F\u3E80\u3E81\u3E82\u3E83\u3E84\u3E85\u3E86"+
-        "\u3E87\u3E88\u3E89\u3E8A\u3E8B\u3E8C\u3E8D\u3E8E"+
-        "\u3E8F\u3E90\u3E91\u3E92\u3E93\u3E94\u3E95\u3E96"+
-        "\u3E97\u3E98\u3E99\u3E9A\u3E9B\u3E9C\u3E9D\u3E9E"+
-        "\u3E9F\u3EA0\u3EA1\u3EA2\u3EA3\u3EA4\u3EA5\u3EA6"+
-        "\u3EA7\u3EA8\u3EA9\u3EAA\u3EAB\u3EAC\u3EAD\u3EAE"+
-        "\u3EAF\u3EB0\u3EB1\u3EB2\u3EB3\u3EB4\u3EB5\u3EB6"+
-        "\u3EB7\u3EB8\u3EB9\u3EBA\u3EBB\u3EBC\u3EBD\u3EBE"+
-        "\u3EBF\u3EC0\u3EC1\u3EC2\u3EC3\u3EC4\u3EC5\u3EC6"+
-        "\u3EC7\u3EC8\u3EC9\u3ECA\u3ECB\u3ECC\u3ECD\u3ECE"+
-        "\u3ECF\u3ED0\u3ED1\u3ED2\u3ED3\u3ED4\u3ED5\u3ED6"+
-        "\u3ED7\u3ED8\u3ED9\u3EDA\u3EDB\u3EDC\u3EDD\u3EDE"+
-        "\u3EDF\u3EE0\u3EE1\u3EE2\u3EE3\u3EE4\u3EE5\u3EE6"+
-        "\u3EE7\u3EE8\u3EE9\u3EEA\u3EEB\u3EEC\u3EED\u3EEE"+
-        "\u3EEF\u3EF0\u3EF1\u3EF2\u3EF3\u3EF4\u3EF5\u3EF6"+
-        "\u3EF7\u3EF8\u3EF9\u3EFA\u3EFB\u3EFC\u3EFD\u3EFE"+
-        "\u3EFF\u3F00\u3F01\u3F02\u3F03\u3F04\u3F05\u3F06"+
-        "\u3F07\u3F08\u3F09\u3F0A\u3F0B\u3F0C\u3F0D\u3F0E"+
-        "\u3F0F\u3F10\u3F11\u3F12\u3F13\u3F14\u3F15\u3F16"+
-        "\u3F17\u3F18\u3F19\u3F1A\u3F1B\u3F1C\u3F1D\u3F1E"+
-        "\u3F1F\u3F20\u3F21\u3F22\u3F23\u3F24\u3F25\u3F26"+
-        "\u3F27\u3F28\u3F29\u3F2A\u3F2B\u3F2C\u3F2D\u3F2E"+
-        "\u3F2F\u3F30\u3F31\u3F32\u3F33\u3F34\u3F35\u3F36"+
-        "\u3F37\u3F38\u3F39\u3F3A\u3F3B\u3F3C\u3F3D\u3F3E"+
-        "\u3F3F\u3F40\u3F41\u3F42\u3F43\u3F44\u3F45\u3F46"+
-        "\u3F47\u3F48\u3F49\u3F4A\u3F4B\u3F4C\u3F4D\u3F4E"+
-        "\u3F4F\u3F50\u3F51\u3F52\u3F53\u3F54\u3F55\u3F56"+
-        "\u3F57\u3F58\u3F59\u3F5A\u3F5B\u3F5C\u3F5D\u3F5E"+
-        "\u3F5F\u3F60\u3F61\u3F62\u3F63\u3F64\u3F65\u3F66"+
-        "\u3F67\u3F68\u3F69\u3F6A\u3F6B\u3F6C\u3F6D\u3F6E"+
-        "\u3F6F\u3F70\u3F71\u3F72\u3F73\u3F74\u3F75\u3F76"+
-        "\u3F77\u3F78\u3F79\u3F7A\u3F7B\u3F7C\u3F7D\u3F7E"+
-        "\u3F7F\u3F80\u3F81\u3F82\u3F83\u3F84\u3F85\u3F86"+
-        "\u3F87\u3F88\u3F89\u3F8A\u3F8B\u3F8C\u3F8D\u3F8E"+
-        "\u3F8F\u3F90\u3F91\u3F92\u3F93\u3F94\u3F95\u3F96"+
-        "\u3F97\u3F98\u3F99\u3F9A\u3F9B\u3F9C\u3F9D\u3F9E"+
-        "\u3F9F\u3FA0\u3FA1\u3FA2\u3FA3\u3FA4\u3FA5\u3FA6"+
-        "\u3FA7\u3FA8\u3FA9\u3FAA\u3FAB\u3FAC\u3FAD\u3FAE"+
-        "\u3FAF\u3FB0\u3FB1\u3FB2\u3FB3\u3FB4\u3FB5\u3FB6"+
-        "\u3FB7\u3FB8\u3FB9\u3FBA\u3FBB\u3FBC\u3FBD\u3FBE"+
-        "\u3FBF\u3FC0\u3FC1\u3FC2\u3FC3\u3FC4\u3FC5\u3FC6"+
-        "\u3FC7\u3FC8\u3FC9\u3FCA\u3FCB\u3FCC\u3FCD\u3FCE"+
-        "\u3FCF\u3FD0\u3FD1\u3FD2\u3FD3\u3FD4\u3FD5\u3FD6"+
-        "\u3FD7\u3FD8\u3FD9\u3FDA\u3FDB\u3FDC\u3FDD\u3FDE"+
-        "\u3FDF\u3FE0\u3FE1\u3FE2\u3FE3\u3FE4\u3FE5\u3FE6"+
-        "\u3FE7\u3FE8\u3FE9\u3FEA\u3FEB\u3FEC\u3FED\u3FEE"+
-        "\u3FEF\u3FF0\u3FF1\u3FF2\u3FF3\u3FF4\u3FF5\u3FF6"+
-        "\u3FF7\u3FF8\u3FF9\u3FFA\u3FFB\u3FFC\u3FFD\u3FFE"+
-        "\u3FFF\u4000\u4001\u4002\u4003\u4004\u4005\u4006"+
-        "\u4007\u4008\u4009\u400A\u400B\u400C\u400D\u400E"+
-        "\u400F\u4010\u4011\u4012\u4013\u4014\u4015\u4016"+
-        "\u4017\u4018\u4019\u401A\u401B\u401C\u401D\u401E"+
-        "\u401F\u4020\u4021\u4022\u4023\u4024\u4025\u4026"+
-        "\u4027\u4028\u4029\u402A\u402B\u402C\u402D\u402E"+
-        "\u402F\u4030\u4031\u4032\u4033\u4034\u4035\u4036"+
-        "\u4037\u4038\u4039\u403A\u403B\u403C\u403D\u403E"+
-        "\u403F\u4040\u4041\u4042\u4043\u4044\u4045\u4046"+
-        "\u4047\u4048\u4049\u404A\u404B\u404C\u404D\u404E"+
-        "\u404F\u4050\u4051\u4052\u4053\u4054\u4055\u4057"+
-        "\u4058\u4059\u405A\u405B\u405C\u405D\u405E\u405F"+
-        "\u4060\u4061\u4062\u4063\u4064\u4065\u4066\u4067"+
-        "\u4068\u4069\u406A\u406B\u406C\u406D\u406E\u406F"+
-        "\u4070\u4071\u4072\u4073\u4074\u4075\u4076\u4077"+
-        "\u4078\u4079\u407A\u407B\u407C\u407D\u407E\u407F"+
-        "\u4080\u4081\u4082\u4083\u4084\u4085\u4086\u4087"+
-        "\u4088\u4089\u408A\u408B\u408C\u408D\u408E\u408F"+
-        "\u4090\u4091\u4092\u4093\u4094\u4095\u4096\u4097"+
-        "\u4098\u4099\u409A\u409B\u409C\u409D\u409E\u409F"+
-        "\u40A0\u40A1\u40A2\u40A3\u40A4\u40A5\u40A6\u40A7"+
-        "\u40A8\u40A9\u40AA\u40AB\u40AC\u40AD\u40AE\u40AF"+
-        "\u40B0\u40B1\u40B2\u40B3\u40B4\u40B5\u40B6\u40B7"+
-        "\u40B8\u40B9\u40BA\u40BB\u40BC\u40BD\u40BE\u40BF"+
-        "\u40C0\u40C1\u40C2\u40C3\u40C4\u40C5\u40C6\u40C7"+
-        "\u40C8\u40C9\u40CA\u40CB\u40CC\u40CD\u40CE\u40CF"+
-        "\u40D0\u40D1\u40D2\u40D3\u40D4\u40D5\u40D6\u40D7"+
-        "\u40D8\u40D9\u40DA\u40DB\u40DC\u40DD\u40DE\u40DF"+
-        "\u40E0\u40E1\u40E2\u40E3\u40E4\u40E5\u40E6\u40E7"+
-        "\u40E8\u40E9\u40EA\u40EB\u40EC\u40ED\u40EE\u40EF"+
-        "\u40F0\u40F1\u40F2\u40F3\u40F4\u40F5\u40F6\u40F7"+
-        "\u40F8\u40F9\u40FA\u40FB\u40FC\u40FD\u40FE\u40FF"+
-        "\u4100\u4101\u4102\u4103\u4104\u4105\u4106\u4107"+
-        "\u4108\u4109\u410A\u410B\u410C\u410D\u410E\u410F"+
-        "\u4110\u4111\u4112\u4113\u4114\u4115\u4116\u4117"+
-        "\u4118\u4119\u411A\u411B\u411C\u411D\u411E\u411F"+
-        "\u4120\u4121\u4122\u4123\u4124\u4125\u4126\u4127"+
-        "\u4128\u4129\u412A\u412B\u412C\u412D\u412E\u412F"+
-        "\u4130\u4131\u4132\u4133\u4134\u4135\u4136\u4137"+
-        "\u4138\u4139\u413A\u413B\u413C\u413D\u413E\u413F"+
-        "\u4140\u4141\u4142\u4143\u4144\u4145\u4146\u4147"+
-        "\u4148\u4149\u414A\u414B\u414C\u414D\u414E\u414F"+
-        "\u4150\u4151\u4152\u4153\u4154\u4155\u4156\u4157"+
-        "\u4158\u4159\u415A\u415B\u415C\u415D\u415E\u4160"+
-        "\u4161\u4162\u4163\u4164\u4165\u4166\u4167\u4168"+
-        "\u4169\u416A\u416B\u416C\u416D\u416E\u416F\u4170"+
-        "\u4171\u4172\u4173\u4174\u4175\u4176\u4177\u4178"+
-        "\u4179\u417A\u417B\u417C\u417D\u417E\u417F\u4180"+
-        "\u4181\u4182\u4183\u4184\u4185\u4186\u4187\u4188"+
-        "\u4189\u418A\u418B\u418C\u418D\u418E\u418F\u4190"+
-        "\u4191\u4192\u4193\u4194\u4195\u4196\u4197\u4198"+
-        "\u4199\u419A\u419B\u419C\u419D\u419E\u419F\u41A0"+
-        "\u41A1\u41A2\u41A3\u41A4\u41A5\u41A6\u41A7\u41A8"+
-        "\u41A9\u41AA\u41AB\u41AC\u41AD\u41AE\u41AF\u41B0"+
-        "\u41B1\u41B2\u41B3\u41B4\u41B5\u41B6\u41B7\u41B8"+
-        "\u41B9\u41BA\u41BB\u41BC\u41BD\u41BE\u41BF\u41C0"+
-        "\u41C1\u41C2\u41C3\u41C4\u41C5\u41C6\u41C7\u41C8"+
-        "\u41C9\u41CA\u41CB\u41CC\u41CD\u41CE\u41CF\u41D0"+
-        "\u41D1\u41D2\u41D3\u41D4\u41D5\u41D6\u41D7\u41D8"+
-        "\u41D9\u41DA\u41DB\u41DC\u41DD\u41DE\u41DF\u41E0"+
-        "\u41E1\u41E2\u41E3\u41E4\u41E5\u41E6\u41E7\u41E8"+
-        "\u41E9\u41EA\u41EB\u41EC\u41ED\u41EE\u41EF\u41F0"+
-        "\u41F1\u41F2\u41F3\u41F4\u41F5\u41F6\u41F7\u41F8"+
-        "\u41F9\u41FA\u41FB\u41FC\u41FD\u41FE\u41FF\u4200"+
-        "\u4201\u4202\u4203\u4204\u4205\u4206\u4207\u4208"+
-        "\u4209\u420A\u420B\u420C\u420D\u420E\u420F\u4210"+
-        "\u4211\u4212\u4213\u4214\u4215\u4216\u4217\u4218"+
-        "\u4219\u421A\u421B\u421C\u421D\u421E\u421F\u4220"+
-        "\u4221\u4222\u4223\u4224\u4225\u4226\u4227\u4228"+
-        "\u4229\u422A\u422B\u422C\u422D\u422E\u422F\u4230"+
-        "\u4231\u4232\u4233\u4234\u4235\u4236\u4237\u4238"+
-        "\u4239\u423A\u423B\u423C\u423D\u423E\u423F\u4240"+
-        "\u4241\u4242\u4243\u4244\u4245\u4246\u4247\u4248"+
-        "\u4249\u424A\u424B\u424C\u424D\u424E\u424F\u4250"+
-        "\u4251\u4252\u4253\u4254\u4255\u4256\u4257\u4258"+
-        "\u4259\u425A\u425B\u425C\u425D\u425E\u425F\u4260"+
-        "\u4261\u4262\u4263\u4264\u4265\u4266\u4267\u4268"+
-        "\u4269\u426A\u426B\u426C\u426D\u426E\u426F\u4270"+
-        "\u4271\u4272\u4273\u4274\u4275\u4276\u4277\u4278"+
-        "\u4279\u427A\u427B\u427C\u427D\u427E\u427F\u4280"+
-        "\u4281\u4282\u4283\u4284\u4285\u4286\u4287\u4288"+
-        "\u4289\u428A\u428B\u428C\u428D\u428E\u428F\u4290"+
-        "\u4291\u4292\u4293\u4294\u4295\u4296\u4297\u4298"+
-        "\u4299\u429A\u429B\u429C\u429D\u429E\u429F\u42A0"+
-        "\u42A1\u42A2\u42A3\u42A4\u42A5\u42A6\u42A7\u42A8"+
-        "\u42A9\u42AA\u42AB\u42AC\u42AD\u42AE\u42AF\u42B0"+
-        "\u42B1\u42B2\u42B3\u42B4\u42B5\u42B6\u42B7\u42B8"+
-        "\u42B9\u42BA\u42BB\u42BC\u42BD\u42BE\u42BF\u42C0"+
-        "\u42C1\u42C2\u42C3\u42C4\u42C5\u42C6\u42C7\u42C8"+
-        "\u42C9\u42CA\u42CB\u42CC\u42CD\u42CE\u42CF\u42D0"+
-        "\u42D1\u42D2\u42D3\u42D4\u42D5\u42D6\u42D7\u42D8"+
-        "\u42D9\u42DA\u42DB\u42DC\u42DD\u42DE\u42DF\u42E0"+
-        "\u42E1\u42E2\u42E3\u42E4\u42E5\u42E6\u42E7\u42E8"+
-        "\u42E9\u42EA\u42EB\u42EC\u42ED\u42EE\u42EF\u42F0"+
-        "\u42F1\u42F2\u42F3\u42F4\u42F5\u42F6\u42F7\u42F8"+
-        "\u42F9\u42FA\u42FB\u42FC\u42FD\u42FE\u42FF\u4300"+
-        "\u4301\u4302\u4303\u4304\u4305\u4306\u4307\u4308"+
-        "\u4309\u430A\u430B\u430C\u430D\u430E\u430F\u4310"+
-        "\u4311\u4312\u4313\u4314\u4315\u4316\u4317\u4318"+
-        "\u4319\u431A\u431B\u431C\u431D\u431E\u431F\u4320"+
-        "\u4321\u4322\u4323\u4324\u4325\u4326\u4327\u4328"+
-        "\u4329\u432A\u432B\u432C\u432D\u432E\u432F\u4330"+
-        "\u4331\u4332\u4333\u4334\u4335\u4336\u4338\u4339"+
-        "\u433A\u433B\u433C\u433D\u433E\u433F\u4340\u4341"+
-        "\u4342\u4343\u4344\u4345\u4346\u4347\u4348\u4349"+
-        "\u434A\u434B\u434C\u434D\u434E\u434F\u4350\u4351"+
-        "\u4352\u4353\u4354\u4355\u4356\u4357\u4358\u4359"+
-        "\u435A\u435B\u435C\u435D\u435E\u435F\u4360\u4361"+
-        "\u4362\u4363\u4364\u4365\u4366\u4367\u4368\u4369"+
-        "\u436A\u436B\u436C\u436D\u436E\u436F\u4370\u4371"+
-        "\u4372\u4373\u4374\u4375\u4376\u4377\u4378\u4379";
-
-    private final static String innerDecoderIndex4=
-        "\u437A\u437B\u437C\u437D\u437E\u437F\u4380\u4381"+
-        "\u4382\u4383\u4384\u4385\u4386\u4387\u4388\u4389"+
-        "\u438A\u438B\u438C\u438D\u438E\u438F\u4390\u4391"+
-        "\u4392\u4393\u4394\u4395\u4396\u4397\u4398\u4399"+
-        "\u439A\u439B\u439C\u439D\u439E\u439F\u43A0\u43A1"+
-        "\u43A2\u43A3\u43A4\u43A5\u43A6\u43A7\u43A8\u43A9"+
-        "\u43AA\u43AB\u43AD\u43AE\u43AF\u43B0\u43B2\u43B3"+
-        "\u43B4\u43B5\u43B6\u43B7\u43B8\u43B9\u43BA\u43BB"+
-        "\u43BC\u43BD\u43BE\u43BF\u43C0\u43C1\u43C2\u43C3"+
-        "\u43C4\u43C5\u43C6\u43C7\u43C8\u43C9\u43CA\u43CB"+
-        "\u43CC\u43CD\u43CE\u43CF\u43D0\u43D1\u43D2\u43D3"+
-        "\u43D4\u43D5\u43D6\u43D7\u43D8\u43D9\u43DA\u43DB"+
-        "\u43DC\u43DE\u43DF\u43E0\u43E1\u43E2\u43E3\u43E4"+
-        "\u43E5\u43E6\u43E7\u43E8\u43E9\u43EA\u43EB\u43EC"+
-        "\u43ED\u43EE\u43EF\u43F0\u43F1\u43F2\u43F3\u43F4"+
-        "\u43F5\u43F6\u43F7\u43F8\u43F9\u43FA\u43FB\u43FC"+
-        "\u43FD\u43FE\u43FF\u4400\u4401\u4402\u4403\u4404"+
-        "\u4405\u4406\u4407\u4408\u4409\u440A\u440B\u440C"+
-        "\u440D\u440E\u440F\u4410\u4411\u4412\u4413\u4414"+
-        "\u4415\u4416\u4417\u4418\u4419\u441A\u441B\u441C"+
-        "\u441D\u441E\u441F\u4420\u4421\u4422\u4423\u4424"+
-        "\u4425\u4426\u4427\u4428\u4429\u442A\u442B\u442C"+
-        "\u442D\u442E\u442F\u4430\u4431\u4432\u4433\u4434"+
-        "\u4435\u4436\u4437\u4438\u4439\u443A\u443B\u443C"+
-        "\u443D\u443E\u443F\u4440\u4441\u4442\u4443\u4444"+
-        "\u4445\u4446\u4447\u4448\u4449\u444A\u444B\u444C"+
-        "\u444D\u444E\u444F\u4450\u4451\u4452\u4453\u4454"+
-        "\u4455\u4456\u4457\u4458\u4459\u445A\u445B\u445C"+
-        "\u445D\u445E\u445F\u4460\u4461\u4462\u4463\u4464"+
-        "\u4465\u4466\u4467\u4468\u4469\u446A\u446B\u446C"+
-        "\u446D\u446E\u446F\u4470\u4471\u4472\u4473\u4474"+
-        "\u4475\u4476\u4477\u4478\u4479\u447A\u447B\u447C"+
-        "\u447D\u447E\u447F\u4480\u4481\u4482\u4483\u4484"+
-        "\u4485\u4486\u4487\u4488\u4489\u448A\u448B\u448C"+
-        "\u448D\u448E\u448F\u4490\u4491\u4492\u4493\u4494"+
-        "\u4495\u4496\u4497\u4498\u4499\u449A\u449B\u449C"+
-        "\u449D\u449E\u449F\u44A0\u44A1\u44A2\u44A3\u44A4"+
-        "\u44A5\u44A6\u44A7\u44A8\u44A9\u44AA\u44AB\u44AC"+
-        "\u44AD\u44AE\u44AF\u44B0\u44B1\u44B2\u44B3\u44B4"+
-        "\u44B5\u44B6\u44B7\u44B8\u44B9\u44BA\u44BB\u44BC"+
-        "\u44BD\u44BE\u44BF\u44C0\u44C1\u44C2\u44C3\u44C4"+
-        "\u44C5\u44C6\u44C7\u44C8\u44C9\u44CA\u44CB\u44CC"+
-        "\u44CD\u44CE\u44CF\u44D0\u44D1\u44D2\u44D3\u44D4"+
-        "\u44D5\u44D7\u44D8\u44D9\u44DA\u44DB\u44DC\u44DD"+
-        "\u44DE\u44DF\u44E0\u44E1\u44E2\u44E3\u44E4\u44E5"+
-        "\u44E6\u44E7\u44E8\u44E9\u44EA\u44EB\u44EC\u44ED"+
-        "\u44EE\u44EF\u44F0\u44F1\u44F2\u44F3\u44F4\u44F5"+
-        "\u44F6\u44F7\u44F8\u44F9\u44FA\u44FB\u44FC\u44FD"+
-        "\u44FE\u44FF\u4500\u4501\u4502\u4503\u4504\u4505"+
-        "\u4506\u4507\u4508\u4509\u450A\u450B\u450C\u450D"+
-        "\u450E\u450F\u4510\u4511\u4512\u4513\u4514\u4515"+
-        "\u4516\u4517\u4518\u4519\u451A\u451B\u451C\u451D"+
-        "\u451E\u451F\u4520\u4521\u4522\u4523\u4524\u4525"+
-        "\u4526\u4527\u4528\u4529\u452A\u452B\u452C\u452D"+
-        "\u452E\u452F\u4530\u4531\u4532\u4533\u4534\u4535"+
-        "\u4536\u4537\u4538\u4539\u453A\u453B\u453C\u453D"+
-        "\u453E\u453F\u4540\u4541\u4542\u4543\u4544\u4545"+
-        "\u4546\u4547\u4548\u4549\u454A\u454B\u454C\u454D"+
-        "\u454E\u454F\u4550\u4551\u4552\u4553\u4554\u4555"+
-        "\u4556\u4557\u4558\u4559\u455A\u455B\u455C\u455D"+
-        "\u455E\u455F\u4560\u4561\u4562\u4563\u4564\u4565"+
-        "\u4566\u4567\u4568\u4569\u456A\u456B\u456C\u456D"+
-        "\u456E\u456F\u4570\u4571\u4572\u4573\u4574\u4575"+
-        "\u4576\u4577\u4578\u4579\u457A\u457B\u457C\u457D"+
-        "\u457E\u457F\u4580\u4581\u4582\u4583\u4584\u4585"+
-        "\u4586\u4587\u4588\u4589\u458A\u458B\u458C\u458D"+
-        "\u458E\u458F\u4590\u4591\u4592\u4593\u4594\u4595"+
-        "\u4596\u4597\u4598\u4599\u459A\u459B\u459C\u459D"+
-        "\u459E\u459F\u45A0\u45A1\u45A2\u45A3\u45A4\u45A5"+
-        "\u45A6\u45A7\u45A8\u45A9\u45AA\u45AB\u45AC\u45AD"+
-        "\u45AE\u45AF\u45B0\u45B1\u45B2\u45B3\u45B4\u45B5"+
-        "\u45B6\u45B7\u45B8\u45B9\u45BA\u45BB\u45BC\u45BD"+
-        "\u45BE\u45BF\u45C0\u45C1\u45C2\u45C3\u45C4\u45C5"+
-        "\u45C6\u45C7\u45C8\u45C9\u45CA\u45CB\u45CC\u45CD"+
-        "\u45CE\u45CF\u45D0\u45D1\u45D2\u45D3\u45D4\u45D5"+
-        "\u45D6\u45D7\u45D8\u45D9\u45DA\u45DB\u45DC\u45DD"+
-        "\u45DE\u45DF\u45E0\u45E1\u45E2\u45E3\u45E4\u45E5"+
-        "\u45E6\u45E7\u45E8\u45E9\u45EA\u45EB\u45EC\u45ED"+
-        "\u45EE\u45EF\u45F0\u45F1\u45F2\u45F3\u45F4\u45F5"+
-        "\u45F6\u45F7\u45F8\u45F9\u45FA\u45FB\u45FC\u45FD"+
-        "\u45FE\u45FF\u4600\u4601\u4602\u4603\u4604\u4605"+
-        "\u4606\u4607\u4608\u4609\u460A\u460B\u460C\u460D"+
-        "\u460E\u460F\u4610\u4611\u4612\u4613\u4614\u4615"+
-        "\u4616\u4617\u4618\u4619\u461A\u461B\u461C\u461D"+
-        "\u461E\u461F\u4620\u4621\u4622\u4623\u4624\u4625"+
-        "\u4626\u4627\u4628\u4629\u462A\u462B\u462C\u462D"+
-        "\u462E\u462F\u4630\u4631\u4632\u4633\u4634\u4635"+
-        "\u4636\u4637\u4638\u4639\u463A\u463B\u463C\u463D"+
-        "\u463E\u463F\u4640\u4641\u4642\u4643\u4644\u4645"+
-        "\u4646\u4647\u4648\u4649\u464A\u464B\u464D\u464E"+
-        "\u464F\u4650\u4651\u4652\u4653\u4654\u4655\u4656"+
-        "\u4657\u4658\u4659\u465A\u465B\u465C\u465D\u465E"+
-        "\u465F\u4660\u4662\u4663\u4664\u4665\u4666\u4667"+
-        "\u4668\u4669\u466A\u466B\u466C\u466D\u466E\u466F"+
-        "\u4670\u4671\u4672\u4673\u4674\u4675\u4676\u4677"+
-        "\u4678\u4679\u467A\u467B\u467C\u467D\u467E\u467F"+
-        "\u4680\u4681\u4682\u4683\u4684\u4685\u4686\u4687"+
-        "\u4688\u4689\u468A\u468B\u468C\u468D\u468E\u468F"+
-        "\u4690\u4691\u4692\u4693\u4694\u4695\u4696\u4697"+
-        "\u4698\u4699\u469A\u469B\u469C\u469D\u469E\u469F"+
-        "\u46A0\u46A1\u46A2\u46A3\u46A4\u46A5\u46A6\u46A7"+
-        "\u46A8\u46A9\u46AA\u46AB\u46AC\u46AD\u46AE\u46AF"+
-        "\u46B0\u46B1\u46B2\u46B3\u46B4\u46B5\u46B6\u46B7"+
-        "\u46B8\u46B9\u46BA\u46BB\u46BC\u46BD\u46BE\u46BF"+
-        "\u46C0\u46C1\u46C2\u46C3\u46C4\u46C5\u46C6\u46C7"+
-        "\u46C8\u46C9\u46CA\u46CB\u46CC\u46CD\u46CE\u46CF"+
-        "\u46D0\u46D1\u46D2\u46D3\u46D4\u46D5\u46D6\u46D7"+
-        "\u46D8\u46D9\u46DA\u46DB\u46DC\u46DD\u46DE\u46DF"+
-        "\u46E0\u46E1\u46E2\u46E3\u46E4\u46E5\u46E6\u46E7"+
-        "\u46E8\u46E9\u46EA\u46EB\u46EC\u46ED\u46EE\u46EF"+
-        "\u46F0\u46F1\u46F2\u46F3\u46F4\u46F5\u46F6\u46F7"+
-        "\u46F8\u46F9\u46FA\u46FB\u46FC\u46FD\u46FE\u46FF"+
-        "\u4700\u4701\u4702\u4703\u4704\u4705\u4706\u4707"+
-        "\u4708\u4709\u470A\u470B\u470C\u470D\u470E\u470F"+
-        "\u4710\u4711\u4712\u4713\u4714\u4715\u4716\u4717"+
-        "\u4718\u4719\u471A\u471B\u471C\u471D\u471E\u471F"+
-        "\u4720\u4721\u4722\u4724\u4725\u4726\u4727\u4728"+
-        "\u472A\u472B\u472C\u472D\u472E\u472F\u4730\u4731"+
-        "\u4732\u4733\u4734\u4735\u4736\u4737\u4738\u4739"+
-        "\u473A\u473B\u473C\u473D\u473E\u473F\u4740\u4741"+
-        "\u4742\u4743\u4744\u4745\u4746\u4747\u4748\u4749"+
-        "\u474A\u474B\u474C\u474D\u474E\u474F\u4750\u4751"+
-        "\u4752\u4753\u4754\u4755\u4756\u4757\u4758\u4759"+
-        "\u475A\u475B\u475C\u475D\u475E\u475F\u4760\u4761"+
-        "\u4762\u4763\u4764\u4765\u4766\u4767\u4768\u4769"+
-        "\u476A\u476B\u476C\u476D\u476E\u476F\u4770\u4771"+
-        "\u4772\u4773\u4774\u4775\u4776\u4777\u4778\u4779"+
-        "\u477A\u477B\u477D\u477E\u477F\u4780\u4781\u4782"+
-        "\u4783\u4784\u4785\u4786\u4787\u4788\u4789\u478A"+
-        "\u478B\u478C\u478E\u478F\u4790\u4791\u4792\u4793"+
-        "\u4794\u4795\u4796\u4797\u4798\u4799\u479A\u479B"+
-        "\u479C\u479D\u479E\u479F\u47A0\u47A1\u47A2\u47A3"+
-        "\u47A4\u47A5\u47A6\u47A7\u47A8\u47A9\u47AA\u47AB"+
-        "\u47AC\u47AD\u47AE\u47AF\u47B0\u47B1\u47B2\u47B3"+
-        "\u47B4\u47B5\u47B6\u47B7\u47B8\u47B9\u47BA\u47BB"+
-        "\u47BC\u47BD\u47BE\u47BF\u47C0\u47C1\u47C2\u47C3"+
-        "\u47C4\u47C5\u47C6\u47C7\u47C8\u47C9\u47CA\u47CB"+
-        "\u47CC\u47CD\u47CE\u47CF\u47D0\u47D1\u47D2\u47D3"+
-        "\u47D4\u47D5\u47D6\u47D7\u47D8\u47D9\u47DA\u47DB"+
-        "\u47DC\u47DD\u47DE\u47DF\u47E0\u47E1\u47E2\u47E3"+
-        "\u47E4\u47E5\u47E6\u47E7\u47E8\u47E9\u47EA\u47EB"+
-        "\u47EC\u47ED\u47EE\u47EF\u47F0\u47F1\u47F2\u47F3"+
-        "\u47F4\u47F5\u47F6\u47F7\u47F8\u47F9\u47FA\u47FB"+
-        "\u47FC\u47FD\u47FE\u47FF\u4800\u4801\u4802\u4803"+
-        "\u4804\u4805\u4806\u4807\u4808\u4809\u480A\u480B"+
-        "\u480C\u480D\u480E\u480F\u4810\u4811\u4812\u4813"+
-        "\u4814\u4815\u4816\u4817\u4818\u4819\u481A\u481B"+
-        "\u481C\u481D\u481E\u481F\u4820\u4821\u4822\u4823"+
-        "\u4824\u4825\u4826\u4827\u4828\u4829\u482A\u482B"+
-        "\u482C\u482D\u482E\u482F\u4830\u4831\u4832\u4833"+
-        "\u4834\u4835\u4836\u4837\u4838\u4839\u483A\u483B"+
-        "\u483C\u483D\u483E\u483F\u4840\u4841\u4842\u4843"+
-        "\u4844\u4845\u4846\u4847\u4848\u4849\u484A\u484B"+
-        "\u484C\u484D\u484E\u484F\u4850\u4851\u4852\u4853"+
-        "\u4854\u4855\u4856\u4857\u4858\u4859\u485A\u485B"+
-        "\u485C\u485D\u485E\u485F\u4860\u4861\u4862\u4863"+
-        "\u4864\u4865\u4866\u4867\u4868\u4869\u486A\u486B"+
-        "\u486C\u486D\u486E\u486F\u4870\u4871\u4872\u4873"+
-        "\u4874\u4875\u4876\u4877\u4878\u4879\u487A\u487B"+
-        "\u487C\u487D\u487E\u487F\u4880\u4881\u4882\u4883"+
-        "\u4884\u4885\u4886\u4887\u4888\u4889\u488A\u488B"+
-        "\u488C\u488D\u488E\u488F\u4890\u4891\u4892\u4893"+
-        "\u4894\u4895\u4896\u4897\u4898\u4899\u489A\u489B"+
-        "\u489C\u489D\u489E\u489F\u48A0\u48A1\u48A2\u48A3"+
-        "\u48A4\u48A5\u48A6\u48A7\u48A8\u48A9\u48AA\u48AB"+
-        "\u48AC\u48AD\u48AE\u48AF\u48B0\u48B1\u48B2\u48B3"+
-        "\u48B4\u48B5\u48B6\u48B7\u48B8\u48B9\u48BA\u48BB"+
-        "\u48BC\u48BD\u48BE\u48BF\u48C0\u48C1\u48C2\u48C3"+
-        "\u48C4\u48C5\u48C6\u48C7\u48C8\u48C9\u48CA\u48CB"+
-        "\u48CC\u48CD\u48CE\u48CF\u48D0\u48D1\u48D2\u48D3"+
-        "\u48D4\u48D5\u48D6\u48D7\u48D8\u48D9\u48DA\u48DB"+
-        "\u48DC\u48DD\u48DE\u48DF\u48E0\u48E1\u48E2\u48E3"+
-        "\u48E4\u48E5\u48E6\u48E7\u48E8\u48E9\u48EA\u48EB"+
-        "\u48EC\u48ED\u48EE\u48EF\u48F0\u48F1\u48F2\u48F3"+
-        "\u48F4\u48F5\u48F6\u48F7\u48F8\u48F9\u48FA\u48FB"+
-        "\u48FC\u48FD\u48FE\u48FF\u4900\u4901\u4902\u4903"+
-        "\u4904\u4905\u4906\u4907\u4908\u4909\u490A\u490B"+
-        "\u490C\u490D\u490E\u490F\u4910\u4911\u4912\u4913"+
-        "\u4914\u4915\u4916\u4917\u4918\u4919\u491A\u491B"+
-        "\u491C\u491D\u491E\u491F\u4920\u4921\u4922\u4923"+
-        "\u4924\u4925\u4926\u4927\u4928\u4929\u492A\u492B"+
-        "\u492C\u492D\u492E\u492F\u4930\u4931\u4932\u4933"+
-        "\u4934\u4935\u4936\u4937\u4938\u4939\u493A\u493B"+
-        "\u493C\u493D\u493E\u493F\u4940\u4941\u4942\u4943"+
-        "\u4944\u4945\u4946\u4948\u4949\u494A\u494B\u494C"+
-        "\u494D\u494E\u494F\u4950\u4951\u4952\u4953\u4954"+
-        "\u4955\u4956\u4957\u4958\u4959\u495A\u495B\u495C"+
-        "\u495D\u495E\u495F\u4960\u4961\u4962\u4963\u4964"+
-        "\u4965\u4966\u4967\u4968\u4969\u496A\u496B\u496C"+
-        "\u496D\u496E\u496F\u4970\u4971\u4972\u4973\u4974"+
-        "\u4975\u4976\u4977\u4978\u4979\u497B\u497C\u497E"+
-        "\u497F\u4980\u4981\u4984\u4987\u4988\u4989\u498A"+
-        "\u498B\u498C\u498D\u498E\u498F\u4990\u4991\u4992"+
-        "\u4993\u4994\u4995\u4996\u4997\u4998\u4999\u499A"+
-        "\u499C\u499D\u499E\u49A0\u49A1\u49A2\u49A3\u49A4"+
-        "\u49A5\u49A6\u49A7\u49A8\u49A9\u49AA\u49AB\u49AC"+
-        "\u49AD\u49AE\u49AF\u49B0\u49B1\u49B2\u49B3\u49B4"+
-        "\u49B5\u49B8\u49B9\u49BA\u49BB\u49BC\u49BD\u49BE"+
-        "\u49BF\u49C0\u49C1\u49C2\u49C3\u49C4\u49C5\u49C6"+
-        "\u49C7\u49C8\u49C9\u49CA\u49CB\u49CC\u49CD\u49CE"+
-        "\u49CF\u49D0\u49D1\u49D2\u49D3\u49D4\u49D5\u49D6"+
-        "\u49D7\u49D8\u49D9\u49DA\u49DB\u49DC\u49DD\u49DE"+
-        "\u49DF\u49E0\u49E1\u49E2\u49E3\u49E4\u49E5\u49E6"+
-        "\u49E7\u49E8\u49E9\u49EA\u49EB\u49EC\u49ED\u49EE"+
-        "\u49EF\u49F0\u49F1\u49F2\u49F3\u49F4\u49F5\u49F6"+
-        "\u49F7\u49F8\u49F9\u49FA\u49FB\u49FC\u49FD\u49FE"+
-        "\u49FF\u4A00\u4A01\u4A02\u4A03\u4A04\u4A05\u4A06"+
-        "\u4A07\u4A08\u4A09\u4A0A\u4A0B\u4A0C\u4A0D\u4A0E"+
-        "\u4A0F\u4A10\u4A11\u4A12\u4A13\u4A14\u4A15\u4A16"+
-        "\u4A17\u4A18\u4A19\u4A1A\u4A1B\u4A1C\u4A1D\u4A1E"+
-        "\u4A1F\u4A20\u4A21\u4A22\u4A23\u4A24\u4A25\u4A26"+
-        "\u4A27\u4A28\u4A29\u4A2A\u4A2B\u4A2C\u4A2D\u4A2E"+
-        "\u4A2F\u4A30\u4A31\u4A32\u4A33\u4A34\u4A35\u4A36"+
-        "\u4A37\u4A38\u4A39\u4A3A\u4A3B\u4A3C\u4A3D\u4A3E"+
-        "\u4A3F\u4A40\u4A41\u4A42\u4A43\u4A44\u4A45\u4A46"+
-        "\u4A47\u4A48\u4A49\u4A4A\u4A4B\u4A4C\u4A4D\u4A4E"+
-        "\u4A4F\u4A50\u4A51\u4A52\u4A53\u4A54\u4A55\u4A56"+
-        "\u4A57\u4A58\u4A59\u4A5A\u4A5B\u4A5C\u4A5D\u4A5E"+
-        "\u4A5F\u4A60\u4A61\u4A62\u4A63\u4A64\u4A65\u4A66"+
-        "\u4A67\u4A68\u4A69\u4A6A\u4A6B\u4A6C\u4A6D\u4A6E"+
-        "\u4A6F\u4A70\u4A71\u4A72\u4A73\u4A74\u4A75\u4A76"+
-        "\u4A77\u4A78\u4A79\u4A7A\u4A7B\u4A7C\u4A7D\u4A7E"+
-        "\u4A7F\u4A80\u4A81\u4A82\u4A83\u4A84\u4A85\u4A86"+
-        "\u4A87\u4A88\u4A89\u4A8A\u4A8B\u4A8C\u4A8D\u4A8E"+
-        "\u4A8F\u4A90\u4A91\u4A92\u4A93\u4A94\u4A95\u4A96"+
-        "\u4A97\u4A98\u4A99\u4A9A\u4A9B\u4A9C\u4A9D\u4A9E"+
-        "\u4A9F\u4AA0\u4AA1\u4AA2\u4AA3\u4AA4\u4AA5\u4AA6"+
-        "\u4AA7\u4AA8\u4AA9\u4AAA\u4AAB\u4AAC\u4AAD\u4AAE"+
-        "\u4AAF\u4AB0\u4AB1\u4AB2\u4AB3\u4AB4\u4AB5\u4AB6"+
-        "\u4AB7\u4AB8\u4AB9\u4ABA\u4ABB\u4ABC\u4ABD\u4ABE"+
-        "\u4ABF\u4AC0\u4AC1\u4AC2\u4AC3\u4AC4\u4AC5\u4AC6"+
-        "\u4AC7\u4AC8\u4AC9\u4ACA\u4ACB\u4ACC\u4ACD\u4ACE"+
-        "\u4ACF\u4AD0\u4AD1\u4AD2\u4AD3\u4AD4\u4AD5\u4AD6"+
-        "\u4AD7\u4AD8\u4AD9\u4ADA\u4ADB\u4ADC\u4ADD\u4ADE"+
-        "\u4ADF\u4AE0\u4AE1\u4AE2\u4AE3\u4AE4\u4AE5\u4AE6"+
-        "\u4AE7\u4AE8\u4AE9\u4AEA\u4AEB\u4AEC\u4AED\u4AEE"+
-        "\u4AEF\u4AF0\u4AF1\u4AF2\u4AF3\u4AF4\u4AF5\u4AF6"+
-        "\u4AF7\u4AF8\u4AF9\u4AFA\u4AFB\u4AFC\u4AFD\u4AFE"+
-        "\u4AFF\u4B00\u4B01\u4B02\u4B03\u4B04\u4B05\u4B06"+
-        "\u4B07\u4B08\u4B09\u4B0A\u4B0B\u4B0C\u4B0D\u4B0E"+
-        "\u4B0F\u4B10\u4B11\u4B12\u4B13\u4B14\u4B15\u4B16"+
-        "\u4B17\u4B18\u4B19\u4B1A\u4B1B\u4B1C\u4B1D\u4B1E"+
-        "\u4B1F\u4B20\u4B21\u4B22\u4B23\u4B24\u4B25\u4B26"+
-        "\u4B27\u4B28\u4B29\u4B2A\u4B2B\u4B2C\u4B2D\u4B2E"+
-        "\u4B2F\u4B30\u4B31\u4B32\u4B33\u4B34\u4B35\u4B36"+
-        "\u4B37\u4B38\u4B39\u4B3A\u4B3B\u4B3C\u4B3D\u4B3E"+
-        "\u4B3F\u4B40\u4B41\u4B42\u4B43\u4B44\u4B45\u4B46"+
-        "\u4B47\u4B48\u4B49\u4B4A\u4B4B\u4B4C\u4B4D\u4B4E"+
-        "\u4B4F\u4B50\u4B51\u4B52\u4B53\u4B54\u4B55\u4B56"+
-        "\u4B57\u4B58\u4B59\u4B5A\u4B5B\u4B5C\u4B5D\u4B5E"+
-        "\u4B5F\u4B60\u4B61\u4B62\u4B63\u4B64\u4B65\u4B66"+
-        "\u4B67\u4B68\u4B69\u4B6A\u4B6B\u4B6C\u4B6D\u4B6E"+
-        "\u4B6F\u4B70\u4B71\u4B72\u4B73\u4B74\u4B75\u4B76"+
-        "\u4B77\u4B78\u4B79\u4B7A\u4B7B\u4B7C\u4B7D\u4B7E"+
-        "\u4B7F\u4B80\u4B81\u4B82\u4B83\u4B84\u4B85\u4B86"+
-        "\u4B87\u4B88\u4B89\u4B8A\u4B8B\u4B8C\u4B8D\u4B8E"+
-        "\u4B8F\u4B90\u4B91\u4B92\u4B93\u4B94\u4B95\u4B96"+
-        "\u4B97\u4B98\u4B99\u4B9A\u4B9B\u4B9C\u4B9D\u4B9E"+
-        "\u4B9F\u4BA0\u4BA1\u4BA2\u4BA3\u4BA4\u4BA5\u4BA6"+
-        "\u4BA7\u4BA8\u4BA9\u4BAA\u4BAB\u4BAC\u4BAD\u4BAE"+
-        "\u4BAF\u4BB0\u4BB1\u4BB2\u4BB3\u4BB4\u4BB5\u4BB6"+
-        "\u4BB7\u4BB8\u4BB9\u4BBA\u4BBB\u4BBC\u4BBD\u4BBE"+
-        "\u4BBF\u4BC0\u4BC1\u4BC2\u4BC3\u4BC4\u4BC5\u4BC6"+
-        "\u4BC7\u4BC8\u4BC9\u4BCA\u4BCB\u4BCC\u4BCD\u4BCE"+
-        "\u4BCF\u4BD0\u4BD1\u4BD2\u4BD3\u4BD4\u4BD5\u4BD6"+
-        "\u4BD7\u4BD8\u4BD9\u4BDA\u4BDB\u4BDC\u4BDD\u4BDE"+
-        "\u4BDF\u4BE0\u4BE1\u4BE2\u4BE3\u4BE4\u4BE5\u4BE6"+
-        "\u4BE7\u4BE8\u4BE9\u4BEA\u4BEB\u4BEC\u4BED\u4BEE"+
-        "\u4BEF\u4BF0\u4BF1\u4BF2\u4BF3\u4BF4\u4BF5\u4BF6"+
-        "\u4BF7\u4BF8\u4BF9\u4BFA\u4BFB\u4BFC\u4BFD\u4BFE"+
-        "\u4BFF\u4C00\u4C01\u4C02\u4C03\u4C04\u4C05\u4C06"+
-        "\u4C07\u4C08\u4C09\u4C0A\u4C0B\u4C0C\u4C0D\u4C0E"+
-        "\u4C0F\u4C10\u4C11\u4C12\u4C13\u4C14\u4C15\u4C16"+
-        "\u4C17\u4C18\u4C19\u4C1A\u4C1B\u4C1C\u4C1D\u4C1E"+
-        "\u4C1F\u4C20\u4C21\u4C22\u4C23\u4C24\u4C25\u4C26"+
-        "\u4C27\u4C28\u4C29\u4C2A\u4C2B\u4C2C\u4C2D\u4C2E"+
-        "\u4C2F\u4C30\u4C31\u4C32\u4C33\u4C34\u4C35\u4C36"+
-        "\u4C37\u4C38\u4C39\u4C3A\u4C3B\u4C3C\u4C3D\u4C3E"+
-        "\u4C3F\u4C40\u4C41\u4C42\u4C43\u4C44\u4C45\u4C46"+
-        "\u4C47\u4C48\u4C49\u4C4A\u4C4B\u4C4C\u4C4D\u4C4E"+
-        "\u4C4F\u4C50\u4C51\u4C52\u4C53\u4C54\u4C55\u4C56"+
-        "\u4C57\u4C58\u4C59\u4C5A\u4C5B\u4C5C\u4C5D\u4C5E"+
-        "\u4C5F\u4C60\u4C61\u4C62\u4C63\u4C64\u4C65\u4C66"+
-        "\u4C67\u4C68\u4C69\u4C6A\u4C6B\u4C6C\u4C6D\u4C6E"+
-        "\u4C6F\u4C70\u4C71\u4C72\u4C73\u4C74\u4C75\u4C76"+
-        "\u4C78\u4C79\u4C7A\u4C7B\u4C7C\u4C7D\u4C7E\u4C7F"+
-        "\u4C80\u4C81\u4C82\u4C83\u4C84\u4C85\u4C86\u4C87"+
-        "\u4C88\u4C89\u4C8A\u4C8B\u4C8C\u4C8D\u4C8E\u4C8F"+
-        "\u4C90\u4C91\u4C92\u4C93\u4C94\u4C95\u4C96\u4C97"+
-        "\u4C98\u4C99\u4C9A\u4C9B\u4C9C\u4C9D\u4C9E\u4CA4"+
-        "\u4CA5\u4CA6\u4CA7\u4CA8\u4CA9\u4CAA\u4CAB\u4CAC"+
-        "\u4CAD\u4CAE\u4CAF\u4CB0\u4CB1\u4CB2\u4CB3\u4CB4"+
-        "\u4CB5\u4CB6\u4CB7\u4CB8\u4CB9\u4CBA\u4CBB\u4CBC"+
-        "\u4CBD\u4CBE\u4CBF\u4CC0\u4CC1\u4CC2\u4CC3\u4CC4"+
-        "\u4CC5\u4CC6\u4CC7\u4CC8\u4CC9\u4CCA\u4CCB\u4CCC"+
-        "\u4CCD\u4CCE\u4CCF\u4CD0\u4CD1\u4CD2\u4CD3\u4CD4"+
-        "\u4CD5\u4CD6\u4CD7\u4CD8\u4CD9\u4CDA\u4CDB\u4CDC"+
-        "\u4CDD\u4CDE\u4CDF\u4CE0\u4CE1\u4CE2\u4CE3\u4CE4"+
-        "\u4CE5\u4CE6\u4CE7\u4CE8\u4CE9\u4CEA\u4CEB\u4CEC"+
-        "\u4CED\u4CEE\u4CEF\u4CF0\u4CF1\u4CF2\u4CF3\u4CF4"+
-        "\u4CF5\u4CF6\u4CF7\u4CF8\u4CF9\u4CFA\u4CFB\u4CFC"+
-        "\u4CFD\u4CFE\u4CFF\u4D00\u4D01\u4D02\u4D03\u4D04"+
-        "\u4D05\u4D06\u4D07\u4D08\u4D09\u4D0A\u4D0B\u4D0C"+
-        "\u4D0D\u4D0E\u4D0F\u4D10\u4D11\u4D12\u4D1A\u4D1B"+
-        "\u4D1C\u4D1D\u4D1E\u4D1F\u4D20\u4D21\u4D22\u4D23"+
-        "\u4D24\u4D25\u4D26\u4D27\u4D28\u4D29\u4D2A\u4D2B"+
-        "\u4D2C\u4D2D\u4D2E\u4D2F\u4D30\u4D31\u4D32\u4D33"+
-        "\u4D34\u4D35\u4D36\u4D37\u4D38\u4D39\u4D3A\u4D3B"+
-        "\u4D3C\u4D3D\u4D3E\u4D3F\u4D40\u4D41\u4D42\u4D43"+
-        "\u4D44\u4D45\u4D46\u4D47\u4D48\u4D49\u4D4A\u4D4B"+
-        "\u4D4C\u4D4D\u4D4E\u4D4F\u4D50\u4D51\u4D52\u4D53"+
-        "\u4D54\u4D55\u4D56\u4D57\u4D58\u4D59\u4D5A\u4D5B"+
-        "\u4D5C\u4D5D\u4D5E\u4D5F\u4D60\u4D61\u4D62\u4D63"+
-        "\u4D64\u4D65\u4D66\u4D67\u4D68\u4D69\u4D6A\u4D6B"+
-        "\u4D6C\u4D6D\u4D6E\u4D6F\u4D70\u4D71\u4D72\u4D73"+
-        "\u4D74\u4D75\u4D76\u4D77\u4D78\u4D79\u4D7A\u4D7B"+
-        "\u4D7C\u4D7D\u4D7E\u4D7F\u4D80\u4D81\u4D82\u4D83"+
-        "\u4D84\u4D85\u4D86\u4D87\u4D88\u4D89\u4D8A\u4D8B"+
-        "\u4D8C\u4D8D\u4D8E\u4D8F\u4D90\u4D91\u4D92\u4D93"+
-        "\u4D94\u4D95\u4D96\u4D97\u4D98\u4D99\u4D9A\u4D9B"+
-        "\u4D9C\u4D9D\u4D9E\u4D9F\u4DA0\u4DA1\u4DA2\u4DA3"+
-        "\u4DA4\u4DA5\u4DA6\u4DA7\u4DA8\u4DA9\u4DAA\u4DAB"+
-        "\u4DAC\u4DAD\u4DAF\u4DB0\u4DB1\u4DB2\u4DB3\u4DB4"+
-        "\u4DB5\u4DB6\u4DB7\u4DB8\u4DB9\u4DBA\u4DBB\u4DBC"+
-        "\u4DBD\u4DBE\u4DBF\u4DC0\u4DC1\u4DC2\u4DC3\u4DC4"+
-        "\u4DC5\u4DC6\u4DC7\u4DC8\u4DC9\u4DCA\u4DCB\u4DCC"+
-        "\u4DCD\u4DCE\u4DCF\u4DD0\u4DD1\u4DD2\u4DD3\u4DD4"+
-        "\u4DD5\u4DD6\u4DD7\u4DD8\u4DD9\u4DDA\u4DDB\u4DDC"+
-        "\u4DDD\u4DDE\u4DDF\u4DE0\u4DE1\u4DE2\u4DE3\u4DE4"+
-        "\u4DE5\u4DE6\u4DE7\u4DE8\u4DE9\u4DEA\u4DEB\u4DEC"+
-        "\u4DED\u4DEE\u4DEF\u4DF0\u4DF1\u4DF2\u4DF3\u4DF4"+
-        "\u4DF5\u4DF6\u4DF7\u4DF8\u4DF9\u4DFA\u4DFB\u4DFC"+
-        "\u4DFD\u4DFE\u4DFF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uE76C\uE7C8\uE7E7"+
-        "\uE7E8\uE7E9\uE7EA\uE7EB\uE7EC\uE7ED\uE7EE\uE7EF"+
-        "\uE7F0\uE7F1\uE7F2\uE7F3\uE815\uE819\uE81A\uE81B"+
-        "\uE81C\uE81D\uE81F\uE820\uE821\uE822\uE823\uE824"+
-        "\uE825\uE827\uE828\uE829\uE82A\uE82D\uE82E\uE82F"+
-        "\uE830\uE833\uE834\uE835\uE836\uE837\uE838\uE839"+
-        "\uE83A\uE83C\uE83D\uE83E\uE83F\uE840\uE841\uE842"+
-        "\uE844\uE845\uE846\uE847\uE848\uE849\uE84A\uE84B"+
-        "\uE84C\uE84D\uE84E\uE84F\uE850\uE851\uE852\uE853"+
-        "\uE856\uE857\uE858\uE859\uE85A\uE85B\uE85C\uE85D"+
-        "\uE85E\uE85F\uE860\uE861\uE862\uE863\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uF900\uF901\uF902\uF903\uF904\uF905\uF906"+
-        "\uF907\uF908\uF909\uF90A\uF90B\uF90C\uF90D\uF90E"+
-        "\uF90F\uF910\uF911\uF912\uF913\uF914\uF915\uF916"+
-        "\uF917\uF918\uF919\uF91A\uF91B\uF91C\uF91D\uF91E"+
-        "\uF91F\uF920\uF921\uF922\uF923\uF924\uF925\uF926"+
-        "\uF927\uF928\uF929\uF92A\uF92B\uF92D\uF92E\uF92F"+
-        "\uF930\uF931\uF932\uF933\uF934\uF935\uF936\uF937"+
-        "\uF938\uF939\uF93A\uF93B\uF93C\uF93D\uF93E\uF93F"+
-        "\uF940\uF941\uF942\uF943\uF944\uF945\uF946\uF947"+
-        "\uF948\uF949\uF94A\uF94B\uF94C\uF94D\uF94E\uF94F"+
-        "\uF950\uF951\uF952\uF953\uF954\uF955\uF956\uF957"+
-        "\uF958\uF959\uF95A\uF95B\uF95C\uF95D\uF95E\uF95F"+
-        "\uF960\uF961\uF962\uF963\uF964\uF965\uF966\uF967"+
-        "\uF968\uF969\uF96A\uF96B\uF96C\uF96D\uF96E\uF96F"+
-        "\uF970\uF971\uF972\uF973\uF974\uF975\uF976\uF977"+
-        "\uF978\uF97A\uF97B\uF97C\uF97D\uF97E\uF97F\uF980"+
-        "\uF981\uF982\uF983\uF984\uF985\uF986\uF987\uF988"+
-        "\uF989\uF98A\uF98B\uF98C\uF98D\uF98E\uF98F\uF990"+
-        "\uF991\uF992\uF993\uF994\uF996\uF997\uF998\uF999"+
-        "\uF99A\uF99B\uF99C\uF99D\uF99E\uF99F\uF9A0\uF9A1"+
-        "\uF9A2\uF9A3\uF9A4\uF9A5\uF9A6\uF9A7\uF9A8\uF9A9"+
-        "\uF9AA\uF9AB\uF9AC\uF9AD\uF9AE\uF9AF\uF9B0\uF9B1"+
-        "\uF9B2\uF9B3\uF9B4\uF9B5\uF9B6\uF9B7\uF9B8\uF9B9"+
-        "\uF9BA\uF9BB\uF9BC\uF9BD\uF9BE\uF9BF\uF9C0\uF9C1"+
-        "\uF9C2\uF9C3\uF9C4\uF9C5\uF9C6\uF9C7\uF9C8\uF9C9"+
-        "\uF9CA\uF9CB\uF9CC\uF9CD\uF9CE\uF9CF\uF9D0\uF9D1"+
-        "\uF9D2\uF9D3\uF9D4\uF9D5\uF9D6\uF9D7\uF9D8\uF9D9"+
-        "\uF9DA\uF9DB\uF9DC\uF9DD\uF9DE\uF9DF\uF9E0\uF9E1"+
-        "\uF9E2\uF9E3\uF9E4\uF9E5\uF9E6\uF9E8\uF9E9\uF9EA"+
-        "\uF9EB\uF9EC\uF9ED\uF9EE\uF9EF\uF9F0\uF9F2\uF9F3"+
-        "\uF9F4\uF9F5\uF9F6\uF9F7\uF9F8\uF9F9\uF9FA\uF9FB"+
-        "\uF9FC\uF9FD\uF9FE\uF9FF\uFA00\uFA01\uFA02\uFA03"+
-        "\uFA04\uFA05\uFA06\uFA07\uFA08\uFA09\uFA0A\uFA0B"+
-        "\uFA10\uFA12\uFA15\uFA16\uFA17\uFA19\uFA1A\uFA1B"+
-        "\uFA1C\uFA1D\uFA1E\uFA22\uFA25\uFA26\uFA2A\uFA2B"+
-        "\uFA2C\uFA2D\uFA2E\uFA2F\uFA30\uFA31\uFA32\uFA33"+
-        "\uFA34\uFA35\uFA36\uFA37\uFA38\uFA39\uFA3A\uFA3B"+
-        "\uFA3C\uFA3D\uFA3E\uFA3F\uFA40\uFA41\uFA42\uFA43"+
-        "\uFA44\uFA45\uFA46\uFA47\uFA48\uFA49\uFA4A\uFA4B"+
-        "\uFA4C\uFA4D\uFA4E\uFA4F\uFA50\uFA51\uFA52\uFA53"+
-        "\uFA54\uFA55\uFA56\uFA57\uFA58\uFA59\uFA5A\uFA5B"+
-        "\uFA5C\uFA5D\uFA5E\uFA5F\uFA60\uFA61\uFA62\uFA63"+
-        "\uFA64\uFA65\uFA66\uFA67\uFA68\uFA69\uFA6A\uFA6B"+
-        "\uFA6C\uFA6D\uFA6E\uFA6F\uFA70\uFA71\uFA72\uFA73"+
-        "\uFA74\uFA75\uFA76\uFA77\uFA78\uFA79\uFA7A\uFA7B"+
-        "\uFA7C\uFA7D\uFA7E\uFA7F\uFA80\uFA81\uFA82\uFA83"+
-        "\uFA84\uFA85\uFA86\uFA87\uFA88\uFA89\uFA8A\uFA8B"+
-        "\uFA8C\uFA8D\uFA8E\uFA8F\uFA90\uFA91\uFA92\uFA93"+
-        "\uFA94\uFA95\uFA96\uFA97\uFA98\uFA99\uFA9A\uFA9B"+
-        "\uFA9C\uFA9D\uFA9E\uFA9F\uFAA0\uFAA1\uFAA2\uFAA3"+
-        "\uFAA4\uFAA5\uFAA6\uFAA7\uFAA8\uFAA9\uFAAA\uFAAB"+
-        "\uFAAC\uFAAD\uFAAE\uFAAF\uFAB0\uFAB1\uFAB2\uFAB3"+
-        "\uFAB4\uFAB5\uFAB6\uFAB7\uFAB8\uFAB9\uFABA\uFABB"+
-        "\uFABC\uFABD\uFABE\uFABF\uFAC0\uFAC1\uFAC2\uFAC3"+
-        "\uFAC4\uFAC5\uFAC6\uFAC7\uFAC8\uFAC9\uFACA\uFACB"+
-        "\uFACC\uFACD\uFACE\uFACF\uFAD0\uFAD1\uFAD2\uFAD3"+
-        "\uFAD4\uFAD5\uFAD6\uFAD7\uFAD8\uFAD9\uFADA\uFADB"+
-        "\uFADC\uFADD\uFADE\uFADF\uFAE0\uFAE1\uFAE2\uFAE3"+
-        "\uFAE4\uFAE5\uFAE6\uFAE7\uFAE8\uFAE9\uFAEA\uFAEB"+
-        "\uFAEC\uFAED\uFAEE\uFAEF\uFAF0\uFAF1\uFAF2\uFAF3"+
-        "\uFAF4\uFAF5\uFAF6\uFAF7\uFAF8\uFAF9\uFAFA\uFAFB"+
-        "\uFAFC\uFAFD\uFAFE\uFAFF\uFB00\uFB01\uFB02\uFB03"+
-        "\uFB04\uFB05\uFB06\uFB07\uFB08\uFB09\uFB0A\uFB0B"+
-        "\uFB0C\uFB0D\uFB0E\uFB0F\uFB10\uFB11\uFB12\uFB13"+
-        "\uFB14\uFB15\uFB16\uFB17\uFB18\uFB19\uFB1A\uFB1B"+
-        "\uFB1C\uFB1D\uFB1E\uFB1F\uFB20\uFB21\uFB22\uFB23"+
-        "\uFB24\uFB25\uFB26\uFB27\uFB28\uFB29\uFB2A\uFB2B"+
-        "\uFB2C\uFB2D\uFB2E\uFB2F\uFB30\uFB31\uFB32\uFB33"+
-        "\uFB34\uFB35\uFB36\uFB37\uFB38\uFB39\uFB3A\uFB3B"+
-        "\uFB3C\uFB3D\uFB3E\uFB3F\uFB40\uFB41\uFB42\uFB43"+
-        "\uFB44\uFB45\uFB46\uFB47\uFB48\uFB49\uFB4A\uFB4B"+
-        "\uFB4C\uFB4D\uFB4E\uFB4F\uFB50\uFB51\uFB52\uFB53"+
-        "\uFB54\uFB55\uFB56\uFB57\uFB58\uFB59\uFB5A\uFB5B"+
-        "\uFB5C\uFB5D\uFB5E\uFB5F\uFB60\uFB61\uFB62\uFB63"+
-        "\uFB64\uFB65\uFB66\uFB67\uFB68\uFB69\uFB6A\uFB6B";
-
-    private final static String innerDecoderIndex5=
-        "\uFB6C\uFB6D\uFB6E\uFB6F\uFB70\uFB71\uFB72\uFB73"+
-        "\uFB74\uFB75\uFB76\uFB77\uFB78\uFB79\uFB7A\uFB7B"+
-        "\uFB7C\uFB7D\uFB7E\uFB7F\uFB80\uFB81\uFB82\uFB83"+
-        "\uFB84\uFB85\uFB86\uFB87\uFB88\uFB89\uFB8A\uFB8B"+
-        "\uFB8C\uFB8D\uFB8E\uFB8F\uFB90\uFB91\uFB92\uFB93"+
-        "\uFB94\uFB95\uFB96\uFB97\uFB98\uFB99\uFB9A\uFB9B"+
-        "\uFB9C\uFB9D\uFB9E\uFB9F\uFBA0\uFBA1\uFBA2\uFBA3"+
-        "\uFBA4\uFBA5\uFBA6\uFBA7\uFBA8\uFBA9\uFBAA\uFBAB"+
-        "\uFBAC\uFBAD\uFBAE\uFBAF\uFBB0\uFBB1\uFBB2\uFBB3"+
-        "\uFBB4\uFBB5\uFBB6\uFBB7\uFBB8\uFBB9\uFBBA\uFBBB"+
-        "\uFBBC\uFBBD\uFBBE\uFBBF\uFBC0\uFBC1\uFBC2\uFBC3"+
-        "\uFBC4\uFBC5\uFBC6\uFBC7\uFBC8\uFBC9\uFBCA\uFBCB"+
-        "\uFBCC\uFBCD\uFBCE\uFBCF\uFBD0\uFBD1\uFBD2\uFBD3"+
-        "\uFBD4\uFBD5\uFBD6\uFBD7\uFBD8\uFBD9\uFBDA\uFBDB"+
-        "\uFBDC\uFBDD\uFBDE\uFBDF\uFBE0\uFBE1\uFBE2\uFBE3"+
-        "\uFBE4\uFBE5\uFBE6\uFBE7\uFBE8\uFBE9\uFBEA\uFBEB"+
-        "\uFBEC\uFBED\uFBEE\uFBEF\uFBF0\uFBF1\uFBF2\uFBF3"+
-        "\uFBF4\uFBF5\uFBF6\uFBF7\uFBF8\uFBF9\uFBFA\uFBFB"+
-        "\uFBFC\uFBFD\uFBFE\uFBFF\uFC00\uFC01\uFC02\uFC03"+
-        "\uFC04\uFC05\uFC06\uFC07\uFC08\uFC09\uFC0A\uFC0B"+
-        "\uFC0C\uFC0D\uFC0E\uFC0F\uFC10\uFC11\uFC12\uFC13"+
-        "\uFC14\uFC15\uFC16\uFC17\uFC18\uFC19\uFC1A\uFC1B"+
-        "\uFC1C\uFC1D\uFC1E\uFC1F\uFC20\uFC21\uFC22\uFC23"+
-        "\uFC24\uFC25\uFC26\uFC27\uFC28\uFC29\uFC2A\uFC2B"+
-        "\uFC2C\uFC2D\uFC2E\uFC2F\uFC30\uFC31\uFC32\uFC33"+
-        "\uFC34\uFC35\uFC36\uFC37\uFC38\uFC39\uFC3A\uFC3B"+
-        "\uFC3C\uFC3D\uFC3E\uFC3F\uFC40\uFC41\uFC42\uFC43"+
-        "\uFC44\uFC45\uFC46\uFC47\uFC48\uFC49\uFC4A\uFC4B"+
-        "\uFC4C\uFC4D\uFC4E\uFC4F\uFC50\uFC51\uFC52\uFC53"+
-        "\uFC54\uFC55\uFC56\uFC57\uFC58\uFC59\uFC5A\uFC5B"+
-        "\uFC5C\uFC5D\uFC5E\uFC5F\uFC60\uFC61\uFC62\uFC63"+
-        "\uFC64\uFC65\uFC66\uFC67\uFC68\uFC69\uFC6A\uFC6B"+
-        "\uFC6C\uFC6D\uFC6E\uFC6F\uFC70\uFC71\uFC72\uFC73"+
-        "\uFC74\uFC75\uFC76\uFC77\uFC78\uFC79\uFC7A\uFC7B"+
-        "\uFC7C\uFC7D\uFC7E\uFC7F\uFC80\uFC81\uFC82\uFC83"+
-        "\uFC84\uFC85\uFC86\uFC87\uFC88\uFC89\uFC8A\uFC8B"+
-        "\uFC8C\uFC8D\uFC8E\uFC8F\uFC90\uFC91\uFC92\uFC93"+
-        "\uFC94\uFC95\uFC96\uFC97\uFC98\uFC99\uFC9A\uFC9B"+
-        "\uFC9C\uFC9D\uFC9E\uFC9F\uFCA0\uFCA1\uFCA2\uFCA3"+
-        "\uFCA4\uFCA5\uFCA6\uFCA7\uFCA8\uFCA9\uFCAA\uFCAB"+
-        "\uFCAC\uFCAD\uFCAE\uFCAF\uFCB0\uFCB1\uFCB2\uFCB3"+
-        "\uFCB4\uFCB5\uFCB6\uFCB7\uFCB8\uFCB9\uFCBA\uFCBB"+
-        "\uFCBC\uFCBD\uFCBE\uFCBF\uFCC0\uFCC1\uFCC2\uFCC3"+
-        "\uFCC4\uFCC5\uFCC6\uFCC7\uFCC8\uFCC9\uFCCA\uFCCB"+
-        "\uFCCC\uFCCD\uFCCE\uFCCF\uFCD0\uFCD1\uFCD2\uFCD3"+
-        "\uFCD4\uFCD5\uFCD6\uFCD7\uFCD8\uFCD9\uFCDA\uFCDB"+
-        "\uFCDC\uFCDD\uFCDE\uFCDF\uFCE0\uFCE1\uFCE2\uFCE3"+
-        "\uFCE4\uFCE5\uFCE6\uFCE7\uFCE8\uFCE9\uFCEA\uFCEB"+
-        "\uFCEC\uFCED\uFCEE\uFCEF\uFCF0\uFCF1\uFCF2\uFCF3"+
-        "\uFCF4\uFCF5\uFCF6\uFCF7\uFCF8\uFCF9\uFCFA\uFCFB"+
-        "\uFCFC\uFCFD\uFCFE\uFCFF\uFD00\uFD01\uFD02\uFD03"+
-        "\uFD04\uFD05\uFD06\uFD07\uFD08\uFD09\uFD0A\uFD0B"+
-        "\uFD0C\uFD0D\uFD0E\uFD0F\uFD10\uFD11\uFD12\uFD13"+
-        "\uFD14\uFD15\uFD16\uFD17\uFD18\uFD19\uFD1A\uFD1B"+
-        "\uFD1C\uFD1D\uFD1E\uFD1F\uFD20\uFD21\uFD22\uFD23"+
-        "\uFD24\uFD25\uFD26\uFD27\uFD28\uFD29\uFD2A\uFD2B"+
-        "\uFD2C\uFD2D\uFD2E\uFD2F\uFD30\uFD31\uFD32\uFD33"+
-        "\uFD34\uFD35\uFD36\uFD37\uFD38\uFD39\uFD3A\uFD3B"+
-        "\uFD3C\uFD3D\uFD3E\uFD3F\uFD40\uFD41\uFD42\uFD43"+
-        "\uFD44\uFD45\uFD46\uFD47\uFD48\uFD49\uFD4A\uFD4B"+
-        "\uFD4C\uFD4D\uFD4E\uFD4F\uFD50\uFD51\uFD52\uFD53"+
-        "\uFD54\uFD55\uFD56\uFD57\uFD58\uFD59\uFD5A\uFD5B"+
-        "\uFD5C\uFD5D\uFD5E\uFD5F\uFD60\uFD61\uFD62\uFD63"+
-        "\uFD64\uFD65\uFD66\uFD67\uFD68\uFD69\uFD6A\uFD6B"+
-        "\uFD6C\uFD6D\uFD6E\uFD6F\uFD70\uFD71\uFD72\uFD73"+
-        "\uFD74\uFD75\uFD76\uFD77\uFD78\uFD79\uFD7A\uFD7B"+
-        "\uFD7C\uFD7D\uFD7E\uFD7F\uFD80\uFD81\uFD82\uFD83"+
-        "\uFD84\uFD85\uFD86\uFD87\uFD88\uFD89\uFD8A\uFD8B"+
-        "\uFD8C\uFD8D\uFD8E\uFD8F\uFD90\uFD91\uFD92\uFD93"+
-        "\uFD94\uFD95\uFD96\uFD97\uFD98\uFD99\uFD9A\uFD9B"+
-        "\uFD9C\uFD9D\uFD9E\uFD9F\uFDA0\uFDA1\uFDA2\uFDA3"+
-        "\uFDA4\uFDA5\uFDA6\uFDA7\uFDA8\uFDA9\uFDAA\uFDAB"+
-        "\uFDAC\uFDAD\uFDAE\uFDAF\uFDB0\uFDB1\uFDB2\uFDB3"+
-        "\uFDB4\uFDB5\uFDB6\uFDB7\uFDB8\uFDB9\uFDBA\uFDBB"+
-        "\uFDBC\uFDBD\uFDBE\uFDBF\uFDC0\uFDC1\uFDC2\uFDC3"+
-        "\uFDC4\uFDC5\uFDC6\uFDC7\uFDC8\uFDC9\uFDCA\uFDCB"+
-        "\uFDCC\uFDCD\uFDCE\uFDCF\uFDD0\uFDD1\uFDD2\uFDD3"+
-        "\uFDD4\uFDD5\uFDD6\uFDD7\uFDD8\uFDD9\uFDDA\uFDDB"+
-        "\uFDDC\uFDDD\uFDDE\uFDDF\uFDE0\uFDE1\uFDE2\uFDE3"+
-        "\uFDE4\uFDE5\uFDE6\uFDE7\uFDE8\uFDE9\uFDEA\uFDEB"+
-        "\uFDEC\uFDED\uFDEE\uFDEF\uFDF0\uFDF1\uFDF2\uFDF3"+
-        "\uFDF4\uFDF5\uFDF6\uFDF7\uFDF8\uFDF9\uFDFA\uFDFB"+
-        "\uFDFC\uFDFD\uFDFE\uFDFF\uFE00\uFE01\uFE02\uFE03"+
-        "\uFE04\uFE05\uFE06\uFE07\uFE08\uFE09\uFE0A\uFE0B"+
-        "\uFE0C\uFE0D\uFE0E\uFE0F\uFE10\uFE11\uFE12\uFE13"+
-        "\uFE14\uFE15\uFE16\uFE17\uFE18\uFE19\uFE1A\uFE1B"+
-        "\uFE1C\uFE1D\uFE1E\uFE1F\uFE20\uFE21\uFE22\uFE23"+
-        "\uFE24\uFE25\uFE26\uFE27\uFE28\uFE29\uFE2A\uFE2B"+
-        "\uFE2C\uFE2D\uFE2E\uFE2F\uFE32\uFE45\uFE46\uFE47"+
-        "\uFE48\uFE53\uFE58\uFE67\uFE6C\uFE6D\uFE6E\uFE6F"+
-        "\uFE70\uFE71\uFE72\uFE73\uFE74\uFE75\uFE76\uFE77"+
-        "\uFE78\uFE79\uFE7A\uFE7B\uFE7C\uFE7D\uFE7E\uFE7F"+
-        "\uFE80\uFE81\uFE82\uFE83\uFE84\uFE85\uFE86\uFE87"+
-        "\uFE88\uFE89\uFE8A\uFE8B\uFE8C\uFE8D\uFE8E\uFE8F"+
-        "\uFE90\uFE91\uFE92\uFE93\uFE94\uFE95\uFE96\uFE97"+
-        "\uFE98\uFE99\uFE9A\uFE9B\uFE9C\uFE9D\uFE9E\uFE9F"+
-        "\uFEA0\uFEA1\uFEA2\uFEA3\uFEA4\uFEA5\uFEA6\uFEA7"+
-        "\uFEA8\uFEA9\uFEAA\uFEAB\uFEAC\uFEAD\uFEAE\uFEAF"+
-        "\uFEB0\uFEB1\uFEB2\uFEB3\uFEB4\uFEB5\uFEB6\uFEB7"+
-        "\uFEB8\uFEB9\uFEBA\uFEBB\uFEBC\uFEBD\uFEBE\uFEBF"+
-        "\uFEC0\uFEC1\uFEC2\uFEC3\uFEC4\uFEC5\uFEC6\uFEC7"+
-        "\uFEC8\uFEC9\uFECA\uFECB\uFECC\uFECD\uFECE\uFECF"+
-        "\uFED0\uFED1\uFED2\uFED3\uFED4\uFED5\uFED6\uFED7"+
-        "\uFED8\uFED9\uFEDA\uFEDB\uFEDC\uFEDD\uFEDE\uFEDF"+
-        "\uFEE0\uFEE1\uFEE2\uFEE3\uFEE4\uFEE5\uFEE6\uFEE7"+
-        "\uFEE8\uFEE9\uFEEA\uFEEB\uFEEC\uFEED\uFEEE\uFEEF"+
-        "\uFEF0\uFEF1\uFEF2\uFEF3\uFEF4\uFEF5\uFEF6\uFEF7"+
-        "\uFEF8\uFEF9\uFEFA\uFEFB\uFEFC\uFEFD\uFEFE\uFEFF"+
-        "\uFF00\uFF5F\uFF60\uFF61\uFF62\uFF63\uFF64\uFF65"+
-        "\uFF66\uFF67\uFF68\uFF69\uFF6A\uFF6B\uFF6C\uFF6D"+
-        "\uFF6E\uFF6F\uFF70\uFF71\uFF72\uFF73\uFF74\uFF75"+
-        "\uFF76\uFF77\uFF78\uFF79\uFF7A\uFF7B\uFF7C\uFF7D"+
-        "\uFF7E\uFF7F\uFF80\uFF81\uFF82\uFF83\uFF84\uFF85"+
-        "\uFF86\uFF87\uFF88\uFF89\uFF8A\uFF8B\uFF8C\uFF8D"+
-        "\uFF8E\uFF8F\uFF90\uFF91\uFF92\uFF93\uFF94\uFF95"+
-        "\uFF96\uFF97\uFF98\uFF99\uFF9A\uFF9B\uFF9C\uFF9D"+
-        "\uFF9E\uFF9F\uFFA0\uFFA1\uFFA2\uFFA3\uFFA4\uFFA5"+
-        "\uFFA6\uFFA7\uFFA8\uFFA9\uFFAA\uFFAB\uFFAC\uFFAD"+
-        "\uFFAE\uFFAF\uFFB0\uFFB1\uFFB2\uFFB3\uFFB4\uFFB5"+
-        "\uFFB6\uFFB7\uFFB8\uFFB9\uFFBA\uFFBB\uFFBC\uFFBD"+
-        "\uFFBE\uFFBF\uFFC0\uFFC1\uFFC2\uFFC3\uFFC4\uFFC5"+
-        "\uFFC6\uFFC7\uFFC8\uFFC9\uFFCA\uFFCB\uFFCC\uFFCD"+
-        "\uFFCE\uFFCF\uFFD0\uFFD1\uFFD2\uFFD3\uFFD4\uFFD5"+
-        "\uFFD6\uFFD7\uFFD8\uFFD9\uFFDA\uFFDB\uFFDC\uFFDD"+
-        "\uFFDE\uFFDF\uFFE6\uFFE7\uFFE8\uFFE9\uFFEA\uFFEB"+
-        "\uFFEC\uFFED\uFFEE\uFFEF\uFFF0\uFFF1\uFFF2\uFFF3"+
-        "\uFFF4\uFFF5\uFFF6\uFFF7\uFFF8\uFFF9\uFFFA\uFFFB"+
-        "\uFFFC\uFFFD\uFFFE\uFFFF\uFFFD\uFFFD\uFFFD\uFFFD";
-
-    private final static short decoderIndex1[] = {
-        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-        16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
-        32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
-        48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
-        64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 75, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 77, 78, 79, 80, 81, 82, 83, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-    };
-
-    static String decoderIndex2[] = {
-        innerDecoderIndex0,
-        innerDecoderIndex1,
-        innerDecoderIndex2,
-        innerDecoderIndex3,
-        innerDecoderIndex4,
-        innerDecoderIndex5
-    };
-
-/*
- *
- */
-    private final static String innerIndex0=
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4E02"+
-        "\u4E04\u4E05\u4E06\u4E0F\u4E12\u4E17\u4E1F\u4E20"+
-        "\u4E21\u4E23\u4E26\u4E29\u4E2E\u4E2F\u4E31\u4E33"+
-        "\u4E35\u4E37\u4E3C\u4E40\u4E41\u4E42\u4E44\u4E46"+
-        "\u4E4A\u4E51\u4E55\u4E57\u4E5A\u4E5B\u4E62\u4E63"+
-        "\u4E64\u4E65\u4E67\u4E68\u4E6A\u4E6B\u4E6C\u4E6D"+
-        "\u4E6E\u4E6F\u4E72\u4E74\u4E75\u4E76\u4E77\u4E78"+
-        "\u4E79\u4E7A\u4E7B\u4E7C\u4E7D\u4E7F\u4E80\u4E81"+
-        "\u4E82\u4E83\u4E84\u4E85\u4E87\u4E8A\uFFFD\u4E90"+
-        "\u4E96\u4E97\u4E99\u4E9C\u4E9D\u4E9E\u4EA3\u4EAA"+
-        "\u4EAF\u4EB0\u4EB1\u4EB4\u4EB6\u4EB7\u4EB8\u4EB9"+
-        "\u4EBC\u4EBD\u4EBE\u4EC8\u4ECC\u4ECF\u4ED0\u4ED2"+
-        "\u4EDA\u4EDB\u4EDC\u4EE0\u4EE2\u4EE6\u4EE7\u4EE9"+
-        "\u4EED\u4EEE\u4EEF\u4EF1\u4EF4\u4EF8\u4EF9\u4EFA"+
-        "\u4EFC\u4EFE\u4F00\u4F02\u4F03\u4F04\u4F05\u4F06"+
-        "\u4F07\u4F08\u4F0B\u4F0C\u4F12\u4F13\u4F14\u4F15"+
-        "\u4F16\u4F1C\u4F1D\u4F21\u4F23\u4F28\u4F29\u4F2C"+
-        "\u4F2D\u4F2E\u4F31\u4F33\u4F35\u4F37\u4F39\u4F3B"+
-        "\u4F3E\u4F3F\u4F40\u4F41\u4F42\u4F44\u4F45\u4F47"+
-        "\u4F48\u4F49\u4F4A\u4F4B\u4F4C\u4F52\u4F54\u4F56"+
-        "\u4F61\u4F62\u4F66\u4F68\u4F6A\u4F6B\u4F6D\u4F6E"+
-        "\u4F71\u4F72\u4F75\u4F77\u4F78\u4F79\u4F7A\u4F7D"+
-        "\u4F80\u4F81\u4F82\u4F85\u4F86\u4F87\u4F8A\u4F8C"+
-        "\u4F8E\u4F90\u4F92\u4F93\u4F95\u4F96\u4F98\u4F99"+
-        "\u4F9A\u4F9C\u4F9E\u4F9F\u4FA1\u4FA2\u4FA4\u4FAB"+
-        "\u4FAD\u4FB0\u4FB1\u4FB2\u4FB3\u4FB4\u4FB6\u4FB7"+
-        "\u4FB8\u4FB9\u4FBA\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0"+
-        "\u4FC1\u4FC2\u4FC6\u4FC7\u4FC8\u4FC9\u4FCB\u4FCC"+
-        "\u4FCD\u4FD2\u4FD3\u4FD4\u4FD5\u4FD6\u4FD9\u4FDB"+
-        "\u4FE0\u4FE2\u4FE4\u4FE5\u4FE7\u4FEB\u4FEC\u4FF0"+
-        "\u4FF2\u4FF4\u4FF5\u4FF6\u4FF7\u4FF9\u4FFB\u4FFC"+
-        "\u4FFD\u4FFF\u5000\u5001\u5002\u5003\u5004\u5005"+
-        "\u5006\u5007\u5008\u5009\u500A\uFFFD\u500B\u500E"+
-        "\u5010\u5011\u5013\u5015\u5016\u5017\u501B\u501D"+
-        "\u501E\u5020\u5022\u5023\u5024\u5027\u502B\u502F"+
-        "\u5030\u5031\u5032\u5033\u5034\u5035\u5036\u5037"+
-        "\u5038\u5039\u503B\u503D\u503F\u5040\u5041\u5042"+
-        "\u5044\u5045\u5046\u5049\u504A\u504B\u504D\u5050"+
-        "\u5051\u5052\u5053\u5054\u5056\u5057\u5058\u5059"+
-        "\u505B\u505D\u505E\u505F\u5060\u5061\u5062\u5063"+
-        "\u5064\u5066\u5067\u5068\u5069\u506A\u506B\u506D"+
-        "\u506E\u506F\u5070\u5071\u5072\u5073\u5074\u5075"+
-        "\u5078\u5079\u507A\u507C\u507D\u5081\u5082\u5083"+
-        "\u5084\u5086\u5087\u5089\u508A\u508B\u508C\u508E"+
-        "\u508F\u5090\u5091\u5092\u5093\u5094\u5095\u5096"+
-        "\u5097\u5098\u5099\u509A\u509B\u509C\u509D\u509E"+
-        "\u509F\u50A0\u50A1\u50A2\u50A4\u50A6\u50AA\u50AB"+
-        "\u50AD\u50AE\u50AF\u50B0\u50B1\u50B3\u50B4\u50B5"+
-        "\u50B6\u50B7\u50B8\u50B9\u50BC\u50BD\u50BE\u50BF"+
-        "\u50C0\u50C1\u50C2\u50C3\u50C4\u50C5\u50C6\u50C7"+
-        "\u50C8\u50C9\u50CA\u50CB\u50CC\u50CD\u50CE\u50D0"+
-        "\u50D1\u50D2\u50D3\u50D4\u50D5\u50D7\u50D8\u50D9"+
-        "\u50DB\u50DC\u50DD\u50DE\u50DF\u50E0\u50E1\u50E2"+
-        "\u50E3\u50E4\u50E5\u50E8\u50E9\u50EA\u50EB\u50EF"+
-        "\u50F0\u50F1\u50F2\u50F4\u50F6\u50F7\u50F8\u50F9"+
-        "\u50FA\u50FC\u50FD\u50FE\u50FF\u5100\u5101\u5102"+
-        "\u5103\u5104\u5105\u5108\uFFFD\u5109\u510A\u510C"+
-        "\u510D\u510E\u510F\u5110\u5111\u5113\u5114\u5115"+
-        "\u5116\u5117\u5118\u5119\u511A\u511B\u511C\u511D"+
-        "\u511E\u511F\u5120\u5122\u5123\u5124\u5125\u5126"+
-        "\u5127\u5128\u5129\u512A\u512B\u512C\u512D\u512E"+
-        "\u512F\u5130\u5131\u5132\u5133\u5134\u5135\u5136"+
-        "\u5137\u5138\u5139\u513A\u513B\u513C\u513D\u513E"+
-        "\u5142\u5147\u514A\u514C\u514E\u514F\u5150\u5152"+
-        "\u5153\u5157\u5158\u5159\u515B\u515D\u515E\u515F"+
-        "\u5160\u5161\u5163\u5164\u5166\u5167\u5169\u516A"+
-        "\u516F\u5172\u517A\u517E\u517F\u5183\u5184\u5186"+
-        "\u5187\u518A\u518B\u518E\u518F\u5190\u5191\u5193"+
-        "\u5194\u5198\u519A\u519D\u519E\u519F\u51A1\u51A3"+
-        "\u51A6\u51A7\u51A8\u51A9\u51AA\u51AD\u51AE\u51B4"+
-        "\u51B8\u51B9\u51BA\u51BE\u51BF\u51C1\u51C2\u51C3"+
-        "\u51C5\u51C8\u51CA\u51CD\u51CE\u51D0\u51D2\u51D3"+
-        "\u51D4\u51D5\u51D6\u51D7\u51D8\u51D9\u51DA\u51DC"+
-        "\u51DE\u51DF\u51E2\u51E3\u51E5\u51E6\u51E7\u51E8"+
-        "\u51E9\u51EA\u51EC\u51EE\u51F1\u51F2\u51F4\u51F7"+
-        "\u51FE\u5204\u5205\u5209\u520B\u520C\u520F\u5210"+
-        "\u5213\u5214\u5215\u521C\u521E\u521F\u5221\u5222"+
-        "\u5223\u5225\u5226\u5227\u522A\u522C\u522F\u5231"+
-        "\u5232\u5234\u5235\u523C\u523E\u5244\u5245\u5246"+
-        "\u5247\u5248\u5249\u524B\u524E\u524F\u5252\u5253"+
-        "\u5255\u5257\u5258\uFFFD\u5259\u525A\u525B\u525D"+
-        "\u525F\u5260\u5262\u5263\u5264\u5266\u5268\u526B"+
-        "\u526C\u526D\u526E\u5270\u5271\u5273\u5274\u5275"+
-        "\u5276\u5277\u5278\u5279\u527A\u527B\u527C\u527E"+
-        "\u5280\u5283\u5284\u5285\u5286\u5287\u5289\u528A"+
-        "\u528B\u528C\u528D\u528E\u528F\u5291\u5292\u5294"+
-        "\u5295\u5296\u5297\u5298\u5299\u529A\u529C\u52A4"+
-        "\u52A5\u52A6\u52A7\u52AE\u52AF\u52B0\u52B4\u52B5"+
-        "\u52B6\u52B7\u52B8\u52B9\u52BA\u52BB\u52BC\u52BD"+
-        "\u52C0\u52C1\u52C2\u52C4\u52C5\u52C6\u52C8\u52CA"+
-        "\u52CC\u52CD\u52CE\u52CF\u52D1\u52D3\u52D4\u52D5"+
-        "\u52D7\u52D9\u52DA\u52DB\u52DC\u52DD\u52DE\u52E0"+
-        "\u52E1\u52E2\u52E3\u52E5\u52E6\u52E7\u52E8\u52E9"+
-        "\u52EA\u52EB\u52EC\u52ED\u52EE\u52EF\u52F1\u52F2"+
-        "\u52F3\u52F4\u52F5\u52F6\u52F7\u52F8\u52FB\u52FC"+
-        "\u52FD\u5301\u5302\u5303\u5304\u5307\u5309\u530A"+
-        "\u530B\u530C\u530E\u5311\u5312\u5313\u5314\u5318"+
-        "\u531B\u531C\u531E\u531F\u5322\u5324\u5325\u5327"+
-        "\u5328\u5329\u532B\u532C\u532D\u532F\u5330\u5331"+
-        "\u5332\u5333\u5334\u5335\u5336\u5337\u5338\u533C"+
-        "\u533D\u5340\u5342\u5344\u5346\u534B\u534C\u534D"+
-        "\u5350\u5354\u5358\u5359\u535B\u535D\u5365\u5368"+
-        "\u536A\u536C\u536D\u5372\u5376\u5379\u537B\u537C"+
-        "\u537D\u537E\u5380\u5381\u5383\u5387\u5388\u538A"+
-        "\u538E\u538F\uFFFD\u5390\u5391\u5392\u5393\u5394"+
-        "\u5396\u5397\u5399\u539B\u539C\u539E\u53A0\u53A1"+
-        "\u53A4\u53A7\u53AA\u53AB\u53AC\u53AD\u53AF\u53B0"+
-        "\u53B1\u53B2\u53B3\u53B4\u53B5\u53B7\u53B8\u53B9"+
-        "\u53BA\u53BC\u53BD\u53BE\u53C0\u53C3\u53C4\u53C5"+
-        "\u53C6\u53C7\u53CE\u53CF\u53D0\u53D2\u53D3\u53D5"+
-        "\u53DA\u53DC\u53DD\u53DE\u53E1\u53E2\u53E7\u53F4"+
-        "\u53FA\u53FE\u53FF\u5400\u5402\u5405\u5407\u540B"+
-        "\u5414\u5418\u5419\u541A\u541C\u5422\u5424\u5425"+
-        "\u542A\u5430\u5433\u5436\u5437\u543A\u543D\u543F"+
-        "\u5441\u5442\u5444\u5445\u5447\u5449\u544C\u544D"+
-        "\u544E\u544F\u5451\u545A\u545D\u545E\u545F\u5460"+
-        "\u5461\u5463\u5465\u5467\u5469\u546A\u546B\u546C"+
-        "\u546D\u546E\u546F\u5470\u5474\u5479\u547A\u547E"+
-        "\u547F\u5481\u5483\u5485\u5487\u5488\u5489\u548A"+
-        "\u548D\u5491\u5493\u5497\u5498\u549C\u549E\u549F"+
-        "\u54A0\u54A1\u54A2\u54A5\u54AE\u54B0\u54B2\u54B5"+
-        "\u54B6\u54B7\u54B9\u54BA\u54BC\u54BE\u54C3\u54C5"+
-        "\u54CA\u54CB\u54D6\u54D8\u54DB\u54E0\u54E1\u54E2"+
-        "\u54E3\u54E4\u54EB\u54EC\u54EF\u54F0\u54F1\u54F4"+
-        "\u54F5\u54F6\u54F7\u54F8\u54F9\u54FB\u54FE\u5500"+
-        "\u5502\u5503\u5504\u5505\u5508\u550A\u550B\u550C"+
-        "\u550D\u550E\u5512\u5513\u5515\u5516\u5517\u5518"+
-        "\u5519\u551A\u551C\u551D\u551E\u551F\u5521\u5525"+
-        "\u5526\uFFFD\u5528\u5529\u552B\u552D\u5532\u5534"+
-        "\u5535\u5536\u5538\u5539\u553A\u553B\u553D\u5540"+
-        "\u5542\u5545\u5547\u5548\u554B\u554C\u554D\u554E"+
-        "\u554F\u5551\u5552\u5553\u5554\u5557\u5558\u5559"+
-        "\u555A\u555B\u555D\u555E\u555F\u5560\u5562\u5563"+
-        "\u5568\u5569\u556B\u556F\u5570\u5571\u5572\u5573"+
-        "\u5574\u5579\u557A\u557D\u557F\u5585\u5586\u558C"+
-        "\u558D\u558E\u5590\u5592\u5593\u5595\u5596\u5597"+
-        "\u559A\u559B\u559E\u55A0\u55A1\u55A2\u55A3\u55A4"+
-        "\u55A5\u55A6\u55A8\u55A9\u55AA\u55AB\u55AC\u55AD"+
-        "\u55AE\u55AF\u55B0\u55B2\u55B4\u55B6\u55B8\u55BA"+
-        "\u55BC\u55BF\u55C0\u55C1\u55C2\u55C3\u55C6\u55C7"+
-        "\u55C8\u55CA\u55CB\u55CE\u55CF\u55D0\u55D5\u55D7"+
-        "\u55D8\u55D9\u55DA\u55DB\u55DE\u55E0\u55E2\u55E7"+
-        "\u55E9\u55ED\u55EE\u55F0\u55F1\u55F4\u55F6\u55F8"+
-        "\u55F9\u55FA\u55FB\u55FC\u55FF\u5602\u5603\u5604"+
-        "\u5605\u5606\u5607\u560A\u560B\u560D\u5610\u5611"+
-        "\u5612\u5613\u5614\u5615\u5616\u5617\u5619\u561A"+
-        "\u561C\u561D\u5620\u5621\u5622\u5625\u5626\u5628"+
-        "\u5629\u562A\u562B\u562E\u562F\u5630\u5633\u5635"+
-        "\u5637\u5638\u563A\u563C\u563D\u563E\u5640\u5641"+
-        "\u5642\u5643\u5644\u5645\u5646\u5647\u5648\u5649"+
-        "\u564A\u564B\u564F\u5650\u5651\u5652\u5653\u5655"+
-        "\u5656\u565A\u565B\u565D\u565E\u565F\u5660\u5661"+
-        "\uFFFD\u5663\u5665\u5666\u5667\u566D\u566E\u566F"+
-        "\u5670\u5672\u5673\u5674\u5675\u5677\u5678\u5679"+
-        "\u567A\u567D\u567E\u567F\u5680\u5681\u5682\u5683"+
-        "\u5684\u5687\u5688\u5689\u568A\u568B\u568C\u568D"+
-        "\u5690\u5691\u5692\u5694\u5695\u5696\u5697\u5698"+
-        "\u5699\u569A\u569B\u569C\u569D\u569E\u569F\u56A0"+
-        "\u56A1\u56A2\u56A4\u56A5\u56A6\u56A7\u56A8\u56A9"+
-        "\u56AA\u56AB\u56AC\u56AD\u56AE\u56B0\u56B1\u56B2"+
-        "\u56B3\u56B4\u56B5\u56B6\u56B8\u56B9\u56BA\u56BB"+
-        "\u56BD\u56BE\u56BF\u56C0\u56C1\u56C2\u56C3\u56C4"+
-        "\u56C5\u56C6\u56C7\u56C8\u56C9\u56CB\u56CC\u56CD"+
-        "\u56CE\u56CF\u56D0\u56D1\u56D2\u56D3\u56D5\u56D6"+
-        "\u56D8\u56D9\u56DC\u56E3\u56E5\u56E6\u56E7\u56E8"+
-        "\u56E9\u56EA\u56EC\u56EE\u56EF\u56F2\u56F3\u56F6"+
-        "\u56F7\u56F8\u56FB\u56FC\u5700\u5701\u5702\u5705"+
-        "\u5707\u570B\u570C\u570D\u570E\u570F\u5710\u5711"+
-        "\u5712\u5713\u5714\u5715\u5716\u5717\u5718\u5719"+
-        "\u571A\u571B\u571D\u571E\u5720\u5721\u5722\u5724"+
-        "\u5725\u5726\u5727\u572B\u5731\u5732\u5734\u5735"+
-        "\u5736\u5737\u5738\u573C\u573D\u573F\u5741\u5743"+
-        "\u5744\u5745\u5746\u5748\u5749\u574B\u5752\u5753"+
-        "\u5754\u5755\u5756\u5758\u5759\u5762\u5763\u5765"+
-        "\u5767\u576C\u576E\u5770\u5771\u5772\u5774\u5775"+
-        "\u5778\u5779\u577A\u577D\u577E\u577F\u5780\uFFFD"+
-        "\u5781\u5787\u5788\u5789\u578A\u578D\u578E\u578F"+
-        "\u5790\u5791\u5794\u5795\u5796\u5797\u5798\u5799"+
-        "\u579A\u579C\u579D\u579E\u579F\u57A5\u57A8\u57AA"+
-        "\u57AC\u57AF\u57B0\u57B1\u57B3\u57B5\u57B6\u57B7"+
-        "\u57B9\u57BA\u57BB\u57BC\u57BD\u57BE\u57BF\u57C0"+
-        "\u57C1\u57C4\u57C5\u57C6\u57C7\u57C8\u57C9\u57CA"+
-        "\u57CC\u57CD\u57D0\u57D1\u57D3\u57D6\u57D7\u57DB"+
-        "\u57DC\u57DE\u57E1\u57E2\u57E3\u57E5\u57E6\u57E7"+
-        "\u57E8\u57E9\u57EA\u57EB\u57EC\u57EE\u57F0\u57F1"+
-        "\u57F2\u57F3\u57F5\u57F6\u57F7\u57FB\u57FC\u57FE"+
-        "\u57FF\u5801\u5803\u5804\u5805\u5808\u5809\u580A"+
-        "\u580C\u580E\u580F\u5810\u5812\u5813\u5814\u5816"+
-        "\u5817\u5818\u581A\u581B\u581C\u581D\u581F\u5822"+
-        "\u5823\u5825\u5826\u5827\u5828\u5829\u582B\u582C"+
-        "\u582D\u582E\u582F\u5831\u5832\u5833\u5834\u5836"+
-        "\u5837\u5838\u5839\u583A\u583B\u583C\u583D\u583E"+
-        "\u583F\u5840\u5841\u5842\u5843\u5845\u5846\u5847"+
-        "\u5848\u5849\u584A\u584B\u584E\u584F\u5850\u5852"+
-        "\u5853\u5855\u5856\u5857\u5859\u585A\u585B\u585C"+
-        "\u585D\u585F\u5860\u5861\u5862\u5863\u5864\u5866"+
-        "\u5867\u5868\u5869\u586A\u586D\u586E\u586F\u5870"+
-        "\u5871\u5872\u5873\u5874\u5875\u5876\u5877\u5878"+
-        "\u5879\u587A\u587B\u587C\u587D\u587F\u5882\u5884"+
-        "\u5886\u5887\u5888\u588A\u588B\u588C\uFFFD\u588D"+
-        "\u588E\u588F\u5890\u5891\u5894\u5895\u5896\u5897"+
-        "\u5898\u589B\u589C\u589D\u58A0\u58A1\u58A2\u58A3"+
-        "\u58A4\u58A5\u58A6\u58A7\u58AA\u58AB\u58AC\u58AD"+
-        "\u58AE\u58AF\u58B0\u58B1\u58B2\u58B3\u58B4\u58B5"+
-        "\u58B6\u58B7\u58B8\u58B9\u58BA\u58BB\u58BD\u58BE"+
-        "\u58BF\u58C0\u58C2\u58C3\u58C4\u58C6\u58C7\u58C8"+
-        "\u58C9\u58CA\u58CB\u58CC\u58CD\u58CE\u58CF\u58D0"+
-        "\u58D2\u58D3\u58D4\u58D6\u58D7\u58D8\u58D9\u58DA"+
-        "\u58DB\u58DC\u58DD\u58DE\u58DF\u58E0\u58E1\u58E2"+
-        "\u58E3\u58E5\u58E6\u58E7\u58E8\u58E9\u58EA\u58ED"+
-        "\u58EF\u58F1\u58F2\u58F4\u58F5\u58F7\u58F8\u58FA"+
-        "\u58FB\u58FC\u58FD\u58FE\u58FF\u5900\u5901\u5903"+
-        "\u5905\u5906\u5908\u5909\u590A\u590B\u590C\u590E"+
-        "\u5910\u5911\u5912\u5913\u5917\u5918\u591B\u591D"+
-        "\u591E\u5920\u5921\u5922\u5923\u5926\u5928\u592C"+
-        "\u5930\u5932\u5933\u5935\u5936\u593B\u593D\u593E"+
-        "\u593F\u5940\u5943\u5945\u5946\u594A\u594C\u594D"+
-        "\u5950\u5952\u5953\u5959\u595B\u595C\u595D\u595E"+
-        "\u595F\u5961\u5963\u5964\u5966\u5967\u5968\u5969"+
-        "\u596A\u596B\u596C\u596D\u596E\u596F\u5970\u5971"+
-        "\u5972\u5975\u5977\u597A\u597B\u597C\u597E\u597F"+
-        "\u5980\u5985\u5989\u598B\u598C\u598E\u598F\u5990"+
-        "\u5991\u5994\u5995\u5998\u599A\u599B\u599C\u599D"+
-        "\u599F\u59A0\u59A1\u59A2\u59A6\uFFFD\u59A7\u59AC"+
-        "\u59AD\u59B0\u59B1\u59B3\u59B4\u59B5\u59B6\u59B7"+
-        "\u59B8\u59BA\u59BC\u59BD\u59BF\u59C0\u59C1\u59C2"+
-        "\u59C3\u59C4\u59C5\u59C7\u59C8\u59C9\u59CC\u59CD"+
-        "\u59CE\u59CF\u59D5\u59D6\u59D9\u59DB\u59DE\u59DF"+
-        "\u59E0\u59E1\u59E2\u59E4\u59E6\u59E7\u59E9\u59EA"+
-        "\u59EB\u59ED\u59EE\u59EF\u59F0\u59F1\u59F2\u59F3"+
-        "\u59F4\u59F5\u59F6\u59F7\u59F8\u59FA\u59FC\u59FD"+
-        "\u59FE\u5A00\u5A02\u5A0A\u5A0B\u5A0D\u5A0E\u5A0F"+
-        "\u5A10\u5A12\u5A14\u5A15\u5A16\u5A17\u5A19\u5A1A"+
-        "\u5A1B\u5A1D\u5A1E\u5A21\u5A22\u5A24\u5A26\u5A27"+
-        "\u5A28\u5A2A\u5A2B\u5A2C\u5A2D\u5A2E\u5A2F\u5A30"+
-        "\u5A33\u5A35\u5A37\u5A38\u5A39\u5A3A\u5A3B\u5A3D"+
-        "\u5A3E\u5A3F\u5A41\u5A42\u5A43\u5A44\u5A45\u5A47"+
-        "\u5A48\u5A4B\u5A4C\u5A4D\u5A4E\u5A4F\u5A50\u5A51"+
-        "\u5A52\u5A53\u5A54\u5A56\u5A57\u5A58\u5A59\u5A5B"+
-        "\u5A5C\u5A5D\u5A5E\u5A5F\u5A60\u5A61\u5A63\u5A64"+
-        "\u5A65\u5A66\u5A68\u5A69\u5A6B\u5A6C\u5A6D\u5A6E"+
-        "\u5A6F\u5A70\u5A71\u5A72\u5A73\u5A78\u5A79\u5A7B"+
-        "\u5A7C\u5A7D\u5A7E\u5A80\u5A81\u5A82\u5A83\u5A84"+
-        "\u5A85\u5A86\u5A87\u5A88\u5A89\u5A8A\u5A8B\u5A8C"+
-        "\u5A8D\u5A8E\u5A8F\u5A90\u5A91\u5A93\u5A94\u5A95"+
-        "\u5A96\u5A97\u5A98\u5A99\u5A9C\u5A9D\u5A9E\u5A9F"+
-        "\u5AA0\u5AA1\u5AA2\u5AA3\u5AA4\u5AA5\u5AA6\u5AA7"+
-        "\u5AA8\u5AA9\u5AAB\u5AAC\uFFFD\u5AAD\u5AAE\u5AAF"+
-        "\u5AB0\u5AB1\u5AB4\u5AB6\u5AB7\u5AB9\u5ABA\u5ABB"+
-        "\u5ABC\u5ABD\u5ABF\u5AC0\u5AC3\u5AC4\u5AC5\u5AC6"+
-        "\u5AC7\u5AC8\u5ACA\u5ACB\u5ACD\u5ACE\u5ACF\u5AD0"+
-        "\u5AD1\u5AD3\u5AD5\u5AD7\u5AD9\u5ADA\u5ADB\u5ADD"+
-        "\u5ADE\u5ADF\u5AE2\u5AE4\u5AE5\u5AE7\u5AE8\u5AEA"+
-        "\u5AEC\u5AED\u5AEE\u5AEF\u5AF0\u5AF2\u5AF3\u5AF4"+
-        "\u5AF5\u5AF6\u5AF7\u5AF8\u5AF9\u5AFA\u5AFB\u5AFC"+
-        "\u5AFD\u5AFE\u5AFF\u5B00\u5B01\u5B02\u5B03\u5B04"+
-        "\u5B05\u5B06\u5B07\u5B08\u5B0A\u5B0B\u5B0C\u5B0D"+
-        "\u5B0E\u5B0F\u5B10\u5B11\u5B12\u5B13\u5B14\u5B15"+
-        "\u5B18\u5B19\u5B1A\u5B1B\u5B1C\u5B1D\u5B1E\u5B1F"+
-        "\u5B20\u5B21\u5B22\u5B23\u5B24\u5B25\u5B26\u5B27"+
-        "\u5B28\u5B29\u5B2A\u5B2B\u5B2C\u5B2D\u5B2E\u5B2F"+
-        "\u5B30\u5B31\u5B33\u5B35\u5B36\u5B38\u5B39\u5B3A"+
-        "\u5B3B\u5B3C\u5B3D\u5B3E\u5B3F\u5B41\u5B42\u5B43"+
-        "\u5B44\u5B45\u5B46\u5B47\u5B48\u5B49\u5B4A\u5B4B"+
-        "\u5B4C\u5B4D\u5B4E\u5B4F\u5B52\u5B56\u5B5E\u5B60"+
-        "\u5B61\u5B67\u5B68\u5B6B\u5B6D\u5B6E\u5B6F\u5B72"+
-        "\u5B74\u5B76\u5B77\u5B78\u5B79\u5B7B\u5B7C\u5B7E"+
-        "\u5B7F\u5B82\u5B86\u5B8A\u5B8D\u5B8E\u5B90\u5B91"+
-        "\u5B92\u5B94\u5B96\u5B9F\u5BA7\u5BA8\u5BA9\u5BAC"+
-        "\u5BAD\u5BAE\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBB"+
-        "\u5BBC\u5BC0\u5BC1\u5BC3\u5BC8\u5BC9\u5BCA\u5BCB"+
-        "\u5BCD\u5BCE\u5BCF\uFFFD\u5BD1\u5BD4\u5BD5\u5BD6"+
-        "\u5BD7\u5BD8\u5BD9\u5BDA\u5BDB\u5BDC\u5BE0\u5BE2"+
-        "\u5BE3\u5BE6\u5BE7\u5BE9\u5BEA\u5BEB\u5BEC\u5BED"+
-        "\u5BEF\u5BF1\u5BF2\u5BF3\u5BF4\u5BF5\u5BF6\u5BF7"+
-        "\u5BFD\u5BFE\u5C00\u5C02\u5C03\u5C05\u5C07\u5C08"+
-        "\u5C0B\u5C0C\u5C0D\u5C0E\u5C10\u5C12\u5C13\u5C17"+
-        "\u5C19\u5C1B\u5C1E\u5C1F\u5C20\u5C21\u5C23\u5C26"+
-        "\u5C28\u5C29\u5C2A\u5C2B\u5C2D\u5C2E\u5C2F\u5C30"+
-        "\u5C32\u5C33\u5C35\u5C36\u5C37\u5C43\u5C44\u5C46"+
-        "\u5C47\u5C4C\u5C4D\u5C52\u5C53\u5C54\u5C56\u5C57"+
-        "\u5C58\u5C5A\u5C5B\u5C5C\u5C5D\u5C5F\u5C62\u5C64"+
-        "\u5C67\u5C68\u5C69\u5C6A\u5C6B\u5C6C\u5C6D\u5C70"+
-        "\u5C72\u5C73\u5C74\u5C75\u5C76\u5C77\u5C78\u5C7B"+
-        "\u5C7C\u5C7D\u5C7E\u5C80\u5C83\u5C84\u5C85\u5C86"+
-        "\u5C87\u5C89\u5C8A\u5C8B\u5C8E\u5C8F\u5C92\u5C93"+
-        "\u5C95\u5C9D\u5C9E\u5C9F\u5CA0\u5CA1\u5CA4\u5CA5"+
-        "\u5CA6\u5CA7\u5CA8\u5CAA\u5CAE\u5CAF\u5CB0\u5CB2"+
-        "\u5CB4\u5CB6\u5CB9\u5CBA\u5CBB\u5CBC\u5CBE\u5CC0"+
-        "\u5CC2\u5CC3\u5CC5\u5CC6\u5CC7\u5CC8\u5CC9\u5CCA"+
-        "\u5CCC\u5CCD\u5CCE\u5CCF\u5CD0\u5CD1\u5CD3\u5CD4"+
-        "\u5CD5\u5CD6\u5CD7\u5CD8\u5CDA\u5CDB\u5CDC\u5CDD"+
-        "\u5CDE\u5CDF\u5CE0\u5CE2\u5CE3\u5CE7\u5CE9\u5CEB"+
-        "\u5CEC\u5CEE\u5CEF\u5CF1\u5CF2\u5CF3\u5CF4\u5CF5"+
-        "\u5CF6\u5CF7\u5CF8\u5CF9\u5CFA\u5CFC\u5CFD\u5CFE"+
-        "\u5CFF\u5D00\uFFFD\u5D01\u5D04\u5D05\u5D08\u5D09"+
-        "\u5D0A\u5D0B\u5D0C\u5D0D\u5D0F\u5D10\u5D11\u5D12"+
-        "\u5D13\u5D15\u5D17\u5D18\u5D19\u5D1A\u5D1C\u5D1D"+
-        "\u5D1F\u5D20\u5D21\u5D22\u5D23\u5D25\u5D28\u5D2A"+
-        "\u5D2B\u5D2C\u5D2F\u5D30\u5D31\u5D32\u5D33\u5D35"+
-        "\u5D36\u5D37\u5D38\u5D39\u5D3A\u5D3B\u5D3C\u5D3F"+
-        "\u5D40\u5D41\u5D42\u5D43\u5D44\u5D45\u5D46\u5D48"+
-        "\u5D49\u5D4D\u5D4E\u5D4F\u5D50\u5D51\u5D52\u5D53"+
-        "\u5D54\u5D55\u5D56\u5D57\u5D59\u5D5A\u5D5C\u5D5E"+
-        "\u5D5F\u5D60\u5D61\u5D62\u5D63\u5D64\u5D65\u5D66"+
-        "\u5D67\u5D68\u5D6A\u5D6D\u5D6E\u5D70\u5D71\u5D72"+
-        "\u5D73\u5D75\u5D76\u5D77\u5D78\u5D79\u5D7A\u5D7B"+
-        "\u5D7C\u5D7D\u5D7E\u5D7F\u5D80\u5D81\u5D83\u5D84"+
-        "\u5D85\u5D86\u5D87\u5D88\u5D89\u5D8A\u5D8B\u5D8C"+
-        "\u5D8D\u5D8E\u5D8F\u5D90\u5D91\u5D92\u5D93\u5D94"+
-        "\u5D95\u5D96\u5D97\u5D98\u5D9A\u5D9B\u5D9C\u5D9E"+
-        "\u5D9F\u5DA0\u5DA1\u5DA2\u5DA3\u5DA4\u5DA5\u5DA6"+
-        "\u5DA7\u5DA8\u5DA9\u5DAA\u5DAB\u5DAC\u5DAD\u5DAE"+
-        "\u5DAF\u5DB0\u5DB1\u5DB2\u5DB3\u5DB4\u5DB5\u5DB6"+
-        "\u5DB8\u5DB9\u5DBA\u5DBB\u5DBC\u5DBD\u5DBE\u5DBF"+
-        "\u5DC0\u5DC1\u5DC2\u5DC3\u5DC4\u5DC6\u5DC7\u5DC8"+
-        "\u5DC9\u5DCA\u5DCB\u5DCC\u5DCE\u5DCF\u5DD0\u5DD1"+
-        "\u5DD2\u5DD3\u5DD4\u5DD5\u5DD6\u5DD7\u5DD8\u5DD9"+
-        "\u5DDA\u5DDC\u5DDF\u5DE0\u5DE3\u5DE4\u5DEA\u5DEC"+
-        "\u5DED\uFFFD\u5DF0\u5DF5\u5DF6\u5DF8\u5DF9\u5DFA"+
-        "\u5DFB\u5DFC\u5DFF\u5E00\u5E04\u5E07\u5E09\u5E0A"+
-        "\u5E0B\u5E0D\u5E0E\u5E12\u5E13\u5E17\u5E1E\u5E1F"+
-        "\u5E20\u5E21\u5E22\u5E23\u5E24\u5E25\u5E28\u5E29"+
-        "\u5E2A\u5E2B\u5E2C\u5E2F\u5E30\u5E32\u5E33\u5E34"+
-        "\u5E35\u5E36\u5E39\u5E3A\u5E3E\u5E3F\u5E40\u5E41"+
-        "\u5E43\u5E46\u5E47\u5E48\u5E49\u5E4A\u5E4B\u5E4D"+
-        "\u5E4E\u5E4F\u5E50\u5E51\u5E52\u5E53\u5E56\u5E57"+
-        "\u5E58\u5E59\u5E5A\u5E5C\u5E5D\u5E5F\u5E60\u5E63"+
-        "\u5E64\u5E65\u5E66\u5E67\u5E68\u5E69\u5E6A\u5E6B"+
-        "\u5E6C\u5E6D\u5E6E\u5E6F\u5E70\u5E71\u5E75\u5E77"+
-        "\u5E79\u5E7E\u5E81\u5E82\u5E83\u5E85\u5E88\u5E89"+
-        "\u5E8C\u5E8D\u5E8E\u5E92\u5E98\u5E9B\u5E9D\u5EA1"+
-        "\u5EA2\u5EA3\u5EA4\u5EA8\u5EA9\u5EAA\u5EAB\u5EAC"+
-        "\u5EAE\u5EAF\u5EB0\u5EB1\u5EB2\u5EB4\u5EBA\u5EBB"+
-        "\u5EBC\u5EBD\u5EBF\u5EC0\u5EC1\u5EC2\u5EC3\u5EC4"+
-        "\u5EC5\u5EC6\u5EC7\u5EC8\u5ECB\u5ECC\u5ECD\u5ECE"+
-        "\u5ECF\u5ED0\u5ED4\u5ED5\u5ED7\u5ED8\u5ED9\u5EDA"+
-        "\u5EDC\u5EDD\u5EDE\u5EDF\u5EE0\u5EE1\u5EE2\u5EE3"+
-        "\u5EE4\u5EE5\u5EE6\u5EE7\u5EE9\u5EEB\u5EEC\u5EED"+
-        "\u5EEE\u5EEF\u5EF0\u5EF1\u5EF2\u5EF3\u5EF5\u5EF8"+
-        "\u5EF9\u5EFB\u5EFC\u5EFD\u5F05\u5F06\u5F07\u5F09"+
-        "\u5F0C\u5F0D\u5F0E\u5F10\u5F12\u5F14\u5F16\u5F19"+
-        "\u5F1A\u5F1C\u5F1D\u5F1E\u5F21\u5F22\u5F23\u5F24"+
-        "\uFFFD\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F32\u5F33"+
-        "\u5F34\u5F35\u5F36\u5F37\u5F38\u5F3B\u5F3D\u5F3E"+
-        "\u5F3F\u5F41\u5F42\u5F43\u5F44\u5F45\u5F46\u5F47"+
-        "\u5F48\u5F49\u5F4A\u5F4B\u5F4C\u5F4D\u5F4E\u5F4F"+
-        "\u5F51\u5F54\u5F59\u5F5A\u5F5B\u5F5C\u5F5E\u5F5F"+
-        "\u5F60\u5F63\u5F65\u5F67\u5F68\u5F6B\u5F6E\u5F6F"+
-        "\u5F72\u5F74\u5F75\u5F76\u5F78\u5F7A\u5F7D\u5F7E"+
-        "\u5F7F\u5F83\u5F86\u5F8D\u5F8E\u5F8F\u5F91\u5F93"+
-        "\u5F94\u5F96\u5F9A\u5F9B\u5F9D\u5F9E\u5F9F\u5FA0"+
-        "\u5FA2\u5FA3\u5FA4\u5FA5\u5FA6\u5FA7\u5FA9\u5FAB"+
-        "\u5FAC\u5FAF\u5FB0\u5FB1\u5FB2\u5FB3\u5FB4\u5FB6"+
-        "\u5FB8\u5FB9\u5FBA\u5FBB\u5FBE\u5FBF\u5FC0\u5FC1"+
-        "\u5FC2\u5FC7\u5FC8\u5FCA\u5FCB\u5FCE\u5FD3\u5FD4"+
-        "\u5FD5\u5FDA\u5FDB\u5FDC\u5FDE\u5FDF\u5FE2\u5FE3"+
-        "\u5FE5\u5FE6\u5FE8\u5FE9\u5FEC\u5FEF\u5FF0\u5FF2"+
-        "\u5FF3\u5FF4\u5FF6\u5FF7\u5FF9\u5FFA\u5FFC\u6007";
-
-    private final static String innerIndex1=
-        "\u6008\u6009\u600B\u600C\u6010\u6011\u6013\u6017"+
-        "\u6018\u601A\u601E\u601F\u6022\u6023\u6024\u602C"+
-        "\u602D\u602E\u6030\u6031\u6032\u6033\u6034\u6036"+
-        "\u6037\u6038\u6039\u603A\u603D\u603E\u6040\u6044"+
-        "\u6045\u6046\u6047\u6048\u6049\u604A\u604C\u604E"+
-        "\u604F\u6051\u6053\u6054\u6056\u6057\u6058\u605B"+
-        "\u605C\u605E\u605F\u6060\u6061\u6065\u6066\u606E"+
-        "\u6071\u6072\u6074\u6075\u6077\u607E\u6080\uFFFD"+
-        "\u6081\u6082\u6085\u6086\u6087\u6088\u608A\u608B"+
-        "\u608E\u608F\u6090\u6091\u6093\u6095\u6097\u6098"+
-        "\u6099\u609C\u609E\u60A1\u60A2\u60A4\u60A5\u60A7"+
-        "\u60A9\u60AA\u60AE\u60B0\u60B3\u60B5\u60B6\u60B7"+
-        "\u60B9\u60BA\u60BD\u60BE\u60BF\u60C0\u60C1\u60C2"+
-        "\u60C3\u60C4\u60C7\u60C8\u60C9\u60CC\u60CD\u60CE"+
-        "\u60CF\u60D0\u60D2\u60D3\u60D4\u60D6\u60D7\u60D9"+
-        "\u60DB\u60DE\u60E1\u60E2\u60E3\u60E4\u60E5\u60EA"+
-        "\u60F1\u60F2\u60F5\u60F7\u60F8\u60FB\u60FC\u60FD"+
-        "\u60FE\u60FF\u6102\u6103\u6104\u6105\u6107\u610A"+
-        "\u610B\u610C\u6110\u6111\u6112\u6113\u6114\u6116"+
-        "\u6117\u6118\u6119\u611B\u611C\u611D\u611E\u6121"+
-        "\u6122\u6125\u6128\u6129\u612A\u612C\u612D\u612E"+
-        "\u612F\u6130\u6131\u6132\u6133\u6134\u6135\u6136"+
-        "\u6137\u6138\u6139\u613A\u613B\u613C\u613D\u613E"+
-        "\u6140\u6141\u6142\u6143\u6144\u6145\u6146\u6147"+
-        "\u6149\u614B\u614D\u614F\u6150\u6152\u6153\u6154"+
-        "\u6156\u6157\u6158\u6159\u615A\u615B\u615C\u615E"+
-        "\u615F\u6160\u6161\u6163\u6164\u6165\u6166\u6169"+
-        "\u616A\u616B\u616C\u616D\u616E\u616F\u6171\u6172"+
-        "\u6173\u6174\u6176\u6178\u6179\u617A\u617B\u617C"+
-        "\u617D\u617E\u617F\u6180\u6181\u6182\u6183\u6184"+
-        "\u6185\u6186\u6187\u6188\u6189\u618A\u618C\u618D"+
-        "\u618F\u6190\u6191\u6192\u6193\u6195\uFFFD\u6196"+
-        "\u6197\u6198\u6199\u619A\u619B\u619C\u619E\u619F"+
-        "\u61A0\u61A1\u61A2\u61A3\u61A4\u61A5\u61A6\u61AA"+
-        "\u61AB\u61AD\u61AE\u61AF\u61B0\u61B1\u61B2\u61B3"+
-        "\u61B4\u61B5\u61B6\u61B8\u61B9\u61BA\u61BB\u61BC"+
-        "\u61BD\u61BF\u61C0\u61C1\u61C3\u61C4\u61C5\u61C6"+
-        "\u61C7\u61C9\u61CC\u61CD\u61CE\u61CF\u61D0\u61D3"+
-        "\u61D5\u61D6\u61D7\u61D8\u61D9\u61DA\u61DB\u61DC"+
-        "\u61DD\u61DE\u61DF\u61E0\u61E1\u61E2\u61E3\u61E4"+
-        "\u61E5\u61E7\u61E8\u61E9\u61EA\u61EB\u61EC\u61ED"+
-        "\u61EE\u61EF\u61F0\u61F1\u61F2\u61F3\u61F4\u61F6"+
-        "\u61F7\u61F8\u61F9\u61FA\u61FB\u61FC\u61FD\u61FE"+
-        "\u6200\u6201\u6202\u6203\u6204\u6205\u6207\u6209"+
-        "\u6213\u6214\u6219\u621C\u621D\u621E\u6220\u6223"+
-        "\u6226\u6227\u6228\u6229\u622B\u622D\u622F\u6230"+
-        "\u6231\u6232\u6235\u6236\u6238\u6239\u623A\u623B"+
-        "\u623C\u6242\u6244\u6245\u6246\u624A\u624F\u6250"+
-        "\u6255\u6256\u6257\u6259\u625A\u625C\u625D\u625E"+
-        "\u625F\u6260\u6261\u6262\u6264\u6265\u6268\u6271"+
-        "\u6272\u6274\u6275\u6277\u6278\u627A\u627B\u627D"+
-        "\u6281\u6282\u6283\u6285\u6286\u6287\u6288\u628B"+
-        "\u628C\u628D\u628E\u628F\u6290\u6294\u6299\u629C"+
-        "\u629D\u629E\u62A3\u62A6\u62A7\u62A9\u62AA\u62AD"+
-        "\u62AE\u62AF\u62B0\u62B2\u62B3\u62B4\u62B6\u62B7"+
-        "\u62B8\u62BA\u62BE\u62C0\u62C1\uFFFD\u62C3\u62CB"+
-        "\u62CF\u62D1\u62D5\u62DD\u62DE\u62E0\u62E1\u62E4"+
-        "\u62EA\u62EB\u62F0\u62F2\u62F5\u62F8\u62F9\u62FA"+
-        "\u62FB\u6300\u6303\u6304\u6305\u6306\u630A\u630B"+
-        "\u630C\u630D\u630F\u6310\u6312\u6313\u6314\u6315"+
-        "\u6317\u6318\u6319\u631C\u6326\u6327\u6329\u632C"+
-        "\u632D\u632E\u6330\u6331\u6333\u6334\u6335\u6336"+
-        "\u6337\u6338\u633B\u633C\u633E\u633F\u6340\u6341"+
-        "\u6344\u6347\u6348\u634A\u6351\u6352\u6353\u6354"+
-        "\u6356\u6357\u6358\u6359\u635A\u635B\u635C\u635D"+
-        "\u6360\u6364\u6365\u6366\u6368\u636A\u636B\u636C"+
-        "\u636F\u6370\u6372\u6373\u6374\u6375\u6378\u6379"+
-        "\u637C\u637D\u637E\u637F\u6381\u6383\u6384\u6385"+
-        "\u6386\u638B\u638D\u6391\u6393\u6394\u6395\u6397"+
-        "\u6399\u639A\u639B\u639C\u639D\u639E\u639F\u63A1"+
-        "\u63A4\u63A6\u63AB\u63AF\u63B1\u63B2\u63B5\u63B6"+
-        "\u63B9\u63BB\u63BD\u63BF\u63C0\u63C1\u63C2\u63C3"+
-        "\u63C5\u63C7\u63C8\u63CA\u63CB\u63CC\u63D1\u63D3"+
-        "\u63D4\u63D5\u63D7\u63D8\u63D9\u63DA\u63DB\u63DC"+
-        "\u63DD\u63DF\u63E2\u63E4\u63E5\u63E6\u63E7\u63E8"+
-        "\u63EB\u63EC\u63EE\u63EF\u63F0\u63F1\u63F3\u63F5"+
-        "\u63F7\u63F9\u63FA\u63FB\u63FC\u63FE\u6403\u6404"+
-        "\u6406\u6407\u6408\u6409\u640A\u640D\u640E\u6411"+
-        "\u6412\u6415\u6416\u6417\u6418\u6419\u641A\u641D"+
-        "\u641F\u6422\u6423\u6424\uFFFD\u6425\u6427\u6428"+
-        "\u6429\u642B\u642E\u642F\u6430\u6431\u6432\u6433"+
-        "\u6435\u6436\u6437\u6438\u6439\u643B\u643C\u643E"+
-        "\u6440\u6442\u6443\u6449\u644B\u644C\u644D\u644E"+
-        "\u644F\u6450\u6451\u6453\u6455\u6456\u6457\u6459"+
-        "\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6462"+
-        "\u6463\u6464\u6465\u6466\u6468\u646A\u646B\u646C"+
-        "\u646E\u646F\u6470\u6471\u6472\u6473\u6474\u6475"+
-        "\u6476\u6477\u647B\u647C\u647D\u647E\u647F\u6480"+
-        "\u6481\u6483\u6486\u6488\u6489\u648A\u648B\u648C"+
-        "\u648D\u648E\u648F\u6490\u6493\u6494\u6497\u6498"+
-        "\u649A\u649B\u649C\u649D\u649F\u64A0\u64A1\u64A2"+
-        "\u64A3\u64A5\u64A6\u64A7\u64A8\u64AA\u64AB\u64AF"+
-        "\u64B1\u64B2\u64B3\u64B4\u64B6\u64B9\u64BB\u64BD"+
-        "\u64BE\u64BF\u64C1\u64C3\u64C4\u64C6\u64C7\u64C8"+
-        "\u64C9\u64CA\u64CB\u64CC\u64CF\u64D1\u64D3\u64D4"+
-        "\u64D5\u64D6\u64D9\u64DA\u64DB\u64DC\u64DD\u64DF"+
-        "\u64E0\u64E1\u64E3\u64E5\u64E7\u64E8\u64E9\u64EA"+
-        "\u64EB\u64EC\u64ED\u64EE\u64EF\u64F0\u64F1\u64F2"+
-        "\u64F3\u64F4\u64F5\u64F6\u64F7\u64F8\u64F9\u64FA"+
-        "\u64FB\u64FC\u64FD\u64FE\u64FF\u6501\u6502\u6503"+
-        "\u6504\u6505\u6506\u6507\u6508\u650A\u650B\u650C"+
-        "\u650D\u650E\u650F\u6510\u6511\u6513\u6514\u6515"+
-        "\u6516\u6517\u6519\u651A\u651B\u651C\u651D\u651E"+
-        "\u651F\u6520\u6521\uFFFD\u6522\u6523\u6524\u6526"+
-        "\u6527\u6528\u6529\u652A\u652C\u652D\u6530\u6531"+
-        "\u6532\u6533\u6537\u653A\u653C\u653D\u6540\u6541"+
-        "\u6542\u6543\u6544\u6546\u6547\u654A\u654B\u654D"+
-        "\u654E\u6550\u6552\u6553\u6554\u6557\u6558\u655A"+
-        "\u655C\u655F\u6560\u6561\u6564\u6565\u6567\u6568"+
-        "\u6569\u656A\u656D\u656E\u656F\u6571\u6573\u6575"+
-        "\u6576\u6578\u6579\u657A\u657B\u657C\u657D\u657E"+
-        "\u657F\u6580\u6581\u6582\u6583\u6584\u6585\u6586"+
-        "\u6588\u6589\u658A\u658D\u658E\u658F\u6592\u6594"+
-        "\u6595\u6596\u6598\u659A\u659D\u659E\u65A0\u65A2"+
-        "\u65A3\u65A6\u65A8\u65AA\u65AC\u65AE\u65B1\u65B2"+
-        "\u65B3\u65B4\u65B5\u65B6\u65B7\u65B8\u65BA\u65BB"+
-        "\u65BE\u65BF\u65C0\u65C2\u65C7\u65C8\u65C9\u65CA"+
-        "\u65CD\u65D0\u65D1\u65D3\u65D4\u65D5\u65D8\u65D9"+
-        "\u65DA\u65DB\u65DC\u65DD\u65DE\u65DF\u65E1\u65E3"+
-        "\u65E4\u65EA\u65EB\u65F2\u65F3\u65F4\u65F5\u65F8"+
-        "\u65F9\u65FB\u65FC\u65FD\u65FE\u65FF\u6601\u6604"+
-        "\u6605\u6607\u6608\u6609\u660B\u660D\u6610\u6611"+
-        "\u6612\u6616\u6617\u6618\u661A\u661B\u661C\u661E"+
-        "\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B"+
-        "\u662C\u662E\u6630\u6632\u6633\u6637\u6638\u6639"+
-        "\u663A\u663B\u663D\u663F\u6640\u6642\u6644\u6645"+
-        "\u6646\u6647\u6648\u6649\u664A\u664D\u664E\u6650"+
-        "\u6651\u6658\uFFFD\u6659\u665B\u665C\u665D\u665E"+
-        "\u6660\u6662\u6663\u6665\u6667\u6669\u666A\u666B"+
-        "\u666C\u666D\u6671\u6672\u6673\u6675\u6678\u6679"+
-        "\u667B\u667C\u667D\u667F\u6680\u6681\u6683\u6685"+
-        "\u6686\u6688\u6689\u668A\u668B\u668D\u668E\u668F"+
-        "\u6690\u6692\u6693\u6694\u6695\u6698\u6699\u669A"+
-        "\u669B\u669C\u669E\u669F\u66A0\u66A1\u66A2\u66A3"+
-        "\u66A4\u66A5\u66A6\u66A9\u66AA\u66AB\u66AC\u66AD"+
-        "\u66AF\u66B0\u66B1\u66B2\u66B3\u66B5\u66B6\u66B7"+
-        "\u66B8\u66BA\u66BB\u66BC\u66BD\u66BF\u66C0\u66C1"+
-        "\u66C2\u66C3\u66C4\u66C5\u66C6\u66C7\u66C8\u66C9"+
-        "\u66CA\u66CB\u66CC\u66CD\u66CE\u66CF\u66D0\u66D1"+
-        "\u66D2\u66D3\u66D4\u66D5\u66D6\u66D7\u66D8\u66DA"+
-        "\u66DE\u66DF\u66E0\u66E1\u66E2\u66E3\u66E4\u66E5"+
-        "\u66E7\u66E8\u66EA\u66EB\u66EC\u66ED\u66EE\u66EF"+
-        "\u66F1\u66F5\u66F6\u66F8\u66FA\u66FB\u66FD\u6701"+
-        "\u6702\u6703\u6704\u6705\u6706\u6707\u670C\u670E"+
-        "\u670F\u6711\u6712\u6713\u6716\u6718\u6719\u671A"+
-        "\u671C\u671E\u6720\u6721\u6722\u6723\u6724\u6725"+
-        "\u6727\u6729\u672E\u6730\u6732\u6733\u6736\u6737"+
-        "\u6738\u6739\u673B\u673C\u673E\u673F\u6741\u6744"+
-        "\u6745\u6747\u674A\u674B\u674D\u6752\u6754\u6755"+
-        "\u6757\u6758\u6759\u675A\u675B\u675D\u6762\u6763"+
-        "\u6764\u6766\u6767\u676B\u676C\u676E\u6771\u6774"+
-        "\u6776\uFFFD\u6778\u6779\u677A\u677B\u677D\u6780"+
-        "\u6782\u6783\u6785\u6786\u6788\u678A\u678C\u678D"+
-        "\u678E\u678F\u6791\u6792\u6793\u6794\u6796\u6799"+
-        "\u679B\u679F\u67A0\u67A1\u67A4\u67A6\u67A9\u67AC"+
-        "\u67AE\u67B1\u67B2\u67B4\u67B9\u67BA\u67BB\u67BC"+
-        "\u67BD\u67BE\u67BF\u67C0\u67C2\u67C5\u67C6\u67C7"+
-        "\u67C8\u67C9\u67CA\u67CB\u67CC\u67CD\u67CE\u67D5"+
-        "\u67D6\u67D7\u67DB\u67DF\u67E1\u67E3\u67E4\u67E6"+
-        "\u67E7\u67E8\u67EA\u67EB\u67ED\u67EE\u67F2\u67F5"+
-        "\u67F6\u67F7\u67F8\u67F9\u67FA\u67FB\u67FC\u67FE"+
-        "\u6801\u6802\u6803\u6804\u6806\u680D\u6810\u6812"+
-        "\u6814\u6815\u6818\u6819\u681A\u681B\u681C\u681E"+
-        "\u681F\u6820\u6822\u6823\u6824\u6825\u6826\u6827"+
-        "\u6828\u682B\u682C\u682D\u682E\u682F\u6830\u6831"+
-        "\u6834\u6835\u6836\u683A\u683B\u683F\u6847\u684B"+
-        "\u684D\u684F\u6852\u6856\u6857\u6858\u6859\u685A"+
-        "\u685B\u685C\u685D\u685E\u685F\u686A\u686C\u686D"+
-        "\u686E\u686F\u6870\u6871\u6872\u6873\u6875\u6878"+
-        "\u6879\u687A\u687B\u687C\u687D\u687E\u687F\u6880"+
-        "\u6882\u6884\u6887\u6888\u6889\u688A\u688B\u688C"+
-        "\u688D\u688E\u6890\u6891\u6892\u6894\u6895\u6896"+
-        "\u6898\u6899\u689A\u689B\u689C\u689D\u689E\u689F"+
-        "\u68A0\u68A1\u68A3\u68A4\u68A5\u68A9\u68AA\u68AB"+
-        "\u68AC\u68AE\u68B1\u68B2\u68B4\u68B6\u68B7\u68B8"+
-        "\uFFFD\u68B9\u68BA\u68BB\u68BC\u68BD\u68BE\u68BF"+
-        "\u68C1\u68C3\u68C4\u68C5\u68C6\u68C7\u68C8\u68CA"+
-        "\u68CC\u68CE\u68CF\u68D0\u68D1\u68D3\u68D4\u68D6"+
-        "\u68D7\u68D9\u68DB\u68DC\u68DD\u68DE\u68DF\u68E1"+
-        "\u68E2\u68E4\u68E5\u68E6\u68E7\u68E8\u68E9\u68EA"+
-        "\u68EB\u68EC\u68ED\u68EF\u68F2\u68F3\u68F4\u68F6"+
-        "\u68F7\u68F8\u68FB\u68FD\u68FE\u68FF\u6900\u6902"+
-        "\u6903\u6904\u6906\u6907\u6908\u6909\u690A\u690C"+
-        "\u690F\u6911\u6913\u6914\u6915\u6916\u6917\u6918"+
-        "\u6919\u691A\u691B\u691C\u691D\u691E\u6921\u6922"+
-        "\u6923\u6925\u6926\u6927\u6928\u6929\u692A\u692B"+
-        "\u692C\u692E\u692F\u6931\u6932\u6933\u6935\u6936"+
-        "\u6937\u6938\u693A\u693B\u693C\u693E\u6940\u6941"+
-        "\u6943\u6944\u6945\u6946\u6947\u6948\u6949\u694A"+
-        "\u694B\u694C\u694D\u694E\u694F\u6950\u6951\u6952"+
-        "\u6953\u6955\u6956\u6958\u6959\u695B\u695C\u695F"+
-        "\u6961\u6962\u6964\u6965\u6967\u6968\u6969\u696A"+
-        "\u696C\u696D\u696F\u6970\u6972\u6973\u6974\u6975"+
-        "\u6976\u697A\u697B\u697D\u697E\u697F\u6981\u6983"+
-        "\u6985\u698A\u698B\u698C\u698E\u698F\u6990\u6991"+
-        "\u6992\u6993\u6996\u6997\u6999\u699A\u699D\u699E"+
-        "\u699F\u69A0\u69A1\u69A2\u69A3\u69A4\u69A5\u69A6"+
-        "\u69A9\u69AA\u69AC\u69AE\u69AF\u69B0\u69B2\u69B3"+
-        "\u69B5\u69B6\u69B8\u69B9\u69BA\u69BC\u69BD\uFFFD"+
-        "\u69BE\u69BF\u69C0\u69C2\u69C3\u69C4\u69C5\u69C6"+
-        "\u69C7\u69C8\u69C9\u69CB\u69CD\u69CF\u69D1\u69D2"+
-        "\u69D3\u69D5\u69D6\u69D7\u69D8\u69D9\u69DA\u69DC"+
-        "\u69DD\u69DE\u69E1\u69E2\u69E3\u69E4\u69E5\u69E6"+
-        "\u69E7\u69E8\u69E9\u69EA\u69EB\u69EC\u69EE\u69EF"+
-        "\u69F0\u69F1\u69F3\u69F4\u69F5\u69F6\u69F7\u69F8"+
-        "\u69F9\u69FA\u69FB\u69FC\u69FE\u6A00\u6A01\u6A02"+
-        "\u6A03\u6A04\u6A05\u6A06\u6A07\u6A08\u6A09\u6A0B"+
-        "\u6A0C\u6A0D\u6A0E\u6A0F\u6A10\u6A11\u6A12\u6A13"+
-        "\u6A14\u6A15\u6A16\u6A19\u6A1A\u6A1B\u6A1C\u6A1D"+
-        "\u6A1E\u6A20\u6A22\u6A23\u6A24\u6A25\u6A26\u6A27"+
-        "\u6A29\u6A2B\u6A2C\u6A2D\u6A2E\u6A30\u6A32\u6A33"+
-        "\u6A34\u6A36\u6A37\u6A38\u6A39\u6A3A\u6A3B\u6A3C"+
-        "\u6A3F\u6A40\u6A41\u6A42\u6A43\u6A45\u6A46\u6A48"+
-        "\u6A49\u6A4A\u6A4B\u6A4C\u6A4D\u6A4E\u6A4F\u6A51"+
-        "\u6A52\u6A53\u6A54\u6A55\u6A56\u6A57\u6A5A\u6A5C"+
-        "\u6A5D\u6A5E\u6A5F\u6A60\u6A62\u6A63\u6A64\u6A66"+
-        "\u6A67\u6A68\u6A69\u6A6A\u6A6B\u6A6C\u6A6D\u6A6E"+
-        "\u6A6F\u6A70\u6A72\u6A73\u6A74\u6A75\u6A76\u6A77"+
-        "\u6A78\u6A7A\u6A7B\u6A7D\u6A7E\u6A7F\u6A81\u6A82"+
-        "\u6A83\u6A85\u6A86\u6A87\u6A88\u6A89\u6A8A\u6A8B"+
-        "\u6A8C\u6A8D\u6A8F\u6A92\u6A93\u6A94\u6A95\u6A96"+
-        "\u6A98\u6A99\u6A9A\u6A9B\u6A9C\u6A9D\u6A9E\u6A9F"+
-        "\u6AA1\u6AA2\u6AA3\u6AA4\u6AA5\u6AA6\uFFFD\u6AA7"+
-        "\u6AA8\u6AAA\u6AAD\u6AAE\u6AAF\u6AB0\u6AB1\u6AB2"+
-        "\u6AB3\u6AB4\u6AB5\u6AB6\u6AB7\u6AB8\u6AB9\u6ABA"+
-        "\u6ABB\u6ABC\u6ABD\u6ABE\u6ABF\u6AC0\u6AC1\u6AC2"+
-        "\u6AC3\u6AC4\u6AC5\u6AC6\u6AC7\u6AC8\u6AC9\u6ACA"+
-        "\u6ACB\u6ACC\u6ACD\u6ACE\u6ACF\u6AD0\u6AD1\u6AD2"+
-        "\u6AD3\u6AD4\u6AD5\u6AD6\u6AD7\u6AD8\u6AD9\u6ADA"+
-        "\u6ADB\u6ADC\u6ADD\u6ADE\u6ADF\u6AE0\u6AE1\u6AE2"+
-        "\u6AE3\u6AE4\u6AE5\u6AE6\u6AE7\u6AE8\u6AE9\u6AEA"+
-        "\u6AEB\u6AEC\u6AED\u6AEE\u6AEF\u6AF0\u6AF1\u6AF2"+
-        "\u6AF3\u6AF4\u6AF5\u6AF6\u6AF7\u6AF8\u6AF9\u6AFA"+
-        "\u6AFB\u6AFC\u6AFD\u6AFE\u6AFF\u6B00\u6B01\u6B02"+
-        "\u6B03\u6B04\u6B05\u6B06\u6B07\u6B08\u6B09\u6B0A"+
-        "\u6B0B\u6B0C\u6B0D\u6B0E\u6B0F\u6B10\u6B11\u6B12"+
-        "\u6B13\u6B14\u6B15\u6B16\u6B17\u6B18\u6B19\u6B1A"+
-        "\u6B1B\u6B1C\u6B1D\u6B1E\u6B1F\u6B25\u6B26\u6B28"+
-        "\u6B29\u6B2A\u6B2B\u6B2C\u6B2D\u6B2E\u6B2F\u6B30"+
-        "\u6B31\u6B33\u6B34\u6B35\u6B36\u6B38\u6B3B\u6B3C"+
-        "\u6B3D\u6B3F\u6B40\u6B41\u6B42\u6B44\u6B45\u6B48"+
-        "\u6B4A\u6B4B\u6B4D\u6B4E\u6B4F\u6B50\u6B51\u6B52"+
-        "\u6B53\u6B54\u6B55\u6B56\u6B57\u6B58\u6B5A\u6B5B"+
-        "\u6B5C\u6B5D\u6B5E\u6B5F\u6B60\u6B61\u6B68\u6B69"+
-        "\u6B6B\u6B6C\u6B6D\u6B6E\u6B6F\u6B70\u6B71\u6B72"+
-        "\u6B73\u6B74\u6B75\u6B76\u6B77\u6B78\u6B7A\u6B7D"+
-        "\u6B7E\u6B7F\u6B80\u6B85\u6B88\uFFFD\u6B8C\u6B8E"+
-        "\u6B8F\u6B90\u6B91\u6B94\u6B95\u6B97\u6B98\u6B99"+
-        "\u6B9C\u6B9D\u6B9E\u6B9F\u6BA0\u6BA2\u6BA3\u6BA4"+
-        "\u6BA5\u6BA6\u6BA7\u6BA8\u6BA9\u6BAB\u6BAC\u6BAD"+
-        "\u6BAE\u6BAF\u6BB0\u6BB1\u6BB2\u6BB6\u6BB8\u6BB9"+
-        "\u6BBA\u6BBB\u6BBC\u6BBD\u6BBE\u6BC0\u6BC3\u6BC4"+
-        "\u6BC6\u6BC7\u6BC8\u6BC9\u6BCA\u6BCC\u6BCE\u6BD0"+
-        "\u6BD1\u6BD8\u6BDA\u6BDC\u6BDD\u6BDE\u6BDF\u6BE0"+
-        "\u6BE2\u6BE3\u6BE4\u6BE5\u6BE6\u6BE7\u6BE8\u6BE9"+
-        "\u6BEC\u6BED\u6BEE\u6BF0\u6BF1\u6BF2\u6BF4\u6BF6"+
-        "\u6BF7\u6BF8\u6BFA\u6BFB\u6BFC\u6BFE\u6BFF\u6C00"+
-        "\u6C01\u6C02\u6C03\u6C04\u6C08\u6C09\u6C0A\u6C0B"+
-        "\u6C0C\u6C0E\u6C12\u6C17\u6C1C\u6C1D\u6C1E\u6C20"+
-        "\u6C23\u6C25\u6C2B\u6C2C\u6C2D\u6C31\u6C33\u6C36"+
-        "\u6C37\u6C39\u6C3A\u6C3B\u6C3C\u6C3E\u6C3F\u6C43"+
-        "\u6C44\u6C45\u6C48\u6C4B\u6C4C\u6C4D\u6C4E\u6C4F"+
-        "\u6C51\u6C52\u6C53\u6C56\u6C58\u6C59\u6C5A\u6C62"+
-        "\u6C63\u6C65\u6C66\u6C67\u6C6B\u6C6C\u6C6D\u6C6E"+
-        "\u6C6F\u6C71\u6C73\u6C75\u6C77\u6C78\u6C7A\u6C7B"+
-        "\u6C7C\u6C7F\u6C80\u6C84\u6C87\u6C8A\u6C8B\u6C8D"+
-        "\u6C8E\u6C91\u6C92\u6C95\u6C96\u6C97\u6C98\u6C9A"+
-        "\u6C9C\u6C9D\u6C9E\u6CA0\u6CA2\u6CA8\u6CAC\u6CAF"+
-        "\u6CB0\u6CB4\u6CB5\u6CB6\u6CB7\u6CBA\u6CC0\u6CC1"+
-        "\u6CC2\u6CC3\u6CC6\u6CC7\u6CC8\u6CCB\u6CCD\u6CCE"+
-        "\u6CCF\u6CD1\u6CD2\u6CD8\uFFFD\u6CD9\u6CDA\u6CDC"+
-        "\u6CDD\u6CDF\u6CE4\u6CE6\u6CE7\u6CE9\u6CEC\u6CED"+
-        "\u6CF2\u6CF4\u6CF9\u6CFF\u6D00\u6D02\u6D03\u6D05"+
-        "\u6D06\u6D08\u6D09\u6D0A\u6D0D\u6D0F\u6D10\u6D11"+
-        "\u6D13\u6D14\u6D15\u6D16\u6D18\u6D1C\u6D1D\u6D1F"+
-        "\u6D20\u6D21\u6D22\u6D23\u6D24\u6D26\u6D28\u6D29"+
-        "\u6D2C\u6D2D\u6D2F\u6D30\u6D34\u6D36\u6D37\u6D38"+
-        "\u6D3A\u6D3F\u6D40\u6D42\u6D44\u6D49\u6D4C\u6D50"+
-        "\u6D55\u6D56\u6D57\u6D58\u6D5B\u6D5D\u6D5F\u6D61"+
-        "\u6D62\u6D64\u6D65\u6D67\u6D68\u6D6B\u6D6C\u6D6D"+
-        "\u6D70\u6D71\u6D72\u6D73\u6D75\u6D76\u6D79\u6D7A"+
-        "\u6D7B\u6D7D\u6D7E\u6D7F\u6D80\u6D81\u6D83\u6D84"+
-        "\u6D86\u6D87\u6D8A\u6D8B\u6D8D\u6D8F\u6D90\u6D92"+
-        "\u6D96\u6D97\u6D98\u6D99\u6D9A\u6D9C\u6DA2\u6DA5"+
-        "\u6DAC\u6DAD\u6DB0\u6DB1\u6DB3\u6DB4\u6DB6\u6DB7"+
-        "\u6DB9\u6DBA\u6DBB\u6DBC\u6DBD\u6DBE\u6DC1\u6DC2"+
-        "\u6DC3\u6DC8\u6DC9\u6DCA\u6DCD\u6DCE\u6DCF\u6DD0"+
-        "\u6DD2\u6DD3\u6DD4\u6DD5\u6DD7\u6DDA\u6DDB\u6DDC"+
-        "\u6DDF\u6DE2\u6DE3\u6DE5\u6DE7\u6DE8\u6DE9\u6DEA"+
-        "\u6DED\u6DEF\u6DF0\u6DF2\u6DF4\u6DF5\u6DF6\u6DF8"+
-        "\u6DFA\u6DFD\u6DFE\u6DFF\u6E00\u6E01\u6E02\u6E03"+
-        "\u6E04\u6E06\u6E07\u6E08\u6E09\u6E0B\u6E0F\u6E12"+
-        "\u6E13\u6E15\u6E18\u6E19\u6E1B\u6E1C\u6E1E\u6E1F"+
-        "\u6E22\u6E26\u6E27\u6E28\u6E2A\u6E2C\u6E2E\u6E30"+
-        "\u6E31\u6E33\u6E35\uFFFD\u6E36\u6E37\u6E39\u6E3B"+
-        "\u6E3C\u6E3D\u6E3E\u6E3F\u6E40\u6E41\u6E42\u6E45"+
-        "\u6E46\u6E47\u6E48\u6E49\u6E4A\u6E4B\u6E4C\u6E4F"+
-        "\u6E50\u6E51\u6E52\u6E55\u6E57\u6E59\u6E5A\u6E5C"+
-        "\u6E5D\u6E5E\u6E60\u6E61\u6E62\u6E63\u6E64\u6E65"+
-        "\u6E66\u6E67\u6E68\u6E69\u6E6A\u6E6C\u6E6D\u6E6F"+
-        "\u6E70\u6E71\u6E72\u6E73\u6E74\u6E75\u6E76\u6E77"+
-        "\u6E78\u6E79\u6E7A\u6E7B\u6E7C\u6E7D\u6E80\u6E81"+
-        "\u6E82\u6E84\u6E87\u6E88\u6E8A\u6E8B\u6E8C\u6E8D"+
-        "\u6E8E\u6E91\u6E92\u6E93\u6E94\u6E95\u6E96\u6E97"+
-        "\u6E99\u6E9A\u6E9B\u6E9D\u6E9E\u6EA0\u6EA1\u6EA3"+
-        "\u6EA4\u6EA6\u6EA8\u6EA9\u6EAB\u6EAC\u6EAD\u6EAE"+
-        "\u6EB0\u6EB3\u6EB5\u6EB8\u6EB9\u6EBC\u6EBE\u6EBF"+
-        "\u6EC0\u6EC3\u6EC4\u6EC5\u6EC6\u6EC8\u6EC9\u6ECA"+
-        "\u6ECC\u6ECD\u6ECE\u6ED0\u6ED2\u6ED6\u6ED8\u6ED9"+
-        "\u6EDB\u6EDC\u6EDD\u6EE3\u6EE7\u6EEA\u6EEB\u6EEC"+
-        "\u6EED\u6EEE\u6EEF\u6EF0\u6EF1\u6EF2\u6EF3\u6EF5"+
-        "\u6EF6\u6EF7\u6EF8\u6EFA\u6EFB\u6EFC\u6EFD\u6EFE"+
-        "\u6EFF\u6F00\u6F01\u6F03\u6F04\u6F05\u6F07\u6F08"+
-        "\u6F0A\u6F0B\u6F0C\u6F0D\u6F0E\u6F10\u6F11\u6F12"+
-        "\u6F16\u6F17\u6F18\u6F19\u6F1A\u6F1B\u6F1C\u6F1D"+
-        "\u6F1E\u6F1F\u6F21\u6F22\u6F23\u6F25\u6F26\u6F27"+
-        "\u6F28\u6F2C\u6F2E\u6F30\u6F32\u6F34\u6F35\u6F37"+
-        "\u6F38\u6F39\u6F3A\u6F3B\u6F3C\u6F3D\u6F3F\u6F40"+
-        "\u6F41\u6F42\uFFFD\u6F43\u6F44\u6F45\u6F48\u6F49"+
-        "\u6F4A\u6F4C\u6F4E\u6F4F\u6F50\u6F51\u6F52\u6F53"+
-        "\u6F54\u6F55\u6F56\u6F57\u6F59\u6F5A\u6F5B\u6F5D"+
-        "\u6F5F\u6F60\u6F61\u6F63\u6F64\u6F65\u6F67\u6F68"+
-        "\u6F69\u6F6A\u6F6B\u6F6C\u6F6F\u6F70\u6F71\u6F73"+
-        "\u6F75\u6F76\u6F77\u6F79\u6F7B\u6F7D\u6F7E\u6F7F"+
-        "\u6F80\u6F81\u6F82\u6F83\u6F85\u6F86\u6F87\u6F8A"+
-        "\u6F8B\u6F8F\u6F90\u6F91\u6F92\u6F93\u6F94\u6F95"+
-        "\u6F96\u6F97\u6F98\u6F99\u6F9A\u6F9B\u6F9D\u6F9E"+
-        "\u6F9F\u6FA0\u6FA2\u6FA3\u6FA4\u6FA5\u6FA6\u6FA8"+
-        "\u6FA9\u6FAA\u6FAB\u6FAC\u6FAD\u6FAE\u6FAF\u6FB0"+
-        "\u6FB1\u6FB2\u6FB4\u6FB5\u6FB7\u6FB8\u6FBA\u6FBB"+
-        "\u6FBC\u6FBD\u6FBE\u6FBF\u6FC1\u6FC3\u6FC4\u6FC5"+
-        "\u6FC6\u6FC7\u6FC8\u6FCA\u6FCB\u6FCC\u6FCD\u6FCE"+
-        "\u6FCF\u6FD0\u6FD3\u6FD4\u6FD5\u6FD6\u6FD7\u6FD8"+
-        "\u6FD9\u6FDA\u6FDB\u6FDC\u6FDD\u6FDF\u6FE2\u6FE3"+
-        "\u6FE4\u6FE5\u6FE6\u6FE7\u6FE8\u6FE9\u6FEA\u6FEB"+
-        "\u6FEC\u6FED\u6FF0\u6FF1\u6FF2\u6FF3\u6FF4\u6FF5"+
-        "\u6FF6\u6FF7\u6FF8\u6FF9\u6FFA\u6FFB\u6FFC\u6FFD"+
-        "\u6FFE\u6FFF\u7000\u7001\u7002\u7003\u7004\u7005"+
-        "\u7006\u7007\u7008\u7009\u700A\u700B\u700C\u700D"+
-        "\u700E\u700F\u7010\u7012\u7013\u7014\u7015\u7016"+
-        "\u7017\u7018\u7019\u701C\u701D\u701E\u701F\u7020"+
-        "\u7021\u7022\u7024\u7025\u7026\u7027\u7028\u7029"+
-        "\u702A\uFFFD\u702B\u702C\u702D\u702E\u702F\u7030"+
-        "\u7031\u7032\u7033\u7034\u7036\u7037\u7038\u703A"+
-        "\u703B\u703C\u703D\u703E\u703F\u7040\u7041\u7042"+
-        "\u7043\u7044\u7045\u7046\u7047\u7048\u7049\u704A"+
-        "\u704B\u704D\u704E\u7050\u7051\u7052\u7053\u7054"+
-        "\u7055\u7056\u7057\u7058\u7059\u705A\u705B\u705C"+
-        "\u705D\u705F\u7060\u7061\u7062\u7063\u7064\u7065"+
-        "\u7066\u7067\u7068\u7069\u706A\u706E\u7071\u7072"+
-        "\u7073\u7074\u7077\u7079\u707A\u707B\u707D\u7081"+
-        "\u7082\u7083\u7084\u7086\u7087\u7088\u708B\u708C"+
-        "\u708D\u708F\u7090\u7091\u7093\u7097\u7098\u709A"+
-        "\u709B\u709E\u709F\u70A0\u70A1\u70A2\u70A3\u70A4"+
-        "\u70A5\u70A6\u70A7\u70A8\u70A9\u70AA\u70B0\u70B2"+
-        "\u70B4\u70B5\u70B6\u70BA\u70BE\u70BF\u70C4\u70C5"+
-        "\u70C6\u70C7\u70C9\u70CB\u70CC\u70CD\u70CE\u70CF"+
-        "\u70D0\u70D1\u70D2\u70D3\u70D4\u70D5\u70D6\u70D7"+
-        "\u70DA\u70DC\u70DD\u70DE\u70E0\u70E1\u70E2\u70E3"+
-        "\u70E5\u70EA\u70EE\u70F0\u70F1\u70F2\u70F3\u70F4"+
-        "\u70F5\u70F6\u70F8\u70FA\u70FB\u70FC\u70FE\u70FF"+
-        "\u7100\u7101\u7102\u7103\u7104\u7105\u7106\u7107"+
-        "\u7108\u710B\u710C\u710D\u710E\u710F\u7111\u7112"+
-        "\u7114\u7117\u711B\u711C\u711D\u711E\u711F\u7120"+
-        "\u7121\u7122\u7123\u7124\u7125\u7127\u7128\u7129"+
-        "\u712A\u712B\u712C\u712D\u712E\u7132\u7133\u7134"+
-        "\uFFFD\u7135\u7137\u7138\u7139\u713A\u713B\u713C"+
-        "\u713D\u713E\u713F\u7140\u7141\u7142\u7143\u7144"+
-        "\u7146\u7147\u7148\u7149\u714B\u714D\u714F\u7150"+
-        "\u7151\u7152\u7153\u7154\u7155\u7156\u7157\u7158"+
-        "\u7159\u715A\u715B\u715D\u715F\u7160\u7161\u7162"+
-        "\u7163\u7165\u7169\u716A\u716B\u716C\u716D\u716F"+
-        "\u7170\u7171\u7174\u7175\u7176\u7177\u7179\u717B"+
-        "\u717C\u717E\u717F\u7180\u7181\u7182\u7183\u7185"+
-        "\u7186\u7187\u7188\u7189\u718B\u718C\u718D\u718E"+
-        "\u7190\u7191\u7192\u7193\u7195\u7196\u7197\u719A"+
-        "\u719B\u719C\u719D\u719E\u71A1\u71A2\u71A3\u71A4"+
-        "\u71A5\u71A6\u71A7\u71A9\u71AA\u71AB\u71AD\u71AE"+
-        "\u71AF\u71B0\u71B1\u71B2\u71B4\u71B6\u71B7\u71B8"+
-        "\u71BA\u71BB\u71BC\u71BD\u71BE\u71BF\u71C0\u71C1"+
-        "\u71C2\u71C4\u71C5\u71C6\u71C7\u71C8\u71C9\u71CA"+
-        "\u71CB\u71CC\u71CD\u71CF\u71D0\u71D1\u71D2\u71D3";
-
-    private final static String innerIndex2=
-        "\u71D6\u71D7\u71D8\u71D9\u71DA\u71DB\u71DC\u71DD"+
-        "\u71DE\u71DF\u71E1\u71E2\u71E3\u71E4\u71E6\u71E8"+
-        "\u71E9\u71EA\u71EB\u71EC\u71ED\u71EF\u71F0\u71F1"+
-        "\u71F2\u71F3\u71F4\u71F5\u71F6\u71F7\u71F8\u71FA"+
-        "\u71FB\u71FC\u71FD\u71FE\u71FF\u7200\u7201\u7202"+
-        "\u7203\u7204\u7205\u7207\u7208\u7209\u720A\u720B"+
-        "\u720C\u720D\u720E\u720F\u7210\u7211\u7212\u7213"+
-        "\u7214\u7215\u7216\u7217\u7218\u7219\u721A\uFFFD"+
-        "\u721B\u721C\u721E\u721F\u7220\u7221\u7222\u7223"+
-        "\u7224\u7225\u7226\u7227\u7229\u722B\u722D\u722E"+
-        "\u722F\u7232\u7233\u7234\u723A\u723C\u723E\u7240"+
-        "\u7241\u7242\u7243\u7244\u7245\u7246\u7249\u724A"+
-        "\u724B\u724E\u724F\u7250\u7251\u7253\u7254\u7255"+
-        "\u7257\u7258\u725A\u725C\u725E\u7260\u7263\u7264"+
-        "\u7265\u7268\u726A\u726B\u726C\u726D\u7270\u7271"+
-        "\u7273\u7274\u7276\u7277\u7278\u727B\u727C\u727D"+
-        "\u7282\u7283\u7285\u7286\u7287\u7288\u7289\u728C"+
-        "\u728E\u7290\u7291\u7293\u7294\u7295\u7296\u7297"+
-        "\u7298\u7299\u729A\u729B\u729C\u729D\u729E\u72A0"+
-        "\u72A1\u72A2\u72A3\u72A4\u72A5\u72A6\u72A7\u72A8"+
-        "\u72A9\u72AA\u72AB\u72AE\u72B1\u72B2\u72B3\u72B5"+
-        "\u72BA\u72BB\u72BC\u72BD\u72BE\u72BF\u72C0\u72C5"+
-        "\u72C6\u72C7\u72C9\u72CA\u72CB\u72CC\u72CF\u72D1"+
-        "\u72D3\u72D4\u72D5\u72D6\u72D8\u72DA\u72DB\uE4C6"+
-        "\uE4C7\uE4C8\uE4C9\uE4CA\uE4CB\uE4CC\uE4CD\uE4CE"+
-        "\uE4CF\uE4D0\uE4D1\uE4D2\uE4D3\uE4D4\uE4D5\uE4D6"+
-        "\uE4D7\uE4D8\uE4D9\uE4DA\uE4DB\uE4DC\uE4DD\uE4DE"+
-        "\uE4DF\uE4E0\uE4E1\uE4E2\uE4E3\uE4E4\uE4E5\uE4E6"+
-        "\uE4E7\uE4E8\uE4E9\uE4EA\uE4EB\uE4EC\uE4ED\uE4EE"+
-        "\uE4EF\uE4F0\uE4F1\uE4F2\uE4F3\uE4F4\uE4F5\uE4F6"+
-        "\uE4F7\uE4F8\uE4F9\uE4FA\uE4FB\uE4FC\uE4FD\uE4FE"+
-        "\uE4FF\uE500\uE501\uE502\uE503\uE504\uFFFD\uE505"+
-        "\uE506\uE507\uE508\uE509\uE50A\uE50B\uE50C\uE50D"+
-        "\uE50E\uE50F\uE510\uE511\uE512\uE513\uE514\uE515"+
-        "\uE516\uE517\uE518\uE519\uE51A\uE51B\uE51C\uE51D"+
-        "\uE51E\uE51F\uE520\uE521\uE522\uE523\uE524\uE525"+
-        "\u3000\u3001\u3002\u00B7\u02C9\u02C7\u00A8\u3003"+
-        "\u3005\u2014\uFF5E\u2016\u2026\u2018\u2019\u201C"+
-        "\u201D\u3014\u3015\u3008\u3009\u300A\u300B\u300C"+
-        "\u300D\u300E\u300F\u3016\u3017\u3010\u3011\u00B1"+
-        "\u00D7\u00F7\u2236\u2227\u2228\u2211\u220F\u222A"+
-        "\u2229\u2208\u2237\u221A\u22A5\u2225\u2220\u2312"+
-        "\u2299\u222B\u222E\u2261\u224C\u2248\u223D\u221D"+
-        "\u2260\u226E\u226F\u2264\u2265\u221E\u2235\u2234"+
-        "\u2642\u2640\u00B0\u2032\u2033\u2103\uFF04\u00A4"+
-        "\uFFE0\uFFE1\u2030\u00A7\u2116\u2606\u2605\u25CB"+
-        "\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2"+
-        "\u203B\u2192\u2190\u2191\u2193\u3013\uE526\uE527"+
-        "\uE528\uE529\uE52A\uE52B\uE52C\uE52D\uE52E\uE52F"+
-        "\uE530\uE531\uE532\uE533\uE534\uE535\uE536\uE537"+
-        "\uE538\uE539\uE53A\uE53B\uE53C\uE53D\uE53E\uE53F"+
-        "\uE540\uE541\uE542\uE543\uE544\uE545\uE546\uE547"+
-        "\uE548\uE549\uE54A\uE54B\uE54C\uE54D\uE54E\uE54F"+
-        "\uE550\uE551\uE552\uE553\uE554\uE555\uE556\uE557"+
-        "\uE558\uE559\uE55A\uE55B\uE55C\uE55D\uE55E\uE55F"+
-        "\uE560\uE561\uE562\uE563\uE564\uFFFD\uE565\uE566"+
-        "\uE567\uE568\uE569\uE56A\uE56B\uE56C\uE56D\uE56E"+
-        "\uE56F\uE570\uE571\uE572\uE573\uE574\uE575\uE576"+
-        "\uE577\uE578\uE579\uE57A\uE57B\uE57C\uE57D\uE57E"+
-        "\uE57F\uE580\uE581\uE582\uE583\uE584\uE585\u2170"+
-        "\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178"+
-        "\u2179\uE766\uE767\uE768\uE769\uE76A\uE76B\u2488"+
-        "\u2489\u248A\u248B\u248C\u248D\u248E\u248F\u2490"+
-        "\u2491\u2492\u2493\u2494\u2495\u2496\u2497\u2498"+
-        "\u2499\u249A\u249B\u2474\u2475\u2476\u2477\u2478"+
-        "\u2479\u247A\u247B\u247C\u247D\u247E\u247F\u2480"+
-        "\u2481\u2482\u2483\u2484\u2485\u2486\u2487\u2460"+
-        "\u2461\u2462\u2463\u2464\u2465\u2466\u2467\u2468"+
-        "\u2469\u20AC\uE76D\u3220\u3221\u3222\u3223\u3224"+
-        "\u3225\u3226\u3227\u3228\u3229\uE76E\uE76F\u2160"+
-        "\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168"+
-        "\u2169\u216A\u216B\uE770\uE771\uE586\uE587\uE588"+
-        "\uE589\uE58A\uE58B\uE58C\uE58D\uE58E\uE58F\uE590"+
-        "\uE591\uE592\uE593\uE594\uE595\uE596\uE597\uE598"+
-        "\uE599\uE59A\uE59B\uE59C\uE59D\uE59E\uE59F\uE5A0"+
-        "\uE5A1\uE5A2\uE5A3\uE5A4\uE5A5\uE5A6\uE5A7\uE5A8"+
-        "\uE5A9\uE5AA\uE5AB\uE5AC\uE5AD\uE5AE\uE5AF\uE5B0"+
-        "\uE5B1\uE5B2\uE5B3\uE5B4\uE5B5\uE5B6\uE5B7\uE5B8"+
-        "\uE5B9\uE5BA\uE5BB\uE5BC\uE5BD\uE5BE\uE5BF\uE5C0"+
-        "\uE5C1\uE5C2\uE5C3\uE5C4\uFFFD\uE5C5\uE5C6\uE5C7"+
-        "\uE5C8\uE5C9\uE5CA\uE5CB\uE5CC\uE5CD\uE5CE\uE5CF"+
-        "\uE5D0\uE5D1\uE5D2\uE5D3\uE5D4\uE5D5\uE5D6\uE5D7"+
-        "\uE5D8\uE5D9\uE5DA\uE5DB\uE5DC\uE5DD\uE5DE\uE5DF"+
-        "\uE5E0\uE5E1\uE5E2\uE5E3\uE5E4\uE5E5\uFF01\uFF02"+
-        "\uFF03\uFFE5\uFF05\uFF06\uFF07\uFF08\uFF09\uFF0A"+
-        "\uFF0B\uFF0C\uFF0D\uFF0E\uFF0F\uFF10\uFF11\uFF12"+
-        "\uFF13\uFF14\uFF15\uFF16\uFF17\uFF18\uFF19\uFF1A"+
-        "\uFF1B\uFF1C\uFF1D\uFF1E\uFF1F\uFF20\uFF21\uFF22"+
-        "\uFF23\uFF24\uFF25\uFF26\uFF27\uFF28\uFF29\uFF2A"+
-        "\uFF2B\uFF2C\uFF2D\uFF2E\uFF2F\uFF30\uFF31\uFF32"+
-        "\uFF33\uFF34\uFF35\uFF36\uFF37\uFF38\uFF39\uFF3A"+
-        "\uFF3B\uFF3C\uFF3D\uFF3E\uFF3F\uFF40\uFF41\uFF42"+
-        "\uFF43\uFF44\uFF45\uFF46\uFF47\uFF48\uFF49\uFF4A"+
-        "\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F\uFF50\uFF51\uFF52"+
-        "\uFF53\uFF54\uFF55\uFF56\uFF57\uFF58\uFF59\uFF5A"+
-        "\uFF5B\uFF5C\uFF5D\uFFE3\uE5E6\uE5E7\uE5E8\uE5E9"+
-        "\uE5EA\uE5EB\uE5EC\uE5ED\uE5EE\uE5EF\uE5F0\uE5F1"+
-        "\uE5F2\uE5F3\uE5F4\uE5F5\uE5F6\uE5F7\uE5F8\uE5F9"+
-        "\uE5FA\uE5FB\uE5FC\uE5FD\uE5FE\uE5FF\uE600\uE601"+
-        "\uE602\uE603\uE604\uE605\uE606\uE607\uE608\uE609"+
-        "\uE60A\uE60B\uE60C\uE60D\uE60E\uE60F\uE610\uE611"+
-        "\uE612\uE613\uE614\uE615\uE616\uE617\uE618\uE619"+
-        "\uE61A\uE61B\uE61C\uE61D\uE61E\uE61F\uE620\uE621"+
-        "\uE622\uE623\uE624\uFFFD\uE625\uE626\uE627\uE628"+
-        "\uE629\uE62A\uE62B\uE62C\uE62D\uE62E\uE62F\uE630"+
-        "\uE631\uE632\uE633\uE634\uE635\uE636\uE637\uE638"+
-        "\uE639\uE63A\uE63B\uE63C\uE63D\uE63E\uE63F\uE640"+
-        "\uE641\uE642\uE643\uE644\uE645\u3041\u3042\u3043"+
-        "\u3044\u3045\u3046\u3047\u3048\u3049\u304A\u304B"+
-        "\u304C\u304D\u304E\u304F\u3050\u3051\u3052\u3053"+
-        "\u3054\u3055\u3056\u3057\u3058\u3059\u305A\u305B"+
-        "\u305C\u305D\u305E\u305F\u3060\u3061\u3062\u3063"+
-        "\u3064\u3065\u3066\u3067\u3068\u3069\u306A\u306B"+
-        "\u306C\u306D\u306E\u306F\u3070\u3071\u3072\u3073"+
-        "\u3074\u3075\u3076\u3077\u3078\u3079\u307A\u307B"+
-        "\u307C\u307D\u307E\u307F\u3080\u3081\u3082\u3083"+
-        "\u3084\u3085\u3086\u3087\u3088\u3089\u308A\u308B"+
-        "\u308C\u308D\u308E\u308F\u3090\u3091\u3092\u3093"+
-        "\uE772\uE773\uE774\uE775\uE776\uE777\uE778\uE779"+
-        "\uE77A\uE77B\uE77C\uE646\uE647\uE648\uE649\uE64A"+
-        "\uE64B\uE64C\uE64D\uE64E\uE64F\uE650\uE651\uE652"+
-        "\uE653\uE654\uE655\uE656\uE657\uE658\uE659\uE65A"+
-        "\uE65B\uE65C\uE65D\uE65E\uE65F\uE660\uE661\uE662"+
-        "\uE663\uE664\uE665\uE666\uE667\uE668\uE669\uE66A"+
-        "\uE66B\uE66C\uE66D\uE66E\uE66F\uE670\uE671\uE672"+
-        "\uE673\uE674\uE675\uE676\uE677\uE678\uE679\uE67A"+
-        "\uE67B\uE67C\uE67D\uE67E\uE67F\uE680\uE681\uE682"+
-        "\uE683\uE684\uFFFD\uE685\uE686\uE687\uE688\uE689"+
-        "\uE68A\uE68B\uE68C\uE68D\uE68E\uE68F\uE690\uE691"+
-        "\uE692\uE693\uE694\uE695\uE696\uE697\uE698\uE699"+
-        "\uE69A\uE69B\uE69C\uE69D\uE69E\uE69F\uE6A0\uE6A1"+
-        "\uE6A2\uE6A3\uE6A4\uE6A5\u30A1\u30A2\u30A3\u30A4"+
-        "\u30A5\u30A6\u30A7\u30A8\u30A9\u30AA\u30AB\u30AC"+
-        "\u30AD\u30AE\u30AF\u30B0\u30B1\u30B2\u30B3\u30B4"+
-        "\u30B5\u30B6\u30B7\u30B8\u30B9\u30BA\u30BB\u30BC"+
-        "\u30BD\u30BE\u30BF\u30C0\u30C1\u30C2\u30C3\u30C4"+
-        "\u30C5\u30C6\u30C7\u30C8\u30C9\u30CA\u30CB\u30CC"+
-        "\u30CD\u30CE\u30CF\u30D0\u30D1\u30D2\u30D3\u30D4"+
-        "\u30D5\u30D6\u30D7\u30D8\u30D9\u30DA\u30DB\u30DC"+
-        "\u30DD\u30DE\u30DF\u30E0\u30E1\u30E2\u30E3\u30E4"+
-        "\u30E5\u30E6\u30E7\u30E8\u30E9\u30EA\u30EB\u30EC"+
-        "\u30ED\u30EE\u30EF\u30F0\u30F1\u30F2\u30F3\u30F4"+
-        "\u30F5\u30F6\uE77D\uE77E\uE77F\uE780\uE781\uE782"+
-        "\uE783\uE784\uE6A6\uE6A7\uE6A8\uE6A9\uE6AA\uE6AB"+
-        "\uE6AC\uE6AD\uE6AE\uE6AF\uE6B0\uE6B1\uE6B2\uE6B3"+
-        "\uE6B4\uE6B5\uE6B6\uE6B7\uE6B8\uE6B9\uE6BA\uE6BB"+
-        "\uE6BC\uE6BD\uE6BE\uE6BF\uE6C0\uE6C1\uE6C2\uE6C3"+
-        "\uE6C4\uE6C5\uE6C6\uE6C7\uE6C8\uE6C9\uE6CA\uE6CB"+
-        "\uE6CC\uE6CD\uE6CE\uE6CF\uE6D0\uE6D1\uE6D2\uE6D3"+
-        "\uE6D4\uE6D5\uE6D6\uE6D7\uE6D8\uE6D9\uE6DA\uE6DB"+
-        "\uE6DC\uE6DD\uE6DE\uE6DF\uE6E0\uE6E1\uE6E2\uE6E3"+
-        "\uE6E4\uFFFD\uE6E5\uE6E6\uE6E7\uE6E8\uE6E9\uE6EA"+
-        "\uE6EB\uE6EC\uE6ED\uE6EE\uE6EF\uE6F0\uE6F1\uE6F2"+
-        "\uE6F3\uE6F4\uE6F5\uE6F6\uE6F7\uE6F8\uE6F9\uE6FA"+
-        "\uE6FB\uE6FC\uE6FD\uE6FE\uE6FF\uE700\uE701\uE702"+
-        "\uE703\uE704\uE705\u0391\u0392\u0393\u0394\u0395"+
-        "\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D"+
-        "\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6"+
-        "\u03A7\u03A8\u03A9\uE785\uE786\uE787\uE788\uE789"+
-        "\uE78A\uE78B\uE78C\u03B1\u03B2\u03B3\u03B4\u03B5"+
-        "\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD"+
-        "\u03BE\u03BF\u03C0\u03C1\u03C3\u03C4\u03C5\u03C6"+
-        "\u03C7\u03C8\u03C9\uE78D\uE78E\uE78F\uE790\uE791"+
-        "\uE792\uE793\uFE35\uFE36\uFE39\uFE3A\uFE3F\uFE40"+
-        "\uFE3D\uFE3E\uFE41\uFE42\uFE43\uFE44\uE794\uE795"+
-        "\uFE3B\uFE3C\uFE37\uFE38\uFE31\uE796\uFE33\uFE34"+
-        "\uE797\uE798\uE799\uE79A\uE79B\uE79C\uE79D\uE79E"+
-        "\uE79F\uE706\uE707\uE708\uE709\uE70A\uE70B\uE70C"+
-        "\uE70D\uE70E\uE70F\uE710\uE711\uE712\uE713\uE714"+
-        "\uE715\uE716\uE717\uE718\uE719\uE71A\uE71B\uE71C"+
-        "\uE71D\uE71E\uE71F\uE720\uE721\uE722\uE723\uE724"+
-        "\uE725\uE726\uE727\uE728\uE729\uE72A\uE72B\uE72C"+
-        "\uE72D\uE72E\uE72F\uE730\uE731\uE732\uE733\uE734"+
-        "\uE735\uE736\uE737\uE738\uE739\uE73A\uE73B\uE73C"+
-        "\uE73D\uE73E\uE73F\uE740\uE741\uE742\uE743\uE744"+
-        "\uFFFD\uE745\uE746\uE747\uE748\uE749\uE74A\uE74B"+
-        "\uE74C\uE74D\uE74E\uE74F\uE750\uE751\uE752\uE753"+
-        "\uE754\uE755\uE756\uE757\uE758\uE759\uE75A\uE75B"+
-        "\uE75C\uE75D\uE75E\uE75F\uE760\uE761\uE762\uE763"+
-        "\uE764\uE765\u0410\u0411\u0412\u0413\u0414\u0415"+
-        "\u0401\u0416\u0417\u0418\u0419\u041A\u041B\u041C"+
-        "\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424"+
-        "\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C"+
-        "\u042D\u042E\u042F\uE7A0\uE7A1\uE7A2\uE7A3\uE7A4"+
-        "\uE7A5\uE7A6\uE7A7\uE7A8\uE7A9\uE7AA\uE7AB\uE7AC"+
-        "\uE7AD\uE7AE\u0430\u0431\u0432\u0433\u0434\u0435"+
-        "\u0451\u0436\u0437\u0438\u0439\u043A\u043B\u043C"+
-        "\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444"+
-        "\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C"+
-        "\u044D\u044E\u044F\uE7AF\uE7B0\uE7B1\uE7B2\uE7B3"+
-        "\uE7B4\uE7B5\uE7B6\uE7B7\uE7B8\uE7B9\uE7BA\uE7BB"+
-        "\u02CA\u02CB\u02D9\u2013\u2015\u2025\u2035\u2105"+
-        "\u2109\u2196\u2197\u2198\u2199\u2215\u221F\u2223"+
-        "\u2252\u2266\u2267\u22BF\u2550\u2551\u2552\u2553"+
-        "\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B"+
-        "\u255C\u255D\u255E\u255F\u2560\u2561\u2562\u2563"+
-        "\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B"+
-        "\u256C\u256D\u256E\u256F\u2570\u2571\u2572\u2573"+
-        "\u2581\u2582\u2583\u2584\u2585\u2586\u2587\uFFFD"+
-        "\u2588\u2589\u258A\u258B\u258C\u258D\u258E\u258F"+
-        "\u2593\u2594\u2595\u25BC\u25BD\u25E2\u25E3\u25E4"+
-        "\u25E5\u2609\u2295\u3012\u301D\u301E\uE7BC\uE7BD"+
-        "\uE7BE\uE7BF\uE7C0\uE7C1\uE7C2\uE7C3\uE7C4\uE7C5"+
-        "\uE7C6\u0101\u00E1\u01CE\u00E0\u0113\u00E9\u011B"+
-        "\u00E8\u012B\u00ED\u01D0\u00EC\u014D\u00F3\u01D2"+
-        "\u00F2\u016B\u00FA\u01D4\u00F9\u01D6\u01D8\u01DA"+
-        "\u01DC\u00FC\u00EA\u0251\uE7C7\u0144\u0148\u01F9"+
-        "\u0261\uE7C9\uE7CA\uE7CB\uE7CC\u3105\u3106\u3107"+
-        "\u3108\u3109\u310A\u310B\u310C\u310D\u310E\u310F"+
-        "\u3110\u3111\u3112\u3113\u3114\u3115\u3116\u3117"+
-        "\u3118\u3119\u311A\u311B\u311C\u311D\u311E\u311F"+
-        "\u3120\u3121\u3122\u3123\u3124\u3125\u3126\u3127"+
-        "\u3128\u3129\uE7CD\uE7CE\uE7CF\uE7D0\uE7D1\uE7D2"+
-        "\uE7D3\uE7D4\uE7D5\uE7D6\uE7D7\uE7D8\uE7D9\uE7DA"+
-        "\uE7DB\uE7DC\uE7DD\uE7DE\uE7DF\uE7E0\uE7E1\u3021"+
-        "\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029"+
-        "\u32A3\u338E\u338F\u339C\u339D\u339E\u33A1\u33C4"+
-        "\u33CE\u33D1\u33D2\u33D5\uFE30\uFFE2\uFFE4\uE7E2"+
-        "\u2121\u3231\uE7E3\u2010\uE7E4\uE7E5\uE7E6\u30FC"+
-        "\u309B\u309C\u30FD\u30FE\u3006\u309D\u309E\uFE49"+
-        "\uFE4A\uFE4B\uFE4C\uFE4D\uFE4E\uFE4F\uFE50\uFE51"+
-        "\uFE52\uFE54\uFE55\uFE56\uFE57\uFE59\uFE5A\uFE5B"+
-        "\uFE5C\uFE5D\uFE5E\uFE5F\uFE60\uFE61\uFFFD\uFE62"+
-        "\uFE63\uFE64\uFE65\uFE66\uFE68\uFE69\uFE6A\uFE6B"+
-        "\u303E\u2FF0\u2FF1\u2FF2\u2FF3\u2FF4\u2FF5\u2FF6"+
-        "\u2FF7\u2FF8\u2FF9\u2FFA\u2FFB\u3007\uE7F4\uE7F5"+
-        "\uE7F6\uE7F7\uE7F8\uE7F9\uE7FA\uE7FB\uE7FC\uE7FD"+
-        "\uE7FE\uE7FF\uE800\u2500\u2501\u2502\u2503\u2504"+
-        "\u2505\u2506\u2507\u2508\u2509\u250A\u250B\u250C"+
-        "\u250D\u250E\u250F\u2510\u2511\u2512\u2513\u2514"+
-        "\u2515\u2516\u2517\u2518\u2519\u251A\u251B\u251C"+
-        "\u251D\u251E\u251F\u2520\u2521\u2522\u2523\u2524"+
-        "\u2525\u2526\u2527\u2528\u2529\u252A\u252B\u252C"+
-        "\u252D\u252E\u252F\u2530\u2531\u2532\u2533\u2534"+
-        "\u2535\u2536\u2537\u2538\u2539\u253A\u253B\u253C"+
-        "\u253D\u253E\u253F\u2540\u2541\u2542\u2543\u2544"+
-        "\u2545\u2546\u2547\u2548\u2549\u254A\u254B\uE801"+
-        "\uE802\uE803\uE804\uE805\uE806\uE807\uE808\uE809"+
-        "\uE80A\uE80B\uE80C\uE80D\uE80E\uE80F\u72DC\u72DD"+
-        "\u72DF\u72E2\u72E3\u72E4\u72E5\u72E6\u72E7\u72EA"+
-        "\u72EB\u72F5\u72F6\u72F9\u72FD\u72FE\u72FF\u7300"+
-        "\u7302\u7304\u7305\u7306\u7307\u7308\u7309\u730B"+
-        "\u730C\u730D\u730F\u7310\u7311\u7312\u7314\u7318"+
-        "\u7319\u731A\u731F\u7320\u7323\u7324\u7326\u7327"+
-        "\u7328\u732D\u732F\u7330\u7332\u7333\u7335\u7336"+
-        "\u733A\u733B\u733C\u733D\u7340\u7341\u7342\u7343"+
-        "\u7344\u7345\u7346\u7347\u7348\uFFFD\u7349\u734A"+
-        "\u734B\u734C\u734E\u734F\u7351\u7353\u7354\u7355"+
-        "\u7356\u7358\u7359\u735A\u735B\u735C\u735D\u735E"+
-        "\u735F\u7361\u7362\u7363\u7364\u7365\u7366\u7367"+
-        "\u7368\u7369\u736A\u736B\u736E\u7370\u7371\uE000"+
-        "\uE001\uE002\uE003\uE004\uE005\uE006\uE007\uE008"+
-        "\uE009\uE00A\uE00B\uE00C\uE00D\uE00E\uE00F\uE010"+
-        "\uE011\uE012\uE013\uE014\uE015\uE016\uE017\uE018"+
-        "\uE019\uE01A\uE01B\uE01C\uE01D\uE01E\uE01F\uE020"+
-        "\uE021\uE022\uE023\uE024\uE025\uE026\uE027\uE028"+
-        "\uE029\uE02A\uE02B\uE02C\uE02D\uE02E\uE02F\uE030"+
-        "\uE031\uE032\uE033\uE034\uE035\uE036\uE037\uE038"+
-        "\uE039\uE03A\uE03B\uE03C\uE03D\uE03E\uE03F\uE040"+
-        "\uE041\uE042\uE043\uE044\uE045\uE046\uE047\uE048"+
-        "\uE049\uE04A\uE04B\uE04C\uE04D\uE04E\uE04F\uE050"+
-        "\uE051\uE052\uE053\uE054\uE055\uE056\uE057\uE058"+
-        "\uE059\uE05A\uE05B\uE05C\uE05D\u7372\u7373\u7374"+
-        "\u7375\u7376\u7377\u7378\u7379\u737A\u737B\u737C"+
-        "\u737D\u737F\u7380\u7381\u7382\u7383\u7385\u7386"+
-        "\u7388\u738A\u738C\u738D\u738F\u7390\u7392\u7393"+
-        "\u7394\u7395\u7397\u7398\u7399\u739A\u739C\u739D"+
-        "\u739E\u73A0\u73A1\u73A3\u73A4\u73A5\u73A6\u73A7"+
-        "\u73A8\u73AA\u73AC\u73AD\u73B1\u73B4\u73B5\u73B6"+
-        "\u73B8\u73B9\u73BC\u73BD\u73BE\u73BF\u73C1\u73C3"+
-        "\u73C4\u73C5\u73C6\u73C7\uFFFD\u73CB\u73CC\u73CE"+
-        "\u73D2\u73D3\u73D4\u73D5\u73D6\u73D7\u73D8\u73DA"+
-        "\u73DB\u73DC\u73DD\u73DF\u73E1\u73E2\u73E3\u73E4"+
-        "\u73E6\u73E8\u73EA\u73EB\u73EC\u73EE\u73EF\u73F0"+
-        "\u73F1\u73F3\u73F4\u73F5\u73F6\u73F7\uE05E\uE05F"+
-        "\uE060\uE061\uE062\uE063\uE064\uE065\uE066\uE067"+
-        "\uE068\uE069\uE06A\uE06B\uE06C\uE06D\uE06E\uE06F"+
-        "\uE070\uE071\uE072\uE073\uE074\uE075\uE076\uE077"+
-        "\uE078\uE079\uE07A\uE07B\uE07C\uE07D\uE07E\uE07F"+
-        "\uE080\uE081\uE082\uE083\uE084\uE085\uE086\uE087"+
-        "\uE088\uE089\uE08A\uE08B\uE08C\uE08D\uE08E\uE08F"+
-        "\uE090\uE091\uE092\uE093\uE094\uE095\uE096\uE097"+
-        "\uE098\uE099\uE09A\uE09B\uE09C\uE09D\uE09E\uE09F"+
-        "\uE0A0\uE0A1\uE0A2\uE0A3\uE0A4\uE0A5\uE0A6\uE0A7"+
-        "\uE0A8\uE0A9\uE0AA\uE0AB\uE0AC\uE0AD\uE0AE\uE0AF"+
-        "\uE0B0\uE0B1\uE0B2\uE0B3\uE0B4\uE0B5\uE0B6\uE0B7"+
-        "\uE0B8\uE0B9\uE0BA\uE0BB\u73F8\u73F9\u73FA\u73FB"+
-        "\u73FC\u73FD\u73FE\u73FF\u7400\u7401\u7402\u7404"+
-        "\u7407\u7408\u740B\u740C\u740D\u740E\u7411\u7412"+
-        "\u7413\u7414\u7415\u7416\u7417\u7418\u7419\u741C"+
-        "\u741D\u741E\u741F\u7420\u7421\u7423\u7424\u7427"+
-        "\u7429\u742B\u742D\u742F\u7431\u7432\u7437\u7438"+
-        "\u7439\u743A\u743B\u743D\u743E\u743F\u7440\u7442"+
-        "\u7443\u7444\u7445\u7446\u7447\u7448\u7449\u744A"+
-        "\u744B\u744C\u744D\uFFFD\u744E\u744F\u7450\u7451"+
-        "\u7452\u7453\u7454\u7456\u7458\u745D\u7460\u7461"+
-        "\u7462\u7463\u7464\u7465\u7466\u7467\u7468\u7469"+
-        "\u746A\u746B\u746C\u746E\u746F\u7471\u7472\u7473"+
-        "\u7474\u7475\u7478\u7479\u747A\uE0BC\uE0BD\uE0BE"+
-        "\uE0BF\uE0C0\uE0C1\uE0C2\uE0C3\uE0C4\uE0C5\uE0C6"+
-        "\uE0C7\uE0C8\uE0C9\uE0CA\uE0CB\uE0CC\uE0CD\uE0CE"+
-        "\uE0CF\uE0D0\uE0D1\uE0D2\uE0D3\uE0D4\uE0D5\uE0D6"+
-        "\uE0D7\uE0D8\uE0D9\uE0DA\uE0DB\uE0DC\uE0DD\uE0DE"+
-        "\uE0DF\uE0E0\uE0E1\uE0E2\uE0E3\uE0E4\uE0E5\uE0E6"+
-        "\uE0E7\uE0E8\uE0E9\uE0EA\uE0EB\uE0EC\uE0ED\uE0EE"+
-        "\uE0EF\uE0F0\uE0F1\uE0F2\uE0F3\uE0F4\uE0F5\uE0F6"+
-        "\uE0F7\uE0F8\uE0F9\uE0FA\uE0FB\uE0FC\uE0FD\uE0FE"+
-        "\uE0FF\uE100\uE101\uE102\uE103\uE104\uE105\uE106"+
-        "\uE107\uE108\uE109\uE10A\uE10B\uE10C\uE10D\uE10E"+
-        "\uE10F\uE110\uE111\uE112\uE113\uE114\uE115\uE116"+
-        "\uE117\uE118\uE119\u747B\u747C\u747D\u747F\u7482"+
-        "\u7484\u7485\u7486\u7488\u7489\u748A\u748C\u748D"+
-        "\u748F\u7491\u7492\u7493\u7494\u7495\u7496\u7497"+
-        "\u7498\u7499\u749A\u749B\u749D\u749F\u74A0\u74A1"+
-        "\u74A2\u74A3\u74A4\u74A5\u74A6\u74AA\u74AB\u74AC"+
-        "\u74AD\u74AE\u74AF\u74B0\u74B1\u74B2\u74B3\u74B4"+
-        "\u74B5\u74B6\u74B7\u74B8\u74B9\u74BB\u74BC\u74BD"+
-        "\u74BE\u74BF\u74C0\u74C1\u74C2\u74C3\u74C4\u74C5"+
-        "\u74C6\u74C7\uFFFD\u74C8\u74C9\u74CA\u74CB\u74CC"+
-        "\u74CD\u74CE\u74CF\u74D0\u74D1\u74D3\u74D4\u74D5"+
-        "\u74D6\u74D7\u74D8\u74D9\u74DA\u74DB\u74DD\u74DF"+
-        "\u74E1\u74E5\u74E7\u74E8\u74E9\u74EA\u74EB\u74EC"+
-        "\u74ED\u74F0\u74F1\u74F2\uE11A\uE11B\uE11C\uE11D"+
-        "\uE11E\uE11F\uE120\uE121\uE122\uE123\uE124\uE125"+
-        "\uE126\uE127\uE128\uE129\uE12A\uE12B\uE12C\uE12D"+
-        "\uE12E\uE12F\uE130\uE131\uE132\uE133\uE134\uE135"+
-        "\uE136\uE137\uE138\uE139\uE13A\uE13B\uE13C\uE13D"+
-        "\uE13E\uE13F\uE140\uE141\uE142\uE143\uE144\uE145"+
-        "\uE146\uE147\uE148\uE149\uE14A\uE14B\uE14C\uE14D"+
-        "\uE14E\uE14F\uE150\uE151\uE152\uE153\uE154\uE155"+
-        "\uE156\uE157\uE158\uE159\uE15A\uE15B\uE15C\uE15D"+
-        "\uE15E\uE15F\uE160\uE161\uE162\uE163\uE164\uE165"+
-        "\uE166\uE167\uE168\uE169\uE16A\uE16B\uE16C\uE16D"+
-        "\uE16E\uE16F\uE170\uE171\uE172\uE173\uE174\uE175"+
-        "\uE176\uE177\u74F3\u74F5\u74F8\u74F9\u74FA\u74FB"+
-        "\u74FC\u74FD\u74FE\u7500\u7501\u7502\u7503\u7505"+
-        "\u7506\u7507\u7508\u7509\u750A\u750B\u750C\u750E"+
-        "\u7510\u7512\u7514\u7515\u7516\u7517\u751B\u751D"+
-        "\u751E\u7520\u7521\u7522\u7523\u7524\u7526\u7527"+
-        "\u752A\u752E\u7534\u7536\u7539\u753C\u753D\u753F"+
-        "\u7541\u7542\u7543\u7544\u7546\u7547\u7549\u754A"+
-        "\u754D\u7550\u7551\u7552\u7553\u7555\u7556\u7557"+
-        "\u7558\uFFFD\u755D\u755E\u755F\u7560\u7561\u7562"+
-        "\u7563\u7564\u7567\u7568\u7569\u756B\u756C\u756D"+
-        "\u756E\u756F\u7570\u7571\u7573\u7575\u7576\u7577"+
-        "\u757A\u757B\u757C\u757D\u757E\u7580\u7581\u7582"+
-        "\u7584\u7585\u7587\uE178\uE179\uE17A\uE17B\uE17C"+
-        "\uE17D\uE17E\uE17F\uE180\uE181\uE182\uE183\uE184"+
-        "\uE185\uE186\uE187\uE188\uE189\uE18A\uE18B\uE18C"+
-        "\uE18D\uE18E\uE18F\uE190\uE191\uE192\uE193\uE194"+
-        "\uE195\uE196\uE197\uE198\uE199\uE19A\uE19B\uE19C"+
-        "\uE19D\uE19E\uE19F\uE1A0\uE1A1\uE1A2\uE1A3\uE1A4"+
-        "\uE1A5\uE1A6\uE1A7\uE1A8\uE1A9\uE1AA\uE1AB\uE1AC"+
-        "\uE1AD\uE1AE\uE1AF\uE1B0\uE1B1\uE1B2\uE1B3\uE1B4"+
-        "\uE1B5\uE1B6\uE1B7\uE1B8\uE1B9\uE1BA\uE1BB\uE1BC"+
-        "\uE1BD\uE1BE\uE1BF\uE1C0\uE1C1\uE1C2\uE1C3\uE1C4"+
-        "\uE1C5\uE1C6\uE1C7\uE1C8\uE1C9\uE1CA\uE1CB\uE1CC"+
-        "\uE1CD\uE1CE\uE1CF\uE1D0\uE1D1\uE1D2\uE1D3\uE1D4"+
-        "\uE1D5\u7588\u7589\u758A\u758C\u758D\u758E\u7590"+
-        "\u7593\u7595\u7598\u759B\u759C\u759E\u75A2\u75A6"+
-        "\u75A7\u75A8\u75A9\u75AA\u75AD\u75B6\u75B7\u75BA"+
-        "\u75BB\u75BF\u75C0\u75C1\u75C6\u75CB\u75CC\u75CE"+
-        "\u75CF\u75D0\u75D1\u75D3\u75D7\u75D9\u75DA\u75DC"+
-        "\u75DD\u75DF\u75E0\u75E1\u75E5\u75E9\u75EC\u75ED"+
-        "\u75EE\u75EF\u75F2\u75F3\u75F5\u75F6\u75F7\u75F8"+
-        "\u75FA\u75FB\u75FD\u75FE\u7602\u7604\u7606\u7607"+
-        "\uFFFD\u7608\u7609\u760B\u760D\u760E\u760F\u7611"+
-        "\u7612\u7613\u7614\u7616\u761A\u761C\u761D\u761E"+
-        "\u7621\u7623\u7627\u7628\u762C\u762E\u762F\u7631"+
-        "\u7632\u7636\u7637\u7639\u763A\u763B\u763D\u7641"+
-        "\u7642\u7644\uE1D6\uE1D7\uE1D8\uE1D9\uE1DA\uE1DB"+
-        "\uE1DC\uE1DD\uE1DE\uE1DF\uE1E0\uE1E1\uE1E2\uE1E3"+
-        "\uE1E4\uE1E5\uE1E6\uE1E7\uE1E8\uE1E9\uE1EA\uE1EB"+
-        "\uE1EC\uE1ED\uE1EE\uE1EF\uE1F0\uE1F1\uE1F2\uE1F3"+
-        "\uE1F4\uE1F5\uE1F6\uE1F7\uE1F8\uE1F9\uE1FA\uE1FB"+
-        "\uE1FC\uE1FD\uE1FE\uE1FF\uE200\uE201\uE202\uE203"+
-        "\uE204\uE205\uE206\uE207\uE208\uE209\uE20A\uE20B"+
-        "\uE20C\uE20D\uE20E\uE20F\uE210\uE211\uE212\uE213"+
-        "\uE214\uE215\uE216\uE217\uE218\uE219\uE21A\uE21B"+
-        "\uE21C\uE21D\uE21E\uE21F\uE220\uE221\uE222\uE223"+
-        "\uE224\uE225\uE226\uE227\uE228\uE229\uE22A\uE22B"+
-        "\uE22C\uE22D\uE22E\uE22F\uE230\uE231\uE232\uE233";
-
-    private final static String innerIndex3=
-        "\u7645\u7646\u7647\u7648\u7649\u764A\u764B\u764E"+
-        "\u764F\u7650\u7651\u7652\u7653\u7655\u7657\u7658"+
-        "\u7659\u765A\u765B\u765D\u765F\u7660\u7661\u7662"+
-        "\u7664\u7665\u7666\u7667\u7668\u7669\u766A\u766C"+
-        "\u766D\u766E\u7670\u7671\u7672\u7673\u7674\u7675"+
-        "\u7676\u7677\u7679\u767A\u767C\u767F\u7680\u7681"+
-        "\u7683\u7685\u7689\u768A\u768C\u768D\u768F\u7690"+
-        "\u7692\u7694\u7695\u7697\u7698\u769A\u769B\uFFFD"+
-        "\u769C\u769D\u769E\u769F\u76A0\u76A1\u76A2\u76A3"+
-        "\u76A5\u76A6\u76A7\u76A8\u76A9\u76AA\u76AB\u76AC"+
-        "\u76AD\u76AF\u76B0\u76B3\u76B5\u76B6\u76B7\u76B8"+
-        "\u76B9\u76BA\u76BB\u76BC\u76BD\u76BE\u76C0\u76C1"+
-        "\u76C3\u554A\u963F\u57C3\u6328\u54CE\u5509\u54C0"+
-        "\u7691\u764C\u853C\u77EE\u827E\u788D\u7231\u9698"+
-        "\u978D\u6C28\u5B89\u4FFA\u6309\u6697\u5CB8\u80FA"+
-        "\u6848\u80AE\u6602\u76CE\u51F9\u6556\u71AC\u7FF1"+
-        "\u8884\u50B2\u5965\u61CA\u6FB3\u82AD\u634C\u6252"+
-        "\u53ED\u5427\u7B06\u516B\u75A4\u5DF4\u62D4\u8DCB"+
-        "\u9776\u628A\u8019\u575D\u9738\u7F62\u7238\u767D"+
-        "\u67CF\u767E\u6446\u4F70\u8D25\u62DC\u7A17\u6591"+
-        "\u73ED\u642C\u6273\u822C\u9881\u677F\u7248\u626E"+
-        "\u62CC\u4F34\u74E3\u534A\u529E\u7ECA\u90A6\u5E2E"+
-        "\u6886\u699C\u8180\u7ED1\u68D2\u78C5\u868C\u9551"+
-        "\u508D\u8C24\u82DE\u80DE\u5305\u8912\u5265\u76C4"+
-        "\u76C7\u76C9\u76CB\u76CC\u76D3\u76D5\u76D9\u76DA"+
-        "\u76DC\u76DD\u76DE\u76E0\u76E1\u76E2\u76E3\u76E4"+
-        "\u76E6\u76E7\u76E8\u76E9\u76EA\u76EB\u76EC\u76ED"+
-        "\u76F0\u76F3\u76F5\u76F6\u76F7\u76FA\u76FB\u76FD"+
-        "\u76FF\u7700\u7702\u7703\u7705\u7706\u770A\u770C"+
-        "\u770E\u770F\u7710\u7711\u7712\u7713\u7714\u7715"+
-        "\u7716\u7717\u7718\u771B\u771C\u771D\u771E\u7721"+
-        "\u7723\u7724\u7725\u7727\u772A\u772B\uFFFD\u772C"+
-        "\u772E\u7730\u7731\u7732\u7733\u7734\u7739\u773B"+
-        "\u773D\u773E\u773F\u7742\u7744\u7745\u7746\u7748"+
-        "\u7749\u774A\u774B\u774C\u774D\u774E\u774F\u7752"+
-        "\u7753\u7754\u7755\u7756\u7757\u7758\u7759\u775C"+
-        "\u8584\u96F9\u4FDD\u5821\u9971\u5B9D\u62B1\u62A5"+
-        "\u66B4\u8C79\u9C8D\u7206\u676F\u7891\u60B2\u5351"+
-        "\u5317\u8F88\u80CC\u8D1D\u94A1\u500D\u72C8\u5907"+
-        "\u60EB\u7119\u88AB\u5954\u82EF\u672C\u7B28\u5D29"+
-        "\u7EF7\u752D\u6CF5\u8E66\u8FF8\u903C\u9F3B\u6BD4"+
-        "\u9119\u7B14\u5F7C\u78A7\u84D6\u853D\u6BD5\u6BD9"+
-        "\u6BD6\u5E01\u5E87\u75F9\u95ED\u655D\u5F0A\u5FC5"+
-        "\u8F9F\u58C1\u81C2\u907F\u965B\u97AD\u8FB9\u7F16"+
-        "\u8D2C\u6241\u4FBF\u53D8\u535E\u8FA8\u8FA9\u8FAB"+
-        "\u904D\u6807\u5F6A\u8198\u8868\u9CD6\u618B\u522B"+
-        "\u762A\u5F6C\u658C\u6FD2\u6EE8\u5BBE\u6448\u5175"+
-        "\u51B0\u67C4\u4E19\u79C9\u997C\u70B3\u775D\u775E"+
-        "\u775F\u7760\u7764\u7767\u7769\u776A\u776D\u776E"+
-        "\u776F\u7770\u7771\u7772\u7773\u7774\u7775\u7776"+
-        "\u7777\u7778\u777A\u777B\u777C\u7781\u7782\u7783"+
-        "\u7786\u7787\u7788\u7789\u778A\u778B\u778F\u7790"+
-        "\u7793\u7794\u7795\u7796\u7797\u7798\u7799\u779A"+
-        "\u779B\u779C\u779D\u779E\u77A1\u77A3\u77A4\u77A6"+
-        "\u77A8\u77AB\u77AD\u77AE\u77AF\u77B1\u77B2\u77B4"+
-        "\u77B6\u77B7\u77B8\u77B9\u77BA\uFFFD\u77BC\u77BE"+
-        "\u77C0\u77C1\u77C2\u77C3\u77C4\u77C5\u77C6\u77C7"+
-        "\u77C8\u77C9\u77CA\u77CB\u77CC\u77CE\u77CF\u77D0"+
-        "\u77D1\u77D2\u77D3\u77D4\u77D5\u77D6\u77D8\u77D9"+
-        "\u77DA\u77DD\u77DE\u77DF\u77E0\u77E1\u77E4\u75C5"+
-        "\u5E76\u73BB\u83E0\u64AD\u62E8\u94B5\u6CE2\u535A"+
-        "\u52C3\u640F\u94C2\u7B94\u4F2F\u5E1B\u8236\u8116"+
-        "\u818A\u6E24\u6CCA\u9A73\u6355\u535C\u54FA\u8865"+
-        "\u57E0\u4E0D\u5E03\u6B65\u7C3F\u90E8\u6016\u64E6"+
-        "\u731C\u88C1\u6750\u624D\u8D22\u776C\u8E29\u91C7"+
-        "\u5F69\u83DC\u8521\u9910\u53C2\u8695\u6B8B\u60ED"+
-        "\u60E8\u707F\u82CD\u8231\u4ED3\u6CA7\u85CF\u64CD"+
-        "\u7CD9\u69FD\u66F9\u8349\u5395\u7B56\u4FA7\u518C"+
-        "\u6D4B\u5C42\u8E6D\u63D2\u53C9\u832C\u8336\u67E5"+
-        "\u78B4\u643D\u5BDF\u5C94\u5DEE\u8BE7\u62C6\u67F4"+
-        "\u8C7A\u6400\u63BA\u8749\u998B\u8C17\u7F20\u94F2"+
-        "\u4EA7\u9610\u98A4\u660C\u7316\u77E6\u77E8\u77EA"+
-        "\u77EF\u77F0\u77F1\u77F2\u77F4\u77F5\u77F7\u77F9"+
-        "\u77FA\u77FB\u77FC\u7803\u7804\u7805\u7806\u7807"+
-        "\u7808\u780A\u780B\u780E\u780F\u7810\u7813\u7815"+
-        "\u7819\u781B\u781E\u7820\u7821\u7822\u7824\u7828"+
-        "\u782A\u782B\u782E\u782F\u7831\u7832\u7833\u7835"+
-        "\u7836\u783D\u783F\u7841\u7842\u7843\u7844\u7846"+
-        "\u7848\u7849\u784A\u784B\u784D\u784F\u7851\u7853"+
-        "\u7854\u7858\u7859\u785A\uFFFD\u785B\u785C\u785E"+
-        "\u785F\u7860\u7861\u7862\u7863\u7864\u7865\u7866"+
-        "\u7867\u7868\u7869\u786F\u7870\u7871\u7872\u7873"+
-        "\u7874\u7875\u7876\u7878\u7879\u787A\u787B\u787D"+
-        "\u787E\u787F\u7880\u7881\u7882\u7883\u573A\u5C1D"+
-        "\u5E38\u957F\u507F\u80A0\u5382\u655E\u7545\u5531"+
-        "\u5021\u8D85\u6284\u949E\u671D\u5632\u6F6E\u5DE2"+
-        "\u5435\u7092\u8F66\u626F\u64A4\u63A3\u5F7B\u6F88"+
-        "\u90F4\u81E3\u8FB0\u5C18\u6668\u5FF1\u6C89\u9648"+
-        "\u8D81\u886C\u6491\u79F0\u57CE\u6A59\u6210\u5448"+
-        "\u4E58\u7A0B\u60E9\u6F84\u8BDA\u627F\u901E\u9A8B"+
-        "\u79E4\u5403\u75F4\u6301\u5319\u6C60\u8FDF\u5F1B"+
-        "\u9A70\u803B\u9F7F\u4F88\u5C3A\u8D64\u7FC5\u65A5"+
-        "\u70BD\u5145\u51B2\u866B\u5D07\u5BA0\u62BD\u916C"+
-        "\u7574\u8E0C\u7A20\u6101\u7B79\u4EC7\u7EF8\u7785"+
-        "\u4E11\u81ED\u521D\u51FA\u6A71\u53A8\u8E87\u9504"+
-        "\u96CF\u6EC1\u9664\u695A\u7884\u7885\u7886\u7888"+
-        "\u788A\u788B\u788F\u7890\u7892\u7894\u7895\u7896"+
-        "\u7899\u789D\u789E\u78A0\u78A2\u78A4\u78A6\u78A8"+
-        "\u78A9\u78AA\u78AB\u78AC\u78AD\u78AE\u78AF\u78B5"+
-        "\u78B6\u78B7\u78B8\u78BA\u78BB\u78BC\u78BD\u78BF"+
-        "\u78C0\u78C2\u78C3\u78C4\u78C6\u78C7\u78C8\u78CC"+
-        "\u78CD\u78CE\u78CF\u78D1\u78D2\u78D3\u78D6\u78D7"+
-        "\u78D8\u78DA\u78DB\u78DC\u78DD\u78DE\u78DF\u78E0"+
-        "\u78E1\u78E2\u78E3\uFFFD\u78E4\u78E5\u78E6\u78E7"+
-        "\u78E9\u78EA\u78EB\u78ED\u78EE\u78EF\u78F0\u78F1"+
-        "\u78F3\u78F5\u78F6\u78F8\u78F9\u78FB\u78FC\u78FD"+
-        "\u78FE\u78FF\u7900\u7902\u7903\u7904\u7906\u7907"+
-        "\u7908\u7909\u790A\u790B\u790C\u7840\u50A8\u77D7"+
-        "\u6410\u89E6\u5904\u63E3\u5DDD\u7A7F\u693D\u4F20"+
-        "\u8239\u5598\u4E32\u75AE\u7A97\u5E62\u5E8A\u95EF"+
-        "\u521B\u5439\u708A\u6376\u9524\u5782\u6625\u693F"+
-        "\u9187\u5507\u6DF3\u7EAF\u8822\u6233\u7EF0\u75B5"+
-        "\u8328\u78C1\u96CC\u8F9E\u6148\u74F7\u8BCD\u6B64"+
-        "\u523A\u8D50\u6B21\u806A\u8471\u56F1\u5306\u4ECE"+
-        "\u4E1B\u51D1\u7C97\u918B\u7C07\u4FC3\u8E7F\u7BE1"+
-        "\u7A9C\u6467\u5D14\u50AC\u8106\u7601\u7CB9\u6DEC"+
-        "\u7FE0\u6751\u5B58\u5BF8\u78CB\u64AE\u6413\u63AA"+
-        "\u632B\u9519\u642D\u8FBE\u7B54\u7629\u6253\u5927"+
-        "\u5446\u6B79\u50A3\u6234\u5E26\u6B86\u4EE3\u8D37"+
-        "\u888B\u5F85\u902E\u790D\u790E\u790F\u7910\u7911"+
-        "\u7912\u7914\u7915\u7916\u7917\u7918\u7919\u791A"+
-        "\u791B\u791C\u791D\u791F\u7920\u7921\u7922\u7923"+
-        "\u7925\u7926\u7927\u7928\u7929\u792A\u792B\u792C"+
-        "\u792D\u792E\u792F\u7930\u7931\u7932\u7933\u7935"+
-        "\u7936\u7937\u7938\u7939\u793D\u793F\u7942\u7943"+
-        "\u7944\u7945\u7947\u794A\u794B\u794C\u794D\u794E"+
-        "\u794F\u7950\u7951\u7952\u7954\u7955\u7958\u7959"+
-        "\u7961\u7963\uFFFD\u7964\u7966\u7969\u796A\u796B"+
-        "\u796C\u796E\u7970\u7971\u7972\u7973\u7974\u7975"+
-        "\u7976\u7979\u797B\u797C\u797D\u797E\u797F\u7982"+
-        "\u7983\u7986\u7987\u7988\u7989\u798B\u798C\u798D"+
-        "\u798E\u7990\u7991\u7992\u6020\u803D\u62C5\u4E39"+
-        "\u5355\u90F8\u63B8\u80C6\u65E6\u6C2E\u4F46\u60EE"+
-        "\u6DE1\u8BDE\u5F39\u86CB\u5F53\u6321\u515A\u8361"+
-        "\u6863\u5200\u6363\u8E48\u5012\u5C9B\u7977\u5BFC"+
-        "\u5230\u7A3B\u60BC\u9053\u76D7\u5FB7\u5F97\u7684"+
-        "\u8E6C\u706F\u767B\u7B49\u77AA\u51F3\u9093\u5824"+
-        "\u4F4E\u6EF4\u8FEA\u654C\u7B1B\u72C4\u6DA4\u7FDF"+
-        "\u5AE1\u62B5\u5E95\u5730\u8482\u7B2C\u5E1D\u5F1F"+
-        "\u9012\u7F14\u98A0\u6382\u6EC7\u7898\u70B9\u5178"+
-        "\u975B\u57AB\u7535\u4F43\u7538\u5E97\u60E6\u5960"+
-        "\u6DC0\u6BBF\u7889\u53FC\u96D5\u51CB\u5201\u6389"+
-        "\u540A\u9493\u8C03\u8DCC\u7239\u789F\u8776\u8FED"+
-        "\u8C0D\u53E0\u7993\u7994\u7995\u7996\u7997\u7998"+
-        "\u7999\u799B\u799C\u799D\u799E\u799F\u79A0\u79A1"+
-        "\u79A2\u79A3\u79A4\u79A5\u79A6\u79A8\u79A9\u79AA"+
-        "\u79AB\u79AC\u79AD\u79AE\u79AF\u79B0\u79B1\u79B2"+
-        "\u79B4\u79B5\u79B6\u79B7\u79B8\u79BC\u79BF\u79C2"+
-        "\u79C4\u79C5\u79C7\u79C8\u79CA\u79CC\u79CE\u79CF"+
-        "\u79D0\u79D3\u79D4\u79D6\u79D7\u79D9\u79DA\u79DB"+
-        "\u79DC\u79DD\u79DE\u79E0\u79E1\u79E2\u79E5\u79E8"+
-        "\u79EA\uFFFD\u79EC\u79EE\u79F1\u79F2\u79F3\u79F4"+
-        "\u79F5\u79F6\u79F7\u79F9\u79FA\u79FC\u79FE\u79FF"+
-        "\u7A01\u7A04\u7A05\u7A07\u7A08\u7A09\u7A0A\u7A0C"+
-        "\u7A0F\u7A10\u7A11\u7A12\u7A13\u7A15\u7A16\u7A18"+
-        "\u7A19\u7A1B\u7A1C\u4E01\u76EF\u53EE\u9489\u9876"+
-        "\u9F0E\u952D\u5B9A\u8BA2\u4E22\u4E1C\u51AC\u8463"+
-        "\u61C2\u52A8\u680B\u4F97\u606B\u51BB\u6D1E\u515C"+
-        "\u6296\u6597\u9661\u8C46\u9017\u75D8\u90FD\u7763"+
-        "\u6BD2\u728A\u72EC\u8BFB\u5835\u7779\u8D4C\u675C"+
-        "\u9540\u809A\u5EA6\u6E21\u5992\u7AEF\u77ED\u953B"+
-        "\u6BB5\u65AD\u7F0E\u5806\u5151\u961F\u5BF9\u58A9"+
-        "\u5428\u8E72\u6566\u987F\u56E4\u949D\u76FE\u9041"+
-        "\u6387\u54C6\u591A\u593A\u579B\u8EB2\u6735\u8DFA"+
-        "\u8235\u5241\u60F0\u5815\u86FE\u5CE8\u9E45\u4FC4"+
-        "\u989D\u8BB9\u5A25\u6076\u5384\u627C\u904F\u9102"+
-        "\u997F\u6069\u800C\u513F\u8033\u5C14\u9975\u6D31"+
-        "\u4E8C\u7A1D\u7A1F\u7A21\u7A22\u7A24\u7A25\u7A26"+
-        "\u7A27\u7A28\u7A29\u7A2A\u7A2B\u7A2C\u7A2D\u7A2E"+
-        "\u7A2F\u7A30\u7A31\u7A32\u7A34\u7A35\u7A36\u7A38"+
-        "\u7A3A\u7A3E\u7A40\u7A41\u7A42\u7A43\u7A44\u7A45"+
-        "\u7A47\u7A48\u7A49\u7A4A\u7A4B\u7A4C\u7A4D\u7A4E"+
-        "\u7A4F\u7A50\u7A52\u7A53\u7A54\u7A55\u7A56\u7A58"+
-        "\u7A59\u7A5A\u7A5B\u7A5C\u7A5D\u7A5E\u7A5F\u7A60"+
-        "\u7A61\u7A62\u7A63\u7A64\u7A65\u7A66\u7A67\u7A68"+
-        "\uFFFD\u7A69\u7A6A\u7A6B\u7A6C\u7A6D\u7A6E\u7A6F"+
-        "\u7A71\u7A72\u7A73\u7A75\u7A7B\u7A7C\u7A7D\u7A7E"+
-        "\u7A82\u7A85\u7A87\u7A89\u7A8A\u7A8B\u7A8C\u7A8E"+
-        "\u7A8F\u7A90\u7A93\u7A94\u7A99\u7A9A\u7A9B\u7A9E"+
-        "\u7AA1\u7AA2\u8D30\u53D1\u7F5A\u7B4F\u4F10\u4E4F"+
-        "\u9600\u6CD5\u73D0\u85E9\u5E06\u756A\u7FFB\u6A0A"+
-        "\u77FE\u9492\u7E41\u51E1\u70E6\u53CD\u8FD4\u8303"+
-        "\u8D29\u72AF\u996D\u6CDB\u574A\u82B3\u65B9\u80AA"+
-        "\u623F\u9632\u59A8\u4EFF\u8BBF\u7EBA\u653E\u83F2"+
-        "\u975E\u5561\u98DE\u80A5\u532A\u8BFD\u5420\u80BA"+
-        "\u5E9F\u6CB8\u8D39\u82AC\u915A\u5429\u6C1B\u5206"+
-        "\u7EB7\u575F\u711A\u6C7E\u7C89\u594B\u4EFD\u5FFF"+
-        "\u6124\u7CAA\u4E30\u5C01\u67AB\u8702\u5CF0\u950B"+
-        "\u98CE\u75AF\u70FD\u9022\u51AF\u7F1D\u8BBD\u5949"+
-        "\u51E4\u4F5B\u5426\u592B\u6577\u80A4\u5B75\u6276"+
-        "\u62C2\u8F90\u5E45\u6C1F\u7B26\u4F0F\u4FD8\u670D"+
-        "\u7AA3\u7AA4\u7AA7\u7AA9\u7AAA\u7AAB\u7AAE\u7AAF"+
-        "\u7AB0\u7AB1\u7AB2\u7AB4\u7AB5\u7AB6\u7AB7\u7AB8"+
-        "\u7AB9\u7ABA\u7ABB\u7ABC\u7ABD\u7ABE\u7AC0\u7AC1"+
-        "\u7AC2\u7AC3\u7AC4\u7AC5\u7AC6\u7AC7\u7AC8\u7AC9"+
-        "\u7ACA\u7ACC\u7ACD\u7ACE\u7ACF\u7AD0\u7AD1\u7AD2"+
-        "\u7AD3\u7AD4\u7AD5\u7AD7\u7AD8\u7ADA\u7ADB\u7ADC"+
-        "\u7ADD\u7AE1\u7AE2\u7AE4\u7AE7\u7AE8\u7AE9\u7AEA"+
-        "\u7AEB\u7AEC\u7AEE\u7AF0\u7AF1\u7AF2\u7AF3\uFFFD"+
-        "\u7AF4\u7AF5\u7AF6\u7AF7\u7AF8\u7AFB\u7AFC\u7AFE"+
-        "\u7B00\u7B01\u7B02\u7B05\u7B07\u7B09\u7B0C\u7B0D"+
-        "\u7B0E\u7B10\u7B12\u7B13\u7B16\u7B17\u7B18\u7B1A"+
-        "\u7B1C\u7B1D\u7B1F\u7B21\u7B22\u7B23\u7B27\u7B29"+
-        "\u7B2D\u6D6E\u6DAA\u798F\u88B1\u5F17\u752B\u629A"+
-        "\u8F85\u4FEF\u91DC\u65A7\u812F\u8151\u5E9C\u8150"+
-        "\u8D74\u526F\u8986\u8D4B\u590D\u5085\u4ED8\u961C"+
-        "\u7236\u8179\u8D1F\u5BCC\u8BA3\u9644\u5987\u7F1A"+
-        "\u5490\u5676\u560E\u8BE5\u6539\u6982\u9499\u76D6"+
-        "\u6E89\u5E72\u7518\u6746\u67D1\u7AFF\u809D\u8D76"+
-        "\u611F\u79C6\u6562\u8D63\u5188\u521A\u94A2\u7F38"+
-        "\u809B\u7EB2\u5C97\u6E2F\u6760\u7BD9\u768B\u9AD8"+
-        "\u818F\u7F94\u7CD5\u641E\u9550\u7A3F\u544A\u54E5"+
-        "\u6B4C\u6401\u6208\u9E3D\u80F3\u7599\u5272\u9769"+
-        "\u845B\u683C\u86E4\u9601\u9694\u94EC\u4E2A\u5404"+
-        "\u7ED9\u6839\u8DDF\u8015\u66F4\u5E9A\u7FB9\u7B2F"+
-        "\u7B30\u7B32\u7B34\u7B35\u7B36\u7B37\u7B39\u7B3B"+
-        "\u7B3D\u7B3F\u7B40\u7B41\u7B42\u7B43\u7B44\u7B46"+
-        "\u7B48\u7B4A\u7B4D\u7B4E\u7B53\u7B55\u7B57\u7B59"+
-        "\u7B5C\u7B5E\u7B5F\u7B61\u7B63\u7B64\u7B65\u7B66"+
-        "\u7B67\u7B68\u7B69\u7B6A\u7B6B\u7B6C\u7B6D\u7B6F"+
-        "\u7B70\u7B73\u7B74\u7B76\u7B78\u7B7A\u7B7C\u7B7D"+
-        "\u7B7F\u7B81\u7B82\u7B83\u7B84\u7B86\u7B87\u7B88"+
-        "\u7B89\u7B8A\u7B8B\u7B8C\u7B8E\u7B8F\uFFFD\u7B91"+
-        "\u7B92\u7B93\u7B96\u7B98\u7B99\u7B9A\u7B9B\u7B9E"+
-        "\u7B9F\u7BA0\u7BA3\u7BA4\u7BA5\u7BAE\u7BAF\u7BB0"+
-        "\u7BB2\u7BB3\u7BB5\u7BB6\u7BB7\u7BB9\u7BBA\u7BBB"+
-        "\u7BBC\u7BBD\u7BBE\u7BBF\u7BC0\u7BC2\u7BC3\u7BC4"+
-        "\u57C2\u803F\u6897\u5DE5\u653B\u529F\u606D\u9F9A"+
-        "\u4F9B\u8EAC\u516C\u5BAB\u5F13\u5DE9\u6C5E\u62F1"+
-        "\u8D21\u5171\u94A9\u52FE\u6C9F\u82DF\u72D7\u57A2"+
-        "\u6784\u8D2D\u591F\u8F9C\u83C7\u5495\u7B8D\u4F30"+
-        "\u6CBD\u5B64\u59D1\u9F13\u53E4\u86CA\u9AA8\u8C37"+
-        "\u80A1\u6545\u987E\u56FA\u96C7\u522E\u74DC\u5250"+
-        "\u5BE1\u6302\u8902\u4E56\u62D0\u602A\u68FA\u5173"+
-        "\u5B98\u51A0\u89C2\u7BA1\u9986\u7F50\u60EF\u704C"+
-        "\u8D2F\u5149\u5E7F\u901B\u7470\u89C4\u572D\u7845"+
-        "\u5F52\u9F9F\u95FA\u8F68\u9B3C\u8BE1\u7678\u6842"+
-        "\u67DC\u8DEA\u8D35\u523D\u8F8A\u6EDA\u68CD\u9505"+
-        "\u90ED\u56FD\u679C\u88F9\u8FC7\u54C8\u7BC5\u7BC8"+
-        "\u7BC9\u7BCA\u7BCB\u7BCD\u7BCE\u7BCF\u7BD0\u7BD2"+
-        "\u7BD4\u7BD5\u7BD6\u7BD7\u7BD8\u7BDB\u7BDC\u7BDE"+
-        "\u7BDF\u7BE0\u7BE2\u7BE3\u7BE4\u7BE7\u7BE8\u7BE9"+
-        "\u7BEB\u7BEC\u7BED\u7BEF\u7BF0\u7BF2\u7BF3\u7BF4"+
-        "\u7BF5\u7BF6\u7BF8\u7BF9\u7BFA\u7BFB\u7BFD\u7BFF"+
-        "\u7C00\u7C01\u7C02\u7C03\u7C04\u7C05\u7C06\u7C08"+
-        "\u7C09\u7C0A\u7C0D\u7C0E\u7C10\u7C11\u7C12\u7C13"+
-        "\u7C14\u7C15\u7C17\u7C18\u7C19\uFFFD\u7C1A\u7C1B"+
-        "\u7C1C\u7C1D\u7C1E\u7C20\u7C21\u7C22\u7C23\u7C24"+
-        "\u7C25\u7C28\u7C29\u7C2B\u7C2C\u7C2D\u7C2E\u7C2F"+
-        "\u7C30\u7C31\u7C32\u7C33\u7C34\u7C35\u7C36\u7C37"+
-        "\u7C39\u7C3A\u7C3B\u7C3C\u7C3D\u7C3E\u7C42\u9AB8"+
-        "\u5B69\u6D77\u6C26\u4EA5\u5BB3\u9A87\u9163\u61A8"+
-        "\u90AF\u97E9\u542B\u6DB5\u5BD2\u51FD\u558A\u7F55"+
-        "\u7FF0\u64BC\u634D\u65F1\u61BE\u608D\u710A\u6C57"+
-        "\u6C49\u592F\u676D\u822A\u58D5\u568E\u8C6A\u6BEB"+
-        "\u90DD\u597D\u8017\u53F7\u6D69\u5475\u559D\u8377"+
-        "\u83CF\u6838\u79BE\u548C\u4F55\u5408\u76D2\u8C89"+
-        "\u9602\u6CB3\u6DB8\u8D6B\u8910\u9E64\u8D3A\u563F"+
-        "\u9ED1\u75D5\u5F88\u72E0\u6068\u54FC\u4EA8\u6A2A"+
-        "\u8861\u6052\u8F70\u54C4\u70D8\u8679\u9E3F\u6D2A"+
-        "\u5B8F\u5F18\u7EA2\u5589\u4FAF\u7334\u543C\u539A"+
-        "\u5019\u540E\u547C\u4E4E\u5FFD\u745A\u58F6\u846B"+
-        "\u80E1\u8774\u72D0\u7CCA\u6E56\u7C43\u7C44\u7C45"+
-        "\u7C46\u7C47\u7C48\u7C49\u7C4A\u7C4B\u7C4C\u7C4E"+
-        "\u7C4F\u7C50\u7C51\u7C52\u7C53\u7C54\u7C55\u7C56"+
-        "\u7C57\u7C58\u7C59\u7C5A\u7C5B\u7C5C\u7C5D\u7C5E"+
-        "\u7C5F\u7C60\u7C61\u7C62\u7C63\u7C64\u7C65\u7C66"+
-        "\u7C67\u7C68\u7C69\u7C6A\u7C6B\u7C6C\u7C6D\u7C6E"+
-        "\u7C6F\u7C70\u7C71\u7C72\u7C75\u7C76\u7C77\u7C78"+
-        "\u7C79\u7C7A\u7C7E\u7C7F\u7C80\u7C81\u7C82\u7C83"+
-        "\u7C84\u7C85\u7C86\u7C87\uFFFD\u7C88\u7C8A\u7C8B"+
-        "\u7C8C\u7C8D\u7C8E\u7C8F\u7C90\u7C93\u7C94\u7C96"+
-        "\u7C99\u7C9A\u7C9B\u7CA0\u7CA1\u7CA3\u7CA6\u7CA7"+
-        "\u7CA8\u7CA9\u7CAB\u7CAC\u7CAD\u7CAF\u7CB0\u7CB4"+
-        "\u7CB5\u7CB6\u7CB7\u7CB8\u7CBA\u7CBB\u5F27\u864E"+
-        "\u552C\u62A4\u4E92\u6CAA\u6237\u82B1\u54D7\u534E"+
-        "\u733E\u6ED1\u753B\u5212\u5316\u8BDD\u69D0\u5F8A"+
-        "\u6000\u6DEE\u574F\u6B22\u73AF\u6853\u8FD8\u7F13"+
-        "\u6362\u60A3\u5524\u75EA\u8C62\u7115\u6DA3\u5BA6"+
-        "\u5E7B\u8352\u614C\u9EC4\u78FA\u8757\u7C27\u7687"+
-        "\u51F0\u60F6\u714C\u6643\u5E4C\u604D\u8C0E\u7070"+
-        "\u6325\u8F89\u5FBD\u6062\u86D4\u56DE\u6BC1\u6094"+
-        "\u6167\u5349\u60E0\u6666\u8D3F\u79FD\u4F1A\u70E9"+
-        "\u6C47\u8BB3\u8BF2\u7ED8\u8364\u660F\u5A5A\u9B42"+
-        "\u6D51\u6DF7\u8C41\u6D3B\u4F19\u706B\u83B7\u6216"+
-        "\u60D1\u970D\u8D27\u7978\u51FB\u573E\u57FA\u673A"+
-        "\u7578\u7A3D\u79EF\u7B95\u7CBF\u7CC0\u7CC2\u7CC3"+
-        "\u7CC4\u7CC6\u7CC9\u7CCB\u7CCE\u7CCF\u7CD0\u7CD1"+
-        "\u7CD2\u7CD3\u7CD4\u7CD8\u7CDA\u7CDB\u7CDD\u7CDE"+
-        "\u7CE1\u7CE2\u7CE3\u7CE4\u7CE5\u7CE6\u7CE7\u7CE9"+
-        "\u7CEA\u7CEB\u7CEC\u7CED\u7CEE\u7CF0\u7CF1\u7CF2"+
-        "\u7CF3\u7CF4\u7CF5\u7CF6\u7CF7\u7CF9\u7CFA\u7CFC"+
-        "\u7CFD\u7CFE\u7CFF\u7D00\u7D01\u7D02\u7D03\u7D04"+
-        "\u7D05\u7D06\u7D07\u7D08\u7D09\u7D0B\u7D0C\u7D0D"+
-        "\u7D0E\u7D0F\u7D10\uFFFD\u7D11\u7D12\u7D13\u7D14"+
-        "\u7D15\u7D16\u7D17\u7D18\u7D19\u7D1A\u7D1B\u7D1C"+
-        "\u7D1D\u7D1E\u7D1F\u7D21\u7D23\u7D24\u7D25\u7D26"+
-        "\u7D28\u7D29\u7D2A\u7D2C\u7D2D\u7D2E\u7D30\u7D31"+
-        "\u7D32\u7D33\u7D34\u7D35\u7D36\u808C\u9965\u8FF9"+
-        "\u6FC0\u8BA5\u9E21\u59EC\u7EE9\u7F09\u5409\u6781"+
-        "\u68D8\u8F91\u7C4D\u96C6\u53CA\u6025\u75BE\u6C72"+
-        "\u5373\u5AC9\u7EA7\u6324\u51E0\u810A\u5DF1\u84DF"+
-        "\u6280\u5180\u5B63\u4F0E\u796D\u5242\u60B8\u6D4E"+
-        "\u5BC4\u5BC2\u8BA1\u8BB0\u65E2\u5FCC\u9645\u5993"+
-        "\u7EE7\u7EAA\u5609\u67B7\u5939\u4F73\u5BB6\u52A0"+
-        "\u835A\u988A\u8D3E\u7532\u94BE\u5047\u7A3C\u4EF7"+
-        "\u67B6\u9A7E\u5AC1\u6B7C\u76D1\u575A\u5C16\u7B3A"+
-        "\u95F4\u714E\u517C\u80A9\u8270\u5978\u7F04\u8327"+
-        "\u68C0\u67EC\u78B1\u7877\u62E3\u6361\u7B80\u4FED"+
-        "\u526A\u51CF\u8350\u69DB\u9274\u8DF5\u8D31\u89C1"+
-        "\u952E\u7BAD\u4EF6\u7D37\u7D38\u7D39\u7D3A\u7D3B"+
-        "\u7D3C\u7D3D\u7D3E\u7D3F\u7D40\u7D41\u7D42\u7D43"+
-        "\u7D44\u7D45\u7D46\u7D47\u7D48\u7D49\u7D4A\u7D4B"+
-        "\u7D4C\u7D4D\u7D4E\u7D4F\u7D50\u7D51\u7D52\u7D53"+
-        "\u7D54\u7D55\u7D56\u7D57\u7D58\u7D59\u7D5A\u7D5B"+
-        "\u7D5C\u7D5D\u7D5E\u7D5F\u7D60\u7D61\u7D62\u7D63"+
-        "\u7D64\u7D65\u7D66\u7D67\u7D68\u7D69\u7D6A\u7D6B"+
-        "\u7D6C\u7D6D\u7D6F\u7D70\u7D71\u7D72\u7D73\u7D74"+
-        "\u7D75\u7D76\uFFFD\u7D78\u7D79\u7D7A\u7D7B\u7D7C"+
-        "\u7D7D\u7D7E\u7D7F\u7D80\u7D81\u7D82\u7D83\u7D84"+
-        "\u7D85\u7D86\u7D87\u7D88\u7D89\u7D8A\u7D8B\u7D8C"+
-        "\u7D8D\u7D8E\u7D8F\u7D90\u7D91\u7D92\u7D93\u7D94"+
-        "\u7D95\u7D96\u7D97\u7D98\u5065\u8230\u5251\u996F"+
-        "\u6E10\u6E85\u6DA7\u5EFA\u50F5\u59DC\u5C06\u6D46"+
-        "\u6C5F\u7586\u848B\u6868\u5956\u8BB2\u5320\u9171"+
-        "\u964D\u8549\u6912\u7901\u7126\u80F6\u4EA4\u90CA"+
-        "\u6D47\u9A84\u5A07\u56BC\u6405\u94F0\u77EB\u4FA5"+
-        "\u811A\u72E1\u89D2\u997A\u7F34\u7EDE\u527F\u6559"+
-        "\u9175\u8F7F\u8F83\u53EB\u7A96\u63ED\u63A5\u7686"+
-        "\u79F8\u8857\u9636\u622A\u52AB\u8282\u6854\u6770"+
-        "\u6377\u776B\u7AED\u6D01\u7ED3\u89E3\u59D0\u6212"+
-        "\u85C9\u82A5\u754C\u501F\u4ECB\u75A5\u8BEB\u5C4A"+
-        "\u5DFE\u7B4B\u65A4\u91D1\u4ECA\u6D25\u895F\u7D27"+
-        "\u9526\u4EC5\u8C28\u8FDB\u9773\u664B\u7981\u8FD1"+
-        "\u70EC\u6D78\u7D99\u7D9A\u7D9B\u7D9C\u7D9D\u7D9E"+
-        "\u7D9F\u7DA0\u7DA1\u7DA2\u7DA3\u7DA4\u7DA5\u7DA7"+
-        "\u7DA8\u7DA9\u7DAA\u7DAB\u7DAC\u7DAD\u7DAF\u7DB0"+
-        "\u7DB1\u7DB2\u7DB3\u7DB4\u7DB5\u7DB6\u7DB7\u7DB8"+
-        "\u7DB9\u7DBA\u7DBB\u7DBC\u7DBD\u7DBE\u7DBF\u7DC0"+
-        "\u7DC1\u7DC2\u7DC3\u7DC4\u7DC5\u7DC6\u7DC7\u7DC8"+
-        "\u7DC9\u7DCA\u7DCB\u7DCC\u7DCD\u7DCE\u7DCF\u7DD0"+
-        "\u7DD1\u7DD2\u7DD3\u7DD4\u7DD5\u7DD6\u7DD7\u7DD8"+
-        "\u7DD9\uFFFD\u7DDA\u7DDB\u7DDC\u7DDD\u7DDE\u7DDF"+
-        "\u7DE0\u7DE1\u7DE2\u7DE3\u7DE4\u7DE5\u7DE6\u7DE7"+
-        "\u7DE8\u7DE9\u7DEA\u7DEB\u7DEC\u7DED\u7DEE\u7DEF"+
-        "\u7DF0\u7DF1\u7DF2\u7DF3\u7DF4\u7DF5\u7DF6\u7DF7"+
-        "\u7DF8\u7DF9\u7DFA\u5C3D\u52B2\u8346\u5162\u830E"+
-        "\u775B\u6676\u9CB8\u4EAC\u60CA\u7CBE\u7CB3\u7ECF"+
-        "\u4E95\u8B66\u666F\u9888\u9759\u5883\u656C\u955C"+
-        "\u5F84\u75C9\u9756\u7ADF\u7ADE\u51C0\u70AF\u7A98"+
-        "\u63EA\u7A76\u7EA0\u7396\u97ED\u4E45\u7078\u4E5D"+
-        "\u9152\u53A9\u6551\u65E7\u81FC\u8205\u548E\u5C31"+
-        "\u759A\u97A0\u62D8\u72D9\u75BD\u5C45\u9A79\u83CA"+
-        "\u5C40\u5480\u77E9\u4E3E\u6CAE\u805A\u62D2\u636E"+
-        "\u5DE8\u5177\u8DDD\u8E1E\u952F\u4FF1\u53E5\u60E7"+
-        "\u70AC\u5267\u6350\u9E43\u5A1F\u5026\u7737\u5377"+
-        "\u7EE2\u6485\u652B\u6289\u6398\u5014\u7235\u89C9"+
-        "\u51B3\u8BC0\u7EDD\u5747\u83CC\u94A7\u519B\u541B"+
-        "\u5CFB\u7DFB\u7DFC\u7DFD\u7DFE\u7DFF\u7E00\u7E01"+
-        "\u7E02\u7E03\u7E04\u7E05\u7E06\u7E07\u7E08\u7E09"+
-        "\u7E0A\u7E0B\u7E0C\u7E0D\u7E0E\u7E0F\u7E10\u7E11"+
-        "\u7E12\u7E13\u7E14\u7E15\u7E16\u7E17\u7E18\u7E19"+
-        "\u7E1A\u7E1B\u7E1C\u7E1D\u7E1E\u7E1F\u7E20\u7E21"+
-        "\u7E22\u7E23\u7E24\u7E25\u7E26\u7E27\u7E28\u7E29"+
-        "\u7E2A\u7E2B\u7E2C\u7E2D\u7E2E\u7E2F\u7E30\u7E31"+
-        "\u7E32\u7E33\u7E34\u7E35\u7E36\u7E37\u7E38\u7E39"+
-        "\uFFFD\u7E3A\u7E3C\u7E3D\u7E3E\u7E3F\u7E40\u7E42"+
-        "\u7E43\u7E44\u7E45\u7E46\u7E48\u7E49\u7E4A\u7E4B"+
-        "\u7E4C\u7E4D\u7E4E\u7E4F\u7E50\u7E51\u7E52\u7E53"+
-        "\u7E54\u7E55\u7E56\u7E57\u7E58\u7E59\u7E5A\u7E5B"+
-        "\u7E5C\u7E5D\u4FCA\u7AE3\u6D5A\u90E1\u9A8F\u5580"+
-        "\u5496\u5361\u54AF\u5F00\u63E9\u6977\u51EF\u6168"+
-        "\u520A\u582A\u52D8\u574E\u780D\u770B\u5EB7\u6177"+
-        "\u7CE0\u625B\u6297\u4EA2\u7095\u8003\u62F7\u70E4"+
-        "\u9760\u5777\u82DB\u67EF\u68F5\u78D5\u9897\u79D1"+
-        "\u58F3\u54B3\u53EF\u6E34\u514B\u523B\u5BA2\u8BFE"+
-        "\u80AF\u5543\u57A6\u6073\u5751\u542D\u7A7A\u6050"+
-        "\u5B54\u63A7\u62A0\u53E3\u6263\u5BC7\u67AF\u54ED"+
-        "\u7A9F\u82E6\u9177\u5E93\u88E4\u5938\u57AE\u630E"+
-        "\u8DE8\u80EF\u5757\u7B77\u4FA9\u5FEB\u5BBD\u6B3E"+
-        "\u5321\u7B50\u72C2\u6846\u77FF\u7736\u65F7\u51B5"+
-        "\u4E8F\u76D4\u5CBF\u7AA5\u8475\u594E\u9B41\u5080";
-
-    private final static String innerIndex4=
-        "\u7E5E\u7E5F\u7E60\u7E61\u7E62\u7E63\u7E64\u7E65"+
-        "\u7E66\u7E67\u7E68\u7E69\u7E6A\u7E6B\u7E6C\u7E6D"+
-        "\u7E6E\u7E6F\u7E70\u7E71\u7E72\u7E73\u7E74\u7E75"+
-        "\u7E76\u7E77\u7E78\u7E79\u7E7A\u7E7B\u7E7C\u7E7D"+
-        "\u7E7E\u7E7F\u7E80\u7E81\u7E83\u7E84\u7E85\u7E86"+
-        "\u7E87\u7E88\u7E89\u7E8A\u7E8B\u7E8C\u7E8D\u7E8E"+
-        "\u7E8F\u7E90\u7E91\u7E92\u7E93\u7E94\u7E95\u7E96"+
-        "\u7E97\u7E98\u7E99\u7E9A\u7E9C\u7E9D\u7E9E\uFFFD"+
-        "\u7EAE\u7EB4\u7EBB\u7EBC\u7ED6\u7EE4\u7EEC\u7EF9"+
-        "\u7F0A\u7F10\u7F1E\u7F37\u7F39\u7F3B\u7F3C\u7F3D"+
-        "\u7F3E\u7F3F\u7F40\u7F41\u7F43\u7F46\u7F47\u7F48"+
-        "\u7F49\u7F4A\u7F4B\u7F4C\u7F4D\u7F4E\u7F4F\u7F52"+
-        "\u7F53\u9988\u6127\u6E83\u5764\u6606\u6346\u56F0"+
-        "\u62EC\u6269\u5ED3\u9614\u5783\u62C9\u5587\u8721"+
-        "\u814A\u8FA3\u5566\u83B1\u6765\u8D56\u84DD\u5A6A"+
-        "\u680F\u62E6\u7BEE\u9611\u5170\u6F9C\u8C30\u63FD"+
-        "\u89C8\u61D2\u7F06\u70C2\u6EE5\u7405\u6994\u72FC"+
-        "\u5ECA\u90CE\u6717\u6D6A\u635E\u52B3\u7262\u8001"+
-        "\u4F6C\u59E5\u916A\u70D9\u6D9D\u52D2\u4E50\u96F7"+
-        "\u956D\u857E\u78CA\u7D2F\u5121\u5792\u64C2\u808B"+
-        "\u7C7B\u6CEA\u68F1\u695E\u51B7\u5398\u68A8\u7281"+
-        "\u9ECE\u7BF1\u72F8\u79BB\u6F13\u7406\u674E\u91CC"+
-        "\u9CA4\u793C\u8389\u8354\u540F\u6817\u4E3D\u5389"+
-        "\u52B1\u783E\u5386\u5229\u5088\u4F8B\u4FD0\u7F56"+
-        "\u7F59\u7F5B\u7F5C\u7F5D\u7F5E\u7F60\u7F63\u7F64"+
-        "\u7F65\u7F66\u7F67\u7F6B\u7F6C\u7F6D\u7F6F\u7F70"+
-        "\u7F73\u7F75\u7F76\u7F77\u7F78\u7F7A\u7F7B\u7F7C"+
-        "\u7F7D\u7F7F\u7F80\u7F82\u7F83\u7F84\u7F85\u7F86"+
-        "\u7F87\u7F88\u7F89\u7F8B\u7F8D\u7F8F\u7F90\u7F91"+
-        "\u7F92\u7F93\u7F95\u7F96\u7F97\u7F98\u7F99\u7F9B"+
-        "\u7F9C\u7FA0\u7FA2\u7FA3\u7FA5\u7FA6\u7FA8\u7FA9"+
-        "\u7FAA\u7FAB\u7FAC\u7FAD\u7FAE\u7FB1\uFFFD\u7FB3"+
-        "\u7FB4\u7FB5\u7FB6\u7FB7\u7FBA\u7FBB\u7FBE\u7FC0"+
-        "\u7FC2\u7FC3\u7FC4\u7FC6\u7FC7\u7FC8\u7FC9\u7FCB"+
-        "\u7FCD\u7FCF\u7FD0\u7FD1\u7FD2\u7FD3\u7FD6\u7FD7"+
-        "\u7FD9\u7FDA\u7FDB\u7FDC\u7FDD\u7FDE\u7FE2\u7FE3"+
-        "\u75E2\u7ACB\u7C92\u6CA5\u96B6\u529B\u7483\u54E9"+
-        "\u4FE9\u8054\u83B2\u8FDE\u9570\u5EC9\u601C\u6D9F"+
-        "\u5E18\u655B\u8138\u94FE\u604B\u70BC\u7EC3\u7CAE"+
-        "\u51C9\u6881\u7CB1\u826F\u4E24\u8F86\u91CF\u667E"+
-        "\u4EAE\u8C05\u64A9\u804A\u50DA\u7597\u71CE\u5BE5"+
-        "\u8FBD\u6F66\u4E86\u6482\u9563\u5ED6\u6599\u5217"+
-        "\u88C2\u70C8\u52A3\u730E\u7433\u6797\u78F7\u9716"+
-        "\u4E34\u90BB\u9CDE\u6DCB\u51DB\u8D41\u541D\u62CE"+
-        "\u73B2\u83F1\u96F6\u9F84\u94C3\u4F36\u7F9A\u51CC"+
-        "\u7075\u9675\u5CAD\u9886\u53E6\u4EE4\u6E9C\u7409"+
-        "\u69B4\u786B\u998F\u7559\u5218\u7624\u6D41\u67F3"+
-        "\u516D\u9F99\u804B\u5499\u7B3C\u7ABF\u7FE4\u7FE7"+
-        "\u7FE8\u7FEA\u7FEB\u7FEC\u7FED\u7FEF\u7FF2\u7FF4"+
-        "\u7FF5\u7FF6\u7FF7\u7FF8\u7FF9\u7FFA\u7FFD\u7FFE"+
-        "\u7FFF\u8002\u8007\u8008\u8009\u800A\u800E\u800F"+
-        "\u8011\u8013\u801A\u801B\u801D\u801E\u801F\u8021"+
-        "\u8023\u8024\u802B\u802C\u802D\u802E\u802F\u8030"+
-        "\u8032\u8034\u8039\u803A\u803C\u803E\u8040\u8041"+
-        "\u8044\u8045\u8047\u8048\u8049\u804E\u804F\u8050"+
-        "\u8051\u8053\u8055\u8056\u8057\uFFFD\u8059\u805B"+
-        "\u805C\u805D\u805E\u805F\u8060\u8061\u8062\u8063"+
-        "\u8064\u8065\u8066\u8067\u8068\u806B\u806C\u806D"+
-        "\u806E\u806F\u8070\u8072\u8073\u8074\u8075\u8076"+
-        "\u8077\u8078\u8079\u807A\u807B\u807C\u807D\u9686"+
-        "\u5784\u62E2\u9647\u697C\u5A04\u6402\u7BD3\u6F0F"+
-        "\u964B\u82A6\u5362\u9885\u5E90\u7089\u63B3\u5364"+
-        "\u864F\u9C81\u9E93\u788C\u9732\u8DEF\u8D42\u9E7F"+
-        "\u6F5E\u7984\u5F55\u9646\u622E\u9A74\u5415\u94DD"+
-        "\u4FA3\u65C5\u5C65\u5C61\u7F15\u8651\u6C2F\u5F8B"+
-        "\u7387\u6EE4\u7EFF\u5CE6\u631B\u5B6A\u6EE6\u5375"+
-        "\u4E71\u63A0\u7565\u62A1\u8F6E\u4F26\u4ED1\u6CA6"+
-        "\u7EB6\u8BBA\u841D\u87BA\u7F57\u903B\u9523\u7BA9"+
-        "\u9AA1\u88F8\u843D\u6D1B\u9A86\u7EDC\u5988\u9EBB"+
-        "\u739B\u7801\u8682\u9A6C\u9A82\u561B\u5417\u57CB"+
-        "\u4E70\u9EA6\u5356\u8FC8\u8109\u7792\u9992\u86EE"+
-        "\u6EE1\u8513\u66FC\u6162\u6F2B\u807E\u8081\u8082"+
-        "\u8085\u8088\u808A\u808D\u808E\u808F\u8090\u8091"+
-        "\u8092\u8094\u8095\u8097\u8099\u809E\u80A3\u80A6"+
-        "\u80A7\u80A8\u80AC\u80B0\u80B3\u80B5\u80B6\u80B8"+
-        "\u80B9\u80BB\u80C5\u80C7\u80C8\u80C9\u80CA\u80CB"+
-        "\u80CF\u80D0\u80D1\u80D2\u80D3\u80D4\u80D5\u80D8"+
-        "\u80DF\u80E0\u80E2\u80E3\u80E6\u80EE\u80F5\u80F7"+
-        "\u80F9\u80FB\u80FE\u80FF\u8100\u8101\u8103\u8104"+
-        "\u8105\u8107\u8108\u810B\uFFFD\u810C\u8115\u8117"+
-        "\u8119\u811B\u811C\u811D\u811F\u8120\u8121\u8122"+
-        "\u8123\u8124\u8125\u8126\u8127\u8128\u8129\u812A"+
-        "\u812B\u812D\u812E\u8130\u8133\u8134\u8135\u8137"+
-        "\u8139\u813A\u813B\u813C\u813D\u813F\u8C29\u8292"+
-        "\u832B\u76F2\u6C13\u5FD9\u83BD\u732B\u8305\u951A"+
-        "\u6BDB\u77DB\u94C6\u536F\u8302\u5192\u5E3D\u8C8C"+
-        "\u8D38\u4E48\u73AB\u679A\u6885\u9176\u9709\u7164"+
-        "\u6CA1\u7709\u5A92\u9541\u6BCF\u7F8E\u6627\u5BD0"+
-        "\u59B9\u5A9A\u95E8\u95F7\u4EEC\u840C\u8499\u6AAC"+
-        "\u76DF\u9530\u731B\u68A6\u5B5F\u772F\u919A\u9761"+
-        "\u7CDC\u8FF7\u8C1C\u5F25\u7C73\u79D8\u89C5\u6CCC"+
-        "\u871C\u5BC6\u5E42\u68C9\u7720\u7EF5\u5195\u514D"+
-        "\u52C9\u5A29\u7F05\u9762\u82D7\u63CF\u7784\u85D0"+
-        "\u79D2\u6E3A\u5E99\u5999\u8511\u706D\u6C11\u62BF"+
-        "\u76BF\u654F\u60AF\u95FD\u660E\u879F\u9E23\u94ED"+
-        "\u540D\u547D\u8C2C\u6478\u8140\u8141\u8142\u8143"+
-        "\u8144\u8145\u8147\u8149\u814D\u814E\u814F\u8152"+
-        "\u8156\u8157\u8158\u815B\u815C\u815D\u815E\u815F"+
-        "\u8161\u8162\u8163\u8164\u8166\u8168\u816A\u816B"+
-        "\u816C\u816F\u8172\u8173\u8175\u8176\u8177\u8178"+
-        "\u8181\u8183\u8184\u8185\u8186\u8187\u8189\u818B"+
-        "\u818C\u818D\u818E\u8190\u8192\u8193\u8194\u8195"+
-        "\u8196\u8197\u8199\u819A\u819E\u819F\u81A0\u81A1"+
-        "\u81A2\u81A4\u81A5\uFFFD\u81A7\u81A9\u81AB\u81AC"+
-        "\u81AD\u81AE\u81AF\u81B0\u81B1\u81B2\u81B4\u81B5"+
-        "\u81B6\u81B7\u81B8\u81B9\u81BC\u81BD\u81BE\u81BF"+
-        "\u81C4\u81C5\u81C7\u81C8\u81C9\u81CB\u81CD\u81CE"+
-        "\u81CF\u81D0\u81D1\u81D2\u81D3\u6479\u8611\u6A21"+
-        "\u819C\u78E8\u6469\u9B54\u62B9\u672B\u83AB\u58A8"+
-        "\u9ED8\u6CAB\u6F20\u5BDE\u964C\u8C0B\u725F\u67D0"+
-        "\u62C7\u7261\u4EA9\u59C6\u6BCD\u5893\u66AE\u5E55"+
-        "\u52DF\u6155\u6728\u76EE\u7766\u7267\u7A46\u62FF"+
-        "\u54EA\u5450\u94A0\u90A3\u5A1C\u7EB3\u6C16\u4E43"+
-        "\u5976\u8010\u5948\u5357\u7537\u96BE\u56CA\u6320"+
-        "\u8111\u607C\u95F9\u6DD6\u5462\u9981\u5185\u5AE9"+
-        "\u80FD\u59AE\u9713\u502A\u6CE5\u5C3C\u62DF\u4F60"+
-        "\u533F\u817B\u9006\u6EBA\u852B\u62C8\u5E74\u78BE"+
-        "\u64B5\u637B\u5FF5\u5A18\u917F\u9E1F\u5C3F\u634F"+
-        "\u8042\u5B7D\u556E\u954A\u954D\u6D85\u60A8\u67E0"+
-        "\u72DE\u51DD\u5B81\u81D4\u81D5\u81D6\u81D7\u81D8"+
-        "\u81D9\u81DA\u81DB\u81DC\u81DD\u81DE\u81DF\u81E0"+
-        "\u81E1\u81E2\u81E4\u81E5\u81E6\u81E8\u81E9\u81EB"+
-        "\u81EE\u81EF\u81F0\u81F1\u81F2\u81F5\u81F6\u81F7"+
-        "\u81F8\u81F9\u81FA\u81FD\u81FF\u8203\u8207\u8208"+
-        "\u8209\u820A\u820B\u820E\u820F\u8211\u8213\u8215"+
-        "\u8216\u8217\u8218\u8219\u821A\u821D\u8220\u8224"+
-        "\u8225\u8226\u8227\u8229\u822E\u8232\u823A\u823C"+
-        "\u823D\u823F\uFFFD\u8240\u8241\u8242\u8243\u8245"+
-        "\u8246\u8248\u824A\u824C\u824D\u824E\u8250\u8251"+
-        "\u8252\u8253\u8254\u8255\u8256\u8257\u8259\u825B"+
-        "\u825C\u825D\u825E\u8260\u8261\u8262\u8263\u8264"+
-        "\u8265\u8266\u8267\u8269\u62E7\u6CDE\u725B\u626D"+
-        "\u94AE\u7EBD\u8113\u6D53\u519C\u5F04\u5974\u52AA"+
-        "\u6012\u5973\u6696\u8650\u759F\u632A\u61E6\u7CEF"+
-        "\u8BFA\u54E6\u6B27\u9E25\u6BB4\u85D5\u5455\u5076"+
-        "\u6CA4\u556A\u8DB4\u722C\u5E15\u6015\u7436\u62CD"+
-        "\u6392\u724C\u5F98\u6E43\u6D3E\u6500\u6F58\u76D8"+
-        "\u78D0\u76FC\u7554\u5224\u53DB\u4E53\u5E9E\u65C1"+
-        "\u802A\u80D6\u629B\u5486\u5228\u70AE\u888D\u8DD1"+
-        "\u6CE1\u5478\u80DA\u57F9\u88F4\u8D54\u966A\u914D"+
-        "\u4F69\u6C9B\u55B7\u76C6\u7830\u62A8\u70F9\u6F8E"+
-        "\u5F6D\u84EC\u68DA\u787C\u7BF7\u81A8\u670B\u9E4F"+
-        "\u6367\u78B0\u576F\u7812\u9739\u6279\u62AB\u5288"+
-        "\u7435\u6BD7\u826A\u826B\u826C\u826D\u8271\u8275"+
-        "\u8276\u8277\u8278\u827B\u827C\u8280\u8281\u8283"+
-        "\u8285\u8286\u8287\u8289\u828C\u8290\u8293\u8294"+
-        "\u8295\u8296\u829A\u829B\u829E\u82A0\u82A2\u82A3"+
-        "\u82A7\u82B2\u82B5\u82B6\u82BA\u82BB\u82BC\u82BF"+
-        "\u82C0\u82C2\u82C3\u82C5\u82C6\u82C9\u82D0\u82D6"+
-        "\u82D9\u82DA\u82DD\u82E2\u82E7\u82E8\u82E9\u82EA"+
-        "\u82EC\u82ED\u82EE\u82F0\u82F2\u82F3\u82F5\u82F6"+
-        "\u82F8\uFFFD\u82FA\u82FC\u82FD\u82FE\u82FF\u8300"+
-        "\u830A\u830B\u830D\u8310\u8312\u8313\u8316\u8318"+
-        "\u8319\u831D\u831E\u831F\u8320\u8321\u8322\u8323"+
-        "\u8324\u8325\u8326\u8329\u832A\u832E\u8330\u8332"+
-        "\u8337\u833B\u833D\u5564\u813E\u75B2\u76AE\u5339"+
-        "\u75DE\u50FB\u5C41\u8B6C\u7BC7\u504F\u7247\u9A97"+
-        "\u98D8\u6F02\u74E2\u7968\u6487\u77A5\u62FC\u9891"+
-        "\u8D2B\u54C1\u8058\u4E52\u576A\u82F9\u840D\u5E73"+
-        "\u51ED\u74F6\u8BC4\u5C4F\u5761\u6CFC\u9887\u5A46"+
-        "\u7834\u9B44\u8FEB\u7C95\u5256\u6251\u94FA\u4EC6"+
-        "\u8386\u8461\u83E9\u84B2\u57D4\u6734\u5703\u666E"+
-        "\u6D66\u8C31\u66DD\u7011\u671F\u6B3A\u6816\u621A"+
-        "\u59BB\u4E03\u51C4\u6F06\u67D2\u6C8F\u5176\u68CB"+
-        "\u5947\u6B67\u7566\u5D0E\u8110\u9F50\u65D7\u7948"+
-        "\u7941\u9A91\u8D77\u5C82\u4E5E\u4F01\u542F\u5951"+
-        "\u780C\u5668\u6C14\u8FC4\u5F03\u6C7D\u6CE3\u8BAB"+
-        "\u6390\u833E\u833F\u8341\u8342\u8344\u8345\u8348"+
-        "\u834A\u834B\u834C\u834D\u834E\u8353\u8355\u8356"+
-        "\u8357\u8358\u8359\u835D\u8362\u8370\u8371\u8372"+
-        "\u8373\u8374\u8375\u8376\u8379\u837A\u837E\u837F"+
-        "\u8380\u8381\u8382\u8383\u8384\u8387\u8388\u838A"+
-        "\u838B\u838C\u838D\u838F\u8390\u8391\u8394\u8395"+
-        "\u8396\u8397\u8399\u839A\u839D\u839F\u83A1\u83A2"+
-        "\u83A3\u83A4\u83A5\u83A6\u83A7\u83AC\u83AD\u83AE"+
-        "\uFFFD\u83AF\u83B5\u83BB\u83BE\u83BF\u83C2\u83C3"+
-        "\u83C4\u83C6\u83C8\u83C9\u83CB\u83CD\u83CE\u83D0"+
-        "\u83D1\u83D2\u83D3\u83D5\u83D7\u83D9\u83DA\u83DB"+
-        "\u83DE\u83E2\u83E3\u83E4\u83E6\u83E7\u83E8\u83EB"+
-        "\u83EC\u83ED\u6070\u6D3D\u7275\u6266\u948E\u94C5"+
-        "\u5343\u8FC1\u7B7E\u4EDF\u8C26\u4E7E\u9ED4\u94B1"+
-        "\u94B3\u524D\u6F5C\u9063\u6D45\u8C34\u5811\u5D4C"+
-        "\u6B20\u6B49\u67AA\u545B\u8154\u7F8C\u5899\u8537"+
-        "\u5F3A\u62A2\u6A47\u9539\u6572\u6084\u6865\u77A7"+
-        "\u4E54\u4FA8\u5DE7\u9798\u64AC\u7FD8\u5CED\u4FCF"+
-        "\u7A8D\u5207\u8304\u4E14\u602F\u7A83\u94A6\u4FB5"+
-        "\u4EB2\u79E6\u7434\u52E4\u82B9\u64D2\u79BD\u5BDD"+
-        "\u6C81\u9752\u8F7B\u6C22\u503E\u537F\u6E05\u64CE"+
-        "\u6674\u6C30\u60C5\u9877\u8BF7\u5E86\u743C\u7A77"+
-        "\u79CB\u4E18\u90B1\u7403\u6C42\u56DA\u914B\u6CC5"+
-        "\u8D8B\u533A\u86C6\u66F2\u8EAF\u5C48\u9A71\u6E20"+
-        "\u83EE\u83EF\u83F3\u83F4\u83F5\u83F6\u83F7\u83FA"+
-        "\u83FB\u83FC\u83FE\u83FF\u8400\u8402\u8405\u8407"+
-        "\u8408\u8409\u840A\u8410\u8412\u8413\u8414\u8415"+
-        "\u8416\u8417\u8419\u841A\u841B\u841E\u841F\u8420"+
-        "\u8421\u8422\u8423\u8429\u842A\u842B\u842C\u842D"+
-        "\u842E\u842F\u8430\u8432\u8433\u8434\u8435\u8436"+
-        "\u8437\u8439\u843A\u843B\u843E\u843F\u8440\u8441"+
-        "\u8442\u8443\u8444\u8445\u8447\u8448\u8449\uFFFD"+
-        "\u844A\u844B\u844C\u844D\u844E\u844F\u8450\u8452"+
-        "\u8453\u8454\u8455\u8456\u8458\u845D\u845E\u845F"+
-        "\u8460\u8462\u8464\u8465\u8466\u8467\u8468\u846A"+
-        "\u846E\u846F\u8470\u8472\u8474\u8477\u8479\u847B"+
-        "\u847C\u53D6\u5A36\u9F8B\u8DA3\u53BB\u5708\u98A7"+
-        "\u6743\u919B\u6CC9\u5168\u75CA\u62F3\u72AC\u5238"+
-        "\u529D\u7F3A\u7094\u7638\u5374\u9E4A\u69B7\u786E"+
-        "\u96C0\u88D9\u7FA4\u7136\u71C3\u5189\u67D3\u74E4"+
-        "\u58E4\u6518\u56B7\u8BA9\u9976\u6270\u7ED5\u60F9"+
-        "\u70ED\u58EC\u4EC1\u4EBA\u5FCD\u97E7\u4EFB\u8BA4"+
-        "\u5203\u598A\u7EAB\u6254\u4ECD\u65E5\u620E\u8338"+
-        "\u84C9\u8363\u878D\u7194\u6EB6\u5BB9\u7ED2\u5197"+
-        "\u63C9\u67D4\u8089\u8339\u8815\u5112\u5B7A\u5982"+
-        "\u8FB1\u4E73\u6C5D\u5165\u8925\u8F6F\u962E\u854A"+
-        "\u745E\u9510\u95F0\u6DA6\u82E5\u5F31\u6492\u6D12"+
-        "\u8428\u816E\u9CC3\u585E\u8D5B\u4E09\u53C1\u847D"+
-        "\u847E\u847F\u8480\u8481\u8483\u8484\u8485\u8486"+
-        "\u848A\u848D\u848F\u8490\u8491\u8492\u8493\u8494"+
-        "\u8495\u8496\u8498\u849A\u849B\u849D\u849E\u849F"+
-        "\u84A0\u84A2\u84A3\u84A4\u84A5\u84A6\u84A7\u84A8"+
-        "\u84A9\u84AA\u84AB\u84AC\u84AD\u84AE\u84B0\u84B1"+
-        "\u84B3\u84B5\u84B6\u84B7\u84BB\u84BC\u84BE\u84C0"+
-        "\u84C2\u84C3\u84C5\u84C6\u84C7\u84C8\u84CB\u84CC"+
-        "\u84CE\u84CF\u84D2\u84D4\u84D5\u84D7\uFFFD\u84D8"+
-        "\u84D9\u84DA\u84DB\u84DC\u84DE\u84E1\u84E2\u84E4"+
-        "\u84E7\u84E8\u84E9\u84EA\u84EB\u84ED\u84EE\u84EF"+
-        "\u84F1\u84F2\u84F3\u84F4\u84F5\u84F6\u84F7\u84F8"+
-        "\u84F9\u84FA\u84FB\u84FD\u84FE\u8500\u8501\u8502"+
-        "\u4F1E\u6563\u6851\u55D3\u4E27\u6414\u9A9A\u626B"+
-        "\u5AC2\u745F\u8272\u6DA9\u68EE\u50E7\u838E\u7802"+
-        "\u6740\u5239\u6C99\u7EB1\u50BB\u5565\u715E\u7B5B"+
-        "\u6652\u73CA\u82EB\u6749\u5C71\u5220\u717D\u886B"+
-        "\u95EA\u9655\u64C5\u8D61\u81B3\u5584\u6C55\u6247"+
-        "\u7F2E\u5892\u4F24\u5546\u8D4F\u664C\u4E0A\u5C1A"+
-        "\u88F3\u68A2\u634E\u7A0D\u70E7\u828D\u52FA\u97F6"+
-        "\u5C11\u54E8\u90B5\u7ECD\u5962\u8D4A\u86C7\u820C"+
-        "\u820D\u8D66\u6444\u5C04\u6151\u6D89\u793E\u8BBE"+
-        "\u7837\u7533\u547B\u4F38\u8EAB\u6DF1\u5A20\u7EC5"+
-        "\u795E\u6C88\u5BA1\u5A76\u751A\u80BE\u614E\u6E17"+
-        "\u58F0\u751F\u7525\u7272\u5347\u7EF3\u8503\u8504"+
-        "\u8505\u8506\u8507\u8508\u8509\u850A\u850B\u850D"+
-        "\u850E\u850F\u8510\u8512\u8514\u8515\u8516\u8518"+
-        "\u8519\u851B\u851C\u851D\u851E\u8520\u8522\u8523"+
-        "\u8524\u8525\u8526\u8527\u8528\u8529\u852A\u852D"+
-        "\u852E\u852F\u8530\u8531\u8532\u8533\u8534\u8535"+
-        "\u8536\u853E\u853F\u8540\u8541\u8542\u8544\u8545"+
-        "\u8546\u8547\u854B\u854C\u854D\u854E\u854F\u8550"+
-        "\u8551\u8552\u8553\u8554\u8555\uFFFD\u8557\u8558"+
-        "\u855A\u855B\u855C\u855D\u855F\u8560\u8561\u8562"+
-        "\u8563\u8565\u8566\u8567\u8569\u856A\u856B\u856C"+
-        "\u856D\u856E\u856F\u8570\u8571\u8573\u8575\u8576"+
-        "\u8577\u8578\u857C\u857D\u857F\u8580\u8581\u7701"+
-        "\u76DB\u5269\u80DC\u5723\u5E08\u5931\u72EE\u65BD"+
-        "\u6E7F\u8BD7\u5C38\u8671\u5341\u77F3\u62FE\u65F6"+
-        "\u4EC0\u98DF\u8680\u5B9E\u8BC6\u53F2\u77E2\u4F7F"+
-        "\u5C4E\u9A76\u59CB\u5F0F\u793A\u58EB\u4E16\u67FF"+
-        "\u4E8B\u62ED\u8A93\u901D\u52BF\u662F\u55DC\u566C"+
-        "\u9002\u4ED5\u4F8D\u91CA\u9970\u6C0F\u5E02\u6043"+
-        "\u5BA4\u89C6\u8BD5\u6536\u624B\u9996\u5B88\u5BFF"+
-        "\u6388\u552E\u53D7\u7626\u517D\u852C\u67A2\u68B3"+
-        "\u6B8A\u6292\u8F93\u53D4\u8212\u6DD1\u758F\u4E66"+
-        "\u8D4E\u5B70\u719F\u85AF\u6691\u66D9\u7F72\u8700"+
-        "\u9ECD\u9F20\u5C5E\u672F\u8FF0\u6811\u675F\u620D"+
-        "\u7AD6\u5885\u5EB6\u6570\u6F31\u8582\u8583\u8586"+
-        "\u8588\u8589\u858A\u858B\u858C\u858D\u858E\u8590"+
-        "\u8591\u8592\u8593\u8594\u8595\u8596\u8597\u8598"+
-        "\u8599\u859A\u859D\u859E\u859F\u85A0\u85A1\u85A2"+
-        "\u85A3\u85A5\u85A6\u85A7\u85A9\u85AB\u85AC\u85AD"+
-        "\u85B1\u85B2\u85B3\u85B4\u85B5\u85B6\u85B8\u85BA"+
-        "\u85BB\u85BC\u85BD\u85BE\u85BF\u85C0\u85C2\u85C3"+
-        "\u85C4\u85C5\u85C6\u85C7\u85C8\u85CA\u85CB\u85CC"+
-        "\u85CD\u85CE\u85D1\u85D2\uFFFD\u85D4\u85D6\u85D7"+
-        "\u85D8\u85D9\u85DA\u85DB\u85DD\u85DE\u85DF\u85E0"+
-        "\u85E1\u85E2\u85E3\u85E5\u85E6\u85E7\u85E8\u85EA"+
-        "\u85EB\u85EC\u85ED\u85EE\u85EF\u85F0\u85F1\u85F2"+
-        "\u85F3\u85F4\u85F5\u85F6\u85F7\u85F8\u6055\u5237"+
-        "\u800D\u6454\u8870\u7529\u5E05\u6813\u62F4\u971C"+
-        "\u53CC\u723D\u8C01\u6C34\u7761\u7A0E\u542E\u77AC"+
-        "\u987A\u821C\u8BF4\u7855\u6714\u70C1\u65AF\u6495"+
-        "\u5636\u601D\u79C1\u53F8\u4E1D\u6B7B\u8086\u5BFA"+
-        "\u55E3\u56DB\u4F3A\u4F3C\u9972\u5DF3\u677E\u8038"+
-        "\u6002\u9882\u9001\u5B8B\u8BBC\u8BF5\u641C\u8258"+
-        "\u64DE\u55FD\u82CF\u9165\u4FD7\u7D20\u901F\u7C9F"+
-        "\u50F3\u5851\u6EAF\u5BBF\u8BC9\u8083\u9178\u849C"+
-        "\u7B97\u867D\u968B\u968F\u7EE5\u9AD3\u788E\u5C81"+
-        "\u7A57\u9042\u96A7\u795F\u5B59\u635F\u7B0B\u84D1"+
-        "\u68AD\u5506\u7F29\u7410\u7D22\u9501\u6240\u584C"+
-        "\u4ED6\u5B83\u5979\u5854\u85F9\u85FA\u85FC\u85FD"+
-        "\u85FE\u8600\u8601\u8602\u8603\u8604\u8606\u8607"+
-        "\u8608\u8609\u860A\u860B\u860C\u860D\u860E\u860F"+
-        "\u8610\u8612\u8613\u8614\u8615\u8617\u8618\u8619"+
-        "\u861A\u861B\u861C\u861D\u861E\u861F\u8620\u8621"+
-        "\u8622\u8623\u8624\u8625\u8626\u8628\u862A\u862B"+
-        "\u862C\u862D\u862E\u862F\u8630\u8631\u8632\u8633"+
-        "\u8634\u8635\u8636\u8637\u8639\u863A\u863B\u863D"+
-        "\u863E\u863F\u8640\uFFFD\u8641\u8642\u8643\u8644"+
-        "\u8645\u8646\u8647\u8648\u8649\u864A\u864B\u864C"+
-        "\u8652\u8653\u8655\u8656\u8657\u8658\u8659\u865B"+
-        "\u865C\u865D\u865F\u8660\u8661\u8663\u8664\u8665"+
-        "\u8666\u8667\u8668\u8669\u866A\u736D\u631E\u8E4B"+
-        "\u8E0F\u80CE\u82D4\u62AC\u53F0\u6CF0\u915E\u592A"+
-        "\u6001\u6C70\u574D\u644A\u8D2A\u762B\u6EE9\u575B"+
-        "\u6A80\u75F0\u6F6D\u8C2D\u8C08\u5766\u6BEF\u8892"+
-        "\u78B3\u63A2\u53F9\u70AD\u6C64\u5858\u642A\u5802"+
-        "\u68E0\u819B\u5510\u7CD6\u5018\u8EBA\u6DCC\u8D9F"+
-        "\u70EB\u638F\u6D9B\u6ED4\u7EE6\u8404\u6843\u9003"+
-        "\u6DD8\u9676\u8BA8\u5957\u7279\u85E4\u817E\u75BC"+
-        "\u8A8A\u68AF\u5254\u8E22\u9511\u63D0\u9898\u8E44"+
-        "\u557C\u4F53\u66FF\u568F\u60D5\u6D95\u5243\u5C49"+
-        "\u5929\u6DFB\u586B\u7530\u751C\u606C\u8214\u8146"+
-        "\u6311\u6761\u8FE2\u773A\u8DF3\u8D34\u94C1\u5E16"+
-        "\u5385\u542C\u70C3\u866D\u866F\u8670\u8672\u8673"+
-        "\u8674\u8675\u8676\u8677\u8678\u8683\u8684\u8685"+
-        "\u8686\u8687\u8688\u8689\u868E\u868F\u8690\u8691"+
-        "\u8692\u8694\u8696\u8697\u8698\u8699\u869A\u869B"+
-        "\u869E\u869F\u86A0\u86A1\u86A2\u86A5\u86A6\u86AB"+
-        "\u86AD\u86AE\u86B2\u86B3\u86B7\u86B8\u86B9\u86BB"+
-        "\u86BC\u86BD\u86BE\u86BF\u86C1\u86C2\u86C3\u86C5"+
-        "\u86C8\u86CC\u86CD\u86D2\u86D3\u86D5\u86D6\u86D7"+
-        "\u86DA\u86DC\uFFFD\u86DD\u86E0\u86E1\u86E2\u86E3"+
-        "\u86E5\u86E6\u86E7\u86E8\u86EA\u86EB\u86EC\u86EF"+
-        "\u86F5\u86F6\u86F7\u86FA\u86FB\u86FC\u86FD\u86FF"+
-        "\u8701\u8704\u8705\u8706\u870B\u870C\u870E\u870F"+
-        "\u8710\u8711\u8714\u8716\u6C40\u5EF7\u505C\u4EAD"+
-        "\u5EAD\u633A\u8247\u901A\u6850\u916E\u77B3\u540C"+
-        "\u94DC\u5F64\u7AE5\u6876\u6345\u7B52\u7EDF\u75DB"+
-        "\u5077\u6295\u5934\u900F\u51F8\u79C3\u7A81\u56FE"+
-        "\u5F92\u9014\u6D82\u5C60\u571F\u5410\u5154\u6E4D"+
-        "\u56E2\u63A8\u9893\u817F\u8715\u892A\u9000\u541E"+
-        "\u5C6F\u81C0\u62D6\u6258\u8131\u9E35\u9640\u9A6E"+
-        "\u9A7C\u692D\u59A5\u62D3\u553E\u6316\u54C7\u86D9"+
-        "\u6D3C\u5A03\u74E6\u889C\u6B6A\u5916\u8C4C\u5F2F"+
-        "\u6E7E\u73A9\u987D\u4E38\u70F7\u5B8C\u7897\u633D"+
-        "\u665A\u7696\u60CB\u5B9B\u5A49\u4E07\u8155\u6C6A"+
-        "\u738B\u4EA1\u6789\u7F51\u5F80\u65FA\u671B\u5FD8"+
-        "\u5984\u5A01\u8719\u871B\u871D\u871F\u8720\u8724"+
-        "\u8726\u8727\u8728\u872A\u872B\u872C\u872D\u872F"+
-        "\u8730\u8732\u8733\u8735\u8736\u8738\u8739\u873A"+
-        "\u873C\u873D\u8740\u8741\u8742\u8743\u8744\u8745"+
-        "\u8746\u874A\u874B\u874D\u874F\u8750\u8751\u8752"+
-        "\u8754\u8755\u8756\u8758\u875A\u875B\u875C\u875D"+
-        "\u875E\u875F\u8761\u8762\u8766\u8767\u8768\u8769"+
-        "\u876A\u876B\u876C\u876D\u876F\u8771\u8772\u8773"+
-        "\u8775\uFFFD\u8777\u8778\u8779\u877A\u877F\u8780"+
-        "\u8781\u8784\u8786\u8787\u8789\u878A\u878C\u878E"+
-        "\u878F\u8790\u8791\u8792\u8794\u8795\u8796\u8798"+
-        "\u8799\u879A\u879B\u879C\u879D\u879E\u87A0\u87A1"+
-        "\u87A2\u87A3\u87A4\u5DCD\u5FAE\u5371\u97E6\u8FDD"+
-        "\u6845\u56F4\u552F\u60DF\u4E3A\u6F4D\u7EF4\u82C7"+
-        "\u840E\u59D4\u4F1F\u4F2A\u5C3E\u7EAC\u672A\u851A"+
-        "\u5473\u754F\u80C3\u5582\u9B4F\u4F4D\u6E2D\u8C13"+
-        "\u5C09\u6170\u536B\u761F\u6E29\u868A\u6587\u95FB"+
-        "\u7EB9\u543B\u7A33\u7D0A\u95EE\u55E1\u7FC1\u74EE"+
-        "\u631D\u8717\u6DA1\u7A9D\u6211\u65A1\u5367\u63E1"+
-        "\u6C83\u5DEB\u545C\u94A8\u4E4C\u6C61\u8BEC\u5C4B"+
-        "\u65E0\u829C\u68A7\u543E\u5434\u6BCB\u6B66\u4E94"+
-        "\u6342\u5348\u821E\u4F0D\u4FAE\u575E\u620A\u96FE"+
-        "\u6664\u7269\u52FF\u52A1\u609F\u8BEF\u6614\u7199"+
-        "\u6790\u897F\u7852\u77FD\u6670\u563B\u5438\u9521"+
-        "\u727A\u87A5\u87A6\u87A7\u87A9\u87AA\u87AE\u87B0"+
-        "\u87B1\u87B2\u87B4\u87B6\u87B7\u87B8\u87B9\u87BB"+
-        "\u87BC\u87BE\u87BF\u87C1\u87C2\u87C3\u87C4\u87C5"+
-        "\u87C7\u87C8\u87C9\u87CC\u87CD\u87CE\u87CF\u87D0"+
-        "\u87D4\u87D5\u87D6\u87D7\u87D8\u87D9\u87DA\u87DC"+
-        "\u87DD\u87DE\u87DF\u87E1\u87E2\u87E3\u87E4\u87E6"+
-        "\u87E7\u87E8\u87E9\u87EB\u87EC\u87ED\u87EF\u87F0"+
-        "\u87F1\u87F2\u87F3\u87F4\u87F5\u87F6\u87F7\u87F8"+
-        "\uFFFD\u87FA\u87FB\u87FC\u87FD\u87FF\u8800\u8801"+
-        "\u8802\u8804\u8805\u8806\u8807\u8808\u8809\u880B"+
-        "\u880C\u880D\u880E\u880F\u8810\u8811\u8812\u8814"+
-        "\u8817\u8818\u8819\u881A\u881C\u881D\u881E\u881F"+
-        "\u8820\u8823\u7A00\u606F\u5E0C\u6089\u819D\u5915"+
-        "\u60DC\u7184\u70EF\u6EAA\u6C50\u7280\u6A84\u88AD"+
-        "\u5E2D\u4E60\u5AB3\u559C\u94E3\u6D17\u7CFB\u9699"+
-        "\u620F\u7EC6\u778E\u867E\u5323\u971E\u8F96\u6687"+
-        "\u5CE1\u4FA0\u72ED\u4E0B\u53A6\u590F\u5413\u6380"+
-        "\u9528\u5148\u4ED9\u9C9C\u7EA4\u54B8\u8D24\u8854"+
-        "\u8237\u95F2\u6D8E\u5F26\u5ACC\u663E\u9669\u73B0"+
-        "\u732E\u53BF\u817A\u9985\u7FA1\u5BAA\u9677\u9650"+
-        "\u7EBF\u76F8\u53A2\u9576\u9999\u7BB1\u8944\u6E58"+
-        "\u4E61\u7FD4\u7965\u8BE6\u60F3\u54CD\u4EAB\u9879"+
-        "\u5DF7\u6A61\u50CF\u5411\u8C61\u8427\u785D\u9704"+
-        "\u524A\u54EE\u56A3\u9500\u6D88\u5BB5\u6DC6\u6653";
-
-    private final static String innerIndex5=
-        "\u8824\u8825\u8826\u8827\u8828\u8829\u882A\u882B"+
-        "\u882C\u882D\u882E\u882F\u8830\u8831\u8833\u8834"+
-        "\u8835\u8836\u8837\u8838\u883A\u883B\u883D\u883E"+
-        "\u883F\u8841\u8842\u8843\u8846\u8847\u8848\u8849"+
-        "\u884A\u884B\u884E\u884F\u8850\u8851\u8852\u8853"+
-        "\u8855\u8856\u8858\u885A\u885B\u885C\u885D\u885E"+
-        "\u885F\u8860\u8866\u8867\u886A\u886D\u886F\u8871"+
-        "\u8873\u8874\u8875\u8876\u8878\u8879\u887A\uFFFD"+
-        "\u887B\u887C\u8880\u8883\u8886\u8887\u8889\u888A"+
-        "\u888C\u888E\u888F\u8890\u8891\u8893\u8894\u8895"+
-        "\u8897\u8898\u8899\u889A\u889B\u889D\u889E\u889F"+
-        "\u88A0\u88A1\u88A3\u88A5\u88A6\u88A7\u88A8\u88A9"+
-        "\u88AA\u5C0F\u5B5D\u6821\u8096\u5578\u7B11\u6548"+
-        "\u6954\u4E9B\u6B47\u874E\u978B\u534F\u631F\u643A"+
-        "\u90AA\u659C\u80C1\u8C10\u5199\u68B0\u5378\u87F9"+
-        "\u61C8\u6CC4\u6CFB\u8C22\u5C51\u85AA\u82AF\u950C"+
-        "\u6B23\u8F9B\u65B0\u5FFB\u5FC3\u4FE1\u8845\u661F"+
-        "\u8165\u7329\u60FA\u5174\u5211\u578B\u5F62\u90A2"+
-        "\u884C\u9192\u5E78\u674F\u6027\u59D3\u5144\u51F6"+
-        "\u80F8\u5308\u6C79\u96C4\u718A\u4F11\u4FEE\u7F9E"+
-        "\u673D\u55C5\u9508\u79C0\u8896\u7EE3\u589F\u620C"+
-        "\u9700\u865A\u5618\u987B\u5F90\u8BB8\u84C4\u9157"+
-        "\u53D9\u65ED\u5E8F\u755C\u6064\u7D6E\u5A7F\u7EEA"+
-        "\u7EED\u8F69\u55A7\u5BA3\u60AC\u65CB\u7384\u88AC"+
-        "\u88AE\u88AF\u88B0\u88B2\u88B3\u88B4\u88B5\u88B6"+
-        "\u88B8\u88B9\u88BA\u88BB\u88BD\u88BE\u88BF\u88C0"+
-        "\u88C3\u88C4\u88C7\u88C8\u88CA\u88CB\u88CC\u88CD"+
-        "\u88CF\u88D0\u88D1\u88D3\u88D6\u88D7\u88DA\u88DB"+
-        "\u88DC\u88DD\u88DE\u88E0\u88E1\u88E6\u88E7\u88E9"+
-        "\u88EA\u88EB\u88EC\u88ED\u88EE\u88EF\u88F2\u88F5"+
-        "\u88F6\u88F7\u88FA\u88FB\u88FD\u88FF\u8900\u8901"+
-        "\u8903\u8904\u8905\u8906\u8907\u8908\uFFFD\u8909"+
-        "\u890B\u890C\u890D\u890E\u890F\u8911\u8914\u8915"+
-        "\u8916\u8917\u8918\u891C\u891D\u891E\u891F\u8920"+
-        "\u8922\u8923\u8924\u8926\u8927\u8928\u8929\u892C"+
-        "\u892D\u892E\u892F\u8931\u8932\u8933\u8935\u8937"+
-        "\u9009\u7663\u7729\u7EDA\u9774\u859B\u5B66\u7A74"+
-        "\u96EA\u8840\u52CB\u718F\u5FAA\u65EC\u8BE2\u5BFB"+
-        "\u9A6F\u5DE1\u6B89\u6C5B\u8BAD\u8BAF\u900A\u8FC5"+
-        "\u538B\u62BC\u9E26\u9E2D\u5440\u4E2B\u82BD\u7259"+
-        "\u869C\u5D16\u8859\u6DAF\u96C5\u54D1\u4E9A\u8BB6"+
-        "\u7109\u54BD\u9609\u70DF\u6DF9\u76D0\u4E25\u7814"+
-        "\u8712\u5CA9\u5EF6\u8A00\u989C\u960E\u708E\u6CBF"+
-        "\u5944\u63A9\u773C\u884D\u6F14\u8273\u5830\u71D5"+
-        "\u538C\u781A\u96C1\u5501\u5F66\u7130\u5BB4\u8C1A"+
-        "\u9A8C\u6B83\u592E\u9E2F\u79E7\u6768\u626C\u4F6F"+
-        "\u75A1\u7F8A\u6D0B\u9633\u6C27\u4EF0\u75D2\u517B"+
-        "\u6837\u6F3E\u9080\u8170\u5996\u7476\u8938\u8939"+
-        "\u893A\u893B\u893C\u893D\u893E\u893F\u8940\u8942"+
-        "\u8943\u8945\u8946\u8947\u8948\u8949\u894A\u894B"+
-        "\u894C\u894D\u894E\u894F\u8950\u8951\u8952\u8953"+
-        "\u8954\u8955\u8956\u8957\u8958\u8959\u895A\u895B"+
-        "\u895C\u895D\u8960\u8961\u8962\u8963\u8964\u8965"+
-        "\u8967\u8968\u8969\u896A\u896B\u896C\u896D\u896E"+
-        "\u896F\u8970\u8971\u8972\u8973\u8974\u8975\u8976"+
-        "\u8977\u8978\u8979\u897A\u897C\uFFFD\u897D\u897E"+
-        "\u8980\u8982\u8984\u8985\u8987\u8988\u8989\u898A"+
-        "\u898B\u898C\u898D\u898E\u898F\u8990\u8991\u8992"+
-        "\u8993\u8994\u8995\u8996\u8997\u8998\u8999\u899A"+
-        "\u899B\u899C\u899D\u899E\u899F\u89A0\u89A1\u6447"+
-        "\u5C27\u9065\u7A91\u8C23\u59DA\u54AC\u8200\u836F"+
-        "\u8981\u8000\u6930\u564E\u8036\u7237\u91CE\u51B6"+
-        "\u4E5F\u9875\u6396\u4E1A\u53F6\u66F3\u814B\u591C"+
-        "\u6DB2\u4E00\u58F9\u533B\u63D6\u94F1\u4F9D\u4F0A"+
-        "\u8863\u9890\u5937\u9057\u79FB\u4EEA\u80F0\u7591"+
-        "\u6C82\u5B9C\u59E8\u5F5D\u6905\u8681\u501A\u5DF2"+
-        "\u4E59\u77E3\u4EE5\u827A\u6291\u6613\u9091\u5C79"+
-        "\u4EBF\u5F79\u81C6\u9038\u8084\u75AB\u4EA6\u88D4"+
-        "\u610F\u6BC5\u5FC6\u4E49\u76CA\u6EA2\u8BE3\u8BAE"+
-        "\u8C0A\u8BD1\u5F02\u7FFC\u7FCC\u7ECE\u8335\u836B"+
-        "\u56E0\u6BB7\u97F3\u9634\u59FB\u541F\u94F6\u6DEB"+
-        "\u5BC5\u996E\u5C39\u5F15\u9690\u89A2\u89A3\u89A4"+
-        "\u89A5\u89A6\u89A7\u89A8\u89A9\u89AA\u89AB\u89AC"+
-        "\u89AD\u89AE\u89AF\u89B0\u89B1\u89B2\u89B3\u89B4"+
-        "\u89B5\u89B6\u89B7\u89B8\u89B9\u89BA\u89BB\u89BC"+
-        "\u89BD\u89BE\u89BF\u89C0\u89C3\u89CD\u89D3\u89D4"+
-        "\u89D5\u89D7\u89D8\u89D9\u89DB\u89DD\u89DF\u89E0"+
-        "\u89E1\u89E2\u89E4\u89E7\u89E8\u89E9\u89EA\u89EC"+
-        "\u89ED\u89EE\u89F0\u89F1\u89F2\u89F4\u89F5\u89F6"+
-        "\u89F7\u89F8\u89F9\u89FA\uFFFD\u89FB\u89FC\u89FD"+
-        "\u89FE\u89FF\u8A01\u8A02\u8A03\u8A04\u8A05\u8A06"+
-        "\u8A08\u8A09\u8A0A\u8A0B\u8A0C\u8A0D\u8A0E\u8A0F"+
-        "\u8A10\u8A11\u8A12\u8A13\u8A14\u8A15\u8A16\u8A17"+
-        "\u8A18\u8A19\u8A1A\u8A1B\u8A1C\u8A1D\u5370\u82F1"+
-        "\u6A31\u5A74\u9E70\u5E94\u7F28\u83B9\u8424\u8425"+
-        "\u8367\u8747\u8FCE\u8D62\u76C8\u5F71\u9896\u786C"+
-        "\u6620\u54DF\u62E5\u4F63\u81C3\u75C8\u5EB8\u96CD"+
-        "\u8E0A\u86F9\u548F\u6CF3\u6D8C\u6C38\u607F\u52C7"+
-        "\u7528\u5E7D\u4F18\u60A0\u5FE7\u5C24\u7531\u90AE"+
-        "\u94C0\u72B9\u6CB9\u6E38\u9149\u6709\u53CB\u53F3"+
-        "\u4F51\u91C9\u8BF1\u53C8\u5E7C\u8FC2\u6DE4\u4E8E"+
-        "\u76C2\u6986\u865E\u611A\u8206\u4F59\u4FDE\u903E"+
-        "\u9C7C\u6109\u6E1D\u6E14\u9685\u4E88\u5A31\u96E8"+
-        "\u4E0E\u5C7F\u79B9\u5B87\u8BED\u7FBD\u7389\u57DF"+
-        "\u828B\u90C1\u5401\u9047\u55BB\u5CEA\u5FA1\u6108"+
-        "\u6B32\u72F1\u80B2\u8A89\u8A1E\u8A1F\u8A20\u8A21"+
-        "\u8A22\u8A23\u8A24\u8A25\u8A26\u8A27\u8A28\u8A29"+
-        "\u8A2A\u8A2B\u8A2C\u8A2D\u8A2E\u8A2F\u8A30\u8A31"+
-        "\u8A32\u8A33\u8A34\u8A35\u8A36\u8A37\u8A38\u8A39"+
-        "\u8A3A\u8A3B\u8A3C\u8A3D\u8A3F\u8A40\u8A41\u8A42"+
-        "\u8A43\u8A44\u8A45\u8A46\u8A47\u8A49\u8A4A\u8A4B"+
-        "\u8A4C\u8A4D\u8A4E\u8A4F\u8A50\u8A51\u8A52\u8A53"+
-        "\u8A54\u8A55\u8A56\u8A57\u8A58\u8A59\u8A5A\u8A5B"+
-        "\u8A5C\u8A5D\u8A5E\uFFFD\u8A5F\u8A60\u8A61\u8A62"+
-        "\u8A63\u8A64\u8A65\u8A66\u8A67\u8A68\u8A69\u8A6A"+
-        "\u8A6B\u8A6C\u8A6D\u8A6E\u8A6F\u8A70\u8A71\u8A72"+
-        "\u8A73\u8A74\u8A75\u8A76\u8A77\u8A78\u8A7A\u8A7B"+
-        "\u8A7C\u8A7D\u8A7E\u8A7F\u8A80\u6D74\u5BD3\u88D5"+
-        "\u9884\u8C6B\u9A6D\u9E33\u6E0A\u51A4\u5143\u57A3"+
-        "\u8881\u539F\u63F4\u8F95\u56ED\u5458\u5706\u733F"+
-        "\u6E90\u7F18\u8FDC\u82D1\u613F\u6028\u9662\u66F0"+
-        "\u7EA6\u8D8A\u8DC3\u94A5\u5CB3\u7CA4\u6708\u60A6"+
-        "\u9605\u8018\u4E91\u90E7\u5300\u9668\u5141\u8FD0"+
-        "\u8574\u915D\u6655\u97F5\u5B55\u531D\u7838\u6742"+
-        "\u683D\u54C9\u707E\u5BB0\u8F7D\u518D\u5728\u54B1"+
-        "\u6512\u6682\u8D5E\u8D43\u810F\u846C\u906D\u7CDF"+
-        "\u51FF\u85FB\u67A3\u65E9\u6FA1\u86A4\u8E81\u566A"+
-        "\u9020\u7682\u7076\u71E5\u8D23\u62E9\u5219\u6CFD"+
-        "\u8D3C\u600E\u589E\u618E\u66FE\u8D60\u624E\u55B3"+
-        "\u6E23\u672D\u8F67\u8A81\u8A82\u8A83\u8A84\u8A85"+
-        "\u8A86\u8A87\u8A88\u8A8B\u8A8C\u8A8D\u8A8E\u8A8F"+
-        "\u8A90\u8A91\u8A92\u8A94\u8A95\u8A96\u8A97\u8A98"+
-        "\u8A99\u8A9A\u8A9B\u8A9C\u8A9D\u8A9E\u8A9F\u8AA0"+
-        "\u8AA1\u8AA2\u8AA3\u8AA4\u8AA5\u8AA6\u8AA7\u8AA8"+
-        "\u8AA9\u8AAA\u8AAB\u8AAC\u8AAD\u8AAE\u8AAF\u8AB0"+
-        "\u8AB1\u8AB2\u8AB3\u8AB4\u8AB5\u8AB6\u8AB7\u8AB8"+
-        "\u8AB9\u8ABA\u8ABB\u8ABC\u8ABD\u8ABE\u8ABF\u8AC0"+
-        "\u8AC1\u8AC2\uFFFD\u8AC3\u8AC4\u8AC5\u8AC6\u8AC7"+
-        "\u8AC8\u8AC9\u8ACA\u8ACB\u8ACC\u8ACD\u8ACE\u8ACF"+
-        "\u8AD0\u8AD1\u8AD2\u8AD3\u8AD4\u8AD5\u8AD6\u8AD7"+
-        "\u8AD8\u8AD9\u8ADA\u8ADB\u8ADC\u8ADD\u8ADE\u8ADF"+
-        "\u8AE0\u8AE1\u8AE2\u8AE3\u94E1\u95F8\u7728\u6805"+
-        "\u69A8\u548B\u4E4D\u70B8\u8BC8\u6458\u658B\u5B85"+
-        "\u7A84\u503A\u5BE8\u77BB\u6BE1\u8A79\u7C98\u6CBE"+
-        "\u76CF\u65A9\u8F97\u5D2D\u5C55\u8638\u6808\u5360"+
-        "\u6218\u7AD9\u6E5B\u7EFD\u6A1F\u7AE0\u5F70\u6F33"+
-        "\u5F20\u638C\u6DA8\u6756\u4E08\u5E10\u8D26\u4ED7"+
-        "\u80C0\u7634\u969C\u62DB\u662D\u627E\u6CBC\u8D75"+
-        "\u7167\u7F69\u5146\u8087\u53EC\u906E\u6298\u54F2"+
-        "\u86F0\u8F99\u8005\u9517\u8517\u8FD9\u6D59\u73CD"+
-        "\u659F\u771F\u7504\u7827\u81FB\u8D1E\u9488\u4FA6"+
-        "\u6795\u75B9\u8BCA\u9707\u632F\u9547\u9635\u84B8"+
-        "\u6323\u7741\u5F81\u72F0\u4E89\u6014\u6574\u62EF"+
-        "\u6B63\u653F\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8\u8AE9"+
-        "\u8AEA\u8AEB\u8AEC\u8AED\u8AEE\u8AEF\u8AF0\u8AF1"+
-        "\u8AF2\u8AF3\u8AF4\u8AF5\u8AF6\u8AF7\u8AF8\u8AF9"+
-        "\u8AFA\u8AFB\u8AFC\u8AFD\u8AFE\u8AFF\u8B00\u8B01"+
-        "\u8B02\u8B03\u8B04\u8B05\u8B06\u8B08\u8B09\u8B0A"+
-        "\u8B0B\u8B0C\u8B0D\u8B0E\u8B0F\u8B10\u8B11\u8B12"+
-        "\u8B13\u8B14\u8B15\u8B16\u8B17\u8B18\u8B19\u8B1A"+
-        "\u8B1B\u8B1C\u8B1D\u8B1E\u8B1F\u8B20\u8B21\u8B22"+
-        "\u8B23\uFFFD\u8B24\u8B25\u8B27\u8B28\u8B29\u8B2A"+
-        "\u8B2B\u8B2C\u8B2D\u8B2E\u8B2F\u8B30\u8B31\u8B32"+
-        "\u8B33\u8B34\u8B35\u8B36\u8B37\u8B38\u8B39\u8B3A"+
-        "\u8B3B\u8B3C\u8B3D\u8B3E\u8B3F\u8B40\u8B41\u8B42"+
-        "\u8B43\u8B44\u8B45\u5E27\u75C7\u90D1\u8BC1\u829D"+
-        "\u679D\u652F\u5431\u8718\u77E5\u80A2\u8102\u6C41"+
-        "\u4E4B\u7EC7\u804C\u76F4\u690D\u6B96\u6267\u503C"+
-        "\u4F84\u5740\u6307\u6B62\u8DBE\u53EA\u65E8\u7EB8"+
-        "\u5FD7\u631A\u63B7\u81F3\u81F4\u7F6E\u5E1C\u5CD9"+
-        "\u5236\u667A\u79E9\u7A1A\u8D28\u7099\u75D4\u6EDE"+
-        "\u6CBB\u7A92\u4E2D\u76C5\u5FE0\u949F\u8877\u7EC8"+
-        "\u79CD\u80BF\u91CD\u4EF2\u4F17\u821F\u5468\u5DDE"+
-        "\u6D32\u8BCC\u7CA5\u8F74\u8098\u5E1A\u5492\u76B1"+
-        "\u5B99\u663C\u9AA4\u73E0\u682A\u86DB\u6731\u732A"+
-        "\u8BF8\u8BDB\u9010\u7AF9\u70DB\u716E\u62C4\u77A9"+
-        "\u5631\u4E3B\u8457\u67F1\u52A9\u86C0\u8D2E\u94F8"+
-        "\u7B51\u8B46\u8B47\u8B48\u8B49\u8B4A\u8B4B\u8B4C"+
-        "\u8B4D\u8B4E\u8B4F\u8B50\u8B51\u8B52\u8B53\u8B54"+
-        "\u8B55\u8B56\u8B57\u8B58\u8B59\u8B5A\u8B5B\u8B5C"+
-        "\u8B5D\u8B5E\u8B5F\u8B60\u8B61\u8B62\u8B63\u8B64"+
-        "\u8B65\u8B67\u8B68\u8B69\u8B6A\u8B6B\u8B6D\u8B6E"+
-        "\u8B6F\u8B70\u8B71\u8B72\u8B73\u8B74\u8B75\u8B76"+
-        "\u8B77\u8B78\u8B79\u8B7A\u8B7B\u8B7C\u8B7D\u8B7E"+
-        "\u8B7F\u8B80\u8B81\u8B82\u8B83\u8B84\u8B85\u8B86"+
-        "\uFFFD\u8B87\u8B88\u8B89\u8B8A\u8B8B\u8B8C\u8B8D"+
-        "\u8B8E\u8B8F\u8B90\u8B91\u8B92\u8B93\u8B94\u8B95"+
-        "\u8B96\u8B97\u8B98\u8B99\u8B9A\u8B9B\u8B9C\u8B9D"+
-        "\u8B9E\u8B9F\u8BAC\u8BB1\u8BBB\u8BC7\u8BD0\u8BEA"+
-        "\u8C09\u8C1E\u4F4F\u6CE8\u795D\u9A7B\u6293\u722A"+
-        "\u62FD\u4E13\u7816\u8F6C\u64B0\u8D5A\u7BC6\u6869"+
-        "\u5E84\u88C5\u5986\u649E\u58EE\u72B6\u690E\u9525"+
-        "\u8FFD\u8D58\u5760\u7F00\u8C06\u51C6\u6349\u62D9"+
-        "\u5353\u684C\u7422\u8301\u914C\u5544\u7740\u707C"+
-        "\u6D4A\u5179\u54A8\u8D44\u59FF\u6ECB\u6DC4\u5B5C"+
-        "\u7D2B\u4ED4\u7C7D\u6ED3\u5B50\u81EA\u6E0D\u5B57"+
-        "\u9B03\u68D5\u8E2A\u5B97\u7EFC\u603B\u7EB5\u90B9"+
-        "\u8D70\u594F\u63CD\u79DF\u8DB3\u5352\u65CF\u7956"+
-        "\u8BC5\u963B\u7EC4\u94BB\u7E82\u5634\u9189\u6700"+
-        "\u7F6A\u5C0A\u9075\u6628\u5DE6\u4F50\u67DE\u505A"+
-        "\u4F5C\u5750\u5EA7\uE810\uE811\uE812\uE813\uE814"+
-        "\u8C38\u8C39\u8C3A\u8C3B\u8C3C\u8C3D\u8C3E\u8C3F"+
-        "\u8C40\u8C42\u8C43\u8C44\u8C45\u8C48\u8C4A\u8C4B"+
-        "\u8C4D\u8C4E\u8C4F\u8C50\u8C51\u8C52\u8C53\u8C54"+
-        "\u8C56\u8C57\u8C58\u8C59\u8C5B\u8C5C\u8C5D\u8C5E"+
-        "\u8C5F\u8C60\u8C63\u8C64\u8C65\u8C66\u8C67\u8C68"+
-        "\u8C69\u8C6C\u8C6D\u8C6E\u8C6F\u8C70\u8C71\u8C72"+
-        "\u8C74\u8C75\u8C76\u8C77\u8C7B\u8C7C\u8C7D\u8C7E"+
-        "\u8C7F\u8C80\u8C81\u8C83\u8C84\u8C86\u8C87\uFFFD"+
-        "\u8C88\u8C8B\u8C8D\u8C8E\u8C8F\u8C90\u8C91\u8C92"+
-        "\u8C93\u8C95\u8C96\u8C97\u8C99\u8C9A\u8C9B\u8C9C"+
-        "\u8C9D\u8C9E\u8C9F\u8CA0\u8CA1\u8CA2\u8CA3\u8CA4"+
-        "\u8CA5\u8CA6\u8CA7\u8CA8\u8CA9\u8CAA\u8CAB\u8CAC"+
-        "\u8CAD\u4E8D\u4E0C\u5140\u4E10\u5EFF\u5345\u4E15"+
-        "\u4E98\u4E1E\u9B32\u5B6C\u5669\u4E28\u79BA\u4E3F"+
-        "\u5315\u4E47\u592D\u723B\u536E\u6C10\u56DF\u80E4"+
-        "\u9997\u6BD3\u777E\u9F17\u4E36\u4E9F\u9F10\u4E5C"+
-        "\u4E69\u4E93\u8288\u5B5B\u556C\u560F\u4EC4\u538D"+
-        "\u539D\u53A3\u53A5\u53AE\u9765\u8D5D\u531A\u53F5"+
-        "\u5326\u532E\u533E\u8D5C\u5366\u5363\u5202\u5208"+
-        "\u520E\u522D\u5233\u523F\u5240\u524C\u525E\u5261"+
-        "\u525C\u84AF\u527D\u5282\u5281\u5290\u5293\u5182"+
-        "\u7F54\u4EBB\u4EC3\u4EC9\u4EC2\u4EE8\u4EE1\u4EEB"+
-        "\u4EDE\u4F1B\u4EF3\u4F22\u4F64\u4EF5\u4F25\u4F27"+
-        "\u4F09\u4F2B\u4F5E\u4F67\u6538\u4F5A\u4F5D\u8CAE"+
-        "\u8CAF\u8CB0\u8CB1\u8CB2\u8CB3\u8CB4\u8CB5\u8CB6"+
-        "\u8CB7\u8CB8\u8CB9\u8CBA\u8CBB\u8CBC\u8CBD\u8CBE"+
-        "\u8CBF\u8CC0\u8CC1\u8CC2\u8CC3\u8CC4\u8CC5\u8CC6"+
-        "\u8CC7\u8CC8\u8CC9\u8CCA\u8CCB\u8CCC\u8CCD\u8CCE"+
-        "\u8CCF\u8CD0\u8CD1\u8CD2\u8CD3\u8CD4\u8CD5\u8CD6"+
-        "\u8CD7\u8CD8\u8CD9\u8CDA\u8CDB\u8CDC\u8CDD\u8CDE"+
-        "\u8CDF\u8CE0\u8CE1\u8CE2\u8CE3\u8CE4\u8CE5\u8CE6"+
-        "\u8CE7\u8CE8\u8CE9\u8CEA\u8CEB\u8CEC\uFFFD\u8CED"+
-        "\u8CEE\u8CEF\u8CF0\u8CF1\u8CF2\u8CF3\u8CF4\u8CF5"+
-        "\u8CF6\u8CF7\u8CF8\u8CF9\u8CFA\u8CFB\u8CFC\u8CFD"+
-        "\u8CFE\u8CFF\u8D00\u8D01\u8D02\u8D03\u8D04\u8D05"+
-        "\u8D06\u8D07\u8D08\u8D09\u8D0A\u8D0B\u8D0C\u8D0D"+
-        "\u4F5F\u4F57\u4F32\u4F3D\u4F76\u4F74\u4F91\u4F89"+
-        "\u4F83\u4F8F\u4F7E\u4F7B\u4FAA\u4F7C\u4FAC\u4F94"+
-        "\u4FE6\u4FE8\u4FEA\u4FC5\u4FDA\u4FE3\u4FDC\u4FD1"+
-        "\u4FDF\u4FF8\u5029\u504C\u4FF3\u502C\u500F\u502E"+
-        "\u502D\u4FFE\u501C\u500C\u5025\u5028\u507E\u5043"+
-        "\u5055\u5048\u504E\u506C\u507B\u50A5\u50A7\u50A9"+
-        "\u50BA\u50D6\u5106\u50ED\u50EC\u50E6\u50EE\u5107"+
-        "\u510B\u4EDD\u6C3D\u4F58\u4F65\u4FCE\u9FA0\u6C46"+
-        "\u7C74\u516E\u5DFD\u9EC9\u9998\u5181\u5914\u52F9"+
-        "\u530D\u8A07\u5310\u51EB\u5919\u5155\u4EA0\u5156"+
-        "\u4EB3\u886E\u88A4\u4EB5\u8114\u88D2\u7980\u5B34"+
-        "\u8803\u7FB8\u51AB\u51B1\u51BD\u51BC\u8D0E\u8D0F"+
-        "\u8D10\u8D11\u8D12\u8D13\u8D14\u8D15\u8D16\u8D17"+
-        "\u8D18\u8D19\u8D1A\u8D1B\u8D1C\u8D20\u8D51\u8D52"+
-        "\u8D57\u8D5F\u8D65\u8D68\u8D69\u8D6A\u8D6C\u8D6E"+
-        "\u8D6F\u8D71\u8D72\u8D78\u8D79\u8D7A\u8D7B\u8D7C"+
-        "\u8D7D\u8D7E\u8D7F\u8D80\u8D82\u8D83\u8D86\u8D87"+
-        "\u8D88\u8D89\u8D8C\u8D8D\u8D8E\u8D8F\u8D90\u8D92"+
-        "\u8D93\u8D95\u8D96\u8D97\u8D98\u8D99\u8D9A\u8D9B"+
-        "\u8D9C\u8D9D\u8D9E\u8DA0\u8DA1\uFFFD\u8DA2\u8DA4"+
-        "\u8DA5\u8DA6\u8DA7\u8DA8\u8DA9\u8DAA\u8DAB\u8DAC"+
-        "\u8DAD\u8DAE\u8DAF\u8DB0\u8DB2\u8DB6\u8DB7\u8DB9"+
-        "\u8DBB\u8DBD\u8DC0\u8DC1\u8DC2\u8DC5\u8DC7\u8DC8"+
-        "\u8DC9\u8DCA\u8DCD\u8DD0\u8DD2\u8DD3\u8DD4\u51C7"+
-        "\u5196\u51A2\u51A5\u8BA0\u8BA6\u8BA7\u8BAA\u8BB4"+
-        "\u8BB5\u8BB7\u8BC2\u8BC3\u8BCB\u8BCF\u8BCE\u8BD2"+
-        "\u8BD3\u8BD4\u8BD6\u8BD8\u8BD9\u8BDC\u8BDF\u8BE0"+
-        "\u8BE4\u8BE8\u8BE9\u8BEE\u8BF0\u8BF3\u8BF6\u8BF9"+
-        "\u8BFC\u8BFF\u8C00\u8C02\u8C04\u8C07\u8C0C\u8C0F"+
-        "\u8C11\u8C12\u8C14\u8C15\u8C16\u8C19\u8C1B\u8C18"+
-        "\u8C1D\u8C1F\u8C20\u8C21\u8C25\u8C27\u8C2A\u8C2B"+
-        "\u8C2E\u8C2F\u8C32\u8C33\u8C35\u8C36\u5369\u537A"+
-        "\u961D\u9622\u9621\u9631\u962A\u963D\u963C\u9642"+
-        "\u9649\u9654\u965F\u9667\u966C\u9672\u9674\u9688"+
-        "\u968D\u9697\u96B0\u9097\u909B\u909D\u9099\u90AC"+
-        "\u90A1\u90B4\u90B3\u90B6\u90BA\u8DD5\u8DD8\u8DD9"+
-        "\u8DDC\u8DE0\u8DE1\u8DE2\u8DE5\u8DE6\u8DE7\u8DE9"+
-        "\u8DED\u8DEE\u8DF0\u8DF1\u8DF2\u8DF4\u8DF6\u8DFC"+
-        "\u8DFE\u8DFF\u8E00\u8E01\u8E02\u8E03\u8E04\u8E06"+
-        "\u8E07\u8E08\u8E0B\u8E0D\u8E0E\u8E10\u8E11\u8E12"+
-        "\u8E13\u8E15\u8E16\u8E17\u8E18\u8E19\u8E1A\u8E1B"+
-        "\u8E1C\u8E20\u8E21\u8E24\u8E25\u8E26\u8E27\u8E28"+
-        "\u8E2B\u8E2D\u8E30\u8E32\u8E33\u8E34\u8E36\u8E37"+
-        "\u8E38\u8E3B\u8E3C\u8E3E\uFFFD\u8E3F\u8E43\u8E45"+
-        "\u8E46\u8E4C\u8E4D\u8E4E\u8E4F\u8E50\u8E53\u8E54"+
-        "\u8E55\u8E56\u8E57\u8E58\u8E5A\u8E5B\u8E5C\u8E5D"+
-        "\u8E5E\u8E5F\u8E60\u8E61\u8E62\u8E63\u8E64\u8E65"+
-        "\u8E67\u8E68\u8E6A\u8E6B\u8E6E\u8E71\u90B8\u90B0"+
-        "\u90CF\u90C5\u90BE\u90D0\u90C4\u90C7\u90D3\u90E6"+
-        "\u90E2\u90DC\u90D7\u90DB\u90EB\u90EF\u90FE\u9104"+
-        "\u9122\u911E\u9123\u9131\u912F\u9139\u9143\u9146"+
-        "\u520D\u5942\u52A2\u52AC\u52AD\u52BE\u54FF\u52D0"+
-        "\u52D6\u52F0\u53DF\u71EE\u77CD\u5EF4\u51F5\u51FC"+
-        "\u9B2F\u53B6\u5F01\u755A\u5DEF\u574C\u57A9\u57A1"+
-        "\u587E\u58BC\u58C5\u58D1\u5729\u572C\u572A\u5733"+
-        "\u5739\u572E\u572F\u575C\u573B\u5742\u5769\u5785"+
-        "\u576B\u5786\u577C\u577B\u5768\u576D\u5776\u5773"+
-        "\u57AD\u57A4\u578C\u57B2\u57CF\u57A7\u57B4\u5793"+
-        "\u57A0\u57D5\u57D8\u57DA\u57D9\u57D2\u57B8\u57F4"+
-        "\u57EF\u57F8\u57E4\u57DD\u8E73\u8E75\u8E77\u8E78"+
-        "\u8E79\u8E7A\u8E7B\u8E7D\u8E7E\u8E80\u8E82\u8E83"+
-        "\u8E84\u8E86\u8E88\u8E89\u8E8A\u8E8B\u8E8C\u8E8D"+
-        "\u8E8E\u8E91\u8E92\u8E93\u8E95\u8E96\u8E97\u8E98"+
-        "\u8E99\u8E9A\u8E9B\u8E9D\u8E9F\u8EA0\u8EA1\u8EA2"+
-        "\u8EA3\u8EA4\u8EA5\u8EA6\u8EA7\u8EA8\u8EA9\u8EAA"+
-        "\u8EAD\u8EAE\u8EB0\u8EB1\u8EB3\u8EB4\u8EB5\u8EB6"+
-        "\u8EB7\u8EB8\u8EB9\u8EBB\u8EBC\u8EBD\u8EBE\u8EBF"+
-        "\u8EC0\u8EC1\u8EC2\uFFFD\u8EC3\u8EC4\u8EC5\u8EC6"+
-        "\u8EC7\u8EC8\u8EC9\u8ECA\u8ECB\u8ECC\u8ECD\u8ECF"+
-        "\u8ED0\u8ED1\u8ED2\u8ED3\u8ED4\u8ED5\u8ED6\u8ED7"+
-        "\u8ED8\u8ED9\u8EDA\u8EDB\u8EDC\u8EDD\u8EDE\u8EDF"+
-        "\u8EE0\u8EE1\u8EE2\u8EE3\u8EE4\u580B\u580D\u57FD"+
-        "\u57ED\u5800\u581E\u5819\u5844\u5820\u5865\u586C"+
-        "\u5881\u5889\u589A\u5880\u99A8\u9F19\u61FF\u8279"+
-        "\u827D\u827F\u828F\u828A\u82A8\u8284\u828E\u8291"+
-        "\u8297\u8299\u82AB\u82B8\u82BE\u82B0\u82C8\u82CA"+
-        "\u82E3\u8298\u82B7\u82AE\u82CB\u82CC\u82C1\u82A9"+
-        "\u82B4\u82A1\u82AA\u829F\u82C4\u82CE\u82A4\u82E1"+
-        "\u8309\u82F7\u82E4\u830F\u8307\u82DC\u82F4\u82D2"+
-        "\u82D8\u830C\u82FB\u82D3\u8311\u831A\u8306\u8314"+
-        "\u8315\u82E0\u82D5\u831C\u8351\u835B\u835C\u8308"+
-        "\u8392\u833C\u8334\u8331\u839B\u835E\u832F\u834F"+
-        "\u8347\u8343\u835F\u8340\u8317\u8360\u832D\u833A"+
-        "\u8333\u8366\u8365\u8EE5\u8EE6\u8EE7\u8EE8\u8EE9"+
-        "\u8EEA\u8EEB\u8EEC\u8EED\u8EEE\u8EEF\u8EF0\u8EF1"+
-        "\u8EF2\u8EF3\u8EF4\u8EF5\u8EF6\u8EF7\u8EF8\u8EF9"+
-        "\u8EFA\u8EFB\u8EFC\u8EFD\u8EFE\u8EFF\u8F00\u8F01"+
-        "\u8F02\u8F03\u8F04\u8F05\u8F06\u8F07\u8F08\u8F09"+
-        "\u8F0A\u8F0B\u8F0C\u8F0D\u8F0E\u8F0F\u8F10\u8F11"+
-        "\u8F12\u8F13\u8F14\u8F15\u8F16\u8F17\u8F18\u8F19"+
-        "\u8F1A\u8F1B\u8F1C\u8F1D\u8F1E\u8F1F\u8F20\u8F21"+
-        "\u8F22\u8F23\uFFFD\u8F24\u8F25\u8F26\u8F27\u8F28"+
-        "\u8F29\u8F2A\u8F2B\u8F2C\u8F2D\u8F2E\u8F2F\u8F30"+
-        "\u8F31\u8F32\u8F33\u8F34\u8F35\u8F36\u8F37\u8F38"+
-        "\u8F39\u8F3A\u8F3B\u8F3C\u8F3D\u8F3E\u8F3F\u8F40"+
-        "\u8F41\u8F42\u8F43\u8F44\u8368\u831B\u8369\u836C"+
-        "\u836A\u836D\u836E\u83B0\u8378\u83B3\u83B4\u83A0"+
-        "\u83AA\u8393\u839C\u8385\u837C\u83B6\u83A9\u837D"+
-        "\u83B8\u837B\u8398\u839E\u83A8\u83BA\u83BC\u83C1"+
-        "\u8401\u83E5\u83D8\u5807\u8418\u840B\u83DD\u83FD"+
-        "\u83D6\u841C\u8438\u8411\u8406\u83D4\u83DF\u840F"+
-        "\u8403\u83F8\u83F9\u83EA\u83C5\u83C0\u8426\u83F0"+
-        "\u83E1\u845C\u8451\u845A\u8459\u8473\u8487\u8488"+
-        "\u847A\u8489\u8478\u843C\u8446\u8469\u8476\u848C"+
-        "\u848E\u8431\u846D\u84C1\u84CD\u84D0\u84E6\u84BD"+
-        "\u84D3\u84CA\u84BF\u84BA\u84E0\u84A1\u84B9\u84B4"+
-        "\u8497\u84E5\u84E3\u850C\u750D\u8538\u84F0\u8539"+
-        "\u851F\u853A\u8F45\u8F46\u8F47\u8F48\u8F49\u8F4A"+
-        "\u8F4B\u8F4C\u8F4D\u8F4E\u8F4F\u8F50\u8F51\u8F52"+
-        "\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58\u8F59\u8F5A"+
-        "\u8F5B\u8F5C\u8F5D\u8F5E\u8F5F\u8F60\u8F61\u8F62"+
-        "\u8F63\u8F64\u8F65\u8F6A\u8F80\u8F8C\u8F92\u8F9D"+
-        "\u8FA0\u8FA1\u8FA2\u8FA4\u8FA5\u8FA6\u8FA7\u8FAA"+
-        "\u8FAC\u8FAD\u8FAE\u8FAF\u8FB2\u8FB3\u8FB4\u8FB5"+
-        "\u8FB7\u8FB8\u8FBA\u8FBB\u8FBC\u8FBF\u8FC0\u8FC3"+
-        "\u8FC6\uFFFD\u8FC9\u8FCA\u8FCB\u8FCC\u8FCD\u8FCF"+
-        "\u8FD2\u8FD6\u8FD7\u8FDA\u8FE0\u8FE1\u8FE3\u8FE7"+
-        "\u8FEC\u8FEF\u8FF1\u8FF2\u8FF4\u8FF5\u8FF6\u8FFA"+
-        "\u8FFB\u8FFC\u8FFE\u8FFF\u9007\u9008\u900C\u900E"+
-        "\u9013\u9015\u9018\u8556\u853B\u84FF\u84FC\u8559"+
-        "\u8548\u8568\u8564\u855E\u857A\u77A2\u8543\u8572"+
-        "\u857B\u85A4\u85A8\u8587\u858F\u8579\u85AE\u859C"+
-        "\u8585\u85B9\u85B7\u85B0\u85D3\u85C1\u85DC\u85FF"+
-        "\u8627\u8605\u8629\u8616\u863C\u5EFE\u5F08\u593C"+
-        "\u5941\u8037\u5955\u595A\u5958\u530F\u5C22\u5C25"+
-        "\u5C2C\u5C34\u624C\u626A\u629F\u62BB\u62CA\u62DA"+
-        "\u62D7\u62EE\u6322\u62F6\u6339\u634B\u6343\u63AD"+
-        "\u63F6\u6371\u637A\u638E\u63B4\u636D\u63AC\u638A"+
-        "\u6369\u63AE\u63BC\u63F2\u63F8\u63E0\u63FF\u63C4"+
-        "\u63DE\u63CE\u6452\u63C6\u63BE\u6445\u6441\u640B"+
-        "\u641B\u6420\u640C\u6426\u6421\u645E\u6484\u646D"+
-        "\u6496\u9019\u901C\u9023\u9024\u9025\u9027\u9028"+
-        "\u9029\u902A\u902B\u902C\u9030\u9031\u9032\u9033"+
-        "\u9034\u9037\u9039\u903A\u903D\u903F\u9040\u9043"+
-        "\u9045\u9046\u9048\u9049\u904A\u904B\u904C\u904E"+
-        "\u9054\u9055\u9056\u9059\u905A\u905C\u905D\u905E"+
-        "\u905F\u9060\u9061\u9064\u9066\u9067\u9069\u906A"+
-        "\u906B\u906C\u906F\u9070\u9071\u9072\u9073\u9076"+
-        "\u9077\u9078\u9079\u907A\u907B\u907C\u907E\u9081"+
-        "\uFFFD\u9084\u9085\u9086\u9087\u9089\u908A\u908C"+
-        "\u908D\u908E\u908F\u9090\u9092\u9094\u9096\u9098"+
-        "\u909A\u909C\u909E\u909F\u90A0\u90A4\u90A5\u90A7"+
-        "\u90A8\u90A9\u90AB\u90AD\u90B2\u90B7\u90BC\u90BD"+
-        "\u90BF\u90C0\u647A\u64B7\u64B8\u6499\u64BA\u64C0"+
-        "\u64D0\u64D7\u64E4\u64E2\u6509\u6525\u652E\u5F0B"+
-        "\u5FD2\u7519\u5F11\u535F\u53F1\u53FD\u53E9\u53E8"+
-        "\u53FB\u5412\u5416\u5406\u544B\u5452\u5453\u5454"+
-        "\u5456\u5443\u5421\u5457\u5459\u5423\u5432\u5482"+
-        "\u5494\u5477\u5471\u5464\u549A\u549B\u5484\u5476"+
-        "\u5466\u549D\u54D0\u54AD\u54C2\u54B4\u54D2\u54A7"+
-        "\u54A6\u54D3\u54D4\u5472\u54A3\u54D5\u54BB\u54BF"+
-        "\u54CC\u54D9\u54DA\u54DC\u54A9\u54AA\u54A4\u54DD"+
-        "\u54CF\u54DE\u551B\u54E7\u5520\u54FD\u5514\u54F3"+
-        "\u5522\u5523\u550F\u5511\u5527\u552A\u5567\u558F"+
-        "\u55B5\u5549\u556D\u5541\u5555\u553F\u5550\u553C";
-
-    private final static String innerIndex6=
-        "\u90C2\u90C3\u90C6\u90C8\u90C9\u90CB\u90CC\u90CD"+
-        "\u90D2\u90D4\u90D5\u90D6\u90D8\u90D9\u90DA\u90DE"+
-        "\u90DF\u90E0\u90E3\u90E4\u90E5\u90E9\u90EA\u90EC"+
-        "\u90EE\u90F0\u90F1\u90F2\u90F3\u90F5\u90F6\u90F7"+
-        "\u90F9\u90FA\u90FB\u90FC\u90FF\u9100\u9101\u9103"+
-        "\u9105\u9106\u9107\u9108\u9109\u910A\u910B\u910C"+
-        "\u910D\u910E\u910F\u9110\u9111\u9112\u9113\u9114"+
-        "\u9115\u9116\u9117\u9118\u911A\u911B\u911C\uFFFD"+
-        "\u911D\u911F\u9120\u9121\u9124\u9125\u9126\u9127"+
-        "\u9128\u9129\u912A\u912B\u912C\u912D\u912E\u9130"+
-        "\u9132\u9133\u9134\u9135\u9136\u9137\u9138\u913A"+
-        "\u913B\u913C\u913D\u913E\u913F\u9140\u9141\u9142"+
-        "\u9144\u5537\u5556\u5575\u5576\u5577\u5533\u5530"+
-        "\u555C\u558B\u55D2\u5583\u55B1\u55B9\u5588\u5581"+
-        "\u559F\u557E\u55D6\u5591\u557B\u55DF\u55BD\u55BE"+
-        "\u5594\u5599\u55EA\u55F7\u55C9\u561F\u55D1\u55EB"+
-        "\u55EC\u55D4\u55E6\u55DD\u55C4\u55EF\u55E5\u55F2"+
-        "\u55F3\u55CC\u55CD\u55E8\u55F5\u55E4\u8F94\u561E"+
-        "\u5608\u560C\u5601\u5624\u5623\u55FE\u5600\u5627"+
-        "\u562D\u5658\u5639\u5657\u562C\u564D\u5662\u5659"+
-        "\u565C\u564C\u5654\u5686\u5664\u5671\u566B\u567B"+
-        "\u567C\u5685\u5693\u56AF\u56D4\u56D7\u56DD\u56E1"+
-        "\u56F5\u56EB\u56F9\u56FF\u5704\u570A\u5709\u571C"+
-        "\u5E0F\u5E19\u5E14\u5E11\u5E31\u5E3B\u5E3C\u9145"+
-        "\u9147\u9148\u9151\u9153\u9154\u9155\u9156\u9158"+
-        "\u9159\u915B\u915C\u915F\u9160\u9166\u9167\u9168"+
-        "\u916B\u916D\u9173\u917A\u917B\u917C\u9180\u9181"+
-        "\u9182\u9183\u9184\u9186\u9188\u918A\u918E\u918F"+
-        "\u9193\u9194\u9195\u9196\u9197\u9198\u9199\u919C"+
-        "\u919D\u919E\u919F\u91A0\u91A1\u91A4\u91A5\u91A6"+
-        "\u91A7\u91A8\u91A9\u91AB\u91AC\u91B0\u91B1\u91B2"+
-        "\u91B3\u91B6\u91B7\u91B8\u91B9\u91BB\uFFFD\u91BC"+
-        "\u91BD\u91BE\u91BF\u91C0\u91C1\u91C2\u91C3\u91C4"+
-        "\u91C5\u91C6\u91C8\u91CB\u91D0\u91D2\u91D3\u91D4"+
-        "\u91D5\u91D6\u91D7\u91D8\u91D9\u91DA\u91DB\u91DD"+
-        "\u91DE\u91DF\u91E0\u91E1\u91E2\u91E3\u91E4\u91E5"+
-        "\u5E37\u5E44\u5E54\u5E5B\u5E5E\u5E61\u5C8C\u5C7A"+
-        "\u5C8D\u5C90\u5C96\u5C88\u5C98\u5C99\u5C91\u5C9A"+
-        "\u5C9C\u5CB5\u5CA2\u5CBD\u5CAC\u5CAB\u5CB1\u5CA3"+
-        "\u5CC1\u5CB7\u5CC4\u5CD2\u5CE4\u5CCB\u5CE5\u5D02"+
-        "\u5D03\u5D27\u5D26\u5D2E\u5D24\u5D1E\u5D06\u5D1B"+
-        "\u5D58\u5D3E\u5D34\u5D3D\u5D6C\u5D5B\u5D6F\u5D5D"+
-        "\u5D6B\u5D4B\u5D4A\u5D69\u5D74\u5D82\u5D99\u5D9D"+
-        "\u8C73\u5DB7\u5DC5\u5F73\u5F77\u5F82\u5F87\u5F89"+
-        "\u5F8C\u5F95\u5F99\u5F9C\u5FA8\u5FAD\u5FB5\u5FBC"+
-        "\u8862\u5F61\u72AD\u72B0\u72B4\u72B7\u72B8\u72C3"+
-        "\u72C1\u72CE\u72CD\u72D2\u72E8\u72EF\u72E9\u72F2"+
-        "\u72F4\u72F7\u7301\u72F3\u7303\u72FA\u91E6\u91E7"+
-        "\u91E8\u91E9\u91EA\u91EB\u91EC\u91ED\u91EE\u91EF"+
-        "\u91F0\u91F1\u91F2\u91F3\u91F4\u91F5\u91F6\u91F7"+
-        "\u91F8\u91F9\u91FA\u91FB\u91FC\u91FD\u91FE\u91FF"+
-        "\u9200\u9201\u9202\u9203\u9204\u9205\u9206\u9207"+
-        "\u9208\u9209\u920A\u920B\u920C\u920D\u920E\u920F"+
-        "\u9210\u9211\u9212\u9213\u9214\u9215\u9216\u9217"+
-        "\u9218\u9219\u921A\u921B\u921C\u921D\u921E\u921F"+
-        "\u9220\u9221\u9222\u9223\u9224\uFFFD\u9225\u9226"+
-        "\u9227\u9228\u9229\u922A\u922B\u922C\u922D\u922E"+
-        "\u922F\u9230\u9231\u9232\u9233\u9234\u9235\u9236"+
-        "\u9237\u9238\u9239\u923A\u923B\u923C\u923D\u923E"+
-        "\u923F\u9240\u9241\u9242\u9243\u9244\u9245\u72FB"+
-        "\u7317\u7313\u7321\u730A\u731E\u731D\u7315\u7322"+
-        "\u7339\u7325\u732C\u7338\u7331\u7350\u734D\u7357"+
-        "\u7360\u736C\u736F\u737E\u821B\u5925\u98E7\u5924"+
-        "\u5902\u9963\u9967\u9968\u9969\u996A\u996B\u996C"+
-        "\u9974\u9977\u997D\u9980\u9984\u9987\u998A\u998D"+
-        "\u9990\u9991\u9993\u9994\u9995\u5E80\u5E91\u5E8B"+
-        "\u5E96\u5EA5\u5EA0\u5EB9\u5EB5\u5EBE\u5EB3\u8D53"+
-        "\u5ED2\u5ED1\u5EDB\u5EE8\u5EEA\u81BA\u5FC4\u5FC9"+
-        "\u5FD6\u5FCF\u6003\u5FEE\u6004\u5FE1\u5FE4\u5FFE"+
-        "\u6005\u6006\u5FEA\u5FED\u5FF8\u6019\u6035\u6026"+
-        "\u601B\u600F\u600D\u6029\u602B\u600A\u603F\u6021"+
-        "\u6078\u6079\u607B\u607A\u6042\u9246\u9247\u9248"+
-        "\u9249\u924A\u924B\u924C\u924D\u924E\u924F\u9250"+
-        "\u9251\u9252\u9253\u9254\u9255\u9256\u9257\u9258"+
-        "\u9259\u925A\u925B\u925C\u925D\u925E\u925F\u9260"+
-        "\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268"+
-        "\u9269\u926A\u926B\u926C\u926D\u926E\u926F\u9270"+
-        "\u9271\u9272\u9273\u9275\u9276\u9277\u9278\u9279"+
-        "\u927A\u927B\u927C\u927D\u927E\u927F\u9280\u9281"+
-        "\u9282\u9283\u9284\u9285\uFFFD\u9286\u9287\u9288"+
-        "\u9289\u928A\u928B\u928C\u928D\u928F\u9290\u9291"+
-        "\u9292\u9293\u9294\u9295\u9296\u9297\u9298\u9299"+
-        "\u929A\u929B\u929C\u929D\u929E\u929F\u92A0\u92A1"+
-        "\u92A2\u92A3\u92A4\u92A5\u92A6\u92A7\u606A\u607D"+
-        "\u6096\u609A\u60AD\u609D\u6083\u6092\u608C\u609B"+
-        "\u60EC\u60BB\u60B1\u60DD\u60D8\u60C6\u60DA\u60B4"+
-        "\u6120\u6126\u6115\u6123\u60F4\u6100\u610E\u612B"+
-        "\u614A\u6175\u61AC\u6194\u61A7\u61B7\u61D4\u61F5"+
-        "\u5FDD\u96B3\u95E9\u95EB\u95F1\u95F3\u95F5\u95F6"+
-        "\u95FC\u95FE\u9603\u9604\u9606\u9608\u960A\u960B"+
-        "\u960C\u960D\u960F\u9612\u9615\u9616\u9617\u9619"+
-        "\u961A\u4E2C\u723F\u6215\u6C35\u6C54\u6C5C\u6C4A"+
-        "\u6CA3\u6C85\u6C90\u6C94\u6C8C\u6C68\u6C69\u6C74"+
-        "\u6C76\u6C86\u6CA9\u6CD0\u6CD4\u6CAD\u6CF7\u6CF8"+
-        "\u6CF1\u6CD7\u6CB2\u6CE0\u6CD6\u6CFA\u6CEB\u6CEE"+
-        "\u6CB1\u6CD3\u6CEF\u6CFE\u92A8\u92A9\u92AA\u92AB"+
-        "\u92AC\u92AD\u92AF\u92B0\u92B1\u92B2\u92B3\u92B4"+
-        "\u92B5\u92B6\u92B7\u92B8\u92B9\u92BA\u92BB\u92BC"+
-        "\u92BD\u92BE\u92BF\u92C0\u92C1\u92C2\u92C3\u92C4"+
-        "\u92C5\u92C6\u92C7\u92C9\u92CA\u92CB\u92CC\u92CD"+
-        "\u92CE\u92CF\u92D0\u92D1\u92D2\u92D3\u92D4\u92D5"+
-        "\u92D6\u92D7\u92D8\u92D9\u92DA\u92DB\u92DC\u92DD"+
-        "\u92DE\u92DF\u92E0\u92E1\u92E2\u92E3\u92E4\u92E5"+
-        "\u92E6\u92E7\u92E8\uFFFD\u92E9\u92EA\u92EB\u92EC"+
-        "\u92ED\u92EE\u92EF\u92F0\u92F1\u92F2\u92F3\u92F4"+
-        "\u92F5\u92F6\u92F7\u92F8\u92F9\u92FA\u92FB\u92FC"+
-        "\u92FD\u92FE\u92FF\u9300\u9301\u9302\u9303\u9304"+
-        "\u9305\u9306\u9307\u9308\u9309\u6D39\u6D27\u6D0C"+
-        "\u6D43\u6D48\u6D07\u6D04\u6D19\u6D0E\u6D2B\u6D4D"+
-        "\u6D2E\u6D35\u6D1A\u6D4F\u6D52\u6D54\u6D33\u6D91"+
-        "\u6D6F\u6D9E\u6DA0\u6D5E\u6D93\u6D94\u6D5C\u6D60"+
-        "\u6D7C\u6D63\u6E1A\u6DC7\u6DC5\u6DDE\u6E0E\u6DBF"+
-        "\u6DE0\u6E11\u6DE6\u6DDD\u6DD9\u6E16\u6DAB\u6E0C"+
-        "\u6DAE\u6E2B\u6E6E\u6E4E\u6E6B\u6EB2\u6E5F\u6E86"+
-        "\u6E53\u6E54\u6E32\u6E25\u6E44\u6EDF\u6EB1\u6E98"+
-        "\u6EE0\u6F2D\u6EE2\u6EA5\u6EA7\u6EBD\u6EBB\u6EB7"+
-        "\u6ED7\u6EB4\u6ECF\u6E8F\u6EC2\u6E9F\u6F62\u6F46"+
-        "\u6F47\u6F24\u6F15\u6EF9\u6F2F\u6F36\u6F4B\u6F74"+
-        "\u6F2A\u6F09\u6F29\u6F89\u6F8D\u6F8C\u6F78\u6F72"+
-        "\u6F7C\u6F7A\u6FD1\u930A\u930B\u930C\u930D\u930E"+
-        "\u930F\u9310\u9311\u9312\u9313\u9314\u9315\u9316"+
-        "\u9317\u9318\u9319\u931A\u931B\u931C\u931D\u931E"+
-        "\u931F\u9320\u9321\u9322\u9323\u9324\u9325\u9326"+
-        "\u9327\u9328\u9329\u932A\u932B\u932C\u932D\u932E"+
-        "\u932F\u9330\u9331\u9332\u9333\u9334\u9335\u9336"+
-        "\u9337\u9338\u9339\u933A\u933B\u933C\u933D\u933F"+
-        "\u9340\u9341\u9342\u9343\u9344\u9345\u9346\u9347"+
-        "\u9348\u9349\uFFFD\u934A\u934B\u934C\u934D\u934E"+
-        "\u934F\u9350\u9351\u9352\u9353\u9354\u9355\u9356"+
-        "\u9357\u9358\u9359\u935A\u935B\u935C\u935D\u935E"+
-        "\u935F\u9360\u9361\u9362\u9363\u9364\u9365\u9366"+
-        "\u9367\u9368\u9369\u936B\u6FC9\u6FA7\u6FB9\u6FB6"+
-        "\u6FC2\u6FE1\u6FEE\u6FDE\u6FE0\u6FEF\u701A\u7023"+
-        "\u701B\u7039\u7035\u704F\u705E\u5B80\u5B84\u5B95"+
-        "\u5B93\u5BA5\u5BB8\u752F\u9A9E\u6434\u5BE4\u5BEE"+
-        "\u8930\u5BF0\u8E47\u8B07\u8FB6\u8FD3\u8FD5\u8FE5"+
-        "\u8FEE\u8FE4\u8FE9\u8FE6\u8FF3\u8FE8\u9005\u9004"+
-        "\u900B\u9026\u9011\u900D\u9016\u9021\u9035\u9036"+
-        "\u902D\u902F\u9044\u9051\u9052\u9050\u9068\u9058"+
-        "\u9062\u905B\u66B9\u9074\u907D\u9082\u9088\u9083"+
-        "\u908B\u5F50\u5F57\u5F56\u5F58\u5C3B\u54AB\u5C50"+
-        "\u5C59\u5B71\u5C63\u5C66\u7FBC\u5F2A\u5F29\u5F2D"+
-        "\u8274\u5F3C\u9B3B\u5C6E\u5981\u5983\u598D\u59A9"+
-        "\u59AA\u59A3\u936C\u936D\u936E\u936F\u9370\u9371"+
-        "\u9372\u9373\u9374\u9375\u9376\u9377\u9378\u9379"+
-        "\u937A\u937B\u937C\u937D\u937E\u937F\u9380\u9381"+
-        "\u9382\u9383\u9384\u9385\u9386\u9387\u9388\u9389"+
-        "\u938A\u938B\u938C\u938D\u938E\u9390\u9391\u9392"+
-        "\u9393\u9394\u9395\u9396\u9397\u9398\u9399\u939A"+
-        "\u939B\u939C\u939D\u939E\u939F\u93A0\u93A1\u93A2"+
-        "\u93A3\u93A4\u93A5\u93A6\u93A7\u93A8\u93A9\u93AA"+
-        "\u93AB\uFFFD\u93AC\u93AD\u93AE\u93AF\u93B0\u93B1"+
-        "\u93B2\u93B3\u93B4\u93B5\u93B6\u93B7\u93B8\u93B9"+
-        "\u93BA\u93BB\u93BC\u93BD\u93BE\u93BF\u93C0\u93C1"+
-        "\u93C2\u93C3\u93C4\u93C5\u93C6\u93C7\u93C8\u93C9"+
-        "\u93CB\u93CC\u93CD\u5997\u59CA\u59AB\u599E\u59A4"+
-        "\u59D2\u59B2\u59AF\u59D7\u59BE\u5A05\u5A06\u59DD"+
-        "\u5A08\u59E3\u59D8\u59F9\u5A0C\u5A09\u5A32\u5A34"+
-        "\u5A11\u5A23\u5A13\u5A40\u5A67\u5A4A\u5A55\u5A3C"+
-        "\u5A62\u5A75\u80EC\u5AAA\u5A9B\u5A77\u5A7A\u5ABE"+
-        "\u5AEB\u5AB2\u5AD2\u5AD4\u5AB8\u5AE0\u5AE3\u5AF1"+
-        "\u5AD6\u5AE6\u5AD8\u5ADC\u5B09\u5B17\u5B16\u5B32"+
-        "\u5B37\u5B40\u5C15\u5C1C\u5B5A\u5B65\u5B73\u5B51"+
-        "\u5B53\u5B62\u9A75\u9A77\u9A78\u9A7A\u9A7F\u9A7D"+
-        "\u9A80\u9A81\u9A85\u9A88\u9A8A\u9A90\u9A92\u9A93"+
-        "\u9A96\u9A98\u9A9B\u9A9C\u9A9D\u9A9F\u9AA0\u9AA2"+
-        "\u9AA3\u9AA5\u9AA7\u7E9F\u7EA1\u7EA3\u7EA5\u7EA8"+
-        "\u7EA9\u93CE\u93CF\u93D0\u93D1\u93D2\u93D3\u93D4"+
-        "\u93D5\u93D7\u93D8\u93D9\u93DA\u93DB\u93DC\u93DD"+
-        "\u93DE\u93DF\u93E0\u93E1\u93E2\u93E3\u93E4\u93E5"+
-        "\u93E6\u93E7\u93E8\u93E9\u93EA\u93EB\u93EC\u93ED"+
-        "\u93EE\u93EF\u93F0\u93F1\u93F2\u93F3\u93F4\u93F5"+
-        "\u93F6\u93F7\u93F8\u93F9\u93FA\u93FB\u93FC\u93FD"+
-        "\u93FE\u93FF\u9400\u9401\u9402\u9403\u9404\u9405"+
-        "\u9406\u9407\u9408\u9409\u940A\u940B\u940C\u940D"+
-        "\uFFFD\u940E\u940F\u9410\u9411\u9412\u9413\u9414"+
-        "\u9415\u9416\u9417\u9418\u9419\u941A\u941B\u941C"+
-        "\u941D\u941E\u941F\u9420\u9421\u9422\u9423\u9424"+
-        "\u9425\u9426\u9427\u9428\u9429\u942A\u942B\u942C"+
-        "\u942D\u942E\u7EAD\u7EB0\u7EBE\u7EC0\u7EC1\u7EC2"+
-        "\u7EC9\u7ECB\u7ECC\u7ED0\u7ED4\u7ED7\u7EDB\u7EE0"+
-        "\u7EE1\u7EE8\u7EEB\u7EEE\u7EEF\u7EF1\u7EF2\u7F0D"+
-        "\u7EF6\u7EFA\u7EFB\u7EFE\u7F01\u7F02\u7F03\u7F07"+
-        "\u7F08\u7F0B\u7F0C\u7F0F\u7F11\u7F12\u7F17\u7F19"+
-        "\u7F1C\u7F1B\u7F1F\u7F21\u7F22\u7F23\u7F24\u7F25"+
-        "\u7F26\u7F27\u7F2A\u7F2B\u7F2C\u7F2D\u7F2F\u7F30"+
-        "\u7F31\u7F32\u7F33\u7F35\u5E7A\u757F\u5DDB\u753E"+
-        "\u9095\u738E\u7391\u73AE\u73A2\u739F\u73CF\u73C2"+
-        "\u73D1\u73B7\u73B3\u73C0\u73C9\u73C8\u73E5\u73D9"+
-        "\u987C\u740A\u73E9\u73E7\u73DE\u73BA\u73F2\u740F"+
-        "\u742A\u745B\u7426\u7425\u7428\u7430\u742E\u742C"+
-        "\u942F\u9430\u9431\u9432\u9433\u9434\u9435\u9436"+
-        "\u9437\u9438\u9439\u943A\u943B\u943C\u943D\u943F"+
-        "\u9440\u9441\u9442\u9443\u9444\u9445\u9446\u9447"+
-        "\u9448\u9449\u944A\u944B\u944C\u944D\u944E\u944F"+
-        "\u9450\u9451\u9452\u9453\u9454\u9455\u9456\u9457"+
-        "\u9458\u9459\u945A\u945B\u945C\u945D\u945E\u945F"+
-        "\u9460\u9461\u9462\u9463\u9464\u9465\u9466\u9467"+
-        "\u9468\u9469\u946A\u946C\u946D\u946E\u946F\uFFFD"+
-        "\u9470\u9471\u9472\u9473\u9474\u9475\u9476\u9477"+
-        "\u9478\u9479\u947A\u947B\u947C\u947D\u947E\u947F"+
-        "\u9480\u9481\u9482\u9483\u9484\u9491\u9496\u9498"+
-        "\u94C7\u94CF\u94D3\u94D4\u94DA\u94E6\u94FB\u951C"+
-        "\u9520\u741B\u741A\u7441\u745C\u7457\u7455\u7459"+
-        "\u7477\u746D\u747E\u749C\u748E\u7480\u7481\u7487"+
-        "\u748B\u749E\u74A8\u74A9\u7490\u74A7\u74D2\u74BA"+
-        "\u97EA\u97EB\u97EC\u674C\u6753\u675E\u6748\u6769"+
-        "\u67A5\u6787\u676A\u6773\u6798\u67A7\u6775\u67A8"+
-        "\u679E\u67AD\u678B\u6777\u677C\u67F0\u6809\u67D8"+
-        "\u680A\u67E9\u67B0\u680C\u67D9\u67B5\u67DA\u67B3"+
-        "\u67DD\u6800\u67C3\u67B8\u67E2\u680E\u67C1\u67FD"+
-        "\u6832\u6833\u6860\u6861\u684E\u6862\u6844\u6864"+
-        "\u6883\u681D\u6855\u6866\u6841\u6867\u6840\u683E"+
-        "\u684A\u6849\u6829\u68B5\u688F\u6874\u6877\u6893"+
-        "\u686B\u68C2\u696E\u68FC\u691F\u6920\u68F9\u9527"+
-        "\u9533\u953D\u9543\u9548\u954B\u9555\u955A\u9560"+
-        "\u956E\u9574\u9575\u9577\u9578\u9579\u957A\u957B"+
-        "\u957C\u957D\u957E\u9580\u9581\u9582\u9583\u9584"+
-        "\u9585\u9586\u9587\u9588\u9589\u958A\u958B\u958C"+
-        "\u958D\u958E\u958F\u9590\u9591\u9592\u9593\u9594"+
-        "\u9595\u9596\u9597\u9598\u9599\u959A\u959B\u959C"+
-        "\u959D\u959E\u959F\u95A0\u95A1\u95A2\u95A3\u95A4"+
-        "\u95A5\u95A6\u95A7\u95A8\u95A9\u95AA\uFFFD\u95AB"+
-        "\u95AC\u95AD\u95AE\u95AF\u95B0\u95B1\u95B2\u95B3"+
-        "\u95B4\u95B5\u95B6\u95B7\u95B8\u95B9\u95BA\u95BB"+
-        "\u95BC\u95BD\u95BE\u95BF\u95C0\u95C1\u95C2\u95C3"+
-        "\u95C4\u95C5\u95C6\u95C7\u95C8\u95C9\u95CA\u95CB"+
-        "\u6924\u68F0\u690B\u6901\u6957\u68E3\u6910\u6971"+
-        "\u6939\u6960\u6942\u695D\u6984\u696B\u6980\u6998"+
-        "\u6978\u6934\u69CC\u6987\u6988\u69CE\u6989\u6966"+
-        "\u6963\u6979\u699B\u69A7\u69BB\u69AB\u69AD\u69D4"+
-        "\u69B1\u69C1\u69CA\u69DF\u6995\u69E0\u698D\u69FF"+
-        "\u6A2F\u69ED\u6A17\u6A18\u6A65\u69F2\u6A44\u6A3E"+
-        "\u6AA0\u6A50\u6A5B\u6A35\u6A8E\u6A79\u6A3D\u6A28"+
-        "\u6A58\u6A7C\u6A91\u6A90\u6AA9\u6A97\u6AAB\u7337"+
-        "\u7352\u6B81\u6B82\u6B87\u6B84\u6B92\u6B93\u6B8D"+
-        "\u6B9A\u6B9B\u6BA1\u6BAA\u8F6B\u8F6D\u8F71\u8F72"+
-        "\u8F73\u8F75\u8F76\u8F78\u8F77\u8F79\u8F7A\u8F7C"+
-        "\u8F7E\u8F81\u8F82\u8F84\u8F87\u8F8B\u95CC\u95CD"+
-        "\u95CE\u95CF\u95D0\u95D1\u95D2\u95D3\u95D4\u95D5"+
-        "\u95D6\u95D7\u95D8\u95D9\u95DA\u95DB\u95DC\u95DD"+
-        "\u95DE\u95DF\u95E0\u95E1\u95E2\u95E3\u95E4\u95E5"+
-        "\u95E6\u95E7\u95EC\u95FF\u9607\u9613\u9618\u961B"+
-        "\u961E\u9620\u9623\u9624\u9625\u9626\u9627\u9628"+
-        "\u9629\u962B\u962C\u962D\u962F\u9630\u9637\u9638"+
-        "\u9639\u963A\u963E\u9641\u9643\u964A\u964E\u964F"+
-        "\u9651\u9652\u9653\u9656\u9657\uFFFD\u9658\u9659"+
-        "\u965A\u965C\u965D\u965E\u9660\u9663\u9665\u9666"+
-        "\u966B\u966D\u966E\u966F\u9670\u9671\u9673\u9678"+
-        "\u9679\u967A\u967B\u967C\u967D\u967E\u967F\u9680"+
-        "\u9681\u9682\u9683\u9684\u9687\u9689\u968A\u8F8D"+
-        "\u8F8E\u8F8F\u8F98\u8F9A\u8ECE\u620B\u6217\u621B"+
-        "\u621F\u6222\u6221\u6225\u6224\u622C\u81E7\u74EF"+
-        "\u74F4\u74FF\u750F\u7511\u7513\u6534\u65EE\u65EF"+
-        "\u65F0\u660A\u6619\u6772\u6603\u6615\u6600\u7085"+
-        "\u66F7\u661D\u6634\u6631\u6636\u6635\u8006\u665F"+
-        "\u6654\u6641\u664F\u6656\u6661\u6657\u6677\u6684"+
-        "\u668C\u66A7\u669D\u66BE\u66DB\u66DC\u66E6\u66E9"+
-        "\u8D32\u8D33\u8D36\u8D3B\u8D3D\u8D40\u8D45\u8D46"+
-        "\u8D48\u8D49\u8D47\u8D4D\u8D55\u8D59\u89C7\u89CA"+
-        "\u89CB\u89CC\u89CE\u89CF\u89D0\u89D1\u726E\u729F"+
-        "\u725D\u7266\u726F\u727E\u727F\u7284\u728B\u728D"+
-        "\u728F\u7292\u6308\u6332\u63B0\u968C\u968E\u9691"+
-        "\u9692\u9693\u9695\u9696\u969A\u969B\u969D\u969E"+
-        "\u969F\u96A0\u96A1\u96A2\u96A3\u96A4\u96A5\u96A6"+
-        "\u96A8\u96A9\u96AA\u96AB\u96AC\u96AD\u96AE\u96AF"+
-        "\u96B1\u96B2\u96B4\u96B5\u96B7\u96B8\u96BA\u96BB"+
-        "\u96BF\u96C2\u96C3\u96C8\u96CA\u96CB\u96D0\u96D1"+
-        "\u96D3\u96D4\u96D6\u96D7\u96D8\u96D9\u96DA\u96DB"+
-        "\u96DC\u96DD\u96DE\u96DF\u96E1\u96E2\u96E3\u96E4"+
-        "\u96E5\u96E6\u96E7\u96EB\uFFFD\u96EC\u96ED\u96EE"+
-        "\u96F0\u96F1\u96F2\u96F4\u96F5\u96F8\u96FA\u96FB"+
-        "\u96FC\u96FD\u96FF\u9702\u9703\u9705\u970A\u970B"+
-        "\u970C\u9710\u9711\u9712\u9714\u9715\u9717\u9718"+
-        "\u9719\u971A\u971B\u971D\u971F\u9720\u643F\u64D8"+
-        "\u8004\u6BEA\u6BF3\u6BFD\u6BF5\u6BF9\u6C05\u6C07"+
-        "\u6C06\u6C0D\u6C15\u6C18\u6C19\u6C1A\u6C21\u6C29"+
-        "\u6C24\u6C2A\u6C32\u6535\u6555\u656B\u724D\u7252"+
-        "\u7256\u7230\u8662\u5216\u809F\u809C\u8093\u80BC"+
-        "\u670A\u80BD\u80B1\u80AB\u80AD\u80B4\u80B7\u80E7"+
-        "\u80E8\u80E9\u80EA\u80DB\u80C2\u80C4\u80D9\u80CD"+
-        "\u80D7\u6710\u80DD\u80EB\u80F1\u80F4\u80ED\u810D"+
-        "\u810E\u80F2\u80FC\u6715\u8112\u8C5A\u8136\u811E"+
-        "\u812C\u8118\u8132\u8148\u814C\u8153\u8174\u8159"+
-        "\u815A\u8171\u8160\u8169\u817C\u817D\u816D\u8167"+
-        "\u584D\u5AB5\u8188\u8182\u8191\u6ED5\u81A3\u81AA"+
-        "\u81CC\u6726\u81CA\u81BB\u9721\u9722\u9723\u9724"+
-        "\u9725\u9726\u9727\u9728\u9729\u972B\u972C\u972E"+
-        "\u972F\u9731\u9733\u9734\u9735\u9736\u9737\u973A"+
-        "\u973B\u973C\u973D\u973F\u9740\u9741\u9742\u9743"+
-        "\u9744\u9745\u9746\u9747\u9748\u9749\u974A\u974B"+
-        "\u974C\u974D\u974E\u974F\u9750\u9751\u9754\u9755"+
-        "\u9757\u9758\u975A\u975C\u975D\u975F\u9763\u9764"+
-        "\u9766\u9767\u9768\u976A\u976B\u976C\u976D\u976E"+
-        "\u976F\u9770\u9771\uFFFD\u9772\u9775\u9777\u9778"+
-        "\u9779\u977A\u977B\u977D\u977E\u977F\u9780\u9781"+
-        "\u9782\u9783\u9784\u9786\u9787\u9788\u9789\u978A"+
-        "\u978C\u978E\u978F\u9790\u9793\u9795\u9796\u9797"+
-        "\u9799\u979A\u979B\u979C\u979D\u81C1\u81A6\u6B24"+
-        "\u6B37\u6B39\u6B43\u6B46\u6B59\u98D1\u98D2\u98D3"+
-        "\u98D5\u98D9\u98DA\u6BB3\u5F40\u6BC2\u89F3\u6590"+
-        "\u9F51\u6593\u65BC\u65C6\u65C4\u65C3\u65CC\u65CE"+
-        "\u65D2\u65D6\u7080\u709C\u7096\u709D\u70BB\u70C0"+
-        "\u70B7\u70AB\u70B1\u70E8\u70CA\u7110\u7113\u7116"+
-        "\u712F\u7131\u7173\u715C\u7168\u7145\u7172\u714A"+
-        "\u7178\u717A\u7198\u71B3\u71B5\u71A8\u71A0\u71E0"+
-        "\u71D4\u71E7\u71F9\u721D\u7228\u706C\u7118\u7166"+
-        "\u71B9\u623E\u623D\u6243\u6248\u6249\u793B\u7940"+
-        "\u7946\u7949\u795B\u795C\u7953\u795A\u7962\u7957"+
-        "\u7960\u796F\u7967\u797A\u7985\u798A\u799A\u79A7"+
-        "\u79B3\u5FD1\u5FD0\u979E\u979F\u97A1\u97A2\u97A4"+
-        "\u97A5\u97A6\u97A7\u97A8\u97A9\u97AA\u97AC\u97AE"+
-        "\u97B0\u97B1\u97B3\u97B5\u97B6\u97B7\u97B8\u97B9"+
-        "\u97BA\u97BB\u97BC\u97BD\u97BE\u97BF\u97C0\u97C1"+
-        "\u97C2\u97C3\u97C4\u97C5\u97C6\u97C7\u97C8\u97C9"+
-        "\u97CA\u97CB\u97CC\u97CD\u97CE\u97CF\u97D0\u97D1"+
-        "\u97D2\u97D3\u97D4\u97D5\u97D6\u97D7\u97D8\u97D9"+
-        "\u97DA\u97DB\u97DC\u97DD\u97DE\u97DF\u97E0\u97E1"+
-        "\u97E2\u97E3\uFFFD\u97E4\u97E5\u97E8\u97EE\u97EF"+
-        "\u97F0\u97F1\u97F2\u97F4\u97F7\u97F8\u97F9\u97FA"+
-        "\u97FB\u97FC\u97FD\u97FE\u97FF\u9800\u9801\u9802"+
-        "\u9803\u9804\u9805\u9806\u9807\u9808\u9809\u980A"+
-        "\u980B\u980C\u980D\u980E\u603C\u605D\u605A\u6067"+
-        "\u6041\u6059\u6063\u60AB\u6106\u610D\u615D\u61A9"+
-        "\u619D\u61CB\u61D1\u6206\u8080\u807F\u6C93\u6CF6"+
-        "\u6DFC\u77F6\u77F8\u7800\u7809\u7817\u7818\u7811"+
-        "\u65AB\u782D\u781C\u781D\u7839\u783A\u783B\u781F"+
-        "\u783C\u7825\u782C\u7823\u7829\u784E\u786D\u7856"+
-        "\u7857\u7826\u7850\u7847\u784C\u786A\u789B\u7893"+
-        "\u789A\u7887\u789C\u78A1\u78A3\u78B2\u78B9\u78A5"+
-        "\u78D4\u78D9\u78C9\u78EC\u78F2\u7905\u78F4\u7913"+
-        "\u7924\u791E\u7934\u9F9B\u9EF9\u9EFB\u9EFC\u76F1"+
-        "\u7704\u770D\u76F9\u7707\u7708\u771A\u7722\u7719"+
-        "\u772D\u7726\u7735\u7738\u7750\u7751\u7747\u7743"+
-        "\u775A\u7768\u980F\u9810\u9811\u9812\u9813\u9814"+
-        "\u9815\u9816\u9817\u9818\u9819\u981A\u981B\u981C"+
-        "\u981D\u981E\u981F\u9820\u9821\u9822\u9823\u9824"+
-        "\u9825\u9826\u9827\u9828\u9829\u982A\u982B\u982C"+
-        "\u982D\u982E\u982F\u9830\u9831\u9832\u9833\u9834"+
-        "\u9835\u9836\u9837\u9838\u9839\u983A\u983B\u983C"+
-        "\u983D\u983E\u983F\u9840\u9841\u9842\u9843\u9844"+
-        "\u9845\u9846\u9847\u9848\u9849\u984A\u984B\u984C"+
-        "\u984D\uFFFD\u984E\u984F\u9850\u9851\u9852\u9853"+
-        "\u9854\u9855\u9856\u9857\u9858\u9859\u985A\u985B"+
-        "\u985C\u985D\u985E\u985F\u9860\u9861\u9862\u9863"+
-        "\u9864\u9865\u9866\u9867\u9868\u9869\u986A\u986B"+
-        "\u986C\u986D\u986E\u7762\u7765\u777F\u778D\u777D"+
-        "\u7780\u778C\u7791\u779F\u77A0\u77B0\u77B5\u77BD"+
-        "\u753A\u7540\u754E\u754B\u7548\u755B\u7572\u7579"+
-        "\u7583\u7F58\u7F61\u7F5F\u8A48\u7F68\u7F74\u7F71"+
-        "\u7F79\u7F81\u7F7E\u76CD\u76E5\u8832\u9485\u9486"+
-        "\u9487\u948B\u948A\u948C\u948D\u948F\u9490\u9494"+
-        "\u9497\u9495\u949A\u949B\u949C\u94A3\u94A4\u94AB"+
-        "\u94AA\u94AD\u94AC\u94AF\u94B0\u94B2\u94B4\u94B6"+
-        "\u94B7\u94B8\u94B9\u94BA\u94BC\u94BD\u94BF\u94C4"+
-        "\u94C8\u94C9\u94CA\u94CB\u94CC\u94CD\u94CE\u94D0"+
-        "\u94D1\u94D2\u94D5\u94D6\u94D7\u94D9\u94D8\u94DB"+
-        "\u94DE\u94DF\u94E0\u94E2\u94E4\u94E5\u94E7\u94E8"+
-        "\u94EA\u986F\u9870\u9871\u9872\u9873\u9874\u988B"+
-        "\u988E\u9892\u9895\u9899\u98A3\u98A8\u98A9\u98AA"+
-        "\u98AB\u98AC\u98AD\u98AE\u98AF\u98B0\u98B1\u98B2"+
-        "\u98B3\u98B4\u98B5\u98B6\u98B7\u98B8\u98B9\u98BA"+
-        "\u98BB\u98BC\u98BD\u98BE\u98BF\u98C0\u98C1\u98C2"+
-        "\u98C3\u98C4\u98C5\u98C6\u98C7\u98C8\u98C9\u98CA"+
-        "\u98CB\u98CC\u98CD\u98CF\u98D0\u98D4\u98D6\u98D7"+
-        "\u98DB\u98DC\u98DD\u98E0\u98E1\u98E2\u98E3\u98E4"+
-        "\uFFFD\u98E5\u98E6\u98E9\u98EA\u98EB\u98EC\u98ED"+
-        "\u98EE\u98EF\u98F0\u98F1\u98F2\u98F3\u98F4\u98F5"+
-        "\u98F6\u98F7\u98F8\u98F9\u98FA\u98FB\u98FC\u98FD"+
-        "\u98FE\u98FF\u9900\u9901\u9902\u9903\u9904\u9905"+
-        "\u9906\u9907\u94E9\u94EB\u94EE\u94EF\u94F3\u94F4"+
-        "\u94F5\u94F7\u94F9\u94FC\u94FD\u94FF\u9503\u9502"+
-        "\u9506\u9507\u9509\u950A\u950D\u950E\u950F\u9512"+
-        "\u9513\u9514\u9515\u9516\u9518\u951B\u951D\u951E"+
-        "\u951F\u9522\u952A\u952B\u9529\u952C\u9531\u9532"+
-        "\u9534\u9536\u9537\u9538\u953C\u953E\u953F\u9542"+
-        "\u9535\u9544\u9545\u9546\u9549\u954C\u954E\u954F"+
-        "\u9552\u9553\u9554\u9556\u9557\u9558\u9559\u955B"+
-        "\u955E\u955F\u955D\u9561\u9562\u9564\u9565\u9566"+
-        "\u9567\u9568\u9569\u956A\u956B\u956C\u956F\u9571"+
-        "\u9572\u9573\u953A\u77E7\u77EC\u96C9\u79D5\u79ED"+
-        "\u79E3\u79EB\u7A06\u5D47\u7A03\u7A02\u7A1E\u7A14";
-
-    private final static String innerIndex7=
-        "\u9908\u9909\u990A\u990B\u990C\u990E\u990F\u9911"+
-        "\u9912\u9913\u9914\u9915\u9916\u9917\u9918\u9919"+
-        "\u991A\u991B\u991C\u991D\u991E\u991F\u9920\u9921"+
-        "\u9922\u9923\u9924\u9925\u9926\u9927\u9928\u9929"+
-        "\u992A\u992B\u992C\u992D\u992F\u9930\u9931\u9932"+
-        "\u9933\u9934\u9935\u9936\u9937\u9938\u9939\u993A"+
-        "\u993B\u993C\u993D\u993E\u993F\u9940\u9941\u9942"+
-        "\u9943\u9944\u9945\u9946\u9947\u9948\u9949\uFFFD"+
-        "\u994A\u994B\u994C\u994D\u994E\u994F\u9950\u9951"+
-        "\u9952\u9953\u9956\u9957\u9958\u9959\u995A\u995B"+
-        "\u995C\u995D\u995E\u995F\u9960\u9961\u9962\u9964"+
-        "\u9966\u9973\u9978\u9979\u997B\u997E\u9982\u9983"+
-        "\u9989\u7A39\u7A37\u7A51\u9ECF\u99A5\u7A70\u7688"+
-        "\u768E\u7693\u7699\u76A4\u74DE\u74E0\u752C\u9E20"+
-        "\u9E22\u9E28\u9E29\u9E2A\u9E2B\u9E2C\u9E32\u9E31"+
-        "\u9E36\u9E38\u9E37\u9E39\u9E3A\u9E3E\u9E41\u9E42"+
-        "\u9E44\u9E46\u9E47\u9E48\u9E49\u9E4B\u9E4C\u9E4E"+
-        "\u9E51\u9E55\u9E57\u9E5A\u9E5B\u9E5C\u9E5E\u9E63"+
-        "\u9E66\u9E67\u9E68\u9E69\u9E6A\u9E6B\u9E6C\u9E71"+
-        "\u9E6D\u9E73\u7592\u7594\u7596\u75A0\u759D\u75AC"+
-        "\u75A3\u75B3\u75B4\u75B8\u75C4\u75B1\u75B0\u75C3"+
-        "\u75C2\u75D6\u75CD\u75E3\u75E8\u75E6\u75E4\u75EB"+
-        "\u75E7\u7603\u75F1\u75FC\u75FF\u7610\u7600\u7605"+
-        "\u760C\u7617\u760A\u7625\u7618\u7615\u7619\u998C"+
-        "\u998E\u999A\u999B\u999C\u999D\u999E\u999F\u99A0"+
-        "\u99A1\u99A2\u99A3\u99A4\u99A6\u99A7\u99A9\u99AA"+
-        "\u99AB\u99AC\u99AD\u99AE\u99AF\u99B0\u99B1\u99B2"+
-        "\u99B3\u99B4\u99B5\u99B6\u99B7\u99B8\u99B9\u99BA"+
-        "\u99BB\u99BC\u99BD\u99BE\u99BF\u99C0\u99C1\u99C2"+
-        "\u99C3\u99C4\u99C5\u99C6\u99C7\u99C8\u99C9\u99CA"+
-        "\u99CB\u99CC\u99CD\u99CE\u99CF\u99D0\u99D1\u99D2"+
-        "\u99D3\u99D4\u99D5\u99D6\u99D7\u99D8\uFFFD\u99D9"+
-        "\u99DA\u99DB\u99DC\u99DD\u99DE\u99DF\u99E0\u99E1"+
-        "\u99E2\u99E3\u99E4\u99E5\u99E6\u99E7\u99E8\u99E9"+
-        "\u99EA\u99EB\u99EC\u99ED\u99EE\u99EF\u99F0\u99F1"+
-        "\u99F2\u99F3\u99F4\u99F5\u99F6\u99F7\u99F8\u99F9"+
-        "\u761B\u763C\u7622\u7620\u7640\u762D\u7630\u763F"+
-        "\u7635\u7643\u763E\u7633\u764D\u765E\u7654\u765C"+
-        "\u7656\u766B\u766F\u7FCA\u7AE6\u7A78\u7A79\u7A80"+
-        "\u7A86\u7A88\u7A95\u7AA6\u7AA0\u7AAC\u7AA8\u7AAD"+
-        "\u7AB3\u8864\u8869\u8872\u887D\u887F\u8882\u88A2"+
-        "\u88C6\u88B7\u88BC\u88C9\u88E2\u88CE\u88E3\u88E5"+
-        "\u88F1\u891A\u88FC\u88E8\u88FE\u88F0\u8921\u8919"+
-        "\u8913\u891B\u890A\u8934\u892B\u8936\u8941\u8966"+
-        "\u897B\u758B\u80E5\u76B2\u76B4\u77DC\u8012\u8014"+
-        "\u8016\u801C\u8020\u8022\u8025\u8026\u8027\u8029"+
-        "\u8028\u8031\u800B\u8035\u8043\u8046\u804D\u8052"+
-        "\u8069\u8071\u8983\u9878\u9880\u9883\u99FA\u99FB"+
-        "\u99FC\u99FD\u99FE\u99FF\u9A00\u9A01\u9A02\u9A03"+
-        "\u9A04\u9A05\u9A06\u9A07\u9A08\u9A09\u9A0A\u9A0B"+
-        "\u9A0C\u9A0D\u9A0E\u9A0F\u9A10\u9A11\u9A12\u9A13"+
-        "\u9A14\u9A15\u9A16\u9A17\u9A18\u9A19\u9A1A\u9A1B"+
-        "\u9A1C\u9A1D\u9A1E\u9A1F\u9A20\u9A21\u9A22\u9A23"+
-        "\u9A24\u9A25\u9A26\u9A27\u9A28\u9A29\u9A2A\u9A2B"+
-        "\u9A2C\u9A2D\u9A2E\u9A2F\u9A30\u9A31\u9A32\u9A33"+
-        "\u9A34\u9A35\u9A36\u9A37\u9A38\uFFFD\u9A39\u9A3A"+
-        "\u9A3B\u9A3C\u9A3D\u9A3E\u9A3F\u9A40\u9A41\u9A42"+
-        "\u9A43\u9A44\u9A45\u9A46\u9A47\u9A48\u9A49\u9A4A"+
-        "\u9A4B\u9A4C\u9A4D\u9A4E\u9A4F\u9A50\u9A51\u9A52"+
-        "\u9A53\u9A54\u9A55\u9A56\u9A57\u9A58\u9A59\u9889"+
-        "\u988C\u988D\u988F\u9894\u989A\u989B\u989E\u989F"+
-        "\u98A1\u98A2\u98A5\u98A6\u864D\u8654\u866C\u866E"+
-        "\u867F\u867A\u867C\u867B\u86A8\u868D\u868B\u86AC"+
-        "\u869D\u86A7\u86A3\u86AA\u8693\u86A9\u86B6\u86C4"+
-        "\u86B5\u86CE\u86B0\u86BA\u86B1\u86AF\u86C9\u86CF"+
-        "\u86B4\u86E9\u86F1\u86F2\u86ED\u86F3\u86D0\u8713"+
-        "\u86DE\u86F4\u86DF\u86D8\u86D1\u8703\u8707\u86F8"+
-        "\u8708\u870A\u870D\u8709\u8723\u873B\u871E\u8725"+
-        "\u872E\u871A\u873E\u8748\u8734\u8731\u8729\u8737"+
-        "\u873F\u8782\u8722\u877D\u877E\u877B\u8760\u8770"+
-        "\u874C\u876E\u878B\u8753\u8763\u877C\u8764\u8759"+
-        "\u8765\u8793\u87AF\u87A8\u87D2\u9A5A\u9A5B\u9A5C"+
-        "\u9A5D\u9A5E\u9A5F\u9A60\u9A61\u9A62\u9A63\u9A64"+
-        "\u9A65\u9A66\u9A67\u9A68\u9A69\u9A6A\u9A6B\u9A72"+
-        "\u9A83\u9A89\u9A8D\u9A8E\u9A94\u9A95\u9A99\u9AA6"+
-        "\u9AA9\u9AAA\u9AAB\u9AAC\u9AAD\u9AAE\u9AAF\u9AB2"+
-        "\u9AB3\u9AB4\u9AB5\u9AB9\u9ABB\u9ABD\u9ABE\u9ABF"+
-        "\u9AC3\u9AC4\u9AC6\u9AC7\u9AC8\u9AC9\u9ACA\u9ACD"+
-        "\u9ACE\u9ACF\u9AD0\u9AD2\u9AD4\u9AD5\u9AD6\u9AD7"+
-        "\u9AD9\u9ADA\u9ADB\u9ADC\uFFFD\u9ADD\u9ADE\u9AE0"+
-        "\u9AE2\u9AE3\u9AE4\u9AE5\u9AE7\u9AE8\u9AE9\u9AEA"+
-        "\u9AEC\u9AEE\u9AF0\u9AF1\u9AF2\u9AF3\u9AF4\u9AF5"+
-        "\u9AF6\u9AF7\u9AF8\u9AFA\u9AFC\u9AFD\u9AFE\u9AFF"+
-        "\u9B00\u9B01\u9B02\u9B04\u9B05\u9B06\u87C6\u8788"+
-        "\u8785\u87AD\u8797\u8783\u87AB\u87E5\u87AC\u87B5"+
-        "\u87B3\u87CB\u87D3\u87BD\u87D1\u87C0\u87CA\u87DB"+
-        "\u87EA\u87E0\u87EE\u8816\u8813\u87FE\u880A\u881B"+
-        "\u8821\u8839\u883C\u7F36\u7F42\u7F44\u7F45\u8210"+
-        "\u7AFA\u7AFD\u7B08\u7B03\u7B04\u7B15\u7B0A\u7B2B"+
-        "\u7B0F\u7B47\u7B38\u7B2A\u7B19\u7B2E\u7B31\u7B20"+
-        "\u7B25\u7B24\u7B33\u7B3E\u7B1E\u7B58\u7B5A\u7B45"+
-        "\u7B75\u7B4C\u7B5D\u7B60\u7B6E\u7B7B\u7B62\u7B72"+
-        "\u7B71\u7B90\u7BA6\u7BA7\u7BB8\u7BAC\u7B9D\u7BA8"+
-        "\u7B85\u7BAA\u7B9C\u7BA2\u7BAB\u7BB4\u7BD1\u7BC1"+
-        "\u7BCC\u7BDD\u7BDA\u7BE5\u7BE6\u7BEA\u7C0C\u7BFE"+
-        "\u7BFC\u7C0F\u7C16\u7C0B\u9B07\u9B09\u9B0A\u9B0B"+
-        "\u9B0C\u9B0D\u9B0E\u9B10\u9B11\u9B12\u9B14\u9B15"+
-        "\u9B16\u9B17\u9B18\u9B19\u9B1A\u9B1B\u9B1C\u9B1D"+
-        "\u9B1E\u9B20\u9B21\u9B22\u9B24\u9B25\u9B26\u9B27"+
-        "\u9B28\u9B29\u9B2A\u9B2B\u9B2C\u9B2D\u9B2E\u9B30"+
-        "\u9B31\u9B33\u9B34\u9B35\u9B36\u9B37\u9B38\u9B39"+
-        "\u9B3A\u9B3D\u9B3E\u9B3F\u9B40\u9B46\u9B4A\u9B4B"+
-        "\u9B4C\u9B4E\u9B50\u9B52\u9B53\u9B55\u9B56\u9B57"+
-        "\u9B58\u9B59\u9B5A\uFFFD\u9B5B\u9B5C\u9B5D\u9B5E"+
-        "\u9B5F\u9B60\u9B61\u9B62\u9B63\u9B64\u9B65\u9B66"+
-        "\u9B67\u9B68\u9B69\u9B6A\u9B6B\u9B6C\u9B6D\u9B6E"+
-        "\u9B6F\u9B70\u9B71\u9B72\u9B73\u9B74\u9B75\u9B76"+
-        "\u9B77\u9B78\u9B79\u9B7A\u9B7B\u7C1F\u7C2A\u7C26"+
-        "\u7C38\u7C41\u7C40\u81FE\u8201\u8202\u8204\u81EC"+
-        "\u8844\u8221\u8222\u8223\u822D\u822F\u8228\u822B"+
-        "\u8238\u823B\u8233\u8234\u823E\u8244\u8249\u824B"+
-        "\u824F\u825A\u825F\u8268\u887E\u8885\u8888\u88D8"+
-        "\u88DF\u895E\u7F9D\u7F9F\u7FA7\u7FAF\u7FB0\u7FB2"+
-        "\u7C7C\u6549\u7C91\u7C9D\u7C9C\u7C9E\u7CA2\u7CB2"+
-        "\u7CBC\u7CBD\u7CC1\u7CC7\u7CCC\u7CCD\u7CC8\u7CC5"+
-        "\u7CD7\u7CE8\u826E\u66A8\u7FBF\u7FCE\u7FD5\u7FE5"+
-        "\u7FE1\u7FE6\u7FE9\u7FEE\u7FF3\u7CF8\u7D77\u7DA6"+
-        "\u7DAE\u7E47\u7E9B\u9EB8\u9EB4\u8D73\u8D84\u8D94"+
-        "\u8D91\u8DB1\u8D67\u8D6D\u8C47\u8C49\u914A\u9150"+
-        "\u914E\u914F\u9164\u9B7C\u9B7D\u9B7E\u9B7F\u9B80"+
-        "\u9B81\u9B82\u9B83\u9B84\u9B85\u9B86\u9B87\u9B88"+
-        "\u9B89\u9B8A\u9B8B\u9B8C\u9B8D\u9B8E\u9B8F\u9B90"+
-        "\u9B91\u9B92\u9B93\u9B94\u9B95\u9B96\u9B97\u9B98"+
-        "\u9B99\u9B9A\u9B9B\u9B9C\u9B9D\u9B9E\u9B9F\u9BA0"+
-        "\u9BA1\u9BA2\u9BA3\u9BA4\u9BA5\u9BA6\u9BA7\u9BA8"+
-        "\u9BA9\u9BAA\u9BAB\u9BAC\u9BAD\u9BAE\u9BAF\u9BB0"+
-        "\u9BB1\u9BB2\u9BB3\u9BB4\u9BB5\u9BB6\u9BB7\u9BB8"+
-        "\u9BB9\u9BBA\uFFFD\u9BBB\u9BBC\u9BBD\u9BBE\u9BBF"+
-        "\u9BC0\u9BC1\u9BC2\u9BC3\u9BC4\u9BC5\u9BC6\u9BC7"+
-        "\u9BC8\u9BC9\u9BCA\u9BCB\u9BCC\u9BCD\u9BCE\u9BCF"+
-        "\u9BD0\u9BD1\u9BD2\u9BD3\u9BD4\u9BD5\u9BD6\u9BD7"+
-        "\u9BD8\u9BD9\u9BDA\u9BDB\u9162\u9161\u9170\u9169"+
-        "\u916F\u917D\u917E\u9172\u9174\u9179\u918C\u9185"+
-        "\u9190\u918D\u9191\u91A2\u91A3\u91AA\u91AD\u91AE"+
-        "\u91AF\u91B5\u91B4\u91BA\u8C55\u9E7E\u8DB8\u8DEB"+
-        "\u8E05\u8E59\u8E69\u8DB5\u8DBF\u8DBC\u8DBA\u8DC4"+
-        "\u8DD6\u8DD7\u8DDA\u8DDE\u8DCE\u8DCF\u8DDB\u8DC6"+
-        "\u8DEC\u8DF7\u8DF8\u8DE3\u8DF9\u8DFB\u8DE4\u8E09"+
-        "\u8DFD\u8E14\u8E1D\u8E1F\u8E2C\u8E2E\u8E23\u8E2F"+
-        "\u8E3A\u8E40\u8E39\u8E35\u8E3D\u8E31\u8E49\u8E41"+
-        "\u8E42\u8E51\u8E52\u8E4A\u8E70\u8E76\u8E7C\u8E6F"+
-        "\u8E74\u8E85\u8E8F\u8E94\u8E90\u8E9C\u8E9E\u8C78"+
-        "\u8C82\u8C8A\u8C85\u8C98\u8C94\u659B\u89D6\u89DE"+
-        "\u89DA\u89DC\u9BDC\u9BDD\u9BDE\u9BDF\u9BE0\u9BE1"+
-        "\u9BE2\u9BE3\u9BE4\u9BE5\u9BE6\u9BE7\u9BE8\u9BE9"+
-        "\u9BEA\u9BEB\u9BEC\u9BED\u9BEE\u9BEF\u9BF0\u9BF1"+
-        "\u9BF2\u9BF3\u9BF4\u9BF5\u9BF6\u9BF7\u9BF8\u9BF9"+
-        "\u9BFA\u9BFB\u9BFC\u9BFD\u9BFE\u9BFF\u9C00\u9C01"+
-        "\u9C02\u9C03\u9C04\u9C05\u9C06\u9C07\u9C08\u9C09"+
-        "\u9C0A\u9C0B\u9C0C\u9C0D\u9C0E\u9C0F\u9C10\u9C11"+
-        "\u9C12\u9C13\u9C14\u9C15\u9C16\u9C17\u9C18\u9C19"+
-        "\u9C1A\uFFFD\u9C1B\u9C1C\u9C1D\u9C1E\u9C1F\u9C20"+
-        "\u9C21\u9C22\u9C23\u9C24\u9C25\u9C26\u9C27\u9C28"+
-        "\u9C29\u9C2A\u9C2B\u9C2C\u9C2D\u9C2E\u9C2F\u9C30"+
-        "\u9C31\u9C32\u9C33\u9C34\u9C35\u9C36\u9C37\u9C38"+
-        "\u9C39\u9C3A\u9C3B\u89E5\u89EB\u89EF\u8A3E\u8B26"+
-        "\u9753\u96E9\u96F3\u96EF\u9706\u9701\u9708\u970F"+
-        "\u970E\u972A\u972D\u9730\u973E\u9F80\u9F83\u9F85"+
-        "\u9F86\u9F87\u9F88\u9F89\u9F8A\u9F8C\u9EFE\u9F0B"+
-        "\u9F0D\u96B9\u96BC\u96BD\u96CE\u96D2\u77BF\u96E0"+
-        "\u928E\u92AE\u92C8\u933E\u936A\u93CA\u938F\u943E"+
-        "\u946B\u9C7F\u9C82\u9C85\u9C86\u9C87\u9C88\u7A23"+
-        "\u9C8B\u9C8E\u9C90\u9C91\u9C92\u9C94\u9C95\u9C9A"+
-        "\u9C9B\u9C9E\u9C9F\u9CA0\u9CA1\u9CA2\u9CA3\u9CA5"+
-        "\u9CA6\u9CA7\u9CA8\u9CA9\u9CAB\u9CAD\u9CAE\u9CB0"+
-        "\u9CB1\u9CB2\u9CB3\u9CB4\u9CB5\u9CB6\u9CB7\u9CBA"+
-        "\u9CBB\u9CBC\u9CBD\u9CC4\u9CC5\u9CC6\u9CC7\u9CCA"+
-        "\u9CCB\u9C3C\u9C3D\u9C3E\u9C3F\u9C40\u9C41\u9C42"+
-        "\u9C43\u9C44\u9C45\u9C46\u9C47\u9C48\u9C49\u9C4A"+
-        "\u9C4B\u9C4C\u9C4D\u9C4E\u9C4F\u9C50\u9C51\u9C52"+
-        "\u9C53\u9C54\u9C55\u9C56\u9C57\u9C58\u9C59\u9C5A"+
-        "\u9C5B\u9C5C\u9C5D\u9C5E\u9C5F\u9C60\u9C61\u9C62"+
-        "\u9C63\u9C64\u9C65\u9C66\u9C67\u9C68\u9C69\u9C6A"+
-        "\u9C6B\u9C6C\u9C6D\u9C6E\u9C6F\u9C70\u9C71\u9C72"+
-        "\u9C73\u9C74\u9C75\u9C76\u9C77\u9C78\u9C79\u9C7A"+
-        "\uFFFD\u9C7B\u9C7D\u9C7E\u9C80\u9C83\u9C84\u9C89"+
-        "\u9C8A\u9C8C\u9C8F\u9C93\u9C96\u9C97\u9C98\u9C99"+
-        "\u9C9D\u9CAA\u9CAC\u9CAF\u9CB9\u9CBE\u9CBF\u9CC0"+
-        "\u9CC1\u9CC2\u9CC8\u9CC9\u9CD1\u9CD2\u9CDA\u9CDB"+
-        "\u9CE0\u9CE1\u9CCC\u9CCD\u9CCE\u9CCF\u9CD0\u9CD3"+
-        "\u9CD4\u9CD5\u9CD7\u9CD8\u9CD9\u9CDC\u9CDD\u9CDF"+
-        "\u9CE2\u977C\u9785\u9791\u9792\u9794\u97AF\u97AB"+
-        "\u97A3\u97B2\u97B4\u9AB1\u9AB0\u9AB7\u9E58\u9AB6"+
-        "\u9ABA\u9ABC\u9AC1\u9AC0\u9AC5\u9AC2\u9ACB\u9ACC"+
-        "\u9AD1\u9B45\u9B43\u9B47\u9B49\u9B48\u9B4D\u9B51"+
-        "\u98E8\u990D\u992E\u9955\u9954\u9ADF\u9AE1\u9AE6"+
-        "\u9AEF\u9AEB\u9AFB\u9AED\u9AF9\u9B08\u9B0F\u9B13"+
-        "\u9B1F\u9B23\u9EBD\u9EBE\u7E3B\u9E82\u9E87\u9E88"+
-        "\u9E8B\u9E92\u93D6\u9E9D\u9E9F\u9EDB\u9EDC\u9EDD"+
-        "\u9EE0\u9EDF\u9EE2\u9EE9\u9EE7\u9EE5\u9EEA\u9EEF"+
-        "\u9F22\u9F2C\u9F2F\u9F39\u9F37\u9F3D\u9F3E\u9F44"+
-        "\u9CE3\u9CE4\u9CE5\u9CE6\u9CE7\u9CE8\u9CE9\u9CEA"+
-        "\u9CEB\u9CEC\u9CED\u9CEE\u9CEF\u9CF0\u9CF1\u9CF2"+
-        "\u9CF3\u9CF4\u9CF5\u9CF6\u9CF7\u9CF8\u9CF9\u9CFA"+
-        "\u9CFB\u9CFC\u9CFD\u9CFE\u9CFF\u9D00\u9D01\u9D02"+
-        "\u9D03\u9D04\u9D05\u9D06\u9D07\u9D08\u9D09\u9D0A"+
-        "\u9D0B\u9D0C\u9D0D\u9D0E\u9D0F\u9D10\u9D11\u9D12"+
-        "\u9D13\u9D14\u9D15\u9D16\u9D17\u9D18\u9D19\u9D1A"+
-        "\u9D1B\u9D1C\u9D1D\u9D1E\u9D1F\u9D20\u9D21\uFFFD"+
-        "\u9D22\u9D23\u9D24\u9D25\u9D26\u9D27\u9D28\u9D29"+
-        "\u9D2A\u9D2B\u9D2C\u9D2D\u9D2E\u9D2F\u9D30\u9D31"+
-        "\u9D32\u9D33\u9D34\u9D35\u9D36\u9D37\u9D38\u9D39"+
-        "\u9D3A\u9D3B\u9D3C\u9D3D\u9D3E\u9D3F\u9D40\u9D41"+
-        "\u9D42\uE234\uE235\uE236\uE237\uE238\uE239\uE23A"+
-        "\uE23B\uE23C\uE23D\uE23E\uE23F\uE240\uE241\uE242"+
-        "\uE243\uE244\uE245\uE246\uE247\uE248\uE249\uE24A"+
-        "\uE24B\uE24C\uE24D\uE24E\uE24F\uE250\uE251\uE252"+
-        "\uE253\uE254\uE255\uE256\uE257\uE258\uE259\uE25A"+
-        "\uE25B\uE25C\uE25D\uE25E\uE25F\uE260\uE261\uE262"+
-        "\uE263\uE264\uE265\uE266\uE267\uE268\uE269\uE26A"+
-        "\uE26B\uE26C\uE26D\uE26E\uE26F\uE270\uE271\uE272"+
-        "\uE273\uE274\uE275\uE276\uE277\uE278\uE279\uE27A"+
-        "\uE27B\uE27C\uE27D\uE27E\uE27F\uE280\uE281\uE282"+
-        "\uE283\uE284\uE285\uE286\uE287\uE288\uE289\uE28A"+
-        "\uE28B\uE28C\uE28D\uE28E\uE28F\uE290\uE291\u9D43"+
-        "\u9D44\u9D45\u9D46\u9D47\u9D48\u9D49\u9D4A\u9D4B"+
-        "\u9D4C\u9D4D\u9D4E\u9D4F\u9D50\u9D51\u9D52\u9D53"+
-        "\u9D54\u9D55\u9D56\u9D57\u9D58\u9D59\u9D5A\u9D5B"+
-        "\u9D5C\u9D5D\u9D5E\u9D5F\u9D60\u9D61\u9D62\u9D63"+
-        "\u9D64\u9D65\u9D66\u9D67\u9D68\u9D69\u9D6A\u9D6B"+
-        "\u9D6C\u9D6D\u9D6E\u9D6F\u9D70\u9D71\u9D72\u9D73"+
-        "\u9D74\u9D75\u9D76\u9D77\u9D78\u9D79\u9D7A\u9D7B"+
-        "\u9D7C\u9D7D\u9D7E\u9D7F\u9D80\u9D81\uFFFD\u9D82"+
-        "\u9D83\u9D84\u9D85\u9D86\u9D87\u9D88\u9D89\u9D8A"+
-        "\u9D8B\u9D8C\u9D8D\u9D8E\u9D8F\u9D90\u9D91\u9D92"+
-        "\u9D93\u9D94\u9D95\u9D96\u9D97\u9D98\u9D99\u9D9A"+
-        "\u9D9B\u9D9C\u9D9D\u9D9E\u9D9F\u9DA0\u9DA1\u9DA2"+
-        "\uE292\uE293\uE294\uE295\uE296\uE297\uE298\uE299"+
-        "\uE29A\uE29B\uE29C\uE29D\uE29E\uE29F\uE2A0\uE2A1"+
-        "\uE2A2\uE2A3\uE2A4\uE2A5\uE2A6\uE2A7\uE2A8\uE2A9"+
-        "\uE2AA\uE2AB\uE2AC\uE2AD\uE2AE\uE2AF\uE2B0\uE2B1"+
-        "\uE2B2\uE2B3\uE2B4\uE2B5\uE2B6\uE2B7\uE2B8\uE2B9"+
-        "\uE2BA\uE2BB\uE2BC\uE2BD\uE2BE\uE2BF\uE2C0\uE2C1"+
-        "\uE2C2\uE2C3\uE2C4\uE2C5\uE2C6\uE2C7\uE2C8\uE2C9"+
-        "\uE2CA\uE2CB\uE2CC\uE2CD\uE2CE\uE2CF\uE2D0\uE2D1"+
-        "\uE2D2\uE2D3\uE2D4\uE2D5\uE2D6\uE2D7\uE2D8\uE2D9"+
-        "\uE2DA\uE2DB\uE2DC\uE2DD\uE2DE\uE2DF\uE2E0\uE2E1"+
-        "\uE2E2\uE2E3\uE2E4\uE2E5\uE2E6\uE2E7\uE2E8\uE2E9"+
-        "\uE2EA\uE2EB\uE2EC\uE2ED\uE2EE\uE2EF\u9DA3\u9DA4"+
-        "\u9DA5\u9DA6\u9DA7\u9DA8\u9DA9\u9DAA\u9DAB\u9DAC"+
-        "\u9DAD\u9DAE\u9DAF\u9DB0\u9DB1\u9DB2\u9DB3\u9DB4"+
-        "\u9DB5\u9DB6\u9DB7\u9DB8\u9DB9\u9DBA\u9DBB\u9DBC"+
-        "\u9DBD\u9DBE\u9DBF\u9DC0\u9DC1\u9DC2\u9DC3\u9DC4"+
-        "\u9DC5\u9DC6\u9DC7\u9DC8\u9DC9\u9DCA\u9DCB\u9DCC"+
-        "\u9DCD\u9DCE\u9DCF\u9DD0\u9DD1\u9DD2\u9DD3\u9DD4"+
-        "\u9DD5\u9DD6\u9DD7\u9DD8\u9DD9\u9DDA\u9DDB\u9DDC"+
-        "\u9DDD\u9DDE\u9DDF\u9DE0\u9DE1\uFFFD\u9DE2\u9DE3"+
-        "\u9DE4\u9DE5\u9DE6\u9DE7\u9DE8\u9DE9\u9DEA\u9DEB"+
-        "\u9DEC\u9DED\u9DEE\u9DEF\u9DF0\u9DF1\u9DF2\u9DF3"+
-        "\u9DF4\u9DF5\u9DF6\u9DF7\u9DF8\u9DF9\u9DFA\u9DFB"+
-        "\u9DFC\u9DFD\u9DFE\u9DFF\u9E00\u9E01\u9E02\uE2F0"+
-        "\uE2F1\uE2F2\uE2F3\uE2F4\uE2F5\uE2F6\uE2F7\uE2F8"+
-        "\uE2F9\uE2FA\uE2FB\uE2FC\uE2FD\uE2FE\uE2FF\uE300"+
-        "\uE301\uE302\uE303\uE304\uE305\uE306\uE307\uE308"+
-        "\uE309\uE30A\uE30B\uE30C\uE30D\uE30E\uE30F\uE310"+
-        "\uE311\uE312\uE313\uE314\uE315\uE316\uE317\uE318"+
-        "\uE319\uE31A\uE31B\uE31C\uE31D\uE31E\uE31F\uE320"+
-        "\uE321\uE322\uE323\uE324\uE325\uE326\uE327\uE328"+
-        "\uE329\uE32A\uE32B\uE32C\uE32D\uE32E\uE32F\uE330"+
-        "\uE331\uE332\uE333\uE334\uE335\uE336\uE337\uE338"+
-        "\uE339\uE33A\uE33B\uE33C\uE33D\uE33E\uE33F\uE340"+
-        "\uE341\uE342\uE343\uE344\uE345\uE346\uE347\uE348"+
-        "\uE349\uE34A\uE34B\uE34C\uE34D\u9E03\u9E04\u9E05"+
-        "\u9E06\u9E07\u9E08\u9E09\u9E0A\u9E0B\u9E0C\u9E0D"+
-        "\u9E0E\u9E0F\u9E10\u9E11\u9E12\u9E13\u9E14\u9E15"+
-        "\u9E16\u9E17\u9E18\u9E19\u9E1A\u9E1B\u9E1C\u9E1D"+
-        "\u9E1E\u9E24\u9E27\u9E2E\u9E30\u9E34\u9E3B\u9E3C"+
-        "\u9E40\u9E4D\u9E50\u9E52\u9E53\u9E54\u9E56\u9E59"+
-        "\u9E5D\u9E5F\u9E60\u9E61\u9E62\u9E65\u9E6E\u9E6F"+
-        "\u9E72\u9E74\u9E75\u9E76\u9E77\u9E78\u9E79\u9E7A"+
-        "\u9E7B\u9E7C\u9E7D\u9E80\uFFFD\u9E81\u9E83\u9E84"+
-        "\u9E85\u9E86\u9E89\u9E8A\u9E8C\u9E8D\u9E8E\u9E8F"+
-        "\u9E90\u9E91\u9E94\u9E95\u9E96\u9E97\u9E98\u9E99"+
-        "\u9E9A\u9E9B\u9E9C\u9E9E\u9EA0\u9EA1\u9EA2\u9EA3"+
-        "\u9EA4\u9EA5\u9EA7\u9EA8\u9EA9\u9EAA\uE34E\uE34F"+
-        "\uE350\uE351\uE352\uE353\uE354\uE355\uE356\uE357"+
-        "\uE358\uE359\uE35A\uE35B\uE35C\uE35D\uE35E\uE35F"+
-        "\uE360\uE361\uE362\uE363\uE364\uE365\uE366\uE367"+
-        "\uE368\uE369\uE36A\uE36B\uE36C\uE36D\uE36E\uE36F"+
-        "\uE370\uE371\uE372\uE373\uE374\uE375\uE376\uE377"+
-        "\uE378\uE379\uE37A\uE37B\uE37C\uE37D\uE37E\uE37F"+
-        "\uE380\uE381\uE382\uE383\uE384\uE385\uE386\uE387"+
-        "\uE388\uE389\uE38A\uE38B\uE38C\uE38D\uE38E\uE38F"+
-        "\uE390\uE391\uE392\uE393\uE394\uE395\uE396\uE397"+
-        "\uE398\uE399\uE39A\uE39B\uE39C\uE39D\uE39E\uE39F"+
-        "\uE3A0\uE3A1\uE3A2\uE3A3\uE3A4\uE3A5\uE3A6\uE3A7"+
-        "\uE3A8\uE3A9\uE3AA\uE3AB\u9EAB\u9EAC\u9EAD\u9EAE"+
-        "\u9EAF\u9EB0\u9EB1\u9EB2\u9EB3\u9EB5\u9EB6\u9EB7"+
-        "\u9EB9\u9EBA\u9EBC\u9EBF\u9EC0\u9EC1\u9EC2\u9EC3"+
-        "\u9EC5\u9EC6\u9EC7\u9EC8\u9ECA\u9ECB\u9ECC\u9ED0"+
-        "\u9ED2\u9ED3\u9ED5\u9ED6\u9ED7\u9ED9\u9EDA\u9EDE"+
-        "\u9EE1\u9EE3\u9EE4\u9EE6\u9EE8\u9EEB\u9EEC\u9EED"+
-        "\u9EEE\u9EF0\u9EF1\u9EF2\u9EF3\u9EF4\u9EF5\u9EF6"+
-        "\u9EF7\u9EF8\u9EFA\u9EFD\u9EFF\u9F00\u9F01\u9F02"+
-        "\u9F03\u9F04\u9F05\uFFFD\u9F06\u9F07\u9F08\u9F09"+
-        "\u9F0A\u9F0C\u9F0F\u9F11\u9F12\u9F14\u9F15\u9F16"+
-        "\u9F18\u9F1A\u9F1B\u9F1C\u9F1D\u9F1E\u9F1F\u9F21"+
-        "\u9F23\u9F24\u9F25\u9F26\u9F27\u9F28\u9F29\u9F2A"+
-        "\u9F2B\u9F2D\u9F2E\u9F30\u9F31\uE3AC\uE3AD\uE3AE"+
-        "\uE3AF\uE3B0\uE3B1\uE3B2\uE3B3\uE3B4\uE3B5\uE3B6"+
-        "\uE3B7\uE3B8\uE3B9\uE3BA\uE3BB\uE3BC\uE3BD\uE3BE"+
-        "\uE3BF\uE3C0\uE3C1\uE3C2\uE3C3\uE3C4\uE3C5\uE3C6"+
-        "\uE3C7\uE3C8\uE3C9\uE3CA\uE3CB\uE3CC\uE3CD\uE3CE"+
-        "\uE3CF\uE3D0\uE3D1\uE3D2\uE3D3\uE3D4\uE3D5\uE3D6"+
-        "\uE3D7\uE3D8\uE3D9\uE3DA\uE3DB\uE3DC\uE3DD\uE3DE"+
-        "\uE3DF\uE3E0\uE3E1\uE3E2\uE3E3\uE3E4\uE3E5\uE3E6"+
-        "\uE3E7\uE3E8\uE3E9\uE3EA\uE3EB\uE3EC\uE3ED\uE3EE"+
-        "\uE3EF\uE3F0\uE3F1\uE3F2\uE3F3\uE3F4\uE3F5\uE3F6"+
-        "\uE3F7\uE3F8\uE3F9\uE3FA\uE3FB\uE3FC\uE3FD\uE3FE"+
-        "\uE3FF\uE400\uE401\uE402\uE403\uE404\uE405\uE406"+
-        "\uE407\uE408\uE409\u9F32\u9F33\u9F34\u9F35\u9F36"+
-        "\u9F38\u9F3A\u9F3C\u9F3F\u9F40\u9F41\u9F42\u9F43"+
-        "\u9F45\u9F46\u9F47\u9F48\u9F49\u9F4A\u9F4B\u9F4C"+
-        "\u9F4D\u9F4E\u9F4F\u9F52\u9F53\u9F54\u9F55\u9F56"+
-        "\u9F57\u9F58\u9F59\u9F5A\u9F5B\u9F5C\u9F5D\u9F5E"+
-        "\u9F5F\u9F60\u9F61\u9F62\u9F63\u9F64\u9F65\u9F66"+
-        "\u9F67\u9F68\u9F69\u9F6A\u9F6B\u9F6C\u9F6D\u9F6E"+
-        "\u9F6F\u9F70\u9F71\u9F72\u9F73\u9F74\u9F75\u9F76"+
-        "\u9F77\u9F78\uFFFD\u9F79\u9F7A\u9F7B\u9F7C\u9F7D"+
-        "\u9F7E\u9F81\u9F82\u9F8D\u9F8E\u9F8F\u9F90\u9F91"+
-        "\u9F92\u9F93\u9F94\u9F95\u9F96\u9F97\u9F98\u9F9C"+
-        "\u9F9D\u9F9E\u9FA1\u9FA2\u9FA3\u9FA4\u9FA5\uF92C"+
-        "\uF979\uF995\uF9E7\uF9F1\uE40A\uE40B\uE40C\uE40D"+
-        "\uE40E\uE40F\uE410\uE411\uE412\uE413\uE414\uE415"+
-        "\uE416\uE417\uE418\uE419\uE41A\uE41B\uE41C\uE41D"+
-        "\uE41E\uE41F\uE420\uE421\uE422\uE423\uE424\uE425"+
-        "\uE426\uE427\uE428\uE429\uE42A\uE42B\uE42C\uE42D"+
-        "\uE42E\uE42F\uE430\uE431\uE432\uE433\uE434\uE435"+
-        "\uE436\uE437\uE438\uE439\uE43A\uE43B\uE43C\uE43D"+
-        "\uE43E\uE43F\uE440\uE441\uE442\uE443\uE444\uE445"+
-        "\uE446\uE447\uE448\uE449\uE44A\uE44B\uE44C\uE44D"+
-        "\uE44E\uE44F\uE450\uE451\uE452\uE453\uE454\uE455"+
-        "\uE456\uE457\uE458\uE459\uE45A\uE45B\uE45C\uE45D"+
-        "\uE45E\uE45F\uE460\uE461\uE462\uE463\uE464\uE465"+
-        "\uE466\uE467\uFA0C\uFA0D\uFA0E\uFA0F\uFA11\uFA13"+
-        "\uFA14\uFA18\uFA1F\uFA20\uFA21\uFA23\uFA24\uFA27"+
-        "\uFA28\uFA29\u2E81\uE816\uE817\uE818\u2E84\u3473"+
-        "\u3447\u2E88\u2E8B\uE81E\u359E\u361A\u360E\u2E8C"+
-        "\u2E97\u396E\u3918\uE826\u39CF\u39DF\u3A73\u39D0"+
-        "\uE82B\uE82C\u3B4E\u3C6E\u3CE0\u2EA7\uE831\uE832"+
-        "\u2EAA\u4056\u415F\u2EAE\u4337\u2EB3\u2EB6\u2EB7"+
-        "\uE83B\u43B1\u43AC\u2EBB\u43DD\u44D6\u4661\u464C"+
-        "\uE843\uFFFD\u4723\u4729\u477C\u478D\u2ECA\u4947"+
-        "\u497A\u497D\u4982\u4983\u4985\u4986\u499F\u499B"+
-        "\u49B7\u49B6\uE854\uE855\u4CA3\u4C9F\u4CA0\u4CA1"+
-        "\u4C77\u4CA2\u4D13\u4D14\u4D15\u4D16\u4D17\u4D18"+
-        "\u4D19\u4DAE\uE864\uE468\uE469\uE46A\uE46B\uE46C"+
-        "\uE46D\uE46E\uE46F\uE470\uE471\uE472\uE473\uE474"+
-        "\uE475\uE476\uE477\uE478\uE479\uE47A\uE47B\uE47C"+
-        "\uE47D\uE47E\uE47F\uE480\uE481\uE482\uE483\uE484"+
-        "\uE485\uE486\uE487\uE488\uE489\uE48A\uE48B\uE48C"+
-        "\uE48D\uE48E\uE48F\uE490\uE491\uE492\uE493\uE494"+
-        "\uE495\uE496\uE497\uE498\uE499\uE49A\uE49B\uE49C"+
-        "\uE49D\uE49E\uE49F\uE4A0\uE4A1\uE4A2\uE4A3\uE4A4"+
-        "\uE4A5\uE4A6\uE4A7\uE4A8\uE4A9\uE4AA\uE4AB\uE4AC"+
-        "\uE4AD\uE4AE\uE4AF\uE4B0\uE4B1\uE4B2\uE4B3\uE4B4"+
-        "\uE4B5\uE4B6\uE4B7\uE4B8\uE4B9\uE4BA\uE4BB\uE4BC"+
-        "\uE4BD\uE4BE\uE4BF\uE4C0\uE4C1\uE4C2\uE4C3\uE4C4"+
-        "\uE4C5";
-
-    final static short index1[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-        16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
-        32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
-        48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
-        64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
-        80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
-        96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
-        112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 0
-    };
-
-    static String index2[] = {
-        innerIndex0,
-        innerIndex1,
-        innerIndex2,
-        innerIndex3,
-        innerIndex4,
-        innerIndex5,
-        innerIndex6,
-        innerIndex7
-    };
-
-
-
-
-
-    private final static String innerEncoderIndex0=
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007"+
-        "\u2008\u2009\u200A\u200B\u200C\u200D\u200E\u200F"+
-        "\u2010\u2011\u2012\u2013\u2014\u2015\u2016\u2017"+
-        "\u2018\u2019\u201A\u201B\u201C\u201D\u201E\u201F"+
-        "\u2020\u2021\u2022\u2023\uA1E8\u2024\u2025\uA1EC"+
-        "\uA1A7\u2026\u2027\u2028\u2029\u202A\u202B\u202C"+
-        "\uA1E3\uA1C0\u202D\u202E\u202F\u2030\u2031\uA1A4"+
-        "\u2032\u2033\u2034\u2035\u2036\u2037\u2038\u2039"+
-        "\u203A\u203B\u203C\u203D\u203E\u203F\u2040\u2041"+
-        "\u2042\u2043\u2044\u2045\u2046\u2047\u2048\u2049"+
-        "\u204A\u204B\u204C\u204D\u204E\u204F\u2050\uA1C1"+
-        "\u2051\u2052\u2053\u2054\u2055\u2056\u2057\u2058"+
-        "\uA8A4\uA8A2\u2059\u205A\u205B\u205C\u205D\u205E"+
-        "\uA8A8\uA8A6\uA8BA\u205F\uA8AC\uA8AA\u2060\u2061"+
-        "\u2062\u2063\uA8B0\uA8AE\u2064\u2065\u2066\uA1C2"+
-        "\u2067\uA8B4\uA8B2\u2068\uA8B9\u2069\u206A\u206B"+
-        "\u206C\uA8A1\u206D\u206E\u206F\u2070\u2071\u2072"+
-        "\u2073\u2074\u2075\u2076\u2077\u2078\u2079\u207A"+
-        "\u207B\u207C\u207D\uA8A5\u207E\u207F\u2080\u2081"+
-        "\u2082\u2083\u2084\uA8A7\u2085\u2086\u2087\u2088"+
-        "\u2089\u208A\u208B\u208C\u208D\u208E\u208F\u2090"+
-        "\u2091\u2092\u2093\uA8A9\u2094\u2095\u2096\u2097"+
-        "\u2098\u2099\u209A\u209B\u209C\u209D\u209E\u209F"+
-        "\u20A0\u20A1\u20A2\u20A3\u20A4\u20A5\u20A6\u20A7"+
-        "\u20A8\u20A9\u20AA\u20AB\uA8BD\u20AC\u20AD\u20AE"+
-        "\uA8BE\u20AF\u20B0\u20B1\u20B2\uA8AD\u20B3\u20B4"+
-        "\u20B5\u20B6\u20B7\u20B8\u20B9\u20BA\u20BB\u20BC"+
-        "\u20BD\u20BE\u20BF\u20C0\u20C1\u20C2\u20C3\u20C4"+
-        "\u20C5\u20C6\u20C7\u20C8\u20C9\u20CA\u20CB\u20CC"+
-        "\u20CD\u20CE\u20CF\uA8B1\u20D0\u20D1\u20D2\u20D3"+
-        "\u20D4\u20D5\u20D6\u20D7\u20D8\u20D9\u20DA\u20DB"+
-        "\u20DC\u20DD\u20DE\u20DF\u20E0\u20E1\u20E2\u20E3"+
-        "\u20E4\u20E5\u20E6\u20E7\u20E8\u20E9\u20EA\u20EB"+
-        "\u20EC\u20ED\u20EE\u20EF\u20F0\u20F1\u20F2\u20F3"+
-        "\u20F4\u20F5\u20F6\u20F7\u20F8\u20F9\u20FA\u20FB"+
-        "\u20FC\u20FD\u20FE\u20FF\u2100\u2101\u2102\u2103"+
-        "\u2104\u2105\u2106\u2107\u2108\u2109\u210A\u210B"+
-        "\u210C\u210D\u210E\u210F\u2110\u2111\u2112\u2113"+
-        "\u2114\u2115\u2116\u2117\u2118\u2119\u211A\u211B"+
-        "\u211C\u211D\u211E\u211F\u2120\u2121\u2122\u2123"+
-        "\u2124\u2125\u2126\u2127\u2128\u2129\u212A\u212B"+
-        "\u212C\u212D\u212E\u212F\u2130\u2131\uA8A3\u2132"+
-        "\uA8AB\u2133\uA8AF\u2134\uA8B3\u2135\uA8B5\u2136"+
-        "\uA8B6\u2137\uA8B7\u2138\uA8B8\u2139\u213A\u213B"+
-        "\u213C\u213D\u213E\u213F\u2140\u2141\u2142\u2143"+
-        "\u2144\u2145\u2146\u2147\u2148\u2149\u214A\u214B"+
-        "\u214C\u214D\u214E\u214F\u2150\u2151\u2152\u2153"+
-        "\u2154\uA8BF\u2155\u2156\u2157\u2158\u2159\u215A"+
-        "\u215B\u215C\u215D\u215E\u215F\u2160\u2161\u2162"+
-        "\u2163\u2164\u2165\u2166\u2167\u2168\u2169\u216A"+
-        "\u216B\u216C\u216D\u216E\u216F\u2170\u2171\u2172"+
-        "\u2173\u2174\u2175\u2176\u2177\u2178\u2179\u217A"+
-        "\u217B\u217C\u217D\u217E\u217F\u2180\u2181\u2182"+
-        "\u2183\u2184\u2185\u2186\u2187\u2188\u2189\u218A"+
-        "\u218B\u218C\u218D\u218E\u218F\u2190\u2191\u2192"+
-        "\u2193\u2194\u2195\u2196\u2197\u2198\u2199\u219A"+
-        "\u219B\u219C\u219D\u219E\u219F\u21A0\u21A1\u21A2"+
-        "\u21A3\u21A4\u21A5\u21A6\u21A7\u21A8\u21A9\u21AA"+
-        "\u21AB\uA8BB\u21AC\u21AD\u21AE\u21AF\u21B0\u21B1"+
-        "\u21B2\u21B3\u21B4\u21B5\u21B6\u21B7\u21B8\u21B9"+
-        "\u21BA\uA8C0\u21BB\u21BC\u21BD\u21BE\u21BF\u21C0"+
-        "\u21C1\u21C2\u21C3\u21C4\u21C5\u21C6\u21C7\u21C8"+
-        "\u21C9\u21CA\u21CB\u21CC\u21CD\u21CE\u21CF\u21D0"+
-        "\u21D1\u21D2\u21D3\u21D4\u21D5\u21D6\u21D7\u21D8"+
-        "\u21D9\u21DA\u21DB\u21DC\u21DD\u21DE\u21DF\u21E0"+
-        "\u21E1\u21E2\u21E3\u21E4\u21E5\u21E6\u21E7\u21E8"+
-        "\u21E9\u21EA\u21EB\u21EC\u21ED\u21EE\u21EF\u21F0"+
-        "\u21F1\u21F2\u21F3\u21F4\u21F5\u21F6\u21F7\u21F8"+
-        "\u21F9\u21FA\u21FB\u21FC\u21FD\u21FE\u21FF\u2200"+
-        "\u2201\u2202\u2203\u2204\u2205\u2206\u2207\u2208"+
-        "\u2209\u220A\u220B\u220C\u220D\u220E\u220F\u2210"+
-        "\u2211\u2212\u2213\u2214\u2215\u2216\u2217\u2218"+
-        "\u2219\u221A\u221B\u221C\u221D\u221E\u221F\uA1A6"+
-        "\u2220\uA1A5\uA840\uA841\u2221\u2222\u2223\u2224"+
-        "\u2225\u2226\u2227\u2228\u2229\u222A\u222B\u222C"+
-        "\u222D\uA842\u222E\u222F\u2230\u2231\u2232\u2233"+
-        "\u2234\u2235\u2236\u2237\u2238\u2239\u223A\u223B"+
-        "\u223C\u223D\u223E\u223F\u2240\u2241\u2242\u2243"+
-        "\u2244\u2245\u2246\u2247\u2248\u2249\u224A\u224B"+
-        "\u224C\u224D\u224E\u224F\u2250\u2251\u2252\u2253"+
-        "\u2254\u2255\u2256\u2257\u2258\u2259\u225A\u225B"+
-        "\u225C\u225D\u225E\u225F\u2260\u2261\u2262\u2263"+
-        "\u2264\u2265\u2266\u2267\u2268\u2269\u226A\u226B"+
-        "\u226C\u226D\u226E\u226F\u2270\u2271\u2272\u2273"+
-        "\u2274\u2275\u2276\u2277\u2278\u2279\u227A\u227B"+
-        "\u227C\u227D\u227E\u227F\u2280\u2281\u2282\u2283"+
-        "\u2284\u2285\u2286\u2287\u2288\u2289\u228A\u228B"+
-        "\u228C\u228D\u228E\u228F\u2290\u2291\u2292\u2293"+
-        "\u2294\u2295\u2296\u2297\u2298\u2299\u229A\u229B"+
-        "\u229C\u229D\u229E\u229F\u22A0\u22A1\u22A2\u22A3"+
-        "\u22A4\u22A5\u22A6\u22A7\u22A8\u22A9\u22AA\u22AB"+
-        "\u22AC\u22AD\u22AE\u22AF\u22B0\u22B1\u22B2\u22B3"+
-        "\u22B4\u22B5\u22B6\u22B7\u22B8\u22B9\u22BA\u22BB"+
-        "\u22BC\u22BD\u22BE\u22BF\u22C0\u22C1\u22C2\u22C3"+
-        "\u22C4\u22C5\u22C6\u22C7\u22C8\u22C9\u22CA\u22CB"+
-        "\u22CC\u22CD\u22CE\u22CF\u22D0\u22D1\u22D2\u22D3"+
-        "\u22D4\u22D5\u22D6\u22D7\u22D8\u22D9\u22DA\u22DB"+
-        "\u22DC\u22DD\u22DE\u22DF\u22E0\u22E1\u22E2\u22E3"+
-        "\u22E4\uA6A1\uA6A2\uA6A3\uA6A4\uA6A5\uA6A6\uA6A7"+
-        "\uA6A8\uA6A9\uA6AA\uA6AB\uA6AC\uA6AD\uA6AE\uA6AF"+
-        "\uA6B0\uA6B1\u22E5\uA6B2\uA6B3\uA6B4\uA6B5\uA6B6"+
-        "\uA6B7\uA6B8\u22E6\u22E7\u22E8\u22E9\u22EA\u22EB"+
-        "\u22EC\uA6C1\uA6C2\uA6C3\uA6C4\uA6C5\uA6C6\uA6C7"+
-        "\uA6C8\uA6C9\uA6CA\uA6CB\uA6CC\uA6CD\uA6CE\uA6CF"+
-        "\uA6D0\uA6D1\u22ED\uA6D2\uA6D3\uA6D4\uA6D5\uA6D6"+
-        "\uA6D7\uA6D8\u22EE\u22EF\u22F0\u22F1\u22F2\u22F3"+
-        "\u22F4\u22F5\u22F6\u22F7\u22F8\u22F9\u22FA\u22FB"+
-        "\u22FC\u22FD\u22FE\u22FF\u2300\u2301\u2302\u2303"+
-        "\u2304\u2305\u2306\u2307\u2308\u2309\u230A\u230B"+
-        "\u230C\u230D\u230E\u230F\u2310\u2311\u2312\u2313"+
-        "\u2314\u2315\u2316\u2317\u2318\u2319\u231A\u231B"+
-        "\u231C\u231D\u231E\u231F\u2320\u2321\u2322\u2323"+
-        "\u2324\uA7A7\u2325\u2326\u2327\u2328\u2329\u232A"+
-        "\u232B\u232C\u232D\u232E\u232F\u2330\u2331\u2332"+
-        "\uA7A1\uA7A2\uA7A3\uA7A4\uA7A5\uA7A6\uA7A8\uA7A9"+
-        "\uA7AA\uA7AB\uA7AC\uA7AD\uA7AE\uA7AF\uA7B0\uA7B1"+
-        "\uA7B2\uA7B3\uA7B4\uA7B5\uA7B6\uA7B7\uA7B8\uA7B9"+
-        "\uA7BA\uA7BB\uA7BC\uA7BD\uA7BE\uA7BF\uA7C0\uA7C1"+
-        "\uA7D1\uA7D2\uA7D3\uA7D4\uA7D5\uA7D6\uA7D8\uA7D9"+
-        "\uA7DA\uA7DB\uA7DC\uA7DD\uA7DE\uA7DF\uA7E0\uA7E1"+
-        "\uA7E2\uA7E3\uA7E4\uA7E5\uA7E6\uA7E7\uA7E8\uA7E9"+
-        "\uA7EA\uA7EB\uA7EC\uA7ED\uA7EE\uA7EF\uA7F0\uA7F1"+
-        "\u2333\uA7D7\u2334\u2335\u2336\u2337\u2338\u2339"+
-        "\u233A\u233B\u233C\u233D\u233E\u233F\u2340\u2341"+
-        "\u2342\u2343\u2344\u2345\u2346\u2347\u2348\u2349"+
-        "\u234A\u234B\u234C\u234D\u234E\u234F\u2350\u2351"+
-        "\u2352\u2353\u2354\u2355\u2356\u2357\u2358\u2359"+
-        "\u235A\u235B\u235C\u235D\u235E\u235F\u2360\u2361"+
-        "\u2362\u2363\u2364\u2365\u2366\u2367\u2368\u2369"+
-        "\u236A\u236B\u236C\u236D\u236E\u236F\u2370\u2371"+
-        "\u2372\u2373\u2374\u2375\u2376\u2377\u2378\u2379"+
-        "\u237A\u237B\u237C\u237D\u237E\u237F\u2380\u2381"+
-        "\u2382\u2383\u2384\u2385\u2386\u2387\u2388\u2389"+
-        "\u238A\u238B\u238C\u238D\u238E\u238F\u2390\u2391"+
-        "\u2392\u2393\u2394\u2395\u2396\u2397\u2398\u2399"+
-        "\u239A\u239B\u239C\u239D\u239E\u239F\u23A0\u23A1"+
-        "\u23A2\u23A3\u23A4\u23A5\u23A6\u23A7\u23A8\u23A9"+
-        "\u23AA\u23AB\u23AC\u23AD\u23AE\u23AF\u23B0\u23B1"+
-        "\u23B2\u23B3\u23B4\u23B5\u23B6\u23B7\u23B8\u23B9"+
-        "\u23BA\u23BB\u23BC\u23BD\u23BE\u23BF\u23C0\u23C1"+
-        "\u23C2\u23C3\u23C4\u23C5\u23C6\u23C7\u23C8\u23C9"+
-        "\u23CA\u23CB\u23CC\u23CD\u23CE\u23CF\u23D0\u23D1"+
-        "\u23D2\u23D3\u23D4\u23D5\u23D6\u23D7\u23D8\u23D9"+
-        "\u23DA\u23DB\u23DC\u23DD\u23DE\u23DF\u23E0\u23E1"+
-        "\u23E2\u23E3\u23E4\u23E5\u23E6\u23E7\u23E8\u23E9"+
-        "\u23EA\u23EB\u23EC\u23ED\u23EE\u23EF\u23F0\u23F1"+
-        "\u23F2\u23F3\u23F4\u23F5\u23F6\u23F7\u23F8\u23F9"+
-        "\u23FA\u23FB\u23FC\u23FD\u23FE\u23FF\u2400\u2401"+
-        "\u2402\u2403\u2404\u2405\u2406\u2407\u2408\u2409"+
-        "\u240A\u240B\u240C\u240D\u240E\u240F\u2410\u2411"+
-        "\u2412\u2413\u2414\u2415\u2416\u2417\u2418\u2419"+
-        "\u241A\u241B\u241C\u241D\u241E\u241F\u2420\u2421"+
-        "\u2422\u2423\u2424\u2425\u2426\u2427\u2428\u2429"+
-        "\u242A\u242B\u242C\u242D\u242E\u242F\u2430\u2431"+
-        "\u2432\u2433\u2434\u2435\u2436\u2437\u2438\u2439"+
-        "\u243A\u243B\u243C\u243D\u243E\u243F\u2440\u2441"+
-        "\u2442\u2443\u2444\u2445\u2446\u2447\u2448\u2449"+
-        "\u244A\u244B\u244C\u244D\u244E\u244F\u2450\u2451"+
-        "\u2452\u2453\u2454\u2455\u2456\u2457\u2458\u2459"+
-        "\u245A\u245B\u245C\u245D\u245E\u245F\u2460\u2461"+
-        "\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469"+
-        "\u246A\u246B\u246C\u246D\u246E\u246F\u2470\u2471"+
-        "\u2472\u2473\u2474\u2475\u2476\u2477\u2478\u2479"+
-        "\u247A\u247B\u247C\u247D\u247E\u247F\u2480\u2481"+
-        "\u2482\u2483\u2484\u2485\u2486\u2487\u2488\u2489"+
-        "\u248A\u248B\u248C\u248D\u248E\u248F\u2490\u2491"+
-        "\u2492\u2493\u2494\u2495\u2496\u2497\u2498\u2499"+
-        "\u249A\u249B\u249C\u249D\u249E\u249F\u24A0\u24A1"+
-        "\u24A2\u24A3\u24A4\u24A5\u24A6\u24A7\u24A8\u24A9"+
-        "\u24AA\u24AB\u24AC\u24AD\u24AE\u24AF\u24B0\u24B1"+
-        "\u24B2\u24B3\u24B4\u24B5\u24B6\u24B7\u24B8\u24B9"+
-        "\u24BA\u24BB\u24BC\u24BD\u24BE\u24BF\u24C0\u24C1"+
-        "\u24C2\u24C3\u24C4\u24C5\u24C6\u24C7\u24C8\u24C9"+
-        "\u24CA\u24CB\u24CC\u24CD\u24CE\u24CF\u24D0\u24D1"+
-        "\u24D2\u24D3\u24D4\u24D5\u24D6\u24D7\u24D8\u24D9"+
-        "\u24DA\u24DB\u24DC\u24DD\u24DE\u24DF\u24E0\u24E1"+
-        "\u24E2\u24E3\u24E4\u24E5\u24E6\u24E7\u24E8\u24E9"+
-        "\u24EA\u24EB\u24EC\u24ED\u24EE\u24EF\u24F0\u24F1"+
-        "\u24F2\u24F3\u24F4\u24F5\u24F6\u24F7\u24F8\u24F9"+
-        "\u24FA\u24FB\u24FC\u24FD\u24FE\u24FF\u2500\u2501"+
-        "\u2502\u2503\u2504\u2505\u2506\u2507\u2508\u2509"+
-        "\u250A\u250B\u250C\u250D\u250E\u250F\u2510\u2511"+
-        "\u2512\u2513\u2514\u2515\u2516\u2517\u2518\u2519"+
-        "\u251A\u251B\u251C\u251D\u251E\u251F\u2520\u2521"+
-        "\u2522\u2523\u2524\u2525\u2526\u2527\u2528\u2529"+
-        "\u252A\u252B\u252C\u252D\u252E\u252F\u2530\u2531"+
-        "\u2532\u2533\u2534\u2535\u2536\u2537\u2538\u2539"+
-        "\u253A\u253B\u253C\u253D\u253E\u253F\u2540\u2541"+
-        "\u2542\u2543\u2544\u2545\u2546\u2547\u2548\u2549"+
-        "\u254A\u254B\u254C\u254D\u254E\u254F\u2550\u2551"+
-        "\u2552\u2553\u2554\u2555\u2556\u2557\u2558\u2559"+
-        "\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561"+
-        "\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569"+
-        "\u256A\u256B\u256C\u256D\u256E\u256F\u2570\u2571"+
-        "\u2572\u2573\u2574\u2575\u2576\u2577\u2578\u2579"+
-        "\u257A\u257B\u257C\u257D\u257E\u257F\u2580\u2581"+
-        "\u2582\u2583\u2584\u2585\u2586\u2587\u2588\u2589"+
-        "\u258A\u258B\u258C\u258D\u258E\u258F\u2590\u2591"+
-        "\u2592\u2593\u2594\u2595\u2596\u2597\u2598\u2599"+
-        "\u259A\u259B\u259C\u259D\u259E\u259F\u25A0\u25A1"+
-        "\u25A2\u25A3\u25A4\u25A5\u25A6\u25A7\u25A8\u25A9"+
-        "\u25AA\u25AB\u25AC\u25AD\u25AE\u25AF\u25B0\u25B1"+
-        "\u25B2\u25B3\u25B4\u25B5\u25B6\u25B7\u25B8\u25B9"+
-        "\u25BA\u25BB\u25BC\u25BD\u25BE\u25BF\u25C0\u25C1"+
-        "\u25C2\u25C3\u25C4\u25C5\u25C6\u25C7\u25C8\u25C9"+
-        "\u25CA\u25CB\u25CC\u25CD\u25CE\u25CF\u25D0\u25D1"+
-        "\u25D2\u25D3\u25D4\u25D5\u25D6\u25D7\u25D8\u25D9"+
-        "\u25DA\u25DB\u25DC\u25DD\u25DE\u25DF\u25E0\u25E1"+
-        "\u25E2\u25E3\u25E4\u25E5\u25E6\u25E7\u25E8\u25E9"+
-        "\u25EA\u25EB\u25EC\u25ED\u25EE\u25EF\u25F0\u25F1"+
-        "\u25F2\u25F3\u25F4\u25F5\u25F6\u25F7\u25F8\u25F9"+
-        "\u25FA\u25FB\u25FC\u25FD\u25FE\u25FF\u2600\u2601"+
-        "\u2602\u2603\u2604\u2605\u2606\u2607\u2608\u2609"+
-        "\u260A\u260B\u260C\u260D\u260E\u260F\u2610\u2611"+
-        "\u2612\u2613\u2614\u2615\u2616\u2617\u2618\u2619"+
-        "\u261A\u261B\u261C\u261D\u261E\u261F\u2620\u2621"+
-        "\u2622\u2623\u2624\u2625\u2626\u2627\u2628\u2629"+
-        "\u262A\u262B\u262C\u262D\u262E\u262F\u2630\u2631"+
-        "\u2632\u2633\u2634\u2635\u2636\u2637\u2638\u2639"+
-        "\u263A\u263B\u263C\u263D\u263E\u263F\u2640\u2641"+
-        "\u2642\u2643\u2644\u2645\u2646\u2647\u2648\u2649"+
-        "\u264A\u264B\u264C\u264D\u264E\u264F\u2650\u2651"+
-        "\u2652\u2653\u2654\u2655\u2656\u2657\u2658\u2659"+
-        "\u265A\u265B\u265C\u265D\u265E\u265F\u2660\u2661"+
-        "\u2662\u2663\u2664\u2665\u2666\u2667\u2668\u2669"+
-        "\u266A\u266B\u266C\u266D\u266E\u266F\u2670\u2671"+
-        "\u2672\u2673\u2674\u2675\u2676\u2677\u2678\u2679"+
-        "\u267A\u267B\u267C\u267D\u267E\u267F\u2680\u2681"+
-        "\u2682\u2683\u2684\u2685\u2686\u2687\u2688\u2689"+
-        "\u268A\u268B\u268C\u268D\u268E\u268F\u2690\u2691"+
-        "\u2692\u2693\u2694\u2695\u2696\u2697\u2698\u2699"+
-        "\u269A\u269B\u269C\u269D\u269E\u269F\u26A0\u26A1"+
-        "\u26A2\u26A3\u26A4\u26A5\u26A6\u26A7\u26A8\u26A9"+
-        "\u26AA\u26AB\u26AC\u26AD\u26AE\u26AF\u26B0\u26B1"+
-        "\u26B2\u26B3\u26B4\u26B5\u26B6\u26B7\u26B8\u26B9"+
-        "\u26BA\u26BB\u26BC\u26BD\u26BE\u26BF\u26C0\u26C1"+
-        "\u26C2\u26C3\u26C4\u26C5\u26C6\u26C7\u26C8\u26C9"+
-        "\u26CA\u26CB\u26CC\u26CD\u26CE\u26CF\u26D0\u26D1"+
-        "\u26D2\u26D3\u26D4\u26D5\u26D6\u26D7\u26D8\u26D9"+
-        "\u26DA\u26DB\u26DC\u26DD\u26DE\u26DF\u26E0\u26E1"+
-        "\u26E2\u26E3\u26E4\u26E5\u26E6\u26E7\u26E8\u26E9"+
-        "\u26EA\u26EB\u26EC\u26ED\u26EE\u26EF\u26F0\u26F1"+
-        "\u26F2\u26F3\u26F4\u26F5\u26F6\u26F7\u26F8\u26F9"+
-        "\u26FA\u26FB\u26FC\u26FD\u26FE\u26FF\u2700\u2701"+
-        "\u2702\u2703\u2704\u2705\u2706\u2707\u2708\u2709"+
-        "\u270A\u270B\u270C\u270D\u270E\u270F\u2710\u2711"+
-        "\u2712\u2713\u2714\u2715\u2716\u2717\u2718\u2719"+
-        "\u271A\u271B\u271C\u271D\u271E\u271F\u2720\u2721"+
-        "\u2722\u2723\u2724\u2725\u2726\u2727\u2728\u2729"+
-        "\u272A\u272B\u272C\u272D\u272E\u272F\u2730\u2731"+
-        "\u2732\u2733\u2734\u2735\u2736\u2737\u2738\u2739"+
-        "\u273A\u273B\u273C\u273D\u273E\u273F\u2740\u2741"+
-        "\u2742\u2743\u2744\u2745\u2746\u2747\u2748\u2749"+
-        "\u274A\u274B\u274C\u274D\u274E\u274F\u2750\u2751"+
-        "\u2752\u2753\u2754\u2755\u2756\u2757\u2758\u2759"+
-        "\u275A\u275B\u275C\u275D\u275E\u275F\u2760\u2761"+
-        "\u2762\u2763\u2764\u2765\u2766\u2767\u2768\u2769"+
-        "\u276A\u276B\u276C\u276D\u276E\u276F\u2770\u2771"+
-        "\u2772\u2773\u2774\u2775\u2776\u2777\u2778\u2779"+
-        "\u277A\u277B\u277C\u277D\u277E\u277F\u2780\u2781"+
-        "\u2782\u2783\u2784\u2785\u2786\u2787\u2788\u2789"+
-        "\u278A\u278B\u278C\u278D\u278E\u278F\u2790\u2791"+
-        "\u2792\u2793\u2794\u2795\u2796\u2797\u2798\u2799"+
-        "\u279A\u279B\u279C\u279D\u279E\u279F\u27A0\u27A1"+
-        "\u27A2\u27A3\u27A4\u27A5\u27A6\u27A7\u27A8\u27A9"+
-        "\u27AA\u27AB\u27AC\u27AD\u27AE\u27AF\u27B0\u27B1"+
-        "\u27B2\u27B3\u27B4\u27B5\u27B6\u27B7\u27B8\u27B9"+
-        "\u27BA\u27BB\u27BC\u27BD\u27BE\u27BF\u27C0\u27C1"+
-        "\u27C2\u27C3\u27C4\u27C5\u27C6\u27C7\u27C8\u27C9"+
-        "\u27CA\u27CB\u27CC\u27CD\u27CE\u27CF\u27D0\u27D1"+
-        "\u27D2\u27D3\u27D4\u27D5\u27D6\u27D7\u27D8\u27D9"+
-        "\u27DA\u27DB\u27DC\u27DD\u27DE\u27DF\u27E0\u27E1"+
-        "\u27E2\u27E3\u27E4\u27E5\u27E6\u27E7\u27E8\u27E9"+
-        "\u27EA\u27EB\u27EC\u27ED\u27EE\u27EF\u27F0\u27F1"+
-        "\u27F2\u27F3\u27F4\u27F5\u27F6\u27F7\u27F8\u27F9"+
-        "\u27FA\u27FB\u27FC\u27FD\u27FE\u27FF\u2800\u2801"+
-        "\u2802\u2803\u2804\u2805\u2806\u2807\u2808\u2809"+
-        "\u280A\u280B\u280C\u280D\u280E\u280F\u2810\u2811"+
-        "\u2812\u2813\u2814\u2815\u2816\u2817\u2818\u2819"+
-        "\u281A\u281B\u281C\u281D\u281E\u281F\u2820\u2821"+
-        "\u2822\u2823\u2824\u2825\u2826\u2827\u2828\u2829"+
-        "\u282A\u282B\u282C\u282D\u282E\u282F\u2830\u2831"+
-        "\u2832\u2833\u2834\u2835\u2836\u2837\u2838\u2839"+
-        "\u283A\u283B\u283C\u283D\u283E\u283F\u2840\u2841"+
-        "\u2842\u2843\u2844\u2845\u2846\u2847\u2848\u2849"+
-        "\u284A\u284B\u284C\u284D\u284E\u284F\u2850\u2851"+
-        "\u2852\u2853\u2854\u2855\u2856\u2857\u2858\u2859"+
-        "\u285A\u285B\u285C\u285D\u285E\u285F\u2860\u2861"+
-        "\u2862\u2863\u2864\u2865\u2866\u2867\u2868\u2869"+
-        "\u286A\u286B\u286C\u286D\u286E\u286F\u2870\u2871"+
-        "\u2872\u2873\u2874\u2875\u2876\u2877\u2878\u2879"+
-        "\u287A\u287B\u287C\u287D\u287E\u287F\u2880\u2881"+
-        "\u2882\u2883\u2884\u2885\u2886\u2887\u2888\u2889"+
-        "\u288A\u288B\u288C\u288D\u288E\u288F\u2890\u2891"+
-        "\u2892\u2893\u2894\u2895\u2896\u2897\u2898\u2899"+
-        "\u289A\u289B\u289C\u289D\u289E\u289F\u28A0\u28A1"+
-        "\u28A2\u28A3\u28A4\u28A5\u28A6\u28A7\u28A8\u28A9"+
-        "\u28AA\u28AB\u28AC\u28AD\u28AE\u28AF\u28B0\u28B1"+
-        "\u28B2\u28B3\u28B4\u28B5\u28B6\u28B7\u28B8\u28B9"+
-        "\u28BA\u28BB\u28BC\u28BD\u28BE\u28BF\u28C0\u28C1"+
-        "\u28C2\u28C3\u28C4\u28C5\u28C6\u28C7\u28C8\u28C9"+
-        "\u28CA\u28CB\u28CC\u28CD\u28CE\u28CF\u28D0\u28D1"+
-        "\u28D2\u28D3\u28D4\u28D5\u28D6\u28D7\u28D8\u28D9"+
-        "\u28DA\u28DB\u28DC\u28DD\u28DE\u28DF\u28E0\u28E1"+
-        "\u28E2\u28E3\u28E4\u28E5\u28E6\u28E7\u28E8\u28E9"+
-        "\u28EA\u28EB\u28EC\u28ED\u28EE\u28EF\u28F0\u28F1"+
-        "\u28F2\u28F3\u28F4\u28F5\u28F6\u28F7\u28F8\u28F9"+
-        "\u28FA\u28FB\u28FC\u28FD\u28FE\u28FF\u2900\u2901"+
-        "\u2902\u2903\u2904\u2905\u2906\u2907\u2908\u2909"+
-        "\u290A\u290B\u290C\u290D\u290E\u290F\u2910\u2911"+
-        "\u2912\u2913\u2914\u2915\u2916\u2917\u2918\u2919"+
-        "\u291A\u291B\u291C\u291D\u291E\u291F\u2920\u2921"+
-        "\u2922\u2923\u2924\u2925\u2926\u2927\u2928\u2929"+
-        "\u292A\u292B\u292C\u292D\u292E\u292F\u2930\u2931"+
-        "\u2932\u2933\u2934\u2935\u2936\u2937\u2938\u2939"+
-        "\u293A\u293B\u293C\u293D\u293E\u293F\u2940\u2941"+
-        "\u2942\u2943\u2944\u2945\u2946\u2947\u2948\u2949"+
-        "\u294A\u294B\u294C\u294D\u294E\u294F\u2950\u2951"+
-        "\u2952\u2953\u2954\u2955\u2956\u2957\u2958\u2959"+
-        "\u295A\u295B\u295C\u295D\u295E\u295F\u2960\u2961"+
-        "\u2962\u2963\u2964\u2965\u2966\u2967\u2968\u2969"+
-        "\u296A\u296B\u296C\u296D\u296E\u296F\u2970\u2971"+
-        "\u2972\u2973\u2974\u2975\u2976\u2977\u2978\u2979"+
-        "\u297A\u297B\u297C\u297D\u297E\u297F\u2980\u2981"+
-        "\u2982\u2983\u2984\u2985\u2986\u2987\u2988\u2989"+
-        "\u298A\u298B\u298C\u298D\u298E\u298F\u2990\u2991"+
-        "\u2992\u2993\u2994\u2995\u2996\u2997\u2998\u2999"+
-        "\u299A\u299B\u299C\u299D\u299E\u299F\u29A0\u29A1"+
-        "\u29A2\u29A3\u29A4\u29A5\u29A6\u29A7\u29A8\u29A9"+
-        "\u29AA\u29AB\u29AC\u29AD\u29AE\u29AF\u29B0\u29B1"+
-        "\u29B2\u29B3\u29B4\u29B5\u29B6\u29B7\u29B8\u29B9"+
-        "\u29BA\u29BB\u29BC\u29BD\u29BE\u29BF\u29C0\u29C1"+
-        "\u29C2\u29C3\u29C4\u29C5\u29C6\u29C7\u29C8\u29C9"+
-        "\u29CA\u29CB\u29CC\u29CD\u29CE\u29CF\u29D0\u29D1"+
-        "\u29D2\u29D3\u29D4\u29D5\u29D6\u29D7\u29D8\u29D9"+
-        "\u29DA\u29DB\u29DC\u29DD\u29DE\u29DF\u29E0\u29E1"+
-        "\u29E2\u29E3\u29E4\u29E5\u29E6\u29E7\u29E8\u29E9"+
-        "\u29EA\u29EB\u29EC\u29ED\u29EE\u29EF\u29F0\u29F1"+
-        "\u29F2\u29F3\u29F4\u29F5\u29F6\u29F7\u29F8\u29F9"+
-        "\u29FA\u29FB\u29FC\u29FD\u29FE\u29FF\u2A00\u2A01"+
-        "\u2A02\u2A03\u2A04\u2A05\u2A06\u2A07\u2A08\u2A09"+
-        "\u2A0A\u2A0B\u2A0C\u2A0D\u2A0E\u2A0F\u2A10\u2A11"+
-        "\u2A12\u2A13\u2A14\u2A15\u2A16\u2A17\u2A18\u2A19"+
-        "\u2A1A\u2A1B\u2A1C\u2A1D\u2A1E\u2A1F\u2A20\u2A21"+
-        "\u2A22\u2A23\u2A24\u2A25\u2A26\u2A27\u2A28\u2A29"+
-        "\u2A2A\u2A2B\u2A2C\u2A2D\u2A2E\u2A2F\u2A30\u2A31"+
-        "\u2A32\u2A33\u2A34\u2A35\u2A36\u2A37\u2A38\u2A39"+
-        "\u2A3A\u2A3B\u2A3C\u2A3D\u2A3E\u2A3F\u2A40\u2A41"+
-        "\u2A42\u2A43\u2A44\u2A45\u2A46\u2A47\u2A48\u2A49"+
-        "\u2A4A\u2A4B\u2A4C\u2A4D\u2A4E\u2A4F\u2A50\u2A51"+
-        "\u2A52\u2A53\u2A54\u2A55\u2A56\u2A57\u2A58\u2A59"+
-        "\u2A5A\u2A5B\u2A5C\u2A5D\u2A5E\u2A5F\u2A60\u2A61"+
-        "\u2A62\u2A63\u2A64\u2A65\u2A66\u2A67\u2A68\u2A69"+
-        "\u2A6A\u2A6B\u2A6C\u2A6D\u2A6E\u2A6F\u2A70\u2A71"+
-        "\u2A72\u2A73\u2A74\u2A75\u2A76\u2A77\u2A78\u2A79"+
-        "\u2A7A\u2A7B\u2A7C\u2A7D\u2A7E\u2A7F\u2A80\u2A81"+
-        "\u2A82\u2A83\u2A84\u2A85\u2A86\u2A87\u2A88\u2A89"+
-        "\u2A8A\u2A8B\u2A8C\u2A8D\u2A8E\u2A8F\u2A90\u2A91"+
-        "\u2A92\u2A93\u2A94\u2A95\u2A96\u2A97\u2A98\u2A99"+
-        "\u2A9A\u2A9B\u2A9C\u2A9D\u2A9E\u2A9F\u2AA0\u2AA1"+
-        "\u2AA2\u2AA3\u2AA4\u2AA5\u2AA6\u2AA7\u2AA8\u2AA9"+
-        "\u2AAA\u2AAB\u2AAC\u2AAD\u2AAE\u2AAF\u2AB0\u2AB1"+
-        "\u2AB2\u2AB3\u2AB4\u2AB5\u2AB6\u2AB7\u2AB8\u2AB9"+
-        "\u2ABA\u2ABB\u2ABC\u2ABD\u2ABE\u2ABF\u2AC0\u2AC1"+
-        "\u2AC2\u2AC3\u2AC4\u2AC5\u2AC6\u2AC7\u2AC8\u2AC9"+
-        "\u2ACA\u2ACB\u2ACC\u2ACD\u2ACE\u2ACF\u2AD0\u2AD1"+
-        "\u2AD2\u2AD3\u2AD4\u2AD5\u2AD6\u2AD7\u2AD8\u2AD9"+
-        "\u2ADA\u2ADB\u2ADC\u2ADD\u2ADE\u2ADF\u2AE0\u2AE1"+
-        "\u2AE2\u2AE3\u2AE4\u2AE5\u2AE6\u2AE7\u2AE8\u2AE9"+
-        "\u2AEA\u2AEB\u2AEC\u2AED\u2AEE\u2AEF\u2AF0\u2AF1"+
-        "\u2AF2\u2AF3\u2AF4\u2AF5\u2AF6\u2AF7\u2AF8\u2AF9"+
-        "\u2AFA\u2AFB\u2AFC\u2AFD\u2AFE\u2AFF\u2B00\u2B01"+
-        "\u2B02\u2B03\u2B04\u2B05\u2B06\u2B07\u2B08\u2B09"+
-        "\u2B0A\u2B0B\u2B0C\u2B0D\u2B0E\u2B0F\u2B10\u2B11"+
-        "\u2B12\u2B13\u2B14\u2B15\u2B16\u2B17\u2B18\u2B19"+
-        "\u2B1A\u2B1B\u2B1C\u2B1D\u2B1E\u2B1F\u2B20\u2B21"+
-        "\u2B22\u2B23\u2B24\u2B25\u2B26\u2B27\u2B28\u2B29"+
-        "\u2B2A\u2B2B\u2B2C\u2B2D\u2B2E\u2B2F\u2B30\u2B31"+
-        "\u2B32\u2B33\u2B34\u2B35\u2B36\u2B37\u2B38\u2B39"+
-        "\u2B3A\u2B3B\u2B3C\u2B3D\u2B3E\u2B3F\u2B40\u2B41"+
-        "\u2B42\u2B43\u2B44\u2B45\u2B46\u2B47\u2B48\u2B49"+
-        "\u2B4A\u2B4B\u2B4C\u2B4D\u2B4E\u2B4F\u2B50\u2B51"+
-        "\u2B52\u2B53\u2B54\u2B55\u2B56\u2B57\u2B58\u2B59"+
-        "\u2B5A\u2B5B\u2B5C\u2B5D\u2B5E\u2B5F\u2B60\u2B61"+
-        "\u2B62\u2B63\u2B64\u2B65\u2B66\u2B67\u2B68\u2B69"+
-        "\u2B6A\u2B6B\u2B6C\u2B6D\u2B6E\u2B6F\u2B70\u2B71"+
-        "\u2B72\u2B73\u2B74\u2B75\u2B76\u2B77\u2B78\u2B79"+
-        "\u2B7A\u2B7B\u2B7C\u2B7D\u2B7E\u2B7F\u2B80\u2B81"+
-        "\u2B82\u2B83\u2B84\u2B85\u2B86\u2B87\u2B88\u2B89"+
-        "\u2B8A\u2B8B\u2B8C\u2B8D\u2B8E\u2B8F\u2B90\u2B91"+
-        "\u2B92\u2B93\u2B94\u2B95\u2B96\u2B97\u2B98\u2B99"+
-        "\u2B9A\u2B9B\u2B9C\u2B9D\u2B9E\u2B9F\u2BA0\u2BA1"+
-        "\u2BA2\u2BA3\u2BA4\u2BA5\u2BA6\u2BA7\u2BA8\u2BA9"+
-        "\u2BAA\u2BAB\u2BAC\u2BAD\u2BAE\u2BAF\u2BB0\u2BB1"+
-        "\u2BB2\u2BB3\u2BB4\u2BB5\u2BB6\u2BB7\u2BB8\u2BB9"+
-        "\u2BBA\u2BBB\u2BBC\u2BBD\u2BBE\u2BBF\u2BC0\u2BC1"+
-        "\u2BC2\u2BC3\u2BC4\u2BC5\u2BC6\u2BC7\u2BC8\u2BC9"+
-        "\u2BCA\u2BCB\u2BCC\u2BCD\u2BCE\u2BCF\u2BD0\u2BD1"+
-        "\u2BD2\u2BD3\u2BD4\u2BD5\u2BD6\u2BD7\u2BD8\u2BD9"+
-        "\u2BDA\u2BDB\u2BDC\u2BDD\u2BDE\u2BDF\u2BE0\u2BE1"+
-        "\u2BE2\u2BE3\u2BE4\u2BE5\u2BE6\u2BE7\u2BE8\u2BE9"+
-        "\u2BEA\u2BEB\u2BEC\u2BED\u2BEE\u2BEF\u2BF0\u2BF1"+
-        "\u2BF2\u2BF3\u2BF4\u2BF5\u2BF6\u2BF7\u2BF8\u2BF9"+
-        "\u2BFA\u2BFB\u2BFC\u2BFD\u2BFE\u2BFF\u2C00\u2C01"+
-        "\u2C02\u2C03\u2C04\u2C05\u2C06\u2C07\u2C08\u2C09"+
-        "\u2C0A\u2C0B\u2C0C\u2C0D\u2C0E\u2C0F\u2C10\u2C11"+
-        "\u2C12\u2C13\u2C14\u2C15\u2C16\u2C17\u2C18\u2C19"+
-        "\u2C1A\u2C1B\u2C1C\u2C1D\u2C1E\u2C1F\u2C20\u2C21"+
-        "\u2C22\u2C23\u2C24\u2C25\u2C26\u2C27\u2C28\u2C29"+
-        "\u2C2A\u2C2B\u2C2C\u2C2D\u2C2E\u2C2F\u2C30\u2C31"+
-        "\u2C32\u2C33\u2C34\u2C35\u2C36\u2C37\u2C38\u2C39"+
-        "\u2C3A\u2C3B\u2C3C\u2C3D\u2C3E\u2C3F\u2C40\u2C41"+
-        "\u2C42\u2C43\u2C44\u2C45\u2C46\u2C47\u2C48\u2C49"+
-        "\u2C4A\u2C4B\u2C4C\u2C4D\u2C4E\u2C4F\u2C50\u2C51"+
-        "\u2C52\u2C53\u2C54\u2C55\u2C56\u2C57\u2C58\u2C59"+
-        "\u2C5A\u2C5B\u2C5C\u2C5D\u2C5E\u2C5F\u2C60\u2C61"+
-        "\u2C62\u2C63\u2C64\u2C65\u2C66\u2C67\u2C68\u2C69"+
-        "\u2C6A\u2C6B\u2C6C\u2C6D\u2C6E\u2C6F\u2C70\u2C71"+
-        "\u2C72\u2C73\u2C74\u2C75\u2C76\u2C77\u2C78\u2C79"+
-        "\u2C7A\u2C7B\u2C7C\u2C7D\u2C7E\u2C7F\u2C80\u2C81"+
-        "\u2C82\u2C83\u2C84\u2C85\u2C86\u2C87\u2C88\u2C89"+
-        "\u2C8A\u2C8B\u2C8C\u2C8D\u2C8E\u2C8F\u2C90\u2C91"+
-        "\u2C92\u2C93\u2C94\u2C95\u2C96\u2C97\u2C98\u2C99"+
-        "\u2C9A\u2C9B\u2C9C\u2C9D\u2C9E\u2C9F\u2CA0\u2CA1"+
-        "\u2CA2\u2CA3\u2CA4\u2CA5\u2CA6\u2CA7\u2CA8\u2CA9"+
-        "\u2CAA\u2CAB\u2CAC\u2CAD\u2CAE\u2CAF\u2CB0\u2CB1"+
-        "\u2CB2\u2CB3\u2CB4\u2CB5\u2CB6\u2CB7\u2CB8\u2CB9"+
-        "\u2CBA\u2CBB\u2CBC\u2CBD\u2CBE\u2CBF\u2CC0\u2CC1"+
-        "\u2CC2\u2CC3\u2CC4\u2CC5\u2CC6\u2CC7\u2CC8\u2CC9"+
-        "\u2CCA\u2CCB\u2CCC\u2CCD\u2CCE\u2CCF\u2CD0\u2CD1"+
-        "\u2CD2\u2CD3\u2CD4\u2CD5\u2CD6\u2CD7\u2CD8\u2CD9"+
-        "\u2CDA\u2CDB\u2CDC\u2CDD\u2CDE\u2CDF\u2CE0\u2CE1"+
-        "\u2CE2\u2CE3\u2CE4\u2CE5\u2CE6\u2CE7\u2CE8\u2CE9"+
-        "\u2CEA\u2CEB\u2CEC\u2CED\u2CEE\u2CEF\u2CF0\u2CF1"+
-        "\u2CF2\u2CF3\u2CF4\u2CF5\u2CF6\u2CF7\u2CF8\u2CF9"+
-        "\u2CFA\u2CFB\u2CFC\u2CFD\u2CFE\u2CFF\u2D00\u2D01"+
-        "\u2D02\u2D03\u2D04\u2D05\u2D06\u2D07\u2D08\u2D09"+
-        "\u2D0A\u2D0B\u2D0C\u2D0D\u2D0E\u2D0F\u2D10\u2D11"+
-        "\u2D12\u2D13\u2D14\u2D15\u2D16\u2D17\u2D18\u2D19"+
-        "\u2D1A\u2D1B\u2D1C\u2D1D\u2D1E\u2D1F\u2D20\u2D21"+
-        "\u2D22\u2D23\u2D24\u2D25\u2D26\u2D27\u2D28\u2D29"+
-        "\u2D2A\u2D2B\u2D2C\u2D2D\u2D2E\u2D2F\u2D30\u2D31"+
-        "\u2D32\u2D33\u2D34\u2D35\u2D36\u2D37\u2D38\u2D39"+
-        "\u2D3A\u2D3B\u2D3C\u2D3D\u2D3E\u2D3F\u2D40\u2D41"+
-        "\u2D42\u2D43\u2D44\u2D45\u2D46\u2D47\u2D48\u2D49"+
-        "\u2D4A\u2D4B\u2D4C\u2D4D\u2D4E\u2D4F\u2D50\u2D51"+
-        "\u2D52\u2D53\u2D54\u2D55\u2D56\u2D57\u2D58\u2D59"+
-        "\u2D5A\u2D5B\u2D5C\u2D5D\u2D5E\u2D5F\u2D60\u2D61"+
-        "\u2D62\u2D63\u2D64\u2D65\u2D66\u2D67\u2D68\u2D69"+
-        "\u2D6A\u2D6B\u2D6C\u2D6D\u2D6E\u2D6F\u2D70\u2D71"+
-        "\u2D72\u2D73\u2D74\u2D75\u2D76\u2D77\u2D78\u2D79"+
-        "\u2D7A\u2D7B\u2D7C\u2D7D\u2D7E\u2D7F\u2D80\u2D81"+
-        "\u2D82\u2D83\u2D84\u2D85\u2D86\u2D87\u2D88\u2D89"+
-        "\u2D8A\u2D8B\u2D8C\u2D8D\u2D8E\u2D8F\u2D90\u2D91"+
-        "\u2D92\u2D93\u2D94\u2D95\u2D96\u2D97\u2D98\u2D99"+
-        "\u2D9A\u2D9B\u2D9C\u2D9D\u2D9E\u2D9F\u2DA0\u2DA1"+
-        "\u2DA2\u2DA3\u2DA4\u2DA5\u2DA6\u2DA7\u2DA8\u2DA9"+
-        "\u2DAA\u2DAB\u2DAC\u2DAD\u2DAE\u2DAF\u2DB0\u2DB1"+
-        "\u2DB2\u2DB3\u2DB4\u2DB5\u2DB6\u2DB7\u2DB8\u2DB9"+
-        "\u2DBA\u2DBB\u2DBC\u2DBD\u2DBE\u2DBF\u2DC0\u2DC1"+
-        "\u2DC2\u2DC3\u2DC4\u2DC5\u2DC6\u2DC7\u2DC8\u2DC9"+
-        "\u2DCA\u2DCB\u2DCC\u2DCD\u2DCE\u2DCF\u2DD0\u2DD1"+
-        "\u2DD2\u2DD3\u2DD4\u2DD5\u2DD6\u2DD7\u2DD8\u2DD9"+
-        "\u2DDA\u2DDB\u2DDC\u2DDD\u2DDE\u2DDF\u2DE0\u2DE1"+
-        "\u2DE2\u2DE3\u2DE4\u2DE5\u2DE6\u2DE7\u2DE8\u2DE9"+
-        "\u2DEA\u2DEB\u2DEC\u2DED\u2DEE\u2DEF\u2DF0\u2DF1"+
-        "\u2DF2\u2DF3\u2DF4\u2DF5\u2DF6\u2DF7\u2DF8\u2DF9"+
-        "\u2DFA\u2DFB\u2DFC\u2DFD\u2DFE\u2DFF\u2E00\u2E01"+
-        "\u2E02\u2E03\u2E04\u2E05\u2E06\u2E07\u2E08\u2E09"+
-        "\u2E0A\u2E0B\u2E0C\u2E0D\u2E0E\u2E0F\u2E10\u2E11"+
-        "\u2E12\u2E13\u2E14\u2E15\u2E16\u2E17\u2E18\u2E19"+
-        "\u2E1A\u2E1B\u2E1C\u2E1D\u2E1E\u2E1F\u2E20\u2E21"+
-        "\u2E22\u2E23\u2E24\u2E25\u2E26\u2E27\u2E28\u2E29"+
-        "\u2E2A\u2E2B\u2E2C\u2E2D\u2E2E\u2E2F\u2E30\u2E31"+
-        "\u2E32\u2E33\u2E34\u2E35\u2E36\u2E37\u2E38\u2E39"+
-        "\u2E3A\u2E3B\u2E3C\u2E3D\u2E3E\u2E3F\u2E40\u2E41"+
-        "\u2E42\u2E43\u2E44\u2E45\u2E46\u2E47\u2E48\u2E49"+
-        "\u2E4A\u2E4B\u2E4C\u2E4D\u2E4E\u2E4F\u2E50\u2E51"+
-        "\u2E52\u2E53\u2E54\u2E55\u2E56\u2E57\u2E58\u2E59"+
-        "\u2E5A\u2E5B\u2E5C\u2E5D\u2E5E\u2E5F\u2E60\u2E61"+
-        "\u2E62\u2E63\u2E64\u2E65\u2E66\u2E67\u2E68\u2E69"+
-        "\u2E6A\u2E6B\u2E6C\u2E6D\u2E6E\u2E6F\u2E70\u2E71"+
-        "\u2E72\u2E73\u2E74\u2E75\u2E76\u2E77\u2E78\u2E79"+
-        "\u2E7A\u2E7B\u2E7C\u2E7D\u2E7E\u2E7F\u2E80\u2E81"+
-        "\u2E82\u2E83\u2E84\u2E85\u2E86\u2E87\u2E88\u2E89"+
-        "\u2E8A\u2E8B\u2E8C\u2E8D\u2E8E\u2E8F\u2E90\u2E91"+
-        "\u2E92\u2E93\u2E94\u2E95\u2E96\u2E97\u2E98\u2E99"+
-        "\u2E9A\u2E9B\u2E9C\u2E9D\u2E9E\u2E9F\u2EA0\u2EA1"+
-        "\u2EA2\u2EA3\u2EA4\u2EA5\u2EA6\u2EA7\u2EA8\u2EA9"+
-        "\u2EAA\u2EAB\u2EAC\u2EAD\u2EAE\u2EAF\u2EB0\u2EB1"+
-        "\u2EB2\u2EB3\u2EB4\u2EB5\u2EB6\u2EB7\u2EB8\u2EB9"+
-        "\u2EBA\u2EBB\u2EBC\u2EBD\u2EBE\u2EBF\u2EC0\u2EC1"+
-        "\u2EC2\u2EC3\u2EC4\u2EC5\u2EC6\u2EC7\u2EC8\u2EC9"+
-        "\u2ECA\u2ECB\u2ECC\u2ECD\u2ECE\u2ECF\u2ED0\u2ED1"+
-        "\u2ED2\u2ED3\u2ED4\u2ED5\u2ED6\u2ED7\u2ED8\u2ED9"+
-        "\u2EDA\u2EDB\u2EDC\u2EDD\u2EDE\u2EDF\u2EE0\u2EE1";
-
-    private final static String innerEncoderIndex1=
-        "\u2EE2\u2EE3\u2EE4\u2EE5\u2EE6\u2EE7\u2EE8\u2EE9"+
-        "\u2EEA\u2EEB\u2EEC\u2EED\u2EEE\u2EEF\u2EF0\u2EF1"+
-        "\u2EF2\u2EF3\u2EF4\u2EF5\u2EF6\u2EF7\u2EF8\u2EF9"+
-        "\u2EFA\u2EFB\u2EFC\u2EFD\u2EFE\u2EFF\u2F00\u2F01"+
-        "\u2F02\u2F03\u2F04\u2F05\u2F06\u2F07\u2F08\u2F09"+
-        "\u2F0A\u2F0B\u2F0C\u2F0D\u2F0E\u2F0F\u2F10\u2F11"+
-        "\u2F12\u2F13\u2F14\u2F15\u2F16\u2F17\u2F18\u2F19"+
-        "\u2F1A\u2F1B\u2F1C\u2F1D\u2F1E\u2F1F\u2F20\u2F21"+
-        "\u2F22\u2F23\u2F24\u2F25\u2F26\u2F27\u2F28\u2F29"+
-        "\u2F2A\u2F2B\u2F2C\u2F2D\u2F2E\u2F2F\u2F30\u2F31"+
-        "\u2F32\u2F33\u2F34\u2F35\u2F36\u2F37\u2F38\u2F39"+
-        "\u2F3A\u2F3B\u2F3C\u2F3D\u2F3E\u2F3F\u2F40\u2F41"+
-        "\u2F42\u2F43\u2F44\u2F45\u2F46\u2F47\u2F48\u2F49"+
-        "\u2F4A\u2F4B\u2F4C\u2F4D\u2F4E\u2F4F\u2F50\u2F51"+
-        "\u2F52\u2F53\u2F54\u2F55\u2F56\u2F57\u2F58\u2F59"+
-        "\u2F5A\u2F5B\u2F5C\u2F5D\u2F5E\u2F5F\u2F60\u2F61"+
-        "\u2F62\u2F63\u2F64\u2F65\u2F66\u2F67\u2F68\u2F69"+
-        "\u2F6A\u2F6B\u2F6C\u2F6D\u2F6E\u2F6F\u2F70\u2F71"+
-        "\u2F72\u2F73\u2F74\u2F75\u2F76\u2F77\u2F78\u2F79"+
-        "\u2F7A\u2F7B\u2F7C\u2F7D\u2F7E\u2F7F\u2F80\u2F81"+
-        "\u2F82\u2F83\u2F84\u2F85\u2F86\u2F87\u2F88\u2F89"+
-        "\u2F8A\u2F8B\u2F8C\u2F8D\u2F8E\u2F8F\u2F90\u2F91"+
-        "\u2F92\u2F93\u2F94\u2F95\u2F96\u2F97\u2F98\u2F99"+
-        "\u2F9A\u2F9B\u2F9C\u2F9D\u2F9E\u2F9F\u2FA0\u2FA1"+
-        "\u2FA2\u2FA3\u2FA4\u2FA5\u2FA6\u2FA7\u2FA8\u2FA9"+
-        "\u2FAA\u2FAB\u2FAC\u2FAD\u2FAE\u2FAF\u2FB0\u2FB1"+
-        "\u2FB2\u2FB3\u2FB4\u2FB5\u2FB6\u2FB7\u2FB8\u2FB9"+
-        "\u2FBA\u2FBB\u2FBC\u2FBD\u2FBE\u2FBF\u2FC0\u2FC1"+
-        "\u2FC2\u2FC3\u2FC4\u2FC5\u2FC6\u2FC7\u2FC8\u2FC9"+
-        "\u2FCA\u2FCB\u2FCC\u2FCD\u2FCE\u2FCF\u2FD0\u2FD1"+
-        "\u2FD2\u2FD3\u2FD4\u2FD5\u2FD6\u2FD7\u2FD8\u2FD9"+
-        "\u2FDA\u2FDB\u2FDC\u2FDD\u2FDE\u2FDF\u2FE0\u2FE1"+
-        "\u2FE2\u2FE3\u2FE4\u2FE5\u2FE6\u2FE7\u2FE8\u2FE9"+
-        "\u2FEA\u2FEB\u2FEC\u2FED\u2FEE\u2FEF\u2FF0\u2FF1"+
-        "\u2FF2\u2FF3\u2FF4\u2FF5\u2FF6\u2FF7\u2FF8\u2FF9"+
-        "\u2FFA\u2FFB\u2FFC\u2FFD\u2FFE\u2FFF\u3000\u3001"+
-        "\u3002\u3003\u3004\u3005\u3006\u3007\u3008\u3009"+
-        "\u300A\u300B\u300C\u300D\u300E\u300F\u3010\u3011"+
-        "\u3012\u3013\u3014\u3015\u3016\u3017\u3018\u3019"+
-        "\u301A\u301B\u301C\u301D\u301E\u301F\u3020\u3021"+
-        "\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029"+
-        "\u302A\u302B\u302C\u302D\u302E\u302F\u3030\u3031"+
-        "\u3032\u3033\u3034\u3035\u3036\u3037\u3038\u3039"+
-        "\u303A\u303B\u303C\u303D\u303E\u303F\u3040\u3041"+
-        "\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049"+
-        "\u304A\u304B\u304C\u304D\u304E\u304F\u3050\u3051"+
-        "\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059"+
-        "\u305A\u305B\u305C\u305D\u305E\u305F\u3060\u3061"+
-        "\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069"+
-        "\u306A\u306B\u306C\u306D\u306E\u306F\u3070\u3071"+
-        "\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079"+
-        "\u307A\u307B\u307C\u307D\u307E\u307F\u3080\u3081"+
-        "\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089"+
-        "\u308A\u308B\u308C\u308D\u308E\u308F\u3090\u3091"+
-        "\u3092\u3093\u3094\u3095\u3096\u3097\u3098\u3099"+
-        "\u309A\u309B\u309C\u309D\u309E\u309F\u30A0\u30A1"+
-        "\u30A2\u30A3\u30A4\u30A5\u30A6\u30A7\u30A8\u30A9"+
-        "\u30AA\u30AB\u30AC\u30AD\u30AE\u30AF\u30B0\u30B1"+
-        "\u30B2\u30B3\u30B4\u30B5\u30B6\u30B7\u30B8\u30B9"+
-        "\u30BA\u30BB\u30BC\u30BD\u30BE\u30BF\u30C0\u30C1"+
-        "\u30C2\u30C3\u30C4\u30C5\u30C6\u30C7\u30C8\u30C9"+
-        "\u30CA\u30CB\u30CC\u30CD\u30CE\u30CF\u30D0\u30D1"+
-        "\u30D2\u30D3\u30D4\u30D5\u30D6\u30D7\u30D8\u30D9"+
-        "\u30DA\u30DB\u30DC\u30DD\u30DE\u30DF\u30E0\u30E1"+
-        "\u30E2\u30E3\u30E4\u30E5\u30E6\u30E7\u30E8\u30E9"+
-        "\u30EA\u30EB\u30EC\u30ED\u30EE\u30EF\u30F0\u30F1"+
-        "\u30F2\u30F3\u30F4\u30F5\u30F6\u30F7\u30F8\u30F9"+
-        "\u30FA\u30FB\u30FC\u30FD\u30FE\u30FF\u3100\u3101"+
-        "\u3102\u3103\u3104\u3105\u3106\u3107\u3108\u3109"+
-        "\u310A\u310B\u310C\u310D\u310E\u310F\u3110\u3111"+
-        "\u3112\u3113\u3114\u3115\u3116\u3117\u3118\u3119"+
-        "\u311A\u311B\u311C\u311D\u311E\u311F\u3120\u3121"+
-        "\u3122\u3123\u3124\u3125\u3126\u3127\u3128\u3129"+
-        "\u312A\u312B\u312C\u312D\u312E\u312F\u3130\u3131"+
-        "\u3132\u3133\u3134\u3135\u3136\u3137\u3138\u3139"+
-        "\u313A\u313B\u313C\u313D\u313E\u313F\u3140\u3141"+
-        "\u3142\u3143\u3144\u3145\u3146\u3147\u3148\u3149"+
-        "\u314A\u314B\u314C\u314D\u314E\u314F\u3150\u3151"+
-        "\u3152\u3153\u3154\u3155\u3156\u3157\u3158\u3159"+
-        "\u315A\u315B\u315C\u315D\u315E\u315F\u3160\u3161"+
-        "\u3162\u3163\u3164\u3165\u3166\u3167\u3168\u3169"+
-        "\u316A\u316B\u316C\u316D\u316E\u316F\u3170\u3171"+
-        "\u3172\u3173\u3174\u3175\u3176\u3177\u3178\u3179"+
-        "\u317A\u317B\u317C\u317D\u317E\u317F\u3180\u3181"+
-        "\u3182\u3183\u3184\u3185\u3186\u3187\u3188\u3189"+
-        "\u318A\u318B\u318C\u318D\u318E\u318F\u3190\u3191"+
-        "\u3192\u3193\u3194\u3195\u3196\u3197\u3198\u3199"+
-        "\u319A\u319B\u319C\u319D\u319E\u319F\u31A0\u31A1"+
-        "\u31A2\u31A3\u31A4\u31A5\u31A6\u31A7\u31A8\u31A9"+
-        "\u31AA\u31AB\u31AC\u31AD\u31AE\u31AF\u31B0\u31B1"+
-        "\u31B2\u31B3\u31B4\u31B5\u31B6\u31B7\u31B8\u31B9"+
-        "\u31BA\u31BB\u31BC\u31BD\u31BE\u31BF\u31C0\u31C1"+
-        "\u31C2\u31C3\u31C4\u31C5\u31C6\u31C7\u31C8\u31C9"+
-        "\u31CA\u31CB\u31CC\u31CD\u31CE\u31CF\u31D0\u31D1"+
-        "\u31D2\u31D3\u31D4\u31D5\u31D6\u31D7\u31D8\u31D9"+
-        "\u31DA\u31DB\u31DC\u31DD\u31DE\u31DF\u31E0\u31E1"+
-        "\u31E2\u31E3\u31E4\u31E5\u31E6\u31E7\u31E8\u31E9"+
-        "\u31EA\u31EB\u31EC\u31ED\u31EE\u31EF\u31F0\u31F1"+
-        "\u31F2\u31F3\u31F4\u31F5\u31F6\u31F7\u31F8\u31F9"+
-        "\u31FA\u31FB\u31FC\u31FD\u31FE\u31FF\u3200\u3201"+
-        "\u3202\u3203\u3204\u3205\u3206\u3207\u3208\u3209"+
-        "\u320A\u320B\u320C\u320D\u320E\u320F\u3210\u3211"+
-        "\u3212\u3213\u3214\u3215\u3216\u3217\u3218\u3219"+
-        "\u321A\u321B\u321C\u321D\u321E\u321F\u3220\u3221"+
-        "\u3222\u3223\u3224\u3225\u3226\u3227\u3228\u3229"+
-        "\u322A\u322B\u322C\u322D\u322E\u322F\u3230\u3231"+
-        "\u3232\u3233\u3234\u3235\u3236\u3237\u3238\u3239"+
-        "\u323A\u323B\u323C\u323D\u323E\u323F\u3240\u3241"+
-        "\u3242\u3243\u3244\u3245\u3246\u3247\u3248\u3249"+
-        "\u324A\u324B\u324C\u324D\u324E\u324F\u3250\u3251"+
-        "\u3252\u3253\u3254\u3255\u3256\u3257\u3258\u3259"+
-        "\u325A\u325B\u325C\u325D\u325E\u325F\u3260\u3261"+
-        "\u3262\u3263\u3264\u3265\u3266\u3267\u3268\u3269"+
-        "\u326A\u326B\u326C\u326D\u326E\u326F\u3270\u3271"+
-        "\u3272\u3273\u3274\u3275\u3276\u3277\u3278\u3279"+
-        "\u327A\u327B\u327C\u327D\u327E\u327F\u3280\u3281"+
-        "\u3282\u3283\u3284\u3285\u3286\u3287\u3288\u3289"+
-        "\u328A\u328B\u328C\u328D\u328E\u328F\u3290\u3291"+
-        "\u3292\u3293\u3294\u3295\u3296\u3297\u3298\u3299"+
-        "\u329A\u329B\u329C\u329D\u329E\u329F\u32A0\u32A1"+
-        "\u32A2\u32A3\u32A4\u32A5\u32A6\u32A7\u32A8\u32A9"+
-        "\u32AA\u32AB\u32AC\u32AD\u32AE\u32AF\u32B0\u32B1"+
-        "\u32B2\u32B3\u32B4\u32B5\u32B6\u32B7\u32B8\u32B9"+
-        "\u32BA\u32BB\u32BC\u32BD\u32BE\u32BF\u32C0\u32C1"+
-        "\u32C2\u32C3\u32C4\u32C5\u32C6\u32C7\u32C8\u32C9"+
-        "\u32CA\u32CB\u32CC\u32CD\u32CE\u32CF\u32D0\u32D1"+
-        "\u32D2\u32D3\u32D4\u32D5\u32D6\u32D7\u32D8\u32D9"+
-        "\u32DA\u32DB\u32DC\u32DD\u32DE\u32DF\u32E0\u32E1"+
-        "\u32E2\u32E3\u32E4\u32E5\u32E6\u32E7\u32E8\u32E9"+
-        "\u32EA\u32EB\u32EC\u32ED\u32EE\u32EF\u32F0\u32F1"+
-        "\u32F2\u32F3\u32F4\u32F5\u32F6\u32F7\u32F8\u32F9"+
-        "\u32FA\u32FB\u32FC\u32FD\u32FE\u32FF\u3300\u3301"+
-        "\u3302\u3303\u3304\u3305\u3306\u3307\u3308\u3309"+
-        "\u330A\u330B\u330C\u330D\u330E\u330F\u3310\u3311"+
-        "\u3312\u3313\u3314\u3315\u3316\u3317\u3318\u3319"+
-        "\u331A\u331B\u331C\u331D\u331E\u331F\u3320\u3321"+
-        "\u3322\u3323\u3324\u3325\u3326\u3327\u3328\u3329"+
-        "\u332A\u332B\u332C\u332D\u332E\u332F\u3330\u3331"+
-        "\u3332\u3333\u3334\u3335\u3336\u3337\u3338\u3339"+
-        "\u333A\u333B\u333C\u333D\u333E\u333F\u3340\u3341"+
-        "\u3342\u3343\u3344\u3345\u3346\u3347\u3348\u3349"+
-        "\u334A\u334B\u334C\u334D\u334E\u334F\u3350\u3351"+
-        "\u3352\u3353\u3354\u3355\u3356\u3357\u3358\u3359"+
-        "\u335A\u335B\u335C\u335D\u335E\u335F\u3360\u3361"+
-        "\u3362\u3363\u3364\u3365\u3366\u3367\u3368\u3369"+
-        "\u336A\u336B\u336C\u336D\u336E\u336F\u3370\u3371"+
-        "\u3372\u3373\u3374\u3375\u3376\u3377\u3378\u3379"+
-        "\u337A\u337B\u337C\u337D\u337E\u337F\u3380\u3381"+
-        "\u3382\u3383\u3384\u3385\u3386\u3387\u3388\u3389"+
-        "\u338A\u338B\u338C\u338D\u338E\u338F\u3390\u3391"+
-        "\u3392\u3393\u3394\u3395\u3396\u3397\u3398\u3399"+
-        "\u339A\u339B\u339C\u339D\u339E\u339F\u33A0\u33A1"+
-        "\u33A2\u33A3\u33A4\u33A5\u33A6\u33A7\u33A8\u33A9"+
-        "\u33AA\u33AB\u33AC\u33AD\u33AE\u33AF\u33B0\u33B1"+
-        "\u33B2\u33B3\u33B4\u33B5\u33B6\u33B7\u33B8\u33B9"+
-        "\u33BA\u33BB\u33BC\u33BD\u33BE\u33BF\u33C0\u33C1"+
-        "\u33C2\u33C3\u33C4\u33C5\u33C6\u33C7\u33C8\u33C9"+
-        "\u33CA\u33CB\u33CC\u33CD\u33CE\u33CF\u33D0\u33D1"+
-        "\u33D2\u33D3\u33D4\u33D5\u33D6\u33D7\u33D8\u33D9"+
-        "\u33DA\u33DB\u33DC\u33DD\u33DE\u33DF\u33E0\u33E1"+
-        "\u33E2\u33E3\u33E4\u33E5\u33E6\u33E7\u33E8\u33E9"+
-        "\u33EA\u33EB\u33EC\u33ED\u33EE\u33EF\u33F0\u33F1"+
-        "\u33F2\u33F3\u33F4\u33F5\u33F6\u33F7\u33F8\u33F9"+
-        "\u33FA\u33FB\u33FC\u33FD\u33FE\u33FF\u3400\u3401"+
-        "\u3402\u3403\u3404\u3405\u3406\u3407\u3408\u3409"+
-        "\u340A\u340B\u340C\u340D\u340E\u340F\u3410\u3411"+
-        "\u3412\u3413\u3414\u3415\u3416\u3417\u3418\u3419"+
-        "\u341A\u341B\u341C\u341D\u341E\u341F\u3420\u3421"+
-        "\u3422\u3423\u3424\u3425\u3426\u3427\u3428\u3429"+
-        "\u342A\u342B\u342C\u342D\u342E\u342F\u3430\u3431"+
-        "\u3432\u3433\u3434\u3435\u3436\u3437\u3438\u3439"+
-        "\u343A\u343B\u343C\u343D\u343E\u343F\u3440\u3441"+
-        "\u3442\u3443\u3444\u3445\u3446\u3447\u3448\u3449"+
-        "\u344A\u344B\u344C\u344D\u344E\u344F\u3450\u3451"+
-        "\u3452\u3453\u3454\u3455\u3456\u3457\u3458\u3459"+
-        "\u345A\u345B\u345C\u345D\u345E\u345F\u3460\u3461"+
-        "\u3462\u3463\u3464\u3465\u3466\u3467\u3468\u3469"+
-        "\u346A\u346B\u346C\u346D\u346E\u346F\u3470\u3471"+
-        "\u3472\u3473\u3474\u3475\u3476\u3477\u3478\u3479"+
-        "\u347A\u347B\u347C\u347D\u347E\u347F\u3480\u3481"+
-        "\u3482\u3483\u3484\u3485\u3486\u3487\u3488\u3489"+
-        "\u348A\u348B\u348C\u348D\u348E\u348F\u3490\u3491"+
-        "\u3492\u3493\u3494\u3495\u3496\u3497\u3498\u3499"+
-        "\u349A\u349B\u349C\u349D\u349E\u349F\u34A0\u34A1"+
-        "\u34A2\u34A3\u34A4\u34A5\u34A6\u34A7\u34A8\u34A9"+
-        "\u34AA\u34AB\u34AC\u34AD\u34AE\u34AF\u34B0\u34B1"+
-        "\u34B2\u34B3\u34B4\u34B5\u34B6\u34B7\u34B8\u34B9"+
-        "\u34BA\u34BB\u34BC\u34BD\u34BE\u34BF\u34C0\u34C1"+
-        "\u34C2\u34C3\u34C4\u34C5\u34C6\u34C7\u34C8\u34C9"+
-        "\u34CA\u34CB\u34CC\u34CD\u34CE\u34CF\u34D0\u34D1"+
-        "\u34D2\u34D3\u34D4\u34D5\u34D6\u34D7\u34D8\u34D9"+
-        "\u34DA\u34DB\u34DC\u34DD\u34DE\u34DF\u34E0\u34E1"+
-        "\u34E2\u34E3\u34E4\u34E5\u34E6\u34E7\u34E8\u34E9"+
-        "\u34EA\u34EB\u34EC\u34ED\u34EE\u34EF\u34F0\u34F1"+
-        "\u34F2\u34F3\u34F4\u34F5\u34F6\u34F7\u34F8\u34F9"+
-        "\u34FA\u34FB\u34FC\u34FD\u34FE\u34FF\u3500\u3501"+
-        "\u3502\u3503\u3504\u3505\u3506\u3507\u3508\u3509"+
-        "\u350A\u350B\u350C\u350D\u350E\u350F\u3510\u3511"+
-        "\u3512\u3513\u3514\u3515\u3516\u3517\u3518\u3519"+
-        "\u351A\u351B\u351C\u351D\u351E\u351F\u3520\u3521"+
-        "\u3522\u3523\u3524\u3525\u3526\u3527\u3528\u3529"+
-        "\u352A\u352B\u352C\u352D\u352E\u352F\u3530\u3531"+
-        "\u3532\u3533\u3534\u3535\u3536\u3537\u3538\u3539"+
-        "\u353A\u353B\u353C\u353D\u353E\u353F\u3540\u3541"+
-        "\u3542\u3543\u3544\u3545\u3546\u3547\u3548\u3549"+
-        "\u354A\u354B\u354C\u354D\u354E\u354F\u3550\u3551"+
-        "\u3552\u3553\u3554\u3555\u3556\u3557\u3558\u3559"+
-        "\u355A\u355B\u355C\u355D\u355E\u355F\u3560\u3561"+
-        "\u3562\u3563\u3564\u3565\u3566\u3567\u3568\u3569"+
-        "\u356A\u356B\u356C\u356D\u356E\u356F\u3570\u3571"+
-        "\u3572\u3573\u3574\u3575\u3576\u3577\u3578\u3579"+
-        "\u357A\u357B\u357C\u357D\u357E\u357F\u3580\u3581"+
-        "\u3582\u3583\u3584\u3585\u3586\u3587\u3588\u3589"+
-        "\u358A\u358B\u358C\u358D\u358E\u358F\u3590\u3591"+
-        "\u3592\u3593\u3594\u3595\u3596\u3597\u3598\u3599"+
-        "\u359A\u359B\u359C\u359D\u359E\u359F\u35A0\u35A1"+
-        "\u35A2\u35A3\u35A4\u35A5\u35A6\u35A7\u35A8\u35A9"+
-        "\u35AA\u35AB\u35AC\u35AD\u35AE\u35AF\u35B0\u35B1"+
-        "\u35B2\u35B3\u35B4\u35B5\u35B6\u35B7\u35B8\u35B9"+
-        "\u35BA\u35BB\u35BC\u35BD\u35BE\u35BF\u35C0\u35C1"+
-        "\u35C2\u35C3\u35C4\u35C5\u35C6\u35C7\u35C8\u35C9"+
-        "\u35CA\u35CB\u35CC\u35CD\u35CE\u35CF\u35D0\u35D1"+
-        "\u35D2\u35D3\u35D4\u35D5\u35D6\u35D7\u35D8\u35D9"+
-        "\u35DA\u35DB\u35DC\u35DD\u35DE\u35DF\u35E0\u35E1"+
-        "\u35E2\u35E3\u35E4\u35E5\u35E6\u35E7\u35E8\u35E9"+
-        "\u35EA\u35EB\u35EC\u35ED\u35EE\u35EF\u35F0\u35F1"+
-        "\u35F2\u35F3\u35F4\u35F5\u35F6\u35F7\u35F8\u35F9"+
-        "\u35FA\u35FB\u35FC\u35FD\u35FE\u35FF\u3600\u3601"+
-        "\u3602\u3603\u3604\u3605\u3606\u3607\u3608\u3609"+
-        "\u360A\u360B\u360C\u360D\u360E\u360F\u3610\u3611"+
-        "\u3612\u3613\u3614\u3615\u3616\u3617\u3618\u3619"+
-        "\u361A\u361B\u361C\u361D\u361E\u361F\u3620\u3621"+
-        "\u3622\u3623\u3624\u3625\u3626\u3627\u3628\u3629"+
-        "\u362A\u362B\u362C\u362D\u362E\u362F\u3630\u3631"+
-        "\u3632\u3633\u3634\u3635\u3636\u3637\u3638\u3639"+
-        "\u363A\u363B\u363C\u363D\u363E\u363F\u3640\u3641"+
-        "\u3642\u3643\u3644\u3645\u3646\u3647\u3648\u3649"+
-        "\u364A\u364B\u364C\u364D\u364E\u364F\u3650\u3651"+
-        "\u3652\u3653\u3654\u3655\u3656\u3657\u3658\u3659"+
-        "\u365A\u365B\u365C\u365D\u365E\u365F\u3660\u3661"+
-        "\u3662\u3663\u3664\u3665\u3666\u3667\u3668\u3669"+
-        "\u366A\u366B\u366C\u366D\u366E\u366F\u3670\u3671"+
-        "\u3672\u3673\u3674\u3675\u3676\u3677\u3678\u3679"+
-        "\u367A\u367B\u367C\u367D\u367E\u367F\u3680\u3681"+
-        "\u3682\u3683\u3684\u3685\u3686\u3687\u3688\u3689"+
-        "\u368A\u368B\u368C\u368D\u368E\u368F\u3690\u3691"+
-        "\u3692\u3693\u3694\u3695\u3696\u3697\u3698\u3699"+
-        "\u369A\u369B\u369C\u369D\u369E\u369F\u36A0\u36A1"+
-        "\u36A2\u36A3\u36A4\u36A5\u36A6\u36A7\u36A8\u36A9"+
-        "\u36AA\u36AB\u36AC\u36AD\u36AE\u36AF\u36B0\u36B1"+
-        "\u36B2\u36B3\u36B4\u36B5\u36B6\u36B7\u36B8\u36B9"+
-        "\u36BA\u36BB\u36BC\u36BD\u36BE\u36BF\u36C0\u36C1"+
-        "\u36C2\u36C3\u36C4\u36C5\u36C6\u36C7\u36C8\u36C9"+
-        "\u36CA\u36CB\u36CC\u36CD\u36CE\u36CF\u36D0\u36D1"+
-        "\u36D2\u36D3\u36D4\u36D5\u36D6\u36D7\u36D8\u36D9"+
-        "\u36DA\u36DB\u36DC\u36DD\u36DE\u36DF\u36E0\u36E1"+
-        "\u36E2\u36E3\u36E4\u36E5\u36E6\u36E7\u36E8\u36E9"+
-        "\u36EA\u36EB\u36EC\u36ED\u36EE\u36EF\u36F0\u36F1"+
-        "\u36F2\u36F3\u36F4\u36F5\u36F6\u36F7\u36F8\u36F9"+
-        "\u36FA\u36FB\u36FC\u36FD\u36FE\u36FF\u3700\u3701"+
-        "\u3702\u3703\u3704\u3705\u3706\u3707\u3708\u3709"+
-        "\u370A\u370B\u370C\u370D\u370E\u370F\u3710\u3711"+
-        "\u3712\u3713\u3714\u3715\u3716\u3717\u3718\u3719"+
-        "\u371A\u371B\u371C\u371D\u371E\u371F\u3720\u3721"+
-        "\u3722\u3723\u3724\u3725\u3726\u3727\u3728\u3729"+
-        "\u372A\u372B\u372C\u372D\u372E\u372F\u3730\u3731"+
-        "\u3732\u3733\u3734\u3735\u3736\u3737\u3738\u3739"+
-        "\u373A\u373B\u373C\u373D\u373E\u373F\u3740\u3741"+
-        "\u3742\u3743\u3744\u3745\u3746\u3747\u3748\u3749"+
-        "\u374A\u374B\u374C\u374D\u374E\u374F\u3750\u3751"+
-        "\u3752\u3753\u3754\u3755\u3756\u3757\u3758\u3759"+
-        "\u375A\u375B\u375C\u375D\u375E\u375F\u3760\u3761"+
-        "\u3762\u3763\u3764\u3765\u3766\u3767\u3768\u3769"+
-        "\u376A\u376B\u376C\u376D\u376E\u376F\u3770\u3771"+
-        "\u3772\u3773\u3774\u3775\u3776\u3777\u3778\u3779"+
-        "\u377A\u377B\u377C\u377D\u377E\u377F\u3780\u3781"+
-        "\u3782\u3783\u3784\u3785\u3786\u3787\u3788\u3789"+
-        "\u378A\u378B\u378C\u378D\u378E\u378F\u3790\u3791"+
-        "\u3792\u3793\u3794\u3795\u3796\u3797\u3798\u3799"+
-        "\u379A\u379B\u379C\u379D\u379E\u379F\u37A0\u37A1"+
-        "\u37A2\u37A3\u37A4\u37A5\u37A6\u37A7\u37A8\u37A9"+
-        "\u37AA\u37AB\u37AC\u37AD\u37AE\u37AF\u37B0\u37B1"+
-        "\u37B2\u37B3\u37B4\u37B5\u37B6\u37B7\u37B8\u37B9"+
-        "\u37BA\u37BB\u37BC\u37BD\u37BE\u37BF\u37C0\u37C1"+
-        "\u37C2\u37C3\u37C4\u37C5\u37C6\u37C7\u37C8\u37C9"+
-        "\u37CA\u37CB\u37CC\u37CD\u37CE\u37CF\u37D0\u37D1"+
-        "\u37D2\u37D3\u37D4\u37D5\u37D6\u37D7\u37D8\u37D9"+
-        "\u37DA\u37DB\u37DC\u37DD\u37DE\u37DF\u37E0\u37E1"+
-        "\u37E2\u37E3\u37E4\u37E5\u37E6\u37E7\u37E8\u37E9"+
-        "\u37EA\u37EB\u37EC\u37ED\u37EE\u37EF\u37F0\u37F1"+
-        "\u37F2\u37F3\u37F4\u37F5\u37F6\u37F7\u37F8\u37F9"+
-        "\u37FA\u37FB\u37FC\u37FD\u37FE\u37FF\u3800\u3801"+
-        "\u3802\u3803\u3804\u3805\u3806\u3807\u3808\u3809"+
-        "\u380A\u380B\u380C\u380D\u380E\u380F\u3810\u3811"+
-        "\u3812\u3813\u3814\u3815\u3816\u3817\u3818\u3819"+
-        "\u381A\u381B\u381C\u381D\u381E\u381F\u3820\u3821"+
-        "\u3822\u3823\u3824\u3825\u3826\u3827\u3828\u3829"+
-        "\u382A\u382B\u382C\u382D\u382E\u382F\u3830\u3831"+
-        "\u3832\u3833\u3834\u3835\u3836\u3837\u3838\u3839"+
-        "\u383A\u383B\u383C\u383D\u383E\u383F\u3840\u3841"+
-        "\u3842\u3843\u3844\u3845\u3846\u3847\u3848\u3849"+
-        "\u384A\u384B\u384C\u384D\u384E\u384F\u3850\u3851"+
-        "\u3852\u3853\u3854\u3855\u3856\u3857\u3858\u3859"+
-        "\u385A\u385B\u385C\u385D\u385E\u385F\u3860\u3861"+
-        "\u3862\u3863\u3864\u3865\u3866\u3867\u3868\u3869"+
-        "\u386A\u386B\u386C\u386D\u386E\u386F\u3870\u3871"+
-        "\u3872\u3873\u3874\u3875\u3876\u3877\u3878\u3879"+
-        "\u387A\u387B\u387C\u387D\u387E\u387F\u3880\u3881"+
-        "\u3882\u3883\u3884\u3885\u3886\u3887\u3888\u3889"+
-        "\u388A\u388B\u388C\u388D\u388E\u388F\u3890\u3891"+
-        "\u3892\u3893\u3894\u3895\u3896\u3897\u3898\u3899"+
-        "\u389A\u389B\u389C\u389D\u389E\u389F\u38A0\u38A1"+
-        "\u38A2\u38A3\u38A4\u38A5\u38A6\u38A7\u38A8\u38A9"+
-        "\u38AA\u38AB\u38AC\u38AD\u38AE\u38AF\u38B0\u38B1"+
-        "\u38B2\u38B3\u38B4\u38B5\u38B6\u38B7\u38B8\u38B9"+
-        "\u38BA\u38BB\u38BC\u38BD\u38BE\u38BF\u38C0\u38C1"+
-        "\u38C2\u38C3\u38C4\u38C5\u38C6\u38C7\u38C8\u38C9"+
-        "\u38CA\u38CB\u38CC\u38CD\u38CE\u38CF\u38D0\u38D1"+
-        "\u38D2\u38D3\u38D4\u38D5\u38D6\u38D7\u38D8\u38D9"+
-        "\u38DA\u38DB\u38DC\u38DD\u38DE\u38DF\u38E0\u38E1"+
-        "\u38E2\u38E3\u38E4\u38E5\u38E6\u38E7\u38E8\u38E9"+
-        "\u38EA\u38EB\u38EC\u38ED\u38EE\u38EF\u38F0\u38F1"+
-        "\u38F2\u38F3\u38F4\u38F5\u38F6\u38F7\u38F8\u38F9"+
-        "\u38FA\u38FB\u38FC\u38FD\u38FE\u38FF\u3900\u3901"+
-        "\u3902\u3903\u3904\u3905\u3906\u3907\u3908\u3909"+
-        "\u390A\u390B\u390C\u390D\u390E\u390F\u3910\u3911"+
-        "\u3912\u3913\u3914\u3915\u3916\u3917\u3918\u3919"+
-        "\u391A\u391B\u391C\u391D\u391E\u391F\u3920\u3921"+
-        "\u3922\u3923\u3924\u3925\u3926\u3927\u3928\u3929"+
-        "\u392A\u392B\u392C\u392D\u392E\u392F\u3930\u3931"+
-        "\u3932\u3933\u3934\u3935\u3936\u3937\u3938\u3939"+
-        "\u393A\u393B\u393C\u393D\u393E\u393F\u3940\u3941"+
-        "\u3942\u3943\u3944\u3945\u3946\u3947\u3948\u3949"+
-        "\u394A\u394B\u394C\u394D\u394E\u394F\u3950\u3951"+
-        "\u3952\u3953\u3954\u3955\u3956\u3957\u3958\u3959"+
-        "\u395A\u395B\u395C\u395D\u395E\u395F\u3960\u3961"+
-        "\u3962\u3963\u3964\u3965\u3966\u3967\u3968\u3969"+
-        "\u396A\u396B\u396C\u396D\u396E\u396F\u3970\u3971"+
-        "\u3972\u3973\u3974\u3975\u3976\u3977\u3978\u3979"+
-        "\u397A\u397B\u397C\u397D\u397E\u397F\u3980\u3981"+
-        "\u3982\u3983\u3984\u3985\u3986\u3987\u3988\u3989"+
-        "\u398A\u398B\u398C\u398D\u398E\u398F\u3990\u3991"+
-        "\u3992\u3993\u3994\u3995\u3996\u3997\u3998\u3999"+
-        "\u399A\u399B\u399C\u399D\u399E\u399F\u39A0\u39A1"+
-        "\u39A2\u39A3\u39A4\u39A5\u39A6\u39A7\u39A8\u39A9"+
-        "\u39AA\u39AB\u39AC\u39AD\u39AE\u39AF\u39B0\u39B1"+
-        "\u39B2\u39B3\u39B4\u39B5\u39B6\u39B7\u39B8\u39B9"+
-        "\u39BA\u39BB\u39BC\u39BD\u39BE\u39BF\u39C0\u39C1"+
-        "\u39C2\u39C3\u39C4\u39C5\u39C6\u39C7\u39C8\u39C9"+
-        "\u39CA\u39CB\u39CC\u39CD\u39CE\u39CF\u39D0\u39D1"+
-        "\u39D2\u39D3\u39D4\u39D5\u39D6\u39D7\u39D8\u39D9"+
-        "\u39DA\u39DB\u39DC\u39DD\u39DE\u39DF\u39E0\u39E1"+
-        "\u39E2\u39E3\u39E4\u39E5\u39E6\u39E7\u39E8\u39E9"+
-        "\u39EA\u39EB\u39EC\u39ED\u39EE\u39EF\u39F0\u39F1"+
-        "\u39F2\u39F3\u39F4\u39F5\u39F6\u39F7\u39F8\u39F9"+
-        "\u39FA\u39FB\u39FC\u39FD\u39FE\u39FF\u3A00\u3A01"+
-        "\u3A02\u3A03\u3A04\u3A05\u3A06\u3A07\u3A08\u3A09"+
-        "\u3A0A\u3A0B\u3A0C\u3A0D\u3A0E\u3A0F\u3A10\u3A11"+
-        "\u3A12\u3A13\u3A14\u3A15\u3A16\u3A17\u3A18\u3A19"+
-        "\u3A1A\u3A1B\u3A1C\u3A1D\u3A1E\u3A1F\u3A20\u3A21"+
-        "\u3A22\u3A23\u3A24\u3A25\u3A26\u3A27\u3A28\u3A29"+
-        "\u3A2A\u3A2B\u3A2C\u3A2D\u3A2E\u3A2F\u3A30\u3A31"+
-        "\u3A32\u3A33\u3A34\u3A35\u3A36\u3A37\u3A38\u3A39"+
-        "\u3A3A\u3A3B\u3A3C\u3A3D\u3A3E\u3A3F\u3A40\u3A41"+
-        "\u3A42\u3A43\u3A44\u3A45\u3A46\u3A47\u3A48\u3A49"+
-        "\u3A4A\u3A4B\u3A4C\u3A4D\u3A4E\u3A4F\u3A50\u3A51"+
-        "\u3A52\u3A53\u3A54\u3A55\u3A56\u3A57\u3A58\u3A59"+
-        "\u3A5A\u3A5B\u3A5C\u3A5D\u3A5E\u3A5F\u3A60\u3A61"+
-        "\u3A62\u3A63\u3A64\u3A65\u3A66\u3A67\u3A68\u3A69"+
-        "\u3A6A\u3A6B\u3A6C\u3A6D\u3A6E\u3A6F\u3A70\u3A71"+
-        "\u3A72\u3A73\u3A74\u3A75\u3A76\u3A77\u3A78\u3A79"+
-        "\u3A7A\u3A7B\u3A7C\u3A7D\u3A7E\u3A7F\u3A80\u3A81"+
-        "\u3A82\u3A83\u3A84\u3A85\u3A86\u3A87\u3A88\u3A89"+
-        "\u3A8A\u3A8B\u3A8C\u3A8D\u3A8E\u3A8F\u3A90\u3A91"+
-        "\u3A92\u3A93\u3A94\u3A95\u3A96\u3A97\u3A98\u3A99"+
-        "\u3A9A\u3A9B\u3A9C\u3A9D\u3A9E\u3A9F\u3AA0\u3AA1"+
-        "\u3AA2\u3AA3\u3AA4\u3AA5\u3AA6\u3AA7\u3AA8\u3AA9"+
-        "\u3AAA\u3AAB\u3AAC\u3AAD\u3AAE\u3AAF\u3AB0\u3AB1"+
-        "\u3AB2\u3AB3\u3AB4\u3AB5\u3AB6\u3AB7\u3AB8\u3AB9"+
-        "\u3ABA\u3ABB\u3ABC\u3ABD\u3ABE\u3ABF\u3AC0\u3AC1"+
-        "\u3AC2\u3AC3\u3AC4\u3AC5\u3AC6\u3AC7\u3AC8\u3AC9"+
-        "\u3ACA\u3ACB\u3ACC\u3ACD\u3ACE\u3ACF\u3AD0\u3AD1"+
-        "\u3AD2\u3AD3\u3AD4\u3AD5\u3AD6\u3AD7\u3AD8\u3AD9"+
-        "\u3ADA\u3ADB\u3ADC\u3ADD\u3ADE\u3ADF\u3AE0\u3AE1"+
-        "\u3AE2\u3AE3\u3AE4\u3AE5\u3AE6\u3AE7\u3AE8\u3AE9"+
-        "\u3AEA\u3AEB\u3AEC\u3AED\u3AEE\u3AEF\u3AF0\u3AF1"+
-        "\u3AF2\u3AF3\u3AF4\u3AF5\u3AF6\u3AF7\u3AF8\u3AF9"+
-        "\u3AFA\u3AFB\u3AFC\u3AFD\u3AFE\u3AFF\u3B00\u3B01"+
-        "\u3B02\u3B03\u3B04\u3B05\u3B06\u3B07\u3B08\u3B09"+
-        "\u3B0A\u3B0B\u3B0C\u3B0D\u3B0E\u3B0F\u3B10\u3B11"+
-        "\u3B12\u3B13\u3B14\u3B15\u3B16\u3B17\u3B18\u3B19"+
-        "\u3B1A\u3B1B\u3B1C\u3B1D\u3B1E\u3B1F\u3B20\u3B21"+
-        "\u3B22\u3B23\u3B24\u3B25\u3B26\u3B27\u3B28\u3B29"+
-        "\u3B2A\u3B2B\u3B2C\u3B2D\u3B2E\u3B2F\u3B30\u3B31"+
-        "\u3B32\u3B33\u3B34\u3B35\u3B36\u3B37\u3B38\u3B39"+
-        "\u3B3A\u3B3B\u3B3C\u3B3D\u3B3E\u3B3F\u3B40\u3B41"+
-        "\u3B42\u3B43\u3B44\u3B45\u3B46\u3B47\u3B48\u3B49"+
-        "\u3B4A\u3B4B\u3B4C\u3B4D\u3B4E\u3B4F\u3B50\u3B51"+
-        "\u3B52\u3B53\u3B54\u3B55\u3B56\u3B57\u3B58\u3B59"+
-        "\u3B5A\u3B5B\u3B5C\u3B5D\u3B5E\u3B5F\u3B60\u3B61"+
-        "\u3B62\u3B63\u3B64\u3B65\u3B66\u3B67\u3B68\u3B69"+
-        "\u3B6A\u3B6B\u3B6C\u3B6D\u3B6E\u3B6F\u3B70\u3B71"+
-        "\u3B72\u3B73\u3B74\u3B75\u3B76\u3B77\u3B78\u3B79"+
-        "\u3B7A\u3B7B\u3B7C\u3B7D\u3B7E\u3B7F\u3B80\u3B81"+
-        "\u3B82\u3B83\u3B84\u3B85\u3B86\u3B87\u3B88\u3B89"+
-        "\u3B8A\u3B8B\u3B8C\u3B8D\u3B8E\u3B8F\u3B90\u3B91"+
-        "\u3B92\u3B93\u3B94\u3B95\u3B96\u3B97\u3B98\u3B99"+
-        "\u3B9A\u3B9B\u3B9C\u3B9D\u3B9E\u3B9F\u3BA0\u3BA1"+
-        "\u3BA2\u3BA3\u3BA4\u3BA5\u3BA6\u3BA7\u3BA8\u3BA9"+
-        "\u3BAA\u3BAB\u3BAC\u3BAD\u3BAE\u3BAF\u3BB0\u3BB1"+
-        "\u3BB2\u3BB3\u3BB4\u3BB5\u3BB6\u3BB7\u3BB8\u3BB9"+
-        "\u3BBA\u3BBB\u3BBC\u3BBD\u3BBE\u3BBF\u3BC0\u3BC1"+
-        "\u3BC2\u3BC3\u3BC4\u3BC5\u3BC6\u3BC7\u3BC8\u3BC9"+
-        "\u3BCA\u3BCB\u3BCC\u3BCD\u3BCE\u3BCF\u3BD0\u3BD1"+
-        "\u3BD2\u3BD3\u3BD4\u3BD5\u3BD6\u3BD7\u3BD8\u3BD9"+
-        "\u3BDA\u3BDB\u3BDC\u3BDD\u3BDE\u3BDF\u3BE0\u3BE1"+
-        "\u3BE2\u3BE3\u3BE4\u3BE5\u3BE6\u3BE7\u3BE8\u3BE9"+
-        "\u3BEA\u3BEB\u3BEC\u3BED\u3BEE\u3BEF\u3BF0\u3BF1"+
-        "\u3BF2\u3BF3\u3BF4\u3BF5\u3BF6\u3BF7\u3BF8\u3BF9"+
-        "\u3BFA\u3BFB\u3BFC\u3BFD\u3BFE\u3BFF\u3C00\u3C01"+
-        "\u3C02\u3C03\u3C04\u3C05\u3C06\u3C07\u3C08\u3C09"+
-        "\u3C0A\u3C0B\u3C0C\u3C0D\u3C0E\u3C0F\u3C10\u3C11"+
-        "\u3C12\u3C13\u3C14\u3C15\u3C16\u3C17\u3C18\u3C19"+
-        "\u3C1A\u3C1B\u3C1C\u3C1D\u3C1E\u3C1F\u3C20\u3C21"+
-        "\u3C22\u3C23\u3C24\u3C25\u3C26\u3C27\u3C28\u3C29"+
-        "\u3C2A\u3C2B\u3C2C\u3C2D\u3C2E\u3C2F\u3C30\u3C31"+
-        "\u3C32\u3C33\u3C34\u3C35\u3C36\u3C37\u3C38\u3C39"+
-        "\u3C3A\u3C3B\u3C3C\u3C3D\u3C3E\u3C3F\u3C40\u3C41"+
-        "\u3C42\u3C43\u3C44\u3C45\u3C46\u3C47\u3C48\u3C49"+
-        "\u3C4A\u3C4B\u3C4C\u3C4D\u3C4E\u3C4F\u3C50\u3C51"+
-        "\u3C52\u3C53\u3C54\u3C55\u3C56\u3C57\u3C58\u3C59"+
-        "\u3C5A\u3C5B\u3C5C\u3C5D\u3C5E\u3C5F\u3C60\u3C61"+
-        "\u3C62\u3C63\u3C64\u3C65\u3C66\u3C67\u3C68\u3C69"+
-        "\u3C6A\u3C6B\u3C6C\u3C6D\u3C6E\u3C6F\u3C70\u3C71"+
-        "\u3C72\u3C73\u3C74\u3C75\u3C76\u3C77\u3C78\u3C79"+
-        "\u3C7A\u3C7B\u3C7C\u3C7D\u3C7E\u3C7F\u3C80\u3C81"+
-        "\u3C82\u3C83\u3C84\u3C85\u3C86\u3C87\u3C88\u3C89"+
-        "\u3C8A\u3C8B\u3C8C\u3C8D\u3C8E\u3C8F\u3C90\u3C91"+
-        "\u3C92\u3C93\u3C94\u3C95\u3C96\u3C97\u3C98\u3C99"+
-        "\u3C9A\u3C9B\u3C9C\u3C9D\u3C9E\u3C9F\u3CA0\u3CA1"+
-        "\u3CA2\u3CA3\u3CA4\u3CA5\u3CA6\u3CA7\u3CA8\u3CA9"+
-        "\u3CAA\u3CAB\u3CAC\u3CAD\u3CAE\u3CAF\u3CB0\u3CB1"+
-        "\u3CB2\u3CB3\u3CB4\u3CB5\u3CB6\u3CB7\u3CB8\u3CB9"+
-        "\u3CBA\u3CBB\u3CBC\u3CBD\u3CBE\u3CBF\u3CC0\u3CC1"+
-        "\u3CC2\u3CC3\u3CC4\u3CC5\u3CC6\u3CC7\u3CC8\u3CC9"+
-        "\u3CCA\u3CCB\u3CCC\u3CCD\u3CCE\u3CCF\u3CD0\u3CD1"+
-        "\u3CD2\u3CD3\u3CD4\u3CD5\u3CD6\u3CD7\u3CD8\u3CD9"+
-        "\u3CDA\u3CDB\u3CDC\u3CDD\u3CDE\u3CDF\u3CE0\u3CE1"+
-        "\u3CE2\u3CE3\u3CE4\u3CE5\u3CE6\u3CE7\u3CE8\u3CE9"+
-        "\u3CEA\u3CEB\u3CEC\u3CED\u3CEE\u3CEF\u3CF0\u3CF1"+
-        "\u3CF2\u3CF3\u3CF4\u3CF5\u3CF6\u3CF7\u3CF8\u3CF9"+
-        "\u3CFA\u3CFB\u3CFC\u3CFD\u3CFE\u3CFF\u3D00\u3D01"+
-        "\u3D02\u3D03\u3D04\u3D05\u3D06\u3D07\u3D08\u3D09"+
-        "\u3D0A\u3D0B\u3D0C\u3D0D\u3D0E\u3D0F\u3D10\u3D11"+
-        "\u3D12\u3D13\u3D14\u3D15\u3D16\u3D17\u3D18\u3D19"+
-        "\u3D1A\u3D1B\u3D1C\u3D1D\u3D1E\u3D1F\u3D20\u3D21"+
-        "\u3D22\u3D23\u3D24\u3D25\u3D26\u3D27\u3D28\u3D29"+
-        "\u3D2A\u3D2B\u3D2C\u3D2D\u3D2E\u3D2F\u3D30\u3D31"+
-        "\u3D32\u3D33\u3D34\u3D35\u3D36\u3D37\u3D38\u3D39"+
-        "\u3D3A\u3D3B\u3D3C\u3D3D\u3D3E\u3D3F\u3D40\u3D41"+
-        "\u3D42\u3D43\u3D44\u3D45\u3D46\u3D47\u3D48\u3D49"+
-        "\u3D4A\u3D4B\u3D4C\u3D4D\u3D4E\u3D4F\u3D50\u3D51"+
-        "\u3D52\u3D53\u3D54\u3D55\u3D56\u3D57\u3D58\u3D59"+
-        "\u3D5A\u3D5B\u3D5C\u3D5D\u3D5E\u3D5F\u3D60\u3D61"+
-        "\u3D62\u3D63\u3D64\u3D65\u3D66\u3D67\u3D68\u3D69"+
-        "\u3D6A\u3D6B\u3D6C\u3D6D\u3D6E\u3D6F\u3D70\u3D71"+
-        "\u3D72\u3D73\u3D74\u3D75\u3D76\u3D77\u3D78\u3D79"+
-        "\u3D7A\u3D7B\u3D7C\u3D7D\u3D7E\u3D7F\u3D80\u3D81"+
-        "\u3D82\u3D83\u3D84\u3D85\u3D86\u3D87\u3D88\u3D89"+
-        "\u3D8A\u3D8B\u3D8C\u3D8D\u3D8E\u3D8F\u3D90\u3D91"+
-        "\u3D92\u3D93\u3D94\u3D95\u3D96\u3D97\u3D98\u3D99"+
-        "\u3D9A\u3D9B\u3D9C\u3D9D\u3D9E\u3D9F\u3DA0\u3DA1"+
-        "\u3DA2\u3DA3\u3DA4\u3DA5\u3DA6\u3DA7\u3DA8\u3DA9"+
-        "\u3DAA\u3DAB\u3DAC\u3DAD\u3DAE\u3DAF\u3DB0\u3DB1"+
-        "\u3DB2\u3DB3\u3DB4\u3DB5\u3DB6\u3DB7\u3DB8\u3DB9"+
-        "\u3DBA\u3DBB\u3DBC\u3DBD\u3DBE\u3DBF\u3DC0\u3DC1"+
-        "\u3DC2\u3DC3\u3DC4\u3DC5\u3DC6\u3DC7\u3DC8\u3DC9"+
-        "\u3DCA\u3DCB\u3DCC\u3DCD\u3DCE\u3DCF\u3DD0\u3DD1"+
-        "\u3DD2\u3DD3\u3DD4\u3DD5\u3DD6\u3DD7\u3DD8\u3DD9"+
-        "\u3DDA\u3DDB\u3DDC\u3DDD\u3DDE\u3DDF\u3DE0\u3DE1"+
-        "\u3DE2\u3DE3\u3DE4\u3DE5\u3DE6\u3DE7\u3DE8\u3DE9"+
-        "\u3DEA\u3DEB\u3DEC\u3DED\u3DEE\u3DEF\u3DF0\u3DF1"+
-        "\u3DF2\u3DF3\u3DF4\u3DF5\u3DF6\u3DF7\u3DF8\u3DF9"+
-        "\u3DFA\u3DFB\u3DFC\u3DFD\u3DFE\u3DFF\u3E00\u3E01"+
-        "\u3E02\u3E03\u3E04\u3E05\u3E06\u3E07\u3E08\u3E09"+
-        "\u3E0A\u3E0B\u3E0C\u3E0D\u3E0E\u3E0F\u3E10\u3E11"+
-        "\u3E12\u3E13\u3E14\u3E15\u3E16\u3E17\u3E18\u3E19"+
-        "\u3E1A\u3E1B\u3E1C\u3E1D\u3E1E\u3E1F\u3E20\u3E21"+
-        "\u3E22\u3E23\u3E24\u3E25\u3E26\u3E27\u3E28\u3E29"+
-        "\u3E2A\u3E2B\u3E2C\u3E2D\u3E2E\u3E2F\u3E30\u3E31"+
-        "\u3E32\u3E33\u3E34\u3E35\u3E36\u3E37\u3E38\u3E39"+
-        "\u3E3A\u3E3B\u3E3C\u3E3D\u3E3E\u3E3F\u3E40\u3E41"+
-        "\u3E42\u3E43\u3E44\u3E45\u3E46\u3E47\u3E48\u3E49"+
-        "\u3E4A\u3E4B\u3E4C\u3E4D\u3E4E\u3E4F\u3E50\u3E51"+
-        "\u3E52\u3E53\u3E54\u3E55\u3E56\u3E57\u3E58\u3E59"+
-        "\u3E5A\u3E5B\u3E5C\u3E5D\u3E5E\u3E5F\u3E60\u3E61"+
-        "\u3E62\u3E63\u3E64\u3E65\u3E66\u3E67\u3E68\u3E69"+
-        "\u3E6A\u3E6B\u3E6C\u3E6D\u3E6E\u3E6F\u3E70\u3E71"+
-        "\u3E72\u3E73\u3E74\u3E75\u3E76\u3E77\u3E78\u3E79"+
-        "\u3E7A\u3E7B\u3E7C\u3E7D\u3E7E\u3E7F\u3E80\u3E81"+
-        "\u3E82\u3E83\u3E84\u3E85\u3E86\u3E87\u3E88\u3E89"+
-        "\u3E8A\u3E8B\u3E8C\u3E8D\u3E8E\u3E8F\u3E90\u3E91"+
-        "\u3E92\u3E93\u3E94\u3E95\u3E96\u3E97\u3E98\u3E99"+
-        "\u3E9A\u3E9B\u3E9C\u3E9D\u3E9E\u3E9F\u3EA0\u3EA1"+
-        "\u3EA2\u3EA3\u3EA4\u3EA5\u3EA6\u3EA7\u3EA8\u3EA9"+
-        "\u3EAA\u3EAB\u3EAC\u3EAD\u3EAE\u3EAF\u3EB0\u3EB1"+
-        "\u3EB2\u3EB3\u3EB4\u3EB5\u3EB6\u3EB7\u3EB8\u3EB9"+
-        "\u3EBA\u3EBB\u3EBC\u3EBD\u3EBE\u3EBF\u3EC0\u3EC1"+
-        "\u3EC2\u3EC3\u3EC4\u3EC5\u3EC6\u3EC7\u3EC8\u3EC9"+
-        "\u3ECA\u3ECB\u3ECC\u3ECD\u3ECE\u3ECF\u3ED0\u3ED1"+
-        "\u3ED2\u3ED3\u3ED4\u3ED5\u3ED6\u3ED7\u3ED8\u3ED9"+
-        "\u3EDA\u3EDB\u3EDC\u3EDD\u3EDE\u3EDF\u3EE0\u3EE1";
-
-    private final static String innerEncoderIndex2=
-        "\u3EE2\u3EE3\u3EE4\u3EE5\u3EE6\u3EE7\u3EE8\u3EE9"+
-        "\u3EEA\u3EEB\u3EEC\u3EED\u3EEE\u3EEF\u3EF0\u3EF1"+
-        "\uA95C\u3EF2\u3EF3\uA843\uA1AA\uA844\uA1AC\u3EF4"+
-        "\uA1AE\uA1AF\u3EF5\u3EF6\uA1B0\uA1B1\u3EF7\u3EF8"+
-        "\u3EF9\u3EFA\u3EFB\u3EFC\u3EFD\uA845\uA1AD\u3EFE"+
-        "\u3EFF\u3F00\u3F01\u3F02\u3F03\u3F04\u3F05\u3F06"+
-        "\uA1EB\u3F07\uA1E4\uA1E5\u3F08\uA846\u3F09\u3F0A"+
-        "\u3F0B\u3F0C\u3F0D\uA1F9\u3F0E\u3F0F\u3F10\u3F11"+
-        "\u3F12\u3F13\u3F14\u3F15\u3F16\u3F17\u3F18\u3F19"+
-        "\u3F1A\u3F1B\u3F1C\u3F1D\u3F1E\u3F1F\u3F20\u3F21"+
-        "\u3F22\u3F23\u3F24\u3F25\u3F26\u3F27\u3F28\u3F29"+
-        "\u3F2A\u3F2B\u3F2C\u3F2D\u3F2E\u3F2F\u3F30\u3F31"+
-        "\u3F32\u3F33\u3F34\u3F35\u3F36\u3F37\u3F38\u3F39"+
-        "\u3F3A\u3F3B\u3F3C\u3F3D\u3F3E\u3F3F\u3F40\u3F41"+
-        "\u3F42\u3F43\u3F44\u3F45\u3F46\u3F47\u3F48\u3F49"+
-        "\u3F4A\u3F4B\u3F4C\u3F4D\u3F4E\u3F4F\u3F50\u3F51"+
-        "\u3F52\u3F53\u3F54\u3F55\u3F56\u3F57\u3F58\u3F59"+
-        "\u3F5A\u3F5B\u3F5C\u3F5D\u3F5E\u3F5F\u3F60\u3F61"+
-        "\u3F62\u3F63\u3F64\u3F65\u3F66\u3F67\u3F68\u3F69"+
-        "\u3F6A\u3F6B\u3F6C\u3F6D\u3F6E\u3F6F\u3F70\u3F71"+
-        "\u3F72\u3F73\u3F74\u3F75\u3F76\u3F77\u3F78\u3F79"+
-        "\u3F7A\u3F7B\u3F7C\u3F7D\uA2E3\u3F7E\u3F7F\u3F80"+
-        "\u3F81\u3F82\u3F83\u3F84\u3F85\u3F86\u3F87\u3F88"+
-        "\u3F89\u3F8A\u3F8B\u3F8C\u3F8D\u3F8E\u3F8F\u3F90"+
-        "\u3F91\u3F92\u3F93\u3F94\u3F95\u3F96\u3F97\u3F98"+
-        "\u3F99\u3F9A\u3F9B\u3F9C\u3F9D\u3F9E\u3F9F\u3FA0"+
-        "\u3FA1\u3FA2\u3FA3\u3FA4\u3FA5\u3FA6\u3FA7\u3FA8"+
-        "\u3FA9\u3FAA\u3FAB\u3FAC\u3FAD\u3FAE\u3FAF\u3FB0"+
-        "\u3FB1\u3FB2\u3FB3\u3FB4\u3FB5\u3FB6\u3FB7\u3FB8"+
-        "\u3FB9\u3FBA\u3FBB\u3FBC\u3FBD\u3FBE\u3FBF\u3FC0"+
-        "\u3FC1\u3FC2\u3FC3\u3FC4\u3FC5\u3FC6\u3FC7\u3FC8"+
-        "\u3FC9\u3FCA\u3FCB\u3FCC\u3FCD\u3FCE\u3FCF\u3FD0"+
-        "\u3FD1\u3FD2\u3FD3\uA1E6\u3FD4\uA847\u3FD5\u3FD6"+
-        "\u3FD7\uA848\u3FD8\u3FD9\u3FDA\u3FDB\u3FDC\u3FDD"+
-        "\u3FDE\u3FDF\u3FE0\u3FE1\u3FE2\u3FE3\uA1ED\u3FE4"+
-        "\u3FE5\u3FE6\u3FE7\u3FE8\u3FE9\u3FEA\u3FEB\u3FEC"+
-        "\u3FED\uA959\u3FEE\u3FEF\u3FF0\u3FF1\u3FF2\u3FF3"+
-        "\u3FF4\u3FF5\u3FF6\u3FF7\u3FF8\u3FF9\u3FFA\u3FFB"+
-        "\u3FFC\u3FFD\u3FFE\u3FFF\u4000\u4001\u4002\u4003"+
-        "\u4004\u4005\u4006\u4007\u4008\u4009\u400A\u400B"+
-        "\u400C\u400D\u400E\u400F\u4010\u4011\u4012\u4013"+
-        "\u4014\u4015\u4016\u4017\u4018\u4019\u401A\u401B"+
-        "\u401C\u401D\u401E\u401F\u4020\u4021\u4022\u4023"+
-        "\u4024\u4025\u4026\u4027\u4028\u4029\u402A\u402B"+
-        "\uA2F1\uA2F2\uA2F3\uA2F4\uA2F5\uA2F6\uA2F7\uA2F8"+
-        "\uA2F9\uA2FA\uA2FB\uA2FC\u402C\u402D\u402E\u402F"+
-        "\uA2A1\uA2A2\uA2A3\uA2A4\uA2A5\uA2A6\uA2A7\uA2A8"+
-        "\uA2A9\uA2AA\u4030\u4031\u4032\u4033\u4034\u4035"+
-        "\u4036\u4037\u4038\u4039\u403A\u403B\u403C\u403D"+
-        "\u403E\u403F\u4040\u4041\u4042\u4043\u4044\u4045"+
-        "\uA1FB\uA1FC\uA1FA\uA1FD\u4046\u4047\uA849\uA84A"+
-        "\uA84B\uA84C\u4048\u4049\u404A\u404B\u404C\u404D"+
-        "\u404E\u404F\u4050\u4051\u4052\u4053\u4054\u4055"+
-        "\u4056\u4057\u4058\u4059\u405A\u405B\u405C\u405D"+
-        "\u405E\u405F\u4060\u4061\u4062\u4063\u4064\u4065"+
-        "\u4066\u4067\u4068\u4069\u406A\u406B\u406C\u406D"+
-        "\u406E\u406F\u4070\u4071\u4072\u4073\u4074\u4075"+
-        "\u4076\u4077\u4078\u4079\u407A\u407B\u407C\u407D"+
-        "\u407E\u407F\u4080\u4081\u4082\u4083\u4084\u4085"+
-        "\u4086\u4087\u4088\u4089\u408A\u408B\u408C\u408D"+
-        "\u408E\u408F\u4090\u4091\u4092\u4093\u4094\u4095"+
-        "\u4096\u4097\u4098\u4099\u409A\u409B\u409C\u409D"+
-        "\u409E\u409F\u40A0\u40A1\u40A2\u40A3\u40A4\u40A5"+
-        "\u40A6\u40A7\u40A8\u40A9\u40AA\u40AB\u40AC\u40AD"+
-        "\u40AE\u40AF\u40B0\u40B1\u40B2\u40B3\u40B4\u40B5"+
-        "\uA1CA\u40B6\u40B7\u40B8\u40B9\u40BA\u40BB\uA1C7"+
-        "\u40BC\uA1C6\u40BD\u40BE\u40BF\uA84D\u40C0\u40C1"+
-        "\u40C2\u40C3\uA1CC\u40C4\u40C5\uA1D8\uA1DE\uA84E"+
-        "\uA1CF\u40C6\u40C7\uA84F\u40C8\uA1CE\u40C9\uA1C4"+
-        "\uA1C5\uA1C9\uA1C8\uA1D2\u40CA\u40CB\uA1D3\u40CC"+
-        "\u40CD\u40CE\u40CF\u40D0\uA1E0\uA1DF\uA1C3\uA1CB"+
-        "\u40D1\u40D2\u40D3\u40D4\u40D5\uA1D7\u40D6\u40D7"+
-        "\u40D8\u40D9\u40DA\u40DB\u40DC\u40DD\u40DE\u40DF"+
-        "\uA1D6\u40E0\u40E1\u40E2\uA1D5\u40E3\u40E4\u40E5"+
-        "\u40E6\u40E7\uA850\u40E8\u40E9\u40EA\u40EB\u40EC"+
-        "\u40ED\u40EE\u40EF\u40F0\u40F1\u40F2\u40F3\u40F4"+
-        "\uA1D9\uA1D4\u40F5\u40F6\uA1DC\uA1DD\uA851\uA852"+
-        "\u40F7\u40F8\u40F9\u40FA\u40FB\u40FC\uA1DA\uA1DB"+
-        "\u40FD\u40FE\u40FF\u4100\u4101\u4102\u4103\u4104"+
-        "\u4105\u4106\u4107\u4108\u4109\u410A\u410B\u410C"+
-        "\u410D\u410E\u410F\u4110\u4111\u4112\u4113\u4114"+
-        "\u4115\u4116\u4117\u4118\u4119\u411A\u411B\u411C"+
-        "\u411D\u411E\u411F\u4120\u4121\uA892\u4122\u4123"+
-        "\u4124\uA1D1\u4125\u4126\u4127\u4128\u4129\u412A"+
-        "\u412B\u412C\u412D\u412E\u412F\uA1CD\u4130\u4131"+
-        "\u4132\u4133\u4134\u4135\u4136\u4137\u4138\u4139"+
-        "\u413A\u413B\u413C\u413D\u413E\u413F\u4140\u4141"+
-        "\u4142\u4143\u4144\u4145\u4146\u4147\u4148\uA853"+
-        "\u4149\u414A\u414B\u414C\u414D\u414E\u414F\u4150"+
-        "\u4151\u4152\u4153\u4154\u4155\u4156\u4157\u4158"+
-        "\u4159\u415A\u415B\u415C\u415D\u415E\u415F\u4160"+
-        "\u4161\u4162\u4163\u4164\u4165\u4166\u4167\u4168"+
-        "\u4169\u416A\u416B\u416C\u416D\u416E\u416F\u4170"+
-        "\u4171\u4172\u4173\u4174\u4175\u4176\u4177\u4178"+
-        "\u4179\u417A\u417B\u417C\u417D\u417E\u417F\u4180"+
-        "\u4181\u4182\u4183\u4184\u4185\u4186\u4187\u4188"+
-        "\u4189\u418A\u418B\u418C\u418D\u418E\u418F\u4190"+
-        "\u4191\u4192\u4193\u4194\u4195\u4196\u4197\u4198"+
-        "\u4199\u419A\uA1D0\u419B\u419C\u419D\u419E\u419F"+
-        "\u41A0\u41A1\u41A2\u41A3\u41A4\u41A5\u41A6\u41A7"+
-        "\u41A8\u41A9\u41AA\u41AB\u41AC\u41AD\u41AE\u41AF"+
-        "\u41B0\u41B1\u41B2\u41B3\u41B4\u41B5\u41B6\u41B7"+
-        "\u41B8\u41B9\u41BA\u41BB\u41BC\u41BD\u41BE\u41BF"+
-        "\u41C0\u41C1\u41C2\u41C3\u41C4\u41C5\u41C6\u41C7"+
-        "\u41C8\u41C9\u41CA\u41CB\u41CC\u41CD\u41CE\u41CF"+
-        "\u41D0\u41D1\u41D2\u41D3\u41D4\u41D5\u41D6\u41D7"+
-        "\u41D8\u41D9\u41DA\u41DB\u41DC\u41DD\u41DE\u41DF"+
-        "\u41E0\u41E1\u41E2\u41E3\u41E4\u41E5\u41E6\u41E7"+
-        "\u41E8\u41E9\u41EA\u41EB\u41EC\u41ED\u41EE\u41EF"+
-        "\u41F0\u41F1\u41F2\u41F3\u41F4\u41F5\u41F6\u41F7"+
-        "\u41F8\u41F9\u41FA\u41FB\u41FC\u41FD\u41FE\u41FF"+
-        "\u4200\u4201\u4202\u4203\u4204\u4205\u4206\u4207"+
-        "\u4208\u4209\u420A\u420B\u420C\u420D\u420E\u420F"+
-        "\u4210\u4211\u4212\u4213\u4214\u4215\u4216\u4217"+
-        "\u4218\u4219\u421A\u421B\u421C\u421D\u421E\u421F"+
-        "\u4220\u4221\u4222\u4223\u4224\u4225\u4226\u4227"+
-        "\u4228\u4229\u422A\u422B\u422C\u422D\u422E\u422F"+
-        "\u4230\u4231\u4232\u4233\u4234\u4235\u4236\u4237"+
-        "\u4238\u4239\u423A\u423B\u423C\u423D\u423E\u423F"+
-        "\u4240\u4241\u4242\u4243\u4244\u4245\u4246\u4247"+
-        "\u4248\u4249\u424A\u424B\u424C\u424D\u424E\u424F"+
-        "\u4250\u4251\u4252\u4253\u4254\u4255\u4256\u4257"+
-        "\u4258\u4259\u425A\u425B\u425C\u425D\u425E\u425F"+
-        "\u4260\u4261\u4262\u4263\u4264\u4265\u4266\u4267"+
-        "\u4268\u4269\u426A\u426B\u426C\u426D\u426E\u426F"+
-        "\u4270\u4271\u4272\u4273\u4274\u4275\u4276\u4277"+
-        "\u4278\u4279\u427A\u427B\u427C\u427D\u427E\u427F"+
-        "\u4280\u4281\u4282\u4283\u4284\u4285\u4286\u4287"+
-        "\u4288\u4289\u428A\u428B\u428C\u428D\u428E\u428F"+
-        "\u4290\u4291\u4292\u4293\u4294\u4295\u4296\u4297"+
-        "\u4298\u4299\u429A\u429B\u429C\u429D\u429E\u429F"+
-        "\u42A0\u42A1\u42A2\u42A3\u42A4\u42A5\u42A6\u42A7"+
-        "\u42A8\u42A9\u42AA\u42AB\u42AC\u42AD\u42AE\u42AF"+
-        "\u42B0\u42B1\u42B2\u42B3\u42B4\u42B5\u42B6\u42B7"+
-        "\u42B8\u42B9\u42BA\u42BB\u42BC\u42BD\u42BE\u42BF"+
-        "\u42C0\u42C1\u42C2\u42C3\u42C4\u42C5\u42C6\u42C7"+
-        "\u42C8\u42C9\u42CA\u42CB\u42CC\u42CD\u42CE\u42CF"+
-        "\u42D0\u42D1\u42D2\u42D3\u42D4\u42D5\u42D6\u42D7"+
-        "\u42D8\u42D9\u42DA\u42DB\u42DC\u42DD\u42DE\u42DF"+
-        "\u42E0\u42E1\u42E2\u42E3\u42E4\u42E5\u42E6\u42E7"+
-        "\uA2D9\uA2DA\uA2DB\uA2DC\uA2DD\uA2DE\uA2DF\uA2E0"+
-        "\uA2E1\uA2E2\u42E8\u42E9\u42EA\u42EB\u42EC\u42ED"+
-        "\u42EE\u42EF\u42F0\u42F1\uA2C5\uA2C6\uA2C7\uA2C8"+
-        "\uA2C9\uA2CA\uA2CB\uA2CC\uA2CD\uA2CE\uA2CF\uA2D0"+
-        "\uA2D1\uA2D2\uA2D3\uA2D4\uA2D5\uA2D6\uA2D7\uA2D8"+
-        "\uA2B1\uA2B2\uA2B3\uA2B4\uA2B5\uA2B6\uA2B7\uA2B8"+
-        "\uA2B9\uA2BA\uA2BB\uA2BC\uA2BD\uA2BE\uA2BF\uA2C0"+
-        "\uA2C1\uA2C2\uA2C3\uA2C4\u42F2\u42F3\u42F4\u42F5"+
-        "\u42F6\u42F7\u42F8\u42F9\u42FA\u42FB\u42FC\u42FD"+
-        "\u42FE\u42FF\u4300\u4301\u4302\u4303\u4304\u4305"+
-        "\u4306\u4307\u4308\u4309\u430A\u430B\u430C\u430D"+
-        "\u430E\u430F\u4310\u4311\u4312\u4313\u4314\u4315"+
-        "\u4316\u4317\u4318\u4319\u431A\u431B\u431C\u431D"+
-        "\u431E\u431F\u4320\u4321\u4322\u4323\u4324\u4325"+
-        "\u4326\u4327\u4328\u4329\u432A\u432B\u432C\u432D"+
-        "\u432E\u432F\u4330\u4331\u4332\u4333\u4334\u4335"+
-        "\u4336\u4337\u4338\u4339\u433A\u433B\u433C\u433D"+
-        "\u433E\u433F\u4340\u4341\u4342\u4343\u4344\u4345"+
-        "\u4346\u4347\u4348\u4349\u434A\u434B\u434C\u434D"+
-        "\u434E\u434F\u4350\u4351\u4352\u4353\u4354\u4355"+
-        "\uA9A4\uA9A5\uA9A6\uA9A7\uA9A8\uA9A9\uA9AA\uA9AB"+
-        "\uA9AC\uA9AD\uA9AE\uA9AF\uA9B0\uA9B1\uA9B2\uA9B3"+
-        "\uA9B4\uA9B5\uA9B6\uA9B7\uA9B8\uA9B9\uA9BA\uA9BB"+
-        "\uA9BC\uA9BD\uA9BE\uA9BF\uA9C0\uA9C1\uA9C2\uA9C3"+
-        "\uA9C4\uA9C5\uA9C6\uA9C7\uA9C8\uA9C9\uA9CA\uA9CB"+
-        "\uA9CC\uA9CD\uA9CE\uA9CF\uA9D0\uA9D1\uA9D2\uA9D3"+
-        "\uA9D4\uA9D5\uA9D6\uA9D7\uA9D8\uA9D9\uA9DA\uA9DB"+
-        "\uA9DC\uA9DD\uA9DE\uA9DF\uA9E0\uA9E1\uA9E2\uA9E3"+
-        "\uA9E4\uA9E5\uA9E6\uA9E7\uA9E8\uA9E9\uA9EA\uA9EB"+
-        "\uA9EC\uA9ED\uA9EE\uA9EF\u4356\u4357\u4358\u4359"+
-        "\uA854\uA855\uA856\uA857\uA858\uA859\uA85A\uA85B"+
-        "\uA85C\uA85D\uA85E\uA85F\uA860\uA861\uA862\uA863"+
-        "\uA864\uA865\uA866\uA867\uA868\uA869\uA86A\uA86B"+
-        "\uA86C\uA86D\uA86E\uA86F\uA870\uA871\uA872\uA873"+
-        "\uA874\uA875\uA876\uA877\u435A\u435B\u435C\u435D"+
-        "\u435E\u435F\u4360\u4361\u4362\u4363\u4364\u4365"+
-        "\u4366\uA878\uA879\uA87A\uA87B\uA87C\uA87D\uA87E"+
-        "\uA880\uA881\uA882\uA883\uA884\uA885\uA886\uA887"+
-        "\u4367\u4368\u4369\uA888\uA889\uA88A\u436A\u436B"+
-        "\u436C\u436D\u436E\u436F\u4370\u4371\u4372\u4373"+
-        "\uA1F6\uA1F5\u4374\u4375\u4376\u4377\u4378\u4379"+
-        "\u437A\u437B\u437C\u437D\u437E\u437F\u4380\u4381"+
-        "\u4382\u4383\uA1F8\uA1F7\u4384\u4385\u4386\u4387"+
-        "\u4388\u4389\u438A\u438B\uA88B\uA88C\u438C\u438D"+
-        "\u438E\u438F\u4390\u4391\u4392\u4393\uA1F4\uA1F3"+
-        "\u4394\u4395\u4396\uA1F0\u4397\u4398\uA1F2\uA1F1"+
-        "\u4399\u439A\u439B\u439C\u439D\u439E\u439F\u43A0"+
-        "\u43A1\u43A2\u43A3\u43A4\u43A5\u43A6\u43A7\u43A8"+
-        "\u43A9\u43AA\uA88D\uA88E\uA88F\uA890\u43AB\u43AC"+
-        "\u43AD\u43AE\u43AF\u43B0\u43B1\u43B2\u43B3\u43B4"+
-        "\u43B5\u43B6\u43B7\u43B8\u43B9\u43BA\u43BB\u43BC"+
-        "\u43BD\u43BE\u43BF\u43C0\u43C1\u43C2\u43C3\u43C4"+
-        "\u43C5\u43C6\u43C7\u43C8\u43C9\uA1EF\uA1EE\u43CA"+
-        "\u43CB\uA891\u43CC\u43CD\u43CE\u43CF\u43D0\u43D1"+
-        "\u43D2\u43D3\u43D4\u43D5\u43D6\u43D7\u43D8\u43D9"+
-        "\u43DA\u43DB\u43DC\u43DD\u43DE\u43DF\u43E0\u43E1"+
-        "\u43E2\u43E3\u43E4\u43E5\u43E6\u43E7\u43E8\u43E9"+
-        "\u43EA\u43EB\u43EC\u43ED\u43EE\u43EF\u43F0\u43F1"+
-        "\u43F2\u43F3\u43F4\u43F5\u43F6\u43F7\u43F8\u43F9"+
-        "\u43FA\u43FB\u43FC\u43FD\u43FE\u43FF\u4400\u4401"+
-        "\uA1E2\u4402\uA1E1\u4403\u4404\u4405\u4406\u4407"+
-        "\u4408\u4409\u440A\u440B\u440C\u440D\u440E\u440F"+
-        "\u4410\u4411\u4412\u4413\u4414\u4415\u4416\u4417"+
-        "\u4418\u4419\u441A\u441B\u441C\u441D\u441E\u441F"+
-        "\u4420\u4421\u4422\u4423\u4424\u4425\u4426\u4427"+
-        "\u4428\u4429\u442A\u442B\u442C\u442D\u442E\u442F"+
-        "\u4430\u4431\u4432\u4433\u4434\u4435\u4436\u4437"+
-        "\u4438\u4439\u443A\u443B\u443C\u443D\u443E\u443F"+
-        "\u4440\u4441\u4442\u4443\u4444\u4445\u4446\u4447"+
-        "\u4448\u4449\u444A\u444B\u444C\u444D\u444E\u444F"+
-        "\u4450\u4451\u4452\u4453\u4454\u4455\u4456\u4457"+
-        "\u4458\u4459\u445A\u445B\u445C\u445D\u445E\u445F"+
-        "\u4460\u4461\u4462\u4463\u4464\u4465\u4466\u4467"+
-        "\u4468\u4469\u446A\u446B\u446C\u446D\u446E\u446F"+
-        "\u4470\u4471\u4472\u4473\u4474\u4475\u4476\u4477"+
-        "\u4478\u4479\u447A\u447B\u447C\u447D\u447E\u447F"+
-        "\u4480\u4481\u4482\u4483\u4484\u4485\u4486\u4487"+
-        "\u4488\u4489\u448A\u448B\u448C\u448D\u448E\u448F"+
-        "\u4490\u4491\u4492\u4493\u4494\u4495\u4496\u4497"+
-        "\u4498\u4499\u449A\u449B\u449C\u449D\u449E\u449F"+
-        "\u44A0\u44A1\u44A2\u44A3\u44A4\u44A5\u44A6\u44A7"+
-        "\u44A8\u44A9\u44AA\u44AB\u44AC\u44AD\u44AE\u44AF"+
-        "\u44B0\u44B1\u44B2\u44B3\u44B4\u44B5\u44B6\u44B7"+
-        "\u44B8\u44B9\u44BA\u44BB\u44BC\u44BD\u44BE\u44BF"+
-        "\u44C0\u44C1\u44C2\u44C3\u44C4\u44C5\u44C6\u44C7"+
-        "\u44C8\u44C9\u44CA\u44CB\u44CC\u44CD\u44CE\u44CF"+
-        "\u44D0\u44D1\u44D2\u44D3\u44D4\u44D5\u44D6\u44D7"+
-        "\u44D8\u44D9\u44DA\u44DB\u44DC\u44DD\u44DE\u44DF"+
-        "\u44E0\u44E1\u44E2\u44E3\u44E4\u44E5\u44E6\u44E7"+
-        "\u44E8\u44E9\u44EA\u44EB\u44EC\u44ED\u44EE\u44EF"+
-        "\u44F0\u44F1\u44F2\u44F3\u44F4\u44F5\u44F6\u44F7"+
-        "\u44F8\u44F9\u44FA\u44FB\u44FC\u44FD\u44FE\u44FF"+
-        "\u4500\u4501\u4502\u4503\u4504\u4505\u4506\u4507"+
-        "\u4508\u4509\u450A\u450B\u450C\u450D\u450E\u450F"+
-        "\u4510\u4511\u4512\u4513\u4514\u4515\u4516\u4517"+
-        "\u4518\u4519\u451A\u451B\u451C\u451D\u451E\u451F"+
-        "\u4520\u4521\u4522\u4523\u4524\u4525\u4526\u4527"+
-        "\u4528\u4529\u452A\u452B\u452C\u452D\u452E\u452F"+
-        "\u4530\u4531\u4532\u4533\u4534\u4535\u4536\u4537"+
-        "\u4538\u4539\u453A\u453B\u453C\u453D\u453E\u453F"+
-        "\u4540\u4541\u4542\u4543\u4544\u4545\u4546\u4547"+
-        "\u4548\u4549\u454A\u454B\u454C\u454D\u454E\u454F"+
-        "\u4550\u4551\u4552\u4553\u4554\u4555\u4556\u4557"+
-        "\u4558\u4559\u455A\u455B\u455C\u455D\u455E\u455F"+
-        "\u4560\u4561\u4562\u4563\u4564\u4565\u4566\u4567"+
-        "\u4568\u4569\u456A\u456B\u456C\u456D\u456E\u456F"+
-        "\u4570\u4571\u4572\u4573\u4574\u4575\u4576\u4577"+
-        "\u4578\u4579\u457A\u457B\u457C\u457D\u457E\u457F"+
-        "\u4580\u4581\u4582\u4583\u4584\u4585\u4586\u4587"+
-        "\u4588\u4589\u458A\u458B\u458C\u458D\u458E\u458F"+
-        "\u4590\u4591\u4592\u4593\u4594\u4595\u4596\u4597"+
-        "\u4598\u4599\u459A\u459B\u459C\u459D\u459E\u459F"+
-        "\u45A0\u45A1\u45A2\u45A3\u45A4\u45A5\u45A6\u45A7"+
-        "\u45A8\u45A9\u45AA\u45AB\u45AC\u45AD\u45AE\u45AF"+
-        "\u45B0\u45B1\u45B2\u45B3\u45B4\u45B5\u45B6\u45B7"+
-        "\u45B8\u45B9\u45BA\u45BB\u45BC\u45BD\u45BE\u45BF"+
-        "\u45C0\u45C1\u45C2\u45C3\u45C4\u45C5\u45C6\u45C7"+
-        "\u45C8\u45C9\u45CA\u45CB\u45CC\u45CD\u45CE\u45CF"+
-        "\u45D0\u45D1\u45D2\u45D3\u45D4\u45D5\u45D6\u45D7"+
-        "\u45D8\u45D9\u45DA\u45DB\u45DC\u45DD\u45DE\u45DF"+
-        "\u45E0\u45E1\u45E2\u45E3\u45E4\u45E5\u45E6\u45E7"+
-        "\u45E8\u45E9\u45EA\u45EB\u45EC\u45ED\u45EE\u45EF"+
-        "\u45F0\u45F1\u45F2\u45F3\u45F4\u45F5\u45F6\u45F7"+
-        "\u45F8\u45F9\u45FA\u45FB\u45FC\u45FD\u45FE\u45FF"+
-        "\u4600\u4601\u4602\u4603\u4604\u4605\u4606\u4607"+
-        "\u4608\u4609\u460A\u460B\u460C\u460D\u460E\u460F"+
-        "\u4610\u4611\u4612\u4613\u4614\u4615\u4616\u4617"+
-        "\u4618\u4619\u461A\u461B\u461C\u461D\u461E\u461F"+
-        "\u4620\u4621\u4622\u4623\u4624\u4625\u4626\u4627"+
-        "\u4628\u4629\u462A\u462B\u462C\u462D\u462E\u462F"+
-        "\u4630\u4631\u4632\u4633\u4634\u4635\u4636\u4637"+
-        "\u4638\u4639\u463A\u463B\u463C\u463D\u463E\u463F"+
-        "\u4640\u4641\u4642\u4643\u4644\u4645\u4646\u4647"+
-        "\u4648\u4649\u464A\u464B\u464C\u464D\u464E\u464F"+
-        "\u4650\u4651\u4652\u4653\u4654\u4655\u4656\u4657"+
-        "\u4658\u4659\u465A\u465B\u465C\u465D\u465E\u465F"+
-        "\u4660\u4661\u4662\u4663\u4664\u4665\u4666\u4667"+
-        "\u4668\u4669\u466A\u466B\u466C\u466D\u466E\u466F"+
-        "\u4670\u4671\u4672\u4673\u4674\u4675\u4676\u4677"+
-        "\u4678\u4679\u467A\u467B\u467C\u467D\u467E\u467F"+
-        "\u4680\u4681\u4682\u4683\u4684\u4685\u4686\u4687"+
-        "\u4688\u4689\u468A\u468B\u468C\u468D\u468E\u468F"+
-        "\u4690\u4691\u4692\u4693\u4694\u4695\u4696\u4697"+
-        "\u4698\u4699\u469A\u469B\u469C\u469D\u469E\u469F"+
-        "\u46A0\u46A1\u46A2\u46A3\u46A4\u46A5\u46A6\u46A7"+
-        "\u46A8\u46A9\u46AA\u46AB\u46AC\u46AD\u46AE\u46AF"+
-        "\u46B0\u46B1\u46B2\u46B3\u46B4\u46B5\u46B6\u46B7"+
-        "\u46B8\u46B9\u46BA\u46BB\u46BC\u46BD\u46BE\u46BF"+
-        "\u46C0\u46C1\u46C2\u46C3\u46C4\u46C5\u46C6\u46C7"+
-        "\u46C8\u46C9\u46CA\u46CB\u46CC\u46CD\u46CE\u46CF"+
-        "\u46D0\u46D1\u46D2\u46D3\u46D4\u46D5\u46D6\u46D7"+
-        "\u46D8\u46D9\u46DA\u46DB\u46DC\u46DD\u46DE\u46DF"+
-        "\u46E0\u46E1\u46E2\u46E3\u46E4\u46E5\u46E6\u46E7"+
-        "\u46E8\u46E9\u46EA\u46EB\u46EC\u46ED\u46EE\u46EF"+
-        "\u46F0\u46F1\u46F2\u46F3\u46F4\u46F5\u46F6\u46F7"+
-        "\u46F8\u46F9\u46FA\u46FB\u46FC\u46FD\u46FE\u46FF"+
-        "\u4700\u4701\u4702\u4703\u4704\u4705\u4706\u4707"+
-        "\u4708\u4709\u470A\u470B\u470C\u470D\u470E\u470F"+
-        "\u4710\u4711\u4712\u4713\u4714\u4715\u4716\u4717"+
-        "\u4718\u4719\u471A\u471B\u471C\u471D\u471E\u471F"+
-        "\u4720\u4721\u4722\u4723\u4724\u4725\u4726\u4727"+
-        "\u4728\u4729\u472A\u472B\u472C\u472D\u472E\u472F"+
-        "\u4730\u4731\u4732\u4733\u4734\u4735\u4736\u4737"+
-        "\u4738\u4739\u473A\u473B\u473C\u473D\u473E\u473F"+
-        "\u4740\u4741\u4742\u4743\u4744\u4745\u4746\u4747"+
-        "\u4748\u4749\u474A\u474B\u474C\u474D\u474E\u474F"+
-        "\u4750\u4751\u4752\u4753\u4754\u4755\u4756\u4757"+
-        "\u4758\u4759\u475A\u475B\u475C\u475D\u475E\u475F"+
-        "\u4760\u4761\u4762\u4763\u4764\u4765\u4766\u4767"+
-        "\u4768\u4769\u476A\u476B\u476C\u476D\u476E\u476F"+
-        "\u4770\u4771\u4772\u4773\u4774\u4775\u4776\u4777"+
-        "\u4778\u4779\u477A\u477B\u477C\u477D\u477E\u477F"+
-        "\u4780\u4781\u4782\u4783\u4784\u4785\u4786\u4787"+
-        "\u4788\u4789\u478A\u478B\u478C\u478D\u478E\u478F"+
-        "\u4790\u4791\u4792\u4793\u4794\u4795\u4796\u4797"+
-        "\u4798\u4799\u479A\u479B\u479C\u479D\u479E\u479F"+
-        "\u47A0\u47A1\u47A2\u47A3\u47A4\u47A5\u47A6\u47A7"+
-        "\u47A8\u47A9\u47AA\u47AB\u47AC\u47AD\u47AE\u47AF"+
-        "\u47B0\u47B1\u47B2\u47B3\u47B4\u47B5\u47B6\u47B7"+
-        "\u47B8\u47B9\u47BA\u47BB\u47BC\u47BD\u47BE\u47BF"+
-        "\u47C0\u47C1\u47C2\u47C3\u47C4\u47C5\u47C6\u47C7"+
-        "\u47C8\u47C9\u47CA\u47CB\u47CC\u47CD\u47CE\u47CF"+
-        "\u47D0\u47D1\u47D2\u47D3\u47D4\u47D5\u47D6\u47D7"+
-        "\u47D8\u47D9\u47DA\u47DB\u47DC\u47DD\u47DE\u47DF"+
-        "\u47E0\u47E1\u47E2\u47E3\u47E4\u47E5\u47E6\u47E7"+
-        "\u47E8\u47E9\u47EA\u47EB\u47EC\u47ED\u47EE\u47EF"+
-        "\u47F0\u47F1\u47F2\u47F3\u47F4\u47F5\u47F6\u47F7"+
-        "\u47F8\u47F9\u47FA\u47FB\u47FC\u47FD\u47FE\u47FF"+
-        "\u4800\u4801\u4802\u4803\u4804\u4805\u4806\u4807"+
-        "\u4808\u4809\u480A\u480B\u480C\u480D\u480E\u480F"+
-        "\u4810\u4811\u4812\u4813\u4814\u4815\u4816\u4817"+
-        "\u4818\u4819\u481A\u481B\u481C\u481D\u481E\u481F"+
-        "\u4820\u4821\u4822\u4823\u4824\u4825\u4826\u4827"+
-        "\u4828\u4829\u482A\u482B\u482C\u482D\u482E\u482F"+
-        "\u4830\u4831\u4832\u4833\u4834\u4835\u4836\u4837"+
-        "\u4838\u4839\u483A\u483B\u483C\u483D\u483E\u483F"+
-        "\u4840\u4841\u4842\u4843\u4844\u4845\u4846\u4847"+
-        "\u4848\u4849\u484A\u484B\u484C\u484D\u484E\u484F"+
-        "\u4850\u4851\u4852\u4853\u4854\u4855\u4856\u4857"+
-        "\u4858\u4859\u485A\u485B\u485C\u485D\u485E\u485F"+
-        "\u4860\u4861\u4862\u4863\u4864\u4865\u4866\u4867"+
-        "\u4868\u4869\u486A\u486B\u486C\u486D\u486E\u486F"+
-        "\u4870\u4871\u4872\u4873\u4874\u4875\u4876\u4877"+
-        "\u4878\u4879\u487A\u487B\u487C\u487D\u487E\u487F"+
-        "\u4880\u4881\u4882\u4883\u4884\u4885\u4886\u4887"+
-        "\u4888\u4889\u488A\u488B\u488C\u488D\u488E\u488F"+
-        "\u4890\u4891\u4892\u4893\u4894\u4895\u4896\u4897"+
-        "\u4898\u4899\u489A\u489B\u489C\u489D\u489E\u489F"+
-        "\u48A0\u48A1\u48A2\u48A3\u48A4\u48A5\u48A6\u48A7"+
-        "\u48A8\u48A9\u48AA\u48AB\u48AC\u48AD\u48AE\u48AF"+
-        "\u48B0\u48B1\u48B2\u48B3\u48B4\u48B5\u48B6\u48B7"+
-        "\u48B8\u48B9\u48BA\u48BB\u48BC\u48BD\u48BE\u48BF"+
-        "\u48C0\u48C1\u48C2\u48C3\u48C4\u48C5\u48C6\u48C7"+
-        "\u48C8\u48C9\u48CA\u48CB\u48CC\u48CD\u48CE\u48CF"+
-        "\u48D0\u48D1\u48D2\u48D3\u48D4\u48D5\u48D6\u48D7"+
-        "\u48D8\u48D9\u48DA\u48DB\u48DC\u48DD\u48DE\u48DF"+
-        "\u48E0\u48E1\u48E2\u48E3\u48E4\u48E5\u48E6\u48E7"+
-        "\u48E8\u48E9\u48EA\u48EB\u48EC\u48ED\u48EE\u48EF"+
-        "\u48F0\u48F1\u48F2\u48F3\u48F4\u48F5\u48F6\u48F7"+
-        "\u48F8\u48F9\u48FA\u48FB\u48FC\u48FD\u48FE\u48FF"+
-        "\u4900\u4901\u4902\u4903\u4904\u4905\u4906\u4907"+
-        "\u4908\u4909\u490A\u490B\u490C\u490D\u490E\u490F"+
-        "\u4910\u4911\u4912\u4913\u4914\u4915\u4916\u4917"+
-        "\u4918\u4919\u491A\u491B\u491C\u491D\u491E\u491F"+
-        "\u4920\u4921\u4922\u4923\u4924\u4925\u4926\u4927"+
-        "\u4928\u4929\u492A\u492B\u492C\u492D\u492E\u492F"+
-        "\u4930\u4931\u4932\u4933\u4934\u4935\u4936\u4937"+
-        "\u4938\u4939\u493A\u493B\u493C\u493D\u493E\u493F"+
-        "\u4940\u4941\u4942\u4943\u4944\u4945\u4946\u4947"+
-        "\u4948\u4949\u494A\u494B\u494C\u494D\u494E\u494F"+
-        "\u4950\u4951\u4952\u4953\u4954\u4955\u4956\u4957"+
-        "\u4958\u4959\u495A\u495B\u495C\u495D\u495E\u495F"+
-        "\u4960\u4961\u4962\u4963\u4964\u4965\u4966\u4967"+
-        "\u4968\u4969\u496A\u496B\u496C\u496D\u496E\u496F"+
-        "\u4970\u4971\u4972\u4973\u4974\u4975\u4976\u4977"+
-        "\u4978\u4979\u497A\u497B\u497C\u497D\u497E\u497F"+
-        "\u4980\u4981\u4982\u4983\u4984\u4985\u4986\u4987"+
-        "\u4988\u4989\u498A\u498B\u498C\u498D\u498E\u498F"+
-        "\u4990\u4991\u4992\u4993\u4994\u4995\u4996\u4997"+
-        "\u4998\u4999\u499A\u499B\u499C\u499D\u499E\u499F"+
-        "\u49A0\u49A1\u49A2\u49A3\u49A4\u49A5\u49A6\u49A7"+
-        "\u49A8\u49A9\u49AA\u49AB\u49AC\u49AD\u49AE\u49AF"+
-        "\u49B0\u49B1\u49B2\u49B3\u49B4\u49B5\u49B6\u49B7"+
-        "\u49B8\u49B9\u49BA\u49BB\u49BC\u49BD\u49BE\u49BF"+
-        "\u49C0\u49C1\u49C2\u49C3\u49C4\u49C5\u49C6\u49C7"+
-        "\u49C8\u49C9\u49CA\u49CB\u49CC\u49CD\u49CE\u49CF"+
-        "\u49D0\u49D1\u49D2\u49D3\u49D4\u49D5\u49D6\u49D7"+
-        "\u49D8\u49D9\u49DA\u49DB\u49DC\u49DD\u49DE\u49DF"+
-        "\u49E0\u49E1\u49E2\u49E3\u49E4\u49E5\u49E6\u49E7"+
-        "\u49E8\u49E9\u49EA\u49EB\u49EC\u49ED\u49EE\u49EF"+
-        "\u49F0\u49F1\u49F2\u49F3\u49F4\u49F5\u49F6\u49F7"+
-        "\u49F8\u49F9\u49FA\u49FB\u49FC\u49FD\u49FE\u49FF"+
-        "\u4A00\u4A01\u4A02\u4A03\u4A04\u4A05\u4A06\u4A07"+
-        "\u4A08\u4A09\u4A0A\u4A0B\u4A0C\u4A0D\u4A0E\u4A0F"+
-        "\u4A10\u4A11\u4A12\u4A13\u4A14\u4A15\u4A16\u4A17"+
-        "\u4A18\u4A19\u4A1A\u4A1B\u4A1C\u4A1D\u4A1E\u4A1F"+
-        "\u4A20\u4A21\u4A22\u4A23\u4A24\u4A25\u4A26\u4A27"+
-        "\u4A28\u4A29\u4A2A\u4A2B\u4A2C\u4A2D\u4A2E\u4A2F"+
-        "\u4A30\u4A31\u4A32\u4A33\u4A34\u4A35\u4A36\u4A37"+
-        "\u4A38\u4A39\u4A3A\u4A3B\u4A3C\u4A3D\u4A3E\u4A3F"+
-        "\u4A40\u4A41\u4A42\u4A43\u4A44\u4A45\u4A46\u4A47"+
-        "\u4A48\u4A49\u4A4A\u4A4B\u4A4C\u4A4D\u4A4E\u4A4F"+
-        "\u4A50\u4A51\u4A52\u4A53\u4A54\u4A55\u4A56\u4A57"+
-        "\u4A58\u4A59\u4A5A\u4A5B\u4A5C\u4A5D\u4A5E\u4A5F"+
-        "\u4A60\u4A61\u4A62\u4A63\u4A64\u4A65\u4A66\u4A67"+
-        "\u4A68\u4A69\u4A6A\u4A6B\u4A6C\u4A6D\u4A6E\u4A6F"+
-        "\u4A70\u4A71\u4A72\u4A73\u4A74\u4A75\u4A76\u4A77"+
-        "\u4A78\u4A79\u4A7A\u4A7B\u4A7C\u4A7D\u4A7E\u4A7F"+
-        "\u4A80\u4A81\u4A82\u4A83\u4A84\u4A85\u4A86\u4A87"+
-        "\u4A88\u4A89\u4A8A\u4A8B\u4A8C\u4A8D\u4A8E\u4A8F"+
-        "\u4A90\u4A91\u4A92\u4A93\u4A94\u4A95\u4A96\u4A97"+
-        "\u4A98\u4A99\u4A9A\u4A9B\u4A9C\u4A9D\u4A9E\u4A9F"+
-        "\u4AA0\u4AA1\u4AA2\u4AA3\u4AA4\u4AA5\u4AA6\u4AA7"+
-        "\u4AA8\u4AA9\u4AAA\u4AAB\u4AAC\u4AAD\u4AAE\u4AAF"+
-        "\u4AB0\u4AB1\u4AB2\u4AB3\u4AB4\u4AB5\u4AB6\u4AB7"+
-        "\u4AB8\u4AB9\u4ABA\u4ABB\u4ABC\u4ABD\u4ABE\u4ABF"+
-        "\u4AC0\u4AC1\u4AC2\u4AC3\u4AC4\u4AC5\u4AC6\u4AC7"+
-        "\u4AC8\u4AC9\u4ACA\u4ACB\u4ACC\u4ACD\u4ACE\u4ACF"+
-        "\u4AD0\u4AD1\u4AD2\u4AD3\u4AD4\u4AD5\u4AD6\u4AD7"+
-        "\u4AD8\u4AD9\u4ADA\u4ADB\u4ADC\u4ADD\u4ADE\u4ADF"+
-        "\u4AE0\u4AE1\u4AE2\u4AE3\u4AE4\u4AE5\u4AE6\u4AE7"+
-        "\u4AE8\u4AE9\u4AEA\u4AEB\u4AEC\u4AED\u4AEE\u4AEF"+
-        "\u4AF0\u4AF1\u4AF2\u4AF3\u4AF4\u4AF5\u4AF6\u4AF7"+
-        "\u4AF8\u4AF9\u4AFA\u4AFB\u4AFC\u4AFD\u4AFE\u4AFF"+
-        "\u4B00\u4B01\u4B02\u4B03\u4B04\u4B05\u4B06\u4B07"+
-        "\u4B08\u4B09\u4B0A\u4B0B\u4B0C\u4B0D\u4B0E\u4B0F"+
-        "\u4B10\u4B11\u4B12\u4B13\u4B14\u4B15\u4B16\u4B17"+
-        "\u4B18\u4B19\u4B1A\u4B1B\u4B1C\u4B1D\u4B1E\u4B1F"+
-        "\u4B20\u4B21\u4B22\u4B23\u4B24\u4B25\u4B26\u4B27"+
-        "\u4B28\u4B29\u4B2A\u4B2B\u4B2C\u4B2D\u4B2E\u4B2F"+
-        "\u4B30\u4B31\u4B32\u4B33\u4B34\u4B35\u4B36\u4B37"+
-        "\u4B38\u4B39\u4B3A\u4B3B\u4B3C\u4B3D\u4B3E\u4B3F"+
-        "\u4B40\u4B41\u4B42\u4B43\u4B44\u4B45\u4B46\u4B47"+
-        "\u4B48\u4B49\u4B4A\u4B4B\u4B4C\u4B4D\u4B4E\u4B4F"+
-        "\u4B50\u4B51\u4B52\u4B53\u4B54\u4B55\u4B56\u4B57"+
-        "\u4B58\u4B59\u4B5A\u4B5B\u4B5C\u4B5D\u4B5E\u4B5F"+
-        "\u4B60\u4B61\u4B62\u4B63\u4B64\u4B65\u4B66\u4B67"+
-        "\u4B68\u4B69\u4B6A\u4B6B\u4B6C\u4B6D\u4B6E\u4B6F"+
-        "\u4B70\u4B71\u4B72\u4B73\u4B74\u4B75\u4B76\u4B77"+
-        "\u4B78\u4B79\u4B7A\u4B7B\u4B7C\u4B7D\u4B7E\u4B7F"+
-        "\u4B80\u4B81\u4B82\u4B83\u4B84\u4B85\u4B86\u4B87"+
-        "\u4B88\u4B89\u4B8A\u4B8B\u4B8C\u4B8D\u4B8E\u4B8F"+
-        "\u4B90\u4B91\u4B92\u4B93\u4B94\u4B95\u4B96\u4B97"+
-        "\u4B98\u4B99\u4B9A\u4B9B\u4B9C\u4B9D\u4B9E\u4B9F"+
-        "\u4BA0\u4BA1\u4BA2\u4BA3\u4BA4\u4BA5\u4BA6\u4BA7"+
-        "\u4BA8\u4BA9\u4BAA\u4BAB\u4BAC\u4BAD\u4BAE\u4BAF"+
-        "\u4BB0\u4BB1\u4BB2\u4BB3\u4BB4\u4BB5\u4BB6\u4BB7"+
-        "\u4BB8\u4BB9\u4BBA\u4BBB\u4BBC\u4BBD\u4BBE\u4BBF"+
-        "\u4BC0\u4BC1\u4BC2\u4BC3\u4BC4\u4BC5\u4BC6\u4BC7"+
-        "\u4BC8\u4BC9\u4BCA\u4BCB\u4BCC\u4BCD\u4BCE\u4BCF"+
-        "\u4BD0\u4BD1\u4BD2\u4BD3\u4BD4\u4BD5\u4BD6\u4BD7"+
-        "\u4BD8\u4BD9\u4BDA\u4BDB\u4BDC\u4BDD\u4BDE\u4BDF"+
-        "\u4BE0\u4BE1\u4BE2\u4BE3\u4BE4\u4BE5\u4BE6\u4BE7"+
-        "\u4BE8\u4BE9\u4BEA\u4BEB\u4BEC\u4BED\u4BEE\u4BEF"+
-        "\u4BF0\u4BF1\u4BF2\u4BF3\u4BF4\u4BF5\u4BF6\u4BF7"+
-        "\u4BF8\u4BF9\u4BFA\u4BFB\u4BFC\u4BFD\u4BFE\u4BFF"+
-        "\u4C00\u4C01\u4C02\u4C03\u4C04\u4C05\u4C06\u4C07"+
-        "\u4C08\u4C09\u4C0A\u4C0B\u4C0C\u4C0D\u4C0E\u4C0F"+
-        "\u4C10\u4C11\u4C12\u4C13\u4C14\u4C15\u4C16\u4C17"+
-        "\u4C18\u4C19\u4C1A\u4C1B\u4C1C\u4C1D\u4C1E\u4C1F"+
-        "\u4C20\u4C21\u4C22\u4C23\u4C24\u4C25\u4C26\u4C27"+
-        "\u4C28\u4C29\u4C2A\u4C2B\u4C2C\u4C2D\u4C2E\u4C2F"+
-        "\u4C30\u4C31\u4C32\u4C33\u4C34\u4C35\u4C36\u4C37"+
-        "\u4C38\u4C39\u4C3A\u4C3B\u4C3C\u4C3D\u4C3E\u4C3F"+
-        "\u4C40\uFE50\u4C41\u4C42\uFE54\u4C43\u4C44\u4C45"+
-        "\uFE57\u4C46\u4C47\uFE58\uFE5D\u4C48\u4C49\u4C4A"+
-        "\u4C4B\u4C4C\u4C4D\u4C4E\u4C4F\u4C50\u4C51\uFE5E"+
-        "\u4C52\u4C53\u4C54\u4C55\u4C56\u4C57\u4C58\u4C59"+
-        "\u4C5A\u4C5B\u4C5C\u4C5D\u4C5E\u4C5F\u4C60\uFE6B"+
-        "\u4C61\u4C62\uFE6E\u4C63\u4C64\u4C65\uFE71\u4C66"+
-        "\u4C67\u4C68\u4C69\uFE73\u4C6A\u4C6B\uFE74\uFE75"+
-        "\u4C6C\u4C6D\u4C6E\uFE79\u4C6F\u4C70\u4C71\u4C72"+
-        "\u4C73\u4C74\u4C75\u4C76\u4C77\u4C78\u4C79\u4C7A"+
-        "\u4C7B\u4C7C\uFE84\u4C7D\u4C7E\u4C7F\u4C80\u4C81"+
-        "\u4C82\u4C83\u4C84\u4C85\u4C86\u4C87\u4C88\u4C89"+
-        "\u4C8A\u4C8B\u4C8C\u4C8D\u4C8E\u4C8F\u4C90\u4C91"+
-        "\u4C92\u4C93\u4C94\u4C95\u4C96\u4C97\u4C98\u4C99"+
-        "\u4C9A\u4C9B\u4C9C\u4C9D\u4C9E\u4C9F\u4CA0\u4CA1"+
-        "\u4CA2\u4CA3\u4CA4\u4CA5\u4CA6\u4CA7\u4CA8\u4CA9"+
-        "\u4CAA\u4CAB\u4CAC\u4CAD\u4CAE\u4CAF\u4CB0\u4CB1"+
-        "\u4CB2\u4CB3\u4CB4\u4CB5\u4CB6\u4CB7\u4CB8\u4CB9"+
-        "\u4CBA\u4CBB\u4CBC\u4CBD\u4CBE\u4CBF\u4CC0\u4CC1"+
-        "\u4CC2\u4CC3\u4CC4\u4CC5\u4CC6\u4CC7\u4CC8\u4CC9"+
-        "\u4CCA\u4CCB\u4CCC\u4CCD\u4CCE\u4CCF\u4CD0\u4CD1"+
-        "\u4CD2\u4CD3\u4CD4\u4CD5\u4CD6\u4CD7\u4CD8\u4CD9"+
-        "\u4CDA\u4CDB\u4CDC\u4CDD\u4CDE\u4CDF\u4CE0\u4CE1"+
-        "\u4CE2\u4CE3\u4CE4\u4CE5\u4CE6\u4CE7\u4CE8\u4CE9"+
-        "\u4CEA\u4CEB\u4CEC\u4CED\u4CEE\u4CEF\u4CF0\u4CF1"+
-        "\u4CF2\u4CF3\u4CF4\u4CF5\u4CF6\u4CF7\u4CF8\u4CF9"+
-        "\u4CFA\u4CFB\u4CFC\u4CFD\u4CFE\u4CFF\u4D00\u4D01"+
-        "\u4D02\u4D03\u4D04\u4D05\u4D06\u4D07\u4D08\u4D09"+
-        "\u4D0A\u4D0B\u4D0C\u4D0D\u4D0E\u4D0F\u4D10\u4D11"+
-        "\u4D12\u4D13\u4D14\u4D15\u4D16\u4D17\u4D18\u4D19"+
-        "\u4D1A\u4D1B\u4D1C\u4D1D\u4D1E\u4D1F\u4D20\u4D21"+
-        "\u4D22\u4D23\u4D24\u4D25\u4D26\u4D27\u4D28\u4D29"+
-        "\u4D2A\u4D2B\u4D2C\u4D2D\u4D2E\u4D2F\u4D30\u4D31"+
-        "\u4D32\u4D33\u4D34\u4D35\u4D36\u4D37\u4D38\u4D39"+
-        "\u4D3A\u4D3B\u4D3C\u4D3D\u4D3E\u4D3F\u4D40\u4D41"+
-        "\u4D42\u4D43\u4D44\u4D45\u4D46\u4D47\u4D48\u4D49"+
-        "\u4D4A\u4D4B\u4D4C\u4D4D\u4D4E\u4D4F\u4D50\u4D51"+
-        "\u4D52\u4D53\u4D54\u4D55\u4D56\u4D57\u4D58\u4D59"+
-        "\u4D5A\u4D5B\u4D5C\u4D5D\u4D5E\u4D5F\u4D60\u4D61"+
-        "\u4D62\u4D63\u4D64\u4D65\u4D66\u4D67\u4D68\u4D69"+
-        "\u4D6A\u4D6B\u4D6C\u4D6D\u4D6E\u4D6F\u4D70\u4D71"+
-        "\u4D72\u4D73\u4D74\u4D75\u4D76\u4D77\u4D78\u4D79"+
-        "\u4D7A\u4D7B\u4D7C\u4D7D\u4D7E\u4D7F\u4D80\u4D81"+
-        "\u4D82\u4D83\u4D84\u4D85\u4D86\u4D87\u4D88\u4D89"+
-        "\u4D8A\u4D8B\u4D8C\u4D8D\u4D8E\u4D8F\u4D90\u4D91"+
-        "\u4D92\u4D93\u4D94\u4D95\u4D96\u4D97\u4D98\u4D99"+
-        "\u4D9A\u4D9B\u4D9C\u4D9D\u4D9E\u4D9F\u4DA0\u4DA1"+
-        "\uA98A\uA98B\uA98C\uA98D\uA98E\uA98F\uA990\uA991"+
-        "\uA992\uA993\uA994\uA995\u4DA2\u4DA3\u4DA4\u4DA5";
-
-    private final static String innerEncoderIndex3=
-        "\uA1A1\uA1A2\uA1A3\uA1A8\u4DA6\uA1A9\uA965\uA996"+
-        "\uA1B4\uA1B5\uA1B6\uA1B7\uA1B8\uA1B9\uA1BA\uA1BB"+
-        "\uA1BE\uA1BF\uA893\uA1FE\uA1B2\uA1B3\uA1BC\uA1BD"+
-        "\u4DA7\u4DA8\u4DA9\u4DAA\u4DAB\uA894\uA895\u4DAC"+
-        "\u4DAD\uA940\uA941\uA942\uA943\uA944\uA945\uA946"+
-        "\uA947\uA948\u4DAE\u4DAF\u4DB0\u4DB1\u4DB2\u4DB3"+
-        "\u4DB4\u4DB5\u4DB6\u4DB7\u4DB8\u4DB9\u4DBA\u4DBB"+
-        "\u4DBC\u4DBD\u4DBE\u4DBF\u4DC0\u4DC1\uA989\u4DC2"+
-        "\u4DC3\uA4A1\uA4A2\uA4A3\uA4A4\uA4A5\uA4A6\uA4A7"+
-        "\uA4A8\uA4A9\uA4AA\uA4AB\uA4AC\uA4AD\uA4AE\uA4AF"+
-        "\uA4B0\uA4B1\uA4B2\uA4B3\uA4B4\uA4B5\uA4B6\uA4B7"+
-        "\uA4B8\uA4B9\uA4BA\uA4BB\uA4BC\uA4BD\uA4BE\uA4BF"+
-        "\uA4C0\uA4C1\uA4C2\uA4C3\uA4C4\uA4C5\uA4C6\uA4C7"+
-        "\uA4C8\uA4C9\uA4CA\uA4CB\uA4CC\uA4CD\uA4CE\uA4CF"+
-        "\uA4D0\uA4D1\uA4D2\uA4D3\uA4D4\uA4D5\uA4D6\uA4D7"+
-        "\uA4D8\uA4D9\uA4DA\uA4DB\uA4DC\uA4DD\uA4DE\uA4DF"+
-        "\uA4E0\uA4E1\uA4E2\uA4E3\uA4E4\uA4E5\uA4E6\uA4E7"+
-        "\uA4E8\uA4E9\uA4EA\uA4EB\uA4EC\uA4ED\uA4EE\uA4EF"+
-        "\uA4F0\uA4F1\uA4F2\uA4F3\u4DC4\u4DC5\u4DC6\u4DC7"+
-        "\u4DC8\u4DC9\u4DCA\uA961\uA962\uA966\uA967\u4DCB"+
-        "\u4DCC\uA5A1\uA5A2\uA5A3\uA5A4\uA5A5\uA5A6\uA5A7"+
-        "\uA5A8\uA5A9\uA5AA\uA5AB\uA5AC\uA5AD\uA5AE\uA5AF"+
-        "\uA5B0\uA5B1\uA5B2\uA5B3\uA5B4\uA5B5\uA5B6\uA5B7"+
-        "\uA5B8\uA5B9\uA5BA\uA5BB\uA5BC\uA5BD\uA5BE\uA5BF"+
-        "\uA5C0\uA5C1\uA5C2\uA5C3\uA5C4\uA5C5\uA5C6\uA5C7"+
-        "\uA5C8\uA5C9\uA5CA\uA5CB\uA5CC\uA5CD\uA5CE\uA5CF"+
-        "\uA5D0\uA5D1\uA5D2\uA5D3\uA5D4\uA5D5\uA5D6\uA5D7"+
-        "\uA5D8\uA5D9\uA5DA\uA5DB\uA5DC\uA5DD\uA5DE\uA5DF"+
-        "\uA5E0\uA5E1\uA5E2\uA5E3\uA5E4\uA5E5\uA5E6\uA5E7"+
-        "\uA5E8\uA5E9\uA5EA\uA5EB\uA5EC\uA5ED\uA5EE\uA5EF"+
-        "\uA5F0\uA5F1\uA5F2\uA5F3\uA5F4\uA5F5\uA5F6\u4DCD"+
-        "\u4DCE\u4DCF\u4DD0\u4DD1\uA960\uA963\uA964\u4DD2"+
-        "\u4DD3\u4DD4\u4DD5\u4DD6\u4DD7\uA8C5\uA8C6\uA8C7"+
-        "\uA8C8\uA8C9\uA8CA\uA8CB\uA8CC\uA8CD\uA8CE\uA8CF"+
-        "\uA8D0\uA8D1\uA8D2\uA8D3\uA8D4\uA8D5\uA8D6\uA8D7"+
-        "\uA8D8\uA8D9\uA8DA\uA8DB\uA8DC\uA8DD\uA8DE\uA8DF"+
-        "\uA8E0\uA8E1\uA8E2\uA8E3\uA8E4\uA8E5\uA8E6\uA8E7"+
-        "\uA8E8\uA8E9\u4DD8\u4DD9\u4DDA\u4DDB\u4DDC\u4DDD"+
-        "\u4DDE\u4DDF\u4DE0\u4DE1\u4DE2\u4DE3\u4DE4\u4DE5"+
-        "\u4DE6\u4DE7\u4DE8\u4DE9\u4DEA\u4DEB\u4DEC\u4DED"+
-        "\u4DEE\u4DEF\u4DF0\u4DF1\u4DF2\u4DF3\u4DF4\u4DF5"+
-        "\u4DF6\u4DF7\u4DF8\u4DF9\u4DFA\u4DFB\u4DFC\u4DFD"+
-        "\u4DFE\u4DFF\u4E00\u4E01\u4E02\u4E03\u4E04\u4E05"+
-        "\u4E06\u4E07\u4E08\u4E09\u4E0A\u4E0B\u4E0C\u4E0D"+
-        "\u4E0E\u4E0F\u4E10\u4E11\u4E12\u4E13\u4E14\u4E15"+
-        "\u4E16\u4E17\u4E18\u4E19\u4E1A\u4E1B\u4E1C\u4E1D"+
-        "\u4E1E\u4E1F\u4E20\u4E21\u4E22\u4E23\u4E24\u4E25"+
-        "\u4E26\u4E27\u4E28\u4E29\u4E2A\u4E2B\u4E2C\u4E2D"+
-        "\u4E2E\u4E2F\u4E30\u4E31\u4E32\u4E33\u4E34\u4E35"+
-        "\u4E36\u4E37\u4E38\u4E39\u4E3A\u4E3B\u4E3C\u4E3D"+
-        "\u4E3E\u4E3F\u4E40\u4E41\u4E42\u4E43\u4E44\u4E45"+
-        "\u4E46\u4E47\u4E48\u4E49\u4E4A\u4E4B\u4E4C\u4E4D"+
-        "\u4E4E\u4E4F\u4E50\u4E51\u4E52\u4E53\u4E54\u4E55"+
-        "\u4E56\u4E57\u4E58\u4E59\u4E5A\u4E5B\u4E5C\u4E5D"+
-        "\u4E5E\u4E5F\u4E60\u4E61\u4E62\u4E63\u4E64\u4E65"+
-        "\u4E66\u4E67\u4E68\u4E69\u4E6A\u4E6B\u4E6C\u4E6D"+
-        "\u4E6E\u4E6F\u4E70\u4E71\u4E72\u4E73\u4E74\u4E75"+
-        "\u4E76\u4E77\u4E78\u4E79\u4E7A\u4E7B\u4E7C\u4E7D"+
-        "\u4E7E\u4E7F\u4E80\u4E81\u4E82\u4E83\u4E84\u4E85"+
-        "\u4E86\u4E87\u4E88\u4E89\u4E8A\u4E8B\u4E8C\u4E8D"+
-        "\u4E8E\u4E8F\u4E90\u4E91\u4E92\u4E93\u4E94\u4E95"+
-        "\u4E96\u4E97\u4E98\u4E99\u4E9A\u4E9B\u4E9C\u4E9D"+
-        "\u4E9E\u4E9F\u4EA0\u4EA1\u4EA2\u4EA3\u4EA4\u4EA5"+
-        "\u4EA6\u4EA7\u4EA8\u4EA9\u4EAA\u4EAB\u4EAC\u4EAD"+
-        "\u4EAE\u4EAF\u4EB0\u4EB1\u4EB2\u4EB3\u4EB4\u4EB5"+
-        "\u4EB6\u4EB7\u4EB8\u4EB9\u4EBA\u4EBB\u4EBC\u4EBD"+
-        "\u4EBE\u4EBF\u4EC0\u4EC1\u4EC2\u4EC3\u4EC4\u4EC5"+
-        "\u4EC6\u4EC7\u4EC8\u4EC9\u4ECA\u4ECB\u4ECC\u4ECD"+
-        "\uA2E5\uA2E6\uA2E7\uA2E8\uA2E9\uA2EA\uA2EB\uA2EC"+
-        "\uA2ED\uA2EE\u4ECE\u4ECF\u4ED0\u4ED1\u4ED2\u4ED3"+
-        "\u4ED4\uA95A\u4ED5\u4ED6\u4ED7\u4ED8\u4ED9\u4EDA"+
-        "\u4EDB\u4EDC\u4EDD\u4EDE\u4EDF\u4EE0\u4EE1\u4EE2"+
-        "\u4EE3\u4EE4\u4EE5\u4EE6\u4EE7\u4EE8\u4EE9\u4EEA"+
-        "\u4EEB\u4EEC\u4EED\u4EEE\u4EEF\u4EF0\u4EF1\u4EF2"+
-        "\u4EF3\u4EF4\u4EF5\u4EF6\u4EF7\u4EF8\u4EF9\u4EFA"+
-        "\u4EFB\u4EFC\u4EFD\u4EFE\u4EFF\u4F00\u4F01\u4F02"+
-        "\u4F03\u4F04\u4F05\u4F06\u4F07\u4F08\u4F09\u4F0A"+
-        "\u4F0B\u4F0C\u4F0D\u4F0E\u4F0F\u4F10\u4F11\u4F12"+
-        "\u4F13\u4F14\u4F15\u4F16\u4F17\u4F18\u4F19\u4F1A"+
-        "\u4F1B\u4F1C\u4F1D\u4F1E\u4F1F\u4F20\u4F21\u4F22"+
-        "\u4F23\u4F24\u4F25\u4F26\u4F27\u4F28\u4F29\u4F2A"+
-        "\u4F2B\u4F2C\u4F2D\u4F2E\u4F2F\u4F30\u4F31\u4F32"+
-        "\u4F33\u4F34\u4F35\u4F36\u4F37\u4F38\u4F39\u4F3A"+
-        "\u4F3B\u4F3C\u4F3D\u4F3E\u4F3F\u4F40\u4F41\u4F42"+
-        "\u4F43\u4F44\u4F45\uA949\u4F46\u4F47\u4F48\u4F49"+
-        "\u4F4A\u4F4B\u4F4C\u4F4D\u4F4E\u4F4F\u4F50\u4F51"+
-        "\u4F52\u4F53\u4F54\u4F55\u4F56\u4F57\u4F58\u4F59"+
-        "\u4F5A\u4F5B\u4F5C\u4F5D\u4F5E\u4F5F\u4F60\u4F61"+
-        "\u4F62\u4F63\u4F64\u4F65\u4F66\u4F67\u4F68\u4F69"+
-        "\u4F6A\u4F6B\u4F6C\u4F6D\u4F6E\u4F6F\u4F70\u4F71"+
-        "\u4F72\u4F73\u4F74\u4F75\u4F76\u4F77\u4F78\u4F79"+
-        "\u4F7A\u4F7B\u4F7C\u4F7D\u4F7E\u4F7F\u4F80\u4F81"+
-        "\u4F82\u4F83\u4F84\u4F85\u4F86\u4F87\u4F88\u4F89"+
-        "\u4F8A\u4F8B\u4F8C\u4F8D\u4F8E\u4F8F\u4F90\u4F91"+
-        "\u4F92\u4F93\u4F94\u4F95\u4F96\u4F97\u4F98\u4F99"+
-        "\u4F9A\u4F9B\u4F9C\u4F9D\u4F9E\u4F9F\u4FA0\u4FA1"+
-        "\u4FA2\u4FA3\u4FA4\u4FA5\u4FA6\u4FA7\u4FA8\u4FA9"+
-        "\u4FAA\u4FAB\u4FAC\u4FAD\u4FAE\u4FAF\u4FB0\u4FB1"+
-        "\u4FB2\u4FB3\u4FB4\u4FB5\u4FB6\u4FB7\u4FB8\u4FB9"+
-        "\u4FBA\u4FBB\u4FBC\u4FBD\u4FBE\u4FBF\u4FC0\u4FC1"+
-        "\u4FC2\u4FC3\u4FC4\u4FC5\u4FC6\u4FC7\u4FC8\u4FC9"+
-        "\u4FCA\u4FCB\u4FCC\u4FCD\u4FCE\u4FCF\u4FD0\u4FD1"+
-        "\u4FD2\u4FD3\u4FD4\u4FD5\u4FD6\u4FD7\u4FD8\u4FD9"+
-        "\u4FDA\u4FDB\u4FDC\u4FDD\u4FDE\u4FDF\u4FE0\u4FE1"+
-        "\u4FE2\u4FE3\u4FE4\u4FE5\u4FE6\u4FE7\u4FE8\u4FE9"+
-        "\u4FEA\u4FEB\u4FEC\u4FED\u4FEE\u4FEF\u4FF0\u4FF1"+
-        "\u4FF2\u4FF3\u4FF4\u4FF5\u4FF6\u4FF7\u4FF8\u4FF9"+
-        "\u4FFA\u4FFB\u4FFC\u4FFD\u4FFE\u4FFF\u5000\u5001"+
-        "\u5002\u5003\u5004\u5005\u5006\u5007\u5008\u5009"+
-        "\u500A\u500B\u500C\u500D\u500E\u500F\u5010\u5011"+
-        "\u5012\u5013\u5014\u5015\u5016\u5017\u5018\u5019"+
-        "\u501A\u501B\u501C\u501D\u501E\u501F\u5020\u5021"+
-        "\u5022\u5023\u5024\u5025\u5026\u5027\u5028\u5029"+
-        "\u502A\u502B\u502C\u502D\u502E\u502F\uA94A\uA94B"+
-        "\u5030\u5031\u5032\u5033\u5034\u5035\u5036\u5037"+
-        "\u5038\u5039\u503A\u503B\uA94C\uA94D\uA94E\u503C"+
-        "\u503D\uA94F\u503E\u503F\u5040\u5041\u5042\u5043"+
-        "\u5044\u5045\u5046\u5047\u5048\u5049\u504A\u504B"+
-        "\u504C\u504D\u504E\u504F\u5050\u5051\u5052\u5053"+
-        "\u5054\u5055\u5056\u5057\u5058\u5059\u505A\u505B"+
-        "\u505C\u505D\u505E\u505F\uA950\u5060\u5061\u5062"+
-        "\u5063\u5064\u5065\u5066\u5067\u5068\uA951\u5069"+
-        "\u506A\uA952\uA953\u506B\u506C\uA954\u506D\u506E"+
-        "\u506F\u5070\u5071\u5072\u5073\u5074\u5075\u5076"+
-        "\u5077\u5078\u5079\u507A\u507B\u507C\u507D\u507E"+
-        "\u507F\u5080\u5081\u5082\u5083\u5084\u5085\u5086"+
-        "\u5087\u5088\u5089\u508A\u508B\u508C\u508D\u508E"+
-        "\u508F\u5090\u5091\u5092\u5093\u5094\u5095\u5096"+
-        "\u5097\u5098\u5099\u509A\u509B\u509C\u509D\u509E"+
-        "\u509F\u50A0\u50A1\u50A2\u50A3\u50A4\u50A5\u50A6"+
-        "\u50A7\u50A8\u50A9\u50AA\u50AB\u50AC\u50AD\u50AE"+
-        "\u50AF\u50B0\u50B1\u50B2\u50B3\u50B4\u50B5\u50B6"+
-        "\u50B7\u50B8\u50B9\u50BA\u50BB\u50BC\u50BD\u50BE"+
-        "\u50BF\u50C0\u50C1\u50C2\u50C3\u50C4\u50C5\u50C6"+
-        "\u50C7\u50C8\u50C9\u50CA\u50CB\u50CC\u50CD\u50CE"+
-        "\u50CF\u50D0\u50D1\u50D2\u50D3\u50D4\u50D5\u50D6"+
-        "\u50D7\u50D8\u50D9\u50DA\u50DB\u50DC\u50DD\uFE56"+
-        "\u50DE\u50DF\u50E0\u50E1\u50E2\u50E3\u50E4\u50E5"+
-        "\u50E6\u50E7\u50E8\u50E9\u50EA\u50EB\u50EC\u50ED"+
-        "\u50EE\u50EF\u50F0\u50F1\u50F2\u50F3\u50F4\u50F5"+
-        "\u50F6\u50F7\u50F8\u50F9\u50FA\u50FB\u50FC\u50FD"+
-        "\u50FE\u50FF\u5100\u5101\u5102\u5103\u5104\u5105"+
-        "\u5106\u5107\u5108\uFE55\u5109\u510A\u510B\u510C"+
-        "\u510D\u510E\u510F\u5110\u5111\u5112\u5113\u5114"+
-        "\u5115\u5116\u5117\u5118\u5119\u511A\u511B\u511C"+
-        "\u511D\u511E\u511F\u5120\u5121\u5122\u5123\u5124"+
-        "\u5125\u5126\u5127\u5128\u5129\u512A\u512B\u512C"+
-        "\u512D\u512E\u512F\u5130\u5131\u5132\u5133\u5134"+
-        "\u5135\u5136\u5137\u5138\u5139\u513A\u513B\u513C"+
-        "\u513D\u513E\u513F\u5140\u5141\u5142\u5143\u5144"+
-        "\u5145\u5146\u5147\u5148\u5149\u514A\u514B\u514C"+
-        "\u514D\u514E\u514F\u5150\u5151\u5152\u5153\u5154"+
-        "\u5155\u5156\u5157\u5158\u5159\u515A\u515B\u515C"+
-        "\u515D\u515E\u515F\u5160\u5161\u5162\u5163\u5164"+
-        "\u5165\u5166\u5167\u5168\u5169\u516A\u516B\u516C"+
-        "\u516D\u516E\u516F\u5170\u5171\u5172\u5173\u5174"+
-        "\u5175\u5176\u5177\u5178\u5179\u517A\u517B\u517C"+
-        "\u517D\u517E\u517F\u5180\u5181\u5182\u5183\u5184"+
-        "\u5185\u5186\u5187\u5188\u5189\u518A\u518B\u518C"+
-        "\u518D\u518E\u518F\u5190\u5191\u5192\u5193\u5194"+
-        "\u5195\u5196\u5197\u5198\u5199\u519A\u519B\u519C"+
-        "\u519D\u519E\u519F\u51A0\u51A1\u51A2\u51A3\u51A4"+
-        "\u51A5\u51A6\u51A7\u51A8\u51A9\u51AA\u51AB\u51AC"+
-        "\u51AD\u51AE\u51AF\u51B0\u51B1\u51B2\u51B3\u51B4"+
-        "\u51B5\u51B6\u51B7\u51B8\u51B9\u51BA\u51BB\u51BC"+
-        "\u51BD\u51BE\u51BF\u51C0\u51C1\u51C2\u51C3\u51C4"+
-        "\u51C5\u51C6\u51C7\u51C8\u51C9\u51CA\u51CB\u51CC"+
-        "\u51CD\u51CE\u51CF\u51D0\u51D1\u51D2\u51D3\u51D4"+
-        "\u51D5\u51D6\u51D7\u51D8\u51D9\u51DA\u51DB\u51DC"+
-        "\u51DD\u51DE\u51DF\u51E0\u51E1\u51E2\u51E3\u51E4"+
-        "\u51E5\u51E6\u51E7\u51E8\u51E9\u51EA\u51EB\u51EC"+
-        "\u51ED\u51EE\u51EF\u51F0\u51F1\u51F2\u51F3\u51F4"+
-        "\u51F5\u51F6\u51F7\u51F8\u51F9\u51FA\u51FB\u51FC"+
-        "\u51FD\u51FE\u51FF\u5200\u5201\u5202\u5203\u5204"+
-        "\u5205\u5206\u5207\u5208\u5209\u520A\u520B\u520C"+
-        "\u520D\u520E\u520F\u5210\u5211\u5212\u5213\u5214"+
-        "\u5215\u5216\u5217\u5218\u5219\u521A\u521B\u521C"+
-        "\u521D\u521E\u521F\u5220\u5221\u5222\u5223\u5224"+
-        "\u5225\u5226\u5227\u5228\u5229\u522A\u522B\u522C"+
-        "\u522D\u522E\u522F\u5230\u5231\u5232\uFE5A\u5233"+
-        "\u5234\u5235\u5236\u5237\u5238\u5239\u523A\u523B"+
-        "\u523C\u523D\u523E\u523F\u5240\u5241\u5242\u5243"+
-        "\u5244\u5245\u5246\u5247\u5248\u5249\u524A\u524B"+
-        "\u524C\u524D\u524E\u524F\u5250\u5251\u5252\u5253"+
-        "\u5254\u5255\u5256\u5257\u5258\u5259\u525A\u525B"+
-        "\u525C\u525D\u525E\u525F\u5260\u5261\u5262\u5263"+
-        "\u5264\u5265\u5266\u5267\u5268\u5269\u526A\u526B"+
-        "\u526C\u526D\u526E\u526F\u5270\u5271\u5272\u5273"+
-        "\u5274\u5275\u5276\u5277\u5278\u5279\u527A\u527B"+
-        "\u527C\u527D\u527E\u527F\u5280\u5281\u5282\u5283"+
-        "\u5284\u5285\u5286\u5287\u5288\u5289\u528A\u528B"+
-        "\u528C\u528D\u528E\u528F\u5290\u5291\u5292\u5293"+
-        "\u5294\u5295\u5296\u5297\u5298\u5299\u529A\u529B"+
-        "\u529C\u529D\u529E\u529F\u52A0\u52A1\uFE5C\u52A2"+
-        "\u52A3\u52A4\u52A5\u52A6\u52A7\u52A8\u52A9\u52AA"+
-        "\u52AB\u52AC\uFE5B\u52AD\u52AE\u52AF\u52B0\u52B1"+
-        "\u52B2\u52B3\u52B4\u52B5\u52B6\u52B7\u52B8\u52B9"+
-        "\u52BA\u52BB\u52BC\u52BD\u52BE\u52BF\u52C0\u52C1"+
-        "\u52C2\u52C3\u52C4\u52C5\u52C6\u52C7\u52C8\u52C9"+
-        "\u52CA\u52CB\u52CC\u52CD\u52CE\u52CF\u52D0\u52D1"+
-        "\u52D2\u52D3\u52D4\u52D5\u52D6\u52D7\u52D8\u52D9"+
-        "\u52DA\u52DB\u52DC\u52DD\u52DE\u52DF\u52E0\u52E1"+
-        "\u52E2\u52E3\u52E4\u52E5\u52E6\u52E7\u52E8\u52E9"+
-        "\u52EA\u52EB\u52EC\u52ED\u52EE\u52EF\u52F0\u52F1"+
-        "\u52F2\u52F3\u52F4\u52F5\u52F6\u52F7\u52F8\u52F9"+
-        "\u52FA\u52FB\u52FC\u52FD\u52FE\u52FF\u5300\u5301"+
-        "\u5302\u5303\u5304\u5305\u5306\u5307\u5308\u5309"+
-        "\u530A\u530B\u530C\u530D\u530E\u530F\u5310\u5311"+
-        "\u5312\u5313\u5314\u5315\u5316\u5317\u5318\u5319"+
-        "\u531A\u531B\u531C\u531D\u531E\u531F\u5320\u5321"+
-        "\u5322\u5323\u5324\u5325\u5326\u5327\u5328\u5329"+
-        "\u532A\u532B\u532C\u532D\u532E\u532F\u5330\u5331"+
-        "\u5332\u5333\u5334\u5335\u5336\u5337\u5338\u5339"+
-        "\u533A\u533B\u533C\u533D\u533E\u533F\u5340\u5341"+
-        "\u5342\u5343\u5344\u5345\u5346\u5347\u5348\u5349"+
-        "\u534A\u534B\u534C\u534D\u534E\u534F\u5350\u5351"+
-        "\u5352\u5353\u5354\u5355\u5356\u5357\u5358\u5359"+
-        "\u535A\u535B\u535C\u535D\u535E\u535F\u5360\u5361"+
-        "\u5362\u5363\u5364\u5365\u5366\u5367\u5368\u5369"+
-        "\u536A\u536B\u536C\u536D\u536E\u536F\u5370\u5371"+
-        "\u5372\u5373\u5374\u5375\u5376\u5377\u5378\u5379"+
-        "\u537A\u537B\u537C\u537D\u537E\u537F\u5380\u5381"+
-        "\u5382\u5383\u5384\u5385\u5386\u5387\u5388\u5389"+
-        "\u538A\u538B\u538C\u538D\u538E\u538F\u5390\u5391"+
-        "\u5392\u5393\u5394\u5395\u5396\u5397\u5398\u5399"+
-        "\u539A\u539B\u539C\u539D\u539E\u539F\u53A0\u53A1"+
-        "\u53A2\u53A3\u53A4\u53A5\u53A6\u53A7\u53A8\u53A9"+
-        "\u53AA\u53AB\u53AC\u53AD\u53AE\u53AF\u53B0\u53B1"+
-        "\u53B2\u53B3\u53B4\u53B5\u53B6\u53B7\u53B8\u53B9"+
-        "\u53BA\u53BB\u53BC\u53BD\u53BE\u53BF\u53C0\u53C1"+
-        "\u53C2\u53C3\u53C4\u53C5\u53C6\u53C7\u53C8\u53C9"+
-        "\u53CA\u53CB\u53CC\u53CD\u53CE\u53CF\u53D0\u53D1"+
-        "\u53D2\u53D3\u53D4\u53D5\u53D6\u53D7\u53D8\u53D9"+
-        "\u53DA\u53DB\u53DC\u53DD\u53DE\u53DF\u53E0\u53E1"+
-        "\u53E2\u53E3\u53E4\u53E5\u53E6\u53E7\u53E8\u53E9"+
-        "\u53EA\u53EB\u53EC\u53ED\u53EE\u53EF\u53F0\u53F1"+
-        "\u53F2\u53F3\u53F4\u53F5\u53F6\u53F7\u53F8\u53F9"+
-        "\u53FA\u53FB\u53FC\u53FD\u53FE\u53FF\u5400\u5401"+
-        "\u5402\u5403\u5404\u5405\u5406\u5407\u5408\u5409"+
-        "\u540A\u540B\u540C\u540D\u540E\u540F\u5410\u5411"+
-        "\u5412\u5413\u5414\u5415\u5416\u5417\u5418\u5419"+
-        "\u541A\u541B\u541C\u541D\u541E\u541F\u5420\u5421"+
-        "\u5422\u5423\u5424\u5425\u5426\u5427\u5428\u5429"+
-        "\u542A\u542B\u542C\u542D\u542E\u542F\u5430\u5431"+
-        "\u5432\u5433\u5434\u5435\u5436\u5437\u5438\u5439"+
-        "\u543A\u543B\u543C\u543D\u543E\u543F\u5440\u5441"+
-        "\u5442\u5443\u5444\u5445\u5446\u5447\u5448\u5449"+
-        "\u544A\u544B\u544C\u544D\u544E\u544F\u5450\u5451"+
-        "\u5452\u5453\u5454\u5455\u5456\u5457\u5458\u5459"+
-        "\u545A\u545B\u545C\u545D\u545E\u545F\u5460\u5461"+
-        "\u5462\u5463\u5464\u5465\u5466\u5467\u5468\u5469"+
-        "\u546A\u546B\u546C\u546D\u546E\u546F\u5470\u5471"+
-        "\u5472\u5473\u5474\u5475\u5476\u5477\u5478\u5479"+
-        "\u547A\u547B\u547C\u547D\u547E\u547F\u5480\u5481"+
-        "\u5482\u5483\u5484\u5485\u5486\u5487\u5488\u5489"+
-        "\u548A\u548B\u548C\u548D\u548E\u548F\u5490\u5491"+
-        "\u5492\u5493\u5494\u5495\u5496\u5497\u5498\u5499"+
-        "\u549A\u549B\u549C\u549D\u549E\u549F\u54A0\u54A1"+
-        "\u54A2\u54A3\u54A4\u54A5\u54A6\u54A7\u54A8\u54A9"+
-        "\u54AA\u54AB\u54AC\u54AD\u54AE\u54AF\u54B0\u54B1"+
-        "\u54B2\u54B3\u54B4\u54B5\u54B6\u54B7\u54B8\u54B9"+
-        "\u54BA\u54BB\u54BC\u54BD\u54BE\u54BF\u54C0\u54C1"+
-        "\u54C2\u54C3\u54C4\u54C5\u54C6\u54C7\u54C8\u54C9"+
-        "\u54CA\u54CB\u54CC\u54CD\u54CE\u54CF\u54D0\u54D1"+
-        "\u54D2\u54D3\u54D4\u54D5\u54D6\u54D7\u54D8\u54D9"+
-        "\u54DA\u54DB\u54DC\u54DD\u54DE\u54DF\u54E0\u54E1"+
-        "\u54E2\u54E3\u54E4\u54E5\u54E6\u54E7\u54E8\u54E9"+
-        "\u54EA\u54EB\u54EC\u54ED\u54EE\u54EF\u54F0\u54F1"+
-        "\u54F2\u54F3\u54F4\u54F5\u54F6\u54F7\u54F8\u54F9"+
-        "\u54FA\u54FB\u54FC\u54FD\u54FE\u54FF\u5500\u5501"+
-        "\u5502\u5503\u5504\u5505\u5506\u5507\u5508\u5509"+
-        "\u550A\u550B\u550C\u550D\u550E\u550F\u5510\u5511"+
-        "\u5512\u5513\u5514\u5515\u5516\u5517\u5518\u5519"+
-        "\u551A\u551B\u551C\u551D\u551E\u551F\u5520\u5521"+
-        "\u5522\u5523\u5524\u5525\u5526\u5527\u5528\u5529"+
-        "\u552A\u552B\u552C\u552D\u552E\u552F\u5530\u5531"+
-        "\u5532\u5533\u5534\u5535\u5536\u5537\u5538\u5539"+
-        "\u553A\u553B\u553C\u553D\u553E\u553F\u5540\u5541"+
-        "\u5542\u5543\u5544\u5545\u5546\u5547\u5548\u5549"+
-        "\u554A\u554B\u554C\u554D\u554E\u554F\u5550\u5551"+
-        "\u5552\u5553\u5554\u5555\u5556\u5557\u5558\u5559"+
-        "\u555A\u555B\u555C\u555D\u555E\u555F\u5560\u5561"+
-        "\u5562\u5563\u5564\u5565\u5566\u5567\u5568\u5569"+
-        "\u556A\u556B\u556C\u556D\u556E\u556F\u5570\u5571"+
-        "\u5572\u5573\u5574\u5575\u5576\u5577\u5578\u5579"+
-        "\u557A\u557B\u557C\u557D\u557E\u557F\u5580\u5581"+
-        "\u5582\u5583\u5584\u5585\u5586\u5587\u5588\u5589"+
-        "\u558A\u558B\u558C\u558D\u558E\u558F\u5590\u5591"+
-        "\u5592\u5593\u5594\u5595\u5596\u5597\u5598\u5599"+
-        "\u559A\u559B\u559C\u559D\u559E\u559F\u55A0\u55A1"+
-        "\u55A2\u55A3\u55A4\u55A5\u55A6\u55A7\u55A8\u55A9"+
-        "\uFE60\u55AA\u55AB\u55AC\u55AD\u55AE\u55AF\u55B0"+
-        "\u55B1\u55B2\u55B3\u55B4\u55B5\u55B6\u55B7\u55B8"+
-        "\u55B9\u55BA\u55BB\u55BC\u55BD\u55BE\u55BF\u55C0"+
-        "\u55C1\u55C2\u55C3\u55C4\u55C5\u55C6\u55C7\u55C8"+
-        "\u55C9\u55CA\u55CB\u55CC\u55CD\u55CE\u55CF\u55D0"+
-        "\u55D1\u55D2\u55D3\u55D4\u55D5\u55D6\u55D7\u55D8"+
-        "\u55D9\u55DA\u55DB\u55DC\u55DD\u55DE\u55DF\u55E0"+
-        "\u55E1\u55E2\u55E3\u55E4\u55E5\u55E6\u55E7\u55E8"+
-        "\u55E9\u55EA\u55EB\u55EC\u55ED\u55EE\u55EF\u55F0"+
-        "\u55F1\u55F2\u55F3\u55F4\u55F5\u55F6\u55F7\u55F8"+
-        "\u55F9\u55FA\u55FB\u55FC\u55FD\u55FE\uFE5F\u55FF"+
-        "\u5600\u5601\u5602\u5603\u5604\u5605\u5606\u5607"+
-        "\u5608\u5609\u560A\u560B\u560C\u560D\u560E\u560F"+
-        "\u5610\u5611\u5612\u5613\u5614\u5615\u5616\u5617"+
-        "\u5618\u5619\u561A\u561B\u561C\u561D\u561E\u561F"+
-        "\u5620\u5621\u5622\u5623\u5624\u5625\u5626\u5627"+
-        "\u5628\u5629\u562A\u562B\u562C\u562D\u562E\u562F"+
-        "\u5630\u5631\u5632\u5633\u5634\u5635\u5636\u5637"+
-        "\u5638\u5639\u563A\u563B\u563C\u563D\u563E\u563F"+
-        "\u5640\u5641\u5642\u5643\u5644\u5645\u5646\u5647"+
-        "\u5648\u5649\u564A\u564B\u564C\u564D\u564E\u564F"+
-        "\u5650\u5651\u5652\u5653\u5654\u5655\u5656\u5657"+
-        "\u5658\u5659\u565A\u565B\u565C\u565D\u565E\uFE62"+
-        "\uFE65\u565F\u5660\u5661\u5662\u5663\u5664\u5665"+
-        "\u5666\u5667\u5668\u5669\u566A\u566B\u566C\uFE63"+
-        "\u566D\u566E\u566F\u5670\u5671\u5672\u5673\u5674"+
-        "\u5675\u5676\u5677\u5678\u5679\u567A\u567B\u567C"+
-        "\u567D\u567E\u567F\u5680\u5681\u5682\u5683\u5684"+
-        "\u5685\u5686\u5687\u5688\u5689\u568A\u568B\u568C"+
-        "\u568D\u568E\u568F\u5690\u5691\u5692\u5693\u5694"+
-        "\u5695\u5696\u5697\u5698\u5699\u569A\u569B\u569C"+
-        "\u569D\u569E\u569F\u56A0\u56A1\u56A2\u56A3\u56A4"+
-        "\u56A5\u56A6\u56A7\u56A8\u56A9\u56AA\u56AB\u56AC"+
-        "\u56AD\u56AE\u56AF\u56B0\u56B1\u56B2\u56B3\u56B4"+
-        "\u56B5\u56B6\u56B7\u56B8\u56B9\u56BA\u56BB\u56BC"+
-        "\u56BD\u56BE\u56BF\u56C0\u56C1\u56C2\u56C3\u56C4"+
-        "\u56C5\u56C6\u56C7\u56C8\u56C9\u56CA\u56CB\u56CC"+
-        "\u56CD\u56CE\u56CF\u56D0\u56D1\u56D2\u56D3\u56D4"+
-        "\u56D5\u56D6\u56D7\u56D8\u56D9\u56DA\u56DB\u56DC"+
-        "\u56DD\u56DE\u56DF\u56E0\u56E1\u56E2\u56E3\u56E4"+
-        "\u56E5\u56E6\u56E7\u56E8\u56E9\u56EA\u56EB\u56EC"+
-        "\u56ED\u56EE\u56EF\u56F0\u56F1\u56F2\u56F3\u56F4"+
-        "\u56F5\u56F6\u56F7\u56F8\u56F9\u56FA\u56FB\u56FC"+
-        "\u56FD\u56FE\u56FF\uFE64\u5700\u5701\u5702\u5703"+
-        "\u5704\u5705\u5706\u5707\u5708\u5709\u570A\u570B"+
-        "\u570C\u570D\u570E\u570F\u5710\u5711\u5712\u5713"+
-        "\u5714\u5715\u5716\u5717\u5718\u5719\u571A\u571B"+
-        "\u571C\u571D\u571E\u571F\u5720\u5721\u5722\u5723"+
-        "\u5724\u5725\u5726\u5727\u5728\u5729\u572A\u572B"+
-        "\u572C\u572D\u572E\u572F\u5730\u5731\u5732\u5733"+
-        "\u5734\u5735\u5736\u5737\u5738\u5739\u573A\u573B"+
-        "\u573C\u573D\u573E\u573F\u5740\u5741\u5742\u5743"+
-        "\u5744\u5745\u5746\u5747\u5748\u5749\u574A\u574B"+
-        "\u574C\u574D\u574E\u574F\u5750\u5751\u5752\u5753"+
-        "\u5754\u5755\u5756\u5757\u5758\u5759\u575A\u575B"+
-        "\u575C\u575D\u575E\u575F\u5760\u5761\u5762\u5763"+
-        "\u5764\u5765\u5766\u5767\u5768\u5769\u576A\u576B"+
-        "\u576C\u576D\u576E\u576F\u5770\u5771\u5772\u5773"+
-        "\u5774\u5775\u5776\u5777\u5778\u5779\u577A\u577B"+
-        "\u577C\u577D\u577E\u577F\u5780\u5781\u5782\u5783"+
-        "\u5784\u5785\u5786\u5787\u5788\u5789\u578A\u578B"+
-        "\u578C\u578D\u578E\u578F\u5790\u5791\u5792\u5793"+
-        "\u5794\u5795\u5796\u5797\u5798\u5799\u579A\u579B"+
-        "\u579C\u579D\u579E\u579F\u57A0\u57A1\u57A2\u57A3"+
-        "\u57A4\u57A5\u57A6\u57A7\u57A8\u57A9\u57AA\u57AB"+
-        "\u57AC\u57AD\u57AE\u57AF\u57B0\u57B1\u57B2\u57B3"+
-        "\u57B4\u57B5\u57B6\u57B7\u57B8\u57B9\u57BA\u57BB"+
-        "\u57BC\u57BD\u57BE\u57BF\u57C0\u57C1\u57C2\u57C3"+
-        "\u57C4\u57C5\u57C6\u57C7\u57C8\u57C9\u57CA\u57CB"+
-        "\u57CC\u57CD\u57CE\u57CF\u57D0\u57D1\u57D2\u57D3"+
-        "\u57D4\u57D5\u57D6\u57D7\u57D8\u57D9\uFE68\u57DA"+
-        "\u57DB\u57DC\u57DD\u57DE\u57DF\u57E0\u57E1\u57E2"+
-        "\u57E3\u57E4\u57E5\u57E6\u57E7\u57E8\u57E9\u57EA"+
-        "\u57EB\u57EC\u57ED\u57EE\u57EF\u57F0\u57F1\u57F2"+
-        "\u57F3\u57F4\u57F5\u57F6\u57F7\u57F8\u57F9\u57FA"+
-        "\u57FB\u57FC\u57FD\u57FE\u57FF\u5800\u5801\u5802"+
-        "\u5803\u5804\u5805\u5806\u5807\u5808\u5809\u580A"+
-        "\u580B\u580C\u580D\u580E\u580F\u5810\u5811\u5812"+
-        "\u5813\u5814\u5815\u5816\u5817\u5818\u5819\u581A"+
-        "\u581B\u581C\u581D\u581E\u581F\u5820\u5821\u5822"+
-        "\u5823\u5824\u5825\u5826\u5827\u5828\u5829\u582A"+
-        "\u582B\u582C\u582D\u582E\u582F\u5830\u5831\u5832"+
-        "\u5833\u5834\u5835\u5836\u5837\u5838\u5839\u583A"+
-        "\u583B\u583C\u583D\u583E\u583F\u5840\u5841\u5842"+
-        "\u5843\u5844\u5845\u5846\u5847\u5848\u5849\u584A"+
-        "\u584B\u584C\u584D\u584E\u584F\u5850\u5851\u5852"+
-        "\u5853\u5854\u5855\u5856\u5857\u5858\u5859\u585A"+
-        "\u585B\u585C\u585D\u585E\u585F\u5860\u5861\u5862"+
-        "\u5863\u5864\u5865\u5866\u5867\u5868\u5869\u586A"+
-        "\u586B\u586C\u586D\u586E\u586F\u5870\u5871\u5872"+
-        "\u5873\u5874\u5875\u5876\u5877\u5878\u5879\u587A"+
-        "\u587B\u587C\u587D\u587E\u587F\u5880\u5881\u5882"+
-        "\u5883\u5884\u5885\u5886\u5887\u5888\u5889\u588A"+
-        "\u588B\u588C\u588D\u588E\u588F\u5890\u5891\u5892"+
-        "\u5893\u5894\u5895\u5896\u5897\u5898\u5899\u589A"+
-        "\u589B\u589C\u589D\u589E\u589F\u58A0\u58A1\u58A2"+
-        "\u58A3\u58A4\u58A5\u58A6\u58A7\u58A8\u58A9\u58AA"+
-        "\u58AB\u58AC\u58AD\u58AE\u58AF\u58B0\u58B1\u58B2"+
-        "\u58B3\u58B4\u58B5\u58B6\u58B7\u58B8\u58B9\u58BA"+
-        "\u58BB\u58BC\u58BD\u58BE\u58BF\u58C0\u58C1\u58C2"+
-        "\u58C3\u58C4\u58C5\u58C6\u58C7\u58C8\u58C9\u58CA"+
-        "\u58CB\u58CC\u58CD\u58CE\u58CF\u58D0\u58D1\u58D2"+
-        "\u58D3\u58D4\u58D5\u58D6\u58D7\u58D8\u58D9\u58DA"+
-        "\u58DB\u58DC\u58DD\u58DE\u58DF\u58E0\u58E1\u58E2"+
-        "\u58E3\u58E4\u58E5\u58E6\u58E7\u58E8\u58E9\u58EA"+
-        "\u58EB\u58EC\u58ED\u58EE\u58EF\u58F0\u58F1\u58F2"+
-        "\u58F3\u58F4\u58F5\u58F6\u58F7\u58F8\uFE69\u58F9"+
-        "\u58FA\u58FB\u58FC\u58FD\u58FE\u58FF\u5900\u5901"+
-        "\u5902\u5903\u5904\u5905\u5906\u5907\u5908\u5909"+
-        "\u590A\u590B\u590C\u590D\u590E\u590F\u5910\u5911"+
-        "\u5912\u5913\u5914\u5915\u5916\u5917\u5918\u5919"+
-        "\u591A\u591B\u591C\u591D\u591E\u591F\u5920\u5921"+
-        "\u5922\u5923\u5924\u5925\u5926\u5927\u5928\u5929"+
-        "\u592A\u592B\u592C\u592D\u592E\u592F\u5930\u5931"+
-        "\u5932\u5933\u5934\u5935\u5936\u5937\u5938\u5939"+
-        "\u593A\u593B\u593C\u593D\u593E\u593F\u5940\u5941"+
-        "\u5942\u5943\u5944\u5945\u5946\u5947\u5948\u5949"+
-        "\u594A\u594B\u594C\u594D\u594E\u594F\u5950\u5951"+
-        "\u5952\u5953\u5954\u5955\u5956\u5957\u5958\u5959"+
-        "\u595A\u595B\u595C\u595D\u595E\u595F\u5960\u5961"+
-        "\u5962\u5963\u5964\u5965\u5966\u5967\u5968\u5969"+
-        "\uFE6A\u596A\u596B\u596C\u596D\u596E\u596F\u5970"+
-        "\u5971\u5972\u5973\u5974\u5975\u5976\u5977\u5978"+
-        "\u5979\u597A\u597B\u597C\u597D\u597E\u597F\u5980"+
-        "\u5981\u5982\u5983\u5984\u5985\u5986\u5987\u5988"+
-        "\u5989\u598A\u598B\u598C\u598D\u598E\u598F\u5990"+
-        "\u5991\u5992\u5993\u5994\u5995\u5996\u5997\u5998"+
-        "\u5999\u599A\u599B\u599C\u599D\u599E\u599F\u59A0"+
-        "\u59A1\u59A2\u59A3\u59A4\u59A5\u59A6\u59A7\u59A8"+
-        "\u59A9\u59AA\u59AB\u59AC\u59AD\u59AE\u59AF\u59B0"+
-        "\u59B1\u59B2\u59B3\u59B4\u59B5\u59B6\u59B7\u59B8"+
-        "\u59B9\u59BA\u59BB\u59BC\u59BD\u59BE\u59BF\u59C0"+
-        "\u59C1\u59C2\u59C3\u59C4\u59C5\u59C6\u59C7\u59C8"+
-        "\u59C9\u59CA\u59CB\u59CC\u59CD\u59CE\u59CF\u59D0"+
-        "\u59D1\u59D2\u59D3\u59D4\u59D5\u59D6\u59D7\u59D8"+
-        "\u59D9\u59DA\u59DB\u59DC\u59DD\u59DE\u59DF\u59E0"+
-        "\u59E1\u59E2\u59E3\u59E4\u59E5\u59E6\u59E7\u59E8"+
-        "\u59E9\u59EA\u59EB\u59EC\u59ED\u59EE\u59EF\u59F0"+
-        "\u59F1\u59F2\u59F3\u59F4\u59F5\u59F6\u59F7\u59F8"+
-        "\u59F9\u59FA\u59FB\u59FC\u59FD\u59FE\u59FF\u5A00"+
-        "\u5A01\u5A02\u5A03\u5A04\u5A05\u5A06\u5A07\u5A08"+
-        "\u5A09\u5A0A\u5A0B\u5A0C\u5A0D\u5A0E\u5A0F\u5A10"+
-        "\u5A11\u5A12\u5A13\u5A14\u5A15\u5A16\u5A17\u5A18"+
-        "\u5A19\u5A1A\u5A1B\u5A1C\u5A1D\u5A1E\u5A1F\u5A20"+
-        "\u5A21\u5A22\u5A23\u5A24\u5A25\u5A26\u5A27\u5A28"+
-        "\u5A29\u5A2A\u5A2B\u5A2C\u5A2D\u5A2E\u5A2F\u5A30"+
-        "\u5A31\u5A32\u5A33\u5A34\u5A35\u5A36\u5A37\u5A38"+
-        "\u5A39\u5A3A\u5A3B\u5A3C\u5A3D\u5A3E\u5A3F\u5A40"+
-        "\u5A41\u5A42\u5A43\u5A44\u5A45\u5A46\u5A47\u5A48"+
-        "\u5A49\u5A4A\u5A4B\u5A4C\u5A4D\u5A4E\u5A4F\u5A50"+
-        "\u5A51\u5A52\u5A53\u5A54\u5A55\u5A56\u5A57\u5A58"+
-        "\u5A59\u5A5A\u5A5B\u5A5C\u5A5D\u5A5E\u5A5F\u5A60"+
-        "\u5A61\u5A62\u5A63\u5A64\u5A65\u5A66\u5A67\u5A68"+
-        "\u5A69\u5A6A\u5A6B\u5A6C\u5A6D\u5A6E\u5A6F\u5A70"+
-        "\u5A71\u5A72\u5A73\u5A74\u5A75\u5A76\u5A77\u5A78"+
-        "\u5A79\u5A7A\u5A7B\u5A7C\u5A7D\u5A7E\u5A7F\u5A80"+
-        "\u5A81\u5A82\u5A83\u5A84\u5A85\u5A86\u5A87\u5A88"+
-        "\u5A89\u5A8A\u5A8B\u5A8C\u5A8D\u5A8E\u5A8F\u5A90"+
-        "\u5A91\u5A92\u5A93\u5A94\u5A95\u5A96\u5A97\u5A98"+
-        "\u5A99\u5A9A\u5A9B\u5A9C\u5A9D\u5A9E\u5A9F\u5AA0"+
-        "\u5AA1\u5AA2\u5AA3\u5AA4\u5AA5\u5AA6\u5AA7\u5AA8"+
-        "\u5AA9\u5AAA\u5AAB\u5AAC\u5AAD\u5AAE\u5AAF\u5AB0"+
-        "\u5AB1\u5AB2\u5AB3\u5AB4\u5AB5\u5AB6\u5AB7\u5AB8"+
-        "\u5AB9\u5ABA\u5ABB\u5ABC\u5ABD\u5ABE\u5ABF\u5AC0"+
-        "\u5AC1\u5AC2\u5AC3\u5AC4\u5AC5\u5AC6\u5AC7\u5AC8"+
-        "\u5AC9\u5ACA\u5ACB\u5ACC\u5ACD\u5ACE\u5ACF\u5AD0"+
-        "\u5AD1\u5AD2\u5AD3\u5AD4\u5AD5\u5AD6\u5AD7\u5AD8"+
-        "\u5AD9\u5ADA\u5ADB\u5ADC\u5ADD\u5ADE\u5ADF\u5AE0"+
-        "\u5AE1\u5AE2\u5AE3\u5AE4\u5AE5\u5AE6\u5AE7\u5AE8"+
-        "\u5AE9\u5AEA\u5AEB\u5AEC\u5AED\u5AEE\u5AEF\u5AF0"+
-        "\u5AF1\u5AF2\u5AF3\u5AF4\u5AF5\u5AF6\u5AF7\u5AF8"+
-        "\u5AF9\u5AFA\u5AFB\u5AFC\u5AFD\u5AFE\u5AFF\u5B00"+
-        "\u5B01\u5B02\u5B03\u5B04\u5B05\u5B06\u5B07\u5B08"+
-        "\u5B09\u5B0A\u5B0B\u5B0C\u5B0D\u5B0E\u5B0F\u5B10"+
-        "\u5B11\u5B12\u5B13\u5B14\u5B15\u5B16\u5B17\u5B18"+
-        "\u5B19\u5B1A\u5B1B\u5B1C\u5B1D\u5B1E\u5B1F\u5B20"+
-        "\u5B21\u5B22\u5B23\u5B24\u5B25\u5B26\u5B27\u5B28"+
-        "\u5B29\u5B2A\u5B2B\u5B2C\u5B2D\u5B2E\u5B2F\u5B30"+
-        "\u5B31\u5B32\u5B33\u5B34\u5B35\u5B36\u5B37\u5B38"+
-        "\u5B39\u5B3A\u5B3B\u5B3C\u5B3D\u5B3E\u5B3F\u5B40"+
-        "\u5B41\u5B42\u5B43\u5B44\u5B45\u5B46\u5B47\u5B48"+
-        "\u5B49\u5B4A\u5B4B\u5B4C\u5B4D\u5B4E\u5B4F\u5B50"+
-        "\u5B51\u5B52\u5B53\u5B54\u5B55\u5B56\u5B57\u5B58"+
-        "\u5B59\u5B5A\u5B5B\u5B5C\u5B5D\u5B5E\u5B5F\u5B60"+
-        "\u5B61\u5B62\u5B63\u5B64\u5B65\u5B66\u5B67\u5B68"+
-        "\u5B69\u5B6A\u5B6B\u5B6C\u5B6D\u5B6E\u5B6F\u5B70"+
-        "\u5B71\u5B72\u5B73\u5B74\u5B75\u5B76\u5B77\u5B78"+
-        "\u5B79\u5B7A\u5B7B\u5B7C\u5B7D\u5B7E\u5B7F\u5B80"+
-        "\u5B81\u5B82\u5B83\u5B84\u5B85\u5B86\u5B87\u5B88"+
-        "\u5B89\u5B8A\u5B8B\u5B8C\u5B8D\u5B8E\u5B8F\u5B90"+
-        "\u5B91\u5B92\u5B93\u5B94\u5B95\u5B96\u5B97\u5B98"+
-        "\u5B99\u5B9A\u5B9B\u5B9C\u5B9D\u5B9E\u5B9F\u5BA0"+
-        "\u5BA1\u5BA2\u5BA3\u5BA4\u5BA5\u5BA6\u5BA7\u5BA8"+
-        "\u5BA9\u5BAA\u5BAB\u5BAC\u5BAD\u5BAE\u5BAF\u5BB0"+
-        "\u5BB1\u5BB2\u5BB3\u5BB4\u5BB5\u5BB6\u5BB7\u5BB8"+
-        "\u5BB9\u5BBA\u5BBB\u5BBC\u5BBD\u5BBE\u5BBF\u5BC0"+
-        "\u5BC1\u5BC2\u5BC3\u5BC4\u5BC5\u5BC6\u5BC7\u5BC8"+
-        "\u5BC9\u5BCA\u5BCB\u5BCC\u5BCD\u5BCE\u5BCF\u5BD0"+
-        "\u5BD1\u5BD2\u5BD3\u5BD4\u5BD5\u5BD6\u5BD7\u5BD8"+
-        "\u5BD9\u5BDA\u5BDB\u5BDC\u5BDD\u5BDE\u5BDF\u5BE0"+
-        "\u5BE1\u5BE2\u5BE3\u5BE4\u5BE5\u5BE6\u5BE7\u5BE8"+
-        "\u5BE9\u5BEA\u5BEB\u5BEC\u5BED\u5BEE\u5BEF\u5BF0"+
-        "\u5BF1\u5BF2\u5BF3\u5BF4\u5BF5\u5BF6\u5BF7\u5BF8"+
-        "\u5BF9\u5BFA\u5BFB\u5BFC\u5BFD\u5BFE\u5BFF\u5C00"+
-        "\u5C01\u5C02\u5C03\u5C04\u5C05\u5C06\u5C07\u5C08"+
-        "\u5C09\u5C0A\u5C0B\u5C0C\u5C0D\u5C0E\u5C0F\u5C10"+
-        "\u5C11\u5C12\u5C13\u5C14\u5C15\u5C16\u5C17\u5C18"+
-        "\u5C19\u5C1A\u5C1B\u5C1C\u5C1D\u5C1E\u5C1F\u5C20"+
-        "\u5C21\u5C22\u5C23\u5C24\u5C25\u5C26\u5C27\u5C28"+
-        "\u5C29\u5C2A\u5C2B\u5C2C\u5C2D\u5C2E\u5C2F\u5C30"+
-        "\u5C31\u5C32\u5C33\u5C34\u5C35\u5C36\u5C37\u5C38"+
-        "\u5C39\u5C3A\u5C3B\u5C3C\u5C3D\u5C3E\u5C3F\u5C40"+
-        "\u5C41\u5C42\u5C43\u5C44\u5C45\u5C46\u5C47\u5C48"+
-        "\u5C49\u5C4A\u5C4B\u5C4C\u5C4D\u5C4E\u5C4F\u5C50"+
-        "\u5C51\u5C52\u5C53\u5C54\u5C55\u5C56\u5C57\u5C58"+
-        "\u5C59\u5C5A\u5C5B\u5C5C\u5C5D\u5C5E\u5C5F\u5C60"+
-        "\u5C61\u5C62\u5C63\u5C64\u5C65\u5C66\u5C67\u5C68"+
-        "\u5C69\u5C6A\u5C6B\u5C6C\u5C6D\u5C6E\u5C6F\u5C70"+
-        "\u5C71\u5C72\u5C73\u5C74\u5C75\u5C76\u5C77\u5C78"+
-        "\u5C79\u5C7A\u5C7B\u5C7C\u5C7D\u5C7E\u5C7F\u5C80"+
-        "\u5C81\u5C82\u5C83\u5C84\u5C85\u5C86\u5C87\u5C88";
-
-    private final static String innerEncoderIndex4=
-        "\u5C89\u5C8A\u5C8B\u5C8C\u5C8D\u5C8E\u5C8F\u5C90"+
-        "\u5C91\u5C92\u5C93\u5C94\u5C95\u5C96\u5C97\u5C98"+
-        "\u5C99\u5C9A\u5C9B\u5C9C\u5C9D\u5C9E\u5C9F\u5CA0"+
-        "\u5CA1\u5CA2\u5CA3\u5CA4\u5CA5\u5CA6\u5CA7\u5CA8"+
-        "\u5CA9\u5CAA\u5CAB\u5CAC\u5CAD\u5CAE\u5CAF\u5CB0"+
-        "\u5CB1\u5CB2\u5CB3\u5CB4\u5CB5\u5CB6\u5CB7\u5CB8"+
-        "\u5CB9\u5CBA\u5CBB\u5CBC\u5CBD\u5CBE\u5CBF\u5CC0"+
-        "\u5CC1\u5CC2\u5CC3\u5CC4\u5CC5\u5CC6\u5CC7\u5CC8"+
-        "\u5CC9\u5CCA\u5CCB\u5CCC\u5CCD\u5CCE\u5CCF\u5CD0"+
-        "\u5CD1\u5CD2\u5CD3\u5CD4\u5CD5\u5CD6\u5CD7\u5CD8"+
-        "\u5CD9\u5CDA\u5CDB\u5CDC\u5CDD\u5CDE\uFE6F\u5CDF"+
-        "\u5CE0\u5CE1\u5CE2\u5CE3\u5CE4\u5CE5\u5CE6\u5CE7"+
-        "\u5CE8\u5CE9\u5CEA\u5CEB\u5CEC\u5CED\u5CEE\u5CEF"+
-        "\u5CF0\u5CF1\u5CF2\u5CF3\u5CF4\u5CF5\u5CF6\u5CF7"+
-        "\u5CF8\u5CF9\u5CFA\u5CFB\u5CFC\u5CFD\u5CFE\u5CFF"+
-        "\u5D00\u5D01\u5D02\u5D03\u5D04\u5D05\u5D06\u5D07"+
-        "\u5D08\u5D09\u5D0A\u5D0B\u5D0C\u5D0D\u5D0E\u5D0F"+
-        "\u5D10\u5D11\u5D12\u5D13\u5D14\u5D15\u5D16\u5D17"+
-        "\u5D18\u5D19\u5D1A\u5D1B\u5D1C\u5D1D\u5D1E\u5D1F"+
-        "\u5D20\u5D21\u5D22\u5D23\u5D24\u5D25\u5D26\u5D27"+
-        "\u5D28\u5D29\u5D2A\u5D2B\u5D2C\u5D2D\u5D2E\u5D2F"+
-        "\u5D30\u5D31\u5D32\u5D33\u5D34\u5D35\u5D36\u5D37"+
-        "\u5D38\u5D39\u5D3A\u5D3B\u5D3C\u5D3D\u5D3E\u5D3F"+
-        "\u5D40\u5D41\u5D42\u5D43\u5D44\u5D45\u5D46\u5D47"+
-        "\u5D48\u5D49\u5D4A\u5D4B\u5D4C\u5D4D\u5D4E\u5D4F"+
-        "\u5D50\u5D51\u5D52\u5D53\u5D54\u5D55\u5D56\u5D57"+
-        "\u5D58\u5D59\u5D5A\u5D5B\u5D5C\u5D5D\u5D5E\u5D5F"+
-        "\u5D60\u5D61\u5D62\u5D63\u5D64\u5D65\u5D66\u5D67"+
-        "\u5D68\u5D69\u5D6A\u5D6B\u5D6C\u5D6D\u5D6E\u5D6F"+
-        "\u5D70\u5D71\u5D72\u5D73\u5D74\u5D75\u5D76\u5D77"+
-        "\u5D78\u5D79\u5D7A\u5D7B\u5D7C\u5D7D\u5D7E\u5D7F"+
-        "\u5D80\u5D81\u5D82\u5D83\u5D84\u5D85\u5D86\u5D87"+
-        "\u5D88\u5D89\u5D8A\u5D8B\u5D8C\u5D8D\u5D8E\u5D8F"+
-        "\u5D90\u5D91\u5D92\u5D93\u5D94\u5D95\u5D96\u5D97"+
-        "\u5D98\u5D99\u5D9A\u5D9B\u5D9C\u5D9D\u5D9E\u5D9F"+
-        "\u5DA0\u5DA1\u5DA2\u5DA3\u5DA4\u5DA5\u5DA6\u5DA7"+
-        "\u5DA8\u5DA9\u5DAA\u5DAB\u5DAC\u5DAD\u5DAE\u5DAF"+
-        "\u5DB0\u5DB1\u5DB2\u5DB3\u5DB4\u5DB5\u5DB6\u5DB7"+
-        "\u5DB8\u5DB9\u5DBA\u5DBB\u5DBC\u5DBD\u5DBE\u5DBF"+
-        "\u5DC0\u5DC1\u5DC2\u5DC3\u5DC4\u5DC5\u5DC6\u5DC7"+
-        "\u5DC8\u5DC9\u5DCA\u5DCB\u5DCC\u5DCD\u5DCE\u5DCF"+
-        "\u5DD0\u5DD1\u5DD2\u5DD3\u5DD4\u5DD5\u5DD6\u5DD7"+
-        "\u5DD8\u5DD9\u5DDA\u5DDB\u5DDC\u5DDD\u5DDE\u5DDF"+
-        "\u5DE0\u5DE1\u5DE2\u5DE3\u5DE4\u5DE5\u5DE6\uFE70"+
-        "\u5DE7\u5DE8\u5DE9\u5DEA\u5DEB\u5DEC\u5DED\u5DEE"+
-        "\u5DEF\u5DF0\u5DF1\u5DF2\u5DF3\u5DF4\u5DF5\u5DF6"+
-        "\u5DF7\u5DF8\u5DF9\u5DFA\u5DFB\u5DFC\u5DFD\u5DFE"+
-        "\u5DFF\u5E00\u5E01\u5E02\u5E03\u5E04\u5E05\u5E06"+
-        "\u5E07\u5E08\u5E09\u5E0A\u5E0B\u5E0C\u5E0D\u5E0E"+
-        "\u5E0F\u5E10\u5E11\u5E12\u5E13\u5E14\u5E15\u5E16"+
-        "\u5E17\u5E18\u5E19\u5E1A\u5E1B\u5E1C\u5E1D\u5E1E"+
-        "\u5E1F\u5E20\u5E21\u5E22\u5E23\u5E24\u5E25\u5E26"+
-        "\u5E27\u5E28\u5E29\u5E2A\u5E2B\u5E2C\u5E2D\u5E2E"+
-        "\u5E2F\u5E30\u5E31\u5E32\u5E33\u5E34\u5E35\u5E36"+
-        "\u5E37\u5E38\u5E39\u5E3A\u5E3B\u5E3C\u5E3D\u5E3E"+
-        "\u5E3F\u5E40\u5E41\u5E42\u5E43\u5E44\u5E45\u5E46"+
-        "\u5E47\u5E48\u5E49\u5E4A\u5E4B\u5E4C\u5E4D\u5E4E"+
-        "\u5E4F\u5E50\u5E51\u5E52\u5E53\u5E54\u5E55\u5E56"+
-        "\u5E57\u5E58\u5E59\u5E5A\u5E5B\u5E5C\u5E5D\u5E5E"+
-        "\u5E5F\u5E60\u5E61\u5E62\u5E63\u5E64\u5E65\u5E66"+
-        "\u5E67\u5E68\u5E69\u5E6A\u5E6B\u5E6C\u5E6D\u5E6E"+
-        "\u5E6F\u5E70\u5E71\u5E72\u5E73\u5E74\u5E75\u5E76"+
-        "\u5E77\u5E78\u5E79\u5E7A\u5E7B\u5E7C\u5E7D\u5E7E"+
-        "\u5E7F\u5E80\u5E81\u5E82\u5E83\u5E84\u5E85\u5E86"+
-        "\u5E87\u5E88\u5E89\u5E8A\u5E8B\u5E8C\u5E8D\u5E8E"+
-        "\u5E8F\u5E90\u5E91\u5E92\u5E93\u5E94\u5E95\u5E96"+
-        "\u5E97\u5E98\u5E99\u5E9A\u5E9B\u5E9C\u5E9D\u5E9E"+
-        "\u5E9F\u5EA0\u5EA1\u5EA2\u5EA3\u5EA4\u5EA5\u5EA6"+
-        "\u5EA7\u5EA8\u5EA9\u5EAA\u5EAB\u5EAC\u5EAD\u5EAE"+
-        "\u5EAF\u5EB0\u5EB1\u5EB2\u5EB3\u5EB4\u5EB5\u5EB6"+
-        "\u5EB7\u5EB8\u5EB9\u5EBA\u5EBB\u5EBC\u5EBD\u5EBE"+
-        "\u5EBF\u5EC0\u5EC1\u5EC2\u5EC3\u5EC4\u5EC5\u5EC6"+
-        "\u5EC7\u5EC8\u5EC9\u5ECA\u5ECB\u5ECC\u5ECD\u5ECE"+
-        "\u5ECF\u5ED0\u5ED1\u5ED2\u5ED3\u5ED4\u5ED5\u5ED6"+
-        "\u5ED7\u5ED8\u5ED9\u5EDA\u5EDB\u5EDC\u5EDD\u5EDE"+
-        "\u5EDF\u5EE0\u5EE1\u5EE2\u5EE3\u5EE4\u5EE5\u5EE6"+
-        "\u5EE7\u5EE8\u5EE9\u5EEA\u5EEB\u5EEC\u5EED\u5EEE"+
-        "\u5EEF\u5EF0\u5EF1\u5EF2\u5EF3\u5EF4\u5EF5\u5EF6"+
-        "\u5EF7\u5EF8\u5EF9\u5EFA\u5EFB\u5EFC\u5EFD\u5EFE"+
-        "\u5EFF\u5F00\u5F01\u5F02\u5F03\u5F04\u5F05\u5F06"+
-        "\u5F07\u5F08\u5F09\u5F0A\u5F0B\u5F0C\u5F0D\u5F0E"+
-        "\u5F0F\u5F10\u5F11\u5F12\u5F13\u5F14\u5F15\u5F16"+
-        "\u5F17\u5F18\u5F19\u5F1A\u5F1B\u5F1C\u5F1D\u5F1E"+
-        "\u5F1F\u5F20\u5F21\u5F22\u5F23\u5F24\u5F25\u5F26"+
-        "\u5F27\u5F28\u5F29\u5F2A\u5F2B\u5F2C\u5F2D\u5F2E"+
-        "\u5F2F\u5F30\u5F31\u5F32\u5F33\u5F34\u5F35\u5F36"+
-        "\u5F37\u5F38\u5F39\u5F3A\u5F3B\u5F3C\u5F3D\u5F3E"+
-        "\u5F3F\u5F40\u5F41\u5F42\u5F43\u5F44\u5F45\u5F46"+
-        "\u5F47\u5F48\u5F49\u5F4A\u5F4B\u5F4C\u5F4D\u5F4E"+
-        "\u5F4F\u5F50\u5F51\u5F52\u5F53\u5F54\u5F55\u5F56"+
-        "\u5F57\u5F58\u5F59\u5F5A\u5F5B\u5F5C\u5F5D\u5F5E"+
-        "\u5F5F\u5F60\u5F61\u5F62\u5F63\u5F64\u5F65\u5F66"+
-        "\u5F67\u5F68\u5F69\u5F6A\u5F6B\u5F6C\u5F6D\u5F6E"+
-        "\u5F6F\u5F70\u5F71\u5F72\u5F73\u5F74\u5F75\u5F76"+
-        "\u5F77\u5F78\u5F79\u5F7A\u5F7B\u5F7C\u5F7D\u5F7E"+
-        "\u5F7F\u5F80\u5F81\u5F82\u5F83\u5F84\u5F85\u5F86"+
-        "\u5F87\u5F88\u5F89\u5F8A\u5F8B\u5F8C\u5F8D\u5F8E"+
-        "\u5F8F\u5F90\u5F91\u5F92\u5F93\u5F94\u5F95\u5F96"+
-        "\u5F97\u5F98\u5F99\u5F9A\u5F9B\u5F9C\u5F9D\u5F9E"+
-        "\u5F9F\u5FA0\u5FA1\u5FA2\u5FA3\u5FA4\u5FA5\u5FA6"+
-        "\u5FA7\u5FA8\u5FA9\u5FAA\u5FAB\u5FAC\u5FAD\u5FAE"+
-        "\u5FAF\u5FB0\u5FB1\u5FB2\u5FB3\u5FB4\u5FB5\u5FB6"+
-        "\u5FB7\u5FB8\u5FB9\u5FBA\u5FBB\u5FBC\u5FBD\uFE72"+
-        "\u5FBE\u5FBF\u5FC0\u5FC1\u5FC2\u5FC3\u5FC4\u5FC5"+
-        "\u5FC6\u5FC7\u5FC8\u5FC9\u5FCA\u5FCB\u5FCC\u5FCD"+
-        "\u5FCE\u5FCF\u5FD0\u5FD1\u5FD2\u5FD3\u5FD4\u5FD5"+
-        "\u5FD6\u5FD7\u5FD8\u5FD9\u5FDA\u5FDB\u5FDC\u5FDD"+
-        "\u5FDE\u5FDF\u5FE0\u5FE1\u5FE2\u5FE3\u5FE4\u5FE5"+
-        "\u5FE6\u5FE7\u5FE8\u5FE9\u5FEA\u5FEB\u5FEC\u5FED"+
-        "\u5FEE\u5FEF\u5FF0\u5FF1\u5FF2\u5FF3\u5FF4\u5FF5"+
-        "\u5FF6\u5FF7\u5FF8\u5FF9\u5FFA\u5FFB\u5FFC\u5FFD"+
-        "\u5FFE\u5FFF\u6000\u6001\u6002\u6003\u6004\u6005"+
-        "\u6006\u6007\u6008\u6009\u600A\u600B\u600C\u600D"+
-        "\u600E\u600F\u6010\u6011\u6012\u6013\u6014\u6015"+
-        "\u6016\u6017\u6018\u6019\u601A\u601B\u601C\u601D"+
-        "\u601E\u601F\u6020\u6021\u6022\u6023\u6024\u6025"+
-        "\u6026\u6027\u6028\u6029\u602A\u602B\u602C\u602D"+
-        "\u602E\u602F\u6030\u6031\uFE78\u6032\u6033\u6034"+
-        "\u6035\uFE77\u6036\u6037\u6038\u6039\u603A\u603B"+
-        "\u603C\u603D\u603E\u603F\u6040\u6041\u6042\u6043"+
-        "\u6044\u6045\u6046\u6047\u6048\u6049\u604A\u604B"+
-        "\u604C\u604D\u604E\u604F\u6050\u6051\u6052\u6053"+
-        "\u6054\u6055\u6056\u6057\u6058\u6059\u605A\u605B"+
-        "\u605C\u605D\u605E\u605F\u6060\uFE7A\u6061\u6062"+
-        "\u6063\u6064\u6065\u6066\u6067\u6068\u6069\u606A"+
-        "\u606B\u606C\u606D\u606E\u606F\u6070\u6071\u6072"+
-        "\u6073\u6074\u6075\u6076\u6077\u6078\u6079\u607A"+
-        "\u607B\u607C\u607D\u607E\u607F\u6080\u6081\u6082"+
-        "\u6083\u6084\u6085\u6086\u6087\u6088\u6089\u608A"+
-        "\u608B\u608C\u608D\u608E\u608F\u6090\u6091\u6092"+
-        "\u6093\u6094\u6095\u6096\u6097\u6098\u6099\u609A"+
-        "\u609B\u609C\u609D\u609E\u609F\u60A0\u60A1\u60A2"+
-        "\u60A3\u60A4\u60A5\u60A6\u60A7\u60A8\u60A9\u60AA"+
-        "\u60AB\u60AC\u60AD\u60AE\u60AF\u60B0\u60B1\u60B2"+
-        "\u60B3\u60B4\u60B5\u60B6\u60B7\u60B8\u60B9\u60BA"+
-        "\u60BB\u60BC\u60BD\u60BE\u60BF\u60C0\u60C1\u60C2"+
-        "\u60C3\u60C4\u60C5\u60C6\u60C7\u60C8\u60C9\u60CA"+
-        "\u60CB\u60CC\u60CD\u60CE\u60CF\u60D0\u60D1\u60D2"+
-        "\u60D3\u60D4\u60D5\u60D6\u60D7\u60D8\u60D9\u60DA"+
-        "\u60DB\u60DC\u60DD\u60DE\u60DF\u60E0\u60E1\u60E2"+
-        "\u60E3\u60E4\u60E5\u60E6\u60E7\u60E8\u60E9\u60EA"+
-        "\u60EB\u60EC\u60ED\u60EE\u60EF\u60F0\u60F1\u60F2"+
-        "\u60F3\u60F4\u60F5\u60F6\u60F7\u60F8\u60F9\u60FA"+
-        "\u60FB\u60FC\u60FD\u60FE\u60FF\u6100\u6101\u6102"+
-        "\u6103\u6104\u6105\u6106\u6107\u6108\u6109\u610A"+
-        "\u610B\u610C\u610D\u610E\u610F\u6110\u6111\u6112"+
-        "\u6113\u6114\u6115\u6116\u6117\u6118\u6119\u611A"+
-        "\u611B\u611C\u611D\u611E\u611F\u6120\u6121\u6122"+
-        "\u6123\u6124\u6125\u6126\u6127\u6128\u6129\u612A"+
-        "\u612B\u612C\u612D\u612E\u612F\u6130\u6131\u6132"+
-        "\u6133\u6134\u6135\u6136\u6137\u6138\u6139\u613A"+
-        "\u613B\u613C\u613D\u613E\u613F\u6140\u6141\u6142"+
-        "\u6143\u6144\u6145\u6146\u6147\u6148\u6149\u614A"+
-        "\u614B\u614C\u614D\u614E\u614F\u6150\u6151\u6152"+
-        "\u6153\u6154\u6155\u6156\u6157\u6158\uFE7B\u6159"+
-        "\u615A\u615B\u615C\u615D\u615E\u615F\u6160\u6161"+
-        "\u6162\u6163\u6164\u6165\u6166\u6167\u6168\u6169"+
-        "\u616A\u616B\u616C\u616D\u616E\u616F\u6170\u6171"+
-        "\u6172\u6173\u6174\u6175\u6176\u6177\u6178\u6179"+
-        "\u617A\u617B\u617C\u617D\u617E\u617F\u6180\u6181"+
-        "\u6182\u6183\u6184\u6185\u6186\u6187\u6188\u6189"+
-        "\u618A\u618B\u618C\u618D\u618E\u618F\u6190\u6191"+
-        "\u6192\u6193\u6194\u6195\u6196\u6197\u6198\u6199"+
-        "\u619A\u619B\u619C\u619D\u619E\u619F\u61A0\u61A1"+
-        "\u61A2\u61A3\u61A4\u61A5\u61A6\u61A7\u61A8\u61A9"+
-        "\u61AA\u61AB\u61AC\u61AD\u61AE\u61AF\u61B0\u61B1"+
-        "\u61B2\u61B3\u61B4\u61B5\u61B6\u61B7\u61B8\u61B9"+
-        "\u61BA\u61BB\u61BC\u61BD\u61BE\u61BF\u61C0\u61C1"+
-        "\u61C2\u61C3\u61C4\u61C5\u61C6\u61C7\u61C8\u61C9"+
-        "\u61CA\u61CB\u61CC\u61CD\u61CE\u61CF\u61D0\u61D1"+
-        "\u61D2\u61D3\u61D4\u61D5\u61D6\u61D7\u61D8\u61D9"+
-        "\u61DA\u61DB\u61DC\u61DD\u61DE\u61DF\u61E0\u61E1"+
-        "\u61E2\u61E3\u61E4\u61E5\u61E6\u61E7\u61E8\u61E9"+
-        "\u61EA\u61EB\u61EC\u61ED\u61EE\u61EF\u61F0\u61F1"+
-        "\u61F2\u61F3\u61F4\u61F5\u61F6\u61F7\u61F8\u61F9"+
-        "\u61FA\u61FB\u61FC\u61FD\u61FE\u61FF\u6200\u6201"+
-        "\u6202\u6203\u6204\u6205\u6206\u6207\u6208\u6209"+
-        "\u620A\u620B\u620C\u620D\u620E\u620F\u6210\u6211"+
-        "\u6212\u6213\u6214\u6215\u6216\u6217\u6218\u6219"+
-        "\u621A\u621B\u621C\u621D\u621E\u621F\u6220\u6221"+
-        "\u6222\u6223\u6224\u6225\u6226\u6227\u6228\u6229"+
-        "\u622A\u622B\u622C\u622D\u622E\u622F\u6230\u6231"+
-        "\u6232\u6233\u6234\u6235\u6236\u6237\u6238\u6239"+
-        "\u623A\u623B\u623C\u623D\u623E\u623F\u6240\u6241"+
-        "\u6242\u6243\u6244\u6245\u6246\u6247\u6248\u6249"+
-        "\u624A\u624B\u624C\u624D\u624E\u624F\u6250\u6251"+
-        "\u6252\u6253\u6254\u6255\u6256\u6257\u6258\u6259"+
-        "\u625A\u625B\u625C\u625D\u625E\u625F\u6260\u6261"+
-        "\u6262\u6263\u6264\u6265\u6266\u6267\u6268\u6269"+
-        "\u626A\u626B\u626C\u626D\u626E\u626F\u6270\u6271"+
-        "\u6272\u6273\u6274\u6275\u6276\u6277\u6278\u6279"+
-        "\u627A\u627B\u627C\u627D\u627E\u627F\u6280\u6281"+
-        "\u6282\u6283\u6284\u6285\u6286\u6287\u6288\u6289"+
-        "\u628A\u628B\u628C\u628D\u628E\u628F\u6290\u6291"+
-        "\u6292\u6293\u6294\u6295\u6296\u6297\u6298\u6299"+
-        "\u629A\u629B\u629C\u629D\u629E\u629F\u62A0\u62A1"+
-        "\u62A2\u62A3\u62A4\u62A5\u62A6\u62A7\u62A8\u62A9"+
-        "\u62AA\u62AB\u62AC\u62AD\u62AE\u62AF\u62B0\u62B1"+
-        "\u62B2\u62B3\u62B4\u62B5\u62B6\u62B7\u62B8\u62B9"+
-        "\u62BA\u62BB\u62BC\u62BD\u62BE\u62BF\u62C0\u62C1"+
-        "\u62C2\u62C3\u62C4\u62C5\u62C6\u62C7\u62C8\u62C9"+
-        "\u62CA\u62CB\u62CC\u62CD\uFE7D\u62CE\u62CF\u62D0"+
-        "\u62D1\u62D2\u62D3\u62D4\u62D5\u62D6\u62D7\u62D8"+
-        "\u62D9\u62DA\u62DB\u62DC\u62DD\u62DE\u62DF\u62E0"+
-        "\u62E1\uFE7C\u62E2\u62E3\u62E4\u62E5\u62E6\u62E7"+
-        "\u62E8\u62E9\u62EA\u62EB\u62EC\u62ED\u62EE\u62EF"+
-        "\u62F0\u62F1\u62F2\u62F3\u62F4\u62F5\u62F6\u62F7"+
-        "\u62F8\u62F9\u62FA\u62FB\u62FC\u62FD\u62FE\u62FF"+
-        "\u6300\u6301\u6302\u6303\u6304\u6305\u6306\u6307"+
-        "\u6308\u6309\u630A\u630B\u630C\u630D\u630E\u630F"+
-        "\u6310\u6311\u6312\u6313\u6314\u6315\u6316\u6317"+
-        "\u6318\u6319\u631A\u631B\u631C\u631D\u631E\u631F"+
-        "\u6320\u6321\u6322\u6323\u6324\u6325\u6326\u6327"+
-        "\u6328\u6329\u632A\u632B\u632C\u632D\u632E\u632F"+
-        "\u6330\u6331\u6332\u6333\u6334\u6335\u6336\u6337"+
-        "\u6338\u6339\u633A\u633B\u633C\u633D\u633E\u633F"+
-        "\u6340\u6341\u6342\u6343\u6344\u6345\u6346\u6347"+
-        "\u6348\u6349\u634A\u634B\u634C\u634D\u634E\u634F"+
-        "\u6350\u6351\u6352\u6353\u6354\u6355\u6356\u6357"+
-        "\u6358\u6359\u635A\u635B\u635C\u635D\u635E\u635F"+
-        "\u6360\u6361\u6362\u6363\u6364\u6365\u6366\u6367"+
-        "\u6368\u6369\u636A\u636B\u636C\u636D\u636E\u636F"+
-        "\u6370\u6371\u6372\u6373\u6374\u6375\u6376\u6377"+
-        "\u6378\u6379\u637A\u637B\u637C\u637D\u637E\u637F"+
-        "\u6380\u6381\u6382\u6383\u6384\u6385\u6386\u6387"+
-        "\u6388\u6389\u638A\u638B\u638C\u638D\u638E\u638F"+
-        "\u6390\u6391\u6392\u6393\u6394\u6395\u6396\u6397"+
-        "\u6398\u6399\u639A\u639B\u639C\u639D\u639E\u639F"+
-        "\u63A0\u63A1\u63A2\uFE80\u63A3\u63A4\u63A5\u63A6"+
-        "\u63A7\uFE81\u63A8\u63A9\u63AA\u63AB\u63AC\u63AD"+
-        "\u63AE\u63AF\u63B0\u63B1\u63B2\u63B3\u63B4\u63B5"+
-        "\u63B6\u63B7\u63B8\u63B9\u63BA\u63BB\u63BC\u63BD"+
-        "\u63BE\u63BF\u63C0\u63C1\u63C2\u63C3\u63C4\u63C5"+
-        "\u63C6\u63C7\u63C8\u63C9\u63CA\u63CB\u63CC\u63CD"+
-        "\u63CE\u63CF\u63D0\u63D1\u63D2\u63D3\u63D4\u63D5"+
-        "\u63D6\u63D7\u63D8\u63D9\u63DA\u63DB\u63DC\u63DD"+
-        "\u63DE\u63DF\u63E0\u63E1\u63E2\u63E3\u63E4\u63E5"+
-        "\u63E6\u63E7\u63E8\u63E9\u63EA\u63EB\u63EC\u63ED"+
-        "\u63EE\u63EF\u63F0\u63F1\u63F2\u63F3\u63F4\u63F5"+
-        "\u63F6\u63F7\u63F8\u63F9\uFE82\u63FA\u63FB\u63FC"+
-        "\u63FD\u63FE\u63FF\u6400\u6401\u6402\u6403\u6404"+
-        "\u6405\u6406\u6407\u6408\u6409\uFE83\u640A\u640B"+
-        "\u640C\u640D\u640E\u640F\u6410\u6411\u6412\u6413"+
-        "\u6414\u6415\u6416\u6417\u6418\u6419\u641A\u641B"+
-        "\u641C\u641D\u641E\u641F\u6420\u6421\u6422\u6423"+
-        "\u6424\u6425\u6426\u6427\u6428\u6429\u642A\u642B"+
-        "\u642C\u642D\u642E\u642F\u6430\u6431\u6432\u6433"+
-        "\u6434\u6435\u6436\u6437\u6438\u6439\u643A\u643B"+
-        "\u643C\u643D\u643E\u643F\u6440\u6441\u6442\u6443"+
-        "\u6444\u6445\u6446\u6447\u6448\u6449\u644A\u644B"+
-        "\u644C\u644D\u644E\u644F\u6450\u6451\u6452\u6453"+
-        "\u6454\u6455\u6456\u6457\u6458\u6459\u645A\u645B"+
-        "\u645C\u645D\u645E\u645F\u6460\u6461\u6462\u6463"+
-        "\u6464\u6465\u6466\u6467\u6468\u6469\u646A\u646B"+
-        "\u646C\u646D\u646E\u646F\u6470\u6471\u6472\u6473"+
-        "\u6474\u6475\u6476\u6477\u6478\u6479\u647A\u647B"+
-        "\u647C\u647D\u647E\u647F\u6480\u6481\u6482\u6483"+
-        "\u6484\u6485\u6486\u6487\u6488\u6489\u648A\u648B"+
-        "\u648C\u648D\u648E\u648F\u6490\u6491\u6492\u6493"+
-        "\u6494\u6495\u6496\u6497\u6498\u6499\u649A\u649B"+
-        "\u649C\u649D\u649E\u649F\u64A0\u64A1\u64A2\u64A3"+
-        "\u64A4\u64A5\u64A6\u64A7\u64A8\u64A9\u64AA\u64AB"+
-        "\u64AC\u64AD\u64AE\u64AF\u64B0\u64B1\u64B2\u64B3"+
-        "\u64B4\u64B5\u64B6\u64B7\u64B8\u64B9\u64BA\u64BB"+
-        "\u64BC\u64BD\u64BE\u64BF\u64C0\u64C1\u64C2\u64C3"+
-        "\u64C4\u64C5\u64C6\u64C7\u64C8\u64C9\u64CA\u64CB"+
-        "\u64CC\u64CD\u64CE\u64CF\u64D0\u64D1\u64D2\u64D3"+
-        "\u64D4\u64D5\u64D6\u64D7\u64D8\u64D9\u64DA\u64DB"+
-        "\u64DC\u64DD\u64DE\u64DF\u64E0\u64E1\u64E2\u64E3"+
-        "\u64E4\u64E5\u64E6\u64E7\u64E8\u64E9\u64EA\u64EB"+
-        "\u64EC\u64ED\u64EE\u64EF\u64F0\u64F1\u64F2\u64F3"+
-        "\u64F4\u64F5\u64F6\u64F7\u64F8\u64F9\u64FA\u64FB"+
-        "\u64FC\u64FD\u64FE\u64FF\u6500\u6501\u6502\u6503"+
-        "\u6504\u6505\u6506\u6507\u6508\u6509\u650A\u650B"+
-        "\u650C\u650D\u650E\u650F\u6510\u6511\u6512\u6513"+
-        "\u6514\u6515\u6516\u6517\u6518\u6519\u651A\u651B"+
-        "\u651C\u651D\u651E\u651F\u6520\u6521\u6522\u6523"+
-        "\u6524\u6525\u6526\u6527\u6528\u6529\u652A\u652B"+
-        "\u652C\u652D\u652E\u652F\u6530\u6531\u6532\u6533"+
-        "\u6534\u6535\u6536\u6537\u6538\u6539\u653A\u653B"+
-        "\u653C\u653D\u653E\u653F\u6540\u6541\u6542\u6543"+
-        "\u6544\u6545\u6546\u6547\u6548\u6549\u654A\u654B"+
-        "\u654C\u654D\u654E\u654F\u6550\u6551\u6552\u6553"+
-        "\u6554\u6555\u6556\u6557\u6558\u6559\u655A\u655B"+
-        "\u655C\u655D\u655E\u655F\u6560\u6561\u6562\u6563"+
-        "\u6564\u6565\u6566\u6567\u6568\u6569\u656A\u656B"+
-        "\u656C\u656D\u656E\u656F\u6570\u6571\u6572\u6573"+
-        "\u6574\u6575\u6576\u6577\u6578\u6579\u657A\u657B"+
-        "\u657C\u657D\u657E\u657F\u6580\u6581\u6582\u6583"+
-        "\u6584\u6585\u6586\u6587\u6588\u6589\u658A\u658B"+
-        "\u658C\u658D\u658E\u658F\u6590\u6591\u6592\u6593"+
-        "\u6594\u6595\u6596\u6597\u6598\u6599\u659A\u659B"+
-        "\u659C\u659D\u659E\u659F\u65A0\u65A1\u65A2\u65A3"+
-        "\u65A4\u65A5\u65A6\u65A7\u65A8\u65A9\u65AA\u65AB"+
-        "\u65AC\u65AD\u65AE\u65AF\u65B0\u65B1\u65B2\u65B3"+
-        "\u65B4\u65B5\u65B6\u65B7\u65B8\u65B9\u65BA\u65BB"+
-        "\u65BC\u65BD\u65BE\u65BF\u65C0\u65C1\u65C2\uFE85"+
-        "\u65C3\u65C4\u65C5\u65C6\u65C7\u65C8\u65C9\u65CA"+
-        "\u65CB\u65CC\u65CD\u65CE\u65CF\u65D0\u65D1\u65D2"+
-        "\u65D3\u65D4\u65D5\u65D6\u65D7\u65D8\u65D9\u65DA"+
-        "\u65DB\u65DC\u65DD\u65DE\u65DF\u65E0\u65E1\u65E2"+
-        "\u65E3\u65E4\u65E5\u65E6\u65E7\u65E8\u65E9\u65EA"+
-        "\u65EB\u65EC\u65ED\u65EE\u65EF\u65F0\u65F1\u65F2"+
-        "\u65F3\u65F4\uFE86\u65F5\u65F6\uFE87\u65F7\u65F8"+
-        "\u65F9\u65FA\uFE88\uFE89\u65FB\uFE8A\uFE8B\u65FC"+
-        "\u65FD\u65FE\u65FF\u6600\u6601\u6602\u6603\u6604"+
-        "\u6605\u6606\u6607\u6608\u6609\u660A\u660B\u660C"+
-        "\u660D\u660E\u660F\uFE8D\u6610\u6611\u6612\uFE8C"+
-        "\u6613\u6614\u6615\u6616\u6617\u6618\u6619\u661A"+
-        "\u661B\u661C\u661D\u661E\u661F\u6620\u6621\u6622"+
-        "\u6623\u6624\u6625\u6626\u6627\u6628\uFE8F\uFE8E"+
-        "\u6629\u662A\u662B\u662C\u662D\u662E\u662F\u6630"+
-        "\u6631\u6632\u6633\u6634\u6635\u6636\u6637\u6638"+
-        "\u6639\u663A\u663B\u663C\u663D\u663E\u663F\u6640"+
-        "\u6641\u6642\u6643\u6644\u6645\u6646\u6647\u6648"+
-        "\u6649\u664A\u664B\u664C\u664D\u664E\u664F\u6650"+
-        "\u6651\u6652\u6653\u6654\u6655\u6656\u6657\u6658"+
-        "\u6659\u665A\u665B\u665C\u665D\u665E\u665F\u6660"+
-        "\u6661\u6662\u6663\u6664\u6665\u6666\u6667\u6668"+
-        "\u6669\u666A\u666B\u666C\u666D\u666E\u666F\u6670"+
-        "\u6671\u6672\u6673\u6674\u6675\u6676\u6677\u6678"+
-        "\u6679\u667A\u667B\u667C\u667D\u667E\u667F\u6680"+
-        "\u6681\u6682\u6683\u6684\u6685\u6686\u6687\u6688"+
-        "\u6689\u668A\u668B\u668C\u668D\u668E\u668F\u6690"+
-        "\u6691\u6692\u6693\u6694\u6695\u6696\u6697\u6698"+
-        "\u6699\u669A\u669B\u669C\u669D\u669E\u669F\u66A0"+
-        "\u66A1\u66A2\u66A3\u66A4\u66A5\u66A6\u66A7\u66A8"+
-        "\u66A9\u66AA\u66AB\u66AC\u66AD\u66AE\u66AF\u66B0"+
-        "\u66B1\u66B2\u66B3\u66B4\u66B5\u66B6\u66B7\u66B8"+
-        "\u66B9\u66BA\u66BB\u66BC\u66BD\u66BE\u66BF\u66C0"+
-        "\u66C1\u66C2\u66C3\u66C4\u66C5\u66C6\u66C7\u66C8"+
-        "\u66C9\u66CA\u66CB\u66CC\u66CD\u66CE\u66CF\u66D0"+
-        "\u66D1\u66D2\u66D3\u66D4\u66D5\u66D6\u66D7\u66D8"+
-        "\u66D9\u66DA\u66DB\u66DC\u66DD\u66DE\u66DF\u66E0"+
-        "\u66E1\u66E2\u66E3\u66E4\u66E5\u66E6\u66E7\u66E8"+
-        "\u66E9\u66EA\u66EB\u66EC\u66ED\u66EE\u66EF\u66F0"+
-        "\u66F1\u66F2\u66F3\u66F4\u66F5\u66F6\u66F7\u66F8"+
-        "\u66F9\u66FA\u66FB\u66FC\u66FD\u66FE\u66FF\u6700"+
-        "\u6701\u6702\u6703\u6704\u6705\u6706\u6707\u6708"+
-        "\u6709\u670A\u670B\u670C\u670D\u670E\u670F\u6710"+
-        "\u6711\u6712\u6713\u6714\u6715\u6716\u6717\u6718"+
-        "\u6719\u671A\u671B\u671C\u671D\u671E\u671F\u6720"+
-        "\u6721\u6722\u6723\u6724\u6725\u6726\u6727\u6728"+
-        "\u6729\u672A\u672B\u672C\u672D\u672E\u672F\u6730"+
-        "\u6731\u6732\u6733\u6734\u6735\u6736\u6737\u6738"+
-        "\u6739\u673A\u673B\u673C\u673D\u673E\u673F\u6740"+
-        "\u6741\u6742\u6743\u6744\u6745\u6746\u6747\u6748"+
-        "\u6749\u674A\u674B\u674C\u674D\u674E\u674F\u6750"+
-        "\u6751\u6752\u6753\u6754\u6755\u6756\u6757\u6758"+
-        "\u6759\u675A\u675B\u675C\u675D\u675E\u675F\u6760"+
-        "\u6761\u6762\u6763\u6764\u6765\u6766\u6767\u6768"+
-        "\u6769\u676A\u676B\u676C\u676D\u676E\u676F\u6770"+
-        "\u6771\u6772\u6773\u6774\u6775\u6776\u6777\u6778"+
-        "\u6779\u677A\u677B\u677C\u677D\u677E\u677F\u6780"+
-        "\u6781\u6782\u6783\u6784\u6785\u6786\u6787\u6788"+
-        "\u6789\u678A\u678B\u678C\u678D\u678E\u678F\u6790"+
-        "\u6791\u6792\u6793\u6794\u6795\u6796\u6797\u6798"+
-        "\u6799\u679A\u679B\u679C\u679D\u679E\u679F\u67A0"+
-        "\u67A1\u67A2\u67A3\u67A4\u67A5\u67A6\u67A7\u67A8"+
-        "\u67A9\u67AA\u67AB\u67AC\u67AD\u67AE\u67AF\u67B0"+
-        "\u67B1\u67B2\u67B3\u67B4\u67B5\u67B6\u67B7\u67B8"+
-        "\u67B9\u67BA\u67BB\u67BC\u67BD\u67BE\u67BF\u67C0"+
-        "\u67C1\u67C2\u67C3\u67C4\u67C5\u67C6\u67C7\u67C8"+
-        "\u67C9\u67CA\u67CB\u67CC\u67CD\u67CE\u67CF\u67D0"+
-        "\u67D1\u67D2\u67D3\u67D4\u67D5\u67D6\u67D7\u67D8"+
-        "\u67D9\u67DA\u67DB\u67DC\u67DD\u67DE\u67DF\u67E0"+
-        "\u67E1\u67E2\u67E3\u67E4\u67E5\u67E6\u67E7\u67E8"+
-        "\u67E9\u67EA\u67EB\u67EC\u67ED\u67EE\u67EF\u67F0"+
-        "\u67F1\u67F2\u67F3\u67F4\u67F5\u67F6\u67F7\u67F8"+
-        "\u67F9\u67FA\u67FB\u67FC\u67FD\u67FE\u67FF\u6800"+
-        "\u6801\u6802\u6803\u6804\u6805\u6806\u6807\u6808"+
-        "\u6809\u680A\u680B\u680C\u680D\u680E\u680F\u6810"+
-        "\u6811\u6812\u6813\u6814\u6815\u6816\u6817\u6818"+
-        "\u6819\u681A\u681B\u681C\u681D\u681E\u681F\u6820"+
-        "\u6821\u6822\u6823\u6824\u6825\u6826\u6827\u6828"+
-        "\u6829\u682A\u682B\u682C\u682D\u682E\u682F\u6830"+
-        "\u6831\u6832\u6833\u6834\u6835\u6836\u6837\u6838"+
-        "\u6839\u683A\u683B\u683C\u683D\u683E\u683F\u6840"+
-        "\u6841\u6842\u6843\u6844\u6845\u6846\u6847\u6848"+
-        "\u6849\u684A\u684B\u684C\u684D\u684E\u684F\u6850"+
-        "\u6851\u6852\u6853\u6854\u6855\u6856\u6857\u6858"+
-        "\u6859\u685A\u685B\u685C\u685D\u685E\u685F\u6860"+
-        "\u6861\u6862\u6863\u6864\u6865\u6866\u6867\u6868"+
-        "\u6869\u686A\u686B\u686C\u686D\u686E\u686F\u6870"+
-        "\u6871\u6872\u6873\u6874\u6875\u6876\u6877\u6878"+
-        "\u6879\u687A\u687B\u687C\u687D\u687E\u687F\u6880"+
-        "\u6881\u6882\u6883\u6884\u6885\u6886\u6887\u6888"+
-        "\u6889\u688A\u688B\u688C\u688D\u688E\u688F\u6890"+
-        "\u6891\u6892\u6893\u6894\u6895\u6896\u6897\u6898"+
-        "\u6899\u689A\u689B\u689C\u689D\u689E\u689F\u68A0"+
-        "\u68A1\u68A2\u68A3\u68A4\u68A5\u68A6\u68A7\u68A8"+
-        "\u68A9\u68AA\u68AB\u68AC\u68AD\u68AE\u68AF\u68B0"+
-        "\u68B1\u68B2\u68B3\u68B4\u68B5\u68B6\u68B7\u68B8"+
-        "\u68B9\u68BA\u68BB\u68BC\u68BD\u68BE\u68BF\u68C0"+
-        "\u68C1\u68C2\u68C3\u68C4\u68C5\u68C6\u68C7\u68C8"+
-        "\u68C9\u68CA\u68CB\u68CC\u68CD\u68CE\u68CF\u68D0"+
-        "\u68D1\u68D2\u68D3\u68D4\u68D5\u68D6\u68D7\u68D8"+
-        "\u68D9\u68DA\u68DB\u68DC\u68DD\u68DE\u68DF\u68E0"+
-        "\u68E1\u68E2\u68E3\u68E4\u68E5\u68E6\u68E7\uFE96"+
-        "\u68E8\u68E9\u68EA\u68EB\u68EC\u68ED\u68EE\u68EF"+
-        "\u68F0\u68F1\u68F2\u68F3\u68F4\u68F5\u68F6\u68F7"+
-        "\u68F8\u68F9\u68FA\u68FB\u68FC\u68FD\u68FE\u68FF"+
-        "\u6900\u6901\u6902\u6903\u6904\u6905\u6906\u6907"+
-        "\u6908\u6909\u690A\u690B\u690C\u690D\u690E\uFE93"+
-        "\uFE94\uFE95\uFE97\uFE92\u690F\u6910\u6911\u6912"+
-        "\u6913\u6914\u6915\u6916\u6917\u6918\u6919\u691A"+
-        "\u691B\u691C\u691D\u691E\u691F\u6920\u6921\u6922"+
-        "\u6923\u6924\u6925\u6926\u6927\u6928\u6929\u692A"+
-        "\u692B\u692C\u692D\u692E\u692F\u6930\u6931\u6932"+
-        "\u6933\u6934\u6935\u6936\u6937\u6938\u6939\u693A"+
-        "\u693B\u693C\u693D\u693E\u693F\u6940\u6941\u6942"+
-        "\u6943\u6944\u6945\u6946\u6947\u6948\u6949\u694A"+
-        "\u694B\u694C\u694D\u694E\u694F\u6950\u6951\u6952"+
-        "\u6953\u6954\u6955\u6956\u6957\u6958\u6959\u695A"+
-        "\u695B\u695C\u695D\u695E\u695F\u6960\u6961\u6962"+
-        "\u6963\u6964\u6965\u6966\u6967\u6968\u6969\u696A"+
-        "\u696B\u696C\u696D\u696E\u696F\u6970\u6971\u6972"+
-        "\u6973\u6974\u6975\u6976\u6977\u6978\u6979\u697A"+
-        "\u697B\u697C\u697D\uFE98\uFE99\uFE9A\uFE9B\uFE9C"+
-        "\uFE9D\uFE9E\u697E\u697F\u6980\u6981\u6982\u6983"+
-        "\u6984\u6985\u6986\u6987\u6988\u6989\u698A\u698B"+
-        "\u698C\u698D\u698E\u698F\u6990\u6991\u6992\u6993"+
-        "\u6994\u6995\u6996\u6997\u6998\u6999\u699A\u699B"+
-        "\u699C\u699D\u699E\u699F\u69A0\u69A1\u69A2\u69A3"+
-        "\u69A4\u69A5\u69A6\u69A7\u69A8\u69A9\u69AA\u69AB"+
-        "\u69AC\u69AD\u69AE\u69AF\u69B0\u69B1\u69B2\u69B3"+
-        "\u69B4\u69B5\u69B6\u69B7\u69B8\u69B9\u69BA\u69BB"+
-        "\u69BC\u69BD\u69BE\u69BF\u69C0\u69C1\u69C2\u69C3"+
-        "\u69C4\u69C5\u69C6\u69C7\u69C8\u69C9\u69CA\u69CB"+
-        "\u69CC\u69CD\u69CE\u69CF\u69D0\u69D1\u69D2\u69D3"+
-        "\u69D4\u69D5\u69D6\u69D7\u69D8\u69D9\u69DA\u69DB"+
-        "\u69DC\u69DD\u69DE\u69DF\u69E0\u69E1\u69E2\u69E3"+
-        "\u69E4\u69E5\u69E6\u69E7\u69E8\u69E9\u69EA\u69EB"+
-        "\u69EC\u69ED\u69EE\u69EF\u69F0\u69F1\u69F2\u69F3"+
-        "\u69F4\u69F5\u69F6\u69F7\u69F8\u69F9\u69FA\u69FB"+
-        "\u69FC\u69FD\u69FE\u69FF\u6A00\u6A01\u6A02\u6A03"+
-        "\u6A04\u6A05\u6A06\u6A07\u6A08\u6A09\u6A0A\u6A0B"+
-        "\u6A0C\u6A0D\u6A0E\u6A0F\u6A10\u6A11\uFE9F\u6A12"+
-        "\u6A13\u6A14\u6A15\u6A16\u6A17\u6A18\u6A19\u6A1A"+
-        "\u6A1B\u6A1C\u6A1D\u6A1E\u6A1F\u6A20\u6A21\u6A22"+
-        "\u6A23\u6A24\u6A25\u6A26\u6A27\u6A28\u6A29\u6A2A"+
-        "\u6A2B\u6A2C\u6A2D\u6A2E\u6A2F\u6A30\u6A31\u6A32"+
-        "\u6A33\u6A34\u6A35\u6A36\u6A37\u6A38\u6A39\u6A3A"+
-        "\u6A3B\u6A3C\u6A3D\u6A3E\u6A3F\u6A40\u6A41\u6A42"+
-        "\u6A43\u6A44\u6A45\u6A46\u6A47\u6A48\u6A49\u6A4A"+
-        "\u6A4B\u6A4C\u6A4D\u6A4E\u6A4F\u6A50\u6A51\u6A52"+
-        "\u6A53\u6A54\u6A55\u6A56\u6A57\u6A58\u6A59\u6A5A"+
-        "\u6A5B\u6A5C\u6A5D\u6A5E\u6A5F\u6A60\u6A61\u6A62"+
-        "\uD2BB\uB6A1\u8140\uC6DF\u8141\u8142\u8143\uCDF2"+
-        "\uD5C9\uC8FD\uC9CF\uCFC2\uD8A2\uB2BB\uD3EB\u8144"+
-        "\uD8A4\uB3F3\u8145\uD7A8\uC7D2\uD8A7\uCAC0\u8146"+
-        "\uC7F0\uB1FB\uD2B5\uB4D4\uB6AB\uCBBF\uD8A9\u8147"+
-        "\u8148\u8149\uB6AA\u814A\uC1BD\uD1CF\u814B\uC9A5"+
-        "\uD8AD\u814C\uB8F6\uD1BE\uE3DC\uD6D0\u814D\u814E"+
-        "\uB7E1\u814F\uB4AE\u8150\uC1D9\u8151\uD8BC\u8152"+
-        "\uCDE8\uB5A4\uCEAA\uD6F7\u8153\uC0F6\uBED9\uD8AF"+
-        "\u8154\u8155\u8156\uC4CB\u8157\uBEC3\u8158\uD8B1"+
-        "\uC3B4\uD2E5\u8159\uD6AE\uCEDA\uD5A7\uBAF5\uB7A6"+
-        "\uC0D6\u815A\uC6B9\uC5D2\uC7C7\u815B\uB9D4\u815C"+
-        "\uB3CB\uD2D2\u815D\u815E\uD8BF\uBEC5\uC6F2\uD2B2"+
-        "\uCFB0\uCFE7\u815F\u8160\u8161\u8162\uCAE9\u8163"+
-        "\u8164\uD8C0\u8165\u8166\u8167\u8168\u8169\u816A"+
-        "\uC2F2\uC2D2\u816B\uC8E9\u816C\u816D\u816E\u816F"+
-        "\u8170\u8171\u8172\u8173\u8174\u8175\uC7AC\u8176"+
-        "\u8177\u8178\u8179\u817A\u817B\u817C\uC1CB\u817D"+
-        "\uD3E8\uD5F9\u817E\uCAC2\uB6FE\uD8A1\uD3DA\uBFF7"+
-        "\u8180\uD4C6\uBBA5\uD8C1\uCEE5\uBEAE\u8181\u8182"+
-        "\uD8A8\u8183\uD1C7\uD0A9\u8184\u8185\u8186\uD8BD"+
-        "\uD9EF\uCDF6\uBFBA\u8187\uBDBB\uBAA5\uD2E0\uB2FA"+
-        "\uBAE0\uC4B6\u8188\uCFED\uBEA9\uCDA4\uC1C1\u8189"+
-        "\u818A\u818B\uC7D7\uD9F1\u818C\uD9F4\u818D\u818E"+
-        "\u818F\u8190\uC8CB\uD8E9\u8191\u8192\u8193\uD2DA"+
-        "\uCAB2\uC8CA\uD8EC\uD8EA\uD8C6\uBDF6\uC6CD\uB3F0"+
-        "\u8194\uD8EB\uBDF1\uBDE9\u8195\uC8D4\uB4D3\u8196"+
-        "\u8197\uC2D8\u8198\uB2D6\uD7D0\uCACB\uCBFB\uD5CC"+
-        "\uB8B6\uCFC9\u8199\u819A\u819B\uD9DA\uD8F0\uC7AA"+
-        "\u819C\uD8EE\u819D\uB4FA\uC1EE\uD2D4\u819E\u819F"+
-        "\uD8ED\u81A0\uD2C7\uD8EF\uC3C7\u81A1\u81A2\u81A3"+
-        "\uD1F6\u81A4\uD6D9\uD8F2\u81A5\uD8F5\uBCFE\uBCDB"+
-        "\u81A6\u81A7\u81A8\uC8CE\u81A9\uB7DD\u81AA\uB7C2"+
-        "\u81AB\uC6F3\u81AC\u81AD\u81AE\u81AF\u81B0\u81B1"+
-        "\u81B2\uD8F8\uD2C1\u81B3\u81B4\uCEE9\uBCBF\uB7FC"+
-        "\uB7A5\uD0DD\u81B5\u81B6\u81B7\u81B8\u81B9\uD6DA"+
-        "\uD3C5\uBBEF\uBBE1\uD8F1\u81BA\u81BB\uC9A1\uCEB0"+
-        "\uB4AB\u81BC\uD8F3\u81BD\uC9CB\uD8F6\uC2D7\uD8F7"+
-        "\u81BE\u81BF\uCEB1\uD8F9\u81C0\u81C1\u81C2\uB2AE"+
-        "\uB9C0\u81C3\uD9A3\u81C4\uB0E9\u81C5\uC1E6\u81C6"+
-        "\uC9EC\u81C7\uCBC5\u81C8\uCBC6\uD9A4\u81C9\u81CA"+
-        "\u81CB\u81CC\u81CD\uB5E8\u81CE\u81CF\uB5AB\u81D0"+
-        "\u81D1\u81D2\u81D3\u81D4\u81D5\uCEBB\uB5CD\uD7A1"+
-        "\uD7F4\uD3D3\u81D6\uCCE5\u81D7\uBACE\u81D8\uD9A2"+
-        "\uD9DC\uD3E0\uD8FD\uB7F0\uD7F7\uD8FE\uD8FA\uD9A1"+
-        "\uC4E3\u81D9\u81DA\uD3B6\uD8F4\uD9DD\u81DB\uD8FB"+
-        "\u81DC\uC5E5\u81DD\u81DE\uC0D0\u81DF\u81E0\uD1F0"+
-        "\uB0DB\u81E1\u81E2\uBCD1\uD9A6\u81E3\uD9A5\u81E4"+
-        "\u81E5\u81E6\u81E7\uD9AC\uD9AE\u81E8\uD9AB\uCAB9"+
-        "\u81E9\u81EA\u81EB\uD9A9\uD6B6\u81EC\u81ED\u81EE"+
-        "\uB3DE\uD9A8\u81EF\uC0FD\u81F0\uCACC\u81F1\uD9AA"+
-        "\u81F2\uD9A7\u81F3\u81F4\uD9B0\u81F5\u81F6\uB6B1"+
-        "\u81F7\u81F8\u81F9\uB9A9\u81FA\uD2C0\u81FB\u81FC"+
-        "\uCFC0\u81FD\u81FE\uC2C2\u8240\uBDC4\uD5EC\uB2E0"+
-        "\uC7C8\uBFEB\uD9AD\u8241\uD9AF\u8242\uCEEA\uBAEE"+
-        "\u8243\u8244\u8245\u8246\u8247\uC7D6\u8248\u8249"+
-        "\u824A\u824B\u824C\u824D\u824E\u824F\u8250\uB1E3"+
-        "\u8251\u8252\u8253\uB4D9\uB6ED\uD9B4\u8254\u8255"+
-        "\u8256\u8257\uBFA1\u8258\u8259\u825A\uD9DE\uC7CE"+
-        "\uC0FE\uD9B8\u825B\u825C\u825D\u825E\u825F\uCBD7"+
-        "\uB7FD\u8260\uD9B5\u8261\uD9B7\uB1A3\uD3E1\uD9B9"+
-        "\u8262\uD0C5\u8263\uD9B6\u8264\u8265\uD9B1\u8266"+
-        "\uD9B2\uC1A9\uD9B3\u8267\u8268\uBCF3\uD0DE\uB8A9"+
-        "\u8269\uBEE3\u826A\uD9BD\u826B\u826C\u826D\u826E"+
-        "\uD9BA\u826F\uB0B3\u8270\u8271\u8272\uD9C2\u8273";
-
-    private final static String innerEncoderIndex5=
-        "\u8274\u8275\u8276\u8277\u8278\u8279\u827A\u827B"+
-        "\u827C\u827D\u827E\u8280\uD9C4\uB1B6\u8281\uD9BF"+
-        "\u8282\u8283\uB5B9\u8284\uBEF3\u8285\u8286\u8287"+
-        "\uCCC8\uBAF2\uD2D0\u8288\uD9C3\u8289\u828A\uBDE8"+
-        "\u828B\uB3AB\u828C\u828D\u828E\uD9C5\uBEEB\u828F"+
-        "\uD9C6\uD9BB\uC4DF\u8290\uD9BE\uD9C1\uD9C0\u8291"+
-        "\u8292\u8293\u8294\u8295\u8296\u8297\u8298\u8299"+
-        "\u829A\u829B\uD5AE\u829C\uD6B5\u829D\uC7E3\u829E"+
-        "\u829F\u82A0\u82A1\uD9C8\u82A2\u82A3\u82A4\uBCD9"+
-        "\uD9CA\u82A5\u82A6\u82A7\uD9BC\u82A8\uD9CB\uC6AB"+
-        "\u82A9\u82AA\u82AB\u82AC\u82AD\uD9C9\u82AE\u82AF"+
-        "\u82B0\u82B1\uD7F6\u82B2\uCDA3\u82B3\u82B4\u82B5"+
-        "\u82B6\u82B7\u82B8\u82B9\u82BA\uBDA1\u82BB\u82BC"+
-        "\u82BD\u82BE\u82BF\u82C0\uD9CC\u82C1\u82C2\u82C3"+
-        "\u82C4\u82C5\u82C6\u82C7\u82C8\u82C9\uC5BC\uCDB5"+
-        "\u82CA\u82CB\u82CC\uD9CD\u82CD\u82CE\uD9C7\uB3A5"+
-        "\uBFFE\u82CF\u82D0\u82D1\u82D2\uB8B5\u82D3\u82D4"+
-        "\uC0FC\u82D5\u82D6\u82D7\u82D8\uB0F8\u82D9\u82DA"+
-        "\u82DB\u82DC\u82DD\u82DE\u82DF\u82E0\u82E1\u82E2"+
-        "\u82E3\u82E4\u82E5\u82E6\u82E7\u82E8\u82E9\u82EA"+
-        "\u82EB\u82EC\u82ED\uB4F6\u82EE\uD9CE\u82EF\uD9CF"+
-        "\uB4A2\uD9D0\u82F0\u82F1\uB4DF\u82F2\u82F3\u82F4"+
-        "\u82F5\u82F6\uB0C1\u82F7\u82F8\u82F9\u82FA\u82FB"+
-        "\u82FC\u82FD\uD9D1\uC9B5\u82FE\u8340\u8341\u8342"+
-        "\u8343\u8344\u8345\u8346\u8347\u8348\u8349\u834A"+
-        "\u834B\u834C\u834D\u834E\u834F\u8350\u8351\uCFF1"+
-        "\u8352\u8353\u8354\u8355\u8356\u8357\uD9D2\u8358"+
-        "\u8359\u835A\uC1C5\u835B\u835C\u835D\u835E\u835F"+
-        "\u8360\u8361\u8362\u8363\u8364\u8365\uD9D6\uC9AE"+
-        "\u8366\u8367\u8368\u8369\uD9D5\uD9D4\uD9D7\u836A"+
-        "\u836B\u836C\u836D\uCBDB\u836E\uBDA9\u836F\u8370"+
-        "\u8371\u8372\u8373\uC6A7\u8374\u8375\u8376\u8377"+
-        "\u8378\u8379\u837A\u837B\u837C\u837D\uD9D3\uD9D8"+
-        "\u837E\u8380\u8381\uD9D9\u8382\u8383\u8384\u8385"+
-        "\u8386\u8387\uC8E5\u8388\u8389\u838A\u838B\u838C"+
-        "\u838D\u838E\u838F\u8390\u8391\u8392\u8393\u8394"+
-        "\u8395\uC0DC\u8396\u8397\u8398\u8399\u839A\u839B"+
-        "\u839C\u839D\u839E\u839F\u83A0\u83A1\u83A2\u83A3"+
-        "\u83A4\u83A5\u83A6\u83A7\u83A8\u83A9\u83AA\u83AB"+
-        "\u83AC\u83AD\u83AE\u83AF\u83B0\u83B1\u83B2\uB6F9"+
-        "\uD8A3\uD4CA\u83B3\uD4AA\uD0D6\uB3E4\uD5D7\u83B4"+
-        "\uCFC8\uB9E2\u83B5\uBFCB\u83B6\uC3E2\u83B7\u83B8"+
-        "\u83B9\uB6D2\u83BA\u83BB\uCDC3\uD9EE\uD9F0\u83BC"+
-        "\u83BD\u83BE\uB5B3\u83BF\uB6B5\u83C0\u83C1\u83C2"+
-        "\u83C3\u83C4\uBEA4\u83C5\u83C6\uC8EB\u83C7\u83C8"+
-        "\uC8AB\u83C9\u83CA\uB0CB\uB9AB\uC1F9\uD9E2\u83CB"+
-        "\uC0BC\uB9B2\u83CC\uB9D8\uD0CB\uB1F8\uC6E4\uBEDF"+
-        "\uB5E4\uD7C8\u83CD\uD1F8\uBCE6\uCADE\u83CE\u83CF"+
-        "\uBCBD\uD9E6\uD8E7\u83D0\u83D1\uC4DA\u83D2\u83D3"+
-        "\uB8D4\uC8BD\u83D4\u83D5\uB2E1\uD4D9\u83D6\u83D7"+
-        "\u83D8\u83D9\uC3B0\u83DA\u83DB\uC3E1\uDAA2\uC8DF"+
-        "\u83DC\uD0B4\u83DD\uBEFC\uC5A9\u83DE\u83DF\u83E0"+
-        "\uB9DA\u83E1\uDAA3\u83E2\uD4A9\uDAA4\u83E3\u83E4"+
-        "\u83E5\u83E6\u83E7\uD9FB\uB6AC\u83E8\u83E9\uB7EB"+
-        "\uB1F9\uD9FC\uB3E5\uBEF6\u83EA\uBFF6\uD2B1\uC0E4"+
-        "\u83EB\u83EC\u83ED\uB6B3\uD9FE\uD9FD\u83EE\u83EF"+
-        "\uBEBB\u83F0\u83F1\u83F2\uC6E0\u83F3\uD7BC\uDAA1"+
-        "\u83F4\uC1B9\u83F5\uB5F2\uC1E8\u83F6\u83F7\uBCF5"+
-        "\u83F8\uB4D5\u83F9\u83FA\u83FB\u83FC\u83FD\u83FE"+
-        "\u8440\u8441\u8442\uC1DD\u8443\uC4FD\u8444\u8445"+
-        "\uBCB8\uB7B2\u8446\u8447\uB7EF\u8448\u8449\u844A"+
-        "\u844B\u844C\u844D\uD9EC\u844E\uC6BE\u844F\uBFAD"+
-        "\uBBCB\u8450\u8451\uB5CA\u8452\uDBC9\uD0D7\u8453"+
-        "\uCDB9\uB0BC\uB3F6\uBBF7\uDBCA\uBAAF\u8454\uD4E4"+
-        "\uB5B6\uB5F3\uD8D6\uC8D0\u8455\u8456\uB7D6\uC7D0"+
-        "\uD8D7\u8457\uBFAF\u8458\u8459\uDBBB\uD8D8\u845A"+
-        "\u845B\uD0CC\uBBAE\u845C\u845D\u845E\uEBBE\uC1D0"+
-        "\uC1F5\uD4F2\uB8D5\uB4B4\u845F\uB3F5\u8460\u8461"+
-        "\uC9BE\u8462\u8463\u8464\uC5D0\u8465\u8466\u8467"+
-        "\uC5D9\uC0FB\u8468\uB1F0\u8469\uD8D9\uB9CE\u846A"+
-        "\uB5BD\u846B\u846C\uD8DA\u846D\u846E\uD6C6\uCBA2"+
-        "\uC8AF\uC9B2\uB4CC\uBFCC\u846F\uB9F4\u8470\uD8DB"+
-        "\uD8DC\uB6E7\uBCC1\uCCEA\u8471\u8472\u8473\u8474"+
-        "\u8475\u8476\uCFF7\u8477\uD8DD\uC7B0\u8478\u8479"+
-        "\uB9D0\uBDA3\u847A\u847B\uCCDE\u847C\uC6CA\u847D"+
-        "\u847E\u8480\u8481\u8482\uD8E0\u8483\uD8DE\u8484"+
-        "\u8485\uD8DF\u8486\u8487\u8488\uB0FE\u8489\uBEE7"+
-        "\u848A\uCAA3\uBCF4\u848B\u848C\u848D\u848E\uB8B1"+
-        "\u848F\u8490\uB8EE\u8491\u8492\u8493\u8494\u8495"+
-        "\u8496\u8497\u8498\u8499\u849A\uD8E2\u849B\uBDCB"+
-        "\u849C\uD8E4\uD8E3\u849D\u849E\u849F\u84A0\u84A1"+
-        "\uC5FC\u84A2\u84A3\u84A4\u84A5\u84A6\u84A7\u84A8"+
-        "\uD8E5\u84A9\u84AA\uD8E6\u84AB\u84AC\u84AD\u84AE"+
-        "\u84AF\u84B0\u84B1\uC1A6\u84B2\uC8B0\uB0EC\uB9A6"+
-        "\uBCD3\uCEF1\uDBBD\uC1D3\u84B3\u84B4\u84B5\u84B6"+
-        "\uB6AF\uD6FA\uC5AC\uBDD9\uDBBE\uDBBF\u84B7\u84B8"+
-        "\u84B9\uC0F8\uBEA2\uC0CD\u84BA\u84BB\u84BC\u84BD"+
-        "\u84BE\u84BF\u84C0\u84C1\u84C2\u84C3\uDBC0\uCAC6"+
-        "\u84C4\u84C5\u84C6\uB2AA\u84C7\u84C8\u84C9\uD3C2"+
-        "\u84CA\uC3E3\u84CB\uD1AB\u84CC\u84CD\u84CE\u84CF"+
-        "\uDBC2\u84D0\uC0D5\u84D1\u84D2\u84D3\uDBC3\u84D4"+
-        "\uBFB1\u84D5\u84D6\u84D7\u84D8\u84D9\u84DA\uC4BC"+
-        "\u84DB\u84DC\u84DD\u84DE\uC7DA\u84DF\u84E0\u84E1"+
-        "\u84E2\u84E3\u84E4\u84E5\u84E6\u84E7\u84E8\u84E9"+
-        "\uDBC4\u84EA\u84EB\u84EC\u84ED\u84EE\u84EF\u84F0"+
-        "\u84F1\uD9E8\uC9D7\u84F2\u84F3\u84F4\uB9B4\uCEF0"+
-        "\uD4C8\u84F5\u84F6\u84F7\u84F8\uB0FC\uB4D2\u84F9"+
-        "\uD0D9\u84FA\u84FB\u84FC\u84FD\uD9E9\u84FE\uDECB"+
-        "\uD9EB\u8540\u8541\u8542\u8543\uD8B0\uBBAF\uB1B1"+
-        "\u8544\uB3D7\uD8CE\u8545\u8546\uD4D1\u8547\u8548"+
-        "\uBDB3\uBFEF\u8549\uCFBB\u854A\u854B\uD8D0\u854C"+
-        "\u854D\u854E\uB7CB\u854F\u8550\u8551\uD8D1\u8552"+
-        "\u8553\u8554\u8555\u8556\u8557\u8558\u8559\u855A"+
-        "\u855B\uC6A5\uC7F8\uD2BD\u855C\u855D\uD8D2\uC4E4"+
-        "\u855E\uCAAE\u855F\uC7A7\u8560\uD8A6\u8561\uC9FD"+
-        "\uCEE7\uBBDC\uB0EB\u8562\u8563\u8564\uBBAA\uD0AD"+
-        "\u8565\uB1B0\uD7E4\uD7BF\u8566\uB5A5\uC2F4\uC4CF"+
-        "\u8567\u8568\uB2A9\u8569\uB2B7\u856A\uB1E5\uDFB2"+
-        "\uD5BC\uBFA8\uC2AC\uD8D5\uC2B1\u856B\uD8D4\uCED4"+
-        "\u856C\uDAE0\u856D\uCEC0\u856E\u856F\uD8B4\uC3AE"+
-        "\uD3A1\uCEA3\u8570\uBCB4\uC8B4\uC2D1\u8571\uBEED"+
-        "\uD0B6\u8572\uDAE1\u8573\u8574\u8575\u8576\uC7E4"+
-        "\u8577\u8578\uB3A7\u8579\uB6F2\uCCFC\uC0FA\u857A"+
-        "\u857B\uC0F7\u857C\uD1B9\uD1E1\uD8C7\u857D\u857E"+
-        "\u8580\u8581\u8582\u8583\u8584\uB2DE\u8585\u8586"+
-        "\uC0E5\u8587\uBAF1\u8588\u8589\uD8C8\u858A\uD4AD"+
-        "\u858B\u858C\uCFE1\uD8C9\u858D\uD8CA\uCFC3\u858E"+
-        "\uB3F8\uBEC7\u858F\u8590\u8591\u8592\uD8CB\u8593"+
-        "\u8594\u8595\u8596\u8597\u8598\u8599\uDBCC\u859A"+
-        "\u859B\u859C\u859D\uC8A5\u859E\u859F\u85A0\uCFD8"+
-        "\u85A1\uC8FE\uB2CE\u85A2\u85A3\u85A4\u85A5\u85A6"+
-        "\uD3D6\uB2E6\uBCB0\uD3D1\uCBAB\uB7B4\u85A7\u85A8"+
-        "\u85A9\uB7A2\u85AA\u85AB\uCAE5\u85AC\uC8A1\uCADC"+
-        "\uB1E4\uD0F0\u85AD\uC5D1\u85AE\u85AF\u85B0\uDBC5"+
-        "\uB5FE\u85B1\u85B2\uBFDA\uB9C5\uBEE4\uC1ED\u85B3"+
-        "\uDFB6\uDFB5\uD6BB\uBDD0\uD5D9\uB0C8\uB6A3\uBFC9"+
-        "\uCCA8\uDFB3\uCAB7\uD3D2\u85B4\uD8CF\uD2B6\uBAC5"+
-        "\uCBBE\uCCBE\u85B5\uDFB7\uB5F0\uDFB4\u85B6\u85B7"+
-        "\u85B8\uD3F5\u85B9\uB3D4\uB8F7\u85BA\uDFBA\u85BB"+
-        "\uBACF\uBCAA\uB5F5\u85BC\uCDAC\uC3FB\uBAF3\uC0F4"+
-        "\uCDC2\uCFF2\uDFB8\uCFC5\u85BD\uC2C0\uDFB9\uC2F0"+
-        "\u85BE\u85BF\u85C0\uBEFD\u85C1\uC1DF\uCDCC\uD2F7"+
-        "\uB7CD\uDFC1\u85C2\uDFC4\u85C3\u85C4\uB7F1\uB0C9"+
-        "\uB6D6\uB7D4\u85C5\uBAAC\uCCFD\uBFD4\uCBB1\uC6F4"+
-        "\u85C6\uD6A8\uDFC5\u85C7\uCEE2\uB3B3\u85C8\u85C9"+
-        "\uCEFC\uB4B5\u85CA\uCEC7\uBAF0\u85CB\uCEE1\u85CC"+
-        "\uD1BD\u85CD\u85CE\uDFC0\u85CF\u85D0\uB4F4\u85D1"+
-        "\uB3CA\u85D2\uB8E6\uDFBB\u85D3\u85D4\u85D5\u85D6"+
-        "\uC4C5\u85D7\uDFBC\uDFBD\uDFBE\uC5BB\uDFBF\uDFC2"+
-        "\uD4B1\uDFC3\u85D8\uC7BA\uCED8\u85D9\u85DA\u85DB"+
-        "\u85DC\u85DD\uC4D8\u85DE\uDFCA\u85DF\uDFCF\u85E0"+
-        "\uD6DC\u85E1\u85E2\u85E3\u85E4\u85E5\u85E6\u85E7"+
-        "\u85E8\uDFC9\uDFDA\uCEB6\u85E9\uBAC7\uDFCE\uDFC8"+
-        "\uC5DE\u85EA\u85EB\uC9EB\uBAF4\uC3FC\u85EC\u85ED"+
-        "\uBED7\u85EE\uDFC6\u85EF\uDFCD\u85F0\uC5D8\u85F1"+
-        "\u85F2\u85F3\u85F4\uD5A6\uBACD\u85F5\uBECC\uD3BD"+
-        "\uB8C0\u85F6\uD6E4\u85F7\uDFC7\uB9BE\uBFA7\u85F8"+
-        "\u85F9\uC1FC\uDFCB\uDFCC\u85FA\uDFD0\u85FB\u85FC"+
-        "\u85FD\u85FE\u8640\uDFDB\uDFE5\u8641\uDFD7\uDFD6"+
-        "\uD7C9\uDFE3\uDFE4\uE5EB\uD2A7\uDFD2\u8642\uBFA9"+
-        "\u8643\uD4DB\u8644\uBFC8\uDFD4\u8645\u8646\u8647"+
-        "\uCFCC\u8648\u8649\uDFDD\u864A\uD1CA\u864B\uDFDE"+
-        "\uB0A7\uC6B7\uDFD3\u864C\uBAE5\u864D\uB6DF\uCDDB"+
-        "\uB9FE\uD4D5\u864E\u864F\uDFDF\uCFEC\uB0A5\uDFE7"+
-        "\uDFD1\uD1C6\uDFD5\uDFD8\uDFD9\uDFDC\u8650\uBBA9"+
-        "\u8651\uDFE0\uDFE1\u8652\uDFE2\uDFE6\uDFE8\uD3B4"+
-        "\u8653\u8654\u8655\u8656\u8657\uB8E7\uC5B6\uDFEA"+
-        "\uC9DA\uC1A8\uC4C4\u8658\u8659\uBFDE\uCFF8\u865A"+
-        "\u865B\u865C\uD5DC\uDFEE\u865D\u865E\u865F\u8660"+
-        "\u8661\u8662\uB2B8\u8663\uBADF\uDFEC\u8664\uDBC1"+
-        "\u8665\uD1E4\u8666\u8667\u8668\u8669\uCBF4\uB4BD"+
-        "\u866A\uB0A6\u866B\u866C\u866D\u866E\u866F\uDFF1"+
-        "\uCCC6\uDFF2\u8670\u8671\uDFED\u8672\u8673\u8674"+
-        "\u8675\u8676\u8677\uDFE9\u8678\u8679\u867A\u867B"+
-        "\uDFEB\u867C\uDFEF\uDFF0\uBBBD\u867D\u867E\uDFF3"+
-        "\u8680\u8681\uDFF4\u8682\uBBA3\u8683\uCADB\uCEA8"+
-        "\uE0A7\uB3AA\u8684\uE0A6\u8685\u8686\u8687\uE0A1"+
-        "\u8688\u8689\u868A\u868B\uDFFE\u868C\uCDD9\uDFFC"+
-        "\u868D\uDFFA\u868E\uBFD0\uD7C4\u868F\uC9CC\u8690"+
-        "\u8691\uDFF8\uB0A1\u8692\u8693\u8694\u8695\u8696"+
-        "\uDFFD\u8697\u8698\u8699\u869A\uDFFB\uE0A2\u869B"+
-        "\u869C\u869D\u869E\u869F\uE0A8\u86A0\u86A1\u86A2"+
-        "\u86A3\uB7C8\u86A4\u86A5\uC6A1\uC9B6\uC0B2\uDFF5"+
-        "\u86A6\u86A7\uC5BE\u86A8\uD8C4\uDFF9\uC4F6\u86A9"+
-        "\u86AA\u86AB\u86AC\u86AD\u86AE\uE0A3\uE0A4\uE0A5"+
-        "\uD0A5\u86AF\u86B0\uE0B4\uCCE4\u86B1\uE0B1\u86B2"+
-        "\uBFA6\uE0AF\uCEB9\uE0AB\uC9C6\u86B3\u86B4\uC0AE"+
-        "\uE0AE\uBAED\uBAB0\uE0A9\u86B5\u86B6\u86B7\uDFF6"+
-        "\u86B8\uE0B3\u86B9\u86BA\uE0B8\u86BB\u86BC\u86BD"+
-        "\uB4AD\uE0B9\u86BE\u86BF\uCFB2\uBAC8\u86C0\uE0B0"+
-        "\u86C1\u86C2\u86C3\u86C4\u86C5\u86C6\u86C7\uD0FA"+
-        "\u86C8\u86C9\u86CA\u86CB\u86CC\u86CD\u86CE\u86CF"+
-        "\u86D0\uE0AC\u86D1\uD4FB\u86D2\uDFF7\u86D3\uC5E7"+
-        "\u86D4\uE0AD\u86D5\uD3F7\u86D6\uE0B6\uE0B7\u86D7"+
-        "\u86D8\u86D9\u86DA\u86DB\uE0C4\uD0E1\u86DC\u86DD"+
-        "\u86DE\uE0BC\u86DF\u86E0\uE0C9\uE0CA\u86E1\u86E2"+
-        "\u86E3\uE0BE\uE0AA\uC9A4\uE0C1\u86E4\uE0B2\u86E5"+
-        "\u86E6\u86E7\u86E8\u86E9\uCAC8\uE0C3\u86EA\uE0B5"+
-        "\u86EB\uCECB\u86EC\uCBC3\uE0CD\uE0C6\uE0C2\u86ED"+
-        "\uE0CB\u86EE\uE0BA\uE0BF\uE0C0\u86EF\u86F0\uE0C5"+
-        "\u86F1\u86F2\uE0C7\uE0C8\u86F3\uE0CC\u86F4\uE0BB"+
-        "\u86F5\u86F6\u86F7\u86F8\u86F9\uCBD4\uE0D5\u86FA"+
-        "\uE0D6\uE0D2\u86FB\u86FC\u86FD\u86FE\u8740\u8741"+
-        "\uE0D0\uBCCE\u8742\u8743\uE0D1\u8744\uB8C2\uD8C5"+
-        "\u8745\u8746\u8747\u8748\u8749\u874A\u874B\u874C"+
-        "\uD0EA\u874D\u874E\uC2EF\u874F\u8750\uE0CF\uE0BD"+
-        "\u8751\u8752\u8753\uE0D4\uE0D3\u8754\u8755\uE0D7"+
-        "\u8756\u8757\u8758\u8759\uE0DC\uE0D8\u875A\u875B"+
-        "\u875C\uD6F6\uB3B0\u875D\uD7EC\u875E\uCBBB\u875F"+
-        "\u8760\uE0DA\u8761\uCEFB\u8762\u8763\u8764\uBAD9"+
-        "\u8765\u8766\u8767\u8768\u8769\u876A\u876B\u876C"+
-        "\u876D\u876E\u876F\u8770\uE0E1\uE0DD\uD2AD\u8771"+
-        "\u8772\u8773\u8774\u8775\uE0E2\u8776\u8777\uE0DB"+
-        "\uE0D9\uE0DF\u8778\u8779\uE0E0\u877A\u877B\u877C"+
-        "\u877D\u877E\uE0DE\u8780\uE0E4\u8781\u8782\u8783"+
-        "\uC6F7\uD8AC\uD4EB\uE0E6\uCAC9\u8784\u8785\u8786"+
-        "\u8787\uE0E5\u8788\u8789\u878A\u878B\uB8C1\u878C"+
-        "\u878D\u878E\u878F\uE0E7\uE0E8\u8790\u8791\u8792"+
-        "\u8793\u8794\u8795\u8796\u8797\uE0E9\uE0E3\u8798"+
-        "\u8799\u879A\u879B\u879C\u879D\u879E\uBABF\uCCE7"+
-        "\u879F\u87A0\u87A1\uE0EA\u87A2\u87A3\u87A4\u87A5"+
-        "\u87A6\u87A7\u87A8\u87A9\u87AA\u87AB\u87AC\u87AD"+
-        "\u87AE\u87AF\u87B0\uCFF9\u87B1\u87B2\u87B3\u87B4"+
-        "\u87B5\u87B6\u87B7\u87B8\u87B9\u87BA\u87BB\uE0EB"+
-        "\u87BC\u87BD\u87BE\u87BF\u87C0\u87C1\u87C2\uC8C2"+
-        "\u87C3\u87C4\u87C5\u87C6\uBDC0\u87C7\u87C8\u87C9"+
-        "\u87CA\u87CB\u87CC\u87CD\u87CE\u87CF\u87D0\u87D1"+
-        "\u87D2\u87D3\uC4D2\u87D4\u87D5\u87D6\u87D7\u87D8"+
-        "\u87D9\u87DA\u87DB\u87DC\uE0EC\u87DD\u87DE\uE0ED"+
-        "\u87DF\u87E0\uC7F4\uCBC4\u87E1\uE0EE\uBBD8\uD8B6"+
-        "\uD2F2\uE0EF\uCDC5\u87E2\uB6DA\u87E3\u87E4\u87E5"+
-        "\u87E6\u87E7\u87E8\uE0F1\u87E9\uD4B0\u87EA\u87EB"+
-        "\uC0A7\uB4D1\u87EC\u87ED\uCEA7\uE0F0\u87EE\u87EF"+
-        "\u87F0\uE0F2\uB9CC\u87F1\u87F2\uB9FA\uCDBC\uE0F3"+
-        "\u87F3\u87F4\u87F5\uC6D4\uE0F4\u87F6\uD4B2\u87F7"+
-        "\uC8A6\uE0F6\uE0F5\u87F8\u87F9\u87FA\u87FB\u87FC"+
-        "\u87FD\u87FE\u8840\u8841\u8842\u8843\u8844\u8845"+
-        "\u8846\u8847\u8848\u8849\uE0F7\u884A\u884B\uCDC1"+
-        "\u884C\u884D\u884E\uCAA5\u884F\u8850\u8851\u8852"+
-        "\uD4DA\uDBD7\uDBD9\u8853\uDBD8\uB9E7\uDBDC\uDBDD"+
-        "\uB5D8\u8854\u8855\uDBDA\u8856\u8857\u8858\u8859"+
-        "\u885A\uDBDB\uB3A1\uDBDF\u885B\u885C\uBBF8\u885D"+
-        "\uD6B7\u885E\uDBE0\u885F\u8860\u8861\u8862\uBEF9"+
-        "\u8863\u8864\uB7BB\u8865\uDBD0\uCCAE\uBFB2\uBBB5"+
-        "\uD7F8\uBFD3\u8866\u8867\u8868\u8869\u886A\uBFE9"+
-        "\u886B\u886C\uBCE1\uCCB3\uDBDE\uB0D3\uCEEB\uB7D8"+
-        "\uD7B9\uC6C2\u886D\u886E\uC0A4\u886F\uCCB9\u8870"+
-        "\uDBE7\uDBE1\uC6BA\uDBE3\u8871\uDBE8\u8872\uC5F7"+
-        "\u8873\u8874\u8875\uDBEA\u8876\u8877\uDBE9\uBFC0"+
-        "\u8878\u8879\u887A\uDBE6\uDBE5\u887B\u887C\u887D"+
-        "\u887E\u8880\uB4B9\uC0AC\uC2A2\uDBE2\uDBE4\u8881"+
-        "\u8882\u8883\u8884\uD0CD\uDBED\u8885\u8886\u8887"+
-        "\u8888\u8889\uC0DD\uDBF2\u888A\u888B\u888C\u888D"+
-        "\u888E\u888F\u8890\uB6E2\u8891\u8892\u8893\u8894"+
-        "\uDBF3\uDBD2\uB9B8\uD4AB\uDBEC\u8895\uBFD1\uDBF0"+
-        "\u8896\uDBD1\u8897\uB5E6\u8898\uDBEB\uBFE5\u8899"+
-        "\u889A\u889B\uDBEE\u889C\uDBF1\u889D\u889E\u889F"+
-        "\uDBF9\u88A0\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6"+
-        "\u88A7\u88A8\uB9A1\uB0A3\u88A9\u88AA\u88AB\u88AC"+
-        "\u88AD\u88AE\u88AF\uC2F1\u88B0\u88B1\uB3C7\uDBEF"+
-        "\u88B2\u88B3\uDBF8\u88B4\uC6D2\uDBF4\u88B5\u88B6"+
-        "\uDBF5\uDBF7\uDBF6\u88B7\u88B8\uDBFE\u88B9\uD3F2"+
-        "\uB2BA\u88BA\u88BB\u88BC\uDBFD\u88BD\u88BE\u88BF"+
-        "\u88C0\u88C1\u88C2\u88C3\u88C4\uDCA4\u88C5\uDBFB"+
-        "\u88C6\u88C7\u88C8\u88C9\uDBFA\u88CA\u88CB\u88CC"+
-        "\uDBFC\uC5E0\uBBF9\u88CD\u88CE\uDCA3\u88CF\u88D0"+
-        "\uDCA5\u88D1\uCCC3\u88D2\u88D3\u88D4\uB6D1\uDDC0"+
-        "\u88D5\u88D6\u88D7\uDCA1\u88D8\uDCA2\u88D9\u88DA"+
-        "\u88DB\uC7B5\u88DC\u88DD\u88DE\uB6E9\u88DF\u88E0"+
-        "\u88E1\uDCA7\u88E2\u88E3\u88E4\u88E5\uDCA6\u88E6"+
-        "\uDCA9\uB1A4\u88E7\u88E8\uB5CC\u88E9\u88EA\u88EB"+
-        "\u88EC\u88ED\uBFB0\u88EE\u88EF\u88F0\u88F1\u88F2"+
-        "\uD1DF\u88F3\u88F4\u88F5\u88F6\uB6C2\u88F7\u88F8"+
-        "\u88F9\u88FA\u88FB\u88FC\u88FD\u88FE\u8940\u8941"+
-        "\u8942\u8943\u8944\u8945\uDCA8\u8946\u8947\u8948"+
-        "\u8949\u894A\u894B\u894C\uCBFA\uEBF3\u894D\u894E"+
-        "\u894F\uCBDC\u8950\u8951\uCBFE\u8952\u8953\u8954"+
-        "\uCCC1\u8955\u8956\u8957\u8958\u8959\uC8FB\u895A"+
-        "\u895B\u895C\u895D\u895E\u895F\uDCAA\u8960\u8961"+
-        "\u8962\u8963\u8964\uCCEE\uDCAB\u8965\u8966\u8967"+
-        "\u8968\u8969\u896A\u896B\u896C\u896D\u896E\u896F"+
-        "\u8970\u8971\u8972\u8973\u8974\u8975\uDBD3\u8976"+
-        "\uDCAF\uDCAC\u8977\uBEB3\u8978\uCAFB\u8979\u897A"+
-        "\u897B\uDCAD\u897C\u897D\u897E\u8980\u8981\u8982"+
-        "\u8983\u8984\uC9CA\uC4B9\u8985\u8986\u8987\u8988"+
-        "\u8989\uC7BD\uDCAE\u898A\u898B\u898C\uD4F6\uD0E6"+
-        "\u898D\u898E\u898F\u8990\u8991\u8992\u8993\u8994"+
-        "\uC4AB\uB6D5\u8995\u8996\u8997\u8998\u8999\u899A"+
-        "\u899B\u899C\u899D\u899E\u899F\u89A0\u89A1\u89A2"+
-        "\u89A3\u89A4\u89A5\u89A6\uDBD4\u89A7\u89A8\u89A9"+
-        "\u89AA\uB1DA\u89AB\u89AC\u89AD\uDBD5\u89AE\u89AF"+
-        "\u89B0\u89B1\u89B2\u89B3\u89B4\u89B5\u89B6\u89B7"+
-        "\u89B8\uDBD6\u89B9\u89BA\u89BB\uBABE\u89BC\u89BD"+
-        "\u89BE\u89BF\u89C0\u89C1\u89C2\u89C3\u89C4\u89C5"+
-        "\u89C6\u89C7\u89C8\u89C9\uC8C0\u89CA\u89CB\u89CC"+
-        "\u89CD\u89CE\u89CF\uCABF\uC8C9\u89D0\uD7B3\u89D1"+
-        "\uC9F9\u89D2\u89D3\uBFC7\u89D4\u89D5\uBAF8\u89D6"+
-        "\u89D7\uD2BC\u89D8\u89D9\u89DA\u89DB\u89DC\u89DD"+
-        "\u89DE\u89DF\uE2BA\u89E0\uB4A6\u89E1\u89E2\uB1B8"+
-        "\u89E3\u89E4\u89E5\u89E6\u89E7\uB8B4\u89E8\uCFC4"+
-        "\u89E9\u89EA\u89EB\u89EC\uD9E7\uCFA6\uCDE2\u89ED"+
-        "\u89EE\uD9ED\uB6E0\u89EF\uD2B9\u89F0\u89F1\uB9BB"+
-        "\u89F2\u89F3\u89F4\u89F5\uE2B9\uE2B7\u89F6\uB4F3"+
-        "\u89F7\uCCEC\uCCAB\uB7F2\u89F8\uD8B2\uD1EB\uBABB"+
-        "\u89F9\uCAA7\u89FA\u89FB\uCDB7\u89FC\u89FD\uD2C4"+
-        "\uBFE4\uBCD0\uB6E1\u89FE\uDEC5\u8A40\u8A41\u8A42"+
-        "\u8A43\uDEC6\uDBBC\u8A44\uD1D9\u8A45\u8A46\uC6E6"+
-        "\uC4CE\uB7EE\u8A47\uB7DC\u8A48\u8A49\uBFFC\uD7E0"+
-        "\u8A4A\uC6F5\u8A4B\u8A4C\uB1BC\uDEC8\uBDB1\uCCD7"+
-        "\uDECA\u8A4D\uDEC9\u8A4E\u8A4F\u8A50\u8A51\u8A52"+
-        "\uB5EC\u8A53\uC9DD\u8A54\u8A55\uB0C2\u8A56\u8A57"+
-        "\u8A58\u8A59\u8A5A\u8A5B\u8A5C\u8A5D\u8A5E\u8A5F"+
-        "\u8A60\u8A61\u8A62\uC5AE\uC5AB\u8A63\uC4CC\u8A64"+
-        "\uBCE9\uCBFD\u8A65\u8A66\u8A67\uBAC3\u8A68\u8A69"+
-        "\u8A6A\uE5F9\uC8E7\uE5FA\uCDFD\u8A6B\uD7B1\uB8BE"+
-        "\uC2E8\u8A6C\uC8D1\u8A6D\u8A6E\uE5FB\u8A6F\u8A70"+
-        "\u8A71\u8A72\uB6CA\uBCCB\u8A73\u8A74\uD1FD\uE6A1"+
-        "\u8A75\uC3EE\u8A76\u8A77\u8A78\u8A79\uE6A4\u8A7A"+
-        "\u8A7B\u8A7C\u8A7D\uE5FE\uE6A5\uCDD7\u8A7E\u8A80"+
-        "\uB7C1\uE5FC\uE5FD\uE6A3\u8A81\u8A82\uC4DD\uE6A8"+
-        "\u8A83\u8A84\uE6A7\u8A85\u8A86\u8A87\u8A88\u8A89"+
-        "\u8A8A\uC3C3\u8A8B\uC6DE\u8A8C\u8A8D\uE6AA\u8A8E"+
-        "\u8A8F\u8A90\u8A91\u8A92\u8A93\u8A94\uC4B7\u8A95"+
-        "\u8A96\u8A97\uE6A2\uCABC\u8A98\u8A99\u8A9A\u8A9B"+
-        "\uBDE3\uB9C3\uE6A6\uD0D5\uCEAF\u8A9C\u8A9D\uE6A9"+
-        "\uE6B0\u8A9E\uD2A6\u8A9F\uBDAA\uE6AD\u8AA0\u8AA1"+
-        "\u8AA2\u8AA3\u8AA4\uE6AF\u8AA5\uC0D1\u8AA6\u8AA7"+
-        "\uD2CC\u8AA8\u8AA9\u8AAA\uBCA7\u8AAB\u8AAC\u8AAD"+
-        "\u8AAE\u8AAF\u8AB0\u8AB1\u8AB2\u8AB3\u8AB4\u8AB5"+
-        "\u8AB6\uE6B1\u8AB7\uD2F6\u8AB8\u8AB9\u8ABA\uD7CB"+
-        "\u8ABB\uCDFE\u8ABC\uCDDE\uC2A6\uE6AB\uE6AC\uBDBF"+
-        "\uE6AE\uE6B3\u8ABD\u8ABE\uE6B2\u8ABF\u8AC0\u8AC1"+
-        "\u8AC2\uE6B6\u8AC3\uE6B8\u8AC4\u8AC5\u8AC6\u8AC7"+
-        "\uC4EF\u8AC8\u8AC9\u8ACA\uC4C8\u8ACB\u8ACC\uBEEA"+
-        "\uC9EF\u8ACD\u8ACE\uE6B7\u8ACF\uB6F0\u8AD0\u8AD1"+
-        "\u8AD2\uC3E4\u8AD3\u8AD4\u8AD5\u8AD6\u8AD7\u8AD8"+
-        "\u8AD9\uD3E9\uE6B4\u8ADA\uE6B5\u8ADB\uC8A2\u8ADC"+
-        "\u8ADD\u8ADE\u8ADF\u8AE0\uE6BD\u8AE1\u8AE2\u8AE3"+
-        "\uE6B9\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8\uC6C5\u8AE9"+
-        "\u8AEA\uCDF1\uE6BB\u8AEB\u8AEC\u8AED\u8AEE\u8AEF"+
-        "\u8AF0\u8AF1\u8AF2\u8AF3\u8AF4\uE6BC\u8AF5\u8AF6"+
-        "\u8AF7\u8AF8\uBBE9\u8AF9\u8AFA\u8AFB\u8AFC\u8AFD"+
-        "\u8AFE\u8B40\uE6BE\u8B41\u8B42\u8B43\u8B44\uE6BA"+
-        "\u8B45\u8B46\uC0B7\u8B47\u8B48\u8B49\u8B4A\u8B4B"+
-        "\u8B4C\u8B4D\u8B4E\u8B4F\uD3A4\uE6BF\uC9F4\uE6C3"+
-        "\u8B50\u8B51\uE6C4\u8B52\u8B53\u8B54\u8B55\uD0F6"+
-        "\u8B56\u8B57\u8B58\u8B59\u8B5A\u8B5B\u8B5C\u8B5D"+
-        "\u8B5E\u8B5F\u8B60\u8B61\u8B62\u8B63\u8B64\u8B65"+
-        "\u8B66\u8B67\uC3BD\u8B68\u8B69\u8B6A\u8B6B\u8B6C"+
-        "\u8B6D\u8B6E\uC3C4\uE6C2\u8B6F\u8B70\u8B71\u8B72"+
-        "\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78\u8B79\u8B7A"+
-        "\u8B7B\u8B7C\uE6C1\u8B7D\u8B7E\u8B80\u8B81\u8B82"+
-        "\u8B83\u8B84\uE6C7\uCFB1\u8B85\uEBF4\u8B86\u8B87"+
-        "\uE6CA\u8B88\u8B89\u8B8A\u8B8B\u8B8C\uE6C5\u8B8D"+
-        "\u8B8E\uBCDE\uC9A9\u8B8F\u8B90\u8B91\u8B92\u8B93"+
-        "\u8B94\uBCB5\u8B95\u8B96\uCFD3\u8B97\u8B98\u8B99"+
-        "\u8B9A\u8B9B\uE6C8\u8B9C\uE6C9\u8B9D\uE6CE\u8B9E"+
-        "\uE6D0\u8B9F\u8BA0\u8BA1\uE6D1\u8BA2\u8BA3\u8BA4"+
-        "\uE6CB\uB5D5\u8BA5\uE6CC\u8BA6\u8BA7\uE6CF\u8BA8"+
-        "\u8BA9\uC4DB\u8BAA\uE6C6\u8BAB\u8BAC\u8BAD\u8BAE"+
-        "\u8BAF\uE6CD\u8BB0\u8BB1\u8BB2\u8BB3\u8BB4\u8BB5"+
-        "\u8BB6\u8BB7\u8BB8\u8BB9\u8BBA\u8BBB\u8BBC\u8BBD"+
-        "\u8BBE\u8BBF\u8BC0\u8BC1\u8BC2\u8BC3\u8BC4\u8BC5"+
-        "\u8BC6\uE6D2\u8BC7\u8BC8\u8BC9\u8BCA\u8BCB\u8BCC"+
-        "\u8BCD\u8BCE\u8BCF\u8BD0\u8BD1\u8BD2\uE6D4\uE6D3"+
-        "\u8BD3\u8BD4\u8BD5\u8BD6\u8BD7\u8BD8\u8BD9\u8BDA"+
-        "\u8BDB\u8BDC\u8BDD\u8BDE\u8BDF\u8BE0\u8BE1\u8BE2"+
-        "\u8BE3\u8BE4\u8BE5\u8BE6\u8BE7\u8BE8\u8BE9\u8BEA"+
-        "\u8BEB\u8BEC\uE6D5\u8BED\uD9F8\u8BEE\u8BEF\uE6D6"+
-        "\u8BF0\u8BF1\u8BF2\u8BF3\u8BF4\u8BF5\u8BF6\u8BF7"+
-        "\uE6D7\u8BF8\u8BF9\u8BFA\u8BFB\u8BFC\u8BFD\u8BFE"+
-        "\u8C40\u8C41\u8C42\u8C43\u8C44\u8C45\u8C46\u8C47"+
-        "\uD7D3\uE6DD\u8C48\uE6DE\uBFD7\uD4D0\u8C49\uD7D6"+
-        "\uB4E6\uCBEF\uE6DA\uD8C3\uD7CE\uD0A2\u8C4A\uC3CF"+
-        "\u8C4B\u8C4C\uE6DF\uBCBE\uB9C2\uE6DB\uD1A7\u8C4D"+
-        "\u8C4E\uBAA2\uC2CF\u8C4F\uD8AB\u8C50\u8C51\u8C52"+
-        "\uCAEB\uE5EE\u8C53\uE6DC\u8C54\uB7F5\u8C55\u8C56"+
-        "\u8C57\u8C58\uC8E6\u8C59\u8C5A\uC4F5\u8C5B\u8C5C"+
-        "\uE5B2\uC4FE\u8C5D\uCBFC\uE5B3\uD5AC\u8C5E\uD3EE"+
-        "\uCAD8\uB0B2\u8C5F\uCBCE\uCDEA\u8C60\u8C61\uBAEA"+
-        "\u8C62\u8C63\u8C64\uE5B5\u8C65\uE5B4\u8C66\uD7DA"+
-        "\uB9D9\uD6E6\uB6A8\uCDF0\uD2CB\uB1A6\uCAB5\u8C67"+
-        "\uB3E8\uC9F3\uBFCD\uD0FB\uCAD2\uE5B6\uBBC2\u8C68"+
-        "\u8C69\u8C6A\uCFDC\uB9AC\u8C6B\u8C6C\u8C6D\u8C6E"+
-        "\uD4D7\u8C6F\u8C70\uBAA6\uD1E7\uCFFC\uBCD2\u8C71"+
-        "\uE5B7\uC8DD\u8C72\u8C73\u8C74\uBFED\uB1F6\uCBDE"+
-        "\u8C75\u8C76\uBCC5\u8C77\uBCC4\uD2FA\uC3DC\uBFDC"+
-        "\u8C78\u8C79\u8C7A\u8C7B\uB8BB\u8C7C\u8C7D\u8C7E"+
-        "\uC3C2\u8C80\uBAAE\uD4A2\u8C81\u8C82\u8C83\u8C84"+
-        "\u8C85\u8C86\u8C87\u8C88\u8C89\uC7DE\uC4AF\uB2EC"+
-        "\u8C8A\uB9D1\u8C8B\u8C8C\uE5BB\uC1C8\u8C8D\u8C8E"+
-        "\uD5AF\u8C8F\u8C90\u8C91\u8C92\u8C93\uE5BC\u8C94"+
-        "\uE5BE\u8C95\u8C96\u8C97\u8C98\u8C99\u8C9A\u8C9B"+
-        "\uB4E7\uB6D4\uCBC2\uD1B0\uB5BC\u8C9C\u8C9D\uCAD9"+
-        "\u8C9E\uB7E2\u8C9F\u8CA0\uC9E4\u8CA1\uBDAB\u8CA2"+
-        "\u8CA3\uCEBE\uD7F0\u8CA4\u8CA5\u8CA6\u8CA7\uD0A1"+
-        "\u8CA8\uC9D9\u8CA9\u8CAA\uB6FB\uE6D8\uBCE2\u8CAB"+
-        "\uB3BE\u8CAC\uC9D0\u8CAD\uE6D9\uB3A2\u8CAE\u8CAF"+
-        "\u8CB0\u8CB1\uDECC\u8CB2\uD3C8\uDECD\u8CB3\uD2A2"+
-        "\u8CB4\u8CB5\u8CB6\u8CB7\uDECE\u8CB8\u8CB9\u8CBA"+
-        "\u8CBB\uBECD\u8CBC\u8CBD\uDECF\u8CBE\u8CBF\u8CC0"+
-        "\uCAAC\uD2FC\uB3DF\uE5EA\uC4E1\uBEA1\uCEB2\uC4F2"+
-        "\uBED6\uC6A8\uB2E3\u8CC1\u8CC2\uBED3\u8CC3\u8CC4"+
-        "\uC7FC\uCCEB\uBDEC\uCEDD\u8CC5\u8CC6\uCABA\uC6C1"+
-        "\uE5EC\uD0BC\u8CC7\u8CC8\u8CC9\uD5B9\u8CCA\u8CCB"+
-        "\u8CCC\uE5ED\u8CCD\u8CCE\u8CCF\u8CD0\uCAF4\u8CD1"+
-        "\uCDC0\uC2C5\u8CD2\uE5EF\u8CD3\uC2C4\uE5F0\u8CD4"+
-        "\u8CD5\u8CD6\u8CD7\u8CD8\u8CD9\u8CDA\uE5F8\uCDCD"+
-        "\u8CDB\uC9BD\u8CDC\u8CDD\u8CDE\u8CDF\u8CE0\u8CE1"+
-        "\u8CE2\uD2D9\uE1A8\u8CE3\u8CE4\u8CE5\u8CE6\uD3EC"+
-        "\u8CE7\uCBEA\uC6F1\u8CE8\u8CE9\u8CEA\u8CEB\u8CEC"+
-        "\uE1AC\u8CED\u8CEE\u8CEF\uE1A7\uE1A9\u8CF0\u8CF1"+
-        "\uE1AA\uE1AF\u8CF2\u8CF3\uB2ED\u8CF4\uE1AB\uB8DA"+
-        "\uE1AD\uE1AE\uE1B0\uB5BA\uE1B1\u8CF5\u8CF6\u8CF7"+
-        "\u8CF8\u8CF9\uE1B3\uE1B8\u8CFA\u8CFB\u8CFC\u8CFD"+
-        "\u8CFE\uD1D2\u8D40\uE1B6\uE1B5\uC1EB\u8D41\u8D42"+
-        "\u8D43\uE1B7\u8D44\uD4C0\u8D45\uE1B2\u8D46\uE1BA"+
-        "\uB0B6\u8D47\u8D48\u8D49\u8D4A\uE1B4\u8D4B\uBFF9"+
-        "\u8D4C\uE1B9\u8D4D\u8D4E\uE1BB\u8D4F\u8D50\u8D51"+
-        "\u8D52\u8D53\u8D54\uE1BE\u8D55\u8D56\u8D57\u8D58"+
-        "\u8D59\u8D5A\uE1BC\u8D5B\u8D5C\u8D5D\u8D5E\u8D5F"+
-        "\u8D60\uD6C5\u8D61\u8D62\u8D63\u8D64\u8D65\u8D66"+
-        "\u8D67\uCFBF\u8D68\u8D69\uE1BD\uE1BF\uC2CD\u8D6A"+
-        "\uB6EB\u8D6B\uD3F8\u8D6C\u8D6D\uC7CD\u8D6E\u8D6F"+
-        "\uB7E5\u8D70\u8D71\u8D72\u8D73\u8D74\u8D75\u8D76"+
-        "\u8D77\u8D78\u8D79\uBEFE\u8D7A\u8D7B\u8D7C\u8D7D"+
-        "\u8D7E\u8D80\uE1C0\uE1C1\u8D81\u8D82\uE1C7\uB3E7"+
-        "\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88\uC6E9\u8D89"+
-        "\u8D8A\u8D8B\u8D8C\u8D8D\uB4DE\u8D8E\uD1C2\u8D8F"+
-        "\u8D90\u8D91\u8D92\uE1C8\u8D93\u8D94\uE1C6\u8D95"+
-        "\u8D96\u8D97\u8D98\u8D99\uE1C5\u8D9A\uE1C3\uE1C2"+
-        "\u8D9B\uB1C0\u8D9C\u8D9D\u8D9E\uD5B8\uE1C4\u8D9F"+
-        "\u8DA0\u8DA1\u8DA2\u8DA3\uE1CB\u8DA4\u8DA5\u8DA6"+
-        "\u8DA7\u8DA8\u8DA9\u8DAA\u8DAB\uE1CC\uE1CA\u8DAC"+
-        "\u8DAD\u8DAE\u8DAF\u8DB0\u8DB1\u8DB2\u8DB3\uEFFA"+
-        "\u8DB4\u8DB5\uE1D3\uE1D2\uC7B6\u8DB6\u8DB7\u8DB8"+
-        "\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD\u8DBE\u8DBF\u8DC0"+
-        "\uE1C9\u8DC1\u8DC2\uE1CE\u8DC3\uE1D0\u8DC4\u8DC5"+
-        "\u8DC6\u8DC7\u8DC8\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD"+
-        "\u8DCE\uE1D4\u8DCF\uE1D1\uE1CD\u8DD0\u8DD1\uE1CF"+
-        "\u8DD2\u8DD3\u8DD4\u8DD5\uE1D5\u8DD6\u8DD7\u8DD8"+
-        "\u8DD9\u8DDA\u8DDB\u8DDC\u8DDD\u8DDE\u8DDF\u8DE0"+
-        "\u8DE1\u8DE2\uE1D6\u8DE3\u8DE4\u8DE5\u8DE6\u8DE7"+
-        "\u8DE8\u8DE9\u8DEA\u8DEB\u8DEC\u8DED\u8DEE\u8DEF"+
-        "\u8DF0\u8DF1\u8DF2\u8DF3\u8DF4\u8DF5\u8DF6\u8DF7"+
-        "\u8DF8\uE1D7\u8DF9\u8DFA\u8DFB\uE1D8\u8DFC\u8DFD"+
-        "\u8DFE\u8E40\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46"+
-        "\u8E47\u8E48\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E"+
-        "\u8E4F\u8E50\u8E51\u8E52\u8E53\u8E54\u8E55\uE1DA"+
-        "\u8E56\u8E57\u8E58\u8E59\u8E5A\u8E5B\u8E5C\u8E5D"+
-        "\u8E5E\u8E5F\u8E60\u8E61\u8E62\uE1DB\u8E63\u8E64"+
-        "\u8E65\u8E66\u8E67\u8E68\u8E69\uCEA1\u8E6A\u8E6B"+
-        "\u8E6C\u8E6D\u8E6E\u8E6F\u8E70\u8E71\u8E72\u8E73"+
-        "\u8E74\u8E75\u8E76\uE7DD\u8E77\uB4A8\uD6DD\u8E78"+
-        "\u8E79\uD1B2\uB3B2\u8E7A\u8E7B\uB9A4\uD7F3\uC7C9"+
-        "\uBEDE\uB9AE\u8E7C\uCED7\u8E7D\u8E7E\uB2EE\uDBCF"+
-        "\u8E80\uBCBA\uD2D1\uCBC8\uB0CD\u8E81\u8E82\uCFEF"+
-        "\u8E83\u8E84\u8E85\u8E86\u8E87\uD9E3\uBDED\u8E88"+
-        "\u8E89\uB1D2\uCAD0\uB2BC\u8E8A\uCBA7\uB7AB\u8E8B"+
-        "\uCAA6\u8E8C\u8E8D\u8E8E\uCFA3\u8E8F\u8E90\uE0F8"+
-        "\uD5CA\uE0FB\u8E91\u8E92\uE0FA\uC5C1\uCCFB\u8E93"+
-        "\uC1B1\uE0F9\uD6E3\uB2AF\uD6C4\uB5DB\u8E94\u8E95"+
-        "\u8E96\u8E97\u8E98\u8E99\u8E9A\u8E9B\uB4F8\uD6A1"+
-        "\u8E9C\u8E9D\u8E9E\u8E9F\u8EA0\uCFAF\uB0EF\u8EA1"+
-        "\u8EA2\uE0FC\u8EA3\u8EA4\u8EA5\u8EA6\u8EA7\uE1A1"+
-        "\uB3A3\u8EA8\u8EA9\uE0FD\uE0FE\uC3B1\u8EAA\u8EAB"+
-        "\u8EAC\u8EAD\uC3DD\u8EAE\uE1A2\uB7F9\u8EAF\u8EB0"+
-        "\u8EB1\u8EB2\u8EB3\u8EB4\uBBCF\u8EB5\u8EB6\u8EB7"+
-        "\u8EB8\u8EB9\u8EBA\u8EBB\uE1A3\uC4BB\u8EBC\u8EBD"+
-        "\u8EBE\u8EBF\u8EC0\uE1A4\u8EC1\u8EC2\uE1A5\u8EC3"+
-        "\u8EC4\uE1A6\uB4B1\u8EC5\u8EC6\u8EC7\u8EC8\u8EC9"+
-        "\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0\u8ED1"+
-        "\u8ED2\u8ED3\uB8C9\uC6BD\uC4EA\u8ED4\uB2A2\u8ED5"+
-        "\uD0D2\u8ED6\uE7DB\uBBC3\uD3D7\uD3C4\u8ED7\uB9E3"+
-        "\uE2CF\u8ED8\u8ED9\u8EDA\uD7AF\u8EDB\uC7EC\uB1D3"+
-        "\u8EDC\u8EDD\uB4B2\uE2D1\u8EDE\u8EDF\u8EE0\uD0F2"+
-        "\uC2AE\uE2D0\u8EE1\uBFE2\uD3A6\uB5D7\uE2D2\uB5EA"+
-        "\u8EE2\uC3ED\uB8FD\u8EE3\uB8AE\u8EE4\uC5D3\uB7CF"+
-        "\uE2D4\u8EE5\u8EE6\u8EE7\u8EE8\uE2D3\uB6C8\uD7F9"+
-        "\u8EE9\u8EEA\u8EEB\u8EEC\u8EED\uCDA5\u8EEE\u8EEF"+
-        "\u8EF0\u8EF1\u8EF2\uE2D8\u8EF3\uE2D6\uCAFC\uBFB5"+
-        "\uD3B9\uE2D5\u8EF4\u8EF5\u8EF6\u8EF7\uE2D7\u8EF8"+
-        "\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD\u8EFE\u8F40\u8F41"+
-        "\u8F42\uC1AE\uC0C8\u8F43\u8F44\u8F45\u8F46\u8F47"+
-        "\u8F48\uE2DB\uE2DA\uC0AA\u8F49\u8F4A\uC1CE\u8F4B"+
-        "\u8F4C\u8F4D\u8F4E\uE2DC\u8F4F\u8F50\u8F51\u8F52"+
-        "\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58\u8F59\u8F5A"+
-        "\uE2DD\u8F5B\uE2DE\u8F5C\u8F5D\u8F5E\u8F5F\u8F60"+
-        "\u8F61\u8F62\u8F63\u8F64\uDBC8\u8F65\uD1D3\uCDA2"+
-        "\u8F66\u8F67\uBDA8\u8F68\u8F69\u8F6A\uDEC3\uD8A5"+
-        "\uBFAA\uDBCD\uD2EC\uC6FA\uC5AA\u8F6B\u8F6C\u8F6D"+
-        "\uDEC4\u8F6E\uB1D7\uDFAE\u8F6F\u8F70\u8F71\uCABD"+
-        "\u8F72\uDFB1\u8F73\uB9AD\u8F74\uD2FD\u8F75\uB8A5"+
-        "\uBAEB\u8F76\u8F77\uB3DA\u8F78\u8F79\u8F7A\uB5DC"+
-        "\uD5C5\u8F7B\u8F7C\u8F7D\u8F7E\uC3D6\uCFD2\uBBA1"+
-        "\u8F80\uE5F3\uE5F2\u8F81\u8F82\uE5F4\u8F83\uCDE4"+
-        "\u8F84\uC8F5\u8F85\u8F86\u8F87\u8F88\u8F89\u8F8A"+
-        "\u8F8B\uB5AF\uC7BF\u8F8C\uE5F6\u8F8D\u8F8E\u8F8F"+
-        "\uECB0\u8F90\u8F91\u8F92\u8F93\u8F94\u8F95\u8F96"+
-        "\u8F97\u8F98\u8F99\u8F9A\u8F9B\u8F9C\u8F9D\u8F9E"+
-        "\uE5E6\u8F9F\uB9E9\uB5B1\u8FA0\uC2BC\uE5E8\uE5E7"+
-        "\uE5E9\u8FA1\u8FA2\u8FA3\u8FA4\uD2CD\u8FA5\u8FA6"+
-        "\u8FA7\uE1EA\uD0CE\u8FA8\uCDAE\u8FA9\uD1E5\u8FAA"+
-        "\u8FAB\uB2CA\uB1EB\u8FAC\uB1F2\uC5ED\u8FAD\u8FAE"+
-        "\uD5C3\uD3B0\u8FAF\uE1DC\u8FB0\u8FB1\u8FB2\uE1DD"+
-        "\u8FB3\uD2DB\u8FB4\uB3B9\uB1CB\u8FB5\u8FB6\u8FB7"+
-        "\uCDF9\uD5F7\uE1DE\u8FB8\uBEB6\uB4FD\u8FB9\uE1DF"+
-        "\uBADC\uE1E0\uBBB2\uC2C9\uE1E1\u8FBA\u8FBB\u8FBC"+
-        "\uD0EC\u8FBD\uCDBD\u8FBE\u8FBF\uE1E2\u8FC0\uB5C3"+
-        "\uC5C7\uE1E3\u8FC1\u8FC2\uE1E4\u8FC3\u8FC4\u8FC5"+
-        "\u8FC6\uD3F9\u8FC7\u8FC8\u8FC9\u8FCA\u8FCB\u8FCC"+
-        "\uE1E5\u8FCD\uD1AD\u8FCE\u8FCF\uE1E6\uCEA2\u8FD0"+
-        "\u8FD1\u8FD2\u8FD3\u8FD4\u8FD5\uE1E7\u8FD6\uB5C2"+
-        "\u8FD7\u8FD8\u8FD9\u8FDA\uE1E8\uBBD5\u8FDB\u8FDC"+
-        "\u8FDD\u8FDE\u8FDF\uD0C4\uE2E0\uB1D8\uD2E4\u8FE0"+
-        "\u8FE1\uE2E1\u8FE2\u8FE3\uBCC9\uC8CC\u8FE4\uE2E3"+
-        "\uECFE\uECFD\uDFAF\u8FE5\u8FE6\u8FE7\uE2E2\uD6BE"+
-        "\uCDFC\uC3A6\u8FE8\u8FE9\u8FEA\uE3C3\u8FEB\u8FEC"+
-        "\uD6D2\uE2E7\u8FED\u8FEE\uE2E8\u8FEF\u8FF0\uD3C7"+
-        "\u8FF1\u8FF2\uE2EC\uBFEC\u8FF3\uE2ED\uE2E5\u8FF4"+
-        "\u8FF5\uB3C0\u8FF6\u8FF7\u8FF8\uC4EE\u8FF9\u8FFA"+
-        "\uE2EE\u8FFB\u8FFC\uD0C3\u8FFD\uBAF6\uE2E9\uB7DE";
-
-    private final static String innerEncoderIndex6=
-        "\uBBB3\uCCAC\uCBCB\uE2E4\uE2E6\uE2EA\uE2EB\u8FFE"+
-        "\u9040\u9041\uE2F7\u9042\u9043\uE2F4\uD4F5\uE2F3"+
-        "\u9044\u9045\uC5AD\u9046\uD5FA\uC5C2\uB2C0\u9047"+
-        "\u9048\uE2EF\u9049\uE2F2\uC1AF\uCBBC\u904A\u904B"+
-        "\uB5A1\uE2F9\u904C\u904D\u904E\uBCB1\uE2F1\uD0D4"+
-        "\uD4B9\uE2F5\uB9D6\uE2F6\u904F\u9050\u9051\uC7D3"+
-        "\u9052\u9053\u9054\u9055\u9056\uE2F0\u9057\u9058"+
-        "\u9059\u905A\u905B\uD7DC\uEDA1\u905C\u905D\uE2F8"+
-        "\u905E\uEDA5\uE2FE\uCAD1\u905F\u9060\u9061\u9062"+
-        "\u9063\u9064\u9065\uC1B5\u9066\uBBD0\u9067\u9068"+
-        "\uBFD6\u9069\uBAE3\u906A\u906B\uCBA1\u906C\u906D"+
-        "\u906E\uEDA6\uEDA3\u906F\u9070\uEDA2\u9071\u9072"+
-        "\u9073\u9074\uBBD6\uEDA7\uD0F4\u9075\u9076\uEDA4"+
-        "\uBADE\uB6F7\uE3A1\uB6B2\uCCF1\uB9A7\u9077\uCFA2"+
-        "\uC7A1\u9078\u9079\uBFD2\u907A\u907B\uB6F1\u907C"+
-        "\uE2FA\uE2FB\uE2FD\uE2FC\uC4D5\uE3A2\u907D\uD3C1"+
-        "\u907E\u9080\u9081\uE3A7\uC7C4\u9082\u9083\u9084"+
-        "\u9085\uCFA4\u9086\u9087\uE3A9\uBAB7\u9088\u9089"+
-        "\u908A\u908B\uE3A8\u908C\uBBDA\u908D\uE3A3\u908E"+
-        "\u908F\u9090\uE3A4\uE3AA\u9091\uE3A6\u9092\uCEF2"+
-        "\uD3C6\u9093\u9094\uBBBC\u9095\u9096\uD4C3\u9097"+
-        "\uC4FA\u9098\u9099\uEDA8\uD0FC\uE3A5\u909A\uC3F5"+
-        "\u909B\uE3AD\uB1AF\u909C\uE3B2\u909D\u909E\u909F"+
-        "\uBCC2\u90A0\u90A1\uE3AC\uB5BF\u90A2\u90A3\u90A4"+
-        "\u90A5\u90A6\u90A7\u90A8\u90A9\uC7E9\uE3B0\u90AA"+
-        "\u90AB\u90AC\uBEAA\uCDEF\u90AD\u90AE\u90AF\u90B0"+
-        "\u90B1\uBBF3\u90B2\u90B3\u90B4\uCCE8\u90B5\u90B6"+
-        "\uE3AF\u90B7\uE3B1\u90B8\uCFA7\uE3AE\u90B9\uCEA9"+
-        "\uBBDD\u90BA\u90BB\u90BC\u90BD\u90BE\uB5EB\uBEE5"+
-        "\uB2D2\uB3CD\u90BF\uB1B9\uE3AB\uB2D1\uB5AC\uB9DF"+
-        "\uB6E8\u90C0\u90C1\uCFEB\uE3B7\u90C2\uBBCC\u90C3"+
-        "\u90C4\uC8C7\uD0CA\u90C5\u90C6\u90C7\u90C8\u90C9"+
-        "\uE3B8\uB3EE\u90CA\u90CB\u90CC\u90CD\uEDA9\u90CE"+
-        "\uD3FA\uD3E4\u90CF\u90D0\u90D1\uEDAA\uE3B9\uD2E2"+
-        "\u90D2\u90D3\u90D4\u90D5\u90D6\uE3B5\u90D7\u90D8"+
-        "\u90D9\u90DA\uD3DE\u90DB\u90DC\u90DD\u90DE\uB8D0"+
-        "\uE3B3\u90DF\u90E0\uE3B6\uB7DF\u90E1\uE3B4\uC0A2"+
-        "\u90E2\u90E3\u90E4\uE3BA\u90E5\u90E6\u90E7\u90E8"+
-        "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
-        "\u90F1\u90F2\u90F3\u90F4\u90F5\u90F6\u90F7\uD4B8"+
-        "\u90F8\u90F9\u90FA\u90FB\u90FC\u90FD\u90FE\u9140"+
-        "\uB4C8\u9141\uE3BB\u9142\uBBC5\u9143\uC9F7\u9144"+
-        "\u9145\uC9E5\u9146\u9147\u9148\uC4BD\u9149\u914A"+
-        "\u914B\u914C\u914D\u914E\u914F\uEDAB\u9150\u9151"+
-        "\u9152\u9153\uC2FD\u9154\u9155\u9156\u9157\uBBDB"+
-        "\uBFAE\u9158\u9159\u915A\u915B\u915C\u915D\u915E"+
-        "\uCEBF\u915F\u9160\u9161\u9162\uE3BC\u9163\uBFB6"+
-        "\u9164\u9165\u9166\u9167\u9168\u9169\u916A\u916B"+
-        "\u916C\u916D\u916E\u916F\u9170\u9171\u9172\u9173"+
-        "\u9174\u9175\u9176\uB1EF\u9177\u9178\uD4F7\u9179"+
-        "\u917A\u917B\u917C\u917D\uE3BE\u917E\u9180\u9181"+
-        "\u9182\u9183\u9184\u9185\u9186\uEDAD\u9187\u9188"+
-        "\u9189\u918A\u918B\u918C\u918D\u918E\u918F\uE3BF"+
-        "\uBAA9\uEDAC\u9190\u9191\uE3BD\u9192\u9193\u9194"+
-        "\u9195\u9196\u9197\u9198\u9199\u919A\u919B\uE3C0"+
-        "\u919C\u919D\u919E\u919F\u91A0\u91A1\uBAB6\u91A2"+
-        "\u91A3\u91A4\uB6AE\u91A5\u91A6\u91A7\u91A8\u91A9"+
-        "\uD0B8\u91AA\uB0C3\uEDAE\u91AB\u91AC\u91AD\u91AE"+
-        "\u91AF\uEDAF\uC0C1\u91B0\uE3C1\u91B1\u91B2\u91B3"+
-        "\u91B4\u91B5\u91B6\u91B7\u91B8\u91B9\u91BA\u91BB"+
-        "\u91BC\u91BD\u91BE\u91BF\u91C0\u91C1\uC5B3\u91C2"+
-        "\u91C3\u91C4\u91C5\u91C6\u91C7\u91C8\u91C9\u91CA"+
-        "\u91CB\u91CC\u91CD\u91CE\u91CF\uE3C2\u91D0\u91D1"+
-        "\u91D2\u91D3\u91D4\u91D5\u91D6\u91D7\u91D8\uDCB2"+
-        "\u91D9\u91DA\u91DB\u91DC\u91DD\u91DE\uEDB0\u91DF"+
-        "\uB8EA\u91E0\uCEEC\uEAA7\uD0E7\uCAF9\uC8D6\uCFB7"+
-        "\uB3C9\uCED2\uBDE4\u91E1\u91E2\uE3DE\uBBF2\uEAA8"+
-        "\uD5BD\u91E3\uC6DD\uEAA9\u91E4\u91E5\u91E6\uEAAA"+
-        "\u91E7\uEAAC\uEAAB\u91E8\uEAAE\uEAAD\u91E9\u91EA"+
-        "\u91EB\u91EC\uBDD8\u91ED\uEAAF\u91EE\uC2BE\u91EF"+
-        "\u91F0\u91F1\u91F2\uB4C1\uB4F7\u91F3\u91F4\uBBA7"+
-        "\u91F5\u91F6\u91F7\u91F8\u91F9\uECE6\uECE5\uB7BF"+
-        "\uCBF9\uB1E2\u91FA\uECE7\u91FB\u91FC\u91FD\uC9C8"+
-        "\uECE8\uECE9\u91FE\uCAD6\uDED0\uB2C5\uD4FA\u9240"+
-        "\u9241\uC6CB\uB0C7\uB4F2\uC8D3\u9242\u9243\u9244"+
-        "\uCDD0\u9245\u9246\uBFB8\u9247\u9248\u9249\u924A"+
-        "\u924B\u924C\u924D\uBFDB\u924E\u924F\uC7A4\uD6B4"+
-        "\u9250\uC0A9\uDED1\uC9A8\uD1EF\uC5A4\uB0E7\uB3B6"+
-        "\uC8C5\u9251\u9252\uB0E2\u9253\u9254\uB7F6\u9255"+
-        "\u9256\uC5FA\u9257\u9258\uB6F3\u9259\uD5D2\uB3D0"+
-        "\uBCBC\u925A\u925B\u925C\uB3AD\u925D\u925E\u925F"+
-        "\u9260\uBEF1\uB0D1\u9261\u9262\u9263\u9264\u9265"+
-        "\u9266\uD2D6\uCAE3\uD7A5\u9267\uCDB6\uB6B6\uBFB9"+
-        "\uD5DB\u9268\uB8A7\uC5D7\u9269\u926A\u926B\uDED2"+
-        "\uBFD9\uC2D5\uC7C0\u926C\uBBA4\uB1A8\u926D\u926E"+
-        "\uC5EA\u926F\u9270\uC5FB\uCCA7\u9271\u9272\u9273"+
-        "\u9274\uB1A7\u9275\u9276\u9277\uB5D6\u9278\u9279"+
-        "\u927A\uC4A8\u927B\uDED3\uD1BA\uB3E9\u927C\uC3F2"+
-        "\u927D\u927E\uB7F7\u9280\uD6F4\uB5A3\uB2F0\uC4B4"+
-        "\uC4E9\uC0AD\uDED4\u9281\uB0E8\uC5C4\uC1E0\u9282"+
-        "\uB9D5\u9283\uBEDC\uCDD8\uB0CE\u9284\uCDCF\uDED6"+
-        "\uBED0\uD7BE\uDED5\uD5D0\uB0DD\u9285\u9286\uC4E2"+
-        "\u9287\u9288\uC2A3\uBCF0\u9289\uD3B5\uC0B9\uC5A1"+
-        "\uB2A6\uD4F1\u928A\u928B\uC0A8\uCAC3\uDED7\uD5FC"+
-        "\u928C\uB9B0\u928D\uC8AD\uCBA9\u928E\uDED9\uBFBD"+
-        "\u928F\u9290\u9291\u9292\uC6B4\uD7A7\uCAB0\uC4C3"+
-        "\u9293\uB3D6\uB9D2\u9294\u9295\u9296\u9297\uD6B8"+
-        "\uEAFC\uB0B4\u9298\u9299\u929A\u929B\uBFE6\u929C"+
-        "\u929D\uCCF4\u929E\u929F\u92A0\u92A1\uCDDA\u92A2"+
-        "\u92A3\u92A4\uD6BF\uC2CE\u92A5\uCECE\uCCA2\uD0AE"+
-        "\uC4D3\uB5B2\uDED8\uD5F5\uBCB7\uBBD3\u92A6\u92A7"+
-        "\uB0A4\u92A8\uC5B2\uB4EC\u92A9\u92AA\u92AB\uD5F1"+
-        "\u92AC\u92AD\uEAFD\u92AE\u92AF\u92B0\u92B1\u92B2"+
-        "\u92B3\uDEDA\uCDA6\u92B4\u92B5\uCDEC\u92B6\u92B7"+
-        "\u92B8\u92B9\uCEE6\uDEDC\u92BA\uCDB1\uC0A6\u92BB"+
-        "\u92BC\uD7BD\u92BD\uDEDB\uB0C6\uBAB4\uC9D3\uC4F3"+
-        "\uBEE8\u92BE\u92BF\u92C0\u92C1\uB2B6\u92C2\u92C3"+
-        "\u92C4\u92C5\u92C6\u92C7\u92C8\u92C9\uC0CC\uCBF0"+
-        "\u92CA\uBCF1\uBBBB\uB5B7\u92CB\u92CC\u92CD\uC5F5"+
-        "\u92CE\uDEE6\u92CF\u92D0\u92D1\uDEE3\uBEDD\u92D2"+
-        "\u92D3\uDEDF\u92D4\u92D5\u92D6\u92D7\uB4B7\uBDDD"+
-        "\u92D8\u92D9\uDEE0\uC4ED\u92DA\u92DB\u92DC\u92DD"+
-        "\uCFC6\u92DE\uB5E0\u92DF\u92E0\u92E1\u92E2\uB6DE"+
-        "\uCADA\uB5F4\uDEE5\u92E3\uD5C6\u92E4\uDEE1\uCCCD"+
-        "\uC6FE\u92E5\uC5C5\u92E6\u92E7\u92E8\uD2B4\u92E9"+
-        "\uBEF2\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
-        "\uC2D3\u92F1\uCCBD\uB3B8\u92F2\uBDD3\u92F3\uBFD8"+
-        "\uCDC6\uD1DA\uB4EB\u92F4\uDEE4\uDEDD\uDEE7\u92F5"+
-        "\uEAFE\u92F6\u92F7\uC2B0\uDEE2\u92F8\u92F9\uD6C0"+
-        "\uB5A7\u92FA\uB2F4\u92FB\uDEE8\u92FC\uDEF2\u92FD"+
-        "\u92FE\u9340\u9341\u9342\uDEED\u9343\uDEF1\u9344"+
-        "\u9345\uC8E0\u9346\u9347\u9348\uD7E1\uDEEF\uC3E8"+
-        "\uCCE1\u9349\uB2E5\u934A\u934B\u934C\uD2BE\u934D"+
-        "\u934E\u934F\u9350\u9351\u9352\u9353\uDEEE\u9354"+
-        "\uDEEB\uCED5\u9355\uB4A7\u9356\u9357\u9358\u9359"+
-        "\u935A\uBFAB\uBEBE\u935B\u935C\uBDD2\u935D\u935E"+
-        "\u935F\u9360\uDEE9\u9361\uD4AE\u9362\uDEDE\u9363"+
-        "\uDEEA\u9364\u9365\u9366\u9367\uC0BF\u9368\uDEEC"+
-        "\uB2F3\uB8E9\uC2A7\u9369\u936A\uBDC1\u936B\u936C"+
-        "\u936D\u936E\u936F\uDEF5\uDEF8\u9370\u9371\uB2AB"+
-        "\uB4A4\u9372\u9373\uB4EA\uC9A6\u9374\u9375\u9376"+
-        "\u9377\u9378\u9379\uDEF6\uCBD1\u937A\uB8E3\u937B"+
-        "\uDEF7\uDEFA\u937C\u937D\u937E\u9380\uDEF9\u9381"+
-        "\u9382\u9383\uCCC2\u9384\uB0E1\uB4EE\u9385\u9386"+
-        "\u9387\u9388\u9389\u938A\uE5BA\u938B\u938C\u938D"+
-        "\u938E\u938F\uD0AF\u9390\u9391\uB2EB\u9392\uEBA1"+
-        "\u9393\uDEF4\u9394\u9395\uC9E3\uDEF3\uB0DA\uD2A1"+
-        "\uB1F7\u9396\uCCAF\u9397\u9398\u9399\u939A\u939B"+
-        "\u939C\u939D\uDEF0\u939E\uCBA4\u939F\u93A0\u93A1"+
-        "\uD5AA\u93A2\u93A3\u93A4\u93A5\u93A6\uDEFB\u93A7"+
-        "\u93A8\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\uB4DD"+
-        "\u93AF\uC4A6\u93B0\u93B1\u93B2\uDEFD\u93B3\u93B4"+
-        "\u93B5\u93B6\u93B7\u93B8\u93B9\u93BA\u93BB\u93BC"+
-        "\uC3FE\uC4A1\uDFA1\u93BD\u93BE\u93BF\u93C0\u93C1"+
-        "\u93C2\u93C3\uC1CC\u93C4\uDEFC\uBEEF\u93C5\uC6B2"+
-        "\u93C6\u93C7\u93C8\u93C9\u93CA\u93CB\u93CC\u93CD"+
-        "\u93CE\uB3C5\uC8F6\u93CF\u93D0\uCBBA\uDEFE\u93D1"+
-        "\u93D2\uDFA4\u93D3\u93D4\u93D5\u93D6\uD7B2\u93D7"+
-        "\u93D8\u93D9\u93DA\u93DB\uB3B7\u93DC\u93DD\u93DE"+
-        "\u93DF\uC1C3\u93E0\u93E1\uC7CB\uB2A5\uB4E9\u93E2"+
-        "\uD7AB\u93E3\u93E4\u93E5\u93E6\uC4EC\u93E7\uDFA2"+
-        "\uDFA3\u93E8\uDFA5\u93E9\uBAB3\u93EA\u93EB\u93EC"+
-        "\uDFA6\u93ED\uC0DE\u93EE\u93EF\uC9C3\u93F0\u93F1"+
-        "\u93F2\u93F3\u93F4\u93F5\u93F6\uB2D9\uC7E6\u93F7"+
-        "\uDFA7\u93F8\uC7DC\u93F9\u93FA\u93FB\u93FC\uDFA8"+
-        "\uEBA2\u93FD\u93FE\u9440\u9441\u9442\uCBD3\u9443"+
-        "\u9444\u9445\uDFAA\u9446\uDFA9\u9447\uB2C1\u9448"+
-        "\u9449\u944A\u944B\u944C\u944D\u944E\u944F\u9450"+
-        "\u9451\u9452\u9453\u9454\u9455\u9456\u9457\u9458"+
-        "\u9459\u945A\u945B\u945C\u945D\u945E\u945F\u9460"+
-        "\uC5CA\u9461\u9462\u9463\u9464\u9465\u9466\u9467"+
-        "\u9468\uDFAB\u9469\u946A\u946B\u946C\u946D\u946E"+
-        "\u946F\u9470\uD4DC\u9471\u9472\u9473\u9474\u9475"+
-        "\uC8C1\u9476\u9477\u9478\u9479\u947A\u947B\u947C"+
-        "\u947D\u947E\u9480\u9481\u9482\uDFAC\u9483\u9484"+
-        "\u9485\u9486\u9487\uBEF0\u9488\u9489\uDFAD\uD6A7"+
-        "\u948A\u948B\u948C\u948D\uEAB7\uEBB6\uCAD5\u948E"+
-        "\uD8FC\uB8C4\u948F\uB9A5\u9490\u9491\uB7C5\uD5FE"+
-        "\u9492\u9493\u9494\u9495\u9496\uB9CA\u9497\u9498"+
-        "\uD0A7\uF4CD\u9499\u949A\uB5D0\u949B\u949C\uC3F4"+
-        "\u949D\uBEC8\u949E\u949F\u94A0\uEBB7\uB0BD\u94A1"+
-        "\u94A2\uBDCC\u94A3\uC1B2\u94A4\uB1D6\uB3A8\u94A5"+
-        "\u94A6\u94A7\uB8D2\uC9A2\u94A8\u94A9\uB6D8\u94AA"+
-        "\u94AB\u94AC\u94AD\uEBB8\uBEB4\u94AE\u94AF\u94B0"+
-        "\uCAFD\u94B1\uC7C3\u94B2\uD5FB\u94B3\u94B4\uB7F3"+
-        "\u94B5\u94B6\u94B7\u94B8\u94B9\u94BA\u94BB\u94BC"+
-        "\u94BD\u94BE\u94BF\u94C0\u94C1\u94C2\u94C3\uCEC4"+
-        "\u94C4\u94C5\u94C6\uD5AB\uB1F3\u94C7\u94C8\u94C9"+
-        "\uECB3\uB0DF\u94CA\uECB5\u94CB\u94CC\u94CD\uB6B7"+
-        "\u94CE\uC1CF\u94CF\uF5FA\uD0B1\u94D0\u94D1\uD5E5"+
-        "\u94D2\uCED3\u94D3\u94D4\uBDEF\uB3E2\u94D5\uB8AB"+
-        "\u94D6\uD5B6\u94D7\uEDBD\u94D8\uB6CF\u94D9\uCBB9"+
-        "\uD0C2\u94DA\u94DB\u94DC\u94DD\u94DE\u94DF\u94E0"+
-        "\u94E1\uB7BD\u94E2\u94E3\uECB6\uCAA9\u94E4\u94E5"+
-        "\u94E6\uC5D4\u94E7\uECB9\uECB8\uC2C3\uECB7\u94E8"+
-        "\u94E9\u94EA\u94EB\uD0FD\uECBA\u94EC\uECBB\uD7E5"+
-        "\u94ED\u94EE\uECBC\u94EF\u94F0\u94F1\uECBD\uC6EC"+
-        "\u94F2\u94F3\u94F4\u94F5\u94F6\u94F7\u94F8\u94F9"+
-        "\uCEDE\u94FA\uBCC8\u94FB\u94FC\uC8D5\uB5A9\uBEC9"+
-        "\uD6BC\uD4E7\u94FD\u94FE\uD1AE\uD0F1\uEAB8\uEAB9"+
-        "\uEABA\uBAB5\u9540\u9541\u9542\u9543\uCAB1\uBFF5"+
-        "\u9544\u9545\uCDFA\u9546\u9547\u9548\u9549\u954A"+
-        "\uEAC0\u954B\uB0BA\uEABE\u954C\u954D\uC0A5\u954E"+
-        "\u954F\u9550\uEABB\u9551\uB2FD\u9552\uC3F7\uBBE8"+
-        "\u9553\u9554\u9555\uD2D7\uCEF4\uEABF\u9556\u9557"+
-        "\u9558\uEABC\u9559\u955A\u955B\uEAC3\u955C\uD0C7"+
-        "\uD3B3\u955D\u955E\u955F\u9560\uB4BA\u9561\uC3C1"+
-        "\uD7F2\u9562\u9563\u9564\u9565\uD5D1\u9566\uCAC7"+
-        "\u9567\uEAC5\u9568\u9569\uEAC4\uEAC7\uEAC6\u956A"+
-        "\u956B\u956C\u956D\u956E\uD6E7\u956F\uCFD4\u9570"+
-        "\u9571\uEACB\u9572\uBBCE\u9573\u9574\u9575\u9576"+
-        "\u9577\u9578\u9579\uBDFA\uC9CE\u957A\u957B\uEACC"+
-        "\u957C\u957D\uC9B9\uCFFE\uEACA\uD4CE\uEACD\uEACF"+
-        "\u957E\u9580\uCDED\u9581\u9582\u9583\u9584\uEAC9"+
-        "\u9585\uEACE\u9586\u9587\uCEEE\u9588\uBBDE\u9589"+
-        "\uB3BF\u958A\u958B\u958C\u958D\u958E\uC6D5\uBEB0"+
-        "\uCEFA\u958F\u9590\u9591\uC7E7\u9592\uBEA7\uEAD0"+
-        "\u9593\u9594\uD6C7\u9595\u9596\u9597\uC1C0\u9598"+
-        "\u9599\u959A\uD4DD\u959B\uEAD1\u959C\u959D\uCFBE"+
-        "\u959E\u959F\u95A0\u95A1\uEAD2\u95A2\u95A3\u95A4"+
-        "\u95A5\uCAEE\u95A6\u95A7\u95A8\u95A9\uC5AF\uB0B5"+
-        "\u95AA\u95AB\u95AC\u95AD\u95AE\uEAD4\u95AF\u95B0"+
-        "\u95B1\u95B2\u95B3\u95B4\u95B5\u95B6\u95B7\uEAD3"+
-        "\uF4DF\u95B8\u95B9\u95BA\u95BB\u95BC\uC4BA\u95BD"+
-        "\u95BE\u95BF\u95C0\u95C1\uB1A9\u95C2\u95C3\u95C4"+
-        "\u95C5\uE5DF\u95C6\u95C7\u95C8\u95C9\uEAD5\u95CA"+
-        "\u95CB\u95CC\u95CD\u95CE\u95CF\u95D0\u95D1\u95D2"+
-        "\u95D3\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9\u95DA"+
-        "\u95DB\u95DC\u95DD\u95DE\u95DF\u95E0\u95E1\u95E2"+
-        "\u95E3\uCAEF\u95E4\uEAD6\uEAD7\uC6D8\u95E5\u95E6"+
-        "\u95E7\u95E8\u95E9\u95EA\u95EB\u95EC\uEAD8\u95ED"+
-        "\u95EE\uEAD9\u95EF\u95F0\u95F1\u95F2\u95F3\u95F4"+
-        "\uD4BB\u95F5\uC7FA\uD2B7\uB8FC\u95F6\u95F7\uEAC2"+
-        "\u95F8\uB2DC\u95F9\u95FA\uC2FC\u95FB\uD4F8\uCCE6"+
-        "\uD7EE\u95FC\u95FD\u95FE\u9640\u9641\u9642\u9643"+
-        "\uD4C2\uD3D0\uEBC3\uC5F3\u9644\uB7FE\u9645\u9646"+
-        "\uEBD4\u9647\u9648\u9649\uCBB7\uEBDE\u964A\uC0CA"+
-        "\u964B\u964C\u964D\uCDFB\u964E\uB3AF\u964F\uC6DA"+
-        "\u9650\u9651\u9652\u9653\u9654\u9655\uEBFC\u9656"+
-        "\uC4BE\u9657\uCEB4\uC4A9\uB1BE\uD4FD\u9658\uCAF5"+
-        "\u9659\uD6EC\u965A\u965B\uC6D3\uB6E4\u965C\u965D"+
-        "\u965E\u965F\uBBFA\u9660\u9661\uD0E0\u9662\u9663"+
-        "\uC9B1\u9664\uD4D3\uC8A8\u9665\u9666\uB8CB\u9667"+
-        "\uE8BE\uC9BC\u9668\u9669\uE8BB\u966A\uC0EE\uD0D3"+
-        "\uB2C4\uB4E5\u966B\uE8BC\u966C\u966D\uD5C8\u966E"+
-        "\u966F\u9670\u9671\u9672\uB6C5\u9673\uE8BD\uCAF8"+
-        "\uB8DC\uCCF5\u9674\u9675\u9676\uC0B4\u9677\u9678"+
-        "\uD1EE\uE8BF\uE8C2\u9679\u967A\uBABC\u967B\uB1AD"+
-        "\uBDDC\u967C\uEABD\uE8C3\u967D\uE8C6\u967E\uE8CB"+
-        "\u9680\u9681\u9682\u9683\uE8CC\u9684\uCBC9\uB0E5"+
-        "\u9685\uBCAB\u9686\u9687\uB9B9\u9688\u9689\uE8C1"+
-        "\u968A\uCDF7\u968B\uE8CA\u968C\u968D\u968E\u968F"+
-        "\uCEF6\u9690\u9691\u9692\u9693\uD5ED\u9694\uC1D6"+
-        "\uE8C4\u9695\uC3B6\u9696\uB9FB\uD6A6\uE8C8\u9697"+
-        "\u9698\u9699\uCAE0\uD4E6\u969A\uE8C0\u969B\uE8C5"+
-        "\uE8C7\u969C\uC7B9\uB7E3\u969D\uE8C9\u969E\uBFDD"+
-        "\uE8D2\u969F\u96A0\uE8D7\u96A1\uE8D5\uBCDC\uBCCF"+
-        "\uE8DB\u96A2\u96A3\u96A4\u96A5\u96A6\u96A7\u96A8"+
-        "\u96A9\uE8DE\u96AA\uE8DA\uB1FA\u96AB\u96AC\u96AD"+
-        "\u96AE\u96AF\u96B0\u96B1\u96B2\u96B3\u96B4\uB0D8"+
-        "\uC4B3\uB8CC\uC6E2\uC8BE\uC8E1\u96B5\u96B6\u96B7"+
-        "\uE8CF\uE8D4\uE8D6\u96B8\uB9F1\uE8D8\uD7F5\u96B9"+
-        "\uC4FB\u96BA\uE8DC\u96BB\u96BC\uB2E9\u96BD\u96BE"+
-        "\u96BF\uE8D1\u96C0\u96C1\uBCED\u96C2\u96C3\uBFC2"+
-        "\uE8CD\uD6F9\u96C4\uC1F8\uB2F1\u96C5\u96C6\u96C7"+
-        "\u96C8\u96C9\u96CA\u96CB\u96CC\uE8DF\u96CD\uCAC1"+
-        "\uE8D9\u96CE\u96CF\u96D0\u96D1\uD5A4\u96D2\uB1EA"+
-        "\uD5BB\uE8CE\uE8D0\uB6B0\uE8D3\u96D3\uE8DD\uC0B8"+
-        "\u96D4\uCAF7\u96D5\uCBA8\u96D6\u96D7\uC6DC\uC0F5"+
-        "\u96D8\u96D9\u96DA\u96DB\u96DC\uE8E9\u96DD\u96DE"+
-        "\u96DF\uD0A3\u96E0\u96E1\u96E2\u96E3\u96E4\u96E5"+
-        "\u96E6\uE8F2\uD6EA\u96E7\u96E8\u96E9\u96EA\u96EB"+
-        "\u96EC\u96ED\uE8E0\uE8E1\u96EE\u96EF\u96F0\uD1F9"+
-        "\uBACB\uB8F9\u96F1\u96F2\uB8F1\uD4D4\uE8EF\u96F3"+
-        "\uE8EE\uE8EC\uB9F0\uCCD2\uE8E6\uCEA6\uBFF2\u96F4"+
-        "\uB0B8\uE8F1\uE8F0\u96F5\uD7C0\u96F6\uE8E4\u96F7"+
-        "\uCDA9\uC9A3\u96F8\uBBB8\uBDDB\uE8EA\u96F9\u96FA"+
-        "\u96FB\u96FC\u96FD\u96FE\u9740\u9741\u9742\u9743"+
-        "\uE8E2\uE8E3\uE8E5\uB5B5\uE8E7\uC7C5\uE8EB\uE8ED"+
-        "\uBDB0\uD7AE\u9744\uE8F8\u9745\u9746\u9747\u9748"+
-        "\u9749\u974A\u974B\u974C\uE8F5\u974D\uCDB0\uE8F6"+
-        "\u974E\u974F\u9750\u9751\u9752\u9753\u9754\u9755"+
-        "\u9756\uC1BA\u9757\uE8E8\u9758\uC3B7\uB0F0\u9759"+
-        "\u975A\u975B\u975C\u975D\u975E\u975F\u9760\uE8F4"+
-        "\u9761\u9762\u9763\uE8F7\u9764\u9765\u9766\uB9A3"+
-        "\u9767\u9768\u9769\u976A\u976B\u976C\u976D\u976E"+
-        "\u976F\u9770\uC9D2\u9771\u9772\u9773\uC3CE\uCEE0"+
-        "\uC0E6\u9774\u9775\u9776\u9777\uCBF3\u9778\uCCDD"+
-        "\uD0B5\u9779\u977A\uCAE1\u977B\uE8F3\u977C\u977D"+
-        "\u977E\u9780\u9781\u9782\u9783\u9784\u9785\u9786"+
-        "\uBCEC\u9787\uE8F9\u9788\u9789\u978A\u978B\u978C"+
-        "\u978D\uC3DE\u978E\uC6E5\u978F\uB9F7\u9790\u9791"+
-        "\u9792\u9793\uB0F4\u9794\u9795\uD7D8\u9796\u9797"+
-        "\uBCAC\u9798\uC5EF\u9799\u979A\u979B\u979C\u979D"+
-        "\uCCC4\u979E\u979F\uE9A6\u97A0\u97A1\u97A2\u97A3"+
-        "\u97A4\u97A5\u97A6\u97A7\u97A8\u97A9\uC9AD\u97AA"+
-        "\uE9A2\uC0E2\u97AB\u97AC\u97AD\uBFC3\u97AE\u97AF"+
-        "\u97B0\uE8FE\uB9D7\u97B1\uE8FB\u97B2\u97B3\u97B4"+
-        "\u97B5\uE9A4\u97B6\u97B7\u97B8\uD2CE\u97B9\u97BA"+
-        "\u97BB\u97BC\u97BD\uE9A3\u97BE\uD6B2\uD7B5\u97BF"+
-        "\uE9A7\u97C0\uBDB7\u97C1\u97C2\u97C3\u97C4\u97C5"+
-        "\u97C6\u97C7\u97C8\u97C9\u97CA\u97CB\u97CC\uE8FC"+
-        "\uE8FD\u97CD\u97CE\u97CF\uE9A1\u97D0\u97D1\u97D2"+
-        "\u97D3\u97D4\u97D5\u97D6\u97D7\uCDD6\u97D8\u97D9"+
-        "\uD2AC\u97DA\u97DB\u97DC\uE9B2\u97DD\u97DE\u97DF"+
-        "\u97E0\uE9A9\u97E1\u97E2\u97E3\uB4AA\u97E4\uB4BB"+
-        "\u97E5\u97E6\uE9AB\u97E7\u97E8\u97E9\u97EA\u97EB"+
-        "\u97EC\u97ED\u97EE\u97EF\u97F0\u97F1\u97F2\u97F3"+
-        "\u97F4\u97F5\u97F6\u97F7\uD0A8\u97F8\u97F9\uE9A5"+
-        "\u97FA\u97FB\uB3FE\u97FC\u97FD\uE9AC\uC0E3\u97FE"+
-        "\uE9AA\u9840\u9841\uE9B9\u9842\u9843\uE9B8\u9844"+
-        "\u9845\u9846\u9847\uE9AE\u9848\u9849\uE8FA\u984A"+
-        "\u984B\uE9A8\u984C\u984D\u984E\u984F\u9850\uBFAC"+
-        "\uE9B1\uE9BA\u9851\u9852\uC2A5\u9853\u9854\u9855"+
-        "\uE9AF\u9856\uB8C5\u9857\uE9AD\u9858\uD3DC\uE9B4"+
-        "\uE9B5\uE9B7\u9859\u985A\u985B\uE9C7\u985C\u985D"+
-        "\u985E\u985F\u9860\u9861\uC0C6\uE9C5\u9862\u9863"+
-        "\uE9B0\u9864\u9865\uE9BB\uB0F1\u9866\u9867\u9868"+
-        "\u9869\u986A\u986B\u986C\u986D\u986E\u986F\uE9BC"+
-        "\uD5A5\u9870\u9871\uE9BE\u9872\uE9BF\u9873\u9874"+
-        "\u9875\uE9C1\u9876\u9877\uC1F1\u9878\u9879\uC8B6"+
-        "\u987A\u987B\u987C\uE9BD\u987D\u987E\u9880\u9881"+
-        "\u9882\uE9C2\u9883\u9884\u9885\u9886\u9887\u9888"+
-        "\u9889\u988A\uE9C3\u988B\uE9B3\u988C\uE9B6\u988D"+
-        "\uBBB1\u988E\u988F\u9890\uE9C0\u9891\u9892\u9893"+
-        "\u9894\u9895\u9896\uBCF7\u9897\u9898\u9899\uE9C4"+
-        "\uE9C6\u989A\u989B\u989C\u989D\u989E\u989F\u98A0"+
-        "\u98A1\u98A2\u98A3\u98A4\u98A5\uE9CA\u98A6\u98A7"+
-        "\u98A8\u98A9\uE9CE\u98AA\u98AB\u98AC\u98AD\u98AE"+
-        "\u98AF\u98B0\u98B1\u98B2\u98B3\uB2DB\u98B4\uE9C8"+
-        "\u98B5\u98B6\u98B7\u98B8\u98B9\u98BA\u98BB\u98BC"+
-        "\u98BD\u98BE\uB7AE\u98BF\u98C0\u98C1\u98C2\u98C3"+
-        "\u98C4\u98C5\u98C6\u98C7\u98C8\u98C9\u98CA\uE9CB"+
-        "\uE9CC\u98CB\u98CC\u98CD\u98CE\u98CF\u98D0\uD5C1"+
-        "\u98D1\uC4A3\u98D2\u98D3\u98D4\u98D5\u98D6\u98D7"+
-        "\uE9D8\u98D8\uBAE1\u98D9\u98DA\u98DB\u98DC\uE9C9"+
-        "\u98DD\uD3A3\u98DE\u98DF\u98E0\uE9D4\u98E1\u98E2"+
-        "\u98E3\u98E4\u98E5\u98E6\u98E7\uE9D7\uE9D0\u98E8"+
-        "\u98E9\u98EA\u98EB\u98EC\uE9CF\u98ED\u98EE\uC7C1"+
-        "\u98EF\u98F0\u98F1\u98F2\u98F3\u98F4\u98F5\u98F6"+
-        "\uE9D2\u98F7\u98F8\u98F9\u98FA\u98FB\u98FC\u98FD"+
-        "\uE9D9\uB3C8\u98FE\uE9D3\u9940\u9941\u9942\u9943"+
-        "\u9944\uCFF0\u9945\u9946\u9947\uE9CD\u9948\u9949"+
-        "\u994A\u994B\u994C\u994D\u994E\u994F\u9950\u9951"+
-        "\u9952\uB3F7\u9953\u9954\u9955\u9956\u9957\u9958"+
-        "\u9959\uE9D6\u995A\u995B\uE9DA\u995C\u995D\u995E"+
-        "\uCCB4\u995F\u9960\u9961\uCFAD\u9962\u9963\u9964"+
-        "\u9965\u9966\u9967\u9968\u9969\u996A\uE9D5\u996B"+
-        "\uE9DC\uE9DB\u996C\u996D\u996E\u996F\u9970\uE9DE"+
-        "\u9971\u9972\u9973\u9974\u9975\u9976\u9977\u9978"+
-        "\uE9D1\u9979\u997A\u997B\u997C\u997D\u997E\u9980"+
-        "\u9981\uE9DD\u9982\uE9DF\uC3CA\u9983\u9984\u9985"+
-        "\u9986\u9987\u9988\u9989\u998A\u998B\u998C\u998D"+
-        "\u998E\u998F\u9990\u9991\u9992\u9993\u9994\u9995"+
-        "\u9996\u9997\u9998\u9999\u999A\u999B\u999C\u999D"+
-        "\u999E\u999F\u99A0\u99A1\u99A2\u99A3\u99A4\u99A5"+
-        "\u99A6\u99A7\u99A8\u99A9\u99AA\u99AB\u99AC\u99AD"+
-        "\u99AE\u99AF\u99B0\u99B1\u99B2\u99B3\u99B4\u99B5"+
-        "\u99B6\u99B7\u99B8\u99B9\u99BA\u99BB\u99BC\u99BD"+
-        "\u99BE\u99BF\u99C0\u99C1\u99C2\u99C3\u99C4\u99C5"+
-        "\u99C6\u99C7\u99C8\u99C9\u99CA\u99CB\u99CC\u99CD"+
-        "\u99CE\u99CF\u99D0\u99D1\u99D2\u99D3\u99D4\u99D5"+
-        "\u99D6\u99D7\u99D8\u99D9\u99DA\u99DB\u99DC\u99DD"+
-        "\u99DE\u99DF\u99E0\u99E1\u99E2\u99E3\u99E4\u99E5"+
-        "\u99E6\u99E7\u99E8\u99E9\u99EA\u99EB\u99EC\u99ED"+
-        "\u99EE\u99EF\u99F0\u99F1\u99F2\u99F3\u99F4\u99F5"+
-        "\uC7B7\uB4CE\uBBB6\uD0C0\uECA3\u99F6\u99F7\uC5B7"+
-        "\u99F8\u99F9\u99FA\u99FB\u99FC\u99FD\u99FE\u9A40"+
-        "\u9A41\u9A42\uD3FB\u9A43\u9A44\u9A45\u9A46\uECA4"+
-        "\u9A47\uECA5\uC6DB\u9A48\u9A49\u9A4A\uBFEE\u9A4B"+
-        "\u9A4C\u9A4D\u9A4E\uECA6\u9A4F\u9A50\uECA7\uD0AA"+
-        "\u9A51\uC7B8\u9A52\u9A53\uB8E8\u9A54\u9A55\u9A56"+
-        "\u9A57\u9A58\u9A59\u9A5A\u9A5B\u9A5C\u9A5D\u9A5E"+
-        "\u9A5F\uECA8\u9A60\u9A61\u9A62\u9A63\u9A64\u9A65"+
-        "\u9A66\u9A67\uD6B9\uD5FD\uB4CB\uB2BD\uCEE4\uC6E7"+
-        "\u9A68\u9A69\uCDE1\u9A6A\u9A6B\u9A6C\u9A6D\u9A6E"+
-        "\u9A6F\u9A70\u9A71\u9A72\u9A73\u9A74\u9A75\u9A76"+
-        "\u9A77\uB4F5\u9A78\uCBC0\uBCDF\u9A79\u9A7A\u9A7B"+
-        "\u9A7C\uE9E2\uE9E3\uD1EA\uE9E5\u9A7D\uB4F9\uE9E4"+
-        "\u9A7E\uD1B3\uCAE2\uB2D0\u9A80\uE9E8\u9A81\u9A82"+
-        "\u9A83\u9A84\uE9E6\uE9E7\u9A85\u9A86\uD6B3\u9A87"+
-        "\u9A88\u9A89\uE9E9\uE9EA\u9A8A\u9A8B\u9A8C\u9A8D"+
-        "\u9A8E\uE9EB\u9A8F\u9A90\u9A91\u9A92\u9A93\u9A94"+
-        "\u9A95\u9A96\uE9EC\u9A97\u9A98\u9A99\u9A9A\u9A9B"+
-        "\u9A9C\u9A9D\u9A9E\uECAF\uC5B9\uB6CE\u9A9F\uD2F3"+
-        "\u9AA0\u9AA1\u9AA2\u9AA3\u9AA4\u9AA5\u9AA6\uB5EE"+
-        "\u9AA7\uBBD9\uECB1\u9AA8\u9AA9\uD2E3\u9AAA\u9AAB"+
-        "\u9AAC\u9AAD\u9AAE\uCEE3\u9AAF\uC4B8\u9AB0\uC3BF"+
-        "\u9AB1\u9AB2\uB6BE\uD8B9\uB1C8\uB1CF\uB1D1\uC5FE"+
-        "\u9AB3\uB1D0\u9AB4\uC3AB\u9AB5\u9AB6\u9AB7\u9AB8"+
-        "\u9AB9\uD5B1\u9ABA\u9ABB\u9ABC\u9ABD\u9ABE\u9ABF"+
-        "\u9AC0\u9AC1\uEBA4\uBAC1\u9AC2\u9AC3\u9AC4\uCCBA"+
-        "\u9AC5\u9AC6\u9AC7\uEBA5\u9AC8\uEBA7\u9AC9\u9ACA"+
-        "\u9ACB\uEBA8\u9ACC\u9ACD\u9ACE\uEBA6\u9ACF\u9AD0"+
-        "\u9AD1\u9AD2\u9AD3\u9AD4\u9AD5\uEBA9\uEBAB\uEBAA"+
-        "\u9AD6\u9AD7\u9AD8\u9AD9\u9ADA\uEBAC\u9ADB\uCACF"+
-        "\uD8B5\uC3F1\u9ADC\uC3A5\uC6F8\uEBAD\uC4CA\u9ADD"+
-        "\uEBAE\uEBAF\uEBB0\uB7D5\u9ADE\u9ADF\u9AE0\uB7FA"+
-        "\u9AE1\uEBB1\uC7E2\u9AE2\uEBB3\u9AE3\uBAA4\uD1F5"+
-        "\uB0B1\uEBB2\uEBB4\u9AE4\u9AE5\u9AE6\uB5AA\uC2C8"+
-        "\uC7E8\u9AE7\uEBB5\u9AE8\uCBAE\uE3DF\u9AE9\u9AEA"+
-        "\uD3C0\u9AEB\u9AEC\u9AED\u9AEE\uD9DB\u9AEF\u9AF0"+
-        "\uCDA1\uD6AD\uC7F3\u9AF1\u9AF2\u9AF3\uD9E0\uBBE3"+
-        "\u9AF4\uBABA\uE3E2\u9AF5\u9AF6\u9AF7\u9AF8\u9AF9"+
-        "\uCFAB\u9AFA\u9AFB\u9AFC\uE3E0\uC9C7\u9AFD\uBAB9"+
-        "\u9AFE\u9B40\u9B41\uD1B4\uE3E1\uC8EA\uB9AF\uBDAD"+
-        "\uB3D8\uCEDB\u9B42\u9B43\uCCC0\u9B44\u9B45\u9B46"+
-        "\uE3E8\uE3E9\uCDF4\u9B47\u9B48\u9B49\u9B4A\u9B4B"+
-        "\uCCAD\u9B4C\uBCB3\u9B4D\uE3EA\u9B4E\uE3EB\u9B4F"+
-        "\u9B50\uD0DA\u9B51\u9B52\u9B53\uC6FB\uB7DA\u9B54"+
-        "\u9B55\uC7DF\uD2CA\uCED6\u9B56\uE3E4\uE3EC\u9B57"+
-        "\uC9F2\uB3C1\u9B58\u9B59\uE3E7\u9B5A\u9B5B\uC6E3"+
-        "\uE3E5\u9B5C\u9B5D\uEDB3\uE3E6\u9B5E\u9B5F\u9B60"+
-        "\u9B61\uC9B3\u9B62\uC5E6\u9B63\u9B64\u9B65\uB9B5"+
-        "\u9B66\uC3BB\u9B67\uE3E3\uC5BD\uC1A4\uC2D9\uB2D7"+
-        "\u9B68\uE3ED\uBBA6\uC4AD\u9B69\uE3F0\uBEDA\u9B6A"+
-        "\u9B6B\uE3FB\uE3F5\uBAD3\u9B6C\u9B6D\u9B6E\u9B6F"+
-        "\uB7D0\uD3CD\u9B70\uD6CE\uD5D3\uB9C1\uD5B4\uD1D8"+
-        "\u9B71\u9B72\u9B73\u9B74\uD0B9\uC7F6\u9B75\u9B76"+
-        "\u9B77\uC8AA\uB2B4\u9B78\uC3DA\u9B79\u9B7A\u9B7B"+
-        "\uE3EE\u9B7C\u9B7D\uE3FC\uE3EF\uB7A8\uE3F7\uE3F4"+
-        "\u9B7E\u9B80\u9B81\uB7BA\u9B82\u9B83\uC5A2\u9B84"+
-        "\uE3F6\uC5DD\uB2A8\uC6FC\u9B85\uC4E0\u9B86\u9B87"+
-        "\uD7A2\u9B88\uC0E1\uE3F9\u9B89\u9B8A\uE3FA\uE3FD"+
-        "\uCCA9\uE3F3\u9B8B\uD3BE\u9B8C\uB1C3\uEDB4\uE3F1"+
-        "\uE3F2\u9B8D\uE3F8\uD0BA\uC6C3\uD4F3\uE3FE\u9B8E"+
-        "\u9B8F\uBDE0\u9B90\u9B91\uE4A7\u9B92\u9B93\uE4A6"+
-        "\u9B94\u9B95\u9B96\uD1F3\uE4A3\u9B97\uE4A9\u9B98"+
-        "\u9B99\u9B9A\uC8F7\u9B9B\u9B9C\u9B9D\u9B9E\uCFB4"+
-        "\u9B9F\uE4A8\uE4AE\uC2E5\u9BA0\u9BA1\uB6B4\u9BA2"+
-        "\u9BA3\u9BA4\u9BA5\u9BA6\u9BA7\uBDF2\u9BA8\uE4A2"+
-        "\u9BA9\u9BAA\uBAE9\uE4AA\u9BAB\u9BAC\uE4AC\u9BAD"+
-        "\u9BAE\uB6FD\uD6DE\uE4B2\u9BAF\uE4AD\u9BB0\u9BB1"+
-        "\u9BB2\uE4A1\u9BB3\uBBEE\uCDDD\uC7A2\uC5C9\u9BB4"+
-        "\u9BB5\uC1F7\u9BB6\uE4A4\u9BB7\uC7B3\uBDAC\uBDBD"+
-        "\uE4A5\u9BB8\uD7C7\uB2E2\u9BB9\uE4AB\uBCC3\uE4AF"+
-        "\u9BBA\uBBEB\uE4B0\uC5A8\uE4B1\u9BBB\u9BBC\u9BBD"+
-        "\u9BBE\uD5E3\uBFA3\u9BBF\uE4BA\u9BC0\uE4B7\u9BC1"+
-        "\uE4BB\u9BC2\u9BC3\uE4BD\u9BC4\u9BC5\uC6D6\u9BC6"+
-        "\u9BC7\uBAC6\uC0CB\u9BC8\u9BC9\u9BCA\uB8A1\uE4B4"+
-        "\u9BCB\u9BCC\u9BCD\u9BCE\uD4A1\u9BCF\u9BD0\uBAA3"+
-        "\uBDFE\u9BD1\u9BD2\u9BD3\uE4BC\u9BD4\u9BD5\u9BD6"+
-        "\u9BD7\u9BD8\uCDBF\u9BD9\u9BDA\uC4F9\u9BDB\u9BDC"+
-        "\uCFFB\uC9E6\u9BDD\u9BDE\uD3BF\u9BDF\uCFD1\u9BE0"+
-        "\u9BE1\uE4B3\u9BE2\uE4B8\uE4B9\uCCE9\u9BE3\u9BE4"+
-        "\u9BE5\u9BE6\u9BE7\uCCCE\u9BE8\uC0D4\uE4B5\uC1B0"+
-        "\uE4B6\uCED0\u9BE9\uBBC1\uB5D3\u9BEA\uC8F3\uBDA7"+
-        "\uD5C7\uC9AC\uB8A2\uE4CA\u9BEB\u9BEC\uE4CC\uD1C4"+
-        "\u9BED\u9BEE\uD2BA\u9BEF\u9BF0\uBAAD\u9BF1\u9BF2"+
-        "\uBAD4\u9BF3\u9BF4\u9BF5\u9BF6\u9BF7\u9BF8\uE4C3"+
-        "\uB5ED\u9BF9\u9BFA\u9BFB\uD7CD\uE4C0\uCFFD\uE4BF"+
-        "\u9BFC\u9BFD\u9BFE\uC1DC\uCCCA\u9C40\u9C41\u9C42"+
-        "\u9C43\uCAE7\u9C44\u9C45\u9C46\u9C47\uC4D7\u9C48"+
-        "\uCCD4\uE4C8\u9C49\u9C4A\u9C4B\uE4C7\uE4C1\u9C4C"+
-        "\uE4C4\uB5AD\u9C4D\u9C4E\uD3D9\u9C4F\uE4C6\u9C50"+
-        "\u9C51\u9C52\u9C53\uD2F9\uB4E3\u9C54\uBBB4\u9C55"+
-        "\u9C56\uC9EE\u9C57\uB4BE\u9C58\u9C59\u9C5A\uBBEC"+
-        "\u9C5B\uD1CD\u9C5C\uCCED\uEDB5\u9C5D\u9C5E\u9C5F"+
-        "\u9C60\u9C61\u9C62\u9C63\u9C64\uC7E5\u9C65\u9C66"+
-        "\u9C67\u9C68\uD4A8\u9C69\uE4CB\uD7D5\uE4C2\u9C6A"+
-        "\uBDA5\uE4C5\u9C6B\u9C6C\uD3E6\u9C6D\uE4C9\uC9F8"+
-        "\u9C6E\u9C6F\uE4BE\u9C70\u9C71\uD3E5\u9C72\u9C73"+
-        "\uC7FE\uB6C9\u9C74\uD4FC\uB2B3\uE4D7\u9C75\u9C76"+
-        "\u9C77\uCEC2\u9C78\uE4CD\u9C79\uCEBC\u9C7A\uB8DB"+
-        "\u9C7B\u9C7C\uE4D6\u9C7D\uBFCA\u9C7E\u9C80\u9C81"+
-        "\uD3CE\u9C82\uC3EC\u9C83\u9C84\u9C85\u9C86\u9C87"+
-        "\u9C88\u9C89\u9C8A\uC5C8\uE4D8\u9C8B\u9C8C\u9C8D"+
-        "\u9C8E\u9C8F\u9C90\u9C91\u9C92\uCDC4\uE4CF\u9C93"+
-        "\u9C94\u9C95\u9C96\uE4D4\uE4D5\u9C97\uBAFE\u9C98"+
-        "\uCFE6\u9C99\u9C9A\uD5BF\u9C9B\u9C9C\u9C9D\uE4D2"+
-        "\u9C9E\u9C9F\u9CA0\u9CA1\u9CA2\u9CA3\u9CA4\u9CA5"+
-        "\u9CA6\u9CA7\u9CA8\uE4D0\u9CA9\u9CAA\uE4CE\u9CAB"+
-        "\u9CAC\u9CAD\u9CAE\u9CAF\u9CB0\u9CB1\u9CB2\u9CB3"+
-        "\u9CB4\u9CB5\u9CB6\u9CB7\u9CB8\u9CB9\uCDE5\uCAAA"+
-        "\u9CBA\u9CBB\u9CBC\uC0A3\u9CBD\uBDA6\uE4D3\u9CBE"+
-        "\u9CBF\uB8C8\u9CC0\u9CC1\u9CC2\u9CC3\u9CC4\uE4E7"+
-        "\uD4B4\u9CC5\u9CC6\u9CC7\u9CC8\u9CC9\u9CCA\u9CCB"+
-        "\uE4DB\u9CCC\u9CCD\u9CCE\uC1EF\u9CCF\u9CD0\uE4E9"+
-        "\u9CD1\u9CD2\uD2E7\u9CD3\u9CD4\uE4DF\u9CD5\uE4E0"+
-        "\u9CD6\u9CD7\uCFAA\u9CD8\u9CD9\u9CDA\u9CDB\uCBDD"+
-        "\u9CDC\uE4DA\uE4D1\u9CDD\uE4E5\u9CDE\uC8DC\uE4E3"+
-        "\u9CDF\u9CE0\uC4E7\uE4E2\u9CE1\uE4E1\u9CE2\u9CE3"+
-        "\u9CE4\uB3FC\uE4E8\u9CE5\u9CE6\u9CE7\u9CE8\uB5E1"+
-        "\u9CE9\u9CEA\u9CEB\uD7CC\u9CEC\u9CED\u9CEE\uE4E6"+
-        "\u9CEF\uBBAC\u9CF0\uD7D2\uCCCF\uEBF8\u9CF1\uE4E4"+
-        "\u9CF2\u9CF3\uB9F6\u9CF4\u9CF5\u9CF6\uD6CD\uE4D9"+
-        "\uE4DC\uC2FA\uE4DE\u9CF7\uC2CB\uC0C4\uC2D0\u9CF8"+
-        "\uB1F5\uCCB2\u9CF9\u9CFA\u9CFB\u9CFC\u9CFD\u9CFE"+
-        "\u9D40\u9D41\u9D42\u9D43\uB5CE\u9D44\u9D45\u9D46"+
-        "\u9D47\uE4EF\u9D48\u9D49\u9D4A\u9D4B\u9D4C\u9D4D"+
-        "\u9D4E\u9D4F\uC6AF\u9D50\u9D51\u9D52\uC6E1\u9D53"+
-        "\u9D54\uE4F5\u9D55\u9D56\u9D57\u9D58\u9D59\uC2A9"+
-        "\u9D5A\u9D5B\u9D5C\uC0EC\uD1DD\uE4EE\u9D5D\u9D5E"+
-        "\u9D5F\u9D60\u9D61\u9D62\u9D63\u9D64\u9D65\u9D66"+
-        "\uC4AE\u9D67\u9D68\u9D69\uE4ED\u9D6A\u9D6B\u9D6C"+
-        "\u9D6D\uE4F6\uE4F4\uC2FE\u9D6E\uE4DD\u9D6F\uE4F0"+
-        "\u9D70\uCAFE\u9D71\uD5C4\u9D72\u9D73\uE4F1\u9D74"+
-        "\u9D75\u9D76\u9D77\u9D78\u9D79\u9D7A\uD1FA\u9D7B"+
-        "\u9D7C\u9D7D\u9D7E\u9D80\u9D81\u9D82\uE4EB\uE4EC"+
-        "\u9D83\u9D84\u9D85\uE4F2\u9D86\uCEAB\u9D87\u9D88"+
-        "\u9D89\u9D8A\u9D8B\u9D8C\u9D8D\u9D8E\u9D8F\u9D90"+
-        "\uC5CB\u9D91\u9D92\u9D93\uC7B1\u9D94\uC2BA\u9D95"+
-        "\u9D96\u9D97\uE4EA\u9D98\u9D99\u9D9A\uC1CA\u9D9B"+
-        "\u9D9C\u9D9D\u9D9E\u9D9F\u9DA0\uCCB6\uB3B1\u9DA1"+
-        "\u9DA2\u9DA3\uE4FB\u9DA4\uE4F3\u9DA5\u9DA6\u9DA7"+
-        "\uE4FA\u9DA8\uE4FD\u9DA9\uE4FC\u9DAA\u9DAB\u9DAC"+
-        "\u9DAD\u9DAE\u9DAF\u9DB0\uB3CE\u9DB1\u9DB2\u9DB3"+
-        "\uB3BA\uE4F7\u9DB4\u9DB5\uE4F9\uE4F8\uC5EC\u9DB6"+
-        "\u9DB7\u9DB8\u9DB9\u9DBA\u9DBB\u9DBC\u9DBD\u9DBE"+
-        "\u9DBF\u9DC0\u9DC1\u9DC2\uC0BD\u9DC3\u9DC4\u9DC5"+
-        "\u9DC6\uD4E8\u9DC7\u9DC8\u9DC9\u9DCA\u9DCB\uE5A2"+
-        "\u9DCC\u9DCD\u9DCE\u9DCF\u9DD0\u9DD1\u9DD2\u9DD3"+
-        "\u9DD4\u9DD5\u9DD6\uB0C4\u9DD7\u9DD8\uE5A4\u9DD9"+
-        "\u9DDA\uE5A3\u9DDB\u9DDC\u9DDD\u9DDE\u9DDF\u9DE0"+
-        "\uBCA4\u9DE1\uE5A5\u9DE2\u9DE3\u9DE4\u9DE5\u9DE6"+
-        "\u9DE7\uE5A1\u9DE8\u9DE9\u9DEA\u9DEB\u9DEC\u9DED"+
-        "\u9DEE\uE4FE\uB1F4\u9DEF\u9DF0\u9DF1\u9DF2\u9DF3"+
-        "\u9DF4\u9DF5\u9DF6\u9DF7\u9DF8\u9DF9\uE5A8\u9DFA"+
-        "\uE5A9\uE5A6\u9DFB\u9DFC\u9DFD\u9DFE\u9E40\u9E41"+
-        "\u9E42\u9E43\u9E44\u9E45\u9E46\u9E47\uE5A7\uE5AA"+
-        "\u9E48\u9E49\u9E4A\u9E4B\u9E4C\u9E4D\u9E4E\u9E4F"+
-        "\u9E50\u9E51\u9E52\u9E53\u9E54\u9E55\u9E56\u9E57";
-
-    private final static String innerEncoderIndex7=
-        "\u9E58\u9E59\u9E5A\u9E5B\u9E5C\u9E5D\u9E5E\u9E5F"+
-        "\u9E60\u9E61\u9E62\u9E63\u9E64\u9E65\u9E66\u9E67"+
-        "\u9E68\uC6D9\u9E69\u9E6A\u9E6B\u9E6C\u9E6D\u9E6E"+
-        "\u9E6F\u9E70\uE5AB\uE5AD\u9E71\u9E72\u9E73\u9E74"+
-        "\u9E75\u9E76\u9E77\uE5AC\u9E78\u9E79\u9E7A\u9E7B"+
-        "\u9E7C\u9E7D\u9E7E\u9E80\u9E81\u9E82\u9E83\u9E84"+
-        "\u9E85\u9E86\u9E87\u9E88\u9E89\uE5AF\u9E8A\u9E8B"+
-        "\u9E8C\uE5AE\u9E8D\u9E8E\u9E8F\u9E90\u9E91\u9E92"+
-        "\u9E93\u9E94\u9E95\u9E96\u9E97\u9E98\u9E99\u9E9A"+
-        "\u9E9B\u9E9C\u9E9D\u9E9E\uB9E0\u9E9F\u9EA0\uE5B0"+
-        "\u9EA1\u9EA2\u9EA3\u9EA4\u9EA5\u9EA6\u9EA7\u9EA8"+
-        "\u9EA9\u9EAA\u9EAB\u9EAC\u9EAD\u9EAE\uE5B1\u9EAF"+
-        "\u9EB0\u9EB1\u9EB2\u9EB3\u9EB4\u9EB5\u9EB6\u9EB7"+
-        "\u9EB8\u9EB9\u9EBA\uBBF0\uECE1\uC3F0\u9EBB\uB5C6"+
-        "\uBBD2\u9EBC\u9EBD\u9EBE\u9EBF\uC1E9\uD4EE\u9EC0"+
-        "\uBEC4\u9EC1\u9EC2\u9EC3\uD7C6\u9EC4\uD4D6\uB2D3"+
-        "\uECBE\u9EC5\u9EC6\u9EC7\u9EC8\uEAC1\u9EC9\u9ECA"+
-        "\u9ECB\uC2AF\uB4B6\u9ECC\u9ECD\u9ECE\uD1D7\u9ECF"+
-        "\u9ED0\u9ED1\uB3B4\u9ED2\uC8B2\uBFBB\uECC0\u9ED3"+
-        "\u9ED4\uD6CB\u9ED5\u9ED6\uECBF\uECC1\u9ED7\u9ED8"+
-        "\u9ED9\u9EDA\u9EDB\u9EDC\u9EDD\u9EDE\u9EDF\u9EE0"+
-        "\u9EE1\u9EE2\u9EE3\uECC5\uBEE6\uCCBF\uC5DA\uBEBC"+
-        "\u9EE4\uECC6\u9EE5\uB1FE\u9EE6\u9EE7\u9EE8\uECC4"+
-        "\uD5A8\uB5E3\u9EE9\uECC2\uC1B6\uB3E3\u9EEA\u9EEB"+
-        "\uECC3\uCBB8\uC0C3\uCCFE\u9EEC\u9EED\u9EEE\u9EEF"+
-        "\uC1D2\u9EF0\uECC8\u9EF1\u9EF2\u9EF3\u9EF4\u9EF5"+
-        "\u9EF6\u9EF7\u9EF8\u9EF9\u9EFA\u9EFB\u9EFC\u9EFD"+
-        "\uBAE6\uC0D3\u9EFE\uD6F2\u9F40\u9F41\u9F42\uD1CC"+
-        "\u9F43\u9F44\u9F45\u9F46\uBFBE\u9F47\uB7B3\uC9D5"+
-        "\uECC7\uBBE2\u9F48\uCCCC\uBDFD\uC8C8\u9F49\uCFA9"+
-        "\u9F4A\u9F4B\u9F4C\u9F4D\u9F4E\u9F4F\u9F50\uCDE9"+
-        "\u9F51\uC5EB\u9F52\u9F53\u9F54\uB7E9\u9F55\u9F56"+
-        "\u9F57\u9F58\u9F59\u9F5A\u9F5B\u9F5C\u9F5D\u9F5E"+
-        "\u9F5F\uD1C9\uBAB8\u9F60\u9F61\u9F62\u9F63\u9F64"+
-        "\uECC9\u9F65\u9F66\uECCA\u9F67\uBBC0\uECCB\u9F68"+
-        "\uECE2\uB1BA\uB7D9\u9F69\u9F6A\u9F6B\u9F6C\u9F6D"+
-        "\u9F6E\u9F6F\u9F70\u9F71\u9F72\u9F73\uBDB9\u9F74"+
-        "\u9F75\u9F76\u9F77\u9F78\u9F79\u9F7A\u9F7B\uECCC"+
-        "\uD1E6\uECCD\u9F7C\u9F7D\u9F7E\u9F80\uC8BB\u9F81"+
-        "\u9F82\u9F83\u9F84\u9F85\u9F86\u9F87\u9F88\u9F89"+
-        "\u9F8A\u9F8B\u9F8C\u9F8D\u9F8E\uECD1\u9F8F\u9F90"+
-        "\u9F91\u9F92\uECD3\u9F93\uBBCD\u9F94\uBCE5\u9F95"+
-        "\u9F96\u9F97\u9F98\u9F99\u9F9A\u9F9B\u9F9C\u9F9D"+
-        "\u9F9E\u9F9F\u9FA0\u9FA1\uECCF\u9FA2\uC9B7\u9FA3"+
-        "\u9FA4\u9FA5\u9FA6\u9FA7\uC3BA\u9FA8\uECE3\uD5D5"+
-        "\uECD0\u9FA9\u9FAA\u9FAB\u9FAC\u9FAD\uD6F3\u9FAE"+
-        "\u9FAF\u9FB0\uECD2\uECCE\u9FB1\u9FB2\u9FB3\u9FB4"+
-        "\uECD4\u9FB5\uECD5\u9FB6\u9FB7\uC9BF\u9FB8\u9FB9"+
-        "\u9FBA\u9FBB\u9FBC\u9FBD\uCFA8\u9FBE\u9FBF\u9FC0"+
-        "\u9FC1\u9FC2\uD0DC\u9FC3\u9FC4\u9FC5\u9FC6\uD1AC"+
-        "\u9FC7\u9FC8\u9FC9\u9FCA\uC8DB\u9FCB\u9FCC\u9FCD"+
-        "\uECD6\uCEF5\u9FCE\u9FCF\u9FD0\u9FD1\u9FD2\uCAEC"+
-        "\uECDA\u9FD3\u9FD4\u9FD5\u9FD6\u9FD7\u9FD8\u9FD9"+
-        "\uECD9\u9FDA\u9FDB\u9FDC\uB0BE\u9FDD\u9FDE\u9FDF"+
-        "\u9FE0\u9FE1\u9FE2\uECD7\u9FE3\uECD8\u9FE4\u9FE5"+
-        "\u9FE6\uECE4\u9FE7\u9FE8\u9FE9\u9FEA\u9FEB\u9FEC"+
-        "\u9FED\u9FEE\u9FEF\uC8BC\u9FF0\u9FF1\u9FF2\u9FF3"+
-        "\u9FF4\u9FF5\u9FF6\u9FF7\u9FF8\u9FF9\uC1C7\u9FFA"+
-        "\u9FFB\u9FFC\u9FFD\u9FFE\uECDC\uD1E0\uA040\uA041"+
-        "\uA042\uA043\uA044\uA045\uA046\uA047\uA048\uA049"+
-        "\uECDB\uA04A\uA04B\uA04C\uA04D\uD4EF\uA04E\uECDD"+
-        "\uA04F\uA050\uA051\uA052\uA053\uA054\uDBC6\uA055"+
-        "\uA056\uA057\uA058\uA059\uA05A\uA05B\uA05C\uA05D"+
-        "\uA05E\uECDE\uA05F\uA060\uA061\uA062\uA063\uA064"+
-        "\uA065\uA066\uA067\uA068\uA069\uA06A\uB1AC\uA06B"+
-        "\uA06C\uA06D\uA06E\uA06F\uA070\uA071\uA072\uA073"+
-        "\uA074\uA075\uA076\uA077\uA078\uA079\uA07A\uA07B"+
-        "\uA07C\uA07D\uA07E\uA080\uA081\uECDF\uA082\uA083"+
-        "\uA084\uA085\uA086\uA087\uA088\uA089\uA08A\uA08B"+
-        "\uECE0\uA08C\uD7A6\uA08D\uC5C0\uA08E\uA08F\uA090"+
-        "\uEBBC\uB0AE\uA091\uA092\uA093\uBEF4\uB8B8\uD2AF"+
-        "\uB0D6\uB5F9\uA094\uD8B3\uA095\uCBAC\uA096\uE3DD"+
-        "\uA097\uA098\uA099\uA09A\uA09B\uA09C\uA09D\uC6AC"+
-        "\uB0E6\uA09E\uA09F\uA0A0\uC5C6\uEBB9\uA0A1\uA0A2"+
-        "\uA0A3\uA0A4\uEBBA\uA0A5\uA0A6\uA0A7\uEBBB\uA0A8"+
-        "\uA0A9\uD1C0\uA0AA\uC5A3\uA0AB\uEAF2\uA0AC\uC4B2"+
-        "\uA0AD\uC4B5\uC0CE\uA0AE\uA0AF\uA0B0\uEAF3\uC4C1"+
-        "\uA0B1\uCEEF\uA0B2\uA0B3\uA0B4\uA0B5\uEAF0\uEAF4"+
-        "\uA0B6\uA0B7\uC9FC\uA0B8\uA0B9\uC7A3\uA0BA\uA0BB"+
-        "\uA0BC\uCCD8\uCEFE\uA0BD\uA0BE\uA0BF\uEAF5\uEAF6"+
-        "\uCFAC\uC0E7\uA0C0\uA0C1\uEAF7\uA0C2\uA0C3\uA0C4"+
-        "\uA0C5\uA0C6\uB6BF\uEAF8\uA0C7\uEAF9\uA0C8\uEAFA"+
-        "\uA0C9\uA0CA\uEAFB\uA0CB\uA0CC\uA0CD\uA0CE\uA0CF"+
-        "\uA0D0\uA0D1\uA0D2\uA0D3\uA0D4\uA0D5\uA0D6\uEAF1"+
-        "\uA0D7\uA0D8\uA0D9\uA0DA\uA0DB\uA0DC\uA0DD\uA0DE"+
-        "\uA0DF\uA0E0\uA0E1\uA0E2\uC8AE\uE1EB\uA0E3\uB7B8"+
-        "\uE1EC\uA0E4\uA0E5\uA0E6\uE1ED\uA0E7\uD7B4\uE1EE"+
-        "\uE1EF\uD3CC\uA0E8\uA0E9\uA0EA\uA0EB\uA0EC\uA0ED"+
-        "\uA0EE\uE1F1\uBFF1\uE1F0\uB5D2\uA0EF\uA0F0\uA0F1"+
-        "\uB1B7\uA0F2\uA0F3\uA0F4\uA0F5\uE1F3\uE1F2\uA0F6"+
-        "\uBAFC\uA0F7\uE1F4\uA0F8\uA0F9\uA0FA\uA0FB\uB9B7"+
-        "\uA0FC\uBED1\uA0FD\uA0FE\uAA40\uAA41\uC4FC\uAA42"+
-        "\uBADD\uBDC6\uAA43\uAA44\uAA45\uAA46\uAA47\uAA48"+
-        "\uE1F5\uE1F7\uAA49\uAA4A\uB6C0\uCFC1\uCAA8\uE1F6"+
-        "\uD5F8\uD3FC\uE1F8\uE1FC\uE1F9\uAA4B\uAA4C\uE1FA"+
-        "\uC0EA\uAA4D\uE1FE\uE2A1\uC0C7\uAA4E\uAA4F\uAA50"+
-        "\uAA51\uE1FB\uAA52\uE1FD\uAA53\uAA54\uAA55\uAA56"+
-        "\uAA57\uAA58\uE2A5\uAA59\uAA5A\uAA5B\uC1D4\uAA5C"+
-        "\uAA5D\uAA5E\uAA5F\uE2A3\uAA60\uE2A8\uB2FE\uE2A2"+
-        "\uAA61\uAA62\uAA63\uC3CD\uB2C2\uE2A7\uE2A6\uAA64"+
-        "\uAA65\uE2A4\uE2A9\uAA66\uAA67\uE2AB\uAA68\uAA69"+
-        "\uAA6A\uD0C9\uD6ED\uC3A8\uE2AC\uAA6B\uCFD7\uAA6C"+
-        "\uAA6D\uE2AE\uAA6E\uAA6F\uBAEF\uAA70\uAA71\uE9E0"+
-        "\uE2AD\uE2AA\uAA72\uAA73\uAA74\uAA75\uBBAB\uD4B3"+
-        "\uAA76\uAA77\uAA78\uAA79\uAA7A\uAA7B\uAA7C\uAA7D"+
-        "\uAA7E\uAA80\uAA81\uAA82\uAA83\uE2B0\uAA84\uAA85"+
-        "\uE2AF\uAA86\uE9E1\uAA87\uAA88\uAA89\uAA8A\uE2B1"+
-        "\uAA8B\uAA8C\uAA8D\uAA8E\uAA8F\uAA90\uAA91\uAA92"+
-        "\uE2B2\uAA93\uAA94\uAA95\uAA96\uAA97\uAA98\uAA99"+
-        "\uAA9A\uAA9B\uAA9C\uAA9D\uE2B3\uCCA1\uAA9E\uE2B4"+
-        "\uAA9F\uAAA0\uAB40\uAB41\uAB42\uAB43\uAB44\uAB45"+
-        "\uAB46\uAB47\uAB48\uAB49\uAB4A\uAB4B\uE2B5\uAB4C"+
-        "\uAB4D\uAB4E\uAB4F\uAB50\uD0FE\uAB51\uAB52\uC2CA"+
-        "\uAB53\uD3F1\uAB54\uCDF5\uAB55\uAB56\uE7E0\uAB57"+
-        "\uAB58\uE7E1\uAB59\uAB5A\uAB5B\uAB5C\uBEC1\uAB5D"+
-        "\uAB5E\uAB5F\uAB60\uC2EA\uAB61\uAB62\uAB63\uE7E4"+
-        "\uAB64\uAB65\uE7E3\uAB66\uAB67\uAB68\uAB69\uAB6A"+
-        "\uAB6B\uCDE6\uAB6C\uC3B5\uAB6D\uAB6E\uE7E2\uBBB7"+
-        "\uCFD6\uAB6F\uC1E1\uE7E9\uAB70\uAB71\uAB72\uE7E8"+
-        "\uAB73\uAB74\uE7F4\uB2A3\uAB75\uAB76\uAB77\uAB78"+
-        "\uE7EA\uAB79\uE7E6\uAB7A\uAB7B\uAB7C\uAB7D\uAB7E"+
-        "\uE7EC\uE7EB\uC9BA\uAB80\uAB81\uD5E4\uAB82\uE7E5"+
-        "\uB7A9\uE7E7\uAB83\uAB84\uAB85\uAB86\uAB87\uAB88"+
-        "\uAB89\uE7EE\uAB8A\uAB8B\uAB8C\uAB8D\uE7F3\uAB8E"+
-        "\uD6E9\uAB8F\uAB90\uAB91\uAB92\uE7ED\uAB93\uE7F2"+
-        "\uAB94\uE7F1\uAB95\uAB96\uAB97\uB0E0\uAB98\uAB99"+
-        "\uAB9A\uAB9B\uE7F5\uAB9C\uAB9D\uAB9E\uAB9F\uABA0"+
-        "\uAC40\uAC41\uAC42\uAC43\uAC44\uAC45\uAC46\uAC47"+
-        "\uAC48\uAC49\uAC4A\uC7F2\uAC4B\uC0C5\uC0ED\uAC4C"+
-        "\uAC4D\uC1F0\uE7F0\uAC4E\uAC4F\uAC50\uAC51\uE7F6"+
-        "\uCBF6\uAC52\uAC53\uAC54\uAC55\uAC56\uAC57\uAC58"+
-        "\uAC59\uAC5A\uE8A2\uE8A1\uAC5B\uAC5C\uAC5D\uAC5E"+
-        "\uAC5F\uAC60\uD7C1\uAC61\uAC62\uE7FA\uE7F9\uAC63"+
-        "\uE7FB\uAC64\uE7F7\uAC65\uE7FE\uAC66\uE7FD\uAC67"+
-        "\uE7FC\uAC68\uAC69\uC1D5\uC7D9\uC5FD\uC5C3\uAC6A"+
-        "\uAC6B\uAC6C\uAC6D\uAC6E\uC7ED\uAC6F\uAC70\uAC71"+
-        "\uAC72\uE8A3\uAC73\uAC74\uAC75\uAC76\uAC77\uAC78"+
-        "\uAC79\uAC7A\uAC7B\uAC7C\uAC7D\uAC7E\uAC80\uAC81"+
-        "\uAC82\uAC83\uAC84\uAC85\uAC86\uE8A6\uAC87\uE8A5"+
-        "\uAC88\uE8A7\uBAF7\uE7F8\uE8A4\uAC89\uC8F0\uC9AA"+
-        "\uAC8A\uAC8B\uAC8C\uAC8D\uAC8E\uAC8F\uAC90\uAC91"+
-        "\uAC92\uAC93\uAC94\uAC95\uAC96\uE8A9\uAC97\uAC98"+
-        "\uB9E5\uAC99\uAC9A\uAC9B\uAC9C\uAC9D\uD1FE\uE8A8"+
-        "\uAC9E\uAC9F\uACA0\uAD40\uAD41\uAD42\uE8AA\uAD43"+
-        "\uE8AD\uE8AE\uAD44\uC1A7\uAD45\uAD46\uAD47\uE8AF"+
-        "\uAD48\uAD49\uAD4A\uE8B0\uAD4B\uAD4C\uE8AC\uAD4D"+
-        "\uE8B4\uAD4E\uAD4F\uAD50\uAD51\uAD52\uAD53\uAD54"+
-        "\uAD55\uAD56\uAD57\uAD58\uE8AB\uAD59\uE8B1\uAD5A"+
-        "\uAD5B\uAD5C\uAD5D\uAD5E\uAD5F\uAD60\uAD61\uE8B5"+
-        "\uE8B2\uE8B3\uAD62\uAD63\uAD64\uAD65\uAD66\uAD67"+
-        "\uAD68\uAD69\uAD6A\uAD6B\uAD6C\uAD6D\uAD6E\uAD6F"+
-        "\uAD70\uAD71\uE8B7\uAD72\uAD73\uAD74\uAD75\uAD76"+
-        "\uAD77\uAD78\uAD79\uAD7A\uAD7B\uAD7C\uAD7D\uAD7E"+
-        "\uAD80\uAD81\uAD82\uAD83\uAD84\uAD85\uAD86\uAD87"+
-        "\uAD88\uAD89\uE8B6\uAD8A\uAD8B\uAD8C\uAD8D\uAD8E"+
-        "\uAD8F\uAD90\uAD91\uAD92\uB9CF\uAD93\uF0AC\uAD94"+
-        "\uF0AD\uAD95\uC6B0\uB0EA\uC8BF\uAD96\uCDDF\uAD97"+
-        "\uAD98\uAD99\uAD9A\uAD9B\uAD9C\uAD9D\uCECD\uEAB1"+
-        "\uAD9E\uAD9F\uADA0\uAE40\uEAB2\uAE41\uC6BF\uB4C9"+
-        "\uAE42\uAE43\uAE44\uAE45\uAE46\uAE47\uAE48\uEAB3"+
-        "\uAE49\uAE4A\uAE4B\uAE4C\uD5E7\uAE4D\uAE4E\uAE4F"+
-        "\uAE50\uAE51\uAE52\uAE53\uAE54\uDDF9\uAE55\uEAB4"+
-        "\uAE56\uEAB5\uAE57\uEAB6\uAE58\uAE59\uAE5A\uAE5B"+
-        "\uB8CA\uDFB0\uC9F5\uAE5C\uCCF0\uAE5D\uAE5E\uC9FA"+
-        "\uAE5F\uAE60\uAE61\uAE62\uAE63\uC9FB\uAE64\uAE65"+
-        "\uD3C3\uCBA6\uAE66\uB8A6\uF0AE\uB1C2\uAE67\uE5B8"+
-        "\uCCEF\uD3C9\uBCD7\uC9EA\uAE68\uB5E7\uAE69\uC4D0"+
-        "\uB5E9\uAE6A\uEEAE\uBBAD\uAE6B\uAE6C\uE7DE\uAE6D"+
-        "\uEEAF\uAE6E\uAE6F\uAE70\uAE71\uB3A9\uAE72\uAE73"+
-        "\uEEB2\uAE74\uAE75\uEEB1\uBDE7\uAE76\uEEB0\uCEB7"+
-        "\uAE77\uAE78\uAE79\uAE7A\uC5CF\uAE7B\uAE7C\uAE7D"+
-        "\uAE7E\uC1F4\uDBCE\uEEB3\uD0F3\uAE80\uAE81\uAE82"+
-        "\uAE83\uAE84\uAE85\uAE86\uAE87\uC2D4\uC6E8\uAE88"+
-        "\uAE89\uAE8A\uB7AC\uAE8B\uAE8C\uAE8D\uAE8E\uAE8F"+
-        "\uAE90\uAE91\uEEB4\uAE92\uB3EB\uAE93\uAE94\uAE95"+
-        "\uBBFB\uEEB5\uAE96\uAE97\uAE98\uAE99\uAE9A\uE7DC"+
-        "\uAE9B\uAE9C\uAE9D\uEEB6\uAE9E\uAE9F\uBDAE\uAEA0"+
-        "\uAF40\uAF41\uAF42\uF1E2\uAF43\uAF44\uAF45\uCAE8"+
-        "\uAF46\uD2C9\uF0DA\uAF47\uF0DB\uAF48\uF0DC\uC1C6"+
-        "\uAF49\uB8ED\uBECE\uAF4A\uAF4B\uF0DE\uAF4C\uC5B1"+
-        "\uF0DD\uD1F1\uAF4D\uF0E0\uB0CC\uBDEA\uAF4E\uAF4F"+
-        "\uAF50\uAF51\uAF52\uD2DF\uF0DF\uAF53\uB4AF\uB7E8"+
-        "\uF0E6\uF0E5\uC6A3\uF0E1\uF0E2\uB4C3\uAF54\uAF55"+
-        "\uF0E3\uD5EE\uAF56\uAF57\uCCDB\uBED2\uBCB2\uAF58"+
-        "\uAF59\uAF5A\uF0E8\uF0E7\uF0E4\uB2A1\uAF5B\uD6A2"+
-        "\uD3B8\uBEB7\uC8AC\uAF5C\uAF5D\uF0EA\uAF5E\uAF5F"+
-        "\uAF60\uAF61\uD1F7\uAF62\uD6CC\uBADB\uF0E9\uAF63"+
-        "\uB6BB\uAF64\uAF65\uCDB4\uAF66\uAF67\uC6A6\uAF68"+
-        "\uAF69\uAF6A\uC1A1\uF0EB\uF0EE\uAF6B\uF0ED\uF0F0"+
-        "\uF0EC\uAF6C\uBBBE\uF0EF\uAF6D\uAF6E\uAF6F\uAF70"+
-        "\uCCB5\uF0F2\uAF71\uAF72\uB3D5\uAF73\uAF74\uAF75"+
-        "\uAF76\uB1D4\uAF77\uAF78\uF0F3\uAF79\uAF7A\uF0F4"+
-        "\uF0F6\uB4E1\uAF7B\uF0F1\uAF7C\uF0F7\uAF7D\uAF7E"+
-        "\uAF80\uAF81\uF0FA\uAF82\uF0F8\uAF83\uAF84\uAF85"+
-        "\uF0F5\uAF86\uAF87\uAF88\uAF89\uF0FD\uAF8A\uF0F9"+
-        "\uF0FC\uF0FE\uAF8B\uF1A1\uAF8C\uAF8D\uAF8E\uCEC1"+
-        "\uF1A4\uAF8F\uF1A3\uAF90\uC1F6\uF0FB\uCADD\uAF91"+
-        "\uAF92\uB4F1\uB1F1\uCCB1\uAF93\uF1A6\uAF94\uAF95"+
-        "\uF1A7\uAF96\uAF97\uF1AC\uD5CE\uF1A9\uAF98\uAF99"+
-        "\uC8B3\uAF9A\uAF9B\uAF9C\uF1A2\uAF9D\uF1AB\uF1A8"+
-        "\uF1A5\uAF9E\uAF9F\uF1AA\uAFA0\uB040\uB041\uB042"+
-        "\uB043\uB044\uB045\uB046\uB0A9\uF1AD\uB047\uB048"+
-        "\uB049\uB04A\uB04B\uB04C\uF1AF\uB04D\uF1B1\uB04E"+
-        "\uB04F\uB050\uB051\uB052\uF1B0\uB053\uF1AE\uB054"+
-        "\uB055\uB056\uB057\uD1A2\uB058\uB059\uB05A\uB05B"+
-        "\uB05C\uB05D\uB05E\uF1B2\uB05F\uB060\uB061\uF1B3"+
-        "\uB062\uB063\uB064\uB065\uB066\uB067\uB068\uB069"+
-        "\uB9EF\uB06A\uB06B\uB5C7\uB06C\uB0D7\uB0D9\uB06D"+
-        "\uB06E\uB06F\uD4ED\uB070\uB5C4\uB071\uBDD4\uBBCA"+
-        "\uF0A7\uB072\uB073\uB8DE\uB074\uB075\uF0A8\uB076"+
-        "\uB077\uB0A8\uB078\uF0A9\uB079\uB07A\uCDEE\uB07B"+
-        "\uB07C\uF0AA\uB07D\uB07E\uB080\uB081\uB082\uB083"+
-        "\uB084\uB085\uB086\uB087\uF0AB\uB088\uB089\uB08A"+
-        "\uB08B\uB08C\uB08D\uB08E\uB08F\uB090\uC6A4\uB091"+
-        "\uB092\uD6E5\uF1E4\uB093\uF1E5\uB094\uB095\uB096"+
-        "\uB097\uB098\uB099\uB09A\uB09B\uB09C\uB09D\uC3F3"+
-        "\uB09E\uB09F\uD3DB\uB0A0\uB140\uD6D1\uC5E8\uB141"+
-        "\uD3AF\uB142\uD2E6\uB143\uB144\uEEC1\uB0BB\uD5B5"+
-        "\uD1CE\uBCE0\uBAD0\uB145\uBFF8\uB146\uB8C7\uB5C1"+
-        "\uC5CC\uB147\uB148\uCAA2\uB149\uB14A\uB14B\uC3CB"+
-        "\uB14C\uB14D\uB14E\uB14F\uB150\uEEC2\uB151\uB152"+
-        "\uB153\uB154\uB155\uB156\uB157\uB158\uC4BF\uB6A2"+
-        "\uB159\uEDEC\uC3A4\uB15A\uD6B1\uB15B\uB15C\uB15D"+
-        "\uCFE0\uEDEF\uB15E\uB15F\uC5CE\uB160\uB6DC\uB161"+
-        "\uB162\uCAA1\uB163\uB164\uEDED\uB165\uB166\uEDF0"+
-        "\uEDF1\uC3BC\uB167\uBFB4\uB168\uEDEE\uB169\uB16A"+
-        "\uB16B\uB16C\uB16D\uB16E\uB16F\uB170\uB171\uB172"+
-        "\uB173\uEDF4\uEDF2\uB174\uB175\uB176\uB177\uD5E6"+
-        "\uC3DF\uB178\uEDF3\uB179\uB17A\uB17B\uEDF6\uB17C"+
-        "\uD5A3\uD1A3\uB17D\uB17E\uB180\uEDF5\uB181\uC3D0"+
-        "\uB182\uB183\uB184\uB185\uB186\uEDF7\uBFF4\uBEEC"+
-        "\uEDF8\uB187\uCCF7\uB188\uD1DB\uB189\uB18A\uB18B"+
-        "\uD7C5\uD5F6\uB18C\uEDFC\uB18D\uB18E\uB18F\uEDFB"+
-        "\uB190\uB191\uB192\uB193\uB194\uB195\uB196\uB197"+
-        "\uEDF9\uEDFA\uB198\uB199\uB19A\uB19B\uB19C\uB19D"+
-        "\uB19E\uB19F\uEDFD\uBEA6\uB1A0\uB240\uB241\uB242"+
-        "\uB243\uCBAF\uEEA1\uB6BD\uB244\uEEA2\uC4C0\uB245"+
-        "\uEDFE\uB246\uB247\uBDDE\uB2C7\uB248\uB249\uB24A"+
-        "\uB24B\uB24C\uB24D\uB24E\uB24F\uB250\uB251\uB252"+
-        "\uB253\uB6C3\uB254\uB255\uB256\uEEA5\uD8BA\uEEA3"+
-        "\uEEA6\uB257\uB258\uB259\uC3E9\uB3F2\uB25A\uB25B"+
-        "\uB25C\uB25D\uB25E\uB25F\uEEA7\uEEA4\uCFB9\uB260"+
-        "\uB261\uEEA8\uC2F7\uB262\uB263\uB264\uB265\uB266"+
-        "\uB267\uB268\uB269\uB26A\uB26B\uB26C\uB26D\uEEA9"+
-        "\uEEAA\uB26E\uDEAB\uB26F\uB270\uC6B3\uB271\uC7C6"+
-        "\uB272\uD6F5\uB5C9\uB273\uCBB2\uB274\uB275\uB276"+
-        "\uEEAB\uB277\uB278\uCDAB\uB279\uEEAC\uB27A\uB27B"+
-        "\uB27C\uB27D\uB27E\uD5B0\uB280\uEEAD\uB281\uF6C4"+
-        "\uB282\uB283\uB284\uB285\uB286\uB287\uB288\uB289"+
-        "\uB28A\uB28B\uB28C\uB28D\uB28E\uDBC7\uB28F\uB290"+
-        "\uB291\uB292\uB293\uB294\uB295\uB296\uB297\uB4A3"+
-        "\uB298\uB299\uB29A\uC3AC\uF1E6\uB29B\uB29C\uB29D"+
-        "\uB29E\uB29F\uCAB8\uD2D3\uB2A0\uD6AA\uB340\uEFF2"+
-        "\uB341\uBED8\uB342\uBDC3\uEFF3\uB6CC\uB0AB\uB343"+
-        "\uB344\uB345\uB346\uCAAF\uB347\uB348\uEDB6\uB349"+
-        "\uEDB7\uB34A\uB34B\uB34C\uB34D\uCEF9\uB7AF\uBFF3"+
-        "\uEDB8\uC2EB\uC9B0\uB34E\uB34F\uB350\uB351\uB352"+
-        "\uB353\uEDB9\uB354\uB355\uC6F6\uBFB3\uB356\uB357"+
-        "\uB358\uEDBC\uC5F8\uB359\uD1D0\uB35A\uD7A9\uEDBA"+
-        "\uEDBB\uB35B\uD1E2\uB35C\uEDBF\uEDC0\uB35D\uEDC4"+
-        "\uB35E\uB35F\uB360\uEDC8\uB361\uEDC6\uEDCE\uD5E8"+
-        "\uB362\uEDC9\uB363\uB364\uEDC7\uEDBE\uB365\uB366"+
-        "\uC5E9\uB367\uB368\uB369\uC6C6\uB36A\uB36B\uC9E9"+
-        "\uD4D2\uEDC1\uEDC2\uEDC3\uEDC5\uB36C\uC0F9\uB36D"+
-        "\uB4A1\uB36E\uB36F\uB370\uB371\uB9E8\uB372\uEDD0"+
-        "\uB373\uB374\uB375\uB376\uEDD1\uB377\uEDCA\uB378"+
-        "\uEDCF\uB379\uCEF8\uB37A\uB37B\uCBB6\uEDCC\uEDCD"+
-        "\uB37C\uB37D\uB37E\uB380\uB381\uCFF5\uB382\uB383"+
-        "\uB384\uB385\uB386\uB387\uB388\uB389\uB38A\uB38B"+
-        "\uB38C\uB38D\uEDD2\uC1F2\uD3B2\uEDCB\uC8B7\uB38E"+
-        "\uB38F\uB390\uB391\uB392\uB393\uB394\uB395\uBCEF"+
-        "\uB396\uB397\uB398\uB399\uC5F0\uB39A\uB39B\uB39C"+
-        "\uB39D\uB39E\uB39F\uB3A0\uB440\uB441\uB442\uEDD6"+
-        "\uB443\uB5EF\uB444\uB445\uC2B5\uB0AD\uCBE9\uB446"+
-        "\uB447\uB1AE\uB448\uEDD4\uB449\uB44A\uB44B\uCDEB"+
-        "\uB5E2\uB44C\uEDD5\uEDD3\uEDD7\uB44D\uB44E\uB5FA"+
-        "\uB44F\uEDD8\uB450\uEDD9\uB451\uEDDC\uB452\uB1CC"+
-        "\uB453\uB454\uB455\uB456\uB457\uB458\uB459\uB45A"+
-        "\uC5F6\uBCEE\uEDDA\uCCBC\uB2EA\uB45B\uB45C\uB45D"+
-        "\uB45E\uEDDB\uB45F\uB460\uB461\uB462\uC4EB\uB463"+
-        "\uB464\uB4C5\uB465\uB466\uB467\uB0F5\uB468\uB469"+
-        "\uB46A\uEDDF\uC0DA\uB4E8\uB46B\uB46C\uB46D\uB46E"+
-        "\uC5CD\uB46F\uB470\uB471\uEDDD\uBFC4\uB472\uB473"+
-        "\uB474\uEDDE\uB475\uB476\uB477\uB478\uB479\uB47A"+
-        "\uB47B\uB47C\uB47D\uB47E\uB480\uB481\uB482\uB483"+
-        "\uC4A5\uB484\uB485\uB486\uEDE0\uB487\uB488\uB489"+
-        "\uB48A\uB48B\uEDE1\uB48C\uEDE3\uB48D\uB48E\uC1D7"+
-        "\uB48F\uB490\uBBC7\uB491\uB492\uB493\uB494\uB495"+
-        "\uB496\uBDB8\uB497\uB498\uB499\uEDE2\uB49A\uB49B"+
-        "\uB49C\uB49D\uB49E\uB49F\uB4A0\uB540\uB541\uB542"+
-        "\uB543\uB544\uB545\uEDE4\uB546\uB547\uB548\uB549"+
-        "\uB54A\uB54B\uB54C\uB54D\uB54E\uB54F\uEDE6\uB550"+
-        "\uB551\uB552\uB553\uB554\uEDE5\uB555\uB556\uB557"+
-        "\uB558\uB559\uB55A\uB55B\uB55C\uB55D\uB55E\uB55F"+
-        "\uB560\uB561\uB562\uB563\uEDE7\uB564\uB565\uB566"+
-        "\uB567\uB568\uCABE\uECEA\uC0F1\uB569\uC9E7\uB56A"+
-        "\uECEB\uC6EE\uB56B\uB56C\uB56D\uB56E\uECEC\uB56F"+
-        "\uC6ED\uECED\uB570\uB571\uB572\uB573\uB574\uB575"+
-        "\uB576\uB577\uB578\uECF0\uB579\uB57A\uD7E6\uECF3"+
-        "\uB57B\uB57C\uECF1\uECEE\uECEF\uD7A3\uC9F1\uCBEE"+
-        "\uECF4\uB57D\uECF2\uB57E\uB580\uCFE9\uB581\uECF6"+
-        "\uC6B1\uB582\uB583\uB584\uB585\uBCC0\uB586\uECF5"+
-        "\uB587\uB588\uB589\uB58A\uB58B\uB58C\uB58D\uB5BB"+
-        "\uBBF6\uB58E\uECF7\uB58F\uB590\uB591\uB592\uB593"+
-        "\uD9F7\uBDFB\uB594\uB595\uC2BB\uECF8\uB596\uB597"+
-        "\uB598\uB599\uECF9\uB59A\uB59B\uB59C\uB59D\uB8A3"+
-        "\uB59E\uB59F\uB5A0\uB640\uB641\uB642\uB643\uB644"+
-        "\uB645\uB646\uECFA\uB647\uB648\uB649\uB64A\uB64B"+
-        "\uB64C\uB64D\uB64E\uB64F\uB650\uB651\uB652\uECFB"+
-        "\uB653\uB654\uB655\uB656\uB657\uB658\uB659\uB65A"+
-        "\uB65B\uB65C\uB65D\uECFC\uB65E\uB65F\uB660\uB661"+
-        "\uB662\uD3ED\uD8AE\uC0EB\uB663\uC7DD\uBACC\uB664"+
-        "\uD0E3\uCBBD\uB665\uCDBA\uB666\uB667\uB8D1\uB668"+
-        "\uB669\uB1FC\uB66A\uC7EF\uB66B\uD6D6\uB66C\uB66D"+
-        "\uB66E\uBFC6\uC3EB\uB66F\uB670\uEFF5\uB671\uB672"+
-        "\uC3D8\uB673\uB674\uB675\uB676\uB677\uB678\uD7E2"+
-        "\uB679\uB67A\uB67B\uEFF7\uB3D3\uB67C\uC7D8\uD1ED"+
-        "\uB67D\uD6C8\uB67E\uEFF8\uB680\uEFF6\uB681\uBBFD"+
-        "\uB3C6\uB682\uB683\uB684\uB685\uB686\uB687\uB688"+
-        "\uBDD5\uB689\uB68A\uD2C6\uB68B\uBBE0\uB68C\uB68D"+
-        "\uCFA1\uB68E\uEFFC\uEFFB\uB68F\uB690\uEFF9\uB691"+
-        "\uB692\uB693\uB694\uB3CC\uB695\uC9D4\uCBB0\uB696"+
-        "\uB697\uB698\uB699\uB69A\uEFFE\uB69B\uB69C\uB0DE"+
-        "\uB69D\uB69E\uD6C9\uB69F\uB6A0\uB740\uEFFD\uB741"+
-        "\uB3ED\uB742\uB743\uF6D5\uB744\uB745\uB746\uB747"+
-        "\uB748\uB749\uB74A\uB74B\uB74C\uB74D\uB74E\uB74F"+
-        "\uB750\uB751\uB752\uCEC8\uB753\uB754\uB755\uF0A2"+
-        "\uB756\uF0A1\uB757\uB5BE\uBCDA\uBBFC\uB758\uB8E5"+
-        "\uB759\uB75A\uB75B\uB75C\uB75D\uB75E\uC4C2\uB75F"+
-        "\uB760\uB761\uB762\uB763\uB764\uB765\uB766\uB767"+
-        "\uB768\uF0A3\uB769\uB76A\uB76B\uB76C\uB76D\uCBEB"+
-        "\uB76E\uB76F\uB770\uB771\uB772\uB773\uB774\uB775"+
-        "\uB776\uB777\uB778\uB779\uB77A\uB77B\uB77C\uB77D"+
-        "\uB77E\uB780\uB781\uB782\uB783\uB784\uB785\uB786"+
-        "\uF0A6\uB787\uB788\uB789\uD1A8\uB78A\uBEBF\uC7EE"+
-        "\uF1B6\uF1B7\uBFD5\uB78B\uB78C\uB78D\uB78E\uB4A9"+
-        "\uF1B8\uCDBB\uB78F\uC7D4\uD5AD\uB790\uF1B9\uB791"+
-        "\uF1BA\uB792\uB793\uB794\uB795\uC7CF\uB796\uB797"+
-        "\uB798\uD2A4\uD6CF\uB799\uB79A\uF1BB\uBDD1\uB4B0"+
-        "\uBEBD\uB79B\uB79C\uB79D\uB4DC\uCED1\uB79E\uBFDF"+
-        "\uF1BD\uB79F\uB7A0\uB840\uB841\uBFFA\uF1BC\uB842"+
-        "\uF1BF\uB843\uB844\uB845\uF1BE\uF1C0\uB846\uB847"+
-        "\uB848\uB849\uB84A\uF1C1\uB84B\uB84C\uB84D\uB84E"+
-        "\uB84F\uB850\uB851\uB852\uB853\uB854\uB855\uC1FE"+
-        "\uB856\uB857\uB858\uB859\uB85A\uB85B\uB85C\uB85D"+
-        "\uB85E\uB85F\uB860\uC1A2\uB861\uB862\uB863\uB864"+
-        "\uB865\uB866\uB867\uB868\uB869\uB86A\uCAFA\uB86B"+
-        "\uB86C\uD5BE\uB86D\uB86E\uB86F\uB870\uBEBA\uBEB9"+
-        "\uD5C2\uB871\uB872\uBFA2\uB873\uCDAF\uF1B5\uB874"+
-        "\uB875\uB876\uB877\uB878\uB879\uBDDF\uB87A\uB6CB"+
-        "\uB87B\uB87C\uB87D\uB87E\uB880\uB881\uB882\uB883"+
-        "\uB884\uD6F1\uF3C3\uB885\uB886\uF3C4\uB887\uB8CD"+
-        "\uB888\uB889\uB88A\uF3C6\uF3C7\uB88B\uB0CA\uB88C"+
-        "\uF3C5\uB88D\uF3C9\uCBF1\uB88E\uB88F\uB890\uF3CB"+
-        "\uB891\uD0A6\uB892\uB893\uB1CA\uF3C8\uB894\uB895"+
-        "\uB896\uF3CF\uB897\uB5D1\uB898\uB899\uF3D7\uB89A"+
-        "\uF3D2\uB89B\uB89C\uB89D\uF3D4\uF3D3\uB7FB\uB89E"+
-        "\uB1BF\uB89F\uF3CE\uF3CA\uB5DA\uB8A0\uF3D0\uB940"+
-        "\uB941\uF3D1\uB942\uF3D5\uB943\uB944\uB945\uB946"+
-        "\uF3CD\uB947\uBCE3\uB948\uC1FD\uB949\uF3D6\uB94A"+
-        "\uB94B\uB94C\uB94D\uB94E\uB94F\uF3DA\uB950\uF3CC"+
-        "\uB951\uB5C8\uB952\uBDEE\uF3DC\uB953\uB954\uB7A4"+
-        "\uBFF0\uD6FE\uCDB2\uB955\uB4F0\uB956\uB2DF\uB957"+
-        "\uF3D8\uB958\uF3D9\uC9B8\uB959\uF3DD\uB95A\uB95B"+
-        "\uF3DE\uB95C\uF3E1\uB95D\uB95E\uB95F\uB960\uB961"+
-        "\uB962\uB963\uB964\uB965\uB966\uB967\uF3DF\uB968"+
-        "\uB969\uF3E3\uF3E2\uB96A\uB96B\uF3DB\uB96C\uBFEA"+
-        "\uB96D\uB3EF\uB96E\uF3E0\uB96F\uB970\uC7A9\uB971"+
-        "\uBCF2\uB972\uB973\uB974\uB975\uF3EB\uB976\uB977"+
-        "\uB978\uB979\uB97A\uB97B\uB97C\uB9BF\uB97D\uB97E"+
-        "\uF3E4\uB980\uB981\uB982\uB2AD\uBBFE\uB983\uCBE3"+
-        "\uB984\uB985\uB986\uB987\uF3ED\uF3E9\uB988\uB989"+
-        "\uB98A\uB9DC\uF3EE\uB98B\uB98C\uB98D\uF3E5\uF3E6"+
-        "\uF3EA\uC2E1\uF3EC\uF3EF\uF3E8\uBCFD\uB98E\uB98F"+
-        "\uB990\uCFE4\uB991\uB992\uF3F0\uB993\uB994\uB995"+
-        "\uF3E7\uB996\uB997\uB998\uB999\uB99A\uB99B\uB99C"+
-        "\uB99D\uF3F2\uB99E\uB99F\uB9A0\uBA40\uD7AD\uC6AA"+
-        "\uBA41\uBA42\uBA43\uBA44\uF3F3\uBA45\uBA46\uBA47"+
-        "\uBA48\uF3F1\uBA49\uC2A8\uBA4A\uBA4B\uBA4C\uBA4D"+
-        "\uBA4E\uB8DD\uF3F5\uBA4F\uBA50\uF3F4\uBA51\uBA52"+
-        "\uBA53\uB4DB\uBA54\uBA55\uBA56\uF3F6\uF3F7\uBA57"+
-        "\uBA58\uBA59\uF3F8\uBA5A\uBA5B\uBA5C\uC0BA\uBA5D"+
-        "\uBA5E\uC0E9\uBA5F\uBA60\uBA61\uBA62\uBA63\uC5F1"+
-        "\uBA64\uBA65\uBA66\uBA67\uF3FB\uBA68\uF3FA\uBA69"+
-        "\uBA6A\uBA6B\uBA6C\uBA6D\uBA6E\uBA6F\uBA70\uB4D8"+
-        "\uBA71\uBA72\uBA73\uF3FE\uF3F9\uBA74\uBA75\uF3FC"+
-        "\uBA76\uBA77\uBA78\uBA79\uBA7A\uBA7B\uF3FD\uBA7C"+
-        "\uBA7D\uBA7E\uBA80\uBA81\uBA82\uBA83\uBA84\uF4A1"+
-        "\uBA85\uBA86\uBA87\uBA88\uBA89\uBA8A\uF4A3\uBBC9"+
-        "\uBA8B\uBA8C\uF4A2\uBA8D\uBA8E\uBA8F\uBA90\uBA91"+
-        "\uBA92\uBA93\uBA94\uBA95\uBA96\uBA97\uBA98\uBA99"+
-        "\uF4A4\uBA9A\uBA9B\uBA9C\uBA9D\uBA9E\uBA9F\uB2BE"+
-        "\uF4A6\uF4A5\uBAA0\uBB40\uBB41\uBB42\uBB43\uBB44"+
-        "\uBB45\uBB46\uBB47\uBB48\uBB49\uBCAE\uBB4A\uBB4B"+
-        "\uBB4C\uBB4D\uBB4E\uBB4F\uBB50\uBB51\uBB52\uBB53"+
-        "\uBB54\uBB55\uBB56\uBB57\uBB58\uBB59\uBB5A\uBB5B"+
-        "\uBB5C\uBB5D\uBB5E\uBB5F\uBB60\uBB61\uBB62\uBB63"+
-        "\uBB64\uBB65\uBB66\uBB67\uBB68\uBB69\uBB6A\uBB6B"+
-        "\uBB6C\uBB6D\uBB6E\uC3D7\uD9E1\uBB6F\uBB70\uBB71"+
-        "\uBB72\uBB73\uBB74\uC0E0\uF4CC\uD7D1\uBB75\uBB76"+
-        "\uBB77\uBB78\uBB79\uBB7A\uBB7B\uBB7C\uBB7D\uBB7E"+
-        "\uBB80\uB7DB\uBB81\uBB82\uBB83\uBB84\uBB85\uBB86"+
-        "\uBB87\uF4CE\uC1A3\uBB88\uBB89\uC6C9\uBB8A\uB4D6"+
-        "\uD5B3\uBB8B\uBB8C\uBB8D\uF4D0\uF4CF\uF4D1\uCBDA"+
-        "\uBB8E\uBB8F\uF4D2\uBB90\uD4C1\uD6E0\uBB91\uBB92"+
-        "\uBB93\uBB94\uB7E0\uBB95\uBB96\uBB97\uC1B8\uBB98"+
-        "\uBB99\uC1BB\uF4D3\uBEAC\uBB9A\uBB9B\uBB9C\uBB9D"+
-        "\uBB9E\uB4E2\uBB9F\uBBA0\uF4D4\uF4D5\uBEAB\uBC40"+
-        "\uBC41\uF4D6\uBC42\uBC43\uBC44\uF4DB\uBC45\uF4D7"+
-        "\uF4DA\uBC46\uBAFD\uBC47\uF4D8\uF4D9\uBC48\uBC49"+
-        "\uBC4A\uBC4B\uBC4C\uBC4D\uBC4E\uB8E2\uCCC7\uF4DC"+
-        "\uBC4F\uB2DA\uBC50\uBC51\uC3D3\uBC52\uBC53\uD4E3"+
-        "\uBFB7\uBC54\uBC55\uBC56\uBC57\uBC58\uBC59\uBC5A"+
-        "\uF4DD\uBC5B\uBC5C\uBC5D\uBC5E\uBC5F\uBC60\uC5B4"+
-        "\uBC61\uBC62\uBC63\uBC64\uBC65\uBC66\uBC67\uBC68"+
-        "\uF4E9\uBC69\uBC6A\uCFB5\uBC6B\uBC6C\uBC6D\uBC6E"+
-        "\uBC6F\uBC70\uBC71\uBC72\uBC73\uBC74\uBC75\uBC76"+
-        "\uBC77\uBC78\uCEC9\uBC79\uBC7A\uBC7B\uBC7C\uBC7D"+
-        "\uBC7E\uBC80\uBC81\uBC82\uBC83\uBC84\uBC85\uBC86"+
-        "\uBC87\uBC88\uBC89\uBC8A\uBC8B\uBC8C\uBC8D\uBC8E"+
-        "\uCBD8\uBC8F\uCBF7\uBC90\uBC91\uBC92\uBC93\uBDF4"+
-        "\uBC94\uBC95\uBC96\uD7CF\uBC97\uBC98\uBC99\uC0DB"+
-        "\uBC9A\uBC9B\uBC9C\uBC9D\uBC9E\uBC9F\uBCA0\uBD40"+
-        "\uBD41\uBD42\uBD43\uBD44\uBD45\uBD46\uBD47\uBD48"+
-        "\uBD49\uBD4A\uBD4B\uBD4C\uBD4D\uBD4E\uBD4F\uBD50"+
-        "\uBD51\uBD52\uBD53\uBD54\uBD55\uBD56\uBD57\uBD58"+
-        "\uBD59\uBD5A\uBD5B\uBD5C\uBD5D\uBD5E\uBD5F\uBD60"+
-        "\uBD61\uBD62\uBD63\uBD64\uBD65\uBD66\uBD67\uBD68"+
-        "\uBD69\uBD6A\uBD6B\uBD6C\uBD6D\uBD6E\uBD6F\uBD70"+
-        "\uBD71\uBD72\uBD73\uBD74\uBD75\uBD76\uD0F5\uBD77"+
-        "\uBD78\uBD79\uBD7A\uBD7B\uBD7C\uBD7D\uBD7E\uF4EA"+
-        "\uBD80\uBD81\uBD82\uBD83\uBD84\uBD85\uBD86\uBD87"+
-        "\uBD88\uBD89\uBD8A\uBD8B\uBD8C\uBD8D\uBD8E\uBD8F"+
-        "\uBD90\uBD91\uBD92\uBD93\uBD94\uBD95\uBD96\uBD97"+
-        "\uBD98\uBD99\uBD9A\uBD9B\uBD9C\uBD9D\uBD9E\uBD9F"+
-        "\uBDA0\uBE40\uBE41\uBE42\uBE43\uBE44\uBE45\uBE46"+
-        "\uBE47\uBE48\uBE49\uBE4A\uBE4B\uBE4C\uF4EB\uBE4D"+
-        "\uBE4E\uBE4F\uBE50\uBE51\uBE52\uBE53\uF4EC\uBE54"+
-        "\uBE55\uBE56\uBE57\uBE58\uBE59\uBE5A\uBE5B\uBE5C"+
-        "\uBE5D\uBE5E\uBE5F\uBE60\uBE61\uBE62\uBE63\uBE64"+
-        "\uBE65\uBE66\uBE67\uBE68\uBE69\uBE6A\uBE6B\uBE6C"+
-        "\uBE6D\uBE6E\uBE6F\uBE70\uBE71\uBE72\uBE73\uBE74"+
-        "\uBE75\uBE76\uBE77\uBE78\uBE79\uBE7A\uBE7B\uBE7C"+
-        "\uBE7D\uBE7E\uBE80\uBE81\uBE82\uBE83\uBE84\uBE85"+
-        "\uBE86\uBE87\uBE88\uBE89\uBE8A\uBE8B\uBE8C\uBE8D"+
-        "\uBE8E\uBE8F\uBE90\uBE91\uBE92\uBE93\uBE94\uBE95"+
-        "\uBE96\uBE97\uBE98\uBE99\uBE9A\uBE9B\uBE9C\uBE9D"+
-        "\uBE9E\uBE9F\uBEA0\uBF40\uBF41\uBF42\uBF43\uBF44"+
-        "\uBF45\uBF46\uBF47\uBF48\uBF49\uBF4A\uBF4B\uBF4C"+
-        "\uBF4D\uBF4E\uBF4F\uBF50\uBF51\uBF52\uBF53\uBF54"+
-        "\uBF55\uBF56\uBF57\uBF58\uBF59\uBF5A\uBF5B\uBF5C"+
-        "\uBF5D\uBF5E\uBF5F\uBF60\uBF61\uBF62\uBF63\uBF64"+
-        "\uBF65\uBF66\uBF67\uBF68\uBF69\uBF6A\uBF6B\uBF6C"+
-        "\uBF6D\uBF6E\uBF6F\uBF70\uBF71\uBF72\uBF73\uBF74"+
-        "\uBF75\uBF76\uBF77\uBF78\uBF79\uBF7A\uBF7B\uBF7C"+
-        "\uBF7D\uBF7E\uBF80\uF7E3\uBF81\uBF82\uBF83\uBF84"+
-        "\uBF85\uB7B1\uBF86\uBF87\uBF88\uBF89\uBF8A\uF4ED"+
-        "\uBF8B\uBF8C\uBF8D\uBF8E\uBF8F\uBF90\uBF91\uBF92"+
-        "\uBF93\uBF94\uBF95\uBF96\uBF97\uBF98\uBF99\uBF9A"+
-        "\uBF9B\uBF9C\uBF9D\uBF9E\uBF9F\uBFA0\uC040\uC041"+
-        "\uC042\uC043\uC044\uC045\uC046\uC047\uC048\uC049"+
-        "\uC04A\uC04B\uC04C\uC04D\uC04E\uC04F\uC050\uC051"+
-        "\uC052\uC053\uC054\uC055\uC056\uC057\uC058\uC059"+
-        "\uC05A\uC05B\uC05C\uC05D\uC05E\uC05F\uC060\uC061"+
-        "\uC062\uC063\uD7EB\uC064\uC065\uC066\uC067\uC068"+
-        "\uC069\uC06A\uC06B\uC06C\uC06D\uC06E\uC06F\uC070"+
-        "\uC071\uC072\uC073\uC074\uC075\uC076\uC077\uC078"+
-        "\uC079\uC07A\uC07B\uF4EE\uC07C\uC07D\uC07E\uE6F9"+
-        "\uBEC0\uE6FA\uBAEC\uE6FB\uCFCB\uE6FC\uD4BC\uBCB6"+
-        "\uE6FD\uE6FE\uBCCD\uC8D2\uCEB3\uE7A1\uC080\uB4BF"+
-        "\uE7A2\uC9B4\uB8D9\uC4C9\uC081\uD7DD\uC2DA\uB7D7"+
-        "\uD6BD\uCEC6\uB7C4\uC082\uC083\uC5A6\uE7A3\uCFDF"+
-        "\uE7A4\uE7A5\uE7A6\uC1B7\uD7E9\uC9F0\uCFB8\uD6AF"+
-        "\uD6D5\uE7A7\uB0ED\uE7A8\uE7A9\uC9DC\uD2EF\uBEAD"+
-        "\uE7AA\uB0F3\uC8DE\uBDE1\uE7AB\uC8C6\uC084\uE7AC"+
-        "\uBBE6\uB8F8\uD1A4\uE7AD\uC2E7\uBEF8\uBDCA\uCDB3"+
-        "\uE7AE\uE7AF\uBEEE\uD0E5\uC085\uCBE7\uCCD0\uBCCC"+
-        "\uE7B0\uBCA8\uD0F7\uE7B1\uC086\uD0F8\uE7B2\uE7B3"+
-        "\uB4C2\uE7B4\uE7B5\uC9FE\uCEAC\uC3E0\uE7B7\uB1C1"+
-        "\uB3F1\uC087\uE7B8\uE7B9\uD7DB\uD5C0\uE7BA\uC2CC"+
-        "\uD7BA\uE7BB\uE7BC\uE7BD\uBCEA\uC3E5\uC0C2\uE7BE"+
-        "\uE7BF\uBCA9\uC088\uE7C0\uE7C1\uE7B6\uB6D0\uE7C2"+
-        "\uC089\uE7C3\uE7C4\uBBBA\uB5DE\uC2C6\uB1E0\uE7C5"+
-        "\uD4B5\uE7C6\uB8BF\uE7C8\uE7C7\uB7EC\uC08A\uE7C9"+
-        "\uB2F8\uE7CA\uE7CB\uE7CC\uE7CD\uE7CE\uE7CF\uE7D0"+
-        "\uD3A7\uCBF5\uE7D1\uE7D2\uE7D3\uE7D4\uC9C9\uE7D5"+
-        "\uE7D6\uE7D7\uE7D8\uE7D9\uBDC9\uE7DA\uF3BE\uC08B"+
-        "\uB8D7\uC08C\uC8B1\uC08D\uC08E\uC08F\uC090\uC091"+
-        "\uC092\uC093\uF3BF\uC094\uF3C0\uF3C1\uC095\uC096"+
-        "\uC097\uC098\uC099\uC09A\uC09B\uC09C\uC09D\uC09E"+
-        "\uB9DE\uCDF8\uC09F\uC0A0\uD8E8\uBAB1\uC140\uC2DE"+
-        "\uEEB7\uC141\uB7A3\uC142\uC143\uC144\uC145\uEEB9"+
-        "\uC146\uEEB8\uB0D5\uC147\uC148\uC149\uC14A\uC14B"+
-        "\uEEBB\uD5D6\uD7EF\uC14C\uC14D\uC14E\uD6C3\uC14F"+
-        "\uC150\uEEBD\uCAF0\uC151\uEEBC\uC152\uC153\uC154"+
-        "\uC155\uEEBE\uC156\uC157\uC158\uC159\uEEC0\uC15A"+
-        "\uC15B\uEEBF\uC15C\uC15D\uC15E\uC15F\uC160\uC161"+
-        "\uC162\uC163\uD1F2\uC164\uC7BC\uC165\uC3C0\uC166"+
-        "\uC167\uC168\uC169\uC16A\uB8E1\uC16B\uC16C\uC16D"+
-        "\uC16E\uC16F\uC1E7\uC170\uC171\uF4C6\uD0DF\uF4C7"+
-        "\uC172\uCFDB\uC173\uC174\uC8BA\uC175\uC176\uF4C8"+
-        "\uC177\uC178\uC179\uC17A\uC17B\uC17C\uC17D\uF4C9"+
-        "\uF4CA\uC17E\uF4CB\uC180\uC181\uC182\uC183\uC184"+
-        "\uD9FA\uB8FE\uC185\uC186\uE5F1\uD3F0\uC187\uF4E0"+
-        "\uC188\uCECC\uC189\uC18A\uC18B\uB3E1\uC18C\uC18D"+
-        "\uC18E\uC18F\uF1B4\uC190\uD2EE\uC191\uF4E1\uC192"+
-        "\uC193\uC194\uC195\uC196\uCFE8\uF4E2\uC197\uC198"+
-        "\uC7CC\uC199\uC19A\uC19B\uC19C\uC19D\uC19E\uB5D4"+
-        "\uB4E4\uF4E4\uC19F\uC1A0\uC240\uF4E3\uF4E5\uC241"+
-        "\uC242\uF4E6\uC243\uC244\uC245\uC246\uF4E7\uC247"+
-        "\uBAB2\uB0BF\uC248\uF4E8\uC249\uC24A\uC24B\uC24C"+
-        "\uC24D\uC24E\uC24F\uB7AD\uD2ED\uC250\uC251\uC252";
-
-    private final static String innerEncoderIndex8=
-        "\uD2AB\uC0CF\uC253\uBFBC\uEBA3\uD5DF\uEAC8\uC254"+
-        "\uC255\uC256\uC257\uF1F3\uB6F8\uCBA3\uC258\uC259"+
-        "\uC4CD\uC25A\uF1E7\uC25B\uF1E8\uB8FB\uF1E9\uBAC4"+
-        "\uD4C5\uB0D2\uC25C\uC25D\uF1EA\uC25E\uC25F\uC260"+
-        "\uF1EB\uC261\uF1EC\uC262\uC263\uF1ED\uF1EE\uF1EF"+
-        "\uF1F1\uF1F0\uC5D5\uC264\uC265\uC266\uC267\uC268"+
-        "\uC269\uF1F2\uC26A\uB6FA\uC26B\uF1F4\uD2AE\uDEC7"+
-        "\uCBCA\uC26C\uC26D\uB3DC\uC26E\uB5A2\uC26F\uB9A2"+
-        "\uC270\uC271\uC4F4\uF1F5\uC272\uC273\uF1F6\uC274"+
-        "\uC275\uC276\uC1C4\uC1FB\uD6B0\uF1F7\uC277\uC278"+
-        "\uC279\uC27A\uF1F8\uC27B\uC1AA\uC27C\uC27D\uC27E"+
-        "\uC6B8\uC280\uBEDB\uC281\uC282\uC283\uC284\uC285"+
-        "\uC286\uC287\uC288\uC289\uC28A\uC28B\uC28C\uC28D"+
-        "\uC28E\uF1F9\uB4CF\uC28F\uC290\uC291\uC292\uC293"+
-        "\uC294\uF1FA\uC295\uC296\uC297\uC298\uC299\uC29A"+
-        "\uC29B\uC29C\uC29D\uC29E\uC29F\uC2A0\uC340\uEDB2"+
-        "\uEDB1\uC341\uC342\uCBE0\uD2DE\uC343\uCBC1\uD5D8"+
-        "\uC344\uC8E2\uC345\uC0DF\uBCA1\uC346\uC347\uC348"+
-        "\uC349\uC34A\uC34B\uEBC1\uC34C\uC34D\uD0A4\uC34E"+
-        "\uD6E2\uC34F\uB6C7\uB8D8\uEBC0\uB8CE\uC350\uEBBF"+
-        "\uB3A6\uB9C9\uD6AB\uC351\uB7F4\uB7CA\uC352\uC353"+
-        "\uC354\uBCE7\uB7BE\uEBC6\uC355\uEBC7\uB0B9\uBFCF"+
-        "\uC356\uEBC5\uD3FD\uC357\uEBC8\uC358\uC359\uEBC9"+
-        "\uC35A\uC35B\uB7CE\uC35C\uEBC2\uEBC4\uC9F6\uD6D7"+
-        "\uD5CD\uD0B2\uEBCF\uCEB8\uEBD0\uC35D\uB5A8\uC35E"+
-        "\uC35F\uC360\uC361\uC362\uB1B3\uEBD2\uCCA5\uC363"+
-        "\uC364\uC365\uC366\uC367\uC368\uC369\uC5D6\uEBD3"+
-        "\uC36A\uEBD1\uC5DF\uEBCE\uCAA4\uEBD5\uB0FB\uC36B"+
-        "\uC36C\uBAFA\uC36D\uC36E\uD8B7\uF1E3\uC36F\uEBCA"+
-        "\uEBCB\uEBCC\uEBCD\uEBD6\uE6C0\uEBD9\uC370\uBFE8"+
-        "\uD2C8\uEBD7\uEBDC\uB8EC\uEBD8\uC371\uBDBA\uC372"+
-        "\uD0D8\uC373\uB0B7\uC374\uEBDD\uC4DC\uC375\uC376"+
-        "\uC377\uC378\uD6AC\uC379\uC37A\uC37B\uB4E0\uC37C"+
-        "\uC37D\uC2F6\uBCB9\uC37E\uC380\uEBDA\uEBDB\uD4E0"+
-        "\uC6EA\uC4D4\uEBDF\uC5A7\uD9F5\uC381\uB2B1\uC382"+
-        "\uEBE4\uC383\uBDC5\uC384\uC385\uC386\uEBE2\uC387"+
-        "\uC388\uC389\uC38A\uC38B\uC38C\uC38D\uC38E\uC38F"+
-        "\uC390\uC391\uC392\uC393\uEBE3\uC394\uC395\uB8AC"+
-        "\uC396\uCDD1\uEBE5\uC397\uC398\uC399\uEBE1\uC39A"+
-        "\uC1B3\uC39B\uC39C\uC39D\uC39E\uC39F\uC6A2\uC3A0"+
-        "\uC440\uC441\uC442\uC443\uC444\uC445\uCCF3\uC446"+
-        "\uEBE6\uC447\uC0B0\uD2B8\uEBE7\uC448\uC449\uC44A"+
-        "\uB8AF\uB8AD\uC44B\uEBE8\uC7BB\uCDF3\uC44C\uC44D"+
-        "\uC44E\uEBEA\uEBEB\uC44F\uC450\uC451\uC452\uC453"+
-        "\uEBED\uC454\uC455\uC456\uC457\uD0C8\uC458\uEBF2"+
-        "\uC459\uEBEE\uC45A\uC45B\uC45C\uEBF1\uC8F9\uC45D"+
-        "\uD1FC\uEBEC\uC45E\uC45F\uEBE9\uC460\uC461\uC462"+
-        "\uC463\uB8B9\uCFD9\uC4E5\uEBEF\uEBF0\uCCDA\uCDC8"+
-        "\uB0F2\uC464\uEBF6\uC465\uC466\uC467\uC468\uC469"+
-        "\uEBF5\uC46A\uB2B2\uC46B\uC46C\uC46D\uC46E\uB8E0"+
-        "\uC46F\uEBF7\uC470\uC471\uC472\uC473\uC474\uC475"+
-        "\uB1EC\uC476\uC477\uCCC5\uC4A4\uCFA5\uC478\uC479"+
-        "\uC47A\uC47B\uC47C\uEBF9\uC47D\uC47E\uECA2\uC480"+
-        "\uC5F2\uC481\uEBFA\uC482\uC483\uC484\uC485\uC486"+
-        "\uC487\uC488\uC489\uC9C5\uC48A\uC48B\uC48C\uC48D"+
-        "\uC48E\uC48F\uE2DF\uEBFE\uC490\uC491\uC492\uC493"+
-        "\uCDCE\uECA1\uB1DB\uD3B7\uC494\uC495\uD2DC\uC496"+
-        "\uC497\uC498\uEBFD\uC499\uEBFB\uC49A\uC49B\uC49C"+
-        "\uC49D\uC49E\uC49F\uC4A0\uC540\uC541\uC542\uC543"+
-        "\uC544\uC545\uC546\uC547\uC548\uC549\uC54A\uC54B"+
-        "\uC54C\uC54D\uC54E\uB3BC\uC54F\uC550\uC551\uEAB0"+
-        "\uC552\uC553\uD7D4\uC554\uF4AB\uB3F4\uC555\uC556"+
-        "\uC557\uC558\uC559\uD6C1\uD6C2\uC55A\uC55B\uC55C"+
-        "\uC55D\uC55E\uC55F\uD5E9\uBECA\uC560\uF4A7\uC561"+
-        "\uD2A8\uF4A8\uF4A9\uC562\uF4AA\uBECB\uD3DF\uC563"+
-        "\uC564\uC565\uC566\uC567\uC9E0\uC9E1\uC568\uC569"+
-        "\uF3C2\uC56A\uCAE6\uC56B\uCCF2\uC56C\uC56D\uC56E"+
-        "\uC56F\uC570\uC571\uE2B6\uCBB4\uC572\uCEE8\uD6DB"+
-        "\uC573\uF4AD\uF4AE\uF4AF\uC574\uC575\uC576\uC577"+
-        "\uF4B2\uC578\uBABD\uF4B3\uB0E3\uF4B0\uC579\uF4B1"+
-        "\uBDA2\uB2D5\uC57A\uF4B6\uF4B7\uB6E6\uB2B0\uCFCF"+
-        "\uF4B4\uB4AC\uC57B\uF4B5\uC57C\uC57D\uF4B8\uC57E"+
-        "\uC580\uC581\uC582\uC583\uF4B9\uC584\uC585\uCDA7"+
-        "\uC586\uF4BA\uC587\uF4BB\uC588\uC589\uC58A\uF4BC"+
-        "\uC58B\uC58C\uC58D\uC58E\uC58F\uC590\uC591\uC592"+
-        "\uCBD2\uC593\uF4BD\uC594\uC595\uC596\uC597\uF4BE"+
-        "\uC598\uC599\uC59A\uC59B\uC59C\uC59D\uC59E\uC59F"+
-        "\uF4BF\uC5A0\uC640\uC641\uC642\uC643\uF4DE\uC1BC"+
-        "\uBCE8\uC644\uC9AB\uD1DE\uE5F5\uC645\uC646\uC647"+
-        "\uC648\uDCB3\uD2D5\uC649\uC64A\uDCB4\uB0AC\uDCB5"+
-        "\uC64B\uC64C\uBDDA\uC64D\uDCB9\uC64E\uC64F\uC650"+
-        "\uD8C2\uC651\uDCB7\uD3F3\uC652\uC9D6\uDCBA\uDCB6"+
-        "\uC653\uDCBB\uC3A2\uC654\uC655\uC656\uC657\uDCBC"+
-        "\uDCC5\uDCBD\uC658\uC659\uCEDF\uD6A5\uC65A\uDCCF"+
-        "\uC65B\uDCCD\uC65C\uC65D\uDCD2\uBDE6\uC2AB\uC65E"+
-        "\uDCB8\uDCCB\uDCCE\uDCBE\uB7D2\uB0C5\uDCC7\uD0BE"+
-        "\uDCC1\uBBA8\uC65F\uB7BC\uDCCC\uC660\uC661\uDCC6"+
-        "\uDCBF\uC7DB\uC662\uC663\uC664\uD1BF\uDCC0\uC665"+
-        "\uC666\uDCCA\uC667\uC668\uDCD0\uC669\uC66A\uCEAD"+
-        "\uDCC2\uC66B\uDCC3\uDCC8\uDCC9\uB2D4\uDCD1\uCBD5"+
-        "\uC66C\uD4B7\uDCDB\uDCDF\uCCA6\uDCE6\uC66D\uC3E7"+
-        "\uDCDC\uC66E\uC66F\uBFC1\uDCD9\uC670\uB0FA\uB9B6"+
-        "\uDCE5\uDCD3\uC671\uDCC4\uDCD6\uC8F4\uBFE0\uC672"+
-        "\uC673\uC674\uC675\uC9BB\uC676\uC677\uC678\uB1BD"+
-        "\uC679\uD3A2\uC67A\uC67B\uDCDA\uC67C\uC67D\uDCD5"+
-        "\uC67E\uC6BB\uC680\uDCDE\uC681\uC682\uC683\uC684"+
-        "\uC685\uD7C2\uC3AF\uB7B6\uC7D1\uC3A9\uDCE2\uDCD8"+
-        "\uDCEB\uDCD4\uC686\uC687\uDCDD\uC688\uBEA5\uDCD7"+
-        "\uC689\uDCE0\uC68A\uC68B\uDCE3\uDCE4\uC68C\uDCF8"+
-        "\uC68D\uC68E\uDCE1\uDDA2\uDCE7\uC68F\uC690\uC691"+
-        "\uC692\uC693\uC694\uC695\uC696\uC697\uC698\uBCEB"+
-        "\uB4C4\uC699\uC69A\uC3A3\uB2E7\uDCFA\uC69B\uDCF2"+
-        "\uC69C\uDCEF\uC69D\uDCFC\uDCEE\uD2F0\uB2E8\uC69E"+
-        "\uC8D7\uC8E3\uDCFB\uC69F\uDCED\uC6A0\uC740\uC741"+
-        "\uDCF7\uC742\uC743\uDCF5\uC744\uC745\uBEA3\uDCF4"+
-        "\uC746\uB2DD\uC747\uC748\uC749\uC74A\uC74B\uDCF3"+
-        "\uBCF6\uDCE8\uBBC4\uC74C\uC0F3\uC74D\uC74E\uC74F"+
-        "\uC750\uC751\uBCD4\uDCE9\uDCEA\uC752\uDCF1\uDCF6"+
-        "\uDCF9\uB5B4\uC753\uC8D9\uBBE7\uDCFE\uDCFD\uD3AB"+
-        "\uDDA1\uDDA3\uDDA5\uD2F1\uDDA4\uDDA6\uDDA7\uD2A9"+
-        "\uC754\uC755\uC756\uC757\uC758\uC759\uC75A\uBAC9"+
-        "\uDDA9\uC75B\uC75C\uDDB6\uDDB1\uDDB4\uC75D\uC75E"+
-        "\uC75F\uC760\uC761\uC762\uC763\uDDB0\uC6CE\uC764"+
-        "\uC765\uC0F2\uC766\uC767\uC768\uC769\uC9AF\uC76A"+
-        "\uC76B\uC76C\uDCEC\uDDAE\uC76D\uC76E\uC76F\uC770"+
-        "\uDDB7\uC771\uC772\uDCF0\uDDAF\uC773\uDDB8\uC774"+
-        "\uDDAC\uC775\uC776\uC777\uC778\uC779\uC77A\uC77B"+
-        "\uDDB9\uDDB3\uDDAD\uC4AA\uC77C\uC77D\uC77E\uC780"+
-        "\uDDA8\uC0B3\uC1AB\uDDAA\uDDAB\uC781\uDDB2\uBBF1"+
-        "\uDDB5\uD3A8\uDDBA\uC782\uDDBB\uC3A7\uC783\uC784"+
-        "\uDDD2\uDDBC\uC785\uC786\uC787\uDDD1\uC788\uB9BD"+
-        "\uC789\uC78A\uBED5\uC78B\uBEFA\uC78C\uC78D\uBACA"+
-        "\uC78E\uC78F\uC790\uC791\uDDCA\uC792\uDDC5\uC793"+
-        "\uDDBF\uC794\uC795\uC796\uB2CB\uDDC3\uC797\uDDCB"+
-        "\uB2A4\uDDD5\uC798\uC799\uC79A\uDDBE\uC79B\uC79C"+
-        "\uC79D\uC6D0\uDDD0\uC79E\uC79F\uC7A0\uC840\uC841"+
-        "\uDDD4\uC1E2\uB7C6\uC842\uC843\uC844\uC845\uC846"+
-        "\uDDCE\uDDCF\uC847\uC848\uC849\uDDC4\uC84A\uC84B"+
-        "\uC84C\uDDBD\uC84D\uDDCD\uCCD1\uC84E\uDDC9\uC84F"+
-        "\uC850\uC851\uC852\uDDC2\uC3C8\uC6BC\uCEAE\uDDCC"+
-        "\uC853\uDDC8\uC854\uC855\uC856\uC857\uC858\uC859"+
-        "\uDDC1\uC85A\uC85B\uC85C\uDDC6\uC2DC\uC85D\uC85E"+
-        "\uC85F\uC860\uC861\uC862\uD3A9\uD3AA\uDDD3\uCFF4"+
-        "\uC8F8\uC863\uC864\uC865\uC866\uC867\uC868\uC869"+
-        "\uC86A\uDDE6\uC86B\uC86C\uC86D\uC86E\uC86F\uC870"+
-        "\uDDC7\uC871\uC872\uC873\uDDE0\uC2E4\uC874\uC875"+
-        "\uC876\uC877\uC878\uC879\uC87A\uC87B\uDDE1\uC87C"+
-        "\uC87D\uC87E\uC880\uC881\uC882\uC883\uC884\uC885"+
-        "\uC886\uDDD7\uC887\uC888\uC889\uC88A\uC88B\uD6F8"+
-        "\uC88C\uDDD9\uDDD8\uB8F0\uDDD6\uC88D\uC88E\uC88F"+
-        "\uC890\uC6CF\uC891\uB6AD\uC892\uC893\uC894\uC895"+
-        "\uC896\uDDE2\uC897\uBAF9\uD4E1\uDDE7\uC898\uC899"+
-        "\uC89A\uB4D0\uC89B\uDDDA\uC89C\uBFFB\uDDE3\uC89D"+
-        "\uDDDF\uC89E\uDDDD\uC89F\uC8A0\uC940\uC941\uC942"+
-        "\uC943\uC944\uB5D9\uC945\uC946\uC947\uC948\uDDDB"+
-        "\uDDDC\uDDDE\uC949\uBDAF\uDDE4\uC94A\uDDE5\uC94B"+
-        "\uC94C\uC94D\uC94E\uC94F\uC950\uC951\uC952\uDDF5"+
-        "\uC953\uC3C9\uC954\uC955\uCBE2\uC956\uC957\uC958"+
-        "\uC959\uDDF2\uC95A\uC95B\uC95C\uC95D\uC95E\uC95F"+
-        "\uC960\uC961\uC962\uC963\uC964\uC965\uC966\uD8E1"+
-        "\uC967\uC968\uC6D1\uC969\uDDF4\uC96A\uC96B\uC96C"+
-        "\uD5F4\uDDF3\uDDF0\uC96D\uC96E\uDDEC\uC96F\uDDEF"+
-        "\uC970\uDDE8\uC971\uC972\uD0EE\uC973\uC974\uC975"+
-        "\uC976\uC8D8\uDDEE\uC977\uC978\uDDE9\uC979\uC97A"+
-        "\uDDEA\uCBF2\uC97B\uDDED\uC97C\uC97D\uB1CD\uC97E"+
-        "\uC980\uC981\uC982\uC983\uC984\uC0B6\uC985\uBCBB"+
-        "\uDDF1\uC986\uC987\uDDF7\uC988\uDDF6\uDDEB\uC989"+
-        "\uC98A\uC98B\uC98C\uC98D\uC5EE\uC98E\uC98F\uC990"+
-        "\uDDFB\uC991\uC992\uC993\uC994\uC995\uC996\uC997"+
-        "\uC998\uC999\uC99A\uC99B\uDEA4\uC99C\uC99D\uDEA3"+
-        "\uC99E\uC99F\uC9A0\uCA40\uCA41\uCA42\uCA43\uCA44"+
-        "\uCA45\uCA46\uCA47\uCA48\uDDF8\uCA49\uCA4A\uCA4B"+
-        "\uCA4C\uC3EF\uCA4D\uC2FB\uCA4E\uCA4F\uCA50\uD5E1"+
-        "\uCA51\uCA52\uCEB5\uCA53\uCA54\uCA55\uCA56\uDDFD"+
-        "\uCA57\uB2CC\uCA58\uCA59\uCA5A\uCA5B\uCA5C\uCA5D"+
-        "\uCA5E\uCA5F\uCA60\uC4E8\uCADF\uCA61\uCA62\uCA63"+
-        "\uCA64\uCA65\uCA66\uCA67\uCA68\uCA69\uCA6A\uC7BE"+
-        "\uDDFA\uDDFC\uDDFE\uDEA2\uB0AA\uB1CE\uCA6B\uCA6C"+
-        "\uCA6D\uCA6E\uCA6F\uDEAC\uCA70\uCA71\uCA72\uCA73"+
-        "\uDEA6\uBDB6\uC8EF\uCA74\uCA75\uCA76\uCA77\uCA78"+
-        "\uCA79\uCA7A\uCA7B\uCA7C\uCA7D\uCA7E\uDEA1\uCA80"+
-        "\uCA81\uDEA5\uCA82\uCA83\uCA84\uCA85\uDEA9\uCA86"+
-        "\uCA87\uCA88\uCA89\uCA8A\uDEA8\uCA8B\uCA8C\uCA8D"+
-        "\uDEA7\uCA8E\uCA8F\uCA90\uCA91\uCA92\uCA93\uCA94"+
-        "\uCA95\uCA96\uDEAD\uCA97\uD4CC\uCA98\uCA99\uCA9A"+
-        "\uCA9B\uDEB3\uDEAA\uDEAE\uCA9C\uCA9D\uC0D9\uCA9E"+
-        "\uCA9F\uCAA0\uCB40\uCB41\uB1A1\uDEB6\uCB42\uDEB1"+
-        "\uCB43\uCB44\uCB45\uCB46\uCB47\uCB48\uCB49\uDEB2"+
-        "\uCB4A\uCB4B\uCB4C\uCB4D\uCB4E\uCB4F\uCB50\uCB51"+
-        "\uCB52\uCB53\uCB54\uD1A6\uDEB5\uCB55\uCB56\uCB57"+
-        "\uCB58\uCB59\uCB5A\uCB5B\uDEAF\uCB5C\uCB5D\uCB5E"+
-        "\uDEB0\uCB5F\uD0BD\uCB60\uCB61\uCB62\uDEB4\uCAED"+
-        "\uDEB9\uCB63\uCB64\uCB65\uCB66\uCB67\uCB68\uDEB8"+
-        "\uCB69\uDEB7\uCB6A\uCB6B\uCB6C\uCB6D\uCB6E\uCB6F"+
-        "\uCB70\uDEBB\uCB71\uCB72\uCB73\uCB74\uCB75\uCB76"+
-        "\uCB77\uBDE5\uCB78\uCB79\uCB7A\uCB7B\uCB7C\uB2D8"+
-        "\uC3EA\uCB7D\uCB7E\uDEBA\uCB80\uC5BA\uCB81\uCB82"+
-        "\uCB83\uCB84\uCB85\uCB86\uDEBC\uCB87\uCB88\uCB89"+
-        "\uCB8A\uCB8B\uCB8C\uCB8D\uCCD9\uCB8E\uCB8F\uCB90"+
-        "\uCB91\uB7AA\uCB92\uCB93\uCB94\uCB95\uCB96\uCB97"+
-        "\uCB98\uCB99\uCB9A\uCB9B\uCB9C\uCB9D\uCB9E\uCB9F"+
-        "\uCBA0\uCC40\uCC41\uD4E5\uCC42\uCC43\uCC44\uDEBD"+
-        "\uCC45\uCC46\uCC47\uCC48\uCC49\uDEBF\uCC4A\uCC4B"+
-        "\uCC4C\uCC4D\uCC4E\uCC4F\uCC50\uCC51\uCC52\uCC53"+
-        "\uCC54\uC4A2\uCC55\uCC56\uCC57\uCC58\uDEC1\uCC59"+
-        "\uCC5A\uCC5B\uCC5C\uCC5D\uCC5E\uCC5F\uCC60\uCC61"+
-        "\uCC62\uCC63\uCC64\uCC65\uCC66\uCC67\uCC68\uDEBE"+
-        "\uCC69\uDEC0\uCC6A\uCC6B\uCC6C\uCC6D\uCC6E\uCC6F"+
-        "\uCC70\uCC71\uCC72\uCC73\uCC74\uCC75\uCC76\uCC77"+
-        "\uD5BA\uCC78\uCC79\uCC7A\uDEC2\uCC7B\uCC7C\uCC7D"+
-        "\uCC7E\uCC80\uCC81\uCC82\uCC83\uCC84\uCC85\uCC86"+
-        "\uCC87\uCC88\uCC89\uCC8A\uCC8B\uF2AE\uBBA2\uC2B2"+
-        "\uC5B0\uC2C7\uCC8C\uCC8D\uF2AF\uCC8E\uCC8F\uCC90"+
-        "\uCC91\uCC92\uD0E9\uCC93\uCC94\uCC95\uD3DD\uCC96"+
-        "\uCC97\uCC98\uEBBD\uCC99\uCC9A\uCC9B\uCC9C\uCC9D"+
-        "\uCC9E\uCC9F\uCCA0\uB3E6\uF2B0\uCD40\uF2B1\uCD41"+
-        "\uCD42\uCAAD\uCD43\uCD44\uCD45\uCD46\uCD47\uCD48"+
-        "\uCD49\uBAE7\uF2B3\uF2B5\uF2B4\uCBE4\uCFBA\uF2B2"+
-        "\uCAB4\uD2CF\uC2EC\uCD4A\uCD4B\uCD4C\uCD4D\uCD4E"+
-        "\uCD4F\uCD50\uCEC3\uF2B8\uB0F6\uF2B7\uCD51\uCD52"+
-        "\uCD53\uCD54\uCD55\uF2BE\uCD56\uB2CF\uCD57\uCD58"+
-        "\uCD59\uCD5A\uCD5B\uCD5C\uD1C1\uF2BA\uCD5D\uCD5E"+
-        "\uCD5F\uCD60\uCD61\uF2BC\uD4E9\uCD62\uCD63\uF2BB"+
-        "\uF2B6\uF2BF\uF2BD\uCD64\uF2B9\uCD65\uCD66\uF2C7"+
-        "\uF2C4\uF2C6\uCD67\uCD68\uF2CA\uF2C2\uF2C0\uCD69"+
-        "\uCD6A\uCD6B\uF2C5\uCD6C\uCD6D\uCD6E\uCD6F\uCD70"+
-        "\uD6FB\uCD71\uCD72\uCD73\uF2C1\uCD74\uC7F9\uC9DF"+
-        "\uCD75\uF2C8\uB9C6\uB5B0\uCD76\uCD77\uF2C3\uF2C9"+
-        "\uF2D0\uF2D6\uCD78\uCD79\uBBD7\uCD7A\uCD7B\uCD7C"+
-        "\uF2D5\uCDDC\uCD7D\uD6EB\uCD7E\uCD80\uF2D2\uF2D4"+
-        "\uCD81\uCD82\uCD83\uCD84\uB8F2\uCD85\uCD86\uCD87"+
-        "\uCD88\uF2CB\uCD89\uCD8A\uCD8B\uF2CE\uC2F9\uCD8C"+
-        "\uD5DD\uF2CC\uF2CD\uF2CF\uF2D3\uCD8D\uCD8E\uCD8F"+
-        "\uF2D9\uD3BC\uCD90\uCD91\uCD92\uCD93\uB6EA\uCD94"+
-        "\uCAF1\uCD95\uB7E4\uF2D7\uCD96\uCD97\uCD98\uF2D8"+
-        "\uF2DA\uF2DD\uF2DB\uCD99\uCD9A\uF2DC\uCD9B\uCD9C"+
-        "\uCD9D\uCD9E\uD1D1\uF2D1\uCD9F\uCDC9\uCDA0\uCECF"+
-        "\uD6A9\uCE40\uF2E3\uCE41\uC3DB\uCE42\uF2E0\uCE43"+
-        "\uCE44\uC0AF\uF2EC\uF2DE\uCE45\uF2E1\uCE46\uCE47"+
-        "\uCE48\uF2E8\uCE49\uCE4A\uCE4B\uCE4C\uF2E2\uCE4D"+
-        "\uCE4E\uF2E7\uCE4F\uCE50\uF2E6\uCE51\uCE52\uF2E9"+
-        "\uCE53\uCE54\uCE55\uF2DF\uCE56\uCE57\uF2E4\uF2EA"+
-        "\uCE58\uCE59\uCE5A\uCE5B\uCE5C\uCE5D\uCE5E\uD3AC"+
-        "\uF2E5\uB2F5\uCE5F\uCE60\uF2F2\uCE61\uD0AB\uCE62"+
-        "\uCE63\uCE64\uCE65\uF2F5\uCE66\uCE67\uCE68\uBBC8"+
-        "\uCE69\uF2F9\uCE6A\uCE6B\uCE6C\uCE6D\uCE6E\uCE6F"+
-        "\uF2F0\uCE70\uCE71\uF2F6\uF2F8\uF2FA\uCE72\uCE73"+
-        "\uCE74\uCE75\uCE76\uCE77\uCE78\uCE79\uF2F3\uCE7A"+
-        "\uF2F1\uCE7B\uCE7C\uCE7D\uBAFB\uCE7E\uB5FB\uCE80"+
-        "\uCE81\uCE82\uCE83\uF2EF\uF2F7\uF2ED\uF2EE\uCE84"+
-        "\uCE85\uCE86\uF2EB\uF3A6\uCE87\uF3A3\uCE88\uCE89"+
-        "\uF3A2\uCE8A\uCE8B\uF2F4\uCE8C\uC8DA\uCE8D\uCE8E"+
-        "\uCE8F\uCE90\uCE91\uF2FB\uCE92\uCE93\uCE94\uF3A5"+
-        "\uCE95\uCE96\uCE97\uCE98\uCE99\uCE9A\uCE9B\uC3F8"+
-        "\uCE9C\uCE9D\uCE9E\uCE9F\uCEA0\uCF40\uCF41\uCF42"+
-        "\uF2FD\uCF43\uCF44\uF3A7\uF3A9\uF3A4\uCF45\uF2FC"+
-        "\uCF46\uCF47\uCF48\uF3AB\uCF49\uF3AA\uCF4A\uCF4B"+
-        "\uCF4C\uCF4D\uC2DD\uCF4E\uCF4F\uF3AE\uCF50\uCF51"+
-        "\uF3B0\uCF52\uCF53\uCF54\uCF55\uCF56\uF3A1\uCF57"+
-        "\uCF58\uCF59\uF3B1\uF3AC\uCF5A\uCF5B\uCF5C\uCF5D"+
-        "\uCF5E\uF3AF\uF2FE\uF3AD\uCF5F\uCF60\uCF61\uCF62"+
-        "\uCF63\uCF64\uCF65\uF3B2\uCF66\uCF67\uCF68\uCF69"+
-        "\uF3B4\uCF6A\uCF6B\uCF6C\uCF6D\uF3A8\uCF6E\uCF6F"+
-        "\uCF70\uCF71\uF3B3\uCF72\uCF73\uCF74\uF3B5\uCF75"+
-        "\uCF76\uCF77\uCF78\uCF79\uCF7A\uCF7B\uCF7C\uCF7D"+
-        "\uCF7E\uD0B7\uCF80\uCF81\uCF82\uCF83\uF3B8\uCF84"+
-        "\uCF85\uCF86\uCF87\uD9F9\uCF88\uCF89\uCF8A\uCF8B"+
-        "\uCF8C\uCF8D\uF3B9\uCF8E\uCF8F\uCF90\uCF91\uCF92"+
-        "\uCF93\uCF94\uCF95\uF3B7\uCF96\uC8E4\uF3B6\uCF97"+
-        "\uCF98\uCF99\uCF9A\uF3BA\uCF9B\uCF9C\uCF9D\uCF9E"+
-        "\uCF9F\uF3BB\uB4C0\uCFA0\uD040\uD041\uD042\uD043"+
-        "\uD044\uD045\uD046\uD047\uD048\uD049\uD04A\uD04B"+
-        "\uD04C\uD04D\uEEC3\uD04E\uD04F\uD050\uD051\uD052"+
-        "\uD053\uF3BC\uD054\uD055\uF3BD\uD056\uD057\uD058"+
-        "\uD1AA\uD059\uD05A\uD05B\uF4AC\uD0C6\uD05C\uD05D"+
-        "\uD05E\uD05F\uD060\uD061\uD0D0\uD1DC\uD062\uD063"+
-        "\uD064\uD065\uD066\uD067\uCFCE\uD068\uD069\uBDD6"+
-        "\uD06A\uD1C3\uD06B\uD06C\uD06D\uD06E\uD06F\uD070"+
-        "\uD071\uBAE2\uE1E9\uD2C2\uF1C2\uB2B9\uD072\uD073"+
-        "\uB1ED\uF1C3\uD074\uC9C0\uB3C4\uD075\uD9F2\uD076"+
-        "\uCBA5\uD077\uF1C4\uD078\uD079\uD07A\uD07B\uD6D4"+
-        "\uD07C\uD07D\uD07E\uD080\uD081\uF1C5\uF4C0\uF1C6"+
-        "\uD082\uD4AC\uF1C7\uD083\uB0C0\uF4C1\uD084\uD085"+
-        "\uF4C2\uD086\uD087\uB4FC\uD088\uC5DB\uD089\uD08A"+
-        "\uD08B\uD08C\uCCBB\uD08D\uD08E\uD08F\uD0E4\uD090"+
-        "\uD091\uD092\uD093\uD094\uCDE0\uD095\uD096\uD097"+
-        "\uD098\uD099\uF1C8\uD09A\uD9F3\uD09B\uD09C\uD09D"+
-        "\uD09E\uD09F\uD0A0\uB1BB\uD140\uCFAE\uD141\uD142"+
-        "\uD143\uB8A4\uD144\uD145\uD146\uD147\uD148\uF1CA"+
-        "\uD149\uD14A\uD14B\uD14C\uF1CB\uD14D\uD14E\uD14F"+
-        "\uD150\uB2C3\uC1D1\uD151\uD152\uD7B0\uF1C9\uD153"+
-        "\uD154\uF1CC\uD155\uD156\uD157\uD158\uF1CE\uD159"+
-        "\uD15A\uD15B\uD9F6\uD15C\uD2E1\uD4A3\uD15D\uD15E"+
-        "\uF4C3\uC8B9\uD15F\uD160\uD161\uD162\uD163\uF4C4"+
-        "\uD164\uD165\uF1CD\uF1CF\uBFE3\uF1D0\uD166\uD167"+
-        "\uF1D4\uD168\uD169\uD16A\uD16B\uD16C\uD16D\uD16E"+
-        "\uF1D6\uF1D1\uD16F\uC9D1\uC5E1\uD170\uD171\uD172"+
-        "\uC2E3\uB9FC\uD173\uD174\uF1D3\uD175\uF1D5\uD176"+
-        "\uD177\uD178\uB9D3\uD179\uD17A\uD17B\uD17C\uD17D"+
-        "\uD17E\uD180\uF1DB\uD181\uD182\uD183\uD184\uD185"+
-        "\uBAD6\uD186\uB0FD\uF1D9\uD187\uD188\uD189\uD18A"+
-        "\uD18B\uF1D8\uF1D2\uF1DA\uD18C\uD18D\uD18E\uD18F"+
-        "\uD190\uF1D7\uD191\uD192\uD193\uC8EC\uD194\uD195"+
-        "\uD196\uD197\uCDCA\uF1DD\uD198\uD199\uD19A\uD19B"+
-        "\uE5BD\uD19C\uD19D\uD19E\uF1DC\uD19F\uF1DE\uD1A0"+
-        "\uD240\uD241\uD242\uD243\uD244\uD245\uD246\uD247"+
-        "\uD248\uF1DF\uD249\uD24A\uCFE5\uD24B\uD24C\uD24D"+
-        "\uD24E\uD24F\uD250\uD251\uD252\uD253\uD254\uD255"+
-        "\uD256\uD257\uD258\uD259\uD25A\uD25B\uD25C\uD25D"+
-        "\uD25E\uD25F\uD260\uD261\uD262\uD263\uF4C5\uBDF3"+
-        "\uD264\uD265\uD266\uD267\uD268\uD269\uF1E0\uD26A"+
-        "\uD26B\uD26C\uD26D\uD26E\uD26F\uD270\uD271\uD272"+
-        "\uD273\uD274\uD275\uD276\uD277\uD278\uD279\uD27A"+
-        "\uD27B\uD27C\uD27D\uF1E1\uD27E\uD280\uD281\uCEF7"+
-        "\uD282\uD2AA\uD283\uF1FB\uD284\uD285\uB8B2\uD286"+
-        "\uD287\uD288\uD289\uD28A\uD28B\uD28C\uD28D\uD28E"+
-        "\uD28F\uD290\uD291\uD292\uD293\uD294\uD295\uD296"+
-        "\uD297\uD298\uD299\uD29A\uD29B\uD29C\uD29D\uD29E"+
-        "\uD29F\uD2A0\uD340\uD341\uD342\uD343\uD344\uD345"+
-        "\uD346\uD347\uD348\uD349\uD34A\uD34B\uD34C\uD34D"+
-        "\uD34E\uD34F\uD350\uD351\uD352\uD353\uD354\uD355"+
-        "\uD356\uD357\uD358\uD359\uD35A\uD35B\uD35C\uD35D"+
-        "\uD35E\uBCFB\uB9DB\uD35F\uB9E6\uC3D9\uCAD3\uEAE8"+
-        "\uC0C0\uBEF5\uEAE9\uEAEA\uEAEB\uD360\uEAEC\uEAED"+
-        "\uEAEE\uEAEF\uBDC7\uD361\uD362\uD363\uF5FB\uD364"+
-        "\uD365\uD366\uF5FD\uD367\uF5FE\uD368\uF5FC\uD369"+
-        "\uD36A\uD36B\uD36C\uBDE2\uD36D\uF6A1\uB4A5\uD36E"+
-        "\uD36F\uD370\uD371\uF6A2\uD372\uD373\uD374\uF6A3"+
-        "\uD375\uD376\uD377\uECB2\uD378\uD379\uD37A\uD37B"+
-        "\uD37C\uD37D\uD37E\uD380\uD381\uD382\uD383\uD384"+
-        "\uD1D4\uD385\uD386\uD387\uD388\uD389\uD38A\uD9EA"+
-        "\uD38B\uD38C\uD38D\uD38E\uD38F\uD390\uD391\uD392"+
-        "\uD393\uD394\uD395\uD396\uD397\uD398\uD399\uD39A"+
-        "\uD39B\uD39C\uD39D\uD39E\uD39F\uD3A0\uD440\uD441"+
-        "\uD442\uD443\uD444\uD445\uD446\uD447\uD448\uD449"+
-        "\uD44A\uD44B\uD44C\uD44D\uD44E\uD44F\uD450\uD451"+
-        "\uD452\uD453\uD454\uD455\uD456\uD457\uD458\uD459"+
-        "\uD45A\uD45B\uD45C\uD45D\uD45E\uD45F\uF6A4\uD460"+
-        "\uD461\uD462\uD463\uD464\uD465\uD466\uD467\uD468"+
-        "\uEEBA\uD469\uD46A\uD46B\uD46C\uD46D\uD46E\uD46F"+
-        "\uD470\uD471\uD472\uD473\uD474\uD475\uD476\uD477"+
-        "\uD478\uD479\uD47A\uD47B\uD47C\uD47D\uD47E\uD480"+
-        "\uD481\uD482\uD483\uD484\uD485\uD486\uD487\uD488"+
-        "\uD489\uD48A\uD48B\uD48C\uD48D\uD48E\uD48F\uD490"+
-        "\uD491\uD492\uD493\uD494\uD495\uD496\uD497\uD498"+
-        "\uD499\uD5B2\uD49A\uD49B\uD49C\uD49D\uD49E\uD49F"+
-        "\uD4A0\uD540\uD541\uD542\uD543\uD544\uD545\uD546"+
-        "\uD547\uD3FE\uCCDC\uD548\uD549\uD54A\uD54B\uD54C"+
-        "\uD54D\uD54E\uD54F\uCAC4\uD550\uD551\uD552\uD553"+
-        "\uD554\uD555\uD556\uD557\uD558\uD559\uD55A\uD55B"+
-        "\uD55C\uD55D\uD55E\uD55F\uD560\uD561\uD562\uD563"+
-        "\uD564\uD565\uD566\uD567\uD568\uD569\uD56A\uD56B"+
-        "\uD56C\uD56D\uD56E\uD56F\uD570\uD571\uD572\uD573"+
-        "\uD574\uD575\uD576\uD577\uD578\uD579\uD57A\uD57B"+
-        "\uD57C\uD57D\uD57E\uD580\uD581\uD582\uD583\uD584"+
-        "\uD585\uD586\uD587\uD588\uD589\uD58A\uD58B\uD58C"+
-        "\uD58D\uD58E\uD58F\uD590\uD591\uD592\uD593\uD594"+
-        "\uD595\uD596\uD597\uD598\uD599\uD59A\uD59B\uD59C"+
-        "\uD59D\uD59E\uD59F\uD5A0\uD640\uD641\uD642\uD643"+
-        "\uD644\uD645\uD646\uD647\uD648\uD649\uD64A\uD64B"+
-        "\uD64C\uD64D\uD64E\uD64F\uD650\uD651\uD652\uD653"+
-        "\uD654\uD655\uD656\uD657\uD658\uD659\uD65A\uD65B"+
-        "\uD65C\uD65D\uD65E\uD65F\uD660\uD661\uD662\uE5C0"+
-        "\uD663\uD664\uD665\uD666\uD667\uD668\uD669\uD66A"+
-        "\uD66B\uD66C\uD66D\uD66E\uD66F\uD670\uD671\uD672"+
-        "\uD673\uD674\uD675\uD676\uD677\uD678\uD679\uD67A"+
-        "\uD67B\uD67C\uD67D\uD67E\uD680\uD681\uF6A5\uD682"+
-        "\uD683\uD684\uD685\uD686\uD687\uD688\uD689\uD68A"+
-        "\uD68B\uD68C\uD68D\uD68E\uD68F\uD690\uD691\uD692"+
-        "\uD693\uD694\uD695\uD696\uD697\uD698\uD699\uD69A"+
-        "\uD69B\uD69C\uD69D\uD69E\uD69F\uD6A0\uD740\uD741"+
-        "\uD742\uD743\uD744\uD745\uD746\uD747\uD748\uD749"+
-        "\uD74A\uD74B\uD74C\uD74D\uD74E\uD74F\uD750\uD751"+
-        "\uD752\uD753\uD754\uD755\uD756\uD757\uD758\uD759"+
-        "\uD75A\uD75B\uD75C\uD75D\uD75E\uD75F\uBEAF\uD760"+
-        "\uD761\uD762\uD763\uD764\uC6A9\uD765\uD766\uD767"+
-        "\uD768\uD769\uD76A\uD76B\uD76C\uD76D\uD76E\uD76F"+
-        "\uD770\uD771\uD772\uD773\uD774\uD775\uD776\uD777"+
-        "\uD778\uD779\uD77A\uD77B\uD77C\uD77D\uD77E\uD780"+
-        "\uD781\uD782\uD783\uD784\uD785\uD786\uD787\uD788"+
-        "\uD789\uD78A\uD78B\uD78C\uD78D\uD78E\uD78F\uD790"+
-        "\uD791\uD792\uD793\uD794\uD795\uD796\uD797\uD798"+
-        "\uDAA5\uBCC6\uB6A9\uB8BC\uC8CF\uBCA5\uDAA6\uDAA7"+
-        "\uCCD6\uC8C3\uDAA8\uC6FD\uD799\uD1B5\uD2E9\uD1B6"+
-        "\uBCC7\uD79A\uBDB2\uBBE4\uDAA9\uDAAA\uD1C8\uDAAB"+
-        "\uD0ED\uB6EF\uC2DB\uD79B\uCBCF\uB7ED\uC9E8\uB7C3"+
-        "\uBEF7\uD6A4\uDAAC\uDAAD\uC6C0\uD7E7\uCAB6\uD79C"+
-        "\uD5A9\uCBDF\uD5EF\uDAAE\uD6DF\uB4CA\uDAB0\uDAAF"+
-        "\uD79D\uD2EB\uDAB1\uDAB2\uDAB3\uCAD4\uDAB4\uCAAB"+
-        "\uDAB5\uDAB6\uB3CF\uD6EF\uDAB7\uBBB0\uB5AE\uDAB8"+
-        "\uDAB9\uB9EE\uD1AF\uD2E8\uDABA\uB8C3\uCFEA\uB2EF"+
-        "\uDABB\uDABC\uD79E\uBDEB\uCEDC\uD3EF\uDABD\uCEF3"+
-        "\uDABE\uD3D5\uBBE5\uDABF\uCBB5\uCBD0\uDAC0\uC7EB"+
-        "\uD6EE\uDAC1\uC5B5\uB6C1\uDAC2\uB7CC\uBFCE\uDAC3"+
-        "\uDAC4\uCBAD\uDAC5\uB5F7\uDAC6\uC1C2\uD7BB\uDAC7"+
-        "\uCCB8\uD79F\uD2EA\uC4B1\uDAC8\uB5FD\uBBD1\uDAC9"+
-        "\uD0B3\uDACA\uDACB\uCEBD\uDACC\uDACD\uDACE\uB2F7"+
-        "\uDAD1\uDACF\uD1E8\uDAD0\uC3D5\uDAD2\uD7A0\uDAD3"+
-        "\uDAD4\uDAD5\uD0BB\uD2A5\uB0F9\uDAD6\uC7AB\uDAD7"+
-        "\uBDF7\uC3A1\uDAD8\uDAD9\uC3FD\uCCB7\uDADA\uDADB"+
-        "\uC0BE\uC6D7\uDADC\uDADD\uC7B4\uDADE\uDADF\uB9C8"+
-        "\uD840\uD841\uD842\uD843\uD844\uD845\uD846\uD847"+
-        "\uD848\uBBED\uD849\uD84A\uD84B\uD84C\uB6B9\uF4F8"+
-        "\uD84D\uF4F9\uD84E\uD84F\uCDE3\uD850\uD851\uD852"+
-        "\uD853\uD854\uD855\uD856\uD857\uF5B9\uD858\uD859"+
-        "\uD85A\uD85B\uEBE0\uD85C\uD85D\uD85E\uD85F\uD860"+
-        "\uD861\uCFF3\uBBBF\uD862\uD863\uD864\uD865\uD866"+
-        "\uD867\uD868\uBAC0\uD4A5\uD869\uD86A\uD86B\uD86C"+
-        "\uD86D\uD86E\uD86F\uE1D9\uD870\uD871\uD872\uD873"+
-        "\uF5F4\uB1AA\uB2F2\uD874\uD875\uD876\uD877\uD878"+
-        "\uD879\uD87A\uF5F5\uD87B\uD87C\uF5F7\uD87D\uD87E"+
-        "\uD880\uBAD1\uF5F6\uD881\uC3B2\uD882\uD883\uD884"+
-        "\uD885\uD886\uD887\uD888\uF5F9\uD889\uD88A\uD88B"+
-        "\uF5F8\uD88C\uD88D\uD88E\uD88F\uD890\uD891\uD892"+
-        "\uD893\uD894\uD895\uD896\uD897\uD898\uD899\uD89A"+
-        "\uD89B\uD89C\uD89D\uD89E\uD89F\uD8A0\uD940\uD941"+
-        "\uD942\uD943\uD944\uD945\uD946\uD947\uD948\uD949"+
-        "\uD94A\uD94B\uD94C\uD94D\uD94E\uD94F\uD950\uD951"+
-        "\uD952\uD953\uD954\uD955\uD956\uD957\uD958\uD959"+
-        "\uD95A\uD95B\uD95C\uD95D\uD95E\uD95F\uD960\uD961"+
-        "\uD962\uD963\uD964\uD965\uD966\uD967\uD968\uD969"+
-        "\uD96A\uD96B\uD96C\uD96D\uD96E\uD96F\uD970\uD971"+
-        "\uD972\uD973\uD974\uD975\uD976\uD977\uD978\uD979"+
-        "\uD97A\uD97B\uD97C\uD97D\uD97E\uD980\uD981\uD982"+
-        "\uD983\uD984\uD985\uD986\uD987\uD988\uD989\uD98A"+
-        "\uD98B\uD98C\uD98D\uD98E\uD98F\uD990\uD991\uD992"+
-        "\uD993\uD994\uD995\uD996\uD997\uD998\uD999\uD99A"+
-        "\uD99B\uD99C\uD99D\uD99E\uD99F\uD9A0\uDA40\uDA41"+
-        "\uDA42\uDA43\uDA44\uDA45\uDA46\uDA47\uDA48\uDA49"+
-        "\uDA4A\uDA4B\uDA4C\uDA4D\uDA4E\uB1B4\uD5EA\uB8BA"+
-        "\uDA4F\uB9B1\uB2C6\uD4F0\uCFCD\uB0DC\uD5CB\uBBF5"+
-        "\uD6CA\uB7B7\uCCB0\uC6B6\uB1E1\uB9BA\uD6FC\uB9E1"+
-        "\uB7A1\uBCFA\uEADA\uEADB\uCCF9\uB9F3\uEADC\uB4FB"+
-        "\uC3B3\uB7D1\uBAD8\uEADD\uD4F4\uEADE\uBCD6\uBBDF"+
-        "\uEADF\uC1DE\uC2B8\uD4DF\uD7CA\uEAE0\uEAE1\uEAE4"+
-        "\uEAE2\uEAE3\uC9DE\uB8B3\uB6C4\uEAE5\uCAEA\uC9CD"+
-        "\uB4CD\uDA50\uDA51\uE2D9\uC5E2\uEAE6\uC0B5\uDA52"+
-        "\uD7B8\uEAE7\uD7AC\uC8FC\uD8D3\uD8CD\uD4DE\uDA53"+
-        "\uD4F9\uC9C4\uD3AE\uB8D3\uB3E0\uDA54\uC9E2\uF4F6"+
-        "\uDA55\uDA56\uDA57\uBAD5\uDA58\uF4F7\uDA59\uDA5A"+
-        "\uD7DF\uDA5B\uDA5C\uF4F1\uB8B0\uD5D4\uB8CF\uC6F0"+
-        "\uDA5D\uDA5E\uDA5F\uDA60\uDA61\uDA62\uDA63\uDA64"+
-        "\uDA65\uB3C3\uDA66\uDA67\uF4F2\uB3AC\uDA68\uDA69"+
-        "\uDA6A\uDA6B\uD4BD\uC7F7\uDA6C\uDA6D\uDA6E\uDA6F"+
-        "\uDA70\uF4F4\uDA71\uDA72\uF4F3\uDA73\uDA74\uDA75"+
-        "\uDA76\uDA77\uDA78\uDA79\uDA7A\uDA7B\uDA7C\uCCCB"+
-        "\uDA7D\uDA7E\uDA80\uC8A4\uDA81\uDA82\uDA83\uDA84"+
-        "\uDA85\uDA86\uDA87\uDA88\uDA89\uDA8A\uDA8B\uDA8C"+
-        "\uDA8D\uF4F5\uDA8E\uD7E3\uC5BF\uF5C0\uDA8F\uDA90"+
-        "\uF5BB\uDA91\uF5C3\uDA92\uF5C2\uDA93\uD6BA\uF5C1"+
-        "\uDA94\uDA95\uDA96\uD4BE\uF5C4\uDA97\uF5CC\uDA98"+
-        "\uDA99\uDA9A\uDA9B\uB0CF\uB5F8\uDA9C\uF5C9\uF5CA"+
-        "\uDA9D\uC5DC\uDA9E\uDA9F\uDAA0\uDB40\uF5C5\uF5C6"+
-        "\uDB41\uDB42\uF5C7\uF5CB\uDB43\uBEE0\uF5C8\uB8FA"+
-        "\uDB44\uDB45\uDB46\uF5D0\uF5D3\uDB47\uDB48\uDB49"+
-        "\uBFE7\uDB4A\uB9F2\uF5BC\uF5CD\uDB4B\uDB4C\uC2B7"+
-        "\uDB4D\uDB4E\uDB4F\uCCF8\uDB50\uBCF9\uDB51\uF5CE"+
-        "\uF5CF\uF5D1\uB6E5\uF5D2\uDB52\uF5D5\uDB53\uDB54"+
-        "\uDB55\uDB56\uDB57\uDB58\uDB59\uF5BD\uDB5A\uDB5B"+
-        "\uDB5C\uF5D4\uD3BB\uDB5D\uB3EC\uDB5E\uDB5F\uCCA4"+
-        "\uDB60\uDB61\uDB62\uDB63\uF5D6\uDB64\uDB65\uDB66"+
-        "\uDB67\uDB68\uDB69\uDB6A\uDB6B\uF5D7\uBEE1\uF5D8"+
-        "\uDB6C\uDB6D\uCCDF\uF5DB\uDB6E\uDB6F\uDB70\uDB71"+
-        "\uDB72\uB2C8\uD7D9\uDB73\uF5D9\uDB74\uF5DA\uF5DC"+
-        "\uDB75\uF5E2\uDB76\uDB77\uDB78\uF5E0\uDB79\uDB7A"+
-        "\uDB7B\uF5DF\uF5DD\uDB7C\uDB7D\uF5E1\uDB7E\uDB80"+
-        "\uF5DE\uF5E4\uF5E5\uDB81\uCCE3\uDB82\uDB83\uE5BF"+
-        "\uB5B8\uF5E3\uF5E8\uCCA3\uDB84\uDB85\uDB86\uDB87"+
-        "\uDB88\uF5E6\uF5E7\uDB89\uDB8A\uDB8B\uDB8C\uDB8D"+
-        "\uDB8E\uF5BE\uDB8F\uDB90\uDB91\uDB92\uDB93\uDB94"+
-        "\uDB95\uDB96\uDB97\uDB98\uDB99\uDB9A\uB1C4\uDB9B"+
-        "\uDB9C\uF5BF\uDB9D\uDB9E\uB5C5\uB2E4\uDB9F\uF5EC"+
-        "\uF5E9\uDBA0\uB6D7\uDC40\uF5ED\uDC41\uF5EA\uDC42"+
-        "\uDC43\uDC44\uDC45\uDC46\uF5EB\uDC47\uDC48\uB4DA"+
-        "\uDC49\uD4EA\uDC4A\uDC4B\uDC4C\uF5EE\uDC4D\uB3F9"+
-        "\uDC4E\uDC4F\uDC50\uDC51\uDC52\uDC53\uDC54\uF5EF"+
-        "\uF5F1\uDC55\uDC56\uDC57\uF5F0\uDC58\uDC59\uDC5A"+
-        "\uDC5B\uDC5C\uDC5D\uDC5E\uF5F2\uDC5F\uF5F3\uDC60"+
-        "\uDC61\uDC62\uDC63\uDC64\uDC65\uDC66\uDC67\uDC68"+
-        "\uDC69\uDC6A\uDC6B\uC9ED\uB9AA\uDC6C\uDC6D\uC7FB"+
-        "\uDC6E\uDC6F\uB6E3\uDC70\uDC71\uDC72\uDC73\uDC74"+
-        "\uDC75\uDC76\uCCC9\uDC77\uDC78\uDC79\uDC7A\uDC7B"+
-        "\uDC7C\uDC7D\uDC7E\uDC80\uDC81\uDC82\uDC83\uDC84"+
-        "\uDC85\uDC86\uDC87\uDC88\uDC89\uDC8A\uEAA6\uDC8B"+
-        "\uDC8C\uDC8D\uDC8E\uDC8F\uDC90\uDC91\uDC92\uDC93"+
-        "\uDC94\uDC95\uDC96\uDC97\uDC98\uDC99\uDC9A\uDC9B"+
-        "\uDC9C\uDC9D\uDC9E\uDC9F\uDCA0\uDD40\uDD41\uDD42"+
-        "\uDD43\uDD44\uDD45\uDD46\uDD47\uDD48\uDD49\uDD4A"+
-        "\uDD4B\uDD4C\uDD4D\uDD4E\uDD4F\uDD50\uDD51\uDD52"+
-        "\uDD53\uDD54\uDD55\uDD56\uDD57\uDD58\uDD59\uDD5A"+
-        "\uDD5B\uDD5C\uDD5D\uDD5E\uDD5F\uDD60\uDD61\uDD62"+
-        "\uDD63\uDD64\uDD65\uDD66\uDD67\uDD68\uDD69\uDD6A"+
-        "\uDD6B\uDD6C\uDD6D\uDD6E\uDD6F\uDD70\uDD71\uDD72"+
-        "\uDD73\uDD74\uDD75\uDD76\uDD77\uDD78\uDD79\uDD7A"+
-        "\uDD7B\uDD7C\uDD7D\uDD7E\uDD80\uDD81\uDD82\uDD83"+
-        "\uDD84\uDD85\uDD86\uDD87\uDD88\uDD89\uDD8A\uDD8B"+
-        "\uDD8C\uDD8D\uDD8E\uDD8F\uDD90\uDD91\uDD92\uDD93"+
-        "\uDD94\uDD95\uDD96\uDD97\uDD98\uDD99\uDD9A\uDD9B"+
-        "\uDD9C\uDD9D\uDD9E\uDD9F\uDDA0\uDE40\uDE41\uDE42"+
-        "\uDE43\uDE44\uDE45\uDE46\uDE47\uDE48\uDE49\uDE4A"+
-        "\uDE4B\uDE4C\uDE4D\uDE4E\uDE4F\uDE50\uDE51\uDE52"+
-        "\uDE53\uDE54\uDE55\uDE56\uDE57\uDE58\uDE59\uDE5A"+
-        "\uDE5B\uDE5C\uDE5D\uDE5E\uDE5F\uDE60\uB3B5\uD4FE"+
-        "\uB9EC\uD0F9\uDE61\uE9ED\uD7AA\uE9EE\uC2D6\uC8ED"+
-        "\uBAE4\uE9EF\uE9F0\uE9F1\uD6E1\uE9F2\uE9F3\uE9F5"+
-        "\uE9F4\uE9F6\uE9F7\uC7E1\uE9F8\uD4D8\uE9F9\uBDCE"+
-        "\uDE62\uE9FA\uE9FB\uBDCF\uE9FC\uB8A8\uC1BE\uE9FD"+
-        "\uB1B2\uBBD4\uB9F5\uE9FE\uDE63\uEAA1\uEAA2\uEAA3"+
-        "\uB7F8\uBCAD\uDE64\uCAE4\uE0CE\uD4AF\uCFBD\uD5B7"+
-        "\uEAA4\uD5DE\uEAA5\uD0C1\uB9BC\uDE65\uB4C7\uB1D9"+
-        "\uDE66\uDE67\uDE68\uC0B1\uDE69\uDE6A\uDE6B\uDE6C"+
-        "\uB1E6\uB1E7\uDE6D\uB1E8\uDE6E\uDE6F\uDE70\uDE71"+
-        "\uB3BD\uC8E8\uDE72\uDE73\uDE74\uDE75\uE5C1\uDE76"+
-        "\uDE77\uB1DF\uDE78\uDE79\uDE7A\uC1C9\uB4EF\uDE7B"+
-        "\uDE7C\uC7A8\uD3D8\uDE7D\uC6F9\uD1B8\uDE7E\uB9FD"+
-        "\uC2F5\uDE80\uDE81\uDE82\uDE83\uDE84\uD3AD\uDE85"+
-        "\uD4CB\uBDFC\uDE86\uE5C2\uB7B5\uE5C3\uDE87\uDE88"+
-        "\uBBB9\uD5E2\uDE89\uBDF8\uD4B6\uCEA5\uC1AC\uB3D9"+
-        "\uDE8A\uDE8B\uCCF6\uDE8C\uE5C6\uE5C4\uE5C8\uDE8D"+
-        "\uE5CA\uE5C7\uB5CF\uC6C8\uDE8E\uB5FC\uE5C5\uDE8F"+
-        "\uCAF6\uDE90\uDE91\uE5C9\uDE92\uDE93\uDE94\uC3D4"+
-        "\uB1C5\uBCA3\uDE95\uDE96\uDE97\uD7B7\uDE98\uDE99";
-
-    private final static String innerEncoderIndex9=
-        "\uCDCB\uCBCD\uCACA\uCCD3\uE5CC\uE5CB\uC4E6\uDE9A"+
-        "\uDE9B\uD1A1\uD1B7\uE5CD\uDE9C\uE5D0\uDE9D\uCDB8"+
-        "\uD6F0\uE5CF\uB5DD\uDE9E\uCDBE\uDE9F\uE5D1\uB6BA"+
-        "\uDEA0\uDF40\uCDA8\uB9E4\uDF41\uCAC5\uB3D1\uCBD9"+
-        "\uD4EC\uE5D2\uB7EA\uDF42\uDF43\uDF44\uE5CE\uDF45"+
-        "\uDF46\uDF47\uDF48\uDF49\uDF4A\uE5D5\uB4FE\uE5D6"+
-        "\uDF4B\uDF4C\uDF4D\uDF4E\uDF4F\uE5D3\uE5D4\uDF50"+
-        "\uD2DD\uDF51\uDF52\uC2DF\uB1C6\uDF53\uD3E2\uDF54"+
-        "\uDF55\uB6DD\uCBEC\uDF56\uE5D7\uDF57\uDF58\uD3F6"+
-        "\uDF59\uDF5A\uDF5B\uDF5C\uDF5D\uB1E9\uDF5E\uB6F4"+
-        "\uE5DA\uE5D8\uE5D9\uB5C0\uDF5F\uDF60\uDF61\uD2C5"+
-        "\uE5DC\uDF62\uDF63\uE5DE\uDF64\uDF65\uDF66\uDF67"+
-        "\uDF68\uDF69\uE5DD\uC7B2\uDF6A\uD2A3\uDF6B\uDF6C"+
-        "\uE5DB\uDF6D\uDF6E\uDF6F\uDF70\uD4E2\uD5DA\uDF71"+
-        "\uDF72\uDF73\uDF74\uDF75\uE5E0\uD7F1\uDF76\uDF77"+
-        "\uDF78\uDF79\uDF7A\uDF7B\uDF7C\uE5E1\uDF7D\uB1DC"+
-        "\uD1FB\uDF7E\uE5E2\uE5E4\uDF80\uDF81\uDF82\uDF83"+
-        "\uE5E3\uDF84\uDF85\uE5E5\uDF86\uDF87\uDF88\uDF89"+
-        "\uDF8A\uD2D8\uDF8B\uB5CB\uDF8C\uE7DF\uDF8D\uDAF5"+
-        "\uDF8E\uDAF8\uDF8F\uDAF6\uDF90\uDAF7\uDF91\uDF92"+
-        "\uDF93\uDAFA\uD0CF\uC4C7\uDF94\uDF95\uB0EE\uDF96"+
-        "\uDF97\uDF98\uD0B0\uDF99\uDAF9\uDF9A\uD3CA\uBAAA"+
-        "\uDBA2\uC7F1\uDF9B\uDAFC\uDAFB\uC9DB\uDAFD\uDF9C"+
-        "\uDBA1\uD7DE\uDAFE\uC1DA\uDF9D\uDF9E\uDBA5\uDF9F"+
-        "\uDFA0\uD3F4\uE040\uE041\uDBA7\uDBA4\uE042\uDBA8"+
-        "\uE043\uE044\uBDBC\uE045\uE046\uE047\uC0C9\uDBA3"+
-        "\uDBA6\uD6A3\uE048\uDBA9\uE049\uE04A\uE04B\uDBAD"+
-        "\uE04C\uE04D\uE04E\uDBAE\uDBAC\uBAC2\uE04F\uE050"+
-        "\uE051\uBFA4\uDBAB\uE052\uE053\uE054\uDBAA\uD4C7"+
-        "\uB2BF\uE055\uE056\uDBAF\uE057\uB9F9\uE058\uDBB0"+
-        "\uE059\uE05A\uE05B\uE05C\uB3BB\uE05D\uE05E\uE05F"+
-        "\uB5A6\uE060\uE061\uE062\uE063\uB6BC\uDBB1\uE064"+
-        "\uE065\uE066\uB6F5\uE067\uDBB2\uE068\uE069\uE06A"+
-        "\uE06B\uE06C\uE06D\uE06E\uE06F\uE070\uE071\uE072"+
-        "\uE073\uE074\uE075\uE076\uE077\uE078\uE079\uE07A"+
-        "\uE07B\uB1C9\uE07C\uE07D\uE07E\uE080\uDBB4\uE081"+
-        "\uE082\uE083\uDBB3\uDBB5\uE084\uE085\uE086\uE087"+
-        "\uE088\uE089\uE08A\uE08B\uE08C\uE08D\uE08E\uDBB7"+
-        "\uE08F\uDBB6\uE090\uE091\uE092\uE093\uE094\uE095"+
-        "\uE096\uDBB8\uE097\uE098\uE099\uE09A\uE09B\uE09C"+
-        "\uE09D\uE09E\uE09F\uDBB9\uE0A0\uE140\uDBBA\uE141"+
-        "\uE142\uD3CF\uF4FA\uC7F5\uD7C3\uC5E4\uF4FC\uF4FD"+
-        "\uF4FB\uE143\uBEC6\uE144\uE145\uE146\uE147\uD0EF"+
-        "\uE148\uE149\uB7D3\uE14A\uE14B\uD4CD\uCCAA\uE14C"+
-        "\uE14D\uF5A2\uF5A1\uBAA8\uF4FE\uCBD6\uE14E\uE14F"+
-        "\uE150\uF5A4\uC0D2\uE151\uB3EA\uE152\uCDAA\uF5A5"+
-        "\uF5A3\uBDB4\uF5A8\uE153\uF5A9\uBDCD\uC3B8\uBFE1"+
-        "\uCBE1\uF5AA\uE154\uE155\uE156\uF5A6\uF5A7\uC4F0"+
-        "\uE157\uE158\uE159\uE15A\uE15B\uF5AC\uE15C\uB4BC"+
-        "\uE15D\uD7ED\uE15E\uB4D7\uF5AB\uF5AE\uE15F\uE160"+
-        "\uF5AD\uF5AF\uD0D1\uE161\uE162\uE163\uE164\uE165"+
-        "\uE166\uE167\uC3D1\uC8A9\uE168\uE169\uE16A\uE16B"+
-        "\uE16C\uE16D\uF5B0\uF5B1\uE16E\uE16F\uE170\uE171"+
-        "\uE172\uE173\uF5B2\uE174\uE175\uF5B3\uF5B4\uF5B5"+
-        "\uE176\uE177\uE178\uE179\uF5B7\uF5B6\uE17A\uE17B"+
-        "\uE17C\uE17D\uF5B8\uE17E\uE180\uE181\uE182\uE183"+
-        "\uE184\uE185\uE186\uE187\uE188\uE189\uE18A\uB2C9"+
-        "\uE18B\uD3D4\uCACD\uE18C\uC0EF\uD6D8\uD2B0\uC1BF"+
-        "\uE18D\uBDF0\uE18E\uE18F\uE190\uE191\uE192\uE193"+
-        "\uE194\uE195\uE196\uE197\uB8AA\uE198\uE199\uE19A"+
-        "\uE19B\uE19C\uE19D\uE19E\uE19F\uE1A0\uE240\uE241"+
-        "\uE242\uE243\uE244\uE245\uE246\uE247\uE248\uE249"+
-        "\uE24A\uE24B\uE24C\uE24D\uE24E\uE24F\uE250\uE251"+
-        "\uE252\uE253\uE254\uE255\uE256\uE257\uE258\uE259"+
-        "\uE25A\uE25B\uE25C\uE25D\uE25E\uE25F\uE260\uE261"+
-        "\uE262\uE263\uE264\uE265\uE266\uE267\uE268\uE269"+
-        "\uE26A\uE26B\uE26C\uE26D\uE26E\uE26F\uE270\uE271"+
-        "\uE272\uE273\uE274\uE275\uE276\uE277\uE278\uE279"+
-        "\uE27A\uE27B\uE27C\uE27D\uE27E\uE280\uE281\uE282"+
-        "\uE283\uE284\uE285\uE286\uE287\uE288\uE289\uE28A"+
-        "\uE28B\uE28C\uE28D\uE28E\uE28F\uE290\uE291\uE292"+
-        "\uE293\uE294\uE295\uE296\uE297\uE298\uE299\uE29A"+
-        "\uE29B\uE29C\uE29D\uE29E\uE29F\uE2A0\uE340\uE341"+
-        "\uE342\uE343\uE344\uE345\uE346\uE347\uE348\uE349"+
-        "\uE34A\uE34B\uE34C\uE34D\uE34E\uE34F\uE350\uE351"+
-        "\uE352\uE353\uE354\uE355\uE356\uE357\uE358\uE359"+
-        "\uE35A\uE35B\uE35C\uE35D\uE35E\uE35F\uE360\uE361"+
-        "\uE362\uE363\uE364\uE365\uE366\uE367\uE368\uE369"+
-        "\uE36A\uE36B\uE36C\uE36D\uBCF8\uE36E\uE36F\uE370"+
-        "\uE371\uE372\uE373\uE374\uE375\uE376\uE377\uE378"+
-        "\uE379\uE37A\uE37B\uE37C\uE37D\uE37E\uE380\uE381"+
-        "\uE382\uE383\uE384\uE385\uE386\uE387\uF6C6\uE388"+
-        "\uE389\uE38A\uE38B\uE38C\uE38D\uE38E\uE38F\uE390"+
-        "\uE391\uE392\uE393\uE394\uE395\uE396\uE397\uE398"+
-        "\uE399\uE39A\uE39B\uE39C\uE39D\uE39E\uE39F\uE3A0"+
-        "\uE440\uE441\uE442\uE443\uE444\uE445\uF6C7\uE446"+
-        "\uE447\uE448\uE449\uE44A\uE44B\uE44C\uE44D\uE44E"+
-        "\uE44F\uE450\uE451\uE452\uE453\uE454\uE455\uE456"+
-        "\uE457\uE458\uE459\uE45A\uE45B\uE45C\uE45D\uE45E"+
-        "\uF6C8\uE45F\uE460\uE461\uE462\uE463\uE464\uE465"+
-        "\uE466\uE467\uE468\uE469\uE46A\uE46B\uE46C\uE46D"+
-        "\uE46E\uE46F\uE470\uE471\uE472\uE473\uE474\uE475"+
-        "\uE476\uE477\uE478\uE479\uE47A\uE47B\uE47C\uE47D"+
-        "\uE47E\uE480\uE481\uE482\uE483\uE484\uE485\uE486"+
-        "\uE487\uE488\uE489\uE48A\uE48B\uE48C\uE48D\uE48E"+
-        "\uE48F\uE490\uE491\uE492\uE493\uE494\uE495\uE496"+
-        "\uE497\uE498\uE499\uE49A\uE49B\uE49C\uE49D\uE49E"+
-        "\uE49F\uE4A0\uE540\uE541\uE542\uE543\uE544\uE545"+
-        "\uE546\uE547\uE548\uE549\uE54A\uE54B\uE54C\uE54D"+
-        "\uE54E\uE54F\uE550\uE551\uE552\uE553\uE554\uE555"+
-        "\uE556\uE557\uE558\uE559\uE55A\uE55B\uE55C\uE55D"+
-        "\uE55E\uE55F\uE560\uE561\uE562\uE563\uE564\uE565"+
-        "\uE566\uE567\uE568\uE569\uE56A\uE56B\uE56C\uE56D"+
-        "\uE56E\uE56F\uE570\uE571\uE572\uE573\uF6C9\uE574"+
-        "\uE575\uE576\uE577\uE578\uE579\uE57A\uE57B\uE57C"+
-        "\uE57D\uE57E\uE580\uE581\uE582\uE583\uE584\uE585"+
-        "\uE586\uE587\uE588\uE589\uE58A\uE58B\uE58C\uE58D"+
-        "\uE58E\uE58F\uE590\uE591\uE592\uE593\uE594\uE595"+
-        "\uE596\uE597\uE598\uE599\uE59A\uE59B\uE59C\uE59D"+
-        "\uE59E\uE59F\uF6CA\uE5A0\uE640\uE641\uE642\uE643"+
-        "\uE644\uE645\uE646\uE647\uE648\uE649\uE64A\uE64B"+
-        "\uE64C\uE64D\uE64E\uE64F\uE650\uE651\uE652\uE653"+
-        "\uE654\uE655\uE656\uE657\uE658\uE659\uE65A\uE65B"+
-        "\uE65C\uE65D\uE65E\uE65F\uE660\uE661\uE662\uF6CC"+
-        "\uE663\uE664\uE665\uE666\uE667\uE668\uE669\uE66A"+
-        "\uE66B\uE66C\uE66D\uE66E\uE66F\uE670\uE671\uE672"+
-        "\uE673\uE674\uE675\uE676\uE677\uE678\uE679\uE67A"+
-        "\uE67B\uE67C\uE67D\uE67E\uE680\uE681\uE682\uE683"+
-        "\uE684\uE685\uE686\uE687\uE688\uE689\uE68A\uE68B"+
-        "\uE68C\uE68D\uE68E\uE68F\uE690\uE691\uE692\uE693"+
-        "\uE694\uE695\uE696\uE697\uE698\uE699\uE69A\uE69B"+
-        "\uE69C\uE69D\uF6CB\uE69E\uE69F\uE6A0\uE740\uE741"+
-        "\uE742\uE743\uE744\uE745\uE746\uE747\uF7E9\uE748"+
-        "\uE749\uE74A\uE74B\uE74C\uE74D\uE74E\uE74F\uE750"+
-        "\uE751\uE752\uE753\uE754\uE755\uE756\uE757\uE758"+
-        "\uE759\uE75A\uE75B\uE75C\uE75D\uE75E\uE75F\uE760"+
-        "\uE761\uE762\uE763\uE764\uE765\uE766\uE767\uE768"+
-        "\uE769\uE76A\uE76B\uE76C\uE76D\uE76E\uE76F\uE770"+
-        "\uE771\uE772\uE773\uE774\uE775\uE776\uE777\uE778"+
-        "\uE779\uE77A\uE77B\uE77C\uE77D\uE77E\uE780\uE781"+
-        "\uE782\uE783\uE784\uE785\uE786\uE787\uE788\uE789"+
-        "\uE78A\uE78B\uE78C\uE78D\uE78E\uE78F\uE790\uE791"+
-        "\uE792\uE793\uE794\uE795\uE796\uE797\uE798\uE799"+
-        "\uE79A\uE79B\uE79C\uE79D\uE79E\uE79F\uE7A0\uE840"+
-        "\uE841\uE842\uE843\uE844\uE845\uE846\uE847\uE848"+
-        "\uE849\uE84A\uE84B\uE84C\uE84D\uE84E\uF6CD\uE84F"+
-        "\uE850\uE851\uE852\uE853\uE854\uE855\uE856\uE857"+
-        "\uE858\uE859\uE85A\uE85B\uE85C\uE85D\uE85E\uE85F"+
-        "\uE860\uE861\uE862\uE863\uE864\uE865\uE866\uE867"+
-        "\uE868\uE869\uE86A\uE86B\uE86C\uE86D\uE86E\uE86F"+
-        "\uE870\uE871\uE872\uE873\uE874\uE875\uE876\uE877"+
-        "\uE878\uE879\uE87A\uF6CE\uE87B\uE87C\uE87D\uE87E"+
-        "\uE880\uE881\uE882\uE883\uE884\uE885\uE886\uE887"+
-        "\uE888\uE889\uE88A\uE88B\uE88C\uE88D\uE88E\uE88F"+
-        "\uE890\uE891\uE892\uE893\uE894\uEEC4\uEEC5\uEEC6"+
-        "\uD5EB\uB6A4\uEEC8\uEEC7\uEEC9\uEECA\uC7A5\uEECB"+
-        "\uEECC\uE895\uB7B0\uB5F6\uEECD\uEECF\uE896\uEECE"+
-        "\uE897\uB8C6\uEED0\uEED1\uEED2\uB6DB\uB3AE\uD6D3"+
-        "\uC4C6\uB1B5\uB8D6\uEED3\uEED4\uD4BF\uC7D5\uBEFB"+
-        "\uCED9\uB9B3\uEED6\uEED5\uEED8\uEED7\uC5A5\uEED9"+
-        "\uEEDA\uC7AE\uEEDB\uC7AF\uEEDC\uB2A7\uEEDD\uEEDE"+
-        "\uEEDF\uEEE0\uEEE1\uD7EA\uEEE2\uEEE3\uBCD8\uEEE4"+
-        "\uD3CB\uCCFA\uB2AC\uC1E5\uEEE5\uC7A6\uC3AD\uE898"+
-        "\uEEE6\uEEE7\uEEE8\uEEE9\uEEEA\uEEEB\uEEEC\uE899"+
-        "\uEEED\uEEEE\uEEEF\uE89A\uE89B\uEEF0\uEEF1\uEEF2"+
-        "\uEEF4\uEEF3\uE89C\uEEF5\uCDAD\uC2C1\uEEF6\uEEF7"+
-        "\uEEF8\uD5A1\uEEF9\uCFB3\uEEFA\uEEFB\uE89D\uEEFC"+
-        "\uEEFD\uEFA1\uEEFE\uEFA2\uB8F5\uC3FA\uEFA3\uEFA4"+
-        "\uBDC2\uD2BF\uB2F9\uEFA5\uEFA6\uEFA7\uD2F8\uEFA8"+
-        "\uD6FD\uEFA9\uC6CC\uE89E\uEFAA\uEFAB\uC1B4\uEFAC"+
-        "\uCFFA\uCBF8\uEFAE\uEFAD\uB3FA\uB9F8\uEFAF\uEFB0"+
-        "\uD0E2\uEFB1\uEFB2\uB7E6\uD0BF\uEFB3\uEFB4\uEFB5"+
-        "\uC8F1\uCCE0\uEFB6\uEFB7\uEFB8\uEFB9\uEFBA\uD5E0"+
-        "\uEFBB\uB4ED\uC3AA\uEFBC\uE89F\uEFBD\uEFBE\uEFBF"+
-        "\uE8A0\uCEFD\uEFC0\uC2E0\uB4B8\uD7B6\uBDF5\uE940"+
-        "\uCFC7\uEFC3\uEFC1\uEFC2\uEFC4\uB6A7\uBCFC\uBEE2"+
-        "\uC3CC\uEFC5\uEFC6\uE941\uEFC7\uEFCF\uEFC8\uEFC9"+
-        "\uEFCA\uC7C2\uEFF1\uB6CD\uEFCB\uE942\uEFCC\uEFCD"+
-        "\uB6C6\uC3BE\uEFCE\uE943\uEFD0\uEFD1\uEFD2\uD5F2"+
-        "\uE944\uEFD3\uC4F7\uE945\uEFD4\uC4F8\uEFD5\uEFD6"+
-        "\uB8E4\uB0F7\uEFD7\uEFD8\uEFD9\uE946\uEFDA\uEFDB"+
-        "\uEFDC\uEFDD\uE947\uEFDE\uBEB5\uEFE1\uEFDF\uEFE0"+
-        "\uE948\uEFE2\uEFE3\uC1CD\uEFE4\uEFE5\uEFE6\uEFE7"+
-        "\uEFE8\uEFE9\uEFEA\uEFEB\uEFEC\uC0D8\uE949\uEFED"+
-        "\uC1AD\uEFEE\uEFEF\uEFF0\uE94A\uE94B\uCFE2\uE94C"+
-        "\uE94D\uE94E\uE94F\uE950\uE951\uE952\uE953\uB3A4"+
-        "\uE954\uE955\uE956\uE957\uE958\uE959\uE95A\uE95B"+
-        "\uE95C\uE95D\uE95E\uE95F\uE960\uE961\uE962\uE963"+
-        "\uE964\uE965\uE966\uE967\uE968\uE969\uE96A\uE96B"+
-        "\uE96C\uE96D\uE96E\uE96F\uE970\uE971\uE972\uE973"+
-        "\uE974\uE975\uE976\uE977\uE978\uE979\uE97A\uE97B"+
-        "\uE97C\uE97D\uE97E\uE980\uE981\uE982\uE983\uE984"+
-        "\uE985\uE986\uE987\uE988\uE989\uE98A\uE98B\uE98C"+
-        "\uE98D\uE98E\uE98F\uE990\uE991\uE992\uE993\uE994"+
-        "\uE995\uE996\uE997\uE998\uE999\uE99A\uE99B\uE99C"+
-        "\uE99D\uE99E\uE99F\uE9A0\uEA40\uEA41\uEA42\uEA43"+
-        "\uEA44\uEA45\uEA46\uEA47\uEA48\uEA49\uEA4A\uEA4B"+
-        "\uEA4C\uEA4D\uEA4E\uEA4F\uEA50\uEA51\uEA52\uEA53"+
-        "\uEA54\uEA55\uEA56\uEA57\uEA58\uEA59\uEA5A\uEA5B"+
-        "\uC3C5\uE3C5\uC9C1\uE3C6\uEA5C\uB1D5\uCECA\uB4B3"+
-        "\uC8F2\uE3C7\uCFD0\uE3C8\uBCE4\uE3C9\uE3CA\uC3C6"+
-        "\uD5A2\uC4D6\uB9EB\uCEC5\uE3CB\uC3F6\uE3CC\uEA5D"+
-        "\uB7A7\uB8F3\uBAD2\uE3CD\uE3CE\uD4C4\uE3CF\uEA5E"+
-        "\uE3D0\uD1CB\uE3D1\uE3D2\uE3D3\uE3D4\uD1D6\uE3D5"+
-        "\uB2FB\uC0BB\uE3D6\uEA5F\uC0AB\uE3D7\uE3D8\uE3D9"+
-        "\uEA60\uE3DA\uE3DB\uEA61\uB8B7\uDAE2\uEA62\uB6D3"+
-        "\uEA63\uDAE4\uDAE3\uEA64\uEA65\uEA66\uEA67\uEA68"+
-        "\uEA69\uEA6A\uDAE6\uEA6B\uEA6C\uEA6D\uC8EE\uEA6E"+
-        "\uEA6F\uDAE5\uB7C0\uD1F4\uD2F5\uD5F3\uBDD7\uEA70"+
-        "\uEA71\uEA72\uEA73\uD7E8\uDAE8\uDAE7\uEA74\uB0A2"+
-        "\uCDD3\uEA75\uDAE9\uEA76\uB8BD\uBCCA\uC2BD\uC2A4"+
-        "\uB3C2\uDAEA\uEA77\uC2AA\uC4B0\uBDB5\uEA78\uEA79"+
-        "\uCFDE\uEA7A\uEA7B\uEA7C\uDAEB\uC9C2\uEA7D\uEA7E"+
-        "\uEA80\uEA81\uEA82\uB1DD\uEA83\uEA84\uEA85\uDAEC"+
-        "\uEA86\uB6B8\uD4BA\uEA87\uB3FD\uEA88\uEA89\uDAED"+
-        "\uD4C9\uCFD5\uC5E3\uEA8A\uDAEE\uEA8B\uEA8C\uEA8D"+
-        "\uEA8E\uEA8F\uDAEF\uEA90\uDAF0\uC1EA\uCCD5\uCFDD"+
-        "\uEA91\uEA92\uEA93\uEA94\uEA95\uEA96\uEA97\uEA98"+
-        "\uEA99\uEA9A\uEA9B\uEA9C\uEA9D\uD3E7\uC2A1\uEA9E"+
-        "\uDAF1\uEA9F\uEAA0\uCBE5\uEB40\uDAF2\uEB41\uCBE6"+
-        "\uD2FE\uEB42\uEB43\uEB44\uB8F4\uEB45\uEB46\uDAF3"+
-        "\uB0AF\uCFB6\uEB47\uEB48\uD5CF\uEB49\uEB4A\uEB4B"+
-        "\uEB4C\uEB4D\uEB4E\uEB4F\uEB50\uEB51\uEB52\uCBED"+
-        "\uEB53\uEB54\uEB55\uEB56\uEB57\uEB58\uEB59\uEB5A"+
-        "\uDAF4\uEB5B\uEB5C\uE3C4\uEB5D\uEB5E\uC1A5\uEB5F"+
-        "\uEB60\uF6BF\uEB61\uEB62\uF6C0\uF6C1\uC4D1\uEB63"+
-        "\uC8B8\uD1E3\uEB64\uEB65\uD0DB\uD1C5\uBCAF\uB9CD"+
-        "\uEB66\uEFF4\uEB67\uEB68\uB4C6\uD3BA\uF6C2\uB3FB"+
-        "\uEB69\uEB6A\uF6C3\uEB6B\uEB6C\uB5F1\uEB6D\uEB6E"+
-        "\uEB6F\uEB70\uEB71\uEB72\uEB73\uEB74\uEB75\uEB76"+
-        "\uF6C5\uEB77\uEB78\uEB79\uEB7A\uEB7B\uEB7C\uEB7D"+
-        "\uD3EA\uF6A7\uD1A9\uEB7E\uEB80\uEB81\uEB82\uF6A9"+
-        "\uEB83\uEB84\uEB85\uF6A8\uEB86\uEB87\uC1E3\uC0D7"+
-        "\uEB88\uB1A2\uEB89\uEB8A\uEB8B\uEB8C\uCEED\uEB8D"+
-        "\uD0E8\uF6AB\uEB8E\uEB8F\uCFF6\uEB90\uF6AA\uD5F0"+
-        "\uF6AC\uC3B9\uEB91\uEB92\uEB93\uBBF4\uF6AE\uF6AD"+
-        "\uEB94\uEB95\uEB96\uC4DE\uEB97\uEB98\uC1D8\uEB99"+
-        "\uEB9A\uEB9B\uEB9C\uEB9D\uCBAA\uEB9E\uCFBC\uEB9F"+
-        "\uEBA0\uEC40\uEC41\uEC42\uEC43\uEC44\uEC45\uEC46"+
-        "\uEC47\uEC48\uF6AF\uEC49\uEC4A\uF6B0\uEC4B\uEC4C"+
-        "\uF6B1\uEC4D\uC2B6\uEC4E\uEC4F\uEC50\uEC51\uEC52"+
-        "\uB0D4\uC5F9\uEC53\uEC54\uEC55\uEC56\uF6B2\uEC57"+
-        "\uEC58\uEC59\uEC5A\uEC5B\uEC5C\uEC5D\uEC5E\uEC5F"+
-        "\uEC60\uEC61\uEC62\uEC63\uEC64\uEC65\uEC66\uEC67"+
-        "\uEC68\uEC69\uC7E0\uF6A6\uEC6A\uEC6B\uBEB8\uEC6C"+
-        "\uEC6D\uBEB2\uEC6E\uB5E5\uEC6F\uEC70\uB7C7\uEC71"+
-        "\uBFBF\uC3D2\uC3E6\uEC72\uEC73\uD8CC\uEC74\uEC75"+
-        "\uEC76\uB8EF\uEC77\uEC78\uEC79\uEC7A\uEC7B\uEC7C"+
-        "\uEC7D\uEC7E\uEC80\uBDF9\uD1A5\uEC81\uB0D0\uEC82"+
-        "\uEC83\uEC84\uEC85\uEC86\uF7B0\uEC87\uEC88\uEC89"+
-        "\uEC8A\uEC8B\uEC8C\uEC8D\uEC8E\uF7B1\uEC8F\uEC90"+
-        "\uEC91\uEC92\uEC93\uD0AC\uEC94\uB0B0\uEC95\uEC96"+
-        "\uEC97\uF7B2\uF7B3\uEC98\uF7B4\uEC99\uEC9A\uEC9B"+
-        "\uC7CA\uEC9C\uEC9D\uEC9E\uEC9F\uECA0\uED40\uED41"+
-        "\uBECF\uED42\uED43\uF7B7\uED44\uED45\uED46\uED47"+
-        "\uED48\uED49\uED4A\uF7B6\uED4B\uB1DE\uED4C\uF7B5"+
-        "\uED4D\uED4E\uF7B8\uED4F\uF7B9\uED50\uED51\uED52"+
-        "\uED53\uED54\uED55\uED56\uED57\uED58\uED59\uED5A"+
-        "\uED5B\uED5C\uED5D\uED5E\uED5F\uED60\uED61\uED62"+
-        "\uED63\uED64\uED65\uED66\uED67\uED68\uED69\uED6A"+
-        "\uED6B\uED6C\uED6D\uED6E\uED6F\uED70\uED71\uED72"+
-        "\uED73\uED74\uED75\uED76\uED77\uED78\uED79\uED7A"+
-        "\uED7B\uED7C\uED7D\uED7E\uED80\uED81\uCEA4\uC8CD"+
-        "\uED82\uBAAB\uE8B8\uE8B9\uE8BA\uBEC2\uED83\uED84"+
-        "\uED85\uED86\uED87\uD2F4\uED88\uD4CF\uC9D8\uED89"+
-        "\uED8A\uED8B\uED8C\uED8D\uED8E\uED8F\uED90\uED91"+
-        "\uED92\uED93\uED94\uED95\uED96\uED97\uED98\uED99"+
-        "\uED9A\uED9B\uED9C\uED9D\uED9E\uED9F\uEDA0\uEE40"+
-        "\uEE41\uEE42\uEE43\uEE44\uEE45\uEE46\uEE47\uEE48"+
-        "\uEE49\uEE4A\uEE4B\uEE4C\uEE4D\uEE4E\uEE4F\uEE50"+
-        "\uEE51\uEE52\uEE53\uEE54\uEE55\uEE56\uEE57\uEE58"+
-        "\uEE59\uEE5A\uEE5B\uEE5C\uEE5D\uEE5E\uEE5F\uEE60"+
-        "\uEE61\uEE62\uEE63\uEE64\uEE65\uEE66\uEE67\uEE68"+
-        "\uEE69\uEE6A\uEE6B\uEE6C\uEE6D\uEE6E\uEE6F\uEE70"+
-        "\uEE71\uEE72\uEE73\uEE74\uEE75\uEE76\uEE77\uEE78"+
-        "\uEE79\uEE7A\uEE7B\uEE7C\uEE7D\uEE7E\uEE80\uEE81"+
-        "\uEE82\uEE83\uEE84\uEE85\uEE86\uEE87\uEE88\uEE89"+
-        "\uEE8A\uEE8B\uEE8C\uEE8D\uEE8E\uEE8F\uEE90\uEE91"+
-        "\uEE92\uEE93\uEE94\uEE95\uEE96\uEE97\uEE98\uEE99"+
-        "\uEE9A\uEE9B\uEE9C\uEE9D\uEE9E\uEE9F\uEEA0\uEF40"+
-        "\uEF41\uEF42\uEF43\uEF44\uEF45\uD2B3\uB6A5\uC7EA"+
-        "\uF1FC\uCFEE\uCBB3\uD0EB\uE7EF\uCDE7\uB9CB\uB6D9"+
-        "\uF1FD\uB0E4\uCBCC\uF1FE\uD4A4\uC2AD\uC1EC\uC6C4"+
-        "\uBEB1\uF2A1\uBCD5\uEF46\uF2A2\uF2A3\uEF47\uF2A4"+
-        "\uD2C3\uC6B5\uEF48\uCDC7\uF2A5\uEF49\uD3B1\uBFC5"+
-        "\uCCE2\uEF4A\uF2A6\uF2A7\uD1D5\uB6EE\uF2A8\uF2A9"+
-        "\uB5DF\uF2AA\uF2AB\uEF4B\uB2FC\uF2AC\uF2AD\uC8A7"+
-        "\uEF4C\uEF4D\uEF4E\uEF4F\uEF50\uEF51\uEF52\uEF53"+
-        "\uEF54\uEF55\uEF56\uEF57\uEF58\uEF59\uEF5A\uEF5B"+
-        "\uEF5C\uEF5D\uEF5E\uEF5F\uEF60\uEF61\uEF62\uEF63"+
-        "\uEF64\uEF65\uEF66\uEF67\uEF68\uEF69\uEF6A\uEF6B"+
-        "\uEF6C\uEF6D\uEF6E\uEF6F\uEF70\uEF71\uB7E7\uEF72"+
-        "\uEF73\uECA9\uECAA\uECAB\uEF74\uECAC\uEF75\uEF76"+
-        "\uC6AE\uECAD\uECAE\uEF77\uEF78\uEF79\uB7C9\uCAB3"+
-        "\uEF7A\uEF7B\uEF7C\uEF7D\uEF7E\uEF80\uEF81\uE2B8"+
-        "\uF7CF\uEF82\uEF83\uEF84\uEF85\uEF86\uEF87\uEF88"+
-        "\uEF89\uEF8A\uEF8B\uEF8C\uEF8D\uEF8E\uEF8F\uEF90"+
-        "\uEF91\uEF92\uEF93\uEF94\uEF95\uEF96\uEF97\uEF98"+
-        "\uEF99\uEF9A\uEF9B\uEF9C\uEF9D\uEF9E\uEF9F\uEFA0"+
-        "\uF040\uF041\uF042\uF043\uF044\uF7D0\uF045\uF046"+
-        "\uB2CD\uF047\uF048\uF049\uF04A\uF04B\uF04C\uF04D"+
-        "\uF04E\uF04F\uF050\uF051\uF052\uF053\uF054\uF055"+
-        "\uF056\uF057\uF058\uF059\uF05A\uF05B\uF05C\uF05D"+
-        "\uF05E\uF05F\uF060\uF061\uF062\uF063\uF7D1\uF064"+
-        "\uF065\uF066\uF067\uF068\uF069\uF06A\uF06B\uF06C"+
-        "\uF06D\uF06E\uF06F\uF070\uF071\uF072\uF073\uF074"+
-        "\uF075\uF076\uF077\uF078\uF079\uF07A\uF07B\uF07C"+
-        "\uF07D\uF07E\uF080\uF081\uF082\uF083\uF084\uF085"+
-        "\uF086\uF087\uF088\uF089\uF7D3\uF7D2\uF08A\uF08B"+
-        "\uF08C\uF08D\uF08E\uF08F\uF090\uF091\uF092\uF093"+
-        "\uF094\uF095\uF096\uE2BB\uF097\uBCA2\uF098\uE2BC"+
-        "\uE2BD\uE2BE\uE2BF\uE2C0\uE2C1\uB7B9\uD2FB\uBDA4"+
-        "\uCACE\uB1A5\uCBC7\uF099\uE2C2\uB6FC\uC8C4\uE2C3"+
-        "\uF09A\uF09B\uBDC8\uF09C\uB1FD\uE2C4\uF09D\uB6F6"+
-        "\uE2C5\uC4D9\uF09E\uF09F\uE2C6\uCFDA\uB9DD\uE2C7"+
-        "\uC0A1\uF0A0\uE2C8\uB2F6\uF140\uE2C9\uF141\uC1F3"+
-        "\uE2CA\uE2CB\uC2F8\uE2CC\uE2CD\uE2CE\uCAD7\uD8B8"+
-        "\uD9E5\uCFE3\uF142\uF143\uF144\uF145\uF146\uF147"+
-        "\uF148\uF149\uF14A\uF14B\uF14C\uF0A5\uF14D\uF14E"+
-        "\uDCB0\uF14F\uF150\uF151\uF152\uF153\uF154\uF155"+
-        "\uF156\uF157\uF158\uF159\uF15A\uF15B\uF15C\uF15D"+
-        "\uF15E\uF15F\uF160\uF161\uF162\uF163\uF164\uF165"+
-        "\uF166\uF167\uF168\uF169\uF16A\uF16B\uF16C\uF16D"+
-        "\uF16E\uF16F\uF170\uF171\uF172\uF173\uF174\uF175"+
-        "\uF176\uF177\uF178\uF179\uF17A\uF17B\uF17C\uF17D"+
-        "\uF17E\uF180\uF181\uF182\uF183\uF184\uF185\uF186"+
-        "\uF187\uF188\uF189\uF18A\uF18B\uF18C\uF18D\uF18E"+
-        "\uF18F\uF190\uF191\uF192\uF193\uF194\uF195\uF196"+
-        "\uF197\uF198\uF199\uF19A\uF19B\uF19C\uF19D\uF19E"+
-        "\uF19F\uF1A0\uF240\uF241\uF242\uF243\uF244\uF245"+
-        "\uF246\uF247\uF248\uF249\uF24A\uF24B\uF24C\uF24D"+
-        "\uF24E\uF24F\uF250\uF251\uF252\uF253\uF254\uF255"+
-        "\uF256\uF257\uF258\uF259\uF25A\uF25B\uF25C\uF25D"+
-        "\uF25E\uF25F\uF260\uF261\uF262\uF263\uF264\uF265"+
-        "\uF266\uF267\uF268\uF269\uF26A\uF26B\uF26C\uF26D"+
-        "\uF26E\uF26F\uF270\uF271\uF272\uF273\uF274\uF275"+
-        "\uF276\uF277\uF278\uF279\uF27A\uF27B\uF27C\uF27D"+
-        "\uF27E\uF280\uF281\uF282\uF283\uF284\uF285\uF286"+
-        "\uF287\uF288\uF289\uF28A\uF28B\uF28C\uF28D\uF28E"+
-        "\uF28F\uF290\uF291\uF292\uF293\uF294\uF295\uF296"+
-        "\uF297\uF298\uF299\uF29A\uF29B\uF29C\uF29D\uF29E"+
-        "\uF29F\uF2A0\uF340\uF341\uF342\uF343\uF344\uF345"+
-        "\uF346\uF347\uF348\uF349\uF34A\uF34B\uF34C\uF34D"+
-        "\uF34E\uF34F\uF350\uF351\uC2ED\uD4A6\uCDD4\uD1B1"+
-        "\uB3DB\uC7FD\uF352\uB2B5\uC2BF\uE6E0\uCABB\uE6E1"+
-        "\uE6E2\uBED4\uE6E3\uD7A4\uCDD5\uE6E5\uBCDD\uE6E4"+
-        "\uE6E6\uE6E7\uC2EE\uF353\uBDBE\uE6E8\uC2E6\uBAA7"+
-        "\uE6E9\uF354\uE6EA\uB3D2\uD1E9\uF355\uF356\uBFA5"+
-        "\uE6EB\uC6EF\uE6EC\uE6ED\uF357\uF358\uE6EE\uC6AD"+
-        "\uE6EF\uF359\uC9A7\uE6F0\uE6F1\uE6F2\uE5B9\uE6F3"+
-        "\uE6F4\uC2E2\uE6F5\uE6F6\uD6E8\uE6F7\uF35A\uE6F8"+
-        "\uB9C7\uF35B\uF35C\uF35D\uF35E\uF35F\uF360\uF361"+
-        "\uF7BB\uF7BA\uF362\uF363\uF364\uF365\uF7BE\uF7BC"+
-        "\uBAA1\uF366\uF7BF\uF367\uF7C0\uF368\uF369\uF36A"+
-        "\uF7C2\uF7C1\uF7C4\uF36B\uF36C\uF7C3\uF36D\uF36E"+
-        "\uF36F\uF370\uF371\uF7C5\uF7C6\uF372\uF373\uF374"+
-        "\uF375\uF7C7\uF376\uCBE8\uF377\uF378\uF379\uF37A"+
-        "\uB8DF\uF37B\uF37C\uF37D\uF37E\uF380\uF381\uF7D4"+
-        "\uF382\uF7D5\uF383\uF384\uF385\uF386\uF7D6\uF387"+
-        "\uF388\uF389\uF38A\uF7D8\uF38B\uF7DA\uF38C\uF7D7"+
-        "\uF38D\uF38E\uF38F\uF390\uF391\uF392\uF393\uF394"+
-        "\uF395\uF7DB\uF396\uF7D9\uF397\uF398\uF399\uF39A"+
-        "\uF39B\uF39C\uF39D\uD7D7\uF39E\uF39F\uF3A0\uF440"+
-        "\uF7DC\uF441\uF442\uF443\uF444\uF445\uF446\uF7DD"+
-        "\uF447\uF448\uF449\uF7DE\uF44A\uF44B\uF44C\uF44D"+
-        "\uF44E\uF44F\uF450\uF451\uF452\uF453\uF454\uF7DF"+
-        "\uF455\uF456\uF457\uF7E0\uF458\uF459\uF45A\uF45B"+
-        "\uF45C\uF45D\uF45E\uF45F\uF460\uF461\uF462\uDBCB"+
-        "\uF463\uF464\uD8AA\uF465\uF466\uF467\uF468\uF469"+
-        "\uF46A\uF46B\uF46C\uE5F7\uB9ED\uF46D\uF46E\uF46F"+
-        "\uF470\uBFFD\uBBEA\uF7C9\uC6C7\uF7C8\uF471\uF7CA"+
-        "\uF7CC\uF7CB\uF472\uF473\uF474\uF7CD\uF475\uCEBA"+
-        "\uF476\uF7CE\uF477\uF478\uC4A7\uF479\uF47A\uF47B"+
-        "\uF47C\uF47D\uF47E\uF480\uF481\uF482\uF483\uF484"+
-        "\uF485\uF486\uF487\uF488\uF489\uF48A\uF48B\uF48C"+
-        "\uF48D\uF48E\uF48F\uF490\uF491\uF492\uF493\uF494"+
-        "\uF495\uF496\uF497\uF498\uF499\uF49A\uF49B\uF49C"+
-        "\uF49D\uF49E\uF49F\uF4A0\uF540\uF541\uF542\uF543"+
-        "\uF544\uF545\uF546\uF547\uF548\uF549\uF54A\uF54B"+
-        "\uF54C\uF54D\uF54E\uF54F\uF550\uF551\uF552\uF553"+
-        "\uF554\uF555\uF556\uF557\uF558\uF559\uF55A\uF55B"+
-        "\uF55C\uF55D\uF55E\uF55F\uF560\uF561\uF562\uF563"+
-        "\uF564\uF565\uF566\uF567\uF568\uF569\uF56A\uF56B"+
-        "\uF56C\uF56D\uF56E\uF56F\uF570\uF571\uF572\uF573"+
-        "\uF574\uF575\uF576\uF577\uF578\uF579\uF57A\uF57B"+
-        "\uF57C\uF57D\uF57E\uF580\uF581\uF582\uF583\uF584"+
-        "\uF585\uF586\uF587\uF588\uF589\uF58A\uF58B\uF58C"+
-        "\uF58D\uF58E\uF58F\uF590\uF591\uF592\uF593\uF594"+
-        "\uF595\uF596\uF597\uF598\uF599\uF59A\uF59B\uF59C"+
-        "\uF59D\uF59E\uF59F\uF5A0\uF640\uF641\uF642\uF643"+
-        "\uF644\uF645\uF646\uF647\uF648\uF649\uF64A\uF64B"+
-        "\uF64C\uF64D\uF64E\uF64F\uF650\uF651\uF652\uF653"+
-        "\uF654\uF655\uF656\uF657\uF658\uF659\uF65A\uF65B"+
-        "\uF65C\uF65D\uF65E\uF65F\uF660\uF661\uF662\uF663"+
-        "\uF664\uF665\uF666\uF667\uF668\uF669\uF66A\uF66B"+
-        "\uF66C\uF66D\uF66E\uF66F\uF670\uF671\uF672\uF673"+
-        "\uF674\uF675\uF676\uF677\uF678\uF679\uF67A\uF67B"+
-        "\uF67C\uF67D\uF67E\uF680\uF681\uF682\uF683\uF684"+
-        "\uF685\uF686\uF687\uF688\uF689\uF68A\uF68B\uF68C"+
-        "\uF68D\uF68E\uF68F\uF690\uF691\uF692\uF693\uF694"+
-        "\uF695\uF696\uF697\uF698\uF699\uF69A\uF69B\uF69C"+
-        "\uF69D\uF69E\uF69F\uF6A0\uF740\uF741\uF742\uF743"+
-        "\uF744\uF745\uF746\uF747\uF748\uF749\uF74A\uF74B"+
-        "\uF74C\uF74D\uF74E\uF74F\uF750\uF751\uF752\uF753"+
-        "\uF754\uF755\uF756\uF757\uF758\uF759\uF75A\uF75B"+
-        "\uF75C\uF75D\uF75E\uF75F\uF760\uF761\uF762\uF763"+
-        "\uF764\uF765\uF766\uF767\uF768\uF769\uF76A\uF76B"+
-        "\uF76C\uF76D\uF76E\uF76F\uF770\uF771\uF772\uF773"+
-        "\uF774\uF775\uF776\uF777\uF778\uF779\uF77A\uF77B"+
-        "\uF77C\uF77D\uF77E\uF780\uD3E3\uF781\uF782\uF6CF"+
-        "\uF783\uC2B3\uF6D0\uF784\uF785\uF6D1\uF6D2\uF6D3"+
-        "\uF6D4\uF786\uF787\uF6D6\uF788\uB1AB\uF6D7\uF789"+
-        "\uF6D8\uF6D9\uF6DA\uF78A\uF6DB\uF6DC\uF78B\uF78C"+
-        "\uF78D\uF78E\uF6DD\uF6DE\uCFCA\uF78F\uF6DF\uF6E0"+
-        "\uF6E1\uF6E2\uF6E3\uF6E4\uC0F0\uF6E5\uF6E6\uF6E7"+
-        "\uF6E8\uF6E9\uF790\uF6EA\uF791\uF6EB\uF6EC\uF792"+
-        "\uF6ED\uF6EE\uF6EF\uF6F0\uF6F1\uF6F2\uF6F3\uF6F4"+
-        "\uBEA8\uF793\uF6F5\uF6F6\uF6F7\uF6F8\uF794\uF795"+
-        "\uF796\uF797\uF798\uC8FA\uF6F9\uF6FA\uF6FB\uF6FC"+
-        "\uF799\uF79A\uF6FD\uF6FE\uF7A1\uF7A2\uF7A3\uF7A4"+
-        "\uF7A5\uF79B\uF79C\uF7A6\uF7A7\uF7A8\uB1EE\uF7A9"+
-        "\uF7AA\uF7AB\uF79D\uF79E\uF7AC\uF7AD\uC1DB\uF7AE"+
-        "\uF79F\uF7A0\uF7AF\uF840\uF841\uF842\uF843\uF844"+
-        "\uF845\uF846\uF847\uF848\uF849\uF84A\uF84B\uF84C"+
-        "\uF84D\uF84E\uF84F\uF850\uF851\uF852\uF853\uF854"+
-        "\uF855\uF856\uF857\uF858\uF859\uF85A\uF85B\uF85C"+
-        "\uF85D\uF85E\uF85F\uF860\uF861\uF862\uF863\uF864"+
-        "\uF865\uF866\uF867\uF868\uF869\uF86A\uF86B\uF86C"+
-        "\uF86D\uF86E\uF86F\uF870\uF871\uF872\uF873\uF874"+
-        "\uF875\uF876\uF877\uF878\uF879\uF87A\uF87B\uF87C"+
-        "\uF87D\uF87E\uF880\uF881\uF882\uF883\uF884\uF885"+
-        "\uF886\uF887\uF888\uF889\uF88A\uF88B\uF88C\uF88D"+
-        "\uF88E\uF88F\uF890\uF891\uF892\uF893\uF894\uF895"+
-        "\uF896\uF897\uF898\uF899\uF89A\uF89B\uF89C\uF89D"+
-        "\uF89E\uF89F\uF8A0\uF940\uF941\uF942\uF943\uF944"+
-        "\uF945\uF946\uF947\uF948\uF949\uF94A\uF94B\uF94C"+
-        "\uF94D\uF94E\uF94F\uF950\uF951\uF952\uF953\uF954"+
-        "\uF955\uF956\uF957\uF958\uF959\uF95A\uF95B\uF95C"+
-        "\uF95D\uF95E\uF95F\uF960\uF961\uF962\uF963\uF964"+
-        "\uF965\uF966\uF967\uF968\uF969\uF96A\uF96B\uF96C"+
-        "\uF96D\uF96E\uF96F\uF970\uF971\uF972\uF973\uF974"+
-        "\uF975\uF976\uF977\uF978\uF979\uF97A\uF97B\uF97C"+
-        "\uF97D\uF97E\uF980\uF981\uF982\uF983\uF984\uF985"+
-        "\uF986\uF987\uF988\uF989\uF98A\uF98B\uF98C\uF98D"+
-        "\uF98E\uF98F\uF990\uF991\uF992\uF993\uF994\uF995"+
-        "\uF996\uF997\uF998\uF999\uF99A\uF99B\uF99C\uF99D"+
-        "\uF99E\uF99F\uF9A0\uFA40\uFA41\uFA42\uFA43\uFA44"+
-        "\uFA45\uFA46\uFA47\uFA48\uFA49\uFA4A\uFA4B\uFA4C"+
-        "\uFA4D\uFA4E\uFA4F\uFA50\uFA51\uFA52\uFA53\uFA54"+
-        "\uFA55\uFA56\uFA57\uFA58\uFA59\uFA5A\uFA5B\uFA5C"+
-        "\uFA5D\uFA5E\uFA5F\uFA60\uFA61\uFA62\uFA63\uFA64"+
-        "\uFA65\uFA66\uFA67\uFA68\uFA69\uFA6A\uFA6B\uFA6C"+
-        "\uFA6D\uFA6E\uFA6F\uFA70\uFA71\uFA72\uFA73\uFA74"+
-        "\uFA75\uFA76\uFA77\uFA78\uFA79\uFA7A\uFA7B\uFA7C"+
-        "\uFA7D\uFA7E\uFA80\uFA81\uFA82\uFA83\uFA84\uFA85"+
-        "\uFA86\uFA87\uFA88\uFA89\uFA8A\uFA8B\uFA8C\uFA8D"+
-        "\uFA8E\uFA8F\uFA90\uFA91\uFA92\uFA93\uFA94\uFA95"+
-        "\uFA96\uFA97\uFA98\uFA99\uFA9A\uFA9B\uFA9C\uFA9D"+
-        "\uFA9E\uFA9F\uFAA0\uFB40\uFB41\uFB42\uFB43\uFB44"+
-        "\uFB45\uFB46\uFB47\uFB48\uFB49\uFB4A\uFB4B\uFB4C"+
-        "\uFB4D\uFB4E\uFB4F\uFB50\uFB51\uFB52\uFB53\uFB54"+
-        "\uFB55\uFB56\uFB57\uFB58\uFB59\uFB5A\uFB5B\uC4F1"+
-        "\uF0AF\uBCA6\uF0B0\uC3F9\uFB5C\uC5B8\uD1BB\uFB5D"+
-        "\uF0B1\uF0B2\uF0B3\uF0B4\uF0B5\uD1BC\uFB5E\uD1EC"+
-        "\uFB5F\uF0B7\uF0B6\uD4A7\uFB60\uCDD2\uF0B8\uF0BA"+
-        "\uF0B9\uF0BB\uF0BC\uFB61\uFB62\uB8EB\uF0BD\uBAE8"+
-        "\uFB63\uF0BE\uF0BF\uBEE9\uF0C0\uB6EC\uF0C1\uF0C2"+
-        "\uF0C3\uF0C4\uC8B5\uF0C5\uF0C6\uFB64\uF0C7\uC5F4"+
-        "\uFB65\uF0C8\uFB66\uFB67\uFB68\uF0C9\uFB69\uF0CA"+
-        "\uF7BD\uFB6A\uF0CB\uF0CC\uF0CD\uFB6B\uF0CE\uFB6C"+
-        "\uFB6D\uFB6E\uFB6F\uF0CF\uBAD7\uFB70\uF0D0\uF0D1"+
-        "\uF0D2\uF0D3\uF0D4\uF0D5\uF0D6\uF0D8\uFB71\uFB72"+
-        "\uD3A5\uF0D7\uFB73\uF0D9\uFB74\uFB75\uFB76\uFB77"+
-        "\uFB78\uFB79\uFB7A\uFB7B\uFB7C\uFB7D\uF5BA\uC2B9"+
-        "\uFB7E\uFB80\uF7E4\uFB81\uFB82\uFB83\uFB84\uF7E5"+
-        "\uF7E6\uFB85\uFB86\uF7E7\uFB87\uFB88\uFB89\uFB8A"+
-        "\uFB8B\uFB8C\uF7E8\uC2B4\uFB8D\uFB8E\uFB8F\uFB90"+
-        "\uFB91\uFB92\uFB93\uFB94\uFB95\uF7EA\uFB96\uF7EB"+
-        "\uFB97\uFB98\uFB99\uFB9A\uFB9B\uFB9C\uC2F3\uFB9D"+
-        "\uFB9E\uFB9F\uFBA0\uFC40\uFC41\uFC42\uFC43\uFC44"+
-        "\uFC45\uFC46\uFC47\uFC48\uF4F0\uFC49\uFC4A\uFC4B"+
-        "\uF4EF\uFC4C\uFC4D\uC2E9\uFC4E\uF7E1\uF7E2\uFC4F"+
-        "\uFC50\uFC51\uFC52\uFC53\uBBC6\uFC54\uFC55\uFC56"+
-        "\uFC57\uD9E4\uFC58\uFC59\uFC5A\uCAF2\uC0E8\uF0A4"+
-        "\uFC5B\uBADA\uFC5C\uFC5D\uC7AD\uFC5E\uFC5F\uFC60"+
-        "\uC4AC\uFC61\uFC62\uF7EC\uF7ED\uF7EE\uFC63\uF7F0"+
-        "\uF7EF\uFC64\uF7F1\uFC65\uFC66\uF7F4\uFC67\uF7F3"+
-        "\uFC68\uF7F2\uF7F5\uFC69\uFC6A\uFC6B\uFC6C\uF7F6"+
-        "\uFC6D\uFC6E\uFC6F\uFC70\uFC71\uFC72\uFC73\uFC74"+
-        "\uFC75\uEDE9\uFC76\uEDEA\uEDEB\uFC77\uF6BC\uFC78"+
-        "\uFC79\uFC7A\uFC7B\uFC7C\uFC7D\uFC7E\uFC80\uFC81"+
-        "\uFC82\uFC83\uFC84\uF6BD\uFC85\uF6BE\uB6A6\uFC86"+
-        "\uD8BE\uFC87\uFC88\uB9C4\uFC89\uFC8A\uFC8B\uD8BB"+
-        "\uFC8C\uDCB1\uFC8D\uFC8E\uFC8F\uFC90\uFC91\uFC92"+
-        "\uCAF3\uFC93\uF7F7\uFC94\uFC95\uFC96\uFC97\uFC98"+
-        "\uFC99\uFC9A\uFC9B\uFC9C\uF7F8\uFC9D\uFC9E\uF7F9"+
-        "\uFC9F\uFCA0\uFD40\uFD41\uFD42\uFD43\uFD44\uF7FB"+
-        "\uFD45\uF7FA\uFD46\uB1C7\uFD47\uF7FC\uF7FD\uFD48"+
-        "\uFD49\uFD4A\uFD4B\uFD4C\uF7FE\uFD4D\uFD4E\uFD4F"+
-        "\uFD50\uFD51\uFD52\uFD53\uFD54\uFD55\uFD56\uFD57"+
-        "\uC6EB\uECB4\uFD58\uFD59\uFD5A\uFD5B\uFD5C\uFD5D"+
-        "\uFD5E\uFD5F\uFD60\uFD61\uFD62\uFD63\uFD64\uFD65"+
-        "\uFD66\uFD67\uFD68\uFD69\uFD6A\uFD6B\uFD6C\uFD6D"+
-        "\uFD6E\uFD6F\uFD70\uFD71\uFD72\uFD73\uFD74\uFD75"+
-        "\uFD76\uFD77\uFD78\uFD79\uFD7A\uFD7B\uFD7C\uFD7D"+
-        "\uFD7E\uFD80\uFD81\uFD82\uFD83\uFD84\uFD85\uB3DD"+
-        "\uF6B3\uFD86\uFD87\uF6B4\uC1E4\uF6B5\uF6B6\uF6B7"+
-        "\uF6B8\uF6B9\uF6BA\uC8A3\uF6BB\uFD88\uFD89\uFD8A"+
-        "\uFD8B\uFD8C\uFD8D\uFD8E\uFD8F\uFD90\uFD91\uFD92"+
-        "\uFD93\uC1FA\uB9A8\uEDE8\uFD94\uFD95\uFD96\uB9EA"+
-        "\uD9DF\uFD97\uFD98\uFD99\uFD9A\uFD9B\u6A63\u6A64"+
-        "\u6A65\u6A66\u6A67\u6A68\u6A69\u6A6A\u6A6B\u6A6C"+
-        "\u6A6D\u6A6E\u6A6F\u6A70\u6A71\u6A72\u6A73\u6A74"+
-        "\u6A75\u6A76\u6A77\u6A78\u6A79\u6A7A\u6A7B\u6A7C"+
-        "\u6A7D\u6A7E\u6A7F\u6A80\u6A81\u6A82\u6A83\u6A84"+
-        "\u6A85\u6A86\u6A87\u6A88\u6A89\u6A8A\u6A8B\u6A8C"+
-        "\u6A8D\u6A8E\u6A8F\u6A90\u6A91\u6A92\u6A93\u6A94"+
-        "\u6A95\u6A96\u6A97\u6A98\u6A99\u6A9A\u6A9B\u6A9C"+
-        "\u6A9D\u6A9E\u6A9F\u6AA0\u6AA1\u6AA2\u6AA3\u6AA4"+
-        "\u6AA5\u6AA6\u6AA7\u6AA8\u6AA9\u6AAA\u6AAB\u6AAC"+
-        "\u6AAD\u6AAE\u6AAF\u6AB0\u6AB1\u6AB2\u6AB3\u6AB4"+
-        "\u6AB5\u6AB6\u6AB7\u6AB8\u6AB9\u6ABA\u6ABB\u6ABC";
-
-    private final static String innerEncoderIndex10=
-        "\u6ABD\u6ABE\u6ABF\u6AC0\u6AC1\u6AC2\u6AC3\u6AC4"+
-        "\u6AC5\u6AC6\u6AC7\u6AC8\u6AC9\u6ACA\u6ACB\u6ACC"+
-        "\u6ACD\u6ACE\u6ACF\u6AD0\u6AD1\u6AD2\u6AD3\u6AD4"+
-        "\u6AD5\u6AD6\u6AD7\u6AD8\u6AD9\u6ADA\u6ADB\u6ADC"+
-        "\u6ADD\u6ADE\u6ADF\u6AE0\u6AE1\u6AE2\u6AE3\u6AE4"+
-        "\u6AE5\u6AE6\u6AE7\u6AE8\u6AE9\u6AEA\u6AEB\u6AEC"+
-        "\u6AED\u6AEE\u6AEF\u6AF0\u6AF1\u6AF2\u6AF3\u6AF4"+
-        "\u6AF5\u6AF6\u6AF7\u6AF8\u6AF9\u6AFA\u6AFB\u6AFC"+
-        "\u6AFD\u6AFE\u6AFF\u6B00\u6B01\u6B02\u6B03\u6B04"+
-        "\u6B05\u6B06\u6B07\u6B08\u6B09\u6B0A\u6B0B\u6B0C"+
-        "\u6B0D\u6B0E\u6B0F\u6B10\u6B11\u6B12\u6B13\u6B14"+
-        "\u6B15\u6B16\u6B17\u6B18\u6B19\u6B1A\u6B1B\u6B1C"+
-        "\u6B1D\u6B1E\u6B1F\u6B20\u6B21\u6B22\u6B23\u6B24"+
-        "\u6B25\u6B26\u6B27\u6B28\u6B29\u6B2A\u6B2B\u6B2C"+
-        "\u6B2D\u6B2E\u6B2F\u6B30\u6B31\u6B32\u6B33\u6B34"+
-        "\u6B35\u6B36\u6B37\u6B38\u6B39\u6B3A\u6B3B\u6B3C"+
-        "\u6B3D\u6B3E\u6B3F\u6B40\u6B41\u6B42\u6B43\u6B44"+
-        "\u6B45\u6B46\u6B47\u6B48\u6B49\u6B4A\u6B4B\u6B4C"+
-        "\u6B4D\u6B4E\u6B4F\u6B50\u6B51\u6B52\u6B53\u6B54"+
-        "\u6B55\u6B56\u6B57\u6B58\u6B59\u6B5A\u6B5B\u6B5C"+
-        "\u6B5D\u6B5E\u6B5F\u6B60\u6B61\u6B62\u6B63\u6B64"+
-        "\u6B65\u6B66\u6B67\u6B68\u6B69\u6B6A\u6B6B\u6B6C"+
-        "\u6B6D\u6B6E\u6B6F\u6B70\u6B71\u6B72\u6B73\u6B74"+
-        "\u6B75\u6B76\u6B77\u6B78\u6B79\u6B7A\u6B7B\u6B7C"+
-        "\u6B7D\u6B7E\u6B7F\u6B80\u6B81\u6B82\u6B83\u6B84"+
-        "\u6B85\u6B86\u6B87\u6B88\u6B89\u6B8A\u6B8B\u6B8C"+
-        "\u6B8D\u6B8E\u6B8F\u6B90\u6B91\u6B92\u6B93\u6B94"+
-        "\u6B95\u6B96\u6B97\u6B98\u6B99\u6B9A\u6B9B\u6B9C"+
-        "\u6B9D\u6B9E\u6B9F\u6BA0\u6BA1\u6BA2\u6BA3\u6BA4"+
-        "\u6BA5\u6BA6\u6BA7\u6BA8\u6BA9\u6BAA\u6BAB\u6BAC"+
-        "\u6BAD\u6BAE\u6BAF\u6BB0\u6BB1\u6BB2\u6BB3\u6BB4"+
-        "\u6BB5\u6BB6\u6BB7\u6BB8\u6BB9\u6BBA\u6BBB\u6BBC"+
-        "\u6BBD\u6BBE\u6BBF\u6BC0\u6BC1\u6BC2\u6BC3\u6BC4"+
-        "\u6BC5\u6BC6\u6BC7\u6BC8\u6BC9\u6BCA\u6BCB\u6BCC"+
-        "\u6BCD\u6BCE\u6BCF\u6BD0\u6BD1\u6BD2\u6BD3\u6BD4"+
-        "\u6BD5\u6BD6\u6BD7\u6BD8\u6BD9\u6BDA\u6BDB\u6BDC"+
-        "\u6BDD\u6BDE\u6BDF\u6BE0\u6BE1\u6BE2\u6BE3\u6BE4"+
-        "\u6BE5\u6BE6\u6BE7\u6BE8\u6BE9\u6BEA\u6BEB\u6BEC"+
-        "\u6BED\u6BEE\u6BEF\u6BF0\u6BF1\u6BF2\u6BF3\u6BF4"+
-        "\u6BF5\u6BF6\u6BF7\u6BF8\u6BF9\u6BFA\u6BFB\u6BFC"+
-        "\u6BFD\u6BFE\u6BFF\u6C00\u6C01\u6C02\u6C03\u6C04"+
-        "\u6C05\u6C06\u6C07\u6C08\u6C09\u6C0A\u6C0B\u6C0C"+
-        "\u6C0D\u6C0E\u6C0F\u6C10\u6C11\u6C12\u6C13\u6C14"+
-        "\u6C15\u6C16\u6C17\u6C18\u6C19\u6C1A\u6C1B\u6C1C"+
-        "\u6C1D\u6C1E\u6C1F\u6C20\u6C21\u6C22\u6C23\u6C24"+
-        "\u6C25\u6C26\u6C27\u6C28\u6C29\u6C2A\u6C2B\u6C2C"+
-        "\u6C2D\u6C2E\u6C2F\u6C30\u6C31\u6C32\u6C33\u6C34"+
-        "\u6C35\u6C36\u6C37\u6C38\u6C39\u6C3A\u6C3B\u6C3C"+
-        "\u6C3D\u6C3E\u6C3F\u6C40\u6C41\u6C42\u6C43\u6C44"+
-        "\u6C45\u6C46\u6C47\u6C48\u6C49\u6C4A\u6C4B\u6C4C"+
-        "\u6C4D\u6C4E\u6C4F\u6C50\u6C51\u6C52\u6C53\u6C54"+
-        "\u6C55\u6C56\u6C57\u6C58\u6C59\u6C5A\u6C5B\u6C5C"+
-        "\u6C5D\u6C5E\u6C5F\u6C60\u6C61\u6C62\u6C63\u6C64"+
-        "\u6C65\u6C66\u6C67\u6C68\u6C69\u6C6A\u6C6B\u6C6C"+
-        "\u6C6D\u6C6E\u6C6F\u6C70\u6C71\u6C72\u6C73\u6C74"+
-        "\u6C75\u6C76\u6C77\u6C78\u6C79\u6C7A\u6C7B\u6C7C"+
-        "\u6C7D\u6C7E\u6C7F\u6C80\u6C81\u6C82\u6C83\u6C84"+
-        "\u6C85\u6C86\u6C87\u6C88\u6C89\u6C8A\u6C8B\u6C8C"+
-        "\u6C8D\u6C8E\u6C8F\u6C90\u6C91\u6C92\u6C93\u6C94"+
-        "\u6C95\u6C96\u6C97\u6C98\u6C99\u6C9A\u6C9B\u6C9C"+
-        "\u6C9D\u6C9E\u6C9F\u6CA0\u6CA1\u6CA2\u6CA3\u6CA4"+
-        "\u6CA5\u6CA6\u6CA7\u6CA8\u6CA9\u6CAA\u6CAB\u6CAC"+
-        "\u6CAD\u6CAE\u6CAF\u6CB0\u6CB1\u6CB2\u6CB3\u6CB4"+
-        "\u6CB5\u6CB6\u6CB7\u6CB8\u6CB9\u6CBA\u6CBB\u6CBC"+
-        "\u6CBD\u6CBE\u6CBF\u6CC0\u6CC1\u6CC2\u6CC3\u6CC4"+
-        "\u6CC5\u6CC6\u6CC7\u6CC8\u6CC9\u6CCA\u6CCB\u6CCC"+
-        "\u6CCD\u6CCE\u6CCF\u6CD0\u6CD1\u6CD2\u6CD3\u6CD4"+
-        "\u6CD5\u6CD6\u6CD7\u6CD8\u6CD9\u6CDA\u6CDB\u6CDC"+
-        "\u6CDD\u6CDE\u6CDF\u6CE0\u6CE1\u6CE2\u6CE3\u6CE4"+
-        "\u6CE5\u6CE6\u6CE7\u6CE8\u6CE9\u6CEA\u6CEB\u6CEC"+
-        "\u6CED\u6CEE\u6CEF\u6CF0\u6CF1\u6CF2\u6CF3\u6CF4"+
-        "\u6CF5\u6CF6\u6CF7\u6CF8\u6CF9\u6CFA\u6CFB\u6CFC"+
-        "\u6CFD\u6CFE\u6CFF\u6D00\u6D01\u6D02\u6D03\u6D04"+
-        "\u6D05\u6D06\u6D07\u6D08\u6D09\u6D0A\u6D0B\u6D0C"+
-        "\u6D0D\u6D0E\u6D0F\u6D10\u6D11\u6D12\u6D13\u6D14"+
-        "\u6D15\u6D16\u6D17\u6D18\u6D19\u6D1A\u6D1B\u6D1C"+
-        "\u6D1D\u6D1E\u6D1F\u6D20\u6D21\u6D22\u6D23\u6D24"+
-        "\u6D25\u6D26\u6D27\u6D28\u6D29\u6D2A\u6D2B\u6D2C"+
-        "\u6D2D\u6D2E\u6D2F\u6D30\u6D31\u6D32\u6D33\u6D34"+
-        "\u6D35\u6D36\u6D37\u6D38\u6D39\u6D3A\u6D3B\u6D3C"+
-        "\u6D3D\u6D3E\u6D3F\u6D40\u6D41\u6D42\u6D43\u6D44"+
-        "\u6D45\u6D46\u6D47\u6D48\u6D49\u6D4A\u6D4B\u6D4C"+
-        "\u6D4D\u6D4E\u6D4F\u6D50\u6D51\u6D52\u6D53\u6D54"+
-        "\u6D55\u6D56\u6D57\u6D58\u6D59\u6D5A\u6D5B\u6D5C"+
-        "\u6D5D\u6D5E\u6D5F\u6D60\u6D61\u6D62\u6D63\u6D64"+
-        "\u6D65\u6D66\u6D67\u6D68\u6D69\u6D6A\u6D6B\u6D6C"+
-        "\u6D6D\u6D6E\u6D6F\u6D70\u6D71\u6D72\u6D73\u6D74"+
-        "\u6D75\u6D76\u6D77\u6D78\u6D79\u6D7A\u6D7B\u6D7C"+
-        "\u6D7D\u6D7E\u6D7F\u6D80\u6D81\u6D82\u6D83\u6D84"+
-        "\u6D85\u6D86\u6D87\u6D88\u6D89\u6D8A\u6D8B\u6D8C"+
-        "\u6D8D\u6D8E\u6D8F\u6D90\u6D91\u6D92\u6D93\u6D94"+
-        "\u6D95\u6D96\u6D97\u6D98\u6D99\u6D9A\u6D9B\u6D9C"+
-        "\u6D9D\u6D9E\u6D9F\u6DA0\u6DA1\u6DA2\u6DA3\u6DA4"+
-        "\u6DA5\u6DA6\u6DA7\u6DA8\u6DA9\u6DAA\u6DAB\u6DAC"+
-        "\u6DAD\u6DAE\u6DAF\u6DB0\u6DB1\u6DB2\u6DB3\u6DB4"+
-        "\u6DB5\u6DB6\u6DB7\u6DB8\u6DB9\u6DBA\u6DBB\u6DBC"+
-        "\u6DBD\u6DBE\u6DBF\u6DC0\u6DC1\u6DC2\u6DC3\u6DC4"+
-        "\u6DC5\u6DC6\u6DC7\u6DC8\u6DC9\u6DCA\u6DCB\u6DCC"+
-        "\u6DCD\u6DCE\u6DCF\u6DD0\u6DD1\u6DD2\u6DD3\u6DD4"+
-        "\u6DD5\u6DD6\u6DD7\u6DD8\u6DD9\u6DDA\u6DDB\u6DDC"+
-        "\u6DDD\u6DDE\u6DDF\u6DE0\u6DE1\u6DE2\u6DE3\u6DE4"+
-        "\u6DE5\u6DE6\u6DE7\u6DE8\u6DE9\u6DEA\u6DEB\u6DEC"+
-        "\u6DED\u6DEE\u6DEF\u6DF0\u6DF1\u6DF2\u6DF3\u6DF4"+
-        "\u6DF5\u6DF6\u6DF7\u6DF8\u6DF9\u6DFA\u6DFB\u6DFC"+
-        "\u6DFD\u6DFE\u6DFF\u6E00\u6E01\u6E02\u6E03\u6E04"+
-        "\u6E05\u6E06\u6E07\u6E08\u6E09\u6E0A\u6E0B\u6E0C"+
-        "\u6E0D\u6E0E\u6E0F\u6E10\u6E11\u6E12\u6E13\u6E14"+
-        "\u6E15\u6E16\u6E17\u6E18\u6E19\u6E1A\u6E1B\u6E1C"+
-        "\u6E1D\u6E1E\u6E1F\u6E20\u6E21\u6E22\u6E23\u6E24"+
-        "\u6E25\u6E26\u6E27\u6E28\u6E29\u6E2A\u6E2B\u6E2C"+
-        "\u6E2D\u6E2E\u6E2F\u6E30\u6E31\u6E32\u6E33\u6E34"+
-        "\u6E35\u6E36\u6E37\u6E38\u6E39\u6E3A\u6E3B\u6E3C"+
-        "\u6E3D\u6E3E\u6E3F\u6E40\u6E41\u6E42\u6E43\u6E44"+
-        "\u6E45\u6E46\u6E47\u6E48\u6E49\u6E4A\u6E4B\u6E4C"+
-        "\u6E4D\u6E4E\u6E4F\u6E50\u6E51\u6E52\u6E53\u6E54"+
-        "\u6E55\u6E56\u6E57\u6E58\u6E59\u6E5A\u6E5B\u6E5C"+
-        "\u6E5D\u6E5E\u6E5F\u6E60\u6E61\u6E62\u6E63\u6E64"+
-        "\u6E65\u6E66\u6E67\u6E68\u6E69\u6E6A\u6E6B\u6E6C"+
-        "\u6E6D\u6E6E\u6E6F\u6E70\u6E71\u6E72\u6E73\u6E74"+
-        "\u6E75\u6E76\u6E77\u6E78\u6E79\u6E7A\u6E7B\u6E7C"+
-        "\u6E7D\u6E7E\u6E7F\u6E80\u6E81\u6E82\u6E83\u6E84"+
-        "\u6E85\u6E86\u6E87\u6E88\u6E89\u6E8A\u6E8B\u6E8C"+
-        "\u6E8D\u6E8E\u6E8F\u6E90\u6E91\u6E92\u6E93\u6E94"+
-        "\u6E95\u6E96\u6E97\u6E98\u6E99\u6E9A\u6E9B\u6E9C"+
-        "\u6E9D\u6E9E\u6E9F\u6EA0\u6EA1\u6EA2\u6EA3\u6EA4"+
-        "\u6EA5\u6EA6\u6EA7\u6EA8\u6EA9\u6EAA\u6EAB\u6EAC"+
-        "\u6EAD\u6EAE\u6EAF\u6EB0\u6EB1\u6EB2\u6EB3\u6EB4"+
-        "\u6EB5\u6EB6\u6EB7\u6EB8\u6EB9\u6EBA\u6EBB\u6EBC"+
-        "\u6EBD\u6EBE\u6EBF\u6EC0\u6EC1\u6EC2\u6EC3\u6EC4"+
-        "\u6EC5\u6EC6\u6EC7\u6EC8\u6EC9\u6ECA\u6ECB\u6ECC"+
-        "\u6ECD\u6ECE\u6ECF\u6ED0\u6ED1\u6ED2\u6ED3\u6ED4"+
-        "\u6ED5\u6ED6\u6ED7\u6ED8\u6ED9\u6EDA\u6EDB\u6EDC"+
-        "\u6EDD\u6EDE\u6EDF\u6EE0\u6EE1\u6EE2\u6EE3\u6EE4"+
-        "\u6EE5\u6EE6\u6EE7\u6EE8\u6EE9\u6EEA\u6EEB\u6EEC"+
-        "\u6EED\u6EEE\u6EEF\u6EF0\u6EF1\u6EF2\u6EF3\u6EF4"+
-        "\u6EF5\u6EF6\u6EF7\u6EF8\u6EF9\u6EFA\u6EFB\u6EFC"+
-        "\u6EFD\u6EFE\u6EFF\u6F00\u6F01\u6F02\u6F03\u6F04"+
-        "\u6F05\u6F06\u6F07\u6F08\u6F09\u6F0A\u6F0B\u6F0C"+
-        "\u6F0D\u6F0E\u6F0F\u6F10\u6F11\u6F12\u6F13\u6F14"+
-        "\u6F15\u6F16\u6F17\u6F18\u6F19\u6F1A\u6F1B\u6F1C"+
-        "\u6F1D\u6F1E\u6F1F\u6F20\u6F21\u6F22\u6F23\u6F24"+
-        "\u6F25\u6F26\u6F27\u6F28\u6F29\u6F2A\u6F2B\u6F2C"+
-        "\u6F2D\u6F2E\u6F2F\u6F30\u6F31\u6F32\u6F33\u6F34"+
-        "\u6F35\u6F36\u6F37\u6F38\u6F39\u6F3A\u6F3B\u6F3C"+
-        "\u6F3D\u6F3E\u6F3F\u6F40\u6F41\u6F42\u6F43\u6F44"+
-        "\u6F45\u6F46\u6F47\u6F48\u6F49\u6F4A\u6F4B\u6F4C"+
-        "\u6F4D\u6F4E\u6F4F\u6F50\u6F51\u6F52\u6F53\u6F54"+
-        "\u6F55\u6F56\u6F57\u6F58\u6F59\u6F5A\u6F5B\u6F5C"+
-        "\u6F5D\u6F5E\u6F5F\u6F60\u6F61\u6F62\u6F63\u6F64"+
-        "\u6F65\u6F66\u6F67\u6F68\u6F69\u6F6A\u6F6B\u6F6C"+
-        "\u6F6D\u6F6E\u6F6F\u6F70\u6F71\u6F72\u6F73\u6F74"+
-        "\u6F75\u6F76\u6F77\u6F78\u6F79\u6F7A\u6F7B\u6F7C"+
-        "\u6F7D\u6F7E\u6F7F\u6F80\u6F81\u6F82\u6F83\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uAAA1\uAAA2\uAAA3\uAAA4\uAAA5\uAAA6\uAAA7\uAAA8"+
-        "\uAAA9\uAAAA\uAAAB\uAAAC\uAAAD\uAAAE\uAAAF\uAAB0"+
-        "\uAAB1\uAAB2\uAAB3\uAAB4\uAAB5\uAAB6\uAAB7\uAAB8"+
-        "\uAAB9\uAABA\uAABB\uAABC\uAABD\uAABE\uAABF\uAAC0"+
-        "\uAAC1\uAAC2\uAAC3\uAAC4\uAAC5\uAAC6\uAAC7\uAAC8"+
-        "\uAAC9\uAACA\uAACB\uAACC\uAACD\uAACE\uAACF\uAAD0"+
-        "\uAAD1\uAAD2\uAAD3\uAAD4\uAAD5\uAAD6\uAAD7\uAAD8"+
-        "\uAAD9\uAADA\uAADB\uAADC\uAADD\uAADE\uAADF\uAAE0"+
-        "\uAAE1\uAAE2\uAAE3\uAAE4\uAAE5\uAAE6\uAAE7\uAAE8"+
-        "\uAAE9\uAAEA\uAAEB\uAAEC\uAAED\uAAEE\uAAEF\uAAF0"+
-        "\uAAF1\uAAF2\uAAF3\uAAF4\uAAF5\uAAF6\uAAF7\uAAF8"+
-        "\uAAF9\uAAFA\uAAFB\uAAFC\uAAFD\uAAFE\uABA1\uABA2"+
-        "\uABA3\uABA4\uABA5\uABA6\uABA7\uABA8\uABA9\uABAA"+
-        "\uABAB\uABAC\uABAD\uABAE\uABAF\uABB0\uABB1\uABB2"+
-        "\uABB3\uABB4\uABB5\uABB6\uABB7\uABB8\uABB9\uABBA"+
-        "\uABBB\uABBC\uABBD\uABBE\uABBF\uABC0\uABC1\uABC2"+
-        "\uABC3\uABC4\uABC5\uABC6\uABC7\uABC8\uABC9\uABCA"+
-        "\uABCB\uABCC\uABCD\uABCE\uABCF\uABD0\uABD1\uABD2"+
-        "\uABD3\uABD4\uABD5\uABD6\uABD7\uABD8\uABD9\uABDA"+
-        "\uABDB\uABDC\uABDD\uABDE\uABDF\uABE0\uABE1\uABE2"+
-        "\uABE3\uABE4\uABE5\uABE6\uABE7\uABE8\uABE9\uABEA"+
-        "\uABEB\uABEC\uABED\uABEE\uABEF\uABF0\uABF1\uABF2"+
-        "\uABF3\uABF4\uABF5\uABF6\uABF7\uABF8\uABF9\uABFA"+
-        "\uABFB\uABFC\uABFD\uABFE\uACA1\uACA2\uACA3\uACA4"+
-        "\uACA5\uACA6\uACA7\uACA8\uACA9\uACAA\uACAB\uACAC"+
-        "\uACAD\uACAE\uACAF\uACB0\uACB1\uACB2\uACB3\uACB4"+
-        "\uACB5\uACB6\uACB7\uACB8\uACB9\uACBA\uACBB\uACBC"+
-        "\uACBD\uACBE\uACBF\uACC0\uACC1\uACC2\uACC3\uACC4"+
-        "\uACC5\uACC6\uACC7\uACC8\uACC9\uACCA\uACCB\uACCC"+
-        "\uACCD\uACCE\uACCF\uACD0\uACD1\uACD2\uACD3\uACD4"+
-        "\uACD5\uACD6\uACD7\uACD8\uACD9\uACDA\uACDB\uACDC"+
-        "\uACDD\uACDE\uACDF\uACE0\uACE1\uACE2\uACE3\uACE4"+
-        "\uACE5\uACE6\uACE7\uACE8\uACE9\uACEA\uACEB\uACEC"+
-        "\uACED\uACEE\uACEF\uACF0\uACF1\uACF2\uACF3\uACF4"+
-        "\uACF5\uACF6\uACF7\uACF8\uACF9\uACFA\uACFB\uACFC"+
-        "\uACFD\uACFE\uADA1\uADA2\uADA3\uADA4\uADA5\uADA6"+
-        "\uADA7\uADA8\uADA9\uADAA\uADAB\uADAC\uADAD\uADAE"+
-        "\uADAF\uADB0\uADB1\uADB2\uADB3\uADB4\uADB5\uADB6"+
-        "\uADB7\uADB8\uADB9\uADBA\uADBB\uADBC\uADBD\uADBE"+
-        "\uADBF\uADC0\uADC1\uADC2\uADC3\uADC4\uADC5\uADC6"+
-        "\uADC7\uADC8\uADC9\uADCA\uADCB\uADCC\uADCD\uADCE"+
-        "\uADCF\uADD0\uADD1\uADD2\uADD3\uADD4\uADD5\uADD6"+
-        "\uADD7\uADD8\uADD9\uADDA\uADDB\uADDC\uADDD\uADDE"+
-        "\uADDF\uADE0\uADE1\uADE2\uADE3\uADE4\uADE5\uADE6"+
-        "\uADE7\uADE8\uADE9\uADEA\uADEB\uADEC\uADED\uADEE"+
-        "\uADEF\uADF0\uADF1\uADF2\uADF3\uADF4\uADF5\uADF6"+
-        "\uADF7\uADF8\uADF9\uADFA\uADFB\uADFC\uADFD\uADFE"+
-        "\uAEA1\uAEA2\uAEA3\uAEA4\uAEA5\uAEA6\uAEA7\uAEA8"+
-        "\uAEA9\uAEAA\uAEAB\uAEAC\uAEAD\uAEAE\uAEAF\uAEB0"+
-        "\uAEB1\uAEB2\uAEB3\uAEB4\uAEB5\uAEB6\uAEB7\uAEB8"+
-        "\uAEB9\uAEBA\uAEBB\uAEBC\uAEBD\uAEBE\uAEBF\uAEC0"+
-        "\uAEC1\uAEC2\uAEC3\uAEC4\uAEC5\uAEC6\uAEC7\uAEC8"+
-        "\uAEC9\uAECA\uAECB\uAECC\uAECD\uAECE\uAECF\uAED0"+
-        "\uAED1\uAED2\uAED3\uAED4\uAED5\uAED6\uAED7\uAED8"+
-        "\uAED9\uAEDA\uAEDB\uAEDC\uAEDD\uAEDE\uAEDF\uAEE0"+
-        "\uAEE1\uAEE2\uAEE3\uAEE4\uAEE5\uAEE6\uAEE7\uAEE8"+
-        "\uAEE9\uAEEA\uAEEB\uAEEC\uAEED\uAEEE\uAEEF\uAEF0"+
-        "\uAEF1\uAEF2\uAEF3\uAEF4\uAEF5\uAEF6\uAEF7\uAEF8"+
-        "\uAEF9\uAEFA\uAEFB\uAEFC\uAEFD\uAEFE\uAFA1\uAFA2"+
-        "\uAFA3\uAFA4\uAFA5\uAFA6\uAFA7\uAFA8\uAFA9\uAFAA"+
-        "\uAFAB\uAFAC\uAFAD\uAFAE\uAFAF\uAFB0\uAFB1\uAFB2"+
-        "\uAFB3\uAFB4\uAFB5\uAFB6\uAFB7\uAFB8\uAFB9\uAFBA"+
-        "\uAFBB\uAFBC\uAFBD\uAFBE\uAFBF\uAFC0\uAFC1\uAFC2"+
-        "\uAFC3\uAFC4\uAFC5\uAFC6\uAFC7\uAFC8\uAFC9\uAFCA"+
-        "\uAFCB\uAFCC\uAFCD\uAFCE\uAFCF\uAFD0\uAFD1\uAFD2"+
-        "\uAFD3\uAFD4\uAFD5\uAFD6\uAFD7\uAFD8\uAFD9\uAFDA"+
-        "\uAFDB\uAFDC\uAFDD\uAFDE\uAFDF\uAFE0\uAFE1\uAFE2"+
-        "\uAFE3\uAFE4\uAFE5\uAFE6\uAFE7\uAFE8\uAFE9\uAFEA"+
-        "\uAFEB\uAFEC\uAFED\uAFEE\uAFEF\uAFF0\uAFF1\uAFF2"+
-        "\uAFF3\uAFF4\uAFF5\uAFF6\uAFF7\uAFF8\uAFF9\uAFFA"+
-        "\uAFFB\uAFFC\uAFFD\uAFFE\uF8A1\uF8A2\uF8A3\uF8A4"+
-        "\uF8A5\uF8A6\uF8A7\uF8A8\uF8A9\uF8AA\uF8AB\uF8AC"+
-        "\uF8AD\uF8AE\uF8AF\uF8B0\uF8B1\uF8B2\uF8B3\uF8B4"+
-        "\uF8B5\uF8B6\uF8B7\uF8B8\uF8B9\uF8BA\uF8BB\uF8BC"+
-        "\uF8BD\uF8BE\uF8BF\uF8C0\uF8C1\uF8C2\uF8C3\uF8C4"+
-        "\uF8C5\uF8C6\uF8C7\uF8C8\uF8C9\uF8CA\uF8CB\uF8CC"+
-        "\uF8CD\uF8CE\uF8CF\uF8D0\uF8D1\uF8D2\uF8D3\uF8D4"+
-        "\uF8D5\uF8D6\uF8D7\uF8D8\uF8D9\uF8DA\uF8DB\uF8DC"+
-        "\uF8DD\uF8DE\uF8DF\uF8E0\uF8E1\uF8E2\uF8E3\uF8E4"+
-        "\uF8E5\uF8E6\uF8E7\uF8E8\uF8E9\uF8EA\uF8EB\uF8EC"+
-        "\uF8ED\uF8EE\uF8EF\uF8F0\uF8F1\uF8F2\uF8F3\uF8F4"+
-        "\uF8F5\uF8F6\uF8F7\uF8F8\uF8F9\uF8FA\uF8FB\uF8FC"+
-        "\uF8FD\uF8FE\uF9A1\uF9A2\uF9A3\uF9A4\uF9A5\uF9A6"+
-        "\uF9A7\uF9A8\uF9A9\uF9AA\uF9AB\uF9AC\uF9AD\uF9AE"+
-        "\uF9AF\uF9B0\uF9B1\uF9B2\uF9B3\uF9B4\uF9B5\uF9B6"+
-        "\uF9B7\uF9B8\uF9B9\uF9BA\uF9BB\uF9BC\uF9BD\uF9BE"+
-        "\uF9BF\uF9C0\uF9C1\uF9C2\uF9C3\uF9C4\uF9C5\uF9C6"+
-        "\uF9C7\uF9C8\uF9C9\uF9CA\uF9CB\uF9CC\uF9CD\uF9CE"+
-        "\uF9CF\uF9D0\uF9D1\uF9D2\uF9D3\uF9D4\uF9D5\uF9D6"+
-        "\uF9D7\uF9D8\uF9D9\uF9DA\uF9DB\uF9DC\uF9DD\uF9DE"+
-        "\uF9DF\uF9E0\uF9E1\uF9E2\uF9E3\uF9E4\uF9E5\uF9E6"+
-        "\uF9E7\uF9E8\uF9E9\uF9EA\uF9EB\uF9EC\uF9ED\uF9EE"+
-        "\uF9EF\uF9F0\uF9F1\uF9F2\uF9F3\uF9F4\uF9F5\uF9F6"+
-        "\uF9F7\uF9F8\uF9F9\uF9FA\uF9FB\uF9FC\uF9FD\uF9FE"+
-        "\uFAA1\uFAA2\uFAA3\uFAA4\uFAA5\uFAA6\uFAA7\uFAA8"+
-        "\uFAA9\uFAAA\uFAAB\uFAAC\uFAAD\uFAAE\uFAAF\uFAB0"+
-        "\uFAB1\uFAB2\uFAB3\uFAB4\uFAB5\uFAB6\uFAB7\uFAB8"+
-        "\uFAB9\uFABA\uFABB\uFABC\uFABD\uFABE\uFABF\uFAC0"+
-        "\uFAC1\uFAC2\uFAC3\uFAC4\uFAC5\uFAC6\uFAC7\uFAC8"+
-        "\uFAC9\uFACA\uFACB\uFACC\uFACD\uFACE\uFACF\uFAD0"+
-        "\uFAD1\uFAD2\uFAD3\uFAD4\uFAD5\uFAD6\uFAD7\uFAD8"+
-        "\uFAD9\uFADA\uFADB\uFADC\uFADD\uFADE\uFADF\uFAE0"+
-        "\uFAE1\uFAE2\uFAE3\uFAE4\uFAE5\uFAE6\uFAE7\uFAE8"+
-        "\uFAE9\uFAEA\uFAEB\uFAEC\uFAED\uFAEE\uFAEF\uFAF0"+
-        "\uFAF1\uFAF2\uFAF3\uFAF4\uFAF5\uFAF6\uFAF7\uFAF8"+
-        "\uFAF9\uFAFA\uFAFB\uFAFC\uFAFD\uFAFE\uFBA1\uFBA2"+
-        "\uFBA3\uFBA4\uFBA5\uFBA6\uFBA7\uFBA8\uFBA9\uFBAA"+
-        "\uFBAB\uFBAC\uFBAD\uFBAE\uFBAF\uFBB0\uFBB1\uFBB2"+
-        "\uFBB3\uFBB4\uFBB5\uFBB6\uFBB7\uFBB8\uFBB9\uFBBA"+
-        "\uFBBB\uFBBC\uFBBD\uFBBE\uFBBF\uFBC0\uFBC1\uFBC2"+
-        "\uFBC3\uFBC4\uFBC5\uFBC6\uFBC7\uFBC8\uFBC9\uFBCA"+
-        "\uFBCB\uFBCC\uFBCD\uFBCE\uFBCF\uFBD0\uFBD1\uFBD2"+
-        "\uFBD3\uFBD4\uFBD5\uFBD6\uFBD7\uFBD8\uFBD9\uFBDA"+
-        "\uFBDB\uFBDC\uFBDD\uFBDE\uFBDF\uFBE0\uFBE1\uFBE2"+
-        "\uFBE3\uFBE4\uFBE5\uFBE6\uFBE7\uFBE8\uFBE9\uFBEA"+
-        "\uFBEB\uFBEC\uFBED\uFBEE\uFBEF\uFBF0\uFBF1\uFBF2"+
-        "\uFBF3\uFBF4\uFBF5\uFBF6\uFBF7\uFBF8\uFBF9\uFBFA"+
-        "\uFBFB\uFBFC\uFBFD\uFBFE\uFCA1\uFCA2\uFCA3\uFCA4"+
-        "\uFCA5\uFCA6\uFCA7\uFCA8\uFCA9\uFCAA\uFCAB\uFCAC"+
-        "\uFCAD\uFCAE\uFCAF\uFCB0\uFCB1\uFCB2\uFCB3\uFCB4"+
-        "\uFCB5\uFCB6\uFCB7\uFCB8\uFCB9\uFCBA\uFCBB\uFCBC"+
-        "\uFCBD\uFCBE\uFCBF\uFCC0\uFCC1\uFCC2\uFCC3\uFCC4"+
-        "\uFCC5\uFCC6\uFCC7\uFCC8\uFCC9\uFCCA\uFCCB\uFCCC"+
-        "\uFCCD\uFCCE\uFCCF\uFCD0\uFCD1\uFCD2\uFCD3\uFCD4"+
-        "\uFCD5\uFCD6\uFCD7\uFCD8\uFCD9\uFCDA\uFCDB\uFCDC"+
-        "\uFCDD\uFCDE\uFCDF\uFCE0\uFCE1\uFCE2\uFCE3\uFCE4"+
-        "\uFCE5\uFCE6\uFCE7\uFCE8\uFCE9\uFCEA\uFCEB\uFCEC"+
-        "\uFCED\uFCEE\uFCEF\uFCF0\uFCF1\uFCF2\uFCF3\uFCF4"+
-        "\uFCF5\uFCF6\uFCF7\uFCF8\uFCF9\uFCFA\uFCFB\uFCFC"+
-        "\uFCFD\uFCFE\uFDA1\uFDA2\uFDA3\uFDA4\uFDA5\uFDA6"+
-        "\uFDA7\uFDA8\uFDA9\uFDAA\uFDAB\uFDAC\uFDAD\uFDAE"+
-        "\uFDAF\uFDB0\uFDB1\uFDB2\uFDB3\uFDB4\uFDB5\uFDB6"+
-        "\uFDB7\uFDB8\uFDB9\uFDBA\uFDBB\uFDBC\uFDBD\uFDBE"+
-        "\uFDBF\uFDC0\uFDC1\uFDC2\uFDC3\uFDC4\uFDC5\uFDC6"+
-        "\uFDC7\uFDC8\uFDC9\uFDCA\uFDCB\uFDCC\uFDCD\uFDCE"+
-        "\uFDCF\uFDD0\uFDD1\uFDD2\uFDD3\uFDD4\uFDD5\uFDD6"+
-        "\uFDD7\uFDD8\uFDD9\uFDDA\uFDDB\uFDDC\uFDDD\uFDDE"+
-        "\uFDDF\uFDE0\uFDE1\uFDE2\uFDE3\uFDE4\uFDE5\uFDE6"+
-        "\uFDE7\uFDE8\uFDE9\uFDEA\uFDEB\uFDEC\uFDED\uFDEE"+
-        "\uFDEF\uFDF0\uFDF1\uFDF2\uFDF3\uFDF4\uFDF5\uFDF6"+
-        "\uFDF7\uFDF8\uFDF9\uFDFA\uFDFB\uFDFC\uFDFD\uFDFE"+
-        "\uFEA1\uFEA2\uFEA3\uFEA4\uFEA5\uFEA6\uFEA7\uFEA8"+
-        "\uFEA9\uFEAA\uFEAB\uFEAC\uFEAD\uFEAE\uFEAF\uFEB0"+
-        "\uFEB1\uFEB2\uFEB3\uFEB4\uFEB5\uFEB6\uFEB7\uFEB8"+
-        "\uFEB9\uFEBA\uFEBB\uFEBC\uFEBD\uFEBE\uFEBF\uFEC0"+
-        "\uFEC1\uFEC2\uFEC3\uFEC4\uFEC5\uFEC6\uFEC7\uFEC8"+
-        "\uFEC9\uFECA\uFECB\uFECC\uFECD\uFECE\uFECF\uFED0"+
-        "\uFED1\uFED2\uFED3\uFED4\uFED5\uFED6\uFED7\uFED8"+
-        "\uFED9\uFEDA\uFEDB\uFEDC\uFEDD\uFEDE\uFEDF\uFEE0"+
-        "\uFEE1\uFEE2\uFEE3\uFEE4\uFEE5\uFEE6\uFEE7\uFEE8"+
-        "\uFEE9\uFEEA\uFEEB\uFEEC\uFEED\uFEEE\uFEEF\uFEF0"+
-        "\uFEF1\uFEF2\uFEF3\uFEF4\uFEF5\uFEF6\uFEF7\uFEF8"+
-        "\uFEF9\uFEFA\uFEFB\uFEFC\uFEFD\uFEFE\uA140\uA141"+
-        "\uA142\uA143\uA144\uA145\uA146\uA147\uA148\uA149"+
-        "\uA14A\uA14B\uA14C\uA14D\uA14E\uA14F\uA150\uA151"+
-        "\uA152\uA153\uA154\uA155\uA156\uA157\uA158\uA159"+
-        "\uA15A\uA15B\uA15C\uA15D\uA15E\uA15F\uA160\uA161"+
-        "\uA162\uA163\uA164\uA165\uA166\uA167\uA168\uA169"+
-        "\uA16A\uA16B\uA16C\uA16D\uA16E\uA16F\uA170\uA171"+
-        "\uA172\uA173\uA174\uA175\uA176\uA177\uA178\uA179"+
-        "\uA17A\uA17B\uA17C\uA17D\uA17E\uA180\uA181\uA182"+
-        "\uA183\uA184\uA185\uA186\uA187\uA188\uA189\uA18A"+
-        "\uA18B\uA18C\uA18D\uA18E\uA18F\uA190\uA191\uA192"+
-        "\uA193\uA194\uA195\uA196\uA197\uA198\uA199\uA19A"+
-        "\uA19B\uA19C\uA19D\uA19E\uA19F\uA1A0\uA240\uA241"+
-        "\uA242\uA243\uA244\uA245\uA246\uA247\uA248\uA249"+
-        "\uA24A\uA24B\uA24C\uA24D\uA24E\uA24F\uA250\uA251"+
-        "\uA252\uA253\uA254\uA255\uA256\uA257\uA258\uA259"+
-        "\uA25A\uA25B\uA25C\uA25D\uA25E\uA25F\uA260\uA261"+
-        "\uA262\uA263\uA264\uA265\uA266\uA267\uA268\uA269"+
-        "\uA26A\uA26B\uA26C\uA26D\uA26E\uA26F\uA270\uA271"+
-        "\uA272\uA273\uA274\uA275\uA276\uA277\uA278\uA279"+
-        "\uA27A\uA27B\uA27C\uA27D\uA27E\uA280\uA281\uA282"+
-        "\uA283\uA284\uA285\uA286\uA287\uA288\uA289\uA28A"+
-        "\uA28B\uA28C\uA28D\uA28E\uA28F\uA290\uA291\uA292"+
-        "\uA293\uA294\uA295\uA296\uA297\uA298\uA299\uA29A"+
-        "\uA29B\uA29C\uA29D\uA29E\uA29F\uA2A0\uA340\uA341"+
-        "\uA342\uA343\uA344\uA345\uA346\uA347\uA348\uA349"+
-        "\uA34A\uA34B\uA34C\uA34D\uA34E\uA34F\uA350\uA351"+
-        "\uA352\uA353\uA354\uA355\uA356\uA357\uA358\uA359"+
-        "\uA35A\uA35B\uA35C\uA35D\uA35E\uA35F\uA360\uA361"+
-        "\uA362\uA363\uA364\uA365\uA366\uA367\uA368\uA369"+
-        "\uA36A\uA36B\uA36C\uA36D\uA36E\uA36F\uA370\uA371"+
-        "\uA372\uA373\uA374\uA375\uA376\uA377\uA378\uA379"+
-        "\uA37A\uA37B\uA37C\uA37D\uA37E\uA380\uA381\uA382"+
-        "\uA383\uA384\uA385\uA386\uA387\uA388\uA389\uA38A"+
-        "\uA38B\uA38C\uA38D\uA38E\uA38F\uA390\uA391\uA392"+
-        "\uA393\uA394\uA395\uA396\uA397\uA398\uA399\uA39A"+
-        "\uA39B\uA39C\uA39D\uA39E\uA39F\uA3A0\uA440\uA441"+
-        "\uA442\uA443\uA444\uA445\uA446\uA447\uA448\uA449"+
-        "\uA44A\uA44B\uA44C\uA44D\uA44E\uA44F\uA450\uA451"+
-        "\uA452\uA453\uA454\uA455\uA456\uA457\uA458\uA459"+
-        "\uA45A\uA45B\uA45C\uA45D\uA45E\uA45F\uA460\uA461"+
-        "\uA462\uA463\uA464\uA465\uA466\uA467\uA468\uA469"+
-        "\uA46A\uA46B\uA46C\uA46D\uA46E\uA46F\uA470\uA471"+
-        "\uA472\uA473\uA474\uA475\uA476\uA477\uA478\uA479"+
-        "\uA47A\uA47B\uA47C\uA47D\uA47E\uA480\uA481\uA482"+
-        "\uA483\uA484\uA485\uA486\uA487\uA488\uA489\uA48A"+
-        "\uA48B\uA48C\uA48D\uA48E\uA48F\uA490\uA491\uA492"+
-        "\uA493\uA494\uA495\uA496\uA497\uA498\uA499\uA49A"+
-        "\uA49B\uA49C\uA49D\uA49E\uA49F\uA4A0\uA540\uA541"+
-        "\uA542\uA543\uA544\uA545\uA546\uA547\uA548\uA549"+
-        "\uA54A\uA54B\uA54C\uA54D\uA54E\uA54F\uA550\uA551"+
-        "\uA552\uA553\uA554\uA555\uA556\uA557\uA558\uA559"+
-        "\uA55A\uA55B\uA55C\uA55D\uA55E\uA55F\uA560\uA561"+
-        "\uA562\uA563\uA564\uA565\uA566\uA567\uA568\uA569"+
-        "\uA56A\uA56B\uA56C\uA56D\uA56E\uA56F\uA570\uA571"+
-        "\uA572\uA573\uA574\uA575\uA576\uA577\uA578\uA579"+
-        "\uA57A\uA57B\uA57C\uA57D\uA57E\uA580\uA581\uA582"+
-        "\uA583\uA584\uA585\uA586\uA587\uA588\uA589\uA58A"+
-        "\uA58B\uA58C\uA58D\uA58E\uA58F\uA590\uA591\uA592"+
-        "\uA593\uA594\uA595\uA596\uA597\uA598\uA599\uA59A"+
-        "\uA59B\uA59C\uA59D\uA59E\uA59F\uA5A0\uA640\uA641"+
-        "\uA642\uA643\uA644\uA645\uA646\uA647\uA648\uA649"+
-        "\uA64A\uA64B\uA64C\uA64D\uA64E\uA64F\uA650\uA651"+
-        "\uA652\uA653\uA654\uA655\uA656\uA657\uA658\uA659"+
-        "\uA65A\uA65B\uA65C\uA65D\uA65E\uA65F\uA660\uA661"+
-        "\uA662\uA663\uA664\uA665\uA666\uA667\uA668\uA669"+
-        "\uA66A\uA66B\uA66C\uA66D\uA66E\uA66F\uA670\uA671"+
-        "\uA672\uA673\uA674\uA675\uA676\uA677\uA678\uA679"+
-        "\uA67A\uA67B\uA67C\uA67D\uA67E\uA680\uA681\uA682"+
-        "\uA683\uA684\uA685\uA686\uA687\uA688\uA689\uA68A"+
-        "\uA68B\uA68C\uA68D\uA68E\uA68F\uA690\uA691\uA692"+
-        "\uA693\uA694\uA695\uA696\uA697\uA698\uA699\uA69A"+
-        "\uA69B\uA69C\uA69D\uA69E\uA69F\uA6A0\uA740\uA741"+
-        "\uA742\uA743\uA744\uA745\uA746\uA747\uA748\uA749"+
-        "\uA74A\uA74B\uA74C\uA74D\uA74E\uA74F\uA750\uA751"+
-        "\uA752\uA753\uA754\uA755\uA756\uA757\uA758\uA759"+
-        "\uA75A\uA75B\uA75C\uA75D\uA75E\uA75F\uA760\uA761"+
-        "\uA762\uA763\uA764\uA765\uA766\uA767\uA768\uA769"+
-        "\uA76A\uA76B\uA76C\uA76D\uA76E\uA76F\uA770\uA771"+
-        "\uA772\uA773\uA774\uA775\uA776\uA777\uA778\uA779"+
-        "\uA77A\uA77B\uA77C\uA77D\uA77E\uA780\uA781\uA782"+
-        "\uA783\uA784\uA785\uA786\uA787\uA788\uA789\uA78A"+
-        "\uA78B\uA78C\uA78D\uA78E\uA78F\uA790\uA791\uA792"+
-        "\uA793\uA794\uA795\uA796\uA797\uA798\uA799\uA79A"+
-        "\uA79B\uA79C\uA79D\uA79E\uA79F\uA7A0\uA2AB\uA2AC"+
-        "\uA2AD\uA2AE\uA2AF\uA2B0\u2000\uA2E4\uA2EF\uA2F0"+
-        "\uA2FD\uA2FE\uA4F4\uA4F5\uA4F6\uA4F7\uA4F8\uA4F9"+
-        "\uA4FA\uA4FB\uA4FC\uA4FD\uA4FE\uA5F7\uA5F8\uA5F9"+
-        "\uA5FA\uA5FB\uA5FC\uA5FD\uA5FE\uA6B9\uA6BA\uA6BB"+
-        "\uA6BC\uA6BD\uA6BE\uA6BF\uA6C0\uA6D9\uA6DA\uA6DB"+
-        "\uA6DC\uA6DD\uA6DE\uA6DF\uA6EC\uA6ED\uA6F3\uA6F6"+
-        "\uA6F7\uA6F8\uA6F9\uA6FA\uA6FB\uA6FC\uA6FD\uA6FE"+
-        "\uA7C2\uA7C3\uA7C4\uA7C5\uA7C6\uA7C7\uA7C8\uA7C9"+
-        "\uA7CA\uA7CB\uA7CC\uA7CD\uA7CE\uA7CF\uA7D0\uA7F2"+
-        "\uA7F3\uA7F4\uA7F5\uA7F6\uA7F7\uA7F8\uA7F9\uA7FA"+
-        "\uA7FB\uA7FC\uA7FD\uA7FE\uA896\uA897\uA898\uA899"+
-        "\uA89A\uA89B\uA89C\uA89D\uA89E\uA89F\uA8A0\uA8BC"+
-        "\u2001\uA8C1\uA8C2\uA8C3\uA8C4\uA8EA\uA8EB\uA8EC"+
-        "\uA8ED\uA8EE\uA8EF\uA8F0\uA8F1\uA8F2\uA8F3\uA8F4"+
-        "\uA8F5\uA8F6\uA8F7\uA8F8\uA8F9\uA8FA\uA8FB\uA8FC"+
-        "\uA8FD\uA8FE\uA958\uA95B\uA95D\uA95E\uA95F\u2002"+
-        "\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A"+
-        "\u200B\u200C\u200D\u200E\uA997\uA998\uA999\uA99A"+
-        "\uA99B\uA99C\uA99D\uA99E\uA99F\uA9A0\uA9A1\uA9A2"+
-        "\uA9A3\uA9F0\uA9F1\uA9F2\uA9F3\uA9F4\uA9F5\uA9F6"+
-        "\uA9F7\uA9F8\uA9F9\uA9FA\uA9FB\uA9FC\uA9FD\uA9FE"+
-        "\uD7FA\uD7FB\uD7FC\uD7FD\uD7FE\u200F\uFE51\uFE52"+
-        "\uFE53\u2010\u2011\u2012\u2013\u2014\uFE59\u2015"+
-        "\u2016\u2017\u2018\u2019\u201A\u201B\uFE61\u201C"+
-        "\u201D\u201E\u201F\uFE66\uFE67\u2020\u2021\u2022"+
-        "\u2023\uFE6C\uFE6D\u2024\u2025\u2026\u2027\u2028"+
-        "\u2029\u202A\u202B\uFE76\u202C\u202D\u202E\u202F"+
-        "\u2030\u2031\u2032\uFE7E\u2033\u2034\u2035\u2036"+
-        "\u2037\u2038\u2039\u203A\u203B\u203C\u203D\u203E"+
-        "\u203F\u2040\u2041\u2042\uFE90\uFE91\u2043\u2044"+
-        "\u2045\u2046\u2047\u2048\u2049\u204A\u204B\u204C"+
-        "\u204D\u204E\u204F\u2050\uFEA0\u2051\u2052\u2053"+
-        "\u2054\u2055\u2056\u2057\u2058\u2059\u205A\u205B"+
-        "\u205C\u205D\u205E\u205F\u2060\u2061\u2062\u2063"+
-        "\u2064\u2065\u2066\u2067\u2068\u2069\u206A\u206B"+
-        "\u206C\u206D\u206E\u206F\u2070\u2071\u2072\u2073"+
-        "\u2074\u2075\u2076\u2077\u2078\u2079\u207A\u207B"+
-        "\u207C\u207D\u207E\u207F\u2080\u2081\u2082\u2083"+
-        "\u2084\u2085\u2086\u2087\u2088\u2089\u208A\u208B"+
-        "\u208C\u208D\u208E\u208F\u2090\u2091\u2092\u2093"+
-        "\u2094\u2095\u2096\u2097\u2098\u2099\u209A\u209B"+
-        "\u209C\u209D\u209E\u209F\u20A0\u20A1\u20A2\u20A3"+
-        "\u20A4\u20A5\u20A6\u20A7\u20A8\u20A9\u20AA\u20AB"+
-        "\u20AC\u20AD\u20AE\u20AF\u20B0\u20B1\u20B2\u20B3"+
-        "\u20B4\u20B5\u20B6\u20B7\u20B8\u20B9\u20BA\u20BB"+
-        "\u20BC\u20BD\u20BE\u20BF\u20C0\u20C1\u20C2\u20C3"+
-        "\u20C4\u20C5\u20C6\u20C7\u20C8\u20C9\u20CA\u20CB"+
-        "\u20CC\u20CD\u20CE\u20CF\u20D0\u20D1\u20D2\u20D3"+
-        "\u20D4\u20D5\u20D6\u20D7\u20D8\u20D9\u20DA\u20DB"+
-        "\u20DC\u20DD\u20DE\u20DF\u20E0\u20E1\u20E2\u20E3"+
-        "\u20E4\u20E5\u20E6\u20E7\u20E8\u20E9\u20EA\u20EB"+
-        "\u20EC\u20ED\u20EE\u20EF\u20F0\u20F1\u20F2\u20F3"+
-        "\u20F4\u20F5\u20F6\u20F7\u20F8\u20F9\u20FA\u20FB"+
-        "\u20FC\u20FD\u20FE\u20FF\u2100\u2101\u2102\u2103"+
-        "\u2104\u2105\u2106\u2107\u2108\u2109\u210A\u210B"+
-        "\u210C\u210D\u210E\u210F\u2110\u2111\u2112\u2113"+
-        "\u2114\u2115\u2116\u2117\u2118\u2119\u211A\u211B"+
-        "\u211C\u211D\u211E\u211F\u2120\u2121\u2122\u2123"+
-        "\u2124\u2125\u2126\u2127\u2128\u2129\u212A\u212B"+
-        "\u212C\u212D\u212E\u212F\u2130\u2131\u2132\u2133"+
-        "\u2134\u2135\u2136\u2137\u2138\u2139\u213A\u213B"+
-        "\u213C\u213D\u213E\u213F\u2140\u2141\u2142\u2143"+
-        "\u2144\u2145\u2146\u2147\u2148\u2149\u214A\u214B"+
-        "\u214C\u214D\u214E\u214F\u2150\u2151\u2152\u2153"+
-        "\u2154\u2155\u2156\u2157\u2158\u2159\u215A\u215B"+
-        "\u215C\u215D\u215E\u215F\u2160\u2161\u2162\u2163"+
-        "\u2164\u2165\u2166\u2167\u2168\u2169\u216A\u216B"+
-        "\u216C\u216D\u216E\u216F\u2170\u2171\u2172\u2173"+
-        "\u2174\u2175\u2176\u2177\u2178\u2179\u217A\u217B"+
-        "\u217C\u217D\u217E\u217F\u2180\u2181\u2182\u2183"+
-        "\u2184\u2185\u2186\u2187\u2188\u2189\u218A\u218B"+
-        "\u218C\u218D\u218E\u218F\u2190\u2191\u2192\u2193"+
-        "\u2194\u2195\u2196\u2197\u2198\u2199\u219A\u219B"+
-        "\u219C\u219D\u219E\u219F\u21A0\u21A1\u21A2\u21A3"+
-        "\u21A4\u21A5\u21A6\u21A7\u21A8\u21A9\u21AA\u21AB"+
-        "\u21AC\u21AD\u21AE\u21AF\u21B0\u21B1\u21B2\u21B3"+
-        "\u21B4\u21B5\u21B6\u21B7\u21B8\u21B9\u21BA\u21BB"+
-        "\u21BC\u21BD\u21BE\u21BF\u21C0\u21C1\u21C2\u21C3"+
-        "\u21C4\u21C5\u21C6\u21C7\u21C8\u21C9\u21CA\u21CB"+
-        "\u21CC\u21CD\u21CE\u21CF\u21D0\u21D1\u21D2\u21D3"+
-        "\u21D4\u21D5\u21D6\u21D7\u21D8\u21D9\u21DA\u21DB"+
-        "\u21DC\u21DD\u21DE\u21DF\u21E0\u21E1\u21E2\u21E3"+
-        "\u21E4\u21E5\u21E6\u21E7\u21E8\u21E9\u21EA\u21EB"+
-        "\u21EC\u21ED\u21EE\u21EF\u21F0\u21F1\u21F2\u21F3"+
-        "\u21F4\u21F5\u21F6\u21F7\u21F8\u21F9\u21FA\u21FB"+
-        "\u21FC\u21FD\u21FE\u21FF\u2200\u2201\u2202\u2203"+
-        "\u2204\u2205\u2206\u2207\u2208\u2209\u220A\u220B"+
-        "\u220C\u220D\u220E\u220F\u2210\u2211\u2212\u2213"+
-        "\u2214\u2215\u2216\u2217\u2218\u2219\u221A\u221B"+
-        "\u221C\u221D\u221E\u221F\u2220\u2221\u2222\u2223"+
-        "\u2224\u2225\u2226\u2227\u2228\u2229\u222A\u222B"+
-        "\u222C\u222D\u222E\u222F\u2230\u2231\u2232\u2233"+
-        "\u2234\u2235\u2236\u2237\u2238\u2239\u223A\u223B"+
-        "\u223C\u223D\u223E\u223F\u2240\u2241\u2242\u2243"+
-        "\u2244\u2245\u2246\u2247\u2248\u2249\u224A\u224B"+
-        "\u224C\u224D\u224E\u224F\u2250\u2251\u2252\u2253"+
-        "\u2254\u2255\u2256\u2257\u2258\u2259\u225A\u225B"+
-        "\u225C\u225D\u225E\u225F\u2260\u2261\u2262\u2263"+
-        "\u2264\u2265\u2266\u2267\u2268\u2269\u226A\u226B"+
-        "\u226C\u226D\u226E\u226F\u2270\u2271\u2272\u2273"+
-        "\u2274\u2275\u2276\u2277\u2278\u2279\u227A\u227B"+
-        "\u227C\u227D\u227E\u227F\u2280\u2281\u2282\u2283"+
-        "\u2284\u2285\u2286\u2287\u2288\u2289\u228A\u228B"+
-        "\u228C\u228D\u228E\u228F\u2290\u2291\u2292\u2293"+
-        "\u2294\u2295\u2296\u2297\u2298\u2299\u229A\u229B"+
-        "\u229C\u229D\u229E\u229F\u22A0\u22A1\u22A2\u22A3"+
-        "\u22A4\u22A5\u22A6\u22A7\u22A8\u22A9\u22AA\u22AB"+
-        "\u22AC\u22AD\u22AE\u22AF\u22B0\u22B1\u22B2\u22B3"+
-        "\u22B4\u22B5\u22B6\u22B7\u22B8\u22B9\u22BA\u22BB"+
-        "\u22BC\u22BD\u22BE\u22BF\u22C0\u22C1\u22C2\u22C3"+
-        "\u22C4\u22C5\u22C6\u22C7\u22C8\u22C9\u22CA\u22CB"+
-        "\u22CC\u22CD\u22CE\u22CF\u22D0\u22D1\u22D2\u22D3"+
-        "\u22D4\u22D5\u22D6\u22D7\u22D8\u22D9\u22DA\u22DB"+
-        "\u22DC\u22DD\u22DE\u22DF\u22E0\u22E1\u22E2\u22E3"+
-        "\u22E4\u22E5\u22E6\u22E7\u22E8\u22E9\u22EA\u22EB";
-
-    private final static String innerEncoderIndex11=
-        "\u22EC\u22ED\u22EE\u22EF\u22F0\u22F1\u22F2\u22F3"+
-        "\u22F4\u22F5\u22F6\u22F7\u22F8\u22F9\u22FA\u22FB"+
-        "\u22FC\u22FD\u22FE\u22FF\u2300\u2301\u2302\u2303"+
-        "\u2304\u2305\u2306\u2307\u2308\u2309\u230A\u230B"+
-        "\u230C\u230D\u230E\u230F\u2310\u2311\u2312\u2313"+
-        "\u2314\u2315\u2316\u2317\u2318\u2319\u231A\u231B"+
-        "\u231C\u231D\u231E\u231F\u2320\u2321\u2322\u2323"+
-        "\u2324\u2325\u2326\u2327\u2328\u2329\u232A\u232B"+
-        "\u232C\u232D\u232E\u232F\u2330\u2331\u2332\u2333"+
-        "\u2334\u2335\u2336\u2337\u2338\u2339\u233A\u233B"+
-        "\u233C\u233D\u233E\u233F\u2340\u2341\u2342\u2343"+
-        "\u2344\u2345\u2346\u2347\u2348\u2349\u234A\u234B"+
-        "\u234C\u234D\u234E\u234F\u2350\u2351\u2352\u2353"+
-        "\u2354\u2355\u2356\u2357\u2358\u2359\u235A\u235B"+
-        "\u235C\u235D\u235E\u235F\u2360\u2361\u2362\u2363"+
-        "\u2364\u2365\u2366\u2367\u2368\u2369\u236A\u236B"+
-        "\u236C\u236D\u236E\u236F\u2370\u2371\u2372\u2373"+
-        "\u2374\u2375\u2376\u2377\u2378\u2379\u237A\u237B"+
-        "\u237C\u237D\u237E\u237F\u2380\u2381\u2382\u2383"+
-        "\u2384\u2385\u2386\u2387\u2388\u2389\u238A\u238B"+
-        "\u238C\u238D\u238E\u238F\u2390\u2391\u2392\u2393"+
-        "\u2394\u2395\u2396\u2397\u2398\u2399\u239A\u239B"+
-        "\u239C\u239D\u239E\u239F\u23A0\u23A1\u23A2\u23A3"+
-        "\u23A4\u23A5\u23A6\u23A7\u23A8\u23A9\u23AA\u23AB"+
-        "\u23AC\u23AD\u23AE\u23AF\u23B0\u23B1\u23B2\u23B3"+
-        "\u23B4\u23B5\u23B6\u23B7\u23B8\u23B9\u23BA\u23BB"+
-        "\u23BC\u23BD\u23BE\u23BF\u23C0\u23C1\u23C2\u23C3"+
-        "\u23C4\u23C5\u23C6\u23C7\u23C8\u23C9\u23CA\u23CB"+
-        "\u23CC\u23CD\u23CE\u23CF\u23D0\u23D1\u23D2\u23D3"+
-        "\u23D4\u23D5\u23D6\u23D7\u23D8\u23D9\u23DA\u23DB"+
-        "\u23DC\u23DD\u23DE\u23DF\u23E0\u23E1\u23E2\u23E3"+
-        "\u23E4\u23E5\u23E6\u23E7\u23E8\u23E9\u23EA\u23EB"+
-        "\u23EC\u23ED\u23EE\u23EF\u23F0\u23F1\u23F2\u23F3"+
-        "\u23F4\u23F5\u23F6\u23F7\u23F8\u23F9\u23FA\u23FB"+
-        "\u23FC\u23FD\u23FE\u23FF\u2400\u2401\u2402\u2403"+
-        "\u2404\u2405\u2406\u2407\u2408\u2409\u240A\u240B"+
-        "\u240C\u240D\u240E\u240F\u2410\u2411\u2412\u2413"+
-        "\u2414\u2415\u2416\u2417\u2418\u2419\u241A\u241B"+
-        "\u241C\u241D\u241E\u241F\u2420\u2421\u2422\u2423"+
-        "\u2424\u2425\u2426\u2427\u2428\u2429\u242A\u242B"+
-        "\u242C\u242D\u242E\u242F\u2430\u2431\u2432\u2433"+
-        "\u2434\u2435\u2436\u2437\u2438\u2439\u243A\u243B"+
-        "\u243C\u243D\u243E\u243F\u2440\u2441\u2442\u2443"+
-        "\u2444\u2445\u2446\u2447\u2448\u2449\u244A\u244B"+
-        "\u244C\u244D\u244E\u244F\u2450\u2451\u2452\u2453"+
-        "\u2454\u2455\u2456\u2457\u2458\u2459\u245A\u245B"+
-        "\u245C\u245D\u245E\u245F\u2460\u2461\u2462\u2463"+
-        "\u2464\u2465\u2466\u2467\u2468\u2469\u246A\u246B"+
-        "\u246C\u246D\u246E\u246F\u2470\u2471\u2472\u2473"+
-        "\u2474\u2475\u2476\u2477\u2478\u2479\u247A\u247B"+
-        "\u247C\u247D\u247E\u247F\u2480\u2481\u2482\u2483"+
-        "\u2484\u2485\u2486\u2487\u2488\u2489\u248A\u248B"+
-        "\u248C\u248D\u248E\u248F\u2490\u2491\u2492\u2493"+
-        "\u2494\u2495\u2496\u2497\u2498\u2499\u249A\u249B"+
-        "\u249C\u249D\u249E\u249F\u24A0\u24A1\u24A2\u24A3"+
-        "\u24A4\u24A5\u24A6\u24A7\u24A8\u24A9\u24AA\u24AB"+
-        "\u24AC\u24AD\u24AE\u24AF\u24B0\u24B1\u24B2\u24B3"+
-        "\u24B4\u24B5\u24B6\u24B7\u24B8\u24B9\u24BA\u24BB"+
-        "\u24BC\u24BD\u24BE\u24BF\u24C0\u24C1\u24C2\u24C3"+
-        "\u24C4\u24C5\u24C6\u24C7\u24C8\u24C9\u24CA\u24CB"+
-        "\u24CC\u24CD\u24CE\u24CF\u24D0\u24D1\u24D2\u24D3"+
-        "\u24D4\u24D5\u24D6\u24D7\u24D8\u24D9\u24DA\u24DB"+
-        "\u24DC\u24DD\u24DE\u24DF\u24E0\u24E1\u24E2\u24E3"+
-        "\u24E4\u24E5\u24E6\u24E7\u24E8\u24E9\u24EA\u24EB"+
-        "\u24EC\u24ED\u24EE\u24EF\u24F0\u24F1\u24F2\u24F3"+
-        "\u24F4\u24F5\u24F6\u24F7\u24F8\u24F9\u24FA\u24FB"+
-        "\u24FC\u24FD\u24FE\u24FF\u2500\u2501\u2502\u2503"+
-        "\u2504\u2505\u2506\u2507\u2508\u2509\u250A\u250B"+
-        "\u250C\u250D\u250E\u250F\u2510\u2511\u2512\u2513"+
-        "\u2514\u2515\u2516\u2517\u2518\u2519\u251A\u251B"+
-        "\u251C\u251D\u251E\u251F\u2520\u2521\u2522\u2523"+
-        "\u2524\u2525\u2526\u2527\u2528\u2529\u252A\u252B"+
-        "\u252C\u252D\u252E\u252F\u2530\u2531\u2532\u2533"+
-        "\u2534\u2535\u2536\u2537\u2538\u2539\u253A\u253B"+
-        "\u253C\u253D\u253E\u253F\u2540\u2541\u2542\u2543"+
-        "\u2544\u2545\u2546\u2547\u2548\u2549\u254A\u254B"+
-        "\u254C\u254D\u254E\u254F\u2550\u2551\u2552\u2553"+
-        "\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B"+
-        "\u255C\u255D\u255E\u255F\u2560\u2561\u2562\u2563"+
-        "\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B"+
-        "\u256C\u256D\u256E\u256F\u2570\u2571\u2572\u2573"+
-        "\u2574\u2575\u2576\u2577\u2578\u2579\u257A\u257B"+
-        "\u257C\u257D\u257E\u257F\u2580\u2581\u2582\u2583"+
-        "\u2584\u2585\u2586\u2587\u2588\u2589\u258A\u258B"+
-        "\u258C\u258D\u258E\u258F\u2590\u2591\u2592\u2593"+
-        "\u2594\u2595\u2596\u2597\u2598\u2599\u259A\u259B"+
-        "\u259C\u259D\u259E\u259F\u25A0\u25A1\u25A2\u25A3"+
-        "\u25A4\u25A5\u25A6\u25A7\u25A8\u25A9\u25AA\u25AB"+
-        "\u25AC\u25AD\u25AE\u25AF\u25B0\u25B1\u25B2\u25B3"+
-        "\u25B4\u25B5\u25B6\u25B7\u25B8\u25B9\u25BA\u25BB"+
-        "\u25BC\u25BD\u25BE\u25BF\u25C0\u25C1\u25C2\u25C3"+
-        "\u25C4\u25C5\u25C6\u25C7\u25C8\u25C9\u25CA\u25CB"+
-        "\u25CC\u25CD\u25CE\u25CF\u25D0\u25D1\u25D2\u25D3"+
-        "\u25D4\u25D5\u25D6\u25D7\u25D8\u25D9\u25DA\u25DB"+
-        "\u25DC\u25DD\u25DE\u25DF\u25E0\u25E1\u25E2\u25E3"+
-        "\u25E4\u25E5\u25E6\u25E7\u25E8\u25E9\u25EA\u25EB"+
-        "\u25EC\u25ED\u25EE\u25EF\u25F0\u25F1\u25F2\u25F3"+
-        "\u25F4\u25F5\u25F6\u25F7\u25F8\u25F9\u25FA\u25FB"+
-        "\u25FC\u25FD\u25FE\u25FF\u2600\u2601\u2602\u2603"+
-        "\u2604\u2605\u2606\u2607\u2608\u2609\u260A\u260B"+
-        "\u260C\u260D\u260E\u260F\u2610\u2611\u2612\u2613"+
-        "\u2614\u2615\u2616\u2617\u2618\u2619\u261A\u261B"+
-        "\u261C\u261D\u261E\u261F\u2620\u2621\u2622\u2623"+
-        "\u2624\u2625\u2626\u2627\u2628\u2629\u262A\u262B"+
-        "\u262C\u262D\u262E\u262F\u2630\u2631\u2632\u2633"+
-        "\u2634\u2635\u2636\u2637\u2638\u2639\u263A\u263B"+
-        "\u263C\u263D\u263E\u263F\u2640\u2641\u2642\u2643"+
-        "\u2644\u2645\u2646\u2647\u2648\u2649\u264A\u264B"+
-        "\u264C\u264D\u264E\u264F\u2650\u2651\u2652\u2653"+
-        "\u2654\u2655\u2656\u2657\u2658\u2659\u265A\u265B"+
-        "\u265C\u265D\u265E\u265F\u2660\u2661\u2662\u2663"+
-        "\u2664\u2665\u2666\u2667\u2668\u2669\u266A\u266B"+
-        "\u266C\u266D\u266E\u266F\u2670\u2671\u2672\u2673"+
-        "\u2674\u2675\u2676\u2677\u2678\u2679\u267A\u267B"+
-        "\u267C\u267D\u267E\u267F\u2680\u2681\u2682\u2683"+
-        "\u2684\u2685\u2686\u2687\u2688\u2689\u268A\u268B"+
-        "\u268C\u268D\u268E\u268F\u2690\u2691\u2692\u2693"+
-        "\u2694\u2695\u2696\u2697\u2698\u2699\u269A\u269B"+
-        "\u269C\u269D\u269E\u269F\u26A0\u26A1\u26A2\u26A3"+
-        "\u26A4\u26A5\u26A6\u26A7\u26A8\u26A9\u26AA\u26AB"+
-        "\u26AC\u26AD\u26AE\u26AF\u26B0\u26B1\u26B2\u26B3"+
-        "\u26B4\u26B5\u26B6\u26B7\u26B8\u26B9\u26BA\u26BB"+
-        "\u26BC\u26BD\u26BE\u26BF\u26C0\u26C1\u26C2\u26C3"+
-        "\u26C4\u26C5\u26C6\u26C7\u26C8\u26C9\u26CA\u26CB"+
-        "\u26CC\u26CD\u26CE\u26CF\u26D0\u26D1\u26D2\u26D3"+
-        "\u26D4\u26D5\u26D6\u26D7\u26D8\u26D9\u26DA\u26DB"+
-        "\u26DC\u26DD\u26DE\u26DF\u26E0\u26E1\u26E2\u26E3"+
-        "\u26E4\u26E5\u26E6\u26E7\u26E8\u26E9\u26EA\u26EB"+
-        "\u26EC\u26ED\u26EE\u26EF\u26F0\u26F1\u26F2\u26F3"+
-        "\u26F4\u26F5\u26F6\u26F7\u26F8\u26F9\u26FA\u26FB"+
-        "\u26FC\u26FD\u26FE\u26FF\u2700\u2701\u2702\u2703"+
-        "\u2704\u2705\u2706\u2707\u2708\u2709\u270A\u270B"+
-        "\u270C\u270D\u270E\u270F\u2710\u2711\u2712\u2713"+
-        "\u2714\u2715\u2716\u2717\u2718\u2719\u271A\u271B"+
-        "\u271C\u271D\u271E\u271F\u2720\u2721\u2722\u2723"+
-        "\u2724\u2725\u2726\u2727\u2728\u2729\u272A\u272B"+
-        "\u272C\u272D\u272E\u272F\u2730\u2731\u2732\u2733"+
-        "\u2734\u2735\u2736\u2737\u2738\u2739\u273A\u273B"+
-        "\u273C\u273D\u273E\u273F\u2740\u2741\u2742\u2743"+
-        "\u2744\u2745\u2746\u2747\u2748\u2749\u274A\u274B"+
-        "\u274C\u274D\u274E\u274F\u2750\u2751\u2752\u2753"+
-        "\u2754\u2755\u2756\u2757\u2758\u2759\u275A\u275B"+
-        "\u275C\u275D\u275E\u275F\u2760\u2761\u2762\u2763"+
-        "\u2764\u2765\u2766\u2767\u2768\u2769\u276A\u276B"+
-        "\u276C\u276D\u276E\u276F\u2770\u2771\u2772\u2773"+
-        "\u2774\u2775\u2776\u2777\u2778\u2779\u277A\u277B"+
-        "\u277C\u277D\u277E\u277F\u2780\u2781\u2782\u2783"+
-        "\u2784\u2785\u2786\u2787\u2788\u2789\u278A\u278B"+
-        "\u278C\u278D\u278E\u278F\u2790\u2791\u2792\u2793"+
-        "\u2794\u2795\u2796\u2797\u2798\u2799\u279A\u279B"+
-        "\u279C\u279D\u279E\u279F\u27A0\u27A1\u27A2\u27A3"+
-        "\u27A4\u27A5\u27A6\u27A7\u27A8\u27A9\u27AA\u27AB"+
-        "\u27AC\u27AD\u27AE\u27AF\u27B0\u27B1\u27B2\u27B3"+
-        "\u27B4\u27B5\u27B6\u27B7\u27B8\u27B9\u27BA\u27BB"+
-        "\u27BC\u27BD\u27BE\u27BF\u27C0\u27C1\u27C2\u27C3"+
-        "\u27C4\u27C5\u27C6\u27C7\u27C8\u27C9\u27CA\u27CB"+
-        "\u27CC\u27CD\u27CE\u27CF\u27D0\u27D1\u27D2\u27D3"+
-        "\u27D4\u27D5\u27D6\u27D7\u27D8\u27D9\u27DA\u27DB"+
-        "\u27DC\u27DD\u27DE\u27DF\u27E0\u27E1\u27E2\u27E3"+
-        "\u27E4\u27E5\u27E6\u27E7\u27E8\u27E9\u27EA\u27EB"+
-        "\u27EC\u27ED\u27EE\u27EF\u27F0\u27F1\u27F2\u27F3"+
-        "\u27F4\u27F5\u27F6\u27F7\u27F8\u27F9\u27FA\u27FB"+
-        "\u27FC\u27FD\u27FE\u27FF\u2800\u2801\u2802\u2803"+
-        "\u2804\u2805\u2806\u2807\u2808\u2809\u280A\u280B"+
-        "\u280C\u280D\u280E\u280F\u2810\u2811\u2812\u2813"+
-        "\u2814\u2815\u2816\u2817\u2818\u2819\u281A\u281B"+
-        "\u281C\u281D\u281E\u281F\u2820\u2821\u2822\u2823"+
-        "\u2824\u2825\u2826\u2827\u2828\u2829\u282A\u282B"+
-        "\u282C\u282D\u282E\u282F\u2830\u2831\u2832\u2833"+
-        "\u2834\u2835\u2836\u2837\u2838\u2839\u283A\u283B"+
-        "\u283C\u283D\u283E\u283F\u2840\u2841\u2842\u2843"+
-        "\u2844\u2845\u2846\u2847\u2848\u2849\u284A\u284B"+
-        "\u284C\u284D\u284E\u284F\u2850\u2851\u2852\u2853"+
-        "\u2854\u2855\u2856\u2857\u2858\u2859\u285A\u285B"+
-        "\u285C\u285D\u285E\u285F\u2860\u2861\u2862\u2863"+
-        "\u2864\u2865\u2866\u2867\u2868\u2869\u286A\u286B"+
-        "\u286C\u286D\u286E\u286F\u2870\u2871\u2872\u2873"+
-        "\u2874\u2875\u2876\u2877\u2878\u2879\u287A\u287B"+
-        "\u287C\u287D\u287E\u287F\u2880\u2881\u2882\u2883"+
-        "\u2884\u2885\u2886\u2887\u2888\u2889\u288A\u288B"+
-        "\u288C\u288D\u288E\u288F\u2890\u2891\u2892\u2893"+
-        "\u2894\u2895\u2896\u2897\u2898\u2899\u289A\u289B"+
-        "\u289C\u289D\u289E\u289F\u28A0\u28A1\u28A2\u28A3"+
-        "\u28A4\u28A5\u28A6\u28A7\u28A8\u28A9\u28AA\u28AB"+
-        "\u28AC\u28AD\u28AE\u28AF\u28B0\u28B1\u28B2\u28B3"+
-        "\u28B4\u28B5\u28B6\u28B7\u28B8\u28B9\u28BA\u28BB"+
-        "\u28BC\u28BD\u28BE\u28BF\u28C0\u28C1\u28C2\u28C3"+
-        "\u28C4\u28C5\u28C6\u28C7\u28C8\u28C9\u28CA\u28CB"+
-        "\u28CC\u28CD\u28CE\u28CF\u28D0\u28D1\u28D2\u28D3"+
-        "\u28D4\u28D5\u28D6\u28D7\u28D8\u28D9\u28DA\u28DB"+
-        "\u28DC\u28DD\u28DE\u28DF\u28E0\u28E1\u28E2\u28E3"+
-        "\u28E4\u28E5\u28E6\u28E7\u28E8\u28E9\u28EA\u28EB"+
-        "\u28EC\u28ED\u28EE\u28EF\u28F0\u28F1\u28F2\u28F3"+
-        "\u28F4\u28F5\u28F6\u28F7\u28F8\u28F9\u28FA\u28FB"+
-        "\u28FC\u28FD\u28FE\u28FF\u2900\u2901\u2902\u2903"+
-        "\u2904\u2905\u2906\u2907\u2908\u2909\u290A\u290B"+
-        "\u290C\u290D\u290E\u290F\u2910\u2911\u2912\u2913"+
-        "\u2914\u2915\u2916\u2917\u2918\u2919\u291A\u291B"+
-        "\u291C\u291D\u291E\u291F\u2920\u2921\u2922\u2923"+
-        "\u2924\u2925\u2926\u2927\u2928\u2929\u292A\u292B"+
-        "\u292C\u292D\u292E\u292F\u2930\u2931\u2932\u2933"+
-        "\u2934\u2935\u2936\u2937\u2938\u2939\u293A\u293B"+
-        "\u293C\u293D\u293E\u293F\u2940\u2941\u2942\u2943"+
-        "\u2944\u2945\u2946\u2947\u2948\u2949\u294A\u294B"+
-        "\u294C\u294D\u294E\u294F\u2950\u2951\u2952\u2953"+
-        "\u2954\u2955\u2956\u2957\u2958\u2959\u295A\u295B"+
-        "\u295C\u295D\u295E\u295F\u2960\u2961\u2962\u2963"+
-        "\u2964\u2965\u2966\u2967\u2968\u2969\u296A\u296B"+
-        "\u296C\u296D\u296E\u296F\u2970\u2971\u2972\u2973"+
-        "\u2974\u2975\u2976\u2977\u2978\u2979\u297A\u297B"+
-        "\u297C\u297D\u297E\u297F\u2980\u2981\u2982\u2983"+
-        "\u2984\u2985\u2986\u2987\u2988\u2989\u298A\u298B"+
-        "\u298C\u298D\u298E\u298F\u2990\u2991\u2992\u2993"+
-        "\u2994\u2995\u2996\u2997\u2998\u2999\u299A\u299B"+
-        "\u299C\u299D\u299E\u299F\u29A0\u29A1\u29A2\u29A3"+
-        "\u29A4\u29A5\u29A6\u29A7\u29A8\u29A9\u29AA\u29AB"+
-        "\u29AC\u29AD\u29AE\u29AF\u29B0\u29B1\u29B2\u29B3"+
-        "\u29B4\u29B5\u29B6\u29B7\u29B8\u29B9\u29BA\u29BB"+
-        "\u29BC\u29BD\u29BE\u29BF\u29C0\u29C1\u29C2\u29C3"+
-        "\u29C4\u29C5\u29C6\u29C7\u29C8\u29C9\u29CA\u29CB"+
-        "\u29CC\u29CD\u29CE\u29CF\u29D0\u29D1\u29D2\u29D3"+
-        "\u29D4\u29D5\u29D6\u29D7\u29D8\u29D9\u29DA\u29DB"+
-        "\u29DC\u29DD\u29DE\u29DF\u29E0\u29E1\u29E2\u29E3"+
-        "\u29E4\u29E5\u29E6\u29E7\u29E8\u29E9\u29EA\u29EB"+
-        "\u29EC\u29ED\u29EE\u29EF\u29F0\u29F1\u29F2\u29F3"+
-        "\u29F4\u29F5\u29F6\u29F7\u29F8\u29F9\u29FA\u29FB"+
-        "\u29FC\u29FD\u29FE\u29FF\u2A00\u2A01\u2A02\u2A03"+
-        "\u2A04\u2A05\u2A06\u2A07\u2A08\u2A09\u2A0A\u2A0B"+
-        "\u2A0C\u2A0D\u2A0E\u2A0F\u2A10\u2A11\u2A12\u2A13"+
-        "\u2A14\u2A15\u2A16\u2A17\u2A18\u2A19\u2A1A\u2A1B"+
-        "\u2A1C\u2A1D\u2A1E\u2A1F\u2A20\u2A21\u2A22\u2A23"+
-        "\u2A24\u2A25\u2A26\u2A27\u2A28\u2A29\u2A2A\u2A2B"+
-        "\u2A2C\u2A2D\u2A2E\u2A2F\u2A30\u2A31\u2A32\u2A33"+
-        "\u2A34\u2A35\u2A36\u2A37\u2A38\u2A39\u2A3A\u2A3B"+
-        "\u2A3C\u2A3D\u2A3E\u2A3F\u2A40\u2A41\u2A42\u2A43"+
-        "\u2A44\u2A45\u2A46\u2A47\u2A48\u2A49\u2A4A\u2A4B"+
-        "\u2A4C\u2A4D\u2A4E\u2A4F\u2A50\u2A51\u2A52\u2A53"+
-        "\u2A54\u2A55\u2A56\u2A57\u2A58\u2A59\u2A5A\u2A5B"+
-        "\u2A5C\u2A5D\u2A5E\u2A5F\u2A60\u2A61\u2A62\u2A63"+
-        "\u2A64\u2A65\u2A66\u2A67\u2A68\u2A69\u2A6A\u2A6B"+
-        "\u2A6C\u2A6D\u2A6E\u2A6F\u2A70\u2A71\u2A72\u2A73"+
-        "\u2A74\u2A75\u2A76\u2A77\u2A78\u2A79\u2A7A\u2A7B"+
-        "\u2A7C\u2A7D\u2A7E\u2A7F\u2A80\u2A81\u2A82\u2A83"+
-        "\u2A84\u2A85\u2A86\u2A87\u2A88\u2A89\u2A8A\u2A8B"+
-        "\u2A8C\u2A8D\u2A8E\u2A8F\u2A90\u2A91\u2A92\u2A93"+
-        "\u2A94\u2A95\u2A96\u2A97\u2A98\u2A99\u2A9A\u2A9B"+
-        "\u2A9C\u2A9D\u2A9E\u2A9F\u2AA0\u2AA1\u2AA2\u2AA3"+
-        "\u2AA4\u2AA5\u2AA6\u2AA7\u2AA8\u2AA9\u2AAA\u2AAB"+
-        "\u2AAC\u2AAD\u2AAE\u2AAF\u2AB0\u2AB1\u2AB2\u2AB3"+
-        "\u2AB4\u2AB5\u2AB6\u2AB7\u2AB8\u2AB9\u2ABA\u2ABB"+
-        "\u2ABC\u2ABD\u2ABE\u2ABF\u2AC0\u2AC1\u2AC2\u2AC3"+
-        "\u2AC4\u2AC5\u2AC6\u2AC7\u2AC8\u2AC9\u2ACA\u2ACB"+
-        "\u2ACC\u2ACD\u2ACE\u2ACF\u2AD0\u2AD1\u2AD2\u2AD3"+
-        "\u2AD4\u2AD5\u2AD6\u2AD7\u2AD8\u2AD9\u2ADA\u2ADB"+
-        "\u2ADC\u2ADD\u2ADE\u2ADF\u2AE0\u2AE1\u2AE2\u2AE3"+
-        "\u2AE4\u2AE5\u2AE6\u2AE7\u2AE8\u2AE9\u2AEA\u2AEB"+
-        "\u2AEC\u2AED\u2AEE\u2AEF\u2AF0\u2AF1\u2AF2\u2AF3"+
-        "\u2AF4\u2AF5\u2AF6\u2AF7\u2AF8\u2AF9\u2AFA\u2AFB"+
-        "\u2AFC\u2AFD\u2AFE\u2AFF\u2B00\u2B01\u2B02\u2B03"+
-        "\u2B04\u2B05\u2B06\u2B07\u2B08\u2B09\u2B0A\u2B0B"+
-        "\u2B0C\u2B0D\u2B0E\u2B0F\u2B10\u2B11\u2B12\u2B13"+
-        "\u2B14\u2B15\u2B16\u2B17\u2B18\u2B19\u2B1A\u2B1B"+
-        "\u2B1C\u2B1D\u2B1E\u2B1F\u2B20\u2B21\u2B22\u2B23"+
-        "\u2B24\u2B25\u2B26\u2B27\u2B28\u2B29\u2B2A\u2B2B"+
-        "\u2B2C\u2B2D\u2B2E\u2B2F\u2B30\u2B31\u2B32\u2B33"+
-        "\u2B34\u2B35\u2B36\u2B37\u2B38\u2B39\u2B3A\u2B3B"+
-        "\u2B3C\u2B3D\u2B3E\u2B3F\u2B40\u2B41\u2B42\u2B43"+
-        "\u2B44\u2B45\u2B46\u2B47\u2B48\u2B49\u2B4A\u2B4B"+
-        "\u2B4C\u2B4D\u2B4E\u2B4F\u2B50\u2B51\u2B52\u2B53"+
-        "\u2B54\u2B55\u2B56\u2B57\u2B58\u2B59\u2B5A\u2B5B"+
-        "\u2B5C\u2B5D\u2B5E\u2B5F\u2B60\u2B61\u2B62\u2B63"+
-        "\u2B64\u2B65\u2B66\u2B67\u2B68\u2B69\u2B6A\u2B6B"+
-        "\u2B6C\u2B6D\u2B6E\u2B6F\u2B70\u2B71\u2B72\u2B73"+
-        "\u2B74\u2B75\u2B76\u2B77\u2B78\u2B79\u2B7A\u2B7B"+
-        "\u2B7C\u2B7D\u2B7E\u2B7F\u2B80\u2B81\u2B82\u2B83"+
-        "\u2B84\u2B85\u2B86\u2B87\u2B88\u2B89\u2B8A\u2B8B"+
-        "\u2B8C\u2B8D\u2B8E\u2B8F\u2B90\u2B91\u2B92\u2B93"+
-        "\u2B94\u2B95\u2B96\u2B97\u2B98\u2B99\u2B9A\u2B9B"+
-        "\u2B9C\u2B9D\u2B9E\u2B9F\u2BA0\u2BA1\u2BA2\u2BA3"+
-        "\u2BA4\u2BA5\u2BA6\u2BA7\u2BA8\u2BA9\u2BAA\u2BAB"+
-        "\u2BAC\u2BAD\u2BAE\u2BAF\u2BB0\u2BB1\u2BB2\u2BB3"+
-        "\u2BB4\u2BB5\u2BB6\u2BB7\u2BB8\u2BB9\u2BBA\u2BBB"+
-        "\u2BBC\u2BBD\u2BBE\u2BBF\u2BC0\u2BC1\u2BC2\u2BC3"+
-        "\u2BC4\u2BC5\u2BC6\u2BC7\u2BC8\u2BC9\u2BCA\u2BCB"+
-        "\u2BCC\u2BCD\u2BCE\u2BCF\u2BD0\u2BD1\u2BD2\u2BD3"+
-        "\u2BD4\u2BD5\u2BD6\u2BD7\u2BD8\u2BD9\u2BDA\u2BDB"+
-        "\u2BDC\u2BDD\u2BDE\u2BDF\u2BE0\u2BE1\u2BE2\u2BE3"+
-        "\u2BE4\u2BE5\u2BE6\u2BE7\u2BE8\u2BE9\u2BEA\u2BEB"+
-        "\u2BEC\u2BED\u2BEE\u2BEF\u2BF0\u2BF1\u2BF2\u2BF3"+
-        "\u2BF4\u2BF5\u2BF6\u2BF7\u2BF8\u2BF9\u2BFA\u2BFB"+
-        "\u2BFC\u2BFD\u2BFE\u2BFF\u2C00\u2C01\u2C02\u2C03"+
-        "\u2C04\u2C05\u2C06\u2C07\u2C08\u2C09\u2C0A\u2C0B"+
-        "\u2C0C\u2C0D\u2C0E\u2C0F\u2C10\u2C11\u2C12\u2C13"+
-        "\u2C14\u2C15\u2C16\u2C17\u2C18\u2C19\u2C1A\u2C1B"+
-        "\u2C1C\u2C1D\u2C1E\u2C1F\u2C20\u2C21\u2C22\u2C23"+
-        "\u2C24\u2C25\u2C26\u2C27\u2C28\u2C29\u2C2A\u2C2B"+
-        "\u2C2C\u2C2D\u2C2E\u2C2F\u2C30\u2C31\u2C32\u2C33"+
-        "\u2C34\u2C35\u2C36\u2C37\u2C38\u2C39\u2C3A\u2C3B"+
-        "\u2C3C\u2C3D\u2C3E\u2C3F\u2C40\u2C41\u2C42\u2C43"+
-        "\u2C44\u2C45\u2C46\u2C47\u2C48\u2C49\u2C4A\u2C4B"+
-        "\u2C4C\u2C4D\u2C4E\u2C4F\u2C50\u2C51\u2C52\u2C53"+
-        "\u2C54\u2C55\u2C56\u2C57\u2C58\u2C59\u2C5A\u2C5B"+
-        "\u2C5C\u2C5D\u2C5E\u2C5F\u2C60\u2C61\u2C62\u2C63"+
-        "\u2C64\u2C65\u2C66\u2C67\u2C68\u2C69\u2C6A\u2C6B"+
-        "\u2C6C\u2C6D\u2C6E\u2C6F\u2C70\u2C71\u2C72\u2C73"+
-        "\u2C74\u2C75\u2C76\u2C77\u2C78\u2C79\u2C7A\u2C7B"+
-        "\u2C7C\u2C7D\u2C7E\u2C7F\u2C80\u2C81\u2C82\u2C83"+
-        "\u2C84\u2C85\u2C86\u2C87\u2C88\u2C89\u2C8A\u2C8B"+
-        "\u2C8C\u2C8D\u2C8E\u2C8F\u2C90\u2C91\u2C92\u2C93"+
-        "\u2C94\u2C95\u2C96\u2C97\u2C98\u2C99\u2C9A\u2C9B"+
-        "\u2C9C\u2C9D\u2C9E\u2C9F\u2CA0\u2CA1\u2CA2\u2CA3"+
-        "\u2CA4\u2CA5\u2CA6\u2CA7\u2CA8\u2CA9\u2CAA\u2CAB"+
-        "\u2CAC\u2CAD\u2CAE\u2CAF\u2CB0\u2CB1\u2CB2\u2CB3"+
-        "\u2CB4\u2CB5\u2CB6\u2CB7\u2CB8\u2CB9\u2CBA\u2CBB"+
-        "\u2CBC\u2CBD\u2CBE\u2CBF\u2CC0\u2CC1\u2CC2\u2CC3"+
-        "\u2CC4\u2CC5\u2CC6\u2CC7\u2CC8\u2CC9\u2CCA\u2CCB"+
-        "\u2CCC\u2CCD\u2CCE\u2CCF\u2CD0\u2CD1\u2CD2\u2CD3"+
-        "\u2CD4\u2CD5\u2CD6\u2CD7\u2CD8\u2CD9\u2CDA\u2CDB"+
-        "\u2CDC\u2CDD\u2CDE\u2CDF\u2CE0\u2CE1\u2CE2\u2CE3"+
-        "\u2CE4\u2CE5\u2CE6\u2CE7\u2CE8\u2CE9\u2CEA\u2CEB"+
-        "\u2CEC\u2CED\u2CEE\u2CEF\u2CF0\u2CF1\u2CF2\u2CF3"+
-        "\u2CF4\u2CF5\u2CF6\u2CF7\u2CF8\u2CF9\u2CFA\u2CFB"+
-        "\u2CFC\u2CFD\u2CFE\u2CFF\u2D00\u2D01\u2D02\u2D03"+
-        "\u2D04\u2D05\u2D06\u2D07\u2D08\u2D09\u2D0A\u2D0B"+
-        "\u2D0C\u2D0D\u2D0E\u2D0F\u2D10\u2D11\u2D12\u2D13"+
-        "\u2D14\u2D15\u2D16\u2D17\u2D18\u2D19\u2D1A\u2D1B"+
-        "\u2D1C\u2D1D\u2D1E\u2D1F\u2D20\u2D21\u2D22\u2D23"+
-        "\u2D24\u2D25\u2D26\u2D27\u2D28\u2D29\u2D2A\u2D2B"+
-        "\u2D2C\u2D2D\u2D2E\u2D2F\u2D30\u2D31\u2D32\u2D33"+
-        "\u2D34\u2D35\u2D36\u2D37\u2D38\u2D39\u2D3A\u2D3B"+
-        "\u2D3C\u2D3D\u2D3E\u2D3F\u2D40\u2D41\u2D42\u2D43"+
-        "\u2D44\u2D45\u2D46\u2D47\u2D48\u2D49\u2D4A\u2D4B"+
-        "\u2D4C\u2D4D\u2D4E\u2D4F\u2D50\u2D51\u2D52\u2D53"+
-        "\u2D54\u2D55\u2D56\u2D57\u2D58\u2D59\u2D5A\u2D5B"+
-        "\u2D5C\u2D5D\u2D5E\u2D5F\u2D60\u2D61\u2D62\u2D63"+
-        "\u2D64\u2D65\u2D66\u2D67\u2D68\u2D69\u2D6A\u2D6B"+
-        "\u2D6C\u2D6D\u2D6E\u2D6F\u2D70\u2D71\u2D72\u2D73"+
-        "\u2D74\u2D75\u2D76\u2D77\u2D78\u2D79\u2D7A\u2D7B"+
-        "\u2D7C\u2D7D\u2D7E\u2D7F\u2D80\u2D81\u2D82\u2D83"+
-        "\u2D84\u2D85\u2D86\u2D87\u2D88\u2D89\u2D8A\u2D8B"+
-        "\u2D8C\u2D8D\u2D8E\u2D8F\u2D90\u2D91\u2D92\u2D93"+
-        "\u2D94\u2D95\u2D96\u2D97\u2D98\u2D99\u2D9A\u2D9B"+
-        "\u2D9C\u2D9D\u2D9E\u2D9F\u2DA0\u2DA1\u2DA2\u2DA3"+
-        "\u2DA4\u2DA5\u2DA6\u2DA7\u2DA8\u2DA9\u2DAA\u2DAB"+
-        "\u2DAC\u2DAD\u2DAE\u2DAF\u2DB0\u2DB1\u2DB2\u2DB3"+
-        "\u2DB4\u2DB5\u2DB6\u2DB7\u2DB8\u2DB9\u2DBA\u2DBB"+
-        "\u2DBC\u2DBD\u2DBE\u2DBF\u2DC0\u2DC1\u2DC2\u2DC3"+
-        "\u2DC4\u2DC5\u2DC6\u2DC7\u2DC8\u2DC9\u2DCA\u2DCB"+
-        "\u2DCC\u2DCD\u2DCE\u2DCF\u2DD0\u2DD1\u2DD2\u2DD3"+
-        "\u2DD4\u2DD5\u2DD6\u2DD7\u2DD8\u2DD9\u2DDA\u2DDB"+
-        "\u2DDC\u2DDD\u2DDE\u2DDF\u2DE0\u2DE1\u2DE2\u2DE3"+
-        "\u2DE4\u2DE5\u2DE6\u2DE7\u2DE8\u2DE9\u2DEA\u2DEB"+
-        "\u2DEC\u2DED\u2DEE\u2DEF\u2DF0\u2DF1\u2DF2\u2DF3"+
-        "\u2DF4\u2DF5\u2DF6\u2DF7\u2DF8\u2DF9\u2DFA\u2DFB"+
-        "\u2DFC\u2DFD\u2DFE\u2DFF\u2E00\u2E01\u2E02\u2E03"+
-        "\u2E04\u2E05\u2E06\u2E07\u2E08\u2E09\u2E0A\u2E0B"+
-        "\u2E0C\u2E0D\u2E0E\u2E0F\u2E10\u2E11\u2E12\u2E13"+
-        "\u2E14\u2E15\u2E16\u2E17\u2E18\u2E19\u2E1A\u2E1B"+
-        "\u2E1C\u2E1D\u2E1E\u2E1F\u2E20\u2E21\u2E22\u2E23"+
-        "\u2E24\u2E25\u2E26\u2E27\u2E28\u2E29\u2E2A\u2E2B"+
-        "\u2E2C\u2E2D\u2E2E\u2E2F\u2E30\u2E31\u2E32\u2E33"+
-        "\u2E34\u2E35\u2E36\u2E37\u2E38\u2E39\u2E3A\u2E3B"+
-        "\u2E3C\u2E3D\u2E3E\u2E3F\u2E40\u2E41\u2E42\u2E43"+
-        "\u2E44\u2E45\u2E46\u2E47\u2E48\u2E49\u2E4A\u2E4B"+
-        "\u2E4C\u2E4D\u2E4E\u2E4F\u2E50\u2E51\u2E52\u2E53"+
-        "\u2E54\u2E55\u2E56\u2E57\u2E58\u2E59\u2E5A\u2E5B"+
-        "\u2E5C\u2E5D\u2E5E\u2E5F\u2E60\u2E61\u2E62\u2E63"+
-        "\u2E64\u2E65\u2E66\u2E67\u2E68\u2E69\u2E6A\u2E6B"+
-        "\u2E6C\u2E6D\u2E6E\u2E6F\u2E70\u2E71\u2E72\u2E73"+
-        "\u2E74\u2E75\u2E76\u2E77\u2E78\u2E79\u2E7A\u2E7B"+
-        "\u2E7C\u2E7D\u2E7E\u2E7F\u2E80\u2E81\u2E82\u2E83"+
-        "\u2E84\u2E85\u2E86\u2E87\u2E88\u2E89\u2E8A\u2E8B"+
-        "\u2E8C\u2E8D\u2E8E\u2E8F\u2E90\u2E91\u2E92\u2E93"+
-        "\u2E94\u2E95\u2E96\u2E97\u2E98\u2E99\u2E9A\u2E9B"+
-        "\u2E9C\u2E9D\u2E9E\u2E9F\u2EA0\u2EA1\u2EA2\u2EA3"+
-        "\u2EA4\u2EA5\u2EA6\u2EA7\u2EA8\u2EA9\u2EAA\u2EAB"+
-        "\u2EAC\u2EAD\u2EAE\u2EAF\u2EB0\u2EB1\u2EB2\u2EB3"+
-        "\u2EB4\u2EB5\u2EB6\u2EB7\u2EB8\u2EB9\u2EBA\u2EBB"+
-        "\u2EBC\u2EBD\u2EBE\u2EBF\u2EC0\u2EC1\u2EC2\u2EC3"+
-        "\u2EC4\u2EC5\u2EC6\u2EC7\u2EC8\u2EC9\u2ECA\u2ECB"+
-        "\u2ECC\u2ECD\u2ECE\u2ECF\u2ED0\u2ED1\u2ED2\u2ED3"+
-        "\u2ED4\u2ED5\u2ED6\u2ED7\u2ED8\u2ED9\u2EDA\u2EDB"+
-        "\u2EDC\u2EDD\u2EDE\u2EDF\u2EE0\u2EE1\u2EE2\u2EE3"+
-        "\u2EE4\u2EE5\u2EE6\u2EE7\u2EE8\u2EE9\u2EEA\u2EEB"+
-        "\u2EEC\u2EED\u2EEE\u2EEF\u2EF0\u2EF1\u2EF2\u2EF3"+
-        "\u2EF4\u2EF5\u2EF6\u2EF7\u2EF8\u2EF9\u2EFA\u2EFB"+
-        "\u2EFC\u2EFD\u2EFE\u2EFF\u2F00\u2F01\u2F02\u2F03"+
-        "\u2F04\u2F05\u2F06\u2F07\u2F08\u2F09\u2F0A\u2F0B"+
-        "\u2F0C\u2F0D\u2F0E\u2F0F\u2F10\u2F11\u2F12\u2F13"+
-        "\u2F14\u2F15\u2F16\u2F17\u2F18\u2F19\u2F1A\u2F1B"+
-        "\u2F1C\u2F1D\u2F1E\u2F1F\u2F20\u2F21\u2F22\u2F23"+
-        "\u2F24\u2F25\u2F26\u2F27\u2F28\u2F29\u2F2A\u2F2B"+
-        "\u2F2C\u2F2D\u2F2E\u2F2F\u2F30\u2F31\u2F32\u2F33"+
-        "\u2F34\u2F35\u2F36\u2F37\u2F38\u2F39\u2F3A\u2F3B"+
-        "\u2F3C\u2F3D\u2F3E\u2F3F\u2F40\u2F41\u2F42\u2F43"+
-        "\u2F44\u2F45\u2F46\u2F47\u2F48\u2F49\u2F4A\u2F4B"+
-        "\u2F4C\u2F4D\u2F4E\u2F4F\u2F50\u2F51\u2F52\u2F53"+
-        "\u2F54\u2F55\u2F56\u2F57\u2F58\u2F59\u2F5A\u2F5B"+
-        "\u2F5C\u2F5D\u2F5E\u2F5F\u2F60\u2F61\u2F62\u2F63"+
-        "\u2F64\u2F65\u2F66\u2F67\u2F68\u2F69\u2F6A\u2F6B"+
-        "\u2F6C\u2F6D\u2F6E\u2F6F\u2F70\u2F71\u2F72\u2F73"+
-        "\u2F74\u2F75\u2F76\u2F77\u2F78\u2F79\u2F7A\u2F7B"+
-        "\u2F7C\u2F7D\u2F7E\u2F7F\u2F80\u2F81\u2F82\u2F83"+
-        "\u2F84\u2F85\u2F86\u2F87\u2F88\u2F89\u2F8A\u2F8B"+
-        "\u2F8C\u2F8D\u2F8E\u2F8F\u2F90\u2F91\u2F92\u2F93"+
-        "\u2F94\u2F95\u2F96\u2F97\u2F98\u2F99\u2F9A\u2F9B"+
-        "\u2F9C\u2F9D\u2F9E\u2F9F\u2FA0\u2FA1\u2FA2\u2FA3"+
-        "\u2FA4\u2FA5\u2FA6\u2FA7\u2FA8\u2FA9\u2FAA\u2FAB"+
-        "\u2FAC\u2FAD\u2FAE\u2FAF\u2FB0\u2FB1\u2FB2\u2FB3"+
-        "\u2FB4\u2FB5\u2FB6\u2FB7\u2FB8\u2FB9\u2FBA\u2FBB"+
-        "\u2FBC\u2FBD\u2FBE\u2FBF\u2FC0\u2FC1\u2FC2\u2FC3"+
-        "\u2FC4\u2FC5\u2FC6\u2FC7\u2FC8\u2FC9\u2FCA\u2FCB"+
-        "\u2FCC\u2FCD\u2FCE\u2FCF\u2FD0\u2FD1\u2FD2\u2FD3"+
-        "\u2FD4\u2FD5\u2FD6\u2FD7\u2FD8\u2FD9\u2FDA\u2FDB"+
-        "\u2FDC\u2FDD\u2FDE\u2FDF\u2FE0\u2FE1\u2FE2\u2FE3"+
-        "\u2FE4\u2FE5\u2FE6\u2FE7\u2FE8\u2FE9\u2FEA\u2FEB"+
-        "\u2FEC\u2FED\u2FEE\u2FEF\u2FF0\u2FF1\u2FF2\u2FF3"+
-        "\u2FF4\u2FF5\u2FF6\u2FF7\u2FF8\u2FF9\u2FFA\u2FFB"+
-        "\u2FFC\u2FFD\u2FFE\u2FFF\u3000\u3001\u3002\u3003"+
-        "\u3004\u3005\u3006\u3007\u3008\u3009\u300A\u300B"+
-        "\u300C\u300D\u300E\u300F\u3010\u3011\u3012\u3013"+
-        "\u3014\u3015\u3016\u3017\u3018\u3019\u301A\u301B"+
-        "\u301C\u301D\u301E\u301F\u3020\u3021\u3022\u3023"+
-        "\u3024\u3025\u3026\u3027\u3028\u3029\u302A\u302B"+
-        "\u302C\u302D\u302E\u302F\u3030\u3031\u3032\u3033"+
-        "\u3034\u3035\u3036\u3037\u3038\u3039\u303A\u303B"+
-        "\u303C\u303D\u303E\u303F\u3040\u3041\u3042\u3043"+
-        "\u3044\u3045\u3046\u3047\u3048\u3049\u304A\u304B"+
-        "\u304C\u304D\u304E\u304F\u3050\u3051\u3052\u3053"+
-        "\u3054\u3055\u3056\u3057\u3058\u3059\u305A\u305B"+
-        "\u305C\u305D\u305E\u305F\u3060\u3061\u3062\u3063"+
-        "\u3064\u3065\u3066\u3067\u3068\u3069\u306A\u306B"+
-        "\u306C\u306D\u306E\u306F\u3070\u3071\u3072\u3073"+
-        "\u3074\u3075\u3076\u3077\u3078\u3079\u307A\u307B"+
-        "\u307C\u307D\u307E\u307F\u3080\u3081\u3082\u3083"+
-        "\u3084\u3085\u3086\u3087\u3088\u3089\u308A\u308B"+
-        "\u308C\u308D\u308E\u308F\u3090\u3091\u3092\u3093"+
-        "\u3094\u3095\u3096\u3097\u3098\u3099\u309A\u309B"+
-        "\u309C\u309D\u309E\u309F\u30A0\u30A1\u30A2\u30A3"+
-        "\u30A4\u30A5\u30A6\u30A7\u30A8\u30A9\u30AA\u30AB"+
-        "\u30AC\u30AD\u30AE\u30AF\u30B0\u30B1\u30B2\u30B3"+
-        "\u30B4\u30B5\u30B6\u30B7\u30B8\u30B9\u30BA\u30BB"+
-        "\u30BC\u30BD\u30BE\u30BF\u30C0\u30C1\u30C2\u30C3"+
-        "\u30C4\u30C5\u30C6\u30C7\u30C8\u30C9\u30CA\u30CB"+
-        "\u30CC\u30CD\u30CE\u30CF\u30D0\u30D1\u30D2\u30D3"+
-        "\u30D4\u30D5\u30D6\u30D7\u30D8\u30D9\u30DA\u30DB"+
-        "\u30DC\u30DD\u30DE\u30DF\u30E0\u30E1\u30E2\u30E3"+
-        "\u30E4\u30E5\u30E6\u30E7\u30E8\u30E9\u30EA\u30EB"+
-        "\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007"+
-        "\u2008\u2009\u200A\u200B\u200C\u200D\u200E\u200F"+
-        "\u2010\u2011\u2012\u2013\u2014\u2015\u2016\u2017"+
-        "\u2018\u2019\u201A\u201B\u201C\u201D\u201E\u201F"+
-        "\u2020\u2021\u2022\u2023\u2024\u2025\u2026\u2027"+
-        "\u2028\u2029\u202A\u202B\uFD9C\u202C\u202D\u202E"+
-        "\u202F\u2030\u2031\u2032\u2033\u2034\u2035\u2036"+
-        "\u2037\u2038\u2039\u203A\u203B\u203C\u203D\u203E"+
-        "\u203F\u2040\u2041\u2042\u2043\u2044\u2045\u2046"+
-        "\u2047\u2048\u2049\u204A\u204B\u204C\u204D\u204E"+
-        "\u204F\u2050\u2051\u2052\u2053\u2054\u2055\u2056"+
-        "\u2057\u2058\u2059\u205A\u205B\u205C\u205D\u205E"+
-        "\u205F\u2060\u2061\u2062\u2063\u2064\u2065\u2066"+
-        "\u2067\u2068\u2069\u206A\u206B\u206C\u206D\u206E"+
-        "\u206F\u2070\u2071\u2072\u2073\u2074\u2075\u2076"+
-        "\u2077\uFD9D\u2078\u2079\u207A\u207B\u207C\u207D"+
-        "\u207E\u207F\u2080\u2081\u2082\u2083\u2084\u2085"+
-        "\u2086\u2087\u2088\u2089\u208A\u208B\u208C\u208D"+
-        "\u208E\u208F\u2090\u2091\u2092\uFD9E\u2093\u2094"+
-        "\u2095\u2096\u2097\u2098\u2099\u209A\u209B\u209C"+
-        "\u209D\u209E\u209F\u20A0\u20A1\u20A2\u20A3\u20A4"+
-        "\u20A5\u20A6\u20A7\u20A8\u20A9\u20AA\u20AB\u20AC"+
-        "\u20AD\u20AE\u20AF\u20B0\u20B1\u20B2\u20B3\u20B4"+
-        "\u20B5\u20B6\u20B7\u20B8\u20B9\u20BA\u20BB\u20BC"+
-        "\u20BD\u20BE\u20BF\u20C0\u20C1\u20C2\u20C3\u20C4"+
-        "\u20C5\u20C6\u20C7\u20C8\u20C9\u20CA\u20CB\u20CC"+
-        "\u20CD\u20CE\u20CF\u20D0\u20D1\u20D2\u20D3\u20D4"+
-        "\u20D5\u20D6\u20D7\u20D8\u20D9\u20DA\u20DB\u20DC"+
-        "\u20DD\u20DE\u20DF\u20E0\u20E1\u20E2\u20E3\uFD9F"+
-        "\u20E4\u20E5\u20E6\u20E7\u20E8\u20E9\u20EA\u20EB"+
-        "\u20EC\uFDA0\u20ED\u20EE\u20EF\u20F0\u20F1\u20F2"+
-        "\u20F3\u20F4\u20F5\u20F6\u20F7\u20F8\u20F9\u20FA"+
-        "\u20FB\u20FC\u20FD\u20FE\u20FF\u2100\u2101\u2102"+
-        "\u2103\u2104\u2105\u2106\uFE40\uFE41\uFE42\uFE43"+
-        "\u2107\uFE44\u2108\uFE45\uFE46\u2109\u210A\u210B"+
-        "\uFE47\u210C\u210D\u210E\u210F\u2110\u2111\uFE48"+
-        "\uFE49\uFE4A\u2112\uFE4B\uFE4C\u2113\u2114\uFE4D"+
-        "\uFE4E\uFE4F\u2115\u2116\u2117\u2118\u2119\u211A"+
-        "\u211B\u211C\u211D\u211E\u211F\u2120\u2121\u2122"+
-        "\u2123\u2124\u2125\u2126\u2127\u2128\u2129\u212A"+
-        "\u212B\u212C\u212D\u212E\u212F\u2130\u2131\u2132"+
-        "\u2133\u2134\u2135\u2136\u2137\u2138\u2139\u213A"+
-        "\u213B\u213C\u213D\u213E\u213F\u2140\u2141\u2142"+
-        "\u2143\u2144\u2145\u2146\u2147\u2148\u2149\u214A"+
-        "\u214B\u214C\u214D\u214E\u214F\u2150\u2151\u2152"+
-        "\u2153\u2154\u2155\u2156\u2157\u2158\u2159\u215A"+
-        "\u215B\u215C\u215D\u215E\u215F\u2160\u2161\u2162"+
-        "\u2163\u2164\u2165\u2166\u2167\u2168\u2169\u216A"+
-        "\u216B\u216C\u216D\u216E\u216F\u2170\u2171\u2172"+
-        "\u2173\u2174\u2175\u2176\u2177\u2178\u2179\u217A"+
-        "\u217B\u217C\u217D\u217E\u217F\u2180\u2181\u2182"+
-        "\u2183\u2184\u2185\u2186\u2187\u2188\u2189\u218A"+
-        "\u218B\u218C\u218D\u218E\u218F\u2190\u2191\u2192"+
-        "\u2193\u2194\u2195\u2196\u2197\u2198\u2199\u219A"+
-        "\u219B\u219C\u219D\u219E\u219F\u21A0\u21A1\u21A2"+
-        "\u21A3\u21A4\u21A5\u21A6\u21A7\u21A8\u21A9\u21AA"+
-        "\u21AB\u21AC\u21AD\u21AE\u21AF\u21B0\u21B1\u21B2"+
-        "\u21B3\u21B4\u21B5\u21B6\u21B7\u21B8\u21B9\u21BA"+
-        "\u21BB\u21BC\u21BD\u21BE\u21BF\u21C0\u21C1\u21C2"+
-        "\u21C3\u21C4\u21C5\u21C6\u21C7\u21C8\u21C9\u21CA"+
-        "\u21CB\u21CC\u21CD\u21CE\u21CF\u21D0\u21D1\u21D2"+
-        "\u21D3\u21D4\u21D5\u21D6\u21D7\u21D8\u21D9\u21DA"+
-        "\u21DB\u21DC\u21DD\u21DE\u21DF\u21E0\u21E1\u21E2"+
-        "\u21E3\u21E4\u21E5\u21E6\u21E7\u21E8\u21E9\u21EA";
-
-    private final static String innerEncoderIndex12=
-        "\u21EB\u21EC\u21ED\u21EE\u21EF\u21F0\u21F1\u21F2"+
-        "\u21F3\u21F4\u21F5\u21F6\u21F7\u21F8\u21F9\u21FA"+
-        "\u21FB\u21FC\u21FD\u21FE\u21FF\u2200\u2201\u2202"+
-        "\u2203\u2204\u2205\u2206\u2207\u2208\u2209\u220A"+
-        "\u220B\u220C\u220D\u220E\u220F\u2210\u2211\u2212"+
-        "\u2213\u2214\u2215\u2216\u2217\u2218\u2219\u221A"+
-        "\u221B\u221C\u221D\u221E\u221F\u2220\u2221\u2222"+
-        "\u2223\u2224\u2225\u2226\u2227\u2228\u2229\u222A"+
-        "\u222B\u222C\u222D\u222E\u222F\u2230\u2231\u2232"+
-        "\u2233\u2234\u2235\u2236\u2237\u2238\u2239\u223A"+
-        "\u223B\u223C\u223D\u223E\u223F\u2240\u2241\u2242"+
-        "\u2243\u2244\u2245\u2246\u2247\u2248\u2249\u224A"+
-        "\u224B\u224C\u224D\u224E\u224F\u2250\u2251\u2252"+
-        "\u2253\u2254\u2255\u2256\u2257\u2258\u2259\u225A"+
-        "\u225B\u225C\u225D\u225E\u225F\u2260\u2261\u2262"+
-        "\u2263\u2264\u2265\u2266\u2267\u2268\u2269\u226A"+
-        "\u226B\u226C\u226D\u226E\u226F\u2270\u2271\u2272"+
-        "\u2273\u2274\u2275\u2276\u2277\u2278\u2279\u227A"+
-        "\u227B\u227C\u227D\u227E\u227F\u2280\u2281\u2282"+
-        "\u2283\u2284\u2285\u2286\u2287\u2288\u2289\u228A"+
-        "\u228B\u228C\u228D\u228E\u228F\u2290\u2291\u2292"+
-        "\u2293\u2294\u2295\u2296\u2297\u2298\u2299\u229A"+
-        "\u229B\u229C\u229D\u229E\u229F\u22A0\u22A1\u22A2"+
-        "\u22A3\u22A4\u22A5\u22A6\u22A7\u22A8\u22A9\u22AA"+
-        "\u22AB\u22AC\u22AD\u22AE\u22AF\u22B0\u22B1\u22B2"+
-        "\u22B3\u22B4\u22B5\u22B6\u22B7\u22B8\u22B9\u22BA"+
-        "\u22BB\u22BC\u22BD\u22BE\u22BF\u22C0\u22C1\u22C2"+
-        "\u22C3\u22C4\u22C5\u22C6\u22C7\u22C8\u22C9\u22CA"+
-        "\u22CB\u22CC\u22CD\u22CE\u22CF\u22D0\u22D1\u22D2"+
-        "\u22D3\u22D4\u22D5\u22D6\u22D7\u22D8\u22D9\u22DA"+
-        "\u22DB\u22DC\u22DD\u22DE\u22DF\u22E0\u22E1\u22E2"+
-        "\u22E3\u22E4\u22E5\u22E6\u22E7\u22E8\u22E9\u22EA"+
-        "\u22EB\u22EC\u22ED\u22EE\u22EF\u22F0\u22F1\u22F2"+
-        "\u22F3\u22F4\u22F5\u22F6\u22F7\u22F8\u22F9\u22FA"+
-        "\u22FB\u22FC\u22FD\u22FE\u22FF\u2300\u2301\u2302"+
-        "\u2303\u2304\u2305\u2306\u2307\u2308\u2309\u230A"+
-        "\u230B\u230C\u230D\u230E\u230F\u2310\u2311\u2312"+
-        "\u2313\u2314\u2315\u2316\u2317\u2318\u2319\u231A"+
-        "\u231B\u231C\u231D\u231E\u231F\u2320\u2321\u2322"+
-        "\u2323\u2324\u2325\u2326\u2327\u2328\u2329\u232A"+
-        "\u232B\u232C\u232D\u232E\u232F\u2330\u2331\u2332"+
-        "\u2333\u2334\u2335\u2336\u2337\u2338\u2339\u233A"+
-        "\u233B\u233C\u233D\u233E\u233F\u2340\u2341\u2342"+
-        "\u2343\u2344\u2345\u2346\u2347\u2348\u2349\u234A"+
-        "\u234B\u234C\u234D\u234E\u234F\u2350\u2351\u2352"+
-        "\u2353\u2354\u2355\u2356\u2357\u2358\u2359\u235A"+
-        "\u235B\u235C\u235D\u235E\u235F\u2360\u2361\u2362"+
-        "\u2363\u2364\u2365\u2366\u2367\u2368\u2369\u236A"+
-        "\u236B\u236C\u236D\u236E\u236F\u2370\u2371\u2372"+
-        "\u2373\u2374\u2375\u2376\u2377\u2378\u2379\u237A"+
-        "\u237B\u237C\u237D\u237E\u237F\u2380\u2381\u2382"+
-        "\u2383\u2384\u2385\u2386\u2387\u2388\u2389\u238A"+
-        "\u238B\u238C\u238D\u238E\u238F\u2390\u2391\u2392"+
-        "\u2393\u2394\u2395\u2396\u2397\u2398\u2399\u239A"+
-        "\u239B\u239C\u239D\u239E\u239F\u23A0\u23A1\u23A2"+
-        "\u23A3\u23A4\u23A5\u23A6\u23A7\u23A8\u23A9\u23AA"+
-        "\u23AB\u23AC\u23AD\u23AE\u23AF\u23B0\u23B1\u23B2"+
-        "\u23B3\u23B4\u23B5\u23B6\u23B7\u23B8\u23B9\u23BA"+
-        "\u23BB\u23BC\u23BD\u23BE\u23BF\u23C0\u23C1\u23C2"+
-        "\u23C3\u23C4\u23C5\u23C6\u23C7\u23C8\u23C9\u23CA"+
-        "\u23CB\u23CC\u23CD\u23CE\u23CF\u23D0\u23D1\u23D2"+
-        "\u23D3\u23D4\u23D5\u23D6\u23D7\u23D8\u23D9\u23DA"+
-        "\u23DB\u23DC\u23DD\u23DE\u23DF\u23E0\u23E1\u23E2"+
-        "\u23E3\u23E4\u23E5\u23E6\u23E7\u23E8\u23E9\u23EA"+
-        "\u23EB\u23EC\u23ED\u23EE\u23EF\u23F0\u23F1\u23F2"+
-        "\u23F3\u23F4\u23F5\u23F6\u23F7\u23F8\u23F9\u23FA"+
-        "\u23FB\u23FC\u23FD\u23FE\u23FF\u2400\u2401\u2402"+
-        "\u2403\u2404\u2405\u2406\u2407\u2408\u2409\u240A"+
-        "\u240B\u240C\u240D\u240E\u240F\u2410\u2411\u2412"+
-        "\u2413\u2414\u2415\u2416\u2417\u2418\u2419\u241A"+
-        "\u241B\u241C\u241D\u241E\u241F\u2420\u2421\u2422"+
-        "\u2423\u2424\u2425\u2426\u2427\u2428\u2429\u242A"+
-        "\u242B\u242C\u242D\u242E\u242F\u2430\u2431\u2432"+
-        "\u2433\u2434\u2435\u2436\u2437\u2438\u2439\u243A"+
-        "\u243B\u243C\u243D\u243E\u243F\u2440\u2441\u2442"+
-        "\u2443\u2444\u2445\u2446\u2447\u2448\u2449\u244A"+
-        "\u244B\u244C\u244D\u244E\u244F\u2450\u2451\u2452"+
-        "\u2453\u2454\u2455\u2456\u2457\u2458\u2459\u245A"+
-        "\u245B\u245C\u245D\u245E\u245F\u2460\u2461\u2462"+
-        "\u2463\u2464\u2465\u2466\u2467\u2468\u2469\u246A"+
-        "\u246B\u246C\u246D\u246E\u246F\u2470\u2471\u2472"+
-        "\u2473\u2474\u2475\u2476\u2477\u2478\u2479\u247A"+
-        "\u247B\u247C\u247D\u247E\u247F\u2480\u2481\u2482"+
-        "\u2483\u2484\u2485\u2486\u2487\u2488\u2489\u248A"+
-        "\u248B\u248C\u248D\u248E\u248F\u2490\u2491\u2492"+
-        "\u2493\u2494\u2495\u2496\u2497\u2498\u2499\u249A"+
-        "\u249B\u249C\u249D\u249E\u249F\u24A0\u24A1\u24A2"+
-        "\u24A3\u24A4\u24A5\u24A6\u24A7\u24A8\u24A9\u24AA"+
-        "\u24AB\u24AC\u24AD\u24AE\u24AF\u24B0\u24B1\u24B2"+
-        "\u24B3\u24B4\u24B5\u24B6\u24B7\u24B8\u24B9\u24BA"+
-        "\u24BB\u24BC\u24BD\u24BE\u24BF\u24C0\u24C1\u24C2"+
-        "\u24C3\u24C4\u24C5\u24C6\u24C7\u24C8\u24C9\u24CA"+
-        "\u24CB\u24CC\u24CD\u24CE\u24CF\u24D0\u24D1\u24D2"+
-        "\u24D3\u24D4\u24D5\u24D6\u24D7\u24D8\u24D9\u24DA"+
-        "\u24DB\u24DC\u24DD\u24DE\u24DF\u24E0\u24E1\u24E2"+
-        "\u24E3\u24E4\u24E5\u24E6\u24E7\u24E8\u24E9\u24EA"+
-        "\u24EB\u24EC\u24ED\u24EE\u24EF\u24F0\u24F1\u24F2"+
-        "\u24F3\u24F4\u24F5\u24F6\u24F7\u24F8\u24F9\u24FA"+
-        "\u24FB\u24FC\u24FD\u24FE\u24FF\u2500\u2501\u2502"+
-        "\u2503\u2504\u2505\u2506\u2507\u2508\u2509\u250A"+
-        "\u250B\u250C\u250D\u250E\u250F\u2510\u2511\u2512"+
-        "\u2513\u2514\u2515\u2516\u2517\u2518\u2519\u251A"+
-        "\uA955\uA6F2\u251B\uA6F4\uA6F5\uA6E0\uA6E1\uA6F0"+
-        "\uA6F1\uA6E2\uA6E3\uA6EE\uA6EF\uA6E6\uA6E7\uA6E4"+
-        "\uA6E5\uA6E8\uA6E9\uA6EA\uA6EB\u251C\u251D\u251E"+
-        "\u251F\uA968\uA969\uA96A\uA96B\uA96C\uA96D\uA96E"+
-        "\uA96F\uA970\uA971\u2520\uA972\uA973\uA974\uA975"+
-        "\u2521\uA976\uA977\uA978\uA979\uA97A\uA97B\uA97C"+
-        "\uA97D\uA97E\uA980\uA981\uA982\uA983\uA984\u2522"+
-        "\uA985\uA986\uA987\uA988\u2523\u2524\u2525\u2526"+
-        "\u2527\u2528\u2529\u252A\u252B\u252C\u252D\u252E"+
-        "\u252F\u2530\u2531\u2532\u2533\u2534\u2535\u2536"+
-        "\u2537\u2538\u2539\u253A\u253B\u253C\u253D\u253E"+
-        "\u253F\u2540\u2541\u2542\u2543\u2544\u2545\u2546"+
-        "\u2547\u2548\u2549\u254A\u254B\u254C\u254D\u254E"+
-        "\u254F\u2550\u2551\u2552\u2553\u2554\u2555\u2556"+
-        "\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E"+
-        "\u255F\u2560\u2561\u2562\u2563\u2564\u2565\u2566"+
-        "\u2567\u2568\u2569\u256A\u256B\u256C\u256D\u256E"+
-        "\u256F\u2570\u2571\u2572\u2573\u2574\u2575\u2576"+
-        "\u2577\u2578\u2579\u257A\u257B\u257C\u257D\u257E"+
-        "\u257F\u2580\u2581\u2582\u2583\u2584\u2585\u2586"+
-        "\u2587\u2588\u2589\u258A\u258B\u258C\u258D\u258E"+
-        "\u258F\u2590\u2591\u2592\u2593\u2594\u2595\u2596"+
-        "\u2597\u2598\u2599\u259A\u259B\u259C\u259D\u259E"+
-        "\u259F\u25A0\u25A1\u25A2\u25A3\u25A4\u25A5\u25A6"+
-        "\u25A7\u25A8\u25A9\u25AA\u25AB\u25AC\u25AD\u25AE"+
-        "\u25AF\u25B0\u25B1\u25B2\u25B3\u25B4\u25B5\u25B6"+
-        "\u25B7\uA3A1\uA3A2\uA3A3\uA1E7\uA3A5\uA3A6\uA3A7"+
-        "\uA3A8\uA3A9\uA3AA\uA3AB\uA3AC\uA3AD\uA3AE\uA3AF"+
-        "\uA3B0\uA3B1\uA3B2\uA3B3\uA3B4\uA3B5\uA3B6\uA3B7"+
-        "\uA3B8\uA3B9\uA3BA\uA3BB\uA3BC\uA3BD\uA3BE\uA3BF"+
-        "\uA3C0\uA3C1\uA3C2\uA3C3\uA3C4\uA3C5\uA3C6\uA3C7"+
-        "\uA3C8\uA3C9\uA3CA\uA3CB\uA3CC\uA3CD\uA3CE\uA3CF"+
-        "\uA3D0\uA3D1\uA3D2\uA3D3\uA3D4\uA3D5\uA3D6\uA3D7"+
-        "\uA3D8\uA3D9\uA3DA\uA3DB\uA3DC\uA3DD\uA3DE\uA3DF"+
-        "\uA3E0\uA3E1\uA3E2\uA3E3\uA3E4\uA3E5\uA3E6\uA3E7"+
-        "\uA3E8\uA3E9\uA3EA\uA3EB\uA3EC\uA3ED\uA3EE\uA3EF"+
-        "\uA3F0\uA3F1\uA3F2\uA3F3\uA3F4\uA3F5\uA3F6\uA3F7"+
-        "\uA3F8\uA3F9\uA3FA\uA3FB\uA3FC\uA3FD\uA1AB\u25B8"+
-        "\u25B9\u25BA\u25BB\u25BC\u25BD\u25BE\u25BF\u25C0"+
-        "\u25C1\u25C2\u25C3\u25C4\u25C5\u25C6\u25C7\u25C8"+
-        "\u25C9\u25CA\u25CB\u25CC\u25CD\u25CE\u25CF\u25D0"+
-        "\u25D1\u25D2\u25D3\u25D4\u25D5\u25D6\u25D7\u25D8"+
-        "\u25D9\u25DA\u25DB\u25DC\u25DD\u25DE\u25DF\u25E0"+
-        "\u25E1\u25E2\u25E3\u25E4\u25E5\u25E6\u25E7\u25E8"+
-        "\u25E9\u25EA\u25EB\u25EC\u25ED\u25EE\u25EF\u25F0"+
-        "\u25F1\u25F2\u25F3\u25F4\u25F5\u25F6\u25F7\u25F8"+
-        "\u25F9\u25FA\u25FB\u25FC\u25FD\u25FE\u25FF\u2600"+
-        "\u2601\u2602\u2603\u2604\u2605\u2606\u2607\u2608"+
-        "\u2609\u260A\u260B\u260C\u260D\u260E\u260F\u2610"+
-        "\u2611\u2612\u2613\u2614\u2615\u2616\u2617\u2618"+
-        "\u2619\u261A\u261B\u261C\u261D\u261E\u261F\u2620"+
-        "\u2621\u2622\u2623\u2624\u2625\u2626\u2627\u2628"+
-        "\u2629\u262A\u262B\u262C\u262D\u262E\u262F\u2630"+
-        "\u2631\u2632\u2633\u2634\u2635\u2636\u2637\u2638"+
-        "\uA1E9\uA1EA\uA956\uA3FE\uA957\uA3A4\u2639\u263A"+
-        "\u263B\u263C\u263D\u263E\u263F\u2640\u2641\u2642"+
-        "\u2643\u2644\u2645\u2646\u2647\u2648\u2649\u264A"+
-        "\u264B\u264C\u264D\u264E\u264F\u2650\u2651\u2652";
-
-    private final static short encoderIndex1[] = {
-        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-        16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
-        32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
-        48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
-        64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
-        80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
-        96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
-        112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
-        128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
-        144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
-        160, 161, 162, 163, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
-        181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196
-    };
-
-    static String encoderIndex2[] = {
-        innerEncoderIndex0,
-        innerEncoderIndex1,
-        innerEncoderIndex2,
-        innerEncoderIndex3,
-        innerEncoderIndex4,
-        innerEncoderIndex5,
-        innerEncoderIndex6,
-        innerEncoderIndex7,
-        innerEncoderIndex8,
-        innerEncoderIndex9,
-        innerEncoderIndex10,
-        innerEncoderIndex11,
-        innerEncoderIndex12
-    };
-    private static class Decoder extends CharsetDecoder {
-
-        private static final char REPLACE_CHAR = '\uFFFD';
-        private int currentState = GB18030_DOUBLE_BYTE;
-
-        private Decoder(Charset cs) {
-            super(cs, 1.0f, 2.0f);
-        }
-
-        private char getChar(int offset) {
-            int byte1 = (offset >>8) & 0xFF;
-            int byte2 = (offset & 0xFF);
-            int start = 0, end = 0xFF;
-
-            if (((byte1 < 0) || (byte1 > decoderIndex1.length))
-                 || ((byte2 < start) || (byte2 > end))) {
-                       return REPLACE_CHAR;
-            }
-
-            int n = (decoderIndex1[byte1] & 0xf) * (end - start + 1) + (byte2 - start);
-            return decoderIndex2[decoderIndex1[byte1] >> 4].charAt(n);
-        }
-
-        protected char decodeDouble(int byte1, int byte2) {
-            int start = 0x40, end = 0xFE;
-            if (((byte1 < 0) || (byte1 > index1.length))
-                || ((byte2 < start) || (byte2 > end)))
-                return '\uFFFD';
-
-            int n = (index1[byte1] & 0xf) * (end - start + 1) + (byte2 - start);
-            return index2[index1[byte1] >> 4].charAt(n);
-        }
-
-        protected void implReset() {
-            currentState = GB18030_DOUBLE_BYTE;
-        }
-
-        private CoderResult decodeArrayLoop(ByteBuffer src,
-                                            CharBuffer dst)
-        {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            int inputSize = 1;
-
-            try {
-                while (sp < sl) {
-                    int byte1 = 0 , byte2 = 0, byte3 = 0, byte4 = 0;
-                    // Get the input byte
-                    byte1 = sa[sp] & 0xFF;
-                    inputSize = 1;
-
-                    if ((byte1 & (byte)0x80) == 0){ // US-ASCII range
-                        currentState = GB18030_SINGLE_BYTE;
-                    }
-                    else if (byte1 < 0x81 || byte1 > 0xfe) {
-                        return CoderResult.malformedForLength(1);
-                    }
-                    else { // Either 2 or 4 byte sequence follows
-                        if ( sl - sp < 2 )
-                            return CoderResult.UNDERFLOW;
-                        byte2 = sa[sp + 1] & 0xFF;
-                        inputSize = 2;
-
-                        if (byte2 < 0x30)
-                                return CoderResult.malformedForLength(1);
-                        else if (byte2 >= 0x30 && byte2 <= 0x39) {
-                            currentState = GB18030_FOUR_BYTE;
-
-                            if (sl - sp < 4)
-                                return CoderResult.UNDERFLOW;
-
-                            byte3 = sa[sp + 2] & 0xFF;
-                            if (byte3 < 0x81 || byte3 > 0xfe)
-                                return CoderResult.malformedForLength(3);
-
-                            byte4 = sa[sp + 3] & 0xFF;
-                            inputSize = 4;
-
-                            if (byte4 < 0x30 || byte4 > 0x39)
-                                return CoderResult.malformedForLength(4);
-                        }
-                        else if (byte2 == 0x7f || byte2 == 0xff ||
-                                (byte2 < 0x40 )) {
-                           return CoderResult.malformedForLength(2);
-                        }
-                        else
-                            currentState = GB18030_DOUBLE_BYTE;
-                    }
-
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-                    switch (currentState){
-                        case GB18030_SINGLE_BYTE:
-                            da[dp++] = (char)byte1;
-                            break;
-                        case GB18030_DOUBLE_BYTE:
-                            da[dp++] = decodeDouble(byte1, byte2);
-                            break;
-                        case GB18030_FOUR_BYTE:
-                            int offset = (((byte1 - 0x81) * 10 +
-                                           (byte2 - 0x30)) * 126 +
-                                            byte3 - 0x81) * 10 + byte4 - 0x30;
-                            int hiByte = (offset >>8) & 0xFF;
-                            int lowByte = (offset & 0xFF);
-
-                        // Mixture of table lookups and algorithmic calculation
-                        // of character values.
-
-                        // BMP Ranges
-                        if (offset <= 0x4A62)
-                            da[dp++] = getChar(offset);
-                        else if (offset > 0x4A62 && offset <= 0x82BC)
-                            da[dp++] = (char)(offset + 0x5543);
-                        else if (offset >= 0x82BD && offset <= 0x830D)
-                            da[dp++] = getChar(offset);
-                        else if (offset >= 0x830D && offset <= 0x93A8)
-                            da[dp++] = (char)(offset + 0x6557);
-                        else if (offset >= 0x93A9 && offset <= 0x99FB)
-                            da[dp++] = getChar(offset);
-                        // Supplemental UCS planes handled via surrogates
-                        else if (offset >= 0x2E248 && offset < 0x12E248) {
-                            if (offset >= 0x12E248)
-                                return CoderResult.malformedForLength(4);
-                            offset -= 0x1e248;
-                            if ( dl - dp < 2)
-                                return CoderResult.OVERFLOW;
-                            // emit high + low surrogate
-                            da[dp++] = (char)((offset - 0x10000) / 0x400 + 0xD800);
-                            da[dp++] = (char)((offset - 0x10000) % 0x400 + 0xDC00);
-                        }
-                        else
-                            return CoderResult.malformedForLength(inputSize);
-                        break;
-                      }
-                      sp += inputSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult decodeBufferLoop(ByteBuffer src,
-                                            CharBuffer dst)
-        {
-            int mark = src.position();
-
-            try {
-                while (src.hasRemaining()) {
-                    int byte1 = 0, byte2 = 0, byte3 = 0, byte4 = 0;
-                    byte1 = src.get() & 0xFF;
-                    int inputSize = 1;
-
-                    if ((byte1 & (byte)0x80) == 0){ // US-ASCII range
-                        currentState = GB18030_SINGLE_BYTE;
-                    }
-                    else if (byte1 < 0x81 || byte1 > 0xfe) {
-                        return CoderResult.malformedForLength(1);
-                    }
-                    else { // Either 2 or 4 byte sequence follows
-                        if ( src.remaining() < 1 )
-                            return CoderResult.UNDERFLOW;
-                        byte2 = src.get() & 0xFF;
-                        inputSize = 2;
-
-                        if (byte2 < 0x30)
-                                return CoderResult.malformedForLength(1);
-                        else if (byte2 >= 0x30 && byte2 <= 0x39) {
-                            currentState = GB18030_FOUR_BYTE;
-
-                            if (src.remaining() < 2)
-                                return CoderResult.UNDERFLOW;
-
-                            byte3 = src.get() & 0xFF;
-                            if (byte3 < 0x81 || byte3 > 0xfe)
-                                return CoderResult.malformedForLength(3);
-
-                            byte4 = src.get() & 0xFF;
-                            inputSize = 4;
-
-                            if (byte4 < 0x30 || byte4 > 0x39)
-                                return CoderResult.malformedForLength(4);
-                        }
-                        else if (byte2 == 0x7f || byte2 == 0xff ||
-                                (byte2 < 0x40 )) {
-                           return CoderResult.malformedForLength(2);
-                        }
-                        else
-                            currentState = GB18030_DOUBLE_BYTE;
-                    }
-
-                    if (dst.remaining() < 1)
-                        return CoderResult.OVERFLOW;
-                    switch (currentState){
-                        case GB18030_SINGLE_BYTE:
-                            dst.put((char)byte1);
-                            break;
-                        case GB18030_DOUBLE_BYTE:
-                            dst.put(decodeDouble(byte1, byte2));
-                            break;
-                        case GB18030_FOUR_BYTE:
-                            int offset = (((byte1 - 0x81) * 10 +
-                                           (byte2 - 0x30)) * 126 +
-                                            byte3 - 0x81) * 10 + byte4 - 0x30;
-                            int hiByte = (offset >>8) & 0xFF;
-                            int lowByte = (offset & 0xFF);
-
-                        // Mixture of table lookups and algorithmic calculation
-                        // of character values.
-
-                        // BMP Ranges
-                        if (offset <= 0x4A62)
-                            dst.put(getChar(offset));
-                        else if (offset > 0x4A62 && offset <= 0x82BC)
-                            dst.put((char)(offset + 0x5543));
-                        else if (offset >= 0x82BD && offset <= 0x830D)
-                            dst.put(getChar(offset));
-                        else if (offset >= 0x830D && offset <= 0x93A8)
-                            dst.put((char)(offset + 0x6557));
-                        else if (offset >= 0x93A9 && offset <= 0x99F9)
-                            dst.put(getChar(offset));
-                        // Supplemental UCS planes handled via surrogates
-                        else if (offset >= 0x2E248 && offset < 0x12E248) {
-                            if (offset >= 0x12E248)
-                                return CoderResult.malformedForLength(4);
-                            offset -= 0x1e248;
-                            if ( dst.remaining() < 2)
-                                return CoderResult.OVERFLOW;
-                            // emit high + low surrogate
-                            dst.put((char)((offset - 0x10000) / 0x400 + 0xD800));
-                            dst.put((char)((offset - 0x10000) % 0x400 + 0xDC00));
-                        } else {
-                            return CoderResult.malformedForLength(inputSize);
-                        }
-                    }
-                    mark += inputSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-
-        protected CoderResult decodeLoop(ByteBuffer src,
-                                         CharBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-    }
-
-    private static class Encoder extends CharsetEncoder {
-
-        private int currentState = GB18030_DOUBLE_BYTE;
-
-        private Encoder(Charset cs) {
-            super(cs, 4.0f, 4.0f); // max of 4 bytes per char
-        }
-
-        public boolean canEncode(char c) {
-            return ! Character.isSurrogate(c);
-        }
-
-        private final Surrogate.Parser sgp = new Surrogate.Parser();
-
-        private int getGB18030(short[] outerIndex, String[] innerEncoderIndex,
-                               char ch) {
-            int offset = outerIndex[((ch & 0xff00) >> 8 )] << 8;
-            return innerEncoderIndex[offset >> 12].charAt((offset & 0xfff) +
-                        (ch & 0xff));
-        }
-
-        protected void implReset() {
-            currentState = GB18030_DOUBLE_BYTE;
-        }
-
-        private CoderResult encodeArrayLoop(CharBuffer src,
-                                            ByteBuffer dst)
-        {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            int condensedKey = 0;  // expands to a four byte sequence
-            int hiByte = 0, loByte = 0;
-            currentState = GB18030_DOUBLE_BYTE;
-
-            try {
-                while (sp < sl) {
-                    int inputSize = 1;
-                    char c = sa[sp];
-
-                    if (Character.isSurrogate(c)) {
-                        if ((condensedKey=sgp.parse(c, sa, sp, sl)) < 0)
-                            return sgp.error();
-                        // Character.toCodePoint looks like
-                        // (((high & 0x3ff) << 10) | (low & 0x3ff)) + 0x10000;
-                        // so we add (0x2e248 - 0x10000) to get the "key".
-                        condensedKey += 0x1E248;
-                        currentState = GB18030_FOUR_BYTE;
-                        inputSize = sgp.increment();
-                    }
-                    else if (c >= 0x0000 && c <= 0x007F) {
-                        currentState = GB18030_SINGLE_BYTE;
-                    }
-                    else if (c <= 0xA4C6 || c >= 0xE000) {
-                        int outByteVal = getGB18030(encoderIndex1,
-                                                    encoderIndex2,
-                                                    c);
-                        if (outByteVal == 0xFFFD )
-                                return CoderResult.unmappableForLength(1);
-
-                        hiByte = (outByteVal & 0xFF00) >> 8;
-                        loByte = (outByteVal & 0xFF);
-
-                        condensedKey = (hiByte - 0x20) * 256 + loByte;
-
-                        if (c >= 0xE000 && c < 0xF900)
-                                condensedKey += 0x82BD;
-                        else if (c >= 0xF900)
-                                condensedKey += 0x93A9;
-
-                        if (hiByte > 0x80)
-                             currentState = GB18030_DOUBLE_BYTE;
-                        else
-                             currentState = GB18030_FOUR_BYTE;
-                    }
-                    else if (c >= 0xA4C7 && c <= 0xD7FF) {
-                        condensedKey = c - 0x5543;
-                        currentState = GB18030_FOUR_BYTE;
-                    }
-
-                    switch(currentState) {
-                        case GB18030_SINGLE_BYTE:
-                            if (dl - dp < 1)
-                                return CoderResult.OVERFLOW;
-                            da[dp++] = (byte)c;
-                            break;
-
-                        case GB18030_DOUBLE_BYTE:
-                            if (dl - dp < 2)
-                                return CoderResult.OVERFLOW;
-                            da[dp++] = (byte)hiByte;
-                            da[dp++] = (byte)loByte;
-                            break;
-
-                        case GB18030_FOUR_BYTE: // Four Byte encoding
-                            byte b1, b2, b3, b4;
-
-                            if (dl - dp < 4)
-                                return CoderResult.OVERFLOW;
-                            // Decompose the condensed key into its 4 byte equivalent
-                            b4 = (byte)((condensedKey % 10) + 0x30);
-                            condensedKey /= 10;
-                            b3 = (byte)((condensedKey % 126) + 0x81);
-                            condensedKey /= 126;
-                            b2 = (byte)((condensedKey % 10) + 0x30);
-                            b1 = (byte)((condensedKey / 10) + 0x81);
-                            da[dp++] = b1;
-                            da[dp++] = b2;
-                            da[dp++] = b3;
-                            da[dp++] = b4;
-                            break;
-                        default:
-                            assert(false);
-                        }
-                    sp += inputSize;
-                }
-            return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult encodeBufferLoop(CharBuffer src,
-                                             ByteBuffer dst)
-        {
-            int condensedKey = 0;
-            int hiByte = 0, loByte = 0;
-            currentState = GB18030_DOUBLE_BYTE;
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    char c = src.get();
-                    int inputSize = 1;
-                    if (Character.isSurrogate(c)) {
-                        if ((condensedKey = sgp.parse(c, src))<0)
-                           return sgp.error();
-                        condensedKey += 0x1e248;
-                        currentState = GB18030_FOUR_BYTE;
-                        inputSize = 2;
-                    }
-                    else if (c >= 0x0000 && c <= 0x007F) {
-                        currentState = GB18030_SINGLE_BYTE;
-                    }
-                    else if (c <= 0xA4C6 || c >= 0xE000) {
-                        int outByteVal = getGB18030(encoderIndex1,
-                                                    encoderIndex2,
-                                                    c);
-                        if (outByteVal == 0xFFFD )
-                            return CoderResult.unmappableForLength(1);
-
-                        hiByte = (outByteVal & 0xFF00) >> 8;
-                        loByte = (outByteVal & 0xFF);
-
-                        condensedKey = (hiByte - 0x20) * 256 + loByte;
-
-                        if (c >= 0xE000 && c < 0xF900)
-                                condensedKey += 0x82BD;
-                        else if (c >= 0xF900)
-                                condensedKey += 0x93A9;
-
-                        if (hiByte > 0x80)
-                             currentState = GB18030_DOUBLE_BYTE;
-                        else
-                             currentState = GB18030_FOUR_BYTE;
-                    }
-                    else if (c >= 0xA4C7 && c <= 0xD7FF) {
-                        condensedKey = c - 0x5543;
-                        currentState = GB18030_FOUR_BYTE;
-                    }
-
-                    if (currentState == GB18030_SINGLE_BYTE) {
-                        if (dst.remaining() < 1)
-                            return CoderResult.OVERFLOW;
-                        dst.put((byte)c);
-                    } else if (currentState == GB18030_DOUBLE_BYTE) {
-                        if (dst.remaining() < 2)
-                            return CoderResult.OVERFLOW;
-                        dst.put((byte)hiByte);
-                        dst.put((byte)loByte);
-                    }
-                    else { // Four Byte encoding
-                        byte b1, b2, b3, b4;
-
-                        if (dst.remaining() < 4)
-                            return CoderResult.OVERFLOW;
-                        // Decompose the condensed key into its 4 byte equivalent
-                        b4 = (byte)((condensedKey % 10) + 0x30);
-                        condensedKey /= 10;
-                        b3 = (byte)((condensedKey % 126) + 0x81);
-                        condensedKey /= 126;
-                        b2 = (byte)((condensedKey % 10) + 0x30);
-                        b1 = (byte)((condensedKey / 10) + 0x81);
-                        dst.put(b1);
-                        dst.put(b2);
-                        dst.put(b3);
-                        dst.put(b4);
-                    }
-                    mark += inputSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-        protected CoderResult encodeLoop(CharBuffer src,
-                                         ByteBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return encodeArrayLoop(src, dst);
-            else
-                return encodeBufferLoop(src, dst);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/HKSCS.java b/ojluni/src/main/java/sun/nio/cs/ext/HKSCS.java
deleted file mode 100755
index 69002ee..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/HKSCS.java
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
- * Copyright (c) 2010, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import java.util.Arrays;
-import sun.nio.cs.Surrogate;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class HKSCS {
-
-    public static class Decoder extends DoubleByte.Decoder {
-        static int b2Min = 0x40;
-        static int b2Max = 0xfe;
-
-        private char[][] b2cBmp;
-        private char[][] b2cSupp;
-        private DoubleByte.Decoder big5Dec;
-
-        protected Decoder(Charset cs,
-                          DoubleByte.Decoder big5Dec,
-                          char[][] b2cBmp, char[][] b2cSupp)
-        {
-            // super(cs, 0.5f, 1.0f);
-            // need to extends DoubleByte.Decoder so the
-            // sun.io can use it. this implementation
-            super(cs, 0.5f, 1.0f, null, null, 0, 0);
-            this.big5Dec = big5Dec;
-            this.b2cBmp = b2cBmp;
-            this.b2cSupp = b2cSupp;
-        }
-
-        public char decodeSingle(int b) {
-            return big5Dec.decodeSingle(b);
-        }
-
-        public char decodeBig5(int b1, int b2) {
-            return big5Dec.decodeDouble(b1, b2);
-        }
-
-        public char decodeDouble(int b1, int b2) {
-            return b2cBmp[b1][b2 - b2Min];
-        }
-
-        public char decodeDoubleEx(int b1, int b2) {
-            /* if the b2cSupp is null, the subclass need
-               to override the methold
-            if (b2cSupp == null)
-                return UNMAPPABLE_DECODING;
-             */
-            return b2cSupp[b1][b2 - b2Min];
-        }
-
-        protected CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    int b1 = sa[sp] & 0xff;
-                    char c = decodeSingle(b1);
-                    int inSize = 1, outSize = 1;
-                    char[] cc = null;
-                    if (c == UNMAPPABLE_DECODING) {
-                        if (sl - sp < 2)
-                            return CoderResult.UNDERFLOW;
-                        int b2 = sa[sp + 1] & 0xff;
-                        inSize++;
-                        if (b2 < b2Min || b2 > b2Max)
-                            return CoderResult.unmappableForLength(2);
-                        c = decodeDouble(b1, b2);           //bmp
-                        if (c == UNMAPPABLE_DECODING) {
-                            c = decodeDoubleEx(b1, b2);     //supp
-                            if (c == UNMAPPABLE_DECODING) {
-                                c = decodeBig5(b1, b2);     //big5
-                                if (c == UNMAPPABLE_DECODING)
-                                    return CoderResult.unmappableForLength(2);
-                            } else {
-                                // supplementary character in u+2xxxx area
-                                outSize = 2;
-                            }
-                        }
-                    }
-                    if (dl - dp < outSize)
-                        return CoderResult.OVERFLOW;
-                    if (outSize == 2) {
-                        // supplementary characters
-                        da[dp++] = Surrogate.high(0x20000 + c);
-                        da[dp++] = Surrogate.low(0x20000 + c);
-                    } else {
-                        da[dp++] = c;
-                    }
-                    sp += inSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        protected CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    char[] cc = null;
-                    int b1 = src.get() & 0xff;
-                    int inSize = 1, outSize = 1;
-                    char c = decodeSingle(b1);
-                    if (c == UNMAPPABLE_DECODING) {
-                        if (src.remaining() < 1)
-                            return CoderResult.UNDERFLOW;
-                        int b2 = src.get() & 0xff;
-                        inSize++;
-                        if (b2 < b2Min || b2 > b2Max)
-                            return CoderResult.unmappableForLength(2);
-                        c = decodeDouble(b1, b2);           //bmp
-                        if (c == UNMAPPABLE_DECODING) {
-                            c = decodeDoubleEx(b1, b2);     //supp
-                            if (c == UNMAPPABLE_DECODING) {
-                                c = decodeBig5(b1, b2);     //big5
-                                if (c == UNMAPPABLE_DECODING)
-                                    return CoderResult.unmappableForLength(2);
-                            } else {
-                                outSize = 2;
-                            }
-                        }
-                    }
-                    if (dst.remaining() < outSize)
-                        return CoderResult.OVERFLOW;
-                    if (outSize == 2) {
-                        dst.put(Surrogate.high(0x20000 + c));
-                        dst.put(Surrogate.low(0x20000 + c));
-                    } else {
-                        dst.put(c);
-                    }
-                    mark += inSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            if (src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-
-        static void initb2c(char[][]b2c, String[] b2cStr)
-        {
-            for (int i = 0; i < b2cStr.length; i++) {
-                if (b2cStr[i] == null)
-                    b2c[i] = DoubleByte.B2C_UNMAPPABLE;
-                else
-                    b2c[i] = b2cStr[i].toCharArray();
-            }
-        }
-
-    }
-
-    public static class Encoder extends DoubleByte.Encoder {
-        private DoubleByte.Encoder big5Enc;
-        private char[][] c2bBmp;
-        private char[][] c2bSupp;
-
-        protected Encoder(Charset cs,
-                          DoubleByte.Encoder big5Enc,
-                          char[][] c2bBmp,
-                          char[][] c2bSupp)
-        {
-            super(cs, null, null);
-            this.big5Enc = big5Enc;
-            this.c2bBmp = c2bBmp;
-            this.c2bSupp = c2bSupp;
-        }
-
-        public int encodeBig5(char ch) {
-            return big5Enc.encodeChar(ch);
-        }
-
-        public int encodeChar(char ch) {
-            int bb = c2bBmp[ch >> 8][ch & 0xff];
-            if (bb == UNMAPPABLE_ENCODING)
-                return encodeBig5(ch);
-            return bb;
-        }
-
-        public int encodeSupp(int cp) {
-            if ((cp & 0xf0000) != 0x20000)
-                return UNMAPPABLE_ENCODING;
-            return c2bSupp[(cp >> 8) & 0xff][cp & 0xff];
-        }
-
-        public boolean canEncode(char c) {
-            return encodeChar(c) != UNMAPPABLE_ENCODING;
-        }
-
-        protected CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    int inSize = 1;
-                    int bb = encodeChar(c);
-                    if (bb == UNMAPPABLE_ENCODING) {
-                        if (Character.isSurrogate(c)) {
-                            int cp;
-                            if ((cp = sgp().parse(c, sa, sp, sl)) < 0)
-                                return sgp.error();
-                            bb = encodeSupp(cp);
-                            if (bb == UNMAPPABLE_ENCODING)
-                                return CoderResult.unmappableForLength(2);
-                            inSize = 2;
-                        } else {
-                            return CoderResult.unmappableForLength(1);
-                        }
-                    }
-                    if (bb > MAX_SINGLEBYTE) {    // DoubleByte
-                        if (dl - dp < 2)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = (byte)(bb >> 8);
-                        da[dp++] = (byte)bb;
-                    } else {                      // SingleByte
-                        if (dl - dp < 1)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = (byte)bb;
-                    }
-                    sp += inSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        protected CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    int inSize = 1;
-                    char c = src.get();
-                    int bb = encodeChar(c);
-                    if (bb == UNMAPPABLE_ENCODING) {
-                        if (Character.isSurrogate(c)) {
-                            int cp;
-                            if ((cp = sgp().parse(c, src)) < 0)
-                                return sgp.error();
-                            bb = encodeSupp(cp);
-                            if (bb == UNMAPPABLE_ENCODING)
-                                return CoderResult.unmappableForLength(2);
-                            inSize = 2;
-                        } else {
-                            return CoderResult.unmappableForLength(1);
-                        }
-                    }
-                    if (bb > MAX_SINGLEBYTE) {  // DoubleByte
-                        if (dst.remaining() < 2)
-                            return CoderResult.OVERFLOW;
-                        dst.put((byte)(bb >> 8));
-                        dst.put((byte)(bb));
-                    } else {
-                        if (dst.remaining() < 1)
-                        return CoderResult.OVERFLOW;
-                        dst.put((byte)bb);
-                    }
-                    mark += inSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            if (src.hasArray() && dst.hasArray())
-                return encodeArrayLoop(src, dst);
-            else
-                return encodeBufferLoop(src, dst);
-        }
-
-        static char[] C2B_UNMAPPABLE = new char[0x100];
-        static {
-            Arrays.fill(C2B_UNMAPPABLE, (char)UNMAPPABLE_ENCODING);
-        }
-
-       static void initc2b(char[][] c2b, String[] b2cStr, String pua) {
-            // init c2b/c2bSupp from b2cStr and supp
-            int b2Min = 0x40;
-            Arrays.fill(c2b, C2B_UNMAPPABLE);
-            for (int b1 = 0; b1 < 0x100; b1++) {
-                String s = b2cStr[b1];
-                if (s == null)
-                    continue;
-                for (int i = 0; i < s.length(); i++) {
-                    char c = s.charAt(i);
-                    int hi = c >> 8;
-                    if (c2b[hi] == C2B_UNMAPPABLE) {
-                        c2b[hi] = new char[0x100];
-                        Arrays.fill(c2b[hi], (char)UNMAPPABLE_ENCODING);
-                    }
-                    c2b[hi][c & 0xff] = (char)((b1 << 8) | (i + b2Min));
-                }
-            }
-            if (pua != null) {        // add the compatibility pua entries
-                char c = '\ue000';    //first pua character
-                for (int i = 0; i < pua.length(); i++) {
-                    char bb = pua.charAt(i);
-                    if (bb != UNMAPPABLE_DECODING) {
-                        int hi = c >> 8;
-                        if (c2b[hi] == C2B_UNMAPPABLE) {
-                            c2b[hi] = new char[0x100];
-                            Arrays.fill(c2b[hi], (char)UNMAPPABLE_ENCODING);
-                        }
-                        c2b[hi][c & 0xff] = bb;
-                    }
-                    c++;
-                }
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/IBM33722.java b/ojluni/src/main/java/sun/nio/cs/ext/IBM33722.java
deleted file mode 100755
index b9063e5..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/IBM33722.java
+++ /dev/null
@@ -1,7178 +0,0 @@
-
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.HistoricallyNamedCharset;
-
-public class IBM33722
-    extends Charset
-    implements HistoricallyNamedCharset
-{
-
-    public IBM33722() {
-        super("x-IBM33722", ExtendedCharsets.aliasesFor("x-IBM33722"));
-    }
-
-    public String historicalName() {
-        return "Cp33722";
-    }
-
-    public boolean contains(Charset cs) {
-        return (cs instanceof IBM33722);
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-
-    /**
-     * These accessors are temporarily supplied while sun.io
-     * converters co-exist with the sun.nio.cs.{ext} charset coders
-     * These facilitate sharing of conversion tables between the
-     * two co-existing implementations. When sun.io converters
-     * are made extinct these will be unncessary and should be removed
-     */
-
-    public String getDecoderSingleByteMappings() {
-        return Decoder.byteToCharTable;
-    }
-
-    public String getDecoderMappingTableG1() {
-        return Decoder.mappingTableG1;
-    }
-
-    public String getDecoderMappingTableG2() {
-        return Decoder.mappingTableG2;
-    }
-
-    public String getDecoderMappingTableG3() {
-        return Decoder.mappingTableG3;
-    }
-
-    public short[] getEncoderIndex1() {
-        return Encoder.index1;
-
-    }
-    public String getEncoderIndex2() {
-        return Encoder.index2;
-    }
-
-    public String getEncoderIndex2a() {
-        return Encoder.index2a;
-    }
-
-    public String getEncoderIndex2b() {
-        return Encoder.index2b;
-    }
-
-    protected static class Decoder extends CharsetDecoder {
-
-        private final int G0 = 0;
-        private final int G1 = 1;
-        private final int G2 = 2;
-        private final int G3 = 3;
-        private final int G4 = 4;
-        private final int SS2 =  0x8E;
-        private final int SS3 =  0x8F;
-
-        private int firstByte, state;
-
-        public Decoder(Charset cs) {
-                super(cs, 1.0f, 1.0f);
-        }
-
-        private CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-            while (sp < sl) {
-                int byte1, byte2;
-                int inputSize = 1;
-                char outputChar = '\uFFFD';
-                byte1 = sa[sp] & 0xff;
-
-                if (byte1 == SS2) {
-                    if (sl - sp < 2) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    byte1 = sa[sp + 1] & 0xff;
-                    inputSize = 2;
-                    if ( byte1 < 0xa1 || byte1 > 0xfe) {   //valid first byte for G2
-                        return CoderResult.malformedForLength(2);
-                    }
-                    outputChar = mappingTableG2.charAt(byte1 - 0xa1);
-                } else if(byte1 == SS3 ) {                 //G3
-                    if (sl - sp < 3) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    byte1 = sa[sp + 1] & 0xff;
-                    byte2 = sa[sp + 2] & 0xff;
-                    inputSize = 3;
-                    if ( byte1 < 0xa1 || byte1 > 0xfe) {
-                        return CoderResult.malformedForLength(2);
-                    }
-                    if ( byte2 < 0xa1 || byte2 > 0xfe) {
-                        return CoderResult.malformedForLength(3);
-                    }
-                    outputChar = mappingTableG3.charAt(((byte1 - 0xa1) * 94) + byte2 - 0xa1);
-                } else if ( byte1 <= 0x9f ) {                // valid single byte
-                    outputChar = byteToCharTable.charAt(byte1);
-                } else if (byte1 < 0xa1 || byte1 > 0xfe) {   // invalid range?
-                    return CoderResult.malformedForLength(1);
-                } else {                                     // G1
-                    if (sl - sp < 2) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    byte2 = sa[sp + 1] & 0xff;
-                    inputSize = 2;
-                    if ( byte2 < 0xa1 || byte2 > 0xfe) {
-                        return CoderResult.malformedForLength(2);
-                    }
-                    outputChar = mappingTableG1.charAt(((byte1 - 0xa1) * 94) + byte2 - 0xa1);
-                }
-                if  (outputChar == '\uFFFD')
-                    return CoderResult.unmappableForLength(inputSize);
-                if (dl - dp < 1)
-                    return CoderResult.OVERFLOW;
-                da[dp++] = outputChar;
-                sp += inputSize;
-            }
-            return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    int byte1, byte2;
-                    int inputSize = 1;
-                    char outputChar = '\uFFFD';
-                    byte1 = src.get() & 0xff;
-
-                    if (byte1 == SS2) {
-                        if (!src.hasRemaining())
-                            return CoderResult.UNDERFLOW;
-                        byte1 = src.get() & 0xff;
-                        inputSize = 2;
-                        if ( byte1 < 0xa1 || byte1 > 0xfe) {   //valid first byte for G2
-                            return CoderResult.malformedForLength(2);
-                        }
-                        outputChar = mappingTableG2.charAt(byte1 - 0xa1);
-                    } else if (byte1 == SS3 ) {                 //G3
-                        if (src.remaining() < 2)
-                            return CoderResult.UNDERFLOW;
-
-                        byte1 = src.get() & 0xff;
-                        if ( byte1 < 0xa1 || byte1 > 0xfe) {
-                            return CoderResult.malformedForLength(2);
-                        }
-                        byte2 = src.get() & 0xff;
-                        if ( byte2 < 0xa1 || byte2 > 0xfe) {
-                            return CoderResult.malformedForLength(3);
-                        }
-                        inputSize = 3;
-                        outputChar = mappingTableG3.charAt(((byte1 - 0xa1) * 94) + byte2 - 0xa1);
-                    } else if ( byte1 <= 0x9f ) {                // valid single byte
-                        outputChar = byteToCharTable.charAt(byte1);
-                    } else if (byte1 < 0xa1 || byte1 > 0xfe) {   // invalid range?
-                        return CoderResult.malformedForLength(1);
-                    } else {                                     // G1
-                        if (src.remaining() < 1)
-                            return CoderResult.UNDERFLOW;
-                        byte2 = src.get() & 0xff;
-                        if ( byte2 < 0xa1 || byte2 > 0xfe) {
-                            return CoderResult.malformedForLength(2);
-                        }
-                        inputSize = 2;
-                        outputChar = mappingTableG1.charAt(((byte1 - 0xa1) * 94) + byte2 - 0xa1);
-                    }
-
-                    if (outputChar == '\uFFFD')
-                        return CoderResult.unmappableForLength(inputSize);
-                    if (!dst.hasRemaining())
-                        return CoderResult.OVERFLOW;
-                    dst.put(outputChar);
-                    mark += inputSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                    src.position(mark);
-            }
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            if (true && src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-
-        private final static String byteToCharTable;
-        private final static String mappingTableG1;
-        private final static String mappingTableG2;
-        private final static String mappingTableG3;
-        static {
-            byteToCharTable =
-                "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" +
-                "\u0008\u0009\n\u000B\u000C\r\u000E\u000F" +
-                "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" +
-                "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" +
-                "\u0020\u0021\"\u0023\u0024\u0025\u0026\u0027" +
-                "\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F" +
-                "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037" +
-                "\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u003F" +
-                "\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047" +
-                "\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F" +
-                "\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057" +
-                "\u0058\u0059\u005A\u005B\u00A5\u005D\u005E\u005F" +
-                "\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067" +
-                "\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F" +
-                "\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077" +
-                "\u0078\u0079\u007A\u007B\u007C\u007D\u203E\u007F" +
-                "\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087" +
-                "\u0088\u0089\u008A\u008B\u008C\u008D\uFFFD\uFFFD" +
-                "\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097" +
-                "\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F"
-                ;
-            mappingTableG1 =
-                "\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B" +
-                "\uFF1F\uFF01\u309B\u309C\u00B4\uFF40\u00A8\uFF3E" +
-                "\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD" +
-                "\u3005\u3006\u3007\u30FC\u2014\u2010\uFF0F\uFF3C" +
-                "\u301C\u2016\uFF5C\u2026\u2025\u2018\u2019\u201C" +
-                "\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B" +
-                "\uFF5D\u3008\u3009\u300A\u300B\u300C\u300D\u300E" +
-                "\u300F\u3010\u3011\uFF0B\u2212\u00B1\u00D7\u00F7" +
-                "\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234" +
-                "\u2642\u2640\u00B0\u2032\u2033\u2103\uFFE5\uFF04" +
-                "\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7" +
-                "\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1" +
-                "\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192" +
-                "\u2190\u2191\u2193\u3013\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2208" +
-                "\u220B\u2286\u2287\u2282\u2283\u222A\u2229\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2227" +
-                "\u2228\uFFE2\u21D2\u21D4\u2200\u2203\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u2220\u22A5\u2312\u2202\u2207\u2261\u2252" +
-                "\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u212B" +
-                "\u2030\u266F\u266D\u266A\u2020\u2021\u00B6\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u25EF\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFF10\uFF11\uFF12\uFF13\uFF14" +
-                "\uFF15\uFF16\uFF17\uFF18\uFF19\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFF21\uFF22\uFF23\uFF24" +
-                "\uFF25\uFF26\uFF27\uFF28\uFF29\uFF2A\uFF2B\uFF2C" +
-                "\uFF2D\uFF2E\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34" +
-                "\uFF35\uFF36\uFF37\uFF38\uFF39\uFF3A\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFF41\uFF42\uFF43\uFF44" +
-                "\uFF45\uFF46\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C" +
-                "\uFF4D\uFF4E\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54" +
-                "\uFF55\uFF56\uFF57\uFF58\uFF59\uFF5A\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u3041\u3042\u3043\u3044\u3045\u3046" +
-                "\u3047\u3048\u3049\u304A\u304B\u304C\u304D\u304E" +
-                "\u304F\u3050\u3051\u3052\u3053\u3054\u3055\u3056" +
-                "\u3057\u3058\u3059\u305A\u305B\u305C\u305D\u305E" +
-                "\u305F\u3060\u3061\u3062\u3063\u3064\u3065\u3066" +
-                "\u3067\u3068\u3069\u306A\u306B\u306C\u306D\u306E" +
-                "\u306F\u3070\u3071\u3072\u3073\u3074\u3075\u3076" +
-                "\u3077\u3078\u3079\u307A\u307B\u307C\u307D\u307E" +
-                "\u307F\u3080\u3081\u3082\u3083\u3084\u3085\u3086" +
-                "\u3087\u3088\u3089\u308A\u308B\u308C\u308D\u308E" +
-                "\u308F\u3090\u3091\u3092\u3093\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u30A1\u30A2\u30A3\u30A4\u30A5\u30A6\u30A7\u30A8" +
-                "\u30A9\u30AA\u30AB\u30AC\u30AD\u30AE\u30AF\u30B0" +
-                "\u30B1\u30B2\u30B3\u30B4\u30B5\u30B6\u30B7\u30B8" +
-                "\u30B9\u30BA\u30BB\u30BC\u30BD\u30BE\u30BF\u30C0" +
-                "\u30C1\u30C2\u30C3\u30C4\u30C5\u30C6\u30C7\u30C8" +
-                "\u30C9\u30CA\u30CB\u30CC\u30CD\u30CE\u30CF\u30D0" +
-                "\u30D1\u30D2\u30D3\u30D4\u30D5\u30D6\u30D7\u30D8" +
-                "\u30D9\u30DA\u30DB\u30DC\u30DD\u30DE\u30DF\u30E0" +
-                "\u30E1\u30E2\u30E3\u30E4\u30E5\u30E6\u30E7\u30E8" +
-                "\u30E9\u30EA\u30EB\u30EC\u30ED\u30EE\u30EF\u30F0" +
-                "\u30F1\u30F2\u30F3\u30F4\u30F5\u30F6\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0391\u0392" +
-                "\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A" +
-                "\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3" +
-                "\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u03B1\u03B2" +
-                "\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA" +
-                "\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3" +
-                "\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u0410\u0411\u0412\u0413" +
-                "\u0414\u0415\u0401\u0416\u0417\u0418\u0419\u041A" +
-                "\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422" +
-                "\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A" +
-                "\u042B\u042C\u042D\u042E\u042F\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u0430\u0431\u0432\u0433" +
-                "\u0434\u0435\u0451\u0436\u0437\u0438\u0439\u043A" +
-                "\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442" +
-                "\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A" +
-                "\u044B\u044C\u044D\u044E\u044F\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u2500\u2502\u250C\u2510\u2518\u2514" +
-                "\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F" +
-                "\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B" +
-                "\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525" +
-                "\u2538\u2542\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u4E9C\u5516\u5A03\u963F\u54C0\u611B" +
-                "\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1" +
-                "\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1" +
-                "\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E" +
-                "\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848" +
-                "\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049" +
-                "\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170" +
-                "\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF" +
-                "\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95" +
-                "\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2" +
-                "\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD" +
-                "\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D" +
-                "\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF" +
-                "\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893" +
-                "\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5" +
-                "\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2" +
-                "\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3" +
-                "\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834" +
-                "\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5" +
-                "\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\u5712" +
-                "\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF" +
-                "\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276" +
-                "\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A" +
-                "\u7525\u51F9\u592E\u5965\u5F80\u5FDC\u62BC\u65FA" +
-                "\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E" +
-                "\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6" +
-                "\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F" +
-                "\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73" +
-                "\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1" +
-                "\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D" +
-                "\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF" +
-                "\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E" +
-                "\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD" +
-                "\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3" +
-                "\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062" +
-                "\u61D0\u6212\u62D0\u6539\u9B41\u6666\u68B0\u6D77" +
-                "\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E" +
-                "\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168" +
-                "\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8" +
-                "\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283" +
-                "\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB" +
-                "\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED" +
-                "\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E" +
-                "\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D\u6F5F\u5272" +
-                "\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910" +
-                "\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A" +
-                "\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822" +
-                "\u8305\u8431\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83" +
-                "\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A" +
-                "\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F" +
-                "\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E" +
-                "\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3" +
-                "\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D" +
-                "\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593" +
-                "\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B" +
-                "\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B" +
-                "\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C" +
-                "\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E" +
-                "\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4" +
-                "\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63" +
-                "\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC" +
-                "\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993" +
-                "\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947" +
-                "\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409" +
-                "\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD" +
-                "\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7" +
-                "\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\u673D" +
-                "\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08" +
-                "\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8" +
-                "\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8" +
-                "\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\u4F9B\u4FA0" +
-                "\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F" +
-                "\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050" +
-                "\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF" +
-                "\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957" +
-                "\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2" +
-                "\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE" +
-                "\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B" +
-                "\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1" +
-                "\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396" +
-                "\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A" +
-                "\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32" +
-                "\u6ADB\u91E7\u5C51\u5C48\u6398\u7A9F\u6C93\u9774" +
-                "\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851" +
-                "\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1" +
-                "\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553" +
-                "\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176" +
-                "\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13" +
-                "\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E" +
-                "\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F" +
-                "\u82B8\u8FCE\u9BE8\u5287\u621F\u6483\u6FC0\u9699" +
-                "\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840" +
-                "\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238" +
-                "\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8" +
-                "\u62F3\u6372\u691C\u6A29\u727D\u72AC\u732E\u7814" +
-                "\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2" +
-                "\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F" +
-                "\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43" +
-                "\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C" +
-                "\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545" +
-                "\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0" +
-                "\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94" +
-                "\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1" +
-                "\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77" +
-                "\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016" +
-                "\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411" +
-                "\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F" +
-                "\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18" +
-                "\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643" +
-                "\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69" +
-                "\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05" +
-                "\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154" +
-                "\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC" +
-                "\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\u9805" +
-                "\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5" +
-                "\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A" +
-                "\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170" +
-                "\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\u6B64\u9803" +
-                "\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F" +
-                "\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42" +
-                "\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB" +
-                "\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7" +
-                "\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB" +
-                "\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D" +
-                "\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC" +
-                "\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1" +
-                "\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E" +
-                "\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628" +
-                "\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD" +
-                "\u7B39\u5319\u518A\u5237\u5BDF\u62F6\u64AE\u64E6" +
-                "\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306" +
-                "\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8" +
-                "\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82" +
-                "\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B" +
-                "\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3" +
-                "\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02" +
-                "\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD" +
-                "\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345\u7949\u79C1" +
-                "\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E" +
-                "\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC" +
-                "\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148" +
-                "\u6301\u6642\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4" +
-                "\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50" +
-                "\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB" +
-                "\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F" +
-                "\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4" +
-                "\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368" +
-                "\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA" +
-                "\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C" +
-                "\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9" +
-                "\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0" +
-                "\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A" +
-                "\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468" +
-                "\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0" +
-                "\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846" +
-                "\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6" +
-                "\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4" +
-                "\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919" +
-                "\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA" +
-                "\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C" +
-                "\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\u6E96" +
-                "\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6" +
-                "\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72" +
-                "\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F" +
-                "\u5F90\u6055\u92E4\u9664\u50B7\u511F\u52DD\u5320" +
-                "\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE" +
-                "\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A" +
-                "\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607" +
-                "\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC" +
-                "\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701" +
-                "\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39" +
-                "\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C" +
-                "\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418" +
-                "\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270" +
-                "\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761" +
-                "\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8" +
-                "\u9320\u5631\u57F4\u98FE\u62ED\u690D\u6B96\u71ED" +
-                "\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B" +
-                "\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3" +
-                "\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1" +
-                "\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF" +
-                "\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707" +
-                "\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D" +
-                "\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808" +
-                "\u9162\u56F3\u53A8\u9017\u5439\u5782\u5E25\u63A8" +
-                "\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154" +
-                "\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570" +
-                "\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817" +
-                "\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16\u702C\u755D" +
-                "\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210" +
-                "\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05" +
-                "\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F" +
-                "\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589" +
-                "\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614" +
-                "\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64" +
-                "\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298" +
-                "\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749" +
-                "\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD" +
-                "\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17" +
-                "\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA" +
-                "\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE" +
-                "\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D" +
-                "\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE" +
-                "\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9" +
-                "\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44" +
-                "\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC" +
-                "\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64" +
-                "\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\u64CD" +
-                "\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89" +
-                "\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349" +
-                "\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D" +
-                "\u9397\u971C\u9A12\u50CF\u5897\u618E\u81D3\u8535" +
-                "\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349" +
-                "\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF" +
-                "\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A" +
-                "\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51" +
-                "\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955" +
-                "\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1" +
-                "\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE" +
-                "\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A" +
-                "\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C" +
-                "\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E" +
-                "\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE" +
-                "\u8338\u51E7\u86F8\u53EA\u53E9\u4F46\u9054\u8FB0" +
-                "\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8" +
-                "\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5" +
-                "\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF" +
-                "\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3" +
-                "\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7" +
-                "\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4" +
-                "\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C" +
-                "\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92\u8336\u5AE1" +
-                "\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1" +
-                "\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17" +
-                "\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB" +
-                "\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B" +
-                "\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A" +
-                "\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85" +
-                "\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4" +
-                "\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C" +
-                "\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802" +
-                "\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4" +
-                "\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A" +
-                "\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243" +
-                "\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7" +
-                "\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887" +
-                "\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013" +
-                "\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575" +
-                "\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9" +
-                "\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55" +
-                "\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9" +
-                "\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835" +
-                "\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B" +
-                "\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA" +
-                "\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\u51CD" +
-                "\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B" +
-                "\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7" +
-                "\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977" +
-                "\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\u8463\u8569" +
-                "\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419" +
-                "\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802" +
-                "\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404" +
-                "\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C" +
-                "\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803" +
-                "\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5" +
-                "\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A" +
-                "\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185" +
-                "\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962" +
-                "\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D" +
-                "\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679" +
-                "\u5EFF\u65E5\u4E73\u5165\u5982\u5C3F\u97EE\u4EFB" +
-                "\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471" +
-                "\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98" +
-                "\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D" +
-                "\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A" +
-                "\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46" +
-                "\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557" +
-                "\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D" +
-                "\u57F9\u5A92\u6885\u6973\u7164\u72FD\u8CB7\u58F2" +
-                "\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F" +
-                "\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95" +
-                "\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB" +
-                "\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48" +
-                "\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C" +
-                "\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5" +
-                "\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A" +
-                "\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E" +
-                "\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9" +
-                "\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A" +
-                "\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983" +
-                "\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4" +
-                "\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5" +
-                "\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38" +
-                "\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E" +
-                "\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D" +
-                "\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867" +
-                "\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19" +
-                "\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF" +
-                "\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED" +
-                "\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3" +
-                "\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66" +
-                "\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\u65A7" +
-                "\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C" +
-                "\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66" +
-                "\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A" +
-                "\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\u798F\u8179" +
-                "\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269" +
-                "\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A" +
-                "\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19" +
-                "\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26" +
-                "\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656" +
-                "\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247" +
-                "\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29" +
-                "\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69" +
-                "\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A" +
-                "\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446" +
-                "\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1" +
-                "\u6367\u653E\u65B9\u670B\u6CD5\u6CE1\u70F9\u7832" +
-                "\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A" +
-                "\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1" +
-                "\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F" +
-                "\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8" +
-                "\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317" +
-                "\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46" +
-                "\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C" +
-                "\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54\u9EBB\u57CB" +
-                "\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C" +
-                "\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8" +
-                "\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07" +
-                "\u6162\u6E80\u6F2B\u8513\u5473\u672A\u9B45\u5DF3" +
-                "\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108" +
-                "\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F" +
-                "\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D" +
-                "\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D" +
-                "\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478" +
-                "\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2" +
-                "\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF" +
-                "\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B" +
-                "\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE" +
-                "\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D" +
-                "\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652" +
-                "\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5" +
-                "\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C" +
-                "\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091" +
-                "\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89" +
-                "\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA" +
-                "\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194" +
-                "\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21" +
-                "\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\u6C83" +
-                "\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765" +
-                "\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71" +
-                "\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229" +
-                "\u540F\u5C65\u674E\u68A8\u7406\u7483\u75E2\u88CF" +
-                "\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E" +
-                "\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B" +
-                "\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C" +
-                "\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881" +
-                "\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2" +
-                "\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398" +
-                "\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57" +
-                "\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36" +
-                "\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3" +
-                "\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74" +
-                "\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23" +
-                "\u7149\u7C3E\u7DF4\u806F\u84EE\u9023\u932C\u5442" +
-                "\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41" +
-                "\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262" +
-                "\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93" +
-                "\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A" +
-                "\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10" +
-                "\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36" +
-                "\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B" +
-                "\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2" +
-                "\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2" +
-                "\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30" +
-                "\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98" +
-                "\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118" +
-                "\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0" +
-                "\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005" +
-                "\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011" +
-                "\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A" +
-                "\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2" +
-                "\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED" +
-                "\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116" +
-                "\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B" +
-                "\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169" +
-                "\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F" +
-                "\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9" +
-                "\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD" +
-                "\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\u51F0" +
-                "\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A" +
-                "\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E" +
-                "\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D" +
-                "\u5294\u5292\u5271\u5288\u5291\u8FA8\u8FA7\u52AC" +
-                "\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3" +
-                "\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306" +
-                "\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323" +
-                "\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17" +
-                "\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B" +
-                "\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0" +
-                "\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE" +
-                "\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D" +
-                "\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475" +
-                "\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480" +
-                "\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5" +
-                "\u54AC\u54C4\u54C8\u54A8\u54AB\u54C2\u54A4\u54BE" +
-                "\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE" +
-                "\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E" +
-                "\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599" +
-                "\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E" +
-                "\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5" +
-                "\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616" +
-                "\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634" +
-                "\u5636\u5632\u5638\u566B\u5664\u562F\u566C\u566A" +
-                "\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE" +
-                "\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8" +
-                "\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF" +
-                "\u5704\u5709\u5708\u570B\u570D\u5713\u5718\u5716" +
-                "\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740" +
-                "\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793" +
-                "\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4" +
-                "\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D" +
-                "\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D" +
-                "\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB" +
-                "\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8" +
-                "\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB" +
-                "\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925" +
-                "\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950" +
-                "\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969" +
-                "\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6" +
-                "\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11" +
-                "\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36" +
-                "\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD" +
-                "\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C" +
-                "\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43" +
-                "\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69" +
-                "\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\u5B83" +
-                "\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4" +
-                "\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3" +
-                "\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28" +
-                "\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\u5C50\u5C4F" +
-                "\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91" +
-                "\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5" +
-                "\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C" +
-                "\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11" +
-                "\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E" +
-                "\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2" +
-                "\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9" +
-                "\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5" +
-                "\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44" +
-                "\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64" +
-                "\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1" +
-                "\u5EC2\u5EC8\u5ED0\u5ECF\u5ED6\u5EE3\u5EDD\u5EDA" +
-                "\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3" +
-                "\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C" +
-                "\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48" +
-                "\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61" +
-                "\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88" +
-                "\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD" +
-                "\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3" +
-                "\u5FFF\u6021\u6060\u6019\u6010\u6029\u600E\u6031" +
-                "\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041" +
-                "\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043" +
-                "\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7" +
-                "\u6083\u609A\u6084\u609B\u6096\u6097\u6092\u60A7" +
-                "\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD" +
-                "\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7" +
-                "\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D" +
-                "\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C" +
-                "\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158" +
-                "\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F" +
-                "\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194" +
-                "\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9" +
-                "\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD" +
-                "\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC" +
-                "\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B" +
-                "\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241" +
-                "\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282" +
-                "\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294" +
-                "\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8" +
-                "\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C" +
-                "\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350" +
-                "\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB" +
-                "\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\u6369" +
-                "\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6" +
-                "\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D" +
-                "\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A" +
-                "\u6495\u6493\u64A5\u64A9\u6488\u64BC\u64DA\u64D2" +
-                "\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209" +
-                "\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4" +
-                "\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524" +
-                "\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B" +
-                "\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572" +
-                "\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7" +
-                "\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9" +
-                "\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773" +
-                "\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641" +
-                "\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670" +
-                "\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1" +
-                "\u66B9\u66C9\u66BE\u66BC\u66C4\u66B8\u66D6\u66DA" +
-                "\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F" +
-                "\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736" +
-                "\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763" +
-                "\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B" +
-                "\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3" +
-                "\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9" +
-                "\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840" +
-                "\u684D\u6832\u684E\u68B3\u682B\u6859\u6863\u6877" +
-                "\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883" +
-                "\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D" +
-                "\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1" +
-                "\u690C\u68CD\u68D4\u68E7\u68D5\u6936\u6912\u6904" +
-                "\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A" +
-                "\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978" +
-                "\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959" +
-                "\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE" +
-                "\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA" +
-                "\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C" +
-                "\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A" +
-                "\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14" +
-                "\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C" +
-                "\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48" +
-                "\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3" +
-                "\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC" +
-                "\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05" +
-                "\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37" +
-                "\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59" +
-                "\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80" +
-                "\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA" +
-                "\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6" +
-                "\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\u9EBE" +
-                "\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55" +
-                "\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E" +
-                "\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD" +
-                "\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\u6CBA\u6CDB" +
-                "\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D" +
-                "\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93" +
-                "\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85" +
-                "\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6" +
-                "\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9" +
-                "\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19" +
-                "\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D" +
-                "\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38" +
-                "\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF" +
-                "\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F" +
-                "\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2" +
-                "\u6F31\u6EEF\u6F32\u6ECC\u6F3E\u6F13\u6EF7\u6F86" +
-                "\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D" +
-                "\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3" +
-                "\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5" +
-                "\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B" +
-                "\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74" +
-                "\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063" +
-                "\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE" +
-                "\u70DF\u70CB\u70DD\u70D9\u7109\u70FD\u711C\u7119" +
-                "\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C" +
-                "\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9" +
-                "\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7" +
-                "\u71F5\u71FC\u71F9\u71FF\u720D\u7210\u721B\u7228" +
-                "\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240" +
-                "\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287" +
-                "\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6" +
-                "\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7" +
-                "\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F" +
-                "\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A" +
-                "\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3" +
-                "\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405" +
-                "\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F" +
-                "\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476" +
-                "\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1" +
-                "\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1" +
-                "\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D" +
-                "\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D" +
-                "\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567" +
-                "\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A" +
-                "\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2" +
-                "\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD" +
-                "\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\u75FC" +
-                "\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609" +
-                "\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630" +
-                "\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662" +
-                "\u7668\u7669\u766A\u7667\u766C\u7670\u7672\u7676" +
-                "\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696" +
-                "\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA" +
-                "\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7" +
-                "\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724" +
-                "\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A" +
-                "\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E" +
-                "\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF" +
-                "\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC" +
-                "\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A" +
-                "\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3" +
-                "\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE" +
-                "\u78BC\u78C5\u78CA\u78EC\u78E7\u78DA\u78FD\u78F4" +
-                "\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960" +
-                "\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A" +
-                "\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA" +
-                "\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D" +
-                "\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E" +
-                "\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D" +
-                "\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96" +
-                "\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4\u7ABF\u9083" +
-                "\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA" +
-                "\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F" +
-                "\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28" +
-                "\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45" +
-                "\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E" +
-                "\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92" +
-                "\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4" +
-                "\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60" +
-                "\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6" +
-                "\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C" +
-                "\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64" +
-                "\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD" +
-                "\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE" +
-                "\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC" +
-                "\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06" +
-                "\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32" +
-                "\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68" +
-                "\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D" +
-                "\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB" +
-                "\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8" +
-                "\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A" +
-                "\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22" +
-                "\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\u7E32" +
-                "\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79" +
-                "\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE" +
-                "\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94" +
-                "\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\u7F45\u7F4C" +
-                "\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F" +
-                "\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83" +
-                "\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3" +
-                "\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5" +
-                "\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3" +
-                "\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019" +
-                "\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052" +
-                "\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070" +
-                "\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B" +
-                "\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9" +
-                "\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B" +
-                "\u8129\u8123\u812F\u814B\u968B\u8146\u813E\u8153" +
-                "\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183" +
-                "\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3" +
-                "\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD" +
-                "\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8" +
-                "\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE" +
-                "\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216" +
-                "\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D" +
-                "\u825A\u825F\u8264\u8262\u8268\u826A\u826B\u822E" +
-                "\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F" +
-                "\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3" +
-                "\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC" +
-                "\u8309\u82D9\u8335\u8334\u8316\u8332\u8331\u8340" +
-                "\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385" +
-                "\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387" +
-                "\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8" +
-                "\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B" +
-                "\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420" +
-                "\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A" +
-                "\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446" +
-                "\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF" +
-                "\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6" +
-                "\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C" +
-                "\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548" +
-                "\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591" +
-                "\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C" +
-                "\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0" +
-                "\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B" +
-                "\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D" +
-                "\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9" +
-                "\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0" +
-                "\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\u86DF" +
-                "\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB" +
-                "\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737" +
-                "\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C" +
-                "\u874E\u8774\u8757\u8768\u876E\u8759\u8753\u8763" +
-                "\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD" +
-                "\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6" +
-                "\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6" +
-                "\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821" +
-                "\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852" +
-                "\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875" +
-                "\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899" +
-                "\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4" +
-                "\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4" +
-                "\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E" +
-                "\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938" +
-                "\u894C\u891D\u8960\u895E\u8966\u8964\u896D\u896A" +
-                "\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993" +
-                "\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA" +
-                "\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4" +
-                "\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25" +
-                "\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D" +
-                "\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91" +
-                "\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA" +
-                "\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14\u8AE0\u8AE2" +
-                "\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16" +
-                "\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E" +
-                "\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B" +
-                "\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80" +
-                "\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A" +
-                "\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62" +
-                "\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D" +
-                "\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD" +
-                "\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3" +
-                "\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07" +
-                "\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16" +
-                "\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE" +
-                "\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA" +
-                "\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D" +
-                "\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A" +
-                "\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60" +
-                "\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87" +
-                "\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99" +
-                "\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5" +
-                "\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE" +
-                "\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F" +
-                "\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42" +
-                "\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\u8F62" +
-                "\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7" +
-                "\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005" +
-                "\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016" +
-                "\u900B\u9027\u9036\u9035\u9039\u8FF8\u904F\u9050" +
-                "\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E" +
-                "\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081" +
-                "\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5" +
-                "\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132" +
-                "\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173" +
-                "\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA" +
-                "\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0" +
-                "\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E" +
-                "\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245" +
-                "\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C" +
-                "\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9" +
-                "\u930F\u92FA\u9344\u932E\u9319\u9322\u931A\u9323" +
-                "\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356" +
-                "\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8" +
-                "\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A" +
-                "\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435" +
-                "\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462" +
-                "\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A" +
-                "\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594" +
-                "\u9596\u9598\u9599\u95A0\u95A8\u95A7\u95AD\u95BC" +
-                "\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC" +
-                "\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621" +
-                "\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677" +
-                "\u965C\u965E\u965D\u965F\u9666\u9672\u966C\u968D" +
-                "\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0" +
-                "\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD" +
-                "\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708" +
-                "\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A" +
-                "\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742" +
-                "\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B" +
-                "\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B" +
-                "\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4" +
-                "\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2" +
-                "\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821" +
-                "\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870" +
-                "\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4" +
-                "\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914" +
-                "\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E" +
-                "\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951" +
-                "\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE" +
-                "\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE" +
-                "\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2" +
-                "\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\u9A3E" +
-                "\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64" +
-                "\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF" +
-                "\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6" +
-                "\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\u9AFB\u9B06" +
-                "\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28" +
-                "\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F" +
-                "\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91" +
-                "\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA" +
-                "\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4" +
-                "\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14" +
-                "\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04" +
-                "\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32" +
-                "\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7" +
-                "\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A" +
-                "\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41" +
-                "\u9D3F\u9D3E\u9D46\u9D48\u9D5D\u9D5E\u9D64\u9D51" +
-                "\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A" +
-                "\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8" +
-                "\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6" +
-                "\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79" +
-                "\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91" +
-                "\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC" +
-                "\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0" +
-                "\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB" +
-                "\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C" +
-                "\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61" +
-                "\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95" +
-                "\u9F9C\u9FA0\u582F\u69C7\u9059\u7464\u51DC\u7199" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uE000\uE001\uE002\uE003\uE004\uE005\uE006\uE007" +
-                "\uE008\uE009\uE00A\uE00B\uE00C\uE00D\uE00E\uE00F" +
-                "\uE010\uE011\uE012\uE013\uE014\uE015\uE016\uE017" +
-                "\uE018\uE019\uE01A\uE01B\uE01C\uE01D\uE01E\uE01F" +
-                "\uE020\uE021\uE022\uE023\uE024\uE025\uE026\uE027" +
-                "\uE028\uE029\uE02A\uE02B\uE02C\uE02D\uE02E\uE02F" +
-                "\uE030\uE031\uE032\uE033\uE034\uE035\uE036\uE037" +
-                "\uE038\uE039\uE03A\uE03B\uE03C\uE03D\uE03E\uE03F" +
-                "\uE040\uE041\uE042\uE043\uE044\uE045\uE046\uE047" +
-                "\uE048\uE049\uE04A\uE04B\uE04C\uE04D\uE04E\uE04F" +
-                "\uE050\uE051\uE052\uE053\uE054\uE055\uE056\uE057" +
-                "\uE058\uE059\uE05A\uE05B\uE05C\uE05D\uE05E\uE05F" +
-                "\uE060\uE061\uE062\uE063\uE064\uE065\uE066\uE067" +
-                "\uE068\uE069\uE06A\uE06B\uE06C\uE06D\uE06E\uE06F" +
-                "\uE070\uE071\uE072\uE073\uE074\uE075\uE076\uE077" +
-                "\uE078\uE079\uE07A\uE07B\uE07C\uE07D\uE07E\uE07F" +
-                "\uE080\uE081\uE082\uE083\uE084\uE085\uE086\uE087" +
-                "\uE088\uE089\uE08A\uE08B\uE08C\uE08D\uE08E\uE08F" +
-                "\uE090\uE091\uE092\uE093\uE094\uE095\uE096\uE097" +
-                "\uE098\uE099\uE09A\uE09B\uE09C\uE09D\uE09E\uE09F" +
-                "\uE0A0\uE0A1\uE0A2\uE0A3\uE0A4\uE0A5\uE0A6\uE0A7" +
-                "\uE0A8\uE0A9\uE0AA\uE0AB\uE0AC\uE0AD\uE0AE\uE0AF" +
-                "\uE0B0\uE0B1\uE0B2\uE0B3\uE0B4\uE0B5\uE0B6\uE0B7" +
-                "\uE0B8\uE0B9\uE0BA\uE0BB\uE0BC\uE0BD\uE0BE\uE0BF" +
-                "\uE0C0\uE0C1\uE0C2\uE0C3\uE0C4\uE0C5\uE0C6\uE0C7" +
-                "\uE0C8\uE0C9\uE0CA\uE0CB\uE0CC\uE0CD\uE0CE\uE0CF" +
-                "\uE0D0\uE0D1\uE0D2\uE0D3\uE0D4\uE0D5\uE0D6\uE0D7" +
-                "\uE0D8\uE0D9\uE0DA\uE0DB\uE0DC\uE0DD\uE0DE\uE0DF" +
-                "\uE0E0\uE0E1\uE0E2\uE0E3\uE0E4\uE0E5\uE0E6\uE0E7" +
-                "\uE0E8\uE0E9\uE0EA\uE0EB\uE0EC\uE0ED\uE0EE\uE0EF" +
-                "\uE0F0\uE0F1\uE0F2\uE0F3\uE0F4\uE0F5\uE0F6\uE0F7" +
-                "\uE0F8\uE0F9\uE0FA\uE0FB\uE0FC\uE0FD\uE0FE\uE0FF" +
-                "\uE100\uE101\uE102\uE103\uE104\uE105\uE106\uE107" +
-                "\uE108\uE109\uE10A\uE10B\uE10C\uE10D\uE10E\uE10F" +
-                "\uE110\uE111\uE112\uE113\uE114\uE115\uE116\uE117" +
-                "\uE118\uE119\uE11A\uE11B\uE11C\uE11D\uE11E\uE11F" +
-                "\uE120\uE121\uE122\uE123\uE124\uE125\uE126\uE127" +
-                "\uE128\uE129\uE12A\uE12B\uE12C\uE12D\uE12E\uE12F" +
-                "\uE130\uE131\uE132\uE133\uE134\uE135\uE136\uE137" +
-                "\uE138\uE139\uE13A\uE13B\uE13C\uE13D\uE13E\uE13F" +
-                "\uE140\uE141\uE142\uE143\uE144\uE145\uE146\uE147" +
-                "\uE148\uE149\uE14A\uE14B\uE14C\uE14D\uE14E\uE14F" +
-                "\uE150\uE151\uE152\uE153\uE154\uE155\uE156\uE157" +
-                "\uE158\uE159\uE15A\uE15B\uE15C\uE15D\uE15E\uE15F" +
-                "\uE160\uE161\uE162\uE163\uE164\uE165\uE166\uE167" +
-                "\uE168\uE169\uE16A\uE16B\uE16C\uE16D\uE16E\uE16F" +
-                "\uE170\uE171\uE172\uE173\uE174\uE175\uE176\uE177" +
-                "\uE178\uE179\uE17A\uE17B\uE17C\uE17D\uE17E\uE17F" +
-                "\uE180\uE181\uE182\uE183\uE184\uE185\uE186\uE187" +
-                "\uE188\uE189\uE18A\uE18B\uE18C\uE18D\uE18E\uE18F" +
-                "\uE190\uE191\uE192\uE193\uE194\uE195\uE196\uE197" +
-                "\uE198\uE199\uE19A\uE19B\uE19C\uE19D\uE19E\uE19F" +
-                "\uE1A0\uE1A1\uE1A2\uE1A3\uE1A4\uE1A5\uE1A6\uE1A7" +
-                "\uE1A8\uE1A9\uE1AA\uE1AB\uE1AC\uE1AD\uE1AE\uE1AF" +
-                "\uE1B0\uE1B1\uE1B2\uE1B3\uE1B4\uE1B5\uE1B6\uE1B7" +
-                "\uE1B8\uE1B9\uE1BA\uE1BB\uE1BC\uE1BD\uE1BE\uE1BF" +
-                "\uE1C0\uE1C1\uE1C2\uE1C3\uE1C4\uE1C5\uE1C6\uE1C7" +
-                "\uE1C8\uE1C9\uE1CA\uE1CB\uE1CC\uE1CD\uE1CE\uE1CF" +
-                "\uE1D0\uE1D1\uE1D2\uE1D3\uE1D4\uE1D5\uE1D6\uE1D7" +
-                "\uE1D8\uE1D9\uE1DA\uE1DB\uE1DC\uE1DD\uE1DE\uE1DF" +
-                "\uE1E0\uE1E1\uE1E2\uE1E3\uE1E4\uE1E5\uE1E6\uE1E7" +
-                "\uE1E8\uE1E9\uE1EA\uE1EB\uE1EC\uE1ED\uE1EE\uE1EF" +
-                "\uE1F0\uE1F1\uE1F2\uE1F3\uE1F4\uE1F5\uE1F6\uE1F7" +
-                "\uE1F8\uE1F9\uE1FA\uE1FB\uE1FC\uE1FD\uE1FE\uE1FF" +
-                "\uE200\uE201\uE202\uE203\uE204\uE205\uE206\uE207" +
-                "\uE208\uE209\uE20A\uE20B\uE20C\uE20D\uE20E\uE20F" +
-                "\uE210\uE211\uE212\uE213\uE214\uE215\uE216\uE217" +
-                "\uE218\uE219\uE21A\uE21B\uE21C\uE21D\uE21E\uE21F" +
-                "\uE220\uE221\uE222\uE223\uE224\uE225\uE226\uE227" +
-                "\uE228\uE229\uE22A\uE22B\uE22C\uE22D\uE22E\uE22F" +
-                "\uE230\uE231\uE232\uE233\uE234\uE235\uE236\uE237" +
-                "\uE238\uE239\uE23A\uE23B\uE23C\uE23D\uE23E\uE23F" +
-                "\uE240\uE241\uE242\uE243\uE244\uE245\uE246\uE247" +
-                "\uE248\uE249\uE24A\uE24B\uE24C\uE24D\uE24E\uE24F" +
-                "\uE250\uE251\uE252\uE253\uE254\uE255\uE256\uE257" +
-                "\uE258\uE259\uE25A\uE25B\uE25C\uE25D\uE25E\uE25F" +
-                "\uE260\uE261\uE262\uE263\uE264\uE265\uE266\uE267" +
-                "\uE268\uE269\uE26A\uE26B\uE26C\uE26D\uE26E\uE26F" +
-                "\uE270\uE271\uE272\uE273\uE274\uE275\uE276\uE277" +
-                "\uE278\uE279\uE27A\uE27B\uE27C\uE27D\uE27E\uE27F" +
-                "\uE280\uE281\uE282\uE283\uE284\uE285\uE286\uE287" +
-                "\uE288\uE289\uE28A\uE28B\uE28C\uE28D\uE28E\uE28F" +
-                "\uE290\uE291\uE292\uE293\uE294\uE295\uE296\uE297" +
-                "\uE298\uE299\uE29A\uE29B\uE29C\uE29D\uE29E\uE29F" +
-                "\uE2A0\uE2A1\uE2A2\uE2A3\uE2A4\uE2A5\uE2A6\uE2A7" +
-                "\uE2A8\uE2A9\uE2AA\uE2AB\uE2AC\uE2AD\uE2AE\uE2AF" +
-                "\uE2B0\uE2B1\uE2B2\uE2B3\uE2B4\uE2B5\uE2B6\uE2B7" +
-                "\uE2B8\uE2B9\uE2BA\uE2BB\uE2BC\uE2BD\uE2BE\uE2BF" +
-                "\uE2C0\uE2C1\uE2C2\uE2C3\uE2C4\uE2C5\uE2C6\uE2C7" +
-                "\uE2C8\uE2C9\uE2CA\uE2CB\uE2CC\uE2CD\uE2CE\uE2CF" +
-                "\uE2D0\uE2D1\uE2D2\uE2D3\uE2D4\uE2D5\uE2D6\uE2D7" +
-                "\uE2D8\uE2D9\uE2DA\uE2DB\uE2DC\uE2DD\uE2DE\uE2DF" +
-                "\uE2E0\uE2E1\uE2E2\uE2E3\uE2E4\uE2E5\uE2E6\uE2E7" +
-                "\uE2E8\uE2E9\uE2EA\uE2EB\uE2EC\uE2ED\uE2EE\uE2EF" +
-                "\uE2F0\uE2F1\uE2F2\uE2F3\uE2F4\uE2F5\uE2F6\uE2F7" +
-                "\uE2F8\uE2F9\uE2FA\uE2FB\uE2FC\uE2FD\uE2FE\uE2FF" +
-                "\uE300\uE301\uE302\uE303\uE304\uE305\uE306\uE307" +
-                "\uE308\uE309\uE30A\uE30B\uE30C\uE30D\uE30E\uE30F" +
-                "\uE310\uE311\uE312\uE313\uE314\uE315\uE316\uE317" +
-                "\uE318\uE319\uE31A\uE31B\uE31C\uE31D\uE31E\uE31F" +
-                "\uE320\uE321\uE322\uE323\uE324\uE325\uE326\uE327" +
-                "\uE328\uE329\uE32A\uE32B\uE32C\uE32D\uE32E\uE32F" +
-                "\uE330\uE331\uE332\uE333\uE334\uE335\uE336\uE337" +
-                "\uE338\uE339\uE33A\uE33B\uE33C\uE33D\uE33E\uE33F" +
-                "\uE340\uE341\uE342\uE343\uE344\uE345\uE346\uE347" +
-                "\uE348\uE349\uE34A\uE34B\uE34C\uE34D\uE34E\uE34F" +
-                "\uE350\uE351\uE352\uE353\uE354\uE355\uE356\uE357" +
-                "\uE358\uE359\uE35A\uE35B\uE35C\uE35D\uE35E\uE35F" +
-                "\uE360\uE361\uE362\uE363\uE364\uE365\uE366\uE367" +
-                "\uE368\uE369\uE36A\uE36B\uE36C\uE36D\uE36E\uE36F" +
-                "\uE370\uE371\uE372\uE373\uE374\uE375\uE376\uE377" +
-                "\uE378\uE379\uE37A\uE37B\uE37C\uE37D\uE37E\uE37F" +
-                "\uE380\uE381\uE382\uE383\uE384\uE385\uE386\uE387" +
-                "\uE388\uE389\uE38A\uE38B\uE38C\uE38D\uE38E\uE38F" +
-                "\uE390\uE391\uE392\uE393\uE394\uE395\uE396\uE397" +
-                "\uE398\uE399\uE39A\uE39B\uE39C\uE39D\uE39E\uE39F" +
-                "\uE3A0\uE3A1\uE3A2\uE3A3\uE3A4\uE3A5\uE3A6\uE3A7" +
-                "\uE3A8\uE3A9\uE3AA\uE3AB"
-                ;
-            mappingTableG2 =
-                "\uFF61\uFF62\uFF63\uFF64\uFF65\uFF66\uFF67\uFF68" +
-                "\uFF69\uFF6A\uFF6B\uFF6C\uFF6D\uFF6E\uFF6F\uFF70" +
-                "\uFF71\uFF72\uFF73\uFF74\uFF75\uFF76\uFF77\uFF78" +
-                "\uFF79\uFF7A\uFF7B\uFF7C\uFF7D\uFF7E\uFF7F\uFF80" +
-                "\uFF81\uFF82\uFF83\uFF84\uFF85\uFF86\uFF87\uFF88" +
-                "\uFF89\uFF8A\uFF8B\uFF8C\uFF8D\uFF8E\uFF8F\uFF90" +
-                "\uFF91\uFF92\uFF93\uFF94\uFF95\uFF96\uFF97\uFF98" +
-                "\uFF99\uFF9A\uFF9B\uFF9C\uFF9D\uFF9E\uFF9F\u00A2" +
-                "\u00A3\u00AC\\\u007E\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"
-                ;
-          mappingTableG3 =
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u00A6\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u4E28\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u4EE1\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u4F00\uFFFD\u4F03\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u4F39\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4F56" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u4F8A\uFFFD\uFFFD\uFFFD\u4F92\uFFFD" +
-                "\u4F94\uFFFD\uFFFD\u4F9A\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u4FC9\uFFFD\uFFFD\u4FCD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4FFF" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u501E\u5022" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5040\uFFFD" +
-                "\u5042\uFFFD\u5046\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u5070\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u5094\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u50D8\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u514A\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u5164\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u519D\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u51BE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u5215\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u529C\uFFFD\uFFFD\u52A6\uFFFD" +
-                "\u52AF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u52C0\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u52DB\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5300\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u5372\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u5393\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u53B2\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u53DD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u549C\uFFFD\uFFFD\uFFFD\uFFFD\u54A9\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u54FF\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5586" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5765\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u57AC" +
-                "\uFFFD\uFFFD\u57C7\u57C8\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u58B2" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u590B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5953\uFFFD" +
-                "\u595B\u595D\uFFFD\uFFFD\uFFFD\u5963\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u59A4\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u59BA\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u5B56\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u5BC0\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5BD8\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u5C1E\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5CA6\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u5CBA\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5D27\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u5D42\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u5D6D\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5DB8" +
-                "\u5DB9\uFFFD\uFFFD\uFFFD\u5DD0\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5F21\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5F34\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5F45\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5F67" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u5FDE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u605D\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u608A" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u60D5\uFFFD\uFFFD\uFFFD\u60DE\uFFFD\uFFFD" +
-                "\u60F2\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u6111\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6130\uFFFD" +
-                "\uFFFD\uFFFD\u6137\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u6198\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u6213\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u62A6\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u63F5\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6460\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u649D\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u64CE\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u6600\uFFFD\uFFFD\u6609" +
-                "\uFFFD\uFFFD\uFFFD\u6615\uFFFD\uFFFD\u661E\uFFFD" +
-                "\uFFFD\uFFFD\u6624\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u662E\uFFFD\u6631\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6657\uFFFD\u6659" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u66FB\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u6673\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6699" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u66A0\uFFFD\uFFFD\uFFFD" +
-                "\u66B2\uFFFD\uFFFD\u66BF\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u66FA\uFFFD\uFFFD\u670E\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u6766\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u67BB\uFFFD\uFFFD\uFFFD\u67C0\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u6852\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u6844\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u68C8" +
-                "\uFFFD\u68CF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6968\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u6998\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u69E2\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6A30\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6A46\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u6A73\u6A7E\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u6AE4\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6BD6\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u6C3F\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6C5C\uFFFD\uFFFD" +
-                "\u6C6F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6C86" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u6CDA\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6D04\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6D6F\uFFFD" +
-                "\uFFFD\uFFFD\u6D87\uFFFD\uFFFD\uFFFD\u6D96\uFFFD" +
-                "\uFFFD\uFFFD\u6DAC\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u6DCF\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u6DFC\uFFFD\uFFFD\uFFFD\uFFFD\u6E27\uFFFD" +
-                "\uFFFD\u6E39\uFFFD\u6E3C\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6E5C" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u6EBF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6F88\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u6FB5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6FF5\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u7005\uFFFD\u7007\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u7085\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u70AB\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u7104\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u710F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u7146\u7147\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u715C\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u71C1\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u71FE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u72B1\uFFFD\u72BE\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u7324\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7377\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u73BD\uFFFD\uFFFD\uFFFD\u73C9\uFFFD\uFFFD" +
-                "\uFFFD\u73D2\uFFFD\u73D6\uFFFD\uFFFD\uFFFD\u73E3" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u73F5\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7407\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u7426\uFFFD\u7429\u742A" +
-                "\uFFFD\uFFFD\uFFFD\u742E\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u7462\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u7489\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u749F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u752F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u756F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u769B" +
-                "\u769C\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u76A6\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7746" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u7821\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u784E\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u7864\uFFFD\uFFFD\uFFFD" +
-                "\u787A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7994\uFFFD" +
-                "\uFFFD\uFFFD\u799B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7AD1" +
-                "\uFFFD\uFFFD\uFFFD\u7AEB\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u7B9E\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u7D48\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u7D5C\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u7DB7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7E52\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u7E8A\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u7F47\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7FA1\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u8301\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u837F\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u83C7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u83F6\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u8448\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u84B4\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u84DC\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8553\uFFFD\u8559" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u856B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u88F5\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u891C\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8A12" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u8A37\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u8A79\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u8AA7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u8ABE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8ADF\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u8AF6\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u8B53\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u8CF0\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8D12\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u8ECF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u9067\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u9127\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u91D7\uFFFD\u91DA\u91DE\u91E4\u91E5\uFFFD" +
-                "\uFFFD\uFFFD\u91ED\u91EE\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9206" +
-                "\uFFFD\uFFFD\u920A\uFFFD\u9210\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9239" +
-                "\u923A\u923C\uFFFD\u9240\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u924E\uFFFD\u9251\uFFFD\u9259\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u9267\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u9277\u9278\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u9288\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u92A7" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u92D0" +
-                "\u92D3\u92D5\u92D7\uFFFD\u92D9\uFFFD\uFFFD\uFFFD" +
-                "\u92E0\uFFFD\uFFFD\uFFFD\u92E7\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u92F9\u92FB\u92FF\uFFFD\u9302\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u931D\u931E\uFFFD\u9321" +
-                "\uFFFD\u9325\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u9348\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u9357\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u9370\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u93A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u93C6\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u93DE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u93F8" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u9431\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\u9445\u9448\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u969D\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u96AF\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9733" +
-                "\uFFFD\u9743\uFFFD\uFFFD\u974F\u9755\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u9857\uFFFD\uFFFD\uFFFD\uFFFD\u9865" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9927\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u9A4E\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u9ADC\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u9B75\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u9B8F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\u9BB1\uFFFD\uFFFD\uFFFD\u9BBB" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\u9C00\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9D6B\u9D70\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9E19" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u2170\u2171\u2172\u2173" +
-                "\u2174\u2175\u2176\u2177\u2178\u2179\u2160\u2161" +
-                "\u2162\u2163\u2164\u2165\u2166\u2167\u2168\u2169" +
-                "\uFF07\uFF02\u3231\u2116\u2121\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u70BB\u4EFC\u50F4\u51EC\u5307\u5324" +
-                "\uFA0E\u548A\u5759\uFA0F\uFA10\u589E\uFFFD\u5BEC" +
-                "\u5CF5\u5D53\uFA11\u5FB7\u6085\u6120\u654E\u663B" +
-                "\u6665\uFA12\uF929\u6801\uFA13\uFA14\u6A6B\u6AE2" +
-                "\u6DF8\u6DF2\uFFFD\u7028\uFFFD\uFA15\uFA16\u7501" +
-                "\u7682\u769E\uFA17\uFFFD\u7930\uFA18\uFA19\uFA1A" +
-                "\uFA1B\u7AE7\uFA1C\uFFFD\uFA1D\u7DA0\u7DD6\uFA1E" +
-                "\u8362\uFA1F\u85B0\uFA20\uFA21\u8807\uFFFD\uFA22" +
-                "\u8B7F\u8CF4\u8D76\uFA23\uFA24\uFA25\u90DE\uFA26" +
-                "\u9115\uFA27\uFA28\u9592\uF9DC\uFA29\u973B\u974D" +
-                "\u9751\uFFFD\uFA2A\uFA2B\uFA2C\u999E\u9AD9\u9B72" +
-                "\uFA2D\u9ED1\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uE3AC\uE3AD\uE3AE\uE3AF\uE3B0\uE3B1\uE3B2\uE3B3" +
-                "\uE3B4\uE3B5\uE3B6\uE3B7\uE3B8\uE3B9\uE3BA\uE3BB" +
-                "\uE3BC\uE3BD\uE3BE\uE3BF\uE3C0\uE3C1\uE3C2\uE3C3" +
-                "\uE3C4\uE3C5\uE3C6\uE3C7\uE3C8\uE3C9\uE3CA\uE3CB" +
-                "\uE3CC\uE3CD\uE3CE\uE3CF\uE3D0\uE3D1\uE3D2\uE3D3" +
-                "\uE3D4\uE3D5\uE3D6\uE3D7\uE3D8\uE3D9\uE3DA\uE3DB" +
-                "\uE3DC\uE3DD\uE3DE\uE3DF\uE3E0\uE3E1\uE3E2\uE3E3" +
-                "\uE3E4\uE3E5\uE3E6\uE3E7\uE3E8\uE3E9\uE3EA\uE3EB" +
-                "\uE3EC\uE3ED\uE3EE\uE3EF\uE3F0\uE3F1\uE3F2\uE3F3" +
-                "\uE3F4\uE3F5\uE3F6\uE3F7\uE3F8\uE3F9\uE3FA\uE3FB" +
-                "\uE3FC\uE3FD\uE3FE\uE3FF\uE400\uE401\uE402\uE403" +
-                "\uE404\uE405\uE406\uE407\uE408\uE409\uE40A\uE40B" +
-                "\uE40C\uE40D\uE40E\uE40F\uE410\uE411\uE412\uE413" +
-                "\uE414\uE415\uE416\uE417\uE418\uE419\uE41A\uE41B" +
-                "\uE41C\uE41D\uE41E\uE41F\uE420\uE421\uE422\uE423" +
-                "\uE424\uE425\uE426\uE427\uE428\uE429\uE42A\uE42B" +
-                "\uE42C\uE42D\uE42E\uE42F\uE430\uE431\uE432\uE433" +
-                "\uE434\uE435\uE436\uE437\uE438\uE439\uE43A\uE43B" +
-                "\uE43C\uE43D\uE43E\uE43F\uE440\uE441\uE442\uE443" +
-                "\uE444\uE445\uE446\uE447\uE448\uE449\uE44A\uE44B" +
-                "\uE44C\uE44D\uE44E\uE44F\uE450\uE451\uE452\uE453" +
-                "\uE454\uE455\uE456\uE457\uE458\uE459\uE45A\uE45B" +
-                "\uE45C\uE45D\uE45E\uE45F\uE460\uE461\uE462\uE463" +
-                "\uE464\uE465\uE466\uE467\uE468\uE469\uE46A\uE46B" +
-                "\uE46C\uE46D\uE46E\uE46F\uE470\uE471\uE472\uE473" +
-                "\uE474\uE475\uE476\uE477\uE478\uE479\uE47A\uE47B" +
-                "\uE47C\uE47D\uE47E\uE47F\uE480\uE481\uE482\uE483" +
-                "\uE484\uE485\uE486\uE487\uE488\uE489\uE48A\uE48B" +
-                "\uE48C\uE48D\uE48E\uE48F\uE490\uE491\uE492\uE493" +
-                "\uE494\uE495\uE496\uE497\uE498\uE499\uE49A\uE49B" +
-                "\uE49C\uE49D\uE49E\uE49F\uE4A0\uE4A1\uE4A2\uE4A3" +
-                "\uE4A4\uE4A5\uE4A6\uE4A7\uE4A8\uE4A9\uE4AA\uE4AB" +
-                "\uE4AC\uE4AD\uE4AE\uE4AF\uE4B0\uE4B1\uE4B2\uE4B3" +
-                "\uE4B4\uE4B5\uE4B6\uE4B7\uE4B8\uE4B9\uE4BA\uE4BB" +
-                "\uE4BC\uE4BD\uE4BE\uE4BF\uE4C0\uE4C1\uE4C2\uE4C3" +
-                "\uE4C4\uE4C5\uE4C6\uE4C7\uE4C8\uE4C9\uE4CA\uE4CB" +
-                "\uE4CC\uE4CD\uE4CE\uE4CF\uE4D0\uE4D1\uE4D2\uE4D3" +
-                "\uE4D4\uE4D5\uE4D6\uE4D7\uE4D8\uE4D9\uE4DA\uE4DB" +
-                "\uE4DC\uE4DD\uE4DE\uE4DF\uE4E0\uE4E1\uE4E2\uE4E3" +
-                "\uE4E4\uE4E5\uE4E6\uE4E7\uE4E8\uE4E9\uE4EA\uE4EB" +
-                "\uE4EC\uE4ED\uE4EE\uE4EF\uE4F0\uE4F1\uE4F2\uE4F3" +
-                "\uE4F4\uE4F5\uE4F6\uE4F7\uE4F8\uE4F9\uE4FA\uE4FB" +
-                "\uE4FC\uE4FD\uE4FE\uE4FF\uE500\uE501\uE502\uE503" +
-                "\uE504\uE505\uE506\uE507\uE508\uE509\uE50A\uE50B" +
-                "\uE50C\uE50D\uE50E\uE50F\uE510\uE511\uE512\uE513" +
-                "\uE514\uE515\uE516\uE517\uE518\uE519\uE51A\uE51B" +
-                "\uE51C\uE51D\uE51E\uE51F\uE520\uE521\uE522\uE523" +
-                "\uE524\uE525\uE526\uE527\uE528\uE529\uE52A\uE52B" +
-                "\uE52C\uE52D\uE52E\uE52F\uE530\uE531\uE532\uE533" +
-                "\uE534\uE535\uE536\uE537\uE538\uE539\uE53A\uE53B" +
-                "\uE53C\uE53D\uE53E\uE53F\uE540\uE541\uE542\uE543" +
-                "\uE544\uE545\uE546\uE547\uE548\uE549\uE54A\uE54B" +
-                "\uE54C\uE54D\uE54E\uE54F\uE550\uE551\uE552\uE553" +
-                "\uE554\uE555\uE556\uE557\uE558\uE559\uE55A\uE55B" +
-                "\uE55C\uE55D\uE55E\uE55F\uE560\uE561\uE562\uE563" +
-                "\uE564\uE565\uE566\uE567\uE568\uE569\uE56A\uE56B" +
-                "\uE56C\uE56D\uE56E\uE56F\uE570\uE571\uE572\uE573" +
-                "\uE574\uE575\uE576\uE577\uE578\uE579\uE57A\uE57B" +
-                "\uE57C\uE57D\uE57E\uE57F\uE580\uE581\uE582\uE583" +
-                "\uE584\uE585\uE586\uE587\uE588\uE589\uE58A\uE58B" +
-                "\uE58C\uE58D\uE58E\uE58F\uE590\uE591\uE592\uE593" +
-                "\uE594\uE595\uE596\uE597\uE598\uE599\uE59A\uE59B" +
-                "\uE59C\uE59D\uE59E\uE59F\uE5A0\uE5A1\uE5A2\uE5A3" +
-                "\uE5A4\uE5A5\uE5A6\uE5A7\uE5A8\uE5A9\uE5AA\uE5AB" +
-                "\uE5AC\uE5AD\uE5AE\uE5AF\uE5B0\uE5B1\uE5B2\uE5B3" +
-                "\uE5B4\uE5B5\uE5B6\uE5B7\uE5B8\uE5B9\uE5BA\uE5BB" +
-                "\uE5BC\uE5BD\uE5BE\uE5BF\uE5C0\uE5C1\uE5C2\uE5C3" +
-                "\uE5C4\uE5C5\uE5C6\uE5C7\uE5C8\uE5C9\uE5CA\uE5CB" +
-                "\uE5CC\uE5CD\uE5CE\uE5CF\uE5D0\uE5D1\uE5D2\uE5D3" +
-                "\uE5D4\uE5D5\uE5D6\uE5D7\uE5D8\uE5D9\uE5DA\uE5DB" +
-                "\uE5DC\uE5DD\uE5DE\uE5DF\uE5E0\uE5E1\uE5E2\uE5E3" +
-                "\uE5E4\uE5E5\uE5E6\uE5E7\uE5E8\uE5E9\uE5EA\uE5EB" +
-                "\uE5EC\uE5ED\uE5EE\uE5EF\uE5F0\uE5F1\uE5F2\uE5F3" +
-                "\uE5F4\uE5F5\uE5F6\uE5F7\uE5F8\uE5F9\uE5FA\uE5FB" +
-                "\uE5FC\uE5FD\uE5FE\uE5FF\uE600\uE601\uE602\uE603" +
-                "\uE604\uE605\uE606\uE607\uE608\uE609\uE60A\uE60B" +
-                "\uE60C\uE60D\uE60E\uE60F\uE610\uE611\uE612\uE613" +
-                "\uE614\uE615\uE616\uE617\uE618\uE619\uE61A\uE61B" +
-                "\uE61C\uE61D\uE61E\uE61F\uE620\uE621\uE622\uE623" +
-                "\uE624\uE625\uE626\uE627\uE628\uE629\uE62A\uE62B" +
-                "\uE62C\uE62D\uE62E\uE62F\uE630\uE631\uE632\uE633" +
-                "\uE634\uE635\uE636\uE637\uE638\uE639\uE63A\uE63B" +
-                "\uE63C\uE63D\uE63E\uE63F\uE640\uE641\uE642\uE643" +
-                "\uE644\uE645\uE646\uE647\uE648\uE649\uE64A\uE64B" +
-                "\uE64C\uE64D\uE64E\uE64F\uE650\uE651\uE652\uE653" +
-                "\uE654\uE655\uE656\uE657\uE658\uE659\uE65A\uE65B" +
-                "\uE65C\uE65D\uE65E\uE65F\uE660\uE661\uE662\uE663" +
-                "\uE664\uE665\uE666\uE667\uE668\uE669\uE66A\uE66B" +
-                "\uE66C\uE66D\uE66E\uE66F\uE670\uE671\uE672\uE673" +
-                "\uE674\uE675\uE676\uE677\uE678\uE679\uE67A\uE67B" +
-                "\uE67C\uE67D\uE67E\uE67F\uE680\uE681\uE682\uE683" +
-                "\uE684\uE685\uE686\uE687\uE688\uE689\uE68A\uE68B" +
-                "\uE68C\uE68D\uE68E\uE68F\uE690\uE691\uE692\uE693" +
-                "\uE694\uE695\uE696\uE697\uE698\uE699\uE69A\uE69B" +
-                "\uE69C\uE69D\uE69E\uE69F\uE6A0\uE6A1\uE6A2\uE6A3" +
-                "\uE6A4\uE6A5\uE6A6\uE6A7\uE6A8\uE6A9\uE6AA\uE6AB" +
-                "\uE6AC\uE6AD\uE6AE\uE6AF\uE6B0\uE6B1\uE6B2\uE6B3" +
-                "\uE6B4\uE6B5\uE6B6\uE6B7\uE6B8\uE6B9\uE6BA\uE6BB" +
-                "\uE6BC\uE6BD\uE6BE\uE6BF\uE6C0\uE6C1\uE6C2\uE6C3" +
-                "\uE6C4\uE6C5\uE6C6\uE6C7\uE6C8\uE6C9\uE6CA\uE6CB" +
-                "\uE6CC\uE6CD\uE6CE\uE6CF\uE6D0\uE6D1\uE6D2\uE6D3" +
-                "\uE6D4\uE6D5\uE6D6\uE6D7\uE6D8\uE6D9\uE6DA\uE6DB" +
-                "\uE6DC\uE6DD\uE6DE\uE6DF\uE6E0\uE6E1\uE6E2\uE6E3" +
-                "\uE6E4\uE6E5\uE6E6\uE6E7\uE6E8\uE6E9\uE6EA\uE6EB" +
-                "\uE6EC\uE6ED\uE6EE\uE6EF\uE6F0\uE6F1\uE6F2\uE6F3" +
-                "\uE6F4\uE6F5\uE6F6\uE6F7\uE6F8\uE6F9\uE6FA\uE6FB" +
-                "\uE6FC\uE6FD\uE6FE\uE6FF\uE700\uE701\uE702\uE703" +
-                "\uE704\uE705\uE706\uE707\uE708\uE709\uE70A\uE70B" +
-                "\uE70C\uE70D\uE70E\uE70F\uE710\uE711\uE712\uE713" +
-                "\uE714\uE715\uE716\uE717\uE718\uE719\uE71A\uE71B" +
-                "\uE71C\uE71D\uE71E\uE71F\uE720\uE721\uE722\uE723" +
-                "\uE724\uE725\uE726\uE727\uE728\uE729\uE72A\uE72B" +
-                "\uE72C\uE72D\uE72E\uE72F\uE730\uE731\uE732\uE733" +
-                "\uE734\uE735\uE736\uE737\uE738\uE739\uE73A\uE73B" +
-                "\uE73C\uE73D\uE73E\uE73F\uE740\uE741\uE742\uE743" +
-                "\uE744\uE745\uE746\uE747\uE748\uE749\uE74A\uE74B" +
-                "\uE74C\uE74D\uE74E\uE74F\uE750\uE751\uE752\uE753" +
-                "\uE754\uE755\uE756\uE757"
-                ;
-        }
-    }
-
-    protected static class Encoder extends SimpleEUCEncoder {
-
-        public Encoder(Charset cs) {
-            super(cs);
-            super.mask1 = 0xFFE0;
-            super.mask2 = 0x001F;
-            super.shift = 5;
-            super.index1 = index1;
-            super.index2 = index2;
-            super.index2a = index2a;
-            super.index2b = index2b;
-        }
-
-        private static final short index1[] =
-        {
-                 3780, 20704, 20672, 20640, 20608,  6664, 21617,  3165, // 0000 - 00FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 0100 - 01FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 0200 - 02FF
-                 2344,  2344,  2344,  2344,  7094, 20576, 20503,  2344, // 0300 - 03FF
-                21069, 20471, 20344,  2344,  2344,  2344,  2344,  2344, // 0400 - 04FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 0500 - 05FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 0600 - 06FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 0700 - 07FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 0800 - 08FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 0900 - 09FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 0A00 - 0AFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 0B00 - 0BFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 0C00 - 0CFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 0D00 - 0DFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 0E00 - 0EFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 0F00 - 0FFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 1000 - 10FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 1100 - 11FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 1200 - 12FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 1300 - 13FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 1400 - 14FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 1500 - 15FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 1600 - 16FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 1700 - 17FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 1800 - 18FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 1900 - 19FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 1A00 - 1AFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 1B00 - 1BFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 1C00 - 1CFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 1D00 - 1DFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 1E00 - 1EFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 1F00 - 1FFF
-                 3749, 20254,  2344,  2344,  2344,  2344,  2344,  2344, // 2000 - 20FF
-                 3495,  2436,  2344, 20107, 14767,  2344,  3978,  2344, // 2100 - 21FF
-                20044, 19924, 14282, 19701,  5959, 21608,  2344,  2344, // 2200 - 22FF
-                 2450,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 2300 - 23FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 2400 - 24FF
-                19527, 19495,  7079,  2344,  2344, 19433,  3733, 14751, // 2500 - 25FF
-                 5996,  2344, 19279, 14734,  2344,  2344,  2344,  2344, // 2600 - 26FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 2700 - 27FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 2800 - 28FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 2900 - 29FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 2A00 - 2AFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 2B00 - 2BFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 2C00 - 2CFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 2D00 - 2DFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 2E00 - 2EFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 2F00 - 2FFF
-                19157,  2344,  2765, 19125, 19062, 21728, 19030, 18943, // 3000 - 30FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 3100 - 31FF
-                 2344,  4159,  2344,  2344,  2344,  2344,  2344,  2344, // 3200 - 32FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 3300 - 33FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 3400 - 34FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 3500 - 35FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 3600 - 36FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 3700 - 37FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 3800 - 38FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 3900 - 39FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 3A00 - 3AFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 3B00 - 3BFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 3C00 - 3CFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 3D00 - 3DFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 3E00 - 3EFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 3F00 - 3FFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 4000 - 40FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 4100 - 41FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 4200 - 42FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 4300 - 43FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 4400 - 44FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 4500 - 45FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 4600 - 46FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 4700 - 47FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 4800 - 48FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 4900 - 49FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 4A00 - 4AFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 4B00 - 4BFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 4C00 - 4CFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // 4D00 - 4DFF
-                18852,  2674,  7017,  6358, 18820, 18761, 18729,   387, // 4E00 - 4EFF
-                18642, 20379,  5539,  6077,  4556,   270,  5201, 18610, // 4F00 - 4FFF
-                18788,   104, 18549, 18430, 18403, 14787,  5327, 21326, // 5000 - 50FF
-                18371, 20544, 18279,  7861, 18217, 18061, 14682, 17938, // 5100 - 51FF
-                17876, 21297,  6603,  3582,  4236, 17813, 17781, 17749, // 5200 - 52FF
-                17544, 17512, 17449, 17417,  8115, 17357,  7459, 20285, // 5300 - 53FF
-                20222, 17294, 17262, 11197, 17201,  4721, 17144, 20075, // 5400 - 54FF
-                 4322,  5045, 17081,  3125, 17049,  6054,  2911,  3033, // 5500 - 55FF
-                 2823, 10834, 21384, 20764, 16960, 16816, 16753, 16721, // 5600 - 56FF
-                16689, 20133, 16631, 20012, 20970, 16520, 16488, 16372, // 5700 - 57FF
-                16224, 19774, 15993, 19370,  2972, 11845, 19401,  2734, // 5800 - 58FF
-                 3935,  3842, 20161, 15752, 19217,  2852, 21667, 20312, // 5900 - 59FF
-                19093, 15691, 15632,  3644, 19715,  2348, 18974, 18883, // 5A00 - 5AFF
-                10811, 21238, 15600, 19312, 15568, 21549, 15536, 18339, // 5B00 - 5BFF
-                18092, 15504, 15350, 15261, 20990, 18123, 20791, 15095, // 5C00 - 5CFF
-                17169,  4616, 20847, 10788, 21697,   356, 17625, 18154, // 5D00 - 5DFF
-                20409, 21038, 15063, 18185, 17969, 15006, 18029, 14974, // 5E00 - 5EFF
-                17844, 17656, 17687, 17480, 14850, 14595, 19186, 14563, // 5F00 - 5FFF
-                 4177, 14443, 17325, 14244, 17112, 14153, 15659, 14093, // 6000 - 60FF
-                14061, 14029, 20439, 20191, 19954, 19743,   416, 18578, // 6100 - 61FF
-                13997, 17017, 13873, 13841, 13778,   130, 19557, 13746, // 6200 - 62FF
-                16784, 15031, 12531, 19612, 13714, 13651, 13591, 16285, // 6300 - 63FF
-                21427, 16986, 19587, 13532, 18308, 21354, 16024, 13469, // 6400 - 64FF
-                13318, 19463, 19339, 18672,   160, 16108, 15873, 13258, // 6500 - 65FF
-                13226, 13194, 15961, 18460, 15381, 13162, 15442, 13130, // 6600 - 66FF
-                13098, 16657, 15318, 13066, 14470, 13006, 12943, 18517, // 6700 - 67FF
-                14881, 14912, 12911,  7890, 14818, 12759, 17385, 12643, // 6800 - 68FF
-                12292, 14531,  8683, 12111, 14362, 12079, 13904, 18247, // 6900 - 69FF
-                17906, 13935, 18911, 13809, 11934, 11793, 13682, 17574, // 6A00 - 6AFF
-                14121, 11730, 17230, 13500, 11638, 13619, 11606,  3999, // 6B00 - 6BFF
-                 9167, 21456, 11574, 11511, 13379, 12974, 12819, 12434, // 6C00 - 6CFF
-                16340, 19981, 12142, 16845, 16312, 16540, 11417, 12231, // 6D00 - 6DFF
-                13559, 11354, 16928, 18697, 11322, 16599, 16254,  4019, // 6E00 - 6EFF
-                11994, 11290, 12047, 19640, 11173, 11876, 11141, 11016, // 6F00 - 6FFF
-                11761, 15287, 12454, 16569, 16051,  3553,  8959,   239, // 7000 - 70FF
-                15901, 11669, 20817, 19804, 13286, 10102, 11542, 10984, // 7100 - 71FF
-                16871,  3189, 10952, 11448, 10765, 10648, 19834, 10586, // 7200 - 72FF
-                21145, 13034, 11821, 16401, 17602,  9218, 10496, 10407, // 7300 - 73FF
-                 3964, 19892, 11479, 10285, 15720, 15782,  8085, 10197, // 7400 - 74FF
-                11385, 20876, 13407, 10165, 15812, 20905, 15842, 19247, // 7500 - 75FF
-                11258,  9966, 15125, 11047,  9903, 11902, 17717, 11078, // 7600 - 76FF
-                11109,  9719,  9659, 10920,  4838,  9627, 12479, 14625, // 7700 - 77FF
-                14712,  9595, 18487, 16899, 10679, 17998, 10527, 10859, // 7800 - 78FF
-                10438, 16077,  9563,  9531,  9376, 10464,  9344, 10316, // 7900 - 79FF
-                 9312,  9280,  9143, 10375, 10253,  2548, 19669,  9111, // 7A00 - 7AFF
-                14500,  9053, 12670, 10706,  9079, 10025,  8991,  8935, // 7B00 - 7BFF
-                 8903, 10133,  8871,  8778,  9934,  9779,  8746,  8630, // 7C00 - 7CFF
-                 8511,  8479, 14331,  9810, 15229,  8447, 10222,  8327, // 7D00 - 7DFF
-                 9871,  9437,  9468,  9499, 14183,  2344,  2344,  2344, // 7E00 - 7EFF
-                 2344,  5969, 10733,  8269, 13348,  8809,  8661,  8208, // 7F00 - 7FFF
-                 8147,  8714,  8295,  8415, 19862,  7747, 15930,  7630, // 8000 - 80FF
-                16138, 12788,  5690, 10554,  7986,  7954,  7922,  7599, // 8100 - 81FF
-                 7278, 21641,  7567, 15411,   455,  7774,  6809,  5631, // 8200 - 82FF
-                 6634, 12321,  7491, 15472,  7153,  7399,  6872,  7310, // 8300 - 83FF
-                14391,  7217, 12347,  6782, 14942,  6264,  5929, 14411, // 8400 - 84FF
-                 7185,  5570,  7126, 11963,  7049, 16429,  6514,  9994, // 8500 - 85FF
-                12700, 13965,  6923, 10050, 21123, 12508,  9687, 10344, // 8600 - 86FF
-                 6987, 16456,  4343,  6955, 13437, 12849,  6904,  6841, // 8700 - 87FF
-                12727,  3466,  6751,  6389,  6233, 12879,  6170,  5898, // 8800 - 88FF
-                11227,  5510,  4869,  6719,  5483,  5358,  6453, 12560, // 8900 - 89FF
-                 6421, 12171,  3435,  6328, 10889,  6296, 10616,  6202, // 8A00 - 8AFF
-                 6109,  5867,  4963, 12611,  5754,  2344,  2344,  2344, // 8B00 - 8BFF
-                 2344,     9,  4790,  5171,  9406,  5722,  5452,  5390, // 8C00 - 8CFF
-                 9195,  2344,  2344, 10078,  4469, 12200,  9248,  5076, // 8D00 - 8DFF
-                 5835,  8063,  9021,  5297,  3378,  4932,  5265,  9840, // 8E00 - 8EFF
-                12260,  4495,  8839,  4752,  3500, 11698,  7804,  7660, // 8F00 - 8FFF
-                 5233,  5140,  4438,  5108,  5027, 15154,  3347,  4114, // 9000 - 90FF
-                 7690,  7516,  6029,  8016,  7429,  7340,  4995,  3873, // 9100 - 91FF
-                 3404, 18998,  4901,  7247,  4691, 12585, 21401,  4659, // 9200 - 92FF
-                 5600,  4527,  8355,  4407, 21011, 16166,  9748,  3707, // 9300 - 93FF
-                14654, 21269,  3316,  4375, 20936,  2344,  2344,  2344, // 9400 - 94FF
-                 2344,  2344,  2344,  6005,  4268,  4083,  8540,  3156, // 9500 - 95FF
-                20940,  3064,  4051,  6544,  5781,  3905,  3812,  6574, // 9600 - 96FF
-                 3676,  5659,  6483,  3614, 21208,  3532,  8569,  7535, // 9700 - 97FF
-                 2883, 21519,  7716,  4817,  2344,  2525,  8598,  6139, // 9800 - 98FF
-                 8384,  3285,  5811,  2344, 20513,  7831,  2611,  5420, // 9900 - 99FF
-                 2379, 12016,  3253,  4144,  2344,   326,  3221,  4207, // 9A00 - 9AFF
-                16192,  4586, 20736,   433, 14212,  3096,  3004, 21101, // 9B00 - 9BFF
-                 2943, 21177,  4294,  2797,  2344,  2344,  2344, 15206, // 9C00 - 9CFF
-                 8237,  8176, 21488,  2706, 15179, 12375, 21581,  2405, // 9D00 - 9DFF
-                 4759,  2344,  2344,  4627, 21760,  7367, 12403,  2643, // 9E00 - 9EFF
-                 8041,  2580,  6687,  2501, 14301,  2343,  2344,  2344, // 9F00 - 9FFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // A000 - A0FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // A100 - A1FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // A200 - A2FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // A300 - A3FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // A400 - A4FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // A500 - A5FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // A600 - A6FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // A700 - A7FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // A800 - A8FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // A900 - A9FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // AA00 - AAFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // AB00 - ABFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // AC00 - ACFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // AD00 - ADFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // AE00 - AEFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // AF00 - AFFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // B000 - B0FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // B100 - B1FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // B200 - B2FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // B300 - B3FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // B400 - B4FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // B500 - B5FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // B600 - B6FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // B700 - B7FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // B800 - B8FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // B900 - B9FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // BA00 - BAFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // BB00 - BBFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // BC00 - BCFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // BD00 - BDFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // BE00 - BEFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // BF00 - BFFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // C000 - C0FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // C100 - C1FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // C200 - C2FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // C300 - C3FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // C400 - C4FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // C500 - C5FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // C600 - C6FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // C700 - C7FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // C800 - C8FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // C900 - C9FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // CA00 - CAFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // CB00 - CBFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // CC00 - CCFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // CD00 - CDFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // CE00 - CEFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // CF00 - CFFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // D000 - D0FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // D100 - D1FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // D200 - D2FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // D300 - D3FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // D400 - D4FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // D500 - D5FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // D600 - D6FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // D700 - D7FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // D800 - D8FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // D900 - D9FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // DA00 - DAFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // DB00 - DBFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // DC00 - DCFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // DD00 - DDFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // DE00 - DEFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // DF00 - DFFF
-                 2311,  2279,  2247,  2215,  2183,  2151,  2119,  2087, // E000 - E0FF
-                 2055,  2023,  1991,  1959,  1927,  1895,  1863,  1831, // E100 - E1FF
-                 1799,  1767,  1735,  1703,  1671,  1639,  1607,  1575, // E200 - E2FF
-                 1543,  1511,  1479,  1447,  1415,  1383,  1351,  1319, // E300 - E3FF
-                 1287,  1255,  1223,  1191,  1159,  1127,  1095,  1063, // E400 - E4FF
-                 1031,   999,   967,   935,   903,   871,   839,   807, // E500 - E5FF
-                  775,   743,   711,   679,   647,   615,   583,   551, // E600 - E6FF
-                  519,   487,   302,  2344,  2344,  2344,  2344,  2344, // E700 - E7FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // E800 - E8FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // E900 - E9FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // EA00 - EAFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // EB00 - EBFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // EC00 - ECFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // ED00 - EDFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // EE00 - EEFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // EF00 - EFFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // F000 - F0FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // F100 - F1FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // F200 - F2FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // F300 - F3FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // F400 - F4FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // F500 - F5FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // F600 - F6FF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // F700 - F7FF
-                 2344,  2344,  2344, 20362,  2344,  2344,  2344,  2344, // F800 - F8FF
-                 2344, 14268,  2344,  2344,  2344,  2344, 19283,  2344, // F900 - F9FF
-                 2469,   224,  2344,  2344,  2344,  2344,  2344,  2344, // FA00 - FAFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // FB00 - FBFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // FC00 - FCFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // FD00 - FDFF
-                 2344,  2344,  2344,  2344,  2344,  2344,  2344,  2344, // FE00 - FEFF
-                21792,   192,    73, 21824,    41,  2344,  2344,     0,
-        };
-
-        private final static String index2;
-        private final static String index2a;
-        private final static String index2b;
-        static {
-            index2 =
-                "\u0000\uA1F1\u0000\uA1F2\u0000\uA2CC\u0000\uA1B1\u0000\uA2C3" + //     0 -     4
-                "\u0000\uA1EF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //     5 -     9
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //    10 -    14
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //    15 -    19
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //    20 -    24
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //    25 -    29
-                "\u0000\u0000\u0000\u0000\u0000\uC3AB\u0000\u0000\u0000\u0000" + //    30 -    34
-                "\u0000\uECAE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //    35 -    39
-                "\u0000\uECB0\u0000\u8EC0\u0000\u8EC1\u0000\u8EC2\u0000\u8EC3" + //    40 -    44
-                "\u0000\u8EC4\u0000\u8EC5\u0000\u8EC6\u0000\u8EC7\u0000\u8EC8" + //    45 -    49
-                "\u0000\u8EC9\u0000\u8ECA\u0000\u8ECB\u0000\u8ECC\u0000\u8ECD" + //    50 -    54
-                "\u0000\u8ECE\u0000\u8ECF\u0000\u8ED0\u0000\u8ED1\u0000\u8ED2" + //    55 -    59
-                "\u0000\u8ED3\u0000\u8ED4\u0000\u8ED5\u0000\u8ED6\u0000\u8ED7" + //    60 -    64
-                "\u0000\u8ED8\u0000\u8ED9\u0000\u8EDA\u0000\u8EDB\u0000\u8EDC" + //    65 -    69
-                "\u0000\u8EDD\u0000\u8EDE\u0000\u8EDF\u0000\uA1AE\u0000\uA3E1" + //    70 -    74
-                "\u0000\uA3E2\u0000\uA3E3\u0000\uA3E4\u0000\uA3E5\u0000\uA3E6" + //    75 -    79
-                "\u0000\uA3E7\u0000\uA3E8\u0000\uA3E9\u0000\uA3EA\u0000\uA3EB" + //    80 -    84
-                "\u0000\uA3EC\u0000\uA3ED\u0000\uA3EE\u0000\uA3EF\u0000\uA3F0" + //    85 -    89
-                "\u0000\uA3F1\u0000\uA3F2\u0000\uA3F3\u0000\uA3F4\u0000\uA3F5" + //    90 -    94
-                "\u0000\uA3F6\u0000\uA3F7\u0000\uA3F8\u0000\uA3F9\u0000\uA3FA" + //    95 -    99
-                "\u0000\uA1D0\u0000\uA1C3\u0000\uA1D1\u0000\uA1C1\u0000\u0000" + //   100 -   104
-                "\u0000\uD0E9\u008F\uB1D8\u0000\uCAEF\u0000\uC3CD\u0000\uD0E5" + //   105 -   109
-                "\u0000\uB7F1\u0000\u0000\u0000\uD0E2\u0000\uD0EA\u0000\uD0E4" + //   110 -   114
-                "\u0000\uCED1\u0000\uD0EB\u0000\uCFC1\u0000\u0000\u0000\u0000" + //   115 -   119
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   120 -   124
-                "\u0000\u0000\u0000\uB6E6\u0000\u0000\u0000\u0000\u0000\uB7F0" + //   125 -   129
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   130 -   134
-                "\u0000\u0000\u008F\uBFC9\u0000\u0000\u0000\u0000\u0000\u0000" + //   135 -   139
-                "\u0000\u0000\u0000\uC8E4\u0000\uDAAD\u0000\u0000\u0000\u0000" + //   140 -   144
-                "\u0000\u0000\u0000\u0000\u0000\uCAFA\u0000\u0000\u0000\u0000" + //   145 -   149
-                "\u0000\u0000\u0000\uC4F1\u0000\u0000\u0000\u0000\u0000\u0000" + //   150 -   154
-                "\u0000\uCBF5\u0000\u0000\u0000\uD9BB\u0000\uB2A1\u0000\uC3EA" + //   155 -   159
-                "\u0000\u0000\u0000\u0000\u0000\uDACC\u0000\uDACD\u0000\u0000" + //   160 -   164
-                "\u0000\u0000\u0000\u0000\u0000\uCAB8\u0000\uD5DD\u0000\uC0C6" + //   165 -   169
-                "\u0000\u0000\u0000\u0000\u0000\uC9CC\u0000\u0000\u0000\uBAD8" + //   170 -   174
-                "\u0000\u0000\u0000\uC8E5\u0000\uC8C3\u0000\u0000\u0000\u0000" + //   175 -   179
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC5CD\u0000\u0000" + //   180 -   184
-                "\u0000\uCEC1\u0000\u0000\u0000\uDACF\u0000\uBCD0\u0000\u0000" + //   185 -   189
-                "\u0000\u0000\u0000\uDAD0\u0000\uA1F7\u0000\uA3C1\u0000\uA3C2" + //   190 -   194
-                "\u0000\uA3C3\u0000\uA3C4\u0000\uA3C5\u0000\uA3C6\u0000\uA3C7" + //   195 -   199
-                "\u0000\uA3C8\u0000\uA3C9\u0000\uA3CA\u0000\uA3CB\u0000\uA3CC" + //   200 -   204
-                "\u0000\uA3CD\u0000\uA3CE\u0000\uA3CF\u0000\uA3D0\u0000\uA3D1" + //   205 -   209
-                "\u0000\uA3D2\u0000\uA3D3\u0000\uA3D4\u0000\uA3D5\u0000\uA3D6" + //   210 -   214
-                "\u0000\uA3D7\u0000\uA3D8\u0000\uA3D9\u0000\uA3DA\u0000\uA1CE" + //   215 -   219
-                "\u0000\uA1C0\u0000\uA1CF\u0000\uA1B0\u0000\uA1B2\u008F\uF4DA" + //   220 -   224
-                "\u008F\uF4DB\u008F\uF4DE\u008F\uF4E2\u008F\uF4E3\u008F\uF4E4" + //   225 -   229
-                "\u008F\uF4E6\u008F\uF4E8\u008F\uF4E9\u008F\uF4EC\u008F\uF4F1" + //   230 -   234
-                "\u008F\uF4F2\u008F\uF4F3\u008F\uF4F7\u0000\u0000\u0000\u0000" + //   235 -   239
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   240 -   244
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   245 -   249
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   250 -   254
-                "\u0000\u0000\u0000\uDFD8\u0000\u0000\u0000\u0000\u0000\u0000" + //   255 -   259
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCBA3" + //   260 -   264
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDFE2\u0000\u0000" + //   265 -   269
-                "\u0000\uB6A2\u0000\uB2C1\u0000\u0000\u0000\u0000\u0000\u0000" + //   270 -   274
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   275 -   279
-                "\u0000\u0000\u0000\uD5A5\u0000\u0000\u0000\uCBF9\u0000\uC9EE" + //   280 -   284
-                "\u0000\uB8F4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   285 -   289
-                "\u0000\u0000\u0000\uBFAF\u0000\uCEB7\u0000\u0000\u0000\u0000" + //   290 -   294
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   295 -   299
-                "\u0000\u0000\u0000\uCAD8\u008F\uFEE7\u008F\uFEE8\u008F\uFEE9" + //   300 -   304
-                "\u008F\uFEEA\u008F\uFEEB\u008F\uFEEC\u008F\uFEED\u008F\uFEEE" + //   305 -   309
-                "\u008F\uFEEF\u008F\uFEF0\u008F\uFEF1\u008F\uFEF2\u008F\uFEF3" + //   310 -   314
-                "\u008F\uFEF4\u008F\uFEF5\u008F\uFEF6\u008F\uFEF7\u008F\uFEF8" + //   315 -   319
-                "\u008F\uFEF9\u008F\uFEFA\u008F\uFEFB\u008F\uFEFC\u008F\uFEFD" + //   320 -   324
-                "\u008F\uFEFE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   325 -   329
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB9FC" + //   330 -   334
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1EC" + //   335 -   339
-                "\u0000\u0000\u0000\u0000\u0000\uF1ED\u0000\u0000\u0000\u0000" + //   340 -   344
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   345 -   349
-                "\u0000\uB3BC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1EE" + //   350 -   354
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD6D2\u0000\u0000" + //   355 -   359
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   360 -   364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD6D4\u0000\u0000" + //   365 -   369
-                "\u0000\uD6D5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   370 -   374
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD6D8" + //   375 -   379
-                "\u008F\uBBF4\u008F\uBBF5\u0000\uCEE6\u0000\u0000\u0000\uD6D9" + //   380 -   384
-                "\u0000\uD6D6\u0000\u0000\u0000\u0000\u008F\uB0C8\u0000\u0000" + //   385 -   389
-                "\u0000\uC2E5\u0000\uCEE1\u0000\uB0CA\u0000\u0000\u0000\u0000" + //   390 -   394
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   395 -   399
-                "\u0000\uD0C1\u0000\uB2BE\u0000\u0000\u0000\uB6C4\u0000\u0000" + //   400 -   404
-                "\u0000\uC3E7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7EF" + //   405 -   409
-                "\u0000\uD0C3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7A4" + //   410 -   414
-                "\u008F\uF4A2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD8E9" + //   415 -   419
-                "\u0000\u0000\u0000\u0000\u0000\uD8EA\u0000\uBAA9\u0000\uD8E8" + //   420 -   424
-                "\u0000\uD8E6\u0000\uD8E5\u0000\uD8EC\u0000\uD8E4\u0000\uD8EE" + //   425 -   429
-                "\u0000\u0000\u0000\u0000\u0000\uB2FB\u0000\u0000\u0000\u0000" + //   430 -   434
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   435 -   439
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   440 -   444
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCFA5\u0000\u0000" + //   445 -   449
-                "\u0000\u0000\u008F\uF4F6\u0000\u0000\u0000\uF2B7\u008F\uEACD" + //   450 -   454
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   455 -   459
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   460 -   464
-                "\u0000\u0000\u0000\uB0F2\u0000\u0000\u0000\uE7E9\u0000\u0000" + //   465 -   469
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7EA\u0000\u0000" + //   470 -   474
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   475 -   479
-                "\u0000\uC9E7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBCC7" + //   480 -   484
-                "\u0000\u0000\u0000\uE7EC\u008F\uFEC7\u008F\uFEC8\u008F\uFEC9" + //   485 -   489
-                "\u008F\uFECA\u008F\uFECB\u008F\uFECC\u008F\uFECD\u008F\uFECE" + //   490 -   494
-                "\u008F\uFECF\u008F\uFED0\u008F\uFED1\u008F\uFED2\u008F\uFED3" + //   495 -   499
-                "\u008F\uFED4\u008F\uFED5\u008F\uFED6\u008F\uFED7\u008F\uFED8" + //   500 -   504
-                "\u008F\uFED9\u008F\uFEDA\u008F\uFEDB\u008F\uFEDC\u008F\uFEDD" + //   505 -   509
-                "\u008F\uFEDE\u008F\uFEDF\u008F\uFEE0\u008F\uFEE1\u008F\uFEE2" + //   510 -   514
-                "\u008F\uFEE3\u008F\uFEE4\u008F\uFEE5\u008F\uFEE6\u008F\uFEA7" + //   515 -   519
-                "\u008F\uFEA8\u008F\uFEA9\u008F\uFEAA\u008F\uFEAB\u008F\uFEAC" + //   520 -   524
-                "\u008F\uFEAD\u008F\uFEAE\u008F\uFEAF\u008F\uFEB0\u008F\uFEB1" + //   525 -   529
-                "\u008F\uFEB2\u008F\uFEB3\u008F\uFEB4\u008F\uFEB5\u008F\uFEB6" + //   530 -   534
-                "\u008F\uFEB7\u008F\uFEB8\u008F\uFEB9\u008F\uFEBA\u008F\uFEBB" + //   535 -   539
-                "\u008F\uFEBC\u008F\uFEBD\u008F\uFEBE\u008F\uFEBF\u008F\uFEC0" + //   540 -   544
-                "\u008F\uFEC1\u008F\uFEC2\u008F\uFEC3\u008F\uFEC4\u008F\uFEC5" + //   545 -   549
-                "\u008F\uFEC6\u008F\uFDE5\u008F\uFDE6\u008F\uFDE7\u008F\uFDE8" + //   550 -   554
-                "\u008F\uFDE9\u008F\uFDEA\u008F\uFDEB\u008F\uFDEC\u008F\uFDED" + //   555 -   559
-                "\u008F\uFDEE\u008F\uFDEF\u008F\uFDF0\u008F\uFDF1\u008F\uFDF2" + //   560 -   564
-                "\u008F\uFDF3\u008F\uFDF4\u008F\uFDF5\u008F\uFDF6\u008F\uFDF7" + //   565 -   569
-                "\u008F\uFDF8\u008F\uFDF9\u008F\uFDFA\u008F\uFDFB\u008F\uFDFC" + //   570 -   574
-                "\u008F\uFDFD\u008F\uFDFE\u008F\uFEA1\u008F\uFEA2\u008F\uFEA3" + //   575 -   579
-                "\u008F\uFEA4\u008F\uFEA5\u008F\uFEA6\u008F\uFDC5\u008F\uFDC6" + //   580 -   584
-                "\u008F\uFDC7\u008F\uFDC8\u008F\uFDC9\u008F\uFDCA\u008F\uFDCB" + //   585 -   589
-                "\u008F\uFDCC\u008F\uFDCD\u008F\uFDCE\u008F\uFDCF\u008F\uFDD0" + //   590 -   594
-                "\u008F\uFDD1\u008F\uFDD2\u008F\uFDD3\u008F\uFDD4\u008F\uFDD5" + //   595 -   599
-                "\u008F\uFDD6\u008F\uFDD7\u008F\uFDD8\u008F\uFDD9\u008F\uFDDA" + //   600 -   604
-                "\u008F\uFDDB\u008F\uFDDC\u008F\uFDDD\u008F\uFDDE\u008F\uFDDF" + //   605 -   609
-                "\u008F\uFDE0\u008F\uFDE1\u008F\uFDE2\u008F\uFDE3\u008F\uFDE4" + //   610 -   614
-                "\u008F\uFDA5\u008F\uFDA6\u008F\uFDA7\u008F\uFDA8\u008F\uFDA9" + //   615 -   619
-                "\u008F\uFDAA\u008F\uFDAB\u008F\uFDAC\u008F\uFDAD\u008F\uFDAE" + //   620 -   624
-                "\u008F\uFDAF\u008F\uFDB0\u008F\uFDB1\u008F\uFDB2\u008F\uFDB3" + //   625 -   629
-                "\u008F\uFDB4\u008F\uFDB5\u008F\uFDB6\u008F\uFDB7\u008F\uFDB8" + //   630 -   634
-                "\u008F\uFDB9\u008F\uFDBA\u008F\uFDBB\u008F\uFDBC\u008F\uFDBD" + //   635 -   639
-                "\u008F\uFDBE\u008F\uFDBF\u008F\uFDC0\u008F\uFDC1\u008F\uFDC2" + //   640 -   644
-                "\u008F\uFDC3\u008F\uFDC4\u008F\uFCE3\u008F\uFCE4\u008F\uFCE5" + //   645 -   649
-                "\u008F\uFCE6\u008F\uFCE7\u008F\uFCE8\u008F\uFCE9\u008F\uFCEA" + //   650 -   654
-                "\u008F\uFCEB\u008F\uFCEC\u008F\uFCED\u008F\uFCEE\u008F\uFCEF" + //   655 -   659
-                "\u008F\uFCF0\u008F\uFCF1\u008F\uFCF2\u008F\uFCF3\u008F\uFCF4" + //   660 -   664
-                "\u008F\uFCF5\u008F\uFCF6\u008F\uFCF7\u008F\uFCF8\u008F\uFCF9" + //   665 -   669
-                "\u008F\uFCFA\u008F\uFCFB\u008F\uFCFC\u008F\uFCFD\u008F\uFCFE" + //   670 -   674
-                "\u008F\uFDA1\u008F\uFDA2\u008F\uFDA3\u008F\uFDA4\u008F\uFCC3" + //   675 -   679
-                "\u008F\uFCC4\u008F\uFCC5\u008F\uFCC6\u008F\uFCC7\u008F\uFCC8" + //   680 -   684
-                "\u008F\uFCC9\u008F\uFCCA\u008F\uFCCB\u008F\uFCCC\u008F\uFCCD" + //   685 -   689
-                "\u008F\uFCCE\u008F\uFCCF\u008F\uFCD0\u008F\uFCD1\u008F\uFCD2" + //   690 -   694
-                "\u008F\uFCD3\u008F\uFCD4\u008F\uFCD5\u008F\uFCD6\u008F\uFCD7" + //   695 -   699
-                "\u008F\uFCD8\u008F\uFCD9\u008F\uFCDA\u008F\uFCDB\u008F\uFCDC" + //   700 -   704
-                "\u008F\uFCDD\u008F\uFCDE\u008F\uFCDF\u008F\uFCE0\u008F\uFCE1" + //   705 -   709
-                "\u008F\uFCE2\u008F\uFCA3\u008F\uFCA4\u008F\uFCA5\u008F\uFCA6" + //   710 -   714
-                "\u008F\uFCA7\u008F\uFCA8\u008F\uFCA9\u008F\uFCAA\u008F\uFCAB" + //   715 -   719
-                "\u008F\uFCAC\u008F\uFCAD\u008F\uFCAE\u008F\uFCAF\u008F\uFCB0" + //   720 -   724
-                "\u008F\uFCB1\u008F\uFCB2\u008F\uFCB3\u008F\uFCB4\u008F\uFCB5" + //   725 -   729
-                "\u008F\uFCB6\u008F\uFCB7\u008F\uFCB8\u008F\uFCB9\u008F\uFCBA" + //   730 -   734
-                "\u008F\uFCBB\u008F\uFCBC\u008F\uFCBD\u008F\uFCBE\u008F\uFCBF" + //   735 -   739
-                "\u008F\uFCC0\u008F\uFCC1\u008F\uFCC2\u008F\uFBE1\u008F\uFBE2" + //   740 -   744
-                "\u008F\uFBE3\u008F\uFBE4\u008F\uFBE5\u008F\uFBE6\u008F\uFBE7" + //   745 -   749
-                "\u008F\uFBE8\u008F\uFBE9\u008F\uFBEA\u008F\uFBEB\u008F\uFBEC" + //   750 -   754
-                "\u008F\uFBED\u008F\uFBEE\u008F\uFBEF\u008F\uFBF0\u008F\uFBF1" + //   755 -   759
-                "\u008F\uFBF2\u008F\uFBF3\u008F\uFBF4\u008F\uFBF5\u008F\uFBF6" + //   760 -   764
-                "\u008F\uFBF7\u008F\uFBF8\u008F\uFBF9\u008F\uFBFA\u008F\uFBFB" + //   765 -   769
-                "\u008F\uFBFC\u008F\uFBFD\u008F\uFBFE\u008F\uFCA1\u008F\uFCA2" + //   770 -   774
-                "\u008F\uFBC1\u008F\uFBC2\u008F\uFBC3\u008F\uFBC4\u008F\uFBC5" + //   775 -   779
-                "\u008F\uFBC6\u008F\uFBC7\u008F\uFBC8\u008F\uFBC9\u008F\uFBCA" + //   780 -   784
-                "\u008F\uFBCB\u008F\uFBCC\u008F\uFBCD\u008F\uFBCE\u008F\uFBCF" + //   785 -   789
-                "\u008F\uFBD0\u008F\uFBD1\u008F\uFBD2\u008F\uFBD3\u008F\uFBD4" + //   790 -   794
-                "\u008F\uFBD5\u008F\uFBD6\u008F\uFBD7\u008F\uFBD8\u008F\uFBD9" + //   795 -   799
-                "\u008F\uFBDA\u008F\uFBDB\u008F\uFBDC\u008F\uFBDD\u008F\uFBDE" + //   800 -   804
-                "\u008F\uFBDF\u008F\uFBE0\u008F\uFBA1\u008F\uFBA2\u008F\uFBA3" + //   805 -   809
-                "\u008F\uFBA4\u008F\uFBA5\u008F\uFBA6\u008F\uFBA7\u008F\uFBA8" + //   810 -   814
-                "\u008F\uFBA9\u008F\uFBAA\u008F\uFBAB\u008F\uFBAC\u008F\uFBAD" + //   815 -   819
-                "\u008F\uFBAE\u008F\uFBAF\u008F\uFBB0\u008F\uFBB1\u008F\uFBB2" + //   820 -   824
-                "\u008F\uFBB3\u008F\uFBB4\u008F\uFBB5\u008F\uFBB6\u008F\uFBB7" + //   825 -   829
-                "\u008F\uFBB8\u008F\uFBB9\u008F\uFBBA\u008F\uFBBB\u008F\uFBBC" + //   830 -   834
-                "\u008F\uFBBD\u008F\uFBBE\u008F\uFBBF\u008F\uFBC0\u008F\uFADF" + //   835 -   839
-                "\u008F\uFAE0\u008F\uFAE1\u008F\uFAE2\u008F\uFAE3\u008F\uFAE4" + //   840 -   844
-                "\u008F\uFAE5\u008F\uFAE6\u008F\uFAE7\u008F\uFAE8\u008F\uFAE9" + //   845 -   849
-                "\u008F\uFAEA\u008F\uFAEB\u008F\uFAEC\u008F\uFAED\u008F\uFAEE" + //   850 -   854
-                "\u008F\uFAEF\u008F\uFAF0\u008F\uFAF1\u008F\uFAF2\u008F\uFAF3" + //   855 -   859
-                "\u008F\uFAF4\u008F\uFAF5\u008F\uFAF6\u008F\uFAF7\u008F\uFAF8" + //   860 -   864
-                "\u008F\uFAF9\u008F\uFAFA\u008F\uFAFB\u008F\uFAFC\u008F\uFAFD" + //   865 -   869
-                "\u008F\uFAFE\u008F\uFABF\u008F\uFAC0\u008F\uFAC1\u008F\uFAC2" + //   870 -   874
-                "\u008F\uFAC3\u008F\uFAC4\u008F\uFAC5\u008F\uFAC6\u008F\uFAC7" + //   875 -   879
-                "\u008F\uFAC8\u008F\uFAC9\u008F\uFACA\u008F\uFACB\u008F\uFACC" + //   880 -   884
-                "\u008F\uFACD\u008F\uFACE\u008F\uFACF\u008F\uFAD0\u008F\uFAD1" + //   885 -   889
-                "\u008F\uFAD2\u008F\uFAD3\u008F\uFAD4\u008F\uFAD5\u008F\uFAD6" + //   890 -   894
-                "\u008F\uFAD7\u008F\uFAD8\u008F\uFAD9\u008F\uFADA\u008F\uFADB" + //   895 -   899
-                "\u008F\uFADC\u008F\uFADD\u008F\uFADE\u008F\uF9FD\u008F\uF9FE" + //   900 -   904
-                "\u008F\uFAA1\u008F\uFAA2\u008F\uFAA3\u008F\uFAA4\u008F\uFAA5" + //   905 -   909
-                "\u008F\uFAA6\u008F\uFAA7\u008F\uFAA8\u008F\uFAA9\u008F\uFAAA" + //   910 -   914
-                "\u008F\uFAAB\u008F\uFAAC\u008F\uFAAD\u008F\uFAAE\u008F\uFAAF" + //   915 -   919
-                "\u008F\uFAB0\u008F\uFAB1\u008F\uFAB2\u008F\uFAB3\u008F\uFAB4" + //   920 -   924
-                "\u008F\uFAB5\u008F\uFAB6\u008F\uFAB7\u008F\uFAB8\u008F\uFAB9" + //   925 -   929
-                "\u008F\uFABA\u008F\uFABB\u008F\uFABC\u008F\uFABD\u008F\uFABE" + //   930 -   934
-                "\u008F\uF9DD\u008F\uF9DE\u008F\uF9DF\u008F\uF9E0\u008F\uF9E1" + //   935 -   939
-                "\u008F\uF9E2\u008F\uF9E3\u008F\uF9E4\u008F\uF9E5\u008F\uF9E6" + //   940 -   944
-                "\u008F\uF9E7\u008F\uF9E8\u008F\uF9E9\u008F\uF9EA\u008F\uF9EB" + //   945 -   949
-                "\u008F\uF9EC\u008F\uF9ED\u008F\uF9EE\u008F\uF9EF\u008F\uF9F0" + //   950 -   954
-                "\u008F\uF9F1\u008F\uF9F2\u008F\uF9F3\u008F\uF9F4\u008F\uF9F5" + //   955 -   959
-                "\u008F\uF9F6\u008F\uF9F7\u008F\uF9F8\u008F\uF9F9\u008F\uF9FA" + //   960 -   964
-                "\u008F\uF9FB\u008F\uF9FC\u008F\uF9BD\u008F\uF9BE\u008F\uF9BF" + //   965 -   969
-                "\u008F\uF9C0\u008F\uF9C1\u008F\uF9C2\u008F\uF9C3\u008F\uF9C4" + //   970 -   974
-                "\u008F\uF9C5\u008F\uF9C6\u008F\uF9C7\u008F\uF9C8\u008F\uF9C9" + //   975 -   979
-                "\u008F\uF9CA\u008F\uF9CB\u008F\uF9CC\u008F\uF9CD\u008F\uF9CE" + //   980 -   984
-                "\u008F\uF9CF\u008F\uF9D0\u008F\uF9D1\u008F\uF9D2\u008F\uF9D3" + //   985 -   989
-                "\u008F\uF9D4\u008F\uF9D5\u008F\uF9D6\u008F\uF9D7\u008F\uF9D8" + //   990 -   994
-                "\u008F\uF9D9\u008F\uF9DA\u008F\uF9DB\u008F\uF9DC\u008F\uF8FB" + //   995 -   999
-                "\u008F\uF8FC\u008F\uF8FD\u008F\uF8FE\u008F\uF9A1\u008F\uF9A2" + //  1000 -  1004
-                "\u008F\uF9A3\u008F\uF9A4\u008F\uF9A5\u008F\uF9A6\u008F\uF9A7" + //  1005 -  1009
-                "\u008F\uF9A8\u008F\uF9A9\u008F\uF9AA\u008F\uF9AB\u008F\uF9AC" + //  1010 -  1014
-                "\u008F\uF9AD\u008F\uF9AE\u008F\uF9AF\u008F\uF9B0\u008F\uF9B1" + //  1015 -  1019
-                "\u008F\uF9B2\u008F\uF9B3\u008F\uF9B4\u008F\uF9B5\u008F\uF9B6" + //  1020 -  1024
-                "\u008F\uF9B7\u008F\uF9B8\u008F\uF9B9\u008F\uF9BA\u008F\uF9BB" + //  1025 -  1029
-                "\u008F\uF9BC\u008F\uF8DB\u008F\uF8DC\u008F\uF8DD\u008F\uF8DE" + //  1030 -  1034
-                "\u008F\uF8DF\u008F\uF8E0\u008F\uF8E1\u008F\uF8E2\u008F\uF8E3" + //  1035 -  1039
-                "\u008F\uF8E4\u008F\uF8E5\u008F\uF8E6\u008F\uF8E7\u008F\uF8E8" + //  1040 -  1044
-                "\u008F\uF8E9\u008F\uF8EA\u008F\uF8EB\u008F\uF8EC\u008F\uF8ED" + //  1045 -  1049
-                "\u008F\uF8EE\u008F\uF8EF\u008F\uF8F0\u008F\uF8F1\u008F\uF8F2" + //  1050 -  1054
-                "\u008F\uF8F3\u008F\uF8F4\u008F\uF8F5\u008F\uF8F6\u008F\uF8F7" + //  1055 -  1059
-                "\u008F\uF8F8\u008F\uF8F9\u008F\uF8FA\u008F\uF8BB\u008F\uF8BC" + //  1060 -  1064
-                "\u008F\uF8BD\u008F\uF8BE\u008F\uF8BF\u008F\uF8C0\u008F\uF8C1" + //  1065 -  1069
-                "\u008F\uF8C2\u008F\uF8C3\u008F\uF8C4\u008F\uF8C5\u008F\uF8C6" + //  1070 -  1074
-                "\u008F\uF8C7\u008F\uF8C8\u008F\uF8C9\u008F\uF8CA\u008F\uF8CB" + //  1075 -  1079
-                "\u008F\uF8CC\u008F\uF8CD\u008F\uF8CE\u008F\uF8CF\u008F\uF8D0" + //  1080 -  1084
-                "\u008F\uF8D1\u008F\uF8D2\u008F\uF8D3\u008F\uF8D4\u008F\uF8D5" + //  1085 -  1089
-                "\u008F\uF8D6\u008F\uF8D7\u008F\uF8D8\u008F\uF8D9\u008F\uF8DA" + //  1090 -  1094
-                "\u008F\uF7F9\u008F\uF7FA\u008F\uF7FB\u008F\uF7FC\u008F\uF7FD" + //  1095 -  1099
-                "\u008F\uF7FE\u008F\uF8A1\u008F\uF8A2\u008F\uF8A3\u008F\uF8A4" + //  1100 -  1104
-                "\u008F\uF8A5\u008F\uF8A6\u008F\uF8A7\u008F\uF8A8\u008F\uF8A9" + //  1105 -  1109
-                "\u008F\uF8AA\u008F\uF8AB\u008F\uF8AC\u008F\uF8AD\u008F\uF8AE" + //  1110 -  1114
-                "\u008F\uF8AF\u008F\uF8B0\u008F\uF8B1\u008F\uF8B2\u008F\uF8B3" + //  1115 -  1119
-                "\u008F\uF8B4\u008F\uF8B5\u008F\uF8B6\u008F\uF8B7\u008F\uF8B8" + //  1120 -  1124
-                "\u008F\uF8B9\u008F\uF8BA\u008F\uF7D9\u008F\uF7DA\u008F\uF7DB" + //  1125 -  1129
-                "\u008F\uF7DC\u008F\uF7DD\u008F\uF7DE\u008F\uF7DF\u008F\uF7E0" + //  1130 -  1134
-                "\u008F\uF7E1\u008F\uF7E2\u008F\uF7E3\u008F\uF7E4\u008F\uF7E5" + //  1135 -  1139
-                "\u008F\uF7E6\u008F\uF7E7\u008F\uF7E8\u008F\uF7E9\u008F\uF7EA" + //  1140 -  1144
-                "\u008F\uF7EB\u008F\uF7EC\u008F\uF7ED\u008F\uF7EE\u008F\uF7EF" + //  1145 -  1149
-                "\u008F\uF7F0\u008F\uF7F1\u008F\uF7F2\u008F\uF7F3\u008F\uF7F4" + //  1150 -  1154
-                "\u008F\uF7F5\u008F\uF7F6\u008F\uF7F7\u008F\uF7F8\u008F\uF7B9" + //  1155 -  1159
-                "\u008F\uF7BA\u008F\uF7BB\u008F\uF7BC\u008F\uF7BD\u008F\uF7BE" + //  1160 -  1164
-                "\u008F\uF7BF\u008F\uF7C0\u008F\uF7C1\u008F\uF7C2\u008F\uF7C3" + //  1165 -  1169
-                "\u008F\uF7C4\u008F\uF7C5\u008F\uF7C6\u008F\uF7C7\u008F\uF7C8" + //  1170 -  1174
-                "\u008F\uF7C9\u008F\uF7CA\u008F\uF7CB\u008F\uF7CC\u008F\uF7CD" + //  1175 -  1179
-                "\u008F\uF7CE\u008F\uF7CF\u008F\uF7D0\u008F\uF7D1\u008F\uF7D2" + //  1180 -  1184
-                "\u008F\uF7D3\u008F\uF7D4\u008F\uF7D5\u008F\uF7D6\u008F\uF7D7" + //  1185 -  1189
-                "\u008F\uF7D8\u008F\uF6F7\u008F\uF6F8\u008F\uF6F9\u008F\uF6FA" + //  1190 -  1194
-                "\u008F\uF6FB\u008F\uF6FC\u008F\uF6FD\u008F\uF6FE\u008F\uF7A1" + //  1195 -  1199
-                "\u008F\uF7A2\u008F\uF7A3\u008F\uF7A4\u008F\uF7A5\u008F\uF7A6" + //  1200 -  1204
-                "\u008F\uF7A7\u008F\uF7A8\u008F\uF7A9\u008F\uF7AA\u008F\uF7AB" + //  1205 -  1209
-                "\u008F\uF7AC\u008F\uF7AD\u008F\uF7AE\u008F\uF7AF\u008F\uF7B0" + //  1210 -  1214
-                "\u008F\uF7B1\u008F\uF7B2\u008F\uF7B3\u008F\uF7B4\u008F\uF7B5" + //  1215 -  1219
-                "\u008F\uF7B6\u008F\uF7B7\u008F\uF7B8\u008F\uF6D7\u008F\uF6D8" + //  1220 -  1224
-                "\u008F\uF6D9\u008F\uF6DA\u008F\uF6DB\u008F\uF6DC\u008F\uF6DD" + //  1225 -  1229
-                "\u008F\uF6DE\u008F\uF6DF\u008F\uF6E0\u008F\uF6E1\u008F\uF6E2" + //  1230 -  1234
-                "\u008F\uF6E3\u008F\uF6E4\u008F\uF6E5\u008F\uF6E6\u008F\uF6E7" + //  1235 -  1239
-                "\u008F\uF6E8\u008F\uF6E9\u008F\uF6EA\u008F\uF6EB\u008F\uF6EC" + //  1240 -  1244
-                "\u008F\uF6ED\u008F\uF6EE\u008F\uF6EF\u008F\uF6F0\u008F\uF6F1" + //  1245 -  1249
-                "\u008F\uF6F2\u008F\uF6F3\u008F\uF6F4\u008F\uF6F5\u008F\uF6F6" + //  1250 -  1254
-                "\u008F\uF6B7\u008F\uF6B8\u008F\uF6B9\u008F\uF6BA\u008F\uF6BB" + //  1255 -  1259
-                "\u008F\uF6BC\u008F\uF6BD\u008F\uF6BE\u008F\uF6BF\u008F\uF6C0" + //  1260 -  1264
-                "\u008F\uF6C1\u008F\uF6C2\u008F\uF6C3\u008F\uF6C4\u008F\uF6C5" + //  1265 -  1269
-                "\u008F\uF6C6\u008F\uF6C7\u008F\uF6C8\u008F\uF6C9\u008F\uF6CA" + //  1270 -  1274
-                "\u008F\uF6CB\u008F\uF6CC\u008F\uF6CD\u008F\uF6CE\u008F\uF6CF" + //  1275 -  1279
-                "\u008F\uF6D0\u008F\uF6D1\u008F\uF6D2\u008F\uF6D3\u008F\uF6D4" + //  1280 -  1284
-                "\u008F\uF6D5\u008F\uF6D6\u008F\uF5F5\u008F\uF5F6\u008F\uF5F7" + //  1285 -  1289
-                "\u008F\uF5F8\u008F\uF5F9\u008F\uF5FA\u008F\uF5FB\u008F\uF5FC" + //  1290 -  1294
-                "\u008F\uF5FD\u008F\uF5FE\u008F\uF6A1\u008F\uF6A2\u008F\uF6A3" + //  1295 -  1299
-                "\u008F\uF6A4\u008F\uF6A5\u008F\uF6A6\u008F\uF6A7\u008F\uF6A8" + //  1300 -  1304
-                "\u008F\uF6A9\u008F\uF6AA\u008F\uF6AB\u008F\uF6AC\u008F\uF6AD" + //  1305 -  1309
-                "\u008F\uF6AE\u008F\uF6AF\u008F\uF6B0\u008F\uF6B1\u008F\uF6B2" + //  1310 -  1314
-                "\u008F\uF6B3\u008F\uF6B4\u008F\uF6B5\u008F\uF6B6\u008F\uF5D5" + //  1315 -  1319
-                "\u008F\uF5D6\u008F\uF5D7\u008F\uF5D8\u008F\uF5D9\u008F\uF5DA" + //  1320 -  1324
-                "\u008F\uF5DB\u008F\uF5DC\u008F\uF5DD\u008F\uF5DE\u008F\uF5DF" + //  1325 -  1329
-                "\u008F\uF5E0\u008F\uF5E1\u008F\uF5E2\u008F\uF5E3\u008F\uF5E4" + //  1330 -  1334
-                "\u008F\uF5E5\u008F\uF5E6\u008F\uF5E7\u008F\uF5E8\u008F\uF5E9" + //  1335 -  1339
-                "\u008F\uF5EA\u008F\uF5EB\u008F\uF5EC\u008F\uF5ED\u008F\uF5EE" + //  1340 -  1344
-                "\u008F\uF5EF\u008F\uF5F0\u008F\uF5F1\u008F\uF5F2\u008F\uF5F3" + //  1345 -  1349
-                "\u008F\uF5F4\u008F\uF5B5\u008F\uF5B6\u008F\uF5B7\u008F\uF5B8" + //  1350 -  1354
-                "\u008F\uF5B9\u008F\uF5BA\u008F\uF5BB\u008F\uF5BC\u008F\uF5BD" + //  1355 -  1359
-                "\u008F\uF5BE\u008F\uF5BF\u008F\uF5C0\u008F\uF5C1\u008F\uF5C2" + //  1360 -  1364
-                "\u008F\uF5C3\u008F\uF5C4\u008F\uF5C5\u008F\uF5C6\u008F\uF5C7" + //  1365 -  1369
-                "\u008F\uF5C8\u008F\uF5C9\u008F\uF5CA\u008F\uF5CB\u008F\uF5CC" + //  1370 -  1374
-                "\u008F\uF5CD\u008F\uF5CE\u008F\uF5CF\u008F\uF5D0\u008F\uF5D1" + //  1375 -  1379
-                "\u008F\uF5D2\u008F\uF5D3\u008F\uF5D4\u0000\uFEF3\u0000\uFEF4" + //  1380 -  1384
-                "\u0000\uFEF5\u0000\uFEF6\u0000\uFEF7\u0000\uFEF8\u0000\uFEF9" + //  1385 -  1389
-                "\u0000\uFEFA\u0000\uFEFB\u0000\uFEFC\u0000\uFEFD\u0000\uFEFE" + //  1390 -  1394
-                "\u008F\uF5A1\u008F\uF5A2\u008F\uF5A3\u008F\uF5A4\u008F\uF5A5" + //  1395 -  1399
-                "\u008F\uF5A6\u008F\uF5A7\u008F\uF5A8\u008F\uF5A9\u008F\uF5AA" + //  1400 -  1404
-                "\u008F\uF5AB\u008F\uF5AC\u008F\uF5AD\u008F\uF5AE\u008F\uF5AF" + //  1405 -  1409
-                "\u008F\uF5B0\u008F\uF5B1\u008F\uF5B2\u008F\uF5B3\u008F\uF5B4" + //  1410 -  1414
-                "\u0000\uFED3\u0000\uFED4\u0000\uFED5\u0000\uFED6\u0000\uFED7" + //  1415 -  1419
-                "\u0000\uFED8\u0000\uFED9\u0000\uFEDA\u0000\uFEDB\u0000\uFEDC" + //  1420 -  1424
-                "\u0000\uFEDD\u0000\uFEDE\u0000\uFEDF\u0000\uFEE0\u0000\uFEE1" + //  1425 -  1429
-                "\u0000\uFEE2\u0000\uFEE3\u0000\uFEE4\u0000\uFEE5\u0000\uFEE6" + //  1430 -  1434
-                "\u0000\uFEE7\u0000\uFEE8\u0000\uFEE9\u0000\uFEEA\u0000\uFEEB" + //  1435 -  1439
-                "\u0000\uFEEC\u0000\uFEED\u0000\uFEEE\u0000\uFEEF\u0000\uFEF0" + //  1440 -  1444
-                "\u0000\uFEF1\u0000\uFEF2\u0000\uFEB3\u0000\uFEB4\u0000\uFEB5" + //  1445 -  1449
-                "\u0000\uFEB6\u0000\uFEB7\u0000\uFEB8\u0000\uFEB9\u0000\uFEBA" + //  1450 -  1454
-                "\u0000\uFEBB\u0000\uFEBC\u0000\uFEBD\u0000\uFEBE\u0000\uFEBF" + //  1455 -  1459
-                "\u0000\uFEC0\u0000\uFEC1\u0000\uFEC2\u0000\uFEC3\u0000\uFEC4" + //  1460 -  1464
-                "\u0000\uFEC5\u0000\uFEC6\u0000\uFEC7\u0000\uFEC8\u0000\uFEC9" + //  1465 -  1469
-                "\u0000\uFECA\u0000\uFECB\u0000\uFECC\u0000\uFECD\u0000\uFECE" + //  1470 -  1474
-                "\u0000\uFECF\u0000\uFED0\u0000\uFED1\u0000\uFED2\u0000\uFDF1" + //  1475 -  1479
-                "\u0000\uFDF2\u0000\uFDF3\u0000\uFDF4\u0000\uFDF5\u0000\uFDF6" + //  1480 -  1484
-                "\u0000\uFDF7\u0000\uFDF8\u0000\uFDF9\u0000\uFDFA\u0000\uFDFB" + //  1485 -  1489
-                "\u0000\uFDFC\u0000\uFDFD\u0000\uFDFE\u0000\uFEA1\u0000\uFEA2" + //  1490 -  1494
-                "\u0000\uFEA3\u0000\uFEA4\u0000\uFEA5\u0000\uFEA6\u0000\uFEA7" + //  1495 -  1499
-                "\u0000\uFEA8\u0000\uFEA9\u0000\uFEAA\u0000\uFEAB\u0000\uFEAC" + //  1500 -  1504
-                "\u0000\uFEAD\u0000\uFEAE\u0000\uFEAF\u0000\uFEB0\u0000\uFEB1" + //  1505 -  1509
-                "\u0000\uFEB2\u0000\uFDD1\u0000\uFDD2\u0000\uFDD3\u0000\uFDD4" + //  1510 -  1514
-                "\u0000\uFDD5\u0000\uFDD6\u0000\uFDD7\u0000\uFDD8\u0000\uFDD9" + //  1515 -  1519
-                "\u0000\uFDDA\u0000\uFDDB\u0000\uFDDC\u0000\uFDDD\u0000\uFDDE" + //  1520 -  1524
-                "\u0000\uFDDF\u0000\uFDE0\u0000\uFDE1\u0000\uFDE2\u0000\uFDE3" + //  1525 -  1529
-                "\u0000\uFDE4\u0000\uFDE5\u0000\uFDE6\u0000\uFDE7\u0000\uFDE8" + //  1530 -  1534
-                "\u0000\uFDE9\u0000\uFDEA\u0000\uFDEB\u0000\uFDEC\u0000\uFDED" + //  1535 -  1539
-                "\u0000\uFDEE\u0000\uFDEF\u0000\uFDF0\u0000\uFDB1\u0000\uFDB2" + //  1540 -  1544
-                "\u0000\uFDB3\u0000\uFDB4\u0000\uFDB5\u0000\uFDB6\u0000\uFDB7" + //  1545 -  1549
-                "\u0000\uFDB8\u0000\uFDB9\u0000\uFDBA\u0000\uFDBB\u0000\uFDBC" + //  1550 -  1554
-                "\u0000\uFDBD\u0000\uFDBE\u0000\uFDBF\u0000\uFDC0\u0000\uFDC1" + //  1555 -  1559
-                "\u0000\uFDC2\u0000\uFDC3\u0000\uFDC4\u0000\uFDC5\u0000\uFDC6" + //  1560 -  1564
-                "\u0000\uFDC7\u0000\uFDC8\u0000\uFDC9\u0000\uFDCA\u0000\uFDCB" + //  1565 -  1569
-                "\u0000\uFDCC\u0000\uFDCD\u0000\uFDCE\u0000\uFDCF\u0000\uFDD0" + //  1570 -  1574
-                "\u0000\uFCEF\u0000\uFCF0\u0000\uFCF1\u0000\uFCF2\u0000\uFCF3" + //  1575 -  1579
-                "\u0000\uFCF4\u0000\uFCF5\u0000\uFCF6\u0000\uFCF7\u0000\uFCF8" + //  1580 -  1584
-                "\u0000\uFCF9\u0000\uFCFA\u0000\uFCFB\u0000\uFCFC\u0000\uFCFD" + //  1585 -  1589
-                "\u0000\uFCFE\u0000\uFDA1\u0000\uFDA2\u0000\uFDA3\u0000\uFDA4" + //  1590 -  1594
-                "\u0000\uFDA5\u0000\uFDA6\u0000\uFDA7\u0000\uFDA8\u0000\uFDA9" + //  1595 -  1599
-                "\u0000\uFDAA\u0000\uFDAB\u0000\uFDAC\u0000\uFDAD\u0000\uFDAE" + //  1600 -  1604
-                "\u0000\uFDAF\u0000\uFDB0\u0000\uFCCF\u0000\uFCD0\u0000\uFCD1" + //  1605 -  1609
-                "\u0000\uFCD2\u0000\uFCD3\u0000\uFCD4\u0000\uFCD5\u0000\uFCD6" + //  1610 -  1614
-                "\u0000\uFCD7\u0000\uFCD8\u0000\uFCD9\u0000\uFCDA\u0000\uFCDB" + //  1615 -  1619
-                "\u0000\uFCDC\u0000\uFCDD\u0000\uFCDE\u0000\uFCDF\u0000\uFCE0" + //  1620 -  1624
-                "\u0000\uFCE1\u0000\uFCE2\u0000\uFCE3\u0000\uFCE4\u0000\uFCE5" + //  1625 -  1629
-                "\u0000\uFCE6\u0000\uFCE7\u0000\uFCE8\u0000\uFCE9\u0000\uFCEA" + //  1630 -  1634
-                "\u0000\uFCEB\u0000\uFCEC\u0000\uFCED\u0000\uFCEE\u0000\uFCAF" + //  1635 -  1639
-                "\u0000\uFCB0\u0000\uFCB1\u0000\uFCB2\u0000\uFCB3\u0000\uFCB4" + //  1640 -  1644
-                "\u0000\uFCB5\u0000\uFCB6\u0000\uFCB7\u0000\uFCB8\u0000\uFCB9" + //  1645 -  1649
-                "\u0000\uFCBA\u0000\uFCBB\u0000\uFCBC\u0000\uFCBD\u0000\uFCBE" + //  1650 -  1654
-                "\u0000\uFCBF\u0000\uFCC0\u0000\uFCC1\u0000\uFCC2\u0000\uFCC3" + //  1655 -  1659
-                "\u0000\uFCC4\u0000\uFCC5\u0000\uFCC6\u0000\uFCC7\u0000\uFCC8" + //  1660 -  1664
-                "\u0000\uFCC9\u0000\uFCCA\u0000\uFCCB\u0000\uFCCC\u0000\uFCCD" + //  1665 -  1669
-                "\u0000\uFCCE\u0000\uFBED\u0000\uFBEE\u0000\uFBEF\u0000\uFBF0" + //  1670 -  1674
-                "\u0000\uFBF1\u0000\uFBF2\u0000\uFBF3\u0000\uFBF4\u0000\uFBF5" + //  1675 -  1679
-                "\u0000\uFBF6\u0000\uFBF7\u0000\uFBF8\u0000\uFBF9\u0000\uFBFA" + //  1680 -  1684
-                "\u0000\uFBFB\u0000\uFBFC\u0000\uFBFD\u0000\uFBFE\u0000\uFCA1" + //  1685 -  1689
-                "\u0000\uFCA2\u0000\uFCA3\u0000\uFCA4\u0000\uFCA5\u0000\uFCA6" + //  1690 -  1694
-                "\u0000\uFCA7\u0000\uFCA8\u0000\uFCA9\u0000\uFCAA\u0000\uFCAB" + //  1695 -  1699
-                "\u0000\uFCAC\u0000\uFCAD\u0000\uFCAE\u0000\uFBCD\u0000\uFBCE" + //  1700 -  1704
-                "\u0000\uFBCF\u0000\uFBD0\u0000\uFBD1\u0000\uFBD2\u0000\uFBD3" + //  1705 -  1709
-                "\u0000\uFBD4\u0000\uFBD5\u0000\uFBD6\u0000\uFBD7\u0000\uFBD8" + //  1710 -  1714
-                "\u0000\uFBD9\u0000\uFBDA\u0000\uFBDB\u0000\uFBDC\u0000\uFBDD" + //  1715 -  1719
-                "\u0000\uFBDE\u0000\uFBDF\u0000\uFBE0\u0000\uFBE1\u0000\uFBE2" + //  1720 -  1724
-                "\u0000\uFBE3\u0000\uFBE4\u0000\uFBE5\u0000\uFBE6\u0000\uFBE7" + //  1725 -  1729
-                "\u0000\uFBE8\u0000\uFBE9\u0000\uFBEA\u0000\uFBEB\u0000\uFBEC" + //  1730 -  1734
-                "\u0000\uFBAD\u0000\uFBAE\u0000\uFBAF\u0000\uFBB0\u0000\uFBB1" + //  1735 -  1739
-                "\u0000\uFBB2\u0000\uFBB3\u0000\uFBB4\u0000\uFBB5\u0000\uFBB6" + //  1740 -  1744
-                "\u0000\uFBB7\u0000\uFBB8\u0000\uFBB9\u0000\uFBBA\u0000\uFBBB" + //  1745 -  1749
-                "\u0000\uFBBC\u0000\uFBBD\u0000\uFBBE\u0000\uFBBF\u0000\uFBC0" + //  1750 -  1754
-                "\u0000\uFBC1\u0000\uFBC2\u0000\uFBC3\u0000\uFBC4\u0000\uFBC5" + //  1755 -  1759
-                "\u0000\uFBC6\u0000\uFBC7\u0000\uFBC8\u0000\uFBC9\u0000\uFBCA" + //  1760 -  1764
-                "\u0000\uFBCB\u0000\uFBCC\u0000\uFAEB\u0000\uFAEC\u0000\uFAED" + //  1765 -  1769
-                "\u0000\uFAEE\u0000\uFAEF\u0000\uFAF0\u0000\uFAF1\u0000\uFAF2" + //  1770 -  1774
-                "\u0000\uFAF3\u0000\uFAF4\u0000\uFAF5\u0000\uFAF6\u0000\uFAF7" + //  1775 -  1779
-                "\u0000\uFAF8\u0000\uFAF9\u0000\uFAFA\u0000\uFAFB\u0000\uFAFC" + //  1780 -  1784
-                "\u0000\uFAFD\u0000\uFAFE\u0000\uFBA1\u0000\uFBA2\u0000\uFBA3" + //  1785 -  1789
-                "\u0000\uFBA4\u0000\uFBA5\u0000\uFBA6\u0000\uFBA7\u0000\uFBA8" + //  1790 -  1794
-                "\u0000\uFBA9\u0000\uFBAA\u0000\uFBAB\u0000\uFBAC\u0000\uFACB" + //  1795 -  1799
-                "\u0000\uFACC\u0000\uFACD\u0000\uFACE\u0000\uFACF\u0000\uFAD0" + //  1800 -  1804
-                "\u0000\uFAD1\u0000\uFAD2\u0000\uFAD3\u0000\uFAD4\u0000\uFAD5" + //  1805 -  1809
-                "\u0000\uFAD6\u0000\uFAD7\u0000\uFAD8\u0000\uFAD9\u0000\uFADA" + //  1810 -  1814
-                "\u0000\uFADB\u0000\uFADC\u0000\uFADD\u0000\uFADE\u0000\uFADF" + //  1815 -  1819
-                "\u0000\uFAE0\u0000\uFAE1\u0000\uFAE2\u0000\uFAE3\u0000\uFAE4" + //  1820 -  1824
-                "\u0000\uFAE5\u0000\uFAE6\u0000\uFAE7\u0000\uFAE8\u0000\uFAE9" + //  1825 -  1829
-                "\u0000\uFAEA\u0000\uFAAB\u0000\uFAAC\u0000\uFAAD\u0000\uFAAE" + //  1830 -  1834
-                "\u0000\uFAAF\u0000\uFAB0\u0000\uFAB1\u0000\uFAB2\u0000\uFAB3" + //  1835 -  1839
-                "\u0000\uFAB4\u0000\uFAB5\u0000\uFAB6\u0000\uFAB7\u0000\uFAB8" + //  1840 -  1844
-                "\u0000\uFAB9\u0000\uFABA\u0000\uFABB\u0000\uFABC\u0000\uFABD" + //  1845 -  1849
-                "\u0000\uFABE\u0000\uFABF\u0000\uFAC0\u0000\uFAC1\u0000\uFAC2" + //  1850 -  1854
-                "\u0000\uFAC3\u0000\uFAC4\u0000\uFAC5\u0000\uFAC6\u0000\uFAC7" + //  1855 -  1859
-                "\u0000\uFAC8\u0000\uFAC9\u0000\uFACA\u0000\uF9E9\u0000\uF9EA" + //  1860 -  1864
-                "\u0000\uF9EB\u0000\uF9EC\u0000\uF9ED\u0000\uF9EE\u0000\uF9EF" + //  1865 -  1869
-                "\u0000\uF9F0\u0000\uF9F1\u0000\uF9F2\u0000\uF9F3\u0000\uF9F4" + //  1870 -  1874
-                "\u0000\uF9F5\u0000\uF9F6\u0000\uF9F7\u0000\uF9F8\u0000\uF9F9" + //  1875 -  1879
-                "\u0000\uF9FA\u0000\uF9FB\u0000\uF9FC\u0000\uF9FD\u0000\uF9FE" + //  1880 -  1884
-                "\u0000\uFAA1\u0000\uFAA2\u0000\uFAA3\u0000\uFAA4\u0000\uFAA5" + //  1885 -  1889
-                "\u0000\uFAA6\u0000\uFAA7\u0000\uFAA8\u0000\uFAA9\u0000\uFAAA" + //  1890 -  1894
-                "\u0000\uF9C9\u0000\uF9CA\u0000\uF9CB\u0000\uF9CC\u0000\uF9CD" + //  1895 -  1899
-                "\u0000\uF9CE\u0000\uF9CF\u0000\uF9D0\u0000\uF9D1\u0000\uF9D2" + //  1900 -  1904
-                "\u0000\uF9D3\u0000\uF9D4\u0000\uF9D5\u0000\uF9D6\u0000\uF9D7" + //  1905 -  1909
-                "\u0000\uF9D8\u0000\uF9D9\u0000\uF9DA\u0000\uF9DB\u0000\uF9DC" + //  1910 -  1914
-                "\u0000\uF9DD\u0000\uF9DE\u0000\uF9DF\u0000\uF9E0\u0000\uF9E1" + //  1915 -  1919
-                "\u0000\uF9E2\u0000\uF9E3\u0000\uF9E4\u0000\uF9E5\u0000\uF9E6" + //  1920 -  1924
-                "\u0000\uF9E7\u0000\uF9E8\u0000\uF9A9\u0000\uF9AA\u0000\uF9AB" + //  1925 -  1929
-                "\u0000\uF9AC\u0000\uF9AD\u0000\uF9AE\u0000\uF9AF\u0000\uF9B0" + //  1930 -  1934
-                "\u0000\uF9B1\u0000\uF9B2\u0000\uF9B3\u0000\uF9B4\u0000\uF9B5" + //  1935 -  1939
-                "\u0000\uF9B6\u0000\uF9B7\u0000\uF9B8\u0000\uF9B9\u0000\uF9BA" + //  1940 -  1944
-                "\u0000\uF9BB\u0000\uF9BC\u0000\uF9BD\u0000\uF9BE\u0000\uF9BF" + //  1945 -  1949
-                "\u0000\uF9C0\u0000\uF9C1\u0000\uF9C2\u0000\uF9C3\u0000\uF9C4" + //  1950 -  1954
-                "\u0000\uF9C5\u0000\uF9C6\u0000\uF9C7\u0000\uF9C8\u0000\uF8E7" + //  1955 -  1959
-                "\u0000\uF8E8\u0000\uF8E9\u0000\uF8EA\u0000\uF8EB\u0000\uF8EC" + //  1960 -  1964
-                "\u0000\uF8ED\u0000\uF8EE\u0000\uF8EF\u0000\uF8F0\u0000\uF8F1" + //  1965 -  1969
-                "\u0000\uF8F2\u0000\uF8F3\u0000\uF8F4\u0000\uF8F5\u0000\uF8F6" + //  1970 -  1974
-                "\u0000\uF8F7\u0000\uF8F8\u0000\uF8F9\u0000\uF8FA\u0000\uF8FB" + //  1975 -  1979
-                "\u0000\uF8FC\u0000\uF8FD\u0000\uF8FE\u0000\uF9A1\u0000\uF9A2" + //  1980 -  1984
-                "\u0000\uF9A3\u0000\uF9A4\u0000\uF9A5\u0000\uF9A6\u0000\uF9A7" + //  1985 -  1989
-                "\u0000\uF9A8\u0000\uF8C7\u0000\uF8C8\u0000\uF8C9\u0000\uF8CA" + //  1990 -  1994
-                "\u0000\uF8CB\u0000\uF8CC\u0000\uF8CD\u0000\uF8CE\u0000\uF8CF" + //  1995 -  1999
-                "\u0000\uF8D0\u0000\uF8D1\u0000\uF8D2\u0000\uF8D3\u0000\uF8D4" + //  2000 -  2004
-                "\u0000\uF8D5\u0000\uF8D6\u0000\uF8D7\u0000\uF8D8\u0000\uF8D9" + //  2005 -  2009
-                "\u0000\uF8DA\u0000\uF8DB\u0000\uF8DC\u0000\uF8DD\u0000\uF8DE" + //  2010 -  2014
-                "\u0000\uF8DF\u0000\uF8E0\u0000\uF8E1\u0000\uF8E2\u0000\uF8E3" + //  2015 -  2019
-                "\u0000\uF8E4\u0000\uF8E5\u0000\uF8E6\u0000\uF8A7\u0000\uF8A8" + //  2020 -  2024
-                "\u0000\uF8A9\u0000\uF8AA\u0000\uF8AB\u0000\uF8AC\u0000\uF8AD" + //  2025 -  2029
-                "\u0000\uF8AE\u0000\uF8AF\u0000\uF8B0\u0000\uF8B1\u0000\uF8B2" + //  2030 -  2034
-                "\u0000\uF8B3\u0000\uF8B4\u0000\uF8B5\u0000\uF8B6\u0000\uF8B7" + //  2035 -  2039
-                "\u0000\uF8B8\u0000\uF8B9\u0000\uF8BA\u0000\uF8BB\u0000\uF8BC" + //  2040 -  2044
-                "\u0000\uF8BD\u0000\uF8BE\u0000\uF8BF\u0000\uF8C0\u0000\uF8C1" + //  2045 -  2049
-                "\u0000\uF8C2\u0000\uF8C3\u0000\uF8C4\u0000\uF8C5\u0000\uF8C6" + //  2050 -  2054
-                "\u0000\uF7E5\u0000\uF7E6\u0000\uF7E7\u0000\uF7E8\u0000\uF7E9" + //  2055 -  2059
-                "\u0000\uF7EA\u0000\uF7EB\u0000\uF7EC\u0000\uF7ED\u0000\uF7EE" + //  2060 -  2064
-                "\u0000\uF7EF\u0000\uF7F0\u0000\uF7F1\u0000\uF7F2\u0000\uF7F3" + //  2065 -  2069
-                "\u0000\uF7F4\u0000\uF7F5\u0000\uF7F6\u0000\uF7F7\u0000\uF7F8" + //  2070 -  2074
-                "\u0000\uF7F9\u0000\uF7FA\u0000\uF7FB\u0000\uF7FC\u0000\uF7FD" + //  2075 -  2079
-                "\u0000\uF7FE\u0000\uF8A1\u0000\uF8A2\u0000\uF8A3\u0000\uF8A4" + //  2080 -  2084
-                "\u0000\uF8A5\u0000\uF8A6\u0000\uF7C5\u0000\uF7C6\u0000\uF7C7" + //  2085 -  2089
-                "\u0000\uF7C8\u0000\uF7C9\u0000\uF7CA\u0000\uF7CB\u0000\uF7CC" + //  2090 -  2094
-                "\u0000\uF7CD\u0000\uF7CE\u0000\uF7CF\u0000\uF7D0\u0000\uF7D1" + //  2095 -  2099
-                "\u0000\uF7D2\u0000\uF7D3\u0000\uF7D4\u0000\uF7D5\u0000\uF7D6" + //  2100 -  2104
-                "\u0000\uF7D7\u0000\uF7D8\u0000\uF7D9\u0000\uF7DA\u0000\uF7DB" + //  2105 -  2109
-                "\u0000\uF7DC\u0000\uF7DD\u0000\uF7DE\u0000\uF7DF\u0000\uF7E0" + //  2110 -  2114
-                "\u0000\uF7E1\u0000\uF7E2\u0000\uF7E3\u0000\uF7E4\u0000\uF7A5" + //  2115 -  2119
-                "\u0000\uF7A6\u0000\uF7A7\u0000\uF7A8\u0000\uF7A9\u0000\uF7AA" + //  2120 -  2124
-                "\u0000\uF7AB\u0000\uF7AC\u0000\uF7AD\u0000\uF7AE\u0000\uF7AF" + //  2125 -  2129
-                "\u0000\uF7B0\u0000\uF7B1\u0000\uF7B2\u0000\uF7B3\u0000\uF7B4" + //  2130 -  2134
-                "\u0000\uF7B5\u0000\uF7B6\u0000\uF7B7\u0000\uF7B8\u0000\uF7B9" + //  2135 -  2139
-                "\u0000\uF7BA\u0000\uF7BB\u0000\uF7BC\u0000\uF7BD\u0000\uF7BE" + //  2140 -  2144
-                "\u0000\uF7BF\u0000\uF7C0\u0000\uF7C1\u0000\uF7C2\u0000\uF7C3" + //  2145 -  2149
-                "\u0000\uF7C4\u0000\uF6E3\u0000\uF6E4\u0000\uF6E5\u0000\uF6E6" + //  2150 -  2154
-                "\u0000\uF6E7\u0000\uF6E8\u0000\uF6E9\u0000\uF6EA\u0000\uF6EB" + //  2155 -  2159
-                "\u0000\uF6EC\u0000\uF6ED\u0000\uF6EE\u0000\uF6EF\u0000\uF6F0" + //  2160 -  2164
-                "\u0000\uF6F1\u0000\uF6F2\u0000\uF6F3\u0000\uF6F4\u0000\uF6F5" + //  2165 -  2169
-                "\u0000\uF6F6\u0000\uF6F7\u0000\uF6F8\u0000\uF6F9\u0000\uF6FA" + //  2170 -  2174
-                "\u0000\uF6FB\u0000\uF6FC\u0000\uF6FD\u0000\uF6FE\u0000\uF7A1" + //  2175 -  2179
-                "\u0000\uF7A2\u0000\uF7A3\u0000\uF7A4\u0000\uF6C3\u0000\uF6C4" + //  2180 -  2184
-                "\u0000\uF6C5\u0000\uF6C6\u0000\uF6C7\u0000\uF6C8\u0000\uF6C9" + //  2185 -  2189
-                "\u0000\uF6CA\u0000\uF6CB\u0000\uF6CC\u0000\uF6CD\u0000\uF6CE" + //  2190 -  2194
-                "\u0000\uF6CF\u0000\uF6D0\u0000\uF6D1\u0000\uF6D2\u0000\uF6D3" + //  2195 -  2199
-                "\u0000\uF6D4\u0000\uF6D5\u0000\uF6D6\u0000\uF6D7\u0000\uF6D8" + //  2200 -  2204
-                "\u0000\uF6D9\u0000\uF6DA\u0000\uF6DB\u0000\uF6DC\u0000\uF6DD" + //  2205 -  2209
-                "\u0000\uF6DE\u0000\uF6DF\u0000\uF6E0\u0000\uF6E1\u0000\uF6E2" + //  2210 -  2214
-                "\u0000\uF6A3\u0000\uF6A4\u0000\uF6A5\u0000\uF6A6\u0000\uF6A7" + //  2215 -  2219
-                "\u0000\uF6A8\u0000\uF6A9\u0000\uF6AA\u0000\uF6AB\u0000\uF6AC" + //  2220 -  2224
-                "\u0000\uF6AD\u0000\uF6AE\u0000\uF6AF\u0000\uF6B0\u0000\uF6B1" + //  2225 -  2229
-                "\u0000\uF6B2\u0000\uF6B3\u0000\uF6B4\u0000\uF6B5\u0000\uF6B6" + //  2230 -  2234
-                "\u0000\uF6B7\u0000\uF6B8\u0000\uF6B9\u0000\uF6BA\u0000\uF6BB" + //  2235 -  2239
-                "\u0000\uF6BC\u0000\uF6BD\u0000\uF6BE\u0000\uF6BF\u0000\uF6C0" + //  2240 -  2244
-                "\u0000\uF6C1\u0000\uF6C2\u0000\uF5E1\u0000\uF5E2\u0000\uF5E3" + //  2245 -  2249
-                "\u0000\uF5E4\u0000\uF5E5\u0000\uF5E6\u0000\uF5E7\u0000\uF5E8" + //  2250 -  2254
-                "\u0000\uF5E9\u0000\uF5EA\u0000\uF5EB\u0000\uF5EC\u0000\uF5ED" + //  2255 -  2259
-                "\u0000\uF5EE\u0000\uF5EF\u0000\uF5F0\u0000\uF5F1\u0000\uF5F2" + //  2260 -  2264
-                "\u0000\uF5F3\u0000\uF5F4\u0000\uF5F5\u0000\uF5F6\u0000\uF5F7" + //  2265 -  2269
-                "\u0000\uF5F8\u0000\uF5F9\u0000\uF5FA\u0000\uF5FB\u0000\uF5FC" + //  2270 -  2274
-                "\u0000\uF5FD\u0000\uF5FE\u0000\uF6A1\u0000\uF6A2\u0000\uF5C1" + //  2275 -  2279
-                "\u0000\uF5C2\u0000\uF5C3\u0000\uF5C4\u0000\uF5C5\u0000\uF5C6" + //  2280 -  2284
-                "\u0000\uF5C7\u0000\uF5C8\u0000\uF5C9\u0000\uF5CA\u0000\uF5CB" + //  2285 -  2289
-                "\u0000\uF5CC\u0000\uF5CD\u0000\uF5CE\u0000\uF5CF\u0000\uF5D0" + //  2290 -  2294
-                "\u0000\uF5D1\u0000\uF5D2\u0000\uF5D3\u0000\uF5D4\u0000\uF5D5" + //  2295 -  2299
-                "\u0000\uF5D6\u0000\uF5D7\u0000\uF5D8\u0000\uF5D9\u0000\uF5DA" + //  2300 -  2304
-                "\u0000\uF5DB\u0000\uF5DC\u0000\uF5DD\u0000\uF5DE\u0000\uF5DF" + //  2305 -  2309
-                "\u0000\uF5E0\u0000\uF5A1\u0000\uF5A2\u0000\uF5A3\u0000\uF5A4" + //  2310 -  2314
-                "\u0000\uF5A5\u0000\uF5A6\u0000\uF5A7\u0000\uF5A8\u0000\uF5A9" + //  2315 -  2319
-                "\u0000\uF5AA\u0000\uF5AB\u0000\uF5AC\u0000\uF5AD\u0000\uF5AE" + //  2320 -  2324
-                "\u0000\uF5AF\u0000\uF5B0\u0000\uF5B1\u0000\uF5B2\u0000\uF5B3" + //  2325 -  2329
-                "\u0000\uF5B4\u0000\uF5B5\u0000\uF5B6\u0000\uF5B7\u0000\uF5B8" + //  2330 -  2334
-                "\u0000\uF5B9\u0000\uF5BA\u0000\uF5BB\u0000\uF5BC\u0000\uF5BD" + //  2335 -  2339
-                "\u0000\uF5BE\u0000\uF5BF\u0000\uF5C0\u0000\uF3FE\u0000\u0000" + //  2340 -  2344
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2345 -  2349
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2350 -  2354
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2355 -  2359
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2360 -  2364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2365 -  2369
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2370 -  2374
-                "\u0000\u0000\u0000\uD5BC\u0000\uD5C0\u0000\uD5BD\u0000\u0000" + //  2375 -  2379
-                "\u0000\uF1D5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1D7" + //  2380 -  2384
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2385 -  2389
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB5B3\u0000\uF1D6" + //  2390 -  2394
-                "\u0000\u0000\u0000\u0000\u0000\uC1FB\u0000\uB8B3\u0000\u0000" + //  2395 -  2399
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1D9" + //  2400 -  2404
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2405 -  2409
-                "\u0000\u0000\u0000\uF3BC\u0000\u0000\u0000\u0000\u0000\u0000" + //  2410 -  2414
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3BD\u0000\u0000" + //  2415 -  2419
-                "\u0000\uF3BE\u0000\u0000\u0000\u0000\u0000\uCFC9\u0000\u0000" + //  2420 -  2424
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3BB" + //  2425 -  2429
-                "\u0000\uC2EB\u0000\uBAED\u0000\u0000\u0000\u0000\u0000\uF3BF" + //  2430 -  2434
-                "\u0000\u0000\u0000\u0000\u008F\uF3B9\u0000\u0000\u0000\u0000" + //  2435 -  2439
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2440 -  2444
-                "\u0000\u0000\u0000\u0000\u0000\uA2F2\u0000\u0000\u0000\u0000" + //  2445 -  2449
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2450 -  2454
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2455 -  2459
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2460 -  2464
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA2DE\u0000\u0000" + //  2465 -  2469
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2470 -  2474
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2475 -  2479
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uF4A7\u008F\uF4AA" + //  2480 -  2484
-                "\u008F\uF4AB\u008F\uF4B1\u008F\uF4B8\u008F\uF4BB\u008F\uF4BC" + //  2485 -  2489
-                "\u008F\uF4C4\u008F\uF4C5\u008F\uF4C9\u008F\uF4CC\u008F\uF4CD" + //  2490 -  2494
-                "\u008F\uF4CE\u008F\uF4CF\u008F\uF4D1\u008F\uF4D3\u008F\uF4D6" + //  2495 -  2499
-                "\u008F\uF4D8\u0000\uF3F3\u0000\uF3F4\u0000\uCEF0\u0000\uF3F1" + //  2500 -  2504
-                "\u0000\u0000\u0000\u0000\u0000\uF3F5\u0000\uF3F6\u0000\u0000" + //  2505 -  2509
-                "\u0000\u0000\u0000\uF3F8\u0000\u0000\u0000\uF3F7\u0000\u0000" + //  2510 -  2514
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3FA" + //  2515 -  2519
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3FB\u0000\uF3F9" + //  2520 -  2524
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2525 -  2529
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC9F7\u0000\u0000" + //  2530 -  2534
-                "\u0000\uF1A4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2535 -  2539
-                "\u0000\uF1A5\u0000\u0000\u0000\uF1A6\u0000\u0000\u0000\u0000" + //  2540 -  2544
-                "\u0000\u0000\u0000\u0000\u0000\uF1A7\u0000\u0000\u0000\u0000" + //  2545 -  2549
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2550 -  2554
-                "\u0000\u0000\u0000\u0000\u0000\uE3DD\u0000\uB7A6\u0000\u0000" + //  2555 -  2559
-                "\u0000\u0000\u0000\u0000\u0000\uB5E7\u0000\uCDD2\u0000\uE3DF" + //  2560 -  2564
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2565 -  2569
-                "\u0000\uE3E0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB1AE" + //  2570 -  2574
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE3E3" + //  2575 -  2579
-                "\u0000\uC1CD\u0000\uF3EB\u0000\u0000\u0000\u0000\u0000\u0000" + //  2580 -  2584
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2585 -  2589
-                "\u0000\u0000\u0000\u0000\u0000\uF3EC\u0000\u0000\u0000\u0000" + //  2590 -  2594
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2595 -  2599
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2600 -  2604
-                "\u0000\u0000\u0000\u0000\u0000\uC9A1\u0000\u0000\u0000\u0000" + //  2605 -  2609
-                "\u0000\uF3ED\u0000\u0000\u0000\uC7FD\u0000\u0000\u0000\u0000" + //  2610 -  2614
-                "\u0000\uC2CC\u0000\uB1D8\u0000\uB6EE\u0000\u0000\u0000\uB6EF" + //  2615 -  2619
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2620 -  2624
-                "\u0000\u0000\u0000\u0000\u0000\uC3F3\u0000\uF1CE\u0000\uB6F0" + //  2625 -  2629
-                "\u0000\u0000\u0000\u0000\u0000\uB2EF\u0000\u0000\u0000\u0000" + //  2630 -  2634
-                "\u0000\uF1CD\u0000\u0000\u0000\u0000\u0000\uF1CB\u0000\u0000" + //  2635 -  2639
-                "\u0000\uF1CC\u0000\u0000\u0000\uF1CA\u0000\uF3DC\u0000\u0000" + //  2640 -  2644
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3DD\u0000\u0000" + //  2645 -  2649
-                "\u0000\u0000\u0000\uF3DE\u0000\u0000\u0000\u0000\u0000\u0000" + //  2650 -  2654
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3DF\u0000\u0000" + //  2655 -  2659
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3E0\u0000\u0000" + //  2660 -  2664
-                "\u0000\uF3E1\u0000\uF3E2\u0000\u0000\u0000\uF3E3\u0000\u0000" + //  2665 -  2669
-                "\u0000\uF3E4\u0000\uF3E5\u0000\uF3E6\u0000\u0000\u0000\u0000" + //  2670 -  2674
-                "\u0000\uCEBE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2675 -  2679
-                "\u0000\uCAC2\u0000\u0000\u008F\uB0A9\u0000\u0000\u0000\uD0A4" + //  2680 -  2684
-                "\u0000\u0000\u0000\u0000\u0000\uC3E6\u0000\u0000\u0000\u0000" + //  2685 -  2689
-                "\u0000\u0000\u0000\uD0A5\u0000\uB6FA\u0000\u0000\u0000\u0000" + //  2690 -  2694
-                "\u0000\u0000\u0000\uD0A6\u0000\u0000\u0000\uB4DD\u0000\uC3B0" + //  2695 -  2699
-                "\u0000\u0000\u0000\uBCE7\u0000\uD0A7\u0000\u0000\u0000\u0000" + //  2700 -  2704
-                "\u0000\uD0A8\u0000\uB9F4\u0000\uCCB9\u0000\u0000\u0000\u0000" + //  2705 -  2709
-                "\u0000\uF3A3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2710 -  2714
-                "\u0000\u0000\u0000\u0000\u008F\uEBFA\u0000\uCBB2\u0000\u0000" + //  2715 -  2719
-                "\u0000\u0000\u0000\uF3AB\u008F\uEBFB\u0000\u0000\u0000\uF3A7" + //  2720 -  2724
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2725 -  2729
-                "\u0000\u0000\u0000\u0000\u0000\uF3AC\u0000\u0000\u0000\u0000" + //  2730 -  2734
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD4E1\u0000\uD4DF" + //  2735 -  2739
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2740 -  2744
-                "\u0000\uBBCE\u0000\uBFD1\u0000\u0000\u0000\uC1D4\u0000\uD4E3" + //  2745 -  2749
-                "\u0000\uC0BC\u0000\uB0ED\u0000\uC7E4\u0000\u0000\u0000\u0000" + //  2750 -  2754
-                "\u0000\u0000\u0000\u0000\u0000\uC4DB\u0000\u0000\u0000\uD4E5" + //  2755 -  2759
-                "\u0000\uD4E4\u0000\uD4E6\u0000\uD4E7\u0000\uD4E8\u0000\u0000" + //  2760 -  2764
-                "\u0000\u0000\u0000\uA4A1\u0000\uA4A2\u0000\uA4A3\u0000\uA4A4" + //  2765 -  2769
-                "\u0000\uA4A5\u0000\uA4A6\u0000\uA4A7\u0000\uA4A8\u0000\uA4A9" + //  2770 -  2774
-                "\u0000\uA4AA\u0000\uA4AB\u0000\uA4AC\u0000\uA4AD\u0000\uA4AE" + //  2775 -  2779
-                "\u0000\uA4AF\u0000\uA4B0\u0000\uA4B1\u0000\uA4B2\u0000\uA4B3" + //  2780 -  2784
-                "\u0000\uA4B4\u0000\uA4B5\u0000\uA4B6\u0000\uA4B7\u0000\uA4B8" + //  2785 -  2789
-                "\u0000\uA4B9\u0000\uA4BA\u0000\uA4BB\u0000\uA4BC\u0000\uA4BD" + //  2790 -  2794
-                "\u0000\uA4BE\u0000\uA4BF\u0000\uF2E6\u0000\u0000\u0000\u0000" + //  2795 -  2799
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF2E7" + //  2800 -  2804
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2805 -  2809
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2810 -  2814
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF2E8" + //  2815 -  2819
-                "\u0000\u0000\u0000\uF2E9\u0000\u0000\u0000\u0000\u0000\u0000" + //  2820 -  2824
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC3B2" + //  2825 -  2829
-                "\u0000\u0000\u0000\u0000\u0000\uB2C5\u0000\u0000\u0000\u0000" + //  2830 -  2834
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2835 -  2839
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3D2\u0000\u0000" + //  2840 -  2844
-                "\u0000\uD3D4\u0000\uBEA8\u0000\uB1B3\u0000\u0000\u0000\u0000" + //  2845 -  2849
-                "\u0000\uD3D7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2850 -  2854
-                "\u0000\uD5A6\u008F\uB9AF\u0000\uC2C5\u0000\u0000\u0000\u0000" + //  2855 -  2859
-                "\u0000\uCBB8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC5CA" + //  2860 -  2864
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2865 -  2869
-                "\u0000\uD5A7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2870 -  2874
-                "\u0000\u0000\u0000\u0000\u0000\uCBE5\u008F\uB9B7\u0000\uBACA" + //  2875 -  2879
-                "\u0000\u0000\u0000\u0000\u0000\uBEAA\u0000\u0000\u0000\uCAC7" + //  2880 -  2884
-                "\u0000\uC4BA\u0000\uBAA2\u0000\u0000\u0000\uB9E0\u0000\uBDE7" + //  2885 -  2889
-                "\u0000\u0000\u0000\uBFDC\u0000\u0000\u0000\u0000\u0000\u0000" + //  2890 -  2894
-                "\u0000\uF0F3\u0000\u0000\u0000\u0000\u0000\uF0F2\u0000\uCDC2" + //  2895 -  2899
-                "\u0000\uB4E8\u0000\uC8D2\u0000\uC6DC\u0000\u0000\u0000\u0000" + //  2900 -  2904
-                "\u0000\u0000\u0000\uBFFC\u0000\uCECE\u0000\u0000\u0000\uB7DB" + //  2905 -  2909
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2910 -  2914
-                "\u0000\uD3CE\u0000\uD3CC\u0000\u0000\u0000\uD4A7\u0000\u0000" + //  2915 -  2919
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2920 -  2924
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2925 -  2929
-                "\u0000\u0000\u0000\uD3D1\u0000\u0000\u0000\u0000\u0000\u0000" + //  2930 -  2934
-                "\u0000\u0000\u0000\u0000\u0000\uD3CB\u0000\u0000\u0000\uD3CF" + //  2935 -  2939
-                "\u0000\u0000\u0000\u0000\u0000\uD3CD\u008F\uEBA5\u0000\u0000" + //  2940 -  2944
-                "\u0000\u0000\u0000\u0000\u0000\uF2DA\u0000\u0000\u0000\uF2D6" + //  2945 -  2949
-                "\u0000\u0000\u0000\uF2D7\u0000\uF2D3\u0000\uF2D9\u0000\u0000" + //  2950 -  2954
-                "\u0000\uF2D5\u0000\uB3E2\u0000\u0000\u0000\u0000\u0000\uCFCC" + //  2955 -  2959
-                "\u0000\u0000\u0000\uF2D8\u0000\uF2D4\u0000\uF2D2\u0000\uF2D1" + //  2960 -  2964
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2965 -  2969
-                "\u0000\uF2DC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2970 -  2974
-                "\u0000\uB6AD\u0000\u0000\u0000\uD4D0\u0000\u0000\u0000\u0000" + //  2975 -  2979
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2980 -  2984
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2985 -  2989
-                "\u0000\u0000\u0000\uCAE8\u0000\u0000\u0000\u0000\u0000\u0000" + //  2990 -  2994
-                "\u0000\uC1FD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  2995 -  2999
-                "\u0000\uC4C6\u0000\u0000\u008F\uF4AC\u0000\uD4D2\u0000\uF2C1" + //  3000 -  3004
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3005 -  3009
-                "\u0000\uF2C4\u0000\u0000\u0000\u0000\u0000\uB8F1\u0000\uF2C2" + //  3010 -  3014
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF2C5" + //  3015 -  3019
-                "\u0000\u0000\u0000\uF2C6\u0000\uF2C7\u0000\u0000\u0000\uF2CB" + //  3020 -  3024
-                "\u0000\u0000\u0000\uBBAA\u0000\u0000\u0000\u0000\u0000\u0000" + //  3025 -  3029
-                "\u0000\u0000\u0000\uC2E4\u0000\u0000\u0000\u0000\u0000\u0000" + //  3030 -  3034
-                "\u0000\u0000\u0000\uBBCC\u0000\uD3D0\u0000\u0000\u0000\u0000" + //  3035 -  3039
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3040 -  3044
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3045 -  3049
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3050 -  3054
-                "\u0000\u0000\u0000\uD3D3\u0000\u0000\u0000\uD3D8\u0000\u0000" + //  3055 -  3059
-                "\u0000\u0000\u0000\u0000\u0000\uD3D6\u0000\uD3D5\u0000\u0000" + //  3060 -  3064
-                "\u0000\uEFF4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3065 -  3069
-                "\u0000\u0000\u0000\u0000\u0000\uEFF5\u0000\u0000\u0000\uBAE5" + //  3070 -  3074
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFF6\u0000\uEFF7" + //  3075 -  3079
-                "\u0000\u0000\u0000\u0000\u0000\uCBC9\u0000\u0000\u0000\u0000" + //  3080 -  3084
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3085 -  3089
-                "\u0000\u0000\u0000\uC1CB\u0000\u0000\u0000\u0000\u0000\u0000" + //  3090 -  3094
-                "\u0000\uB0A4\u0000\uF2BE\u0000\u0000\u0000\u0000\u0000\u0000" + //  3095 -  3099
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF2BF" + //  3100 -  3104
-                "\u0000\u0000\u0000\uCBEE\u0000\uBBAD\u0000\u0000\u0000\uBAFA" + //  3105 -  3109
-                "\u0000\uC1AF\u0000\u0000\u0000\u0000\u008F\uEAE6\u0000\u0000" + //  3110 -  3114
-                "\u0000\u0000\u0000\uF2C0\u0000\u0000\u0000\u0000\u0000\u0000" + //  3115 -  3119
-                "\u0000\u0000\u0000\uF2C3\u0000\u0000\u008F\uEAEA\u0000\u0000" + //  3120 -  3124
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3B2\u0000\u0000" + //  3125 -  3129
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3130 -  3134
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3135 -  3139
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3140 -  3144
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3145 -  3149
-                "\u0000\u0000\u0000\u0000\u0000\uD3C1\u0000\uD3C6\u0000\u0000" + //  3150 -  3154
-                "\u0000\uD3C2\u0000\u0000\u0000\uEFF1\u0000\uEFF3\u0000\u0000" + //  3155 -  3159
-                "\u0000\u0000\u0000\uEFF2\u0000\u0000\u0000\u0000\u0000\u0000" + //  3160 -  3164
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3165 -  3169
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3170 -  3174
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3175 -  3179
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3180 -  3184
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1E0\u0000\u0000" + //  3185 -  3189
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3190 -  3194
-                "\u0000\u0000\u0000\u0000\u0000\uE0A6\u0000\u0000\u0000\uC4DE" + //  3195 -  3199
-                "\u0000\u0000\u0000\uE0A8\u0000\uE0A7\u0000\u0000\u0000\u0000" + //  3200 -  3204
-                "\u0000\uE0A9\u0000\u0000\u0000\uE0AA\u0000\u0000\u0000\u0000" + //  3205 -  3209
-                "\u0000\uBCDF\u0000\uC9E3\u0000\u0000\u0000\u0000\u0000\u0000" + //  3210 -  3214
-                "\u0000\uCCEC\u0000\uE0AB\u0000\uE0AC\u0000\uC1D6\u0000\uBCA4" + //  3215 -  3219
-                "\u0000\uE0AD\u0000\uF1EF\u0000\u0000\u0000\u0000\u0000\u0000" + //  3220 -  3224
-                "\u0000\uBFF1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3225 -  3229
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3230 -  3234
-                "\u0000\u0000\u0000\uF1F0\u0000\u0000\u0000\uF1F1\u0000\u0000" + //  3235 -  3239
-                "\u0000\uF1F2\u0000\uF1F3\u0000\u0000\u0000\u0000\u0000\u0000" + //  3240 -  3244
-                "\u0000\uB9E2\u008F\uF4F5\u0000\u0000\u0000\u0000\u008F\uE9ED" + //  3245 -  3249
-                "\u0000\u0000\u0000\uF1F4\u0000\uF1F5\u0000\uF1DE\u0000\u0000" + //  3250 -  3254
-                "\u0000\uF1DD\u0000\uF1DF\u0000\u0000\u0000\uF1DC\u0000\u0000" + //  3255 -  3259
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3260 -  3264
-                "\u0000\u0000\u0000\uF1E2\u008F\uE9D1\u0000\u0000\u0000\u0000" + //  3265 -  3269
-                "\u0000\u0000\u0000\uC2CD\u0000\u0000\u0000\u0000\u0000\uF1E1" + //  3270 -  3274
-                "\u0000\u0000\u0000\uF1E4\u0000\u0000\u0000\u0000\u0000\uB6C3" + //  3275 -  3279
-                "\u0000\uF1E3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1E5" + //  3280 -  3284
-                "\u0000\uF1B6\u0000\uF1B2\u0000\u0000\u0000\u0000\u0000\uF1B5" + //  3285 -  3289
-                "\u0000\u0000\u0000\u0000\u008F\uE8DD\u0000\uB4DB\u0000\u0000" + //  3290 -  3294
-                "\u0000\u0000\u0000\u0000\u0000\uF1B7\u0000\u0000\u0000\uF1B8" + //  3295 -  3299
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3300 -  3304
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3305 -  3309
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1B9" + //  3310 -  3314
-                "\u0000\uF1BA\u0000\u0000\u0000\uEFC7\u0000\u0000\u0000\u0000" + //  3315 -  3319
-                "\u0000\uEFC9\u008F\uE5EA\u0000\u0000\u0000\u0000\u008F\uE5EB" + //  3320 -  3324
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3325 -  3329
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB4D5\u0000\uEFC8" + //  3330 -  3334
-                "\u0000\uCCFA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3335 -  3339
-                "\u0000\u0000\u0000\u0000\u0000\uEFD4\u0000\uEFCA\u0000\u0000" + //  3340 -  3344
-                "\u0000\u0000\u0000\uEFCD\u0000\u0000\u0000\uB0EA\u0000\u0000" + //  3345 -  3349
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3350 -  3354
-                "\u0000\u0000\u0000\u0000\u0000\uB9D9\u0000\u0000\u0000\u0000" + //  3355 -  3359
-                "\u0000\u0000\u0000\uCFBA\u0000\u0000\u0000\u0000\u0000\u0000" + //  3360 -  3364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3365 -  3369
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEEBE" + //  3370 -  3374
-                "\u0000\u0000\u0000\u0000\u008F\uF4E5\u0000\u0000\u0000\uEDAF" + //  3375 -  3379
-                "\u0000\u0000\u0000\u0000\u0000\uEDB2\u0000\uEDB1\u0000\u0000" + //  3380 -  3384
-                "\u0000\uEDB0\u0000\u0000\u0000\u0000\u0000\uEDB4\u0000\uEDB3" + //  3385 -  3389
-                "\u0000\u0000\u0000\uCCF6\u0000\u0000\u0000\u0000\u0000\u0000" + //  3390 -  3394
-                "\u0000\uEDB6\u0000\u0000\u0000\uEDB5\u0000\uEDB7\u0000\u0000" + //  3395 -  3399
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEDB8\u0000\u0000" + //  3400 -  3404
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3405 -  3409
-                "\u008F\uE3BC\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uE3BF" + //  3410 -  3414
-                "\u0000\u0000\u0000\u0000\u0000\uC6DF\u0000\uB3C3\u0000\u0000" + //  3415 -  3419
-                "\u008F\uE3C1\u0000\uEEE7\u0000\u0000\u0000\u0000\u0000\uEEE4" + //  3420 -  3424
-                "\u0000\uEEE6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3425 -  3429
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEEE2" + //  3430 -  3434
-                "\u0000\u0000\u0000\uEBC6\u0000\u0000\u0000\u0000\u0000\u0000" + //  3435 -  3439
-                "\u0000\u0000\u0000\uEBC9\u0000\u0000\u0000\uEBCA\u0000\u0000" + //  3440 -  3444
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3445 -  3449
-                "\u0000\u0000\u0000\uBABE\u0000\uC2C2\u0000\uEBC8\u0000\u0000" + //  3450 -  3454
-                "\u0000\uBEDB\u0000\uC9BE\u0000\u0000\u0000\u0000\u0000\u0000" + //  3455 -  3459
-                "\u0000\u0000\u0000\u0000\u0000\uEBC7\u0000\u0000\u0000\u0000" + //  3460 -  3464
-                "\u0000\uBBEC\u0000\u0000\u0000\uEAC2\u0000\uEAC1\u0000\uE9DA" + //  3465 -  3469
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAC6\u0000\u0000" + //  3470 -  3474
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3475 -  3479
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAC3\u0000\u0000" + //  3480 -  3484
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAC4\u0000\u0000" + //  3485 -  3489
-                "\u0000\u0000\u0000\uEAC5\u0000\u0000\u0000\uEAC7\u0000\u0000" + //  3490 -  3494
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1EE\u0000\u0000" + //  3495 -  3499
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3500 -  3504
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3505 -  3509
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3510 -  3514
-                "\u0000\u0000\u0000\u0000\u008F\uF3B8\u0000\u0000\u0000\u0000" + //  3515 -  3519
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3520 -  3524
-                "\u0000\u0000\u0000\u0000\u0000\uBFC9\u0000\uEDE3\u0000\u0000" + //  3525 -  3529
-                "\u0000\uBCAD\u0000\uEDE4\u0000\uB5C7\u0000\u0000\u0000\u0000" + //  3530 -  3534
-                "\u0000\uF0E4\u0000\u0000\u0000\u0000\u0000\uF0E3\u0000\u0000" + //  3535 -  3539
-                "\u0000\uF0E2\u0000\u0000\u0000\u0000\u0000\uEBF1\u0000\u0000" + //  3540 -  3544
-                "\u0000\uCADC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3545 -  3549
-                "\u0000\u0000\u0000\uF0E5\u0000\uF0E6\u0000\u0000\u0000\u0000" + //  3550 -  3554
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3555 -  3559
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uC9D3" + //  3560 -  3564
-                "\u0000\uDFD9\u0000\uC3BA\u0000\uDFDC\u0000\uDFD7\u0000\u0000" + //  3565 -  3569
-                "\u0000\u0000\u0000\u0000\u0000\uDFDB\u0000\u0000\u0000\u0000" + //  3570 -  3574
-                "\u0000\u0000\u0000\u0000\u0000\uDFDA\u0000\uC5C0\u0000\uB0D9" + //  3575 -  3579
-                "\u008F\uF4A1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3580 -  3584
-                "\u0000\uB7F5\u0000\uBADE\u0000\uC7ED\u0000\u0000\u0000\u0000" + //  3585 -  3589
-                "\u0000\u0000\u0000\uD1F4\u0000\uD1F2\u0000\u0000\u0000\u0000" + //  3590 -  3594
-                "\u0000\u0000\u0000\u0000\u0000\uC9FB\u0000\uBEEA\u0000\uD1FB" + //  3595 -  3599
-                "\u0000\uB3E4\u0000\uD1F5\u0000\uD1F3\u0000\uC1CF\u0000\u0000" + //  3600 -  3604
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3605 -  3609
-                "\u0000\u0000\u0000\uD1F7\u0000\u0000\u0000\uD1F6\u0000\uF0D1" + //  3610 -  3614
-                "\u0000\uF3D3\u0000\uCCCC\u0000\u0000\u0000\uF0D2\u0000\u0000" + //  3615 -  3619
-                "\u0000\uF0D3\u0000\u0000\u0000\uF0D4\u0000\uB3D7\u0000\u0000" + //  3620 -  3624
-                "\u0000\uF0D6\u0000\u0000\u0000\uBFD9\u0000\u0000\u0000\u0000" + //  3625 -  3629
-                "\u0000\u0000\u0000\uF0D7\u0000\u0000\u0000\u0000\u0000\uB7A4" + //  3630 -  3634
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0D8" + //  3635 -  3639
-                "\u0000\uF0DC\u0000\u0000\u0000\uF0DA\u0000\u0000\u0000\u0000" + //  3640 -  3644
-                "\u0000\u0000\u0000\uD5B9\u0000\u0000\u0000\u0000\u0000\u0000" + //  3645 -  3649
-                "\u0000\uC9D8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD5BA" + //  3650 -  3654
-                "\u0000\u0000\u0000\uD5B5\u0000\u0000\u0000\u0000\u0000\u0000" + //  3655 -  3659
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3660 -  3664
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3665 -  3669
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3670 -  3674
-                "\u0000\uCCBB\u0000\uBCFB\u0000\u0000\u0000\u0000\u0000\u0000" + //  3675 -  3679
-                "\u0000\uF0BC\u0000\u0000\u0000\uF0BD\u0000\uBFCC\u0000\uF0BE" + //  3680 -  3684
-                "\u0000\u0000\u0000\uCEEE\u0000\u0000\u0000\u0000\u0000\uF0B9" + //  3685 -  3689
-                "\u0000\uF0C0\u0000\uF0C2\u0000\u0000\u0000\uF0C1\u0000\u0000" + //  3690 -  3694
-                "\u0000\uF0BF\u0000\u0000\u0000\u0000\u0000\uF0C3\u0000\u0000" + //  3695 -  3699
-                "\u0000\u0000\u0000\uF0C4\u0000\u0000\u0000\u0000\u0000\uC1FA" + //  3700 -  3704
-                "\u0000\u0000\u0000\uB2E2\u0000\u0000\u0000\uB6C0\u0000\u0000" + //  3705 -  3709
-                "\u0000\u0000\u0000\uEFBB\u0000\uEFB5\u0000\u0000\u0000\u0000" + //  3710 -  3714
-                "\u0000\uEFB4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3715 -  3719
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3720 -  3724
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3725 -  3729
-                "\u0000\u0000\u008F\uE5D0\u0000\u0000\u0000\u0000\u0000\u0000" + //  3730 -  3734
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA2A1" + //  3735 -  3739
-                "\u0000\uA1FE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1FB" + //  3740 -  3744
-                "\u0000\u0000\u0000\u0000\u0000\uA1FD\u0000\uA1FC\u0000\u0000" + //  3745 -  3749
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3750 -  3754
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3755 -  3759
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3760 -  3764
-                "\u0000\uA1BE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1BD" + //  3765 -  3769
-                "\u0000\uA1BD\u0000\uA1C2\u0000\u0000\u0000\uA1C6\u0000\uA1C7" + //  3770 -  3774
-                "\u0000\u0000\u0000\u0000\u0000\uA1C8\u0000\uA1C9\u0000\u0000" + //  3775 -  3779
-                "\u0000\u0000\u0000\u0001\u0000\u0002\u0000\u0003\u0000\u0004" + //  3780 -  3784
-                "\u0000\u0005\u0000\u0006\u0000\u0007\u0000\u0008\u0000\u0009" + //  3785 -  3789
-                "\u0000\n\u0000\u000B\u0000\u000C\u0000\r\u0000\u000E" + //  3790 -  3794
-                "\u0000\u000F\u0000\u0010\u0000\u0011\u0000\u0012\u0000\u0013" + //  3795 -  3799
-                "\u0000\u0014\u0000\u0015\u0000\u0016\u0000\u0017\u0000\u0018" + //  3800 -  3804
-                "\u0000\u0019\u0000\u001A\u0000\u001B\u0000\u001C\u0000\u001D" + //  3805 -  3809
-                "\u0000\u001E\u0000\u001F\u0000\uBFFD\u0000\uB4E7\u0000\u0000" + //  3810 -  3814
-                "\u0000\u0000\u0000\uCDBA\u0000\uB2ED\u0000\uBDB8\u0000\uB8DB" + //  3815 -  3819
-                "\u0000\u0000\u0000\uF0B5\u0000\u0000\u0000\uF0B4\u0000\uBBF3" + //  3820 -  3824
-                "\u0000\uF0B6\u0000\uF0B3\u0000\u0000\u0000\u0000\u0000\uBBA8" + //  3825 -  3829
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0BA\u0000\uEAAD" + //  3830 -  3834
-                "\u0000\u0000\u0000\u0000\u0000\uD2D6\u0000\u0000\u0000\uBFF7" + //  3835 -  3839
-                "\u0000\uF0B8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCCB4" + //  3840 -  3844
-                "\u0000\u0000\u0000\u0000\u0000\uD4EE\u0000\u0000\u0000\uC2E7" + //  3845 -  3849
-                "\u0000\u0000\u0000\uC5B7\u0000\uC2C0\u0000\uC9D7\u0000\uD4EF" + //  3850 -  3854
-                "\u0000\uD4F0\u0000\uB1FB\u0000\u0000\u0000\u0000\u0000\uBCBA" + //  3855 -  3859
-                "\u0000\uD4F1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3860 -  3864
-                "\u0000\uB0D0\u0000\uD4F2\u0000\u0000\u0000\u0000\u0000\u0000" + //  3865 -  3869
-                "\u0000\u0000\u0000\u0000\u0000\uD4F3\u0000\u0000\u0000\uEEDD" + //  3870 -  3874
-                "\u0000\u0000\u0000\uC4E0\u008F\uE3AA\u008F\uE3AB\u0000\uCBD5" + //  3875 -  3879
-                "\u0000\uB6FC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3880 -  3884
-                "\u0000\u0000\u008F\uE3AF\u008F\uE3B0\u0000\u0000\u0000\u0000" + //  3885 -  3889
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEEE0" + //  3890 -  3894
-                "\u0000\uEEE1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3895 -  3899
-                "\u0000\u0000\u0000\uEEDF\u0000\u0000\u0000\u0000\u0000\uEEE3" + //  3900 -  3904
-                "\u0000\uB1A3\u0000\u0000\u0000\u0000\u0000\uCED9\u0000\u0000" + //  3905 -  3909
-                "\u0000\u0000\u0000\u0000\u0000\uF0AB\u0000\uEEAE\u0000\u0000" + //  3910 -  3914
-                "\u0000\uF0AA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3915 -  3919
-                "\u008F\uE6EF\u0000\uF0AE\u0000\uF0AC\u0000\uF0AD\u0000\u0000" + //  3920 -  3924
-                "\u0000\uF0AF\u0000\u0000\u0000\uF0B0\u0000\uCEEC\u0000\uF0B1" + //  3925 -  3929
-                "\u0000\uF0B2\u0000\u0000\u0000\uC0C9\u0000\uC8BB\u0000\u0000" + //  3930 -  3934
-                "\u0000\u0000\u0000\u0000\u0000\uD4E9\u0000\u0000\u0000\u0000" + //  3935 -  3939
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCAD1" + //  3940 -  3944
-                "\u0000\uD4EA\u008F\uB8E1\u0000\u0000\u0000\u0000\u0000\u0000" + //  3945 -  3949
-                "\u0000\uB2C6\u0000\uD4EB\u0000\u0000\u0000\u0000\u0000\u0000" + //  3950 -  3954
-                "\u0000\u0000\u0000\uCDBC\u0000\uB3B0\u0000\u0000\u0000\uD2C9" + //  3955 -  3959
-                "\u0000\uBDC8\u0000\uC2BF\u0000\uD4EC\u0000\uCCEB\u0000\u0000" + //  3960 -  3964
-                "\u0000\u0000\u0000\u0000\u0000\uB5E5\u0000\u0000\u0000\uE0E6" + //  3965 -  3969
-                "\u0000\uCDFD\u008F\uCCA5\u0000\u0000\u0000\uCEB0\u0000\u0000" + //  3970 -  3974
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3975 -  3979
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3980 -  3984
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3985 -  3989
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  3990 -  3994
-                "\u0000\u0000\u0000\uA2CD\u0000\u0000\u0000\uA2CE\u0000\u0000" + //  3995 -  3999
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4000 -  4004
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4005 -  4009
-                "\u0000\uDDDD\u0000\uDDDC\u0000\u0000\u0000\u0000\u0000\uDDDF" + //  4010 -  4014
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDDE\u0000\u0000" + //  4015 -  4019
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4020 -  4024
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4025 -  4029
-                "\u0000\u0000\u0000\uDEF6\u0000\u0000\u0000\u0000\u0000\uDEFC" + //  4030 -  4034
-                "\u0000\u0000\u0000\u0000\u0000\uDEFA\u0000\u0000\u0000\uC5A9" + //  4035 -  4039
-                "\u0000\u0000\u0000\u0000\u0000\uDFA3\u0000\uDEF7\u0000\u0000" + //  4040 -  4044
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDEF8" + //  4045 -  4049
-                "\u0000\uDEE0\u0000\uC2CB\u0000\u0000\u0000\uEFF8\u0000\u0000" + //  4050 -  4054
-                "\u0000\uC9ED\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4055 -  4059
-                "\u0000\u0000\u0000\u0000\u0000\uEFFB\u0000\uEFF9\u0000\uB9DF" + //  4060 -  4064
-                "\u0000\u0000\u0000\uEFFA\u0000\uB8C2\u0000\u0000\u0000\u0000" + //  4065 -  4069
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4070 -  4074
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCAC5\u0000\uEFFD" + //  4075 -  4079
-                "\u0000\uF0A1\u0000\uEFFE\u0000\uF0A2\u0000\uEFE0\u0000\u0000" + //  4080 -  4084
-                "\u0000\uB4D8\u0000\uB3D5\u0000\uB9DE\u0000\uC8B6\u0000\u0000" + //  4085 -  4089
-                "\u0000\uEFE2\u0000\uEFE1\u0000\u0000\u0000\u0000\u0000\u0000" + //  4090 -  4094
-                "\u0000\u0000\u0000\uEFE3\u0000\u0000\u0000\u0000\u0000\u0000" + //  4095 -  4099
-                "\u0000\u0000\u0000\uB1DC\u0000\u0000\u0000\u0000\u0000\u0000" + //  4100 -  4104
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFE6\u0000\u0000" + //  4105 -  4109
-                "\u0000\uEFE5\u0000\uEFE4\u0000\u0000\u0000\uEFE7\u0000\u0000" + //  4110 -  4114
-                "\u0000\uB7B4\u0000\uEEBB\u0000\u0000\u0000\uEEBC\u0000\u0000" + //  4115 -  4119
-                "\u0000\u0000\u0000\u0000\u0000\uC9F4\u0000\u0000\u0000\u0000" + //  4120 -  4124
-                "\u0000\u0000\u0000\u0000\u0000\uB3D4\u0000\u0000\u0000\u0000" + //  4125 -  4129
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4130 -  4134
-                "\u0000\uCDB9\u0000\u0000\u0000\uB6BF\u0000\u0000\u0000\u0000" + //  4135 -  4139
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC5D4\u0000\u0000" + //  4140 -  4144
-                "\u0000\u0000\u0000\uF1E6\u0000\u0000\u0000\uF1E8\u0000\uF1E7" + //  4145 -  4149
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1E9\u0000\uF1EB" + //  4150 -  4154
-                "\u0000\uF1EA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4155 -  4159
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4160 -  4164
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4165 -  4169
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4170 -  4174
-                "\u0000\u0000\u008F\uF3B7\u0000\u0000\u0000\u0000\u0000\u0000" + //  4175 -  4179
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4180 -  4184
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4185 -  4189
-                "\u0000\u0000\u0000\uD7E3\u0000\uD7E9\u0000\uD7E1\u0000\u0000" + //  4190 -  4194
-                "\u0000\uC5DC\u0000\u0000\u0000\u0000\u0000\uD7E6\u0000\uC9DD" + //  4195 -  4199
-                "\u0000\u0000\u0000\u0000\u0000\uD7E0\u0000\u0000\u0000\uD7E5" + //  4200 -  4204
-                "\u0000\uCEE7\u0000\uBBD7\u0000\u0000\u0000\u0000\u0000\uF1F6" + //  4205 -  4209
-                "\u0000\uF1F7\u0000\u0000\u0000\u0000\u0000\uF1F8\u0000\u0000" + //  4210 -  4214
-                "\u0000\u0000\u0000\u0000\u0000\uC8B1\u0000\uF1FA\u0000\u0000" + //  4215 -  4219
-                "\u0000\uC9A6\u0000\uF1FB\u0000\uF1F9\u0000\u0000\u0000\uF1FD" + //  4220 -  4224
-                "\u0000\u0000\u0000\u0000\u0000\uF1FC\u0000\u0000\u0000\u0000" + //  4225 -  4229
-                "\u0000\uF1FE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF2A1" + //  4230 -  4234
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB3C4" + //  4235 -  4239
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7E0\u0000\uD1FC" + //  4240 -  4244
-                "\u0000\uCEAD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD1F8" + //  4245 -  4249
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD1FD\u0000\uD1FA" + //  4250 -  4254
-                "\u0000\u0000\u0000\uD1F9\u0000\u0000\u0000\u0000\u0000\u0000" + //  4255 -  4259
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCECF\u008F\uB3D8" + //  4260 -  4264
-                "\u0000\u0000\u0000\u0000\u0000\uB8F9\u0000\uCCE7\u0000\u0000" + //  4265 -  4269
-                "\u0000\uEFD9\u0000\uC1AE\u0000\u0000\u0000\u0000\u0000\u0000" + //  4270 -  4274
-                "\u0000\uEFDA\u0000\u0000\u0000\uCAC4\u0000\uEFDB\u0000\uB3AB" + //  4275 -  4279
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB1BC\u0000\u0000" + //  4280 -  4284
-                "\u0000\uB4D7\u008F\uF4EA\u0000\uB4D6\u0000\uEFDC\u0000\u0000" + //  4285 -  4289
-                "\u0000\uEFDD\u0000\u0000\u0000\uEFDE\u0000\uEFDF\u0000\u0000" + //  4290 -  4294
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4295 -  4299
-                "\u0000\uF2E3\u0000\uF2E1\u0000\uC3AD\u0000\u0000\u0000\u0000" + //  4300 -  4304
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4305 -  4309
-                "\u0000\u0000\u0000\u0000\u0000\uCBF0\u0000\u0000\u0000\u0000" + //  4310 -  4314
-                "\u0000\u0000\u0000\u0000\u0000\uCEDA\u0000\u0000\u0000\u0000" + //  4315 -  4319
-                "\u0000\uF2E5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4320 -  4324
-                "\u0000\u0000\u0000\uB1B4\u0000\u0000\u0000\uBAB6\u0000\uBFB0" + //  4325 -  4329
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4330 -  4334
-                "\u0000\u0000\u0000\u0000\u0000\uD3A9\u0000\uC5E2\u0000\u0000" + //  4335 -  4339
-                "\u0000\u0000\u0000\u0000\u0000\uD3AA\u0000\u0000\u0000\uB0A2" + //  4340 -  4344
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4345 -  4349
-                "\u0000\u0000\u0000\u0000\u0000\uC0E6\u0000\u0000\u0000\uCFB9" + //  4350 -  4354
-                "\u0000\uE9F8\u0000\u0000\u0000\uE9F9\u0000\u0000\u0000\u0000" + //  4355 -  4359
-                "\u0000\u0000\u0000\u0000\u0000\uEAA1\u0000\u0000\u0000\uBFAA" + //  4360 -  4364
-                "\u0000\u0000\u0000\uE9FB\u0000\u0000\u0000\uE9FE\u0000\u0000" + //  4365 -  4369
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9F6" + //  4370 -  4374
-                "\u0000\uEFCB\u0000\u0000\u0000\uEFCC\u0000\u0000\u0000\u0000" + //  4375 -  4379
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4380 -  4384
-                "\u0000\uEFCE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4385 -  4389
-                "\u0000\u0000\u0000\uEFD0\u0000\u0000\u0000\u0000\u0000\u0000" + //  4390 -  4394
-                "\u0000\u0000\u0000\uEFD1\u0000\u0000\u0000\uEFD2\u0000\u0000" + //  4395 -  4399
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFD5\u0000\uEFD3" + //  4400 -  4404
-                "\u0000\uEFD6\u0000\uEFD8\u0000\uEFA9\u0000\u0000\u0000\u0000" + //  4405 -  4409
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4410 -  4414
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7AD" + //  4415 -  4419
-                "\u0000\u0000\u0000\uEFAB\u0000\u0000\u008F\uE4FA\u0000\u0000" + //  4420 -  4424
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB8B0\u0000\u0000" + //  4425 -  4429
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4430 -  4434
-                "\u0000\uEFAA\u0000\u0000\u0000\uBEE1\u0000\u0000\u0000\uC6DB" + //  4435 -  4439
-                "\u0000\uBFEB\u0000\u0000\u0000\u0000\u0000\uC3D9\u0000\u0000" + //  4440 -  4444
-                "\u0000\uB6F8\u0000\u0000\u0000\uEEA6\u0000\uCDB7\u0000\uB1BF" + //  4445 -  4449
-                "\u0000\u0000\u0000\uCAD7\u0000\uB2E1\u0000\uEEA1\u0000\uEEA2" + //  4450 -  4454
-                "\u0000\uEEA3\u0000\uEEA4\u0000\uC6BB\u0000\uC3A3\u0000\uB0E3" + //  4455 -  4459
-                "\u0000\uEEA8\u0000\u0000\u0000\uEEA9\u0000\uF4A3\u0000\u0000" + //  4460 -  4464
-                "\u0000\u0000\u0000\uC2BD\u0000\u0000\u0000\uEEAA\u0000\u0000" + //  4465 -  4469
-                "\u0000\uECE3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC4B6" + //  4470 -  4474
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB1DB" + //  4475 -  4479
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4480 -  4484
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4485 -  4489
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECE4" + //  4490 -  4494
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4495 -  4499
-                "\u0000\u0000\u0000\uEDD3\u0000\u0000\u0000\u0000\u0000\uC7DA" + //  4500 -  4504
-                "\u0000\uCED8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4505 -  4509
-                "\u0000\uBDB4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEDD4" + //  4510 -  4514
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDA2" + //  4515 -  4519
-                "\u0000\uEDD6\u0000\u0000\u0000\uEDD5\u0000\u0000\u0000\u0000" + //  4520 -  4524
-                "\u0000\uEDD9\u0000\uCDC1\u0000\uBEFB\u008F\uE4DE\u0000\uEFA2" + //  4525 -  4529
-                "\u0000\uEFA4\u0000\u0000\u008F\uE4E0\u0000\uB6D3\u0000\u0000" + //  4530 -  4534
-                "\u0000\uC9C5\u0000\u0000\u0000\u0000\u0000\uBCE2\u0000\uCFA3" + //  4535 -  4539
-                "\u0000\u0000\u0000\uEEFE\u0000\uBAF8\u0000\u0000\u0000\u0000" + //  4540 -  4544
-                "\u0000\uCFBF\u0000\u0000\u0000\u0000\u0000\uEFA6\u0000\u0000" + //  4545 -  4549
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFA5\u0000\uEFA7" + //  4550 -  4554
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB4A6" + //  4555 -  4559
-                "\u0000\u0000\u0000\u0000\u0000\uD0D4\u0000\u0000\u0000\uD0CC" + //  4560 -  4564
-                "\u0000\u0000\u008F\uB1A3\u0000\uCEE3\u0000\u0000\u0000\uBBF8" + //  4565 -  4569
-                "\u0000\u0000\u0000\uD0CD\u0000\u0000\u0000\uD0D2\u008F\uB1A7" + //  4570 -  4574
-                "\u0000\u0000\u008F\uB1A9\u0000\u0000\u0000\uD0D5\u0000\u0000" + //  4575 -  4579
-                "\u0000\uD0CE\u0000\u0000\u008F\uB1AC\u0000\uB6A1\u0000\u0000" + //  4580 -  4584
-                "\u0000\uB0CD\u0000\u0000\u0000\u0000\u0000\uF2A6\u0000\uF2A7" + //  4585 -  4589
-                "\u0000\u0000\u0000\uF2A8\u0000\u0000\u0000\uF2A9\u0000\uF2AA" + //  4590 -  4594
-                "\u0000\uF2AB\u0000\uF2AC\u0000\u0000\u0000\u0000\u0000\u0000" + //  4595 -  4599
-                "\u0000\uF2AD\u0000\uF2AE\u0000\u0000\u0000\uDDB5\u0000\uF2AF" + //  4600 -  4604
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4605 -  4609
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE4F8\u0000\uB5B4" + //  4610 -  4614
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD6C4\u0000\u0000" + //  4615 -  4619
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uBBCA\u0000\u0000" + //  4620 -  4624
-                "\u0000\uCAF8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4625 -  4629
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4630 -  4634
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4635 -  4639
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4640 -  4644
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3C3\u0000\u0000" + //  4645 -  4649
-                "\u0000\u0000\u0000\uB8B4\u0000\uF3C4\u0000\u0000\u0000\u0000" + //  4650 -  4654
-                "\u0000\uB8B4\u0000\uF3C5\u0000\u0000\u0000\uBCAF\u008F\uE4C7" + //  4655 -  4659
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBDFB\u0000\u0000" + //  4660 -  4664
-                "\u0000\u0000\u008F\uE4CB\u0000\u0000\u0000\uEEFA\u0000\uCADF" + //  4665 -  4669
-                "\u0000\u0000\u0000\u0000\u0000\uB1D4\u0000\u0000\u0000\u0000" + //  4670 -  4674
-                "\u0000\u0000\u0000\u0000\u0000\uC9C6\u0000\uC3F2\u0000\u0000" + //  4675 -  4679
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB5F8\u008F\uE4D0" + //  4680 -  4684
-                "\u0000\uEEFC\u008F\uE4D1\u0000\uB9DD\u0000\u0000\u0000\u0000" + //  4685 -  4689
-                "\u008F\uE4D2\u0000\uB6E4\u0000\u0000\u0000\u0000\u0000\uBDC6" + //  4690 -  4694
-                "\u0000\u0000\u0000\uC6BC\u0000\u0000\u0000\u0000\u008F\uE3F8" + //  4695 -  4699
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4700 -  4704
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC1AD\u0000\u0000" + //  4705 -  4709
-                "\u0000\uEEF4\u0000\u0000\u0000\uEEEE\u0000\uEEF3\u0000\u0000" + //  4710 -  4714
-                "\u0000\uCCC3\u0000\u0000\u0000\uC4B8\u0000\uEEF5\u0000\uEEF2" + //  4715 -  4719
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD2F8\u0000\u0000" + //  4720 -  4724
-                "\u0000\uD3A3\u0000\uD2FA\u0000\u0000\u0000\u0000\u0000\uD2FE" + //  4725 -  4729
-                "\u008F\uB5AF\u0000\u0000\u0000\uD3A1\u0000\uD2FB\u0000\u0000" + //  4730 -  4734
-                "\u0000\u0000\u0000\uD3BE\u0000\u0000\u0000\u0000\u0000\uBAE9" + //  4735 -  4739
-                "\u0000\uB3B1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4740 -  4744
-                "\u0000\uD2F9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3A5" + //  4745 -  4749
-                "\u0000\uB0F6\u0000\uD3A4\u0000\u0000\u0000\uB7A5\u0000\uEDE0" + //  4750 -  4754
-                "\u0000\uEDE1\u0000\uEDE2\u0000\u0000\u0000\u0000\u0000\u0000" + //  4755 -  4759
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4760 -  4764
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4765 -  4769
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4770 -  4774
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4775 -  4779
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uECD6" + //  4780 -  4784
-                "\u0000\uF3C0\u0000\uF3C1\u0000\u0000\u0000\u0000\u0000\uF3C2" + //  4785 -  4789
-                "\u0000\u0000\u0000\uECAF\u0000\u0000\u0000\u0000\u0000\u0000" + //  4790 -  4794
-                "\u0000\u0000\u0000\uC6A6\u0000\u0000\u0000\uECB1\u0000\u0000" + //  4795 -  4799
-                "\u0000\uCBAD\u0000\u0000\u0000\uECB2\u0000\u0000\u0000\uECB3" + //  4800 -  4804
-                "\u0000\u0000\u0000\uECB4\u0000\u0000\u0000\u0000\u0000\u0000" + //  4805 -  4809
-                "\u0000\u0000\u0000\uECB5\u0000\u0000\u0000\u0000\u0000\u0000" + //  4810 -  4814
-                "\u0000\u0000\u0000\uC6DA\u0000\u0000\u0000\u0000\u0000\u0000" + //  4815 -  4819
-                "\u0000\u0000\u0000\u0000\u008F\uE8B6\u0000\u0000\u0000\uB8DC" + //  4820 -  4824
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0FC\u0000\u0000" + //  4825 -  4829
-                "\u0000\u0000\u0000\u0000\u0000\uF0FD\u0000\uF0FE\u0000\uF1A1" + //  4830 -  4834
-                "\u0000\u0000\u0000\uF1A3\u0000\uF1A2\u0000\u0000\u0000\u0000" + //  4835 -  4839
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4840 -  4844
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2D3" + //  4845 -  4849
-                "\u0000\u0000\u0000\u0000\u0000\uE2D2\u0000\u0000\u0000\u0000" + //  4850 -  4854
-                "\u0000\uE2D4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4855 -  4859
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4860 -  4864
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2D6\u0000\u0000" + //  4865 -  4869
-                "\u0000\uEAF6\u0000\u0000\u0000\uEAF1\u0000\uEAF7\u0000\u0000" + //  4870 -  4874
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4875 -  4879
-                "\u0000\u0000\u0000\uEAFB\u0000\uF0B7\u0000\u0000\u0000\u0000" + //  4880 -  4884
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4885 -  4889
-                "\u0000\u0000\u0000\uB2A8\u0000\u0000\u0000\u0000\u0000\u0000" + //  4890 -  4894
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAFE" + //  4895 -  4899
-                "\u0000\uB6DF\u008F\uE3D8\u0000\u0000\u0000\u0000\u0000\u0000" + //  4900 -  4904
-                "\u0000\uC5B4\u0000\uEEEA\u0000\u0000\u0000\u0000\u0000\uEEED" + //  4905 -  4909
-                "\u0000\uEEEB\u0000\u0000\u0000\uEEF0\u0000\u0000\u0000\u0000" + //  4910 -  4914
-                "\u008F\uE3DF\u0000\u0000\u0000\uEEF1\u008F\uE3E1\u0000\u0000" + //  4915 -  4919
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEEE9" + //  4920 -  4924
-                "\u0000\u0000\u008F\uE3E3\u0000\uEEF6\u0000\uB1F4\u0000\u0000" + //  4925 -  4929
-                "\u0000\u0000\u0000\uEEE8\u0000\u0000\u0000\uEDBA\u0000\u0000" + //  4930 -  4934
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4935 -  4939
-                "\u0000\u0000\u0000\u0000\u0000\uEDB9\u0000\uBFC8\u0000\uEDBB" + //  4940 -  4944
-                "\u0000\u0000\u0000\u0000\u0000\uB6ED\u0000\uEDBC\u0000\uEDBE" + //  4945 -  4949
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4950 -  4954
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4955 -  4959
-                "\u0000\u0000\u0000\u0000\u0000\uEDBF\u0000\u0000\u0000\uEBF6" + //  4960 -  4964
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  4965 -  4969
-                "\u0000\u0000\u0000\u0000\u0000\uEBFA\u0000\u0000\u0000\u0000" + //  4970 -  4974
-                "\u0000\uEBF7\u0000\u0000\u0000\uEBF9\u0000\uEBF8\u0000\u0000" + //  4975 -  4979
-                "\u0000\u0000\u0000\u0000\u008F\uDECB\u0000\u0000\u0000\u0000" + //  4980 -  4984
-                "\u0000\uEBFB\u0000\u0000\u0000\uBCB1\u0000\u0000\u0000\uEBFD" + //  4985 -  4989
-                "\u0000\uEBFC\u0000\uC9E8\u0000\u0000\u0000\u0000\u0000\uECA1" + //  4990 -  4994
-                "\u0000\uEED6\u0000\uEED7\u0000\u0000\u0000\u0000\u0000\u0000" + //  4995 -  4999
-                "\u0000\u0000\u0000\uC8D0\u0000\uBAD3\u0000\uBCE1\u0000\uEED8" + //  5000 -  5004
-                "\u0000\u0000\u0000\uEED9\u0000\uCEA4\u0000\uBDC5\u0000\uCCEE" + //  5005 -  5009
-                "\u0000\uCECC\u0000\uEEDA\u0000\uB6E2\u0000\u0000\u0000\u0000" + //  5010 -  5014
-                "\u0000\u0000\u0000\u0000\u0000\uEEDB\u008F\uE3A6\u0000\uC5A3" + //  5015 -  5019
-                "\u0000\u0000\u008F\uE3A8\u0000\uEEDE\u0000\uB3F8\u0000\uBFCB" + //  5020 -  5024
-                "\u008F\uE3A9\u0000\uEEDC\u0000\uEEB3\u0000\uEEB2\u0000\uEEB0" + //  5025 -  5029
-                "\u0000\uE3E4\u0000\uB4D4\u0000\u0000\u0000\u0000\u0000\uEDEE" + //  5030 -  5034
-                "\u0000\u0000\u0000\uEEB5\u0000\uEEB4\u0000\u0000\u0000\u0000" + //  5035 -  5039
-                "\u0000\u0000\u0000\u0000\u0000\uEEB6\u0000\u0000\u0000\uCDB8" + //  5040 -  5044
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5045 -  5049
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5050 -  5054
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3B4" + //  5055 -  5059
-                "\u0000\uCDA3\u0000\u0000\u0000\uBEA7\u0000\u0000\u0000\uD3BA" + //  5060 -  5064
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3B9" + //  5065 -  5069
-                "\u0000\uD3B0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5070 -  5074
-                "\u0000\uC2C3\u0000\u0000\u0000\uC0D7\u0000\u0000\u0000\uECF1" + //  5075 -  5079
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB8D9" + //  5080 -  5084
-                "\u0000\u0000\u0000\uECEE\u0000\uECEF\u0000\u0000\u0000\u0000" + //  5085 -  5089
-                "\u0000\u0000\u0000\uCFA9\u0000\u0000\u0000\u0000\u0000\u0000" + //  5090 -  5094
-                "\u0000\uC4B7\u0000\u0000\u0000\uC1A9\u0000\u0000\u0000\u0000" + //  5095 -  5099
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECF2" + //  5100 -  5104
-                "\u0000\u0000\u0000\u0000\u0000\uECF5\u0000\uB1F3\u0000\uC1CC" + //  5105 -  5109
-                "\u0000\u0000\u0000\uB8AF\u0000\u0000\u0000\uCDDA\u0000\u0000" + //  5110 -  5114
-                "\u008F\uE1E2\u0000\uEEAB\u0000\uC5AC\u0000\u0000\u0000\u0000" + //  5115 -  5119
-                "\u0000\u0000\u0000\uC1F8\u0000\uBCD7\u0000\uEEAC\u0000\u0000" + //  5120 -  5124
-                "\u0000\u0000\u0000\uEEAF\u0000\u0000\u0000\u0000\u0000\uBDE5" + //  5125 -  5129
-                "\u0000\uEEAD\u0000\uC1AB\u0000\uC1AA\u0000\u0000\u0000\uB0E4" + //  5130 -  5134
-                "\u0000\u0000\u0000\uCECB\u0000\uEEB1\u0000\u0000\u0000\uC8F2" + //  5135 -  5139
-                "\u0000\uC2A4\u0000\uEDF5\u0000\uB0A9\u0000\uCFA2\u0000\u0000" + //  5140 -  5144
-                "\u0000\u0000\u0000\u0000\u0000\uEDFA\u0000\u0000\u0000\u0000" + //  5145 -  5149
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC2E1" + //  5150 -  5154
-                "\u0000\u0000\u0000\u0000\u0000\uBDB5\u0000\uBFCA\u0000\u0000" + //  5155 -  5159
-                "\u0000\u0000\u0000\uEDFC\u0000\uEDFB\u0000\u0000\u0000\uB0EF" + //  5160 -  5164
-                "\u0000\uEDFD\u0000\u0000\u0000\u0000\u0000\uC9AF\u0000\u0000" + //  5165 -  5169
-                "\u0000\uEEA7\u0000\u0000\u0000\uBEDD\u0000\uECB6\u0000\u0000" + //  5170 -  5174
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5175 -  5179
-                "\u0000\u0000\u0000\uB9EB\u0000\uD0AE\u0000\uECB7\u0000\u0000" + //  5180 -  5184
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5185 -  5189
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5190 -  5194
-                "\u0000\uECB8\u0000\uC9BF\u0000\uECB9\u0000\u0000\u0000\uECC1" + //  5195 -  5199
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7B8\u0000\uC2A5" + //  5200 -  5204
-                "\u0000\uB2E4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5205 -  5209
-                "\u008F\uB1BB\u0000\uBDD3\u0000\u0000\u0000\u0000\u008F\uB1BE" + //  5210 -  5214
-                "\u0000\uD0D9\u0000\u0000\u0000\uD0DE\u0000\uD0DC\u0000\u0000" + //  5215 -  5219
-                "\u0000\u0000\u0000\uD0D7\u0000\u0000\u0000\u0000\u0000\uC2AF" + //  5220 -  5224
-                "\u0000\uD0DA\u0000\u0000\u0000\uD0DD\u0000\uD0DB\u0000\u0000" + //  5225 -  5229
-                "\u0000\uCADD\u0000\u0000\u0000\uD0D8\u0000\uC2E0\u0000\uC1F7" + //  5230 -  5234
-                "\u0000\u0000\u0000\uC6A8\u0000\u0000\u0000\uEDF0\u0000\uB5D5" + //  5235 -  5239
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEDF9" + //  5240 -  5244
-                "\u0000\u0000\u0000\uEDF6\u0000\uEEA5\u0000\uC6A9\u0000\uC3E0" + //  5245 -  5249
-                "\u0000\uEDF3\u0000\u0000\u0000\uC4FE\u0000\uC5D3\u0000\uEDF4" + //  5250 -  5254
-                "\u0000\uEDF8\u0000\uBFE0\u0000\u0000\u0000\uC7E7\u0000\uC4CC" + //  5255 -  5259
-                "\u0000\u0000\u0000\u0000\u0000\uC0C2\u0000\uEDF7\u0000\uC2AE" + //  5260 -  5264
-                "\u0000\uB6ED\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5265 -  5269
-                "\u0000\uEDC0\u0000\uEDBD\u0000\u0000\u0000\uEDC1\u0000\u0000" + //  5270 -  5274
-                "\u0000\uBCD6\u0000\uEDC2\u0000\uB5B0\u0000\uB7B3\u0000\u0000" + //  5275 -  5279
-                "\u008F\uE0D9\u0000\u0000\u0000\u0000\u0000\uB8AE\u0000\u0000" + //  5280 -  5284
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5285 -  5289
-                "\u0000\u0000\u0000\u0000\u0000\uEDC3\u0000\u0000\u0000\u0000" + //  5290 -  5294
-                "\u0000\u0000\u0000\uC6F0\u0000\uEDA8\u0000\u0000\u0000\u0000" + //  5295 -  5299
-                "\u0000\uEDAA\u0000\uEDA7\u0000\u0000\u0000\u0000\u0000\u0000" + //  5300 -  5304
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5305 -  5309
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5310 -  5314
-                "\u0000\uEDAD\u0000\u0000\u0000\uBDB3\u0000\u0000\u0000\uEDAC" + //  5315 -  5319
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5320 -  5324
-                "\u0000\uEDAE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD1A4" + //  5325 -  5329
-                "\u0000\u0000\u0000\u0000\u0000\uB6CF\u0000\u0000\u0000\u0000" + //  5330 -  5334
-                "\u0000\u0000\u0000\uD1A1\u0000\uD1A2\u0000\u0000\u0000\u0000" + //  5335 -  5339
-                "\u0000\uC6AF\u0000\u0000\u0000\uC1FC\u0000\u0000\u0000\uB6A3" + //  5340 -  5344
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCBCD\u0000\uD1A5" + //  5345 -  5349
-                "\u0000\u0000\u008F\uB2BB\u0000\u0000\u0000\uCEBD\u0000\u0000" + //  5350 -  5354
-                "\u0000\u0000\u0000\u0000\u0000\uD1A6\u0000\u0000\u0000\uEBAE" + //  5355 -  5359
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBB0" + //  5360 -  5364
-                "\u0000\uCDF7\u0000\u0000\u0000\uEBAF\u0000\uBFC6\u0000\u0000" + //  5365 -  5369
-                "\u0000\uEBB1\u0000\u0000\u0000\u0000\u0000\uEBB2\u0000\u0000" + //  5370 -  5374
-                "\u0000\u0000\u0000\uEBB3\u0000\uB4D1\u0000\u0000\u0000\u0000" + //  5375 -  5379
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBB4" + //  5380 -  5384
-                "\u0000\u0000\u0000\u0000\u0000\uEBB5\u0000\u0000\u0000\uEBB6" + //  5385 -  5389
-                "\u0000\uC7E5\u0000\u0000\u0000\uB8AD\u0000\uECCE\u0000\uECCD" + //  5390 -  5394
-                "\u0000\u0000\u0000\uC9EA\u0000\u0000\u0000\u0000\u0000\u0000" + //  5395 -  5399
-                "\u0000\uBCC1\u0000\u0000\u0000\u0000\u0000\uC5D2\u0000\u0000" + //  5400 -  5404
-                "\u0000\u0000\u008F\uDFB9\u0000\u0000\u0000\u0000\u0000\u0000" + //  5405 -  5409
-                "\u008F\uF4E0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5410 -  5414
-                "\u0000\u0000\u0000\uECD1\u0000\uECD2\u0000\uB9D8\u0000\uECD0" + //  5415 -  5419
-                "\u0000\u0000\u0000\u0000\u0000\uF1D8\u0000\u0000\u0000\u0000" + //  5420 -  5424
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5425 -  5429
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1CF\u0000\uF1D0" + //  5430 -  5434
-                "\u0000\u0000\u0000\u0000\u0000\uF1D1\u0000\uF1D2\u0000\u0000" + //  5435 -  5439
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1D4" + //  5440 -  5444
-                "\u0000\u0000\u0000\u0000\u0000\uF1D3\u0000\u0000\u0000\u0000" + //  5445 -  5449
-                "\u0000\u0000\u0000\uBDD9\u0000\uB2EC\u0000\uECCC\u0000\uCFA8" + //  5450 -  5454
-                "\u0000\uC4C2\u0000\uCFC5\u0000\u0000\u0000\u0000\u0000\uBBF1" + //  5455 -  5459
-                "\u0000\uECCB\u0000\u0000\u0000\uC2B1\u0000\u0000\u0000\u0000" + //  5460 -  5464
-                "\u0000\uECDC\u0000\uC1A8\u0000\u0000\u0000\u0000\u0000\uC6F8" + //  5465 -  5469
-                "\u0000\u0000\u0000\uC9D0\u0000\u0000\u0000\u0000\u0000\u0000" + //  5470 -  5474
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECCF\u0000\uBBBF" + //  5475 -  5479
-                "\u0000\uBBF2\u0000\u0000\u0000\uBEDE\u0000\u0000\u0000\uCDD7" + //  5480 -  5484
-                "\u0000\u0000\u0000\uEBA9\u0000\u0000\u0000\u0000\u0000\uCAA4" + //  5485 -  5489
-                "\u0000\uC7C6\u0000\uEBAA\u0000\u0000\u0000\uEBAB\u0000\uB8AB" + //  5490 -  5494
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB5AC\u0000\u0000" + //  5495 -  5499
-                "\u0000\u0000\u0000\u0000\u0000\uEBAC\u0000\u0000\u0000\u0000" + //  5500 -  5504
-                "\u0000\uBBEB\u0000\uC7C1\u0000\uEBAD\u0000\u0000\u0000\uB3D0" + //  5505 -  5509
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5510 -  5514
-                "\u0000\uEAF3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5515 -  5519
-                "\u0000\uEAF4\u0000\uEAF5\u0000\u0000\u0000\u0000\u0000\u0000" + //  5520 -  5524
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5525 -  5529
-                "\u0000\u0000\u0000\u0000\u0000\uEAF9\u0000\u0000\u0000\uEAFA" + //  5530 -  5534
-                "\u0000\u0000\u0000\u0000\u0000\uEAF8\u0000\u0000\u0000\u0000" + //  5535 -  5539
-                "\u0000\u0000\u0000\u0000\u0000\uC4D1\u0000\u0000\u0000\u0000" + //  5540 -  5544
-                "\u0000\uC3A2\u0000\uD0CA\u0000\u0000\u0000\u0000\u0000\u0000" + //  5545 -  5549
-                "\u0000\u0000\u0000\u0000\u0000\uB0CC\u0000\uC4E3\u0000\uBDBB" + //  5550 -  5554
-                "\u0000\uBAB4\u0000\uCDA4\u0000\u0000\u0000\uC2CE\u0000\u0000" + //  5555 -  5559
-                "\u0000\uB2BF\u008F\uB0EE\u0000\uD0C9\u0000\u0000\u0000\uCDBE" + //  5560 -  5564
-                "\u0000\uD0C5\u0000\uD0C7\u0000\uBAEE\u0000\uD0C8\u0000\uD5A4" + //  5565 -  5569
-                "\u0000\u0000\u0000\uE8F1\u0000\u0000\u0000\uBED5\u0000\u0000" + //  5570 -  5574
-                "\u0000\u0000\u0000\uC4D5\u0000\u0000\u0000\u0000\u0000\u0000" + //  5575 -  5579
-                "\u0000\u0000\u0000\u0000\u0000\uE8F6\u0000\uB0FE\u0000\u0000" + //  5580 -  5584
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5585 -  5589
-                "\u0000\u0000\u0000\uC2A2\u0000\u0000\u0000\u0000\u0000\u0000" + //  5590 -  5594
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCAC3" + //  5595 -  5599
-                "\u0000\u0000\u0000\u0000\u008F\uE4D4\u0000\u0000\u0000\u0000" + //  5600 -  5604
-                "\u0000\u0000\u0000\uBBAC\u0000\u0000\u0000\u0000\u0000\u0000" + //  5605 -  5609
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5610 -  5614
-                "\u0000\uEEFB\u0000\uBFED\u0000\u0000\u0000\u0000\u0000\u0000" + //  5615 -  5619
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBFEE" + //  5620 -  5624
-                "\u0000\uEFA1\u0000\uEFA3\u0000\u0000\u0000\u0000\u008F\uE4DB" + //  5625 -  5629
-                "\u008F\uE4DC\u0000\u0000\u0000\uE7EF\u0000\u0000\u0000\uE7F0" + //  5630 -  5634
-                "\u0000\u0000\u0000\uBCE3\u0000\uB6EC\u0000\uC3F7\u0000\u0000" + //  5635 -  5639
-                "\u0000\u0000\u0000\u0000\u0000\uC6D1\u0000\u0000\u0000\u0000" + //  5640 -  5644
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB1D1\u0000\u0000" + //  5645 -  5649
-                "\u0000\uE7F4\u0000\uE7F3\u0000\u0000\u0000\u0000\u0000\u0000" + //  5650 -  5654
-                "\u0000\u0000\u0000\uE7F9\u0000\uE7F5\u0000\uE7F8\u0000\u0000" + //  5655 -  5659
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0C5\u0000\u0000" + //  5660 -  5664
-                "\u0000\u0000\u0000\uCCB8\u0000\u0000\u0000\u0000\u0000\uF0C6" + //  5665 -  5669
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5670 -  5674
-                "\u0000\uF0C7\u0000\u0000\u0000\uCFAA\u008F\uE7AC\u0000\u0000" + //  5675 -  5679
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDBB1\u0000\uF0C8" + //  5680 -  5684
-                "\u0000\u0000\u008F\uF4ED\u0000\u0000\u0000\uF0C9\u0000\uF0CA" + //  5685 -  5689
-                "\u0000\u0000\u0000\uE7A6\u0000\u0000\u0000\u0000\u0000\u0000" + //  5690 -  5694
-                "\u0000\u0000\u0000\uE7A2\u0000\u0000\u0000\u0000\u0000\u0000" + //  5695 -  5699
-                "\u0000\u0000\u0000\uE6FE\u0000\u0000\u0000\u0000\u0000\uBFD5" + //  5700 -  5704
-                "\u0000\u0000\u0000\uC9E5\u0000\uE7A5\u0000\u0000\u0000\uE7A4" + //  5705 -  5709
-                "\u0000\uB9D0\u0000\uCFD3\u0000\u0000\u0000\u0000\u0000\u0000" + //  5710 -  5714
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5715 -  5719
-                "\u0000\u0000\u0000\uE7B5\u0000\uC9E9\u0000\uBAE2\u0000\uB9D7" + //  5720 -  5724
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC9CF" + //  5725 -  5729
-                "\u0000\uB2DF\u0000\uC8CE\u0000\uECC5\u0000\uB4D3\u0000\uC0D5" + //  5730 -  5734
-                "\u0000\uECC4\u0000\uECC9\u0000\uC3F9\u0000\uCCE3\u0000\u0000" + //  5735 -  5739
-                "\u0000\uECC7\u0000\uECC8\u0000\uB5AE\u0000\u0000\u0000\uECCA" + //  5740 -  5744
-                "\u0000\uC7E3\u0000\uC2DF\u0000\u0000\u0000\u0000\u0000\uC8F1" + //  5745 -  5749
-                "\u0000\uC5BD\u0000\uECC6\u0000\u0000\u0000\uCBC7\u0000\uECA6" + //  5750 -  5754
-                "\u0000\u0000\u0000\u0000\u0000\uBBBE\u0000\u0000\u0000\u0000" + //  5755 -  5759
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDACE" + //  5760 -  5764
-                "\u0000\u0000\u0000\uECA7\u0000\u0000\u0000\uECA8\u0000\u0000" + //  5765 -  5769
-                "\u0000\uBDB2\u0000\u0000\u0000\uECA9\u0000\uECAA\u0000\u0000" + //  5770 -  5774
-                "\u0000\u0000\u0000\uECAB\u0000\u0000\u0000\u0000\u0000\uECAC" + //  5775 -  5779
-                "\u0000\uECAD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5780 -  5784
-                "\u0000\u0000\u0000\uB6F9\u0000\uCEB4\u0000\u0000\u0000\uB7A8" + //  5785 -  5789
-                "\u0000\u0000\u0000\uC2E2\u0000\uE7A1\u0000\u0000\u0000\uF0A6" + //  5790 -  5794
-                "\u0000\uB3AC\u0000\uBFEF\u0000\u0000\u0000\u0000\u0000\u0000" + //  5795 -  5799
-                "\u0000\u0000\u0000\uB3D6\u0000\uF0A8\u0000\u0000\u0000\uF0A9" + //  5800 -  5804
-                "\u0000\uF0A7\u0000\uB7E4\u0000\u0000\u0000\uBADD\u0000\uBEE3" + //  5805 -  5809
-                "\u008F\uE6E8\u0000\u0000\u0000\u0000\u0000\uF1BB\u0000\u0000" + //  5810 -  5814
-                "\u0000\u0000\u0000\uF1BD\u0000\u0000\u0000\u0000\u0000\u0000" + //  5815 -  5819
-                "\u0000\uF1BC\u0000\u0000\u0000\uF1BF\u0000\uF1C2\u0000\u0000" + //  5820 -  5824
-                "\u0000\u0000\u0000\u0000\u0000\uF1BE\u0000\uF1C0\u0000\uF1C1" + //  5825 -  5829
-                "\u0000\u0000\u0000\u0000\u0000\uF1C3\u0000\u0000\u0000\uB6C2" + //  5830 -  5834
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5835 -  5839
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECF3\u0000\uECF4" + //  5840 -  5844
-                "\u0000\uCDD9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5845 -  5849
-                "\u0000\uC6A7\u0000\uECF8\u0000\u0000\u0000\u0000\u0000\u0000" + //  5850 -  5854
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5855 -  5859
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECF6" + //  5860 -  5864
-                "\u0000\uECF7\u0000\uECF9\u0000\uEBEF\u0000\uCDD8\u0000\u0000" + //  5865 -  5869
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBF2\u0000\u0000" + //  5870 -  5874
-                "\u0000\uEBF5\u0000\u0000\u0000\u0000\u0000\uEBF3\u0000\uC9B5" + //  5875 -  5879
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5880 -  5884
-                "\u0000\u0000\u0000\uEBF0\u0000\u0000\u0000\u0000\u0000\u0000" + //  5885 -  5889
-                "\u0000\u0000\u0000\u0000\u0000\uB6E0\u0000\u0000\u0000\u0000" + //  5890 -  5894
-                "\u0000\u0000\u0000\u0000\u0000\uEBF4\u0000\u0000\u0000\uCEA3" + //  5895 -  5899
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5900 -  5904
-                "\u0000\u0000\u0000\uEAEB\u0000\u0000\u0000\u0000\u0000\u0000" + //  5905 -  5909
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5910 -  5914
-                "\u0000\u0000\u0000\uEAEC\u0000\uBED8\u0000\uEAEA\u008F\uDCD3" + //  5915 -  5919
-                "\u0000\u0000\u0000\u0000\u0000\uCDE7\u0000\uEAE7\u0000\u0000" + //  5920 -  5924
-                "\u0000\u0000\u0000\uEAE9\u0000\uC0BD\u0000\uBFFE\u0000\u0000" + //  5925 -  5929
-                "\u0000\uE8ED\u0000\u0000\u0000\u0000\u0000\uC3DF\u0000\u0000" + //  5930 -  5934
-                "\u0000\uE8EE\u0000\u0000\u0000\u0000\u0000\uCDD6\u0000\uE8E3" + //  5935 -  5939
-                "\u0000\uB3B8\u0000\u0000\u0000\uE8E9\u0000\u0000\u0000\u0000" + //  5940 -  5944
-                "\u0000\uE8EC\u0000\uCCAC\u0000\u0000\u0000\u0000\u0000\u0000" + //  5945 -  5949
-                "\u0000\u0000\u0000\uE8EF\u0000\u0000\u0000\u0000\u0000\uE8E8" + //  5950 -  5954
-                "\u0000\uE8EB\u0000\u0000\u008F\uD9A1\u0000\u0000\u0000\u0000" + //  5955 -  5959
-                "\u0000\u0000\u0000\uA2BE\u0000\uA2BF\u0000\u0000\u0000\u0000" + //  5960 -  5964
-                "\u0000\uA2BC\u0000\uA2BD\u0000\u0000\u0000\u0000\u0000\u0000" + //  5965 -  5969
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5970 -  5974
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5975 -  5979
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5980 -  5984
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5985 -  5989
-                "\u0000\u0000\u0000\uB4CC\u0000\u0000\u0000\uE5FD\u0000\u0000" + //  5990 -  5994
-                "\u0000\uE5FE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  5995 -  5999
-                "\u0000\u0000\u0000\uA1FA\u0000\uA1F9\u0000\u0000\u0000\u0000" + //  6000 -  6004
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6005 -  6009
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6010 -  6014
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6015 -  6019
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6020 -  6024
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC4B9\u0000\u0000" + //  6025 -  6029
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6030 -  6034
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC6D3\u0000\uEEC4" + //  6035 -  6039
-                "\u0000\uBDB6\u0000\uBCE0\u0000\uC7DB\u0000\uC3F1\u0000\u0000" + //  6040 -  6044
-                "\u0000\u0000\u0000\u0000\u0000\uBCF2\u0000\u0000\u0000\uBFEC" + //  6045 -  6049
-                "\u0000\u0000\u0000\uEEC5\u0000\u0000\u0000\uEEC6\u0000\u0000" + //  6050 -  6054
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6055 -  6059
-                "\u0000\u0000\u0000\uB7F6\u0000\uD3CA\u0000\uD3C8\u0000\uC1D3" + //  6060 -  6064
-                "\u0000\uB5CA\u0000\uB6AC\u0000\u0000\u0000\uD3C5\u0000\u0000" + //  6065 -  6069
-                "\u0000\uB6F4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6070 -  6074
-                "\u0000\u0000\u0000\uB1C4\u0000\u0000\u0000\u0000\u0000\u0000" + //  6075 -  6079
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6080 -  6084
-                "\u0000\u0000\u0000\uD0D0\u0000\u0000\u0000\u0000\u0000\u0000" + //  6085 -  6089
-                "\u0000\u0000\u0000\u0000\u0000\uD0D3\u0000\uD0D1\u0000\u0000" + //  6090 -  6094
-                "\u0000\u0000\u0000\uB2C2\u0000\u0000\u0000\uCABB\u0000\uD0CB" + //  6095 -  6099
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD0CF" + //  6100 -  6104
-                "\u0000\uB8F3\u0000\u0000\u0000\u0000\u0000\uBBC8\u0000\uCBC5" + //  6105 -  6109
-                "\u0000\uB1DA\u0000\uB0E2\u0000\u0000\u0000\uC6A5\u0000\u0000" + //  6110 -  6114
-                "\u0000\u0000\u0000\uEBE9\u0000\u0000\u0000\u0000\u0000\u0000" + //  6115 -  6119
-                "\u0000\u0000\u0000\uEBE8\u0000\u0000\u0000\uC6E6\u0000\u0000" + //  6120 -  6124
-                "\u0000\uEBED\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBE2" + //  6125 -  6129
-                "\u0000\u0000\u0000\uEBEC\u0000\uEBEE\u0000\u0000\u0000\uB8AC" + //  6130 -  6134
-                "\u0000\uEBEA\u0000\uB9D6\u0000\u0000\u0000\uBCD5\u0000\u0000" + //  6135 -  6139
-                "\u0000\u0000\u0000\uB5B2\u0000\u0000\u0000\u0000\u0000\u0000" + //  6140 -  6144
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1AB\u0000\u0000" + //  6145 -  6149
-                "\u0000\uF1AC\u0000\u0000\u0000\uD2AC\u0000\uDDBB\u0000\uC8D3" + //  6150 -  6154
-                "\u0000\u0000\u0000\u0000\u0000\uB0FB\u0000\u0000\u0000\uB0BB" + //  6155 -  6159
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6160 -  6164
-                "\u0000\u0000\u0000\u0000\u0000\uBBF4\u0000\uCBB0\u0000\uBEFE" + //  6165 -  6169
-                "\u0000\u0000\u0000\uBADB\u0000\uCEF6\u0000\uEAE1\u0000\uEAE2" + //  6170 -  6174
-                "\u0000\uC1F5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6175 -  6179
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6180 -  6184
-                "\u0000\uCEA2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6185 -  6189
-                "\u0000\uEAE3\u0000\uCDB5\u0000\u0000\u0000\u0000\u0000\uEAE4" + //  6190 -  6194
-                "\u0000\uEAE5\u0000\u0000\u0000\u0000\u0000\uCAE4\u0000\uEAE6" + //  6195 -  6199
-                "\u0000\u0000\u0000\uBAC0\u0000\uEBE3\u0000\uEBEB\u0000\uEBE4" + //  6200 -  6204
-                "\u0000\u0000\u0000\uEBE0\u0000\u0000\u0000\uC4FC\u0000\uEBDF" + //  6205 -  6209
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBDD\u0000\u0000" + //  6210 -  6214
-                "\u0000\uCDA1\u0000\uBBF0\u0000\u0000\u0000\u0000\u0000\uEBE1" + //  6215 -  6219
-                "\u0000\u0000\u0000\uEBDE\u0000\u0000\u0000\u0000\u008F\uDEB5" + //  6220 -  6224
-                "\u0000\uEBE5\u0000\uBDF4\u0000\u0000\u0000\uB8C1\u0000\u0000" + //  6225 -  6229
-                "\u0000\u0000\u0000\u0000\u0000\uC2FA\u0000\u0000\u0000\uEACF" + //  6230 -  6234
-                "\u0000\uEAD6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6235 -  6239
-                "\u0000\u0000\u0000\uB7B6\u0000\u0000\u0000\u0000\u0000\uC2DE" + //  6240 -  6244
-                "\u0000\u0000\u0000\uEADC\u0000\u0000\u0000\u0000\u0000\u0000" + //  6245 -  6249
-                "\u0000\u0000\u0000\uEAD8\u0000\u0000\u0000\u0000\u0000\u0000" + //  6250 -  6254
-                "\u0000\uC2B5\u0000\uEAD7\u0000\u0000\u0000\uEADA\u0000\u0000" + //  6255 -  6259
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAD1\u0000\u0000" + //  6260 -  6264
-                "\u0000\uE8F0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6265 -  6269
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6270 -  6274
-                "\u0000\u0000\u0000\u0000\u0000\uE8DA\u0000\u0000\u0000\u0000" + //  6275 -  6279
-                "\u0000\u0000\u0000\u0000\u0000\uB3F7\u0000\u0000\u008F\uD8F4" + //  6280 -  6284
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBEF8\u0000\uE8E5" + //  6285 -  6289
-                "\u0000\u0000\u0000\uE8EA\u0000\uC1F3\u0000\u0000\u0000\u0000" + //  6290 -  6294
-                "\u0000\uE8E6\u0000\uC0BF\u0000\uEBD3\u0000\u0000\u0000\uEBD8" + //  6295 -  6299
-                "\u0000\uB8ED\u0000\uEBD5\u0000\uEBD6\u008F\uDDFA\u0000\uEBD2" + //  6300 -  6304
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC0E2\u0000\uC6C9" + //  6305 -  6309
-                "\u0000\u0000\u0000\u0000\u0000\uC3AF\u0000\u0000\u0000\uB2DD" + //  6310 -  6314
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6315 -  6319
-                "\u0000\u0000\u0000\uC8F0\u0000\u0000\u0000\u0000\u0000\uB5C3" + //  6320 -  6324
-                "\u0000\u0000\u008F\uDEA4\u0000\uC4B4\u0000\uB1D3\u0000\u0000" + //  6325 -  6329
-                "\u0000\uEBCE\u0000\uB7D8\u0000\u0000\u0000\u0000\u0000\uBBEE" + //  6330 -  6334
-                "\u0000\u0000\u0000\u0000\u0000\uBBED\u0000\u0000\u0000\uCFCD" + //  6335 -  6339
-                "\u0000\uEBCD\u0000\uEBCC\u0000\uC1A7\u0000\u0000\u0000\uB5CD" + //  6340 -  6344
-                "\u0000\uCFC3\u0000\uB3BA\u0000\uBEDC\u0000\u0000\u0000\u0000" + //  6345 -  6349
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uDDEA\u0000\u0000" + //  6350 -  6354
-                "\u0000\u0000\u0000\uEBCB\u0000\u0000\u0000\u0000\u0000\u0000" + //  6355 -  6359
-                "\u0000\uD6A6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6360 -  6364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6365 -  6369
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6370 -  6374
-                "\u0000\uCDF0\u0000\u0000\u0000\uC6FD\u0000\u0000\u0000\u0000" + //  6375 -  6379
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6380 -  6384
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB4A5\u0000\u0000" + //  6385 -  6389
-                "\u0000\uB9D5\u0000\uEACD\u0000\uB0E1\u0000\u0000\u0000\u0000" + //  6390 -  6394
-                "\u0000\u0000\u0000\u0000\u0000\uC9BD\u0000\u0000\u0000\u0000" + //  6395 -  6399
-                "\u0000\uEACE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6400 -  6404
-                "\u0000\uBFEA\u0000\u0000\u0000\uEAD5\u0000\u0000\u0000\u0000" + //  6405 -  6409
-                "\u0000\uEAD2\u0000\u0000\u0000\uC3EF\u0000\u0000\u0000\u0000" + //  6410 -  6414
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAD3\u0000\uEAD0" + //  6415 -  6419
-                "\u0000\uB6DE\u0000\uB8C0\u0000\u0000\u0000\uC4FB\u0000\uEBBE" + //  6420 -  6424
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7D7" + //  6425 -  6429
-                "\u0000\u0000\u0000\uBFD6\u0000\u0000\u0000\uEBC1\u0000\u0000" + //  6430 -  6434
-                "\u0000\uC6A4\u0000\u0000\u0000\uEBC0\u0000\u0000\u008F\uDDC8" + //  6435 -  6439
-                "\u0000\uB7B1\u0000\u0000\u0000\u0000\u0000\uEBBF\u0000\uC2F7" + //  6440 -  6444
-                "\u0000\uB5AD\u0000\u0000\u0000\u0000\u0000\uEBC2\u0000\u0000" + //  6445 -  6449
-                "\u0000\uEBC3\u0000\u0000\u0000\uBED9\u0000\uEBB7\u0000\u0000" + //  6450 -  6454
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6455 -  6459
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6460 -  6464
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6465 -  6469
-                "\u0000\u0000\u0000\uB3D1\u0000\u0000\u0000\u0000\u0000\u0000" + //  6470 -  6474
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBB8" + //  6475 -  6479
-                "\u0000\u0000\u0000\uEBB9\u0000\uEBBA\u0000\u0000\u0000\u0000" + //  6480 -  6484
-                "\u0000\uF0CE\u008F\uE7AE\u0000\uF0CB\u0000\u0000\u0000\uF0CC" + //  6485 -  6489
-                "\u0000\u0000\u0000\uF0CD\u0000\uF0CF\u0000\u0000\u0000\u0000" + //  6490 -  6494
-                "\u0000\u0000\u008F\uF4EE\u0000\u0000\u008F\uE7B1\u0000\u0000" + //  6495 -  6499
-                "\u008F\uF4EF\u0000\uC0C4\u0000\u0000\u0000\u0000\u008F\uE7B2" + //  6500 -  6504
-                "\u0000\uCCF7\u0000\u0000\u0000\u0000\u0000\uC0C5\u0000\u0000" + //  6505 -  6509
-                "\u0000\u0000\u0000\uF0D0\u0000\u0000\u0000\uC8F3\u0000\u0000" + //  6510 -  6514
-                "\u0000\uCFCE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6515 -  6519
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9B4\u0000\u0000" + //  6520 -  6524
-                "\u0000\u0000\u0000\u0000\u0000\uCDF5\u0000\u0000\u0000\uE9B6" + //  6525 -  6529
-                "\u0000\uE9B8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6530 -  6534
-                "\u0000\uE9B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6535 -  6539
-                "\u0000\u0000\u0000\u0000\u0000\uE9BC\u0000\uE9BA\u0000\u0000" + //  6540 -  6544
-                "\u0000\u0000\u0000\uB1A1\u0000\uBFD8\u0000\uBDFC\u0000\uB4D9" + //  6545 -  6549
-                "\u0000\uF0A3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7E6" + //  6550 -  6554
-                "\u0000\u0000\u0000\uF0A5\u0000\u0000\u0000\u0000\u0000\u0000" + //  6555 -  6559
-                "\u0000\uB1A2\u0000\u0000\u0000\uF0A4\u0000\uC4C4\u0000\u0000" + //  6560 -  6564
-                "\u0000\uCECD\u0000\uC6AB\u0000\uEFFC\u0000\uCEA6\u0000\u0000" + //  6565 -  6569
-                "\u0000\uB8B1\u0000\u0000\u0000\u0000\u0000\uCDDB\u0000\u0000" + //  6570 -  6574
-                "\u0000\u0000\u0000\uCEA5\u0000\uC6F1\u0000\u0000\u0000\u0000" + //  6575 -  6579
-                "\u0000\u0000\u0000\u0000\u0000\uB1AB\u0000\u0000\u0000\uC0E3" + //  6580 -  6584
-                "\u0000\uBCB6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6585 -  6589
-                "\u0000\uCAB7\u0000\u0000\u0000\uB1C0\u0000\u0000\u0000\u0000" + //  6590 -  6594
-                "\u0000\u0000\u0000\uCEED\u0000\uCDEB\u0000\u0000\u0000\uF0BB" + //  6595 -  6599
-                "\u0000\u0000\u0000\uC5C5\u0000\u0000\u0000\u0000\u0000\u0000" + //  6600 -  6604
-                "\u0000\u0000\u0000\uC4E6\u0000\uD1ED\u0000\u0000\u0000\u0000" + //  6605 -  6609
-                "\u0000\uC2A7\u0000\u0000\u0000\u0000\u0000\uBAEF\u0000\uD1EE" + //  6610 -  6614
-                "\u0000\uD1EF\u0000\uC1B0\u0000\u0000\u0000\uD1EC\u0000\u0000" + //  6615 -  6619
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD1F1\u0000\u0000" + //  6620 -  6624
-                "\u0000\uCBB6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6625 -  6629
-                "\u0000\uB9E4\u0000\u0000\u0000\uC7ED\u0000\uD1F0\u0000\u0000" + //  6630 -  6634
-                "\u008F\uD7DE\u0000\uCCD0\u0000\uE7F7\u0000\uB2D8\u0000\uB3FD" + //  6635 -  6639
-                "\u0000\uE7FB\u0000\u0000\u0000\u0000\u0000\uE7FD\u0000\u0000" + //  6640 -  6644
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7D4\u0000\u0000" + //  6645 -  6649
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6650 -  6654
-                "\u0000\u0000\u0000\uE8A3\u0000\uE8AC\u0000\uE8AD\u0000\u0000" + //  6655 -  6659
-                "\u0000\u0000\u0000\u0000\u0000\uB0AB\u0000\u0000\u0000\u0000" + //  6660 -  6664
-                "\u0000\u0000\u0000\u8EE0\u0000\u8EE1\u0000\u0000\u0000\\" + //  6665 -  6669
-                "\u008F\uA2C3\u0000\uA1F8\u0000\uA1AF\u0000\u0000\u0000\u0000" + //  6670 -  6674
-                "\u0000\u0000\u0000\u8EE2\u0000\u0000\u0000\u0000\u0000\u0000" + //  6675 -  6679
-                "\u0000\uA1EB\u0000\uA1DE\u0000\u0000\u0000\u0000\u0000\uA1AD" + //  6680 -  6684
-                "\u0000\u0000\u0000\uA2F9\u0000\u0000\u0000\u0000\u0000\u0000" + //  6685 -  6689
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6690 -  6694
-                "\u0000\u0000\u0000\u0000\u0000\uF3EE\u0000\uE3B7\u0000\u0000" + //  6695 -  6699
-                "\u0000\u0000\u0000\uECDA\u0000\uF0ED\u0000\u0000\u0000\u0000" + //  6700 -  6704
-                "\u0000\uF3EF\u0000\u0000\u0000\uF3F0\u0000\u0000\u0000\u0000" + //  6705 -  6709
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6710 -  6714
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3F2\u0000\uEAFD" + //  6715 -  6719
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBA2\u0000\u0000" + //  6720 -  6724
-                "\u0000\uEBA1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBA4" + //  6725 -  6729
-                "\u0000\u0000\u0000\u0000\u0000\uEBA3\u0000\u0000\u0000\uEBA5" + //  6730 -  6734
-                "\u0000\u0000\u0000\u0000\u0000\uBDB1\u0000\u0000\u0000\uEBA6" + //  6735 -  6739
-                "\u0000\u0000\u0000\u0000\u0000\uEBA7\u0000\u0000\u0000\u0000" + //  6740 -  6744
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBA8" + //  6745 -  6749
-                "\u0000\uC0BE\u0000\uB7EC\u0000\u0000\u0000\uEAC9\u0000\u0000" + //  6750 -  6754
-                "\u0000\uEAC8\u0000\u0000\u0000\uBDB0\u0000\u0000\u0000\u0000" + //  6755 -  6759
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB9D4\u0000\uDEA7" + //  6760 -  6764
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEACA" + //  6765 -  6769
-                "\u0000\uBDD1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB3B9" + //  6770 -  6774
-                "\u0000\u0000\u0000\uEACB\u0000\u0000\u0000\uB1D2\u0000\u0000" + //  6775 -  6779
-                "\u0000\uBED7\u0000\uEACC\u0000\u0000\u0000\uC9F2\u0000\uE8E4" + //  6780 -  6784
-                "\u0000\uC6A1\u0000\u0000\u0000\u0000\u0000\uB0B1\u0000\u0000" + //  6785 -  6789
-                "\u0000\u0000\u0000\uE8DD\u0000\u0000\u0000\uE8D9\u0000\uC1F2" + //  6790 -  6794
-                "\u0000\uE8D3\u0000\uE8DB\u0000\uE8E0\u0000\u0000\u0000\uC7AC" + //  6795 -  6799
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB0AA\u0000\u0000" + //  6800 -  6804
-                "\u0000\uE8D8\u0000\u0000\u0000\uE8E1\u0000\uC9F8\u0000\u0000" + //  6805 -  6809
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB4A3" + //  6810 -  6814
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6815 -  6819
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6820 -  6824
-                "\u0000\u0000\u0000\uB1F1\u0000\uE7F2\u0000\uCEEA\u0000\uC2DD" + //  6825 -  6829
-                "\u0000\u0000\u0000\u0000\u0000\uC9C4\u0000\u0000\u0000\uE7FE" + //  6830 -  6834
-                "\u0000\u0000\u0000\uB2D7\u0000\uE7FC\u0000\u0000\u0000\uE7FA" + //  6835 -  6839
-                "\u0000\uE7F1\u0000\uEAB6\u0000\u0000\u0000\u0000\u0000\u0000" + //  6840 -  6844
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6845 -  6849
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6850 -  6854
-                "\u0000\u0000\u0000\uEAB4\u0000\u0000\u0000\u0000\u0000\uEAB5" + //  6855 -  6859
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEABA\u0000\uEABB" + //  6860 -  6864
-                "\u0000\u0000\u0000\uB3AA\u0000\u0000\u0000\uB5C2\u0000\u0000" + //  6865 -  6869
-                "\u0000\u0000\u0000\uEAB9\u0000\u0000\u0000\uE8C7\u0000\u0000" + //  6870 -  6874
-                "\u0000\u0000\u0000\u0000\u0000\uBFFB\u0000\u0000\u008F\uD8B7" + //  6875 -  6879
-                "\u0000\u0000\u0000\u0000\u0000\uB5C6\u0000\u0000\u0000\uB6DD" + //  6880 -  6884
-                "\u0000\u0000\u0000\uE8C2\u0000\u0000\u0000\u0000\u0000\u0000" + //  6885 -  6889
-                "\u0000\u0000\u0000\uB2DB\u0000\u0000\u0000\u0000\u0000\uBED4" + //  6890 -  6894
-                "\u0000\u0000\u0000\uE8C5\u0000\u0000\u0000\u0000\u0000\u0000" + //  6895 -  6899
-                "\u0000\uBADA\u0000\u0000\u0000\u0000\u0000\uC5D1\u0000\uEAAB" + //  6900 -  6904
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAAF\u0000\u0000" + //  6905 -  6909
-                "\u0000\uEAB2\u0000\uEAB1\u0000\u0000\u0000\u0000\u0000\u0000" + //  6910 -  6914
-                "\u0000\uEAA9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6915 -  6919
-                "\u0000\uEAAC\u0000\u0000\u0000\uEABD\u0000\u0000\u0000\u0000" + //  6920 -  6924
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6925 -  6929
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6930 -  6934
-                "\u0000\u0000\u0000\uE9C8\u0000\uB8D7\u0000\u0000\u0000\uB5D4" + //  6935 -  6939
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9CA\u0000\uD1DD" + //  6940 -  6944
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB5F5" + //  6945 -  6949
-                "\u0000\u0000\u0000\uCEBA\u0000\u0000\u0000\uB6F3\u0000\uE9CB" + //  6950 -  6954
-                "\u0000\uE9F5\u0000\u0000\u0000\u0000\u0000\uEAA2\u0000\u0000" + //  6955 -  6959
-                "\u0000\u0000\u0000\uB2DC\u0000\u0000\u0000\uE9FC\u0000\u0000" + //  6960 -  6964
-                "\u0000\uEAA3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9FD" + //  6965 -  6969
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6970 -  6974
-                "\u0000\uE9FA\u0000\u0000\u0000\uC4B3\u0000\u0000\u0000\uE9F7" + //  6975 -  6979
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6980 -  6984
-                "\u0000\u0000\u0000\uC7E8\u0000\uE9E6\u0000\u0000\u0000\uCBAA" + //  6985 -  6989
-                "\u0000\uE9E7\u0000\u0000\u0000\u0000\u0000\uE9E4\u0000\u0000" + //  6990 -  6994
-                "\u0000\uE9E5\u0000\uE9EA\u0000\uE9ED\u0000\u0000\u0000\u0000" + //  6995 -  6999
-                "\u0000\uE9EB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9E9" + //  7000 -  7004
-                "\u0000\uE9E3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7005 -  7009
-                "\u0000\u0000\u0000\uC3D8\u0000\u0000\u0000\uE9F4\u0000\u0000" + //  7010 -  7014
-                "\u0000\uCCAA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD0A9" + //  7015 -  7019
-                "\u0000\uC7B5\u0000\u0000\u0000\uB5D7\u0000\u0000\u0000\u0000" + //  7020 -  7024
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7B7\u0000\u0000" + //  7025 -  7029
-                "\u0000\uC6E3\u0000\uB8C3\u0000\uCBB3\u0000\u0000\u0000\u0000" + //  7030 -  7034
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9C9\u0000\uD0AA" + //  7035 -  7039
-                "\u0000\uBEE8\u0000\uD0AB\u0000\uB2B5\u0000\u0000\u0000\u0000" + //  7040 -  7044
-                "\u0000\u0000\u0000\uB6E5\u0000\uB8F0\u0000\uCCE9\u0000\uE9A5" + //  7045 -  7049
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7F6\u0000\u0000" + //  7050 -  7054
-                "\u0000\u0000\u0000\uE9AF\u0000\uE9A7\u0000\u0000\u0000\uE9A9" + //  7055 -  7059
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7060 -  7064
-                "\u0000\uE9B3\u0000\uE9A8\u0000\u0000\u0000\u0000\u0000\uE9AC" + //  7065 -  7069
-                "\u0000\u0000\u0000\u0000\u0000\uB1F2\u0000\u0000\u0000\uC6E5" + //  7070 -  7074
-                "\u0000\u0000\u0000\uE9AD\u0000\uE9B0\u0000\u0000\u0000\u0000" + //  7075 -  7079
-                "\u0000\u0000\u0000\uA8C0\u0000\u0000\u0000\u0000\u0000\u0000" + //  7080 -  7084
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7085 -  7089
-                "\u0000\uA8B6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7090 -  7094
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7095 -  7099
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7100 -  7104
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7105 -  7109
-                "\u0000\u0000\u0000\uA6A1\u0000\uA6A2\u0000\uA6A3\u0000\uA6A4" + //  7110 -  7114
-                "\u0000\uA6A5\u0000\uA6A6\u0000\uA6A7\u0000\uA6A8\u0000\uA6A9" + //  7115 -  7119
-                "\u0000\uA6AA\u0000\uA6AB\u0000\uA6AC\u0000\uA6AD\u0000\uA6AE" + //  7120 -  7124
-                "\u0000\uA6AF\u0000\uE8FB\u0000\uE9A1\u0000\u0000\u0000\uC8D9" + //  7125 -  7129
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8FE" + //  7130 -  7134
-                "\u0000\uBED6\u0000\uBCC9\u0000\uE9A3\u0000\u0000\u0000\u0000" + //  7135 -  7139
-                "\u0000\uB6BE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7140 -  7144
-                "\u008F\uD9C6\u0000\u0000\u0000\uE9A4\u0000\u0000\u0000\uC9F9" + //  7145 -  7149
-                "\u0000\uE8FD\u008F\uD9C8\u0000\uE8D6\u0000\u0000\u0000\u0000" + //  7150 -  7154
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8AE\u0000\u0000" + //  7155 -  7159
-                "\u0000\uE8B6\u0000\u0000\u0000\uE8BD\u0000\uE8B7\u0000\u0000" + //  7160 -  7164
-                "\u0000\u0000\u0000\u0000\u0000\uE8B5\u0000\u0000\u0000\u0000" + //  7165 -  7169
-                "\u0000\u0000\u0000\u0000\u0000\uE7F6\u0000\u0000\u0000\u0000" + //  7170 -  7174
-                "\u0000\uE8B3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8AF" + //  7175 -  7179
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB4D0\u0000\uE8B1" + //  7180 -  7184
-                "\u0000\uBCC3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7185 -  7189
-                "\u0000\u0000\u0000\uE8D1\u0000\u0000\u0000\u0000\u0000\u0000" + //  7190 -  7194
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7195 -  7199
-                "\u0000\u0000\u0000\u0000\u0000\uCACE\u0000\u0000\u0000\uCCA2" + //  7200 -  7204
-                "\u0000\uE8F9\u0000\uE8F8\u0000\u0000\u0000\uE8F4\u0000\uE8F5" + //  7205 -  7209
-                "\u0000\u0000\u0000\uB1B6\u0000\u0000\u0000\u0000\u0000\u0000" + //  7210 -  7214
-                "\u0000\u0000\u0000\uE8F7\u0000\uE8CE\u0000\u0000\u0000\uE8CD" + //  7215 -  7219
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7220 -  7224
-                "\u0000\u0000\u0000\uC7EB\u0000\uE8D4\u0000\u0000\u0000\uE8DF" + //  7225 -  7229
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB3FE" + //  7230 -  7234
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8E2\u0000\u0000" + //  7235 -  7239
-                "\u0000\u0000\u0000\uE8D0\u0000\u0000\u0000\u0000\u0000\u0000" + //  7240 -  7244
-                "\u0000\uE8D5\u0000\uCDEE\u0000\u0000\u0000\u0000\u0000\uC8AD" + //  7245 -  7249
-                "\u0000\u0000\u0000\uEEEC\u0000\u0000\u0000\uBEE0\u008F\uE3E9" + //  7250 -  7254
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7255 -  7259
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB9DB" + //  7260 -  7264
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7265 -  7269
-                "\u008F\uE3F1\u008F\uE3F2\u0000\u0000\u0000\u0000\u0000\u0000" + //  7270 -  7274
-                "\u0000\u0000\u0000\u0000\u0000\uCBC8\u0000\u0000\u0000\uE7CD" + //  7275 -  7279
-                "\u0000\uE7CE\u0000\u0000\u0000\u0000\u0000\uE7CF\u0000\u0000" + //  7280 -  7284
-                "\u0000\uE7D0\u0000\uB6BD\u0000\uDAAA\u0000\uE7D1\u0000\u0000" + //  7285 -  7289
-                "\u0000\uC0E5\u0000\uE7D2\u0000\uBCCB\u0000\u0000\u0000\uE7D3" + //  7290 -  7294
-                "\u0000\u0000\u0000\uD0B0\u0000\u0000\u0000\u0000\u0000\u0000" + //  7295 -  7299
-                "\u0000\uE7D4\u0000\uCADE\u0000\uB4DC\u0000\u0000\u0000\u0000" + //  7300 -  7304
-                "\u0000\uC1A4\u0000\uBDD8\u0000\u0000\u0000\uC9F1\u0000\uBDAE" + //  7305 -  7309
-                "\u0000\uE8CA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7310 -  7314
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCAEE" + //  7315 -  7319
-                "\u0000\u0000\u0000\uE8C1\u0000\u0000\u0000\u0000\u0000\u0000" + //  7320 -  7324
-                "\u0000\uB2DA\u0000\uB8D6\u0000\uC9A9\u0000\uE8CB\u0000\u0000" + //  7325 -  7329
-                "\u0000\uE8BF\u0000\u0000\u008F\uD8C1\u0000\uE8C8\u0000\u0000" + //  7330 -  7334
-                "\u0000\u0000\u0000\u0000\u0000\uE8D2\u0000\u0000\u0000\uE8C3" + //  7335 -  7339
-                "\u0000\u0000\u0000\u0000\u0000\uEECF\u0000\u0000\u0000\uBEDF" + //  7340 -  7344
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7345 -  7349
-                "\u0000\uEED2\u0000\uEED0\u0000\uBEDF\u0000\u0000\u0000\u0000" + //  7350 -  7354
-                "\u0000\uEED1\u0000\u0000\u0000\uC8B0\u0000\u0000\u0000\u0000" + //  7355 -  7359
-                "\u0000\uEED4\u0000\uEED3\u0000\u0000\u0000\u0000\u0000\uBEFA" + //  7360 -  7364
-                "\u0000\u0000\u0000\uEED5\u0000\u0000\u0000\u0000\u0000\u0000" + //  7365 -  7369
-                "\u0000\u0000\u0000\u0000\u0000\uF3CE\u0000\uC7FE\u0000\u0000" + //  7370 -  7374
-                "\u0000\u0000\u0000\uF3CF\u0000\uF3D1\u0000\u0000\u0000\u0000" + //  7375 -  7379
-                "\u0000\uF3D2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7380 -  7384
-                "\u0000\u0000\u0000\u0000\u0000\uB9ED\u0000\uCCCD\u0000\u0000" + //  7385 -  7389
-                "\u0000\u0000\u0000\uF3D0\u0000\uB9ED\u0000\uCCCD\u0000\uCBE3" + //  7390 -  7394
-                "\u0000\uD6F7\u0000\u0000\u0000\uDDE0\u0000\uCBFB\u0000\uE8BC" + //  7395 -  7399
-                "\u0000\u0000\u0000\uE8B2\u0000\u0000\u0000\u0000\u0000\u0000" + //  7400 -  7404
-                "\u0000\u0000\u0000\u0000\u0000\uE8BE\u0000\u0000\u0000\uE8B0" + //  7405 -  7409
-                "\u0000\uC7FC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7410 -  7414
-                "\u0000\u0000\u0000\uCDE9\u0000\u0000\u0000\u0000\u0000\u0000" + //  7415 -  7419
-                "\u0000\uE8B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7420 -  7424
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8CF\u0000\u0000" + //  7425 -  7429
-                "\u0000\u0000\u0000\uEECE\u0000\u0000\u0000\u0000\u0000\u0000" + //  7430 -  7434
-                "\u0000\u0000\u0000\uBDE6\u0000\u0000\u0000\uEECD\u0000\u0000" + //  7435 -  7439
-                "\u0000\uEECC\u0000\u0000\u0000\uC2E9\u0000\u0000\u0000\u0000" + //  7440 -  7444
-                "\u0000\uB8EF\u0000\u0000\u0000\uC0C3\u0000\u0000\u0000\u0000" + //  7445 -  7449
-                "\u0000\u0000\u0000\u0000\u0000\uC8B0\u0000\u0000\u0000\u0000" + //  7450 -  7454
-                "\u0000\u0000\u0000\u0000\u0000\uBDB9\u0000\u0000\u0000\u0000" + //  7455 -  7459
-                "\u0000\u0000\u0000\uBBB2\u0000\uD2D4\u0000\u0000\u0000\u0000" + //  7460 -  7464
-                "\u0000\u0000\u0000\u0000\u0000\uCBF4\u0000\uBAB5\u0000\uB5DA" + //  7465 -  7469
-                "\u0000\uCDA7\u0000\uC1D0\u0000\uC8BF\u0000\uBCFD\u0000\u0000" + //  7470 -  7474
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBDC7" + //  7475 -  7479
-                "\u0000\u0000\u0000\uBCE8\u0000\uBCF5\u0000\u0000\u0000\uBDF6" + //  7480 -  7484
-                "\u0000\u0000\u0000\uC8C0\u0000\u0000\u008F\uB4DE\u0000\u0000" + //  7485 -  7489
-                "\u0000\uD2D7\u0000\uE8A6\u0000\u0000\u0000\u0000\u0000\u0000" + //  7490 -  7494
-                "\u0000\u0000\u0000\uE8A9\u0000\uB7D5\u0000\u0000\u0000\u0000"   //  7495 -  7499
-                ;
-
-            index2a =
-                "\u0000\uC1F0\u0000\uB7D5\u0000\u0000\u0000\u0000\u0000\u0000" + //  7500 -  7504
-                "\u0000\u0000\u0000\uB1C1\u0000\uE8A8\u0000\u0000\u0000\uB9D3" + //  7505 -  7509
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7510 -  7514
-                "\u0000\uC1F1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7515 -  7519
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uE2C7\u0000\u0000" + //  7520 -  7524
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC5A2" + //  7525 -  7529
-                "\u0000\u0000\u0000\u0000\u0000\uEEC3\u0000\u0000\u0000\uEEC2" + //  7530 -  7534
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7535 -  7539
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7540 -  7544
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0EC\u0000\uC7A3" + //  7545 -  7549
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0EE\u0000\uB2BB" + //  7550 -  7554
-                "\u0000\u0000\u0000\uF0F1\u0000\uF0F0\u0000\u0000\u0000\u0000" + //  7555 -  7559
-                "\u0000\u0000\u0000\u0000\u0000\uB1A4\u0000\u0000\u0000\u0000" + //  7560 -  7564
-                "\u0000\u0000\u0000\uB6C1\u0000\uE7D9\u0000\u0000\u0000\u0000" + //  7565 -  7569
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC4FA" + //  7570 -  7574
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7575 -  7579
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7580 -  7584
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7585 -  7589
-                "\u0000\u0000\u0000\uE7DB\u0000\uE7DA\u0000\uE7DD\u0000\u0000" + //  7590 -  7594
-                "\u0000\u0000\u0000\uE7DC\u0000\u0000\u0000\uE7DE\u0000\uE7C8" + //  7595 -  7599
-                "\u0000\u0000\u0000\u0000\u0000\uBFC3\u0000\u0000\u0000\uB2E9" + //  7600 -  7604
-                "\u0000\u0000\u0000\uE7C9\u0000\uCED7\u0000\u0000\u0000\uBCAB" + //  7605 -  7609
-                "\u0000\u0000\u0000\u0000\u0000\uBDAD\u0000\u0000\u0000\u0000" + //  7610 -  7614
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBBEA\u0000\uC3D7" + //  7615 -  7619
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7620 -  7624
-                "\u0000\uE7CA\u0000\uE7CB\u0000\uB1B1\u0000\u0000\u0000\uE7CC" + //  7625 -  7629
-                "\u0000\u0000\u0000\uB8D5\u0000\u0000\u0000\u0000\u0000\uB0FD" + //  7630 -  7634
-                "\u0000\uE6F1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7635 -  7639
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7640 -  7644
-                "\u0000\uE6F8\u0000\u0000\u0000\uE6F9\u0000\u0000\u0000\u0000" + //  7645 -  7649
-                "\u0000\uC6B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB6BB" + //  7650 -  7654
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7A6\u0000\uC7BD" + //  7655 -  7659
-                "\u0000\u0000\u0000\u0000\u0000\uEDEB\u0000\u0000\u0000\u0000" + //  7660 -  7664
-                "\u0000\uEDEA\u0000\uB2E0\u0000\u0000\u0000\u0000\u0000\uC6F6" + //  7665 -  7669
-                "\u0000\uEDEC\u0000\uC7F7\u0000\u0000\u0000\uC5B3\u0000\u0000" + //  7670 -  7674
-                "\u0000\uEDED\u0000\uBDD2\u0000\u0000\u0000\u0000\u0000\u0000" + //  7675 -  7679
-                "\u0000\uEDEF\u0000\u0000\u0000\u0000\u0000\uCCC2\u0000\uEDFE" + //  7680 -  7684
-                "\u0000\uEDF1\u0000\uEDF2\u0000\u0000\u0000\u0000\u0000\uC4C9" + //  7685 -  7689
-                "\u0000\u0000\u0000\u0000\u0000\uEEBF\u0000\u0000\u0000\u0000" + //  7690 -  7694
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7695 -  7699
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7700 -  7704
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEEC0\u0000\u0000" + //  7705 -  7709
-                "\u0000\u0000\u008F\uF4E7\u0000\u0000\u0000\u0000\u0000\u0000" + //  7710 -  7714
-                "\u0000\uEEC1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7715 -  7719
-                "\u0000\u0000\u0000\u0000\u0000\uF0F9\u0000\u0000\u0000\u0000" + //  7720 -  7724
-                "\u0000\u0000\u0000\u0000\u0000\uF0FB\u0000\uC2EA\u0000\uB3DB" + //  7725 -  7729
-                "\u0000\uB3DC\u0000\uF0FA\u0000\u0000\u0000\u0000\u0000\u0000" + //  7730 -  7734
-                "\u0000\u0000\u0000\uB4E9\u0000\uB8B2\u0000\u0000\u008F\uE8B1" + //  7735 -  7739
-                "\u0000\uB4EA\u0000\u0000\u0000\uC5BF\u0000\uC5BF\u0000\u0000" + //  7740 -  7744
-                "\u0000\u0000\u0000\uCEE0\u0000\u0000\u0000\uB8D4\u0000\uBBE8" + //  7745 -  7749
-                "\u0000\u0000\u0000\u0000\u0000\uC8EE\u0000\u0000\u0000\u0000" + //  7750 -  7754
-                "\u0000\u0000\u0000\uB8AA\u0000\uCBC3\u0000\u0000\u0000\uE6EF" + //  7755 -  7759
-                "\u0000\uE6ED\u0000\u0000\u0000\uB9CE\u0000\u0000\u0000\uB9CF" + //  7760 -  7764
-                "\u0000\uB0E9\u0000\u0000\u0000\uBAE8\u0000\u0000\u0000\u0000" + //  7765 -  7769
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7D9\u0000\u0000" + //  7770 -  7774
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB3A9" + //  7775 -  7779
-                "\u0000\uB0B2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7780 -  7784
-                "\u0000\uE7EB\u0000\uE7EE\u0000\uC7CE\u0000\u0000\u0000\uBFC4" + //  7785 -  7789
-                "\u0000\u0000\u0000\uB2D6\u0000\u0000\u0000\uCBA7\u0000\u0000" + //  7790 -  7794
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7DD\u0000\uB6DC" + //  7795 -  7799
-                "\u0000\u0000\u0000\uE7ED\u0000\u0000\u0000\uB2EA\u0000\u0000" + //  7800 -  7804
-                "\u0000\u0000\u0000\uB1AA\u0000\u0000\u0000\uCBF8\u0000\uBFD7" + //  7805 -  7809
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7810 -  7814
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7DE\u0000\u0000" + //  7815 -  7819
-                "\u0000\u0000\u0000\uB6E1\u0000\u0000\u0000\u0000\u0000\uCAD6" + //  7820 -  7824
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7825 -  7829
-                "\u0000\uEDE9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7830 -  7834
-                "\u0000\u0000\u0000\uF1C6\u0000\u0000\u0000\u0000\u0000\uB3BE" + //  7835 -  7839
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7CF\u0000\uF1C7" + //  7840 -  7844
-                "\u0000\uF1C8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7845 -  7849
-                "\u0000\uC3DA\u0000\uC6EB\u0000\u0000\u0000\u0000\u0000\u0000" + //  7850 -  7854
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1C9" + //  7855 -  7859
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD1BE\u0000\u0000" + //  7860 -  7864
-                "\u008F\uB2ED\u0000\uC6FE\u0000\u0000\u0000\u0000\u0000\uC1B4" + //  7865 -  7869
-                "\u0000\uD1C0\u0000\uD1C1\u0000\uC8AC\u0000\uB8F8\u0000\uCFBB" + //  7870 -  7874
-                "\u0000\uD1C2\u0000\u0000\u0000\u0000\u0000\uB6A6\u0000\u0000" + //  7875 -  7879
-                "\u0000\u0000\u0000\u0000\u0000\uCABC\u0000\uC2B6\u0000\uB6F1" + //  7880 -  7884
-                "\u0000\uC5B5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7F3" + //  7885 -  7889
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDBE3\u0000\u0000" + //  7890 -  7894
-                "\u0000\u0000\u0000\u0000\u0000\uC9B0\u0000\u0000\u0000\u0000" + //  7895 -  7899
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7900 -  7904
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7905 -  7909
-                "\u0000\uDBEF\u0000\u0000\u0000\uB2B3\u0000\uDBE4\u0000\u0000" + //  7910 -  7914
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7915 -  7919
-                "\u0000\uDBF5\u0000\uDBE5\u0000\uE7BD\u0000\u0000\u0000\uE7BE" + //  7920 -  7924
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB2B2\u0000\u0000" + //  7925 -  7929
-                "\u0000\uE7C5\u0000\uE7C0\u0000\u0000\u0000\u0000\u0000\u0000" + //  7930 -  7934
-                "\u0000\uE7C1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7C2" + //  7935 -  7939
-                "\u0000\u0000\u0000\uC2A1\u0000\u0000\u0000\u0000\u0000\u0000" + //  7940 -  7944
-                "\u0000\u0000\u0000\uE7C4\u0000\uE7C3\u0000\uE7C6\u0000\u0000" + //  7945 -  7949
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7C7\u0000\uE7B1" + //  7950 -  7954
-                "\u0000\u0000\u0000\u0000\u0000\uE7B4\u0000\uE7B3\u0000\u0000" + //  7955 -  7959
-                "\u0000\u0000\u0000\u0000\u0000\uCBC4\u0000\uE7B7\u0000\u0000" + //  7960 -  7964
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7965 -  7969
-                "\u0000\uE7B8\u0000\u0000\u0000\u0000\u0000\uC1B7\u0000\u0000" + //  7970 -  7974
-                "\u0000\uE7B9\u0000\u0000\u0000\u0000\u0000\uE7BB\u0000\u0000" + //  7975 -  7979
-                "\u0000\uE7BF\u0000\u0000\u0000\u0000\u0000\uE7BC\u0000\uE7BA" + //  7980 -  7984
-                "\u0000\uC7BF\u0000\uE7AF\u0000\u0000\u0000\uE7B0\u0000\uE7AC" + //  7985 -  7989
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7AD" + //  7990 -  7994
-                "\u0000\u0000\u0000\uE7AE\u0000\u0000\u0000\u0000\u0000\u0000" + //  7995 -  7999
-                "\u0000\u0000\u0000\uB9D1\u0000\u0000\u0000\u0000\u0000\u0000" + //  8000 -  8004
-                "\u0000\uE7B6\u0000\u0000\u0000\uE7B2\u0000\u0000\u0000\u0000" + //  8005 -  8009
-                "\u0000\u0000\u0000\u0000\u0000\uC9E6\u0000\u0000\u0000\uCBEC" + //  8010 -  8014
-                "\u0000\uC9A8\u0000\u0000\u0000\u0000\u0000\uBFDD\u0000\uEEC7" + //  8015 -  8019
-                "\u0000\u0000\u0000\uEEC8\u0000\u0000\u0000\u0000\u0000\u0000" + //  8020 -  8024
-                "\u0000\uEEC9\u0000\uCDEF\u0000\u0000\u0000\uBDB7\u0000\u0000" + //  8025 -  8029
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEECB" + //  8030 -  8034
-                "\u0000\uEECA\u0000\u0000\u0000\uB9DA\u0000\u0000\u0000\uB9F3" + //  8035 -  8039
-                "\u0000\uBBC0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8040 -  8044
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3E7\u0000\uF3E8" + //  8045 -  8049
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8050 -  8054
-                "\u0000\uC5A4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8055 -  8059
-                "\u0000\uB8DD\u0000\u0000\u0000\uF3EA\u0000\u0000\u0000\u0000" + //  8060 -  8064
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8065 -  8069
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEDA9\u0000\u0000" + //  8070 -  8074
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECFC" + //  8075 -  8079
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECFD\u0000\uECFB" + //  8080 -  8084
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8085 -  8089
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8090 -  8094
-                "\u0000\uE0FB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8095 -  8099
-                "\u0000\uE0FC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8100 -  8104
-                "\u0000\uE0FD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8105 -  8109
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB1BB\u0000\u0000" + //  8110 -  8114
-                "\u0000\u0000\u0000\u0000\u0000\uD2CC\u0000\u0000\u0000\uCCF1" + //  8115 -  8119
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8120 -  8124
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8125 -  8129
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uB4C7" + //  8130 -  8134
-                "\u0000\u0000\u0000\u0000\u0000\uD2CD\u0000\u0000\u0000\uCED2" + //  8135 -  8139
-                "\u0000\u0000\u0000\uB8FC\u0000\u0000\u0000\u0000\u0000\u0000" + //  8140 -  8144
-                "\u0000\u0000\u0000\uB8B6\u0000\uCDD4\u0000\uCFB7\u0000\u0000" + //  8145 -  8149
-                "\u0000\uB9CD\u0000\uE6CE\u0000\uBCD4\u0000\uE6CD\u0000\u0000" + //  8150 -  8154
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6CF\u0000\uBCA9" + //  8155 -  8159
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC2D1\u0000\u0000" + //  8160 -  8164
-                "\u0000\uE6D0\u0000\u0000\u0000\u0000\u0000\uB9CC\u0000\u0000" + //  8165 -  8169
-                "\u0000\uCCD7\u0000\uE6D1\u0000\uE6D2\u0000\u0000\u0000\u0000" + //  8170 -  8174
-                "\u0000\uE6D3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF2F5" + //  8175 -  8179
-                "\u0000\u0000\u0000\u0000\u0000\uF2F3\u0000\u0000\u0000\uB3FB" + //  8180 -  8184
-                "\u0000\u0000\u0000\uF2F2\u0000\uBCB2\u0000\uB2A9\u0000\u0000" + //  8185 -  8189
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8190 -  8194
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8195 -  8199
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB9E3\u0000\u0000" + //  8200 -  8204
-                "\u0000\u0000\u0000\uF2FC\u0000\uF2FB\u0000\uBFE9\u0000\uE6C7" + //  8205 -  8209
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6C8" + //  8210 -  8214
-                "\u0000\u0000\u0000\u0000\u0000\uE6C9\u0000\u0000\u0000\uB4E5" + //  8215 -  8219
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB4CD" + //  8220 -  8224
-                "\u0000\u0000\u0000\u0000\u0000\uE6CA\u0000\u0000\u0000\u0000" + //  8225 -  8229
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6CB\u0000\u0000" + //  8230 -  8234
-                "\u0000\uCBDD\u0000\uCDE3\u0000\u0000\u0000\u0000\u0000\u0000" + //  8235 -  8239
-                "\u0000\uF2F0\u0000\u0000\u0000\u0000\u0000\uF2F1\u0000\uC6BE" + //  8240 -  8244
-                "\u0000\uF2EE\u0000\uF2ED\u0000\u0000\u0000\u0000\u0000\u0000" + //  8245 -  8249
-                "\u0000\u0000\u0000\uB2AA\u0000\u0000\u0000\u0000\u0000\u0000" + //  8250 -  8254
-                "\u0000\uF2F9\u0000\u0000\u0000\u0000\u0000\uF2F8\u0000\u0000" + //  8255 -  8259
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB1F5" + //  8260 -  8264
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF2F6\u0000\uE6AB" + //  8265 -  8269
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8270 -  8274
-                "\u0000\u0000\u0000\uE6AE\u0000\uE6AC\u0000\uE6AD\u0000\uBAE1" + //  8275 -  8279
-                "\u0000\uB7D3\u0000\u0000\u0000\u0000\u0000\uC3D6\u0000\u0000" + //  8280 -  8284
-                "\u0000\uC8B3\u0000\u0000\u0000\uBDF0\u0000\u0000\u0000\u0000" + //  8285 -  8289
-                "\u0000\uC7CD\u0000\u0000\u0000\uC8ED\u0000\uE6AF\u0000\uD8ED" + //  8290 -  8294
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8295 -  8299
-                "\u0000\u0000\u0000\uE6D9\u0000\u0000\u0000\u0000\u0000\u0000" + //  8300 -  8304
-                "\u0000\uE6D8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8305 -  8309
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6DA\u0000\u0000" + //  8310 -  8314
-                "\u0000\u0000\u0000\u0000\u0000\uC0BB\u0000\u0000\u0000\uE6DB" + //  8315 -  8319
-                "\u0000\u0000\u0000\uE6DC\u0000\u0000\u0000\u0000\u0000\u0000" + //  8320 -  8324
-                "\u0000\uCAB9\u0000\uE6DD\u0000\uC4F9\u0000\uE5CE\u0000\u0000" + //  8325 -  8329
-                "\u0000\u0000\u0000\uE5CA\u0000\u0000\u0000\u0000\u0000\u0000" + //  8330 -  8334
-                "\u0000\uCAD4\u0000\uB4CB\u0000\u0000\u0000\u0000\u0000\uCCCB" + //  8335 -  8339
-                "\u0000\u0000\u0000\u0000\u0000\uB0DE\u0000\u0000\u0000\u0000" + //  8340 -  8344
-                "\u0000\uE5CD\u0000\u0000\u0000\uCEFD\u0000\u0000\u0000\u0000" + //  8345 -  8349
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5CC" + //  8350 -  8354
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEEFD" + //  8355 -  8359
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uE4E9\u0000\u0000" + //  8360 -  8364
-                "\u0000\u0000\u0000\uC6E9\u0000\u0000\u0000\uC5D5\u0000\u0000" + //  8365 -  8369
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8370 -  8374
-                "\u0000\uC4D7\u0000\u0000\u0000\uEFAC\u008F\uE4EF\u0000\u0000" + //  8375 -  8379
-                "\u0000\u0000\u0000\u0000\u0000\uC3C3\u0000\uEFA8\u0000\u0000" + //  8380 -  8384
-                "\u0000\u0000\u0000\u0000\u0000\uF1AD\u0000\u0000\u0000\uCCDF" + //  8385 -  8389
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1AE\u0000\uCDDC" + //  8390 -  8394
-                "\u0000\u0000\u0000\uB1C2\u0000\u0000\u0000\u0000\u0000\u0000" + //  8395 -  8399
-                "\u0000\uBBC1\u0000\u0000\u0000\uF1AF\u0000\uB2EE\u0000\uF1B0" + //  8400 -  8404
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1B1\u0000\u0000" + //  8405 -  8409
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1B3\u0000\uF1B4" + //  8410 -  8414
-                "\u0000\u0000\u0000\uC1EF\u0000\uE6DE\u0000\u0000\u0000\u0000" + //  8415 -  8419
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6DF\u0000\u0000" + //  8420 -  8424
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8425 -  8429
-                "\u0000\uCEFE\u0000\uE6E2\u0000\u0000\u0000\uE6E1\u0000\uE6E0" + //  8430 -  8434
-                "\u0000\uC4B0\u0000\u0000\u0000\uE6E3\u0000\uBFA6\u0000\u0000" + //  8435 -  8439
-                "\u0000\uE6E4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6E5" + //  8440 -  8444
-                "\u0000\uCFB8\u0000\uE6E6\u008F\uF4D4\u0000\u0000\u0000\uE5C2" + //  8445 -  8449
-                "\u0000\uE5BC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8450 -  8454
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5C0\u0000\uBCFA" + //  8455 -  8459
-                "\u0000\uB0DD\u0000\uE5BB\u0000\uE5C3\u0000\uE5C7\u0000\uB9CB" + //  8460 -  8464
-                "\u0000\uCCD6\u0000\u0000\u0000\uC4D6\u0000\uE5BD\u0000\u0000" + //  8465 -  8469
-                "\u008F\uD4A7\u0000\uE5C5\u0000\u0000\u0000\uE5BA\u0000\uC3BE" + //  8470 -  8474
-                "\u0000\u0000\u0000\uE5BF\u0000\uB0BD\u0000\uCCCA\u0000\uC1C7" + //  8475 -  8479
-                "\u0000\uCBC2\u0000\uBAF7\u0000\u0000\u0000\u0000\u0000\u0000" + //  8480 -  8484
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8485 -  8489
-                "\u0000\uBBE7\u0000\uC4DD\u0000\u0000\u0000\uE5A7\u0000\uCEDF" + //  8490 -  8494
-                "\u0000\uBAD9\u0000\u0000\u0000\uE5A8\u0000\uBFC2\u0000\u0000" + //  8495 -  8499
-                "\u0000\uE5AA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBED2" + //  8500 -  8504
-                "\u0000\uBAB0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8505 -  8509
-                "\u0000\uE5A9\u0000\uB5AA\u0000\u0000\u0000\uE5A1\u0000\u0000" + //  8510 -  8514
-                "\u0000\uCCF3\u0000\uB9C8\u0000\uE4FE\u0000\u0000\u0000\u0000" + //  8515 -  8519
-                "\u0000\u0000\u0000\uE5A4\u0000\uCCE6\u0000\u0000\u0000\uC7BC" + //  8520 -  8524
-                "\u0000\u0000\u0000\u0000\u0000\uC9B3\u0000\u0000\u0000\u0000" + //  8525 -  8529
-                "\u0000\u0000\u0000\uBDE3\u0000\uE5A3\u0000\u0000\u0000\uBCD3" + //  8530 -  8534
-                "\u0000\uB9C9\u0000\uBBE6\u0000\uB5E9\u0000\uCAB6\u0000\uE5A2" + //  8535 -  8539
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFEA\u0000\u0000" + //  8540 -  8544
-                "\u0000\u0000\u0000\u0000\u0000\uB0C7\u0000\u0000\u0000\u0000" + //  8545 -  8549
-                "\u0000\uEFE8\u0000\u0000\u0000\uEFEC\u0000\uEFEB\u0000\u0000" + //  8550 -  8554
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8555 -  8559
-                "\u0000\uEFEE\u0000\uEFED\u0000\uEFEF\u0000\u0000\u0000\uC6AE" + //  8560 -  8564
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFF0\u0000\u0000" + //  8565 -  8569
-                "\u0000\u0000\u0000\u0000\u0000\uF0E7\u0000\u0000\u0000\u0000" + //  8570 -  8574
-                "\u0000\uF0E8\u0000\u0000\u0000\uF0E9\u0000\u0000\u0000\u0000" + //  8575 -  8579
-                "\u0000\uF0EA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8580 -  8584
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB4DA\u0000\u0000" + //  8585 -  8589
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8590 -  8594
-                "\u0000\u0000\u0000\u0000\u0000\uF0EB\u0000\u0000\u0000\u0000" + //  8595 -  8599
-                "\u0000\u0000\u0000\uF1A9\u0000\uF1A8\u0000\u0000\u0000\uF1AA" + //  8600 -  8604
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8605 -  8609
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8610 -  8614
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8615 -  8619
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8620 -  8624
-                "\u0000\uC8F4\u0000\uE6CC\u0000\u0000\u0000\u0000\u0000\uBFA9" + //  8625 -  8629
-                "\u0000\uB9C7\u0000\u0000\u0000\uE4F7\u0000\u0000\u0000\u0000" + //  8630 -  8634
-                "\u0000\u0000\u0000\u0000\u0000\uCEC8\u0000\u0000\u0000\u0000" + //  8635 -  8639
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8640 -  8644
-                "\u0000\uE4F9\u0000\u0000\u0000\u0000\u0000\uE4FA\u0000\u0000" + //  8645 -  8649
-                "\u0000\uE4FB\u0000\u0000\u0000\uE4FC\u0000\u0000\u0000\uBBE5" + //  8650 -  8654
-                "\u0000\u0000\u0000\uE4FD\u0000\uB7CF\u0000\u0000\u0000\u0000" + //  8655 -  8659
-                "\u0000\uB5EA\u0000\u0000\u0000\uB2A7\u0000\u0000\u0000\u0000" + //  8660 -  8664
-                "\u0000\u0000\u0000\uE6C2\u0000\uE6C3\u0000\u0000\u0000\u0000" + //  8665 -  8669
-                "\u0000\u0000\u0000\uE6C4\u0000\u0000\u0000\uCDE2\u0000\u0000" + //  8670 -  8674
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBDAC" + //  8675 -  8679
-                "\u0000\u0000\u0000\uE6C6\u0000\uE6C5\u0000\u0000\u0000\u0000" + //  8680 -  8684
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8685 -  8689
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDCC\u0000\u0000" + //  8690 -  8694
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8695 -  8699
-                "\u0000\u0000\u0000\u0000\u0000\uC9F6\u0000\uDCB8\u0000\uC2CA" + //  8700 -  8704
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDCBE\u0000\uC1BF" + //  8705 -  8709
-                "\u0000\u0000\u0000\uDCB5\u0000\uDCC2\u0000\uDCC1\u0000\u0000" + //  8710 -  8714
-                "\u0000\uE6D4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8715 -  8719
-                "\u0000\u0000\u0000\u0000\u0000\uE6D5\u0000\u0000\u0000\u0000" + //  8720 -  8724
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8725 -  8729
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBCAA\u0000\u0000" + //  8730 -  8734
-                "\u0000\u0000\u0000\uCCED\u0000\u0000\u0000\u0000\u0000\u0000" + //  8735 -  8739
-                "\u0000\u0000\u0000\uE6D7\u0000\u0000\u0000\uC3BF\u0000\u0000" + //  8740 -  8744
-                "\u0000\uE6D6\u0000\uE4F1\u0000\u0000\u0000\uE4F3\u0000\u0000" + //  8745 -  8749
-                "\u0000\u0000\u0000\uE4F2\u0000\u0000\u0000\u0000\u0000\u0000" + //  8750 -  8754
-                "\u0000\u0000\u0000\uB8D2\u0000\u0000\u0000\u0000\u0000\u0000" + //  8755 -  8759
-                "\u0000\uC1B8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE4F5" + //  8760 -  8764
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC5FC\u0000\u0000" + //  8765 -  8769
-                "\u0000\uE4F4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE4F6" + //  8770 -  8774
-                "\u0000\u0000\u0000\uCAB5\u0000\uC1EC\u0000\uE4C6\u0000\u0000" + //  8775 -  8779
-                "\u0000\u0000\u0000\u0000\u0000\uE4DE\u0000\uE4E0\u0000\u0000" + //  8780 -  8784
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8785 -  8789
-                "\u0000\uE4E1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8790 -  8794
-                "\u0000\u0000\u0000\u0000\u0000\uCAC6\u0000\u0000\u0000\uE4E2" + //  8795 -  8799
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8800 -  8804
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCCE2\u0000\u0000" + //  8805 -  8809
-                "\u008F\uD5AE\u0000\u0000\u0000\uE6BA\u0000\uB7B2\u0000\u0000" + //  8810 -  8814
-                "\u0000\u0000\u0000\u0000\u0000\uC1A2\u0000\uB5C1\u0000\u0000" + //  8815 -  8819
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6BE\u0000\uE6BB" + //  8820 -  8824
-                "\u0000\u0000\u0000\u0000\u0000\uE6BC\u0000\u0000\u0000\u0000" + //  8825 -  8829
-                "\u0000\u0000\u0000\uE6BF\u0000\u0000\u0000\uE6C0\u0000\uE6BD" + //  8830 -  8834
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB1A9\u0000\u0000" + //  8835 -  8839
-                "\u0000\u0000\u0000\uEDD8\u0000\u0000\u0000\uB3ED\u0000\uEDD7" + //  8840 -  8844
-                "\u0000\uEDDC\u0000\u0000\u0000\u0000\u0000\uEDDB\u0000\u0000" + //  8845 -  8849
-                "\u0000\u0000\u0000\uEDDA\u0000\uC5B2\u0000\uEDDD\u0000\u0000" + //  8850 -  8854
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8855 -  8859
-                "\u0000\u0000\u0000\u0000\u0000\uEDDE\u0000\u0000\u0000\u0000" + //  8860 -  8864
-                "\u0000\u0000\u0000\u0000\u0000\uEDDF\u0000\u0000\u0000\u0000" + //  8865 -  8869
-                "\u0000\uB9EC\u0000\uE4DA\u0000\u0000\u0000\u0000\u0000\uE4D7" + //  8870 -  8874
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8875 -  8879
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE4D6\u0000\uC0D2" + //  8880 -  8884
-                "\u0000\u0000\u0000\uE4D9\u0000\uE4DB\u0000\u0000\u0000\u0000" + //  8885 -  8889
-                "\u0000\u0000\u0000\uE4D8\u0000\u0000\u0000\uE4DF\u0000\u0000" + //  8890 -  8894
-                "\u0000\uE4DC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8895 -  8899
-                "\u0000\u0000\u0000\u0000\u0000\uE4DD\u0000\uE4C7\u0000\u0000" + //  8900 -  8904
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8905 -  8909
-                "\u0000\uE4C8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8910 -  8914
-                "\u0000\u0000\u0000\uE4CD\u0000\u0000\u0000\u0000\u0000\u0000" + //  8915 -  8919
-                "\u0000\uE4C2\u0000\uD2D5\u0000\uE4C9\u0000\uE4C3\u0000\u0000" + //  8920 -  8924
-                "\u0000\u0000\u0000\uE4CC\u0000\u0000\u0000\u0000\u0000\u0000" + //  8925 -  8929
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC3BD\u0000\uE4D2" + //  8930 -  8934
-                "\u0000\uBCC4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC6C6" + //  8935 -  8939
-                "\u0000\uE4C5\u0000\uE4C4\u0000\u0000\u0000\u0000\u0000\uE4C1" + //  8940 -  8944
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCFB6\u0000\u0000" + //  8945 -  8949
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE4CA" + //  8950 -  8954
-                "\u0000\u0000\u0000\u0000\u0000\uE4CE\u0000\uE4CB\u0000\u0000" + //  8955 -  8959
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8960 -  8964
-                "\u0000\u0000\u0000\u0000\u0000\uCEF5\u0000\u0000\u0000\u0000" + //  8965 -  8969
-                "\u0000\uDFDE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB1A8" + //  8970 -  8974
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8975 -  8979
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDFE0" + //  8980 -  8984
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDFDF\u0000\u0000" + //  8985 -  8989
-                "\u0000\uDFDD\u0000\uC0E1\u0000\uE4BB\u0000\u0000\u0000\u0000" + //  8990 -  8994
-                "\u0000\uC8CF\u0000\u0000\u0000\uE4BF\u0000\uCAD3\u0000\u0000" + //  8995 -  8999
-                "\u0000\uC3DB\u0000\u0000\u0000\uE4BA\u0000\uE4BC\u0000\u0000" + //  9000 -  9004
-                "\u0000\u0000\u0000\uE4BD\u0000\u0000\u0000\u0000\u0000\u0000" + //  9005 -  9009
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9010 -  9014
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9015 -  9019
-                "\u0000\uE4C0\u0000\u0000\u0000\u0000\u0000\uECFA\u0000\u0000" + //  9020 -  9024
-                "\u0000\uC4FD\u0000\u0000\u0000\u0000\u0000\uEDA1\u0000\uEDA5" + //  9025 -  9029
-                "\u0000\uEDA2\u0000\uECFE\u0000\u0000\u0000\uEDA3\u0000\u0000" + //  9030 -  9034
-                "\u0000\u0000\u0000\u0000\u0000\uEDA4\u0000\u0000\u0000\u0000" + //  9035 -  9039
-                "\u0000\u0000\u0000\u0000\u0000\uEDAB\u0000\u0000\u0000\u0000" + //  9040 -  9044
-                "\u0000\u0000\u0000\uEDA6\u0000\u0000\u0000\u0000\u0000\u0000" + //  9045 -  9049
-                "\u0000\u0000\u0000\u0000\u0000\uC0D8\u0000\uB3DE\u0000\u0000" + //  9050 -  9054
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBFDA\u0000\uC9E4" + //  9055 -  9059
-                "\u0000\u0000\u0000\uE3FC\u0000\u0000\u0000\u0000\u0000\u0000" + //  9060 -  9064
-                "\u0000\uC2E8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9065 -  9069
-                "\u0000\u0000\u0000\u0000\u0000\uE3F7\u0000\u0000\u0000\uE3FB" + //  9070 -  9074
-                "\u0000\uE3FD\u0000\u0000\u0000\u0000\u0000\uBAFB\u0000\u0000" + //  9075 -  9079
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9080 -  9084
-                "\u0000\uCACF\u0000\uB2D5\u0000\u0000\u0000\u0000\u0000\u0000" + //  9085 -  9089
-                "\u0000\uE4B5\u0000\u0000\u0000\uE4B2\u0000\u0000\u0000\uE4B7" + //  9090 -  9094
-                "\u0000\u0000\u0000\u0000\u0000\uE4B6\u0000\u0000\u0000\uC7F3" + //  9095 -  9099
-                "\u0000\uCCA7\u0000\u0000\u0000\uBBBB\u0000\uE4B0\u0000\uE4B9" + //  9100 -  9104
-                "\u0000\uE4B4\u0000\u0000\u0000\uE4B3\u0000\uE4AF\u008F\uD2BB" + //  9105 -  9109
-                "\u0000\uE4B1\u0000\uBECF\u0000\uE3EE\u0000\uE3EF\u0000\uBDD7" + //  9110 -  9114
-                "\u0000\u0000\u0000\uC6B8\u0000\uE3F0\u008F\uF4D0\u0000\u0000" + //  9115 -  9119
-                "\u0000\u0000\u0000\uC3A8\u008F\uD1EC\u0000\u0000\u0000\uE3F1" + //  9120 -  9124
-                "\u0000\u0000\u0000\uC3BC\u0000\uE3F2\u0000\u0000\u0000\u0000" + //  9125 -  9129
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB6A5\u0000\u0000" + //  9130 -  9134
-                "\u0000\uD1BF\u0000\uC3DD\u0000\uBCB3\u0000\u0000\u0000\u0000" + //  9135 -  9139
-                "\u0000\u0000\u0000\u0000\u0000\uB4C8\u0000\uB9F2\u0000\u0000" + //  9140 -  9144
-                "\u0000\uCAE6\u0000\uE3CE\u0000\u0000\u0000\u0000\u0000\uCBD4" + //  9145 -  9149
-                "\u0000\u0000\u0000\u0000\u0000\uE3D0\u0000\u0000\u0000\u0000" + //  9150 -  9154
-                "\u0000\u0000\u0000\uC0D1\u0000\uB1CF\u0000\uB2BA\u0000\uB0AC" + //  9155 -  9159
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9160 -  9164
-                "\u0000\u0000\u0000\uE3CF\u0000\u0000\u0000\u0000\u0000\u0000" + //  9165 -  9169
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9170 -  9174
-                "\u0000\uDDE1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9175 -  9179
-                "\u0000\u0000\u0000\u0000\u0000\uBBE1\u0000\u0000\u0000\uCCB1" + //  9180 -  9184
-                "\u0000\u0000\u0000\uDDE2\u0000\uDDE3\u0000\u0000\u0000\u0000" + //  9185 -  9189
-                "\u0000\uB5A4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDE4" + //  9190 -  9194
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECD3" + //  9195 -  9199
-                "\u0000\uECD4\u0000\u0000\u0000\uECD6\u0000\uC2A3\u0000\u0000" + //  9200 -  9204
-                "\u0000\uECD5\u0000\uB4E6\u0000\u0000\u0000\uECD8\u0000\u0000" + //  9205 -  9209
-                "\u0000\uECD7\u0000\uECD9\u0000\u0000\u008F\uDFC3\u0000\uECDB" + //  9210 -  9214
-                "\u0000\uECDD\u0000\u0000\u0000\uECDE\u0000\u0000\u0000\u0000" + //  9215 -  9219
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9220 -  9224
-                "\u0000\u0000\u0000\u0000\u0000\uB4E1\u0000\u0000\u0000\u0000" + //  9225 -  9229
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9230 -  9234
-                "\u0000\u0000\u0000\uCEE8\u0000\uE0DE\u0000\u0000\u0000\u0000" + //  9235 -  9239
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9240 -  9244
-                "\u0000\uE0E0\u0000\u0000\u008F\uCBE6\u0000\u0000\u0000\u0000" + //  9245 -  9249
-                "\u0000\uECE5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9250 -  9254
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECED" + //  9255 -  9259
-                "\u0000\uECEB\u0000\u0000\u0000\u0000\u0000\uECE8\u0000\u0000" + //  9260 -  9264
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9265 -  9269
-                "\u0000\uECEA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECE9" + //  9270 -  9274
-                "\u0000\uECEC\u0000\u0000\u0000\uB5F7\u0000\u0000\u0000\uECF0" + //  9275 -  9279
-                "\u0000\uE3C7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9280 -  9284
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9285 -  9289
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBCEF" + //  9290 -  9294
-                "\u0000\u0000\u0000\u0000\u0000\uE3CA\u0000\uB0F0\u0000\u0000" + //  9295 -  9299
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE3CD\u0000\u0000" + //  9300 -  9304
-                "\u0000\u0000\u0000\u0000\u0000\uE3CB\u0000\uB2D4\u0000\uB7CE" + //  9305 -  9309
-                "\u0000\uE3CC\u0000\uB9C6\u0000\uB5A9\u0000\u0000\u0000\u0000" + //  9310 -  9314
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9315 -  9319
-                "\u0000\uE3C3\u0000\u0000\u0000\u0000\u0000\uC4F8\u0000\u0000" + //  9320 -  9324
-                "\u0000\uE3C4\u0000\uC0C7\u0000\u0000\u0000\u0000\u0000\u0000" + //  9325 -  9329
-                "\u0000\u0000\u0000\u0000\u0000\uCCAD\u0000\u0000\u0000\u0000" + //  9330 -  9334
-                "\u0000\uC9A3\u0000\uE3C5\u0000\uE3C6\u0000\uC3D5\u0000\u0000" + //  9335 -  9339
-                "\u0000\uCEC7\u0000\u0000\u0000\u0000\u0000\uE3C8\u0000\uBDA8" + //  9340 -  9344
-                "\u0000\uBBE4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9345 -  9349
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE3BD\u0000\u0000" + //  9350 -  9354
-                "\u0000\uBDA9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9355 -  9359
-                "\u0000\u0000\u0000\uB2CA\u0000\uC9C3\u0000\u0000\u0000\u0000" + //  9360 -  9364
-                "\u0000\uE3BE\u0000\u0000\u0000\u0000\u0000\uC8EB\u0000\u0000" + //  9365 -  9369
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9370 -  9374
-                "\u0000\uC1C5\u0000\uE3C9\u0000\uB6D8\u0000\u0000\u0000\u0000" + //  9375 -  9379
-                "\u0000\uCFBD\u0000\uC1B5\u0000\u0000\u0000\u0000\u0000\u0000" + //  9380 -  9384
-                "\u0000\u0000\u0000\uE3B4\u0000\u0000\u0000\u0000\u0000\uB2D2" + //  9385 -  9389
-                "\u0000\uC4F7\u0000\uCAA1\u0000\u0000\u0000\u0000\u0000\u0000" + //  9390 -  9394
-                "\u0000\u0000\u008F\uD0E5\u0000\u0000\u0000\u0000\u0000\u0000" + //  9395 -  9399
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uD0E9\u0000\u0000" + //  9400 -  9404
-                "\u0000\uE3B5\u0000\u0000\u0000\u0000\u0000\uECBA\u0000\u0000" + //  9405 -  9409
-                "\u0000\u0000\u0000\uECBC\u0000\u0000\u0000\u0000\u0000\u0000" + //  9410 -  9414
-                "\u0000\uECBB\u0000\uECBD\u0000\u0000\u0000\uCBC6\u0000\uECBE" + //  9415 -  9419
-                "\u0000\uECBF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9420 -  9424
-                "\u0000\u0000\u0000\uECC0\u0000\u0000\u0000\u0000\u0000\u0000" + //  9425 -  9429
-                "\u0000\uECC2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9430 -  9434
-                "\u0000\uB3AD\u0000\uC4E7\u0000\u0000\u0000\uE5D2\u0000\uE5D8" + //  9435 -  9439
-                "\u0000\uE5D1\u0000\u0000\u0000\u0000\u0000\uBDC4\u0000\u0000" + //  9440 -  9444
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCBA5\u0000\u0000" + //  9445 -  9449
-                "\u0000\u0000\u0000\uBDCC\u0000\u0000\u0000\u0000\u0000\uE5D4" + //  9450 -  9454
-                "\u0000\uE5E0\u0000\u0000\u0000\u0000\u0000\uE5DC\u0000\u0000" + //  9455 -  9459
-                "\u0000\uE5DF\u0000\u0000\u0000\uE5DD\u0000\uE5E1\u0000\uE5DB" + //  9460 -  9464
-                "\u0000\u0000\u0000\uE5C1\u0000\uC0D3\u0000\u0000\u0000\uC8CB" + //  9465 -  9469
-                "\u0000\u0000\u0000\uE5DE\u0000\u0000\u0000\u0000\u0000\uE5D9" + //  9470 -  9474
-                "\u0000\u0000\u0000\uE5DA\u0000\u0000\u0000\uC1A1\u0000\uB7D2" + //  9475 -  9479
-                "\u0000\u0000\u0000\uBDAB\u0000\u0000\u0000\u0000\u0000\u0000" + //  9480 -  9484
-                "\u0000\u0000\u008F\uD4D4\u0000\u0000\u0000\uBFA5\u0000\uC1B6" + //  9485 -  9489
-                "\u0000\uE5E4\u0000\u0000\u0000\u0000\u0000\uE5E6\u0000\uE5E7" + //  9490 -  9494
-                "\u0000\u0000\u0000\u0000\u0000\uE5E3\u0000\uE5E5\u0000\u0000" + //  9495 -  9499
-                "\u0000\uBDAB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9500 -  9504
-                "\u0000\uE5DA\u0000\uE5E2\u0000\u0000\u0000\uE5EA\u0000\uE5E9" + //  9505 -  9509
-                "\u0000\uB7D2\u0000\u0000\u0000\uCBFA\u0000\u0000\u0000\u0000" + //  9510 -  9514
-                "\u0000\uB7AB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9515 -  9519
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5E8" + //  9520 -  9524
-                "\u0000\u0000\u0000\uE5EC\u0000\uE5EB\u0000\uE5EF\u0000\u0000" + //  9525 -  9529
-                "\u0000\uE5F1\u0000\uE3AC\u0000\u0000\u0000\uC7AA\u0000\u0000" + //  9530 -  9534
-                "\u0000\u0000\u0000\uBECD\u0000\u0000\u0000\u0000\u0000\uC9BC" + //  9535 -  9539
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBAD7" + //  9540 -  9544
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9545 -  9549
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC5F8" + //  9550 -  9554
-                "\u0000\u0000\u0000\u0000\u0000\uE3B2\u0000\u0000\u0000\u0000" + //  9555 -  9559
-                "\u0000\u0000\u0000\u0000\u0000\uE3B3\u0000\uE3AB\u0000\uB7B7" + //  9560 -  9564
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9565 -  9569
-                "\u0000\uB5C0\u0000\uB5A7\u0000\uBBE3\u0000\u0000\u0000\u0000" + //  9570 -  9574
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDB4" + //  9575 -  9579
-                "\u0000\u0000\u0000\u0000\u0000\uE3B1\u0000\u0000\u0000\uE3B0" + //  9580 -  9584
-                "\u0000\uC1C4\u0000\uE3AD\u0000\u0000\u0000\u0000\u0000\uE3AF" + //  9585 -  9589
-                "\u0000\u0000\u0000\u0000\u0000\uBDCB\u0000\uBFC0\u0000\uE3AE" + //  9590 -  9594
-                "\u0000\uE2E9\u008F\uCFD5\u0000\u0000\u0000\u0000\u0000\u0000" + //  9595 -  9599
-                "\u0000\uC5D6\u0000\uBAD6\u0000\uB5CE\u0000\u0000\u0000\u0000" + //  9600 -  9604
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9605 -  9609
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCBA4\u0000\u0000" + //  9610 -  9614
-                "\u0000\uC7CB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9615 -  9619
-                "\u0000\u0000\u0000\uC5D7\u0000\u0000\u0000\u0000\u0000\u0000" + //  9620 -  9624
-                "\u0000\u0000\u0000\uB9DC\u0000\uE2D5\u0000\u0000\u0000\u0000" + //  9625 -  9629
-                "\u0000\u0000\u0000\u0000\u0000\uCACD\u0000\u0000\u0000\u0000" + //  9630 -  9634
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBDD6" + //  9635 -  9639
-                "\u0000\uCEC6\u0000\u0000\u0000\u0000\u0000\uE2D7\u0000\u0000" + //  9640 -  9644
-                "\u0000\u0000\u0000\uC6B7\u0000\u0000\u0000\u0000\u0000\uE2D8" + //  9645 -  9649
-                "\u0000\u0000\u0000\u0000\u0000\uE2D9\u0000\u0000\u0000\uE2DD" + //  9650 -  9654
-                "\u0000\uE2DB\u0000\uE2DC\u0000\u0000\u0000\uE2DA\u0000\uC3E5" + //  9655 -  9659
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9660 -  9664
-                "\u008F\uCEF2\u0000\uE2C9\u0000\u0000\u0000\u0000\u0000\u0000" + //  9665 -  9669
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9670 -  9674
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9675 -  9679
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9680 -  9684
-                "\u0000\uE2CA\u0000\uE2CD\u0000\u0000\u0000\u0000\u0000\u0000" + //  9685 -  9689
-                "\u0000\u0000\u0000\uE9D6\u0000\u0000\u0000\uE9D7\u0000\uBCD8" + //  9690 -  9694
-                "\u0000\u0000\u0000\uE9D9\u0000\u0000\u0000\uC3C1\u0000\u0000" + //  9695 -  9699
-                "\u0000\uB7D6\u0000\uB3C2\u0000\u0000\u0000\u0000\u0000\u0000" + //  9700 -  9704
-                "\u0000\u0000\u0000\u0000\u0000\uE9DC\u0000\u0000\u0000\u0000" + //  9705 -  9709
-                "\u0000\u0000\u0000\u0000\u0000\uB3BF\u0000\u0000\u0000\uE9E1" + //  9710 -  9714
-                "\u0000\u0000\u0000\u0000\u0000\uE9DD\u0000\uE9E0\u0000\uCCB2" + //  9715 -  9719
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2C2\u0000\uE2C4" + //  9720 -  9724
-                "\u0000\uE2C5\u0000\u0000\u0000\u0000\u0000\uE2C1\u0000\u0000" + //  9725 -  9729
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9730 -  9734
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9735 -  9739
-                "\u0000\u0000\u0000\u0000\u0000\uE2C7\u0000\uE2C8\u0000\u0000" + //  9740 -  9744
-                "\u0000\uC4AF\u0000\u0000\u0000\uB4E3\u0000\u0000\u0000\u0000" + //  9745 -  9749
-                "\u0000\u0000\u0000\uEFB7\u0000\u0000\u0000\u0000\u008F\uE5BF" + //  9750 -  9754
-                "\u0000\u0000\u0000\uEFBA\u0000\u0000\u0000\u0000\u0000\u0000" + //  9755 -  9759
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFB9" + //  9760 -  9764
-                "\u0000\uC5AD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9765 -  9769
-                "\u0000\uEFB2\u0000\uEFB3\u0000\uEFB6\u0000\u0000\u0000\u0000" + //  9770 -  9774
-                "\u0000\u0000\u0000\u0000\u0000\uEFB8\u008F\uE5C9\u0000\u0000" + //  9775 -  9779
-                "\u0000\uE4E9\u0000\uE4E7\u0000\u0000\u0000\uE4E5\u0000\uB4A1" + //  9780 -  9784
-                "\u0000\u0000\u0000\uBED1\u0000\uE4EA\u0000\u0000\u0000\u0000" + //  9785 -  9789
-                "\u0000\uE4E8\u0000\u0000\u0000\uE4E6\u0000\uE4EE\u0000\u0000" + //  9790 -  9794
-                "\u0000\u0000\u0000\uE4ED\u0000\uE4EC\u0000\uE4EB\u0000\u0000" + //  9795 -  9799
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE4EF" + //  9800 -  9804
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE4F0\u0000\uC0BA" + //  9805 -  9809
-                "\u0000\u0000\u0000\uCDED\u0000\uB0BC\u0000\uE5B3\u0000\u0000" + //  9810 -  9814
-                "\u0000\u0000\u0000\uB5EB\u0000\u0000\u0000\uE5B0\u0000\u0000" + //  9815 -  9819
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5B1" + //  9820 -  9824
-                "\u0000\u0000\u0000\u0000\u0000\uC5FD\u0000\uE5AF\u0000\uE5AC" + //  9825 -  9829
-                "\u0000\u0000\u0000\uB3A8\u0000\uC0E4\u0000\u0000\u0000\u0000" + //  9830 -  9834
-                "\u0000\uB8A8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5B8" + //  9835 -  9839
-                "\u0000\u0000\u0000\u0000\u0000\uC5BE\u0000\uEDC4\u0000\u0000" + //  9840 -  9844
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9845 -  9849
-                "\u0000\u0000\u0000\uEDC7\u0000\u0000\u0000\u0000\u0000\u0000" + //  9850 -  9854
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9855 -  9859
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBCB4" + //  9860 -  9864
-                "\u0000\u0000\u0000\u0000\u0000\uEDC6\u0000\uEDC5\u0000\uB7DA" + //  9865 -  9869
-                "\u0000\uEDC8\u0000\u0000\u0000\uB1EF\u0000\u0000\u0000\u0000" + //  9870 -  9874
-                "\u0000\uC6EC\u0000\uE5CF\u0000\u0000\u0000\u0000\u0000\u0000" + //  9875 -  9879
-                "\u0000\uE5D6\u0000\uE5D0\u0000\uE5D7\u0000\u0000\u0000\u0000" + //  9880 -  9884
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5D3" + //  9885 -  9889
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9890 -  9894
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7FB\u0000\u0000" + //  9895 -  9899
-                "\u0000\u0000\u0000\uBCCA\u0000\uE5D5\u0000\uE2A5\u0000\u0000" + //  9900 -  9904
-                "\u008F\uF4C7\u0000\uE2A6\u0000\uC5AA\u0000\u0000\u0000\uB3A7" + //  9905 -  9909
-                "\u0000\uB9C4\u0000\uE2A7\u0000\u0000\u0000\u0000\u0000\uE2A8" + //  9910 -  9914
-                "\u0000\u0000\u0000\u0000\u0000\uE2A9\u0000\u0000\u0000\uBBA9" + //  9915 -  9919
-                "\u0000\u0000\u0000\u0000\u0000\uE2AB\u0000\u0000\u0000\u0000" + //  9920 -  9924
-                "\u0000\uE2AA\u0000\u0000\u0000\u0000\u0000\uE2AC\u0000\uE2AD" + //  9925 -  9929
-                "\u008F\uCEBA\u008F\uCEBB\u0000\u0000\u008F\uF4C8\u0000\u0000" + //  9930 -  9934
-                "\u0000\uB6CE\u0000\uB7A9\u0000\uE4E3\u0000\u0000\u0000\u0000" + //  9935 -  9939
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCAB4\u0000\u0000" + //  9940 -  9944
-                "\u0000\uBFE8\u0000\u0000\u0000\uCCB0\u0000\u0000\u0000\u0000" + //  9945 -  9949
-                "\u0000\uE4E4\u0000\u0000\u0000\uCEB3\u0000\u0000\u0000\u0000" + //  9950 -  9954
-                "\u0000\uC7F4\u0000\u0000\u0000\uC1C6\u0000\uC7B4\u0000\u0000" + //  9955 -  9959
-                "\u0000\u0000\u0000\uBDCD\u0000\u0000\u0000\u0000\u0000\u0000" + //  9960 -  9964
-                "\u0000\uB0C0\u0000\uE1EB\u0000\uE1EC\u0000\uE1ED\u0000\u0000" + //  9965 -  9969
-                "\u0000\uE1EE\u0000\u0000\u0000\uC1E9\u0000\uE1EA\u0000\u0000" + //  9970 -  9974
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9975 -  9979
-                "\u0000\u0000\u0000\u0000\u0000\uE1F0\u0000\u0000\u0000\u0000" + //  9980 -  9984
-                "\u0000\u0000\u0000\uE1EF\u0000\u0000\u0000\u0000\u0000\u0000" + //  9985 -  9989
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1F1\u0000\u0000" + //  9990 -  9994
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC6A3\u0000\uE9BB" + //  9995 -  9999
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC8CD\u0000\uE9AE" + // 10000 - 10004
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10005 - 10009
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10010 - 10014
-                "\u0000\u0000\u0000\u0000\u0000\uBDF3\u0000\u0000\u0000\uE9BD" + // 10015 - 10019
-                "\u0000\uE9C2\u0000\uC1F4\u0000\u0000\u0000\u0000\u0000\uE9C1" + // 10020 - 10024
-                "\u0000\u0000\u0000\uB4C9\u0000\u0000\u0000\u0000\u0000\u0000" + // 10025 - 10029
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10030 - 10034
-                "\u0000\uC3BD\u0000\u0000\u0000\u0000\u0000\uC0FD\u0000\u0000" + // 10035 - 10039
-                "\u0000\u0000\u0000\u0000\u0000\uC8A2\u0000\u0000\u0000\u0000" + // 10040 - 10044
-                "\u0000\uE4BE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC8A4" + // 10045 - 10049
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10050 - 10054
-                "\u0000\u0000\u0000\u0000\u0000\uE9CC\u0000\u0000\u0000\u0000" + // 10055 - 10059
-                "\u0000\u0000\u0000\uC3EE\u0000\u0000\u0000\u0000\u0000\u0000" + // 10060 - 10064
-                "\u0000\u0000\u0000\u0000\u0000\uE9CD\u0000\u0000\u0000\u0000" + // 10065 - 10069
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10070 - 10074
-                "\u0000\uC6FA\u0000\u0000\u0000\uB0BA\u0000\u0000\u0000\u0000" + // 10075 - 10079
-                "\u0000\u0000\u0000\u0000\u0000\uC0D6\u0000\u0000\u0000\uBCCF" + // 10080 - 10084
-                "\u0000\uECDF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB3D2" + // 10085 - 10089
-                "\u0000\u0000\u0000\uECE0\u0000\u0000\u0000\u0000\u0000\uC1F6" + // 10090 - 10094
-                "\u0000\uECE1\u0000\u0000\u0000\uECE2\u0000\uC9EB\u0000\u0000" + // 10095 - 10099
-                "\u008F\uF4E1\u0000\uB5AF\u0000\u0000\u0000\u0000\u0000\u0000" + // 10100 - 10104
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10105 - 10109
-                "\u0000\uDFF1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDFF2" + // 10110 - 10114
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7AE" + // 10115 - 10119
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10120 - 10124
-                "\u0000\u0000\u0000\u0000\u0000\uDFF4\u0000\u0000\u0000\u0000" + // 10125 - 10129
-                "\u0000\u0000\u0000\u0000\u0000\uDFF5\u0000\u0000\u0000\uB4CA" + // 10130 - 10134
-                "\u0000\u0000\u0000\uE4CF\u0000\u0000\u0000\u0000\u0000\u0000" + // 10135 - 10139
-                "\u0000\uE4D0\u0000\u0000\u0000\u0000\u0000\uE4D1\u0000\uE4D4" + // 10140 - 10144
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10145 - 10149
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10150 - 10154
-                "\u0000\u0000\u0000\uE4D3\u0000\uC8F6\u0000\u0000\u0000\u0000" + // 10155 - 10159
-                "\u0000\u0000\u0000\u0000\u0000\uE4D5\u0000\uCEFC\u0000\uCAED" + // 10160 - 10164
-                "\u0000\uC8AB\u0000\u0000\u0000\uC9AD\u0000\u0000\u0000\uE1BF" + // 10165 - 10169
-                "\u0000\uCEAC\u0000\uB7CD\u0000\uE1C0\u0000\u0000\u0000\uE1BE" + // 10170 - 10174
-                "\u0000\uC8D6\u0000\uE1C1\u0000\u0000\u0000\uE1C2\u0000\u0000" + // 10175 - 10179
-                "\u008F\uCDBB\u0000\uB0DB\u0000\u0000\u0000\u0000\u0000\uBEF6" + // 10180 - 10184
-                "\u0000\uE1C7\u0000\u0000\u0000\uE1C4\u0000\uC6ED\u0000\uE1C3" + // 10185 - 10189
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10190 - 10194
-                "\u0000\u0000\u0000\uB5A6\u0000\uE1A1\u0000\u0000\u0000\uC9BB" + // 10195 - 10199
-                "\u0000\uE1A2\u0000\u0000\u0000\u0000\u0000\uB4A4\u0000\uE1A3" + // 10200 - 10204
-                "\u0000\u0000\u0000\uE1A4\u0000\u0000\u0000\u0000\u0000\u0000" + // 10205 - 10209
-                "\u0000\u0000\u0000\uE1A5\u0000\u0000\u0000\uE1A7\u0000\uE1A8" + // 10210 - 10214
-                "\u0000\uE1A6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC9D3" + // 10215 - 10219
-                "\u0000\uE1AA\u0000\uE1A9\u0000\u0000\u0000\u0000\u0000\u0000" + // 10220 - 10224
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5BE" + // 10225 - 10229
-                "\u0000\u0000\u0000\u0000\u0000\uB6DB\u0000\uC8EC\u0000\u0000" + // 10230 - 10234
-                "\u0000\u0000\u0000\u0000\u0000\uC1ED\u0000\u0000\u0000\uCED0" + // 10235 - 10239
-                "\u0000\uBDEF\u0000\u0000\u0000\u0000\u0000\uE5EE\u008F\uF4D5" + // 10240 - 10244
-                "\u0000\u0000\u0000\uE5C8\u0000\u0000\u0000\uC0FE\u0000\u0000" + // 10245 - 10249
-                "\u0000\uE5C4\u0000\uE5C9\u0000\uE5CB\u0000\u0000\u0000\uC6CD" + // 10250 - 10254
-                "\u0000\u0000\u0000\uC0E0\u0000\uBAF5\u0000\u0000\u0000\u0000" + // 10255 - 10259
-                "\u0000\u0000\u0000\uE3D8\u0000\u0000\u0000\u0000\u0000\u0000" + // 10260 - 10264
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10265 - 10269
-                "\u0000\u0000\u0000\uC3E2\u0000\uC1EB\u0000\u0000\u0000\uE3DA" + // 10270 - 10274
-                "\u0000\uE3DC\u0000\uE3D9\u0000\uE3DB\u0000\u0000\u0000\u0000" + // 10275 - 10279
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7A2" + // 10280 - 10284
-                "\u0000\uCEDC\u0000\u0000\u008F\uCCC2\u0000\uE0F4\u0000\uF4A4" + // 10285 - 10289
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0F2" + // 10290 - 10294
-                "\u0000\uE0F5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10295 - 10299
-                "\u0000\uE0E7\u0000\uE0F3\u0000\u0000\u0000\u0000\u0000\uBABC" + // 10300 - 10304
-                "\u0000\u0000\u0000\u0000\u0000\uE0F6\u0000\u0000\u0000\u0000" + // 10305 - 10309
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10310 - 10314
-                "\u0000\uE0F7\u0000\u0000\u0000\uE3C1\u0000\u0000\u0000\uE3C2" + // 10315 - 10319
-                "\u0000\uC7E9\u0000\u0000\u0000\uBFC1\u0000\uE3BF\u0000\u0000" + // 10320 - 10324
-                "\u0000\uC3E1\u0000\u0000\u0000\u0000\u0000\uE3C0\u0000\u0000" + // 10325 - 10329
-                "\u0000\u0000\u0000\u0000\u0000\uBECE\u0000\u0000\u0000\u0000" + // 10330 - 10334
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10335 - 10339
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB0DC\u0000\u0000" + // 10340 - 10344
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC8BA\u0000\u0000" + // 10345 - 10349
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9DE\u0000\u0000" + // 10350 - 10354
-                "\u0000\u0000\u0000\uE9DF\u0000\uC9C8\u0000\uC8DA\u0000\uE9E2" + // 10355 - 10359
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10360 - 10364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC2FD\u0000\uE9EC" + // 10365 - 10369
-                "\u0000\u0000\u0000\uE9E8\u0000\u0000\u0000\u0000\u0000\uB2EB" + // 10370 - 10374
-                "\u0000\u0000\u0000\uE3D1\u0000\uE3D2\u0000\uBEF7\u0000\u0000" + // 10375 - 10379
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE3D3" + // 10380 - 10384
-                "\u0000\u0000\u0000\uB3CF\u0000\u0000\u0000\u0000\u0000\u0000" + // 10385 - 10389
-                "\u0000\u0000\u0000\uE3D5\u0000\u0000\u0000\u0000\u0000\u0000" + // 10390 - 10394
-                "\u0000\uB7EA\u0000\u0000\u0000\uB5E6\u0000\u0000\u0000\u0000" + // 10395 - 10399
-                "\u0000\uE3D6\u0000\uB6F5\u0000\u0000\u0000\u0000\u0000\uE3D7" + // 10400 - 10404
-                "\u0000\u0000\u0000\uC0FC\u0000\uBCEE\u0000\u0000\u0000\u0000" + // 10405 - 10409
-                "\u008F\uCBF4\u0000\u0000\u0000\uE0E2\u0000\u0000\u0000\u0000" + // 10410 - 10414
-                "\u0000\u0000\u0000\u0000\u0000\uB7BE\u0000\u0000\u0000\u0000" + // 10415 - 10419
-                "\u0000\uC8C9\u0000\uE0E3\u0000\u0000\u0000\u0000\u0000\uE0FE" + // 10420 - 10424
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uCBF9\u0000\u0000" + // 10425 - 10429
-                "\u0000\u0000\u0000\uE0E9\u0000\u0000\u0000\u0000\u0000\u0000" + // 10430 - 10434
-                "\u0000\u0000\u0000\u0000\u0000\uB8BD\u0000\u0000\u0000\uBECC" + // 10435 - 10439
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10440 - 10444
-                "\u0000\uE3A5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10445 - 10449
-                "\u0000\u0000\u0000\u0000\u0000\uC1C3\u0000\u0000\u0000\u0000" + // 10450 - 10454
-                "\u0000\uE3A7\u0000\uE3A6\u0000\u0000\u0000\u0000\u0000\u0000" + // 10455 - 10459
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE3A8\u0000\u0000" + // 10460 - 10464
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10465 - 10469
-                "\u0000\uB5FA\u0000\uE3B6\u0000\u0000\u0000\u0000\u0000\uE3B8" + // 10470 - 10474
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE3B9\u0000\u0000" + // 10475 - 10479
-                "\u0000\uC7A9\u0000\uC5F8\u0000\u0000\u0000\uE3BA\u0000\u0000" + // 10480 - 10484
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE3BB" + // 10485 - 10489
-                "\u0000\uE3BC\u0000\u0000\u0000\u0000\u0000\uB6D9\u0000\uB2D3" + // 10490 - 10494
-                "\u0000\uC6C5\u0000\uE0E1\u0000\u0000\u0000\uB2D1\u0000\u0000" + // 10495 - 10499
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0DD" + // 10500 - 10504
-                "\u008F\uCBEA\u0000\uBBB9\u0000\u0000\u0000\u0000\u0000\uC4C1" + // 10505 - 10509
-                "\u0000\uE0DF\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uCBEE" + // 10510 - 10514
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uCBF0\u0000\u0000" + // 10515 - 10519
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10520 - 10524
-                "\u0000\u0000\u0000\uE0E4\u0000\u0000\u0000\uBCA7\u0000\u0000" + // 10525 - 10529
-                "\u0000\u0000\u0000\u0000\u0000\uE2FC\u0000\uE2F7\u0000\u0000" + // 10530 - 10534
-                "\u0000\u0000\u0000\u0000\u0000\uE2FD\u0000\uE2F8\u0000\u0000" + // 10535 - 10539
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC8D8\u0000\uE2F6" + // 10540 - 10544
-                "\u0000\u0000\u0000\u0000\u0000\uE2F9\u0000\u0000\u0000\u0000" + // 10545 - 10549
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE3A2\u0000\u0000" + // 10550 - 10554
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7A9" + // 10555 - 10559
-                "\u0000\uE7AA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10560 - 10564
-                "\u0000\uBCF0\u0000\u0000\u0000\u0000\u0000\uE7A8\u0000\u0000" + // 10565 - 10569
-                "\u0000\uB9F8\u0000\uE7A7\u0000\u0000\u0000\u0000\u0000\uE7AB" + // 10570 - 10574
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC4B2\u0000\uCAA2" + // 10575 - 10579
-                "\u0000\uC1A3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10580 - 10584
-                "\u0000\uC2DC\u0000\uE0C3\u0000\uE0C4\u0000\uE0C2\u0000\u0000" + // 10585 - 10589
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10590 - 10594
-                "\u0000\uBCED\u0000\u0000\u0000\u0000\u0000\uC6C8\u0000\uB6B9" + // 10595 - 10599
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10600 - 10604
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0C6" + // 10605 - 10609
-                "\u0000\uC3AC\u0000\uE0C5\u0000\u0000\u0000\u0000\u0000\uCFB5" + // 10610 - 10614
-                "\u0000\uC7E2\u0000\u0000\u0000\u0000\u0000\uEBDB\u0000\u0000" + // 10615 - 10619
-                "\u0000\uEBD9\u0000\u0000\u0000\u0000\u0000\uC3CC\u0000\u0000" + // 10620 - 10624
-                "\u0000\u0000\u0000\u0000\u0000\uC0C1\u0000\uB4D2\u0000\uEBDA" + // 10625 - 10629
-                "\u0000\u0000\u0000\uBFDB\u0000\u0000\u0000\u0000\u0000\uCECA" + // 10630 - 10634
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCFC0\u0000\u0000" + // 10635 - 10639
-                "\u0000\u0000\u0000\u0000\u0000\uEBDC\u0000\uEBE7\u0000\uC4B5" + // 10640 - 10644
-                "\u0000\u0000\u0000\uEBE6\u008F\uDEB0\u0000\uB5BE\u0000\u0000" + // 10645 - 10649
-                "\u0000\uE0B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10650 - 10654
-                "\u0000\uE0BA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10655 - 10659
-                "\u0000\uB8A4\u0000\u0000\u0000\u0000\u0000\uC8C8\u0000\u0000" + // 10660 - 10664
-                "\u008F\uCAEF\u0000\uE0BC\u0000\u0000\u0000\u0000\u0000\u0000" + // 10665 - 10669
-                "\u0000\uBEF5\u0000\u0000\u0000\u0000\u0000\uE0BB\u0000\u0000" + // 10670 - 10674
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uCAF1\u0000\u0000" + // 10675 - 10679
-                "\u0000\uB8EB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10680 - 10684
-                "\u0000\uE2EE\u0000\uC4F6\u0000\u0000\u0000\u0000\u0000\u0000" + // 10685 - 10689
-                "\u0000\u0000\u0000\uE2F1\u0000\uB3B7\u0000\uE2EC\u0000\u0000" + // 10690 - 10694
-                "\u0000\u0000\u0000\uC8EA\u0000\u0000\u0000\uB1B0\u0000\u0000" + // 10695 - 10699
-                "\u0000\uBAEC\u0000\u0000\u0000\uCFD2\u0000\u0000\u0000\u0000" + // 10700 - 10704
-                "\u0000\uE2F0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10705 - 10709
-                "\u0000\u0000\u0000\uE4A8\u0000\u0000\u0000\uE4AA\u0000\u0000" + // 10710 - 10714
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE4AD\u0000\u0000" + // 10715 - 10719
-                "\u0000\uE4AE\u0000\u0000\u0000\uE4AB\u0000\uE4AC\u0000\u0000" + // 10720 - 10724
-                "\u0000\u0000\u0000\uE4A9\u0000\uE4A7\u0000\u0000\u0000\u0000" + // 10725 - 10729
-                "\u0000\u0000\u0000\u0000\u0000\uE4A1\u0000\u0000\u0000\u0000" + // 10730 - 10734
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6A1\u0000\u0000" + // 10735 - 10739
-                "\u008F\uD4F2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10740 - 10744
-                "\u0000\uE6A2\u0000\uE6A3\u0000\uE6A4\u0000\u0000\u0000\uE6A5" + // 10745 - 10749
-                "\u0000\uE6A6\u0000\u0000\u0000\u0000\u0000\uE6A8\u0000\uE6A7" + // 10750 - 10754
-                "\u0000\u0000\u0000\u0000\u0000\uE6A9\u0000\u0000\u0000\u0000" + // 10755 - 10759
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6AA" + // 10760 - 10764
-                "\u0000\uBAD4\u0000\uE0B5\u0000\uE0B4\u0000\u0000\u0000\u0000" + // 10765 - 10769
-                "\u0000\u0000\u0000\u0000\u0000\uE0B6\u0000\u0000\u0000\u0000" + // 10770 - 10774
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10775 - 10779
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0B7\u0000\u0000" + // 10780 - 10784
-                "\u0000\u0000\u0000\u0000\u0000\uE0B8\u0000\u0000\u0000\u0000" + // 10785 - 10789
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10790 - 10794
-                "\u0000\u0000\u0000\u0000\u0000\uBFF3\u0000\u0000\u0000\u0000" + // 10795 - 10799
-                "\u0000\uD6CC\u008F\uBBDE\u0000\u0000\u0000\uBAB7\u0000\u0000" + // 10800 - 10804
-                "\u0000\u0000\u0000\u0000\u0000\uD6CD\u0000\u0000\u0000\u0000" + // 10805 - 10809
-                "\u0000\uD6CE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10810 - 10814
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10815 - 10819
-                "\u0000\uB4F2\u0000\u0000\u0000\uD5C9\u0000\uD5C8\u0000\u0000" + // 10820 - 10824
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10825 - 10829
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD5CA\u0000\u0000" + // 10830 - 10834
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10835 - 10839
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB2DE\u0000\u0000" + // 10840 - 10844
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3E2" + // 10845 - 10849
-                "\u0000\u0000\u0000\uBEFC\u0000\uD3DE\u0000\u0000\u0000\uD3DC" + // 10850 - 10854
-                "\u0000\u0000\u0000\uD3DD\u0000\u0000\u0000\uD3DF\u0000\u0000" + // 10855 - 10859
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10860 - 10864
-                "\u0000\u0000\u0000\uE3A1\u0000\uCBE1\u0000\u0000\u0000\u0000" + // 10865 - 10869
-                "\u0000\u0000\u0000\uE2FE\u0000\u0000\u0000\u0000\u0000\uB0EB" + // 10870 - 10874
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE3A4" + // 10875 - 10879
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10880 - 10884
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE3A3\u0000\u0000" + // 10885 - 10889
-                "\u0000\u0000\u0000\uEBD0\u0000\u0000\u0000\uEBD1\u0000\uEBCF" + // 10890 - 10894
-                "\u0000\u0000\u0000\uB8D8\u0000\u0000\u0000\uCDC0\u0000\u0000" + // 10895 - 10899
-                "\u0000\u0000\u0000\uBBEF\u0000\uC7A7\u0000\u0000\u0000\u0000" + // 10900 - 10904
-                "\u0000\u0000\u0000\uEBD4\u0000\u0000\u0000\uC0C0\u0000\u0000" + // 10905 - 10909
-                "\u0000\uC3C2\u0000\u0000\u0000\u0000\u0000\uCDB6\u0000\u0000" + // 10910 - 10914
-                "\u0000\uEBD7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB8EC" + // 10915 - 10919
-                "\u0000\u0000\u0000\uBFE7\u0000\u0000\u0000\uC6C4\u0000\u0000" + // 10920 - 10924
-                "\u0000\uE2CE\u0000\uCBD3\u0000\u0000\u0000\uE2CB\u0000\u0000" + // 10925 - 10929
-                "\u0000\u0000\u0000\uE2CC\u0000\u0000\u0000\u0000\u0000\u0000" + // 10930 - 10934
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10935 - 10939
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10940 - 10944
-                "\u0000\uE2D1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10945 - 10949
-                "\u0000\uE2D0\u0000\uE2CF\u0000\uE0AE\u0000\u0000\u0000\u0000" + // 10950 - 10954
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0AF\u0000\uCAD2" + // 10955 - 10959
-                "\u0000\uC8C7\u0000\u0000\u0000\u0000\u0000\uE0B0\u0000\uC7D7" + // 10960 - 10964
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10965 - 10969
-                "\u0000\uC4AD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10970 - 10974
-                "\u0000\u0000\u0000\uE0B1\u0000\uB2E7\u0000\u0000\u0000\uB5ED" + // 10975 - 10979
-                "\u0000\u0000\u0000\uCCC6\u0000\u0000\u0000\uCCB6\u0000\uDFFA" + // 10980 - 10984
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC1E7" + // 10985 - 10989
-                "\u0000\uBBB8\u0000\uDFFC\u0000\u0000\u0000\u0000\u0000\u0000" + // 10990 - 10994
-                "\u0000\u0000\u0000\uDFFB\u0000\uBFA4\u0000\uD2D9\u0000\u0000" + // 10995 - 10999
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11000 - 11004
-                "\u0000\uDFFD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0A1" + // 11005 - 11009
-                "\u0000\u0000\u0000\uDFEE\u0000\uDFFE\u0000\u0000\u008F\uCABD" + // 11010 - 11014
-                "\u0000\uE0A2\u0000\uB9EA\u0000\uC7A8\u0000\u0000\u0000\u0000" + // 11015 - 11019
-                "\u0000\uDEB9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11020 - 11024
-                "\u0000\u0000\u0000\u0000\u0000\uCDF4\u0000\uDFBD\u0000\u0000" + // 11025 - 11029
-                "\u0000\uDFC1\u0000\uC2F5\u0000\u0000\u0000\uDFC0\u0000\u0000" + // 11030 - 11034
-                "\u0000\uDFAB\u0000\u0000\u008F\uC9A6\u0000\uEFE9\u0000\u0000" + // 11035 - 11039
-                "\u0000\u0000\u0000\u0000\u0000\uDFC5\u0000\u0000\u0000\u0000" + // 11040 - 11044
-                "\u0000\u0000\u0000\uDFC9\u0000\u0000\u0000\uE1F7\u0000\uE1F8" + // 11045 - 11049
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1FC" + // 11050 - 11054
-                "\u0000\uE1F9\u0000\uE1FA\u0000\uE1FB\u0000\u0000\u0000\uE1FD" + // 11055 - 11059
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1FE\u0000\u0000" + // 11060 - 11064
-                "\u0000\uE2A1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2A2" + // 11065 - 11069
-                "\u0000\u0000\u0000\uE2A3\u0000\u0000\u0000\uC8AF\u0000\uC5D0" + // 11070 - 11074
-                "\u0000\uE2A4\u0000\uC7F2\u0000\uC9B4\u0000\u0000\u0000\uE2B8" + // 11075 - 11079
-                "\u0000\u0000\u0000\uB4C6\u0000\uC8D7\u0000\uE2B9\u0000\u0000" + // 11080 - 11084
-                "\u0000\uE2BA\u0000\u0000\u0000\u0000\u0000\uE2BB\u0000\u0000" + // 11085 - 11089
-                "\u0000\u0000\u0000\u0000\u0000\uCCDC\u0000\u0000\u0000\u0000" + // 11090 - 11094
-                "\u0000\u0000\u0000\uCCD5\u0000\u0000\u0000\uC4BE\u0000\u0000" + // 11095 - 11099
-                "\u0000\u0000\u0000\u0000\u0000\uC1EA\u0000\u0000\u0000\u0000" + // 11100 - 11104
-                "\u0000\uE2BD\u0000\u0000\u0000\u0000\u0000\uBDE2\u0000\u0000" + // 11105 - 11109
-                "\u0000\uBECA\u0000\u0000\u0000\u0000\u0000\uE2C0\u0000\u0000" + // 11110 - 11114
-                "\u0000\u0000\u0000\uE2BF\u0000\uE2BE\u0000\uC8FD\u0000\u0000" + // 11115 - 11119
-                "\u0000\uB4C7\u0000\uB8A9\u0000\u0000\u0000\u0000\u0000\u0000" + // 11120 - 11124
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11125 - 11129
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11130 - 11134
-                "\u0000\u0000\u0000\uE2C6\u0000\u0000\u0000\u0000\u0000\uE2C3" + // 11135 - 11139
-                "\u0000\uBFBF\u0000\uB7E3\u0000\uC2F9\u0000\uDFB2\u0000\uC7BB" + // 11140 - 11144
-                "\u0000\u0000\u0000\u0000\u0000\uDFB9\u0000\u0000\u0000\u0000" + // 11145 - 11149
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11150 - 11154
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11155 - 11159
-                "\u0000\u0000\u0000\uDFBE\u0000\uDFBC\u0000\u0000\u0000\u0000" + // 11160 - 11164
-                "\u0000\uDFBF\u0000\u0000\u0000\u0000\u0000\uDFC2\u0000\u0000" + // 11165 - 11169
-                "\u0000\u0000\u0000\u0000\u0000\uDFBB\u0000\uDFA8\u0000\uDFA7" + // 11170 - 11174
-                "\u0000\uDFAD\u0000\u0000\u0000\uC0A1\u0000\u0000\u0000\uDFA4" + // 11175 - 11179
-                "\u0000\u0000\u008F\uC8E5\u0000\u0000\u0000\u0000\u0000\u0000" + // 11180 - 11184
-                "\u0000\u0000\u0000\u0000\u0000\uDFB0\u0000\u0000\u0000\u0000" + // 11185 - 11189
-                "\u0000\uDFB1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11190 - 11194
-                "\u0000\u0000\u0000\uB4C2\u0000\u0000\u0000\u0000\u0000\u0000" + // 11195 - 11199
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11200 - 11204
-                "\u0000\uBCFE\u0000\u0000\u0000\uBCF6\u0000\u0000\u0000\u0000" + // 11205 - 11209
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD2EF\u0000\uD2ED" + // 11210 - 11214
-                "\u0000\u0000\u0000\uCCA3\u0000\u0000\u0000\uD2EA\u0000\uD2F3" + // 11215 - 11219
-                "\u0000\uD2EE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD2F1" + // 11220 - 11224
-                "\u0000\uB8C6\u0000\uCCBF\u0000\u0000\u0000\u0000\u0000\uEAE8" + // 11225 - 11229
-                "\u0000\u0000\u0000\uEAED\u0000\u0000\u0000\u0000\u0000\uCAA3" + // 11230 - 11234
-                "\u0000\u0000\u0000\u0000\u0000\uEAEF\u0000\u0000\u0000\uEAEE" + // 11235 - 11239
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB3EC\u0000\u0000" + // 11240 - 11244
-                "\u0000\uCBAB\u0000\uEAF0\u0000\u0000\u0000\u0000\u0000\u0000" + // 11245 - 11249
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11250 - 11254
-                "\u008F\uDCDF\u0000\uEAFC\u0000\uEAF2\u0000\u0000\u0000\uE1E1" + // 11255 - 11259
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11260 - 11264
-                "\u0000\u0000\u0000\u0000\u0000\uE1E8\u0000\u0000\u0000\uE1E6" + // 11265 - 11269
-                "\u0000\u0000\u0000\uE1E7\u0000\u0000\u0000\u0000\u0000\u0000" + // 11270 - 11274
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11275 - 11279
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11280 - 11284
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1E9" + // 11285 - 11289
-                "\u0000\uC7F9\u0000\u0000\u0000\uB4C1\u0000\uCEFA\u0000\u0000" + // 11290 - 11294
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11295 - 11299
-                "\u0000\u0000\u0000\uCCA1\u0000\uC4D2\u0000\u0000\u0000\u0000" + // 11300 - 11304
-                "\u0000\u0000\u0000\u0000\u0000\uDEFB\u0000\uDEFD\u0000\u0000" + // 11305 - 11309
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC1B2" + // 11310 - 11314
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11315 - 11319
-                "\u0000\uDFA1\u0000\uDEF9\u0000\uCBFE\u0000\u0000\u0000\uDEE3" + // 11320 - 11324
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11325 - 11329
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC8AE" + // 11330 - 11334
-                "\u0000\u0000\u0000\u0000\u0000\uDEEF\u0000\uB8BB\u0000\u0000" + // 11335 - 11339
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBDE0" + // 11340 - 11344
-                "\u0000\u0000\u0000\uDEE5\u0000\u0000\u0000\u0000\u0000\u0000" + // 11345 - 11349
-                "\u0000\uCEAF\u0000\uB9C2\u0000\u0000\u0000\uDEF2\u0000\uB5F4" + // 11350 - 11354
-                "\u0000\uC5CF\u0000\u0000\u0000\uDED6\u0000\uDEDF\u0000\uB0AF" + // 11355 - 11359
-                "\u0000\uB1B2\u008F\uC7EB\u0000\u0000\u0000\uB2B9\u0000\u0000" + // 11360 - 11364
-                "\u0000\uDED8\u0000\uC2AC\u0000\uDECF\u0000\uDED1\u0000\uB9C1" + // 11365 - 11369
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11370 - 11374
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDEE2\u008F\uC7EE" + // 11375 - 11379
-                "\u0000\uDEDD\u0000\u0000\u008F\uC7F0\u0000\u0000\u0000\uDED5" + // 11380 - 11384
-                "\u0000\u0000\u008F\uF4C6\u0000\u0000\u0000\uE1AC\u0000\uE1AB" + // 11385 - 11389
-                "\u0000\uE1AD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11390 - 11394
-                "\u0000\u0000\u0000\u0000\u0000\uE1AE\u0000\uE1B0\u0000\uE1AF" + // 11395 - 11399
-                "\u0000\u0000\u0000\u0000\u0000\uB9F9\u0000\u0000\u0000\uE1B2" + // 11400 - 11404
-                "\u0000\u0000\u0000\uE1B1\u0000\u0000\u0000\u0000\u0000\uB4C5" + // 11405 - 11409
-                "\u0000\u0000\u0000\uBFD3\u0000\u0000\u0000\uC5BC\u0000\u0000" + // 11410 - 11414
-                "\u0000\uE1B3\u0000\uC0B8\u0000\uCDE4\u0000\u0000\u0000\u0000" + // 11415 - 11419
-                "\u0000\u0000\u0000\u0000\u0000\uDEC8\u0000\uDEC2\u0000\uDEBF" + // 11420 - 11424
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCED4\u0000\uDEC5" + // 11425 - 11429
-                "\u0000\u0000\u0000\u0000\u008F\uC7D9\u0000\u0000\u0000\uBDCA" + // 11430 - 11434
-                "\u0000\uDEC7\u0000\u0000\u0000\u0000\u0000\uDECC\u0000\u0000" + // 11435 - 11439
-                "\u0000\u0000\u0000\uC5F1\u0000\uDECA\u0000\u0000\u0000\u0000" + // 11440 - 11444
-                "\u0000\u0000\u0000\u0000\u0000\uDEC4\u0000\u0000\u0000\uB2B4" + // 11445 - 11449
-                "\u0000\uCFB4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11450 - 11454
-                "\u0000\uCBD2\u0000\u0000\u0000\uCAAA\u0000\u0000\u0000\u0000" + // 11455 - 11459
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11460 - 11464
-                "\u0000\u0000\u0000\uC0B7\u0000\u0000\u0000\uE0B2\u0000\u0000" + // 11465 - 11469
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC6C3\u0000\u0000" + // 11470 - 11474
-                "\u0000\u0000\u0000\u0000\u0000\uB8A3\u0000\uE0B3\u0000\u0000" + // 11475 - 11479
-                "\u0000\uE0F0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11480 - 11484
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11485 - 11489
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11490 - 11494
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11495 - 11499
-                "\u0000\uE0EC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0EF" + // 11500 - 11504
-                "\u0000\uB8EA\u0000\uB1CD\u0000\uE0F1\u0000\u0000\u0000\uBFF0" + // 11505 - 11509
-                "\u0000\uE0EE\u0000\uC3D3\u0000\u0000\u0000\uDDE9\u0000\u0000" + // 11510 - 11514
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDF1" + // 11515 - 11519
-                "\u0000\u0000\u0000\uDDEA\u0000\u0000\u0000\u0000\u0000\u0000" + // 11520 - 11524
-                "\u0000\u0000\u008F\uC6E3\u0000\uC2C1\u0000\u0000\u0000\uB5E2" + // 11525 - 11529
-                "\u0000\uDDF2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11530 - 11534
-                "\u0000\u0000\u0000\u0000\u0000\uB7E8\u0000\u0000\u0000\u0000" + // 11535 - 11539
-                "\u0000\uB5A5\u0000\uDDF0\u0000\u0000\u008F\uCAB3\u0000\u0000" + // 11540 - 11544
-                "\u0000\uC7B3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11545 - 11549
-                "\u0000\uC5F5\u0000\uDFF7\u0000\u0000\u0000\u0000\u0000\u0000" + // 11550 - 11554
-                "\u0000\u0000\u0000\uDFF9\u0000\u0000\u0000\uCED5\u0000\u0000" + // 11555 - 11559
-                "\u0000\uDFF6\u0000\u0000\u0000\uDFF8\u0000\uB1ED\u0000\u0000" + // 11560 - 11564
-                "\u0000\uDFF3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11565 - 11569
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3DB\u0000\uC4F5" + // 11570 - 11574
-                "\u0000\uBDC1\u0000\uB5E1\u0000\u0000\u0000\u0000\u0000\u0000" + // 11575 - 11579
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11580 - 11584
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC8C6\u0000\u0000" + // 11585 - 11589
-                "\u0000\uBCAE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11590 - 11594
-                "\u0000\uDDE8\u0000\u0000\u0000\uB4C0\u0000\u0000\u0000\u0000" + // 11595 - 11599
-                "\u0000\uB1F8\u0000\u0000\u008F\uC6E0\u0000\uC6F2\u0000\uDDE7" + // 11600 - 11604
-                "\u0000\uB9BE\u0000\uD4CC\u0000\u0000\u0000\u0000\u0000\u0000" + // 11605 - 11609
-                "\u0000\u0000\u0000\uB5A3\u0000\uDDD8\u0000\u0000\u0000\u0000" + // 11610 - 11614
-                "\u0000\u0000\u0000\u0000\u0000\uDDD9\u0000\u0000\u0000\uCAEC" + // 11615 - 11619
-                "\u0000\uCBE8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC6C7" + // 11620 - 11624
-                "\u0000\uDDDA\u0000\uC8E6\u0000\u0000\u008F\uC6B8\u0000\u0000" + // 11625 - 11629
-                "\u0000\uC8FB\u0000\u0000\u0000\u0000\u0000\uCCD3\u0000\u0000" + // 11630 - 11634
-                "\u0000\u0000\u0000\u0000\u0000\uDDDB\u0000\uDDC8\u0000\u0000" + // 11635 - 11639
-                "\u0000\u0000\u0000\uDDCA\u0000\uDDC9\u0000\u0000\u0000\uCBD8" + // 11640 - 11644
-                "\u0000\u0000\u0000\u0000\u0000\uBDDE\u0000\uBCEC\u0000\uBBC4" + // 11645 - 11649
-                "\u0000\u0000\u0000\uDDCB\u0000\u0000\u0000\u0000\u0000\u0000" + // 11650 - 11654
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDCD" + // 11655 - 11659
-                "\u0000\uBFA3\u0000\u0000\u0000\uDDCC\u0000\u0000\u0000\u0000" + // 11660 - 11664
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDCE\u0000\u0000" + // 11665 - 11669
-                "\u0000\uCCB5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11670 - 11674
-                "\u0000\uBEC7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11675 - 11679
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11680 - 11684
-                "\u0000\uB1EB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11685 - 11689
-                "\u0000\u0000\u0000\uC1B3\u0000\u0000\u0000\u0000\u0000\u0000" + // 11690 - 11694
-                "\u0000\u0000\u0000\u0000\u0000\uBEC6\u0000\u0000\u0000\u0000" + // 11695 - 11699
-                "\u0000\u0000\u0000\uEDE5\u0000\u0000\u0000\u0000\u0000\u0000" + // 11700 - 11704
-                "\u0000\uD2A1\u0000\uD1FE\u0000\u0000\u0000\u0000\u0000\u0000" + // 11705 - 11709
-                "\u0000\u0000\u0000\uEDE6\u0000\uE5F0\u0000\uEDE7\u0000\uC3A4" + // 11710 - 11714
-                "\u0000\uBFAB\u0000\uC7C0\u0000\u0000\u0000\u0000\u0000\u0000" + // 11715 - 11719
-                "\u0000\u0000\u0000\uEDE8\u0000\u0000\u0000\u0000\u0000\uCAD5" + // 11720 - 11724
-                "\u0000\uC4D4\u0000\uB9FE\u0000\u0000\u0000\u0000\u0000\uC3A9" + // 11725 - 11729
-                "\u0000\uB7E7\u0000\uBCA1\u0000\u0000\u0000\uB6D5\u0000\u0000" + // 11730 - 11734
-                "\u0000\u0000\u0000\u0000\u0000\uB2A4\u0000\u0000\u0000\u0000" + // 11735 - 11739
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11740 - 11744
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDDF\u0000\u0000" + // 11745 - 11749
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDB8\u0000\uDDB7" + // 11750 - 11754
-                "\u0000\uDDBA\u0000\uB5BD\u0000\u0000\u0000\u0000\u0000\uB6D6" + // 11755 - 11759
-                "\u0000\uB4BE\u0000\u0000\u0000\uDFC7\u0000\u0000\u0000\u0000" + // 11760 - 11764
-                "\u0000\u0000\u008F\uC9AB\u0000\uC6C2\u008F\uC9AD\u0000\u0000" + // 11765 - 11769
-                "\u0000\uDFC3\u0000\u0000\u0000\uDFC4\u0000\u0000\u0000\u0000" + // 11770 - 11774
-                "\u0000\u0000\u0000\uDFC8\u0000\u0000\u0000\uDFC6\u0000\u0000" + // 11775 - 11779
-                "\u0000\u0000\u0000\u0000\u0000\uC9CE\u0000\u0000\u0000\u0000" + // 11780 - 11784
-                "\u0000\uDFCE\u0000\u0000\u0000\uDFCB\u0000\uDFCA\u0000\u0000" + // 11785 - 11789
-                "\u0000\uDFCD\u0000\uC6D4\u0000\uDFCF\u0000\uDCFB\u0000\u0000" + // 11790 - 11794
-                "\u0000\uDCFD\u0000\uDCFE\u0000\u0000\u0000\u0000\u0000\u0000" + // 11795 - 11799
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDAC\u0000\u0000" + // 11800 - 11804
-                "\u0000\uDDA8\u0000\u0000\u0000\uDBED\u0000\u0000\u0000\u0000" + // 11805 - 11809
-                "\u0000\u0000\u0000\u0000\u0000\uDDA7\u0000\u0000\u0000\u0000" + // 11810 - 11814
-                "\u0000\u0000\u0000\u0000\u0000\uDDA6\u0000\u0000\u0000\u0000" + // 11815 - 11819
-                "\u0000\uDDA3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11820 - 11824
-                "\u0000\uB9F6\u0000\uBBE2\u0000\u0000\u0000\u0000\u0000\u0000" + // 11825 - 11829
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11830 - 11834
-                "\u0000\uE0D2\u0000\uE0D3\u0000\u0000\u0000\u0000\u0000\u0000" + // 11835 - 11839
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0D5" + // 11840 - 11844
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11845 - 11849
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCBCF\u0000\u0000" + // 11850 - 11854
-                "\u0000\u0000\u0000\uD4D3\u0000\u0000\u0000\u0000\u0000\uD4D8" + // 11855 - 11859
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uB8CE\u0000\uCAAF" + // 11860 - 11864
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD4D7" + // 11865 - 11869
-                "\u0000\uD4D1\u0000\uD4D4\u0000\uD4D6\u0000\u0000\u0000\u0000" + // 11870 - 11874
-                "\u0000\uBAA6\u0000\u0000\u0000\uDFB6\u0000\u0000\u0000\uDFB5" + // 11875 - 11879
-                "\u0000\uDFB7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11880 - 11884
-                "\u0000\u0000\u0000\uDFBA\u0000\u0000\u0000\u0000\u0000\u0000" + // 11885 - 11889
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC5C3\u0000\u0000" + // 11890 - 11894
-                "\u0000\uDFB4\u0000\u0000\u008F\uC8F8\u0000\u0000\u0000\u0000" + // 11895 - 11899
-                "\u0000\u0000\u0000\uDFB8\u0000\u0000\u0000\u0000\u0000\u0000" + // 11900 - 11904
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uCEC3\u0000\u0000" + // 11905 - 11909
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11910 - 11914
-                "\u0000\u0000\u0000\uC8E9\u0000\u0000\u0000\uE2AE\u0000\u0000" + // 11915 - 11919
-                "\u0000\u0000\u0000\u0000\u0000\uE2AF\u0000\u0000\u0000\u0000" + // 11920 - 11924
-                "\u0000\uF3E9\u0000\uE2B0\u0000\uE2B1\u0000\uE2B2\u0000\u0000" + // 11925 - 11929
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBBAE\u0000\uC3C9" + // 11930 - 11934
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDCFC\u0000\u0000" + // 11935 - 11939
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11940 - 11944
-                "\u0000\u0000\u0000\u0000\u0000\uDCFA\u0000\uB8E9\u0000\u0000" + // 11945 - 11949
-                "\u0000\uDCF9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11950 - 11954
-                "\u0000\u0000\u0000\u0000\u0000\uDDA1\u0000\u0000\u0000\u0000" + // 11955 - 11959
-                "\u0000\u0000\u0000\u0000\u0000\uDBD8\u0000\u0000\u0000\u0000" + // 11960 - 11964
-                "\u0000\u0000\u0000\uE8FC\u0000\u0000\u0000\u0000\u0000\u0000" + // 11965 - 11969
-                "\u0000\u0000\u0000\uCFCF\u0000\uC6A2\u0000\uC9F3\u008F\uD9D1" + // 11970 - 11974
-                "\u0000\u0000\u0000\uE9AB\u0000\u0000\u0000\u0000\u0000\u0000" + // 11975 - 11979
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11980 - 11984
-                "\u0000\u0000\u0000\uE9B1\u0000\u0000\u0000\u0000\u0000\u0000" + // 11985 - 11989
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9B2\u0000\u0000" + // 11990 - 11994
-                "\u0000\uB5F9\u0000\uC9BA\u0000\u0000\u0000\u0000\u0000\u0000" + // 11995 - 11999
-                "\u0000\uBCBF\u0000\u0000\u0000\u0000\u0000\uB9F7\u0000\u0000" + // 12000 - 12004
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCFB3" + // 12005 - 12009
-                "\u0000\u0000\u0000\uDEF4\u0000\u0000\u0000\uDFA2\u0000\uB1E9" + // 12010 - 12014
-                "\u0000\uC1E6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12015 - 12019
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC2CD" + // 12020 - 12024
-                "\u0000\u0000\u0000\u0000\u0000\uF1DA\u0000\u0000\u0000\u0000" + // 12025 - 12029
-                "\u0000\u0000\u0000\u0000\u0000\uC6AD\u0000\u0000\u0000\u0000" + // 12030 - 12034
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1DB" + // 12035 - 12039
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12040 - 12044
-                "\u0000\u0000\u0000\uF1E0\u0000\u0000\u0000\uDEF3\u0000\u0000" + // 12045 - 12049
-                "\u0000\u0000\u0000\u0000\u0000\uB4C3\u0000\u0000\u0000\u0000" + // 12050 - 12054
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12055 - 12059
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC8AE" + // 12060 - 12064
-                "\u0000\u0000\u0000\u0000\u0000\uB7E9\u0000\u0000\u0000\u0000" + // 12065 - 12069
-                "\u0000\u0000\u0000\uDFAF\u0000\u0000\u0000\u0000\u0000\uDFAA" + // 12070 - 12074
-                "\u0000\uC0F8\u0000\u0000\u0000\u0000\u0000\uB3E3\u0000\uDCD5" + // 12075 - 12079
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12080 - 12084
-                "\u0000\u0000\u0000\uDCD2\u0000\u0000\u0000\u0000\u0000\u0000" + // 12085 - 12089
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDCC6\u0000\u0000" + // 12090 - 12094
-                "\u0000\u0000\u0000\uDCE3\u0000\uDCC5\u0000\u0000\u0000\uDCD8" + // 12095 - 12099
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12100 - 12104
-                "\u0000\u0000\u0000\uDCD0\u0000\u0000\u0000\u0000\u0000\uDCCB" + // 12105 - 12109
-                "\u0000\uDCC8\u0000\uC6EF\u0000\uDCC0\u0000\uC6EA\u0000\u0000" + // 12110 - 12114
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uC4CC" + // 12115 - 12119
-                "\u0000\u0000\u0000\uDCC4\u0000\uDCB7\u0000\u0000\u0000\uB6C8" + // 12120 - 12124
-                "\u0000\uDCBA\u0000\uBDDD\u0000\u0000\u0000\u0000\u0000\u0000" + // 12125 - 12129
-                "\u0000\uC7E0\u0000\uDCBC\u0000\uB6CB\u0000\u0000\u0000\uDCB4" + // 12130 - 12134
-                "\u0000\uDCB6\u0000\uDCB3\u0000\u0000\u0000\u0000\u0000\uCFB0" + // 12135 - 12139
-                "\u0000\uB3DA\u0000\uDCB9\u0000\u0000\u0000\uCEAE\u0000\u0000" + // 12140 - 12144
-                "\u0000\u0000\u0000\uBEF4\u0000\uC0F5\u0000\u0000\u0000\u0000" + // 12145 - 12149
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12150 - 12154
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12155 - 12159
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12160 - 12164
-                "\u0000\u0000\u0000\u0000\u0000\uDEB6\u0000\uDEB4\u0000\u0000" + // 12165 - 12169
-                "\u0000\uC9CD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7ED" + // 12170 - 12174
-                "\u0000\u0000\u0000\uEBC4\u0000\u0000\u0000\u0000\u0000\u0000" + // 12175 - 12179
-                "\u0000\u0000\u0000\uCBAC\u0000\u0000\u0000\u0000\u0000\uC0DF" + // 12180 - 12184
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB5F6\u0000\u0000" + // 12185 - 12189
-                "\u0000\uCCF5\u0000\uC1CA\u0000\u0000\u0000\uEBC5\u008F\uDDD4" + // 12190 - 12194
-                "\u0000\u0000\u0000\u0000\u0000\uBFC7\u0000\uC3F0\u0000\uBEDA" + // 12195 - 12199
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBCF1\u0000\u0000" + // 12200 - 12204
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBFF6\u0000\u0000" + // 12205 - 12209
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12210 - 12214
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC2AD" + // 12215 - 12219
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12220 - 12224
-                "\u0000\u0000\u0000\uECE7\u0000\u0000\u0000\u0000\u0000\u0000" + // 12225 - 12229
-                "\u0000\uECE6\u0000\u0000\u0000\uC3B8\u0000\u0000\u0000\u0000" + // 12230 - 12234
-                "\u0000\uDECB\u0000\u0000\u0000\uDEC0\u0000\u0000\u0000\uDEC6" + // 12235 - 12239
-                "\u0000\u0000\u0000\uDECD\u0000\uB0FC\u0000\uDEC3\u0000\u0000" + // 12240 - 12244
-                "\u0000\uDECE\u0000\u0000\u0000\u0000\u0000\uBFBC\u008F\uF4C0" + // 12245 - 12249
-                "\u0000\uBDDF\u0000\u0000\u0000\uCAA5\u0000\u0000\u0000\uBAAE" + // 12250 - 12254
-                "\u008F\uF4BF\u0000\uDEBB\u0000\uDEC9\u0000\uC5BA\u008F\uC7E6" + // 12255 - 12259
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB3D3\u0000\u0000" + // 12260 - 12264
-                "\u0000\uEDCA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBADC" + // 12265 - 12269
-                "\u0000\uEDC9\u0000\u0000\u0000\uEDD2\u0000\u0000\u0000\u0000" + // 12270 - 12274
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEDCC\u0000\uEDCE" + // 12275 - 12279
-                "\u0000\uCAE5\u0000\uEDCB\u0000\u0000\u0000\u0000\u0000\u0000" + // 12280 - 12284
-                "\u0000\uEDCD\u0000\u0000\u0000\uEDD1\u0000\uEDCF\u0000\uB5B1" + // 12285 - 12289
-                "\u0000\u0000\u0000\uEDD0\u0000\uCFD0\u0000\uDBF6\u0000\u0000" + // 12290 - 12294
-                "\u0000\u0000\u0000\uDCA6\u0000\uB0D8\u0000\u0000\u0000\u0000" + // 12295 - 12299
-                "\u0000\uDBF8\u0000\u0000\u0000\u0000\u0000\uCCBA\u0000\uDBFD" + // 12300 - 12304
-                "\u0000\uBFA2\u0000\uC4C7\u0000\uDBF3\u0000\u0000\u0000\u0000" + // 12305 - 12309
-                "\u0000\uDCA5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12310 - 12314
-                "\u0000\u0000\u0000\u0000\u0000\uBFFA\u0000\uDCAF\u0000\uB3F1" + // 12315 - 12319
-                "\u0000\uB8A1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8B4" + // 12320 - 12324
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB0F1" + // 12325 - 12329
-                "\u0000\u0000\u0000\u0000\u0000\uE8AB\u0000\u0000\u0000\u0000" + // 12330 - 12334
-                "\u0000\u0000\u0000\uE8AA\u0000\u0000\u0000\uE8A5\u0000\uE8A4" + // 12335 - 12339
-                "\u0000\u0000\u0000\uE8A2\u0000\uE8A1\u0000\uC3E3\u0000\u0000" + // 12340 - 12344
-                "\u0000\uC2FB\u0000\uE8A7\u0000\u0000\u0000\u0000\u0000\u0000" + // 12345 - 12349
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8DE\u0000\u0000" + // 12350 - 12354
-                "\u008F\uD8D1\u0000\uCDD5\u0000\u0000\u0000\u0000\u0000\u0000" + // 12355 - 12359
-                "\u0000\u0000\u0000\uCEAA\u0000\u0000\u0000\u0000\u0000\u0000" + // 12360 - 12364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12365 - 12369
-                "\u0000\uC3F8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB3EB" + // 12370 - 12374
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3AE" + // 12375 - 12379
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3AF" + // 12380 - 12384
-                "\u0000\u0000\u0000\uF3AA\u0000\u0000\u0000\u0000\u0000\u0000" + // 12385 - 12389
-                "\u0000\uF2F4\u0000\u0000\u0000\u0000\u0000\uF3B0\u0000\u0000" + // 12390 - 12394
-                "\u0000\uC4E1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3B4" + // 12395 - 12399
-                "\u0000\u0000\u0000\uF3B5\u0000\uF3B3\u0000\u0000\u0000\u0000" + // 12400 - 12404
-                "\u0000\u0000\u0000\u0000\u0000\uB2AB\u0000\u0000\u0000\u0000" + // 12405 - 12409
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12410 - 12414
-                "\u0000\uF3D4\u0000\uB5D0\u0000\uF3D5\u0000\uF3D6\u0000\uF3D7" + // 12415 - 12419
-                "\u008F\uF4F8\u0000\uB9F5\u0000\u0000\u0000\uF3D8\u0000\u0000" + // 12420 - 12424
-                "\u0000\u0000\u0000\u0000\u0000\uE0D4\u0000\uCCDB\u0000\u0000" + // 12425 - 12429
-                "\u0000\uC2E3\u0000\uF3D9\u0000\uF3DB\u0000\uF3DA\u0000\u0000" + // 12430 - 12434
-                "\u0000\uCBA2\u0000\uC7C8\u0000\uB5E3\u0000\u0000\u0000\uC5A5" + // 12435 - 12439
-                "\u0000\u0000\u0000\u0000\u0000\uC3ED\u0000\u0000\u0000\uDEA5" + // 12440 - 12444
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDEA3" + // 12445 - 12449
-                "\u0000\uC2D9\u0000\uDDF6\u0000\u0000\u0000\uB1CB\u0000\u0000" + // 12450 - 12454
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12455 - 12459
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12460 - 12464
-                "\u0000\u0000\u0000\uDEF5\u0000\u0000\u0000\u0000\u0000\u0000" + // 12465 - 12469
-                "\u0000\u0000\u0000\uDFD3\u0000\u0000\u0000\u0000\u0000\u0000" + // 12470 - 12474
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC6E7\u0000\u0000" + // 12475 - 12479
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12480 - 12484
-                "\u0000\u0000\u0000\uE2DE\u0000\u0000\u0000\u0000\u0000\u0000" + // 12485 - 12489
-                "\u0000\u0000\u0000\u0000\u0000\uE2DF\u0000\u0000\u0000\u0000" + // 12490 - 12494
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12495 - 12499
-                "\u0000\u0000\u0000\u0000\u0000\uE2E0\u0000\u0000\u0000\u0000" + // 12500 - 12504
-                "\u0000\uE2E1\u0000\uCCB7\u0000\uE2E2\u0000\u0000\u0000\u0000" + // 12505 - 12509
-                "\u0000\u0000\u0000\uE9CF\u0000\uC7C2\u0000\u0000\u0000\u0000" + // 12510 - 12514
-                "\u0000\u0000\u0000\u0000\u0000\uE9D0\u0000\uE9D1\u0000\uE9DB" + // 12515 - 12519
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9D5\u0000\uE9D8" + // 12520 - 12524
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12525 - 12529
-                "\u0000\uE9D4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12530 - 12534
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12535 - 12539
-                "\u0000\uC2AA\u0000\u0000\u0000\u0000\u0000\uBBAB\u0000\uD9D2" + // 12540 - 12544
-                "\u0000\u0000\u0000\uD9D4\u0000\uD9D0\u0000\u0000\u0000\u0000" + // 12545 - 12549
-                "\u0000\u0000\u0000\u0000\u0000\uCAE1\u0000\u0000\u0000\uC4BD" + // 12550 - 12554
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC1DC" + // 12555 - 12559
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB2F2\u0000\u0000" + // 12560 - 12564
-                "\u0000\u0000\u0000\uBFA8\u0000\uEBBB\u0000\u0000\u0000\u0000" + // 12565 - 12569
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12570 - 12574
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12575 - 12579
-                "\u0000\uEBBC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBBD" + // 12580 - 12584
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12585 - 12589
-                "\u0000\u0000\u0000\u0000\u008F\uE4A6\u0000\u0000\u0000\u0000" + // 12590 - 12594
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC1AC\u0000\u0000" + // 12595 - 12599
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12600 - 12604
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEEF9\u0000\u0000" + // 12605 - 12609
-                "\u0000\uEEF8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12610 - 12614
-                "\u0000\u0000\u0000\u0000\u0000\uB7D9\u0000\u0000\u0000\u0000" + // 12615 - 12619
-                "\u0000\u0000\u0000\u0000\u0000\uEBFE\u0000\uECA2\u0000\u0000" + // 12620 - 12624
-                "\u0000\u0000\u0000\uECA3\u0000\uB5C4\u0000\uE6C1\u0000\uBEF9" + // 12625 - 12629
-                "\u0000\u0000\u0000\uECA4\u0000\u0000\u0000\u0000\u0000\uB8EE" + // 12630 - 12634
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12635 - 12639
-                "\u0000\uECA5\u0000\u0000\u008F\uF4DF\u0000\uDCAB\u0000\uDBFC" + // 12640 - 12644
-                "\u0000\u0000\u0000\uDCA8\u0000\u0000\u0000\u0000\u0000\u0000" + // 12645 - 12649
-                "\u0000\uDCA2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12650 - 12654
-                "\u0000\u0000\u0000\u0000\u0000\uBFB9\u0000\uDCAC\u0000\u0000" + // 12655 - 12659
-                "\u0000\u0000\u0000\uC0B3\u0000\u0000\u0000\u0000\u0000\u0000" + // 12660 - 12664
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDCAA\u0000\uB4BD" + // 12665 - 12669
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12670 - 12674
-                "\u0000\uE4A6\u0000\uC9AE\u0000\u0000\u0000\uC8A6\u0000\uC5F9" + // 12675 - 12679
-                "\u0000\u0000\u0000\uB6DA\u0000\uE4A5\u0000\uE4A3\u0000\u0000" + // 12680 - 12684
-                "\u0000\uC8B5\u0000\uE3FE\u0000\uC3DE\u0000\uC5FB\u0000\u0000" + // 12685 - 12689
-                "\u0000\uC5FA\u0000\u0000\u0000\uBAF6\u0000\u0000\u0000\u0000" + // 12690 - 12694
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE4B8" + // 12695 - 12699
-                "\u0000\u0000\u0000\u0000\u0000\uE9A2\u0000\u0000\u0000\u0000" + // 12700 - 12704
-                "\u0000\u0000\u0000\uE9C3\u0000\uC1C9\u0000\u0000\u0000\u0000" + // 12705 - 12709
-                "\u0000\uE9BE\u0000\uE9C0\u0000\u0000\u0000\u0000\u0000\u0000" + // 12710 - 12714
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9BF" + // 12715 - 12719
-                "\u0000\u0000\u0000\u0000\u0000\uDDB1\u0000\uDDA2\u0000\u0000" + // 12720 - 12724
-                "\u0000\u0000\u0000\uE9C5\u0000\u0000\u0000\u0000\u0000\u0000" + // 12725 - 12729
-                "\u0000\u0000\u0000\u0000\u0000\uEAA4\u0000\u0000\u008F\uF4DC" + // 12730 - 12734
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12735 - 12739
-                "\u0000\uEAB8\u0000\uEABC\u0000\uEAB7\u0000\u0000\u0000\uEABE" + // 12740 - 12744
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAC0\u0000\uEABF" + // 12745 - 12749
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12750 - 12754
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCFB9\u0000\uDBF1" + // 12755 - 12759
-                "\u0000\u0000\u0000\uBEBF\u0000\u0000\u0000\u0000\u0000\u0000" + // 12760 - 12764
-                "\u0000\uD4ED\u0000\uB8E8\u0000\uCDFC\u0000\u0000\u0000\u0000" + // 12765 - 12769
-                "\u0000\u0000\u0000\u0000\u0000\uDBE8\u0000\u0000\u0000\uC4F4" + // 12770 - 12774
-                "\u0000\uB3A3\u0000\uBAAD\u0000\u0000\u0000\uDBE0\u0000\u0000" + // 12775 - 12779
-                "\u0000\uDBF0\u0000\uB3E1\u0000\u0000\u0000\u0000\u0000\uDBEE" + // 12780 - 12784
-                "\u0000\uDBF2\u0000\u0000\u0000\uC5EE\u0000\u0000\u0000\u0000" + // 12785 - 12789
-                "\u0000\u0000\u0000\uE6FC\u0000\u0000\u0000\u0000\u0000\u0000" + // 12790 - 12794
-                "\u0000\u0000\u0000\u0000\u0000\uE6FB\u0000\u0000\u0000\u0000" + // 12795 - 12799
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6FD\u0000\u0000" + // 12800 - 12804
-                "\u0000\uC3A6\u0000\u0000\u0000\uC7BE\u0000\u0000\u0000\u0000" + // 12805 - 12809
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC4B1\u0000\u0000" + // 12810 - 12814
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7A3\u0000\u0000" + // 12815 - 12819
-                "\u0000\uB6B7\u0000\u0000\u0000\u0000\u0000\uDDF5\u0000\uDDFA" + // 12820 - 12824
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC0F4\u0000\uC7F1" + // 12825 - 12829
-                "\u0000\u0000\u0000\uC8E7\u0000\u0000\u0000\u0000\u0000\u0000" + // 12830 - 12834
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDF7\u0000\u0000" + // 12835 - 12839
-                "\u0000\uCBA1\u0000\u0000\u0000\uDDF9\u0000\u0000\u0000\uDEA4" + // 12840 - 12844
-                "\u008F\uC7A1\u0000\uDEA2\u0000\u0000\u0000\uDDFB\u0000\u0000" + // 12845 - 12849
-                "\u0000\u0000\u0000\uEAA5\u0000\u0000\u0000\u0000\u0000\u0000" + // 12850 - 12854
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12855 - 12859
-                "\u0000\uEAAE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAA8" + // 12860 - 12864
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAB0\u0000\u0000" + // 12865 - 12869
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12870 - 12874
-                "\u0000\uCDE6\u0000\uEAB3\u0000\u0000\u0000\uEAAA\u0000\u0000" + // 12875 - 12879
-                "\u0000\u0000\u0000\uEADB\u0000\u0000\u0000\uEADD\u0000\u0000" + // 12880 - 12884
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12885 - 12889
-                "\u0000\uC8EF\u0000\u0000\u0000\u0000\u0000\uEAD9\u0000\u0000" + // 12890 - 12894
-                "\u0000\uEADE\u0000\uEAE0\u0000\u0000\u0000\u0000\u0000\uB8D3" + // 12895 - 12899
-                "\u0000\uEAD4\u0000\u0000\u0000\uB0C1\u0000\u0000\u0000\u0000" + // 12900 - 12904
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12905 - 12909
-                "\u0000\uEADF\u0000\uDBDC\u0000\uB7E5\u0000\uB7CB\u0000\uC5ED" + // 12910 - 12914
-                "\u008F\uC3D8\u0000\u0000\u0000\uDBDA\u0000\u0000\u0000\uB0C6" + // 12915 - 12919
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDBDD" + // 12920 - 12924
-                "\u0000\uDBDF\u0000\u0000\u0000\uB6CD\u0000\uB7AC\u008F\uC3C9" + // 12925 - 12929
-                "\u0000\uB4BC\u0000\uB5CB\u0000\u0000\u0000\u0000\u0000\u0000" + // 12930 - 12934
-                "\u0000\u0000\u0000\uDBE2\u0000\u0000\u0000\u0000\u0000\uBAF9" + // 12935 - 12939
-                "\u0000\uCBF1\u0000\u0000\u0000\uBBB7\u008F\uC3B9\u0000\uC2C8" + // 12940 - 12944
-                "\u0000\u0000\u0000\u0000\u0000\uCAC1\u0000\u0000\u0000\uDBD6" + // 12945 - 12949
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC9A2\u0000\u0000" + // 12950 - 12954
-                "\u0000\u0000\u0000\u0000\u0000\uDBD5\u0000\uC7F0\u0000\uCBBF" + // 12955 - 12959
-                "\u0000\uB4BB\u0000\u0000\u0000\uC0F7\u0000\uBDC0\u0000\u0000" + // 12960 - 12964
-                "\u0000\u0000\u0000\u0000\u0000\uC4D3\u0000\u0000\u0000\uCDAE" + // 12965 - 12969
-                "\u0000\u0000\u0000\u0000\u0000\uDBD1\u0000\uDBD0\u0000\u0000" + // 12970 - 12974
-                "\u0000\uCBD7\u0000\uC2F4\u0000\u0000\u0000\u0000\u0000\u0000" + // 12975 - 12979
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12980 - 12984
-                "\u0000\uCBF7\u0000\u0000\u0000\u0000\u0000\uDDFC\u0000\u0000" + // 12985 - 12989
-                "\u0000\u0000\u0000\uDDFD\u0000\u0000\u0000\uB2CF\u0000\u0000" + // 12990 - 12994
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCAA8\u0000\uCCFD" + // 12995 - 12999
-                "\u0000\uDEA1\u0000\uBCA3\u0000\uBEC2\u0000\uDDF8\u0000\uDDFE" + // 13000 - 13004
-                "\u0000\uB1E8\u0000\uCFC8\u0000\uDBC6\u0000\uBFF5\u0000\u0000" + // 13005 - 13009
-                "\u0000\u0000\u0000\u0000\u0000\uDBC5\u0000\u0000\u0000\u0000" + // 13010 - 13014
-                "\u0000\uDBC0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13015 - 13019
-                "\u0000\u0000\u0000\uB8CF\u0000\u0000\u0000\u0000\u0000\u0000" + // 13020 - 13024
-                "\u0000\uDBCC\u0000\uDBCA\u0000\u0000\u0000\uB2CD\u0000\uDBC8" + // 13025 - 13029
-                "\u0000\uDBCE\u0000\uDBD4\u0000\u0000\u008F\uC3B5\u0000\u0000" + // 13030 - 13034
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uCBAE\u0000\uE0D0" + // 13035 - 13039
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0CF\u0000\uC3F6" + // 13040 - 13044
-                "\u0000\uC7AD\u0000\u0000\u0000\u0000\u0000\uB8A5\u0000\uE0CE" + // 13045 - 13049
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0CD" + // 13050 - 13054
-                "\u0000\u0000\u0000\uCDB1\u0000\uCDB2\u0000\u0000\u0000\u0000" + // 13055 - 13059
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0D1" + // 13060 - 13064
-                "\u0000\uB1EE\u0000\uDBBA\u0000\uBEF2\u0000\uCCDD\u0000\uDBBC" + // 13065 - 13069
-                "\u0000\uDBBD\u0000\uCDE8\u008F\uC3A1\u0000\u0000\u0000\u0000" + // 13070 - 13074
-                "\u0000\u0000\u0000\uDBC2\u0000\u0000\u0000\u0000\u0000\uB9BA" + // 13075 - 13079
-                "\u0000\u0000\u0000\uC7D5\u0000\uDBBF\u0000\uC5EC\u0000\uDADE" + // 13080 - 13084
-                "\u0000\uDAE2\u0000\u0000\u0000\uB5CF\u0000\u0000\u0000\uC7C7" + // 13085 - 13089
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDBC1" + // 13090 - 13094
-                "\u0000\u0000\u0000\uBEBE\u0000\uC8C4\u0000\uBAC7\u0000\u0000" + // 13095 - 13099
-                "\u0000\u0000\u0000\uD0F2\u0000\u0000\u0000\u0000\u0000\u0000" + // 13100 - 13104
-                "\u0000\u0000\u0000\uB7EE\u0000\uCDAD\u0000\u0000\u0000\uCAFE" + // 13105 - 13109
-                "\u0000\u0000\u0000\uC9FE\u008F\uC2F0\u0000\uDBAC\u0000\u0000" + // 13110 - 13114
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBAF3\u0000\uC4BF" + // 13115 - 13119
-                "\u0000\uDBAD\u0000\uCFAF\u0000\u0000\u0000\u0000\u0000\u0000" + // 13120 - 13124
-                "\u0000\uCBBE\u0000\u0000\u0000\uC4AB\u0000\uDBAE\u0000\uB4FC" + // 13125 - 13129
-                "\u0000\uDBA5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13130 - 13134
-                "\u0000\u0000\u0000\uDBA7\u0000\u0000\u0000\u0000\u0000\uDBA8" + // 13135 - 13139
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13140 - 13144
-                "\u0000\u0000\u0000\uDBA9\u0000\u0000\u0000\uB6CA\u0000\uB1C8" + // 13145 - 13149
-                "\u0000\uB9B9\u0000\uDBAA\u0000\u0000\u0000\uDBAB\u0000\uBDF1" + // 13150 - 13154
-                "\u0000\uC1E2\u008F\uC2ED\u008F\uC2BF\u0000\uD2D8\u0000\uC1BE" + // 13155 - 13159
-                "\u0000\uC1BD\u0000\uC2D8\u008F\uC2D7\u0000\u0000\u0000\uC4AA" + // 13160 - 13164
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCEF1\u0000\u0000" + // 13165 - 13169
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBBC3\u0000\u0000" + // 13170 - 13174
-                "\u0000\u0000\u0000\uCAEB\u0000\u0000\u0000\u0000\u0000\u0000" + // 13175 - 13179
-                "\u008F\uC2DB\u0000\u0000\u0000\uCBBD\u0000\u0000\u0000\u0000" + // 13180 - 13184
-                "\u0000\u0000\u0000\uDBA2\u0000\uDAFB\u0000\u0000\u0000\u0000" + // 13185 - 13189
-                "\u0000\uDAFE\u0000\u0000\u0000\uDAFD\u008F\uC2DE\u0000\uB1C7" + // 13190 - 13194
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uC2A5\u0000\uBDD5" + // 13195 - 13199
-                "\u0000\u0000\u0000\uCBE6\u0000\uBAF2\u0000\u0000\u0000\u0000" + // 13200 - 13204
-                "\u0000\u0000\u0000\u0000\u0000\uBEBC\u008F\uC2AB\u0000\uC0A7" + // 13205 - 13209
-                "\u0000\u0000\u008F\uC2AD\u0000\u0000\u0000\u0000\u0000\uDAE5" + // 13210 - 13214
-                "\u0000\uDAE3\u0000\uDAE4\u0000\u0000\u0000\u0000\u0000\u0000" + // 13215 - 13219
-                "\u0000\u0000\u008F\uF4B6\u0000\uC3EB\u0000\u0000\u0000\u0000" + // 13220 - 13224
-                "\u0000\uDBA6\u008F\uC1F5\u0000\u0000\u0000\uB9B7\u0000\uDAE0" + // 13225 - 13229
-                "\u0000\u0000\u0000\u0000\u0000\uBAAB\u0000\uBEBA\u0000\u0000" + // 13230 - 13234
-                "\u008F\uC1F8\u0000\uDADF\u0000\u0000\u0000\uBEBB\u0000\u0000" + // 13235 - 13239
-                "\u0000\uCCC0\u0000\uBAAA\u0000\u0000\u0000\u0000\u0000\u0000" + // 13240 - 13244
-                "\u0000\uB0D7\u0000\uC0CE\u008F\uC1FC\u0000\u0000\u0000\u0000" + // 13245 - 13249
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDAE6" + // 13250 - 13254
-                "\u0000\u0000\u008F\uC2A1\u0000\uC0B1\u0000\uDADB\u0000\uDADC" + // 13255 - 13259
-                "\u0000\uB4FB\u0000\u0000\u0000\u0000\u0000\uC6FC\u0000\uC3B6" + // 13260 - 13264
-                "\u0000\uB5EC\u0000\uBBDD\u0000\uC1E1\u0000\u0000\u0000\u0000" + // 13265 - 13269
-                "\u0000\uBDDC\u0000\uB0B0\u0000\u0000\u0000\u0000\u0000\u0000" + // 13270 - 13274
-                "\u0000\uDADD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13275 - 13279
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB2A2" + // 13280 - 13284
-                "\u0000\uDAE1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13285 - 13289
-                "\u0000\uDFEF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDFE7" + // 13290 - 13294
-                "\u0000\u0000\u0000\uB7A7\u0000\u0000\u0000\u0000\u0000\u0000" + // 13295 - 13299
-                "\u0000\u0000\u0000\uDFED\u0000\u0000\u0000\u0000\u0000\u0000" + // 13300 - 13304
-                "\u0000\u0000\u0000\uCDD0\u0000\uDFF0\u0000\u0000\u0000\u0000" + // 13305 - 13309
-                "\u0000\u0000\u0000\uF4A6\u0000\u0000\u0000\u0000\u0000\u0000" + // 13310 - 13314
-                "\u0000\u0000\u0000\u0000\u0000\uBDCF\u0000\uDAB5\u0000\u0000" + // 13315 - 13319
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDAB9\u0000\u0000" + // 13320 - 13324
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13325 - 13329
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13330 - 13334
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13335 - 13339
-                "\u0000\u0000\u0000\u0000\u0000\uDAB7\u0000\u0000\u0000\u0000" + // 13340 - 13344
-                "\u0000\u0000\u0000\uDAB8\u0000\uD9F0\u0000\u0000\u0000\u0000" + // 13345 - 13349
-                "\u0000\uE6B0\u0000\uE6B2\u0000\u0000\u0000\uCDE5\u0000\uE6B1" + // 13350 - 13354
-                "\u0000\uE6B4\u0000\uE6B3\u0000\u0000\u0000\uCDD3\u0000\u0000" + // 13355 - 13359
-                "\u0000\uE6B5\u0000\u0000\u0000\uC8FE\u0000\u0000\u0000\u0000" + // 13360 - 13364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6B6\u0000\u0000" + // 13365 - 13369
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6B9" + // 13370 - 13374
-                "\u0000\u0000\u0000\u0000\u0000\uE6B8\u0000\uE6B7\u0000\u0000" + // 13375 - 13379
-                "\u0000\uDDEE\u0000\uDDEB\u0000\uCDE0\u0000\u0000\u0000\u0000" + // 13380 - 13384
-                "\u008F\uC6EA\u0000\u0000\u0000\uC4C0\u0000\u0000\u0000\u0000" + // 13385 - 13389
-                "\u0000\u0000\u0000\uC6D9\u0000\uDDEC\u0000\u0000\u0000\u0000" + // 13390 - 13394
-                "\u0000\uDDF4\u0000\u0000\u0000\uDDF3\u0000\uB7A3\u0000\u0000" + // 13395 - 13399
-                "\u0000\u0000\u0000\uB2AD\u0000\u0000\u0000\u0000\u0000\uBABB" + // 13400 - 13404
-                "\u0000\uDDED\u0000\uDDEF\u0000\u0000\u0000\u0000\u0000\u0000" + // 13405 - 13409
-                "\u0000\u0000\u0000\uE1B7\u0000\u0000\u0000\uE1BC\u0000\u0000" + // 13410 - 13414
-                "\u0000\u0000\u0000\uE1BA\u0000\uE1B9\u0000\uDAC2\u0000\uB3A6" + // 13415 - 13419
-                "\u0000\uE1B8\u0000\u0000\u0000\uB0DA\u0000\u0000\u0000\uC8AA" + // 13420 - 13424
-                "\u0000\u0000\u0000\u0000\u0000\uC8CA\u0000\u0000\u0000\u0000" + // 13425 - 13429
-                "\u0000\u0000\u0000\u0000\u0000\uCEB1\u0000\uE1BD\u0000\uE1BB" + // 13430 - 13434
-                "\u0000\uC3DC\u0000\uC0A6\u0000\u0000\u0000\u0000\u0000\uEAA7" + // 13435 - 13439
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13440 - 13444
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13445 - 13449
-                "\u0000\uCDBB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13450 - 13454
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13455 - 13459
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13460 - 13464
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAA6\u0000\uDAAB" + // 13465 - 13469
-                "\u0000\uDAAC\u0000\uC5A7\u0000\uDAAE\u0000\u0000\u0000\u0000" + // 13470 - 13474
-                "\u0000\uBBA4\u0000\uDAA9\u0000\u0000\u0000\u0000\u0000\u0000" + // 13475 - 13479
-                "\u0000\u0000\u0000\uB5BC\u0000\u0000\u0000\u0000\u0000\uDAAF" + // 13480 - 13484
-                "\u0000\u0000\u0000\uDAA8\u0000\uDAB3\u0000\u0000\u0000\uDAB2" + // 13485 - 13489
-                "\u0000\u0000\u0000\uDAB1\u0000\u0000\u0000\u0000\u0000\u0000" + // 13490 - 13494
-                "\u0000\uDAB4\u0000\u0000\u0000\u0000\u0000\uDAB6\u0000\uBEF1" + // 13495 - 13499
-                "\u0000\u0000\u0000\uDDC4\u0000\uBBDF\u0000\uC0B5\u0000\uBAA1" + // 13500 - 13504
-                "\u0000\u0000\u0000\uC9F0\u0000\u0000\u0000\u0000\u0000\uCAE2" + // 13505 - 13509
-                "\u0000\uCFC4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13510 - 13514
-                "\u0000\uBBF5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBAD0" + // 13515 - 13519
-                "\u0000\uCEF2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDC5" + // 13520 - 13524
-                "\u0000\uDDC6\u0000\u0000\u0000\uBBE0\u0000\u0000\u0000\u0000" + // 13525 - 13529
-                "\u0000\u0000\u0000\uDDC7\u008F\uC0E4\u0000\u0000\u0000\u0000" + // 13530 - 13534
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9F4" + // 13535 - 13539
-                "\u0000\u0000\u0000\uCBE0\u0000\u0000\u0000\u0000\u0000\u0000" + // 13540 - 13544
-                "\u0000\u0000\u0000\u0000\u0000\uD9F5\u0000\u0000\u0000\u0000" + // 13545 - 13549
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9F6" + // 13550 - 13554
-                "\u0000\u0000\u0000\uCCCE\u0000\u0000\u0000\uC0A2\u0000\u0000" + // 13555 - 13559
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC0B6" + // 13560 - 13564
-                "\u0000\u0000\u0000\uB3E9\u0000\uBAD1\u0000\uBEC4\u0000\uDEBD" + // 13565 - 13569
-                "\u0000\uBDC2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13570 - 13574
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7CC\u0000\u0000" + // 13575 - 13579
-                "\u0000\uDEBC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDED2" + // 13580 - 13584
-                "\u0000\uBDED\u0000\uB8BA\u0000\u0000\u0000\uDEE1\u0000\u0000" + // 13585 - 13589
-                "\u0000\uDEDB\u0000\uD9E3\u0000\u0000\u0000\u0000\u0000\uC2B7" + // 13590 - 13594
-                "\u0000\uD9E9\u0000\u0000\u0000\uD9E4\u0000\u0000\u0000\u0000" + // 13595 - 13599
-                "\u0000\uD9E6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13600 - 13604
-                "\u0000\u0000\u0000\uC9C1\u0000\uC4F3\u0000\u0000\u0000\uD9E7" + // 13605 - 13609
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDAC\u0000\u0000" + // 13610 - 13614
-                "\u0000\u0000\u0000\u0000\u0000\uCDC8\u0000\uB4B9\u0000\u0000" + // 13615 - 13619
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDCF\u0000\u0000" + // 13620 - 13624
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDD0" + // 13625 - 13629
-                "\u0000\uDDD1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDD2" + // 13630 - 13634
-                "\u0000\u0000\u0000\uDDD4\u0000\uDDD3\u0000\uDDD5\u0000\uB2A5" + // 13635 - 13639
-                "\u0000\uC3CA\u0000\u0000\u0000\uDDD6\u0000\u0000\u0000\u0000" + // 13640 - 13644
-                "\u0000\uBBA6\u0000\uB3CC\u0000\uDDD7\u0000\u0000\u0000\u0000" + // 13645 - 13649
-                "\u0000\uC5C2\u0000\uCEAB\u0000\uBACE\u0000\uC3B5\u0000\uD9DA" + // 13650 - 13654
-                "\u0000\u0000\u0000\uC0DC\u0000\u0000\u0000\uB9B5\u0000\uBFE4" + // 13655 - 13659
-                "\u0000\uB1E6\u0000\uC1BC\u0000\uD9D8\u0000\uB5C5\u0000\u0000" + // 13660 - 13664
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7C7" + // 13665 - 13669
-                "\u0000\u0000\u0000\uC4CF\u0000\uD9DE\u0000\u0000\u0000\u0000" + // 13670 - 13674
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC1DF\u0000\u0000" + // 13675 - 13679
-                "\u0000\u0000\u0000\uD9E1\u0000\u0000\u0000\uDCEA\u0000\uDDA5" + // 13680 - 13684
-                "\u0000\uDDA4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13685 - 13689
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13690 - 13694
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDAA" + // 13695 - 13699
-                "\u0000\u0000\u0000\uCFA6\u0000\u0000\u0000\u0000\u0000\u0000" + // 13700 - 13704
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDAD\u0000\uB6FB" + // 13705 - 13709
-                "\u0000\u0000\u0000\u0000\u0000\uDDA9\u0000\uDDAB\u0000\uD9D7" + // 13710 - 13714
-                "\u0000\u0000\u0000\u0000\u0000\uC1DD\u0000\u0000\u0000\u0000" + // 13715 - 13719
-                "\u0000\u0000\u0000\u0000\u0000\uBCF8\u0000\uD9DC\u0000\u0000" + // 13720 - 13724
-                "\u0000\u0000\u0000\uBEB8\u0000\u0000\u0000\uD9D6\u0000\uD9DB" + // 13725 - 13729
-                "\u0000\u0000\u0000\u0000\u0000\uC7D3\u0000\u0000\u0000\u0000" + // 13730 - 13734
-                "\u0000\u0000\u0000\uD9D5\u0000\u0000\u0000\uB7A1\u0000\u0000" + // 13735 - 13739
-                "\u0000\u0000\u0000\uB3DD\u0000\u0000\u0000\u0000\u0000\u0000" + // 13740 - 13744
-                "\u0000\uD9DD\u0000\uB5F2\u0000\uB3C8\u0000\u0000\u0000\u0000" + // 13745 - 13749
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13750 - 13754
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB3E7\u0000\uBFA1" + // 13755 - 13759
-                "\u0000\uD9C9\u0000\uD9CE\u0000\u0000\u0000\uD9CA\u0000\u0000" + // 13760 - 13764
-                "\u0000\uB7FD\u0000\u0000\u0000\uD9CF\u0000\uBBA2\u0000\uB9E9" + // 13765 - 13769
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13770 - 13774
-                "\u0000\u0000\u0000\uBDA6\u0000\uD9BD\u0000\uB5BB\u0000\u0000" + // 13775 - 13779
-                "\u0000\uD9B0\u0000\uD9B7\u0000\uBEB6\u0000\u0000\u0000\u0000" + // 13780 - 13784
-                "\u0000\u0000\u0000\u0000\u0000\uD9B1\u0000\uC7C4\u0000\u0000" + // 13785 - 13789
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13790 - 13794
-                "\u0000\uCDDE\u0000\uD9B3\u0000\uD9B4\u0000\uD9B8\u0000\uC5EA" + // 13795 - 13799
-                "\u0000\uD9B5\u0000\uB9B3\u0000\uC0DE\u0000\u0000\u0000\u0000" + // 13800 - 13804
-                "\u0000\uD9C6\u0000\uC8B4\u0000\u0000\u0000\uC2F2\u0000\u0000" + // 13805 - 13809
-                "\u0000\uC6CB\u0000\uDCF3\u0000\u0000\u0000\u0000\u0000\u0000" + // 13810 - 13814
-                "\u0000\uDCF5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13815 - 13819
-                "\u008F\uF4BD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13820 - 13824
-                "\u0000\u0000\u0000\u0000\u0000\uDCEF\u008F\uC5B5\u0000\u0000" + // 13825 - 13829
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDCF1\u0000\u0000" + // 13830 - 13834
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uC5B6" + // 13835 - 13839
-                "\u0000\uB3E0\u0000\uD9AD\u0000\u0000\u0000\u0000\u0000\uD9AB" + // 13840 - 13844
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9AE" + // 13845 - 13849
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13850 - 13854
-                "\u0000\uCAB1\u0000\u0000\u0000\u0000\u0000\uB0B7\u0000\u0000" + // 13855 - 13859
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC9DE\u0000\u0000" + // 13860 - 13864
-                "\u0000\u0000\u0000\uC8E3\u0000\u0000\u0000\u0000\u0000\uD9AF" + // 13865 - 13869
-                "\u0000\u0000\u0000\uD9B2\u0000\uBEB5\u0000\uBDEA\u0000\uD9A8" + // 13870 - 13874
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13875 - 13879
-                "\u0000\uC0F0\u0000\uEEBD\u0000\uC8E2\u0000\u0000\u0000\uBCEA" + // 13880 - 13884
-                "\u0000\u0000\u0000\uBACD\u0000\uD9A9\u0000\u0000\u0000\u0000" + // 13885 - 13889
-                "\u0000\u0000\u0000\u0000\u0000\uC2C7\u0000\u0000\u0000\uCAA7" + // 13890 - 13894
-                "\u0000\u0000\u0000\u0000\u0000\uC2F1\u0000\u0000\u0000\u0000" + // 13895 - 13899
-                "\u0000\uD9AC\u0000\u0000\u0000\u0000\u0000\uD9AA\u0000\u0000" + // 13900 - 13904
-                "\u0000\uDCC9\u0000\u0000\u0000\uDCD1\u0000\u0000\u0000\u0000" + // 13905 - 13909
-                "\u0000\u0000\u0000\uF4A2\u0000\u0000\u0000\u0000\u0000\uDCCE" + // 13910 - 13914
-                "\u0000\uB9BD\u0000\uC4C8\u0000\uC1E4\u0000\uDCCC\u0000\u0000" + // 13915 - 13919
-                "\u0000\uDCC7\u0000\u0000\u0000\u0000\u0000\uDCCA\u0000\u0000" + // 13920 - 13924
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDCD\u0000\uCBEA" + // 13925 - 13929
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDCCF\u0000\uDCD9" + // 13930 - 13934
-                "\u0000\u0000\u0000\uCCCF\u0000\uDCF8\u0000\uDCEB\u0000\u0000" + // 13935 - 13939
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB8A2" + // 13940 - 13944
-                "\u0000\uB2A3\u0000\uB3DF\u0000\u0000\u0000\u0000\u0000\uDCD3" + // 13945 - 13949
-                "\u0000\u0000\u008F\uC4FD\u0000\u0000\u0000\u0000\u0000\u0000" + // 13950 - 13954
-                "\u0000\u0000\u0000\uBEC1\u0000\uDCF0\u0000\u0000\u0000\uDCF7" + // 13955 - 13959
-                "\u0000\uBCF9\u0000\uB3F2\u0000\u0000\u0000\u0000\u0000\uC3AE" + // 13960 - 13964
-                "\u0000\u0000\u0000\u0000\u0000\uE9C4\u0000\u0000\u0000\u0000" + // 13965 - 13969
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13970 - 13974
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDF6\u0000\u0000" + // 13975 - 13979
-                "\u0000\uE2BC\u0000\uE9C6\u0000\u0000\u0000\u0000\u0000\u0000" + // 13980 - 13984
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13985 - 13989
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13990 - 13994
-                "\u0000\u0000\u0000\uE9C7\u0000\uD8F8\u0000\u0000\u0000\u0000" + // 13995 - 13999
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14000 - 14004
-                "\u0000\uD8F9\u0000\uD8FA\u0000\uCAEA\u0000\u0000\u0000\uD8FC" + // 14005 - 14009
-                "\u0000\uD8FB\u0000\uBDBF\u0000\u0000\u0000\uC0AE\u0000\uB2E6" + // 14010 - 14014
-                "\u0000\uB2FC\u008F\uBFA8\u0000\uD8FD\u0000\u0000\u0000\uB0BF" + // 14015 - 14019
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC0CC\u0000\uD8FE" + // 14020 - 14024
-                "\u0000\u0000\u0000\uECC3\u0000\uD9A1\u0000\uB7E1\u008F\uF4B4" + // 14025 - 14029
-                "\u0000\uD8BB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14030 - 14034
-                "\u0000\u0000\u0000\uD8C3\u0000\uD8C2\u0000\u0000\u0000\u0000" + // 14035 - 14039
-                "\u0000\u0000\u0000\uD8C7\u0000\u0000\u0000\u0000\u0000\u0000" + // 14040 - 14044
-                "\u008F\uBEC9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD8C8" + // 14045 - 14049
-                "\u0000\u0000\u0000\u0000\u008F\uBECD\u0000\u0000\u0000\u0000" + // 14050 - 14054
-                "\u0000\u0000\u0000\u0000\u0000\uD8C6\u0000\uD8C9\u0000\uD8C1" + // 14055 - 14059
-                "\u0000\uD8C5\u0000\uD8B7\u0000\uBDA5\u0000\u0000\u0000\uD8BA" + // 14060 - 14064
-                "\u0000\u0000\u0000\u0000\u0000\uD8B4\u0000\u0000\u0000\uCCFC" + // 14065 - 14069
-                "\u0000\uCCFB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD8BE" + // 14070 - 14074
-                "\u0000\uD8BF\u0000\uB0D5\u0000\u0000\u008F\uBEBD\u0000\u0000" + // 14075 - 14079
-                "\u0000\u0000\u0000\u0000\u0000\uD8B3\u0000\u0000\u0000\u0000" + // 14080 - 14084
-                "\u0000\u0000\u0000\u0000\u0000\uB6F2\u0000\uB0A6\u0000\u0000" + // 14085 - 14089
-                "\u0000\u0000\u0000\u0000\u0000\uB4B6\u0000\uD8AA\u0000\uD8A8" + // 14090 - 14094
-                "\u0000\u0000\u0000\uC1DA\u0000\u0000\u0000\u0000\u0000\u0000" + // 14095 - 14099
-                "\u0000\uD7FC\u0000\uBBB4\u0000\u0000\u0000\u0000\u0000\u0000" + // 14100 - 14104
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC2C6" + // 14105 - 14109
-                "\u0000\uD8BD\u008F\uBEB3\u0000\uC1DB\u0000\uD8B8\u0000\u0000" + // 14110 - 14114
-                "\u0000\uD8B5\u0000\uD8B6\u0000\u0000\u0000\uBCE6\u0000\uD8B9" + // 14115 - 14119
-                "\u0000\uD8BC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14120 - 14124
-                "\u0000\uCDF3\u0000\uDDB0\u0000\u0000\u0000\u0000\u0000\u0000" + // 14125 - 14129
-                "\u0000\u0000\u0000\uDCDE\u0000\u0000\u0000\u0000\u0000\u0000" + // 14130 - 14134
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDB3" + // 14135 - 14139
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDB4\u0000\u0000" + // 14140 - 14144
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14145 - 14149
-                "\u0000\uB1B5\u0000\u0000\u0000\uDDB6\u0000\uCDAA\u0000\u0000" + // 14150 - 14154
-                "\u0000\u0000\u0000\uB4B5\u0000\u0000\u0000\u0000\u0000\uB1D9" + // 14155 - 14159
-                "\u0000\uD8A6\u0000\u0000\u0000\uC7BA\u0000\uB0AD\u0000\u0000" + // 14160 - 14164
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14165 - 14169
-                "\u0000\u0000\u0000\uC8E1\u0000\uD7DC\u0000\uD8AC\u0000\uD8B0" + // 14170 - 14174
-                "\u0000\uCCE5\u0000\u0000\u0000\uD8A9\u0000\u0000\u0000\u0000" + // 14175 - 14179
-                "\u0000\u0000\u0000\uC5E9\u0000\uD8AE\u0000\u0000\u0000\u0000" + // 14180 - 14184
-                "\u0000\uBBBC\u0000\uE5ED\u0000\u0000\u0000\u0000\u0000\u0000" + // 14185 - 14189
-                "\u0000\u0000\u0000\uE5F2\u0000\uE5F3\u008F\uD4E3\u0000\u0000" + // 14190 - 14194
-                "\u0000\uE5F4\u0000\u0000\u0000\uE5FA\u0000\uC5BB\u0000\uE5F6" + // 14195 - 14199
-                "\u0000\u0000\u0000\uE5F5\u0000\uE5F7\u0000\uE5F8\u0000\u0000" + // 14200 - 14204
-                "\u0000\uE5F9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14205 - 14209
-                "\u0000\uE5FB\u0000\uE5FC\u0000\u0000\u0000\u0000\u0000\u0000" + // 14210 - 14214
-                "\u0000\uF2B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14215 - 14219
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14220 - 14224
-                "\u0000\u0000\u0000\uB0BE\u008F\uEADB\u0000\u0000\u0000\uF2BA" + // 14225 - 14229
-                "\u0000\uCAAB\u0000\uF2B8\u0000\u0000\u0000\u0000\u0000\uF2BB" + // 14230 - 14234
-                "\u0000\uF2BC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14235 - 14239
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF2BD\u0000\uD7DF" + // 14240 - 14244
-                "\u0000\u0000\u0000\uB2FA\u0000\uD7F3\u0000\uD7F5\u0000\uC3D1" + // 14245 - 14249
-                "\u0000\u0000\u0000\u0000\u0000\uBAA8\u0000\uB2B8\u0000\uD7ED" + // 14250 - 14254
-                "\u0000\uD7F8\u0000\uD7F7\u0000\uB6B3\u0000\u0000\u0000\uC2A9" + // 14255 - 14259
-                "\u0000\uB3E6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14260 - 14264
-                "\u0000\uB7C3\u0000\u0000\u0000\uD7EE\u0000\u0000\u0000\u0000" + // 14265 - 14269
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14270 - 14274
-                "\u0000\u0000\u0000\u0000\u008F\uF4B9\u0000\u0000\u0000\u0000" + // 14275 - 14279
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14280 - 14284
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14285 - 14289
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14290 - 14294
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14295 - 14299
-                "\u0000\uA2E2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14300 - 14304
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14305 - 14309
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCEB6" + // 14310 - 14314
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14315 - 14319
-                "\u0000\u0000\u0000\u0000\u0000\uF3FC\u0000\u0000\u0000\u0000" + // 14320 - 14324
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3FD" + // 14325 - 14329
-                "\u0000\uE3D4\u0000\u0000\u0000\u0000\u0000\uBDAA\u0000\uB8BE" + // 14330 - 14334
-                "\u0000\uC1C8\u0000\uE5A5\u0000\uE5AB\u0000\u0000\u008F\uD3E1" + // 14335 - 14339
-                "\u0000\u0000\u0000\u0000\u0000\uE5A6\u0000\uB7D0\u0000\u0000" + // 14340 - 14344
-                "\u0000\uE5AE\u0000\uE5B2\u0000\uB7EB\u0000\u0000\u0000\u0000" + // 14345 - 14349
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5AD\u0000\u0000" + // 14350 - 14354
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5B6\u008F\uD3E8" + // 14355 - 14359
-                "\u0000\u0000\u0000\uB9CA\u0000\u0000\u0000\uDCC3\u0000\uB3B5" + // 14360 - 14364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14365 - 14369
-                "\u0000\u0000\u0000\u0000\u0000\uBAE7\u0000\u0000\u0000\u0000" + // 14370 - 14374
-                "\u0000\u0000\u0000\uB1DD\u0000\u0000\u0000\u0000\u0000\uDCD4" + // 14375 - 14379
-                "\u0000\u0000\u0000\u0000\u0000\uCFB1\u0000\uDCD7\u0000\u0000" + // 14380 - 14384
-                "\u0000\u0000\u008F\uC4D9\u0000\u0000\u0000\u0000\u0000\uBFBA" + // 14385 - 14389
-                "\u0000\uDCD6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8C4" + // 14390 - 14394
-                "\u0000\uC6BA\u0000\u0000\u0000\u0000\u0000\uE8C9\u0000\u0000" + // 14395 - 14399
-                "\u0000\u0000\u0000\uCDE9\u0000\uE8C6\u0000\uCBA8\u0000\uE8CC" + // 14400 - 14404
-                "\u0000\uB0E0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14405 - 14409
-                "\u0000\uE8C0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14410 - 14414
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14415 - 14419
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCBA9\u0000\u0000" + // 14420 - 14424
-                "\u0000\uCFA1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14425 - 14429
-                "\u0000\u0000\u0000\uE8F3\u0000\u0000\u0000\u0000\u0000\u0000" + // 14430 - 14434
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8FA" + // 14435 - 14439
-                "\u0000\u0000\u0000\u0000\u0000\uE8F2\u0000\uC2D5\u0000\uD7DE" + // 14440 - 14444
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB5DE\u0000\uD7E8" + // 14445 - 14449
-                "\u0000\uC0AD\u0000\uB1E5\u0000\uD7E2\u0000\uB2F8\u0000\uD7E7" + // 14450 - 14454
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB6B1\u0000\u0000" + // 14455 - 14459
-                "\u0000\uD7E4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14460 - 14464
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD7EA" + // 14465 - 14469
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14470 - 14474
-                "\u0000\uDBC7\u0000\u0000\u0000\uC8FA\u0000\u0000\u0000\uDBBE" + // 14475 - 14479
-                "\u0000\u0000\u0000\uDBC4\u0000\uDBC3\u0000\u0000\u0000\u0000" + // 14480 - 14484
-                "\u0000\u0000\u0000\uC0CF\u0000\u0000\u0000\u0000\u0000\u0000" + // 14485 - 14489
-                "\u0000\u0000\u0000\uCBED\u0000\u0000\u0000\uCED3\u0000\u0000" + // 14490 - 14494
-                "\u0000\u0000\u0000\uCBE7\u0000\u0000\u0000\uB2CC\u0000\uBBDE" + // 14495 - 14499
-                "\u0000\u0000\u0000\u0000\u0000\uE3F3\u0000\u0000\u0000\uE4A2" + // 14500 - 14504
-                "\u0000\u0000\u0000\uE3F6\u0000\u0000\u0000\uB5E8\u0000\u0000" + // 14505 - 14509
-                "\u0000\uE3F5\u0000\uE4A4\u0000\u0000\u0000\u0000\u0000\u0000" + // 14510 - 14514
-                "\u0000\uE3F4\u0000\u0000\u0000\uBED0\u0000\u0000\u0000\u0000" + // 14515 - 14519
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE3F8" + // 14520 - 14524
-                "\u0000\uE3F9\u0000\u0000\u0000\uC5AB\u0000\u0000\u0000\u0000" + // 14525 - 14529
-                "\u0000\uE3FA\u0000\u0000\u0000\uDCB1\u0000\uDBFA\u0000\uDCB0" + // 14530 - 14534
-                "\u0000\u0000\u0000\uDCA9\u0000\uDBFB\u0000\u0000\u0000\uDCAD" + // 14535 - 14539
-                "\u0000\u0000\u0000\uDCAE\u0000\u0000\u0000\u0000\u0000\u0000" + // 14540 - 14544
-                "\u0000\u0000\u0000\u0000\u0000\uDCBF\u0000\u0000\u0000\u0000" + // 14545 - 14549
-                "\u0000\u0000\u0000\uC6CE\u0000\u0000\u0000\uDCA4\u0000\u0000" + // 14550 - 14554
-                "\u0000\u0000\u0000\uDCBB\u0000\u0000\u0000\u0000\u0000\u0000" + // 14555 - 14559
-                "\u0000\uDCBD\u0000\u0000\u0000\uC4D8\u0000\uC3E9\u0000\u0000" + // 14560 - 14564
-                "\u0000\u0000\u0000\u0000\u0000\uD7D8\u0000\u0000\u0000\u0000" + // 14565 - 14569
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB2F7" + // 14570 - 14574
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD8AD" + // 14575 - 14579
-                "\u0000\uD7DA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7B0" + // 14580 - 14584
-                "\u0000\u0000\u0000\u0000\u0000\uD7D9\u0000\u0000\u0000\u0000" + // 14585 - 14589
-                "\u0000\uD7D7\u0000\u0000\u0000\uB9FA\u0000\u0000\u0000\uD7DD" + // 14590 - 14594
-                "\u0000\uD7D2\u0000\uB8E6\u0000\u0000\u0000\u0000\u0000\u0000" + // 14595 - 14599
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD7D3\u0000\uC9FC" + // 14600 - 14604
-                "\u0000\uBDDB\u0000\u0000\u0000\u0000\u0000\uD7D4\u0000\uC8F9" + // 14605 - 14609
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC6C1" + // 14610 - 14614
-                "\u0000\uC4A7\u0000\u0000\u0000\u0000\u008F\uF4B2\u0000\u0000" + // 14615 - 14619
-                "\u0000\uC5B0\u0000\u0000\u0000\u0000\u0000\uD7D5\u0000\uB5AB" + // 14620 - 14624
-                "\u0000\u0000\u0000\u0000\u0000\uCCF0\u0000\uE2E3\u0000\u0000" + // 14625 - 14629
-                "\u0000\uC3CE\u0000\u0000\u0000\uC7EA\u0000\u0000\u0000\uB6EB" + // 14630 - 14634
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC3BB\u0000\uE2E4" + // 14635 - 14639
-                "\u0000\uB6BA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC0D0" + // 14640 - 14644
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14645 - 14649
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2E5\u0000\u0000" + // 14650 - 14654
-                "\u0000\u0000\u0000\u0000\u0000\uEFBF\u0000\u0000\u0000\u0000" + // 14655 - 14659
-                "\u0000\u0000\u0000\uEFC0\u0000\u0000\u0000\u0000\u0000\u0000" + // 14660 - 14664
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14665 - 14669
-                "\u0000\uEFC1\u0000\u0000\u0000\u0000\u0000\uEFBE\u0000\uEFBD" + // 14670 - 14674
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBEE2\u0000\uC6AA" + // 14675 - 14679
-                "\u0000\uEFBC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14680 - 14684
-                "\u0000\u0000\u0000\uC0A8\u0000\uD1D9\u0000\uBDDA\u0000\u0000" + // 14685 - 14689
-                "\u0000\u0000\u0000\uD1DA\u0000\u0000\u0000\uC3FC\u0000\uCEBF" + // 14690 - 14694
-                "\u0000\uC5E0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14695 - 14699
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD2C5" + // 14700 - 14704
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD1DB" + // 14705 - 14709
-                "\u0000\uF4A5\u0000\uB6C5\u0000\u0000\u0000\u0000\u0000\uBABD" + // 14710 - 14714
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14715 - 14719
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2E6" + // 14720 - 14724
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14725 - 14729
-                "\u0000\uE2E7\u0000\u0000\u0000\uB8A6\u0000\uBAD5\u0000\u0000" + // 14730 - 14734
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14735 - 14739
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA2F6" + // 14740 - 14744
-                "\u0000\u0000\u0000\u0000\u0000\uA2F5\u0000\u0000\u0000\uA2F4" + // 14745 - 14749
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14750 - 14754
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14755 - 14759
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14760 - 14764
-                "\u0000\u0000\u0000\uA2FE\u0000\u0000\u0000\u0000\u0000\u0000" + // 14765 - 14769
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14770 - 14774
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14775 - 14779
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA2AB\u0000\uA2AC" + // 14780 - 14784
-                "\u0000\uA2AA\u0000\uA2AD\u0000\u0000\u0000\u0000\u0000\u0000" + // 14785 - 14789
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14790 - 14794
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBAC5" + // 14795 - 14799
-                "\u0000\uCDC3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14800 - 14804
-                "\u0000\uD0FE\u0000\uD1A3\u0000\uD0FD\u0000\uBAC4\u0000\u0000" + // 14805 - 14809
-                "\u0000\uBDFD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14810 - 14814
-                "\u0000\u0000\u0000\u0000\u0000\uB7B9\u0000\u0000\u0000\uCEC2" + // 14815 - 14819
-                "\u0000\u0000\u0000\uDBEC\u0000\u0000\u0000\uC7DF\u0000\u0000" + // 14820 - 14824
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14825 - 14829
-                "\u0000\u0000\u0000\uDBF4\u0000\uDBF4\u0000\uDBE7\u0000\u0000" + // 14830 - 14834
-                "\u0000\u0000\u0000\u0000\u0000\uB0B4\u0000\uDBE9\u0000\u0000" + // 14835 - 14839
-                "\u0000\u0000\u0000\uB9BC\u0000\u0000\u0000\u0000\u0000\u0000" + // 14840 - 14844
-                "\u0000\uDBEB\u0000\u0000\u0000\uDBEA\u0000\u0000\u0000\uDBE6" + // 14845 - 14849
-                "\u0000\uB1FD\u0000\uC0AC\u0000\uD7C9\u0000\uD7C8\u0000\uB7C2" + // 14850 - 14854
-                "\u0000\uC2D4\u0000\u0000\u0000\uD7CE\u0000\uD7CC\u0000\u0000" + // 14855 - 14859
-                "\u0000\uD7CB\u0000\uCEA7\u0000\uB8E5\u0000\u0000\u0000\u0000" + // 14860 - 14864
-                "\u0000\u0000\u0000\uBDF9\u0000\uD7CD\u0000\uC5CC\u0000\uBDBE" + // 14865 - 14869
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC6C0\u0000\uD7D1" + // 14870 - 14874
-                "\u0000\uD7D0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14875 - 14879
-                "\u0000\uD7CF\u0000\u0000\u008F\uF4BA\u0000\uC4CE\u0000\uC6CA" + // 14880 - 14884
-                "\u0000\uB1C9\u0000\uBAF4\u0000\u0000\u0000\u0000\u0000\u0000" + // 14885 - 14889
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14890 - 14894
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14895 - 14899
-                "\u0000\uC0F2\u0000\u0000\u0000\u0000\u0000\uC0B4\u0000\uB7AA" + // 14900 - 14904
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14905 - 14909
-                "\u0000\u0000\u0000\uDBD9\u0000\u0000\u0000\uB9BB\u0000\uB3FC" + // 14910 - 14914
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14915 - 14919
-                "\u0000\u0000\u0000\uDBDB\u0000\uB3F4\u0000\uDBE1\u0000\u0000" + // 14920 - 14924
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14925 - 14929
-                "\u0000\uDBDE\u0000\u0000\u0000\uC0F3\u0000\u0000\u0000\u0000" + // 14930 - 14934
-                "\u0000\u0000\u0000\uB3CB\u0000\uBAAC\u0000\u0000\u0000\u0000" + // 14935 - 14939
-                "\u0000\uB3CA\u0000\uBACF\u0000\u0000\u0000\u0000\u0000\uE8DC" + // 14940 - 14944
-                "\u0000\u0000\u0000\uE8D7\u0000\u0000\u0000\u0000\u0000\u0000" + // 14945 - 14949
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBED5\u0000\u0000" + // 14950 - 14954
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBDAF\u0000\u0000" + // 14955 - 14959
-                "\u0000\u0000\u0000\u0000\u0000\uBCAC\u0000\u0000\u0000\u0000" + // 14960 - 14964
-                "\u0000\u0000\u0000\u0000\u0000\uCCD8\u0000\u0000\u0000\u0000" + // 14965 - 14969
-                "\u0000\uC9C7\u0000\u0000\u0000\u0000\u0000\uE8E7\u0000\uBEB3" + // 14970 - 14974
-                "\u0000\uD7A7\u0000\uD7A6\u0000\uD7A2\u0000\u0000\u0000\u0000" + // 14975 - 14979
-                "\u0000\u0000\u0000\u0000\u0000\uD7A8\u0000\uD7A9\u0000\u0000" + // 14980 - 14984
-                "\u0000\u0000\u0000\uD7AA\u0000\u0000\u0000\u0000\u0000\u0000" + // 14985 - 14989
-                "\u0000\uD7AD\u0000\uD7AB\u0000\u0000\u0000\uD7AC\u0000\uD7AE" + // 14990 - 14994
-                "\u0000\u0000\u0000\uB1E4\u0000\uC4EE\u0000\uD7AF\u0000\u0000"   // 14995 - 14999
-                ;
-
-            index2b =
-                "\u0000\uB7FA\u0000\uB2F6\u0000\uC7B6\u0000\u0000\u0000\uD7B0" + // 15000 - 15004
-                "\u0000\uC6FB\u0000\uD6F9\u0000\u0000\u0000\u0000\u0000\u0000" + // 15005 - 15009
-                "\u0000\u0000\u0000\u0000\u0000\uC5D9\u0000\uBAC2\u0000\u0000" + // 15010 - 15014
-                "\u0000\u0000\u0000\u0000\u0000\uB8CB\u0000\u0000\u0000\uC4ED" + // 15015 - 15019
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15020 - 15024
-                "\u0000\u0000\u0000\u0000\u0000\uB0C3\u0000\uBDEE\u0000\uB9AF" + // 15025 - 15029
-                "\u0000\uCDC7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15030 - 15034
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9CB\u0000\uB0A7" + // 15035 - 15039
-                "\u0000\u0000\u0000\u0000\u0000\uBAC3\u0000\u0000\u0000\u0000" + // 15040 - 15044
-                "\u0000\u0000\u0000\uBFB6\u0000\u0000\u0000\u0000\u0000\u0000" + // 15045 - 15049
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15050 - 15054
-                "\u0000\u0000\u0000\u0000\u0000\uC4F2\u0000\u0000\u0000\u0000" + // 15055 - 15059
-                "\u0000\uC8D4\u0000\uD9D1\u0000\uC1DE\u0000\uD6EC\u0000\u0000" + // 15060 - 15064
-                "\u0000\u0000\u0000\uD6EB\u0000\uD6EA\u0000\uC9FD\u0000\u0000" + // 15065 - 15069
-                "\u0000\uD6F3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15070 - 15074
-                "\u0000\uCBDA\u0000\u0000\u0000\uD6ED\u0000\u0000\u0000\u0000" + // 15075 - 15079
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD6EF\u0000\uCBEB" + // 15080 - 15084
-                "\u0000\u0000\u0000\uD6EE\u0000\u0000\u0000\u0000\u0000\u0000" + // 15085 - 15089
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD6F0" + // 15090 - 15094
-                "\u0000\uC6BD\u0000\uB6AE\u0000\u0000\u0000\u0000\u0000\u0000" + // 15095 - 15099
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB2E5\u0000\uD6B6" + // 15100 - 15104
-                "\u0000\uD6BB\u0000\u0000\u0000\u0000\u0000\uD6B9\u0000\u0000" + // 15105 - 15109
-                "\u0000\uCAF7\u0000\uCAF6\u0000\u0000\u0000\u0000\u0000\u0000" + // 15110 - 15114
-                "\u0000\u0000\u008F\uF4AF\u0000\uC5E7\u0000\u0000\u0000\u0000" + // 15115 - 15119
-                "\u0000\u0000\u0000\uD6B8\u0000\uBDD4\u0000\u0000\u0000\uD6B7" + // 15120 - 15124
-                "\u0000\u0000\u0000\u0000\u0000\uCEC5\u0000\u0000\u0000\u0000" + // 15125 - 15129
-                "\u0000\u0000\u0000\uE1F4\u0000\uE1F2\u0000\uE1F3\u0000\u0000" + // 15130 - 15134
-                "\u0000\u0000\u0000\u0000\u0000\uB4E2\u0000\u0000\u0000\u0000" + // 15135 - 15139
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCCFE\u0000\u0000" + // 15140 - 15144
-                "\u0000\u0000\u0000\u0000\u0000\uCACA\u0000\u0000\u0000\uE1F6" + // 15145 - 15149
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1F5\u0000\u0000" + // 15150 - 15154
-                "\u0000\u0000\u0000\u0000\u0000\uC6E1\u0000\u0000\u0000\u0000" + // 15155 - 15159
-                "\u0000\uCBAE\u0000\u0000\u0000\uEEB7\u0000\u0000\u0000\uBCD9" + // 15160 - 15164
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEEB8" + // 15165 - 15169
-                "\u0000\u0000\u0000\uEEB9\u0000\u0000\u0000\u0000\u0000\u0000" + // 15170 - 15174
-                "\u0000\uEEBA\u0000\u0000\u0000\u0000\u0000\uC5A1\u0000\u0000" + // 15175 - 15179
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15180 - 15184
-                "\u0000\u0000\u0000\uF3A9\u0000\u0000\u0000\uF3A8\u0000\u0000" + // 15185 - 15189
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7DC" + // 15190 - 15194
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15195 - 15199
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15200 - 15204
-                "\u0000\uF3AD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15205 - 15209
-                "\u0000\u0000\u0000\uC4BB\u0000\u0000\u0000\uF2EA\u0000\u0000" + // 15210 - 15214
-                "\u0000\uC8B7\u0000\u0000\u0000\uF2EF\u0000\uF2EB\u0000\u0000" + // 15215 - 15219
-                "\u0000\u0000\u0000\u0000\u0000\uF2EC\u0000\u0000\u0000\u0000" + // 15220 - 15224
-                "\u0000\uCBB1\u0000\uCCC4\u0000\u0000\u0000\uC6D0\u0000\u0000" + // 15225 - 15229
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15230 - 15234
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5B5\u0000\u0000" + // 15235 - 15239
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5B7" + // 15240 - 15244
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5B4\u0000\u0000" + // 15245 - 15249
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7D1" + // 15250 - 15254
-                "\u0000\uC2B3\u0000\uE5B9\u0000\uC1EE\u0000\u0000\u0000\u0000" + // 15255 - 15259
-                "\u0000\uE5C6\u0000\uC5CB\u0000\uBCC8\u0000\uBCC8\u0000\u0000" + // 15260 - 15264
-                "\u0000\uC1D8\u0000\uCDFA\u0000\u0000\u0000\u0000\u0000\u0000" + // 15265 - 15269
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD6A4\u0000\u0000" + // 15270 - 15274
-                "\u0000\uD6A5\u0000\uC6D6\u0000\u0000\u0000\uBBB3\u0000\u0000" + // 15275 - 15279
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD6A7\u0000\u0000" + // 15280 - 15284
-                "\u0000\u0000\u0000\uD6A8\u0000\u0000\u0000\u0000\u0000\u0000" + // 15285 - 15289
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC3F5\u0000\uC2ED" + // 15290 - 15294
-                "\u008F\uF4C2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC0A5" + // 15295 - 15299
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDFD0\u0000\u0000" + // 15300 - 15304
-                "\u0000\uDFD2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15305 - 15309
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15310 - 15314
-                "\u0000\u0000\u0000\u0000\u0000\uDFD1\u0000\u0000\u0000\uDBB5" + // 15315 - 15319
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDBB8" + // 15320 - 15324
-                "\u0000\u0000\u0000\u0000\u0000\uBFF9\u0000\u0000\u0000\u0000" + // 15325 - 15329
-                "\u0000\u0000\u0000\u0000\u0000\uCDFB\u0000\uB0C9\u0000\uBAE0" + // 15330 - 15334
-                "\u0000\uC2BC\u0000\u0000\u0000\uBCDD\u0000\u0000\u0000\u0000" + // 15335 - 15339
-                "\u0000\uBEF3\u0000\u0000\u0000\u0000\u0000\uDBBB\u0000\u0000" + // 15340 - 15344
-                "\u0000\u0000\u0000\uC5CE\u0000\u0000\u0000\uDBB9\u0000\uC2AB" + // 15345 - 15349
-                "\u0000\uB6C9\u0000\uD5FB\u0000\u0000\u0000\u0000\u0000\u0000" + // 15350 - 15354
-                "\u0000\uB5EF\u0000\uD5FC\u0000\u0000\u0000\uB6FE\u0000\u0000" + // 15355 - 15359
-                "\u0000\uC6CF\u0000\uB2B0\u0000\u0000\u0000\uBBD3\u0000\uD5FD" + // 15360 - 15364
-                "\u0000\uD6A2\u0000\uD6A1\u0000\uB6FD\u0000\u0000\u0000\uD5FE" + // 15365 - 15369
-                "\u0000\u0000\u0000\uC5B8\u0000\u0000\u0000\u0000\u0000\u0000" + // 15370 - 15374
-                "\u0000\u0000\u0000\u0000\u0000\uD6A2\u0000\u0000\u0000\u0000" + // 15375 - 15379
-                "\u0000\uC2B0\u0000\u0000\u0000\uB6C7\u0000\u0000\u0000\uDAF3" + // 15380 - 15384
-                "\u0000\uDAF7\u0000\u0000\u0000\u0000\u0000\uB2CB\u0000\uDAF4" + // 15385 - 15389
-                "\u0000\uDAF6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15390 - 15394
-                "\u0000\uDAF5\u0000\u0000\u0000\u0000\u0000\uBDEB\u0000\u0000" + // 15395 - 15399
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC3C8\u0000\uB0C5" + // 15400 - 15404
-                "\u0000\uDAF8\u008F\uC2D2\u0000\u0000\u0000\u0000\u0000\u0000" + // 15405 - 15409
-                "\u0000\uDAF9\u0000\u0000\u0000\u0000\u0000\uE7E0\u0000\u0000" + // 15410 - 15414
-                "\u0000\uE7DF\u0000\u0000\u0000\uB4CF\u0000\u0000\u0000\uE7E1" + // 15415 - 15419
-                "\u0000\u0000\u0000\uE7E2\u0000\uE7E3\u0000\u0000\u0000\u0000" + // 15420 - 15424
-                "\u0000\uBAB1\u0000\uCEC9\u0000\u0000\u0000\uE7E5\u0000\uBFA7" + // 15425 - 15429
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB1F0\u0000\uE7E6" + // 15430 - 15434
-                "\u0000\uE7E7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15435 - 15439
-                "\u0000\u0000\u0000\uE7E8\u0000\u0000\u0000\uDAFA\u0000\u0000" + // 15440 - 15444
-                "\u0000\u0000\u0000\uDBA1\u0000\u0000\u0000\u0000\u0000\uC6DE" + // 15445 - 15449
-                "\u0000\u0000\u0000\uDAFC\u0000\u0000\u0000\u0000\u0000\u0000" + // 15450 - 15454
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15455 - 15459
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDBA3" + // 15460 - 15464
-                "\u0000\u0000\u0000\u0000\u0000\uBDEC\u0000\uDBA4\u0000\u0000" + // 15465 - 15469
-                "\u0000\uCDCB\u0000\uC7F8\u0000\u0000\u0000\u0000\u008F\uF4D7" + // 15470 - 15474
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15475 - 15479
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15480 - 15484
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15485 - 15489
-                "\u0000\u0000\u0000\uE8BA\u0000\u0000\u0000\uE8BB\u0000\u0000" + // 15490 - 15494
-                "\u0000\uB2D9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB2AE" + // 15495 - 15499
-                "\u0000\uE8B8\u0000\u0000\u0000\u0000\u008F\uD8A2\u0000\uD5F6" + // 15500 - 15504
-                "\u0000\u0000\u0000\uD5F7\u0000\u0000\u0000\uCCE0\u0000\u0000" + // 15505 - 15509
-                "\u0000\u0000\u0000\u0000\u0000\uD5F8\u0000\u0000\u0000\u0000" + // 15510 - 15514
-                "\u0000\u0000\u0000\u0000\u0000\uB6C6\u0000\u0000\u0000\u0000" + // 15515 - 15519
-                "\u0000\u0000\u0000\uBDA2\u0000\u0000\u0000\u0000\u0000\u0000" + // 15520 - 15524
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD5F9\u0000\uD5FA" + // 15525 - 15529
-                "\u0000\uBCDC\u0000\uBFAC\u0000\uC6F4\u0000\uBFD4\u0000\uC8F8" + // 15530 - 15534
-                "\u0000\uC7A2\u008F\uBADB\u0000\u0000\u0000\uBCE4\u0000\uD5E3" + // 15535 - 15539
-                "\u0000\uB4F3\u0000\uC6D2\u0000\uCCA9\u0000\uD5E4\u0000\u0000" + // 15540 - 15544
-                "\u0000\uD5E5\u0000\u0000\u0000\u0000\u0000\uC9D9\u0000\u0000" + // 15545 - 15549
-                "\u0000\u0000\u0000\u0000\u0000\uD5E7\u0000\u0000\u0000\uB4A8" + // 15550 - 15554
-                "\u0000\uB6F7\u0000\uD5E6\u0000\u0000\u0000\u0000\u0000\u0000" + // 15555 - 15559
-                "\u008F\uBAE1\u0000\u0000\u0000\u0000\u0000\uB4B2\u0000\u0000" + // 15560 - 15564
-                "\u0000\uBFB2\u0000\uD5EB\u0000\uBBA1\u0000\uD5DF\u0000\u0000" + // 15565 - 15569
-                "\u0000\u0000\u0000\uD5E0\u0000\u0000\u0000\uC2F0\u0000\u0000" + // 15570 - 15574
-                "\u0000\uB1A7\u0000\uBCE9\u0000\uB0C2\u0000\u0000\u0000\uC1D7" + // 15575 - 15579
-                "\u0000\uB4B0\u0000\uBCB5\u0000\u0000\u0000\uB9A8\u0000\u0000" + // 15580 - 15584
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC5E6" + // 15585 - 15589
-                "\u0000\u0000\u0000\uBDA1\u0000\uB4B1\u0000\uC3E8\u0000\uC4EA" + // 15590 - 15594
-                "\u0000\uB0B8\u0000\uB5B9\u0000\uCAF5\u0000\u0000\u0000\uBCC2" + // 15595 - 15599
-                "\u0000\uD5D2\u0000\u0000\u0000\u0000\u0000\uD5D0\u0000\u0000" + // 15600 - 15604
-                "\u0000\uD5D1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15605 - 15609
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15610 - 15614
-                "\u0000\u0000\u0000\uBBD2\u0000\uD5D3\u0000\u0000\u0000\u0000" + // 15615 - 15619
-                "\u0000\uB9A6\u0000\uD5D4\u008F\uBABE\u0000\uBBFA\u0000\uC2B8" + // 15620 - 15624
-                "\u0000\u0000\u0000\uD5D5\u0000\uD5D6\u0000\uBBDA\u0000\uB9A7" + // 15625 - 15629
-                "\u0000\u0000\u0000\uCCD2\u0000\uD5B4\u0000\uCFAC\u0000\u0000" + // 15630 - 15634
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7CC\u0000\u0000" + // 15635 - 15639
-                "\u0000\u0000\u0000\uD5B6\u0000\u0000\u0000\u0000\u0000\u0000" + // 15640 - 15644
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15645 - 15649
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15650 - 15654
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBAA7\u0000\u0000" + // 15655 - 15659
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBEF0" + // 15660 - 15664
-                "\u0000\uD8AF\u0000\uC6D7\u0000\u0000\u0000\u0000\u0000\u0000" + // 15665 - 15669
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15670 - 15674
-                "\u0000\u0000\u0000\uCFC7\u0000\u0000\u0000\uD8AB\u0000\u0000" + // 15675 - 15679
-                "\u008F\uBEAC\u0000\u0000\u0000\u0000\u0000\uD8B1\u0000\u0000" + // 15680 - 15684
-                "\u0000\uB9FB\u0000\u0000\u0000\uC0CB\u0000\u0000\u008F\uBEB0" + // 15685 - 15689
-                "\u0000\uB0D4\u0000\uBFB1\u0000\u0000\u0000\u0000\u0000\u0000" + // 15690 - 15694
-                "\u0000\u0000\u0000\uD5AE\u0000\u0000\u0000\u0000\u0000\u0000" + // 15695 - 15699
-                "\u0000\uCADA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15700 - 15704
-                "\u0000\u0000\u0000\uB8E4\u0000\u0000\u0000\u0000\u0000\u0000" + // 15705 - 15709
-                "\u0000\u0000\u0000\u0000\u0000\uD5B7\u0000\uD5B8\u0000\u0000" + // 15710 - 15714
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBEAB" + // 15715 - 15719
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDFE\u0000\u0000" + // 15720 - 15724
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uCCD0" + // 15725 - 15729
-                "\u0000\u0000\u0000\uE0F8\u0000\u0000\u0000\u0000\u0000\u0000" + // 15730 - 15734
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15735 - 15739
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15740 - 15744
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15745 - 15749
-                "\u0000\uE0F9\u008F\uCCD9\u0000\uD4FB\u0000\u0000\u0000\uD4FA" + // 15750 - 15754
-                "\u008F\uB8FC\u0000\u0000\u0000\uB1FC\u0000\u0000\u0000\uD4FC" + // 15755 - 15759
-                "\u0000\uBEA9\u0000\uD4FE\u0000\uC3A5\u0000\u0000\u0000\uD4FD" + // 15760 - 15764
-                "\u0000\u0000\u0000\uCAB3\u0000\u0000\u0000\u0000\u0000\u0000" + // 15765 - 15769
-                "\u0000\u0000\u0000\uBDF7\u0000\uC5DB\u0000\u0000\u0000\u0000" + // 15770 - 15774
-                "\u0000\u0000\u0000\uD5A1\u0000\u0000\u0000\u0000\u0000\u0000" + // 15775 - 15779
-                "\u0000\u0000\u0000\uB9A5\u0000\u0000\u0000\u0000\u0000\uE0E5" + // 15780 - 15784
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0FA" + // 15785 - 15789
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15790 - 15794
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB4C4\u0000\u0000" + // 15795 - 15799
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15800 - 15804
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15805 - 15809
-                "\u0000\u0000\u0000\uBCA5\u0000\u0000\u0000\u0000\u0000\uE1CA" + // 15810 - 15814
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1C5\u0000\uE1C6" + // 15815 - 15819
-                "\u0000\u0000\u0000\uE1C9\u0000\uE1C8\u0000\uC9A5\u0000\u0000" + // 15820 - 15824
-                "\u0000\u0000\u0000\uC1C2\u0000\uC1C1\u0000\u0000\u0000\uB5BF" + // 15825 - 15829
-                "\u0000\u0000\u0000\u0000\u0000\uE1CB\u0000\u0000\u0000\u0000" + // 15830 - 15834
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1CC\u0000\u0000" + // 15835 - 15839
-                "\u0000\u0000\u0000\uE1CD\u0000\u0000\u0000\u0000\u0000\uE1D0" + // 15840 - 15844
-                "\u0000\uE1D2\u0000\u0000\u0000\uC9C2\u0000\u0000\u0000\uBEC9" + // 15845 - 15849
-                "\u0000\u0000\u0000\u0000\u0000\uE1D9\u0000\u0000\u0000\u0000" + // 15850 - 15854
-                "\u0000\uE1D8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15855 - 15859
-                "\u0000\uE1DA\u0000\u0000\u0000\uBCA6\u0000\uBAAF\u0000\u0000" + // 15860 - 15864
-                "\u0000\u0000\u0000\uC5F7\u0000\uE1DB\u0000\u0000\u0000\uC4CB" + // 15865 - 15869
-                "\u0000\u0000\u0000\u0000\u0000\uE1DD\u0000\u0000\u0000\uDAD5" + // 15870 - 15874
-                "\u0000\u0000\u0000\uDAD3\u0000\uDAD6\u0000\uCEB9\u0000\uDAD4" + // 15875 - 15879
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC0FB" + // 15880 - 15884
-                "\u0000\uDAD7\u0000\u0000\u0000\u0000\u0000\uC2B2\u0000\u0000" + // 15885 - 15889
-                "\u0000\u0000\u0000\uDAD8\u0000\u0000\u0000\u0000\u0000\u0000" + // 15890 - 15894
-                "\u0000\u0000\u0000\uB4FA\u0000\u0000\u0000\uDADA\u0000\u0000" + // 15895 - 15899
-                "\u0000\uDAD9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15900 - 15904
-                "\u008F\uC9E3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15905 - 15909
-                "\u0000\uDFE1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15910 - 15914
-                "\u0000\u0000\u008F\uC9E9\u0000\u0000\u0000\u0000\u0000\u0000" + // 15915 - 15919
-                "\u0000\u0000\u0000\uB1EB\u0000\u0000\u0000\u0000\u0000\u0000" + // 15920 - 15924
-                "\u0000\u0000\u0000\uDFE4\u0000\uCAB2\u0000\u0000\u0000\uDFE3" + // 15925 - 15929
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB0DF\u0000\uE6F4" + // 15930 - 15934
-                "\u0000\u0000\u0000\uC3C0\u0000\u0000\u0000\u0000\u0000\u0000" + // 15935 - 15939
-                "\u0000\u0000\u0000\u0000\u0000\uC7D8\u0000\u0000\u0000\uC2DB" + // 15940 - 15944
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15945 - 15949
-                "\u0000\u0000\u0000\u0000\u0000\uE6F6\u0000\u0000\u0000\u0000" + // 15950 - 15954
-                "\u0000\uE6F2\u0000\uE6F5\u0000\uE6F0\u0000\u0000\u0000\uE6F3" + // 15955 - 15959
-                "\u0000\uCBA6\u0000\u0000\u0000\uDAEA\u0000\uBBFE\u0000\uB9B8" + // 15960 - 15964
-                "\u0000\uDAE8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15965 - 15969
-                "\u0000\uDAE9\u0000\u0000\u0000\uBFB8\u0000\u0000\u0000\u0000" + // 15970 - 15974
-                "\u0000\u0000\u0000\uDAE7\u0000\u0000\u0000\u0000\u0000\uBBAF" + // 15975 - 15979
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uC2B8" + // 15980 - 15984
-                "\u0000\u0000\u008F\uC2BA\u0000\u0000\u0000\u0000\u0000\u0000" + // 15985 - 15989
-                "\u0000\uDAEC\u0000\uDAEB\u0000\uDAF0\u0000\uCABD\u0000\uCEDD" + // 15990 - 15994
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15995 - 15999
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB2F4\u0000\uD4CA" + // 16000 - 16004
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16005 - 16009
-                "\u0000\uC1BA\u0000\uD4CD\u0000\u0000\u0000\uC5E3\u0000\u0000" + // 16010 - 16014
-                "\u0000\u0000\u0000\uC5C9\u0000\uC5E4\u0000\uC8B9\u0000\uC4CD" + // 16015 - 16019
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBAC9\u0000\u0000" + // 16020 - 16024
-                "\u0000\uCDCA\u0000\uDAA7\u0000\u0000\u0000\u0000\u0000\uDAA3" + // 16025 - 16029
-                "\u0000\u0000\u0000\uDAA4\u0000\u0000\u0000\u0000\u0000\u0000" + // 16030 - 16034
-                "\u0000\u0000\u0000\u0000\u0000\uC1E0\u008F\uC1A6\u0000\u0000" + // 16035 - 16039
-                "\u0000\u0000\u0000\u0000\u0000\uDAA2\u0000\u0000\u0000\uD9BF" + // 16040 - 16044
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDAA6\u0000\u0000" + // 16045 - 16049
-                "\u0000\uDAA1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16050 - 16054
-                "\u0000\u0000\u008F\uC9CA\u0000\u0000\u0000\u0000\u0000\u0000" + // 16055 - 16059
-                "\u0000\uCFA7\u0000\uBFE6\u0000\u0000\u0000\u0000\u0000\u0000" + // 16060 - 16064
-                "\u0000\uB1EA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDFD6" + // 16065 - 16069
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16070 - 16074
-                "\u0000\u0000\u0000\uDFD5\u0000\u0000\u0000\u0000\u0000\u0000" + // 16075 - 16079
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2E8\u0000\u0000" + // 16080 - 16084
-                "\u0000\u0000\u0000\u0000\u0000\uE2EA\u0000\uE3AA\u0000\uE3A9" + // 16085 - 16089
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uF4CB\u0000\u0000" + // 16090 - 16094
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16095 - 16099
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBCA8\u0000\u0000" + // 16100 - 16104
-                "\u0000\uCEE9\u0000\u0000\u0000\uBCD2\u0000\u0000\u0000\uB0B6" + // 16105 - 16109
-                "\u0000\u0000\u0000\u0000\u0000\uB6D4\u0000\uC0CD\u0000\u0000" + // 16110 - 16114
-                "\u0000\uC9E0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDAD1" + // 16115 - 16119
-                "\u0000\uBBC2\u0000\uC3C7\u0000\u0000\u0000\uBBDB\u0000\uBFB7" + // 16120 - 16124
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16125 - 16129
-                "\u0000\u0000\u0000\uDAD2\u0000\u0000\u0000\uCAFD\u0000\u0000" + // 16130 - 16134
-                "\u0000\u0000\u0000\uB1F7\u0000\uBBDC\u0000\u0000\u0000\u0000" + // 16135 - 16139
-                "\u0000\uBBE9\u0000\u0000\u0000\u0000\u0000\uB6BC\u0000\uC0C8" + // 16140 - 16144
-                "\u0000\uCFC6\u0000\uCCAE\u0000\uE6F7\u0000\uC0D4\u0000\u0000" + // 16145 - 16149
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16150 - 16154
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16155 - 16159
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB5D3" + // 16160 - 16164
-                "\u0000\uE6FA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16165 - 16169
-                "\u008F\uE5B3\u0000\u0000\u0000\u0000\u0000\uB3BB\u0000\u0000" + // 16170 - 16174
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFAE\u0000\uEFAF" + // 16175 - 16179
-                "\u0000\uC4C3\u0000\u0000\u0000\uEFAD\u0000\u0000\u0000\u0000" + // 16180 - 16184
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16185 - 16189
-                "\u0000\u0000\u0000\uEFB1\u0000\u0000\u0000\u0000\u0000\u0000" + // 16190 - 16194
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF2A2\u0000\u0000" + // 16195 - 16199
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16200 - 16204
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16205 - 16209
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16210 - 16214
-                "\u0000\u0000\u0000\uF2A3\u0000\u0000\u0000\uF2A4\u0000\u0000" + // 16215 - 16219
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF2A5\u0000\uCBD9" + // 16220 - 16224
-                "\u0000\u0000\u0000\uC6B2\u0000\u0000\u0000\u0000\u0000\uB7F8" + // 16225 - 16229
-                "\u0000\uC2CF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD4C1" + // 16230 - 16234
-                "\u0000\uD4C4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16235 - 16239
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16240 - 16244
-                "\u0000\uC2C4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD4C5" + // 16245 - 16249
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD4C6\u0000\u0000" + // 16250 - 16254
-                "\u0000\u0000\u0000\uDEF1\u0000\u0000\u0000\uDEEB\u0000\uCCC7" + // 16255 - 16259
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDEE6\u0000\u0000" + // 16260 - 16264
-                "\u0000\uBCA2\u0000\uDEFE\u0000\u0000\u0000\u0000\u0000\u0000" + // 16265 - 16269
-                "\u0000\u0000\u0000\uB3EA\u0000\u0000\u0000\uDEE8\u0000\uDEED" + // 16270 - 16274
-                "\u0000\uDEEE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16275 - 16279
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC2EC\u0000\uC2DA" + // 16280 - 16284
-                "\u0000\u0000\u0000\uB0AE\u0000\u0000\u0000\uD9E5\u0000\u0000" + // 16285 - 16289
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9E2" + // 16290 - 16294
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB4F8" + // 16295 - 16299
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16300 - 16304
-                "\u0000\uB1E7\u008F\uC0C4\u0000\uD9E8\u0000\u0000\u0000\u0000" + // 16305 - 16309
-                "\u0000\u0000\u0000\uCDC9\u0000\u0000\u0000\u0000\u0000\u0000" + // 16310 - 16314
-                "\u0000\u0000\u0000\u0000\u0000\uDEBA\u0000\u0000\u008F\uC7C7" + // 16315 - 16319
-                "\u0000\uBEC3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDB0" + // 16320 - 16324
-                "\u0000\u0000\u0000\uDEB7\u0000\u0000\u0000\u0000\u0000\u0000" + // 16325 - 16329
-                "\u0000\u0000\u0000\uDEB2\u0000\u0000\u0000\uDEB8\u008F\uC7CB" + // 16330 - 16334
-                "\u0000\u0000\u0000\u0000\u0000\uCEDE\u0000\u0000\u0000\uC5F3" + // 16335 - 16339
-                "\u0000\uC6C2\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uC7AB" + // 16340 - 16344
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16345 - 16349
-                "\u0000\u0000\u0000\uCDCE\u0000\uDEB0\u0000\u0000\u0000\u0000" + // 16350 - 16354
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDEAF\u0000\u0000" + // 16355 - 16359
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC0F6\u0000\u0000" + // 16360 - 16364
-                "\u0000\uDEAC\u0000\u0000\u0000\uCDEC\u0000\u0000\u0000\u0000" + // 16365 - 16369
-                "\u0000\uC6B6\u0000\uDEA6\u0000\uC9D6\u0000\u0000\u0000\u0000" + // 16370 - 16374
-                "\u0000\uD4C3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16375 - 16379
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16380 - 16384
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16385 - 16389
-                "\u0000\u0000\u0000\u0000\u0000\uBEFD\u0000\u0000\u0000\u0000" + // 16390 - 16394
-                "\u0000\uBCB9\u0000\u0000\u0000\uC7DD\u0000\uB4F0\u0000\u0000" + // 16395 - 16399
-                "\u0000\uBAEB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBDC3" + // 16400 - 16404
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0D7" + // 16405 - 16409
-                "\u0000\u0000\u0000\uE0D6\u0000\u0000\u0000\u0000\u0000\u0000" + // 16410 - 16414
-                "\u0000\u0000\u0000\u0000\u0000\uE0D8\u0000\u0000\u0000\uB3CD" + // 16415 - 16419
-                "\u0000\u0000\u0000\u0000\u0000\uE0DA\u0000\u0000\u008F\uCBCA" + // 16420 - 16424
-                "\u0000\uE0D9\u0000\u0000\u0000\uE0DC\u0000\uE0DB\u0000\u0000" + // 16425 - 16429
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9A6\u0000\u0000" + // 16430 - 16434
-                "\u0000\uC1A6\u0000\u0000\u0000\uE9AA\u0000\uBBA7\u0000\uBFC5" + // 16435 - 16439
-                "\u0000\uB7B0\u0000\uCCF4\u0000\u0000\u0000\uCCF9\u0000\uBDF2" + // 16440 - 16444
-                "\u008F\uF4D9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16445 - 16449
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9B7" + // 16450 - 16454
-                "\u0000\uE9B5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16455 - 16459
-                "\u0000\u0000\u0000\uE9F2\u0000\u0000\u0000\u0000\u0000\u0000" + // 16460 - 16464
-                "\u0000\uE9F3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16465 - 16469
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16470 - 16474
-                "\u0000\u0000\u0000\uE9EE\u0000\u0000\u0000\u0000\u0000\uE9F0" + // 16475 - 16479
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9F1\u0000\u0000" + // 16480 - 16484
-                "\u0000\u0000\u0000\u0000\u0000\uE9EF\u0000\uD4B1\u0000\u0000" + // 16485 - 16489
-                "\u0000\u0000\u0000\uD4BC\u0000\u0000\u0000\u0000\u0000\uD4BD" + // 16490 - 16494
-                "\u008F\uB7E7\u008F\uB7E8\u0000\u0000\u0000\u0000\u0000\uCBE4" + // 16495 - 16499
-                "\u0000\u0000\u0000\u0000\u0000\uBEEB\u0000\u0000\u0000\u0000" + // 16500 - 16504
-                "\u0000\u0000\u0000\uD4BF\u0000\uD4C0\u0000\uD4BE\u0000\u0000" + // 16505 - 16509
-                "\u0000\uD4C2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16510 - 16514
-                "\u0000\u0000\u0000\uC7B8\u0000\u0000\u0000\u0000\u0000\uB0E8" + // 16515 - 16519
-                "\u0000\uD4B7\u0000\u0000\u0000\uB9A4\u0000\uB3C0\u0000\uD4B9" + // 16520 - 16524
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16525 - 16529
-                "\u0000\uD4BA\u0000\u0000\u008F\uB7E4\u0000\u0000\u0000\u0000" + // 16530 - 16534
-                "\u0000\u0000\u0000\uD4BB\u0000\u0000\u0000\u0000\u0000\uD4B8" + // 16535 - 16539
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16540 - 16544
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16545 - 16549
-                "\u0000\u0000\u0000\u0000\u008F\uC7CF\u0000\u0000\u0000\u0000" + // 16550 - 16554
-                "\u0000\uB3B6\u0000\u0000\u0000\u0000\u0000\uB1D5\u0000\u0000" + // 16555 - 16559
-                "\u0000\u0000\u0000\uDEBE\u0000\u0000\u0000\u0000\u0000\uDEC1" + // 16560 - 16564
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCEC3\u0000\u0000" + // 16565 - 16569
-                "\u0000\u0000\u0000\u0000\u0000\uDFD4\u0000\u0000\u0000\u0000" + // 16570 - 16574
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16575 - 16579
-                "\u0000\uB2D0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC5F4" + // 16580 - 16584
-                "\u0000\uB3A5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16585 - 16589
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB5E4\u0000\u0000" + // 16590 - 16594
-                "\u0000\u0000\u0000\u0000\u0000\uBCDE\u0000\uBAD2\u0000\u0000" + // 16595 - 16599
-                "\u0000\u0000\u0000\uB0EE\u0000\u0000\u0000\u0000\u0000\uDEF0" + // 16600 - 16604
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDEE4" + // 16605 - 16609
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDEEA" + // 16610 - 16614
-                "\u0000\u0000\u0000\u0000\u0000\uDEEC\u0000\u0000\u0000\u0000" + // 16615 - 16619
-                "\u0000\u0000\u0000\uCDCF\u0000\uDEE7\u0000\u0000\u0000\u0000" + // 16620 - 16624
-                "\u0000\uC5AE\u0000\u0000\u0000\u0000\u0000\uDEE9\u0000\u0000" + // 16625 - 16629
-                "\u008F\uC8B1\u0000\uD4AE\u0000\u0000\u0000\uBAE4\u0000\u0000" + // 16630 - 16634
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB6D1\u0000\u0000" + // 16635 - 16639
-                "\u0000\u0000\u0000\uCBB7\u0000\u0000\u0000\u0000\u0000\u0000" + // 16640 - 16644
-                "\u0000\uD4AC\u0000\uD4AF\u0000\uBAC1\u0000\uB9A3\u0000\u0000" + // 16645 - 16649
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16650 - 16654
-                "\u0000\u0000\u008F\uF4A9\u0000\u0000\u0000\u0000\u0000\u0000" + // 16655 - 16659
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDBAF\u0000\uDBB0" + // 16660 - 16664
-                "\u0000\uCCDA\u0000\u0000\u0000\uCCA4\u0000\uCBF6\u0000\uCBDC" + // 16665 - 16669
-                "\u0000\uBBA5\u0000\uDBB2\u0000\u0000\u0000\u0000\u0000\uBCEB" + // 16670 - 16674
-                "\u0000\u0000\u0000\u0000\u0000\uCBD1\u0000\u0000\u0000\uDBB4" + // 16675 - 16679
-                "\u0000\uDBB7\u0000\uDBB6\u0000\u0000\u0000\uB4F9\u0000\u0000" + // 16680 - 16684
-                "\u0000\u0000\u0000\uB5E0\u0000\u0000\u0000\uDBB3\u0000\uD3FB" + // 16685 - 16689
-                "\u0000\u0000\u0000\u0000\u0000\uCAE0\u0000\uD3FD\u0000\u0000" + // 16690 - 16694
-                "\u0000\u0000\u0000\u0000\u0000\uD4A1\u0000\uD3FE\u0000\u0000" + // 16695 - 16699
-                "\u0000\uD4A2\u0000\u0000\u0000\uD4A3\u0000\u0000\u0000\uB7F7" + // 16700 - 16704
-                "\u0000\u0000\u0000\u0000\u0000\uB1E0\u0000\uD4A4\u0000\u0000" + // 16705 - 16709
-                "\u0000\u0000\u0000\uD4A6\u0000\u0000\u0000\uD4A5\u0000\u0000" + // 16710 - 16714
-                "\u0000\u0000\u0000\u0000\u0000\uD4A8\u0000\u0000\u0000\u0000" + // 16715 - 16719
-                "\u0000\uC5DA\u0000\uB0F8\u0000\u0000\u0000\u0000\u0000\uC3C4" + // 16720 - 16724
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16725 - 16729
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16730 - 16734
-                "\u0000\uD3F9\u0000\u0000\u0000\uBAA4\u0000\u0000\u0000\uB0CF" + // 16735 - 16739
-                "\u0000\uBFDE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16740 - 16744
-                "\u0000\u0000\u0000\uD3FA\u0000\uB8C7\u0000\u0000\u0000\u0000" + // 16745 - 16749
-                "\u0000\uB9F1\u0000\u0000\u0000\uD3FC\u0000\uD3F3\u0000\uD3F1" + // 16750 - 16754
-                "\u0000\uD3EF\u0000\uD3F2\u0000\u0000\u0000\u0000\u0000\u0000" + // 16755 - 16759
-                "\u0000\u0000\u0000\uD3F4\u0000\u0000\u0000\uC7B9\u0000\u0000" + // 16760 - 16764
-                "\u0000\u0000\u0000\u0000\u0000\uD3F5\u0000\u0000\u0000\u0000" + // 16765 - 16769
-                "\u0000\uD3F6\u0000\u0000\u0000\uD3F7\u0000\u0000\u0000\u0000" + // 16770 - 16774
-                "\u0000\u0000\u0000\uD3F8\u0000\uD1C5\u0000\u0000\u0000\uBCFC" + // 16775 - 16779
-                "\u0000\uBBCD\u0000\u0000\u0000\u0000\u0000\uB2F3\u0000\u0000" + // 16780 - 16784
-                "\u0000\uBBFD\u0000\uD9CC\u0000\u0000\u0000\u0000\u0000\u0000" + // 16785 - 16789
-                "\u0000\u0000\u0000\uBBD8\u0000\uD9CD\u0000\uB0C4\u0000\u0000" + // 16790 - 16794
-                "\u0000\u0000\u0000\uD9C8\u0000\u0000\u0000\u0000\u0000\u0000" + // 16795 - 16799
-                "\u0000\u0000\u0000\uC4A9\u0000\u0000\u0000\u0000\u0000\u0000" + // 16800 - 16804
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB5F3" + // 16805 - 16809
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16810 - 16814
-                "\u0000\uB6B4\u0000\uD3E8\u0000\u0000\u0000\uC7B9\u0000\u0000" + // 16815 - 16819
-                "\u0000\u0000\u0000\uD3EB\u0000\u0000\u0000\u0000\u0000\u0000" + // 16820 - 16824
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16825 - 16829
-                "\u0000\uD3EC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16830 - 16834
-                "\u0000\u0000\u0000\uD3EE\u0000\u0000\u0000\uD3ED\u0000\u0000" + // 16835 - 16839
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3F0" + // 16840 - 16844
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDEB1\u0000\uDEB3" + // 16845 - 16849
-                "\u0000\u0000\u0000\uB1BA\u0000\u0000\u0000\u0000\u0000\uB9C0" + // 16850 - 16854
-                "\u0000\uCFB2\u0000\u0000\u0000\uB3BD\u0000\u0000\u0000\uC9E2" + // 16855 - 16859
-                "\u008F\uC7C3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16860 - 16864
-                "\u0000\uCDE1\u0000\u0000\u0000\u0000\u0000\uB3A4\u0000\uBFBB" + // 16865 - 16869
-                "\u0000\uDEB5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16870 - 16874
-                "\u0000\u0000\u0000\u0000\u0000\uC7FA\u0000\u0000\u0000\u0000" + // 16875 - 16879
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0A3" + // 16880 - 16884
-                "\u0000\u0000\u0000\u0000\u0000\uE0A4\u0000\u0000\u0000\u0000" + // 16885 - 16889
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16890 - 16894
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0A5\u0000\u0000" + // 16895 - 16899
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uCFE9\u0000\u0000" + // 16900 - 16904
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16905 - 16909
-                "\u0000\uCEB2\u0000\uB9C5\u0000\u0000\u0000\u0000\u0000\uB8A7" + // 16910 - 16914
-                "\u0000\u0000\u0000\u0000\u0000\uC8A3\u0000\u0000\u0000\uE2ED" + // 16915 - 16919
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16920 - 16924
-                "\u008F\uCFED\u0000\u0000\u0000\uE2EF\u0000\u0000\u0000\u0000" + // 16925 - 16929
-                "\u0000\u0000\u0000\uDEDC\u0000\u0000\u0000\u0000\u0000\u0000" + // 16930 - 16934
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCCAB\u0000\u0000" + // 16935 - 16939
-                "\u0000\u0000\u0000\uDEDA\u0000\uDEDE\u0000\u0000\u0000\u0000" + // 16940 - 16944
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16945 - 16949
-                "\u0000\uB8D0\u0000\u0000\u0000\uBEC5\u0000\u0000\u0000\u0000" + // 16950 - 16954
-                "\u0000\uC3B9\u008F\uC7FC\u0000\u0000\u0000\u0000\u0000\uDED4" + // 16955 - 16959
-                "\u0000\uD3E6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16960 - 16964
-                "\u0000\u0000\u0000\uD3E5\u0000\uB3C5\u0000\u0000\u0000\u0000" + // 16965 - 16969
-                "\u0000\uD3E7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16970 - 16974
-                "\u0000\uD3EA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16975 - 16979
-                "\u0000\uD3E9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16980 - 16984
-                "\u0000\uB3FA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16985 - 16989
-                "\u0000\u0000\u0000\u0000\u0000\uD9EE\u0000\u0000\u0000\uD9F2" + // 16990 - 16994
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC8C2\u0000\uC5EB" + // 16995 - 16999
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17000 - 17004
-                "\u0000\u0000\u0000\uD9EB\u0000\u0000\u0000\uD9EF\u0000\u0000" + // 17005 - 17009
-                "\u0000\u0000\u0000\u0000\u0000\uB7C8\u0000\u0000\u0000\u0000" + // 17010 - 17014
-                "\u0000\u0000\u0000\uBAF1\u0000\u0000\u0000\uD9A2\u0000\u0000" + // 17015 - 17019
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC0EF\u0000\u0000" + // 17020 - 17024
-                "\u0000\u0000\u0000\u0000\u0000\uD9A3\u0000\u0000\u0000\u0000" + // 17025 - 17029
-                "\u0000\u0000\u0000\uD9A4\u0000\uB5BA\u0000\uD9A5\u0000\u0000" + // 17030 - 17034
-                "\u0000\uD9A6\u0000\uD9A7\u0000\uC2D7\u0000\u0000\u0000\u0000" + // 17035 - 17039
-                "\u0000\u0000\u0000\uB8CD\u0000\u0000\u0000\u0000\u0000\uCCE1" + // 17040 - 17044
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCBBC\u0000\uD3BD" + // 17045 - 17049
-                "\u0000\u0000\u0000\u0000\u0000\uD3C7\u0000\uC1B1\u0000\u0000" + // 17050 - 17054
-                "\u008F\uB5E8\u0000\uD3C9\u0000\u0000\u0000\uB9A2\u0000\uD3BF" + // 17055 - 17059
-                "\u0000\uC3FD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17060 - 17064
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17065 - 17069
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3C3\u0000\uD3BC" + // 17070 - 17074
-                "\u0000\uB4AD\u0000\u0000\u0000\uB4EE\u0000\uB3E5\u0000\uD3C4" + // 17075 - 17079
-                "\u0000\uD3C0\u0000\uD3B1\u0000\u0000\u0000\u0000\u0000\u0000" + // 17080 - 17084
-                "\u0000\uC2EF\u0000\uD3B6\u0000\uBEA6\u0000\u0000\u0000\u0000" + // 17085 - 17089
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3B3\u0000\u0000" + // 17090 - 17094
-                "\u0000\u0000\u0000\uCCE4\u0000\u0000\u0000\u0000\u0000\u0000" + // 17095 - 17099
-                "\u0000\uB7BC\u0000\u0000\u0000\u0000\u0000\uD3B7\u0000\uD3B8" + // 17100 - 17104
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3B5" + // 17105 - 17109
-                "\u0000\uD3BB\u0000\uB0A2\u0000\u0000\u0000\uD7FA\u0000\u0000" + // 17110 - 17114
-                "\u0000\uD7FD\u0000\uD8A1\u008F\uF4B3\u0000\u0000\u0000\u0000" + // 17115 - 17119
-                "\u0000\u0000\u0000\uBCBD\u008F\uBDF0\u0000\uD8A7\u0000\uC4F0" + // 17120 - 17124
-                "\u0000\uD7FB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17125 - 17129
-                "\u0000\uD8A5\u0000\u0000\u0000\uB2F9\u0000\u0000\u0000\uD8A3" + // 17130 - 17134
-                "\u0000\uD8A4\u0000\u0000\u0000\u0000\u0000\uD7FE\u0000\uD8A2" + // 17135 - 17139
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB8E7\u0000\uB0A5" + // 17140 - 17144
-                "\u0000\uC9CA\u0000\uD3A2\u0000\u0000\u0000\uD2FC\u0000\u0000" + // 17145 - 17149
-                "\u0000\u0000\u0000\uD2F7\u0000\uD2FD\u0000\uBAC8\u0000\u0000" + // 17150 - 17154
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17155 - 17159
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17160 - 17164
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3A6\u0000\u0000" + // 17165 - 17169
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17170 - 17174
-                "\u0000\u0000\u0000\uBFF2\u0000\u0000\u0000\u0000\u0000\u0000" + // 17175 - 17179
-                "\u0000\uD6BC\u0000\u0000\u0000\u0000\u0000\uBAEA\u0000\u0000" + // 17180 - 17184
-                "\u0000\u0000\u0000\uD6C2\u0000\u0000\u0000\u0000\u0000\uD6C3" + // 17185 - 17189
-                "\u0000\uD6BD\u0000\uB3B3\u0000\uD6BE\u0000\uD6C7\u0000\uD6C6" + // 17190 - 17194
-                "\u0000\uD6C5\u0000\uD6C1\u0000\u0000\u0000\u0000\u0000\u0000" + // 17195 - 17199
-                "\u0000\uD6C0\u0000\uD2F2\u0000\u0000\u0000\u0000\u0000\u0000" + // 17200 - 17204
-                "\u0000\uD2F4\u0000\u0000\u0000\uD2F6\u0000\u0000\u0000\u0000" + // 17205 - 17209
-                "\u0000\u0000\u008F\uF4A8\u0000\uBAF0\u0000\uCFC2\u0000\u0000" + // 17210 - 17214
-                "\u0000\uD2EB\u0000\uD2E9\u0000\uD2F5\u0000\u0000\u0000\uD2F0" + // 17215 - 17219
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17220 - 17224
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uB5AA" + // 17225 - 17229
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDBD\u0000\u0000" + // 17230 - 17234
-                "\u0000\u0000\u0000\u0000\u0000\uDDBC\u0000\u0000\u0000\uDDBE" + // 17235 - 17239
-                "\u0000\u0000\u0000\u0000\u0000\uB2CE\u0000\u0000\u0000\uC3B7" + // 17240 - 17244
-                "\u0000\u0000\u0000\uDDBF\u0000\u0000\u0000\u0000\u0000\uB4BF" + // 17245 - 17249
-                "\u0000\uDDC1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17250 - 17254
-                "\u0000\uDDC0\u0000\u0000\u0000\uDDC2\u0000\u0000\u0000\u0000" + // 17255 - 17259
-                "\u0000\u0000\u0000\uDDC3\u0000\uD2E0\u0000\u0000\u0000\uCFA4" + // 17260 - 17264
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCAF2\u0000\u0000" + // 17265 - 17269
-                "\u0000\uC4E8\u0000\uB8E2\u0000\uB9F0\u0000\u0000\u0000\u0000" + // 17270 - 17274
-                "\u0000\u0000\u0000\uD2E8\u0000\u0000\u0000\u0000\u0000\uC6DD" + // 17275 - 17279
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17280 - 17284
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17285 - 17289
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD2EC\u0000\uCBCA" + // 17290 - 17294
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17295 - 17299
-                "\u0000\uC8DD\u0000\u0000\u0000\u0000\u0000\uD2E6\u0000\u0000" + // 17300 - 17304
-                "\u0000\uB4DE\u0000\uD2E1\u0000\uD2E2\u0000\uD2E4\u0000\u0000" + // 17305 - 17309
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17310 - 17314
-                "\u0000\u0000\u0000\uD2E5\u0000\u0000\u0000\uB5DB\u0000\uBFE1" + // 17315 - 17319
-                "\u0000\u0000\u0000\uCAAD\u0000\uD2E3\u0000\uD2DF\u0000\uB8E3" + // 17320 - 17324
-                "\u0000\u0000\u0000\uD7EC\u0000\uD7F6\u0000\uD7F4\u0000\u0000" + // 17325 - 17329
-                "\u0000\u0000\u0000\uD7F1\u0000\u0000\u0000\u0000\u0000\u0000" + // 17330 - 17334
-                "\u0000\uD7F0\u0000\uCEF8\u0000\u0000\u0000\uD7F2\u0000\u0000" + // 17335 - 17339
-                "\u0000\u0000\u0000\uB6B2\u0000\u0000\u0000\uB9B1\u0000\u0000" + // 17340 - 17344
-                "\u0000\u0000\u0000\uBDFA\u0000\u0000\u0000\u0000\u0000\u0000" + // 17345 - 17349
-                "\u0000\uD7F9\u0000\uD7EB\u0000\u0000\u0000\u0000\u008F\uBDE7" + // 17350 - 17354
-                "\u0000\u0000\u0000\uD7EF\u0000\uD2CE\u0000\u0000\u0000\u0000" + // 17355 - 17359
-                "\u0000\u0000\u0000\u0000\u0000\uD2D0\u0000\uD2CF\u0000\u0000" + // 17360 - 17364
-                "\u0000\uBFDF\u0000\uB1B9\u0000\u0000\u0000\u0000\u0000\u0000" + // 17365 - 17369
-                "\u0000\uB1DE\u0000\uD2D1\u0000\u0000\u0000\uD2D2\u0000\u0000" + // 17370 - 17374
-                "\u008F\uB4D0\u0000\uB8B7\u0000\u0000\u0000\u0000\u0000\uD2D3" + // 17375 - 17379
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB5EE" + // 17380 - 17384
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB4FE" + // 17385 - 17389
-                "\u0000\u0000\u0000\uDCB2\u0000\u0000\u008F\uC3FC\u0000\uCCC9" + // 17390 - 17394
-                "\u0000\uDBF7\u0000\uB4FD\u0000\u0000\u0000\uDBFE\u0000\u0000" + // 17395 - 17399
-                "\u008F\uC3FE\u0000\u0000\u0000\u0000\u0000\uCBC0\u0000\u0000" + // 17400 - 17404
-                "\u0000\uDCA1\u0000\uDCA3\u0000\u0000\u0000\uDCA7\u0000\uDBF9" + // 17405 - 17409
-                "\u0000\u0000\u0000\uC3AA\u0000\u0000\u0000\u0000\u0000\u0000" + // 17410 - 17414
-                "\u0000\u0000\u0000\uC5EF\u0000\uC0EA\u0000\u0000\u0000\u0000" + // 17415 - 17419
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7B5\u0000\u0000" + // 17420 - 17424
-                "\u0000\u0000\u0000\uD2C7\u0000\u0000\u0000\u0000\u0000\u0000" + // 17425 - 17429
-                "\u0000\u0000\u0000\uD2C8\u0000\uB1AC\u0000\uB0F5\u0000\uB4ED" + // 17430 - 17434
-                "\u008F\uB4C0\u0000\uC2A8\u0000\uB5D1\u0000\uCDF1\u0000\u0000" + // 17435 - 17439
-                "\u0000\uD2CB\u0000\uB2B7\u0000\u0000\u0000\u0000\u0000\uD2CA" + // 17440 - 17444
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB6AA\u0000\uD2BF" + // 17445 - 17449
-                "\u0000\uBDBD\u0000\u0000\u0000\uC0E9\u0000\u0000\u0000\uD2C1" + // 17450 - 17454
-                "\u0000\uD2C0\u0000\uBEA3\u0000\uB8E1\u0000\uD2C3\u0000\uC8BE" + // 17455 - 17459
-                "\u0000\u0000\u0000\u0000\u0000\uD2C4\u0000\u0000\u0000\u0000" + // 17460 - 17464
-                "\u0000\u0000\u0000\uC8DC\u0000\uC2B4\u0000\uC2EE\u0000\uB6A8" + // 17465 - 17469
-                "\u0000\u0000\u0000\u0000\u0000\uC6EE\u0000\uC3B1\u0000\u0000" + // 17470 - 17474
-                "\u0000\uC7EE\u0000\u0000\u0000\uCBCE\u0000\u0000\u0000\uD2C6" + // 17475 - 17479
-                "\u0000\u0000\u0000\uD7C4\u0000\uB7C1\u0000\u0000\u0000\u0000" + // 17480 - 17484
-                "\u0000\u0000\u0000\uC9A7\u008F\uBCFE\u0000\u0000\u0000\uBACC" + // 17485 - 17489
-                "\u0000\uC9B7\u0000\uC4A6\u0000\uC9CB\u0000\uD7C5\u0000\u0000" + // 17490 - 17494
-                "\u0000\u0000\u0000\uBEB4\u0000\uB1C6\u0000\u0000\u0000\uD7C6" + // 17495 - 17499
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD7C7\u0000\u0000" + // 17500 - 17504
-                "\u0000\uCCF2\u0000\u0000\u0000\u0000\u0000\uC8E0\u0000\u0000" + // 17505 - 17509
-                "\u0000\u0000\u0000\uD7CA\u0000\uBEA2\u0000\uB6A9\u0000\u0000" + // 17510 - 17514
-                "\u0000\uD2BA\u008F\uF4A6\u0000\u0000\u0000\u0000\u0000\u0000" + // 17515 - 17519
-                "\u0000\u0000\u0000\u0000\u0000\uC8DB\u0000\u0000\u0000\u0000" + // 17520 - 17524
-                "\u0000\u0000\u0000\u0000\u0000\uD2BB\u0000\u0000\u0000\uD2BC" + // 17525 - 17529
-                "\u0000\u0000\u0000\uD2BD\u0000\u0000\u0000\u0000\u0000\u0000" + // 17530 - 17534
-                "\u0000\u0000\u0000\uD2BE\u0000\uC9A4\u0000\uB6E8\u0000\uB0E5" + // 17535 - 17539
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC6BF\u008F\uB3FB" + // 17540 - 17544
-                "\u0000\uCCE8\u0000\uC6F7\u0000\u0000\u0000\u0000\u0000\uCAF1" + // 17545 - 17549
-                "\u0000\uD2B2\u008F\uF4A5\u0000\uD2B3\u0000\u0000\u0000\u0000" + // 17550 - 17554
-                "\u0000\u0000\u0000\u0000\u0000\uD2B5\u0000\u0000\u0000\uD2B7" + // 17555 - 17559
-                "\u0000\uD2B6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17560 - 17564
-                "\u0000\uD2B8\u0000\uB2BD\u0000\uCBCC\u0000\u0000\u0000\uBAFC" + // 17565 - 17569
-                "\u0000\uD2B9\u0000\u0000\u0000\u0000\u0000\uC1D9\u0000\u0000" + // 17570 - 17574
-                "\u0000\u0000\u008F\uF4BE\u0000\u0000\u008F\uC5D5\u0000\u0000" + // 17575 - 17579
-                "\u0000\u0000\u0000\u0000\u0000\uC8A7\u0000\u0000\u0000\uDDAE" + // 17580 - 17584
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17585 - 17589
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17590 - 17594
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17595 - 17599
-                "\u0000\uDDB2\u0000\uDDAF\u0000\u0000\u0000\u0000\u0000\u0000" + // 17600 - 17604
-                "\u0000\u0000\u0000\uB8BC\u0000\u0000\u0000\u0000\u0000\uCEA8" + // 17605 - 17609
-                "\u0000\u0000\u0000\uB6CC\u0000\u0000\u0000\uB2A6\u0000\u0000" + // 17610 - 17614
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17615 - 17619
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB6EA" + // 17620 - 17624
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17625 - 17629
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD6DA" + // 17630 - 17634
-                "\u0000\u0000\u0000\u0000\u0000\uB4E0\u0000\uD6DB\u0000\u0000" + // 17635 - 17639
-                "\u0000\u0000\u008F\uBBF9\u0000\u0000\u0000\uD6DD\u0000\uD6DC" + // 17640 - 17644
-                "\u0000\u0000\u0000\u0000\u0000\uD6DE\u0000\u0000\u0000\u0000" + // 17645 - 17649
-                "\u0000\u0000\u0000\u0000\u0000\uD6DF\u0000\u0000\u0000\uC0EE" + // 17650 - 17654
-                "\u0000\uBDA3\u0000\u0000\u008F\uBCE4\u0000\u0000\u0000\u0000" + // 17655 - 17659
-                "\u0000\u0000\u0000\uCCEF\u0000\uB8B9\u0000\uB8CC\u0000\u0000" + // 17660 - 17664
-                "\u0000\uD7B8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD7B9" + // 17665 - 17669
-                "\u0000\u0000\u0000\uD7BF\u0000\u0000\u0000\uBCE5\u0000\u0000" + // 17670 - 17674
-                "\u0000\u0000\u008F\uBCED\u0000\uC4A5\u0000\u0000\u0000\uB6AF" + // 17675 - 17679
-                "\u0000\uD7BA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC9AB" + // 17680 - 17684
-                "\u0000\u0000\u0000\uC3C6\u0000\u0000\u0000\uD7BB\u0000\u0000" + // 17685 - 17689
-                "\u0000\u0000\u0000\u0000\u008F\uBCF4\u0000\u0000\u0000\u0000" + // 17690 - 17694
-                "\u0000\uD7BC\u0000\u0000\u0000\uB6B0\u0000\u0000\u0000\uD7BD" + // 17695 - 17699
-                "\u0000\u0000\u0000\uD7BE\u0000\u0000\u0000\u0000\u0000\uD7C0" + // 17700 - 17704
-                "\u0000\u0000\u0000\uC5F6\u0000\u0000\u0000\u0000\u0000\uD7C1" + // 17705 - 17709
-                "\u0000\uD7C2\u0000\u0000\u0000\uD7C3\u0000\u0000\u0000\u0000" + // 17710 - 17714
-                "\u0000\uD7B4\u0000\uD7B3\u0000\u0000\u0000\u0000\u0000\uE2B3" + // 17715 - 17719
-                "\u0000\uC7D6\u0000\u0000\u0000\u0000\u0000\uCBDF\u0000\u0000" + // 17720 - 17724
-                "\u0000\uB1CE\u0000\u0000\u0000\uB1D7\u0000\u0000\u0000\u0000" + // 17725 - 17729
-                "\u0000\uE2B4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17730 - 17734
-                "\u0000\uE2B6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2B5" + // 17735 - 17739
-                "\u0000\uC5F0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC0B9" + // 17740 - 17744
-                "\u0000\uDDB9\u0000\u0000\u0000\uE2B7\u0000\uCCC1\u0000\uD2AD" + // 17745 - 17749
-                "\u0000\u0000\u0000\uC0AA\u0000\uD2AA\u0000\uB6D0\u0000\u0000" + // 17750 - 17754
-                "\u0000\uD2AB\u0000\uB4AB\u0000\u0000\u0000\u0000\u0000\u0000" + // 17755 - 17759
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17760 - 17764
-                "\u0000\u0000\u0000\u0000\u0000\uB7AE\u0000\uD2AE\u0000\u0000" + // 17765 - 17769
-                "\u0000\uD2AF\u0000\u0000\u0000\u0000\u0000\uD2B0\u0000\uD2B1" + // 17770 - 17774
-                "\u0000\uBCDB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB8FB" + // 17775 - 17779
-                "\u0000\uCCDE\u008F\uB3E5\u0000\uD2A6\u0000\u0000\u0000\uCBD6" + // 17780 - 17784
-                "\u0000\u0000\u0000\uC4BC\u0000\u0000\u0000\uCDA6\u0000\u0000" + // 17785 - 17789
-                "\u0000\uCAD9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD2A7" + // 17790 - 17794
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0D5" + // 17795 - 17799
-                "\u0000\u0000\u0000\u0000\u0000\uC6B0\u0000\u0000\u0000\uD2A8" + // 17800 - 17804
-                "\u0000\uB4AA\u0000\uCCB3\u0000\u0000\u008F\uB3EE\u0000\u0000" + // 17805 - 17809
-                "\u0000\uBEA1\u0000\uD2A9\u0000\uCAE7\u0000\uB2C3\u0000\u0000" + // 17810 - 17814
-                "\u0000\u0000\u0000\uCEF4\u0000\u0000\u0000\u0000\u008F\uB3DB" + // 17815 - 17819
-                "\u0000\u0000\u0000\u0000\u0000\uBDF5\u0000\uC5D8\u0000\uB9E5" + // 17820 - 17824
-                "\u0000\uD2A2\u0000\uD2A3\u0000\u0000\u008F\uB3DD\u0000\u0000" + // 17825 - 17829
-                "\u0000\uCEE5\u0000\u0000\u0000\u0000\u0000\uCFAB\u0000\uD2A5" + // 17830 - 17834
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB8FA\u0000\u0000" + // 17835 - 17839
-                "\u0000\u0000\u0000\uD2A4\u0000\u0000\u0000\uB3AF\u0000\u0000" + // 17840 - 17844
-                "\u0000\uCADB\u0000\u0000\u0000\uD7B1\u0000\uCFAE\u0000\u0000" + // 17845 - 17849
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD7B2\u0000\uCAC0" + // 17850 - 17854
-                "\u0000\uD7B5\u0000\uD0A1\u0000\uD0B1\u0000\u0000\u0000\uBCB0" + // 17855 - 17859
-                "\u0000\uC6F5\u0000\uD7B6\u0000\u0000\u0000\uB5DD\u0000\uC4A4" + // 17860 - 17864
-                "\u0000\uB0FA\u0000\uD7B7\u0000\uCAA6\u0000\uB9B0\u0000\u0000" + // 17865 - 17869
-                "\u0000\u0000\u0000\uC3D0\u0000\u0000\u0000\u0000\u0000\u0000" + // 17870 - 17874
-                "\u0000\uC4EF\u0000\uC5E1\u0000\u0000\u0000\u0000\u0000\uBFCF" + // 17875 - 17879
-                "\u0000\uD1E3\u0000\u0000\u0000\uCAAC\u0000\uC0DA\u0000\uB4A2" + // 17880 - 17884
-                "\u0000\u0000\u0000\uB4A9\u0000\uD1E4\u0000\u0000\u0000\u0000" + // 17885 - 17889
-                "\u0000\uD1E6\u0000\u0000\u0000\u0000\u0000\uB7BA\u0000\u0000" + // 17890 - 17894
-                "\u0000\u0000\u0000\uD1E5\u008F\uB3B5\u0000\u0000\u0000\uCEF3" + // 17895 - 17899
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17900 - 17904
-                "\u0000\uBDE9\u0000\u0000\u0000\u0000\u0000\uDCDB\u0000\u0000" + // 17905 - 17909
-                "\u0000\u0000\u0000\uDCE2\u0000\u0000\u0000\u0000\u0000\u0000" + // 17910 - 17914
-                "\u0000\u0000\u0000\uDCE8\u0000\uC8F5\u0000\uDCEE\u0000\u0000" + // 17915 - 17919
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDCE9" + // 17920 - 17924
-                "\u0000\uDCEC\u0000\uDCE6\u0000\u0000\u0000\u0000\u0000\uC3F4" + // 17925 - 17929
-                "\u0000\u0000\u0000\uC9B8\u0000\u0000\u0000\uDCDC\u0000\u0000" + // 17930 - 17934
-                "\u0000\u0000\u0000\uDCE4\u0000\uBEC0\u0000\uD1DC\u0000\uCBDE" + // 17935 - 17939
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBDE8" + // 17940 - 17944
-                "\u0000\uC2FC\u0000\u0000\u0000\uD1DE\u0000\uC6E4\u0000\u0000" + // 17945 - 17949
-                "\u008F\uF4A4\u0000\uD1DF\u0000\u0000\u0000\u0000\u0000\uD1E0" + // 17950 - 17954
-                "\u0000\uB3AE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD1E1" + // 17955 - 17959
-                "\u0000\uB6A7\u0000\u0000\u0000\uC6CC\u0000\uB1FA\u0000\uBDD0" + // 17960 - 17964
-                "\u0000\u0000\u0000\u0000\u0000\uC8A1\u0000\uD1E2\u0000\u0000" + // 17965 - 17969
-                "\u0000\uC4A3\u0000\u0000\u0000\uB9AD\u0000\uBEB1\u0000\u0000" + // 17970 - 17974
-                "\u0000\u0000\u0000\uC8DF\u0000\u0000\u0000\u0000\u0000\uBEB2" + // 17975 - 17979
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBDF8" + // 17980 - 17984
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17985 - 17989
-                "\u0000\uC4EC\u0000\uCAF9\u0000\uC5B9\u0000\u0000\u0000\u0000" + // 17990 - 17994
-                "\u0000\uB9AE\u0000\u0000\u0000\uC9DC\u0000\u0000\u0000\u0000" + // 17995 - 17999
-                "\u0000\u0000\u0000\uE2F2\u0000\u0000\u0000\u0000\u0000\u0000" + // 18000 - 18004
-                "\u0000\uCACB\u0000\u0000\u0000\uC0D9\u0000\uE2F4\u0000\u0000" + // 18005 - 18009
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2F5\u0000\u0000" + // 18010 - 18014
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2F3" + // 18015 - 18019
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB3CE" + // 18020 - 18024
-                "\u0000\u0000\u0000\uE2FB\u0000\u0000\u0000\uE2FA\u0000\u0000" + // 18025 - 18029
-                "\u0000\uD6FA\u0000\uD6FB\u0000\uC7D1\u0000\u0000\u0000\u0000" + // 18030 - 18034
-                "\u0000\u0000\u0000\u0000\u0000\uD6FC\u0000\uCEF7\u0000\uCFAD" + // 18035 - 18039
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD6FE" + // 18040 - 18044
-                "\u0000\uD6FD\u0000\u0000\u0000\u0000\u0000\uB3C7\u0000\u0000" + // 18045 - 18049
-                "\u0000\u0000\u0000\uD7A1\u0000\u0000\u0000\u0000\u0000\u0000" + // 18050 - 18054
-                "\u0000\uD7A4\u0000\uD7A5\u0000\u0000\u0000\uD7A3\u0000\u0000" + // 18055 - 18059
-                "\u0000\uC9C0\u0000\uB4A7\u0000\u0000\u0000\uD1CF\u0000\u0000" + // 18060 - 18064
-                "\u0000\uD1CD\u0000\uCCBD\u0000\uD1CE\u0000\u0000\u0000\uC9DA" + // 18065 - 18069
-                "\u0000\uD1D0\u0000\uD1D1\u0000\uD1D2\u0000\uC5DF\u0000\u0000" + // 18070 - 18074
-                "\u0000\u0000\u0000\u0000\u0000\uD1D6\u0000\uD1D4\u0000\uD1D5" + // 18075 - 18079
-                "\u0000\uD1D3\u0000\uBAE3\u0000\uD1D7\u0000\uCCEA\u0000\uCEE4" + // 18080 - 18084
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18085 - 18089
-                "\u0000\uD1D8\u008F\uB2FC\u0000\u0000\u0000\uC9F5\u0000\uC0EC" + // 18090 - 18094
-                "\u0000\u0000\u0000\uBCCD\u0000\uD5F1\u0000\uBEAD\u0000\uD5F2" + // 18095 - 18099
-                "\u0000\uD5F3\u0000\uB0D3\u0000\uC2BA\u0000\uBFD2\u0000\u0000" + // 18100 - 18104
-                "\u0000\uD5F4\u0000\uC6B3\u0000\uBEAE\u0000\u0000\u0000\uBEAF" + // 18105 - 18109
-                "\u0000\u0000\u0000\uD5F5\u0000\u0000\u0000\u0000\u0000\uC0ED" + // 18110 - 18114
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBEB0\u0000\u0000" + // 18115 - 18119
-                "\u0000\u0000\u0000\u0000\u008F\uBAEB\u0000\u0000\u0000\uB2AC" + // 18120 - 18124
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uBBB3" + // 18125 - 18129
-                "\u0000\u0000\u0000\uC1BB\u0000\uB4E4\u0000\u0000\u0000\uD6AD" + // 18130 - 18134
-                "\u0000\uCCA8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18135 - 18139
-                "\u0000\uC2D2\u0000\u0000\u0000\uB3D9\u0000\u0000\u0000\u0000" + // 18140 - 18144
-                "\u0000\uD6AF\u0000\uD6B1\u0000\uB4DF\u0000\u0000\u008F\uBBB8" + // 18145 - 18149
-                "\u0000\uD6AE\u0000\uD6B0\u0000\u0000\u0000\uD6B3\u0000\u0000" + // 18150 - 18154
-                "\u0000\uBDE4\u0000\u0000\u0000\uC1E3\u0000\u0000\u0000\uB9A9" + // 18155 - 18159
-                "\u0000\uBAB8\u0000\uB9AA\u0000\uB5F0\u0000\u0000\u0000\u0000" + // 18160 - 18164
-                "\u0000\uD6E0\u0000\u0000\u0000\u0000\u0000\uBAB9\u0000\u0000" + // 18165 - 18169
-                "\u0000\u0000\u0000\uB8CA\u0000\uD6E1\u0000\uCCA6\u0000\uC7C3" + // 18170 - 18174
-                "\u0000\uD6E2\u0000\u0000\u0000\uB9AB\u0000\u0000\u0000\u0000" + // 18175 - 18179
-                "\u0000\u0000\u0000\uB4AC\u0000\u0000\u0000\uC3A7\u0000\uB6D2" + // 18180 - 18184
-                "\u0000\u0000\u0000\uC8A8\u0000\uD6F1\u0000\uCABE\u0000\uD6F2" + // 18185 - 18189
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18190 - 18194
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18195 - 18199
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB4B3\u0000\uCABF" + // 18200 - 18204
-                "\u0000\uC7AF\u0000\uD6F4\u0000\uD6F5\u0000\u0000\u0000\uB9AC" + // 18205 - 18209
-                "\u0000\uB4B4\u0000\uD6F6\u0000\uB8B8\u0000\uCDC4\u0000\uCDA9" + // 18210 - 18214
-                "\u0000\uB4F6\u0000\uD6F8\u0000\uD1C3\u0000\u0000\u0000\uD1C4" + // 18215 - 18219
-                "\u0000\u0000\u0000\u0000\u0000\uC6E2\u0000\uB1DF\u0000\u0000" + // 18220 - 18224
-                "\u0000\u0000\u0000\uD1C7\u0000\uBAFD\u0000\u0000\u0000\uD1C6" + // 18225 - 18229
-                "\u0000\uBAC6\u0000\u0000\u0000\uD1C8\u0000\uE6EE\u0000\uD1C9" + // 18230 - 18234
-                "\u0000\uCBC1\u0000\uD1CA\u0000\u0000\u0000\uD1CB\u0000\uD1CC" + // 18235 - 18239
-                "\u0000\uBEE9\u0000\u0000\u0000\uBCCC\u0000\u0000\u0000\u0000" + // 18240 - 18244
-                "\u0000\u0000\u008F\uB2F5\u0000\u0000\u0000\u0000\u008F\uC4EA" + // 18245 - 18249
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDCE1" + // 18250 - 18254
-                "\u0000\uDCDA\u0000\u0000\u0000\u0000\u0000\uDCE7\u0000\u0000" + // 18255 - 18259
-                "\u0000\uDCE5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18260 - 18264
-                "\u0000\uDCE0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18265 - 18269
-                "\u0000\u0000\u0000\u0000\u0000\uDCDF\u0000\u0000\u0000\uC4D0" + // 18270 - 18274
-                "\u0000\u0000\u0000\uC1E5\u0000\u0000\u0000\uDCDD\u0000\uD1BA" + // 18275 - 18279
-                "\u0000\uB0F4\u0000\u0000\u0000\uB8B5\u0000\uB7BB\u0000\uBDBC" + // 18280 - 18284
-                "\u0000\uC3FB\u0000\uB6A4\u0000\uC0E8\u0000\uB8F7\u008F\uB2E6" + // 18285 - 18289
-                "\u0000\uB9EE\u0000\uD1BC\u0000\uCCC8\u0000\uC5C6\u0000\u0000" + // 18290 - 18294
-                "\u0000\uBBF9\u0000\u0000\u0000\uD1BB\u0000\u0000\u0000\uD1BD" + // 18295 - 18299
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18300 - 18304
-                "\u0000\uC5DE\u0000\u0000\u0000\uB3F5\u0000\u0000\u0000\u0000" + // 18305 - 18309
-                "\u0000\u0000\u0000\uB7E2\u0000\u0000\u0000\u0000\u0000\u0000" + // 18310 - 18314
-                "\u0000\u0000\u0000\uD9FD\u0000\u0000\u0000\u0000\u0000\u0000" + // 18315 - 18319
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18320 - 18324
-                "\u0000\u0000\u0000\uBBB5\u0000\uD9FA\u0000\u0000\u0000\uD9F9" + // 18325 - 18329
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7B2" + // 18330 - 18334
-                "\u0000\u0000\u0000\u0000\u008F\uC0F4\u0000\uC6B5\u0000\u0000" + // 18335 - 18339
-                "\u0000\uB2C9\u0000\uD5EA\u0000\u0000\u0000\uD5E8\u0000\uD5EC" + // 18340 - 18344
-                "\u0000\uD5E9\u0000\uC7AB\u0000\uDCCD\u0000\uBFB3\u0000\u0000" + // 18345 - 18349
-                "\u0000\uD5ED\u008F\uF4AE\u0000\u0000\u0000\uCEC0\u0000\u0000" + // 18350 - 18354
-                "\u0000\uD5EE\u0000\u0000\u0000\u0000\u0000\uD5F0\u0000\u0000" + // 18355 - 18359
-                "\u0000\uC3FE\u0000\uD5EF\u0000\u0000\u0000\uC0A3\u0000\u0000" + // 18360 - 18364
-                "\u0000\uBBFB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC2D0" + // 18365 - 18369
-                "\u0000\uBCF7\u0000\uB5B7\u0000\uD1AE\u0000\uD1AF\u0000\u0000" + // 18370 - 18374
-                "\u0000\uB2AF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18375 - 18379
-                "\u0000\uD1AD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18380 - 18384
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBCF4" + // 18385 - 18389
-                "\u0000\u0000\u0000\uD1B2\u0000\uD1B1\u0000\uD1B0\u0000\u0000" + // 18390 - 18394
-                "\u0000\uD0D6\u0000\u0000\u0000\uD1B3\u0000\u0000\u0000\u0000" + // 18395 - 18399
-                "\u0000\u0000\u0000\u0000\u0000\uBDFE\u0000\uD0FA\u0000\u0000" + // 18400 - 18404
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD0FC\u0000\u0000" + // 18405 - 18409
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18410 - 18414
-                "\u0000\u0000\u0000\uCBB5\u0000\u0000\u0000\u0000\u0000\u0000" + // 18415 - 18419
-                "\u0000\uB7E6\u0000\u0000\u0000\u0000\u008F\uB2A3\u0000\u0000" + // 18420 - 18424
-                "\u0000\u0000\u0000\u0000\u0000\uBBB1\u0000\uC8F7\u0000\uD0FB" + // 18425 - 18429
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18430 - 18434
-                "\u0000\uB7F2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18435 - 18439
-                "\u0000\u0000\u0000\u0000\u0000\uD0F8\u0000\u0000\u0000\u0000" + // 18440 - 18444
-                "\u0000\u0000\u008F\uB1F4\u0000\u0000\u0000\uBCC5\u0000\u0000" + // 18445 - 18449
-                "\u0000\uC2A6\u0000\uC4E5\u0000\uB6F6\u0000\u0000\u0000\uD0F9" + // 18450 - 18454
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB5B6" + // 18455 - 18459
-                "\u0000\u0000\u0000\u0000\u0000\uDAF1\u0000\u0000\u0000\uDAED" + // 18460 - 18464
-                "\u008F\uF4B7\u0000\uB3A2\u0000\uDAEE\u0000\uDAEF\u0000\uC8D5" + // 18465 - 18469
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC9E1" + // 18470 - 18474
-                "\u0000\uB7CA\u0000\uDAF2\u0000\u0000\u0000\u0000\u008F\uC2C4" + // 18475 - 18479
-                "\u0000\uC0B2\u0000\u0000\u0000\uBEBD\u0000\u0000\u0000\u0000" + // 18480 - 18484
-                "\u0000\u0000\u0000\uC3D2\u0000\u0000\u0000\u0000\u0000\u0000" + // 18485 - 18489
-                "\u0000\u0000\u0000\u0000\u0000\uE2EB\u0000\u0000\u0000\u0000" + // 18490 - 18494
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18495 - 18499
-                "\u0000\u0000\u008F\uCFE2\u0000\u0000\u0000\u0000\u0000\u0000" + // 18500 - 18504
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18505 - 18509
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18510 - 18514
-                "\u0000\u0000\u0000\uBECB\u0000\u0000\u0000\u0000\u0000\uDBD2" + // 18515 - 18519
-                "\u0000\u0000\u0000\uDBCF\u0000\u0000\u0000\u0000\u0000\uDBD7" + // 18520 - 18524
-                "\u0000\u0000\u0000\uDBCD\u0000\u0000\u0000\u0000\u0000\uDBCB" + // 18525 - 18529
-                "\u0000\u0000\u0000\uDBD3\u0000\uDBC9\u0000\u0000\u0000\uC3EC" + // 18530 - 18534
-                "\u0000\u0000\u0000\uCCF8\u0000\uBCC6\u0000\uBAF4\u0000\u0000" + // 18535 - 18539
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBABA" + // 18540 - 18544
-                "\u0000\u0000\u0000\u0000\u0000\uCBEF\u0000\uB3C1\u008F\uB1DF" + // 18545 - 18549
-                "\u0000\u0000\u008F\uB1E1\u0000\uD0F0\u0000\u0000\u0000\u0000" + // 18550 - 18554
-                "\u008F\uB1E3\u0000\uD0F1\u0000\uD0F5\u0000\uB0CE\u0000\u0000" + // 18555 - 18559
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCAD0" + // 18560 - 18564
-                "\u0000\uD0F4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18565 - 18569
-                "\u0000\uD0F3\u0000\uD0F7\u0000\u0000\u0000\u0000\u0000\u0000" + // 18570 - 18574
-                "\u0000\uD0F6\u0000\u0000\u0000\uC4E4\u0000\u0000\u0000\u0000" + // 18575 - 18579
-                "\u0000\u0000\u0000\uD8F0\u0000\u0000\u0000\u0000\u0000\uD8EF" + // 18580 - 18584
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18585 - 18589
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18590 - 18594
-                "\u0000\u0000\u0000\uC4A8\u0000\u0000\u0000\uD8F3\u0000\u0000" + // 18595 - 18599
-                "\u0000\uD8F1\u0000\uD8E7\u0000\uB7FC\u0000\u0000\u0000\uD8F2" + // 18600 - 18604
-                "\u0000\u0000\u0000\uD8F6\u0000\uD8F5\u0000\uD8F7\u0000\uD8F4" + // 18605 - 18609
-                "\u0000\uB6A2\u0000\uBFAE\u0000\u0000\u0000\uCBF3\u0000\uD0DF" + // 18610 - 18614
-                "\u0000\uD0E0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18615 - 18619
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBDA4" + // 18620 - 18624
-                "\u0000\uD0ED\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7D0" + // 18625 - 18629
-                "\u0000\u0000\u0000\uC9B6\u0000\uD0E8\u0000\u0000\u0000\uCAF0" + // 18630 - 18634
-                "\u0000\u0000\u0000\uB2B6\u0000\u0000\u0000\u0000\u0000\u0000" + // 18635 - 18639
-                "\u0000\uD0EC\u008F\uB1C8\u008F\uB0D2\u0000\uB4EB\u0000\u0000" + // 18640 - 18644
-                "\u008F\uB0D4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18645 - 18649
-                "\u0000\u0000\u0000\uD0C4\u0000\uB0CB\u0000\u0000\u0000\u0000" + // 18650 - 18654
-                "\u0000\uB8E0\u0000\uB4EC\u0000\uC9FA\u0000\uC8B2\u0000\uB5D9" + // 18655 - 18659
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18660 - 18664
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB2F1\u0000\u0000" + // 18665 - 18669
-                "\u0000\uD0E7\u0000\uC5C1\u0000\u0000\u0000\u0000\u0000\uB4BA" + // 18670 - 18674
-                "\u0000\uBBB6\u0000\u0000\u0000\u0000\u0000\uC6D8\u0000\u0000" + // 18675 - 18679
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7C9" + // 18680 - 18684
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBFF4\u0000\u0000" + // 18685 - 18689
-                "\u0000\uDACA\u0000\u0000\u0000\uC0B0\u0000\uC5A8\u0000\u0000" + // 18690 - 18694
-                "\u0000\uC9DF\u0000\uDACB\u0000\u0000\u0000\u0000\u0000\u0000" + // 18695 - 18699
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDAF" + // 18700 - 18704
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDED7\u0000\u0000" + // 18705 - 18709
-                "\u0000\u0000\u0000\uDED0\u0000\uC5F2\u0000\u0000\u0000\u0000" + // 18710 - 18714
-                "\u0000\uDED3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDED9" + // 18715 - 18719
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18720 - 18724
-                "\u0000\u0000\u0000\u0000\u0000\uCFD1\u0000\uBCBE\u0000\uBDBA" + // 18725 - 18729
-                "\u0000\uBFCE\u0000\uD0BE\u0000\u0000\u0000\uD0BC\u0000\u0000" + // 18730 - 18734
-                "\u0000\uD0BD\u0000\uB5D8\u0000\u0000\u0000\u0000\u0000\uBAA3" + // 18735 - 18739
-                "\u0000\uB2F0\u0000\u0000\u0000\uD0BB\u0000\uD0BA\u0000\uCAA9" + // 18740 - 18744
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBBC6" + // 18745 - 18749
-                "\u0000\uBBC5\u0000\uC2BE\u0000\uD0BF\u0000\uC9D5\u0000\uC0E7" + // 18750 - 18754
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1B8\u0000\uD0C0" + // 18755 - 18759
-                "\u0000\uD0C2\u0000\uD0B5\u0000\uCBB4\u0000\uD0B6\u0000\u0000" + // 18760 - 18764
-                "\u0000\uB8F2\u0000\uB0E7\u0000\uCBF2\u0000\u0000\u0000\uB5FC" + // 18765 - 18769
-                "\u0000\u0000\u0000\u0000\u0000\uB5FD\u0000\uB5FE\u0000\uC4E2" + // 18770 - 18774
-                "\u0000\uCEBC\u0000\u0000\u0000\uD0B7\u0000\u0000\u0000\u0000" + // 18775 - 18779
-                "\u0000\uD0B8\u0000\u0000\u0000\u0000\u0000\uD0B9\u0000\u0000" + // 18780 - 18784
-                "\u0000\u0000\u0000\u0000\u0000\uBFCD\u0000\u0000\u0000\u0000" + // 18785 - 18789
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD0E6\u0000\uD0EF" + // 18790 - 18794
-                "\u0000\u0000\u0000\u0000\u0000\uC1D2\u0000\u0000\u0000\uB8C4" + // 18795 - 18799
-                "\u0000\u0000\u0000\uC7DC\u0000\u0000\u0000\uE0C7\u0000\u0000" + // 18800 - 18804
-                "\u0000\uD0EE\u0000\uC5DD\u0000\u0000\u0000\uD0E3\u0000\u0000" + // 18805 - 18809
-                "\u0000\uB8F6\u0000\u0000\u0000\u0000\u0000\uB8F5\u0000\uD0E1" + // 18810 - 18814
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uB1D7\u0000\uBCDA" + // 18815 - 18819
-                "\u0000\uB5B5\u0000\u0000\u0000\uD0AC\u0000\u0000\u0000\u0000" + // 18820 - 18824
-                "\u0000\uD0AD\u0000\uCEBB\u0000\u0000\u0000\uCDBD\u0000\uC1E8" + // 18825 - 18829
-                "\u0000\uD0AF\u0000\uBBF6\u0000\uC6F3\u0000\u0000\u0000\uD0B2" + // 18830 - 18834
-                "\u0000\u0000\u0000\u0000\u0000\uB1BE\u0000\uB8DF\u0000\u0000" + // 18835 - 18839
-                "\u0000\uB8DE\u0000\uB0E6\u0000\u0000\u0000\u0000\u0000\uCFCB" + // 18840 - 18844
-                "\u0000\uCFCA\u0000\u0000\u0000\uBAB3\u0000\uB0A1\u0000\u0000" + // 18845 - 18849
-                "\u0000\uD0B3\u0000\uD0B4\u0000\uB0EC\u0000\uC3FA\u0000\u0000" + // 18850 - 18854
-                "\u0000\uBCB7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCBFC" + // 18855 - 18859
-                "\u0000\uBEE6\u0000\uBBB0\u0000\uBEE5\u0000\uB2BC\u0000\u0000" + // 18860 - 18864
-                "\u0000\uC9D4\u0000\uCDBF\u0000\u0000\u0000\uD0A2\u0000\uB1AF" + // 18865 - 18869
-                "\u0000\u0000\u0000\u0000\u0000\uB3EE\u0000\uD0A3\u0000\uC0A4" + // 18870 - 18874
-                "\u0000\uD2C2\u0000\uB5D6\u0000\uCABA\u0000\u0000\u0000\u0000" + // 18875 - 18879
-                "\u0000\u0000\u0000\u0000\u0000\uBEE7\u0000\u0000\u0000\uC3E4" + // 18880 - 18884
-                "\u0000\u0000\u0000\uD5C1\u0000\u0000\u0000\u0000\u0000\uD5C3" + // 18885 - 18889
-                "\u0000\u0000\u0000\u0000\u0000\uD5C4\u0000\u0000\u0000\u0000" + // 18890 - 18894
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18895 - 18899
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18900 - 18904
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD5C6" + // 18905 - 18909
-                "\u0000\uD5C7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18910 - 18914
-                "\u0000\uDCED\u0000\u0000\u008F\uC5A7\u0000\uDCF2\u0000\uDCF6" + // 18915 - 18919
-                "\u0000\u0000\u0000\u0000\u0000\uB6B6\u0000\u0000\u0000\u0000" + // 18920 - 18924
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18925 - 18929
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18930 - 18934
-                "\u0000\uB5CC\u0000\uDCF4\u0000\u0000\u0000\u0000\u0000\u0000" + // 18935 - 18939
-                "\u0000\u0000\u0000\u0000\u0000\uB5A1\u0000\uA5E0\u0000\uA5E1" + // 18940 - 18944
-                "\u0000\uA5E2\u0000\uA5E3\u0000\uA5E4\u0000\uA5E5\u0000\uA5E6" + // 18945 - 18949
-                "\u0000\uA5E7\u0000\uA5E8\u0000\uA5E9\u0000\uA5EA\u0000\uA5EB" + // 18950 - 18954
-                "\u0000\uA5EC\u0000\uA5ED\u0000\uA5EE\u0000\uA5EF\u0000\uA5F0" + // 18955 - 18959
-                "\u0000\uA5F1\u0000\uA5F2\u0000\uA5F3\u0000\uA5F4\u0000\uA5F5" + // 18960 - 18964
-                "\u0000\uA5F6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18965 - 18969
-                "\u0000\uA1A6\u0000\uA1BC\u0000\uA1B3\u0000\uA1B4\u0000\u0000" + // 18970 - 18974
-                "\u0000\uB2C7\u0000\uD5BF\u0000\u0000\u0000\u0000\u0000\u0000" + // 18975 - 18979
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBCBB\u0000\u0000" + // 18980 - 18984
-                "\u0000\uD5BE\u0000\uB7F9\u0000\u0000\u0000\u0000\u0000\u0000" + // 18985 - 18989
-                "\u0000\uD5CC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18990 - 18994
-                "\u0000\u0000\u0000\uD5C5\u0000\uD5C2\u0000\u0000\u0000\u0000" + // 18995 - 18999
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19000 - 19004
-                "\u0000\u0000\u0000\u0000\u0000\uEFCF\u0000\u0000\u0000\u0000" + // 19005 - 19009
-                "\u0000\uEEE5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19010 - 19014
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCEEB\u0000\u0000" + // 19015 - 19019
-                "\u0000\u0000\u0000\uB8DA\u0000\u0000\u008F\uE3D4\u008F\uE3D5" + // 19020 - 19024
-                "\u0000\u0000\u008F\uE3D6\u0000\u0000\u0000\u0000\u0000\uEEEF" + // 19025 - 19029
-                "\u0000\uA5C0\u0000\uA5C1\u0000\uA5C2\u0000\uA5C3\u0000\uA5C4" + // 19030 - 19034
-                "\u0000\uA5C5\u0000\uA5C6\u0000\uA5C7\u0000\uA5C8\u0000\uA5C9" + // 19035 - 19039
-                "\u0000\uA5CA\u0000\uA5CB\u0000\uA5CC\u0000\uA5CD\u0000\uA5CE" + // 19040 - 19044
-                "\u0000\uA5CF\u0000\uA5D0\u0000\uA5D1\u0000\uA5D2\u0000\uA5D3" + // 19045 - 19049
-                "\u0000\uA5D4\u0000\uA5D5\u0000\uA5D6\u0000\uA5D7\u0000\uA5D8" + // 19050 - 19054
-                "\u0000\uA5D9\u0000\uA5DA\u0000\uA5DB\u0000\uA5DC\u0000\uA5DD" + // 19055 - 19059
-                "\u0000\uA5DE\u0000\uA5DF\u0000\uA4E0\u0000\uA4E1\u0000\uA4E2" + // 19060 - 19064
-                "\u0000\uA4E3\u0000\uA4E4\u0000\uA4E5\u0000\uA4E6\u0000\uA4E7" + // 19065 - 19069
-                "\u0000\uA4E8\u0000\uA4E9\u0000\uA4EA\u0000\uA4EB\u0000\uA4EC" + // 19070 - 19074
-                "\u0000\uA4ED\u0000\uA4EE\u0000\uA4EF\u0000\uA4F0\u0000\uA4F1" + // 19075 - 19079
-                "\u0000\uA4F2\u0000\uA4F3\u0000\u0000\u0000\u0000\u0000\u0000" + // 19080 - 19084
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1AB" + // 19085 - 19089
-                "\u0000\uA1AC\u0000\uA1B5\u0000\uA1B6\u0000\u0000\u0000\uB0D2" + // 19090 - 19094
-                "\u0000\u0000\u0000\uB0A3\u0000\u0000\u0000\u0000\u0000\u0000" + // 19095 - 19099
-                "\u0000\u0000\u0000\u0000\u0000\uD5B2\u0000\u0000\u0000\u0000" + // 19100 - 19104
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19105 - 19109
-                "\u0000\uD5B0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19110 - 19114
-                "\u0000\u0000\u0000\u0000\u0000\uCCBC\u0000\u0000\u0000\uD5B3" + // 19115 - 19119
-                "\u0000\u0000\u0000\uD5B1\u0000\u0000\u0000\u0000\u0000\uD5AF" + // 19120 - 19124
-                "\u0000\uA4C0\u0000\uA4C1\u0000\uA4C2\u0000\uA4C3\u0000\uA4C4" + // 19125 - 19129
-                "\u0000\uA4C5\u0000\uA4C6\u0000\uA4C7\u0000\uA4C8\u0000\uA4C9" + // 19130 - 19134
-                "\u0000\uA4CA\u0000\uA4CB\u0000\uA4CC\u0000\uA4CD\u0000\uA4CE" + // 19135 - 19139
-                "\u0000\uA4CF\u0000\uA4D0\u0000\uA4D1\u0000\uA4D2\u0000\uA4D3" + // 19140 - 19144
-                "\u0000\uA4D4\u0000\uA4D5\u0000\uA4D6\u0000\uA4D7\u0000\uA4D8" + // 19145 - 19149
-                "\u0000\uA4D9\u0000\uA4DA\u0000\uA4DB\u0000\uA4DC\u0000\uA4DD" + // 19150 - 19154
-                "\u0000\uA4DE\u0000\uA4DF\u0000\uA1A1\u0000\uA1A2\u0000\uA1A3" + // 19155 - 19159
-                "\u0000\uA1B7\u0000\u0000\u0000\uA1B9\u0000\uA1BA\u0000\uA1BB" + // 19160 - 19164
-                "\u0000\uA1D2\u0000\uA1D3\u0000\uA1D4\u0000\uA1D5\u0000\uA1D6" + // 19165 - 19169
-                "\u0000\uA1D7\u0000\uA1D8\u0000\uA1D9\u0000\uA1DA\u0000\uA1DB" + // 19170 - 19174
-                "\u0000\uA2A9\u0000\uA2AE\u0000\uA1CC\u0000\uA1CD\u0000\u0000" + // 19175 - 19179
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19180 - 19184
-                "\u0000\uA1C1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBFB4" + // 19185 - 19189
-                "\u0000\u0000\u0000\uC9AC\u0000\u0000\u0000\u0000\u0000\u0000" + // 19190 - 19194
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB4F7\u0000\uC7A6" + // 19195 - 19199
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19200 - 19204
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD7D6\u0000\uBBD6" + // 19205 - 19209
-                "\u0000\uCBBA\u0000\uCBBB\u0000\u0000\u0000\u0000\u0000\uB1FE" + // 19210 - 19214
-                "\u0000\uD7DB\u008F\uBDC2\u0000\u0000\u0000\uD5A2\u0000\uC7A1" + // 19215 - 19219
-                "\u0000\uC8DE\u0000\uCCD1\u0000\u0000\u0000\u0000\u0000\u0000" + // 19220 - 19224
-                "\u0000\u0000\u0000\u0000\u0000\uC7A5\u0000\u0000\u0000\u0000" + // 19225 - 19229
-                "\u0000\uD5AB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19230 - 19234
-                "\u0000\u0000\u0000\uB5B8\u0000\u0000\u0000\u0000\u0000\uCDC5" + // 19235 - 19239
-                "\u0000\u0000\u0000\u0000\u0000\uCCAF\u0000\u0000\u0000\uD6AC" + // 19240 - 19244
-                "\u0000\u0000\u0000\uD5A3\u0000\u0000\u0000\u0000\u0000\uCEA1" + // 19245 - 19249
-                "\u0000\uE1DC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19250 - 19254
-                "\u0000\u0000\u0000\uC1E9\u0000\u0000\u0000\u0000\u0000\u0000" + // 19255 - 19259
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1E2\u0000\u0000" + // 19260 - 19264
-                "\u0000\uE1E4\u0000\uE1E5\u0000\uC3D4\u0000\u0000\u0000\u0000" + // 19265 - 19269
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1E3\u0000\u0000" + // 19270 - 19274
-                "\u0000\uE1E0\u0000\u0000\u0000\uE1DE\u0000\uE1DF\u0000\uA1EA" + // 19275 - 19279
-                "\u0000\u0000\u0000\uA1E9\u0000\u0000\u0000\u0000\u0000\u0000" + // 19280 - 19284
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19285 - 19289
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19290 - 19294
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19295 - 19299
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19300 - 19304
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19305 - 19309
-                "\u0000\u0000\u008F\uF4EB\u0000\u0000\u0000\u0000\u0000\u0000" + // 19310 - 19314
-                "\u0000\uB5A8\u0000\uB8C9\u0000\uD5D7\u0000\uB3D8\u0000\u0000" + // 19315 - 19319
-                "\u0000\u0000\u0000\uD5D8\u0000\u0000\u0000\uC2B9\u0000\u0000" + // 19320 - 19324
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD5D9\u0000\uD6A3" + // 19325 - 19329
-                "\u0000\u0000\u0000\uD5DA\u0000\u0000\u0000\uD5DB\u0000\u0000" + // 19330 - 19334
-                "\u0000\u0000\u0000\uD5DC\u0000\u0000\u0000\uD5DE\u0000\u0000" + // 19335 - 19339
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB8CE" + // 19340 - 19344
-                "\u0000\u0000\u0000\u0000\u0000\uDAC3\u0000\u0000\u0000\u0000" + // 19345 - 19349
-                "\u0000\u0000\u0000\u0000\u0000\uDAC6\u008F\uF4B5\u0000\uC9D2" + // 19350 - 19354
-                "\u0000\u0000\u0000\uB5DF\u0000\u0000\u0000\u0000\u0000\u0000" + // 19355 - 19359
-                "\u0000\uDAC5\u0000\uDAC4\u0000\uC7D4\u0000\uDAC7\u0000\uB6B5" + // 19360 - 19364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDAC9\u0000\uDAC8" + // 19365 - 19369
-                "\u0000\u0000\u0000\uC5B6\u0000\uD4C9\u0000\u0000\u0000\u0000" + // 19370 - 19374
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB1F6" + // 19375 - 19379
-                "\u0000\u0000\u0000\uC5B6\u0000\u0000\u0000\u0000\u0000\u0000" + // 19380 - 19384
-                "\u0000\u0000\u0000\uD4CB\u0000\u0000\u0000\uD4C7\u0000\u0000" + // 19385 - 19389
-                "\u0000\u0000\u0000\uBFD0\u0000\u0000\u0000\u0000\u0000\u0000" + // 19390 - 19394
-                "\u0000\uD4CF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19395 - 19399
-                "\u0000\uBDCE\u0000\u0000\u0000\uCAC9\u0000\u0000\u0000\u0000" + // 19400 - 19404
-                "\u0000\u0000\u0000\uD4D9\u0000\u0000\u0000\uC3C5\u0000\u0000" + // 19405 - 19409
-                "\u0000\u0000\u0000\uB2F5\u0000\u0000\u0000\uBEED\u0000\u0000" + // 19410 - 19414
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD4DB\u0000\u0000" + // 19415 - 19419
-                "\u0000\uD4DA\u0000\u0000\u0000\uB9E8\u0000\u0000\u0000\uD4DC" + // 19420 - 19424
-                "\u0000\uD4DE\u0000\uD4DD\u0000\u0000\u0000\u0000\u0000\uD4E0" + // 19425 - 19429
-                "\u0000\u0000\u0000\uD4D5\u0000\uD4E2\u0000\uA2A3\u0000\uA2A2" + // 19430 - 19434
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19435 - 19439
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19440 - 19444
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19445 - 19449
-                "\u0000\u0000\u0000\uA2A5\u0000\uA2A4\u0000\u0000\u0000\u0000" + // 19450 - 19454
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19455 - 19459
-                "\u0000\u0000\u0000\uA2A7\u0000\uA2A6\u0000\u0000\u0000\u0000" + // 19460 - 19464
-                "\u0000\uDAB9\u0000\uDABB\u0000\uDABA\u0000\u0000\u0000\u0000" + // 19465 - 19469
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9F8\u0000\uDABC" + // 19470 - 19474
-                "\u0000\uDAB0\u0000\u0000\u0000\u0000\u0000\uBBD9\u0000\u0000" + // 19475 - 19479
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDABD\u0000\uDABE" + // 19480 - 19484
-                "\u0000\uDAC0\u0000\uDABF\u0000\uDAC1\u0000\uB2FE\u0000\u0000" + // 19485 - 19489
-                "\u0000\uB9B6\u0000\u0000\u0000\u0000\u0000\uCAFC\u0000\uC0AF" + // 19490 - 19494
-                "\u0000\uA8B7\u0000\u0000\u0000\u0000\u0000\uA8B2\u0000\uA8A9" + // 19495 - 19499
-                "\u0000\uA8BE\u0000\u0000\u0000\u0000\u0000\uA8B9\u0000\u0000" + // 19500 - 19504
-                "\u0000\u0000\u0000\uA8B4\u0000\uA8A8\u0000\u0000\u0000\u0000" + // 19505 - 19509
-                "\u0000\uA8B8\u0000\uA8BD\u0000\u0000\u0000\u0000\u0000\uA8B3" + // 19510 - 19514
-                "\u0000\uA8AA\u0000\u0000\u0000\u0000\u0000\uA8BA\u0000\uA8BF" + // 19515 - 19519
-                "\u0000\u0000\u0000\u0000\u0000\uA8B5\u0000\uA8AB\u0000\u0000" + // 19520 - 19524
-                "\u0000\u0000\u0000\uA8BB\u0000\uA8A1\u0000\uA8AC\u0000\uA8A2" + // 19525 - 19529
-                "\u0000\uA8AD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19530 - 19534
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA8A3" + // 19535 - 19539
-                "\u0000\u0000\u0000\u0000\u0000\uA8AE\u0000\uA8A4\u0000\u0000" + // 19540 - 19544
-                "\u0000\u0000\u0000\uA8AF\u0000\uA8A6\u0000\u0000\u0000\u0000" + // 19545 - 19549
-                "\u0000\uA8B1\u0000\uA8A5\u0000\u0000\u0000\u0000\u0000\uA8B0" + // 19550 - 19554
-                "\u0000\uA8A7\u0000\uA8BC\u0000\u0000\u0000\u0000\u0000\uD9C4" + // 19555 - 19559
-                "\u0000\u0000\u0000\u0000\u0000\uC3B4\u0000\uD9BE\u0000\uD9C5" + // 19560 - 19564
-                "\u0000\uD9C0\u0000\uD9C7\u0000\uD9C3\u0000\u0000\u0000\uD9C2" + // 19565 - 19569
-                "\u0000\uC7EF\u0000\u0000\u0000\uD9BC\u0000\uB2FD\u0000\uD9BA" + // 19570 - 19574
-                "\u0000\uB5F1\u0000\uC2F3\u0000\uD9B6\u0000\u0000\u0000\u0000" + // 19575 - 19579
-                "\u0000\uD9B9\u0000\uB9B4\u0000\uC0DB\u0000\u0000\u0000\uBEB7" + // 19580 - 19584
-                "\u0000\uD9C1\u0000\uC7D2\u0000\u0000\u0000\u0000\u0000\uC0DD" + // 19585 - 19589
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19590 - 19594
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19595 - 19599
-                "\u0000\u0000\u0000\uD9F7\u0000\u0000\u0000\u0000\u0000\uC4CF" + // 19600 - 19604
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19605 - 19609
-                "\u0000\u0000\u0000\uC5A6\u0000\u0000\u0000\u0000\u0000\u0000" + // 19610 - 19614
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCAFB" + // 19615 - 19619
-                "\u0000\uBCCE\u0000\uD9E0\u0000\u0000\u0000\uD9DF\u0000\u0000" + // 19620 - 19624
-                "\u0000\u0000\u0000\uBFF8\u0000\u0000\u0000\u0000\u0000\u0000" + // 19625 - 19629
-                "\u0000\uB7FE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9D9" + // 19630 - 19634
-                "\u0000\uBEB9\u0000\u0000\u0000\u0000\u0000\uC6E8\u0000\uC7B1" + // 19635 - 19639
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBDE1" + // 19640 - 19644
-                "\u0000\u0000\u0000\uDFB3\u0000\u0000\u0000\u0000\u0000\u0000" + // 19645 - 19649
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDFAC\u0000\uC4AC" + // 19650 - 19654
-                "\u0000\uDFA9\u0000\uC4D9\u0000\u0000\u0000\u0000\u0000\u0000" + // 19655 - 19659
-                "\u0000\uDFCC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDFA6" + // 19660 - 19664
-                "\u0000\u0000\u0000\uDFA5\u0000\u0000\u0000\uDFAE\u0000\u0000" + // 19665 - 19669
-                "\u0000\u0000\u0000\u0000\u0000\uB3F6\u0000\uE3E2\u0000\uE3E1" + // 19670 - 19674
-                "\u0000\u0000\u0000\uE3E5\u0000\uE3DE\u0000\u0000\u0000\uE3E6" + // 19675 - 19679
-                "\u0000\uCEA9\u0000\u0000\u0000\uE3E7\u0000\u0000\u0000\uE3E8" + // 19680 - 19684
-                "\u0000\u0000\u008F\uD1E8\u0000\uD4F4\u0000\uE3EA\u0000\u0000" + // 19685 - 19689
-                "\u0000\uE3E9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE3EB" + // 19690 - 19694
-                "\u0000\uE3EC\u0000\u0000\u0000\uCEB5\u0000\uE3ED\u0000\u0000" + // 19695 - 19699
-                "\u0000\uF0EF\u0000\uA1E2\u0000\uA2E1\u0000\u0000\u0000\u0000" + // 19700 - 19704
-                "\u0000\u0000\u0000\u0000\u0000\uA1E5\u0000\uA1E6\u0000\u0000" + // 19705 - 19709
-                "\u0000\u0000\u0000\uA2E3\u0000\uA2E4\u0000\u0000\u0000\u0000" + // 19710 - 19714
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19715 - 19719
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19720 - 19724
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19725 - 19729
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7DE\u0000\u0000" + // 19730 - 19734
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19735 - 19739
-                "\u0000\u0000\u0000\uD5BB\u0000\uC9B2\u0000\u0000\u0000\u0000" + // 19740 - 19744
-                "\u0000\u0000\u0000\u0000\u0000\uCAB0\u0000\u0000\u0000\u0000" + // 19745 - 19749
-                "\u0000\uC6B4\u0000\u0000\u0000\uB7C6\u0000\u0000\u0000\uD8E2" + // 19750 - 19754
-                "\u0000\uD8DD\u0000\u0000\u0000\uD8E3\u0000\u0000\u0000\u0000" + // 19755 - 19759
-                "\u0000\u0000\u0000\uB7FB\u0000\u0000\u0000\u0000\u0000\u0000" + // 19760 - 19764
-                "\u0000\uB2B1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD8EB" + // 19765 - 19769
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB4B8\u0000\u0000" + // 19770 - 19774
-                "\u0000\uD4C8\u0000\u0000\u0000\u0000\u0000\uC4E9\u0000\u0000" + // 19775 - 19779
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB4AE" + // 19780 - 19784
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF4A1" + // 19785 - 19789
-                "\u0000\uB1E1\u0000\uCAF3\u0000\u0000\u0000\u0000\u0000\uBEEC" + // 19790 - 19794
-                "\u0000\uC5C8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19795 - 19799
-                "\u0000\uBAE6\u0000\u0000\u0000\u0000\u0000\uD4CE\u0000\u0000" + // 19800 - 19804
-                "\u0000\u0000\u0000\uDFE9\u0000\u0000\u0000\uC7E1\u0000\uDFE5" + // 19805 - 19809
-                "\u0000\uDFE8\u0000\uBEC8\u0000\u0000\u0000\uC8D1\u0000\u0000" + // 19810 - 19814
-                "\u0000\u0000\u0000\uDFEC\u0000\u0000\u0000\uBCD1\u0000\u0000" + // 19815 - 19819
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19820 - 19824
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19825 - 19829
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC0FA\u0000\u0000" + // 19830 - 19834
-                "\u0000\u0000\u0000\uB6B8\u0000\uE0BD\u0000\uE0BF\u0000\u0000" + // 19835 - 19839
-                "\u0000\uE0BE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19840 - 19844
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0C0\u0000\u0000" + // 19845 - 19849
-                "\u0000\uB8D1\u0000\u0000\u0000\uE0C1\u0000\u0000\u0000\u0000" + // 19850 - 19854
-                "\u0000\u0000\u0000\u0000\u0000\uB6E9\u0000\u0000\u0000\uC1C0" + // 19855 - 19859
-                "\u0000\u0000\u0000\uB9FD\u0000\u0000\u0000\u0000\u0000\u0000" + // 19860 - 19864
-                "\u0000\u0000\u0000\uE6E7\u0000\uE6E9\u0000\uE6E8\u0000\uC8A5" + // 19865 - 19869
-                "\u0000\u0000\u0000\uC6F9\u0000\u0000\u0000\uCFBE\u0000\uC8A9" + // 19870 - 19874
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19875 - 19879
-                "\u0000\u0000\u0000\uE6EB\u0000\u0000\u0000\u0000\u0000\uBED3" + // 19880 - 19884
-                "\u0000\u0000\u0000\uC9AA\u0000\u0000\u0000\uE6EC\u0000\uE6EA" + // 19885 - 19889
-                "\u0000\u0000\u0000\uB4CE\u0000\u0000\u0000\u0000\u0000\uC2F6" + // 19890 - 19894
-                "\u0000\u0000\u0000\u0000\u0000\uE0E8\u008F\uCCAB\u0000\u0000" + // 19895 - 19899
-                "\u0000\u0000\u008F\uCCAD\u008F\uCCAE\u0000\u0000\u0000\u0000" + // 19900 - 19904
-                "\u0000\u0000\u008F\uCCB2\u0000\u0000\u0000\u0000\u0000\u0000" + // 19905 - 19909
-                "\u0000\uE0EA\u0000\uCED6\u0000\uB6D7\u0000\uC8FC\u0000\uC7CA" + // 19910 - 19914
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0EB\u0000\u0000" + // 19915 - 19919
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0ED\u0000\uA2DC" + // 19920 - 19924
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1C2" + // 19925 - 19929
-                "\u0000\u0000\u0000\uA2CA\u0000\uA2CB\u0000\uA2C1\u0000\uA2C0" + // 19930 - 19934
-                "\u0000\uA2E9\u0000\uA2EA\u0000\u0000\u0000\u0000\u0000\u0000" + // 19935 - 19939
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1E8" + // 19940 - 19944
-                "\u0000\uA2E8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19945 - 19949
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA2E6\u0000\u0000" + // 19950 - 19954
-                "\u0000\u0000\u0000\uCDAB\u0000\u0000\u0000\u0000\u0000\u0000" + // 19955 - 19959
-                "\u0000\u0000\u0000\uD8DC\u0000\u0000\u0000\u0000\u0000\uD8E0" + // 19960 - 19964
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC1FE\u0000\u0000" + // 19965 - 19969
-                "\u0000\uCEF9\u0000\uD8E1\u0000\u0000\u0000\u0000\u0000\uD8DE" + // 19970 - 19974
-                "\u0000\u0000\u0000\uD8DB\u0000\u0000\u008F\uBEE4\u0000\uD8DA" + // 19975 - 19979
-                "\u0000\uD8DF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19980 - 19984
-                "\u0000\u0000\u0000\uC4C5\u0000\u0000\u0000\u0000\u0000\u0000" + // 19985 - 19989
-                "\u0000\uB1CC\u0000\uB9BF\u0000\uDEA9\u0000\u0000\u0000\u0000" + // 19990 - 19994
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBDA7" + // 19995 - 19999
-                "\u0000\uDEAE\u0000\u0000\u0000\uDEAD\u0000\uDEA8\u0000\u0000" + // 20000 - 20004
-                "\u0000\uDEAB\u0000\u0000\u0000\u0000\u0000\uB3E8\u0000\u0000" + // 20005 - 20009
-                "\u0000\uDEAA\u0000\uC7C9\u0000\u0000\u0000\uD4B3\u0000\u0000" + // 20010 - 20014
-                "\u0000\u0000\u0000\uBAA5\u008F\uB7C2\u0000\uC3B3\u0000\u0000" + // 20015 - 20019
-                "\u0000\u0000\u0000\uD4B0\u0000\uC4DA\u0000\u0000\u0000\u0000" + // 20020 - 20024
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20025 - 20029
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20030 - 20034
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20035 - 20039
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD4B4\u0000\uA2CF" + // 20040 - 20044
-                "\u0000\u0000\u0000\uA2DF\u0000\uA2D0\u0000\u0000\u0000\u0000" + // 20045 - 20049
-                "\u0000\u0000\u0000\uA2E0\u0000\uA2BA\u0000\u0000\u0000\u0000" + // 20050 - 20054
-                "\u0000\uA2BB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20055 - 20059
-                "\u0000\u0000\u0000\u0000\u0000\uA1DD\u0000\u0000\u0000\u0000" + // 20060 - 20064
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20065 - 20069
-                "\u0000\uA2E5\u0000\u0000\u0000\u0000\u0000\uA2E7\u0000\uA1E7" + // 20070 - 20074
-                "\u0000\u0000\u0000\uB0F7\u0000\uD3AF\u0000\u0000\u0000\u0000" + // 20075 - 20079
-                "\u0000\uD3A7\u0000\uD3A8\u0000\u0000\u0000\uBEA5\u0000\uCBE9" + // 20080 - 20084
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3AD\u0000\uD3AC" + // 20085 - 20089
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC5AF\u0000\u0000" + // 20090 - 20094
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20095 - 20099
-                "\u0000\u0000\u0000\uD3AE\u0000\u0000\u0000\u0000\u0000\uD3AB" + // 20100 - 20104
-                "\u0000\u0000\u008F\uB5C4\u008F\uF3AB\u008F\uF3AC\u008F\uF3AD" + // 20105 - 20109
-                "\u008F\uF3AE\u008F\uF3AF\u008F\uF3B0\u008F\uF3B1\u008F\uF3B2" + // 20110 - 20114
-                "\u008F\uF3B3\u008F\uF3B4\u0000\u0000\u0000\u0000\u0000\u0000" + // 20115 - 20119
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uF3A1\u008F\uF3A2" + // 20120 - 20124
-                "\u008F\uF3A3\u008F\uF3A4\u008F\uF3A5\u008F\uF3A6\u008F\uF3A7" + // 20125 - 20129
-                "\u008F\uF3A8\u008F\uF3A9\u008F\uF3AA\u0000\u0000\u0000\u0000" + // 20130 - 20134
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD4A9" + // 20135 - 20139
-                "\u0000\uB0B5\u0000\uBADF\u0000\u0000\u0000\u0000\u0000\u0000" + // 20140 - 20144
-                "\u0000\u0000\u0000\uB7BD\u0000\u0000\u0000\u0000\u0000\uC3CF" + // 20145 - 20149
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20150 - 20154
-                "\u0000\u0000\u0000\uD4AA\u0000\uD4AB\u0000\u0000\u0000\u0000" + // 20155 - 20159
-                "\u0000\uD4AD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20160 - 20164
-                "\u0000\uB1E2\u0000\u0000\u0000\u0000\u0000\uB4F1\u0000\uC6E0" + // 20165 - 20169
-                "\u0000\uCAF4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20170 - 20174
-                "\u0000\uD4F7\u0000\uC1D5\u0000\uD4F6\u0000\uB7C0\u0000\u0000" + // 20175 - 20179
-                "\u008F\uB8F5\u0000\uCBDB\u0000\uD4F5\u0000\u0000\u0000\uC5E5" + // 20180 - 20184
-                "\u0000\uD4F9\u0000\u0000\u0000\uD4F8\u008F\uB8F7\u0000\u0000" + // 20185 - 20189
-                "\u008F\uB8F8\u0000\u0000\u0000\u0000\u0000\uCBFD\u0000\uB4B7" + // 20190 - 20194
-                "\u0000\u0000\u0000\uD8D4\u0000\u0000\u0000\uB7C5\u0000\uB3B4" + // 20195 - 20199
-                "\u0000\u0000\u0000\u0000\u0000\uD8D1\u0000\u0000\u0000\u0000" + // 20200 - 20204
-                "\u0000\uCEB8\u0000\uD8D3\u0000\uB0D6\u0000\uD8D5\u0000\u0000" + // 20205 - 20209
-                "\u0000\uD8CC\u0000\uD8D2\u0000\uD8D9\u0000\uB7C4\u0000\uD8CD" + // 20210 - 20214
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20215 - 20219
-                "\u0000\u0000\u0000\uCDDD\u0000\u0000\u0000\uD2DE\u0000\u0000" + // 20220 - 20224
-                "\u0000\uB5C9\u0000\uB3C6\u0000\u0000\u0000\u0000\u0000\u0000" + // 20225 - 20229
-                "\u0000\uB9E7\u0000\uB5C8\u0000\uC4DF\u0000\uB1A5\u0000\uC6B1" + // 20230 - 20234
-                "\u0000\uCCBE\u0000\uB9A1\u0000\uCDF9\u0000\uC5C7\u0000\uB8FE" + // 20235 - 20239
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20240 - 20244
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7AF" + // 20245 - 20249
-                "\u0000\u0000\u0000\uD2E7\u0000\u0000\u0000\uB6E3\u0000\uA2F7" + // 20250 - 20254
-                "\u0000\uA2F8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1C5" + // 20255 - 20259
-                "\u0000\uA1C4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20260 - 20264
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20265 - 20269
-                "\u0000\uA2F3\u0000\u0000\u0000\uA1EC\u0000\uA1ED\u0000\u0000" + // 20270 - 20274
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20275 - 20279
-                "\u0000\u0000\u0000\uA2A8\u0000\u0000\u0000\u0000\u0000\u007E" + // 20280 - 20284
-                "\u0000\u0000\u0000\uB1C3\u0000\uC1D1\u0000\uB8FD\u0000\uB8C5" + // 20285 - 20289
-                "\u0000\uB6E7\u0000\u0000\u0000\u0000\u0000\uD2DB\u0000\uC3A1" + // 20290 - 20294
-                "\u0000\uC2FE\u0000\uB6AB\u0000\uBEA4\u0000\uD2DC\u0000\uD2DA" + // 20295 - 20299
-                "\u0000\uB2C4\u0000\uC2E6\u0000\uBCB8\u0000\uBBCB\u0000\uB1A6" + // 20300 - 20304
-                "\u0000\u0000\u0000\u0000\u0000\uB3F0\u0000\uB9E6\u0000\uBBCA" + // 20305 - 20309
-                "\u0000\u0000\u0000\uD2DD\u0000\u0000\u0000\u0000\u0000\u0000" + // 20310 - 20314
-                "\u0000\u0000\u0000\u0000\u0000\uB1B8\u0000\uB4AF\u0000\u0000" + // 20315 - 20319
-                "\u0000\uD5A9\u0000\u0000\u0000\uCCC5\u0000\uC9B1\u0000\u0000" + // 20320 - 20324
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20325 - 20329
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB0A8" + // 20330 - 20334
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB0F9" + // 20335 - 20339
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBBD1\u0000\uA7E2" + // 20340 - 20344
-                "\u0000\uA7E3\u0000\uA7E4\u0000\uA7E5\u0000\uA7E6\u0000\uA7E7" + // 20345 - 20349
-                "\u0000\uA7E8\u0000\uA7E9\u0000\uA7EA\u0000\uA7EB\u0000\uA7EC" + // 20350 - 20354
-                "\u0000\uA7ED\u0000\uA7EE\u0000\uA7EF\u0000\uA7F0\u0000\uA7F1" + // 20355 - 20359
-                "\u0000\u0000\u0000\uA7D7\u0000\u0000\u0000\u0000\u0000\u0000" + // 20360 - 20364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20365 - 20369
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20370 - 20374
-                "\u0000\u0000\u0000\u0000\u008F\uF3B8\u0000\u0000\u0000\u0000" + // 20375 - 20379
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20380 - 20384
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20385 - 20389
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7EC" + // 20390 - 20394
-                "\u0000\uD0C6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC8BC" + // 20395 - 20399
-                "\u0000\u0000\u0000\uCEE2\u0000\u0000\u0000\uBFAD\u008F\uB0E3" + // 20400 - 20404
-                "\u0000\uBBC7\u0000\u0000\u0000\uBBF7\u0000\uB2C0\u0000\u0000" + // 20405 - 20409
-                "\u0000\u0000\u0000\uBBD4\u0000\uC9DB\u0000\u0000\u0000\u0000" + // 20410 - 20414
-                "\u0000\uC8C1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20415 - 20419
-                "\u0000\uD6E3\u0000\uB4F5\u0000\u0000\u0000\u0000\u0000\u0000" + // 20420 - 20424
-                "\u0000\u0000\u0000\uD6E6\u0000\u0000\u0000\u0000\u0000\u0000" + // 20425 - 20429
-                "\u0000\u0000\u0000\uC4A1\u0000\u0000\u0000\u0000\u0000\uD6E5" + // 20430 - 20434
-                "\u0000\uD6E4\u0000\uD6E7\u0000\u0000\u0000\uC4EB\u0000\u0000" + // 20435 - 20439
-                "\u0000\u0000\u0000\uD8CA\u0000\u0000\u0000\uD8CB\u0000\u0000" + // 20440 - 20444
-                "\u0000\u0000\u0000\uD8C0\u0000\uBBFC\u0000\u0000\u0000\uD8C4" + // 20445 - 20449
-                "\u0000\uC2D6\u0000\uB9B2\u0000\uD8B2\u0000\uBFB5\u0000\u0000" + // 20450 - 20454
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD8D8\u0000\u0000" + // 20455 - 20459
-                "\u0000\uCAE9\u0000\u0000\u0000\u0000\u0000\uD8CE\u0000\uD8CF" + // 20460 - 20464
-                "\u0000\uD8D0\u0000\u0000\u0000\u0000\u0000\uD8D7\u0000\u0000" + // 20465 - 20469
-                "\u0000\uD8D6\u0000\uA7B2\u0000\uA7B3\u0000\uA7B4\u0000\uA7B5" + // 20470 - 20474
-                "\u0000\uA7B6\u0000\uA7B7\u0000\uA7B8\u0000\uA7B9\u0000\uA7BA" + // 20475 - 20479
-                "\u0000\uA7BB\u0000\uA7BC\u0000\uA7BD\u0000\uA7BE\u0000\uA7BF" + // 20480 - 20484
-                "\u0000\uA7C0\u0000\uA7C1\u0000\uA7D1\u0000\uA7D2\u0000\uA7D3" + // 20485 - 20489
-                "\u0000\uA7D4\u0000\uA7D5\u0000\uA7D6\u0000\uA7D8\u0000\uA7D9" + // 20490 - 20494
-                "\u0000\uA7DA\u0000\uA7DB\u0000\uA7DC\u0000\uA7DD\u0000\uA7DE" + // 20495 - 20499
-                "\u0000\uA7DF\u0000\uA7E0\u0000\uA7E1\u0000\uA6D0\u0000\uA6D1" + // 20500 - 20504
-                "\u0000\u0000\u0000\uA6D2\u0000\uA6D3\u0000\uA6D4\u0000\uA6D5" + // 20505 - 20509
-                "\u0000\uA6D6\u0000\uA6D7\u0000\uA6D8\u0000\u0000\u0000\u0000" + // 20510 - 20514
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20515 - 20519
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20520 - 20524
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20525 - 20529
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20530 - 20534
-                "\u0000\uBCF3\u0000\uF1C4\u0000\uF1C5\u0000\uB9E1\u0000\u0000" + // 20535 - 20539
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uF4F4\u0000\u0000" + // 20540 - 20544
-                "\u0000\uD1B4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20545 - 20549
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDA5" + // 20550 - 20554
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20555 - 20559
-                "\u0000\u0000\u0000\u0000\u0000\uCCD9\u0000\u0000\u0000\u0000" + // 20560 - 20564
-                "\u0000\u0000\u0000\u0000\u0000\uD1B6\u0000\u0000\u0000\u0000" + // 20565 - 20569
-                "\u0000\uD1B5\u0000\uD1B8\u0000\uD1B7\u0000\u0000\u0000\u0000" + // 20570 - 20574
-                "\u0000\uD1B9\u0000\uA6B0\u0000\uA6B1\u0000\u0000\u0000\uA6B2" + // 20575 - 20579
-                "\u0000\uA6B3\u0000\uA6B4\u0000\uA6B5\u0000\uA6B6\u0000\uA6B7" + // 20580 - 20584
-                "\u0000\uA6B8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20585 - 20589
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA6C1\u0000\uA6C2" + // 20590 - 20594
-                "\u0000\uA6C3\u0000\uA6C4\u0000\uA6C5\u0000\uA6C6\u0000\uA6C7" + // 20595 - 20599
-                "\u0000\uA6C8\u0000\uA6C9\u0000\uA6CA\u0000\uA6CB\u0000\uA6CC" + // 20600 - 20604
-                "\u0000\uA6CD\u0000\uA6CE\u0000\uA6CF\u0000\u0080\u0000\u0081" + // 20605 - 20609
-                "\u0000\u0082\u0000\u0083\u0000\u0084\u0000\u0085\u0000\u0086" + // 20610 - 20614
-                "\u0000\u0087\u0000\u0088\u0000\u0089\u0000\u008A\u0000\u008B" + // 20615 - 20619
-                "\u0000\u008C\u0000\u008D\u0000\u0000\u0000\u0000\u0000\u0090" + // 20620 - 20624
-                "\u0000\u0091\u0000\u0092\u0000\u0093\u0000\u0094\u0000\u0095" + // 20625 - 20629
-                "\u0000\u0096\u0000\u0097\u0000\u0098\u0000\u0099\u0000\u009A" + // 20630 - 20634
-                "\u0000\u009B\u0000\u009C\u0000\u009D\u0000\u009E\u0000\u009F" + // 20635 - 20639
-                "\u0000\u0060\u0000\u0061\u0000\u0062\u0000\u0063\u0000\u0064" + // 20640 - 20644
-                "\u0000\u0065\u0000\u0066\u0000\u0067\u0000\u0068\u0000\u0069" + // 20645 - 20649
-                "\u0000\u006A\u0000\u006B\u0000\u006C\u0000\u006D\u0000\u006E" + // 20650 - 20654
-                "\u0000\u006F\u0000\u0070\u0000\u0071\u0000\u0072\u0000\u0073" + // 20655 - 20659
-                "\u0000\u0074\u0000\u0075\u0000\u0076\u0000\u0077\u0000\u0078" + // 20660 - 20664
-                "\u0000\u0079\u0000\u007A\u0000\u007B\u0000\u007C\u0000\u007D" + // 20665 - 20669
-                "\u0000\u8EE4\u0000\u007F\u0000\u0040\u0000\u0041\u0000\u0042" + // 20670 - 20674
-                "\u0000\u0043\u0000\u0044\u0000\u0045\u0000\u0046\u0000\u0047" + // 20675 - 20679
-                "\u0000\u0048\u0000\u0049\u0000\u004A\u0000\u004B\u0000\u004C" + // 20680 - 20684
-                "\u0000\u004D\u0000\u004E\u0000\u004F\u0000\u0050\u0000\u0051" + // 20685 - 20689
-                "\u0000\u0052\u0000\u0053\u0000\u0054\u0000\u0055\u0000\u0056" + // 20690 - 20694
-                "\u0000\u0057\u0000\u0058\u0000\u0059\u0000\u005A\u0000\u005B" + // 20695 - 20699
-                "\u0000\u8EE3\u0000\u005D\u0000\u005E\u0000\u005F\u0000\u0020" + // 20700 - 20704
-                "\u0000\u0021\u0000\"\u0000\u0023\u0000\u0024\u0000\u0025" + // 20705 - 20709
-                "\u0000\u0026\u0000\u0027\u0000\u0028\u0000\u0029\u0000\u002A" + // 20710 - 20714
-                "\u0000\u002B\u0000\u002C\u0000\u002D\u0000\u002E\u0000\u002F" + // 20715 - 20719
-                "\u0000\u0030\u0000\u0031\u0000\u0032\u0000\u0033\u0000\u0034" + // 20720 - 20724
-                "\u0000\u0035\u0000\u0036\u0000\u0037\u0000\u0038\u0000\u0039" + // 20725 - 20729
-                "\u0000\u003A\u0000\u003B\u0000\u003C\u0000\u003D\u0000\u003E" + // 20730 - 20734
-                "\u0000\u003F\u0000\u0000\u0000\uB3A1\u0000\uBAB2\u0000\uF2B1" + // 20735 - 20739
-                "\u0000\uF2B0\u0000\uCCA5\u0000\u0000\u0000\u0000\u0000\u0000" + // 20740 - 20744
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF2B3" + // 20745 - 20749
-                "\u0000\uF2B4\u0000\uF2B2\u0000\u0000\u0000\uF2B5\u0000\u0000" + // 20750 - 20754
-                "\u0000\u0000\u0000\uCBE2\u0000\u0000\u0000\u0000\u0000\u0000" + // 20755 - 20759
-                "\u0000\uF2B6\u0000\u0000\u0000\uB5FB\u0000\u0000\u0000\u0000" + // 20760 - 20764
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3E1\u0000\u0000" + // 20765 - 20769
-                "\u0000\u0000\u0000\u0000\u0000\uB4EF\u0000\u0000\u0000\uD3E4" + // 20770 - 20774
-                "\u0000\uD3E0\u0000\uD3E3\u0000\u0000\u0000\u0000\u0000\u0000" + // 20775 - 20779
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCAAE" + // 20780 - 20784
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC6D5\u0000\u0000" + // 20785 - 20789
-                "\u0000\uC8B8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20790 - 20794
-                "\u0000\u0000\u0000\uD6B2\u0000\u0000\u0000\uD6B4\u0000\u0000" + // 20795 - 20799
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20800 - 20804
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20805 - 20809
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20810 - 20814
-                "\u0000\u0000\u0000\uD6B5\u0000\u0000\u0000\u0000\u0000\u0000" + // 20815 - 20819
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uC9F4\u008F\uC9F5" + // 20820 - 20824
-                "\u0000\u0000\u0000\uCEFB\u0000\u0000\u0000\u0000\u0000\uDFEA" + // 20825 - 20829
-                "\u0000\u0000\u0000\uC0F9\u0000\u0000\u0000\u0000\u0000\u0000" + // 20830 - 20834
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDFE6\u0000\uDFEB" + // 20835 - 20839
-                "\u0000\u0000\u0000\u0000\u0000\uB1EC\u0000\u0000\u0000\u0000" + // 20840 - 20844
-                "\u008F\uC9FC\u0000\u0000\u0000\u0000\u0000\u0000\u008F\uBBD0" + // 20845 - 20849
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20850 - 20854
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD6CB\u0000\uD6C8" + // 20855 - 20859
-                "\u0000\u0000\u0000\uD6CA\u0000\u0000\u0000\uCDF2\u0000\u0000" + // 20860 - 20864
-                "\u0000\uD6C9\u008F\uF4B0\u0000\u0000\u0000\u0000\u0000\u0000" + // 20865 - 20869
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20870 - 20874
-                "\u0000\uD6BF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBBBA" + // 20875 - 20879
-                "\u0000\u0000\u0000\uB1F9\u0000\uE1B4\u0000\u0000\u0000\uCDD1" + // 20880 - 20884
-                "\u0000\u0000\u0000\u0000\u0000\uCAE3\u0000\uE1B5\u0000\u0000" + // 20885 - 20889
-                "\u0000\u0000\u008F\uCDAA\u0000\uC5C4\u0000\uCDB3\u0000\uB9C3" + // 20890 - 20894
-                "\u0000\uBFBD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC3CB" + // 20895 - 20899
-                "\u0000\uD2B4\u0000\u0000\u0000\uC4AE\u0000\uB2E8\u0000\uE1B6" + // 20900 - 20904
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1CF\u0000\u0000" + // 20905 - 20909
-                "\u0000\uE1CE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20910 - 20914
-                "\u0000\u0000\u0000\uB1D6\u0000\u0000\u0000\u0000\u0000\u0000" + // 20915 - 20919
-                "\u0000\u0000\u0000\u0000\u0000\uE1D7\u0000\uC8E8\u0000\uE1D1" + // 20920 - 20924
-                "\u0000\u0000\u0000\uE1D3\u0000\u0000\u0000\u0000\u0000\uE1D5" + // 20925 - 20929
-                "\u0000\uBFBE\u0000\u0000\u0000\u0000\u0000\uE1D6\u0000\uE1D4" + // 20930 - 20934
-                "\u0000\uBCC0\u0000\u0000\u0000\uEFD7\u0000\u0000\u0000\u0000" + // 20935 - 20939
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20940 - 20944
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20945 - 20949
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20950 - 20954
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20955 - 20959
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20960 - 20964
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC9EC\u0000\u0000" + // 20965 - 20969
-                "\u0000\u0000\u0000\u0000\u0000\uBFE2\u0000\u0000\u0000\u0000" + // 20970 - 20974
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD4B2\u0000\uD4B5" + // 20975 - 20979
-                "\u0000\u0000\u0000\uB7BF\u0000\u0000\u0000\u0000\u0000\u0000" + // 20980 - 20984
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD4B6" + // 20985 - 20989
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20990 - 20994
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20995 - 20999
-                "\u0000\u0000\u0000\u0000\u0000\uD6A9\u0000\u0000\u0000\u0000" + // 21000 - 21004
-                "\u0000\u0000\u0000\uB4F4\u0000\uD6AA\u0000\u0000\u0000\u0000" + // 21005 - 21009
-                "\u0000\uD6AB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21010 - 21014
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21015 - 21019
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB3F9\u0000\u0000" + // 21020 - 21024
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21025 - 21029
-                "\u0000\u0000\u0000\uEFB0\u0000\u0000\u0000\uBABF\u0000\uC1F9" + // 21030 - 21034
-                "\u0000\u0000\u0000\u0000\u0000\uC4CA\u0000\u0000\u0000\u0000" + // 21035 - 21039
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBFE3\u0000\u0000" + // 21040 - 21044
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uBBD5" + // 21045 - 21049
-                "\u0000\u0000\u0000\uC0CA\u0000\u0000\u0000\uC2D3\u0000\uB5A2" + // 21050 - 21054
-                "\u0000\u0000\u0000\u0000\u0000\uC4A2\u0000\u0000\u0000\u0000" + // 21055 - 21059
-                "\u0000\uD6E8\u0000\uD6E9\u0000\uBEEF\u0000\u0000\u0000\u0000" + // 21060 - 21064
-                "\u0000\u0000\u0000\u0000\u0000\uCBB9\u0000\u0000\u0000\u0000" + // 21065 - 21069
-                "\u0000\uA7A7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21070 - 21074
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21075 - 21079
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21080 - 21084
-                "\u0000\uA7A1\u0000\uA7A2\u0000\uA7A3\u0000\uA7A4\u0000\uA7A5" + // 21085 - 21089
-                "\u0000\uA7A6\u0000\uA7A8\u0000\uA7A9\u0000\uA7AA\u0000\uA7AB" + // 21090 - 21094
-                "\u0000\uA7AC\u0000\uA7AD\u0000\uA7AE\u0000\uA7AF\u0000\uA7B0" + // 21095 - 21099
-                "\u0000\uA7B1\u0000\u0000\u0000\uF2CC\u0000\uF2C9\u0000\uF2C8" + // 21100 - 21104
-                "\u0000\uF2CA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB7DF" + // 21105 - 21109
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21110 - 21114
-                "\u0000\u0000\u0000\u0000\u0000\uF2D0\u0000\uF2CF\u0000\uF2CE" + // 21115 - 21119
-                "\u0000\u0000\u0000\u0000\u0000\uB0B3\u0000\u0000\u0000\u0000" + // 21120 - 21124
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21125 - 21129
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB2E3\u0000\uE9D2" + // 21130 - 21134
-                "\u0000\uE9D3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21135 - 21139
-                "\u0000\u0000\u0000\u0000\u0000\uE9CE\u0000\u0000\u0000\uBBBD" + // 21140 - 21144
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21145 - 21149
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21150 - 21154
-                "\u0000\uE0C9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21155 - 21159
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21160 - 21164
-                "\u0000\u0000\u0000\u0000\u0000\uE0CB\u0000\uE0C8\u0000\u0000" + // 21165 - 21169
-                "\u0000\u0000\u0000\u0000\u0000\uCCD4\u0000\uE0CA\u0000\uE0CC" + // 21170 - 21174
-                "\u0000\u0000\u0000\uCEC4\u0000\u0000\u0000\uF2DF\u0000\u0000" + // 21175 - 21179
-                "\u0000\u0000\u0000\uF2DE\u0000\uF2DD\u0000\u0000\u0000\u0000" + // 21180 - 21184
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21185 - 21189
-                "\u0000\uC9C9\u0000\uF2DB\u0000\uB0F3\u0000\uF2E0\u0000\u0000" + // 21190 - 21194
-                "\u0000\uF2E2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21195 - 21199
-                "\u0000\u0000\u0000\u0000\u0000\uB3EF\u0000\uF2CD\u0000\uB1B7" + // 21200 - 21204
-                "\u0000\u0000\u0000\u0000\u0000\uF2E4\u0000\u0000\u0000\uF0DB" + // 21205 - 21209
-                "\u0000\u0000\u0000\u0000\u0000\uB3F3\u0000\uF0D9\u0000\uF0DD" + // 21210 - 21214
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0DE" + // 21215 - 21219
-                "\u0000\u0000\u0000\uB0C8\u0000\u0000\u0000\uF0DF\u0000\uF0E0" + // 21220 - 21224
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21225 - 21229
-                "\u0000\u0000\u0000\u0000\u0000\uBEE4\u0000\u0000\u0000\u0000" + // 21230 - 21234
-                "\u0000\u0000\u0000\uF0E1\u0000\u0000\u0000\u0000\u0000\u0000" + // 21235 - 21239
-                "\u0000\uBEEE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21240 - 21244
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD5CD\u0000\u0000" + // 21245 - 21249
-                "\u0000\uC4DC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB1C5" + // 21250 - 21254
-                "\u0000\u0000\u0000\uD5CB\u0000\u0000\u0000\u0000\u0000\u0000" + // 21255 - 21259
-                "\u0000\uD5CE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21260 - 21264
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD5CF\u0000\u0000" + // 21265 - 21269
-                "\u0000\uEFC5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21270 - 21274
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21275 - 21279
-                "\u0000\uEFC3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21280 - 21284
-                "\u0000\u0000\u008F\uE5E2\u0000\u0000\u0000\u0000\u0000\u0000" + // 21285 - 21289
-                "\u0000\uEFC4\u0000\uEFC2\u0000\u0000\u0000\uC2F8\u0000\u0000" + // 21290 - 21294
-                "\u0000\uEFC6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21295 - 21299
-                "\u0000\u0000\u0000\uC8BD\u0000\uCACC\u0000\u0000\u0000\uD1E7" + // 21300 - 21304
-                "\u0000\u0000\u0000\uCDF8\u0000\uD1E8\u0000\u0000\u0000\u0000" + // 21305 - 21309
-                "\u0000\u0000\u0000\uD1E9\u0000\u0000\u0000\uC5FE\u0000\u0000" + // 21310 - 21314
-                "\u0000\u0000\u0000\uD1EA\u0000\u0000\u0000\u0000\u0000\uC0A9" + // 21315 - 21319
-                "\u0000\uBAFE\u0000\uB7F4\u0000\uD1EB\u0000\uBBC9\u0000\uB9EF" + // 21320 - 21324
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD1A9" + // 21325 - 21329
-                "\u0000\u0000\u0000\uD1A7\u0000\u0000\u0000\uC1CE\u0000\u0000" + // 21330 - 21334
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD1A8" + // 21335 - 21339
-                "\u0000\uD1AA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21340 - 21344
-                "\u0000\u0000\u008F\uF4A3\u0000\uD1AC\u0000\u0000\u0000\u0000" + // 21345 - 21349
-                "\u0000\u0000\u0000\uD1AB\u0000\u0000\u0000\uCAC8\u0000\u0000" + // 21350 - 21354
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC5B1\u0000\uD9FB" + // 21355 - 21359
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9FC\u0000\u0000" + // 21360 - 21364
-                "\u0000\uC9EF\u0000\u0000\u0000\uC7C5\u0000\uBBA3\u0000\u0000" + // 21365 - 21369
-                "\u0000\uC0F1\u0000\u0000\u0000\uCBD0\u0000\u0000\u0000\u0000" + // 21370 - 21374
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB3C9" + // 21375 - 21379
-                "\u0000\u0000\u0000\uDAA5\u0000\uD9FE\u0000\u0000\u0000\u0000" + // 21380 - 21384
-                "\u0000\u0000\u0000\uB1BD\u0000\u0000\u0000\u0000\u0000\u0000" + // 21385 - 21389
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21390 - 21394
-                "\u0000\u0000\u0000\uC1B9\u0000\u0000\u0000\uD3D9\u0000\u0000" + // 21395 - 21399
-                "\u0000\uD3DA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21400 - 21404
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21405 - 21409
-                "\u0000\u0000\u0000\uB3FA\u0000\u0000\u0000\u0000\u0000\u0000" + // 21410 - 21414
-                "\u0000\u0000\u0000\uEEF7\u008F\uE4BE\u0000\u0000\u0000\uCBAF" + // 21415 - 21419
-                "\u008F\uE4BF\u0000\u0000\u008F\uE4C0\u0000\u0000\u008F\uE4C1" + // 21420 - 21424
-                "\u0000\u0000\u008F\uE4C3\u0000\u0000\u0000\u0000\u0000\u0000" + // 21425 - 21429
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9EC\u0000\u0000" + // 21430 - 21434
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21435 - 21439
-                "\u0000\uC2BB\u0000\u0000\u0000\uD9F3\u0000\u0000\u0000\u0000" + // 21440 - 21444
-                "\u0000\u0000\u0000\uD9ED\u0000\uC1DF\u0000\u0000\u0000\uD9EA" + // 21445 - 21449
-                "\u0000\uD9F1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21450 - 21454
-                "\u0000\uD9D3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDE6" + // 21455 - 21459
-                "\u0000\uDDE5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21460 - 21464
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21465 - 21469
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21470 - 21474
-                "\u0000\u0000\u0000\uBFE5\u0000\u0000\u0000\u0000\u0000\uC9B9" + // 21475 - 21479
-                "\u0000\uB1CA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21480 - 21484
-                "\u0000\u0000\u0000\uC8C5\u008F\uC6D7\u0000\u0000\u0000\uF2FA" + // 21485 - 21489
-                "\u0000\u0000\u0000\u0000\u0000\uF2F7\u0000\u0000\u0000\uF2FD" + // 21490 - 21494
-                "\u0000\u0000\u0000\uF2FE\u0000\u0000\u0000\u0000\u0000\u0000" + // 21495 - 21499
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3A5" + // 21500 - 21504
-                "\u0000\uF3A4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21505 - 21509
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3A6\u0000\u0000" + // 21510 - 21514
-                "\u0000\u0000\u0000\uB1AD\u0000\uF3A1\u0000\uF3A2\u0000\u0000" + // 21515 - 21519
-                "\u0000\uF0F6\u0000\u0000\u0000\u0000\u0000\uF0F5\u0000\u0000" + // 21520 - 21524
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21525 - 21529
-                "\u0000\u0000\u0000\uCBCB\u0000\uC6AC\u0000\u0000\u0000\u0000" + // 21530 - 21534
-                "\u0000\uCBCB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB1D0" + // 21535 - 21539
-                "\u0000\u0000\u0000\u0000\u0000\uF0F7\u0000\uF0F4\u0000\uF0F8" + // 21540 - 21544
-                "\u0000\u0000\u0000\uC9D1\u0000\uCDEA\u0000\uF0F8\u0000\u0000" + // 21545 - 21549
-                "\u0000\u0000\u0000\uB5D2\u0000\uC0EB\u0000\uBCBC\u0000\uCDA8" + // 21550 - 21554
-                "\u0000\uD5E1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21555 - 21559
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB5DC\u0000\u0000" + // 21560 - 21564
-                "\u0000\uBACB\u0000\u0000\u0000\u0000\u0000\uB3B2\u0000\uB1E3" + // 21565 - 21569
-                "\u0000\uBEAC\u0000\uB2C8\u0000\u0000\u0000\uD5E2\u0000\uCDC6" + // 21570 - 21574
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21575 - 21579
-                "\u0000\uBDC9\u0000\u0000\u0000\uF3B2\u0000\uF3B8\u0000\u0000" + // 21580 - 21584
-                "\u0000\uF3B1\u0000\u0000\u0000\uF3B6\u0000\u0000\u0000\u0000" + // 21585 - 21589
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21590 - 21594
-                "\u0000\u0000\u0000\uF3B7\u0000\u0000\u0000\u0000\u0000\u0000" + // 21595 - 21599
-                "\u0000\uF3BA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB2AA" + // 21600 - 21604
-                "\u0000\u0000\u0000\uF3B9\u0000\u0000\u0000\u0000\u0000\u0000" + // 21605 - 21609
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA2DD\u0000\u0000" + // 21610 - 21614
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21615 - 21619
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21620 - 21624
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21625 - 21629
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21630 - 21634
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21635 - 21639
-                "\u0000\uA1DF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21640 - 21644
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21645 - 21649
-                "\u0000\uE7D5\u0000\uB9D2\u0000\uE7D6\u0000\uC8CC\u0000\u0000" + // 21650 - 21654
-                "\u0000\uE7E4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21655 - 21659
-                "\u0000\uE7D8\u0000\u0000\u0000\uC2C9\u0000\uC7F5\u0000\uB8BF" + // 21660 - 21664
-                "\u0000\uE7D7\u0000\uC1A5\u0000\u0000\u0000\u0000\u0000\u0000" + // 21665 - 21669
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD5A8\u0000\u0000" + // 21670 - 21674
-                "\u0000\u0000\u0000\uBBD0\u0000\u0000\u0000\uBBCF\u0000\u0000" + // 21675 - 21679
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uB0B9\u0000\uB8C8" + // 21680 - 21684
-                "\u0000\u0000\u0000\uC0AB\u0000\uB0D1\u0000\u0000\u0000\u0000" + // 21685 - 21689
-                "\u0000\u0000\u0000\u0000\u0000\uD5AC\u0000\uD5AD\u0000\u0000" + // 21690 - 21694
-                "\u0000\uD5AA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD6D1" + // 21695 - 21699
-                "\u0000\u0000\u0000\uD6D0\u0000\u0000\u0000\u0000\u0000\uD6CF" + // 21700 - 21704
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC5E8\u0000\uD6BA" + // 21705 - 21709
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD6D7\u0000\u0000" + // 21710 - 21714
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21715 - 21719
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21720 - 21724
-                "\u0000\u0000\u0000\uD6D3\u0000\u0000\u0000\u0000\u0000\uA5A1" + // 21725 - 21729
-                "\u0000\uA5A2\u0000\uA5A3\u0000\uA5A4\u0000\uA5A5\u0000\uA5A6" + // 21730 - 21734
-                "\u0000\uA5A7\u0000\uA5A8\u0000\uA5A9\u0000\uA5AA\u0000\uA5AB" + // 21735 - 21739
-                "\u0000\uA5AC\u0000\uA5AD\u0000\uA5AE\u0000\uA5AF\u0000\uA5B0" + // 21740 - 21744
-                "\u0000\uA5B1\u0000\uA5B2\u0000\uA5B3\u0000\uA5B4\u0000\uA5B5" + // 21745 - 21749
-                "\u0000\uA5B6\u0000\uA5B7\u0000\uA5B8\u0000\uA5B9\u0000\uA5BA" + // 21750 - 21754
-                "\u0000\uA5BB\u0000\uA5BC\u0000\uA5BD\u0000\uA5BE\u0000\uA5BF" + // 21755 - 21759
-                "\u0000\u0000\u0000\uF3C6\u0000\u0000\u0000\u0000\u0000\u0000" + // 21760 - 21764
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3C7\u0000\u0000" + // 21765 - 21769
-                "\u0000\u0000\u0000\uF3C8\u0000\uF3C9\u0000\u0000\u0000\u0000" + // 21770 - 21774
-                "\u0000\u0000\u0000\u0000\u0000\uF3CC\u0000\uF3CA\u0000\uCFBC" + // 21775 - 21779
-                "\u0000\u0000\u0000\uF3CB\u0000\u0000\u0000\uCEEF\u0000\u0000" + // 21780 - 21784
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3CD" + // 21785 - 21789
-                "\u0000\u0000\u0000\uCEDB\u0000\u0000\u0000\uA1AA\u008F\uF3B6" + // 21790 - 21794
-                "\u0000\uA1F4\u0000\uA1F0\u0000\uA1F3\u0000\uA1F5\u008F\uF3B5" + // 21795 - 21799
-                "\u0000\uA1CA\u0000\uA1CB\u0000\uA1F6\u0000\uA1DC\u0000\uA1A4" + // 21800 - 21804
-                "\u0000\uA1DD\u0000\uA1A5\u0000\uA1BF\u0000\uA3B0\u0000\uA3B1" + // 21805 - 21809
-                "\u0000\uA3B2\u0000\uA3B3\u0000\uA3B4\u0000\uA3B5\u0000\uA3B6" + // 21810 - 21814
-                "\u0000\uA3B7\u0000\uA3B8\u0000\uA3B9\u0000\uA1A7\u0000\uA1A8" + // 21815 - 21819
-                "\u0000\uA1E3\u0000\uA1E1\u0000\uA1E4\u0000\uA1A9\u0000\u0000" + // 21820 - 21824
-                "\u0000\u8EA1\u0000\u8EA2\u0000\u8EA3\u0000\u8EA4\u0000\u8EA5" + // 21825 - 21829
-                "\u0000\u8EA6\u0000\u8EA7\u0000\u8EA8\u0000\u8EA9\u0000\u8EAA" + // 21830 - 21834
-                "\u0000\u8EAB\u0000\u8EAC\u0000\u8EAD\u0000\u8EAE\u0000\u8EAF" + // 21835 - 21839
-                "\u0000\u8EB0\u0000\u8EB1\u0000\u8EB2\u0000\u8EB3\u0000\u8EB4" + // 21840 - 21844
-                "\u0000\u8EB5\u0000\u8EB6\u0000\u8EB7\u0000\u8EB8\u0000\u8EB9" + // 21845 - 21849
-                "\u0000\u8EBA\u0000\u8EBB\u0000\u8EBC\u0000\u8EBD\u0000\u8EBE" + // 21850 - 21854
-                "\u0000\u8EBF"
-                ;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/IBM834.java b/ojluni/src/main/java/sun/nio/cs/ext/IBM834.java
deleted file mode 100755
index 523411e..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/IBM834.java
+++ /dev/null
@@ -1,97 +0,0 @@
-
-/*
- * Copyright (c) 2006, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import static sun.nio.cs.CharsetMapping.*;
-
-// EBCDIC DBCS-only Korean
-public class IBM834 extends Charset
-{
-    public IBM834() {
-        super("x-IBM834", ExtendedCharsets.aliasesFor("x-IBM834"));
-    }
-
-    public boolean contains(Charset cs) {
-        return (cs instanceof IBM834);
-    }
-
-    public CharsetDecoder newDecoder() {
-        IBM933.initb2c();
-        return new DoubleByte.Decoder_EBCDIC_DBCSONLY(
-            this, IBM933.b2c, 0x40, 0xfe);  // hardcode the b2min/max
-    }
-
-    public CharsetEncoder newEncoder() {
-        IBM933.initc2b();
-        return new Encoder(this);
-    }
-
-    protected static class Encoder extends DoubleByte.Encoder_EBCDIC_DBCSONLY {
-        public Encoder(Charset cs) {
-            super(cs, new byte[] {(byte)0xfe, (byte)0xfe},
-                  IBM933.c2b, IBM933.c2bIndex);
-        }
-
-        public int encodeChar(char ch) {
-            int bb = super.encodeChar(ch);
-            if (bb == UNMAPPABLE_ENCODING) {
-                // Cp834 has 6 additional non-roundtrip char->bytes
-                // mappings, see#6379808
-                if (ch == '\u00b7') {
-                    return 0x4143;
-                } else if (ch == '\u00ad') {
-                    return 0x4148;
-                } else if (ch == '\u2015') {
-                    return 0x4149;
-                } else if (ch == '\u223c') {
-                    return 0x42a1;
-                } else if (ch == '\uff5e') {
-                    return 0x4954;
-                } else if (ch == '\u2299') {
-                    return 0x496f;
-                }
-            }
-            return bb;
-        }
-
-        public boolean isLegalReplacement(byte[] repl) {
-            if (repl.length == 2 &&
-                repl[0] == (byte)0xfe && repl[1] == (byte)0xfe)
-                return true;
-            return super.isLegalReplacement(repl);
-        }
-
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/IBM942C.java b/ojluni/src/main/java/sun/nio/cs/ext/IBM942C.java
deleted file mode 100755
index 0c631f6..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/IBM942C.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.util.Arrays;
-import sun.nio.cs.HistoricallyNamedCharset;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class IBM942C extends Charset implements HistoricallyNamedCharset
-{
-    public IBM942C() {
-        super("x-IBM942C", ExtendedCharsets.aliasesFor("x-IBM942C"));
-    }
-
-    public String historicalName() {
-        return "Cp942C";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof IBM942C));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new DoubleByte.Decoder(this,
-                                      IBM942.b2c,
-                                      b2cSB,
-                                      0x40,
-                                      0xfc);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new DoubleByte.Encoder(this, c2b, c2bIndex);
-    }
-
-    final static char[] b2cSB;
-    final static char[] c2b;
-    final static char[] c2bIndex;
-
-    static {
-        IBM942.initb2c();
-
-        // the mappings need udpate are
-        //    u+001a  <-> 0x1a
-        //    u+001c  <-> 0x1c
-        //    u+005c  <-> 0x5c
-        //    u+007e  <-> 0x7e
-        //    u+007f  <-> 0x7f
-
-        b2cSB = Arrays.copyOf(IBM942.b2cSB, IBM942.b2cSB.length);
-        b2cSB[0x1a] = 0x1a;
-        b2cSB[0x1c] = 0x1c;
-        b2cSB[0x5c] = 0x5c;
-        b2cSB[0x7e] = 0x7e;
-        b2cSB[0x7f] = 0x7f;
-
-        IBM942.initc2b();
-        c2b = Arrays.copyOf(IBM942.c2b, IBM942.c2b.length);
-        c2bIndex = Arrays.copyOf(IBM942.c2bIndex, IBM942.c2bIndex.length);
-        c2b[c2bIndex[0] + 0x1a] = 0x1a;
-        c2b[c2bIndex[0] + 0x1c] = 0x1c;
-        c2b[c2bIndex[0] + 0x5c] = 0x5c;
-        c2b[c2bIndex[0] + 0x7e] = 0x7e;
-        c2b[c2bIndex[0] + 0x7f] = 0x7f;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/IBM943C.java b/ojluni/src/main/java/sun/nio/cs/ext/IBM943C.java
deleted file mode 100755
index b9d856a..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/IBM943C.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.util.Arrays;
-import sun.nio.cs.HistoricallyNamedCharset;
-
-public class IBM943C extends Charset implements HistoricallyNamedCharset
-{
-
-    public IBM943C() {
-        super("x-IBM943C", ExtendedCharsets.aliasesFor("x-IBM943C"));
-    }
-
-    public String historicalName() {
-        return "Cp943C";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof IBM943C));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new DoubleByte.Decoder(this,
-                                      IBM943.b2c,
-                                      b2cSB,
-                                      0x40,
-                                      0xfc);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new DoubleByte.Encoder(this, c2b, c2bIndex);
-    }
-
-    final static char[] b2cSB;
-    final static char[] c2b;
-    final static char[] c2bIndex;
-
-    static {
-        IBM943.initb2c();
-        b2cSB = new char[0x100];
-        for (int i = 0; i < 0x80; i++) {
-            b2cSB[i] = (char)i;
-        }
-        for (int i = 0x80; i < 0x100; i++) {
-            b2cSB[i] = IBM943.b2cSB[i];
-        }
-
-        IBM943.initc2b();
-        c2b = Arrays.copyOf(IBM943.c2b, IBM943.c2b.length);
-        c2bIndex = Arrays.copyOf(IBM943.c2bIndex, IBM943.c2bIndex.length);
-        for (char c = '\0'; c < '\u0080'; ++c) {
-            int index = c2bIndex[c >> 8];
-            c2b[index + (c & 0xff)] = c;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/IBM949C.java b/ojluni/src/main/java/sun/nio/cs/ext/IBM949C.java
deleted file mode 100755
index a77fbfe..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/IBM949C.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.util.Arrays;
-import sun.nio.cs.HistoricallyNamedCharset;
-
-public class IBM949C extends Charset implements HistoricallyNamedCharset
-{
-
-    public IBM949C() {
-        super("x-IBM949C", ExtendedCharsets.aliasesFor("x-IBM949C"));
-    }
-
-    public String historicalName() {
-        return "Cp949C";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof IBM949C));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new DoubleByte.Decoder(this,
-                                      IBM949.b2c,
-                                      b2cSB,
-                                      0xa1,
-                                      0xfe);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new DoubleByte.Encoder(this, c2b, c2bIndex);
-    }
-
-    final static char[] b2cSB;
-    final static char[] c2b;
-    final static char[] c2bIndex;
-
-    static {
-        IBM949.initb2c();
-        b2cSB = new char[0x100];
-        for (int i = 0; i < 0x80; i++) {
-            b2cSB[i] = (char)i;
-        }
-        for (int i = 0x80; i < 0x100; i++) {
-            b2cSB[i] = IBM949.b2cSB[i];
-        }
-        IBM949.initc2b();
-        c2b = Arrays.copyOf(IBM949.c2b, IBM949.c2b.length);
-        c2bIndex = Arrays.copyOf(IBM949.c2bIndex, IBM949.c2bIndex.length);
-        for (char c = '\0'; c < '\u0080'; ++c) {
-            int index = c2bIndex[c >> 8];
-            c2b[index + (c & 0xff)] = c;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/IBM964.java b/ojluni/src/main/java/sun/nio/cs/ext/IBM964.java
deleted file mode 100755
index 4635f86..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/IBM964.java
+++ /dev/null
@@ -1,10580 +0,0 @@
-
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.HistoricallyNamedCharset;
-
-public class IBM964
-    extends Charset
-    implements HistoricallyNamedCharset
-{
-
-    public IBM964() {
-        super("x-IBM964", ExtendedCharsets.aliasesFor("x-IBM964"));
-    }
-
-    public String historicalName() {
-        return "Cp964";
-    }
-
-    public boolean contains(Charset cs) {
-        return (cs instanceof IBM964);
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-
-    /**
-     * These accessors are temporarily supplied while sun.io
-     * converters co-exist with the sun.nio.cs.{ext} charset coders
-     * These facilitate sharing of conversion tables between the
-     * two co-existing implementations. When sun.io converters
-     * are made extinct these will be unncessary and should be removed
-     */
-
-    public String getDecoderSingleByteMappings() {
-        return Decoder.byteToCharTable;
-    }
-
-    public String getDecoderMappingTableG1() {
-        return Decoder.mappingTableG1;
-    }
-
-    public String getDecoderMappingTableG2a2() {
-        return Decoder.mappingTableG2a2;
-    }
-
-    public String getDecoderMappingTableG2ac() {
-        return Decoder.mappingTableG2ac;
-    }
-
-    public String getDecoderMappingTableG2ad() {
-        return Decoder.mappingTableG2ad;
-    }
-
-    public short[] getEncoderIndex1() {
-        return Encoder.index1;
-
-    }
-    public String getEncoderIndex2() {
-        return Encoder.index2;
-
-    }
-    public String getEncoderIndex2a() {
-        return Encoder.index2a;
-    }
-
-    public String getEncoderIndex2b() {
-        return Encoder.index2b;
-    }
-
-    public String getEncoderIndex2c() {
-        return Encoder.index2c;
-    }
-    protected static class Decoder extends CharsetDecoder {
-        private final int SS2 =  0x8E;
-        private final int SS3 =  0x8F;
-
-        private String mappingTableG2;
-
-        public Decoder(Charset cs) {
-                super(cs, 1.0f, 1.0f);
-        }
-
-        private CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-            while (sp < sl) {
-                int byte1, byte2;
-                int inputSize = 1;
-                char outputChar = '\uFFFD';
-                byte1 = sa[sp] & 0xff;
-
-                if (byte1 == SS2) {
-                    if (sl - sp < 4) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    byte1 = sa[sp + 1] & 0xff;
-                    inputSize = 2;
-                    if ( byte1 == 0xa2)
-                        mappingTableG2 = mappingTableG2a2;
-                    else if ( byte1 == 0xac)
-                        mappingTableG2 = mappingTableG2ac;
-                    else if ( byte1 == 0xad)
-                        mappingTableG2 = mappingTableG2ad;
-                    else
-                        return CoderResult.malformedForLength(2);
-                    byte1 = sa[sp + 2] & 0xff;
-                    if ( byte1 < 0xa1 || byte1 > 0xfe) {
-                        return CoderResult.malformedForLength(3);
-                    }
-                    byte2 = sa[sp + 3] & 0xff;
-                    if ( byte2 < 0xa1 || byte2 > 0xfe) {
-                      return CoderResult.malformedForLength(4);
-                    }
-                    inputSize = 4;
-                    outputChar = mappingTableG2.charAt(((byte1 - 0xa1) * 94) + byte2 - 0xa1);
-                } else if(byte1 == SS3 ) {
-                    return CoderResult.malformedForLength(1);
-                } else if ( byte1 <= 0x9f ) {                // valid single byte
-                    outputChar = byteToCharTable.charAt(byte1);
-                } else if (byte1 < 0xa1 || byte1 > 0xfe) {   // invalid range?
-                    return CoderResult.malformedForLength(1);
-                } else {                                     // G1
-                    if (sl - sp < 2) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    byte2 = sa[sp + 1] & 0xff;
-                    inputSize = 2;
-                    if ( byte2 < 0xa1 || byte2 > 0xfe) {
-                        return CoderResult.malformedForLength(2);
-                    }
-                    outputChar = mappingTableG1.charAt(((byte1 - 0xa1) * 94) + byte2 - 0xa1);
-                }
-                if  (outputChar == '\uFFFD')
-                    return CoderResult.unmappableForLength(inputSize);
-                if (dl - dp < 1)
-                    return CoderResult.OVERFLOW;
-                da[dp++] = outputChar;
-                sp += inputSize;
-            }
-            return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    int byte1, byte2;
-                    int inputSize = 1;
-                    char outputChar = '\uFFFD';
-                    byte1 = src.get() & 0xff;
-
-                    if (byte1 == SS2) {
-                        if (src.remaining() < 3)
-                            return CoderResult.UNDERFLOW;
-                        byte1 = src.get() & 0xff;
-                        inputSize = 2;
-                        if ( byte1 == 0xa2)
-                            mappingTableG2 = mappingTableG2a2;
-                        else if ( byte1 == 0xac)
-                            mappingTableG2 = mappingTableG2ac;
-                        else if ( byte1 == 0xad)
-                          mappingTableG2 = mappingTableG2ad;
-                        else
-                            return CoderResult.malformedForLength(2);
-                        byte1 = src.get() & 0xff;
-                        if ( byte1 < 0xa1 || byte1 > 0xfe)
-                            return CoderResult.malformedForLength(3);
-                        byte2 = src.get() & 0xff;
-                        if ( byte2 < 0xa1 || byte2 > 0xfe)
-                            return CoderResult.malformedForLength(4);
-                        inputSize = 4;
-                        outputChar = mappingTableG2.charAt(((byte1 - 0xa1) * 94) + byte2 - 0xa1);
-                    } else if (byte1 == SS3 ) {
-                        return CoderResult.malformedForLength(1);
-                    } else if ( byte1 <= 0x9f ) {                // valid single byte
-                        outputChar = byteToCharTable.charAt(byte1);
-                    } else if (byte1 < 0xa1 || byte1 > 0xfe) {   // invalid range?
-                        return CoderResult.malformedForLength(1);
-                    } else {                                     // G1
-                        if (src.remaining() < 1)
-                            return CoderResult.UNDERFLOW;
-                        byte2 = src.get() & 0xff;
-                        if ( byte2 < 0xa1 || byte2 > 0xfe) {
-                            return CoderResult.malformedForLength(2);
-                        }
-                        inputSize = 2;
-                        outputChar = mappingTableG1.charAt(((byte1 - 0xa1) * 94) + byte2 - 0xa1);
-                    }
-
-                    if (outputChar == '\uFFFD')
-                        return CoderResult.unmappableForLength(inputSize);
-                    if (!dst.hasRemaining())
-                        return CoderResult.OVERFLOW;
-                    dst.put(outputChar);
-                    mark += inputSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                    src.position(mark);
-            }
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            if (true && src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-
-        private final static String byteToCharTable;
-        private final static String mappingTableG1;
-        private final static String mappingTableG2a2;
-        private final static String mappingTableG2ac;
-        private final static String mappingTableG2ad;
-
-        static {
-            byteToCharTable =
-                "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" +
-                "\u0008\u0009\n\u000B\u000C\r\u000E\u000F" +
-                "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" +
-                "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" +
-                "\u0020\u0021\"\u0023\u0024\u0025\u0026\u0027" +
-                "\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F" +
-                "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037" +
-                "\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u003F" +
-                "\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047" +
-                "\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F" +
-                "\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057" +
-                "\u0058\u0059\u005A\u005B\\\u005D\u005E\u005F" +
-                "\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067" +
-                "\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F" +
-                "\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077" +
-                "\u0078\u0079\u007A\u007B\u007C\u007D\u007E\u007F" +
-                "\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087" +
-                "\u0088\u0089\u008A\u008B\u008C\u008D\uFFFD\uFFFD" +
-                "\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097" +
-                "\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F"
-                ;
-            mappingTableG1 =
-                "\u3000\uFF0C\u3001\u3002\uFF0E\u2027\uFF1B\uFF1A" +
-                "\uFF1F\uFF01\uFE30\u2026\u2025\uFE50\uFE51\uFE52" +
-                "\u00B7\uFE54\uFE55\uFE56\uFE57\uFE31\u2014\uFE32" +
-                "\uFE58\uFE33\u2574\uFE34\uFE4F\uFF08\uFF09\uFE35" +
-                "\uFE36\uFF5B\uFF5D\uFE37\uFE38\u3014\u3015\uFE39" +
-                "\uFE3A\u3010\u3011\uFE3B\uFE3C\u300A\u300B\uFE3D" +
-                "\uFE3E\u3008\u3009\uFE3F\uFE40\u300C\u300D\uFE41" +
-                "\uFE42\u300E\u300F\uFE43\uFE44\uFE59\uFE5A\uFE5B" +
-                "\uFE5C\uFE5D\uFE5E\u2018\u2019\u201C\u201D\u301D" +
-                "\u301E\u2035\u2032\uFF03\uFF06\uFF0A\u203B\u00A7" +
-                "\u3003\u25CB\u25CF\u25B3\u25B2\u25CE\u2606\u2605" +
-                "\u25C7\u25C6\u25A1\u25A0\u25BD\u25BC\u32A3\u2105" +
-                "\u203E\uFFE3\uFF3F\u02CD\uFE49\uFE4A\uFE4D\uFE4E" +
-                "\uFE4B\uFE4C\uFE5F\uFE60\uFE61\uFF0B\uFF0D\u00D7" +
-                "\u00F7\u00B1\u221A\uFF1C\uFF1E\uFF1D\u2266\u2267" +
-                "\u2260\u221E\u2252\u2261\uFE62\uFE63\uFE64\uFE65" +
-                "\uFE66\u223C\u2229\u222A\u22A5\u2220\u221F\u22BF" +
-                "\u33D2\u33D1\u222B\u222E\u2235\u2234\u2640\u2642" +
-                "\u2295\u2299\u2191\u2193\u2192\u2190\u2196\u2197" +
-                "\u2199\u2198\u2225\uFF5C\uFF0F\uFF3C\u2215\uFE68" +
-                "\uFF04\uFFE5\u3012\uFFE0\uFFE1\uFF05\uFF20\u2103" +
-                "\u2109\uFE69\uFE6A\uFE6B\u33D5\u339C\u339D\u339E" +
-                "\u33CE\u33A1\u338E\u338F\u33C4\u00B0\u5159\u515B" +
-                "\u515E\u515D\u5161\u5163\u55E7\u74E9\u7CCE\u2581" +
-                "\u2582\u2583\u2584\u2585\u2586\u2587\u2588\u258F" +
-                "\u258E\u258D\u258C\u258B\u258A\u2589\u253C\u2534" +
-                "\u252C\u2524\u251C\u2594\u2500\u2502\u2595\u250C" +
-                "\u2510\u2514\u2518\u256D\u256E\u2570\u256F\u2550" +
-                "\u255E\u256A\u2561\u25E2\u25E3\u25E5\u25E4\u2571" +
-                "\u2572\u2573\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15" +
-                "\uFF16\uFF17\uFF18\uFF19\u2160\u2161\u2162\u2163" +
-                "\u2164\u2165\u2166\u2167\u2168\u2169\u3021\u3022" +
-                "\u3023\u3024\u3025\u3026\u3027\u3028\u3029\u5341" +
-                "\u5344\u5345\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26" +
-                "\uFF27\uFF28\uFF29\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E" +
-                "\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34\uFF35\uFF36" +
-                "\uFF37\uFF38\uFF39\uFF3A\uFF41\uFF42\uFF43\uFF44" +
-                "\uFF45\uFF46\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C" +
-                "\uFF4D\uFF4E\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54" +
-                "\uFF55\uFF56\uFF57\uFF58\uFF59\uFF5A\u0391\u0392" +
-                "\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A" +
-                "\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3" +
-                "\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2" +
-                "\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA" +
-                "\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3" +
-                "\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u3105\u3106" +
-                "\u3107\u3108\u3109\u310A\u310B\u310C\u310D\u310E" +
-                "\u310F\u3110\u3111\u3112\u3113\u3114\u3115\u3116" +
-                "\u3117\u3118\u3119\u311A\u311B\u311C\u311D\u311E" +
-                "\u311F\u3120\u3121\u3122\u3123\u3124\u3125\u3126" +
-                "\u3127\u3128\u3129\u02D9\u02C9\u02CA\u02C7\u02CB" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2460\u2461" +
-                "\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469" +
-                "\u2474\u2475\u2476\u2477\u2478\u2479\u247A\u247B" +
-                "\u247C\u247D\u2170\u2171\u2172\u2173\u2174\u2175" +
-                "\u2176\u2177\u2178\u2179\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\u4E00\u4E28\u4E36\u4E3F" +
-                "\u4E59\u4E85\u4E8C\u4EA0\u4EBA\u513F\u5165\u516B" +
-                "\u5182\u5196\u51AB\u51E0\u51F5\u5200\u529B\u52F9" +
-                "\u5315\u531A\u5338\u5341\u535C\u5369\u5382\u53B6" +
-                "\u53C8\u53E3\u56D7\u571F\u58EB\u590A\u5915\u5927" +
-                "\u5973\u5B50\u5B80\u5BF8\u5C0F\u5C22\u5C38\u5C6E" +
-                "\u5C71\u5DDB\u5DE5\u5DF1\u5DFE\u5E72\u5E7A\u5E7F" +
-                "\u5EF4\u5EFE\u5F0B\u5F13\u5F50\u5F61\u5F73\u5FC3" +
-                "\u6208\u6236\u624B\u652F\u6534\u6587\u6597\u65A4" +
-                "\u65B9\u65E0\u65E5\u66F0\u6708\u6728\u6B20\u6B62" +
-                "\u6B79\u6BB3\u6BCB\u6BD4\u6BDB\u6C0F\u6C14\u6C34" +
-                "\u706B\u722A\u7236\u723B\u723F\u7247\u7259\u725B" +
-                "\u72AC\u7384\u7389\u74DC\u74E6\u7518\u751F\u7528" +
-                "\u7530\u758B\u7592\u7676\u767D\u76AE\u76BF\u76EE" +
-                "\u77DB\u77E2\u77F3\u793A\u79B8\u79BE\u7A74\u7ACB" +
-                "\u7AF9\u7C73\u7CF8\u7F36\u7F51\u7F8A\u7FBD\u8001" +
-                "\u800C\u8012\u8033\u807F\u8089\u81E3\u81EA\u81F3" +
-                "\u81FC\u820C\u821B\u821F\u826E\u8272\u8278\u864D" +
-                "\u866B\u8840\u884C\u8863\u897E\u898B\u89D2\u8A00" +
-                "\u8C37\u8C46\u8C55\u8C78\u8C9D\u8D64\u8D70\u8DB3" +
-                "\u8EAB\u8ECA\u8F9B\u8FB0\u8FB5\u9091\u9149\u91C6" +
-                "\u91CC\u91D1\u9577\u9580\u961C\u96B6\u96B9\u96E8" +
-                "\u9752\u975E\u9762\u9769\u97CB\u97ED\u97F3\u9801" +
-                "\u98A8\u98DB\u98DF\u9996\u9999\u99AC\u9AA8\u9AD8" +
-                "\u9ADF\u9B25\u9B2F\u9B32\u9B3C\u9B5A\u9CE5\u9E75" +
-                "\u9E7F\u9EA5\u9EBB\u9EC3\u9ECD\u9ED1\u9EF9\u9EFD" +
-                "\u9F0E\u9F13\u9F20\u9F3B\u9F4A\u9F52\u9F8D\u9F9C" +
-                "\u9FA0\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2400\u2401" +
-                "\u2402\u2403\u2404\u2405\u2406\u2407\u2408\u2409" +
-                "\u240A\u240B\u240C\u240D\u240E\u240F\u2410\u2411" +
-                "\u2412\u2413\u2414\u2415\u2416\u2417\u2418\u2419" +
-                "\u241A\u241B\u241C\u241D\u241E\u241F\u2421\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\u4E00\u4E59\u4E01\u4E03\u4E43\u4E5D" +
-                "\u4E86\u4E8C\u4EBA\u513F\u5165\u516B\u51E0\u5200" +
-                "\u5201\u529B\u5315\u5341\u535C\u53C8\u4E09\u4E0B" +
-                "\u4E08\u4E0A\u4E2B\u4E38\u51E1\u4E45\u4E48\u4E5F" +
-                "\u4E5E\u4E8E\u4EA1\u5140\u5203\u52FA\u5343\u53C9" +
-                "\u53E3\u571F\u58EB\u5915\u5927\u5973\u5B50\u5B51" +
-                "\u5B53\u5BF8\u5C0F\u5C22\u5C38\u5C71\u5DDD\u5DE5" +
-                "\u5DF1\u5DF2\u5DF3\u5DFE\u5E72\u5EFE\u5F0B\u5F13" +
-                "\u624D\u4E11\u4E10\u4E0D\u4E2D\u4E30\u4E39\u4E4B" +
-                "\u5C39\u4E88\u4E91\u4E95\u4E92\u4E94\u4EA2\u4EC1" +
-                "\u4EC0\u4EC3\u4EC6\u4EC7\u4ECD\u4ECA\u4ECB\u4EC4" +
-                "\u5143\u5141\u5167\u516D\u516E\u516C\u5197\u51F6" +
-                "\u5206\u5207\u5208\u52FB\u52FE\u52FF\u5316\u5339" +
-                "\u5348\u5347\u5345\u535E\u5384\u53CB\u53CA\u53CD" +
-                "\u58EC\u5929\u592B\u592A\u592D\u5B54\u5C11\u5C24" +
-                "\u5C3A\u5C6F\u5DF4\u5E7B\u5EFF\u5F14\u5F15\u5FC3" +
-                "\u6208\u6236\u624B\u624E\u652F\u6587\u6597\u65A4" +
-                "\u65B9\u65E5\u66F0\u6708\u6728\u6B20\u6B62\u6B79" +
-                "\u6BCB\u6BD4\u6BDB\u6C0F\u6C34\u706B\u722A\u7236" +
-                "\u723B\u7247\u7259\u725B\u72AC\u738B\u4E19\u4E16" +
-                "\u4E15\u4E14\u4E18\u4E3B\u4E4D\u4E4F\u4E4E\u4EE5" +
-                "\u4ED8\u4ED4\u4ED5\u4ED6\u4ED7\u4EE3\u4EE4\u4ED9" +
-                "\u4EDE\u5145\u5144\u5189\u518A\u51AC\u51F9\u51FA" +
-                "\u51F8\u520A\u52A0\u529F\u5305\u5306\u5317\u531D" +
-                "\u4EDF\u534A\u5349\u5361\u5360\u536F\u536E\u53BB" +
-                "\u53EF\u53E4\u53F3\u53EC\u53EE\u53E9\u53E8\u53FC" +
-                "\u53F8\u53F5\u53EB\u53E6\u53EA\u53F2\u53F1\u53F0" +
-                "\u53E5\u53ED\u53FB\u56DB\u56DA\u5916\u592E\u5931" +
-                "\u5974\u5976\u5B55\u5B83\u5C3C\u5DE8\u5DE7\u5DE6" +
-                "\u5E02\u5E03\u5E73\u5E7C\u5F01\u5F18\u5F17\u5FC5" +
-                "\u620A\u6253\u6254\u6252\u6251\u65A5\u65E6\u672E" +
-                "\u672C\u672A\u672B\u672D\u6B63\u6BCD\u6C11\u6C10" +
-                "\u6C38\u6C41\u6C40\u6C3E\u72AF\u7384\u7389\u74DC" +
-                "\u74E6\u7518\u751F\u7528\u7529\u7530\u7531\u7532" +
-                "\u7533\u758B\u767D\u76AE\u76BF\u76EE\u77DB\u77E2" +
-                "\u77F3\u793A\u79BE\u7A74\u7ACB\u4E1E\u4E1F\u4E52" +
-                "\u4E53\u4E69\u4E99\u4EA4\u4EA6\u4EA5\u4EFF\u4F09" +
-                "\u4F19\u4F0A\u4F15\u4F0D\u4F10\u4F11\u4F0F\u4EF2" +
-                "\u4EF6\u4EFB\u4EF0\u4EF3\u4EFD\u4F01\u4F0B\u5149" +
-                "\u5147\u5146\u5148\u5168\u5171\u518D\u51B0\u5217" +
-                "\u5211\u5212\u520E\u5216\u52A3\u5308\u5321\u5320" +
-                "\u5370\u5371\u5409\u540F\u540C\u540A\u5410\u5401" +
-                "\u540B\u5404\u5411\u540D\u5408\u5403\u540E\u5406" +
-                "\u5412\u56E0\u56DE\u56DD\u5733\u5730\u5728\u572D" +
-                "\u572C\u572F\u5729\u5919\u591A\u5937\u5938\u5984" +
-                "\u5978\u5983\u597D\u5979\u5982\u5981\u5B57\u5B58" +
-                "\u5B87\u5B88\u5B85\u5B89\u5BFA\u5C16\u5C79\u5DDE" +
-                "\u5E06\u5E76\u5E74\u5F0F\u5F1B\u5FD9\u5FD6\u620E" +
-                "\u620C\u620D\u6210\u6263\u625B\u6258\u6536\u65E9" +
-                "\u65E8\u65EC\u65ED\u66F2\u66F3\u6709\u673D\u6734" +
-                "\u6731\u6735\u6B21\u6B64\u6B7B\u6C16\u6C5D\u6C57" +
-                "\u6C59\u6C5F\u6C60\u6C50\u6C55\u6C61\u6C5B\u6C4D" +
-                "\u6C4E\u7070\u725F\u725D\u767E\u7AF9\u7C73\u7CF8" +
-                "\u7F36\u7F8A\u7FBD\u8001\u8003\u800C\u8012\u8033" +
-                "\u807F\u8089\u808B\u808C\u81E3\u81EA\u81F3\u81FC" +
-                "\u820C\u821B\u821F\u826E\u8272\u827E\u866B\u8840" +
-                "\u884C\u8863\u897F\u9621\u4E32\u4EA8\u4F4D\u4F4F" +
-                "\u4F47\u4F57\u4F5E\u4F34\u4F5B\u4F55\u4F30\u4F50" +
-                "\u4F51\u4F3D\u4F3A\u4F38\u4F43\u4F54\u4F3C\u4F46" +
-                "\u4F63\u4F5C\u4F60\u4F2F\u4F4E\u4F36\u4F59\u4F5D" +
-                "\u4F48\u4F5A\u514C\u514B\u514D\u5175\u51B6\u51B7" +
-                "\u5225\u5224\u5229\u522A\u5228\u52AB\u52A9\u52AA" +
-                "\u52AC\u5323\u5373\u5375\u541D\u542D\u541E\u543E" +
-                "\u5426\u544E\u5427\u5446\u5443\u5433\u5448\u5442" +
-                "\u541B\u5429\u544A\u5439\u543B\u5438\u542E\u5435" +
-                "\u5436\u5420\u543C\u5440\u5431\u542B\u541F\u542C" +
-                "\u56EA\u56F0\u56E4\u56EB\u574A\u5751\u5740\u574D" +
-                "\u5747\u574E\u573E\u5750\u574F\u573B\u58EF\u593E" +
-                "\u599D\u5992\u59A8\u599E\u59A3\u5999\u5996\u598D" +
-                "\u59A4\u5993\u598A\u59A5\u5B5D\u5B5C\u5B5A\u5B5B" +
-                "\u5B8C\u5B8B\u5B8F\u5C2C\u5C40\u5C41\u5C3F\u5C3E" +
-                "\u5C90\u5C91\u5C94\u5C8C\u5DEB\u5E0C\u5E8F\u5E87" +
-                "\u5E8A\u5EF7\u5F04\u5F1F\u5F64\u5F62\u5F77\u5F79" +
-                "\u5FD8\u5FCC\u5FD7\u5FCD\u5FF1\u5FEB\u5FF8\u5FEA" +
-                "\u6212\u6211\u6284\u6297\u6296\u6280\u6276\u6289" +
-                "\u626D\u628A\u627C\u627E\u6279\u6273\u6292\u626F" +
-                "\u6298\u626E\u6295\u6293\u6291\u6286\u6539\u653B" +
-                "\u6538\u65F1\u66F4\u675F\u674E\u674F\u6750\u6751" +
-                "\u675C\u6756\u675E\u6749\u6746\u6760\u6753\u6757" +
-                "\u6B65\u6BCF\u6C42\u6C5E\u6C99\u6C81\u6C88\u6C89" +
-                "\u6C85\u6C9B\u6C6A\u6C7A\u6C90\u6C70\u6C8C\u6C68" +
-                "\u6C96\u6C92\u6C7D\u6C83\u6C72\u6C7E\u6C74\u6C86" +
-                "\u6C76\u6C8D\u6C94\u6C98\u6C82\u7076\u707C\u707D" +
-                "\u7078\u7262\u7261\u7260\u72C4\u72C2\u7396\u752C" +
-                "\u752B\u7537\u7538\u7682\u76EF\u77E3\u79C1\u79C0" +
-                "\u79BF\u7A76\u7CFB\u7F55\u8096\u8093\u809D\u8098" +
-                "\u809B\u809A\u80B2\u826F\u8292\u828B\u828D\u898B" +
-                "\u89D2\u8A00\u8C37\u8C46\u8C55\u8C9D\u8D64\u8D70" +
-                "\u8DB3\u8EAB\u8ECA\u8F9B\u8FB0\u8FC2\u8FC6\u8FC5" +
-                "\u8FC4\u5DE1\u9091\u90A2\u90AA\u90A6\u90A3\u9149" +
-                "\u91C6\u91CC\u9632\u962E\u9631\u962A\u962C\u4E26" +
-                "\u4E56\u4E73\u4E8B\u4E9B\u4E9E\u4EAB\u4EAC\u4F6F" +
-                "\u4F9D\u4F8D\u4F73\u4F7F\u4F6C\u4F9B\u4F8B\u4F86" +
-                "\u4F83\u4F70\u4F75\u4F88\u4F69\u4F7B\u4F96\u4F7E" +
-                "\u4F8F\u4F91\u4F7A\u5154\u5152\u5155\u5169\u5177" +
-                "\u5176\u5178\u51BD\u51FD\u523B\u5238\u5237\u523A" +
-                "\u5230\u522E\u5236\u5241\u52BE\u52BB\u5352\u5354" +
-                "\u5353\u5351\u5366\u5377\u5378\u5379\u53D6\u53D4" +
-                "\u53D7\u5473\u5475\u5496\u5478\u5495\u5480\u547B" +
-                "\u5477\u5484\u5492\u5486\u547C\u5490\u5471\u5476" +
-                "\u548C\u549A\u5462\u5468\u548B\u547D\u548E\u56FA" +
-                "\u5783\u5777\u576A\u5769\u5761\u5766\u5764\u577C" +
-                "\u591C\u5949\u5947\u5948\u5944\u5954\u59BE\u59BB" +
-                "\u59D4\u59B9\u59AE\u59D1\u59C6\u59D0\u59CD\u59CB" +
-                "\u59D3\u59CA\u59AF\u59B3\u59D2\u59C5\u5B5F\u5B64" +
-                "\u5B63\u5B97\u5B9A\u5B98\u5B9C\u5B99\u5B9B\u5C1A" +
-                "\u5C48\u5C45\u5C46\u5CB7\u5CA1\u5CB8\u5CA9\u5CAB" +
-                "\u5CB1\u5CB3\u5E18\u5E1A\u5E16\u5E15\u5E1B\u5E11" +
-                "\u5E78\u5E9A\u5E97\u5E9C\u5E95\u5E96\u5EF6\u5F26" +
-                "\u5F27\u5F29\u5F80\u5F81\u5F7F\u5F7C\u5FDD\u5FE0" +
-                "\u5FFD\u5FF5\u5FFF\u600F\u6014\u602F\u6035\u6016" +
-                "\u602A\u6015\u6021\u6027\u6029\u602B\u601B\u6216" +
-                "\u6215\u623F\u623E\u6240\u627F\u62C9\u62CC\u62C4" +
-                "\u62BF\u62C2\u62B9\u62D2\u62DB\u62AB\u62D3\u62D4" +
-                "\u62CB\u62C8\u62A8\u62BD\u62BC\u62D0\u62D9\u62C7" +
-                "\u62CD\u62B5\u62DA\u62B1\u62D8\u62D6\u62D7\u62C6" +
-                "\u62AC\u62CE\u653E\u65A7\u65BC\u65FA\u6614\u6613" +
-                "\u660C\u6606\u6602\u660E\u6600\u660F\u6615\u660A" +
-                "\u6607\u670D\u670B\u676D\u678B\u6795\u6771\u679C" +
-                "\u6773\u6777\u6787\u679D\u6797\u676F\u6770\u677F" +
-                "\u6789\u677E\u6790\u6775\u679A\u6793\u677C\u676A" +
-                "\u6772\u6B23\u6B66\u6B67\u6B7F\u6C13\u6C1B\u6CE3" +
-                "\u6CE8\u6CF3\u6CB1\u6CCC\u6CE5\u6CB3\u6CBD\u6CBE" +
-                "\u6CBC\u6CE2\u6CAB\u6CD5\u6CD3\u6CB8\u6CC4\u6CB9" +
-                "\u6CC1\u6CAE\u6CD7\u6CC5\u6CF1\u6CBF\u6CBB\u6CE1" +
-                "\u6CDB\u6CCA\u6CAC\u6CEF\u6CDC\u6CD6\u6CE0\u7095" +
-                "\u708E\u7092\u708A\u7099\u722C\u722D\u7238\u7248" +
-                "\u7267\u7269\u72C0\u72CE\u72D9\u72D7\u72D0\u73A9" +
-                "\u73A8\u739F\u73AB\u73A5\u753D\u759D\u7599\u759A" +
-                "\u7684\u76C2\u76F2\u76F4\u77E5\u77FD\u793E\u7940" +
-                "\u7941\u79C9\u79C8\u7A7A\u7A79\u7AFA\u7CFE\u7F54" +
-                "\u7F8C\u7F8B\u8005\u80BA\u80A5\u80A2\u80B1\u80A1" +
-                "\u80AB\u80A9\u80B4\u80AA\u80AF\u81E5\u81FE\u820D" +
-                "\u82B3\u829D\u8299\u82AD\u82BD\u829F\u82B9\u82B1" +
-                "\u82AC\u82A5\u82AF\u82B8\u82A3\u82B0\u82BE\u82B7" +
-                "\u864E\u8671\u521D\u8868\u8ECB\u8FCE\u8FD4\u8FD1" +
-                "\u90B5\u90B8\u90B1\u90B6\u91C7\u91D1\u9577\u9580" +
-                "\u961C\u9640\u963F\u963B\u9644\u9642\u96B9\u96E8" +
-                "\u9752\u975E\u4E9F\u4EAD\u4EAE\u4FE1\u4FB5\u4FAF" +
-                "\u4FBF\u4FE0\u4FD1\u4FCF\u4FDD\u4FC3\u4FB6\u4FD8" +
-                "\u4FDF\u4FCA\u4FD7\u4FAE\u4FD0\u4FC4\u4FC2\u4FDA" +
-                "\u4FCE\u4FDE\u4FB7\u5157\u5192\u5191\u51A0\u524E" +
-                "\u5243\u524A\u524D\u524C\u524B\u5247\u52C7\u52C9" +
-                "\u52C3\u52C1\u530D\u5357\u537B\u539A\u53DB\u54AC" +
-                "\u54C0\u54A8\u54CE\u54C9\u54B8\u54A6\u54B3\u54C7" +
-                "\u54C2\u54BD\u54AA\u54C1\u54C4\u54C8\u54AF\u54AB" +
-                "\u54B1\u54BB\u54A9\u54A7\u54BF\u56FF\u5782\u578B" +
-                "\u57A0\u57A3\u57A2\u57CE\u57AE\u5793\u5955\u5951" +
-                "\u594F\u594E\u5950\u59DC\u59D8\u59FF\u59E3\u59E8" +
-                "\u5A03\u59E5\u59EA\u59DA\u59E6\u5A01\u59FB\u5B69" +
-                "\u5BA3\u5BA6\u5BA4\u5BA2\u5BA5\u5C01\u5C4E\u5C4F" +
-                "\u5C4D\u5C4B\u5CD9\u5CD2\u5DF7\u5E1D\u5E25\u5E1F" +
-                "\u5E7D\u5EA0\u5EA6\u5EFA\u5F08\u5F2D\u5F65\u5F88" +
-                "\u5F85\u5F8A\u5F8B\u5F87\u5F8C\u5F89\u6012\u601D" +
-                "\u6020\u6025\u600E\u6028\u604D\u6070\u6068\u6062" +
-                "\u6046\u6043\u606C\u606B\u606A\u6064\u6241\u62DC" +
-                "\u6316\u6309\u62FC\u62ED\u6301\u62EE\u62FD\u6307" +
-                "\u62F1\u62F7\u62EF\u62EC\u62FE\u62F4\u6311\u6302" +
-                "\u653F\u6545\u65AB\u65BD\u65E2\u6625\u662D\u6620" +
-                "\u6627\u662F\u661F\u6628\u6631\u6624\u66F7\u67FF" +
-                "\u67D3\u67F1\u67D4\u67D0\u67EC\u67B6\u67AF\u67F5" +
-                "\u67E9\u67EF\u67C4\u67D1\u67B4\u67DA\u67E5\u67B8" +
-                "\u67CF\u67DE\u67F3\u67B0\u67D9\u67E2\u67DD\u67D2" +
-                "\u6B6A\u6B83\u6B86\u6BB5\u6BD2\u6BD7\u6C1F\u6CC9" +
-                "\u6D0B\u6D32\u6D2A\u6D41\u6D25\u6D0C\u6D31\u6D1E" +
-                "\u6D17\u6D3B\u6D3D\u6D3E\u6D36\u6D1B\u6CF5\u6D39" +
-                "\u6D27\u6D38\u6D29\u6D2E\u6D35\u6D0E\u6D2B\u70AB" +
-                "\u70BA\u70B3\u70AC\u70AF\u70AD\u70B8\u70AE\u70A4" +
-                "\u7230\u7272\u726F\u7274\u72E9\u72E0\u72E1\u73B7" +
-                "\u73CA\u73BB\u73B2\u73CD\u73C0\u73B3\u751A\u752D" +
-                "\u754F\u754C\u754E\u754B\u75AB\u75A4\u75A5\u75A2" +
-                "\u75A3\u7678\u7686\u7687\u7688\u76C8\u76C6\u76C3" +
-                "\u76C5\u7701\u76F9\u76F8\u7709\u770B\u76FE\u76FC" +
-                "\u7707\u77DC\u7802\u7814\u780C\u780D\u7946\u7949" +
-                "\u7948\u7947\u79B9\u79BA\u79D1\u79D2\u79CB\u7A7F" +
-                "\u7A81\u7AFF\u7AFD\u7C7D\u7D02\u7D05\u7D00\u7D09" +
-                "\u7D07\u7D04\u7D06\u7F38\u7F8E\u7FBF\u8010\u800D" +
-                "\u8011\u8036\u80D6\u80E5\u80DA\u80C3\u80C4\u80CC" +
-                "\u80E1\u80DB\u80CE\u80DE\u80E4\u80DD\u81F4\u8222" +
-                "\u82E7\u8303\u8305\u82E3\u82DB\u82E6\u8304\u82E5" +
-                "\u8302\u8309\u82D2\u82D7\u82F1\u8301\u82DC\u82D4" +
-                "\u82D1\u82DE\u82D3\u82DF\u82EF\u8306\u8650\u8679" +
-                "\u867B\u867A\u884D\u886B\u8981\u89D4\u8A08\u8A02" +
-                "\u8A03\u8C9E\u8CA0\u8D74\u8D73\u8DB4\u8ECD\u8ECC" +
-                "\u8FF0\u8FE6\u8FE2\u8FEA\u8FE5\u8FED\u8FEB\u8FE4" +
-                "\u8FE8\u90CA\u90CE\u90C1\u90C3\u914B\u914A\u91CD" +
-                "\u9582\u9650\u964B\u964C\u964D\u9762\u9769\u97CB" +
-                "\u97ED\u97F3\u9801\u98A8\u98DB\u98DF\u9996\u9999" +
-                "\u4E58\u4EB3\u500C\u500D\u5023\u4FEF\u5026\u5025" +
-                "\u4FF8\u5029\u5016\u5006\u503C\u501F\u501A\u5012" +
-                "\u5011\u4FFA\u5000\u5014\u5028\u4FF1\u5021\u500B" +
-                "\u5019\u5018\u4FF3\u4FEE\u502D\u502A\u4FFE\u502B" +
-                "\u5009\u517C\u51A4\u51A5\u51A2\u51CD\u51CC\u51C6" +
-                "\u51CB\u5256\u525C\u5254\u525B\u525D\u532A\u537F" +
-                "\u539F\u539D\u53DF\u54E8\u5510\u5501\u5537\u54FC" +
-                "\u54E5\u54F2\u5506\u54FA\u5514\u54E9\u54ED\u54E1" +
-                "\u5509\u54EE\u54EA\u54E6\u5527\u5507\u54FD\u550F" +
-                "\u5703\u5704\u57C2\u57D4\u57CB\u57C3\u5809\u590F" +
-                "\u5957\u5958\u595A\u5A11\u5A18\u5A1C\u5A1F\u5A1B" +
-                "\u5A13\u59EC\u5A20\u5A23\u5A29\u5A25\u5A0C\u5A09" +
-                "\u5B6B\u5C58\u5BB0\u5BB3\u5BB6\u5BB4\u5BAE\u5BB5" +
-                "\u5BB9\u5BB8\u5C04\u5C51\u5C55\u5C50\u5CED\u5CFD" +
-                "\u5CFB\u5CEA\u5CE8\u5CF0\u5CF6\u5D01\u5CF4\u5DEE" +
-                "\u5E2D\u5E2B\u5EAB\u5EAD\u5EA7\u5F31\u5F92\u5F91" +
-                "\u5F90\u6059\u6063\u6065\u6050\u6055\u606D\u6069" +
-                "\u606F\u6084\u609F\u609A\u608D\u6094\u608C\u6085" +
-                "\u6096\u6247\u62F3\u6308\u62FF\u634E\u633E\u632F" +
-                "\u6355\u6342\u6346\u634F\u6349\u633A\u6350\u633D" +
-                "\u632A\u632B\u6328\u634D\u634C\u6548\u6549\u6599" +
-                "\u65C1\u65C5\u6642\u6649\u664F\u6643\u6652\u664C" +
-                "\u6645\u6641\u66F8\u6714\u6715\u6717\u6821\u6838" +
-                "\u6848\u6846\u6853\u6839\u6842\u6854\u6829\u68B3" +
-                "\u6817\u684C\u6851\u683D\u67F4\u6850\u6840\u683C" +
-                "\u6843\u682A\u6845\u6813\u6818\u6841\u6B8A\u6B89" +
-                "\u6BB7\u6C23\u6C27\u6C28\u6C26\u6C24\u6CF0\u6D6A" +
-                "\u6D95\u6D88\u6D87\u6D66\u6D78\u6D77\u6D59\u6D93" +
-                "\u6D6C\u6D89\u6D6E\u6D5A\u6D74\u6D69\u6D8C\u6D8A" +
-                "\u6D79\u6D85\u6D65\u6D94\u70CA\u70D8\u70E4\u70D9" +
-                "\u70C8\u70CF\u7239\u7279\u72FC\u72F9\u72FD\u72F8" +
-                "\u72F7\u7386\u73ED\u7409\u73EE\u73E0\u73EA\u73DE" +
-                "\u7554\u755D\u755C\u755A\u7559\u75BE\u75C5\u75C7" +
-                "\u75B2\u75B3\u75BD\u75BC\u75B9\u75C2\u75B8\u768B" +
-                "\u76B0\u76CA\u76CD\u76CE\u7729\u771F\u7720\u7728" +
-                "\u77E9\u7830\u7827\u7838\u781D\u7834\u7837\u7825" +
-                "\u782D\u7820\u781F\u7832\u7955\u7950\u7960\u795F" +
-                "\u7956\u795E\u795D\u7957\u795A\u79E4\u79E3\u79E7" +
-                "\u79DF\u79E6\u79E9\u79D8\u7A84\u7A88\u7AD9\u7B06" +
-                "\u7B11\u7C89\u7D21\u7D17\u7D0B\u7D0A\u7D20\u7D22" +
-                "\u7D14\u7D10\u7D15\u7D1A\u7D1C\u7D0D\u7D19\u7D1B" +
-                "\u7F3A\u7F5F\u7F94\u7FC5\u7FC1\u8006\u8004\u8018" +
-                "\u8015\u8019\u8017\u803D\u803F\u80F1\u8102\u80F0" +
-                "\u8105\u80ED\u80F4\u8106\u80F8\u80F3\u8108\u80FD" +
-                "\u810A\u80FC\u80EF\u81ED\u81EC\u8200\u8210\u822A" +
-                "\u822B\u8228\u822C\u82BB\u832B\u8352\u8354\u834A" +
-                "\u8338\u8350\u8349\u8335\u8334\u834F\u8332\u8339" +
-                "\u8336\u8317\u8340\u8331\u8328\u8343\u8654\u868A" +
-                "\u86AA\u8693\u86A4\u86A9\u868C\u86A3\u869C\u8870" +
-                "\u8877\u8881\u8882\u887D\u8879\u8A18\u8A10\u8A0E" +
-                "\u8A0C\u8A15\u8A0A\u8A17\u8A13\u8A16\u8A0F\u8A11" +
-                "\u8C48\u8C7A\u8C79\u8CA1\u8CA2\u8D77\u8EAC\u8ED2" +
-                "\u8ED4\u8ECF\u8FB1\u9001\u9006\u8FF7\u9000\u8FFA" +
-                "\u8FF4\u9003\u8FFD\u9005\u8FF8\u9095\u90E1\u90DD" +
-                "\u90E2\u9152\u914D\u914C\u91D8\u91DD\u91D7\u91DC" +
-                "\u91D9\u9583\u9662\u9663\u9661\u965B\u965D\u9664" +
-                "\u9658\u965E\u96BB\u98E2\u99AC\u9AA8\u9AD8\u9B25" +
-                "\u9B32\u9B3C\u4E7E\u507A\u507D\u505C\u5047\u5043" +
-                "\u504C\u505A\u5049\u5065\u5076\u504E\u5055\u5075" +
-                "\u5074\u5077\u504F\u500F\u506F\u506D\u515C\u5195" +
-                "\u51F0\u526A\u526F\u52D2\u52D9\u52D8\u52D5\u5310" +
-                "\u530F\u5319\u533F\u5340\u533E\u53C3\u66FC\u5546" +
-                "\u556A\u5566\u5544\u555E\u5561\u5543\u554A\u5531" +
-                "\u5556\u554F\u5555\u552F\u5564\u5538\u552E\u555C" +
-                "\u552C\u5563\u5533\u5541\u5557\u5708\u570B\u5709" +
-                "\u57DF\u5805\u580A\u5806\u57E0\u57E4\u57FA\u5802" +
-                "\u5835\u57F7\u57F9\u5920\u5962\u5A36\u5A41\u5A49" +
-                "\u5A66\u5A6A\u5A40\u5A3C\u5A62\u5A5A\u5A46\u5A4A" +
-                "\u5B70\u5BC7\u5BC5\u5BC4\u5BC2\u5BBF\u5BC6\u5C09" +
-                "\u5C08\u5C07\u5C60\u5C5C\u5C5D\u5D07\u5D06\u5D0E" +
-                "\u5D1B\u5D16\u5D22\u5D11\u5D29\u5D14\u5D19\u5D24" +
-                "\u5D27\u5D17\u5DE2\u5E38\u5E36\u5E33\u5E37\u5EB7" +
-                "\u5EB8\u5EB6\u5EB5\u5EBE\u5F35\u5F37\u5F57\u5F6C" +
-                "\u5F69\u5F6B\u5F97\u5F99\u5F9E\u5F98\u5FA1\u5FA0" +
-                "\u5F9C\u607F\u60A3\u6089\u60A0\u60A8\u60CB\u60B4" +
-                "\u60E6\u60BD\u60C5\u60BB\u60B5\u60DC\u60BC\u60D8" +
-                "\u60D5\u60C6\u60DF\u60B8\u60DA\u60C7\u621A\u621B" +
-                "\u6248\u63A0\u63A7\u6372\u6396\u63A2\u63A5\u6377" +
-                "\u6367\u6398\u63AA\u6371\u63A9\u6389\u6383\u639B" +
-                "\u636B\u63A8\u6384\u6388\u6399\u63A1\u63AC\u6392" +
-                "\u638F\u6380\u637B\u6369\u6368\u637A\u655D\u6556" +
-                "\u6551\u6559\u6557\u555F\u654F\u6558\u6555\u6554" +
-                "\u659C\u659B\u65AC\u65CF\u65CB\u65CC\u65CE\u665D" +
-                "\u665A\u6664\u6668\u6666\u665E\u66F9\u52D7\u671B" +
-                "\u6881\u68AF\u68A2\u6893\u68B5\u687F\u6876\u68B1" +
-                "\u68A7\u6897\u68B0\u6883\u68C4\u68AD\u6886\u6885" +
-                "\u6894\u689D\u68A8\u689F\u68A1\u6882\u6B32\u6BBA" +
-                "\u6BEB\u6BEC\u6C2B\u6D8E\u6DBC\u6DF3\u6DD9\u6DB2" +
-                "\u6DE1\u6DCC\u6DE4\u6DFB\u6DFA\u6E05\u6DC7\u6DCB" +
-                "\u6DAF\u6DD1\u6DAE\u6DDE\u6DF9\u6DB8\u6DF7\u6DF5" +
-                "\u6DC5\u6DD2\u6E1A\u6DB5\u6DDA\u6DEB\u6DD8\u6DEA" +
-                "\u6DF1\u6DEE\u6DE8\u6DC6\u6DC4\u6DAA\u6DEC\u6DBF" +
-                "\u6DE6\u70F9\u7109\u710A\u70FD\u70EF\u723D\u727D" +
-                "\u7281\u731C\u731B\u7316\u7313\u7319\u7387\u7405" +
-                "\u740A\u7403\u7406\u73FE\u740D\u74E0\u74F6\u74F7" +
-                "\u751C\u7522\u7565\u7566\u7562\u7570\u758F\u75D4" +
-                "\u75D5\u75B5\u75CA\u75CD\u768E\u76D4\u76D2\u76DB" +
-                "\u7737\u773E\u773C\u7736\u7738\u773A\u786B\u7843" +
-                "\u784E\u7965\u7968\u796D\u79FB\u7A92\u7A95\u7B20" +
-                "\u7B28\u7B1B\u7B2C\u7B26\u7B19\u7B1E\u7B2E\u7C92" +
-                "\u7C97\u7C95\u7D46\u7D43\u7D71\u7D2E\u7D39\u7D3C" +
-                "\u7D40\u7D30\u7D33\u7D44\u7D2F\u7D42\u7D32\u7D31" +
-                "\u7F3D\u7F9E\u7F9A\u7FCC\u7FCE\u7FD2\u801C\u804A" +
-                "\u8046\u812F\u8116\u8123\u812B\u8129\u8130\u8124" +
-                "\u8202\u8235\u8237\u8236\u8239\u838E\u839E\u8398" +
-                "\u8378\u83A2\u8396\u83BD\u83AB\u8392\u838A\u8393" +
-                "\u8389\u83A0\u8377\u837B\u837C\u8386\u83A7\u8655" +
-                "\u5F6A\u86C7\u86C0\u86B6\u86C4\u86B5\u86C6\u86CB" +
-                "\u86B1\u86AF\u86C9\u8853\u889E\u8888\u88AB\u8892" +
-                "\u8896\u888D\u888B\u8993\u898F\u8A2A\u8A1D\u8A23" +
-                "\u8A25\u8A31\u8A2D\u8A1F\u8A1B\u8A22\u8C49\u8C5A" +
-                "\u8CA9\u8CAC\u8CAB\u8CA8\u8CAA\u8CA7\u8D67\u8D66" +
-                "\u8DBE\u8DBA\u8EDB\u8EDF\u9019\u900D\u901A\u9017" +
-                "\u9023\u901F\u901D\u9010\u9015\u901E\u9020\u900F" +
-                "\u9022\u9016\u901B\u9014\u90E8\u90ED\u90FD\u9157" +
-                "\u91CE\u91F5\u91E6\u91E3\u91E7\u91ED\u91E9\u9589" +
-                "\u966A\u9675\u9673\u9678\u9670\u9674\u9676\u9677" +
-                "\u966C\u96C0\u96EA\u96E9\u7AE0\u7ADF\u9802\u9803" +
-                "\u9B5A\u9CE5\u9E75\u9E7F\u9EA5\u9EBB\u50A2\u508D" +
-                "\u5085\u5099\u5091\u5080\u5096\u5098\u509A\u6700" +
-                "\u51F1\u5272\u5274\u5275\u5269\u52DE\u52DD\u52DB" +
-                "\u535A\u53A5\u557B\u5580\u55A7\u557C\u558A\u559D" +
-                "\u5598\u5582\u559C\u55AA\u5594\u5587\u558B\u5583" +
-                "\u55B3\u55AE\u559F\u553E\u55B2\u559A\u55BB\u55AC" +
-                "\u55B1\u557E\u5589\u55AB\u5599\u570D\u582F\u582A" +
-                "\u5834\u5824\u5830\u5831\u5821\u581D\u5820\u58F9" +
-                "\u58FA\u5960\u5A77\u5A9A\u5A7F\u5A92\u5A9B\u5AA7" +
-                "\u5B73\u5B71\u5BD2\u5BCC\u5BD3\u5BD0\u5C0A\u5C0B" +
-                "\u5C31\u5D4C\u5D50\u5D34\u5D47\u5DFD\u5E45\u5E3D" +
-                "\u5E40\u5E43\u5E7E\u5ECA\u5EC1\u5EC2\u5EC4\u5F3C" +
-                "\u5F6D\u5FA9\u5FAA\u5FA8\u60D1\u60E1\u60B2\u60B6" +
-                "\u60E0\u611C\u6123\u60FA\u6115\u60F0\u60FB\u60F4" +
-                "\u6168\u60F1\u610E\u60F6\u6109\u6100\u6112\u621F" +
-                "\u6249\u63A3\u638C\u63CF\u63C0\u63E9\u63C9\u63C6" +
-                "\u63CD\u63D2\u63E3\u63D0\u63E1\u63D6\u63ED\u63EE" +
-                "\u6376\u63F4\u63EA\u63DB\u6452\u63DA\u63F9\u655E" +
-                "\u6566\u6562\u6563\u6591\u6590\u65AF\u666E\u6670" +
-                "\u6674\u6676\u666F\u6691\u667A\u667E\u6677\u66FE" +
-                "\u66FF\u671F\u671D\u68FA\u68D5\u68E0\u68D8\u68D7" +
-                "\u6905\u68DF\u68F5\u68EE\u68E7\u68F9\u68D2\u68F2" +
-                "\u68E3\u68CB\u68CD\u690D\u6912\u690E\u68C9\u68DA" +
-                "\u696E\u68FB\u6B3E\u6B3A\u6B3D\u6B98\u6B96\u6BBC" +
-                "\u6BEF\u6C2E\u6C2F\u6C2C\u6E2F\u6E38\u6E54\u6E21" +
-                "\u6E32\u6E67\u6E4A\u6E20\u6E25\u6E23\u6E1B\u6E5B" +
-                "\u6E58\u6E24\u6E56\u6E6E\u6E2D\u6E26\u6E6F\u6E34" +
-                "\u6E4D\u6E3A\u6E2C\u6E43\u6E1D\u6E3E\u6ECB\u6E89" +
-                "\u6E19\u6E4E\u6E63\u6E44\u6E72\u6E69\u6E5F\u7119" +
-                "\u711A\u7126\u7130\u7121\u7136\u716E\u711C\u724C" +
-                "\u7284\u7280\u7336\u7325\u7334\u7329\u743A\u742A" +
-                "\u7433\u7422\u7425\u7435\u7436\u7434\u742F\u741B" +
-                "\u7426\u7428\u7525\u7526\u756B\u756A\u75E2\u75DB" +
-                "\u75E3\u75D9\u75D8\u75DE\u75E0\u767B\u767C\u7696" +
-                "\u7693\u76B4\u76DC\u774F\u77ED\u785D\u786C\u786F" +
-                "\u7A0D\u7A08\u7A0B\u7A05\u7A00\u7A98\u7A97\u7A96" +
-                "\u7AE5\u7AE3\u7B49\u7B56\u7B46\u7B50\u7B52\u7B54" +
-                "\u7B4D\u7B4B\u7B4F\u7B51\u7C9F\u7CA5\u7D5E\u7D50" +
-                "\u7D68\u7D55\u7D2B\u7D6E\u7D72\u7D61\u7D66\u7D62" +
-                "\u7D70\u7D73\u5584\u7FD4\u7FD5\u800B\u8052\u8085" +
-                "\u8155\u8154\u814B\u8151\u814E\u8139\u8146\u813E" +
-                "\u814C\u8153\u8174\u8212\u821C\u83E9\u8403\u83F8" +
-                "\u840D\u83E0\u83C5\u840B\u83C1\u83EF\u83F1\u83F4" +
-                "\u8457\u840A\u83F0\u840C\u83CC\u83FD\u83F2\u83CA" +
-                "\u8438\u840E\u8404\u83DC\u8407\u83D4\u83DF\u865B" +
-                "\u86DF\u86D9\u86ED\u86D4\u86DB\u86E4\u86D0\u86DE" +
-                "\u8857\u88C1\u88C2\u88B1\u8983\u8996\u8A3B\u8A60" +
-                "\u8A55\u8A5E\u8A3C\u8A41\u8A54\u8A5B\u8A50\u8A46" +
-                "\u8A34\u8A3A\u8A36\u8A56\u8C61\u8C82\u8CAF\u8CBC" +
-                "\u8CB3\u8CBD\u8CC1\u8CBB\u8CC0\u8CB4\u8CB7\u8CB6" +
-                "\u8CBF\u8CB8\u8D8A\u8D85\u8D81\u8DCE\u8DDD\u8DCB" +
-                "\u8DDA\u8DD1\u8DCC\u8DDB\u8DC6\u8EFB\u8EF8\u8EFC" +
-                "\u8F9C\u902E\u9035\u9031\u9038\u9032\u9036\u9102" +
-                "\u90F5\u9109\u90FE\u9163\u9165\u91CF\u9214\u9215" +
-                "\u9223\u9209\u921E\u920D\u9210\u9207\u9211\u9594" +
-                "\u958F\u958B\u9591\u9593\u9592\u958E\u968A\u968E" +
-                "\u968B\u967D\u9685\u9686\u968D\u9672\u9684\u96C1" +
-                "\u96C5\u96C4\u96C6\u96C7\u96EF\u96F2\u97CC\u9805" +
-                "\u9806\u9808\u98E7\u98EA\u98EF\u98E9\u98F2\u98ED" +
-                "\u99AE\u99AD\u9EC3\u9ECD\u9ED1\u4E82\u50AD\u50B5" +
-                "\u50B2\u50B3\u50C5\u50BE\u50AC\u50B7\u50BB\u50AF" +
-                "\u50C7\u527F\u5277\u527D\u52DF\u52E6\u52E4\u52E2" +
-                "\u52E3\u532F\u55DF\u55E8\u55D3\u55E6\u55CE\u55DC" +
-                "\u55C7\u55D1\u55E3\u55E4\u55EF\u55DA\u55E1\u55C5" +
-                "\u55C6\u55E5\u55C9\u5712\u5713\u585E\u5851\u5858" +
-                "\u5857\u585A\u5854\u586B\u584C\u586D\u584A\u5862" +
-                "\u5852\u584B\u5967\u5AC1\u5AC9\u5ACC\u5ABE\u5ABD" +
-                "\u5ABC\u5AB3\u5AC2\u5AB2\u5D69\u5D6F\u5E4C\u5E79" +
-                "\u5EC9\u5EC8\u5F12\u5F59\u5FAC\u5FAE\u611A\u610F" +
-                "\u6148\u611F\u60F3\u611B\u60F9\u6101\u6108\u614E" +
-                "\u614C\u6144\u614D\u613E\u6134\u6127\u610D\u6106" +
-                "\u6137\u6221\u6222\u6413\u643E\u641E\u642A\u642D" +
-                "\u643D\u642C\u640F\u641C\u6414\u640D\u6436\u6416" +
-                "\u6417\u6406\u656C\u659F\u65B0\u6697\u6689\u6687" +
-                "\u6688\u6696\u6684\u6698\u668D\u6703\u6994\u696D" +
-                "\u695A\u6977\u6960\u6954\u6975\u6930\u6982\u694A" +
-                "\u6968\u696B\u695E\u6953\u6979\u6986\u695D\u6963" +
-                "\u695B\u6B47\u6B72\u6BC0\u6BBF\u6BD3\u6BFD\u6EA2" +
-                "\u6EAF\u6ED3\u6EB6\u6EC2\u6E90\u6E9D\u6EC7\u6EC5" +
-                "\u6EA5\u6E98\u6EBC\u6EBA\u6EAB\u6ED1\u6E96\u6E9C" +
-                "\u6EC4\u6ED4\u6EAA\u6EA7\u6EB4\u714E\u7159\u7169" +
-                "\u7164\u7149\u7167\u715C\u716C\u7166\u714C\u7165" +
-                "\u715E\u7146\u7168\u7156\u723A\u7252\u7337\u7345" +
-                "\u733F\u733E\u746F\u745A\u7455\u745F\u745E\u7441" +
-                "\u743F\u7459\u745B\u745C\u7576\u7578\u7600\u75F0" +
-                "\u7601\u75F2\u75F1\u75FA\u75FF\u75F4\u75F3\u76DE" +
-                "\u76DF\u775B\u776B\u7766\u775E\u7763\u7779\u776A" +
-                "\u776C\u775C\u7765\u7768\u7762\u77EE\u788E\u78B0" +
-                "\u7897\u7898\u788C\u7889\u787C\u7891\u7893\u787F" +
-                "\u797A\u797F\u7981\u842C\u79BD\u7A1C\u7A1A\u7A20" +
-                "\u7A14\u7A1F\u7A1E\u7A9F\u7AA0\u7B77\u7BC0\u7B60" +
-                "\u7B6E\u7B67\u7CB1\u7CB3\u7CB5\u7D93\u7D79\u7D91" +
-                "\u7D81\u7D8F\u7D5B\u7F6E\u7F69\u7F6A\u7F72\u7FA9" +
-                "\u7FA8\u7FA4\u8056\u8058\u8086\u8084\u8171\u8170" +
-                "\u8178\u8165\u816E\u8173\u816B\u8179\u817A\u8166" +
-                "\u8205\u8247\u8482\u8477\u843D\u8431\u8475\u8466" +
-                "\u846B\u8449\u846C\u845B\u843C\u8435\u8461\u8463" +
-                "\u8469\u846D\u8446\u865E\u865C\u865F\u86F9\u8713" +
-                "\u8708\u8707\u8700\u86FE\u86FB\u8702\u8703\u8706" +
-                "\u870A\u8859\u88DF\u88D4\u88D9\u88DC\u88D8\u88DD" +
-                "\u88E1\u88CA\u88D5\u88D2\u899C\u89E3\u8A6B\u8A72" +
-                "\u8A73\u8A66\u8A69\u8A70\u8A87\u8A7C\u8A63\u8AA0" +
-                "\u8A71\u8A85\u8A6D\u8A62\u8A6E\u8A6C\u8A79\u8A7B" +
-                "\u8A3E\u8A68\u8C62\u8C8A\u8C89\u8CCA\u8CC7\u8CC8" +
-                "\u8CC4\u8CB2\u8CC3\u8CC2\u8CC5\u8DE1\u8DDF\u8DE8" +
-                "\u8DEF\u8DF3\u8DFA\u8DEA\u8DE4\u8DE6\u8EB2\u8F03" +
-                "\u8F09\u8EFE\u8F0A\u8F9F\u8FB2\u904B\u904A\u9053" +
-                "\u9042\u9054\u903C\u9055\u9050\u9047\u904F\u904E" +
-                "\u904D\u9051\u903E\u9041\u9112\u9117\u916C\u916A" +
-                "\u9169\u91C9\u9237\u9257\u9238\u923D\u9240\u923E" +
-                "\u925B\u924B\u9264\u9251\u9234\u9249\u924D\u9245" +
-                "\u9239\u923F\u925A\u9598\u9698\u9694\u9695\u96CD" +
-                "\u96CB\u96C9\u96CA\u96F7\u96FB\u96F9\u96F6\u9756" +
-                "\u9774\u9776\u9810\u9811\u9813\u980A\u9812\u980C" +
-                "\u98FC\u98F4\u98FD\u98FE\u99B3\u99B1\u99B4\u9AE1" +
-                "\u9CE9\u9E82\u9F0E\u9F13\u9F20\u50E7\u50EE\u50E5" +
-                "\u50D6\u50ED\u50DA\u50D5\u50CF\u50D1\u50F1\u50CE" +
-                "\u50E9\u5162\u51F3\u5283\u5282\u5331\u53AD\u55FE" +
-                "\u5600\u561B\u5617\u55FD\u5614\u5606\u5609\u560D" +
-                "\u560E\u55F7\u5616\u561F\u5608\u5610\u55F6\u5718" +
-                "\u5716\u5875\u587E\u5883\u5893\u588A\u5879\u5885" +
-                "\u587D\u58FD\u5925\u5922\u5924\u596A\u5969\u5AE1" +
-                "\u5AE6\u5AE9\u5AD7\u5AD6\u5AD8\u5AE3\u5B75\u5BDE" +
-                "\u5BE7\u5BE1\u5BE5\u5BE6\u5BE8\u5BE2\u5BE4\u5BDF" +
-                "\u5C0D\u5C62\u5D84\u5D87\u5E5B\u5E63\u5E55\u5E57" +
-                "\u5E54\u5ED3\u5ED6\u5F0A\u5F46\u5F70\u5FB9\u6147" +
-                "\u613F\u614B\u6177\u6162\u6163\u615F\u615A\u6158" +
-                "\u6175\u622A\u6487\u6458\u6454\u64A4\u6478\u645F" +
-                "\u647A\u6451\u6467\u6434\u646D\u647B\u6572\u65A1" +
-                "\u65D7\u65D6\u66A2\u66A8\u669D\u699C\u69A8\u6995" +
-                "\u69C1\u69AE\u69D3\u69CB\u699B\u69B7\u69BB\u69AB" +
-                "\u69B4\u69D0\u69CD\u69AD\u69CC\u69A6\u69C3\u69A3" +
-                "\u6B49\u6B4C\u6C33\u6F33\u6F14\u6EFE\u6F13\u6EF4" +
-                "\u6F29\u6F3E\u6F20\u6F2C\u6F0F\u6F02\u6F22\u6EFF" +
-                "\u6EEF\u6F06\u6F31\u6F38\u6F32\u6F23\u6F15\u6F2B" +
-                "\u6F2F\u6F88\u6F2A\u6EEC\u6F01\u6EF2\u6ECC\u6EF7" +
-                "\u7194\u7199\u717D\u718A\u7184\u7192\u723E\u7292" +
-                "\u7296\u7344\u7350\u7464\u7463\u746A\u7470\u746D" +
-                "\u7504\u7591\u7627\u760D\u760B\u7609\u7613\u76E1" +
-                "\u76E3\u7784\u777D\u777F\u7761\u78C1\u789F\u78A7" +
-                "\u78B3\u78A9\u78A3\u798E\u798F\u798D\u7A2E\u7A31" +
-                "\u7AAA\u7AA9\u7AED\u7AEF\u7BA1\u7B95\u7B8B\u7B75" +
-                "\u7B97\u7B9D\u7B94\u7B8F\u7BB8\u7B87\u7B84\u7CB9" +
-                "\u7CBD\u7CBE\u7DBB\u7DB0\u7D9C\u7DBD\u7DBE\u7DA0" +
-                "\u7DCA\u7DB4\u7DB2\u7DB1\u7DBA\u7DA2\u7DBF\u7DB5" +
-                "\u7DB8\u7DAD\u7DD2\u7DC7\u7DAC\u7F70\u7FE0\u7FE1" +
-                "\u7FDF\u805E\u805A\u8087\u8150\u8180\u818F\u8188" +
-                "\u818A\u817F\u8182\u81E7\u81FA\u8207\u8214\u821E" +
-                "\u824B\u84C9\u84BF\u84C6\u84C4\u8499\u849E\u84B2" +
-                "\u849C\u84CB\u84B8\u84C0\u84D3\u8490\u84BC\u84D1" +
-                "\u84CA\u873F\u871C\u873B\u8722\u8725\u8734\u8718" +
-                "\u8755\u8737\u8729\u88F3\u8902\u88F4\u88F9\u88F8" +
-                "\u88FD\u88E8\u891A\u88EF\u8AA6\u8A8C\u8A9E\u8AA3" +
-                "\u8A8D\u8AA1\u8A93\u8AA4\u8AAA\u8AA5\u8AA8\u8A98" +
-                "\u8A91\u8A9A\u8AA7\u8C6A\u8C8D\u8C8C\u8CD3\u8CD1" +
-                "\u8CD2\u8D6B\u8D99\u8D95\u8DFC\u8F14\u8F12\u8F15" +
-                "\u8F13\u8FA3\u9060\u9058\u905C\u9063\u9059\u905E" +
-                "\u9062\u905D\u905B\u9119\u9118\u911E\u9175\u9178" +
-                "\u9177\u9174\u9278\u92AC\u9280\u9285\u9298\u9296" +
-                "\u927B\u9293\u929C\u92A8\u927C\u9291\u95A1\u95A8" +
-                "\u95A9\u95A3\u95A5\u95A4\u9699\u969C\u969B\u96CC" +
-                "\u96D2\u9700\u977C\u9785\u97F6\u9817\u9818\u98AF" +
-                "\u98B1\u9903\u9905\u990C\u9909\u99C1\u9AAF\u9AB0" +
-                "\u9AE6\u9B41\u9B42\u9CF4\u9CF6\u9CF3\u9EBC\u9F3B" +
-                "\u9F4A\u5104\u5100\u50FB\u50F5\u50F9\u5102\u5108" +
-                "\u5109\u5105\u51DC\u5287\u5288\u5289\u528D\u528A" +
-                "\u52F0\u53B2\u562E\u563B\u5639\u5632\u563F\u5634" +
-                "\u5629\u5653\u564E\u5657\u5674\u5636\u562F\u5630" +
-                "\u5880\u589F\u589E\u58B3\u589C\u58AE\u58A9\u58A6" +
-                "\u596D\u5B09\u5AFB\u5B0B\u5AF5\u5B0C\u5B08\u5BEE" +
-                "\u5BEC\u5BE9\u5BEB\u5C64\u5C65\u5D9D\u5D94\u5E62" +
-                "\u5E5F\u5E61\u5EE2\u5EDA\u5EDF\u5EDD\u5EE3\u5EE0" +
-                "\u5F48\u5F71\u5FB7\u5FB5\u6176\u6167\u616E\u615D" +
-                "\u6155\u6182\u617C\u6170\u616B\u617E\u61A7\u6190" +
-                "\u61AB\u618E\u61AC\u619A\u61A4\u6194\u61AE\u622E" +
-                "\u6469\u646F\u6479\u649E\u64B2\u6488\u6490\u64B0" +
-                "\u64A5\u6493\u6495\u64A9\u6492\u64AE\u64AD\u64AB" +
-                "\u649A\u64AC\u6499\u64A2\u64B3\u6575\u6577\u6578" +
-                "\u66AE\u66AB\u66B4\u66B1\u6A23\u6A1F\u69E8\u6A01" +
-                "\u6A1E\u6A19\u69FD\u6A21\u6A13\u6A0A\u69F3\u6A02" +
-                "\u6A05\u69ED\u6A11\u6B50\u6B4E\u6BA4\u6BC5\u6BC6" +
-                "\u6F3F\u6F7C\u6F84\u6F51\u6F66\u6F54\u6F86\u6F6D" +
-                "\u6F5B\u6F78\u6F6E\u6F8E\u6F7A\u6F70\u6F64\u6F97" +
-                "\u6F58\u6ED5\u6F6F\u6F60\u6F5F\u719F\u71AC\u71B1" +
-                "\u71A8\u7256\u729B\u734E\u7357\u7469\u748B\u7483" +
-                "\u747E\u7480\u757F\u7620\u7629\u761F\u7624\u7626" +
-                "\u7621\u7622\u769A\u76BA\u76E4\u778E\u7787\u778C" +
-                "\u7791\u778B\u78CB\u78C5\u78BA\u78CA\u78BE\u78D5" +
-                "\u78BC\u78D0\u7A3F\u7A3C\u7A40\u7A3D\u7A37\u7A3B" +
-                "\u7AAF\u7AAE\u7BAD\u7BB1\u7BC4\u7BB4\u7BC6\u7BC7" +
-                "\u7BC1\u7BA0\u7BCC\u7CCA\u7DE0\u7DF4\u7DEF\u7DFB" +
-                "\u7DD8\u7DEC\u7DDD\u7DE8\u7DE3\u7DDA\u7DDE\u7DE9" +
-                "\u7D9E\u7DD9\u7DF2\u7DF9\u7F75\u7F77\u7FAF\u7FE9" +
-                "\u8026\u819B\u819C\u819D\u81A0\u819A\u8198\u8517" +
-                "\u853D\u851A\u84EE\u852C\u852D\u8513\u8511\u8523" +
-                "\u8521\u8514\u84EC\u8525\u84FF\u8506\u8782\u8774" +
-                "\u8776\u8760\u8766\u8778\u8768\u8759\u8757\u874C" +
-                "\u8753\u885B\u885D\u8910\u8907\u8912\u8913\u8915" +
-                "\u890A\u8ABC\u8AD2\u8AC7\u8AC4\u8A95\u8ACB\u8AF8" +
-                "\u8AB2\u8AC9\u8AC2\u8ABF\u8AB0\u8AD6\u8ACD\u8AB6" +
-                "\u8AB9\u8ADB\u8C4C\u8C4E\u8C6C\u8CE0\u8CDE\u8CE6" +
-                "\u8CE4\u8CEC\u8CED\u8CE2\u8CE3\u8CDC\u8CEA\u8CE1" +
-                "\u8D6D\u8D9F\u8DA3\u8E2B\u8E10\u8E1D\u8E22\u8E0F" +
-                "\u8E29\u8E1F\u8E21\u8E1E\u8EBA\u8F1D\u8F1B\u8F1F" +
-                "\u8F29\u8F26\u8F2A\u8F1C\u8F1E\u8F25\u9069\u906E" +
-                "\u9068\u906D\u9077\u9130\u912D\u9127\u9131\u9187" +
-                "\u9189\u918B\u9183\u92C5\u92BB\u92B7\u92EA\u92E4" +
-                "\u92C1\u92B3\u92BC\u92D2\u92C7\u92F0\u92B2\u95AD" +
-                "\u95B1\u9704\u9706\u9707\u9709\u9760\u978D\u978B" +
-                "\u978F\u9821\u982B\u981C\u98B3\u990A\u9913\u9912" +
-                "\u9918\u99DD\u99D0\u99DF\u99DB\u99D1\u99D5\u99D2" +
-                "\u99D9\u9AB7\u9AEE\u9AEF\u9B27\u9B45\u9B44\u9B77" +
-                "\u9B6F\u9D06\u9D09\u9D03\u9EA9\u9EBE\u9ECE\u58A8" +
-                "\u9F52\u5112\u5118\u5114\u5110\u5115\u5180\u51AA" +
-                "\u51DD\u5291\u5293\u52F3\u5659\u566B\u5679\u5669" +
-                "\u5664\u5678\u566A\u5668\u5665\u5671\u566F\u566C" +
-                "\u5662\u5676\u58C1\u58BE\u58C7\u58C5\u596E\u5B1D" +
-                "\u5B34\u5B78\u5BF0\u5C0E\u5F4A\u61B2\u6191\u61A9" +
-                "\u618A\u61CD\u61B6\u61BE\u61CA\u61C8\u6230\u64C5" +
-                "\u64C1\u64CB\u64BB\u64BC\u64DA\u64C4\u64C7\u64C2" +
-                "\u64CD\u64BF\u64D2\u64D4\u64BE\u6574\u66C6\u66C9" +
-                "\u66B9\u66C4\u66C7\u66B8\u6A3D\u6A38\u6A3A\u6A59" +
-                "\u6A6B\u6A58\u6A39\u6A44\u6A62\u6A61\u6A4B\u6A47" +
-                "\u6A35\u6A5F\u6A48\u6B59\u6B77\u6C05\u6FC2\u6FB1" +
-                "\u6FA1\u6FC3\u6FA4\u6FC1\u6FA7\u6FB3\u6FC0\u6FB9" +
-                "\u6FB6\u6FA6\u6FA0\u6FB4\u71BE\u71C9\u71D0\u71D2" +
-                "\u71C8\u71D5\u71B9\u71CE\u71D9\u71DC\u71C3\u71C4" +
-                "\u7368\u749C\u74A3\u7498\u749F\u749E\u74E2\u750C" +
-                "\u750D\u7634\u7638\u763A\u76E7\u76E5\u77A0\u779E" +
-                "\u779F\u77A5\u78E8\u78DA\u78EC\u78E7\u79A6\u7A4D" +
-                "\u7A4E\u7A46\u7A4C\u7A4B\u7ABA\u7BD9\u7C11\u7BC9" +
-                "\u7BE4\u7BDB\u7BE1\u7BE9\u7BE6\u7CD5\u7CD6\u7E0A" +
-                "\u7E11\u7E08\u7E1B\u7E23\u7E1E\u7E1D\u7E09\u7E10" +
-                "\u7F79\u7FB2\u7FF0\u7FF1\u7FEE\u8028\u81B3\u81A9" +
-                "\u81A8\u81FB\u8208\u8258\u8259\u854A\u8559\u8548" +
-                "\u8568\u8569\u8543\u8549\u856D\u856A\u855E\u8783" +
-                "\u879F\u879E\u87A2\u878D\u8861\u892A\u8932\u8925" +
-                "\u892B\u8921\u89AA\u89A6\u8AE6\u8AFA\u8AEB\u8AF1" +
-                "\u8B00\u8ADC\u8AE7\u8AEE\u8AFE\u8B01\u8B02\u8AF7" +
-                "\u8AED\u8AF3\u8AF6\u8AFC\u8C6B\u8C6D\u8C93\u8CF4" +
-                "\u8E44\u8E31\u8E34\u8E42\u8E39\u8E35\u8F3B\u8F2F" +
-                "\u8F38\u8F33\u8FA8\u8FA6\u9075\u9074\u9078\u9072" +
-                "\u907C\u907A\u9134\u9192\u9320\u9336\u92F8\u9333" +
-                "\u932F\u9322\u92FC\u932B\u9304\u931A\u9310\u9326" +
-                "\u9321\u9315\u932E\u9319\u95BB\u96A7\u96A8\u96AA" +
-                "\u96D5\u970E\u9711\u9716\u970D\u9713\u970F\u975B" +
-                "\u975C\u9766\u9798\u9830\u9838\u983B\u9837\u982D" +
-                "\u9839\u9824\u9910\u9928\u991E\u991B\u9921\u991A" +
-                "\u99ED\u99E2\u99F1\u9AB8\u9ABC\u9AFB\u9AED\u9B28" +
-                "\u9B91\u9D15\u9D23\u9D26\u9D28\u9D12\u9D1B\u9ED8" +
-                "\u9ED4\u9F8D\u9F9C\u512A\u511F\u5121\u5132\u52F5" +
-                "\u568E\u5680\u5690\u5685\u5687\u568F\u58D5\u58D3" +
-                "\u58D1\u58CE\u5B30\u5B2A\u5B24\u5B7A\u5C37\u5C68" +
-                "\u5DBC\u5DBA\u5DBD\u5DB8\u5E6B\u5F4C\u5FBD\u61C9" +
-                "\u61C2\u61C7\u61E6\u61CB\u6232\u6234\u64CE\u64CA" +
-                "\u64D8\u64E0\u64F0\u64E6\u64EC\u64F1\u64E2\u64ED" +
-                "\u6582\u6583\u66D9\u66D6\u6A80\u6A94\u6A84\u6AA2" +
-                "\u6A9C\u6ADB\u6AA3\u6A7E\u6A97\u6A90\u6AA0\u6B5C" +
-                "\u6BAE\u6BDA\u6C08\u6FD8\u6FF1\u6FDF\u6FE0\u6FDB" +
-                "\u6FE4\u6FEB\u6FEF\u6F80\u6FEC\u6FE1\u6FE9\u6FD5" +
-                "\u6FEE\u6FF0\u71E7\u71DF\u71EE\u71E6\u71E5\u71ED" +
-                "\u71EC\u71F4\u71E0\u7235\u7246\u7370\u7372\u74A9" +
-                "\u74B0\u74A6\u74A8\u7646\u7642\u764C\u76EA\u77B3" +
-                "\u77AA\u77B0\u77AC\u77A7\u77AD\u77EF\u78F7\u78FA" +
-                "\u78F4\u78EF\u7901\u79A7\u79AA\u7A57\u7ABF\u7C07" +
-                "\u7C0D\u7BFE\u7BF7\u7C0C\u7BE0\u7CE0\u7CDC\u7CDE" +
-                "\u7CE2\u7CDF\u7CD9\u7CDD\u7E2E\u7E3E\u7E46\u7E37" +
-                "\u7E32\u7E43\u7E2B\u7E3D\u7E31\u7E45\u7E41\u7E34" +
-                "\u7E39\u7E48\u7E35\u7E3F\u7E2F\u7F44\u7FF3\u7FFC" +
-                "\u8071\u8072\u8070\u806F\u8073\u81C6\u81C3\u81BA" +
-                "\u81C2\u81C0\u81BF\u81BD\u81C9\u81BE\u81E8\u8209" +
-                "\u8271\u85AA\u8584\u857E\u859C\u8591\u8594\u85AF" +
-                "\u859B\u8587\u85A8\u858A\u85A6\u8667\u87C0\u87D1" +
-                "\u87B3\u87D2\u87C6\u87AB\u87BB\u87BA\u87C8\u87CB" +
-                "\u893B\u8936\u8944\u8938\u893D\u89AC\u8B0E\u8B17" +
-                "\u8B19\u8B1B\u8B0A\u8B20\u8B1D\u8B04\u8B10\u8C41" +
-                "\u8C3F\u8C73\u8CFA\u8CFD\u8CFC\u8CF8\u8CFB\u8DA8" +
-                "\u8E49\u8E4B\u8E48\u8E4A\u8F44\u8F3E\u8F42\u8F45" +
-                "\u8F3F\u907F\u907D\u9084\u9081\u9082\u9080\u9139" +
-                "\u91A3\u919E\u919C\u934D\u9382\u9328\u9375\u934A" +
-                "\u9365\u934B\u9318\u937E\u936C\u935B\u9370\u935A" +
-                "\u9354\u95CA\u95CB\u95CC\u95C8\u95C6\u96B1\u96B8" +
-                "\u96D6\u971C\u971E\u97A0\u97D3\u9846\u98B6\u9935" +
-                "\u9A01\u99FF\u9BAE\u9BAB\u9BAA\u9BAD\u9D3B\u9D3F" +
-                "\u9E8B\u9ECF\u9EDE\u9EDC\u9EDD\u9EDB\u9F3E\u9F4B" +
-                "\u53E2\u5695\u56AE\u58D9\u58D8\u5B38\u5F5E\u61E3" +
-                "\u6233\u64F4\u64F2\u64FE\u6506\u64FA\u64FB\u64F7" +
-                "\u65B7\u66DC\u6726\u6AB3\u6AAC\u6AC3\u6ABB\u6AB8" +
-                "\u6AC2\u6AAE\u6AAF\u6B5F\u6B78\u6BAF\u7009\u700B" +
-                "\u6FFE\u7006\u6FFA\u7011\u700F\u71FB\u71FC\u71FE" +
-                "\u71F8\u7377\u7375\u74A7\u74BF\u7515\u7656\u7658" +
-                "\u7652\u77BD\u77BF\u77BB\u77BC\u790E\u79AE\u7A61" +
-                "\u7A62\u7A60\u7AC4\u7AC5\u7C2B\u7C27\u7C2A\u7C1E" +
-                "\u7C23\u7C21\u7CE7\u7E54\u7E55\u7E5E\u7E5A\u7E61" +
-                "\u7E52\u7E59\u7F48\u7FF9\u7FFB\u8077\u8076\u81CD" +
-                "\u81CF\u820A\u85CF\u85A9\u85CD\u85D0\u85C9\u85B0" +
-                "\u85BA\u85B9\u87EF\u87EC\u87F2\u87E0\u8986\u89B2" +
-                "\u89F4\u8B28\u8B39\u8B2C\u8B2B\u8C50\u8D05\u8E59" +
-                "\u8E63\u8E66\u8E64\u8E5F\u8E55\u8EC0\u8F49\u8F4D" +
-                "\u9087\u9083\u9088\u91AB\u91AC\u91D0\u9394\u938A" +
-                "\u9396\u93A2\u93B3\u93AE\u93AC\u93B0\u9398\u939A" +
-                "\u9397\u95D4\u95D6\u95D0\u95D5\u96E2\u96DC\u96D9" +
-                "\u96DB\u96DE\u9724\u97A3\u97A6\u97AD\u97F9\u984D" +
-                "\u984F\u984C\u984E\u9853\u98BA\u993E\u993F\u993D" +
-                "\u992E\u99A5\u9A0E\u9AC1\u9B03\u9B06\u9B4F\u9B4E" +
-                "\u9B4D\u9BCA\u9BC9\u9BFD\u9BC8\u9BC0\u9D51\u9D5D" +
-                "\u9D60\u9EE0\u9F15\u9F2C\u5133\u56A5\u56A8\u58DE" +
-                "\u58DF\u58E2\u5BF5\u9F90\u5EEC\u61F2\u61F7\u61F6" +
-                "\u61F5\u6500\u650F\u66E0\u66DD\u6AE5\u6ADD\u6ADA" +
-                "\u6AD3\u701B\u701F\u7028\u701A\u701D\u7015\u7018" +
-                "\u7206\u720D\u7258\u72A2\u7378\u737A\u74BD\u74CA" +
-                "\u74E3\u7587\u7586\u765F\u7661\u77C7\u7919\u79B1" +
-                "\u7A6B\u7A69\u7C3E\u7C3F\u7C38\u7C3D\u7C37\u7C40" +
-                "\u7E6B\u7E6D\u7E79\u7E69\u7E6A\u7E73\u7F85\u7FB6" +
-                "\u7FB9\u7FB8\u81D8\u85E9\u85DD\u85EA\u85D5\u85E4" +
-                "\u85E5\u85F7\u87FB\u8805\u880D\u87F9\u87FE\u8960" +
-                "\u895F\u8956\u895E\u8B41\u8B5C\u8B58\u8B49\u8B5A" +
-                "\u8B4E\u8B4F\u8B46\u8B59\u8D08\u8D0A\u8E7C\u8E72" +
-                "\u8E87\u8E76\u8E6C\u8E7A\u8E74\u8F54\u8F4E\u8FAD" +
-                "\u908A\u908B\u91B1\u91AE\u93E1\u93D1\u93DF\u93C3" +
-                "\u93C8\u93DC\u93DD\u93D6\u93E2\u93CD\u93D8\u93E4" +
-                "\u93D7\u93E8\u95DC\u96B4\u96E3\u972A\u9727\u9761" +
-                "\u97DC\u97FB\u985E\u9858\u985B\u98BC\u9945\u9949" +
-                "\u9A16\u9A19\u9B0D\u9BE8\u9BE7\u9BD6\u9BDB\u9D89" +
-                "\u9D61\u9D72\u9D6A\u9D6C\u9E92\u9E97\u9E93\u9EB4" +
-                "\u52F8\u56B7\u56B6\u56B4\u56BC\u58E4\u5B40\u5B43" +
-                "\u5B7D\u5BF6\u5DC9\u61F8\u61FA\u6518\u6514\u6519" +
-                "\u66E6\u6727\u6AEC\u703E\u7030\u7032\u7210\u737B" +
-                "\u74CF\u7662\u7665\u7926\u792A\u792C\u792B\u7AC7" +
-                "\u7AF6\u7C4C\u7C43\u7C4D\u7CEF\u7CF0\u8FAE\u7E7D" +
-                "\u7E7C\u7E82\u7F4C\u8000\u81DA\u8266\u85FB\u85F9" +
-                "\u8611\u85FA\u8606\u860B\u8607\u860A\u8814\u8815" +
-                "\u8964\u89BA\u89F8\u8B70\u8B6C\u8B66\u8B6F\u8B5F" +
-                "\u8B6B\u8D0F\u8D0D\u8E89\u8E81\u8E85\u8E82\u91B4" +
-                "\u91CB\u9418\u9403\u93FD\u95E1\u9730\u98C4\u9952" +
-                "\u9951\u99A8\u9A2B\u9A30\u9A37\u9A35\u9C13\u9C0D" +
-                "\u9E79\u9EB5\u9EE8\u9F2F\u9F5F\u9F63\u9F61\u5137" +
-                "\u5138\u56C1\u56C0\u56C2\u5914\u5C6C\u5DCD\u61FC" +
-                "\u61FE\u651D\u651C\u6595\u66E9\u6AFB\u6B04\u6AFA" +
-                "\u6BB2\u704C\u721B\u72A7\u74D6\u74D4\u7669\u77D3" +
-                "\u7C50\u7E8F\u7E8C\u7FBC\u8617\u862D\u861A\u8823" +
-                "\u8822\u8821\u881F\u896A\u896C\u89BD\u8B74\u8B77" +
-                "\u8B7D\u8D13\u8E8A\u8E8D\u8E8B\u8F5F\u8FAF\u91BA" +
-                "\u942E\u9433\u9435\u943A\u9438\u9432\u942B\u95E2" +
-                "\u9738\u9739\u9732\u97FF\u9867\u9865\u9957\u9A45" +
-                "\u9A43\u9A40\u9A3E\u9ACF\u9B54\u9B51\u9C2D\u9C25" +
-                "\u9DAF\u9DB4\u9DC2\u9DB8\u9E9D\u9EEF\u9F19\u9F5C" +
-                "\u9F66\u9F67\u513C\u513B\u56C8\u56CA\u56C9\u5B7F" +
-                "\u5DD4\u5DD2\u5F4E\u61FF\u6524\u6B0A\u6B61\u7051" +
-                "\u7058\u7380\u74E4\u758A\u766E\u766C\u79B3\u7C60" +
-                "\u7C5F\u807E\u807D\u81DF\u8972\u896F\u89FC\u8B80" +
-                "\u8D16\u8D17\u8E91\u8E93\u8F61\u9148\u9444\u9451" +
-                "\u9452\u973D\u973E\u97C3\u97C1\u986B\u9955\u9A55" +
-                "\u9A4D\u9AD2\u9B1A\u9C49\u9C31\u9C3E\u9C3B\u9DD3" +
-                "\u9DD7\u9F34\u9F6C\u9F6A\u9F94\u56CC\u5DD6\u6200" +
-                "\u6523\u652B\u652A\u66EC\u6B10\u74DA\u7ACA\u7C64" +
-                "\u7C63\u7C65\u7E93\u7E96\u7E94\u81E2\u8638\u863F" +
-                "\u8831\u8B8A\u9090\u908F\u9463\u9460\u9464\u9768" +
-                "\u986F\u995C\u9A5A\u9A5B\u9A57\u9AD3\u9AD4\u9AD1" +
-                "\u9C54\u9C57\u9C56\u9DE5\u9E9F\u9EF4\u56D1\u58E9" +
-                "\u652C\u705E\u7671\u7672\u77D7\u7F50\u7F88\u8836" +
-                "\u8839\u8862\u8B93\u8B92\u8B96\u8277\u8D1B\u91C0" +
-                "\u946A\u9742\u9748\u9744\u97C6\u9870\u9A5F\u9B22" +
-                "\u9B58\u9C5F\u9DF9\u9DFA\u9E7C\u9E7D\u9F07\u9F77" +
-                "\u9F72\u5EF3\u6B16\u7063\u7C6C\u7C6E\u883B\u89C0" +
-                "\u8EA1\u91C1\u9472\u9470\u9871\u995E\u9AD6\u9B23" +
-                "\u9ECC\u7064\u77DA\u8B9A\u9477\u97C9\u9A62\u9A65" +
-                "\u7E9C\u8B9C\u8EAA\u91C5\u947D\u947E\u947C\u9C77" +
-                "\u9C78\u9EF7\u8C54\u947F\u9E1A\u7228\u9A6A\u9B31" +
-                "\u9E1B\u9E1E\u7C72\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD"
-                ;
-            mappingTableG2a2 =
-                "\u4E42\u4E5C\u51F5\u531A\u5382\u4E07\u4E0C\u4E47" +
-                "\u4E8D\u56D7\u5C6E\u5F73\u4E0F\u5187\u4E0E\u4E2E" +
-                "\u4E93\u4EC2\u4EC9\u4EC8\u5198\u52FC\u536C\u53B9" +
-                "\u5720\u5903\u592C\u5C10\u5DFF\u65E1\u6BB3\u6BCC" +
-                "\u6C14\u723F\u4E31\u4E3C\u4EE8\u4EDC\u4EE9\u4EE1" +
-                "\u4EDD\u4EDA\u520C\u5209\u531C\u534C\u5722\u5723" +
-                "\u5917\u592F\u5B81\u5B84\u5C12\u5C3B\u5C74\u5C73" +
-                "\u5E04\u5E80\u5E82\u5FC9\u6209\u6250\u6C15\u6C36" +
-                "\u6C43\u6C3F\u6C3B\u72AE\u72B0\u738A\u79B8\u808A" +
-                "\u961E\u4F0E\u4F18\u4F2C\u4EF5\u4F14\u4EF1\u4F00" +
-                "\u4EF7\u4F08\u4F1D\u4F02\u4F05\u4F22\u4F13\u4F04" +
-                "\u4EF4\u4F12\u51B1\u5213\u5210\u52A6\u5322\u531F" +
-                "\u534D\u538A\u5407\u56E1\u56DF\u572E\u572A\u5734" +
-                "\u593C\u5980\u597C\u5985\u597B\u597E\u5977\u597F" +
-                "\u5B56\u5C15\u5C25\u5C7C\u5C7A\u5C7B\u5C7E\u5DDF" +
-                "\u5E75\u5E84\u5F02\u5F1A\u5F74\u5FD5\u5FD4\u5FCF" +
-                "\u625C\u625E\u6264\u6261\u6266\u6262\u6259\u6260" +
-                "\u625A\u6265\u6537\u65EF\u65EE\u673E\u6739\u6738" +
-                "\u673B\u673A\u673F\u673C\u6733\u6C18\u6C46\u6C52" +
-                "\u6C5C\u6C4F\u6C4A\u6C54\u6C4B\u6C4C\u7071\u725E" +
-                "\u72B4\u72B5\u738E\u752A\u767F\u7A75\u7F51\u8278" +
-                "\u827C\u8280\u827D\u827F\u864D\u897E\u9099\u9097" +
-                "\u9098\u909B\u9094\u9622\u9624\u9620\u9623\u4F56" +
-                "\u4F3B\u4F62\u4F49\u4F53\u4F64\u4F3E\u4F67\u4F52" +
-                "\u4F5F\u4F41\u4F58\u4F2D\u4F33\u4F3F\u4F61\u518F" +
-                "\u51B9\u521C\u521E\u5221\u52AD\u52AE\u5309\u5363" +
-                "\u5372\u538E\u538F\u5430\u5437\u542A\u5454\u5445" +
-                "\u5419\u541C\u5425\u5418\u543D\u544F\u5441\u5428" +
-                "\u5424\u5447\u56EE\u56E7\u56E5\u5741\u5745\u574C" +
-                "\u5749\u574B\u5752\u5906\u5940\u59A6\u5998\u59A0" +
-                "\u5997\u598E\u59A2\u5990\u598F\u59A7\u59A1\u5B8E" +
-                "\u5B92\u5C28\u5C2A\u5C8D\u5C8F\u5C88\u5C8B\u5C89" +
-                "\u5C92\u5C8A\u5C86\u5C93\u5C95\u5DE0\u5E0A\u5E0E" +
-                "\u5E8B\u5E89\u5E8C\u5E88\u5E8D\u5F05\u5F1D\u5F78" +
-                "\u5F76\u5FD2\u5FD1\u5FD0\u5FED\u5FE8\u5FEE\u5FF3" +
-                "\u5FE1\u5FE4\u5FE3\u5FFA\u5FEF\u5FF7\u5FFB\u6000" +
-                "\u5FF4\u623A\u6283\u628C\u628E\u628F\u6294\u6287" +
-                "\u6271\u627B\u627A\u6270\u6281\u6288\u6277\u627D" +
-                "\u6272\u6274\u65F0\u65F4\u65F3\u65F2\u65F5\u6745" +
-                "\u6747\u6759\u6755\u674C\u6748\u675D\u674D\u675A" +
-                "\u674B\u6BD0\u6C19\u6C1A\u6C78\u6C67\u6C6B\u6C84" +
-                "\u6C8B\u6C8F\u6C71\u6C6F\u6C69\u6C9A\u6C6D\u6C87" +
-                "\u6C95\u6C9C\u6C66\u6C73\u6C65\u6C7B\u6C8E\u7074" +
-                "\u707A\u7263\u72BF\u72BD\u72C3\u72C6\u72C1\u72BA" +
-                "\u72C5\u7395\u7397\u7393\u7394\u7392\u753A\u7539" +
-                "\u7594\u7595\u7681\u793D\u8034\u8095\u8099\u8090" +
-                "\u8092\u809C\u8290\u828F\u8285\u828E\u8291\u8293" +
-                "\u828A\u8283\u8284\u8C78\u8FC9\u8FBF\u909F\u90A1" +
-                "\u90A5\u909E\u90A7\u90A0\u9630\u9628\u962F\u962D" +
-                "\u4E33\u4F98\u4F7C\u4F85\u4F7D\u4F80\u4F87\u4F76" +
-                "\u4F74\u4F89\u4F84\u4F77\u4F4C\u4F97\u4F6A\u4F9A" +
-                "\u4F79\u4F81\u4F78\u4F90\u4F9C\u4F94\u4F9E\u4F92" +
-                "\u4F82\u4F95\u4F6B\u4F6E\u519E\u51BC\u51BE\u5235" +
-                "\u5232\u5233\u5246\u5231\u52BC\u530A\u530B\u533C" +
-                "\u5392\u5394\u5487\u547F\u5481\u5491\u5482\u5488" +
-                "\u546B\u547A\u547E\u5465\u546C\u5474\u5466\u548D" +
-                "\u546F\u5461\u5460\u5498\u5463\u5467\u5464\u56F7" +
-                "\u56F9\u576F\u5772\u576D\u576B\u5771\u5770\u5776" +
-                "\u5780\u5775\u577B\u5773\u5774\u5762\u5768\u577D" +
-                "\u590C\u5945\u59B5\u59BA\u59CF\u59CE\u59B2\u59CC" +
-                "\u59C1\u59B6\u59BC\u59C3\u59D6\u59B1\u59BD\u59C0" +
-                "\u59C8\u59B4\u59C7\u5B62\u5B65\u5B93\u5B95\u5C44" +
-                "\u5C47\u5CAE\u5CA4\u5CA0\u5CB5\u5CAF\u5CA8\u5CAC" +
-                "\u5C9F\u5CA3\u5CAD\u5CA2\u5CAA\u5CA7\u5C9D\u5CA5" +
-                "\u5CB6\u5CB0\u5CA6\u5E17\u5E14\u5E19\u5F28\u5F22" +
-                "\u5F23\u5F24\u5F54\u5F82\u5F7E\u5F7D\u5FDE\u5FE5" +
-                "\u602D\u6026\u6019\u6032\u600B\u6034\u600A\u6017" +
-                "\u6033\u601A\u601E\u602C\u6022\u600D\u6010\u602E" +
-                "\u6013\u6011\u600C\u6009\u601C\u6214\u623D\u62AD" +
-                "\u62B4\u62D1\u62BE\u62AA\u62B6\u62CA\u62AE\u62B3" +
-                "\u62AF\u62BB\u62A9\u62B0\u62B8\u653D\u65A8\u65BB" +
-                "\u6609\u65FC\u6604\u6612\u6608\u65FB\u6603\u660B" +
-                "\u660D\u6605\u65FD\u6611\u6610\u66F6\u670A\u6785" +
-                "\u676C\u678E\u6792\u6776\u677B\u6798\u6786\u6784" +
-                "\u6774\u678D\u678C\u677A\u679F\u6791\u6799\u6783" +
-                "\u677D\u6781\u6778\u6779\u6794\u6B25\u6B80\u6B7E" +
-                "\u6BDE\u6C1D\u6C93\u6CEC\u6CEB\u6CEE\u6CD9\u6CB6" +
-                "\u6CD4\u6CAD\u6CE7\u6CB7\u6CD0\u6CC2\u6CBA\u6CC3" +
-                "\u6CC6\u6CED\u6CF2\u6CD2\u6CDD\u6CB4\u6C8A\u6C9D" +
-                "\u6C80\u6CDE\u6CC0\u6D30\u6CCD\u6CC7\u6CB0\u6CF9" +
-                "\u6CCF\u6CE9\u6CD1\u7094\u7098\u7085\u7093\u7086" +
-                "\u7084\u7091\u7096\u7082\u709A\u7083\u726A\u72D6" +
-                "\u72CB\u72D8\u72C9\u72DC\u72D2\u72D4\u72DA\u72CC" +
-                "\u72D1\u73A4\u73A1\u73AD\u73A6\u73A2\u73A0\u73AC" +
-                "\u739D\u74DD\u74E8\u753F\u7540\u753E\u758C\u7598" +
-                "\u76AF\u76F3\u76F1\u76F0\u76F5\u77F8\u77FC\u77F9" +
-                "\u77FB\u77FA\u77F7\u7942\u793F\u79C5\u7A78\u7A7B" +
-                "\u7AFB\u7C75\u7CFD\u8035\u808F\u80AE\u80A3\u80B8" +
-                "\u80B5\u80AD\u8220\u82A0\u82C0\u82AB\u829A\u8298" +
-                "\u829B\u82B5\u82A7\u82AE\u82BC\u829E\u82BA\u82B4" +
-                "\u82A8\u82A1\u82A9\u82C2\u82A4\u82C3\u82B6\u82A2" +
-                "\u8670\u866F\u866D\u866E\u8C56\u8FD2\u8FCB\u8FD3" +
-                "\u8FCD\u8FD6\u8FD5\u8FD7\u90B2\u90B4\u90AF\u90B3" +
-                "\u90B0\u9639\u963D\u963C\u963A\u9643\u4FCD\u4FC5" +
-                "\u4FD3\u4FB2\u4FC9\u4FCB\u4FC1\u4FD4\u4FDC\u4FD9" +
-                "\u4FBB\u4FB3\u4FDB\u4FC7\u4FD6\u4FBA\u4FC0\u4FB9" +
-                "\u4FEC\u5244\u5249\u52C0\u52C2\u533D\u537C\u5397" +
-                "\u5396\u5399\u5398\u54BA\u54A1\u54AD\u54A5\u54CF" +
-                "\u54C3\u830D\u54B7\u54AE\u54D6\u54B6\u54C5\u54C6" +
-                "\u54A0\u5470\u54BC\u54A2\u54BE\u5472\u54DE\u54B0" +
-                "\u57B5\u579E\u579F\u57A4\u578C\u5797\u579D\u579B" +
-                "\u5794\u5798\u578F\u5799\u57A5\u579A\u5795\u58F4" +
-                "\u590D\u5953\u59E1\u59DE\u59EE\u5A00\u59F1\u59DD" +
-                "\u59FA\u59FD\u59FC\u59F6\u59E4\u59F2\u59F7\u59DB" +
-                "\u59E9\u59F3\u59F5\u59E0\u59FE\u59F4\u59ED\u5BA8" +
-                "\u5C4C\u5CD0\u5CD8\u5CCC\u5CD7\u5CCB\u5CDB\u5CDE" +
-                "\u5CDA\u5CC9\u5CC7\u5CCA\u5CD6\u5CD3\u5CD4\u5CCF" +
-                "\u5CC8\u5CC6\u5CCE\u5CDF\u5CF8\u5DF9\u5E21\u5E22" +
-                "\u5E23\u5E20\u5E24\u5EB0\u5EA4\u5EA2\u5E9B\u5EA3" +
-                "\u5EA5\u5F07\u5F2E\u5F56\u5F86\u6037\u6039\u6054" +
-                "\u6072\u605E\u6045\u6053\u6047\u6049\u605B\u604C" +
-                "\u6040\u6042\u605F\u6024\u6044\u6058\u6066\u606E" +
-                "\u6242\u6243\u62CF\u630D\u630B\u62F5\u630E\u6303" +
-                "\u62EB\u62F9\u630F\u630C\u62F8\u62F6\u6300\u6313" +
-                "\u6314\u62FA\u6315\u62FB\u62F0\u6541\u6543\u65AA" +
-                "\u65BF\u6636\u6621\u6632\u6635\u661C\u6626\u6622" +
-                "\u6633\u662B\u663A\u661D\u6634\u6639\u662E\u670F" +
-                "\u6710\u67C1\u67F2\u67C8\u67BA\u67DC\u67BB\u67F8" +
-                "\u67D8\u67C0\u67B7\u67C5\u67EB\u67E4\u67DF\u67B5" +
-                "\u67CD\u67B3\u67F7\u67F6\u67EE\u67E3\u67C2\u67B9" +
-                "\u67CE\u67E7\u67F0\u67B2\u67FC\u67C6\u67ED\u67CC" +
-                "\u67AE\u67E6\u67DB\u67FA\u67C9\u67CA\u67C3\u67EA" +
-                "\u67CB\u6B28\u6B82\u6B84\u6BB6\u6BD6\u6BD8\u6BE0" +
-                "\u6C20\u6C21\u6D28\u6D34\u6D2D\u6D1F\u6D3C\u6D3F" +
-                "\u6D12\u6D0A\u6CDA\u6D33\u6D04\u6D19\u6D3A\u6D1A" +
-                "\u6D11\u6D00\u6D1D\u6D42\u6D01\u6D18\u6D37\u6D03" +
-                "\u6D0F\u6D40\u6D07\u6D20\u6D2C\u6D08\u6D22\u6D09" +
-                "\u6D10\u70B7\u709F\u70BE\u70B1\u70B0\u70A1\u70B4" +
-                "\u70B5\u70A9\u7241\u7249\u724A\u726C\u7270\u7273" +
-                "\u726E\u72CA\u72E4\u72E8\u72EB\u72DF\u72EA\u72E6" +
-                "\u72E3\u7385\u73CC\u73C2\u73C8\u73C5\u73B9\u73B6" +
-                "\u73B5\u73B4\u73EB\u73BF\u73C7\u73BE\u73C3\u73C6" +
-                "\u73B8\u73CB\u74EC\u74EE\u752E\u7547\u7548\u75A7" +
-                "\u75AA\u7679\u76C4\u7708\u7703\u7704\u7705\u770A" +
-                "\u76F7\u76FB\u76FA\u77E7\u77E8\u7806\u7811\u7812" +
-                "\u7805\u7810\u780F\u780E\u7809\u7803\u7813\u794A" +
-                "\u794C\u794B\u7945\u7944\u79D5\u79CD\u79CF\u79D6" +
-                "\u79CE\u7A80\u7A7E\u7AD1\u7B00\u7B01\u7C7A\u7C78" +
-                "\u7C79\u7C7F\u7C80\u7C81\u7D03\u7D08\u7D01\u7F58" +
-                "\u7F91\u7F8D\u7FBE\u8007\u800E\u800F\u8014\u8037" +
-                "\u80D8\u80C7\u80E0\u80D1\u80C8\u80C2\u80D0\u80C5" +
-                "\u80E3\u80D9\u80DC\u80CA\u80D5\u80C9\u80CF\u80D7" +
-                "\u80E6\u80CD\u81FF\u8221\u8294\u82D9\u82FE\u82F9" +
-                "\u8307\u82E8\u8300\u82D5\u833A\u82EB\u82D6\u82F4" +
-                "\u82EC\u82E1\u82F2\u82F5\u830C\u82FB\u82F6\u82F0" +
-                "\u82EA\u82E4\u82E0\u82FA\u82F3\u82ED\u8677\u8674" +
-                "\u867C\u8673\u8841\u884E\u8867\u886A\u8869\u89D3" +
-                "\u8A04\u8A07\u8D72\u8FE3\u8FE1\u8FEE\u8FE0\u90F1" +
-                "\u90BD\u90BF\u90D5\u90C5\u90BE\u90C7\u90CB\u90C8" +
-                "\u91D4\u91D3\u9654\u964F\u9651\u9653\u964A\u964E" +
-                "\u501E\u5005\u5007\u5013\u5022\u5030\u501B\u4FF5" +
-                "\u4FF4\u5033\u5037\u502C\u4FF6\u4FF7\u5017\u501C" +
-                "\u5020\u5027\u5035\u502F\u5031\u500E\u515A\u5194" +
-                "\u5193\u51CA\u51C4\u51C5\u51C8\u51CE\u5261\u525A" +
-                "\u5252\u525E\u525F\u5255\u5262\u52CD\u530E\u539E" +
-                "\u5526\u54E2\u5517\u5512\u54E7\u54F3\u54E4\u551A" +
-                "\u54FF\u5504\u5508\u54EB\u5511\u5505\u54F1\u550A" +
-                "\u54FB\u54F7\u54F8\u54E0\u550E\u5503\u550B\u5701" +
-                "\u5702\u57CC\u5832\u57D5\u57D2\u57BA\u57C6\u57BD" +
-                "\u57BC\u57B8\u57B6\u57BF\u57C7\u57D0\u57B9\u57C1" +
-                "\u590E\u594A\u5A19\u5A16\u5A2D\u5A2E\u5A15\u5A0F" +
-                "\u5A17\u5A0A\u5A1E\u5A33\u5B6C\u5BA7\u5BAD\u5BAC" +
-                "\u5C03\u5C56\u5C54\u5CEC\u5CFF\u5CEE\u5CF1\u5CF7" +
-                "\u5D00\u5CF9\u5E29\u5E28\u5EA8\u5EAE\u5EAA\u5EAC" +
-                "\u5F33\u5F30\u5F67\u605D\u605A\u6067\u6041\u60A2" +
-                "\u6088\u6080\u6092\u6081\u609D\u6083\u6095\u609B" +
-                "\u6097\u6087\u609C\u608E\u6219\u6246\u62F2\u6310" +
-                "\u6356\u632C\u6344\u6345\u6336\u6343\u63E4\u6339" +
-                "\u634B\u634A\u633C\u6329\u6341\u6334\u6358\u6354" +
-                "\u6359\u632D\u6347\u6333\u635A\u6351\u6338\u6357" +
-                "\u6340\u6348\u654A\u6546\u65C6\u65C3\u65C4\u65C2" +
-                "\u664A\u665F\u6647\u6651\u6712\u6713\u681F\u681A" +
-                "\u6849\u6832\u6833\u683B\u684B\u684F\u6816\u6831" +
-                "\u681C\u6835\u682B\u682D\u682F\u684E\u6844\u6834" +
-                "\u681D\u6812\u6814\u6826\u6828\u682E\u684D\u683A" +
-                "\u6825\u6820\u6B2C\u6B2F\u6B2D\u6B31\u6B34\u6B6D" +
-                "\u8082\u6B88\u6BE6\u6BE4\u6BE8\u6BE3\u6BE2\u6BE7" +
-                "\u6C25\u6D7A\u6D63\u6D64\u6D76\u6D0D\u6D61\u6D92" +
-                "\u6D58\u6D62\u6D6D\u6D6F\u6D91\u6D8D\u6DEF\u6D7F" +
-                "\u6D86\u6D5E\u6D67\u6D60\u6D97\u6D70\u6D7C\u6D5F" +
-                "\u6D82\u6D98\u6D2F\u6D68\u6D8B\u6D7E\u6D80\u6D84" +
-                "\u6D16\u6D83\u6D7B\u6D7D\u6D75\u6D90\u70DC\u70D3" +
-                "\u70D1\u70DD\u70CB\u7F39\u70E2\u70D7\u70D2\u70DE" +
-                "\u70E0\u70D4\u70CD\u70C5\u70C6\u70C7\u70DA\u70CE" +
-                "\u70E1\u7242\u7278\u7277\u7276\u7300\u72FA\u72F4" +
-                "\u72FE\u72F6\u72F3\u72FB\u7301\u73D3\u73D9\u73E5" +
-                "\u73D6\u73BC\u73E7\u73E3\u73E9\u73DC\u73D2\u73DB" +
-                "\u73D4\u73DD\u73DA\u73D7\u73D8\u73E8\u74DE\u74DF" +
-                "\u74F4\u74F5\u7521\u755B\u755F\u75B0\u75C1\u75BB" +
-                "\u75C4\u75C0\u75BF\u75B6\u75BA\u768A\u76C9\u771D" +
-                "\u771B\u7710\u7713\u7712\u7723\u7711\u7715\u7719" +
-                "\u771A\u7722\u7727\u7823\u782C\u7822\u7835\u782F" +
-                "\u7828\u782E\u782B\u7821\u7829\u7833\u782A\u7831" +
-                "\u7954\u795B\u794F\u795C\u7953\u7952\u7951\u79EB" +
-                "\u79EC\u79E0\u79EE\u79ED\u79EA\u79DC\u79DE\u79DD" +
-                "\u7A86\u7A89\u7A85\u7A8B\u7A8C\u7A8A\u7A87\u7AD8" +
-                "\u7B10\u7B04\u7B13\u7B05\u7B0F\u7B08\u7B0A\u7B0E" +
-                "\u7B09\u7B12\u7C84\u7C91\u7C8A\u7C8C\u7C88\u7C8D" +
-                "\u7C85\u7D1E\u7D1D\u7D11\u7D0E\u7D18\u7D16\u7D13" +
-                "\u7D1F\u7D12\u7D0F\u7D0C\u7F5C\u7F61\u7F5E\u7F60" +
-                "\u7F5D\u7F5B\u7F96\u7F92\u7FC3\u7FC2\u7FC0\u8016" +
-                "\u803E\u8039\u80FA\u80F2\u80F9\u80F5\u8101\u80FB" +
-                "\u8100\u8201\u822F\u8225\u8333\u832D\u8344\u8319" +
-                "\u8351\u8325\u8356\u833F\u8341\u8326\u831C\u8322" +
-                "\u8342\u834E\u831B\u832A\u8308\u833C\u834D\u8316" +
-                "\u8324\u8320\u8337\u832F\u8329\u8347\u8345\u834C" +
-                "\u8353\u831E\u832C\u834B\u8327\u8348\u8653\u8652" +
-                "\u86A2\u86A8\u8696\u868D\u8691\u869E\u8687\u8697" +
-                "\u8686\u868B\u869A\u8685\u86A5\u8699\u86A1\u86A7" +
-                "\u8695\u8698\u868E\u869D\u8690\u8694\u8843\u8844" +
-                "\u886D\u8875\u8876\u8872\u8880\u8871\u887F\u886F" +
-                "\u8883\u887E\u8874\u887C\u8A12\u8C47\u8C57\u8C7B" +
-                "\u8CA4\u8CA3\u8D76\u8D78\u8DB5\u8DB7\u8DB6\u8ED1" +
-                "\u8ED3\u8FFE\u8FF5\u9002\u8FFF\u8FFB\u9004\u8FFC" +
-                "\u8FF6\u90D6\u90E0\u90D9\u90DA\u90E3\u90DF\u90E5" +
-                "\u90D8\u90DB\u90D7\u90DC\u90E4\u9150\u914E\u914F" +
-                "\u91D5\u91E2\u91DA\u965C\u965F\u96BC\u98E3\u9ADF" +
-                "\u9B2F\u4E7F\u5070\u506A\u5061\u505E\u5060\u5053" +
-                "\u504B\u505D\u5072\u5048\u504D\u5041\u505B\u504A" +
-                "\u5062\u5015\u5045\u505F\u5069\u506B\u5063\u5064" +
-                "\u5046\u5040\u506E\u5073\u5057\u5051\u51D0\u526B" +
-                "\u526D\u526C\u526E\u52D6\u52D3\u532D\u539C\u5575" +
-                "\u5576\u553C\u554D\u5550\u5534\u552A\u5551\u5562" +
-                "\u5536\u5535\u5530\u5552\u5545\u550C\u5532\u5565" +
-                "\u554E\u5539\u5548\u552D\u553B\u5540\u554B\u570A" +
-                "\u5707\u57FB\u5814\u57E2\u57F6\u57DC\u57F4\u5800" +
-                "\u57ED\u57FD\u5808\u57F8\u580B\u57F3\u57CF\u5807" +
-                "\u57EE\u57E3\u57F2\u57E5\u57EC\u57E1\u580E\u57FC" +
-                "\u5810\u57E7\u5801\u580C\u57F1\u57E9\u57F0\u580D" +
-                "\u5804\u595C\u5A60\u5A58\u5A55\u5A67\u5A5E\u5A38" +
-                "\u5A35\u5A6D\u5A50\u5A5F\u5A65\u5A6C\u5A53\u5A64" +
-                "\u5A57\u5A43\u5A5D\u5A52\u5A44\u5A5B\u5A48\u5A8E" +
-                "\u5A3E\u5A4D\u5A39\u5A4C\u5A70\u5A69\u5A47\u5A51" +
-                "\u5A56\u5A42\u5A5C\u5B72\u5B6E\u5BC1\u5BC0\u5C59" +
-                "\u5D1E\u5D0B\u5D1D\u5D1A\u5D20\u5D0C\u5D28\u5D0D" +
-                "\u5D26\u5D25\u5D0F\u5D30\u5D12\u5D23\u5D1F\u5D2E" +
-                "\u5E3E\u5E34\u5EB1\u5EB4\u5EB9\u5EB2\u5EB3\u5F36" +
-                "\u5F38\u5F9B\u5F96\u5F9F\u608A\u6090\u6086\u60BE" +
-                "\u60B0\u60BA\u60D3\u60D4\u60CF\u60E4\u60D9\u60DD" +
-                "\u60C8\u60B1\u60DB\u60B7\u60CA\u60BF\u60C3\u60CD" +
-                "\u60C0\u6332\u6365\u638A\u6382\u637D\u63BD\u639E" +
-                "\u63AD\u639D\u6397\u63AB\u638E\u636F\u6387\u6390" +
-                "\u636E\u63AF\u6375\u639C\u636D\u63AE\u637C\u63A4" +
-                "\u633B\u639F\u6378\u6385\u6381\u6391\u638D\u6370" +
-                "\u6553\u65CD\u6665\u6661\u665B\u6659\u665C\u6662" +
-                "\u6718\u6879\u6887\u6890\u689C\u686D\u686E\u68AE" +
-                "\u68AB\u6956\u686F\u68A3\u68AC\u68A9\u6875\u6874" +
-                "\u68B2\u688F\u6877\u6892\u687C\u686B\u6872\u68AA" +
-                "\u6880\u6871\u687E\u689B\u6896\u688B\u68A0\u6889" +
-                "\u68A4\u6878\u687B\u6891\u688C\u688A\u687D\u6B36" +
-                "\u6B33\u6B37\u6B38\u6B91\u6B8F\u6B8D\u6B8E\u6B8C" +
-                "\u6C2A\u6DC0\u6DAB\u6DB4\u6DB3\u6E74\u6DAC\u6DE9" +
-                "\u6DE2\u6DB7\u6DF6\u6DD4\u6E00\u6DC8\u6DE0\u6DDF" +
-                "\u6DD6\u6DBE\u6DE5\u6DDC\u6DDD\u6DDB\u6DF4\u6DCA" +
-                "\u6DBD\u6DED\u6DF0\u6DBA\u6DD5\u6DC2\u6DCF\u6DC9" +
-                "\u6DD0\u6DF2\u6DD3\u6DFD\u6DD7\u6DCD\u6DE3\u6DBB" +
-                "\u70FA\u710D\u70F7\u7117\u70F4\u710C\u70F0\u7104" +
-                "\u70F3\u7110\u70FC\u70FF\u7106\u7113\u7100\u70F8" +
-                "\u70F6\u710B\u7102\u710E\u727E\u727B\u727C\u727F" +
-                "\u731D\u7317\u7307\u7311\u7318\u730A\u7308\u72FF" +
-                "\u730F\u731E\u7388\u73F6\u73F8\u73F5\u7404\u7401" +
-                "\u73FD\u7407\u7400\u73FA\u73FC\u73FF\u740C\u740B" +
-                "\u73F4\u7408\u7564\u7563\u75CE\u75D2\u75CF\u75CB" +
-                "\u75CC\u75D1\u75D0\u768F\u7689\u76D3\u7739\u772F" +
-                "\u772D\u7731\u7732\u7734\u7733\u773D\u7725\u773B" +
-                "\u7735\u7848\u7852\u7849\u784D\u784A\u784C\u7826" +
-                "\u7845\u7850\u7964\u7967\u7969\u796A\u7963\u796B" +
-                "\u7961\u79BB\u79FA\u79F8\u79F6\u79F7\u7A8F\u7A94" +
-                "\u7A90\u7B35\u7B3B\u7B34\u7B25\u7B30\u7B22\u7B24" +
-                "\u7B33\u7B18\u7B2A\u7B1D\u7B31\u7B2B\u7B2D\u7B2F" +
-                "\u7B32\u7B38\u7B1A\u7B23\u7C94\u7C98\u7C96\u7CA3" +
-                "\u7D35\u7D3D\u7D38\u7D36\u7D3A\u7D45\u7D2C\u7D29" +
-                "\u7D41\u7D47\u7D3E\u7D3F\u7D4A\u7D3B\u7D28\u7F63" +
-                "\u7F95\u7F9C\u7F9D\u7F9B\u7FCA\u7FCB\u7FCD\u7FD0" +
-                "\u7FD1\u7FC7\u7FCF\u7FC9\u801F\u801E\u801B\u8047" +
-                "\u8043\u8048\u8118\u8125\u8119\u811B\u812D\u811F" +
-                "\u812C\u811E\u8121\u8115\u8127\u811D\u8122\u8211" +
-                "\u8238\u8233\u823A\u8234\u8232\u8274\u8390\u83A3" +
-                "\u83A8\u838D\u837A\u8373\u83A4\u8374\u838F\u8381" +
-                "\u8395\u8399\u8375\u8394\u83A9\u837D\u8383\u838C" +
-                "\u839D\u839B\u83AA\u838B\u837E\u83A5\u83AF\u8388" +
-                "\u8397\u83B0\u837F\u83A6\u8387\u83AE\u8376\u8659" +
-                "\u8656\u86BF\u86B7\u86C2\u86C1\u86C5\u86BA\u86B0" +
-                "\u86C8\u86B9\u86B3\u86B8\u86CC\u86B4\u86BB\u86BC" +
-                "\u86C3\u86BD\u86BE\u8852\u8889\u8895\u88A8\u88A2" +
-                "\u88AA\u889A\u8891\u88A1\u889F\u8898\u88A7\u8899" +
-                "\u889B\u8897\u88A4\u88AC\u888C\u8893\u888E\u8982" +
-                "\u89D6\u89D9\u89D5\u8A30\u8A27\u8A2C\u8A1E\u8C39" +
-                "\u8C3B\u8C5C\u8C5D\u8C7D\u8CA5\u8D7D\u8D7B\u8D79" +
-                "\u8DBC\u8DC2\u8DB9\u8DBF\u8DC1\u8ED8\u8EDE\u8EDD" +
-                "\u8EDC\u8ED7\u8EE0\u8EE1\u9024\u900B\u9011\u901C" +
-                "\u900C\u9021\u90EF\u90EA\u90F0\u90F4\u90F2\u90F3" +
-                "\u90D4\u90EB\u90EC\u90E9\u9156\u9158\u915A\u9153" +
-                "\u9155\u91EC\u91F4\u91F1\u91F3\u91F8\u91E4\u91F9" +
-                "\u91EA\u91EB\u91F7\u91E8\u91EE\u957A\u9586\u9588" +
-                "\u967C\u966D\u966B\u9671\u966F\u96BF\u976A\u9804" +
-                "\u98E5\u9997\u509B\u5095\u5094\u509E\u508B\u50A3" +
-                "\u5083\u508C\u508E\u509D\u5068\u509C\u5092\u5082" +
-                "\u5087\u515F\u51D4\u5312\u5311\u53A4\u53A7\u5591" +
-                "\u55A8\u55A5\u55AD\u5577\u5645\u55A2\u5593\u5588" +
-                "\u558F\u55B5\u5581\u55A3\u5592\u55A4\u557D\u558C" +
-                "\u55A6\u557F\u5595\u55A1\u558E\u570C\u5829\u5837" +
-                "\u5819\u581E\u5827\u5823\u5828\u57F5\u5848\u5825" +
-                "\u581C\u581B\u5833\u583F\u5836\u582E\u5839\u5838" +
-                "\u582D\u582C\u583B\u5961\u5AAF\u5A94\u5A9F\u5A7A" +
-                "\u5AA2\u5A9E\u5A78\u5AA6\u5A7C\u5AA5\u5AAC\u5A95" +
-                "\u5AAE\u5A37\u5A84\u5A8A\u5A97\u5A83\u5A8B\u5AA9" +
-                "\u5A7B\u5A7D\u5A8C\u5A9C\u5A8F\u5A93\u5A9D\u5BEA" +
-                "\u5BCD\u5BCB\u5BD4\u5BD1\u5BCA\u5BCE\u5C0C\u5C30" +
-                "\u5D37\u5D43\u5D6B\u5D41\u5D4B\u5D3F\u5D35\u5D51" +
-                "\u5D4E\u5D55\u5D33\u5D3A\u5D52\u5D3D\u5D31\u5D59" +
-                "\u5D42\u5D39\u5D49\u5D38\u5D3C\u5D32\u5D36\u5D40" +
-                "\u5D45\u5E44\u5E41\u5F58\u5FA6\u5FA5\u5FAB\u60C9" +
-                "\u60B9\u60CC\u60E2\u60CE\u60C4\u6114\u60F2\u610A" +
-                "\u6116\u6105\u60F5\u6113\u60F8\u60FC\u60FE\u60C1" +
-                "\u6103\u6118\u611D\u6110\u60FF\u6104\u610B\u624A" +
-                "\u6394\u63B1\u63B0\u63CE\u63E5\u63E8\u63EF\u63C3" +
-                "\u649D\u63F3\u63CA\u63E0\u63F6\u63D5\u63F2\u63F5" +
-                "\u6461\u63DF\u63BE\u63DD\u63DC\u63C4\u63D8\u63D3" +
-                "\u63C2\u63C7\u63CC\u63CB\u63C8\u63F0\u63D7\u63D9" +
-                "\u6532\u6567\u656A\u6564\u655C\u6568\u6565\u658C" +
-                "\u659D\u659E\u65AE\u65D0\u65D2\u667C\u666C\u667B" +
-                "\u6680\u6671\u6679\u666A\u6672\u6701\u690C\u68D3" +
-                "\u6904\u68DC\u692A\u68EC\u68EA\u68F1\u690F\u68D6" +
-                "\u68F7\u68EB\u68E4\u68F6\u6913\u6910\u68F3\u68E1" +
-                "\u6907\u68CC\u6908\u6970\u68B4\u6911\u68EF\u68C6" +
-                "\u6914\u68F8\u68D0\u68FD\u68FC\u68E8\u690B\u690A" +
-                "\u6917\u68CE\u68C8\u68DD\u68DE\u68E6\u68F4\u68D1" +
-                "\u6906\u68D4\u68E9\u6915\u6925\u68C7\u6B39\u6B3B" +
-                "\u6B3F\u6B3C\u6B94\u6B97\u6B99\u6B95\u6BBD\u6BF0" +
-                "\u6BF2\u6BF3\u6C30\u6DFC\u6E46\u6E47\u6E1F\u6E49" +
-                "\u6E88\u6E3C\u6E3D\u6E45\u6E62\u6E2B\u6E3F\u6E41" +
-                "\u6E5D\u6E73\u6E1C\u6E33\u6E4B\u6E40\u6E51\u6E3B" +
-                "\u6E03\u6E2E\u6E5E\u6E68\u6E5C\u6E61\u6E31\u6E28" +
-                "\u6E60\u6E71\u6E6B\u6E39\u6E22\u6E30\u6E53\u6E65" +
-                "\u6E27\u6E78\u6E64\u6E77\u6E55\u6E79\u6E52\u6E66" +
-                "\u6E35\u6E36\u6E5A\u7120\u711E\u712F\u70FB\u712E" +
-                "\u7131\u7123\u7125\u7122\u7132\u711F\u7128\u713A" +
-                "\u711B\u724B\u725A\u7288\u7289\u7286\u7285\u728B" +
-                "\u7312\u730B\u7330\u7322\u7331\u7333\u7327\u7332" +
-                "\u732D\u7326\u7323\u7335\u730C\u742E\u742C\u7430" +
-                "\u742B\u7416\u741A\u7421\u742D\u7431\u7424\u7423" +
-                "\u741D\u7429\u7420\u7432\u74FB\u752F\u756F\u756C" +
-                "\u75E7\u75DA\u75E1\u75E6\u75DD\u75DF\u75E4\u75D7" +
-                "\u7695\u7692\u76DA\u7746\u7747\u7744\u774D\u7745" +
-                "\u774A\u774E\u774B\u774C\u77DE\u77EC\u7860\u7864" +
-                "\u7865\u785C\u786D\u7871\u786A\u786E\u7870\u7869" +
-                "\u7868\u785E\u7862\u7974\u7973\u7972\u7970\u7A02" +
-                "\u7A0A\u7A03\u7A0C\u7A04\u7A99\u7AE6\u7AE4\u7B4A" +
-                "\u7B47\u7B44\u7B48\u7B4C\u7B4E\u7B40\u7B58\u7B45" +
-                "\u7CA2\u7C9E\u7CA8\u7CA1\u7D58\u7D6F\u7D63\u7D53" +
-                "\u7D56\u7D67\u7D6A\u7D4F\u7D6D\u7D5C\u7D6B\u7D52" +
-                "\u7D54\u7D69\u7D51\u7D5F\u7D4E\u7F3E\u7F3F\u7F65" +
-                "\u7F66\u7FA2\u7FA0\u7FA1\u7FD7\u8051\u804F\u8050" +
-                "\u80FE\u80D4\u8143\u814A\u8152\u814F\u8147\u813D" +
-                "\u814D\u813A\u81E6\u81EE\u81F7\u81F8\u81F9\u8204" +
-                "\u823C\u823D\u823F\u8275\u833B\u83CF\u83F9\u8423" +
-                "\u83C0\u83E8\u8412\u83E7\u83E4\u83FC\u83F6\u8410" +
-                "\u83C6\u83C8\u83EB\u83E3\u83BF\u8401\u83DD\u83E5" +
-                "\u83D8\u83FF\u83E1\u83CB\u83CE\u83D6\u83F5\u83C9" +
-                "\u8409\u840F\u83DE\u8411\u8406\u83C2\u83F3\u83D5" +
-                "\u83FA\u83C7\u83D1\u83EA\u8413\u839A\u83C3\u83EC" +
-                "\u83EE\u83C4\u83FB\u83D7\u83E2\u841B\u83DB\u83FE" +
-                "\u86D8\u86E2\u86E6\u86D3\u86E3\u86DA\u86EA\u86DD" +
-                "\u86EB\u86DC\u86EC\u86E9\u86D7\u86E8\u86D1\u8848" +
-                "\u8856\u8855\u88BA\u88D7\u88B9\u88B8\u88C0\u88BE" +
-                "\u88B6\u88BC\u88B7\u88BD\u88B2\u8901\u88C9\u8995" +
-                "\u8998\u8997\u89DD\u89DA\u89DB\u8A4E\u8A4D\u8A39" +
-                "\u8A59\u8A40\u8A57\u8A58\u8A44\u8A45\u8A52\u8A48" +
-                "\u8A51\u8A4A\u8A4C\u8A4F\u8C5F\u8C81\u8C80\u8CBA" +
-                "\u8CBE\u8CB0\u8CB9\u8CB5\u8D84\u8D80\u8D89\u8DD8" +
-                "\u8DD3\u8DCD\u8DC7\u8DD6\u8DDC\u8DCF\u8DD5\u8DD9" +
-                "\u8DC8\u8DD7\u8DC5\u8EEF\u8EF7\u8EFA\u8EF9\u8EE6" +
-                "\u8EEE\u8EE5\u8EF5\u8EE7\u8EE8\u8EF6\u8EEB\u8EF1" +
-                "\u8EEC\u8EF4\u8EE9\u902D\u9034\u902F\u9106\u912C" +
-                "\u9104\u90FF\u90FC\u9108\u90F9\u90FB\u9101\u9100" +
-                "\u9107\u9105\u9103\u9161\u9164\u915F\u9162\u9160" +
-                "\u9201\u920A\u9225\u9203\u921A\u9226\u920F\u920C" +
-                "\u9200\u9212\u91FF\u91FD\u9206\u9204\u9227\u9202" +
-                "\u921C\u9224\u9219\u9217\u9205\u9216\u957B\u958D" +
-                "\u958C\u9590\u9687\u967E\u9688\u9689\u9683\u9680" +
-                "\u96C2\u96C8\u96C3\u96F1\u96F0\u976C\u9770\u976E" +
-                "\u9807\u98A9\u98EB\u9CE6\u9EF9\u4E83\u4E84\u4EB6" +
-                "\u50BD\u50BF\u50C6\u50AE\u50C4\u50CA\u50B4\u50C8" +
-                "\u50C2\u50B0\u50C1\u50BA\u50B1\u50CB\u50C9\u50B6" +
-                "\u50B8\u51D7\u527A\u5278\u527B\u527C\u55C3\u55DB" +
-                "\u55CC\u55D0\u55CB\u55CA\u55DD\u55C0\u55D4\u55C4" +
-                "\u55E9\u55BF\u55D2\u558D\u55CF\u55D5\u55E2\u55D6" +
-                "\u55C8\u55F2\u55CD\u55D9\u55C2\u5714\u5853\u5868" +
-                "\u5864\u584F\u584D\u5849\u586F\u5855\u584E\u585D" +
-                "\u5859\u5865\u585B\u583D\u5863\u5871\u58FC\u5AC7" +
-                "\u5AC4\u5ACB\u5ABA\u5AB8\u5AB1\u5AB5\u5AB0\u5ABF" +
-                "\u5AC8\u5ABB\u5AC6\u5AB7\u5AC0\u5ACA\u5AB4\u5AB6" +
-                "\u5ACD\u5AB9\u5A90\u5BD6\u5BD8\u5BD9\u5C1F\u5C33" +
-                "\u5D71\u5D63\u5D4A\u5D65\u5D72\u5D6C\u5D5E\u5D68" +
-                "\u5D67\u5D62\u5DF0\u5E4F\u5E4E\u5E4A\u5E4D\u5E4B" +
-                "\u5EC5\u5ECC\u5EC6\u5ECB\u5EC7\u5F40\u5FAF\u5FAD" +
-                "\u60F7\u6149\u614A\u612B\u6145\u6136\u6132\u612E" +
-                "\u6146\u612F\u614F\u6129\u6140\u6220\u9168\u6223" +
-                "\u6225\u6224\u63C5\u63F1\u63EB\u6410\u6412\u6409" +
-                "\u6420\u6424\u6433\u6443\u641F\u6415\u6418\u6439" +
-                "\u6437\u6422\u6423\u640C\u6426\u6430\u6428\u6441" +
-                "\u6435\u642F\u640A\u641A\u6440\u6425\u6427\u640B" +
-                "\u63E7\u641B\u642E\u6421\u640E\u656F\u6592\u65D3" +
-                "\u6686\u668C\u6695\u6690\u668B\u668A\u6699\u6694" +
-                "\u6678\u6720\u6966\u695F\u6938\u694E\u6962\u6971" +
-                "\u693F\u6945\u696A\u6939\u6942\u6957\u6959\u697A" +
-                "\u6948\u6949\u6935\u696C\u6933\u693D\u6965\u68F0" +
-                "\u6978\u6934\u6969\u6940\u696F\u6944\u6976\u6958" +
-                "\u6941\u6974\u694C\u693B\u694B\u6937\u695C\u694F" +
-                "\u6951\u6932\u6952\u692F\u697B\u693C\u6B46\u6B45" +
-                "\u6B43\u6B42\u6B48\u6B41\u6B9B\u6BFB\u6BFC\u6BF9" +
-                "\u6BF7\u6BF8\u6E9B\u6ED6\u6EC8\u6E8F\u6EC0\u6E9F" +
-                "\u6E93\u6E94\u6EA0\u6EB1\u6EB9\u6EC6\u6ED2\u6EBD" +
-                "\u6EC1\u6E9E\u6EC9\u6EB7\u6EB0\u6ECD\u6EA6\u6ECF" +
-                "\u6EB2\u6EBE\u6EC3\u6EDC\u6ED8\u6E99\u6E92\u6E8E" +
-                "\u6E8D\u6EA4\u6EA1\u6EBF\u6EB3\u6ED0\u6ECA\u6E97" +
-                "\u6EAE\u6EA3\u7147\u7154\u7152\u7163\u7160\u7141" +
-                "\u715D\u7162\u7172\u7178\u716A\u7161\u7142\u7158" +
-                "\u7143\u714B\u7170\u715F\u7150\u7153\u7144\u714D" +
-                "\u715A\u724F\u728D\u728C\u7291\u7290\u728E\u733C" +
-                "\u7342\u733B\u733A\u7340\u734A\u7349\u7444\u744A" +
-                "\u744B\u7452\u7451\u7457\u7440\u744F\u7450\u744E" +
-                "\u7442\u7446\u744D\u7454\u74E1\u74FF\u74FE\u74FD" +
-                "\u751D\u7579\u7577\u6983\u75EF\u760F\u7603\u75F7" +
-                "\u75FE\u75FC\u75F9\u75F8\u7610\u75FB\u75F6\u75ED" +
-                "\u75F5\u75FD\u7699\u76B5\u76DD\u7755\u775F\u7760" +
-                "\u7752\u7756\u775A\u7769\u7767\u7754\u7759\u776D" +
-                "\u77E0\u7887\u789A\u7894\u788F\u7884\u7895\u7885" +
-                "\u7886\u78A1\u7883\u7879\u7899\u7880\u7896\u787B" +
-                "\u797C\u7982\u797D\u7979\u7A11\u7A18\u7A19\u7A12" +
-                "\u7A17\u7A15\u7A22\u7A13\u7A1B\u7A10\u7AA3\u7AA2" +
-                "\u7A9E\u7AEB\u7B66\u7B64\u7B6D\u7B74\u7B69\u7B72" +
-                "\u7B65\u7B73\u7B71\u7B70\u7B61\u7B78\u7B76\u7B63" +
-                "\u7CB2\u7CB4\u7CAF\u7D88\u7D86\u7D80\u7D8D\u7D7F" +
-                "\u7D85\u7D7A\u7D8E\u7D7B\u7D83\u7D7C\u7D8C\u7D94" +
-                "\u7D84\u7D7D\u7D92\u7F6D\u7F6B\u7F67\u7F68\u7F6C" +
-                "\u7FA6\u7FA5\u7FA7\u7FDB\u7FDC\u8021\u8164\u8160" +
-                "\u8177\u815C\u8169\u815B\u8162\u8172\u6721\u815E" +
-                "\u8176\u8167\u816F\u8144\u8161\u821D\u8249\u8244" +
-                "\u8240\u8242\u8245\u84F1\u843F\u8456\u8476\u8479" +
-                "\u848F\u848D\u8465\u8451\u8440\u8486\u8467\u8430" +
-                "\u844D\u847D\u845A\u8459\u8474\u8473\u845D\u8507" +
-                "\u845E\u8437\u843A\u8434\u847A\u8443\u8478\u8432" +
-                "\u8445\u8429\u83D9\u844B\u842F\u8442\u842D\u845F" +
-                "\u8470\u8439\u844E\u844C\u8452\u846F\u84C5\u848E" +
-                "\u843B\u8447\u8436\u8433\u8468\u847E\u8444\u842B" +
-                "\u8460\u8454\u846E\u8450\u870B\u8704\u86F7\u870C" +
-                "\u86FA\u86D6\u86F5\u874D\u86F8\u870E\u8709\u8701" +
-                "\u86F6\u870D\u8705\u88D6\u88CB\u88CD\u88CE\u88DE" +
-                "\u88DB\u88DA\u88CC\u88D0\u8985\u899B\u89DF\u89E5" +
-                "\u89E4\u89E1\u89E0\u89E2\u89DC\u89E6\u8A76\u8A86" +
-                "\u8A7F\u8A61\u8A3F\u8A77\u8A82\u8A84\u8A75\u8A83" +
-                "\u8A81\u8A74\u8A7A\u8C3C\u8C4B\u8C4A\u8C65\u8C64" +
-                "\u8C66\u8C86\u8C84\u8C85\u8CCC\u8D68\u8D69\u8D91" +
-                "\u8D8C\u8D8E\u8D8F\u8D8D\u8D93\u8D94\u8D90\u8D92" +
-                "\u8DF0\u8DE0\u8DEC\u8DF1\u8DEE\u8DD0\u8DE9\u8DE3" +
-                "\u8DE2\u8DE7\u8DF2\u8DEB\u8DF4\u8F06\u8EFF\u8F01" +
-                "\u8F00\u8F05\u8F07\u8F08\u8F02\u8F0B\u9052\u903F" +
-                "\u9044\u9049\u903D\u9110\u910D\u910F\u9111\u9116" +
-                "\u9114\u910B\u910E\u916E\u916F\u9248\u9252\u9230" +
-                "\u923A\u9266\u9233\u9265\u925E\u9283\u922E\u924A" +
-                "\u9246\u926D\u926C\u924F\u9260\u9267\u926F\u9236" +
-                "\u9261\u9270\u9231\u9254\u9263\u9250\u9272\u924E" +
-                "\u9253\u924C\u9256\u9232\u959F\u959C\u959E\u959B" +
-                "\u9692\u9693\u9691\u9697\u96CE\u96FA\u96FD\u96F8" +
-                "\u96F5\u9773\u9777\u9778\u9772\u980F\u980D\u980E" +
-                "\u98AC\u98F6\u98F9\u99AF\u99B2\u99B0\u99B5\u9AAD" +
-                "\u9AAB\u9B5B\u9CEA\u9CED\u9CE7\u9E80\u9EFD\u50E6" +
-                "\u50D4\u50D7\u50E8\u50F3\u50DB\u50EA\u50DD\u50E4" +
-                "\u50D3\u50EC\u50F0\u50EF\u50E3\u50E0\u51D8\u5280" +
-                "\u5281\u52E9\u52EB\u5330\u53AC\u5627\u5615\u560C" +
-                "\u5612\u55FC\u560F\u561C\u5601\u5613\u5602\u55FA" +
-                "\u561D\u5604\u55FF\u55F9\u5889\u587C\u5890\u5898" +
-                "\u5886\u5881\u587F\u5874\u588B\u587A\u5887\u5891" +
-                "\u588E\u5876\u5882\u5888\u587B\u5894\u588F\u58FE" +
-                "\u596B\u5ADC\u5AEE\u5AE5\u5AD5\u5AEA\u5ADA\u5AED" +
-                "\u5AEB\u5AF3\u5AE2\u5AE0\u5ADB\u5AEC\u5ADE\u5ADD" +
-                "\u5AD9\u5AE8\u5ADF\u5B77\u5BE0\u5BE3\u5C63\u5D82" +
-                "\u5D80\u5D7D\u5D86\u5D7A\u5D81\u5D77\u5D8A\u5D89" +
-                "\u5D88\u5D7E\u5D7C\u5D8D\u5D79\u5D7F\u5E58\u5E59" +
-                "\u5E53\u5ED8\u5ED1\u5ED7\u5ECE\u5EDC\u5ED5\u5ED9" +
-                "\u5ED2\u5ED4\u5F44\u5F43\u5F6F\u5FB6\u612C\u6128" +
-                "\u6141\u615E\u6171\u6173\u6152\u6153\u6172\u616C" +
-                "\u6180\u6174\u6154\u617A\u615B\u6165\u613B\u616A" +
-                "\u6161\u6156\u6229\u6227\u622B\u642B\u644D\u645B" +
-                "\u645D\u6474\u6476\u6472\u6473\u647D\u6475\u6466" +
-                "\u64A6\u644E\u6482\u645E\u645C\u644B\u6453\u6460" +
-                "\u6450\u647F\u643F\u646C\u646B\u6459\u6465\u6477" +
-                "\u6573\u65A0\u66A1\u66A0\u669F\u6705\u6704\u6722" +
-                "\u69B1\u69B6\u69C9\u69A0\u69CE\u6996\u69B0\u69AC" +
-                "\u69BC\u6991\u6999\u698E\u69A7\u698D\u69A9\u69BE" +
-                "\u69AF\u69BF\u69C4\u69BD\u69A4\u69D4\u69B9\u69CA" +
-                "\u699A\u69CF\u69B3\u6993\u69AA\u69A1\u699E\u69D9" +
-                "\u6997\u6990\u69C2\u69B5\u69A5\u69C6\u6B4A\u6B4D" +
-                "\u6B4B\u6B9E\u6B9F\u6BA0\u6BC3\u6BC4\u6BFE\u6ECE" +
-                "\u6EF5\u6EF1\u6F03\u6F25\u6EF8\u6F37\u6EFB\u6F2E" +
-                "\u6F09\u6F4E\u6F19\u6F1A\u6F27\u6F18\u6F3B\u6F12" +
-                "\u6EED\u6F0A\u6F36\u6F73\u6EF9\u6EEE\u6F2D\u6F40" +
-                "\u6F30\u6F3C\u6F35\u6EEB\u6F07\u6F0E\u6F43\u6F05" +
-                "\u6EFD\u6EF6\u6F39\u6F1C\u6EFC\u6F3A\u6F1F\u6F0D" +
-                "\u6F1E\u6F08\u6F21\u7187\u7190\u7189\u7180\u7185" +
-                "\u7182\u718F\u717B\u7186\u7181\u7197\u7244\u7253" +
-                "\u7297\u7295\u7293\u7343\u734D\u7351\u734C\u7462" +
-                "\u7473\u7471\u7475\u7472\u7467\u746E\u7500\u7502" +
-                "\u7503\u757D\u7590\u7616\u7608\u760C\u7615\u7611" +
-                "\u760A\u7614\u76B8\u7781\u777C\u7785\u7782\u776E" +
-                "\u7780\u776F\u777E\u7783\u78B2\u78AA\u78B4\u78AD" +
-                "\u78A8\u787E\u78AB\u789E\u78A5\u78A0\u78AC\u78A2" +
-                "\u78A4\u7998\u798A\u798B\u7996\u7995\u7994\u7993" +
-                "\u7997\u7988\u7992\u7990\u7A2B\u7A4A\u7A30\u7A2F" +
-                "\u7A28\u7A26\u7AA8\u7AAB\u7AAC\u7AEE\u7B88\u7B9C" +
-                "\u7B8A\u7B91\u7B90\u7B96\u7B8D\u7B8C\u7B9B\u7B8E" +
-                "\u7B85\u7B98\u5284\u7B99\u7BA4\u7B82\u7CBB\u7CBF" +
-                "\u7CBC\u7CBA\u7DA7\u7DB7\u7DC2\u7DA3\u7DAA\u7DC1" +
-                "\u7DC0\u7DC5\u7D9D\u7DCE\u7DC4\u7DC6\u7DCB\u7DCC" +
-                "\u7DAF\u7DB9\u7D96\u7DBC\u7D9F\u7DA6\u7DAE\u7DA9" +
-                "\u7DA1\u7DC9\u7F73\u7FE2\u7FE3\u7FE5\u7FDE\u8024" +
-                "\u805D\u805C\u8189\u8186\u8183\u8187\u818D\u818C" +
-                "\u818B\u8215\u8497\u84A4\u84A1\u849F\u84BA\u84CE" +
-                "\u84C2\u84AC\u84AE\u84AB\u84B9\u84B4\u84C1\u84CD" +
-                "\u84AA\u849A\u84B1\u84D0\u849D\u84A7\u84BB\u84A2" +
-                "\u8494\u84C7\u84CC\u849B\u84A9\u84AF\u84A8\u84D6" +
-                "\u8498\u84B6\u84CF\u84A0\u84D7\u84D4\u84D2\u84DB" +
-                "\u84B0\u8491\u8661\u8733\u8723\u8728\u876B\u8740" +
-                "\u872E\u871E\u8721\u8719\u871B\u8743\u872C\u8741" +
-                "\u873E\u8746\u8720\u8732\u872A\u872D\u873C\u8712" +
-                "\u873A\u8731\u8735\u8742\u8726\u8727\u8738\u8724" +
-                "\u871A\u8730\u8711\u88F7\u88E7\u88F1\u88F2\u88FA" +
-                "\u88FE\u88EE\u88FC\u88F6\u88FB\u88F0\u88EC\u88EB" +
-                "\u899D\u89A1\u899F\u899E\u89E9\u89EB\u89E8\u8AAB" +
-                "\u8A99\u8A8B\u8A92\u8A8F\u8A96\u8C3D\u8C68\u8C69" +
-                "\u8CD5\u8CCF\u8CD7\u8D96\u8E09\u8E02\u8DFF\u8E0D" +
-                "\u8DFD\u8E0A\u8E03\u8E07\u8E06\u8E05\u8DFE\u8E00" +
-                "\u8E04\u8F10\u8F11\u8F0E\u8F0D\u9123\u911C\u9120" +
-                "\u9122\u911F\u911D\u911A\u9124\u9121\u911B\u917A" +
-                "\u9172\u9179\u9173\u92A5\u92A4\u9276\u929B\u927A" +
-                "\u92A0\u9294\u92AA\u928D\u92A6\u929A\u92AB\u9279" +
-                "\u9297\u927F\u92A3\u92EE\u928E\u9282\u9295\u92A2" +
-                "\u927D\u9288\u92A1\u928A\u9286\u928C\u9299\u92A7" +
-                "\u927E\u9287\u92A9\u929D\u928B\u922D\u969E\u96A1" +
-                "\u96FF\u9758\u977D\u977A\u977E\u9783\u9780\u9782" +
-                "\u977B\u9784\u9781\u977F\u97CE\u97CD\u9816\u98AD" +
-                "\u98AE\u9902\u9900\u9907\u999D\u999C\u99C3\u99B9" +
-                "\u99BB\u99BA\u99C2\u99BD\u99C7\u9AB1\u9AE3\u9AE7" +
-                "\u9B3E\u9B3F\u9B60\u9B61\u9B5F\u9CF1\u9CF2\u9CF5" +
-                "\u9EA7\u50FF\u5103\u5130\u50F8\u5106\u5107\u50F6" +
-                "\u50FE\u510B\u510C\u50FD\u510A\u528B\u528C\u52F1" +
-                "\u52EF\u5648\u5642\u564C\u5635\u5641\u564A\u5649" +
-                "\u5646\u5658\u565A\u5640\u5633\u563D\u562C\u563E" +
-                "\u5638\u562A\u563A\u571A\u58AB\u589D\u58B1\u58A0" +
-                "\u58A3\u58AF\u58AC\u58A5\u58A1\u58FF\u5AFF\u5AF4" +
-                "\u5AFD\u5AF7\u5AF6\u5B03\u5AF8\u5B02\u5AF9\u5B01" +
-                "\u5B07\u5B05\u5B0F\u5C67\u5D99\u5D97\u5D9F\u5D92" +
-                "\u5DA2\u5D93\u5D95\u5DA0\u5D9C\u5DA1\u5D9A\u5D9E" +
-                "\u5E69\u5E5D\u5E60\u5E5C\u7DF3\u5EDB\u5EDE\u5EE1" +
-                "\u5F49\u5FB2\u618B\u6183\u6179\u61B1\u61B0\u61A2" +
-                "\u6189\u619B\u6193\u61AF\u61AD\u619F\u6192\u61AA" +
-                "\u61A1\u618D\u6166\u61B3\u622D\u646E\u6470\u6496" +
-                "\u64A0\u6485\u6497\u649C\u648F\u648B\u648A\u648C" +
-                "\u64A3\u649F\u6468\u64B1\u6498\u6576\u657A\u6579" +
-                "\u657B\u65B2\u65B3\u66B5\u66B0\u66A9\u66B2\u66B7" +
-                "\u66AA\u66AF\u6A00\u6A06\u6A17\u69E5\u69F8\u6A15" +
-                "\u69F1\u69E4\u6A20\u69FF\u69EC\u69E2\u6A1B\u6A1D" +
-                "\u69FE\u6A27\u69F2\u69EE\u6A14\u69F7\u69E7\u6A40" +
-                "\u6A08\u69E6\u69FB\u6A0D\u69FC\u69EB\u6A09\u6A04" +
-                "\u6A18\u6A25\u6A0F\u69F6\u6A26\u6A07\u69F4\u6A16" +
-                "\u6B51\u6BA5\u6BA3\u6BA2\u6BA6\u6C01\u6C00\u6BFF" +
-                "\u6C02\u6F41\u6F26\u6F7E\u6F87\u6FC6\u6F92\u6F8D" +
-                "\u6F89\u6F8C\u6F62\u6F4F\u6F85\u6F5A\u6F96\u6F76" +
-                "\u6F6C\u6F82\u6F55\u6F72\u6F52\u6F50\u6F57\u6F94" +
-                "\u6F93\u6F5D\u6F00\u6F61\u6F6B\u6F7D\u6F67\u6F90" +
-                "\u6F53\u6F8B\u6F69\u6F7F\u6F95\u6F63\u6F77\u6F6A" +
-                "\u6F7B\u71B2\u71AF\u719B\u71B0\u71A0\u719A\u71A9" +
-                "\u71B5\u719D\u71A5\u719E\u71A4\u71A1\u71AA\u719C" +
-                "\u71A7\u71B3\u7298\u729A\u7358\u7352\u735E\u735F" +
-                "\u7360\u735D\u735B\u7361\u735A\u7359\u7362\u7487" +
-                "\u7489\u748A\u7486\u7481\u747D\u7485\u7488\u747C" +
-                "\u7479\u7508\u7507\u757E\u7625\u761E\u7619\u761D" +
-                "\u761C\u7623\u761A\u7628\u761B\u769C\u769D\u769E" +
-                "\u769B\u778D\u778F\u7789\u7788\u78CD\u78BB\u78CF" +
-                "\u78CC\u78D1\u78CE\u78D4\u78C8\u78C3\u78C4\u78C9" +
-                "\u799A\u79A1\u79A0\u799C\u79A2\u799B\u6B76\u7A39" +
-                "\u7AB2\u7AB4\u7AB3\u7BB7\u7BCB\u7BBE\u7BAC\u7BCE" +
-                "\u7BAF\u7BB9\u7BCA\u7BB5\u7CC5\u7CC8\u7CCC\u7CCB" +
-                "\u7DF7\u7DDB\u7DEA\u7DE7\u7DD7\u7DE1\u7E03\u7DFA" +
-                "\u7DE6\u7DF6\u7DF1\u7DF0\u7DEE\u7DDF\u7F76\u7FAC" +
-                "\u7FB0\u7FAD\u7FED\u7FEB\u7FEA\u7FEC\u7FE6\u7FE8" +
-                "\u8064\u8067\u81A3\u819F\u819E\u8195\u81A2\u8199" +
-                "\u8197\u8216\u824F\u8253\u8252\u8250\u824E\u8251" +
-                "\u8524\u853B\u850F\u8500\u8529\u850E\u8509\u850D" +
-                "\u851F\u850A\u8527\u851C\u84FB\u852B\u84FA\u8508" +
-                "\u850C\u84F4\u852A\u84F2\u8515\u84F7\u84EB\u84F3" +
-                "\u84FC\u8512\u84EA\u84E9\u8516\u84FE\u8528\u851D" +
-                "\u852E\u8502\u84FD\u851E\u84F6\u8531\u8526\u84E7" +
-                "\u84E8\u84F0\u84EF\u84F9\u8518\u8520\u8530\u850B" +
-                "\u8519\u852F\u8662\u8756\u8763\u8764\u8777\u87E1" +
-                "\u8773\u8758\u8754\u875B\u8752\u8761\u875A\u8751" +
-                "\u875E\u876D\u876A\u8750\u874E\u875F\u875D\u876F" +
-                "\u876C\u877A\u876E\u875C\u8765\u874F\u877B\u8775" +
-                "\u8762\u8767\u8769\u885A\u8905\u890C\u8914\u890B" +
-                "\u8917\u8918\u8919\u8906\u8916\u8911\u890E\u8909" +
-                "\u89A2\u89A4\u89A3\u89ED\u89F0\u89EC\u8ACF\u8AC6" +
-                "\u8AB8\u8AD3\u8AD1\u8AD4\u8AD5\u8ABB\u8AD7\u8ABE" +
-                "\u8AC0\u8AC5\u8AD8\u8AC3\u8ABA\u8ABD\u8AD9\u8C3E" +
-                "\u8C4D\u8C8F\u8CE5\u8CDF\u8CD9\u8CE8\u8CDA\u8CDD" +
-                "\u8CE7\u8DA0\u8D9C\u8DA1\u8D9B\u8E20\u8E23\u8E25" +
-                "\u8E24\u8E2E\u8E15\u8E1B\u8E16\u8E11\u8E19\u8E26" +
-                "\u8E27\u8E14\u8E12\u8E18\u8E13\u8E1C\u8E17\u8E1A" +
-                "\u8F2C\u8F24\u8F18\u8F1A\u8F20\u8F23\u8F16\u8F17" +
-                "\u9073\u9070\u906F\u9067\u906B\u912F\u912B\u9129" +
-                "\u912A\u9132\u9126\u912E\u9185\u9186\u918A\u9181" +
-                "\u9182\u9184\u9180\u92D0\u92C3\u92C4\u92C0\u92D9" +
-                "\u92B6\u92CF\u92F1\u92DF\u92D8\u92E9\u92D7\u92DD" +
-                "\u92CC\u92EF\u92C2\u92E8\u92CA\u92C8\u92CE\u92E6" +
-                "\u92CD\u92D5\u92C9\u92E0\u92DE\u92E7\u92D1\u92D3" +
-                "\u92B5\u92E1\u9325\u92C6\u92B4\u957C\u95AC\u95AB" +
-                "\u95AE\u95B0\u96A4\u96A2\u96D3\u9705\u9708\u9702" +
-                "\u975A\u978A\u978E\u9788\u97D0\u97CF\u981E\u981D" +
-                "\u9826\u9829\u9828\u9820\u981B\u9827\u98B2\u9908" +
-                "\u98FA\u9911\u9914\u9916\u9917\u9915\u99DC\u99CD" +
-                "\u99CF\u99D3\u99D4\u99CE\u99C9\u99D6\u99D8\u99CB" +
-                "\u99D7\u99CC\u9AB3\u9AEC\u9AEB\u9AF3\u9AF2\u9AF1" +
-                "\u9B46\u9B43\u9B67\u9B74\u9B71\u9B66\u9B76\u9B75" +
-                "\u9B70\u9B68\u9B64\u9B6C\u9CFC\u9CFA\u9CFD\u9CFF" +
-                "\u9CF7\u9D07\u9D00\u9CF9\u9CFB\u9D08\u9D05\u9D04" +
-                "\u9E83\u9ED3\u9F0F\u9F10\u511C\u5113\u5117\u511A" +
-                "\u5111\u51DE\u5334\u53E1\u5670\u5660\u566E\u5673" +
-                "\u5666\u5663\u566D\u5672\u565E\u5677\u571C\u571B" +
-                "\u58C8\u58BD\u58C9\u58BF\u58BA\u58C2\u58BC\u58C6" +
-                "\u5B17\u5B19\u5B1B\u5B21\u5B14\u5B13\u5B10\u5B16" +
-                "\u5B28\u5B1A\u5B20\u5B1E\u5BEF\u5DAC\u5DB1\u5DA9" +
-                "\u5DA7\u5DB5\u5DB0\u5DAE\u5DAA\u5DA8\u5DB2\u5DAD" +
-                "\u5DAF\u5DB4\u5E67\u5E68\u5E66\u5E6F\u5EE9\u5EE7" +
-                "\u5EE6\u5EE8\u5EE5\u5F4B\u5FBC\u5FBB\u619D\u61A8" +
-                "\u6196\u61C5\u61B4\u61C6\u61C1\u61CC\u61BA\u61BF" +
-                "\u61B8\u618C\u64D7\u64D6\u64D0\u64CF\u64C9\u64BD" +
-                "\u6489\u64C3\u64DB\u64F3\u64D9\u6533\u657F\u657C" +
-                "\u65A2\u66C8\u66BE\u66C0\u66CA\u66CB\u66CF\u66BD" +
-                "\u66BB\u66BA\u66CC\u6723\u6A34\u6A66\u6A49\u6A67" +
-                "\u6A32\u6A68\u6A3E\u6A5D\u6A6D\u6A76\u6A5B\u6A51" +
-                "\u6A28\u6A5A\u6A3B\u6A3F\u6A41\u6A6A\u6A64\u6A50" +
-                "\u6A4F\u6A54\u6A6F\u6A69\u6A60\u6A3C\u6A5E\u6A56" +
-                "\u6A55\u6A4D\u6A4E\u6A46\u6B55\u6B54\u6B56\u6BA7" +
-                "\u6BAA\u6BAB\u6BC8\u6BC7\u6C04\u6C03\u6C06\u6FAD" +
-                "\u6FCB\u6FA3\u6FC7\u6FBC\u6FCE\u6FC8\u6F5E\u6FC4" +
-                "\u6FBD\u6F9E\u6FCA\u6FA8\u7004\u6FA5\u6FAE\u6FBA" +
-                "\u6FAC\u6FAA\u6FCF\u6FBF\u6FB8\u6FA2\u6FC9\u6FAB" +
-                "\u6FCD\u6FAF\u6FB2\u6FB0\u71C5\u71C2\u71BF\u71B8" +
-                "\u71D6\u71C0\u71C1\u71CB\u71D4\u71CA\u71C7\u71CF" +
-                "\u71BD\u71D8\u71BC\u71C6\u71DA\u71DB\u729D\u729E" +
-                "\u7369\u7366\u7367\u736C\u7365\u736B\u736A\u747F" +
-                "\u749A\u74A0\u7494\u7492\u7495\u74A1\u750B\u7580" +
-                "\u762F\u762D\u7631\u763D\u7633\u763C\u7635\u7632" +
-                "\u7630\u76BB\u76E6\u779A\u779D\u77A1\u779C\u779B" +
-                "\u77A2\u77A3\u7795\u7799\u7797\u78DD\u78E9\u78E5" +
-                "\u78EA\u78DE\u78E3\u78DB\u78E1\u78E2\u78ED\u78DF" +
-                "\u78E0\u79A4\u7A44\u7A48\u7A47\u7AB6\u7AB8\u7AB5" +
-                "\u7AB1\u7AB7\u7BDE\u7BE3\u7BE7\u7BDD\u7BD5\u7BE5" +
-                "\u7BDA\u7BE8\u7BF9\u7BD4\u7BEA\u7BE2\u7BDC\u7BEB" +
-                "\u7BD8\u7BDF\u7CD2\u7CD4\u7CD7\u7CD0\u7CD1\u7E12" +
-                "\u7E21\u7E17\u7E0C\u7E1F\u7E20\u7E13\u7E0E\u7E1C" +
-                "\u7E15\u7E1A\u7E22\u7E0B\u7E0F\u7E16\u7E0D\u7E14" +
-                "\u7E25\u7E24\u7F43\u7F7B\u7F7C\u7F7A\u7FB1\u7FEF" +
-                "\u802A\u8029\u806C\u81B1\u81A6\u81AE\u81B9\u81B5" +
-                "\u81AB\u81B0\u81AC\u81B4\u81B2\u81B7\u81A7\u81F2" +
-                "\u8255\u8256\u8257\u8556\u8545\u856B\u854D\u8553" +
-                "\u8561\u8558\u8540\u8546\u8564\u8541\u8562\u8544" +
-                "\u8551\u8547\u8563\u853E\u855B\u8571\u854E\u856E" +
-                "\u8575\u8555\u8567\u8560\u858C\u8566\u855D\u8554" +
-                "\u8565\u856C\u8663\u8665\u8664\u87A4\u879B\u878F" +
-                "\u8797\u8793\u8792\u8788\u8781\u8796\u8798\u8779" +
-                "\u8787\u87A3\u8785\u8790\u8791\u879D\u8784\u8794" +
-                "\u879C\u879A\u8789\u891E\u8926\u8930\u892D\u892E" +
-                "\u8927\u8931\u8922\u8929\u8923\u892F\u892C\u891F" +
-                "\u89F1\u8AE0\u8AE2\u8AF2\u8AF4\u8AF5\u8ADD\u8B14" +
-                "\u8AE4\u8ADF\u8AF0\u8AC8\u8ADE\u8AE1\u8AE8\u8AFF" +
-                "\u8AEF\u8AFB\u8C91\u8C92\u8C90\u8CF5\u8CEE\u8CF1" +
-                "\u8CF0\u8CF3\u8D6C\u8D6E\u8DA5\u8DA7\u8E33\u8E3E" +
-                "\u8E38\u8E40\u8E45\u8E36\u8E3C\u8E3D\u8E41\u8E30" +
-                "\u8E3F\u8EBD\u8F36\u8F2E\u8F35\u8F32\u8F39\u8F37" +
-                "\u8F34\u9076\u9079\u907B\u9086\u90FA\u9133\u9135" +
-                "\u9136\u9193\u9190\u9191\u918D\u918F\u9327\u931E" +
-                "\u9308\u931F\u9306\u930F\u937A\u9338\u933C\u931B" +
-                "\u9323\u9312\u9301\u9346\u932D\u930E\u930D\u92CB" +
-                "\u931D\u92FA\u9313\u92F9\u92F7\u9334\u9302\u9324" +
-                "\u92FF\u9329\u9339\u9335\u932A\u9314\u930C\u930B" +
-                "\u92FE\u9309\u9300\u92FB\u9316\u95BC\u95CD\u95BE" +
-                "\u95B9\u95BA\u95B6\u95BF\u95B5\u95BD\u96A9\u96D4" +
-                "\u970B\u9712\u9710\u9799\u9797\u9794\u97F0\u97F8" +
-                "\u9835\u982F\u9832\u9924\u991F\u9927\u9929\u999E" +
-                "\u99EE\u99EC\u99E5\u99E4\u99F0\u99E3\u99EA\u99E9" +
-                "\u99E7\u9AB9\u9ABF\u9AB4\u9ABB\u9AF6\u9AFA\u9AF9" +
-                "\u9AF7\u9B33\u9B80\u9B85\u9B87\u9B7C\u9B7E\u9B7B" +
-                "\u9B82\u9B93\u9B92\u9B90\u9B7A\u9B95\u9B7D\u9B88" +
-                "\u9D25\u9D17\u9D20\u9D1E\u9D14\u9D29\u9D1D\u9D18" +
-                "\u9D22\u9D10\u9D19\u9D1F\u9E88\u9E86\u9E87\u9EAE" +
-                "\u9EAD\u9ED5\u9ED6\u9EFA\u9F12\u9F3D\u5126\u5125" +
-                "\u5122\u5124\u5120\u5129\u52F4\u5693\u568C\u568D" +
-                "\u5686\u5684\u5683\u567E\u5682\u567F\u5681\u58D6" +
-                "\u58D4\u58CF\u58D2\u5B2D\u5B25\u5B32\u5B23\u5B2C" +
-                "\u5B27\u5B26\u5B2F\u5B2E\u5B7B\u5BF1\u5BF2\u5DB7" +
-                "\u5E6C\u5E6A\u5FBE\u61C3\u61B5\u61BC\u61E7\u61E0" +
-                "\u61E5\u61E4\u61E8\u61DE\u64EF\u64E9\u64E3\u64EB" +
-                "\u64E4\u64E8\u6581\u6580\u65B6\u65DA\u66D2\u6A8D" +
-                "\u6A96\u6A81\u6AA5\u6A89\u6A9F\u6A9B\u6AA1\u6A9E" +
-                "\u6A87\u6A93\u6A8E\u6A95\u6A83\u6AA8\u6AA4\u6A91" +
-                "\u6A7F\u6AA6\u6A9A\u6A85\u6A8C\u6A92\u6B5B\u6BAD" +
-                "\u6C09\u6FCC\u6FA9\u6FF4\u6FD4\u6FE3\u6FDC\u6FED" +
-                "\u6FE7\u6FE6\u6FDE\u6FF2\u6FDD\u6FE2\u6FE8\u71E1" +
-                "\u71F1\u71E8\u71F2\u71E4\u71F0\u71E2\u7373\u736E" +
-                "\u736F\u7497\u74B2\u74AB\u7490\u74AA\u74AD\u74B1" +
-                "\u74A5\u74AF\u7510\u7511\u7512\u750F\u7584\u7643" +
-                "\u7648\u7649\u7647\u76A4\u76E9\u77B5\u77AB\u77B2" +
-                "\u77B7\u77B6\u77B4\u77B1\u77A8\u77F0\u78F3\u78FD" +
-                "\u7902\u78FB\u78FC\u78FF\u78F2\u7905\u78F9\u78FE" +
-                "\u7904\u79AB\u79A8\u7A5C\u7A5B\u7A56\u7A58\u7A54" +
-                "\u7A5A\u7ABE\u7AC0\u7AC1\u7C05\u7C0F\u7BF2\u7C00" +
-                "\u7BFF\u7BFB\u7C0E\u7BF4\u7C0B\u7BF3\u7C02\u7C09" +
-                "\u7C03\u7C01\u7BF8\u7BFD\u7C06\u7BF0\u7BF1\u7C10" +
-                "\u7C0A\u7CE8\u7E2D\u7E3C\u7E42\u7E33\u9848\u7E38" +
-                "\u7E2A\u7E49\u7E40\u7E47\u7E29\u7E4C\u7E30\u7E3B" +
-                "\u7E36\u7E44\u7E3A\u7F45\u7F7F\u7F7E\u7F7D\u7FF4" +
-                "\u7FF2\u802C\u81BB\u81C4\u81CC\u81CA\u81C5\u81C7" +
-                "\u81BC\u81E9\u825B\u825A\u825C\u8583\u8580\u858F" +
-                "\u85A7\u8595\u85A0\u858B\u85A3\u857B\u85A4\u859A" +
-                "\u859E\u8577\u857C\u8589\u85A1\u857A\u8578\u8557" +
-                "\u858E\u8596\u8586\u858D\u8599\u859D\u8581\u85A2" +
-                "\u8582\u8588\u8585\u8579\u8576\u8598\u8590\u859F" +
-                "\u8668\u87BE\u87AA\u87AD\u87C5\u87B0\u87AC\u87B9" +
-                "\u87B5\u87BC\u87AE\u87C9\u87C3\u87C2\u87CC\u87B7" +
-                "\u87AF\u87C4\u87CA\u87B4\u87B6\u87BF\u87B8\u87BD" +
-                "\u87DE\u87B2\u8935\u8933\u893C\u893E\u8941\u8952" +
-                "\u8937\u8942\u89AD\u89AF\u89AE\u89F2\u89F3\u8B1E" +
-                "\u8B18\u8B16\u8B11\u8B05\u8B0B\u8B22\u8B0F\u8B12" +
-                "\u8B15\u8B07\u8B0D\u8B08\u8B06\u8B1C\u8B13\u8B1A" +
-                "\u8C4F\u8C70\u8C72\u8C71\u8C6F\u8C95\u8C94\u8CF9" +
-                "\u8D6F\u8E4E\u8E4D\u8E53\u8E50\u8E4C\u8E47\u8F43" +
-                "\u8F40\u9085\u907E\u9138\u919A\u91A2\u919B\u9199" +
-                "\u919F\u91A1\u919D\u91A0\u93A1\u9383\u93AF\u9364" +
-                "\u9356\u9347\u937C\u9358\u935C\u9376\u9349\u9350" +
-                "\u9351\u9360\u936D\u938F\u934C\u936A\u9379\u9357" +
-                "\u9355\u9352\u934F\u9371\u9377\u937B\u9361\u935E" +
-                "\u9363\u9367\u934E\u9359\u95C7\u95C0\u95C9\u95C3" +
-                "\u95C5\u95B7\u96AE\u96B0\u96AC\u9720\u971F\u9718" +
-                "\u971D\u9719\u979A\u97A1\u979C\u979E\u979D\u97D5" +
-                "\u97D4\u97F1\u9841\u9844\u984A\u9849\u9845\u9843" +
-                "\u9925\u992B\u992C\u992A\u9933\u9932\u992F\u992D" +
-                "\u9931\u9930\u9998\u99A3\u99A1\u9A02\u99FA\u99F4" +
-                "\u99F7\u99F9\u99F8\u99F6\u99FB\u99FD\u99FE\u99FC" +
-                "\u9A03\u9ABE\u9AFE\u9AFD\u9B01\u9AFC\u9B48\u9B9A" +
-                "\u9BA8\u9B9E\u9B9B\u9BA6\u9BA1\u9BA5\u9BA4\u9B86" +
-                "\u9BA2\u9BA0\u9BAF\u9D33\u9D41\u9D67\u9D36\u9D2E" +
-                "\u9D2F\u9D31\u9D38\u9D30\u9D45\u9D42\u9D43\u9D3E" +
-                "\u9D37\u9D40\u9D3D\u7FF5\u9D2D\u9E8A\u9E89\u9E8D" +
-                "\u9EB0\u9EC8\u9EDA\u9EFB\u9EFF\u9F24\u9F23\u9F22" +
-                "\u9F54\u9FA0\u5131\u512D\u512E\u5698\u569C\u5697" +
-                "\u569A\u569D\u5699\u5970\u5B3C\u5C69\u5C6A\u5DC0" +
-                "\u5E6D\u5E6E\u61D8\u61DF\u61ED\u61EE\u61F1\u61EA" +
-                "\u61F0\u61EB\u61D6\u61E9\u64FF\u6504\u64FD\u64F8" +
-                "\u6501\u6503\u64FC\u6594\u65DB\u66DA\u66DB\u66D8" +
-                "\u6AC5\u6AB9\u6ABD\u6AE1\u6AC6\u6ABA\u6AB6\u6AB7" +
-                "\u6AC7\u6AB4\u6AAD\u6B5E\u6BC9\u6C0B\u7007\u700C" +
-                "\u700D\u7001\u7005\u7014\u700E\u6FFF\u7000\u6FFB" +
-                "\u7026\u6FFC\u6FF7\u700A\u7201\u71FF\u71F9\u7203" +
-                "\u71FD\u7376\u74B8\u74C0\u74B5\u74C1\u74BE\u74B6" +
-                "\u74BB\u74C2\u7514\u7513\u765C\u7664\u7659\u7650" +
-                "\u7653\u7657\u765A\u76A6\u76BD\u76EC\u77C2\u77BA" +
-                "\u790C\u7913\u7914\u7909\u7910\u7912\u7911\u79AD" +
-                "\u79AC\u7A5F\u7C1C\u7C29\u7C19\u7C20\u7C1F\u7C2D" +
-                "\u7C1D\u7C26\u7C28\u7C22\u7C25\u7C30\u7E5C\u7E50" +
-                "\u7E56\u7E63\u7E58\u7E62\u7E5F\u7E51\u7E60\u7E57" +
-                "\u7E53\u7FB5\u7FB3\u7FF7\u7FF8\u8075\u81D1\u81D2" +
-                "\u81D0\u825F\u825E\u85B4\u85C6\u85C0\u85C3\u85C2" +
-                "\u85B3\u85B5\u85BD\u85C7\u85C4\u85BF\u85CB\u85CE" +
-                "\u85C8\u85C5\u85B1\u85B6\u85D2\u8624\u85B8\u85B7" +
-                "\u85BE\u8669\u87E7\u87E6\u87E2\u87DB\u87EB\u87EA" +
-                "\u87E5\u87DF\u87F3\u87E4\u87D4\u87DC\u87D3\u87ED" +
-                "\u87D8\u87E3\u87D7\u87D9\u8801\u87F4\u87E8\u87DD" +
-                "\u8953\u894B\u894F\u894C\u8946\u8950\u8951\u8949" +
-                "\u8B2A\u8B27\u8B23\u8B33\u8B30\u8B35\u8B47\u8B2F" +
-                "\u8B3C\u8B3E\u8B31\u8B25\u8B37\u8B26\u8B36\u8B2E" +
-                "\u8B24\u8B3B\u8B3D\u8B3A\u8C42\u8C75\u8C99\u8C98" +
-                "\u8C97\u8CFE\u8D04\u8D02\u8D00\u8E5C\u8E62\u8E60" +
-                "\u8E57\u8E56\u8E5E\u8E65\u8E67\u8E5B\u8E5A\u8E61" +
-                "\u8E5D\u8E69\u8E54\u8F46\u8F47\u8F48\u8F4B\u9128" +
-                "\u913A\u913B\u913E\u91A8\u91A5\u91A7\u91AF\u91AA" +
-                "\u93B5\u938C\u9392\u93B7\u939B\u939D\u9389\u93A7" +
-                "\u938E\u93AA\u939E\u93A6\u9395\u9388\u9399\u939F" +
-                "\u9380\u938D\u93B1\u9391\u93B2\u93A4\u93A8\u93B4" +
-                "\u93A3\u95D2\u95D3\u95D1\u96B3\u96D7\u96DA\u5DC2" +
-                "\u96DF\u96D8\u96DD\u9723\u9722\u9725\u97AC\u97AE" +
-                "\u97A8\u97AB\u97A4\u97AA\u97A2\u97A5\u97D7\u97D9" +
-                "\u97D6\u97D8\u97FA\u9850\u9851\u9852\u98B8\u9941" +
-                "\u993C\u993A\u9A0F\u9A0B\u9A09\u9A0D\u9A04\u9A11" +
-                "\u9A0A\u9A05\u9A07\u9A06\u9AC0\u9ADC\u9B08\u9B04" +
-                "\u9B05\u9B29\u9B35\u9B4A\u9B4C\u9B4B\u9BC7\u9BC6" +
-                "\u9BC3\u9BBF\u9BC1\u9BB5\u9BB8\u9BD3\u9BB6\u9BC4" +
-                "\u9BB9\u9BBD\u9D5C\u9D53\u9D4F\u9D4A\u9D5B\u9D4B" +
-                "\u9D59\u9D56\u9D4C\u9D57\u9D52\u9D54\u9D5F\u9D58" +
-                "\u9D5A\u9E8E\u9E8C\u9EDF\u9F01\u9F00\u9F16\u9F25" +
-                "\u9F2B\u9F2A\u9F29\u9F28\u9F4C\u9F55\u5134\u5135" +
-                "\u5296\u52F7\u53B4\u56AB\u56AD\u56A6\u56A7\u56AA" +
-                "\u56AC\u58DA\u58DD\u58DB\u5912\u5B3D\u5B3E\u5B3F" +
-                "\u5DC3\u5E70\u5FBF\u61FB\u6507\u6510\u650D\u6509" +
-                "\u650C\u650E\u6584\u65DE\u65DD\u66DE\u6AE7\u6AE0" +
-                "\u6ACC\u6AD1\u6AD9\u6ACB\u6ADF\u6ADC\u6AD0\u6AEB" +
-                "\u6ACF\u6ACD\u6ADE\u6B60\u6BB0\u6C0C\u7019\u7027" +
-                "\u7020\u7016\u702B\u7021\u7022\u7023\u7029\u7017" +
-                "\u7024\u701C\u720C\u720A\u7207\u7202\u7205\u72A5" +
-                "\u72A6\u72A4\u72A3\u72A1\u74CB\u74C5\u74B7\u74C3" +
-                "\u7516\u7660\u77C9\u77CA\u77C4\u77F1\u791D\u791B" +
-                "\u7921\u791C\u7917\u791E\u79B0\u7A67\u7A68\u7C33" +
-                "\u7C3C\u7C39\u7C2C\u7C3B\u7CEC\u7CEA\u7E76\u7E75" +
-                "\u7E78\u7E70\u7E77\u7E6F\u7E7A\u7E72\u7E74\u7E68" +
-                "\u7F4B\u7F4A\u7F83\u7F86\u7FB7\u7FFD\u7FFE\u8078" +
-                "\u81D7\u81D5\u820B\u8264\u8261\u8263\u85EB\u85F1" +
-                "\u85ED\u85D9\u85E1\u85E8\u85DA\u85D7\u85EC\u85F2" +
-                "\u85F8\u85D8\u85DF\u85E3\u85DC\u85D1\u85F0\u85E6" +
-                "\u85EF\u85DE\u85E2\u8800\u87FA\u8803\u87F6\u87F7" +
-                "\u8809\u880C\u880B\u8806\u87FC\u8808\u87FF\u880A" +
-                "\u8802\u8962\u895A\u895B\u8957\u8961\u895C\u8958" +
-                "\u895D\u8959\u8988\u89B7\u89B6\u89F6\u8B50\u8B48" +
-                "\u8B4A\u8B40\u8B53\u8B56\u8B54\u8B4B\u8B55\u8B51" +
-                "\u8B42\u8B52\u8B57\u8C43\u8C77\u8C76\u8C9A\u8D06" +
-                "\u8D07\u8D09\u8DAC\u8DAA\u8DAD\u8DAB\u8E6D\u8E78" +
-                "\u8E73\u8E6A\u8E6F\u8E7B\u8EC2\u8F52\u8F51\u8F4F" +
-                "\u8F50\u8F53\u8FB4\u9140\u913F\u91B0\u91AD\u93DE" +
-                "\u93C7\u93CF\u93C2\u93DA\u93D0\u93F9\u93EC\u93CC" +
-                "\u93D9\u93A9\u93E6\u93CA\u93D4\u93EE\u93E3\u93D5" +
-                "\u93C4\u93CE\u93C0\u93D2\u93A5\u93E7\u957D\u95DA" +
-                "\u95DB\u96E1\u9729\u972B\u972C\u9728\u9726\u97B3" +
-                "\u97B7\u97B6\u97DD\u97DE\u97DF\u985C\u9859\u985D" +
-                "\u9857\u98BF\u98BD\u98BB\u98BE\u9948\u9947\u9943" +
-                "\u99A6\u99A7\u9A1A\u9A15\u9A25\u9A1D\u9A24\u9A1B" +
-                "\u9A22\u9A20\u9A27\u9A23\u9A1E\u9A1C\u9A14\u9AC2" +
-                "\u9B0B\u9B0A\u9B0E\u9B0C\u9B37\u9BEA\u9BEB\u9BE0" +
-                "\u9BDE\u9BE4\u9BE6\u9BE2\u9BF0\u9BD4\u9BD7\u9BEC" +
-                "\u9BDC\u9BD9\u9BE5\u9BD5\u9BE1\u9BDA\u9D77\u9D81" +
-                "\u9D8A\u9D84\u9D88\u9D71\u9D80\u9D78\u9D86\u9D8B" +
-                "\u9D8C\u9D7D\u9D6B\u9D74\u9D75\u9D70\u9D69\u9D85" +
-                "\u9D73\u9D7B\u9D82\u9D6F\u9D79\u9D7F\u9D87\u9D68" +
-                "\u9E94\u9E91\u9EC0\u9EFC\u9F2D\u9F40\u9F41\u9F4D" +
-                "\u9F56\u9F57\u9F58\u5337\u56B2\u56B5\u56B3\u58E3" +
-                "\u5B45\u5DC6\u5DC7\u5EEE\u5EEF\u5FC0\u5FC1\u61F9" +
-                "\u6517\u6516\u6515\u6513\u65DF\u66E8\u66E3\u66E4" +
-                "\u6AF3\u6AF0\u6AEA\u6AE8\u6AF9\u6AF1\u6AEE\u6AEF" +
-                "\u703C\u7035\u702F\u7037\u7034\u7031\u7042\u7038" +
-                "\u703F\u703A\u7039\u702A\u7040\u703B\u7033\u7041" +
-                "\u7213\u7214\u72A8\u737D\u737C\u74BA\u76AB\u76AA" +
-                "\u76BE\u76ED\u77CC\u77CE\u77CF\u77CD\u77F2\u7925" +
-                "\u7923\u7927\u7928\u7924\u7929\u79B2\u7A6E\u7A6C" +
-                "\u7A6D\u7AF7\u7C49\u7C48\u7C4A\u7C47\u7C45\u7CEE" +
-                "\u7E7B\u7E7E\u7E81\u7E80\u7FBA\u7FFF\u8079\u81DB" +
-                "\u81D9\u8268\u8269\u8622\u85FF\u8601\u85FE\u861B" +
-                "\u8600\u85F6\u8604\u8609\u8605\u860C\u85FD\u8819" +
-                "\u8810\u8811\u8817\u8813\u8816\u8963\u8966\u89B9" +
-                "\u89F7\u8B60\u8B6A\u8B5D\u8B68\u8B63\u8B65\u8B67" +
-                "\u8B6D\u8DAE\u8E86\u8E88\u8E84\u8F59\u8F56\u8F57" +
-                "\u8F55\u8F58\u8F5A\u908D\u9143\u9141\u91B7\u91B5" +
-                "\u91B2\u91B3\u940B\u9413\u93FB\u9420\u940F\u9414" +
-                "\u93FE\u9415\u9410\u9428\u9419\u940D\u93F5\u9400" +
-                "\u93F7\u9407\u940E\u9416\u9412\u93FA\u9409\u93F8" +
-                "\u943C\u940A\u93FF\u93FC\u940C\u93F6\u9411\u9406" +
-                "\u95DE\u95E0\u95DF\u972E\u972F\u97B9\u97BB\u97FD" +
-                "\u97FE\u9860\u9862\u9863\u985F\u98C1\u98C2\u9950" +
-                "\u994E\u9959\u994C\u994B\u9953\u9A32\u9A34\u9A31" +
-                "\u9A2C\u9A2A\u9A36\u9A29\u9A2E\u9A38\u9A2D\u9AC7" +
-                "\u9ACA\u9AC6\u9B10\u9B12\u9B11\u9C0B\u9C08\u9BF7" +
-                "\u9C05\u9C12\u9BF8\u9C40\u9C07\u9C0E\u9C06\u9C17" +
-                "\u9C14\u9C09\u9D9F\u9D99\u9DA4\u9D9D\u9D92\u9D98" +
-                "\u9D90\u9D9B\u9DA0\u9D94\u9D9C\u9DAA\u9D97\u9DA1" +
-                "\u9D9A\u9DA2\u9DA8\u9D9E\u9DA3\u9DBF\u9DA9\u9D96" +
-                "\u9DA6\u9DA7\u9E99\u9E9B\u9E9A\u9EE5\u9EE4\u9EE7" +
-                "\u9EE6\u9F30\u9F2E\u9F5B\u9F60\u9F5E\u9F5D\u9F59" +
-                "\u9F91\u513A\u5139\u5298\u5297\u56C3\u56BD\u56BE" +
-                "\u5B48\u5B47\u5DCB\u5DCF\u5EF1\u61FD\u651B\u6B02" +
-                "\u6AFC\u6B03\u6AF8\u6B00\u7043\u7044\u704A\u7048" +
-                "\u7049\u7045\u7046\u721D\u721A\u7219\u737E\u7517" +
-                "\u766A\u77D0\u792D\u7931\u792F\u7C54\u7C53\u7CF2" +
-                "\u7E8A\u7E87\u7E88\u7E8B\u7E86\u7E8D\u7F4D\u7FBB" +
-                "\u8030\u81DD\u8618\u862A\u8626\u861F\u8623\u861C" +
-                "\u8619\u8627\u862E\u8621\u8620\u8629\u861E\u8625" +
-                "\u8829\u881D\u881B\u8820\u8824\u881C\u882B\u884A" +
-                "\u896D\u8969\u896E\u896B\u89FA\u8B79\u8B78\u8B45" +
-                "\u8B7A\u8B7B\u8D10\u8D14\u8DAF\u8E8E\u8E8C\u8F5E" +
-                "\u8F5B\u8F5D\u9146\u9144\u9145\u91B9\u943F\u943B" +
-                "\u9436\u9429\u943D\u9430\u9439\u942A\u9437\u942C" +
-                "\u9440\u9431\u95E5\u95E4\u95E3\u9735\u973A\u97BF" +
-                "\u97E1\u9864\u98C9\u98C6\u98C0\u9958\u9956\u9A39" +
-                "\u9A3D\u9A46\u9A44\u9A42\u9A41\u9A3A\u9A3F\u9ACD" +
-                "\u9B15\u9B17\u9B18\u9B16\u9B3A\u9B52\u9C2B\u9C1D" +
-                "\u9C1C\u9C2C\u9C23\u9C28\u9C29\u9C24\u9C21\u9DB7" +
-                "\u9DB6\u9DBC\u9DC1\u9DC7\u9DCA\u9DCF\u9DBE\u9DC5" +
-                "\u9DC3\u9DBB\u9DB5\u9DCE\u9DB9\u9DBA\u9DAC\u9DC8" +
-                "\u9DB1\u9DAD\u9DCC\u9DB3\u9DCD\u9DB2\u9E7A\u9E9C" +
-                "\u9EEB\u9EEE\u9EED\u9F1B\u9F18\u9F1A\u9F31\u9F4E" +
-                "\u9F65\u9F64\u9F92\u4EB9\u56C6\u56C5\u56CB\u5971" +
-                "\u5B4B\u5B4C\u5DD5\u5DD1\u5EF2\u6521\u6520\u6526" +
-                "\u6522\u6B0B\u6B08\u6B09\u6C0D\u7055\u7056\u7057" +
-                "\u7052\u721E\u721F\u72A9\u737F\u74D8\u74D5\u74D9" +
-                "\u74D7\u766D\u76AD\u7935\u79B4\u7A70\u7A71\u7C57" +
-                "\u7C5C\u7C59\u7C5B\u7C5A\u7CF4\u7CF1\u7E91\u7F4F" +
-                "\u7F87\u81DE\u826B\u8634\u8635\u8633\u862C\u8632" +
-                "\u8636\u882C\u8828\u8826\u882A\u8825\u8971\u89BF" +
-                "\u89BE\u89FB\u8B7E\u8B84\u8B82\u8B86\u8B85\u8B7F" +
-                "\u8D15\u8E95\u8E94\u8E9A\u8E92\u8E90\u8E96\u8E97" +
-                "\u8F60\u8F62\u9147\u944C\u9450\u944A\u944B\u944F" +
-                "\u9447\u9445\u9448\u9449\u9446\u973F\u97E3\u986A" +
-                "\u9869\u98CB\u9954\u995B\u9A4E\u9A53\u9A54\u9A4C" +
-                "\u9A4F\u9A48\u9A4A\u9A49\u9A52\u9A50\u9AD0\u9B19" +
-                "\u9B2B\u9B3B\u9B56\u9B55\u9C46\u9C48\u9C3F\u9C44" +
-                "\u9C39\u9C33\u9C41\u9C3C\u9C37\u9C34\u9C32\u9C3D" +
-                "\u9C36\u9DDB\u9DD2\u9DDE\u9DDA\u9DCB\u9DD0\u9DDC" +
-                "\u9DD1\u9DDF\u9DE9\u9DD9\u9DD8\u9DD6\u9DF5\u9DD5" +
-                "\u9DDD\u9EB6\u9EF0\u9F35\u9F33\u9F32\u9F42\u9F6B" +
-                "\u9F95\u9FA2\u513D\u5299\u58E8\u58E7\u5972\u5B4D" +
-                "\u5DD8\u882F\u5F4F\u6201\u6203\u6204\u6529\u6525" +
-                "\u6596\u66EB\u6B11\u6B12\u6B0F\u6BCA\u705B\u705A" +
-                "\u7222\u7382\u7381\u7383\u7670\u77D4\u7C67\u7C66" +
-                "\u7E95\u826C\u863A\u8640\u8639\u863C\u8631\u863B" +
-                "\u863E\u8830\u8832\u882E\u8833\u8976\u8974\u8973" +
-                "\u89FE\u8B8C\u8B8E\u8B8B\u8B88\u8C45\u8D19\u8E98" +
-                "\u8F64\u8F63\u91BC\u9462\u9455\u945D\u9457\u945E" +
-                "\u97C4\u97C5\u9800\u9A56\u9A59\u9B1E\u9B1F\u9B20" +
-                "\u9C52\u9C58\u9C50\u9C4A\u9C4D\u9C4B\u9C55\u9C59" +
-                "\u9C4C\u9C4E\u9DFB\u9DF7\u9DEF\u9DE3\u9DEB\u9DF8" +
-                "\u9DE4\u9DF6\u9DE1\u9DEE\u9DE6\u9DF2\u9DF0\u9DE2" +
-                "\u9DEC\u9DF4\u9DF3\u9DE8\u9DED\u9EC2\u9ED0\u9EF2" +
-                "\u9EF3\u9F06\u9F1C\u9F38\u9F37\u9F36\u9F43\u9F4F" +
-                "\u9F71\u9F70\u9F6E\u9F6F\u56D3\u56CD\u5B4E\u5C6D" +
-                "\u652D\u66ED\u66EE\u6B13\u705F\u7061\u705D\u7060" +
-                "\u7223\u74DB\u74E5\u77D5\u7938\u79B7\u79B6\u7C6A" +
-                "\u7E97\u7F89\u826D\u8643\u8838\u8837\u8835\u884B" +
-                "\u8B94\u8B95\u8E9E\u8E9F\u8EA0\u8E9D\u91BE\u91BD" +
-                "\u91C2\u946B\u9468\u9469\u96E5\u9746\u9743\u9747" +
-                "\u97C7\u97E5\u9A5E\u9AD5\u9B59\u9C63\u9C67\u9C66" +
-                "\u9C62\u9C5E\u9C60\u9E02\u9DFE\u9E07\u9E03\u9E06" +
-                "\u9E05\u9E00\u9E01\u9E09\u9DFF\u9DFD\u9E04\u9EA0" +
-                "\u9F1E\u9F46\u9F74\u9F75\u9F76\u56D4\u652E\u65B8" +
-                "\u6B18\u6B19\u6B17\u6B1A\u7062\u7226\u72AA\u77D8" +
-                "\u77D9\u7939\u7C69\u7C6B\u7CF6\u7E9A\u7E98\u7E9B" +
-                "\u7E99\u81E0\u81E1\u8646\u8647\u8648\u8979\u897A" +
-                "\u897C\u897B\u89FF\u8B98\u8B99\u8EA5\u8EA4\u8EA3" +
-                "\u946E\u946D\u946F\u9471\u9473\u9749\u9872\u995F" +
-                "\u9C68\u9C6E\u9C6D\u9E0B\u9E0D\u9E10\u9E0F\u9E12" +
-                "\u9E11\u9EA1\u9EF5\u9F09\u9F47\u9F78\u9F7B\u9F7A" +
-                "\u9F79\u571E\u7066\u7C6F\u883C\u8DB2\u8EA6\u91C3" +
-                "\u9474\u9478\u9476\u9475\u9A60\u9B2E\u9C74\u9C73" +
-                "\u9C71\u9C75\u9E14\u9E13\u9EF6\u9F0A\u9FA4\u7068" +
-                "\u7065\u7CF7\u866A\u883E\u883D\u883F\u8B9E\u8C9C" +
-                "\u8EA9\u8EC9\u974B\u9873\u9874\u98CC\u9961\u99AB" +
-                "\u9A64\u9A66\u9A67\u9B24\u9E15\u9E17\u9F48\u6207" +
-                "\u6B1E\u7227\u864C\u8EA8\u9482\u9480\u9481\u9A69" +
-                "\u9A68\u9E19\u864B\u8B9F\u9483\u9C79\u9EB7\u7675" +
-                "\u9A6B\u9C7A\u9E1D\u7069\u706A\u7229\u9EA4\u9F7E" +
-                "\u9F49\u9F98\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD"
-                ;
-            mappingTableG2ac =
-                "\uE000\uE001\uE002\uE003\uE004\uE005\uE006\uE007" +
-                "\uE008\uE009\uE00A\uE00B\uE00C\uE00D\uE00E\uE00F" +
-                "\uE010\uE011\uE012\uE013\uE014\uE015\uE016\uE017" +
-                "\uE018\uE019\uE01A\uE01B\uE01C\uE01D\uE01E\uE01F" +
-                "\uE020\uE021\uE022\uE023\uE024\uE025\uE026\uE027" +
-                "\uE028\uE029\uE02A\uE02B\uE02C\uE02D\uE02E\uE02F" +
-                "\uE030\uE031\uE032\uE033\uE034\uE035\uE036\uE037" +
-                "\uE038\uE039\uE03A\uE03B\uE03C\uE03D\uE03E\uE03F" +
-                "\uE040\uE041\uE042\uE043\uE044\uE045\uE046\uE047" +
-                "\uE048\uE049\uE04A\uE04B\uE04C\uE04D\uE04E\uE04F" +
-                "\uE050\uE051\uE052\uE053\uE054\uE055\uE056\uE057" +
-                "\uE058\uE059\uE05A\uE05B\uE05C\uE05D\uE05E\uE05F" +
-                "\uE060\uE061\uE062\uE063\uE064\uE065\uE066\uE067" +
-                "\uE068\uE069\uE06A\uE06B\uE06C\uE06D\uE06E\uE06F" +
-                "\uE070\uE071\uE072\uE073\uE074\uE075\uE076\uE077" +
-                "\uE078\uE079\uE07A\uE07B\uE07C\uE07D\uE07E\uE07F" +
-                "\uE080\uE081\uE082\uE083\uE084\uE085\uE086\uE087" +
-                "\uE088\uE089\uE08A\uE08B\uE08C\uE08D\uE08E\uE08F" +
-                "\uE090\uE091\uE092\uE093\uE094\uE095\uE096\uE097" +
-                "\uE098\uE099\uE09A\uE09B\uE09C\uE09D\uE09E\uE09F" +
-                "\uE0A0\uE0A1\uE0A2\uE0A3\uE0A4\uE0A5\uE0A6\uE0A7" +
-                "\uE0A8\uE0A9\uE0AA\uE0AB\uE0AC\uE0AD\uE0AE\uE0AF" +
-                "\uE0B0\uE0B1\uE0B2\uE0B3\uE0B4\uE0B5\uE0B6\uE0B7" +
-                "\uE0B8\uE0B9\uE0BA\uE0BB\uE0BC\uE0BD\uE0BE\uE0BF" +
-                "\uE0C0\uE0C1\uE0C2\uE0C3\uE0C4\uE0C5\uE0C6\uE0C7" +
-                "\uE0C8\uE0C9\uE0CA\uE0CB\uE0CC\uE0CD\uE0CE\uE0CF" +
-                "\uE0D0\uE0D1\uE0D2\uE0D3\uE0D4\uE0D5\uE0D6\uE0D7" +
-                "\uE0D8\uE0D9\uE0DA\uE0DB\uE0DC\uE0DD\uE0DE\uE0DF" +
-                "\uE0E0\uE0E1\uE0E2\uE0E3\uE0E4\uE0E5\uE0E6\uE0E7" +
-                "\uE0E8\uE0E9\uE0EA\uE0EB\uE0EC\uE0ED\uE0EE\uE0EF" +
-                "\uE0F0\uE0F1\uE0F2\uE0F3\uE0F4\uE0F5\uE0F6\uE0F7" +
-                "\uE0F8\uE0F9\uE0FA\uE0FB\uE0FC\uE0FD\uE0FE\uE0FF" +
-                "\uE100\uE101\uE102\uE103\uE104\uE105\uE106\uE107" +
-                "\uE108\uE109\uE10A\uE10B\uE10C\uE10D\uE10E\uE10F" +
-                "\uE110\uE111\uE112\uE113\uE114\uE115\uE116\uE117" +
-                "\uE118\uE119\uE11A\uE11B\uE11C\uE11D\uE11E\uE11F" +
-                "\uE120\uE121\uE122\uE123\uE124\uE125\uE126\uE127" +
-                "\uE128\uE129\uE12A\uE12B\uE12C\uE12D\uE12E\uE12F" +
-                "\uE130\uE131\uE132\uE133\uE134\uE135\uE136\uE137" +
-                "\uE138\uE139\uE13A\uE13B\uE13C\uE13D\uE13E\uE13F" +
-                "\uE140\uE141\uE142\uE143\uE144\uE145\uE146\uE147" +
-                "\uE148\uE149\uE14A\uE14B\uE14C\uE14D\uE14E\uE14F" +
-                "\uE150\uE151\uE152\uE153\uE154\uE155\uE156\uE157" +
-                "\uE158\uE159\uE15A\uE15B\uE15C\uE15D\uE15E\uE15F" +
-                "\uE160\uE161\uE162\uE163\uE164\uE165\uE166\uE167" +
-                "\uE168\uE169\uE16A\uE16B\uE16C\uE16D\uE16E\uE16F" +
-                "\uE170\uE171\uE172\uE173\uE174\uE175\uE176\uE177" +
-                "\uE178\uE179\uE17A\uE17B\uE17C\uE17D\uE17E\uE17F" +
-                "\uE180\uE181\uE182\uE183\uE184\uE185\uE186\uE187" +
-                "\uE188\uE189\uE18A\uE18B\uE18C\uE18D\uE18E\uE18F" +
-                "\uE190\uE191\uE192\uE193\uE194\uE195\uE196\uE197" +
-                "\uE198\uE199\uE19A\uE19B\uE19C\uE19D\uE19E\uE19F" +
-                "\uE1A0\uE1A1\uE1A2\uE1A3\uE1A4\uE1A5\uE1A6\uE1A7" +
-                "\uE1A8\uE1A9\uE1AA\uE1AB\uE1AC\uE1AD\uE1AE\uE1AF" +
-                "\uE1B0\uE1B1\uE1B2\uE1B3\uE1B4\uE1B5\uE1B6\uE1B7" +
-                "\uE1B8\uE1B9\uE1BA\uE1BB\uE1BC\uE1BD\uE1BE\uE1BF" +
-                "\uE1C0\uE1C1\uE1C2\uE1C3\uE1C4\uE1C5\uE1C6\uE1C7" +
-                "\uE1C8\uE1C9\uE1CA\uE1CB\uE1CC\uE1CD\uE1CE\uE1CF" +
-                "\uE1D0\uE1D1\uE1D2\uE1D3\uE1D4\uE1D5\uE1D6\uE1D7" +
-                "\uE1D8\uE1D9\uE1DA\uE1DB\uE1DC\uE1DD\uE1DE\uE1DF" +
-                "\uE1E0\uE1E1\uE1E2\uE1E3\uE1E4\uE1E5\uE1E6\uE1E7" +
-                "\uE1E8\uE1E9\uE1EA\uE1EB\uE1EC\uE1ED\uE1EE\uE1EF" +
-                "\uE1F0\uE1F1\uE1F2\uE1F3\uE1F4\uE1F5\uE1F6\uE1F7" +
-                "\uE1F8\uE1F9\uE1FA\uE1FB\uE1FC\uE1FD\uE1FE\uE1FF" +
-                "\uE200\uE201\uE202\uE203\uE204\uE205\uE206\uE207" +
-                "\uE208\uE209\uE20A\uE20B\uE20C\uE20D\uE20E\uE20F" +
-                "\uE210\uE211\uE212\uE213\uE214\uE215\uE216\uE217" +
-                "\uE218\uE219\uE21A\uE21B\uE21C\uE21D\uE21E\uE21F" +
-                "\uE220\uE221\uE222\uE223\uE224\uE225\uE226\uE227" +
-                "\uE228\uE229\uE22A\uE22B\uE22C\uE22D\uE22E\uE22F" +
-                "\uE230\uE231\uE232\uE233\uE234\uE235\uE236\uE237" +
-                "\uE238\uE239\uE23A\uE23B\uE23C\uE23D\uE23E\uE23F" +
-                "\uE240\uE241\uE242\uE243\uE244\uE245\uE246\uE247" +
-                "\uE248\uE249\uE24A\uE24B\uE24C\uE24D\uE24E\uE24F" +
-                "\uE250\uE251\uE252\uE253\uE254\uE255\uE256\uE257" +
-                "\uE258\uE259\uE25A\uE25B\uE25C\uE25D\uE25E\uE25F" +
-                "\uE260\uE261\uE262\uE263\uE264\uE265\uE266\uE267" +
-                "\uE268\uE269\uE26A\uE26B\uE26C\uE26D\uE26E\uE26F" +
-                "\uE270\uE271\uE272\uE273\uE274\uE275\uE276\uE277" +
-                "\uE278\uE279\uE27A\uE27B\uE27C\uE27D\uE27E\uE27F" +
-                "\uE280\uE281\uE282\uE283\uE284\uE285\uE286\uE287" +
-                "\uE288\uE289\uE28A\uE28B\uE28C\uE28D\uE28E\uE28F" +
-                "\uE290\uE291\uE292\uE293\uE294\uE295\uE296\uE297" +
-                "\uE298\uE299\uE29A\uE29B\uE29C\uE29D\uE29E\uE29F" +
-                "\uE2A0\uE2A1\uE2A2\uE2A3\uE2A4\uE2A5\uE2A6\uE2A7" +
-                "\uE2A8\uE2A9\uE2AA\uE2AB\uE2AC\uE2AD\uE2AE\uE2AF" +
-                "\uE2B0\uE2B1\uE2B2\uE2B3\uE2B4\uE2B5\uE2B6\uE2B7" +
-                "\uE2B8\uE2B9\uE2BA\uE2BB\uE2BC\uE2BD\uE2BE\uE2BF" +
-                "\uE2C0\uE2C1\uE2C2\uE2C3\uE2C4\uE2C5\uE2C6\uE2C7" +
-                "\uE2C8\uE2C9\uE2CA\uE2CB\uE2CC\uE2CD\uE2CE\uE2CF" +
-                "\uE2D0\uE2D1\uE2D2\uE2D3\uE2D4\uE2D5\uE2D6\uE2D7" +
-                "\uE2D8\uE2D9\uE2DA\uE2DB\uE2DC\uE2DD\uE2DE\uE2DF" +
-                "\uE2E0\uE2E1\uE2E2\uE2E3\uE2E4\uE2E5\uE2E6\uE2E7" +
-                "\uE2E8\uE2E9\uE2EA\uE2EB\uE2EC\uE2ED\uE2EE\uE2EF" +
-                "\uE2F0\uE2F1\uE2F2\uE2F3\uE2F4\uE2F5\uE2F6\uE2F7" +
-                "\uE2F8\uE2F9\uE2FA\uE2FB\uE2FC\uE2FD\uE2FE\uE2FF" +
-                "\uE300\uE301\uE302\uE303\uE304\uE305\uE306\uE307" +
-                "\uE308\uE309\uE30A\uE30B\uE30C\uE30D\uE30E\uE30F" +
-                "\uE310\uE311\uE312\uE313\uE314\uE315\uE316\uE317" +
-                "\uE318\uE319\uE31A\uE31B\uE31C\uE31D\uE31E\uE31F" +
-                "\uE320\uE321\uE322\uE323\uE324\uE325\uE326\uE327" +
-                "\uE328\uE329\uE32A\uE32B\uE32C\uE32D\uE32E\uE32F" +
-                "\uE330\uE331\uE332\uE333\uE334\uE335\uE336\uE337" +
-                "\uE338\uE339\uE33A\uE33B\uE33C\uE33D\uE33E\uE33F" +
-                "\uE340\uE341\uE342\uE343\uE344\uE345\uE346\uE347" +
-                "\uE348\uE349\uE34A\uE34B\uE34C\uE34D\uE34E\uE34F" +
-                "\uE350\uE351\uE352\uE353\uE354\uE355\uE356\uE357" +
-                "\uE358\uE359\uE35A\uE35B\uE35C\uE35D\uE35E\uE35F" +
-                "\uE360\uE361\uE362\uE363\uE364\uE365\uE366\uE367" +
-                "\uE368\uE369\uE36A\uE36B\uE36C\uE36D\uE36E\uE36F" +
-                "\uE370\uE371\uE372\uE373\uE374\uE375\uE376\uE377" +
-                "\uE378\uE379\uE37A\uE37B\uE37C\uE37D\uE37E\uE37F" +
-                "\uE380\uE381\uE382\uE383\uE384\uE385\uE386\uE387" +
-                "\uE388\uE389\uE38A\uE38B\uE38C\uE38D\uE38E\uE38F" +
-                "\uE390\uE391\uE392\uE393\uE394\uE395\uE396\uE397" +
-                "\uE398\uE399\uE39A\uE39B\uE39C\uE39D\uE39E\uE39F" +
-                "\uE3A0\uE3A1\uE3A2\uE3A3\uE3A4\uE3A5\uE3A6\uE3A7" +
-                "\uE3A8\uE3A9\uE3AA\uE3AB\uE3AC\uE3AD\uE3AE\uE3AF" +
-                "\uE3B0\uE3B1\uE3B2\uE3B3\uE3B4\uE3B5\uE3B6\uE3B7" +
-                "\uE3B8\uE3B9\uE3BA\uE3BB\uE3BC\uE3BD\uE3BE\uE3BF" +
-                "\uE3C0\uE3C1\uE3C2\uE3C3\uE3C4\uE3C5\uE3C6\uE3C7" +
-                "\uE3C8\uE3C9\uE3CA\uE3CB\uE3CC\uE3CD\uE3CE\uE3CF" +
-                "\uE3D0\uE3D1\uE3D2\uE3D3\uE3D4\uE3D5\uE3D6\uE3D7" +
-                "\uE3D8\uE3D9\uE3DA\uE3DB\uE3DC\uE3DD\uE3DE\uE3DF" +
-                "\uE3E0\uE3E1\uE3E2\uE3E3\uE3E4\uE3E5\uE3E6\uE3E7" +
-                "\uE3E8\uE3E9\uE3EA\uE3EB\uE3EC\uE3ED\uE3EE\uE3EF" +
-                "\uE3F0\uE3F1\uE3F2\uE3F3\uE3F4\uE3F5\uE3F6\uE3F7" +
-                "\uE3F8\uE3F9\uE3FA\uE3FB\uE3FC\uE3FD\uE3FE\uE3FF" +
-                "\uE400\uE401\uE402\uE403\uE404\uE405\uE406\uE407" +
-                "\uE408\uE409\uE40A\uE40B\uE40C\uE40D\uE40E\uE40F" +
-                "\uE410\uE411\uE412\uE413\uE414\uE415\uE416\uE417" +
-                "\uE418\uE419\uE41A\uE41B\uE41C\uE41D\uE41E\uE41F" +
-                "\uE420\uE421\uE422\uE423\uE424\uE425\uE426\uE427" +
-                "\uE428\uE429\uE42A\uE42B\uE42C\uE42D\uE42E\uE42F" +
-                "\uE430\uE431\uE432\uE433\uE434\uE435\uE436\uE437" +
-                "\uE438\uE439\uE43A\uE43B\uE43C\uE43D\uE43E\uE43F" +
-                "\uE440\uE441\uE442\uE443\uE444\uE445\uE446\uE447" +
-                "\uE448\uE449\uE44A\uE44B\uE44C\uE44D\uE44E\uE44F" +
-                "\uE450\uE451\uE452\uE453\uE454\uE455\uE456\uE457" +
-                "\uE458\uE459\uE45A\uE45B\uE45C\uE45D\uE45E\uE45F" +
-                "\uE460\uE461\uE462\uE463\uE464\uE465\uE466\uE467" +
-                "\uE468\uE469\uE46A\uE46B\uE46C\uE46D\uE46E\uE46F" +
-                "\uE470\uE471\uE472\uE473\uE474\uE475\uE476\uE477" +
-                "\uE478\uE479\uE47A\uE47B\uE47C\uE47D\uE47E\uE47F" +
-                "\uE480\uE481\uE482\uE483\uE484\uE485\uE486\uE487" +
-                "\uE488\uE489\uE48A\uE48B\uE48C\uE48D\uE48E\uE48F" +
-                "\uE490\uE491\uE492\uE493\uE494\uE495\uE496\uE497" +
-                "\uE498\uE499\uE49A\uE49B\uE49C\uE49D\uE49E\uE49F" +
-                "\uE4A0\uE4A1\uE4A2\uE4A3\uE4A4\uE4A5\uE4A6\uE4A7" +
-                "\uE4A8\uE4A9\uE4AA\uE4AB\uE4AC\uE4AD\uE4AE\uE4AF" +
-                "\uE4B0\uE4B1\uE4B2\uE4B3\uE4B4\uE4B5\uE4B6\uE4B7" +
-                "\uE4B8\uE4B9\uE4BA\uE4BB\uE4BC\uE4BD\uE4BE\uE4BF" +
-                "\uE4C0\uE4C1\uE4C2\uE4C3\uE4C4\uE4C5\uE4C6\uE4C7" +
-                "\uE4C8\uE4C9\uE4CA\uE4CB\uE4CC\uE4CD\uE4CE\uE4CF" +
-                "\uE4D0\uE4D1\uE4D2\uE4D3\uE4D4\uE4D5\uE4D6\uE4D7" +
-                "\uE4D8\uE4D9\uE4DA\uE4DB\uE4DC\uE4DD\uE4DE\uE4DF" +
-                "\uE4E0\uE4E1\uE4E2\uE4E3\uE4E4\uE4E5\uE4E6\uE4E7" +
-                "\uE4E8\uE4E9\uE4EA\uE4EB\uE4EC\uE4ED\uE4EE\uE4EF" +
-                "\uE4F0\uE4F1\uE4F2\uE4F3\uE4F4\uE4F5\uE4F6\uE4F7" +
-                "\uE4F8\uE4F9\uE4FA\uE4FB\uE4FC\uE4FD\uE4FE\uE4FF" +
-                "\uE500\uE501\uE502\uE503\uE504\uE505\uE506\uE507" +
-                "\uE508\uE509\uE50A\uE50B\uE50C\uE50D\uE50E\uE50F" +
-                "\uE510\uE511\uE512\uE513\uE514\uE515\uE516\uE517" +
-                "\uE518\uE519\uE51A\uE51B\uE51C\uE51D\uE51E\uE51F" +
-                "\uE520\uE521\uE522\uE523\uE524\uE525\uE526\uE527" +
-                "\uE528\uE529\uE52A\uE52B\uE52C\uE52D\uE52E\uE52F" +
-                "\uE530\uE531\uE532\uE533\uE534\uE535\uE536\uE537" +
-                "\uE538\uE539\uE53A\uE53B\uE53C\uE53D\uE53E\uE53F" +
-                "\uE540\uE541\uE542\uE543\uE544\uE545\uE546\uE547" +
-                "\uE548\uE549\uE54A\uE54B\uE54C\uE54D\uE54E\uE54F" +
-                "\uE550\uE551\uE552\uE553\uE554\uE555\uE556\uE557" +
-                "\uE558\uE559\uE55A\uE55B\uE55C\uE55D\uE55E\uE55F" +
-                "\uE560\uE561\uE562\uE563\uE564\uE565\uE566\uE567" +
-                "\uE568\uE569\uE56A\uE56B\uE56C\uE56D\uE56E\uE56F" +
-                "\uE570\uE571\uE572\uE573\uE574\uE575\uE576\uE577" +
-                "\uE578\uE579\uE57A\uE57B\uE57C\uE57D\uE57E\uE57F" +
-                "\uE580\uE581\uE582\uE583\uE584\uE585\uE586\uE587" +
-                "\uE588\uE589\uE58A\uE58B\uE58C\uE58D\uE58E\uE58F" +
-                "\uE590\uE591\uE592\uE593\uE594\uE595\uE596\uE597" +
-                "\uE598\uE599\uE59A\uE59B\uE59C\uE59D\uE59E\uE59F" +
-                "\uE5A0\uE5A1\uE5A2\uE5A3\uE5A4\uE5A5\uE5A6\uE5A7" +
-                "\uE5A8\uE5A9\uE5AA\uE5AB\uE5AC\uE5AD\uE5AE\uE5AF" +
-                "\uE5B0\uE5B1\uE5B2\uE5B3\uE5B4\uE5B5\uE5B6\uE5B7" +
-                "\uE5B8\uE5B9\uE5BA\uE5BB\uE5BC\uE5BD\uE5BE\uE5BF" +
-                "\uE5C0\uE5C1\uE5C2\uE5C3\uE5C4\uE5C5\uE5C6\uE5C7" +
-                "\uE5C8\uE5C9\uE5CA\uE5CB\uE5CC\uE5CD\uE5CE\uE5CF" +
-                "\uE5D0\uE5D1\uE5D2\uE5D3\uE5D4\uE5D5\uE5D6\uE5D7" +
-                "\uE5D8\uE5D9\uE5DA\uE5DB\uE5DC\uE5DD\uE5DE\uE5DF" +
-                "\uE5E0\uE5E1\uE5E2\uE5E3\uE5E4\uE5E5\uE5E6\uE5E7" +
-                "\uE5E8\uE5E9\uE5EA\uE5EB\uE5EC\uE5ED\uE5EE\uE5EF" +
-                "\uE5F0\uE5F1\uE5F2\uE5F3\uE5F4\uE5F5\uE5F6\uE5F7" +
-                "\uE5F8\uE5F9\uE5FA\uE5FB\uE5FC\uE5FD\uE5FE\uE5FF" +
-                "\uE600\uE601\uE602\uE603\uE604\uE605\uE606\uE607" +
-                "\uE608\uE609\uE60A\uE60B\uE60C\uE60D\uE60E\uE60F" +
-                "\uE610\uE611\uE612\uE613\uE614\uE615\uE616\uE617" +
-                "\uE618\uE619\uE61A\uE61B\uE61C\uE61D\uE61E\uE61F" +
-                "\uE620\uE621\uE622\uE623\uE624\uE625\uE626\uE627" +
-                "\uE628\uE629\uE62A\uE62B\uE62C\uE62D\uE62E\uE62F" +
-                "\uE630\uE631\uE632\uE633\uE634\uE635\uE636\uE637" +
-                "\uE638\uE639\uE63A\uE63B\uE63C\uE63D\uE63E\uE63F" +
-                "\uE640\uE641\uE642\uE643\uE644\uE645\uE646\uE647" +
-                "\uE648\uE649\uE64A\uE64B\uE64C\uE64D\uE64E\uE64F" +
-                "\uE650\uE651\uE652\uE653\uE654\uE655\uE656\uE657" +
-                "\uE658\uE659\uE65A\uE65B\uE65C\uE65D\uE65E\uE65F" +
-                "\uE660\uE661\uE662\uE663\uE664\uE665\uE666\uE667" +
-                "\uE668\uE669\uE66A\uE66B\uE66C\uE66D\uE66E\uE66F" +
-                "\uE670\uE671\uE672\uE673\uE674\uE675\uE676\uE677" +
-                "\uE678\uE679\uE67A\uE67B\uE67C\uE67D\uE67E\uE67F" +
-                "\uE680\uE681\uE682\uE683\uE684\uE685\uE686\uE687" +
-                "\uE688\uE689\uE68A\uE68B\uE68C\uE68D\uE68E\uE68F" +
-                "\uE690\uE691\uE692\uE693\uE694\uE695\uE696\uE697" +
-                "\uE698\uE699\uE69A\uE69B\uE69C\uE69D\uE69E\uE69F" +
-                "\uE6A0\uE6A1\uE6A2\uE6A3\uE6A4\uE6A5\uE6A6\uE6A7" +
-                "\uE6A8\uE6A9\uE6AA\uE6AB\uE6AC\uE6AD\uE6AE\uE6AF" +
-                "\uE6B0\uE6B1\uE6B2\uE6B3\uE6B4\uE6B5\uE6B6\uE6B7" +
-                "\uE6B8\uE6B9\uE6BA\uE6BB\uE6BC\uE6BD\uE6BE\uE6BF" +
-                "\uE6C0\uE6C1\uE6C2\uE6C3\uE6C4\uE6C5\uE6C6\uE6C7" +
-                "\uE6C8\uE6C9\uE6CA\uE6CB\uE6CC\uE6CD\uE6CE\uE6CF" +
-                "\uE6D0\uE6D1\uE6D2\uE6D3\uE6D4\uE6D5\uE6D6\uE6D7" +
-                "\uE6D8\uE6D9\uE6DA\uE6DB\uE6DC\uE6DD\uE6DE\uE6DF" +
-                "\uE6E0\uE6E1\uE6E2\uE6E3\uE6E4\uE6E5\uE6E6\uE6E7" +
-                "\uE6E8\uE6E9\uE6EA\uE6EB\uE6EC\uE6ED\uE6EE\uE6EF" +
-                "\uE6F0\uE6F1\uE6F2\uE6F3\uE6F4\uE6F5\uE6F6\uE6F7" +
-                "\uE6F8\uE6F9\uE6FA\uE6FB\uE6FC\uE6FD\uE6FE\uE6FF" +
-                "\uE700\uE701\uE702\uE703\uE704\uE705\uE706\uE707" +
-                "\uE708\uE709\uE70A\uE70B\uE70C\uE70D\uE70E\uE70F" +
-                "\uE710\uE711\uE712\uE713\uE714\uE715\uE716\uE717" +
-                "\uE718\uE719\uE71A\uE71B\uE71C\uE71D\uE71E\uE71F" +
-                "\uE720\uE721\uE722\uE723\uE724\uE725\uE726\uE727" +
-                "\uE728\uE729\uE72A\uE72B\uE72C\uE72D\uE72E\uE72F" +
-                "\uE730\uE731\uE732\uE733\uE734\uE735\uE736\uE737" +
-                "\uE738\uE739\uE73A\uE73B\uE73C\uE73D\uE73E\uE73F" +
-                "\uE740\uE741\uE742\uE743\uE744\uE745\uE746\uE747" +
-                "\uE748\uE749\uE74A\uE74B\uE74C\uE74D\uE74E\uE74F" +
-                "\uE750\uE751\uE752\uE753\uE754\uE755\uE756\uE757" +
-                "\uE758\uE759\uE75A\uE75B\uE75C\uE75D\uE75E\uE75F" +
-                "\uE760\uE761\uE762\uE763\uE764\uE765\uE766\uE767" +
-                "\uE768\uE769\uE76A\uE76B\uE76C\uE76D\uE76E\uE76F" +
-                "\uE770\uE771\uE772\uE773\uE774\uE775\uE776\uE777" +
-                "\uE778\uE779\uE77A\uE77B\uE77C\uE77D\uE77E\uE77F" +
-                "\uE780\uE781\uE782\uE783\uE784\uE785\uE786\uE787" +
-                "\uE788\uE789\uE78A\uE78B\uE78C\uE78D\uE78E\uE78F" +
-                "\uE790\uE791\uE792\uE793\uE794\uE795\uE796\uE797" +
-                "\uE798\uE799\uE79A\uE79B\uE79C\uE79D\uE79E\uE79F" +
-                "\uE7A0\uE7A1\uE7A2\uE7A3\uE7A4\uE7A5\uE7A6\uE7A7" +
-                "\uE7A8\uE7A9\uE7AA\uE7AB\uE7AC\uE7AD\uE7AE\uE7AF" +
-                "\uE7B0\uE7B1\uE7B2\uE7B3\uE7B4\uE7B5\uE7B6\uE7B7" +
-                "\uE7B8\uE7B9\uE7BA\uE7BB\uE7BC\uE7BD\uE7BE\uE7BF" +
-                "\uE7C0\uE7C1\uE7C2\uE7C3\uE7C4\uE7C5\uE7C6\uE7C7" +
-                "\uE7C8\uE7C9\uE7CA\uE7CB\uE7CC\uE7CD\uE7CE\uE7CF" +
-                "\uE7D0\uE7D1\uE7D2\uE7D3\uE7D4\uE7D5\uE7D6\uE7D7" +
-                "\uE7D8\uE7D9\uE7DA\uE7DB\uE7DC\uE7DD\uE7DE\uE7DF" +
-                "\uE7E0\uE7E1\uE7E2\uE7E3\uE7E4\uE7E5\uE7E6\uE7E7" +
-                "\uE7E8\uE7E9\uE7EA\uE7EB\uE7EC\uE7ED\uE7EE\uE7EF" +
-                "\uE7F0\uE7F1\uE7F2\uE7F3\uE7F4\uE7F5\uE7F6\uE7F7" +
-                "\uE7F8\uE7F9\uE7FA\uE7FB\uE7FC\uE7FD\uE7FE\uE7FF" +
-                "\uE800\uE801\uE802\uE803\uE804\uE805\uE806\uE807" +
-                "\uE808\uE809\uE80A\uE80B\uE80C\uE80D\uE80E\uE80F" +
-                "\uE810\uE811\uE812\uE813\uE814\uE815\uE816\uE817" +
-                "\uE818\uE819\uE81A\uE81B\uE81C\uE81D\uE81E\uE81F" +
-                "\uE820\uE821\uE822\uE823\uE824\uE825\uE826\uE827" +
-                "\uE828\uE829\uE82A\uE82B\uE82C\uE82D\uE82E\uE82F" +
-                "\uE830\uE831\uE832\uE833\uE834\uE835\uE836\uE837" +
-                "\uE838\uE839\uE83A\uE83B\uE83C\uE83D\uE83E\uE83F" +
-                "\uE840\uE841\uE842\uE843\uE844\uE845\uE846\uE847" +
-                "\uE848\uE849\uE84A\uE84B\uE84C\uE84D\uE84E\uE84F" +
-                "\uE850\uE851\uE852\uE853\uE854\uE855\uE856\uE857" +
-                "\uE858\uE859\uE85A\uE85B\uE85C\uE85D\uE85E\uE85F" +
-                "\uE860\uE861\uE862\uE863\uE864\uE865\uE866\uE867" +
-                "\uE868\uE869\uE86A\uE86B\uE86C\uE86D\uE86E\uE86F" +
-                "\uE870\uE871\uE872\uE873\uE874\uE875\uE876\uE877" +
-                "\uE878\uE879\uE87A\uE87B\uE87C\uE87D\uE87E\uE87F" +
-                "\uE880\uE881\uE882\uE883\uE884\uE885\uE886\uE887" +
-                "\uE888\uE889\uE88A\uE88B\uE88C\uE88D\uE88E\uE88F" +
-                "\uE890\uE891\uE892\uE893\uE894\uE895\uE896\uE897" +
-                "\uE898\uE899\uE89A\uE89B\uE89C\uE89D\uE89E\uE89F" +
-                "\uE8A0\uE8A1\uE8A2\uE8A3\uE8A4\uE8A5\uE8A6\uE8A7" +
-                "\uE8A8\uE8A9\uE8AA\uE8AB\uE8AC\uE8AD\uE8AE\uE8AF" +
-                "\uE8B0\uE8B1\uE8B2\uE8B3\uE8B4\uE8B5\uE8B6\uE8B7" +
-                "\uE8B8\uE8B9\uE8BA\uE8BB\uE8BC\uE8BD\uE8BE\uE8BF" +
-                "\uE8C0\uE8C1\uE8C2\uE8C3\uE8C4\uE8C5\uE8C6\uE8C7" +
-                "\uE8C8\uE8C9\uE8CA\uE8CB\uE8CC\uE8CD\uE8CE\uE8CF" +
-                "\uE8D0\uE8D1\uE8D2\uE8D3\uE8D4\uE8D5\uE8D6\uE8D7" +
-                "\uE8D8\uE8D9\uE8DA\uE8DB\uE8DC\uE8DD\uE8DE\uE8DF" +
-                "\uE8E0\uE8E1\uE8E2\uE8E3\uE8E4\uE8E5\uE8E6\uE8E7" +
-                "\uE8E8\uE8E9\uE8EA\uE8EB\uE8EC\uE8ED\uE8EE\uE8EF" +
-                "\uE8F0\uE8F1\uE8F2\uE8F3\uE8F4\uE8F5\uE8F6\uE8F7" +
-                "\uE8F8\uE8F9\uE8FA\uE8FB\uE8FC\uE8FD\uE8FE\uE8FF" +
-                "\uE900\uE901\uE902\uE903\uE904\uE905\uE906\uE907" +
-                "\uE908\uE909\uE90A\uE90B\uE90C\uE90D\uE90E\uE90F" +
-                "\uE910\uE911\uE912\uE913\uE914\uE915\uE916\uE917" +
-                "\uE918\uE919\uE91A\uE91B\uE91C\uE91D\uE91E\uE91F" +
-                "\uE920\uE921\uE922\uE923\uE924\uE925\uE926\uE927" +
-                "\uE928\uE929\uE92A\uE92B\uE92C\uE92D\uE92E\uE92F" +
-                "\uE930\uE931\uE932\uE933\uE934\uE935\uE936\uE937" +
-                "\uE938\uE939\uE93A\uE93B\uE93C\uE93D\uE93E\uE93F" +
-                "\uE940\uE941\uE942\uE943\uE944\uE945\uE946\uE947" +
-                "\uE948\uE949\uE94A\uE94B\uE94C\uE94D\uE94E\uE94F" +
-                "\uE950\uE951\uE952\uE953\uE954\uE955\uE956\uE957" +
-                "\uE958\uE959\uE95A\uE95B\uE95C\uE95D\uE95E\uE95F" +
-                "\uE960\uE961\uE962\uE963\uE964\uE965\uE966\uE967" +
-                "\uE968\uE969\uE96A\uE96B\uE96C\uE96D\uE96E\uE96F" +
-                "\uE970\uE971\uE972\uE973\uE974\uE975\uE976\uE977" +
-                "\uE978\uE979\uE97A\uE97B\uE97C\uE97D\uE97E\uE97F" +
-                "\uE980\uE981\uE982\uE983\uE984\uE985\uE986\uE987" +
-                "\uE988\uE989\uE98A\uE98B\uE98C\uE98D\uE98E\uE98F" +
-                "\uE990\uE991\uE992\uE993\uE994\uE995\uE996\uE997" +
-                "\uE998\uE999\uE99A\uE99B\uE99C\uE99D\uE99E\uE99F" +
-                "\uE9A0\uE9A1\uE9A2\uE9A3\uE9A4\uE9A5\uE9A6\uE9A7" +
-                "\uE9A8\uE9A9\uE9AA\uE9AB\uE9AC\uE9AD\uE9AE\uE9AF" +
-                "\uE9B0\uE9B1\uE9B2\uE9B3\uE9B4\uE9B5\uE9B6\uE9B7" +
-                "\uE9B8\uE9B9\uE9BA\uE9BB\uE9BC\uE9BD\uE9BE\uE9BF" +
-                "\uE9C0\uE9C1\uE9C2\uE9C3\uE9C4\uE9C5\uE9C6\uE9C7" +
-                "\uE9C8\uE9C9\uE9CA\uE9CB\uE9CC\uE9CD\uE9CE\uE9CF" +
-                "\uE9D0\uE9D1\uE9D2\uE9D3\uE9D4\uE9D5\uE9D6\uE9D7" +
-                "\uE9D8\uE9D9\uE9DA\uE9DB\uE9DC\uE9DD\uE9DE\uE9DF" +
-                "\uE9E0\uE9E1\uE9E2\uE9E3\uE9E4\uE9E5\uE9E6\uE9E7" +
-                "\uE9E8\uE9E9\uE9EA\uE9EB\uE9EC\uE9ED\uE9EE\uE9EF" +
-                "\uE9F0\uE9F1\uE9F2\uE9F3\uE9F4\uE9F5\uE9F6\uE9F7" +
-                "\uE9F8\uE9F9\uE9FA\uE9FB\uE9FC\uE9FD\uE9FE\uE9FF" +
-                "\uEA00\uEA01\uEA02\uEA03\uEA04\uEA05\uEA06\uEA07" +
-                "\uEA08\uEA09\uEA0A\uEA0B\uEA0C\uEA0D\uEA0E\uEA0F" +
-                "\uEA10\uEA11\uEA12\uEA13\uEA14\uEA15\uEA16\uEA17" +
-                "\uEA18\uEA19\uEA1A\uEA1B\uEA1C\uEA1D\uEA1E\uEA1F" +
-                "\uEA20\uEA21\uEA22\uEA23\uEA24\uEA25\uEA26\uEA27" +
-                "\uEA28\uEA29\uEA2A\uEA2B\uEA2C\uEA2D\uEA2E\uEA2F" +
-                "\uEA30\uEA31\uEA32\uEA33\uEA34\uEA35\uEA36\uEA37" +
-                "\uEA38\uEA39\uEA3A\uEA3B\uEA3C\uEA3D\uEA3E\uEA3F" +
-                "\uEA40\uEA41\uEA42\uEA43\uEA44\uEA45\uEA46\uEA47" +
-                "\uEA48\uEA49\uEA4A\uEA4B\uEA4C\uEA4D\uEA4E\uEA4F" +
-                "\uEA50\uEA51\uEA52\uEA53\uEA54\uEA55\uEA56\uEA57" +
-                "\uEA58\uEA59\uEA5A\uEA5B\uEA5C\uEA5D\uEA5E\uEA5F" +
-                "\uEA60\uEA61\uEA62\uEA63\uEA64\uEA65\uEA66\uEA67" +
-                "\uEA68\uEA69\uEA6A\uEA6B\uEA6C\uEA6D\uEA6E\uEA6F" +
-                "\uEA70\uEA71\uEA72\uEA73\uEA74\uEA75\uEA76\uEA77" +
-                "\uEA78\uEA79\uEA7A\uEA7B\uEA7C\uEA7D\uEA7E\uEA7F" +
-                "\uEA80\uEA81\uEA82\uEA83\uEA84\uEA85\uEA86\uEA87" +
-                "\uEA88\uEA89\uEA8A\uEA8B\uEA8C\uEA8D\uEA8E\uEA8F" +
-                "\uEA90\uEA91\uEA92\uEA93\uEA94\uEA95\uEA96\uEA97" +
-                "\uEA98\uEA99\uEA9A\uEA9B\uEA9C\uEA9D\uEA9E\uEA9F" +
-                "\uEAA0\uEAA1\uEAA2\uEAA3\uEAA4\uEAA5\uEAA6\uEAA7" +
-                "\uEAA8\uEAA9\uEAAA\uEAAB\uEAAC\uEAAD\uEAAE\uEAAF" +
-                "\uEAB0\uEAB1\uEAB2\uEAB3\uEAB4\uEAB5\uEAB6\uEAB7" +
-                "\uEAB8\uEAB9\uEABA\uEABB\uEABC\uEABD\uEABE\uEABF" +
-                "\uEAC0\uEAC1\uEAC2\uEAC3\uEAC4\uEAC5\uEAC6\uEAC7" +
-                "\uEAC8\uEAC9\uEACA\uEACB\uEACC\uEACD\uEACE\uEACF" +
-                "\uEAD0\uEAD1\uEAD2\uEAD3\uEAD4\uEAD5\uEAD6\uEAD7" +
-                "\uEAD8\uEAD9\uEADA\uEADB\uEADC\uEADD\uEADE\uEADF" +
-                "\uEAE0\uEAE1\uEAE2\uEAE3\uEAE4\uEAE5\uEAE6\uEAE7" +
-                "\uEAE8\uEAE9\uEAEA\uEAEB\uEAEC\uEAED\uEAEE\uEAEF" +
-                "\uEAF0\uEAF1\uEAF2\uEAF3\uEAF4\uEAF5\uEAF6\uEAF7" +
-                "\uEAF8\uEAF9\uEAFA\uEAFB\uEAFC\uEAFD\uEAFE\uEAFF" +
-                "\uEB00\uEB01\uEB02\uEB03\uEB04\uEB05\uEB06\uEB07" +
-                "\uEB08\uEB09\uEB0A\uEB0B\uEB0C\uEB0D\uEB0E\uEB0F" +
-                "\uEB10\uEB11\uEB12\uEB13\uEB14\uEB15\uEB16\uEB17" +
-                "\uEB18\uEB19\uEB1A\uEB1B\uEB1C\uEB1D\uEB1E\uEB1F" +
-                "\uEB20\uEB21\uEB22\uEB23\uEB24\uEB25\uEB26\uEB27" +
-                "\uEB28\uEB29\uEB2A\uEB2B\uEB2C\uEB2D\uEB2E\uEB2F" +
-                "\uEB30\uEB31\uEB32\uEB33\uEB34\uEB35\uEB36\uEB37" +
-                "\uEB38\uEB39\uEB3A\uEB3B\uEB3C\uEB3D\uEB3E\uEB3F" +
-                "\uEB40\uEB41\uEB42\uEB43\uEB44\uEB45\uEB46\uEB47" +
-                "\uEB48\uEB49\uEB4A\uEB4B\uEB4C\uEB4D\uEB4E\uEB4F" +
-                "\uEB50\uEB51\uEB52\uEB53\uEB54\uEB55\uEB56\uEB57" +
-                "\uEB58\uEB59\uEB5A\uEB5B\uEB5C\uEB5D\uEB5E\uEB5F" +
-                "\uEB60\uEB61\uEB62\uEB63\uEB64\uEB65\uEB66\uEB67" +
-                "\uEB68\uEB69\uEB6A\uEB6B\uEB6C\uEB6D\uEB6E\uEB6F" +
-                "\uEB70\uEB71\uEB72\uEB73\uEB74\uEB75\uEB76\uEB77" +
-                "\uEB78\uEB79\uEB7A\uEB7B\uEB7C\uEB7D\uEB7E\uEB7F" +
-                "\uEB80\uEB81\uEB82\uEB83\uEB84\uEB85\uEB86\uEB87" +
-                "\uEB88\uEB89\uEB8A\uEB8B\uEB8C\uEB8D\uEB8E\uEB8F" +
-                "\uEB90\uEB91\uEB92\uEB93\uEB94\uEB95\uEB96\uEB97" +
-                "\uEB98\uEB99\uEB9A\uEB9B\uEB9C\uEB9D\uEB9E\uEB9F" +
-                "\uEBA0\uEBA1\uEBA2\uEBA3\uEBA4\uEBA5\uEBA6\uEBA7" +
-                "\uEBA8\uEBA9\uEBAA\uEBAB\uEBAC\uEBAD\uEBAE\uEBAF" +
-                "\uEBB0\uEBB1\uEBB2\uEBB3\uEBB4\uEBB5\uEBB6\uEBB7" +
-                "\uEBB8\uEBB9\uEBBA\uEBBB\uEBBC\uEBBD\uEBBE\uEBBF" +
-                "\uEBC0\uEBC1\uEBC2\uEBC3\uEBC4\uEBC5\uEBC6\uEBC7" +
-                "\uEBC8\uEBC9\uEBCA\uEBCB\uEBCC\uEBCD\uEBCE\uEBCF" +
-                "\uEBD0\uEBD1\uEBD2\uEBD3\uEBD4\uEBD5\uEBD6\uEBD7" +
-                "\uEBD8\uEBD9\uEBDA\uEBDB\uEBDC\uEBDD\uEBDE\uEBDF" +
-                "\uEBE0\uEBE1\uEBE2\uEBE3\uEBE4\uEBE5\uEBE6\uEBE7" +
-                "\uEBE8\uEBE9\uEBEA\uEBEB\uEBEC\uEBED\uEBEE\uEBEF" +
-                "\uEBF0\uEBF1\uEBF2\uEBF3\uEBF4\uEBF5\uEBF6\uEBF7" +
-                "\uEBF8\uEBF9\uEBFA\uEBFB\uEBFC\uEBFD\uEBFE\uEBFF" +
-                "\uEC00\uEC01\uEC02\uEC03\uEC04\uEC05\uEC06\uEC07" +
-                "\uEC08\uEC09\uEC0A\uEC0B\uEC0C\uEC0D\uEC0E\uEC0F" +
-                "\uEC10\uEC11\uEC12\uEC13\uEC14\uEC15\uEC16\uEC17" +
-                "\uEC18\uEC19\uEC1A\uEC1B\uEC1C\uEC1D\uEC1E\uEC1F" +
-                "\uEC20\uEC21\uEC22\uEC23\uEC24\uEC25\uEC26\uEC27" +
-                "\uEC28\uEC29\uEC2A\uEC2B\uEC2C\uEC2D\uEC2E\uEC2F" +
-                "\uEC30\uEC31\uEC32\uEC33\uEC34\uEC35\uEC36\uEC37" +
-                "\uEC38\uEC39\uEC3A\uEC3B\uEC3C\uEC3D\uEC3E\uEC3F" +
-                "\uEC40\uEC41\uEC42\uEC43\uEC44\uEC45\uEC46\uEC47" +
-                "\uEC48\uEC49\uEC4A\uEC4B\uEC4C\uEC4D\uEC4E\uEC4F" +
-                "\uEC50\uEC51\uEC52\uEC53\uEC54\uEC55\uEC56\uEC57" +
-                "\uEC58\uEC59\uEC5A\uEC5B\uEC5C\uEC5D\uEC5E\uEC5F" +
-                "\uEC60\uEC61\uEC62\uEC63\uEC64\uEC65\uEC66\uEC67" +
-                "\uEC68\uEC69\uEC6A\uEC6B\uEC6C\uEC6D\uEC6E\uEC6F" +
-                "\uEC70\uEC71\uEC72\uEC73\uEC74\uEC75\uEC76\uEC77" +
-                "\uEC78\uEC79\uEC7A\uEC7B\uEC7C\uEC7D\uEC7E\uEC7F" +
-                "\uEC80\uEC81\uEC82\uEC83\uEC84\uEC85\uEC86\uEC87" +
-                "\uEC88\uEC89\uEC8A\uEC8B\uEC8C\uEC8D\uEC8E\uEC8F" +
-                "\uEC90\uEC91\uEC92\uEC93\uEC94\uEC95\uEC96\uEC97" +
-                "\uEC98\uEC99\uEC9A\uEC9B\uEC9C\uEC9D\uEC9E\uEC9F" +
-                "\uECA0\uECA1\uECA2\uECA3\uECA4\uECA5\uECA6\uECA7" +
-                "\uECA8\uECA9\uECAA\uECAB\uECAC\uECAD\uECAE\uECAF" +
-                "\uECB0\uECB1\uECB2\uECB3\uECB4\uECB5\uECB6\uECB7" +
-                "\uECB8\uECB9\uECBA\uECBB\uECBC\uECBD\uECBE\uECBF" +
-                "\uECC0\uECC1\uECC2\uECC3\uECC4\uECC5\uECC6\uECC7" +
-                "\uECC8\uECC9\uECCA\uECCB\uECCC\uECCD\uECCE\uECCF" +
-                "\uECD0\uECD1\uECD2\uECD3\uECD4\uECD5\uECD6\uECD7" +
-                "\uECD8\uECD9\uECDA\uECDB\uECDC\uECDD\uECDE\uECDF" +
-                "\uECE0\uECE1\uECE2\uECE3\uECE4\uECE5\uECE6\uECE7" +
-                "\uECE8\uECE9\uECEA\uECEB\uECEC\uECED\uECEE\uECEF" +
-                "\uECF0\uECF1\uECF2\uECF3\uECF4\uECF5\uECF6\uECF7" +
-                "\uECF8\uECF9\uECFA\uECFB\uECFC\uECFD\uECFE\uECFF" +
-                "\uED00\uED01\uED02\uED03\uED04\uED05\uED06\uED07" +
-                "\uED08\uED09\uED0A\uED0B\uED0C\uED0D\uED0E\uED0F" +
-                "\uED10\uED11\uED12\uED13\uED14\uED15\uED16\uED17" +
-                "\uED18\uED19\uED1A\uED1B\uED1C\uED1D\uED1E\uED1F" +
-                "\uED20\uED21\uED22\uED23\uED24\uED25\uED26\uED27" +
-                "\uED28\uED29\uED2A\uED2B\uED2C\uED2D\uED2E\uED2F" +
-                "\uED30\uED31\uED32\uED33\uED34\uED35\uED36\uED37" +
-                "\uED38\uED39\uED3A\uED3B\uED3C\uED3D\uED3E\uED3F" +
-                "\uED40\uED41\uED42\uED43\uED44\uED45\uED46\uED47" +
-                "\uED48\uED49\uED4A\uED4B\uED4C\uED4D\uED4E\uED4F" +
-                "\uED50\uED51\uED52\uED53\uED54\uED55\uED56\uED57" +
-                "\uED58\uED59\uED5A\uED5B\uED5C\uED5D\uED5E\uED5F" +
-                "\uED60\uED61\uED62\uED63\uED64\uED65\uED66\uED67" +
-                "\uED68\uED69\uED6A\uED6B\uED6C\uED6D\uED6E\uED6F" +
-                "\uED70\uED71\uED72\uED73\uED74\uED75\uED76\uED77" +
-                "\uED78\uED79\uED7A\uED7B\uED7C\uED7D\uED7E\uED7F" +
-                "\uED80\uED81\uED82\uED83\uED84\uED85\uED86\uED87" +
-                "\uED88\uED89\uED8A\uED8B\uED8C\uED8D\uED8E\uED8F" +
-                "\uED90\uED91\uED92\uED93\uED94\uED95\uED96\uED97" +
-                "\uED98\uED99\uED9A\uED9B\uED9C\uED9D\uED9E\uED9F" +
-                "\uEDA0\uEDA1\uEDA2\uEDA3\uEDA4\uEDA5\uEDA6\uEDA7" +
-                "\uEDA8\uEDA9\uEDAA\uEDAB\uEDAC\uEDAD\uEDAE\uEDAF" +
-                "\uEDB0\uEDB1\uEDB2\uEDB3\uEDB4\uEDB5\uEDB6\uEDB7" +
-                "\uEDB8\uEDB9\uEDBA\uEDBB\uEDBC\uEDBD\uEDBE\uEDBF" +
-                "\uEDC0\uEDC1\uEDC2\uEDC3\uEDC4\uEDC5\uEDC6\uEDC7" +
-                "\uEDC8\uEDC9\uEDCA\uEDCB\uEDCC\uEDCD\uEDCE\uEDCF" +
-                "\uEDD0\uEDD1\uEDD2\uEDD3\uEDD4\uEDD5\uEDD6\uEDD7" +
-                "\uEDD8\uEDD9\uEDDA\uEDDB\uEDDC\uEDDD\uEDDE\uEDDF" +
-                "\uEDE0\uEDE1\uEDE2\uEDE3\uEDE4\uEDE5\uEDE6\uEDE7" +
-                "\uEDE8\uEDE9\uEDEA\uEDEB\uEDEC\uEDED\uEDEE\uEDEF" +
-                "\uEDF0\uEDF1\uEDF2\uEDF3\uEDF4\uEDF5\uEDF6\uEDF7" +
-                "\uEDF8\uEDF9\uEDFA\uEDFB\uEDFC\uEDFD\uEDFE\uEDFF" +
-                "\uEE00\uEE01\uEE02\uEE03\uEE04\uEE05\uEE06\uEE07" +
-                "\uEE08\uEE09\uEE0A\uEE0B\uEE0C\uEE0D\uEE0E\uEE0F" +
-                "\uEE10\uEE11\uEE12\uEE13\uEE14\uEE15\uEE16\uEE17" +
-                "\uEE18\uEE19\uEE1A\uEE1B\uEE1C\uEE1D\uEE1E\uEE1F" +
-                "\uEE20\uEE21\uEE22\uEE23\uEE24\uEE25\uEE26\uEE27" +
-                "\uEE28\uEE29\uEE2A\uEE2B\uEE2C\uEE2D\uEE2E\uEE2F" +
-                "\uEE30\uEE31\uEE32\uEE33\uEE34\uEE35\uEE36\uEE37" +
-                "\uEE38\uEE39\uEE3A\uEE3B\uEE3C\uEE3D\uEE3E\uEE3F" +
-                "\uEE40\uEE41\uEE42\uEE43\uEE44\uEE45\uEE46\uEE47" +
-                "\uEE48\uEE49\uEE4A\uEE4B\uEE4C\uEE4D\uEE4E\uEE4F" +
-                "\uEE50\uEE51\uEE52\uEE53\uEE54\uEE55\uEE56\uEE57" +
-                "\uEE58\uEE59\uEE5A\uEE5B\uEE5C\uEE5D\uEE5E\uEE5F" +
-                "\uEE60\uEE61\uEE62\uEE63\uEE64\uEE65\uEE66\uEE67" +
-                "\uEE68\uEE69\uEE6A\uEE6B\uEE6C\uEE6D\uEE6E\uEE6F" +
-                "\uEE70\uEE71\uEE72\uEE73\uEE74\uEE75\uEE76\uEE77" +
-                "\uEE78\uEE79\uEE7A\uEE7B\uEE7C\uEE7D\uEE7E\uEE7F" +
-                "\uEE80\uEE81\uEE82\uEE83\uEE84\uEE85\uEE86\uEE87" +
-                "\uEE88\uEE89\uEE8A\uEE8B\uEE8C\uEE8D\uEE8E\uEE8F" +
-                "\uEE90\uEE91\uEE92\uEE93\uEE94\uEE95\uEE96\uEE97" +
-                "\uEE98\uEE99\uEE9A\uEE9B\uEE9C\uEE9D\uEE9E\uEE9F" +
-                "\uEEA0\uEEA1\uEEA2\uEEA3\uEEA4\uEEA5\uEEA6\uEEA7" +
-                "\uEEA8\uEEA9\uEEAA\uEEAB\uEEAC\uEEAD\uEEAE\uEEAF" +
-                "\uEEB0\uEEB1\uEEB2\uEEB3\uEEB4\uEEB5\uEEB6\uEEB7" +
-                "\uEEB8\uEEB9\uEEBA\uEEBB\uEEBC\uEEBD\uEEBE\uEEBF" +
-                "\uEEC0\uEEC1\uEEC2\uEEC3\uEEC4\uEEC5\uEEC6\uEEC7" +
-                "\uEEC8\uEEC9\uEECA\uEECB\uEECC\uEECD\uEECE\uEECF" +
-                "\uEED0\uEED1\uEED2\uEED3\uEED4\uEED5\uEED6\uEED7" +
-                "\uEED8\uEED9\uEEDA\uEEDB\uEEDC\uEEDD\uEEDE\uEEDF" +
-                "\uEEE0\uEEE1\uEEE2\uEEE3\uEEE4\uEEE5\uEEE6\uEEE7" +
-                "\uEEE8\uEEE9\uEEEA\uEEEB\uEEEC\uEEED\uEEEE\uEEEF" +
-                "\uEEF0\uEEF1\uEEF2\uEEF3\uEEF4\uEEF5\uEEF6\uEEF7" +
-                "\uEEF8\uEEF9\uEEFA\uEEFB\uEEFC\uEEFD\uEEFE\uEEFF" +
-                "\uEF00\uEF01\uEF02\uEF03\uEF04\uEF05\uEF06\uEF07" +
-                "\uEF08\uEF09\uEF0A\uEF0B\uEF0C\uEF0D\uEF0E\uEF0F" +
-                "\uEF10\uEF11\uEF12\uEF13\uEF14\uEF15\uEF16\uEF17" +
-                "\uEF18\uEF19\uEF1A\uEF1B\uEF1C\uEF1D\uEF1E\uEF1F" +
-                "\uEF20\uEF21\uEF22\uEF23\uEF24\uEF25\uEF26\uEF27" +
-                "\uEF28\uEF29\uEF2A\uEF2B\uEF2C\uEF2D\uEF2E\uEF2F" +
-                "\uEF30\uEF31\uEF32\uEF33\uEF34\uEF35\uEF36\uEF37" +
-                "\uEF38\uEF39\uEF3A\uEF3B\uEF3C\uEF3D\uEF3E\uEF3F" +
-                "\uEF40\uEF41\uEF42\uEF43\uEF44\uEF45\uEF46\uEF47" +
-                "\uEF48\uEF49\uEF4A\uEF4B\uEF4C\uEF4D\uEF4E\uEF4F" +
-                "\uEF50\uEF51\uEF52\uEF53\uEF54\uEF55\uEF56\uEF57" +
-                "\uEF58\uEF59\uEF5A\uEF5B\uEF5C\uEF5D\uEF5E\uEF5F" +
-                "\uEF60\uEF61\uEF62\uEF63\uEF64\uEF65\uEF66\uEF67" +
-                "\uEF68\uEF69\uEF6A\uEF6B\uEF6C\uEF6D\uEF6E\uEF6F" +
-                "\uEF70\uEF71\uEF72\uEF73\uEF74\uEF75\uEF76\uEF77" +
-                "\uEF78\uEF79\uEF7A\uEF7B\uEF7C\uEF7D\uEF7E\uEF7F" +
-                "\uEF80\uEF81\uEF82\uEF83\uEF84\uEF85\uEF86\uEF87" +
-                "\uEF88\uEF89\uEF8A\uEF8B\uEF8C\uEF8D\uEF8E\uEF8F" +
-                "\uEF90\uEF91\uEF92\uEF93\uEF94\uEF95\uEF96\uEF97" +
-                "\uEF98\uEF99\uEF9A\uEF9B\uEF9C\uEF9D\uEF9E\uEF9F" +
-                "\uEFA0\uEFA1\uEFA2\uEFA3\uEFA4\uEFA5\uEFA6\uEFA7" +
-                "\uEFA8\uEFA9\uEFAA\uEFAB\uEFAC\uEFAD\uEFAE\uEFAF" +
-                "\uEFB0\uEFB1\uEFB2\uEFB3\uEFB4\uEFB5\uEFB6\uEFB7" +
-                "\uEFB8\uEFB9\uEFBA\uEFBB\uEFBC\uEFBD\uEFBE\uEFBF" +
-                "\uEFC0\uEFC1\uEFC2\uEFC3\uEFC4\uEFC5\uEFC6\uEFC7" +
-                "\uEFC8\uEFC9\uEFCA\uEFCB\uEFCC\uEFCD\uEFCE\uEFCF" +
-                "\uEFD0\uEFD1\uEFD2\uEFD3\uEFD4\uEFD5\uEFD6\uEFD7" +
-                "\uEFD8\uEFD9\uEFDA\uEFDB\uEFDC\uEFDD\uEFDE\uEFDF" +
-                "\uEFE0\uEFE1\uEFE2\uEFE3\uEFE4\uEFE5\uEFE6\uEFE7" +
-                "\uEFE8\uEFE9\uEFEA\uEFEB\uEFEC\uEFED\uEFEE\uEFEF" +
-                "\uEFF0\uEFF1\uEFF2\uEFF3\uEFF4\uEFF5\uEFF6\uEFF7" +
-                "\uEFF8\uEFF9\uEFFA\uEFFB\uEFFC\uEFFD\uEFFE\uEFFF" +
-                "\uF000\uF001\uF002\uF003\uF004\uF005\uF006\uF007" +
-                "\uF008\uF009\uF00A\uF00B\uF00C\uF00D\uF00E\uF00F" +
-                "\uF010\uF011\uF012\uF013\uF014\uF015\uF016\uF017" +
-                "\uF018\uF019\uF01A\uF01B\uF01C\uF01D\uF01E\uF01F" +
-                "\uF020\uF021\uF022\uF023\uF024\uF025\uF026\uF027" +
-                "\uF028\uF029\uF02A\uF02B\uF02C\uF02D\uF02E\uF02F" +
-                "\uF030\uF031\uF032\uF033\uF034\uF035\uF036\uF037" +
-                "\uF038\uF039\uF03A\uF03B\uF03C\uF03D\uF03E\uF03F" +
-                "\uF040\uF041\uF042\uF043\uF044\uF045\uF046\uF047" +
-                "\uF048\uF049\uF04A\uF04B\uF04C\uF04D\uF04E\uF04F" +
-                "\uF050\uF051\uF052\uF053\uF054\uF055\uF056\uF057" +
-                "\uF058\uF059\uF05A\uF05B\uF05C\uF05D\uF05E\uF05F" +
-                "\uF060\uF061\uF062\uF063\uF064\uF065\uF066\uF067" +
-                "\uF068\uF069\uF06A\uF06B\uF06C\uF06D\uF06E\uF06F" +
-                "\uF070\uF071\uF072\uF073\uF074\uF075\uF076\uF077" +
-                "\uF078\uF079\uF07A\uF07B\uF07C\uF07D\uF07E\uF07F" +
-                "\uF080\uF081\uF082\uF083\uF084\uF085\uF086\uF087" +
-                "\uF088\uF089\uF08A\uF08B\uF08C\uF08D\uF08E\uF08F" +
-                "\uF090\uF091\uF092\uF093\uF094\uF095\uF096\uF097" +
-                "\uF098\uF099\uF09A\uF09B\uF09C\uF09D\uF09E\uF09F" +
-                "\uF0A0\uF0A1\uF0A2\uF0A3\uF0A4\uF0A5\uF0A6\uF0A7" +
-                "\uF0A8\uF0A9\uF0AA\uF0AB\uF0AC\uF0AD\uF0AE\uF0AF" +
-                "\uF0B0\uF0B1\uF0B2\uF0B3\uF0B4\uF0B5\uF0B6\uF0B7" +
-                "\uF0B8\uF0B9\uF0BA\uF0BB\uF0BC\uF0BD\uF0BE\uF0BF" +
-                "\uF0C0\uF0C1\uF0C2\uF0C3\uF0C4\uF0C5\uF0C6\uF0C7" +
-                "\uF0C8\uF0C9\uF0CA\uF0CB\uF0CC\uF0CD\uF0CE\uF0CF" +
-                "\uF0D0\uF0D1\uF0D2\uF0D3\uF0D4\uF0D5\uF0D6\uF0D7" +
-                "\uF0D8\uF0D9\uF0DA\uF0DB\uF0DC\uF0DD\uF0DE\uF0DF" +
-                "\uF0E0\uF0E1\uF0E2\uF0E3\uF0E4\uF0E5\uF0E6\uF0E7" +
-                "\uF0E8\uF0E9\uF0EA\uF0EB\uF0EC\uF0ED\uF0EE\uF0EF" +
-                "\uF0F0\uF0F1\uF0F2\uF0F3\uF0F4\uF0F5\uF0F6\uF0F7" +
-                "\uF0F8\uF0F9\uF0FA\uF0FB\uF0FC\uF0FD\uF0FE\uF0FF" +
-                "\uF100\uF101\uF102\uF103\uF104\uF105\uF106\uF107" +
-                "\uF108\uF109\uF10A\uF10B\uF10C\uF10D\uF10E\uF10F" +
-                "\uF110\uF111\uF112\uF113\uF114\uF115\uF116\uF117" +
-                "\uF118\uF119\uF11A\uF11B\uF11C\uF11D\uF11E\uF11F" +
-                "\uF120\uF121\uF122\uF123\uF124\uF125\uF126\uF127" +
-                "\uF128\uF129\uF12A\uF12B\uF12C\uF12D\uF12E\uF12F" +
-                "\uF130\uF131\uF132\uF133\uF134\uF135\uF136\uF137" +
-                "\uF138\uF139\uF13A\uF13B\uF13C\uF13D\uF13E\uF13F" +
-                "\uF140\uF141\uF142\uF143\uF144\uF145\uF146\uF147" +
-                "\uF148\uF149\uF14A\uF14B\uF14C\uF14D\uF14E\uF14F" +
-                "\uF150\uF151\uF152\uF153\uF154\uF155\uF156\uF157" +
-                "\uF158\uF159\uF15A\uF15B\uF15C\uF15D\uF15E\uF15F" +
-                "\uF160\uF161\uF162\uF163\uF164\uF165\uF166\uF167" +
-                "\uF168\uF169\uF16A\uF16B\uF16C\uF16D\uF16E\uF16F" +
-                "\uF170\uF171\uF172\uF173\uF174\uF175\uF176\uF177" +
-                "\uF178\uF179\uF17A\uF17B\uF17C\uF17D\uF17E\uF17F" +
-                "\uF180\uF181\uF182\uF183\uF184\uF185\uF186\uF187" +
-                "\uF188\uF189\uF18A\uF18B\uF18C\uF18D\uF18E\uF18F" +
-                "\uF190\uF191\uF192\uF193\uF194\uF195\uF196\uF197" +
-                "\uF198\uF199\uF19A\uF19B\uF19C\uF19D\uF19E\uF19F" +
-                "\uF1A0\uF1A1\uF1A2\uF1A3\uF1A4\uF1A5\uF1A6\uF1A7" +
-                "\uF1A8\uF1A9\uF1AA\uF1AB\uF1AC\uF1AD\uF1AE\uF1AF" +
-                "\uF1B0\uF1B1\uF1B2\uF1B3\uF1B4\uF1B5\uF1B6\uF1B7" +
-                "\uF1B8\uF1B9\uF1BA\uF1BB\uF1BC\uF1BD\uF1BE\uF1BF" +
-                "\uF1C0\uF1C1\uF1C2\uF1C3\uF1C4\uF1C5\uF1C6\uF1C7" +
-                "\uF1C8\uF1C9\uF1CA\uF1CB\uF1CC\uF1CD\uF1CE\uF1CF" +
-                "\uF1D0\uF1D1\uF1D2\uF1D3\uF1D4\uF1D5\uF1D6\uF1D7" +
-                "\uF1D8\uF1D9\uF1DA\uF1DB\uF1DC\uF1DD\uF1DE\uF1DF" +
-                "\uF1E0\uF1E1\uF1E2\uF1E3\uF1E4\uF1E5\uF1E6\uF1E7" +
-                "\uF1E8\uF1E9\uF1EA\uF1EB\uF1EC\uF1ED\uF1EE\uF1EF" +
-                "\uF1F0\uF1F1\uF1F2\uF1F3\uF1F4\uF1F5\uF1F6\uF1F7" +
-                "\uF1F8\uF1F9\uF1FA\uF1FB\uF1FC\uF1FD\uF1FE\uF1FF" +
-                "\uF200\uF201\uF202\uF203\uF204\uF205\uF206\uF207" +
-                "\uF208\uF209\uF20A\uF20B\uF20C\uF20D\uF20E\uF20F" +
-                "\uF210\uF211\uF212\uF213\uF214\uF215\uF216\uF217" +
-                "\uF218\uF219\uF21A\uF21B\uF21C\uF21D\uF21E\uF21F" +
-                "\uF220\uF221\uF222\uF223\uF224\uF225\uF226\uF227" +
-                "\uF228\uF229\uF22A\uF22B\uF22C\uF22D\uF22E\uF22F" +
-                "\uF230\uF231\uF232\uF233\uF234\uF235\uF236\uF237" +
-                "\uF238\uF239\uF23A\uF23B\uF23C\uF23D\uF23E\uF23F" +
-                "\uF240\uF241\uF242\uF243\uF244\uF245\uF246\uF247" +
-                "\uF248\uF249\uF24A\uF24B\uF24C\uF24D\uF24E\uF24F" +
-                "\uF250\uF251\uF252\uF253\uF254\uF255\uF256\uF257" +
-                "\uF258\uF259\uF25A\uF25B\uF25C\uF25D\uF25E\uF25F" +
-                "\uF260\uF261\uF262\uF263\uF264\uF265\uF266\uF267" +
-                "\uF268\uF269\uF26A\uF26B\uF26C\uF26D\uF26E\uF26F" +
-                "\uF270\uF271\uF272\uF273\uF274\uF275\uF276\uF277" +
-                "\uF278\uF279\uF27A\uF27B\uF27C\uF27D\uF27E\uF27F" +
-                "\uF280\uF281\uF282\uF283\uF284\uF285\uF286\uF287" +
-                "\uF288\uF289\uF28A\uF28B\uF28C\uF28D\uF28E\uF28F" +
-                "\uF290\uF291\uF292\uF293\uF294\uF295\uF296\uF297" +
-                "\uF298\uF299\uF29A\uF29B\uF29C\uF29D\uF29E\uF29F" +
-                "\uF2A0\uF2A1\uF2A2\uF2A3\uF2A4\uF2A5\uF2A6\uF2A7" +
-                "\uF2A8\uF2A9\uF2AA\uF2AB\uF2AC\uF2AD\uF2AE\uF2AF" +
-                "\uF2B0\uF2B1\uF2B2\uF2B3\uF2B4\uF2B5\uF2B6\uF2B7" +
-                "\uF2B8\uF2B9\uF2BA\uF2BB\uF2BC\uF2BD\uF2BE\uF2BF" +
-                "\uF2C0\uF2C1\uF2C2\uF2C3\uF2C4\uF2C5\uF2C6\uF2C7" +
-                "\uF2C8\uF2C9\uF2CA\uF2CB\uF2CC\uF2CD\uF2CE\uF2CF" +
-                "\uF2D0\uF2D1\uF2D2\uF2D3\uF2D4\uF2D5\uF2D6\uF2D7" +
-                "\uF2D8\uF2D9\uF2DA\uF2DB\uF2DC\uF2DD\uF2DE\uF2DF" +
-                "\uF2E0\uF2E1\uF2E2\uF2E3\uF2E4\uF2E5\uF2E6\uF2E7" +
-                "\uF2E8\uF2E9\uF2EA\uF2EB\uF2EC\uF2ED\uF2EE\uF2EF" +
-                "\uF2F0\uF2F1\uF2F2\uF2F3\uF2F4\uF2F5\uF2F6\uF2F7" +
-                "\uF2F8\uF2F9\uF2FA\uF2FB\uF2FC\uF2FD\uF2FE\uF2FF" +
-                "\uF300\uF301\uF302\uF303\uF304\uF305\uF306\uF307" +
-                "\uF308\uF309\uF30A\uF30B\uF30C\uF30D\uF30E\uF30F" +
-                "\uF310\uF311\uF312\uF313\uF314\uF315\uF316\uF317" +
-                "\uF318\uF319\uF31A\uF31B\uF31C\uF31D\uF31E\uF31F" +
-                "\uF320\uF321\uF322\uF323\uF324\uF325\uF326\uF327" +
-                "\uF328\uF329\uF32A\uF32B\uF32C\uF32D\uF32E\uF32F" +
-                "\uF330\uF331\uF332\uF333\uF334\uF335\uF336\uF337" +
-                "\uF338\uF339\uF33A\uF33B\uF33C\uF33D\uF33E\uF33F" +
-                "\uF340\uF341\uF342\uF343\uF344\uF345\uF346\uF347" +
-                "\uF348\uF349\uF34A\uF34B\uF34C\uF34D\uF34E\uF34F" +
-                "\uF350\uF351\uF352\uF353\uF354\uF355\uF356\uF357" +
-                "\uF358\uF359\uF35A\uF35B\uF35C\uF35D\uF35E\uF35F" +
-                "\uF360\uF361\uF362\uF363\uF364\uF365\uF366\uF367" +
-                "\uF368\uF369\uF36A\uF36B\uF36C\uF36D\uF36E\uF36F" +
-                "\uF370\uF371\uF372\uF373\uF374\uF375\uF376\uF377" +
-                "\uF378\uF379\uF37A\uF37B\uF37C\uF37D\uF37E\uF37F" +
-                "\uF380\uF381\uF382\uF383\uF384\uF385\uF386\uF387" +
-                "\uF388\uF389\uF38A\uF38B\uF38C\uF38D\uF38E\uF38F" +
-                "\uF390\uF391\uF392\uF393\uF394\uF395\uF396\uF397" +
-                "\uF398\uF399\uF39A\uF39B\uF39C\uF39D\uF39E\uF39F" +
-                "\uF3A0\uF3A1\uF3A2\uF3A3\uF3A4\uF3A5\uF3A6\uF3A7" +
-                "\uF3A8\uF3A9\uF3AA\uF3AB\uF3AC\uF3AD\uF3AE\uF3AF" +
-                "\uF3B0\uF3B1\uF3B2\uF3B3\uF3B4\uF3B5\uF3B6\uF3B7" +
-                "\uF3B8\uF3B9\uF3BA\uF3BB\uF3BC\uF3BD\uF3BE\uF3BF" +
-                "\uF3C0\uF3C1\uF3C2\uF3C3\uF3C4\uF3C5\uF3C6\uF3C7" +
-                "\uF3C8\uF3C9\uF3CA\uF3CB\uF3CC\uF3CD\uF3CE\uF3CF" +
-                "\uF3D0\uF3D1\uF3D2\uF3D3\uF3D4\uF3D5\uF3D6\uF3D7" +
-                "\uF3D8\uF3D9\uF3DA\uF3DB\uF3DC\uF3DD\uF3DE\uF3DF" +
-                "\uF3E0\uF3E1\uF3E2\uF3E3\uF3E4\uF3E5\uF3E6\uF3E7" +
-                "\uF3E8\uF3E9\uF3EA\uF3EB\uF3EC\uF3ED\uF3EE\uF3EF" +
-                "\uF3F0\uF3F1\uF3F2\uF3F3\uF3F4\uF3F5\uF3F6\uF3F7" +
-                "\uF3F8\uF3F9\uF3FA\uF3FB\uF3FC\uF3FD\uF3FE\uF3FF" +
-                "\uF400\uF401\uF402\uF403\uF404\uF405\uF406\uF407" +
-                "\uF408\uF409\uF40A\uF40B\uF40C\uF40D\uF40E\uF40F" +
-                "\uF410\uF411\uF412\uF413\uF414\uF415\uF416\uF417" +
-                "\uF418\uF419\uF41A\uF41B\uF41C\uF41D\uF41E\uF41F" +
-                "\uF420\uF421\uF422\uF423\uF424\uF425\uF426\uF427" +
-                "\uF428\uF429\uF42A\uF42B\uF42C\uF42D\uF42E\uF42F" +
-                "\uF430\uF431\uF432\uF433\uF434\uF435\uF436\uF437" +
-                "\uF438\uF439\uF43A\uF43B\uF43C\uF43D\uF43E\uF43F" +
-                "\uF440\uF441\uF442\uF443\uF444\uF445\uF446\uF447" +
-                "\uF448\uF449\uF44A\uF44B\uF44C\uF44D\uF44E\uF44F" +
-                "\uF450\uF451\uF452\uF453\uF454\uF455\uF456\uF457" +
-                "\uF458\uF459\uF45A\uF45B\uF45C\uF45D\uF45E\uF45F" +
-                "\uF460\uF461\uF462\uF463\uF464\uF465\uF466\uF467" +
-                "\uF468\uF469\uF46A\uF46B\uF46C\uF46D\uF46E\uF46F" +
-                "\uF470\uF471\uF472\uF473\uF474\uF475\uF476\uF477" +
-                "\uF478\uF479\uF47A\uF47B\uF47C\uF47D\uF47E\uF47F" +
-                "\uF480\uF481\uF482\uF483\uF484\uF485\uF486\uF487" +
-                "\uF488\uF489\uF48A\uF48B\uF48C\uF48D\uF48E\uF48F" +
-                "\uF490\uF491\uF492\uF493\uF494\uF495\uF496\uF497" +
-                "\uF498\uF499\uF49A\uF49B\uF49C\uF49D\uF49E\uF49F" +
-                "\uF4A0\uF4A1\uF4A2\uF4A3\uF4A4\uF4A5\uF4A6\uF4A7" +
-                "\uF4A8\uF4A9\uF4AA\uF4AB\uF4AC\uF4AD\uF4AE\uF4AF" +
-                "\uF4B0\uF4B1\uF4B2\uF4B3\uF4B4\uF4B5\uF4B6\uF4B7" +
-                "\uF4B8\uF4B9\uF4BA\uF4BB\uF4BC\uF4BD\uF4BE\uF4BF" +
-                "\uF4C0\uF4C1\uF4C2\uF4C3\uF4C4\uF4C5\uF4C6\uF4C7" +
-                "\uF4C8\uF4C9\uF4CA\uF4CB\uF4CC\uF4CD\uF4CE\uF4CF" +
-                "\uF4D0\uF4D1\uF4D2\uF4D3\uF4D4\uF4D5\uF4D6\uF4D7" +
-                "\uF4D8\uF4D9\uF4DA\uF4DB\uF4DC\uF4DD\uF4DE\uF4DF" +
-                "\uF4E0\uF4E1\uF4E2\uF4E3\uF4E4\uF4E5\uF4E6\uF4E7" +
-                "\uF4E8\uF4E9\uF4EA\uF4EB\uF4EC\uF4ED\uF4EE\uF4EF" +
-                "\uF4F0\uF4F1\uF4F2\uF4F3\uF4F4\uF4F5\uF4F6\uF4F7" +
-                "\uF4F8\uF4F9\uF4FA\uF4FB\uF4FC\uF4FD\uF4FE\uF4FF" +
-                "\uF500\uF501\uF502\uF503\uF504\uF505\uF506\uF507" +
-                "\uF508\uF509\uF50A\uF50B\uF50C\uF50D\uF50E\uF50F" +
-                "\uF510\uF511\uF512\uF513\uF514\uF515\uF516\uF517" +
-                "\uF518\uF519\uF51A\uF51B\uF51C\uF51D\uF51E\uF51F" +
-                "\uF520\uF521\uF522\uF523\uF524\uF525\uF526\uF527" +
-                "\uF528\uF529\uF52A\uF52B\uF52C\uF52D\uF52E\uF52F" +
-                "\uF530\uF531\uF532\uF533\uF534\uF535\uF536\uF537" +
-                "\uF538\uF539\uF53A\uF53B\uF53C\uF53D\uF53E\uF53F" +
-                "\uF540\uF541\uF542\uF543\uF544\uF545\uF546\uF547" +
-                "\uF548\uF549\uF54A\uF54B\uF54C\uF54D\uF54E\uF54F" +
-                "\uF550\uF551\uF552\uF553\uF554\uF555\uF556\uF557" +
-                "\uF558\uF559\uF55A\uF55B\uF55C\uF55D\uF55E\uF55F" +
-                "\uF560\uF561\uF562\uF563\uF564\uF565\uF566\uF567" +
-                "\uF568\uF569\uF56A\uF56B\uF56C\uF56D\uF56E\uF56F" +
-                "\uF570\uF571\uF572\uF573\uF574\uF575\uF576\uF577" +
-                "\uF578\uF579\uF57A\uF57B\uF57C\uF57D\uF57E\uF57F" +
-                "\uF580\uF581\uF582\uF583\uF584\uF585\uF586\uF587" +
-                "\uF588\uF589\uF58A\uF58B\uF58C\uF58D\uF58E\uF58F" +
-                "\uF590\uF591\uF592\uF593\uF594\uF595\uF596\uF597" +
-                "\uF598\uF599\uF59A\uF59B\uF59C\uF59D\uF59E\uF59F" +
-                "\uF5A0\uF5A1\uF5A2\uF5A3\uF5A4\uF5A5\uF5A6\uF5A7" +
-                "\uF5A8\uF5A9\uF5AA\uF5AB\uF5AC\uF5AD\uF5AE\uF5AF" +
-                "\uF5B0\uF5B1\uF5B2\uF5B3\uF5B4\uF5B5\uF5B6\uF5B7" +
-                "\uF5B8\uF5B9\uF5BA\uF5BB\uF5BC\uF5BD\uF5BE\uF5BF" +
-                "\uF5C0\uF5C1\uF5C2\uF5C3\uF5C4\uF5C5\uF5C6\uF5C7" +
-                "\uF5C8\uF5C9\uF5CA\uF5CB\uF5CC\uF5CD\uF5CE\uF5CF" +
-                "\uF5D0\uF5D1\uF5D2\uF5D3\uF5D4\uF5D5\uF5D6\uF5D7" +
-                "\uF5D8\uF5D9\uF5DA\uF5DB\uF5DC\uF5DD\uF5DE\uF5DF" +
-                "\uF5E0\uF5E1\uF5E2\uF5E3\uF5E4\uF5E5\uF5E6\uF5E7" +
-                "\uF5E8\uF5E9\uF5EA\uF5EB\uF5EC\uF5ED\uF5EE\uF5EF" +
-                "\uF5F0\uF5F1\uF5F2\uF5F3\uF5F4\uF5F5\uF5F6\uF5F7" +
-                "\uF5F8\uF5F9\uF5FA\uF5FB\uF5FC\uF5FD\uF5FE\uF5FF" +
-                "\uF600\uF601\uF602\uF603\uF604\uF605\uF606\uF607" +
-                "\uF608\uF609\uF60A\uF60B\uF60C\uF60D\uF60E\uF60F" +
-                "\uF610\uF611\uF612\uF613\uF614\uF615\uF616\uF617" +
-                "\uF618\uF619\uF61A\uF61B\uF61C\uF61D\uF61E\uF61F" +
-                "\uF620\uF621\uF622\uF623\uF624\uF625\uF626\uF627" +
-                "\uF628\uF629\uF62A\uF62B\uF62C\uF62D\uF62E\uF62F" +
-                "\uF630\uF631\uF632\uF633\uF634\uF635\uF636\uF637" +
-                "\uF638\uF639\uF63A\uF63B\uF63C\uF63D\uF63E\uF63F" +
-                "\uF640\uF641\uF642\uF643\uF644\uF645\uF646\uF647" +
-                "\uF648\uF649\uF64A\uF64B\uF64C\uF64D\uF64E\uF64F" +
-                "\uF650\uF651\uF652\uF653\uF654\uF655\uF656\uF657" +
-                "\uF658\uF659\uF65A\uF65B\uF65C\uF65D\uF65E\uF65F" +
-                "\uF660\uF661\uF662\uF663\uF664\uF665\uF666\uF667" +
-                "\uF668\uF669\uF66A\uF66B\uF66C\uF66D\uF66E\uF66F" +
-                "\uF670\uF671\uF672\uF673\uF674\uF675\uF676\uF677" +
-                "\uF678\uF679\uF67A\uF67B\uF67C\uF67D\uF67E\uF67F" +
-                "\uF680\uF681\uF682\uF683\uF684\uF685\uF686\uF687" +
-                "\uF688\uF689\uF68A\uF68B\uF68C\uF68D\uF68E\uF68F" +
-                "\uF690\uF691\uF692\uF693\uF694\uF695\uF696\uF697" +
-                "\uF698\uF699\uF69A\uF69B\uF69C\uF69D\uF69E\uF69F" +
-                "\uF6A0\uF6A1\uF6A2\uF6A3\uF6A4\uF6A5\uF6A6\uF6A7" +
-                "\uF6A8\uF6A9\uF6AA\uF6AB\uF6AC\uF6AD\uF6AE\uF6AF" +
-                "\uF6B0\uF6B1\uF6B2\uF6B3\uF6B4\uF6B5\uF6B6\uF6B7" +
-                "\uF6B8\uF6B9\uF6BA\uF6BB\uF6BC\uF6BD\uF6BE\uF6BF" +
-                "\uF6C0\uF6C1\uF6C2\uF6C3\uF6C4\uF6C5\uF6C6\uF6C7" +
-                "\uF6C8\uF6C9\uF6CA\uF6CB\uF6CC\uF6CD\uF6CE\uF6CF" +
-                "\uF6D0\uF6D1\uF6D2\uF6D3\uF6D4\uF6D5\uF6D6\uF6D7" +
-                "\uF6D8\uF6D9\uF6DA\uF6DB\uF6DC\uF6DD\uF6DE\uF6DF" +
-                "\uF6E0\uF6E1\uF6E2\uF6E3\uF6E4\uF6E5\uF6E6\uF6E7" +
-                "\uF6E8\uF6E9\uF6EA\uF6EB\uF6EC\uF6ED\uF6EE\uF6EF" +
-                "\uF6F0\uF6F1\uF6F2\uF6F3\uF6F4\uF6F5\uF6F6\uF6F7" +
-                "\uF6F8\uF6F9\uF6FA\uF6FB\uF6FC\uF6FD\uF6FE\uF6FF" +
-                "\uF700\uF701\uF702\uF703\uF704\uF705\uF706\uF707" +
-                "\uF708\uF709\uF70A\uF70B\uF70C\uF70D\uF70E\uF70F" +
-                "\uF710\uF711\uF712\uF713\uF714\uF715\uF716\uF717" +
-                "\uF718\uF719\uF71A\uF71B\uF71C\uF71D\uF71E\uF71F" +
-                "\uF720\uF721\uF722\uF723\uF724\uF725\uF726\uF727" +
-                "\uF728\uF729\uF72A\uF72B\uF72C\uF72D\uF72E\uF72F" +
-                "\uF730\uF731\uF732\uF733\uF734\uF735\uF736\uF737" +
-                "\uF738\uF739\uF73A\uF73B\uF73C\uF73D\uF73E\uF73F" +
-                "\uF740\uF741\uF742\uF743\uF744\uF745\uF746\uF747" +
-                "\uF748\uF749\uF74A\uF74B\uF74C\uF74D\uF74E\uF74F" +
-                "\uF750\uF751\uF752\uF753\uF754\uF755\uF756\uF757" +
-                "\uF758\uF759\uF75A\uF75B\uF75C\uF75D\uF75E\uF75F" +
-                "\uF760\uF761\uF762\uF763\uF764\uF765\uF766\uF767" +
-                "\uF768\uF769\uF76A\uF76B\uF76C\uF76D\uF76E\uF76F" +
-                "\uF770\uF771\uF772\uF773\uF774\uF775\uF776\uF777" +
-                "\uF778\uF779\uF77A\uF77B\uF77C\uF77D\uF77E\uF77F" +
-                "\uF780\uF781\uF782\uF783\uF784\uF785\uF786\uF787" +
-                "\uF788\uF789\uF78A\uF78B\uF78C\uF78D\uF78E\uF78F" +
-                "\uF790\uF791\uF792\uF793\uF794\uF795\uF796\uF797" +
-                "\uF798\uF799\uF79A\uF79B\uF79C\uF79D\uF79E\uF79F" +
-                "\uF7A0\uF7A1\uF7A2\uF7A3\uF7A4\uF7A5\uF7A6\uF7A7" +
-                "\uF7A8\uF7A9\uF7AA\uF7AB\uF7AC\uF7AD\uF7AE\uF7AF" +
-                "\uF7B0\uF7B1\uF7B2\uF7B3\uF7B4\uF7B5\uF7B6\uF7B7" +
-                "\uF7B8\uF7B9\uF7BA\uF7BB\uF7BC\uF7BD\uF7BE\uF7BF" +
-                "\uF7C0\uF7C1\uF7C2\uF7C3\uF7C4\uF7C5\uF7C6\uF7C7" +
-                "\uF7C8\uF7C9\uF7CA\uF7CB\uF7CC\uF7CD\uF7CE\uF7CF" +
-                "\uF7D0\uF7D1\uF7D2\uF7D3\uF7D4\uF7D5\uF7D6\uF7D7" +
-                "\uF7D8\uF7D9\uF7DA\uF7DB\uF7DC\uF7DD\uF7DE\uF7DF" +
-                "\uF7E0\uF7E1\uF7E2\uF7E3\uF7E4\uF7E5\uF7E6\uF7E7" +
-                "\uF7E8\uF7E9\uF7EA\uF7EB\uF7EC\uF7ED\uF7EE\uF7EF" +
-                "\uF7F0\uF7F1\uF7F2\uF7F3\uF7F4\uF7F5\uF7F6\uF7F7" +
-                "\uF7F8\uF7F9\uF7FA\uF7FB\uF7FC\uF7FD\uF7FE\uF7FF" +
-                "\uF800\uF801\uF802\uF803\uF804\uF805\uF806\uF807" +
-                "\uF808\uF809\uF80A\uF80B\uF80C\uF80D\uF80E\uF80F" +
-                "\uF810\uF811\uF812\uF813\uF814\uF815\uF816\uF817" +
-                "\uF818\uF819\uF81A\uF81B\uF81C\uF81D\uF81E\uF81F" +
-                "\uF820\uF821\uF822\uF823\uF824\uF825\uF826\uF827" +
-                "\uF828\uF829\uF82A\uF82B\uF82C\uF82D\uF82E\uF82F" +
-                "\uF830\uF831\uF832\uF833\uF834\uF835\uF836\uF837" +
-                "\uF838\uF839\uF83A\uF83B\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD"
-                ;
-            mappingTableG2ad =
-                "\u309B\u309C\u00A8\uFF3E\u30FD\u30FE\u309D\u309E" +
-                "\u02BA\uF83E\u3005\u3006\u3007\u30FC\u2010\uFF3B" +
-                "\uFF3D\u00B4\u2033\u273D\u3013\u2208\u220B\u2286" +
-                "\u2287\u2282\u2283\u2227\u2228\u21D2\u21D4\u2200" +
-                "\u2203\u2312\u2202\u2207\u226A\u226B\u223D\u221D" +
-                "\u222C\u212B\u2030\u266F\u266D\u266A\u2020\u2021" +
-                "\u00B6\u25EF\u3041\u3042\u3043\u3044\u3045\u3046" +
-                "\u3047\u3048\u3049\u304A\u304B\u304C\u304D\u304E" +
-                "\u304F\u3050\u3051\u3052\u3053\u3054\u3055\u3056" +
-                "\u3057\u3058\u3059\u305A\u305B\u305C\u305D\u305E" +
-                "\u305F\u3060\u3061\u3062\u3063\u3064\u3065\u3066" +
-                "\u3067\u3068\u3069\u306A\u306B\u306C\u306D\u306E" +
-                "\u306F\u3070\u3071\u3072\u3073\u3074\u3075\u3076" +
-                "\u3077\u3078\u3079\u307A\u307B\u307C\u307D\u307E" +
-                "\u307F\u3080\u3081\u3082\u3083\u3084\u3085\u3086" +
-                "\u3087\u3088\u3089\u308A\u308B\u308C\u308D\u308E" +
-                "\u308F\u3090\u3091\u3092\u3093\u30A1\u30A2\u30A3" +
-                "\u30A4\u30A5\u30A6\u30A7\u30A8\u30A9\u30AA\u30AB" +
-                "\u30AC\u30AD\u30AE\u30AF\u30B0\u30B1\u30B2\u30B3" +
-                "\u30B4\u30B5\u30B6\u30B7\u30B8\u30B9\u30BA\u30BB" +
-                "\u30BC\u30BD\u30BE\u30BF\u30C0\u30C1\u30C2\u30C3" +
-                "\u30C4\u30C5\u30C6\u30C7\u30C8\u30C9\u30CA\u30CB" +
-                "\u30CC\u30CD\u30CE\u30CF\u30D0\u30D1\u30D2\u30D3" +
-                "\u30D4\u30D5\u30D6\u30D7\u30D8\u30D9\u30DA\u30DB" +
-                "\u30DC\u30DD\u30DE\u30DF\u30E0\u30E1\u30E2\u30E3" +
-                "\u30E4\u30E5\u30E6\u30E7\u30E8\u30E9\u30EA\u30EB" +
-                "\u30EC\u30ED\u30EE\u30EF\u30F0\u30F1\u30F2\u30F3" +
-                "\u30F4\u30F5\u30F6\u0410\u0411\u0412\u0413\u0414" +
-                "\u0415\u0401\u0416\u0417\u0418\u0419\u041A\u041B" +
-                "\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423" +
-                "\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B" +
-                "\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433" +
-                "\u0434\u0435\u0451\u0436\u0437\u0438\u0439\u043A" +
-                "\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442" +
-                "\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A" +
-                "\u044B\u044C\u044D\u044E\u044F\u2501\u2503\u250F" +
-                "\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B" +
-                "\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525" +
-                "\u2538\u2542\uF83F\uF840\uF841\uF842\u21E7\u21B8" +
-                "\u21B9\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121" +
-                "\u6491\uFA0C\u691E\uFA0D\u6EB8\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +
-                "\uFFFD\uFFFD\uFFFD\uFFFD"
-                ;
-        }
-    }
-
-    protected static class Encoder extends SimpleEUCEncoder {
-
-        public Encoder(Charset cs) {
-            super(cs);
-            super.mask1 = 0xFFC0;
-            super.mask2 = 0x003F;
-            super.shift = 6;
-            super.index1 = index1;
-            super.index2 = index2;
-            super.index2a = index2a;
-            super.index2b = index2b;
-            super.index2c = index2c;
-        }
-
-        private static final short index1[] =
-        {
-                19535, 13095, 12408, 11748,   223,   223,   223,   223, // 0000 - 01FF
-                  223,   223,  9457, 14043,   223,   223, 10349, 11067, // 0200 - 03FF
-                24969, 10729,   223,   223,   223,   223,   223,   223, // 0400 - 05FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 0600 - 07FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 0800 - 09FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 0A00 - 0BFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 0C00 - 0DFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 0E00 - 0FFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 1000 - 11FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 1200 - 13FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 1400 - 15FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 1600 - 17FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 1800 - 19FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 1A00 - 1BFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 1C00 - 1DFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 1E00 - 1FFF
-                24401,   223,   223,   223, 24353, 12626,  9241,  8204, // 2000 - 21FF
-                10119,  9193, 16486,   223,  8250,   223,   223,   223, // 2200 - 23FF
-                 9582,  9616,   223,   223,  9083, 13986, 24230, 15436, // 2400 - 25FF
-                21619,  8517,   223,   223,   226,   223,   223,   223, // 2600 - 27FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 2800 - 29FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 2A00 - 2BFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 2C00 - 2DFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 2E00 - 2FFF
-                 7839, 22767,  7071,  6753, 10302,   223,   223,   223, // 3000 - 31FF
-                 8269,   223,  7166,   223,   223,   223,  8124,  9301, // 3200 - 33FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 3400 - 35FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 3600 - 37FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 3800 - 39FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 3A00 - 3BFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 3C00 - 3DFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 3E00 - 3FFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 4000 - 41FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 4200 - 43FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 4400 - 45FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 4600 - 47FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 4800 - 49FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 4A00 - 4BFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // 4C00 - 4DFF
-                 6625,  8699, 27828, 28393, 28329,  6879, 28265, 28014, // 4E00 - 4FFF
-                27766, 27640, 27576, 21185, 27512, 27325, 27198, 27888, // 5000 - 51FF
-                27073, 20233, 26946, 26882, 17057, 26818, 27387, 11327, // 5200 - 53FF
-                19346, 26754, 26690, 26626, 26179, 26562, 26498, 26434, // 5400 - 55FF
-                26370, 26306, 26053, 25989, 18008, 25863, 25799, 19472, // 5600 - 57FF
-                25735,  8573, 25671, 17817,  9518, 25607, 25480, 25416, // 5800 - 59FF
-                25289, 25225,  7520, 25161,  7647, 25097, 25033, 24846, // 5A00 - 5BFF
-                  289, 24656, 21560, 12466, 24592, 24528, 24167, 24103, // 5C00 - 5DFF
-                13031, 24039, 23912,   156, 12969, 23848, 23784, 23720, // 5E00 - 5FFF
-                23597, 23533, 23469, 23405, 23341, 23214, 23150, 11202, // 6000 - 61FF
-                23086, 23022, 22958, 11451, 22831, 22704, 22577, 22454, // 6200 - 63FF
-                11806, 22390, 14386,  9741, 22326,  8010, 22262,  6816, // 6400 - 65FF
-                22138, 28077, 21948, 21884, 21820, 23656, 28140, 21756, // 6600 - 67FF
-                 7885, 21692, 21502, 24906, 22198, 21377, 12060, 27261, // 6800 - 69FF
-                21313, 21249, 21122, 11389, 21058, 27009, 20994, 20930, // 6A00 - 6BFF
-                20866, 20739, 20675, 20489, 20425, 20361, 20297, 20170, // 6C00 - 6DFF
-                20106, 19983,  8325, 19919, 19855, 19791, 19727, 19663, // 6E00 - 6FFF
-                19599, 19283, 10665, 22513, 19159, 26116, 19095, 19031, // 7000 - 71FF
-                26242, 25543, 18967, 18903, 18839, 18775, 18711, 18647, // 7200 - 73FF
-                18583, 18519, 18455, 18391, 18327, 18263, 18199, 18135, // 7400 - 75FF
-                17945, 10475, 25352, 11139, 24719, 19219, 17881, 10181, // 7600 - 77FF
-                10243, 27134, 17691, 24782, 24464, 17627, 23975, 17502, // 7800 - 79FF
-                17438, 17374, 17310, 17246, 17121, 16998,  9678, 16934, // 7A00 - 7BFF
-                16870, 16806, 16742, 20548, 16678, 16614, 16550, 16424, // 7C00 - 7DFF
-                27448, 16297, 16204,   223, 15502, 28201, 21438, 16140, // 7E00 - 7FFF
-                16076, 17563, 24292,  7947, 15949, 17182, 15885, 15821, // 8000 - 81FF
-                15757, 15693, 15566, 15315, 15251, 15187, 23277, 15123, // 8200 - 83FF
-                22894, 14960, 27950, 14896, 14769, 14642, 14578, 14514, // 8400 - 85FF
-                14450, 14324, 20042, 14197, 14133, 13924, 22640, 13860, // 8600 - 87FF
-                13796, 13732, 13542, 13415, 22011, 22074, 20802, 13351, // 8800 - 89FF
-                13287, 13223, 20611, 13159, 12813, 12749, 12594,   223, // 8A00 - 8BFF
-                21628, 19409, 12530, 12344, 12252, 12906, 12188, 18071, // 8C00 - 8DFF
-                12124, 11998, 17754, 11934, 11870, 11707,  7203, 27702, // 8E00 - 8FFF
-                11643, 16360, 11579, 16012, 11515, 11266, 11003, 10939, // 9000 - 91FF
-                10875, 10811, 10603, 10539, 10413, 10055,  9997,  9933, // 9200 - 93FF
-                 9869,  9805,  9451,   223,   223, 11077,  9387,  9147, // 9400 - 95FF
-                15059,  9019,  8955,  8891,  8827, 25925,  8763, 15629, // 9600 - 97FF
-                 8637, 15378, 14069,  8453,  8389, 15023,    93, 14832, // 9800 - 99FF
-                14705,  8074, 12280,  7775, 14260, 13605,  7711,  7584, // 9A00 - 9BFF
-                12685,  7459,   223, 16233,  7395,  7331,  7267, 13668, // 9C00 - 9DFF
-                 7135, 10747,  7007,  6943,  6689,  6561,    51,   223, // 9E00 - 9FFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // A000 - A1FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // A200 - A3FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // A400 - A5FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // A600 - A7FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // A800 - A9FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // AA00 - ABFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // AC00 - ADFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // AE00 - AFFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // B000 - B1FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // B200 - B3FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // B400 - B5FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // B600 - B7FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // B800 - B9FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // BA00 - BBFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // BC00 - BDFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // BE00 - BFFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // C000 - C1FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // C200 - C3FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // C400 - C5FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // C600 - C7FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // C800 - C9FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // CA00 - CBFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // CC00 - CDFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // CE00 - CFFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // D000 - D1FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // D200 - D3FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // D400 - D5FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // D600 - D7FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // D800 - D9FF
-                  223,   223,   223,   223,   223,   223,   223,   223, // DA00 - DBFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // DC00 - DDFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // DE00 - DFFF
-                 6497,  6433,  6369,  6305,  6241,  6177,  6113,  6049, // E000 - E1FF
-                 5985,  5921,  5857,  5793,  5729,  5665,  5601,  5537, // E200 - E3FF
-                 5473,  5409,  5345,  5281,  5217,  5153,  5089,  5025, // E400 - E5FF
-                 4961,  4897,  4833,  4769,  4705,  4641,  4577,  4513, // E600 - E7FF
-                 4449,  4385,  4321,  4257,  4193,  4129,  4065,  4001, // E800 - E9FF
-                 3937,  3873,  3809,  3745,  3681,  3617,  3553,  3489, // EA00 - EBFF
-                 3425,  3361,  3297,  3233,  3169,  3105,  3041,  2977, // EC00 - EDFF
-                 2913,  2849,  2785,  2721,  2657,  2593,  2529,  2465, // EE00 - EFFF
-                 2401,  2337,  2273,  2209,  2145,  2081,  2017,  1953, // F000 - F1FF
-                 1889,  1825,  1761,  1697,  1633,  1569,  1505,  1441, // F200 - F3FF
-                 1377,  1313,  1249,  1185,  1121,  1057,   993,   929, // F400 - F5FF
-                  865,   801,   737,   673,   609,   545,   481,   417, // F600 - F7FF
-                  353,   220,   223,   223,   223,   223,   223,   223, // F800 - F9FF
-                15488,   223,   223,   223,   223,   223,   223,   223, // FA00 - FBFF
-                  223,   223,   223,   223,   223,   223,   223,   223, // FC00 - FDFF
-                 9323,     0,   223,   223, 13478, 12876,   223,  8158,
-        };
-
-        private final static String index2;
-        private final static String index2a;
-        private final static String index2b;
-        private final static String index2c;
-        static {
-            index2 =
-                "\u0000\uA1D5\u0000\uA1D8\u0000\uA1D9\u0000\uA1DC\u0000\uA1DD" + //     0 -     4
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA2A7" + //     5 -     9
-                "\u0000\uA2A8\u0000\uA2AB\u0000\uA2AC\u0000\uA2A9\u0000\uA2AA" + //    10 -    14
-                "\u0000\uA1BD\u0000\uA1AE\u0000\uA1AF\u0000\uA1B0\u0000\u0000" + //    15 -    19
-                "\u0000\uA1B2\u0000\uA1B3\u0000\uA1B4\u0000\uA1B5\u0000\uA1B9" + //    20 -    24
-                "\u0000\uA1DE\u0000\uA1DF\u0000\uA1E0\u0000\uA1E1\u0000\uA1E2" + //    25 -    29
-                "\u0000\uA1E3\u0000\uA2AD\u0000\uA2AE\u0000\uA2AF\u0000\uA2BF" + //    30 -    34
-                "\u0000\uA2C0\u0000\uA2C1\u0000\uA2C2\u0000\uA2C3\u0000\u0000" + //    35 -    39
-                "\u0000\uA2E2\u0000\uA2EC\u0000\uA2ED\u0000\uA2EE\u0000\u0000" + //    40 -    44
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //    45 -    49
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //    50 -    54
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //    55 -    59
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3BE" + //    60 -    64
-                "\u0000\u0000\u0000\u0000\u0000\uF8B2\u8EA2\uEBCD\u8EA2\uEDC3" + //    65 -    69
-                "\u0000\u0000\u0000\uFCB3\u8EA2\uEEFB\u0000\u0000\u0000\u0000" + //    70 -    74
-                "\u8EA2\uF2C4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3BF" + //    75 -    79
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uE1C2\u0000\u0000" + //    80 -    84
-                "\u8EA2\uEEFC\u0000\u0000\u8EA2\uF1EF\u0000\u0000\u0000\u0000" + //    85 -    89
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //    90 -    94
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //    95 -    99
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   100 -   104
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   105 -   109
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   110 -   114
-                "\u0000\uD3FB\u8EA2\uBAB4\u8EA2\uE0E1\u0000\uD3FC\u0000\u0000" + //   115 -   119
-                "\u0000\u0000\u8EA2\uCFBA\u8EA2\uCFB9\u8EA2\uDBEC\u0000\u0000" + //   120 -   124
-                "\u0000\u0000\u8EA2\uE0E3\u0000\u0000\u8EA2\uE0E2\u0000\u0000" + //   125 -   129
-                "\u0000\uF7F6\u8EA2\uE7FD\u8EA2\uE7FE\u0000\uFAD4\u0000\u0000" + //   130 -   134
-                "\u0000\u0000\u8EA2\uF2A2\u0000\uD8EB\u0000\uE3A6\u0000\uE3A5" + //   135 -   139
-                "\u8EA2\uC8EA\u8EA2\uC8EC\u0000\uE7EA\u8EA2\uC8EB\u0000\uE7E9" + //   140 -   144
-                "\u0000\uE7EB\u8EA2\uC8ED\u0000\u0000\u0000\u0000\u0000\u0000" + //   145 -   149
-                "\u8EA2\uCFBC\u8EA2\uCFBE\u8EA2\uCFBD\u0000\u0000\u8EA2\uCFC0" + //   150 -   154
-                "\u0000\u0000\u0000\u0000\u0000\uDFA1\u0000\uDFA2\u0000\u0000" + //   155 -   159
-                "\u0000\uDFA3\u8EA2\uC2E3\u8EA2\uC2E5\u8EA2\uC2E7\u0000\uE3EE" + //   160 -   164
-                "\u0000\uE3ED\u0000\uDEFE\u8EA2\uC2E6\u8EA2\uC2E4\u0000\u0000" + //   165 -   169
-                "\u8EA2\uC9FD\u0000\u0000\u0000\u0000\u8EA2\uC9FB\u8EA2\uCAA3" + //   170 -   174
-                "\u0000\uE8E0\u8EA2\uCAA4\u8EA2\uCAA1\u0000\uE8E1\u8EA2\uC9FC" + //   175 -   179
-                "\u8EA2\uC9FA\u8EA2\uCAA2\u0000\uECDA\u8EA2\uD0BC\u8EA2\uC9FE" + //   180 -   184
-                "\u0000\uECDC\u8EA2\uD0BD\u0000\uECDB\u0000\uECDE\u8EA2\uD0BE" + //   185 -   189
-                "\u0000\uECD9\u0000\uECDD\u0000\u0000\u8EA2\uD6FD\u8EA2\uD6FB" + //   190 -   194
-                "\u8EA2\uD6FA\u8EA2\uD6FC\u8EA2\uD6F9\u0000\u0000\u0000\u0000" + //   195 -   199
-                "\u0000\uF8B3\u0000\u0000\u8EA2\uE8F2\u8EA2\uE8F3\u0000\u0000" + //   200 -   204
-                "\u8EA2\uEBD9\u8EA2\uEDCD\u0000\uFDA2\u0000\uA7D5\u0000\u0000" + //   205 -   209
-                "\u0000\uCDB7\u0000\uCAAC\u0000\u0000\u0000\u0000\u0000\uD0FA" + //   210 -   214
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC4DC\u0000\uC5BD" + //   215 -   219
-                "\u8EAD\uA4BA\u8EAD\uA4BB\u8EAD\uA4BC\u0000\u0000\u0000\u0000" + //   220 -   224
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   225 -   229
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   230 -   234
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   235 -   239
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   240 -   244
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   245 -   249
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   250 -   254
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   255 -   259
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   260 -   264
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   265 -   269
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   270 -   274
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   275 -   279
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   280 -   284
-                "\u0000\u0000\u0000\u0000\u8EAD\uA1B4\u0000\u0000\u0000\u0000" + //   285 -   289
-                "\u0000\uD0EC\u0000\u0000\u8EA2\uAEEB\u0000\uD5AB\u0000\u0000" + //   290 -   294
-                "\u0000\u0000\u0000\uD9F2\u0000\uD9F1\u0000\uD9F0\u0000\uDEF1" + //   295 -   299
-                "\u0000\uDEF2\u8EA2\uBBBB\u0000\uE8D7\u0000\uF0D2\u0000\uC4D1" + //   300 -   304
-                "\u8EA2\uA1BC\u0000\uC5B7\u8EA2\uA1D5\u0000\u0000\u0000\u0000" + //   305 -   309
-                "\u8EA2\uA2B4\u0000\uC7FA\u0000\u0000\u0000\u0000\u0000\u0000" + //   310 -   314
-                "\u0000\uCCFE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //   315 -   319
-                "\u8EA2\uC2D1\u0000\u0000\u0000\u0000\u0000\uC4D2\u0000\u0000" + //   320 -   324
-                "\u0000\uC5B8\u8EA2\uA2B5\u0000\u0000\u0000\u0000\u8EA2\uA3DE" + //   325 -   329
-                "\u0000\u0000\u8EA2\uA3DF\u0000\u0000\u0000\uC9FC\u0000\u0000" + //   330 -   334
-                "\u0000\u0000\u0000\u0000\u8EA2\uBBBC\u0000\uDEF3\u0000\u0000" + //   335 -   339
-                "\u8EA2\uC2D2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3D3" + //   340 -   344
-                "\u0000\uC4D3\u0000\uC4E7\u0000\uC5B9\u8EA2\uA1D6\u0000\uC6C7" + //   345 -   349
-                "\u0000\u0000\u0000\uCAA2\u0000\uCAA1\u8EAC\uE2C3\u8EAC\uE2C4" + //   350 -   354
-                "\u8EAC\uE2C5\u8EAC\uE2C6\u8EAC\uE2C7\u8EAC\uE2C8\u8EAC\uE2C9" + //   355 -   359
-                "\u8EAC\uE2CA\u8EAC\uE2CB\u8EAC\uE2CC\u8EAC\uE2CD\u8EAC\uE2CE" + //   360 -   364
-                "\u8EAC\uE2CF\u8EAC\uE2D0\u8EAC\uE2D1\u8EAC\uE2D2\u8EAC\uE2D3" + //   365 -   369
-                "\u8EAC\uE2D4\u8EAC\uE2D5\u8EAC\uE2D6\u8EAC\uE2D7\u8EAC\uE2D8" + //   370 -   374
-                "\u8EAC\uE2D9\u8EAC\uE2DA\u8EAC\uE2DB\u8EAC\uE2DC\u8EAC\uE2DD" + //   375 -   379
-                "\u8EAC\uE2DE\u8EAC\uE2DF\u8EAC\uE2E0\u8EAC\uE2E1\u8EAC\uE2E2" + //   380 -   384
-                "\u8EAC\uE2E3\u8EAC\uE2E4\u8EAC\uE2E5\u8EAC\uE2E6\u8EAC\uE2E7" + //   385 -   389
-                "\u8EAC\uE2E8\u8EAC\uE2E9\u8EAC\uE2EA\u8EAC\uE2EB\u8EAC\uE2EC" + //   390 -   394
-                "\u8EAC\uE2ED\u8EAC\uE2EE\u8EAC\uE2EF\u8EAC\uE2F0\u8EAC\uE2F1" + //   395 -   399
-                "\u8EAC\uE2F2\u8EAC\uE2F3\u8EAC\uE2F4\u8EAC\uE2F5\u8EAC\uE2F6" + //   400 -   404
-                "\u8EAC\uE2F7\u8EAC\uE2F8\u8EAC\uE2F9\u8EAC\uE2FA\u8EAC\uE2FB" + //   405 -   409
-                "\u8EAC\uE2FC\u8EAC\uE2FD\u8EAC\uE2FE\u0000\u0000\u0000\u0000" + //   410 -   414
-                "\u8EAD\uA1AA\u8EAD\uA4B9\u8EAC\uE1E1\u8EAC\uE1E2\u8EAC\uE1E3" + //   415 -   419
-                "\u8EAC\uE1E4\u8EAC\uE1E5\u8EAC\uE1E6\u8EAC\uE1E7\u8EAC\uE1E8" + //   420 -   424
-                "\u8EAC\uE1E9\u8EAC\uE1EA\u8EAC\uE1EB\u8EAC\uE1EC\u8EAC\uE1ED" + //   425 -   429
-                "\u8EAC\uE1EE\u8EAC\uE1EF\u8EAC\uE1F0\u8EAC\uE1F1\u8EAC\uE1F2" + //   430 -   434
-                "\u8EAC\uE1F3\u8EAC\uE1F4\u8EAC\uE1F5\u8EAC\uE1F6\u8EAC\uE1F7" + //   435 -   439
-                "\u8EAC\uE1F8\u8EAC\uE1F9\u8EAC\uE1FA\u8EAC\uE1FB\u8EAC\uE1FC" + //   440 -   444
-                "\u8EAC\uE1FD\u8EAC\uE1FE\u8EAC\uE2A1\u8EAC\uE2A2\u8EAC\uE2A3" + //   445 -   449
-                "\u8EAC\uE2A4\u8EAC\uE2A5\u8EAC\uE2A6\u8EAC\uE2A7\u8EAC\uE2A8" + //   450 -   454
-                "\u8EAC\uE2A9\u8EAC\uE2AA\u8EAC\uE2AB\u8EAC\uE2AC\u8EAC\uE2AD" + //   455 -   459
-                "\u8EAC\uE2AE\u8EAC\uE2AF\u8EAC\uE2B0\u8EAC\uE2B1\u8EAC\uE2B2" + //   460 -   464
-                "\u8EAC\uE2B3\u8EAC\uE2B4\u8EAC\uE2B5\u8EAC\uE2B6\u8EAC\uE2B7" + //   465 -   469
-                "\u8EAC\uE2B8\u8EAC\uE2B9\u8EAC\uE2BA\u8EAC\uE2BB\u8EAC\uE2BC" + //   470 -   474
-                "\u8EAC\uE2BD\u8EAC\uE2BE\u8EAC\uE2BF\u8EAC\uE2C0\u8EAC\uE2C1" + //   475 -   479
-                "\u8EAC\uE2C2\u8EAC\uE1A1\u8EAC\uE1A2\u8EAC\uE1A3\u8EAC\uE1A4" + //   480 -   484
-                "\u8EAC\uE1A5\u8EAC\uE1A6\u8EAC\uE1A7\u8EAC\uE1A8\u8EAC\uE1A9" + //   485 -   489
-                "\u8EAC\uE1AA\u8EAC\uE1AB\u8EAC\uE1AC\u8EAC\uE1AD\u8EAC\uE1AE" + //   490 -   494
-                "\u8EAC\uE1AF\u8EAC\uE1B0\u8EAC\uE1B1\u8EAC\uE1B2\u8EAC\uE1B3" + //   495 -   499
-                "\u8EAC\uE1B4\u8EAC\uE1B5\u8EAC\uE1B6\u8EAC\uE1B7\u8EAC\uE1B8" + //   500 -   504
-                "\u8EAC\uE1B9\u8EAC\uE1BA\u8EAC\uE1BB\u8EAC\uE1BC\u8EAC\uE1BD" + //   505 -   509
-                "\u8EAC\uE1BE\u8EAC\uE1BF\u8EAC\uE1C0\u8EAC\uE1C1\u8EAC\uE1C2" + //   510 -   514
-                "\u8EAC\uE1C3\u8EAC\uE1C4\u8EAC\uE1C5\u8EAC\uE1C6\u8EAC\uE1C7" + //   515 -   519
-                "\u8EAC\uE1C8\u8EAC\uE1C9\u8EAC\uE1CA\u8EAC\uE1CB\u8EAC\uE1CC" + //   520 -   524
-                "\u8EAC\uE1CD\u8EAC\uE1CE\u8EAC\uE1CF\u8EAC\uE1D0\u8EAC\uE1D1" + //   525 -   529
-                "\u8EAC\uE1D2\u8EAC\uE1D3\u8EAC\uE1D4\u8EAC\uE1D5\u8EAC\uE1D6" + //   530 -   534
-                "\u8EAC\uE1D7\u8EAC\uE1D8\u8EAC\uE1D9\u8EAC\uE1DA\u8EAC\uE1DB" + //   535 -   539
-                "\u8EAC\uE1DC\u8EAC\uE1DD\u8EAC\uE1DE\u8EAC\uE1DF\u8EAC\uE1E0" + //   540 -   544
-                "\u8EAC\uE0BF\u8EAC\uE0C0\u8EAC\uE0C1\u8EAC\uE0C2\u8EAC\uE0C3" + //   545 -   549
-                "\u8EAC\uE0C4\u8EAC\uE0C5\u8EAC\uE0C6\u8EAC\uE0C7\u8EAC\uE0C8" + //   550 -   554
-                "\u8EAC\uE0C9\u8EAC\uE0CA\u8EAC\uE0CB\u8EAC\uE0CC\u8EAC\uE0CD" + //   555 -   559
-                "\u8EAC\uE0CE\u8EAC\uE0CF\u8EAC\uE0D0\u8EAC\uE0D1\u8EAC\uE0D2" + //   560 -   564
-                "\u8EAC\uE0D3\u8EAC\uE0D4\u8EAC\uE0D5\u8EAC\uE0D6\u8EAC\uE0D7" + //   565 -   569
-                "\u8EAC\uE0D8\u8EAC\uE0D9\u8EAC\uE0DA\u8EAC\uE0DB\u8EAC\uE0DC" + //   570 -   574
-                "\u8EAC\uE0DD\u8EAC\uE0DE\u8EAC\uE0DF\u8EAC\uE0E0\u8EAC\uE0E1" + //   575 -   579
-                "\u8EAC\uE0E2\u8EAC\uE0E3\u8EAC\uE0E4\u8EAC\uE0E5\u8EAC\uE0E6" + //   580 -   584
-                "\u8EAC\uE0E7\u8EAC\uE0E8\u8EAC\uE0E9\u8EAC\uE0EA\u8EAC\uE0EB" + //   585 -   589
-                "\u8EAC\uE0EC\u8EAC\uE0ED\u8EAC\uE0EE\u8EAC\uE0EF\u8EAC\uE0F0" + //   590 -   594
-                "\u8EAC\uE0F1\u8EAC\uE0F2\u8EAC\uE0F3\u8EAC\uE0F4\u8EAC\uE0F5" + //   595 -   599
-                "\u8EAC\uE0F6\u8EAC\uE0F7\u8EAC\uE0F8\u8EAC\uE0F9\u8EAC\uE0FA" + //   600 -   604
-                "\u8EAC\uE0FB\u8EAC\uE0FC\u8EAC\uE0FD\u8EAC\uE0FE\u8EAC\uDFDD" + //   605 -   609
-                "\u8EAC\uDFDE\u8EAC\uDFDF\u8EAC\uDFE0\u8EAC\uDFE1\u8EAC\uDFE2" + //   610 -   614
-                "\u8EAC\uDFE3\u8EAC\uDFE4\u8EAC\uDFE5\u8EAC\uDFE6\u8EAC\uDFE7" + //   615 -   619
-                "\u8EAC\uDFE8\u8EAC\uDFE9\u8EAC\uDFEA\u8EAC\uDFEB\u8EAC\uDFEC" + //   620 -   624
-                "\u8EAC\uDFED\u8EAC\uDFEE\u8EAC\uDFEF\u8EAC\uDFF0\u8EAC\uDFF1" + //   625 -   629
-                "\u8EAC\uDFF2\u8EAC\uDFF3\u8EAC\uDFF4\u8EAC\uDFF5\u8EAC\uDFF6" + //   630 -   634
-                "\u8EAC\uDFF7\u8EAC\uDFF8\u8EAC\uDFF9\u8EAC\uDFFA\u8EAC\uDFFB" + //   635 -   639
-                "\u8EAC\uDFFC\u8EAC\uDFFD\u8EAC\uDFFE\u8EAC\uE0A1\u8EAC\uE0A2" + //   640 -   644
-                "\u8EAC\uE0A3\u8EAC\uE0A4\u8EAC\uE0A5\u8EAC\uE0A6\u8EAC\uE0A7" + //   645 -   649
-                "\u8EAC\uE0A8\u8EAC\uE0A9\u8EAC\uE0AA\u8EAC\uE0AB\u8EAC\uE0AC" + //   650 -   654
-                "\u8EAC\uE0AD\u8EAC\uE0AE\u8EAC\uE0AF\u8EAC\uE0B0\u8EAC\uE0B1" + //   655 -   659
-                "\u8EAC\uE0B2\u8EAC\uE0B3\u8EAC\uE0B4\u8EAC\uE0B5\u8EAC\uE0B6" + //   660 -   664
-                "\u8EAC\uE0B7\u8EAC\uE0B8\u8EAC\uE0B9\u8EAC\uE0BA\u8EAC\uE0BB" + //   665 -   669
-                "\u8EAC\uE0BC\u8EAC\uE0BD\u8EAC\uE0BE\u8EAC\uDEFB\u8EAC\uDEFC" + //   670 -   674
-                "\u8EAC\uDEFD\u8EAC\uDEFE\u8EAC\uDFA1\u8EAC\uDFA2\u8EAC\uDFA3" + //   675 -   679
-                "\u8EAC\uDFA4\u8EAC\uDFA5\u8EAC\uDFA6\u8EAC\uDFA7\u8EAC\uDFA8" + //   680 -   684
-                "\u8EAC\uDFA9\u8EAC\uDFAA\u8EAC\uDFAB\u8EAC\uDFAC\u8EAC\uDFAD" + //   685 -   689
-                "\u8EAC\uDFAE\u8EAC\uDFAF\u8EAC\uDFB0\u8EAC\uDFB1\u8EAC\uDFB2" + //   690 -   694
-                "\u8EAC\uDFB3\u8EAC\uDFB4\u8EAC\uDFB5\u8EAC\uDFB6\u8EAC\uDFB7" + //   695 -   699
-                "\u8EAC\uDFB8\u8EAC\uDFB9\u8EAC\uDFBA\u8EAC\uDFBB\u8EAC\uDFBC" + //   700 -   704
-                "\u8EAC\uDFBD\u8EAC\uDFBE\u8EAC\uDFBF\u8EAC\uDFC0\u8EAC\uDFC1" + //   705 -   709
-                "\u8EAC\uDFC2\u8EAC\uDFC3\u8EAC\uDFC4\u8EAC\uDFC5\u8EAC\uDFC6" + //   710 -   714
-                "\u8EAC\uDFC7\u8EAC\uDFC8\u8EAC\uDFC9\u8EAC\uDFCA\u8EAC\uDFCB" + //   715 -   719
-                "\u8EAC\uDFCC\u8EAC\uDFCD\u8EAC\uDFCE\u8EAC\uDFCF\u8EAC\uDFD0" + //   720 -   724
-                "\u8EAC\uDFD1\u8EAC\uDFD2\u8EAC\uDFD3\u8EAC\uDFD4\u8EAC\uDFD5" + //   725 -   729
-                "\u8EAC\uDFD6\u8EAC\uDFD7\u8EAC\uDFD8\u8EAC\uDFD9\u8EAC\uDFDA" + //   730 -   734
-                "\u8EAC\uDFDB\u8EAC\uDFDC\u8EAC\uDEBB\u8EAC\uDEBC\u8EAC\uDEBD" + //   735 -   739
-                "\u8EAC\uDEBE\u8EAC\uDEBF\u8EAC\uDEC0\u8EAC\uDEC1\u8EAC\uDEC2" + //   740 -   744
-                "\u8EAC\uDEC3\u8EAC\uDEC4\u8EAC\uDEC5\u8EAC\uDEC6\u8EAC\uDEC7" + //   745 -   749
-                "\u8EAC\uDEC8\u8EAC\uDEC9\u8EAC\uDECA\u8EAC\uDECB\u8EAC\uDECC" + //   750 -   754
-                "\u8EAC\uDECD\u8EAC\uDECE\u8EAC\uDECF\u8EAC\uDED0\u8EAC\uDED1" + //   755 -   759
-                "\u8EAC\uDED2\u8EAC\uDED3\u8EAC\uDED4\u8EAC\uDED5\u8EAC\uDED6" + //   760 -   764
-                "\u8EAC\uDED7\u8EAC\uDED8\u8EAC\uDED9\u8EAC\uDEDA\u8EAC\uDEDB" + //   765 -   769
-                "\u8EAC\uDEDC\u8EAC\uDEDD\u8EAC\uDEDE\u8EAC\uDEDF\u8EAC\uDEE0" + //   770 -   774
-                "\u8EAC\uDEE1\u8EAC\uDEE2\u8EAC\uDEE3\u8EAC\uDEE4\u8EAC\uDEE5" + //   775 -   779
-                "\u8EAC\uDEE6\u8EAC\uDEE7\u8EAC\uDEE8\u8EAC\uDEE9\u8EAC\uDEEA" + //   780 -   784
-                "\u8EAC\uDEEB\u8EAC\uDEEC\u8EAC\uDEED\u8EAC\uDEEE\u8EAC\uDEEF" + //   785 -   789
-                "\u8EAC\uDEF0\u8EAC\uDEF1\u8EAC\uDEF2\u8EAC\uDEF3\u8EAC\uDEF4" + //   790 -   794
-                "\u8EAC\uDEF5\u8EAC\uDEF6\u8EAC\uDEF7\u8EAC\uDEF8\u8EAC\uDEF9" + //   795 -   799
-                "\u8EAC\uDEFA\u8EAC\uDDD9\u8EAC\uDDDA\u8EAC\uDDDB\u8EAC\uDDDC" + //   800 -   804
-                "\u8EAC\uDDDD\u8EAC\uDDDE\u8EAC\uDDDF\u8EAC\uDDE0\u8EAC\uDDE1" + //   805 -   809
-                "\u8EAC\uDDE2\u8EAC\uDDE3\u8EAC\uDDE4\u8EAC\uDDE5\u8EAC\uDDE6" + //   810 -   814
-                "\u8EAC\uDDE7\u8EAC\uDDE8\u8EAC\uDDE9\u8EAC\uDDEA\u8EAC\uDDEB" + //   815 -   819
-                "\u8EAC\uDDEC\u8EAC\uDDED\u8EAC\uDDEE\u8EAC\uDDEF\u8EAC\uDDF0" + //   820 -   824
-                "\u8EAC\uDDF1\u8EAC\uDDF2\u8EAC\uDDF3\u8EAC\uDDF4\u8EAC\uDDF5" + //   825 -   829
-                "\u8EAC\uDDF6\u8EAC\uDDF7\u8EAC\uDDF8\u8EAC\uDDF9\u8EAC\uDDFA" + //   830 -   834
-                "\u8EAC\uDDFB\u8EAC\uDDFC\u8EAC\uDDFD\u8EAC\uDDFE\u8EAC\uDEA1" + //   835 -   839
-                "\u8EAC\uDEA2\u8EAC\uDEA3\u8EAC\uDEA4\u8EAC\uDEA5\u8EAC\uDEA6" + //   840 -   844
-                "\u8EAC\uDEA7\u8EAC\uDEA8\u8EAC\uDEA9\u8EAC\uDEAA\u8EAC\uDEAB" + //   845 -   849
-                "\u8EAC\uDEAC\u8EAC\uDEAD\u8EAC\uDEAE\u8EAC\uDEAF\u8EAC\uDEB0" + //   850 -   854
-                "\u8EAC\uDEB1\u8EAC\uDEB2\u8EAC\uDEB3\u8EAC\uDEB4\u8EAC\uDEB5" + //   855 -   859
-                "\u8EAC\uDEB6\u8EAC\uDEB7\u8EAC\uDEB8\u8EAC\uDEB9\u8EAC\uDEBA" + //   860 -   864
-                "\u8EAC\uDCF7\u8EAC\uDCF8\u8EAC\uDCF9\u8EAC\uDCFA\u8EAC\uDCFB" + //   865 -   869
-                "\u8EAC\uDCFC\u8EAC\uDCFD\u8EAC\uDCFE\u8EAC\uDDA1\u8EAC\uDDA2" + //   870 -   874
-                "\u8EAC\uDDA3\u8EAC\uDDA4\u8EAC\uDDA5\u8EAC\uDDA6\u8EAC\uDDA7" + //   875 -   879
-                "\u8EAC\uDDA8\u8EAC\uDDA9\u8EAC\uDDAA\u8EAC\uDDAB\u8EAC\uDDAC" + //   880 -   884
-                "\u8EAC\uDDAD\u8EAC\uDDAE\u8EAC\uDDAF\u8EAC\uDDB0\u8EAC\uDDB1" + //   885 -   889
-                "\u8EAC\uDDB2\u8EAC\uDDB3\u8EAC\uDDB4\u8EAC\uDDB5\u8EAC\uDDB6" + //   890 -   894
-                "\u8EAC\uDDB7\u8EAC\uDDB8\u8EAC\uDDB9\u8EAC\uDDBA\u8EAC\uDDBB" + //   895 -   899
-                "\u8EAC\uDDBC\u8EAC\uDDBD\u8EAC\uDDBE\u8EAC\uDDBF\u8EAC\uDDC0" + //   900 -   904
-                "\u8EAC\uDDC1\u8EAC\uDDC2\u8EAC\uDDC3\u8EAC\uDDC4\u8EAC\uDDC5" + //   905 -   909
-                "\u8EAC\uDDC6\u8EAC\uDDC7\u8EAC\uDDC8\u8EAC\uDDC9\u8EAC\uDDCA" + //   910 -   914
-                "\u8EAC\uDDCB\u8EAC\uDDCC\u8EAC\uDDCD\u8EAC\uDDCE\u8EAC\uDDCF" + //   915 -   919
-                "\u8EAC\uDDD0\u8EAC\uDDD1\u8EAC\uDDD2\u8EAC\uDDD3\u8EAC\uDDD4" + //   920 -   924
-                "\u8EAC\uDDD5\u8EAC\uDDD6\u8EAC\uDDD7\u8EAC\uDDD8\u8EAC\uDCB7" + //   925 -   929
-                "\u8EAC\uDCB8\u8EAC\uDCB9\u8EAC\uDCBA\u8EAC\uDCBB\u8EAC\uDCBC" + //   930 -   934
-                "\u8EAC\uDCBD\u8EAC\uDCBE\u8EAC\uDCBF\u8EAC\uDCC0\u8EAC\uDCC1" + //   935 -   939
-                "\u8EAC\uDCC2\u8EAC\uDCC3\u8EAC\uDCC4\u8EAC\uDCC5\u8EAC\uDCC6" + //   940 -   944
-                "\u8EAC\uDCC7\u8EAC\uDCC8\u8EAC\uDCC9\u8EAC\uDCCA\u8EAC\uDCCB" + //   945 -   949
-                "\u8EAC\uDCCC\u8EAC\uDCCD\u8EAC\uDCCE\u8EAC\uDCCF\u8EAC\uDCD0" + //   950 -   954
-                "\u8EAC\uDCD1\u8EAC\uDCD2\u8EAC\uDCD3\u8EAC\uDCD4\u8EAC\uDCD5" + //   955 -   959
-                "\u8EAC\uDCD6\u8EAC\uDCD7\u8EAC\uDCD8\u8EAC\uDCD9\u8EAC\uDCDA" + //   960 -   964
-                "\u8EAC\uDCDB\u8EAC\uDCDC\u8EAC\uDCDD\u8EAC\uDCDE\u8EAC\uDCDF" + //   965 -   969
-                "\u8EAC\uDCE0\u8EAC\uDCE1\u8EAC\uDCE2\u8EAC\uDCE3\u8EAC\uDCE4" + //   970 -   974
-                "\u8EAC\uDCE5\u8EAC\uDCE6\u8EAC\uDCE7\u8EAC\uDCE8\u8EAC\uDCE9" + //   975 -   979
-                "\u8EAC\uDCEA\u8EAC\uDCEB\u8EAC\uDCEC\u8EAC\uDCED\u8EAC\uDCEE" + //   980 -   984
-                "\u8EAC\uDCEF\u8EAC\uDCF0\u8EAC\uDCF1\u8EAC\uDCF2\u8EAC\uDCF3" + //   985 -   989
-                "\u8EAC\uDCF4\u8EAC\uDCF5\u8EAC\uDCF6\u8EAC\uDBD5\u8EAC\uDBD6" + //   990 -   994
-                "\u8EAC\uDBD7\u8EAC\uDBD8\u8EAC\uDBD9\u8EAC\uDBDA\u8EAC\uDBDB" + //   995 -   999
-                "\u8EAC\uDBDC\u8EAC\uDBDD\u8EAC\uDBDE\u8EAC\uDBDF\u8EAC\uDBE0" + //  1000 -  1004
-                "\u8EAC\uDBE1\u8EAC\uDBE2\u8EAC\uDBE3\u8EAC\uDBE4\u8EAC\uDBE5" + //  1005 -  1009
-                "\u8EAC\uDBE6\u8EAC\uDBE7\u8EAC\uDBE8\u8EAC\uDBE9\u8EAC\uDBEA" + //  1010 -  1014
-                "\u8EAC\uDBEB\u8EAC\uDBEC\u8EAC\uDBED\u8EAC\uDBEE\u8EAC\uDBEF" + //  1015 -  1019
-                "\u8EAC\uDBF0\u8EAC\uDBF1\u8EAC\uDBF2\u8EAC\uDBF3\u8EAC\uDBF4" + //  1020 -  1024
-                "\u8EAC\uDBF5\u8EAC\uDBF6\u8EAC\uDBF7\u8EAC\uDBF8\u8EAC\uDBF9" + //  1025 -  1029
-                "\u8EAC\uDBFA\u8EAC\uDBFB\u8EAC\uDBFC\u8EAC\uDBFD\u8EAC\uDBFE" + //  1030 -  1034
-                "\u8EAC\uDCA1\u8EAC\uDCA2\u8EAC\uDCA3\u8EAC\uDCA4\u8EAC\uDCA5" + //  1035 -  1039
-                "\u8EAC\uDCA6\u8EAC\uDCA7\u8EAC\uDCA8\u8EAC\uDCA9\u8EAC\uDCAA" + //  1040 -  1044
-                "\u8EAC\uDCAB\u8EAC\uDCAC\u8EAC\uDCAD\u8EAC\uDCAE\u8EAC\uDCAF" + //  1045 -  1049
-                "\u8EAC\uDCB0\u8EAC\uDCB1\u8EAC\uDCB2\u8EAC\uDCB3\u8EAC\uDCB4" + //  1050 -  1054
-                "\u8EAC\uDCB5\u8EAC\uDCB6\u8EAC\uDAF3\u8EAC\uDAF4\u8EAC\uDAF5" + //  1055 -  1059
-                "\u8EAC\uDAF6\u8EAC\uDAF7\u8EAC\uDAF8\u8EAC\uDAF9\u8EAC\uDAFA" + //  1060 -  1064
-                "\u8EAC\uDAFB\u8EAC\uDAFC\u8EAC\uDAFD\u8EAC\uDAFE\u8EAC\uDBA1" + //  1065 -  1069
-                "\u8EAC\uDBA2\u8EAC\uDBA3\u8EAC\uDBA4\u8EAC\uDBA5\u8EAC\uDBA6" + //  1070 -  1074
-                "\u8EAC\uDBA7\u8EAC\uDBA8\u8EAC\uDBA9\u8EAC\uDBAA\u8EAC\uDBAB" + //  1075 -  1079
-                "\u8EAC\uDBAC\u8EAC\uDBAD\u8EAC\uDBAE\u8EAC\uDBAF\u8EAC\uDBB0" + //  1080 -  1084
-                "\u8EAC\uDBB1\u8EAC\uDBB2\u8EAC\uDBB3\u8EAC\uDBB4\u8EAC\uDBB5" + //  1085 -  1089
-                "\u8EAC\uDBB6\u8EAC\uDBB7\u8EAC\uDBB8\u8EAC\uDBB9\u8EAC\uDBBA" + //  1090 -  1094
-                "\u8EAC\uDBBB\u8EAC\uDBBC\u8EAC\uDBBD\u8EAC\uDBBE\u8EAC\uDBBF" + //  1095 -  1099
-                "\u8EAC\uDBC0\u8EAC\uDBC1\u8EAC\uDBC2\u8EAC\uDBC3\u8EAC\uDBC4" + //  1100 -  1104
-                "\u8EAC\uDBC5\u8EAC\uDBC6\u8EAC\uDBC7\u8EAC\uDBC8\u8EAC\uDBC9" + //  1105 -  1109
-                "\u8EAC\uDBCA\u8EAC\uDBCB\u8EAC\uDBCC\u8EAC\uDBCD\u8EAC\uDBCE" + //  1110 -  1114
-                "\u8EAC\uDBCF\u8EAC\uDBD0\u8EAC\uDBD1\u8EAC\uDBD2\u8EAC\uDBD3" + //  1115 -  1119
-                "\u8EAC\uDBD4\u8EAC\uDAB3\u8EAC\uDAB4\u8EAC\uDAB5\u8EAC\uDAB6" + //  1120 -  1124
-                "\u8EAC\uDAB7\u8EAC\uDAB8\u8EAC\uDAB9\u8EAC\uDABA\u8EAC\uDABB" + //  1125 -  1129
-                "\u8EAC\uDABC\u8EAC\uDABD\u8EAC\uDABE\u8EAC\uDABF\u8EAC\uDAC0" + //  1130 -  1134
-                "\u8EAC\uDAC1\u8EAC\uDAC2\u8EAC\uDAC3\u8EAC\uDAC4\u8EAC\uDAC5" + //  1135 -  1139
-                "\u8EAC\uDAC6\u8EAC\uDAC7\u8EAC\uDAC8\u8EAC\uDAC9\u8EAC\uDACA" + //  1140 -  1144
-                "\u8EAC\uDACB\u8EAC\uDACC\u8EAC\uDACD\u8EAC\uDACE\u8EAC\uDACF" + //  1145 -  1149
-                "\u8EAC\uDAD0\u8EAC\uDAD1\u8EAC\uDAD2\u8EAC\uDAD3\u8EAC\uDAD4" + //  1150 -  1154
-                "\u8EAC\uDAD5\u8EAC\uDAD6\u8EAC\uDAD7\u8EAC\uDAD8\u8EAC\uDAD9" + //  1155 -  1159
-                "\u8EAC\uDADA\u8EAC\uDADB\u8EAC\uDADC\u8EAC\uDADD\u8EAC\uDADE" + //  1160 -  1164
-                "\u8EAC\uDADF\u8EAC\uDAE0\u8EAC\uDAE1\u8EAC\uDAE2\u8EAC\uDAE3" + //  1165 -  1169
-                "\u8EAC\uDAE4\u8EAC\uDAE5\u8EAC\uDAE6\u8EAC\uDAE7\u8EAC\uDAE8" + //  1170 -  1174
-                "\u8EAC\uDAE9\u8EAC\uDAEA\u8EAC\uDAEB\u8EAC\uDAEC\u8EAC\uDAED" + //  1175 -  1179
-                "\u8EAC\uDAEE\u8EAC\uDAEF\u8EAC\uDAF0\u8EAC\uDAF1\u8EAC\uDAF2" + //  1180 -  1184
-                "\u8EAC\uD9D1\u8EAC\uD9D2\u8EAC\uD9D3\u8EAC\uD9D4\u8EAC\uD9D5" + //  1185 -  1189
-                "\u8EAC\uD9D6\u8EAC\uD9D7\u8EAC\uD9D8\u8EAC\uD9D9\u8EAC\uD9DA" + //  1190 -  1194
-                "\u8EAC\uD9DB\u8EAC\uD9DC\u8EAC\uD9DD\u8EAC\uD9DE\u8EAC\uD9DF" + //  1195 -  1199
-                "\u8EAC\uD9E0\u8EAC\uD9E1\u8EAC\uD9E2\u8EAC\uD9E3\u8EAC\uD9E4" + //  1200 -  1204
-                "\u8EAC\uD9E5\u8EAC\uD9E6\u8EAC\uD9E7\u8EAC\uD9E8\u8EAC\uD9E9" + //  1205 -  1209
-                "\u8EAC\uD9EA\u8EAC\uD9EB\u8EAC\uD9EC\u8EAC\uD9ED\u8EAC\uD9EE" + //  1210 -  1214
-                "\u8EAC\uD9EF\u8EAC\uD9F0\u8EAC\uD9F1\u8EAC\uD9F2\u8EAC\uD9F3" + //  1215 -  1219
-                "\u8EAC\uD9F4\u8EAC\uD9F5\u8EAC\uD9F6\u8EAC\uD9F7\u8EAC\uD9F8" + //  1220 -  1224
-                "\u8EAC\uD9F9\u8EAC\uD9FA\u8EAC\uD9FB\u8EAC\uD9FC\u8EAC\uD9FD" + //  1225 -  1229
-                "\u8EAC\uD9FE\u8EAC\uDAA1\u8EAC\uDAA2\u8EAC\uDAA3\u8EAC\uDAA4" + //  1230 -  1234
-                "\u8EAC\uDAA5\u8EAC\uDAA6\u8EAC\uDAA7\u8EAC\uDAA8\u8EAC\uDAA9" + //  1235 -  1239
-                "\u8EAC\uDAAA\u8EAC\uDAAB\u8EAC\uDAAC\u8EAC\uDAAD\u8EAC\uDAAE" + //  1240 -  1244
-                "\u8EAC\uDAAF\u8EAC\uDAB0\u8EAC\uDAB1\u8EAC\uDAB2\u8EAC\uD8EF" + //  1245 -  1249
-                "\u8EAC\uD8F0\u8EAC\uD8F1\u8EAC\uD8F2\u8EAC\uD8F3\u8EAC\uD8F4" + //  1250 -  1254
-                "\u8EAC\uD8F5\u8EAC\uD8F6\u8EAC\uD8F7\u8EAC\uD8F8\u8EAC\uD8F9" + //  1255 -  1259
-                "\u8EAC\uD8FA\u8EAC\uD8FB\u8EAC\uD8FC\u8EAC\uD8FD\u8EAC\uD8FE" + //  1260 -  1264
-                "\u8EAC\uD9A1\u8EAC\uD9A2\u8EAC\uD9A3\u8EAC\uD9A4\u8EAC\uD9A5" + //  1265 -  1269
-                "\u8EAC\uD9A6\u8EAC\uD9A7\u8EAC\uD9A8\u8EAC\uD9A9\u8EAC\uD9AA" + //  1270 -  1274
-                "\u8EAC\uD9AB\u8EAC\uD9AC\u8EAC\uD9AD\u8EAC\uD9AE\u8EAC\uD9AF" + //  1275 -  1279
-                "\u8EAC\uD9B0\u8EAC\uD9B1\u8EAC\uD9B2\u8EAC\uD9B3\u8EAC\uD9B4" + //  1280 -  1284
-                "\u8EAC\uD9B5\u8EAC\uD9B6\u8EAC\uD9B7\u8EAC\uD9B8\u8EAC\uD9B9" + //  1285 -  1289
-                "\u8EAC\uD9BA\u8EAC\uD9BB\u8EAC\uD9BC\u8EAC\uD9BD\u8EAC\uD9BE" + //  1290 -  1294
-                "\u8EAC\uD9BF\u8EAC\uD9C0\u8EAC\uD9C1\u8EAC\uD9C2\u8EAC\uD9C3" + //  1295 -  1299
-                "\u8EAC\uD9C4\u8EAC\uD9C5\u8EAC\uD9C6\u8EAC\uD9C7\u8EAC\uD9C8" + //  1300 -  1304
-                "\u8EAC\uD9C9\u8EAC\uD9CA\u8EAC\uD9CB\u8EAC\uD9CC\u8EAC\uD9CD" + //  1305 -  1309
-                "\u8EAC\uD9CE\u8EAC\uD9CF\u8EAC\uD9D0\u8EAC\uD8AF\u8EAC\uD8B0" + //  1310 -  1314
-                "\u8EAC\uD8B1\u8EAC\uD8B2\u8EAC\uD8B3\u8EAC\uD8B4\u8EAC\uD8B5" + //  1315 -  1319
-                "\u8EAC\uD8B6\u8EAC\uD8B7\u8EAC\uD8B8\u8EAC\uD8B9\u8EAC\uD8BA" + //  1320 -  1324
-                "\u8EAC\uD8BB\u8EAC\uD8BC\u8EAC\uD8BD\u8EAC\uD8BE\u8EAC\uD8BF" + //  1325 -  1329
-                "\u8EAC\uD8C0\u8EAC\uD8C1\u8EAC\uD8C2\u8EAC\uD8C3\u8EAC\uD8C4" + //  1330 -  1334
-                "\u8EAC\uD8C5\u8EAC\uD8C6\u8EAC\uD8C7\u8EAC\uD8C8\u8EAC\uD8C9" + //  1335 -  1339
-                "\u8EAC\uD8CA\u8EAC\uD8CB\u8EAC\uD8CC\u8EAC\uD8CD\u8EAC\uD8CE" + //  1340 -  1344
-                "\u8EAC\uD8CF\u8EAC\uD8D0\u8EAC\uD8D1\u8EAC\uD8D2\u8EAC\uD8D3" + //  1345 -  1349
-                "\u8EAC\uD8D4\u8EAC\uD8D5\u8EAC\uD8D6\u8EAC\uD8D7\u8EAC\uD8D8" + //  1350 -  1354
-                "\u8EAC\uD8D9\u8EAC\uD8DA\u8EAC\uD8DB\u8EAC\uD8DC\u8EAC\uD8DD" + //  1355 -  1359
-                "\u8EAC\uD8DE\u8EAC\uD8DF\u8EAC\uD8E0\u8EAC\uD8E1\u8EAC\uD8E2" + //  1360 -  1364
-                "\u8EAC\uD8E3\u8EAC\uD8E4\u8EAC\uD8E5\u8EAC\uD8E6\u8EAC\uD8E7" + //  1365 -  1369
-                "\u8EAC\uD8E8\u8EAC\uD8E9\u8EAC\uD8EA\u8EAC\uD8EB\u8EAC\uD8EC" + //  1370 -  1374
-                "\u8EAC\uD8ED\u8EAC\uD8EE\u8EAC\uD7CD\u8EAC\uD7CE\u8EAC\uD7CF" + //  1375 -  1379
-                "\u8EAC\uD7D0\u8EAC\uD7D1\u8EAC\uD7D2\u8EAC\uD7D3\u8EAC\uD7D4" + //  1380 -  1384
-                "\u8EAC\uD7D5\u8EAC\uD7D6\u8EAC\uD7D7\u8EAC\uD7D8\u8EAC\uD7D9" + //  1385 -  1389
-                "\u8EAC\uD7DA\u8EAC\uD7DB\u8EAC\uD7DC\u8EAC\uD7DD\u8EAC\uD7DE" + //  1390 -  1394
-                "\u8EAC\uD7DF\u8EAC\uD7E0\u8EAC\uD7E1\u8EAC\uD7E2\u8EAC\uD7E3" + //  1395 -  1399
-                "\u8EAC\uD7E4\u8EAC\uD7E5\u8EAC\uD7E6\u8EAC\uD7E7\u8EAC\uD7E8" + //  1400 -  1404
-                "\u8EAC\uD7E9\u8EAC\uD7EA\u8EAC\uD7EB\u8EAC\uD7EC\u8EAC\uD7ED" + //  1405 -  1409
-                "\u8EAC\uD7EE\u8EAC\uD7EF\u8EAC\uD7F0\u8EAC\uD7F1\u8EAC\uD7F2" + //  1410 -  1414
-                "\u8EAC\uD7F3\u8EAC\uD7F4\u8EAC\uD7F5\u8EAC\uD7F6\u8EAC\uD7F7" + //  1415 -  1419
-                "\u8EAC\uD7F8\u8EAC\uD7F9\u8EAC\uD7FA\u8EAC\uD7FB\u8EAC\uD7FC" + //  1420 -  1424
-                "\u8EAC\uD7FD\u8EAC\uD7FE\u8EAC\uD8A1\u8EAC\uD8A2\u8EAC\uD8A3" + //  1425 -  1429
-                "\u8EAC\uD8A4\u8EAC\uD8A5\u8EAC\uD8A6\u8EAC\uD8A7\u8EAC\uD8A8" + //  1430 -  1434
-                "\u8EAC\uD8A9\u8EAC\uD8AA\u8EAC\uD8AB\u8EAC\uD8AC\u8EAC\uD8AD" + //  1435 -  1439
-                "\u8EAC\uD8AE\u8EAC\uD6EB\u8EAC\uD6EC\u8EAC\uD6ED\u8EAC\uD6EE" + //  1440 -  1444
-                "\u8EAC\uD6EF\u8EAC\uD6F0\u8EAC\uD6F1\u8EAC\uD6F2\u8EAC\uD6F3" + //  1445 -  1449
-                "\u8EAC\uD6F4\u8EAC\uD6F5\u8EAC\uD6F6\u8EAC\uD6F7\u8EAC\uD6F8" + //  1450 -  1454
-                "\u8EAC\uD6F9\u8EAC\uD6FA\u8EAC\uD6FB\u8EAC\uD6FC\u8EAC\uD6FD" + //  1455 -  1459
-                "\u8EAC\uD6FE\u8EAC\uD7A1\u8EAC\uD7A2\u8EAC\uD7A3\u8EAC\uD7A4" + //  1460 -  1464
-                "\u8EAC\uD7A5\u8EAC\uD7A6\u8EAC\uD7A7\u8EAC\uD7A8\u8EAC\uD7A9" + //  1465 -  1469
-                "\u8EAC\uD7AA\u8EAC\uD7AB\u8EAC\uD7AC\u8EAC\uD7AD\u8EAC\uD7AE" + //  1470 -  1474
-                "\u8EAC\uD7AF\u8EAC\uD7B0\u8EAC\uD7B1\u8EAC\uD7B2\u8EAC\uD7B3" + //  1475 -  1479
-                "\u8EAC\uD7B4\u8EAC\uD7B5\u8EAC\uD7B6\u8EAC\uD7B7\u8EAC\uD7B8" + //  1480 -  1484
-                "\u8EAC\uD7B9\u8EAC\uD7BA\u8EAC\uD7BB\u8EAC\uD7BC\u8EAC\uD7BD" + //  1485 -  1489
-                "\u8EAC\uD7BE\u8EAC\uD7BF\u8EAC\uD7C0\u8EAC\uD7C1\u8EAC\uD7C2" + //  1490 -  1494
-                "\u8EAC\uD7C3\u8EAC\uD7C4\u8EAC\uD7C5\u8EAC\uD7C6\u8EAC\uD7C7" + //  1495 -  1499
-                "\u8EAC\uD7C8\u8EAC\uD7C9\u8EAC\uD7CA\u8EAC\uD7CB\u8EAC\uD7CC" + //  1500 -  1504
-                "\u8EAC\uD6AB\u8EAC\uD6AC\u8EAC\uD6AD\u8EAC\uD6AE\u8EAC\uD6AF" + //  1505 -  1509
-                "\u8EAC\uD6B0\u8EAC\uD6B1\u8EAC\uD6B2\u8EAC\uD6B3\u8EAC\uD6B4" + //  1510 -  1514
-                "\u8EAC\uD6B5\u8EAC\uD6B6\u8EAC\uD6B7\u8EAC\uD6B8\u8EAC\uD6B9" + //  1515 -  1519
-                "\u8EAC\uD6BA\u8EAC\uD6BB\u8EAC\uD6BC\u8EAC\uD6BD\u8EAC\uD6BE" + //  1520 -  1524
-                "\u8EAC\uD6BF\u8EAC\uD6C0\u8EAC\uD6C1\u8EAC\uD6C2\u8EAC\uD6C3" + //  1525 -  1529
-                "\u8EAC\uD6C4\u8EAC\uD6C5\u8EAC\uD6C6\u8EAC\uD6C7\u8EAC\uD6C8" + //  1530 -  1534
-                "\u8EAC\uD6C9\u8EAC\uD6CA\u8EAC\uD6CB\u8EAC\uD6CC\u8EAC\uD6CD" + //  1535 -  1539
-                "\u8EAC\uD6CE\u8EAC\uD6CF\u8EAC\uD6D0\u8EAC\uD6D1\u8EAC\uD6D2" + //  1540 -  1544
-                "\u8EAC\uD6D3\u8EAC\uD6D4\u8EAC\uD6D5\u8EAC\uD6D6\u8EAC\uD6D7" + //  1545 -  1549
-                "\u8EAC\uD6D8\u8EAC\uD6D9\u8EAC\uD6DA\u8EAC\uD6DB\u8EAC\uD6DC" + //  1550 -  1554
-                "\u8EAC\uD6DD\u8EAC\uD6DE\u8EAC\uD6DF\u8EAC\uD6E0\u8EAC\uD6E1" + //  1555 -  1559
-                "\u8EAC\uD6E2\u8EAC\uD6E3\u8EAC\uD6E4\u8EAC\uD6E5\u8EAC\uD6E6" + //  1560 -  1564
-                "\u8EAC\uD6E7\u8EAC\uD6E8\u8EAC\uD6E9\u8EAC\uD6EA\u8EAC\uD5C9" + //  1565 -  1569
-                "\u8EAC\uD5CA\u8EAC\uD5CB\u8EAC\uD5CC\u8EAC\uD5CD\u8EAC\uD5CE" + //  1570 -  1574
-                "\u8EAC\uD5CF\u8EAC\uD5D0\u8EAC\uD5D1\u8EAC\uD5D2\u8EAC\uD5D3" + //  1575 -  1579
-                "\u8EAC\uD5D4\u8EAC\uD5D5\u8EAC\uD5D6\u8EAC\uD5D7\u8EAC\uD5D8" + //  1580 -  1584
-                "\u8EAC\uD5D9\u8EAC\uD5DA\u8EAC\uD5DB\u8EAC\uD5DC\u8EAC\uD5DD" + //  1585 -  1589
-                "\u8EAC\uD5DE\u8EAC\uD5DF\u8EAC\uD5E0\u8EAC\uD5E1\u8EAC\uD5E2" + //  1590 -  1594
-                "\u8EAC\uD5E3\u8EAC\uD5E4\u8EAC\uD5E5\u8EAC\uD5E6\u8EAC\uD5E7" + //  1595 -  1599
-                "\u8EAC\uD5E8\u8EAC\uD5E9\u8EAC\uD5EA\u8EAC\uD5EB\u8EAC\uD5EC" + //  1600 -  1604
-                "\u8EAC\uD5ED\u8EAC\uD5EE\u8EAC\uD5EF\u8EAC\uD5F0\u8EAC\uD5F1" + //  1605 -  1609
-                "\u8EAC\uD5F2\u8EAC\uD5F3\u8EAC\uD5F4\u8EAC\uD5F5\u8EAC\uD5F6" + //  1610 -  1614
-                "\u8EAC\uD5F7\u8EAC\uD5F8\u8EAC\uD5F9\u8EAC\uD5FA\u8EAC\uD5FB" + //  1615 -  1619
-                "\u8EAC\uD5FC\u8EAC\uD5FD\u8EAC\uD5FE\u8EAC\uD6A1\u8EAC\uD6A2" + //  1620 -  1624
-                "\u8EAC\uD6A3\u8EAC\uD6A4\u8EAC\uD6A5\u8EAC\uD6A6\u8EAC\uD6A7" + //  1625 -  1629
-                "\u8EAC\uD6A8\u8EAC\uD6A9\u8EAC\uD6AA\u8EAC\uD4E7\u8EAC\uD4E8" + //  1630 -  1634
-                "\u8EAC\uD4E9\u8EAC\uD4EA\u8EAC\uD4EB\u8EAC\uD4EC\u8EAC\uD4ED" + //  1635 -  1639
-                "\u8EAC\uD4EE\u8EAC\uD4EF\u8EAC\uD4F0\u8EAC\uD4F1\u8EAC\uD4F2" + //  1640 -  1644
-                "\u8EAC\uD4F3\u8EAC\uD4F4\u8EAC\uD4F5\u8EAC\uD4F6\u8EAC\uD4F7" + //  1645 -  1649
-                "\u8EAC\uD4F8\u8EAC\uD4F9\u8EAC\uD4FA\u8EAC\uD4FB\u8EAC\uD4FC" + //  1650 -  1654
-                "\u8EAC\uD4FD\u8EAC\uD4FE\u8EAC\uD5A1\u8EAC\uD5A2\u8EAC\uD5A3" + //  1655 -  1659
-                "\u8EAC\uD5A4\u8EAC\uD5A5\u8EAC\uD5A6\u8EAC\uD5A7\u8EAC\uD5A8" + //  1660 -  1664
-                "\u8EAC\uD5A9\u8EAC\uD5AA\u8EAC\uD5AB\u8EAC\uD5AC\u8EAC\uD5AD" + //  1665 -  1669
-                "\u8EAC\uD5AE\u8EAC\uD5AF\u8EAC\uD5B0\u8EAC\uD5B1\u8EAC\uD5B2" + //  1670 -  1674
-                "\u8EAC\uD5B3\u8EAC\uD5B4\u8EAC\uD5B5\u8EAC\uD5B6\u8EAC\uD5B7" + //  1675 -  1679
-                "\u8EAC\uD5B8\u8EAC\uD5B9\u8EAC\uD5BA\u8EAC\uD5BB\u8EAC\uD5BC" + //  1680 -  1684
-                "\u8EAC\uD5BD\u8EAC\uD5BE\u8EAC\uD5BF\u8EAC\uD5C0\u8EAC\uD5C1" + //  1685 -  1689
-                "\u8EAC\uD5C2\u8EAC\uD5C3\u8EAC\uD5C4\u8EAC\uD5C5\u8EAC\uD5C6" + //  1690 -  1694
-                "\u8EAC\uD5C7\u8EAC\uD5C8\u8EAC\uD4A7\u8EAC\uD4A8\u8EAC\uD4A9" + //  1695 -  1699
-                "\u8EAC\uD4AA\u8EAC\uD4AB\u8EAC\uD4AC\u8EAC\uD4AD\u8EAC\uD4AE" + //  1700 -  1704
-                "\u8EAC\uD4AF\u8EAC\uD4B0\u8EAC\uD4B1\u8EAC\uD4B2\u8EAC\uD4B3" + //  1705 -  1709
-                "\u8EAC\uD4B4\u8EAC\uD4B5\u8EAC\uD4B6\u8EAC\uD4B7\u8EAC\uD4B8" + //  1710 -  1714
-                "\u8EAC\uD4B9\u8EAC\uD4BA\u8EAC\uD4BB\u8EAC\uD4BC\u8EAC\uD4BD" + //  1715 -  1719
-                "\u8EAC\uD4BE\u8EAC\uD4BF\u8EAC\uD4C0\u8EAC\uD4C1\u8EAC\uD4C2" + //  1720 -  1724
-                "\u8EAC\uD4C3\u8EAC\uD4C4\u8EAC\uD4C5\u8EAC\uD4C6\u8EAC\uD4C7" + //  1725 -  1729
-                "\u8EAC\uD4C8\u8EAC\uD4C9\u8EAC\uD4CA\u8EAC\uD4CB\u8EAC\uD4CC" + //  1730 -  1734
-                "\u8EAC\uD4CD\u8EAC\uD4CE\u8EAC\uD4CF\u8EAC\uD4D0\u8EAC\uD4D1" + //  1735 -  1739
-                "\u8EAC\uD4D2\u8EAC\uD4D3\u8EAC\uD4D4\u8EAC\uD4D5\u8EAC\uD4D6" + //  1740 -  1744
-                "\u8EAC\uD4D7\u8EAC\uD4D8\u8EAC\uD4D9\u8EAC\uD4DA\u8EAC\uD4DB" + //  1745 -  1749
-                "\u8EAC\uD4DC\u8EAC\uD4DD\u8EAC\uD4DE\u8EAC\uD4DF\u8EAC\uD4E0" + //  1750 -  1754
-                "\u8EAC\uD4E1\u8EAC\uD4E2\u8EAC\uD4E3\u8EAC\uD4E4\u8EAC\uD4E5" + //  1755 -  1759
-                "\u8EAC\uD4E6\u8EAC\uD3C5\u8EAC\uD3C6\u8EAC\uD3C7\u8EAC\uD3C8" + //  1760 -  1764
-                "\u8EAC\uD3C9\u8EAC\uD3CA\u8EAC\uD3CB\u8EAC\uD3CC\u8EAC\uD3CD" + //  1765 -  1769
-                "\u8EAC\uD3CE\u8EAC\uD3CF\u8EAC\uD3D0\u8EAC\uD3D1\u8EAC\uD3D2" + //  1770 -  1774
-                "\u8EAC\uD3D3\u8EAC\uD3D4\u8EAC\uD3D5\u8EAC\uD3D6\u8EAC\uD3D7" + //  1775 -  1779
-                "\u8EAC\uD3D8\u8EAC\uD3D9\u8EAC\uD3DA\u8EAC\uD3DB\u8EAC\uD3DC" + //  1780 -  1784
-                "\u8EAC\uD3DD\u8EAC\uD3DE\u8EAC\uD3DF\u8EAC\uD3E0\u8EAC\uD3E1" + //  1785 -  1789
-                "\u8EAC\uD3E2\u8EAC\uD3E3\u8EAC\uD3E4\u8EAC\uD3E5\u8EAC\uD3E6" + //  1790 -  1794
-                "\u8EAC\uD3E7\u8EAC\uD3E8\u8EAC\uD3E9\u8EAC\uD3EA\u8EAC\uD3EB" + //  1795 -  1799
-                "\u8EAC\uD3EC\u8EAC\uD3ED\u8EAC\uD3EE\u8EAC\uD3EF\u8EAC\uD3F0" + //  1800 -  1804
-                "\u8EAC\uD3F1\u8EAC\uD3F2\u8EAC\uD3F3\u8EAC\uD3F4\u8EAC\uD3F5" + //  1805 -  1809
-                "\u8EAC\uD3F6\u8EAC\uD3F7\u8EAC\uD3F8\u8EAC\uD3F9\u8EAC\uD3FA" + //  1810 -  1814
-                "\u8EAC\uD3FB\u8EAC\uD3FC\u8EAC\uD3FD\u8EAC\uD3FE\u8EAC\uD4A1" + //  1815 -  1819
-                "\u8EAC\uD4A2\u8EAC\uD4A3\u8EAC\uD4A4\u8EAC\uD4A5\u8EAC\uD4A6" + //  1820 -  1824
-                "\u8EAC\uD2E3\u8EAC\uD2E4\u8EAC\uD2E5\u8EAC\uD2E6\u8EAC\uD2E7" + //  1825 -  1829
-                "\u8EAC\uD2E8\u8EAC\uD2E9\u8EAC\uD2EA\u8EAC\uD2EB\u8EAC\uD2EC" + //  1830 -  1834
-                "\u8EAC\uD2ED\u8EAC\uD2EE\u8EAC\uD2EF\u8EAC\uD2F0\u8EAC\uD2F1" + //  1835 -  1839
-                "\u8EAC\uD2F2\u8EAC\uD2F3\u8EAC\uD2F4\u8EAC\uD2F5\u8EAC\uD2F6" + //  1840 -  1844
-                "\u8EAC\uD2F7\u8EAC\uD2F8\u8EAC\uD2F9\u8EAC\uD2FA\u8EAC\uD2FB" + //  1845 -  1849
-                "\u8EAC\uD2FC\u8EAC\uD2FD\u8EAC\uD2FE\u8EAC\uD3A1\u8EAC\uD3A2" + //  1850 -  1854
-                "\u8EAC\uD3A3\u8EAC\uD3A4\u8EAC\uD3A5\u8EAC\uD3A6\u8EAC\uD3A7" + //  1855 -  1859
-                "\u8EAC\uD3A8\u8EAC\uD3A9\u8EAC\uD3AA\u8EAC\uD3AB\u8EAC\uD3AC" + //  1860 -  1864
-                "\u8EAC\uD3AD\u8EAC\uD3AE\u8EAC\uD3AF\u8EAC\uD3B0\u8EAC\uD3B1" + //  1865 -  1869
-                "\u8EAC\uD3B2\u8EAC\uD3B3\u8EAC\uD3B4\u8EAC\uD3B5\u8EAC\uD3B6" + //  1870 -  1874
-                "\u8EAC\uD3B7\u8EAC\uD3B8\u8EAC\uD3B9\u8EAC\uD3BA\u8EAC\uD3BB" + //  1875 -  1879
-                "\u8EAC\uD3BC\u8EAC\uD3BD\u8EAC\uD3BE\u8EAC\uD3BF\u8EAC\uD3C0" + //  1880 -  1884
-                "\u8EAC\uD3C1\u8EAC\uD3C2\u8EAC\uD3C3\u8EAC\uD3C4\u8EAC\uD2A3" + //  1885 -  1889
-                "\u8EAC\uD2A4\u8EAC\uD2A5\u8EAC\uD2A6\u8EAC\uD2A7\u8EAC\uD2A8" + //  1890 -  1894
-                "\u8EAC\uD2A9\u8EAC\uD2AA\u8EAC\uD2AB\u8EAC\uD2AC\u8EAC\uD2AD" + //  1895 -  1899
-                "\u8EAC\uD2AE\u8EAC\uD2AF\u8EAC\uD2B0\u8EAC\uD2B1\u8EAC\uD2B2" + //  1900 -  1904
-                "\u8EAC\uD2B3\u8EAC\uD2B4\u8EAC\uD2B5\u8EAC\uD2B6\u8EAC\uD2B7" + //  1905 -  1909
-                "\u8EAC\uD2B8\u8EAC\uD2B9\u8EAC\uD2BA\u8EAC\uD2BB\u8EAC\uD2BC" + //  1910 -  1914
-                "\u8EAC\uD2BD\u8EAC\uD2BE\u8EAC\uD2BF\u8EAC\uD2C0\u8EAC\uD2C1" + //  1915 -  1919
-                "\u8EAC\uD2C2\u8EAC\uD2C3\u8EAC\uD2C4\u8EAC\uD2C5\u8EAC\uD2C6" + //  1920 -  1924
-                "\u8EAC\uD2C7\u8EAC\uD2C8\u8EAC\uD2C9\u8EAC\uD2CA\u8EAC\uD2CB" + //  1925 -  1929
-                "\u8EAC\uD2CC\u8EAC\uD2CD\u8EAC\uD2CE\u8EAC\uD2CF\u8EAC\uD2D0" + //  1930 -  1934
-                "\u8EAC\uD2D1\u8EAC\uD2D2\u8EAC\uD2D3\u8EAC\uD2D4\u8EAC\uD2D5" + //  1935 -  1939
-                "\u8EAC\uD2D6\u8EAC\uD2D7\u8EAC\uD2D8\u8EAC\uD2D9\u8EAC\uD2DA" + //  1940 -  1944
-                "\u8EAC\uD2DB\u8EAC\uD2DC\u8EAC\uD2DD\u8EAC\uD2DE\u8EAC\uD2DF" + //  1945 -  1949
-                "\u8EAC\uD2E0\u8EAC\uD2E1\u8EAC\uD2E2\u8EAC\uD1C1\u8EAC\uD1C2" + //  1950 -  1954
-                "\u8EAC\uD1C3\u8EAC\uD1C4\u8EAC\uD1C5\u8EAC\uD1C6\u8EAC\uD1C7" + //  1955 -  1959
-                "\u8EAC\uD1C8\u8EAC\uD1C9\u8EAC\uD1CA\u8EAC\uD1CB\u8EAC\uD1CC" + //  1960 -  1964
-                "\u8EAC\uD1CD\u8EAC\uD1CE\u8EAC\uD1CF\u8EAC\uD1D0\u8EAC\uD1D1" + //  1965 -  1969
-                "\u8EAC\uD1D2\u8EAC\uD1D3\u8EAC\uD1D4\u8EAC\uD1D5\u8EAC\uD1D6" + //  1970 -  1974
-                "\u8EAC\uD1D7\u8EAC\uD1D8\u8EAC\uD1D9\u8EAC\uD1DA\u8EAC\uD1DB" + //  1975 -  1979
-                "\u8EAC\uD1DC\u8EAC\uD1DD\u8EAC\uD1DE\u8EAC\uD1DF\u8EAC\uD1E0" + //  1980 -  1984
-                "\u8EAC\uD1E1\u8EAC\uD1E2\u8EAC\uD1E3\u8EAC\uD1E4\u8EAC\uD1E5" + //  1985 -  1989
-                "\u8EAC\uD1E6\u8EAC\uD1E7\u8EAC\uD1E8\u8EAC\uD1E9\u8EAC\uD1EA" + //  1990 -  1994
-                "\u8EAC\uD1EB\u8EAC\uD1EC\u8EAC\uD1ED\u8EAC\uD1EE\u8EAC\uD1EF" + //  1995 -  1999
-                "\u8EAC\uD1F0\u8EAC\uD1F1\u8EAC\uD1F2\u8EAC\uD1F3\u8EAC\uD1F4" + //  2000 -  2004
-                "\u8EAC\uD1F5\u8EAC\uD1F6\u8EAC\uD1F7\u8EAC\uD1F8\u8EAC\uD1F9" + //  2005 -  2009
-                "\u8EAC\uD1FA\u8EAC\uD1FB\u8EAC\uD1FC\u8EAC\uD1FD\u8EAC\uD1FE" + //  2010 -  2014
-                "\u8EAC\uD2A1\u8EAC\uD2A2\u8EAC\uD0DF\u8EAC\uD0E0\u8EAC\uD0E1" + //  2015 -  2019
-                "\u8EAC\uD0E2\u8EAC\uD0E3\u8EAC\uD0E4\u8EAC\uD0E5\u8EAC\uD0E6" + //  2020 -  2024
-                "\u8EAC\uD0E7\u8EAC\uD0E8\u8EAC\uD0E9\u8EAC\uD0EA\u8EAC\uD0EB" + //  2025 -  2029
-                "\u8EAC\uD0EC\u8EAC\uD0ED\u8EAC\uD0EE\u8EAC\uD0EF\u8EAC\uD0F0" + //  2030 -  2034
-                "\u8EAC\uD0F1\u8EAC\uD0F2\u8EAC\uD0F3\u8EAC\uD0F4\u8EAC\uD0F5" + //  2035 -  2039
-                "\u8EAC\uD0F6\u8EAC\uD0F7\u8EAC\uD0F8\u8EAC\uD0F9\u8EAC\uD0FA" + //  2040 -  2044
-                "\u8EAC\uD0FB\u8EAC\uD0FC\u8EAC\uD0FD\u8EAC\uD0FE\u8EAC\uD1A1" + //  2045 -  2049
-                "\u8EAC\uD1A2\u8EAC\uD1A3\u8EAC\uD1A4\u8EAC\uD1A5\u8EAC\uD1A6" + //  2050 -  2054
-                "\u8EAC\uD1A7\u8EAC\uD1A8\u8EAC\uD1A9\u8EAC\uD1AA\u8EAC\uD1AB" + //  2055 -  2059
-                "\u8EAC\uD1AC\u8EAC\uD1AD\u8EAC\uD1AE\u8EAC\uD1AF\u8EAC\uD1B0" + //  2060 -  2064
-                "\u8EAC\uD1B1\u8EAC\uD1B2\u8EAC\uD1B3\u8EAC\uD1B4\u8EAC\uD1B5" + //  2065 -  2069
-                "\u8EAC\uD1B6\u8EAC\uD1B7\u8EAC\uD1B8\u8EAC\uD1B9\u8EAC\uD1BA" + //  2070 -  2074
-                "\u8EAC\uD1BB\u8EAC\uD1BC\u8EAC\uD1BD\u8EAC\uD1BE\u8EAC\uD1BF" + //  2075 -  2079
-                "\u8EAC\uD1C0\u8EAC\uCFFD\u8EAC\uCFFE\u8EAC\uD0A1\u8EAC\uD0A2" + //  2080 -  2084
-                "\u8EAC\uD0A3\u8EAC\uD0A4\u8EAC\uD0A5\u8EAC\uD0A6\u8EAC\uD0A7" + //  2085 -  2089
-                "\u8EAC\uD0A8\u8EAC\uD0A9\u8EAC\uD0AA\u8EAC\uD0AB\u8EAC\uD0AC" + //  2090 -  2094
-                "\u8EAC\uD0AD\u8EAC\uD0AE\u8EAC\uD0AF\u8EAC\uD0B0\u8EAC\uD0B1" + //  2095 -  2099
-                "\u8EAC\uD0B2\u8EAC\uD0B3\u8EAC\uD0B4\u8EAC\uD0B5\u8EAC\uD0B6" + //  2100 -  2104
-                "\u8EAC\uD0B7\u8EAC\uD0B8\u8EAC\uD0B9\u8EAC\uD0BA\u8EAC\uD0BB" + //  2105 -  2109
-                "\u8EAC\uD0BC\u8EAC\uD0BD\u8EAC\uD0BE\u8EAC\uD0BF\u8EAC\uD0C0" + //  2110 -  2114
-                "\u8EAC\uD0C1\u8EAC\uD0C2\u8EAC\uD0C3\u8EAC\uD0C4\u8EAC\uD0C5" + //  2115 -  2119
-                "\u8EAC\uD0C6\u8EAC\uD0C7\u8EAC\uD0C8\u8EAC\uD0C9\u8EAC\uD0CA" + //  2120 -  2124
-                "\u8EAC\uD0CB\u8EAC\uD0CC\u8EAC\uD0CD\u8EAC\uD0CE\u8EAC\uD0CF" + //  2125 -  2129
-                "\u8EAC\uD0D0\u8EAC\uD0D1\u8EAC\uD0D2\u8EAC\uD0D3\u8EAC\uD0D4" + //  2130 -  2134
-                "\u8EAC\uD0D5\u8EAC\uD0D6\u8EAC\uD0D7\u8EAC\uD0D8\u8EAC\uD0D9" + //  2135 -  2139
-                "\u8EAC\uD0DA\u8EAC\uD0DB\u8EAC\uD0DC\u8EAC\uD0DD\u8EAC\uD0DE" + //  2140 -  2144
-                "\u8EAC\uCFBD\u8EAC\uCFBE\u8EAC\uCFBF\u8EAC\uCFC0\u8EAC\uCFC1" + //  2145 -  2149
-                "\u8EAC\uCFC2\u8EAC\uCFC3\u8EAC\uCFC4\u8EAC\uCFC5\u8EAC\uCFC6" + //  2150 -  2154
-                "\u8EAC\uCFC7\u8EAC\uCFC8\u8EAC\uCFC9\u8EAC\uCFCA\u8EAC\uCFCB" + //  2155 -  2159
-                "\u8EAC\uCFCC\u8EAC\uCFCD\u8EAC\uCFCE\u8EAC\uCFCF\u8EAC\uCFD0" + //  2160 -  2164
-                "\u8EAC\uCFD1\u8EAC\uCFD2\u8EAC\uCFD3\u8EAC\uCFD4\u8EAC\uCFD5" + //  2165 -  2169
-                "\u8EAC\uCFD6\u8EAC\uCFD7\u8EAC\uCFD8\u8EAC\uCFD9\u8EAC\uCFDA" + //  2170 -  2174
-                "\u8EAC\uCFDB\u8EAC\uCFDC\u8EAC\uCFDD\u8EAC\uCFDE\u8EAC\uCFDF" + //  2175 -  2179
-                "\u8EAC\uCFE0\u8EAC\uCFE1\u8EAC\uCFE2\u8EAC\uCFE3\u8EAC\uCFE4" + //  2180 -  2184
-                "\u8EAC\uCFE5\u8EAC\uCFE6\u8EAC\uCFE7\u8EAC\uCFE8\u8EAC\uCFE9" + //  2185 -  2189
-                "\u8EAC\uCFEA\u8EAC\uCFEB\u8EAC\uCFEC\u8EAC\uCFED\u8EAC\uCFEE" + //  2190 -  2194
-                "\u8EAC\uCFEF\u8EAC\uCFF0\u8EAC\uCFF1\u8EAC\uCFF2\u8EAC\uCFF3" + //  2195 -  2199
-                "\u8EAC\uCFF4\u8EAC\uCFF5\u8EAC\uCFF6\u8EAC\uCFF7\u8EAC\uCFF8" + //  2200 -  2204
-                "\u8EAC\uCFF9\u8EAC\uCFFA\u8EAC\uCFFB\u8EAC\uCFFC\u8EAC\uCEDB" + //  2205 -  2209
-                "\u8EAC\uCEDC\u8EAC\uCEDD\u8EAC\uCEDE\u8EAC\uCEDF\u8EAC\uCEE0" + //  2210 -  2214
-                "\u8EAC\uCEE1\u8EAC\uCEE2\u8EAC\uCEE3\u8EAC\uCEE4\u8EAC\uCEE5" + //  2215 -  2219
-                "\u8EAC\uCEE6\u8EAC\uCEE7\u8EAC\uCEE8\u8EAC\uCEE9\u8EAC\uCEEA" + //  2220 -  2224
-                "\u8EAC\uCEEB\u8EAC\uCEEC\u8EAC\uCEED\u8EAC\uCEEE\u8EAC\uCEEF" + //  2225 -  2229
-                "\u8EAC\uCEF0\u8EAC\uCEF1\u8EAC\uCEF2\u8EAC\uCEF3\u8EAC\uCEF4" + //  2230 -  2234
-                "\u8EAC\uCEF5\u8EAC\uCEF6\u8EAC\uCEF7\u8EAC\uCEF8\u8EAC\uCEF9" + //  2235 -  2239
-                "\u8EAC\uCEFA\u8EAC\uCEFB\u8EAC\uCEFC\u8EAC\uCEFD\u8EAC\uCEFE" + //  2240 -  2244
-                "\u8EAC\uCFA1\u8EAC\uCFA2\u8EAC\uCFA3\u8EAC\uCFA4\u8EAC\uCFA5" + //  2245 -  2249
-                "\u8EAC\uCFA6\u8EAC\uCFA7\u8EAC\uCFA8\u8EAC\uCFA9\u8EAC\uCFAA" + //  2250 -  2254
-                "\u8EAC\uCFAB\u8EAC\uCFAC\u8EAC\uCFAD\u8EAC\uCFAE\u8EAC\uCFAF" + //  2255 -  2259
-                "\u8EAC\uCFB0\u8EAC\uCFB1\u8EAC\uCFB2\u8EAC\uCFB3\u8EAC\uCFB4" + //  2260 -  2264
-                "\u8EAC\uCFB5\u8EAC\uCFB6\u8EAC\uCFB7\u8EAC\uCFB8\u8EAC\uCFB9" + //  2265 -  2269
-                "\u8EAC\uCFBA\u8EAC\uCFBB\u8EAC\uCFBC\u8EAC\uCDF9\u8EAC\uCDFA" + //  2270 -  2274
-                "\u8EAC\uCDFB\u8EAC\uCDFC\u8EAC\uCDFD\u8EAC\uCDFE\u8EAC\uCEA1" + //  2275 -  2279
-                "\u8EAC\uCEA2\u8EAC\uCEA3\u8EAC\uCEA4\u8EAC\uCEA5\u8EAC\uCEA6" + //  2280 -  2284
-                "\u8EAC\uCEA7\u8EAC\uCEA8\u8EAC\uCEA9\u8EAC\uCEAA\u8EAC\uCEAB" + //  2285 -  2289
-                "\u8EAC\uCEAC\u8EAC\uCEAD\u8EAC\uCEAE\u8EAC\uCEAF\u8EAC\uCEB0" + //  2290 -  2294
-                "\u8EAC\uCEB1\u8EAC\uCEB2\u8EAC\uCEB3\u8EAC\uCEB4\u8EAC\uCEB5" + //  2295 -  2299
-                "\u8EAC\uCEB6\u8EAC\uCEB7\u8EAC\uCEB8\u8EAC\uCEB9\u8EAC\uCEBA" + //  2300 -  2304
-                "\u8EAC\uCEBB\u8EAC\uCEBC\u8EAC\uCEBD\u8EAC\uCEBE\u8EAC\uCEBF" + //  2305 -  2309
-                "\u8EAC\uCEC0\u8EAC\uCEC1\u8EAC\uCEC2\u8EAC\uCEC3\u8EAC\uCEC4" + //  2310 -  2314
-                "\u8EAC\uCEC5\u8EAC\uCEC6\u8EAC\uCEC7\u8EAC\uCEC8\u8EAC\uCEC9" + //  2315 -  2319
-                "\u8EAC\uCECA\u8EAC\uCECB\u8EAC\uCECC\u8EAC\uCECD\u8EAC\uCECE" + //  2320 -  2324
-                "\u8EAC\uCECF\u8EAC\uCED0\u8EAC\uCED1\u8EAC\uCED2\u8EAC\uCED3" + //  2325 -  2329
-                "\u8EAC\uCED4\u8EAC\uCED5\u8EAC\uCED6\u8EAC\uCED7\u8EAC\uCED8" + //  2330 -  2334
-                "\u8EAC\uCED9\u8EAC\uCEDA\u8EAC\uCDB9\u8EAC\uCDBA\u8EAC\uCDBB" + //  2335 -  2339
-                "\u8EAC\uCDBC\u8EAC\uCDBD\u8EAC\uCDBE\u8EAC\uCDBF\u8EAC\uCDC0" + //  2340 -  2344
-                "\u8EAC\uCDC1\u8EAC\uCDC2\u8EAC\uCDC3\u8EAC\uCDC4\u8EAC\uCDC5" + //  2345 -  2349
-                "\u8EAC\uCDC6\u8EAC\uCDC7\u8EAC\uCDC8\u8EAC\uCDC9\u8EAC\uCDCA" + //  2350 -  2354
-                "\u8EAC\uCDCB\u8EAC\uCDCC\u8EAC\uCDCD\u8EAC\uCDCE\u8EAC\uCDCF" + //  2355 -  2359
-                "\u8EAC\uCDD0\u8EAC\uCDD1\u8EAC\uCDD2\u8EAC\uCDD3\u8EAC\uCDD4" + //  2360 -  2364
-                "\u8EAC\uCDD5\u8EAC\uCDD6\u8EAC\uCDD7\u8EAC\uCDD8\u8EAC\uCDD9" + //  2365 -  2369
-                "\u8EAC\uCDDA\u8EAC\uCDDB\u8EAC\uCDDC\u8EAC\uCDDD\u8EAC\uCDDE" + //  2370 -  2374
-                "\u8EAC\uCDDF\u8EAC\uCDE0\u8EAC\uCDE1\u8EAC\uCDE2\u8EAC\uCDE3" + //  2375 -  2379
-                "\u8EAC\uCDE4\u8EAC\uCDE5\u8EAC\uCDE6\u8EAC\uCDE7\u8EAC\uCDE8" + //  2380 -  2384
-                "\u8EAC\uCDE9\u8EAC\uCDEA\u8EAC\uCDEB\u8EAC\uCDEC\u8EAC\uCDED" + //  2385 -  2389
-                "\u8EAC\uCDEE\u8EAC\uCDEF\u8EAC\uCDF0\u8EAC\uCDF1\u8EAC\uCDF2" + //  2390 -  2394
-                "\u8EAC\uCDF3\u8EAC\uCDF4\u8EAC\uCDF5\u8EAC\uCDF6\u8EAC\uCDF7" + //  2395 -  2399
-                "\u8EAC\uCDF8\u8EAC\uCCD7\u8EAC\uCCD8\u8EAC\uCCD9\u8EAC\uCCDA" + //  2400 -  2404
-                "\u8EAC\uCCDB\u8EAC\uCCDC\u8EAC\uCCDD\u8EAC\uCCDE\u8EAC\uCCDF" + //  2405 -  2409
-                "\u8EAC\uCCE0\u8EAC\uCCE1\u8EAC\uCCE2\u8EAC\uCCE3\u8EAC\uCCE4" + //  2410 -  2414
-                "\u8EAC\uCCE5\u8EAC\uCCE6\u8EAC\uCCE7\u8EAC\uCCE8\u8EAC\uCCE9" + //  2415 -  2419
-                "\u8EAC\uCCEA\u8EAC\uCCEB\u8EAC\uCCEC\u8EAC\uCCED\u8EAC\uCCEE" + //  2420 -  2424
-                "\u8EAC\uCCEF\u8EAC\uCCF0\u8EAC\uCCF1\u8EAC\uCCF2\u8EAC\uCCF3" + //  2425 -  2429
-                "\u8EAC\uCCF4\u8EAC\uCCF5\u8EAC\uCCF6\u8EAC\uCCF7\u8EAC\uCCF8" + //  2430 -  2434
-                "\u8EAC\uCCF9\u8EAC\uCCFA\u8EAC\uCCFB\u8EAC\uCCFC\u8EAC\uCCFD" + //  2435 -  2439
-                "\u8EAC\uCCFE\u8EAC\uCDA1\u8EAC\uCDA2\u8EAC\uCDA3\u8EAC\uCDA4" + //  2440 -  2444
-                "\u8EAC\uCDA5\u8EAC\uCDA6\u8EAC\uCDA7\u8EAC\uCDA8\u8EAC\uCDA9" + //  2445 -  2449
-                "\u8EAC\uCDAA\u8EAC\uCDAB\u8EAC\uCDAC\u8EAC\uCDAD\u8EAC\uCDAE" + //  2450 -  2454
-                "\u8EAC\uCDAF\u8EAC\uCDB0\u8EAC\uCDB1\u8EAC\uCDB2\u8EAC\uCDB3" + //  2455 -  2459
-                "\u8EAC\uCDB4\u8EAC\uCDB5\u8EAC\uCDB6\u8EAC\uCDB7\u8EAC\uCDB8" + //  2460 -  2464
-                "\u8EAC\uCBF5\u8EAC\uCBF6\u8EAC\uCBF7\u8EAC\uCBF8\u8EAC\uCBF9" + //  2465 -  2469
-                "\u8EAC\uCBFA\u8EAC\uCBFB\u8EAC\uCBFC\u8EAC\uCBFD\u8EAC\uCBFE" + //  2470 -  2474
-                "\u8EAC\uCCA1\u8EAC\uCCA2\u8EAC\uCCA3\u8EAC\uCCA4\u8EAC\uCCA5" + //  2475 -  2479
-                "\u8EAC\uCCA6\u8EAC\uCCA7\u8EAC\uCCA8\u8EAC\uCCA9\u8EAC\uCCAA" + //  2480 -  2484
-                "\u8EAC\uCCAB\u8EAC\uCCAC\u8EAC\uCCAD\u8EAC\uCCAE\u8EAC\uCCAF" + //  2485 -  2489
-                "\u8EAC\uCCB0\u8EAC\uCCB1\u8EAC\uCCB2\u8EAC\uCCB3\u8EAC\uCCB4" + //  2490 -  2494
-                "\u8EAC\uCCB5\u8EAC\uCCB6\u8EAC\uCCB7\u8EAC\uCCB8\u8EAC\uCCB9" + //  2495 -  2499
-                "\u8EAC\uCCBA\u8EAC\uCCBB\u8EAC\uCCBC\u8EAC\uCCBD\u8EAC\uCCBE" + //  2500 -  2504
-                "\u8EAC\uCCBF\u8EAC\uCCC0\u8EAC\uCCC1\u8EAC\uCCC2\u8EAC\uCCC3" + //  2505 -  2509
-                "\u8EAC\uCCC4\u8EAC\uCCC5\u8EAC\uCCC6\u8EAC\uCCC7\u8EAC\uCCC8" + //  2510 -  2514
-                "\u8EAC\uCCC9\u8EAC\uCCCA\u8EAC\uCCCB\u8EAC\uCCCC\u8EAC\uCCCD" + //  2515 -  2519
-                "\u8EAC\uCCCE\u8EAC\uCCCF\u8EAC\uCCD0\u8EAC\uCCD1\u8EAC\uCCD2" + //  2520 -  2524
-                "\u8EAC\uCCD3\u8EAC\uCCD4\u8EAC\uCCD5\u8EAC\uCCD6\u8EAC\uCBB5" + //  2525 -  2529
-                "\u8EAC\uCBB6\u8EAC\uCBB7\u8EAC\uCBB8\u8EAC\uCBB9\u8EAC\uCBBA" + //  2530 -  2534
-                "\u8EAC\uCBBB\u8EAC\uCBBC\u8EAC\uCBBD\u8EAC\uCBBE\u8EAC\uCBBF" + //  2535 -  2539
-                "\u8EAC\uCBC0\u8EAC\uCBC1\u8EAC\uCBC2\u8EAC\uCBC3\u8EAC\uCBC4" + //  2540 -  2544
-                "\u8EAC\uCBC5\u8EAC\uCBC6\u8EAC\uCBC7\u8EAC\uCBC8\u8EAC\uCBC9" + //  2545 -  2549
-                "\u8EAC\uCBCA\u8EAC\uCBCB\u8EAC\uCBCC\u8EAC\uCBCD\u8EAC\uCBCE" + //  2550 -  2554
-                "\u8EAC\uCBCF\u8EAC\uCBD0\u8EAC\uCBD1\u8EAC\uCBD2\u8EAC\uCBD3" + //  2555 -  2559
-                "\u8EAC\uCBD4\u8EAC\uCBD5\u8EAC\uCBD6\u8EAC\uCBD7\u8EAC\uCBD8" + //  2560 -  2564
-                "\u8EAC\uCBD9\u8EAC\uCBDA\u8EAC\uCBDB\u8EAC\uCBDC\u8EAC\uCBDD" + //  2565 -  2569
-                "\u8EAC\uCBDE\u8EAC\uCBDF\u8EAC\uCBE0\u8EAC\uCBE1\u8EAC\uCBE2" + //  2570 -  2574
-                "\u8EAC\uCBE3\u8EAC\uCBE4\u8EAC\uCBE5\u8EAC\uCBE6\u8EAC\uCBE7" + //  2575 -  2579
-                "\u8EAC\uCBE8\u8EAC\uCBE9\u8EAC\uCBEA\u8EAC\uCBEB\u8EAC\uCBEC" + //  2580 -  2584
-                "\u8EAC\uCBED\u8EAC\uCBEE\u8EAC\uCBEF\u8EAC\uCBF0\u8EAC\uCBF1" + //  2585 -  2589
-                "\u8EAC\uCBF2\u8EAC\uCBF3\u8EAC\uCBF4\u8EAC\uCAD3\u8EAC\uCAD4" + //  2590 -  2594
-                "\u8EAC\uCAD5\u8EAC\uCAD6\u8EAC\uCAD7\u8EAC\uCAD8\u8EAC\uCAD9" + //  2595 -  2599
-                "\u8EAC\uCADA\u8EAC\uCADB\u8EAC\uCADC\u8EAC\uCADD\u8EAC\uCADE" + //  2600 -  2604
-                "\u8EAC\uCADF\u8EAC\uCAE0\u8EAC\uCAE1\u8EAC\uCAE2\u8EAC\uCAE3" + //  2605 -  2609
-                "\u8EAC\uCAE4\u8EAC\uCAE5\u8EAC\uCAE6\u8EAC\uCAE7\u8EAC\uCAE8" + //  2610 -  2614
-                "\u8EAC\uCAE9\u8EAC\uCAEA\u8EAC\uCAEB\u8EAC\uCAEC\u8EAC\uCAED" + //  2615 -  2619
-                "\u8EAC\uCAEE\u8EAC\uCAEF\u8EAC\uCAF0\u8EAC\uCAF1\u8EAC\uCAF2" + //  2620 -  2624
-                "\u8EAC\uCAF3\u8EAC\uCAF4\u8EAC\uCAF5\u8EAC\uCAF6\u8EAC\uCAF7" + //  2625 -  2629
-                "\u8EAC\uCAF8\u8EAC\uCAF9\u8EAC\uCAFA\u8EAC\uCAFB\u8EAC\uCAFC" + //  2630 -  2634
-                "\u8EAC\uCAFD\u8EAC\uCAFE\u8EAC\uCBA1\u8EAC\uCBA2\u8EAC\uCBA3" + //  2635 -  2639
-                "\u8EAC\uCBA4\u8EAC\uCBA5\u8EAC\uCBA6\u8EAC\uCBA7\u8EAC\uCBA8" + //  2640 -  2644
-                "\u8EAC\uCBA9\u8EAC\uCBAA\u8EAC\uCBAB\u8EAC\uCBAC\u8EAC\uCBAD" + //  2645 -  2649
-                "\u8EAC\uCBAE\u8EAC\uCBAF\u8EAC\uCBB0\u8EAC\uCBB1\u8EAC\uCBB2" + //  2650 -  2654
-                "\u8EAC\uCBB3\u8EAC\uCBB4\u8EAC\uC9F1\u8EAC\uC9F2\u8EAC\uC9F3" + //  2655 -  2659
-                "\u8EAC\uC9F4\u8EAC\uC9F5\u8EAC\uC9F6\u8EAC\uC9F7\u8EAC\uC9F8" + //  2660 -  2664
-                "\u8EAC\uC9F9\u8EAC\uC9FA\u8EAC\uC9FB\u8EAC\uC9FC\u8EAC\uC9FD" + //  2665 -  2669
-                "\u8EAC\uC9FE\u8EAC\uCAA1\u8EAC\uCAA2\u8EAC\uCAA3\u8EAC\uCAA4" + //  2670 -  2674
-                "\u8EAC\uCAA5\u8EAC\uCAA6\u8EAC\uCAA7\u8EAC\uCAA8\u8EAC\uCAA9" + //  2675 -  2679
-                "\u8EAC\uCAAA\u8EAC\uCAAB\u8EAC\uCAAC\u8EAC\uCAAD\u8EAC\uCAAE" + //  2680 -  2684
-                "\u8EAC\uCAAF\u8EAC\uCAB0\u8EAC\uCAB1\u8EAC\uCAB2\u8EAC\uCAB3" + //  2685 -  2689
-                "\u8EAC\uCAB4\u8EAC\uCAB5\u8EAC\uCAB6\u8EAC\uCAB7\u8EAC\uCAB8" + //  2690 -  2694
-                "\u8EAC\uCAB9\u8EAC\uCABA\u8EAC\uCABB\u8EAC\uCABC\u8EAC\uCABD" + //  2695 -  2699
-                "\u8EAC\uCABE\u8EAC\uCABF\u8EAC\uCAC0\u8EAC\uCAC1\u8EAC\uCAC2" + //  2700 -  2704
-                "\u8EAC\uCAC3\u8EAC\uCAC4\u8EAC\uCAC5\u8EAC\uCAC6\u8EAC\uCAC7" + //  2705 -  2709
-                "\u8EAC\uCAC8\u8EAC\uCAC9\u8EAC\uCACA\u8EAC\uCACB\u8EAC\uCACC" + //  2710 -  2714
-                "\u8EAC\uCACD\u8EAC\uCACE\u8EAC\uCACF\u8EAC\uCAD0\u8EAC\uCAD1" + //  2715 -  2719
-                "\u8EAC\uCAD2\u8EAC\uC9B1\u8EAC\uC9B2\u8EAC\uC9B3\u8EAC\uC9B4" + //  2720 -  2724
-                "\u8EAC\uC9B5\u8EAC\uC9B6\u8EAC\uC9B7\u8EAC\uC9B8\u8EAC\uC9B9" + //  2725 -  2729
-                "\u8EAC\uC9BA\u8EAC\uC9BB\u8EAC\uC9BC\u8EAC\uC9BD\u8EAC\uC9BE" + //  2730 -  2734
-                "\u8EAC\uC9BF\u8EAC\uC9C0\u8EAC\uC9C1\u8EAC\uC9C2\u8EAC\uC9C3" + //  2735 -  2739
-                "\u8EAC\uC9C4\u8EAC\uC9C5\u8EAC\uC9C6\u8EAC\uC9C7\u8EAC\uC9C8" + //  2740 -  2744
-                "\u8EAC\uC9C9\u8EAC\uC9CA\u8EAC\uC9CB\u8EAC\uC9CC\u8EAC\uC9CD" + //  2745 -  2749
-                "\u8EAC\uC9CE\u8EAC\uC9CF\u8EAC\uC9D0\u8EAC\uC9D1\u8EAC\uC9D2" + //  2750 -  2754
-                "\u8EAC\uC9D3\u8EAC\uC9D4\u8EAC\uC9D5\u8EAC\uC9D6\u8EAC\uC9D7" + //  2755 -  2759
-                "\u8EAC\uC9D8\u8EAC\uC9D9\u8EAC\uC9DA\u8EAC\uC9DB\u8EAC\uC9DC" + //  2760 -  2764
-                "\u8EAC\uC9DD\u8EAC\uC9DE\u8EAC\uC9DF\u8EAC\uC9E0\u8EAC\uC9E1" + //  2765 -  2769
-                "\u8EAC\uC9E2\u8EAC\uC9E3\u8EAC\uC9E4\u8EAC\uC9E5\u8EAC\uC9E6" + //  2770 -  2774
-                "\u8EAC\uC9E7\u8EAC\uC9E8\u8EAC\uC9E9\u8EAC\uC9EA\u8EAC\uC9EB" + //  2775 -  2779
-                "\u8EAC\uC9EC\u8EAC\uC9ED\u8EAC\uC9EE\u8EAC\uC9EF\u8EAC\uC9F0" + //  2780 -  2784
-                "\u8EAC\uC8CF\u8EAC\uC8D0\u8EAC\uC8D1\u8EAC\uC8D2\u8EAC\uC8D3" + //  2785 -  2789
-                "\u8EAC\uC8D4\u8EAC\uC8D5\u8EAC\uC8D6\u8EAC\uC8D7\u8EAC\uC8D8" + //  2790 -  2794
-                "\u8EAC\uC8D9\u8EAC\uC8DA\u8EAC\uC8DB\u8EAC\uC8DC\u8EAC\uC8DD" + //  2795 -  2799
-                "\u8EAC\uC8DE\u8EAC\uC8DF\u8EAC\uC8E0\u8EAC\uC8E1\u8EAC\uC8E2" + //  2800 -  2804
-                "\u8EAC\uC8E3\u8EAC\uC8E4\u8EAC\uC8E5\u8EAC\uC8E6\u8EAC\uC8E7" + //  2805 -  2809
-                "\u8EAC\uC8E8\u8EAC\uC8E9\u8EAC\uC8EA\u8EAC\uC8EB\u8EAC\uC8EC" + //  2810 -  2814
-                "\u8EAC\uC8ED\u8EAC\uC8EE\u8EAC\uC8EF\u8EAC\uC8F0\u8EAC\uC8F1" + //  2815 -  2819
-                "\u8EAC\uC8F2\u8EAC\uC8F3\u8EAC\uC8F4\u8EAC\uC8F5\u8EAC\uC8F6" + //  2820 -  2824
-                "\u8EAC\uC8F7\u8EAC\uC8F8\u8EAC\uC8F9\u8EAC\uC8FA\u8EAC\uC8FB" + //  2825 -  2829
-                "\u8EAC\uC8FC\u8EAC\uC8FD\u8EAC\uC8FE\u8EAC\uC9A1\u8EAC\uC9A2" + //  2830 -  2834
-                "\u8EAC\uC9A3\u8EAC\uC9A4\u8EAC\uC9A5\u8EAC\uC9A6\u8EAC\uC9A7" + //  2835 -  2839
-                "\u8EAC\uC9A8\u8EAC\uC9A9\u8EAC\uC9AA\u8EAC\uC9AB\u8EAC\uC9AC" + //  2840 -  2844
-                "\u8EAC\uC9AD\u8EAC\uC9AE\u8EAC\uC9AF\u8EAC\uC9B0\u8EAC\uC7ED" + //  2845 -  2849
-                "\u8EAC\uC7EE\u8EAC\uC7EF\u8EAC\uC7F0\u8EAC\uC7F1\u8EAC\uC7F2" + //  2850 -  2854
-                "\u8EAC\uC7F3\u8EAC\uC7F4\u8EAC\uC7F5\u8EAC\uC7F6\u8EAC\uC7F7" + //  2855 -  2859
-                "\u8EAC\uC7F8\u8EAC\uC7F9\u8EAC\uC7FA\u8EAC\uC7FB\u8EAC\uC7FC" + //  2860 -  2864
-                "\u8EAC\uC7FD\u8EAC\uC7FE\u8EAC\uC8A1\u8EAC\uC8A2\u8EAC\uC8A3" + //  2865 -  2869
-                "\u8EAC\uC8A4\u8EAC\uC8A5\u8EAC\uC8A6\u8EAC\uC8A7\u8EAC\uC8A8" + //  2870 -  2874
-                "\u8EAC\uC8A9\u8EAC\uC8AA\u8EAC\uC8AB\u8EAC\uC8AC\u8EAC\uC8AD" + //  2875 -  2879
-                "\u8EAC\uC8AE\u8EAC\uC8AF\u8EAC\uC8B0\u8EAC\uC8B1\u8EAC\uC8B2" + //  2880 -  2884
-                "\u8EAC\uC8B3\u8EAC\uC8B4\u8EAC\uC8B5\u8EAC\uC8B6\u8EAC\uC8B7" + //  2885 -  2889
-                "\u8EAC\uC8B8\u8EAC\uC8B9\u8EAC\uC8BA\u8EAC\uC8BB\u8EAC\uC8BC" + //  2890 -  2894
-                "\u8EAC\uC8BD\u8EAC\uC8BE\u8EAC\uC8BF\u8EAC\uC8C0\u8EAC\uC8C1" + //  2895 -  2899
-                "\u8EAC\uC8C2\u8EAC\uC8C3\u8EAC\uC8C4\u8EAC\uC8C5\u8EAC\uC8C6" + //  2900 -  2904
-                "\u8EAC\uC8C7\u8EAC\uC8C8\u8EAC\uC8C9\u8EAC\uC8CA\u8EAC\uC8CB" + //  2905 -  2909
-                "\u8EAC\uC8CC\u8EAC\uC8CD\u8EAC\uC8CE\u8EAC\uC7AD\u8EAC\uC7AE" + //  2910 -  2914
-                "\u8EAC\uC7AF\u8EAC\uC7B0\u8EAC\uC7B1\u8EAC\uC7B2\u8EAC\uC7B3" + //  2915 -  2919
-                "\u8EAC\uC7B4\u8EAC\uC7B5\u8EAC\uC7B6\u8EAC\uC7B7\u8EAC\uC7B8" + //  2920 -  2924
-                "\u8EAC\uC7B9\u8EAC\uC7BA\u8EAC\uC7BB\u8EAC\uC7BC\u8EAC\uC7BD" + //  2925 -  2929
-                "\u8EAC\uC7BE\u8EAC\uC7BF\u8EAC\uC7C0\u8EAC\uC7C1\u8EAC\uC7C2" + //  2930 -  2934
-                "\u8EAC\uC7C3\u8EAC\uC7C4\u8EAC\uC7C5\u8EAC\uC7C6\u8EAC\uC7C7" + //  2935 -  2939
-                "\u8EAC\uC7C8\u8EAC\uC7C9\u8EAC\uC7CA\u8EAC\uC7CB\u8EAC\uC7CC" + //  2940 -  2944
-                "\u8EAC\uC7CD\u8EAC\uC7CE\u8EAC\uC7CF\u8EAC\uC7D0\u8EAC\uC7D1" + //  2945 -  2949
-                "\u8EAC\uC7D2\u8EAC\uC7D3\u8EAC\uC7D4\u8EAC\uC7D5\u8EAC\uC7D6" + //  2950 -  2954
-                "\u8EAC\uC7D7\u8EAC\uC7D8\u8EAC\uC7D9\u8EAC\uC7DA\u8EAC\uC7DB" + //  2955 -  2959
-                "\u8EAC\uC7DC\u8EAC\uC7DD\u8EAC\uC7DE\u8EAC\uC7DF\u8EAC\uC7E0" + //  2960 -  2964
-                "\u8EAC\uC7E1\u8EAC\uC7E2\u8EAC\uC7E3\u8EAC\uC7E4\u8EAC\uC7E5" + //  2965 -  2969
-                "\u8EAC\uC7E6\u8EAC\uC7E7\u8EAC\uC7E8\u8EAC\uC7E9\u8EAC\uC7EA" + //  2970 -  2974
-                "\u8EAC\uC7EB\u8EAC\uC7EC\u8EAC\uC6CB\u8EAC\uC6CC\u8EAC\uC6CD" + //  2975 -  2979
-                "\u8EAC\uC6CE\u8EAC\uC6CF\u8EAC\uC6D0\u8EAC\uC6D1\u8EAC\uC6D2" + //  2980 -  2984
-                "\u8EAC\uC6D3\u8EAC\uC6D4\u8EAC\uC6D5\u8EAC\uC6D6\u8EAC\uC6D7" + //  2985 -  2989
-                "\u8EAC\uC6D8\u8EAC\uC6D9\u8EAC\uC6DA\u8EAC\uC6DB\u8EAC\uC6DC" + //  2990 -  2994
-                "\u8EAC\uC6DD\u8EAC\uC6DE\u8EAC\uC6DF\u8EAC\uC6E0\u8EAC\uC6E1" + //  2995 -  2999
-                "\u8EAC\uC6E2\u8EAC\uC6E3\u8EAC\uC6E4\u8EAC\uC6E5\u8EAC\uC6E6" + //  3000 -  3004
-                "\u8EAC\uC6E7\u8EAC\uC6E8\u8EAC\uC6E9\u8EAC\uC6EA\u8EAC\uC6EB" + //  3005 -  3009
-                "\u8EAC\uC6EC\u8EAC\uC6ED\u8EAC\uC6EE\u8EAC\uC6EF\u8EAC\uC6F0" + //  3010 -  3014
-                "\u8EAC\uC6F1\u8EAC\uC6F2\u8EAC\uC6F3\u8EAC\uC6F4\u8EAC\uC6F5" + //  3015 -  3019
-                "\u8EAC\uC6F6\u8EAC\uC6F7\u8EAC\uC6F8\u8EAC\uC6F9\u8EAC\uC6FA" + //  3020 -  3024
-                "\u8EAC\uC6FB\u8EAC\uC6FC\u8EAC\uC6FD\u8EAC\uC6FE\u8EAC\uC7A1" + //  3025 -  3029
-                "\u8EAC\uC7A2\u8EAC\uC7A3\u8EAC\uC7A4\u8EAC\uC7A5\u8EAC\uC7A6" + //  3030 -  3034
-                "\u8EAC\uC7A7\u8EAC\uC7A8\u8EAC\uC7A9\u8EAC\uC7AA\u8EAC\uC7AB" + //  3035 -  3039
-                "\u8EAC\uC7AC\u8EAC\uC5E9\u8EAC\uC5EA\u8EAC\uC5EB\u8EAC\uC5EC" + //  3040 -  3044
-                "\u8EAC\uC5ED\u8EAC\uC5EE\u8EAC\uC5EF\u8EAC\uC5F0\u8EAC\uC5F1" + //  3045 -  3049
-                "\u8EAC\uC5F2\u8EAC\uC5F3\u8EAC\uC5F4\u8EAC\uC5F5\u8EAC\uC5F6" + //  3050 -  3054
-                "\u8EAC\uC5F7\u8EAC\uC5F8\u8EAC\uC5F9\u8EAC\uC5FA\u8EAC\uC5FB" + //  3055 -  3059
-                "\u8EAC\uC5FC\u8EAC\uC5FD\u8EAC\uC5FE\u8EAC\uC6A1\u8EAC\uC6A2" + //  3060 -  3064
-                "\u8EAC\uC6A3\u8EAC\uC6A4\u8EAC\uC6A5\u8EAC\uC6A6\u8EAC\uC6A7" + //  3065 -  3069
-                "\u8EAC\uC6A8\u8EAC\uC6A9\u8EAC\uC6AA\u8EAC\uC6AB\u8EAC\uC6AC" + //  3070 -  3074
-                "\u8EAC\uC6AD\u8EAC\uC6AE\u8EAC\uC6AF\u8EAC\uC6B0\u8EAC\uC6B1" + //  3075 -  3079
-                "\u8EAC\uC6B2\u8EAC\uC6B3\u8EAC\uC6B4\u8EAC\uC6B5\u8EAC\uC6B6" + //  3080 -  3084
-                "\u8EAC\uC6B7\u8EAC\uC6B8\u8EAC\uC6B9\u8EAC\uC6BA\u8EAC\uC6BB" + //  3085 -  3089
-                "\u8EAC\uC6BC\u8EAC\uC6BD\u8EAC\uC6BE\u8EAC\uC6BF\u8EAC\uC6C0" + //  3090 -  3094
-                "\u8EAC\uC6C1\u8EAC\uC6C2\u8EAC\uC6C3\u8EAC\uC6C4\u8EAC\uC6C5" + //  3095 -  3099
-                "\u8EAC\uC6C6\u8EAC\uC6C7\u8EAC\uC6C8\u8EAC\uC6C9\u8EAC\uC6CA" + //  3100 -  3104
-                "\u8EAC\uC5A9\u8EAC\uC5AA\u8EAC\uC5AB\u8EAC\uC5AC\u8EAC\uC5AD" + //  3105 -  3109
-                "\u8EAC\uC5AE\u8EAC\uC5AF\u8EAC\uC5B0\u8EAC\uC5B1\u8EAC\uC5B2" + //  3110 -  3114
-                "\u8EAC\uC5B3\u8EAC\uC5B4\u8EAC\uC5B5\u8EAC\uC5B6\u8EAC\uC5B7" + //  3115 -  3119
-                "\u8EAC\uC5B8\u8EAC\uC5B9\u8EAC\uC5BA\u8EAC\uC5BB\u8EAC\uC5BC" + //  3120 -  3124
-                "\u8EAC\uC5BD\u8EAC\uC5BE\u8EAC\uC5BF\u8EAC\uC5C0\u8EAC\uC5C1" + //  3125 -  3129
-                "\u8EAC\uC5C2\u8EAC\uC5C3\u8EAC\uC5C4\u8EAC\uC5C5\u8EAC\uC5C6" + //  3130 -  3134
-                "\u8EAC\uC5C7\u8EAC\uC5C8\u8EAC\uC5C9\u8EAC\uC5CA\u8EAC\uC5CB" + //  3135 -  3139
-                "\u8EAC\uC5CC\u8EAC\uC5CD\u8EAC\uC5CE\u8EAC\uC5CF\u8EAC\uC5D0" + //  3140 -  3144
-                "\u8EAC\uC5D1\u8EAC\uC5D2\u8EAC\uC5D3\u8EAC\uC5D4\u8EAC\uC5D5" + //  3145 -  3149
-                "\u8EAC\uC5D6\u8EAC\uC5D7\u8EAC\uC5D8\u8EAC\uC5D9\u8EAC\uC5DA" + //  3150 -  3154
-                "\u8EAC\uC5DB\u8EAC\uC5DC\u8EAC\uC5DD\u8EAC\uC5DE\u8EAC\uC5DF" + //  3155 -  3159
-                "\u8EAC\uC5E0\u8EAC\uC5E1\u8EAC\uC5E2\u8EAC\uC5E3\u8EAC\uC5E4" + //  3160 -  3164
-                "\u8EAC\uC5E5\u8EAC\uC5E6\u8EAC\uC5E7\u8EAC\uC5E8\u8EAC\uC4C7" + //  3165 -  3169
-                "\u8EAC\uC4C8\u8EAC\uC4C9\u8EAC\uC4CA\u8EAC\uC4CB\u8EAC\uC4CC" + //  3170 -  3174
-                "\u8EAC\uC4CD\u8EAC\uC4CE\u8EAC\uC4CF\u8EAC\uC4D0\u8EAC\uC4D1" + //  3175 -  3179
-                "\u8EAC\uC4D2\u8EAC\uC4D3\u8EAC\uC4D4\u8EAC\uC4D5\u8EAC\uC4D6" + //  3180 -  3184
-                "\u8EAC\uC4D7\u8EAC\uC4D8\u8EAC\uC4D9\u8EAC\uC4DA\u8EAC\uC4DB" + //  3185 -  3189
-                "\u8EAC\uC4DC\u8EAC\uC4DD\u8EAC\uC4DE\u8EAC\uC4DF\u8EAC\uC4E0" + //  3190 -  3194
-                "\u8EAC\uC4E1\u8EAC\uC4E2\u8EAC\uC4E3\u8EAC\uC4E4\u8EAC\uC4E5" + //  3195 -  3199
-                "\u8EAC\uC4E6\u8EAC\uC4E7\u8EAC\uC4E8\u8EAC\uC4E9\u8EAC\uC4EA" + //  3200 -  3204
-                "\u8EAC\uC4EB\u8EAC\uC4EC\u8EAC\uC4ED\u8EAC\uC4EE\u8EAC\uC4EF" + //  3205 -  3209
-                "\u8EAC\uC4F0\u8EAC\uC4F1\u8EAC\uC4F2\u8EAC\uC4F3\u8EAC\uC4F4" + //  3210 -  3214
-                "\u8EAC\uC4F5\u8EAC\uC4F6\u8EAC\uC4F7\u8EAC\uC4F8\u8EAC\uC4F9" + //  3215 -  3219
-                "\u8EAC\uC4FA\u8EAC\uC4FB\u8EAC\uC4FC\u8EAC\uC4FD\u8EAC\uC4FE" + //  3220 -  3224
-                "\u8EAC\uC5A1\u8EAC\uC5A2\u8EAC\uC5A3\u8EAC\uC5A4\u8EAC\uC5A5" + //  3225 -  3229
-                "\u8EAC\uC5A6\u8EAC\uC5A7\u8EAC\uC5A8\u8EAC\uC3E5\u8EAC\uC3E6" + //  3230 -  3234
-                "\u8EAC\uC3E7\u8EAC\uC3E8\u8EAC\uC3E9\u8EAC\uC3EA\u8EAC\uC3EB" + //  3235 -  3239
-                "\u8EAC\uC3EC\u8EAC\uC3ED\u8EAC\uC3EE\u8EAC\uC3EF\u8EAC\uC3F0" + //  3240 -  3244
-                "\u8EAC\uC3F1\u8EAC\uC3F2\u8EAC\uC3F3\u8EAC\uC3F4\u8EAC\uC3F5" + //  3245 -  3249
-                "\u8EAC\uC3F6\u8EAC\uC3F7\u8EAC\uC3F8\u8EAC\uC3F9\u8EAC\uC3FA" + //  3250 -  3254
-                "\u8EAC\uC3FB\u8EAC\uC3FC\u8EAC\uC3FD\u8EAC\uC3FE\u8EAC\uC4A1" + //  3255 -  3259
-                "\u8EAC\uC4A2\u8EAC\uC4A3\u8EAC\uC4A4\u8EAC\uC4A5\u8EAC\uC4A6" + //  3260 -  3264
-                "\u8EAC\uC4A7\u8EAC\uC4A8\u8EAC\uC4A9\u8EAC\uC4AA\u8EAC\uC4AB" + //  3265 -  3269
-                "\u8EAC\uC4AC\u8EAC\uC4AD\u8EAC\uC4AE\u8EAC\uC4AF\u8EAC\uC4B0" + //  3270 -  3274
-                "\u8EAC\uC4B1\u8EAC\uC4B2\u8EAC\uC4B3\u8EAC\uC4B4\u8EAC\uC4B5" + //  3275 -  3279
-                "\u8EAC\uC4B6\u8EAC\uC4B7\u8EAC\uC4B8\u8EAC\uC4B9\u8EAC\uC4BA" + //  3280 -  3284
-                "\u8EAC\uC4BB\u8EAC\uC4BC\u8EAC\uC4BD\u8EAC\uC4BE\u8EAC\uC4BF" + //  3285 -  3289
-                "\u8EAC\uC4C0\u8EAC\uC4C1\u8EAC\uC4C2\u8EAC\uC4C3\u8EAC\uC4C4" + //  3290 -  3294
-                "\u8EAC\uC4C5\u8EAC\uC4C6\u8EAC\uC3A5\u8EAC\uC3A6\u8EAC\uC3A7" + //  3295 -  3299
-                "\u8EAC\uC3A8\u8EAC\uC3A9\u8EAC\uC3AA\u8EAC\uC3AB\u8EAC\uC3AC" + //  3300 -  3304
-                "\u8EAC\uC3AD\u8EAC\uC3AE\u8EAC\uC3AF\u8EAC\uC3B0\u8EAC\uC3B1" + //  3305 -  3309
-                "\u8EAC\uC3B2\u8EAC\uC3B3\u8EAC\uC3B4\u8EAC\uC3B5\u8EAC\uC3B6" + //  3310 -  3314
-                "\u8EAC\uC3B7\u8EAC\uC3B8\u8EAC\uC3B9\u8EAC\uC3BA\u8EAC\uC3BB" + //  3315 -  3319
-                "\u8EAC\uC3BC\u8EAC\uC3BD\u8EAC\uC3BE\u8EAC\uC3BF\u8EAC\uC3C0" + //  3320 -  3324
-                "\u8EAC\uC3C1\u8EAC\uC3C2\u8EAC\uC3C3\u8EAC\uC3C4\u8EAC\uC3C5" + //  3325 -  3329
-                "\u8EAC\uC3C6\u8EAC\uC3C7\u8EAC\uC3C8\u8EAC\uC3C9\u8EAC\uC3CA" + //  3330 -  3334
-                "\u8EAC\uC3CB\u8EAC\uC3CC\u8EAC\uC3CD\u8EAC\uC3CE\u8EAC\uC3CF" + //  3335 -  3339
-                "\u8EAC\uC3D0\u8EAC\uC3D1\u8EAC\uC3D2\u8EAC\uC3D3\u8EAC\uC3D4" + //  3340 -  3344
-                "\u8EAC\uC3D5\u8EAC\uC3D6\u8EAC\uC3D7\u8EAC\uC3D8\u8EAC\uC3D9" + //  3345 -  3349
-                "\u8EAC\uC3DA\u8EAC\uC3DB\u8EAC\uC3DC\u8EAC\uC3DD\u8EAC\uC3DE" + //  3350 -  3354
-                "\u8EAC\uC3DF\u8EAC\uC3E0\u8EAC\uC3E1\u8EAC\uC3E2\u8EAC\uC3E3" + //  3355 -  3359
-                "\u8EAC\uC3E4\u8EAC\uC2C3\u8EAC\uC2C4\u8EAC\uC2C5\u8EAC\uC2C6" + //  3360 -  3364
-                "\u8EAC\uC2C7\u8EAC\uC2C8\u8EAC\uC2C9\u8EAC\uC2CA\u8EAC\uC2CB" + //  3365 -  3369
-                "\u8EAC\uC2CC\u8EAC\uC2CD\u8EAC\uC2CE\u8EAC\uC2CF\u8EAC\uC2D0" + //  3370 -  3374
-                "\u8EAC\uC2D1\u8EAC\uC2D2\u8EAC\uC2D3\u8EAC\uC2D4\u8EAC\uC2D5" + //  3375 -  3379
-                "\u8EAC\uC2D6\u8EAC\uC2D7\u8EAC\uC2D8\u8EAC\uC2D9\u8EAC\uC2DA" + //  3380 -  3384
-                "\u8EAC\uC2DB\u8EAC\uC2DC\u8EAC\uC2DD\u8EAC\uC2DE\u8EAC\uC2DF" + //  3385 -  3389
-                "\u8EAC\uC2E0\u8EAC\uC2E1\u8EAC\uC2E2\u8EAC\uC2E3\u8EAC\uC2E4" + //  3390 -  3394
-                "\u8EAC\uC2E5\u8EAC\uC2E6\u8EAC\uC2E7\u8EAC\uC2E8\u8EAC\uC2E9" + //  3395 -  3399
-                "\u8EAC\uC2EA\u8EAC\uC2EB\u8EAC\uC2EC\u8EAC\uC2ED\u8EAC\uC2EE" + //  3400 -  3404
-                "\u8EAC\uC2EF\u8EAC\uC2F0\u8EAC\uC2F1\u8EAC\uC2F2\u8EAC\uC2F3" + //  3405 -  3409
-                "\u8EAC\uC2F4\u8EAC\uC2F5\u8EAC\uC2F6\u8EAC\uC2F7\u8EAC\uC2F8" + //  3410 -  3414
-                "\u8EAC\uC2F9\u8EAC\uC2FA\u8EAC\uC2FB\u8EAC\uC2FC\u8EAC\uC2FD" + //  3415 -  3419
-                "\u8EAC\uC2FE\u8EAC\uC3A1\u8EAC\uC3A2\u8EAC\uC3A3\u8EAC\uC3A4" + //  3420 -  3424
-                "\u8EAC\uC1E1\u8EAC\uC1E2\u8EAC\uC1E3\u8EAC\uC1E4\u8EAC\uC1E5" + //  3425 -  3429
-                "\u8EAC\uC1E6\u8EAC\uC1E7\u8EAC\uC1E8\u8EAC\uC1E9\u8EAC\uC1EA" + //  3430 -  3434
-                "\u8EAC\uC1EB\u8EAC\uC1EC\u8EAC\uC1ED\u8EAC\uC1EE\u8EAC\uC1EF" + //  3435 -  3439
-                "\u8EAC\uC1F0\u8EAC\uC1F1\u8EAC\uC1F2\u8EAC\uC1F3\u8EAC\uC1F4" + //  3440 -  3444
-                "\u8EAC\uC1F5\u8EAC\uC1F6\u8EAC\uC1F7\u8EAC\uC1F8\u8EAC\uC1F9" + //  3445 -  3449
-                "\u8EAC\uC1FA\u8EAC\uC1FB\u8EAC\uC1FC\u8EAC\uC1FD\u8EAC\uC1FE" + //  3450 -  3454
-                "\u8EAC\uC2A1\u8EAC\uC2A2\u8EAC\uC2A3\u8EAC\uC2A4\u8EAC\uC2A5" + //  3455 -  3459
-                "\u8EAC\uC2A6\u8EAC\uC2A7\u8EAC\uC2A8\u8EAC\uC2A9\u8EAC\uC2AA" + //  3460 -  3464
-                "\u8EAC\uC2AB\u8EAC\uC2AC\u8EAC\uC2AD\u8EAC\uC2AE\u8EAC\uC2AF" + //  3465 -  3469
-                "\u8EAC\uC2B0\u8EAC\uC2B1\u8EAC\uC2B2\u8EAC\uC2B3\u8EAC\uC2B4" + //  3470 -  3474
-                "\u8EAC\uC2B5\u8EAC\uC2B6\u8EAC\uC2B7\u8EAC\uC2B8\u8EAC\uC2B9" + //  3475 -  3479
-                "\u8EAC\uC2BA\u8EAC\uC2BB\u8EAC\uC2BC\u8EAC\uC2BD\u8EAC\uC2BE" + //  3480 -  3484
-                "\u8EAC\uC2BF\u8EAC\uC2C0\u8EAC\uC2C1\u8EAC\uC2C2\u8EAC\uC1A1" + //  3485 -  3489
-                "\u8EAC\uC1A2\u8EAC\uC1A3\u8EAC\uC1A4\u8EAC\uC1A5\u8EAC\uC1A6" + //  3490 -  3494
-                "\u8EAC\uC1A7\u8EAC\uC1A8\u8EAC\uC1A9\u8EAC\uC1AA\u8EAC\uC1AB" + //  3495 -  3499
-                "\u8EAC\uC1AC\u8EAC\uC1AD\u8EAC\uC1AE\u8EAC\uC1AF\u8EAC\uC1B0" + //  3500 -  3504
-                "\u8EAC\uC1B1\u8EAC\uC1B2\u8EAC\uC1B3\u8EAC\uC1B4\u8EAC\uC1B5" + //  3505 -  3509
-                "\u8EAC\uC1B6\u8EAC\uC1B7\u8EAC\uC1B8\u8EAC\uC1B9\u8EAC\uC1BA" + //  3510 -  3514
-                "\u8EAC\uC1BB\u8EAC\uC1BC\u8EAC\uC1BD\u8EAC\uC1BE\u8EAC\uC1BF" + //  3515 -  3519
-                "\u8EAC\uC1C0\u8EAC\uC1C1\u8EAC\uC1C2\u8EAC\uC1C3\u8EAC\uC1C4" + //  3520 -  3524
-                "\u8EAC\uC1C5\u8EAC\uC1C6\u8EAC\uC1C7\u8EAC\uC1C8\u8EAC\uC1C9" + //  3525 -  3529
-                "\u8EAC\uC1CA\u8EAC\uC1CB\u8EAC\uC1CC\u8EAC\uC1CD\u8EAC\uC1CE" + //  3530 -  3534
-                "\u8EAC\uC1CF\u8EAC\uC1D0\u8EAC\uC1D1\u8EAC\uC1D2\u8EAC\uC1D3" + //  3535 -  3539
-                "\u8EAC\uC1D4\u8EAC\uC1D5\u8EAC\uC1D6\u8EAC\uC1D7\u8EAC\uC1D8" + //  3540 -  3544
-                "\u8EAC\uC1D9\u8EAC\uC1DA\u8EAC\uC1DB\u8EAC\uC1DC\u8EAC\uC1DD" + //  3545 -  3549
-                "\u8EAC\uC1DE\u8EAC\uC1DF\u8EAC\uC1E0\u8EAC\uC0BF\u8EAC\uC0C0" + //  3550 -  3554
-                "\u8EAC\uC0C1\u8EAC\uC0C2\u8EAC\uC0C3\u8EAC\uC0C4\u8EAC\uC0C5" + //  3555 -  3559
-                "\u8EAC\uC0C6\u8EAC\uC0C7\u8EAC\uC0C8\u8EAC\uC0C9\u8EAC\uC0CA" + //  3560 -  3564
-                "\u8EAC\uC0CB\u8EAC\uC0CC\u8EAC\uC0CD\u8EAC\uC0CE\u8EAC\uC0CF" + //  3565 -  3569
-                "\u8EAC\uC0D0\u8EAC\uC0D1\u8EAC\uC0D2\u8EAC\uC0D3\u8EAC\uC0D4" + //  3570 -  3574
-                "\u8EAC\uC0D5\u8EAC\uC0D6\u8EAC\uC0D7\u8EAC\uC0D8\u8EAC\uC0D9" + //  3575 -  3579
-                "\u8EAC\uC0DA\u8EAC\uC0DB\u8EAC\uC0DC\u8EAC\uC0DD\u8EAC\uC0DE" + //  3580 -  3584
-                "\u8EAC\uC0DF\u8EAC\uC0E0\u8EAC\uC0E1\u8EAC\uC0E2\u8EAC\uC0E3" + //  3585 -  3589
-                "\u8EAC\uC0E4\u8EAC\uC0E5\u8EAC\uC0E6\u8EAC\uC0E7\u8EAC\uC0E8" + //  3590 -  3594
-                "\u8EAC\uC0E9\u8EAC\uC0EA\u8EAC\uC0EB\u8EAC\uC0EC\u8EAC\uC0ED" + //  3595 -  3599
-                "\u8EAC\uC0EE\u8EAC\uC0EF\u8EAC\uC0F0\u8EAC\uC0F1\u8EAC\uC0F2" + //  3600 -  3604
-                "\u8EAC\uC0F3\u8EAC\uC0F4\u8EAC\uC0F5\u8EAC\uC0F6\u8EAC\uC0F7" + //  3605 -  3609
-                "\u8EAC\uC0F8\u8EAC\uC0F9\u8EAC\uC0FA\u8EAC\uC0FB\u8EAC\uC0FC" + //  3610 -  3614
-                "\u8EAC\uC0FD\u8EAC\uC0FE\u8EAC\uBFDD\u8EAC\uBFDE\u8EAC\uBFDF" + //  3615 -  3619
-                "\u8EAC\uBFE0\u8EAC\uBFE1\u8EAC\uBFE2\u8EAC\uBFE3\u8EAC\uBFE4" + //  3620 -  3624
-                "\u8EAC\uBFE5\u8EAC\uBFE6\u8EAC\uBFE7\u8EAC\uBFE8\u8EAC\uBFE9" + //  3625 -  3629
-                "\u8EAC\uBFEA\u8EAC\uBFEB\u8EAC\uBFEC\u8EAC\uBFED\u8EAC\uBFEE" + //  3630 -  3634
-                "\u8EAC\uBFEF\u8EAC\uBFF0\u8EAC\uBFF1\u8EAC\uBFF2\u8EAC\uBFF3" + //  3635 -  3639
-                "\u8EAC\uBFF4\u8EAC\uBFF5\u8EAC\uBFF6\u8EAC\uBFF7\u8EAC\uBFF8" + //  3640 -  3644
-                "\u8EAC\uBFF9\u8EAC\uBFFA\u8EAC\uBFFB\u8EAC\uBFFC\u8EAC\uBFFD" + //  3645 -  3649
-                "\u8EAC\uBFFE\u8EAC\uC0A1\u8EAC\uC0A2\u8EAC\uC0A3\u8EAC\uC0A4" + //  3650 -  3654
-                "\u8EAC\uC0A5\u8EAC\uC0A6\u8EAC\uC0A7\u8EAC\uC0A8\u8EAC\uC0A9" + //  3655 -  3659
-                "\u8EAC\uC0AA\u8EAC\uC0AB\u8EAC\uC0AC\u8EAC\uC0AD\u8EAC\uC0AE" + //  3660 -  3664
-                "\u8EAC\uC0AF\u8EAC\uC0B0\u8EAC\uC0B1\u8EAC\uC0B2\u8EAC\uC0B3" + //  3665 -  3669
-                "\u8EAC\uC0B4\u8EAC\uC0B5\u8EAC\uC0B6\u8EAC\uC0B7\u8EAC\uC0B8" + //  3670 -  3674
-                "\u8EAC\uC0B9\u8EAC\uC0BA\u8EAC\uC0BB\u8EAC\uC0BC\u8EAC\uC0BD" + //  3675 -  3679
-                "\u8EAC\uC0BE\u8EAC\uBEFB\u8EAC\uBEFC\u8EAC\uBEFD\u8EAC\uBEFE" + //  3680 -  3684
-                "\u8EAC\uBFA1\u8EAC\uBFA2\u8EAC\uBFA3\u8EAC\uBFA4\u8EAC\uBFA5" + //  3685 -  3689
-                "\u8EAC\uBFA6\u8EAC\uBFA7\u8EAC\uBFA8\u8EAC\uBFA9\u8EAC\uBFAA" + //  3690 -  3694
-                "\u8EAC\uBFAB\u8EAC\uBFAC\u8EAC\uBFAD\u8EAC\uBFAE\u8EAC\uBFAF" + //  3695 -  3699
-                "\u8EAC\uBFB0\u8EAC\uBFB1\u8EAC\uBFB2\u8EAC\uBFB3\u8EAC\uBFB4" + //  3700 -  3704
-                "\u8EAC\uBFB5\u8EAC\uBFB6\u8EAC\uBFB7\u8EAC\uBFB8\u8EAC\uBFB9" + //  3705 -  3709
-                "\u8EAC\uBFBA\u8EAC\uBFBB\u8EAC\uBFBC\u8EAC\uBFBD\u8EAC\uBFBE" + //  3710 -  3714
-                "\u8EAC\uBFBF\u8EAC\uBFC0\u8EAC\uBFC1\u8EAC\uBFC2\u8EAC\uBFC3" + //  3715 -  3719
-                "\u8EAC\uBFC4\u8EAC\uBFC5\u8EAC\uBFC6\u8EAC\uBFC7\u8EAC\uBFC8" + //  3720 -  3724
-                "\u8EAC\uBFC9\u8EAC\uBFCA\u8EAC\uBFCB\u8EAC\uBFCC\u8EAC\uBFCD" + //  3725 -  3729
-                "\u8EAC\uBFCE\u8EAC\uBFCF\u8EAC\uBFD0\u8EAC\uBFD1\u8EAC\uBFD2" + //  3730 -  3734
-                "\u8EAC\uBFD3\u8EAC\uBFD4\u8EAC\uBFD5\u8EAC\uBFD6\u8EAC\uBFD7" + //  3735 -  3739
-                "\u8EAC\uBFD8\u8EAC\uBFD9\u8EAC\uBFDA\u8EAC\uBFDB\u8EAC\uBFDC" + //  3740 -  3744
-                "\u8EAC\uBEBB\u8EAC\uBEBC\u8EAC\uBEBD\u8EAC\uBEBE\u8EAC\uBEBF" + //  3745 -  3749
-                "\u8EAC\uBEC0\u8EAC\uBEC1\u8EAC\uBEC2\u8EAC\uBEC3\u8EAC\uBEC4" + //  3750 -  3754
-                "\u8EAC\uBEC5\u8EAC\uBEC6\u8EAC\uBEC7\u8EAC\uBEC8\u8EAC\uBEC9" + //  3755 -  3759
-                "\u8EAC\uBECA\u8EAC\uBECB\u8EAC\uBECC\u8EAC\uBECD\u8EAC\uBECE" + //  3760 -  3764
-                "\u8EAC\uBECF\u8EAC\uBED0\u8EAC\uBED1\u8EAC\uBED2\u8EAC\uBED3" + //  3765 -  3769
-                "\u8EAC\uBED4\u8EAC\uBED5\u8EAC\uBED6\u8EAC\uBED7\u8EAC\uBED8" + //  3770 -  3774
-                "\u8EAC\uBED9\u8EAC\uBEDA\u8EAC\uBEDB\u8EAC\uBEDC\u8EAC\uBEDD" + //  3775 -  3779
-                "\u8EAC\uBEDE\u8EAC\uBEDF\u8EAC\uBEE0\u8EAC\uBEE1\u8EAC\uBEE2" + //  3780 -  3784
-                "\u8EAC\uBEE3\u8EAC\uBEE4\u8EAC\uBEE5\u8EAC\uBEE6\u8EAC\uBEE7" + //  3785 -  3789
-                "\u8EAC\uBEE8\u8EAC\uBEE9\u8EAC\uBEEA\u8EAC\uBEEB\u8EAC\uBEEC" + //  3790 -  3794
-                "\u8EAC\uBEED\u8EAC\uBEEE\u8EAC\uBEEF\u8EAC\uBEF0\u8EAC\uBEF1" + //  3795 -  3799
-                "\u8EAC\uBEF2\u8EAC\uBEF3\u8EAC\uBEF4\u8EAC\uBEF5\u8EAC\uBEF6" + //  3800 -  3804
-                "\u8EAC\uBEF7\u8EAC\uBEF8\u8EAC\uBEF9\u8EAC\uBEFA\u8EAC\uBDD9" + //  3805 -  3809
-                "\u8EAC\uBDDA\u8EAC\uBDDB\u8EAC\uBDDC\u8EAC\uBDDD\u8EAC\uBDDE" + //  3810 -  3814
-                "\u8EAC\uBDDF\u8EAC\uBDE0\u8EAC\uBDE1\u8EAC\uBDE2\u8EAC\uBDE3" + //  3815 -  3819
-                "\u8EAC\uBDE4\u8EAC\uBDE5\u8EAC\uBDE6\u8EAC\uBDE7\u8EAC\uBDE8" + //  3820 -  3824
-                "\u8EAC\uBDE9\u8EAC\uBDEA\u8EAC\uBDEB\u8EAC\uBDEC\u8EAC\uBDED" + //  3825 -  3829
-                "\u8EAC\uBDEE\u8EAC\uBDEF\u8EAC\uBDF0\u8EAC\uBDF1\u8EAC\uBDF2" + //  3830 -  3834
-                "\u8EAC\uBDF3\u8EAC\uBDF4\u8EAC\uBDF5\u8EAC\uBDF6\u8EAC\uBDF7" + //  3835 -  3839
-                "\u8EAC\uBDF8\u8EAC\uBDF9\u8EAC\uBDFA\u8EAC\uBDFB\u8EAC\uBDFC" + //  3840 -  3844
-                "\u8EAC\uBDFD\u8EAC\uBDFE\u8EAC\uBEA1\u8EAC\uBEA2\u8EAC\uBEA3" + //  3845 -  3849
-                "\u8EAC\uBEA4\u8EAC\uBEA5\u8EAC\uBEA6\u8EAC\uBEA7\u8EAC\uBEA8" + //  3850 -  3854
-                "\u8EAC\uBEA9\u8EAC\uBEAA\u8EAC\uBEAB\u8EAC\uBEAC\u8EAC\uBEAD" + //  3855 -  3859
-                "\u8EAC\uBEAE\u8EAC\uBEAF\u8EAC\uBEB0\u8EAC\uBEB1\u8EAC\uBEB2" + //  3860 -  3864
-                "\u8EAC\uBEB3\u8EAC\uBEB4\u8EAC\uBEB5\u8EAC\uBEB6\u8EAC\uBEB7" + //  3865 -  3869
-                "\u8EAC\uBEB8\u8EAC\uBEB9\u8EAC\uBEBA\u8EAC\uBCF7\u8EAC\uBCF8" + //  3870 -  3874
-                "\u8EAC\uBCF9\u8EAC\uBCFA\u8EAC\uBCFB\u8EAC\uBCFC\u8EAC\uBCFD" + //  3875 -  3879
-                "\u8EAC\uBCFE\u8EAC\uBDA1\u8EAC\uBDA2\u8EAC\uBDA3\u8EAC\uBDA4" + //  3880 -  3884
-                "\u8EAC\uBDA5\u8EAC\uBDA6\u8EAC\uBDA7\u8EAC\uBDA8\u8EAC\uBDA9" + //  3885 -  3889
-                "\u8EAC\uBDAA\u8EAC\uBDAB\u8EAC\uBDAC\u8EAC\uBDAD\u8EAC\uBDAE" + //  3890 -  3894
-                "\u8EAC\uBDAF\u8EAC\uBDB0\u8EAC\uBDB1\u8EAC\uBDB2\u8EAC\uBDB3" + //  3895 -  3899
-                "\u8EAC\uBDB4\u8EAC\uBDB5\u8EAC\uBDB6\u8EAC\uBDB7\u8EAC\uBDB8" + //  3900 -  3904
-                "\u8EAC\uBDB9\u8EAC\uBDBA\u8EAC\uBDBB\u8EAC\uBDBC\u8EAC\uBDBD" + //  3905 -  3909
-                "\u8EAC\uBDBE\u8EAC\uBDBF\u8EAC\uBDC0\u8EAC\uBDC1\u8EAC\uBDC2" + //  3910 -  3914
-                "\u8EAC\uBDC3\u8EAC\uBDC4\u8EAC\uBDC5\u8EAC\uBDC6\u8EAC\uBDC7" + //  3915 -  3919
-                "\u8EAC\uBDC8\u8EAC\uBDC9\u8EAC\uBDCA\u8EAC\uBDCB\u8EAC\uBDCC" + //  3920 -  3924
-                "\u8EAC\uBDCD\u8EAC\uBDCE\u8EAC\uBDCF\u8EAC\uBDD0\u8EAC\uBDD1" + //  3925 -  3929
-                "\u8EAC\uBDD2\u8EAC\uBDD3\u8EAC\uBDD4\u8EAC\uBDD5\u8EAC\uBDD6" + //  3930 -  3934
-                "\u8EAC\uBDD7\u8EAC\uBDD8\u8EAC\uBCB7\u8EAC\uBCB8\u8EAC\uBCB9" + //  3935 -  3939
-                "\u8EAC\uBCBA\u8EAC\uBCBB\u8EAC\uBCBC\u8EAC\uBCBD\u8EAC\uBCBE" + //  3940 -  3944
-                "\u8EAC\uBCBF\u8EAC\uBCC0\u8EAC\uBCC1\u8EAC\uBCC2\u8EAC\uBCC3" + //  3945 -  3949
-                "\u8EAC\uBCC4\u8EAC\uBCC5\u8EAC\uBCC6\u8EAC\uBCC7\u8EAC\uBCC8" + //  3950 -  3954
-                "\u8EAC\uBCC9\u8EAC\uBCCA\u8EAC\uBCCB\u8EAC\uBCCC\u8EAC\uBCCD" + //  3955 -  3959
-                "\u8EAC\uBCCE\u8EAC\uBCCF\u8EAC\uBCD0\u8EAC\uBCD1\u8EAC\uBCD2" + //  3960 -  3964
-                "\u8EAC\uBCD3\u8EAC\uBCD4\u8EAC\uBCD5\u8EAC\uBCD6\u8EAC\uBCD7" + //  3965 -  3969
-                "\u8EAC\uBCD8\u8EAC\uBCD9\u8EAC\uBCDA\u8EAC\uBCDB\u8EAC\uBCDC" + //  3970 -  3974
-                "\u8EAC\uBCDD\u8EAC\uBCDE\u8EAC\uBCDF\u8EAC\uBCE0\u8EAC\uBCE1" + //  3975 -  3979
-                "\u8EAC\uBCE2\u8EAC\uBCE3\u8EAC\uBCE4\u8EAC\uBCE5\u8EAC\uBCE6" + //  3980 -  3984
-                "\u8EAC\uBCE7\u8EAC\uBCE8\u8EAC\uBCE9\u8EAC\uBCEA\u8EAC\uBCEB" + //  3985 -  3989
-                "\u8EAC\uBCEC\u8EAC\uBCED\u8EAC\uBCEE\u8EAC\uBCEF\u8EAC\uBCF0" + //  3990 -  3994
-                "\u8EAC\uBCF1\u8EAC\uBCF2\u8EAC\uBCF3\u8EAC\uBCF4\u8EAC\uBCF5" + //  3995 -  3999
-                "\u8EAC\uBCF6\u8EAC\uBBD5\u8EAC\uBBD6\u8EAC\uBBD7\u8EAC\uBBD8" + //  4000 -  4004
-                "\u8EAC\uBBD9\u8EAC\uBBDA\u8EAC\uBBDB\u8EAC\uBBDC\u8EAC\uBBDD" + //  4005 -  4009
-                "\u8EAC\uBBDE\u8EAC\uBBDF\u8EAC\uBBE0\u8EAC\uBBE1\u8EAC\uBBE2" + //  4010 -  4014
-                "\u8EAC\uBBE3\u8EAC\uBBE4\u8EAC\uBBE5\u8EAC\uBBE6\u8EAC\uBBE7" + //  4015 -  4019
-                "\u8EAC\uBBE8\u8EAC\uBBE9\u8EAC\uBBEA\u8EAC\uBBEB\u8EAC\uBBEC" + //  4020 -  4024
-                "\u8EAC\uBBED\u8EAC\uBBEE\u8EAC\uBBEF\u8EAC\uBBF0\u8EAC\uBBF1" + //  4025 -  4029
-                "\u8EAC\uBBF2\u8EAC\uBBF3\u8EAC\uBBF4\u8EAC\uBBF5\u8EAC\uBBF6" + //  4030 -  4034
-                "\u8EAC\uBBF7\u8EAC\uBBF8\u8EAC\uBBF9\u8EAC\uBBFA\u8EAC\uBBFB" + //  4035 -  4039
-                "\u8EAC\uBBFC\u8EAC\uBBFD\u8EAC\uBBFE\u8EAC\uBCA1\u8EAC\uBCA2" + //  4040 -  4044
-                "\u8EAC\uBCA3\u8EAC\uBCA4\u8EAC\uBCA5\u8EAC\uBCA6\u8EAC\uBCA7" + //  4045 -  4049
-                "\u8EAC\uBCA8\u8EAC\uBCA9\u8EAC\uBCAA\u8EAC\uBCAB\u8EAC\uBCAC" + //  4050 -  4054
-                "\u8EAC\uBCAD\u8EAC\uBCAE\u8EAC\uBCAF\u8EAC\uBCB0\u8EAC\uBCB1" + //  4055 -  4059
-                "\u8EAC\uBCB2\u8EAC\uBCB3\u8EAC\uBCB4\u8EAC\uBCB5\u8EAC\uBCB6" + //  4060 -  4064
-                "\u8EAC\uBAF3\u8EAC\uBAF4\u8EAC\uBAF5\u8EAC\uBAF6\u8EAC\uBAF7" + //  4065 -  4069
-                "\u8EAC\uBAF8\u8EAC\uBAF9\u8EAC\uBAFA\u8EAC\uBAFB\u8EAC\uBAFC" + //  4070 -  4074
-                "\u8EAC\uBAFD\u8EAC\uBAFE\u8EAC\uBBA1\u8EAC\uBBA2\u8EAC\uBBA3" + //  4075 -  4079
-                "\u8EAC\uBBA4\u8EAC\uBBA5\u8EAC\uBBA6\u8EAC\uBBA7\u8EAC\uBBA8" + //  4080 -  4084
-                "\u8EAC\uBBA9\u8EAC\uBBAA\u8EAC\uBBAB\u8EAC\uBBAC\u8EAC\uBBAD" + //  4085 -  4089
-                "\u8EAC\uBBAE\u8EAC\uBBAF\u8EAC\uBBB0\u8EAC\uBBB1\u8EAC\uBBB2" + //  4090 -  4094
-                "\u8EAC\uBBB3\u8EAC\uBBB4\u8EAC\uBBB5\u8EAC\uBBB6\u8EAC\uBBB7" + //  4095 -  4099
-                "\u8EAC\uBBB8\u8EAC\uBBB9\u8EAC\uBBBA\u8EAC\uBBBB\u8EAC\uBBBC" + //  4100 -  4104
-                "\u8EAC\uBBBD\u8EAC\uBBBE\u8EAC\uBBBF\u8EAC\uBBC0\u8EAC\uBBC1" + //  4105 -  4109
-                "\u8EAC\uBBC2\u8EAC\uBBC3\u8EAC\uBBC4\u8EAC\uBBC5\u8EAC\uBBC6" + //  4110 -  4114
-                "\u8EAC\uBBC7\u8EAC\uBBC8\u8EAC\uBBC9\u8EAC\uBBCA\u8EAC\uBBCB" + //  4115 -  4119
-                "\u8EAC\uBBCC\u8EAC\uBBCD\u8EAC\uBBCE\u8EAC\uBBCF\u8EAC\uBBD0" + //  4120 -  4124
-                "\u8EAC\uBBD1\u8EAC\uBBD2\u8EAC\uBBD3\u8EAC\uBBD4\u8EAC\uBAB3" + //  4125 -  4129
-                "\u8EAC\uBAB4\u8EAC\uBAB5\u8EAC\uBAB6\u8EAC\uBAB7\u8EAC\uBAB8" + //  4130 -  4134
-                "\u8EAC\uBAB9\u8EAC\uBABA\u8EAC\uBABB\u8EAC\uBABC\u8EAC\uBABD" + //  4135 -  4139
-                "\u8EAC\uBABE\u8EAC\uBABF\u8EAC\uBAC0\u8EAC\uBAC1\u8EAC\uBAC2" + //  4140 -  4144
-                "\u8EAC\uBAC3\u8EAC\uBAC4\u8EAC\uBAC5\u8EAC\uBAC6\u8EAC\uBAC7" + //  4145 -  4149
-                "\u8EAC\uBAC8\u8EAC\uBAC9\u8EAC\uBACA\u8EAC\uBACB\u8EAC\uBACC" + //  4150 -  4154
-                "\u8EAC\uBACD\u8EAC\uBACE\u8EAC\uBACF\u8EAC\uBAD0\u8EAC\uBAD1" + //  4155 -  4159
-                "\u8EAC\uBAD2\u8EAC\uBAD3\u8EAC\uBAD4\u8EAC\uBAD5\u8EAC\uBAD6" + //  4160 -  4164
-                "\u8EAC\uBAD7\u8EAC\uBAD8\u8EAC\uBAD9\u8EAC\uBADA\u8EAC\uBADB" + //  4165 -  4169
-                "\u8EAC\uBADC\u8EAC\uBADD\u8EAC\uBADE\u8EAC\uBADF\u8EAC\uBAE0" + //  4170 -  4174
-                "\u8EAC\uBAE1\u8EAC\uBAE2\u8EAC\uBAE3\u8EAC\uBAE4\u8EAC\uBAE5" + //  4175 -  4179
-                "\u8EAC\uBAE6\u8EAC\uBAE7\u8EAC\uBAE8\u8EAC\uBAE9\u8EAC\uBAEA" + //  4180 -  4184
-                "\u8EAC\uBAEB\u8EAC\uBAEC\u8EAC\uBAED\u8EAC\uBAEE\u8EAC\uBAEF" + //  4185 -  4189
-                "\u8EAC\uBAF0\u8EAC\uBAF1\u8EAC\uBAF2\u8EAC\uB9D1\u8EAC\uB9D2" + //  4190 -  4194
-                "\u8EAC\uB9D3\u8EAC\uB9D4\u8EAC\uB9D5\u8EAC\uB9D6\u8EAC\uB9D7" + //  4195 -  4199
-                "\u8EAC\uB9D8\u8EAC\uB9D9\u8EAC\uB9DA\u8EAC\uB9DB\u8EAC\uB9DC" + //  4200 -  4204
-                "\u8EAC\uB9DD\u8EAC\uB9DE\u8EAC\uB9DF\u8EAC\uB9E0\u8EAC\uB9E1" + //  4205 -  4209
-                "\u8EAC\uB9E2\u8EAC\uB9E3\u8EAC\uB9E4\u8EAC\uB9E5\u8EAC\uB9E6" + //  4210 -  4214
-                "\u8EAC\uB9E7\u8EAC\uB9E8\u8EAC\uB9E9\u8EAC\uB9EA\u8EAC\uB9EB" + //  4215 -  4219
-                "\u8EAC\uB9EC\u8EAC\uB9ED\u8EAC\uB9EE\u8EAC\uB9EF\u8EAC\uB9F0" + //  4220 -  4224
-                "\u8EAC\uB9F1\u8EAC\uB9F2\u8EAC\uB9F3\u8EAC\uB9F4\u8EAC\uB9F5" + //  4225 -  4229
-                "\u8EAC\uB9F6\u8EAC\uB9F7\u8EAC\uB9F8\u8EAC\uB9F9\u8EAC\uB9FA" + //  4230 -  4234
-                "\u8EAC\uB9FB\u8EAC\uB9FC\u8EAC\uB9FD\u8EAC\uB9FE\u8EAC\uBAA1" + //  4235 -  4239
-                "\u8EAC\uBAA2\u8EAC\uBAA3\u8EAC\uBAA4\u8EAC\uBAA5\u8EAC\uBAA6" + //  4240 -  4244
-                "\u8EAC\uBAA7\u8EAC\uBAA8\u8EAC\uBAA9\u8EAC\uBAAA\u8EAC\uBAAB" + //  4245 -  4249
-                "\u8EAC\uBAAC\u8EAC\uBAAD\u8EAC\uBAAE\u8EAC\uBAAF\u8EAC\uBAB0" + //  4250 -  4254
-                "\u8EAC\uBAB1\u8EAC\uBAB2\u8EAC\uB8EF\u8EAC\uB8F0\u8EAC\uB8F1" + //  4255 -  4259
-                "\u8EAC\uB8F2\u8EAC\uB8F3\u8EAC\uB8F4\u8EAC\uB8F5\u8EAC\uB8F6" + //  4260 -  4264
-                "\u8EAC\uB8F7\u8EAC\uB8F8\u8EAC\uB8F9\u8EAC\uB8FA\u8EAC\uB8FB" + //  4265 -  4269
-                "\u8EAC\uB8FC\u8EAC\uB8FD\u8EAC\uB8FE\u8EAC\uB9A1\u8EAC\uB9A2" + //  4270 -  4274
-                "\u8EAC\uB9A3\u8EAC\uB9A4\u8EAC\uB9A5\u8EAC\uB9A6\u8EAC\uB9A7" + //  4275 -  4279
-                "\u8EAC\uB9A8\u8EAC\uB9A9\u8EAC\uB9AA\u8EAC\uB9AB\u8EAC\uB9AC" + //  4280 -  4284
-                "\u8EAC\uB9AD\u8EAC\uB9AE\u8EAC\uB9AF\u8EAC\uB9B0\u8EAC\uB9B1" + //  4285 -  4289
-                "\u8EAC\uB9B2\u8EAC\uB9B3\u8EAC\uB9B4\u8EAC\uB9B5\u8EAC\uB9B6" + //  4290 -  4294
-                "\u8EAC\uB9B7\u8EAC\uB9B8\u8EAC\uB9B9\u8EAC\uB9BA\u8EAC\uB9BB" + //  4295 -  4299
-                "\u8EAC\uB9BC\u8EAC\uB9BD\u8EAC\uB9BE\u8EAC\uB9BF\u8EAC\uB9C0" + //  4300 -  4304
-                "\u8EAC\uB9C1\u8EAC\uB9C2\u8EAC\uB9C3\u8EAC\uB9C4\u8EAC\uB9C5" + //  4305 -  4309
-                "\u8EAC\uB9C6\u8EAC\uB9C7\u8EAC\uB9C8\u8EAC\uB9C9\u8EAC\uB9CA" + //  4310 -  4314
-                "\u8EAC\uB9CB\u8EAC\uB9CC\u8EAC\uB9CD\u8EAC\uB9CE\u8EAC\uB9CF" + //  4315 -  4319
-                "\u8EAC\uB9D0\u8EAC\uB8AF\u8EAC\uB8B0\u8EAC\uB8B1\u8EAC\uB8B2" + //  4320 -  4324
-                "\u8EAC\uB8B3\u8EAC\uB8B4\u8EAC\uB8B5\u8EAC\uB8B6\u8EAC\uB8B7" + //  4325 -  4329
-                "\u8EAC\uB8B8\u8EAC\uB8B9\u8EAC\uB8BA\u8EAC\uB8BB\u8EAC\uB8BC" + //  4330 -  4334
-                "\u8EAC\uB8BD\u8EAC\uB8BE\u8EAC\uB8BF\u8EAC\uB8C0\u8EAC\uB8C1" + //  4335 -  4339
-                "\u8EAC\uB8C2\u8EAC\uB8C3\u8EAC\uB8C4\u8EAC\uB8C5\u8EAC\uB8C6" + //  4340 -  4344
-                "\u8EAC\uB8C7\u8EAC\uB8C8\u8EAC\uB8C9\u8EAC\uB8CA\u8EAC\uB8CB" + //  4345 -  4349
-                "\u8EAC\uB8CC\u8EAC\uB8CD\u8EAC\uB8CE\u8EAC\uB8CF\u8EAC\uB8D0" + //  4350 -  4354
-                "\u8EAC\uB8D1\u8EAC\uB8D2\u8EAC\uB8D3\u8EAC\uB8D4\u8EAC\uB8D5" + //  4355 -  4359
-                "\u8EAC\uB8D6\u8EAC\uB8D7\u8EAC\uB8D8\u8EAC\uB8D9\u8EAC\uB8DA" + //  4360 -  4364
-                "\u8EAC\uB8DB\u8EAC\uB8DC\u8EAC\uB8DD\u8EAC\uB8DE\u8EAC\uB8DF" + //  4365 -  4369
-                "\u8EAC\uB8E0\u8EAC\uB8E1\u8EAC\uB8E2\u8EAC\uB8E3\u8EAC\uB8E4" + //  4370 -  4374
-                "\u8EAC\uB8E5\u8EAC\uB8E6\u8EAC\uB8E7\u8EAC\uB8E8\u8EAC\uB8E9" + //  4375 -  4379
-                "\u8EAC\uB8EA\u8EAC\uB8EB\u8EAC\uB8EC\u8EAC\uB8ED\u8EAC\uB8EE" + //  4380 -  4384
-                "\u8EAC\uB7CD\u8EAC\uB7CE\u8EAC\uB7CF\u8EAC\uB7D0\u8EAC\uB7D1" + //  4385 -  4389
-                "\u8EAC\uB7D2\u8EAC\uB7D3\u8EAC\uB7D4\u8EAC\uB7D5\u8EAC\uB7D6" + //  4390 -  4394
-                "\u8EAC\uB7D7\u8EAC\uB7D8\u8EAC\uB7D9\u8EAC\uB7DA\u8EAC\uB7DB" + //  4395 -  4399
-                "\u8EAC\uB7DC\u8EAC\uB7DD\u8EAC\uB7DE\u8EAC\uB7DF\u8EAC\uB7E0" + //  4400 -  4404
-                "\u8EAC\uB7E1\u8EAC\uB7E2\u8EAC\uB7E3\u8EAC\uB7E4\u8EAC\uB7E5" + //  4405 -  4409
-                "\u8EAC\uB7E6\u8EAC\uB7E7\u8EAC\uB7E8\u8EAC\uB7E9\u8EAC\uB7EA" + //  4410 -  4414
-                "\u8EAC\uB7EB\u8EAC\uB7EC\u8EAC\uB7ED\u8EAC\uB7EE\u8EAC\uB7EF" + //  4415 -  4419
-                "\u8EAC\uB7F0\u8EAC\uB7F1\u8EAC\uB7F2\u8EAC\uB7F3\u8EAC\uB7F4" + //  4420 -  4424
-                "\u8EAC\uB7F5\u8EAC\uB7F6\u8EAC\uB7F7\u8EAC\uB7F8\u8EAC\uB7F9" + //  4425 -  4429
-                "\u8EAC\uB7FA\u8EAC\uB7FB\u8EAC\uB7FC\u8EAC\uB7FD\u8EAC\uB7FE" + //  4430 -  4434
-                "\u8EAC\uB8A1\u8EAC\uB8A2\u8EAC\uB8A3\u8EAC\uB8A4\u8EAC\uB8A5" + //  4435 -  4439
-                "\u8EAC\uB8A6\u8EAC\uB8A7\u8EAC\uB8A8\u8EAC\uB8A9\u8EAC\uB8AA" + //  4440 -  4444
-                "\u8EAC\uB8AB\u8EAC\uB8AC\u8EAC\uB8AD\u8EAC\uB8AE\u8EAC\uB6EB" + //  4445 -  4449
-                "\u8EAC\uB6EC\u8EAC\uB6ED\u8EAC\uB6EE\u8EAC\uB6EF\u8EAC\uB6F0" + //  4450 -  4454
-                "\u8EAC\uB6F1\u8EAC\uB6F2\u8EAC\uB6F3\u8EAC\uB6F4\u8EAC\uB6F5" + //  4455 -  4459
-                "\u8EAC\uB6F6\u8EAC\uB6F7\u8EAC\uB6F8\u8EAC\uB6F9\u8EAC\uB6FA" + //  4460 -  4464
-                "\u8EAC\uB6FB\u8EAC\uB6FC\u8EAC\uB6FD\u8EAC\uB6FE\u8EAC\uB7A1" + //  4465 -  4469
-                "\u8EAC\uB7A2\u8EAC\uB7A3\u8EAC\uB7A4\u8EAC\uB7A5\u8EAC\uB7A6" + //  4470 -  4474
-                "\u8EAC\uB7A7\u8EAC\uB7A8\u8EAC\uB7A9\u8EAC\uB7AA\u8EAC\uB7AB" + //  4475 -  4479
-                "\u8EAC\uB7AC\u8EAC\uB7AD\u8EAC\uB7AE\u8EAC\uB7AF\u8EAC\uB7B0" + //  4480 -  4484
-                "\u8EAC\uB7B1\u8EAC\uB7B2\u8EAC\uB7B3\u8EAC\uB7B4\u8EAC\uB7B5" + //  4485 -  4489
-                "\u8EAC\uB7B6\u8EAC\uB7B7\u8EAC\uB7B8\u8EAC\uB7B9\u8EAC\uB7BA" + //  4490 -  4494
-                "\u8EAC\uB7BB\u8EAC\uB7BC\u8EAC\uB7BD\u8EAC\uB7BE\u8EAC\uB7BF" + //  4495 -  4499
-                "\u8EAC\uB7C0\u8EAC\uB7C1\u8EAC\uB7C2\u8EAC\uB7C3\u8EAC\uB7C4" + //  4500 -  4504
-                "\u8EAC\uB7C5\u8EAC\uB7C6\u8EAC\uB7C7\u8EAC\uB7C8\u8EAC\uB7C9" + //  4505 -  4509
-                "\u8EAC\uB7CA\u8EAC\uB7CB\u8EAC\uB7CC\u8EAC\uB6AB\u8EAC\uB6AC" + //  4510 -  4514
-                "\u8EAC\uB6AD\u8EAC\uB6AE\u8EAC\uB6AF\u8EAC\uB6B0\u8EAC\uB6B1" + //  4515 -  4519
-                "\u8EAC\uB6B2\u8EAC\uB6B3\u8EAC\uB6B4\u8EAC\uB6B5\u8EAC\uB6B6" + //  4520 -  4524
-                "\u8EAC\uB6B7\u8EAC\uB6B8\u8EAC\uB6B9\u8EAC\uB6BA\u8EAC\uB6BB" + //  4525 -  4529
-                "\u8EAC\uB6BC\u8EAC\uB6BD\u8EAC\uB6BE\u8EAC\uB6BF\u8EAC\uB6C0" + //  4530 -  4534
-                "\u8EAC\uB6C1\u8EAC\uB6C2\u8EAC\uB6C3\u8EAC\uB6C4\u8EAC\uB6C5" + //  4535 -  4539
-                "\u8EAC\uB6C6\u8EAC\uB6C7\u8EAC\uB6C8\u8EAC\uB6C9\u8EAC\uB6CA" + //  4540 -  4544
-                "\u8EAC\uB6CB\u8EAC\uB6CC\u8EAC\uB6CD\u8EAC\uB6CE\u8EAC\uB6CF" + //  4545 -  4549
-                "\u8EAC\uB6D0\u8EAC\uB6D1\u8EAC\uB6D2\u8EAC\uB6D3\u8EAC\uB6D4" + //  4550 -  4554
-                "\u8EAC\uB6D5\u8EAC\uB6D6\u8EAC\uB6D7\u8EAC\uB6D8\u8EAC\uB6D9" + //  4555 -  4559
-                "\u8EAC\uB6DA\u8EAC\uB6DB\u8EAC\uB6DC\u8EAC\uB6DD\u8EAC\uB6DE" + //  4560 -  4564
-                "\u8EAC\uB6DF\u8EAC\uB6E0\u8EAC\uB6E1\u8EAC\uB6E2\u8EAC\uB6E3" + //  4565 -  4569
-                "\u8EAC\uB6E4\u8EAC\uB6E5\u8EAC\uB6E6\u8EAC\uB6E7\u8EAC\uB6E8" + //  4570 -  4574
-                "\u8EAC\uB6E9\u8EAC\uB6EA\u8EAC\uB5C9\u8EAC\uB5CA\u8EAC\uB5CB" + //  4575 -  4579
-                "\u8EAC\uB5CC\u8EAC\uB5CD\u8EAC\uB5CE\u8EAC\uB5CF\u8EAC\uB5D0" + //  4580 -  4584
-                "\u8EAC\uB5D1\u8EAC\uB5D2\u8EAC\uB5D3\u8EAC\uB5D4\u8EAC\uB5D5" + //  4585 -  4589
-                "\u8EAC\uB5D6\u8EAC\uB5D7\u8EAC\uB5D8\u8EAC\uB5D9\u8EAC\uB5DA" + //  4590 -  4594
-                "\u8EAC\uB5DB\u8EAC\uB5DC\u8EAC\uB5DD\u8EAC\uB5DE\u8EAC\uB5DF" + //  4595 -  4599
-                "\u8EAC\uB5E0\u8EAC\uB5E1\u8EAC\uB5E2\u8EAC\uB5E3\u8EAC\uB5E4" + //  4600 -  4604
-                "\u8EAC\uB5E5\u8EAC\uB5E6\u8EAC\uB5E7\u8EAC\uB5E8\u8EAC\uB5E9" + //  4605 -  4609
-                "\u8EAC\uB5EA\u8EAC\uB5EB\u8EAC\uB5EC\u8EAC\uB5ED\u8EAC\uB5EE" + //  4610 -  4614
-                "\u8EAC\uB5EF\u8EAC\uB5F0\u8EAC\uB5F1\u8EAC\uB5F2\u8EAC\uB5F3" + //  4615 -  4619
-                "\u8EAC\uB5F4\u8EAC\uB5F5\u8EAC\uB5F6\u8EAC\uB5F7\u8EAC\uB5F8" + //  4620 -  4624
-                "\u8EAC\uB5F9\u8EAC\uB5FA\u8EAC\uB5FB\u8EAC\uB5FC\u8EAC\uB5FD" + //  4625 -  4629
-                "\u8EAC\uB5FE\u8EAC\uB6A1\u8EAC\uB6A2\u8EAC\uB6A3\u8EAC\uB6A4" + //  4630 -  4634
-                "\u8EAC\uB6A5\u8EAC\uB6A6\u8EAC\uB6A7\u8EAC\uB6A8\u8EAC\uB6A9" + //  4635 -  4639
-                "\u8EAC\uB6AA\u8EAC\uB4E7\u8EAC\uB4E8\u8EAC\uB4E9\u8EAC\uB4EA" + //  4640 -  4644
-                "\u8EAC\uB4EB\u8EAC\uB4EC\u8EAC\uB4ED\u8EAC\uB4EE\u8EAC\uB4EF" + //  4645 -  4649
-                "\u8EAC\uB4F0\u8EAC\uB4F1\u8EAC\uB4F2\u8EAC\uB4F3\u8EAC\uB4F4" + //  4650 -  4654
-                "\u8EAC\uB4F5\u8EAC\uB4F6\u8EAC\uB4F7\u8EAC\uB4F8\u8EAC\uB4F9" + //  4655 -  4659
-                "\u8EAC\uB4FA\u8EAC\uB4FB\u8EAC\uB4FC\u8EAC\uB4FD\u8EAC\uB4FE" + //  4660 -  4664
-                "\u8EAC\uB5A1\u8EAC\uB5A2\u8EAC\uB5A3\u8EAC\uB5A4\u8EAC\uB5A5" + //  4665 -  4669
-                "\u8EAC\uB5A6\u8EAC\uB5A7\u8EAC\uB5A8\u8EAC\uB5A9\u8EAC\uB5AA" + //  4670 -  4674
-                "\u8EAC\uB5AB\u8EAC\uB5AC\u8EAC\uB5AD\u8EAC\uB5AE\u8EAC\uB5AF" + //  4675 -  4679
-                "\u8EAC\uB5B0\u8EAC\uB5B1\u8EAC\uB5B2\u8EAC\uB5B3\u8EAC\uB5B4" + //  4680 -  4684
-                "\u8EAC\uB5B5\u8EAC\uB5B6\u8EAC\uB5B7\u8EAC\uB5B8\u8EAC\uB5B9" + //  4685 -  4689
-                "\u8EAC\uB5BA\u8EAC\uB5BB\u8EAC\uB5BC\u8EAC\uB5BD\u8EAC\uB5BE" + //  4690 -  4694
-                "\u8EAC\uB5BF\u8EAC\uB5C0\u8EAC\uB5C1\u8EAC\uB5C2\u8EAC\uB5C3" + //  4695 -  4699
-                "\u8EAC\uB5C4\u8EAC\uB5C5\u8EAC\uB5C6\u8EAC\uB5C7\u8EAC\uB5C8" + //  4700 -  4704
-                "\u8EAC\uB4A7\u8EAC\uB4A8\u8EAC\uB4A9\u8EAC\uB4AA\u8EAC\uB4AB" + //  4705 -  4709
-                "\u8EAC\uB4AC\u8EAC\uB4AD\u8EAC\uB4AE\u8EAC\uB4AF\u8EAC\uB4B0" + //  4710 -  4714
-                "\u8EAC\uB4B1\u8EAC\uB4B2\u8EAC\uB4B3\u8EAC\uB4B4\u8EAC\uB4B5" + //  4715 -  4719
-                "\u8EAC\uB4B6\u8EAC\uB4B7\u8EAC\uB4B8\u8EAC\uB4B9\u8EAC\uB4BA" + //  4720 -  4724
-                "\u8EAC\uB4BB\u8EAC\uB4BC\u8EAC\uB4BD\u8EAC\uB4BE\u8EAC\uB4BF" + //  4725 -  4729
-                "\u8EAC\uB4C0\u8EAC\uB4C1\u8EAC\uB4C2\u8EAC\uB4C3\u8EAC\uB4C4" + //  4730 -  4734
-                "\u8EAC\uB4C5\u8EAC\uB4C6\u8EAC\uB4C7\u8EAC\uB4C8\u8EAC\uB4C9" + //  4735 -  4739
-                "\u8EAC\uB4CA\u8EAC\uB4CB\u8EAC\uB4CC\u8EAC\uB4CD\u8EAC\uB4CE" + //  4740 -  4744
-                "\u8EAC\uB4CF\u8EAC\uB4D0\u8EAC\uB4D1\u8EAC\uB4D2\u8EAC\uB4D3" + //  4745 -  4749
-                "\u8EAC\uB4D4\u8EAC\uB4D5\u8EAC\uB4D6\u8EAC\uB4D7\u8EAC\uB4D8" + //  4750 -  4754
-                "\u8EAC\uB4D9\u8EAC\uB4DA\u8EAC\uB4DB\u8EAC\uB4DC\u8EAC\uB4DD" + //  4755 -  4759
-                "\u8EAC\uB4DE\u8EAC\uB4DF\u8EAC\uB4E0\u8EAC\uB4E1\u8EAC\uB4E2" + //  4760 -  4764
-                "\u8EAC\uB4E3\u8EAC\uB4E4\u8EAC\uB4E5\u8EAC\uB4E6\u8EAC\uB3C5" + //  4765 -  4769
-                "\u8EAC\uB3C6\u8EAC\uB3C7\u8EAC\uB3C8\u8EAC\uB3C9\u8EAC\uB3CA" + //  4770 -  4774
-                "\u8EAC\uB3CB\u8EAC\uB3CC\u8EAC\uB3CD\u8EAC\uB3CE\u8EAC\uB3CF" + //  4775 -  4779
-                "\u8EAC\uB3D0\u8EAC\uB3D1\u8EAC\uB3D2\u8EAC\uB3D3\u8EAC\uB3D4" + //  4780 -  4784
-                "\u8EAC\uB3D5\u8EAC\uB3D6\u8EAC\uB3D7\u8EAC\uB3D8\u8EAC\uB3D9" + //  4785 -  4789
-                "\u8EAC\uB3DA\u8EAC\uB3DB\u8EAC\uB3DC\u8EAC\uB3DD\u8EAC\uB3DE" + //  4790 -  4794
-                "\u8EAC\uB3DF\u8EAC\uB3E0\u8EAC\uB3E1\u8EAC\uB3E2\u8EAC\uB3E3" + //  4795 -  4799
-                "\u8EAC\uB3E4\u8EAC\uB3E5\u8EAC\uB3E6\u8EAC\uB3E7\u8EAC\uB3E8" + //  4800 -  4804
-                "\u8EAC\uB3E9\u8EAC\uB3EA\u8EAC\uB3EB\u8EAC\uB3EC\u8EAC\uB3ED" + //  4805 -  4809
-                "\u8EAC\uB3EE\u8EAC\uB3EF\u8EAC\uB3F0\u8EAC\uB3F1\u8EAC\uB3F2" + //  4810 -  4814
-                "\u8EAC\uB3F3\u8EAC\uB3F4\u8EAC\uB3F5\u8EAC\uB3F6\u8EAC\uB3F7" + //  4815 -  4819
-                "\u8EAC\uB3F8\u8EAC\uB3F9\u8EAC\uB3FA\u8EAC\uB3FB\u8EAC\uB3FC" + //  4820 -  4824
-                "\u8EAC\uB3FD\u8EAC\uB3FE\u8EAC\uB4A1\u8EAC\uB4A2\u8EAC\uB4A3" + //  4825 -  4829
-                "\u8EAC\uB4A4\u8EAC\uB4A5\u8EAC\uB4A6\u8EAC\uB2E3\u8EAC\uB2E4" + //  4830 -  4834
-                "\u8EAC\uB2E5\u8EAC\uB2E6\u8EAC\uB2E7\u8EAC\uB2E8\u8EAC\uB2E9" + //  4835 -  4839
-                "\u8EAC\uB2EA\u8EAC\uB2EB\u8EAC\uB2EC\u8EAC\uB2ED\u8EAC\uB2EE" + //  4840 -  4844
-                "\u8EAC\uB2EF\u8EAC\uB2F0\u8EAC\uB2F1\u8EAC\uB2F2\u8EAC\uB2F3" + //  4845 -  4849
-                "\u8EAC\uB2F4\u8EAC\uB2F5\u8EAC\uB2F6\u8EAC\uB2F7\u8EAC\uB2F8" + //  4850 -  4854
-                "\u8EAC\uB2F9\u8EAC\uB2FA\u8EAC\uB2FB\u8EAC\uB2FC\u8EAC\uB2FD" + //  4855 -  4859
-                "\u8EAC\uB2FE\u8EAC\uB3A1\u8EAC\uB3A2\u8EAC\uB3A3\u8EAC\uB3A4" + //  4860 -  4864
-                "\u8EAC\uB3A5\u8EAC\uB3A6\u8EAC\uB3A7\u8EAC\uB3A8\u8EAC\uB3A9" + //  4865 -  4869
-                "\u8EAC\uB3AA\u8EAC\uB3AB\u8EAC\uB3AC\u8EAC\uB3AD\u8EAC\uB3AE" + //  4870 -  4874
-                "\u8EAC\uB3AF\u8EAC\uB3B0\u8EAC\uB3B1\u8EAC\uB3B2\u8EAC\uB3B3" + //  4875 -  4879
-                "\u8EAC\uB3B4\u8EAC\uB3B5\u8EAC\uB3B6\u8EAC\uB3B7\u8EAC\uB3B8" + //  4880 -  4884
-                "\u8EAC\uB3B9\u8EAC\uB3BA\u8EAC\uB3BB\u8EAC\uB3BC\u8EAC\uB3BD" + //  4885 -  4889
-                "\u8EAC\uB3BE\u8EAC\uB3BF\u8EAC\uB3C0\u8EAC\uB3C1\u8EAC\uB3C2" + //  4890 -  4894
-                "\u8EAC\uB3C3\u8EAC\uB3C4\u8EAC\uB2A3\u8EAC\uB2A4\u8EAC\uB2A5" + //  4895 -  4899
-                "\u8EAC\uB2A6\u8EAC\uB2A7\u8EAC\uB2A8\u8EAC\uB2A9\u8EAC\uB2AA" + //  4900 -  4904
-                "\u8EAC\uB2AB\u8EAC\uB2AC\u8EAC\uB2AD\u8EAC\uB2AE\u8EAC\uB2AF" + //  4905 -  4909
-                "\u8EAC\uB2B0\u8EAC\uB2B1\u8EAC\uB2B2\u8EAC\uB2B3\u8EAC\uB2B4" + //  4910 -  4914
-                "\u8EAC\uB2B5\u8EAC\uB2B6\u8EAC\uB2B7\u8EAC\uB2B8\u8EAC\uB2B9" + //  4915 -  4919
-                "\u8EAC\uB2BA\u8EAC\uB2BB\u8EAC\uB2BC\u8EAC\uB2BD\u8EAC\uB2BE" + //  4920 -  4924
-                "\u8EAC\uB2BF\u8EAC\uB2C0\u8EAC\uB2C1\u8EAC\uB2C2\u8EAC\uB2C3" + //  4925 -  4929
-                "\u8EAC\uB2C4\u8EAC\uB2C5\u8EAC\uB2C6\u8EAC\uB2C7\u8EAC\uB2C8" + //  4930 -  4934
-                "\u8EAC\uB2C9\u8EAC\uB2CA\u8EAC\uB2CB\u8EAC\uB2CC\u8EAC\uB2CD" + //  4935 -  4939
-                "\u8EAC\uB2CE\u8EAC\uB2CF\u8EAC\uB2D0\u8EAC\uB2D1\u8EAC\uB2D2" + //  4940 -  4944
-                "\u8EAC\uB2D3\u8EAC\uB2D4\u8EAC\uB2D5\u8EAC\uB2D6\u8EAC\uB2D7" + //  4945 -  4949
-                "\u8EAC\uB2D8\u8EAC\uB2D9\u8EAC\uB2DA\u8EAC\uB2DB\u8EAC\uB2DC" + //  4950 -  4954
-                "\u8EAC\uB2DD\u8EAC\uB2DE\u8EAC\uB2DF\u8EAC\uB2E0\u8EAC\uB2E1" + //  4955 -  4959
-                "\u8EAC\uB2E2\u8EAC\uB1C1\u8EAC\uB1C2\u8EAC\uB1C3\u8EAC\uB1C4" + //  4960 -  4964
-                "\u8EAC\uB1C5\u8EAC\uB1C6\u8EAC\uB1C7\u8EAC\uB1C8\u8EAC\uB1C9" + //  4965 -  4969
-                "\u8EAC\uB1CA\u8EAC\uB1CB\u8EAC\uB1CC\u8EAC\uB1CD\u8EAC\uB1CE" + //  4970 -  4974
-                "\u8EAC\uB1CF\u8EAC\uB1D0\u8EAC\uB1D1\u8EAC\uB1D2\u8EAC\uB1D3" + //  4975 -  4979
-                "\u8EAC\uB1D4\u8EAC\uB1D5\u8EAC\uB1D6\u8EAC\uB1D7\u8EAC\uB1D8" + //  4980 -  4984
-                "\u8EAC\uB1D9\u8EAC\uB1DA\u8EAC\uB1DB\u8EAC\uB1DC\u8EAC\uB1DD" + //  4985 -  4989
-                "\u8EAC\uB1DE\u8EAC\uB1DF\u8EAC\uB1E0\u8EAC\uB1E1\u8EAC\uB1E2" + //  4990 -  4994
-                "\u8EAC\uB1E3\u8EAC\uB1E4\u8EAC\uB1E5\u8EAC\uB1E6\u8EAC\uB1E7" + //  4995 -  4999
-                "\u8EAC\uB1E8\u8EAC\uB1E9\u8EAC\uB1EA\u8EAC\uB1EB\u8EAC\uB1EC" + //  5000 -  5004
-                "\u8EAC\uB1ED\u8EAC\uB1EE\u8EAC\uB1EF\u8EAC\uB1F0\u8EAC\uB1F1" + //  5005 -  5009
-                "\u8EAC\uB1F2\u8EAC\uB1F3\u8EAC\uB1F4\u8EAC\uB1F5\u8EAC\uB1F6" + //  5010 -  5014
-                "\u8EAC\uB1F7\u8EAC\uB1F8\u8EAC\uB1F9\u8EAC\uB1FA\u8EAC\uB1FB" + //  5015 -  5019
-                "\u8EAC\uB1FC\u8EAC\uB1FD\u8EAC\uB1FE\u8EAC\uB2A1\u8EAC\uB2A2" + //  5020 -  5024
-                "\u8EAC\uB0DF\u8EAC\uB0E0\u8EAC\uB0E1\u8EAC\uB0E2\u8EAC\uB0E3" + //  5025 -  5029
-                "\u8EAC\uB0E4\u8EAC\uB0E5\u8EAC\uB0E6\u8EAC\uB0E7\u8EAC\uB0E8" + //  5030 -  5034
-                "\u8EAC\uB0E9\u8EAC\uB0EA\u8EAC\uB0EB\u8EAC\uB0EC\u8EAC\uB0ED" + //  5035 -  5039
-                "\u8EAC\uB0EE\u8EAC\uB0EF\u8EAC\uB0F0\u8EAC\uB0F1\u8EAC\uB0F2" + //  5040 -  5044
-                "\u8EAC\uB0F3\u8EAC\uB0F4\u8EAC\uB0F5\u8EAC\uB0F6\u8EAC\uB0F7" + //  5045 -  5049
-                "\u8EAC\uB0F8\u8EAC\uB0F9\u8EAC\uB0FA\u8EAC\uB0FB\u8EAC\uB0FC" + //  5050 -  5054
-                "\u8EAC\uB0FD\u8EAC\uB0FE\u8EAC\uB1A1\u8EAC\uB1A2\u8EAC\uB1A3" + //  5055 -  5059
-                "\u8EAC\uB1A4\u8EAC\uB1A5\u8EAC\uB1A6\u8EAC\uB1A7\u8EAC\uB1A8" + //  5060 -  5064
-                "\u8EAC\uB1A9\u8EAC\uB1AA\u8EAC\uB1AB\u8EAC\uB1AC\u8EAC\uB1AD" + //  5065 -  5069
-                "\u8EAC\uB1AE\u8EAC\uB1AF\u8EAC\uB1B0\u8EAC\uB1B1\u8EAC\uB1B2" + //  5070 -  5074
-                "\u8EAC\uB1B3\u8EAC\uB1B4\u8EAC\uB1B5\u8EAC\uB1B6\u8EAC\uB1B7" + //  5075 -  5079
-                "\u8EAC\uB1B8\u8EAC\uB1B9\u8EAC\uB1BA\u8EAC\uB1BB\u8EAC\uB1BC" + //  5080 -  5084
-                "\u8EAC\uB1BD\u8EAC\uB1BE\u8EAC\uB1BF\u8EAC\uB1C0\u8EAC\uAFFD" + //  5085 -  5089
-                "\u8EAC\uAFFE\u8EAC\uB0A1\u8EAC\uB0A2\u8EAC\uB0A3\u8EAC\uB0A4" + //  5090 -  5094
-                "\u8EAC\uB0A5\u8EAC\uB0A6\u8EAC\uB0A7\u8EAC\uB0A8\u8EAC\uB0A9" + //  5095 -  5099
-                "\u8EAC\uB0AA\u8EAC\uB0AB\u8EAC\uB0AC\u8EAC\uB0AD\u8EAC\uB0AE" + //  5100 -  5104
-                "\u8EAC\uB0AF\u8EAC\uB0B0\u8EAC\uB0B1\u8EAC\uB0B2\u8EAC\uB0B3" + //  5105 -  5109
-                "\u8EAC\uB0B4\u8EAC\uB0B5\u8EAC\uB0B6\u8EAC\uB0B7\u8EAC\uB0B8" + //  5110 -  5114
-                "\u8EAC\uB0B9\u8EAC\uB0BA\u8EAC\uB0BB\u8EAC\uB0BC\u8EAC\uB0BD" + //  5115 -  5119
-                "\u8EAC\uB0BE\u8EAC\uB0BF\u8EAC\uB0C0\u8EAC\uB0C1\u8EAC\uB0C2" + //  5120 -  5124
-                "\u8EAC\uB0C3\u8EAC\uB0C4\u8EAC\uB0C5\u8EAC\uB0C6\u8EAC\uB0C7" + //  5125 -  5129
-                "\u8EAC\uB0C8\u8EAC\uB0C9\u8EAC\uB0CA\u8EAC\uB0CB\u8EAC\uB0CC" + //  5130 -  5134
-                "\u8EAC\uB0CD\u8EAC\uB0CE\u8EAC\uB0CF\u8EAC\uB0D0\u8EAC\uB0D1" + //  5135 -  5139
-                "\u8EAC\uB0D2\u8EAC\uB0D3\u8EAC\uB0D4\u8EAC\uB0D5\u8EAC\uB0D6" + //  5140 -  5144
-                "\u8EAC\uB0D7\u8EAC\uB0D8\u8EAC\uB0D9\u8EAC\uB0DA\u8EAC\uB0DB" + //  5145 -  5149
-                "\u8EAC\uB0DC\u8EAC\uB0DD\u8EAC\uB0DE\u8EAC\uAFBD\u8EAC\uAFBE" + //  5150 -  5154
-                "\u8EAC\uAFBF\u8EAC\uAFC0\u8EAC\uAFC1\u8EAC\uAFC2\u8EAC\uAFC3" + //  5155 -  5159
-                "\u8EAC\uAFC4\u8EAC\uAFC5\u8EAC\uAFC6\u8EAC\uAFC7\u8EAC\uAFC8" + //  5160 -  5164
-                "\u8EAC\uAFC9\u8EAC\uAFCA\u8EAC\uAFCB\u8EAC\uAFCC\u8EAC\uAFCD" + //  5165 -  5169
-                "\u8EAC\uAFCE\u8EAC\uAFCF\u8EAC\uAFD0\u8EAC\uAFD1\u8EAC\uAFD2" + //  5170 -  5174
-                "\u8EAC\uAFD3\u8EAC\uAFD4\u8EAC\uAFD5\u8EAC\uAFD6\u8EAC\uAFD7" + //  5175 -  5179
-                "\u8EAC\uAFD8\u8EAC\uAFD9\u8EAC\uAFDA\u8EAC\uAFDB\u8EAC\uAFDC" + //  5180 -  5184
-                "\u8EAC\uAFDD\u8EAC\uAFDE\u8EAC\uAFDF\u8EAC\uAFE0\u8EAC\uAFE1" + //  5185 -  5189
-                "\u8EAC\uAFE2\u8EAC\uAFE3\u8EAC\uAFE4\u8EAC\uAFE5\u8EAC\uAFE6" + //  5190 -  5194
-                "\u8EAC\uAFE7\u8EAC\uAFE8\u8EAC\uAFE9\u8EAC\uAFEA\u8EAC\uAFEB" + //  5195 -  5199
-                "\u8EAC\uAFEC\u8EAC\uAFED\u8EAC\uAFEE\u8EAC\uAFEF\u8EAC\uAFF0" + //  5200 -  5204
-                "\u8EAC\uAFF1\u8EAC\uAFF2\u8EAC\uAFF3\u8EAC\uAFF4\u8EAC\uAFF5" + //  5205 -  5209
-                "\u8EAC\uAFF6\u8EAC\uAFF7\u8EAC\uAFF8\u8EAC\uAFF9\u8EAC\uAFFA" + //  5210 -  5214
-                "\u8EAC\uAFFB\u8EAC\uAFFC\u8EAC\uAEDB\u8EAC\uAEDC\u8EAC\uAEDD" + //  5215 -  5219
-                "\u8EAC\uAEDE\u8EAC\uAEDF\u8EAC\uAEE0\u8EAC\uAEE1\u8EAC\uAEE2" + //  5220 -  5224
-                "\u8EAC\uAEE3\u8EAC\uAEE4\u8EAC\uAEE5\u8EAC\uAEE6\u8EAC\uAEE7" + //  5225 -  5229
-                "\u8EAC\uAEE8\u8EAC\uAEE9\u8EAC\uAEEA\u8EAC\uAEEB\u8EAC\uAEEC" + //  5230 -  5234
-                "\u8EAC\uAEED\u8EAC\uAEEE\u8EAC\uAEEF\u8EAC\uAEF0\u8EAC\uAEF1" + //  5235 -  5239
-                "\u8EAC\uAEF2\u8EAC\uAEF3\u8EAC\uAEF4\u8EAC\uAEF5\u8EAC\uAEF6" + //  5240 -  5244
-                "\u8EAC\uAEF7\u8EAC\uAEF8\u8EAC\uAEF9\u8EAC\uAEFA\u8EAC\uAEFB" + //  5245 -  5249
-                "\u8EAC\uAEFC\u8EAC\uAEFD\u8EAC\uAEFE\u8EAC\uAFA1\u8EAC\uAFA2" + //  5250 -  5254
-                "\u8EAC\uAFA3\u8EAC\uAFA4\u8EAC\uAFA5\u8EAC\uAFA6\u8EAC\uAFA7" + //  5255 -  5259
-                "\u8EAC\uAFA8\u8EAC\uAFA9\u8EAC\uAFAA\u8EAC\uAFAB\u8EAC\uAFAC" + //  5260 -  5264
-                "\u8EAC\uAFAD\u8EAC\uAFAE\u8EAC\uAFAF\u8EAC\uAFB0\u8EAC\uAFB1" + //  5265 -  5269
-                "\u8EAC\uAFB2\u8EAC\uAFB3\u8EAC\uAFB4\u8EAC\uAFB5\u8EAC\uAFB6" + //  5270 -  5274
-                "\u8EAC\uAFB7\u8EAC\uAFB8\u8EAC\uAFB9\u8EAC\uAFBA\u8EAC\uAFBB" + //  5275 -  5279
-                "\u8EAC\uAFBC\u8EAC\uADF9\u8EAC\uADFA\u8EAC\uADFB\u8EAC\uADFC" + //  5280 -  5284
-                "\u8EAC\uADFD\u8EAC\uADFE\u8EAC\uAEA1\u8EAC\uAEA2\u8EAC\uAEA3" + //  5285 -  5289
-                "\u8EAC\uAEA4\u8EAC\uAEA5\u8EAC\uAEA6\u8EAC\uAEA7\u8EAC\uAEA8" + //  5290 -  5294
-                "\u8EAC\uAEA9\u8EAC\uAEAA\u8EAC\uAEAB\u8EAC\uAEAC\u8EAC\uAEAD" + //  5295 -  5299
-                "\u8EAC\uAEAE\u8EAC\uAEAF\u8EAC\uAEB0\u8EAC\uAEB1\u8EAC\uAEB2" + //  5300 -  5304
-                "\u8EAC\uAEB3\u8EAC\uAEB4\u8EAC\uAEB5\u8EAC\uAEB6\u8EAC\uAEB7" + //  5305 -  5309
-                "\u8EAC\uAEB8\u8EAC\uAEB9\u8EAC\uAEBA\u8EAC\uAEBB\u8EAC\uAEBC" + //  5310 -  5314
-                "\u8EAC\uAEBD\u8EAC\uAEBE\u8EAC\uAEBF\u8EAC\uAEC0\u8EAC\uAEC1" + //  5315 -  5319
-                "\u8EAC\uAEC2\u8EAC\uAEC3\u8EAC\uAEC4\u8EAC\uAEC5\u8EAC\uAEC6" + //  5320 -  5324
-                "\u8EAC\uAEC7\u8EAC\uAEC8\u8EAC\uAEC9\u8EAC\uAECA\u8EAC\uAECB" + //  5325 -  5329
-                "\u8EAC\uAECC\u8EAC\uAECD\u8EAC\uAECE\u8EAC\uAECF\u8EAC\uAED0" + //  5330 -  5334
-                "\u8EAC\uAED1\u8EAC\uAED2\u8EAC\uAED3\u8EAC\uAED4\u8EAC\uAED5" + //  5335 -  5339
-                "\u8EAC\uAED6\u8EAC\uAED7\u8EAC\uAED8\u8EAC\uAED9\u8EAC\uAEDA" + //  5340 -  5344
-                "\u8EAC\uADB9\u8EAC\uADBA\u8EAC\uADBB\u8EAC\uADBC\u8EAC\uADBD" + //  5345 -  5349
-                "\u8EAC\uADBE\u8EAC\uADBF\u8EAC\uADC0\u8EAC\uADC1\u8EAC\uADC2" + //  5350 -  5354
-                "\u8EAC\uADC3\u8EAC\uADC4\u8EAC\uADC5\u8EAC\uADC6\u8EAC\uADC7" + //  5355 -  5359
-                "\u8EAC\uADC8\u8EAC\uADC9\u8EAC\uADCA\u8EAC\uADCB\u8EAC\uADCC" + //  5360 -  5364
-                "\u8EAC\uADCD\u8EAC\uADCE\u8EAC\uADCF\u8EAC\uADD0\u8EAC\uADD1" + //  5365 -  5369
-                "\u8EAC\uADD2\u8EAC\uADD3\u8EAC\uADD4\u8EAC\uADD5\u8EAC\uADD6" + //  5370 -  5374
-                "\u8EAC\uADD7\u8EAC\uADD8\u8EAC\uADD9\u8EAC\uADDA\u8EAC\uADDB" + //  5375 -  5379
-                "\u8EAC\uADDC\u8EAC\uADDD\u8EAC\uADDE\u8EAC\uADDF\u8EAC\uADE0" + //  5380 -  5384
-                "\u8EAC\uADE1\u8EAC\uADE2\u8EAC\uADE3\u8EAC\uADE4\u8EAC\uADE5" + //  5385 -  5389
-                "\u8EAC\uADE6\u8EAC\uADE7\u8EAC\uADE8\u8EAC\uADE9\u8EAC\uADEA" + //  5390 -  5394
-                "\u8EAC\uADEB\u8EAC\uADEC\u8EAC\uADED\u8EAC\uADEE\u8EAC\uADEF" + //  5395 -  5399
-                "\u8EAC\uADF0\u8EAC\uADF1\u8EAC\uADF2\u8EAC\uADF3\u8EAC\uADF4" + //  5400 -  5404
-                "\u8EAC\uADF5\u8EAC\uADF6\u8EAC\uADF7\u8EAC\uADF8\u8EAC\uACD7" + //  5405 -  5409
-                "\u8EAC\uACD8\u8EAC\uACD9\u8EAC\uACDA\u8EAC\uACDB\u8EAC\uACDC" + //  5410 -  5414
-                "\u8EAC\uACDD\u8EAC\uACDE\u8EAC\uACDF\u8EAC\uACE0\u8EAC\uACE1" + //  5415 -  5419
-                "\u8EAC\uACE2\u8EAC\uACE3\u8EAC\uACE4\u8EAC\uACE5\u8EAC\uACE6" + //  5420 -  5424
-                "\u8EAC\uACE7\u8EAC\uACE8\u8EAC\uACE9\u8EAC\uACEA\u8EAC\uACEB" + //  5425 -  5429
-                "\u8EAC\uACEC\u8EAC\uACED\u8EAC\uACEE\u8EAC\uACEF\u8EAC\uACF0" + //  5430 -  5434
-                "\u8EAC\uACF1\u8EAC\uACF2\u8EAC\uACF3\u8EAC\uACF4\u8EAC\uACF5" + //  5435 -  5439
-                "\u8EAC\uACF6\u8EAC\uACF7\u8EAC\uACF8\u8EAC\uACF9\u8EAC\uACFA" + //  5440 -  5444
-                "\u8EAC\uACFB\u8EAC\uACFC\u8EAC\uACFD\u8EAC\uACFE\u8EAC\uADA1" + //  5445 -  5449
-                "\u8EAC\uADA2\u8EAC\uADA3\u8EAC\uADA4\u8EAC\uADA5\u8EAC\uADA6" + //  5450 -  5454
-                "\u8EAC\uADA7\u8EAC\uADA8\u8EAC\uADA9\u8EAC\uADAA\u8EAC\uADAB" + //  5455 -  5459
-                "\u8EAC\uADAC\u8EAC\uADAD\u8EAC\uADAE\u8EAC\uADAF\u8EAC\uADB0" + //  5460 -  5464
-                "\u8EAC\uADB1\u8EAC\uADB2\u8EAC\uADB3\u8EAC\uADB4\u8EAC\uADB5" + //  5465 -  5469
-                "\u8EAC\uADB6\u8EAC\uADB7\u8EAC\uADB8\u8EAC\uABF5\u8EAC\uABF6" + //  5470 -  5474
-                "\u8EAC\uABF7\u8EAC\uABF8\u8EAC\uABF9\u8EAC\uABFA\u8EAC\uABFB" + //  5475 -  5479
-                "\u8EAC\uABFC\u8EAC\uABFD\u8EAC\uABFE\u8EAC\uACA1\u8EAC\uACA2" + //  5480 -  5484
-                "\u8EAC\uACA3\u8EAC\uACA4\u8EAC\uACA5\u8EAC\uACA6\u8EAC\uACA7" + //  5485 -  5489
-                "\u8EAC\uACA8\u8EAC\uACA9\u8EAC\uACAA\u8EAC\uACAB\u8EAC\uACAC" + //  5490 -  5494
-                "\u8EAC\uACAD\u8EAC\uACAE\u8EAC\uACAF\u8EAC\uACB0\u8EAC\uACB1" + //  5495 -  5499
-                "\u8EAC\uACB2\u8EAC\uACB3\u8EAC\uACB4\u8EAC\uACB5\u8EAC\uACB6" + //  5500 -  5504
-                "\u8EAC\uACB7\u8EAC\uACB8\u8EAC\uACB9\u8EAC\uACBA\u8EAC\uACBB" + //  5505 -  5509
-                "\u8EAC\uACBC\u8EAC\uACBD\u8EAC\uACBE\u8EAC\uACBF\u8EAC\uACC0" + //  5510 -  5514
-                "\u8EAC\uACC1\u8EAC\uACC2\u8EAC\uACC3\u8EAC\uACC4\u8EAC\uACC5" + //  5515 -  5519
-                "\u8EAC\uACC6\u8EAC\uACC7\u8EAC\uACC8\u8EAC\uACC9\u8EAC\uACCA" + //  5520 -  5524
-                "\u8EAC\uACCB\u8EAC\uACCC\u8EAC\uACCD\u8EAC\uACCE\u8EAC\uACCF" + //  5525 -  5529
-                "\u8EAC\uACD0\u8EAC\uACD1\u8EAC\uACD2\u8EAC\uACD3\u8EAC\uACD4" + //  5530 -  5534
-                "\u8EAC\uACD5\u8EAC\uACD6\u8EAC\uABB5\u8EAC\uABB6\u8EAC\uABB7" + //  5535 -  5539
-                "\u8EAC\uABB8\u8EAC\uABB9\u8EAC\uABBA\u8EAC\uABBB\u8EAC\uABBC" + //  5540 -  5544
-                "\u8EAC\uABBD\u8EAC\uABBE\u8EAC\uABBF\u8EAC\uABC0\u8EAC\uABC1" + //  5545 -  5549
-                "\u8EAC\uABC2\u8EAC\uABC3\u8EAC\uABC4\u8EAC\uABC5\u8EAC\uABC6" + //  5550 -  5554
-                "\u8EAC\uABC7\u8EAC\uABC8\u8EAC\uABC9\u8EAC\uABCA\u8EAC\uABCB" + //  5555 -  5559
-                "\u8EAC\uABCC\u8EAC\uABCD\u8EAC\uABCE\u8EAC\uABCF\u8EAC\uABD0" + //  5560 -  5564
-                "\u8EAC\uABD1\u8EAC\uABD2\u8EAC\uABD3\u8EAC\uABD4\u8EAC\uABD5" + //  5565 -  5569
-                "\u8EAC\uABD6\u8EAC\uABD7\u8EAC\uABD8\u8EAC\uABD9\u8EAC\uABDA" + //  5570 -  5574
-                "\u8EAC\uABDB\u8EAC\uABDC\u8EAC\uABDD\u8EAC\uABDE\u8EAC\uABDF" + //  5575 -  5579
-                "\u8EAC\uABE0\u8EAC\uABE1\u8EAC\uABE2\u8EAC\uABE3\u8EAC\uABE4" + //  5580 -  5584
-                "\u8EAC\uABE5\u8EAC\uABE6\u8EAC\uABE7\u8EAC\uABE8\u8EAC\uABE9" + //  5585 -  5589
-                "\u8EAC\uABEA\u8EAC\uABEB\u8EAC\uABEC\u8EAC\uABED\u8EAC\uABEE" + //  5590 -  5594
-                "\u8EAC\uABEF\u8EAC\uABF0\u8EAC\uABF1\u8EAC\uABF2\u8EAC\uABF3" + //  5595 -  5599
-                "\u8EAC\uABF4\u8EAC\uAAD3\u8EAC\uAAD4\u8EAC\uAAD5\u8EAC\uAAD6" + //  5600 -  5604
-                "\u8EAC\uAAD7\u8EAC\uAAD8\u8EAC\uAAD9\u8EAC\uAADA\u8EAC\uAADB" + //  5605 -  5609
-                "\u8EAC\uAADC\u8EAC\uAADD\u8EAC\uAADE\u8EAC\uAADF\u8EAC\uAAE0" + //  5610 -  5614
-                "\u8EAC\uAAE1\u8EAC\uAAE2\u8EAC\uAAE3\u8EAC\uAAE4\u8EAC\uAAE5" + //  5615 -  5619
-                "\u8EAC\uAAE6\u8EAC\uAAE7\u8EAC\uAAE8\u8EAC\uAAE9\u8EAC\uAAEA" + //  5620 -  5624
-                "\u8EAC\uAAEB\u8EAC\uAAEC\u8EAC\uAAED\u8EAC\uAAEE\u8EAC\uAAEF" + //  5625 -  5629
-                "\u8EAC\uAAF0\u8EAC\uAAF1\u8EAC\uAAF2\u8EAC\uAAF3\u8EAC\uAAF4" + //  5630 -  5634
-                "\u8EAC\uAAF5\u8EAC\uAAF6\u8EAC\uAAF7\u8EAC\uAAF8\u8EAC\uAAF9" + //  5635 -  5639
-                "\u8EAC\uAAFA\u8EAC\uAAFB\u8EAC\uAAFC\u8EAC\uAAFD\u8EAC\uAAFE" + //  5640 -  5644
-                "\u8EAC\uABA1\u8EAC\uABA2\u8EAC\uABA3\u8EAC\uABA4\u8EAC\uABA5" + //  5645 -  5649
-                "\u8EAC\uABA6\u8EAC\uABA7\u8EAC\uABA8\u8EAC\uABA9\u8EAC\uABAA" + //  5650 -  5654
-                "\u8EAC\uABAB\u8EAC\uABAC\u8EAC\uABAD\u8EAC\uABAE\u8EAC\uABAF" + //  5655 -  5659
-                "\u8EAC\uABB0\u8EAC\uABB1\u8EAC\uABB2\u8EAC\uABB3\u8EAC\uABB4" + //  5660 -  5664
-                "\u8EAC\uA9F1\u8EAC\uA9F2\u8EAC\uA9F3\u8EAC\uA9F4\u8EAC\uA9F5" + //  5665 -  5669
-                "\u8EAC\uA9F6\u8EAC\uA9F7\u8EAC\uA9F8\u8EAC\uA9F9\u8EAC\uA9FA" + //  5670 -  5674
-                "\u8EAC\uA9FB\u8EAC\uA9FC\u8EAC\uA9FD\u8EAC\uA9FE\u8EAC\uAAA1" + //  5675 -  5679
-                "\u8EAC\uAAA2\u8EAC\uAAA3\u8EAC\uAAA4\u8EAC\uAAA5\u8EAC\uAAA6" + //  5680 -  5684
-                "\u8EAC\uAAA7\u8EAC\uAAA8\u8EAC\uAAA9\u8EAC\uAAAA\u8EAC\uAAAB" + //  5685 -  5689
-                "\u8EAC\uAAAC\u8EAC\uAAAD\u8EAC\uAAAE\u8EAC\uAAAF\u8EAC\uAAB0" + //  5690 -  5694
-                "\u8EAC\uAAB1\u8EAC\uAAB2\u8EAC\uAAB3\u8EAC\uAAB4\u8EAC\uAAB5" + //  5695 -  5699
-                "\u8EAC\uAAB6\u8EAC\uAAB7\u8EAC\uAAB8\u8EAC\uAAB9\u8EAC\uAABA" + //  5700 -  5704
-                "\u8EAC\uAABB\u8EAC\uAABC\u8EAC\uAABD\u8EAC\uAABE\u8EAC\uAABF" + //  5705 -  5709
-                "\u8EAC\uAAC0\u8EAC\uAAC1\u8EAC\uAAC2\u8EAC\uAAC3\u8EAC\uAAC4" + //  5710 -  5714
-                "\u8EAC\uAAC5\u8EAC\uAAC6\u8EAC\uAAC7\u8EAC\uAAC8\u8EAC\uAAC9" + //  5715 -  5719
-                "\u8EAC\uAACA\u8EAC\uAACB\u8EAC\uAACC\u8EAC\uAACD\u8EAC\uAACE" + //  5720 -  5724
-                "\u8EAC\uAACF\u8EAC\uAAD0\u8EAC\uAAD1\u8EAC\uAAD2\u8EAC\uA9B1" + //  5725 -  5729
-                "\u8EAC\uA9B2\u8EAC\uA9B3\u8EAC\uA9B4\u8EAC\uA9B5\u8EAC\uA9B6" + //  5730 -  5734
-                "\u8EAC\uA9B7\u8EAC\uA9B8\u8EAC\uA9B9\u8EAC\uA9BA\u8EAC\uA9BB" + //  5735 -  5739
-                "\u8EAC\uA9BC\u8EAC\uA9BD\u8EAC\uA9BE\u8EAC\uA9BF\u8EAC\uA9C0" + //  5740 -  5744
-                "\u8EAC\uA9C1\u8EAC\uA9C2\u8EAC\uA9C3\u8EAC\uA9C4\u8EAC\uA9C5" + //  5745 -  5749
-                "\u8EAC\uA9C6\u8EAC\uA9C7\u8EAC\uA9C8\u8EAC\uA9C9\u8EAC\uA9CA" + //  5750 -  5754
-                "\u8EAC\uA9CB\u8EAC\uA9CC\u8EAC\uA9CD\u8EAC\uA9CE\u8EAC\uA9CF" + //  5755 -  5759
-                "\u8EAC\uA9D0\u8EAC\uA9D1\u8EAC\uA9D2\u8EAC\uA9D3\u8EAC\uA9D4" + //  5760 -  5764
-                "\u8EAC\uA9D5\u8EAC\uA9D6\u8EAC\uA9D7\u8EAC\uA9D8\u8EAC\uA9D9" + //  5765 -  5769
-                "\u8EAC\uA9DA\u8EAC\uA9DB\u8EAC\uA9DC\u8EAC\uA9DD\u8EAC\uA9DE" + //  5770 -  5774
-                "\u8EAC\uA9DF\u8EAC\uA9E0\u8EAC\uA9E1\u8EAC\uA9E2\u8EAC\uA9E3" + //  5775 -  5779
-                "\u8EAC\uA9E4\u8EAC\uA9E5\u8EAC\uA9E6\u8EAC\uA9E7\u8EAC\uA9E8" + //  5780 -  5784
-                "\u8EAC\uA9E9\u8EAC\uA9EA\u8EAC\uA9EB\u8EAC\uA9EC\u8EAC\uA9ED" + //  5785 -  5789
-                "\u8EAC\uA9EE\u8EAC\uA9EF\u8EAC\uA9F0\u8EAC\uA8CF\u8EAC\uA8D0" + //  5790 -  5794
-                "\u8EAC\uA8D1\u8EAC\uA8D2\u8EAC\uA8D3\u8EAC\uA8D4\u8EAC\uA8D5" + //  5795 -  5799
-                "\u8EAC\uA8D6\u8EAC\uA8D7\u8EAC\uA8D8\u8EAC\uA8D9\u8EAC\uA8DA" + //  5800 -  5804
-                "\u8EAC\uA8DB\u8EAC\uA8DC\u8EAC\uA8DD\u8EAC\uA8DE\u8EAC\uA8DF" + //  5805 -  5809
-                "\u8EAC\uA8E0\u8EAC\uA8E1\u8EAC\uA8E2\u8EAC\uA8E3\u8EAC\uA8E4" + //  5810 -  5814
-                "\u8EAC\uA8E5\u8EAC\uA8E6\u8EAC\uA8E7\u8EAC\uA8E8\u8EAC\uA8E9" + //  5815 -  5819
-                "\u8EAC\uA8EA\u8EAC\uA8EB\u8EAC\uA8EC\u8EAC\uA8ED\u8EAC\uA8EE" + //  5820 -  5824
-                "\u8EAC\uA8EF\u8EAC\uA8F0\u8EAC\uA8F1\u8EAC\uA8F2\u8EAC\uA8F3" + //  5825 -  5829
-                "\u8EAC\uA8F4\u8EAC\uA8F5\u8EAC\uA8F6\u8EAC\uA8F7\u8EAC\uA8F8" + //  5830 -  5834
-                "\u8EAC\uA8F9\u8EAC\uA8FA\u8EAC\uA8FB\u8EAC\uA8FC\u8EAC\uA8FD" + //  5835 -  5839
-                "\u8EAC\uA8FE\u8EAC\uA9A1\u8EAC\uA9A2\u8EAC\uA9A3\u8EAC\uA9A4" + //  5840 -  5844
-                "\u8EAC\uA9A5\u8EAC\uA9A6\u8EAC\uA9A7\u8EAC\uA9A8\u8EAC\uA9A9" + //  5845 -  5849
-                "\u8EAC\uA9AA\u8EAC\uA9AB\u8EAC\uA9AC\u8EAC\uA9AD\u8EAC\uA9AE" + //  5850 -  5854
-                "\u8EAC\uA9AF\u8EAC\uA9B0\u8EAC\uA7ED\u8EAC\uA7EE\u8EAC\uA7EF" + //  5855 -  5859
-                "\u8EAC\uA7F0\u8EAC\uA7F1\u8EAC\uA7F2\u8EAC\uA7F3\u8EAC\uA7F4" + //  5860 -  5864
-                "\u8EAC\uA7F5\u8EAC\uA7F6\u8EAC\uA7F7\u8EAC\uA7F8\u8EAC\uA7F9" + //  5865 -  5869
-                "\u8EAC\uA7FA\u8EAC\uA7FB\u8EAC\uA7FC\u8EAC\uA7FD\u8EAC\uA7FE" + //  5870 -  5874
-                "\u8EAC\uA8A1\u8EAC\uA8A2\u8EAC\uA8A3\u8EAC\uA8A4\u8EAC\uA8A5" + //  5875 -  5879
-                "\u8EAC\uA8A6\u8EAC\uA8A7\u8EAC\uA8A8\u8EAC\uA8A9\u8EAC\uA8AA" + //  5880 -  5884
-                "\u8EAC\uA8AB\u8EAC\uA8AC\u8EAC\uA8AD\u8EAC\uA8AE\u8EAC\uA8AF" + //  5885 -  5889
-                "\u8EAC\uA8B0\u8EAC\uA8B1\u8EAC\uA8B2\u8EAC\uA8B3\u8EAC\uA8B4" + //  5890 -  5894
-                "\u8EAC\uA8B5\u8EAC\uA8B6\u8EAC\uA8B7\u8EAC\uA8B8\u8EAC\uA8B9" + //  5895 -  5899
-                "\u8EAC\uA8BA\u8EAC\uA8BB\u8EAC\uA8BC\u8EAC\uA8BD\u8EAC\uA8BE" + //  5900 -  5904
-                "\u8EAC\uA8BF\u8EAC\uA8C0\u8EAC\uA8C1\u8EAC\uA8C2\u8EAC\uA8C3" + //  5905 -  5909
-                "\u8EAC\uA8C4\u8EAC\uA8C5\u8EAC\uA8C6\u8EAC\uA8C7\u8EAC\uA8C8" + //  5910 -  5914
-                "\u8EAC\uA8C9\u8EAC\uA8CA\u8EAC\uA8CB\u8EAC\uA8CC\u8EAC\uA8CD" + //  5915 -  5919
-                "\u8EAC\uA8CE\u8EAC\uA7AD\u8EAC\uA7AE\u8EAC\uA7AF\u8EAC\uA7B0" + //  5920 -  5924
-                "\u8EAC\uA7B1\u8EAC\uA7B2\u8EAC\uA7B3\u8EAC\uA7B4\u8EAC\uA7B5" + //  5925 -  5929
-                "\u8EAC\uA7B6\u8EAC\uA7B7\u8EAC\uA7B8\u8EAC\uA7B9\u8EAC\uA7BA" + //  5930 -  5934
-                "\u8EAC\uA7BB\u8EAC\uA7BC\u8EAC\uA7BD\u8EAC\uA7BE\u8EAC\uA7BF" + //  5935 -  5939
-                "\u8EAC\uA7C0\u8EAC\uA7C1\u8EAC\uA7C2\u8EAC\uA7C3\u8EAC\uA7C4" + //  5940 -  5944
-                "\u8EAC\uA7C5\u8EAC\uA7C6\u8EAC\uA7C7\u8EAC\uA7C8\u8EAC\uA7C9" + //  5945 -  5949
-                "\u8EAC\uA7CA\u8EAC\uA7CB\u8EAC\uA7CC\u8EAC\uA7CD\u8EAC\uA7CE" + //  5950 -  5954
-                "\u8EAC\uA7CF\u8EAC\uA7D0\u8EAC\uA7D1\u8EAC\uA7D2\u8EAC\uA7D3" + //  5955 -  5959
-                "\u8EAC\uA7D4\u8EAC\uA7D5\u8EAC\uA7D6\u8EAC\uA7D7\u8EAC\uA7D8" + //  5960 -  5964
-                "\u8EAC\uA7D9\u8EAC\uA7DA\u8EAC\uA7DB\u8EAC\uA7DC\u8EAC\uA7DD" + //  5965 -  5969
-                "\u8EAC\uA7DE\u8EAC\uA7DF\u8EAC\uA7E0\u8EAC\uA7E1\u8EAC\uA7E2" + //  5970 -  5974
-                "\u8EAC\uA7E3\u8EAC\uA7E4\u8EAC\uA7E5\u8EAC\uA7E6\u8EAC\uA7E7" + //  5975 -  5979
-                "\u8EAC\uA7E8\u8EAC\uA7E9\u8EAC\uA7EA\u8EAC\uA7EB\u8EAC\uA7EC" + //  5980 -  5984
-                "\u8EAC\uA6CB\u8EAC\uA6CC\u8EAC\uA6CD\u8EAC\uA6CE\u8EAC\uA6CF" + //  5985 -  5989
-                "\u8EAC\uA6D0\u8EAC\uA6D1\u8EAC\uA6D2\u8EAC\uA6D3\u8EAC\uA6D4" + //  5990 -  5994
-                "\u8EAC\uA6D5\u8EAC\uA6D6\u8EAC\uA6D7\u8EAC\uA6D8\u8EAC\uA6D9" + //  5995 -  5999
-                "\u8EAC\uA6DA\u8EAC\uA6DB\u8EAC\uA6DC\u8EAC\uA6DD\u8EAC\uA6DE" + //  6000 -  6004
-                "\u8EAC\uA6DF\u8EAC\uA6E0\u8EAC\uA6E1\u8EAC\uA6E2\u8EAC\uA6E3" + //  6005 -  6009
-                "\u8EAC\uA6E4\u8EAC\uA6E5\u8EAC\uA6E6\u8EAC\uA6E7\u8EAC\uA6E8" + //  6010 -  6014
-                "\u8EAC\uA6E9\u8EAC\uA6EA\u8EAC\uA6EB\u8EAC\uA6EC\u8EAC\uA6ED" + //  6015 -  6019
-                "\u8EAC\uA6EE\u8EAC\uA6EF\u8EAC\uA6F0\u8EAC\uA6F1\u8EAC\uA6F2" + //  6020 -  6024
-                "\u8EAC\uA6F3\u8EAC\uA6F4\u8EAC\uA6F5\u8EAC\uA6F6\u8EAC\uA6F7" + //  6025 -  6029
-                "\u8EAC\uA6F8\u8EAC\uA6F9\u8EAC\uA6FA\u8EAC\uA6FB\u8EAC\uA6FC" + //  6030 -  6034
-                "\u8EAC\uA6FD\u8EAC\uA6FE\u8EAC\uA7A1\u8EAC\uA7A2\u8EAC\uA7A3" + //  6035 -  6039
-                "\u8EAC\uA7A4\u8EAC\uA7A5\u8EAC\uA7A6\u8EAC\uA7A7\u8EAC\uA7A8" + //  6040 -  6044
-                "\u8EAC\uA7A9\u8EAC\uA7AA\u8EAC\uA7AB\u8EAC\uA7AC\u8EAC\uA5E9" + //  6045 -  6049
-                "\u8EAC\uA5EA\u8EAC\uA5EB\u8EAC\uA5EC\u8EAC\uA5ED\u8EAC\uA5EE" + //  6050 -  6054
-                "\u8EAC\uA5EF\u8EAC\uA5F0\u8EAC\uA5F1\u8EAC\uA5F2\u8EAC\uA5F3" + //  6055 -  6059
-                "\u8EAC\uA5F4\u8EAC\uA5F5\u8EAC\uA5F6\u8EAC\uA5F7\u8EAC\uA5F8" + //  6060 -  6064
-                "\u8EAC\uA5F9\u8EAC\uA5FA\u8EAC\uA5FB\u8EAC\uA5FC\u8EAC\uA5FD" + //  6065 -  6069
-                "\u8EAC\uA5FE\u8EAC\uA6A1\u8EAC\uA6A2\u8EAC\uA6A3\u8EAC\uA6A4" + //  6070 -  6074
-                "\u8EAC\uA6A5\u8EAC\uA6A6\u8EAC\uA6A7\u8EAC\uA6A8\u8EAC\uA6A9" + //  6075 -  6079
-                "\u8EAC\uA6AA\u8EAC\uA6AB\u8EAC\uA6AC\u8EAC\uA6AD\u8EAC\uA6AE" + //  6080 -  6084
-                "\u8EAC\uA6AF\u8EAC\uA6B0\u8EAC\uA6B1\u8EAC\uA6B2\u8EAC\uA6B3" + //  6085 -  6089
-                "\u8EAC\uA6B4\u8EAC\uA6B5\u8EAC\uA6B6\u8EAC\uA6B7\u8EAC\uA6B8" + //  6090 -  6094
-                "\u8EAC\uA6B9\u8EAC\uA6BA\u8EAC\uA6BB\u8EAC\uA6BC\u8EAC\uA6BD" + //  6095 -  6099
-                "\u8EAC\uA6BE\u8EAC\uA6BF\u8EAC\uA6C0\u8EAC\uA6C1\u8EAC\uA6C2" + //  6100 -  6104
-                "\u8EAC\uA6C3\u8EAC\uA6C4\u8EAC\uA6C5\u8EAC\uA6C6\u8EAC\uA6C7" + //  6105 -  6109
-                "\u8EAC\uA6C8\u8EAC\uA6C9\u8EAC\uA6CA\u8EAC\uA5A9\u8EAC\uA5AA" + //  6110 -  6114
-                "\u8EAC\uA5AB\u8EAC\uA5AC\u8EAC\uA5AD\u8EAC\uA5AE\u8EAC\uA5AF" + //  6115 -  6119
-                "\u8EAC\uA5B0\u8EAC\uA5B1\u8EAC\uA5B2\u8EAC\uA5B3\u8EAC\uA5B4" + //  6120 -  6124
-                "\u8EAC\uA5B5\u8EAC\uA5B6\u8EAC\uA5B7\u8EAC\uA5B8\u8EAC\uA5B9" + //  6125 -  6129
-                "\u8EAC\uA5BA\u8EAC\uA5BB\u8EAC\uA5BC\u8EAC\uA5BD\u8EAC\uA5BE" + //  6130 -  6134
-                "\u8EAC\uA5BF\u8EAC\uA5C0\u8EAC\uA5C1\u8EAC\uA5C2\u8EAC\uA5C3" + //  6135 -  6139
-                "\u8EAC\uA5C4\u8EAC\uA5C5\u8EAC\uA5C6\u8EAC\uA5C7\u8EAC\uA5C8" + //  6140 -  6144
-                "\u8EAC\uA5C9\u8EAC\uA5CA\u8EAC\uA5CB\u8EAC\uA5CC\u8EAC\uA5CD" + //  6145 -  6149
-                "\u8EAC\uA5CE\u8EAC\uA5CF\u8EAC\uA5D0\u8EAC\uA5D1\u8EAC\uA5D2" + //  6150 -  6154
-                "\u8EAC\uA5D3\u8EAC\uA5D4\u8EAC\uA5D5\u8EAC\uA5D6\u8EAC\uA5D7" + //  6155 -  6159
-                "\u8EAC\uA5D8\u8EAC\uA5D9\u8EAC\uA5DA\u8EAC\uA5DB\u8EAC\uA5DC" + //  6160 -  6164
-                "\u8EAC\uA5DD\u8EAC\uA5DE\u8EAC\uA5DF\u8EAC\uA5E0\u8EAC\uA5E1" + //  6165 -  6169
-                "\u8EAC\uA5E2\u8EAC\uA5E3\u8EAC\uA5E4\u8EAC\uA5E5\u8EAC\uA5E6" + //  6170 -  6174
-                "\u8EAC\uA5E7\u8EAC\uA5E8\u8EAC\uA4C7\u8EAC\uA4C8\u8EAC\uA4C9" + //  6175 -  6179
-                "\u8EAC\uA4CA\u8EAC\uA4CB\u8EAC\uA4CC\u8EAC\uA4CD\u8EAC\uA4CE" + //  6180 -  6184
-                "\u8EAC\uA4CF\u8EAC\uA4D0\u8EAC\uA4D1\u8EAC\uA4D2\u8EAC\uA4D3" + //  6185 -  6189
-                "\u8EAC\uA4D4\u8EAC\uA4D5\u8EAC\uA4D6\u8EAC\uA4D7\u8EAC\uA4D8" + //  6190 -  6194
-                "\u8EAC\uA4D9\u8EAC\uA4DA\u8EAC\uA4DB\u8EAC\uA4DC\u8EAC\uA4DD" + //  6195 -  6199
-                "\u8EAC\uA4DE\u8EAC\uA4DF\u8EAC\uA4E0\u8EAC\uA4E1\u8EAC\uA4E2" + //  6200 -  6204
-                "\u8EAC\uA4E3\u8EAC\uA4E4\u8EAC\uA4E5\u8EAC\uA4E6\u8EAC\uA4E7" + //  6205 -  6209
-                "\u8EAC\uA4E8\u8EAC\uA4E9\u8EAC\uA4EA\u8EAC\uA4EB\u8EAC\uA4EC" + //  6210 -  6214
-                "\u8EAC\uA4ED\u8EAC\uA4EE\u8EAC\uA4EF\u8EAC\uA4F0\u8EAC\uA4F1" + //  6215 -  6219
-                "\u8EAC\uA4F2\u8EAC\uA4F3\u8EAC\uA4F4\u8EAC\uA4F5\u8EAC\uA4F6" + //  6220 -  6224
-                "\u8EAC\uA4F7\u8EAC\uA4F8\u8EAC\uA4F9\u8EAC\uA4FA\u8EAC\uA4FB" + //  6225 -  6229
-                "\u8EAC\uA4FC\u8EAC\uA4FD\u8EAC\uA4FE\u8EAC\uA5A1\u8EAC\uA5A2" + //  6230 -  6234
-                "\u8EAC\uA5A3\u8EAC\uA5A4\u8EAC\uA5A5\u8EAC\uA5A6\u8EAC\uA5A7" + //  6235 -  6239
-                "\u8EAC\uA5A8\u8EAC\uA3E5\u8EAC\uA3E6\u8EAC\uA3E7\u8EAC\uA3E8" + //  6240 -  6244
-                "\u8EAC\uA3E9\u8EAC\uA3EA\u8EAC\uA3EB\u8EAC\uA3EC\u8EAC\uA3ED" + //  6245 -  6249
-                "\u8EAC\uA3EE\u8EAC\uA3EF\u8EAC\uA3F0\u8EAC\uA3F1\u8EAC\uA3F2" + //  6250 -  6254
-                "\u8EAC\uA3F3\u8EAC\uA3F4\u8EAC\uA3F5\u8EAC\uA3F6\u8EAC\uA3F7" + //  6255 -  6259
-                "\u8EAC\uA3F8\u8EAC\uA3F9\u8EAC\uA3FA\u8EAC\uA3FB\u8EAC\uA3FC" + //  6260 -  6264
-                "\u8EAC\uA3FD\u8EAC\uA3FE\u8EAC\uA4A1\u8EAC\uA4A2\u8EAC\uA4A3" + //  6265 -  6269
-                "\u8EAC\uA4A4\u8EAC\uA4A5\u8EAC\uA4A6\u8EAC\uA4A7\u8EAC\uA4A8" + //  6270 -  6274
-                "\u8EAC\uA4A9\u8EAC\uA4AA\u8EAC\uA4AB\u8EAC\uA4AC\u8EAC\uA4AD" + //  6275 -  6279
-                "\u8EAC\uA4AE\u8EAC\uA4AF\u8EAC\uA4B0\u8EAC\uA4B1\u8EAC\uA4B2" + //  6280 -  6284
-                "\u8EAC\uA4B3\u8EAC\uA4B4\u8EAC\uA4B5\u8EAC\uA4B6\u8EAC\uA4B7" + //  6285 -  6289
-                "\u8EAC\uA4B8\u8EAC\uA4B9\u8EAC\uA4BA\u8EAC\uA4BB\u8EAC\uA4BC" + //  6290 -  6294
-                "\u8EAC\uA4BD\u8EAC\uA4BE\u8EAC\uA4BF\u8EAC\uA4C0\u8EAC\uA4C1" + //  6295 -  6299
-                "\u8EAC\uA4C2\u8EAC\uA4C3\u8EAC\uA4C4\u8EAC\uA4C5\u8EAC\uA4C6" + //  6300 -  6304
-                "\u8EAC\uA3A5\u8EAC\uA3A6\u8EAC\uA3A7\u8EAC\uA3A8\u8EAC\uA3A9" + //  6305 -  6309
-                "\u8EAC\uA3AA\u8EAC\uA3AB\u8EAC\uA3AC\u8EAC\uA3AD\u8EAC\uA3AE" + //  6310 -  6314
-                "\u8EAC\uA3AF\u8EAC\uA3B0\u8EAC\uA3B1\u8EAC\uA3B2\u8EAC\uA3B3" + //  6315 -  6319
-                "\u8EAC\uA3B4\u8EAC\uA3B5\u8EAC\uA3B6\u8EAC\uA3B7\u8EAC\uA3B8" + //  6320 -  6324
-                "\u8EAC\uA3B9\u8EAC\uA3BA\u8EAC\uA3BB\u8EAC\uA3BC\u8EAC\uA3BD" + //  6325 -  6329
-                "\u8EAC\uA3BE\u8EAC\uA3BF\u8EAC\uA3C0\u8EAC\uA3C1\u8EAC\uA3C2" + //  6330 -  6334
-                "\u8EAC\uA3C3\u8EAC\uA3C4\u8EAC\uA3C5\u8EAC\uA3C6\u8EAC\uA3C7" + //  6335 -  6339
-                "\u8EAC\uA3C8\u8EAC\uA3C9\u8EAC\uA3CA\u8EAC\uA3CB\u8EAC\uA3CC" + //  6340 -  6344
-                "\u8EAC\uA3CD\u8EAC\uA3CE\u8EAC\uA3CF\u8EAC\uA3D0\u8EAC\uA3D1" + //  6345 -  6349
-                "\u8EAC\uA3D2\u8EAC\uA3D3\u8EAC\uA3D4\u8EAC\uA3D5\u8EAC\uA3D6" + //  6350 -  6354
-                "\u8EAC\uA3D7\u8EAC\uA3D8\u8EAC\uA3D9\u8EAC\uA3DA\u8EAC\uA3DB" + //  6355 -  6359
-                "\u8EAC\uA3DC\u8EAC\uA3DD\u8EAC\uA3DE\u8EAC\uA3DF\u8EAC\uA3E0" + //  6360 -  6364
-                "\u8EAC\uA3E1\u8EAC\uA3E2\u8EAC\uA3E3\u8EAC\uA3E4\u8EAC\uA2C3" + //  6365 -  6369
-                "\u8EAC\uA2C4\u8EAC\uA2C5\u8EAC\uA2C6\u8EAC\uA2C7\u8EAC\uA2C8" + //  6370 -  6374
-                "\u8EAC\uA2C9\u8EAC\uA2CA\u8EAC\uA2CB\u8EAC\uA2CC\u8EAC\uA2CD" + //  6375 -  6379
-                "\u8EAC\uA2CE\u8EAC\uA2CF\u8EAC\uA2D0\u8EAC\uA2D1\u8EAC\uA2D2" + //  6380 -  6384
-                "\u8EAC\uA2D3\u8EAC\uA2D4\u8EAC\uA2D5\u8EAC\uA2D6\u8EAC\uA2D7" + //  6385 -  6389
-                "\u8EAC\uA2D8\u8EAC\uA2D9\u8EAC\uA2DA\u8EAC\uA2DB\u8EAC\uA2DC" + //  6390 -  6394
-                "\u8EAC\uA2DD\u8EAC\uA2DE\u8EAC\uA2DF\u8EAC\uA2E0\u8EAC\uA2E1" + //  6395 -  6399
-                "\u8EAC\uA2E2\u8EAC\uA2E3\u8EAC\uA2E4\u8EAC\uA2E5\u8EAC\uA2E6" + //  6400 -  6404
-                "\u8EAC\uA2E7\u8EAC\uA2E8\u8EAC\uA2E9\u8EAC\uA2EA\u8EAC\uA2EB" + //  6405 -  6409
-                "\u8EAC\uA2EC\u8EAC\uA2ED\u8EAC\uA2EE\u8EAC\uA2EF\u8EAC\uA2F0" + //  6410 -  6414
-                "\u8EAC\uA2F1\u8EAC\uA2F2\u8EAC\uA2F3\u8EAC\uA2F4\u8EAC\uA2F5" + //  6415 -  6419
-                "\u8EAC\uA2F6\u8EAC\uA2F7\u8EAC\uA2F8\u8EAC\uA2F9\u8EAC\uA2FA" + //  6420 -  6424
-                "\u8EAC\uA2FB\u8EAC\uA2FC\u8EAC\uA2FD\u8EAC\uA2FE\u8EAC\uA3A1" + //  6425 -  6429
-                "\u8EAC\uA3A2\u8EAC\uA3A3\u8EAC\uA3A4\u8EAC\uA1E1\u8EAC\uA1E2" + //  6430 -  6434
-                "\u8EAC\uA1E3\u8EAC\uA1E4\u8EAC\uA1E5\u8EAC\uA1E6\u8EAC\uA1E7" + //  6435 -  6439
-                "\u8EAC\uA1E8\u8EAC\uA1E9\u8EAC\uA1EA\u8EAC\uA1EB\u8EAC\uA1EC" + //  6440 -  6444
-                "\u8EAC\uA1ED\u8EAC\uA1EE\u8EAC\uA1EF\u8EAC\uA1F0\u8EAC\uA1F1" + //  6445 -  6449
-                "\u8EAC\uA1F2\u8EAC\uA1F3\u8EAC\uA1F4\u8EAC\uA1F5\u8EAC\uA1F6" + //  6450 -  6454
-                "\u8EAC\uA1F7\u8EAC\uA1F8\u8EAC\uA1F9\u8EAC\uA1FA\u8EAC\uA1FB" + //  6455 -  6459
-                "\u8EAC\uA1FC\u8EAC\uA1FD\u8EAC\uA1FE\u8EAC\uA2A1\u8EAC\uA2A2" + //  6460 -  6464
-                "\u8EAC\uA2A3\u8EAC\uA2A4\u8EAC\uA2A5\u8EAC\uA2A6\u8EAC\uA2A7" + //  6465 -  6469
-                "\u8EAC\uA2A8\u8EAC\uA2A9\u8EAC\uA2AA\u8EAC\uA2AB\u8EAC\uA2AC" + //  6470 -  6474
-                "\u8EAC\uA2AD\u8EAC\uA2AE\u8EAC\uA2AF\u8EAC\uA2B0\u8EAC\uA2B1" + //  6475 -  6479
-                "\u8EAC\uA2B2\u8EAC\uA2B3\u8EAC\uA2B4\u8EAC\uA2B5\u8EAC\uA2B6" + //  6480 -  6484
-                "\u8EAC\uA2B7\u8EAC\uA2B8\u8EAC\uA2B9\u8EAC\uA2BA\u8EAC\uA2BB" + //  6485 -  6489
-                "\u8EAC\uA2BC\u8EAC\uA2BD\u8EAC\uA2BE\u8EAC\uA2BF\u8EAC\uA2C0" + //  6490 -  6494
-                "\u8EAC\uA2C1\u8EAC\uA2C2\u8EAC\uA1A1\u8EAC\uA1A2\u8EAC\uA1A3" + //  6495 -  6499
-                "\u8EAC\uA1A4\u8EAC\uA1A5\u8EAC\uA1A6\u8EAC\uA1A7\u8EAC\uA1A8" + //  6500 -  6504
-                "\u8EAC\uA1A9\u8EAC\uA1AA\u8EAC\uA1AB\u8EAC\uA1AC\u8EAC\uA1AD" + //  6505 -  6509
-                "\u8EAC\uA1AE\u8EAC\uA1AF\u8EAC\uA1B0\u8EAC\uA1B1\u8EAC\uA1B2" + //  6510 -  6514
-                "\u8EAC\uA1B3\u8EAC\uA1B4\u8EAC\uA1B5\u8EAC\uA1B6\u8EAC\uA1B7" + //  6515 -  6519
-                "\u8EAC\uA1B8\u8EAC\uA1B9\u8EAC\uA1BA\u8EAC\uA1BB\u8EAC\uA1BC" + //  6520 -  6524
-                "\u8EAC\uA1BD\u8EAC\uA1BE\u8EAC\uA1BF\u8EAC\uA1C0\u8EAC\uA1C1" + //  6525 -  6529
-                "\u8EAC\uA1C2\u8EAC\uA1C3\u8EAC\uA1C4\u8EAC\uA1C5\u8EAC\uA1C6" + //  6530 -  6534
-                "\u8EAC\uA1C7\u8EAC\uA1C8\u8EAC\uA1C9\u8EAC\uA1CA\u8EAC\uA1CB" + //  6535 -  6539
-                "\u8EAC\uA1CC\u8EAC\uA1CD\u8EAC\uA1CE\u8EAC\uA1CF\u8EAC\uA1D0" + //  6540 -  6544
-                "\u8EAC\uA1D1\u8EAC\uA1D2\u8EAC\uA1D3\u8EAC\uA1D4\u8EAC\uA1D5" + //  6545 -  6549
-                "\u8EAC\uA1D6\u8EAC\uA1D7\u8EAC\uA1D8\u8EAC\uA1D9\u8EAC\uA1DA" + //  6550 -  6554
-                "\u8EAC\uA1DB\u8EAC\uA1DC\u8EAC\uA1DD\u8EAC\uA1DE\u8EAC\uA1DF" + //  6555 -  6559
-                "\u8EAC\uA1E0\u8EA2\uE8E4\u8EA2\uE8E5\u8EA2\uEEF9\u8EA2\uF0AD" + //  6560 -  6564
-                "\u0000\u0000\u0000\u0000\u8EA2\uF0F8\u8EA2\uF1D5\u8EA2\uF2A9" + //  6565 -  6569
-                "\u8EA2\uF2C3\u0000\uEBFD\u0000\uF6BA\u8EA2\uE5B5\u8EA2\uE8E6" + //  6570 -  6574
-                "\u8EA2\uEDC0\u8EA2\uF0AE\u0000\u0000\u0000\u0000\u0000\uF0AF" + //  6575 -  6579
-                "\u0000\u0000\u8EA2\uE1C1\u8EA2\uE5B6\u8EA2\uE8E7\u8EA2\uE8E8" + //  6580 -  6584
-                "\u8EA2\uE8E9\u8EA2\uEBCC\u0000\u0000\u8EA2\uEBC8\u0000\uFBD4" + //  6585 -  6589
-                "\u8EA2\uEBCB\u8EA2\uEBCA\u0000\uFADF\u8EA2\uEBC9\u0000\uFAE1" + //  6590 -  6594
-                "\u0000\u0000\u0000\uFAE0\u8EA2\uEDC2\u8EA2\uEDC1\u0000\uFBD5" + //  6595 -  6599
-                "\u0000\uFBD6\u0000\u0000\u0000\u0000\u0000\uFCB2\u8EA2\uEEFA" + //  6600 -  6604
-                "\u0000\uFCB1\u0000\u0000\u8EA2\uF0B1\u8EA2\uF0B2\u8EA2\uF0B0" + //  6605 -  6609
-                "\u8EA2\uF0AF\u0000\uFDA1\u0000\u0000\u8EA2\uF0F9\u8EA2\uF0FA" + //  6610 -  6614
-                "\u8EA2\uF0FB\u0000\uFCFE\u8EA2\uF1D6\u8EA2\uF1D9\u8EA2\uF1D8" + //  6615 -  6619
-                "\u8EA2\uF1D7\u0000\u0000\u0000\u0000\u8EA2\uF2C2\u0000\u0000" + //  6620 -  6624
-                "\u0000\uC4A1\u0000\uC4A3\u0000\u0000\u0000\uC4A4\u0000\u0000" + //  6625 -  6629
-                "\u0000\u0000\u0000\u0000\u8EA2\uA1A6\u0000\uC4B7\u0000\uC4B5" + //  6630 -  6634
-                "\u0000\uC4B8\u0000\uC4B6\u8EA2\uA1A7\u0000\uC4E2\u8EA2\uA1AF" + //  6635 -  6639
-                "\u8EA2\uA1AD\u0000\uC4E1\u0000\uC4E0\u0000\u0000\u0000\u0000" + //  6640 -  6644
-                "\u0000\uC5E2\u0000\uC5E1\u0000\uC5E0\u0000\u0000\u0000\uC5E3" + //  6645 -  6649
-                "\u0000\uC5DF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6650 -  6654
-                "\u0000\uC7A2\u0000\uC7A3\u0000\u0000\u0000\u0000\u0000\u0000" + //  6655 -  6659
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCBE4\u0000\u0000" + //  6660 -  6664
-                "\u0000\uA7A2\u0000\u0000\u0000\u0000\u0000\uC4B9\u0000\u0000" + //  6665 -  6669
-                "\u0000\uC4E3\u8EA2\uA1B0\u0000\u0000\u0000\uC4E4\u8EA2\uA1C3" + //  6670 -  6674
-                "\u0000\uC8EB\u8EA2\uA5B1\u0000\u0000\u0000\u0000\u0000\uA7A3" + //  6675 -  6679
-                "\u0000\u0000\u0000\uC4BA\u0000\uC4E5\u0000\u0000\u0000\uC5E4" + //  6680 -  6684
-                "\u8EA2\uA1C4\u0000\u0000\u0000\u0000\u0000\uA7A4\u8EA2\uE5AE" + //  6685 -  6689
-                "\u8EA2\uE5AD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  6690 -  6694
-                "\u8EA2\uF0A8\u0000\uFCFD\u0000\u0000\u8EA2\uF1D4\u8EA2\uF1EE" + //  6695 -  6699
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7EF\u8EA2\uD6BD" + //  6700 -  6704
-                "\u8EA2\uD6BE\u0000\u0000\u8EA2\uDCC3\u0000\uE7F0\u0000\u0000" + //  6705 -  6709
-                "\u0000\uF8A9\u8EA2\uE5AF\u0000\u0000\u8EA2\uEDBD\u0000\uFBD3" + //  6710 -  6714
-                "\u8EA2\uEDBE\u8EA2\uEDBC\u8EA2\uF0A9\u0000\u0000\u8EA2\uF0F7" + //  6715 -  6719
-                "\u0000\u0000\u0000\uE7F1\u0000\u0000\u8EA2\uE1C0\u8EA2\uE1BF" + //  6720 -  6724
-                "\u8EA2\uE1BE\u8EA2\uE5B0\u0000\u0000\u0000\u0000\u8EA2\uE5B4" + //  6725 -  6729
-                "\u8EA2\uE5B3\u8EA2\uE5B2\u8EA2\uE5B1\u0000\uF8AA\u8EA2\uE8E3" + //  6730 -  6734
-                "\u8EA2\uEBC7\u0000\uFADE\u8EA2\uEBC6\u8EA2\uEDBF\u8EA2\uEEF8" + //  6735 -  6739
-                "\u8EA2\uEEF7\u0000\uFCB0\u8EA2\uEEF6\u8EA2\uF0AC\u8EA2\uF0AB" + //  6740 -  6744
-                "\u8EA2\uF0AA\u0000\u0000\u0000\u0000\u0000\uEBFC\u0000\u0000" + //  6745 -  6749
-                "\u8EA2\uDCC4\u0000\uF6B9\u0000\u0000\u8EAD\uA2E7\u8EAD\uA2E8" + //  6750 -  6754
-                "\u8EAD\uA2E9\u8EAD\uA2EA\u8EAD\uA2EB\u8EAD\uA2EC\u8EAD\uA2ED" + //  6755 -  6759
-                "\u8EAD\uA2EE\u8EAD\uA2EF\u8EAD\uA2F0\u8EAD\uA2F1\u8EAD\uA2F2" + //  6760 -  6764
-                "\u8EAD\uA2F3\u8EAD\uA2F4\u8EAD\uA2F5\u8EAD\uA2F6\u8EAD\uA2F7" + //  6765 -  6769
-                "\u8EAD\uA2F8\u8EAD\uA2F9\u8EAD\uA2FA\u8EAD\uA2FB\u8EAD\uA2FC" + //  6770 -  6774
-                "\u8EAD\uA2FD\u8EAD\uA2FE\u8EAD\uA3A1\u8EAD\uA3A2\u8EAD\uA3A3" + //  6775 -  6779
-                "\u8EAD\uA3A4\u8EAD\uA3A5\u8EAD\uA3A6\u8EAD\uA3A7\u8EAD\uA3A8" + //  6780 -  6784
-                "\u8EAD\uA3A9\u8EAD\uA3AA\u8EAD\uA3AB\u8EAD\uA3AC\u8EAD\uA3AD" + //  6785 -  6789
-                "\u8EAD\uA3AE\u8EAD\uA3AF\u8EAD\uA3B0\u8EAD\uA3B1\u8EAD\uA3B2" + //  6790 -  6794
-                "\u8EAD\uA3B3\u8EAD\uA3B4\u8EAD\uA3B5\u8EAD\uA3B6\u8EAD\uA3B7" + //  6795 -  6799
-                "\u8EAD\uA3B8\u8EAD\uA3B9\u8EAD\uA3BA\u8EAD\uA3BB\u8EAD\uA3BC" + //  6800 -  6804
-                "\u8EAD\uA3BD\u8EAD\uA3BE\u8EAD\uA3BF\u0000\u0000\u0000\u0000" + //  6805 -  6809
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EAD\uA1AE\u8EAD\uA1A5" + //  6810 -  6814
-                "\u8EAD\uA1A6\u0000\u0000\u0000\uD5E9\u8EA2\uAFD4\u8EA2\uAFD2" + //  6815 -  6819
-                "\u8EA2\uAFD3\u0000\uD5EA\u8EA2\uAFD1\u0000\u0000\u0000\u0000" + //  6820 -  6824
-                "\u0000\u0000\u0000\u0000\u0000\uDBA1\u0000\uDBA2\u8EA2\uB5EA" + //  6825 -  6829
-                "\u0000\uDBA3\u0000\uDAFE\u8EA2\uBCC2\u0000\u0000\u8EA2\uBCC3" + //  6830 -  6834
-                "\u8EA2\uC3C4\u0000\u0000\u0000\u0000\u0000\uE9A2\u0000\uE9A1" + //  6835 -  6839
-                "\u0000\u0000\u0000\u0000\u8EA2\uDCFC\u8EA2\uE1E5\u0000\u0000" + //  6840 -  6844
-                "\u8EA2\uE5D5\u8EA2\uE5D4\u8EA2\uE8FB\u0000\uA7E6\u8EA2\uA1BE" + //  6845 -  6849
-                "\u0000\uD1CD\u0000\u0000\u0000\u0000\u0000\uC5CA\u0000\uC6D9" + //  6850 -  6854
-                "\u0000\u0000\u0000\uC8AF\u0000\uC8AE\u0000\u0000\u0000\u0000" + //  6855 -  6859
-                "\u0000\uC8B0\u0000\uC8B1\u8EA2\uA2CF\u8EA2\uA2CE\u8EA2\uA4B9" + //  6860 -  6864
-                "\u0000\uCAD4\u8EA2\uA4BC\u8EA2\uA4BB\u8EA2\uA4BA\u8EA2\uA4BD" + //  6865 -  6869
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDF6" + //  6870 -  6874
-                "\u8EA2\uA7AA\u8EA2\uA7A6\u8EA2\uA7AF\u0000\u0000\u0000\u0000" + //  6875 -  6879
-                "\u8EA2\uA3A6\u0000\u0000\u0000\uC8FB\u0000\u0000\u0000\u0000" + //  6880 -  6884
-                "\u0000\uC8FE\u0000\uC8EF\u0000\uC9A9\u8EA2\uA2FD\u0000\u0000" + //  6885 -  6889
-                "\u0000\u0000\u8EA2\uA5BD\u0000\uC8ED\u0000\uC9A5\u0000\uC8EE" + //  6890 -  6894
-                "\u0000\uC8F6\u0000\uC8F7\u8EA2\uA3A4\u8EA2\uA2FE\u0000\uC8FC" + //  6895 -  6899
-                "\u0000\uC8F4\u8EA2\uA2FA\u0000\uC8F0\u8EA2\uA3A7\u0000\uC9A7" + //  6900 -  6904
-                "\u0000\uC9AA\u0000\uC8F3\u0000\uC9A2\u0000\uC9A8\u0000\uC8F1" + //  6905 -  6909
-                "\u8EA2\uA3A5\u0000\uC9A3\u8EA2\uA3AB\u8EA2\uA2FC\u0000\uC9A1" + //  6910 -  6914
-                "\u8EA2\uA3A1\u0000\u0000\u0000\u0000\u8EA2\uA3A3\u0000\u0000" + //  6915 -  6919
-                "\u0000\uCBF9\u8EA2\uA5BF\u8EA2\uA5CB\u0000\uCBF1\u0000\u0000" + //  6920 -  6924
-                "\u8EA2\uA5CC\u0000\uCBEC\u0000\uCBF6\u0000\u0000\u0000\u0000" + //  6925 -  6929
-                "\u0000\uCBEF\u8EA2\uA5B9\u0000\uCBF7\u8EA2\uA5B8\u8EA2\uA5BC" + //  6930 -  6934
-                "\u8EA2\uA5C3\u8EA2\uA5C1\u0000\uCCA1\u0000\uCBFA\u8EA2\uA5B3" + //  6935 -  6939
-                "\u8EA2\uA5B5\u0000\uCBFC\u0000\uCBF0\u8EA2\uE8E1\u0000\u0000" + //  6940 -  6944
-                "\u8EA2\uF0A4\u0000\uE3A7\u0000\u0000\u0000\u0000\u0000\u0000" + //  6945 -  6949
-                "\u0000\u0000\u8EA2\uE1BA\u0000\u0000\u0000\u0000\u0000\u0000" + //  6950 -  6954
-                "\u0000\uFDB1\u0000\uE3A8\u0000\uF0AD\u0000\uF6B4\u8EA2\uF0A5" + //  6955 -  6959
-                "\u0000\uE3A9\u0000\u0000\u8EA2\uD6BC\u0000\uF3BD\u8EA2\uDCC0" + //  6960 -  6964
-                "\u8EA2\uDCC1\u0000\u0000\u0000\uF3BC\u0000\u0000\u8EA2\uE1BB" + //  6965 -  6969
-                "\u0000\uF6B8\u0000\uF6B6\u0000\uF6B7\u0000\uF6B5\u8EA2\uE5AC" + //  6970 -  6974
-                "\u0000\uF8A8\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uEBC3" + //  6975 -  6979
-                "\u8EA2\uEBC2\u8EA2\uEBC5\u8EA2\uEBC4\u0000\uFADD\u0000\u0000" + //  6980 -  6984
-                "\u0000\u0000\u8EA2\uEDB9\u0000\u0000\u8EA2\uEDBB\u8EA2\uEDBA" + //  6985 -  6989
-                "\u0000\uFBD2\u8EA2\uEEF5\u0000\u0000\u8EA2\uF0A6\u8EA2\uF0A7" + //  6990 -  6994
-                "\u0000\uFCDC\u8EA2\uF1D3\u8EA2\uF1ED\u0000\uFDC2\u0000\u0000" + //  6995 -  6999
-                "\u8EA2\uC1D5\u8EA2\uDCC2\u8EA2\uE1BC\u8EA2\uE8E2\u8EA2\uC8F5" + //  7000 -  7004
-                "\u0000\u0000\u8EA2\uE1BD\u8EA2\uC8F4\u0000\u0000\u0000\uE7EE" + //  7005 -  7009
-                "\u8EA2\uD6BB\u0000\u0000\u0000\u0000\u8EA2\uDCBC\u8EA2\uDCBD" + //  7010 -  7014
-                "\u8EA2\uDCBB\u8EA2\uE1B7\u8EA2\uE1B6\u0000\uF6B3\u8EA2\uE5AB" + //  7015 -  7019
-                "\u8EA2\uE1B8\u8EA2\uE5AA\u0000\u0000\u0000\u0000\u8EA2\uE8E0" + //  7020 -  7024
-                "\u0000\uF9DD\u0000\uF9DF\u8EA2\uE8DF\u0000\u0000\u0000\u0000" + //  7025 -  7029
-                "\u0000\uF9DE\u0000\u0000\u8EA2\uEBBF\u8EA2\uEBC1\u8EA2\uEBC0" + //  7030 -  7034
-                "\u8EA2\uEDB8\u0000\uFBD1\u0000\u0000\u0000\uFCDB\u8EA2\uF0F6" + //  7035 -  7039
-                "\u8EA2\uF1D2\u0000\u0000\u0000\u0000\u8EA2\uF2C1\u0000\uDEA7" + //  7040 -  7044
-                "\u0000\u0000\u8EA2\uCFCD\u0000\u0000\u0000\uF0AB\u0000\u0000" + //  7045 -  7049
-                "\u0000\u0000\u0000\u0000\u8EA2\uDCBF\u8EA2\uDCBE\u0000\u0000" + //  7050 -  7054
-                "\u8EA2\uE1B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9E0" + //  7055 -  7059
-                "\u0000\uFADC\u8EA2\uEEF4\u8EA2\uF2B9\u0000\u0000\u0000\u0000" + //  7060 -  7064
-                "\u0000\u0000\u0000\uDEA8\u0000\uEBFB\u0000\u0000\u0000\uF0AC" + //  7065 -  7069
-                "\u0000\u0000\u8EAD\uA2B4\u8EAD\uA2B5\u8EAD\uA2B6\u8EAD\uA2B7" + //  7070 -  7074
-                "\u8EAD\uA2B8\u8EAD\uA2B9\u8EAD\uA2BA\u8EAD\uA2BB\u8EAD\uA2BC" + //  7075 -  7079
-                "\u8EAD\uA2BD\u8EAD\uA2BE\u8EAD\uA2BF\u8EAD\uA2C0\u8EAD\uA2C1" + //  7080 -  7084
-                "\u8EAD\uA2C2\u8EAD\uA2C3\u8EAD\uA2C4\u8EAD\uA2C5\u8EAD\uA2C6" + //  7085 -  7089
-                "\u8EAD\uA2C7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7090 -  7094
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EAD\uA1A1\u8EAD\uA1A2" + //  7095 -  7099
-                "\u8EAD\uA1A7\u8EAD\uA1A8\u0000\u0000\u0000\u0000\u8EAD\uA2C8" + //  7100 -  7104
-                "\u8EAD\uA2C9\u8EAD\uA2CA\u8EAD\uA2CB\u8EAD\uA2CC\u8EAD\uA2CD" + //  7105 -  7109
-                "\u8EAD\uA2CE\u8EAD\uA2CF\u8EAD\uA2D0\u8EAD\uA2D1\u8EAD\uA2D2" + //  7110 -  7114
-                "\u8EAD\uA2D3\u8EAD\uA2D4\u8EAD\uA2D5\u8EAD\uA2D6\u8EAD\uA2D7" + //  7115 -  7119
-                "\u8EAD\uA2D8\u8EAD\uA2D9\u8EAD\uA2DA\u8EAD\uA2DB\u8EAD\uA2DC" + //  7120 -  7124
-                "\u8EAD\uA2DD\u8EAD\uA2DE\u8EAD\uA2DF\u8EAD\uA2E0\u8EAD\uA2E1" + //  7125 -  7129
-                "\u8EAD\uA2E2\u8EAD\uA2E3\u8EAD\uA2E4\u8EAD\uA2E5\u8EAD\uA2E6" + //  7130 -  7134
-                "\u8EA2\uF0F0\u8EA2\uF0F1\u8EA2\uF0EA\u8EA2\uF0ED\u8EA2\uF0F5" + //  7135 -  7139
-                "\u8EA2\uF0EF\u8EA2\uF0EE\u8EA2\uF0EC\u0000\u0000\u8EA2\uF0F2" + //  7140 -  7144
-                "\u0000\u0000\u8EA2\uF1CC\u0000\u0000\u8EA2\uF1CD\u0000\u0000" + //  7145 -  7149
-                "\u8EA2\uF1CF\u8EA2\uF1CE\u8EA2\uF1D1\u8EA2\uF1D0\u8EA2\uF1EC" + //  7150 -  7154
-                "\u8EA2\uF1EB\u8EA2\uF2A7\u0000\u0000\u8EA2\uF2A8\u0000\u0000" + //  7155 -  7159
-                "\u8EA2\uF2B4\u0000\uFDC5\u0000\uFDC9\u0000\u0000\u8EA2\uF2BD" + //  7160 -  7164
-                "\u0000\uFDCA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7165 -  7169
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7170 -  7174
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7175 -  7179
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7180 -  7184
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7185 -  7189
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7190 -  7194
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7195 -  7199
-                "\u0000\u0000\u0000\uA2A1\u0000\u0000\u0000\u0000\u0000\u0000" + //  7200 -  7204
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7205 -  7209
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7210 -  7214
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7215 -  7219
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7220 -  7224
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7225 -  7229
-                "\u0000\uCBD0\u0000\uE2CB\u0000\u0000\u0000\u0000\u0000\uE7A8" + //  7230 -  7234
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBBE\u0000\u0000" + //  7235 -  7239
-                "\u0000\u0000\u0000\uF2D6\u0000\u0000\u0000\uF2D5\u0000\u0000" + //  7240 -  7244
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9B0\u0000\uFAA9" + //  7245 -  7249
-                "\u0000\uFBB3\u0000\uCBD1\u0000\uD8C9\u0000\uE7A9\u0000\u0000" + //  7250 -  7254
-                "\u8EA2\uE7C7\u0000\uA8E3\u0000\u0000\u0000\u0000\u0000\u0000" + //  7255 -  7259
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7260 -  7264
-                "\u0000\u0000\u8EA2\uA5A6\u8EA2\uE8CB\u8EA2\uE8C6\u8EA2\uE8D9" + //  7265 -  7269
-                "\u0000\u0000\u8EA2\uE8C8\u8EA2\uE8D6\u8EA2\uE8CD\u8EA2\uE8DD" + //  7270 -  7274
-                "\u8EA2\uE8C9\u0000\uF9D8\u8EA2\uE8C7\u8EA2\uE8CE\u8EA2\uE8CF" + //  7275 -  7279
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uEBAD\u0000\u0000" + //  7280 -  7284
-                "\u8EA2\uEBAB\u0000\u0000\u8EA2\uEBB0\u0000\u0000\u8EA2\uEBBC" + //  7285 -  7289
-                "\u8EA2\uEBB3\u8EA2\uEBAC\u8EA2\uEBA8\u8EA2\uEBB5\u8EA2\uEBAE" + //  7290 -  7294
-                "\u8EA2\uEBB1\u8EA2\uEBAA\u8EA2\uEBB8\u8EA2\uEBA7\u8EA2\uEBAF" + //  7295 -  7299
-                "\u8EA2\uEBB4\u8EA2\uEBB6\u8EA2\uEBB9\u8EA2\uEBA9\u0000\u0000" + //  7300 -  7304
-                "\u8EA2\uEBBD\u8EA2\uEBBE\u8EA2\uEBB7\u8EA2\uEBBB\u8EA2\uEBB2" + //  7305 -  7309
-                "\u0000\u0000\u8EA2\uEDAF\u8EA2\uEDB2\u0000\u0000\u0000\uFBCD" + //  7310 -  7314
-                "\u0000\u0000\u8EA2\uEDB1\u8EA2\uEDB6\u8EA2\uEDB4\u0000\uFBCE" + //  7315 -  7319
-                "\u8EA2\uEDAB\u8EA2\uEDA1\u8EA2\uECFE\u0000\uFBD0\u8EA2\uEDAD" + //  7320 -  7324
-                "\u8EA2\uEDAE\u8EA2\uEDAA\u8EA2\uEDA2\u0000\u0000\u8EA2\uEDA7" + //  7325 -  7329
-                "\u8EA2\uEBBA\u8EA2\uE1B2\u8EA2\uE1A5\u8EA2\uE1AE\u8EA2\uE1AF" + //  7330 -  7334
-                "\u0000\u0000\u8EA2\uE1AD\u0000\u0000\u0000\u0000\u0000\u0000" + //  7335 -  7339
-                "\u0000\u0000\u8EA2\uE4FC\u8EA2\uE4FE\u8EA2\uE5A3\u0000\u0000" + //  7340 -  7344
-                "\u0000\u0000\u8EA2\uE4FB\u0000\u0000\u0000\uF8A5\u8EA2\uE5A5" + //  7345 -  7349
-                "\u8EA2\uE4FA\u8EA2\uE5A6\u0000\u0000\u8EA2\uE5A2\u8EA2\uE5A4" + //  7350 -  7354
-                "\u8EA2\uE5A8\u8EA2\uE5A1\u8EA2\uE5A9\u8EA2\uE4FD\u8EA2\uE4F9" + //  7355 -  7359
-                "\u0000\uF8A6\u0000\u0000\u8EA2\uE5A7\u0000\uF8A7\u0000\uF9D9" + //  7360 -  7364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7365 -  7369
-                "\u8EA2\uE1A6\u8EA2\uE8DE\u8EA2\uE8D5\u0000\uF9DB\u8EA2\uE8D1" + //  7370 -  7374
-                "\u0000\uF9DC\u0000\u0000\u0000\u0000\u8EA2\uE8DA\u8EA2\uE8D4" + //  7375 -  7379
-                "\u8EA2\uE8CA\u0000\uF9DA\u8EA2\uE8D7\u8EA2\uE8D2\u8EA2\uE8D3" + //  7380 -  7384
-                "\u0000\u0000\u8EA2\uE8C5\u8EA2\uE8CC\u8EA2\uE8DB\u0000\u0000" + //  7385 -  7389
-                "\u8EA2\uE8D8\u0000\u0000\u8EA2\uE8D0\u0000\u0000\u8EA2\uE8DC" + //  7390 -  7394
-                "\u8EA2\uD6B5\u0000\u0000\u0000\u0000\u0000\uF0AA\u8EA2\uD6BA" + //  7395 -  7399
-                "\u8EA2\uD6B9\u0000\uF0A8\u8EA2\uD6B4\u8EA2\uD6B8\u0000\uF0A9" + //  7400 -  7404
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7405 -  7409
-                "\u0000\u0000\u8EA2\uDCB8\u0000\u0000\u0000\uF3BA\u0000\u0000" + //  7410 -  7414
-                "\u8EA2\uDCB3\u0000\uF3B6\u0000\u0000\u8EA2\uDCB0\u8EA2\uDCB6" + //  7415 -  7419
-                "\u8EA2\uDCB9\u0000\u0000\u0000\uF3BB\u0000\u0000\u8EA2\uDCB5" + //  7420 -  7424
-                "\u8EA2\uDCB2\u8EA2\uDCBA\u8EA2\uDCB1\u0000\u0000\u8EA2\uDCB7" + //  7425 -  7429
-                "\u0000\uF3B7\u0000\u0000\u8EA2\uDCAF\u0000\uF3B8\u0000\u0000" + //  7430 -  7434
-                "\u0000\uF3B9\u8EA2\uDCB4\u0000\u0000\u0000\u0000\u0000\u0000" + //  7435 -  7439
-                "\u8EA2\uE1B5\u8EA2\uE1A8\u8EA2\uE1A9\u8EA2\uE1AC\u8EA2\uE1AA" + //  7440 -  7444
-                "\u0000\u0000\u8EA2\uE1A4\u0000\u0000\u0000\u0000\u8EA2\uE1A7" + //  7445 -  7449
-                "\u8EA2\uE1B1\u8EA2\uE1AB\u0000\u0000\u0000\u0000\u0000\uF6B1" + //  7450 -  7454
-                "\u0000\u0000\u8EA2\uE1B3\u8EA2\uE1B0\u0000\uF6B2\u8EA2\uEAFE" + //  7455 -  7459
-                "\u8EA2\uEEDD\u0000\u0000\u0000\u0000\u8EA2\uEEDA\u0000\u0000" + //  7460 -  7464
-                "\u8EA2\uEED7\u0000\u0000\u8EA2\uEED8\u0000\uFCAA\u8EA2\uEFE8" + //  7465 -  7469
-                "\u8EA2\uEFEA\u8EA2\uEFED\u8EA2\uEFE9\u8EA2\uEFEE\u0000\u0000" + //  7470 -  7474
-                "\u8EA2\uEFE7\u0000\u0000\u8EA2\uEFE5\u0000\u0000\u0000\uFCD7" + //  7475 -  7479
-                "\u8EA2\uEFEB\u0000\uFCD9\u0000\uFCD8\u8EA2\uEFE6\u8EA2\uEFEC" + //  7480 -  7484
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uF0E8" + //  7485 -  7489
-                "\u0000\uFCF8\u8EA2\uF0E9\u0000\u0000\u8EA2\uF0E7\u8EA2\uF0E4" + //  7490 -  7494
-                "\u0000\u0000\u0000\u0000\u8EA2\uF0E6\u8EA2\uF0E5\u8EA2\uF1C9"   //  7495 -  7499
-                ;
-
-            index2a =
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uF1CB" + //  7500 -  7504
-                "\u8EA2\uF1CA\u0000\u0000\u0000\u0000\u8EA2\uF1E9\u0000\u0000" + //  7505 -  7509
-                "\u8EA2\uF1E8\u8EA2\uF1E7\u8EA2\uF1EA\u0000\u0000\u0000\uFDC0" + //  7510 -  7514
-                "\u0000\uFDC1\u8EA2\uF2B8\u8EA2\uF2BC\u0000\u0000\u0000\u0000" + //  7515 -  7519
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uBBAA\u8EA2\uBBA7" + //  7520 -  7524
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7525 -  7529
-                "\u8EA2\uBBA8\u8EA2\uBBAB\u8EA2\uBBAF\u0000\u0000\u8EA2\uB4E6" + //  7530 -  7534
-                "\u8EA2\uBBB1\u8EA2\uC2CD\u0000\u0000\u0000\uDEE8\u8EA2\uBBB2" + //  7535 -  7539
-                "\u8EA2\uBAF8\u8EA2\uBBA4\u0000\u0000\u8EA2\uBBA9\u0000\u0000" + //  7540 -  7544
-                "\u0000\u0000\u0000\uDEE6\u0000\uDEE9\u8EA2\uBBB0\u8EA2\uBBB3" + //  7545 -  7549
-                "\u8EA2\uBAFC\u8EA2\uBAF9\u0000\u0000\u0000\u0000\u8EA2\uBAFB" + //  7550 -  7554
-                "\u0000\u0000\u0000\u0000\u8EA2\uBBA2\u8EA2\uBAFE\u0000\uDEEA" + //  7555 -  7559
-                "\u0000\u0000\u8EA2\uBBAC\u0000\u0000\u0000\u0000\u8EA2\uBBA3" + //  7560 -  7564
-                "\u0000\u0000\u8EA2\uBBA5\u8EA2\uBAF7\u8EA2\uC2C1\u8EA2\uC2BF" + //  7565 -  7569
-                "\u0000\uE3E8\u0000\uE3E6\u8EA2\uC2C9\u8EA2\uC2C0\u8EA2\uC2CA" + //  7570 -  7574
-                "\u8EA2\uC2C6\u8EA2\uC2BE\u8EA2\uC2CC\u8EA2\uC2BD\u8EA2\uC2C4" + //  7575 -  7579
-                "\u0000\uE3E5\u0000\uE3E4\u0000\uE3E3\u8EA2\uC2C2\u0000\uF8A4" + //  7580 -  7584
-                "\u8EA2\uE4F1\u0000\u0000\u8EA2\uE4EF\u8EA2\uE4F6\u0000\u0000" + //  7585 -  7589
-                "\u8EA2\uE4EE\u8EA2\uE4ED\u0000\uF8A3\u0000\uF8A1\u0000\uF7FE" + //  7590 -  7594
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7595 -  7599
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uE4F4\u8EA2\uE8BC" + //  7600 -  7604
-                "\u8EA2\uE8C2\u0000\uF9D6\u8EA2\uE8BD\u0000\u0000\u8EA2\uE8C0" + //  7605 -  7609
-                "\u8EA2\uE8C4\u0000\uF9D7\u8EA2\uE8BF\u0000\u0000\u8EA2\uE8B7" + //  7610 -  7614
-                "\u0000\u0000\u8EA2\uE8B6\u8EA2\uE8C3\u8EA2\uE8BA\u0000\u0000" + //  7615 -  7619
-                "\u8EA2\uE8B8\u8EA2\uE8C1\u8EA2\uE8B9\u0000\uF9D5\u0000\uF9D4" + //  7620 -  7624
-                "\u0000\u0000\u8EA2\uE8B4\u8EA2\uE8B5\u8EA2\uE8BE\u0000\u0000" + //  7625 -  7629
-                "\u0000\u0000\u0000\u0000\u8EA2\uE8BB\u0000\u0000\u0000\u0000" + //  7630 -  7634
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uEAFA" + //  7635 -  7639
-                "\u8EA2\uEAFD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7640 -  7644
-                "\u0000\uF8A2\u0000\u0000\u0000\u0000\u8EA2\uD0A6\u8EA2\uD0A4" + //  7645 -  7649
-                "\u8EA2\uD0A2\u0000\u0000\u8EA2\uD0A8\u0000\u0000\u8EA2\uD0A7" + //  7650 -  7654
-                "\u0000\uECCD\u0000\uECC8\u0000\u0000\u0000\uECCA\u0000\uECCC" + //  7655 -  7659
-                "\u0000\u0000\u0000\u0000\u8EA2\uD0A9\u8EA2\uD6E1\u0000\u0000" + //  7660 -  7664
-                "\u0000\u0000\u8EA2\uD6E0\u8EA2\uD6DF\u0000\u0000\u8EA2\uD6E2" + //  7665 -  7669
-                "\u8EA2\uD6DB\u0000\u0000\u8EA2\uD6DC\u8EA2\uD6E4\u8EA2\uD6DD" + //  7670 -  7674
-                "\u0000\u0000\u0000\uF0CE\u8EA2\uD6E6\u0000\u0000\u8EA2\uD6E5" + //  7675 -  7679
-                "\u8EA2\uD6DE\u0000\u0000\u8EA2\uDCDD\u0000\uF3D1\u8EA2\uDCDB" + //  7680 -  7684
-                "\u8EA2\uDCE0\u8EA2\uDCDF\u8EA2\uD6E3\u0000\u0000\u0000\uF3D0" + //  7685 -  7689
-                "\u0000\u0000\u8EA2\uDCDE\u8EA2\uDCDA\u8EA2\uDCE2\u8EA2\uDCE1" + //  7690 -  7694
-                "\u0000\uF3CF\u0000\u0000\u8EA2\uDCDC\u0000\u0000\u0000\uF0CF" + //  7695 -  7699
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF6C0\u0000\u0000" + //  7700 -  7704
-                "\u0000\u0000\u0000\u0000\u8EA2\uE1CD\u8EA2\uE5C6\u8EA2\uE5C7" + //  7705 -  7709
-                "\u8EA2\uE5C8\u8EA2\uDCA1\u0000\u0000\u8EA2\uDCA7\u0000\u0000" + //  7710 -  7714
-                "\u0000\u0000\u8EA2\uDCA2\u8EA2\uE0FE\u8EA2\uDCA3\u8EA2\uDCAE" + //  7715 -  7719
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7720 -  7724
-                "\u0000\u0000\u0000\u0000\u8EA2\uDCAA\u0000\uF3B5\u8EA2\uDCA9" + //  7725 -  7729
-                "\u8EA2\uDCA8\u0000\u0000\u8EA2\uDCAC\u0000\u0000\u0000\u0000" + //  7730 -  7734
-                "\u0000\u0000\u0000\u0000\u8EA2\uE0F6\u8EA2\uE0F9\u0000\u0000" + //  7735 -  7739
-                "\u0000\u0000\u8EA2\uE0F8\u0000\u0000\u8EA2\uE1A2\u8EA2\uE0FB" + //  7740 -  7744
-                "\u8EA2\uE1A1\u0000\u0000\u8EA2\uE0FD\u8EA2\uE0FC\u8EA2\uE0FA" + //  7745 -  7749
-                "\u0000\u0000\u8EA2\uE0F7\u0000\u0000\u0000\uF6AF\u0000\uF6AE" + //  7750 -  7754
-                "\u0000\u0000\u0000\uF6B0\u0000\uF6AD\u8EA2\uE1A3\u0000\u0000" + //  7755 -  7759
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uE4F2" + //  7760 -  7764
-                "\u8EA2\uE4F5\u0000\u0000\u8EA2\uE4F3\u8EA2\uE4F7\u0000\u0000" + //  7765 -  7769
-                "\u0000\u0000\u0000\u0000\u8EA2\uE4F8\u0000\u0000\u8EA2\uE4F0" + //  7770 -  7774
-                "\u8EA2\uE4E3\u0000\uF7F8\u8EA2\uE8AE\u0000\u0000\u0000\u0000" + //  7775 -  7779
-                "\u0000\u0000\u8EA2\uEAF4\u8EA2\uEAF2\u0000\u0000\u0000\u0000" + //  7780 -  7784
-                "\u8EA2\uEAF3\u0000\u0000\u0000\u0000\u8EA2\uECEE\u0000\u0000" + //  7785 -  7789
-                "\u0000\uFBC8\u8EA2\uEED1\u0000\uFCD6\u0000\uFCA8\u0000\uFCD4" + //  7790 -  7794
-                "\u0000\uFCD5\u8EA2\uF0E2\u0000\uFDAF\u0000\u0000\u0000\uD8ED" + //  7795 -  7799
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uE4E4\u0000\u0000" + //  7800 -  7804
-                "\u0000\u0000\u8EA2\uB3CC\u0000\u0000\u0000\uE7EC\u0000\u0000" + //  7805 -  7809
-                "\u8EA2\uCFC3\u0000\u0000\u0000\u0000\u0000\uEBF5\u8EA2\uCFC4" + //  7810 -  7814
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uD5FD\u8EA2\uD5FC" + //  7815 -  7819
-                "\u0000\uF3B3\u0000\uF0A1\u0000\uF0A2\u0000\u0000\u8EA2\uD6A2" + //  7820 -  7824
-                "\u8EA2\uD6A1\u8EA2\uD5FE\u0000\u0000\u0000\u0000\u8EA2\uDBFA" + //  7825 -  7829
-                "\u8EA2\uDBFD\u0000\u0000\u8EA2\uDBFC\u8EA2\uDBFB\u0000\uF3B2" + //  7830 -  7834
-                "\u8EA2\uE0F4\u8EA2\uE0F2\u8EA2\uE0F1\u0000\u0000\u0000\uA1A1" + //  7835 -  7839
-                "\u0000\uA1A3\u0000\uA1A4\u0000\uA1F1\u0000\u0000\u8EAD\uA1AB" + //  7840 -  7844
-                "\u8EAD\uA1AC\u8EAD\uA1AD\u0000\uA1D2\u0000\uA1D3\u0000\uA1CE" + //  7845 -  7849
-                "\u0000\uA1CF\u0000\uA1D6\u0000\uA1D7\u0000\uA1DA\u0000\uA1DB" + //  7850 -  7854
-                "\u0000\uA1CA\u0000\uA1CB\u0000\uA2E5\u8EAD\uA1B5\u0000\uA1C6" + //  7855 -  7859
-                "\u0000\uA1C7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7860 -  7864
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1E8\u0000\uA1E9" + //  7865 -  7869
-                "\u0000\u0000\u0000\u0000\u0000\uA4B5\u0000\uA4B6\u0000\uA4B7" + //  7870 -  7874
-                "\u0000\uA4B8\u0000\uA4B9\u0000\uA4BA\u0000\uA4BB\u0000\uA4BC" + //  7875 -  7879
-                "\u0000\uA4BD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7880 -  7884
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7885 -  7889
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7890 -  7894
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7895 -  7899
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uAFEE\u0000\uD6AE" + //  7900 -  7904
-                "\u8EA2\uAFEF\u0000\u0000\u8EA2\uAFE3\u0000\uD6A3\u0000\uD6AF" + //  7905 -  7909
-                "\u0000\u0000\u8EA2\uAFDC\u0000\u0000\u8EA2\uAFE5\u8EA2\uAFED" + //  7910 -  7914
-                "\u0000\u0000\u8EA2\uAFDB\u8EA2\uAFF6\u0000\uD5F7\u0000\u0000" + //  7915 -  7919
-                "\u0000\u0000\u0000\u0000\u8EA2\uAFF5\u8EA2\uAFF0\u0000\u0000" + //  7920 -  7924
-                "\u8EA2\uAFF1\u0000\uD6A1\u0000\uD6AC\u8EA2\uAFE7\u0000\u0000" + //  7925 -  7929
-                "\u8EA2\uAFE8\u8EA2\uAFF2\u8EA2\uAFE9\u0000\u0000\u8EA2\uAFE4" + //  7930 -  7934
-                "\u8EA2\uAFDE\u8EA2\uAFDF\u8EA2\uAFEC\u8EA2\uAFE6\u0000\u0000" + //  7935 -  7939
-                "\u0000\u0000\u0000\uD5F8\u0000\uD5FC\u8EA2\uAFF4\u8EA2\uAFE0" + //  7940 -  7944
-                "\u0000\uD6AA\u0000\uD6A6\u0000\u0000\u0000\u0000\u8EA2\uACFC" + //  7945 -  7949
-                "\u0000\uD3AA\u0000\uD3AB\u8EA2\uACFE\u0000\u0000\u8EA2\uACF8" + //  7950 -  7954
-                "\u8EA2\uACFB\u8EA2\uADA6\u8EA2\uADA4\u0000\u0000\u0000\uD3AC" + //  7955 -  7959
-                "\u8EA2\uADAA\u0000\uD3AF\u8EA2\uADA7\u8EA2\uACFD\u8EA2\uACFA" + //  7960 -  7964
-                "\u0000\u0000\u0000\u0000\u8EA2\uBFAE\u8EA2\uADA5\u0000\uD3A7" + //  7965 -  7969
-                "\u8EA2\uADA8\u8EA2\uACF7\u8EA2\uADA2\u0000\uD3A9\u0000\uD3AE" + //  7970 -  7974
-                "\u8EA2\uADA3\u0000\uD3B2\u0000\uD3B0\u0000\u0000\u8EA2\uACF9" + //  7975 -  7979
-                "\u0000\uD3AD\u0000\u0000\u8EA2\uADA1\u0000\uD3B1\u0000\uD3A8" + //  7980 -  7984
-                "\u8EA2\uADA9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  7985 -  7989
-                "\u0000\u0000\u0000\u0000\u0000\uD7DE\u0000\u0000\u0000\uD7E7" + //  7990 -  7994
-                "\u0000\uD7DC\u0000\uD7DA\u8EA2\uB2AE\u0000\uD7E2\u0000\uD7DF" + //  7995 -  7999
-                "\u8EA2\uB2B0\u0000\u0000\u0000\u0000\u0000\uD7E1\u8EA2\uB2AF" + //  8000 -  8004
-                "\u8EA2\uB2AD\u8EA2\uB2B2\u0000\uD7E6\u0000\uD7E4\u8EA2\uBFAD" + //  8005 -  8009
-                "\u0000\u0000\u8EA2\uAAE8\u0000\u0000\u8EA2\uAAE9\u0000\u0000" + //  8010 -  8014
-                "\u0000\uD1CA\u8EA2\uAFD0\u0000\u0000\u0000\uD5E6\u0000\uD5E7" + //  8015 -  8019
-                "\u8EA2\uAFCF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8020 -  8024
-                "\u0000\uDAF7\u0000\u0000\u0000\uDAF3\u0000\u0000\u8EA2\uB5E9" + //  8025 -  8029
-                "\u0000\uDAFA\u0000\uDAF9\u0000\uDAF2\u0000\uDAF5\u0000\uDAF8" + //  8030 -  8034
-                "\u0000\uDAF4\u0000\u0000\u0000\u0000\u8EA2\uBCBB\u0000\uDAF1" + //  8035 -  8039
-                "\u0000\uDFD4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDFD6" + //  8040 -  8044
-                "\u0000\uDFD7\u8EA2\uBCBA\u8EA2\uBCBD\u0000\uDFD5\u8EA2\uBCB8" + //  8045 -  8049
-                "\u8EA2\uBCBC\u0000\u0000\u8EA2\uBCB9\u0000\u0000\u0000\uE4B9" + //  8050 -  8054
-                "\u0000\u0000\u0000\u0000\u8EA2\uC3C2\u0000\u0000\u0000\u0000" + //  8055 -  8059
-                "\u0000\uE8FD\u8EA2\uCADB\u0000\uF0EC\u0000\uEDAE\u8EA2\uD0E4" + //  8060 -  8064
-                "\u0000\uEDAF\u0000\uEDB0\u8EA2\uD0E6\u8EA2\uD0E5\u8EA2\uD0E7" + //  8065 -  8069
-                "\u8EA2\uD7BC\u0000\u0000\u0000\u0000\u8EA2\uD7BB\u0000\uFBC6" + //  8070 -  8074
-                "\u8EA2\uECEB\u8EA2\uECEA\u0000\uFBC5\u8EA2\uECE9\u0000\uFBC4" + //  8075 -  8079
-                "\u8EA2\uECE8\u0000\u0000\u8EA2\uEECC\u8EA2\uEECE\u8EA2\uEECD" + //  8080 -  8084
-                "\u0000\u0000\u8EA2\uEECA\u0000\uFCA7\u8EA2\uEEC7\u8EA2\uEECB" + //  8085 -  8089
-                "\u8EA2\uEED0\u0000\u0000\u8EA2\uEECF\u8EA2\uEEC8\u8EA2\uEEC9" + //  8090 -  8094
-                "\u0000\uFCA6\u8EA2\uEFE0\u0000\uFCD3\u0000\u0000\u8EA2\uEFE1" + //  8095 -  8099
-                "\u0000\uFCD1\u0000\uFCD2\u0000\u0000\u0000\u0000\u8EA2\uF0E1" + //  8100 -  8104
-                "\u0000\uFCF5\u8EA2\uF1E5\u0000\u0000\u0000\uFDB7\u0000\u0000" + //  8105 -  8109
-                "\u8EA2\uF2A3\u0000\uFDB8\u8EA2\uF2A4\u8EA2\uF2A5\u8EA2\uF2B3" + //  8110 -  8114
-                "\u8EA2\uF2B2\u0000\uFDC7\u8EA2\uF2BB\u0000\u0000\u0000\u0000" + //  8115 -  8119
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8120 -  8124
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8125 -  8129
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8130 -  8134
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA2F5\u0000\uA2F6" + //  8135 -  8139
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8140 -  8144
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8145 -  8149
-                "\u0000\u0000\u0000\u0000\u0000\uA2F0\u0000\uA2F1\u0000\uA2F2" + //  8150 -  8154
-                "\u0000\u0000\u0000\u0000\u0000\uA2F4\u0000\u0000\u0000\u0000" + //  8155 -  8159
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8160 -  8164
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8165 -  8169
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8170 -  8174
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8175 -  8179
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8180 -  8184
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8185 -  8189
-                "\u0000\uA2E6\u0000\uA2E7\u8EAD\uA4C0\u0000\uA2A4\u8EAD\uA4C1" + //  8190 -  8194
-                "\u0000\uA2E4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8195 -  8199
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8200 -  8204
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8205 -  8209
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8210 -  8214
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8215 -  8219
-                "\u0000\u0000\u0000\u0000\u8EAD\uA1BE\u0000\u0000\u8EAD\uA1BF" + //  8220 -  8224
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8225 -  8229
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8230 -  8234
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8235 -  8239
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EAD\uA4BD\u0000\u0000" + //  8240 -  8244
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8245 -  8249
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8250 -  8254
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8255 -  8259
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8260 -  8264
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EAD\uA1C2\u0000\u0000" + //  8265 -  8269
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8270 -  8274
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8275 -  8279
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8280 -  8284
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8285 -  8289
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8290 -  8294
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8295 -  8299
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8300 -  8304
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8305 -  8309
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8310 -  8314
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EAD\uA4C4\u0000\u0000" + //  8315 -  8319
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8320 -  8324
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8325 -  8329
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uBDB1\u0000\uE0C6" + //  8330 -  8334
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC4C7\u8EA2\uC4C6" + //  8335 -  8339
-                "\u8EA2\uC4AC\u0000\uE4E3\u0000\u0000\u8EA2\uC4C5\u8EA2\uC4AF" + //  8340 -  8344
-                "\u8EA2\uC4B0\u0000\u0000\u0000\uE4ED\u8EA2\uC4CE\u0000\uE4E8" + //  8345 -  8349
-                "\u8EA2\uC4C4\u0000\u0000\u8EA2\uC4A9\u0000\uE4EE\u0000\uE4E4" + //  8350 -  8354
-                "\u8EA2\uC4B8\u8EA2\uC4AE\u8EA2\uC4B1\u8EA2\uC4C9\u0000\uE4DE" + //  8355 -  8359
-                "\u8EA2\uC4D0\u8EA2\uC4C8\u0000\uE4E7\u8EA2\uC4BD\u0000\uE4F2" + //  8360 -  8364
-                "\u0000\u0000\u0000\u0000\u0000\uE4F1\u0000\uE4EB\u0000\u0000" + //  8365 -  8369
-                "\u0000\u0000\u8EA2\uC4CF\u0000\uE4DF\u8EA2\uC4BB\u8EA2\uC4B2" + //  8370 -  8374
-                "\u8EA2\uC4BF\u8EA2\uC4CB\u0000\uE4F3\u0000\u0000\u0000\uE4E1" + //  8375 -  8379
-                "\u8EA2\uC4BA\u8EAD\uA4CB\u8EA2\uC4B3\u0000\uE4EA\u0000\u0000" + //  8380 -  8384
-                "\u0000\uE4E9\u8EA2\uC4B6\u8EA2\uC4C0\u8EA2\uC4CA\u8EA2\uCFB7" + //  8385 -  8389
-                "\u0000\u0000\u8EA2\uCFB6\u0000\uEBEE\u0000\u0000\u0000\uEBEF" + //  8390 -  8394
-                "\u0000\u0000\u8EA2\uCFB8\u8EA2\uD5E8\u0000\uEBF1\u0000\uEFF2" + //  8395 -  8399
-                "\u0000\u0000\u0000\uEBF0\u0000\u0000\u0000\u0000\u0000\u0000" + //  8400 -  8404
-                "\u0000\uF3A7\u8EA2\uD5EA\u0000\uEFF4\u0000\uEFF3\u8EA2\uD5EB" + //  8405 -  8409
-                "\u8EA2\uD5EE\u8EA2\uD5EC\u8EA2\uD5ED\u0000\uEFF5\u0000\u0000" + //  8410 -  8414
-                "\u0000\uF3AC\u0000\uF3AA\u0000\u0000\u0000\u0000\u0000\uF3A9" + //  8415 -  8419
-                "\u8EA2\uDBE9\u0000\u0000\u0000\uF3AB\u0000\u0000\u0000\u0000" + //  8420 -  8424
-                "\u8EA2\uDBE8\u8EA2\uE0D7\u0000\u0000\u8EA2\uDBEA\u0000\uF3A8" + //  8425 -  8429
-                "\u8EA2\uDBEB\u8EA2\uE0DA\u8EA2\uE0D8\u8EA2\uE0D9\u8EA2\uE0DE" + //  8430 -  8434
-                "\u0000\uF7F5\u8EA2\uE0DD\u8EA2\uE0E0\u8EA2\uE0DF\u8EA2\uE0DC" + //  8435 -  8439
-                "\u8EA2\uE0DB\u0000\u0000\u0000\uF6AA\u0000\u0000\u0000\u0000" + //  8440 -  8444
-                "\u0000\u0000\u0000\u0000\u8EA2\uE4D8\u0000\u0000\u8EA2\uE4D7" + //  8445 -  8449
-                "\u0000\uF7F4\u0000\uF7F2\u0000\uF7F3\u8EA2\uECE3\u8EA2\uEAE0" + //  8450 -  8454
-                "\u8EA2\uEAE1\u0000\u0000\u0000\uFAD1\u0000\u0000\u8EA2\uECE2" + //  8455 -  8459
-                "\u0000\u0000\u0000\u0000\u8EA2\uECE1\u0000\u0000\u8EA2\uEEC4" + //  8460 -  8464
-                "\u8EA2\uF1FE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8465 -  8469
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8470 -  8474
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8475 -  8479
-                "\u0000\uD3F9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3FA" + //  8480 -  8484
-                "\u0000\u0000\u0000\u0000\u0000\uD8EA\u8EA2\uB3CB\u0000\u0000" + //  8485 -  8489
-                "\u8EA2\uBAB3\u0000\u0000\u0000\uE2FD\u0000\u0000\u0000\uE3A2" + //  8490 -  8494
-                "\u0000\uE2FE\u8EA2\uC1D3\u0000\u0000\u0000\uE3A4\u0000\u0000" + //  8495 -  8499
-                "\u0000\uE3A1\u0000\u0000\u0000\u0000\u0000\uE3A3\u0000\u0000" + //  8500 -  8504
-                "\u0000\uE7E6\u0000\u0000\u8EA2\uC8E8\u0000\u0000\u0000\u0000" + //  8505 -  8509
-                "\u8EA2\uC8E9\u8EA2\uD5E9\u0000\u0000\u0000\uE7E5\u0000\uE7E7" + //  8510 -  8514
-                "\u0000\uE7E8\u0000\u0000\u0000\uA2D1\u0000\u0000\u0000\uA2D2" + //  8515 -  8519
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8520 -  8524
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8525 -  8529
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8530 -  8534
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8535 -  8539
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8540 -  8544
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8545 -  8549
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8550 -  8554
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EAD\uA1CE" + //  8555 -  8559
-                "\u0000\u0000\u0000\u0000\u8EAD\uA1CD\u0000\u0000\u8EAD\uA1CC" + //  8560 -  8564
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8565 -  8569
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8570 -  8574
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8575 -  8579
-                "\u0000\u0000\u8EA2\uBAE9\u8EA2\uC2AE\u0000\uE3DB\u0000\uE3DE" + //  8580 -  8584
-                "\u0000\uE3D9\u8EA2\uC2AD\u8EA2\uC2B1\u8EA2\uC2AC\u0000\u0000" + //  8585 -  8589
-                "\u0000\uE3D3\u0000\uE3DD\u8EA2\uC2A9\u0000\uE3D7\u8EA2\uC2B0" + //  8590 -  8594
-                "\u0000\u0000\u0000\uE3D5\u0000\uE3D4\u8EA2\uC2B3\u0000\uE3D6" + //  8595 -  8599
-                "\u8EA2\uC2B5\u0000\u0000\u8EA2\uC2B2\u0000\uE3D2\u0000\u0000" + //  8600 -  8604
-                "\u0000\u0000\u0000\u0000\u0000\uE3DC\u8EA2\uC2B7\u8EA2\uC2AB" + //  8605 -  8609
-                "\u8EA2\uC2B4\u0000\u0000\u0000\u0000\u8EA2\uC2AA\u0000\u0000" + //  8610 -  8614
-                "\u0000\u0000\u0000\uE3D8\u0000\u0000\u0000\uE3DA\u0000\u0000" + //  8615 -  8619
-                "\u8EA2\uC2AF\u0000\u0000\u8EA2\uC2B8\u0000\u0000\u0000\u0000" + //  8620 -  8624
-                "\u8EA2\uC9C4\u0000\uE8B8\u8EA2\uC9CA\u0000\u0000\u0000\u0000" + //  8625 -  8629
-                "\u0000\uE8BD\u8EA2\uC9C6\u8EA2\uC9CD\u8EA2\uC9BE\u0000\uE8BF" + //  8630 -  8634
-                "\u0000\uE8B9\u8EA2\uC9C3\u8EA2\uEFDF\u0000\uD3F7\u0000\uDEA1" + //  8635 -  8639
-                "\u0000\uDEA2\u8EA2\uBAB2\u0000\uE2FA\u0000\uE2FB\u8EA2\uC1D1" + //  8640 -  8644
-                "\u0000\uE2FC\u0000\u0000\u0000\uE7E2\u0000\u0000\u0000\uE7E4" + //  8645 -  8649
-                "\u8EA2\uC8E5\u8EA2\uC8E6\u8EA2\uC8E4\u0000\uE7DF\u0000\uE7E0" + //  8650 -  8654
-                "\u0000\uE7E3\u0000\uE7E1\u0000\u0000\u0000\u0000\u8EA2\uCFB3" + //  8655 -  8659
-                "\u0000\uEBEA\u0000\uEBEB\u0000\u0000\u0000\u0000\u8EA2\uD5E5" + //  8660 -  8664
-                "\u0000\uEFF0\u8EA2\uD5E0\u8EA2\uD5DF\u0000\u0000\u8EA2\uD5E4" + //  8665 -  8669
-                "\u0000\uEFEE\u0000\u0000\u0000\u0000\u0000\uF3A6\u0000\u0000" + //  8670 -  8674
-                "\u8EA2\uD5E1\u8EA2\uD5E6\u8EA2\uD5E3\u8EA2\uD5E2\u0000\u0000" + //  8675 -  8679
-                "\u0000\uEFEF\u0000\u0000\u0000\uF3A4\u0000\u0000\u8EA2\uDBE6" + //  8680 -  8684
-                "\u0000\uF2FE\u0000\u0000\u8EA2\uDBE7\u0000\u0000\u0000\u0000" + //  8685 -  8689
-                "\u8EA2\uDBE5\u0000\u0000\u0000\uF3A3\u0000\uF3A1\u0000\uF3A5" + //  8690 -  8694
-                "\u0000\u0000\u0000\uF3A2\u0000\u0000\u0000\u0000\u0000\u0000" + //  8695 -  8699
-                "\u0000\u0000\u8EA2\uA1A1\u0000\uC4A5\u0000\u0000\u0000\uC4BC" + //  8700 -  8704
-                "\u0000\u0000\u8EA2\uA1A8\u0000\uC4BD\u0000\u0000\u0000\u0000" + //  8705 -  8709
-                "\u0000\uC4E6\u0000\u0000\u0000\uC5E5\u0000\uC5E7\u0000\uC5E6" + //  8710 -  8714
-                "\u0000\u0000\u0000\u0000\u0000\uC7A4\u0000\uC7A5\u0000\u0000" + //  8715 -  8719
-                "\u0000\u0000\u0000\uCBE5\u0000\u0000\u0000\uD3FD\u0000\uC4A2" + //  8720 -  8724
-                "\u0000\u0000\u0000\u0000\u8EA2\uA1A2\u0000\uC4A6\u0000\uC4BF" + //  8725 -  8729
-                "\u0000\uC4BE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8730 -  8734
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8735 -  8739
-                "\u0000\uC7A6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8740 -  8744
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8745 -  8749
-                "\u0000\uCBE6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8750 -  8754
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  8755 -  8759
-                "\u0000\u0000\u0000\uD8F1\u8EA2\uB3CE\u8EA2\uCFAB\u8EA2\uCFAF" + //  8760 -  8764
-                "\u8EA2\uCFAC\u8EA2\uCFAA\u8EA2\uCFAE\u0000\uEBE8\u0000\u0000" + //  8765 -  8769
-                "\u0000\u0000\u8EA2\uD5DC\u0000\u0000\u8EA2\uD5DA\u0000\uEFEC" + //  8770 -  8774
-                "\u0000\u0000\u0000\uEFEB\u8EA2\uD5DB\u0000\uEFED\u0000\u0000" + //  8775 -  8779
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uDBE2\u0000\u0000" + //  8780 -  8784
-                "\u0000\u0000\u8EA2\uDBE1\u0000\uF2FD\u8EA2\uDBE0\u8EA2\uE0C9" + //  8785 -  8789
-                "\u0000\u0000\u8EA2\uE0CB\u8EA2\uE0CD\u8EA2\uE0CC\u0000\u0000" + //  8790 -  8794
-                "\u0000\uF6A6\u8EA2\uE0CA\u8EA2\uE4CB\u0000\uF7E8\u8EA2\uE4C9" + //  8795 -  8799
-                "\u8EA2\uE4CC\u0000\uF7E9\u0000\u0000\u8EA2\uE4C7\u0000\u0000" + //  8800 -  8804
-                "\u8EA2\uE4CA\u8EA2\uE4C8\u8EA2\uE4C5\u0000\uF7EA\u8EA2\uE4C6" + //  8805 -  8809
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uE7EC" + //  8810 -  8814
-                "\u0000\u0000\u0000\u0000\u8EA2\uE7EE\u8EA2\uE7ED\u0000\u0000" + //  8815 -  8819
-                "\u8EA2\uEAD8\u0000\u0000\u8EA2\uEAD9\u0000\u0000\u0000\u0000" + //  8820 -  8824
-                "\u0000\u0000\u8EA2\uECDE\u0000\uEBE6\u0000\u0000\u8EA2\uD5D8" + //  8825 -  8829
-                "\u0000\u0000\u0000\uEFE6\u8EA2\uD5D6\u0000\uEFE7\u0000\uEFE8" + //  8830 -  8834
-                "\u8EA2\uD5D7\u0000\uEFE9\u0000\u0000\u8EA2\uDBDD\u0000\u0000" + //  8835 -  8839
-                "\u0000\uF2F7\u0000\uF2F4\u0000\uF2F9\u8EA2\uDBDF\u0000\uF2F5" + //  8840 -  8844
-                "\u8EA2\uDBDE\u0000\uF2F8\u0000\u0000\u0000\u0000\u0000\uF2F6" + //  8845 -  8849
-                "\u0000\u0000\u8EA2\uE0C6\u8EA2\uE0C8\u0000\u0000\u0000\u0000" + //  8850 -  8854
-                "\u0000\uF6A4\u8EA2\uE0C7\u0000\uF6A5\u8EA2\uE0C5\u8EA2\uE0C4" + //  8855 -  8859
-                "\u0000\u0000\u8EA2\uE4C3\u8EA2\uE4C2\u0000\uF7E7\u8EA2\uE4C4" + //  8860 -  8864
-                "\u8EA2\uE7EB\u0000\uF9C7\u8EA2\uE7EA\u8EA2\uE7E7\u0000\uF9C6" + //  8865 -  8869
-                "\u8EA2\uE7E8\u8EA2\uE7E9\u0000\u0000\u8EA2\uEAD6\u8EA2\uEAD7" + //  8870 -  8874
-                "\u0000\uFAD0\u0000\u0000\u0000\uFBBF\u0000\u0000\u0000\u0000" + //  8875 -  8879
-                "\u8EA2\uECDC\u0000\u0000\u0000\u0000\u0000\uFBBD\u0000\uFBBE" + //  8880 -  8884
-                "\u8EA2\uECDD\u0000\u0000\u0000\u0000\u0000\uFBFE\u0000\uFCA1" + //  8885 -  8889
-                "\u8EA2\uEEC0\u0000\uDDFA\u0000\uE2F2\u8EA2\uC1C9\u8EA2\uC1CB" + //  8890 -  8894
-                "\u0000\uE2F4\u0000\uE2F3\u0000\uE2F5\u0000\uE2F6\u8EA2\uC1CA" + //  8895 -  8899
-                "\u0000\uE7D6\u0000\uE7D7\u0000\uE7D5\u0000\uEBE4\u0000\uE7D4" + //  8900 -  8904
-                "\u8EA2\uC8DB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBE5" + //  8905 -  8909
-                "\u8EA2\uD5D5\u8EA2\uDBDC\u0000\uF2F3\u0000\uF6A3\u8EA2\uE4BC" + //  8910 -  8914
-                "\u8EA2\uE4C0\u0000\uF7E4\u8EA2\uE4BD\u0000\uF7E5\u0000\uF7E3" + //  8915 -  8919
-                "\u8EA2\uE4C1\u0000\uF7E6\u8EA2\uE4BF\u0000\u0000\u8EA2\uE7E6" + //  8920 -  8924
-                "\u0000\uF7E2\u0000\uF9C5\u0000\u0000\u8EA2\uF0DB\u0000\u0000" + //  8925 -  8929
-                "\u0000\u0000\u0000\uCFE4\u0000\uDDFC\u0000\uDDFB\u0000\u0000" + //  8930 -  8934
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2F7\u8EA2\uC1CD" + //  8935 -  8939
-                "\u8EA2\uC1CC\u0000\uE2F8\u0000\u0000\u0000\u0000\u8EA2\uC8DF" + //  8940 -  8944
-                "\u0000\uE7DB\u0000\uE7D8\u8EA2\uC8DE\u0000\uE7DA\u8EA2\uC8DC" + //  8945 -  8949
-                "\u0000\uE7D9\u0000\u0000\u8EA2\uC8DD\u0000\u0000\u8EA2\uCFA5" + //  8950 -  8954
-                "\u8EA2\uC1C8\u0000\u0000\u0000\u0000\u8EA2\uC1C7\u0000\uE2F1" + //  8955 -  8959
-                "\u0000\uE2ED\u0000\uE2EE\u8EA2\uC1C3\u8EA2\uC1C5\u8EA2\uC1C6" + //  8960 -  8964
-                "\u0000\uE2E9\u0000\uE2EB\u0000\u0000\u0000\uE2EF\u0000\uE2EA" + //  8965 -  8969
-                "\u0000\u0000\u0000\u0000\u8EA2\uC8D9\u8EA2\uC8D7\u8EA2\uC8D8" + //  8970 -  8974
-                "\u0000\uE7D2\u0000\uE7D3\u0000\u0000\u8EA2\uC8DA\u0000\uE7D1" + //  8975 -  8979
-                "\u0000\uEBE1\u0000\u0000\u0000\uEBE3\u0000\uEBE2\u0000\u0000" + //  8980 -  8984
-                "\u8EA2\uCFA3\u0000\u0000\u0000\u0000\u8EA2\uCFA4\u8EA2\uD5D4" + //  8985 -  8989
-                "\u0000\u0000\u8EA2\uD5D3\u0000\u0000\u0000\u0000\u0000\uF2F0" + //  8990 -  8994
-                "\u0000\uF2F1\u8EA2\uDBDB\u0000\uF2F2\u0000\u0000\u8EA2\uE0C3" + //  8995 -  8999
-                "\u0000\u0000\u8EA2\uE0C1\u0000\u0000\u8EA2\uE0C2\u0000\uF6A1" + //  9000 -  9004
-                "\u0000\u0000\u8EA2\uE4BB\u0000\uF9C4\u0000\u0000\u0000\uA8EC" + //  9005 -  9009
-                "\u0000\u0000\u0000\uF6A2\u0000\uCFE3\u0000\u0000\u0000\uD8E9" + //  9010 -  9014
-                "\u8EA2\uB3CA\u0000\u0000\u0000\u0000\u8EA2\uBAB0\u0000\uCFDE" + //  9015 -  9019
-                "\u0000\u0000\u0000\uCFE2\u8EA2\uA8FC\u0000\uCFE1\u0000\u0000" + //  9020 -  9024
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uADE7" + //  9025 -  9029
-                "\u0000\uD3EF\u0000\uD3F0\u0000\uD3F1\u8EA2\uADE8\u8EA2\uADE4" + //  9030 -  9034
-                "\u0000\uD3EE\u8EA2\uADE5\u0000\u0000\u8EA2\uADE6\u8EA2\uADE3" + //  9035 -  9039
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD8E7\u0000\u0000" + //  9040 -  9044
-                "\u0000\u0000\u0000\uD8E4\u8EA2\uB3C8\u0000\uD8E5\u0000\uD8E8" + //  9045 -  9049
-                "\u8EA2\uB3C9\u0000\u0000\u0000\uD8E3\u0000\uD8E1\u0000\uD8E2" + //  9050 -  9054
-                "\u0000\uD8E6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9055 -  9059
-                "\u0000\u0000\u0000\uDDF1\u8EA2\uBAAD\u0000\uDDF9\u8EA2\uBAAC" + //  9060 -  9064
-                "\u0000\u0000\u8EA2\uBAAF\u0000\uDDF5\u8EA2\uBAAE\u0000\uE2F0" + //  9065 -  9069
-                "\u0000\uDDF3\u0000\uDDF6\u0000\uDDF2\u0000\uDDF7\u0000\uDDF8" + //  9070 -  9074
-                "\u0000\uDDF4\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uBAAB" + //  9075 -  9079
-                "\u0000\uE2EC\u8EA2\uC1C4\u0000\u0000\u0000\uA3B9\u8EAD\uA4A4" + //  9080 -  9084
-                "\u0000\uA3BA\u8EAD\uA4A5\u0000\u0000\u0000\u0000\u0000\u0000" + //  9085 -  9089
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9090 -  9094
-                "\u0000\uA3BC\u0000\u0000\u0000\u0000\u8EAD\uA4A6\u0000\uA3BD" + //  9095 -  9099
-                "\u0000\u0000\u0000\u0000\u8EAD\uA4A7\u0000\uA3BE\u0000\u0000" + //  9100 -  9104
-                "\u0000\u0000\u8EAD\uA4A9\u0000\uA3BF\u0000\u0000\u0000\u0000" + //  9105 -  9109
-                "\u8EAD\uA4A8\u0000\uA3B7\u8EAD\uA4B4\u0000\u0000\u0000\u0000" + //  9110 -  9114
-                "\u8EAD\uA4AF\u0000\u0000\u0000\u0000\u8EAD\uA4AA\u0000\uA3B6" + //  9115 -  9119
-                "\u8EAD\uA4B6\u0000\u0000\u0000\u0000\u8EAD\uA4B1\u0000\u0000" + //  9120 -  9124
-                "\u0000\u0000\u8EAD\uA4AC\u0000\uA3B5\u0000\u0000\u0000\u0000" + //  9125 -  9129
-                "\u8EAD\uA4B0\u8EAD\uA4B5\u0000\u0000\u0000\u0000\u8EAD\uA4AB" + //  9130 -  9134
-                "\u0000\uA3B4\u0000\u0000\u0000\u0000\u8EAD\uA4B2\u8EAD\uA4B7" + //  9135 -  9139
-                "\u0000\u0000\u0000\u0000\u8EAD\uA4AD\u0000\uA3B3\u0000\u0000" + //  9140 -  9144
-                "\u0000\u0000\u8EAD\uA4B3\u8EA2\uE0BC\u0000\u0000\u0000\u0000" + //  9145 -  9149
-                "\u8EA2\uE0BE\u0000\u0000\u8EA2\uE0BF\u0000\uF5FE\u8EA2\uE0BB" + //  9150 -  9154
-                "\u0000\uF5FD\u8EA2\uE0BD\u0000\uF5FA\u0000\uF5FB\u0000\uF5FC" + //  9155 -  9159
-                "\u8EA2\uDBD3\u0000\u0000\u0000\u0000\u0000\uF7E0\u8EA2\uE4BA" + //  9160 -  9164
-                "\u8EA2\uE4B8\u8EA2\uE4B9\u0000\uF7DE\u0000\uF7E1\u0000\uF7DF" + //  9165 -  9169
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uE7E4\u8EA2\uE7E5" + //  9170 -  9174
-                "\u0000\uF9C3\u0000\u0000\u8EA2\uEAD3\u8EA2\uEAD5\u8EA2\uEAD4" + //  9175 -  9179
-                "\u0000\uFACF\u0000\uFBBC\u8EA2\uECDB\u8EA2\uECDA\u8EA2\uECD9" + //  9180 -  9184
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9185 -  9189
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9190 -  9194
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9195 -  9199
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9200 -  9204
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9205 -  9209
-                "\u0000\u0000\u0000\uA2BD\u0000\u0000\u0000\u0000\u0000\u0000" + //  9210 -  9214
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9215 -  9219
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9220 -  9224
-                "\u0000\uA2BB\u0000\uA2BE\u0000\u0000\u0000\u0000\u0000\u0000" + //  9225 -  9229
-                "\u0000\u0000\u0000\uA2B9\u0000\uA2BA\u0000\u0000\u0000\u0000" + //  9230 -  9234
-                "\u8EAD\uA1C5\u8EAD\uA1C6\u0000\u0000\u0000\u0000\u0000\u0000" + //  9235 -  9239
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9240 -  9244
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9245 -  9249
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9250 -  9254
-                "\u0000\u0000\u0000\u0000\u0000\uA2D8\u0000\uA2D5\u0000\uA2D7" + //  9255 -  9259
-                "\u0000\uA2D6\u0000\u0000\u0000\u0000\u0000\uA2D9\u0000\uA2DA" + //  9260 -  9264
-                "\u0000\uA2DC\u0000\uA2DB\u0000\u0000\u0000\u0000\u0000\u0000" + //  9265 -  9269
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9270 -  9274
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9275 -  9279
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9280 -  9284
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9285 -  9289
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9290 -  9294
-                "\u0000\u0000\u0000\u0000\u8EAD\uA4BE\u8EAD\uA4BF\u0000\u0000" + //  9295 -  9299
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9300 -  9304
-                "\u0000\uA2F7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9305 -  9309
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9310 -  9314
-                "\u0000\uA2F3\u0000\u0000\u0000\u0000\u0000\uA2CC\u0000\uA2CB" + //  9315 -  9319
-                "\u0000\u0000\u0000\u0000\u0000\uA2EF\u0000\u0000\u0000\u0000" + //  9320 -  9324
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9325 -  9329
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9330 -  9334
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9335 -  9339
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9340 -  9344
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9345 -  9349
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9350 -  9354
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9355 -  9359
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9360 -  9364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9365 -  9369
-                "\u0000\u0000\u0000\uA1AB\u0000\uA1B6\u0000\uA1B8\u0000\uA1BA" + //  9370 -  9374
-                "\u0000\uA1BC\u0000\uA1C0\u0000\uA1C1\u0000\uA1C4\u0000\uA1C5" + //  9375 -  9379
-                "\u0000\uA1C8\u0000\uA1C9\u0000\uA1CC\u0000\uA1CD\u0000\uA1D0" + //  9380 -  9384
-                "\u0000\uA1D1\u0000\uA1D4\u0000\uCFDC\u0000\u0000\u0000\uD3ED" + //  9385 -  9389
-                "\u0000\uD8E0\u0000\u0000\u0000\u0000\u8EA2\uBAA9\u0000\u0000" + //  9390 -  9394
-                "\u8EA2\uBAAA\u0000\uDDF0\u0000\u0000\u0000\uE2E4\u8EA2\uC1C1" + //  9395 -  9399
-                "\u8EA2\uC1C0\u0000\uE2E8\u0000\uE2E3\u8EA2\uC1C2\u0000\uE2E5" + //  9400 -  9404
-                "\u0000\uE2E7\u0000\uE2E6\u0000\uE2E2\u0000\u0000\u0000\u0000" + //  9405 -  9409
-                "\u0000\u0000\u0000\uE7D0\u0000\u0000\u0000\u0000\u8EA2\uC8D6" + //  9410 -  9414
-                "\u8EA2\uC8D4\u0000\u0000\u8EA2\uC8D5\u8EA2\uC8D3\u0000\u0000" + //  9415 -  9419
-                "\u0000\uEBDB\u0000\u0000\u0000\uEBDE\u0000\uEBE0\u0000\uEBDF" + //  9420 -  9424
-                "\u0000\u0000\u0000\u0000\u0000\uEBDC\u0000\uEBDD\u0000\u0000" + //  9425 -  9429
-                "\u8EA2\uD5D0\u8EA2\uD5CF\u0000\uEFE4\u8EA2\uD5D1\u0000\u0000" + //  9430 -  9434
-                "\u8EA2\uD5D2\u0000\uEFE5\u0000\u0000\u0000\u0000\u0000\u0000" + //  9435 -  9439
-                "\u8EA2\uDBD9\u8EA2\uDBD7\u8EA2\uE0C0\u0000\u0000\u8EA2\uDBD5" + //  9440 -  9444
-                "\u8EA2\uDBD6\u0000\uF2EF\u8EA2\uDBD2\u8EA2\uDBDA\u8EA2\uDBD4" + //  9445 -  9449
-                "\u8EA2\uDBD8\u8EA2\uF2B0\u8EA2\uF2B1\u8EA2\uF2AF\u8EA2\uF2B7" + //  9450 -  9454
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9455 -  9459
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9460 -  9464
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9465 -  9469
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9470 -  9474
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9475 -  9479
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9480 -  9484
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9485 -  9489
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9490 -  9494
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9495 -  9499
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9500 -  9504
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9505 -  9509
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9510 -  9514
-                "\u8EAD\uA1A9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9515 -  9519
-                "\u0000\u0000\u8EA2\uA1BA\u0000\u0000\u0000\u0000\u8EA2\uA3D0" + //  9520 -  9524
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA7C2\u0000\u0000" + //  9525 -  9529
-                "\u8EA2\uA6A3\u8EA2\uA9E1\u8EA2\uAEDB\u0000\uD4EE\u0000\u0000" + //  9530 -  9534
-                "\u0000\u0000\u8EA2\uE5C5\u0000\u0000\u0000\uFAE7\u0000\uC4CA" + //  9535 -  9539
-                "\u0000\uC6C0\u8EA2\uA1D1\u0000\u0000\u0000\uC7E8\u0000\uC7E9" + //  9540 -  9544
-                "\u0000\u0000\u0000\uCCDF\u0000\u0000\u0000\u0000\u0000\u0000" + //  9545 -  9549
-                "\u0000\uD9DC\u0000\u0000\u0000\uE8C2\u0000\u0000\u0000\uE8C3" + //  9550 -  9554
-                "\u0000\uE8C1\u0000\u0000\u0000\uC4CB\u0000\u0000\u0000\uC5B2" + //  9555 -  9559
-                "\u0000\uC5B4\u0000\uC5B3\u8EA2\uA1BB\u0000\uC5B5\u0000\uC6C1" + //  9560 -  9564
-                "\u8EA2\uA1D2\u0000\u0000\u0000\uC6C2\u0000\u0000\u0000\u0000" + //  9565 -  9569
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7EA\u0000\uC7EB" + //  9570 -  9574
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA2AB\u0000\u0000" + //  9575 -  9579
-                "\u0000\uC9E8\u0000\u0000\u0000\uC2A1\u0000\uC2A2\u0000\uC2A3" + //  9580 -  9584
-                "\u0000\uC2A4\u0000\uC2A5\u0000\uC2A6\u0000\uC2A7\u0000\uC2A8" + //  9585 -  9589
-                "\u0000\uC2A9\u0000\uC2AA\u0000\uC2AB\u0000\uC2AC\u0000\uC2AD" + //  9590 -  9594
-                "\u0000\uC2AE\u0000\uC2AF\u0000\uC2B0\u0000\uC2B1\u0000\uC2B2" + //  9595 -  9599
-                "\u0000\uC2B3\u0000\uC2B4\u0000\uC2B5\u0000\uC2B6\u0000\uC2B7" + //  9600 -  9604
-                "\u0000\uC2B8\u0000\uC2B9\u0000\uC2BA\u0000\uC2BB\u0000\uC2BC" + //  9605 -  9609
-                "\u0000\uC2BD\u0000\uC2BE\u0000\uC2BF\u0000\uC2C0\u0000\u0000" + //  9610 -  9614
-                "\u0000\uC2C1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9615 -  9619
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9620 -  9624
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9625 -  9629
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9630 -  9634
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9635 -  9639
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9640 -  9644
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA6A1\u0000\uA6A2" + //  9645 -  9649
-                "\u0000\uA6A3\u0000\uA6A4\u0000\uA6A5\u0000\uA6A6\u0000\uA6A7" + //  9650 -  9654
-                "\u0000\uA6A8\u0000\uA6A9\u0000\uA6AA\u0000\u0000\u0000\u0000" + //  9655 -  9659
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9660 -  9664
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA6AB\u0000\uA6AC" + //  9665 -  9669
-                "\u0000\uA6AD\u0000\uA6AE\u0000\uA6AF\u0000\uA6B0\u0000\uA6B1" + //  9670 -  9674
-                "\u0000\uA6B2\u0000\uA6B3\u0000\uA6B4\u0000\u0000\u0000\u0000" + //  9675 -  9679
-                "\u8EA2\uCCE4\u0000\u0000\u0000\uEAB1\u8EA2\uCCDF\u0000\u0000" + //  9680 -  9684
-                "\u0000\uEAB0\u8EA2\uCCD5\u0000\u0000\u8EA2\uCCD7\u0000\uEAA9" + //  9685 -  9689
-                "\u8EA2\uCCDC\u8EA2\uCCDB\u8EA2\uCCDE\u0000\uEAAE\u8EA2\uCCD9" + //  9690 -  9694
-                "\u8EA2\uCCD8\u0000\u0000\u0000\u0000\u0000\uEAAD\u0000\uEAA8" + //  9695 -  9699
-                "\u8EA2\uCCDA\u0000\uEAAB\u8EA2\uCCE0\u8EA2\uCCE2\u0000\u0000" + //  9700 -  9704
-                "\u8EA2\uCCDD\u8EA2\uCCD6\u0000\uEAAC\u0000\u0000\u0000\u0000" + //  9705 -  9709
-                "\u0000\uEEB4\u0000\uEAA7\u0000\u0000\u0000\u0000\u8EA2\uCCE3" + //  9710 -  9714
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9715 -  9719
-                "\u0000\u0000\u0000\u0000\u8EA2\uD2E1\u0000\uEEAD\u0000\u0000" + //  9720 -  9724
-                "\u8EA2\uD2E3\u0000\u0000\u0000\uEEAE\u0000\u0000\u0000\u0000" + //  9725 -  9729
-                "\u0000\uEEB0\u8EA2\uD2E6\u0000\u0000\u8EA2\uD2DE\u0000\uEAAF" + //  9730 -  9734
-                "\u8EA2\uD2E4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9735 -  9739
-                "\u8EA2\uD2E0\u0000\u0000\u0000\uF0DF\u0000\uF0E6\u8EA2\uD7B6" + //  9740 -  9744
-                "\u0000\uF0E4\u0000\uF0DE\u0000\u0000\u0000\uF0E5\u0000\u0000" + //  9745 -  9749
-                "\u8EA2\uD7B3\u0000\uF3E4\u0000\uF0E0\u0000\u0000\u0000\uF0E7" + //  9750 -  9754
-                "\u0000\uF3E3\u8EA2\uD7B2\u8EA2\uD7B1\u0000\u0000\u0000\uF0E9" + //  9755 -  9759
-                "\u0000\u0000\u0000\uF0EA\u0000\u0000\u8EA2\uD7B0\u8EA2\uD7AF" + //  9760 -  9764
-                "\u0000\uF3E5\u8EA2\uD7B9\u0000\uF0E3\u8EA2\uD7B7\u0000\u0000" + //  9765 -  9769
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3E6\u0000\u0000" + //  9770 -  9774
-                "\u0000\uF3EB\u8EA2\uDCF5\u8EA2\uDCF7\u0000\u0000\u0000\uF3E8" + //  9775 -  9779
-                "\u0000\u0000\u8EA2\uDCF8\u8EA2\uDCF4\u0000\u0000\u8EA2\uDCF6" + //  9780 -  9784
-                "\u0000\uF3E9\u0000\uF3EC\u0000\u0000\u8EA2\uDCF3\u0000\uF3E7" + //  9785 -  9789
-                "\u0000\uF3EA\u0000\uF6C5\u8EA2\uD7B8\u0000\uF6C4\u0000\u0000" + //  9790 -  9794
-                "\u0000\u0000\u0000\uF6CA\u8EA2\uE1E0\u0000\u0000\u0000\uF6C8" + //  9795 -  9799
-                "\u0000\uF6C9\u8EA2\uE1E3\u8EA2\uE1DF\u0000\uF6C6\u8EA2\uE1DD" + //  9800 -  9804
-                "\u8EA2\uECD7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFBFB" + //  9805 -  9809
-                "\u8EA2\uEEBC\u8EA2\uEEBF\u8EA2\uEEBB\u8EA2\uEEBD\u8EA2\uEEBE" + //  9810 -  9814
-                "\u8EA2\uEEB8\u8EA2\uEEB9\u8EA2\uEEB6\u0000\u0000\u0000\u0000" + //  9815 -  9819
-                "\u8EA2\uEEBA\u8EA2\uEEB7\u0000\uFBFC\u0000\uFBFD\u0000\u0000" + //  9820 -  9824
-                "\u0000\u0000\u8EA2\uEFD9\u0000\u0000\u8EA2\uEFDB\u0000\u0000" + //  9825 -  9829
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uEFDA" + //  9830 -  9834
-                "\u8EA2\uEFDC\u0000\u0000\u0000\uFCCC\u0000\u0000\u8EA2\uEFD8" + //  9835 -  9839
-                "\u0000\uFCCB\u0000\uFCCD\u0000\u0000\u0000\u0000\u0000\u0000" + //  9840 -  9844
-                "\u8EA2\uF0D9\u8EA2\uF0DA\u0000\uFCEF\u8EA2\uF0D8\u0000\u0000" + //  9845 -  9849
-                "\u8EA2\uF1C2\u8EA2\uF1C1\u8EA2\uF1C3\u0000\uFDAC\u8EA2\uF1C4" + //  9850 -  9854
-                "\u0000\uFDAB\u8EA2\uF1C5\u8EA2\uF1E1\u8EA2\uF1E4\u8EA2\uF1E3" + //  9855 -  9859
-                "\u0000\uFDB5\u8EA2\uF1E2\u0000\u0000\u0000\u0000\u0000\u0000" + //  9860 -  9864
-                "\u0000\uFDBF\u0000\uFDBD\u0000\uFDBE\u0000\uFDC4\u8EA2\uEAC2" + //  9865 -  9869
-                "\u0000\u0000\u0000\u0000\u0000\uFACD\u0000\u0000\u0000\u0000" + //  9870 -  9874
-                "\u8EA2\uEAD2\u8EA2\uEAC4\u0000\u0000\u8EA2\uEAC9\u8EA2\uEACC" + //  9875 -  9879
-                "\u8EA2\uEAB5\u8EA2\uEACF\u8EA2\uEAC0\u8EA2\uEAC5\u8EA2\uEAB9" + //  9880 -  9884
-                "\u8EA2\uEABD\u8EA2\uEAD1\u8EA2\uEAC7\u8EA2\uEAB6\u8EA2\uEABA" + //  9885 -  9889
-                "\u8EA2\uEABC\u8EA2\uEAC6\u0000\u0000\u0000\uFACC\u8EA2\uEABF" + //  9890 -  9894
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9895 -  9899
-                "\u0000\u0000\u8EA2\uEAB8\u0000\u0000\u0000\u0000\u0000\u0000" + //  9900 -  9904
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uEABE" + //  9905 -  9909
-                "\u8EA2\uECD0\u8EA2\uECD4\u0000\uFBBB\u8EA2\uECD6\u0000\u0000" + //  9910 -  9914
-                "\u0000\uFBB5\u0000\u0000\u8EA2\uECD2\u8EA2\uECD8\u0000\uFBBA" + //  9915 -  9919
-                "\u0000\uFBB6\u0000\u0000\u0000\uFBB7\u8EA2\uECCF\u8EA2\uECD5" + //  9920 -  9924
-                "\u0000\uFBB9\u8EA2\uECD3\u0000\uFBB8\u8EA2\uECCE\u8EA2\uEACB" + //  9925 -  9929
-                "\u8EA2\uECD1\u0000\u0000\u8EA2\uECCD\u8EA2\uE7DF\u0000\u0000" + //  9930 -  9934
-                "\u8EA2\uE7CF\u0000\uF9B8\u8EA2\uE7DD\u0000\u0000\u0000\u0000" + //  9935 -  9939
-                "\u8EA2\uE7CD\u0000\uF9B9\u0000\u0000\u8EA2\uE7D8\u0000\u0000" + //  9940 -  9944
-                "\u8EA2\uE7D4\u0000\uF9BE\u8EA2\uE7DE\u8EA2\uE7CE\u8EA2\uE7D1" + //  9945 -  9949
-                "\u0000\uF9B6\u8EA2\uE7E0\u0000\u0000\u8EA2\uE7D9\u8EA2\uE7DC" + //  9950 -  9954
-                "\u0000\uF9BC\u0000\uF9C1\u0000\uF9BF\u8EA2\uE7D5\u8EA2\uE7D0" + //  9955 -  9959
-                "\u0000\u0000\u0000\uF9BA\u0000\uF9BB\u8EA2\uE7CC\u0000\uF9B7" + //  9960 -  9964
-                "\u0000\u0000\u0000\uF9B5\u0000\uF9BD\u8EA2\uE7DB\u0000\uF9C0" + //  9965 -  9969
-                "\u0000\u0000\u8EA2\uE7D7\u8EA2\uE7E2\u0000\uF9C2\u0000\u0000" + //  9970 -  9974
-                "\u0000\u0000\u0000\u0000\u8EA2\uE7D3\u0000\u0000\u8EA2\uE7DA" + //  9975 -  9979
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + //  9980 -  9984
-                "\u0000\u0000\u8EA2\uEAC1\u8EA2\uEAD0\u8EA2\uEAC3\u8EA2\uEACA" + //  9985 -  9989
-                "\u8EA2\uE7D2\u8EA2\uEAC8\u8EA2\uEAB7\u8EA2\uEACE\u0000\uFACE" + //  9990 -  9994
-                "\u8EA2\uEABB\u8EA2\uEACD\u8EA2\uE4AF\u0000\u0000\u0000\uF5ED" + //  9995 -  9999
-                "\u8EA2\uDFFA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10000 - 10004
-                "\u8EA2\uE4AC\u8EA2\uE4A5\u0000\uF7D4\u0000\u0000\u8EA2\uE3FE" + // 10005 - 10009
-                "\u8EA2\uE4B0\u8EA2\uE4A7\u8EA2\uE0AA\u0000\u0000\u8EA2\uE4B2" + // 10010 - 10014
-                "\u8EA2\uE4A1\u0000\u0000\u0000\uF7D3\u8EA2\uE4AB\u0000\uF7D5" + // 10015 - 10019
-                "\u0000\uF7DD\u0000\uF7DB\u8EA2\uE4AD\u0000\uF7DC\u8EA2\uE4A3" + // 10020 - 10024
-                "\u0000\u0000\u8EA2\uE4A4\u8EA2\uE4A9\u8EA2\uE4AE\u0000\u0000" + // 10025 - 10029
-                "\u8EA2\uDFF9\u0000\uF7D6\u8EA2\uE4B7\u8EA2\uE4B4\u8EA2\uE7E1" + // 10030 - 10034
-                "\u8EA2\uE4AA\u8EA2\uE4A6\u8EA2\uE4B5\u8EA2\uE7D6\u8EA2\uE4A8" + // 10035 - 10039
-                "\u0000\u0000\u0000\uF7D9\u0000\u0000\u0000\uF7D8\u8EA2\uDFFB" + // 10040 - 10044
-                "\u0000\uF7DA\u8EA2\uE4B1\u8EA2\uE4B3\u0000\uF7D7\u8EA2\uE4B6" + // 10045 - 10049
-                "\u8EA2\uE3FD\u0000\u0000\u8EA2\uE4A2\u0000\u0000\u0000\u0000" + // 10050 - 10054
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10055 - 10059
-                "\u0000\u0000\u8EA2\uDBB8\u8EA2\uDFFE\u0000\u0000\u8EA2\uE0A5" + // 10060 - 10064
-                "\u0000\uF5F0\u0000\uF5F2\u8EA2\uE0AB\u0000\uF5EC\u8EA2\uE0B9" + // 10065 - 10069
-                "\u8EA2\uE0B1\u8EA2\uE0A6\u8EA2\uE0A7\u8EA2\uE0B0\u0000\u0000" + // 10070 - 10074
-                "\u0000\uF5F9\u8EA2\uE0AF\u8EA2\uDFFD\u8EA2\uE0AE\u8EA2\uE0A2" + // 10075 - 10079
-                "\u8EA2\uE0BA\u0000\uF5F8\u0000\uF5F6\u8EA2\uE0A3\u0000\u0000" + // 10080 - 10084
-                "\u8EA2\uE0B6\u0000\u0000\u8EA2\uE0A8\u8EA2\uE0B5\u0000\u0000" + // 10085 - 10089
-                "\u8EA2\uE0B7\u8EA2\uDFFC\u0000\uF5F1\u0000\u0000\u8EA2\uE0B8" + // 10090 - 10094
-                "\u0000\u0000\u0000\u0000\u8EA2\uE0AC\u0000\u0000\u0000\uF5F5" + // 10095 - 10099
-                "\u8EA2\uE0A9\u0000\u0000\u0000\u0000\u0000\uF5F7\u8EA2\uE0B2" + // 10100 - 10104
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF5EF\u8EA2\uE0A4" + // 10105 - 10109
-                "\u8EA2\uE0B3\u0000\u0000\u8EA2\uE0AD\u8EA2\uDBB1\u8EA2\uE0B4" + // 10110 - 10114
-                "\u8EA2\uE0A1\u0000\u0000\u0000\uF5F4\u0000\u0000\u8EAD\uA1C0" + // 10115 - 10119
-                "\u0000\u0000\u8EAD\uA1C3\u8EAD\uA1C1\u0000\u0000\u0000\u0000" + // 10120 - 10124
-                "\u0000\u0000\u8EAD\uA1C4\u8EAD\uA1B6\u0000\u0000\u0000\u0000" + // 10125 - 10129
-                "\u8EAD\uA1B7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10130 - 10134
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10135 - 10139
-                "\u0000\uA2E1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10140 - 10144
-                "\u0000\uA2B5\u0000\u0000\u0000\u0000\u8EAD\uA1C8\u0000\uA2BC" + // 10145 - 10149
-                "\u0000\uA2C9\u0000\uA2C8\u0000\u0000\u0000\u0000\u0000\u0000" + // 10150 - 10154
-                "\u0000\u0000\u0000\uA2DD\u0000\u0000\u8EAD\uA1BC\u8EAD\uA1BD" + // 10155 - 10159
-                "\u0000\uA2C5\u0000\uA2C6\u0000\uA2CD\u8EAD\uA1C9\u0000\u0000" + // 10160 - 10164
-                "\u0000\uA2CE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10165 - 10169
-                "\u0000\u0000\u0000\uA2D0\u0000\uA2CF\u0000\u0000\u0000\u0000" + // 10170 - 10174
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA2C4" + // 10175 - 10179
-                "\u8EAD\uA1C7\u0000\u0000\u0000\u0000\u8EA2\uE2C1\u0000\u0000" + // 10180 - 10184
-                "\u8EA2\uE6A7\u0000\u0000\u0000\u0000\u0000\uF8D4\u0000\u0000" + // 10185 - 10189
-                "\u8EA2\uE6A5\u8EA2\uE6A6\u0000\u0000\u8EA2\uE9C3\u8EA2\uE9C6" + // 10190 - 10194
-                "\u8EA2\uE9C4\u8EA2\uE9C5\u8EA2\uEBEE\u0000\u0000\u0000\u0000" + // 10195 - 10199
-                "\u0000\uFAFA\u8EA2\uEFBA\u8EA2\uF0C2\u0000\u0000\u0000\uFCE3" + // 10200 - 10204
-                "\u8EA2\uF1A8\u8EA2\uF1A9\u0000\uFDB3\u0000\uC6F9\u0000\uD2E4" + // 10205 - 10209
-                "\u0000\u0000\u8EA2\uBEC7\u0000\u0000\u8EA2\uC5C9\u0000\u0000" + // 10210 - 10214
-                "\u0000\uC6FA\u0000\uCBB2\u0000\u0000\u0000\uCFA1\u0000\u0000" + // 10215 - 10219
-                "\u8EA2\uACCA\u8EA2\uACCB\u0000\uD6FB\u0000\u0000\u0000\u0000" + // 10220 - 10224
-                "\u8EA2\uBEC8\u0000\uE0FB\u0000\uE5CE\u0000\uF4CC\u8EA2\uDDEE" + // 10225 - 10229
-                "\u8EA2\uE6A8\u8EA2\uE9C7\u0000\uC6FB\u0000\u0000\u0000\u0000" + // 10230 - 10234
-                "\u0000\u0000\u8EA2\uA8C1\u8EA2\uA8BC\u8EA2\uA8BE\u8EA2\uA8C0" + // 10235 - 10239
-                "\u8EA2\uA8BF\u8EA2\uA8BD\u0000\uCFA2\u0000\u0000\u0000\u0000" + // 10240 - 10244
-                "\u0000\uD2E5\u8EA2\uACD4\u0000\u0000\u8EA2\uACCF\u8EA2\uACCC" + // 10245 - 10249
-                "\u0000\u0000\u0000\u0000\u8EA2\uACD3\u0000\u0000\u0000\u0000" + // 10250 - 10254
-                "\u0000\uD2E7\u0000\uD2E8\u8EA2\uACD2\u8EA2\uACD1\u8EA2\uACD0" + // 10255 - 10259
-                "\u8EA2\uACCD\u8EA2\uACCE\u8EA2\uACD5\u0000\uD2E6\u0000\u0000" + // 10260 - 10264
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10265 - 10269
-                "\u0000\u0000\u0000\u0000\u0000\uD7A1\u0000\u0000\u0000\uD7A7" + // 10270 - 10274
-                "\u0000\uD7A6\u8EA2\uB1C4\u8EA2\uB1BE\u8EA2\uB1BC\u0000\u0000" + // 10275 - 10279
-                "\u0000\uD7A4\u8EA2\uB7DC\u0000\uD6FD\u8EA2\uB1C1\u8EA2\uB1C5" + // 10280 - 10284
-                "\u8EA2\uB1C7\u8EA2\uB1C3\u8EA2\uB1BD\u0000\uD7A5\u8EA2\uB1C2" + // 10285 - 10289
-                "\u8EA2\uB1C0\u0000\uD6FC\u8EA2\uB1C8\u0000\uD7A8\u8EA2\uB1C6" + // 10290 - 10294
-                "\u0000\uD7A2\u8EA2\uB1BF\u0000\u0000\u0000\uD7A3\u0000\uD6FE" + // 10295 - 10299
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10300 - 10304
-                "\u0000\u0000\u0000\u0000\u0000\uA5C7\u0000\uA5C8\u0000\uA5C9" + // 10305 - 10309
-                "\u0000\uA5CA\u0000\uA5CB\u0000\uA5CC\u0000\uA5CD\u0000\uA5CE" + // 10310 - 10314
-                "\u0000\uA5CF\u0000\uA5D0\u0000\uA5D1\u0000\uA5D2\u0000\uA5D3" + // 10315 - 10319
-                "\u0000\uA5D4\u0000\uA5D5\u0000\uA5D6\u0000\uA5D7\u0000\uA5D8" + // 10320 - 10324
-                "\u0000\uA5D9\u0000\uA5DA\u0000\uA5DB\u0000\uA5DC\u0000\uA5DD" + // 10325 - 10329
-                "\u0000\uA5DE\u0000\uA5DF\u0000\uA5E0\u0000\uA5E1\u0000\uA5E2" + // 10330 - 10334
-                "\u0000\uA5E3\u0000\uA5E4\u0000\uA5E5\u0000\uA5E6\u0000\uA5E7" + // 10335 - 10339
-                "\u0000\uA5E8\u0000\uA5E9\u0000\uA5EA\u0000\uA5EB\u0000\u0000" + // 10340 - 10344
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10345 - 10349
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10350 - 10354
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10355 - 10359
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10360 - 10364
-                "\u0000\u0000\u0000\uA4F5\u0000\uA4F6\u0000\uA4F7\u0000\uA4F8" + // 10365 - 10369
-                "\u0000\uA4F9\u0000\uA4FA\u0000\uA4FB\u0000\uA4FC\u0000\uA4FD" + // 10370 - 10374
-                "\u0000\uA4FE\u0000\uA5A1\u0000\uA5A2\u0000\uA5A3\u0000\uA5A4" + // 10375 - 10379
-                "\u0000\uA5A5\u0000\uA5A6\u0000\uA5A7\u0000\u0000\u0000\uA5A8" + // 10380 - 10384
-                "\u0000\uA5A9\u0000\uA5AA\u0000\uA5AB\u0000\uA5AC\u0000\uA5AD" + // 10385 - 10389
-                "\u0000\uA5AE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10390 - 10394
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA5AF\u0000\uA5B0" + // 10395 - 10399
-                "\u0000\uA5B1\u0000\uA5B2\u0000\uA5B3\u0000\uA5B4\u0000\uA5B5" + // 10400 - 10404
-                "\u0000\uA5B6\u0000\uA5B7\u0000\uA5B8\u0000\uA5B9\u0000\uA5BA" + // 10405 - 10409
-                "\u0000\uA5BB\u0000\uA5BC\u0000\uA5BD\u8EA2\uDBCF\u8EA2\uDBB7" + // 10410 - 10414
-                "\u8EA2\uDBC3\u0000\u0000\u0000\uF2E7\u0000\u0000\u8EA2\uDBAF" + // 10415 - 10419
-                "\u0000\u0000\u8EA2\uDBAD\u8EA2\uDBCE\u0000\u0000\u8EA2\uDBCC" + // 10420 - 10424
-                "\u8EA2\uDBCB\u8EA2\uDBBB\u8EA2\uDBBA\u8EA2\uDBB0\u0000\uF2E9" + // 10425 - 10429
-                "\u0000\u0000\u8EA2\uDBB6\u8EA2\uDBBF\u8EA2\uDBCA\u0000\uF2EC" + // 10430 - 10434
-                "\u8EA2\uDBD1\u0000\u0000\u0000\uF5F3\u0000\uF2EE\u0000\uF2E8" + // 10435 - 10439
-                "\u8EA2\uDBB4\u0000\u0000\u8EA2\uDBBD\u8EA2\uDBAC\u8EA2\uDBAE" + // 10440 - 10444
-                "\u0000\uF2DF\u0000\uF2EB\u0000\uF2E4\u8EA2\uDBB5\u8EA2\uDBC4" + // 10445 - 10449
-                "\u8EA2\uD5CB\u0000\uF2EA\u8EA2\uDBAB\u0000\uF5EE\u8EA2\uDBC6" + // 10450 - 10454
-                "\u8EA2\uDBC9\u0000\uF2E6\u0000\u0000\u8EA2\uDBB9\u0000\uF2ED" + // 10455 - 10459
-                "\u0000\uF2E3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF2E2" + // 10460 - 10464
-                "\u8EA2\uDBC2\u8EA2\uDBC8\u0000\uF2E0\u0000\u0000\u8EA2\uDBB2" + // 10465 - 10469
-                "\u8EA2\uDBC7\u0000\u0000\u0000\u0000\u8EA2\uDBB3\u0000\u0000" + // 10470 - 10474
-                "\u0000\u0000\u0000\u0000\u0000\uF4C3\u8EA2\uDDE0\u0000\u0000" + // 10475 - 10479
-                "\u0000\u0000\u0000\uF4C2\u8EA2\uDDE3\u8EA2\uDDE1\u8EA2\uDDE2" + // 10480 - 10484
-                "\u0000\u0000\u0000\u0000\u0000\uF4C4\u0000\u0000\u0000\u0000" + // 10485 - 10489
-                "\u0000\u0000\u8EA2\uE2BA\u0000\u0000\u0000\uF6EB\u8EA2\uE2BB" + // 10490 - 10494
-                "\u0000\u0000\u0000\u0000\u0000\uF6E9\u8EA2\uE2BC\u0000\uF6EA" + // 10495 - 10499
-                "\u8EA2\uE2B9\u8EA2\uE2BD\u0000\u0000\u8EA2\uE2B7\u0000\u0000" + // 10500 - 10504
-                "\u0000\u0000\u0000\uF8D2\u8EA2\uE6A4\u0000\uF8D3\u0000\uF9FA" + // 10505 - 10509
-                "\u0000\u0000\u8EA2\uE2B8\u0000\uF9FB\u0000\u0000\u0000\u0000" + // 10510 - 10514
-                "\u0000\u0000\u0000\uFAF9\u8EA2\uEBED\u0000\u0000\u0000\uFBEA" + // 10515 - 10519
-                "\u8EA2\uEDE2\u0000\uFBE9\u0000\u0000\u8EA2\uEFB9\u0000\uFCE1" + // 10520 - 10524
-                "\u0000\uFCE2\u0000\u0000\u0000\u0000\u8EA2\uF2BA\u0000\uA8AA" + // 10525 - 10529
-                "\u0000\u0000\u0000\uD2D4\u8EA2\uACC0\u0000\u0000\u0000\uE0F4" + // 10530 - 10534
-                "\u0000\uE0F5\u0000\uC6F5\u0000\uC8CB\u8EA2\uA2E7\u8EA2\uD5AF" + // 10535 - 10539
-                "\u0000\uEFDD\u8EA2\uD5BB\u8EA2\uD5AD\u8EA2\uD5AE\u0000\uEFD8" + // 10540 - 10544
-                "\u8EA2\uD5CC\u0000\uEFE1\u8EA2\uD5BE\u8EA2\uD5C3\u8EA2\uD5BD" + // 10545 - 10549
-                "\u8EA2\uDBBC\u8EA2\uD5B9\u8EA2\uD5C1\u8EA2\uD5BF\u8EA2\uD5B2" + // 10550 - 10554
-                "\u8EA2\uD5AC\u8EA2\uD5C7\u0000\uEFE0\u8EA2\uD5C8\u0000\u0000" + // 10555 - 10559
-                "\u8EA2\uD5C2\u0000\u0000\u8EA2\uD5B7\u8EA2\uD5B5\u8EA2\uD5B0" + // 10560 - 10564
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uD5B8\u8EA2\uD5C5" + // 10565 - 10569
-                "\u8EA2\uD5B4\u8EA2\uD5C4\u8EA2\uD5CA\u0000\u0000\u0000\u0000" + // 10570 - 10574
-                "\u0000\uEFDC\u0000\u0000\u8EA2\uD5C0\u8EA2\uD5C6\u8EA2\uD5BC" + // 10575 - 10579
-                "\u8EA2\uD5B6\u0000\uEFDB\u0000\u0000\u0000\u0000\u0000\u0000" + // 10580 - 10584
-                "\u8EA2\uCEEE\u8EA2\uD5BA\u0000\uEFE2\u8EA2\uD5B3\u0000\u0000" + // 10585 - 10589
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uDBC1" + // 10590 - 10594
-                "\u0000\uF2E1\u8EA2\uDBC0\u8EA2\uDBBE\u8EA2\uDBD0\u0000\uF2E5" + // 10595 - 10599
-                "\u0000\u0000\u8EA2\uDBCD\u8EA2\uDBC5\u0000\uEBD1\u0000\u0000" + // 10600 - 10604
-                "\u8EA2\uCEF0\u8EA2\uC8BC\u0000\u0000\u0000\uEBD2\u8EA2\uCEF7" + // 10605 - 10609
-                "\u8EA2\uCEFC\u8EA2\uCEF4\u0000\u0000\u8EA2\uCEF6\u8EA2\uCFA1" + // 10610 - 10614
-                "\u8EA2\uCEF8\u8EA2\uCEE6\u8EA2\uCEEF\u0000\u0000\u0000\u0000" + // 10615 - 10619
-                "\u0000\uEBDA\u0000\u0000\u0000\uEBD6\u8EA2\uCEE4\u8EA2\uCEF1" + // 10620 - 10624
-                "\u0000\uEBD4\u8EA2\uCEEB\u0000\uEBD3\u8EA2\uCEF9\u8EA2\uCEE8" + // 10625 - 10629
-                "\u8EA2\uCEE1\u0000\uEBD7\u8EA2\uCEFE\u0000\u0000\u0000\u0000" + // 10630 - 10634
-                "\u8EA2\uCEE3\u8EA2\uCEF5\u8EA2\uCEF2\u8EA2\uCEED\u8EA2\uCEDF" + // 10635 - 10639
-                "\u8EA2\uCEDE\u8EA2\uCEE7\u8EA2\uCEFA\u0000\uEBD8\u8EA2\uCEFD" + // 10640 - 10644
-                "\u8EA2\uCEE5\u8EA2\uCEE9\u0000\uEBD0\u0000\u0000\u0000\u0000" + // 10645 - 10649
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFE3\u0000\uEFDE" + // 10650 - 10654
-                "\u8EA2\uD5CD\u8EA2\uD5C9\u8EA2\uD5B1\u0000\uEFDA\u0000\u0000" + // 10655 - 10659
-                "\u0000\u0000\u0000\u0000\u0000\uEFD9\u0000\uEFDF\u0000\u0000" + // 10660 - 10664
-                "\u0000\u0000\u0000\u0000\u8EA2\uA7F8\u8EA2\uA7FA\u8EA2\uA7F5" + // 10665 - 10669
-                "\u8EA2\uA7F2\u8EA2\uA7F4\u0000\u0000\u0000\u0000\u0000\u0000" + // 10670 - 10674
-                "\u0000\uCEE5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCEE3" + // 10675 - 10679
-                "\u0000\u0000\u0000\u0000\u8EA2\uA7F6\u0000\uCEE4\u8EA2\uA7F3" + // 10680 - 10684
-                "\u8EA2\uA7F0\u0000\uCEE2\u8EA2\uA7F7\u0000\u0000\u8EA2\uA7F1" + // 10685 - 10689
-                "\u0000\uCEE6\u8EA2\uA7F9\u0000\u0000\u0000\u0000\u0000\u0000" + // 10690 - 10694
-                "\u0000\u0000\u8EA2\uABEF\u0000\u0000\u8EA2\uABF3\u0000\u0000" + // 10695 - 10699
-                "\u0000\u0000\u0000\uD2BA\u0000\u0000\u0000\u0000\u0000\u0000" + // 10700 - 10704
-                "\u0000\u0000\u8EA2\uABF6\u0000\u0000\u0000\uD2B2\u0000\uD2B5" + // 10705 - 10709
-                "\u0000\uD2B7\u0000\uD2B9\u0000\uD2B6\u8EA2\uABF2\u8EA2\uABF1" + // 10710 - 10714
-                "\u0000\u0000\u0000\uD2B4\u8EA2\uABF4\u8EA2\uABF5\u0000\u0000" + // 10715 - 10719
-                "\u8EA2\uABEE\u0000\uD2B8\u0000\u0000\u0000\uD2B3\u0000\u0000" + // 10720 - 10724
-                "\u0000\u0000\u0000\u0000\u8EA2\uABF0\u0000\u0000\u8EAD\uA3F2" + // 10725 - 10729
-                "\u8EAD\uA3F3\u8EAD\uA3F4\u8EAD\uA3F5\u8EAD\uA3F6\u8EAD\uA3F7" + // 10730 - 10734
-                "\u8EAD\uA3F8\u8EAD\uA3F9\u8EAD\uA3FA\u8EAD\uA3FB\u8EAD\uA3FC" + // 10735 - 10739
-                "\u8EAD\uA3FD\u8EAD\uA3FE\u8EAD\uA4A1\u8EAD\uA4A2\u8EAD\uA4A3" + // 10740 - 10744
-                "\u0000\u0000\u8EAD\uA3E7\u0000\u0000\u0000\u0000\u0000\u0000" + // 10745 - 10749
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10750 - 10754
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10755 - 10759
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10760 - 10764
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10765 - 10769
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10770 - 10774
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10775 - 10779
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10780 - 10784
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10785 - 10789
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10790 - 10794
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10795 - 10799
-                "\u0000\uDEA5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFADB" + // 10800 - 10804
-                "\u8EA2\uEDB7\u0000\u0000\u0000\uFCFB\u0000\uFCFC\u0000\u0000" + // 10805 - 10809
-                "\u0000\uDEA6\u0000\uE7C3\u0000\u0000\u0000\u0000\u0000\u0000" + // 10810 - 10814
-                "\u0000\u0000\u0000\uE7CC\u8EA2\uC8BF\u0000\u0000\u8EA2\uC8B4" + // 10815 - 10819
-                "\u0000\uE7CA\u8EA2\uC8BE\u0000\uE7C6\u8EA2\uC8D0\u0000\uE7CB" + // 10820 - 10824
-                "\u8EA2\uC8CE\u8EA2\uC8C2\u8EA2\uC8CC\u0000\uE7C8\u8EA2\uC8B5" + // 10825 - 10829
-                "\u8EA2\uC8CF\u8EA2\uC8CA\u0000\u0000\u8EA2\uC8D1\u0000\uE7C0" + // 10830 - 10834
-                "\u0000\u0000\u0000\u0000\u0000\uE7CF\u0000\uE7C5\u0000\u0000" + // 10835 - 10839
-                "\u0000\u0000\u8EA2\uC8BB\u0000\u0000\u8EA2\uC8C3\u8EA2\uC8C7" + // 10840 - 10844
-                "\u0000\u0000\u8EA2\uC8CB\u0000\uE7C7\u8EA2\uC8BA\u8EA2\uC8B8" + // 10845 - 10849
-                "\u8EA2\uC8C4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10850 - 10854
-                "\u8EA2\uC8C1\u8EA2\uC8C0\u0000\u0000\u8EA2\uC8C5\u8EA2\uC8C8" + // 10855 - 10859
-                "\u0000\u0000\u8EA2\uC8CD\u0000\u0000\u0000\u0000\u0000\u0000" + // 10860 - 10864
-                "\u8EA2\uCEE0\u0000\u0000\u0000\uEBCF\u8EA2\uCEEA\u8EA2\uCEE2" + // 10865 - 10869
-                "\u0000\uEBD5\u0000\uEBD9\u8EA2\uCEF3\u8EA2\uCEFB\u8EA2\uCEEC" + // 10870 - 10874
-                "\u8EA2\uC1B1\u8EA2\uC1A9\u8EA2\uC1B8\u8EA2\uC1AC\u8EA2\uC1B6" + // 10875 - 10879
-                "\u8EA2\uC1BD\u8EA2\uC1B5\u0000\uE2E0\u0000\u0000\u0000\uE2DC" + // 10880 - 10884
-                "\u8EA2\uC1AA\u0000\u0000\u8EA2\uC1B0\u0000\uE2DE\u0000\u0000" + // 10885 - 10889
-                "\u8EA2\uC1AF\u0000\uE2DF\u0000\uE2E1\u8EA2\uC1B2\u0000\u0000" + // 10890 - 10894
-                "\u0000\uE2D9\u0000\uE2DA\u8EA2\uC1BE\u8EA2\uC1BC\u0000\u0000" + // 10895 - 10899
-                "\u8EA2\uC1BB\u8EA2\uC1AD\u0000\u0000\u8EA2\uC1B9\u0000\u0000" + // 10900 - 10904
-                "\u0000\uE2DD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10905 - 10909
-                "\u0000\uE2DB\u8EA2\uC1BA\u8EA2\uC1AB\u8EA2\uC1AE\u8EA2\uC1B7" + // 10910 - 10914
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 10915 - 10919
-                "\u8EA2\uCFA2\u8EA2\uC8BD\u0000\u0000\u8EA2\uC8B6\u8EA2\uC8C9" + // 10920 - 10924
-                "\u8EA2\uC8D2\u8EA2\uC8B9\u0000\uE7C9\u0000\u0000\u8EA2\uC8C6" + // 10925 - 10929
-                "\u0000\uE7BF\u0000\uE7C1\u0000\uE7CD\u8EA2\uC8B7\u0000\u0000" + // 10930 - 10934
-                "\u0000\u0000\u0000\uE7C2\u0000\uE7C4\u0000\uE7CE\u0000\uFCEE" + // 10935 - 10939
-                "\u0000\uFDAA\u8EA2\uF0D7\u8EA2\uF1E0\u0000\u0000\u0000\uFDBC" + // 10940 - 10944
-                "\u0000\uCBDD\u0000\uCFD9\u0000\u0000\u0000\uE7BE\u0000\u0000" + // 10945 - 10949
-                "\u0000\uFACB\u0000\uCBDE\u0000\uD3EC\u0000\uDDE9\u0000\uE2D8" + // 10950 - 10954
-                "\u0000\uF7D2\u0000\uCFDA\u0000\u0000\u8EA2\uADE2\u8EA2\uADE1" + // 10955 - 10959
-                "\u8EA2\uB3C5\u0000\u0000\u0000\uD8DD\u0000\uD8DB\u0000\uD8DF" + // 10960 - 10964
-                "\u8EA2\uB3C7\u0000\u0000\u0000\uD8DE\u0000\uD8DC\u0000\u0000" + // 10965 - 10969
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uB3C6\u0000\uDDEC" + // 10970 - 10974
-                "\u8EA2\uBAA1\u0000\u0000\u0000\uDDEB\u0000\uDDED\u8EA2\uBAA6" + // 10975 - 10979
-                "\u0000\uDDEF\u8EA2\uBAA3\u8EA2\uBAA4\u8EA2\uB9FA\u0000\uDDEE" + // 10980 - 10984
-                "\u8EA2\uBAA7\u0000\u0000\u0000\u0000\u8EA2\uB9FC\u0000\u0000" + // 10985 - 10989
-                "\u8EA2\uB9FD\u8EA2\uB9FB\u0000\uDDEA\u0000\u0000\u8EA2\uBAA5" + // 10990 - 10994
-                "\u8EA2\uB9FE\u8EA2\uBAA2\u0000\u0000\u0000\u0000\u0000\u0000" + // 10995 - 10999
-                "\u8EA2\uC1B4\u0000\u0000\u8EA2\uC1B3\u8EA2\uD5AB\u8EA2\uD5A8" + // 11000 - 11004
-                "\u8EA2\uD5A9\u0000\uEFD7\u8EA2\uD5AA\u8EA2\uD5A5\u8EA2\uD5A6" + // 11005 - 11009
-                "\u0000\uEFD4\u0000\u0000\u0000\uEFD5\u8EA2\uD5A7\u0000\uEFD6" + // 11010 - 11014
-                "\u0000\u0000\u8EA2\uDBA9\u0000\u0000\u8EA2\uDBAA\u8EA2\uDBA7" + // 11015 - 11019
-                "\u8EA2\uDBA8\u0000\uF2DE\u8EA2\uDBA6\u0000\u0000\u0000\u0000" + // 11020 - 11024
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uDFF4\u8EA2\uDFF1" + // 11025 - 11029
-                "\u8EA2\uDFF3\u0000\uF5EB\u8EA2\uDFF7\u0000\uF5EA\u8EA2\uDFF5" + // 11030 - 11034
-                "\u8EA2\uDFF8\u8EA2\uDFF6\u8EA2\uDFF2\u0000\uF5E9\u0000\u0000" + // 11035 - 11039
-                "\u8EA2\uE3F9\u0000\u0000\u8EA2\uE3FA\u8EA2\uE3F8\u0000\u0000" + // 11040 - 11044
-                "\u8EA2\uE3FC\u0000\uF7D0\u0000\uF7D1\u8EA2\uE7CB\u0000\uF9B4" + // 11045 - 11049
-                "\u8EA2\uE3FB\u8EA2\uE7CA\u0000\uF9B3\u8EA2\uEAB3\u8EA2\uEAB4" + // 11050 - 11054
-                "\u0000\uFACA\u8EA2\uEAB2\u0000\u0000\u8EA2\uEAB1\u0000\u0000" + // 11055 - 11059
-                "\u8EA2\uECCC\u0000\uFBB4\u0000\u0000\u8EA2\uEFD7\u8EA2\uF0D6" + // 11060 - 11064
-                "\u8EA2\uF0D5\u0000\u0000\u0000\uA5BE\u0000\uA5BF\u0000\u0000" + // 11065 - 11069
-                "\u0000\uA5C0\u0000\uA5C1\u0000\uA5C2\u0000\uA5C3\u0000\uA5C4" + // 11070 - 11074
-                "\u0000\uA5C5\u0000\uA5C6\u0000\u0000\u0000\u0000\u0000\u0000" + // 11075 - 11079
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11080 - 11084
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11085 - 11089
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11090 - 11094
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11095 - 11099
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11100 - 11104
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11105 - 11109
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11110 - 11114
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11115 - 11119
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11120 - 11124
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11125 - 11129
-                "\u0000\u0000\u0000\u0000\u0000\uCFDB\u0000\u0000\u0000\u0000" + // 11130 - 11134
-                "\u8EA2\uBAA8\u8EA2\uC1BF\u8EA2\uD5CE\u8EA2\uE7E3\u0000\u0000" + // 11135 - 11139
-                "\u0000\u0000\u0000\uCEFC\u0000\uD2DA\u8EA2\uACC1\u0000\uD2DB" + // 11140 - 11144
-                "\u0000\uD2D9\u0000\u0000\u0000\uD2D8\u8EA2\uB1AF\u0000\uD6F4" + // 11145 - 11149
-                "\u0000\u0000\u0000\u0000\u0000\uD6F5\u0000\uD6F6\u0000\u0000" + // 11150 - 11154
-                "\u0000\u0000\u0000\u0000\u0000\uDCB5\u8EA2\uB7CA\u0000\uDCB4" + // 11155 - 11159
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11160 - 11164
-                "\u8EA2\uBEBD\u0000\uDCB6\u0000\uE0F9\u8EA2\uC5BD\u0000\uE5C0" + // 11165 - 11169
-                "\u0000\uE5C1\u0000\u0000\u0000\uE9F0\u0000\u0000\u0000\uE9F1" + // 11170 - 11174
-                "\u0000\uEDF5\u0000\uF1CE\u8EA2\uD8E1\u0000\uF1CD\u0000\u0000" + // 11175 - 11179
-                "\u8EA2\uDDE5\u0000\uF4C5\u0000\u0000\u8EA2\uE2C0\u8EA2\uE9C2" + // 11180 - 11184
-                "\u0000\uC6F8\u0000\uCBB1\u8EA2\uA8BA\u8EA2\uA8B9\u0000\uCEFD" + // 11185 - 11189
-                "\u8EA2\uA8B8\u0000\uCEFE\u8EA2\uA8BB\u0000\u0000\u8EA2\uACC7" + // 11190 - 11194
-                "\u0000\uD2DE\u0000\uD2DD\u8EA2\uACC9\u8EA2\uACC8\u0000\uD2E2" + // 11195 - 11199
-                "\u0000\u0000\u0000\uD2E1\u0000\u0000\u8EA2\uD7A9\u0000\uF3DD" + // 11200 - 11204
-                "\u8EA2\uDCEA\u0000\u0000\u8EA2\uD7A6\u8EA2\uD7A8\u0000\uF3DE" + // 11205 - 11209
-                "\u0000\uF0DC\u0000\uF3DC\u0000\uF0DB\u0000\uF3E0\u8EA2\uD7AA" + // 11210 - 11214
-                "\u0000\uF0D8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11215 - 11219
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uE1DB" + // 11220 - 11224
-                "\u0000\u0000\u8EA2\uE1D3\u0000\u0000\u0000\u0000\u0000\u0000" + // 11225 - 11229
-                "\u0000\u0000\u0000\u0000\u8EA2\uDCF2\u8EA2\uE1D4\u8EA2\uDCEE" + // 11230 - 11234
-                "\u0000\u0000\u0000\u0000\u0000\uF6C2\u8EA2\uDCF0\u8EA2\uDCEF" + // 11235 - 11239
-                "\u0000\uF3DF\u8EA2\uDCED\u8EA2\uDCF1\u8EA2\uE1DC\u8EA2\uE1D8" + // 11240 - 11244
-                "\u8EA2\uE1DA\u0000\u0000\u8EA2\uE1D5\u8EA2\uE1D6\u0000\u0000" + // 11245 - 11249
-                "\u8EA2\uE1D9\u8EA2\uE1D7\u0000\uF8B4\u0000\u0000\u0000\u0000" + // 11250 - 11254
-                "\u0000\uF8B7\u0000\uF8B6\u0000\uF8B5\u0000\uF9EC\u8EA2\uE8F6" + // 11255 - 11259
-                "\u0000\uF9ED\u8EA2\uE5CC\u0000\uFAEA\u8EA2\uEBDA\u0000\uFAEB" + // 11260 - 11264
-                "\u0000\uFBE0\u8EA2\uE7C8\u8EA2\uEAB0\u0000\u0000\u8EA2\uEAAF" + // 11265 - 11269
-                "\u8EA2\uECCA\u8EA2\uECCB\u8EA2\uECC9\u8EA2\uEEB5\u0000\uFBFA" + // 11270 - 11274
-                "\u0000\uCBDC\u0000\uD3EB\u0000\uD3EA\u0000\uD8DA\u0000\uD8D9" + // 11275 - 11279
-                "\u8EA2\uB3C3\u8EA2\uB3C4\u8EA2\uB3C2\u0000\u0000\u0000\uD8D8" + // 11280 - 11284
-                "\u8EA2\uB9F8\u0000\u0000\u8EA2\uB9F9\u8EA2\uB9F5\u0000\uDDE8" + // 11285 - 11289
-                "\u8EA2\uB9F6\u0000\u0000\u8EA2\uB9F7\u0000\u0000\u0000\u0000" + // 11290 - 11294
-                "\u0000\u0000\u0000\u0000\u8EA2\uC1A6\u8EA2\uC1A8\u8EA2\uC1A4" + // 11295 - 11299
-                "\u8EA2\uC1A7\u0000\uE2D6\u8EA2\uC1A5\u0000\uE2D7\u0000\u0000" + // 11300 - 11304
-                "\u0000\u0000\u8EA2\uC2F9\u0000\uE7BD\u0000\uE7BC\u0000\u0000" + // 11305 - 11309
-                "\u0000\uE7BB\u0000\u0000\u8EA2\uC8B2\u8EA2\uC8B3\u0000\u0000" + // 11310 - 11314
-                "\u0000\u0000\u8EA2\uCEDB\u8EA2\uCEDD\u0000\uEBCE\u0000\uEBCB" + // 11315 - 11319
-                "\u0000\u0000\u0000\uEBCD\u0000\uEBCC\u8EA2\uCEDC\u8EA2\uCEDA" + // 11320 - 11324
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11325 - 11329
-                "\u0000\uD9B6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11330 - 11334
-                "\u0000\uC4B4\u0000\uC4C6\u0000\uC5AF\u0000\uC5AE\u0000\u0000" + // 11335 - 11339
-                "\u0000\uC5B0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11340 - 11344
-                "\u0000\u0000\u0000\u0000\u0000\uCCBE\u0000\u0000\u0000\uCCBD" + // 11345 - 11349
-                "\u0000\uCCBF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD0B5" + // 11350 - 11354
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD4D1\u0000\u0000" + // 11355 - 11359
-                "\u8EA2\uD6C6\u0000\uF6BB\u0000\uC4C7\u0000\uC6AC\u0000\uC6BB" + // 11360 - 11364
-                "\u0000\uC6B6\u0000\u0000\u0000\uC6B1\u0000\uC6B0\u0000\uC6B7" + // 11365 - 11369
-                "\u0000\uC6B5\u0000\uC6AE\u0000\uC6BC\u0000\uC6AF\u0000\uC6AB" + // 11370 - 11374
-                "\u0000\uC6BA\u0000\uC6B9\u0000\uC6B8\u0000\uC6AD\u0000\u0000" + // 11375 - 11379
-                "\u0000\uC6B4\u0000\u0000\u0000\u0000\u0000\uC6B3\u0000\u0000" + // 11380 - 11384
-                "\u0000\u0000\u0000\uC6BD\u0000\uC6B2\u0000\u0000\u0000\u0000" + // 11385 - 11389
-                "\u0000\u0000\u0000\uF6D3\u0000\uF6D0\u0000\u0000\u8EA2\uE1E9" + // 11390 - 11394
-                "\u8EA2\uE1ED\u8EA2\uE1F1\u0000\u0000\u0000\u0000\u0000\u0000" + // 11395 - 11399
-                "\u8EA2\uE5DC\u8EA2\uE5D9\u8EA2\uE5E2\u0000\u0000\u8EA2\uE5E1" + // 11400 - 11404
-                "\u8EA2\uE5DF\u8EA2\uE5DA\u0000\u0000\u0000\uF8BF\u0000\u0000" + // 11405 - 11409
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uE5DB" + // 11410 - 11414
-                "\u0000\uF8BE\u0000\uF3F6\u8EA2\uE5DE\u0000\uF8BD\u8EA2\uE5E3" + // 11415 - 11419
-                "\u8EA2\uE5DD\u8EA2\uE5D8\u8EA2\uE1EC\u0000\u0000\u0000\u0000" + // 11420 - 11424
-                "\u0000\u0000\u0000\uF8BC\u0000\u0000\u8EA2\uE5D7\u8EA2\uE9A4" + // 11425 - 11429
-                "\u0000\u0000\u8EA2\uE9A3\u8EA2\uE5E0\u0000\uF9F3\u0000\u0000" + // 11430 - 11434
-                "\u8EA2\uE9A7\u8EA2\uE9A8\u8EA2\uE9A2\u8EA2\uE9A6\u0000\u0000" + // 11435 - 11439
-                "\u8EA2\uE9A1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11440 - 11444
-                "\u8EA2\uEBDF\u8EA2\uE9A5\u0000\uFAF2\u0000\uFAF0\u8EA2\uEBDD" + // 11445 - 11449
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDDA\u0000\u0000" + // 11450 - 11454
-                "\u0000\uCDD8\u0000\u0000\u0000\uCDF0\u0000\uCDE8\u0000\uCDE2" + // 11455 - 11459
-                "\u0000\uCDD6\u8EA2\uA6F8\u0000\uCDE1\u0000\uCDD7\u0000\uCDE9" + // 11460 - 11464
-                "\u0000\uCDF2\u8EA2\uAAD5\u0000\uCDE6\u8EA2\uA6F4\u0000\uCDDC" + // 11465 - 11469
-                "\u0000\uCDDF\u0000\uCDE0\u0000\u0000\u0000\uCDEE\u0000\uCDEF" + // 11470 - 11474
-                "\u0000\uCDED\u0000\uCDE7\u0000\uCDEB\u0000\uCDDD\u0000\uD1B8" + // 11475 - 11479
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11480 - 11484
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11485 - 11489
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uAADB" + // 11490 - 11494
-                "\u0000\uD1C4\u0000\uD1BC\u0000\uD1BE\u0000\uD1C3\u8EA2\uAAE7" + // 11495 - 11499
-                "\u0000\uD1C1\u8EA2\uAFB3\u0000\uD5D3\u0000\uD1C6\u8EA2\uAAD8" + // 11500 - 11504
-                "\u8EA2\uAAE0\u0000\uD1C2\u8EA2\uAADF\u8EA2\uAADC\u8EA2\uAAE4" + // 11505 - 11509
-                "\u8EA2\uAAE6\u0000\uD1BB\u0000\uD1BF\u0000\uD1C5\u0000\uD5D5" + // 11510 - 11514
-                "\u8EA2\uC0FE\u8EA2\uC0FD\u0000\uE2D2\u8EA2\uC1A3\u8EA2\uC0F7" + // 11515 - 11519
-                "\u8EA2\uC1A2\u8EA2\uC0F5\u8EA2\uC1A1\u8EA2\uC0FA\u0000\uE2D4" + // 11520 - 11524
-                "\u0000\u0000\u8EA2\uC8B0\u0000\u0000\u8EA2\uC8AB\u8EA2\uC8B1" + // 11525 - 11529
-                "\u8EA2\uC8AC\u8EA2\uC8AA\u8EA2\uC8AD\u0000\uE7B9\u0000\u0000" + // 11530 - 11534
-                "\u8EA2\uC8AF\u0000\u0000\u8EA2\uC8AE\u0000\uE7BA\u0000\uEBC9" + // 11535 - 11539
-                "\u0000\uEBC8\u8EA2\uCED6\u8EA2\uCED9\u8EA2\uCED1\u8EA2\uCED5" + // 11540 - 11544
-                "\u0000\uEBCA\u8EA2\uCED4\u8EA2\uCED2\u8EA2\uCED8\u8EA2\uCED3" + // 11545 - 11549
-                "\u8EA2\uCED0\u8EA2\uCED7\u0000\u0000\u8EA2\uD5A3\u0000\uEFD2" + // 11550 - 11554
-                "\u8EA2\uE3F4\u8EA2\uD4FE\u8EA2\uD5A1\u8EA2\uD4FD\u8EA2\uC0F6" + // 11555 - 11559
-                "\u0000\uEFD1\u8EA2\uD5A4\u8EA2\uD4FC\u0000\uEFD0\u0000\uEFD3" + // 11560 - 11564
-                "\u8EA2\uD5A2\u8EA2\uDBA3\u0000\uF2DD\u8EA2\uDBA4\u8EA2\uDBA5" + // 11565 - 11569
-                "\u0000\u0000\u8EA2\uDFF0\u0000\uF5E8\u8EA2\uE3F5\u8EA2\uE3F6" + // 11570 - 11574
-                "\u0000\u0000\u0000\u0000\u8EA2\uE3F7\u8EA2\uE7C9\u0000\uF5E7" + // 11575 - 11579
-                "\u0000\uF5E5\u0000\uF5E6\u0000\uF7CE\u0000\uF5E4\u8EA2\uDFEE" + // 11580 - 11584
-                "\u8EA2\uDBA1\u0000\uF7CD\u0000\uF7CF\u0000\u0000\u0000\uF9B1" + // 11585 - 11589
-                "\u0000\uF9B2\u0000\u0000\u8EA2\uEAAE\u0000\u0000\u0000\uFCCA" + // 11590 - 11594
-                "\u0000\uFCC9\u0000\uCBD7\u0000\u0000\u0000\u0000\u8EA2\uA2F5" + // 11595 - 11599
-                "\u0000\uD8D4\u0000\u0000\u8EA2\uA2F2\u8EA2\uA2F3\u8EA2\uA2F1" + // 11600 - 11604
-                "\u0000\u0000\u8EA2\uA2F4\u0000\u0000\u0000\u0000\u8EA2\uA5AA" + // 11605 - 11609
-                "\u8EA2\uA5A7\u8EA2\uA5AC\u8EA2\uA5A8\u0000\uCBD8\u0000\uCBDB" + // 11610 - 11614
-                "\u0000\u0000\u8EA2\uA5A9\u0000\uCBDA\u8EA2\uA5AB\u0000\u0000" + // 11615 - 11619
-                "\u0000\u0000\u0000\uCBD9\u0000\u0000\u0000\u0000\u0000\u0000" + // 11620 - 11624
-                "\u0000\u0000\u8EA2\uA8F5\u8EA2\uA8F7\u0000\uCFD7\u8EA2\uA8F3" + // 11625 - 11629
-                "\u8EA2\uA8F6\u8EA2\uA8F4\u0000\uCFD5\u0000\uCFD8\u0000\u0000" + // 11630 - 11634
-                "\u0000\uCFD6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11635 - 11639
-                "\u8EA2\uADD9\u8EA2\uADDD\u8EA2\uADDA\u0000\uD8CD\u0000\uD8CA" + // 11640 - 11644
-                "\u8EA2\uB3B0\u0000\uD8D0\u8EA2\uB3B3\u0000\uD8D2\u0000\uD8CB" + // 11645 - 11649
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uB9E6" + // 11650 - 11654
-                "\u8EA2\uB9E9\u0000\uDDD6\u0000\u0000\u0000\uDDE0\u0000\uDDDC" + // 11655 - 11659
-                "\u8EA2\uB9E7\u0000\u0000\u0000\u0000\u0000\uDDE4\u0000\uDDDD" + // 11660 - 11664
-                "\u0000\uDDE2\u0000\uDDD8\u0000\u0000\u0000\uDDD5\u0000\uDDD7" + // 11665 - 11669
-                "\u0000\uDDE3\u8EA2\uB9E8\u0000\uDDDB\u0000\uDDDE\u0000\uDDDA" + // 11670 - 11674
-                "\u0000\uDDDF\u8EA2\uB9EA\u0000\uDDE1\u0000\uDDD9\u8EA2\uB9E5" + // 11675 - 11679
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11680 - 11684
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC0F2\u0000\uE2CC" + // 11685 - 11689
-                "\u8EA2\uC0F4\u0000\u0000\u0000\uE2CE\u0000\uE2D0\u0000\u0000" + // 11690 - 11694
-                "\u8EA2\uC0F3\u0000\uE2CD\u0000\uE2D1\u0000\u0000\u0000\uE2CF" + // 11695 - 11699
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7AF\u8EA2\uC8A9" + // 11700 - 11704
-                "\u0000\uE7B7\u8EA2\uC8A6\u8EA2\uDFED\u0000\u0000\u0000\uF5DF" + // 11705 - 11709
-                "\u8EA2\uDFEC\u0000\uF5DD\u0000\uF5E0\u8EA2\uE3F0\u8EA2\uE3F1" + // 11710 - 11714
-                "\u8EA2\uE3F2\u0000\uF7CB\u0000\u0000\u8EA2\uE3F3\u0000\u0000" + // 11715 - 11719
-                "\u0000\uF7CC\u0000\uF9AF\u8EA2\uE7C4\u8EA2\uE7C5\u8EA2\uE7C3" + // 11720 - 11724
-                "\u8EA2\uE7C2\u8EA2\uE7C6\u0000\uF9AE\u8EA2\uEAAB\u8EA2\uEAA9" + // 11725 - 11729
-                "\u8EA2\uEAAA\u8EA2\uEAAC\u8EA2\uEAA8\u8EA2\uEAAD\u8EA2\uECC7" + // 11730 - 11734
-                "\u0000\u0000\u8EA2\uECC8\u8EA2\uECC6\u0000\uFBB2\u8EA2\uEEB3" + // 11735 - 11739
-                "\u0000\uFBF9\u8EA2\uEEB4\u8EA2\uEFD6\u8EA2\uEFD5\u0000\u0000" + // 11740 - 11744
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11745 - 11749
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11750 - 11754
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11755 - 11759
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11760 - 11764
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11765 - 11769
-                "\u0000\u0000\u0000\uA2B2\u0000\u0000\u0000\u0000\u0000\u0000" + // 11770 - 11774
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11775 - 11779
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11780 - 11784
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11785 - 11789
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11790 - 11794
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11795 - 11799
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA2B3\u0000\u0000" + // 11800 - 11804
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 11805 - 11809
-                "\u0000\u0000\u0000\u0000\u0000\uE4B8\u0000\u0000\u0000\u0000" + // 11810 - 11814
-                "\u8EA2\uC3A4\u8EA2\uC3B7\u8EA2\uC3BC\u8EA2\uC3B0\u0000\uE4B4" + // 11815 - 11819
-                "\u8EA2\uC3C1\u0000\uE4B1\u8EA2\uC3A2\u0000\u0000\u8EA2\uC3A3" + // 11820 - 11824
-                "\u0000\uE4AA\u0000\uE4B3\u8EA2\uC3AA\u0000\uE4B6\u0000\uE4B7" + // 11825 - 11829
-                "\u8EA2\uC3AB\u0000\u0000\u8EA2\uC3B8\u8EA2\uC3BE\u0000\uE4B2" + // 11830 - 11834
-                "\u0000\u0000\u0000\uE4AC\u8EA2\uC3A9\u8EA2\uC3A5\u8EA2\uC3C0" + // 11835 - 11839
-                "\u8EA2\uC3AE\u8EA2\uC3AF\u8EA2\uC3A6\u8EA2\uC3BA\u8EA2\uC3B1" + // 11840 - 11844
-                "\u8EA2\uC3BB\u8EA2\uC3B3\u0000\u0000\u0000\uE4AD\u8EA2\uCAC0" + // 11845 - 11849
-                "\u0000\uE4B0\u0000\uE4AE\u8EA2\uC3BF\u8EA2\uC3B6\u8EA2\uC3B2" + // 11850 - 11854
-                "\u0000\u0000\u0000\u0000\u8EA2\uC3A7\u0000\uE8FA\u8EA2\uC3B5" + // 11855 - 11859
-                "\u0000\uE4B5\u8EA2\uC3AD\u0000\u0000\u8EA2\uC3AC\u0000\u0000" + // 11860 - 11864
-                "\u0000\u0000\u0000\u0000\u0000\uE4AF\u0000\uE4AB\u8EA2\uCAD5" + // 11865 - 11869
-                "\u8EA2\uC7FD\u8EA2\uC7FC\u8EA2\uC8A3\u0000\uE7A4\u0000\u0000" + // 11870 - 11874
-                "\u8EA2\uC7FE\u8EA2\uC7FA\u8EA2\uC8A1\u8EA2\uC8A2\u0000\uE7A5" + // 11875 - 11879
-                "\u0000\uE7A7\u8EA2\uC8A4\u0000\u0000\u8EA2\uCECF\u8EA2\uCECE" + // 11880 - 11884
-                "\u0000\u0000\u8EA2\uCECC\u8EA2\uCECD\u0000\uEBBB\u0000\uEBBD" + // 11885 - 11889
-                "\u0000\uEBBA\u0000\uEBBC\u8EA2\uD4F5\u8EA2\uD4F6\u8EA2\uD4F1" + // 11890 - 11894
-                "\u0000\u0000\u8EA2\uD4F2\u0000\uEFC3\u0000\uEFC8\u0000\uEFC2" + // 11895 - 11899
-                "\u0000\uEFC9\u0000\uEFC4\u8EA2\uD4F3\u0000\u0000\u0000\u0000" + // 11900 - 11904
-                "\u8EA2\uD4F4\u8EA2\uD4F0\u0000\uEFCA\u0000\uEFC6\u0000\u0000" + // 11905 - 11909
-                "\u0000\u0000\u0000\uEFC5\u0000\uEFC7\u0000\u0000\u8EA2\uD4EF" + // 11910 - 11914
-                "\u0000\u0000\u8EA2\uDAF6\u0000\uF2D2\u0000\u0000\u0000\u0000" + // 11915 - 11919
-                "\u8EA2\uDAF8\u0000\uF2D4\u8EA2\uDAFB\u8EA2\uDAF7\u8EA2\uDAF5" + // 11920 - 11924
-                "\u8EA2\uDAFA\u0000\uF2D3\u8EA2\uDAF9\u0000\u0000\u0000\uF2D1" + // 11925 - 11929
-                "\u0000\u0000\u0000\u0000\u0000\uF5DE\u0000\uF5E1\u0000\uF7CA" + // 11930 - 11934
-                "\u0000\u0000\u8EA2\uE7C1\u0000\u0000\u0000\u0000\u0000\u0000" + // 11935 - 11939
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uF1FA\u0000\uCBCF" + // 11940 - 11944
-                "\u0000\uCFD1\u0000\uD3DC\u0000\uD3DB\u0000\u0000\u0000\uD8C8" + // 11945 - 11949
-                "\u0000\u0000\u8EA2\uB3AC\u0000\uD8C6\u8EA2\uB3AD\u0000\uD8C7" + // 11950 - 11954
-                "\u0000\u0000\u0000\u0000\u8EA2\uB9E2\u8EA2\uB9DE\u0000\u0000" + // 11955 - 11959
-                "\u0000\u0000\u0000\uDDD3\u8EA2\uB9E1\u8EA2\uB9E0\u8EA2\uB9DF" + // 11960 - 11964
-                "\u0000\uDDD4\u8EA2\uB9E3\u8EA2\uB9E4\u0000\u0000\u0000\u0000" + // 11965 - 11969
-                "\u0000\u0000\u8EA2\uC0E8\u8EA2\uC0E6\u8EA2\uC0EA\u8EA2\uC0EB" + // 11970 - 11974
-                "\u8EA2\uC0F1\u0000\u0000\u8EA2\uC0ED\u8EA2\uC0EF\u0000\u0000" + // 11975 - 11979
-                "\u8EA2\uC0E7\u8EA2\uC0E2\u0000\u0000\u8EA2\uC0EE\u0000\u0000" + // 11980 - 11984
-                "\u0000\u0000\u8EA2\uC0F0\u8EA2\uC0E9\u8EA2\uC0EC\u8EA2\uC0E3" + // 11985 - 11989
-                "\u0000\uE2C9\u8EA2\uC0E5\u8EA2\uC0E4\u0000\uE2C8\u0000\uE2CA" + // 11990 - 11994
-                "\u0000\u0000\u0000\uE7A6\u8EA2\uC7FB\u8EA2\uDAEC\u8EA2\uDAF1" + // 11995 - 11999
-                "\u0000\uF2CE\u0000\u0000\u0000\uF2CB\u8EA2\uDAED\u0000\u0000" + // 12000 - 12004
-                "\u8EA2\uDFEB\u0000\uF5DB\u0000\uF5D9\u0000\uF5DC\u0000\uF5DA" + // 12005 - 12009
-                "\u8EA2\uDFEA\u8EA2\uDFE7\u8EA2\uDFE6\u0000\u0000\u8EA2\uDFE9" + // 12010 - 12014
-                "\u0000\u0000\u0000\u0000\u8EA2\uDFE8\u8EA2\uE3EF\u0000\uF7C9" + // 12015 - 12019
-                "\u8EA2\uE3E6\u8EA2\uE3E5\u0000\u0000\u0000\uF7C4\u8EA2\uE3EB" + // 12020 - 12024
-                "\u8EA2\uE3EA\u8EA2\uE3E2\u8EA2\uE3ED\u8EA2\uE3E7\u0000\uF7C8" + // 12025 - 12029
-                "\u8EA2\uE3E4\u8EA2\uE3EC\u8EA2\uE3E3\u0000\uF7C5\u0000\uF7C7" + // 12030 - 12034
-                "\u8EA2\uE3E8\u0000\uF7C6\u8EA2\uE3E9\u0000\u0000\u8EA2\uE3EE" + // 12035 - 12039
-                "\u8EA2\uE7BE\u0000\u0000\u0000\uF9AB\u8EA2\uE7BB\u0000\u0000" + // 12040 - 12044
-                "\u8EA2\uE7BF\u0000\u0000\u0000\u0000\u0000\uF9A8\u8EA2\uE7BD" + // 12045 - 12049
-                "\u0000\uF9AD\u0000\u0000\u0000\uF9AA\u0000\u0000\u8EA2\uE7BC" + // 12050 - 12054
-                "\u0000\u0000\u0000\uF9AC\u8EA2\uE7C0\u0000\uF9A7\u0000\u0000" + // 12055 - 12059
-                "\u0000\u0000\u0000\u0000\u0000\uE4CD\u8EA2\uC5AC\u0000\u0000" + // 12060 - 12064
-                "\u0000\u0000\u0000\uE4D4\u0000\u0000\u0000\u0000\u0000\u0000" + // 12065 - 12069
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uCAF0\u8EA2\uCAEE" + // 12070 - 12074
-                "\u0000\u0000\u8EA2\uCBA6\u8EA2\uCAEC\u0000\u0000\u8EA2\uCAFE" + // 12075 - 12079
-                "\u0000\uE4C5\u0000\uE9A8\u8EA2\uCAE8\u8EA2\uCBA5\u0000\u0000" + // 12080 - 12084
-                "\u8EA2\uCAED\u8EA2\uCAFB\u0000\uE9AD\u0000\uE9A6\u0000\u0000" + // 12085 - 12089
-                "\u8EA2\uCBA3\u0000\u0000\u8EA2\uCAE6\u8EA2\uCBA2\u0000\u0000" + // 12090 - 12094
-                "\u0000\uE9B8\u8EA2\uCAF7\u8EA2\uCBA9\u0000\uE9B6\u8EA2\uCAEF" + // 12095 - 12099
-                "\u0000\uE9A7\u8EA2\uCAF1\u8EA2\uCBA1\u0000\uE9B0\u8EA2\uCAEA" + // 12100 - 12104
-                "\u0000\uE9B4\u0000\uE9AA\u8EA2\uCAF3\u8EA2\uCAE9\u8EA2\uCAE3" + // 12105 - 12109
-                "\u0000\u0000\u8EA2\uCAFD\u0000\uE9B1\u8EA2\uCBA8\u8EA2\uCAE4" + // 12110 - 12114
-                "\u0000\uE9AE\u0000\u0000\u8EA2\uCAF9\u0000\u0000\u0000\uE9AF" + // 12115 - 12119
-                "\u8EA2\uCAEB\u8EA2\uCAF6\u8EA2\uCAF2\u8EA2\uCAF4\u8EA2\uCECA" + // 12120 - 12124
-                "\u0000\u0000\u8EA2\uCEC0\u8EA2\uCEC5\u8EA2\uCECB\u8EA2\uCEC8" + // 12125 - 12129
-                "\u8EA2\uCEC7\u8EA2\uCEC6\u0000\u0000\u8EA2\uCEBF\u8EA2\uCEC4" + // 12130 - 12134
-                "\u0000\u0000\u0000\u0000\u8EA2\uCEC2\u0000\u0000\u0000\uEFBC" + // 12135 - 12139
-                "\u0000\uEFB9\u8EA2\uD4E4\u8EA2\uD4E9\u8EA2\uD4EB\u8EA2\uD4E8" + // 12140 - 12144
-                "\u8EA2\uD4E1\u8EA2\uD4E3\u8EA2\uD4ED\u8EA2\uD4EA\u8EA2\uD4E5" + // 12145 - 12149
-                "\u8EA2\uD4EE\u8EA2\uD4E2\u8EA2\uD4EC\u0000\uEFBA\u0000\uEFC0" + // 12150 - 12154
-                "\u0000\uEFBE\u8EA2\uD4DC\u0000\uEFBF\u0000\uEFBB\u8EA2\uD4DD" + // 12155 - 12159
-                "\u8EA2\uD4DF\u8EA2\uD4DE\u8EA2\uD4E6\u8EA2\uD4E7\u0000\u0000" + // 12160 - 12164
-                "\u0000\uEFBD\u0000\u0000\u0000\uEFB8\u0000\u0000\u0000\u0000" + // 12165 - 12169
-                "\u8EA2\uD4E0\u0000\u0000\u8EA2\uDAF2\u0000\uF2CC\u0000\u0000" + // 12170 - 12174
-                "\u8EA2\uDAE9\u0000\uF2CD\u0000\uF2D0\u8EA2\uDAEE\u0000\u0000" + // 12175 - 12179
-                "\u8EA2\uDAEB\u0000\uF2CF\u0000\u0000\u0000\u0000\u8EA2\uDAEF" + // 12180 - 12184
-                "\u8EA2\uDAF0\u8EA2\uDAEA\u8EA2\uDAF3\u8EA2\uC0D4\u0000\uE2BF" + // 12185 - 12189
-                "\u0000\u0000\u0000\u0000\u8EA2\uC0D3\u0000\uE2BE\u0000\u0000" + // 12190 - 12194
-                "\u0000\u0000\u0000\u0000\u8EA2\uC0D5\u0000\uE2BD\u0000\u0000" + // 12195 - 12199
-                "\u8EA2\uC7E5\u8EA2\uC7E8\u8EA2\uC7E6\u8EA2\uC7E7\u8EA2\uC7EB" + // 12200 - 12204
-                "\u8EA2\uC7E4\u8EA2\uC7EC\u8EA2\uC7E9\u8EA2\uC7EA\u0000\uEBB8" + // 12205 - 12209
-                "\u8EA2\uCEBE\u0000\u0000\u0000\u0000\u0000\uEBB7\u0000\u0000" + // 12210 - 12214
-                "\u8EA2\uD4DB\u8EA2\uD4D9\u0000\u0000\u0000\u0000\u0000\uEFB6" + // 12215 - 12219
-                "\u8EA2\uD4D8\u8EA2\uD4DA\u0000\u0000\u0000\uEFB7\u0000\u0000" + // 12220 - 12224
-                "\u8EA2\uDAE7\u0000\u0000\u8EA2\uDAE8\u0000\uF5D8\u0000\u0000" + // 12225 - 12229
-                "\u8EA2\uE7B8\u8EA2\uE7BA\u8EA2\uE7B7\u8EA2\uE7B9\u8EA2\uEAA4" + // 12230 - 12234
-                "\u8EA2\uECC3\u0000\u0000\u0000\u0000\u8EA2\uF1DE\u0000\uCBCD" + // 12235 - 12239
-                "\u0000\uD3DA\u8EA2\uB3A9\u8EA2\uB3AB\u8EA2\uB3AA\u0000\u0000" + // 12240 - 12244
-                "\u8EA2\uB9DB\u0000\uDDD2\u0000\u0000\u8EA2\uB9D9\u0000\u0000" + // 12245 - 12249
-                "\u0000\uDDD1\u8EA2\uB9DC\u8EA2\uE3E1\u0000\u0000\u8EA2\uE3E0" + // 12250 - 12254
-                "\u0000\u0000\u8EA2\uE3DF\u0000\uF7C3\u8EA2\uE7B4\u8EA2\uE7B5" + // 12255 - 12259
-                "\u0000\uF9A5\u8EA2\uE7B6\u0000\uF9A6\u0000\u0000\u0000\u0000" + // 12260 - 12264
-                "\u0000\uFAC5\u0000\u0000\u0000\uFAC4\u8EA2\uECC1\u0000\u0000" + // 12265 - 12269
-                "\u0000\u0000\u0000\uFBAE\u8EA2\uECC2\u8EA2\uEEAB\u0000\uFBF5" + // 12270 - 12274
-                "\u0000\uFBF6\u0000\u0000\u8EA2\uEFD3\u0000\u0000\u0000\uFCED" + // 12275 - 12279
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12280 - 12284
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12285 - 12289
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12290 - 12294
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12295 - 12299
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12300 - 12304
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12305 - 12309
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12310 - 12314
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12315 - 12319
-                "\u0000\uD8EC\u0000\u0000\u0000\u0000\u8EA2\uC8EF\u0000\u0000" + // 12320 - 12324
-                "\u8EA2\uC8EE\u0000\u0000\u0000\uEBF3\u0000\uEBF4\u8EA2\uCFC2" + // 12325 - 12329
-                "\u0000\u0000\u8EA2\uD5FB\u8EA2\uDBF8\u0000\u0000\u0000\u0000" + // 12330 - 12334
-                "\u0000\uEFFE\u0000\uF3B0\u8EA2\uDBF6\u0000\u0000\u8EA2\uDBF9" + // 12335 - 12339
-                "\u0000\uF3B1\u0000\u0000\u8EA2\uE0F0\u8EA2\uDBF7\u0000\uE2B7" + // 12340 - 12344
-                "\u0000\uE2B5\u0000\uE6F6\u0000\uE6F5\u0000\uE6F3\u0000\uE6F7" + // 12345 - 12349
-                "\u0000\u0000\u0000\uE6F1\u0000\uE6F2\u0000\u0000\u0000\uE6F0" + // 12350 - 12354
-                "\u0000\u0000\u8EA2\uC7E1\u0000\u0000\u0000\u0000\u8EA2\uCEBC" + // 12355 - 12359
-                "\u0000\u0000\u0000\uEBB4\u0000\uEBB5\u0000\uEBB3\u0000\u0000" + // 12360 - 12364
-                "\u8EA2\uCEBB\u0000\u0000\u8EA2\uCEBD\u0000\u0000\u8EA2\uD4D3" + // 12365 - 12369
-                "\u8EA2\uD4D5\u0000\u0000\u0000\uEFB2\u8EA2\uD4D6\u0000\uEFAB" + // 12370 - 12374
-                "\u8EA2\uD4D2\u0000\uEFAA\u0000\uEFB4\u0000\uEFB0\u0000\uEFB1" + // 12375 - 12379
-                "\u0000\uEFAD\u8EA2\uD4D1\u0000\uEFAC\u8EA2\uD4D7\u8EA2\uD4D4" + // 12380 - 12384
-                "\u0000\u0000\u0000\uEFB3\u0000\u0000\u0000\uEFAE\u0000\uEFAF" + // 12385 - 12389
-                "\u8EA2\uDAE1\u0000\u0000\u8EA2\uDAE3\u8EA2\uDAE2\u0000\u0000" + // 12390 - 12394
-                "\u8EA2\uDAE4\u0000\uF2CA\u8EA2\uDAE0\u0000\u0000\u0000\u0000" + // 12395 - 12399
-                "\u0000\uF5D6\u8EA2\uDFE4\u0000\uF5D3\u0000\uF5D7\u0000\uF5D5" + // 12400 - 12404
-                "\u0000\uF5D4\u8EA2\uE3DE\u0000\u0000\u0000\u0080\u0000\u0081" + // 12405 - 12409
-                "\u0000\u0082\u0000\u0083\u0000\u0084\u0000\u0085\u0000\u0086" + // 12410 - 12414
-                "\u0000\u0087\u0000\u0088\u0000\u0089\u0000\u008A\u0000\u008B" + // 12415 - 12419
-                "\u0000\u008C\u0000\u008D\u0000\u0000\u0000\u0000\u0000\u0090" + // 12420 - 12424
-                "\u0000\u0091\u0000\u0092\u0000\u0093\u0000\u0094\u0000\u0095" + // 12425 - 12429
-                "\u0000\u0096\u0000\u0097\u0000\u0098\u0000\u0099\u0000\u009A" + // 12430 - 12434
-                "\u0000\u009B\u0000\u009C\u0000\u009D\u0000\u009E\u0000\u009F" + // 12435 - 12439
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12440 - 12444
-                "\u0000\u0000\u0000\u0000\u0000\uA1F0\u8EAD\uA1A3\u0000\u0000" + // 12445 - 12449
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12450 - 12454
-                "\u0000\u0000\u0000\uA2F8\u0000\uA2B4\u0000\u0000\u0000\u0000" + // 12455 - 12459
-                "\u8EAD\uA1B2\u0000\u0000\u8EAD\uA1D1\u0000\uA1B1\u0000\u0000" + // 12460 - 12464
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12465 - 12469
-                "\u0000\u0000\u0000\u0000\u8EA2\uAAAC\u8EA2\uAAA5\u8EA2\uAAAB" + // 12470 - 12474
-                "\u8EA2\uAAA4\u8EA2\uAAA6\u8EA2\uA9FE\u8EA2\uA9FC\u0000\u0000" + // 12475 - 12479
-                "\u8EA2\uAAAD\u8EA2\uAAAA\u8EA2\uA9FA\u0000\u0000\u0000\uD0F2" + // 12480 - 12484
-                "\u8EA2\uAAA8\u8EA2\uAAA9\u0000\u0000\u8EA2\uAAA7\u8EA2\uA9FD" + // 12485 - 12489
-                "\u8EA2\uA9FB\u0000\uD0F1\u8EA2\uAAA3\u8EA2\uAAA1\u0000\u0000" + // 12490 - 12494
-                "\u0000\u0000\u8EA2\uAAA2\u8EA2\uAAAE\u0000\u0000\u0000\u0000" + // 12495 - 12499
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12500 - 12504
-                "\u0000\u0000\u0000\uD5B3\u0000\u0000\u0000\uD5B2\u0000\u0000" + // 12505 - 12509
-                "\u8EA2\uAEEE\u0000\uD5AF\u8EA2\uAEF0\u0000\u0000\u0000\uD5B4" + // 12510 - 12514
-                "\u8EA2\uAEF1\u0000\u0000\u0000\u0000\u0000\uD5B7\u0000\u0000" + // 12515 - 12519
-                "\u0000\uD5B5\u8EA2\uAEF2\u8EA2\uAAAF\u8EA2\uAEF4\u0000\u0000" + // 12520 - 12524
-                "\u0000\uD5B1\u0000\u0000\u0000\uD5B0\u0000\u0000\u8EA2\uAEEF" + // 12525 - 12529
-                "\u8EA2\uC0CD\u8EA2\uC0CC\u0000\uE2B0\u0000\u0000\u8EA2\uC7DF" + // 12530 - 12534
-                "\u8EA2\uC7E0\u8EA2\uC7DE\u0000\u0000\u0000\u0000\u0000\uE6EF" + // 12535 - 12539
-                "\u0000\uE6EE\u0000\u0000\u0000\uEBB2\u0000\uEBB1\u0000\u0000" + // 12540 - 12544
-                "\u8EA2\uD4D0\u8EA2\uDADF\u8EA2\uDADD\u8EA2\uDADE\u0000\uF2C9" + // 12545 - 12549
-                "\u8EA2\uDFE3\u8EA2\uDFE2\u0000\u0000\u8EA2\uE3DD\u8EA2\uE3DC" + // 12550 - 12554
-                "\u8EA2\uE3DB\u8EA2\uE7B3\u0000\u0000\u8EA2\uF1F8\u0000\uCBCA" + // 12555 - 12559
-                "\u0000\uD3D6\u0000\u0000\u0000\uD3D7\u0000\uD8C2\u0000\uD8C3" + // 12560 - 12564
-                "\u8EA2\uB3A6\u8EA2\uB3A5\u8EA2\uB9D5\u0000\u0000\u0000\uDDCE" + // 12565 - 12569
-                "\u0000\uDDCC\u0000\uDDC9\u0000\uDDCD\u0000\uDDCB\u0000\uDDCA" + // 12570 - 12574
-                "\u0000\u0000\u0000\u0000\u0000\uE2B1\u8EA2\uC0D0\u0000\u0000" + // 12575 - 12579
-                "\u0000\uE6F4\u0000\uE2B3\u0000\uE2B8\u8EA2\uC0D2\u0000\uE2BA" + // 12580 - 12584
-                "\u0000\uE2B9\u0000\uE2BC\u8EA2\uC0D1\u8EA2\uC0CE\u0000\uE2B6" + // 12585 - 12589
-                "\u0000\uE2B2\u0000\uE2B4\u8EA2\uC0CF\u0000\uE2BB\u0000\uFBF4" + // 12590 - 12594
-                "\u0000\u0000\u8EA2\uEEA7\u0000\u0000\u8EA2\uEEA6\u8EA2\uEEA9" + // 12595 - 12599
-                "\u8EA2\uEEA8\u0000\u0000\u8EA2\uEFD1\u0000\u0000\u0000\uFCC8" + // 12600 - 12604
-                "\u8EA2\uEFD0\u8EA2\uEFCE\u0000\u0000\u8EA2\uEFCF\u0000\u0000" + // 12605 - 12609
-                "\u0000\u0000\u0000\u0000\u0000\uFCEA\u0000\uFCE9\u8EA2\uF0CF" + // 12610 - 12614
-                "\u8EA2\uF0D0\u0000\uFCEB\u0000\u0000\u8EA2\uF1BC\u8EA2\uF1BD" + // 12615 - 12619
-                "\u0000\uFDB4\u0000\u0000\u0000\uFDBA\u0000\u0000\u8EA2\uF1F7" + // 12620 - 12624
-                "\u8EA2\uF2B6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12625 - 12629
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12630 - 12634
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12635 - 12639
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12640 - 12644
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12645 - 12649
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12650 - 12654
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA4AB\u0000\uA4AC" + // 12655 - 12659
-                "\u0000\uA4AD\u0000\uA4AE\u0000\uA4AF\u0000\uA4B0\u0000\uA4B1" + // 12660 - 12664
-                "\u0000\uA4B2\u0000\uA4B3\u0000\uA4B4\u0000\u0000\u0000\u0000" + // 12665 - 12669
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA6B5" + // 12670 - 12674
-                "\u0000\uA6B6\u0000\uA6B7\u0000\uA6B8\u0000\uA6B9\u0000\uA6BA" + // 12675 - 12679
-                "\u0000\uA6BB\u0000\uA6BC\u0000\uA6BD\u0000\uA6BE\u0000\u0000" + // 12680 - 12684
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12685 - 12689
-                "\u8EA2\uEAFB\u8EA2\uEBA3\u8EA2\uEBA1\u8EA2\uEAF9\u8EA2\uEBA6" + // 12690 - 12694
-                "\u0000\u0000\u8EA2\uEAF8\u0000\u0000\u0000\uFADA\u8EA2\uEBA2" + // 12695 - 12699
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uEAFC\u0000\uFAD9" + // 12700 - 12704
-                "\u8EA2\uEBA5\u0000\u0000\u0000\u0000\u8EA2\uEBA4\u0000\u0000" + // 12705 - 12709
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uECF7\u8EA2\uECF6" + // 12710 - 12714
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uECFD\u0000\u0000" + // 12715 - 12719
-                "\u8EA2\uECF9\u8EA2\uECFC\u0000\uFBCC\u0000\u0000\u0000\u0000" + // 12720 - 12724
-                "\u8EA2\uECFA\u8EA2\uECFB\u0000\u0000\u8EA2\uECF5\u8EA2\uECF8" + // 12725 - 12729
-                "\u0000\uFBCB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFCAB" + // 12730 - 12734
-                "\u8EA2\uEEE1\u8EA2\uEEDC\u8EA2\uEEE0\u0000\u0000\u8EA2\uEEE3" + // 12735 - 12739
-                "\u8EA2\uEEDF\u0000\u0000\u8EA2\uEEDB\u0000\u0000\u0000\uFCAD" + // 12740 - 12744
-                "\u8EA2\uEEDE\u8EA2\uEEE2\u0000\uFCAC\u8EA2\uEED9\u8EA2\uE7A6" + // 12745 - 12749
-                "\u0000\uF8FA\u8EA2\uE7AD\u0000\u0000\u0000\u0000\u8EA2\uECBE" + // 12750 - 12754
-                "\u0000\uF9A3\u8EA2\uE3CB\u8EA2\uE7A4\u0000\uF8FD\u8EA2\uE7A5" + // 12755 - 12759
-                "\u8EA2\uE7AA\u0000\u0000\u0000\u0000\u0000\uF9A1\u0000\uF9A2" + // 12760 - 12764
-                "\u8EA2\uE7A3\u8EA2\uE7AC\u8EA2\uE7AE\u8EA2\uE7A7\u8EA2\uE7A9" + // 12765 - 12769
-                "\u8EA2\uE7AB\u8EA2\uE7A8\u8EA2\uE7AF\u0000\uF8FC\u0000\uF9A4" + // 12770 - 12774
-                "\u0000\uF8FE\u0000\u0000\u0000\uF8FB\u8EA2\uE9FC\u0000\u0000" + // 12775 - 12779
-                "\u0000\uFAC2\u8EA2\uE9FA\u0000\u0000\u0000\u0000\u8EA2\uE9FE" + // 12780 - 12784
-                "\u0000\u0000\u8EA2\uEAA1\u0000\uFAC0\u8EA2\uEAA2\u8EA2\uE9FD" + // 12785 - 12789
-                "\u0000\u0000\u8EA2\uE9FB\u0000\uFAC3\u0000\uFABF\u8EA2\uEAA3" + // 12790 - 12794
-                "\u0000\u0000\u0000\uFAC1\u0000\uFABE\u0000\u0000\u0000\u0000" + // 12795 - 12799
-                "\u0000\u0000\u0000\uFBAB\u0000\u0000\u0000\u0000\u0000\uFBAC" + // 12800 - 12804
-                "\u8EA2\uECBD\u8EA2\uECBC\u8EA2\uECBF\u8EA2\uECC0\u0000\u0000" + // 12805 - 12809
-                "\u0000\uFBAD\u8EA2\uEEA5\u8EA2\uEEAA\u0000\uF2BB\u0000\uF2C0" + // 12810 - 12814
-                "\u0000\uF2C1\u0000\u0000\u0000\uF5CE\u8EA2\uDFD0\u8EA2\uDFD9" + // 12815 - 12819
-                "\u8EA2\uDFD6\u8EA2\uDFD8\u0000\u0000\u0000\uF5CB\u8EA2\uDFD1" + // 12820 - 12824
-                "\u0000\u0000\u8EA2\uDFD7\u0000\uF5C7\u8EA2\uDFD3\u0000\uF5CF" + // 12825 - 12829
-                "\u8EA2\uDFCF\u8EA2\uDFD4\u8EA2\uDFDB\u8EA2\uDAD2\u8EA2\uDFD5" + // 12830 - 12834
-                "\u8EA2\uDFCE\u0000\uF5C8\u8EA2\uDFCD\u0000\uF5C9\u8EA2\uDFDC" + // 12835 - 12839
-                "\u0000\uF5CA\u8EA2\uDFDA\u0000\uF5CD\u8EA2\uDFCC\u0000\u0000" + // 12840 - 12844
-                "\u0000\uF5CC\u0000\u0000\u8EA2\uDFD2\u8EA2\uE3C7\u8EA2\uE3D5" + // 12845 - 12849
-                "\u8EA2\uE3D0\u8EA2\uE3D2\u8EA2\uE3C6\u0000\uF7BE\u0000\u0000" + // 12850 - 12854
-                "\u8EA2\uE3C5\u0000\uF7C1\u0000\uF7C0\u0000\u0000\u8EA2\uE3D4" + // 12855 - 12859
-                "\u8EA2\uE3CC\u8EA2\uE3C9\u8EA2\uE3CF\u0000\u0000\u8EA2\uE3C8" + // 12860 - 12864
-                "\u0000\u0000\u8EA2\uE3CA\u8EA2\uE3D3\u8EA2\uE3D1\u0000\u0000" + // 12865 - 12869
-                "\u0000\uF7BF\u8EA2\uE3D8\u8EA2\uE3D6\u8EA2\uE3CD\u8EA2\uE3D7" + // 12870 - 12874
-                "\u8EA2\uE3CE\u0000\u0000\u0000\uA4DB\u0000\uA4DC\u0000\uA4DD" + // 12875 - 12879
-                "\u0000\uA4DE\u0000\uA4DF\u0000\uA4E0\u0000\uA4E1\u0000\uA4E2" + // 12880 - 12884
-                "\u0000\uA4E3\u0000\uA4E4\u0000\uA4E5\u0000\uA4E6\u0000\uA4E7" + // 12885 - 12889
-                "\u0000\uA4E8\u0000\uA4E9\u0000\uA4EA\u0000\uA4EB\u0000\uA4EC" + // 12890 - 12894
-                "\u0000\uA4ED\u0000\uA4EE\u0000\uA4EF\u0000\uA4F0\u0000\uA4F1" + // 12895 - 12899
-                "\u0000\uA4F2\u0000\uA4F3\u0000\uA4F4\u0000\uA1C2\u0000\uA2DE" + // 12900 - 12904
-                "\u0000\uA1C3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12905 - 12909
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12910 - 12914
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12915 - 12919
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12920 - 12924
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12925 - 12929
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12930 - 12934
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 12935 - 12939
-                "\u0000\u0000\u0000\u0000\u0000\uCBCB\u0000\u0000\u0000\uDDD0" + // 12940 - 12944
-                "\u0000\uDDCF\u8EA2\uC7E2\u8EA2\uC7E3\u0000\u0000\u0000\uEBB6" + // 12945 - 12949
-                "\u8EA2\uDAE5\u0000\uEFB5\u8EA2\uDAE6\u8EA2\uDFE5\u0000\uCBCC" + // 12950 - 12954
-                "\u0000\u0000\u8EA2\uADD3\u0000\uD3D9\u0000\uD3D8\u0000\u0000" + // 12955 - 12959
-                "\u8EA2\uB3A7\u0000\uD8C4\u8EA2\uB3A8\u8EA2\uB9D8\u0000\u0000" + // 12960 - 12964
-                "\u8EA2\uB9D7\u0000\u0000\u8EA2\uB9D6\u0000\u0000\u0000\u0000" + // 12965 - 12969
-                "\u0000\uC6CF\u8EA2\uA2BD\u0000\u0000\u0000\uCAAD\u8EA2\uA3F2" + // 12970 - 12974
-                "\u0000\u0000\u8EA2\uAABC\u0000\uD0FB\u0000\u0000\u0000\uE8E2" + // 12975 - 12979
-                "\u0000\uC4DD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC8A2" + // 12980 - 12984
-                "\u0000\u0000\u0000\u0000\u0000\uE3EF\u0000\uC4DE\u0000\uC5BE" + // 12985 - 12989
-                "\u0000\uC5BF\u0000\u0000\u0000\uC6D1\u0000\uC6D0\u0000\u0000" + // 12990 - 12994
-                "\u8EA2\uA2BE\u0000\uC8A3\u0000\u0000\u8EA2\uA3F3\u0000\u0000" + // 12995 - 12999
-                "\u0000\uCAAE\u0000\u0000\u0000\u0000\u8EA2\uA6D2\u8EA2\uA6D3" + // 13000 - 13004
-                "\u8EA2\uA6D4\u0000\u0000\u0000\uCDB8\u0000\uCDB9\u8EA2\uA6D1" + // 13005 - 13009
-                "\u0000\uCDBA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD0FC" + // 13010 - 13014
-                "\u8EA2\uAABD\u0000\u0000\u8EA2\uAEFC\u0000\uD5BE\u0000\u0000" + // 13015 - 13019
-                "\u8EA2\uAEFB\u0000\u0000\u0000\uDAAF\u8EA2\uB5B0\u0000\uDAB0" + // 13020 - 13024
-                "\u8EA2\uB5B1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDFA4" + // 13025 - 13029
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC6CB\u0000\uC6CC" + // 13030 - 13034
-                "\u8EA2\uA1D9\u0000\u0000\u0000\uC7FD\u0000\u0000\u0000\u0000" + // 13035 - 13039
-                "\u0000\u0000\u8EA2\uA3EB\u0000\u0000\u0000\uCAA8\u0000\u0000" + // 13040 - 13044
-                "\u8EA2\uA3EC\u0000\u0000\u0000\u0000\u0000\uCDB0\u0000\u0000" + // 13045 - 13049
-                "\u0000\u0000\u8EA2\uA6CF\u0000\uCDAE\u0000\uCDAD\u8EA2\uA6CE" + // 13050 - 13054
-                "\u0000\uCDAB\u8EA2\uA6D0\u0000\uCDAC\u0000\uCDAF\u0000\u0000" + // 13055 - 13059
-                "\u0000\uD0F4\u0000\u0000\u0000\uD0F6\u8EA2\uAAB4\u8EA2\uAAB1" + // 13060 - 13064
-                "\u8EA2\uAAB2\u8EA2\uAAB3\u8EA2\uAAB5\u0000\uD0F5\u0000\u0000" + // 13065 - 13069
-                "\u0000\u0000\u8EA2\uAEF6\u8EA2\uAEF5\u0000\u0000\u0000\uD5BA" + // 13070 - 13074
-                "\u0000\u0000\u0000\uD5B9\u0000\u0000\u0000\u0000\u0000\u0000" + // 13075 - 13079
-                "\u0000\u0000\u0000\u0000\u0000\uDAA8\u8EA2\uB5AA\u0000\u0000" + // 13080 - 13084
-                "\u0000\uDAA7\u0000\uDAA9\u0000\uDAA6\u0000\u0000\u0000\u0000" + // 13085 - 13089
-                "\u0000\u0000\u0000\u0000\u0000\uDEFA\u8EA2\uB5A9\u0000\u0000" + // 13090 - 13094
-                "\u0000\u0040\u0000\u0041\u0000\u0042\u0000\u0043\u0000\u0044" + // 13095 - 13099
-                "\u0000\u0045\u0000\u0046\u0000\u0047\u0000\u0048\u0000\u0049" + // 13100 - 13104
-                "\u0000\u004A\u0000\u004B\u0000\u004C\u0000\u004D\u0000\u004E" + // 13105 - 13109
-                "\u0000\u004F\u0000\u0050\u0000\u0051\u0000\u0052\u0000\u0053" + // 13110 - 13114
-                "\u0000\u0054\u0000\u0055\u0000\u0056\u0000\u0057\u0000\u0058" + // 13115 - 13119
-                "\u0000\u0059\u0000\u005A\u0000\u005B\u0000\\\u0000\u005D" + // 13120 - 13124
-                "\u0000\u005E\u0000\u005F\u0000\u0060\u0000\u0061\u0000\u0062" + // 13125 - 13129
-                "\u0000\u0063\u0000\u0064\u0000\u0065\u0000\u0066\u0000\u0067" + // 13130 - 13134
-                "\u0000\u0068\u0000\u0069\u0000\u006A\u0000\u006B\u0000\u006C" + // 13135 - 13139
-                "\u0000\u006D\u0000\u006E\u0000\u006F\u0000\u0070\u0000\u0071" + // 13140 - 13144
-                "\u0000\u0072\u0000\u0073\u0000\u0074\u0000\u0075\u0000\u0076" + // 13145 - 13149
-                "\u0000\u0077\u0000\u0078\u0000\u0079\u0000\u007A\u0000\u007B" + // 13150 - 13154
-                "\u0000\u007C\u0000\u007D\u0000\u007E\u0000\u007F\u8EA2\uD4C7" + // 13155 - 13159
-                "\u0000\u0000\u0000\uEEFD\u8EA2\uD4CA\u0000\uEEF7\u8EA2\uD4C8" + // 13160 - 13164
-                "\u8EA2\uD4BE\u0000\uEEF6\u8EA2\uDAD6\u0000\uEEFC\u0000\u0000" + // 13165 - 13169
-                "\u0000\uEEF9\u0000\u0000\u0000\uEFA3\u0000\u0000\u8EA2\uD4BD" + // 13170 - 13174
-                "\u0000\u0000\u8EA2\uD4C1\u0000\uEEF5\u8EA2\uD4C0\u8EA2\uD4C2" + // 13175 - 13179
-                "\u8EA2\uD4C3\u0000\uEFA2\u8EA2\uD4C5\u8EA2\uD4C9\u8EA2\uD4CD" + // 13180 - 13184
-                "\u0000\u0000\u0000\uEFA6\u0000\uF2BC\u8EA2\uDAD1\u8EA2\uDAD7" + // 13185 - 13189
-                "\u8EA2\uDAD4\u8EA2\uDACC\u8EA2\uDAD8\u8EA2\uDACD\u0000\u0000" + // 13190 - 13194
-                "\u8EA2\uDAD3\u0000\u0000\u0000\uF2B7\u0000\uF2BD\u8EA2\uDAD9" + // 13195 - 13199
-                "\u0000\u0000\u0000\u0000\u0000\uF2B9\u0000\u0000\u0000\uF2C3" + // 13200 - 13204
-                "\u0000\uF2BE\u8EA2\uDADB\u8EA2\uDAD5\u0000\uF2BA\u8EA2\uDACE" + // 13205 - 13209
-                "\u0000\uF2C4\u8EA2\uDACF\u8EA2\uDAD0\u0000\uF2C5\u0000\uF2C2" + // 13210 - 13214
-                "\u0000\uEEFA\u0000\u0000\u0000\uF2B8\u8EA2\uDADC\u0000\uF2C6" + // 13215 - 13219
-                "\u0000\u0000\u0000\uF2BF\u8EA2\uDADA\u8EA2\uC0C0\u0000\uE2A6" + // 13220 - 13224
-                "\u0000\u0000\u0000\u0000\u8EA2\uC0C3\u8EA2\uC0C4\u0000\uE2AA" + // 13225 - 13229
-                "\u0000\u0000\u8EA2\uC0C6\u0000\u0000\u8EA2\uC0C8\u0000\u0000" + // 13230 - 13234
-                "\u8EA2\uC0C9\u8EA2\uC0BD\u8EA2\uC0BC\u8EA2\uC0CA\u0000\uE2A9" + // 13235 - 13239
-                "\u8EA2\uC0C7\u8EA2\uC0C5\u0000\u0000\u0000\uE2A7\u0000\uE2A3" + // 13240 - 13244
-                "\u0000\uE2AE\u8EA2\uC0C1\u8EA2\uC0C2\u8EA2\uC0BF\u0000\u0000" + // 13245 - 13249
-                "\u0000\uE2A8\u0000\u0000\u0000\u0000\u0000\uE2A4\u0000\u0000" + // 13250 - 13254
-                "\u0000\uE2A2\u8EA2\uC7CE\u0000\uE6E6\u0000\uE6E1\u0000\u0000" + // 13255 - 13259
-                "\u0000\u0000\u0000\uE6DC\u0000\u0000\u0000\uE6EC\u0000\uE6DD" + // 13260 - 13264
-                "\u0000\u0000\u0000\uE6D9\u0000\uE6E8\u0000\uE6E5\u0000\uE6E7" + // 13265 - 13269
-                "\u0000\u0000\u0000\uE6DE\u0000\uE6E3\u0000\uE6DA\u0000\uE6DB" + // 13270 - 13274
-                "\u8EA2\uC7D6\u8EA2\uC7D3\u8EA2\uC7CB\u8EA2\uC7D0\u0000\u0000" + // 13275 - 13279
-                "\u0000\uE6E9\u8EA2\uC7D7\u0000\uE6EA\u0000\uE6E0\u0000\u0000" + // 13280 - 13284
-                "\u0000\u0000\u8EA2\uC7CD\u0000\uCBC6\u0000\u0000\u0000\uD3D4" + // 13285 - 13289
-                "\u0000\uD3D5\u8EA2\uADD1\u0000\u0000\u0000\u0000\u8EA2\uADD2" + // 13290 - 13294
-                "\u0000\uD3D3\u0000\u0000\u0000\uD8B9\u0000\u0000\u0000\uD8B7" + // 13295 - 13299
-                "\u0000\u0000\u0000\uD8B6\u0000\uD8BD\u0000\uD8B5\u0000\uD8BE" + // 13300 - 13304
-                "\u8EA2\uB3A1\u0000\uD8BB\u0000\u0000\u0000\uD8B8\u0000\uD8BC" + // 13305 - 13309
-                "\u0000\uD8BA\u0000\uD8B4\u0000\u0000\u0000\u0000\u0000\uDDC5" + // 13310 - 13314
-                "\u0000\u0000\u0000\uDDBF\u8EA2\uB9CF\u0000\uDDC4\u0000\u0000" + // 13315 - 13319
-                "\u0000\u0000\u0000\uDDC6\u0000\uDDC0\u0000\u0000\u0000\uDDC1" + // 13320 - 13324
-                "\u0000\u0000\u8EA2\uB9CD\u0000\u0000\u0000\u0000\u0000\uDDBE" + // 13325 - 13329
-                "\u0000\u0000\u8EA2\uB9CE\u0000\uDDC3\u0000\u0000\u0000\u0000" + // 13330 - 13334
-                "\u8EA2\uB9CC\u0000\uDDC2\u0000\u0000\u0000\u0000\u0000\uE2AB" + // 13335 - 13339
-                "\u0000\u0000\u0000\uE2AD\u0000\u0000\u0000\u0000\u8EA2\uC0BE" + // 13340 - 13344
-                "\u0000\uE2AC\u0000\uE2A1\u0000\uE2A5\u0000\u0000\u0000\uE6EB" + // 13345 - 13349
-                "\u8EA2\uC7CF\u0000\uFDA8\u0000\u0000\u0000\u0000\u0000\u0000" + // 13350 - 13354
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13355 - 13359
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13360 - 13364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCBC5" + // 13365 - 13369
-                "\u8EA2\uADD0\u0000\uD3D2\u8EA2\uB9CB\u8EA2\uB9C9\u0000\u0000" + // 13370 - 13374
-                "\u0000\u0000\u8EA2\uB9CA\u8EA2\uC0BA\u8EA2\uC0BB\u8EA2\uC7C9" + // 13375 - 13379
-                "\u8EA2\uC0B9\u0000\u0000\u8EA2\uC7C3\u8EA2\uC7C7\u8EA2\uC7C6" + // 13380 - 13384
-                "\u8EA2\uC7C8\u0000\uE6D8\u8EA2\uC7C5\u8EA2\uC7C4\u8EA2\uC7CA" + // 13385 - 13389
-                "\u0000\u0000\u8EA2\uCEB1\u8EA2\uCEAF\u0000\u0000\u8EA2\uCEB0" + // 13390 - 13394
-                "\u8EA2\uD4BC\u8EA2\uD4BA\u0000\u0000\u0000\u0000\u8EA2\uD4BB" + // 13395 - 13399
-                "\u8EA2\uDACB\u8EA2\uDFCA\u8EA2\uDFCB\u0000\uF7BD\u0000\u0000" + // 13400 - 13404
-                "\u8EA2\uE7A2\u8EA2\uE9F9\u0000\uFABD\u0000\u0000\u8EA2\uECBB" + // 13405 - 13409
-                "\u8EA2\uEEA4\u0000\uFBF3\u0000\u0000\u8EA2\uEFCD\u8EA2\uF1BB" + // 13410 - 13414
-                "\u8EA2\uC0AD\u0000\uE1FA\u0000\uE1FB\u0000\u0000\u0000\u0000" + // 13415 - 13419
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC0B5" + // 13420 - 13424
-                "\u0000\uE6D4\u8EA2\uC7B9\u8EA2\uC7BF\u8EA2\uC7BA\u8EA2\uC7BB" + // 13425 - 13429
-                "\u0000\u0000\u8EA2\uC7C0\u0000\u0000\u0000\uE6D6\u0000\u0000" + // 13430 - 13434
-                "\u0000\uE6CE\u0000\uE6D5\u8EA2\uC7B8\u8EA2\uC0AA\u0000\uE6D1" + // 13435 - 13439
-                "\u0000\uE6CF\u8EA2\uC7BE\u8EA2\uC7BD\u0000\uE6D0\u0000\uE6D2" + // 13440 - 13444
-                "\u8EA2\uC7BC\u0000\uE6CD\u0000\u0000\u0000\uE6D3\u0000\u0000" + // 13445 - 13449
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uCDFD" + // 13450 - 13454
-                "\u0000\uEAFC\u0000\u0000\u0000\u0000\u8EA2\uCEAA\u8EA2\uCEA9" + // 13455 - 13459
-                "\u0000\u0000\u8EA2\uCEA4\u0000\uEAFE\u8EA2\uCEA8\u8EA2\uCDFE" + // 13460 - 13464
-                "\u8EA2\uCEA1\u0000\uEAF6\u0000\uEAF8\u0000\u0000\u8EA2\uCEA6" + // 13465 - 13469
-                "\u8EA2\uCDFC\u0000\uEAFA\u0000\uEAF9\u8EA2\uCEA2\u8EA2\uCEA7" + // 13470 - 13474
-                "\u8EA2\uCEA5\u0000\uEAFB\u8EA2\uCEA3\u0000\u0000\u0000\uA1AA" + // 13475 - 13479
-                "\u8EAD\uA4C3\u0000\uA1EC\u0000\uA2E3\u0000\uA2E8\u0000\uA1ED" + // 13480 - 13484
-                "\u8EAD\uA4C2\u0000\uA1BE\u0000\uA1BF\u0000\uA1EE\u0000\uA2B0" + // 13485 - 13489
-                "\u0000\uA1A2\u0000\uA2B1\u0000\uA1A5\u0000\uA2DF\u0000\uA4A1" + // 13490 - 13494
-                "\u0000\uA4A2\u0000\uA4A3\u0000\uA4A4\u0000\uA4A5\u0000\uA4A6" + // 13495 - 13499
-                "\u0000\uA4A7\u0000\uA4A8\u0000\uA4A9\u0000\uA4AA\u0000\uA1A8" + // 13500 - 13504
-                "\u0000\uA1A7\u0000\uA2B6\u0000\uA2B8\u0000\uA2B7\u0000\uA1A9" + // 13505 - 13509
-                "\u0000\uA2E9\u0000\uA4C1\u0000\uA4C2\u0000\uA4C3\u0000\uA4C4" + // 13510 - 13514
-                "\u0000\uA4C5\u0000\uA4C6\u0000\uA4C7\u0000\uA4C8\u0000\uA4C9" + // 13515 - 13519
-                "\u0000\uA4CA\u0000\uA4CB\u0000\uA4CC\u0000\uA4CD\u0000\uA4CE" + // 13520 - 13524
-                "\u0000\uA4CF\u0000\uA4D0\u0000\uA4D1\u0000\uA4D2\u0000\uA4D3" + // 13525 - 13529
-                "\u0000\uA4D4\u0000\uA4D5\u0000\uA4D6\u0000\uA4D7\u0000\uA4D8" + // 13530 - 13534
-                "\u0000\uA4D9\u0000\uA4DA\u8EAD\uA1B0\u0000\uA2E0\u8EAD\uA1B1" + // 13535 - 13539
-                "\u8EAD\uA1A4\u0000\uA2A5\u8EA2\uB2F7\u0000\uD8B0\u0000\uD8B1" + // 13540 - 13544
-                "\u8EA2\uB2FB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13545 - 13549
-                "\u0000\uDDB6\u8EA2\uB9B5\u0000\u0000\u0000\uDDBB\u8EA2\uB9C5" + // 13550 - 13554
-                "\u0000\uDDBA\u8EA2\uB9C7\u0000\u0000\u0000\u0000\u8EA2\uB9BB" + // 13555 - 13559
-                "\u0000\uDDB8\u8EA2\uB9C6\u0000\u0000\u8EA2\uB9B6\u0000\uDDB9" + // 13560 - 13564
-                "\u8EA2\uB9C2\u8EA2\uB9BE\u8EA2\uB9C0\u8EA2\uB9BA\u8EA2\uB9C1" + // 13565 - 13569
-                "\u0000\u0000\u0000\u0000\u0000\uDDB5\u8EA2\uB9BD\u0000\u0000" + // 13570 - 13574
-                "\u8EA2\uB9BC\u8EA2\uB9B8\u0000\u0000\u8EA2\uB9C3\u0000\u0000" + // 13575 - 13579
-                "\u0000\u0000\u8EA2\uB9BF\u8EA2\uB9B7\u0000\u0000\u8EA2\uB9B9" + // 13580 - 13584
-                "\u0000\uDDB7\u8EA2\uB9C4\u0000\u0000\u0000\u0000\u0000\u0000" + // 13585 - 13589
-                "\u0000\u0000\u0000\uE1FC\u8EA2\uC0B3\u0000\u0000\u0000\u0000" + // 13590 - 13594
-                "\u0000\u0000\u8EA2\uC0AF\u8EA2\uC0B1\u8EA2\uC0AC\u8EA2\uC0AB" + // 13595 - 13599
-                "\u8EA2\uC0A9\u0000\u0000\u8EA2\uC0B0\u8EA2\uC0B2\u8EA2\uC0AE" + // 13600 - 13604
-                "\u0000\u0000\u0000\uEBF6\u0000\uEBF7\u8EA2\uD6A4\u0000\uF0A5" + // 13605 - 13609
-                "\u0000\uF0A4\u8EA2\uD6A3\u0000\u0000\u8EA2\uE0F5\u0000\u0000" + // 13610 - 13614
-                "\u8EA2\uE4EA\u8EA2\uE4EC\u8EA2\uE4EB\u0000\uF7FD\u0000\uF7FC" + // 13615 - 13619
-                "\u0000\uF7FB\u0000\u0000\u0000\uFBCA\u8EA2\uECF4\u0000\u0000" + // 13620 - 13624
-                "\u0000\uFBC9\u8EA2\uEED6\u8EA2\uEED5\u0000\u0000\u0000\uFCF7" + // 13625 - 13629
-                "\u8EA2\uF0E3\u0000\uDEA3\u8EA2\uC8F0\u0000\u0000\u0000\u0000" + // 13630 - 13634
-                "\u0000\u0000\u8EA2\uCFC9\u8EA2\uCFC7\u8EA2\uCFC8\u0000\u0000" + // 13635 - 13639
-                "\u0000\u0000\u8EA2\uD6AD\u0000\u0000\u8EA2\uD6A8\u8EA2\uD6A5" + // 13640 - 13644
-                "\u8EA2\uD6AC\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uD6AE" + // 13645 - 13649
-                "\u0000\u0000\u0000\u0000\u0000\uF0A7\u8EA2\uD6AB\u8EA2\uD6A7" + // 13650 - 13654
-                "\u0000\u0000\u0000\u0000\u8EA2\uD6A6\u8EA2\uD6AA\u8EA2\uD6A9" + // 13655 - 13659
-                "\u0000\uF0A6\u0000\u0000\u0000\u0000\u8EA2\uDCAB\u8EA2\uDCA6" + // 13660 - 13664
-                "\u8EA2\uDCA4\u8EA2\uDCAD\u8EA2\uDCA5\u0000\u0000\u8EA2\uEDA3" + // 13665 - 13669
-                "\u0000\uFBCF\u8EA2\uEDA9\u0000\u0000\u8EA2\uEDA8\u0000\u0000" + // 13670 - 13674
-                "\u8EA2\uEDA4\u8EA2\uEDB0\u0000\u0000\u8EA2\uEDA5\u8EA2\uEEE8" + // 13675 - 13679
-                "\u8EA2\uEDB3\u8EA2\uEDB5\u8EA2\uEDAC\u8EA2\uEDA6\u8EA2\uEEE9" + // 13680 - 13684
-                "\u8EA2\uEEEB\u8EA2\uEEE5\u0000\uFCAE\u0000\u0000\u8EA2\uEEF2" + // 13685 - 13689
-                "\u8EA2\uEEF0\u0000\uFCAF\u8EA2\uEEEF\u8EA2\uEEEE\u8EA2\uEEE7" + // 13690 - 13694
-                "\u8EA2\uEEE4\u8EA2\uEEEA\u8EA2\uEEF3\u8EA2\uEEE6\u8EA2\uEEEC" + // 13695 - 13699
-                "\u0000\u0000\u8EA2\uEFF7\u8EA2\uEFFC\u8EA2\uEFF2\u8EA2\uEFF5" + // 13700 - 13704
-                "\u0000\uFCDA\u8EA2\uEFF9\u0000\u0000\u8EA2\uF0A2\u8EA2\uEEED" + // 13705 - 13709
-                "\u0000\u0000\u8EA2\uEFF3\u8EA2\uEFFD\u8EA2\uF0A3\u8EA2\uEFF8" + // 13710 - 13714
-                "\u8EA2\uEFF1\u8EA2\uEFFB\u0000\u0000\u8EA2\uEFFA\u8EA2\uF0A1" + // 13715 - 13719
-                "\u8EA2\uEFFE\u8EA2\uEEF1\u8EA2\uEFF6\u8EA2\uEFF0\u8EA2\uEFF4" + // 13720 - 13724
-                "\u0000\uFCF9\u0000\uFCFA\u8EA2\uEFEF\u0000\u0000\u8EA2\uF0F4" + // 13725 - 13729
-                "\u8EA2\uF0EB\u8EA2\uF0F3\u0000\uC8E6\u8EA2\uADCB\u0000\u0000" + // 13730 - 13734
-                "\u8EA2\uB2F1\u8EA2\uB2F2\u0000\u0000\u0000\u0000\u0000\u0000" + // 13735 - 13739
-                "\u8EA2\uC0A6\u0000\u0000\u8EA2\uECB6\u8EA2\uF0CE\u0000\uC8E7" + // 13740 - 13744
-                "\u0000\uD3CF\u8EA2\uADCC\u0000\u0000\u0000\u0000\u0000\u0000" + // 13745 - 13749
-                "\u8EA2\uB9B4\u0000\uDDB4\u0000\u0000\u8EA2\uC0A8\u8EA2\uC0A7" + // 13750 - 13754
-                "\u0000\uE1F9\u0000\u0000\u0000\uE6CC\u8EA2\uD4AA\u0000\uEEEC" + // 13755 - 13759
-                "\u0000\u0000\u0000\uEEED\u0000\u0000\u0000\u0000\u0000\u0000" + // 13760 - 13764
-                "\u0000\uF2AF\u0000\uFCE8\u0000\uC8E8\u0000\u0000\u0000\u0000" + // 13765 - 13769
-                "\u0000\u0000\u8EA2\uADCD\u0000\uCFD0\u8EA2\uADCF\u8EA2\uADCE" + // 13770 - 13774
-                "\u0000\uD3D0\u0000\u0000\u8EA2\uB2F3\u0000\u0000\u8EA2\uB2FA" + // 13775 - 13779
-                "\u0000\uD8AE\u8EA2\uB2F8\u8EA2\uB2F6\u0000\u0000\u8EA2\uB2FD" + // 13780 - 13784
-                "\u8EA2\uB2F4\u8EA2\uB2F5\u0000\uD8AF\u0000\u0000\u0000\uD8B3" + // 13785 - 13789
-                "\u0000\u0000\u0000\u0000\u8EA2\uB2FE\u0000\uD8B2\u8EA2\uB2FC" + // 13790 - 13794
-                "\u8EA2\uB2F9\u8EA2\uE6E6\u8EA2\uE3B9\u8EA2\uE6F3\u8EA2\uE6E8" + // 13795 - 13799
-                "\u0000\u0000\u0000\uF8F2\u8EA2\uE6EE\u0000\u0000\u8EA2\uE6F0" + // 13800 - 13804
-                "\u8EA2\uE6EB\u8EA2\uE6F2\u8EA2\uE6ED\u8EA2\uE6EC\u0000\uF8F3" + // 13805 - 13809
-                "\u0000\u0000\u0000\u0000\u8EA2\uE9F1\u8EA2\uE9F2\u0000\u0000" + // 13810 - 13814
-                "\u8EA2\uE9F4\u0000\uFAB9\u0000\uFABA\u8EA2\uE9F5\u8EA2\uE9F3" + // 13815 - 13819
-                "\u0000\u0000\u8EA2\uE9F0\u0000\u0000\u8EA2\uECB1\u8EA2\uECB4" + // 13820 - 13824
-                "\u8EA2\uECB0\u0000\u0000\u0000\uFBA7\u8EA2\uECB2\u0000\uFBA6" + // 13825 - 13829
-                "\u0000\uFBA5\u0000\uFBA4\u8EA2\uECB3\u8EA2\uEDFE\u8EA2\uEDFC" + // 13830 - 13834
-                "\u0000\u0000\u8EA2\uEDFB\u8EA2\uECAF\u8EA2\uEDFD\u8EA2\uECB5" + // 13835 - 13839
-                "\u8EA2\uEDFA\u0000\u0000\u8EA2\uEFC8\u8EA2\uEFA6\u8EA2\uEFC6" + // 13840 - 13844
-                "\u0000\uFCC7\u8EA2\uEFC7\u8EA2\uEFC9\u0000\u0000\u8EA2\uF0CD" + // 13845 - 13849
-                "\u0000\uFCE6\u8EA2\uF0CC\u8EA2\uF0CB\u0000\uFCE7\u0000\u0000" + // 13850 - 13854
-                "\u0000\uFDA7\u8EA2\uF1DD\u8EA2\uF1F5\u8EA2\uF1F4\u8EA2\uF1F6" + // 13855 - 13859
-                "\u0000\uF5B7\u0000\u0000\u8EA2\uDFB2\u8EA2\uDFB1\u8EA2\uDFB6" + // 13860 - 13864
-                "\u8EA2\uDFA9\u0000\uF5BB\u0000\u0000\u0000\uF5BF\u8EA2\uDFB0" + // 13865 - 13869
-                "\u8EA2\uDFB7\u0000\uF5C0\u8EA2\uDFB3\u0000\u0000\u0000\u0000" + // 13870 - 13874
-                "\u0000\u0000\u0000\u0000\u0000\uF5B8\u0000\uF5BA\u8EA2\uE3B3" + // 13875 - 13879
-                "\u8EA2\uE3B1\u0000\u0000\u0000\u0000\u8EA2\uE3B7\u8EA2\uE3B5" + // 13880 - 13884
-                "\u8EA2\uE3B8\u0000\u0000\u8EA2\uE3AA\u8EA2\uE3B2\u8EA2\uE3BC" + // 13885 - 13889
-                "\u8EA2\uDFBD\u8EA2\uE3AE\u0000\uF7BA\u8EA2\uD3EC\u8EA2\uE3A9" + // 13890 - 13894
-                "\u8EA2\uE3B6\u8EA2\uE3B0\u8EA2\uE3AD\u8EA2\uE3A8\u8EA2\uE3A7" + // 13895 - 13899
-                "\u8EA2\uE3BB\u0000\u0000\u8EA2\uE3AC\u8EA2\uE3AB\u0000\uF7B8" + // 13900 - 13904
-                "\u8EA2\uE3B4\u0000\u0000\u0000\uF7B7\u0000\u0000\u0000\u0000" + // 13905 - 13909
-                "\u0000\uF7B9\u8EA2\uE3AF\u8EA2\uE3BA\u0000\u0000\u8EA2\uE6E9" + // 13910 - 13914
-                "\u8EA2\uE6EA\u0000\u0000\u0000\uF8F4\u8EA2\uE6E7\u0000\uF8F1" + // 13915 - 13919
-                "\u8EA2\uE6EF\u0000\u0000\u0000\uF8F5\u8EA2\uE6F1\u8EA2\uCDE0" + // 13920 - 13924
-                "\u8EA2\uCDE8\u8EA2\uCDF4\u8EA2\uCDE6\u0000\u0000\u0000\u0000" + // 13925 - 13929
-                "\u8EA2\uCDEA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13930 - 13934
-                "\u0000\u0000\u0000\uEEEA\u8EA2\uC7B0\u8EA2\uD3F9\u8EA2\uD4A4" + // 13935 - 13939
-                "\u8EA2\uD3F8\u8EA2\uD3F4\u8EA2\uD3F1\u0000\uEEEB\u8EA2\uD3EF" + // 13940 - 13944
-                "\u0000\uEAF3\u8EA2\uD3E8\u0000\uEEE9\u8EA2\uD3EE\u0000\uEEE8" + // 13945 - 13949
-                "\u8EA2\uD3F3\u8EA2\uD3F0\u8EA2\uD4A2\u8EA2\uD3FB\u8EA2\uD3F5" + // 13950 - 13954
-                "\u8EA2\uD3FA\u0000\uEEE4\u8EA2\uD3F2\u8EA2\uD4A7\u8EA2\uD3E9" + // 13955 - 13959
-                "\u8EA2\uD3EA\u8EA2\uD4A3\u0000\uEEE5\u8EA2\uD4A8\u0000\uEEE7" + // 13960 - 13964
-                "\u8EA2\uD4A9\u8EA2\uD3F7\u8EA2\uCDDF\u8EA2\uD3FD\u8EA2\uD3F6" + // 13965 - 13969
-                "\u8EA2\uD4A1\u8EA2\uD3FC\u0000\u0000\u0000\u0000\u0000\u0000" + // 13970 - 13974
-                "\u8EA2\uD3ED\u0000\uEEE2\u8EA2\uD4A6\u0000\uEEE3\u8EA2\uD3EB" + // 13975 - 13979
-                "\u0000\uEEE6\u8EA2\uDAB2\u8EA2\uD3FE\u8EA2\uD4A5\u0000\u0000" + // 13980 - 13984
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EAD\uA4B8\u0000\u0000" + // 13985 - 13989
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 13990 - 13994
-                "\u0000\u0000\u0000\u0000\u8EAD\uA4AE\u0000\u0000\u0000\u0000" + // 13995 - 13999
-                "\u0000\u0000\u0000\u0000\u0000\uA3C4\u0000\u0000\u0000\u0000" + // 14000 - 14004
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14005 - 14009
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14010 - 14014
-                "\u0000\u0000\u0000\uA3C5\u0000\u0000\u0000\u0000\u0000\uA3C7" + // 14015 - 14019
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14020 - 14024
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA3C6\u0000\u0000" + // 14025 - 14029
-                "\u0000\u0000\u0000\uA3C0\u0000\uA3C1\u0000\uA3C3\u0000\uA3C2" + // 14030 - 14034
-                "\u0000\uA3CC\u0000\uA3CD\u0000\uA3CE\u0000\uA1BB\u0000\u0000" + // 14035 - 14039
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14040 - 14044
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14045 - 14049
-                "\u0000\uA5EF\u0000\u0000\u0000\uA5ED\u0000\uA5EE\u0000\uA5F0" + // 14050 - 14054
-                "\u0000\u0000\u0000\uA2A6\u0000\u0000\u0000\u0000\u0000\u0000" + // 14055 - 14059
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14060 - 14064
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA5EC\u0000\u0000" + // 14065 - 14069
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14070 - 14074
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14075 - 14079
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14080 - 14084
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14085 - 14089
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14090 - 14094
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14095 - 14099
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14100 - 14104
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3F8" + // 14105 - 14109
-                "\u8EA2\uC1D2\u0000\u0000\u0000\u0000\u8EA2\uC8E7\u8EA2\uCFB4" + // 14110 - 14114
-                "\u8EA2\uCFB5\u0000\uEBEC\u0000\u0000\u0000\uEBED\u8EA2\uD5E7" + // 14115 - 14119
-                "\u0000\uEFF1\u0000\u0000\u0000\u0000\u0000\uF6A9\u0000\u0000" + // 14120 - 14124
-                "\u8EA2\uE4D5\u0000\u0000\u0000\uF7F1\u8EA2\uE7F8\u0000\uF9CE" + // 14125 - 14129
-                "\u8EA2\uE7F7\u8EA2\uE7F9\u8EA2\uE7F6\u0000\uE6C5\u8EA2\uC7B4" + // 14130 - 14134
-                "\u0000\uE6C8\u0000\uE6C9\u8EA2\uC7AA\u8EA2\uC7B7\u0000\uE6CA" + // 14135 - 14139
-                "\u0000\uE6C4\u0000\uE6C3\u8EA2\uC7B3\u0000\uE6CB\u8EA2\uC7A9" + // 14140 - 14144
-                "\u8EA2\uC7AC\u8EA2\uC7B6\u8EA2\uC7B2\u0000\u0000\u0000\u0000" + // 14145 - 14149
-                "\u8EA2\uCDFB\u8EA2\uCDF0\u0000\uE6C2\u0000\u0000\u0000\u0000" + // 14150 - 14154
-                "\u0000\u0000\u0000\u0000\u0000\uEAF2\u8EA2\uCDE4\u8EA2\uCDF9" + // 14155 - 14159
-                "\u8EA2\uCDE5\u0000\uEAED\u0000\u0000\u8EA2\uCDE2\u0000\u0000" + // 14160 - 14164
-                "\u8EA2\uCDEB\u8EA2\uCDE3\u0000\uEAEF\u8EA2\uCDDD\u8EA2\uCDF8" + // 14165 - 14169
-                "\u0000\uEAF0\u8EA2\uCDF5\u8EA2\uCDF6\u8EA2\uCDDE\u0000\uEAF5" + // 14170 - 14174
-                "\u8EA2\uCDED\u0000\u0000\u8EA2\uCDE7\u8EA2\uCDEE\u8EA2\uCDE1" + // 14175 - 14179
-                "\u0000\u0000\u8EA2\uCDFA\u8EA2\uCDF2\u8EA2\uCDEC\u8EA2\uCDDC" + // 14180 - 14184
-                "\u0000\uEAF1\u8EA2\uCDF3\u0000\u0000\u0000\uEAF4\u8EA2\uCDF7" + // 14185 - 14189
-                "\u0000\u0000\u8EA2\uCDF1\u0000\uEAEE\u8EA2\uCDEF\u0000\u0000" + // 14190 - 14194
-                "\u8EA2\uCDE9\u0000\uEAEC\u0000\uDDAB\u8EA2\uB9A5\u8EA2\uB9A4" + // 14195 - 14199
-                "\u8EA2\uB9B1\u0000\uDDAD\u8EA2\uB9A6\u0000\uDDAF\u0000\uDDAA" + // 14200 - 14204
-                "\u8EA2\uB9A9\u0000\uDDB3\u0000\u0000\u0000\uDDB0\u8EA2\uB9AD" + // 14205 - 14209
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1F7\u8EA2\uC0A5" + // 14210 - 14214
-                "\u0000\u0000\u8EA2\uBFF8\u0000\uE1F4\u0000\u0000\u8EA2\uC7AE" + // 14215 - 14219
-                "\u8EA2\uC0A3\u8EA2\uBFF5\u0000\uE1F2\u8EA2\uBFFA\u0000\uE1F5" + // 14220 - 14224
-                "\u8EA2\uBFFE\u8EA2\uBFFC\u0000\uE1F8\u0000\uE1F1\u0000\u0000" + // 14225 - 14229
-                "\u0000\u0000\u8EA2\uBFF6\u8EA2\uBFF9\u0000\uE1F6\u0000\u0000" + // 14230 - 14234
-                "\u8EA2\uBFF7\u0000\u0000\u8EA2\uC0A4\u8EA2\uC0A2\u8EA2\uBFFB" + // 14235 - 14239
-                "\u8EA2\uBFFD\u8EA2\uC0A1\u0000\uE1F3\u0000\u0000\u0000\u0000" + // 14240 - 14244
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14245 - 14249
-                "\u8EA2\uC7AF\u8EA2\uC7B5\u8EA2\uC7AB\u8EA2\uC7B1\u0000\uE6C1" + // 14250 - 14254
-                "\u8EA2\uC7AD\u0000\uE6C7\u0000\u0000\u0000\u0000\u0000\uE6C6" + // 14255 - 14259
-                "\u0000\u0000\u8EA2\uE0F3\u0000\u0000\u0000\uF7F9\u8EA2\uE4E6" + // 14260 - 14264
-                "\u8EA2\uE4E7\u0000\uF7FA\u0000\u0000\u8EA2\uE4E5\u0000\u0000" + // 14265 - 14269
-                "\u8EA2\uE8B0\u8EA2\uE8AF\u8EA2\uE8B2\u0000\uF9D3\u8EA2\uE8B1" + // 14270 - 14274
-                "\u0000\u0000\u8EA2\uEAF5\u8EA2\uEAF7\u8EA2\uEAF6\u0000\u0000" + // 14275 - 14279
-                "\u0000\u0000\u8EA2\uECEF\u8EA2\uECF2\u8EA2\uECF0\u8EA2\uECF1" + // 14280 - 14284
-                "\u8EA2\uEED2\u0000\uFCA9\u0000\u0000\u0000\u0000\u0000\u0000" + // 14285 - 14289
-                "\u8EA2\uEFE2\u8EA2\uEFE3\u8EA2\uEFE4\u0000\u0000\u0000\uFCF6" + // 14290 - 14294
-                "\u0000\uFDB0\u8EA2\uF2A6\u0000\uD8EE\u0000\u0000\u0000\uF0A3" + // 14295 - 14299
-                "\u0000\uF3B4\u8EA2\uE4E8\u0000\u0000\u8EA2\uEED3\u0000\u0000" + // 14300 - 14304
-                "\u0000\u0000\u8EA2\uF1E6\u8EA2\uB3CD\u0000\u0000\u0000\uFDC8" + // 14305 - 14309
-                "\u0000\uD8EF\u8EA2\uDBFE\u0000\u0000\u8EA2\uE4E9\u0000\u0000" + // 14310 - 14314
-                "\u8EA2\uE8B3\u0000\u0000\u0000\u0000\u8EA2\uECF3\u8EA2\uEED4" + // 14315 - 14319
-                "\u0000\uD8F0\u0000\u0000\u8EA2\uCFC5\u8EA2\uCFC6\u8EA2\uEFC0" + // 14320 - 14324
-                "\u0000\u0000\u0000\u0000\u8EA2\uF0CA\u0000\u0000\u0000\u0000" + // 14325 - 14329
-                "\u8EA2\uF1B4\u8EA2\uF1B5\u8EA2\uF1B6\u0000\u0000\u0000\u0000" + // 14330 - 14334
-                "\u8EA2\uF2B5\u8EA2\uF2AD\u8EA2\uA2EF\u0000\uCFCD\u0000\u0000" + // 14335 - 14339
-                "\u0000\uD3CB\u0000\u0000\u8EA2\uB2DA\u8EA2\uB2D9\u0000\uD8A5" + // 14340 - 14344
-                "\u0000\uDDA8\u8EA2\uB9A1\u0000\u0000\u0000\u0000\u8EA2\uB8FE" + // 14345 - 14349
-                "\u0000\u0000\u0000\uE1F0\u0000\uE6BF\u0000\u0000\u0000\uE6BE" + // 14350 - 14354
-                "\u0000\uE6C0\u0000\u0000\u8EA2\uCDDB\u8EA2\uD3E7\u8EA2\uDAA5" + // 14355 - 14359
-                "\u8EA2\uDAA7\u8EA2\uDAA6\u0000\u0000\u0000\uF5B6\u8EA2\uDFA5" + // 14360 - 14364
-                "\u8EA2\uE3A6\u8EA2\uF1F3\u0000\uC8E5\u0000\u0000\u8EA2\uA8E9" + // 14365 - 14369
-                "\u8EA2\uA8EA\u8EA2\uA8E8\u8EA2\uA8E7\u0000\uCFCE\u0000\u0000" + // 14370 - 14374
-                "\u8EA2\uADCA\u8EA2\uADC8\u0000\u0000\u0000\u0000\u8EA2\uADC7" + // 14375 - 14379
-                "\u0000\u0000\u0000\uD3CC\u0000\uD3CE\u0000\uD3CD\u8EA2\uADC9" + // 14380 - 14384
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uCACD\u0000\u0000" + // 14385 - 14389
-                "\u0000\u0000\u8EA2\uD0D8\u0000\u0000\u0000\uE8F1\u0000\uECFC" + // 14390 - 14394
-                "\u8EA2\uD7B5\u8EA2\uD0DD\u8EA2\uD0DC\u8EA2\uD0DE\u0000\u0000" + // 14395 - 14399
-                "\u0000\u0000\u8EA2\uD0DB\u0000\uECFD\u8EAD\uA4C7\u0000\uEDA5" + // 14400 - 14404
-                "\u0000\uEDA2\u0000\u0000\u0000\uEDA3\u8EA2\uD0D6\u8EA2\uD0D9" + // 14405 - 14409
-                "\u8EA2\uD0E3\u0000\uEDAB\u0000\uEDA9\u0000\u0000\u8EA2\uD0DA" + // 14410 - 14414
-                "\u8EA2\uBBFD\u0000\uECFA\u8EA2\uD0E0\u8EA2\uD0D7\u0000\u0000" + // 14415 - 14419
-                "\u0000\uEDAC\u8EA2\uD0DF\u0000\uE8F4\u0000\uEDA1\u8EA2\uCACB" + // 14420 - 14424
-                "\u0000\u0000\u0000\u0000\u0000\uEDA4\u0000\u0000\u0000\uEDA8" + // 14425 - 14429
-                "\u0000\uEDAA\u0000\uEDA7\u0000\uEDA6\u0000\u0000\u0000\uECFE" + // 14430 - 14434
-                "\u8EA2\uD0E2\u0000\uECFB\u0000\uEDAD\u0000\u0000\u0000\u0000" + // 14435 - 14439
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14440 - 14444
-                "\u0000\uF0E1\u0000\uF0E2\u8EA2\uD7B4\u0000\uF0EB\u0000\uF0E8" + // 14445 - 14449
-                "\u8EA2\uE9E9\u8EA2\uE9E6\u0000\u0000\u0000\u0000\u8EA2\uE9EB" + // 14450 - 14454
-                "\u8EA2\uE9ED\u0000\uFAB5\u0000\uFAB7\u0000\u0000\u8EA2\uE9EC" + // 14455 - 14459
-                "\u0000\uFAB8\u0000\uFAB6\u8EA2\uE9EE\u0000\u0000\u0000\u0000" + // 14460 - 14464
-                "\u0000\u0000\u0000\u0000\u0000\uFAB3\u0000\u0000\u0000\u0000" + // 14465 - 14469
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFBA1\u8EA2\uECA1" + // 14470 - 14474
-                "\u8EA2\uECA7\u0000\uFBA3\u8EA2\uE9E8\u8EA2\uECA6\u0000\u0000" + // 14475 - 14479
-                "\u8EA2\uECAD\u8EA2\uECA4\u8EA2\uECAB\u8EA2\uECAA\u8EA2\uE9E4" + // 14480 - 14484
-                "\u8EA2\uECA5\u8EA2\uE3A2\u8EA2\uECAE\u8EA2\uECA3\u8EA2\uECA8" + // 14485 - 14489
-                "\u0000\u0000\u8EA2\uECAC\u8EA2\uECA2\u0000\u0000\u8EA2\uEDF7" + // 14490 - 14494
-                "\u0000\uFBA2\u8EA2\uECA9\u0000\u0000\u0000\u0000\u8EA2\uEFC3" + // 14495 - 14499
-                "\u8EA2\uEDF8\u8EA2\uEDF6\u8EA2\uEDF4\u8EA2\uEDF5\u8EA2\uEDF9" + // 14500 - 14504
-                "\u0000\u0000\u0000\uFCC5\u8EA2\uEFC1\u8EA2\uEFBF\u8EA2\uEFC4" + // 14505 - 14509
-                "\u8EA2\uEFC2\u0000\u0000\u8EA2\uEFC5\u0000\uFCC6\u8EA2\uE2F0" + // 14510 - 14514
-                "\u0000\u0000\u8EA2\uE2F2\u8EA2\uE2F1\u8EA2\uE2F7\u8EA2\uE2FC" + // 14515 - 14519
-                "\u8EA2\uE2EF\u8EA2\uE2F6\u8EA2\uE2FB\u0000\uF7B3\u0000\u0000" + // 14520 - 14524
-                "\u8EA2\uE2F9\u0000\u0000\u0000\uF7B1\u8EA2\uE2FA\u0000\uF7AF" + // 14525 - 14529
-                "\u0000\uF7B2\u8EA2\uE6E0\u8EA2\uE3A1\u0000\u0000\u0000\u0000" + // 14530 - 14534
-                "\u0000\uF8ED\u0000\u0000\u8EA2\uE6D8\u8EA2\uE6DC\u8EA2\uE6D4" + // 14535 - 14539
-                "\u8EA2\uE6D7\u0000\u0000\u8EA2\uE6DF\u0000\uF8EB\u8EA2\uE6E4" + // 14540 - 14544
-                "\u8EA2\uE6DD\u0000\u0000\u8EA2\uE6D5\u8EA2\uE6E5\u8EA2\uE6DE" + // 14545 - 14549
-                "\u0000\uF8EE\u0000\uF8EF\u8EA2\uE6E2\u0000\u0000\u8EA2\uE6D6" + // 14550 - 14554
-                "\u0000\uF8EA\u0000\uF8EC\u8EA2\uE6D1\u8EA2\uE6D9\u8EA2\uE6D3" + // 14555 - 14559
-                "\u0000\u0000\u8EA2\uE6E3\u8EA2\uE6E1\u8EA2\uE6D2\u8EA2\uE6DA" + // 14560 - 14564
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uE9EA\u0000\uF8F0" + // 14565 - 14569
-                "\u8EA2\uE6DB\u0000\uFAB2\u0000\uFAB4\u0000\uFAB1\u0000\u0000" + // 14570 - 14574
-                "\u8EA2\uE9EF\u8EA2\uE9E7\u8EA2\uE9E5\u8EA2\uDEE1\u8EA2\uDEF9" + // 14575 - 14579
-                "\u8EA2\uDEFB\u8EA2\uDEE0\u0000\uF5AB\u8EA2\uDEFD\u8EA2\uDEF5" + // 14580 - 14584
-                "\u0000\uF5B2\u8EA2\uDEFC\u8EA2\uDEEE\u0000\uF5B4\u8EA2\uDEE6" + // 14585 - 14589
-                "\u8EA2\uD9FD\u8EA2\uDEF6\u8EA2\uDEF3\u8EA2\uDEE2\u8EA2\uDFA3" + // 14590 - 14594
-                "\u0000\uF5AE\u0000\u0000\u0000\u0000\u0000\uF5AF\u8EA2\uDEE4" + // 14595 - 14599
-                "\u8EA2\uDEF4\u0000\u0000\u8EA2\uDFA2\u8EA2\uDEF7\u8EA2\uDEEA" + // 14600 - 14604
-                "\u0000\uF5B1\u0000\uF5AD\u8EA2\uDEF8\u8EA2\uDEEB\u8EA2\uDFA4" + // 14605 - 14609
-                "\u8EA2\uDEE5\u8EA2\uDEEF\u8EA2\uDEFA\u8EA2\uDEE7\u8EA2\uDEE9" + // 14610 - 14614
-                "\u0000\u0000\u0000\uF5B5\u8EA2\uDEE3\u0000\uF5B3\u0000\uF7B0" + // 14615 - 14619
-                "\u0000\uF5AA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14620 - 14624
-                "\u0000\uF5B0\u0000\uF7B4\u8EA2\uE2FD\u0000\u0000\u8EA2\uE2F3" + // 14625 - 14629
-                "\u8EA2\uE2EE\u8EA2\uE2F4\u8EA2\uE2FE\u8EA2\uE3A4\u8EA2\uE3A3" + // 14630 - 14634
-                "\u0000\uF7B6\u0000\uF7B5\u0000\u0000\u0000\u0000\u8EA2\uE2F5" + // 14635 - 14639
-                "\u8EA2\uE3A5\u8EA2\uE2F8\u8EA2\uD9EB\u8EA2\uD9EE\u0000\u0000" + // 14640 - 14644
-                "\u0000\uF2A5\u8EA2\uD9F0\u8EA2\uD9E5\u8EA2\uD9EC\u8EA2\uD9F2" + // 14645 - 14649
-                "\u0000\uF2A2\u0000\uF2A6\u0000\uF1FE\u0000\u0000\u0000\u0000" + // 14650 - 14654
-                "\u8EA2\uD9E7\u8EA2\uD9F7\u0000\u0000\u0000\u0000\u8EA2\uD9F1" + // 14655 - 14659
-                "\u0000\u0000\u8EA2\uD9E8\u8EA2\uDAA2\u8EA2\uD9FA\u8EA2\uD9E4" + // 14660 - 14664
-                "\u8EA2\uDEF2\u8EA2\uD9EA\u0000\uF2A1\u0000\u0000\u8EA2\uD9F5" + // 14665 - 14669
-                "\u0000\u0000\u8EA2\uDAA1\u0000\uF2A9\u0000\u0000\u8EA2\uD9FC" + // 14670 - 14674
-                "\u8EA2\uD9E9\u8EA2\uD9EF\u8EA2\uD9F3\u8EA2\uD9ED\u8EA2\uDAA3" + // 14675 - 14679
-                "\u8EA2\uD9FE\u8EA2\uD9FB\u0000\uF2A3\u0000\uF2A4\u0000\uF2A8" + // 14680 - 14684
-                "\u8EA2\uD9E6\u8EA2\uDAA4\u0000\uF2A7\u8EA2\uD9F8\u0000\u0000" + // 14685 - 14689
-                "\u0000\u0000\u8EA2\uD9F6\u0000\u0000\u0000\u0000\u0000\u0000" + // 14690 - 14694
-                "\u8EA2\uD9F9\u8EA2\uDFA1\u8EA2\uDEEC\u8EA2\uDEF1\u8EA2\uDEFE" + // 14695 - 14699
-                "\u8EA2\uDEF0\u8EA2\uDEE8\u8EA2\uDEED\u0000\u0000\u0000\uF5AC" + // 14700 - 14704
-                "\u0000\u0000\u0000\uF6AB\u8EA2\uE0E4\u8EA2\uE0EF\u8EA2\uE4DD" + // 14705 - 14709
-                "\u8EA2\uE4E0\u8EA2\uE4E2\u8EA2\uE4E1\u0000\u0000\u8EA2\uE4DB" + // 14710 - 14714
-                "\u8EA2\uE4DF\u8EA2\uE4DA\u0000\u0000\u8EA2\uE4DC\u0000\uF7F7" + // 14715 - 14719
-                "\u8EA2\uE4D9\u0000\u0000\u8EA2\uE4DE\u0000\u0000\u0000\u0000" + // 14720 - 14724
-                "\u8EA2\uE8AD\u8EA2\uE8A2\u0000\uF9D1\u0000\u0000\u0000\u0000" + // 14725 - 14729
-                "\u0000\uF9D2\u8EA2\uE8A1\u8EA2\uE8A6\u8EA2\uE8AC\u8EA2\uE8A4" + // 14730 - 14734
-                "\u8EA2\uE8AB\u0000\u0000\u8EA2\uE8A8\u0000\u0000\u8EA2\uE8A7" + // 14735 - 14739
-                "\u8EA2\uE8AA\u8EA2\uE8A5\u8EA2\uE8A3\u0000\u0000\u8EA2\uE8A9" + // 14740 - 14744
-                "\u0000\u0000\u8EA2\uEAEE\u8EA2\uEAEC\u0000\uFAD5\u8EA2\uEAEB" + // 14745 - 14749
-                "\u8EA2\uEAF1\u8EA2\uEAEF\u0000\u0000\u0000\uFAD6\u8EA2\uEAEA" + // 14750 - 14754
-                "\u8EA2\uEAE8\u0000\u0000\u8EA2\uEAE9\u0000\uFAD8\u8EA2\uEAED" + // 14755 - 14759
-                "\u0000\uFAD7\u8EA2\uEAF0\u8EA2\uECE6\u8EA2\uECEC\u0000\u0000" + // 14760 - 14764
-                "\u0000\u0000\u8EA2\uECE7\u0000\uFBC7\u8EA2\uECED\u8EA2\uD3B8" + // 14765 - 14769
-                "\u0000\u0000\u8EA2\uD3D6\u0000\u0000\u0000\u0000\u0000\u0000" + // 14770 - 14774
-                "\u0000\uEEE0\u8EA2\uC6E2\u8EA2\uD3C4\u8EA2\uD3BB\u8EA2\uD3BE" + // 14775 - 14779
-                "\u8EA2\uD3E4\u8EA2\uD3C5\u8EA2\uD3BC\u8EA2\uD3BA\u8EA2\uD3B7" + // 14780 - 14784
-                "\u0000\u0000\u0000\uEED9\u8EA2\uD3CE\u0000\uEED8\u0000\uEEDC" + // 14785 - 14789
-                "\u8EA2\uD3C9\u8EA2\uD3D1\u0000\uEED2\u8EA2\uD3E1\u8EA2\uD3E5" + // 14790 - 14794
-                "\u0000\uEED4\u0000\u0000\u8EA2\uD3C0\u8EA2\uD3D4\u8EA2\uD3D8" + // 14795 - 14799
-                "\u8EA2\uD3BD\u8EA2\uD3E2\u0000\uEEDB\u0000\u0000\u0000\uEEDA" + // 14800 - 14804
-                "\u8EA2\uD3B5\u0000\uEEDE\u8EA2\uD3DB\u8EA2\uD3BF\u8EA2\uD3D3" + // 14805 - 14809
-                "\u8EA2\uD3B9\u8EA2\uD3C7\u8EA2\uD3C2\u0000\uEED6\u0000\uEED7" + // 14810 - 14814
-                "\u8EA2\uD3D5\u8EA2\uD3E6\u8EA2\uD3E3\u8EA2\uD3DA\u0000\u0000" + // 14815 - 14819
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14820 - 14824
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uD3B6\u0000\u0000" + // 14825 - 14829
-                "\u0000\uEED3\u8EA2\uD9F4\u0000\u0000\u0000\uEBF2\u8EA2\uCFBF" + // 14830 - 14834
-                "\u8EA2\uCFBB\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uCFC1" + // 14835 - 14839
-                "\u0000\u0000\u8EA2\uD5F5\u0000\u0000\u8EA2\uD5F8\u8EA2\uD5FA" + // 14840 - 14844
-                "\u8EA2\uD5F0\u8EA2\uD5F4\u8EA2\uD5F1\u0000\uEFF7\u0000\uEFFA" + // 14845 - 14849
-                "\u0000\uEFFC\u8EA2\uD5F2\u8EA2\uD5F3\u0000\uEFFB\u8EA2\uD5F6" + // 14850 - 14854
-                "\u8EA2\uD5F9\u8EA2\uD5F7\u0000\uEFFD\u0000\u0000\u0000\uEFF9" + // 14855 - 14859
-                "\u8EA2\uD5EF\u0000\uEFF6\u0000\u0000\u0000\uEFF8\u0000\u0000" + // 14860 - 14864
-                "\u0000\u0000\u0000\uF3AE\u8EA2\uDBF2\u8EA2\uDBF0\u8EA2\uDBEF" + // 14865 - 14869
-                "\u0000\u0000\u8EA2\uDBF5\u0000\u0000\u8EA2\uDBF4\u8EA2\uDBF3" + // 14870 - 14874
-                "\u0000\u0000\u8EA2\uDBEE\u0000\uF3AD\u8EA2\uDBED\u0000\u0000" + // 14875 - 14879
-                "\u8EA2\uDBF1\u0000\uF3AF\u0000\u0000\u0000\u0000\u8EA2\uE0E6" + // 14880 - 14884
-                "\u0000\u0000\u8EA2\uE0EA\u8EA2\uE0E7\u8EA2\uE0E9\u8EA2\uE0E8" + // 14885 - 14889
-                "\u8EA2\uE0E5\u8EA2\uE0EB\u8EA2\uE0EE\u8EA2\uE0EC\u8EA2\uE0ED" + // 14890 - 14894
-                "\u0000\uF6AC\u0000\uEAE6\u8EA2\uCDBF\u8EA2\uCDB9\u0000\u0000" + // 14895 - 14899
-                "\u0000\uEADF\u8EA2\uC6F9\u0000\uEADE\u8EA2\uCDCA\u0000\u0000" + // 14900 - 14904
-                "\u0000\uEADC\u0000\uEAEB\u0000\uEAE4\u8EA2\uCDCB\u8EA2\uCDC0" + // 14905 - 14909
-                "\u8EA2\uCDB8\u8EA2\uCDD3\u8EA2\uCDC4\u0000\uEAEA\u8EA2\uCDD7" + // 14910 - 14914
-                "\u0000\uEAE7\u8EA2\uCDD6\u0000\u0000\u8EA2\uCDD0\u8EA2\uCDD5" + // 14915 - 14919
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uCDD8\u0000\u0000" + // 14920 - 14924
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14925 - 14929
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 14930 - 14934
-                "\u8EA2\uD3DC\u8EA2\uD3DD\u8EA2\uD3D0\u8EA2\uD3CF\u8EA2\uD3CB" + // 14935 - 14939
-                "\u0000\uEEDD\u0000\u0000\u0000\uEED5\u8EA2\uD3DF\u8EA2\uD3DE" + // 14940 - 14944
-                "\u8EA2\uC6CE\u8EA2\uD3C8\u8EA2\uD3CC\u8EA2\uD3C6\u0000\u0000" + // 14945 - 14949
-                "\u8EA2\uD3D9\u8EA2\uD3CA\u0000\u0000\u8EA2\uD3E0\u8EA2\uD3C3" + // 14950 - 14954
-                "\u8EA2\uD3C1\u8EA2\uD3CD\u8EA2\uD3D7\u8EA2\uD3D2\u0000\uEEDF" + // 14955 - 14959
-                "\u8EA2\uC6D7\u0000\u0000\u8EA2\uC6F0\u8EA2\uC6E8\u8EA2\uC7A3" + // 14960 - 14964
-                "\u8EA2\uC6EB\u0000\uE6BD\u8EA2\uC6FC\u0000\u0000\u0000\uE6B4" + // 14965 - 14969
-                "\u0000\u0000\u8EA2\uC6EE\u8EA2\uC6F6\u8EA2\uC6DB\u8EA2\uC6F5" + // 14970 - 14974
-                "\u0000\u0000\u8EA2\uC7A8\u8EA2\uC6D6\u8EA2\uC6F7\u0000\u0000" + // 14975 - 14979
-                "\u8EA2\uC7A6\u0000\u0000\u8EA2\uC6D0\u0000\uE1E1\u0000\u0000" + // 14980 - 14984
-                "\u8EA2\uC6DE\u8EA2\uC6DD\u0000\uE6B6\u0000\u0000\u8EA2\uC6E1" + // 14985 - 14989
-                "\u8EA2\uC6E3\u8EA2\uC6F2\u8EA2\uC7A5\u0000\uE6B9\u0000\u0000" + // 14990 - 14994
-                "\u0000\uE6BA\u0000\u0000\u8EA2\uC6D5\u0000\uE6B2\u8EA2\uC6D9"   // 14995 - 14999
-                ;
-
-            index2b =
-                "\u8EA2\uC7A1\u0000\uE6BB\u0000\u0000\u0000\uE6B3\u0000\uE6B5" + // 15000 - 15004
-                "\u0000\uE6BC\u8EA2\uC7A7\u8EA2\uC6F8\u8EA2\uC6F3\u0000\u0000" + // 15005 - 15009
-                "\u0000\u0000\u8EA2\uC6E0\u8EA2\uC6DF\u0000\uE6B1\u8EA2\uC6D1" + // 15010 - 15014
-                "\u0000\uE6AE\u8EA2\uC6E9\u8EA2\uC6D2\u8EA2\uC6E7\u0000\u0000" + // 15015 - 15019
-                "\u0000\u0000\u8EA2\uC6DC\u8EA2\uC7A2\u0000\u0000\u8EA2\uE4D6" + // 15020 - 15024
-                "\u0000\u0000\u8EA2\uE7FC\u0000\u0000\u0000\uF9CF\u0000\u0000" + // 15025 - 15029
-                "\u8EA2\uE7FB\u8EA2\uE7FA\u0000\uF9D0\u0000\u0000\u8EA2\uEAE6" + // 15030 - 15034
-                "\u8EA2\uEAE5\u0000\u0000\u8EA2\uEAE3\u0000\u0000\u8EA2\uEAE2" + // 15035 - 15039
-                "\u0000\uFAD3\u0000\uFAD2\u8EA2\uEAE7\u8EA2\uEEC5\u0000\uFCA5" + // 15040 - 15044
-                "\u8EA2\uECE5\u0000\uFBC3\u8EA2\uECE4\u8EA2\uEAE4\u0000\u0000" + // 15045 - 15049
-                "\u8EA2\uEEC6\u0000\uFCD0\u0000\u0000\u0000\uFDAE\u8EA2\uF1C8" + // 15050 - 15054
-                "\u0000\u0000\u8EA2\uF2A1\u0000\u0000\u0000\u0000\u0000\u0000" + // 15055 - 15059
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15060 - 15064
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15065 - 15069
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15070 - 15074
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15075 - 15079
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15080 - 15084
-                "\u0000\u0000\u0000\u0000\u0000\uCFDD\u0000\u0000\u8EA2\uA1E9" + // 15085 - 15089
-                "\u0000\u0000\u8EA2\uA2F8\u0000\uC8EA\u8EA2\uA2F6\u8EA2\uA2F9" + // 15090 - 15094
-                "\u8EA2\uA2F7\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA5AE" + // 15095 - 15099
-                "\u0000\u0000\u0000\uCBE2\u0000\u0000\u0000\uCBE3\u8EA2\uA5B0" + // 15100 - 15104
-                "\u0000\uCBE0\u8EA2\uA5AF\u8EA2\uA5AD\u0000\uCBE1\u0000\uCBDF" + // 15105 - 15109
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15110 - 15114
-                "\u0000\u0000\u8EA2\uA8F8\u8EA2\uA8FB\u0000\uCFE0\u8EA2\uA8FA" + // 15115 - 15119
-                "\u8EA2\uA8F9\u0000\u0000\u0000\uCFDF\u8EA2\uBFC5\u0000\uE1DD" + // 15120 - 15124
-                "\u8EA2\uBFE2\u8EA2\uBFEB\u8EA2\uBFEE\u0000\uE1DB\u8EA2\uBFCD" + // 15125 - 15129
-                "\u8EA2\uBFE6\u8EA2\uBFCE\u8EA2\uBFDC\u0000\uE1E8\u8EA2\uBFD8" + // 15130 - 15134
-                "\u0000\uE1E5\u0000\u0000\u8EA2\uBFD9\u8EA2\uBFC2\u0000\u0000" + // 15135 - 15139
-                "\u8EA2\uBFE7\u0000\u0000\u0000\u0000\u0000\uE1EE\u8EA2\uBFE4" + // 15140 - 15144
-                "\u8EA2\uBFDA\u8EA2\uBFF0\u8EA2\uBFD5\u8EA2\uC6ED\u0000\u0000" + // 15145 - 15149
-                "\u8EA2\uBFF3\u0000\uE1EC\u8EA2\uBFD3\u8EA2\uBFDF\u0000\uE1EF" + // 15150 - 15154
-                "\u0000\uE1DA\u8EA2\uBFD7\u8EA2\uBFF1\u8EA2\uBFD0\u8EA2\uBFC9" + // 15155 - 15159
-                "\u8EA2\uBFD4\u0000\u0000\u8EA2\uBFC8\u8EA2\uBFC6\u0000\uE1D6" + // 15160 - 15164
-                "\u8EA2\uBFE8\u8EA2\uBFCF\u8EA2\uBFEC\u0000\u0000\u8EA2\uBFED" + // 15165 - 15169
-                "\u0000\uE1DE\u0000\uE1E3\u0000\uE1DF\u0000\uE1E7\u8EA2\uBFE3" + // 15170 - 15174
-                "\u0000\uE1E0\u8EA2\uBFDB\u8EA2\uBFCB\u0000\u0000\u0000\uE1D8" + // 15175 - 15179
-                "\u8EA2\uBFC3\u8EA2\uBFE5\u8EA2\uBFEF\u8EA2\uBFCA\u0000\uE1E6" + // 15180 - 15184
-                "\u8EA2\uBFF4\u8EA2\uBFD6\u0000\uD8A1\u8EA2\uB2BF\u8EA2\uB2C3" + // 15185 - 15189
-                "\u0000\uD8A4\u8EA2\uB2B9\u8EA2\uB2D1\u0000\u0000\u8EA2\uB2D0" + // 15190 - 15194
-                "\u8EA2\uB2D8\u0000\uD7F7\u0000\uD7F4\u8EA2\uB2D6\u8EA2\uB2D2" + // 15195 - 15199
-                "\u8EA2\uB2C9\u8EA2\uB2C4\u0000\uD7FA\u0000\uD7F6\u8EA2\uB2BB" + // 15200 - 15204
-                "\u0000\uD7F2\u8EA2\uB2D3\u0000\uD7F3\u0000\u0000\u8EA2\uB2BD" + // 15205 - 15209
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15210 - 15214
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15215 - 15219
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15220 - 15224
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15225 - 15229
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15230 - 15234
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uB8E2\u8EA2\uB8E4" + // 15235 - 15239
-                "\u8EA2\uB8E9\u8EA2\uB8FD\u0000\uDDA3\u0000\uDCF7\u0000\u0000" + // 15240 - 15244
-                "\u8EA2\uB8E1\u0000\uDDA4\u0000\uDDA5\u8EA2\uB8EC\u8EA2\uB8F3" + // 15245 - 15249
-                "\u8EA2\uB8F9\u8EA2\uADB3\u0000\uD3C2\u0000\uD3BD\u0000\uD3B6" + // 15250 - 15254
-                "\u0000\uD3BB\u0000\uD3B7\u0000\uD3CA\u8EA2\uADB1\u8EA2\uB2C7" + // 15255 - 15259
-                "\u0000\uD3BE\u0000\u0000\u0000\u0000\u8EA2\uADBD\u8EA2\uA9C2" + // 15260 - 15264
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15265 - 15269
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uB2CA\u0000\uD7FE" + // 15270 - 15274
-                "\u0000\u0000\u8EA2\uB2BA\u0000\u0000\u8EA2\uB2C5\u8EA2\uB2C1" + // 15275 - 15279
-                "\u0000\u0000\u8EA2\uB2D4\u0000\u0000\u8EA2\uB2CC\u0000\u0000" + // 15280 - 15284
-                "\u8EA2\uB2C2\u0000\u0000\u8EA2\uB2CB\u8EA2\uB2BC\u8EA2\uB2C0" + // 15285 - 15289
-                "\u8EA2\uB2D7\u0000\uD8A3\u8EA2\uB2CF\u8EA2\uB2C6\u0000\uD7F1" + // 15290 - 15294
-                "\u8EA2\uB2D5\u8EA2\uB2B8\u0000\u0000\u8EA2\uB2CE\u0000\u0000" + // 15295 - 15299
-                "\u0000\uD8A2\u0000\uD7FB\u8EA2\uB2B7\u0000\uD7F9\u0000\uD7F8" + // 15300 - 15304
-                "\u0000\uD7FD\u8EA2\uB2CD\u0000\uD7F5\u0000\uD7FC\u8EA2\uADB5" + // 15305 - 15309
-                "\u8EA2\uBFC1\u8EA2\uB2C8\u0000\u0000\u0000\u0000\u8EA2\uB2BE" + // 15310 - 15314
-                "\u8EA2\uA8D3\u0000\u0000\u8EA2\uA8E2\u8EA2\uA8E4\u0000\u0000" + // 15315 - 15319
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15320 - 15324
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15325 - 15329
-                "\u0000\u0000\u0000\u0000\u0000\uD3C5\u0000\uD3BF\u0000\uD3C7" + // 15330 - 15334
-                "\u0000\uD3C4\u8EA2\uADB4\u8EA2\uADB7\u0000\uD3C0\u0000\u0000" + // 15335 - 15339
-                "\u8EA2\uADAE\u0000\u0000\u0000\uD3B9\u0000\uD3C3\u0000\u0000" + // 15340 - 15344
-                "\u0000\uD3C6\u0000\uD3C8\u8EA2\uADC3\u8EA2\uADBA\u0000\u0000" + // 15345 - 15349
-                "\u0000\uD3B8\u8EA2\uADC2\u0000\uD3BC\u0000\uD3BA\u0000\uD3B5" + // 15350 - 15354
-                "\u8EA2\uADB2\u0000\u0000\u8EA2\uADC1\u8EA2\uADB6\u8EA2\uADB9" + // 15355 - 15359
-                "\u8EA2\uADC6\u0000\u0000\u0000\uD3C9\u8EA2\uADC0\u0000\uD3C1" + // 15360 - 15364
-                "\u8EA2\uADBB\u8EA2\uADC5\u8EA2\uADB8\u8EA2\uADBC\u8EA2\uADBF" + // 15365 - 15369
-                "\u0000\u0000\u0000\u0000\u8EA2\uADB0\u8EA2\uADC4\u8EA2\uADBE" + // 15370 - 15374
-                "\u0000\u0000\u0000\u0000\u8EA2\uADAF\u0000\u0000\u8EA2\uE0D1" + // 15375 - 15379
-                "\u0000\u0000\u8EA2\uE0D6\u8EA2\uE0D2\u8EA2\uE0D5\u0000\uF6A8" + // 15380 - 15384
-                "\u0000\u0000\u8EA2\uDEC1\u8EA2\uE0D4\u8EA2\uE0D3\u0000\u0000" + // 15385 - 15389
-                "\u0000\uF7EE\u0000\uF7EC\u0000\uF7EF\u0000\uF7ED\u8EA2\uE4D2" + // 15390 - 15394
-                "\u8EA2\uE4D3\u8EA2\uE4D4\u0000\uF7F0\u0000\u0000\u0000\u0000" + // 15395 - 15399
-                "\u0000\u0000\u8EA2\uE7F5\u0000\uF9CC\u8EA2\uE7F3\u0000\u0000" + // 15400 - 15404
-                "\u0000\uF9CD\u8EA2\uE7F2\u8EA2\uE7F4\u0000\uF9CB\u8EA2\uEADF" + // 15405 - 15409
-                "\u8EA2\uEADC\u0000\u0000\u8EA2\uEADD\u8EA2\uEADE\u8EA2\uECE0" + // 15410 - 15414
-                "\u0000\uFBC2\u0000\u0000\u0000\uFBC1\u0000\u0000\u8EA2\uEEC3" + // 15415 - 15419
-                "\u8EA2\uEEC2\u0000\uFCA4\u0000\u0000\u0000\u0000\u0000\u0000" + // 15420 - 15424
-                "\u0000\uFCCF\u0000\uFCF4\u0000\uFDAD\u8EA2\uF1C7\u8EA2\uF1FC" + // 15425 - 15429
-                "\u8EA2\uF1FD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15430 - 15434
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15435 - 15439
-                "\u0000\u0000\u0000\u0000\u0000\uA1FA\u0000\uA1F9\u0000\u0000" + // 15440 - 15444
-                "\u0000\u0000\u0000\u0000\u0000\uA1F2\u0000\u0000\u0000\u0000" + // 15445 - 15449
-                "\u0000\uA1F6\u0000\uA1F3\u0000\u0000\u0000\u0000\u0000\u0000" + // 15450 - 15454
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15455 - 15459
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15460 - 15464
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15465 - 15469
-                "\u0000\uA3C8\u0000\uA3C9\u0000\uA3CB\u0000\uA3CA\u0000\u0000" + // 15470 - 15474
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15475 - 15479
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EAD\uA1D2\u0000\u0000" + // 15480 - 15484
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15485 - 15489
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15490 - 15494
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15495 - 15499
-                "\u8EAD\uA4C8\u8EAD\uA4CA\u0000\u0000\u0000\u0000\u0000\u0000" + // 15500 - 15504
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15505 - 15509
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15510 - 15514
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15515 - 15519
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15520 - 15524
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15525 - 15529
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15530 - 15534
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15535 - 15539
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15540 - 15544
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15545 - 15549
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15550 - 15554
-                "\u0000\u0000\u0000\uC8CF\u0000\u0000\u0000\uD2FE\u8EA2\uB0D2" + // 15555 - 15559
-                "\u0000\uD7CD\u0000\u0000\u0000\u0000\u0000\uDCDF\u8EA2\uBFA2" + // 15560 - 15564
-                "\u8EA2\uBFA3\u8EA2\uA2EC\u0000\u0000\u0000\u0000\u8EA2\uA5A2" + // 15565 - 15569
-                "\u8EA2\uA5A3\u8EA2\uA4FB\u0000\u0000\u0000\u0000\u0000\u0000" + // 15570 - 15574
-                "\u0000\u0000\u8EA2\uA5A1\u0000\uCBC2\u0000\u0000\u0000\uCBC3" + // 15575 - 15579
-                "\u8EA2\uA4FC\u8EA2\uA4FA\u8EA2\uA4F9\u8EA2\uA4FD\u0000\uCBC1" + // 15580 - 15584
-                "\u8EA2\uA4FE\u8EA2\uADAD\u0000\u0000\u0000\u0000\u0000\u0000" + // 15585 - 15589
-                "\u8EA2\uA8D6\u0000\uCFBF\u8EA2\uA8D5\u8EA2\uA8D7\u0000\u0000" + // 15590 - 15594
-                "\u0000\uCFBE\u8EA2\uA8DC\u0000\uCFC2\u8EA2\uA8D2\u8EA2\uA8E0" + // 15595 - 15599
-                "\u8EA2\uA8E6\u0000\uCFC9\u8EA2\uA8E3\u0000\uCFC6\u0000\u0000" + // 15600 - 15604
-                "\u8EA2\uA8D9\u8EA2\uA8DF\u8EA2\uA8E1\u0000\u0000\u8EA2\uA8D4" + // 15605 - 15609
-                "\u0000\uCFC5\u0000\uCFC0\u8EA2\uA8DA\u0000\uCFC7\u0000\uCFCA" + // 15610 - 15614
-                "\u0000\uCFC4\u0000\u0000\u0000\uCFBD\u8EA2\uA8DE\u8EA2\uA8D8" + // 15615 - 15619
-                "\u8EA2\uA8E5\u0000\uCFCC\u0000\uCFC8\u0000\uCFC3\u8EA2\uA8DD" + // 15620 - 15624
-                "\u0000\uD7F0\u8EA2\uA8DB\u0000\uCFC1\u0000\uCFCB\u0000\u0000" + // 15625 - 15629
-                "\u0000\uFCA3\u0000\u0000\u0000\uFCA2\u8EA2\uEFDD\u8EA2\uEFDE" + // 15630 - 15634
-                "\u0000\uFCF3\u8EA2\uF0DF\u0000\u0000\u0000\uFDB6\u0000\u0000" + // 15635 - 15639
-                "\u0000\uD3F4\u0000\uE2F9\u8EA2\uCFB2\u8EA2\uCFB1\u8EA2\uD5DE" + // 15640 - 15644
-                "\u8EA2\uD5DD\u0000\u0000\u0000\u0000\u0000\uF6A7\u8EA2\uE0CF" + // 15645 - 15649
-                "\u8EA2\uE0CE\u8EA2\uE4CF\u8EA2\uE4CD\u8EA2\uE4D0\u8EA2\uE4CE" + // 15650 - 15654
-                "\u0000\u0000\u0000\u0000\u0000\uF9C9\u8EA2\uE7EF\u8EA2\uE7F0" + // 15655 - 15659
-                "\u8EA2\uE7F1\u0000\u0000\u8EA2\uECDF\u0000\u0000\u8EA2\uEEC1" + // 15660 - 15664
-                "\u0000\u0000\u8EA2\uF0E0\u0000\u0000\u0000\u0000\u0000\u0000" + // 15665 - 15669
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3F5" + // 15670 - 15674
-                "\u0000\u0000\u0000\u0000\u8EA2\uDBE3\u8EA2\uE0D0\u0000\u0000" + // 15675 - 15679
-                "\u0000\uD3F6\u0000\u0000\u0000\u0000\u0000\uEBE9\u0000\u0000" + // 15680 - 15684
-                "\u8EA2\uDBE4\u0000\uF7EB\u8EA2\uE4D1\u0000\uF9CA\u0000\u0000" + // 15685 - 15689
-                "\u8EA2\uEADA\u8EA2\uEADB\u0000\uFBC0\u8EA2\uC6CB\u0000\u0000" + // 15690 - 15694
-                "\u8EA2\uC6CC\u0000\u0000\u8EA2\uC6CA\u8EA2\uC6CD\u0000\u0000" + // 15695 - 15699
-                "\u0000\uE6AC\u0000\u0000\u8EA2\uC6C9\u0000\u0000\u0000\uEADB" + // 15700 - 15704
-                "\u0000\u0000\u0000\u0000\u8EA2\uD3B3\u8EA2\uD3AF\u8EA2\uD3B2" + // 15705 - 15709
-                "\u8EA2\uD3B4\u8EA2\uD3B1\u8EA2\uD3B0\u0000\u0000\u8EA2\uD9E1" + // 15710 - 15714
-                "\u8EA2\uD9E2\u8EA2\uD9E3\u0000\uF1FC\u0000\uF1FD\u8EA2\uDEDE" + // 15715 - 15719
-                "\u8EA2\uDEDD\u8EA2\uDEDF\u0000\u0000\u8EA2\uE2ED\u8EA2\uE2EC" + // 15720 - 15724
-                "\u0000\u0000\u8EA2\uE6CF\u0000\u0000\u8EA2\uE6D0\u8EA2\uE6CE" + // 15725 - 15729
-                "\u0000\u0000\u0000\uFAB0\u0000\u0000\u8EA2\uE9E2\u8EA2\uE9E3" + // 15730 - 15734
-                "\u0000\u0000\u8EA2\uEDF3\u8EA2\uEFBE\u8EA2\uF0C9\u0000\uC8E2" + // 15735 - 15739
-                "\u0000\uCBC0\u0000\u0000\u0000\uF5A9\u0000\uC8E3\u0000\u0000" + // 15740 - 15744
-                "\u8EA2\uB8DC\u8EA2\uBFC0\u0000\u0000\u0000\uFCEC\u8EA2\uA2EA" + // 15745 - 15749
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA2EB\u8EA2\uA2ED" + // 15750 - 15754
-                "\u0000\uC8E4\u8EA2\uA2EE\u0000\uD7EA\u8EA2\uB2B4\u0000\uDCEF" + // 15755 - 15759
-                "\u0000\u0000\u8EA2\uBFBC\u0000\uE6AB\u0000\u0000\u0000\uEAD8" + // 15760 - 15764
-                "\u0000\uF1FB\u0000\uF5A8\u0000\uF7AE\u8EA2\uE6CD\u0000\uC8DF" + // 15765 - 15769
-                "\u0000\uCFBC\u0000\u0000\u0000\u0000\u0000\uD7EB\u8EA2\uB8D6" + // 15770 - 15774
-                "\u0000\uE1D4\u0000\u0000\u0000\uEAD9\u8EA2\uCDB2\u8EA2\uD3AE" + // 15775 - 15779
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC8E0" + // 15780 - 15784
-                "\u0000\uE1D5\u8EA2\uC6C8\u0000\uEADA\u0000\uC8E1\u8EA2\uA8D1" + // 15785 - 15789
-                "\u8EA2\uADAC\u0000\uD3B4\u0000\u0000\u0000\u0000\u8EA2\uB2B6" + // 15790 - 15794
-                "\u0000\u0000\u0000\u0000\u0000\uD7EE\u0000\u0000\u0000\uD7EC" + // 15795 - 15799
-                "\u0000\uD7ED\u0000\uD7EF\u0000\u0000\u0000\u0000\u8EA2\uB2B5" + // 15800 - 15804
-                "\u0000\u0000\u0000\u0000\u8EA2\uB8DB\u8EA2\uB8D8\u8EA2\uB8DA" + // 15805 - 15809
-                "\u0000\uDCF0\u0000\uDCF2\u0000\uDCF1\u8EA2\uB8D7\u0000\uDCF3" + // 15810 - 15814
-                "\u8EA2\uB8D9\u0000\u0000\u8EA2\uBFBD\u8EA2\uBFBE\u0000\u0000" + // 15815 - 15819
-                "\u8EA2\uBFBF\u0000\uF5A2\u0000\u0000\u0000\uF5A1\u0000\uF4FD" + // 15820 - 15824
-                "\u8EA2\uDED6\u8EA2\uDED9\u0000\uF4FC\u8EA2\uDEDA\u0000\u0000" + // 15825 - 15829
-                "\u0000\uF5A5\u8EA2\uDED8\u0000\u0000\u8EA2\uDED7\u0000\uF7AC" + // 15830 - 15834
-                "\u0000\u0000\u0000\uF7AD\u8EA2\uE2EB\u8EA2\uE2E9\u8EA2\uE2EA" + // 15835 - 15839
-                "\u0000\u0000\u0000\u0000\u8EA2\uE6CC\u0000\u0000\u8EA2\uE6CB" + // 15840 - 15844
-                "\u0000\uF8E9\u8EA2\uE9E1\u0000\uFAAF\u8EA2\uE9E0\u0000\u0000" + // 15845 - 15849
-                "\u8EA2\uEBFE\u8EA2\uEDF2\u0000\uFBF0\u8EA2\uF1B2\u8EA2\uF1B3" + // 15850 - 15854
-                "\u0000\uFCC4\u0000\uC8DB\u0000\u0000\u0000\uCFBA\u8EA2\uBFB7" + // 15855 - 15859
-                "\u0000\uEAD6\u0000\uF5A7\u8EA2\uDEDC\u0000\uC8DC\u0000\u0000" + // 15860 - 15864
-                "\u0000\uD7E9\u0000\uD7E8\u8EA2\uBFB8\u0000\u0000\u0000\u0000" + // 15865 - 15869
-                "\u0000\u0000\u8EA2\uD9E0\u0000\uC8DD\u0000\uD3B3\u0000\u0000" + // 15870 - 15874
-                "\u0000\u0000\u8EA2\uBFB9\u8EA2\uBFBA\u8EA2\uBFBB\u0000\uEAD7" + // 15875 - 15879
-                "\u0000\uF1FA\u0000\uC8DE\u0000\u0000\u0000\uCFBB\u8EA2\uADAB" + // 15880 - 15884
-                "\u0000\uEAD0\u0000\u0000\u0000\uEAD5\u8EA2\uCDAD\u0000\u0000" + // 15885 - 15889
-                "\u0000\u0000\u8EA2\uCDAC\u8EA2\uCDAE\u0000\uEAD2\u8EA2\uCDAB" + // 15890 - 15894
-                "\u0000\uEAD3\u8EA2\uCDB1\u8EA2\uCDB0\u8EA2\uCDAF\u0000\u0000" + // 15895 - 15899
-                "\u0000\uEAD1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15900 - 15904
-                "\u0000\u0000\u8EA2\uD3AA\u0000\u0000\u8EA2\uD3AD\u0000\uEED1" + // 15905 - 15909
-                "\u8EA2\uD3AC\u0000\uEED0\u0000\uEECC\u0000\uEECD\u0000\uEECE" + // 15910 - 15914
-                "\u8EA2\uD3A9\u8EA2\uD3A8\u0000\uEECF\u0000\u0000\u8EA2\uD3AB" + // 15915 - 15919
-                "\u8EA2\uD3A7\u0000\u0000\u0000\u0000\u8EA2\uD9D5\u8EA2\uD9DF" + // 15920 - 15924
-                "\u0000\uF1F9\u0000\uF1F8\u0000\u0000\u8EA2\uD9D9\u8EA2\uD9DB" + // 15925 - 15929
-                "\u0000\u0000\u8EA2\uD9D6\u0000\u0000\u8EA2\uD9DA\u8EA2\uD9D4" + // 15930 - 15934
-                "\u8EA2\uD9DD\u0000\uF1F7\u8EA2\uD9DC\u8EA2\uD9D8\u0000\u0000" + // 15935 - 15939
-                "\u8EA2\uD9DE\u0000\u0000\u8EA2\uD9D7\u0000\uF4FE\u8EA2\uDED5" + // 15940 - 15944
-                "\u8EA2\uDEDB\u0000\uF5A4\u0000\uF5A6\u0000\uF5A3\u8EA2\uB2B3" + // 15945 - 15949
-                "\u8EA2\uB2B1\u0000\uD7DB\u0000\u0000\u0000\u0000\u0000\uD7DD" + // 15950 - 15954
-                "\u0000\uD7E0\u0000\u0000\u0000\uD7E3\u0000\u0000\u0000\uD7E5" + // 15955 - 15959
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15960 - 15964
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 15965 - 15969
-                "\u8EA2\uB8D2\u0000\uDCE9\u0000\u0000\u8EA2\uB8C9\u8EA2\uB8CB" + // 15970 - 15974
-                "\u0000\u0000\u8EA2\uB8CC\u0000\u0000\u8EA2\uB8D4\u8EA2\uB8D0" + // 15975 - 15979
-                "\u8EA2\uB8CE\u0000\u0000\u8EA2\uB8D1\u8EA2\uB8D5\u0000\uDCEA" + // 15980 - 15984
-                "\u0000\uDCEE\u8EA2\uB8CA\u0000\u0000\u8EA2\uB8D3\u0000\u0000" + // 15985 - 15989
-                "\u0000\uDCEC\u0000\u0000\u0000\uDCEB\u8EA2\uB8CF\u8EA2\uB8CD" + // 15990 - 15994
-                "\u0000\u0000\u0000\uDCE8\u0000\uDCED\u0000\u0000\u0000\u0000" + // 15995 - 15999
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16000 - 16004
-                "\u0000\u0000\u0000\uE1CE\u8EA2\uBFB6\u0000\u0000\u0000\u0000" + // 16005 - 16009
-                "\u8EA2\uBFB4\u0000\uE1D0\u0000\u0000\u0000\uD3E8\u0000\u0000" + // 16010 - 16014
-                "\u0000\uD3E9\u0000\u0000\u8EA2\uADDC\u0000\u0000\u8EA2\uADDE" + // 16015 - 16019
-                "\u8EA2\uADE0\u0000\u0000\u0000\uD3E6\u8EA2\uADDF\u0000\u0000" + // 16020 - 16024
-                "\u0000\u0000\u0000\uD3E7\u0000\u0000\u0000\u0000\u0000\u0000" + // 16025 - 16029
-                "\u0000\u0000\u0000\u0000\u8EA2\uB9F1\u8EA2\uADDB\u8EA2\uB3B6" + // 16030 - 16034
-                "\u8EA2\uB3BF\u8EA2\uB3BD\u8EA2\uB3B8\u8EA2\uB3B9\u8EA2\uB3BE" + // 16035 - 16039
-                "\u8EA2\uB3C0\u0000\uD8D6\u0000\u0000\u8EA2\uB3BB\u8EA2\uB3B7" + // 16040 - 16044
-                "\u0000\uD8D5\u0000\uD8D7\u8EA2\uB3BA\u8EA2\uB3C1\u8EA2\uB3BC" + // 16045 - 16049
-                "\u0000\u0000\u0000\u0000\u0000\uDDE5\u8EA2\uB9F4\u8EA2\uB9EC" + // 16050 - 16054
-                "\u8EA2\uB9F2\u8EA2\uB9F3\u0000\uDDE6\u0000\u0000\u8EA2\uB9EB" + // 16055 - 16059
-                "\u8EA2\uB9ED\u8EA2\uADD8\u8EA2\uB9EF\u8EA2\uB9F0\u8EA2\uB9EE" + // 16060 - 16064
-                "\u0000\uE2D3\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC0FB" + // 16065 - 16069
-                "\u8EA2\uDBA2\u8EA2\uC0FC\u8EA2\uC0F9\u0000\uDDE7\u0000\uE2D5" + // 16070 - 16074
-                "\u8EA2\uC0F8\u0000\uFAAE\u0000\uC8D2\u0000\u0000\u0000\uC8D3" + // 16075 - 16079
-                "\u0000\uD7D3\u0000\uCFAF\u0000\uD7D2\u8EA2\uACF2\u0000\u0000" + // 16080 - 16084
-                "\u0000\u0000\u0000\u0000\u0000\uE1C6\u0000\uC8D4\u0000\uD3A4" + // 16085 - 16089
-                "\u8EA2\uACF3\u8EA2\uACF4\u0000\uD3A3\u0000\uD3A5\u0000\uC8D5" + // 16090 - 16094
-                "\u0000\u0000\u8EA2\uACF5\u0000\uD7D5\u8EA2\uB2AA\u0000\uD7D7" + // 16095 - 16099
-                "\u0000\uD7D4\u0000\uD7D6\u0000\u0000\u8EA2\uB8C5\u0000\uDCE5" + // 16100 - 16104
-                "\u0000\u0000\u8EA2\uB8C4\u8EA2\uB8C3\u0000\u0000\u8EA2\uC6B8" + // 16105 - 16109
-                "\u0000\u0000\u0000\u0000\u8EA2\uCDA8\u0000\u0000\u0000\uEECB" + // 16110 - 16114
-                "\u0000\u0000\u0000\uF1F6\u8EA2\uD9D2\u8EA2\uD9D1\u0000\u0000" + // 16115 - 16119
-                "\u8EA2\uDED4\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uEBFD" + // 16120 - 16124
-                "\u0000\u0000\u0000\u0000\u0000\uC8D6\u8EA2\uA4F3\u8EA2\uA8CA" + // 16125 - 16129
-                "\u0000\uD3A6\u8EA2\uACF6\u0000\u0000\u8EA2\uB2AC\u0000\u0000" + // 16130 - 16134
-                "\u0000\u0000\u0000\u0000\u0000\uD7D8\u8EA2\uB2AB\u0000\uD7D9" + // 16135 - 16139
-                "\u8EA2\uB2A9\u0000\uD7D1\u8EA2\uB2A8\u8EA2\uB2A7\u0000\u0000" + // 16140 - 16144
-                "\u0000\uD7D0\u0000\u0000\u8EA2\uB8C0\u0000\u0000\u8EA2\uB8C2" + // 16145 - 16149
-                "\u8EA2\uB8BB\u8EA2\uB8BC\u0000\uDCE2\u8EA2\uB8BD\u0000\uDCE3" + // 16150 - 16154
-                "\u8EA2\uB8C1\u8EA2\uB8BE\u8EA2\uB8BF\u0000\uDCE4\u0000\u0000" + // 16155 - 16159
-                "\u0000\uE1C4\u0000\uE1C5\u0000\u0000\u8EA2\uBFA9\u0000\u0000" + // 16160 - 16164
-                "\u0000\u0000\u0000\u0000\u8EA2\uC6B6\u8EA2\uC6B7\u0000\u0000" + // 16165 - 16169
-                "\u8EA2\uCDA7\u0000\uEACB\u0000\uEAC9\u0000\uEACA\u8EA2\uCDA4" + // 16170 - 16174
-                "\u8EA2\uCDA5\u0000\u0000\u8EA2\uCDA6\u8EA2\uD3A3\u0000\u0000" + // 16175 - 16179
-                "\u8EA2\uD3A4\u0000\uEECA\u8EA2\uD3A1\u8EA2\uD2FE\u8EA2\uD3A2" + // 16180 - 16184
-                "\u8EA2\uD2FD\u0000\uF1F5\u8EA2\uD9D0\u0000\uF1F3\u0000\uF1F4" + // 16185 - 16189
-                "\u8EA2\uDED3\u0000\uF4F5\u8EA2\uDED2\u8EA2\uE1B4\u0000\u0000" + // 16190 - 16194
-                "\u8EA2\uE2E6\u8EA2\uE2E7\u0000\uF7A8\u0000\u0000\u0000\uF7A9" + // 16195 - 16199
-                "\u0000\uF4F6\u8EA2\uE6C8\u8EA2\uE6C9\u8EA2\uE9DE\u8EA2\uE9DC" + // 16200 - 16204
-                "\u8EA2\uE9DB\u0000\uFAAC\u0000\u0000\u0000\u0000\u0000\u0000" + // 16205 - 16209
-                "\u8EA2\uEBF9\u8EA2\uEBF6\u8EA2\uEBF7\u0000\u0000\u8EA2\uEBF5" + // 16210 - 16214
-                "\u8EA2\uEBF8\u0000\uFAFD\u8EA2\uEBFA\u0000\u0000\u0000\uFAFC" + // 16215 - 16219
-                "\u0000\u0000\u8EA2\uEDEF\u0000\u0000\u0000\uFCC1\u0000\uFCC3" + // 16220 - 16224
-                "\u8EA2\uEFBD\u0000\uFCC2\u8EA2\uF0C7\u8EA2\uF1AF\u8EA2\uF1B1" + // 16225 - 16229
-                "\u8EA2\uF1AE\u8EA2\uF1B0\u0000\uFDB9\u0000\u0000\u0000\u0000" + // 16230 - 16234
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16235 - 16239
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16240 - 16244
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16245 - 16249
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16250 - 16254
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16255 - 16259
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16260 - 16264
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16265 - 16269
-                "\u0000\uDEA4\u8EA2\uC1D4\u8EA2\uC8F3\u0000\u0000\u0000\uE7ED" + // 16270 - 16274
-                "\u8EA2\uC8F1\u0000\u0000\u0000\u0000\u8EA2\uC8F2\u0000\u0000" + // 16275 - 16279
-                "\u0000\u0000\u0000\u0000\u8EA2\uCFCA\u8EA2\uCFCB\u0000\uEBFA" + // 16280 - 16284
-                "\u0000\uEBF8\u8EA2\uCFCC\u0000\uEBF9\u8EA2\uD6B3\u0000\u0000" + // 16285 - 16289
-                "\u8EA2\uD6B6\u8EA2\uD6B0\u8EA2\uD6B7\u8EA2\uD6AF\u8EA2\uD6B1" + // 16290 - 16294
-                "\u0000\u0000\u8EA2\uD6B2\u8EA2\uDEC5\u0000\uF4ED\u8EA2\uDEBF" + // 16295 - 16299
-                "\u0000\uF4E8\u8EA2\uDECC\u0000\uF4EC\u0000\uF4E5\u8EA2\uDEC6" + // 16300 - 16304
-                "\u0000\uF4F0\u8EA2\uDEC4\u0000\u0000\u0000\u0000\u8EA2\uDEC8" + // 16305 - 16309
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uE2DA\u8EA2\uE2E0" + // 16310 - 16314
-                "\u0000\uF7A5\u8EA2\uE2E3\u0000\uF6FE\u0000\uF7A1\u8EA2\uE2DB" + // 16315 - 16319
-                "\u8EA2\uE2E2\u8EA2\uE2DD\u0000\uF7A6\u0000\uF7A3\u0000\u0000" + // 16320 - 16324
-                "\u8EA2\uE2D9\u0000\u0000\u0000\uF7A2\u8EA2\uE2DF\u8EA2\uE2E1" + // 16325 - 16329
-                "\u0000\uF7A4\u8EA2\uE2DE\u8EA2\uE2DC\u0000\u0000\u0000\u0000" + // 16330 - 16334
-                "\u0000\u0000\u0000\u0000\u8EA2\uE6C2\u0000\uF8E2\u0000\uF8E3" + // 16335 - 16339
-                "\u0000\uF8DF\u0000\u0000\u0000\uF8E0\u0000\u0000\u8EA2\uE6BE" + // 16340 - 16344
-                "\u8EA2\uE6BC\u0000\u0000\u8EA2\uE6C0\u0000\uF8E4\u8EA2\uE6C1" + // 16345 - 16349
-                "\u8EA2\uE6BA\u8EA2\uE6B9\u8EA2\uE6BD\u8EA2\uE6BB\u0000\uF8E1" + // 16350 - 16354
-                "\u8EA2\uE6BF\u8EA2\uE9D9\u0000\uFAAB\u0000\uFAAA\u8EA2\uE9DA" + // 16355 - 16359
-                "\u0000\u0000\u0000\uE7B8\u0000\uE7AD\u0000\u0000\u8EA2\uC8A7" + // 16360 - 16364
-                "\u0000\u0000\u0000\u0000\u0000\uE7B2\u0000\u0000\u8EA2\uC8A8" + // 16365 - 16369
-                "\u0000\uE7AB\u0000\uE7AA\u0000\u0000\u0000\uE7B5\u0000\uE7B4" + // 16370 - 16374
-                "\u0000\uE7B3\u0000\uE7B1\u0000\uE7B6\u8EA2\uC8A5\u0000\uE7AC" + // 16375 - 16379
-                "\u0000\uE7AE\u0000\uE7B0\u0000\u0000\u0000\u0000\u0000\uEBC0" + // 16380 - 16384
-                "\u0000\uEBC3\u0000\u0000\u0000\uEBC7\u0000\uEBC1\u0000\uEBC6" + // 16385 - 16389
-                "\u0000\uEBC4\u0000\u0000\u0000\uEBBF\u0000\u0000\u0000\uEBC5" + // 16390 - 16394
-                "\u0000\uEBC2\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uD4FA" + // 16395 - 16399
-                "\u0000\uEFCD\u0000\uEFCB\u0000\u0000\u8EA2\uD4FB\u0000\u0000" + // 16400 - 16404
-                "\u0000\uEFCE\u0000\uEFCC\u8EA2\uD4F9\u8EA2\uD4F8\u0000\u0000" + // 16405 - 16409
-                "\u0000\uF2DA\u8EA2\uD4F7\u0000\uF2D8\u0000\uF2D7\u8EA2\uDAFC" + // 16410 - 16414
-                "\u0000\uEFCF\u0000\uF2D9\u8EA2\uDAFD\u0000\uF2DC\u8EA2\uDAFE" + // 16415 - 16419
-                "\u0000\uF2DB\u0000\uF5E3\u8EA2\uDFEF\u0000\uF5E2\u8EA2\uCCEF" + // 16420 - 16424
-                "\u8EA2\uCCEE\u8EA2\uCCEB\u0000\u0000\u8EA2\uCCF3\u8EA2\uCCF0" + // 16425 - 16429
-                "\u8EA2\uCCF4\u0000\uEAC6\u0000\u0000\u8EA2\uCDA2\u0000\uEABB" + // 16430 - 16434
-                "\u8EA2\uCCF5\u8EA2\uCCF6\u0000\u0000\u8EA2\uCCF2\u0000\u0000" + // 16435 - 16439
-                "\u0000\u0000\u0000\u0000\u0000\uEAC5\u0000\u0000\u0000\u0000" + // 16440 - 16444
-                "\u0000\u0000\u0000\u0000\u8EA2\uD2EF\u0000\uEEBB\u0000\uEEC4" + // 16445 - 16449
-                "\u0000\uEEC0\u8EA2\uD2EC\u0000\u0000\u0000\uEEBD\u0000\uEEC1" + // 16450 - 16454
-                "\u8EA2\uD2F8\u0000\uEEB7\u8EA2\uD2F0\u0000\u0000\u0000\uEEBF" + // 16455 - 16459
-                "\u0000\u0000\u0000\u0000\u8EA2\uD2F3\u8EA2\uD2EE\u0000\uEEBE" + // 16460 - 16464
-                "\u0000\uEEC2\u8EA2\uD2ED\u0000\u0000\u0000\uEEBC\u0000\u0000" + // 16465 - 16469
-                "\u8EA2\uD2F7\u0000\uEEB9\u8EA2\uD2F6\u8EA2\uD2F5\u0000\uEEC5" + // 16470 - 16474
-                "\u8EA2\uD0BB\u0000\uEEB8\u0000\u0000\u8EA2\uD2F4\u8EA2\uD2EB" + // 16475 - 16479
-                "\u0000\u0000\u0000\uEEC6\u8EA2\uD2F2\u0000\uEEBA\u0000\u0000" + // 16480 - 16484
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EAD\uA1BA\u8EAD\uA1BB" + // 16485 - 16489
-                "\u0000\u0000\u0000\u0000\u8EAD\uA1B8\u8EAD\uA1B9\u0000\u0000" + // 16490 - 16494
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16495 - 16499
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16500 - 16504
-                "\u0000\u0000\u0000\u0000\u0000\uA2D3\u0000\u0000\u0000\u0000" + // 16505 - 16509
-                "\u0000\u0000\u0000\uA2D4\u0000\u0000\u0000\u0000\u0000\u0000" + // 16510 - 16514
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16515 - 16519
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA2C7\u0000\u0000" + // 16520 - 16524
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16525 - 16529
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16530 - 16534
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16535 - 16539
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16540 - 16544
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA2CA" + // 16545 - 16549
-                "\u8EA2\uC5FE\u0000\uE5F1\u0000\u0000\u8EA2\uC6A7\u8EA2\uC6AB" + // 16550 - 16554
-                "\u8EA2\uC6A3\u8EA2\uC5FD\u0000\u0000\u8EA2\uC5FC\u0000\u0000" + // 16555 - 16559
-                "\u0000\u0000\u0000\u0000\u8EA2\uC6A9\u8EA2\uC6A1\u8EA2\uC6A5" + // 16560 - 16564
-                "\u0000\uE5F2\u0000\u0000\u0000\uE5F0\u8EA2\uC6AD\u0000\uE5EE" + // 16565 - 16569
-                "\u8EA2\uC6AA\u0000\u0000\u8EA2\uCCF9\u0000\u0000\u0000\u0000" + // 16570 - 16574
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAB7\u8EA2\uCCF1" + // 16575 - 16579
-                "\u0000\uEEC3\u8EA2\uCCFB\u0000\uEABA\u8EA2\uCDA1\u0000\uEAC0" + // 16580 - 16584
-                "\u8EA2\uCCEC\u0000\u0000\u0000\u0000\u8EA2\uCCFC\u8EA2\uCCE9" + // 16585 - 16589
-                "\u0000\u0000\u8EA2\uCCFE\u8EA2\uCCED\u0000\u0000\u0000\uEAC7" + // 16590 - 16594
-                "\u0000\uEAC4\u8EA2\uCCFD\u8EA2\uCCF7\u0000\uEAB6\u0000\uEABE" + // 16595 - 16599
-                "\u0000\uEABD\u0000\u0000\u0000\uEABC\u0000\uEAC2\u0000\u0000" + // 16600 - 16604
-                "\u8EA2\uCCEA\u0000\uEAC3\u8EA2\uCCF8\u0000\uEABF\u0000\uEAB5" + // 16605 - 16609
-                "\u8EA2\uCCFA\u0000\uEAB8\u0000\uEAB9\u0000\uEAC1\u0000\uDCD7" + // 16610 - 16614
-                "\u8EA2\uB8AF\u0000\uDCDC\u0000\uDCD2\u0000\uDCDA\u8EA2\uB8AC" + // 16615 - 16619
-                "\u0000\uDCD1\u8EA2\uB8B0\u0000\u0000\u0000\u0000\u8EA2\uB8B3" + // 16620 - 16624
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uBFA1\u8EA2\uBEF6" + // 16625 - 16629
-                "\u0000\uE1B8\u8EA2\uBEFD\u8EA2\uBEFA\u8EA2\uBEF2\u8EA2\uBEFB" + // 16630 - 16634
-                "\u0000\uE1BA\u8EA2\uBEF3\u0000\u0000\u8EA2\uBEEF\u0000\u0000" + // 16635 - 16639
-                "\u0000\u0000\u0000\uE5F3\u8EA2\uBEF8\u0000\u0000\u0000\uE1B7" + // 16640 - 16644
-                "\u8EA2\uBEFE\u0000\u0000\u0000\uE1BE\u0000\uE1C0\u8EA2\uBEF1" + // 16645 - 16649
-                "\u0000\u0000\u0000\u0000\u0000\uE1BF\u8EA2\uBEF4\u0000\uE1B9" + // 16650 - 16654
-                "\u8EA2\uBEFC\u8EA2\uBEF5\u8EA2\uBEF9\u0000\u0000\u8EA2\uBEF7" + // 16655 - 16659
-                "\u0000\uE1BC\u8EA2\uBEF0\u0000\uE1C1\u0000\uDCD3\u0000\uE1BD" + // 16660 - 16664
-                "\u0000\uE1C2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16665 - 16669
-                "\u0000\u0000\u0000\uE5EF\u8EA2\uC6A4\u8EA2\uC6A6\u8EA2\uC6A8" + // 16670 - 16674
-                "\u8EA2\uC6AC\u0000\u0000\u8EA2\uC6A2\u0000\uD2F9\u8EA2\uACED" + // 16675 - 16679
-                "\u0000\uD2F7\u8EA2\uACEB\u0000\uD2FC\u0000\uD2F8\u0000\uD2FD" + // 16680 - 16684
-                "\u0000\uD2FB\u8EA2\uACEC\u0000\uD2FA\u0000\uD7C2\u0000\uD7C1" + // 16685 - 16689
-                "\u8EA2\uB1FC\u0000\uD7CA\u8EA2\uB1F5\u8EA2\uB1FB\u0000\uD7C6" + // 16690 - 16694
-                "\u8EA2\uB1F4\u8EA2\uB1FA\u8EA2\uB1F8\u0000\uD7C5\u0000\uD7C7" + // 16695 - 16699
-                "\u8EA2\uB1F7\u0000\uD7C0\u8EA2\uB1F6\u0000\uD7CB\u0000\uD7C8" + // 16700 - 16704
-                "\u0000\uD7CC\u0000\uD7C9\u8EA2\uB1F3\u8EA2\uB1F2\u8EA2\uB1F9" + // 16705 - 16709
-                "\u0000\uD7C3\u0000\uD7BF\u0000\uD7C4\u0000\u0000\u0000\u0000" + // 16710 - 16714
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uB8B5\u8EA2\uB8AE" + // 16715 - 16719
-                "\u0000\u0000\u0000\uE1BB\u8EA2\uB8AD\u0000\u0000\u0000\uDCD4" + // 16720 - 16724
-                "\u0000\uDCDB\u0000\uDCD8\u0000\uDCDE\u0000\uDCDD\u0000\uDCD9" + // 16725 - 16729
-                "\u0000\u0000\u8EA2\uB8A7\u8EA2\uB8AA\u0000\u0000\u8EA2\uB8A9" + // 16730 - 16734
-                "\u0000\uDCD5\u8EA2\uB8AB\u8EA2\uB8B4\u0000\uDCD6\u8EA2\uB8A8" + // 16735 - 16739
-                "\u8EA2\uB8B1\u8EA2\uB8B2\u8EA2\uACE9\u8EA2\uACEA\u0000\u0000" + // 16740 - 16744
-                "\u0000\u0000\u8EA2\uB1EB\u8EA2\uB1F1\u0000\u0000\u0000\u0000" + // 16745 - 16749
-                "\u8EA2\uB1EF\u0000\uD7BE\u8EA2\uB1ED\u0000\u0000\u8EA2\uB1EE" + // 16750 - 16754
-                "\u8EA2\uB1F0\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uB1EC" + // 16755 - 16759
-                "\u0000\uDCCE\u0000\u0000\u8EA2\uB8A3\u0000\uDCD0\u8EA2\uB8A5" + // 16760 - 16764
-                "\u0000\uDCCF\u8EA2\uB8A4\u0000\u0000\u0000\u0000\u0000\u0000" + // 16765 - 16769
-                "\u0000\u0000\u0000\u0000\u8EA2\uBEEC\u0000\uE1B5\u0000\u0000" + // 16770 - 16774
-                "\u8EA2\uBEEE\u8EA2\uBEEB\u8EA2\uB8A6\u0000\u0000\u0000\uE1B6" + // 16775 - 16779
-                "\u0000\u0000\u0000\u0000\u8EA2\uBEED\u0000\u0000\u0000\u0000" + // 16780 - 16784
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC5FB" + // 16785 - 16789
-                "\u0000\u0000\u0000\uE5EB\u8EA2\uC5F9\u0000\uE5EC\u8EA2\uC5FA" + // 16790 - 16794
-                "\u0000\uE5ED\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAB2" + // 16795 - 16799
-                "\u8EA2\uCCE8\u8EA2\uCCE5\u8EA2\uCCE7\u0000\uEAB3\u0000\uEAB4" + // 16800 - 16804
-                "\u8EA2\uCCE6\u0000\uF8DE\u0000\u0000\u0000\u0000\u0000\uFAA5" + // 16805 - 16809
-                "\u0000\u0000\u8EA2\uE9D7\u0000\u0000\u8EA2\uE9D6\u8EA2\uE9D4" + // 16810 - 16814
-                "\u8EA2\uE9D3\u8EA2\uE9D5\u0000\u0000\u0000\uFAA4\u0000\uFAA6" + // 16815 - 16819
-                "\u0000\u0000\u0000\u0000\u0000\uFAFB\u0000\u0000\u0000\u0000" + // 16820 - 16824
-                "\u8EA2\uEBF3\u8EA2\uEBF2\u0000\u0000\u0000\u0000\u8EA2\uEDE8" + // 16825 - 16829
-                "\u0000\u0000\u8EA2\uEDEA\u8EA2\uEDEC\u8EA2\uEDEB\u8EA2\uEDE9" + // 16830 - 16834
-                "\u0000\u0000\u0000\u0000\u0000\uFBED\u0000\uFBEC\u0000\u0000" + // 16835 - 16839
-                "\u0000\u0000\u0000\uFCBF\u0000\uFCBE\u0000\uFCC0\u8EA2\uEFBC" + // 16840 - 16844
-                "\u8EA2\uEFBB\u0000\u0000\u8EA2\uF1AB\u8EA2\uF0C6\u8EA2\uF1AC" + // 16845 - 16849
-                "\u0000\uFDA5\u0000\u0000\u0000\uFDA6\u8EA2\uF1DC\u0000\u0000" + // 16850 - 16854
-                "\u0000\u0000\u0000\uFDCB\u0000\uC8CD\u0000\u0000\u8EA2\uA8C8" + // 16855 - 16859
-                "\u0000\u0000\u0000\u0000\u8EA2\uACE6\u8EA2\uACE7\u8EA2\uACE5" + // 16860 - 16864
-                "\u0000\u0000\u0000\u0000\u0000\uD2F6\u0000\u0000\u8EA2\uACE8" + // 16865 - 16869
-                "\u8EA2\uDEAA\u8EA2\uDEB4\u8EA2\uDEB1\u8EA2\uDEB3\u0000\u0000" + // 16870 - 16874
-                "\u8EA2\uDEA7\u8EA2\uDEB7\u0000\uF4D6\u0000\u0000\u8EA2\uDEB2" + // 16875 - 16879
-                "\u8EA2\uDEBB\u8EA2\uDEAF\u0000\uF4DA\u0000\uF4D7\u8EA2\uDEAD" + // 16880 - 16884
-                "\u8EA2\uDEA8\u8EA2\uDEBA\u0000\uF1DF\u0000\u0000\u0000\u0000" + // 16885 - 16889
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16890 - 16894
-                "\u8EA2\uE2CF\u0000\u0000\u0000\u0000\u8EA2\uE2CD\u8EA2\uE2D3" + // 16895 - 16899
-                "\u0000\uF6FA\u8EA2\uE2D1\u8EA2\uE2D0\u0000\uF6FC\u8EA2\uE2D6" + // 16900 - 16904
-                "\u0000\uF6FB\u0000\u0000\u8EA2\uE2D7\u8EA2\uE2D4\u0000\uF6F8" + // 16905 - 16909
-                "\u8EA2\uE2D5\u8EA2\uE2CE\u0000\uF6F9\u0000\uF6F7\u8EA2\uE6B5" + // 16910 - 16914
-                "\u8EA2\uE2D2\u0000\u0000\u0000\u0000\u8EA2\uE2D8\u0000\u0000" + // 16915 - 16919
-                "\u0000\u0000\u8EA2\uE6B2\u0000\u0000\u0000\u0000\u0000\u0000" + // 16920 - 16924
-                "\u0000\uF8DD\u0000\uF8DB\u8EA2\uE6B4\u0000\u0000\u8EA2\uE6B6" + // 16925 - 16929
-                "\u8EA2\uE6B3\u0000\uF8DC\u0000\uF8D9\u0000\uF8DA\u0000\uE5E7" + // 16930 - 16934
-                "\u0000\uEEB3\u0000\u0000\u0000\u0000\u0000\uEEAF\u0000\u0000" + // 16935 - 16939
-                "\u0000\uEEB1\u0000\uEEB2\u0000\u0000\u0000\uF1E0\u8EA2\uD2E5" + // 16940 - 16944
-                "\u8EA2\uD2DF\u0000\uEEB5\u0000\u0000\u8EA2\uD2E2\u0000\u0000" + // 16945 - 16949
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uD9AC" + // 16950 - 16954
-                "\u8EA2\uD9A7\u0000\u0000\u0000\u0000\u8EA2\uD9B1\u0000\uF1DE" + // 16955 - 16959
-                "\u8EA2\uD9A9\u0000\uF1E2\u8EA2\uD9AF\u8EA2\uD9A6\u8EA2\uD9A3" + // 16960 - 16964
-                "\u8EA2\uD9B2\u0000\uF4DB\u0000\uF1E3\u8EA2\uD9AE\u8EA2\uD9A4" + // 16965 - 16969
-                "\u0000\uF1E1\u8EA2\uD9A8\u0000\uF1E5\u8EA2\uD9A5\u8EA2\uD9AA" + // 16970 - 16974
-                "\u0000\uF1E4\u8EA2\uD9AD\u8EA2\uD9B0\u0000\u0000\u0000\u0000" + // 16975 - 16979
-                "\u0000\u0000\u0000\u0000\u8EA2\uDEB8\u8EA2\uDEB9\u8EA2\uDEA9" + // 16980 - 16984
-                "\u8EA2\uDEB0\u8EA2\uDEAE\u0000\u0000\u0000\u0000\u0000\uF4D9" + // 16985 - 16989
-                "\u8EA2\uDEB5\u8EA2\uD9AB\u0000\u0000\u8EA2\uDEAC\u0000\u0000" + // 16990 - 16994
-                "\u8EA2\uDEB6\u0000\uF4D8\u8EA2\uDEAB\u8EA2\uBEE8\u0000\u0000" + // 16995 - 16999
-                "\u0000\u0000\u0000\u0000\u8EA2\uBEE4\u8EA2\uBEEA\u0000\uE1AD" + // 17000 - 17004
-                "\u8EA2\uBEE3\u8EA2\uBEE5\u0000\uE1AB\u8EA2\uBEE2\u0000\uE1B2" + // 17005 - 17009
-                "\u8EA2\uBEE6\u0000\uE1B1\u8EA2\uBEE7\u0000\uE1B3\u0000\uE1AE" + // 17010 - 17014
-                "\u0000\uE1B4\u0000\uE1AF\u0000\u0000\u0000\uE1B0\u0000\u0000" + // 17015 - 17019
-                "\u0000\uE1AC\u0000\u0000\u8EA2\uBEE9\u0000\u0000\u0000\u0000" + // 17020 - 17024
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17025 - 17029
-                "\u0000\uE5E8\u8EA2\uC5F5\u0000\u0000\u8EA2\uC5F8\u8EA2\uC5EC" + // 17030 - 17034
-                "\u8EA2\uC5F1\u8EA2\uC5EB\u0000\uE5EA\u0000\u0000\u8EA2\uC5EF" + // 17035 - 17039
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC5ED\u0000\uE5E9" + // 17040 - 17044
-                "\u0000\u0000\u8EA2\uC5F4\u8EA2\uC5F3\u8EA2\uC5F0\u8EA2\uC5F2" + // 17045 - 17049
-                "\u8EA2\uC5EE\u0000\uEAAA\u8EA2\uC5F7\u0000\uE5E6\u8EA2\uC5F6" + // 17050 - 17054
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17055 - 17059
-                "\u0000\u0000\u0000\u0000\u0000\uC5FD\u0000\uC5FE\u0000\u0000" + // 17060 - 17064
-                "\u0000\uC7CA\u8EA2\uA3B3\u8EA2\uA5D6\u8EA2\uA5D7\u0000\u0000" + // 17065 - 17069
-                "\u0000\uD0B1\u8EA2\uAEB1\u0000\uD9B1\u0000\uD9B0\u8EA2\uBAC7" + // 17070 - 17074
-                "\u8EA2\uBAC6\u0000\u0000\u0000\u0000\u0000\uC4B1\u0000\uC5A7" + // 17075 - 17079
-                "\u0000\uC6A1\u0000\u0000\u0000\uD9B2\u8EA2\uA1A4\u0000\u0000" + // 17080 - 17084
-                "\u8EA2\uA1CD\u0000\uC6A2\u0000\u0000\u8EA2\uA2A2\u0000\uC7CC" + // 17085 - 17089
-                "\u0000\uC7CB\u8EA2\uA2A1\u0000\uC9BA\u0000\u0000\u0000\u0000" + // 17090 - 17094
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD4CD" + // 17095 - 17099
-                "\u0000\u0000\u0000\u0000\u8EA2\uB3F2\u0000\u0000\u0000\uE3BE" + // 17100 - 17104
-                "\u8EA2\uC9AC\u0000\uE8A4\u0000\u0000\u0000\u0000\u8EA2\uD6C5" + // 17105 - 17109
-                "\u0000\u0000\u0000\u0000\u8EA2\uE8EA\u0000\uA7B7\u0000\uC5A8" + // 17110 - 17114
-                "\u0000\u0000\u0000\u0000\u8EA2\uA5D8\u8EA2\uA9B6\u0000\uD9B5" + // 17115 - 17119
-                "\u0000\uD9B3\u8EA2\uACE3\u8EA2\uACE4\u0000\u0000\u0000\u0000" + // 17120 - 17124
-                "\u8EA2\uB1E2\u8EA2\uB1E4\u0000\uD7BC\u0000\u0000\u8EA2\uB1E6" + // 17125 - 17129
-                "\u8EA2\uB1E9\u8EA2\uB1E7\u0000\u0000\u0000\u0000\u0000\u0000" + // 17130 - 17134
-                "\u8EA2\uB1E8\u8EA2\uB1E5\u8EA2\uB1E1\u0000\uD7BD\u8EA2\uB1EA" + // 17135 - 17139
-                "\u8EA2\uB1E3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17140 - 17144
-                "\u8EA2\uB7F6\u0000\uDCCB\u8EA2\uB8A1\u0000\uDCC8\u0000\u0000" + // 17145 - 17149
-                "\u8EA2\uB7F8\u0000\uDCCC\u0000\u0000\u0000\uDCC6\u0000\u0000" + // 17150 - 17154
-                "\u8EA2\uB7F3\u8EA2\uB8A2\u8EA2\uB7F4\u8EA2\uB7F1\u0000\uDCCA" + // 17155 - 17159
-                "\u0000\u0000\u0000\uDCC7\u0000\u0000\u8EA2\uB7F7\u8EA2\uB7FA" + // 17160 - 17164
-                "\u0000\uDCC9\u8EA2\uB7FB\u0000\uDCCD\u8EA2\uB7FC\u8EA2\uB7F2" + // 17165 - 17169
-                "\u8EA2\uB7F9\u8EA2\uB7FD\u8EA2\uB7F5\u8EA2\uB7F0\u8EA2\uB7EE" + // 17170 - 17174
-                "\u0000\u0000\u0000\u0000\u8EA2\uB7FE\u0000\u0000\u0000\u0000" + // 17175 - 17179
-                "\u8EA2\uB7EF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17180 - 17184
-                "\u8EA2\uBFAF\u8EA2\uC6C6\u0000\u0000\u0000\uE1CF\u8EA2\uBFB3" + // 17185 - 17189
-                "\u0000\u0000\u0000\u0000\u8EA2\uBFB0\u0000\uE1CB\u0000\uE1D1" + // 17190 - 17194
-                "\u8EA2\uBFB5\u0000\uE1CD\u8EA2\uBFB2\u0000\uEACF\u0000\uE1CC" + // 17195 - 17199
-                "\u8EA2\uBFB1\u0000\uE1D2\u0000\uE1CA\u0000\uE1C9\u0000\u0000" + // 17200 - 17204
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC6BE" + // 17205 - 17209
-                "\u8EA2\uC6BC\u0000\u0000\u8EA2\uC6C2\u0000\u0000\u8EA2\uC6BA" + // 17210 - 17214
-                "\u8EA2\uC6C7\u8EA2\uC6BF\u0000\u0000\u8EA2\uC6B9\u0000\uE6A4" + // 17215 - 17219
-                "\u0000\uE6AA\u8EA2\uC6C4\u0000\u0000\u8EA2\uC6BD\u0000\u0000" + // 17220 - 17224
-                "\u0000\uE6A7\u0000\u0000\u0000\u0000\u0000\uE6A5\u8EA2\uC6C5" + // 17225 - 17229
-                "\u0000\uE6A2\u0000\uE6A1\u8EA2\uC6C0\u0000\uE6A6\u0000\uE1D3" + // 17230 - 17234
-                "\u0000\u0000\u8EA2\uC6C3\u8EA2\uC6BB\u0000\uE6A3\u0000\uE6A8" + // 17235 - 17239
-                "\u0000\uE6A9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17240 - 17244
-                "\u0000\uEAD4\u8EA2\uDEA5\u8EA2\uDEA6\u0000\u0000\u0000\u0000" + // 17245 - 17249
-                "\u0000\uF6F5\u0000\uF6F6\u0000\u0000\u0000\uFAA2\u0000\u0000" + // 17250 - 17254
-                "\u0000\u0000\u0000\uFCBD\u0000\uC7A1\u0000\u0000\u0000\u0000" + // 17255 - 17259
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uACE2\u0000\u0000" + // 17260 - 17264
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17265 - 17269
-                "\u8EA2\uB1E0\u0000\uD7BB\u0000\u0000\u0000\u0000\u0000\u0000" + // 17270 - 17274
-                "\u0000\u0000\u0000\u0000\u0000\uDDFE\u0000\uDDFD\u0000\u0000" + // 17275 - 17279
-                "\u0000\u0000\u0000\uE1AA\u8EA2\uBEE1\u0000\uE1A9\u8EA2\uBEE0" + // 17280 - 17284
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC5EA" + // 17285 - 17289
-                "\u0000\u0000\u0000\uEAA5\u8EA2\uCCD4\u0000\uEAA6\u0000\u0000" + // 17290 - 17294
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17295 - 17299
-                "\u0000\uFAA3\u8EA2\uE9D2\u0000\u0000\u0000\uC8CC\u0000\uCFAA" + // 17300 - 17304
-                "\u8EA2\uA8C7\u0000\u0000\u0000\uD2F5\u0000\u0000\u0000\uD2F4" + // 17305 - 17309
-                "\u8EA2\uACE0\u0000\uD2F3\u0000\u0000\u0000\u0000\u0000\uD7B9" + // 17310 - 17314
-                "\u8EA2\uB1DB\u8EA2\uB1D9\u8EA2\uB1DF\u0000\uD7BA\u8EA2\uB1DA" + // 17315 - 17319
-                "\u8EA2\uB1DE\u8EA2\uB1DC\u8EA2\uB1DD\u0000\u0000\u0000\u0000" + // 17320 - 17324
-                "\u8EA2\uB7EB\u8EA2\uB7ED\u0000\u0000\u0000\uDCC4\u0000\u0000" + // 17325 - 17329
-                "\u8EA2\uB7EC\u0000\uDCC5\u0000\uE1A8\u0000\uE1A7\u0000\uE1A6" + // 17330 - 17334
-                "\u8EA2\uBEDF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17335 - 17339
-                "\u8EA2\uC5E9\u0000\uE5E4\u0000\uE5E5\u0000\u0000\u8EA2\uC5E8" + // 17340 - 17344
-                "\u8EA2\uC5E7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17345 - 17349
-                "\u8EA2\uCCD1\u0000\uEAA4\u0000\uEAA3\u8EA2\uCCD2\u8EA2\uCCD3" + // 17350 - 17354
-                "\u0000\u0000\u0000\uEEAC\u0000\uEEAB\u0000\u0000\u8EA2\uD9A1" + // 17355 - 17359
-                "\u8EA2\uD2DB\u8EA2\uD2DD\u8EA2\uD2DC\u8EA2\uD8FE\u8EA2\uD8FC" + // 17360 - 17364
-                "\u8EA2\uD9A2\u8EA2\uD8FD\u0000\u0000\u0000\uF1DD\u0000\u0000" + // 17365 - 17369
-                "\u0000\u0000\u0000\u0000\u8EA2\uDEA4\u0000\uF4D5\u0000\uEEA7" + // 17370 - 17374
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uD8F9\u0000\u0000" + // 17375 - 17379
-                "\u0000\uF1DA\u8EA2\uD8FB\u8EA2\uD8FA\u0000\u0000\u8EA2\uCCCC" + // 17380 - 17384
-                "\u0000\uF1DC\u0000\uF1DB\u0000\uF1D8\u0000\uF1D9\u0000\u0000" + // 17385 - 17389
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uDEA2" + // 17390 - 17394
-                "\u0000\u0000\u8EA2\uDDFE\u0000\uF4D4\u8EA2\uDEA1\u0000\u0000" + // 17395 - 17399
-                "\u8EA2\uDEA3\u8EA2\uDDFD\u8EA2\uDDFC\u0000\u0000\u0000\u0000" + // 17400 - 17404
-                "\u8EA2\uE2CC\u0000\uF6F4\u0000\uF6F2\u0000\uF6F3\u0000\u0000" + // 17405 - 17409
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uE6B0\u8EA2\uE6B1" + // 17410 - 17414
-                "\u0000\uF8D8\u0000\u0000\u0000\uF8D7\u8EA2\uE9D0\u8EA2\uE9D1" + // 17415 - 17419
-                "\u8EA2\uE9CF\u0000\u0000\u8EA2\uEDE6\u8EA2\uEDE7\u0000\u0000" + // 17420 - 17424
-                "\u0000\u0000\u0000\uC6FE\u8EA2\uA2E8\u0000\uCBB6\u0000\u0000" + // 17425 - 17429
-                "\u8EA2\uA8C5\u0000\uCFA9\u0000\uCFA8\u8EA2\uA8C6\u0000\u0000" + // 17430 - 17434
-                "\u0000\u0000\u8EA2\uACE1\u0000\uD2F2\u0000\uE1A5\u0000\u0000" + // 17435 - 17439
-                "\u8EA2\uBEDA\u8EA2\uBEDC\u8EA2\uBEDE\u0000\uE1A4\u0000\u0000" + // 17440 - 17444
-                "\u0000\u0000\u0000\uE1A2\u0000\u0000\u8EA2\uBEDB\u0000\uE1A3" + // 17445 - 17449
-                "\u8EA2\uBEDD\u0000\uE1A1\u0000\u0000\u0000\u0000\u8EA2\uC5E6" + // 17450 - 17454
-                "\u8EA2\uC5DD\u8EA2\uC5E0\u8EA2\uC5E4\u0000\uE5E1\u8EA2\uC5E2" + // 17455 - 17459
-                "\u0000\u0000\u8EA2\uC5E1\u8EA2\uC5DE\u8EA2\uC5DF\u0000\uE5DF" + // 17460 - 17464
-                "\u8EA2\uC5E5\u0000\uE5DE\u0000\u0000\u0000\uE5E3\u0000\uE5E2" + // 17465 - 17469
-                "\u0000\uE5E0\u0000\u0000\u8EA2\uC5E3\u0000\u0000\u0000\u0000" + // 17470 - 17474
-                "\u0000\u0000\u8EA2\uCCD0\u0000\u0000\u8EA2\uCCCF\u0000\u0000" + // 17475 - 17479
-                "\u0000\u0000\u8EA2\uCCCB\u0000\u0000\u0000\u0000\u0000\uEAA1" + // 17480 - 17484
-                "\u8EA2\uCCCE\u8EA2\uCCCD\u0000\uEAA2\u0000\u0000\u0000\u0000" + // 17485 - 17489
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEEA9\u0000\u0000" + // 17490 - 17494
-                "\u8EA2\uD2DA\u0000\u0000\u0000\uEEAA\u0000\uEEA6\u0000\uEEA8" + // 17495 - 17499
-                "\u0000\u0000\u0000\uEEA5\u0000\uCBB4\u0000\uCBB3\u0000\u0000" + // 17500 - 17504
-                "\u0000\u0000\u0000\u0000\u8EA2\uA8C4\u0000\u0000\u0000\u0000" + // 17505 - 17509
-                "\u0000\uCFA7\u0000\uCFA6\u0000\u0000\u0000\uD2F1\u0000\u0000" + // 17510 - 17514
-                "\u8EA2\uACDC\u8EA2\uACDF\u8EA2\uACDD\u0000\u0000\u0000\uD2EF" + // 17515 - 17519
-                "\u0000\uD2F0\u0000\u0000\u0000\u0000\u8EA2\uACDB\u8EA2\uACDE" + // 17520 - 17524
-                "\u0000\u0000\u0000\uD7B8\u0000\u0000\u0000\u0000\u0000\u0000" + // 17525 - 17529
-                "\u8EA2\uB1D6\u8EA2\uB1D8\u8EA2\uB1D7\u0000\uD7B5\u8EA2\uB1D2" + // 17530 - 17534
-                "\u0000\u0000\u0000\u0000\u0000\uD7B3\u0000\uD7B2\u0000\u0000" + // 17535 - 17539
-                "\u0000\uD7B6\u0000\uD7B4\u0000\u0000\u0000\uD7B7\u8EA2\uB1D5" + // 17540 - 17544
-                "\u8EA2\uB1D0\u8EA2\uB1D1\u8EA2\uB1D4\u8EA2\uB1D3\u0000\u0000" + // 17545 - 17549
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17550 - 17554
-                "\u0000\u0000\u8EA2\uB7E9\u8EA2\uB7EA\u8EA2\uB7E8\u0000\u0000" + // 17555 - 17559
-                "\u8EA2\uB7E7\u0000\uDCC3\u0000\u0000\u0000\u0000\u0000\u0000" + // 17560 - 17564
-                "\u0000\u0000\u8EA2\uB8C7\u0000\u0000\u0000\u0000\u0000\uDCE7" + // 17565 - 17569
-                "\u8EA2\uB8C6\u8EA2\uB8C8\u0000\u0000\u0000\uDCE6\u0000\u0000" + // 17570 - 17574
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uBFAB\u8EA2\uBFAC" + // 17575 - 17579
-                "\u8EA2\uBFAA\u0000\uE1C7\u0000\u0000\u0000\u0000\u0000\u0000" + // 17580 - 17584
-                "\u0000\uE5FB\u0000\u0000\u0000\uE5FC\u0000\u0000\u0000\uEACD" + // 17585 - 17589
-                "\u0000\u0000\u8EA2\uCDAA\u8EA2\uCDA9\u0000\uEACC\u0000\u0000" + // 17590 - 17594
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uD3A5" + // 17595 - 17599
-                "\u0000\u0000\u0000\u0000\u8EA2\uD3A6\u0000\u0000\u0000\u0000" + // 17600 - 17604
-                "\u0000\u0000\u0000\u0000\u8EA2\uD9D3\u0000\u0000\u0000\u0000" + // 17605 - 17609
-                "\u0000\uF4FA\u0000\uF4F9\u0000\uF4F7\u0000\uF4F8\u0000\uF4FB" + // 17610 - 17614
-                "\u0000\u0000\u8EA2\uE2E8\u0000\uF7AB\u0000\uF7AA\u8EA2\uE6CA" + // 17615 - 17619
-                "\u8EA2\uE9DF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFBEF" + // 17620 - 17624
-                "\u0000\uFBEE\u0000\uC8D7\u0000\uCFA4\u0000\uCFA5\u8EA2\uA8C2" + // 17625 - 17629
-                "\u0000\u0000\u8EA2\uACDA\u8EA2\uACD9\u0000\uD2E9\u0000\uD2EC" + // 17630 - 17634
-                "\u0000\uD2EB\u0000\uD2EA\u8EA2\uACD6\u8EA2\uACD8\u8EA2\uACD7" + // 17635 - 17639
-                "\u0000\u0000\u0000\u0000\u8EA2\uB1CB\u0000\uD7AA\u8EA2\uB1CF" + // 17640 - 17644
-                "\u8EA2\uB1CE\u8EA2\uB1CD\u8EA2\uB1C9\u0000\uD7A9\u0000\uD7AD" + // 17645 - 17649
-                "\u0000\uD7B0\u0000\u0000\u0000\u0000\u0000\uD7B1\u8EA2\uB1CA" + // 17650 - 17654
-                "\u8EA2\uB1CC\u0000\uD7AF\u0000\uD7AE\u0000\uD7AC\u0000\uD7AB" + // 17655 - 17659
-                "\u8EA2\uB7E5\u0000\u0000\u8EA2\uB7E3\u8EA2\uB7DF\u0000\uDCC0" + // 17660 - 17664
-                "\u0000\u0000\u8EA2\uB7E0\u0000\uDCC1\u8EA2\uB7E1\u8EA2\uB7E2" + // 17665 - 17669
-                "\u8EA2\uB7E4\u0000\u0000\u0000\uDCC2\u0000\u0000\u0000\u0000" + // 17670 - 17674
-                "\u8EA2\uBED9\u0000\u0000\u8EA2\uBED8\u8EA2\uBED7\u8EA2\uBED6" + // 17675 - 17679
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC5DC" + // 17680 - 17684
-                "\u0000\uE5D9\u0000\u0000\u8EA2\uC5D9\u8EA2\uC5DB\u0000\u0000" + // 17685 - 17689
-                "\u0000\uE5DA\u8EA2\uC5D6\u0000\u0000\u0000\u0000\u8EA2\uC5D3" + // 17690 - 17694
-                "\u8EA2\uC5CE\u8EA2\uC5D0\u8EA2\uC5D1\u8EA2\uC5CA\u0000\u0000" + // 17695 - 17699
-                "\u0000\uE5D4\u0000\u0000\u0000\u0000\u0000\uE5D3\u0000\u0000" + // 17700 - 17704
-                "\u0000\uE5CF\u8EA2\uC5CD\u0000\u0000\u0000\uE5D6\u0000\u0000" + // 17705 - 17709
-                "\u0000\uE5D7\u8EA2\uC5CC\u8EA2\uC5CF\u8EA2\uC5D7\u0000\uE5D1" + // 17710 - 17714
-                "\u0000\uE5D2\u8EA2\uC5D5\u8EA2\uC5CB\u0000\u0000\u0000\u0000" + // 17715 - 17719
-                "\u0000\u0000\u8EA2\uCCBA\u0000\uE9F7\u8EA2\uCCBC\u8EA2\uC5D2" + // 17720 - 17724
-                "\u8EA2\uCCBE\u0000\uE9FB\u8EA2\uCCBF\u8EA2\uCCBB\u0000\u0000" + // 17725 - 17729
-                "\u0000\uE9F8\u8EA2\uCCB7\u0000\uE9FA\u8EA2\uCCB4\u8EA2\uCCB9" + // 17730 - 17734
-                "\u8EA2\uCCBD\u8EA2\uCCB6\u0000\u0000\u0000\u0000\u0000\uE5D0" + // 17735 - 17739
-                "\u0000\u0000\u8EA2\uCCB3\u0000\uE9F9\u8EA2\uCCB5\u0000\u0000" + // 17740 - 17744
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEDFD" + // 17745 - 17749
-                "\u8EA2\uD2C9\u0000\uEEA3\u0000\u0000\u0000\uEEA1\u0000\u0000" + // 17750 - 17754
-                "\u0000\uFAC7\u0000\uFAC9\u0000\u0000\u8EA2\uEAA7\u0000\uFAC8" + // 17755 - 17759
-                "\u8EA2\uEAA5\u0000\uF9A9\u8EA2\uEAA6\u0000\uFAC6\u0000\uFBAF" + // 17760 - 17764
-                "\u0000\uFBB1\u8EA2\uECC5\u0000\uFBB0\u8EA2\uECC4\u0000\u0000" + // 17765 - 17769
-                "\u8EA2\uEEB0\u0000\uFBF7\u8EA2\uEEAF\u0000\uFBF8\u8EA2\uEEAD" + // 17770 - 17774
-                "\u8EA2\uEEAC\u8EA2\uEEB1\u8EA2\uEEB2\u8EA2\uEFD4\u0000\u0000" + // 17775 - 17779
-                "\u8EA2\uEEAE\u0000\u0000\u0000\u0000\u8EA2\uF0D4\u8EA2\uF0D1" + // 17780 - 17784
-                "\u8EA2\uF0D2\u8EA2\uF0D3\u0000\uFDA9\u0000\u0000\u8EA2\uF1C0" + // 17785 - 17789
-                "\u8EA2\uF1BF\u8EA2\uF1BE\u8EA2\uF1DF\u0000\u0000\u8EA2\uF2AE" + // 17790 - 17794
-                "\u8EA2\uF1F9\u0000\uFDBB\u0000\uCBCE\u0000\uD8C5\u0000\u0000" + // 17795 - 17799
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7A3" + // 17800 - 17804
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17805 - 17809
-                "\u0000\u0000\u0000\u0000\u0000\uEFC1\u0000\u0000\u0000\u0000" + // 17810 - 17814
-                "\u8EA2\uDAF4\u0000\u0000\u0000\u0000\u0000\uF0C9\u8EA2\uD6D8" + // 17815 - 17819
-                "\u0000\u0000\u0000\u0000\u0000\uF0CC\u8EA2\uD6DA\u0000\uF0CB" + // 17820 - 17824
-                "\u8EA2\uD6D3\u8EA2\uD6D5\u0000\u0000\u0000\u0000\u0000\u0000" + // 17825 - 17829
-                "\u0000\u0000\u0000\uF3CE\u8EA2\uDCD8\u0000\u0000\u0000\uF3CD" + // 17830 - 17834
-                "\u8EA2\uDCD9\u0000\uF3CC\u8EA2\uDCD7\u0000\uF3CB\u8EA2\uDCD6" + // 17835 - 17839
-                "\u0000\u0000\u0000\uF6BF\u0000\uF6BE\u8EA2\uE5C2\u8EA2\uE5C4" + // 17840 - 17844
-                "\u0000\u0000\u8EA2\uE5C3\u0000\uF8AE\u0000\uF8AF\u0000\u0000" + // 17845 - 17849
-                "\u0000\u0000\u0000\uF8B0\u8EA2\uE8EE\u0000\uF9E6\u0000\u0000" + // 17850 - 17854
-                "\u0000\u0000\u8EA2\uEFA2\u8EA2\uEFA1\u0000\uFCDE\u0000\u0000" + // 17855 - 17859
-                "\u0000\uC4C9\u0000\uC5B1\u0000\u0000\u0000\u0000\u0000\uC9E7" + // 17860 - 17864
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA9E0" + // 17865 - 17869
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDEE2" + // 17870 - 17874
-                "\u0000\uDEE3\u0000\u0000\u8EA2\uC2B9\u0000\uE8C0\u8EA2\uC9D0" + // 17875 - 17879
-                "\u8EA2\uCFFA\u8EA2\uCCAF\u8EA2\uCCAA\u8EA2\uCCAD\u8EA2\uCCB2" + // 17880 - 17884
-                "\u0000\uE9F2\u8EA2\uCCAC\u0000\u0000\u0000\uEDF7\u8EA2\uD2C7" + // 17885 - 17889
-                "\u8EA2\uD2C6\u0000\u0000\u0000\uEDFA\u0000\uEDF8\u8EA2\uD2C4" + // 17890 - 17894
-                "\u0000\uEDF6\u8EA2\uD2C5\u0000\u0000\u0000\uEDF9\u0000\u0000" + // 17895 - 17899
-                "\u0000\u0000\u0000\u0000\u8EA2\uD8E9\u0000\u0000\u8EA2\uD8EB" + // 17900 - 17904
-                "\u0000\u0000\u8EA2\uD8EA\u8EA2\uD8E2\u8EA2\uD8E6\u8EA2\uD8E5" + // 17905 - 17909
-                "\u8EA2\uD8E3\u0000\uF1D0\u0000\uF1D1\u0000\uF1CF\u8EA2\uD8E4" + // 17910 - 17914
-                "\u8EA2\uD8E7\u8EA2\uD8E8\u0000\u0000\u0000\uF1D2\u0000\u0000" + // 17915 - 17919
-                "\u0000\uF4CA\u8EA2\uDDED\u0000\u0000\u0000\uF4C7\u8EA2\uDDE7" + // 17920 - 17924
-                "\u0000\uF4C9\u0000\uF4CB\u0000\u0000\u0000\u0000\u0000\uF4C8" + // 17925 - 17929
-                "\u8EA2\uDDEC\u8EA2\uDDE8\u0000\uF4C6\u8EA2\uDDEB\u8EA2\uDDE6" + // 17930 - 17934
-                "\u8EA2\uDDEA\u8EA2\uDDE9\u0000\u0000\u0000\u0000\u8EA2\uE2C2" + // 17935 - 17939
-                "\u0000\uF6EE\u0000\uF6EF\u0000\uF6EC\u0000\u0000\u0000\uF6ED" + // 17940 - 17944
-                "\u0000\uE5B7\u0000\uE5B9\u0000\u0000\u8EA2\uC5AF\u0000\u0000" + // 17945 - 17949
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uCCA3\u0000\uE9EE" + // 17950 - 17954
-                "\u8EA2\uCCA7\u0000\uE9ED\u8EA2\uCCA4\u0000\uE9EC\u0000\u0000" + // 17955 - 17959
-                "\u8EA2\uC5AE\u8EA2\uC5B5\u8EA2\uCCA6\u0000\u0000\u0000\uE9EF" + // 17960 - 17964
-                "\u8EA2\uCCA8\u8EA2\uCCA5\u8EA2\uCCA2\u0000\u0000\u0000\u0000" + // 17965 - 17969
-                "\u8EA2\uD2B9\u8EA2\uD2BD\u8EA2\uD2BF\u8EA2\uD2BB\u8EA2\uD2BA" + // 17970 - 17974
-                "\u8EA2\uD2B8\u0000\uEDEE\u0000\uEDEC\u0000\uEDF1\u0000\uEDF2" + // 17975 - 17979
-                "\u8EA2\uD2BC\u0000\uEDEF\u8EA2\uD2B7\u0000\uEDF0\u0000\uE9EB" + // 17980 - 17984
-                "\u8EA2\uD2BE\u0000\uEDED\u0000\u0000\u0000\u0000\u0000\u0000" + // 17985 - 17989
-                "\u8EA2\uD8D8\u0000\u0000\u8EA2\uD8D7\u8EA2\uD8DF\u8EA2\uD8D9" + // 17990 - 17994
-                "\u8EA2\uD8DE\u8EA2\uD8DB\u0000\uF1CA\u8EA2\uD8DD\u0000\u0000" + // 17995 - 17999
-                "\u0000\u0000\u0000\uF1CB\u0000\u0000\u0000\uF1CC\u0000\u0000" + // 18000 - 18004
-                "\u8EA2\uD8DC\u8EA2\uD8DA\u0000\u0000\u0000\u0000\u8EA2\uAECA" + // 18005 - 18009
-                "\u8EA2\uAECB\u0000\uD4E7\u0000\uD4E8\u0000\u0000\u0000\u0000" + // 18010 - 18014
-                "\u8EA2\uB4AF\u0000\uD9CE\u0000\uD9D0\u8EA2\uB4AE\u0000\uD9CF" + // 18015 - 18019
-                "\u8EA2\uBAE0\u0000\uDED8\u0000\u0000\u0000\u0000\u0000\u0000" + // 18020 - 18024
-                "\u0000\u0000\u0000\uE3D0\u0000\uE3D1\u8EA2\uC2A8\u0000\u0000" + // 18025 - 18029
-                "\u0000\uE8B7\u0000\u0000\u0000\uE8B6\u0000\u0000\u8EA2\uCFF0" + // 18030 - 18034
-                "\u8EA2\uD6D2\u8EA2\uD6D1\u0000\u0000\u8EA2\uF1DA\u0000\uC4C8" + // 18035 - 18039
-                "\u8EA2\uA1B9\u0000\u0000\u8EA2\uA1CF\u8EA2\uA1D0\u0000\u0000" + // 18040 - 18044
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7E3\u0000\uC7E7" + // 18045 - 18049
-                "\u8EA2\uA2A9\u0000\u0000\u0000\uC7E5\u0000\uC7E4\u8EA2\uA2A8" + // 18050 - 18054
-                "\u0000\uC7E6\u0000\uC7E2\u0000\u0000\u0000\u0000\u0000\uC7E1" + // 18055 - 18059
-                "\u8EA2\uA2AA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18060 - 18064
-                "\u0000\u0000\u0000\u0000\u0000\uC9E6\u0000\u0000\u0000\u0000" + // 18065 - 18069
-                "\u0000\uC9E3\u0000\u0000\u8EA2\uB9DD\u8EA2\uB9DA\u0000\u0000" + // 18070 - 18074
-                "\u0000\u0000\u8EA2\uC0E1\u0000\uE2C7\u8EA2\uC0D9\u8EA2\uC0DF" + // 18075 - 18079
-                "\u0000\u0000\u0000\u0000\u0000\uE2C2\u0000\uE2C5\u8EA2\uC0D8" + // 18080 - 18084
-                "\u0000\uE2C0\u8EA2\uC0DC\u8EA2\uC7F2\u0000\uE2C4\u0000\u0000" + // 18085 - 18089
-                "\u8EA2\uC0D7\u0000\u0000\u8EA2\uC0DD\u8EA2\uC0DA\u8EA2\uC0E0" + // 18090 - 18094
-                "\u8EA2\uC0D6\u8EA2\uC0DE\u0000\uE2C3\u0000\uE2C6\u8EA2\uC0DB" + // 18095 - 18099
-                "\u0000\uE2C1\u0000\u0000\u0000\uE6F9\u8EA2\uC7EE\u0000\uE6F8" + // 18100 - 18104
-                "\u8EA2\uC7F5\u8EA2\uC7F4\u0000\uE7A1\u0000\u0000\u0000\uE7A2" + // 18105 - 18109
-                "\u8EA2\uC7F6\u0000\uE6FA\u8EA2\uC7F3\u0000\uE6FE\u8EA2\uC7F8" + // 18110 - 18114
-                "\u8EA2\uC7EF\u0000\u0000\u8EA2\uC7F1\u0000\uE6FB\u8EA2\uC7ED" + // 18115 - 18119
-                "\u8EA2\uC7F0\u8EA2\uC7F7\u0000\uE6FC\u8EA2\uC7F9\u0000\u0000" + // 18120 - 18124
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6FD" + // 18125 - 18129
-                "\u0000\u0000\u0000\uEBB9\u8EA2\uCEC3\u8EA2\uCEC9\u8EA2\uCEC1" + // 18130 - 18134
-                "\u8EA2\uB1AA\u8EA2\uB1A7\u0000\uD6F0\u0000\u0000\u8EA2\uB1A9" + // 18135 - 18139
-                "\u0000\uD6E9\u0000\u0000\u0000\uD6EA\u0000\u0000\u0000\u0000" + // 18140 - 18144
-                "\u0000\uDCB1\u8EA2\uB7C4\u8EA2\uB7C5\u0000\uDCB2\u8EA2\uB7C1" + // 18145 - 18149
-                "\u8EA2\uB7C3\u8EA2\uB7C7\u8EA2\uB7C6\u8EA2\uB7C2\u0000\u0000" + // 18150 - 18154
-                "\u0000\uDCAE\u0000\uDCAF\u0000\u0000\u8EA2\uBEBA\u0000\uE0F1" + // 18155 - 18159
-                "\u0000\uE0F0\u8EA2\uBEB4\u0000\uE0EE\u0000\u0000\u8EA2\uBEB7" + // 18160 - 18164
-                "\u0000\uE0F2\u8EA2\uBEB8\u0000\uE0F3\u8EA2\uBEB5\u0000\uE0ED" + // 18165 - 18169
-                "\u0000\uE0EF\u8EA2\uBEB9\u0000\u0000\u8EA2\uBEB6\u8EA2\uBEB3" + // 18170 - 18174
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18175 - 18179
-                "\u8EA2\uC5B8\u0000\u0000\u8EA2\uC5AD\u0000\uE5B8\u0000\uE5BB" + // 18180 - 18184
-                "\u0000\uE5BA\u0000\uE5BF\u0000\uE5BE\u8EA2\uC5B9\u8EA2\uC5B7" + // 18185 - 18189
-                "\u8EA2\uC5B0\u8EA2\uC5B4\u8EA2\uC5B3\u0000\uE5BC\u8EA2\uC5B6" + // 18190 - 18194
-                "\u8EA2\uC5B2\u8EA2\uC5BA\u8EA2\uC5B1\u0000\uE5BD\u8EA2\uD8D6" + // 18195 - 18199
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uDDDF\u0000\u0000" + // 18200 - 18204
-                "\u0000\uF8D1\u0000\uF8D0\u0000\u0000\u0000\u0000\u0000\uFBE8" + // 18205 - 18209
-                "\u0000\uC6F4\u8EA2\uA8B5\u0000\u0000\u0000\u0000\u0000\uDCAD" + // 18210 - 18214
-                "\u8EA2\uCCA1\u0000\uE9EA\u0000\uA8A9\u0000\u0000\u8EA2\uA4EF" + // 18215 - 18219
-                "\u8EA2\uA4F0\u0000\u0000\u0000\u0000\u8EA2\uA8B6\u0000\uCEF9" + // 18220 - 18224
-                "\u0000\uCEFA\u0000\u0000\u0000\u0000\u0000\uCEF8\u0000\u0000" + // 18225 - 18229
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD2D2\u0000\uD2D3" + // 18230 - 18234
-                "\u0000\uD2D0\u0000\uD2D1\u0000\u0000\u8EA2\uACBE\u0000\u0000" + // 18235 - 18239
-                "\u0000\u0000\u8EA2\uACBF\u0000\uD2CF\u0000\u0000\u0000\u0000" + // 18240 - 18244
-                "\u0000\u0000\u0000\u0000\u8EA2\uB1A6\u0000\u0000\u0000\uD6EB" + // 18245 - 18249
-                "\u0000\uD6EC\u0000\u0000\u0000\uDCB0\u8EA2\uB1AC\u0000\u0000" + // 18250 - 18254
-                "\u0000\uD6F1\u0000\uD6EF\u8EA2\uB1AD\u8EA2\uB1A8\u0000\uD6EE" + // 18255 - 18259
-                "\u0000\uD6ED\u0000\uD6E8\u8EA2\uB1AB\u8EA2\uA8B3\u0000\u0000" + // 18260 - 18264
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18265 - 18269
-                "\u8EA2\uACBC\u8EA2\uACBD\u0000\u0000\u0000\u0000\u0000\uD2CE" + // 18270 - 18274
-                "\u0000\uD2CC\u0000\u0000\u0000\uD2CD\u0000\uD2CB\u0000\u0000" + // 18275 - 18279
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD6E3\u0000\u0000" + // 18280 - 18284
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD6E7\u0000\uD6E6" + // 18285 - 18289
-                "\u8EA2\uB1A4\u0000\uD6E5\u0000\uD6E4\u0000\u0000\u8EA2\uB1A5" + // 18290 - 18294
-                "\u0000\u0000\u0000\u0000\u0000\uDCAB\u8EA2\uB7C0\u8EA2\uB7BF" + // 18295 - 18299
-                "\u0000\uDCA9\u0000\uDCAA\u0000\u0000\u0000\u0000\u0000\u0000" + // 18300 - 18304
-                "\u0000\uE0EC\u0000\uE0EB\u8EA2\uBEB2\u0000\u0000\u0000\u0000" + // 18305 - 18309
-                "\u8EA2\uBEB1\u0000\uDCAC\u0000\u0000\u0000\u0000\u0000\u0000" + // 18310 - 18314
-                "\u0000\u0000\u0000\u0000\u0000\uE5B5\u8EA2\uC5AB\u0000\uE5B6" + // 18315 - 18319
-                "\u8EA2\uC5AA\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uCBFE" + // 18320 - 18324
-                "\u8EA2\uD2B6\u0000\uEDEB\u8EA2\uCBFB\u0000\u0000\u8EA2\uCBFC" + // 18325 - 18329
-                "\u8EA2\uCBFD\u0000\uE9E9\u0000\u0000\u0000\u0000\u8EA2\uD2B5" + // 18330 - 18334
-                "\u8EA2\uD2B4\u0000\u0000\u0000\u0000\u8EA2\uD8D5\u0000\uF1C8" + // 18335 - 18339
-                "\u0000\uF1C9\u0000\u0000\u8EA2\uDDDE\u8EA2\uDDDB\u8EA2\uDDDC" + // 18340 - 18344
-                "\u8EA2\uDDDD\u8EA2\uE2B6\u8EA2\uE2B5\u0000\uF6E8\u8EA2\uE6A3" + // 18345 - 18349
-                "\u8EA2\uEBEC\u0000\uC6EC\u0000\u0000\u0000\uD2C9\u0000\u0000" + // 18350 - 18354
-                "\u0000\uDCA7\u8EA2\uC5A9\u0000\u0000\u0000\uC6ED\u0000\u0000" + // 18355 - 18359
-                "\u8EA2\uB1A3\u0000\uDCA8\u0000\u0000\u0000\u0000\u0000\uE0E9" + // 18360 - 18364
-                "\u0000\uE0EA\u0000\u0000\u0000\uC6EE\u0000\uC6EF\u8EA2\uA2E6" + // 18365 - 18369
-                "\u0000\uCBAD\u0000\uCBAC\u0000\uD2CA\u8EA2\uACBB\u8EA2\uBEB0" + // 18370 - 18374
-                "\u0000\uC6F0\u0000\uC6F1\u0000\uC6F2\u0000\uC6F3\u0000\u0000" + // 18375 - 18379
-                "\u0000\u0000\u0000\u0000\u0000\uCBAE\u0000\uCBAF\u8EA2\uA4EE" + // 18380 - 18384
-                "\u8EA2\uA4ED\u0000\u0000\u0000\u0000\u0000\uCEF7\u8EA2\uA8B4" + // 18385 - 18389
-                "\u8EA2\uA8B2\u8EA2\uE2AE\u8EA2\uE2B0\u8EA2\uE2B4\u8EA2\uE6A2" + // 18390 - 18394
-                "\u0000\u0000\u8EA2\uE5FE\u0000\u0000\u0000\u0000\u0000\u0000" + // 18395 - 18399
-                "\u0000\u0000\u0000\uF8CE\u8EA2\uE5FD\u0000\u0000\u0000\u0000" + // 18400 - 18404
-                "\u0000\u0000\u0000\uF9F9\u0000\u0000\u0000\u0000\u0000\u0000" + // 18405 - 18409
-                "\u0000\u0000\u0000\uFAF8\u8EA2\uEDDF\u0000\uFAF7\u8EA2\uEDE1" + // 18410 - 18414
-                "\u8EA2\uEDDE\u8EA2\uEDE0\u0000\uFCBC\u8EA2\uF0C0\u0000\uC6EA" + // 18415 - 18419
-                "\u8EA2\uA8B0\u8EA2\uB0FD\u8EA2\uB0FE\u0000\uDCA4\u8EA2\uC5A5" + // 18420 - 18424
-                "\u0000\uF1C7\u0000\uF8CF\u0000\uFBE7\u8EA2\uF0C1\u0000\uC6EB" + // 18425 - 18429
-                "\u0000\u0000\u8EA2\uA8B1\u0000\uA3A2\u0000\u0000\u0000\u0000" + // 18430 - 18434
-                "\u8EA2\uACB9\u0000\u0000\u8EA2\uACBA\u0000\u0000\u0000\u0000" + // 18435 - 18439
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uB1A1\u8EA2\uB1A2" + // 18440 - 18444
-                "\u0000\uDCA5\u0000\uDCA6\u0000\u0000\u0000\u0000\u0000\u0000" + // 18445 - 18449
-                "\u8EA2\uBEAF\u0000\u0000\u8EA2\uC5A8\u8EA2\uC5A7\u8EA2\uC5A6" + // 18450 - 18454
-                "\u0000\uEDEA\u8EA2\uD2AE\u0000\u0000\u0000\uEDE8\u0000\u0000" + // 18455 - 18459
-                "\u8EA2\uD2B0\u8EA2\uD2AD\u8EA2\uD2AA\u8EA2\uD2B1\u8EA2\uD2AB" + // 18460 - 18464
-                "\u8EA2\uD2AC\u0000\uEDE7\u0000\u0000\u0000\u0000\u0000\u0000" + // 18465 - 18469
-                "\u0000\u0000\u8EA2\uDDD5\u0000\u0000\u8EA2\uD8D2\u0000\u0000" + // 18470 - 18474
-                "\u8EA2\uD8D1\u8EA2\uD8D3\u0000\u0000\u8EA2\uDDD2\u0000\uF1C4" + // 18475 - 18479
-                "\u0000\u0000\u8EA2\uD8CF\u0000\u0000\u0000\uF1C2\u0000\u0000" + // 18480 - 18484
-                "\u0000\uF1C6\u0000\uF1C5\u8EA2\uD8D0\u8EA2\uD8D4\u0000\u0000" + // 18485 - 18489
-                "\u0000\uF1C3\u0000\u0000\u8EA2\uDDD9\u0000\uF4C0\u0000\uF6E6" + // 18490 - 18494
-                "\u0000\uF4C1\u0000\uF4BE\u8EA2\uDDD6\u8EA2\uDDD4\u0000\u0000" + // 18495 - 18499
-                "\u8EA2\uDDD7\u0000\u0000\u8EA2\uDDDA\u0000\uF4BF\u8EA2\uDDD8" + // 18500 - 18504
-                "\u8EA2\uDDD3\u0000\u0000\u0000\u0000\u8EA2\uE2AF\u8EA2\uE2B2" + // 18505 - 18509
-                "\u8EA2\uE6A1\u8EA2\uE2AD\u0000\u0000\u8EA2\uE9BE\u8EA2\uE2B3" + // 18510 - 18514
-                "\u0000\u0000\u0000\uF8CD\u8EA2\uE2B1\u0000\uF6E7\u8EA2\uC4FB" + // 18515 - 18519
-                "\u0000\uE5B0\u8EA2\uC5A1\u0000\u0000\u8EA2\uC4F5\u0000\u0000" + // 18520 - 18524
-                "\u8EA2\uC5A2\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC4F6" + // 18525 - 18529
-                "\u8EA2\uC4F7\u0000\u0000\u8EA2\uC5A3\u8EA2\uC4FE\u8EA2\uC4FC" + // 18530 - 18534
-                "\u8EA2\uC4FD\u8EA2\uC4F9\u8EA2\uC4F8\u0000\u0000\u8EA2\uC5A4" + // 18535 - 18539
-                "\u0000\uE5AD\u0000\u0000\u8EA2\uC4FA\u0000\u0000\u0000\uE5B2" + // 18540 - 18544
-                "\u0000\uE5AC\u0000\uE5B3\u0000\uE5B4\u0000\u0000\u0000\uE5AF" + // 18545 - 18549
-                "\u0000\uE5AE\u0000\u0000\u0000\u0000\u8EA2\uCBF4\u0000\uE9E5" + // 18550 - 18554
-                "\u0000\uE9E4\u0000\u0000\u0000\u0000\u8EA2\uCBF9\u0000\u0000" + // 18555 - 18559
-                "\u0000\uEDE6\u0000\uE9E6\u0000\u0000\u0000\u0000\u0000\uE9E8" + // 18560 - 18564
-                "\u8EA2\uCBFA\u0000\uE5AB\u0000\uE9E7\u8EA2\uCBF6\u8EA2\uCBF8" + // 18565 - 18569
-                "\u8EA2\uCBF5\u0000\u0000\u8EA2\uCBF7\u0000\u0000\u0000\u0000" + // 18570 - 18574
-                "\u0000\u0000\u8EA2\uD2B3\u0000\u0000\u0000\u0000\u8EA2\uD2B2" + // 18575 - 18579
-                "\u8EA2\uD2AF\u0000\uEDE9\u8EA2\uD8CE\u8EA2\uB7B7\u8EA2\uB7B4" + // 18580 - 18584
-                "\u0000\u0000\u0000\uDBFE\u8EA2\uB7B3\u0000\uDBFC\u0000\uDCA1" + // 18585 - 18589
-                "\u8EA2\uB7B6\u8EA2\uB7BE\u0000\uD6DE\u0000\uDBFD\u8EA2\uB7BC" + // 18590 - 18594
-                "\u8EA2\uB7BB\u0000\uDCA3\u0000\u0000\u0000\u0000\u0000\u0000" + // 18595 - 18599
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18600 - 18604
-                "\u8EA2\uBEA4\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uBEA5" + // 18605 - 18609
-                "\u0000\uE0E6\u0000\u0000\u8EA2\uBEAB\u0000\u0000\u0000\u0000" + // 18610 - 18614
-                "\u8EA2\uBEAD\u8EA2\uBEA6\u0000\uE0E0\u8EA2\uBEAA\u8EA2\uBEA9" + // 18615 - 18619
-                "\u0000\uE0E1\u0000\uE0E7\u0000\u0000\u0000\uE0E8\u8EA2\uBEAC" + // 18620 - 18624
-                "\u0000\uE0DE\u8EA2\uBEA3\u8EA2\uBEA1\u8EA2\uBEA7\u8EA2\uBDFE" + // 18625 - 18629
-                "\u0000\uE0E5\u8EA2\uBEA2\u8EA2\uBEA8\u8EA2\uBEAE\u0000\uE0DF" + // 18630 - 18634
-                "\u0000\uE0E4\u0000\uE0E2\u0000\uE0E3\u0000\u0000\u0000\u0000" + // 18635 - 18639
-                "\u0000\u0000\u0000\uE0DD\u0000\u0000\u0000\u0000\u0000\u0000" + // 18640 - 18644
-                "\u0000\u0000\u0000\uE5B1\u0000\uD2C7\u0000\u0000\u8EA2\uACAA" + // 18645 - 18649
-                "\u8EA2\uACB5\u0000\u0000\u8EA2\uACAC\u8EA2\uACB6\u8EA2\uACB3" + // 18650 - 18654
-                "\u8EA2\uACAB\u0000\u0000\u0000\uD2C3\u8EA2\uACB8\u8EA2\uACA9" + // 18655 - 18659
-                "\u0000\uD2C6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18660 - 18664
-                "\u8EA2\uB0F5\u8EA2\uB0EC\u8EA2\uB0F7\u0000\u0000\u8EA2\uB0EF" + // 18665 - 18669
-                "\u8EA2\uB0FA\u8EA2\uB0FB\u8EA2\uB0ED\u8EA2\uB0F9\u8EA2\uB0F6" + // 18670 - 18674
-                "\u8EA2\uB0F4\u8EA2\uB0F8\u0000\uD6E2\u0000\u0000\u0000\uD6E0" + // 18675 - 18679
-                "\u0000\u0000\u0000\u0000\u8EA2\uB0F2\u0000\u0000\u8EA2\uB0EE" + // 18680 - 18684
-                "\u0000\u0000\u8EA2\uB0F1\u8EA2\uB0FC\u8EA2\uB0F3\u0000\uD6E1" + // 18685 - 18689
-                "\u8EA2\uACB1\u0000\u0000\u0000\uD6DD\u0000\uD6DF\u0000\u0000" + // 18690 - 18694
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uB7BD" + // 18695 - 18699
-                "\u8EA2\uB7B2\u8EA2\uB7B0\u0000\u0000\u8EA2\uB7B1\u0000\u0000" + // 18700 - 18704
-                "\u8EA2\uB7B8\u0000\u0000\u8EA2\uB7B9\u8EA2\uB7B5\u0000\uDCA2" + // 18705 - 18709
-                "\u8EA2\uB7BA\u0000\uFBE6\u8EA2\uEFB7\u8EA2\uEFB6\u8EA2\uEFB8" + // 18710 - 18714
-                "\u0000\uC6E8\u8EA2\uACA8\u0000\uD6DC\u0000\uDBFB\u8EA2\uB7AF" + // 18715 - 18719
-                "\u0000\uC6E9\u8EA2\uA1E6\u0000\uC5DE\u0000\u0000\u0000\u0000" + // 18720 - 18724
-                "\u8EA2\uA2E5\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA4EC" + // 18725 - 18729
-                "\u8EA2\uA4EA\u8EA2\uA4EB\u8EA2\uA4E8\u0000\uCBAB\u8EA2\uA4E9" + // 18730 - 18734
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18735 - 18739
-                "\u8EA2\uA8AF\u0000\u0000\u0000\uCEF4\u8EA2\uA8AD\u8EA2\uA8A9" + // 18740 - 18744
-                "\u8EA2\uA8AC\u0000\u0000\u8EA2\uA8A8\u0000\uCEF6\u8EA2\uA8AB" + // 18745 - 18749
-                "\u0000\u0000\u0000\uCEF3\u0000\uCEF2\u0000\u0000\u0000\uCEF5" + // 18750 - 18754
-                "\u8EA2\uA8AE\u8EA2\uA8AA\u0000\u0000\u0000\u0000\u0000\u0000" + // 18755 - 18759
-                "\u0000\u0000\u0000\uD2C5\u0000\uD2C8\u8EA2\uACB0\u8EA2\uACAF" + // 18760 - 18764
-                "\u8EA2\uACAE\u0000\uD2C2\u8EA2\uACB7\u8EA2\uACAD\u0000\u0000" + // 18765 - 18769
-                "\u0000\uD2C4\u8EA2\uB0F0\u0000\u0000\u8EA2\uACB4\u8EA2\uACB2" + // 18770 - 18774
-                "\u8EA2\uC4F2\u0000\u0000\u8EA2\uC4EF\u8EA2\uCBF0\u0000\uE9E2" + // 18775 - 18779
-                "\u0000\uE5A8\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC4F4" + // 18780 - 18784
-                "\u8EA2\uC4F3\u0000\u0000\u8EA2\uCBF3\u8EA2\uCBF1\u0000\uEDE4" + // 18785 - 18789
-                "\u0000\u0000\u0000\uE9E3\u8EA2\uCBF2\u8EA2\uD1FE\u0000\u0000" + // 18790 - 18794
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEDE5\u8EA2\uD1FD" + // 18795 - 18799
-                "\u8EA2\uD2A8\u8EA2\uD2A7\u8EA2\uD2A5\u0000\u0000\u8EA2\uD2A4" + // 18800 - 18804
-                "\u8EA2\uD2A1\u8EA2\uD2A2\u8EA2\uD2A3\u8EA2\uD2A6\u8EA2\uD2A9" + // 18805 - 18809
-                "\u0000\u0000\u0000\u0000\u8EA2\uD8CB\u8EA2\uD8C8\u8EA2\uD8C9" + // 18810 - 18814
-                "\u0000\uF1C1\u8EA2\uD8C7\u8EA2\uD8CD\u8EA2\uD8CC\u8EA2\uD8CA" + // 18815 - 18819
-                "\u0000\u0000\u8EA2\uDDD0\u8EA2\uDDD1\u0000\uF4BC\u0000\u0000" + // 18820 - 18824
-                "\u0000\uF4BD\u8EA2\uDDCF\u0000\u0000\u0000\uF6E5\u8EA2\uE2AC" + // 18825 - 18829
-                "\u0000\uF6E4\u0000\uF8CB\u0000\u0000\u0000\uF8CC\u0000\uF9F8" + // 18830 - 18834
-                "\u8EA2\uE9BD\u8EA2\uE9BC\u8EA2\uEBEB\u8EA2\uEDDD\u8EA2\uB0E4" + // 18835 - 18839
-                "\u8EA2\uB0EB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18840 - 18844
-                "\u0000\u0000\u8EA2\uB7A7\u8EA2\uB7AB\u0000\u0000\u8EA2\uB7AA" + // 18845 - 18849
-                "\u8EA2\uBDF2\u8EA2\uBDFD\u0000\u0000\u0000\u0000\u8EA2\uB7AD" + // 18850 - 18854
-                "\u0000\u0000\u8EA2\uB7A8\u8EA2\uBDF1\u0000\uDBF9\u0000\u0000" + // 18855 - 18859
-                "\u0000\u0000\u0000\uDBF8\u8EA2\uB7A6\u8EA2\uB7A9\u0000\uDBFA" + // 18860 - 18864
-                "\u0000\u0000\u0000\uDBF7\u0000\uDBF6\u8EA2\uB7A5\u8EA2\uB7AE" + // 18865 - 18869
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uBDF4\u8EA2\uBDFB" + // 18870 - 18874
-                "\u0000\u0000\u0000\uE0DA\u8EA2\uBDFA\u8EA2\uBDF7\u0000\u0000" + // 18875 - 18879
-                "\u0000\uE0DC\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uBDF9" + // 18880 - 18884
-                "\u0000\u0000\u0000\u0000\u8EA2\uBDF3\u8EA2\uBDF5\u8EA2\uBDF8" + // 18885 - 18889
-                "\u8EA2\uBDF6\u0000\uE0DB\u8EA2\uBDFC\u0000\uE0D9\u0000\uE5A7" + // 18890 - 18894
-                "\u0000\u0000\u0000\u0000\u8EA2\uC4F1\u8EA2\uC4F0\u8EA2\uC4EE" + // 18895 - 18899
-                "\u0000\u0000\u0000\uE5AA\u0000\uE5A9\u0000\uCEED\u8EA2\uA4E5" + // 18900 - 18904
-                "\u0000\uCBAA\u8EA2\uA4E3\u0000\uCBA9\u8EA2\uA4E7\u8EA2\uA4E4" + // 18905 - 18909
-                "\u0000\u0000\u0000\u0000\u8EA2\uA8A1\u8EA2\uABFE\u8EA2\uA7FD" + // 18910 - 18914
-                "\u8EA2\uA8A6\u0000\u0000\u0000\uCEEE\u0000\u0000\u0000\uCEF1" + // 18915 - 18919
-                "\u8EA2\uA8A7\u8EA2\uA8A3\u0000\u0000\u8EA2\uA8A4\u0000\u0000" + // 18920 - 18924
-                "\u8EA2\uA7FC\u0000\uCEF0\u8EA2\uA7FE\u0000\uCEEF\u8EA2\uA8A5" + // 18925 - 18929
-                "\u0000\u0000\u8EA2\uA8A2\u0000\u0000\u0000\u0000\u8EA2\uACA4" + // 18930 - 18934
-                "\u0000\uD2C0\u0000\uD2C1\u0000\u0000\u8EA2\uACA7\u8EA2\uACA1" + // 18935 - 18939
-                "\u0000\u0000\u8EA2\uACA6\u0000\u0000\u8EA2\uACA2\u0000\uD2BF" + // 18940 - 18944
-                "\u8EA2\uACA5\u8EA2\uACA3\u0000\u0000\u0000\u0000\u0000\u0000" + // 18945 - 18949
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uB0E9" + // 18950 - 18954
-                "\u8EA2\uB0E6\u0000\u0000\u8EA2\uB0E8\u0000\uD6DB\u0000\uD6DA" + // 18955 - 18959
-                "\u0000\uD6D8\u8EA2\uB0E5\u8EA2\uB0EA\u0000\uD6D7\u0000\uD6D9" + // 18960 - 18964
-                "\u8EA2\uB0E7\u8EA2\uB7AC\u0000\uE0D8\u0000\uDBF5\u0000\u0000" + // 18965 - 18969
-                "\u0000\u0000\u0000\uE0D7\u8EA2\uBDEF\u8EA2\uBDEE\u0000\u0000" + // 18970 - 18974
-                "\u8EA2\uBDEC\u8EA2\uBDED\u0000\u0000\u8EA2\uBDF0\u8EA2\uC4EA" + // 18975 - 18979
-                "\u8EA2\uC4E9\u8EA2\uC4ED\u0000\u0000\u8EA2\uC4EC\u8EA2\uC4EB" + // 18980 - 18984
-                "\u0000\uE9E0\u8EA2\uCBEF\u0000\u0000\u8EA2\uCBEE\u0000\uE9E1" + // 18985 - 18989
-                "\u8EA2\uCBED\u8EA2\uD1FB\u0000\u0000\u8EA2\uD1FC\u0000\uEDE3" + // 18990 - 18994
-                "\u0000\u0000\u8EA2\uD8C5\u8EA2\uD8C6\u0000\u0000\u0000\u0000" + // 18995 - 18999
-                "\u8EA2\uE5FC\u0000\uF8CA\u8EA2\uE5FB\u8EA2\uE5FA\u8EA2\uE5F8" + // 19000 - 19004
-                "\u8EA2\uE5F9\u0000\uFAF6\u8EA2\uE9BB\u8EA2\uEDDC\u8EA2\uF1A7" + // 19005 - 19009
-                "\u0000\u0000\u0000\uC5DD\u0000\u0000\u8EA2\uA1E4\u0000\uC6E7" + // 19010 - 19014
-                "\u8EA2\uA1E5\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA2E3" + // 19015 - 19019
-                "\u8EA2\uA2E4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19020 - 19024
-                "\u8EA2\uA4E6\u0000\u0000\u0000\u0000\u8EA2\uA4E2\u0000\u0000" + // 19025 - 19029
-                "\u8EA2\uA4E1\u8EA2\uD8B8\u8EA2\uD8B9\u8EA2\uD8B4\u0000\uF1BF" + // 19030 - 19034
-                "\u0000\uF1C0\u8EA2\uD8B3\u8EA2\uD8C2\u8EA2\uD8BD\u0000\uF1B9" + // 19035 - 19039
-                "\u0000\uF1B6\u8EA2\uD8BC\u8EA2\uD8BA\u0000\u0000\u0000\u0000" + // 19040 - 19044
-                "\u0000\uF1BC\u8EA2\uD8BE\u0000\uF1B7\u0000\u0000\u0000\uF1B8" + // 19045 - 19049
-                "\u0000\u0000\u8EA2\uD8BB\u0000\uF1BA\u8EA2\uD8B7\u0000\u0000" + // 19050 - 19054
-                "\u8EA2\uD8C0\u0000\uF1BD\u8EA2\uD8C3\u8EA2\uD8C4\u0000\uF1BE" + // 19055 - 19059
-                "\u0000\u0000\u0000\u0000\u0000\uF4B2\u0000\uF4B9\u8EA2\uDDC8" + // 19060 - 19064
-                "\u8EA2\uDDCE\u0000\u0000\u8EA2\uDDCC\u0000\uF4B5\u0000\uF4B4" + // 19065 - 19069
-                "\u0000\uF4B1\u8EA2\uDDCA\u0000\u0000\u0000\u0000\u0000\u0000" + // 19070 - 19074
-                "\u0000\uF4B7\u0000\uF4B6\u0000\uF4B3\u0000\u0000\u8EA2\uDDCD" + // 19075 - 19079
-                "\u8EA2\uDDC9\u8EA2\uDDCB\u0000\u0000\u0000\uF4B8\u0000\u0000" + // 19080 - 19084
-                "\u0000\u0000\u0000\u0000\u0000\uF6E3\u8EA2\uE2A9\u0000\u0000" + // 19085 - 19089
-                "\u0000\uF6E0\u0000\uF6E1\u8EA2\uE2AB\u0000\uF6E2\u8EA2\uE2A8" + // 19090 - 19094
-                "\u8EA2\uCBE3\u8EA2\uCBE9\u8EA2\uCBE5\u0000\u0000\u0000\uE9DD" + // 19095 - 19099
-                "\u8EA2\uCBE4\u8EA2\uCBE8\u8EA2\uCBE0\u0000\u0000\u8EA2\uCBE2" + // 19100 - 19104
-                "\u0000\uE9DC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19105 - 19109
-                "\u8EA2\uCBE6\u8EA2\uCBE1\u0000\u0000\u0000\uE9DE\u0000\u0000" + // 19110 - 19114
-                "\u0000\uE9D9\u0000\u0000\u0000\u0000\u8EA2\uCBEA\u0000\u0000" + // 19115 - 19119
-                "\u0000\uE9DA\u8EA2\uD1EF\u8EA2\uD1EC\u8EA2\uD1F8\u8EA2\uD1F2" + // 19120 - 19124
-                "\u8EA2\uD1F4\u0000\uEDDE\u8EA2\uD1EE\u8EA2\uD1F6\u0000\u0000" + // 19125 - 19129
-                "\u0000\u0000\u8EA2\uD1F5\u8EA2\uD1F3\u0000\u0000\u8EA2\uD1F9" + // 19130 - 19134
-                "\u0000\uEDE1\u8EA2\uD1F0\u8EA2\uD1F7\u0000\u0000\u0000\uEDDF" + // 19135 - 19139
-                "\u0000\u0000\u0000\u0000\u8EA2\uD1EB\u8EA2\uD1ED\u0000\uEDE0" + // 19140 - 19144
-                "\u8EA2\uD1EA\u8EA2\uD1FA\u0000\u0000\u8EA2\uD1F1\u0000\u0000" + // 19145 - 19149
-                "\u0000\u0000\u8EA2\uD8B6\u0000\uF1BB\u0000\u0000\u0000\u0000" + // 19150 - 19154
-                "\u8EA2\uD8C1\u8EA2\uD8BF\u0000\uF1B5\u8EA2\uD8B5\u8EA2\uB6F9" + // 19155 - 19159
-                "\u0000\u0000\u8EA2\uB6FD\u0000\u0000\u8EA2\uB6F2\u0000\u0000" + // 19160 - 19164
-                "\u8EA2\uB6F7\u0000\u0000\u0000\u0000\u0000\uDBEF\u0000\uDBF0" + // 19165 - 19169
-                "\u8EA2\uB6FC\u8EA2\uB6F0\u8EA2\uB6EC\u8EA2\uB6FE\u0000\u0000" + // 19170 - 19174
-                "\u8EA2\uB6F4\u0000\u0000\u0000\u0000\u8EA2\uB6F8\u0000\u0000" + // 19175 - 19179
-                "\u0000\u0000\u0000\u0000\u8EA2\uB6EE\u0000\u0000\u0000\uE0CE" + // 19180 - 19184
-                "\u0000\uE0CF\u8EA2\uBDE9\u0000\uE0D5\u0000\u0000\u8EA2\uBDDD" + // 19185 - 19189
-                "\u8EA2\uBDE6\u8EA2\uBDDC\u0000\uE0D2\u8EA2\uBDE4\u8EA2\uBDE2" + // 19190 - 19194
-                "\u0000\u0000\u8EA2\uBDE3\u0000\uE0D0\u0000\u0000\u8EA2\uBDE7" + // 19195 - 19199
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19200 - 19204
-                "\u8EA2\uBDE0\u8EA2\uBDDE\u0000\uE0D1\u8EA2\uBDE1\u8EA2\uBDE5" + // 19205 - 19209
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0D3\u0000\u0000" + // 19210 - 19214
-                "\u0000\u0000\u0000\u0000\u8EA2\uBDE8\u0000\u0000\u0000\u0000" + // 19215 - 19219
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uBEC0\u8EA2\uBEC2" + // 19220 - 19224
-                "\u8EA2\uBEBE\u8EA2\uBEBF\u0000\u0000\u0000\u0000\u8EA2\uBEC3" + // 19225 - 19229
-                "\u8EA2\uBEC5\u8EA2\uBEC6\u8EA2\uBEC1\u8EA2\uBEC4\u0000\uE0FA" + // 19230 - 19234
-                "\u0000\u0000\u0000\u0000\u8EA2\uC5C1\u0000\u0000\u8EA2\uC5C6" + // 19235 - 19239
-                "\u8EA2\uC5BE\u8EA2\uC5C2\u0000\u0000\u0000\u0000\u8EA2\uC5C7" + // 19240 - 19244
-                "\u8EA2\uC5C3\u0000\uE5C2\u0000\uE5CA\u0000\u0000\u0000\uE5C5" + // 19245 - 19249
-                "\u8EA2\uC5BF\u8EA2\uC5C0\u0000\uE9F5\u0000\uE5CD\u0000\uE5C6" + // 19250 - 19254
-                "\u0000\u0000\u0000\uE5CB\u0000\uE5C4\u8EA2\uC5C5\u0000\uE5CC" + // 19255 - 19259
-                "\u8EA2\uC5C4\u0000\uE5C8\u0000\uE5C3\u0000\uE5C9\u8EA2\uC5C8" + // 19260 - 19264
-                "\u8EA2\uCCAE\u8EA2\uCCB0\u0000\u0000\u0000\u0000\u0000\u0000" + // 19265 - 19269
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19270 - 19274
-                "\u0000\u0000\u0000\uE5C7\u0000\u0000\u0000\u0000\u8EA2\uCCAB" + // 19275 - 19279
-                "\u0000\uE9F3\u8EA2\uCCB1\u0000\uE9F4\u8EA2\uE9B5\u8EA2\uE9B8" + // 19280 - 19284
-                "\u8EA2\uE9AF\u8EA2\uEBE1\u8EA2\uEBE2\u8EA2\uEBE6\u8EA2\uEBE7" + // 19285 - 19289
-                "\u0000\u0000\u8EA2\uEBE4\u8EA2\uEBE5\u8EA2\uEBE3\u0000\u0000" + // 19290 - 19294
-                "\u0000\uFAF4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19295 - 19299
-                "\u0000\uFBE4\u8EA2\uEDD9\u0000\u0000\u0000\u0000\u8EA2\uEDD6" + // 19300 - 19304
-                "\u8EA2\uEDD7\u8EA2\uEDD8\u0000\uFBE5\u0000\u0000\u8EA2\uEFB4" + // 19305 - 19309
-                "\u8EA2\uEFB3\u0000\u0000\u8EA2\uF0BD\u0000\uFCE0\u8EA2\uF0BB" + // 19310 - 19314
-                "\u8EA2\uF0BE\u8EA2\uF0BC\u8EA2\uF1A5\u0000\uFDA4\u0000\uFDB2" + // 19315 - 19319
-                "\u8EA2\uF1F1\u8EA2\uF1DB\u0000\u0000\u8EA2\uF1F0\u8EA2\uF2BE" + // 19320 - 19324
-                "\u8EA2\uF2BF\u0000\uC5D6\u0000\u0000\u0000\u0000\u0000\u0000" + // 19325 - 19329
-                "\u0000\u0000\u0000\uC8C8\u8EA2\uA2E1\u0000\u0000\u0000\u0000" + // 19330 - 19334
-                "\u8EA2\uA4DE\u0000\u0000\u0000\uCBA2\u0000\u0000\u0000\uCBA5" + // 19335 - 19339
-                "\u0000\u0000\u8EA2\uA4DF\u0000\u0000\u0000\uCBA3\u0000\uCBA4" + // 19340 - 19344
-                "\u0000\u0000\u0000\u0000\u0000\uC7D4\u0000\u0000\u0000\uC7DA" + // 19345 - 19349
-                "\u0000\uC7D6\u0000\u0000\u0000\uC7DC\u8EA2\uA2A5\u0000\uC7D9" + // 19350 - 19354
-                "\u0000\uC7CF\u0000\uC7D2\u0000\uC7D5\u0000\uC7D1\u0000\uC7D8" + // 19355 - 19359
-                "\u0000\uC7DB\u0000\uC7D0\u0000\uC7D3\u0000\uC7D7\u0000\uC7DD" + // 19360 - 19364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19365 - 19369
-                "\u8EA2\uA3C0\u8EA2\uA3BD\u0000\u0000\u0000\uC9C9\u8EA2\uA3BE" + // 19370 - 19374
-                "\u0000\uC9BD\u0000\uC9BF\u0000\uC9D7\u0000\uC9D2\u0000\u0000" + // 19375 - 19379
-                "\u0000\u0000\u0000\u0000\u8EA2\uA3C5\u8EA2\uA3BF\u0000\uC9C1" + // 19380 - 19384
-                "\u0000\uC9C3\u8EA2\uA3C4\u0000\uC9CA\u8EA2\uA3BA\u0000\uC9D6" + // 19385 - 19389
-                "\u0000\uC9D8\u0000\uC9BE\u0000\uC9CF\u0000\u0000\u8EA2\uA3B8" + // 19390 - 19394
-                "\u0000\uC9D5\u0000\u0000\u0000\uC9C6\u0000\u0000\u0000\uC9D0" + // 19395 - 19399
-                "\u0000\uC9D1\u8EA2\uA3B9\u0000\uC9CE\u0000\uC9CC\u0000\u0000" + // 19400 - 19404
-                "\u0000\uC9CD\u0000\uC9D3\u8EA2\uA3C1\u0000\uC9C0\u0000\u0000" + // 19405 - 19409
-                "\u0000\uF5D0\u8EA2\uE3D9\u8EA2\uE7B0\u0000\u0000\u8EA2\uEFD2" + // 19410 - 19414
-                "\u0000\uCBC8\u8EA2\uB3A2\u0000\uD8BF\u0000\uDDC7\u8EA2\uC7DA" + // 19415 - 19419
-                "\u8EA2\uC7D9\u0000\uEFA7\u8EA2\uD4CF\u0000\uEFA8\u8EA2\uDFDD" + // 19420 - 19424
-                "\u0000\uF7C2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFDC3" + // 19425 - 19429
-                "\u0000\uCBC9\u8EA2\uA8EB\u8EA2\uB3A3\u0000\u0000\u0000\u0000" + // 19430 - 19434
-                "\u0000\uDDC8\u0000\u0000\u8EA2\uB9D2\u8EA2\uB9D3\u0000\u0000" + // 19435 - 19439
-                "\u8EA2\uC0CB\u0000\u0000\u0000\uE2AF\u0000\uE6ED\u0000\u0000" + // 19440 - 19444
-                "\u8EA2\uC7DC\u8EA2\uC7DB\u8EA2\uC7DD\u0000\u0000\u8EA2\uCEB9" + // 19445 - 19449
-                "\u8EA2\uCEBA\u0000\uEBB0\u0000\uF2C7\u0000\uEFA9\u0000\uF2C8" + // 19450 - 19454
-                "\u0000\u0000\u8EA2\uDFE1\u8EA2\uDFDE\u8EA2\uDFE0\u8EA2\uDFDF" + // 19455 - 19459
-                "\u0000\uF5D2\u0000\u0000\u8EA2\uE3DA\u8EA2\uE7B2\u8EA2\uE7B1" + // 19460 - 19464
-                "\u8EA2\uA5A4\u0000\uD8C1\u0000\uD8C0\u8EA2\uB3A4\u0000\u0000" + // 19465 - 19469
-                "\u8EA2\uB9D4\u0000\u0000\u0000\u0000\u8EA2\uAEDA\u0000\uD4E9" + // 19470 - 19474
-                "\u0000\uD4EC\u0000\u0000\u0000\u0000\u8EA2\uAED1\u8EA2\uAED7" + // 19475 - 19479
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD4EB\u8EA2\uAECC" + // 19480 - 19484
-                "\u0000\u0000\u0000\uD0D2\u8EA2\uB4BD\u8EA2\uAED8\u0000\u0000" + // 19485 - 19489
-                "\u8EA2\uAECF\u0000\u0000\u0000\uD4EA\u8EA2\uAECE\u0000\u0000" + // 19490 - 19494
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19495 - 19499
-                "\u8EA2\uB4B4\u0000\u0000\u0000\u0000\u0000\uD9D1\u0000\uD9D5" + // 19500 - 19504
-                "\u8EA2\uB4C4\u8EA2\uB4B2\u8EA2\uB4C0\u0000\uD9D6\u8EA2\uB4C2" + // 19505 - 19509
-                "\u0000\u0000\u8EA2\uB4C8\u0000\u0000\u8EA2\uB4CC\u0000\u0000" + // 19510 - 19514
-                "\u0000\u0000\u8EA2\uB4C3\u8EA2\uB4B7\u8EA2\uB4BF\u0000\u0000" + // 19515 - 19519
-                "\u8EA2\uB4CD\u8EA2\uB4CB\u8EA2\uB4C1\u8EA2\uB4BC\u8EA2\uB4B5" + // 19520 - 19524
-                "\u8EA2\uBAE8\u8EA2\uB4B3\u0000\uD9DA\u8EA2\uB4BA\u0000\uD9DB" + // 19525 - 19529
-                "\u0000\uD9D7\u8EA2\uB4B0\u8EA2\uB4C6\u8EA2\uB4B8\u0000\u0000" + // 19530 - 19534
-                "\u0000\u0000\u0000\u0001\u0000\u0002\u0000\u0003\u0000\u0004" + // 19535 - 19539
-                "\u0000\u0005\u0000\u0006\u0000\u0007\u0000\u0008\u0000\u0009" + // 19540 - 19544
-                "\u0000\n\u0000\u000B\u0000\u000C\u0000\r\u0000\u000E" + // 19545 - 19549
-                "\u0000\u000F\u0000\u0010\u0000\u0011\u0000\u0012\u0000\u0013" + // 19550 - 19554
-                "\u0000\u0014\u0000\u0015\u0000\u0016\u0000\u0017\u0000\u0018" + // 19555 - 19559
-                "\u0000\u0019\u0000\u001A\u0000\u001B\u0000\u001C\u0000\u001D" + // 19560 - 19564
-                "\u0000\u001E\u0000\u001F\u0000\u0020\u0000\u0021\u0000\"" + // 19565 - 19569
-                "\u0000\u0023\u0000\u0024\u0000\u0025\u0000\u0026\u0000\u0027" + // 19570 - 19574
-                "\u0000\u0028\u0000\u0029\u0000\u002A\u0000\u002B\u0000\u002C" + // 19575 - 19579
-                "\u0000\u002D\u0000\u002E\u0000\u002F\u0000\u0030\u0000\u0031" + // 19580 - 19584
-                "\u0000\u0032\u0000\u0033\u0000\u0034\u0000\u0035\u0000\u0036" + // 19585 - 19589
-                "\u0000\u0037\u0000\u0038\u0000\u0039\u0000\u003A\u0000\u003B" + // 19590 - 19594
-                "\u0000\u003C\u0000\u003D\u0000\u003E\u0000\u003F\u8EA2\uE2A1" + // 19595 - 19599
-                "\u8EA2\uE1FA\u0000\u0000\u0000\u0000\u8EA2\uD8A3\u8EA2\uE1FB" + // 19600 - 19604
-                "\u0000\uF6DC\u8EA2\uE1F7\u0000\u0000\u0000\uF6D9\u8EA2\uE2A6" + // 19605 - 19609
-                "\u0000\uF6DA\u8EA2\uE1F8\u8EA2\uE1F9\u8EA2\uE1FD\u0000\uF6DF" + // 19610 - 19614
-                "\u0000\u0000\u0000\uF6DE\u0000\u0000\u0000\u0000\u8EA2\uE1FC" + // 19615 - 19619
-                "\u0000\uF8C5\u8EA2\uE5EA\u8EA2\uE5F0\u0000\uF8C6\u8EA2\uE5E7" + // 19620 - 19624
-                "\u0000\uF8C3\u0000\uF8C0\u8EA2\uE5F2\u0000\uF8C4\u0000\u0000" + // 19625 - 19629
-                "\u0000\uF8C1\u8EA2\uE5E9\u8EA2\uE5EC\u8EA2\uE5ED\u8EA2\uE5EE" + // 19630 - 19634
-                "\u8EA2\uE5F1\u0000\u0000\u8EA2\uE2A3\u8EA2\uE5E8\u0000\uF8C2" + // 19635 - 19639
-                "\u8EA2\uE5EF\u8EA2\uE9B4\u8EA2\uE5EB\u0000\u0000\u0000\u0000" + // 19640 - 19644
-                "\u0000\u0000\u8EA2\uE9AB\u0000\uF9F5\u8EA2\uE9AE\u0000\uF9F6" + // 19645 - 19649
-                "\u8EA2\uE9B7\u8EA2\uE9AD\u8EA2\uE9AA\u0000\u0000\u8EA2\uE9AC" + // 19650 - 19654
-                "\u8EA2\uE9B0\u8EA2\uE9B3\u8EA2\uE9B2\u8EA2\uE9B6\u8EA2\uE9A9" + // 19655 - 19659
-                "\u0000\u0000\u0000\uF9F4\u8EA2\uE9B1\u0000\uF1AF\u0000\uF1AC" + // 19660 - 19664
-                "\u0000\uF1A7\u0000\uF1AA\u8EA2\uD7FC\u0000\u0000\u8EA2\uD1C6" + // 19665 - 19669
-                "\u8EA2\uD7F7\u8EA2\uD7FA\u8EA2\uD8AD\u8EA2\uD8A1\u8EA2\uD7F5" + // 19670 - 19674
-                "\u8EA2\uDDBA\u8EA2\uD8AF\u8EA2\uD7F9\u8EA2\uD8A9\u0000\u0000" + // 19675 - 19679
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uDDBD\u0000\uF4AE" + // 19680 - 19684
-                "\u0000\u0000\u0000\u0000\u0000\uF4A2\u0000\u0000\u0000\u0000" + // 19685 - 19689
-                "\u0000\uF4A6\u8EA2\uDDBF\u8EA2\uDDC5\u8EA2\uDDC3\u0000\uF4A4" + // 19690 - 19694
-                "\u0000\uF4A5\u0000\uF4AC\u8EA2\uDDC6\u8EA2\uDDBE\u0000\uF4A7" + // 19695 - 19699
-                "\u0000\u0000\u8EA2\uDDC2\u8EA2\uDDC1\u8EA2\uDDC7\u0000\uF4AD" + // 19700 - 19704
-                "\u0000\u0000\u0000\uF4A8\u0000\uF4AB\u8EA2\uDDC0\u0000\uF4AF" + // 19705 - 19709
-                "\u0000\uF4A9\u0000\uF4B0\u0000\uF4A3\u8EA2\uDDC4\u0000\u0000" + // 19710 - 19714
-                "\u8EA2\uDDBC\u0000\u0000\u0000\u0000\u8EA2\uE2A5\u0000\u0000" + // 19715 - 19719
-                "\u0000\u0000\u0000\uF6DD\u8EA2\uE2A2\u8EA2\uE2A4\u0000\u0000" + // 19720 - 19724
-                "\u0000\uF6DB\u8EA2\uE1FE\u0000\uF4AA\u0000\u0000\u8EA2\uD1D2" + // 19725 - 19729
-                "\u0000\u0000\u0000\uEDCB\u8EA2\uD1CD\u0000\uEDCF\u8EA2\uD1C5" + // 19730 - 19734
-                "\u0000\uE9D2\u8EA2\uD1C9\u0000\u0000\u8EA2\uD1E2\u8EA2\uD1CA" + // 19735 - 19739
-                "\u8EA2\uD1C8\u0000\uEDD4\u0000\u0000\u8EA2\uD1E0\u0000\u0000" + // 19740 - 19744
-                "\u8EA2\uD1C7\u8EA2\uD1D9\u8EA2\uD1D8\u8EA2\uD1E5\u8EA2\uD1CF" + // 19745 - 19749
-                "\u0000\uEDD8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19750 - 19754
-                "\u0000\u0000\u0000\u0000\u8EA2\uD7FE\u0000\u0000\u0000\uF1B3" + // 19755 - 19759
-                "\u0000\uF1A9\u8EA2\uD8AC\u8EA2\uD7F6\u0000\uF1AB\u8EA2\uD8A4" + // 19760 - 19764
-                "\u0000\uF1B2\u0000\uF1AD\u8EA2\uD8A2\u8EA2\uDDBB\u8EA2\uD8A8" + // 19765 - 19769
-                "\u8EA2\uD8AE\u8EA2\uD8A7\u8EA2\uD7F4\u8EA2\uD8A5\u8EA2\uD8B0" + // 19770 - 19774
-                "\u8EA2\uD8B2\u0000\uF1A8\u8EA2\uD8B1\u0000\uF1AE\u0000\uF1B4" + // 19775 - 19779
-                "\u0000\u0000\u0000\uF1B1\u0000\u0000\u8EA2\uD8AB\u0000\uF1B0" + // 19780 - 19784
-                "\u8EA2\uD8A6\u0000\u0000\u8EA2\uD7F8\u8EA2\uD7FD\u0000\u0000" + // 19785 - 19789
-                "\u8EA2\uD8AA\u8EA2\uCBCC\u8EA2\uD1C2\u0000\u0000\u8EA2\uCBD3" + // 19790 - 19794
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19795 - 19799
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19800 - 19804
-                "\u8EA2\uCBBE\u8EA2\uD1CC\u8EA2\uD1D6\u0000\uEDCC\u8EA2\uD1D5" + // 19805 - 19809
-                "\u8EA2\uD1E1\u0000\uEDCE\u8EA2\uD1D3\u0000\u0000\u8EA2\uD1D7" + // 19810 - 19814
-                "\u0000\uEDD9\u0000\u0000\u8EA2\uD1CE\u0000\uEDD1\u0000\u0000" + // 19815 - 19819
-                "\u8EA2\uD1DA\u8EA2\uD7FB\u0000\uEDDD\u0000\uEDDC\u8EA2\uD1DC" + // 19820 - 19824
-                "\u8EA2\uD1CB\u8EA2\uD1E6\u0000\uEDD7\u0000\u0000\u0000\uEDCD" + // 19825 - 19829
-                "\u8EA2\uD1DF\u0000\u0000\u8EA2\uD1E3\u8EA2\uD1E8\u8EA2\uD1DD" + // 19830 - 19834
-                "\u8EA2\uD1D1\u0000\uEDD0\u0000\uEDD3\u0000\uEDDB\u0000\uEDD6" + // 19835 - 19839
-                "\u0000\u0000\u8EA2\uD1D4\u8EA2\uCBC8\u0000\u0000\u0000\u0000" + // 19840 - 19844
-                "\u8EA2\uD1D0\u8EA2\uD1E7\u0000\uEDD2\u0000\u0000\u0000\uEDD5" + // 19845 - 19849
-                "\u8EA2\uD1E9\u0000\uEDCA\u8EA2\uD1DE\u8EA2\uD1C4\u8EA2\uD1E4" + // 19850 - 19854
-                "\u8EA2\uD1DB\u0000\uE9D5\u0000\uE9C6\u8EA2\uCBB7\u0000\u0000" + // 19855 - 19859
-                "\u8EA2\uCBD4\u0000\uE9CA\u8EA2\uCBD1\u8EA2\uCBDE\u8EA2\uCBBD" + // 19860 - 19864
-                "\u8EA2\uCBC6\u0000\u0000\u0000\u0000\u8EA2\uCBDC\u8EA2\uCBD2" + // 19865 - 19869
-                "\u0000\uE9C5\u0000\u0000\u0000\u0000\u8EA2\uCBC4\u0000\uE9BF" + // 19870 - 19874
-                "\u0000\uE9BD\u0000\uE9CF\u0000\u0000\u0000\u0000\u8EA2\uCBC2" + // 19875 - 19879
-                "\u8EA2\uCBBF\u8EA2\uCBC0\u0000\u0000\u8EA2\uCBD8\u0000\u0000" + // 19880 - 19884
-                "\u8EA2\uCBDD\u8EA2\uCBDB\u0000\uE9C3\u8EA2\uCBDF\u0000\uE9C7" + // 19885 - 19889
-                "\u0000\uE9CE\u0000\u0000\u8EA2\uCBB8\u8EA2\uD1C3\u8EA2\uCBC1" + // 19890 - 19894
-                "\u0000\u0000\u0000\uE9C1\u0000\uE9D3\u0000\uE9D0\u0000\uE9C4" + // 19895 - 19899
-                "\u8EA2\uCBCB\u8EA2\uCBBC\u0000\uE9D1\u8EA2\uCBCD\u0000\uE9CB" + // 19900 - 19904
-                "\u0000\uE9CD\u0000\uE9BC\u0000\u0000\u8EA2\uCBCF\u8EA2\uCBC7" + // 19905 - 19909
-                "\u8EA2\uCBBA\u0000\uE9CC\u8EA2\uCBD7\u8EA2\uCBDA\u8EA2\uCBC3" + // 19910 - 19914
-                "\u8EA2\uCBCE\u0000\u0000\u0000\uE9C2\u0000\uEDC9\u8EA2\uC4AD" + // 19915 - 19919
-                "\u8EA2\uC4B7\u0000\uE4E2\u8EA2\uC4C1\u0000\uE4EF\u0000\uE4E6" + // 19920 - 19924
-                "\u8EA2\uC4B4\u0000\uE4E5\u8EA2\uC4AB\u8EA2\uC4B9\u8EA2\uC4CD" + // 19925 - 19929
-                "\u0000\uE0C5\u0000\uE9D7\u8EA2\uC4BC\u8EA2\uCBB4\u8EA2\uC4BE" + // 19930 - 19934
-                "\u8EA2\uC4CC\u0000\uE4EC\u8EA2\uC4B5\u0000\uE4E0\u0000\uE4F0" + // 19935 - 19939
-                "\u0000\uEDDA\u8EA2\uC4AA\u0000\u0000\u8EA2\uC4C3\u0000\u0000" + // 19940 - 19944
-                "\u0000\u0000\u0000\u0000\u8EA2\uC4C2\u0000\u0000\u0000\u0000" + // 19945 - 19949
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19950 - 19954
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 19955 - 19959
-                "\u0000\u0000\u0000\u0000\u8EA2\uCBD0\u0000\uE9D4\u8EA2\uCBC5" + // 19960 - 19964
-                "\u8EA2\uCBCA\u0000\uE9C9\u0000\u0000\u8EA2\uCBB6\u0000\uE9D6" + // 19965 - 19969
-                "\u0000\u0000\u0000\uE9C0\u8EA2\uCBB5\u8EA2\uCBD6\u0000\uE9D8" + // 19970 - 19974
-                "\u8EA2\uCBB9\u8EA2\uCBC9\u0000\u0000\u8EA2\uCBBB\u8EA2\uCBD9" + // 19975 - 19979
-                "\u8EA2\uCBD5\u0000\uE9BE\u0000\uE9C8\u8EA2\uBDBE\u8EA2\uBDB8" + // 19980 - 19984
-                "\u0000\u0000\u0000\uE0C2\u0000\uE0CA\u8EA2\uBDB4\u8EA2\uBDAD" + // 19985 - 19989
-                "\u8EA2\uBDAE\u0000\u0000\u8EA2\uBDB0\u0000\uE0B1\u8EA2\uBDBD" + // 19990 - 19994
-                "\u0000\u0000\u0000\uE0BF\u0000\uE0C8\u0000\u0000\u0000\u0000" + // 19995 - 19999
-                "\u8EA2\uBDBF\u8EA2\uBDD7\u8EA2\uBDCF\u0000\uE0AD\u8EA2\uBDD5" + // 20000 - 20004
-                "\u0000\uE0B9\u0000\u0000\u0000\uE0B7\u0000\u0000\u8EA2\uBDDB" + // 20005 - 20009
-                "\u0000\uE0B6\u8EA2\uBDC5\u8EA2\uBDB9\u8EA2\uBDC3\u0000\uE0CD" + // 20010 - 20014
-                "\u8EA2\uBDC9\u8EA2\uBDC6\u8EA2\uBDB5\u0000\uE0C9\u8EA2\uBDD3" + // 20015 - 20019
-                "\u8EA2\uBDD0\u8EA2\uBDD8\u0000\uE0B0\u8EA2\uBDC4\u0000\uE0CC" + // 20020 - 20024
-                "\u0000\u0000\u8EA2\uBDCB\u0000\u0000\u0000\u0000\u0000\uE0BA" + // 20025 - 20029
-                "\u0000\uE0BD\u0000\u0000\u8EA2\uBDCA\u0000\uE0CB\u8EA2\uBDBA" + // 20030 - 20034
-                "\u8EA2\uB6C8\u0000\u0000\u0000\u0000\u8EA2\uBDD4\u8EA2\uBDD2" + // 20035 - 20039
-                "\u8EA2\uBDD6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20040 - 20044
-                "\u0000\u0000\u0000\u0000\u8EA2\uB2E6\u8EA2\uB2E3\u8EA2\uB2E1" + // 20045 - 20049
-                "\u0000\u0000\u0000\u0000\u0000\uD8A6\u8EA2\uB2E4\u0000\uD8AB" + // 20050 - 20054
-                "\u8EA2\uB2DE\u8EA2\uB2ED\u0000\u0000\u8EA2\uB2EF\u8EA2\uB2DF" + // 20055 - 20059
-                "\u0000\u0000\u0000\uD8A8\u8EA2\uB2F0\u8EA2\uB2EB\u8EA2\uB2DD" + // 20060 - 20064
-                "\u8EA2\uB2E2\u8EA2\uB2EC\u8EA2\uB2E8\u8EA2\uB2E5\u0000\u0000" + // 20065 - 20069
-                "\u0000\uD8AD\u8EA2\uB2EE\u8EA2\uB2E0\u0000\u0000\u0000\u0000" + // 20070 - 20074
-                "\u8EA2\uB2E9\u8EA2\uB2DB\u0000\uD8AC\u0000\uD8A9\u8EA2\uB2E7" + // 20075 - 20079
-                "\u0000\u0000\u8EA2\uB2EA\u8EA2\uB2DC\u0000\uD8AA\u0000\uD8A7" + // 20080 - 20084
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDDB2" + // 20085 - 20089
-                "\u8EA2\uB9A8\u0000\uDDB1\u0000\u0000\u8EA2\uB9AB\u8EA2\uB9AE" + // 20090 - 20094
-                "\u0000\uDDAE\u0000\uDDAC\u8EA2\uB9A3\u8EA2\uB9AC\u8EA2\uB9AA" + // 20095 - 20099
-                "\u8EA2\uB9A7\u8EA2\uB9AF\u8EA2\uB9B0\u8EA2\uB9B2\u8EA2\uB9B3" + // 20100 - 20104
-                "\u8EA2\uB9A2\u8EA2\uB6CF\u0000\u0000\u0000\u0000\u8EA2\uBDC1" + // 20105 - 20109
-                "\u0000\u0000\u0000\uDBD2\u0000\u0000\u0000\u0000\u0000\u0000" + // 20110 - 20114
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20115 - 20119
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20120 - 20124
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20125 - 20129
-                "\u0000\u0000\u0000\uE0C7\u0000\uDBDF\u0000\uE0B5\u8EA2\uBDBB" + // 20130 - 20134
-                "\u0000\uE0C3\u0000\u0000\u8EA2\uBDAF\u0000\uE0B2\u0000\uE0AE" + // 20135 - 20139
-                "\u8EA2\uBDCD\u0000\uE0B4\u0000\uE0B8\u0000\uE0B3\u0000\uE0BC" + // 20140 - 20144
-                "\u8EA2\uBDD1\u8EA2\uBDC8\u0000\u0000\u0000\u0000\u8EA2\uBDB6" + // 20145 - 20149
-                "\u0000\uE0C1\u0000\uE0BB\u8EA2\uBDC2\u0000\uE0AB\u8EA2\uBDCE" + // 20150 - 20154
-                "\u8EA2\uBDC7\u0000\uE0AF\u8EA2\uBDBC\u0000\uE0BE\u8EA2\uBDD9" + // 20155 - 20159
-                "\u8EA2\uBDDA\u0000\u0000\u0000\uE0AC\u8EA2\uBDCC\u0000\uE0C0" + // 20160 - 20164
-                "\u8EA2\uBDC0\u8EA2\uBDB2\u8EA2\uBDB3\u0000\uE0C4\u8EA2\uBDB7" + // 20165 - 20169
-                "\u8EA2\uB6C4\u0000\u0000\u8EA2\uB6E0\u0000\u0000\u0000\uDBE9" + // 20170 - 20174
-                "\u0000\uDBDD\u0000\uDBE8\u0000\uDBD3\u8EA2\uB6D0\u8EA2\uB6E2" + // 20175 - 20179
-                "\u8EA2\uB6DA\u0000\uDBD4\u0000\uDBCE\u8EA2\uB6E8\u0000\u0000" + // 20180 - 20184
-                "\u8EA2\uB6E1\u8EA2\uB6E3\u0000\uDBD6\u0000\uDBDE\u8EA2\uB6E5" + // 20185 - 20189
-                "\u8EA2\uB6CE\u8EA2\uB6DF\u8EA2\uB6D3\u8EA2\uB6E7\u0000\uDBE3" + // 20190 - 20194
-                "\u0000\uDBCB\u0000\uDBE1\u8EA2\uB6D8\u8EA2\uB6D6\u8EA2\uB6D7" + // 20195 - 20199
-                "\u0000\uDBD8\u8EA2\uB6D2\u8EA2\uB6D1\u0000\uDBCD\u8EA2\uB6CB" + // 20200 - 20204
-                "\u8EA2\uB6E9\u0000\uDBCF\u8EA2\uB6D5\u0000\uDBED\u0000\u0000" + // 20205 - 20209
-                "\u0000\uDBE7\u8EA2\uB6CA\u0000\uDBE4\u0000\uDBE2\u0000\uDBEB" + // 20210 - 20214
-                "\u8EA2\uB6DC\u0000\uDBE6\u8EA2\uB0B5\u8EA2\uB6DD\u0000\uDBE5" + // 20215 - 20219
-                "\u8EA2\uB6E4\u0000\uDBCA\u8EA2\uB6D9\u0000\uDBDC\u8EA2\uB6CD" + // 20220 - 20224
-                "\u0000\uDBDB\u0000\u0000\u0000\uDBD9\u0000\uDBD1\u0000\uDBD0" + // 20225 - 20229
-                "\u8EA2\uBDAC\u8EA2\uB6E6\u0000\u0000\u0000\u0000\u0000\uCCB2" + // 20230 - 20234
-                "\u0000\u0000\u0000\uD0A7\u8EA2\uA9B2\u0000\u0000\u8EA2\uA5D3" + // 20235 - 20239
-                "\u0000\uD0AC\u0000\u0000\u8EA2\uA9B3\u0000\uD0A8\u0000\uD0AB" + // 20240 - 20244
-                "\u0000\uD0AA\u0000\uD0A9\u0000\uD0A6\u0000\u0000\u0000\u0000" + // 20245 - 20249
-                "\u0000\u0000\u8EA2\uAEAB\u0000\u0000\u0000\uD4CA\u8EA2\uAEAE" + // 20250 - 20254
-                "\u0000\uD4C8\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uAEAA" + // 20255 - 20259
-                "\u0000\uD4CB\u0000\uD4C9\u0000\uD4CC\u8EA2\uAEAC\u8EA2\uAEAD" + // 20260 - 20264
-                "\u0000\u0000\u8EA2\uAEA9\u8EA2\uAEAF\u0000\u0000\u0000\u0000" + // 20265 - 20269
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDEB7" + // 20270 - 20274
-                "\u0000\uD9AA\u8EA2\uB3EC\u8EA2\uB3EE\u8EA2\uB3ED\u8EA2\uB3EF" + // 20275 - 20279
-                "\u0000\uD9AB\u0000\u0000\u0000\u0000\u0000\uDEB4\u0000\u0000" + // 20280 - 20284
-                "\u0000\uDEB5\u0000\uDEB6\u0000\u0000\u0000\uE3B7\u8EA2\uC1EC" + // 20285 - 20289
-                "\u0000\u0000\u8EA2\uC1EB\u8EA2\uC1ED\u8EA2\uC1EE\u0000\uE3B8" + // 20290 - 20294
-                "\u0000\u0000\u0000\uE3B6\u8EA2\uB0C5\u0000\u0000\u8EA2\uB0BF" + // 20295 - 20299
-                "\u8EA2\uB0C8\u8EA2\uB0C6\u0000\uD6CC\u8EA2\uB0B7\u0000\uD6BD" + // 20300 - 20304
-                "\u0000\uD6BC\u0000\uD6C4\u0000\uD6CA\u8EA2\uB0C3\u0000\uD6C9" + // 20305 - 20309
-                "\u8EA2\uB0B4\u0000\uDBC8\u0000\u0000\u8EA2\uB0CC\u8EA2\uB0B3" + // 20310 - 20314
-                "\u8EA2\uB0AE\u0000\uD6C2\u0000\uD6CE\u0000\uD6BB\u0000\u0000" + // 20315 - 20319
-                "\u8EA2\uB0BB\u8EA2\uB0C0\u0000\u0000\u0000\u0000\u0000\u0000" + // 20320 - 20324
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20325 - 20329
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20330 - 20334
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDBEA" + // 20335 - 20339
-                "\u8EA2\uB6C5\u8EA2\uB6C9\u0000\u0000\u0000\uDBD7\u0000\uDBD5" + // 20340 - 20344
-                "\u0000\u0000\u0000\u0000\u0000\uDBCC\u8EA2\uB6C7\u8EA2\uB6C6" + // 20345 - 20349
-                "\u0000\uDBE0\u0000\u0000\u8EA2\uB6CC\u0000\uDBDA\u0000\u0000" + // 20350 - 20354
-                "\u8EA2\uB6DE\u8EA2\uB6EA\u0000\uDBC9\u8EA2\uB6DB\u8EA2\uB6D4" + // 20355 - 20359
-                "\u0000\uDBEC\u8EA2\uABE6\u0000\uD1FC\u8EA2\uABE0\u0000\u0000" + // 20360 - 20364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20365 - 20369
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20370 - 20374
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20375 - 20379
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20380 - 20384
-                "\u8EA2\uB0AF\u0000\uD6C1\u0000\uD6C6\u0000\u0000\u0000\u0000" + // 20385 - 20389
-                "\u0000\u0000\u8EA2\uB0B8\u8EA2\uB0BE\u8EA2\uB0BA\u8EA2\uB0AD" + // 20390 - 20394
-                "\u8EA2\uB0B0\u8EA2\uB0A9\u8EA2\uB0AA\u0000\uD6CD\u0000\uD6BE" + // 20395 - 20399
-                "\u8EA2\uB0B9\u8EA2\uB0C2\u0000\uD6C8\u0000\uD6BA\u0000\u0000" + // 20400 - 20404
-                "\u0000\uD6C3\u8EA2\uB0B1\u0000\uD6C5\u8EA2\uB0B2\u8EA2\uB0BC" + // 20405 - 20409
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD6C7\u8EA2\uB0CB" + // 20410 - 20414
-                "\u8EA2\uB0AB\u0000\uD6C0\u0000\uD6BF\u0000\uD6CB\u8EA2\uB0A8" + // 20415 - 20419
-                "\u8EA2\uB0C9\u8EA2\uB0BD\u8EA2\uB0CA\u8EA2\uB0C4\u8EA2\uB0B6" + // 20420 - 20424
-                "\u8EA2\uABDE\u8EA2\uABE1\u0000\u0000\u8EA2\uABE4\u8EA2\uABD9" + // 20425 - 20429
-                "\u0000\u0000\u0000\u0000\u8EA2\uABE7\u8EA2\uABEA\u8EA2\uABEC" + // 20430 - 20434
-                "\u8EA2\uABD6\u0000\uD1F9\u0000\uD1FE\u8EA2\uB0AC\u0000\uD2B0" + // 20435 - 20439
-                "\u8EA2\uABE5\u8EA2\uABED\u8EA2\uABDD\u8EA2\uABD5\u0000\u0000" + // 20440 - 20444
-                "\u0000\u0000\u0000\u0000\u8EA2\uB0C7\u0000\uD2A3\u8EA2\uABE2" + // 20445 - 20449
-                "\u8EA2\uABDA\u8EA2\uABDC\u0000\uD2A8\u0000\u0000\u8EA2\uABDF" + // 20450 - 20454
-                "\u0000\uD2A2\u8EA2\uABD2\u8EA2\uABE8\u0000\u0000\u8EA2\uABEB" + // 20455 - 20459
-                "\u0000\u0000\u0000\u0000\u0000\uD1FD\u0000\u0000\u0000\uD2AB" + // 20460 - 20464
-                "\u8EA2\uABCF\u0000\uD2AD\u0000\uD1FB\u0000\uD2B1\u8EA2\uABE9" + // 20465 - 20469
-                "\u8EA2\uABD1\u0000\uD2AE\u8EA2\uB0C1\u8EA2\uA7E8\u0000\uD2A1" + // 20470 - 20474
-                "\u0000\uD1FA\u8EA2\uABD8\u8EA2\uABD0\u0000\uD2AF\u0000\uD2A7" + // 20475 - 20479
-                "\u8EA2\uABE3\u0000\uD2AC\u0000\uD2AA\u8EA2\uABDB\u0000\uD2A4" + // 20480 - 20484
-                "\u8EA2\uABD3\u0000\uD2A5\u0000\uD2A6\u8EA2\uABD4\u8EA2\uA7E7" + // 20485 - 20489
-                "\u0000\uCED3\u8EA2\uA7DA\u8EA2\uA7DC\u0000\uCED1\u0000\uCED6" + // 20490 - 20494
-                "\u8EA2\uA7DD\u8EA2\uA7EA\u0000\u0000\u0000\uD1F8\u0000\uCEDC" + // 20495 - 20499
-                "\u0000\u0000\u0000\uCEC6\u8EA2\uA7E9\u0000\u0000\u8EA2\uA7ED" + // 20500 - 20504
-                "\u8EA2\uA7D9\u8EA2\uA7EF\u8EA2\uA7E0\u0000\uCECF\u8EA2\uA7D5" + // 20505 - 20509
-                "\u0000\uCECE\u0000\uCEE0\u0000\uCED5\u0000\u0000\u8EA2\uA7D3" + // 20510 - 20514
-                "\u8EA2\uABD7\u0000\uCEDB\u0000\uCEDF\u8EA2\uA7E1\u8EA2\uA7E6" + // 20515 - 20519
-                "\u0000\u0000\u0000\uCEE1\u0000\uCEDA\u0000\uCECC\u0000\uCEC2" + // 20520 - 20524
-                "\u0000\u0000\u0000\uCEC7\u0000\u0000\u8EA2\uA7D7\u0000\uCEC3" + // 20525 - 20529
-                "\u8EA2\uA7EE\u0000\u0000\u8EA2\uA7D1\u8EA2\uA7D0\u8EA2\uA7DE" + // 20530 - 20534
-                "\u8EA2\uA7D2\u0000\uCEDE\u0000\uD6B9\u0000\uCED7\u8EA2\uA7DF" + // 20535 - 20539
-                "\u0000\uCEC4\u0000\u0000\u0000\uD2A9\u0000\u0000\u0000\u0000" + // 20540 - 20544
-                "\u0000\u0000\u8EA2\uA7EC\u0000\u0000\u0000\u0000\u0000\u0000" + // 20545 - 20549
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uD2E7\u0000\u0000" + // 20550 - 20554
-                "\u0000\u0000\u8EA2\uD2E8\u0000\u0000\u0000\uEEB6\u8EA2\uD2EA" + // 20555 - 20559
-                "\u8EA2\uD2E9\u0000\u0000\u0000\uA3A3\u0000\u0000\u8EA2\uD9B6" + // 20560 - 20564
-                "\u8EA2\uD9B7\u8EA2\uD9B3\u0000\u0000\u8EA2\uD9B4\u0000\uF1E6" + // 20565 - 20569
-                "\u0000\uF1E7\u8EA2\uD9B5\u0000\u0000\u0000\uF4E1\u0000\u0000" + // 20570 - 20574
-                "\u0000\u0000\u0000\uF4DD\u0000\uF4E2\u0000\uF4DE\u0000\uF4E0" + // 20575 - 20579
-                "\u0000\uF4DC\u0000\u0000\u0000\uF4DF\u0000\u0000\u0000\u0000" + // 20580 - 20584
-                "\u0000\u0000\u0000\u0000\u0000\uF6FD\u8EA2\uDEBC\u0000\u0000" + // 20585 - 20589
-                "\u8EA2\uE6B8\u0000\u0000\u8EA2\uE6B7\u0000\u0000\u8EA2\uE9D8" + // 20590 - 20594
-                "\u0000\uFAA7\u0000\uFAA8\u8EA2\uEDEE\u8EA2\uEBF4\u0000\u0000" + // 20595 - 20599
-                "\u8EA2\uEDED\u0000\u0000\u8EA2\uF1AD\u8EA2\uF1F2\u0000\uC8CE" + // 20600 - 20604
-                "\u0000\u0000\u0000\u0000\u0000\uCBB7\u0000\u0000\u8EA2\uA8C9" + // 20605 - 20609
-                "\u0000\uCFAB\u0000\u0000\u8EA2\uC7D5\u8EA2\uC7D1\u8EA2\uC7D4" + // 20610 - 20614
-                "\u8EA2\uC7D2\u0000\uE6E4\u8EA2\uC7CC\u0000\uE6DF\u0000\u0000" + // 20615 - 20619
-                "\u0000\u0000\u0000\u0000\u8EA2\uCEB4\u0000\uEBA2\u0000\uEBA5" + // 20620 - 20624
-                "\u0000\u0000\u8EA2\uCEB6\u0000\u0000\u0000\uEBAD\u8EA2\uCEB5" + // 20625 - 20629
-                "\u0000\uEBA7\u0000\u0000\u0000\uEEF8\u8EA2\uCEB7\u0000\u0000" + // 20630 - 20634
-                "\u0000\uEBAC\u8EA2\uCEB3\u0000\uEBAE\u0000\u0000\u0000\u0000" + // 20635 - 20639
-                "\u0000\u0000\u0000\uEBA3\u0000\u0000\u0000\uE6E2\u0000\uEBA6" + // 20640 - 20644
-                "\u0000\u0000\u0000\uEBA4\u0000\uEBA8\u0000\uEBAA\u0000\uEBA1" + // 20645 - 20649
-                "\u0000\uEBAF\u0000\uEBAB\u0000\u0000\u0000\uEBA9\u8EA2\uCEB2" + // 20650 - 20654
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFA1" + // 20655 - 20659
-                "\u0000\u0000\u0000\uEEFB\u0000\u0000\u0000\u0000\u0000\u0000" + // 20660 - 20664
-                "\u0000\uEFA4\u0000\u0000\u8EA2\uD4BF\u0000\uEFA5\u8EA2\uD4CB" + // 20665 - 20669
-                "\u8EA2\uD4C4\u0000\uEEF4\u8EA2\uD4CC\u8EA2\uD4C6\u0000\uEEFE" + // 20670 - 20674
-                "\u8EA2\uA7E5\u0000\uCAE8\u0000\uCBA1\u0000\uCAF6\u8EA2\uA4CE" + // 20675 - 20679
-                "\u0000\uCAEB\u0000\uCAFA\u8EA2\uA4D6\u0000\uCAE9\u0000\uCAEA" + // 20680 - 20684
-                "\u8EA2\uA7E3\u8EA2\uA4CF\u0000\uCAF1\u0000\uCAFC\u8EA2\uA4DD" + // 20685 - 20689
-                "\u8EA2\uA4D0\u0000\uCAEF\u0000\u0000\u0000\uCAF4\u8EA2\uA7CF" + // 20690 - 20694
-                "\u0000\uCAFD\u8EA2\uA4D7\u0000\uCAF3\u0000\u0000\u0000\uCAFE" + // 20695 - 20699
-                "\u0000\uCAE7\u8EA2\uA4D4\u0000\uCAEC\u8EA2\uA4D8\u8EA2\uA7E4" + // 20700 - 20704
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20705 - 20709
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20710 - 20714
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCECD\u0000\uCEDD" + // 20715 - 20719
-                "\u8EA2\uA7D6\u0000\uCED4\u0000\u0000\u8EA2\uA7EB\u0000\uCEC5" + // 20720 - 20724
-                "\u0000\u0000\u0000\uCEC8\u8EA2\uA7E2\u0000\u0000\u8EA2\uA7D4" + // 20725 - 20729
-                "\u8EA2\uA7D8\u0000\uCED0\u0000\uCED2\u8EA2\uA7DB\u0000\uCED9" + // 20730 - 20734
-                "\u0000\uCECB\u0000\uCEC9\u0000\uCECA\u0000\uCED8\u0000\uC6E5" + // 20735 - 20739
-                "\u0000\uC6E4\u0000\uCAE5\u8EA2\uA1E1\u0000\u0000\u0000\u0000" + // 20740 - 20744
-                "\u8EA2\uA2D9\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA2DD" + // 20745 - 20749
-                "\u8EA2\uA2DF\u8EA2\uA2E0\u0000\uC8C6\u0000\uC8C7\u8EA2\uA2DC" + // 20750 - 20754
-                "\u0000\uC8C2\u0000\u0000\u8EA2\uA2DA\u0000\u0000\u8EA2\uA2DE" + // 20755 - 20759
-                "\u0000\uC8C3\u0000\u0000\u0000\uC8BE\u0000\u0000\u0000\uC8BF" + // 20760 - 20764
-                "\u0000\u0000\u0000\uC8C5\u8EA2\uA2DB\u0000\uC8BD\u0000\uCAE6" + // 20765 - 20769
-                "\u0000\uC8C0\u0000\uC8C1\u0000\uC8C4\u0000\u0000\u0000\u0000" + // 20770 - 20774
-                "\u0000\u0000\u8EA2\uA4DB\u8EA2\uA4D9\u8EA2\uA4CC\u0000\uCAF2" + // 20775 - 20779
-                "\u8EA2\uA4D3\u0000\uCAED\u8EA2\uA4CD\u0000\u0000\u8EA2\uA4D5" + // 20780 - 20784
-                "\u0000\u0000\u8EA2\uA4D2\u0000\uCAF0\u8EA2\uA4D1\u0000\uCAF7" + // 20785 - 20789
-                "\u8EA2\uA4DA\u0000\uCAF9\u0000\u0000\u0000\uCAFB\u0000\u0000" + // 20790 - 20794
-                "\u8EA2\uA4CB\u0000\u0000\u0000\uCAEE\u8EA2\uA4DC\u0000\u0000" + // 20795 - 20799
-                "\u0000\uCAF5\u0000\uCAF8\u0000\u0000\u0000\uD3D1\u8EA2\uB9C8" + // 20800 - 20804
-                "\u0000\uE1FD\u0000\u0000\u8EA2\uC7C1\u0000\uF7BB\u0000\u0000" + // 20805 - 20809
-                "\u8EA2\uE6FD\u0000\u0000\u0000\u0000\u0000\uCBC4\u0000\u0000" + // 20810 - 20814
-                "\u0000\u0000\u0000\u0000\u0000\uDDBD\u0000\u0000\u0000\u0000" + // 20815 - 20819
-                "\u0000\u0000\u0000\uDDBC\u0000\u0000\u8EA2\uC0B6\u0000\uE1FE" + // 20820 - 20824
-                "\u8EA2\uC0B8\u8EA2\uC0B7\u0000\u0000\u0000\u0000\u8EA2\uC7C2" + // 20825 - 20829
-                "\u0000\uE6D7\u8EA2\uCEAB\u8EA2\uCEAE\u8EA2\uCEAD\u0000\u0000" + // 20830 - 20834
-                "\u8EA2\uCEAC\u8EA2\uD4B7\u8EA2\uD4B9\u8EA2\uD4B8\u0000\u0000" + // 20835 - 20839
-                "\u0000\uF2B6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF2B5" + // 20840 - 20844
-                "\u0000\u0000\u0000\uF5C6\u8EA2\uDFC7\u8EA2\uDFC9\u8EA2\uDFC8" + // 20845 - 20849
-                "\u0000\u0000\u0000\u0000\u0000\uF7BC\u0000\u0000\u0000\u0000" + // 20850 - 20854
-                "\u0000\u0000\u8EA2\uE7A1\u8EA2\uE6FE\u0000\u0000\u8EA2\uE9F8" + // 20855 - 20859
-                "\u0000\uFABC\u0000\u0000\u0000\u0000\u0000\uFBAA\u8EA2\uEEA3" + // 20860 - 20864
-                "\u8EA2\uEEA2\u8EA2\uD1BF\u8EA2\uD1BE\u8EA2\uD1C1\u8EA2\uD7F2" + // 20865 - 20869
-                "\u8EA2\uD7F1\u0000\uF1A6\u8EA2\uD7F3\u0000\u0000\u0000\uF4A1" + // 20870 - 20874
-                "\u8EA2\uDDB9\u0000\u0000\u8EA2\uE1F6\u8EA2\uE5E6\u8EA2\uEDD5" + // 20875 - 20879
-                "\u0000\u0000\u0000\uC5D4\u0000\uC6E2\u0000\uC6E1\u0000\u0000" + // 20880 - 20884
-                "\u0000\uCEC0\u8EA2\uA1C1\u8EA2\uA1DF\u0000\uC8BC\u0000\u0000" + // 20885 - 20889
-                "\u8EA2\uA2D8\u8EA2\uA4C9\u8EA2\uA4CA\u0000\uCEC1\u0000\u0000" + // 20890 - 20894
-                "\u8EA2\uA7CE\u0000\u0000\u0000\uD1F7\u8EA2\uABCD\u8EA2\uABCE" + // 20895 - 20899
-                "\u0000\u0000\u0000\uD6B4\u0000\uD6B8\u8EA2\uB0A7\u0000\uD6B7" + // 20900 - 20904
-                "\u0000\uD6B5\u0000\uD6B6\u0000\u0000\u8EA2\uB6C3\u0000\uDBC7" + // 20905 - 20909
-                "\u0000\uE0AA\u0000\u0000\u0000\uE0A8\u0000\uE0A9\u8EA2\uBDAB" + // 20910 - 20914
-                "\u0000\u0000\u0000\u0000\u0000\uE9BB\u0000\uC5D5\u0000\u0000" + // 20915 - 20919
-                "\u8EA2\uA1E0\u0000\u0000\u0000\uC6E3\u0000\u0000\u0000\u0000" + // 20920 - 20924
-                "\u8EA2\uA1E3\u0000\u0000\u0000\u0000\u0000\uC6E6\u8EA2\uA1E2" + // 20925 - 20929
-                "\u0000\uE4DA\u0000\u0000\u0000\u0000\u8EA2\uCBB1\u8EA2\uCBB2" + // 20930 - 20934
-                "\u0000\uEDC7\u0000\uEDC8\u8EA2\uD7F0\u8EA2\uD7EF\u8EA2\uE1F5" + // 20935 - 20939
-                "\u8EA2\uEFB2\u0000\uC5D1\u8EA2\uA1C0\u0000\uC6E0\u0000\u0000" + // 20940 - 20944
-                "\u0000\uCAE4\u8EA2\uA4C8\u0000\u0000\u0000\uD1F5\u0000\uE4DC" + // 20945 - 20949
-                "\u0000\uC5D2\u0000\u0000\u8EA2\uABCA\u0000\uD1F6\u8EA2\uABCB" + // 20950 - 20954
-                "\u0000\u0000\u0000\uF3FE\u0000\uC5D3\u0000\u0000\u0000\u0000" + // 20955 - 20959
-                "\u8EA2\uA7CD\u0000\u0000\u8EA2\uABCC\u0000\u0000\u8EA2\uB0A5" + // 20960 - 20964
-                "\u8EA2\uB0A4\u8EA2\uB0A2\u0000\u0000\u8EA2\uB0A1\u8EA2\uB0A6" + // 20965 - 20969
-                "\u8EA2\uB0A3\u0000\u0000\u0000\u0000\u0000\uDBC5\u0000\uDBC6" + // 20970 - 20974
-                "\u0000\u0000\u0000\u0000\u0000\uE0A7\u8EA2\uBDA8\u0000\u0000" + // 20975 - 20979
-                "\u8EA2\uBDA9\u8EA2\uBDAA\u0000\u0000\u0000\u0000\u0000\u0000" + // 20980 - 20984
-                "\u8EA2\uC4A7\u8EA2\uC4A8\u8EA2\uC4A6\u0000\u0000\u8EA2\uC4A4" + // 20985 - 20989
-                "\u8EA2\uC4A5\u0000\uE4DD\u8EA2\uCBB3\u8EA2\uD1C0\u8EA2\uA7CB" + // 20990 - 20994
-                "\u0000\u0000\u8EA2\uABC7\u0000\uD1F2\u8EA2\uABC8\u0000\u0000" + // 20995 - 20999
-                "\u0000\uD1F3\u0000\u0000\u8EA2\uAFFE\u0000\uD6B2\u0000\uD6B1" + // 21000 - 21004
-                "\u0000\u0000\u8EA2\uB6C2\u8EA2\uB6C0\u8EA2\uB6C1\u8EA2\uB6BF" + // 21005 - 21009
-                "\u0000\u0000\u8EA2\uB6BE\u0000\u0000\u0000\u0000\u8EA2\uBDA3" + // 21010 - 21014
-                "\u8EA2\uBDA6\u0000\uE0A5\u8EA2\uBDA4\u0000\uE0A4\u8EA2\uBDA5" + // 21015 - 21019
-                "\u0000\u0000\u8EA2\uC4A3\u0000\u0000\u0000\u0000\u8EA2\uCBAE" + // 21020 - 21024
-                "\u8EA2\uCBAF\u8EA2\uCBB0\u0000\u0000\u8EA2\uD1BC\u8EA2\uD1BB" + // 21025 - 21029
-                "\u0000\uEDC6\u8EA2\uD1BA\u8EA2\uD1BD\u8EA2\uD7EC\u0000\u0000" + // 21030 - 21034
-                "\u0000\u0000\u8EA2\uD7ED\u8EA2\uD7EE\u0000\u0000\u8EA2\uDDB8" + // 21035 - 21039
-                "\u0000\uF3FD\u0000\uF6D8\u8EA2\uE5E5\u0000\u0000\u0000\uFAF3" + // 21040 - 21044
-                "\u8EA2\uA1BF\u0000\u0000\u0000\uD1F4\u8EA2\uABC9\u0000\uD6B3" + // 21045 - 21049
-                "\u0000\u0000\u0000\u0000\u0000\uDBC4\u0000\u0000\u0000\uE0A6" + // 21050 - 21054
-                "\u8EA2\uBDA7\u0000\u0000\u0000\uE4DB\u8EA2\uEBE0\u0000\u0000" + // 21055 - 21059
-                "\u8EA2\uEBDC\u8EA2\uEBDE\u0000\uFAF1\u0000\u0000\u0000\u0000" + // 21060 - 21064
-                "\u0000\u0000\u8EA2\uEDD3\u8EA2\uEDD4\u0000\uFBE2\u8EA2\uEDD2" + // 21065 - 21069
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uEFB1\u0000\uFCBB" + // 21070 - 21074
-                "\u8EA2\uEFAF\u8EA2\uEFB0\u8EA2\uF0BA\u0000\u0000\u0000\u0000" + // 21075 - 21079
-                "\u0000\uFDA3\u8EA2\uF1A3\u8EA2\uF1A1\u8EA2\uF1A2\u8EA2\uF1A4" + // 21080 - 21084
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uF2AB\u0000\u0000" + // 21085 - 21089
-                "\u0000\uC5CE\u0000\uC8B9\u0000\u0000\u0000\uCEBC\u0000\u0000" + // 21090 - 21094
-                "\u8EA2\uA7CA\u0000\u0000\u0000\u0000\u8EA2\uABC6\u0000\u0000" + // 21095 - 21099
-                "\u0000\u0000\u0000\u0000\u8EA2\uAFF7\u8EA2\uAFF9\u0000\u0000" + // 21100 - 21104
-                "\u8EA2\uAFF8\u0000\u0000\u8EA2\uAFFA\u0000\uDBC3\u8EA2\uB6BB" + // 21105 - 21109
-                "\u8EA2\uAFFB\u0000\u0000\u8EA2\uB6BA\u8EA2\uB6BC\u8EA2\uB6BD" + // 21110 - 21114
-                "\u8EA2\uBCFD\u0000\uE0A2\u8EA2\uBCFE\u8EA2\uBDA2\u0000\uE0A3" + // 21115 - 21119
-                "\u0000\uE0A1\u8EA2\uBDA1\u0000\uF3F1\u8EA2\uDDA2\u0000\u0000" + // 21120 - 21124
-                "\u8EA2\uDDAD\u0000\uF3F3\u8EA2\uDDB4\u0000\u0000\u8EA2\uDDA9" + // 21125 - 21129
-                "\u0000\u0000\u8EA2\uDDA4\u0000\u0000\u0000\u0000\u8EA2\uDDB5" + // 21130 - 21134
-                "\u8EA2\uDCFE\u8EA2\uDDAB\u0000\u0000\u0000\uF3FA\u8EA2\uDDB0" + // 21135 - 21139
-                "\u8EA2\uDDB6\u8EA2\uDDAA\u0000\uF3F2\u8EA2\uDDAC\u8EA2\uDDA1" + // 21140 - 21144
-                "\u0000\uF3F9\u0000\u0000\u0000\u0000\u8EA2\uDDB3\u8EA2\uDDA6" + // 21145 - 21149
-                "\u0000\uF3F5\u0000\u0000\u8EA2\uDDA8\u8EA2\uDDA5\u0000\uF3FB" + // 21150 - 21154
-                "\u8EA2\uDDA7\u0000\uF3F4\u0000\uF3F7\u8EA2\uDDAF\u8EA2\uDDA3" + // 21155 - 21159
-                "\u8EA2\uDDB2\u0000\u0000\u8EA2\uDDAE\u0000\u0000\u0000\u0000" + // 21160 - 21164
-                "\u0000\u0000\u0000\uF6CF\u8EA2\uE1F3\u0000\uF6D4\u0000\uF6D5" + // 21165 - 21169
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF6CE\u8EA2\uE1F2" + // 21170 - 21174
-                "\u0000\u0000\u8EA2\uE1EF\u8EA2\uE1F0\u0000\uF6D2\u8EA2\uE1EA" + // 21175 - 21179
-                "\u8EA2\uE1EE\u0000\uF6D1\u0000\u0000\u8EA2\uE1EB\u0000\u0000" + // 21180 - 21184
-                "\u0000\u0000\u8EA2\uC1E3\u8EA2\uC1E1\u0000\u0000\u8EA2\uC1DD" + // 21185 - 21189
-                "\u0000\uE3AF\u8EA2\uC1DB\u0000\uE3B5\u8EA2\uC1E0\u8EA2\uC1E7" + // 21190 - 21194
-                "\u8EA2\uC1DE\u8EA2\uC1E6\u0000\u0000\u0000\u0000\u0000\uE7FC" + // 21195 - 21199
-                "\u0000\uE7F9\u0000\u0000\u0000\uE7FA\u0000\u0000\u8EA2\uC9A1" + // 21200 - 21204
-                "\u8EA2\uC8F7\u0000\uE7F8\u0000\uE7F5\u8EA2\uC8F8\u0000\u0000" + // 21205 - 21209
-                "\u0000\u0000\u0000\uE7F7\u8EA2\uC8FB\u0000\u0000\u8EA2\uC8FD" + // 21210 - 21214
-                "\u0000\u0000\u0000\u0000\u8EA2\uC9A6\u0000\u0000\u0000\u0000" + // 21215 - 21219
-                "\u8EA2\uC9A5\u8EA2\uC8FE\u0000\uE7F4\u8EA2\uC8F6\u0000\uE7F2" + // 21220 - 21224
-                "\u8EA2\uC8F9\u0000\uE7FD\u8EA2\uC8FC\u0000\u0000\u8EA2\uC9A2" + // 21225 - 21229
-                "\u0000\uE7F6\u0000\uE7F3\u8EA2\uC9A4\u8EA2\uC9A3\u0000\uE7FB" + // 21230 - 21234
-                "\u0000\u0000\u8EA2\uC8FA\u0000\u0000\u0000\uECA3\u8EA2\uCFD4" + // 21235 - 21239
-                "\u0000\u0000\u8EA2\uCFD1\u0000\uECA4\u0000\u0000\u0000\uECA2" + // 21240 - 21244
-                "\u0000\u0000\u8EA2\uCFD8\u8EA2\uCFD5\u8EA2\uCFCE\u8EA2\uD1A8" + // 21245 - 21249
-                "\u8EA2\uD7D9\u0000\u0000\u0000\u0000\u0000\uF0FA\u0000\u0000" + // 21250 - 21254
-                "\u8EA2\uD7E8\u0000\uF0FE\u0000\uF1A3\u8EA2\uD7CB\u0000\u0000" + // 21255 - 21259
-                "\u0000\uF0FD\u0000\u0000\u8EA2\uD7E6\u8EA2\uD7E7\u8EA2\uD7DD" + // 21260 - 21264
-                "\u8EA2\uD7DC\u8EA2\uD7D4\u0000\u0000\u0000\u0000\u8EA2\uD7DE" + // 21265 - 21269
-                "\u8EA2\uD7E5\u8EA2\uD7E4\u0000\u0000\u0000\uF0F8\u0000\uF0F6" + // 21270 - 21274
-                "\u8EA2\uD7D6\u8EA2\uD7D3\u0000\u0000\u8EA2\uD7D0\u8EA2\uD7E3" + // 21275 - 21279
-                "\u0000\uF1A2\u8EA2\uD7E1\u0000\uF0FC\u0000\uF0FB\u0000\u0000" + // 21280 - 21284
-                "\u8EA2\uD7DB\u0000\u0000\u8EA2\uD7CA\u8EA2\uD7CC\u8EA2\uD7CE" + // 21285 - 21289
-                "\u8EA2\uD7E0\u8EA2\uD7DA\u0000\uF0F7\u0000\u0000\u8EA2\uD7D1" + // 21290 - 21294
-                "\u0000\u0000\u8EA2\uD7DF\u0000\u0000\u0000\u0000\u0000\u0000" + // 21295 - 21299
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uD7D2\u0000\u0000" + // 21300 - 21304
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21305 - 21309
-                "\u0000\u0000\u0000\uF3F8\u8EA2\uDDB1\u8EA2\uD0F1\u0000\uEDB8" + // 21310 - 21314
-                "\u0000\uEDC0\u0000\u0000\u8EA2\uD1B0\u0000\uEDC1\u8EA2\uD0F2" + // 21315 - 21319
-                "\u8EA2\uD1B6\u8EA2\uD1A9\u8EA2\uD1AF\u0000\uEDBE\u0000\u0000" + // 21320 - 21324
-                "\u0000\u0000\u8EA2\uD1AC\u0000\u0000\u8EA2\uD1B3\u0000\u0000" + // 21325 - 21329
-                "\u0000\uEDC3\u0000\u0000\u0000\uEDBD\u8EA2\uD1A5\u8EA2\uD0F6" + // 21330 - 21334
-                "\u8EA2\uD1B8\u8EA2\uD0F3\u8EA2\uD1B1\u0000\uEDBA\u0000\u0000" + // 21335 - 21339
-                "\u8EA2\uD0FD\u0000\u0000\u8EA2\uD0FE\u0000\uEDB9\u0000\uEDB6" + // 21340 - 21344
-                "\u8EA2\uD0F9\u0000\uEDBC\u0000\u0000\u0000\uEDB5\u0000\u0000" + // 21345 - 21349
-                "\u8EA2\uD1B2\u8EA2\uD1B5\u8EA2\uD1A2\u8EA2\uD7D5\u0000\u0000" + // 21350 - 21354
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21355 - 21359
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uD7CD\u0000\u0000" + // 21360 - 21364
-                "\u8EA2\uD7C9\u0000\uF1A1\u0000\u0000\u0000\u0000\u0000\uF0F4" + // 21365 - 21369
-                "\u0000\uF0F9\u0000\uF0F5\u8EA2\uD7D7\u8EA2\uD7E2\u0000\uF0F3" + // 21370 - 21374
-                "\u8EA2\uD7CF\u8EA2\uD7D8\u8EA2\uC3E8\u8EA2\uC3ED\u8EA2\uC3D9" + // 21375 - 21379
-                "\u0000\u0000\u8EA2\uC3EA\u8EA2\uC3D6\u0000\u0000\u0000\u0000" + // 21380 - 21384
-                "\u8EA2\uC3DD\u8EA2\uC3DE\u0000\uE4CE\u8EA2\uC3F1\u8EA2\uC3EF" + // 21385 - 21389
-                "\u0000\u0000\u8EA2\uC3D2\u8EA2\uC3F4\u0000\u0000\u8EA2\uC3F5" + // 21390 - 21394
-                "\u8EA2\uC3F7\u0000\uE4D2\u0000\uE4CA\u0000\u0000\u8EA2\uB5FA" + // 21395 - 21399
-                "\u8EA2\uC3DA\u8EA2\uC3EC\u8EA2\uC3DB\u0000\uE4C7\u0000\uE4D7" + // 21400 - 21404
-                "\u8EA2\uC3F3\u0000\uE4D5\u0000\uE4D1\u8EA2\uC3D0\u0000\uE4C9" + // 21405 - 21409
-                "\u0000\u0000\u8EA2\uC3D3\u0000\uE4D6\u0000\u0000\u8EA2\uC3E3" + // 21410 - 21414
-                "\u8EA2\uC3CF\u0000\u0000\u0000\uE4CF\u8EA2\uC3E7\u8EA2\uC3D7" + // 21415 - 21419
-                "\u0000\uE4D0\u8EA2\uC3E0\u0000\uE4C6\u0000\uDFFD\u8EA2\uC3E9" + // 21420 - 21424
-                "\u8EA2\uBCE2\u8EA2\uC3D4\u0000\u0000\u0000\u0000\u8EA2\uC3EE" + // 21425 - 21429
-                "\u0000\uE4CB\u8EA2\uC3EB\u0000\uE4C8\u8EA2\uC3E5\u0000\uE4D3" + // 21430 - 21434
-                "\u8EA2\uC3DC\u8EA2\uC3F9\u0000\u0000\u0000\u0000\u0000\u0000" + // 21435 - 21439
-                "\u0000\u0000\u8EA2\uE6C5\u0000\u0000\u0000\uF8E5\u8EA2\uE6C6" + // 21440 - 21444
-                "\u8EA2\uEDF1\u0000\uFCE5\u8EA2\uF0C8\u0000\uC8D0\u0000\uCFAE" + // 21445 - 21449
-                "\u0000\uCFAD\u8EA2\uACF0\u0000\uD3A1\u0000\u0000\u0000\u0000" + // 21450 - 21454
-                "\u8EA2\uACEF\u8EA2\uB2A6\u0000\u0000\u0000\uD7CF\u8EA2\uB8B7" + // 21455 - 21459
-                "\u8EA2\uB2A5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDCE1" + // 21460 - 21464
-                "\u8EA2\uB8BA\u8EA2\uB8B8\u8EA2\uB8B9\u0000\uDCE0\u0000\u0000" + // 21465 - 21469
-                "\u8EA2\uBFA7\u8EA2\uBFA8\u8EA2\uBFA6\u0000\u0000\u0000\uE5FA" + // 21470 - 21474
-                "\u8EA2\uC6B4\u8EA2\uC6B3\u8EA2\uC6B5\u0000\uE5F9\u0000\uE5F8" + // 21475 - 21479
-                "\u0000\u0000\u0000\u0000\u8EA2\uD2FA\u8EA2\uD2FC\u0000\u0000" + // 21480 - 21484
-                "\u0000\uEEC9\u8EA2\uD2FB\u8EA2\uD9CF\u0000\uF1F2\u8EA2\uE2E5" + // 21485 - 21489
-                "\u0000\u0000\u8EA2\uE2E4\u0000\uF8E6\u8EA2\uE6C7\u0000\uF8E8" + // 21490 - 21494
-                "\u0000\uF8E7\u8EA2\uE9DD\u8EA2\uEBFC\u0000\uFAFE\u0000\uC8D1" + // 21495 - 21499
-                "\u8EA2\uACF1\u0000\uD3A2\u8EA2\uB6AB\u0000\uDBAD\u0000\uDBC2" + // 21500 - 21504
-                "\u0000\uDBB8\u0000\u0000\u0000\uDBBC\u0000\uDBBB\u8EA2\uB5F3" + // 21505 - 21509
-                "\u0000\u0000\u8EA2\uB6B2\u8EA2\uB6B8\u8EA2\uB6B0\u8EA2\uB6B7" + // 21510 - 21514
-                "\u0000\u0000\u0000\u0000\u8EA2\uB6A4\u8EA2\uB5F4\u8EA2\uB6B6" + // 21515 - 21519
-                "\u8EA2\uB6A6\u0000\uDBB0\u0000\uDBBD\u0000\u0000\u8EA2\uB6AF" + // 21520 - 21524
-                "\u0000\uDBB6\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uB6AE" + // 21525 - 21529
-                "\u8EA2\uB5F5\u0000\uDBBE\u0000\u0000\u0000\uDBC0\u8EA2\uB6B1" + // 21530 - 21534
-                "\u0000\uDBC1\u0000\uDBAF\u8EA2\uB5FC\u8EA2\uB6B3\u0000\u0000" + // 21535 - 21539
-                "\u0000\u0000\u0000\uDBB5\u0000\uDBBF\u8EA2\uB5FE\u8EA2\uB6AA" + // 21540 - 21544
-                "\u8EA2\uB5F9\u8EA2\uB5FD\u0000\uDBBA\u8EA2\uB5F8\u0000\uDBAE" + // 21545 - 21549
-                "\u0000\uDBB7\u0000\uDBB4\u8EA2\uB6A3\u0000\uD6A2\u8EA2\uBCE3" + // 21550 - 21554
-                "\u0000\uDBB1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21555 - 21559
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21560 - 21564
-                "\u0000\u0000\u8EA2\uA3E7\u0000\u0000\u8EA2\uA3E2\u8EA2\uA3E4" + // 21565 - 21569
-                "\u8EA2\uA3E6\u8EA2\uA3E3\u0000\uCAA6\u8EA2\uA3E0\u0000\u0000" + // 21570 - 21574
-                "\u8EA2\uA3E1\u0000\uCAA3\u0000\uCAA4\u8EA2\uA3E5\u8EA2\uA3E8" + // 21575 - 21579
-                "\u0000\uCAA5\u8EA2\uA3E9\u0000\u0000\u0000\u0000\u0000\u0000" + // 21580 - 21584
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA6C9" + // 21585 - 21589
-                "\u0000\u0000\u8EA2\uA6C3\u8EA2\uA6BE\u0000\uCDA5\u8EA2\uA6C6" + // 21590 - 21594
-                "\u8EA2\uA6C4\u8EA2\uA6BD\u8EA2\uA6CA\u8EA2\uA6CD\u8EA2\uA6C8" + // 21595 - 21599
-                "\u8EA2\uA6C1\u0000\uCDA7\u8EA2\uA6C7\u0000\uCDA8\u8EA2\uA6C2" + // 21600 - 21604
-                "\u8EA2\uA6C5\u8EA2\uA6BC\u8EA2\uA6C0\u8EA2\uA6CC\u0000\uCDA9" + // 21605 - 21609
-                "\u0000\u0000\u0000\uCDAA\u0000\u0000\u8EA2\uA6BF\u8EA2\uA6CB" + // 21610 - 21614
-                "\u0000\uCDA4\u0000\uCDA6\u0000\u0000\u0000\u0000\u0000\u0000" + // 21615 - 21619
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1F8" + // 21620 - 21624
-                "\u0000\uA1F7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21625 - 21629
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21630 - 21634
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21635 - 21639
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21640 - 21644
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21645 - 21649
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21650 - 21654
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21655 - 21659
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21660 - 21664
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21665 - 21669
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21670 - 21674
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21675 - 21679
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCBC7\u0000\u0000" + // 21680 - 21684
-                "\u8EA2\uB9D0\u0000\u0000\u8EA2\uB9D1\u8EA2\uC7D8\u8EA2\uCEB8" + // 21685 - 21689
-                "\u8EA2\uD4CE\u0000\uF5D1\u0000\uD6A9\u0000\uD6B0\u0000\uD5FD" + // 21690 - 21694
-                "\u0000\uD6AB\u8EA2\uAFEB\u0000\uD6AD\u0000\uD5FA\u0000\u0000" + // 21695 - 21699
-                "\u0000\uD5F9\u8EA2\uAFDD\u0000\u0000\u8EA2\uAFE1\u0000\uD6A4" + // 21700 - 21704
-                "\u8EA2\uAFF3\u8EA2\uAFEA\u8EA2\uAFE2\u0000\uD6A8\u0000\uD6A5" + // 21705 - 21709
-                "\u0000\u0000\u0000\uD5FB\u0000\uD5FE\u0000\u0000\u0000\u0000" + // 21710 - 21714
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21715 - 21719
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21720 - 21724
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21725 - 21729
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21730 - 21734
-                "\u8EA2\uB6A8\u0000\u0000\u8EA2\uB5F6\u8EA2\uB5F7\u8EA2\uB5FB" + // 21735 - 21739
-                "\u0000\u0000\u8EA2\uB6AC\u8EA2\uB6A9\u0000\u0000\u8EA2\uB6A2" + // 21740 - 21744
-                "\u8EA2\uB6A1\u0000\uDBB3\u8EA2\uB6A5\u8EA2\uB6B4\u8EA2\uB5F2" + // 21745 - 21749
-                "\u0000\u0000\u8EA2\uB6B5\u8EA2\uB6A7\u8EA2\uB6B9\u8EA2\uB6AD" + // 21750 - 21754
-                "\u0000\uDBB2\u8EA2\uABA6\u8EA2\uAAFC\u8EA2\uABB3\u8EA2\uABC3" + // 21755 - 21759
-                "\u0000\uD1E3\u8EA2\uABA8\u8EA2\uABBA\u0000\u0000\u8EA2\uAAFE" + // 21760 - 21764
-                "\u8EA2\uABC1\u8EA2\uABC2\u8EA2\uABC5\u8EA2\uABBC\u8EA2\uABAD" + // 21765 - 21769
-                "\u8EA2\uABB5\u0000\uD1E9\u0000\uD1DC\u0000\uD1E4\u0000\uD1F0" + // 21770 - 21774
-                "\u0000\uD1D9\u0000\uD1DB\u0000\u0000\u0000\u0000\u0000\u0000" + // 21775 - 21779
-                "\u8EA2\uABA5\u0000\uD1ED\u0000\uD1E6\u8EA2\uABBF\u8EA2\uABA2" + // 21780 - 21784
-                "\u0000\uD1EF\u0000\uD1EA\u8EA2\uABAB\u0000\u0000\u0000\u0000" + // 21785 - 21789
-                "\u0000\uD1EE\u8EA2\uABB2\u8EA2\uABAA\u0000\uD1E7\u8EA2\uABBE" + // 21790 - 21794
-                "\u8EA2\uABB6\u0000\u0000\u0000\uD1E1\u8EA2\uABC4\u8EA2\uABA9" + // 21795 - 21799
-                "\u0000\uD1DD\u8EA2\uABBB\u8EA2\uABB1\u0000\uD1E2\u8EA2\uABB7" + // 21800 - 21804
-                "\u0000\uD1DA\u8EA2\uAAFD\u0000\uD1EB\u0000\uD6A7\u0000\uD1E0" + // 21805 - 21809
-                "\u8EA2\uABB0\u8EA2\uABAF\u8EA2\uABA4\u0000\u0000\u8EA2\uABC0" + // 21810 - 21814
-                "\u0000\u0000\u8EA2\uABB9\u0000\u0000\u0000\u0000\u0000\uD1D8" + // 21815 - 21819
-                "\u0000\uDEB2\u8EA2\uBCCC\u0000\u0000\u0000\uE4C4\u8EA2\uCAE1" + // 21820 - 21824
-                "\u8EA2\uCAE0\u0000\u0000\u0000\u0000\u0000\uC5CC\u0000\uC8B4" + // 21825 - 21829
-                "\u8EA2\uA7B3\u0000\uCEA5\u0000\u0000\u0000\uCEA4\u0000\u0000" + // 21830 - 21834
-                "\u8EA2\uAAFA\u8EA2\uAAFB\u0000\u0000\u8EA2\uAFD9\u8EA2\uAFDA" + // 21835 - 21839
-                "\u0000\uD5F4\u0000\uD5F5\u0000\u0000\u0000\uD5F6\u8EA2\uB5F1" + // 21840 - 21844
-                "\u0000\u0000\u0000\u0000\u0000\uDBAC\u0000\u0000\u0000\uDFE7" + // 21845 - 21849
-                "\u0000\u0000\u0000\uDFE6\u8EA2\uC3CE\u8EA2\uC6C1\u8EA2\uCAE2" + // 21850 - 21854
-                "\u8EA2\uD7C8\u0000\u0000\u0000\u0000\u0000\uF6CD\u0000\uF9F2" + // 21855 - 21859
-                "\u0000\uC5CD\u0000\u0000\u0000\uC6DC\u0000\uC6DD\u0000\uC6DB" + // 21860 - 21864
-                "\u0000\uC6DE\u0000\uC6DA\u0000\u0000\u0000\u0000\u0000\uC8B7" + // 21865 - 21869
-                "\u0000\u0000\u8EA2\uA2D7\u0000\uC8B6\u0000\uC8B8\u0000\u0000" + // 21870 - 21874
-                "\u0000\u0000\u8EA2\uA2D2\u8EA2\uA2D1\u8EA2\uA2D4\u8EA2\uA2D3" + // 21875 - 21879
-                "\u8EA2\uA2D6\u0000\uC8B5\u8EA2\uA2D0\u8EA2\uA2D5\u8EA2\uD7C0" + // 21880 - 21884
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0F0\u0000\u0000" + // 21885 - 21889
-                "\u0000\uF0ED\u0000\uF0F1\u8EA2\uD7BE\u0000\uF0EE\u8EA2\uD7C1" + // 21890 - 21894
-                "\u8EA2\uD7C2\u8EA2\uD7C7\u0000\u0000\u0000\u0000\u8EA2\uD7C3" + // 21895 - 21899
-                "\u0000\u0000\u0000\u0000\u8EA2\uDCFD\u0000\u0000\u0000\u0000" + // 21900 - 21904
-                "\u0000\u0000\u0000\uF3F0\u0000\u0000\u8EA2\uE1E8\u0000\uF3EF" + // 21905 - 21909
-                "\u8EA2\uE1E6\u8EA2\uE1E7\u0000\uF6CC\u0000\uF8BB\u8EA2\uE5D6" + // 21910 - 21914
-                "\u0000\u0000\u0000\uF8BA\u0000\u0000\u0000\u0000\u8EA2\uE8FD" + // 21915 - 21919
-                "\u8EA2\uE8FE\u0000\u0000\u0000\uF9F1\u0000\u0000\u8EA2\uE8FC" + // 21920 - 21924
-                "\u0000\uFAEF\u0000\u0000\u8EA2\uEFAE\u0000\uFCBA\u8EA2\uF0B8" + // 21925 - 21929
-                "\u8EA2\uF0B9\u0000\u0000\u0000\uC5CB\u0000\u0000\u0000\uC8B2" + // 21930 - 21934
-                "\u0000\uC8B3\u0000\uCAD5\u0000\u0000\u8EA2\uA7B2\u0000\uD1D7" + // 21935 - 21939
-                "\u0000\uD5F3\u0000\uDBAA\u0000\u0000\u0000\u0000\u0000\uD9B7" + // 21940 - 21944
-                "\u0000\u0000\u0000\uDFE4\u0000\uDFE5\u8EA2\uBCC7\u0000\u0000" + // 21945 - 21949
-                "\u0000\u0000\u0000\u0000\u0000\uE4C1\u0000\u0000\u8EA2\uC3C5" + // 21950 - 21954
-                "\u0000\uE4BE\u0000\uE4BF\u0000\uE4BD\u8EA2\uC3CA\u8EA2\uC3C9" + // 21955 - 21959
-                "\u8EA2\uC3C6\u0000\uE4C3\u0000\u0000\u0000\u0000\u8EA2\uC3C8" + // 21960 - 21964
-                "\u0000\uDFE0\u0000\u0000\u0000\u0000\u8EA2\uC3CC\u8EA2\uC3C7" + // 21965 - 21969
-                "\u0000\uE4C0\u0000\uE4BC\u0000\uE4C2\u8EA2\uC3CB\u0000\u0000" + // 21970 - 21974
-                "\u0000\u0000\u0000\u0000\u0000\uE9A5\u0000\u0000\u8EA2\uCADF" + // 21975 - 21979
-                "\u8EA2\uCADE\u8EA2\uCADD\u0000\uE9A3\u0000\u0000\u0000\u0000" + // 21980 - 21984
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9A4\u8EA2\uD0EC" + // 21985 - 21989
-                "\u8EA2\uD0EF\u0000\uEDB2\u0000\u0000\u0000\u0000\u0000\uEDB1" + // 21990 - 21994
-                "\u8EA2\uD0F0\u8EA2\uD0EB\u0000\uEDB4\u8EA2\uD0ED\u0000\u0000" + // 21995 - 21999
-                "\u0000\uEDB3\u8EA2\uD0EA\u0000\u0000\u8EA2\uD0EE\u0000\uF0F2" + // 22000 - 22004
-                "\u0000\uF0EF\u8EA2\uD7C6\u8EA2\uD7C5\u0000\u0000\u8EA2\uD7C4" + // 22005 - 22009
-                "\u8EA2\uD7BF\u0000\u0000\u8EA2\uC0B4\u0000\uEAF7\u0000\u0000" + // 22010 - 22014
-                "\u0000\u0000\u8EA2\uD4AB\u8EA2\uD4B2\u0000\uEEEF\u0000\u0000" + // 22015 - 22019
-                "\u8EA2\uD4B6\u0000\uEEF3\u8EA2\uD4AE\u8EA2\uD4AC\u0000\u0000" + // 22020 - 22024
-                "\u8EA2\uD4B5\u0000\u0000\u0000\uEEEE\u8EA2\uD4B4\u0000\uEEF0" + // 22025 - 22029
-                "\u0000\uEEF1\u8EA2\uD4AD\u0000\uEEF2\u8EA2\uD4B3\u8EA2\uD4AF" + // 22030 - 22034
-                "\u8EA2\uD4B0\u8EA2\uD4B1\u0000\uEAFD\u0000\u0000\u0000\u0000" + // 22035 - 22039
-                "\u0000\u0000\u8EA2\uDABE\u8EA2\uDACA\u0000\u0000\u0000\uF2B4" + // 22040 - 22044
-                "\u8EA2\uDAC5\u8EA2\uDAC7\u0000\u0000\u0000\uF2B2\u8EA2\uDABF" + // 22045 - 22049
-                "\u8EA2\uDAC3\u0000\u0000\u8EA2\uDAC6\u0000\uF2B0\u0000\uF2B3" + // 22050 - 22054
-                "\u8EA2\uDAC9\u8EA2\uDAC1\u8EA2\uDAC2\u8EA2\uDAC8\u8EA2\uDAC0" + // 22055 - 22059
-                "\u8EA2\uDAC4\u0000\uF2B1\u8EA2\uDFC0\u0000\u0000\u8EA2\uDFBF" + // 22060 - 22064
-                "\u0000\uF5C2\u8EA2\uDFC5\u0000\uF5C4\u0000\u0000\u0000\u0000" + // 22065 - 22069
-                "\u0000\uF5C1\u8EA2\uDFC1\u0000\uF5C5\u8EA2\uDFC2\u0000\u0000" + // 22070 - 22074
-                "\u8EA2\uDFC3\u8EA2\uDFC6\u0000\u0000\u0000\uF5C3\u0000\u0000" + // 22075 - 22079
-                "\u8EA2\uE3C1\u0000\u0000\u0000\u0000\u8EA2\uE3C4\u0000\u0000" + // 22080 - 22084
-                "\u8EA2\uE3BE\u8EA2\uE3C0\u0000\u0000\u0000\u0000\u8EA2\uE3BF" + // 22085 - 22089
-                "\u8EA2\uE3C2\u8EA2\uE3C3\u8EA2\uDFC4\u8EA2\uE3BD\u0000\u0000" + // 22090 - 22094
-                "\u0000\u0000\u0000\uF8F8\u8EA2\uE6F7\u8EA2\uE6FA\u8EA2\uE6FC" + // 22095 - 22099
-                "\u8EA2\uE6F5\u8EA2\uE6F6\u8EA2\uE6F9\u8EA2\uE6FB\u0000\uF8F9" + // 22100 - 22104
-                "\u0000\uF8F7\u0000\uF8F6\u8EA2\uE6F8\u8EA2\uE6F4\u8EA2\uE9F6" + // 22105 - 22109
-                "\u0000\uFABB\u0000\u0000\u8EA2\uE9F7\u0000\u0000\u0000\u0000" + // 22110 - 22114
-                "\u8EA2\uECB8\u0000\uFBA8\u8EA2\uECBA\u0000\uFBA9\u8EA2\uECB7" + // 22115 - 22119
-                "\u8EA2\uECB9\u0000\uFBF2\u0000\u0000\u8EA2\uEEA1\u0000\uFBF1" + // 22120 - 22124
-                "\u8EA2\uEFCC\u8EA2\uEFCB\u0000\u0000\u8EA2\uEFCA\u0000\u0000" + // 22125 - 22129
-                "\u0000\u0000\u8EA2\uF1B7\u8EA2\uF1B8\u8EA2\uF1BA\u8EA2\uF1B9" + // 22130 - 22134
-                "\u0000\u0000\u8EA2\uA2F0\u0000\uC8E9\u0000\uCDFD\u0000\u0000" + // 22135 - 22139
-                "\u0000\uCDFB\u8EA2\uA7AB\u8EA2\uA7A7\u8EA2\uA7AE\u0000\uCDFA" + // 22140 - 22144
-                "\u0000\uCEA3\u8EA2\uA7A9\u8EA2\uA7A5\u0000\uCEA2\u8EA2\uA7AC" + // 22145 - 22149
-                "\u0000\uCDF9\u8EA2\uA7AD\u0000\uCDFC\u0000\uCDFE\u8EA2\uA7B1" + // 22150 - 22154
-                "\u8EA2\uA7B0\u8EA2\uA7A8\u0000\uCDF8\u0000\uCDF7\u0000\uCEA1" + // 22155 - 22159
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22160 - 22164
-                "\u0000\u0000\u8EA2\uAAF0\u8EA2\uAAF6\u0000\u0000\u0000\uD1D3" + // 22165 - 22169
-                "\u0000\uD1D0\u8EA2\uAAED\u8EA2\uAAF2\u0000\u0000\u0000\uD1D6" + // 22170 - 22174
-                "\u0000\uD1CE\u8EA2\uAAF1\u0000\uD1D1\u0000\uD1D4\u0000\u0000" + // 22175 - 22179
-                "\u0000\u0000\u8EA2\uAAF4\u0000\u0000\u0000\uD1CF\u8EA2\uAAF9" + // 22180 - 22184
-                "\u0000\uD1D2\u0000\u0000\u0000\uD1D5\u8EA2\uAAEE\u8EA2\uAAF3" + // 22185 - 22189
-                "\u8EA2\uAAF7\u8EA2\uAAEF\u8EA2\uAAEC\u0000\u0000\u0000\u0000" + // 22190 - 22194
-                "\u8EA2\uAAF8\u8EA2\uAAF5\u0000\u0000\u0000\u0000\u0000\u0000" + // 22195 - 22199
-                "\u0000\u0000\u0000\u0000\u8EA2\uBCCF\u0000\uDFED\u8EA2\uBCF7" + // 22200 - 22204
-                "\u8EA2\uBCDF\u8EA2\uBCE1\u0000\u0000\u8EA2\uBCEE\u8EA2\uBCED" + // 22205 - 22209
-                "\u8EA2\uBCCD\u0000\uDFF8\u0000\uDFFA\u8EA2\uBCD5\u8EA2\uBCDC" + // 22210 - 22214
-                "\u8EA2\uBCE4\u0000\uDFF9\u8EA2\uBCDB\u8EA2\uBCE7\u8EA2\uBCFA" + // 22215 - 22219
-                "\u0000\u0000\u8EA2\uBCEF\u0000\u0000\u0000\u0000\u0000\u0000" + // 22220 - 22224
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EAD\uA4C9\u0000\u0000" + // 22225 - 22229
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22230 - 22234
-                "\u8EA2\uBCFB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22235 - 22239
-                "\u8EA2\uBCD1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22240 - 22244
-                "\u8EA2\uC3F8\u0000\uE4CC\u0000\u0000\u8EA2\uC3F6\u8EA2\uC3E1" + // 22245 - 22249
-                "\u8EA2\uC3E6\u8EA2\uC3DF\u0000\u0000\u8EA2\uC3F2\u8EA2\uC3D1" + // 22250 - 22254
-                "\u8EA2\uC3D8\u0000\u0000\u8EA2\uC3F0\u8EA2\uC3FA\u8EA2\uC3E2" + // 22255 - 22259
-                "\u0000\u0000\u8EA2\uC3D5\u8EA2\uDCFA\u8EA2\uDCF9\u0000\uF3ED" + // 22260 - 22264
-                "\u0000\uF3EE\u8EA2\uE5D3\u0000\u0000\u0000\u0000\u0000\uC5C6" + // 22265 - 22269
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uBCBE" + // 22270 - 22274
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDFD9\u0000\uDFD8" + // 22275 - 22279
-                "\u8EA2\uC3C3\u0000\u0000\u8EA2\uE1E4\u0000\uFAEE\u8EA2\uEFAD" + // 22280 - 22284
-                "\u0000\uC5C7\u0000\u0000\u0000\uD5E8\u0000\u0000\u0000\uDAFC" + // 22285 - 22289
-                "\u0000\uDAFB\u8EA2\uBCBF\u8EA2\uBCC0\u0000\uE4BA\u8EA2\uCADC" + // 22290 - 22294
-                "\u0000\uE8FE\u8EA2\uD7BD\u0000\u0000\u0000\uC5C8\u0000\uC6D8" + // 22295 - 22299
-                "\u0000\u0000\u0000\uCDF4\u8EA2\uA7A3\u0000\u0000\u8EA2\uAAEA" + // 22300 - 22304
-                "\u0000\uD1CB\u0000\uDAFD\u0000\u0000\u8EA2\uBCC1\u0000\uDFDA" + // 22305 - 22309
-                "\u0000\uE4BB\u0000\u0000\u8EA2\uD0E8\u8EA2\uD0E9\u0000\u0000" + // 22310 - 22314
-                "\u0000\u0000\u8EA2\uDCFB\u0000\uF6CB\u8EA2\uF0FE\u0000\uC5C9" + // 22315 - 22319
-                "\u0000\u0000\u8EA2\uA7A4\u0000\uCDF5\u0000\uD1CC\u0000\u0000" + // 22320 - 22324
-                "\u8EA2\uAAEB\u0000\uF8B8\u8EA2\uE1E1\u0000\u0000\u8EA2\uE1E2" + // 22325 - 22329
-                "\u8EA2\uE1DE\u0000\u0000\u0000\uF6C7\u8EA2\uE5CD\u0000\u0000" + // 22330 - 22334
-                "\u8EA2\uE5D0\u0000\u0000\u0000\u0000\u8EA2\uE5D1\u8EA2\uE5CF" + // 22335 - 22339
-                "\u8EA2\uE5D2\u0000\uF8B9\u8EA2\uE5CE\u0000\u0000\u0000\u0000" + // 22340 - 22344
-                "\u8EA2\uE8FA\u0000\uF9EF\u8EA2\uE8F9\u8EA2\uE8F8\u8EA2\uE8F7" + // 22345 - 22349
-                "\u0000\uF9EE\u0000\uF9F0\u0000\u0000\u8EA2\uEBDB\u0000\uFAED" + // 22350 - 22354
-                "\u0000\uFAEC\u0000\u0000\u0000\u0000\u8EA2\uEDCF\u8EA2\uEDCE" + // 22355 - 22359
-                "\u8EA2\uEDD1\u0000\uFCB7\u0000\uFBE1\u8EA2\uEFAC\u8EA2\uEDD0" + // 22360 - 22364
-                "\u0000\u0000\u0000\u0000\u8EA2\uEFAB\u0000\uFCB9\u0000\uFCB8" + // 22365 - 22369
-                "\u0000\uFCDF\u8EA2\uF0B7\u8EA2\uF0FD\u0000\uC5C5\u0000\u0000" + // 22370 - 22374
-                "\u0000\u0000\u8EA2\uBCB7\u8EA2\uD7BA\u0000\uA7E1\u0000\u0000" + // 22375 - 22379
-                "\u0000\uC8AD\u8EA2\uA2CD\u0000\uCAD3\u0000\uCAD1\u0000\u0000" + // 22380 - 22384
-                "\u0000\uCAD2\u0000\u0000\u8EA2\uA7A2\u0000\uCDF3\u0000\uD1C9" + // 22385 - 22389
-                "\u8EA2\uC3B9\u8EA2\uC3B4\u0000\u0000\u8EA2\uC3A8\u0000\u0000" + // 22390 - 22394
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22395 - 22399
-                "\u0000\u0000\u8EA2\uCAD0\u0000\u0000\u8EA2\uCAC1\u8EA2\uCACC" + // 22400 - 22404
-                "\u0000\u0000\u8EA2\uCAD3\u0000\uE8F8\u0000\uDFD1\u8EA2\uCAD1" + // 22405 - 22409
-                "\u0000\uE8F3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8F2" + // 22410 - 22414
-                "\u8EA2\uCAD8\u0000\u0000\u8EA2\uCAC2\u8EA2\uCACF\u8EA2\uCAC3" + // 22415 - 22419
-                "\u8EA2\uCACE\u0000\uE8F6\u8EA2\uCAD2\u8EA2\uBCA7\u0000\u0000" + // 22420 - 22424
-                "\u0000\u0000\u0000\u0000\u8EA2\uCAD9\u8EA2\uCACA\u0000\uE8F9" + // 22425 - 22429
-                "\u8EA2\uD0E1\u0000\uECF7\u0000\u0000\u8EA2\uCAD7\u8EA2\uCAD6" + // 22430 - 22434
-                "\u0000\uE8FB\u8EA2\uD0D4\u0000\uECF8\u8EA2\uD0D5\u0000\u0000" + // 22435 - 22439
-                "\u8EA2\uCAC6\u8EA2\uCAC7\u8EA2\uCAC4\u8EA2\uCAC9\u8EA2\uCAC5" + // 22440 - 22444
-                "\u8EA2\uCADA\u0000\uE8F5\u0000\uECF9\u0000\uE8F7\u0000\uE8FC" + // 22445 - 22449
-                "\u0000\u0000\u8EA2\uCAC8\u0000\u0000\u8EA2\uCAD4\u0000\uDFC1" + // 22450 - 22454
-                "\u0000\u0000\u8EA2\uBCAF\u8EA2\uBBFC\u8EA2\uBCAC\u8EA2\uC2FD" + // 22455 - 22459
-                "\u0000\uDFC4\u8EA2\uBCB0\u8EA2\uBCB3\u0000\uDFC3\u8EA2\uBCA1" + // 22460 - 22464
-                "\u8EA2\uBCB2\u8EA2\uBCB1\u0000\uDFC5\u8EA2\uBBF8\u0000\uDFC0" + // 22465 - 22469
-                "\u0000\uDFC8\u0000\u0000\u0000\uDFC6\u8EA2\uBCAE\u0000\u0000" + // 22470 - 22474
-                "\u8EA2\uBCA4\u0000\uDFCA\u8EA2\uBCB5\u8EA2\uBCAD\u8EA2\uBCB6" + // 22475 - 22479
-                "\u0000\uDFD2\u0000\uDFD0\u8EA2\uBCAB\u8EA2\uBCAA\u0000\u0000" + // 22480 - 22484
-                "\u8EA2\uBCA8\u8EA2\uBCA2\u0000\uDFC9\u0000\u0000\u0000\uDFC7" + // 22485 - 22489
-                "\u8EA2\uAFBB\u8EA2\uBBF9\u0000\u0000\u8EA2\uC3BD\u8EA2\uBBFA" + // 22490 - 22494
-                "\u0000\uDFC2\u0000\uDFCF\u8EA2\uC3A1\u0000\u0000\u0000\uDFCB"   // 22495 - 22499
-                ;
-
-            index2c =
-                "\u0000\uDFCC\u8EA2\uBBFB\u8EA2\uBCB4\u8EA2\uC2FE\u8EA2\uBCA5" + // 22500 - 22504
-                "\u8EA2\uBBFE\u0000\uDFCE\u8EA2\uBCA6\u8EA2\uBCA3\u0000\u0000" + // 22505 - 22509
-                "\u0000\u0000\u0000\uDFD3\u0000\u0000\u0000\u0000\u0000\u0000" + // 22510 - 22514
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uB0DA\u8EA2\uB0DB" + // 22515 - 22519
-                "\u8EA2\uB0DC\u0000\uD6D3\u0000\u0000\u0000\uD6CF\u8EA2\uB0D1" + // 22520 - 22524
-                "\u0000\u0000\u8EA2\uB0D9\u8EA2\uB0DE\u0000\uD6D4\u0000\u0000" + // 22525 - 22529
-                "\u8EA2\uB0CF\u8EA2\uB0D5\u8EA2\uB0CE\u8EA2\uB0D8\u0000\u0000" + // 22530 - 22534
-                "\u0000\u0000\u8EA2\uB0D4\u0000\uD6D0\u0000\uD6D2\u8EA2\uB0DD" + // 22535 - 22539
-                "\u0000\u0000\u8EA2\uB0CD\u8EA2\uB0D0\u8EA2\uB0D6\u0000\u0000" + // 22540 - 22544
-                "\u8EA2\uB0D7\u8EA2\uB0DF\u8EA2\uB0D3\u0000\u0000\u0000\uD6D1" + // 22545 - 22549
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22550 - 22554
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22555 - 22559
-                "\u0000\uDBF2\u8EA2\uB6F1\u0000\u0000\u0000\u0000\u8EA2\uB6F3" + // 22560 - 22564
-                "\u8EA2\uB6EF\u0000\u0000\u8EA2\uB6FB\u8EA2\uB6ED\u8EA2\uB6FA" + // 22565 - 22569
-                "\u0000\uDBEE\u8EA2\uB6EB\u8EA2\uBDDF\u8EA2\uB6F5\u0000\uDBF1" + // 22570 - 22574
-                "\u0000\u0000\u8EA2\uB6F6\u0000\uDAEC\u8EA2\uB5E5\u8EA2\uB5CD" + // 22575 - 22579
-                "\u0000\uDAE1\u0000\uDAE5\u8EA2\uB5E4\u0000\u0000\u8EA2\uB5D7" + // 22580 - 22584
-                "\u0000\uDAE6\u0000\uDAE0\u8EA2\uB5CC\u0000\u0000\u0000\uDFBF" + // 22585 - 22589
-                "\u8EA2\uB5E7\u8EA2\uB5D5\u0000\uDAEB\u8EA2\uB5D8\u8EA2\uB5E6" + // 22590 - 22594
-                "\u0000\uDAEA\u0000\u0000\u8EA2\uBBF5\u0000\u0000\u0000\uDAD7" + // 22595 - 22599
-                "\u8EA2\uB5D3\u0000\uDADC\u0000\uDAE7\u0000\u0000\u0000\uDAE2" + // 22600 - 22604
-                "\u8EA2\uB5DC\u8EA2\uB5D2\u8EA2\uB5D0\u8EA2\uB5E2\u0000\uDAD4" + // 22605 - 22609
-                "\u0000\uDAE8\u0000\uDAD8\u0000\uDFBE\u8EA2\uB5E0\u0000\uDAD9" + // 22610 - 22614
-                "\u0000\u0000\u0000\uDAD5\u0000\uDAE4\u0000\uDADF\u0000\uDADD" + // 22615 - 22619
-                "\u8EA2\uB5D4\u0000\uDAE9\u8EA2\uB5D1\u8EA2\uB5DE\u8EA2\uB5DA" + // 22620 - 22624
-                "\u8EA2\uBBF7\u8EA2\uBBF6\u0000\u0000\u0000\u0000\u0000\u0000" + // 22625 - 22629
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22630 - 22634
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uB5CF\u8EA2\uBCA9" + // 22635 - 22639
-                "\u0000\u0000\u8EA2\uDAAF\u0000\uEEE1\u0000\uF2AA\u8EA2\uDAB9" + // 22640 - 22644
-                "\u8EA2\uDAB5\u0000\u0000\u8EA2\uDAB3\u8EA2\uDAAE\u8EA2\uDABD" + // 22645 - 22649
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF2AE\u0000\u0000" + // 22650 - 22654
-                "\u8EA2\uDAAA\u8EA2\uDAB6\u8EA2\uDAB7\u8EA2\uDAAD\u8EA2\uDAAC" + // 22655 - 22659
-                "\u8EA2\uDABA\u0000\u0000\u8EA2\uDAB0\u8EA2\uDAAB\u8EA2\uDAB1" + // 22660 - 22664
-                "\u0000\u0000\u8EA2\uDABC\u8EA2\uDAA9\u8EA2\uDABB\u8EA2\uDAB8" + // 22665 - 22669
-                "\u0000\uF2AC\u0000\uF2AB\u0000\u0000\u0000\u0000\u0000\uF2AD" + // 22670 - 22674
-                "\u8EA2\uDAB4\u8EA2\uDAA8\u0000\u0000\u0000\u0000\u0000\u0000" + // 22675 - 22679
-                "\u0000\u0000\u0000\u0000\u8EA2\uDFA7\u0000\uF5BC\u8EA2\uDFAB" + // 22680 - 22684
-                "\u8EA2\uDFA8\u8EA2\uDFAF\u8EA2\uDFB5\u8EA2\uDFAA\u0000\u0000" + // 22685 - 22689
-                "\u8EA2\uDFBE\u0000\uF5B9\u8EA2\uDFB8\u8EA2\uDFAD\u8EA2\uDFB9" + // 22690 - 22694
-                "\u8EA2\uDFB4\u8EA2\uDFBB\u8EA2\uDFAC\u0000\uF5BE\u0000\uF5BD" + // 22695 - 22699
-                "\u8EA2\uDFAE\u8EA2\uDFBC\u8EA2\uDFA6\u8EA2\uDFBA\u8EA2\uAFCD" + // 22700 - 22704
-                "\u8EA2\uAFC1\u0000\uD5DA\u8EA2\uAFBA\u8EA2\uAFB7\u8EA2\uAFB8" + // 22705 - 22709
-                "\u0000\uD5DB\u8EA2\uAFC7\u8EA2\uAFCE\u0000\uD5DD\u8EA2\uAFBE" + // 22710 - 22714
-                "\u8EA2\uAFBD\u0000\uD5E5\u0000\uD5E4\u0000\uD5D6\u0000\uD5DC" + // 22715 - 22719
-                "\u0000\uD5DF\u8EA2\uAFCA\u0000\u0000\u0000\u0000\u8EA2\uAFC4" + // 22720 - 22724
-                "\u0000\uD5D9\u8EA2\uAFB5\u8EA2\uAFCC\u8EA2\uAFC3\u8EA2\uAFC5" + // 22725 - 22729
-                "\u8EA2\uAFC9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22730 - 22734
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22735 - 22739
-                "\u0000\u0000\u8EA2\uB5CB\u0000\u0000\u0000\uDADB\u0000\uDAEF" + // 22740 - 22744
-                "\u0000\uDAEE\u0000\u0000\u0000\uDAE3\u0000\u0000\u8EA2\uB5DD" + // 22745 - 22749
-                "\u8EA2\uB5D9\u8EA2\uB5D6\u8EA2\uB5E8\u0000\uDADE\u0000\uDAD6" + // 22750 - 22754
-                "\u0000\u0000\u0000\u0000\u8EA2\uB5DB\u0000\uDFCD\u0000\uDADA" + // 22755 - 22759
-                "\u8EA2\uB5E3\u0000\u0000\u0000\uDAF0\u0000\uDAED\u8EA2\uB5DF" + // 22760 - 22764
-                "\u8EA2\uB5CE\u0000\u0000\u0000\u0000\u8EAD\uA1D3\u8EAD\uA1D4" + // 22765 - 22769
-                "\u8EAD\uA1D5\u8EAD\uA1D6\u8EAD\uA1D7\u8EAD\uA1D8\u8EAD\uA1D9" + // 22770 - 22774
-                "\u8EAD\uA1DA\u8EAD\uA1DB\u8EAD\uA1DC\u8EAD\uA1DD\u8EAD\uA1DE" + // 22775 - 22779
-                "\u8EAD\uA1DF\u8EAD\uA1E0\u8EAD\uA1E1\u8EAD\uA1E2\u8EAD\uA1E3" + // 22780 - 22784
-                "\u8EAD\uA1E4\u8EAD\uA1E5\u8EAD\uA1E6\u8EAD\uA1E7\u8EAD\uA1E8" + // 22785 - 22789
-                "\u8EAD\uA1E9\u8EAD\uA1EA\u8EAD\uA1EB\u8EAD\uA1EC\u8EAD\uA1ED" + // 22790 - 22794
-                "\u8EAD\uA1EE\u8EAD\uA1EF\u8EAD\uA1F0\u8EAD\uA1F1\u8EAD\uA1F2" + // 22795 - 22799
-                "\u8EAD\uA1F3\u8EAD\uA1F4\u8EAD\uA1F5\u8EAD\uA1F6\u8EAD\uA1F7" + // 22800 - 22804
-                "\u8EAD\uA1F8\u8EAD\uA1F9\u8EAD\uA1FA\u8EAD\uA1FB\u8EAD\uA1FC" + // 22805 - 22809
-                "\u8EAD\uA1FD\u8EAD\uA1FE\u8EAD\uA2A1\u8EAD\uA2A2\u8EAD\uA2A3" + // 22810 - 22814
-                "\u8EAD\uA2A4\u8EAD\uA2A5\u8EAD\uA2A6\u8EAD\uA2A7\u8EAD\uA2A8" + // 22815 - 22819
-                "\u8EAD\uA2A9\u8EAD\uA2AA\u8EAD\uA2AB\u8EAD\uA2AC\u8EAD\uA2AD" + // 22820 - 22824
-                "\u8EAD\uA2AE\u8EAD\uA2AF\u8EAD\uA2B0\u8EAD\uA2B1\u8EAD\uA2B2" + // 22825 - 22829
-                "\u8EAD\uA2B3\u8EA2\uAAE1\u0000\uD1BD\u0000\uD1C8\u8EA2\uAADA" + // 22830 - 22834
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD1C0\u0000\uD5D4" + // 22835 - 22839
-                "\u0000\uD1BA\u0000\u0000\u8EA2\uAAD7\u8EA2\uAADE\u8EA2\uAAD6" + // 22840 - 22844
-                "\u8EA2\uAAD9\u8EA2\uAADD\u8EA2\uAFB4\u0000\uD1C7\u0000\u0000" + // 22845 - 22849
-                "\u8EA2\uAAE2\u8EA2\uAAE3\u8EA2\uAAE5\u0000\uD1B9\u0000\u0000" + // 22850 - 22854
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22855 - 22859
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22860 - 22864
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22865 - 22869
-                "\u0000\u0000\u0000\uD5E3\u8EA2\uAFC0\u0000\uD5E1\u0000\uD5E2" + // 22870 - 22874
-                "\u8EA2\uAFB6\u8EA2\uAFC6\u0000\u0000\u0000\uD5D8\u0000\u0000" + // 22875 - 22879
-                "\u0000\u0000\u8EA2\uB5CA\u8EA2\uAFC8\u8EA2\uAFC2\u0000\u0000" + // 22880 - 22884
-                "\u8EA2\uAFB9\u0000\u0000\u8EA2\uAFCB\u8EA2\uAFBC\u0000\uD5DE" + // 22885 - 22889
-                "\u8EA2\uB5E1\u8EA2\uAFBF\u0000\uD5E0\u0000\uD5D7\u0000\u0000" + // 22890 - 22894
-                "\u8EA2\uBFD2\u0000\u0000\u0000\uE1D7\u0000\uE1EB\u0000\u0000" + // 22895 - 22899
-                "\u8EA2\uBFE1\u0000\uE1ED\u0000\u0000\u8EA2\uBFDD\u0000\uE1E2" + // 22900 - 22904
-                "\u0000\uE1DC\u0000\uE1E4\u0000\uE1D9\u0000\uE1EA\u8EA2\uBFDE" + // 22905 - 22909
-                "\u8EA2\uBFCC\u8EA2\uBFE0\u8EA2\uBFC7\u8EA2\uBFE9\u0000\u0000" + // 22910 - 22914
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22915 - 22919
-                "\u0000\u0000\u8EA2\uBFF2\u0000\u0000\u0000\u0000\u0000\u0000" + // 22920 - 22924
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uBFC4" + // 22925 - 22929
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22930 - 22934
-                "\u8EA2\uC6EC\u0000\u0000\u8EA2\uC7A4\u0000\uE5DC\u8EA2\uC6F1" + // 22935 - 22939
-                "\u0000\u0000\u8EA2\uC6EF\u8EA2\uC6DA\u0000\uE6B0\u8EA2\uC6EA" + // 22940 - 22944
-                "\u8EA2\uC6FE\u8EA2\uC6E6\u0000\uE6B8\u8EA2\uC6FD\u8EA2\uC6E4" + // 22945 - 22949
-                "\u0000\uE1E9\u8EA2\uC6F4\u8EA2\uC6E5\u8EA2\uC6FB\u0000\uE6B7" + // 22950 - 22954
-                "\u0000\uE6AF\u0000\u0000\u8EA2\uC6CF\u0000\uCAC0\u8EA2\uA4B3" + // 22955 - 22959
-                "\u0000\u0000\u8EA2\uA4A9\u0000\uCABD\u0000\u0000\u0000\uCAD0" + // 22960 - 22964
-                "\u8EA2\uA4AE\u8EA2\uA4B4\u0000\uCAC2\u0000\uCAC4\u0000\u0000" + // 22965 - 22969
-                "\u8EA2\uA4AA\u0000\u0000\u8EA2\uA4AB\u8EA2\uA4AC\u0000\u0000" + // 22970 - 22974
-                "\u0000\uCACF\u0000\uCAC9\u0000\uCACE\u8EA2\uA4AD\u0000\uCACD" + // 22975 - 22979
-                "\u0000\uCABF\u0000\uCABE\u0000\uCACB\u0000\u0000\u0000\u0000" + // 22980 - 22984
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22985 - 22989
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22990 - 22994
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDE3\u8EA2\uA6FD" + // 22995 - 22999
-                "\u8EA2\uA6F6\u0000\uCDDE\u0000\uCDF1\u8EA2\uA6F2\u8EA2\uA6F9" + // 23000 - 23004
-                "\u8EA2\uA6FB\u8EA2\uA6FE\u0000\uCDEC\u0000\u0000\u8EA2\uA6FA" + // 23005 - 23009
-                "\u8EA2\uA6F3\u0000\uCDEA\u8EA2\uA6F7\u0000\u0000\u8EA2\uA7A1" + // 23010 - 23014
-                "\u0000\uCDDB\u0000\u0000\u8EA2\uA6FC\u0000\uCDE5\u0000\uCDE4" + // 23015 - 23019
-                "\u8EA2\uA6F5\u0000\uCDD9\u0000\uCDD4\u0000\uD1B7\u8EA2\uAAD3" + // 23020 - 23024
-                "\u8EA2\uAAD4\u0000\u0000\u0000\u0000\u8EA2\uAFB2\u0000\uD5D2" + // 23025 - 23029
-                "\u0000\uDAD3\u0000\uDFBD\u8EA2\uBBF4\u0000\uC5C3\u0000\u0000" + // 23030 - 23034
-                "\u0000\uC4DF\u0000\uC5C4\u0000\u0000\u8EA2\uA1DE\u0000\uC6D7" + // 23035 - 23039
-                "\u0000\uC6D6\u0000\uC6D4\u0000\uC6D5\u0000\u0000\u0000\u0000" + // 23040 - 23044
-                "\u0000\u0000\u0000\uC8AC\u8EA2\uA2C9\u8EA2\uA2CB\u0000\uC8AB" + // 23045 - 23049
-                "\u8EA2\uA2C3\u0000\u0000\u8EA2\uA2C4\u0000\u0000\u8EA2\uA2CA" + // 23050 - 23054
-                "\u8EA2\uA2C6\u8EA2\uA2C8\u0000\uC8AA\u8EA2\uA2C5\u8EA2\uA2CC" + // 23055 - 23059
-                "\u8EA2\uA2C7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 23060 - 23064
-                "\u0000\u0000\u0000\u0000\u0000\uCAC3\u0000\uCACC\u0000\uCACA" + // 23065 - 23069
-                "\u8EA2\uA4B2\u8EA2\uA4AF\u8EA2\uA4B7\u0000\uCAC8\u8EA2\uA4B8" + // 23070 - 23074
-                "\u0000\u0000\u0000\uCAC1\u8EA2\uA4B5\u0000\u0000\u0000\uCAC7" + // 23075 - 23079
-                "\u8EA2\uA4B1\u8EA2\uA4B0\u0000\uCAC5\u8EA2\uA4B6\u0000\uCAC6" + // 23080 - 23084
-                "\u0000\uCDD5\u0000\uFCB6\u8EA2\uEFA8\u0000\u0000\u8EA2\uEFA9" + // 23085 - 23089
-                "\u8EA2\uEFAA\u0000\u0000\u0000\u0000\u8EA2\uF2AA\u0000\uC5C1" + // 23090 - 23094
-                "\u8EA2\uA1DD\u0000\uC6D3\u0000\u0000\u0000\uC8A7\u0000\uC8A8" + // 23095 - 23099
-                "\u0000\uC8A6\u0000\u0000\u0000\uC8A9\u0000\uCABC\u0000\uCABB" + // 23100 - 23104
-                "\u0000\u0000\u8EA2\uA6F0\u0000\uCDD1\u0000\uCDD0\u0000\u0000" + // 23105 - 23109
-                "\u0000\u0000\u8EA2\uAFB1\u0000\uDAD1\u0000\uDAD2\u0000\u0000" + // 23110 - 23114
-                "\u0000\u0000\u0000\u0000\u0000\uDFBC\u8EA2\uC2F8\u0000\uE4A8" + // 23115 - 23119
-                "\u0000\uE4A9\u8EA2\uC2FA\u8EA2\uC2FC\u8EA2\uC2FB\u0000\u0000" + // 23120 - 23124
-                "\u8EA2\uCABE\u0000\u0000\u8EA2\uCABD\u0000\uE8F0\u8EA2\uCABF" + // 23125 - 23129
-                "\u0000\u0000\u8EA2\uD0D3\u0000\uECF6\u0000\u0000\u0000\uF0DD" + // 23130 - 23134
-                "\u0000\u0000\u0000\uF3E1\u0000\uF6C3\u0000\uF3E2\u0000\u0000" + // 23135 - 23139
-                "\u0000\uC5C2\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA4A8" + // 23140 - 23144
-                "\u0000\u0000\u0000\u0000\u8EA2\uA6F1\u0000\uCDD3\u0000\uCDD2" + // 23145 - 23149
-                "\u8EA2\uCAB3\u0000\u0000\u0000\uECE8\u8EA2\uD0C2\u0000\u0000" + // 23150 - 23154
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uD0C7" + // 23155 - 23159
-                "\u0000\uF0D7\u8EA2\uD0C1\u8EA2\uD7AE\u8EA2\uD0D0\u0000\uECF0" + // 23160 - 23164
-                "\u0000\u0000\u0000\uECEE\u0000\uF0D5\u8EA2\uD0CD\u8EA2\uD0C9" + // 23165 - 23169
-                "\u0000\uECF4\u0000\u0000\u8EA2\uD7A5\u0000\u0000\u0000\u0000" + // 23170 - 23174
-                "\u0000\u0000\u0000\uECF2\u8EA2\uD0C8\u0000\u0000\u8EA2\uD7A3" + // 23175 - 23179
-                "\u0000\u0000\u8EA2\uD0CC\u0000\u0000\u8EA2\uD0CF\u8EA2\uD0C6" + // 23180 - 23184
-                "\u0000\u0000\u0000\uECF3\u0000\u0000\u0000\u0000\u0000\uECED" + // 23185 - 23189
-                "\u8EA2\uD7A4\u0000\uF0D6\u8EA2\uD0CE\u0000\uECEF\u0000\uECF1" + // 23190 - 23194
-                "\u8EA2\uD0CB\u0000\uECF5\u8EA2\uD0CA\u8EA2\uD0C5\u8EA2\uD0C4" + // 23195 - 23199
-                "\u0000\uF0D4\u8EA2\uD0D2\u8EA2\uD7A7\u8EA2\uDCEB\u0000\uF0D9" + // 23200 - 23204
-                "\u0000\u0000\u8EA2\uD7AD\u0000\u0000\u8EA2\uD7AB\u0000\u0000" + // 23205 - 23209
-                "\u8EA2\uDCEC\u0000\u0000\u0000\uF0DA\u8EA2\uD7AC\u8EA2\uC2F7" + // 23210 - 23214
-                "\u8EA2\uCAAB\u0000\u0000\u0000\u0000\u0000\uE3FE\u8EA2\uC2EF" + // 23215 - 23219
-                "\u8EA2\uC2F3\u0000\uE8E6\u0000\uE3F5\u8EA2\uC2EC\u8EA2\uC2ED" + // 23220 - 23224
-                "\u0000\uE8E8\u0000\uE3FD\u0000\uE4A1\u0000\uE3FC\u8EA2\uC2F5" + // 23225 - 23229
-                "\u0000\u0000\u0000\u0000\u8EA2\uCAAF\u8EA2\uCAB0\u8EA2\uCAB5" + // 23230 - 23234
-                "\u0000\uECE7\u8EA2\uCABC\u0000\u0000\u0000\uE8EE\u0000\u0000" + // 23235 - 23239
-                "\u0000\uE8ED\u8EA2\uCAB7\u0000\u0000\u0000\uECE6\u8EA2\uCAAC" + // 23240 - 23244
-                "\u0000\uE8EC\u0000\u0000\u8EA2\uCABB\u0000\uE8EA\u0000\uE8EB" + // 23245 - 23249
-                "\u0000\u0000\u8EA2\uCAB8\u8EA2\uD0D1\u0000\uECE4\u0000\uDFB5" + // 23250 - 23254
-                "\u0000\u0000\u8EA2\uCABA\u0000\uECEB\u8EA2\uCAB2\u0000\u0000" + // 23255 - 23259
-                "\u0000\uECE5\u0000\u0000\u0000\uECEA\u8EA2\uCAAD\u8EA2\uCAB1" + // 23260 - 23264
-                "\u8EA2\uCAAE\u8EA2\uCAB4\u0000\uE8EF\u0000\uECE3\u0000\uE8E9" + // 23265 - 23269
-                "\u0000\u0000\u8EA2\uD0C3\u8EA2\uCAB6\u0000\u0000\u0000\uECE9" + // 23270 - 23274
-                "\u0000\u0000\u0000\uECEC\u0000\u0000\u8EA2\uB8E6\u0000\u0000" + // 23275 - 23279
-                "\u8EA2\uB8ED\u0000\u0000\u0000\u0000\u0000\uDDA6\u8EA2\uB8FB" + // 23280 - 23284
-                "\u8EA2\uB8F6\u0000\uDDA1\u0000\uDCFD\u8EA2\uB8F2\u8EA2\uB8EE" + // 23285 - 23289
-                "\u8EA2\uB8E0\u0000\uDCF4\u8EA2\uB8E5\u8EA2\uB8DD\u0000\u0000" + // 23290 - 23294
-                "\u0000\uDCFC\u0000\uDCFE\u8EA2\uB8EA\u8EA2\uB8E7\u0000\uDCF9" + // 23295 - 23299
-                "\u8EA2\uB8F7\u0000\uDCF6\u8EA2\uB8E8\u8EA2\uBFEA\u8EA2\uB8F0" + // 23300 - 23304
-                "\u0000\u0000\u8EA2\uB8EF\u0000\uDCF5\u0000\u0000\u0000\uDDA2" + // 23305 - 23309
-                "\u0000\u0000\u0000\uDCF8\u8EA2\uB8DE\u8EA2\uB8E3\u8EA2\uB8F4" + // 23310 - 23314
-                "\u8EA2\uB8FA\u0000\uDDA7\u8EA2\uB8DF\u8EA2\uB8EB\u8EA2\uB8F1" + // 23315 - 23319
-                "\u0000\uDCFB\u0000\u0000\u0000\u0000\u8EA2\uB8FC\u8EA2\uB8F5" + // 23320 - 23324
-                "\u8EA2\uB8F8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 23325 - 23329
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 23330 - 23334
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDCFA\u0000\u0000" + // 23335 - 23339
-                "\u8EA2\uBFD1\u0000\uDFBA\u0000\uE3FA\u0000\u0000\u8EA2\uBBED" + // 23340 - 23344
-                "\u8EA2\uBBF2\u8EA2\uBBE6\u0000\uE4A6\u0000\u0000\u0000\uE3FB" + // 23345 - 23349
-                "\u0000\uDFB9\u8EA2\uBBE4\u8EA2\uBBF3\u0000\u0000\u0000\uE4A5" + // 23350 - 23354
-                "\u0000\uDFB7\u0000\uE3F4\u8EA2\uBBF0\u0000\u0000\u0000\uDFBB" + // 23355 - 23359
-                "\u8EA2\uBBE8\u8EA2\uBBE2\u0000\uDFB1\u8EA2\uBBE5\u0000\u0000" + // 23360 - 23364
-                "\u8EA2\uBBEE\u0000\u0000\u0000\uE3F3\u0000\uE3F8\u0000\uDFAE" + // 23365 - 23369
-                "\u8EA2\uBBEF\u0000\u0000\u0000\uE3F6\u0000\u0000\u0000\u0000" + // 23370 - 23374
-                "\u0000\u0000\u0000\uDFAF\u0000\u0000\u0000\u0000\u0000\u0000" + // 23375 - 23379
-                "\u0000\uE4A4\u8EA2\uCAAA\u8EA2\uC2F6\u0000\u0000\u8EA2\uC2EE" + // 23380 - 23384
-                "\u8EA2\uCAA9\u0000\u0000\u8EA2\uC2F2\u8EA2\uC2F4\u0000\u0000" + // 23385 - 23389
-                "\u0000\u0000\u8EA2\uC2F1\u0000\u0000\u0000\uE4A3\u0000\u0000" + // 23390 - 23394
-                "\u8EA2\uC2F0\u0000\uE4A7\u0000\u0000\u0000\u0000\u0000\u0000" + // 23395 - 23399
-                "\u8EA2\uCAB9\u0000\u0000\u0000\u0000\u0000\uE4A2\u0000\uE8E7" + // 23400 - 23404
-                "\u8EA2\uB5C9\u8EA2\uBBEC\u0000\u0000\u8EA2\uB5C7\u8EA2\uBBE1" + // 23405 - 23409
-                "\u0000\uDAC5\u0000\uDACC\u0000\uDAD0\u8EA2\uB5C1\u8EA2\uBBDC" + // 23410 - 23414
-                "\u8EA2\uB5C5\u0000\uDAC1\u8EA2\uBBDE\u8EA2\uB5C8\u8EA2\uBBE0" + // 23415 - 23419
-                "\u8EA2\uB5BD\u0000\u0000\u0000\uDFA9\u0000\u0000\u8EA2\uB5BB" + // 23420 - 23424
-                "\u8EA2\uB5BC\u0000\uDACB\u0000\u0000\u0000\u0000\u0000\uDACA" + // 23425 - 23429
-                "\u8EA2\uB5BF\u0000\uDACF\u8EA2\uB5C3\u0000\uDAC8\u8EA2\uB5C0" + // 23430 - 23434
-                "\u0000\u0000\u0000\uDACD\u0000\uDFAD\u0000\uDFAA\u8EA2\uBBDF" + // 23435 - 23439
-                "\u0000\u0000\u8EA2\uB5BE\u0000\u0000\u0000\uDAC3\u0000\u0000" + // 23440 - 23444
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 23445 - 23449
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDFB2\u0000\uDFB6" + // 23450 - 23454
-                "\u8EA2\uBBE3\u0000\uE3F7\u0000\uDFB4\u8EA2\uBBE7\u0000\uDFB8" + // 23455 - 23459
-                "\u8EA2\uC2EB\u8EA2\uBBE9\u0000\uE3F9\u0000\uDFB0\u0000\uDFB3" + // 23460 - 23464
-                "\u8EA2\uBBEA\u0000\u0000\u8EA2\uBBEB\u8EA2\uBBF1\u8EA2\uAFA6" + // 23465 - 23469
-                "\u8EA2\uAFA8\u0000\u0000\u8EA2\uAFAA\u0000\uD5CA\u0000\uD5D0" + // 23470 - 23474
-                "\u8EA2\uB5B7\u8EA2\uAFAE\u8EA2\uAFA5\u0000\uDABE\u8EA2\uB5B5" + // 23475 - 23479
-                "\u0000\u0000\u0000\uD5CF\u0000\uD5CD\u8EA2\uAFB0\u0000\u0000" + // 23480 - 23484
-                "\u8EA2\uB5B6\u0000\u0000\u8EA2\uAFA7\u0000\u0000\u0000\uD5CE" + // 23485 - 23489
-                "\u8EA2\uAFAB\u0000\uD5D1\u8EA2\uAFAD\u0000\u0000\u0000\u0000" + // 23490 - 23494
-                "\u0000\uD5CC\u8EA2\uAFAC\u8EA2\uAFAF\u8EA2\uAFA9\u0000\u0000" + // 23495 - 23499
-                "\u0000\uD5CB\u0000\uDABF\u0000\u0000\u8EA2\uAFA4\u0000\uDABD" + // 23500 - 23504
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDAC0" + // 23505 - 23509
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 23510 - 23514
-                "\u0000\u0000\u0000\u0000\u8EA2\uB5B9\u8EA2\uB5C2\u0000\uDFAB" + // 23515 - 23519
-                "\u0000\u0000\u0000\uDAC2\u0000\uDAC7\u0000\uDFAC\u8EA2\uB5C4" + // 23520 - 23524
-                "\u0000\uDACE\u8EA2\uBBDD\u8EA2\uB5BA\u0000\uDAC6\u0000\uDAC9" + // 23525 - 23529
-                "\u0000\uDAC4\u8EA2\uB5B8\u8EA2\uB5C6\u8EA2\uAACB\u8EA2\uAFA3" + // 23530 - 23534
-                "\u8EA2\uAACC\u0000\uD1B2\u8EA2\uAACF\u8EA2\uAAC5\u0000\uD1B1" + // 23535 - 23539
-                "\u8EA2\uAAC7\u0000\u0000\u8EA2\uAAC8\u0000\u0000\u0000\u0000" + // 23540 - 23544
-                "\u8EA2\uAACA\u0000\uD1AD\u0000\u0000\u0000\u0000\u0000\uD5C5" + // 23545 - 23549
-                "\u0000\u0000\u0000\u0000\u8EA2\uAAC6\u8EA2\uAAC2\u0000\uD5C6" + // 23550 - 23554
-                "\u0000\u0000\u0000\u0000\u8EA2\uAAD0\u0000\uD5C2\u8EA2\uAFA1" + // 23555 - 23559
-                "\u8EA2\uAAC9\u0000\u0000\u8EA2\uAEFE\u8EA2\uAAC4\u8EA2\uAACD" + // 23560 - 23564
-                "\u0000\u0000\u0000\u0000\u0000\uD1B0\u0000\uD5C3\u0000\uD1B6" + // 23565 - 23569
-                "\u0000\uD5C4\u8EA2\uAAD1\u8EA2\uAFA2\u0000\uD1AF\u0000\uD5C8" + // 23570 - 23574
-                "\u0000\uD1B5\u0000\uD1B4\u0000\uD1B3\u0000\uD5C7\u8EA2\uAAD2" + // 23575 - 23579
-                "\u0000\uD5C9\u0000\uD1AE\u0000\u0000\u8EA2\uAAC3\u0000\u0000" + // 23580 - 23584
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 23585 - 23589
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 23590 - 23594
-                "\u0000\u0000\u0000\uDABC\u8EA2\uA4A6\u0000\u0000\u0000\u0000" + // 23595 - 23599
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 23600 - 23604
-                "\u0000\u0000\u8EA2\uA6EE\u8EA2\uA6E1\u8EA2\uA6DF\u8EA2\uA6ED" + // 23605 - 23609
-                "\u8EA2\uA6E8\u0000\uD1AB\u0000\uCDC4\u8EA2\uA6E9\u8EA2\uA6EC" + // 23610 - 23614
-                "\u0000\uD1A7\u8EA2\uA6EB\u0000\uCDC5\u0000\uCDCA\u0000\uCDC8" + // 23615 - 23619
-                "\u8EA2\uA6E2\u0000\u0000\u8EA2\uA6DD\u8EA2\uA6E4\u0000\uCDCF" + // 23620 - 23624
-                "\u8EA2\uA6EF\u0000\uD1A8\u8EA2\uA6E5\u0000\u0000\u0000\uD1A9" + // 23625 - 23629
-                "\u0000\uCDCB\u8EA2\uA6E7\u0000\u0000\u8EA2\uAACE\u0000\uD1AA" + // 23630 - 23634
-                "\u8EA2\uA6DC\u0000\uCDCC\u0000\uD1AC\u0000\uCDCD\u0000\uCDC9" + // 23635 - 23639
-                "\u0000\uCDCE\u8EA2\uA6E6\u8EA2\uA6DB\u8EA2\uA6EA\u0000\uCDC6" + // 23640 - 23644
-                "\u0000\u0000\u0000\u0000\u8EA2\uA6DE\u8EA2\uA6E3\u8EA2\uA6E0" + // 23645 - 23649
-                "\u0000\uCDC7\u0000\u0000\u8EA2\uAAC0\u0000\u0000\u8EA2\uAAC1" + // 23650 - 23654
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 23655 - 23659
-                "\u0000\u0000\u8EA2\uA4BE\u0000\uCADF\u8EA2\uA4BF\u8EA2\uA4C3" + // 23660 - 23664
-                "\u0000\uCADE\u0000\u0000\u8EA2\uA4C7\u8EA2\uA4C2\u8EA2\uA4C5" + // 23665 - 23669
-                "\u0000\uCAD7\u0000\uCAD8\u0000\uCAD9\u0000\uCADA\u0000\u0000" + // 23670 - 23674
-                "\u0000\uCAE1\u0000\u0000\u8EA2\uA4C1\u0000\uCADC\u0000\uCAE2" + // 23675 - 23679
-                "\u0000\u0000\u8EA2\uA4C0\u8EA2\uA4C6\u0000\u0000\u0000\uCADB" + // 23680 - 23684
-                "\u8EA2\uA4C4\u0000\uCADD\u0000\uCAD6\u0000\uCAE0\u0000\u0000" + // 23685 - 23689
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 23690 - 23694
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCEBA\u0000\u0000" + // 23695 - 23699
-                "\u8EA2\uA7B5\u0000\uCEA6\u0000\u0000\u0000\uCEB0\u0000\uCEB1" + // 23700 - 23704
-                "\u0000\uCEA9\u0000\uCEBB\u0000\uCEAB\u8EA2\uA7BD\u0000\uCEB6" + // 23705 - 23709
-                "\u8EA2\uA7B8\u0000\uCEAC\u8EA2\uA7C7\u8EA2\uA7C8\u8EA2\uA7C0" + // 23710 - 23714
-                "\u8EA2\uA7B9\u0000\uCEB9\u8EA2\uA7C5\u0000\uCEB4\u0000\uCEB2" + // 23715 - 23719
-                "\u8EA2\uE8F4\u8EA2\uE8F5\u0000\u0000\u0000\uC5C0\u0000\u0000" + // 23720 - 23724
-                "\u0000\uC6D2\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA1DC" + // 23725 - 23729
-                "\u0000\u0000\u0000\u0000\u0000\uCAB4\u0000\uCAB6\u0000\u0000" + // 23730 - 23734
-                "\u8EA2\uA2C2\u8EA2\uA3F8\u8EA2\uA3F7\u8EA2\uA3F6\u0000\u0000" + // 23735 - 23739
-                "\u8EA2\uA2C1\u8EA2\uA2C0\u0000\uC8A5\u0000\uCAB5\u0000\uCAB3" + // 23740 - 23744
-                "\u0000\uC8A4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDBF" + // 23745 - 23749
-                "\u8EA2\uA6D9\u0000\u0000\u0000\uCDC0\u8EA2\uA3FD\u0000\u0000" + // 23750 - 23754
-                "\u8EA2\uA4A1\u8EA2\uA3FE\u8EA2\uA6DA\u0000\u0000\u0000\u0000" + // 23755 - 23759
-                "\u8EA2\uA3FA\u0000\u0000\u0000\uCABA\u0000\uCAB8\u0000\u0000" + // 23760 - 23764
-                "\u8EA2\uA3F9\u8EA2\uA3FB\u8EA2\uA4A3\u0000\u0000\u0000\uCAB7" + // 23765 - 23769
-                "\u0000\u0000\u8EA2\uA3FC\u8EA2\uA4A7\u0000\uCDC2\u0000\u0000" + // 23770 - 23774
-                "\u8EA2\uA4A4\u0000\uCAB9\u0000\u0000\u8EA2\uA4A2\u8EA2\uA4A5" + // 23775 - 23779
-                "\u0000\u0000\u0000\uCDC1\u0000\u0000\u0000\uCDC3\u0000\uCDBB" + // 23780 - 23784
-                "\u0000\uCDBC\u8EA2\uA6D6\u0000\u0000\u0000\u0000\u0000\uD1A1" + // 23785 - 23789
-                "\u8EA2\uAABF\u0000\uD1A4\u0000\uD0FE\u0000\uD1A6\u0000\uD1A2" + // 23790 - 23794
-                "\u0000\uD1A3\u0000\uD1A5\u0000\u0000\u0000\u0000\u0000\u0000" + // 23795 - 23799
-                "\u0000\uD5C1\u0000\uD5C0\u0000\uD5BF\u0000\u0000\u0000\u0000" + // 23800 - 23804
-                "\u0000\u0000\u8EA2\uB5B3\u0000\uDAB5\u0000\uDAB8\u0000\uDAB6" + // 23805 - 23809
-                "\u0000\u0000\u8EA2\uB5B2\u0000\uDABB\u0000\u0000\u0000\uDAB7" + // 23810 - 23814
-                "\u8EA2\uB5B4\u0000\uDABA\u0000\uDAB9\u0000\u0000\u0000\u0000" + // 23815 - 23819
-                "\u0000\u0000\u8EA2\uBBDA\u8EA2\uBBD9\u0000\u0000\u0000\uDFA8" + // 23820 - 23824
-                "\u0000\uDFA6\u0000\uDFA7\u8EA2\uBBDB\u0000\uE3F1\u8EA2\uC2EA" + // 23825 - 23829
-                "\u0000\uE3F2\u8EA2\uC2E9\u0000\u0000\u0000\u0000\u8EA2\uD0C0" + // 23830 - 23834
-                "\u0000\u0000\u0000\u0000\u0000\uECE2\u8EA2\uCAA8\u0000\uECE1" + // 23835 - 23839
-                "\u0000\u0000\u0000\uE8E5\u0000\u0000\u8EA2\uD7A2\u8EA2\uD7A1" + // 23840 - 23844
-                "\u0000\uF3DB\u8EA2\uDCE9\u8EA2\uE5CB\u8EA2\uC2E8\u0000\u0000" + // 23845 - 23849
-                "\u0000\u0000\u8EA2\uCAA6\u8EA2\uCAA5\u0000\u0000\u0000\uE8E3" + // 23850 - 23854
-                "\u0000\u0000\u0000\uECDF\u8EA2\uD0BF\u0000\uF0D3\u8EA2\uD6FE" + // 23855 - 23859
-                "\u0000\uF3DA\u0000\u0000\u0000\uFBDF\u8EA2\uEFA7\u0000\uA7D9" + // 23860 - 23864
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA6D5\u0000\u0000" + // 23865 - 23869
-                "\u8EA2\uAABE\u0000\uDAB1\u8EA2\uBBD8\u0000\uE3F0\u0000\u0000" + // 23870 - 23874
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF6C1\u0000\u0000" + // 23875 - 23879
-                "\u0000\u0000\u0000\uA7DA\u0000\uCAB0\u0000\u0000\u0000\uCAAF" + // 23880 - 23884
-                "\u0000\uD0FD\u0000\u0000\u8EA2\uAEFD\u0000\u0000\u0000\uDAB3" + // 23885 - 23889
-                "\u0000\uDDA9\u0000\uDAB4\u0000\uDAB2\u0000\uDFA5\u0000\u0000" + // 23890 - 23894
-                "\u8EA2\uCAA7\u0000\uE8E4\u0000\uECE0\u0000\u0000\u8EA2\uA1AC" + // 23895 - 23899
-                "\u8EA2\uA2BF\u0000\u0000\u8EA2\uA3F5\u0000\uCAB1\u8EA2\uA3F4" + // 23900 - 23904
-                "\u0000\uCAB2\u0000\u0000\u0000\u0000\u0000\uCDBE\u8EA2\uA6D8" + // 23905 - 23909
-                "\u8EA2\uA6D7\u0000\uCDBD\u8EA2\uA1DA\u0000\u0000\u8EA2\uA1DB" + // 23910 - 23914
-                "\u0000\u0000\u8EA2\uA2BC\u0000\u0000\u0000\u0000\u0000\uCAAA" + // 23915 - 23919
-                "\u8EA2\uA3F0\u8EA2\uA3EE\u0000\uCAAB\u8EA2\uA3ED\u8EA2\uA3EF" + // 23920 - 23924
-                "\u8EA2\uA3F1\u0000\u0000\u0000\uCAA9\u0000\u0000\u0000\u0000" + // 23925 - 23929
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDB5\u0000\uCDB6" + // 23930 - 23934
-                "\u0000\uCDB3\u0000\u0000\u0000\u0000\u0000\uCDB2\u8EA2\uAAB9" + // 23935 - 23939
-                "\u0000\uCDB4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD0F8" + // 23940 - 23944
-                "\u0000\u0000\u8EA2\uAAB8\u8EA2\uAABA\u8EA2\uAAB7\u8EA2\uAABB" + // 23945 - 23949
-                "\u0000\uD0F9\u0000\uD5BD\u8EA2\uAEF7\u0000\u0000\u8EA2\uAEF9" + // 23950 - 23954
-                "\u0000\uD5BB\u8EA2\uAEFA\u0000\uD5BC\u8EA2\uAEF8\u0000\u0000" + // 23955 - 23959
-                "\u8EA2\uAAB6\u8EA2\uB5AB\u8EA2\uB5AE\u8EA2\uB5AF\u8EA2\uB5AC" + // 23960 - 23964
-                "\u0000\uDAAD\u0000\uDAAC\u0000\uDAAA\u0000\uDAAB\u8EA2\uB5AD" + // 23965 - 23969
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDAAE" + // 23970 - 23974
-                "\u0000\u0000\u0000\uE5DB\u8EA2\uC5DA\u0000\u0000\u0000\u0000" + // 23975 - 23979
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uCCC8\u0000\u0000" + // 23980 - 23984
-                "\u8EA2\uCCC1\u8EA2\uCCC2\u0000\u0000\u0000\uE9FE\u0000\uE9FC" + // 23985 - 23989
-                "\u0000\uE9FD\u8EA2\uCCCA\u0000\u0000\u8EA2\uCCC9\u8EA2\uCCC6" + // 23990 - 23994
-                "\u8EA2\uCCC5\u8EA2\uCCC4\u8EA2\uCCC3\u8EA2\uCCC7\u8EA2\uCCC0" + // 23995 - 23999
-                "\u0000\u0000\u8EA2\uD2D3\u8EA2\uD2D8\u8EA2\uD2D6\u0000\u0000" + // 24000 - 24004
-                "\u0000\u0000\u0000\u0000\u8EA2\uD2D5\u8EA2\uD2D4\u8EA2\uD2D7" + // 24005 - 24009
-                "\u0000\u0000\u8EA2\uD8F8\u0000\u0000\u0000\uF1D7\u0000\uF4D2" + // 24010 - 24014
-                "\u8EA2\uDDFB\u0000\u0000\u0000\uF4D3\u8EA2\uDDFA\u8EA2\uE2CB" + // 24015 - 24019
-                "\u8EA2\uE2CA\u0000\uF6F1\u0000\u0000\u8EA2\uE6AF\u0000\uF8D6" + // 24020 - 24024
-                "\u8EA2\uE9CE\u0000\uFBEB\u8EA2\uEDE5\u0000\u0000\u8EA2\uF0C5" + // 24025 - 24029
-                "\u8EA2\uF0C4\u8EA2\uA1E7\u0000\uD2ED\u0000\uD2EE\u8EA2\uB7E6" + // 24030 - 24034
-                "\u0000\u0000\u0000\uE5DD\u0000\uC6FD\u0000\uCBB5\u0000\uDEFB" + // 24035 - 24039
-                "\u8EA2\uBBD7\u0000\u0000\u0000\uDEFC\u8EA2\uBBD6\u0000\uDEF9" + // 24040 - 24044
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC2E0" + // 24045 - 24049
-                "\u8EA2\uC2E2\u0000\uE3EB\u8EA2\uC2E1\u8EA2\uC2DF\u8EA2\uC2DE" + // 24050 - 24054
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC9F9\u0000\uE8DF" + // 24055 - 24059
-                "\u0000\uE8DD\u0000\u0000\u0000\uE8DE\u8EA2\uC9F7\u8EA2\uC9F8" + // 24060 - 24064
-                "\u0000\u0000\u0000\uE8DB\u8EA2\uD0BA\u8EA2\uD0B8\u0000\u0000" + // 24065 - 24069
-                "\u0000\uECD7\u8EA2\uD0B9\u0000\uECD8\u0000\uECD6\u0000\uE8DC" + // 24070 - 24074
-                "\u0000\u0000\u0000\u0000\u8EA2\uD6F7\u8EA2\uD6F5\u8EA2\uD6F6" + // 24075 - 24079
-                "\u8EA2\uD0B7\u8EA2\uDCE8\u0000\uF3D9\u8EA2\uDCE7\u8EA2\uE1D1" + // 24080 - 24084
-                "\u8EA2\uE1D2\u8EA2\uD6F8\u8EA2\uE5CA\u0000\u0000\u0000\uC4DB" + // 24085 - 24089
-                "\u0000\uC6CD\u0000\uC8A1\u8EA2\uA2BB\u0000\uC7FE\u0000\u0000" + // 24090 - 24094
-                "\u0000\uCDB1\u0000\uE3EC\u0000\uA7D3\u0000\uC5BC\u0000\uC6CE" + // 24095 - 24099
-                "\u0000\uD0F7\u0000\uDEFD\u0000\uA7D4\u8EA2\uE1D0\u0000\u0000" + // 24100 - 24104
-                "\u8EA2\uE4BE\u8EA2\uE5C9\u0000\u0000\u0000\u0000\u8EA2\uE8F0" + // 24105 - 24109
-                "\u8EA2\uE8F1\u0000\u0000\u0000\uF9EB\u0000\u0000\u8EA2\uEBD7" + // 24110 - 24114
-                "\u0000\u0000\u0000\uFAE9\u0000\u0000\u8EA2\uEBD8\u0000\u0000" + // 24115 - 24119
-                "\u8EA2\uEDCC\u0000\uFBDE\u0000\u0000\u0000\uFBDD\u8EA2\uEDCB" + // 24120 - 24124
-                "\u0000\uFCB5\u0000\u0000\u8EA2\uEFA5\u0000\u0000\u0000\u0000" + // 24125 - 24129
-                "\u0000\uA7CE\u0000\u0000\u0000\uC4D5\u0000\uC7FC\u8EA2\uA2BA" + // 24130 - 24134
-                "\u8EA2\uA3EA\u0000\uCBD6\u0000\uDAA5\u0000\u0000\u0000\u0000" + // 24135 - 24139
-                "\u0000\uC4D6\u0000\uC6CA\u0000\uC6C9\u0000\uC6C8\u0000\u0000" + // 24140 - 24144
-                "\u0000\u0000\u0000\uCAA7\u0000\u0000\u0000\u0000\u0000\uD5B8" + // 24145 - 24149
-                "\u0000\u0000\u8EA2\uC2DD\u0000\uC4D7\u0000\uC4D8\u0000\uC4D9" + // 24150 - 24154
-                "\u0000\uC5BB\u0000\u0000\u0000\u0000\u0000\uD0F3\u0000\u0000" + // 24155 - 24159
-                "\u8EA2\uAAB0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDEF8" + // 24160 - 24164
-                "\u0000\uC4DA\u8EA2\uA1BD\u8EA2\uC9E9\u8EA2\uC9ED\u8EA2\uC9E8" + // 24165 - 24169
-                "\u0000\u0000\u0000\uE8D9\u0000\u0000\u8EA2\uC9EB\u0000\uE8DA" + // 24170 - 24174
-                "\u8EA2\uC9F1\u8EA2\uC9F0\u8EA2\uC9EF\u0000\u0000\u0000\u0000" + // 24175 - 24179
-                "\u8EA2\uC9F4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24180 - 24184
-                "\u8EA2\uD0AE\u8EA2\uD0B0\u0000\uECD5\u8EA2\uD0B1\u0000\u0000" + // 24185 - 24189
-                "\u8EA2\uD0AC\u0000\u0000\u8EA2\uD0AB\u8EA2\uD0B5\u0000\u0000" + // 24190 - 24194
-                "\u8EA2\uD0B3\u0000\uECD4\u8EA2\uD0B6\u8EA2\uD0AD\u8EA2\uD0B2" + // 24195 - 24199
-                "\u8EA2\uD0B4\u8EA2\uD0AF\u0000\u0000\u0000\u0000\u0000\u0000" + // 24200 - 24204
-                "\u0000\u0000\u8EA2\uD6EB\u8EA2\uD6F0\u8EA2\uD6EA\u8EA2\uD6EF" + // 24205 - 24209
-                "\u0000\u0000\u8EA2\uD6E8\u8EA2\uD6F2\u8EA2\uD6EE\u8EA2\uD6F3" + // 24210 - 24214
-                "\u8EA2\uD6ED\u8EA2\uD6E9\u8EA2\uD6F1\u0000\u0000\u8EA2\uD6F4" + // 24215 - 24219
-                "\u8EA2\uD6EC\u0000\u0000\u8EA2\uDCE6\u0000\uF3D8\u0000\u0000" + // 24220 - 24224
-                "\u0000\uF3D6\u0000\u0000\u0000\uF3D5\u0000\uF3D7\u0000\u0000" + // 24225 - 24229
-                "\u0000\u0000\u0000\uA3A4\u0000\uA3A5\u0000\uA3A6\u0000\uA3A7" + // 24230 - 24234
-                "\u0000\uA3A8\u0000\uA3A9\u0000\uA3AA\u0000\uA3AB\u0000\uA3B2" + // 24235 - 24239
-                "\u0000\uA3B1\u0000\uA3B0\u0000\uA3AF\u0000\uA3AE\u0000\uA3AD" + // 24240 - 24244
-                "\u0000\uA3AC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24245 - 24249
-                "\u0000\uA3B8\u0000\uA3BB\u0000\u0000\u0000\u0000\u0000\u0000" + // 24250 - 24254
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24255 - 24259
-                "\u0000\u0000\u0000\u0000\u0000\uA1FC\u0000\uA1FB\u0000\u0000" + // 24260 - 24264
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24265 - 24269
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24270 - 24274
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24275 - 24279
-                "\u0000\uA1F5\u0000\uA1F4\u0000\u0000\u0000\u0000\u0000\u0000" + // 24280 - 24284
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24285 - 24289
-                "\u0000\uA1FE\u0000\uA1FD\u0000\u0000\u0000\u0000\u8EA2\uAFFD" + // 24290 - 24294
-                "\u0000\u0000\u0000\uE5FE\u0000\uE1C8\u0000\uE5FD\u0000\uEACE" + // 24295 - 24299
-                "\u0000\u0000\u0000\uC8D8\u8EA2\uA1E8\u0000\uC8D9\u0000\uC8DA" + // 24300 - 24304
-                "\u0000\u0000\u0000\u0000\u8EA2\uA8CB\u8EA2\uA4F6\u0000\u0000" + // 24305 - 24309
-                "\u8EA2\uA4F7\u0000\uCBBA\u0000\u0000\u8EA2\uA4F4\u0000\uCBB9" + // 24310 - 24314
-                "\u0000\u0000\u0000\uCBBC\u8EA2\uA4F5\u0000\uCBBE\u0000\uCBBD" + // 24315 - 24319
-                "\u8EA2\uA4F8\u0000\uCBBB\u0000\u0000\u0000\u0000\u0000\u0000" + // 24320 - 24324
-                "\u0000\uCFB4\u0000\uCFB2\u8EA2\uA8CD\u0000\u0000\u0000\uCFB1" + // 24325 - 24329
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCFB6\u0000\uCFB8" + // 24330 - 24334
-                "\u0000\uCFB5\u0000\u0000\u8EA2\uA8D0\u8EA2\uA8CC\u0000\uCFB9" + // 24335 - 24339
-                "\u0000\u0000\u0000\uCFB3\u0000\uCBBF\u0000\u0000\u0000\uCFB7" + // 24340 - 24344
-                "\u8EA2\uA8CF\u0000\u0000\u0000\u0000\u8EA2\uA8CE\u0000\u0000" + // 24345 - 24349
-                "\u0000\uCFB0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24350 - 24354
-                "\u0000\u0000\u0000\uA2EA\u0000\u0000\u0000\uA2A2\u0000\u0000" + // 24355 - 24359
-                "\u0000\u0000\u0000\u0000\u0000\uA2EB\u0000\u0000\u0000\u0000" + // 24360 - 24364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24365 - 24369
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24370 - 24374
-                "\u8EAD\uA4C5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24375 - 24379
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24380 - 24384
-                "\u0000\u0000\u8EAD\uA4C6\u0000\u0000\u0000\u0000\u0000\u0000" + // 24385 - 24389
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24390 - 24394
-                "\u0000\u0000\u8EAD\uA1CA\u0000\u0000\u0000\u0000\u0000\u0000" + // 24395 - 24399
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24400 - 24404
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24405 - 24409
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24410 - 24414
-                "\u0000\u0000\u0000\u0000\u8EAD\uA1AF\u0000\u0000\u0000\u0000" + // 24415 - 24419
-                "\u0000\u0000\u0000\uA1B7\u0000\u0000\u0000\u0000\u0000\u0000" + // 24420 - 24424
-                "\u0000\uA1E4\u0000\uA1E5\u0000\u0000\u0000\u0000\u0000\uA1E6" + // 24425 - 24429
-                "\u0000\uA1E7\u0000\u0000\u0000\u0000\u8EAD\uA1CF\u8EAD\uA1D0" + // 24430 - 24434
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1AD\u0000\uA1AC" + // 24435 - 24439
-                "\u0000\uA1A6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24440 - 24444
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EAD\uA1CB" + // 24445 - 24449
-                "\u0000\u0000\u0000\uA1EB\u8EAD\uA1B3\u0000\u0000\u0000\uA1EA" + // 24450 - 24454
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24455 - 24459
-                "\u0000\uA1EF\u0000\u0000\u0000\u0000\u0000\uA2A3\u0000\u0000" + // 24460 - 24464
-                "\u0000\uF4D1\u8EA2\uDDF1\u0000\u0000\u8EA2\uDDF9\u8EA2\uDDF6" + // 24465 - 24469
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uE2C6\u0000\u0000" + // 24470 - 24474
-                "\u0000\u0000\u8EA2\uE2C3\u0000\u0000\u0000\uF6F0\u0000\u0000" + // 24475 - 24479
-                "\u8EA2\uE2C7\u8EA2\uE2C9\u8EA2\uE2C8\u8EA2\uE2C4\u8EA2\uE2C5" + // 24480 - 24484
-                "\u0000\u0000\u0000\u0000\u8EA2\uE6AD\u0000\u0000\u0000\uF8D5" + // 24485 - 24489
-                "\u0000\u0000\u8EA2\uE6AA\u8EA2\uE6AC\u8EA2\uE6A9\u8EA2\uE6AE" + // 24490 - 24494
-                "\u0000\u0000\u0000\u0000\u8EA2\uE6AB\u0000\u0000\u8EA2\uE9C9" + // 24495 - 24499
-                "\u8EA2\uE9CC\u8EA2\uE9C8\u0000\uF9FC\u8EA2\uE9CA\u8EA2\uE9CB" + // 24500 - 24504
-                "\u8EA2\uE9CD\u0000\uF9FD\u0000\uFAA1\u0000\uF9FE\u8EA2\uEBEF" + // 24505 - 24509
-                "\u0000\u0000\u8EA2\uEBF1\u0000\u0000\u8EA2\uEBF0\u0000\u0000" + // 24510 - 24514
-                "\u0000\u0000\u0000\u0000\u8EA2\uEDE4\u0000\u0000\u0000\u0000" + // 24515 - 24519
-                "\u8EA2\uF0C3\u8EA2\uF1AA\u0000\uC6FC\u0000\u0000\u0000\u0000" + // 24520 - 24524
-                "\u8EA2\uA4F2\u0000\uCFA3\u8EA2\uA8C3\u8EA2\uBBD4\u8EA2\uBBC0" + // 24525 - 24529
-                "\u8EA2\uBBCD\u8EA2\uBBBE\u0000\u0000\u8EA2\uBBD5\u0000\u0000" + // 24530 - 24534
-                "\u0000\uDEF7\u0000\u0000\u8EA2\uBBCF\u8EA2\uC2D5\u8EA2\uBBC1" + // 24535 - 24539
-                "\u0000\uDEF4\u0000\u0000\u8EA2\uBBC5\u0000\u0000\u0000\uDEF5" + // 24540 - 24544
-                "\u8EA2\uBBC4\u8EA2\uBBC9\u0000\u0000\u0000\u0000\u8EA2\uBBC6" + // 24545 - 24549
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uBBCC\u0000\u0000" + // 24550 - 24554
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC2D9\u0000\u0000" + // 24555 - 24559
-                "\u0000\u0000\u0000\u0000\u8EA2\uC2DC\u8EA2\uC2D4\u0000\u0000" + // 24560 - 24564
-                "\u8EA2\uC2D6\u0000\u0000\u8EA2\uC2DB\u8EA2\uC2DA\u0000\uE3E9" + // 24565 - 24569
-                "\u0000\u0000\u8EA2\uBBBF\u8EA2\uC2D8\u0000\u0000\u0000\u0000" + // 24570 - 24574
-                "\u0000\uE3EA\u0000\u0000\u8EA2\uC2D3\u8EA2\uC2D7\u0000\u0000" + // 24575 - 24579
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC9EE\u0000\u0000" + // 24580 - 24584
-                "\u8EA2\uC9F5\u8EA2\uC9EC\u0000\u0000\u8EA2\uC9F3\u8EA2\uC9EA" + // 24585 - 24589
-                "\u8EA2\uC9F2\u8EA2\uC9F6\u8EA2\uAEF3\u0000\uD5B6\u0000\u0000" + // 24590 - 24594
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9F7\u0000\uD9F6" + // 24595 - 24599
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uB4F8\u8EA2\uB4FC" + // 24600 - 24604
-                "\u8EA2\uB4FE\u0000\uD9F8\u8EA2\uB5A3\u0000\u0000\u0000\uD9FC" + // 24605 - 24609
-                "\u8EA2\uB5A5\u0000\u0000\u0000\uD9FE\u0000\u0000\u0000\uD9FA" + // 24610 - 24614
-                "\u0000\uDAA4\u0000\u0000\u0000\uDAA1\u8EA2\uB4FA\u0000\uD9F9" + // 24615 - 24619
-                "\u0000\u0000\u8EA2\uB4F9\u8EA2\uB4F7\u8EA2\uB5A7\u8EA2\uB4FB" + // 24620 - 24624
-                "\u0000\u0000\u0000\uD9FB\u8EA2\uB5A6\u0000\uDAA2\u8EA2\uB5A2" + // 24625 - 24629
-                "\u8EA2\uB5A1\u0000\uDAA3\u8EA2\uB4FD\u0000\uD9FD\u0000\u0000" + // 24630 - 24634
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uB5A8\u0000\u0000" + // 24635 - 24639
-                "\u8EA2\uB5A4\u8EA2\uBBCB\u8EA2\uBBD2\u8EA2\uBBC7\u0000\uDEF6" + // 24640 - 24644
-                "\u8EA2\uBBC3\u8EA2\uBBD3\u8EA2\uBBBD\u8EA2\uBBD0\u8EA2\uBBCE" + // 24645 - 24649
-                "\u8EA2\uBBC8\u0000\u0000\u8EA2\uBBD1\u8EA2\uBBCA\u0000\u0000" + // 24650 - 24654
-                "\u8EA2\uBBC2\u0000\uC9FD\u0000\uC9FE\u0000\u0000\u0000\u0000" + // 24655 - 24659
-                "\u8EA2\uA6BA\u0000\uCDA2\u0000\uCDA3\u8EA2\uA6BB\u0000\uCDA1" + // 24660 - 24664
-                "\u0000\u0000\u0000\u0000\u0000\uD0F0\u8EA2\uA9F9\u0000\uD0EF" + // 24665 - 24669
-                "\u0000\uD0ED\u0000\uD0EE\u0000\uD5AE\u0000\uD5AC\u0000\u0000" + // 24670 - 24674
-                "\u0000\u0000\u8EA2\uAEED\u0000\uD5AD\u8EA2\uAEEC\u0000\u0000" + // 24675 - 24679
-                "\u0000\uD5A2\u8EA2\uB4F6\u0000\u0000\u0000\u0000\u0000\uD9F4" + // 24680 - 24684
-                "\u0000\uD9F5\u0000\u0000\u0000\u0000\u0000\uD9F3\u0000\u0000" + // 24685 - 24689
-                "\u0000\uE8D8\u8EA2\uC9E7\u0000\uECD2\u0000\uECD3\u0000\u0000" + // 24690 - 24694
-                "\u8EA2\uD0AA\u0000\uF3D4\u8EA2\uE1CE\u8EA2\uE1CF\u0000\u0000" + // 24695 - 24699
-                "\u0000\uFAE8\u8EA2\uF0B6\u8EA2\uA1AB\u0000\uC5BA\u0000\u0000" + // 24700 - 24704
-                "\u0000\uC4D4\u0000\u0000\u8EA2\uA1D8\u8EA2\uA1D7\u0000\u0000" + // 24705 - 24709
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7FB\u8EA2\uA2B7" + // 24710 - 24714
-                "\u8EA2\uA2B8\u8EA2\uA2B6\u0000\u0000\u8EA2\uA2B9\u0000\u0000" + // 24715 - 24719
-                "\u0000\uD2DC\u0000\u0000\u8EA2\uACC3\u8EA2\uACC4\u8EA2\uACC5" + // 24720 - 24724
-                "\u0000\u0000\u0000\uD2E3\u8EA2\uACC2\u0000\uD2DF\u8EA2\uACC6" + // 24725 - 24729
-                "\u0000\uD2E0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24730 - 24734
-                "\u8EA2\uB1B2\u8EA2\uB1B6\u8EA2\uB1B4\u8EA2\uB1B3\u0000\u0000" + // 24735 - 24739
-                "\u8EA2\uB1B7\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uB1B8" + // 24740 - 24744
-                "\u8EA2\uB1B9\u8EA2\uB1B1\u0000\u0000\u8EA2\uB1B0\u0000\u0000" + // 24745 - 24749
-                "\u0000\uD6F8\u0000\uD6F9\u0000\u0000\u8EA2\uB1BA\u8EA2\uB1B5" + // 24750 - 24754
-                "\u0000\u0000\u8EA2\uB7D3\u0000\u0000\u8EA2\uB1BB\u0000\uD6FA" + // 24755 - 24759
-                "\u0000\uD6F7\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uB7CD" + // 24760 - 24764
-                "\u0000\u0000\u8EA2\uB7CC\u0000\u0000\u8EA2\uB7CE\u8EA2\uB7CF" + // 24765 - 24769
-                "\u8EA2\uB7D1\u8EA2\uB7D0\u8EA2\uB7D5\u0000\uDCBA\u0000\uDCB7" + // 24770 - 24774
-                "\u0000\uDCBB\u8EA2\uB7CB\u0000\uDCBC\u8EA2\uB7D4\u0000\uDCB9" + // 24775 - 24779
-                "\u8EA2\uB7D2\u0000\uDCB8\u0000\u0000\u0000\uE9F6\u0000\u0000" + // 24780 - 24784
-                "\u8EA2\uD2D0\u8EA2\uD2D1\u0000\uEDFC\u0000\u0000\u0000\u0000" + // 24785 - 24789
-                "\u8EA2\uD2CF\u8EA2\uD2D2\u0000\uEDFE\u0000\uEDFB\u8EA2\uD2CB" + // 24790 - 24794
-                "\u8EA2\uD2C8\u8EA2\uD2CD\u8EA2\uD2CA\u0000\uEEA4\u8EA2\uD2CC" + // 24795 - 24799
-                "\u0000\u0000\u0000\u0000\u8EA2\uD2CE\u0000\uEEA2\u0000\u0000" + // 24800 - 24804
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1D4\u8EA2\uD8F2" + // 24805 - 24809
-                "\u0000\u0000\u8EA2\uD8EC\u8EA2\uD8F0\u8EA2\uD8F6\u8EA2\uD8F7" + // 24810 - 24814
-                "\u8EA2\uD8F3\u8EA2\uD8F4\u8EA2\uD8F1\u0000\u0000\u8EA2\uD8EE" + // 24815 - 24819
-                "\u0000\u0000\u0000\uF1D6\u0000\uF1D3\u8EA2\uD8ED\u8EA2\uD8EF" + // 24820 - 24824
-                "\u0000\u0000\u0000\uF1D5\u8EA2\uD8F5\u0000\u0000\u0000\uF4D0" + // 24825 - 24829
-                "\u0000\u0000\u0000\u0000\u8EA2\uDDF5\u8EA2\uDDEF\u0000\uF4CF" + // 24830 - 24834
-                "\u0000\u0000\u0000\u0000\u0000\uF4CD\u0000\u0000\u8EA2\uDDF7" + // 24835 - 24839
-                "\u0000\uF4CE\u8EA2\uDDF2\u8EA2\uDDF3\u8EA2\uDDF0\u8EA2\uDDF8" + // 24840 - 24844
-                "\u8EA2\uDDF4\u8EA2\uB4F5\u8EA2\uB4F4\u0000\uD9ED\u0000\u0000" + // 24845 - 24849
-                "\u0000\uD9EC\u0000\uD9EB\u0000\uD9EF\u0000\uD9EA\u0000\u0000" + // 24850 - 24854
-                "\u0000\u0000\u8EA2\uBBB9\u8EA2\uBBB6\u0000\uDEEE\u8EA2\uBBB5" + // 24855 - 24859
-                "\u8EA2\uBBBA\u0000\u0000\u0000\uDEF0\u8EA2\uBBB8\u0000\uDEED" + // 24860 - 24864
-                "\u0000\uDEEF\u8EA2\uBBB7\u0000\u0000\u8EA2\uC2CE\u0000\u0000" + // 24865 - 24869
-                "\u8EA2\uC2CF\u8EA2\uC2D0\u0000\u0000\u0000\u0000\u0000\u0000" + // 24870 - 24874
-                "\u0000\u0000\u0000\uE8CE\u0000\uE8D6\u8EA2\uC9E5\u0000\uE8D0" + // 24875 - 24879
-                "\u0000\uE8D4\u8EA2\uC9E6\u0000\uE8D5\u0000\uE8D1\u0000\uE8D2" + // 24880 - 24884
-                "\u0000\uE8CF\u0000\uE8D3\u0000\uECD0\u8EA2\uBBB4\u0000\uECD1" + // 24885 - 24889
-                "\u0000\uECCF\u0000\u0000\u0000\uECCE\u8EA2\uD6E7\u0000\uF0D1" + // 24890 - 24894
-                "\u8EA2\uDCE4\u8EA2\uDCE5\u0000\u0000\u0000\u0000\u0000\uF8B1" + // 24895 - 24899
-                "\u0000\uF9EA\u0000\u0000\u0000\uC4D0\u0000\u0000\u0000\uC7F9" + // 24900 - 24904
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24905 - 24909
-                "\u0000\uDBB9\u0000\u0000\u8EA2\uBCE6\u8EA2\uBCFC\u8EA2\uBCF1" + // 24910 - 24914
-                "\u0000\uDFFB\u0000\u0000\u0000\uDFF6\u8EA2\uBCE0\u0000\uDFF7" + // 24915 - 24919
-                "\u8EA2\uBCF0\u0000\u0000\u8EA2\uBCE9\u8EA2\uBCF6\u0000\uDFF3" + // 24920 - 24924
-                "\u8EA2\uBCCE\u8EA2\uBCF8\u0000\uDFE9\u8EA2\uBCD6\u0000\uDFEC" + // 24925 - 24929
-                "\u0000\uDFEB\u0000\u0000\u0000\uDFFC\u0000\u0000\u8EA2\uBCD0" + // 24930 - 24934
-                "\u8EA2\uBCF2\u8EA2\uBCF3\u0000\uDFEE\u0000\uDFEA\u8EA2\uBCDE" + // 24935 - 24939
-                "\u0000\u0000\u0000\uDFF5\u8EA2\uBCD9\u0000\u0000\u8EA2\uBCF4" + // 24940 - 24944
-                "\u0000\uDFF1\u8EA2\uBCEC\u8EA2\uBCF9\u8EA2\uBCD3\u8EA2\uBCD8" + // 24945 - 24949
-                "\u8EA2\uBCD2\u0000\u0000\u0000\uDFF0\u8EA2\uBCE5\u8EA2\uC3E4" + // 24950 - 24954
-                "\u8EA2\uBCD4\u0000\uDFF4\u8EA2\uBCDD\u8EA2\uBCF5\u0000\uDFEF" + // 24955 - 24959
-                "\u8EA2\uBCDA\u8EA2\uBCD7\u8EA2\uBCE8\u0000\uDFF2\u0000\uDFE8" + // 24960 - 24964
-                "\u0000\uDFFE\u8EA2\uBCEB\u8EA2\uBCEA\u0000\u0000\u0000\u0000" + // 24965 - 24969
-                "\u8EAD\uA3C6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24970 - 24974
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24975 - 24979
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 24980 - 24984
-                "\u8EAD\uA3C0\u8EAD\uA3C1\u8EAD\uA3C2\u8EAD\uA3C3\u8EAD\uA3C4" + // 24985 - 24989
-                "\u8EAD\uA3C5\u8EAD\uA3C7\u8EAD\uA3C8\u8EAD\uA3C9\u8EAD\uA3CA" + // 24990 - 24994
-                "\u8EAD\uA3CB\u8EAD\uA3CC\u8EAD\uA3CD\u8EAD\uA3CE\u8EAD\uA3CF" + // 24995 - 24999
-                "\u8EAD\uA3D0\u8EAD\uA3D1\u8EAD\uA3D2\u8EAD\uA3D3\u8EAD\uA3D4" + // 25000 - 25004
-                "\u8EAD\uA3D5\u8EAD\uA3D6\u8EAD\uA3D7\u8EAD\uA3D8\u8EAD\uA3D9" + // 25005 - 25009
-                "\u8EAD\uA3DA\u8EAD\uA3DB\u8EAD\uA3DC\u8EAD\uA3DD\u8EAD\uA3DE" + // 25010 - 25014
-                "\u8EAD\uA3DF\u8EAD\uA3E0\u8EAD\uA3E1\u8EAD\uA3E2\u8EAD\uA3E3" + // 25015 - 25019
-                "\u8EAD\uA3E4\u8EAD\uA3E5\u8EAD\uA3E6\u8EAD\uA3E8\u8EAD\uA3E9" + // 25020 - 25024
-                "\u8EAD\uA3EA\u8EAD\uA3EB\u8EAD\uA3EC\u8EAD\uA3ED\u8EAD\uA3EE" + // 25025 - 25029
-                "\u8EAD\uA3EF\u8EAD\uA3F0\u8EAD\uA3F1\u0000\uA7C7\u8EA2\uA1D3" + // 25030 - 25034
-                "\u0000\u0000\u0000\uC6C6\u8EA2\uA1D4\u0000\uC7F7\u0000\u0000" + // 25035 - 25039
-                "\u0000\uC7F5\u0000\uC7F6\u0000\uC7F8\u0000\u0000\u0000\uC9FA" + // 25040 - 25044
-                "\u0000\uC9F9\u0000\u0000\u8EA2\uA3DC\u0000\uC9FB\u0000\u0000" + // 25045 - 25049
-                "\u0000\u0000\u8EA2\uA3DD\u8EA2\uA6B8\u0000\u0000\u8EA2\uA6B9" + // 25050 - 25054
-                "\u0000\u0000\u0000\uCCF8\u0000\uCCFA\u0000\uCCFC\u0000\uCCF9" + // 25055 - 25059
-                "\u0000\uCCFD\u0000\uCCFB\u0000\u0000\u0000\u0000\u0000\u0000" + // 25060 - 25064
-                "\u0000\u0000\u0000\u0000\u0000\uD0EA\u0000\uD0E7\u0000\uD0E9" + // 25065 - 25069
-                "\u0000\uD0EB\u0000\uD0E8\u8EA2\uAEE8\u8EA2\uA9F8\u0000\u0000" + // 25070 - 25074
-                "\u0000\u0000\u0000\u0000\u8EA2\uAEEA\u8EA2\uAEE9\u0000\uD5A7" + // 25075 - 25079
-                "\u0000\u0000\u0000\uD5A3\u0000\u0000\u0000\u0000\u0000\uD5A4" + // 25080 - 25084
-                "\u0000\uD5A6\u0000\uD5A8\u0000\uD5A5\u0000\u0000\u0000\uD5AA" + // 25085 - 25089
-                "\u0000\uD5A9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 25090 - 25094
-                "\u0000\u0000\u0000\uD9EE\u0000\uF9E7\u0000\u0000\u0000\u0000" + // 25095 - 25099
-                "\u0000\uF9E8\u0000\u0000\u8EA2\uE8EF\u0000\u0000\u8EA2\uEBD6" + // 25100 - 25104
-                "\u8EA2\uEBD5\u0000\u0000\u0000\u0000\u8EA2\uEDC9\u8EA2\uEDCA" + // 25105 - 25109
-                "\u8EA2\uEFA4\u8EA2\uF0B5\u0000\u0000\u0000\uC4CD\u0000\uC4CE" + // 25110 - 25114
-                "\u0000\u0000\u0000\uC4CF\u0000\uC5B6\u0000\uC6C5\u8EA2\uA2B3" + // 25115 - 25119
-                "\u0000\uC7F3\u0000\uC7F4\u0000\u0000\u0000\uC9F7\u0000\uC9F8" + // 25120 - 25124
-                "\u0000\uC9F6\u0000\uC9F5\u0000\u0000\u0000\uCCF5\u0000\u0000" + // 25125 - 25129
-                "\u0000\u0000\u8EA2\uA6B6\u0000\uCCF7\u0000\uCCF6\u8EA2\uA6B7" + // 25130 - 25134
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD0E6\u0000\u0000" + // 25135 - 25139
-                "\u0000\uD5A1\u8EA2\uAEE7\u0000\u0000\u8EA2\uB4F3\u0000\u0000" + // 25140 - 25144
-                "\u0000\uD9E9\u0000\uDEEC\u8EA2\uB4F2\u0000\uDEEB\u0000\u0000" + // 25145 - 25149
-                "\u0000\uE8CD\u0000\u0000\u8EA2\uC9E4\u0000\uF0D0\u0000\u0000" + // 25150 - 25154
-                "\u0000\uF3D2\u8EA2\uDCE3\u0000\u0000\u0000\uF9E9\u0000\u0000" + // 25155 - 25159
-                "\u0000\uFBDC\u8EA2\uC2C7\u0000\uE3E0\u0000\uE3E7\u0000\u0000" + // 25160 - 25164
-                "\u8EA2\uC2BB\u0000\u0000\u8EA2\uC2C5\u8EA2\uC2BA\u8EA2\uC2C3" + // 25165 - 25169
-                "\u0000\uE3E1\u8EA2\uC2C8\u8EA2\uC2BC\u0000\uE3E2\u8EA2\uC2CB" + // 25170 - 25174
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 25175 - 25179
-                "\u0000\u0000\u0000\u0000\u8EA2\uC9D5\u0000\uE8CA\u0000\uE8C9" + // 25180 - 25184
-                "\u0000\uE8CB\u8EA2\uC9E1\u8EA2\uC9D7\u8EA2\uC9DD\u8EA2\uC9D2" + // 25185 - 25189
-                "\u8EA2\uC9E0\u8EA2\uC9DF\u8EA2\uC9E3\u8EA2\uC9DC\u0000\uE8C6" + // 25190 - 25194
-                "\u8EA2\uC9DB\u0000\uE8CC\u0000\u0000\u8EA2\uC9D4\u0000\uE8C7" + // 25195 - 25199
-                "\u0000\u0000\u8EA2\uC9E2\u0000\uE8C8\u8EA2\uC9D6\u8EA2\uC9D9" + // 25200 - 25204
-                "\u8EA2\uC9DE\u8EA2\uC9D8\u8EA2\uC9D3\u0000\u0000\u0000\u0000" + // 25205 - 25209
-                "\u0000\u0000\u0000\u0000\u8EA2\uC9DA\u8EA2\uCFFC\u0000\uECCB" + // 25210 - 25214
-                "\u8EA2\uD0A1\u8EA2\uCFFE\u8EA2\uD0A3\u8EA2\uD0A5\u0000\u0000" + // 25215 - 25219
-                "\u0000\uECC9\u0000\u0000\u8EA2\uCFFD\u0000\u0000\u8EA2\uCFFB" + // 25220 - 25224
-                "\u0000\uD9E3\u0000\uD9DF\u8EA2\uB4F0\u8EA2\uB4E0\u8EA2\uB4E3" + // 25225 - 25229
-                "\u0000\u0000\u0000\uD9E7\u8EA2\uB4ED\u8EA2\uB4E5\u0000\uD9E0" + // 25230 - 25234
-                "\u0000\uD9E8\u0000\u0000\u8EA2\uB4EA\u8EA2\uB4E8\u0000\u0000" + // 25235 - 25239
-                "\u0000\u0000\u8EA2\uB4D9\u8EA2\uB4EE\u8EA2\uB4E2\u8EA2\uB4DD" + // 25240 - 25244
-                "\u0000\u0000\u8EA2\uB4D3\u8EA2\uB4EF\u8EA2\uB4DF\u8EA2\uB4D2" + // 25245 - 25249
-                "\u0000\u0000\u0000\uD9E6\u8EA2\uB4E4\u8EA2\uB4F1\u8EA2\uB4E1" + // 25250 - 25254
-                "\u8EA2\uB4D5\u8EA2\uB4DA\u8EA2\uB4D1\u0000\u0000\u0000\uD9E5" + // 25255 - 25259
-                "\u0000\u0000\u8EA2\uB4DE\u8EA2\uB4DB\u0000\uD9E1\u8EA2\uB4D4" + // 25260 - 25264
-                "\u0000\u0000\u8EA2\uB4EC\u0000\uD9E2\u0000\u0000\u8EA2\uB4DC" + // 25265 - 25269
-                "\u8EA2\uB4D8\u0000\u0000\u0000\u0000\u8EA2\uB4EB\u0000\u0000" + // 25270 - 25274
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 25275 - 25279
-                "\u0000\uDEE5\u8EA2\uBAFD\u0000\u0000\u8EA2\uBAFA\u8EA2\uBBAD" + // 25280 - 25284
-                "\u8EA2\uBBA1\u8EA2\uBBAE\u0000\u0000\u0000\uDEE7\u8EA2\uA9E6" + // 25285 - 25289
-                "\u0000\uD0E4\u0000\u0000\u0000\uD0DF\u0000\u0000\u0000\u0000" + // 25290 - 25294
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD4FE\u8EA2\uAEE4" + // 25295 - 25299
-                "\u0000\u0000\u0000\uD4FD\u0000\u0000\u0000\u0000\u8EA2\uAEE2" + // 25300 - 25304
-                "\u0000\u0000\u0000\uD4F2\u0000\u0000\u0000\uD4F7\u0000\u0000" + // 25305 - 25309
-                "\u8EA2\uAEE1\u8EA2\uAEDE\u8EA2\uAEE3\u0000\uD4F3\u8EA2\uAEDD" + // 25310 - 25314
-                "\u0000\u0000\u0000\uD4F6\u0000\uD4F4\u0000\u0000\u8EA2\uAEE5" + // 25315 - 25319
-                "\u0000\uD4F5\u0000\uD4F9\u0000\u0000\u0000\u0000\u0000\uD4FA" + // 25320 - 25324
-                "\u0000\u0000\u0000\uD4FC\u0000\u0000\u0000\u0000\u0000\u0000" + // 25325 - 25329
-                "\u0000\uD4FB\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uAEDF" + // 25330 - 25334
-                "\u8EA2\uAEE0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 25335 - 25339
-                "\u8EA2\uAEE6\u0000\u0000\u8EA2\uB4D7\u0000\uD9DE\u8EA2\uBBA6" + // 25340 - 25344
-                "\u8EA2\uB4D6\u8EA2\uB4E9\u0000\u0000\u0000\u0000\u0000\uD9E4" + // 25345 - 25349
-                "\u0000\u0000\u8EA2\uB4E7\u0000\u0000\u8EA2\uA4F1\u0000\uCBB0" + // 25350 - 25354
-                "\u0000\u0000\u0000\uCEFB\u0000\u0000\u0000\uD2D5\u0000\uD2D6" + // 25355 - 25359
-                "\u0000\uD2D7\u8EA2\uB7C9\u8EA2\uB1AE\u0000\uD6F2\u0000\u0000" + // 25360 - 25364
-                "\u0000\u0000\u0000\uDCB3\u8EA2\uB7C8\u0000\u0000\u0000\u0000" + // 25365 - 25369
-                "\u8EA2\uBEBC\u0000\uE0F7\u0000\u0000\u8EA2\uBEBB\u0000\uE0F6" + // 25370 - 25374
-                "\u0000\u0000\u0000\u0000\u8EA2\uC5BB\u0000\uEDF3\u8EA2\uD2C3" + // 25375 - 25379
-                "\u8EA2\uD2C0\u8EA2\uD2C1\u8EA2\uD2C2\u0000\u0000\u0000\u0000" + // 25380 - 25384
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uDDE4\u0000\u0000" + // 25385 - 25389
-                "\u8EA2\uE2BE\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uE9C0" + // 25390 - 25394
-                "\u8EA2\uE9BF\u0000\u0000\u8EA2\uEDE3\u0000\uC6F6\u8EA2\uA8B7" + // 25395 - 25399
-                "\u0000\uD6F3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0F8" + // 25400 - 25404
-                "\u8EA2\uC5BC\u0000\u0000\u0000\u0000\u8EA2\uCCA9\u0000\u0000" + // 25405 - 25409
-                "\u0000\uEDF4\u8EA2\uD8E0\u0000\u0000\u8EA2\uE2BF\u8EA2\uE9C1" + // 25410 - 25414
-                "\u0000\uC6F7\u8EA2\uA6B2\u8EA2\uA6AB\u0000\u0000\u8EA2\uA6AE" + // 25415 - 25419
-                "\u0000\u0000\u0000\uCCF4\u0000\uCCEB\u8EA2\uA6B5\u8EA2\uA6B3" + // 25420 - 25424
-                "\u0000\u0000\u0000\uCCF0\u0000\uCCEE\u8EA2\uA6AA\u0000\uCCED" + // 25425 - 25429
-                "\u8EA2\uA6A8\u8EA2\uA6A7\u0000\uCCEC\u0000\uCCEA\u0000\uCCF3" + // 25430 - 25434
-                "\u0000\uCCEF\u0000\uCCE7\u0000\u0000\u8EA2\uA6AF\u0000\u0000" + // 25435 - 25439
-                "\u0000\uD0DB\u0000\u0000\u0000\uD0E2\u8EA2\uA9F0\u0000\uD0DA" + // 25440 - 25444
-                "\u8EA2\uA9E8\u8EA2\uA9E4\u0000\u0000\u8EA2\uA9F4\u8EA2\uA9E3" + // 25445 - 25449
-                "\u0000\u0000\u0000\uD0DD\u8EA2\uA9ED\u0000\uD0E0\u0000\uD0E3" + // 25450 - 25454
-                "\u0000\u0000\u0000\uD0DE\u8EA2\uA9F1\u0000\uD0E1\u0000\u0000" + // 25455 - 25459
-                "\u0000\uD4F8\u8EA2\uA9F7\u8EA2\uA9E5\u0000\u0000\u0000\u0000" + // 25460 - 25464
-                "\u8EA2\uA9E7\u8EA2\uA9EE\u8EA2\uA9F2\u8EA2\uA9F6\u8EA2\uA9F3" + // 25465 - 25469
-                "\u8EA2\uA9EC\u8EA2\uA9EF\u0000\u0000\u0000\u0000\u8EA2\uA9E9" + // 25470 - 25474
-                "\u0000\uD0E5\u8EA2\uA9EB\u8EA2\uA9EA\u8EA2\uA9F5\u0000\uD0DC" + // 25475 - 25479
-                "\u8EA2\uA2AC\u0000\uC7F2\u0000\uC7F1\u0000\uC7EE\u0000\uC7EC" + // 25480 - 25484
-                "\u8EA2\uA2AE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 25485 - 25489
-                "\u0000\uC9F3\u0000\u0000\u0000\u0000\u0000\uC9F0\u8EA2\uA3D6" + // 25490 - 25494
-                "\u8EA2\uA3D9\u8EA2\uA3D8\u0000\u0000\u0000\uC9EA\u0000\uC9F2" + // 25495 - 25499
-                "\u0000\u0000\u0000\u0000\u0000\uC9EF\u8EA2\uA3D5\u8EA2\uA3D3" + // 25500 - 25504
-                "\u0000\uC9EE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC9E9" + // 25505 - 25509
-                "\u0000\uC9EC\u0000\u0000\u8EA2\uA3D4\u8EA2\uA3DB\u8EA2\uA3D7" + // 25510 - 25514
-                "\u0000\uC9ED\u0000\uC9F1\u0000\uC9F4\u8EA2\uA3D2\u8EA2\uA3DA" + // 25515 - 25519
-                "\u0000\uC9EB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 25520 - 25524
-                "\u0000\u0000\u0000\uCCE9\u0000\uCCF1\u0000\u0000\u8EA2\uA6B0" + // 25525 - 25529
-                "\u8EA2\uA6A9\u0000\uCCF2\u8EA2\uA6B4\u8EA2\uA6A5\u8EA2\uA6AC" + // 25530 - 25534
-                "\u0000\u0000\u0000\u0000\u0000\uCCE8\u8EA2\uA6A6\u0000\uCCE6" + // 25535 - 25539
-                "\u8EA2\uA6AD\u8EA2\uA6B1\u0000\uCCE5\u0000\u0000\u8EA2\uABF7" + // 25540 - 25544
-                "\u8EA2\uB0E0\u0000\u0000\u8EA2\uCBEB\u0000\u0000\u0000\uF4BB" + // 25545 - 25549
-                "\u0000\uC5DA\u0000\uCEEA\u8EA2\uABF8\u8EA2\uABF9\u8EA2\uBDEA" + // 25550 - 25554
-                "\u0000\uE0D6\u0000\u0000\u0000\u0000\u8EA2\uC4E8\u0000\u0000" + // 25555 - 25559
-                "\u0000\u0000\u0000\uE5A6\u8EA2\uCBEC\u0000\u0000\u0000\u0000" + // 25560 - 25564
-                "\u0000\uEDE2\u0000\u0000\u0000\uF8C9\u0000\uC5DB\u8EA2\uBDEB" + // 25565 - 25569
-                "\u0000\uC5DC\u0000\u0000\u0000\uC8CA\u8EA2\uA2E2\u0000\uC8C9" + // 25570 - 25574
-                "\u0000\uCBA8\u0000\uCBA7\u0000\uCBA6\u8EA2\uA4E0\u0000\u0000" + // 25575 - 25579
-                "\u0000\u0000\u0000\u0000\u0000\uCEEB\u0000\u0000\u0000\uCEEC" + // 25580 - 25584
-                "\u8EA2\uA7FB\u0000\u0000\u8EA2\uABFA\u0000\u0000\u8EA2\uABFD" + // 25585 - 25589
-                "\u0000\uD2BD\u8EA2\uABFB\u0000\u0000\u0000\uD2BC\u8EA2\uABFC" + // 25590 - 25594
-                "\u0000\uD2BE\u0000\u0000\u8EA2\uB0E3\u8EA2\uB0E2\u8EA2\uB0E1" + // 25595 - 25599
-                "\u0000\uD6D6\u0000\u0000\u8EA2\uB7A2\u8EA2\uB7A3\u0000\uDBF4" + // 25600 - 25604
-                "\u8EA2\uB7A1\u8EA2\uB7A4\u8EA2\uA3D1\u0000\u0000\u0000\u0000" + // 25605 - 25609
-                "\u0000\u0000\u0000\uCCE3\u8EA2\uA6A4\u0000\u0000\u0000\uCCE1" + // 25610 - 25614
-                "\u0000\uCCE2\u0000\uCCE0\u8EA2\uAEDC\u0000\u0000\u0000\u0000" + // 25615 - 25619
-                "\u0000\u0000\u0000\uD0D8\u0000\uD0D7\u0000\uD0D9\u0000\uD0D6" + // 25620 - 25624
-                "\u0000\u0000\u8EA2\uA9E2\u0000\uCCE4\u0000\uD0D5\u0000\u0000" + // 25625 - 25629
-                "\u0000\uD4EF\u0000\uD4F0\u0000\u0000\u0000\uD4F1\u0000\u0000" + // 25630 - 25634
-                "\u8EA2\uB4D0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDEE4" + // 25635 - 25639
-                "\u8EA2\uBAF6\u0000\uD9DD\u0000\u0000\u0000\u0000\u0000\u0000" + // 25640 - 25644
-                "\u0000\u0000\u0000\uE3DF\u0000\u0000\u0000\uE8C5\u0000\uE8C4" + // 25645 - 25649
-                "\u8EA2\uC9D1\u0000\u0000\u0000\uECC7\u0000\uF0CD\u0000\u0000" + // 25650 - 25654
-                "\u8EA2\uE1CC\u8EA2\uEDC8\u8EA2\uEFA3\u0000\uC4CC\u0000\uC6C3" + // 25655 - 25659
-                "\u0000\u0000\u0000\uC6C4\u8EA2\uA2B1\u0000\uC7ED\u0000\uC7F0" + // 25660 - 25664
-                "\u0000\u0000\u8EA2\uA2AF\u8EA2\uA2AD\u0000\uC7EF\u8EA2\uA2B0" + // 25665 - 25669
-                "\u8EA2\uA2B2\u0000\uECBF\u8EA2\uC9C2\u8EA2\uC9CB\u0000\uE8BA" + // 25670 - 25674
-                "\u0000\u0000\u0000\uE8BE\u8EA2\uC9C1\u8EA2\uC9C7\u8EA2\uC9CC" + // 25675 - 25679
-                "\u8EA2\uC9BD\u0000\uE8BC\u8EA2\uC9C5\u0000\u0000\u0000\u0000" + // 25680 - 25684
-                "\u8EA2\uC9C9\u8EA2\uC9CF\u8EA2\uC9BF\u8EA2\uC9C8\u0000\u0000" + // 25685 - 25689
-                "\u0000\uE8BB\u8EA2\uC9CE\u0000\u0000\u0000\u0000\u0000\u0000" + // 25690 - 25694
-                "\u8EA2\uC9C0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECC3" + // 25695 - 25699
-                "\u8EA2\uCFF2\u0000\uECC1\u0000\uECC0\u8EA2\uCFF4\u8EA2\uCFF9" + // 25700 - 25704
-                "\u0000\u0000\u8EA2\uCFF5\u0000\u0000\u8EA2\uCFF8\u0000\uECC6" + // 25705 - 25709
-                "\u0000\u0000\u0000\uF0AE\u0000\uECC5\u0000\u0000\u8EA2\uCFF1" + // 25710 - 25714
-                "\u8EA2\uCFF7\u0000\u0000\u0000\uECC4\u8EA2\uCFF6\u0000\u0000" + // 25715 - 25719
-                "\u8EA2\uCFF3\u0000\u0000\u0000\uECC2\u0000\u0000\u0000\u0000" + // 25720 - 25724
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uD6D7" + // 25725 - 25729
-                "\u0000\u0000\u8EA2\uD6D9\u8EA2\uD6D4\u0000\uF0CA\u8EA2\uD6D6" + // 25730 - 25734
-                "\u8EA2\uB4B6\u8EA2\uB4C9\u0000\uD9D8\u0000\u0000\u8EA2\uB4CF" + // 25735 - 25739
-                "\u0000\uD9D2\u0000\uD9D4\u8EA2\uB4BE\u8EA2\uB4B9\u0000\uD4ED" + // 25740 - 25744
-                "\u0000\uD9D3\u8EA2\uB4BB\u8EA2\uB4CA\u8EA2\uB4CE\u8EA2\uB4C5" + // 25745 - 25749
-                "\u0000\u0000\u8EA2\uB4C7\u0000\u0000\u0000\u0000\u0000\u0000" + // 25750 - 25754
-                "\u8EA2\uB4B1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 25755 - 25759
-                "\u8EA2\uBAE3\u0000\u0000\u8EA2\uBAEC\u8EA2\uBAEB\u0000\uDEE0" + // 25760 - 25764
-                "\u8EA2\uBAE4\u0000\u0000\u0000\uDEE1\u0000\uDEDF\u0000\u0000" + // 25765 - 25769
-                "\u8EA2\uBAE6\u0000\uDEDC\u8EA2\uBAEA\u0000\u0000\u8EA2\uBAE5" + // 25770 - 25774
-                "\u8EA2\uBAE7\u8EA2\uBAE1\u0000\uDEDA\u0000\u0000\u8EA2\uBAF4" + // 25775 - 25779
-                "\u8EA2\uBAF3\u8EA2\uBAF0\u0000\uDED9\u0000\uDEDD\u0000\uDEDE" + // 25780 - 25784
-                "\u8EA2\uAECD\u8EA2\uBAED\u0000\uDEDB\u0000\uD9D9\u8EA2\uBAEF" + // 25785 - 25789
-                "\u8EA2\uBAE2\u8EA2\uBAF2\u8EA2\uBAF1\u0000\u0000\u8EA2\uBAF5" + // 25790 - 25794
-                "\u0000\u0000\u8EA2\uC2B6\u0000\u0000\u8EA2\uBAEE\u8EA2\uA5F9" + // 25795 - 25799
-                "\u0000\u0000\u0000\uD0CD\u0000\uCCD7\u0000\u0000\u0000\u0000" + // 25800 - 25804
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 25805 - 25809
-                "\u0000\uD0CE\u8EA2\uA9D5\u0000\u0000\u0000\u0000\u8EA2\uA9DB" + // 25810 - 25814
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD0D4\u8EA2\uA9D9" + // 25815 - 25819
-                "\u8EA2\uA9DF\u0000\u0000\u8EA2\uA9D6\u8EA2\uA9DA\u8EA2\uA9DC" + // 25820 - 25824
-                "\u8EA2\uA9DE\u8EA2\uA9D8\u0000\u0000\u8EA2\uA9D7\u8EA2\uA9D2" + // 25825 - 25829
-                "\u8EA2\uA9D3\u0000\uD0CF\u0000\u0000\u0000\uD0D1\u0000\uD0D0" + // 25830 - 25834
-                "\u8EA2\uA9D4\u8EA2\uA9DD\u0000\u0000\u0000\u0000\u0000\u0000" + // 25835 - 25839
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 25840 - 25844
-                "\u0000\uD0D3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 25845 - 25849
-                "\u0000\u0000\u0000\u0000\u8EA2\uA9D1\u8EA2\uAED5\u0000\u0000" + // 25850 - 25854
-                "\u8EA2\uAED4\u8EA2\uAED9\u8EA2\uAED0\u0000\u0000\u8EA2\uAED3" + // 25855 - 25859
-                "\u8EA2\uAED2\u0000\u0000\u8EA2\uAED6\u0000\uC9DF\u8EA2\uA3CA" + // 25860 - 25864
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA3CB\u0000\u0000" + // 25865 - 25869
-                "\u0000\uC9E1\u0000\u0000\u8EA2\uA3CD\u0000\uC9DD\u8EA2\uA3CE" + // 25870 - 25874
-                "\u8EA2\uA3CC\u0000\uC9E0\u0000\uC9E2\u0000\uC9E5\u0000\uC9E4" + // 25875 - 25879
-                "\u0000\uC9DE\u8EA2\uA3CF\u0000\u0000\u0000\u0000\u0000\u0000" + // 25880 - 25884
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 25885 - 25889
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 25890 - 25894
-                "\u0000\u0000\u0000\uCCDB\u8EA2\uA5FE\u0000\u0000\u0000\uCCDD" + // 25895 - 25899
-                "\u0000\u0000\u0000\uCCDC\u0000\u0000\u8EA2\uA6A1\u0000\uCCDA" + // 25900 - 25904
-                "\u0000\uCCD9\u8EA2\uA5F5\u0000\u0000\u8EA2\uA5F4\u0000\u0000" + // 25905 - 25909
-                "\u8EA2\uA5F2\u8EA2\uA5F7\u8EA2\uA5F6\u8EA2\uA5F3\u8EA2\uA5FC" + // 25910 - 25914
-                "\u8EA2\uA5FD\u8EA2\uA5FA\u8EA2\uA5F8\u0000\uCCD8\u0000\u0000" + // 25915 - 25919
-                "\u0000\u0000\u0000\u0000\u8EA2\uA5FB\u0000\uCCDE\u8EA2\uA6A2" + // 25920 - 25924
-                "\u0000\u0000\u0000\u0000\u0000\uFCF0\u8EA2\uF0DD\u0000\uFCF2" + // 25925 - 25929
-                "\u0000\u0000\u8EA2\uF0DC\u8EA2\uF0DE\u0000\uFCF1\u8EA2\uF1C6" + // 25930 - 25934
-                "\u0000\u0000\u8EA2\uF1FB\u0000\u0000\u0000\u0000\u0000\u0000" + // 25935 - 25939
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCFE5\u0000\u0000" + // 25940 - 25944
-                "\u0000\u0000\u0000\u0000\u0000\uE7DC\u0000\u0000\u8EA2\uCFA6" + // 25945 - 25949
-                "\u0000\u0000\u8EA2\uD5D9\u0000\uF2FA\u0000\uF2FB\u0000\u0000" + // 25950 - 25954
-                "\u0000\uCFE6\u0000\u0000\u0000\uEFEA\u0000\uF9C8\u0000\uD3F2" + // 25955 - 25959
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF2FC\u0000\u0000" + // 25960 - 25964
-                "\u0000\uFCCE\u0000\uD3F3\u8EA2\uBAB1\u0000\u0000\u8EA2\uC1CE" + // 25965 - 25969
-                "\u0000\u0000\u8EA2\uC1D0\u0000\u0000\u8EA2\uC1CF\u0000\u0000" + // 25970 - 25974
-                "\u8EA2\uC8E3\u8EA2\uC8E0\u0000\uE7DD\u0000\u0000\u0000\uE7DE" + // 25975 - 25979
-                "\u8EA2\uC8E1\u8EA2\uC8E2\u0000\u0000\u8EA2\uCFA8\u8EA2\uCFAD" + // 25980 - 25984
-                "\u0000\uEBE7\u8EA2\uCFA7\u8EA2\uCFA9\u8EA2\uCFB0\u0000\uFAE5" + // 25985 - 25989
-                "\u0000\uFAE4\u0000\uFAE6\u8EA2\uEBD2\u0000\u0000\u8EA2\uEDC6" + // 25990 - 25994
-                "\u8EA2\uEDC5\u0000\u0000\u0000\uFBD9\u0000\uFBDB\u0000\uFBDA" + // 25995 - 25999
-                "\u8EA2\uEDC7\u0000\uFCB4\u8EA2\uF0B4\u0000\u0000\u0000\u0000" + // 26000 - 26004
-                "\u0000\u0000\u0000\uFCDD\u0000\u0000\u8EA2\uF0B3\u8EA2\uF0FC" + // 26005 - 26009
-                "\u0000\u0000\u0000\u0000\u8EA2\uA1AA\u0000\u0000\u0000\u0000" + // 26010 - 26014
-                "\u0000\uC6BF\u0000\uC6BE\u0000\u0000\u0000\uC7E0\u0000\uC7DF" + // 26015 - 26019
-                "\u8EA2\uA2A7\u0000\uC7DE\u8EA2\uA2A6\u0000\u0000\u0000\u0000" + // 26020 - 26024
-                "\u0000\uC9DB\u8EA2\uA3C9\u0000\u0000\u8EA2\uA3C8\u0000\u0000" + // 26025 - 26029
-                "\u0000\u0000\u0000\uC9D9\u0000\uC9DC\u0000\u0000\u0000\u0000" + // 26030 - 26034
-                "\u8EA2\uA3C7\u0000\u0000\u0000\uC9DA\u0000\u0000\u0000\u0000" + // 26035 - 26039
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA5F0" + // 26040 - 26044
-                "\u0000\u0000\u8EA2\uA5F1\u0000\uCCD6\u0000\u0000\u0000\u0000" + // 26045 - 26049
-                "\u0000\u0000\u0000\u0000\u0000\uD0CC\u0000\uF3C6\u8EA2\uDCD5" + // 26050 - 26054
-                "\u8EA2\uDCD3\u8EA2\uDCD1\u8EA2\uDCD0\u0000\uF3C8\u8EA2\uDCCF" + // 26055 - 26059
-                "\u0000\uF3C9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 26060 - 26064
-                "\u8EA2\uDCCD\u8EA2\uDCCE\u0000\uF3C5\u0000\uF3CA\u0000\uF3C7" + // 26065 - 26069
-                "\u0000\u0000\u0000\u0000\u8EA2\uDCCC\u0000\u0000\u0000\uF6BC" + // 26070 - 26074
-                "\u0000\u0000\u8EA2\uE1C8\u8EA2\uE1C6\u8EA2\uE1CB\u8EA2\uE1C9" + // 26075 - 26079
-                "\u0000\u0000\u8EA2\uE1C7\u8EA2\uE1CA\u0000\u0000\u0000\u0000" + // 26080 - 26084
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 26085 - 26089
-                "\u0000\uF8AC\u8EA2\uE5BE\u8EA2\uE5BF\u0000\uF8AD\u0000\u0000" + // 26090 - 26094
-                "\u8EA2\uE5C0\u8EA2\uE5BC\u8EA2\uE5C1\u8EA2\uE5BD\u0000\uF6BD" + // 26095 - 26099
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uE8EB\u8EA2\uE8ED" + // 26100 - 26104
-                "\u0000\uF9E4\u8EA2\uE8EC\u0000\uF9E3\u0000\uF9E2\u0000\u0000" + // 26105 - 26109
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9E5\u8EA2\uEBD3" + // 26110 - 26114
-                "\u8EA2\uEBD4\u0000\u0000\u8EA2\uC4D6\u8EA2\uC4DD\u8EA2\uC4DF" + // 26115 - 26119
-                "\u8EA2\uC4E5\u0000\u0000\u0000\uE5A2\u8EA2\uC4D1\u0000\u0000" + // 26120 - 26124
-                "\u0000\uE4F8\u0000\u0000\u8EA2\uC4E0\u0000\uE4FD\u8EA2\uC4E6" + // 26125 - 26129
-                "\u0000\uE4F4\u0000\u0000\u8EA2\uC4E3\u0000\u0000\u8EA2\uC4D3" + // 26130 - 26134
-                "\u8EA2\uC4E4\u8EA2\uC4D2\u0000\u0000\u0000\uE5A4\u0000\u0000" + // 26135 - 26139
-                "\u8EA2\uC4DE\u0000\uE4F5\u8EA2\uC4E7\u0000\u0000\u0000\uE4FA" + // 26140 - 26144
-                "\u8EA2\uC4D7\u0000\uE5A1\u8EA2\uC4E2\u8EA2\uC4D5\u8EA2\uC4DC" + // 26145 - 26149
-                "\u8EA2\uC4D8\u8EA2\uC4D4\u0000\uE4F7\u0000\uE4FE\u0000\uE4FC" + // 26150 - 26154
-                "\u0000\uE4F9\u0000\uE5A3\u0000\uE4F6\u8EA2\uC4DB\u0000\u0000" + // 26155 - 26159
-                "\u0000\uE4FB\u0000\u0000\u0000\uE0D4\u0000\u0000\u8EA2\uC4E1" + // 26160 - 26164
-                "\u0000\u0000\u8EA2\uC4D9\u0000\u0000\u0000\u0000\u0000\u0000" + // 26165 - 26169
-                "\u0000\u0000\u0000\u0000\u8EA2\uC4DA\u0000\u0000\u0000\u0000" + // 26170 - 26174
-                "\u8EA2\uCBE7\u0000\u0000\u0000\uE9DB\u0000\u0000\u0000\u0000" + // 26175 - 26179
-                "\u0000\uD4D4\u0000\u0000\u8EA2\uAEC8\u8EA2\uAEBC\u8EA2\uAEC0" + // 26180 - 26184
-                "\u0000\uD4D9\u0000\uD4E4\u8EA2\uAEBD\u0000\uD4DF\u8EA2\uAEC2" + // 26185 - 26189
-                "\u8EA2\uAEC9\u8EA2\uB4A4\u0000\u0000\u8EA2\uAEC7\u0000\uD4E6" + // 26190 - 26194
-                "\u0000\uD4D3\u8EA2\uAEBF\u8EA2\uAEB6\u0000\u0000\u0000\uD4DB" + // 26195 - 26199
-                "\u0000\u0000\u0000\u0000\u8EA2\uAEB5\u0000\u0000\u0000\u0000" + // 26200 - 26204
-                "\u8EA2\uAEBA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 26205 - 26209
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 26210 - 26214
-                "\u0000\u0000\u0000\u0000\u8EA2\uAEB3\u0000\uD4E3\u0000\u0000" + // 26215 - 26219
-                "\u0000\u0000\u8EA2\uB3FA\u0000\u0000\u0000\uD9C9\u8EA2\uB4AA" + // 26220 - 26224
-                "\u0000\uD9C7\u0000\uD9C4\u8EA2\uB4A1\u0000\uD9C0\u8EA2\uB4A5" + // 26225 - 26229
-                "\u0000\uD9CB\u8EA2\uB3F9\u8EA2\uB3FE\u8EA2\uB3FD\u0000\uD4D5" + // 26230 - 26234
-                "\u0000\uD9C6\u8EA2\uB4A8\u0000\u0000\u8EA2\uB4AB\u8EA2\uB3F6" + // 26235 - 26239
-                "\u0000\u0000\u0000\uDECE\u0000\u0000\u8EA2\uE2A7\u8EA2\uE5F6" + // 26240 - 26244
-                "\u8EA2\uE2AA\u0000\u0000\u8EA2\uE5F7\u0000\uF8C7\u8EA2\uE5F5" + // 26245 - 26249
-                "\u0000\u0000\u0000\u0000\u8EA2\uE5F4\u0000\u0000\u8EA2\uE5F3" + // 26250 - 26254
-                "\u0000\uF8C8\u0000\u0000\u0000\u0000\u0000\uF9F7\u0000\u0000" + // 26255 - 26259
-                "\u0000\u0000\u8EA2\uE9B9\u8EA2\uE9BA\u0000\u0000\u0000\u0000" + // 26260 - 26264
-                "\u0000\u0000\u0000\u0000\u8EA2\uEBEA\u8EA2\uEBE9\u0000\uFAF5" + // 26265 - 26269
-                "\u0000\u0000\u8EA2\uEBE8\u8EA2\uEDDA\u8EA2\uEDDB\u0000\u0000" + // 26270 - 26274
-                "\u0000\u0000\u8EA2\uEFB5\u8EA2\uF0BF\u0000\u0000\u0000\u0000" + // 26275 - 26279
-                "\u8EA2\uF1A6\u8EA2\uF2AC\u0000\uFDC6\u8EA2\uF2C0\u0000\uC5D7" + // 26280 - 26284
-                "\u0000\u0000\u0000\uCEE7\u0000\uCEE8\u0000\u0000\u0000\u0000" + // 26285 - 26289
-                "\u0000\uD2BB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 26290 - 26294
-                "\u0000\uF4BA\u0000\uC5D8\u0000\u0000\u0000\uCEE9\u0000\uD6D5" + // 26295 - 26299
-                "\u0000\uE5A5\u0000\uC5D9\u0000\u0000\u0000\uDBF3\u0000\uE9DF" + // 26300 - 26304
-                "\u8EA2\uA1C2\u8EA2\uCFE8\u8EA2\uCFE2\u8EA2\uCFDF\u0000\u0000" + // 26305 - 26309
-                "\u0000\u0000\u8EA2\uBACF\u8EA2\uCFE5\u0000\u0000\u8EA2\uCFDE" + // 26310 - 26314
-                "\u8EA2\uCFE4\u8EA2\uCFE3\u0000\u0000\u8EA2\uCFE0\u0000\u0000" + // 26315 - 26319
-                "\u0000\uECB9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 26320 - 26324
-                "\u0000\uECB8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECBA" + // 26325 - 26329
-                "\u8EA2\uCFE6\u0000\uF0BB\u8EA2\uCFE7\u0000\u0000\u0000\u0000" + // 26330 - 26334
-                "\u0000\u0000\u8EA2\uD6CF\u0000\u0000\u8EA2\uD6C8\u0000\u0000" + // 26335 - 26339
-                "\u0000\uF0C7\u8EA2\uD6CC\u0000\uF0BF\u0000\uF0C3\u8EA2\uD6CB" + // 26340 - 26344
-                "\u0000\u0000\u0000\uF0C2\u0000\uF0BE\u0000\uF0C1\u0000\uF0BC" + // 26345 - 26349
-                "\u0000\uF0C6\u8EA2\uD6CD\u8EA2\uD6C9\u0000\uF0C5\u8EA2\uD6C7" + // 26350 - 26354
-                "\u0000\uF0C4\u8EA2\uD6CE\u8EA2\uD6CA\u0000\uECBB\u0000\u0000" + // 26355 - 26359
-                "\u0000\uF0C8\u8EA2\uD6D0\u0000\uF0C0\u0000\uF0BD\u0000\u0000" + // 26360 - 26364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uDCD2\u8EA2\uDCD4" + // 26365 - 26369
-                "\u0000\uE8A7\u8EA2\uC9B5\u8EA2\uC9B7\u0000\u0000\u8EA2\uC9BA" + // 26370 - 26374
-                "\u0000\u0000\u0000\uE8AC\u0000\u0000\u0000\uE8B3\u0000\uE8AD" + // 26375 - 26379
-                "\u0000\u0000\u0000\u0000\u8EA2\uC9B0\u0000\uE8AE\u0000\uE8AF" + // 26380 - 26384
-                "\u8EA2\uC9B3\u0000\uE8B4\u0000\u0000\u8EA2\uC9B1\u8EA2\uC9B6" + // 26385 - 26389
-                "\u0000\uE8AB\u8EA2\uC9AF\u0000\uE8B1\u0000\uE8A9\u0000\u0000" + // 26390 - 26394
-                "\u0000\u0000\u0000\u0000\u0000\uE8A8\u8EA2\uC9B4\u8EA2\uC9B9" + // 26395 - 26399
-                "\u0000\u0000\u0000\uE8B2\u0000\u0000\u0000\u0000\u0000\u0000" + // 26400 - 26404
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC9AE" + // 26405 - 26409
-                "\u0000\u0000\u0000\uECB7\u8EA2\uCFEE\u0000\u0000\u8EA2\uCFEB" + // 26410 - 26414
-                "\u0000\u0000\u0000\uECB1\u0000\uECBD\u0000\uECBE\u0000\u0000" + // 26415 - 26419
-                "\u0000\uECB4\u8EA2\uCFE9\u0000\uECB6\u8EA2\uCFE1\u0000\uECBC" + // 26420 - 26424
-                "\u0000\u0000\u8EA2\uCFED\u0000\uECB3\u8EA2\uCFEF\u0000\uECB2" + // 26425 - 26429
-                "\u0000\u0000\u8EA2\uCFEA\u8EA2\uCFEC\u0000\uECB5\u8EA2\uC1F6" + // 26430 - 26434
-                "\u0000\u0000\u8EA2\uC2A7\u8EA2\uC1EF\u8EA2\uC1F8\u0000\uE3CC" + // 26435 - 26439
-                "\u0000\uE3CD\u0000\uE3C5\u8EA2\uC2A3\u0000\uE3CF\u8EA2\uC1F4" + // 26440 - 26444
-                "\u8EA2\uC1F3\u8EA2\uC1F1\u8EA2\uC2A5\u0000\uE3C3\u8EA2\uC1FD" + // 26445 - 26449
-                "\u8EA2\uC1F2\u0000\uE3C6\u8EA2\uC1FB\u0000\uE3C1\u8EA2\uC1F7" + // 26450 - 26454
-                "\u8EA2\uC1FE\u8EA2\uC2A2\u0000\u0000\u0000\u0000\u8EA2\uC2A6" + // 26455 - 26459
-                "\u0000\uE3CA\u8EA2\uC1F0\u0000\uE3C4\u8EA2\uC1F5\u0000\u0000" + // 26460 - 26464
-                "\u0000\uE3BF\u0000\u0000\u0000\uE3CB\u8EA2\uC2A1\u0000\uE3C7" + // 26465 - 26469
-                "\u0000\uE3C8\u0000\uE3CE\u0000\uE3C2\u0000\uA3A1\u0000\uE3C0" + // 26470 - 26474
-                "\u8EA2\uC1F9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 26475 - 26479
-                "\u0000\u0000\u0000\uE3C9\u0000\u0000\u0000\u0000\u8EA2\uC2A4" + // 26480 - 26484
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8B5\u0000\uE8B0" + // 26485 - 26489
-                "\u0000\u0000\u8EA2\uC9BC\u8EA2\uC9B8\u0000\u0000\u8EA2\uC9B2" + // 26490 - 26494
-                "\u0000\uE8AA\u0000\uE8A6\u8EA2\uC9BB\u0000\uDEBE\u8EA2\uBAD5" + // 26495 - 26499
-                "\u0000\uDEC4\u0000\uDECA\u0000\uE1C3\u0000\u0000\u0000\u0000" + // 26500 - 26504
-                "\u0000\uDEC8\u8EA2\uBAD2\u0000\uDED5\u0000\uDEC1\u0000\uDEC9" + // 26505 - 26509
-                "\u8EA2\uBADA\u8EA2\uC1FC\u8EA2\uBADF\u8EA2\uBAD3\u0000\u0000" + // 26510 - 26514
-                "\u8EA2\uBACA\u8EA2\uBAD7\u8EA2\uBAD1\u0000\uDEC7\u8EA2\uBADD" + // 26515 - 26519
-                "\u0000\u0000\u0000\u0000\u0000\uDEC3\u0000\uDED7\u0000\uDED0" + // 26520 - 26524
-                "\u0000\u0000\u0000\uDEC5\u0000\uDEC2\u0000\u0000\u0000\uDECD" + // 26525 - 26529
-                "\u0000\u0000\u8EA2\uBADE\u8EA2\uBAD0\u8EA2\uBAD6\u8EA2\uBAD8" + // 26530 - 26534
-                "\u8EA2\uBACC\u8EA2\uBADB\u0000\uDEBF\u8EA2\uBACB\u0000\u0000" + // 26535 - 26539
-                "\u0000\uDEC6\u0000\uDED6\u0000\uDED2\u8EA2\uBACD\u0000\uDECC" + // 26540 - 26544
-                "\u0000\u0000\u0000\u0000\u0000\uDED3\u0000\uDECF\u0000\uDECB" + // 26545 - 26549
-                "\u0000\u0000\u8EA2\uBAD4\u0000\u0000\u0000\u0000\u0000\u0000" + // 26550 - 26554
-                "\u0000\u0000\u0000\u0000\u0000\uDED1\u0000\u0000\u0000\u0000" + // 26555 - 26559
-                "\u0000\u0000\u8EA2\uC1FA\u8EA2\uB4AC\u0000\uD9CC\u0000\u0000" + // 26560 - 26564
-                "\u0000\uD9BE\u0000\uD9BB\u8EA2\uB4A3\u0000\uD9B8\u0000\u0000" + // 26565 - 26569
-                "\u8EA2\uB4A9\u0000\u0000\u0000\uD9BF\u8EA2\uB4AD\u0000\u0000" + // 26570 - 26574
-                "\u8EA2\uB3F7\u8EA2\uB4A7\u0000\uD9C2\u8EA2\uB3F8\u8EA2\uB3FB" + // 26575 - 26579
-                "\u8EA2\uB4A2\u0000\u0000\u0000\u0000\u0000\uD9C3\u0000\uD9C1" + // 26580 - 26584
-                "\u0000\uD9CD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 26585 - 26589
-                "\u0000\uD9C8\u0000\u0000\u0000\uD9BC\u0000\uDAF6\u0000\u0000" + // 26590 - 26594
-                "\u0000\uD9BD\u8EA2\uB3FC\u0000\uD9CA\u0000\uD9C5\u8EA2\uB4A6" + // 26595 - 26599
-                "\u0000\uD9BA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9B9" + // 26600 - 26604
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 26605 - 26609
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 26610 - 26614
-                "\u8EA2\uB3F4\u8EA2\uB3F5\u8EA2\uBACE\u0000\u0000\u0000\u0000" + // 26615 - 26619
-                "\u0000\u0000\u0000\uDEBD\u0000\uDEC0\u8EA2\uBAD9\u0000\uDED4" + // 26620 - 26624
-                "\u8EA2\uBADC\u0000\uD0B7\u0000\uD0C2\u0000\uD0BF\u8EA2\uA9C1" + // 26625 - 26629
-                "\u0000\uD0C3\u8EA2\uA9C7\u8EA2\uA9C8\u0000\uD0BE\u0000\uD0C4" + // 26630 - 26634
-                "\u0000\uD0BA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 26635 - 26639
-                "\u0000\uD0B9\u8EA2\uA9C0\u0000\u0000\u0000\u0000\u0000\u0000" + // 26640 - 26644
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA9C5\u0000\u0000" + // 26645 - 26649
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 26650 - 26654
-                "\u0000\u0000\u8EA2\uA9CF\u0000\u0000\u8EA2\uAEC6\u0000\uD4DE" + // 26655 - 26659
-                "\u8EA2\uAEB4\u0000\u0000\u8EA2\uAEB9\u0000\uD4D7\u0000\uD4E2" + // 26660 - 26664
-                "\u8EA2\uAEB7\u0000\uD4D2\u0000\uD4DC\u0000\uD4E1\u8EA2\uAEBE" + // 26665 - 26669
-                "\u0000\u0000\u0000\uD4DD\u0000\uD4E0\u0000\u0000\u0000\u0000" + // 26670 - 26674
-                "\u8EA2\uAEC1\u0000\uD4D8\u8EA2\uAEB8\u0000\u0000\u0000\u0000" + // 26675 - 26679
-                "\u0000\u0000\u8EA2\uAEC4\u8EA2\uAEC5\u0000\u0000\u0000\uD4DA" + // 26680 - 26684
-                "\u8EA2\uAEC3\u0000\uD4D6\u0000\uD4E5\u0000\u0000\u8EA2\uAEBB" + // 26685 - 26689
-                "\u0000\uCCC5\u8EA2\uA5DD\u8EA2\uA5DF\u0000\u0000\u0000\uCCC8" + // 26690 - 26694
-                "\u0000\u0000\u0000\uCCCA\u8EA2\uA5DB\u8EA2\uA5E0\u0000\u0000" + // 26695 - 26699
-                "\u0000\u0000\u0000\uCCD3\u0000\uCCCF\u8EA2\uA5E8\u0000\uCCD5" + // 26700 - 26704
-                "\u0000\u0000\u0000\uCCCC\u8EA2\uA5DE\u0000\uCCC9\u0000\u0000" + // 26705 - 26709
-                "\u0000\u0000\u0000\uCCC4\u0000\uCCC2\u0000\u0000\u8EA2\uA5EC" + // 26710 - 26714
-                "\u0000\u0000\u0000\uCCD0\u0000\u0000\u0000\u0000\u0000\u0000" + // 26715 - 26719
-                "\u0000\u0000\u0000\u0000\u8EA2\uA9C9\u8EA2\uA9BD\u8EA2\uA9CC" + // 26720 - 26724
-                "\u0000\u0000\u0000\u0000\u8EA2\uA9BF\u0000\uD0BC\u0000\uD0CA" + // 26725 - 26729
-                "\u0000\uD0B8\u0000\uD0C9\u0000\uD0C1\u0000\uD0C6\u0000\uD0B6" + // 26730 - 26734
-                "\u8EA2\uA9BE\u8EA2\uA9C4\u0000\uD0C5\u8EA2\uA9D0\u0000\uD0C7" + // 26735 - 26739
-                "\u0000\u0000\u0000\uD0BD\u0000\u0000\u0000\u0000\u8EA2\uA9C6" + // 26740 - 26744
-                "\u8EA2\uA9C3\u0000\uD0BB\u0000\u0000\u8EA2\uA9BC\u0000\uD0C8" + // 26745 - 26749
-                "\u8EA2\uA9CB\u0000\uD0C0\u8EA2\uA9CD\u0000\uD0CB\u0000\uC9D4" + // 26750 - 26754
-                "\u8EA2\uA3C3\u0000\uC9C8\u0000\uC9C5\u0000\u0000\u8EA2\uA3BC" + // 26755 - 26759
-                "\u0000\uC9C4\u8EA2\uA3C6\u0000\uC9C7\u0000\u0000\u0000\uC9CB" + // 26760 - 26764
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC9C2\u8EA2\uA3C2" + // 26765 - 26769
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA3BB" + // 26770 - 26774
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 26775 - 26779
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 26780 - 26784
-                "\u0000\u0000\u8EA2\uA5EB\u8EA2\uA5EA\u0000\uCCD1\u8EA2\uA5ED" + // 26785 - 26789
-                "\u8EA2\uA5EF\u8EA2\uA5E4\u8EA2\uA5E7\u8EA2\uA5EE\u0000\uCCD2" + // 26790 - 26794
-                "\u0000\u0000\u0000\u0000\u8EA2\uA5E1\u8EA2\uA5E5\u0000\u0000" + // 26795 - 26799
-                "\u0000\u0000\u8EA2\uA5E9\u8EA2\uA9CA\u0000\uCCCD\u8EA2\uA9CE" + // 26800 - 26804
-                "\u0000\uCCC0\u8EA2\uA5E6\u0000\uCCC1\u0000\uCCCE\u0000\uCCC7" + // 26805 - 26809
-                "\u0000\uCCC3\u0000\u0000\u8EA2\uA5E2\u0000\uCCC6\u0000\uCCCB" + // 26810 - 26814
-                "\u0000\uCCD4\u8EA2\uA5E3\u8EA2\uA5DC\u0000\uD9B4\u0000\uC4B2" + // 26815 - 26819
-                "\u0000\u0000\u0000\uC4C5\u0000\uA4BF\u0000\uC5AB\u0000\u0000" + // 26820 - 26824
-                "\u0000\uC5AA\u0000\uC5A9\u0000\uC6A5\u0000\uC6A4\u0000\u0000" + // 26825 - 26829
-                "\u8EA2\uA1CE\u8EA2\uA2A3\u0000\u0000\u0000\u0000\u0000\u0000" + // 26830 - 26834
-                "\u0000\uCCB8\u0000\uCCB5\u0000\uCCB7\u0000\uCCB6\u0000\u0000" + // 26835 - 26839
-                "\u0000\u0000\u0000\uD0B2\u0000\u0000\u0000\u0000\u0000\uDEBB" + // 26840 - 26844
-                "\u0000\u0000\u0000\uC4B3\u0000\u0000\u0000\uC5AC\u0000\u0000" + // 26845 - 26849
-                "\u0000\uC6A7\u0000\uC6A6\u0000\u0000\u8EA2\uA3B4\u0000\u0000" + // 26850 - 26854
-                "\u0000\u0000\u0000\uCCB9\u0000\u0000\u0000\u0000\u0000\uA7BA" + // 26855 - 26859
-                "\u0000\u0000\u0000\u0000\u8EA2\uA1B7\u0000\u0000\u0000\uC6A9" + // 26860 - 26864
-                "\u0000\uC6A8\u0000\uC7CD\u0000\uC7CE\u8EA2\uA3B5\u0000\uC9BB" + // 26865 - 26869
-                "\u0000\u0000\u0000\uC9BC\u0000\u0000\u0000\uCCBA\u0000\uCCBB" + // 26870 - 26874
-                "\u0000\uCCBC\u0000\u0000\u0000\uD0B3\u8EA2\uA9B7\u0000\u0000" + // 26875 - 26879
-                "\u0000\u0000\u0000\uD4CE\u8EA2\uA9B4\u0000\uD0B0\u8EA2\uA9B5" + // 26880 - 26884
-                "\u0000\uD0AF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD0AD" + // 26885 - 26889
-                "\u0000\u0000\u0000\uD0AE\u0000\u0000\u0000\u0000\u0000\u0000" + // 26890 - 26894
-                "\u8EA2\uAEB0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 26895 - 26899
-                "\u0000\uD9AC\u8EA2\uB3F1\u0000\u0000\u0000\uD9AF\u8EA2\uB3F0" + // 26900 - 26904
-                "\u0000\uDBAB\u0000\uD9AE\u0000\uD9AD\u0000\u0000\u0000\uDEBA" + // 26905 - 26909
-                "\u0000\u0000\u0000\uDEB9\u0000\uDEB8\u0000\uE3B9\u0000\u0000" + // 26910 - 26914
-                "\u0000\u0000\u0000\uE3BC\u0000\uE3BD\u0000\uE3BB\u0000\u0000" + // 26915 - 26919
-                "\u0000\uE3BA\u0000\u0000\u0000\u0000\u8EA2\uC9AA\u0000\u0000" + // 26920 - 26924
-                "\u8EA2\uC9AB\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uCFDD" + // 26925 - 26929
-                "\u0000\uECAF\u8EA2\uCFDC\u0000\u0000\u0000\uF0BA\u8EA2\uDCCB" + // 26930 - 26934
-                "\u0000\uF3C4\u0000\u0000\u8EA2\uE5BA\u0000\uF9E1\u0000\uA7B4" + // 26935 - 26939
-                "\u0000\uC4C4\u0000\uC5A4\u8EA2\uA1B6\u0000\u0000\u0000\uC5A5" + // 26940 - 26944
-                "\u0000\uC5A6\u8EA2\uC9A8\u8EA2\uC9A9\u0000\uE8A3\u0000\uE8A2" + // 26945 - 26949
-                "\u8EA2\uCCE1\u0000\u0000\u0000\u0000\u0000\uECAA\u0000\uECAB" + // 26950 - 26954
-                "\u0000\uECAC\u0000\uECAE\u8EA2\uCFDA\u8EA2\uCFDB\u0000\uECAD" + // 26955 - 26959
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0B8\u0000\u0000" + // 26960 - 26964
-                "\u0000\uF0B9\u0000\u0000\u0000\u0000\u8EA2\uE5B9\u8EA2\uEBD1" + // 26965 - 26969
-                "\u8EA2\uEBD0\u8EA2\uEEFE\u0000\u0000\u0000\uC4B0\u0000\u0000" + // 26970 - 26974
-                "\u0000\u0000\u0000\u0000\u0000\uC5FC\u0000\uC5FB\u0000\u0000" + // 26975 - 26979
-                "\u0000\u0000\u0000\uC7C9\u0000\u0000\u0000\u0000\u8EA2\uA1FE" + // 26980 - 26984
-                "\u0000\u0000\u0000\u0000\u0000\uC9B7\u0000\uC9B8\u0000\uC9B6" + // 26985 - 26989
-                "\u0000\uC9B9\u8EA2\uA3B1\u8EA2\uA3B2\u0000\u0000\u0000\u0000" + // 26990 - 26994
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 26995 - 26999
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 27000 - 27004
-                "\u0000\uCCB4\u8EA2\uA5D5\u0000\u0000\u0000\uCCB3\u0000\u0000" + // 27005 - 27009
-                "\u8EA2\uC4A2\u8EA2\uC3FE\u8EA2\uC3FD\u0000\u0000\u8EA2\uC3FC" + // 27010 - 27014
-                "\u8EA2\uC3FB\u0000\uE4D8\u8EA2\uC4A1\u0000\uE9B9\u8EA2\uCBAB" + // 27015 - 27019
-                "\u8EA2\uCBAD\u0000\uE9BA\u8EA2\uCBAC\u0000\uEDC5\u0000\u0000" + // 27020 - 27024
-                "\u0000\uEDC4\u8EA2\uD1B9\u0000\u0000\u0000\u0000\u8EA2\uD7EA" + // 27025 - 27029
-                "\u8EA2\uD7E9\u8EA2\uD7EB\u0000\u0000\u0000\u0000\u0000\uF1A4" + // 27030 - 27034
-                "\u0000\u0000\u8EA2\uDDB7\u0000\uF3FC\u0000\u0000\u8EA2\uE1F4" + // 27035 - 27039
-                "\u0000\uF6D6\u8EA2\uE5E4\u0000\uFBE3\u0000\uC5CF\u0000\uC6DF" + // 27040 - 27044
-                "\u0000\uC8BA\u0000\uCAE3\u0000\uCEBD\u0000\uCEBE\u0000\u0000" + // 27045 - 27049
-                "\u0000\u0000\u0000\uD1F1\u0000\u0000\u0000\u0000\u8EA2\uAFFC" + // 27050 - 27054
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE4D9" + // 27055 - 27059
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uD2D9\u0000\uF1A5" + // 27060 - 27064
-                "\u0000\uF6D7\u0000\uC5D0\u0000\u0000\u0000\uC8BB\u0000\u0000" + // 27065 - 27069
-                "\u0000\u0000\u8EA2\uA7CC\u0000\uCEBF\u0000\uC4AE\u0000\uC4AF" + // 27070 - 27074
-                "\u0000\u0000\u0000\uC4C3\u0000\u0000\u0000\u0000\u0000\uC5A1" + // 27075 - 27079
-                "\u0000\uC5A2\u0000\uC5A3\u8EA2\uA1CC\u0000\uC5FA\u0000\u0000" + // 27080 - 27084
-                "\u8EA2\uA1CB\u0000\u0000\u0000\uC7C7\u0000\u0000\u8EA2\uA1FD" + // 27085 - 27089
-                "\u0000\uC7C5\u0000\uC7C6\u8EA2\uA1FC\u0000\u0000\u0000\u0000" + // 27090 - 27094
-                "\u0000\uC7C8\u0000\uC7C4\u0000\u0000\u0000\u0000\u0000\u0000" + // 27095 - 27099
-                "\u0000\u0000\u8EA2\uA3AE\u0000\uCFCF\u8EA2\uA3AF\u0000\u0000" + // 27100 - 27104
-                "\u0000\u0000\u8EA2\uA3B0\u0000\u0000\u0000\u0000\u0000\uC9B2" + // 27105 - 27109
-                "\u0000\uC9B1\u0000\u0000\u0000\u0000\u0000\uC9B5\u0000\uC9B3" + // 27110 - 27114
-                "\u0000\uC9B4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCCB0" + // 27115 - 27119
-                "\u0000\u0000\u0000\uCCAF\u8EA2\uA5D4\u8EA2\uA5D1\u8EA2\uA5D2" + // 27120 - 27124
-                "\u0000\u0000\u8EA2\uA5D0\u0000\uCCB1\u0000\uCCAD\u0000\uCCAC" + // 27125 - 27129
-                "\u0000\u0000\u0000\uCCAE\u0000\uCCAB\u0000\u0000\u0000\u0000" + // 27130 - 27134
-                "\u0000\u0000\u0000\u0000\u0000\uDCBE\u0000\u0000\u8EA2\uB7DD" + // 27135 - 27139
-                "\u0000\u0000\u0000\u0000\u8EA2\uB7D6\u8EA2\uB7D8\u8EA2\uB7DA" + // 27140 - 27144
-                "\u0000\u0000\u8EA2\uB7DB\u8EA2\uB7D9\u0000\uDCBF\u0000\u0000" + // 27145 - 27149
-                "\u8EA2\uB7DE\u0000\u0000\u8EA2\uB7D7\u0000\u0000\u0000\u0000" + // 27150 - 27154
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 27155 - 27159
-                "\u0000\u0000\u0000\u0000\u8EA2\uBECC\u0000\uE0FC\u8EA2\uBED4" + // 27160 - 27164
-                "\u0000\u0000\u8EA2\uBEC9\u0000\u0000\u8EA2\uBED5\u0000\u0000" + // 27165 - 27169
-                "\u8EA2\uBECA\u8EA2\uBECB\u0000\u0000\u0000\u0000\u8EA2\uBED3" + // 27170 - 27174
-                "\u8EA2\uBED2\u8EA2\uBECF\u0000\uDCBD\u0000\uE0FD\u8EA2\uBECD" + // 27175 - 27179
-                "\u8EA2\uBED0\u0000\uE0FE\u8EA2\uBED1\u8EA2\uBECE\u0000\u0000" + // 27180 - 27184
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 27185 - 27189
-                "\u0000\u0000\u8EA2\uC5D4\u0000\u0000\u8EA2\uC5D8\u0000\uE5D5" + // 27190 - 27194
-                "\u0000\u0000\u8EA2\uCCB8\u0000\uE5D8\u0000\uF0B5\u0000\u0000" + // 27195 - 27199
-                "\u0000\uA7AD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 27200 - 27204
-                "\u8EA2\uA1AE\u0000\u0000\u0000\uC5F4\u0000\uC5F5\u0000\u0000" + // 27205 - 27209
-                "\u0000\u0000\u0000\uC7C2\u0000\u0000\u8EA2\uA3AC\u0000\u0000" + // 27210 - 27214
-                "\u0000\uD0A4\u0000\uD0A3\u8EA2\uAEA3\u8EA2\uAEA2\u0000\uD9A8" + // 27215 - 27219
-                "\u0000\uA7AE\u0000\uC4FD\u8EA2\uA1B5\u0000\u0000\u0000\u0000" + // 27220 - 27224
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA5CD\u0000\u0000" + // 27225 - 27229
-                "\u0000\uD0A5\u0000\u0000\u0000\uD4C3\u0000\u0000\u0000\uD4C1" + // 27230 - 27234
-                "\u0000\uD4C2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 27235 - 27239
-                "\u0000\uF0B6\u0000\uA7AF\u0000\uC5F6\u0000\u0000\u0000\u0000" + // 27240 - 27244
-                "\u0000\u0000\u0000\uC7C3\u8EA2\uA1FB\u0000\u0000\u0000\u0000" + // 27245 - 27249
-                "\u0000\u0000\u0000\u0000\u0000\uC9AF\u0000\uC9B0\u0000\u0000" + // 27250 - 27254
-                "\u8EA2\uA3AD\u0000\u0000\u0000\u0000\u8EA2\uA5CE\u0000\uCCA9" + // 27255 - 27259
-                "\u8EA2\uA5CF\u0000\u0000\u0000\uE9A9\u8EA2\uCBA7\u0000\uE9B7" + // 27260 - 27264
-                "\u8EA2\uCAF5\u0000\u0000\u8EA2\uCBAA\u0000\u0000\u0000\u0000" + // 27265 - 27269
-                "\u8EA2\uCAE5\u8EA2\uCAFA\u0000\uE9AC\u0000\uE9B5\u0000\uE9B3" + // 27270 - 27274
-                "\u8EA2\uCAE7\u8EA2\uCAFC\u0000\uE9B2\u0000\u0000\u0000\u0000" + // 27275 - 27279
-                "\u0000\uE9AB\u8EA2\uCAF8\u0000\u0000\u0000\u0000\u0000\u0000" + // 27280 - 27284
-                "\u0000\u0000\u8EA2\uCBA4\u0000\u0000\u0000\u0000\u0000\u0000" + // 27285 - 27289
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 27290 - 27294
-                "\u8EA2\uD0FC\u0000\u0000\u8EA2\uD0F8\u8EA2\uD0F4\u8EA2\uD1AA" + // 27295 - 27299
-                "\u8EA2\uD1A7\u0000\uEDB7\u0000\u0000\u0000\u0000\u8EA2\uD1AE" + // 27300 - 27304
-                "\u8EA2\uD0FB\u0000\uEDC2\u8EA2\uD1A4\u0000\u0000\u0000\u0000" + // 27305 - 27309
-                "\u8EA2\uD0F7\u8EA2\uD1A3\u0000\uEDBF\u8EA2\uD1B7\u0000\u0000" + // 27310 - 27314
-                "\u8EA2\uD1B4\u8EA2\uD1A6\u8EA2\uD0F5\u0000\u0000\u0000\u0000" + // 27315 - 27319
-                "\u8EA2\uD1AB\u8EA2\uD1AD\u0000\uEDBB\u8EA2\uD1A1\u8EA2\uD0FA" + // 27320 - 27324
-                "\u0000\uC4C2\u0000\uC4F8\u0000\u0000\u0000\uC4F7\u0000\uC5F3" + // 27325 - 27329
-                "\u0000\uC5F2\u0000\uC7BE\u0000\uC7BD\u0000\uC7BF\u0000\uC7BC" + // 27330 - 27334
-                "\u0000\u0000\u0000\uC9AC\u0000\uC9AB\u0000\uC9AD\u0000\u0000" + // 27335 - 27339
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCCA3\u0000\u0000" + // 27340 - 27344
-                "\u0000\uCCA2\u0000\uCCA4\u0000\u0000\u0000\uD0A2\u0000\u0000" + // 27345 - 27349
-                "\u0000\uA2F9\u8EA2\uAEA1\u0000\uA2FA\u0000\uD9A7\u0000\uA2FC" + // 27350 - 27354
-                "\u0000\uA2FB\u8EA2\uBAC4\u0000\u0000\u0000\uA2FD\u0000\uE7FE" + // 27355 - 27359
-                "\u0000\uA2FE\u0000\u0000\u0000\uC4AB\u0000\u0000\u0000\uC4F9" + // 27360 - 27364
-                "\u0000\uC7C0\u0000\uCCA5\u0000\u0000\u0000\uC4AC\u0000\uC4FC" + // 27365 - 27369
-                "\u0000\uC4FA\u0000\uC4FB\u0000\u0000\u0000\u0000\u0000\uC7C1" + // 27370 - 27374
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC9AE\u0000\uCCA7" + // 27375 - 27379
-                "\u0000\uCCA6\u0000\uCCA8\u0000\u0000\u0000\u0000\u0000\u0000" + // 27380 - 27384
-                "\u0000\uD4C0\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA1A5" + // 27385 - 27389
-                "\u0000\u0000\u0000\uC5AD\u0000\u0000\u0000\u0000\u0000\u0000" + // 27390 - 27394
-                "\u0000\u0000\u0000\u0000\u8EA2\uA2A4\u0000\u0000\u0000\u0000" + // 27395 - 27399
-                "\u0000\u0000\u8EA2\uA3B6\u8EA2\uA3B7\u0000\u0000\u0000\u0000" + // 27400 - 27404
-                "\u8EA2\uA5D9\u0000\u0000\u8EA2\uA5DA\u0000\u0000\u8EA2\uA9B9" + // 27405 - 27409
-                "\u8EA2\uA9B8\u8EA2\uA9BB\u8EA2\uA9BA\u0000\uD0B4\u0000\u0000" + // 27410 - 27414
-                "\u8EA2\uB3F3\u0000\uD4D0\u8EA2\uAEB2\u0000\uD4CF\u0000\u0000" + // 27415 - 27419
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uBAC8\u0000\uDEBC" + // 27420 - 27424
-                "\u0000\u0000\u8EA2\uBAC9\u0000\u0000\u0000\u0000\u0000\u0000" + // 27425 - 27429
-                "\u0000\u0000\u8EA2\uC9AD\u0000\uE8A5\u0000\u0000\u0000\u0000" + // 27430 - 27434
-                "\u0000\u0000\u0000\u0000\u0000\uECB0\u0000\u0000\u8EA2\uE5BB" + // 27435 - 27439
-                "\u0000\u0000\u0000\uA7BC\u0000\u0000\u0000\u0000\u8EA2\uA1B8" + // 27440 - 27444
-                "\u0000\u0000\u0000\uC6AA\u0000\u0000\u0000\u0000\u0000\u0000" + // 27445 - 27449
-                "\u0000\u0000\u8EA2\uD2F1\u0000\u0000\u0000\u0000\u0000\u0000" + // 27450 - 27454
-                "\u0000\u0000\u0000\uF1EA\u0000\uF1EF\u0000\uF1E8\u8EA2\uD9C4" + // 27455 - 27459
-                "\u8EA2\uD9BB\u8EA2\uD9C7\u8EA2\uD9BF\u8EA2\uD9C5\u0000\uF1F0" + // 27460 - 27464
-                "\u0000\uF1E9\u8EA2\uD9B8\u8EA2\uD9BE\u8EA2\uD9C8\u8EA2\uD9C1" + // 27465 - 27469
-                "\u8EA2\uD9C6\u8EA2\uD9BA\u0000\u0000\u0000\u0000\u8EA2\uD9C2" + // 27470 - 27474
-                "\u0000\uF1EB\u8EA2\uD9C0\u0000\uF1EE\u0000\uF1ED\u8EA2\uD9BC" + // 27475 - 27479
-                "\u8EA2\uD9BD\u8EA2\uD9B9\u8EA2\uD9C3\u0000\uF1EC\u8EA2\uD9CA" + // 27480 - 27484
-                "\u8EA2\uD9C9\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uDEC7" + // 27485 - 27489
-                "\u8EA2\uDEC3\u0000\uF4E9\u0000\u0000\u8EA2\uDEBD\u0000\uF4E3" + // 27490 - 27494
-                "\u0000\uF4F3\u8EA2\uDEC9\u0000\uF4EB\u0000\uF4E7\u8EA2\uDEC0" + // 27495 - 27499
-                "\u0000\uF4EE\u0000\uF4F1\u8EA2\uDECB\u0000\uF4E6\u8EA2\uDEC2" + // 27500 - 27504
-                "\u0000\uF4EF\u8EA2\uDECD\u8EA2\uDECA\u8EA2\uDEBE\u0000\uF4EA" + // 27505 - 27509
-                "\u0000\uF4E4\u0000\uF4F2\u0000\uECA1\u0000\u0000\u0000\uECA5" + // 27510 - 27514
-                "\u8EA2\uCFCF\u0000\uEBFE\u0000\uECA8\u8EA2\uCFD2\u8EA2\uCFD3" + // 27515 - 27519
-                "\u0000\uECA6\u0000\uECA7\u8EA2\uCFD9\u8EA2\uCFD6\u8EA2\uCFD7" + // 27520 - 27524
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0B3\u8EA2\uD6C3" + // 27525 - 27529
-                "\u0000\uF0B0\u8EA2\uD6C0\u0000\uF0B2\u0000\uF0B4\u0000\u0000" + // 27530 - 27534
-                "\u8EA2\uD6C1\u0000\uF0B1\u0000\u0000\u8EA2\uD6C2\u0000\u0000" + // 27535 - 27539
-                "\u8EA2\uD6BF\u0000\u0000\u0000\u0000\u0000\uF3C1\u8EA2\uDCC9" + // 27540 - 27544
-                "\u0000\uF3C2\u8EA2\uDCC7\u0000\u0000\u8EA2\uDCC8\u8EA2\uDCC6" + // 27545 - 27549
-                "\u8EA2\uDCC5\u0000\u0000\u0000\u0000\u8EA2\uDCCA\u0000\uF3C0" + // 27550 - 27554
-                "\u0000\u0000\u0000\u0000\u8EA2\uE1C4\u8EA2\uE1C5\u0000\u0000" + // 27555 - 27559
-                "\u8EA2\uCFD0\u8EA2\uE1C3\u0000\uF3C3\u0000\uF8AB\u8EA2\uE5B7" + // 27560 - 27564
-                "\u8EA2\uE5B8\u0000\u0000\u0000\uFAE2\u0000\uFAE3\u8EA2\uEBCF" + // 27565 - 27569
-                "\u8EA2\uEBCE\u0000\uFBD8\u0000\uFBD7\u8EA2\uEEFD\u0000\u0000" + // 27570 - 27574
-                "\u0000\uC4AA\u0000\uDEAE\u0000\u0000\u8EA2\uBAC2\u8EA2\uBABB" + // 27575 - 27579
-                "\u0000\u0000\u0000\uDEAB\u0000\u0000\u8EA2\uBAC3\u0000\u0000" + // 27580 - 27584
-                "\u0000\u0000\u0000\u0000\u8EA2\uBAB9\u8EA2\uBABC\u0000\uDEAA" + // 27585 - 27589
-                "\u8EA2\uBABD\u0000\u0000\u0000\u0000\u0000\uDEAD\u8EA2\uBAC1" + // 27590 - 27594
-                "\u0000\u0000\u8EA2\uBAB7\u8EA2\uBAB6\u0000\uDEAF\u0000\u0000" + // 27595 - 27599
-                "\u0000\uDEB0\u0000\uDEAC\u0000\uDEB1\u8EA2\uBAB5\u8EA2\uBAC0" + // 27600 - 27604
-                "\u8EA2\uBABE\u8EA2\uBAB8\u0000\u0000\u0000\u0000\u0000\u0000" + // 27605 - 27609
-                "\u0000\uDEA9\u8EA2\uBABA\u0000\u0000\u0000\u0000\u0000\u0000" + // 27610 - 27614
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 27615 - 27619
-                "\u0000\uE3B1\u0000\uE3AB\u8EA2\uC1DC\u0000\uE3B4\u8EA2\uC1E2" + // 27620 - 27624
-                "\u8EA2\uC1E5\u0000\uE3AD\u0000\uE3AE\u8EA2\uC1DF\u0000\uE3AC" + // 27625 - 27629
-                "\u8EA2\uC1E8\u0000\uE3B2\u8EA2\uC1E9\u0000\u0000\u8EA2\uC1E4" + // 27630 - 27634
-                "\u0000\uE3B3\u0000\u0000\u8EA2\uC1D9\u0000\uE3B0\u8EA2\uC1DA" + // 27635 - 27639
-                "\u8EA2\uB3E6\u8EA2\uB3DA\u0000\u0000\u0000\uD8F6\u0000\u0000" + // 27640 - 27644
-                "\u8EA2\uB3DF\u8EA2\uB3E5\u0000\uD8F5\u8EA2\uB3D8\u0000\uD8F9" + // 27645 - 27649
-                "\u8EA2\uB3DC\u8EA2\uB3D5\u0000\uD8F7\u8EA2\uB3D9\u0000\uD8FC" + // 27650 - 27654
-                "\u0000\uD9A3\u0000\u0000\u8EA2\uB3EA\u0000\u0000\u8EA2\uB3D4" + // 27655 - 27659
-                "\u0000\u0000\u0000\uD8FD\u0000\u0000\u8EA2\uB3E9\u0000\u0000" + // 27660 - 27664
-                "\u0000\u0000\u0000\uD8F8\u8EA2\uB3DB\u0000\uD8F4\u8EA2\uB3D6" + // 27665 - 27669
-                "\u8EA2\uB3D2\u8EA2\uB3E0\u8EA2\uB3D3\u8EA2\uB3D1\u8EA2\uB3DD" + // 27670 - 27674
-                "\u8EA2\uB3E3\u8EA2\uB3E4\u0000\uD8FA\u0000\u0000\u0000\u0000" + // 27675 - 27679
-                "\u8EA2\uBABF\u8EA2\uB3E1\u8EA2\uB3D0\u8EA2\uB3E2\u0000\u0000" + // 27680 - 27684
-                "\u0000\uD9A6\u8EA2\uB3E7\u0000\uD9A5\u8EA2\uB3CF\u0000\u0000" + // 27685 - 27689
-                "\u8EA2\uB3D7\u8EA2\uB3E8\u0000\uD9A1\u0000\uD8FE\u0000\uD8FB" + // 27690 - 27694
-                "\u0000\uD9A2\u0000\u0000\u0000\u0000\u0000\uD8F2\u0000\u0000" + // 27695 - 27699
-                "\u0000\u0000\u0000\uD8F3\u0000\u0000\u0000\u0000\u0000\uCBD2" + // 27700 - 27704
-                "\u0000\u0000\u0000\uCBD5\u0000\uCBD4\u0000\uCBD3\u0000\u0000" + // 27705 - 27709
-                "\u0000\u0000\u8EA2\uA5A5\u0000\u0000\u8EA2\uA8ED\u0000\u0000" + // 27710 - 27714
-                "\u8EA2\uA8EF\u0000\uCFD2\u0000\u0000\u0000\u0000\u0000\uCFD4" + // 27715 - 27719
-                "\u8EA2\uA8EC\u8EA2\uA8EE\u0000\uCFD3\u8EA2\uA8F1\u8EA2\uA8F0" + // 27720 - 27724
-                "\u8EA2\uA8F2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 27725 - 27729
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uADD7" + // 27730 - 27734
-                "\u8EA2\uADD5\u0000\uD3DF\u8EA2\uADD4\u0000\uD3E4\u0000\uD3E1" + // 27735 - 27739
-                "\u0000\uD3DE\u0000\u0000\u0000\uD3E5\u0000\u0000\u0000\uD3E0" + // 27740 - 27744
-                "\u0000\uD3E3\u0000\u0000\u0000\uD3E2\u8EA2\uADD6\u0000\u0000" + // 27745 - 27749
-                "\u0000\uD3DD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD8CF" + // 27750 - 27754
-                "\u8EA2\uB3AF\u8EA2\uB3B5\u0000\uD8CC\u0000\uD8D3\u0000\u0000" + // 27755 - 27759
-                "\u0000\uD8CE\u8EA2\uB3B2\u8EA2\uB3B4\u0000\uD8D1\u8EA2\uB3AE" + // 27760 - 27764
-                "\u8EA2\uB3B1\u0000\uD4B1\u0000\u0000\u0000\u0000\u0000\u0000" + // 27765 - 27769
-                "\u0000\u0000\u8EA2\uADEA\u0000\uD4AA\u8EA2\uADEB\u0000\u0000" + // 27770 - 27774
-                "\u0000\uD4BF\u0000\u0000\u0000\uD4B6\u0000\uD4A1\u0000\uD4A2" + // 27775 - 27779
-                "\u8EA2\uADFE\u0000\uD9A4\u0000\u0000\u0000\uD4AF\u0000\uD4AE" + // 27780 - 27784
-                "\u8EA2\uADEC\u0000\uD4B2\u8EA2\uB3DE\u0000\uD4A9\u8EA2\uADF7" + // 27785 - 27789
-                "\u0000\uD4B8\u0000\uD4B7\u0000\uD4AD\u8EA2\uADEF\u8EA2\uADF8" + // 27790 - 27794
-                "\u0000\u0000\u8EA2\uADE9\u0000\uD4AC\u8EA2\uADF9\u0000\uD4B5" + // 27795 - 27799
-                "\u8EA2\uADED\u0000\uD4A3\u0000\u0000\u0000\uD4A6\u0000\uD4A5" + // 27800 - 27804
-                "\u8EA2\uADFA\u0000\uD4B3\u0000\uD4A8\u0000\uD4BC\u0000\uD4BE" + // 27805 - 27809
-                "\u8EA2\uADF4\u0000\uD4BB\u0000\u0000\u8EA2\uADFC\u8EA2\uADEE" + // 27810 - 27814
-                "\u8EA2\uADFD\u0000\u0000\u8EA2\uADF2\u0000\u0000\u8EA2\uADFB" + // 27815 - 27819
-                "\u0000\u0000\u8EA2\uADF3\u0000\u0000\u0000\u0000\u0000\u0000" + // 27820 - 27824
-                "\u0000\u0000\u0000\uD4AB\u0000\u0000\u0000\u0000\u0000\u0000" + // 27825 - 27829
-                "\u0000\uE3AA\u8EA2\uC1D6\u8EA2\uC1D7\u0000\uA7A6\u0000\uC4A7" + // 27830 - 27834
-                "\u0000\u0000\u0000\uC4E8\u0000\u0000\u0000\u0000\u0000\uCBE7" + // 27835 - 27839
-                "\u0000\uC4A8\u8EA2\uA1A9\u0000\uC4C0\u0000\u0000\u0000\u0000" + // 27840 - 27844
-                "\u0000\uC4E9\u0000\uC4EB\u8EA2\uA1B1\u0000\uC4EC\u0000\uC4EA" + // 27845 - 27849
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC7A7\u0000\u0000" + // 27850 - 27854
-                "\u0000\uCBE8\u0000\u0000\u0000\u0000\u0000\uCBE9\u0000\uCFE7" + // 27855 - 27859
-                "\u0000\uA7A8\u0000\uC4C1\u0000\uC4ED\u0000\u0000\u0000\uC7A8" + // 27860 - 27864
-                "\u0000\uC7AA\u0000\uC7A9\u0000\u0000\u0000\uC8EC\u0000\u0000" + // 27865 - 27869
-                "\u0000\u0000\u0000\uCBEA\u0000\uCBEB\u0000\uCFE8\u0000\uCFE9" + // 27870 - 27874
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD3FE" + // 27875 - 27879
-                "\u0000\u0000\u0000\u0000\u8EA2\uC1D8\u0000\u0000\u0000\u0000" + // 27880 - 27884
-                "\u8EA2\uEDC4\u0000\uC4A9\u0000\u0000\u0000\u0000\u0000\u0000" + // 27885 - 27889
-                "\u0000\u0000\u0000\u0000\u8EA2\uAEA5\u8EA2\uAEA6\u0000\uD4C6" + // 27890 - 27894
-                "\u0000\u0000\u8EA2\uAEA7\u0000\u0000\u8EA2\uAEA4\u0000\uD4C7" + // 27895 - 27899
-                "\u0000\uD4C5\u0000\uD4C4\u8EA2\uAEA8\u0000\u0000\u8EA2\uB3EB" + // 27900 - 27904
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uBAC5\u0000\u0000" + // 27905 - 27909
-                "\u0000\u0000\u8EA2\uC1EA\u8EA2\uC9A7\u0000\u0000\u0000\u0000" + // 27910 - 27914
-                "\u0000\u0000\u0000\uECA9\u0000\uF0B7\u8EA2\uD6C4\u0000\u0000" + // 27915 - 27919
-                "\u0000\uC4AD\u0000\uC4BB\u0000\u0000\u0000\u0000\u0000\u0000" + // 27920 - 27924
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 27925 - 27929
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 27930 - 27934
-                "\u0000\u0000\u0000\uD9A9\u0000\uDEB3\u0000\u0000\u0000\uE8A1" + // 27935 - 27939
-                "\u0000\u0000\u8EA2\uA1A3\u0000\uC4FE\u0000\u0000\u0000\uC5F9" + // 27940 - 27944
-                "\u0000\uC5F7\u0000\uC5F8\u0000\u0000\u0000\u0000\u0000\uCCAA" + // 27945 - 27949
-                "\u0000\u0000\u0000\u0000\u0000\uE6AD\u0000\u0000\u0000\u0000" + // 27950 - 27954
-                "\u0000\u0000\u8EA2\uC6D8\u0000\u0000\u0000\u0000\u0000\u0000" + // 27955 - 27959
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uC6D4\u8EA2\uC6FA" + // 27960 - 27964
-                "\u8EA2\uC6D3\u0000\uEAE8\u8EA2\uCDDA\u0000\u0000\u0000\u0000" + // 27965 - 27969
-                "\u8EA2\uCDC9\u0000\u0000\u0000\u0000\u8EA2\uCDB3\u8EA2\uCDD1" + // 27970 - 27974
-                "\u0000\uEAE0\u8EA2\uCDC2\u8EA2\uCDCC\u0000\uEAE3\u8EA2\uCDC5" + // 27975 - 27979
-                "\u0000\uEAE1\u8EA2\uCDB6\u8EA2\uCDD4\u8EA2\uCDB5\u8EA2\uCDC8" + // 27980 - 27984
-                "\u0000\u0000\u8EA2\uCDB4\u0000\u0000\u0000\u0000\u8EA2\uCDC6" + // 27985 - 27989
-                "\u8EA2\uCDCF\u8EA2\uCDCD\u8EA2\uCDC1\u8EA2\uCDBC\u8EA2\uCDBA" + // 27990 - 27994
-                "\u0000\u0000\u8EA2\uCDBB\u8EA2\uCDCE\u8EA2\uCDD9\u8EA2\uCDC3" + // 27995 - 27999
-                "\u0000\uEAE2\u0000\u0000\u8EA2\uCDBE\u0000\u0000\u8EA2\uCDD2" + // 28000 - 28004
-                "\u0000\u0000\u0000\uEAE5\u8EA2\uCDBD\u8EA2\uCDB7\u8EA2\uCDC7" + // 28005 - 28009
-                "\u0000\uEAE9\u0000\u0000\u0000\u0000\u0000\uEADD\u8EA2\uA9AF" + // 28010 - 28014
-                "\u8EA2\uA9A5\u0000\uCFFB\u0000\uCFF2\u0000\uCFFA\u8EA2\uA8FE" + // 28015 - 28019
-                "\u0000\u0000\u8EA2\uA9AC\u0000\u0000\u8EA2\uA9A3\u0000\uCFF6" + // 28020 - 28024
-                "\u8EA2\uA9A4\u0000\u0000\u8EA2\uA8FD\u0000\uCFFD\u0000\uCFF0" + // 28025 - 28029
-                "\u0000\uCFF9\u0000\uCFEF\u0000\u0000\u8EA2\uA9A1\u8EA2\uA9A6" + // 28030 - 28034
-                "\u0000\u0000\u8EA2\uA9AD\u0000\uCFF7\u0000\uCFF4\u8EA2\uA9A8" + // 28035 - 28039
-                "\u0000\uCFFC\u8EA2\uA9AB\u8EA2\uA9A7\u0000\uCFF1\u0000\uCFFE" + // 28040 - 28044
-                "\u0000\uCFF5\u0000\uCFEE\u0000\uCFEA\u0000\u0000\u0000\u0000" + // 28045 - 28049
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 28050 - 28054
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA9B1\u0000\u0000" + // 28055 - 28059
-                "\u0000\uD4BA\u0000\uD4A4\u0000\u0000\u0000\uD4B4\u0000\u0000" + // 28060 - 28064
-                "\u0000\uD4B9\u8EA2\uADF1\u8EA2\uADF0\u8EA2\uADF5\u8EA2\uADF6" + // 28065 - 28069
-                "\u0000\uD4A7\u0000\u0000\u0000\uD4B0\u0000\u0000\u0000\u0000" + // 28070 - 28074
-                "\u0000\u0000\u0000\uD4BD\u0000\u0000\u0000\uD5F2\u0000\uD5EB" + // 28075 - 28079
-                "\u0000\uD5EE\u0000\u0000\u0000\uD5F1\u0000\u0000\u8EA2\uAFD7" + // 28080 - 28084
-                "\u0000\u0000\u0000\uD5EC\u8EA2\uAFD5\u0000\u0000\u0000\uD5F0" + // 28085 - 28089
-                "\u0000\u0000\u0000\u0000\u0000\uD5ED\u0000\u0000\u8EA2\uAFD8" + // 28090 - 28094
-                "\u0000\uD5EF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 28095 - 28099
-                "\u0000\u0000\u0000\u0000\u8EA2\uB5EE\u0000\uDBA5\u8EA2\uB5ED" + // 28100 - 28104
-                "\u8EA2\uB5EF\u0000\uDBA4\u0000\uDBA9\u8EA2\uAFD6\u0000\u0000" + // 28105 - 28109
-                "\u8EA2\uB5EC\u8EA2\uB5F0\u0000\u0000\u0000\uDBA6\u8EA2\uB5EB" + // 28110 - 28114
-                "\u0000\uDBA8\u0000\u0000\u0000\uDBA7\u0000\u0000\u8EA2\uBCCA" + // 28115 - 28119
-                "\u0000\u0000\u8EA2\uBCC5\u0000\u0000\u0000\uDFDB\u0000\uDFDF" + // 28120 - 28124
-                "\u0000\uDFDC\u8EA2\uBCC8\u8EA2\uBCCB\u0000\u0000\u0000\uDFDD" + // 28125 - 28129
-                "\u0000\u0000\u0000\uDFDE\u0000\uDFE3\u8EA2\uC3CD\u8EA2\uBCC9" + // 28130 - 28134
-                "\u0000\uDFE1\u8EA2\uBCC6\u8EA2\uBCC4\u0000\u0000\u0000\uDFE2" + // 28135 - 28139
-                "\u0000\u0000\u8EA2\uA7C6\u0000\u0000\u8EA2\uA7C4\u8EA2\uA7BC" + // 28140 - 28144
-                "\u8EA2\uA7B4\u8EA2\uA7BB\u0000\uCEAD\u0000\u0000\u0000\uCEB3" + // 28145 - 28149
-                "\u0000\u0000\u0000\uCEA7\u8EA2\uA7BF\u8EA2\uA7BE\u8EA2\uA7B6" + // 28150 - 28154
-                "\u0000\u0000\u0000\uCEB5\u8EA2\uA7C2\u8EA2\uA7B7\u0000\uCEB8" + // 28155 - 28159
-                "\u8EA2\uA7C9\u0000\uCEA8\u0000\u0000\u0000\uCEAF\u8EA2\uA7BA" + // 28160 - 28164
-                "\u8EA2\uA7C3\u0000\uCEB7\u0000\u0000\u0000\uCEAA\u0000\uCEAE" + // 28165 - 28169
-                "\u0000\u0000\u8EA2\uA7C1\u0000\u0000\u0000\u0000\u0000\u0000" + // 28170 - 28174
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 28175 - 28179
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 28180 - 28184
-                "\u0000\u0000\u8EA2\uABBD\u0000\uD1DF\u0000\uD1EC\u0000\u0000" + // 28185 - 28189
-                "\u8EA2\uABB8\u8EA2\uABAE\u0000\uD1E5\u8EA2\uABAC\u0000\uD1DE" + // 28190 - 28194
-                "\u8EA2\uABA7\u0000\uD1E8\u8EA2\uABB4\u8EA2\uABA1\u8EA2\uABA3" + // 28195 - 28199
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uD9CB" + // 28200 - 28204
-                "\u0000\uF4F4\u8EA2\uDECE\u0000\u0000\u0000\u0000\u0000\uF7A7" + // 28205 - 28209
-                "\u0000\u0000\u8EA2\uE6C4\u8EA2\uE6C3\u0000\uFAAD\u8EA2\uEBFB" + // 28210 - 28214
-                "\u0000\u0000\u8EA2\uEDF0\u0000\uFCE4\u8EA2\uA2E9\u0000\u0000" + // 28215 - 28219
-                "\u0000\u0000\u0000\uCFAC\u0000\uCBB8\u0000\u0000\u0000\u0000" + // 28220 - 28224
-                "\u8EA2\uACEE\u0000\u0000\u0000\u0000\u8EA2\uB2A4\u8EA2\uB1FD" + // 28225 - 28229
-                "\u8EA2\uB2A3\u8EA2\uB2A1\u0000\uD7CE\u8EA2\uB2A2\u8EA2\uB1FE" + // 28230 - 28234
-                "\u0000\u0000\u8EA2\uB8B6\u0000\u0000\u8EA2\uBFA4\u8EA2\uBFA5" + // 28235 - 28239
-                "\u8EA2\uC6B0\u8EA2\uC6B1\u0000\uE5F5\u0000\uE5F6\u8EA2\uC6AF" + // 28240 - 28244
-                "\u8EA2\uC6B2\u8EA2\uC6AE\u0000\uE5F4\u0000\u0000\u0000\uEAC8" + // 28245 - 28249
-                "\u0000\u0000\u0000\uE5F7\u8EA2\uCDA3\u0000\u0000\u0000\uEEC7" + // 28250 - 28254
-                "\u8EA2\uD2F9\u0000\uEEC8\u0000\u0000\u0000\uF1F1\u8EA2\uD9CE" + // 28255 - 28259
-                "\u8EA2\uD9CC\u8EA2\uD9CD\u8EA2\uDED1\u8EA2\uDED0\u8EA2\uDECF" + // 28260 - 28264
-                "\u8EA2\uA5B6\u8EA2\uA5C2\u8EA2\uA5C9\u0000\uCBF5\u8EA2\uA5BB" + // 28265 - 28269
-                "\u8EA2\uA5B4\u0000\uCBF4\u8EA2\uA5B7\u0000\uCBF8\u8EA2\uA5BA" + // 28270 - 28274
-                "\u0000\u0000\u0000\uCBF3\u0000\u0000\u0000\uCBEE\u0000\u0000" + // 28275 - 28279
-                "\u0000\uCBFD\u8EA2\uA5C4\u0000\uCBFE\u8EA2\uA5C8\u0000\u0000" + // 28280 - 28284
-                "\u8EA2\uA5C6\u8EA2\uA5CA\u0000\uCBFB\u8EA2\uA5BE\u8EA2\uA5B2" + // 28285 - 28289
-                "\u0000\u0000\u8EA2\uA5C0\u0000\uCBF2\u8EA2\uA5C5\u0000\uCBED" + // 28290 - 28294
-                "\u8EA2\uA5C7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 28295 - 28299
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 28300 - 28304
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 28305 - 28309
-                "\u0000\u0000\u0000\uCFF8\u0000\uCFEC\u0000\u0000\u0000\u0000" + // 28310 - 28314
-                "\u8EA2\uA9A2\u8EA2\uA9AA\u0000\u0000\u0000\uCFEB\u0000\uCFF3" + // 28315 - 28319
-                "\u0000\uD0A1\u0000\u0000\u8EA2\uA9B0\u8EA2\uA9AE\u8EA2\uA9A9" + // 28320 - 28324
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCFED\u8EA2\uA1F0" + // 28325 - 28329
-                "\u0000\uC7BA\u8EA2\uA1F4\u0000\u0000\u8EA2\uA1F8\u8EA2\uA1F5" + // 28330 - 28334
-                "\u0000\u0000\u0000\u0000\u8EA2\uA1F2\u0000\uC7AC\u0000\uC7AE" + // 28335 - 28339
-                "\u0000\uC7BB\u0000\u0000\u0000\uC7B0\u8EA2\uA1EA\u0000\uC7B3" + // 28340 - 28344
-                "\u0000\uC7B1\u0000\uC7B2\u8EA2\uA1FA\u8EA2\uA1F7\u8EA2\uA1EE" + // 28345 - 28349
-                "\u0000\uC7AF\u0000\u0000\u0000\u0000\u8EA2\uA1EB\u0000\uC7AD" + // 28350 - 28354
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA1F3\u0000\u0000" + // 28355 - 28359
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA1F6\u0000\u0000" + // 28360 - 28364
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 28365 - 28369
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u8EA2\uA1EC\u8EA2\uA3A8" + // 28370 - 28374
-                "\u0000\u0000\u0000\uC9A4\u0000\uC8F5\u0000\u0000\u0000\u0000" + // 28375 - 28379
-                "\u8EA2\uA3A9\u0000\uC8F2\u0000\u0000\u0000\uC9A6\u0000\u0000" + // 28380 - 28384
-                "\u0000\uC8FA\u0000\u0000\u0000\uC8F9\u8EA2\uA2FB\u0000\uC8FD" + // 28385 - 28389
-                "\u0000\uC8F8\u8EA2\uA3A2\u8EA2\uA3AA\u0000\uC4EF\u0000\uC4EE" + // 28390 - 28394
-                "\u8EA2\uA1B2\u0000\uC4F0\u0000\uC4F6\u0000\u0000\u0000\uC4F1" + // 28395 - 28399
-                "\u0000\uC4F2\u8EA2\uA1B4\u8EA2\uA1B3\u0000\uC4F4\u0000\uC4F5" + // 28400 - 28404
-                "\u0000\u0000\u0000\uC4F3\u0000\u0000\u0000\u0000\u0000\u0000" + // 28405 - 28409
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC5EA\u0000\uC5EB" + // 28410 - 28414
-                "\u0000\uC5EC\u0000\uC5ED\u0000\uC5E9\u0000\uC5F0\u8EA2\uA1CA" + // 28415 - 28419
-                "\u0000\u0000\u8EA2\uA1C6\u8EA2\uA1C9\u0000\uC5F1\u0000\uC6A3" + // 28420 - 28424
-                "\u0000\u0000\u8EA2\uA1C8\u0000\u0000\u0000\uC5EE\u0000\uC5EF" + // 28425 - 28429
-                "\u0000\uC5E8\u0000\u0000\u0000\u0000\u8EA2\uA1C5\u8EA2\uA1C7" + // 28430 - 28434
-                "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 28435 - 28439
-                "\u0000\u0000\u0000\uC7B7\u8EA2\uA1EF\u0000\uC7B4\u0000\uC7B8" + // 28440 - 28444
-                "\u8EA2\uA1F9\u8EA2\uA1ED\u0000\uC7B5\u8EA2\uA1F1\u0000\u0000" + // 28445 - 28449
-                "\u0000\u0000\u0000\u0000\u0000\uC7B6\u0000\u0000\u0000\uC7B9" + // 28450 - 28454
-                "\u0000\u0000\u0000\uC7AB"
-                ;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/ISCII91.java b/ojluni/src/main/java/sun/nio/cs/ext/ISCII91.java
deleted file mode 100755
index 50c7663..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/ISCII91.java
+++ /dev/null
@@ -1,989 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.
- */
-
-/*
- */
-
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.Surrogate;
-import sun.nio.cs.HistoricallyNamedCharset;
-
-public class ISCII91 extends Charset implements HistoricallyNamedCharset
-{
-    private static final char NUKTA_CHAR = '\u093c';
-    private static final char HALANT_CHAR = '\u094d';
-    private static final byte NO_CHAR = (byte)255;
-
-    public ISCII91() {
-        super("x-ISCII91", ExtendedCharsets.aliasesFor("x-ISCII91"));
-    }
-
-    public String historicalName() {
-        return "ISCII91";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof ISCII91));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    private static final char[] directMapTable = {
-        '\u0000', // ascii character
-        '\u0001', // ascii character
-        '\u0002', // ascii character
-        '\u0003', // ascii character
-        '\u0004', // ascii character
-        '\u0005', // ascii character
-        '\u0006', // ascii character
-        '\u0007', // ascii character
-        '\u0008', // ascii character
-        '\u0009', // ascii character
-        '\012', // ascii character
-        '\u000b', // ascii character
-        '\u000c', // ascii character
-        '\015', // ascii character
-        '\u000e', // ascii character
-        '\u000f', // ascii character
-        '\u0010', // ascii character
-        '\u0011', // ascii character
-        '\u0012', // ascii character
-        '\u0013', // ascii character
-        '\u0014', // ascii character
-        '\u0015', // ascii character
-        '\u0016', // ascii character
-        '\u0017', // ascii character
-        '\u0018', // ascii character
-        '\u0019', // ascii character
-        '\u001a', // ascii character
-        '\u001b', // ascii character
-        '\u001c', // ascii character
-        '\u001d', // ascii character
-        '\u001e', // ascii character
-        '\u001f', // ascii character
-        '\u0020', // ascii character
-        '\u0021', // ascii character
-        '\u0022', // ascii character
-        '\u0023', // ascii character
-        '\u0024', // ascii character
-        '\u0025', // ascii character
-        '\u0026', // ascii character
-        (char)0x0027, // '\u0027' control -- ascii character
-        '\u0028', // ascii character
-        '\u0029', // ascii character
-        '\u002a', // ascii character
-        '\u002b', // ascii character
-        '\u002c', // ascii character
-        '\u002d', // ascii character
-        '\u002e', // ascii character
-        '\u002f', // ascii character
-        '\u0030', // ascii character
-        '\u0031', // ascii character
-        '\u0032', // ascii character
-        '\u0033', // ascii character
-        '\u0034', // ascii character
-        '\u0035', // ascii character
-        '\u0036', // ascii character
-        '\u0037', // ascii character
-        '\u0038', // ascii character
-        '\u0039', // ascii character
-        '\u003a', // ascii character
-        '\u003b', // ascii character
-        '\u003c', // ascii character
-        '\u003d', // ascii character
-        '\u003e', // ascii character
-        '\u003f', // ascii character
-        '\u0040', // ascii character
-        '\u0041', // ascii character
-        '\u0042', // ascii character
-        '\u0043', // ascii character
-        '\u0044', // ascii character
-        '\u0045', // ascii character
-        '\u0046', // ascii character
-        '\u0047', // ascii character
-        '\u0048', // ascii character
-        '\u0049', // ascii character
-        '\u004a', // ascii character
-        '\u004b', // ascii character
-        '\u004c', // ascii character
-        '\u004d', // ascii character
-        '\u004e', // ascii character
-        '\u004f', // ascii character
-        '\u0050', // ascii character
-        '\u0051', // ascii character
-        '\u0052', // ascii character
-        '\u0053', // ascii character
-        '\u0054', // ascii character
-        '\u0055', // ascii character
-        '\u0056', // ascii character
-        '\u0057', // ascii character
-        '\u0058', // ascii character
-        '\u0059', // ascii character
-        '\u005a', // ascii character
-        '\u005b', // ascii character
-        '\\',// '\u005c' -- ascii character
-        '\u005d', // ascii character
-        '\u005e', // ascii character
-        '\u005f', // ascii character
-        '\u0060', // ascii character
-        '\u0061', // ascii character
-        '\u0062', // ascii character
-        '\u0063', // ascii character
-        '\u0064', // ascii character
-        '\u0065', // ascii character
-        '\u0066', // ascii character
-        '\u0067', // ascii character
-        '\u0068', // ascii character
-        '\u0069', // ascii character
-        '\u006a', // ascii character
-        '\u006b', // ascii character
-        '\u006c', // ascii character
-        '\u006d', // ascii character
-        '\u006e', // ascii character
-        '\u006f', // ascii character
-        '\u0070', // ascii character
-        '\u0071', // ascii character
-        '\u0072', // ascii character
-        '\u0073', // ascii character
-        '\u0074', // ascii character
-        '\u0075', // ascii character
-        '\u0076', // ascii character
-        '\u0077', // ascii character
-        '\u0078', // ascii character
-        '\u0079', // ascii character
-        '\u007a', // ascii character
-        '\u007b', // ascii character
-        '\u007c', // ascii character
-        '\u007d', // ascii character
-        '\u007e', // ascii character
-        '\u007f', // ascii character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\uffff', // unknown character
-        '\u0901', // a1 -- Vowel-modifier CHANDRABINDU
-        '\u0902', // a2 -- Vowel-modifier ANUSWAR
-        '\u0903', // a3 -- Vowel-modifier VISARG
-
-        '\u0905', // a4 -- Vowel A
-        '\u0906', // a5 -- Vowel AA
-        '\u0907', // a6 -- Vowel I
-        '\u0908', // a7 -- Vowel II
-        '\u0909', // a8 -- Vowel U
-        '\u090a', // a9 -- Vowel UU
-        '\u090b', // aa -- Vowel RI
-        '\u090e', // ab -- Vowel E ( Southern Scripts )
-        '\u090f', // ac -- Vowel EY
-        '\u0910', // ad -- Vowel AI
-        '\u090d', // ae -- Vowel AYE ( Devanagari Script )
-        '\u0912', // af -- Vowel O ( Southern Scripts )
-        '\u0913', // b0 -- Vowel OW
-        '\u0914', // b1 -- Vowel AU
-        '\u0911', // b2 -- Vowel AWE ( Devanagari Script )
-        '\u0915', // b3 -- Consonant KA
-        '\u0916', // b4 -- Consonant KHA
-        '\u0917', // b5 -- Consonant GA
-        '\u0918', // b6 -- Consonant GHA
-        '\u0919', // b7 -- Consonant NGA
-        '\u091a', // b8 -- Consonant CHA
-        '\u091b', // b9 -- Consonant CHHA
-        '\u091c', // ba -- Consonant JA
-        '\u091d', // bb -- Consonant JHA
-        '\u091e', // bc -- Consonant JNA
-        '\u091f', // bd -- Consonant Hard TA
-        '\u0920', // be -- Consonant Hard THA
-        '\u0921', // bf -- Consonant Hard DA
-        '\u0922', // c0 -- Consonant Hard DHA
-        '\u0923', // c1 -- Consonant Hard NA
-        '\u0924', // c2 -- Consonant Soft TA
-        '\u0925', // c3 -- Consonant Soft THA
-        '\u0926', // c4 -- Consonant Soft DA
-        '\u0927', // c5 -- Consonant Soft DHA
-        '\u0928', // c6 -- Consonant Soft NA
-        '\u0929', // c7 -- Consonant NA ( Tamil )
-        '\u092a', // c8 -- Consonant PA
-        '\u092b', // c9 -- Consonant PHA
-        '\u092c', // ca -- Consonant BA
-        '\u092d', // cb -- Consonant BHA
-        '\u092e', // cc -- Consonant MA
-        '\u092f', // cd -- Consonant YA
-        '\u095f', // ce -- Consonant JYA ( Bengali, Assamese & Oriya )
-        '\u0930', // cf -- Consonant RA
-        '\u0931', // d0 -- Consonant Hard RA ( Southern Scripts )
-        '\u0932', // d1 -- Consonant LA
-        '\u0933', // d2 -- Consonant Hard LA
-        '\u0934', // d3 -- Consonant ZHA ( Tamil & Malayalam )
-        '\u0935', // d4 -- Consonant VA
-        '\u0936', // d5 -- Consonant SHA
-        '\u0937', // d6 -- Consonant Hard SHA
-        '\u0938', // d7 -- Consonant SA
-        '\u0939', // d8 -- Consonant HA
-
-        '\u200d', // d9 -- Consonant INVISIBLE
-        '\u093e', // da -- Vowel Sign AA
-
-        '\u093f', // db -- Vowel Sign I
-        '\u0940', // dc -- Vowel Sign II
-        '\u0941', // dd -- Vowel Sign U
-        '\u0942', // de -- Vowel Sign UU
-        '\u0943', // df -- Vowel Sign RI
-        '\u0946', // e0 -- Vowel Sign E ( Southern Scripts )
-        '\u0947', // e1 -- Vowel Sign EY
-        '\u0948', // e2 -- Vowel Sign AI
-        '\u0945', // e3 -- Vowel Sign AYE ( Devanagari Script )
-        '\u094a', // e4 -- Vowel Sign O ( Southern Scripts )
-        '\u094b', // e5 -- Vowel Sign OW
-        '\u094c', // e6 -- Vowel Sign AU
-        '\u0949', // e7 -- Vowel Sign AWE ( Devanagari Script )
-
-        '\u094d', // e8 -- Vowel Omission Sign ( Halant )
-        '\u093c', // e9 -- Diacritic Sign ( Nukta )
-        '\u0964', // ea -- Full Stop ( Viram, Northern Scripts )
-
-        '\uffff', // eb -- This position shall not be used
-        '\uffff', // ec -- This position shall not be used
-        '\uffff', // ed -- This position shall not be used
-        '\uffff', // ee -- This position shall not be used
-
-        '\ufffd', // ef -- Attribute Code ( ATR )
-        '\ufffd', // f0 -- Extension Code ( EXT )
-
-        '\u0966', // f1 -- Digit 0
-        '\u0967', // f2 -- Digit 1
-        '\u0968', // f3 -- Digit 2
-        '\u0969', // f4 -- Digit 3
-        '\u096a', // f5 -- Digit 4
-        '\u096b', // f6 -- Digit 5
-        '\u096c', // f7 -- Digit 6
-        '\u096d', // f8 -- Digit 7
-        '\u096e', // f9 -- Digit 8
-        '\u096f', // fa -- Digit 9
-
-        '\uffff', // fb -- This position shall not be used
-        '\uffff', // fc -- This position shall not be used
-        '\uffff', // fd -- This position shall not be used
-        '\uffff', // fe -- This position shall not be used
-        '\uffff'  // ff -- This position shall not be used
-    }; //end of table definition
-
-    /**
-     * This accessor is temporarily supplied while sun.io
-     * converters co-exist with the sun.nio.cs.{ext} charset coders
-     * These facilitate sharing of conversion tables between the
-     * two co-existing implementations. When sun.io converters
-     * are made extinct these will be unnecessary and should be removed
-     */
-
-    public static char[] getDirectMapTable() {
-        return directMapTable;
-    }
-
-    private static final byte[] encoderMappingTable = {
-    NO_CHAR,NO_CHAR, //0900 <reserved>
-    (byte)161,NO_CHAR, //0901 -- DEVANAGARI SIGN CANDRABINDU = anunasika
-    (byte)162,NO_CHAR, //0902 -- DEVANAGARI SIGN ANUSVARA = bindu
-    (byte)163,NO_CHAR, //0903 -- DEVANAGARI SIGN VISARGA
-    NO_CHAR,NO_CHAR, //0904 <reserved>
-    (byte)164,NO_CHAR, //0905 -- DEVANAGARI LETTER A
-    (byte)165,NO_CHAR, //0906 -- DEVANAGARI LETTER AA
-    (byte)166,NO_CHAR, //0907 -- DEVANAGARI LETTER I
-    (byte)167,NO_CHAR, //0908 -- DEVANAGARI LETTER II
-    (byte)168,NO_CHAR, //0909 -- DEVANAGARI LETTER U
-    (byte)169,NO_CHAR, //090a -- DEVANAGARI LETTER UU
-    (byte)170,NO_CHAR, //090b -- DEVANAGARI LETTER VOCALIC R
-    (byte)166,(byte)233, //090c -- DEVANAGARI LETTER VOVALIC L
-    (byte)174,NO_CHAR, //090d -- DEVANAGARI LETTER CANDRA E
-    (byte)171,NO_CHAR, //090e -- DEVANAGARI LETTER SHORT E
-    (byte)172,NO_CHAR, //090f -- DEVANAGARI LETTER E
-    (byte)173,NO_CHAR, //0910 -- DEVANAGARI LETTER AI
-    (byte)178,NO_CHAR, //0911 -- DEVANAGARI LETTER CANDRA O
-    (byte)175,NO_CHAR, //0912 -- DEVANAGARI LETTER SHORT O
-    (byte)176,NO_CHAR, //0913 -- DEVANAGARI LETTER O
-    (byte)177,NO_CHAR, //0914 -- DEVANAGARI LETTER AU
-    (byte)179,NO_CHAR, //0915 -- DEVANAGARI LETTER KA
-    (byte)180,NO_CHAR, //0916 -- DEVANAGARI LETTER KHA
-    (byte)181,NO_CHAR, //0917 -- DEVANAGARI LETTER GA
-    (byte)182,NO_CHAR, //0918 -- DEVANAGARI LETTER GHA
-    (byte)183,NO_CHAR, //0919 -- DEVANAGARI LETTER NGA
-    (byte)184,NO_CHAR, //091a -- DEVANAGARI LETTER CA
-    (byte)185,NO_CHAR, //091b -- DEVANAGARI LETTER CHA
-    (byte)186,NO_CHAR, //091c -- DEVANAGARI LETTER JA
-    (byte)187,NO_CHAR, //091d -- DEVANAGARI LETTER JHA
-    (byte)188,NO_CHAR, //091e -- DEVANAGARI LETTER NYA
-    (byte)189,NO_CHAR, //091f -- DEVANAGARI LETTER TTA
-    (byte)190,NO_CHAR, //0920 -- DEVANAGARI LETTER TTHA
-    (byte)191,NO_CHAR, //0921 -- DEVANAGARI LETTER DDA
-    (byte)192,NO_CHAR, //0922 -- DEVANAGARI LETTER DDHA
-    (byte)193,NO_CHAR, //0923 -- DEVANAGARI LETTER NNA
-    (byte)194,NO_CHAR, //0924 -- DEVANAGARI LETTER TA
-    (byte)195,NO_CHAR, //0925 -- DEVANAGARI LETTER THA
-    (byte)196,NO_CHAR, //0926 -- DEVANAGARI LETTER DA
-    (byte)197,NO_CHAR, //0927 -- DEVANAGARI LETTER DHA
-    (byte)198,NO_CHAR, //0928 -- DEVANAGARI LETTER NA
-    (byte)199,NO_CHAR, //0929 -- DEVANAGARI LETTER NNNA <=> 0928 + 093C
-    (byte)200,NO_CHAR, //092a -- DEVANAGARI LETTER PA
-    (byte)201,NO_CHAR, //092b -- DEVANAGARI LETTER PHA
-    (byte)202,NO_CHAR, //092c -- DEVANAGARI LETTER BA
-    (byte)203,NO_CHAR, //092d -- DEVANAGARI LETTER BHA
-    (byte)204,NO_CHAR, //092e -- DEVANAGARI LETTER MA
-    (byte)205,NO_CHAR, //092f -- DEVANAGARI LETTER YA
-    (byte)207,NO_CHAR, //0930 -- DEVANAGARI LETTER RA
-    (byte)208,NO_CHAR, //0931 -- DEVANAGARI LETTER RRA <=> 0930 + 093C
-    (byte)209,NO_CHAR, //0932 -- DEVANAGARI LETTER LA
-    (byte)210,NO_CHAR, //0933 -- DEVANAGARI LETTER LLA
-    (byte)211,NO_CHAR, //0934 -- DEVANAGARI LETTER LLLA <=> 0933 + 093C
-    (byte)212,NO_CHAR, //0935 -- DEVANAGARI LETTER VA
-    (byte)213,NO_CHAR, //0936 -- DEVANAGARI LETTER SHA
-    (byte)214,NO_CHAR, //0937 -- DEVANAGARI LETTER SSA
-    (byte)215,NO_CHAR, //0938 -- DEVANAGARI LETTER SA
-    (byte)216,NO_CHAR, //0939 -- DEVANAGARI LETTER HA
-    NO_CHAR,NO_CHAR, //093a <reserved>
-    NO_CHAR,NO_CHAR, //093b <reserved>
-    (byte)233,NO_CHAR, //093c -- DEVANAGARI SIGN NUKTA
-    (byte)234,(byte)233, //093d -- DEVANAGARI SIGN AVAGRAHA
-    (byte)218,NO_CHAR, //093e -- DEVANAGARI VOWEL SIGN AA
-    (byte)219,NO_CHAR, //093f -- DEVANAGARI VOWEL SIGN I
-    (byte)220,NO_CHAR, //0940 -- DEVANAGARI VOWEL SIGN II
-    (byte)221,NO_CHAR, //0941 -- DEVANAGARI VOWEL SIGN U
-    (byte)222,NO_CHAR, //0942 -- DEVANAGARI VOWEL SIGN UU
-    (byte)223,NO_CHAR, //0943 -- DEVANAGARI VOWEL SIGN VOCALIC R
-    (byte)223,(byte)233, //0944 -- DEVANAGARI VOWEL SIGN VOCALIC RR
-    (byte)227,NO_CHAR, //0945 -- DEVANAGARI VOWEL SIGN CANDRA E
-    (byte)224,NO_CHAR, //0946 -- DEVANAGARI VOWEL SIGN SHORT E
-    (byte)225,NO_CHAR, //0947 -- DEVANAGARI VOWEL SIGN E
-    (byte)226,NO_CHAR, //0948 -- DEVANAGARI VOWEL SIGN AI
-    (byte)231,NO_CHAR, //0949 -- DEVANAGARI VOWEL SIGN CANDRA O
-    (byte)228,NO_CHAR, //094a -- DEVANAGARI VOWEL SIGN SHORT O
-    (byte)229,NO_CHAR, //094b -- DEVANAGARI VOWEL SIGN O
-    (byte)230,NO_CHAR, //094c -- DEVANAGARI VOWEL SIGN AU
-    (byte)232,NO_CHAR, //094d -- DEVANAGARI SIGN VIRAMA ( halant )
-    NO_CHAR,NO_CHAR, //094e <reserved>
-    NO_CHAR,NO_CHAR, //094f <reserved>
-    (byte)161,(byte)233, //0950 -- DEVANAGARI OM
-    (byte)240,(byte)181, //0951 -- DEVANAGARI STRESS SIGN UDATTA
-    (byte)240,(byte)184, //0952 -- DEVANAGARI STRESS SIGN ANUDATTA
-    (byte)254,NO_CHAR, //0953 -- DEVANAGARI GRAVE ACCENT || MISSING
-    (byte)254,NO_CHAR, //0954 -- DEVANAGARI ACUTE ACCENT || MISSING
-    NO_CHAR,NO_CHAR, //0955 <reserved>
-    NO_CHAR,NO_CHAR, //0956 <reserved>
-    NO_CHAR,NO_CHAR, //0957 <reserved>
-    (byte)179,(byte)233, //0958 -- DEVANAGARI LETTER QA <=> 0915 + 093C
-    (byte)180,(byte)233, //0959 -- DEVANAGARI LETTER KHHA <=> 0916 + 093C
-    (byte)181,(byte)233, //095a -- DEVANAGARI LETTER GHHA <=> 0917 + 093C
-    (byte)186,(byte)233, //095b -- DEVANAGARI LETTER ZA <=> 091C + 093C
-    (byte)191,(byte)233, //095c -- DEVANAGARI LETTER DDDHA <=> 0921 + 093C
-    (byte)192,(byte)233, //095d -- DEVANAGARI LETTER RHA <=> 0922 + 093C
-    (byte)201,(byte)233, //095e -- DEVANAGARI LETTER FA <=> 092B + 093C
-    (byte)206,NO_CHAR, //095f -- DEVANAGARI LETTER YYA <=> 092F + 093C
-    (byte)170,(byte)233, //0960 -- DEVANAGARI LETTER VOCALIC RR
-    (byte)167,(byte)233, //0961 -- DEVANAGARI LETTER VOCALIC LL
-    (byte)219,(byte)233, //0962 -- DEVANAGARI VOWEL SIGN VOCALIC L
-    (byte)220,(byte)233, //0963 -- DEVANAGARI VOWEL SIGN VOCALIC LL
-    (byte)234,NO_CHAR, //0964 -- DEVANAGARI DANDA ( phrase separator )
-    (byte)234,(byte)234, //0965 -- DEVANAGARI DOUBLE DANDA
-    (byte)241,NO_CHAR, //0966 -- DEVANAGARI DIGIT ZERO
-    (byte)242,NO_CHAR, //0967 -- DEVANAGARI DIGIT ONE
-    (byte)243,NO_CHAR, //0968 -- DEVANAGARI DIGIT TWO
-    (byte)244,NO_CHAR, //0969 -- DEVANAGARI DIGIT THREE
-    (byte)245,NO_CHAR, //096a -- DEVANAGARI DIGIT FOUR
-    (byte)246,NO_CHAR, //096b -- DEVANAGARI DIGIT FIVE
-    (byte)247,NO_CHAR, //096c -- DEVANAGARI DIGIT SIX
-    (byte)248,NO_CHAR, //096d -- DEVANAGARI DIGIT SEVEN
-    (byte)249,NO_CHAR, //096e -- DEVANAGARI DIGIT EIGHT
-    (byte)250,NO_CHAR, //096f -- DEVANAGARI DIGIT NINE
-    (byte)240,(byte)191,  //0970 -- DEVANAGARI ABBREVIATION SIGN
-    NO_CHAR,NO_CHAR, //0971 -- reserved
-    NO_CHAR,NO_CHAR, //0972 -- reserved
-    NO_CHAR,NO_CHAR, //0973 -- reserved
-    NO_CHAR,NO_CHAR, //0974 -- reserved
-    NO_CHAR,NO_CHAR, //0975 -- reserved
-    NO_CHAR,NO_CHAR, //0976 -- reserved
-    NO_CHAR,NO_CHAR, //0977 -- reserved
-    NO_CHAR,NO_CHAR, //0978 -- reserved
-    NO_CHAR,NO_CHAR, //0979 -- reserved
-    NO_CHAR,NO_CHAR, //097a -- reserved
-    NO_CHAR,NO_CHAR, //097b -- reserved
-    NO_CHAR,NO_CHAR, //097c -- reserved
-    NO_CHAR,NO_CHAR, //097d -- reserved
-    NO_CHAR,NO_CHAR, //097e -- reserved
-    NO_CHAR,NO_CHAR  //097f -- reserved
-    }; //end of table definition
-
-
-    /**
-     * This accessor is temporarily supplied while sun.io
-     * converters co-exist with the sun.nio.cs.{ext} charset coders
-     * These facilitate sharing of conversion tables between the
-     * two co-existing implementations. When sun.io converters
-     * are made extinct these will be unnecessary and should be removed
-     */
-
-    public static byte[] getEncoderMappingTable() {
-        return encoderMappingTable;
-    }
-
-
-    private static class Decoder extends CharsetDecoder {
-
-        private static final char ZWNJ_CHAR = '\u200c';
-        private static final char ZWJ_CHAR = '\u200d';
-        private static final char INVALID_CHAR = '\uffff';
-
-        private char contextChar = INVALID_CHAR;
-        private boolean needFlushing = false;
-
-
-        private Decoder(Charset cs) {
-            super(cs, 1.0f, 1.0f);
-        }
-
-        protected CoderResult implFlush(CharBuffer out) {
-            if(needFlushing) {
-                if (out.remaining() < 1) {
-                    return CoderResult.OVERFLOW;
-                } else {
-                    out.put(contextChar);
-                }
-            }
-            contextChar = INVALID_CHAR;
-            needFlushing = false;
-            return CoderResult.UNDERFLOW;
-        }
-
-        /*Rules:
-         * 1)ATR,EXT,following character to be replaced with '\ufffd'
-         * 2)Halant + Halant => '\u094d' (Virama) + '\u200c'(ZWNJ)
-         * 3)Halant + Nukta => '\u094d' (Virama) + '\u200d'(ZWJ)
-        */
-        private CoderResult decodeArrayLoop(ByteBuffer src,
-                                             CharBuffer dst)
-        {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-                while (sp < sl) {
-                    int index = sa[sp];
-                    index = ( index < 0 )? ( index + 255 ):index;
-                    char currentChar = directMapTable[index];
-
-                    // if the contextChar is either ATR || EXT
-                    // set the output to '\ufffd'
-                    if(contextChar == '\ufffd') {
-                        if (dl - dp < 1)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = '\ufffd';
-                        contextChar = INVALID_CHAR;
-                        needFlushing = false;
-                        sp++;
-                        continue;
-                    }
-
-                    switch(currentChar) {
-                    case '\u0901':
-                    case '\u0907':
-                    case '\u0908':
-                    case '\u090b':
-                    case '\u093f':
-                    case '\u0940':
-                    case '\u0943':
-                    case '\u0964':
-                        if(needFlushing) {
-                            if (dl - dp < 1)
-                                return CoderResult.OVERFLOW;
-                            da[dp++] = contextChar;
-                            contextChar = currentChar;
-                            sp++;
-                            continue;
-                        }
-                        contextChar = currentChar;
-                        needFlushing = true;
-                        sp++;
-                        continue;
-                    case NUKTA_CHAR:
-                        if (dl - dp < 1)
-                                return CoderResult.OVERFLOW;
-                        switch(contextChar) {
-                        case '\u0901':
-                            da[dp++] = '\u0950';
-                            break;
-                        case '\u0907':
-                            da[dp++] = '\u090c';
-                            break;
-                        case '\u0908':
-                            da[dp++] = '\u0961';
-                            break;
-                        case '\u090b':
-                            da[dp++] = '\u0960';
-                            break;
-                        case '\u093f':
-                            da[dp++] = '\u0962';
-                            break;
-                        case '\u0940':
-                            da[dp++] = '\u0963';
-                            break;
-                        case '\u0943':
-                            da[dp++] = '\u0944';
-                            break;
-                        case '\u0964':
-                            da[dp++] = '\u093d';
-                            break;
-                        case HALANT_CHAR:
-                            if(needFlushing) {
-                                da[dp++] = contextChar;
-                                contextChar = currentChar;
-                                sp++;
-                                continue;
-                            }
-                            da[dp++] = ZWJ_CHAR;
-                            break;
-                        default:
-                            if(needFlushing) {
-                                da[dp++] = contextChar;
-                                contextChar = currentChar;
-                                sp++;
-                                continue;
-                            }
-                            da[dp++] = NUKTA_CHAR;
-                        }
-                        break;
-                    case HALANT_CHAR:
-                        if (dl - dp < 1)
-                            return CoderResult.OVERFLOW;
-                        if(needFlushing) {
-                            da[dp++] = contextChar;
-                            contextChar = currentChar;
-                            sp++;
-                            continue;
-                        }
-                        if(contextChar == HALANT_CHAR) {
-                            da[dp++] = ZWNJ_CHAR;
-                            break;
-                        }
-                        da[dp++] = HALANT_CHAR;
-                        break;
-                    case INVALID_CHAR:
-                        if(needFlushing) {
-                            if (dl - dp < 1)
-                                return CoderResult.OVERFLOW;
-                            da[dp++] = contextChar;
-                            contextChar = currentChar;
-                            sp++;
-                            continue;
-                        }
-                        return CoderResult.unmappableForLength(1);
-                    default:
-                        if (dl - dp < 1)
-                            return CoderResult.OVERFLOW;
-                        if(needFlushing) {
-                            da[dp++] = contextChar;
-                            contextChar = currentChar;
-                            sp++;
-                            continue;
-                        }
-                        da[dp++] = currentChar;
-                        break;
-                    }//end switch
-
-                contextChar = currentChar;
-                needFlushing = false;
-                sp++;
-            }
-            return CoderResult.UNDERFLOW;
-           } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-           }
-        }
-
-        private CoderResult decodeBufferLoop(ByteBuffer src,
-                                             CharBuffer dst)
-        {
-            int mark = src.position();
-
-            try {
-                while (src.hasRemaining()) {
-                    int index = src.get();
-                    index = ( index < 0 )? ( index + 255 ):index;
-                    char currentChar = directMapTable[index];
-
-                    // if the contextChar is either ATR || EXT
-                    // set the output to '\ufffd'
-                    if(contextChar == '\ufffd') {
-                        if (dst.remaining() < 1)
-                            return CoderResult.OVERFLOW;
-                        dst.put('\ufffd');
-                        contextChar = INVALID_CHAR;
-                        needFlushing = false;
-                        mark++;
-                        continue;
-                    }
-
-                    switch(currentChar) {
-                    case '\u0901':
-                    case '\u0907':
-                    case '\u0908':
-                    case '\u090b':
-                    case '\u093f':
-                    case '\u0940':
-                    case '\u0943':
-                    case '\u0964':
-                        if(needFlushing) {
-                            if (dst.remaining() < 1)
-                                return CoderResult.OVERFLOW;
-                            dst.put(contextChar);
-                            contextChar = currentChar;
-                            mark++;
-                            continue;
-                        }
-                        contextChar = currentChar;
-                        needFlushing = true;
-                        mark++;
-                        continue;
-                    case NUKTA_CHAR:
-                        if (dst.remaining() < 1)
-                            return CoderResult.OVERFLOW;
-                        switch(contextChar) {
-                        case '\u0901':
-                            dst.put('\u0950');
-                            break;
-                        case '\u0907':
-                            dst.put('\u090c');
-                            break;
-                        case '\u0908':
-                            dst.put('\u0961');
-                            break;
-                        case '\u090b':
-                            dst.put('\u0960');
-                            break;
-                        case '\u093f':
-                            dst.put('\u0962');
-                            break;
-                        case '\u0940':
-                            dst.put('\u0963');
-                            break;
-                        case '\u0943':
-                            dst.put('\u0944');
-                            break;
-                        case '\u0964':
-                            dst.put('\u093d');
-                            break;
-                        case HALANT_CHAR:
-                            if(needFlushing) {
-                                dst.put(contextChar);
-                                contextChar = currentChar;
-                                mark++;
-                                continue;
-                            }
-                            dst.put(ZWJ_CHAR);
-                            break;
-                        default:
-                            if(needFlushing) {
-                                dst.put(contextChar);
-                                contextChar = currentChar;
-                                mark++;
-                                continue;
-                            }
-                            dst.put(NUKTA_CHAR);
-                        }
-                        break;
-                    case HALANT_CHAR:
-                        if (dst.remaining() < 1)
-                            return CoderResult.OVERFLOW;
-                        if(needFlushing) {
-                            dst.put(contextChar);
-                            contextChar = currentChar;
-                            mark++;
-                            continue;
-                        }
-                        if(contextChar == HALANT_CHAR) {
-                            dst.put(ZWNJ_CHAR);
-                            break;
-                        }
-                        dst.put(HALANT_CHAR);
-                        break;
-                    case INVALID_CHAR:
-                        if(needFlushing) {
-                            if (dst.remaining() < 1)
-                                return CoderResult.OVERFLOW;
-                            dst.put(contextChar);
-                            contextChar = currentChar;
-                            mark++;
-                            continue;
-                        }
-                        return CoderResult.unmappableForLength(1);
-                    default:
-                        if (dst.remaining() < 1)
-                            return CoderResult.OVERFLOW;
-                        if(needFlushing) {
-                            dst.put(contextChar);
-                            contextChar = currentChar;
-                            mark++;
-                            continue;
-                        }
-                        dst.put(currentChar);
-                        break;
-                    }//end switch
-                contextChar = currentChar;
-                needFlushing = false;
-                mark++;
-                }
-            return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-           }
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src,
-                                         CharBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-    }
-
-    private static class Encoder extends CharsetEncoder {
-
-        private static final byte NO_CHAR = (byte)255;
-
-        //private static CharToByteISCII91 c2b = new CharToByteISCII91();
-        //private static final byte[] directMapTable = c2b.getISCIIEncoderMap();
-
-        private final Surrogate.Parser sgp = new Surrogate.Parser();
-
-        private Encoder(Charset cs) {
-            super(cs, 2.0f, 2.0f);
-        }
-
-        public boolean canEncode(char ch) {
-            //check for Devanagari range,ZWJ,ZWNJ and ASCII range.
-            return ((ch >= '\u0900' && ch <= '\u097f' &&
-                     encoderMappingTable[2*(ch-'\u0900')] != NO_CHAR) ||
-                    (ch == '\u200d') ||
-                    (ch == '\u200c') ||
-                    (ch <= '\u007f'));
-        }
-
-
-        private CoderResult encodeArrayLoop(CharBuffer src,
-                                             ByteBuffer dst)
-        {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            int outputSize = 0;
-
-            try {
-                char inputChar;
-                while (sp < sl) {
-                    int index = Integer.MIN_VALUE;
-                    inputChar = sa[sp];
-
-                    if (inputChar >= 0x0000 && inputChar <= 0x007f) {
-                        if (dl - dp < 1)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = (byte) inputChar;
-                        sp++;
-                        continue;
-                    }
-
-                    // if inputChar == ZWJ replace it with halant
-                    // if inputChar == ZWNJ replace it with Nukta
-
-                    if (inputChar == 0x200c) {
-                        inputChar = HALANT_CHAR;
-                    }
-                    else if (inputChar == 0x200d) {
-                        inputChar = NUKTA_CHAR;
-                    }
-
-                    if (inputChar >= 0x0900 && inputChar <= 0x097f) {
-                        index = ((int)(inputChar) - 0x0900)*2;
-                    }
-
-                    if (Character.isSurrogate(inputChar)) {
-                        if (sgp.parse(inputChar, sa, sp, sl) < 0)
-                            return sgp.error();
-                        return sgp.unmappableResult();
-                    }
-
-                    if (index == Integer.MIN_VALUE ||
-                        encoderMappingTable[index] == NO_CHAR) {
-                        return CoderResult.unmappableForLength(1);
-                    } else {
-                        if(encoderMappingTable[index + 1] == NO_CHAR) {
-                            if(dl - dp < 1)
-                                return CoderResult.OVERFLOW;
-                            da[dp++] = encoderMappingTable[index];
-                        } else {
-                            if(dl - dp < 2)
-                                return CoderResult.OVERFLOW;
-                            da[dp++] = encoderMappingTable[index];
-                            da[dp++] = encoderMappingTable[index + 1];
-                        }
-                        sp++;
-                    }
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult encodeBufferLoop(CharBuffer src,
-                                             ByteBuffer dst)
-        {
-            int mark = src.position();
-
-            try {
-                char inputChar;
-                while (src.hasRemaining()) {
-                    int index = Integer.MIN_VALUE;
-                    inputChar = src.get();
-
-                    if (inputChar >= 0x0000 && inputChar <= 0x007f) {
-                        if (dst.remaining() < 1)
-                            return CoderResult.OVERFLOW;
-                        dst.put((byte) inputChar);
-                        mark++;
-                        continue;
-                    }
-
-                    // if inputChar == ZWJ replace it with halant
-                    // if inputChar == ZWNJ replace it with Nukta
-
-                    if (inputChar == 0x200c) {
-                        inputChar = HALANT_CHAR;
-                    }
-                    else if (inputChar == 0x200d) {
-                        inputChar = NUKTA_CHAR;
-                    }
-
-                    if (inputChar >= 0x0900 && inputChar <= 0x097f) {
-                        index = ((int)(inputChar) - 0x0900)*2;
-                    }
-
-                    if (Character.isSurrogate(inputChar)) {
-                        if (sgp.parse(inputChar, src) < 0)
-                            return sgp.error();
-                        return sgp.unmappableResult();
-                    }
-
-                    if (index == Integer.MIN_VALUE ||
-                        encoderMappingTable[index] == NO_CHAR) {
-                        return CoderResult.unmappableForLength(1);
-                    } else {
-                        if(encoderMappingTable[index + 1] == NO_CHAR) {
-                            if(dst.remaining() < 1)
-                                return CoderResult.OVERFLOW;
-                            dst.put(encoderMappingTable[index]);
-                        } else {
-                            if(dst.remaining() < 2)
-                                return CoderResult.OVERFLOW;
-                            dst.put(encoderMappingTable[index]);
-                            dst.put(encoderMappingTable[index + 1]);
-                        }
-                    }
-                    mark++;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src,
-                                         ByteBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return encodeArrayLoop(src, dst);
-            else
-                return encodeBufferLoop(src, dst);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/ISO2022.java b/ojluni/src/main/java/sun/nio/cs/ext/ISO2022.java
deleted file mode 100755
index 983d57d..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/ISO2022.java
+++ /dev/null
@@ -1,631 +0,0 @@
-/*
- * Copyright (c) 2002, 2010, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.Surrogate;
-
-abstract class ISO2022
-    extends Charset
-{
-
-    private static final byte ISO_ESC = 0x1b;
-    private static final byte ISO_SI = 0x0f;
-    private static final byte ISO_SO = 0x0e;
-    private static final byte ISO_SS2_7 = 0x4e;
-    private static final byte ISO_SS3_7 = 0x4f;
-    private static final byte MSB = (byte)0x80;
-    private static final char REPLACE_CHAR = '\uFFFD';
-    private static final byte minDesignatorLength = 3;
-
-    public ISO2022(String csname, String[] aliases) {
-        super(csname, aliases);
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    protected static class Decoder extends CharsetDecoder {
-
-        // Value to be filled by subclass
-        protected byte SODesig[][];
-        protected byte SS2Desig[][] = null;
-        protected byte SS3Desig[][] = null;
-
-        protected CharsetDecoder SODecoder[];
-        protected CharsetDecoder SS2Decoder[] = null;
-        protected CharsetDecoder SS3Decoder[] = null;
-
-        private static final byte SOFlag = 0;
-        private static final byte SS2Flag = 1;
-        private static final byte SS3Flag = 2;
-
-        private int curSODes, curSS2Des, curSS3Des;
-        private boolean shiftout;
-        private CharsetDecoder tmpDecoder[];
-
-        protected Decoder(Charset cs) {
-            super(cs, 1.0f, 1.0f);
-        }
-
-        protected void implReset() {
-            curSODes = 0;
-            curSS2Des = 0;
-            curSS3Des = 0;
-            shiftout = false;
-        }
-
-        private char decode(byte byte1, byte byte2, byte shiftFlag)
-        {
-            byte1 |= MSB;
-            byte2 |= MSB;
-
-            byte[] tmpByte = { byte1,byte2 };
-            char[] tmpChar = new char[1];
-            int     i = 0,
-                    tmpIndex = 0;
-
-            switch(shiftFlag) {
-            case SOFlag:
-                tmpIndex = curSODes;
-                tmpDecoder = SODecoder;
-                break;
-            case SS2Flag:
-                tmpIndex = curSS2Des;
-                tmpDecoder = SS2Decoder;
-                break;
-            case SS3Flag:
-                tmpIndex = curSS3Des;
-                tmpDecoder = SS3Decoder;
-                break;
-            }
-
-            if (tmpDecoder != null) {
-                for(i = 0; i < tmpDecoder.length; i++) {
-                    if(tmpIndex == i) {
-                        try {
-                            ByteBuffer bb = ByteBuffer.wrap(tmpByte,0,2);
-                            CharBuffer cc = CharBuffer.wrap(tmpChar,0,1);
-                            tmpDecoder[i].decode(bb, cc, true);
-                            cc.flip();
-                            return cc.get();
-                        } catch (Exception e) {}
-                    }
-                }
-            }
-            return REPLACE_CHAR;
-        }
-
-        private int findDesig(byte[] in, int sp, int sl, byte[][] desigs) {
-            if (desigs == null) return -1;
-            int i = 0;
-            while (i < desigs.length) {
-                if (desigs[i] != null && sl - sp >= desigs[i].length) {
-                    int j = 0;
-                    while (j < desigs[i].length && in[sp+j] == desigs[i][j]) { j++; }
-                    if (j == desigs[i].length)
-                        return i;
-                }
-                i++;
-            }
-            return -1;
-        }
-
-        private int findDesigBuf(ByteBuffer in, byte[][] desigs) {
-            if (desigs == null) return -1;
-            int i = 0;
-            while (i < desigs.length) {
-                if (desigs[i] != null && in.remaining() >= desigs[i].length) {
-                    int j = 0;
-                    in.mark();
-                    while (j < desigs[i].length && in.get() == desigs[i][j]) { j++; }
-                    if (j == desigs[i].length)
-                        return i;
-                    in.reset();
-                }
-                i++;
-            }
-            return -1;
-        }
-
-        private CoderResult decodeArrayLoop(ByteBuffer src,
-                                            CharBuffer dst)
-        {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            int b1 = 0, b2 = 0, b3 = 0;
-
-            try {
-                while (sp < sl) {
-                    b1 = sa[sp] & 0xff;
-                    int inputSize = 1;
-                    switch (b1) {
-                        case ISO_SO:
-                            shiftout = true;
-                            inputSize = 1;
-                            break;
-                        case ISO_SI:
-                            shiftout = false;
-                            inputSize = 1;
-                            break;
-                        case ISO_ESC:
-                            if (sl - sp - 1 < minDesignatorLength)
-                                return CoderResult.UNDERFLOW;
-
-                            int desig = findDesig(sa, sp + 1, sl, SODesig);
-                            if (desig != -1) {
-                                curSODes = desig;
-                                inputSize = SODesig[desig].length + 1;
-                                break;
-                            }
-                            desig = findDesig(sa, sp + 1, sl, SS2Desig);
-                            if (desig != -1) {
-                                curSS2Des = desig;
-                                inputSize = SS2Desig[desig].length + 1;
-                                break;
-                            }
-                            desig = findDesig(sa, sp + 1, sl, SS3Desig);
-                            if (desig != -1) {
-                                curSS3Des = desig;
-                                inputSize = SS3Desig[desig].length + 1;
-                                break;
-                            }
-                            if (sl - sp < 2)
-                                return CoderResult.UNDERFLOW;
-                            b1 = sa[sp + 1];
-                            switch(b1) {
-                            case ISO_SS2_7:
-                                if (sl - sp < 4)
-                                    return CoderResult.UNDERFLOW;
-                                b2 = sa[sp +2];
-                                b3 = sa[sp +3];
-                                if (dl - dp <1)
-                                    return CoderResult.OVERFLOW;
-                                da[dp] = decode((byte)b2,
-                                                (byte)b3,
-                                                SS2Flag);
-                                dp++;
-                                inputSize = 4;
-                                break;
-                            case ISO_SS3_7:
-                                if (sl - sp < 4)
-                                    return CoderResult.UNDERFLOW;
-                                b2 = sa[sp + 2];
-                                b3 = sa[sp + 3];
-                                if (dl - dp <1)
-                                    return CoderResult.OVERFLOW;
-                                da[dp] = decode((byte)b2,
-                                                (byte)b3,
-                                                SS3Flag);
-                                dp++;
-                                inputSize = 4;
-                                break;
-                            default:
-                                return CoderResult.malformedForLength(2);
-                            }
-                            break;
-                        default:
-                            if (dl - dp < 1)
-                                return CoderResult.OVERFLOW;
-                            if (!shiftout) {
-                                da[dp++]=(char)(sa[sp] & 0xff);
-                            } else {
-                                if (dl - dp < 1)
-                                    return CoderResult.OVERFLOW;
-                                if (sl - sp < 2)
-                                    return CoderResult.UNDERFLOW;
-                                b2 = sa[sp+1] & 0xff;
-                                da[dp++] = decode((byte)b1,
-                                                  (byte)b2,
-                                                   SOFlag);
-                                inputSize = 2;
-                            }
-                            break;
-                    }
-                    sp += inputSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult decodeBufferLoop(ByteBuffer src,
-                                             CharBuffer dst)
-        {
-            int mark = src.position();
-            int b1 = 0, b2 = 0, b3 = 0;
-
-            try {
-                while (src.hasRemaining()) {
-                    b1 = src.get();
-                    int inputSize = 1;
-                    switch (b1) {
-                        case ISO_SO:
-                            shiftout = true;
-                            break;
-                        case ISO_SI:
-                            shiftout = false;
-                            break;
-                        case ISO_ESC:
-                            if (src.remaining() < minDesignatorLength)
-                                return CoderResult.UNDERFLOW;
-
-                            int desig = findDesigBuf(src, SODesig);
-                            if (desig != -1) {
-                                curSODes = desig;
-                                inputSize = SODesig[desig].length + 1;
-                                break;
-                            }
-                            desig = findDesigBuf(src, SS2Desig);
-                            if (desig != -1) {
-                                curSS2Des = desig;
-                                inputSize = SS2Desig[desig].length + 1;
-                                break;
-                            }
-                            desig = findDesigBuf(src, SS3Desig);
-                            if (desig != -1) {
-                                curSS3Des = desig;
-                                inputSize = SS3Desig[desig].length + 1;
-                                break;
-                            }
-
-                            if (src.remaining() < 1)
-                                return CoderResult.UNDERFLOW;
-                            b1 = src.get();
-                            switch(b1) {
-                                case ISO_SS2_7:
-                                    if (src.remaining() < 2)
-                                        return CoderResult.UNDERFLOW;
-                                    b2 = src.get();
-                                    b3 = src.get();
-                                    if (dst.remaining() < 1)
-                                        return CoderResult.OVERFLOW;
-                                    dst.put(decode((byte)b2,
-                                                   (byte)b3,
-                                                   SS2Flag));
-                                    inputSize = 4;
-                                    break;
-                                case ISO_SS3_7:
-                                    if (src.remaining() < 2)
-                                        return CoderResult.UNDERFLOW;
-                                    b2 = src.get();
-                                    b3 = src.get();
-                                    if (dst.remaining() < 1)
-                                        return CoderResult.OVERFLOW;
-                                    dst.put(decode((byte)b2,
-                                                   (byte)b3,
-                                                   SS3Flag));
-                                    inputSize = 4;
-                                    break;
-                                default:
-                                    return CoderResult.malformedForLength(2);
-                            }
-                            break;
-                        default:
-                            if (dst.remaining() < 1)
-                                return CoderResult.OVERFLOW;
-                            if (!shiftout) {
-                                dst.put((char)(b1 & 0xff));
-                            } else {
-                                if (dst.remaining() < 1)
-                                    return CoderResult.OVERFLOW;
-                                if (src.remaining() < 1)
-                                    return CoderResult.UNDERFLOW;
-                                b2 = src.get() & 0xff;
-                                dst.put(decode((byte)b1,
-                                                      (byte)b2,
-                                                        SOFlag));
-                                inputSize = 2;
-                            }
-                            break;
-                    }
-                    mark += inputSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } catch (Exception e) { e.printStackTrace(); return CoderResult.OVERFLOW; }
-            finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src,
-                                         CharBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-    }
-
-    protected static class Encoder extends CharsetEncoder {
-        private final Surrogate.Parser sgp = new Surrogate.Parser();
-        public static final byte SS2 = (byte)0x8e;
-        public static final byte PLANE2 = (byte)0xA2;
-        public static final byte PLANE3 = (byte)0xA3;
-        private final byte MSB = (byte)0x80;
-
-        protected final byte maximumDesignatorLength = 4;
-
-        protected String SODesig,
-                         SS2Desig = null,
-                         SS3Desig = null;
-
-        protected CharsetEncoder ISOEncoder;
-
-        private boolean shiftout = false;
-        private boolean SODesDefined = false;
-        private boolean SS2DesDefined = false;
-        private boolean SS3DesDefined = false;
-
-        private boolean newshiftout = false;
-        private boolean newSODesDefined = false;
-        private boolean newSS2DesDefined = false;
-        private boolean newSS3DesDefined = false;
-
-        protected Encoder(Charset cs) {
-            super(cs, 4.0f, 8.0f);
-        }
-
-        public boolean canEncode(char c) {
-            return (ISOEncoder.canEncode(c));
-        }
-
-        protected void implReset() {
-            shiftout = false;
-            SODesDefined = false;
-            SS2DesDefined = false;
-            SS3DesDefined = false;
-        }
-
-        private int unicodeToNative(char unicode, byte ebyte[])
-        {
-            int index = 0;
-            byte        tmpByte[];
-            char        convChar[] = {unicode};
-            byte        convByte[] = new byte[4];
-            int         converted;
-
-            try{
-                CharBuffer cc = CharBuffer.wrap(convChar);
-                ByteBuffer bb = ByteBuffer.allocate(4);
-                ISOEncoder.encode(cc, bb, true);
-                bb.flip();
-                converted = bb.remaining();
-                bb.get(convByte,0,converted);
-            } catch(Exception e) {
-                return -1;
-            }
-
-            if (converted == 2) {
-                if (!SODesDefined) {
-                    newSODesDefined = true;
-                    ebyte[0] = ISO_ESC;
-                    tmpByte = SODesig.getBytes();
-                    System.arraycopy(tmpByte,0,ebyte,1,tmpByte.length);
-                    index = tmpByte.length+1;
-                }
-                if (!shiftout) {
-                    newshiftout = true;
-                    ebyte[index++] = ISO_SO;
-                }
-                ebyte[index++] = (byte)(convByte[0] & 0x7f);
-                ebyte[index++] = (byte)(convByte[1] & 0x7f);
-            } else {
-                if(convByte[0] == SS2) {
-                    if (convByte[1] == PLANE2) {
-                        if (!SS2DesDefined) {
-                            newSS2DesDefined = true;
-                            ebyte[0] = ISO_ESC;
-                            tmpByte = SS2Desig.getBytes();
-                            System.arraycopy(tmpByte, 0, ebyte, 1, tmpByte.length);
-                            index = tmpByte.length+1;
-                        }
-                        ebyte[index++] = ISO_ESC;
-                        ebyte[index++] = ISO_SS2_7;
-                        ebyte[index++] = (byte)(convByte[2] & 0x7f);
-                        ebyte[index++] = (byte)(convByte[3] & 0x7f);
-                    } else if (convByte[1] == PLANE3) {
-                        if(!SS3DesDefined){
-                            newSS3DesDefined = true;
-                            ebyte[0] = ISO_ESC;
-                            tmpByte = SS3Desig.getBytes();
-                            System.arraycopy(tmpByte, 0, ebyte, 1, tmpByte.length);
-                            index = tmpByte.length+1;
-                        }
-                        ebyte[index++] = ISO_ESC;
-                        ebyte[index++] = ISO_SS3_7;
-                        ebyte[index++] = (byte)(convByte[2] & 0x7f);
-                        ebyte[index++] = (byte)(convByte[3] & 0x7f);
-                    }
-                }
-            }
-            return index;
-        }
-
-        private CoderResult encodeArrayLoop(CharBuffer src,
-                                            ByteBuffer dst)
-        {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            int outputSize = 0;
-            byte[]  outputByte = new byte[8];
-            newshiftout = shiftout;
-            newSODesDefined = SODesDefined;
-            newSS2DesDefined = SS2DesDefined;
-            newSS3DesDefined = SS3DesDefined;
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if (Character.isSurrogate(c)) {
-                        if (sgp.parse(c, sa, sp, sl) < 0)
-                            return sgp.error();
-                        return sgp.unmappableResult();
-                    }
-
-                    if (c < 0x80) {     // ASCII
-                        if (shiftout){
-                            newshiftout = false;
-                            outputSize = 2;
-                            outputByte[0] = ISO_SI;
-                            outputByte[1] = (byte)(c & 0x7f);
-                        } else {
-                            outputSize = 1;
-                            outputByte[0] = (byte)(c & 0x7f);
-                        }
-                        if(sa[sp] == '\n'){
-                            newSODesDefined = false;
-                            newSS2DesDefined = false;
-                            newSS3DesDefined = false;
-                        }
-                    } else {
-                        outputSize = unicodeToNative(c, outputByte);
-                        if (outputSize == 0) {
-                            return CoderResult.unmappableForLength(1);
-                        }
-                    }
-                    if (dl - dp < outputSize)
-                        return CoderResult.OVERFLOW;
-
-                    for (int i = 0; i < outputSize; i++)
-                        da[dp++] = outputByte[i];
-                    sp++;
-                    shiftout = newshiftout;
-                    SODesDefined = newSODesDefined;
-                    SS2DesDefined = newSS2DesDefined;
-                    SS3DesDefined = newSS3DesDefined;
-                }
-                return CoderResult.UNDERFLOW;
-             } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-             }
-        }
-
-
-        private CoderResult encodeBufferLoop(CharBuffer src,
-                                             ByteBuffer dst)
-        {
-            int outputSize = 0;
-            byte[]  outputByte = new byte[8];
-            int     inputSize = 0;                 // Size of input
-            newshiftout = shiftout;
-            newSODesDefined = SODesDefined;
-            newSS2DesDefined = SS2DesDefined;
-            newSS3DesDefined = SS3DesDefined;
-            int mark = src.position();
-
-            try {
-                while (src.hasRemaining()) {
-                    char inputChar = src.get();
-                    if (Character.isSurrogate(inputChar)) {
-                        if (sgp.parse(inputChar, src) < 0)
-                            return sgp.error();
-                        return sgp.unmappableResult();
-                    }
-                    if (inputChar < 0x80) {     // ASCII
-                        if (shiftout){
-                            newshiftout = false;
-                            outputSize = 2;
-                            outputByte[0] = ISO_SI;
-                            outputByte[1] = (byte)(inputChar & 0x7f);
-                        } else {
-                            outputSize = 1;
-                            outputByte[0] = (byte)(inputChar & 0x7f);
-                        }
-                        if(inputChar == '\n'){
-                            newSODesDefined = false;
-                            newSS2DesDefined = false;
-                            newSS3DesDefined = false;
-                        }
-                    } else {
-                        outputSize = unicodeToNative(inputChar, outputByte);
-                        if (outputSize == 0) {
-                            return CoderResult.unmappableForLength(1);
-                        }
-                    }
-
-                    if (dst.remaining() < outputSize)
-                        return CoderResult.OVERFLOW;
-                    for (int i = 0; i < outputSize; i++)
-                        dst.put(outputByte[i]);
-                    mark++;
-                    shiftout = newshiftout;
-                    SODesDefined = newSODesDefined;
-                    SS2DesDefined = newSS2DesDefined;
-                    SS3DesDefined = newSS3DesDefined;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src,
-                                         ByteBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return encodeArrayLoop(src, dst);
-            else
-                return encodeBufferLoop(src, dst);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_CN.java b/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_CN.java
deleted file mode 100755
index 3c7a7d4..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_CN.java
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import java.nio.charset.CharacterCodingException;
-import sun.nio.cs.HistoricallyNamedCharset;
-import sun.nio.cs.US_ASCII;
-
-public class ISO2022_CN
-    extends Charset
-    implements HistoricallyNamedCharset
-{
-    private static final byte ISO_ESC = 0x1b;
-    private static final byte ISO_SI = 0x0f;
-    private static final byte ISO_SO = 0x0e;
-    private static final byte ISO_SS2_7 = 0x4e;
-    private static final byte ISO_SS3_7 = 0x4f;
-    private static final byte MSB = (byte)0x80;
-    private static final char REPLACE_CHAR = '\uFFFD';
-
-    private static final byte SODesigGB = 0;
-    private static final byte SODesigCNS = 1;
-
-    public ISO2022_CN() {
-        super("ISO-2022-CN", ExtendedCharsets.aliasesFor("ISO-2022-CN"));
-    }
-
-    public String historicalName() {
-        return "ISO2022CN";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs instanceof EUC_CN)     // GB2312-80 repertoire
-                || (cs instanceof US_ASCII)
-                || (cs instanceof EUC_TW)  // CNS11643 repertoire
-                || (cs instanceof ISO2022_CN));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        throw new UnsupportedOperationException();
-    }
-
-    public boolean canEncode() {
-        return false;
-    }
-
-    static class Decoder extends CharsetDecoder {
-        private boolean shiftOut;
-        private byte currentSODesig;
-
-        private static final Charset gb2312 = new EUC_CN();
-        private static final Charset cns = new EUC_TW();
-        private final DoubleByte.Decoder gb2312Decoder;
-        private final EUC_TW.Decoder cnsDecoder;
-
-        Decoder(Charset cs) {
-            super(cs, 1.0f, 1.0f);
-            shiftOut = false;
-            currentSODesig = SODesigGB;
-            gb2312Decoder = (DoubleByte.Decoder)gb2312.newDecoder();
-            cnsDecoder = (EUC_TW.Decoder)cns.newDecoder();
-        }
-
-        protected void implReset() {
-            shiftOut= false;
-            currentSODesig = SODesigGB;
-        }
-
-        private char cnsDecode(byte byte1, byte byte2, byte SS) {
-            byte1 |= MSB;
-            byte2 |= MSB;
-            int p = 0;
-            if (SS == ISO_SS2_7)
-                p = 1;    //plane 2, index -- 1
-            else if (SS == ISO_SS3_7)
-                p = 2;    //plane 3, index -- 2
-            else
-                return REPLACE_CHAR;  //never happen.
-            char[] ret = cnsDecoder.toUnicode(byte1 & 0xff,
-                                              byte2 & 0xff,
-                                              p);
-            if (ret == null || ret.length == 2)
-                return REPLACE_CHAR;
-            return ret[0];
-        }
-
-        private char SODecode(byte byte1, byte byte2, byte SOD) {
-            byte1 |= MSB;
-            byte2 |= MSB;
-            if (SOD == SODesigGB) {
-                return gb2312Decoder.decodeDouble(byte1 & 0xff,
-                                                  byte2 & 0xff);
-            } else {    // SOD == SODesigCNS
-                char[] ret = cnsDecoder.toUnicode(byte1 & 0xff,
-                                                  byte2 & 0xff,
-                                                  0);
-                if (ret == null)
-                    return REPLACE_CHAR;
-                return ret[0];
-            }
-        }
-
-        private CoderResult decodeBufferLoop(ByteBuffer src,
-                                             CharBuffer dst)
-        {
-            int mark = src.position();
-            byte b1 = 0, b2 = 0, b3 = 0, b4 = 0;
-            int inputSize = 0;
-            char c = REPLACE_CHAR;
-            try {
-                while (src.hasRemaining()) {
-                    b1 = src.get();
-                    inputSize = 1;
-
-                    while (b1 == ISO_ESC ||
-                           b1 == ISO_SO ||
-                           b1 == ISO_SI) {
-                        if (b1 == ISO_ESC) {  // ESC
-                            currentSODesig = SODesigGB;
-
-                            if (src.remaining() < 1)
-                                return CoderResult.UNDERFLOW;
-
-                            b2 = src.get();
-                            inputSize++;
-
-                            if ((b2 & (byte)0x80) != 0)
-                                return CoderResult.malformedForLength(inputSize);
-
-                            if (b2 == (byte)0x24) {
-                                if (src.remaining() < 1)
-                                    return CoderResult.UNDERFLOW;
-
-                                b3 = src.get();
-                                inputSize++;
-
-                                if ((b3 & (byte)0x80) != 0)
-                                    return CoderResult.malformedForLength(inputSize);
-                                if (b3 == 'A'){              // "$A"
-                                    currentSODesig = SODesigGB;
-                                } else if (b3 == ')') {
-                                    if (src.remaining() < 1)
-                                        return CoderResult.UNDERFLOW;
-                                    b4 = src.get();
-                                    inputSize++;
-                                    if (b4 == 'A'){          // "$)A"
-                                        currentSODesig = SODesigGB;
-                                    } else if (b4 == 'G'){   // "$)G"
-                                        currentSODesig = SODesigCNS;
-                                    } else {
-                                        return CoderResult.malformedForLength(inputSize);
-                                    }
-                                } else if (b3 == '*') {
-                                    if (src.remaining() < 1)
-                                        return CoderResult.UNDERFLOW;
-                                    b4 = src.get();
-                                    inputSize++;
-                                    if (b4 != 'H') {         // "$*H"
-                                        //SS2Desig -> CNS-P1
-                                        return CoderResult.malformedForLength(inputSize);
-                                    }
-                                } else if (b3 == '+') {
-                                    if (src.remaining() < 1)
-                                        return CoderResult.UNDERFLOW;
-                                    b4 = src.get();
-                                    inputSize++;
-                                    if (b4 != 'I'){          // "$+I"
-                                        //SS3Desig -> CNS-P2.
-                                        return CoderResult.malformedForLength(inputSize);
-                                    }
-                                } else {
-                                        return CoderResult.malformedForLength(inputSize);
-                                }
-                            } else if (b2 == ISO_SS2_7 || b2 == ISO_SS3_7) {
-                                if (src.remaining() < 2)
-                                    return CoderResult.UNDERFLOW;
-                                b3 = src.get();
-                                b4 = src.get();
-                                inputSize += 2;
-                                if (dst.remaining() < 1)
-                                    return CoderResult.OVERFLOW;
-                                //SS2->CNS-P2, SS3->CNS-P3
-                                c = cnsDecode(b3, b4, b2);
-                                if (c == REPLACE_CHAR)
-                                    return CoderResult.unmappableForLength(inputSize);
-                                dst.put(c);
-                            } else {
-                                return CoderResult.malformedForLength(inputSize);
-                            }
-                        } else if (b1 == ISO_SO) {
-                            shiftOut = true;
-                        } else if (b1 == ISO_SI) { // shift back in
-                            shiftOut = false;
-                        }
-                        mark += inputSize;
-                        if (src.remaining() < 1)
-                            return CoderResult.UNDERFLOW;
-                        b1 = src.get();
-                        inputSize = 1;
-                    }
-
-                    if (dst.remaining() < 1)
-                        return CoderResult.OVERFLOW;
-
-                    if (!shiftOut) {
-                        dst.put((char)(b1 & 0xff));  //clear the upper byte
-                        mark += inputSize;
-                    } else {
-                        if (src.remaining() < 1)
-                            return CoderResult.UNDERFLOW;
-                        b2 = src.get();
-                        inputSize++;
-                        c = SODecode(b1, b2, currentSODesig);
-                        if (c == REPLACE_CHAR)
-                            return CoderResult.unmappableForLength(inputSize);
-                        dst.put(c);
-                        mark += inputSize;
-                    }
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        private CoderResult decodeArrayLoop(ByteBuffer src,
-                                            CharBuffer dst)
-        {
-            int inputSize = 0;
-            byte b1 = 0, b2 = 0, b3 = 0, b4 = 0;
-            char c = REPLACE_CHAR;
-
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-                while (sp < sl) {
-                    b1 = sa[sp];
-                    inputSize = 1;
-
-                    while (b1 == ISO_ESC || b1 == ISO_SO || b1 == ISO_SI) {
-                        if (b1 == ISO_ESC) {  // ESC
-                            currentSODesig = SODesigGB;
-
-                            if (sp + 2 > sl)
-                                return CoderResult.UNDERFLOW;
-
-                            b2 = sa[sp + 1];
-                            inputSize++;
-
-                            if ((b2 & (byte)0x80) != 0)
-                                return CoderResult.malformedForLength(inputSize);
-                            if (b2 == (byte)0x24) {
-                                if (sp + 3 > sl)
-                                    return CoderResult.UNDERFLOW;
-
-                                b3 = sa[sp + 2];
-                                inputSize++;
-
-                                if ((b3 & (byte)0x80) != 0)
-                                    return CoderResult.malformedForLength(inputSize);
-                                if (b3 == 'A'){              // "$A"
-                                    /* <ESC>$A is not a legal designator sequence for
-                                       ISO2022_CN, it is listed as an escape sequence
-                                       for GB2312 in ISO2022-JP-2. Keep it here just for
-                                       the sake of "compatibility".
-                                     */
-                                    currentSODesig = SODesigGB;
-                                } else if (b3 == ')') {
-                                    if (sp + 4 > sl)
-                                        return CoderResult.UNDERFLOW;
-                                    b4 = sa[sp + 3];
-                                    inputSize++;
-
-                                    if (b4 == 'A'){          // "$)A"
-                                        currentSODesig = SODesigGB;
-                                    } else if (b4 == 'G'){   // "$)G"
-                                        currentSODesig = SODesigCNS;
-                                    } else {
-                                        return CoderResult.malformedForLength(inputSize);
-                                    }
-                                } else if (b3 == '*') {
-                                    if (sp + 4 > sl)
-                                        return CoderResult.UNDERFLOW;
-                                    b4 = sa[sp + 3];
-                                    inputSize++;
-                                    if (b4 != 'H'){          // "$*H"
-                                        return CoderResult.malformedForLength(inputSize);
-                                    }
-                                } else if (b3 == '+') {
-                                    if (sp + 4 > sl)
-                                        return CoderResult.UNDERFLOW;
-                                    b4 = sa[sp + 3];
-                                    inputSize++;
-                                    if (b4 != 'I'){          // "$+I"
-                                        return CoderResult.malformedForLength(inputSize);
-                                    }
-                                } else {
-                                        return CoderResult.malformedForLength(inputSize);
-                                }
-                            } else if (b2 == ISO_SS2_7 || b2 == ISO_SS3_7) {
-                                if (sp + 4 > sl) {
-                                    return CoderResult.UNDERFLOW;
-                                }
-                                b3 = sa[sp + 2];
-                                b4 = sa[sp + 3];
-                                if (dl - dp < 1)  {
-                                    return CoderResult.OVERFLOW;
-                                }
-                                inputSize += 2;
-                                c = cnsDecode(b3, b4, b2);
-                                if (c == REPLACE_CHAR)
-                                    return CoderResult.unmappableForLength(inputSize);
-                                da[dp++] = c;
-                            } else {
-                                return CoderResult.malformedForLength(inputSize);
-                            }
-                        } else if (b1 == ISO_SO) {
-                            shiftOut = true;
-                        } else if (b1 == ISO_SI) { // shift back in
-                            shiftOut = false;
-                        }
-                        sp += inputSize;
-                        if (sp + 1 > sl)
-                            return CoderResult.UNDERFLOW;
-                        b1 = sa[sp];
-                        inputSize = 1;
-                    }
-
-                    if (dl - dp < 1) {
-                        return CoderResult.OVERFLOW;
-                    }
-
-                    if (!shiftOut) {
-                        da[dp++] = (char)(b1 & 0xff);  //clear the upper byte
-                    } else {
-                        if (sp + 2 > sl)
-                            return CoderResult.UNDERFLOW;
-                        b2 = sa[sp + 1];
-                        inputSize++;
-                        c = SODecode(b1, b2, currentSODesig);
-                        if (c == REPLACE_CHAR)
-                            return CoderResult.unmappableForLength(inputSize);
-                        da[dp++] = c;
-                    }
-                    sp += inputSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src,
-                                         CharBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_CN_CNS.java b/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_CN_CNS.java
deleted file mode 100755
index 9523cb3..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_CN_CNS.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.HistoricallyNamedCharset;
-
-public class ISO2022_CN_CNS extends ISO2022 implements HistoricallyNamedCharset
-{
-    public ISO2022_CN_CNS() {
-        super("x-ISO-2022-CN-CNS", ExtendedCharsets.aliasesFor("x-ISO-2022-CN-CNS"));
-    }
-
-    public boolean contains(Charset cs) {
-        // overlapping repertoire of EUC_TW, CNS11643
-        return ((cs instanceof EUC_TW) ||
-                (cs.name().equals("US-ASCII")) ||
-                (cs instanceof ISO2022_CN_CNS));
-    }
-
-    public String historicalName() {
-        return "ISO2022CN_CNS";
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new ISO2022_CN.Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    private static class Encoder extends ISO2022.Encoder {
-
-        public Encoder(Charset cs)
-        {
-            super(cs);
-            SODesig = "$)G";
-            SS2Desig = "$*H";
-            SS3Desig = "$+I";
-
-            try {
-                Charset cset = Charset.forName("EUC_TW"); // CNS11643
-                ISOEncoder = cset.newEncoder();
-            } catch (Exception e) { }
-        }
-
-        private byte[] bb = new byte[4];
-        public boolean canEncode(char c) {
-            int n = 0;
-            return (c <= '\u007f' ||
-                    (n = ((EUC_TW.Encoder)ISOEncoder).toEUC(c, bb)) == 2 ||
-                    (n == 4 && bb[0] == SS2 &&
-                     (bb[1] == PLANE2 || bb[1] == PLANE3)));
-        }
-
-        /*
-         * Since ISO2022-CN-CNS possesses a CharsetEncoder
-         * without the corresponding CharsetDecoder half the
-         * default replacement check needs to be overridden
-         * since the parent class version attempts to
-         * decode 0x3f (?).
-         */
-
-        public boolean isLegalReplacement(byte[] repl) {
-            // 0x3f is OK as the replacement byte
-            return (repl.length == 1 && repl[0] == (byte) 0x3f);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_CN_GB.java b/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_CN_GB.java
deleted file mode 100755
index 518b7f7..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_CN_GB.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.HistoricallyNamedCharset;
-
-public class ISO2022_CN_GB extends ISO2022 implements HistoricallyNamedCharset
-{
-    public ISO2022_CN_GB() {
-        super("x-ISO-2022-CN-GB",
-               ExtendedCharsets.aliasesFor("x-ISO-2022-CN-GB"));
-    }
-
-    public boolean contains(Charset cs) {
-        // overlapping repertoire of EUC_CN, GB2312
-        return ((cs instanceof EUC_CN) ||
-                (cs.name().equals("US-ASCII")) ||
-                (cs instanceof ISO2022_CN_GB));
-    }
-
-    public String historicalName() {
-        return "ISO2022CN_GB";
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new ISO2022_CN.Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    private static class Encoder extends ISO2022.Encoder {
-
-        public Encoder(Charset cs)
-        {
-            super(cs);
-            SODesig = "$)A";
-
-            try {
-                Charset cset = Charset.forName("EUC_CN"); // GB2312
-                ISOEncoder = cset.newEncoder();
-            } catch (Exception e) { }
-        }
-
-        /*
-         * Since ISO2022-CN-GB possesses a CharsetEncoder
-         * without the corresponding CharsetDecoder half the
-         * default replacement check needs to be overridden
-         * since the parent class version attempts to
-         * decode 0x3f (?).
-         */
-
-        public boolean isLegalReplacement(byte[] repl) {
-            // 0x3f is OK as the replacement byte
-            return (repl.length == 1 && repl[0] == (byte) 0x3f);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_JP.java b/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_JP.java
deleted file mode 100755
index 2acc809..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_JP.java
+++ /dev/null
@@ -1,787 +0,0 @@
-/*
- * Copyright (c) 2002, 2007, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import java.nio.charset.CodingErrorAction;
-import sun.nio.cs.HistoricallyNamedCharset;
-import sun.nio.cs.Surrogate;
-import sun.nio.cs.US_ASCII;
-
-/*
- * Implementation notes:
- *
- * (1)"Standard based" (ASCII, JIS_X_0201 and JIS_X_0208) ISO2022-JP charset
- * is provided by the base implementation of this class.
- *
- * Three Microsoft ISO2022-JP variants, MS50220, MS50221 and MSISO2022JP
- * are provided via subclasses.
- *
- * (2)MS50220 and MS50221 are assumed to work the same way as Microsoft
- * CP50220 and CP50221's 7-bit implementation works by using CP5022X
- * specific JIS0208 and JIS0212 mapping tables (generated via Microsoft's
- * MultiByteToWideChar/WideCharToMultiByte APIs). The only difference
- * between these 2 classes is that MS50220 does not support singlebyte
- * halfwidth kana (Uff61-Uff9f) shiftin mechanism when "encoding", instead
- * these halfwidth kana characters are converted to their fullwidth JIS0208
- * counterparts.
- *
- * The difference between the standard JIS_X_0208 and JIS_X_0212 mappings
- * and the CP50220/50221 specific are
- *
- * 0208 mapping:
- *              1)0x213d <-> U2015 (compared to U2014)
- *              2)One way mappings for 5 characters below
- *                u2225 (ms) -> 0x2142 <-> u2016 (jis)
- *                uff0d (ms) -> 0x215d <-> u2212 (jis)
- *                uffe0 (ms) -> 0x2171 <-> u00a2 (jis)
- *                uffe1 (ms) -> 0x2172 <-> u00a3 (jis)
- *                uffe2 (ms) -> 0x224c <-> u00ac (jis)
- *                //should consider 0xff5e -> 0x2141 <-> U301c?
- *              3)NEC Row13 0x2d21-0x2d79
- *              4)85-94 ku <-> UE000,UE3AB (includes NEC selected
- *                IBM kanji in 89-92ku)
- *              5)UFF61-UFF9f -> Fullwidth 0208 KANA
- *
- * 0212 mapping:
- *              1)0x2237 <-> UFF5E (Fullwidth Tilde)
- *              2)0x2271 <-> U2116 (Numero Sign)
- *              3)85-94 ku <-> UE3AC - UE757
- *
- * (3)MSISO2022JP uses a JIS0208 mapping generated from MS932DB.b2c
- * and MS932DB.c2b by converting the SJIS codepoints back to their
- * JIS0208 counterparts. With the exception of
- *
- * (a)Codepoints with a resulting JIS0208 codepoints beyond 0x7e00 are
- *    dropped (this includs the IBM Extended Kanji/Non-kanji from 0x9321
- *    to 0x972c)
- * (b)The Unicode codepoints that the IBM Extended Kanji/Non-kanji are
- *    mapped to (in MS932) are mapped back to NEC selected IBM Kanji/
- *    Non-kanji area at 0x7921-0x7c7e.
- *
- * Compared to JIS_X_0208 mapping, this MS932 based mapping has
-
- * (a)different mappings for 7 JIS codepoints
- *        0x213d <-> U2015
- *        0x2141 <-> UFF5E
- *        0x2142 <-> U2225
- *        0x215d <-> Uff0d
- *        0x2171 <-> Uffe0
- *        0x2172 <-> Uffe1
- *        0x224c <-> Uffe2
- * (b)added one-way c2b mappings for
- *        U00b8 -> 0x2124
- *        U00b7 -> 0x2126
- *        U00af -> 0x2131
- *        U00ab -> 0x2263
- *        U00bb -> 0x2264
- *        U3094 -> 0x2574
- *        U00b5 -> 0x264c
- * (c)NEC Row 13
- * (d)NEC selected IBM extended Kanji/Non-kanji
- *    These codepoints are mapped to the same Unicode codepoints as
- *    the MS932 does, while MS50220/50221 maps them to the Unicode
- *    private area.
- *
- * # There is also an interesting difference when compared to MS5022X
- *   0208 mapping for JIS codepoint "0x2D60", MS932 maps it to U301d
- *   but MS5022X maps it to U301e, obvious MS5022X is wrong, but...
- */
-
-public class ISO2022_JP
-    extends Charset
-    implements HistoricallyNamedCharset
-{
-    private static final int ASCII = 0;                 // ESC ( B
-    private static final int JISX0201_1976 = 1;         // ESC ( J
-    private static final int JISX0208_1978 = 2;         // ESC $ @
-    private static final int JISX0208_1983 = 3;         // ESC $ B
-    private static final int JISX0212_1990 = 4;         // ESC $ ( D
-    private static final int JISX0201_1976_KANA = 5;    // ESC ( I
-    private static final int SHIFTOUT = 6;
-
-    private static final int ESC = 0x1b;
-    private static final int SO = 0x0e;
-    private static final int SI = 0x0f;
-
-    public ISO2022_JP() {
-        super("ISO-2022-JP",
-              ExtendedCharsets.aliasesFor("ISO-2022-JP"));
-    }
-
-    protected ISO2022_JP(String canonicalName,
-                         String[] aliases) {
-        super(canonicalName, aliases);
-    }
-
-    public String historicalName() {
-        return "ISO2022JP";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs instanceof JIS_X_0201)
-                || (cs instanceof US_ASCII)
-                || (cs instanceof JIS_X_0208)
-                || (cs instanceof ISO2022_JP));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this,
-                           getDecIndex1(),
-                           getDecIndex2(),
-                           get0212Decoder());
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this,
-                           getEncIndex1(),
-                           getEncIndex2(),
-                           get0212Encoder(),
-                           doSBKANA());
-    }
-
-    protected short[] getDecIndex1() {
-        return JIS_X_0208_Decoder.getIndex1();
-    }
-
-    protected String[] getDecIndex2() {
-        return JIS_X_0208_Decoder.getIndex2();
-    }
-
-    protected DoubleByteDecoder get0212Decoder() {
-        return null;
-    }
-
-    protected short[] getEncIndex1() {
-        return JIS_X_0208_Encoder.getIndex1();
-    }
-
-    protected String[] getEncIndex2() {
-        return JIS_X_0208_Encoder.getIndex2();
-    }
-
-    protected DoubleByteEncoder get0212Encoder() {
-        return null;
-    }
-
-    protected boolean doSBKANA() {
-        return true;
-    }
-
-    private static class Decoder extends DoubleByteDecoder
-        implements DelegatableDecoder {
-
-        private int currentState;
-        private int previousState;
-        private DoubleByteDecoder decoder0212;
-
-        protected Decoder(Charset cs,
-                          short[] index1,
-                          String[] index2,
-                          DoubleByteDecoder decoder0212) {
-            super(cs,
-                  index1,
-                  index2,
-                  0x21,
-                  0x7e);
-            this.decoder0212 = decoder0212;
-            currentState = ASCII;
-            previousState = ASCII;
-        }
-
-        protected char convSingleByte(int b) {
-            return REPLACE_CHAR;
-        }
-
-        public void implReset() {
-            currentState = ASCII;
-            previousState = ASCII;
-        }
-
-        private CoderResult decodeArrayLoop(ByteBuffer src,
-                                            CharBuffer dst)
-        {
-            int inputSize = 0;
-            int b1 = 0, b2 = 0, b3 = 0, b4 = 0;
-            char c = REPLACE_CHAR;
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-                while (sp < sl) {
-                    b1 = sa[sp] & 0xff;
-                    inputSize = 1;
-                    if ((b1 & 0x80) != 0) {
-                        return CoderResult.malformedForLength(inputSize);
-                    }
-                    if (b1 == ESC || b1 == SO || b1 == SI) {
-                        if (b1 == ESC) {
-                            if (sp + inputSize + 2 > sl)
-                                return CoderResult.UNDERFLOW;
-                            b2 = sa[sp + inputSize++] & 0xff;
-                            if (b2 == '(') {
-                                b3 = sa[sp + inputSize++] & 0xff;
-                                if (b3 == 'B'){
-                                    currentState = ASCII;
-                                } else if (b3 == 'J'){
-                                    currentState = JISX0201_1976;
-                                } else if (b3 == 'I'){
-                                    currentState = JISX0201_1976_KANA;
-                                } else {
-                                    return CoderResult.malformedForLength(inputSize);
-                                }
-                            } else if (b2 == '$'){
-                                b3 = sa[sp + inputSize++] & 0xff;
-                                if (b3 == '@'){
-                                    currentState = JISX0208_1978;
-                                } else if (b3 == 'B'){
-                                    currentState = JISX0208_1983;
-                                } else if (b3 == '(' && decoder0212 != null) {
-                                    if (sp + inputSize + 1 > sl)
-                                        return CoderResult.UNDERFLOW;
-                                    b4 = sa[sp + inputSize++] & 0xff;
-                                    if (b4 == 'D') {
-                                        currentState = JISX0212_1990;
-                                    } else {
-                                        return CoderResult.malformedForLength(inputSize);
-                                    }
-                                } else {
-                                    return CoderResult.malformedForLength(inputSize);
-                                }
-                            } else {
-                                return CoderResult.malformedForLength(inputSize);
-                            }
-                        } else if (b1 == SO) {
-                            previousState = currentState;
-                            currentState = SHIFTOUT;
-                        } else if (b1 == SI) {
-                            currentState = previousState;
-                        }
-                        sp += inputSize;
-                        continue;
-                    }
-                    if (dp + 1 > dl)
-                        return CoderResult.OVERFLOW;
-
-                    switch (currentState){
-                        case ASCII:
-                            da[dp++] = (char)(b1 & 0xff);
-                            break;
-                        case JISX0201_1976:
-                          switch (b1) {
-                              case 0x5c:  // Yen/tilde substitution
-                                da[dp++] = '\u00a5';
-                                break;
-                              case 0x7e:
-                                da[dp++] = '\u203e';
-                                break;
-                              default:
-                                da[dp++] = (char)b1;
-                                break;
-                            }
-                            break;
-                        case JISX0208_1978:
-                        case JISX0208_1983:
-                            if (sp + inputSize + 1 > sl)
-                                return CoderResult.UNDERFLOW;
-                            b2 = sa[sp + inputSize++] & 0xff;
-                            c = decodeDouble(b1,b2);
-                            if (c == REPLACE_CHAR)
-                                return CoderResult.unmappableForLength(inputSize);
-                            da[dp++] = c;
-                            break;
-                        case JISX0212_1990:
-                            if (sp + inputSize + 1 > sl)
-                                return CoderResult.UNDERFLOW;
-                            b2 = sa[sp + inputSize++] & 0xff;
-                            c = decoder0212.decodeDouble(b1,b2);
-                            if (c == REPLACE_CHAR)
-                                return CoderResult.unmappableForLength(inputSize);
-                            da[dp++] = c;
-                            break;
-                        case JISX0201_1976_KANA:
-                        case SHIFTOUT:
-                            if (b1 > 0x60) {
-                                return CoderResult.malformedForLength(inputSize);
-                            }
-                            da[dp++] = (char)(b1 + 0xff40);
-                            break;
-                    }
-                    sp += inputSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult decodeBufferLoop(ByteBuffer src,
-                                             CharBuffer dst)
-        {
-            int mark = src.position();
-            int b1 = 0, b2 = 0, b3 = 0, b4=0;
-            char c = REPLACE_CHAR;
-            int inputSize = 0;
-            try {
-                while (src.hasRemaining()) {
-                    b1 = src.get() & 0xff;
-                    inputSize = 1;
-                    if ((b1 & 0x80) != 0)
-                        return CoderResult.malformedForLength(inputSize);
-                    if (b1 == ESC || b1 == SO || b1 == SI) {
-                        if (b1 == ESC) {  // ESC
-                            if (src.remaining() < 2)
-                                return CoderResult.UNDERFLOW;
-                            b2 = src.get() & 0xff;
-                            inputSize++;
-                            if (b2 == '(') {
-                                b3 = src.get() & 0xff;
-                                inputSize++;
-                                if (b3 == 'B'){
-                                    currentState = ASCII;
-                                } else if (b3 == 'J'){
-                                    currentState = JISX0201_1976;
-                                } else if (b3 == 'I'){
-                                    currentState = JISX0201_1976_KANA;
-                                } else {
-                                   return CoderResult.malformedForLength(inputSize);
-                                }
-                            } else if (b2 == '$'){
-                                b3 = src.get() & 0xff;
-                                inputSize++;
-                                if (b3 == '@'){
-                                    currentState = JISX0208_1978;
-                                } else if (b3 == 'B'){
-                                    currentState = JISX0208_1983;
-                                } else if (b3 == '(' && decoder0212 != null) {
-                                    if (!src.hasRemaining())
-                                        return CoderResult.UNDERFLOW;
-                                    b4 = src.get() & 0xff;
-                                    inputSize++;
-                                    if (b4 == 'D') {
-                                        currentState = JISX0212_1990;
-                                    } else {
-                                        return CoderResult.malformedForLength(inputSize);
-                                    }
-                                } else {
-                                    return CoderResult.malformedForLength(inputSize);
-                                }
-                            } else {
-                                return CoderResult.malformedForLength(inputSize);
-                            }
-                        } else if (b1 == SO) {
-                            previousState = currentState;
-                            currentState = SHIFTOUT;
-                        } else if (b1 == SI) { // shift back in
-                            currentState = previousState;
-                        }
-                        mark += inputSize;
-                        continue;
-                    }
-                    if (!dst.hasRemaining())
-                        return CoderResult.OVERFLOW;
-
-                    switch (currentState){
-                        case ASCII:
-                            dst.put((char)(b1 & 0xff));
-                            break;
-                        case JISX0201_1976:
-                            switch (b1) {
-                              case 0x5c:  // Yen/tilde substitution
-                                dst.put('\u00a5');
-                                break;
-                              case 0x7e:
-                                dst.put('\u203e');
-                                break;
-                              default:
-                                dst.put((char)b1);
-                                break;
-                            }
-                            break;
-                        case JISX0208_1978:
-                        case JISX0208_1983:
-                            if (!src.hasRemaining())
-                                return CoderResult.UNDERFLOW;
-                            b2 = src.get() & 0xff;
-                            inputSize++;
-                            c = decodeDouble(b1,b2);
-                            if (c == REPLACE_CHAR)
-                                return CoderResult.unmappableForLength(inputSize);
-                            dst.put(c);
-                            break;
-                        case JISX0212_1990:
-                            if (!src.hasRemaining())
-                                return CoderResult.UNDERFLOW;
-                            b2 = src.get() & 0xff;
-                            inputSize++;
-                            c = decoder0212.decodeDouble(b1,b2);
-                            if (c == REPLACE_CHAR)
-                                return CoderResult.unmappableForLength(inputSize);
-                            dst.put(c);
-                            break;
-                        case JISX0201_1976_KANA:
-                        case SHIFTOUT:
-                            if (b1 > 0x60) {
-                                return CoderResult.malformedForLength(inputSize);
-                            }
-                            dst.put((char)(b1 + 0xff40));
-                            break;
-                    }
-                    mark += inputSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        // Make some protected methods public for use by JISAutoDetect
-        public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            if (src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-
-        public CoderResult implFlush(CharBuffer out) {
-            return super.implFlush(out);
-        }
-    }
-
-    private static class Encoder extends DoubleByteEncoder {
-        private static byte[] repl = { (byte)0x21, (byte)0x29 };
-        private int currentMode = ASCII;
-        private int replaceMode = JISX0208_1983;
-        private DoubleByteEncoder encoder0212 = null;
-        private boolean doSBKANA;
-
-        private Encoder(Charset cs,
-                        short[] index1,
-                        String[] index2,
-                        DoubleByteEncoder encoder0212,
-                        boolean doSBKANA) {
-            super(cs,
-                  index1,
-                  index2,
-                  repl,
-                  4.0f,
-                  (encoder0212 != null)? 9.0f : 8.0f);
-            this.encoder0212 = encoder0212;
-            this.doSBKANA = doSBKANA;
-        }
-
-        protected int encodeSingle(char inputChar) {
-            return -1;
-        }
-
-        protected void implReset() {
-            currentMode = ASCII;
-        }
-
-        protected void implReplaceWith(byte[] newReplacement) {
-            /* It's almost impossible to decide which charset they belong
-               to. The best thing we can do here is to "guess" based on
-               the length of newReplacement.
-             */
-            if (newReplacement.length == 1) {
-                replaceMode = ASCII;
-            } else if (newReplacement.length == 2) {
-                replaceMode = JISX0208_1983;
-            }
-        }
-
-        protected CoderResult implFlush(ByteBuffer out) {
-            if (currentMode != ASCII) {
-                if (out.remaining() < 3)
-                    return CoderResult.OVERFLOW;
-                out.put((byte)0x1b);
-                out.put((byte)0x28);
-                out.put((byte)0x42);
-                currentMode = ASCII;
-            }
-            return CoderResult.UNDERFLOW;
-        }
-
-        public boolean canEncode(char c) {
-            return ((c <= '\u007F') ||
-                    (c >= 0xFF61 && c <= 0xFF9F) ||
-                    (c == '\u00A5') ||
-                    (c == '\u203E') ||
-                    super.canEncode(c) ||
-                    (encoder0212!=null && encoder0212.canEncode(c)));
-        }
-
-        private final Surrogate.Parser sgp = new Surrogate.Parser();
-
-        private CoderResult encodeArrayLoop(CharBuffer src,
-                                            ByteBuffer dst)
-        {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if (c <= '\u007F') {
-                        if (currentMode != ASCII) {
-                            if (dl - dp < 3)
-                                return CoderResult.OVERFLOW;
-                            da[dp++] = (byte)0x1b;
-                            da[dp++] = (byte)0x28;
-                            da[dp++] = (byte)0x42;
-                            currentMode = ASCII;
-                        }
-                        if (dl - dp < 1)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = (byte)c;
-                    } else if (c >= 0xff61 && c <= 0xff9f && doSBKANA) {
-                        //a single byte kana
-                        if (currentMode != JISX0201_1976_KANA) {
-                            if (dl - dp < 3)
-                                return CoderResult.OVERFLOW;
-                            da[dp++] = (byte)0x1b;
-                            da[dp++] = (byte)0x28;
-                            da[dp++] = (byte)0x49;
-                            currentMode = JISX0201_1976_KANA;
-                        }
-                        if (dl - dp < 1)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = (byte)(c - 0xff40);
-                    } else if (c == '\u00A5' || c == '\u203E') {
-                        //backslash or tilde
-                        if (currentMode != JISX0201_1976) {
-                            if (dl - dp < 3)
-                                return CoderResult.OVERFLOW;
-                            da[dp++] = (byte)0x1b;
-                            da[dp++] = (byte)0x28;
-                            da[dp++] = (byte)0x4a;
-                            currentMode = JISX0201_1976;
-                        }
-                        if (dl - dp < 1)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = (c == '\u00A5')?(byte)0x5C:(byte)0x7e;
-                    } else {
-                        int index = encodeDouble(c);
-                        if (index != 0) {
-                            if (currentMode != JISX0208_1983) {
-                                if (dl - dp < 3)
-                                    return CoderResult.OVERFLOW;
-                                da[dp++] = (byte)0x1b;
-                                da[dp++] = (byte)0x24;
-                                da[dp++] = (byte)0x42;
-                                currentMode = JISX0208_1983;
-                            }
-                            if (dl - dp < 2)
-                                return CoderResult.OVERFLOW;
-                            da[dp++] = (byte)(index >> 8);
-                            da[dp++] = (byte)(index & 0xff);
-                        } else if (encoder0212 != null &&
-                                   (index = encoder0212.encodeDouble(c)) != 0) {
-                            if (currentMode != JISX0212_1990) {
-                                if (dl - dp < 4)
-                                    return CoderResult.OVERFLOW;
-                                da[dp++] = (byte)0x1b;
-                                da[dp++] = (byte)0x24;
-                                da[dp++] = (byte)0x28;
-                                da[dp++] = (byte)0x44;
-                                currentMode = JISX0212_1990;
-                            }
-                            if (dl - dp < 2)
-                                return CoderResult.OVERFLOW;
-                            da[dp++] = (byte)(index >> 8);
-                            da[dp++] = (byte)(index & 0xff);
-                        } else {
-                            if (Character.isSurrogate(c) && sgp.parse(c, sa, sp, sl) < 0)
-                                return sgp.error();
-                            if (unmappableCharacterAction()
-                                == CodingErrorAction.REPLACE
-                                && currentMode != replaceMode) {
-                                if (dl - dp < 3)
-                                    return CoderResult.OVERFLOW;
-                                if (replaceMode == ASCII) {
-                                    da[dp++] = (byte)0x1b;
-                                    da[dp++] = (byte)0x28;
-                                    da[dp++] = (byte)0x42;
-                                } else {
-                                    da[dp++] = (byte)0x1b;
-                                    da[dp++] = (byte)0x24;
-                                    da[dp++] = (byte)0x42;
-                                }
-                                currentMode = replaceMode;
-                            }
-                            if (Character.isSurrogate(c))
-                                return sgp.unmappableResult();
-                            return CoderResult.unmappableForLength(1);
-                        }
-                    }
-                    sp++;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult encodeBufferLoop(CharBuffer src,
-                                             ByteBuffer dst)
-        {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    char c = src.get();
-
-                    if (c <= '\u007F') {
-                        if (currentMode != ASCII) {
-                            if (dst.remaining() < 3)
-                                return CoderResult.OVERFLOW;
-                            dst.put((byte)0x1b);
-                            dst.put((byte)0x28);
-                            dst.put((byte)0x42);
-                            currentMode = ASCII;
-                        }
-                        if (dst.remaining() < 1)
-                            return CoderResult.OVERFLOW;
-                        dst.put((byte)c);
-                    } else if (c >= 0xff61 && c <= 0xff9f && doSBKANA) {
-                        //Is it a single byte kana?
-                        if (currentMode != JISX0201_1976_KANA) {
-                            if (dst.remaining() < 3)
-                                return CoderResult.OVERFLOW;
-                            dst.put((byte)0x1b);
-                            dst.put((byte)0x28);
-                            dst.put((byte)0x49);
-                            currentMode = JISX0201_1976_KANA;
-                        }
-                        if (dst.remaining() < 1)
-                            return CoderResult.OVERFLOW;
-                        dst.put((byte)(c - 0xff40));
-                    } else if (c == '\u00a5' || c == '\u203E') {
-                        if (currentMode != JISX0201_1976) {
-                            if (dst.remaining() < 3)
-                                return CoderResult.OVERFLOW;
-                            dst.put((byte)0x1b);
-                            dst.put((byte)0x28);
-                            dst.put((byte)0x4a);
-                            currentMode = JISX0201_1976;
-                        }
-                        if (dst.remaining() < 1)
-                            return CoderResult.OVERFLOW;
-                        dst.put((c == '\u00A5')?(byte)0x5C:(byte)0x7e);
-                    } else {
-                        int index = encodeDouble(c);
-                        if (index != 0) {
-                            if (currentMode != JISX0208_1983) {
-                                if (dst.remaining() < 3)
-                                    return CoderResult.OVERFLOW;
-                                dst.put((byte)0x1b);
-                                dst.put((byte)0x24);
-                                dst.put((byte)0x42);
-                                currentMode = JISX0208_1983;
-                            }
-                            if (dst.remaining() < 2)
-                                return CoderResult.OVERFLOW;
-                            dst.put((byte)(index >> 8));
-                            dst.put((byte)(index & 0xff));
-                        } else if (encoder0212 != null &&
-                                   (index = encoder0212.encodeDouble(c)) != 0) {
-                            if (currentMode != JISX0212_1990) {
-                                if (dst.remaining() < 4)
-                                    return CoderResult.OVERFLOW;
-                                dst.put((byte)0x1b);
-                                dst.put((byte)0x24);
-                                dst.put((byte)0x28);
-                                dst.put((byte)0x44);
-                                currentMode = JISX0212_1990;
-                            }
-                            if (dst.remaining() < 2)
-                                return CoderResult.OVERFLOW;
-                            dst.put((byte)(index >> 8));
-                            dst.put((byte)(index & 0xff));
-                        } else {
-                            if (Character.isSurrogate(c) && sgp.parse(c, src) < 0)
-                                return sgp.error();
-                            if (unmappableCharacterAction() == CodingErrorAction.REPLACE
-                                && currentMode != replaceMode) {
-                                if (dst.remaining() < 3)
-                                    return CoderResult.OVERFLOW;
-                                if (replaceMode == ASCII) {
-                                    dst.put((byte)0x1b);
-                                    dst.put((byte)0x28);
-                                    dst.put((byte)0x42);
-                                } else {
-                                    dst.put((byte)0x1b);
-                                    dst.put((byte)0x24);
-                                    dst.put((byte)0x42);
-                                }
-                                currentMode = replaceMode;
-                            }
-                            if (Character.isSurrogate(c))
-                                return sgp.unmappableResult();
-                            return CoderResult.unmappableForLength(1);
-                        }
-                    }
-                    mark++;
-                }
-                return CoderResult.UNDERFLOW;
-              } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src,
-                                         ByteBuffer dst)
-        {
-            if (src.hasArray() && dst.hasArray())
-                return encodeArrayLoop(src, dst);
-            else
-                return encodeBufferLoop(src, dst);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_JP_2.java b/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_JP_2.java
deleted file mode 100755
index 47ce7e9..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_JP_2.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-
-public class ISO2022_JP_2 extends ISO2022_JP
-{
-    public ISO2022_JP_2() {
-        super("ISO-2022-JP-2",
-              ExtendedCharsets.aliasesFor("ISO-2022-JP-2"));
-    }
-
-    public String historicalName() {
-        return "ISO2022JP2";
-    }
-
-    public boolean contains(Charset cs) {
-      return super.contains(cs) ||
-             (cs instanceof JIS_X_0212) ||
-             (cs instanceof ISO2022_JP_2);
-    }
-
-    protected DoubleByteDecoder get0212Decoder() {
-        return new JIS_X_0212_Decoder(this);
-    }
-
-    protected DoubleByteEncoder get0212Encoder() {
-        return new JIS_X_0212_Encoder(this);
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_KR.java b/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_KR.java
deleted file mode 100755
index 5385b05..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/ISO2022_KR.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.HistoricallyNamedCharset;
-import sun.nio.cs.ext.EUC_KR;
-
-public class ISO2022_KR extends ISO2022
-implements HistoricallyNamedCharset
-{
-    private static Charset ksc5601_cs;
-
-    public ISO2022_KR() {
-        super("ISO-2022-KR", ExtendedCharsets.aliasesFor("ISO-2022-KR"));
-        ksc5601_cs = new EUC_KR();
-    }
-
-    public boolean contains(Charset cs) {
-        // overlapping repertoire of EUC_KR, aka KSC5601
-        return ((cs instanceof EUC_KR) ||
-             (cs.name().equals("US-ASCII")) ||
-             (cs instanceof ISO2022_KR));
-    }
-
-    public String historicalName() {
-        return "ISO2022KR";
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    private static class Decoder extends ISO2022.Decoder {
-        public Decoder(Charset cs)
-        {
-            super(cs);
-            SODesig = new byte[][] {{(byte)'$', (byte)')', (byte)'C'}};
-            SODecoder = new CharsetDecoder[1];
-
-            try {
-                SODecoder[0] = ksc5601_cs.newDecoder();
-            } catch (Exception e) {};
-        }
-    }
-
-    private static class Encoder extends ISO2022.Encoder {
-
-        public Encoder(Charset cs)
-        {
-            super(cs);
-            SODesig = "$)C";
-
-            try {
-                ISOEncoder = ksc5601_cs.newEncoder();
-            } catch (Exception e) { }
-        }
-
-        public boolean canEncode(char c) {
-            return (ISOEncoder.canEncode(c));
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JISAutoDetect.java b/ojluni/src/main/java/sun/nio/cs/ext/JISAutoDetect.java
deleted file mode 100755
index 27a9cf8..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JISAutoDetect.java
+++ /dev/null
@@ -1,405 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import java.nio.charset.CharacterCodingException;
-import java.nio.charset.MalformedInputException;
-import sun.nio.cs.HistoricallyNamedCharset;
-import java.security.AccessController;
-import sun.security.action.GetPropertyAction;
-import static java.lang.Character.UnicodeBlock;
-
-
-public class JISAutoDetect
-    extends Charset
-    implements HistoricallyNamedCharset
-{
-
-    private final static int EUCJP_MASK       = 0x01;
-    private final static int SJIS2B_MASK      = 0x02;
-    private final static int SJIS1B_MASK      = 0x04;
-    private final static int EUCJP_KANA1_MASK = 0x08;
-    private final static int EUCJP_KANA2_MASK = 0x10;
-
-    public JISAutoDetect() {
-        super("x-JISAutoDetect", ExtendedCharsets.aliasesFor("x-JISAutoDetect"));
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof SJIS)
-                || (cs instanceof EUC_JP)
-                || (cs instanceof ISO2022_JP));
-    }
-
-    public boolean canEncode() {
-        return false;
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public String historicalName() {
-        return "JISAutoDetect";
-    }
-
-    public CharsetEncoder newEncoder() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * accessor methods used to share byte masking tables
-     * with the sun.io JISAutoDetect implementation
-     */
-
-    public static byte[] getByteMask1() {
-        return Decoder.maskTable1;
-    }
-
-    public static byte[] getByteMask2() {
-        return Decoder.maskTable2;
-    }
-
-    public final static boolean canBeSJIS1B(int mask) {
-        return (mask & SJIS1B_MASK) != 0;
-    }
-
-    public final static boolean canBeEUCJP(int mask) {
-        return (mask & EUCJP_MASK) != 0;
-    }
-
-    public final static boolean canBeEUCKana(int mask1, int mask2) {
-        return ((mask1 & EUCJP_KANA1_MASK) != 0)
-            && ((mask2 & EUCJP_KANA2_MASK) != 0);
-    }
-
-    // A heuristic algorithm for guessing if EUC-decoded text really
-    // might be Japanese text.  Better heuristics are possible...
-    private static boolean looksLikeJapanese(CharBuffer cb) {
-        int hiragana = 0;       // Fullwidth Hiragana
-        int katakana = 0;       // Halfwidth Katakana
-        while (cb.hasRemaining()) {
-            char c = cb.get();
-            if (0x3040 <= c && c <= 0x309f && ++hiragana > 1) return true;
-            if (0xff65 <= c && c <= 0xff9f && ++katakana > 1) return true;
-        }
-        return false;
-    }
-
-    private static class Decoder extends CharsetDecoder {
-
-        private final static String SJISName = getSJISName();
-        private final static String EUCJPName = getEUCJPName();
-        private DelegatableDecoder detectedDecoder = null;
-
-        public Decoder(Charset cs) {
-            super(cs, 0.5f, 1.0f);
-        }
-
-        private static boolean isPlainASCII(byte b) {
-            return b >= 0 && b != 0x1b;
-        }
-
-        private static void copyLeadingASCII(ByteBuffer src, CharBuffer dst) {
-            int start = src.position();
-            int limit = start + Math.min(src.remaining(), dst.remaining());
-            int p;
-            byte b;
-            for (p = start; p < limit && isPlainASCII(b = src.get(p)); p++)
-                dst.put((char)(b & 0xff));
-            src.position(p);
-        }
-
-        private CoderResult decodeLoop(Charset cs,
-                                       ByteBuffer src, CharBuffer dst) {
-            detectedDecoder = (DelegatableDecoder) cs.newDecoder();
-            return detectedDecoder.decodeLoop(src, dst);
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            if (detectedDecoder == null) {
-                copyLeadingASCII(src, dst);
-
-                // All ASCII?
-                if (! src.hasRemaining())
-                    return CoderResult.UNDERFLOW;
-                if (! dst.hasRemaining())
-                    return CoderResult.OVERFLOW;
-
-                // We need to perform double, not float, arithmetic; otherwise
-                // we lose low order bits when src is larger than 2**24.
-                int cbufsiz = (int)(src.limit() * (double)maxCharsPerByte());
-                CharBuffer sandbox = CharBuffer.allocate(cbufsiz);
-
-                // First try ISO-2022-JP, since there is no ambiguity
-                Charset cs2022 = Charset.forName("ISO-2022-JP");
-                DelegatableDecoder dd2022
-                    = (DelegatableDecoder) cs2022.newDecoder();
-                ByteBuffer src2022 = src.asReadOnlyBuffer();
-                CoderResult res2022 = dd2022.decodeLoop(src2022, sandbox);
-                if (! res2022.isError())
-                    return decodeLoop(cs2022, src, dst);
-
-                // We must choose between EUC and SJIS
-                Charset csEUCJ = Charset.forName(EUCJPName);
-                Charset csSJIS = Charset.forName(SJISName);
-
-                DelegatableDecoder ddEUCJ
-                    = (DelegatableDecoder) csEUCJ.newDecoder();
-                ByteBuffer srcEUCJ = src.asReadOnlyBuffer();
-                sandbox.clear();
-                CoderResult resEUCJ = ddEUCJ.decodeLoop(srcEUCJ, sandbox);
-                // If EUC decoding fails, must be SJIS
-                if (resEUCJ.isError())
-                    return decodeLoop(csSJIS, src, dst);
-
-                DelegatableDecoder ddSJIS
-                    = (DelegatableDecoder) csSJIS.newDecoder();
-                ByteBuffer srcSJIS = src.asReadOnlyBuffer();
-                CharBuffer sandboxSJIS = CharBuffer.allocate(cbufsiz);
-                CoderResult resSJIS = ddSJIS.decodeLoop(srcSJIS, sandboxSJIS);
-                // If SJIS decoding fails, must be EUC
-                if (resSJIS.isError())
-                    return decodeLoop(csEUCJ, src, dst);
-
-                // From here on, we have some ambiguity, and must guess.
-
-                // We prefer input that does not appear to end mid-character.
-                if (srcEUCJ.position() > srcSJIS.position())
-                    return decodeLoop(csEUCJ, src, dst);
-
-                if (srcEUCJ.position() < srcSJIS.position())
-                    return decodeLoop(csSJIS, src, dst);
-
-                // end-of-input is after the first byte of the first char?
-                if (src.position() == srcEUCJ.position())
-                    return CoderResult.UNDERFLOW;
-
-                // Use heuristic knowledge of typical Japanese text
-                sandbox.flip();
-                Charset guess = looksLikeJapanese(sandbox) ? csEUCJ : csSJIS;
-                return decodeLoop(guess, src, dst);
-            }
-
-            return detectedDecoder.decodeLoop(src, dst);
-        }
-
-        protected void implReset() {
-            detectedDecoder = null;
-        }
-
-        protected CoderResult implFlush(CharBuffer out) {
-            if (detectedDecoder != null)
-                return detectedDecoder.implFlush(out);
-            else
-                return super.implFlush(out);
-        }
-
-        public boolean isAutoDetecting() {
-            return true;
-        }
-
-        public boolean isCharsetDetected() {
-            return detectedDecoder != null;
-        }
-
-        public Charset detectedCharset() {
-            if (detectedDecoder == null)
-                throw new IllegalStateException("charset not yet detected");
-            return ((CharsetDecoder) detectedDecoder).charset();
-        }
-
-        /**
-         * Returned Shift_JIS Charset name is OS dependent
-         */
-        private static String getSJISName() {
-            String osName = AccessController.doPrivileged(
-                new GetPropertyAction("os.name"));
-            if (osName.equals("Solaris") || osName.equals("SunOS"))
-                return("PCK");
-            else if (osName.startsWith("Windows"))
-                return("windows-31J");
-            else
-                return("Shift_JIS");
-        }
-
-        /**
-         * Returned EUC-JP Charset name is OS dependent
-         */
-
-        private static String getEUCJPName() {
-            String osName = AccessController.doPrivileged(
-                new GetPropertyAction("os.name"));
-            if (osName.equals("Solaris") || osName.equals("SunOS"))
-                return("x-eucjp-open");
-            else
-                return("EUC_JP");
-        }
-
-        // Mask tables - each entry indicates possibility of first or
-        // second byte being SJIS or EUC_JP
-        private static final byte maskTable1[] = {
-            0, 0, 0, 0, // 0x00 - 0x03
-            0, 0, 0, 0, // 0x04 - 0x07
-            0, 0, 0, 0, // 0x08 - 0x0b
-            0, 0, 0, 0, // 0x0c - 0x0f
-            0, 0, 0, 0, // 0x10 - 0x13
-            0, 0, 0, 0, // 0x14 - 0x17
-            0, 0, 0, 0, // 0x18 - 0x1b
-            0, 0, 0, 0, // 0x1c - 0x1f
-            0, 0, 0, 0, // 0x20 - 0x23
-            0, 0, 0, 0, // 0x24 - 0x27
-            0, 0, 0, 0, // 0x28 - 0x2b
-            0, 0, 0, 0, // 0x2c - 0x2f
-            0, 0, 0, 0, // 0x30 - 0x33
-            0, 0, 0, 0, // 0x34 - 0x37
-            0, 0, 0, 0, // 0x38 - 0x3b
-            0, 0, 0, 0, // 0x3c - 0x3f
-            0, 0, 0, 0, // 0x40 - 0x43
-            0, 0, 0, 0, // 0x44 - 0x47
-            0, 0, 0, 0, // 0x48 - 0x4b
-            0, 0, 0, 0, // 0x4c - 0x4f
-            0, 0, 0, 0, // 0x50 - 0x53
-            0, 0, 0, 0, // 0x54 - 0x57
-            0, 0, 0, 0, // 0x58 - 0x5b
-            0, 0, 0, 0, // 0x5c - 0x5f
-            0, 0, 0, 0, // 0x60 - 0x63
-            0, 0, 0, 0, // 0x64 - 0x67
-            0, 0, 0, 0, // 0x68 - 0x6b
-            0, 0, 0, 0, // 0x6c - 0x6f
-            0, 0, 0, 0, // 0x70 - 0x73
-            0, 0, 0, 0, // 0x74 - 0x77
-            0, 0, 0, 0, // 0x78 - 0x7b
-            0, 0, 0, 0, // 0x7c - 0x7f
-            0, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK,   // 0x80 - 0x83
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x84 - 0x87
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x88 - 0x8b
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK,   // 0x8c - 0x8f
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x90 - 0x93
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x94 - 0x97
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x98 - 0x9b
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x9c - 0x9f
-            0, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK,  // 0xa0 - 0xa3
-            SJIS1B_MASK|EUCJP_MASK|EUCJP_KANA1_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK,    // 0xa4 - 0xa7
-            SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK,     // 0xa8 - 0xab
-            SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK,     // 0xac - 0xaf
-            SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK,     // 0xb0 - 0xb3
-            SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK,     // 0xb4 - 0xb7
-            SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK,     // 0xb8 - 0xbb
-            SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK,     // 0xbc - 0xbf
-            SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK,     // 0xc0 - 0xc3
-            SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK,     // 0xc4 - 0xc7
-            SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK,     // 0xc8 - 0xcb
-            SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK,     // 0xcc - 0xcf
-            SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK,     // 0xd0 - 0xd3
-            SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK,     // 0xd4 - 0xd7
-            SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK,     // 0xd8 - 0xdb
-            SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK, SJIS1B_MASK|EUCJP_MASK,     // 0xdc - 0xdf
-            SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK,     // 0xe0 - 0xe3
-            SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK,     // 0xe4 - 0xe7
-            SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK,     // 0xe8 - 0xeb
-            SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK,     // 0xec - 0xef
-            SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK,     // 0xf0 - 0xf3
-            SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK,     // 0xf4 - 0xf7
-            SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK,     // 0xf8 - 0xfb
-            SJIS2B_MASK|EUCJP_MASK, EUCJP_MASK, EUCJP_MASK, 0   // 0xfc - 0xff
-        };
-
-        private static final byte maskTable2[] = {
-            0, 0, 0, 0, // 0x00 - 0x03
-            0, 0, 0, 0, // 0x04 - 0x07
-            0, 0, 0, 0, // 0x08 - 0x0b
-            0, 0, 0, 0, // 0x0c - 0x0f
-            0, 0, 0, 0, // 0x10 - 0x13
-            0, 0, 0, 0, // 0x14 - 0x17
-            0, 0, 0, 0, // 0x18 - 0x1b
-            0, 0, 0, 0, // 0x1c - 0x1f
-            0, 0, 0, 0, // 0x20 - 0x23
-            0, 0, 0, 0, // 0x24 - 0x27
-            0, 0, 0, 0, // 0x28 - 0x2b
-            0, 0, 0, 0, // 0x2c - 0x2f
-            0, 0, 0, 0, // 0x30 - 0x33
-            0, 0, 0, 0, // 0x34 - 0x37
-            0, 0, 0, 0, // 0x38 - 0x3b
-            0, 0, 0, 0, // 0x3c - 0x3f
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x40 - 0x43
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x44 - 0x47
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x48 - 0x4b
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x4c - 0x4f
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x50 - 0x53
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x54 - 0x57
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x58 - 0x5b
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x5c - 0x5f
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x60 - 0x63
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x64 - 0x67
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x68 - 0x6b
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x6c - 0x6f
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x70 - 0x73
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x74 - 0x77
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x78 - 0x7b
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, 0,   // 0x7c - 0x7f
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x80 - 0x83
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x84 - 0x87
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x88 - 0x8b
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x8c - 0x8f
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x90 - 0x93
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x94 - 0x97
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x98 - 0x9b
-            SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, SJIS2B_MASK, // 0x9c - 0x9f
-            SJIS2B_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xa0 - 0xa3
-            SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xa4 - 0xa7
-            SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xa8 - 0xab
-            SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xac - 0xaf
-            SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xb0 - 0xb3
-            SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xb4 - 0xb7
-            SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xb8 - 0xbb
-            SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xbc - 0xbf
-            SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xc0 - 0xc3
-            SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xc4 - 0xc7
-            SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xc8 - 0xcb
-            SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xcc - 0xcf
-            SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xd0 - 0xd3
-            SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xd4 - 0xd7
-            SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xd8 - 0xdb
-            SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS1B_MASK|SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xdc - 0xdf
-            SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xe0 - 0xe3
-            SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xe4 - 0xe7
-            SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xe8 - 0xeb
-            SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xec - 0xef
-            SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, SJIS2B_MASK|EUCJP_MASK|EUCJP_KANA2_MASK, // 0xf0 - 0xf3
-            SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK,     // 0xf4 - 0xf7
-            SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK, SJIS2B_MASK|EUCJP_MASK,     // 0xf8 - 0xfb
-            SJIS2B_MASK|EUCJP_MASK, EUCJP_MASK, EUCJP_MASK, 0   // 0xfc - 0xff
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0201.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0201.java
deleted file mode 100755
index 7b528e6..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0201.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import sun.nio.cs.SingleByteEncoder;
-import sun.nio.cs.SingleByteDecoder;
-
-public class JIS_X_0201
-    extends Charset
-{
-
-    public JIS_X_0201() {
-        super("JIS_X0201", ExtendedCharsets.aliasesFor("JIS_X0201"));
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof JIS_X_0201));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    public static class Decoder extends SingleByteDecoder {
-
-        public Decoder(Charset cs) {
-            super(cs, byteToCharTable);
-        }
-
-        private final static String byteToCharTable =
-
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0x80 - 0x87
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0x88 - 0x8F
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0x90 - 0x97
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0x98 - 0x9F
-        "\uFFFD\uFF61\uFF62\uFF63\uFF64\uFF65\uFF66\uFF67" +    // 0xA0 - 0xA7
-        "\uFF68\uFF69\uFF6A\uFF6B\uFF6C\uFF6D\uFF6E\uFF6F" +    // 0xA8 - 0xAF
-        "\uFF70\uFF71\uFF72\uFF73\uFF74\uFF75\uFF76\uFF77" +    // 0xB0 - 0xB7
-        "\uFF78\uFF79\uFF7A\uFF7B\uFF7C\uFF7D\uFF7E\uFF7F" +    // 0xB8 - 0xBF
-        "\uFF80\uFF81\uFF82\uFF83\uFF84\uFF85\uFF86\uFF87" +    // 0xC0 - 0xC7
-        "\uFF88\uFF89\uFF8A\uFF8B\uFF8C\uFF8D\uFF8E\uFF8F" +    // 0xC8 - 0xCF
-        "\uFF90\uFF91\uFF92\uFF93\uFF94\uFF95\uFF96\uFF97" +    // 0xD0 - 0xD7
-        "\uFF98\uFF99\uFF9A\uFF9B\uFF9C\uFF9D\uFF9E\uFF9F" +    // 0xD8 - 0xDF
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0xE0 - 0xE7
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0xE8 - 0xEF
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0xF0 - 0xF7
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" +    // 0xF8 - 0xFF
-        "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" +    // 0x00 - 0x07
-        "\b\t\n\u000B\f\r\u000E\u000F" +        // 0x08 - 0x0F
-        "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" +    // 0x10 - 0x17
-        "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" +    // 0x18 - 0x1F
-        "\u0020\u0021\"\u0023\u0024\u0025\u0026\'" +    // 0x20 - 0x27
-        "\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F" +    // 0x28 - 0x2F
-        "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037" +    // 0x30 - 0x37
-        "\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u003F" +    // 0x38 - 0x3F
-        "\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047" +    // 0x40 - 0x47
-        "\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F" +    // 0x48 - 0x4F
-        "\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057" +    // 0x50 - 0x57
-        "\u0058\u0059\u005A\u005B\\\u005D\u005E\u005F" +        // 0x58 - 0x5F
-        "\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067" +    // 0x60 - 0x67
-        "\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F" +    // 0x68 - 0x6F
-        "\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077" +    // 0x70 - 0x77
-        "\u0078\u0079\u007A\u007B\u007C\u007D\u007E\u007F";     // 0x78 - 0x7F
-    }
-
-    public static class Encoder extends SingleByteEncoder {
-
-        public Encoder(Charset cs) {
-            super(cs, index1, index2, 0xFF00, 0x00FF, 8);
-        }
-
-        private final static String index2 =
-
-            "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" +
-            "\b\t\n\u000B\f\r\u000E\u000F" +
-            "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" +
-            "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" +
-            "\u0020\u0021\"\u0023\u0024\u0025\u0026\'" +
-            "\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F" +
-            "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037" +
-            "\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u003F" +
-            "\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047" +
-            "\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F" +
-            "\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057" +
-            "\u0058\u0059\u005A\u005B\\\u005D\u005E\u005F" +
-            "\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067" +
-            "\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F" +
-            "\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077" +
-            "\u0078\u0079\u007A\u007B\u007C\u007D\u007E\u007F" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\\\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u007E\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8" +
-            "\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0" +
-            "\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8" +
-            "\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0" +
-            "\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8" +
-            "\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0" +
-            "\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8" +
-            "\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static short index1[] = {
-            0, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-            166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-            360, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-            166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-            166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-            166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-            166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-            166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-            166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-            166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-            166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-            166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-            166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-            166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-            166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
-            166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 519,
-        };
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208.java
deleted file mode 100755
index ab7726d..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
-public class JIS_X_0208
-    extends Charset
-{
-
-    public JIS_X_0208() {
-        super("x-JIS0208", ExtendedCharsets.aliasesFor("x-JIS0208"));
-    }
-
-    public boolean contains(Charset cs) {
-        return (cs instanceof JIS_X_0208);
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new JIS_X_0208_Encoder(this);
-    }
-
-    private static class Decoder extends JIS_X_0208_Decoder {
-        protected char decodeSingle(int b) {
-            return DoubleByteDecoder.REPLACE_CHAR;
-        }
-
-        public Decoder(Charset cs) {
-            super(cs);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_Decoder.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_Decoder.java
deleted file mode 100755
index 552ca60..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_Decoder.java
+++ /dev/null
@@ -1,1017 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-
-public class JIS_X_0208_Decoder extends DoubleByteDecoder
-{
-    public JIS_X_0208_Decoder(Charset cs) {
-        super(cs,
-              index1,
-              index2,
-              0x21,
-              0x7E);
-    }
-
-    private final static String innerIndex0=
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3000\u3001"+
-        "\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01"+
-        "\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F"+
-        "\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006"+
-        "\u3007\u30FC\u2014\u2010\uFF0F\uFF3C\u301C\u2016"+
-        "\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08"+
-        "\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008"+
-        "\u3009\u300A\u300B\u300C\u300D\u300E\u300F\u3010"+
-        "\u3011\uFF0B\u2212\u00B1\u00D7\u00F7\uFF1D\u2260"+
-        "\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640"+
-        "\u00B0\u2032\u2033\u2103\uFFE5\uFF04\u00A2\u00A3"+
-        "\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605"+
-        "\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3"+
-        "\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191"+
-        "\u2193\u3013\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2208\u220B\u2286"+
-        "\u2287\u2282\u2283\u222A\u2229\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2227\u2228\u00AC"+
-        "\u21D2\u21D4\u2200\u2203\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2220"+
-        "\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B"+
-        "\u221A\u223D\u221D\u2235\u222B\u222C\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u212B\u2030\u266F"+
-        "\u266D\u266A\u2020\u2021\u00B6\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\u25EF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16"+
-        "\uFF17\uFF18\uFF19\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26"+
-        "\uFF27\uFF28\uFF29\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E"+
-        "\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34\uFF35\uFF36"+
-        "\uFF37\uFF38\uFF39\uFF3A\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46"+
-        "\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E"+
-        "\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56"+
-        "\uFF57\uFF58\uFF59\uFF5A\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048"+
-        "\u3049\u304A\u304B\u304C\u304D\u304E\u304F\u3050"+
-        "\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058"+
-        "\u3059\u305A\u305B\u305C\u305D\u305E\u305F\u3060"+
-        "\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068"+
-        "\u3069\u306A\u306B\u306C\u306D\u306E\u306F\u3070"+
-        "\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078"+
-        "\u3079\u307A\u307B\u307C\u307D\u307E\u307F\u3080"+
-        "\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088"+
-        "\u3089\u308A\u308B\u308C\u308D\u308E\u308F\u3090"+
-        "\u3091\u3092\u3093\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u30A1\u30A2"+
-        "\u30A3\u30A4\u30A5\u30A6\u30A7\u30A8\u30A9\u30AA"+
-        "\u30AB\u30AC\u30AD\u30AE\u30AF\u30B0\u30B1\u30B2"+
-        "\u30B3\u30B4\u30B5\u30B6\u30B7\u30B8\u30B9\u30BA"+
-        "\u30BB\u30BC\u30BD\u30BE\u30BF\u30C0\u30C1\u30C2"+
-        "\u30C3\u30C4\u30C5\u30C6\u30C7\u30C8\u30C9\u30CA"+
-        "\u30CB\u30CC\u30CD\u30CE\u30CF\u30D0\u30D1\u30D2"+
-        "\u30D3\u30D4\u30D5\u30D6\u30D7\u30D8\u30D9\u30DA"+
-        "\u30DB\u30DC\u30DD\u30DE\u30DF\u30E0\u30E1\u30E2"+
-        "\u30E3\u30E4\u30E5\u30E6\u30E7\u30E8\u30E9\u30EA"+
-        "\u30EB\u30EC\u30ED\u30EE\u30EF\u30F0\u30F1\u30F2"+
-        "\u30F3\u30F4\u30F5\u30F6\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u0391\u0392\u0393\u0394"+
-        "\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C"+
-        "\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5"+
-        "\u03A6\u03A7\u03A8\u03A9\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u03B1\u03B2\u03B3\u03B4"+
-        "\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC"+
-        "\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C4\u03C5"+
-        "\u03C6\u03C7\u03C8\u03C9\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\u0410\u0411\u0412\u0413\u0414\u0415"+
-        "\u0401\u0416\u0417\u0418\u0419\u041A\u041B\u041C"+
-        "\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424"+
-        "\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C"+
-        "\u042D\u042E\u042F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\u0430\u0431\u0432\u0433\u0434\u0435"+
-        "\u0451\u0436\u0437\u0438\u0439\u043A\u043B\u043C"+
-        "\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444"+
-        "\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C"+
-        "\u044D\u044E\u044F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C"+
-        "\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B"+
-        "\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F"+
-        "\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4E9C\u5516"+
-        "\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475"+
-        "\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6"+
-        "\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B"+
-        "\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89"+
-        "\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5"+
-        "\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01"+
-        "\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F"+
-        "\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02"+
-        "\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1"+
-        "\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B"+
-        "\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15"+
-        "\u98F2\u6DEB\u80E4\u852D\u9662\u9670\u96A0\u97FB"+
-        "\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F"+
-        "\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504"+
-        "\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F"+
-        "\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6"+
-        "\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29"+
-        "\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED"+
-        "\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2"+
-        "\u698E\u53AD\u5186\u5712\u5830\u5944\u5BB4\u5EF6"+
-        "\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159"+
-        "\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B"+
-        "\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965"+
-        "\u5F80\u5FDC\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B"+
-        "\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B"+
-        "\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA"+
-        "\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE"+
-        "\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F"+
-        "\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C"+
-        "\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1"+
-        "\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629"+
-        "\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211"+
-        "\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913"+
-        "\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB"+
-        "\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539"+
-        "\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75"+
-        "\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916"+
-        "\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB"+
-        "\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3"+
-        "\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1"+
-        "\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A"+
-        "\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66"+
-        "\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\u6A7F"+
-        "\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B"+
-        "\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6"+
-        "\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC"+
-        "\u938C\u565B\u9D28\u6822\u8305\u8431\u7CA5\u5208"+
-        "\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8"+
-        "\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB"+
-        "\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562"+
-        "\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97"+
-        "\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21"+
-        "\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC"+
-        "\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3"+
-        "\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C"+
-        "\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858"+
-        "\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09"+
-        "\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7"+
-        "\u65E2\u671F\u68CB\u68C4\u6A5F\u5E30\u6BC5\u6C17"+
-        "\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F"+
-        "\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C"+
-        "\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC"+
-        "\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70"+
-        "\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58"+
-        "\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650"+
-        "\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE"+
-        "\u5F13\u6025\u6551\u673D\u6C42\u6C72\u6CE3\u7078"+
-        "\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7"+
-        "\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20"+
-        "\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8"+
-        "\u4EAB\u4EAC\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171"+
-        "\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1"+
-        "\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B"+
-        "\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E"+
-        "\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D"+
-        "\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81"+
-        "\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D"+
-        "\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F"+
-        "\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036"+
-        "\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6"+
-        "\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076"+
-        "\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48";
-
-    private final static String innerIndex1=
-        "\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688"+
-        "\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB"+
-        "\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2"+
-        "\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951"+
-        "\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A"+
-        "\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C"+
-        "\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63"+
-        "\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287"+
-        "\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A"+
-        "\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039"+
-        "\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805"+
-        "\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\u691C\u6A29"+
-        "\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9"+
-        "\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855"+
-        "\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B"+
-        "\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650"+
-        "\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1"+
-        "\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA"+
-        "\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237"+
-        "\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449"+
-        "\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A"+
-        "\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4"+
-        "\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9"+
-        "\u52FE\u539A\u53E3\u5411\u540E\u5589\u5751\u57A2"+
-        "\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78"+
-        "\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8"+
-        "\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897"+
-        "\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687"+
-        "\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015"+
-        "\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C"+
-        "\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F"+
-        "\u92FC\u95A4\u964D\u9805\u9999\u9AD8\u9D3B\u525B"+
-        "\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F"+
-        "\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60"+
-        "\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8"+
-        "\u72DB\u8FBC\u6B64\u9803\u4ECA\u56F0\u5764\u58BE"+
-        "\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7"+
-        "\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506"+
-        "\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50"+
-        "\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D"+
-        "\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1"+
-        "\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826"+
-        "\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264"+
-        "\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A"+
-        "\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C"+
-        "\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56"+
-        "\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237"+
-        "\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1"+
-        "\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09"+
-        "\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6"+
-        "\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178"+
-        "\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F"+
-        "\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9"+
-        "\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307"+
-        "\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B"+
-        "\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2"+
-        "\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE"+
-        "\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D"+
-        "\u5150\u5B57\u5BFA\u6148\u6301\u6642\u6B21\u6ECB"+
-        "\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033"+
-        "\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B"+
-        "\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931"+
-        "\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F"+
-        "\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E"+
-        "\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E"+
-        "\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F"+
-        "\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B"+
-        "\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B"+
-        "\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152"+
-        "\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC"+
-        "\u9700\u56DA\u53CE\u5468\u5B97\u5C31\u5DDE\u4FEE"+
-        "\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2"+
-        "\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F"+
-        "\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145"+
-        "\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26"+
-        "\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E"+
-        "\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB"+
-        "\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC"+
-        "\u696F\u6B89\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1"+
-        "\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9"+
-        "\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8"+
-        "\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664"+
-        "\u50B7\u511F\u52DD\u5320\u5347\u53EC\u54E8\u5546"+
-        "\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F"+
-        "\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284"+
-        "\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E"+
-        "\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C"+
-        "\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0"+
-        "\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549"+
-        "\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE"+
-        "\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08"+
-        "\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22"+
-        "\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573"+
-        "\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE"+
-        "\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6"+
-        "\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507"+
-        "\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B"+
-        "\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E"+
-        "\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB"+
-        "\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875"+
-        "\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663"+
-        "\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\u9017"+
-        "\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B"+
-        "\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E"+
-        "\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E"+
-        "\u6749\u6919\u83C5\u9817\u96C0\u88FE\u6F84\u647A"+
-        "\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2"+
-        "\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674"+
-        "\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE"+
-        "\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D"+
-        "\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D"+
-        "\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D"+
-        "\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207"+
-        "\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC"+
-        "\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360"+
-        "\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813"+
-        "\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D"+
-        "\u65CB\u7A7F\u7BAD\u7DDA\u7E4A\u7FA8\u817A\u821B"+
-        "\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD"+
-        "\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168"+
-        "\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA"+
-        "\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956"+
-        "\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061"+
-        "\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE"+
-        "\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C"+
-        "\u6383\u633F\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD"+
-        "\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF"+
-        "\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB"+
-        "\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF"+
-        "\u5897\u618E\u81D3\u8535\u8D08\u9020\u4FC3\u5074"+
-        "\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F"+
-        "\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176"+
-        "\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6"+
-        "\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0"+
-        "\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53"+
-        "\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B"+
-        "\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B"+
-        "\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0"+
-        "\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353"+
-        "\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422"+
-        "\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA"+
-        "\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA"+
-        "\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39"+
-        "\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1"+
-        "\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6"+
-        "\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696"+
-        "\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B"+
-        "\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718"+
-        "\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010"+
-        "\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99"+
-        "\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B"+
-        "\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457"+
-        "\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\u5E16\u5E33"+
-        "\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2"+
-        "\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178"+
-        "\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802"+
-        "\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3"+
-        "\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A"+
-        "\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C"+
-        "\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A"+
-        "\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD"+
-        "\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A"+
-        "\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A"+
-        "\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247"+
-        "\u8A02\u8AE6\u8E44\u9013\u90B8\u912D\u91D8\u9F0E"+
-        "\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069"+
-        "\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244"+
-        "\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C"+
-        "\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530"+
-        "\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92"+
-        "\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD"+
-        "\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012"+
-        "\u5012\u515A\u51AC\u51CD\u5200\u5510\u5854\u5858"+
-        "\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771"+
-        "\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F"+
-        "\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6"+
-        "\u7D71\u5230\u8463\u8569\u85E4\u8A0E\u8B04\u8C46"+
-        "\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8"+
-        "\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E"+
-        "\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07"+
-        "\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4"+
-        "\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934"+
-        "\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F"+
-        "\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7"+
-        "\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E"+
-        "\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357"+
-        "\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9"+
-        "\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165";
-
-    private final static String innerIndex2=
-        "\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1"+
-        "\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5"+
-        "\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC"+
-        "\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2"+
-        "\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2"+
-        "\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3"+
-        "\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC"+
-        "\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\u6973"+
-        "\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F"+
-        "\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF"+
-        "\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD"+
-        "\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1"+
-        "\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551"+
-        "\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10"+
-        "\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4"+
-        "\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C"+
-        "\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554"+
-        "\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812"+
-        "\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE"+
-        "\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249"+
-        "\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891"+
-        "\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F"+
-        "\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787"+
-        "\u6BD8\u7435\u7709\u7F8E\u9F3B\u67CA\u7A17\u5339"+
-        "\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5"+
-        "\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E"+
-        "\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968"+
-        "\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7"+
-        "\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C"+
-        "\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D"+
-        "\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C"+
-        "\u6016\u6276\u6577\u65A7\u666E\u6D6E\u7236\u7B26"+
-        "\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C"+
-        "\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8"+
-        "\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9"+
-        "\u5E45\u670D\u798F\u8179\u8907\u8986\u6DF5\u5F17"+
-        "\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674"+
-        "\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B"+
-        "\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63"+
-        "\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73"+
-        "\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511"+
-        "\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4"+
-        "\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217"+
-        "\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42"+
-        "\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9"+
-        "\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0"+
-        "\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B"+
-        "\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C"+
-        "\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD"+
-        "\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8"+
-        "\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2"+
-        "\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E"+
-        "\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2"+
-        "\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86"+
-        "\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\u6469"+
-        "\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE"+
-        "\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52"+
-        "\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4"+
-        "\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513"+
-        "\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C"+
-        "\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720"+
-        "\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B"+
-        "\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7"+
-        "\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF"+
-        "\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F"+
-        "\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728"+
-        "\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E"+
-        "\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6"+
-        "\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79"+
-        "\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453"+
-        "\u6109\u6108\u6CB9\u7652\u8AED\u8F38\u552F\u4F51"+
-        "\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6"+
-        "\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950"+
-        "\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915"+
-        "\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C"+
-        "\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A"+
-        "\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000"+
-        "\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A"+
-        "\u617E\u6291\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0"+
-        "\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B"+
-        "\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB"+
-        "\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8"+
-        "\u7406\u7483\u75E2\u88CF\u88E1\u91CC\u96E2\u9678"+
-        "\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41"+
-        "\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D"+
-        "\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21"+
-        "\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD"+
-        "\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818"+
-        "\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433"+
-        "\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99"+
-        "\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA"+
-        "\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A"+
-        "\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2"+
-        "\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F"+
-        "\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2"+
-        "\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C"+
-        "\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E"+
-        "\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6"+
-        "\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0"+
-        "\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900"+
-        "\u6E7E\u7897\u8155\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5F0C\u4E10"+
-        "\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56"+
-        "\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E"+
-        "\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE"+
-        "\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF"+
-        "\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47"+
-        "\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91"+
-        "\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8"+
-        "\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028"+
-        "\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029"+
-        "\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703"+
-        "\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080"+
-        "\u509A\u5085\u50B4\u50B2\u50C9\u50CA\u50B3\u50C2"+
-        "\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5"+
-        "\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121"+
-        "\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C"+
-        "\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182"+
-        "\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196"+
-        "\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1"+
-        "\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0"+
-        "\u8655\u51E9\u51ED\u51F0\u51F5\u51FE\u5204\u520B"+
-        "\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F"+
-        "\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269"+
-        "\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288"+
-        "\u5291\u8FA8\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1"+
-        "\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3"+
-        "\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310"+
-        "\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338"+
-        "\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E"+
-        "\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0"+
-        "\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9"+
-        "\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401"+
-        "\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429"+
-        "\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477"+
-        "\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486"+
-        "\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8"+
-        "\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6"+
-        "\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539"+
-        "\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557"+
-        "\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F"+
-        "\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9"+
-        "\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4"+
-        "\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9"+
-        "\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\u566B"+
-        "\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0"+
-        "\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC"+
-        "\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7"+
-        "\u56EE\u56F9\u5700\u56FF\u5704\u5709\u5708\u570B"+
-        "\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737"+
-        "\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788"+
-        "\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA"+
-        "\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6"+
-        "\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B"+
-        "\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F"+
-        "\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3"+
-        "\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF"+
-        "\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A"+
-        "\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938"+
-        "\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962"+
-        "\u5960\u5967\u596C\u5969\u5978\u5981\u599D\u4F5E"+
-        "\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9"+
-        "\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40"+
-        "\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC"+
-        "\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9"+
-        "\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0"+
-        "\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55"+
-        "\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78"+
-        "\u6588\u5B7A\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7"+
-        "\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5"+
-        "\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D"+
-        "\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46"+
-        "\u5C4E\u5C53\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62"+
-        "\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB"+
-        "\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9"+
-        "\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17"+
-        "\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19"+
-        "\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76"+
-        "\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD"+
-        "\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6"+
-        "\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11"+
-        "\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57"+
-        "\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A"+
-        "\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF";
-
-    private final static String innerIndex3=
-        "\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8"+
-        "\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE"+
-        "\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29"+
-        "\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51"+
-        "\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83"+
-        "\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99"+
-        "\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4"+
-        "\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\u6019"+
-        "\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026"+
-        "\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A"+
-        "\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B"+
-        "\u6059\u6081\u608D\u60E7\u6083\u609A\u6084\u609B"+
-        "\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0"+
-        "\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D"+
-        "\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103"+
-        "\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128"+
-        "\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142"+
-        "\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174"+
-        "\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199"+
-        "\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB"+
-        "\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6"+
-        "\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA"+
-        "\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209"+
-        "\u620D\u620C\u6214\u621B\u621E\u6221\u622A\u622E"+
-        "\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B"+
-        "\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293"+
-        "\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF"+
-        "\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2"+
-        "\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302"+
-        "\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F"+
-        "\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389"+
-        "\u639F\u63B5\u636B\u6369\u63BE\u63E9\u63C0\u63C6"+
-        "\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406"+
-        "\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467"+
-        "\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9"+
-        "\u6488\u64BC\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8"+
-        "\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3"+
-        "\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD"+
-        "\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535"+
-        "\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D"+
-        "\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A"+
-        "\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4"+
-        "\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772"+
-        "\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C"+
-        "\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667"+
-        "\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689"+
-        "\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC"+
-        "\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9"+
-        "\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727"+
-        "\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746"+
-        "\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9"+
-        "\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7"+
-        "\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE"+
-        "\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C"+
-        "\u681E\u6846\u6829\u6840\u684D\u6832\u684E\u68B3"+
-        "\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD"+
-        "\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5"+
-        "\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908"+
-        "\u68D8\u6922\u6926\u68E1\u690C\u68CD\u68D4\u68E7"+
-        "\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9"+
-        "\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6"+
-        "\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E"+
-        "\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D"+
-        "\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3"+
-        "\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7"+
-        "\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8"+
-        "\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05"+
-        "\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1"+
-        "\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47"+
-        "\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D"+
-        "\u6AA0\u6A84\u6AA2\u6AA3\u6A97\u8617\u6ABB\u6AC3"+
-        "\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA"+
-        "\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16"+
-        "\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47"+
-        "\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61"+
-        "\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98"+
-        "\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1"+
-        "\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC"+
-        "\u6BEB\u6BF3\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B"+
-        "\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D"+
-        "\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90"+
-        "\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE"+
-        "\u6CB1\u6CBE\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F"+
-        "\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33"+
-        "\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59"+
-        "\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5"+
-        "\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8"+
-        "\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE"+
-        "\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23"+
-        "\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E"+
-        "\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9"+
-        "\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5"+
-        "\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC"+
-        "\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC"+
-        "\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80"+
-        "\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E"+
-        "\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9"+
-        "\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1"+
-        "\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F"+
-        "\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030"+
-        "\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1"+
-        "\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9"+
-        "\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166"+
-        "\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195"+
-        "\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4"+
-        "\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF"+
-        "\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232"+
-        "\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274"+
-        "\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7"+
-        "\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2"+
-        "\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C"+
-        "\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E"+
-        "\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375"+
-        "\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5"+
-        "\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432"+
-        "\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469"+
-        "\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7"+
-        "\u74CA\u74CF\u74D4\u73F1\u74E0\u74E3\u74E7\u74E9"+
-        "\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503"+
-        "\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526"+
-        "\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546"+
-        "\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576"+
-        "\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A"+
-        "\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD"+
-        "\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3"+
-        "\u75DE\u75FE\u75FF\u75FC\u7601\u75F0\u75FA\u75F2"+
-        "\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621"+
-        "\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646"+
-        "\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667"+
-        "\u766C\u7670\u7672\u7676\u7678\u767C\u7680\u7683"+
-        "\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0"+
-        "\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2"+
-        "\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708"+
-        "\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B"+
-        "\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765"+
-        "\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E"+
-        "\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7"+
-        "\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C"+
-        "\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886"+
-        "\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1"+
-        "\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC"+
-        "\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919"+
-        "\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955"+
-        "\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA"+
-        "\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC"+
-        "\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F"+
-        "\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49"+
-        "\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88"+
-        "\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6"+
-        "\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF"+
-        "\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6"+
-        "\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18"+
-        "\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04"+
-        "\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67"+
-        "\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D"+
-        "\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB"+
-        "\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11"+
-        "\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3"+
-        "\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F"+
-        "\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40"+
-        "\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75"+
-        "\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8"+
-        "\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5"+
-        "\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2"+
-        "\u7CF4\u7CF6\u7CFA\u7D06\u7D02\u7D1C\u7D15\u7D0A"+
-        "\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73"+
-        "\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93"+
-        "\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3"+
-        "\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC"+
-        "\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB"+
-        "\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31"+
-        "\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35"+
-        "\u7E39\u7E43\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56"+
-        "\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B"+
-        "\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C"+
-        "\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C"+
-        "\u7F38\u7F3A\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51"+
-        "\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67"+
-        "\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94"+
-        "\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE"+
-        "\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4"+
-        "\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004"+
-        "\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F"+
-        "\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062"+
-        "\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F"+
-        "\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190"+
-        "\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6"+
-        "\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B";
-
-    private final static String innerIndex4=
-        "\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E"+
-        "\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182"+
-        "\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0"+
-        "\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9"+
-        "\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0"+
-        "\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207"+
-        "\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233"+
-        "\u8240\u8259\u8258\u825D\u825A\u825F\u8264\u8262"+
-        "\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E"+
-        "\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3"+
-        "\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB"+
-        "\u82F9\u82DE\u8306\u82DC\u8309\u82D9\u8335\u8334"+
-        "\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F"+
-        "\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2"+
-        "\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373"+
-        "\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE"+
-        "\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0"+
-        "\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB"+
-        "\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD"+
-        "\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435"+
-        "\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB"+
-        "\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF"+
-        "\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC"+
-        "\u8540\u8563\u8558\u8548\u8541\u8602\u854B\u8555"+
-        "\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594"+
-        "\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9"+
-        "\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC"+
-        "\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622"+
-        "\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667"+
-        "\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6"+
-        "\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4"+
-        "\u86DE\u86E9\u86EC\u86DF\u86DB\u86EF\u8712\u8706"+
-        "\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9"+
-        "\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A"+
-        "\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768"+
-        "\u876E\u8759\u8753\u8763\u876A\u8805\u87A2\u879F"+
-        "\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB"+
-        "\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0"+
-        "\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811"+
-        "\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827"+
-        "\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B"+
-        "\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882"+
-        "\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0"+
-        "\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD"+
-        "\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C"+
-        "\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941"+
-        "\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E"+
-        "\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E"+
-        "\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6"+
-        "\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA"+
-        "\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10"+
-        "\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52"+
-        "\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82"+
-        "\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3"+
-        "\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4"+
-        "\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C"+
-        "\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33"+
-        "\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F"+
-        "\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C"+
-        "\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93"+
-        "\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C"+
-        "\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82"+
-        "\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98"+
-        "\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6"+
-        "\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB"+
-        "\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E"+
-        "\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73"+
-        "\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6"+
-        "\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC"+
-        "\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42"+
-        "\u8E35\u8E30\u8E34\u8E4A\u8E47\u8E49\u8E4C\u8E50"+
-        "\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76"+
-        "\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A"+
-        "\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0"+
-        "\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3"+
-        "\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12"+
-        "\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33"+
-        "\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46"+
-        "\u8F4E\u8F57\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F"+
-        "\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA"+
-        "\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015"+
-        "\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035"+
-        "\u9039\u8FF8\u904F\u9050\u9051\u9052\u900E\u9049"+
-        "\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8"+
-        "\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F"+
-        "\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB"+
-        "\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158"+
-        "\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182"+
-        "\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0"+
-        "\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB"+
-        "\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215"+
-        "\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295"+
-        "\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A"+
-        "\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E"+
-        "\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C"+
-        "\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394"+
-        "\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD"+
-        "\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407"+
-        "\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452"+
-        "\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470"+
-        "\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F"+
-        "\u9582\u9587\u958A\u9594\u9596\u9598\u9599\u95A0"+
-        "\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA"+
-        "\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC"+
-        "\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642"+
-        "\u964C\u964F\u964B\u9677\u965C\u965E\u965D\u965F"+
-        "\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA"+
-        "\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9"+
-        "\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5"+
-        "\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F"+
-        "\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E"+
-        "\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764"+
-        "\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C"+
-        "\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8"+
-        "\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB"+
-        "\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F"+
-        "\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F"+
-        "\u984B\u986B\u986F\u9870\u9871\u9874\u9873\u98AA"+
-        "\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB"+
-        "\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E"+
-        "\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949"+
-        "\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997"+
-        "\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD"+
-        "\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8"+
-        "\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45"+
-        "\u9A42\u9A40\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57"+
-        "\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD"+
-        "\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE"+
-        "\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4"+
-        "\u9AF1\u9AF7\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22"+
-        "\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F"+
-        "\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58"+
-        "\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0"+
-        "\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1"+
-        "\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2"+
-        "\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06"+
-        "\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24"+
-        "\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60"+
-        "\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08"+
-        "\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F"+
-        "\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48"+
-        "\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89"+
-        "\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2"+
-        "\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2"+
-        "\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A"+
-        "\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B"+
-        "\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8"+
-        "\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4"+
-        "\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4"+
-        "\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08"+
-        "\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54"+
-        "\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A"+
-        "\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7"+
-        "\u9059\u7464\u51DC\u7199\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD";
-
-    private final static short index1[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0, 0, 0, 0,
-        9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
-        25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
-        41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
-        57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
-        73, 74, 75, 76, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-    };
-
-    private final static String index2[] = {
-        innerIndex0,
-        innerIndex1,
-        innerIndex2,
-        innerIndex3,
-        innerIndex4
-    };
-
-
-    protected char convSingleByte(int b) {
-        return REPLACE_CHAR;
-    }
-
-    /**
-     * These accessors are temporarily supplied while sun.io
-     * converters co-exist with the sun.nio.cs.{ext} charset coders
-     * These facilitate sharing of conversion tables between the
-     * two co-existing implementations. When sun.io converters
-     * are made extinct these will be unncessary and should be removed
-     */
-    public static short[] getIndex1() {
-       return index1;
-    }
-
-    public static String[] getIndex2() {
-       return index2;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_Encoder.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_Encoder.java
deleted file mode 100755
index 1cfd1df..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_Encoder.java
+++ /dev/null
@@ -1,3131 +0,0 @@
-/*
- * Copyright (c) 2003, 2005, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-
-public class JIS_X_0208_Encoder extends DoubleByteEncoder
-{
-
-    /*
-     * default replacement defined merely for pseudo
-     * charset x-JIS-X-0208 to instantiate with a
-     * decodeable replacement byte sequence
-     * JIS X 0208(1987) 0x2129 maps to FULLWIDTH QUESTION MARK
-     *
-     */
-
-    private static byte[] repl = { (byte)0x21, (byte)0x29 };
-
-    public JIS_X_0208_Encoder(Charset cs) {
-        super(cs,
-              index1,
-              index2 ,
-              repl
-             );
-    }
-    public JIS_X_0208_Encoder(Charset cs, float avg, float max) {
-        super(cs,
-              index1,
-              index2 ,
-              repl,
-              avg,
-              max
-             );
-    }
-
-    protected int encodeSingle(char inputChar) {
-        return -1;
-    }
-
-    /**
-     * These accessors are temporarily supplied while sun.io
-     * converters co-exist with the sun.nio.cs.{ext} charset coders
-     * These facilitate sharing of conversion tables between the
-     * two co-existing implementations. When sun.io converters
-     * are made extinct these will be unncessary and should be removed
-     */
-
-    public static short[] getIndex1() {
-       return index1;
-    }
-
-    public static String[] getIndex2() {
-       return index2;
-    }
-
-    private final static String innerIndex0=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2171\u2172\u0000\u0000\u0000\u2178"+
-        "\u212F\u0000\u0000\u0000\u224C\u0000\u0000\u0000"+
-        "\u216B\u215E\u0000\u0000\u212D\u0000\u2279\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u215F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2160"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2621\u2622\u2623\u2624\u2625\u2626\u2627"+
-        "\u2628\u2629\u262A\u262B\u262C\u262D\u262E\u262F"+
-        "\u2630\u2631\u0000\u2632\u2633\u2634\u2635\u2636"+
-        "\u2637\u2638\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2641\u2642\u2643\u2644\u2645\u2646\u2647"+
-        "\u2648\u2649\u264A\u264B\u264C\u264D\u264E\u264F"+
-        "\u2650\u2651\u0000\u2652\u2653\u2654\u2655\u2656"+
-        "\u2657\u2658\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2727\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2721\u2722\u2723\u2724\u2725\u2726\u2728\u2729"+
-        "\u272A\u272B\u272C\u272D\u272E\u272F\u2730\u2731"+
-        "\u2732\u2733\u2734\u2735\u2736\u2737\u2738\u2739"+
-        "\u273A\u273B\u273C\u273D\u273E\u273F\u2740\u2741"+
-        "\u2751\u2752\u2753\u2754\u2755\u2756\u2758\u2759"+
-        "\u275A\u275B\u275C\u275D\u275E\u275F\u2760\u2761"+
-        "\u2762\u2763\u2764\u2765\u2766\u2767\u2768\u2769"+
-        "\u276A\u276B\u276C\u276D\u276E\u276F\u2770\u2771"+
-        "\u0000\u2757\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u213E\u0000\u0000\u0000\u213D\u0000\u2142\u0000"+
-        "\u2146\u2147\u0000\u0000\u2148\u2149\u0000\u0000"+
-        "\u2277\u2278\u0000\u0000\u0000\u2145\u2144\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2273\u0000\u216C\u216D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u2228\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u216E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u2272\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u222B\u222C\u222A\u222D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u224D\u0000\u224E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u224F\u0000\u225F\u2250\u0000\u0000\u0000\u2260"+
-        "\u223A\u0000\u0000\u223B\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u215D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2265\u0000\u0000\u2267\u2167\u0000"+
-        "\u225C\u0000\u0000\u0000\u0000\u0000\u0000\u224A"+
-        "\u224B\u2241\u2240\u2269\u226A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2168\u2268\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2266\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2262\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2162\u2261\u0000\u0000\u0000\u0000\u2165\u2166"+
-        "\u0000\u0000\u2263\u2264\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u223E\u223F\u0000\u0000\u223C\u223D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u225D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u225E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2821\u282C\u2822\u282D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2823\u0000\u0000\u282E"+
-        "\u2824\u0000\u0000\u282F\u2826\u0000\u0000\u2831"+
-        "\u2825\u0000\u0000\u2830\u2827\u283C\u0000\u0000"+
-        "\u2837\u0000\u0000\u2832\u2829\u283E\u0000\u0000"+
-        "\u2839\u0000\u0000\u2834\u2828\u0000\u0000\u2838"+
-        "\u283D\u0000\u0000\u2833\u282A\u0000\u0000\u283A"+
-        "\u283F\u0000\u0000\u2835\u282B\u0000\u0000\u283B"+
-        "\u0000\u0000\u2840\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u2836\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2223\u2222\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2225\u2224\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2227\u2226\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2221\u217E"+
-        "\u0000\u0000\u0000\u217B\u0000\u0000\u217D\u217C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u227E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u217A\u2179\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u216A\u0000\u2169\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2276\u0000\u0000\u2275\u0000\u2274"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2121\u2122\u2123\u2137\u0000\u2139\u213A\u213B"+
-        "\u2152\u2153\u2154\u2155\u2156\u2157\u2158\u2159"+
-        "\u215A\u215B\u2229\u222E\u214C\u214D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2141\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2421\u2422\u2423\u2424\u2425\u2426\u2427"+
-        "\u2428\u2429\u242A\u242B\u242C\u242D\u242E\u242F"+
-        "\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437"+
-        "\u2438\u2439\u243A\u243B\u243C\u243D\u243E\u243F"+
-        "\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447"+
-        "\u2448\u2449\u244A\u244B\u244C\u244D\u244E\u244F"+
-        "\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457"+
-        "\u2458\u2459\u245A\u245B\u245C\u245D\u245E\u245F"+
-        "\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467"+
-        "\u2468\u2469\u246A\u246B\u246C\u246D\u246E\u246F"+
-        "\u2470\u2471\u2472\u2473\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u212B\u212C\u2135\u2136\u0000"+
-        "\u0000\u2521\u2522\u2523\u2524\u2525\u2526\u2527"+
-        "\u2528\u2529\u252A\u252B\u252C\u252D\u252E\u252F"+
-        "\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537"+
-        "\u2538\u2539\u253A\u253B\u253C\u253D\u253E\u253F"+
-        "\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547"+
-        "\u2548\u2549\u254A\u254B\u254C\u254D\u254E\u254F"+
-        "\u2550\u2551\u2552\u2553\u2554\u2555\u2556\u2557"+
-        "\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F"+
-        "\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567"+
-        "\u2568\u2569\u256A\u256B\u256C\u256D\u256E\u256F"+
-        "\u2570\u2571\u2572\u2573\u2574\u2575\u2576\u0000"+
-        "\u0000\u0000\u0000\u2126\u213C\u2133\u2134\u0000"+
-        "\u306C\u437A\u0000\u3C37\u0000\u0000\u0000\u4B7C"+
-        "\u3E66\u3B30\u3E65\u323C\u0000\u4954\u4D3F\u0000"+
-        "\u5022\u312F\u0000\u0000\u336E\u5023\u4024\u5242"+
-        "\u3556\u4A3A\u0000\u0000\u0000\u0000\u3E67\u0000"+
-        "\u0000\u4E3E\u0000\u0000\u0000\u0000\u4A42\u0000"+
-        "\u0000\u0000\u5024\u0000\u0000\u4366\u0000\u0000"+
-        "\u0000\u5025\u367A\u0000\u0000\u0000\u5026\u0000"+
-        "\u345D\u4330\u0000\u3C67\u5027\u0000\u0000\u5028"+
-        "\u0000\u0000\u5029\u4735\u0000\u3557\u0000\u0000"+
-        "\u0000\u0000\u0000\u4737\u0000\u4663\u3843\u4B33"+
-        "\u0000\u0000\u0000\u0000\u0000\u6949\u502A\u3E68"+
-        "\u502B\u3235\u0000\u0000\u0000\u3665\u3870\u4C69"+
-        "\u0000\u0000\u5626\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4D70\u0000\u467D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3425\u0000"+
-        "\u3535\u0000\u502C\u0000\u0000\u502D\u4E3B\u0000"+
-        "\u4D3D\u4168\u502F\u3B76\u4673\u0000\u5032\u0000"+
-        "\u0000\u313E\u385F\u0000\u385E\u3066\u0000\u0000"+
-        "\u4F4B\u4F4A\u0000\u3A33\u3021\u0000\u5033\u5034"+
-        "\u5035\u4B34\u5036\u0000\u3872\u3067\u4B72\u0000"+
-        "\u357C\u0000\u0000\u357D\u357E\u4462\u4E3C\u0000"+
-        "\u5037\u0000\u0000\u5038\u0000\u0000\u5039\u0000"+
-        "\u0000\u0000\u3F4D\u0000\u0000\u0000\u0000\u0000"+
-        "\u3D3A\u3F4E\u503E\u0000\u503C\u0000\u503D\u3558"+
-        "\u0000\u0000\u3A23\u3270\u0000\u503B\u503A\u4A29"+
-        "\u0000\u0000\u0000\u0000\u3B46\u3B45\u423E\u503F"+
-        "\u4955\u4067\u0000\u0000\u0000\u2138\u5040\u5042"+
-        "\u0000\u0000\u0000\u4265\u4E61\u304A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5041\u323E\u0000"+
-        "\u3644\u0000\u4367\u0000\u0000\u0000\u376F\u5043"+
-        "\u0000\u0000\u0000\u4724\u0000\u0000\u0000\u0000"+
-        "\u0000\u346B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5044\u304B\u0000\u0000\u3860\u346C\u497A"+
-        "\u4832\u3559\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3271\u0000\u5067\u4541\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u476C"+
-        "\u5046\u0000\u0000\u0000\u483C\u0000\u4E62\u0000"+
-        "\u3F2D\u0000\u3B47\u0000\u3B77\u3240\u0000\u0000"+
-        "\u0000\u0000\u0000\u4451\u0000\u0000\u4322\u504A"+
-        "\u0000\u0000\u0000\u0000\u0000\u304C\u4463\u3D3B"+
-        "\u3A34\u4D24\u0000\u424E\u0000\u323F\u0000\u5049"+
-        "\u0000\u4D3E\u5045\u5047\u3A6E\u5048\u5524\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5050\u0000\u0000\u0000\u0000\u0000\u5053"+
-        "\u5051\u0000\u0000\u3242\u0000\u4A3B\u504B\u0000"+
-        "\u0000\u0000\u0000\u504F\u3873\u0000\u0000\u3B48"+
-        "\u0000\u0000\u0000\u3426\u0000\u0000\u5054\u0000"+
-        "\u504C\u0000\u0000\u4E63\u0000\u3B78\u0000\u504D"+
-        "\u0000\u5052\u0000\u0000\u0000\u0000\u5055\u0000"+
-        "\u504E\u0000\u0000\u3621\u0000\u304D\u0000\u0000"+
-        "\u3622\u3241\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5525\u0000\u4B79\u496E\u3874"+
-        "\u0000\u0000\u0000\u0000\u0000\u3F2F\u4E37\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4A58"+
-        "\u0000\u0000\u3738\u4225\u3264\u0000\u0000\u0000"+
-        "\u0000\u0000\u3D53\u0000\u0000\u0000\u5059\u0000"+
-        "\u505E\u505C\u0000\u0000\u5057\u0000\u0000\u422F"+
-        "\u505A\u0000\u505D\u505B\u0000\u4A5D\u0000\u5058"+
-        "\u0000\u3F2E\u0000\u4B73\u505F\u5060\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3D24\u506D"+
-        "\u0000\u0000\u0000\u4750\u0000\u4936\u5068\u0000"+
-        "\u4A70\u0000\u3236\u0000\u0000\u0000\u506C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5066\u506F\u0000"+
-        "\u0000\u4152\u0000\u3844\u0000\u475C\u0000\u6047"+
-        "\u0000\u506E\u455D\u0000\u5063\u0000\u3876\u0000"+
-        "\u0000\u3875\u5061\u0000\u0000\u0000\u0000\u3C5A"+
-        "\u0000\u5069\u0000\u4A6F\u434D\u5065\u3771\u0000"+
-        "\u5062\u506A\u5064\u4E51\u506B\u4F41\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3666\u0000"+
-        "\u0000\u3770\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5070\u0000\u0000\u0000\u5071"+
-        "\u5075\u304E\u0000\u0000\u0000\u0000\u0000\u4A50"+
-        "\u5074\u0000\u0000\u0000\u0000\u5073\u5077\u0000"+
-        "\u0000\u0000\u5076\u0000\u4464\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3772\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5078\u0000\u0000\u0000"+
-        "\u0000\u0000\u3C45\u0000\u4226\u4465\u3676\u0000"+
-        "\u5079\u0000\u0000\u0000\u0000\u3536\u0000\u0000"+
-        "\u507A\u0000\u0000\u0000\u0000\u507C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4B35\u0000\u0000"+
-        "\u0000\u3766\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3B31\u4877\u507B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3A45\u4D43\u0000\u0000"+
-        "\u0000\u0000\u507E\u5123\u507D\u3A44\u0000\u3D7D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3739\u0000"+
-        "\u0000\u0000\u5124\u0000\u0000\u364F\u0000\u0000"+
-        "\u0000\u5121\u5122\u0000\u0000\u462F\u0000\u417C"+
-        "\u0000\u3623\u0000\u0000\u0000\u4B4D\u5125\u0000"+
-        "\u0000\u0000\u4E3D\u0000\u0000\u0000\u5126\u0000"+
-        "\u0000\u0000\u0000\u5129\u0000\u5127\u0000\u414E"+
-        "\u0000\u0000\u0000\u0000\u0000\u5128\u512A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u512C\u0000\u0000"+
-        "\u0000\u512B\u0000\u4A48\u0000\u0000\u0000\u0000"+
-        "\u3537\u512E\u512F\u0000\u322F\u0000\u0000\u0000"+
-        "\u0000\u512D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3C74\u0000\u5132\u5131\u5130\u0000"+
-        "\u5056\u0000\u5133\u0000\u0000\u0000\u0000\u3D7E"+
-        "\u0000\u5134\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D25\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C59\u0000\u0000\u0000\u0000\u5136"+
-        "\u0000\u0000\u5135\u5138\u5137\u0000\u0000\u5139"+
-        "\u513A\u3074\u0000\u3835\u373B\u3D3C\u437B\u3624"+
-        "\u4068\u3877\u0000\u396E\u513C\u4C48\u4546\u0000"+
-        "\u3B79\u0000\u513B\u0000\u513D\u0000\u0000\u0000"+
-        "\u0000\u0000\u455E\u0000\u3375\u0000\u0000\u0000"+
-        "\u0000\u0000\u513E\u0000\u0000\u467E\u0000\u0000"+
-        "\u4134\u5140\u5141\u482C\u3878\u4F3B\u5142\u0000"+
-        "\u0000\u3626\u0000\u0000\u0000\u4A3C\u4236\u3671"+
-        "\u4535\u0000\u0000\u0000\u3773\u0000\u0000\u0000"+
-        "\u5143\u0000\u5144\u0000\u0000\u4662\u315F\u0000"+
-        "\u0000\u5147\u3A7D\u0000\u5146\u3A46\u0000\u5148"+
-        "\u666E\u5149\u4B41\u514A\u0000\u514B\u514C\u3E69"+
-        "\u0000\u3C4C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3427\u0000\u514F\u0000\u514D\u4C3D\u514E\u0000"+
-        "\u495A\u5150\u5151\u5152\u455F\u0000\u0000\u0000"+
-        "\u5156\u5154\u5155\u5153\u3A63\u5157\u4C6A\u4E64"+
-        "\u0000\u0000\u0000\u0000\u0000\u5158\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4028\u5159\u3D5A\u0000"+
-        "\u0000\u515A\u0000\u437C\u4E3F\u4560\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5245\u0000"+
-        "\u0000\u0000\u0000\u515B\u7425\u3645\u0000\u0000"+
-        "\u515C\u4B5E\u0000\u0000\u0000\u0000\u3D68\u427C"+
-        "\u0000\u515E\u4664\u0000\u0000\u515F\u0000\u0000"+
-        "\u5160\u332E\u0000\u0000\u0000\u5161\u3627\u0000"+
-        "\u464C\u317A\u3D50\u0000\u0000\u4821\u5162\u0000"+
-        "\u4561\u0000\u0000\u3F4F\u5163\u0000\u4A2C\u405A"+
-        "\u3422\u0000\u3429\u5164\u0000\u0000\u5166\u0000"+
-        "\u0000\u373A\u0000\u0000\u5165\u0000\u0000\u4E73"+
-        "\u0000\u0000\u0000\u0000\u0000\u3D69\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u483D\u4A4C\u0000\u5167"+
-        "\u0000\u4D78\u5168\u0000\u0000\u0000\u5169\u0000"+
-        "\u457E\u0000\u0000\u516A\u0000\u0000\u4029\u3A7E"+
-        "\u3774\u516B\u3B49\u396F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4466\u516D\u0000\u0000\u4227"+
-        "\u0000\u0000\u3A6F\u516E\u516F\u4130\u0000\u516C"+
-        "\u0000\u0000\u0000\u0000\u5171\u0000\u4B36\u0000"+
-        "\u0000\u0000\u0000\u3964\u0000\u0000\u5170\u0000"+
-        "\u0000\u0000\u0000\u3775\u3A5E\u476D\u0000\u0000"+
-        "\u0000\u5174\u5172\u0000\u0000\u0000\u0000\u497B"+
-        "\u3E6A\u517B\u3364\u5175\u5173\u414F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5177\u0000\u5176"+
-        "\u0000\u0000\u0000\u3344\u0000\u0000\u0000\u3760"+
-        "\u517C\u4E2D\u0000\u0000\u0000\u5178\u0000\u0000"+
-        "\u0000\u517D\u517A\u0000\u5179\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4E4F\u0000\u0000\u0000\u3879"+
-        "\u3243\u0000\u0000\u4E74\u0000\u0000\u0000\u0000"+
-        "\u0000\u3D75\u4558\u3965\u5222\u5223\u0000\u0000"+
-        "\u0000\u4E65\u0000\u0000\u4F2B\u5225\u0000\u0000"+
-        "\u0000\u387A\u0000\u0000\u5224\u0000\u332F\u0000"+
-        "\u0000\u5226\u0000\u4B56\u0000\u443C\u0000\u4D26"+
-        "\u0000\u4A59\u0000\u0000\u0000\u5227\u0000\u0000"+
-        "\u0000\u0000\u7055\u0000\u0000\u4630\u0000\u5228"+
-        "\u342A\u4C33\u0000\u0000\u0000\u3E21\u5229\u4A67"+
-        "\u522D\u0000\u402A\u522A\u3650\u0000\u522B\u342B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u372E\u522E\u0000\u522F\u0000\u0000"+
-        "\u5230\u5231\u3C5B\u0000\u0000\u0000\u387B\u4C5E";
-
-    private final static String innerIndex1=
-        "\u0000\u4C68\u4677\u0000\u0000\u4A71\u5232\u0000"+
-        "\u5233\u0000\u0000\u0000\u0000\u5235\u0000\u5237"+
-        "\u5236\u0000\u0000\u0000\u0000\u5238\u323D\u4B4C"+
-        "\u0000\u3A7C\u5239\u0000\u0000\u4159\u0000\u0000"+
-        "\u3E22\u3629\u0000\u523A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u485B\u0000\u0000\u0000\u0000\u523B"+
-        "\u0000\u523C\u0000\u523D\u0000\u0000\u0000\u0000"+
-        "\u523E\u4924\u3668\u3065\u0000\u0000\u0000\u463F"+
-        "\u523F\u3D3D\u0000\u4069\u0000\u5241\u5240\u3E23"+
-        "\u3861\u5243\u483E\u0000\u0000\u5244\u0000\u0000"+
-        "\u0000\u485C\u4234\u426E\u3628\u0000\u0000\u466E"+
-        "\u4331\u0000\u476E\u0000\u4B4E\u0000\u5246\u0000"+
-        "\u406A\u0000\u0000\u0000\u0000\u0000\u3735\u0000"+
-        "\u0000\u5247\u0000\u0000\u0000\u0000\u5248\u312C"+
-        "\u3075\u346D\u0000\u4228\u3551\u4D71\u0000\u524B"+
-        "\u3237\u0000\u0000\u524A\u0000\u0000\u0000\u362A"+
-        "\u0000\u0000\u524C\u0000\u4C71\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u524D\u0000"+
-        "\u4E52\u0000\u387C\u0000\u0000\u0000\u0000\u3836"+
-        "\u524E\u0000\u0000\u0000\u0000\u5250\u524F\u0000"+
-        "\u3F5F\u3139\u0000\u0000\u0000\u315E\u5251\u0000"+
-        "\u5252\u0000\u0000\u3837\u0000\u0000\u5253\u0000"+
-        "\u0000\u0000\u0000\u356E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3B32\u5254\u0000\u0000\u0000\u0000"+
-        "\u4B74\u3A35\u355A\u4D27\u4150\u483F\u3C7D\u0000"+
-        "\u0000\u0000\u0000\u0000\u3D47\u0000\u3C68\u3C75"+
-        "\u0000\u3D76\u0000\u4840\u0000\u0000\u0000\u5257"+
-        "\u0000\u3143\u4151\u387D\u3845\u3667\u0000\u0000"+
-        "\u525B\u4321\u427E\u362B\u3E24\u525C\u525A\u3244"+
-        "\u4266\u3C38\u3B4B\u3126\u0000\u0000\u3370\u3966"+
-        "\u3B4A\u0000\u525D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u525E\u0000\u3549\u3346\u0000\u0000\u0000"+
-        "\u3967\u3548\u445F\u3125\u4631\u4C3E\u3921\u4D79"+
-        "\u4547\u387E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u372F\u0000\u5267\u0000\u3663"+
-        "\u4B4A\u0000\u0000\u0000\u0000\u0000\u485D\u0000"+
-        "\u0000\u5266\u0000\u345E\u5261\u5262\u5264\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5265\u0000"+
-        "\u355B\u3F61\u0000\u4A2D\u5263\u525F\u3863\u0000"+
-        "\u5260\u0000\u4F24\u0000\u0000\u0000\u4A72\u0000"+
-        "\u4468\u3862\u3970\u0000\u0000\u0000\u5268\u0000"+
-        "\u0000\u465D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u526C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3C7E\u0000\u3C76\u0000\u0000\u0000\u0000\u0000"+
-        "\u526F\u526D\u0000\u4C23\u0000\u526A\u5273\u526E"+
-        "\u0000\u0000\u0000\u5271\u3846\u4C3F\u0000\u0000"+
-        "\u5272\u0000\u0000\u0000\u5274\u0000\u5276\u0000"+
-        "\u0000\u0000\u0000\u3A70\u4F42\u0000\u526B\u5269"+
-        "\u5275\u0000\u5270\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5278\u0000\u5323\u527A\u0000\u0000"+
-        "\u527E\u0000\u0000\u5321\u527B\u0000\u0000\u533E"+
-        "\u0000\u0000\u3A69\u3331\u0000\u0000\u0000\u0000"+
-        "\u5279\u0000\u0000\u0000\u5325\u3076\u5324\u0000"+
-        "\u3025\u494A\u5322\u0000\u527C\u0000\u0000\u5277"+
-        "\u527D\u3A48\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5326\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3077\u532F\u0000\u0000\u5327\u5328\u0000"+
-        "\u3E25\u4B69\u0000\u0000\u0000\u532D\u532C\u0000"+
-        "\u0000\u0000\u452F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u532E\u0000\u0000\u532B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3134\u0000\u3A36\u3F30"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5329"+
-        "\u4562\u0000\u0000\u0000\u532A\u0000\u3022\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5334\u4D23"+
-        "\u0000\u3E27\u0000\u533A\u0000\u0000\u0000\u0000"+
-        "\u5339\u5330\u0000\u0000\u0000\u0000\u4243\u0000"+
-        "\u5331\u0000\u0000\u0000\u426F\u5336\u3E26\u0000"+
-        "\u0000\u0000\u0000\u0000\u5333\u0000\u0000\u4C64"+
-        "\u0000\u0000\u0000\u373C\u0000\u0000\u5337\u5338"+
-        "\u0000\u0000\u0000\u0000\u5335\u533B\u0000\u0000"+
-        "\u0000\u0000\u0000\u5332\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5341\u5346\u0000\u5342\u0000"+
-        "\u533D\u0000\u0000\u5347\u4131\u0000\u0000\u5349"+
-        "\u0000\u3922\u533F\u437D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5343\u533C\u342D\u0000\u346E\u3365\u5344\u5340"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3776"+
-        "\u534A\u5348\u4153\u354A\u362C\u0000\u5345\u0000"+
-        "\u3674\u0000\u0000\u0000\u0000\u0000\u3144\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u534E\u534C\u0000\u5427"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5351\u0000\u0000\u0000"+
-        "\u0000\u0000\u534B\u0000\u534F\u0000\u0000\u534D"+
-        "\u0000\u0000\u0000\u3B4C\u5350\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5353"+
-        "\u0000\u5358\u0000\u0000\u0000\u5356\u5355\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4332\u0000"+
-        "\u0000\u3245\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5352\u0000\u5354\u3E28"+
-        "\u3133\u0000\u0000\u5357\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u325E\u0000\u0000\u0000\u0000\u0000\u5362"+
-        "\u0000\u3E7C\u535E\u0000\u535C\u0000\u535D\u0000"+
-        "\u535F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u313D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4139\u0000\u5359\u0000"+
-        "\u535A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u337A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5361\u0000\u0000\u0000"+
-        "\u346F\u0000\u5364\u5360\u5363\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4A2E\u0000\u0000\u0000"+
-        "\u4655\u0000\u4838\u0000\u0000\u0000\u0000\u0000"+
-        "\u5366\u0000\u0000\u0000\u0000\u0000\u5365\u3345"+
-        "\u0000\u0000\u5367\u0000\u0000\u0000\u0000\u536A"+
-        "\u0000\u0000\u0000\u0000\u5369\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5368\u0000\u4739\u0000\u0000\u536B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u536C\u0000"+
-        "\u0000\u0000\u0000\u0000\u536E\u0000\u536D\u0000"+
-        "\u0000\u0000\u0000\u0000\u5370\u0000\u0000\u0000"+
-        "\u5373\u5371\u536F\u5372\u0000\u0000\u0000\u0000"+
-        "\u5374\u0000\u0000\u0000\u0000\u0000\u5375\u0000"+
-        "\u0000\u5376\u0000\u5377\u0000\u0000\u0000\u5378"+
-        "\u5145\u0000\u3C7C\u3B4D\u0000\u0000\u3273\u0000"+
-        "\u3078\u0000\u0000\u4344\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5379\u0000"+
-        "\u3A24\u0000\u304F\u3F5E\u0000\u0000\u0000\u0000"+
-        "\u0000\u537A\u3847\u0000\u0000\u3971\u0000\u537C"+
-        "\u537B\u0000\u0000\u4A60\u537D\u0000\u0000\u0000"+
-        "\u5421\u537E\u0000\u5422\u0000\u5423\u0000\u3777"+
-        "\u0000\u0000\u3160\u5424\u0000\u0000\u5426\u0000"+
-        "\u5425\u0000\u0000\u0000\u5428\u0000\u0000\u455A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5429\u3035"+
-        "\u3A5F\u0000\u0000\u0000\u0000\u373D\u0000\u0000"+
-        "\u434F\u0000\u0000\u0000\u0000\u0000\u0000\u542A"+
-        "\u542B\u0000\u0000\u542D\u0000\u0000\u0000\u0000"+
-        "\u542E\u0000\u3A64\u0000\u0000\u0000\u0000\u3651"+
-        "\u0000\u0000\u4B37\u0000\u0000\u0000\u542C\u542F"+
-        "\u3A41\u3923\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5433\u0000\u0000\u3A25\u0000\u4333\u0000"+
-        "\u0000\u5430\u445A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5434"+
-        "\u0000\u0000\u3F62\u0000\u0000\u0000\u0000\u0000"+
-        "\u5432\u5435\u0000\u373F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5436\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5437\u0000\u3924\u3340\u5439\u0000\u0000\u0000"+
-        "\u0000\u0000\u543A\u0000\u0000\u0000\u0000\u0000"+
-        "\u543B\u0000\u0000\u5438\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5431\u0000\u0000\u543C\u0000\u0000\u543D\u0000"+
-        "\u0000\u0000\u0000\u4B64\u0000\u0000\u3E6B\u0000"+
-        "\u0000\u0000\u543F\u5440\u543E\u0000\u5442\u0000"+
-        "\u0000\u0000\u0000\u0000\u4738\u0000\u0000\u3068"+
-        "\u4956\u0000\u0000\u5443\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3E7D\u0000\u0000\u3C39"+
-        "\u0000\u475D\u3470\u0000\u3A6B\u0000\u0000\u0000"+
-        "\u4B59\u0000\u4632\u0000\u0000\u3778\u424F\u0000"+
-        "\u0000\u0000\u5441\u5444\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4244\u0000\u0000"+
-        "\u0000\u5445\u0000\u0000\u0000\u5446\u0000\u0000"+
-        "\u0000\u5448\u0000\u0000\u4469\u0000\u0000\u0000"+
-        "\u0000\u0000\u342E\u0000\u0000\u0000\u0000\u7421"+
-        "\u3161\u4A73\u0000\u0000\u3E6C\u4548\u0000\u0000"+
-        "\u0000\u0000\u3A66\u0000\u0000\u544E\u0000\u0000"+
-        "\u4A3D\u4E5D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3274\u544A\u0000\u0000\u0000\u0000"+
-        "\u0000\u413A\u544D\u0000\u4563\u0000\u0000\u4549"+
-        "\u4564\u4839\u444D\u0000\u0000\u0000\u3A49\u0000"+
-        "\u0000\u0000\u5449\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3176\u0000\u4536\u0000\u0000\u0000\u0000"+
-        "\u544B\u0000\u5447\u0000\u0000\u3F50\u0000\u0000"+
-        "\u0000\u544F\u0000\u0000\u0000\u0000\u3D4E\u0000"+
-        "\u0000\u0000\u0000\u362D\u0000\u5450\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A68\u0000\u0000\u0000\u417D"+
-        "\u0000\u0000\u0000\u0000\u4446\u0000\u0000\u5452"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4B4F\u0000\u0000\u5453\u0000\u0000\u5458\u0000"+
-        "\u0000\u0000\u0000\u4A2F\u0000\u0000\u0000\u0000"+
-        "\u5457\u5451\u5454\u5456\u0000\u0000\u3A26\u0000"+
-        "\u0000\u4A49\u0000\u0000\u0000\u5459\u0000\u4345"+
-        "\u0000\u0000\u3275\u0000\u3E6D\u0000\u0000\u0000"+
-        "\u0000\u545B\u0000\u545A\u0000\u3968\u0000\u545C"+
-        "\u545E\u545D\u0000\u0000\u5460\u0000\u5455\u5462"+
-        "\u0000\u0000\u0000\u0000\u5461\u545F\u0000\u0000"+
-        "\u0000\u0000\u0000\u3B4E\u3F51\u0000\u4154\u5463"+
-        "\u403C\u306D\u4764\u0000\u0000\u0000\u0000\u445B"+
-        "\u0000\u5465\u5464\u5466\u5467\u5468\u0000\u0000"+
-        "\u0000\u0000\u5469\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A51\u546A\u0000\u0000\u0000\u0000\u3246"+
-        "\u546B\u0000\u0000\u0000\u0000\u4D3C\u3330\u0000"+
-        "\u5249\u3D48\u423F\u546C\u4C6B\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C34\u0000\u0000\u546E\u0000\u4267"+
-        "\u0000\u4537\u4240\u4957\u546F\u5470\u317B\u0000"+
-        "\u0000\u3C3A\u5471\u0000\u0000\u0000\u0000\u3050"+
-        "\u5472\u0000\u0000\u0000\u0000\u0000\u5473\u0000"+
-        "\u0000\u0000\u0000\u0000\u3162\u0000\u0000\u3471"+
-        "\u4660\u4A74\u0000\u0000\u0000\u0000\u5477\u4155"+
-        "\u5476\u3740\u0000\u0000\u4B5B\u5475\u0000\u4565"+
-        "\u5479\u0000\u5478\u0000\u0000\u0000\u0000\u0000"+
-        "\u547B\u0000\u547A\u0000\u0000\u317C\u0000\u547C"+
-        "\u3E29\u547E\u4325\u0000\u547D\u0000\u4A33\u0000"+
-        "\u0000\u0000\u0000\u3D77\u455B\u0000\u0000\u0000"+
-        "\u5521\u0000\u0000\u0000\u0000\u3925\u0000\u0000"+
-        "\u0000\u5522\u4721\u485E\u4C51\u0000\u0000\u0000"+
-        "\u0000\u0000\u4725\u0000\u0000\u552B\u0000\u0000"+
-        "\u0000\u0000\u0000\u3538\u0000\u0000\u4D45\u0000"+
-        "\u0000\u4C2F\u0000\u562C\u0000\u5523\u0000\u0000"+
-        "\u0000\u0000\u0000\u5526\u0000\u4245\u0000\u0000"+
-        "\u4B38\u0000\u0000\u0000\u454A\u0000\u0000\u0000"+
-        "\u0000\u0000\u5527\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4B65\u0000\u3A4A\u0000\u0000\u3E2A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5528\u0000"+
-        "\u0000\u3B50\u0000\u3B4F\u0000\u0000\u0000\u0000"+
-        "\u3039\u3848\u0000\u402B\u3051\u0000\u0000\u0000"+
-        "\u0000\u552C\u552D\u0000\u552A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3138\u342F\u0000"+
-        "\u5529\u0000\u4C45\u4931\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3028\u0000"+
-        "\u0000\u0000\u0000\u3079\u0000\u0000\u0000\u3B51"+
-        "\u0000\u3052\u0000\u3023\u0000\u0000\u0000\u0000"+
-        "\u0000\u5532\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5530\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4C3C\u0000\u5533\u0000\u5531\u0000\u0000\u552F"+
-        "\u3F31\u0000\u0000\u0000\u0000\u552E\u0000\u0000"+
-        "\u0000\u4A5A\u0000\u0000\u0000\u0000\u0000\u3864"+
-        "\u0000\u0000\u0000\u0000\u0000\u5537\u5538\u0000"+
-        "\u0000\u0000\u0000\u0000\u3E2B\u0000\u0000\u0000"+
-        "\u5534\u4F2C\u0000\u0000\u0000\u0000\u474C\u0000"+
-        "\u0000\u5536\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3A27\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5539\u0000\u0000\u0000\u4958\u0000"+
-        "\u0000\u0000\u553A\u0000\u5535\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4C3B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u475E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u553B\u4932\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u553C\u5540\u553D\u0000"+
-        "\u0000\u3247\u553F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3C3B\u0000\u553E\u3779\u0000\u0000\u0000"+
-        "\u554C\u0000\u0000\u0000\u0000\u0000\u5545\u5542"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4364\u0000\u5541\u0000\u0000\u5543\u0000"+
-        "\u0000\u5544\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5546\u5547\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3472\u0000\u5549\u5548\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u554A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3E6E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u554D\u0000\u445C\u0000\u0000\u0000"+
-        "\u3145\u0000\u554B\u0000\u0000\u0000\u554E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u554F\u0000"+
-        "\u5552\u0000\u0000\u5550\u0000\u5551\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3B52\u5553\u0000\u0000\u3926\u5554\u0000\u3B7A"+
-        "\u4238\u0000\u5555\u5556\u3B5A\u3927\u0000\u4C52"+
-        "\u0000\u0000\u0000\u3528\u3849\u5557\u3358\u0000"+
-        "\u0000\u5558\u0000\u4239\u0000\u0000\u0000\u0000"+
-        "\u5559\u5623\u0000\u555A\u0000\u555B\u0000\u0000"+
-        "\u555C\u0000\u555E\u0000\u0000\u0000\u0000\u0000"+
-        "\u555F\u0000\u0000\u5560\u0000\u4270\u0000\u3127"+
-        "\u3C69\u3042\u0000\u4157\u3430\u3C35\u0000\u3928"+
-        "\u0000\u0000\u0000\u0000\u0000\u4566\u0000\u3D21"+
-        "\u3431\u4368\u446A\u3038\u3539\u4A75\u0000\u3C42"+
-        "\u0000\u0000\u3552\u406B\u3C3C\u4D28\u5561\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u355C\u0000"+
-        "\u3A4B\u0000\u0000\u3332\u3163\u3E2C\u3248\u0000"+
-        "\u5562\u4D46\u0000\u0000\u0000\u0000\u0000\u3D49"+
-        "\u0000\u0000\u3C64\u5563\u3473\u4652\u4C29\u5564"+
-        "\u0000\u5565\u0000\u0000\u4959\u0000\u0000\u0000"+
-        "\u5567\u0000\u3428\u3677\u5566\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3432\u0000\u3F32\u556B\u3B21"+
-        "\u0000\u3249\u556A\u0000\u5568\u556C\u5569\u472B"+
-        "\u5C4D\u3F33\u0000\u556D\u0000\u0000\u4E40\u0000"+
-        "\u556E\u0000\u0000\u5570\u0000\u437E\u556F\u0000"+
-        "\u4023\u0000\u3B7B\u0000\u0000\u0000\u4250\u3C77"+
-        "\u0000\u4975\u406C\u0000\u3C4D\u5571\u3E2D\u5572"+
-        "\u5573\u3053\u423A\u3F52\u0000\u5574\u4633\u3E2E"+
-        "\u0000\u3E2F\u0000\u5575\u0000\u0000\u406D\u0000"+
-        "\u0000\u0000\u3E30\u0000\u0000\u0000\u0000\u0000"+
-        "\u5576\u0000\u5577\u0000\u4C60\u0000\u0000\u0000"+
-        "\u5578\u0000\u0000\u0000\u0000\u3646\u0000\u0000"+
-        "\u0000\u3D22\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5579\u557A\u3C5C\u3F2C\u4674\u3F54\u4878\u4722"+
-        "\u3649\u557B\u0000\u0000\u0000\u356F\u557C\u0000"+
-        "\u367E\u0000\u464F\u3230\u0000\u3B53\u557D\u5622"+
-        "\u5621\u367D\u0000\u557E\u0000\u4538\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4230\u0000"+
-        "\u454B\u3C48\u0000\u0000\u4158\u4D7A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5624\u0000\u5625\u4656"+
-        "\u0000\u3B33\u0000\u0000\u0000\u0000\u5627\u0000"+
-        "\u0000\u5628\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5629\u0000\u0000\u0000"+
-        "\u3474\u562A\u0000\u0000\u562B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u322C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u413B\u3464\u0000\u562D\u4C28\u0000\u0000\u0000"+
-        "\u0000\u4252\u0000\u3359\u0000\u0000\u562F\u5631"+
-        "\u345F\u0000\u0000\u562E\u5630\u0000\u5633\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5632\u0000\u5634"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5635\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u463D\u362E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3265\u5636\u563B\u0000\u0000\u5639\u0000\u4A77"+
-        "\u4A76\u0000\u0000\u0000\u0000\u0000\u4567\u0000"+
-        "\u0000\u0000\u5638\u3D54\u0000\u5637\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3F72"+
-        "\u0000\u0000\u0000\u563C\u0000\u0000\u3A6A\u0000"+
-        "\u0000\u5642\u0000\u0000\u5643\u563D\u3333\u563E"+
-        "\u5647\u5646\u5645\u5641\u0000\u0000\u0000\u5640"+
-        "\u0000\u0000\u5644\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A78\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u564B\u5648\u0000\u564A\u0000"+
-        "\u4D72\u0000\u5649\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u563F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3F73\u0000\u0000\u564C\u0000\u0000\u3A37"+
-        "\u0000\u0000\u0000\u564D\u0000\u0000\u564E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5651\u0000\u5650\u0000\u0000\u564F"+
-        "\u0000\u0000\u0000\u4568\u563A\u0000\u0000\u0000"+
-        "\u5657\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5653\u0000\u0000"+
-        "\u0000\u0000\u5652\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5654\u0000\u5655\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5658"+
-        "\u0000\u0000\u4E66\u0000\u5659\u5656\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u565A\u0000\u0000\u3460\u565B\u0000\u0000"+
-        "\u0000\u0000\u565D\u565C\u0000\u0000\u565E\u0000"+
-        "\u0000\u0000\u0000\u565F\u0000\u406E\u3D23\u0000"+
-        "\u0000\u3D64\u0000\u4163\u0000\u3929\u3A38\u392A"+
-        "\u3570\u0000\u0000\u5660\u0000\u0000\u3A39\u0000"+
-        "\u0000\u384A\u5661\u4C26\u4743\u5662\u0000\u392B"+
-        "\u0000\u0000\u0000\u342C\u0000\u4327\u3652\u0000"+
-        "\u0000\u0000\u3B54\u495B\u0000\u0000\u4841\u0000"+
-        "\u0000\u0000\u0000\u5663\u3475\u0000\u0000\u0000"+
-        "\u0000\u5666\u0000\u0000\u0000\u0000\u4421\u0000"+
-        "\u0000\u5665\u5664\u5667\u0000\u446B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3F63\u0000\u0000"+
-        "\u0000\u0000\u0000\u3B55\u0000\u404A\u0000\u4253"+
-        "\u3522\u0000\u0000\u4422\u0000\u0000\u5668\u5669"+
-        "\u3E6F\u0000\u0000\u0000\u0000\u4B39\u0000\u0000"+
-        "\u566C\u0000\u0000\u566B\u566A\u497D\u0000\u5673"+
-        "\u0000\u0000\u0000\u0000\u4B5A\u0000\u566D\u0000"+
-        "\u0000\u0000\u0000\u0000\u566F\u4B6B\u0000\u566E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5670"+
-        "\u0000\u4828\u5671\u4A3E\u5672\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3433\u4A3F\u472F\u5674\u5675\u0000"+
-        "\u392C\u3434\u5676\u3838\u4D44\u4D29\u3476\u5678"+
-        "\u0000\u4423\u0000\u392D\u3E31\u0000\u0000\u485F"+
-        "\u0000\u0000\u3E32\u0000\u0000\u0000\u0000\u3D78"+
-        "\u0000\u0000\u0000\u0000\u0000\u446C\u4A79\u4539"+
-        "\u0000\u0000\u392E\u0000\u495C\u0000\u0000\u0000"+
-        "\u5679\u0000\u0000\u0000\u0000\u0000\u4559\u3A42"+
-        "\u0000\u0000\u0000\u384B\u0000\u446D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3043\u3D6E\u392F"+
-        "\u4D47\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u567A\u567B\u4751\u0000\u0000\u0000\u0000"+
-        "\u567C\u4E77\u4F2D\u0000\u0000\u0000\u0000\u567E"+
-        "\u567D\u0000\u0000\u3347\u0000\u0000\u5721\u0000"+
-        "\u0000\u0000\u5724\u5725\u0000\u5723\u0000\u4940"+
-        "\u3E33\u5727\u5726\u5722\u0000\u0000\u0000\u0000"+
-        "\u5728\u5729\u0000\u0000\u572A\u0000\u0000\u0000"+
-        "\u572D\u572B\u0000\u572C\u572E\u0000\u3164\u446E"+
-        "\u572F\u0000\u377A\u3276\u4736\u0000\u5730\u467B"+
-        "\u0000\u4A5B\u0000\u5731\u4F2E\u0000\u0000\u0000"+
-        "\u0000\u5732\u4A40\u5735\u5021\u5031\u0000\u3C30"+
-        "\u4675\u5736\u0000\u355D\u4424\u307A\u5737\u4A26"+
-        "\u3930\u0000\u0000\u4350\u0000\u0000\u0000\u446F"+
-        "\u0000\u0000\u0000\u0000\u0000\u4C6F\u3839\u384C"+
-        "\u0000\u5738\u0000\u0000\u0000\u5739\u0000\u573F"+
-        "\u0000\u3C65\u0000\u0000\u0000\u4425\u0000\u362F"+
-        "\u573A\u0000\u0000\u0000\u492B\u0000\u4346\u0000"+
-        "\u0000\u573B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u573C\u0000\u3630\u0000\u573D\u0000\u573E\u0000"+
-        "\u0000\u5740\u0000\u4576\u0000\u0000\u5741\u5742"+
-        "\u0000\u5743\u0000\u0000\u5734\u5733\u0000\u0000"+
-        "\u0000\u5744\u3741\u0000\u0000\u0000\u4927\u0000"+
-        "\u0000\u3A4C\u4937\u4426\u494B\u5745\u0000\u0000"+
-        "\u3E34\u3146\u0000\u5746\u0000\u0000\u0000\u5747"+
-        "\u0000\u4C72\u0000\u0000\u4860\u0000\u0000\u574A"+
-        "\u317D\u402C\u5749\u5748\u3742\u4254\u0000\u574E"+
-        "\u574C\u0000\u574B\u4E27\u3865\u0000\u0000\u0000"+
-        "\u3D79\u574D\u454C\u3D3E\u0000\u0000\u0000\u4640"+
-        "\u5751\u5750\u0000\u0000\u0000\u0000\u574F\u0000"+
-        "\u5752\u3866\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5753\u497C\u3D5B\u0000\u0000\u5754\u4879\u0000"+
-        "\u0000\u0000\u0000\u4641\u4427\u0000\u0000\u0000"+
-        "\u0000\u4530\u0000\u0000\u5755\u352B\u0000\u0000"+
-        "\u0000\u0000\u0000\u3F34\u0000\u492C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3477\u4726\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5756\u3B56"+
-        "\u4B3A\u4B3B\u0000\u0000\u317E\u575B\u0000\u0000"+
-        "\u4369\u0000\u0000\u0000\u5758\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3277\u0000\u0000\u0000\u0000"+
-        "\u582D\u575A\u0000\u0000\u0000\u4730\u0000\u0000"+
-        "\u5759\u0000\u0000\u5757\u0000\u397A\u0000\u575D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5763\u5769"+
-        "\u5761\u0000\u455C\u0000\u0000\u5766\u495D\u0000"+
-        "\u0000\u5760\u0000\u5765\u4E67\u3B57\u0000\u0000"+
-        "\u4255\u575E\u0000\u0000\u0000\u355E\u5768\u402D"+
-        "\u3165\u5762\u3278\u5767\u0000\u0000\u0000\u3631"+
-        "\u0000\u5764\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u576A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u576C\u5776\u5774\u0000\u0000\u5771\u0000"+
-        "\u0000\u0000\u5770\u4E78\u0000\u5772\u0000\u0000"+
-        "\u3632\u0000\u3931\u0000\u0000\u3D7A\u0000\u0000"+
-        "\u0000\u5779\u576B\u0000\u0000\u0000\u0000\u576F"+
-        "\u575F\u0000\u327A\u5773\u5775\u4351\u0000\u0000"+
-        "\u3A28\u3238\u576D\u5778\u5777\u3633\u0000\u4229"+
-        "\u3366\u0000\u0000\u0000\u0000\u3743\u0000\u576E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u577A\u0000\u577D\u5821\u0000\u0000\u0000"+
-        "\u0000\u3C3D\u0000\u5827\u4470\u577B\u0000\u0000"+
-        "\u0000\u0000\u5825\u0000\u3279\u0000\u5823\u5824"+
-        "\u0000\u0000\u577E\u5822\u0000\u0000\u0000\u3867"+
-        "\u4D2A\u0000\u0000\u3435\u0000\u0000\u3159\u5826"+
-        "\u0000\u473A\u302D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4861\u575C\u582C\u5830\u4C65\u0000"+
-        "\u5829\u0000\u0000\u0000\u4569\u582E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3E70\u582F\u4657"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4F47\u0000\u582B\u0000\u0000\u0000\u0000"+
-        "\u5831\u0000\u397B\u0000\u404B\u0000\u0000\u3054"+
-        "\u582A\u5828\u0000\u415A\u0000\u0000\u0000\u577C"+
-        "\u3B34\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4246\u583D\u0000\u415B\u5838\u0000\u5835\u5836"+
-        "\u0000\u3C66\u5839\u583C\u0000\u0000\u0000\u0000"+
-        "\u5837\u3D25\u0000\u583A\u0000\u0000\u5834\u0000"+
-        "\u4C7C\u4C7B\u0000\u0000\u0000\u583E\u583F\u3055"+
-        "\u0000\u0000\u0000\u0000\u0000\u5833\u0000\u0000"+
-        "\u0000\u0000\u3672\u3026\u0000\u0000\u0000\u3436"+
-        "\u0000\u583B\u0000\u0000\u0000\u0000\u0000\u5843"+
-        "\u5842\u0000\u0000\u0000\u5847\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5848\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5846\u5849\u5841\u5845"+
-        "\u0000\u0000\u584A\u0000\u584B\u0000\u0000\u5840"+
-        "\u3B7C\u0000\u5844\u4256\u3932\u5832\u3F35\u0000"+
-        "\u0000\u0000\u0000\u5858\u0000\u4A69\u0000\u0000"+
-        "\u584E\u584F\u5850\u0000\u0000\u5857\u0000\u5856"+
-        "\u0000\u0000\u4B7D\u3437\u0000\u5854\u0000\u3745"+
-        "\u3334\u0000\u0000\u5851\u0000\u0000\u4E38\u5853"+
-        "\u3056\u5855\u0000\u584C\u5852\u5859\u3744\u584D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4D5D\u0000"+
-        "\u0000\u0000\u4D2B\u0000\u0000\u0000\u0000\u585C"+
-        "\u0000\u0000\u5860\u0000\u0000\u0000\u417E\u0000"+
-        "\u4E79\u5861\u0000\u0000\u585E\u0000\u585B\u0000"+
-        "\u0000\u585A\u585F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4A30\u0000\u0000\u4634"+
-        "\u0000\u3746\u0000\u5862\u585D\u0000\u5863\u0000"+
-        "\u0000\u0000\u377B\u0000\u0000\u0000\u3231\u0000"+
-        "\u0000\u0000\u586B\u0000\u0000\u0000\u3438\u0000"+
-        "\u0000\u0000\u0000\u5869\u0000\u0000\u586A\u3A29"+
-        "\u5868\u5866\u5865\u586C\u5864\u586E\u0000\u0000"+
-        "\u327B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5870\u0000\u0000\u586F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4428\u0000\u5873\u0000\u5871\u5867"+
-        "\u377C\u0000\u5872\u0000\u5876\u5875\u5877\u5874"+
-        "\u5878\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5879\u587A\u4A6A\u0000\u587C\u587B\u3D3F\u0000"+
-        "\u402E\u3266\u327C\u0000\u587D\u0000\u303F\u0000"+
-        "\u0000\u0000\u404C\u587E\u0000\u6C43\u5921\u3761"+
-        "\u0000\u5922\u0000\u0000\u0000\u0000\u406F\u0000"+
-        "\u0000\u0000\u5923\u0000\u0000\u0000\u5924\u353A"+
-        "\u5925\u0000\u5926\u5927\u4257\u0000\u0000\u0000"+
-        "\u384D\u0000\u0000\u4C61\u0000\u0000\u0000\u4B3C"+
-        "\u3D6A\u5928\u0000\u0000\u0000\u0000\u0000\u4070"+
-        "\u6E3D\u4862\u0000\u3C6A\u0000\u3A4D\u5929\u0000"+
-        "\u0000\u0000\u0000\u4247\u0000\u4A27\u0000\u0000"+
-        "\u4271\u0000\u0000\u592C\u0000\u0000\u592A\u0000"+
-        "\u592D\u0000\u0000\u592B\u0000\u0000\u0000\u0000"+
-        "\u592E\u0000\u0000\u0000\u0000\u0000\u4A31\u0000"+
-        "\u0000\u3037\u0000\u0000\u0000\u0000\u495E\u0000"+
-        "\u0000\u4863\u0000\u0000\u592F\u0000\u5932\u3E35"+
-        "\u353B\u0000\u5930\u5937\u3E36\u0000\u0000\u0000"+
-        "\u0000\u5931\u4744\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4D5E\u5933\u5934\u5938\u456A\u5935\u3933"+
-        "\u405E\u0000\u0000\u5946\u4834\u0000\u4272\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4864\u5A2D\u0000\u0000\u0000"+
-        "\u0000\u4A7A\u0000\u0000\u0000\u4471\u0000\u0000"+
-        "\u0000\u4B75\u0000\u593B\u3221\u436A\u0000\u0000"+
-        "\u0000\u0000\u5944\u0000\u0000\u4334\u593E\u5945"+
-        "\u5940\u5947\u5943\u0000\u5942\u476F\u0000\u593C"+
-        "\u327D\u593A\u3571\u4273\u5936\u0000\u0000\u5939"+
-        "\u3934\u405B\u0000\u3E37\u5941\u4752\u0000\u0000"+
-        "\u3572\u3348\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3367\u3F21\u5949\u594E"+
-        "\u0000\u594A\u0000\u377D\u0000\u594F\u3B22\u3969"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3D26\u593D";
-
-    private final static String innerIndex2=
-        "\u0000\u3B7D\u594C\u0000\u0000\u0000\u0000\u3B58"+
-        "\u594D\u3044\u0000\u0000\u5948\u0000\u0000\u0000"+
-        "\u0000\u4429\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3573\u0000\u0000\u0000\u0000\u0000\u3634"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u594B"+
-        "\u3027\u0000\u0000\u3A43\u0000\u0000\u0000\u3F36"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4472\u0000\u0000\u4854\u5951\u415E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u422A\u0000\u0000\u3B2B\u5952\u0000\u5954"+
-        "\u5950\u0000\u0000\u0000\u0000\u4A61\u0000\u443D"+
-        "\u0000\u0000\u0000\u0000\u415C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4A7B"+
-        "\u3C4E\u5960\u0000\u595F\u0000\u0000\u3F78\u0000"+
-        "\u0000\u0000\u377E\u0000\u0000\u0000\u5959\u3E39"+
-        "\u0000\u0000\u4668\u4731\u0000\u0000\u0000\u0000"+
-        "\u5957\u0000\u0000\u415D\u0000\u0000\u0000\u0000"+
-        "\u3C78\u595C\u0000\u0000\u3E38\u0000\u5956\u595B"+
-        "\u0000\u0000\u4753\u0000\u0000\u0000\u5955\u0000"+
-        "\u3721\u0000\u0000\u335D\u0000\u0000\u0000\u595D"+
-        "\u4E2B\u3A4E\u4335\u595A\u0000\u405C\u0000\u3935"+
-        "\u3F64\u3166\u413C\u5958\u3545\u0000\u0000\u0000"+
-        "\u0000\u0000\u3747\u0000\u444F\u595E\u0000\u0000"+
-        "\u0000\u0000\u0000\u415F\u0000\u0000\u5961\u0000"+
-        "\u5963\u0000\u0000\u4237\u5969\u0000\u5964\u0000"+
-        "\u0000\u5966\u0000\u0000\u0000\u0000\u0000\u4941"+
-        "\u4473\u0000\u5967\u0000\u0000\u0000\u4D2C\u0000"+
-        "\u0000\u0000\u4D48\u3439\u0000\u0000\u0000\u0000"+
-        "\u0000\u302E\u0000\u5965\u0000\u0000\u0000\u0000"+
-        "\u0000\u5962\u0000\u0000\u0000\u0000\u3478\u0000"+
-        "\u0000\u0000\u0000\u0000\u3167\u0000\u5968\u0000"+
-        "\u0000\u0000\u4D49\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u596C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u423B\u0000\u5973"+
-        "\u0000\u0000\u0000\u596D\u0000\u0000\u596A\u5971"+
-        "\u0000\u0000\u0000\u0000\u5953\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u596E\u0000"+
-        "\u5972\u0000\u0000\u0000\u4842\u456B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u596B\u0000\u596F\u0000"+
-        "\u0000\u0000\u3748\u0000\u0000\u0000\u3A71\u0000"+
-        "\u0000\u0000\u405D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5977\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4526\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5974"+
-        "\u0000\u4B60\u0000\u0000\u0000\u0000\u0000\u5975"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5976\u0000"+
-        "\u4C4E\u0000\u4022\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3762\u0000\u0000\u0000\u0000"+
-        "\u597D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3B35\u597A\u0000\u5979\u0000\u0000"+
-        "\u0000\u0000\u4732\u0000\u0000\u0000\u4635\u0000"+
-        "\u0000\u0000\u0000\u0000\u4531\u597B\u0000\u0000"+
-        "\u0000\u597C\u0000\u496F\u0000\u4745\u3B23\u0000"+
-        "\u4071\u0000\u4B50\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3349\u0000\u5A25\u597E\u0000\u0000\u0000"+
-        "\u0000\u4D4A\u5A27\u0000\u0000\u5A23\u0000\u5A24"+
-        "\u0000\u0000\u0000\u0000\u0000\u4160\u0000\u0000"+
-        "\u0000\u0000\u5A22\u0000\u593F\u0000\u0000\u0000"+
-        "\u5A26\u0000\u5A21\u0000\u0000\u0000\u0000\u0000"+
-        "\u5A2B\u5A2C\u4527\u5A2E\u0000\u0000\u3B24\u5A29"+
-        "\u0000\u0000\u0000\u0000\u353C\u0000\u0000\u5A2F"+
-        "\u0000\u5A28\u5A33\u0000\u5A32\u0000\u5A31\u0000"+
-        "\u0000\u0000\u5A34\u0000\u0000\u5A36\u3E71\u0000"+
-        "\u5A35\u0000\u0000\u0000\u0000\u5A39\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5A37\u0000\u0000\u0000\u5A38\u5970\u0000\u0000"+
-        "\u0000\u0000\u0000\u5A3B\u5A3A\u0000\u0000\u0000"+
-        "\u0000\u0000\u5978\u5A3C\u5A30\u0000\u0000\u3B59"+
-        "\u0000\u0000\u0000\u0000\u5A3D\u5A3E\u5A40\u5A3F"+
-        "\u5A41\u327E\u0000\u3936\u0000\u0000\u4A7C\u402F"+
-        "\u0000\u0000\u0000\u0000\u0000\u384E\u0000\u0000"+
-        "\u5A43\u0000\u0000\u0000\u0000\u5A46\u0000\u4952"+
-        "\u0000\u355F\u0000\u0000\u0000\u5A45\u5A44\u4754"+
-        "\u5A47\u3635\u0000\u0000\u0000\u5A49\u5A48\u0000"+
-        "\u0000\u0000\u343A\u3B36\u0000\u0000\u4658\u0000"+
-        "\u0000\u0000\u0000\u0000\u3749\u0000\u0000\u0000"+
-        "\u3F74\u0000\u5A4A\u0000\u4030\u4528\u0000\u495F"+
-        "\u5A4B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5A4C\u5A4D\u0000\u0000\u0000\u4A38"+
-        "\u555D\u4046\u0000\u0000\u494C\u0000\u3A58\u0000"+
-        "\u4865\u4843\u0000\u0000\u0000\u0000\u0000\u454D"+
-        "\u0000\u4E41\u0000\u5A4F\u3C50\u0000\u0000\u5A50"+
-        "\u0000\u3036\u0000\u0000\u3654\u404D\u0000\u4960"+
-        "\u0000\u0000\u0000\u5A51\u3B42\u4347\u0000\u3B5B"+
-        "\u3F37\u0000\u0000\u0000\u0000\u0000\u0000\u5A52"+
-        "\u0000\u4A7D\u0000\u0000\u3177\u3B5C\u0000\u0000"+
-        "\u0000\u5A55\u0000\u5A53\u5A56\u4E39\u5A54\u0000"+
-        "\u0000\u0000\u0000\u407B\u5A57\u0000\u0000\u4232"+
-        "\u0000\u0000\u5A58\u0000\u0000\u0000\u0000\u347A"+
-        "\u0000\u5A5A\u0000\u5A59\u0000\u0000\u0000\u0000"+
-        "\u5A5B\u5A5C\u347B\u0000\u0000\u467C\u4336\u356C"+
-        "\u3B5D\u4161\u0000\u0000\u3D5C\u3030\u0000\u0000"+
-        "\u0000\u5A5D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3222\u5A61\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3937\u5A60\u0000\u0000\u3A2B\u3E3A"+
-        "\u0000\u0000\u5A5F\u0000\u3E3B\u0000\u4C40\u3A2A"+
-        "\u0000\u0000\u0000\u3057\u404E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5A66\u0000\u0000\u4031"+
-        "\u3147\u0000\u0000\u0000\u0000\u3D55\u0000\u4B66"+
-        "\u3A72\u0000\u0000\u0000\u0000\u3E3C\u0000\u4027"+
-        "\u0000\u0000\u0000\u0000\u5A65\u5A63\u5A64\u0000"+
-        "\u0000\u0000\u0000\u0000\u436B\u0000\u0000\u5B26"+
-        "\u0000\u5A6A\u3B7E\u3938\u5A68\u0000\u0000\u0000"+
-        "\u0000\u5A69\u0000\u3F38\u0000\u0000\u0000\u5A67"+
-        "\u0000\u0000\u3B2F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5A6C\u5A6B\u5A70"+
-        "\u0000\u0000\u5A71\u0000\u5A6D\u0000\u3322\u5A6E"+
-        "\u5A6F\u4855\u0000\u0000\u0000\u0000\u4961\u374A"+
-        "\u5A72\u0000\u0000\u0000\u4032\u0000\u3E3D\u0000"+
-        "\u0000\u0000\u4352\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3647\u0000\u5A73\u5A77\u0000\u0000\u324B"+
-        "\u5A74\u5A76\u0000\u0000\u0000\u0000\u5A75\u0000"+
-        "\u0000\u3D6B\u0000\u0000\u0000\u0000\u4348\u3045"+
-        "\u5A78\u0000\u0000\u0000\u0000\u5A79\u0000\u0000"+
-        "\u0000\u0000\u442A\u0000\u0000\u0000\u4E71\u0000"+
-        "\u0000\u0000\u0000\u3B43\u0000\u0000\u4A6B\u0000"+
-        "\u0000\u0000\u0000\u0000\u4B3D\u0000\u0000\u0000"+
-        "\u5B22\u5A7B\u0000\u0000\u5A7E\u0000\u5A7D\u0000"+
-        "\u0000\u5A7A\u0000\u0000\u5B21\u0000\u0000\u465E"+
-        "\u0000\u5A7C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5B23\u0000"+
-        "\u0000\u3D6C\u5B24\u0000\u4D4B\u4778\u0000\u0000"+
-        "\u5B25\u0000\u0000\u0000\u0000\u0000\u5B27\u0000"+
-        "\u0000\u5B28\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5B29\u0000\u364A\u3148\u3939\u5B2A\u0000\u5B2B"+
-        "\u3D71\u4162\u0000\u0000\u5258\u413E\u413D\u4258"+
-        "\u3A47\u0000\u0000\u5072\u0000\u0000\u0000\u0000"+
-        "\u376E\u4D2D\u0000\u4A7E\u0000\u497E\u0000\u5B2C"+
-        "\u0000\u0000\u0000\u0000\u3A73\u443F\u5B2D\u4F2F"+
-        "\u0000\u0000\u0000\u4B3E\u0000\u442B\u5B2E\u347C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5B2F\u5B30"+
-        "\u4C5A\u0000\u4C24\u4B76\u4B5C\u3B25\u5B32\u0000"+
-        "\u0000\u3C6B\u0000\u0000\u4B51\u0000\u5B34\u5B37"+
-        "\u5B36\u0000\u3479\u0000\u0000\u3560\u0000\u5B33"+
-        "\u0000\u5B35\u0000\u0000\u0000\u0000\u5B38\u0000"+
-        "\u0000\u3F79\u0000\u0000\u0000\u0000\u4D7B\u3049"+
-        "\u3A60\u423C\u0000\u3C5D\u0000\u0000\u3E73\u0000"+
-        "\u0000\u5B3B\u0000\u0000\u454E\u0000\u5B39\u422B"+
-        "\u5B3A\u3E72\u4C5D\u5B3C\u5B3D\u4D68\u0000\u0000"+
-        "\u0000\u0000\u5B42\u0000\u0000\u393A\u0000\u4755"+
-        "\u5B3F\u456C\u5A5E\u5A62\u0000\u354F\u0000\u4747"+
-        "\u0000\u0000\u0000\u0000\u5B41\u0000\u3E3E\u4844"+
-        "\u0000\u0000\u0000\u0000\u0000\u5B47\u0000\u487A"+
-        "\u0000\u5B3E\u0000\u5B44\u5B43\u0000\u0000\u0000"+
-        "\u404F\u0000\u0000\u0000\u0000\u4B6D\u0000\u4E53"+
-        "\u0000\u0000\u4B67\u0000\u324C\u3B5E\u0000\u0000"+
-        "\u4F48\u5B46\u3F75\u0000\u0000\u0000\u5B45\u0000"+
-        "\u0000\u5B40\u0000\u0000\u0000\u0000\u0000\u384F"+
-        "\u0000\u0000\u0000\u5B4C\u5B4A\u0000\u324D\u5B48"+
-        "\u5B4E\u5B54\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4248\u0000\u0000\u4A41\u0000\u5B56\u0000"+
-        "\u0000\u0000\u4922\u0000\u0000\u0000\u5B55\u4770"+
-        "\u4B3F\u343B\u0000\u4077\u3D40\u0000\u0000\u0000"+
-        "\u4453\u0000\u4D2E\u0000\u0000\u5B51\u5B50\u0000"+
-        "\u0000\u0000\u5B52\u0000\u5B4F\u0000\u0000\u5B57"+
-        "\u0000\u5B4D\u0000\u0000\u5B4B\u0000\u5B53\u5B49"+
-        "\u0000\u436C\u0000\u4C78\u3C46\u3A74\u0000\u0000"+
-        "\u0000\u0000\u0000\u3A3A\u0000\u0000\u4B6F\u3341"+
-        "\u0000\u0000\u444E\u464A\u3149\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4072\u0000\u0000\u4034\u372A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5B59\u0000"+
-        "\u0000\u393B\u337C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5B5B\u3374\u5B61\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5B5E\u0000\u4073\u0000\u0000\u0000"+
-        "\u334B\u3A2C\u0000\u0000\u334A\u3A4F\u0000\u0000"+
-        "\u5B5C\u3765\u374B\u456D\u0000\u0000\u5B5A\u0000"+
-        "\u3046\u0000\u0000\u0000\u0000\u5B5D\u5B5F\u0000"+
-        "\u364D\u372C\u0000\u343C\u354B\u0000\u0000\u0000"+
-        "\u0000\u5B62\u0000\u0000\u3A79\u4B71\u0000\u3B37"+
-        "\u0000\u0000\u0000\u5B63\u0000\u0000\u0000\u4930"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5B6F\u0000\u3233\u5B64"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5B75\u5B65"+
-        "\u0000\u4E42\u0000\u5B6C\u0000\u475F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5B74\u0000\u5B67"+
-        "\u0000\u0000\u0000\u3034\u5B69\u0000\u0000\u393C"+
-        "\u0000\u0000\u0000\u5B6B\u0000\u5B6A\u0000\u5B66"+
-        "\u5B71\u0000\u3E3F\u0000\u0000\u0000\u546D\u3868"+
-        "\u4D7C\u0000\u0000\u0000\u0000\u5B68\u0000\u4474"+
-        "\u3323\u3A2D\u0000\u5B60\u0000\u5B70\u3361\u0000"+
-        "\u0000\u5B6E\u5B72\u0000\u456E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u347E\u0000\u5C32\u0000"+
-        "\u0000\u4C49\u5B77\u347D\u0000\u5B7E\u0000\u0000"+
-        "\u0000\u0000\u4B40\u0000\u5C21\u5C23\u0000\u5C27"+
-        "\u5B79\u0000\u432A\u0000\u0000\u0000\u0000\u456F"+
-        "\u5C2B\u5B7C\u0000\u5C28\u0000\u0000\u0000\u5C22"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3F39\u5C2C"+
-        "\u0000\u0000\u4033\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5C2A\u343D\u0000\u0000\u0000\u0000\u0000"+
-        "\u4F50\u5B76\u0000\u0000\u5C26\u3058\u0000\u0000"+
-        "\u5B78\u0000\u0000\u4C3A\u5B7D\u3F22\u4447\u5B73"+
-        "\u0000\u0000\u5C25\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3F7A\u5C2F\u3371\u3821\u0000\u0000\u0000"+
-        "\u0000\u5C31\u5B7A\u5C30\u0000\u5C29\u5B7B\u0000"+
-        "\u5C2D\u0000\u5C2E\u0000\u0000\u0000\u0000\u0000"+
-        "\u5C3F\u0000\u0000\u0000\u464E\u0000\u5C24\u0000"+
-        "\u0000\u5C3B\u0000\u0000\u0000\u5C3D\u0000\u4458"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D4C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4976\u5C38\u424A\u0000\u0000"+
-        "\u0000\u5C3E\u413F\u0000\u5C35\u5C42\u5C41\u0000"+
-        "\u466F\u5C40\u466A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5C44\u5C37\u0000\u3648\u5C3A\u3D5D"+
-        "\u0000\u0000\u0000\u4760\u5C3C\u364B\u0000\u5C34"+
-        "\u5C36\u5C33\u0000\u0000\u4F30\u335A\u5C39\u0000"+
-        "\u0000\u5C43\u3335\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3A67\u0000\u0000\u0000\u315D\u0000"+
-        "\u0000\u5C54\u0000\u0000\u4F31\u5C57\u0000\u0000"+
-        "\u0000\u0000\u0000\u3F3A\u5C56\u0000\u0000\u0000"+
-        "\u5C55\u0000\u0000\u0000\u0000\u0000\u0000\u5C52"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5C46\u0000"+
-        "\u0000\u5C63\u5C45\u0000\u5C58\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5C50\u0000\u0000\u5C4B\u5C48"+
-        "\u0000\u5C49\u0000\u5C51\u0000\u0000\u0000\u7422"+
-        "\u0000\u0000\u5C4E\u393D\u4448\u4164\u5C4C\u0000"+
-        "\u5C47\u0000\u0000\u5C4A\u0000\u0000\u0000\u0000"+
-        "\u4D4D\u4B6A\u0000\u0000\u0000\u5C4F\u5C59\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5C61"+
-        "\u5C5A\u0000\u0000\u5C67\u0000\u5C65\u0000\u0000"+
-        "\u0000\u0000\u5C60\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5C5F\u0000\u4450\u0000\u4165\u0000\u5C5D"+
-        "\u0000\u0000\u5C5B\u0000\u0000\u5C62\u0000\u0000"+
-        "\u0000\u0000\u5C68\u4875\u5C6E\u0000\u0000\u0000"+
-        "\u0000\u0000\u5C69\u5C6C\u5C66\u0000\u0000\u4374"+
-        "\u0000\u4938\u0000\u5C5C\u0000\u0000\u5C64\u3E40"+
-        "\u0000\u4C4F\u5C78\u5C6B\u0000\u0000\u0000\u0000"+
-        "\u0000\u3822\u3223\u335F\u0000\u0000\u5C53\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3E41\u5C70\u0000"+
-        "\u5C77\u3C79\u3372\u0000\u0000\u432E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5C6D\u0000\u0000\u5C72"+
-        "\u5C76\u0000\u0000\u3636\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u354C\u5C74\u0000\u0000\u0000\u0000\u0000\u3521"+
-        "\u0000\u464B\u5C73\u0000\u0000\u0000\u5C75\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5C6F\u0000\u0000\u0000\u0000\u0000"+
-        "\u5C71\u0000\u0000\u0000\u0000\u0000\u0000\u3360"+
-        "\u4349\u0000\u0000\u0000\u5C7C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5C7A\u3869\u0000"+
-        "\u5C79\u0000\u0000\u0000\u0000\u0000\u0000\u5D21"+
-        "\u0000\u0000\u0000\u0000\u5B58\u0000\u0000\u0000"+
-        "\u5C7B\u0000\u5C7D\u5C7E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5D2C\u0000\u5D28\u0000\u5B6D\u0000"+
-        "\u0000\u0000\u0000\u5D27\u0000\u0000\u0000\u0000"+
-        "\u5D26\u0000\u0000\u5D23\u0000\u0000\u0000\u0000"+
-        "\u0000\u5C6A\u5D25\u5D24\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5D2A\u0000\u4F26\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5D2D\u367B\u0000\u0000\u5D29\u5D2B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4827\u0000\u5D2E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5D32\u5D2F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4D73\u5D30\u0000\u0000"+
-        "\u0000\u0000\u5C5E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5D33\u0000\u0000\u0000\u5D34\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3135\u0000\u5D36"+
-        "\u3767\u3C21\u0000\u3655\u0000\u0000\u0000\u3224"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D5F\u0000\u0000\u0000\u0000\u5D38"+
-        "\u5D37\u5D3A\u353D\u0000\u0000\u3656\u343E\u0000"+
-        "\u0000\u0000\u0000\u5D3D\u0000\u0000\u0000\u5D3C"+
-        "\u0000\u5D3E\u0000\u0000\u324E\u0000\u4337\u0000"+
-        "\u5D3F\u0000\u0000\u343F\u5D41\u0000\u0000\u0000"+
-        "\u0000\u5D40\u0000\u5D42\u0000\u0000\u0000\u5D43"+
-        "\u0000\u5D44\u3B5F\u4035\u3A21\u0000\u4970\u0000"+
-        "\u0000\u4A62\u4F44\u0000\u0000\u0000\u0000\u3B75"+
-        "\u0000\u0000\u0000\u3A50\u4E72\u0000\u0000\u0000"+
-        "\u5D45\u5D46\u0000\u3B60\u0000\u0000\u0000\u5D47"+
-        "\u5D48\u0000\u0000\u5D4A\u5D49\u0000\u4B58\u0000"+
-        "\u0000\u3D5E\u3C6C\u3B44\u0000\u5D4B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5D4D\u3F23\u0000"+
-        "\u5D4C\u0000\u0000\u0000\u0000\u0000\u5D4E\u0000"+
-        "\u0000\u0000\u0000\u0000\u5D4F\u0000\u0000\u0000"+
-        "\u0000\u0000\u5D50\u5D51\u0000\u0000\u0000\u5D52"+
-        "\u0000\u5D54\u5D53\u5D55\u3225\u434A\u0000\u5D56"+
-        "\u0000\u0000\u3B26\u334C\u5D57\u0000\u0000\u4542"+
-        "\u544C\u0000\u0000\u0000\u0000\u3523\u5D58\u0000"+
-        "\u0000\u0000\u0000\u5D59\u0000\u4A6C\u4B68\u0000"+
-        "\u0000\u0000\u4647\u5D5A\u4866\u0000\u0000\u0000"+
-        "\u487B\u0000\u0000\u4C53\u0000\u0000\u0000\u5D5B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5D5D\u5D5C\u0000\u0000\u5D5F"+
-        "\u0000\u0000\u0000\u5D5E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5D61\u0000\u0000\u0000\u0000\u0000\u0000\u3B61"+
-        "\u0000\u4C31\u0000\u5D62\u5D63\u0000\u0000\u3524"+
-        "\u0000\u0000\u0000\u5D64\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5D66\u5D65\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3F65\u0000\u0000\u4939"+
-        "\u314A\u0000\u0000\u0000\u0000\u0000\u4845\u0000"+
-        "\u4475\u3D41\u3561\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4846\u0000"+
-        "\u3C2E\u0000\u0000\u0000\u0000\u5D68\u0000\u3440"+
-        "\u0000\u0000\u3178\u0000\u0000\u4672\u5D67\u393E"+
-        "\u4353\u0000\u5D69\u0000\u0000\u0000\u0000\u0000"+
-        "\u5D71\u0000\u5D6A\u0000\u0000\u0000\u0000\u0000"+
-        "\u4241\u0000\u3562\u5D72\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3768\u0000\u0000\u3525\u5D70\u0000"+
-        "\u0000\u5D6E\u5D6B\u4D60\u0000\u0000\u0000\u0000"+
-        "\u4440\u0000\u0000\u0000\u4659\u5D6C\u0000\u0000"+
-        "\u5D74\u0000\u5D73\u3723\u0000\u0000\u322D\u0000"+
-        "\u0000\u3A3B\u5D6D\u5D6F\u0000\u0000\u0000\u0000"+
-        "\u0000\u4B57\u4274\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4B77\u0000\u0000\u5D7C\u0000"+
-        "\u0000\u5D7D\u0000\u324F\u0000\u0000\u0000\u0000"+
-        "\u4A28\u4C7D\u5E21\u3C23\u3E42\u5D78\u5D7E\u3168"+
-        "\u0000\u3637\u0000\u0000\u5D75\u5D7A\u0000\u0000"+
-        "\u0000\u4074\u4771\u0000\u4867\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5D77\u0000\u4B21\u0000\u5D79"+
-        "\u0000\u5E24\u0000\u5E22\u0000\u5D7B\u0000\u0000"+
-        "\u0000\u4B22\u4748\u3563\u0000\u4525\u0000\u0000"+
-        "\u436D\u0000\u5E25\u0000\u0000\u0000\u0000\u5E23"+
-        "\u4259\u5D76\u0000\u314B\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4D4E\u5E30\u0000\u0000\u0000"+
-        "\u0000\u0000\u5E2F\u0000\u0000\u0000\u0000\u4076"+
-        "\u0000\u5E2C\u0000\u4D6C\u0000\u0000\u4636\u5E26"+
-        "\u0000\u0000\u0000\u0000\u0000\u4445\u0000\u0000"+
-        "\u0000\u314C\u393F\u5E29\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3D27\u5E2E\u0000\u5E2D\u5E28\u0000"+
-        "\u5E2B\u0000\u0000\u3368\u0000\u5E2A\u4749\u0000"+
-        "\u0000\u4E2E\u0000\u0000\u3E74\u4075\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5E36\u5E34\u0000\u494D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5E31\u5E33\u0000\u313A\u0000"+
-        "\u0000\u3940\u4F32\u0000\u333D\u0000\u4962\u0000"+
-        "\u0000\u0000\u0000\u0000\u4D61\u0000\u0000\u3324"+
-        "\u3F3B\u5E35\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5E3A\u0000\u0000"+
-        "\u3E43\u0000\u0000\u0000\u4D30\u0000\u5E37\u0000"+
-        "\u0000\u0000\u0000\u5E32\u0000\u5E38\u0000\u0000"+
-        "\u0000\u4E5E\u0000\u4573\u4642\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3336"+
-        "\u0000\u0000\u3155\u0000\u0000\u5E3E\u0000\u0000"+
-        "\u5E41\u0000\u0000\u0000\u4E43\u0000\u0000\u0000"+
-        "\u4D64\u0000\u0000\u0000\u0000\u5E48\u5E42\u5E3F"+
-        "\u0000\u0000\u0000\u4E54\u5E45\u0000\u0000\u0000"+
-        "\u0000\u3D4A\u5E47\u0000\u0000\u5E4C\u0000\u0000"+
-        "\u4571\u5E4A\u0000\u0000\u0000\u0000\u5E44\u0000"+
-        "\u0000\u4338\u0000\u0000\u5E4B\u0000\u5E40\u0000"+
-        "\u5E46\u0000\u5E4D\u307C\u5E43\u0000\u5E4E\u0000"+
-        "\u0000\u3F3C\u0000\u3D5F\u0000\u4A25\u0000\u3A2E"+
-        "\u0000\u5E3B\u5E49\u453A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4036\u0000\u3369"+
-        "\u3A51\u3E44\u5E3D\u3D42\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u374C\u0000\u5E3C\u0000\u0000"+
-        "\u0000\u5E52\u3D6D\u383A\u0000\u5E61\u0000\u5E5B"+
-        "\u3574\u454F\u0000\u5E56\u5E5F\u302F\u3132\u0000"+
-        "\u0000\u3239\u0000\u5E58\u422C\u5E4F\u5E51\u3941"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5E62\u0000\u5E5D\u0000\u0000\u0000\u5E55\u0000"+
-        "\u0000\u0000\u0000\u5E5C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C2B\u0000\u0000\u5E5A\u5E5E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3850\u0000"+
-        "\u3E45\u0000\u0000\u4339\u0000\u0000\u0000\u5E54"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4D2F"+
-        "\u0000\u0000\u0000\u5E57\u0000\u0000\u5E50\u4572"+
-        "\u0000\u0000\u5E53\u0000\u0000\u0000\u5E59\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4F51\u3C3E"+
-        "\u4B7E\u0000\u5E63\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u482E\u0000\u0000\u5E6F"+
-        "\u383B\u0000\u0000\u0000\u0000\u0000\u3D60\u0000"+
-        "\u5E65\u0000\u0000\u0000\u4E2F\u3942\u0000\u5E72"+
-        "\u0000\u0000\u306E\u0000\u0000\u5E70\u0000\u0000"+
-        "\u0000\u0000\u5E64\u0000\u0000\u0000\u0000\u5E6A"+
-        "\u0000\u0000\u5E6C\u0000\u0000\u0000\u4D4F\u5E67"+
-        "\u0000\u0000\u452E\u0000\u0000\u5E69\u0000\u0000"+
-        "\u0000\u0000\u5E71\u0000\u5E6B\u4C47\u0000\u0000"+
-        "\u0000\u5E66\u0000\u3C22\u5E7E\u0000\u0000\u0000"+
-        "\u0000\u336A\u0000\u5E68\u5E6D\u5E6E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u426C\u425A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5E76\u0000\u0000\u5E7C"+
-        "\u0000\u0000\u5E7A\u0000\u4529\u0000\u0000\u5F23"+
-        "\u5E77\u0000\u0000\u0000\u0000\u0000\u5E78\u5E60"+
-        "\u0000\u3579\u493A\u0000\u0000\u0000\u3C3F\u0000"+
-        "\u0000\u3977\u0000\u0000\u0000\u0000\u0000\u4F33"+
-        "\u0000\u5E74\u0000\u5F22\u3169\u4166\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4779\u0000\u3441\u4E7A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4C21\u4452\u0000\u0000\u0000"+
-        "\u0000\u5E7B\u5E7D\u0000\u0000\u0000\u0000\u0000"+
-        "\u4132\u0000\u0000\u0000\u0000\u0000\u5F21\u5E79"+
-        "\u0000\u5E73\u0000\u0000\u0000\u3443\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3769\u0000\u0000\u0000"+
-        "\u5F2F\u0000\u0000\u5F2A\u4078\u0000\u0000\u3363"+
-        "\u0000\u0000\u0000\u0000\u3D61\u0000\u5F33\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F2C\u442C\u5F29"+
-        "\u4459\u0000\u0000\u0000\u5F4C\u0000\u0000\u0000"+
-        "\u5F26\u0000\u5F25\u0000\u5F2E\u0000\u0000\u0000"+
-        "\u5F28\u5F27\u5F2D\u0000\u4021\u0000\u5F24\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5F30\u0000"+
-        "\u0000\u5F31\u0000\u0000\u0000\u0000\u0000\u3442"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F36\u0000\u5F35\u5F37\u0000\u0000\u0000"+
-        "\u0000\u0000\u5F3A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4543\u0000\u5F34\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F38\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3763\u4279\u5F32\u473B\u0000\u0000\u5F39\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5F3E\u5F3C\u0000\u0000"+
-        "\u5F3F\u0000\u0000\u5F42\u0000\u0000\u0000\u5F3B"+
-        "\u396A\u4728\u0000\u0000\u5E39\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4D74\u5F3D\u0000\u5F41\u4275"+
-        "\u0000\u5F40\u0000\u5F2B\u0000\u0000\u6F69\u0000"+
-        "\u0000\u0000\u5F45\u0000\u0000\u0000\u5F49\u0000"+
-        "\u0000\u5F47\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F43\u0000\u5F44\u0000\u0000\u0000\u5F48"+
-        "\u0000\u5F46\u0000\u0000\u0000\u494E\u0000\u0000"+
-        "\u5F4E\u0000\u5F4B\u5F4A\u0000\u5F4D\u4654\u5F4F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4375\u426D"+
-        "\u0000\u0000\u0000\u0000\u4025\u0000\u0000\u0000"+
-        "\u5F50\u0000\u5F52\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5F51\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5E75\u0000\u0000\u0000"+
-        "\u0000\u5F53\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4667\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5F54\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3250\u0000\u0000\u0000\u4574"+
-        "\u3325\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3564\u0000\u0000\u0000\u3C5E\u3A52\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4F27\u3F66\u0000\u0000\u0000\u316A\u0000"+
-        "\u0000\u0000\u5F56\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F55\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5F59\u433A\u5F5C\u5F57"+
-        "\u0000\u0000\u0000\u5F5B\u0000\u0000\u0000\u0000"+
-        "\u5F5A\u4540\u3059\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4E75\u0000\u0000\u5F5E\u0000\u0000\u0000\u3128"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F60\u0000\u0000\u0000\u5F5F\u0000\u5F5D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F58\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4B23\u0000\u0000\u0000\u5F62\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F61\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u316B\u0000\u0000\u0000"+
-        "\u0000\u5F64\u4A32\u0000\u5F63\u0000\u0000\u0000"+
-        "\u0000\u4C35\u0000\u0000\u0000\u0000\u3E47\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4133\u0000"+
-        "\u0000\u0000\u0000\u0000\u3E46\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4E7B\u0000\u0000\u5F6A\u0000\u4079\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F66\u5F6B\u0000"+
-        "\u0000\u316C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5F69\u0000\u4761\u5F65\u5F68\u3E48"+
-        "\u0000\u4851\u0000\u0000\u5F6C\u0000\u3C51\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u407A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5F6F\u0000\u0000\u0000"+
-        "\u5F67\u0000\u3727\u0000\u0000\u0000\u0000\u5F6D"+
-        "\u0000\u0000\u0000\u0000\u4D50\u5F70\u0000\u0000"+
-        "\u0000\u7426\u0000\u0000\u0000\u0000\u0000\u3D4F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5F71\u0000\u0000\u0000\u5F72\u0000\u0000\u0000"+
-        "\u0000\u472E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F74\u0000\u0000\u0000\u0000\u5F75\u0000"+
-        "\u0000\u0000\u0000\u4733\u0000\u0000\u0000\u0000"+
-        "\u4575\u5F77\u0000\u0000\u0000\u0000\u5F79\u0000"+
-        "\u4E55\u0000\u5F76\u0000\u5F78\u316D\u0000\u5F73"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u535B"+
-        "\u5F7A\u0000\u0000\u0000\u0000\u4167\u3B38\u5F7C"+
-        "\u0000\u0000\u0000\u0000\u5F7B\u3F24\u5259\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F7D\u0000\u0000"+
-        "\u0000\u6021\u0000\u5F6E\u5F7E\u0000\u0000\u6022"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u477A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6023\u0000\u0000"+
-        "\u6024\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6025\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6026\u0000\u445E\u0000\u6028\u6027\u0000\u0000"+
-        "\u6029\u0000\u602A\u0000\u0000\u3C5F\u4963\u0000"+
-        "\u0000\u0000\u4C6C\u602B\u602C\u4156\u3C24\u602D"+
-        "\u602E\u0000\u0000\u0000\u0000\u0000\u602F\u4A52"+
-        "\u4847\u0000\u0000\u6030\u4757\u0000\u0000\u0000"+
-        "\u0000\u0000\u442D\u0000\u0000\u0000\u0000\u0000"+
-        "\u6031\u3267\u0000\u356D\u0000\u4C46\u0000\u4C36"+
-        "\u0000\u3234\u4F34\u0000\u0000\u0000\u0000\u4B52"+
-        "\u0000\u4A2A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4037\u0000\u6032\u0000\u0000\u0000"+
-        "\u0000\u4643\u0000\u0000\u0000\u3823\u6033\u0000"+
-        "\u3A54\u6035\u6034\u0000\u0000\u0000\u0000\u6036"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6037\u0000\u0000\u0000\u6038\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u353E\u0000\u6039\u0000\u0000\u0000\u0000\u603A"+
-        "\u0000\u0000\u0000\u0000\u3824\u0000\u0000\u4848"+
-        "\u0000\u0000\u603C\u0000\u0000\u0000\u3E75\u0000"+
-        "\u0000\u603B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3638\u603D\u603F\u0000\u603E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6040\u0000"+
-        "\u3851\u0000\u6041\u0000\u0000\u0000\u0000\u3669"+
-        "\u0000\u4140\u0000\u397D\u0000\u0000\u0000\u0000"+
-        "\u6043\u6044\u6042\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3C6D\u0000\u0000\u4648\u3639\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6046"+
-        "\u432C\u6045\u0000\u0000\u4F35\u4762\u0000\u0000";
-
-    private final static String innerIndex3=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6049\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u604B\u6048"+
-        "\u0000\u0000\u0000\u4C54\u604A\u604C\u0000\u4E44"+
-        "\u0000\u0000\u0000\u0000\u0000\u6050\u0000\u0000"+
-        "\u0000\u604F\u4376\u472D\u0000\u0000\u3825\u604E"+
-        "\u0000\u0000\u0000\u0000\u604D\u0000\u4D31\u4D32"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6051\u316E"+
-        "\u0000\u0000\u0000\u0000\u3976\u3B62\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6052\u6053"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6055"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3D43\u0000\u0000\u0000\u0000"+
-        "\u6057\u0000\u6056\u0000\u0000\u0000\u0000\u0000"+
-        "\u6058\u0000\u334D\u0000\u0000\u605A\u0000\u0000"+
-        "\u6059\u0000\u605C\u605B\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u383C\u0000\u0000\u4E28"+
-        "\u0000\u364C\u0000\u3226\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u366A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3461\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4E68\u605E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6060\u0000\u0000\u0000\u0000"+
-        "\u6061\u0000\u3251\u0000\u0000\u0000\u0000\u0000"+
-        "\u605D\u0000\u3B39\u0000\u0000\u4441\u605F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6064\u0000"+
-        "\u3C6E\u0000\u0000\u0000\u0000\u6062\u0000\u0000"+
-        "\u0000\u0000\u373E\u0000\u0000\u4849\u6063\u0000"+
-        "\u0000\u607E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6069\u0000\u0000\u0000\u0000\u0000\u383D\u0000"+
-        "\u0000\u0000\u0000\u3565\u0000\u6066\u4D7D\u0000"+
-        "\u0000\u4E30\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4276\u0000\u0000\u6068\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u606A\u4E56\u3657\u487C\u474A\u0000"+
-        "\u0000\u0000\u606B\u0000\u0000\u0000\u0000\u606D"+
-        "\u0000\u6070\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u606C\u0000\u0000"+
-        "\u0000\u606F\u386A\u314D\u6071\u0000\u3F70\u606E"+
-        "\u4E5C\u0000\u0000\u6074\u7424\u0000\u0000\u0000"+
-        "\u0000\u6072\u6075\u0000\u0000\u0000\u0000\u6067"+
-        "\u6073\u0000\u0000\u3A3C\u0000\u0000\u6076\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6077\u0000"+
-        "\u0000\u0000\u0000\u4D7E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6078\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6079\u0000"+
-        "\u0000\u0000\u6065\u0000\u0000\u0000\u0000\u607A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3444\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3C25\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u607B\u0000\u0000\u0000\u0000\u607C"+
-        "\u0000\u0000\u0000\u0000\u607D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u313B\u0000\u0000\u0000"+
-        "\u6121\u0000\u493B\u6122\u0000\u0000\u3424\u6123"+
-        "\u0000\u6124\u0000\u0000\u0000\u0000\u6125\u0000"+
-        "\u6127\u6128\u6126\u0000\u0000\u0000\u4953\u612A"+
-        "\u6129\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u612C\u612B\u612D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u612E\u6130\u612F\u0000"+
-        "\u0000\u3979\u0000\u6132\u0000\u6131\u0000\u0000"+
-        "\u3445\u0000\u3F53\u0000\u453C\u0000\u6133\u4038"+
-        "\u0000\u0000\u0000\u3B3A\u0000\u3179\u6134\u0000"+
-        "\u4D51\u0000\u0000\u4A63\u6135\u0000\u0000\u0000"+
-        "\u4544\u4D33\u3943\u3F3D\u0000\u0000\u0000\u434B"+
-        "\u5234\u0000\u442E\u3268\u6136\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6137\u0000\u613C\u0000"+
-        "\u0000\u613A\u6139\u5A42\u3326\u6138\u0000\u305A"+
-        "\u0000\u482A\u0000\u0000\u484A\u0000\u0000\u0000"+
-        "\u0000\u4E31\u613D\u613B\u435C\u4026\u0000\u0000"+
-        "\u482B\u0000\u492D\u0000\u613F\u4E2C\u374D\u6140"+
-        "\u0000\u613E\u4856\u6141\u0000\u6142\u0000\u0000"+
-        "\u305B\u0000\u0000\u3E76\u6147\u0000\u6144\u466D"+
-        "\u6143\u0000\u0000\u0000\u0000\u0000\u0000\u3526"+
-        "\u0000\u0000\u614A\u0000\u0000\u0000\u6145\u6146"+
-        "\u0000\u6149\u6148\u4925\u0000\u0000\u4142\u4141"+
-        "\u0000\u353F\u0000\u0000\u614B\u0000\u0000\u0000"+
-        "\u0000\u0000\u614C\u0000\u0000\u614D\u0000\u0000"+
-        "\u0000\u0000\u0000\u614F\u0000\u614E\u0000\u0000"+
-        "\u0000\u0000\u0000\u3156\u0000\u0000\u0000\u0000"+
-        "\u0000\u6157\u4868\u6151\u0000\u6153\u0000\u0000"+
-        "\u6155\u3F3E\u0000\u0000\u6156\u6154\u3C40\u0000"+
-        "\u0000\u0000\u6150\u6152\u0000\u4942\u0000\u3E49"+
-        "\u0000\u0000\u6159\u0000\u0000\u6158\u0000\u0000"+
-        "\u0000\u0000\u615A\u0000\u3C26\u3A2F\u0000\u0000"+
-        "\u4577\u615B\u0000\u444B\u0000\u0000\u615D\u0000"+
-        "\u0000\u0000\u4E21\u615C\u0000\u0000\u0000\u0000"+
-        "\u0000\u4169\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6162\u0000\u6164\u6165\u4354\u0000\u0000\u0000"+
-        "\u0000\u0000\u6163\u0000\u6160\u0000\u615E\u615F"+
-        "\u0000\u6161\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6168\u0000\u6166\u0000\u6167\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6169"+
-        "\u616B\u616C\u616D\u0000\u616E\u0000\u0000\u616A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6170\u0000\u0000\u0000\u616F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6171\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4E45\u0000\u0000\u0000\u6174\u6172"+
-        "\u6173\u0000\u0000\u0000\u3462\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C7E\u0000\u0000\u0000\u4A4A\u0000"+
-        "\u6176\u0000\u0000\u0000\u6175\u0000\u0000\u0000"+
-        "\u0000\u6177\u6178\u0000\u0000\u0000\u0000\u617C"+
-        "\u6179\u617A\u617B\u0000\u617D\u0000\u0000\u0000"+
-        "\u617E\u0000\u6221\u0000\u0000\u0000\u6222\u0000"+
-        "\u6223\u0000\u482F\u4550\u6224\u4772\u4934\u0000"+
-        "\u6225\u0000\u0000\u6226\u452A\u0000\u3327\u3944"+
-        "\u6227\u0000\u0000\u6228\u0000\u0000\u6229\u0000"+
-        "\u3B29\u0000\u0000\u622B\u0000\u0000\u622A\u0000"+
-        "\u0000\u622C\u622D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4869\u0000"+
-        "\u622E\u0000\u0000\u0000\u622F\u0000\u0000\u7369"+
-        "\u6230\u6231\u6232\u0000\u0000\u0000\u0000\u3B2E"+
-        "\u0000\u0000\u6233\u4756\u0000\u0000\u4B5F\u0000"+
-        "\u314E\u0000\u3157\u0000\u0000\u6234\u0000\u0000"+
-        "\u0000\u0000\u6236\u0000\u0000\u0000\u6235\u4570"+
-        "\u0000\u0000\u0000\u4039\u5D39\u0000\u6237\u4C41"+
-        "\u0000\u6238\u0000\u3446\u4857\u6239\u0000\u623A"+
-        "\u0000\u0000\u623B\u0000\u0000\u0000\u4C5C\u0000"+
-        "\u0000\u0000\u4C55\u0000\u443E\u0000\u0000\u0000"+
-        "\u416A\u0000\u0000\u623D\u0000\u0000\u3D62\u0000"+
-        "\u0000\u3E4A\u0000\u0000\u6240\u0000\u0000\u623F"+
-        "\u623E\u487D\u0000\u3447\u3829\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6246\u0000\u0000\u6243\u3F3F"+
-        "\u4C32\u0000\u0000\u0000\u6242\u6244\u6245\u0000"+
-        "\u0000\u6241\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6247"+
-        "\u6248\u0000\u442F\u0000\u3463\u0000\u0000\u0000"+
-        "\u4365\u0000\u0000\u0000\u0000\u0000\u0000\u6249"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u624A\u624D\u0000\u0000\u0000\u0000"+
-        "\u0000\u3F67\u0000\u4644\u0000\u624E\u4B53\u0000"+
-        "\u624B\u0000\u0000\u624C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6251\u0000\u0000\u0000\u0000\u6250\u624F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6253\u0000\u0000\u6252\u0000"+
-        "\u0000\u6254\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6256\u0000"+
-        "\u6255\u0000\u0000\u0000\u0000\u4A4D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3D56\u4E46\u0000\u0000"+
-        "\u6257\u0000\u0000\u4637\u0000\u0000\u6258\u0000"+
-        "\u0000\u6259\u0000\u625D\u625B\u625C\u0000\u625A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u625E"+
-        "\u0000\u0000\u0000\u0000\u0000\u625F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6260"+
-        "\u0000\u0000\u6261\u4C37\u6262\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C70\u6263\u0000\u434E\u0000\u476A"+
-        "\u0000\u366B\u0000\u0000\u0000\u433B\u6264\u363A"+
-        "\u0000\u0000\u0000\u4050\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6265\u0000\u0000\u0000"+
-        "\u0000\u0000\u3A3D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6266\u0000\u0000\u0000"+
-        "\u0000\u0000\u6267\u0000\u3826\u3A55\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6269\u0000\u0000\u0000\u0000\u4556\u3A56\u354E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4B24\u0000\u474B\u0000\u0000\u0000"+
-        "\u0000\u0000\u4557\u0000\u0000\u0000\u0000\u395C"+
-        "\u0000\u0000\u0000\u0000\u0000\u626B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3E4B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4E32\u3945\u0000\u0000\u3827"+
-        "\u0000\u0000\u4823\u0000\u626D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u626F\u0000\u0000\u0000"+
-        "\u0000\u386B\u0000\u0000\u0000\u0000\u626E\u4476"+
-        "\u0000\u0000\u0000\u0000\u6271\u3337\u626C\u0000"+
-        "\u0000\u486A\u0000\u3130\u0000\u3A6C\u0000\u4F52"+
-        "\u0000\u0000\u6270\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6272\u0000\u0000\u0000\u4A4B"+
-        "\u0000\u4059\u6274\u0000\u0000\u0000\u0000\u6275"+
-        "\u0000\u0000\u0000\u0000\u0000\u6273\u0000\u0000"+
-        "\u0000\u0000\u334E\u0000\u627B\u0000\u627A\u0000"+
-        "\u0000\u3C27\u0000\u0000\u0000\u627C\u6277\u0000"+
-        "\u0000\u0000\u627D\u6278\u0000\u0000\u0000\u0000"+
-        "\u4858\u6276\u0000\u0000\u6279\u0000\u0000\u0000"+
-        "\u0000\u0000\u6322\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6321"+
-        "\u4B61\u0000\u0000\u0000\u627E\u0000\u0000\u306B"+
-        "\u0000\u0000\u0000\u0000\u6324\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6323\u0000\u0000"+
-        "\u0000\u3E4C\u0000\u0000\u0000\u0000\u0000\u6325"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4143\u0000"+
-        "\u0000\u6327\u6326\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6328\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6268\u0000"+
-        "\u0000\u0000\u626A\u632A\u6329\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3C28\u0000\u4E69\u0000\u3C52\u0000"+
-        "\u632B\u3737\u0000\u0000\u0000\u0000\u0000\u3540"+
-        "\u3527\u3B63\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4D34\u0000\u0000\u6331\u0000\u6330\u4144\u632D"+
-        "\u0000\u0000\u632F\u0000\u0000\u3D4B\u3F40\u632E"+
-        "\u632C\u0000\u472A\u0000\u0000\u3E4D\u0000\u0000"+
-        "\u493C\u0000\u0000\u0000\u0000\u3A57\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4578"+
-        "\u0000\u0000\u6332\u0000\u0000\u0000\u0000\u6333"+
-        "\u6349\u3658\u0000\u0000\u4F3D\u4135\u0000\u0000"+
-        "\u0000\u0000\u6334\u0000\u0000\u3252\u4477\u4A21"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6335\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u357A\u6336"+
-        "\u0000\u0000\u6338\u0000\u0000\u0000\u6339\u0000"+
-        "\u4729\u0000\u0000\u633A\u0000\u0000\u0000\u0000"+
-        "\u0000\u633B\u633C\u0000\u0000\u3659\u3253\u4645"+
-        "\u3D28\u3B64\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u633D\u0000\u3D29\u0000\u0000\u0000\u0000"+
-        "\u0000\u324A\u4943\u0000\u0000\u633E\u0000\u0000"+
-        "\u486B\u0000\u0000\u0000\u0000\u0000\u0000\u4145"+
-        "\u0000\u6341\u0000\u6342\u4769\u0000\u3F41\u633F"+
-        "\u0000\u4361\u0000\u0000\u6340\u0000\u0000\u0000"+
-        "\u3E4E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u305C\u0000\u0000\u0000\u0000"+
-        "\u3529\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6343\u0000\u0000\u4478\u0000\u6344\u4047\u0000"+
-        "\u0000\u0000\u0000\u0000\u4C2D\u0000\u0000\u4923"+
-        "\u6345\u6346\u4355\u0000\u4E47\u0000\u0000\u6348"+
-        "\u6347\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3C6F\u0000"+
-        "\u0000\u634A\u3070\u0000\u0000\u0000\u0000\u634D"+
-        "\u0000\u0000\u0000\u634B\u3254\u374E\u634C\u3946"+
-        "\u3972\u0000\u4A66\u634E\u0000\u0000\u4B54\u0000"+
-        "\u0000\u6350\u0000\u0000\u0000\u4051\u314F\u323A"+
-        "\u302C\u0000\u0000\u0000\u0000\u0000\u0000\u634F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6351\u6352\u3E77\u0000\u0000\u0000\u0000"+
-        "\u0000\u6353\u0000\u334F\u0000\u0000\u0000\u0000"+
-        "\u6355\u0000\u0000\u0000\u376A\u0000\u3566\u0000"+
-        "\u0000\u6356\u3675\u0000\u0000\u6357\u0000\u407C"+
-        "\u0000\u464D\u0000\u4060\u3A75\u0000\u0000\u0000"+
-        "\u6358\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4362\u416B\u0000\u635A\u635C\u6359"+
-        "\u635B\u0000\u0000\u0000\u0000\u0000\u0000\u3722"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u635D\u3726\u0000\u0000\u0000\u3567\u4D52"+
-        "\u635F\u0000\u0000\u0000\u0000\u0000\u6360\u0000"+
-        "\u0000\u0000\u312E\u0000\u0000\u0000\u0000\u6363"+
-        "\u0000\u0000\u0000\u3376\u6362\u6361\u0000\u6365"+
-        "\u635E\u0000\u6366\u4E29\u0000\u6367\u0000\u6368"+
-        "\u0000\u0000\u5474\u636A\u0000\u6369\u0000\u0000"+
-        "\u0000\u636B\u636C\u0000\u4E35\u636D\u0000\u706F"+
-        "\u3E4F\u636E\u636F\u3D57\u0000\u4638\u6370\u0000"+
-        "\u0000\u0000\u4328\u0000\u0000\u6371\u0000\u433C"+
-        "\u6372\u0000\u0000\u0000\u0000\u0000\u3625\u0000"+
-        "\u513F\u435D\u3C33\u0000\u0000\u0000\u0000\u3448"+
-        "\u0000\u0000\u6373\u0000\u6422\u0000\u6376\u0000"+
-        "\u3568\u0000\u6375\u6424\u0000\u0000\u0000\u6374"+
-        "\u0000\u3E50\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6378\u6379\u0000\u452B\u0000\u0000\u637A\u0000"+
-        "\u335E\u0000\u0000\u0000\u0000\u3F5A\u4964\u0000"+
-        "\u637C\u0000\u0000\u0000\u4268\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6377\u0000\u637B\u637D\u0000"+
-        "\u0000\u3A7B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6426\u492E\u0000"+
-        "\u4826\u4579\u0000\u365A\u6425\u6423\u0000\u4835"+
-        "\u637E\u435E\u457B\u0000\u457A\u0000\u3A76\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6438\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6428\u0000\u642A"+
-        "\u0000\u0000\u0000\u0000\u642D\u0000\u642E\u0000"+
-        "\u642B\u642C\u0000\u0000\u6429\u6427\u0000\u0000"+
-        "\u0000\u0000\u6421\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4A4F\u3255"+
-        "\u0000\u0000\u0000\u6435\u0000\u6432\u0000\u6437"+
-        "\u0000\u0000\u6436\u0000\u4773\u4C27\u0000\u3B3B"+
-        "\u6430\u6439\u6434\u0000\u6433\u642F\u0000\u6431"+
-        "\u0000\u3449\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u433D\u0000\u0000\u407D\u0000\u0000"+
-        "\u0000\u4822\u0000\u0000\u643E\u0000\u0000\u0000"+
-        "\u4824\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4061\u643B\u0000\u0000\u484F\u0000\u643F\u4A53"+
-        "\u0000\u435B\u0000\u643A\u643C\u0000\u0000\u643D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6440\u0000\u0000"+
-        "\u3C44\u0000\u0000\u0000\u4646\u6445\u6444\u0000"+
-        "\u0000\u6441\u0000\u0000\u0000\u4F36\u0000\u0000"+
-        "\u0000\u0000\u0000\u644A\u0000\u0000\u644E\u644B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6447\u0000\u0000\u0000\u0000\u0000\u0000\u6448"+
-        "\u0000\u0000\u0000\u0000\u0000\u644D\u0000\u0000"+
-        "\u0000\u6442\u5255\u6449\u6443\u0000\u0000\u644C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6452"+
-        "\u0000\u344A\u0000\u644F\u0000\u0000\u0000\u6450"+
-        "\u0000\u0000\u6451\u6454\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6453"+
-        "\u4876\u0000\u0000\u0000\u0000\u6455\u4E7C\u4A6D"+
-        "\u645A\u0000\u0000\u6457\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6456\u4052\u0000\u6459"+
-        "\u645B\u0000\u0000\u0000\u6458\u0000\u645F\u0000"+
-        "\u645C\u0000\u0000\u0000\u0000\u0000\u0000\u645D"+
-        "\u6446\u0000\u0000\u0000\u645E\u6460\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6461\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A46\u0000\u6462\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4C62\u0000"+
-        "\u0000\u364E\u3729\u6463\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A34\u0000\u3F68\u0000\u4C30\u0000\u0000"+
-        "\u6464\u0000\u4E33\u0000\u0000\u4774\u0000\u4146"+
-        "\u4734\u0000\u0000\u3D4D\u0000\u0000\u0000\u3040"+
-        "\u0000\u6469\u6467\u0000\u6465\u3421\u0000\u3E51"+
-        "\u646A\u0000\u0000\u6468\u0000\u6466\u646E\u0000"+
-        "\u0000\u646D\u646C\u646B\u0000\u0000\u0000\u0000"+
-        "\u0000\u646F\u0000\u0000\u0000\u6470\u403A\u0000"+
-        "\u6471\u0000\u6473\u0000\u0000\u6472\u0000\u0000"+
-        "\u0000\u0000\u3852\u0000\u0000\u0000\u4138\u0000"+
-        "\u0000\u0000\u6475\u0000\u0000\u0000\u457C\u0000"+
-        "\u6474\u0000\u0000\u0000\u6476\u0000\u4A35\u416C"+
-        "\u3947\u0000\u6477\u0000\u0000\u0000\u0000\u4E48"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6479"+
-        "\u0000\u0000\u647A\u0000\u647B\u0000\u647C\u0000"+
-        "\u3B65\u0000\u647D\u374F\u0000\u0000\u356A\u0000"+
-        "\u352A\u0000\u6521\u0000\u4C73\u3948\u647E\u0000"+
-        "\u0000\u0000\u6524\u4C66\u0000\u473C\u0000\u0000"+
-        "\u4933\u0000\u0000\u0000\u3D63\u6523\u0000\u3C53"+
-        "\u3949\u3B66\u3569\u4A36\u6522\u0000\u0000\u0000"+
-        "\u4147\u4B42\u3A77\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3B67\u445D\u0000\u6527\u4E5F"+
-        "\u3A59\u0000\u6528\u3F42\u0000\u652A\u0000\u0000"+
-        "\u0000\u3E52\u3A30\u0000\u0000\u0000\u0000\u6529"+
-        "\u0000\u0000\u3D2A\u383E\u4148\u6525\u652B\u0000"+
-        "\u0000\u0000\u0000\u6526\u3750\u0000\u652E\u6532"+
-        "\u376B\u0000\u0000\u0000\u0000\u0000\u652D\u0000"+
-        "\u0000\u0000\u0000\u6536\u0000\u0000\u394A\u0000"+
-        "\u0000\u4D6D\u303C\u6533\u0000\u0000\u356B\u0000"+
-        "\u6530\u0000\u0000\u0000\u0000\u0000\u6531\u0000"+
-        "\u0000\u457D\u652F\u652C\u0000\u3328\u4064\u0000"+
-        "\u0000\u3828\u0000\u0000\u0000\u6538\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6535\u0000\u0000\u0000\u0000\u0000\u6537"+
-        "\u0000\u0000\u0000\u6534\u0000\u0000\u0000\u0000"+
-        "\u0000\u3751\u4233\u6539\u416E\u0000\u0000\u6546"+
-        "\u0000\u0000\u6542\u653C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6540\u3C7A\u305D\u653B\u6543"+
-        "\u6547\u394B\u4C56\u0000\u4456\u653D\u0000\u0000"+
-        "\u6545\u0000\u653A\u433E\u0000\u653F\u303D\u4C4A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u653E"+
-        "\u0000\u0000\u365B\u486C\u0000\u0000\u0000\u416D"+
-        "\u0000\u4E50\u3D6F\u0000\u0000\u656E\u0000\u0000"+
-        "\u6548\u0000\u407E\u0000\u6544\u6549\u654B\u0000"+
-        "\u4479\u654E\u0000\u0000\u654A\u0000\u0000\u0000"+
-        "\u4A54\u344B\u0000\u0000\u4C4B\u0000\u0000\u305E"+
-        "\u0000\u0000\u654D\u0000\u4E7D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u654C\u0000\u0000\u0000\u0000"+
-        "\u0000\u316F\u0000\u0000\u466C\u654F\u0000\u0000"+
-        "\u0000\u6556\u6550\u6557\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6553\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u477B\u0000\u0000\u3C4A\u6555"+
-        "\u0000\u6552\u6558\u6551\u0000\u0000\u3D44\u0000"+
-        "\u0000\u0000\u0000\u4B25\u0000\u0000\u3D4C\u0000"+
-        "\u0000\u6554\u6560\u0000\u0000\u655C\u0000\u655F"+
-        "\u0000\u655D\u6561\u655B\u0000\u6541\u4053\u0000"+
-        "\u0000\u484B\u0000\u655E\u0000\u0000\u6559\u0000"+
-        "\u0000\u0000\u4121\u3752\u0000\u3D2B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3F25\u4136\u6564\u0000"+
-        "\u0000\u6566\u6567\u0000\u0000\u6563\u6565\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u655A\u6562"+
-        "\u0000\u656A\u6569\u0000\u0000\u4B7A\u0000\u0000"+
-        "\u372B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6568\u0000\u656C\u656B\u656F\u0000\u6571"+
-        "\u0000\u0000\u3B3C\u656D\u0000\u0000\u0000\u0000"+
-        "\u6572\u6573\u0000\u0000\u6574\u0000\u657A\u453B"+
-        "\u6576\u0000\u6575\u6577\u6578\u0000\u6579\u0000"+
-        "\u0000\u0000\u0000\u657B\u657C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u344C\u0000"+
-        "\u657D\u0000\u657E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6621\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6622\u6623\u6624\u0000"+
-        "\u6625\u6626\u0000\u0000\u6628\u6627\u0000\u0000"+
-        "\u6629\u0000\u0000\u0000\u0000\u0000\u0000\u662A"+
-        "\u662B\u0000\u0000\u0000\u0000\u0000\u0000\u662E"+
-        "\u662C\u662D\u3A61\u3753\u0000\u0000\u4356\u0000"+
-        "\u4833\u0000\u3D70\u0000\u0000\u474D\u0000\u486D"+
-        "\u662F\u586D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6630\u6632\u0000\u4D65\u6631\u6634"+
-        "\u6633\u0000\u4D53\u0000\u6635\u0000\u487E\u0000"+
-        "\u0000\u0000\u0000\u0000\u6636\u0000\u0000\u0000"+
-        "\u0000\u0000\u6639\u0000\u0000\u6638\u6637\u0000"+
-        "\u0000\u0000\u0000\u663A\u3732\u0000\u0000\u0000"+
-        "\u4122\u3541\u0000\u0000\u0000\u0000\u663E\u663B"+
-        "\u0000\u0000\u663C\u0000\u0000\u0000\u663F\u0000"+
-        "\u6640\u663D\u0000\u0000\u0000\u3129\u0000\u0000"+
-        "\u0000\u3227\u0000\u0000\u0000\u6642\u6643\u0000"+
-        "\u0000\u0000\u6644\u0000\u4D62\u0000\u0000\u0000"+
-        "\u0000\u0000\u3D2C\u0000\u6646\u6645\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3F69\u6647\u0000\u0000\u0000\u0000\u6648\u0000"+
-        "\u0000\u6649\u0000\u3465\u0000\u0000\u0000\u0000"+
-        "\u344D\u0000\u0000\u664A\u0000\u0000\u0000\u0000"+
-        "\u0000\u664B\u0000\u4B5D\u4D63\u0000\u0000\u0000"+
-        "\u4D54\u4F37\u0000\u394D\u664E\u3C54\u664D\u0000"+
-        "\u0000\u0000\u0000\u664F\u3C29\u0000\u0000\u0000"+
-        "\u4251\u0000\u6650\u0000\u0000\u394C\u0000\u4C57"+
-        "\u6651\u6652\u0000\u0000\u6653\u0000\u0000\u0000"+
-        "\u0000\u6654\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6655\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3C2A\u0000\u0000\u4C6D\u0000"+
-        "\u0000\u0000\u0000\u6657\u0000\u433F\u0000\u6656"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6659\u0000"+
-        "\u0000\u0000\u6658\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u665A\u0000\u0000\u0000\u403B\u0000"+
-        "\u665B\u0000\u665C\u0000\u0000\u0000\u4A39\u665D"+
-        "\u0000\u416F\u665E\u0000\u0000\u0000\u0000\u0000"+
-        "\u665F\u0000\u0000\u0000\u0000\u0000\u0000\u4E7E"+
-        "\u6662\u0000\u6661\u6660\u4430\u0000\u6663\u3F26"+
-        "\u0000\u6664\u0000\u0000\u0000\u6665\u4F38\u6666"+
-        "\u0000\u0000\u0000\u0000\u6667\u6669\u6668\u4825"+
-        "\u0000\u4679\u0000\u4F3E\u4829\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u666B\u0000\u0000\u3E53\u0000"+
-        "\u492A\u0000\u666C\u666A\u0000\u344E\u0000\u0000"+
-        "\u0000\u3854\u3B68\u0000\u0000\u486E\u0000\u0000"+
-        "\u0000\u382A\u4B43\u0000\u666F\u666D\u0000\u394E"+
-        "\u0000\u394F\u3069\u0000\u3A68\u0000\u0000\u0000"+
-        "\u0000\u0000\u4759\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u305F\u6674\u0000\u4340\u0000"+
-        "\u0000\u0000\u0000\u0000\u4758\u0000\u425B\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6676\u0000"+
-        "\u0000\u6672\u6675\u6670\u0000\u6673\u4B26\u0000"+
-        "\u0000\u3855\u0000\u0000\u307D\u6671\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6678"+
-        "\u0000\u6679\u0000\u0000\u4639\u0000\u0000\u0000"+
-        "\u363B\u0000\u0000\u0000\u6726\u473D\u0000\u0000"+
-        "\u0000\u0000\u3B69\u0000\u0000\u363C\u4048\u4F46"+
-        "\u4C2E\u6677\u4054\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3553\u667A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u667C\u0000\u0000\u0000\u0000"+
-        "\u0000\u667B\u0000\u0000\u0000\u0000\u0000\u667D"+
-        "\u0000\u4326\u0000\u473E\u0000\u0000\u0000\u0000"+
-        "\u0000\u4431\u0000\u0000\u0000\u0000\u6723\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6722\u0000"+
-        "\u0000\u0000\u0000\u667E\u0000\u0000\u3F55\u0000"+
-        "\u4965\u6725\u0000\u6724\u3950\u4F53\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6735"+
-        "\u0000\u0000\u0000\u0000\u0000\u6729\u672A\u0000"+
-        "\u0000\u0000\u0000\u3C70\u0000\u0000\u6728\u0000"+
-        "\u3978\u6727\u0000\u0000\u672B\u0000\u0000\u0000"+
-        "\u4432\u4A22\u4123\u0000\u0000\u0000\u0000\u425C"+
-        "\u672F\u0000\u6730\u672C\u0000\u0000\u0000\u0000"+
-        "\u672D\u0000\u672E\u0000\u0000\u0000\u0000\u3951"+
-        "\u0000\u0000\u0000\u6736\u0000\u6732\u0000\u0000"+
-        "\u0000\u0000\u4966\u0000\u4B6C\u4928\u0000\u0000"+
-        "\u6731\u0000\u0000\u6734\u6733\u0000\u0000\u0000"+
-        "\u4B44\u6737\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6738\u0000\u0000\u4137\u0000\u6739\u0000\u0000"+
-        "\u673B\u0000\u673F\u0000\u0000\u673C\u673A\u473F"+
-        "\u673D\u0000\u673E\u0000\u0000\u0000\u3232\u0000"+
-        "\u6745\u6740\u0000\u0000\u0000\u6741\u0000\u0000"+
-        "\u0000\u6742\u0000\u4221\u0000\u0000\u0000\u0000"+
-        "\u6744\u6743\u6746\u0000\u0000\u0000\u0000\u6747"+
-        "\u6748\u0000\u0000\u3F43\u0000\u3269\u0000\u6749"+
-        "\u4E57\u0000\u3C2B\u0000\u0000\u3D2D\u0000\u0000"+
-        "\u0000\u0000\u0000\u3B6A\u4357\u0000\u0000\u0000"+
-        "\u0000\u0000\u674A\u674B\u3131\u0000\u674C\u0000"+
-        "\u0000\u674D\u674E\u0000\u0000\u674F\u0000\u6750"+
-        "\u363D\u5A2A\u6751\u0000\u4065\u6752\u3C4B\u0000"+
-        "\u6753\u0000\u5030\u0000\u0000\u0000\u6754\u4A5E"+
-        "\u345C\u0000\u0000\u4124\u3D58\u0000\u4971\u3D2E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6755\u3952\u6756\u484C\u0000\u6764\u0000"+
-        "\u0000\u0000\u0000\u6758\u0000\u4249\u4775\u383F"+
-        "\u6757\u4125\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6759\u0000\u0000\u0000\u0000\u0000\u0000\u447A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u675B\u675A\u675D\u0000\u0000\u675C\u0000\u675E"+
-        "\u0000\u0000\u6760\u0000\u675F\u0000\u344F\u0000"+
-        "\u6761\u0000\u6762\u6763\u0000\u0000\u3A31\u4E49"+
-        "\u0000\u6765\u3F27\u0000\u0000\u0000\u3170\u6766"+
-        "\u6767\u0000\u0000\u0000\u0000\u0000\u6768\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3072\u0000\u6769\u0000\u0000"+
-        "\u0000\u0000\u676A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4967\u0000\u0000\u0000\u3C47\u0000\u676C"+
-        "\u0000\u0000\u0000\u0000\u0000\u3329\u3032\u0000"+
-        "\u0000\u0000\u0000\u676B\u676E\u474E\u0000\u3F44"+
-        "\u0000\u3256\u0000\u4B27\u0000\u0000\u0000\u0000"+
-        "\u375D\u365C\u0000\u676D\u0000\u326A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3423\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3171\u6772\u4E6A\u425D\u0000\u0000\u4944"+
-        "\u0000\u677E\u0000\u3257\u677C\u0000\u677A\u6771"+
-        "\u0000\u676F\u0000\u6770\u0000\u3C63\u366C\u4377"+
-        "\u0000\u0000\u0000\u4651\u0000\u0000\u0000\u0000"+
-        "\u0000\u3151\u0000\u6774\u6773\u0000\u0000\u0000"+
-        "\u0000\u6779\u6775\u6778\u0000\u0000\u0000\u0000";
-
-    private final static String innerIndex4=
-        "\u0000\u0000\u4C50\u6777\u3258\u337D\u677B\u0000"+
-        "\u0000\u677D\u0000\u0000\u0000\u0000\u3754\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6823\u682C"+
-        "\u682D\u0000\u0000\u0000\u302B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6834\u0000\u0000\u0000\u0000"+
-        "\u3071\u0000\u0000\u682B\u0000\u0000\u0000\u682A"+
-        "\u0000\u6825\u6824\u0000\u6822\u6821\u4363\u0000"+
-        "\u427B\u6827\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6826\u0000\u0000\u0000\u0000\u6829\u0000\u0000"+
-        "\u0000\u4170\u3755\u0000\u0000\u0000\u0000\u3141"+
-        "\u6828\u0000\u3953\u0000\u0000\u0000\u0000\u0000"+
-        "\u4171\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u683A\u0000\u683B\u0000\u3259"+
-        "\u0000\u0000\u0000\u322E\u6838\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u682E\u0000\u6836"+
-        "\u0000\u683D\u6837\u0000\u0000\u0000\u6835\u0000"+
-        "\u0000\u0000\u0000\u6776\u0000\u0000\u6833\u0000"+
-        "\u0000\u0000\u682F\u0000\u0000\u0000\u3450\u6831"+
-        "\u683C\u0000\u6832\u0000\u0000\u0000\u0000\u0000"+
-        "\u683E\u0000\u6830\u477C\u0000\u0000\u0000\u0000"+
-        "\u0000\u4D69\u0000\u0000\u0000\u6839\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u684F\u0000\u0000"+
-        "\u0000\u6847\u0000\u0000\u0000\u3F7B\u0000\u0000"+
-        "\u0000\u0000\u3546\u0000\u365D\u0000\u6842\u0000"+
-        "\u0000\u0000\u0000\u325B\u0000\u0000\u3E54\u0000"+
-        "\u6845\u0000\u0000\u0000\u3A5A\u0000\u0000\u4551"+
-        "\u684A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A6E\u0000\u6841\u0000\u0000\u0000\u325A"+
-        "\u3856\u4929\u684B\u0000\u683F\u0000\u0000\u6848"+
-        "\u0000\u0000\u0000\u6852\u0000\u6843\u0000\u0000"+
-        "\u0000\u0000\u0000\u6844\u463A\u0000\u0000\u6849"+
-        "\u0000\u0000\u0000\u6846\u4B28\u684C\u3060\u0000"+
-        "\u0000\u0000\u0000\u6840\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u684E\u0000\u684D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u476B\u6854\u0000\u685F\u0000\u0000\u0000"+
-        "\u0000\u337E\u0000\u0000\u0000\u6862\u0000\u0000"+
-        "\u6850\u0000\u0000\u0000\u6855\u4D6E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u685E\u0000"+
-        "\u0000\u4D55\u0000\u0000\u0000\u0000\u4E2A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4378"+
-        "\u0000\u0000\u0000\u336B\u0000\u0000\u0000\u0000"+
-        "\u0000\u4972\u6864\u4621\u0000\u0000\u3031\u0000"+
-        "\u0000\u685D\u0000\u6859\u4172\u6853\u685B\u6860"+
-        "\u0000\u472C\u0000\u0000\u0000\u302A\u0000\u6858"+
-        "\u0000\u6861\u4978\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u685C\u0000\u6857\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3E55\u0000\u0000\u0000\u0000"+
-        "\u3D2F\u0000\u0000\u0000\u3C2C\u0000\u0000\u0000"+
-        "\u0000\u4C58\u0000\u0000\u4947\u0000\u0000\u6867"+
-        "\u0000\u6870\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u685A\u0000\u0000"+
-        "\u0000\u0000\u3377\u0000\u0000\u0000\u0000\u0000"+
-        "\u3E78\u6865\u0000\u686A\u4173\u0000\u0000\u6866"+
-        "\u0000\u686D\u0000\u0000\u435F\u0000\u686E\u0000"+
-        "\u0000\u4D56\u6863\u3338\u0000\u6869\u0000\u0000"+
-        "\u686C\u4C2C\u0000\u0000\u0000\u0000\u686F\u0000"+
-        "\u0000\u6868\u686B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4B29\u0000\u4F21\u0000"+
-        "\u0000\u0000\u0000\u0000\u6873\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u687A\u0000\u0000\u6872"+
-        "\u3C43\u0000\u0000\u0000\u0000\u0000\u6851\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A4E\u0000\u4C22\u6879\u6878\u0000\u6874"+
-        "\u6875\u0000\u3136\u0000\u0000\u0000\u0000\u6877"+
-        "\u0000\u6871\u0000\u0000\u0000\u0000\u4455\u0000"+
-        "\u0000\u0000\u0000\u0000\u6876\u307E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4222\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4A43\u0000\u0000"+
-        "\u687B\u6921\u0000\u4859\u0000\u0000\u0000\u0000"+
-        "\u687E\u3E56\u3C49\u6923\u0000\u0000\u363E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6924\u0000\u4979"+
-        "\u687D\u0000\u6856\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u687C\u0000\u0000\u0000\u0000"+
-        "\u4F4F\u4622\u4973\u0000\u0000\u692B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6931"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6932\u0000"+
-        "\u6925\u0000\u0000\u0000\u4776\u0000\u0000\u692F"+
-        "\u6927\u0000\u6929\u0000\u0000\u0000\u0000\u0000"+
-        "\u6933\u6928\u0000\u0000\u692C\u0000\u0000\u3172"+
-        "\u0000\u4665\u0000\u692D\u6930\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6926\u0000\u4126\u0000"+
-        "\u692A\u3B27\u3F45\u3730\u4C74\u0000\u4C79\u3D72"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6937\u6935\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4F4E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6934\u0000\u0000\u0000\u4D75\u0000\u6936"+
-        "\u6938\u0000\u0000\u0000\u0000\u6939\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u693C\u693A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4623\u693B\u0000\u0000"+
-        "\u0000\u484D\u692E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3D73"+
-        "\u0000\u693D\u6942\u4174\u0000\u0000\u6941\u0000"+
-        "\u0000\u0000\u6922\u0000\u0000\u0000\u6943\u4149"+
-        "\u0000\u0000\u693E\u6940\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u693F\u0000\u0000\u5D31\u5D22"+
-        "\u0000\u0000\u6945\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6944\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4D76\u0000\u623C"+
-        "\u6946\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6947"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6948\u3857\u0000"+
-        "\u3554\u0000\u0000\u0000\u694A\u515D\u0000\u0000"+
-        "\u0000\u0000\u3575\u0000\u4E3A\u0000\u3673\u694B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u694C"+
-        "\u0000\u0000\u0000\u436E\u0000\u0000\u0000\u0000"+
-        "\u0000\u694D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u467A\u0000\u303A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3263\u6952\u6953\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u694E\u0000\u3B3D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u694F\u4742\u0000\u0000\u0000"+
-        "\u0000\u6950\u6951\u695B\u0000\u0000\u0000\u6955"+
-        "\u6958\u0000\u0000\u0000\u0000\u0000\u6954\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6956\u0000\u6957\u3C58"+
-        "\u0000\u6959\u0000\u4341\u0000\u3756\u3342\u0000"+
-        "\u0000\u0000\u0000\u0000\u695C\u0000\u0000\u0000"+
-        "\u0000\u333F\u0000\u6961\u0000\u0000\u695D\u6960"+
-        "\u0000\u0000\u0000\u0000\u483A\u0000\u0000\u0000"+
-        "\u0000\u695E\u0000\u0000\u695F\u4948\u485A\u6962"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u427D\u696C\u0000\u6968\u0000\u0000\u326B\u0000"+
-        "\u6966\u0000\u4B2A\u6967\u0000\u0000\u6964\u0000"+
-        "\u6965\u696A\u696D\u0000\u0000\u696B\u0000\u0000"+
-        "\u0000\u6969\u6963\u0000\u0000\u0000\u0000\u0000"+
-        "\u4358\u0000\u6974\u0000\u4C2A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6972\u0000\u0000"+
-        "\u0000\u6973\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u696E\u0000\u0000\u6970"+
-        "\u0000\u0000\u0000\u6971\u0000\u0000\u0000\u696F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4066\u0000\u4F39\u6978\u0000\u6979\u0000"+
-        "\u0000\u0000\u0000\u6A21\u0000\u3F2A\u0000\u697B"+
-        "\u0000\u697E\u0000\u0000\u0000\u0000\u0000\u6976"+
-        "\u6975\u0000\u0000\u6A22\u0000\u0000\u325C\u0000"+
-        "\u697C\u0000\u6A23\u0000\u0000\u0000\u697D\u0000"+
-        "\u0000\u0000\u0000\u0000\u697A\u0000\u4433\u0000"+
-        "\u6977\u0000\u0000\u0000\u0000\u0000\u0000\u4768"+
-        "\u0000\u0000\u6A27\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4D3B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6A26"+
-        "\u0000\u0000\u6A25\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6A2E\u0000\u0000\u0000\u6A28"+
-        "\u0000\u0000\u0000\u6A30\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D66\u6A33\u0000\u6A2A\u0000\u0000"+
-        "\u6A2B\u0000\u0000\u0000\u6A2F\u0000\u6A32\u6A31"+
-        "\u0000\u0000\u0000\u6A29\u0000\u0000\u0000\u0000"+
-        "\u6A2C\u0000\u6A3D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6A36\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6A34"+
-        "\u0000\u0000\u6A35\u0000\u0000\u0000\u6A3A\u6A3B"+
-        "\u0000\u332A\u0000\u3542\u0000\u0000\u6A39\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A24\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A38\u6A3C\u6A37"+
-        "\u0000\u6A3E\u0000\u0000\u0000\u6A40\u6A3F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6A42\u6A41\u695A\u0000\u0000\u0000\u6A46"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6A43\u0000\u0000\u0000\u0000\u6A44\u0000"+
-        "\u0000\u6A45\u0000\u6A47\u0000\u0000\u0000\u0000"+
-        "\u376C\u0000\u6A49\u0000\u6A48\u0000\u3D30\u0000"+
-        "\u0000\u0000\u0000\u0000\u3954\u5E27\u0000\u0000"+
-        "\u0000\u0000\u6A4A\u3D51\u0000\u0000\u0000\u3339"+
-        "\u0000\u6A4B\u0000\u3152\u0000\u3E57\u6A4C\u0000"+
-        "\u0000\u3955\u6A4D\u3061\u0000\u0000\u0000\u0000"+
-        "\u493D\u0000\u0000\u6A4E\u0000\u0000\u0000\u0000"+
-        "\u3F6A\u0000\u6A55\u0000\u0000\u6A52\u0000\u436F"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A53\u6A50\u365E"+
-        "\u0000\u6A4F\u6A56\u0000\u0000\u0000\u0000\u0000"+
-        "\u3736\u0000\u0000\u425E\u0000\u6A5C\u0000\u0000"+
-        "\u0000\u0000\u6A58\u0000\u0000\u0000\u4235\u6A57"+
-        "\u0000\u6A5A\u0000\u0000\u0000\u0000\u6A51\u0000"+
-        "\u0000\u0000\u6A5B\u0000\u6A5D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u486F\u0000\u0000\u6A59\u0000"+
-        "\u6A5E\u6A60\u0000\u0000\u3853\u6A54\u0000\u3041"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6A5F"+
-        "\u0000\u3A5B\u4E76\u6A61\u6A62\u4175\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4E22"+
-        "\u0000\u0000\u0000\u0000\u6A63\u4D35\u0000\u0000"+
-        "\u6A64\u6A65\u0000\u0000\u4A64\u6A66\u0000\u3A40"+
-        "\u0000\u4E23\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6A6B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6A6C\u3E58\u6A6A\u0000\u0000\u0000"+
-        "\u4D67\u6A67\u0000\u0000\u6A69\u403D\u3F7E\u0000"+
-        "\u0000\u0000\u6A68\u0000\u6A6D\u0000\u0000\u4A23"+
-        "\u0000\u0000\u6A6F\u0000\u6A6E\u0000\u0000\u0000"+
-        "\u336C\u0000\u4B2B\u6A70\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A7C\u6A72\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A73\u0000\u0000"+
-        "\u0000\u0000\u6A74\u6A75\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6A79\u0000"+
-        "\u6A7A\u0000\u0000\u6A78\u0000\u0000\u0000\u0000"+
-        "\u0000\u6A76\u0000\u6A71\u6A77\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6A7B\u7037\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3228\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6A7E\u365F"+
-        "\u6A7D\u0000\u0000\u0000\u6B22\u0000\u6B21\u0000"+
-        "\u0000\u0000\u6B24\u0000\u0000\u6B23\u0000\u6B25"+
-        "\u0000\u0000\u3D31\u0000\u6B26\u0000\u0000\u6B27"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6B28\u403E"+
-        "\u0000\u4D57\u0000\u6B29\u0000\u0000\u4A24\u4746"+
-        "\u6B2A\u0000\u6B2B\u382B\u0000\u0000\u0000\u352C"+
-        "\u0000\u0000\u0000\u6B2C\u0000\u0000\u3B6B\u4741"+
-        "\u6B2D\u0000\u3350\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6B2E\u0000\u0000\u0000\u0000\u6B30\u4D77"+
-        "\u0000\u6B2F\u3F46\u0000\u6B31\u0000\u0000\u6B32"+
-        "\u0000\u0000\u6B33\u3451\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6B34\u0000\u0000\u6B35\u0000\u6B36"+
-        "\u6B37\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3351\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6B38\u0000\u6B39\u6B3A\u0000\u0000"+
-        "\u0000\u0000\u0000\u3272\u0000\u0000\u3F28\u6B3B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6B3C\u0000\u0000\u0000"+
-        "\u6B3D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3840\u0000\u447B\u6B3E\u0000\u0000\u0000\u0000"+
-        "\u3757\u0000\u3F56\u0000\u6B41\u0000\u4624\u0000"+
-        "\u6B40\u0000\u0000\u3731\u0000\u0000\u6B3F\u4277"+
-        "\u352D\u0000\u0000\u6B42\u0000\u6B43\u0000\u3E59"+
-        "\u0000\u0000\u0000\u376D\u0000\u6B44\u0000\u0000"+
-        "\u0000\u0000\u4B2C\u0000\u0000\u405F\u0000\u0000"+
-        "\u0000\u3576\u0000\u4C75\u414A\u0000\u6B45\u0000"+
-        "\u0000\u0000\u3F47\u4370\u3E5A\u0000\u0000\u0000"+
-        "\u0000\u6B46\u0000\u0000\u0000\u0000\u6B49\u0000"+
-        "\u6B4A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3A3E\u4242\u6B48\u0000\u3E5B\u493E\u0000\u0000"+
-        "\u0000\u0000\u0000\u6B47\u0000\u0000\u3B6C\u0000"+
-        "\u3153\u0000\u6B4E\u3758\u0000\u0000\u3B6E\u0000"+
-        "\u0000\u3B6D\u0000\u4F4D\u6B4D\u6B4C\u4127\u0000"+
-        "\u354D\u4F43\u333A\u3E5C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6B4B\u0000\u0000\u0000"+
-        "\u0000\u0000\u6B50\u0000\u6B51\u6B4F\u0000\u3858"+
-        "\u0000\u4D40\u0000\u0000\u3B6F\u4727\u0000\u0000"+
-        "\u0000\u6B54\u0000\u4040\u0000\u4342\u0000\u0000"+
-        "\u4D36\u0000\u6B57\u0000\u0000\u0000\u386C\u0000"+
-        "\u403F\u6B53\u0000\u6B58\u386D\u6B55\u6B56\u0000"+
-        "\u6B52\u0000\u0000\u0000\u4062\u4649\u0000\u0000"+
-        "\u432F\u0000\u325D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4870\u0000\u0000\u3543\u0000\u0000\u4434"+
-        "\u0000\u0000\u6B5B\u0000\u6B59\u0000\u0000\u434C"+
-        "\u0000\u0000\u0000\u4041\u3452\u6B5A\u0000\u3F5B"+
-        "\u0000\u0000\u4E4A\u0000\u0000\u0000\u4F40\u0000"+
-        "\u0000\u0000\u6B5C\u6B67\u4435\u0000\u6B66\u0000"+
-        "\u6B63\u6B6B\u6B64\u0000\u6B60\u0000\u447C\u6B5F"+
-        "\u0000\u0000\u0000\u6B5D\u0000\u4D21\u3B70\u0000"+
-        "\u0000\u6B61\u0000\u6B5E\u0000\u0000\u0000\u6B65"+
-        "\u3D74\u0000\u3841\u0000\u0000\u0000\u427A\u0000"+
-        "\u4B45\u315A\u3062\u0000\u4625\u0000\u0000\u6B69"+
-        "\u0000\u0000\u0000\u0000\u6B68\u0000\u4666\u0000"+
-        "\u6B6D\u0000\u0000\u0000\u6B62\u0000\u6B6C\u6B6E"+
-        "\u0000\u382C\u6B6A\u3956\u0000\u3C55\u0000\u0000"+
-        "\u6B6F\u4D58\u0000\u0000\u0000\u0000\u6B72\u0000"+
-        "\u6B75\u0000\u0000\u6B73\u4935\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6B70\u0000\u0000\u0000\u0000"+
-        "\u0000\u3660\u0000\u0000\u0000\u0000\u6B74\u0000"+
-        "\u0000\u6B76\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6B7A\u0000\u0000\u6B77\u0000\u6B79\u6B78"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6B7B\u0000"+
-        "\u3C31\u0000\u6B7D\u6B7C\u4968\u0000\u0000\u6C21"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3759\u0000"+
-        "\u0000\u0000\u0000\u6B7E\u6C22\u0000\u0000\u6C23"+
-        "\u3544\u6641\u3E79\u0000\u6C24\u0000\u0000\u386E"+
-        "\u0000\u0000\u0000\u0000\u0000\u6C25\u0000\u0000"+
-        "\u6C26\u0000\u0000\u3B3E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5A4E\u0000\u6C27\u0000\u6C28\u0000"+
-        "\u3D32\u0000\u6C29\u6C2A\u0000\u0000\u6C2B\u0000"+
-        "\u0000\u6C2C\u6C2D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u432B"+
-        "\u0000\u0000\u6C2E\u0000\u0000\u0000\u0000\u6C30"+
-        "\u0000\u6C2F\u0000\u0000\u0000\u0000\u4626\u0000"+
-        "\u6C31\u0000\u4B2D\u0000\u6C32\u0000\u6C33\u0000"+
-        "\u6C34\u0000\u0000\u0000\u0000\u6C35\u0000\u0000"+
-        "\u0000\u0000\u465A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3E5D\u6C36\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u396B\u502E\u6C37\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6C38\u493F\u6C39\u0000\u6C41\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C3A\u0000\u0000\u6C3C\u0000\u0000"+
-        "\u0000\u6C3B\u6C3D\u0000\u4B46\u6C3E\u6C3F\u0000"+
-        "\u0000\u0000\u0000\u0000\u6C40\u0000\u0000\u0000"+
-        "\u6C42\u0000\u0000\u0000\u0000\u332D\u4467\u0000"+
-        "\u4969\u3A62\u3957\u0000\u0000\u0000\u0000\u494F"+
-        "\u325F\u484E\u6C45\u3453\u4055\u6C44\u6C49\u4379"+
-        "\u4C63\u0000\u6C47\u6C48\u352E\u0000\u6C4A\u4763"+
-        "\u425F\u0000\u0000\u4871\u453D\u6C46\u0000\u4B47"+
-        "\u326C\u6C4C\u4F28\u4442\u4F45\u0000\u0000\u3B71"+
-        "\u6C4B\u0000\u4231\u0000\u0000\u6C5C\u4128\u0000"+
-        "\u0000\u4678\u0000\u4950\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C4F\u3B3F\u3B72\u0000\u3E5E\u0000"+
-        "\u4765\u0000\u382D\u6C4E\u6C4D\u0000\u496A\u0000"+
-        "\u0000\u0000\u3C41\u0000\u0000\u4552\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C51\u6C52\u3958\u6C50\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6C53\u6C54\u0000\u6C56"+
-        "\u4223\u0000\u6C55\u3466\u0000\u6C58\u0000\u6C57"+
-        "\u6C59\u0000\u0000\u6C5B\u6C5D\u0000\u6C5E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4056\u0000\u3C4F\u6C5F"+
-        "\u0000\u0000\u0000\u3352\u0000\u6C60\u0000\u0000"+
-        "\u4176\u6C61\u0000\u6C62\u496B\u0000\u0000\u352F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6C63\u0000\u0000\u0000\u4436\u0000\u0000"+
-        "\u0000\u0000\u315B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6C64\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3C71\u0000\u0000\u0000\u0000"+
-        "\u3F76\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u422D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C67\u0000\u0000\u0000\u6C66\u0000"+
-        "\u0000\u0000\u6C65\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6C6D\u6C6B\u0000\u0000\u6C68"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6C6A\u0000"+
-        "\u0000\u0000\u6C69\u6C6C\u0000\u3577\u0000\u6C70"+
-        "\u0000\u4057\u0000\u6C71\u0000\u0000\u0000\u0000"+
-        "\u3859\u0000\u6C6E\u6C6F\u0000\u0000\u0000\u4F29"+
-        "\u0000\u0000\u0000\u4437\u0000\u4129\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6C72\u0000\u0000\u6C75"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6C73\u6C74\u4D59\u0000\u0000\u0000\u0000\u4627"+
-        "\u6C78\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6C76\u6C77\u6C79"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D29\u0000\u0000\u0000\u0000\u0000"+
-        "\u6C7C\u0000\u0000\u0000\u6C7D\u6C7B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C7A\u0000\u447D\u0000\u0000\u6D21"+
-        "\u6D25\u6D22\u6C7E\u0000\u6D23\u0000\u0000\u0000"+
-        "\u6D24\u0000\u0000\u0000\u0000\u6D2B\u0000\u0000"+
-        "\u0000\u6D26\u0000\u0000\u0000\u0000\u0000\u4058"+
-        "\u6D28\u0000\u0000\u6D2A\u6D27\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D2D\u0000\u3D33\u0000\u6D2C\u0000"+
-        "\u0000\u0000\u0000\u0000\u6D2E\u0000\u0000\u0000"+
-        "\u0000\u6D2F\u0000\u0000\u6D32\u6D31\u0000\u6D30"+
-        "\u0000\u0000\u6D34\u6D33\u0000\u4C76\u0000\u0000"+
-        "\u0000\u6D36\u0000\u6D35\u6D37\u0000\u0000\u0000"+
-        "\u0000\u6D38\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6D3A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D39\u3F48\u6D3B\u0000\u0000\u366D"+
-        "\u6D3C\u6D3E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6D3F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6D40\u6D3D\u0000"+
-        "\u6D41\u0000\u3C56\u6D42\u3530\u3733\u0000\u0000"+
-        "\u0000\u0000\u382E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6D43\u0000\u0000\u0000\u4670"+
-        "\u0000\u0000\u453E\u6D44\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6D47\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3C34\u0000\u0000\u6D46\u6D45\u375A\u6D48\u0000"+
-        "\u0000\u0000\u0000\u3353\u0000\u6D4A\u0000\u0000"+
-        "\u0000\u3A5C\u6D49\u0000\u6D52\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D4C\u6D4E\u4A65\u6D4B\u0000\u0000"+
-        "\u0000\u6D4D\u0000\u6D51\u6D4F\u3531\u0000\u6D50"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6D53\u0000"+
-        "\u0000\u475A\u4E58\u0000\u0000\u0000\u0000\u3D34"+
-        "\u0000\u0000\u0000\u6D54\u0000\u0000\u0000\u0000"+
-        "\u4D22\u6D56\u0000\u6D55\u0000\u0000\u6D59\u4D41"+
-        "\u0000\u0000\u6D58\u0000\u336D\u6D57\u6D5C\u0000"+
-        "\u0000\u6D5B\u0000\u0000\u6D5A\u4532\u6D5D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6D5E"+
-        "\u0000\u0000\u0000\u0000\u6D5F\u0000\u0000\u396C"+
-        "\u0000\u3725\u6D60\u6D61\u6D62\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3F49\u6D63\u0000\u3C2D\u6D64"+
-        "\u0000\u0000\u0000\u6D65\u0000\u0000\u0000\u5221"+
-        "\u517E\u0000\u0000\u0000\u0000\u6D66\u6570\u6D67"+
-        "\u4324\u3F2B\u4740\u0000\u0000\u0000\u0000\u6D68"+
-        "\u0000\u0000\u4A55\u4454\u397E\u0000\u0000\u4329"+
-        "\u0000\u0000\u312A\u0000\u4B78\u3F57\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u375E\u0000"+
-        "\u0000\u3661\u0000\u0000\u4A56\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D69\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D6B\u0000\u0000\u6D6A\u3260\u0000"+
-        "\u0000\u4676\u6D6C\u4777\u0000\u4533\u0000\u6D6D"+
-        "\u3D52\u0000\u0000\u0000\u6D6F\u0000\u0000\u4C42"+
-        "\u6D7E\u6D71\u6D72\u0000\u0000\u4449\u0000\u0000"+
-        "\u4260\u4177\u0000\u4628\u0000\u6D70\u3555\u0000"+
-        "\u0000\u0000\u0000\u6D79\u0000\u6D76\u6E25\u4629"+
-        "\u4360\u6D73\u0000\u447E\u4553\u6D74\u6D78\u3F60"+
-        "\u0000\u4767\u444C\u0000\u0000\u4042\u6D77\u422E"+
-        "\u4224\u6D75\u3029\u4F22\u0000\u0000\u0000\u6D7A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4261\u0000"+
-        "\u0000\u3D35\u3F4A\u0000\u0000\u6D7C\u6D7B\u0000"+
-        "\u306F\u6D7D\u0000\u0000\u492F\u0000\u6E27\u0000"+
-        "\u0000\u465B\u3F6B\u0000\u0000\u4359\u0000\u3678"+
-        "\u0000\u6E26\u4D37\u313F\u0000\u4A57\u3261\u6E21"+
-        "\u6E22\u6E23\u6E24\u463B\u4323\u3063\u6E28\u0000"+
-        "\u6E29\u7423\u0000\u0000\u423D\u0000\u6E2A\u0000"+
-        "\u3173\u414C\u0000\u382F\u0000\u4D5A\u0000\u0000"+
-        "\u6E2B\u452C\u0000\u0000\u0000\u4178\u3C57\u6E2C"+
-        "\u0000\u0000\u6E2F\u0000\u0000\u3D65\u6E2D\u412B"+
-        "\u412A\u0000\u3064\u0000\u4E4B\u6E31\u0000\u4872"+
-        "\u6E33\u6E32\u6E30\u6364\u3454\u0000\u0000\u6D6E"+
-        "\u0000\u6E35\u6E34\u0000\u0000\u0000\u0000\u6E36"+
-        "\u0000\u4D38\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4661\u0000\u0000\u4B2E\u0000"+
-        "\u6E37\u0000\u3C59\u0000\u0000\u0000\u0000\u6E38"+
-        "\u0000\u6E39\u0000\u0000\u0000\u6E3A\u0000\u0000"+
-        "\u4521\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u306A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3959\u0000\u0000\u0000\u4F3A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6E3E\u0000\u0000\u0000\u0000"+
-        "\u0000\u3734\u6E3B\u0000\u6E3C\u0000\u0000\u0000"+
-        "\u4974\u0000\u0000\u0000\u0000\u3354\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4D39\u0000\u363F"+
-        "\u0000\u0000\u0000\u0000\u0000\u4554\u0000\u0000"+
-        "\u0000\u0000\u6E3F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6E40\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6E41\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4522\u0000\u0000"+
-        "\u6E43\u0000\u6E42\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4653\u6E44\u3D36\u3C60\u475B\u4371\u0000"+
-        "\u0000\u0000\u3C72\u0000\u3F6C\u0000\u6E45\u0000"+
-        "\u6E46\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3F5D\u6E47\u0000\u6E48\u0000\u0000"+
-        "\u0000\u6E49\u4D6F\u0000\u3D37\u0000\u0000\u0000"+
-        "\u0000\u0000\u6E4B\u6E4A\u0000\u395A\u0000\u3973"+
-        "\u3B40\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6E4E\u0000\u0000\u0000\u0000\u3D66"+
-        "\u0000\u6E4D\u0000\u6E4C\u0000\u4269\u0000\u0000"+
-        "\u386F\u0000\u4043\u0000\u0000\u0000\u0000\u4830"+
-        "\u0000\u0000\u0000\u0000\u3D39\u0000\u0000\u0000"+
-        "\u0000\u0000\u6E4F\u0000\u3E5F\u0000\u0000\u0000"+
-        "\u0000\u0000\u6E52\u6E50\u0000\u0000\u0000\u6E51"+
-        "\u0000\u0000\u0000\u0000\u6E54\u6E53\u0000\u0000"+
-        "\u3E7A\u0000\u6E55\u0000\u0000\u0000\u0000\u0000"+
-        "\u6E56\u6E57\u0000\u0000\u0000\u0000\u4850\u3A53"+
-        "\u3C61\u6E58\u0000\u6E59\u4E24\u3D45\u4C6E\u4E4C"+
-        "\u6E5A\u3662\u0000\u0000\u0000\u0000\u6E5B\u0000"+
-        "\u4523\u0000\u0000\u6E5E\u3378\u3F4B\u0000\u6E5C"+
-        "\u0000\u6E5D\u0000\u4460\u0000\u0000\u4B55\u367C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6E60\u6E61\u0000"+
-        "\u0000\u0000\u0000\u0000\u6E5F\u0000\u0000\u6E63"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u465F\u3343\u0000"+
-        "\u0000\u6E67\u0000\u0000\u6E64\u6E66\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6E62\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6F4F\u0000\u0000\u6E65\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4E6B\u0000\u0000\u385A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E6F"+
-        "\u0000\u0000\u0000\u0000\u4534\u6E6A\u0000\u0000"+
-        "\u6E6D\u6E6B\u0000\u6E70\u0000\u0000\u0000\u0000"+
-        "\u6E71\u0000\u0000\u0000\u0000\u0000\u0000\u6E69"+
-        "\u0000\u0000\u6E76\u3174\u0000\u0000\u6E68\u0000"+
-        "\u0000\u0000\u482D\u0000\u6E6C\u0000\u3E60\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u395B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4B48\u0000"+
-        "\u3664\u0000\u0000\u3D46\u0000\u463C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u412D\u0000\u6E74\u0000\u6E6E\u6E73\u0000"+
-        "\u4C43\u0000\u4438\u6E75\u6E72\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u412C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E79"+
-        "\u0000\u6E78\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E77"+
-        "\u0000\u0000\u4B2F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3D7B\u0000\u0000\u0000"+
-        "\u0000\u6E7A\u4A5F\u0000\u0000\u3154\u0000\u0000"+
-        "\u0000\u0000\u4946\u4372\u0000\u0000\u0000\u0000"+
-        "\u3578\u0000\u6E7C\u0000\u395D\u0000\u0000\u0000";
-
-    private final static String innerIndex5=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3B2C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E7B"+
-        "\u3F6D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3F6E\u6F21\u6F23\u0000\u0000\u0000\u0000\u0000"+
-        "\u3E7B\u0000\u6F22\u6F24\u0000\u0000\u3653\u0000"+
-        "\u4945\u0000\u0000\u3C62\u4F23\u0000\u6E7E\u3A78"+
-        "\u0000\u0000\u4F3F\u0000\u0000\u6F26\u0000\u0000"+
-        "\u0000\u0000\u6F25\u6F27\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6E7D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4669\u0000\u4555\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4457\u0000\u6F2C\u0000"+
-        "\u0000\u0000\u0000\u4343\u6F28\u0000\u0000\u0000"+
-        "\u6F29\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u372D\u0000\u6F2B\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3830\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6F2A\u0000\u3E61\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3379\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6F30\u0000\u3A3F\u4179"+
-        "\u0000\u0000\u444A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u333B"+
-        "\u0000\u0000\u0000\u0000\u6F2E\u6F2F\u4443\u0000"+
-        "\u6F2D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6F31\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6F37\u0000\u0000\u0000\u0000"+
-        "\u6F3A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6F39\u452D\u0000\u0000\u0000\u0000\u6F32\u6F33"+
-        "\u6F36\u0000\u0000\u0000\u0000\u6F38\u0000\u0000"+
-        "\u0000\u3640\u0000\u0000\u6F3B\u6F35\u0000\u0000"+
-        "\u6F34\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6F3F\u0000\u0000\u0000\u6F40"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6F41\u0000\u0000\u6F3E\u6F3D\u0000\u0000\u0000"+
-        "\u3E62\u462A\u6F3C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6F45\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6F43\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6F44\u6F42\u0000"+
-        "\u4278\u0000\u6F46\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6F47\u0000\u0000\u6F49\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3455\u6F48\u4C7A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6F54\u6F4A\u0000\u0000\u6F4D\u0000"+
-        "\u6F4B\u0000\u6F4C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6F4E\u0000\u0000\u0000\u0000\u0000"+
-        "\u6F50\u0000\u0000\u0000\u0000\u6F51\u0000\u6F52"+
-        "\u0000\u0000\u0000\u0000\u6F55\u6F53\u6F56\u6F58"+
-        "\u0000\u6F57\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4439"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4C67\u0000\u6F59\u412E\u0000\u0000\u0000\u6F5A"+
-        "\u0000\u4A44\u6F5B\u332B\u0000\u0000\u0000\u313C"+
-        "\u0000\u3457\u0000\u3456\u6F5C\u0000\u6F5D\u0000"+
-        "\u6F5E\u6F5F\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6F60\u0000\u3458\u3355\u395E\u4836\u0000\u6F62"+
-        "\u6F61\u0000\u0000\u0000\u0000\u6F63\u0000\u0000"+
-        "\u0000\u0000\u315C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6F66\u0000\u6F65\u6F64\u0000\u6F67\u0000"+
-        "\u0000\u0000\u0000\u6F6A\u0000\u0000\u0000\u3047"+
-        "\u0000\u0000\u6F68\u0000\u6F6C\u6F6B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6F6E\u6F6D\u6F6F\u0000"+
-        "\u462E\u0000\u0000\u0000\u6F70\u0000\u0000\u0000"+
-        "\u0000\u6F71\u6F73\u0000\u0000\u6F72\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u496C\u0000\u0000\u0000"+
-        "\u0000\u6F74\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6F75\u0000\u3A65\u0000\u0000\u0000\u6F76\u6F77"+
-        "\u0000\u0000\u4B49\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u414B\u0000\u0000\u0000\u3024"+
-        "\u424B\u0000\u6F78\u0000\u496D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6F7B\u6F79\u395F\u0000\u6F7A"+
-        "\u3842\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A45\u6F7D\u7021\u6F7E\u7022"+
-        "\u0000\u0000\u3121\u3F58\u3D7C\u3459\u7023\u0000"+
-        "\u0000\u0000\u4766\u0000\u7025\u0000\u0000\u0000"+
-        "\u3122\u0000\u7024\u4444\u0000\u4E4D\u462B\u6F7C"+
-        "\u4E26\u0000\u3831\u0000\u0000\u4D5B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3679\u4E34\u0000"+
-        "\u3728\u0000\u4262\u6721\u0000\u7026\u332C\u3F6F"+
-        "\u0000\u0000\u0000\u0000\u3356\u7028\u0000\u7029"+
-        "\u7027\u3764\u0000\u3A5D\u3E63\u0000\u0000\u0000"+
-        "\u3123\u0000\u0000\u4E59\u0000\u0000\u0000\u702B"+
-        "\u6E2E\u0000\u702A\u0000\u0000\u0000\u0000\u0000"+
-        "\u702E\u702C\u702D\u0000\u702F\u0000\u7030\u4E6C"+
-        "\u7031\u7032\u0000\u4049\u483B\u0000\u0000\u0000"+
-        "\u3F7D\u3467\u0000\u0000\u4D3A\u326D\u3D38\u385B"+
-        "\u0000\u7035\u0000\u7034\u3B73\u7036\u7033\u0000"+
-        "\u0000\u3B28\u0000\u0000\u0000\u703A\u6A2D\u0000"+
-        "\u0000\u5256\u0000\u3F77\u7038\u0000\u0000\u0000"+
-        "\u0000\u0000\u4E25\u4671\u0000\u0000\u0000\u0000"+
-        "\u312B\u0000\u4063\u3C36\u0000\u0000\u0000\u0000"+
-        "\u4A37\u0000\u3140\u0000\u0000\u0000\u4E6D\u4D6B"+
-        "\u0000\u703B\u0000\u4545\u0000\u0000\u0000\u0000"+
-        "\u3C7B\u0000\u0000\u0000\u703C\u0000\u703D\u3F4C"+
-        "\u703E\u0000\u4E6E\u0000\u0000\u7039\u7040\u7042"+
-        "\u0000\u7041\u0000\u703F\u0000\u0000\u7043\u0000"+
-        "\u0000\u7044\u0000\u0000\u417A\u0000\u3262\u0000"+
-        "\u0000\u0000\u0000\u0000\u7045\u0000\u0000\u4C38"+
-        "\u0000\u0000\u7046\u0000\u0000\u0000\u0000\u0000"+
-        "\u7047\u0000\u4F2A\u0000\u0000\u0000\u0000\u0000"+
-        "\u5B31\u7048\u0000\u0000\u0000\u7049\u704A\u0000"+
-        "\u0000\u0000\u704E\u0000\u704B\u0000\u704C\u0000"+
-        "\u704D\u704F\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4044\u0000\u0000\u0000\u4C77\u0000"+
-        "\u0000\u4045\u0000\u0000\u7050\u0000\u4873\u0000"+
-        "\u7051\u7353\u4C4C\u0000\u7052\u0000\u7053\u0000"+
-        "\u7054\u3357\u0000\u7056\u0000\u3F59\u0000\u0000"+
-        "\u0000\u7057\u0000\u0000\u3724\u0000\u0000\u0000"+
-        "\u0000\u7058\u705C\u0000\u705A\u0000\u0000\u0000"+
-        "\u0000\u705B\u0000\u0000\u3373\u7059\u705D\u0000"+
-        "\u0000\u0000\u0000\u705E\u0000\u3048\u0000\u705F"+
-        "\u7060\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3E64\u0000\u0000\u0000\u7061\u0000\u0000\u0000"+
-        "\u3547\u0000\u0000\u7064\u0000\u0000\u7063\u0000"+
-        "\u7062\u0000\u0000\u6B71\u0000\u4A5C\u0000\u0000"+
-        "\u0000\u0000\u0000\u7065\u7066\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7067\u0000\u0000\u7068\u0000"+
-        "\u7069\u0000\u0000\u706A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u345A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u706B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u706C\u4723\u0000"+
-        "\u0000\u0000\u706E\u323B\u0000\u7071\u7070\u0000"+
-        "\u0000\u0000\u0000\u3124\u0000\u0000\u0000\u3641"+
-        "\u0000\u4A47\u443A\u3A22\u0000\u3960\u3D67\u0000"+
-        "\u3F5C\u0000\u0000\u0000\u7073\u0000\u0000\u7072"+
-        "\u4D42\u3468\u4852\u465C\u0000\u0000\u0000\u3F7C"+
-        "\u4E4E\u0000\u375B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u7076\u0000\u0000\u7075\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4B4B\u462C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3150\u0000\u0000\u7077"+
-        "\u7074\u0000\u0000\u4951\u4D6A\u7078\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7079\u0000"+
-        "\u0000\u0000\u0000\u707B\u426A\u335B\u335C\u707A"+
-        "\u0000\u0000\u0000\u0000\u3469\u3832\u0000\u0000"+
-        "\u346A\u0000\u0000\u453F\u0000\u0000\u4E60\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u385C"+
-        "\u0000\u0000\u0000\u707C\u0000\u0000\u0000\u707D"+
-        "\u707E\u7121\u0000\u7123\u7122\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4977\u0000\u7124\u0000\u0000\u0000\u0000\u7125"+
-        "\u0000\u7126\u0000\u0000\u0000\u0000\u7127\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7129\u7128\u0000\u712A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4874\u664C\u0000\u0000\u3F29"+
-        "\u0000\u0000\u3532\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u712B\u0000\u712C\u0000\u522C\u5D3B\u4853"+
-        "\u0000\u0000\u307B\u0000\u303B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3B74\u4B30\u3E7E\u0000"+
-        "\u0000\u0000\u0000\u712D\u0000\u4C5F\u0000\u0000"+
-        "\u0000\u712E\u4D5C\u0000\u3142\u0000\u0000\u0000"+
-        "\u3B41\u0000\u712F\u326E\u7130\u0000\u0000\u0000"+
-        "\u7131\u0000\u0000\u0000\u0000\u7133\u7134\u0000"+
-        "\u7136\u7132\u0000\u0000\u7135\u0000\u0000\u0000"+
-        "\u345B\u0000\u0000\u0000\u7137\u0000\u7138\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7139\u713A\u0000"+
-        "\u0000\u0000\u713B\u0000\u0000\u713D\u0000\u0000"+
-        "\u0000\u713C\u0000\u713F\u7142\u0000\u0000\u0000"+
-        "\u713E\u7140\u7141\u0000\u0000\u7143\u0000\u3642"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3C73\u7144"+
-        "\u7145\u3961\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7146\u0000\u0000"+
-        "\u333E\u0000\u0000\u0000\u474F\u7147\u7148\u0000"+
-        "\u0000\u0000\u0000\u435A\u466B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u7149\u0000\u0000\u0000"+
-        "\u0000\u477D\u0000\u0000\u424C\u3158\u366E\u0000"+
-        "\u366F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4373\u714E\u3670\u0000\u0000\u326F\u0000\u0000"+
-        "\u714D\u0000\u0000\u714B\u0000\u714C\u0000\u714A"+
-        "\u0000\u0000\u7158\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u714F\u7150\u0000"+
-        "\u0000\u7151\u7152\u0000\u0000\u0000\u0000\u0000"+
-        "\u7154\u0000\u0000\u7153\u0000\u0000\u0000\u3D59"+
-        "\u0000\u7155\u0000\u0000\u0000\u7157\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3533\u7156"+
-        "\u0000\u0000\u417B\u3833\u0000\u0000\u0000\u0000"+
-        "\u0000\u7159\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u424D\u0000\u0000\u715A\u0000\u0000\u0000\u0000"+
-        "\u462D\u0000\u0000\u0000\u0000\u0000\u0000\u715B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7160\u0000"+
-        "\u715E\u0000\u715D\u715F\u0000\u715C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7162\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7161\u0000\u7164"+
-        "\u0000\u0000\u3643\u7163\u0000\u0000\u0000\u7165"+
-        "\u0000\u0000\u7166\u0000\u7168\u7167\u0000\u0000"+
-        "\u0000\u7169\u716B\u716A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u397C\u0000\u0000\u0000\u0000\u716C\u0000\u0000"+
-        "\u716D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u333C\u0000\u0000\u0000\u716E\u0000\u0000\u0000"+
-        "\u716F\u0000\u0000\u0000\u3F71\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7170"+
-        "\u0000\u7171\u0000\u7172\u7173\u0000\u0000\u0000"+
-        "\u3962\u0000\u0000\u0000\u0000\u0000\u7174\u7175"+
-        "\u0000\u0000\u7176\u7177\u0000\u0000\u7178\u0000"+
-        "\u0000\u0000\u4831\u717A\u0000\u4926\u717B\u7179"+
-        "\u0000\u717D\u0000\u0000\u717C\u0000\u0000\u717E"+
-        "\u0000\u0000\u0000\u7221\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7222\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7223\u0000\u7224\u0000\u0000\u0000\u0000\u7225"+
-        "\u0000\u0000\u7226\u7227\u0000\u7228\u0000\u7229"+
-        "\u722A\u722B\u722C\u0000\u0000\u0000\u722D\u722E"+
-        "\u0000\u5D35\u722F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6478\u3534\u0000\u0000\u0000"+
-        "\u0000\u3321\u3A32\u7231\u7230\u4C25\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7233\u7234\u7232"+
-        "\u0000\u7235\u0000\u0000\u4B62\u0000\u0000\u0000"+
-        "\u7236\u0000\u357B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4F25"+
-        "\u0000\u0000\u0000\u0000\u7237\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7239\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u303E\u0000"+
-        "\u0000\u723A\u4A2B\u7238\u0000\u0000\u723B\u723C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u723D"+
-        "\u723E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u723F\u0000\u4B6E\u3B2D\u0000\u3A7A\u412F\u0000"+
-        "\u0000\u0000\u0000\u0000\u7240\u0000\u0000\u0000"+
-        "\u0000\u7243\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7241\u0000\u0000\u0000\u0000\u0000\u7244\u0000"+
-        "\u0000\u3871\u7242\u0000\u0000\u0000\u0000\u7245"+
-        "\u0000\u7246\u7247\u0000\u724B\u0000\u3B2A\u0000"+
-        "\u0000\u0000\u0000\u4264\u0000\u0000\u0000\u0000"+
-        "\u0000\u724C\u7249\u7248\u724A\u0000\u0000\u0000"+
-        "\u375F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7250\u724F\u724E\u0000\u0000\u3033\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u725A\u0000\u7256\u0000"+
-        "\u7257\u7253\u7259\u0000\u7255\u3362\u0000\u0000"+
-        "\u4F4C\u0000\u7258\u7254\u7252\u7251\u0000\u0000"+
-        "\u0000\u0000\u0000\u725C\u0000\u0000\u0000\u0000"+
-        "\u0000\u725F\u0000\u0000\u725E\u725D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4949\u725B\u3073"+
-        "\u7260\u0000\u7262\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u336F\u724D\u3137\u0000\u0000\u7264\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7263\u7261"+
-        "\u432D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4B70\u0000\u0000\u0000\u0000\u4E5A"+
-        "\u0000\u0000\u7265\u0000\u0000\u0000\u0000\u0000"+
-        "\u7266\u0000\u0000\u0000\u0000\u0000\u0000\u7267"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7268\u0000"+
-        "\u7269\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u443B\u0000\u726A"+
-        "\u0000\u4837\u0000\u726F\u726B\u0000\u0000\u0000"+
-        "\u726C\u0000\u0000\u4B31\u4C44\u0000\u4650\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7270\u0000\u0000\u7271\u463E"+
-        "\u726E\u726D\u0000\u0000\u0000\u0000\u322A\u0000"+
-        "\u0000\u0000\u7279\u0000\u0000\u7278\u0000\u0000"+
-        "\u0000\u0000\u0000\u3175\u0000\u0000\u0000\u7276"+
-        "\u0000\u0000\u0000\u7275\u0000\u0000\u7273\u0000"+
-        "\u337B\u0000\u7272\u3C32\u3229\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3963\u0000\u0000\u727C\u727B"+
-        "\u0000\u727A\u0000\u0000\u7277\u0000\u727D\u0000"+
-        "\u727E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7325\u7324\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u7326\u0000\u0000\u312D\u7321\u7322\u0000"+
-        "\u3974\u4C39\u0000\u0000\u7323\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4B32\u0000\u0000\u732B"+
-        "\u0000\u0000\u7327\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u732C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7329"+
-        "\u0000\u7328\u0000\u0000\u0000\u0000\u0000\u375C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u732D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u732E\u0000\u0000\u0000"+
-        "\u0000\u732F\u0000\u732A\u0000\u0000\u0000\u7274"+
-        "\u0000\u0000\u7330\u0000\u4461\u0000\u0000\u0000"+
-        "\u7334\u0000\u7335\u7333\u0000\u0000\u0000\u0000"+
-        "\u0000\u7332\u7338\u0000\u7331\u0000\u7336\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7337"+
-        "\u0000\u0000\u0000\u733A\u0000\u0000\u0000\u0000"+
-        "\u0000\u7339\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u733C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u733D\u0000\u733E"+
-        "\u0000\u0000\u4F49\u0000\u0000\u0000\u0000\u0000"+
-        "\u733B\u426B\u3A6D\u0000\u0000\u733F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u7340\u7341\u0000\u0000\u7342\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7343\u0000\u0000"+
-        "\u3834\u7344\u0000\u0000\u0000\u7345\u0000\u3C2F"+
-        "\u0000\u7346\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7347\u0000\u0000\u7348\u7349\u0000\u0000\u0000"+
-        "\u0000\u734C\u734A\u4F3C\u0000\u734B\u0000\u4E6F"+
-        "\u0000\u0000\u0000\u0000\u0000\u734D\u0000\u4E5B"+
-        "\u0000\u0000\u0000\u0000\u0000\u734E\u477E\u0000"+
-        "\u0000\u734F\u7351\u0000\u0000\u7352\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7350\u396D\u4C4D\u4B63\u5677\u0000\u5D60\u4B7B"+
-        "\u0000\u0000\u0000\u0000\u322B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u7354\u3550\u7355\u7356"+
-        "\u7357\u0000\u3975\u0000\u7358\u0000\u0000\u0000"+
-        "\u6054\u4C5B\u0000\u4263\u7359\u735B\u735A\u0000"+
-        "\u735C\u0000\u0000\u0000\u0000\u735D\u0000\u0000"+
-        "\u735E\u0000\u0000\u0000\u0000\u0000\u0000\u735F"+
-        "\u0000\u0000\u0000\u0000\u7360\u0000\u7361\u7362"+
-        "\u0000\u7363\u0000\u7364\u7365\u7366\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7367"+
-        "\u7368\u0000\u0000\u0000\u0000\u0000\u4524\u0000"+
-        "\u0000\u0000\u0000\u385D\u0000\u736A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u414D\u736B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u736C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4921\u0000\u0000\u736D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u736E\u6337\u0000\u0000\u6C5A\u706D"+
-        "\u0000\u0000\u736F\u0000\u7370\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7372"+
-        "\u7373\u7374\u4E70\u7371\u0000\u0000\u7375\u7376"+
-        "\u0000\u0000\u7378\u0000\u7377\u0000\u0000\u0000"+
-        "\u0000\u0000\u737A\u0000\u0000\u0000\u737B\u7379"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4E36\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u737C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u737D\u6354\u0000\u0000"+
-        "\u737E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u212A\u0000\u2174\u2170\u2173\u2175\u0000"+
-        "\u214A\u214B\u2176\u215C\u2124\u0000\u2125\u213F"+
-        "\u2330\u2331\u2332\u2333\u2334\u2335\u2336\u2337"+
-        "\u2338\u2339\u2127\u2128\u2163\u2161\u2164\u2129"+
-        "\u2177\u2341\u2342\u2343\u2344\u2345\u2346\u2347"+
-        "\u2348\u2349\u234A\u234B\u234C\u234D\u234E\u234F"+
-        "\u2350\u2351\u2352\u2353\u2354\u2355\u2356\u2357"+
-        "\u2358\u2359\u235A\u214E\u2140\u214F\u2130\u2132"+
-        "\u212E\u2361\u2362\u2363\u2364\u2365\u2366\u2367"+
-        "\u2368\u2369\u236A\u236B\u236C\u236D\u236E\u236F"+
-        "\u2370\u2371\u2372\u2373\u2374\u2375\u2376\u2377"+
-        "\u2378\u2379\u237A\u2150\u2143\u2151\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u2131\u0000\u216F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-    private final static short index1[] = {
-        1, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        4, 5, 6, 7, 0, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12,
-        13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
-        29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
-        45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
-        61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
-        77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93
-    };
-
-    private final static String index2[] = {
-        innerIndex0,
-        innerIndex1,
-        innerIndex2,
-        innerIndex3,
-        innerIndex4,
-        innerIndex5
-    };
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_MS5022X_Decoder.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_MS5022X_Decoder.java
deleted file mode 100755
index e38b5a9..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_MS5022X_Decoder.java
+++ /dev/null
@@ -1,1119 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-
-class JIS_X_0208_MS5022X_Decoder
-{
-    private final static String innerIndex0=
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3000\u3001"+
-        "\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01"+
-        "\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F"+
-        "\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006"+
-        "\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\u301C\u2016"+
-        "\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08"+
-        "\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008"+
-        "\u3009\u300A\u300B\u300C\u300D\u300E\u300F\u3010"+
-        "\u3011\uFF0B\u2212\u00B1\u00D7\u00F7\uFF1D\u2260"+
-        "\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640"+
-        "\u00B0\u2032\u2033\u2103\uFFE5\uFF04\u00A2\u00A3"+
-        "\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605"+
-        "\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3"+
-        "\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191"+
-        "\u2193\u3013\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2208\u220B\u2286"+
-        "\u2287\u2282\u2283\u222A\u2229\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2227\u2228\u00AC"+
-        "\u21D2\u21D4\u2200\u2203\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2220"+
-        "\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B"+
-        "\u221A\u223D\u221D\u2235\u222B\u222C\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u212B\u2030\u266F"+
-        "\u266D\u266A\u2020\u2021\u00B6\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\u25EF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16"+
-        "\uFF17\uFF18\uFF19\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26"+
-        "\uFF27\uFF28\uFF29\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E"+
-        "\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34\uFF35\uFF36"+
-        "\uFF37\uFF38\uFF39\uFF3A\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46"+
-        "\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E"+
-        "\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56"+
-        "\uFF57\uFF58\uFF59\uFF5A\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048"+
-        "\u3049\u304A\u304B\u304C\u304D\u304E\u304F\u3050"+
-        "\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058"+
-        "\u3059\u305A\u305B\u305C\u305D\u305E\u305F\u3060"+
-        "\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068"+
-        "\u3069\u306A\u306B\u306C\u306D\u306E\u306F\u3070"+
-        "\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078"+
-        "\u3079\u307A\u307B\u307C\u307D\u307E\u307F\u3080"+
-        "\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088"+
-        "\u3089\u308A\u308B\u308C\u308D\u308E\u308F\u3090"+
-        "\u3091\u3092\u3093\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u30A1\u30A2"+
-        "\u30A3\u30A4\u30A5\u30A6\u30A7\u30A8\u30A9\u30AA"+
-        "\u30AB\u30AC\u30AD\u30AE\u30AF\u30B0\u30B1\u30B2"+
-        "\u30B3\u30B4\u30B5\u30B6\u30B7\u30B8\u30B9\u30BA"+
-        "\u30BB\u30BC\u30BD\u30BE\u30BF\u30C0\u30C1\u30C2"+
-        "\u30C3\u30C4\u30C5\u30C6\u30C7\u30C8\u30C9\u30CA"+
-        "\u30CB\u30CC\u30CD\u30CE\u30CF\u30D0\u30D1\u30D2"+
-        "\u30D3\u30D4\u30D5\u30D6\u30D7\u30D8\u30D9\u30DA"+
-        "\u30DB\u30DC\u30DD\u30DE\u30DF\u30E0\u30E1\u30E2"+
-        "\u30E3\u30E4\u30E5\u30E6\u30E7\u30E8\u30E9\u30EA"+
-        "\u30EB\u30EC\u30ED\u30EE\u30EF\u30F0\u30F1\u30F2"+
-        "\u30F3\u30F4\u30F5\u30F6\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u0391\u0392\u0393\u0394"+
-        "\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C"+
-        "\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5"+
-        "\u03A6\u03A7\u03A8\u03A9\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u03B1\u03B2\u03B3\u03B4"+
-        "\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC"+
-        "\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C4\u03C5"+
-        "\u03C6\u03C7\u03C8\u03C9\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\u0410\u0411\u0412\u0413\u0414\u0415"+
-        "\u0401\u0416\u0417\u0418\u0419\u041A\u041B\u041C"+
-        "\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424"+
-        "\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C"+
-        "\u042D\u042E\u042F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\u0430\u0431\u0432\u0433\u0434\u0435"+
-        "\u0451\u0436\u0437\u0438\u0439\u043A\u043B\u043C"+
-        "\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444"+
-        "\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C"+
-        "\u044D\u044E\u044F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C"+
-        "\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B"+
-        "\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F"+
-        "\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2460\u2461"+
-        "\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469"+
-        "\u246A\u246B\u246C\u246D\u246E\u246F\u2470\u2471"+
-        "\u2472\u2473\u2160\u2161\u2162\u2163\u2164\u2165"+
-        "\u2166\u2167\u2168\u2169\uFFFD\u3349\u3314\u3322"+
-        "\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D"+
-        "\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E"+
-        "\u338E\u338F\u33C4\u33A1\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u337B\u301E\u301F\u2116"+
-        "\u33CD\u2121\u32A4\u32A5\u32A6\u32A7\u32A8\u3231"+
-        "\u3232\u3239\u337E\u337D\u337C\uFFFD\uFFFD\uFFFD"+
-        "\u222E\u2211\uFFFD\uFFFD\uFFFD\u221F\u22BF\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u4E9C\u5516\u5A03\u963F"+
-        "\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50"+
-        "\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893"+
-        "\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62"+
-        "\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309"+
-        "\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D"+
-        "\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF"+
-        "\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB"+
-        "\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A"+
-        "\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00"+
-        "\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141"+
-        "\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB"+
-        "\u80E4\u852D\u9662\u9670\u96A0\u97FB\u540B\u53F3"+
-        "\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA"+
-        "\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A"+
-        "\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91"+
-        "\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71"+
-        "\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8"+
-        "\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB"+
-        "\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD"+
-        "\u5186\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9"+
-        "\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F"+
-        "\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869"+
-        "\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC"+
-        "\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956"+
-        "\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B"+
-        "\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069"+
-        "\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D"+
-        "\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6"+
-        "\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B"+
-        "\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304"+
-        "\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6"+
-        "\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B"+
-        "\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB"+
-        "\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A"+
-        "\u6094\u6062\u61D0\u6212\u62D0\u6539\u9B41\u6666"+
-        "\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9"+
-        "\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3"+
-        "\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72"+
-        "\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE"+
-        "\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C"+
-        "\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B"+
-        "\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D"+
-        "\u984D\u984E\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D"+
-        "\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1"+
-        "\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A"+
-        "\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B"+
-        "\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6"+
-        "\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB"+
-        "\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79"+
-        "\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853"+
-        "\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0"+
-        "\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36"+
-        "\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084"+
-        "\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218"+
-        "\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9"+
-        "\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E"+
-        "\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90"+
-        "\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F"+
-        "\u68CB\u68C4\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F"+
-        "\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4"+
-        "\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D"+
-        "\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0"+
-        "\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA"+
-        "\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827"+
-        "\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18"+
-        "\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025"+
-        "\u6551\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76"+
-        "\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB"+
-        "\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31"+
-        "\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC";
-
-    private final static String innerIndex1=
-        "\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354"+
-        "\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A"+
-        "\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2"+
-        "\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1"+
-        "\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D"+
-        "\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4"+
-        "\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981"+
-        "\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39"+
-        "\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A"+
-        "\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2"+
-        "\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047"+
-        "\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\u6398\u7A9F"+
-        "\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817"+
-        "\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4"+
-        "\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211"+
-        "\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84"+
-        "\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F"+
-        "\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B"+
-        "\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD"+
-        "\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287\u621F\u6483"+
-        "\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74"+
-        "\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065"+
-        "\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA"+
-        "\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC"+
-        "\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19"+
-        "\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78"+
-        "\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384"+
-        "\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B"+
-        "\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27"+
-        "\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1"+
-        "\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867"+
-        "\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F"+
-        "\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E"+
-        "\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF"+
-        "\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A"+
-        "\u53E3\u5411\u540E\u5589\u5751\u57A2\u597D\u5B54"+
-        "\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A"+
-        "\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B"+
-        "\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F"+
-        "\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F"+
-        "\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF"+
-        "\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B"+
-        "\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4"+
-        "\u964D\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7"+
-        "\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B"+
-        "\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344"+
-        "\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC"+
-        "\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068"+
-        "\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A"+
-        "\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6"+
-        "\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF"+
-        "\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9"+
-        "\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73"+
-        "\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E"+
-        "\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750"+
-        "\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4"+
-        "\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B"+
-        "\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F"+
-        "\u685C\u9BAD\u7B39\u5319\u518A\u5237\u5BDF\u62F6"+
-        "\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6"+
-        "\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2"+
-        "\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523"+
-        "\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC"+
-        "\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8"+
-        "\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50"+
-        "\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C"+
-        "\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345"+
-        "\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3"+
-        "\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC"+
-        "\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57"+
-        "\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E"+
-        "\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494"+
-        "\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8"+
-        "\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4"+
-        "\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0"+
-        "\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199"+
-        "\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005"+
-        "\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A"+
-        "\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2"+
-        "\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A"+
-        "\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112"+
-        "\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA"+
-        "\u53CE\u5468\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE"+
-        "\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F"+
-        "\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B"+
-        "\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93"+
-        "\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283"+
-        "\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E"+
-        "\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC"+
-        "\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89"+
-        "\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187"+
-        "\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6"+
-        "\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9"+
-        "\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F"+
-        "\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617"+
-        "\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A"+
-        "\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C"+
-        "\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F"+
-        "\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167"+
-        "\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11"+
-        "\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3"+
-        "\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266"+
-        "\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57"+
-        "\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5"+
-        "\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8"+
-        "\u8B72\u91B8\u9320\u5631\u57F4\u98FE\u62ED\u690D"+
-        "\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755"+
-        "\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD"+
-        "\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B"+
-        "\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33"+
-        "\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032"+
-        "\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B"+
-        "\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25"+
-        "\u8ACF\u9808\u9162\u56F3\u53A8\u9017\u5439\u5782"+
-        "\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870"+
-        "\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07"+
-        "\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919"+
-        "\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16"+
-        "\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81"+
-        "\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816"+
-        "\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0"+
-        "\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752"+
-        "\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A"+
-        "\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A"+
-        "\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5"+
-        "\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76"+
-        "\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02"+
-        "\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9"+
-        "\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F"+
-        "\u7BAD\u7DDA\u7E4A\u7FA8\u817A\u821B\u8239\u85A6"+
-        "\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583"+
-        "\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55"+
-        "\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD"+
-        "\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97"+
-        "\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7"+
-        "\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D"+
-        "\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F"+
-        "\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15"+
-        "\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C"+
-        "\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70"+
-        "\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E"+
-        "\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373"+
-        "\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E"+
-        "\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58"+
-        "\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A"+
-        "\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1"+
-        "\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE"+
-        "\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF"+
-        "\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000"+
-        "\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C"+
-        "\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85"+
-        "\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438"+
-        "\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\u53E9\u4F46"+
-        "\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA"+
-        "\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606"+
-        "\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD"+
-        "\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95"+
-        "\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5"+
-        "\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A"+
-        "\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3"+
-        "\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92"+
-        "\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD"+
-        "\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3"+
-        "\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01"+
-        "\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14"+
-        "\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E"+
-        "\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF"+
-        "\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5"+
-        "\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673"+
-        "\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A"+
-        "\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB"+
-        "\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C"+
-        "\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C"+
-        "\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95"+
-        "\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF"+
-        "\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6"+
-        "\u8E44\u9013\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458"+
-        "\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA"+
-        "\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B"+
-        "\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2"+
-        "\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E"+
-        "\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C"+
-        "\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825"+
-        "\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A"+
-        "\u51AC\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95"+
-        "\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC"+
-        "\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53"+
-        "\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230";
-
-    private final static String innerIndex2=
-        "\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003"+
-        "\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5"+
-        "\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5"+
-        "\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97"+
-        "\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC"+
-        "\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6"+
-        "\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566"+
-        "\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948"+
-        "\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A"+
-        "\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF"+
-        "\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1"+
-        "\u8089\u8679\u5EFF\u65E5\u4E73\u5165\u5982\u5C3F"+
-        "\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962"+
-        "\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A"+
-        "\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9"+
-        "\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4"+
-        "\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436"+
-        "\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD"+
-        "\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29"+
-        "\u914D\u500D\u57F9\u5A92\u6885\u6973\u7164\u72FD"+
-        "\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7"+
-        "\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D"+
-        "\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206"+
-        "\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8"+
-        "\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B"+
-        "\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C"+
-        "\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34"+
-        "\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F"+
-        "\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C"+
-        "\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D"+
-        "\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351"+
-        "\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB"+
-        "\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB"+
-        "\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB"+
-        "\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435"+
-        "\u7709\u7F8E\u9F3B\u67CA\u7A17\u5339\u758B\u9AED"+
-        "\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46"+
-        "\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5"+
-        "\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55"+
-        "\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2"+
-        "\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015"+
-        "\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0"+
-        "\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276"+
-        "\u6577\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A"+
-        "\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE"+
-        "\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953"+
-        "\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D"+
-        "\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8"+
-        "\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4"+
-        "\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587"+
-        "\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A"+
-        "\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB"+
-        "\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F"+
-        "\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF"+
-        "\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703"+
-        "\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893"+
-        "\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8"+
-        "\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29"+
-        "\u5E96\u62B1\u6367\u653E\u65B9\u670B\u6CD5\u6CE1"+
-        "\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702"+
-        "\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C"+
-        "\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8"+
-        "\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21"+
-        "\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420"+
-        "\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267"+
-        "\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C"+
-        "\u5954\u672C\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54"+
-        "\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9"+
-        "\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6"+
-        "\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D"+
-        "\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A"+
-        "\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1"+
-        "\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922"+
-        "\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18"+
-        "\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4"+
-        "\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762"+
-        "\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B"+
-        "\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE"+
-        "\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F"+
-        "\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A"+
-        "\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC"+
-        "\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108"+
-        "\u6CB9\u7652\u8AED\u8F38\u552F\u4F51\u512A\u52C7"+
-        "\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA"+
-        "\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98"+
-        "\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59"+
-        "\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9"+
-        "\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B"+
-        "\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9"+
-        "\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291"+
-        "\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA"+
-        "\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D"+
-        "\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D"+
-        "\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483"+
-        "\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387"+
-        "\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409"+
-        "\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E"+
-        "\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE"+
-        "\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7"+
-        "\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1"+
-        "\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A"+
-        "\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E"+
-        "\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2"+
-        "\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62"+
-        "\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B"+
-        "\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\u84EE\u9023"+
-        "\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732"+
-        "\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A"+
-        "\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE"+
-        "\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C"+
-        "\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99"+
-        "\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897"+
-        "\u8155\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u5F0C\u4E10\u4E15\u4E2A"+
-        "\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82"+
-        "\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F"+
-        "\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4"+
-        "\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09"+
-        "\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88"+
-        "\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86"+
-        "\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1"+
-        "\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A"+
-        "\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE"+
-        "\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050"+
-        "\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085"+
-        "\u50B4\u50B2\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE"+
-        "\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101"+
-        "\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137"+
-        "\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162"+
-        "\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C"+
-        "\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6"+
-        "\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0"+
-        "\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9"+
-        "\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E"+
-        "\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B"+
-        "\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F"+
-        "\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8"+
-        "\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7"+
-        "\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8"+
-        "\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315"+
-        "\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346"+
-        "\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E"+
-        "\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5"+
-        "\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC"+
-        "\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440"+
-        "\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E"+
-        "\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492"+
-        "\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2"+
-        "\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\u54AB\u54C2"+
-        "\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514"+
-        "\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563"+
-        "\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533"+
-        "\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E"+
-        "\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8"+
-        "\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614"+
-        "\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650"+
-        "\u71DF\u5634\u5636\u5632\u5638\u566B\u5664\u562F"+
-        "\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F"+
-        "\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3"+
-        "\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9"+
-        "\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713"+
-        "\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E"+
-        "\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F"+
-        "\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3"+
-        "\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B"+
-        "\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0"+
-        "\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA"+
-        "\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7"+
-        "\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA"+
-        "\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B"+
-        "\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2"+
-        "\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967"+
-        "\u596C\u5969\u5978\u5981\u599D\u4F5E\u4FAB\u59A3"+
-        "\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25"+
-        "\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49"+
-        "\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB"+
-        "\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA"+
-        "\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36"+
-        "\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B"+
-        "\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A"+
-        "\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4"+
-        "\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0"+
-        "\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20"+
-        "\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53";
-
-    private final static String innerIndex3=
-        "\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79"+
-        "\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC"+
-        "\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA"+
-        "\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F"+
-        "\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C"+
-        "\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84"+
-        "\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7"+
-        "\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB"+
-        "\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36"+
-        "\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F"+
-        "\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F"+
-        "\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\u5ED6\u5EE3"+
-        "\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC"+
-        "\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09"+
-        "\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38"+
-        "\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57"+
-        "\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F"+
-        "\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0"+
-        "\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1"+
-        "\u5FDD\u60B3\u5FFF\u6021\u6060\u6019\u6010\u6029"+
-        "\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A"+
-        "\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D"+
-        "\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081"+
-        "\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097"+
-        "\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4"+
-        "\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106"+
-        "\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB"+
-        "\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A"+
-        "\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173"+
-        "\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165"+
-        "\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187"+
-        "\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC"+
-        "\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB"+
-        "\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF"+
-        "\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C"+
-        "\u6214\u621B\u621E\u6221\u622A\u622E\u6230\u6232"+
-        "\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268"+
-        "\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4"+
-        "\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6"+
-        "\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B"+
-        "\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF"+
-        "\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E"+
-        "\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5"+
-        "\u636B\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9"+
-        "\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426"+
-        "\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476"+
-        "\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC"+
-        "\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1"+
-        "\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C"+
-        "\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C"+
-        "\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536"+
-        "\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E"+
-        "\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F"+
-        "\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2"+
-        "\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603"+
-        "\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644"+
-        "\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F"+
-        "\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698"+
-        "\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\u66C4\u66B8"+
-        "\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5"+
-        "\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E"+
-        "\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760"+
-        "\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A"+
-        "\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4"+
-        "\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2"+
-        "\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846"+
-        "\u6829\u6840\u684D\u6832\u684E\u68B3\u682B\u6859"+
-        "\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D"+
-        "\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA"+
-        "\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922"+
-        "\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936"+
-        "\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF"+
-        "\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977"+
-        "\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974"+
-        "\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A"+
-        "\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE"+
-        "\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991"+
-        "\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B"+
-        "\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E"+
-        "\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13"+
-        "\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59"+
-        "\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84"+
-        "\u6AA2\u6AA3\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8"+
-        "\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA"+
-        "\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F"+
-        "\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49"+
-        "\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79"+
-        "\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E"+
-        "\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7"+
-        "\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3"+
-        "\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23"+
-        "\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81"+
-        "\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1"+
-        "\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE"+
-        "\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36"+
-        "\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C"+
-        "\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95"+
-        "\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6"+
-        "\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5"+
-        "\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E"+
-        "\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B"+
-        "\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF"+
-        "\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3"+
-        "\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5"+
-        "\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE"+
-        "\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\u6F3E\u6F13"+
-        "\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B"+
-        "\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2"+
-        "\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA"+
-        "\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB"+
-        "\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B"+
-        "\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032"+
-        "\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8"+
-        "\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9\u7109\u70FD"+
-        "\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C"+
-        "\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC"+
-        "\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0"+
-        "\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210"+
-        "\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C"+
-        "\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282"+
-        "\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2"+
-        "\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1"+
-        "\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D"+
-        "\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8"+
-        "\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A"+
-        "\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE"+
-        "\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455"+
-        "\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463"+
-        "\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF"+
-        "\u74D4\u73F1\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2"+
-        "\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C"+
-        "\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C"+
-        "\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569"+
-        "\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587"+
-        "\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5"+
-        "\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC"+
-        "\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE"+
-        "\u75FF\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B"+
-        "\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624"+
-        "\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658"+
-        "\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670"+
-        "\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B"+
-        "\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8"+
-        "\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1"+
-        "\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704"+
-        "\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738"+
-        "\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E"+
-        "\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6"+
-        "\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7"+
-        "\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926"+
-        "\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A"+
-        "\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB"+
-        "\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\u78E7\u78DA"+
-        "\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B"+
-        "\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A"+
-        "\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3"+
-        "\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3"+
-        "\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31"+
-        "\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62"+
-        "\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95"+
-        "\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4"+
-        "\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3"+
-        "\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0"+
-        "\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E"+
-        "\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B"+
-        "\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71"+
-        "\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A"+
-        "\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC"+
-        "\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6"+
-        "\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17"+
-        "\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B"+
-        "\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58"+
-        "\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90"+
-        "\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2"+
-        "\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8"+
-        "\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6"+
-        "\u7CFA\u7D06\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B"+
-        "\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E"+
-        "\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B"+
-        "\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7"+
-        "\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F"+
-        "\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1"+
-        "\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09"+
-        "\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43"+
-        "\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59"+
-        "\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5"+
-        "\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90"+
-        "\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A";
-
-    private final static String innerIndex4=
-        "\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54"+
-        "\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82"+
-        "\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D"+
-        "\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8"+
-        "\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6"+
-        "\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012"+
-        "\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A"+
-        "\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073"+
-        "\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086"+
-        "\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB"+
-        "\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF"+
-        "\u80F1\u811B\u8129\u8123\u812F\u814B\u968B\u8146"+
-        "\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166"+
-        "\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195"+
-        "\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE"+
-        "\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1"+
-        "\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA"+
-        "\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D"+
-        "\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259"+
-        "\u8258\u825D\u825A\u825F\u8264\u8262\u8268\u826A"+
-        "\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292"+
-        "\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2"+
-        "\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE"+
-        "\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332"+
-        "\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317"+
-        "\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323"+
-        "\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0"+
-        "\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403"+
-        "\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D"+
-        "\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A"+
-        "\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482"+
-        "\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462"+
-        "\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0"+
-        "\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517"+
-        "\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563"+
-        "\u8558\u8548\u8541\u8602\u854B\u8555\u8580\u85A4"+
-        "\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA"+
-        "\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF"+
-        "\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A"+
-        "\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630"+
-        "\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693"+
-        "\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4"+
-        "\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9"+
-        "\u86EC\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700"+
-        "\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734"+
-        "\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F"+
-        "\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759"+
-        "\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF"+
-        "\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3"+
-        "\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D"+
-        "\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815"+
-        "\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844"+
-        "\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E"+
-        "\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892"+
-        "\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1"+
-        "\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902"+
-        "\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913"+
-        "\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B"+
-        "\u8936\u8938\u894C\u891D\u8960\u895E\u8966\u8964"+
-        "\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988"+
-        "\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF"+
-        "\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD"+
-        "\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B"+
-        "\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48"+
-        "\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8"+
-        "\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD"+
-        "\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14"+
-        "\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A"+
-        "\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26"+
-        "\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49"+
-        "\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74"+
-        "\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99"+
-        "\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50"+
-        "\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85"+
-        "\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD"+
-        "\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1"+
-        "\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05"+
-        "\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD"+
-        "\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99"+
-        "\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB"+
-        "\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09"+
-        "\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30"+
-        "\u8E34\u8E4A\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59"+
-        "\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C"+
-        "\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91"+
-        "\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1"+
-        "\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB"+
-        "\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13"+
-        "\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39"+
-        "\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57"+
-        "\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD"+
-        "\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087"+
-        "\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D"+
-        "\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8"+
-        "\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056"+
-        "\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082"+
-        "\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF"+
-        "\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112"+
-        "\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165"+
-        "\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB"+
-        "\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9"+
-        "\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5"+
-        "\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E"+
-        "\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B"+
-        "\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9"+
-        "\u92B7\u92E9\u930F\u92FA\u9344\u932E\u9319\u9322"+
-        "\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C"+
-        "\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6"+
-        "\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8"+
-        "\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436"+
-        "\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B"+
-        "\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477"+
-        "\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587"+
-        "\u958A\u9594\u9596\u9598\u9599\u95A0\u95A8\u95A7"+
-        "\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3"+
-        "\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5"+
-        "\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F"+
-        "\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672"+
-        "\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1"+
-        "\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB"+
-        "\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704"+
-        "\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719"+
-        "\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746"+
-        "\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768"+
-        "\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A"+
-        "\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3"+
-        "\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED"+
-        "\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838"+
-        "\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B"+
-        "\u986F\u9870\u9871\u9874\u9873\u98AA\u98AF\u98B1"+
-        "\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909"+
-        "\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920"+
-        "\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950"+
-        "\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5"+
-        "\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1"+
-        "\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F"+
-        "\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40"+
-        "\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62"+
-        "\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC"+
-        "\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2"+
-        "\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7"+
-        "\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25"+
-        "\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44"+
-        "\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93"+
-        "\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4"+
-        "\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3"+
-        "\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0"+
-        "\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12"+
-        "\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30"+
-        "\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76"+
-        "\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03"+
-        "\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15"+
-        "\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\u9D5D\u9D5E"+
-        "\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB"+
-        "\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1"+
-        "\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3"+
-        "\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E"+
-        "\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92"+
-        "\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD"+
-        "\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE"+
-        "\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7"+
-        "\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15"+
-        "\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F"+
-        "\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72"+
-        "\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464"+
-        "\u51DC\u7199\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uE000\uE001\uE002\uE003\uE004\uE005"+
-        "\uE006\uE007\uE008\uE009\uE00A\uE00B\uE00C\uE00D"+
-        "\uE00E\uE00F\uE010\uE011\uE012\uE013\uE014\uE015"+
-        "\uE016\uE017\uE018\uE019\uE01A\uE01B\uE01C\uE01D"+
-        "\uE01E\uE01F\uE020\uE021\uE022\uE023\uE024\uE025"+
-        "\uE026\uE027\uE028\uE029\uE02A\uE02B\uE02C\uE02D"+
-        "\uE02E\uE02F\uE030\uE031\uE032\uE033\uE034\uE035"+
-        "\uE036\uE037\uE038\uE039\uE03A\uE03B\uE03C\uE03D"+
-        "\uE03E\uE03F\uE040\uE041\uE042\uE043\uE044\uE045"+
-        "\uE046\uE047\uE048\uE049\uE04A\uE04B\uE04C\uE04D"+
-        "\uE04E\uE04F\uE050\uE051\uE052\uE053\uE054\uE055"+
-        "\uE056\uE057\uE058\uE059\uE05A\uE05B\uE05C\uE05D";
-
-    private final static String innerIndex5=
-        "\uE05E\uE05F\uE060\uE061\uE062\uE063\uE064\uE065"+
-        "\uE066\uE067\uE068\uE069\uE06A\uE06B\uE06C\uE06D"+
-        "\uE06E\uE06F\uE070\uE071\uE072\uE073\uE074\uE075"+
-        "\uE076\uE077\uE078\uE079\uE07A\uE07B\uE07C\uE07D"+
-        "\uE07E\uE07F\uE080\uE081\uE082\uE083\uE084\uE085"+
-        "\uE086\uE087\uE088\uE089\uE08A\uE08B\uE08C\uE08D"+
-        "\uE08E\uE08F\uE090\uE091\uE092\uE093\uE094\uE095"+
-        "\uE096\uE097\uE098\uE099\uE09A\uE09B\uE09C\uE09D"+
-        "\uE09E\uE09F\uE0A0\uE0A1\uE0A2\uE0A3\uE0A4\uE0A5"+
-        "\uE0A6\uE0A7\uE0A8\uE0A9\uE0AA\uE0AB\uE0AC\uE0AD"+
-        "\uE0AE\uE0AF\uE0B0\uE0B1\uE0B2\uE0B3\uE0B4\uE0B5"+
-        "\uE0B6\uE0B7\uE0B8\uE0B9\uE0BA\uE0BB\uE0BC\uE0BD"+
-        "\uE0BE\uE0BF\uE0C0\uE0C1\uE0C2\uE0C3\uE0C4\uE0C5"+
-        "\uE0C6\uE0C7\uE0C8\uE0C9\uE0CA\uE0CB\uE0CC\uE0CD"+
-        "\uE0CE\uE0CF\uE0D0\uE0D1\uE0D2\uE0D3\uE0D4\uE0D5"+
-        "\uE0D6\uE0D7\uE0D8\uE0D9\uE0DA\uE0DB\uE0DC\uE0DD"+
-        "\uE0DE\uE0DF\uE0E0\uE0E1\uE0E2\uE0E3\uE0E4\uE0E5"+
-        "\uE0E6\uE0E7\uE0E8\uE0E9\uE0EA\uE0EB\uE0EC\uE0ED"+
-        "\uE0EE\uE0EF\uE0F0\uE0F1\uE0F2\uE0F3\uE0F4\uE0F5"+
-        "\uE0F6\uE0F7\uE0F8\uE0F9\uE0FA\uE0FB\uE0FC\uE0FD"+
-        "\uE0FE\uE0FF\uE100\uE101\uE102\uE103\uE104\uE105"+
-        "\uE106\uE107\uE108\uE109\uE10A\uE10B\uE10C\uE10D"+
-        "\uE10E\uE10F\uE110\uE111\uE112\uE113\uE114\uE115"+
-        "\uE116\uE117\uE118\uE119\uE11A\uE11B\uE11C\uE11D"+
-        "\uE11E\uE11F\uE120\uE121\uE122\uE123\uE124\uE125"+
-        "\uE126\uE127\uE128\uE129\uE12A\uE12B\uE12C\uE12D"+
-        "\uE12E\uE12F\uE130\uE131\uE132\uE133\uE134\uE135"+
-        "\uE136\uE137\uE138\uE139\uE13A\uE13B\uE13C\uE13D"+
-        "\uE13E\uE13F\uE140\uE141\uE142\uE143\uE144\uE145"+
-        "\uE146\uE147\uE148\uE149\uE14A\uE14B\uE14C\uE14D"+
-        "\uE14E\uE14F\uE150\uE151\uE152\uE153\uE154\uE155"+
-        "\uE156\uE157\uE158\uE159\uE15A\uE15B\uE15C\uE15D"+
-        "\uE15E\uE15F\uE160\uE161\uE162\uE163\uE164\uE165"+
-        "\uE166\uE167\uE168\uE169\uE16A\uE16B\uE16C\uE16D"+
-        "\uE16E\uE16F\uE170\uE171\uE172\uE173\uE174\uE175"+
-        "\uE176\uE177\uE178\uE179\uE17A\uE17B\uE17C\uE17D"+
-        "\uE17E\uE17F\uE180\uE181\uE182\uE183\uE184\uE185"+
-        "\uE186\uE187\uE188\uE189\uE18A\uE18B\uE18C\uE18D"+
-        "\uE18E\uE18F\uE190\uE191\uE192\uE193\uE194\uE195"+
-        "\uE196\uE197\uE198\uE199\uE19A\uE19B\uE19C\uE19D"+
-        "\uE19E\uE19F\uE1A0\uE1A1\uE1A2\uE1A3\uE1A4\uE1A5"+
-        "\uE1A6\uE1A7\uE1A8\uE1A9\uE1AA\uE1AB\uE1AC\uE1AD"+
-        "\uE1AE\uE1AF\uE1B0\uE1B1\uE1B2\uE1B3\uE1B4\uE1B5"+
-        "\uE1B6\uE1B7\uE1B8\uE1B9\uE1BA\uE1BB\uE1BC\uE1BD"+
-        "\uE1BE\uE1BF\uE1C0\uE1C1\uE1C2\uE1C3\uE1C4\uE1C5"+
-        "\uE1C6\uE1C7\uE1C8\uE1C9\uE1CA\uE1CB\uE1CC\uE1CD"+
-        "\uE1CE\uE1CF\uE1D0\uE1D1\uE1D2\uE1D3\uE1D4\uE1D5"+
-        "\uE1D6\uE1D7\uE1D8\uE1D9\uE1DA\uE1DB\uE1DC\uE1DD"+
-        "\uE1DE\uE1DF\uE1E0\uE1E1\uE1E2\uE1E3\uE1E4\uE1E5"+
-        "\uE1E6\uE1E7\uE1E8\uE1E9\uE1EA\uE1EB\uE1EC\uE1ED"+
-        "\uE1EE\uE1EF\uE1F0\uE1F1\uE1F2\uE1F3\uE1F4\uE1F5"+
-        "\uE1F6\uE1F7\uE1F8\uE1F9\uE1FA\uE1FB\uE1FC\uE1FD"+
-        "\uE1FE\uE1FF\uE200\uE201\uE202\uE203\uE204\uE205"+
-        "\uE206\uE207\uE208\uE209\uE20A\uE20B\uE20C\uE20D"+
-        "\uE20E\uE20F\uE210\uE211\uE212\uE213\uE214\uE215"+
-        "\uE216\uE217\uE218\uE219\uE21A\uE21B\uE21C\uE21D"+
-        "\uE21E\uE21F\uE220\uE221\uE222\uE223\uE224\uE225"+
-        "\uE226\uE227\uE228\uE229\uE22A\uE22B\uE22C\uE22D"+
-        "\uE22E\uE22F\uE230\uE231\uE232\uE233\uE234\uE235"+
-        "\uE236\uE237\uE238\uE239\uE23A\uE23B\uE23C\uE23D"+
-        "\uE23E\uE23F\uE240\uE241\uE242\uE243\uE244\uE245"+
-        "\uE246\uE247\uE248\uE249\uE24A\uE24B\uE24C\uE24D"+
-        "\uE24E\uE24F\uE250\uE251\uE252\uE253\uE254\uE255"+
-        "\uE256\uE257\uE258\uE259\uE25A\uE25B\uE25C\uE25D"+
-        "\uE25E\uE25F\uE260\uE261\uE262\uE263\uE264\uE265"+
-        "\uE266\uE267\uE268\uE269\uE26A\uE26B\uE26C\uE26D"+
-        "\uE26E\uE26F\uE270\uE271\uE272\uE273\uE274\uE275"+
-        "\uE276\uE277\uE278\uE279\uE27A\uE27B\uE27C\uE27D"+
-        "\uE27E\uE27F\uE280\uE281\uE282\uE283\uE284\uE285"+
-        "\uE286\uE287\uE288\uE289\uE28A\uE28B\uE28C\uE28D"+
-        "\uE28E\uE28F\uE290\uE291\uE292\uE293\uE294\uE295"+
-        "\uE296\uE297\uE298\uE299\uE29A\uE29B\uE29C\uE29D"+
-        "\uE29E\uE29F\uE2A0\uE2A1\uE2A2\uE2A3\uE2A4\uE2A5"+
-        "\uE2A6\uE2A7\uE2A8\uE2A9\uE2AA\uE2AB\uE2AC\uE2AD"+
-        "\uE2AE\uE2AF\uE2B0\uE2B1\uE2B2\uE2B3\uE2B4\uE2B5"+
-        "\uE2B6\uE2B7\uE2B8\uE2B9\uE2BA\uE2BB\uE2BC\uE2BD"+
-        "\uE2BE\uE2BF\uE2C0\uE2C1\uE2C2\uE2C3\uE2C4\uE2C5"+
-        "\uE2C6\uE2C7\uE2C8\uE2C9\uE2CA\uE2CB\uE2CC\uE2CD"+
-        "\uE2CE\uE2CF\uE2D0\uE2D1\uE2D2\uE2D3\uE2D4\uE2D5"+
-        "\uE2D6\uE2D7\uE2D8\uE2D9\uE2DA\uE2DB\uE2DC\uE2DD"+
-        "\uE2DE\uE2DF\uE2E0\uE2E1\uE2E2\uE2E3\uE2E4\uE2E5"+
-        "\uE2E6\uE2E7\uE2E8\uE2E9\uE2EA\uE2EB\uE2EC\uE2ED"+
-        "\uE2EE\uE2EF\uE2F0\uE2F1\uE2F2\uE2F3\uE2F4\uE2F5"+
-        "\uE2F6\uE2F7\uE2F8\uE2F9\uE2FA\uE2FB\uE2FC\uE2FD"+
-        "\uE2FE\uE2FF\uE300\uE301\uE302\uE303\uE304\uE305"+
-        "\uE306\uE307\uE308\uE309\uE30A\uE30B\uE30C\uE30D"+
-        "\uE30E\uE30F\uE310\uE311\uE312\uE313\uE314\uE315"+
-        "\uE316\uE317\uE318\uE319\uE31A\uE31B\uE31C\uE31D"+
-        "\uE31E\uE31F\uE320\uE321\uE322\uE323\uE324\uE325"+
-        "\uE326\uE327\uE328\uE329\uE32A\uE32B\uE32C\uE32D"+
-        "\uE32E\uE32F\uE330\uE331\uE332\uE333\uE334\uE335"+
-        "\uE336\uE337\uE338\uE339\uE33A\uE33B\uE33C\uE33D"+
-        "\uE33E\uE33F\uE340\uE341\uE342\uE343\uE344\uE345"+
-        "\uE346\uE347\uE348\uE349\uE34A\uE34B\uE34C\uE34D"+
-        "\uE34E\uE34F\uE350\uE351\uE352\uE353\uE354\uE355"+
-        "\uE356\uE357\uE358\uE359\uE35A\uE35B\uE35C\uE35D"+
-        "\uE35E\uE35F\uE360\uE361\uE362\uE363\uE364\uE365"+
-        "\uE366\uE367\uE368\uE369\uE36A\uE36B\uE36C\uE36D"+
-        "\uE36E\uE36F\uE370\uE371\uE372\uE373\uE374\uE375"+
-        "\uE376\uE377\uE378\uE379\uE37A\uE37B\uE37C\uE37D"+
-        "\uE37E\uE37F\uE380\uE381\uE382\uE383\uE384\uE385"+
-        "\uE386\uE387\uE388\uE389\uE38A\uE38B\uE38C\uE38D"+
-        "\uE38E\uE38F\uE390\uE391\uE392\uE393\uE394\uE395"+
-        "\uE396\uE397\uE398\uE399\uE39A\uE39B\uE39C\uE39D"+
-        "\uE39E\uE39F\uE3A0\uE3A1\uE3A2\uE3A3\uE3A4\uE3A5"+
-        "\uE3A6\uE3A7\uE3A8\uE3A9\uE3AA\uE3AB";
-
-    protected final static short index1[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0, 9, 0, 0,
-        10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
-        26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
-        42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
-        58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
-        74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-    };
-
-    protected final static String index2[] = {
-        innerIndex0,
-        innerIndex1,
-        innerIndex2,
-        innerIndex3,
-        innerIndex4,
-        innerIndex5
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_MS5022X_Encoder.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_MS5022X_Encoder.java
deleted file mode 100755
index 914c65a3..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_MS5022X_Encoder.java
+++ /dev/null
@@ -1,3307 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-
-class JIS_X_0208_MS5022X_Encoder
-{
-    private final static String innerIndex0=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2171\u2172\u0000\u0000\u0000\u2178"+
-        "\u212F\u0000\u0000\u0000\u224C\u0000\u0000\u0000"+
-        "\u216B\u215E\u0000\u0000\u212D\u0000\u2279\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u215F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2160"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2621\u2622\u2623\u2624\u2625\u2626\u2627"+
-        "\u2628\u2629\u262A\u262B\u262C\u262D\u262E\u262F"+
-        "\u2630\u2631\u0000\u2632\u2633\u2634\u2635\u2636"+
-        "\u2637\u2638\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2641\u2642\u2643\u2644\u2645\u2646\u2647"+
-        "\u2648\u2649\u264A\u264B\u264C\u264D\u264E\u264F"+
-        "\u2650\u2651\u0000\u2652\u2653\u2654\u2655\u2656"+
-        "\u2657\u2658\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2727\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2721\u2722\u2723\u2724\u2725\u2726\u2728\u2729"+
-        "\u272A\u272B\u272C\u272D\u272E\u272F\u2730\u2731"+
-        "\u2732\u2733\u2734\u2735\u2736\u2737\u2738\u2739"+
-        "\u273A\u273B\u273C\u273D\u273E\u273F\u2740\u2741"+
-        "\u2751\u2752\u2753\u2754\u2755\u2756\u2758\u2759"+
-        "\u275A\u275B\u275C\u275D\u275E\u275F\u2760\u2761"+
-        "\u2762\u2763\u2764\u2765\u2766\u2767\u2768\u2769"+
-        "\u276A\u276B\u276C\u276D\u276E\u276F\u2770\u2771"+
-        "\u0000\u2757\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u213E\u0000\u0000\u0000\u0000\u213D\u2142\u0000"+
-        "\u2146\u2147\u0000\u0000\u2148\u2149\u0000\u0000"+
-        "\u2277\u2278\u0000\u0000\u0000\u2145\u2144\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2273\u0000\u216C\u216D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u2228\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u216E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2D62\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D64\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u2272\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2D35\u2D36\u2D37\u2D38\u2D39\u2D3A\u2D3B\u2D3C"+
-        "\u2D3D\u2D3E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u222B\u222C\u222A\u222D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u224D\u0000\u224E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u224F\u0000\u225F\u2250\u0000\u0000\u0000\u2260"+
-        "\u223A\u0000\u0000\u223B\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D74\u215D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2265\u0000\u0000\u2267\u2167\u2D78"+
-        "\u225C\u0000\u0000\u0000\u0000\u2142\u0000\u224A"+
-        "\u224B\u2241\u2240\u2269\u226A\u0000\u2D73\u0000"+
-        "\u0000\u0000\u0000\u0000\u2168\u2268\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2266\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2262\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2162\u2261\u0000\u0000\u0000\u0000\u2165\u2166"+
-        "\u0000\u0000\u2263\u2264\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u223E\u223F\u0000\u0000\u223C\u223D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u225D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2D79"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u225E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2D21\u2D22\u2D23\u2D24\u2D25\u2D26\u2D27\u2D28"+
-        "\u2D29\u2D2A\u2D2B\u2D2C\u2D2D\u2D2E\u2D2F\u2D30"+
-        "\u2D31\u2D32\u2D33\u2D34\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2821\u282C\u2822\u282D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2823\u0000\u0000\u282E"+
-        "\u2824\u0000\u0000\u282F\u2826\u0000\u0000\u2831"+
-        "\u2825\u0000\u0000\u2830\u2827\u283C\u0000\u0000"+
-        "\u2837\u0000\u0000\u2832\u2829\u283E\u0000\u0000"+
-        "\u2839\u0000\u0000\u2834\u2828\u0000\u0000\u2838"+
-        "\u283D\u0000\u0000\u2833\u282A\u0000\u0000\u283A"+
-        "\u283F\u0000\u0000\u2835\u282B\u0000\u0000\u283B"+
-        "\u0000\u0000\u2840\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u2836\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2223\u2222\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2225\u2224\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2227\u2226\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2221\u217E"+
-        "\u0000\u0000\u0000\u217B\u0000\u0000\u217D\u217C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u227E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u217A\u2179\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u216A\u0000\u2169\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2276\u0000\u0000\u2275\u0000\u2274"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2121\u2122\u2123\u2137\u0000\u2139\u213A\u213B"+
-        "\u2152\u2153\u2154\u2155\u2156\u2157\u2158\u2159"+
-        "\u215A\u215B\u2229\u222E\u214C\u214D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2141\u0000\u2D60\u2D61"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2421\u2422\u2423\u2424\u2425\u2426\u2427"+
-        "\u2428\u2429\u242A\u242B\u242C\u242D\u242E\u242F"+
-        "\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437"+
-        "\u2438\u2439\u243A\u243B\u243C\u243D\u243E\u243F"+
-        "\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447"+
-        "\u2448\u2449\u244A\u244B\u244C\u244D\u244E\u244F"+
-        "\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457"+
-        "\u2458\u2459\u245A\u245B\u245C\u245D\u245E\u245F"+
-        "\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467"+
-        "\u2468\u2469\u246A\u246B\u246C\u246D\u246E\u246F"+
-        "\u2470\u2471\u2472\u2473\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u212B\u212C\u2135\u2136\u0000"+
-        "\u0000\u2521\u2522\u2523\u2524\u2525\u2526\u2527"+
-        "\u2528\u2529\u252A\u252B\u252C\u252D\u252E\u252F"+
-        "\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537"+
-        "\u2538\u2539\u253A\u253B\u253C\u253D\u253E\u253F"+
-        "\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547"+
-        "\u2548\u2549\u254A\u254B\u254C\u254D\u254E\u254F"+
-        "\u2550\u2551\u2552\u2553\u2554\u2555\u2556\u2557"+
-        "\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F"+
-        "\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567"+
-        "\u2568\u2569\u256A\u256B\u256C\u256D\u256E\u256F"+
-        "\u2570\u2571\u2572\u2573\u2574\u2575\u2576\u0000"+
-        "\u0000\u0000\u0000\u2126\u213C\u2133\u2134\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D6A\u2D6B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D6C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2D65\u2D66\u2D67\u2D68"+
-        "\u2D69\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u2D46\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2D4A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2D41\u0000\u0000\u0000"+
-        "\u2D44\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2D42\u2D4C\u0000\u0000\u2D4B\u2D45"+
-        "\u0000\u0000\u0000\u2D4D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2D47\u0000"+
-        "\u0000\u0000\u0000\u2D4F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D40\u2D4E\u0000\u0000\u2D43\u0000\u0000"+
-        "\u0000\u2D48\u0000\u0000\u0000\u0000\u0000\u2D49"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u2D5F\u2D6F\u2D6E\u2D6D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2D53\u2D54"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2D50\u2D51\u2D52\u0000"+
-        "\u0000\u2D56\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2D55\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2D63\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u306C\u437A\u0000\u3C37\u0000\u0000\u0000\u4B7C"+
-        "\u3E66\u3B30\u3E65\u323C\u0000\u4954\u4D3F\u0000"+
-        "\u5022\u312F\u0000\u0000\u336E\u5023\u4024\u5242"+
-        "\u3556\u4A3A\u0000\u0000\u0000\u0000\u3E67\u0000"+
-        "\u0000\u4E3E\u0000\u0000\u0000\u0000\u4A42\u0000"+
-        "\u0000\u0000\u5024\u0000\u0000\u4366\u0000\u0000"+
-        "\u0000\u5025\u367A\u0000\u0000\u0000\u5026\u0000"+
-        "\u345D\u4330\u0000\u3C67\u5027\u0000\u0000\u5028"+
-        "\u0000\u0000\u5029\u4735\u0000\u3557\u0000\u0000"+
-        "\u0000\u0000\u0000\u4737\u0000\u4663\u3843\u4B33"+
-        "\u0000\u0000\u0000\u0000\u0000\u6949\u502A\u3E68"+
-        "\u502B\u3235\u0000\u0000\u0000\u3665\u3870\u4C69"+
-        "\u0000\u0000\u5626\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4D70\u0000\u467D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3425\u0000"+
-        "\u3535\u0000\u502C\u0000\u0000\u502D\u4E3B\u0000"+
-        "\u4D3D\u4168\u502F\u3B76\u4673\u0000\u5032\u0000"+
-        "\u0000\u313E\u385F\u0000\u385E\u3066\u0000\u0000"+
-        "\u4F4B\u4F4A\u0000\u3A33\u3021\u0000\u5033\u5034"+
-        "\u5035\u4B34\u5036\u0000\u3872\u3067\u4B72\u0000"+
-        "\u357C\u0000\u0000\u357D\u357E\u4462\u4E3C\u0000"+
-        "\u5037\u0000\u0000\u5038\u0000\u0000\u5039\u0000"+
-        "\u0000\u0000\u3F4D\u0000\u0000\u0000\u0000\u0000"+
-        "\u3D3A\u3F4E\u503E\u0000\u503C\u0000\u503D\u3558"+
-        "\u0000\u0000\u3A23\u3270\u0000\u503B\u503A\u4A29"+
-        "\u0000\u0000\u0000\u0000\u3B46\u3B45\u423E\u503F"+
-        "\u4955\u4067\u0000\u0000\u0000\u2138\u5040\u5042"+
-        "\u0000\u0000\u0000\u4265\u4E61\u304A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5041\u323E\u0000"+
-        "\u3644\u0000\u4367\u0000\u0000\u0000\u376F\u5043"+
-        "\u0000\u0000\u0000\u4724\u0000\u0000\u0000\u0000"+
-        "\u0000\u346B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5044\u304B\u0000\u0000\u3860\u346C\u497A"+
-        "\u4832\u3559\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3271\u0000\u5067\u4541\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u476C"+
-        "\u5046\u0000\u0000\u0000\u483C\u0000\u4E62\u0000"+
-        "\u3F2D\u0000\u3B47\u0000\u3B77\u3240\u0000\u0000"+
-        "\u0000\u0000\u0000\u4451\u0000\u0000\u4322\u504A"+
-        "\u0000\u0000\u0000\u0000\u0000\u304C\u4463\u3D3B"+
-        "\u3A34\u4D24\u0000\u424E\u0000\u323F\u0000\u5049"+
-        "\u0000\u4D3E\u5045\u5047\u3A6E\u5048\u5524\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5050\u0000\u0000\u0000\u0000\u0000\u5053"+
-        "\u5051\u0000\u0000\u3242\u0000\u4A3B\u504B\u0000"+
-        "\u0000\u0000\u0000\u504F\u3873\u0000\u0000\u3B48"+
-        "\u0000\u0000\u0000\u3426\u0000\u0000\u5054\u0000"+
-        "\u504C\u0000\u0000\u4E63\u0000\u3B78\u0000\u504D"+
-        "\u0000\u5052\u0000\u0000\u0000\u0000\u5055\u0000"+
-        "\u504E\u0000\u0000\u3621\u0000\u304D\u0000\u0000"+
-        "\u3622\u3241\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5525\u0000\u4B79\u496E\u3874"+
-        "\u0000\u0000\u0000\u0000\u0000\u3F2F\u4E37\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4A58"+
-        "\u0000\u0000\u3738\u4225\u3264\u0000\u0000\u0000"+
-        "\u0000\u0000\u3D53\u0000\u0000\u0000\u5059\u0000"+
-        "\u505E\u505C\u0000\u0000\u5057\u0000\u0000\u422F"+
-        "\u505A\u0000\u505D\u505B\u0000\u4A5D\u0000\u5058"+
-        "\u0000\u3F2E\u0000\u4B73\u505F\u5060\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3D24\u506D"+
-        "\u0000\u0000\u0000\u4750\u0000\u4936\u5068\u0000"+
-        "\u4A70\u0000\u3236\u0000\u0000\u0000\u506C\u0000";
-
-    private final static String innerIndex1=
-        "\u0000\u0000\u0000\u0000\u0000\u5066\u506F\u0000"+
-        "\u0000\u4152\u0000\u3844\u0000\u475C\u0000\u6047"+
-        "\u0000\u506E\u455D\u0000\u5063\u0000\u3876\u0000"+
-        "\u0000\u3875\u5061\u0000\u0000\u0000\u0000\u3C5A"+
-        "\u0000\u5069\u0000\u4A6F\u434D\u5065\u3771\u0000"+
-        "\u5062\u506A\u5064\u4E51\u506B\u4F41\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3666\u0000"+
-        "\u0000\u3770\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5070\u0000\u0000\u0000\u5071"+
-        "\u5075\u304E\u0000\u0000\u0000\u0000\u0000\u4A50"+
-        "\u5074\u0000\u0000\u0000\u0000\u5073\u5077\u0000"+
-        "\u0000\u0000\u5076\u0000\u4464\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3772\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5078\u0000\u0000\u0000"+
-        "\u0000\u0000\u3C45\u0000\u4226\u4465\u3676\u0000"+
-        "\u5079\u0000\u0000\u0000\u0000\u3536\u0000\u0000"+
-        "\u507A\u0000\u0000\u0000\u0000\u507C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4B35\u0000\u0000"+
-        "\u0000\u3766\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3B31\u4877\u507B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3A45\u4D43\u0000\u0000"+
-        "\u0000\u0000\u507E\u5123\u507D\u3A44\u0000\u3D7D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3739\u0000"+
-        "\u0000\u0000\u5124\u0000\u0000\u364F\u0000\u0000"+
-        "\u0000\u5121\u5122\u0000\u0000\u462F\u0000\u417C"+
-        "\u0000\u3623\u0000\u0000\u0000\u4B4D\u5125\u0000"+
-        "\u0000\u0000\u4E3D\u0000\u0000\u0000\u5126\u0000"+
-        "\u0000\u0000\u0000\u5129\u0000\u5127\u0000\u414E"+
-        "\u0000\u0000\u0000\u0000\u0000\u5128\u512A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u512C\u0000\u0000"+
-        "\u0000\u512B\u0000\u4A48\u0000\u0000\u0000\u0000"+
-        "\u3537\u512E\u512F\u0000\u322F\u0000\u0000\u0000"+
-        "\u0000\u512D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3C74\u0000\u5132\u5131\u5130\u0000"+
-        "\u5056\u0000\u5133\u0000\u0000\u0000\u0000\u3D7E"+
-        "\u0000\u5134\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D25\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C59\u0000\u0000\u0000\u0000\u5136"+
-        "\u0000\u0000\u5135\u5138\u5137\u0000\u0000\u5139"+
-        "\u513A\u3074\u0000\u3835\u373B\u3D3C\u437B\u3624"+
-        "\u4068\u3877\u0000\u396E\u513C\u4C48\u4546\u0000"+
-        "\u3B79\u0000\u513B\u0000\u513D\u0000\u0000\u0000"+
-        "\u0000\u0000\u455E\u0000\u3375\u0000\u0000\u0000"+
-        "\u0000\u0000\u513E\u0000\u0000\u467E\u0000\u0000"+
-        "\u4134\u5140\u5141\u482C\u3878\u4F3B\u5142\u0000"+
-        "\u0000\u3626\u0000\u0000\u0000\u4A3C\u4236\u3671"+
-        "\u4535\u0000\u0000\u0000\u3773\u0000\u0000\u0000"+
-        "\u5143\u0000\u5144\u0000\u0000\u4662\u315F\u0000"+
-        "\u0000\u5147\u3A7D\u0000\u5146\u3A46\u0000\u5148"+
-        "\u666E\u5149\u4B41\u514A\u0000\u514B\u514C\u3E69"+
-        "\u0000\u3C4C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3427\u0000\u514F\u0000\u514D\u4C3D\u514E\u0000"+
-        "\u495A\u5150\u5151\u5152\u455F\u0000\u0000\u0000"+
-        "\u5156\u5154\u5155\u5153\u3A63\u5157\u4C6A\u4E64"+
-        "\u0000\u0000\u0000\u0000\u0000\u5158\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4028\u5159\u3D5A\u0000"+
-        "\u0000\u515A\u0000\u437C\u4E3F\u4560\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5245\u0000"+
-        "\u0000\u0000\u0000\u515B\u7425\u3645\u0000\u0000"+
-        "\u515C\u4B5E\u0000\u0000\u0000\u0000\u3D68\u427C"+
-        "\u0000\u515E\u4664\u0000\u0000\u515F\u0000\u0000"+
-        "\u5160\u332E\u0000\u0000\u0000\u5161\u3627\u0000"+
-        "\u464C\u317A\u3D50\u0000\u0000\u4821\u5162\u0000"+
-        "\u4561\u0000\u0000\u3F4F\u5163\u0000\u4A2C\u405A"+
-        "\u3422\u0000\u3429\u5164\u0000\u0000\u5166\u0000"+
-        "\u0000\u373A\u0000\u0000\u5165\u0000\u0000\u4E73"+
-        "\u0000\u0000\u0000\u0000\u0000\u3D69\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u483D\u4A4C\u0000\u5167"+
-        "\u0000\u4D78\u5168\u0000\u0000\u0000\u5169\u0000"+
-        "\u457E\u0000\u0000\u516A\u0000\u0000\u4029\u3A7E"+
-        "\u3774\u516B\u3B49\u396F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4466\u516D\u0000\u0000\u4227"+
-        "\u0000\u0000\u3A6F\u516E\u516F\u4130\u0000\u516C"+
-        "\u0000\u0000\u0000\u0000\u5171\u0000\u4B36\u0000"+
-        "\u0000\u0000\u0000\u3964\u0000\u0000\u5170\u0000"+
-        "\u0000\u0000\u0000\u3775\u3A5E\u476D\u0000\u0000"+
-        "\u0000\u5174\u5172\u0000\u0000\u0000\u0000\u497B"+
-        "\u3E6A\u517B\u3364\u5175\u5173\u414F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5177\u0000\u5176"+
-        "\u0000\u0000\u0000\u3344\u0000\u0000\u0000\u3760"+
-        "\u517C\u4E2D\u0000\u0000\u0000\u5178\u0000\u0000"+
-        "\u0000\u517D\u517A\u0000\u5179\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4E4F\u0000\u0000\u0000\u3879"+
-        "\u3243\u0000\u0000\u4E74\u0000\u0000\u0000\u0000"+
-        "\u0000\u3D75\u4558\u3965\u5222\u5223\u0000\u0000"+
-        "\u0000\u4E65\u0000\u0000\u4F2B\u5225\u0000\u0000"+
-        "\u0000\u387A\u0000\u0000\u5224\u0000\u332F\u0000"+
-        "\u0000\u5226\u0000\u4B56\u0000\u443C\u0000\u4D26"+
-        "\u0000\u4A59\u0000\u0000\u0000\u5227\u0000\u0000"+
-        "\u0000\u0000\u7055\u0000\u0000\u4630\u0000\u5228"+
-        "\u342A\u4C33\u0000\u0000\u0000\u3E21\u5229\u4A67"+
-        "\u522D\u0000\u402A\u522A\u3650\u0000\u522B\u342B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u372E\u522E\u0000\u522F\u0000\u0000"+
-        "\u5230\u5231\u3C5B\u0000\u0000\u0000\u387B\u4C5E"+
-        "\u0000\u4C68\u4677\u0000\u0000\u4A71\u5232\u0000"+
-        "\u5233\u0000\u0000\u0000\u0000\u5235\u0000\u5237"+
-        "\u5236\u0000\u0000\u0000\u0000\u5238\u323D\u4B4C"+
-        "\u0000\u3A7C\u5239\u0000\u0000\u4159\u0000\u0000"+
-        "\u3E22\u3629\u0000\u523A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u485B\u0000\u0000\u0000\u0000\u523B"+
-        "\u0000\u523C\u0000\u523D\u0000\u0000\u0000\u0000"+
-        "\u523E\u4924\u3668\u3065\u0000\u0000\u0000\u463F"+
-        "\u523F\u3D3D\u0000\u4069\u0000\u5241\u5240\u3E23"+
-        "\u3861\u5243\u483E\u0000\u0000\u5244\u0000\u0000"+
-        "\u0000\u485C\u4234\u426E\u3628\u0000\u0000\u466E"+
-        "\u4331\u0000\u476E\u0000\u4B4E\u0000\u5246\u0000"+
-        "\u406A\u0000\u0000\u0000\u0000\u0000\u3735\u0000"+
-        "\u0000\u5247\u0000\u0000\u0000\u0000\u5248\u312C"+
-        "\u3075\u346D\u0000\u4228\u3551\u4D71\u0000\u524B"+
-        "\u3237\u0000\u0000\u524A\u0000\u0000\u0000\u362A"+
-        "\u0000\u0000\u524C\u0000\u4C71\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u524D\u0000"+
-        "\u4E52\u0000\u387C\u0000\u0000\u0000\u0000\u3836"+
-        "\u524E\u0000\u0000\u0000\u0000\u5250\u524F\u0000"+
-        "\u3F5F\u3139\u0000\u0000\u0000\u315E\u5251\u0000"+
-        "\u5252\u0000\u0000\u3837\u0000\u0000\u5253\u0000"+
-        "\u0000\u0000\u0000\u356E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3B32\u5254\u0000\u0000\u0000\u0000"+
-        "\u4B74\u3A35\u355A\u4D27\u4150\u483F\u3C7D\u0000"+
-        "\u0000\u0000\u0000\u0000\u3D47\u0000\u3C68\u3C75"+
-        "\u0000\u3D76\u0000\u4840\u0000\u0000\u0000\u5257"+
-        "\u0000\u3143\u4151\u387D\u3845\u3667\u0000\u0000"+
-        "\u525B\u4321\u427E\u362B\u3E24\u525C\u525A\u3244"+
-        "\u4266\u3C38\u3B4B\u3126\u0000\u0000\u3370\u3966"+
-        "\u3B4A\u0000\u525D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u525E\u0000\u3549\u3346\u0000\u0000\u0000"+
-        "\u3967\u3548\u445F\u3125\u4631\u4C3E\u3921\u4D79"+
-        "\u4547\u387E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u372F\u0000\u5267\u0000\u3663"+
-        "\u4B4A\u0000\u0000\u0000\u0000\u0000\u485D\u0000"+
-        "\u0000\u5266\u0000\u345E\u5261\u5262\u5264\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5265\u0000"+
-        "\u355B\u3F61\u0000\u4A2D\u5263\u525F\u3863\u0000"+
-        "\u5260\u0000\u4F24\u0000\u0000\u0000\u4A72\u0000"+
-        "\u4468\u3862\u3970\u0000\u0000\u0000\u5268\u0000"+
-        "\u0000\u465D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u526C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3C7E\u0000\u3C76\u0000\u0000\u0000\u0000\u0000"+
-        "\u526F\u526D\u0000\u4C23\u0000\u526A\u5273\u526E"+
-        "\u0000\u0000\u0000\u5271\u3846\u4C3F\u0000\u0000"+
-        "\u5272\u0000\u0000\u0000\u5274\u0000\u5276\u0000"+
-        "\u0000\u0000\u0000\u3A70\u4F42\u0000\u526B\u5269"+
-        "\u5275\u0000\u5270\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5278\u0000\u5323\u527A\u0000\u0000"+
-        "\u527E\u0000\u0000\u5321\u527B\u0000\u0000\u533E"+
-        "\u0000\u0000\u3A69\u3331\u0000\u0000\u0000\u0000"+
-        "\u5279\u0000\u0000\u0000\u5325\u3076\u5324\u0000"+
-        "\u3025\u494A\u5322\u0000\u527C\u0000\u0000\u5277"+
-        "\u527D\u3A48\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5326\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3077\u532F\u0000\u0000\u5327\u5328\u0000"+
-        "\u3E25\u4B69\u0000\u0000\u0000\u532D\u532C\u0000"+
-        "\u0000\u0000\u452F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u532E\u0000\u0000\u532B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3134\u0000\u3A36\u3F30"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5329"+
-        "\u4562\u0000\u0000\u0000\u532A\u0000\u3022\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5334\u4D23"+
-        "\u0000\u3E27\u0000\u533A\u0000\u0000\u0000\u0000"+
-        "\u5339\u5330\u0000\u0000\u0000\u0000\u4243\u0000"+
-        "\u5331\u0000\u0000\u0000\u426F\u5336\u3E26\u0000"+
-        "\u0000\u0000\u0000\u0000\u5333\u0000\u0000\u4C64"+
-        "\u0000\u0000\u0000\u373C\u0000\u0000\u5337\u5338"+
-        "\u0000\u0000\u0000\u0000\u5335\u533B\u0000\u0000"+
-        "\u0000\u0000\u0000\u5332\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5341\u5346\u0000\u5342\u0000"+
-        "\u533D\u0000\u0000\u5347\u4131\u0000\u0000\u5349"+
-        "\u0000\u3922\u533F\u437D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5343\u533C\u342D\u0000\u346E\u3365\u5344\u5340"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3776"+
-        "\u534A\u5348\u4153\u354A\u362C\u0000\u5345\u0000"+
-        "\u3674\u0000\u0000\u0000\u0000\u0000\u3144\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u534E\u534C\u0000\u5427"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5351\u0000\u0000\u0000"+
-        "\u0000\u0000\u534B\u0000\u534F\u0000\u0000\u534D"+
-        "\u0000\u0000\u0000\u3B4C\u5350\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5353"+
-        "\u0000\u5358\u0000\u0000\u0000\u5356\u5355\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4332\u0000"+
-        "\u0000\u3245\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5352\u0000\u5354\u3E28"+
-        "\u3133\u0000\u0000\u5357\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u325E\u0000\u0000\u0000\u0000\u0000\u5362"+
-        "\u0000\u3E7C\u535E\u0000\u535C\u0000\u535D\u0000"+
-        "\u535F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u313D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4139\u0000\u5359\u0000"+
-        "\u535A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u337A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5361\u0000\u0000\u0000"+
-        "\u346F\u0000\u5364\u5360\u5363\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4A2E\u0000\u0000\u0000"+
-        "\u4655\u0000\u4838\u0000\u0000\u0000\u0000\u0000"+
-        "\u5366\u0000\u0000\u0000\u0000\u0000\u5365\u3345"+
-        "\u0000\u0000\u5367\u0000\u0000\u0000\u0000\u536A"+
-        "\u0000\u0000\u0000\u0000\u5369\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5368\u0000\u4739\u0000\u0000\u536B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u536C\u0000"+
-        "\u0000\u0000\u0000\u0000\u536E\u0000\u536D\u0000"+
-        "\u0000\u0000\u0000\u0000\u5370\u0000\u0000\u0000"+
-        "\u5373\u5371\u536F\u5372\u0000\u0000\u0000\u0000"+
-        "\u5374\u0000\u0000\u0000\u0000\u0000\u5375\u0000"+
-        "\u0000\u5376\u0000\u5377\u0000\u0000\u0000\u5378"+
-        "\u5145\u0000\u3C7C\u3B4D\u0000\u0000\u3273\u0000"+
-        "\u3078\u0000\u0000\u4344\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5379\u0000"+
-        "\u3A24\u0000\u304F\u3F5E\u0000\u0000\u0000\u0000"+
-        "\u0000\u537A\u3847\u0000\u0000\u3971\u0000\u537C"+
-        "\u537B\u0000\u0000\u4A60\u537D\u0000\u0000\u0000"+
-        "\u5421\u537E\u0000\u5422\u0000\u5423\u0000\u3777"+
-        "\u0000\u0000\u3160\u5424\u0000\u0000\u5426\u0000"+
-        "\u5425\u0000\u0000\u0000\u5428\u0000\u0000\u455A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5429\u3035"+
-        "\u3A5F\u0000\u0000\u0000\u0000\u373D\u0000\u0000"+
-        "\u434F\u0000\u0000\u0000\u0000\u0000\u0000\u542A"+
-        "\u542B\u0000\u0000\u542D\u0000\u0000\u0000\u0000"+
-        "\u542E\u0000\u3A64\u0000\u0000\u0000\u0000\u3651"+
-        "\u0000\u0000\u4B37\u0000\u0000\u0000\u542C\u542F"+
-        "\u3A41\u3923\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5433\u0000\u0000\u3A25\u0000\u4333\u0000"+
-        "\u0000\u5430\u445A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5434"+
-        "\u0000\u0000\u3F62\u0000\u0000\u0000\u0000\u0000"+
-        "\u5432\u5435\u0000\u373F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5436\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5437\u0000\u3924\u3340\u5439\u0000\u0000\u0000"+
-        "\u0000\u0000\u543A\u0000\u0000\u0000\u0000\u0000"+
-        "\u543B\u0000\u0000\u5438\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5431\u0000\u0000\u543C\u0000\u0000\u543D\u0000"+
-        "\u0000\u0000\u0000\u4B64\u0000\u0000\u3E6B\u0000"+
-        "\u0000\u0000\u543F\u5440\u543E\u0000\u5442\u0000"+
-        "\u0000\u0000\u0000\u0000\u4738\u0000\u0000\u3068"+
-        "\u4956\u0000\u0000\u5443\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3E7D\u0000\u0000\u3C39"+
-        "\u0000\u475D\u3470\u0000\u3A6B\u0000\u0000\u0000"+
-        "\u4B59\u0000\u4632\u0000\u0000\u3778\u424F\u0000"+
-        "\u0000\u0000\u5441\u5444\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4244\u0000\u0000"+
-        "\u0000\u5445\u0000\u0000\u0000\u5446\u0000\u0000"+
-        "\u0000\u5448\u0000\u0000\u4469\u0000\u0000\u0000"+
-        "\u0000\u0000\u342E\u0000\u0000\u0000\u0000\u7421"+
-        "\u3161\u4A73\u0000\u0000\u3E6C\u4548\u0000\u0000"+
-        "\u0000\u0000\u3A66\u0000\u0000\u544E\u0000\u0000"+
-        "\u4A3D\u4E5D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3274\u544A\u0000\u0000\u0000\u0000"+
-        "\u0000\u413A\u544D\u0000\u4563\u0000\u0000\u4549"+
-        "\u4564\u4839\u444D\u0000\u0000\u0000\u3A49\u0000"+
-        "\u0000\u0000\u5449\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3176\u0000\u4536\u0000\u0000\u0000\u0000"+
-        "\u544B\u0000\u5447\u0000\u0000\u3F50\u0000\u0000"+
-        "\u0000\u544F\u0000\u0000\u0000\u0000\u3D4E\u0000"+
-        "\u0000\u0000\u0000\u362D\u0000\u5450\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A68\u0000\u0000\u0000\u417D"+
-        "\u0000\u0000\u0000\u0000\u4446\u0000\u0000\u5452"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4B4F\u0000\u0000\u5453\u0000\u0000\u5458\u0000"+
-        "\u0000\u0000\u0000\u4A2F\u0000\u0000\u0000\u0000"+
-        "\u5457\u5451\u5454\u5456\u0000\u0000\u3A26\u0000"+
-        "\u0000\u4A49\u0000\u0000\u0000\u5459\u0000\u4345"+
-        "\u0000\u0000\u3275\u0000\u3E6D\u0000\u0000\u0000"+
-        "\u0000\u545B\u0000\u545A\u0000\u3968\u0000\u545C"+
-        "\u545E\u545D\u0000\u0000\u5460\u0000\u5455\u5462"+
-        "\u0000\u0000\u0000\u0000\u5461\u545F\u0000\u0000"+
-        "\u0000\u0000\u0000\u3B4E\u3F51\u0000\u4154\u5463"+
-        "\u403C\u306D\u4764\u0000\u0000\u0000\u0000\u445B"+
-        "\u0000\u5465\u5464\u5466\u5467\u5468\u0000\u0000"+
-        "\u0000\u0000\u5469\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A51\u546A\u0000\u0000\u0000\u0000\u3246"+
-        "\u546B\u0000\u0000\u0000\u0000\u4D3C\u3330\u0000"+
-        "\u5249\u3D48\u423F\u546C\u4C6B\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C34\u0000\u0000\u546E\u0000\u4267"+
-        "\u0000\u4537\u4240\u4957\u546F\u5470\u317B\u0000"+
-        "\u0000\u3C3A\u5471\u0000\u0000\u0000\u0000\u3050"+
-        "\u5472\u0000\u0000\u0000\u0000\u0000\u5473\u0000"+
-        "\u0000\u0000\u0000\u0000\u3162\u0000\u0000\u3471"+
-        "\u4660\u4A74\u0000\u0000\u0000\u0000\u5477\u4155"+
-        "\u5476\u3740\u0000\u0000\u4B5B\u5475\u0000\u4565"+
-        "\u5479\u0000\u5478\u0000\u0000\u0000\u0000\u0000"+
-        "\u547B\u0000\u547A\u0000\u0000\u317C\u0000\u547C"+
-        "\u3E29\u547E\u4325\u0000\u547D\u0000\u4A33\u0000"+
-        "\u0000\u0000\u0000\u3D77\u455B\u0000\u0000\u0000"+
-        "\u5521\u0000\u0000\u0000\u0000\u3925\u0000\u0000"+
-        "\u0000\u5522\u4721\u485E\u4C51\u0000\u0000\u0000"+
-        "\u0000\u0000\u4725\u0000\u0000\u552B\u0000\u0000"+
-        "\u0000\u0000\u0000\u3538\u0000\u0000\u4D45\u0000"+
-        "\u0000\u4C2F\u0000\u562C\u0000\u5523\u0000\u0000"+
-        "\u0000\u0000\u0000\u5526\u0000\u4245\u0000\u0000"+
-        "\u4B38\u0000\u0000\u0000\u454A\u0000\u0000\u0000"+
-        "\u0000\u0000\u5527\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4B65\u0000\u3A4A\u0000\u0000\u3E2A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5528\u0000"+
-        "\u0000\u3B50\u0000\u3B4F\u0000\u0000\u0000\u0000"+
-        "\u3039\u3848\u0000\u402B\u3051\u0000\u0000\u0000"+
-        "\u0000\u552C\u552D\u0000\u552A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3138\u342F\u0000"+
-        "\u5529\u0000\u4C45\u4931\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3028\u0000"+
-        "\u0000\u0000\u0000\u3079\u0000\u0000\u0000\u3B51"+
-        "\u0000\u3052\u0000\u3023\u0000\u0000\u0000\u0000"+
-        "\u0000\u5532\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5530\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4C3C\u0000\u5533\u0000\u5531\u0000\u0000\u552F"+
-        "\u3F31\u0000\u0000\u0000\u0000\u552E\u0000\u0000"+
-        "\u0000\u4A5A\u0000\u0000\u0000\u0000\u0000\u3864"+
-        "\u0000\u0000\u0000\u0000\u0000\u5537\u5538\u0000"+
-        "\u0000\u0000\u0000\u0000\u3E2B\u0000\u0000\u0000"+
-        "\u5534\u4F2C\u0000\u0000\u0000\u0000\u474C\u0000"+
-        "\u0000\u5536\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3A27\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5539\u0000\u0000\u0000\u4958\u0000"+
-        "\u0000\u0000\u553A\u0000\u5535\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4C3B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u475E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u553B\u4932\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u553C\u5540\u553D\u0000"+
-        "\u0000\u3247\u553F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3C3B\u0000\u553E\u3779\u0000\u0000\u0000"+
-        "\u554C\u0000\u0000\u0000\u0000\u0000\u5545\u5542"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4364\u0000\u5541\u0000\u0000\u5543\u0000"+
-        "\u0000\u5544\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5546\u5547\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3472\u0000\u5549\u5548\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u554A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3E6E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u554D\u0000\u445C\u0000\u0000\u0000"+
-        "\u3145\u0000\u554B\u0000\u0000\u0000\u554E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u554F\u0000"+
-        "\u5552\u0000\u0000\u5550\u0000\u5551\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3B52\u5553\u0000\u0000\u3926\u5554\u0000\u3B7A"+
-        "\u4238\u0000\u5555\u5556\u3B5A\u3927\u0000\u4C52"+
-        "\u0000\u0000\u0000\u3528\u3849\u5557\u3358\u0000"+
-        "\u0000\u5558\u0000\u4239\u0000\u0000\u0000\u0000"+
-        "\u5559\u5623\u0000\u555A\u0000\u555B\u0000\u0000"+
-        "\u555C\u0000\u555E\u0000\u0000\u0000\u0000\u0000"+
-        "\u555F\u0000\u0000\u5560\u0000\u4270\u0000\u3127"+
-        "\u3C69\u3042\u0000\u4157\u3430\u3C35\u0000\u3928"+
-        "\u0000\u0000\u0000\u0000\u0000\u4566\u0000\u3D21"+
-        "\u3431\u4368\u446A\u3038\u3539\u4A75\u0000\u3C42"+
-        "\u0000\u0000\u3552\u406B\u3C3C\u4D28\u5561\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u355C\u0000"+
-        "\u3A4B\u0000\u0000\u3332\u3163\u3E2C\u3248\u0000"+
-        "\u5562\u4D46\u0000\u0000\u0000\u0000\u0000\u3D49"+
-        "\u0000\u0000\u3C64\u5563\u3473\u4652\u4C29\u5564"+
-        "\u0000\u5565\u0000\u0000\u4959\u0000\u0000\u0000"+
-        "\u5567\u0000\u3428\u3677\u5566\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3432\u0000\u3F32\u556B\u3B21"+
-        "\u0000\u3249\u556A\u0000\u5568\u556C\u5569\u472B"+
-        "\u5C4D\u3F33\u0000\u556D\u0000\u0000\u4E40\u0000"+
-        "\u556E\u0000\u0000\u5570\u0000\u437E\u556F\u0000"+
-        "\u4023\u0000\u3B7B\u0000\u0000\u0000\u4250\u3C77"+
-        "\u0000\u4975\u406C\u0000\u3C4D\u5571\u3E2D\u5572"+
-        "\u5573\u3053\u423A\u3F52\u0000\u5574\u4633\u3E2E"+
-        "\u0000\u3E2F\u0000\u5575\u0000\u0000\u406D\u0000"+
-        "\u0000\u0000\u3E30\u0000\u0000\u0000\u0000\u0000"+
-        "\u5576\u0000\u5577\u0000\u4C60\u0000\u0000\u0000"+
-        "\u5578\u0000\u0000\u0000\u0000\u3646\u0000\u0000"+
-        "\u0000\u3D22\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5579\u557A\u3C5C\u3F2C\u4674\u3F54\u4878\u4722"+
-        "\u3649\u557B\u0000\u0000\u0000\u356F\u557C\u0000"+
-        "\u367E\u0000\u464F\u3230\u0000\u3B53\u557D\u5622"+
-        "\u5621\u367D\u0000\u557E\u0000\u4538\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4230\u0000"+
-        "\u454B\u3C48\u0000\u0000\u4158\u4D7A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5624\u0000\u5625\u4656"+
-        "\u0000\u3B33\u0000\u0000\u0000\u0000\u5627\u0000"+
-        "\u0000\u5628\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5629\u0000\u0000\u0000"+
-        "\u3474\u562A\u0000\u0000\u562B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u322C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u413B\u3464\u0000\u562D\u4C28\u0000\u0000\u0000"+
-        "\u0000\u4252\u0000\u3359\u0000\u0000\u562F\u5631"+
-        "\u345F\u0000\u0000\u562E\u5630\u0000\u5633\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5632\u0000\u5634"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5635\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u463D\u362E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3265\u5636\u563B\u0000\u0000\u5639\u0000\u4A77"+
-        "\u4A76\u0000\u0000\u0000\u0000\u0000\u4567\u0000"+
-        "\u0000\u0000\u5638\u3D54\u0000\u5637\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3F72"+
-        "\u0000\u0000\u0000\u563C\u0000\u0000\u3A6A\u0000"+
-        "\u0000\u5642\u0000\u0000\u5643\u563D\u3333\u563E"+
-        "\u5647\u5646\u5645\u5641\u0000\u0000\u0000\u5640"+
-        "\u0000\u0000\u5644\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A78\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u564B\u5648\u0000\u564A\u0000"+
-        "\u4D72\u0000\u5649\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u563F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3F73\u0000\u0000\u564C\u0000\u0000\u3A37"+
-        "\u0000\u0000\u0000\u564D\u0000\u0000\u564E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5651\u0000\u5650\u0000\u0000\u564F"+
-        "\u0000\u0000\u0000\u4568\u563A\u0000\u0000\u0000"+
-        "\u5657\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5653\u0000\u0000"+
-        "\u0000\u0000\u5652\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5654\u0000\u5655\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5658"+
-        "\u0000\u0000\u4E66\u0000\u5659\u5656\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u565A\u0000\u0000\u3460\u565B\u0000\u0000"+
-        "\u0000\u0000\u565D\u565C\u0000\u0000\u565E\u0000"+
-        "\u0000\u0000\u0000\u565F\u0000\u406E\u3D23\u0000"+
-        "\u0000\u3D64\u0000\u4163\u0000\u3929\u3A38\u392A"+
-        "\u3570\u0000\u0000\u5660\u0000\u0000\u3A39\u0000"+
-        "\u0000\u384A\u5661\u4C26\u4743\u5662\u0000\u392B"+
-        "\u0000\u0000\u0000\u342C\u0000\u4327\u3652\u0000"+
-        "\u0000\u0000\u3B54\u495B\u0000\u0000\u4841\u0000"+
-        "\u0000\u0000\u0000\u5663\u3475\u0000\u0000\u0000"+
-        "\u0000\u5666\u0000\u0000\u0000\u0000\u4421\u0000"+
-        "\u0000\u5665\u5664\u5667\u0000\u446B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3F63\u0000\u0000"+
-        "\u0000\u0000\u0000\u3B55\u0000\u404A\u0000\u4253"+
-        "\u3522\u0000\u0000\u4422\u0000\u0000\u5668\u5669"+
-        "\u3E6F\u0000\u0000\u0000\u0000\u4B39\u0000\u0000"+
-        "\u566C\u0000\u0000\u566B\u566A\u497D\u0000\u5673"+
-        "\u0000\u0000\u0000\u0000\u4B5A\u0000\u566D\u0000"+
-        "\u0000\u0000\u0000\u0000\u566F\u4B6B\u0000\u566E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5670"+
-        "\u0000\u4828\u5671\u4A3E\u5672\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3433\u4A3F\u472F\u5674\u5675\u0000"+
-        "\u392C\u3434\u5676\u3838\u4D44\u4D29\u3476\u5678"+
-        "\u0000\u4423\u0000\u392D\u3E31\u0000\u0000\u485F"+
-        "\u0000\u0000\u3E32\u0000\u0000\u0000\u0000\u3D78"+
-        "\u0000\u0000\u0000\u0000\u0000\u446C\u4A79\u4539"+
-        "\u0000\u0000\u392E\u0000\u495C\u0000\u0000\u0000"+
-        "\u5679\u0000\u0000\u0000\u0000\u0000\u4559\u3A42"+
-        "\u0000\u0000\u0000\u384B\u0000\u446D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3043\u3D6E\u392F"+
-        "\u4D47\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u567A\u567B\u4751\u0000\u0000\u0000\u0000"+
-        "\u567C\u4E77\u4F2D\u0000\u0000\u0000\u0000\u567E"+
-        "\u567D\u0000\u0000\u3347\u0000\u0000\u5721\u0000"+
-        "\u0000\u0000\u5724\u5725\u0000\u5723\u0000\u4940"+
-        "\u3E33\u5727\u5726\u5722\u0000\u0000\u0000\u0000"+
-        "\u5728\u5729\u0000\u0000\u572A\u0000\u0000\u0000"+
-        "\u572D\u572B\u0000\u572C\u572E\u0000\u3164\u446E"+
-        "\u572F\u0000\u377A\u3276\u4736\u0000\u5730\u467B"+
-        "\u0000\u4A5B\u0000\u5731\u4F2E\u0000\u0000\u0000"+
-        "\u0000\u5732\u4A40\u5735\u5021\u5031\u0000\u3C30"+
-        "\u4675\u5736\u0000\u355D\u4424\u307A\u5737\u4A26"+
-        "\u3930\u0000\u0000\u4350\u0000\u0000\u0000\u446F"+
-        "\u0000\u0000\u0000\u0000\u0000\u4C6F\u3839\u384C"+
-        "\u0000\u5738\u0000\u0000\u0000\u5739\u0000\u573F"+
-        "\u0000\u3C65\u0000\u0000\u0000\u4425\u0000\u362F"+
-        "\u573A\u0000\u0000\u0000\u492B\u0000\u4346\u0000"+
-        "\u0000\u573B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u573C\u0000\u3630\u0000\u573D\u0000\u573E\u0000"+
-        "\u0000\u5740\u0000\u4576\u0000\u0000\u5741\u5742"+
-        "\u0000\u5743\u0000\u0000\u5734\u5733\u0000\u0000"+
-        "\u0000\u5744\u3741\u0000\u0000\u0000\u4927\u0000"+
-        "\u0000\u3A4C\u4937\u4426\u494B\u5745\u0000\u0000"+
-        "\u3E34\u3146\u0000\u5746\u0000\u0000\u0000\u5747"+
-        "\u0000\u4C72\u0000\u0000\u4860\u0000\u0000\u574A"+
-        "\u317D\u402C\u5749\u5748\u3742\u4254\u0000\u574E"+
-        "\u574C\u0000\u574B\u4E27\u3865\u0000\u0000\u0000"+
-        "\u3D79\u574D\u454C\u3D3E\u0000\u0000\u0000\u4640"+
-        "\u5751\u5750\u0000\u0000\u0000\u0000\u574F\u0000"+
-        "\u5752\u3866\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5753\u497C\u3D5B\u0000\u0000\u5754\u4879\u0000"+
-        "\u0000\u0000\u0000\u4641\u4427\u0000\u0000\u0000"+
-        "\u0000\u4530\u0000\u0000\u5755\u352B\u0000\u0000"+
-        "\u0000\u0000\u0000\u3F34\u0000\u492C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3477\u4726\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5756\u3B56"+
-        "\u4B3A\u4B3B\u0000\u0000\u317E\u575B\u0000\u0000"+
-        "\u4369\u0000\u0000\u0000\u5758\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3277\u0000\u0000\u0000\u0000"+
-        "\u582D\u575A\u0000\u0000\u0000\u4730\u0000\u0000"+
-        "\u5759\u0000\u0000\u5757\u0000\u397A\u0000\u575D";
-
-    private final static String innerIndex2=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5763\u5769"+
-        "\u5761\u0000\u455C\u0000\u0000\u5766\u495D\u0000"+
-        "\u0000\u5760\u0000\u5765\u4E67\u3B57\u0000\u0000"+
-        "\u4255\u575E\u0000\u0000\u0000\u355E\u5768\u402D"+
-        "\u3165\u5762\u3278\u5767\u0000\u0000\u0000\u3631"+
-        "\u0000\u5764\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u576A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u576C\u5776\u5774\u0000\u0000\u5771\u0000"+
-        "\u0000\u0000\u5770\u4E78\u0000\u5772\u0000\u0000"+
-        "\u3632\u0000\u3931\u0000\u0000\u3D7A\u0000\u0000"+
-        "\u0000\u5779\u576B\u0000\u0000\u0000\u0000\u576F"+
-        "\u575F\u0000\u327A\u5773\u5775\u4351\u0000\u0000"+
-        "\u3A28\u3238\u576D\u5778\u5777\u3633\u0000\u4229"+
-        "\u3366\u0000\u0000\u0000\u0000\u3743\u0000\u576E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u577A\u0000\u577D\u5821\u0000\u0000\u0000"+
-        "\u0000\u3C3D\u0000\u5827\u4470\u577B\u0000\u0000"+
-        "\u0000\u0000\u5825\u0000\u3279\u0000\u5823\u5824"+
-        "\u0000\u0000\u577E\u5822\u0000\u0000\u0000\u3867"+
-        "\u4D2A\u0000\u0000\u3435\u0000\u0000\u3159\u5826"+
-        "\u0000\u473A\u302D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4861\u575C\u582C\u5830\u4C65\u0000"+
-        "\u5829\u0000\u0000\u0000\u4569\u582E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3E70\u582F\u4657"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4F47\u0000\u582B\u0000\u0000\u0000\u0000"+
-        "\u5831\u0000\u397B\u0000\u404B\u0000\u0000\u3054"+
-        "\u582A\u5828\u0000\u415A\u0000\u0000\u0000\u577C"+
-        "\u3B34\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4246\u583D\u0000\u415B\u5838\u0000\u5835\u5836"+
-        "\u0000\u3C66\u5839\u583C\u0000\u0000\u0000\u0000"+
-        "\u5837\u3D25\u0000\u583A\u0000\u0000\u5834\u0000"+
-        "\u4C7C\u4C7B\u0000\u0000\u0000\u583E\u583F\u3055"+
-        "\u0000\u0000\u0000\u0000\u0000\u5833\u0000\u0000"+
-        "\u0000\u0000\u3672\u3026\u0000\u0000\u0000\u3436"+
-        "\u0000\u583B\u0000\u0000\u0000\u0000\u0000\u5843"+
-        "\u5842\u0000\u0000\u0000\u5847\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5848\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5846\u5849\u5841\u5845"+
-        "\u0000\u0000\u584A\u0000\u584B\u0000\u0000\u5840"+
-        "\u3B7C\u0000\u5844\u4256\u3932\u5832\u3F35\u0000"+
-        "\u0000\u0000\u0000\u5858\u0000\u4A69\u0000\u0000"+
-        "\u584E\u584F\u5850\u0000\u0000\u5857\u0000\u5856"+
-        "\u0000\u0000\u4B7D\u3437\u0000\u5854\u0000\u3745"+
-        "\u3334\u0000\u0000\u5851\u0000\u0000\u4E38\u5853"+
-        "\u3056\u5855\u0000\u584C\u5852\u5859\u3744\u584D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4D5D\u0000"+
-        "\u0000\u0000\u4D2B\u0000\u0000\u0000\u0000\u585C"+
-        "\u0000\u0000\u5860\u0000\u0000\u0000\u417E\u0000"+
-        "\u4E79\u5861\u0000\u0000\u585E\u0000\u585B\u0000"+
-        "\u0000\u585A\u585F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4A30\u0000\u0000\u4634"+
-        "\u0000\u3746\u0000\u5862\u585D\u0000\u5863\u0000"+
-        "\u0000\u0000\u377B\u0000\u0000\u0000\u3231\u0000"+
-        "\u0000\u0000\u586B\u0000\u0000\u0000\u3438\u0000"+
-        "\u0000\u0000\u0000\u5869\u0000\u0000\u586A\u3A29"+
-        "\u5868\u5866\u5865\u586C\u5864\u586E\u0000\u0000"+
-        "\u327B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5870\u0000\u0000\u586F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4428\u0000\u5873\u0000\u5871\u5867"+
-        "\u377C\u0000\u5872\u0000\u5876\u5875\u5877\u5874"+
-        "\u5878\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5879\u587A\u4A6A\u0000\u587C\u587B\u3D3F\u0000"+
-        "\u402E\u3266\u327C\u0000\u587D\u0000\u303F\u0000"+
-        "\u0000\u0000\u404C\u587E\u0000\u6C43\u5921\u3761"+
-        "\u0000\u5922\u0000\u0000\u0000\u0000\u406F\u0000"+
-        "\u0000\u0000\u5923\u0000\u0000\u0000\u5924\u353A"+
-        "\u5925\u0000\u5926\u5927\u4257\u0000\u0000\u0000"+
-        "\u384D\u0000\u0000\u4C61\u0000\u0000\u0000\u4B3C"+
-        "\u3D6A\u5928\u0000\u0000\u0000\u0000\u0000\u4070"+
-        "\u6E3D\u4862\u0000\u3C6A\u0000\u3A4D\u5929\u0000"+
-        "\u0000\u0000\u0000\u4247\u0000\u4A27\u0000\u0000"+
-        "\u4271\u0000\u0000\u592C\u0000\u0000\u592A\u0000"+
-        "\u592D\u0000\u0000\u592B\u0000\u0000\u0000\u0000"+
-        "\u592E\u0000\u0000\u0000\u0000\u0000\u4A31\u0000"+
-        "\u0000\u3037\u0000\u0000\u0000\u0000\u495E\u0000"+
-        "\u0000\u4863\u0000\u0000\u592F\u0000\u5932\u3E35"+
-        "\u353B\u0000\u5930\u5937\u3E36\u0000\u0000\u0000"+
-        "\u0000\u5931\u4744\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4D5E\u5933\u5934\u5938\u456A\u5935\u3933"+
-        "\u405E\u0000\u0000\u5946\u4834\u0000\u4272\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4864\u5A2D\u0000\u0000\u0000"+
-        "\u0000\u4A7A\u0000\u0000\u0000\u4471\u0000\u0000"+
-        "\u0000\u4B75\u0000\u593B\u3221\u436A\u0000\u0000"+
-        "\u0000\u0000\u5944\u0000\u0000\u4334\u593E\u5945"+
-        "\u5940\u5947\u5943\u0000\u5942\u476F\u0000\u593C"+
-        "\u327D\u593A\u3571\u4273\u5936\u0000\u0000\u5939"+
-        "\u3934\u405B\u0000\u3E37\u5941\u4752\u0000\u0000"+
-        "\u3572\u3348\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3367\u3F21\u5949\u594E"+
-        "\u0000\u594A\u0000\u377D\u0000\u594F\u3B22\u3969"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3D26\u593D"+
-        "\u0000\u3B7D\u594C\u0000\u0000\u0000\u0000\u3B58"+
-        "\u594D\u3044\u0000\u0000\u5948\u0000\u0000\u0000"+
-        "\u0000\u4429\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3573\u0000\u0000\u0000\u0000\u0000\u3634"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u594B"+
-        "\u3027\u0000\u0000\u3A43\u0000\u0000\u0000\u3F36"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4472\u0000\u0000\u4854\u5951\u415E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u422A\u0000\u0000\u3B2B\u5952\u0000\u5954"+
-        "\u5950\u0000\u0000\u0000\u0000\u4A61\u0000\u443D"+
-        "\u0000\u0000\u0000\u0000\u415C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4A7B"+
-        "\u3C4E\u5960\u0000\u595F\u0000\u0000\u3F78\u0000"+
-        "\u0000\u0000\u377E\u0000\u0000\u0000\u5959\u3E39"+
-        "\u0000\u0000\u4668\u4731\u0000\u0000\u0000\u0000"+
-        "\u5957\u0000\u0000\u415D\u0000\u0000\u0000\u0000"+
-        "\u3C78\u595C\u0000\u0000\u3E38\u0000\u5956\u595B"+
-        "\u0000\u0000\u4753\u0000\u0000\u0000\u5955\u0000"+
-        "\u3721\u0000\u0000\u335D\u0000\u0000\u0000\u595D"+
-        "\u4E2B\u3A4E\u4335\u595A\u0000\u405C\u0000\u3935"+
-        "\u3F64\u3166\u413C\u5958\u3545\u0000\u0000\u0000"+
-        "\u0000\u0000\u3747\u0000\u444F\u595E\u0000\u0000"+
-        "\u0000\u0000\u0000\u415F\u0000\u0000\u5961\u0000"+
-        "\u5963\u0000\u0000\u4237\u5969\u0000\u5964\u0000"+
-        "\u0000\u5966\u0000\u0000\u0000\u0000\u0000\u4941"+
-        "\u4473\u0000\u5967\u0000\u0000\u0000\u4D2C\u0000"+
-        "\u0000\u0000\u4D48\u3439\u0000\u0000\u0000\u0000"+
-        "\u0000\u302E\u0000\u5965\u0000\u0000\u0000\u0000"+
-        "\u0000\u5962\u0000\u0000\u0000\u0000\u3478\u0000"+
-        "\u0000\u0000\u0000\u0000\u3167\u0000\u5968\u0000"+
-        "\u0000\u0000\u4D49\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u596C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u423B\u0000\u5973"+
-        "\u0000\u0000\u0000\u596D\u0000\u0000\u596A\u5971"+
-        "\u0000\u0000\u0000\u0000\u5953\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u596E\u0000"+
-        "\u5972\u0000\u0000\u0000\u4842\u456B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u596B\u0000\u596F\u0000"+
-        "\u0000\u0000\u3748\u0000\u0000\u0000\u3A71\u0000"+
-        "\u0000\u0000\u405D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5977\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4526\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5974"+
-        "\u0000\u4B60\u0000\u0000\u0000\u0000\u0000\u5975"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5976\u0000"+
-        "\u4C4E\u0000\u4022\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3762\u0000\u0000\u0000\u0000"+
-        "\u597D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3B35\u597A\u0000\u5979\u0000\u0000"+
-        "\u0000\u0000\u4732\u0000\u0000\u0000\u4635\u0000"+
-        "\u0000\u0000\u0000\u0000\u4531\u597B\u0000\u0000"+
-        "\u0000\u597C\u0000\u496F\u0000\u4745\u3B23\u0000"+
-        "\u4071\u0000\u4B50\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3349\u0000\u5A25\u597E\u0000\u0000\u0000"+
-        "\u0000\u4D4A\u5A27\u0000\u0000\u5A23\u0000\u5A24"+
-        "\u0000\u0000\u0000\u0000\u0000\u4160\u0000\u0000"+
-        "\u0000\u0000\u5A22\u0000\u593F\u0000\u0000\u0000"+
-        "\u5A26\u0000\u5A21\u0000\u0000\u0000\u0000\u0000"+
-        "\u5A2B\u5A2C\u4527\u5A2E\u0000\u0000\u3B24\u5A29"+
-        "\u0000\u0000\u0000\u0000\u353C\u0000\u0000\u5A2F"+
-        "\u0000\u5A28\u5A33\u0000\u5A32\u0000\u5A31\u0000"+
-        "\u0000\u0000\u5A34\u0000\u0000\u5A36\u3E71\u0000"+
-        "\u5A35\u0000\u0000\u0000\u0000\u5A39\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5A37\u0000\u0000\u0000\u5A38\u5970\u0000\u0000"+
-        "\u0000\u0000\u0000\u5A3B\u5A3A\u0000\u0000\u0000"+
-        "\u0000\u0000\u5978\u5A3C\u5A30\u0000\u0000\u3B59"+
-        "\u0000\u0000\u0000\u0000\u5A3D\u5A3E\u5A40\u5A3F"+
-        "\u5A41\u327E\u0000\u3936\u0000\u0000\u4A7C\u402F"+
-        "\u0000\u0000\u0000\u0000\u0000\u384E\u0000\u0000"+
-        "\u5A43\u0000\u0000\u0000\u0000\u5A46\u0000\u4952"+
-        "\u0000\u355F\u0000\u0000\u0000\u5A45\u5A44\u4754"+
-        "\u5A47\u3635\u0000\u0000\u0000\u5A49\u5A48\u0000"+
-        "\u0000\u0000\u343A\u3B36\u0000\u0000\u4658\u0000"+
-        "\u0000\u0000\u0000\u0000\u3749\u0000\u0000\u0000"+
-        "\u3F74\u0000\u5A4A\u0000\u4030\u4528\u0000\u495F"+
-        "\u5A4B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5A4C\u5A4D\u0000\u0000\u0000\u4A38"+
-        "\u555D\u4046\u0000\u0000\u494C\u0000\u3A58\u0000"+
-        "\u4865\u4843\u0000\u0000\u0000\u0000\u0000\u454D"+
-        "\u0000\u4E41\u0000\u5A4F\u3C50\u0000\u0000\u5A50"+
-        "\u0000\u3036\u0000\u0000\u3654\u404D\u0000\u4960"+
-        "\u0000\u0000\u0000\u5A51\u3B42\u4347\u0000\u3B5B"+
-        "\u3F37\u0000\u0000\u0000\u0000\u0000\u0000\u5A52"+
-        "\u0000\u4A7D\u0000\u0000\u3177\u3B5C\u0000\u0000"+
-        "\u0000\u5A55\u0000\u5A53\u5A56\u4E39\u5A54\u0000"+
-        "\u0000\u0000\u0000\u407B\u5A57\u0000\u0000\u4232"+
-        "\u0000\u0000\u5A58\u0000\u0000\u0000\u0000\u347A"+
-        "\u0000\u5A5A\u0000\u5A59\u0000\u0000\u0000\u0000"+
-        "\u5A5B\u5A5C\u347B\u0000\u0000\u467C\u4336\u356C"+
-        "\u3B5D\u4161\u0000\u0000\u3D5C\u3030\u0000\u0000"+
-        "\u0000\u5A5D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3222\u5A61\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3937\u5A60\u0000\u0000\u3A2B\u3E3A"+
-        "\u0000\u0000\u5A5F\u0000\u3E3B\u0000\u4C40\u3A2A"+
-        "\u0000\u0000\u0000\u3057\u404E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5A66\u0000\u0000\u4031"+
-        "\u3147\u0000\u0000\u0000\u0000\u3D55\u0000\u4B66"+
-        "\u3A72\u0000\u0000\u0000\u0000\u3E3C\u0000\u4027"+
-        "\u0000\u0000\u0000\u0000\u5A65\u5A63\u5A64\u0000"+
-        "\u0000\u0000\u0000\u0000\u436B\u0000\u0000\u5B26"+
-        "\u0000\u5A6A\u3B7E\u3938\u5A68\u0000\u0000\u0000"+
-        "\u0000\u5A69\u0000\u3F38\u0000\u0000\u0000\u5A67"+
-        "\u0000\u0000\u3B2F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5A6C\u5A6B\u5A70"+
-        "\u0000\u0000\u5A71\u0000\u5A6D\u0000\u3322\u5A6E"+
-        "\u5A6F\u4855\u0000\u0000\u0000\u0000\u4961\u374A"+
-        "\u5A72\u0000\u0000\u0000\u4032\u0000\u3E3D\u0000"+
-        "\u0000\u0000\u4352\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3647\u0000\u5A73\u5A77\u0000\u0000\u324B"+
-        "\u5A74\u5A76\u0000\u0000\u0000\u0000\u5A75\u0000"+
-        "\u0000\u3D6B\u0000\u0000\u0000\u0000\u4348\u3045"+
-        "\u5A78\u0000\u0000\u0000\u0000\u5A79\u0000\u0000"+
-        "\u0000\u0000\u442A\u0000\u0000\u0000\u4E71\u0000"+
-        "\u0000\u0000\u0000\u3B43\u0000\u0000\u4A6B\u0000"+
-        "\u0000\u0000\u0000\u0000\u4B3D\u0000\u0000\u0000"+
-        "\u5B22\u5A7B\u0000\u0000\u5A7E\u0000\u5A7D\u0000"+
-        "\u0000\u5A7A\u0000\u0000\u5B21\u0000\u0000\u465E"+
-        "\u0000\u5A7C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5B23\u0000"+
-        "\u0000\u3D6C\u5B24\u0000\u4D4B\u4778\u0000\u0000"+
-        "\u5B25\u0000\u0000\u0000\u0000\u0000\u5B27\u0000"+
-        "\u0000\u5B28\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5B29\u0000\u364A\u3148\u3939\u5B2A\u0000\u5B2B"+
-        "\u3D71\u4162\u0000\u0000\u5258\u413E\u413D\u4258"+
-        "\u3A47\u0000\u0000\u5072\u0000\u0000\u0000\u0000"+
-        "\u376E\u4D2D\u0000\u4A7E\u0000\u497E\u0000\u5B2C"+
-        "\u0000\u0000\u0000\u0000\u3A73\u443F\u5B2D\u4F2F"+
-        "\u0000\u0000\u0000\u4B3E\u0000\u442B\u5B2E\u347C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5B2F\u5B30"+
-        "\u4C5A\u0000\u4C24\u4B76\u4B5C\u3B25\u5B32\u0000"+
-        "\u0000\u3C6B\u0000\u0000\u4B51\u0000\u5B34\u5B37"+
-        "\u5B36\u0000\u3479\u0000\u0000\u3560\u0000\u5B33"+
-        "\u0000\u5B35\u0000\u0000\u0000\u0000\u5B38\u0000"+
-        "\u0000\u3F79\u0000\u0000\u0000\u0000\u4D7B\u3049"+
-        "\u3A60\u423C\u0000\u3C5D\u0000\u0000\u3E73\u0000"+
-        "\u0000\u5B3B\u0000\u0000\u454E\u0000\u5B39\u422B"+
-        "\u5B3A\u3E72\u4C5D\u5B3C\u5B3D\u4D68\u0000\u0000"+
-        "\u0000\u0000\u5B42\u0000\u0000\u393A\u0000\u4755"+
-        "\u5B3F\u456C\u5A5E\u5A62\u0000\u354F\u0000\u4747"+
-        "\u0000\u0000\u0000\u0000\u5B41\u0000\u3E3E\u4844"+
-        "\u0000\u0000\u0000\u0000\u0000\u5B47\u0000\u487A"+
-        "\u0000\u5B3E\u0000\u5B44\u5B43\u0000\u0000\u0000"+
-        "\u404F\u0000\u0000\u0000\u0000\u4B6D\u0000\u4E53"+
-        "\u0000\u0000\u4B67\u0000\u324C\u3B5E\u0000\u0000"+
-        "\u4F48\u5B46\u3F75\u0000\u0000\u0000\u5B45\u0000"+
-        "\u0000\u5B40\u0000\u0000\u0000\u0000\u0000\u384F"+
-        "\u0000\u0000\u0000\u5B4C\u5B4A\u0000\u324D\u5B48"+
-        "\u5B4E\u5B54\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4248\u0000\u0000\u4A41\u0000\u5B56\u0000"+
-        "\u0000\u0000\u4922\u0000\u0000\u0000\u5B55\u4770"+
-        "\u4B3F\u343B\u0000\u4077\u3D40\u0000\u0000\u0000"+
-        "\u4453\u0000\u4D2E\u0000\u0000\u5B51\u5B50\u0000"+
-        "\u0000\u0000\u5B52\u0000\u5B4F\u0000\u0000\u5B57"+
-        "\u0000\u5B4D\u0000\u0000\u5B4B\u0000\u5B53\u5B49"+
-        "\u0000\u436C\u0000\u4C78\u3C46\u3A74\u0000\u0000"+
-        "\u0000\u0000\u0000\u3A3A\u0000\u0000\u4B6F\u3341"+
-        "\u0000\u0000\u444E\u464A\u3149\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4072\u0000\u0000\u4034\u372A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5B59\u0000"+
-        "\u0000\u393B\u337C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5B5B\u3374\u5B61\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5B5E\u0000\u4073\u0000\u0000\u0000"+
-        "\u334B\u3A2C\u0000\u0000\u334A\u3A4F\u0000\u0000"+
-        "\u5B5C\u3765\u374B\u456D\u0000\u0000\u5B5A\u0000"+
-        "\u3046\u0000\u0000\u0000\u0000\u5B5D\u5B5F\u0000"+
-        "\u364D\u372C\u0000\u343C\u354B\u0000\u0000\u0000"+
-        "\u0000\u5B62\u0000\u0000\u3A79\u4B71\u0000\u3B37"+
-        "\u0000\u0000\u0000\u5B63\u0000\u0000\u0000\u4930"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5B6F\u0000\u3233\u5B64"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5B75\u5B65"+
-        "\u0000\u4E42\u0000\u5B6C\u0000\u475F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5B74\u0000\u5B67"+
-        "\u0000\u0000\u0000\u3034\u5B69\u0000\u0000\u393C"+
-        "\u0000\u0000\u0000\u5B6B\u0000\u5B6A\u0000\u5B66"+
-        "\u5B71\u0000\u3E3F\u0000\u0000\u0000\u546D\u3868"+
-        "\u4D7C\u0000\u0000\u0000\u0000\u5B68\u0000\u4474"+
-        "\u3323\u3A2D\u0000\u5B60\u0000\u5B70\u3361\u0000"+
-        "\u0000\u5B6E\u5B72\u0000\u456E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u347E\u0000\u5C32\u0000"+
-        "\u0000\u4C49\u5B77\u347D\u0000\u5B7E\u0000\u0000"+
-        "\u0000\u0000\u4B40\u0000\u5C21\u5C23\u0000\u5C27"+
-        "\u5B79\u0000\u432A\u0000\u0000\u0000\u0000\u456F"+
-        "\u5C2B\u5B7C\u0000\u5C28\u0000\u0000\u0000\u5C22"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3F39\u5C2C"+
-        "\u0000\u0000\u4033\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5C2A\u343D\u0000\u0000\u0000\u0000\u0000"+
-        "\u4F50\u5B76\u0000\u0000\u5C26\u3058\u0000\u0000"+
-        "\u5B78\u0000\u0000\u4C3A\u5B7D\u3F22\u4447\u5B73"+
-        "\u0000\u0000\u5C25\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3F7A\u5C2F\u3371\u3821\u0000\u0000\u0000"+
-        "\u0000\u5C31\u5B7A\u5C30\u0000\u5C29\u5B7B\u0000"+
-        "\u5C2D\u0000\u5C2E\u0000\u0000\u0000\u0000\u0000"+
-        "\u5C3F\u0000\u0000\u0000\u464E\u0000\u5C24\u0000"+
-        "\u0000\u5C3B\u0000\u0000\u0000\u5C3D\u0000\u4458"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D4C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4976\u5C38\u424A\u0000\u0000"+
-        "\u0000\u5C3E\u413F\u0000\u5C35\u5C42\u5C41\u0000"+
-        "\u466F\u5C40\u466A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5C44\u5C37\u0000\u3648\u5C3A\u3D5D"+
-        "\u0000\u0000\u0000\u4760\u5C3C\u364B\u0000\u5C34"+
-        "\u5C36\u5C33\u0000\u0000\u4F30\u335A\u5C39\u0000"+
-        "\u0000\u5C43\u3335\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3A67\u0000\u0000\u0000\u315D\u0000"+
-        "\u0000\u5C54\u0000\u0000\u4F31\u5C57\u0000\u0000"+
-        "\u0000\u0000\u0000\u3F3A\u5C56\u0000\u0000\u0000"+
-        "\u5C55\u0000\u0000\u0000\u0000\u0000\u0000\u5C52"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5C46\u0000"+
-        "\u0000\u5C63\u5C45\u0000\u5C58\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5C50\u0000\u0000\u5C4B\u5C48"+
-        "\u0000\u5C49\u0000\u5C51\u0000\u0000\u0000\u7422"+
-        "\u0000\u0000\u5C4E\u393D\u4448\u4164\u5C4C\u0000"+
-        "\u5C47\u0000\u0000\u5C4A\u0000\u0000\u0000\u0000"+
-        "\u4D4D\u4B6A\u0000\u0000\u0000\u5C4F\u5C59\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5C61"+
-        "\u5C5A\u0000\u0000\u5C67\u0000\u5C65\u0000\u0000"+
-        "\u0000\u0000\u5C60\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5C5F\u0000\u4450\u0000\u4165\u0000\u5C5D"+
-        "\u0000\u0000\u5C5B\u0000\u0000\u5C62\u0000\u0000"+
-        "\u0000\u0000\u5C68\u4875\u5C6E\u0000\u0000\u0000"+
-        "\u0000\u0000\u5C69\u5C6C\u5C66\u0000\u0000\u4374"+
-        "\u0000\u4938\u0000\u5C5C\u0000\u0000\u5C64\u3E40"+
-        "\u0000\u4C4F\u5C78\u5C6B\u0000\u0000\u0000\u0000"+
-        "\u0000\u3822\u3223\u335F\u0000\u0000\u5C53\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3E41\u5C70\u0000"+
-        "\u5C77\u3C79\u3372\u0000\u0000\u432E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5C6D\u0000\u0000\u5C72"+
-        "\u5C76\u0000\u0000\u3636\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u354C\u5C74\u0000\u0000\u0000\u0000\u0000\u3521"+
-        "\u0000\u464B\u5C73\u0000\u0000\u0000\u5C75\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5C6F\u0000\u0000\u0000\u0000\u0000"+
-        "\u5C71\u0000\u0000\u0000\u0000\u0000\u0000\u3360"+
-        "\u4349\u0000\u0000\u0000\u5C7C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5C7A\u3869\u0000"+
-        "\u5C79\u0000\u0000\u0000\u0000\u0000\u0000\u5D21"+
-        "\u0000\u0000\u0000\u0000\u5B58\u0000\u0000\u0000"+
-        "\u5C7B\u0000\u5C7D\u5C7E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5D2C\u0000\u5D28\u0000\u5B6D\u0000"+
-        "\u0000\u0000\u0000\u5D27\u0000\u0000\u0000\u0000"+
-        "\u5D26\u0000\u0000\u5D23\u0000\u0000\u0000\u0000"+
-        "\u0000\u5C6A\u5D25\u5D24\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5D2A\u0000\u4F26\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5D2D\u367B\u0000\u0000\u5D29\u5D2B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4827\u0000\u5D2E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5D32\u5D2F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4D73\u5D30\u0000\u0000"+
-        "\u0000\u0000\u5C5E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5D33\u0000\u0000\u0000\u5D34\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3135\u0000\u5D36"+
-        "\u3767\u3C21\u0000\u3655\u0000\u0000\u0000\u3224"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D5F\u0000\u0000\u0000\u0000\u5D38"+
-        "\u5D37\u5D3A\u353D\u0000\u0000\u3656\u343E\u0000"+
-        "\u0000\u0000\u0000\u5D3D\u0000\u0000\u0000\u5D3C"+
-        "\u0000\u5D3E\u0000\u0000\u324E\u0000\u4337\u0000"+
-        "\u5D3F\u0000\u0000\u343F\u5D41\u0000\u0000\u0000"+
-        "\u0000\u5D40\u0000\u5D42\u0000\u0000\u0000\u5D43"+
-        "\u0000\u5D44\u3B5F\u4035\u3A21\u0000\u4970\u0000"+
-        "\u0000\u4A62\u4F44\u0000\u0000\u0000\u0000\u3B75"+
-        "\u0000\u0000\u0000\u3A50\u4E72\u0000\u0000\u0000"+
-        "\u5D45\u5D46\u0000\u3B60\u0000\u0000\u0000\u5D47"+
-        "\u5D48\u0000\u0000\u5D4A\u5D49\u0000\u4B58\u0000"+
-        "\u0000\u3D5E\u3C6C\u3B44\u0000\u5D4B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5D4D\u3F23\u0000"+
-        "\u5D4C\u0000\u0000\u0000\u0000\u0000\u5D4E\u0000"+
-        "\u0000\u0000\u0000\u0000\u5D4F\u0000\u0000\u0000"+
-        "\u0000\u0000\u5D50\u5D51\u0000\u0000\u0000\u5D52"+
-        "\u0000\u5D54\u5D53\u5D55\u3225\u434A\u0000\u5D56"+
-        "\u0000\u0000\u3B26\u334C\u5D57\u0000\u0000\u4542"+
-        "\u544C\u0000\u0000\u0000\u0000\u3523\u5D58\u0000"+
-        "\u0000\u0000\u0000\u5D59\u0000\u4A6C\u4B68\u0000"+
-        "\u0000\u0000\u4647\u5D5A\u4866\u0000\u0000\u0000"+
-        "\u487B\u0000\u0000\u4C53\u0000\u0000\u0000\u5D5B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5D5D\u5D5C\u0000\u0000\u5D5F"+
-        "\u0000\u0000\u0000\u5D5E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5D61\u0000\u0000\u0000\u0000\u0000\u0000\u3B61"+
-        "\u0000\u4C31\u0000\u5D62\u5D63\u0000\u0000\u3524"+
-        "\u0000\u0000\u0000\u5D64\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5D66\u5D65\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3F65\u0000\u0000\u4939"+
-        "\u314A\u0000\u0000\u0000\u0000\u0000\u4845\u0000"+
-        "\u4475\u3D41\u3561\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4846\u0000"+
-        "\u3C2E\u0000\u0000\u0000\u0000\u5D68\u0000\u3440"+
-        "\u0000\u0000\u3178\u0000\u0000\u4672\u5D67\u393E"+
-        "\u4353\u0000\u5D69\u0000\u0000\u0000\u0000\u0000"+
-        "\u5D71\u0000\u5D6A\u0000\u0000\u0000\u0000\u0000"+
-        "\u4241\u0000\u3562\u5D72\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3768\u0000\u0000\u3525\u5D70\u0000"+
-        "\u0000\u5D6E\u5D6B\u4D60\u0000\u0000\u0000\u0000"+
-        "\u4440\u0000\u0000\u0000\u4659\u5D6C\u0000\u0000"+
-        "\u5D74\u0000\u5D73\u3723\u0000\u0000\u322D\u0000"+
-        "\u0000\u3A3B\u5D6D\u5D6F\u0000\u0000\u0000\u0000"+
-        "\u0000\u4B57\u4274\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4B77\u0000\u0000\u5D7C\u0000"+
-        "\u0000\u5D7D\u0000\u324F\u0000\u0000\u0000\u0000"+
-        "\u4A28\u4C7D\u5E21\u3C23\u3E42\u5D78\u5D7E\u3168"+
-        "\u0000\u3637\u0000\u0000\u5D75\u5D7A\u0000\u0000"+
-        "\u0000\u4074\u4771\u0000\u4867\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5D77\u0000\u4B21\u0000\u5D79"+
-        "\u0000\u5E24\u0000\u5E22\u0000\u5D7B\u0000\u0000"+
-        "\u0000\u4B22\u4748\u3563\u0000\u4525\u0000\u0000"+
-        "\u436D\u0000\u5E25\u0000\u0000\u0000\u0000\u5E23"+
-        "\u4259\u5D76\u0000\u314B\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4D4E\u5E30\u0000\u0000\u0000"+
-        "\u0000\u0000\u5E2F\u0000\u0000\u0000\u0000\u4076"+
-        "\u0000\u5E2C\u0000\u4D6C\u0000\u0000\u4636\u5E26"+
-        "\u0000\u0000\u0000\u0000\u0000\u4445\u0000\u0000"+
-        "\u0000\u314C\u393F\u5E29\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3D27\u5E2E\u0000\u5E2D\u5E28\u0000"+
-        "\u5E2B\u0000\u0000\u3368\u0000\u5E2A\u4749\u0000"+
-        "\u0000\u4E2E\u0000\u0000\u3E74\u4075\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5E36\u5E34\u0000\u494D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5E31\u5E33\u0000\u313A\u0000"+
-        "\u0000\u3940\u4F32\u0000\u333D\u0000\u4962\u0000"+
-        "\u0000\u0000\u0000\u0000\u4D61\u0000\u0000\u3324"+
-        "\u3F3B\u5E35\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5E3A\u0000\u0000"+
-        "\u3E43\u0000\u0000\u0000\u4D30\u0000\u5E37\u0000"+
-        "\u0000\u0000\u0000\u5E32\u0000\u5E38\u0000\u0000"+
-        "\u0000\u4E5E\u0000\u4573\u4642\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3336"+
-        "\u0000\u0000\u3155\u0000\u0000\u5E3E\u0000\u0000"+
-        "\u5E41\u0000\u0000\u0000\u4E43\u0000\u0000\u0000"+
-        "\u4D64\u0000\u0000\u0000\u0000\u5E48\u5E42\u5E3F"+
-        "\u0000\u0000\u0000\u4E54\u5E45\u0000\u0000\u0000"+
-        "\u0000\u3D4A\u5E47\u0000\u0000\u5E4C\u0000\u0000"+
-        "\u4571\u5E4A\u0000\u0000\u0000\u0000\u5E44\u0000"+
-        "\u0000\u4338\u0000\u0000\u5E4B\u0000\u5E40\u0000"+
-        "\u5E46\u0000\u5E4D\u307C\u5E43\u0000\u5E4E\u0000"+
-        "\u0000\u3F3C\u0000\u3D5F\u0000\u4A25\u0000\u3A2E"+
-        "\u0000\u5E3B\u5E49\u453A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4036\u0000\u3369"+
-        "\u3A51\u3E44\u5E3D\u3D42\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u374C\u0000\u5E3C\u0000\u0000"+
-        "\u0000\u5E52\u3D6D\u383A\u0000\u5E61\u0000\u5E5B"+
-        "\u3574\u454F\u0000\u5E56\u5E5F\u302F\u3132\u0000"+
-        "\u0000\u3239\u0000\u5E58\u422C\u5E4F\u5E51\u3941"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5E62\u0000\u5E5D\u0000\u0000\u0000\u5E55\u0000"+
-        "\u0000\u0000\u0000\u5E5C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C2B\u0000\u0000\u5E5A\u5E5E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3850\u0000"+
-        "\u3E45\u0000\u0000\u4339\u0000\u0000\u0000\u5E54"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4D2F"+
-        "\u0000\u0000\u0000\u5E57\u0000\u0000\u5E50\u4572"+
-        "\u0000\u0000\u5E53\u0000\u0000\u0000\u5E59\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4F51\u3C3E"+
-        "\u4B7E\u0000\u5E63\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u482E\u0000\u0000\u5E6F"+
-        "\u383B\u0000\u0000\u0000\u0000\u0000\u3D60\u0000"+
-        "\u5E65\u0000\u0000\u0000\u4E2F\u3942\u0000\u5E72"+
-        "\u0000\u0000\u306E\u0000\u0000\u5E70\u0000\u0000"+
-        "\u0000\u0000\u5E64\u0000\u0000\u0000\u0000\u5E6A"+
-        "\u0000\u0000\u5E6C\u0000\u0000\u0000\u4D4F\u5E67"+
-        "\u0000\u0000\u452E\u0000\u0000\u5E69\u0000\u0000"+
-        "\u0000\u0000\u5E71\u0000\u5E6B\u4C47\u0000\u0000"+
-        "\u0000\u5E66\u0000\u3C22\u5E7E\u0000\u0000\u0000"+
-        "\u0000\u336A\u0000\u5E68\u5E6D\u5E6E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u426C\u425A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5E76\u0000\u0000\u5E7C"+
-        "\u0000\u0000\u5E7A\u0000\u4529\u0000\u0000\u5F23"+
-        "\u5E77\u0000\u0000\u0000\u0000\u0000\u5E78\u5E60"+
-        "\u0000\u3579\u493A\u0000\u0000\u0000\u3C3F\u0000"+
-        "\u0000\u3977\u0000\u0000\u0000\u0000\u0000\u4F33"+
-        "\u0000\u5E74\u0000\u5F22\u3169\u4166\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4779\u0000\u3441\u4E7A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4C21\u4452\u0000\u0000\u0000"+
-        "\u0000\u5E7B\u5E7D\u0000\u0000\u0000\u0000\u0000"+
-        "\u4132\u0000\u0000\u0000\u0000\u0000\u5F21\u5E79"+
-        "\u0000\u5E73\u0000\u0000\u0000\u3443\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3769\u0000\u0000\u0000"+
-        "\u5F2F\u0000\u0000\u5F2A\u4078\u0000\u0000\u3363"+
-        "\u0000\u0000\u0000\u0000\u3D61\u0000\u5F33\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F2C\u442C\u5F29"+
-        "\u4459\u0000\u0000\u0000\u5F4C\u0000\u0000\u0000"+
-        "\u5F26\u0000\u5F25\u0000\u5F2E\u0000\u0000\u0000"+
-        "\u5F28\u5F27\u5F2D\u0000\u4021\u0000\u5F24\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5F30\u0000"+
-        "\u0000\u5F31\u0000\u0000\u0000\u0000\u0000\u3442"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F36\u0000\u5F35\u5F37\u0000\u0000\u0000"+
-        "\u0000\u0000\u5F3A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4543\u0000\u5F34\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F38\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3763\u4279\u5F32\u473B\u0000\u0000\u5F39\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5F3E\u5F3C\u0000\u0000"+
-        "\u5F3F\u0000\u0000\u5F42\u0000\u0000\u0000\u5F3B"+
-        "\u396A\u4728\u0000\u0000\u5E39\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4D74\u5F3D\u0000\u5F41\u4275"+
-        "\u0000\u5F40\u0000\u5F2B\u0000\u0000\u6F69\u0000"+
-        "\u0000\u0000\u5F45\u0000\u0000\u0000\u5F49\u0000";
-
-    private final static String innerIndex3=
-        "\u0000\u5F47\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F43\u0000\u5F44\u0000\u0000\u0000\u5F48"+
-        "\u0000\u5F46\u0000\u0000\u0000\u494E\u0000\u0000"+
-        "\u5F4E\u0000\u5F4B\u5F4A\u0000\u5F4D\u4654\u5F4F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4375\u426D"+
-        "\u0000\u0000\u0000\u0000\u4025\u0000\u0000\u0000"+
-        "\u5F50\u0000\u5F52\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5F51\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5E75\u0000\u0000\u0000"+
-        "\u0000\u5F53\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4667\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5F54\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3250\u0000\u0000\u0000\u4574"+
-        "\u3325\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3564\u0000\u0000\u0000\u3C5E\u3A52\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4F27\u3F66\u0000\u0000\u0000\u316A\u0000"+
-        "\u0000\u0000\u5F56\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F55\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5F59\u433A\u5F5C\u5F57"+
-        "\u0000\u0000\u0000\u5F5B\u0000\u0000\u0000\u0000"+
-        "\u5F5A\u4540\u3059\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4E75\u0000\u0000\u5F5E\u0000\u0000\u0000\u3128"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F60\u0000\u0000\u0000\u5F5F\u0000\u5F5D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F58\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4B23\u0000\u0000\u0000\u5F62\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F61\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u316B\u0000\u0000\u0000"+
-        "\u0000\u5F64\u4A32\u0000\u5F63\u0000\u0000\u0000"+
-        "\u0000\u4C35\u0000\u0000\u0000\u0000\u3E47\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4133\u0000"+
-        "\u0000\u0000\u0000\u0000\u3E46\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4E7B\u0000\u0000\u5F6A\u0000\u4079\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F66\u5F6B\u0000"+
-        "\u0000\u316C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5F69\u0000\u4761\u5F65\u5F68\u3E48"+
-        "\u0000\u4851\u0000\u0000\u5F6C\u0000\u3C51\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u407A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5F6F\u0000\u0000\u0000"+
-        "\u5F67\u0000\u3727\u0000\u0000\u0000\u0000\u5F6D"+
-        "\u0000\u0000\u0000\u0000\u4D50\u5F70\u0000\u0000"+
-        "\u0000\u7426\u0000\u0000\u0000\u0000\u0000\u3D4F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5F71\u0000\u0000\u0000\u5F72\u0000\u0000\u0000"+
-        "\u0000\u472E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F74\u0000\u0000\u0000\u0000\u5F75\u0000"+
-        "\u0000\u0000\u0000\u4733\u0000\u0000\u0000\u0000"+
-        "\u4575\u5F77\u0000\u0000\u0000\u0000\u5F79\u0000"+
-        "\u4E55\u0000\u5F76\u0000\u5F78\u316D\u0000\u5F73"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u535B"+
-        "\u5F7A\u0000\u0000\u0000\u0000\u4167\u3B38\u5F7C"+
-        "\u0000\u0000\u0000\u0000\u5F7B\u3F24\u5259\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F7D\u0000\u0000"+
-        "\u0000\u6021\u0000\u5F6E\u5F7E\u0000\u0000\u6022"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u477A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6023\u0000\u0000"+
-        "\u6024\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6025\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6026\u0000\u445E\u0000\u6028\u6027\u0000\u0000"+
-        "\u6029\u0000\u602A\u0000\u0000\u3C5F\u4963\u0000"+
-        "\u0000\u0000\u4C6C\u602B\u602C\u4156\u3C24\u602D"+
-        "\u602E\u0000\u0000\u0000\u0000\u0000\u602F\u4A52"+
-        "\u4847\u0000\u0000\u6030\u4757\u0000\u0000\u0000"+
-        "\u0000\u0000\u442D\u0000\u0000\u0000\u0000\u0000"+
-        "\u6031\u3267\u0000\u356D\u0000\u4C46\u0000\u4C36"+
-        "\u0000\u3234\u4F34\u0000\u0000\u0000\u0000\u4B52"+
-        "\u0000\u4A2A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4037\u0000\u6032\u0000\u0000\u0000"+
-        "\u0000\u4643\u0000\u0000\u0000\u3823\u6033\u0000"+
-        "\u3A54\u6035\u6034\u0000\u0000\u0000\u0000\u6036"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6037\u0000\u0000\u0000\u6038\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u353E\u0000\u6039\u0000\u0000\u0000\u0000\u603A"+
-        "\u0000\u0000\u0000\u0000\u3824\u0000\u0000\u4848"+
-        "\u0000\u0000\u603C\u0000\u0000\u0000\u3E75\u0000"+
-        "\u0000\u603B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3638\u603D\u603F\u0000\u603E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6040\u0000"+
-        "\u3851\u0000\u6041\u0000\u0000\u0000\u0000\u3669"+
-        "\u0000\u4140\u0000\u397D\u0000\u0000\u0000\u0000"+
-        "\u6043\u6044\u6042\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3C6D\u0000\u0000\u4648\u3639\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6046"+
-        "\u432C\u6045\u0000\u0000\u4F35\u4762\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6049\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u604B\u6048"+
-        "\u0000\u0000\u0000\u4C54\u604A\u604C\u0000\u4E44"+
-        "\u0000\u0000\u0000\u0000\u0000\u6050\u0000\u0000"+
-        "\u0000\u604F\u4376\u472D\u0000\u0000\u3825\u604E"+
-        "\u0000\u0000\u0000\u0000\u604D\u0000\u4D31\u4D32"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6051\u316E"+
-        "\u0000\u0000\u0000\u0000\u3976\u3B62\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6052\u6053"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6055"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3D43\u0000\u0000\u0000\u0000"+
-        "\u6057\u0000\u6056\u0000\u0000\u0000\u0000\u0000"+
-        "\u6058\u0000\u334D\u0000\u0000\u605A\u0000\u0000"+
-        "\u6059\u0000\u605C\u605B\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u383C\u0000\u0000\u4E28"+
-        "\u0000\u364C\u0000\u3226\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u366A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3461\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4E68\u605E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6060\u0000\u0000\u0000\u0000"+
-        "\u6061\u0000\u3251\u0000\u0000\u0000\u0000\u0000"+
-        "\u605D\u0000\u3B39\u0000\u0000\u4441\u605F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6064\u0000"+
-        "\u3C6E\u0000\u0000\u0000\u0000\u6062\u0000\u0000"+
-        "\u0000\u0000\u373E\u0000\u0000\u4849\u6063\u0000"+
-        "\u0000\u607E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6069\u0000\u0000\u0000\u0000\u0000\u383D\u0000"+
-        "\u0000\u0000\u0000\u3565\u0000\u6066\u4D7D\u0000"+
-        "\u0000\u4E30\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4276\u0000\u0000\u6068\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u606A\u4E56\u3657\u487C\u474A\u0000"+
-        "\u0000\u0000\u606B\u0000\u0000\u0000\u0000\u606D"+
-        "\u0000\u6070\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u606C\u0000\u0000"+
-        "\u0000\u606F\u386A\u314D\u6071\u0000\u3F70\u606E"+
-        "\u4E5C\u0000\u0000\u6074\u7424\u0000\u0000\u0000"+
-        "\u0000\u6072\u6075\u0000\u0000\u0000\u0000\u6067"+
-        "\u6073\u0000\u0000\u3A3C\u0000\u0000\u6076\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6077\u0000"+
-        "\u0000\u0000\u0000\u4D7E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6078\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6079\u0000"+
-        "\u0000\u0000\u6065\u0000\u0000\u0000\u0000\u607A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3444\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3C25\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u607B\u0000\u0000\u0000\u0000\u607C"+
-        "\u0000\u0000\u0000\u0000\u607D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u313B\u0000\u0000\u0000"+
-        "\u6121\u0000\u493B\u6122\u0000\u0000\u3424\u6123"+
-        "\u0000\u6124\u0000\u0000\u0000\u0000\u6125\u0000"+
-        "\u6127\u6128\u6126\u0000\u0000\u0000\u4953\u612A"+
-        "\u6129\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u612C\u612B\u612D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u612E\u6130\u612F\u0000"+
-        "\u0000\u3979\u0000\u6132\u0000\u6131\u0000\u0000"+
-        "\u3445\u0000\u3F53\u0000\u453C\u0000\u6133\u4038"+
-        "\u0000\u0000\u0000\u3B3A\u0000\u3179\u6134\u0000"+
-        "\u4D51\u0000\u0000\u4A63\u6135\u0000\u0000\u0000"+
-        "\u4544\u4D33\u3943\u3F3D\u0000\u0000\u0000\u434B"+
-        "\u5234\u0000\u442E\u3268\u6136\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6137\u0000\u613C\u0000"+
-        "\u0000\u613A\u6139\u5A42\u3326\u6138\u0000\u305A"+
-        "\u0000\u482A\u0000\u0000\u484A\u0000\u0000\u0000"+
-        "\u0000\u4E31\u613D\u613B\u435C\u4026\u0000\u0000"+
-        "\u482B\u0000\u492D\u0000\u613F\u4E2C\u374D\u6140"+
-        "\u0000\u613E\u4856\u6141\u0000\u6142\u0000\u0000"+
-        "\u305B\u0000\u0000\u3E76\u6147\u0000\u6144\u466D"+
-        "\u6143\u0000\u0000\u0000\u0000\u0000\u0000\u3526"+
-        "\u0000\u0000\u614A\u0000\u0000\u0000\u6145\u6146"+
-        "\u0000\u6149\u6148\u4925\u0000\u0000\u4142\u4141"+
-        "\u0000\u353F\u0000\u0000\u614B\u0000\u0000\u0000"+
-        "\u0000\u0000\u614C\u0000\u0000\u614D\u0000\u0000"+
-        "\u0000\u0000\u0000\u614F\u0000\u614E\u0000\u0000"+
-        "\u0000\u0000\u0000\u3156\u0000\u0000\u0000\u0000"+
-        "\u0000\u6157\u4868\u6151\u0000\u6153\u0000\u0000"+
-        "\u6155\u3F3E\u0000\u0000\u6156\u6154\u3C40\u0000"+
-        "\u0000\u0000\u6150\u6152\u0000\u4942\u0000\u3E49"+
-        "\u0000\u0000\u6159\u0000\u0000\u6158\u0000\u0000"+
-        "\u0000\u0000\u615A\u0000\u3C26\u3A2F\u0000\u0000"+
-        "\u4577\u615B\u0000\u444B\u0000\u0000\u615D\u0000"+
-        "\u0000\u0000\u4E21\u615C\u0000\u0000\u0000\u0000"+
-        "\u0000\u4169\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6162\u0000\u6164\u6165\u4354\u0000\u0000\u0000"+
-        "\u0000\u0000\u6163\u0000\u6160\u0000\u615E\u615F"+
-        "\u0000\u6161\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6168\u0000\u6166\u0000\u6167\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6169"+
-        "\u616B\u616C\u616D\u0000\u616E\u0000\u0000\u616A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6170\u0000\u0000\u0000\u616F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6171\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4E45\u0000\u0000\u0000\u6174\u6172"+
-        "\u6173\u0000\u0000\u0000\u3462\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C7E\u0000\u0000\u0000\u4A4A\u0000"+
-        "\u6176\u0000\u0000\u0000\u6175\u0000\u0000\u0000"+
-        "\u0000\u6177\u6178\u0000\u0000\u0000\u0000\u617C"+
-        "\u6179\u617A\u617B\u0000\u617D\u0000\u0000\u0000"+
-        "\u617E\u0000\u6221\u0000\u0000\u0000\u6222\u0000"+
-        "\u6223\u0000\u482F\u4550\u6224\u4772\u4934\u0000"+
-        "\u6225\u0000\u0000\u6226\u452A\u0000\u3327\u3944"+
-        "\u6227\u0000\u0000\u6228\u0000\u0000\u6229\u0000"+
-        "\u3B29\u0000\u0000\u622B\u0000\u0000\u622A\u0000"+
-        "\u0000\u622C\u622D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4869\u0000"+
-        "\u622E\u0000\u0000\u0000\u622F\u0000\u0000\u7369"+
-        "\u6230\u6231\u6232\u0000\u0000\u0000\u0000\u3B2E"+
-        "\u0000\u0000\u6233\u4756\u0000\u0000\u4B5F\u0000"+
-        "\u314E\u0000\u3157\u0000\u0000\u6234\u0000\u0000"+
-        "\u0000\u0000\u6236\u0000\u0000\u0000\u6235\u4570"+
-        "\u0000\u0000\u0000\u4039\u5D39\u0000\u6237\u4C41"+
-        "\u0000\u6238\u0000\u3446\u4857\u6239\u0000\u623A"+
-        "\u0000\u0000\u623B\u0000\u0000\u0000\u4C5C\u0000"+
-        "\u0000\u0000\u4C55\u0000\u443E\u0000\u0000\u0000"+
-        "\u416A\u0000\u0000\u623D\u0000\u0000\u3D62\u0000"+
-        "\u0000\u3E4A\u0000\u0000\u6240\u0000\u0000\u623F"+
-        "\u623E\u487D\u0000\u3447\u3829\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6246\u0000\u0000\u6243\u3F3F"+
-        "\u4C32\u0000\u0000\u0000\u6242\u6244\u6245\u0000"+
-        "\u0000\u6241\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6247"+
-        "\u6248\u0000\u442F\u0000\u3463\u0000\u0000\u0000"+
-        "\u4365\u0000\u0000\u0000\u0000\u0000\u0000\u6249"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u624A\u624D\u0000\u0000\u0000\u0000"+
-        "\u0000\u3F67\u0000\u4644\u0000\u624E\u4B53\u0000"+
-        "\u624B\u0000\u0000\u624C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6251\u0000\u0000\u0000\u0000\u6250\u624F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6253\u0000\u0000\u6252\u0000"+
-        "\u0000\u6254\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6256\u0000"+
-        "\u6255\u0000\u0000\u0000\u0000\u4A4D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3D56\u4E46\u0000\u0000"+
-        "\u6257\u0000\u0000\u4637\u0000\u0000\u6258\u0000"+
-        "\u0000\u6259\u0000\u625D\u625B\u625C\u0000\u625A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u625E"+
-        "\u0000\u0000\u0000\u0000\u0000\u625F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6260"+
-        "\u0000\u0000\u6261\u4C37\u6262\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C70\u6263\u0000\u434E\u0000\u476A"+
-        "\u0000\u366B\u0000\u0000\u0000\u433B\u6264\u363A"+
-        "\u0000\u0000\u0000\u4050\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6265\u0000\u0000\u0000"+
-        "\u0000\u0000\u3A3D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6266\u0000\u0000\u0000"+
-        "\u0000\u0000\u6267\u0000\u3826\u3A55\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6269\u0000\u0000\u0000\u0000\u4556\u3A56\u354E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4B24\u0000\u474B\u0000\u0000\u0000"+
-        "\u0000\u0000\u4557\u0000\u0000\u0000\u0000\u395C"+
-        "\u0000\u0000\u0000\u0000\u0000\u626B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3E4B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4E32\u3945\u0000\u0000\u3827"+
-        "\u0000\u0000\u4823\u0000\u626D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u626F\u0000\u0000\u0000"+
-        "\u0000\u386B\u0000\u0000\u0000\u0000\u626E\u4476"+
-        "\u0000\u0000\u0000\u0000\u6271\u3337\u626C\u0000"+
-        "\u0000\u486A\u0000\u3130\u0000\u3A6C\u0000\u4F52"+
-        "\u0000\u0000\u6270\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6272\u0000\u0000\u0000\u4A4B"+
-        "\u0000\u4059\u6274\u0000\u0000\u0000\u0000\u6275"+
-        "\u0000\u0000\u0000\u0000\u0000\u6273\u0000\u0000"+
-        "\u0000\u0000\u334E\u0000\u627B\u0000\u627A\u0000"+
-        "\u0000\u3C27\u0000\u0000\u0000\u627C\u6277\u0000"+
-        "\u0000\u0000\u627D\u6278\u0000\u0000\u0000\u0000"+
-        "\u4858\u6276\u0000\u0000\u6279\u0000\u0000\u0000"+
-        "\u0000\u0000\u6322\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6321"+
-        "\u4B61\u0000\u0000\u0000\u627E\u0000\u0000\u306B"+
-        "\u0000\u0000\u0000\u0000\u6324\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6323\u0000\u0000"+
-        "\u0000\u3E4C\u0000\u0000\u0000\u0000\u0000\u6325"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4143\u0000"+
-        "\u0000\u6327\u6326\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6328\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6268\u0000"+
-        "\u0000\u0000\u626A\u632A\u6329\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3C28\u0000\u4E69\u0000\u3C52\u0000"+
-        "\u632B\u3737\u0000\u0000\u0000\u0000\u0000\u3540"+
-        "\u3527\u3B63\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4D34\u0000\u0000\u6331\u0000\u6330\u4144\u632D"+
-        "\u0000\u0000\u632F\u0000\u0000\u3D4B\u3F40\u632E"+
-        "\u632C\u0000\u472A\u0000\u0000\u3E4D\u0000\u0000"+
-        "\u493C\u0000\u0000\u0000\u0000\u3A57\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4578"+
-        "\u0000\u0000\u6332\u0000\u0000\u0000\u0000\u6333"+
-        "\u6349\u3658\u0000\u0000\u4F3D\u4135\u0000\u0000"+
-        "\u0000\u0000\u6334\u0000\u0000\u3252\u4477\u4A21"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6335\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u357A\u6336"+
-        "\u0000\u0000\u6338\u0000\u0000\u0000\u6339\u0000"+
-        "\u4729\u0000\u0000\u633A\u0000\u0000\u0000\u0000"+
-        "\u0000\u633B\u633C\u0000\u0000\u3659\u3253\u4645"+
-        "\u3D28\u3B64\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u633D\u0000\u3D29\u0000\u0000\u0000\u0000"+
-        "\u0000\u324A\u4943\u0000\u0000\u633E\u0000\u0000"+
-        "\u486B\u0000\u0000\u0000\u0000\u0000\u0000\u4145"+
-        "\u0000\u6341\u0000\u6342\u4769\u0000\u3F41\u633F"+
-        "\u0000\u4361\u0000\u0000\u6340\u0000\u0000\u0000"+
-        "\u3E4E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u305C\u0000\u0000\u0000\u0000"+
-        "\u3529\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6343\u0000\u0000\u4478\u0000\u6344\u4047\u0000"+
-        "\u0000\u0000\u0000\u0000\u4C2D\u0000\u0000\u4923"+
-        "\u6345\u6346\u4355\u0000\u4E47\u0000\u0000\u6348"+
-        "\u6347\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3C6F\u0000"+
-        "\u0000\u634A\u3070\u0000\u0000\u0000\u0000\u634D"+
-        "\u0000\u0000\u0000\u634B\u3254\u374E\u634C\u3946"+
-        "\u3972\u0000\u4A66\u634E\u0000\u0000\u4B54\u0000"+
-        "\u0000\u6350\u0000\u0000\u0000\u4051\u314F\u323A"+
-        "\u302C\u0000\u0000\u0000\u0000\u0000\u0000\u634F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6351\u6352\u3E77\u0000\u0000\u0000\u0000"+
-        "\u0000\u6353\u0000\u334F\u0000\u0000\u0000\u0000"+
-        "\u6355\u0000\u0000\u0000\u376A\u0000\u3566\u0000"+
-        "\u0000\u6356\u3675\u0000\u0000\u6357\u0000\u407C"+
-        "\u0000\u464D\u0000\u4060\u3A75\u0000\u0000\u0000"+
-        "\u6358\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4362\u416B\u0000\u635A\u635C\u6359"+
-        "\u635B\u0000\u0000\u0000\u0000\u0000\u0000\u3722"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u635D\u3726\u0000\u0000\u0000\u3567\u4D52"+
-        "\u635F\u0000\u0000\u0000\u0000\u0000\u6360\u0000"+
-        "\u0000\u0000\u312E\u0000\u0000\u0000\u0000\u6363"+
-        "\u0000\u0000\u0000\u3376\u6362\u6361\u0000\u6365"+
-        "\u635E\u0000\u6366\u4E29\u0000\u6367\u0000\u6368"+
-        "\u0000\u0000\u5474\u636A\u0000\u6369\u0000\u0000"+
-        "\u0000\u636B\u636C\u0000\u4E35\u636D\u0000\u706F"+
-        "\u3E4F\u636E\u636F\u3D57\u0000\u4638\u6370\u0000"+
-        "\u0000\u0000\u4328\u0000\u0000\u6371\u0000\u433C"+
-        "\u6372\u0000\u0000\u0000\u0000\u0000\u3625\u0000"+
-        "\u513F\u435D\u3C33\u0000\u0000\u0000\u0000\u3448"+
-        "\u0000\u0000\u6373\u0000\u6422\u0000\u6376\u0000"+
-        "\u3568\u0000\u6375\u6424\u0000\u0000\u0000\u6374"+
-        "\u0000\u3E50\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6378\u6379\u0000\u452B\u0000\u0000\u637A\u0000"+
-        "\u335E\u0000\u0000\u0000\u0000\u3F5A\u4964\u0000"+
-        "\u637C\u0000\u0000\u0000\u4268\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6377\u0000\u637B\u637D\u0000"+
-        "\u0000\u3A7B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6426\u492E\u0000"+
-        "\u4826\u4579\u0000\u365A\u6425\u6423\u0000\u4835"+
-        "\u637E\u435E\u457B\u0000\u457A\u0000\u3A76\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6438\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6428\u0000\u642A"+
-        "\u0000\u0000\u0000\u0000\u642D\u0000\u642E\u0000"+
-        "\u642B\u642C\u0000\u0000\u6429\u6427\u0000\u0000"+
-        "\u0000\u0000\u6421\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4A4F\u3255"+
-        "\u0000\u0000\u0000\u6435\u0000\u6432\u0000\u6437"+
-        "\u0000\u0000\u6436\u0000\u4773\u4C27\u0000\u3B3B"+
-        "\u6430\u6439\u6434\u0000\u6433\u642F\u0000\u6431"+
-        "\u0000\u3449\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u433D\u0000\u0000\u407D\u0000\u0000"+
-        "\u0000\u4822\u0000\u0000\u643E\u0000\u0000\u0000"+
-        "\u4824\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4061\u643B\u0000\u0000\u484F\u0000\u643F\u4A53"+
-        "\u0000\u435B\u0000\u643A\u643C\u0000\u0000\u643D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6440\u0000\u0000"+
-        "\u3C44\u0000\u0000\u0000\u4646\u6445\u6444\u0000"+
-        "\u0000\u6441\u0000\u0000\u0000\u4F36\u0000\u0000"+
-        "\u0000\u0000\u0000\u644A\u0000\u0000\u644E\u644B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6447\u0000\u0000\u0000\u0000\u0000\u0000\u6448"+
-        "\u0000\u0000\u0000\u0000\u0000\u644D\u0000\u0000"+
-        "\u0000\u6442\u5255\u6449\u6443\u0000\u0000\u644C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6452"+
-        "\u0000\u344A\u0000\u644F\u0000\u0000\u0000\u6450"+
-        "\u0000\u0000\u6451\u6454\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6453"+
-        "\u4876\u0000\u0000\u0000\u0000\u6455\u4E7C\u4A6D"+
-        "\u645A\u0000\u0000\u6457\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6456\u4052\u0000\u6459"+
-        "\u645B\u0000\u0000\u0000\u6458\u0000\u645F\u0000"+
-        "\u645C\u0000\u0000\u0000\u0000\u0000\u0000\u645D"+
-        "\u6446\u0000\u0000\u0000\u645E\u6460\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6461\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A46\u0000\u6462\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4C62\u0000"+
-        "\u0000\u364E\u3729\u6463\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A34\u0000\u3F68\u0000\u4C30\u0000\u0000"+
-        "\u6464\u0000\u4E33\u0000\u0000\u4774\u0000\u4146"+
-        "\u4734\u0000\u0000\u3D4D\u0000\u0000\u0000\u3040"+
-        "\u0000\u6469\u6467\u0000\u6465\u3421\u0000\u3E51"+
-        "\u646A\u0000\u0000\u6468\u0000\u6466\u646E\u0000"+
-        "\u0000\u646D\u646C\u646B\u0000\u0000\u0000\u0000"+
-        "\u0000\u646F\u0000\u0000\u0000\u6470\u403A\u0000"+
-        "\u6471\u0000\u6473\u0000\u0000\u6472\u0000\u0000"+
-        "\u0000\u0000\u3852\u0000\u0000\u0000\u4138\u0000"+
-        "\u0000\u0000\u6475\u0000\u0000\u0000\u457C\u0000"+
-        "\u6474\u0000\u0000\u0000\u6476\u0000\u4A35\u416C"+
-        "\u3947\u0000\u6477\u0000\u0000\u0000\u0000\u4E48"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6479"+
-        "\u0000\u0000\u647A\u0000\u647B\u0000\u647C\u0000"+
-        "\u3B65\u0000\u647D\u374F\u0000\u0000\u356A\u0000"+
-        "\u352A\u0000\u6521\u0000\u4C73\u3948\u647E\u0000"+
-        "\u0000\u0000\u6524\u4C66\u0000\u473C\u0000\u0000"+
-        "\u4933\u0000\u0000\u0000\u3D63\u6523\u0000\u3C53"+
-        "\u3949\u3B66\u3569\u4A36\u6522\u0000\u0000\u0000"+
-        "\u4147\u4B42\u3A77\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3B67\u445D\u0000\u6527\u4E5F"+
-        "\u3A59\u0000\u6528\u3F42\u0000\u652A\u0000\u0000"+
-        "\u0000\u3E52\u3A30\u0000\u0000\u0000\u0000\u6529"+
-        "\u0000\u0000\u3D2A\u383E\u4148\u6525\u652B\u0000"+
-        "\u0000\u0000\u0000\u6526\u3750\u0000\u652E\u6532"+
-        "\u376B\u0000\u0000\u0000\u0000\u0000\u652D\u0000"+
-        "\u0000\u0000\u0000\u6536\u0000\u0000\u394A\u0000"+
-        "\u0000\u4D6D\u303C\u6533\u0000\u0000\u356B\u0000"+
-        "\u6530\u0000\u0000\u0000\u0000\u0000\u6531\u0000"+
-        "\u0000\u457D\u652F\u652C\u0000\u3328\u4064\u0000"+
-        "\u0000\u3828\u0000\u0000\u0000\u6538\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6535\u0000\u0000\u0000\u0000\u0000\u6537"+
-        "\u0000\u0000\u0000\u6534\u0000\u0000\u0000\u0000"+
-        "\u0000\u3751\u4233\u6539\u416E\u0000\u0000\u6546"+
-        "\u0000\u0000\u6542\u653C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6540\u3C7A\u305D\u653B\u6543"+
-        "\u6547\u394B\u4C56\u0000\u4456\u653D\u0000\u0000"+
-        "\u6545\u0000\u653A\u433E\u0000\u653F\u303D\u4C4A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u653E"+
-        "\u0000\u0000\u365B\u486C\u0000\u0000\u0000\u416D"+
-        "\u0000\u4E50\u3D6F\u0000\u0000\u656E\u0000\u0000"+
-        "\u6548\u0000\u407E\u0000\u6544\u6549\u654B\u0000"+
-        "\u4479\u654E\u0000\u0000\u654A\u0000\u0000\u0000"+
-        "\u4A54\u344B\u0000\u0000\u4C4B\u0000\u0000\u305E"+
-        "\u0000\u0000\u654D\u0000\u4E7D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u654C\u0000\u0000\u0000\u0000"+
-        "\u0000\u316F\u0000\u0000\u466C\u654F\u0000\u0000"+
-        "\u0000\u6556\u6550\u6557\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6553\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u477B\u0000\u0000\u3C4A\u6555"+
-        "\u0000\u6552\u6558\u6551\u0000\u0000\u3D44\u0000"+
-        "\u0000\u0000\u0000\u4B25\u0000\u0000\u3D4C\u0000"+
-        "\u0000\u6554\u6560\u0000\u0000\u655C\u0000\u655F"+
-        "\u0000\u655D\u6561\u655B\u0000\u6541\u4053\u0000"+
-        "\u0000\u484B\u0000\u655E\u0000\u0000\u6559\u0000"+
-        "\u0000\u0000\u4121\u3752\u0000\u3D2B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3F25\u4136\u6564\u0000"+
-        "\u0000\u6566\u6567\u0000\u0000\u6563\u6565\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u655A\u6562"+
-        "\u0000\u656A\u6569\u0000\u0000\u4B7A\u0000\u0000"+
-        "\u372B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6568\u0000\u656C\u656B\u656F\u0000\u6571"+
-        "\u0000\u0000\u3B3C\u656D\u0000\u0000\u0000\u0000"+
-        "\u6572\u6573\u0000\u0000\u6574\u0000\u657A\u453B"+
-        "\u6576\u0000\u6575\u6577\u6578\u0000\u6579\u0000"+
-        "\u0000\u0000\u0000\u657B\u657C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u344C\u0000"+
-        "\u657D\u0000\u657E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6621\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6622\u6623\u6624\u0000"+
-        "\u6625\u6626\u0000\u0000\u6628\u6627\u0000\u0000"+
-        "\u6629\u0000\u0000\u0000\u0000\u0000\u0000\u662A"+
-        "\u662B\u0000\u0000\u0000\u0000\u0000\u0000\u662E"+
-        "\u662C\u662D\u3A61\u3753\u0000\u0000\u4356\u0000"+
-        "\u4833\u0000\u3D70\u0000\u0000\u474D\u0000\u486D"+
-        "\u662F\u586D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6630\u6632\u0000\u4D65\u6631\u6634"+
-        "\u6633\u0000\u4D53\u0000\u6635\u0000\u487E\u0000"+
-        "\u0000\u0000\u0000\u0000\u6636\u0000\u0000\u0000"+
-        "\u0000\u0000\u6639\u0000\u0000\u6638\u6637\u0000"+
-        "\u0000\u0000\u0000\u663A\u3732\u0000\u0000\u0000"+
-        "\u4122\u3541\u0000\u0000\u0000\u0000\u663E\u663B"+
-        "\u0000\u0000\u663C\u0000\u0000\u0000\u663F\u0000"+
-        "\u6640\u663D\u0000\u0000\u0000\u3129\u0000\u0000"+
-        "\u0000\u3227\u0000\u0000\u0000\u6642\u6643\u0000"+
-        "\u0000\u0000\u6644\u0000\u4D62\u0000\u0000\u0000"+
-        "\u0000\u0000\u3D2C\u0000\u6646\u6645\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3F69\u6647\u0000\u0000\u0000\u0000\u6648\u0000"+
-        "\u0000\u6649\u0000\u3465\u0000\u0000\u0000\u0000"+
-        "\u344D\u0000\u0000\u664A\u0000\u0000\u0000\u0000"+
-        "\u0000\u664B\u0000\u4B5D\u4D63\u0000\u0000\u0000";
-
-    private final static String innerIndex4=
-        "\u4D54\u4F37\u0000\u394D\u664E\u3C54\u664D\u0000"+
-        "\u0000\u0000\u0000\u664F\u3C29\u0000\u0000\u0000"+
-        "\u4251\u0000\u6650\u0000\u0000\u394C\u0000\u4C57"+
-        "\u6651\u6652\u0000\u0000\u6653\u0000\u0000\u0000"+
-        "\u0000\u6654\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6655\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3C2A\u0000\u0000\u4C6D\u0000"+
-        "\u0000\u0000\u0000\u6657\u0000\u433F\u0000\u6656"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6659\u0000"+
-        "\u0000\u0000\u6658\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u665A\u0000\u0000\u0000\u403B\u0000"+
-        "\u665B\u0000\u665C\u0000\u0000\u0000\u4A39\u665D"+
-        "\u0000\u416F\u665E\u0000\u0000\u0000\u0000\u0000"+
-        "\u665F\u0000\u0000\u0000\u0000\u0000\u0000\u4E7E"+
-        "\u6662\u0000\u6661\u6660\u4430\u0000\u6663\u3F26"+
-        "\u0000\u6664\u0000\u0000\u0000\u6665\u4F38\u6666"+
-        "\u0000\u0000\u0000\u0000\u6667\u6669\u6668\u4825"+
-        "\u0000\u4679\u0000\u4F3E\u4829\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u666B\u0000\u0000\u3E53\u0000"+
-        "\u492A\u0000\u666C\u666A\u0000\u344E\u0000\u0000"+
-        "\u0000\u3854\u3B68\u0000\u0000\u486E\u0000\u0000"+
-        "\u0000\u382A\u4B43\u0000\u666F\u666D\u0000\u394E"+
-        "\u0000\u394F\u3069\u0000\u3A68\u0000\u0000\u0000"+
-        "\u0000\u0000\u4759\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u305F\u6674\u0000\u4340\u0000"+
-        "\u0000\u0000\u0000\u0000\u4758\u0000\u425B\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6676\u0000"+
-        "\u0000\u6672\u6675\u6670\u0000\u6673\u4B26\u0000"+
-        "\u0000\u3855\u0000\u0000\u307D\u6671\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6678"+
-        "\u0000\u6679\u0000\u0000\u4639\u0000\u0000\u0000"+
-        "\u363B\u0000\u0000\u0000\u6726\u473D\u0000\u0000"+
-        "\u0000\u0000\u3B69\u0000\u0000\u363C\u4048\u4F46"+
-        "\u4C2E\u6677\u4054\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3553\u667A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u667C\u0000\u0000\u0000\u0000"+
-        "\u0000\u667B\u0000\u0000\u0000\u0000\u0000\u667D"+
-        "\u0000\u4326\u0000\u473E\u0000\u0000\u0000\u0000"+
-        "\u0000\u4431\u0000\u0000\u0000\u0000\u6723\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6722\u0000"+
-        "\u0000\u0000\u0000\u667E\u0000\u0000\u3F55\u0000"+
-        "\u4965\u6725\u0000\u6724\u3950\u4F53\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6735"+
-        "\u0000\u0000\u0000\u0000\u0000\u6729\u672A\u0000"+
-        "\u0000\u0000\u0000\u3C70\u0000\u0000\u6728\u0000"+
-        "\u3978\u6727\u0000\u0000\u672B\u0000\u0000\u0000"+
-        "\u4432\u4A22\u4123\u0000\u0000\u0000\u0000\u425C"+
-        "\u672F\u0000\u6730\u672C\u0000\u0000\u0000\u0000"+
-        "\u672D\u0000\u672E\u0000\u0000\u0000\u0000\u3951"+
-        "\u0000\u0000\u0000\u6736\u0000\u6732\u0000\u0000"+
-        "\u0000\u0000\u4966\u0000\u4B6C\u4928\u0000\u0000"+
-        "\u6731\u0000\u0000\u6734\u6733\u0000\u0000\u0000"+
-        "\u4B44\u6737\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6738\u0000\u0000\u4137\u0000\u6739\u0000\u0000"+
-        "\u673B\u0000\u673F\u0000\u0000\u673C\u673A\u473F"+
-        "\u673D\u0000\u673E\u0000\u0000\u0000\u3232\u0000"+
-        "\u6745\u6740\u0000\u0000\u0000\u6741\u0000\u0000"+
-        "\u0000\u6742\u0000\u4221\u0000\u0000\u0000\u0000"+
-        "\u6744\u6743\u6746\u0000\u0000\u0000\u0000\u6747"+
-        "\u6748\u0000\u0000\u3F43\u0000\u3269\u0000\u6749"+
-        "\u4E57\u0000\u3C2B\u0000\u0000\u3D2D\u0000\u0000"+
-        "\u0000\u0000\u0000\u3B6A\u4357\u0000\u0000\u0000"+
-        "\u0000\u0000\u674A\u674B\u3131\u0000\u674C\u0000"+
-        "\u0000\u674D\u674E\u0000\u0000\u674F\u0000\u6750"+
-        "\u363D\u5A2A\u6751\u0000\u4065\u6752\u3C4B\u0000"+
-        "\u6753\u0000\u5030\u0000\u0000\u0000\u6754\u4A5E"+
-        "\u345C\u0000\u0000\u4124\u3D58\u0000\u4971\u3D2E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6755\u3952\u6756\u484C\u0000\u6764\u0000"+
-        "\u0000\u0000\u0000\u6758\u0000\u4249\u4775\u383F"+
-        "\u6757\u4125\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6759\u0000\u0000\u0000\u0000\u0000\u0000\u447A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u675B\u675A\u675D\u0000\u0000\u675C\u0000\u675E"+
-        "\u0000\u0000\u6760\u0000\u675F\u0000\u344F\u0000"+
-        "\u6761\u0000\u6762\u6763\u0000\u0000\u3A31\u4E49"+
-        "\u0000\u6765\u3F27\u0000\u0000\u0000\u3170\u6766"+
-        "\u6767\u0000\u0000\u0000\u0000\u0000\u6768\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3072\u0000\u6769\u0000\u0000"+
-        "\u0000\u0000\u676A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4967\u0000\u0000\u0000\u3C47\u0000\u676C"+
-        "\u0000\u0000\u0000\u0000\u0000\u3329\u3032\u0000"+
-        "\u0000\u0000\u0000\u676B\u676E\u474E\u0000\u3F44"+
-        "\u0000\u3256\u0000\u4B27\u0000\u0000\u0000\u0000"+
-        "\u375D\u365C\u0000\u676D\u0000\u326A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3423\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3171\u6772\u4E6A\u425D\u0000\u0000\u4944"+
-        "\u0000\u677E\u0000\u3257\u677C\u0000\u677A\u6771"+
-        "\u0000\u676F\u0000\u6770\u0000\u3C63\u366C\u4377"+
-        "\u0000\u0000\u0000\u4651\u0000\u0000\u0000\u0000"+
-        "\u0000\u3151\u0000\u6774\u6773\u0000\u0000\u0000"+
-        "\u0000\u6779\u6775\u6778\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C50\u6777\u3258\u337D\u677B\u0000"+
-        "\u0000\u677D\u0000\u0000\u0000\u0000\u3754\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6823\u682C"+
-        "\u682D\u0000\u0000\u0000\u302B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6834\u0000\u0000\u0000\u0000"+
-        "\u3071\u0000\u0000\u682B\u0000\u0000\u0000\u682A"+
-        "\u0000\u6825\u6824\u0000\u6822\u6821\u4363\u0000"+
-        "\u427B\u6827\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6826\u0000\u0000\u0000\u0000\u6829\u0000\u0000"+
-        "\u0000\u4170\u3755\u0000\u0000\u0000\u0000\u3141"+
-        "\u6828\u0000\u3953\u0000\u0000\u0000\u0000\u0000"+
-        "\u4171\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u683A\u0000\u683B\u0000\u3259"+
-        "\u0000\u0000\u0000\u322E\u6838\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u682E\u0000\u6836"+
-        "\u0000\u683D\u6837\u0000\u0000\u0000\u6835\u0000"+
-        "\u0000\u0000\u0000\u6776\u0000\u0000\u6833\u0000"+
-        "\u0000\u0000\u682F\u0000\u0000\u0000\u3450\u6831"+
-        "\u683C\u0000\u6832\u0000\u0000\u0000\u0000\u0000"+
-        "\u683E\u0000\u6830\u477C\u0000\u0000\u0000\u0000"+
-        "\u0000\u4D69\u0000\u0000\u0000\u6839\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u684F\u0000\u0000"+
-        "\u0000\u6847\u0000\u0000\u0000\u3F7B\u0000\u0000"+
-        "\u0000\u0000\u3546\u0000\u365D\u0000\u6842\u0000"+
-        "\u0000\u0000\u0000\u325B\u0000\u0000\u3E54\u0000"+
-        "\u6845\u0000\u0000\u0000\u3A5A\u0000\u0000\u4551"+
-        "\u684A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A6E\u0000\u6841\u0000\u0000\u0000\u325A"+
-        "\u3856\u4929\u684B\u0000\u683F\u0000\u0000\u6848"+
-        "\u0000\u0000\u0000\u6852\u0000\u6843\u0000\u0000"+
-        "\u0000\u0000\u0000\u6844\u463A\u0000\u0000\u6849"+
-        "\u0000\u0000\u0000\u6846\u4B28\u684C\u3060\u0000"+
-        "\u0000\u0000\u0000\u6840\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u684E\u0000\u684D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u476B\u6854\u0000\u685F\u0000\u0000\u0000"+
-        "\u0000\u337E\u0000\u0000\u0000\u6862\u0000\u0000"+
-        "\u6850\u0000\u0000\u0000\u6855\u4D6E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u685E\u0000"+
-        "\u0000\u4D55\u0000\u0000\u0000\u0000\u4E2A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4378"+
-        "\u0000\u0000\u0000\u336B\u0000\u0000\u0000\u0000"+
-        "\u0000\u4972\u6864\u4621\u0000\u0000\u3031\u0000"+
-        "\u0000\u685D\u0000\u6859\u4172\u6853\u685B\u6860"+
-        "\u0000\u472C\u0000\u0000\u0000\u302A\u0000\u6858"+
-        "\u0000\u6861\u4978\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u685C\u0000\u6857\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3E55\u0000\u0000\u0000\u0000"+
-        "\u3D2F\u0000\u0000\u0000\u3C2C\u0000\u0000\u0000"+
-        "\u0000\u4C58\u0000\u0000\u4947\u0000\u0000\u6867"+
-        "\u0000\u6870\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u685A\u0000\u0000"+
-        "\u0000\u0000\u3377\u0000\u0000\u0000\u0000\u0000"+
-        "\u3E78\u6865\u0000\u686A\u4173\u0000\u0000\u6866"+
-        "\u0000\u686D\u0000\u0000\u435F\u0000\u686E\u0000"+
-        "\u0000\u4D56\u6863\u3338\u0000\u6869\u0000\u0000"+
-        "\u686C\u4C2C\u0000\u0000\u0000\u0000\u686F\u0000"+
-        "\u0000\u6868\u686B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4B29\u0000\u4F21\u0000"+
-        "\u0000\u0000\u0000\u0000\u6873\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u687A\u0000\u0000\u6872"+
-        "\u3C43\u0000\u0000\u0000\u0000\u0000\u6851\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A4E\u0000\u4C22\u6879\u6878\u0000\u6874"+
-        "\u6875\u0000\u3136\u0000\u0000\u0000\u0000\u6877"+
-        "\u0000\u6871\u0000\u0000\u0000\u0000\u4455\u0000"+
-        "\u0000\u0000\u0000\u0000\u6876\u307E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4222\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4A43\u0000\u0000"+
-        "\u687B\u6921\u0000\u4859\u0000\u0000\u0000\u0000"+
-        "\u687E\u3E56\u3C49\u6923\u0000\u0000\u363E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6924\u0000\u4979"+
-        "\u687D\u0000\u6856\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u687C\u0000\u0000\u0000\u0000"+
-        "\u4F4F\u4622\u4973\u0000\u0000\u692B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6931"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6932\u0000"+
-        "\u6925\u0000\u0000\u0000\u4776\u0000\u0000\u692F"+
-        "\u6927\u0000\u6929\u0000\u0000\u0000\u0000\u0000"+
-        "\u6933\u6928\u0000\u0000\u692C\u0000\u0000\u3172"+
-        "\u0000\u4665\u0000\u692D\u6930\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6926\u0000\u4126\u0000"+
-        "\u692A\u3B27\u3F45\u3730\u4C74\u0000\u4C79\u3D72"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6937\u6935\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4F4E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6934\u0000\u0000\u0000\u4D75\u0000\u6936"+
-        "\u6938\u0000\u0000\u0000\u0000\u6939\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u693C\u693A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4623\u693B\u0000\u0000"+
-        "\u0000\u484D\u692E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3D73"+
-        "\u0000\u693D\u6942\u4174\u0000\u0000\u6941\u0000"+
-        "\u0000\u0000\u6922\u0000\u0000\u0000\u6943\u4149"+
-        "\u0000\u0000\u693E\u6940\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u693F\u0000\u0000\u5D31\u5D22"+
-        "\u0000\u0000\u6945\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6944\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4D76\u0000\u623C"+
-        "\u6946\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6947"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6948\u3857\u0000"+
-        "\u3554\u0000\u0000\u0000\u694A\u515D\u0000\u0000"+
-        "\u0000\u0000\u3575\u0000\u4E3A\u0000\u3673\u694B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u694C"+
-        "\u0000\u0000\u0000\u436E\u0000\u0000\u0000\u0000"+
-        "\u0000\u694D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u467A\u0000\u303A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3263\u6952\u6953\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u694E\u0000\u3B3D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u694F\u4742\u0000\u0000\u0000"+
-        "\u0000\u6950\u6951\u695B\u0000\u0000\u0000\u6955"+
-        "\u6958\u0000\u0000\u0000\u0000\u0000\u6954\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6956\u0000\u6957\u3C58"+
-        "\u0000\u6959\u0000\u4341\u0000\u3756\u3342\u0000"+
-        "\u0000\u0000\u0000\u0000\u695C\u0000\u0000\u0000"+
-        "\u0000\u333F\u0000\u6961\u0000\u0000\u695D\u6960"+
-        "\u0000\u0000\u0000\u0000\u483A\u0000\u0000\u0000"+
-        "\u0000\u695E\u0000\u0000\u695F\u4948\u485A\u6962"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u427D\u696C\u0000\u6968\u0000\u0000\u326B\u0000"+
-        "\u6966\u0000\u4B2A\u6967\u0000\u0000\u6964\u0000"+
-        "\u6965\u696A\u696D\u0000\u0000\u696B\u0000\u0000"+
-        "\u0000\u6969\u6963\u0000\u0000\u0000\u0000\u0000"+
-        "\u4358\u0000\u6974\u0000\u4C2A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6972\u0000\u0000"+
-        "\u0000\u6973\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u696E\u0000\u0000\u6970"+
-        "\u0000\u0000\u0000\u6971\u0000\u0000\u0000\u696F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4066\u0000\u4F39\u6978\u0000\u6979\u0000"+
-        "\u0000\u0000\u0000\u6A21\u0000\u3F2A\u0000\u697B"+
-        "\u0000\u697E\u0000\u0000\u0000\u0000\u0000\u6976"+
-        "\u6975\u0000\u0000\u6A22\u0000\u0000\u325C\u0000"+
-        "\u697C\u0000\u6A23\u0000\u0000\u0000\u697D\u0000"+
-        "\u0000\u0000\u0000\u0000\u697A\u0000\u4433\u0000"+
-        "\u6977\u0000\u0000\u0000\u0000\u0000\u0000\u4768"+
-        "\u0000\u0000\u6A27\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4D3B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6A26"+
-        "\u0000\u0000\u6A25\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6A2E\u0000\u0000\u0000\u6A28"+
-        "\u0000\u0000\u0000\u6A30\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D66\u6A33\u0000\u6A2A\u0000\u0000"+
-        "\u6A2B\u0000\u0000\u0000\u6A2F\u0000\u6A32\u6A31"+
-        "\u0000\u0000\u0000\u6A29\u0000\u0000\u0000\u0000"+
-        "\u6A2C\u0000\u6A3D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6A36\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6A34"+
-        "\u0000\u0000\u6A35\u0000\u0000\u0000\u6A3A\u6A3B"+
-        "\u0000\u332A\u0000\u3542\u0000\u0000\u6A39\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A24\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A38\u6A3C\u6A37"+
-        "\u0000\u6A3E\u0000\u0000\u0000\u6A40\u6A3F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6A42\u6A41\u695A\u0000\u0000\u0000\u6A46"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6A43\u0000\u0000\u0000\u0000\u6A44\u0000"+
-        "\u0000\u6A45\u0000\u6A47\u0000\u0000\u0000\u0000"+
-        "\u376C\u0000\u6A49\u0000\u6A48\u0000\u3D30\u0000"+
-        "\u0000\u0000\u0000\u0000\u3954\u5E27\u0000\u0000"+
-        "\u0000\u0000\u6A4A\u3D51\u0000\u0000\u0000\u3339"+
-        "\u0000\u6A4B\u0000\u3152\u0000\u3E57\u6A4C\u0000"+
-        "\u0000\u3955\u6A4D\u3061\u0000\u0000\u0000\u0000"+
-        "\u493D\u0000\u0000\u6A4E\u0000\u0000\u0000\u0000"+
-        "\u3F6A\u0000\u6A55\u0000\u0000\u6A52\u0000\u436F"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A53\u6A50\u365E"+
-        "\u0000\u6A4F\u6A56\u0000\u0000\u0000\u0000\u0000"+
-        "\u3736\u0000\u0000\u425E\u0000\u6A5C\u0000\u0000"+
-        "\u0000\u0000\u6A58\u0000\u0000\u0000\u4235\u6A57"+
-        "\u0000\u6A5A\u0000\u0000\u0000\u0000\u6A51\u0000"+
-        "\u0000\u0000\u6A5B\u0000\u6A5D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u486F\u0000\u0000\u6A59\u0000"+
-        "\u6A5E\u6A60\u0000\u0000\u3853\u6A54\u0000\u3041"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6A5F"+
-        "\u0000\u3A5B\u4E76\u6A61\u6A62\u4175\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4E22"+
-        "\u0000\u0000\u0000\u0000\u6A63\u4D35\u0000\u0000"+
-        "\u6A64\u6A65\u0000\u0000\u4A64\u6A66\u0000\u3A40"+
-        "\u0000\u4E23\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6A6B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6A6C\u3E58\u6A6A\u0000\u0000\u0000"+
-        "\u4D67\u6A67\u0000\u0000\u6A69\u403D\u3F7E\u0000"+
-        "\u0000\u0000\u6A68\u0000\u6A6D\u0000\u0000\u4A23"+
-        "\u0000\u0000\u6A6F\u0000\u6A6E\u0000\u0000\u0000"+
-        "\u336C\u0000\u4B2B\u6A70\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A7C\u6A72\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A73\u0000\u0000"+
-        "\u0000\u0000\u6A74\u6A75\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6A79\u0000"+
-        "\u6A7A\u0000\u0000\u6A78\u0000\u0000\u0000\u0000"+
-        "\u0000\u6A76\u0000\u6A71\u6A77\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6A7B\u7037\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3228\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6A7E\u365F"+
-        "\u6A7D\u0000\u0000\u0000\u6B22\u0000\u6B21\u0000"+
-        "\u0000\u0000\u6B24\u0000\u0000\u6B23\u0000\u6B25"+
-        "\u0000\u0000\u3D31\u0000\u6B26\u0000\u0000\u6B27"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6B28\u403E"+
-        "\u0000\u4D57\u0000\u6B29\u0000\u0000\u4A24\u4746"+
-        "\u6B2A\u0000\u6B2B\u382B\u0000\u0000\u0000\u352C"+
-        "\u0000\u0000\u0000\u6B2C\u0000\u0000\u3B6B\u4741"+
-        "\u6B2D\u0000\u3350\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6B2E\u0000\u0000\u0000\u0000\u6B30\u4D77"+
-        "\u0000\u6B2F\u3F46\u0000\u6B31\u0000\u0000\u6B32"+
-        "\u0000\u0000\u6B33\u3451\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6B34\u0000\u0000\u6B35\u0000\u6B36"+
-        "\u6B37\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3351\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6B38\u0000\u6B39\u6B3A\u0000\u0000"+
-        "\u0000\u0000\u0000\u3272\u0000\u0000\u3F28\u6B3B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6B3C\u0000\u0000\u0000"+
-        "\u6B3D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3840\u0000\u447B\u6B3E\u0000\u0000\u0000\u0000"+
-        "\u3757\u0000\u3F56\u0000\u6B41\u0000\u4624\u0000"+
-        "\u6B40\u0000\u0000\u3731\u0000\u0000\u6B3F\u4277"+
-        "\u352D\u0000\u0000\u6B42\u0000\u6B43\u0000\u3E59"+
-        "\u0000\u0000\u0000\u376D\u0000\u6B44\u0000\u0000"+
-        "\u0000\u0000\u4B2C\u0000\u0000\u405F\u0000\u0000"+
-        "\u0000\u3576\u0000\u4C75\u414A\u0000\u6B45\u0000"+
-        "\u0000\u0000\u3F47\u4370\u3E5A\u0000\u0000\u0000"+
-        "\u0000\u6B46\u0000\u0000\u0000\u0000\u6B49\u0000"+
-        "\u6B4A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3A3E\u4242\u6B48\u0000\u3E5B\u493E\u0000\u0000"+
-        "\u0000\u0000\u0000\u6B47\u0000\u0000\u3B6C\u0000"+
-        "\u3153\u0000\u6B4E\u3758\u0000\u0000\u3B6E\u0000"+
-        "\u0000\u3B6D\u0000\u4F4D\u6B4D\u6B4C\u4127\u0000"+
-        "\u354D\u4F43\u333A\u3E5C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6B4B\u0000\u0000\u0000"+
-        "\u0000\u0000\u6B50\u0000\u6B51\u6B4F\u0000\u3858"+
-        "\u0000\u4D40\u0000\u0000\u3B6F\u4727\u0000\u0000"+
-        "\u0000\u6B54\u0000\u4040\u0000\u4342\u0000\u0000"+
-        "\u4D36\u0000\u6B57\u0000\u0000\u0000\u386C\u0000"+
-        "\u403F\u6B53\u0000\u6B58\u386D\u6B55\u6B56\u0000"+
-        "\u6B52\u0000\u0000\u0000\u4062\u4649\u0000\u0000"+
-        "\u432F\u0000\u325D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4870\u0000\u0000\u3543\u0000\u0000\u4434"+
-        "\u0000\u0000\u6B5B\u0000\u6B59\u0000\u0000\u434C"+
-        "\u0000\u0000\u0000\u4041\u3452\u6B5A\u0000\u3F5B"+
-        "\u0000\u0000\u4E4A\u0000\u0000\u0000\u4F40\u0000"+
-        "\u0000\u0000\u6B5C\u6B67\u4435\u0000\u6B66\u0000"+
-        "\u6B63\u6B6B\u6B64\u0000\u6B60\u0000\u447C\u6B5F"+
-        "\u0000\u0000\u0000\u6B5D\u0000\u4D21\u3B70\u0000"+
-        "\u0000\u6B61\u0000\u6B5E\u0000\u0000\u0000\u6B65"+
-        "\u3D74\u0000\u3841\u0000\u0000\u0000\u427A\u0000"+
-        "\u4B45\u315A\u3062\u0000\u4625\u0000\u0000\u6B69"+
-        "\u0000\u0000\u0000\u0000\u6B68\u0000\u4666\u0000"+
-        "\u6B6D\u0000\u0000\u0000\u6B62\u0000\u6B6C\u6B6E"+
-        "\u0000\u382C\u6B6A\u3956\u0000\u3C55\u0000\u0000"+
-        "\u6B6F\u4D58\u0000\u0000\u0000\u0000\u6B72\u0000"+
-        "\u6B75\u0000\u0000\u6B73\u4935\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6B70\u0000\u0000\u0000\u0000"+
-        "\u0000\u3660\u0000\u0000\u0000\u0000\u6B74\u0000"+
-        "\u0000\u6B76\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6B7A\u0000\u0000\u6B77\u0000\u6B79\u6B78"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6B7B\u0000"+
-        "\u3C31\u0000\u6B7D\u6B7C\u4968\u0000\u0000\u6C21"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3759\u0000"+
-        "\u0000\u0000\u0000\u6B7E\u6C22\u0000\u0000\u6C23"+
-        "\u3544\u6641\u3E79\u0000\u6C24\u0000\u0000\u386E"+
-        "\u0000\u0000\u0000\u0000\u0000\u6C25\u0000\u0000"+
-        "\u6C26\u0000\u0000\u3B3E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5A4E\u0000\u6C27\u0000\u6C28\u0000"+
-        "\u3D32\u0000\u6C29\u6C2A\u0000\u0000\u6C2B\u0000"+
-        "\u0000\u6C2C\u6C2D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u432B"+
-        "\u0000\u0000\u6C2E\u0000\u0000\u0000\u0000\u6C30"+
-        "\u0000\u6C2F\u0000\u0000\u0000\u0000\u4626\u0000"+
-        "\u6C31\u0000\u4B2D\u0000\u6C32\u0000\u6C33\u0000"+
-        "\u6C34\u0000\u0000\u0000\u0000\u6C35\u0000\u0000"+
-        "\u0000\u0000\u465A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3E5D\u6C36\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u396B\u502E\u6C37\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6C38\u493F\u6C39\u0000\u6C41\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C3A\u0000\u0000\u6C3C\u0000\u0000"+
-        "\u0000\u6C3B\u6C3D\u0000\u4B46\u6C3E\u6C3F\u0000"+
-        "\u0000\u0000\u0000\u0000\u6C40\u0000\u0000\u0000"+
-        "\u6C42\u0000\u0000\u0000\u0000\u332D\u4467\u0000"+
-        "\u4969\u3A62\u3957\u0000\u0000\u0000\u0000\u494F"+
-        "\u325F\u484E\u6C45\u3453\u4055\u6C44\u6C49\u4379"+
-        "\u4C63\u0000\u6C47\u6C48\u352E\u0000\u6C4A\u4763"+
-        "\u425F\u0000\u0000\u4871\u453D\u6C46\u0000\u4B47"+
-        "\u326C\u6C4C\u4F28\u4442\u4F45\u0000\u0000\u3B71"+
-        "\u6C4B\u0000\u4231\u0000\u0000\u6C5C\u4128\u0000"+
-        "\u0000\u4678\u0000\u4950\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C4F\u3B3F\u3B72\u0000\u3E5E\u0000"+
-        "\u4765\u0000\u382D\u6C4E\u6C4D\u0000\u496A\u0000"+
-        "\u0000\u0000\u3C41\u0000\u0000\u4552\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C51\u6C52\u3958\u6C50\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6C53\u6C54\u0000\u6C56"+
-        "\u4223\u0000\u6C55\u3466\u0000\u6C58\u0000\u6C57"+
-        "\u6C59\u0000\u0000\u6C5B\u6C5D\u0000\u6C5E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4056\u0000\u3C4F\u6C5F"+
-        "\u0000\u0000\u0000\u3352\u0000\u6C60\u0000\u0000"+
-        "\u4176\u6C61\u0000\u6C62\u496B\u0000\u0000\u352F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6C63\u0000\u0000\u0000\u4436\u0000\u0000"+
-        "\u0000\u0000\u315B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6C64\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3C71\u0000\u0000\u0000\u0000"+
-        "\u3F76\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u422D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C67\u0000\u0000\u0000\u6C66\u0000"+
-        "\u0000\u0000\u6C65\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6C6D\u6C6B\u0000\u0000\u6C68"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6C6A\u0000"+
-        "\u0000\u0000\u6C69\u6C6C\u0000\u3577\u0000\u6C70"+
-        "\u0000\u4057\u0000\u6C71\u0000\u0000\u0000\u0000"+
-        "\u3859\u0000\u6C6E\u6C6F\u0000\u0000\u0000\u4F29"+
-        "\u0000\u0000\u0000\u4437\u0000\u4129\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6C72\u0000\u0000\u6C75"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6C73\u6C74\u4D59\u0000\u0000\u0000\u0000\u4627"+
-        "\u6C78\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6C76\u6C77\u6C79"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D29\u0000\u0000\u0000\u0000\u0000"+
-        "\u6C7C\u0000\u0000\u0000\u6C7D\u6C7B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C7A\u0000\u447D\u0000\u0000\u6D21"+
-        "\u6D25\u6D22\u6C7E\u0000\u6D23\u0000\u0000\u0000"+
-        "\u6D24\u0000\u0000\u0000\u0000\u6D2B\u0000\u0000"+
-        "\u0000\u6D26\u0000\u0000\u0000\u0000\u0000\u4058"+
-        "\u6D28\u0000\u0000\u6D2A\u6D27\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D2D\u0000\u3D33\u0000\u6D2C\u0000"+
-        "\u0000\u0000\u0000\u0000\u6D2E\u0000\u0000\u0000"+
-        "\u0000\u6D2F\u0000\u0000\u6D32\u6D31\u0000\u6D30"+
-        "\u0000\u0000\u6D34\u6D33\u0000\u4C76\u0000\u0000"+
-        "\u0000\u6D36\u0000\u6D35\u6D37\u0000\u0000\u0000"+
-        "\u0000\u6D38\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6D3A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D39\u3F48\u6D3B\u0000\u0000\u366D"+
-        "\u6D3C\u6D3E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6D3F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6D40\u6D3D\u0000"+
-        "\u6D41\u0000\u3C56\u6D42\u3530\u3733\u0000\u0000"+
-        "\u0000\u0000\u382E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6D43\u0000\u0000\u0000\u4670"+
-        "\u0000\u0000\u453E\u6D44\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6D47\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3C34\u0000\u0000\u6D46\u6D45\u375A\u6D48\u0000"+
-        "\u0000\u0000\u0000\u3353\u0000\u6D4A\u0000\u0000"+
-        "\u0000\u3A5C\u6D49\u0000\u6D52\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D4C\u6D4E\u4A65\u6D4B\u0000\u0000"+
-        "\u0000\u6D4D\u0000\u6D51\u6D4F\u3531\u0000\u6D50"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6D53\u0000"+
-        "\u0000\u475A\u4E58\u0000\u0000\u0000\u0000\u3D34"+
-        "\u0000\u0000\u0000\u6D54\u0000\u0000\u0000\u0000"+
-        "\u4D22\u6D56\u0000\u6D55\u0000\u0000\u6D59\u4D41"+
-        "\u0000\u0000\u6D58\u0000\u336D\u6D57\u6D5C\u0000"+
-        "\u0000\u6D5B\u0000\u0000\u6D5A\u4532\u6D5D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6D5E"+
-        "\u0000\u0000\u0000\u0000\u6D5F\u0000\u0000\u396C"+
-        "\u0000\u3725\u6D60\u6D61\u6D62\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3F49\u6D63\u0000\u3C2D\u6D64"+
-        "\u0000\u0000\u0000\u6D65\u0000\u0000\u0000\u5221"+
-        "\u517E\u0000\u0000\u0000\u0000\u6D66\u6570\u6D67"+
-        "\u4324\u3F2B\u4740\u0000\u0000\u0000\u0000\u6D68"+
-        "\u0000\u0000\u4A55\u4454\u397E\u0000\u0000\u4329"+
-        "\u0000\u0000\u312A\u0000\u4B78\u3F57\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u375E\u0000"+
-        "\u0000\u3661\u0000\u0000\u4A56\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D69\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D6B\u0000\u0000\u6D6A\u3260\u0000"+
-        "\u0000\u4676\u6D6C\u4777\u0000\u4533\u0000\u6D6D"+
-        "\u3D52\u0000\u0000\u0000\u6D6F\u0000\u0000\u4C42"+
-        "\u6D7E\u6D71\u6D72\u0000\u0000\u4449\u0000\u0000";
-
-    private final static String innerIndex5=
-        "\u4260\u4177\u0000\u4628\u0000\u6D70\u3555\u0000"+
-        "\u0000\u0000\u0000\u6D79\u0000\u6D76\u6E25\u4629"+
-        "\u4360\u6D73\u0000\u447E\u4553\u6D74\u6D78\u3F60"+
-        "\u0000\u4767\u444C\u0000\u0000\u4042\u6D77\u422E"+
-        "\u4224\u6D75\u3029\u4F22\u0000\u0000\u0000\u6D7A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4261\u0000"+
-        "\u0000\u3D35\u3F4A\u0000\u0000\u6D7C\u6D7B\u0000"+
-        "\u306F\u6D7D\u0000\u0000\u492F\u0000\u6E27\u0000"+
-        "\u0000\u465B\u3F6B\u0000\u0000\u4359\u0000\u3678"+
-        "\u0000\u6E26\u4D37\u313F\u0000\u4A57\u3261\u6E21"+
-        "\u6E22\u6E23\u6E24\u463B\u4323\u3063\u6E28\u0000"+
-        "\u6E29\u7423\u0000\u0000\u423D\u0000\u6E2A\u0000"+
-        "\u3173\u414C\u0000\u382F\u0000\u4D5A\u0000\u0000"+
-        "\u6E2B\u452C\u0000\u0000\u0000\u4178\u3C57\u6E2C"+
-        "\u0000\u0000\u6E2F\u0000\u0000\u3D65\u6E2D\u412B"+
-        "\u412A\u0000\u3064\u0000\u4E4B\u6E31\u0000\u4872"+
-        "\u6E33\u6E32\u6E30\u6364\u3454\u0000\u0000\u6D6E"+
-        "\u0000\u6E35\u6E34\u0000\u0000\u0000\u0000\u6E36"+
-        "\u0000\u4D38\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4661\u0000\u0000\u4B2E\u0000"+
-        "\u6E37\u0000\u3C59\u0000\u0000\u0000\u0000\u6E38"+
-        "\u0000\u6E39\u0000\u0000\u0000\u6E3A\u0000\u0000"+
-        "\u4521\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u306A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3959\u0000\u0000\u0000\u4F3A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6E3E\u0000\u0000\u0000\u0000"+
-        "\u0000\u3734\u6E3B\u0000\u6E3C\u0000\u0000\u0000"+
-        "\u4974\u0000\u0000\u0000\u0000\u3354\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4D39\u0000\u363F"+
-        "\u0000\u0000\u0000\u0000\u0000\u4554\u0000\u0000"+
-        "\u0000\u0000\u6E3F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6E40\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6E41\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4522\u0000\u0000"+
-        "\u6E43\u0000\u6E42\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4653\u6E44\u3D36\u3C60\u475B\u4371\u0000"+
-        "\u0000\u0000\u3C72\u0000\u3F6C\u0000\u6E45\u0000"+
-        "\u6E46\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3F5D\u6E47\u0000\u6E48\u0000\u0000"+
-        "\u0000\u6E49\u4D6F\u0000\u3D37\u0000\u0000\u0000"+
-        "\u0000\u0000\u6E4B\u6E4A\u0000\u395A\u0000\u3973"+
-        "\u3B40\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6E4E\u0000\u0000\u0000\u0000\u3D66"+
-        "\u0000\u6E4D\u0000\u6E4C\u0000\u4269\u0000\u0000"+
-        "\u386F\u0000\u4043\u0000\u0000\u0000\u0000\u4830"+
-        "\u0000\u0000\u0000\u0000\u3D39\u0000\u0000\u0000"+
-        "\u0000\u0000\u6E4F\u0000\u3E5F\u0000\u0000\u0000"+
-        "\u0000\u0000\u6E52\u6E50\u0000\u0000\u0000\u6E51"+
-        "\u0000\u0000\u0000\u0000\u6E54\u6E53\u0000\u0000"+
-        "\u3E7A\u0000\u6E55\u0000\u0000\u0000\u0000\u0000"+
-        "\u6E56\u6E57\u0000\u0000\u0000\u0000\u4850\u3A53"+
-        "\u3C61\u6E58\u0000\u6E59\u4E24\u3D45\u4C6E\u4E4C"+
-        "\u6E5A\u3662\u0000\u0000\u0000\u0000\u6E5B\u0000"+
-        "\u4523\u0000\u0000\u6E5E\u3378\u3F4B\u0000\u6E5C"+
-        "\u0000\u6E5D\u0000\u4460\u0000\u0000\u4B55\u367C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6E60\u6E61\u0000"+
-        "\u0000\u0000\u0000\u0000\u6E5F\u0000\u0000\u6E63"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u465F\u3343\u0000"+
-        "\u0000\u6E67\u0000\u0000\u6E64\u6E66\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6E62\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6F4F\u0000\u0000\u6E65\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4E6B\u0000\u0000\u385A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E6F"+
-        "\u0000\u0000\u0000\u0000\u4534\u6E6A\u0000\u0000"+
-        "\u6E6D\u6E6B\u0000\u6E70\u0000\u0000\u0000\u0000"+
-        "\u6E71\u0000\u0000\u0000\u0000\u0000\u0000\u6E69"+
-        "\u0000\u0000\u6E76\u3174\u0000\u0000\u6E68\u0000"+
-        "\u0000\u0000\u482D\u0000\u6E6C\u0000\u3E60\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u395B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4B48\u0000"+
-        "\u3664\u0000\u0000\u3D46\u0000\u463C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u412D\u0000\u6E74\u0000\u6E6E\u6E73\u0000"+
-        "\u4C43\u0000\u4438\u6E75\u6E72\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u412C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E79"+
-        "\u0000\u6E78\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E77"+
-        "\u0000\u0000\u4B2F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3D7B\u0000\u0000\u0000"+
-        "\u0000\u6E7A\u4A5F\u0000\u0000\u3154\u0000\u0000"+
-        "\u0000\u0000\u4946\u4372\u0000\u0000\u0000\u0000"+
-        "\u3578\u0000\u6E7C\u0000\u395D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3B2C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E7B"+
-        "\u3F6D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3F6E\u6F21\u6F23\u0000\u0000\u0000\u0000\u0000"+
-        "\u3E7B\u0000\u6F22\u6F24\u0000\u0000\u3653\u0000"+
-        "\u4945\u0000\u0000\u3C62\u4F23\u0000\u6E7E\u3A78"+
-        "\u0000\u0000\u4F3F\u0000\u0000\u6F26\u0000\u0000"+
-        "\u0000\u0000\u6F25\u6F27\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6E7D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4669\u0000\u4555\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4457\u0000\u6F2C\u0000"+
-        "\u0000\u0000\u0000\u4343\u6F28\u0000\u0000\u0000"+
-        "\u6F29\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u372D\u0000\u6F2B\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3830\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6F2A\u0000\u3E61\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3379\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6F30\u0000\u3A3F\u4179"+
-        "\u0000\u0000\u444A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u333B"+
-        "\u0000\u0000\u0000\u0000\u6F2E\u6F2F\u4443\u0000"+
-        "\u6F2D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6F31\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6F37\u0000\u0000\u0000\u0000"+
-        "\u6F3A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6F39\u452D\u0000\u0000\u0000\u0000\u6F32\u6F33"+
-        "\u6F36\u0000\u0000\u0000\u0000\u6F38\u0000\u0000"+
-        "\u0000\u3640\u0000\u0000\u6F3B\u6F35\u0000\u0000"+
-        "\u6F34\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6F3F\u0000\u0000\u0000\u6F40"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6F41\u0000\u0000\u6F3E\u6F3D\u0000\u0000\u0000"+
-        "\u3E62\u462A\u6F3C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6F45\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6F43\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6F44\u6F42\u0000"+
-        "\u4278\u0000\u6F46\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6F47\u0000\u0000\u6F49\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3455\u6F48\u4C7A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6F54\u6F4A\u0000\u0000\u6F4D\u0000"+
-        "\u6F4B\u0000\u6F4C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6F4E\u0000\u0000\u0000\u0000\u0000"+
-        "\u6F50\u0000\u0000\u0000\u0000\u6F51\u0000\u6F52"+
-        "\u0000\u0000\u0000\u0000\u6F55\u6F53\u6F56\u6F58"+
-        "\u0000\u6F57\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4439"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4C67\u0000\u6F59\u412E\u0000\u0000\u0000\u6F5A"+
-        "\u0000\u4A44\u6F5B\u332B\u0000\u0000\u0000\u313C"+
-        "\u0000\u3457\u0000\u3456\u6F5C\u0000\u6F5D\u0000"+
-        "\u6F5E\u6F5F\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6F60\u0000\u3458\u3355\u395E\u4836\u0000\u6F62"+
-        "\u6F61\u0000\u0000\u0000\u0000\u6F63\u0000\u0000"+
-        "\u0000\u0000\u315C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6F66\u0000\u6F65\u6F64\u0000\u6F67\u0000"+
-        "\u0000\u0000\u0000\u6F6A\u0000\u0000\u0000\u3047"+
-        "\u0000\u0000\u6F68\u0000\u6F6C\u6F6B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6F6E\u6F6D\u6F6F\u0000"+
-        "\u462E\u0000\u0000\u0000\u6F70\u0000\u0000\u0000"+
-        "\u0000\u6F71\u6F73\u0000\u0000\u6F72\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u496C\u0000\u0000\u0000"+
-        "\u0000\u6F74\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6F75\u0000\u3A65\u0000\u0000\u0000\u6F76\u6F77"+
-        "\u0000\u0000\u4B49\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u414B\u0000\u0000\u0000\u3024"+
-        "\u424B\u0000\u6F78\u0000\u496D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6F7B\u6F79\u395F\u0000\u6F7A"+
-        "\u3842\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A45\u6F7D\u7021\u6F7E\u7022"+
-        "\u0000\u0000\u3121\u3F58\u3D7C\u3459\u7023\u0000"+
-        "\u0000\u0000\u4766\u0000\u7025\u0000\u0000\u0000"+
-        "\u3122\u0000\u7024\u4444\u0000\u4E4D\u462B\u6F7C"+
-        "\u4E26\u0000\u3831\u0000\u0000\u4D5B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3679\u4E34\u0000"+
-        "\u3728\u0000\u4262\u6721\u0000\u7026\u332C\u3F6F"+
-        "\u0000\u0000\u0000\u0000\u3356\u7028\u0000\u7029"+
-        "\u7027\u3764\u0000\u3A5D\u3E63\u0000\u0000\u0000"+
-        "\u3123\u0000\u0000\u4E59\u0000\u0000\u0000\u702B"+
-        "\u6E2E\u0000\u702A\u0000\u0000\u0000\u0000\u0000"+
-        "\u702E\u702C\u702D\u0000\u702F\u0000\u7030\u4E6C"+
-        "\u7031\u7032\u0000\u4049\u483B\u0000\u0000\u0000"+
-        "\u3F7D\u3467\u0000\u0000\u4D3A\u326D\u3D38\u385B"+
-        "\u0000\u7035\u0000\u7034\u3B73\u7036\u7033\u0000"+
-        "\u0000\u3B28\u0000\u0000\u0000\u703A\u6A2D\u0000"+
-        "\u0000\u5256\u0000\u3F77\u7038\u0000\u0000\u0000"+
-        "\u0000\u0000\u4E25\u4671\u0000\u0000\u0000\u0000"+
-        "\u312B\u0000\u4063\u3C36\u0000\u0000\u0000\u0000"+
-        "\u4A37\u0000\u3140\u0000\u0000\u0000\u4E6D\u4D6B"+
-        "\u0000\u703B\u0000\u4545\u0000\u0000\u0000\u0000"+
-        "\u3C7B\u0000\u0000\u0000\u703C\u0000\u703D\u3F4C"+
-        "\u703E\u0000\u4E6E\u0000\u0000\u7039\u7040\u7042"+
-        "\u0000\u7041\u0000\u703F\u0000\u0000\u7043\u0000"+
-        "\u0000\u7044\u0000\u0000\u417A\u0000\u3262\u0000"+
-        "\u0000\u0000\u0000\u0000\u7045\u0000\u0000\u4C38"+
-        "\u0000\u0000\u7046\u0000\u0000\u0000\u0000\u0000"+
-        "\u7047\u0000\u4F2A\u0000\u0000\u0000\u0000\u0000"+
-        "\u5B31\u7048\u0000\u0000\u0000\u7049\u704A\u0000"+
-        "\u0000\u0000\u704E\u0000\u704B\u0000\u704C\u0000"+
-        "\u704D\u704F\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4044\u0000\u0000\u0000\u4C77\u0000"+
-        "\u0000\u4045\u0000\u0000\u7050\u0000\u4873\u0000"+
-        "\u7051\u7353\u4C4C\u0000\u7052\u0000\u7053\u0000"+
-        "\u7054\u3357\u0000\u7056\u0000\u3F59\u0000\u0000"+
-        "\u0000\u7057\u0000\u0000\u3724\u0000\u0000\u0000"+
-        "\u0000\u7058\u705C\u0000\u705A\u0000\u0000\u0000"+
-        "\u0000\u705B\u0000\u0000\u3373\u7059\u705D\u0000"+
-        "\u0000\u0000\u0000\u705E\u0000\u3048\u0000\u705F"+
-        "\u7060\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3E64\u0000\u0000\u0000\u7061\u0000\u0000\u0000"+
-        "\u3547\u0000\u0000\u7064\u0000\u0000\u7063\u0000"+
-        "\u7062\u0000\u0000\u6B71\u0000\u4A5C\u0000\u0000"+
-        "\u0000\u0000\u0000\u7065\u7066\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7067\u0000\u0000\u7068\u0000"+
-        "\u7069\u0000\u0000\u706A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u345A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u706B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u706C\u4723\u0000"+
-        "\u0000\u0000\u706E\u323B\u0000\u7071\u7070\u0000"+
-        "\u0000\u0000\u0000\u3124\u0000\u0000\u0000\u3641"+
-        "\u0000\u4A47\u443A\u3A22\u0000\u3960\u3D67\u0000"+
-        "\u3F5C\u0000\u0000\u0000\u7073\u0000\u0000\u7072"+
-        "\u4D42\u3468\u4852\u465C\u0000\u0000\u0000\u3F7C"+
-        "\u4E4E\u0000\u375B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u7076\u0000\u0000\u7075\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4B4B\u462C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3150\u0000\u0000\u7077"+
-        "\u7074\u0000\u0000\u4951\u4D6A\u7078\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7079\u0000"+
-        "\u0000\u0000\u0000\u707B\u426A\u335B\u335C\u707A"+
-        "\u0000\u0000\u0000\u0000\u3469\u3832\u0000\u0000"+
-        "\u346A\u0000\u0000\u453F\u0000\u0000\u4E60\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u385C"+
-        "\u0000\u0000\u0000\u707C\u0000\u0000\u0000\u707D"+
-        "\u707E\u7121\u0000\u7123\u7122\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4977\u0000\u7124\u0000\u0000\u0000\u0000\u7125"+
-        "\u0000\u7126\u0000\u0000\u0000\u0000\u7127\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7129\u7128\u0000\u712A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4874\u664C\u0000\u0000\u3F29"+
-        "\u0000\u0000\u3532\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u712B\u0000\u712C\u0000\u522C\u5D3B\u4853"+
-        "\u0000\u0000\u307B\u0000\u303B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3B74\u4B30\u3E7E\u0000"+
-        "\u0000\u0000\u0000\u712D\u0000\u4C5F\u0000\u0000"+
-        "\u0000\u712E\u4D5C\u0000\u3142\u0000\u0000\u0000"+
-        "\u3B41\u0000\u712F\u326E\u7130\u0000\u0000\u0000"+
-        "\u7131\u0000\u0000\u0000\u0000\u7133\u7134\u0000"+
-        "\u7136\u7132\u0000\u0000\u7135\u0000\u0000\u0000"+
-        "\u345B\u0000\u0000\u0000\u7137\u0000\u7138\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7139\u713A\u0000"+
-        "\u0000\u0000\u713B\u0000\u0000\u713D\u0000\u0000"+
-        "\u0000\u713C\u0000\u713F\u7142\u0000\u0000\u0000"+
-        "\u713E\u7140\u7141\u0000\u0000\u7143\u0000\u3642"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3C73\u7144"+
-        "\u7145\u3961\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7146\u0000\u0000"+
-        "\u333E\u0000\u0000\u0000\u474F\u7147\u7148\u0000"+
-        "\u0000\u0000\u0000\u435A\u466B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u7149\u0000\u0000\u0000"+
-        "\u0000\u477D\u0000\u0000\u424C\u3158\u366E\u0000"+
-        "\u366F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4373\u714E\u3670\u0000\u0000\u326F\u0000\u0000"+
-        "\u714D\u0000\u0000\u714B\u0000\u714C\u0000\u714A"+
-        "\u0000\u0000\u7158\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u714F\u7150\u0000"+
-        "\u0000\u7151\u7152\u0000\u0000\u0000\u0000\u0000"+
-        "\u7154\u0000\u0000\u7153\u0000\u0000\u0000\u3D59"+
-        "\u0000\u7155\u0000\u0000\u0000\u7157\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3533\u7156"+
-        "\u0000\u0000\u417B\u3833\u0000\u0000\u0000\u0000"+
-        "\u0000\u7159\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u424D\u0000\u0000\u715A\u0000\u0000\u0000\u0000"+
-        "\u462D\u0000\u0000\u0000\u0000\u0000\u0000\u715B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7160\u0000"+
-        "\u715E\u0000\u715D\u715F\u0000\u715C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7162\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7161\u0000\u7164"+
-        "\u0000\u0000\u3643\u7163\u0000\u0000\u0000\u7165"+
-        "\u0000\u0000\u7166\u0000\u7168\u7167\u0000\u0000"+
-        "\u0000\u7169\u716B\u716A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u397C\u0000\u0000\u0000\u0000\u716C\u0000\u0000"+
-        "\u716D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u333C\u0000\u0000\u0000\u716E\u0000\u0000\u0000"+
-        "\u716F\u0000\u0000\u0000\u3F71\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7170"+
-        "\u0000\u7171\u0000\u7172\u7173\u0000\u0000\u0000"+
-        "\u3962\u0000\u0000\u0000\u0000\u0000\u7174\u7175"+
-        "\u0000\u0000\u7176\u7177\u0000\u0000\u7178\u0000"+
-        "\u0000\u0000\u4831\u717A\u0000\u4926\u717B\u7179"+
-        "\u0000\u717D\u0000\u0000\u717C\u0000\u0000\u717E"+
-        "\u0000\u0000\u0000\u7221\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7222\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7223\u0000\u7224\u0000\u0000\u0000\u0000\u7225"+
-        "\u0000\u0000\u7226\u7227\u0000\u7228\u0000\u7229"+
-        "\u722A\u722B\u722C\u0000\u0000\u0000\u722D\u722E"+
-        "\u0000\u5D35\u722F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6478\u3534\u0000\u0000\u0000"+
-        "\u0000\u3321\u3A32\u7231\u7230\u4C25\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7233\u7234\u7232"+
-        "\u0000\u7235\u0000\u0000\u4B62\u0000\u0000\u0000"+
-        "\u7236\u0000\u357B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4F25"+
-        "\u0000\u0000\u0000\u0000\u7237\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7239\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u303E\u0000"+
-        "\u0000\u723A\u4A2B\u7238\u0000\u0000\u723B\u723C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u723D"+
-        "\u723E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u723F\u0000\u4B6E\u3B2D\u0000\u3A7A\u412F\u0000"+
-        "\u0000\u0000\u0000\u0000\u7240\u0000\u0000\u0000"+
-        "\u0000\u7243\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7241\u0000\u0000\u0000\u0000\u0000\u7244\u0000"+
-        "\u0000\u3871\u7242\u0000\u0000\u0000\u0000\u7245"+
-        "\u0000\u7246\u7247\u0000\u724B\u0000\u3B2A\u0000"+
-        "\u0000\u0000\u0000\u4264\u0000\u0000\u0000\u0000"+
-        "\u0000\u724C\u7249\u7248\u724A\u0000\u0000\u0000"+
-        "\u375F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7250\u724F\u724E\u0000\u0000\u3033\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u725A\u0000\u7256\u0000"+
-        "\u7257\u7253\u7259\u0000\u7255\u3362\u0000\u0000"+
-        "\u4F4C\u0000\u7258\u7254\u7252\u7251\u0000\u0000"+
-        "\u0000\u0000\u0000\u725C\u0000\u0000\u0000\u0000"+
-        "\u0000\u725F\u0000\u0000\u725E\u725D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4949\u725B\u3073"+
-        "\u7260\u0000\u7262\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u336F\u724D\u3137\u0000\u0000\u7264\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7263\u7261"+
-        "\u432D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4B70\u0000\u0000\u0000\u0000\u4E5A"+
-        "\u0000\u0000\u7265\u0000\u0000\u0000\u0000\u0000"+
-        "\u7266\u0000\u0000\u0000\u0000\u0000\u0000\u7267"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7268\u0000"+
-        "\u7269\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u443B\u0000\u726A"+
-        "\u0000\u4837\u0000\u726F\u726B\u0000\u0000\u0000"+
-        "\u726C\u0000\u0000\u4B31\u4C44\u0000\u4650\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7270\u0000\u0000\u7271\u463E"+
-        "\u726E\u726D\u0000\u0000\u0000\u0000\u322A\u0000"+
-        "\u0000\u0000\u7279\u0000\u0000\u7278\u0000\u0000"+
-        "\u0000\u0000\u0000\u3175\u0000\u0000\u0000\u7276"+
-        "\u0000\u0000\u0000\u7275\u0000\u0000\u7273\u0000"+
-        "\u337B\u0000\u7272\u3C32\u3229\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3963\u0000\u0000\u727C\u727B"+
-        "\u0000\u727A\u0000\u0000\u7277\u0000\u727D\u0000"+
-        "\u727E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7325\u7324\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u7326\u0000\u0000\u312D\u7321\u7322\u0000"+
-        "\u3974\u4C39\u0000\u0000\u7323\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4B32\u0000\u0000\u732B"+
-        "\u0000\u0000\u7327\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u732C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7329"+
-        "\u0000\u7328\u0000\u0000\u0000\u0000\u0000\u375C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u732D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u732E\u0000\u0000\u0000"+
-        "\u0000\u732F\u0000\u732A\u0000\u0000\u0000\u7274"+
-        "\u0000\u0000\u7330\u0000\u4461\u0000\u0000\u0000"+
-        "\u7334\u0000\u7335\u7333\u0000\u0000\u0000\u0000"+
-        "\u0000\u7332\u7338\u0000\u7331\u0000\u7336\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7337"+
-        "\u0000\u0000\u0000\u733A\u0000\u0000\u0000\u0000"+
-        "\u0000\u7339\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u733C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u733D\u0000\u733E"+
-        "\u0000\u0000\u4F49\u0000\u0000\u0000\u0000\u0000"+
-        "\u733B\u426B\u3A6D\u0000\u0000\u733F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u7340\u7341\u0000\u0000\u7342\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7343\u0000\u0000"+
-        "\u3834\u7344\u0000\u0000\u0000\u7345\u0000\u3C2F"+
-        "\u0000\u7346\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7347\u0000\u0000\u7348\u7349\u0000\u0000\u0000"+
-        "\u0000\u734C\u734A\u4F3C\u0000\u734B\u0000\u4E6F"+
-        "\u0000\u0000\u0000\u0000\u0000\u734D\u0000\u4E5B"+
-        "\u0000\u0000\u0000\u0000\u0000\u734E\u477E\u0000"+
-        "\u0000\u734F\u7351\u0000\u0000\u7352\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7350\u396D\u4C4D\u4B63\u5677\u0000\u5D60\u4B7B"+
-        "\u0000\u0000\u0000\u0000\u322B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u7354\u3550\u7355\u7356"+
-        "\u7357\u0000\u3975\u0000\u7358\u0000\u0000\u0000"+
-        "\u6054\u4C5B\u0000\u4263\u7359\u735B\u735A\u0000"+
-        "\u735C\u0000\u0000\u0000\u0000\u735D\u0000\u0000"+
-        "\u735E\u0000\u0000\u0000\u0000\u0000\u0000\u735F"+
-        "\u0000\u0000\u0000\u0000\u7360\u0000\u7361\u7362"+
-        "\u0000\u7363\u0000\u7364\u7365\u7366\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7367"+
-        "\u7368\u0000\u0000\u0000\u0000\u0000\u4524\u0000"+
-        "\u0000\u0000\u0000\u385D\u0000\u736A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u414D\u736B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u736C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4921\u0000\u0000\u736D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u736E\u6337\u0000\u0000\u6C5A\u706D"+
-        "\u0000\u0000\u736F\u0000\u7370\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7372"+
-        "\u7373\u7374\u4E70\u7371\u0000\u0000\u7375\u7376"+
-        "\u0000\u0000\u7378\u0000\u7377\u0000\u0000\u0000"+
-        "\u0000\u0000\u737A\u0000\u0000\u0000\u737B\u7379"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4E36\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u737C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u737D\u6354\u0000\u0000"+
-        "\u737E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-    private final static String innerIndex6=
-        "\u7521\u7522\u7523\u7524\u7525\u7526\u7527\u7528"+
-        "\u7529\u752A\u752B\u752C\u752D\u752E\u752F\u7530"+
-        "\u7531\u7532\u7533\u7534\u7535\u7536\u7537\u7538"+
-        "\u7539\u753A\u753B\u753C\u753D\u753E\u753F\u7540"+
-        "\u7541\u7542\u7543\u7544\u7545\u7546\u7547\u7548"+
-        "\u7549\u754A\u754B\u754C\u754D\u754E\u754F\u7550"+
-        "\u7551\u7552\u7553\u7554\u7555\u7556\u7557\u7558"+
-        "\u7559\u755A\u755B\u755C\u755D\u755E\u755F\u7560"+
-        "\u7561\u7562\u7563\u7564\u7565\u7566\u7567\u7568"+
-        "\u7569\u756A\u756B\u756C\u756D\u756E\u756F\u7570"+
-        "\u7571\u7572\u7573\u7574\u7575\u7576\u7577\u7578"+
-        "\u7579\u757A\u757B\u757C\u757D\u757E\u7621\u7622"+
-        "\u7623\u7624\u7625\u7626\u7627\u7628\u7629\u762A"+
-        "\u762B\u762C\u762D\u762E\u762F\u7630\u7631\u7632"+
-        "\u7633\u7634\u7635\u7636\u7637\u7638\u7639\u763A"+
-        "\u763B\u763C\u763D\u763E\u763F\u7640\u7641\u7642"+
-        "\u7643\u7644\u7645\u7646\u7647\u7648\u7649\u764A"+
-        "\u764B\u764C\u764D\u764E\u764F\u7650\u7651\u7652"+
-        "\u7653\u7654\u7655\u7656\u7657\u7658\u7659\u765A"+
-        "\u765B\u765C\u765D\u765E\u765F\u7660\u7661\u7662"+
-        "\u7663\u7664\u7665\u7666\u7667\u7668\u7669\u766A"+
-        "\u766B\u766C\u766D\u766E\u766F\u7670\u7671\u7672"+
-        "\u7673\u7674\u7675\u7676\u7677\u7678\u7679\u767A"+
-        "\u767B\u767C\u767D\u767E\u7721\u7722\u7723\u7724"+
-        "\u7725\u7726\u7727\u7728\u7729\u772A\u772B\u772C"+
-        "\u772D\u772E\u772F\u7730\u7731\u7732\u7733\u7734"+
-        "\u7735\u7736\u7737\u7738\u7739\u773A\u773B\u773C"+
-        "\u773D\u773E\u773F\u7740\u7741\u7742\u7743\u7744"+
-        "\u7745\u7746\u7747\u7748\u7749\u774A\u774B\u774C"+
-        "\u774D\u774E\u774F\u7750\u7751\u7752\u7753\u7754"+
-        "\u7755\u7756\u7757\u7758\u7759\u775A\u775B\u775C"+
-        "\u775D\u775E\u775F\u7760\u7761\u7762\u7763\u7764"+
-        "\u7765\u7766\u7767\u7768\u7769\u776A\u776B\u776C"+
-        "\u776D\u776E\u776F\u7770\u7771\u7772\u7773\u7774"+
-        "\u7775\u7776\u7777\u7778\u7779\u777A\u777B\u777C"+
-        "\u777D\u777E\u7821\u7822\u7823\u7824\u7825\u7826"+
-        "\u7827\u7828\u7829\u782A\u782B\u782C\u782D\u782E"+
-        "\u782F\u7830\u7831\u7832\u7833\u7834\u7835\u7836"+
-        "\u7837\u7838\u7839\u783A\u783B\u783C\u783D\u783E"+
-        "\u783F\u7840\u7841\u7842\u7843\u7844\u7845\u7846"+
-        "\u7847\u7848\u7849\u784A\u784B\u784C\u784D\u784E"+
-        "\u784F\u7850\u7851\u7852\u7853\u7854\u7855\u7856"+
-        "\u7857\u7858\u7859\u785A\u785B\u785C\u785D\u785E"+
-        "\u785F\u7860\u7861\u7862\u7863\u7864\u7865\u7866"+
-        "\u7867\u7868\u7869\u786A\u786B\u786C\u786D\u786E"+
-        "\u786F\u7870\u7871\u7872\u7873\u7874\u7875\u7876"+
-        "\u7877\u7878\u7879\u787A\u787B\u787C\u787D\u787E"+
-        "\u7921\u7922\u7923\u7924\u7925\u7926\u7927\u7928"+
-        "\u7929\u792A\u792B\u792C\u792D\u792E\u792F\u7930"+
-        "\u7931\u7932\u7933\u7934\u7935\u7936\u7937\u7938"+
-        "\u7939\u793A\u793B\u793C\u793D\u793E\u793F\u7940"+
-        "\u7941\u7942\u7943\u7944\u7945\u7946\u7947\u7948"+
-        "\u7949\u794A\u794B\u794C\u794D\u794E\u794F\u7950"+
-        "\u7951\u7952\u7953\u7954\u7955\u7956\u7957\u7958"+
-        "\u7959\u795A\u795B\u795C\u795D\u795E\u795F\u7960"+
-        "\u7961\u7962\u7963\u7964\u7965\u7966\u7967\u7968"+
-        "\u7969\u796A\u796B\u796C\u796D\u796E\u796F\u7970"+
-        "\u7971\u7972\u7973\u7974\u7975\u7976\u7977\u7978"+
-        "\u7979\u797A\u797B\u797C\u797D\u797E\u7A21\u7A22"+
-        "\u7A23\u7A24\u7A25\u7A26\u7A27\u7A28\u7A29\u7A2A"+
-        "\u7A2B\u7A2C\u7A2D\u7A2E\u7A2F\u7A30\u7A31\u7A32"+
-        "\u7A33\u7A34\u7A35\u7A36\u7A37\u7A38\u7A39\u7A3A"+
-        "\u7A3B\u7A3C\u7A3D\u7A3E\u7A3F\u7A40\u7A41\u7A42"+
-        "\u7A43\u7A44\u7A45\u7A46\u7A47\u7A48\u7A49\u7A4A"+
-        "\u7A4B\u7A4C\u7A4D\u7A4E\u7A4F\u7A50\u7A51\u7A52"+
-        "\u7A53\u7A54\u7A55\u7A56\u7A57\u7A58\u7A59\u7A5A"+
-        "\u7A5B\u7A5C\u7A5D\u7A5E\u7A5F\u7A60\u7A61\u7A62"+
-        "\u7A63\u7A64\u7A65\u7A66\u7A67\u7A68\u7A69\u7A6A"+
-        "\u7A6B\u7A6C\u7A6D\u7A6E\u7A6F\u7A70\u7A71\u7A72"+
-        "\u7A73\u7A74\u7A75\u7A76\u7A77\u7A78\u7A79\u7A7A"+
-        "\u7A7B\u7A7C\u7A7D\u7A7E\u7B21\u7B22\u7B23\u7B24"+
-        "\u7B25\u7B26\u7B27\u7B28\u7B29\u7B2A\u7B2B\u7B2C"+
-        "\u7B2D\u7B2E\u7B2F\u7B30\u7B31\u7B32\u7B33\u7B34"+
-        "\u7B35\u7B36\u7B37\u7B38\u7B39\u7B3A\u7B3B\u7B3C"+
-        "\u7B3D\u7B3E\u7B3F\u7B40\u7B41\u7B42\u7B43\u7B44"+
-        "\u7B45\u7B46\u7B47\u7B48\u7B49\u7B4A\u7B4B\u7B4C"+
-        "\u7B4D\u7B4E\u7B4F\u7B50\u7B51\u7B52\u7B53\u7B54"+
-        "\u7B55\u7B56\u7B57\u7B58\u7B59\u7B5A\u7B5B\u7B5C"+
-        "\u7B5D\u7B5E\u7B5F\u7B60\u7B61\u7B62\u7B63\u7B64"+
-        "\u7B65\u7B66\u7B67\u7B68\u7B69\u7B6A\u7B6B\u7B6C"+
-        "\u7B6D\u7B6E\u7B6F\u7B70\u7B71\u7B72\u7B73\u7B74"+
-        "\u7B75\u7B76\u7B77\u7B78\u7B79\u7B7A\u7B7B\u7B7C"+
-        "\u7B7D\u7B7E\u7C21\u7C22\u7C23\u7C24\u7C25\u7C26"+
-        "\u7C27\u7C28\u7C29\u7C2A\u7C2B\u7C2C\u7C2D\u7C2E"+
-        "\u7C2F\u7C30\u7C31\u7C32\u7C33\u7C34\u7C35\u7C36"+
-        "\u7C37\u7C38\u7C39\u7C3A\u7C3B\u7C3C\u7C3D\u7C3E"+
-        "\u7C3F\u7C40\u7C41\u7C42\u7C43\u7C44\u7C45\u7C46"+
-        "\u7C47\u7C48\u7C49\u7C4A\u7C4B\u7C4C\u7C4D\u7C4E"+
-        "\u7C4F\u7C50\u7C51\u7C52\u7C53\u7C54\u7C55\u7C56"+
-        "\u7C57\u7C58\u7C59\u7C5A\u7C5B\u7C5C\u7C5D\u7C5E"+
-        "\u7C5F\u7C60\u7C61\u7C62\u7C63\u7C64\u7C65\u7C66"+
-        "\u7C67\u7C68\u7C69\u7C6A\u7C6B\u7C6C\u7C6D\u7C6E"+
-        "\u7C6F\u7C70\u7C71\u7C72\u7C73\u7C74\u7C75\u7C76"+
-        "\u7C77\u7C78\u7C79\u7C7A\u7C7B\u7C7C\u7C7D\u7C7E"+
-        "\u7D21\u7D22\u7D23\u7D24\u7D25\u7D26\u7D27\u7D28"+
-        "\u7D29\u7D2A\u7D2B\u7D2C\u7D2D\u7D2E\u7D2F\u7D30"+
-        "\u7D31\u7D32\u7D33\u7D34\u7D35\u7D36\u7D37\u7D38"+
-        "\u7D39\u7D3A\u7D3B\u7D3C\u7D3D\u7D3E\u7D3F\u7D40"+
-        "\u7D41\u7D42\u7D43\u7D44\u7D45\u7D46\u7D47\u7D48"+
-        "\u7D49\u7D4A\u7D4B\u7D4C\u7D4D\u7D4E\u7D4F\u7D50"+
-        "\u7D51\u7D52\u7D53\u7D54\u7D55\u7D56\u7D57\u7D58"+
-        "\u7D59\u7D5A\u7D5B\u7D5C\u7D5D\u7D5E\u7D5F\u7D60"+
-        "\u7D61\u7D62\u7D63\u7D64\u7D65\u7D66\u7D67\u7D68"+
-        "\u7D69\u7D6A\u7D6B\u7D6C\u7D6D\u7D6E\u7D6F\u7D70"+
-        "\u7D71\u7D72\u7D73\u7D74\u7D75\u7D76\u7D77\u7D78"+
-        "\u7D79\u7D7A\u7D7B\u7D7C\u7D7D\u7D7E\u7E21\u7E22"+
-        "\u7E23\u7E24\u7E25\u7E26\u7E27\u7E28\u7E29\u7E2A"+
-        "\u7E2B\u7E2C\u7E2D\u7E2E\u7E2F\u7E30\u7E31\u7E32"+
-        "\u7E33\u7E34\u7E35\u7E36\u7E37\u7E38\u7E39\u7E3A"+
-        "\u7E3B\u7E3C\u7E3D\u7E3E\u7E3F\u7E40\u7E41\u7E42"+
-        "\u7E43\u7E44\u7E45\u7E46\u7E47\u7E48\u7E49\u7E4A"+
-        "\u7E4B\u7E4C\u7E4D\u7E4E\u7E4F\u7E50\u7E51\u7E52"+
-        "\u7E53\u7E54\u7E55\u7E56\u7E57\u7E58\u7E59\u7E5A"+
-        "\u7E5B\u7E5C\u7E5D\u7E5E\u7E5F\u7E60\u7E61\u7E62"+
-        "\u7E63\u7E64\u7E65\u7E66\u7E67\u7E68\u7E69\u7E6A"+
-        "\u7E6B\u7E6C\u7E6D\u7E6E\u7E6F\u7E70\u7E71\u7E72"+
-        "\u7E73\u7E74\u7E75\u7E76\u7E77\u7E78\u7E79\u7E7A"+
-        "\u7E7B\u7E7C\u7E7D\u7E7E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u212A\u0000\u2174\u2170\u2173\u2175\u0000"+
-        "\u214A\u214B\u2176\u215C\u2124\u215d\u2125\u213F"+
-        "\u2330\u2331\u2332\u2333\u2334\u2335\u2336\u2337"+
-        "\u2338\u2339\u2127\u2128\u2163\u2161\u2164\u2129"+
-        "\u2177\u2341\u2342\u2343\u2344\u2345\u2346\u2347"+
-        "\u2348\u2349\u234A\u234B\u234C\u234D\u234E\u234F"+
-        "\u2350\u2351\u2352\u2353\u2354\u2355\u2356\u2357"+
-        "\u2358\u2359\u235A\u214E\u2140\u214F\u2130\u2132"+
-        "\u212E\u2361\u2362\u2363\u2364\u2365\u2366\u2367"+
-        "\u2368\u2369\u236A\u236B\u236C\u236D\u236E\u236F"+
-        "\u2370\u2371\u2372\u2373\u2374\u2375\u2376\u2377"+
-        "\u2378\u2379\u237A\u2150\u2143\u2151\u0000\u0000"+
-        "\u0000\u2123\u2156\u2157\u2122\u2126\u2572\u2521"+
-        "\u2523\u2525\u2527\u2529\u2563\u2565\u2567\u2543"+
-        "\u213c\u2522\u2524\u2526\u2528\u252a\u252b\u252d"+
-        "\u252f\u2531\u2533\u2535\u2537\u2539\u253b\u253d"+
-        "\u253f\u2541\u2544\u2546\u2548\u254a\u254b\u254c"+
-        "\u254d\u254e\u254f\u2552\u2555\u2558\u255b\u255e"+
-        "\u255f\u2560\u2561\u2562\u2564\u2566\u2568\u2569"+
-        "\u256a\u256b\u256c\u256d\u256f\u2573\u212b\u212c"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2171\u2172\u224c\u2131\u0000\u216F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-    protected final static short index1[] = {
-        1, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        11, 0, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 15,
-        16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
-        32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
-        48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
-        64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
-        80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        96, 97, 98, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100
-    };
-
-    protected final static String index2[] = {
-        innerIndex0,
-        innerIndex1,
-        innerIndex2,
-        innerIndex3,
-        innerIndex4,
-        innerIndex5,
-        innerIndex6
-    };
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_MS932_Decoder.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_MS932_Decoder.java
deleted file mode 100755
index 1288bf9..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_MS932_Decoder.java
+++ /dev/null
@@ -1,1048 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-
-class JIS_X_0208_MS932_Decoder
-{
-    private final static String innerIndex0=
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3000\u3001"+
-        "\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01"+
-        "\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F"+
-        "\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006"+
-        "\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225"+
-        "\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08"+
-        "\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008"+
-        "\u3009\u300A\u300B\u300C\u300D\u300E\u300F\u3010"+
-        "\u3011\uFF0B\uFF0D\u00B1\u00D7\u00F7\uFF1D\u2260"+
-        "\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640"+
-        "\u00B0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1"+
-        "\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605"+
-        "\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3"+
-        "\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191"+
-        "\u2193\u3013\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2208\u220B\u2286"+
-        "\u2287\u2282\u2283\u222A\u2229\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2227\u2228\uFFE2"+
-        "\u21D2\u21D4\u2200\u2203\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2220"+
-        "\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B"+
-        "\u221A\u223D\u221D\u2235\u222B\u222C\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u212B\u2030\u266F"+
-        "\u266D\u266A\u2020\u2021\u00B6\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\u25EF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16"+
-        "\uFF17\uFF18\uFF19\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26"+
-        "\uFF27\uFF28\uFF29\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E"+
-        "\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34\uFF35\uFF36"+
-        "\uFF37\uFF38\uFF39\uFF3A\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46"+
-        "\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E"+
-        "\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56"+
-        "\uFF57\uFF58\uFF59\uFF5A\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048"+
-        "\u3049\u304A\u304B\u304C\u304D\u304E\u304F\u3050"+
-        "\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058"+
-        "\u3059\u305A\u305B\u305C\u305D\u305E\u305F\u3060"+
-        "\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068"+
-        "\u3069\u306A\u306B\u306C\u306D\u306E\u306F\u3070"+
-        "\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078"+
-        "\u3079\u307A\u307B\u307C\u307D\u307E\u307F\u3080"+
-        "\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088"+
-        "\u3089\u308A\u308B\u308C\u308D\u308E\u308F\u3090"+
-        "\u3091\u3092\u3093\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u30A1\u30A2"+
-        "\u30A3\u30A4\u30A5\u30A6\u30A7\u30A8\u30A9\u30AA"+
-        "\u30AB\u30AC\u30AD\u30AE\u30AF\u30B0\u30B1\u30B2"+
-        "\u30B3\u30B4\u30B5\u30B6\u30B7\u30B8\u30B9\u30BA"+
-        "\u30BB\u30BC\u30BD\u30BE\u30BF\u30C0\u30C1\u30C2"+
-        "\u30C3\u30C4\u30C5\u30C6\u30C7\u30C8\u30C9\u30CA"+
-        "\u30CB\u30CC\u30CD\u30CE\u30CF\u30D0\u30D1\u30D2"+
-        "\u30D3\u30D4\u30D5\u30D6\u30D7\u30D8\u30D9\u30DA"+
-        "\u30DB\u30DC\u30DD\u30DE\u30DF\u30E0\u30E1\u30E2"+
-        "\u30E3\u30E4\u30E5\u30E6\u30E7\u30E8\u30E9\u30EA"+
-        "\u30EB\u30EC\u30ED\u30EE\u30EF\u30F0\u30F1\u30F2"+
-        "\u30F3\u30F4\u30F5\u30F6\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u0391\u0392\u0393\u0394"+
-        "\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C"+
-        "\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5"+
-        "\u03A6\u03A7\u03A8\u03A9\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u03B1\u03B2\u03B3\u03B4"+
-        "\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC"+
-        "\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C4\u03C5"+
-        "\u03C6\u03C7\u03C8\u03C9\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\u0410\u0411\u0412\u0413\u0414\u0415"+
-        "\u0401\u0416\u0417\u0418\u0419\u041A\u041B\u041C"+
-        "\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424"+
-        "\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C"+
-        "\u042D\u042E\u042F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\u0430\u0431\u0432\u0433\u0434\u0435"+
-        "\u0451\u0436\u0437\u0438\u0439\u043A\u043B\u043C"+
-        "\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444"+
-        "\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C"+
-        "\u044D\u044E\u044F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C"+
-        "\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B"+
-        "\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F"+
-        "\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2460\u2461"+
-        "\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469"+
-        "\u246A\u246B\u246C\u246D\u246E\u246F\u2470\u2471"+
-        "\u2472\u2473\u2160\u2161\u2162\u2163\u2164\u2165"+
-        "\u2166\u2167\u2168\u2169\uFFFD\u3349\u3314\u3322"+
-        "\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D"+
-        "\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E"+
-        "\u338E\u338F\u33C4\u33A1\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u337B\u301D\u301F\u2116"+
-        "\u33CD\u2121\u32A4\u32A5\u32A6\u32A7\u32A8\u3231"+
-        "\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B"+
-        "\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235"+
-        "\u2229\u222A\uFFFD\uFFFD\u4E9C\u5516\u5A03\u963F"+
-        "\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50"+
-        "\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893"+
-        "\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62"+
-        "\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309"+
-        "\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D"+
-        "\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF"+
-        "\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB"+
-        "\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A"+
-        "\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00"+
-        "\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141"+
-        "\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB"+
-        "\u80E4\u852D\u9662\u9670\u96A0\u97FB\u540B\u53F3"+
-        "\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA"+
-        "\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A"+
-        "\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91"+
-        "\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71"+
-        "\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8"+
-        "\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB"+
-        "\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD"+
-        "\u5186\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9"+
-        "\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F"+
-        "\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869"+
-        "\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC"+
-        "\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956"+
-        "\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B"+
-        "\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069"+
-        "\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D"+
-        "\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6"+
-        "\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B"+
-        "\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304"+
-        "\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6"+
-        "\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B"+
-        "\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB"+
-        "\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A"+
-        "\u6094\u6062\u61D0\u6212\u62D0\u6539\u9B41\u6666"+
-        "\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9"+
-        "\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3"+
-        "\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72"+
-        "\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE"+
-        "\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C"+
-        "\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B"+
-        "\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D"+
-        "\u984D\u984E\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D"+
-        "\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1"+
-        "\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A"+
-        "\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B"+
-        "\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6"+
-        "\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB"+
-        "\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79"+
-        "\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853"+
-        "\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0"+
-        "\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36"+
-        "\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084"+
-        "\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218"+
-        "\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9"+
-        "\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E"+
-        "\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90"+
-        "\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F"+
-        "\u68CB\u68C4\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F"+
-        "\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4"+
-        "\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D"+
-        "\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0"+
-        "\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA"+
-        "\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827"+
-        "\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18"+
-        "\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025"+
-        "\u6551\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76"+
-        "\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB"+
-        "\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31"+
-        "\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC";
-
-    private final static String innerIndex1=
-        "\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354"+
-        "\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A"+
-        "\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2"+
-        "\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1"+
-        "\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D"+
-        "\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4"+
-        "\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981"+
-        "\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39"+
-        "\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A"+
-        "\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2"+
-        "\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047"+
-        "\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\u6398\u7A9F"+
-        "\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817"+
-        "\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4"+
-        "\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211"+
-        "\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84"+
-        "\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F"+
-        "\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B"+
-        "\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD"+
-        "\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287\u621F\u6483"+
-        "\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74"+
-        "\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065"+
-        "\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA"+
-        "\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC"+
-        "\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19"+
-        "\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78"+
-        "\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384"+
-        "\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B"+
-        "\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27"+
-        "\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1"+
-        "\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867"+
-        "\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F"+
-        "\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E"+
-        "\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF"+
-        "\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A"+
-        "\u53E3\u5411\u540E\u5589\u5751\u57A2\u597D\u5B54"+
-        "\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A"+
-        "\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B"+
-        "\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F"+
-        "\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F"+
-        "\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF"+
-        "\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B"+
-        "\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4"+
-        "\u964D\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7"+
-        "\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B"+
-        "\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344"+
-        "\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC"+
-        "\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068"+
-        "\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A"+
-        "\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6"+
-        "\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF"+
-        "\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9"+
-        "\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73"+
-        "\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E"+
-        "\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750"+
-        "\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4"+
-        "\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B"+
-        "\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F"+
-        "\u685C\u9BAD\u7B39\u5319\u518A\u5237\u5BDF\u62F6"+
-        "\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6"+
-        "\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2"+
-        "\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523"+
-        "\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC"+
-        "\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8"+
-        "\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50"+
-        "\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C"+
-        "\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345"+
-        "\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3"+
-        "\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC"+
-        "\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57"+
-        "\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E"+
-        "\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494"+
-        "\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8"+
-        "\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4"+
-        "\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0"+
-        "\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199"+
-        "\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005"+
-        "\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A"+
-        "\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2"+
-        "\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A"+
-        "\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112"+
-        "\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA"+
-        "\u53CE\u5468\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE"+
-        "\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F"+
-        "\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B"+
-        "\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93"+
-        "\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283"+
-        "\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E"+
-        "\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC"+
-        "\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89"+
-        "\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187"+
-        "\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6"+
-        "\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9"+
-        "\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F"+
-        "\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617"+
-        "\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A"+
-        "\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C"+
-        "\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F"+
-        "\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167"+
-        "\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11"+
-        "\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3"+
-        "\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266"+
-        "\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57"+
-        "\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5"+
-        "\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8"+
-        "\u8B72\u91B8\u9320\u5631\u57F4\u98FE\u62ED\u690D"+
-        "\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755"+
-        "\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD"+
-        "\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B"+
-        "\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33"+
-        "\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032"+
-        "\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B"+
-        "\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25"+
-        "\u8ACF\u9808\u9162\u56F3\u53A8\u9017\u5439\u5782"+
-        "\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870"+
-        "\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07"+
-        "\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919"+
-        "\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16"+
-        "\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81"+
-        "\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816"+
-        "\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0"+
-        "\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752"+
-        "\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A"+
-        "\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A"+
-        "\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5"+
-        "\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76"+
-        "\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02"+
-        "\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9"+
-        "\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F"+
-        "\u7BAD\u7DDA\u7E4A\u7FA8\u817A\u821B\u8239\u85A6"+
-        "\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583"+
-        "\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55"+
-        "\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD"+
-        "\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97"+
-        "\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7"+
-        "\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D"+
-        "\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F"+
-        "\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15"+
-        "\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C"+
-        "\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70"+
-        "\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E"+
-        "\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373"+
-        "\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E"+
-        "\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58"+
-        "\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A"+
-        "\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1"+
-        "\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE"+
-        "\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF"+
-        "\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000"+
-        "\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C"+
-        "\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85"+
-        "\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438"+
-        "\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\u53E9\u4F46"+
-        "\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA"+
-        "\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606"+
-        "\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD"+
-        "\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95"+
-        "\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5"+
-        "\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A"+
-        "\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3"+
-        "\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92"+
-        "\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD"+
-        "\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3"+
-        "\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01"+
-        "\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14"+
-        "\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E"+
-        "\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF"+
-        "\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5"+
-        "\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673"+
-        "\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A"+
-        "\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB"+
-        "\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C"+
-        "\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C"+
-        "\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95"+
-        "\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF"+
-        "\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6"+
-        "\u8E44\u9013\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458"+
-        "\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA"+
-        "\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B"+
-        "\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2"+
-        "\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E"+
-        "\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C"+
-        "\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825"+
-        "\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A"+
-        "\u51AC\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95"+
-        "\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC"+
-        "\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53"+
-        "\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230";
-
-    private final static String innerIndex2=
-        "\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003"+
-        "\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5"+
-        "\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5"+
-        "\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97"+
-        "\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC"+
-        "\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6"+
-        "\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566"+
-        "\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948"+
-        "\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A"+
-        "\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF"+
-        "\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1"+
-        "\u8089\u8679\u5EFF\u65E5\u4E73\u5165\u5982\u5C3F"+
-        "\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962"+
-        "\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A"+
-        "\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9"+
-        "\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4"+
-        "\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436"+
-        "\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD"+
-        "\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29"+
-        "\u914D\u500D\u57F9\u5A92\u6885\u6973\u7164\u72FD"+
-        "\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7"+
-        "\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D"+
-        "\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206"+
-        "\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8"+
-        "\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B"+
-        "\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C"+
-        "\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34"+
-        "\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F"+
-        "\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C"+
-        "\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D"+
-        "\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351"+
-        "\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB"+
-        "\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB"+
-        "\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB"+
-        "\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435"+
-        "\u7709\u7F8E\u9F3B\u67CA\u7A17\u5339\u758B\u9AED"+
-        "\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46"+
-        "\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5"+
-        "\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55"+
-        "\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2"+
-        "\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015"+
-        "\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0"+
-        "\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276"+
-        "\u6577\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A"+
-        "\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE"+
-        "\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953"+
-        "\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D"+
-        "\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8"+
-        "\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4"+
-        "\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587"+
-        "\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A"+
-        "\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB"+
-        "\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F"+
-        "\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF"+
-        "\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703"+
-        "\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893"+
-        "\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8"+
-        "\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29"+
-        "\u5E96\u62B1\u6367\u653E\u65B9\u670B\u6CD5\u6CE1"+
-        "\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702"+
-        "\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C"+
-        "\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8"+
-        "\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21"+
-        "\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420"+
-        "\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267"+
-        "\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C"+
-        "\u5954\u672C\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54"+
-        "\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9"+
-        "\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6"+
-        "\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D"+
-        "\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A"+
-        "\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1"+
-        "\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922"+
-        "\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18"+
-        "\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4"+
-        "\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762"+
-        "\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B"+
-        "\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE"+
-        "\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F"+
-        "\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A"+
-        "\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC"+
-        "\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108"+
-        "\u6CB9\u7652\u8AED\u8F38\u552F\u4F51\u512A\u52C7"+
-        "\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA"+
-        "\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98"+
-        "\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59"+
-        "\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9"+
-        "\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B"+
-        "\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9"+
-        "\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291"+
-        "\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA"+
-        "\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D"+
-        "\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D"+
-        "\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483"+
-        "\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387"+
-        "\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409"+
-        "\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E"+
-        "\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE"+
-        "\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7"+
-        "\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1"+
-        "\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A"+
-        "\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E"+
-        "\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2"+
-        "\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62"+
-        "\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B"+
-        "\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\u84EE\u9023"+
-        "\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732"+
-        "\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A"+
-        "\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE"+
-        "\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C"+
-        "\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99"+
-        "\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897"+
-        "\u8155\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u5F0C\u4E10\u4E15\u4E2A"+
-        "\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82"+
-        "\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F"+
-        "\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4"+
-        "\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09"+
-        "\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88"+
-        "\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86"+
-        "\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1"+
-        "\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A"+
-        "\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE"+
-        "\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050"+
-        "\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085"+
-        "\u50B4\u50B2\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE"+
-        "\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101"+
-        "\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137"+
-        "\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162"+
-        "\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C"+
-        "\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6"+
-        "\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0"+
-        "\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9"+
-        "\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E"+
-        "\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B"+
-        "\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F"+
-        "\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8"+
-        "\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7"+
-        "\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8"+
-        "\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315"+
-        "\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346"+
-        "\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E"+
-        "\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5"+
-        "\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC"+
-        "\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440"+
-        "\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E"+
-        "\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492"+
-        "\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2"+
-        "\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\u54AB\u54C2"+
-        "\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514"+
-        "\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563"+
-        "\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533"+
-        "\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E"+
-        "\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8"+
-        "\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614"+
-        "\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650"+
-        "\u71DF\u5634\u5636\u5632\u5638\u566B\u5664\u562F"+
-        "\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F"+
-        "\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3"+
-        "\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9"+
-        "\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713"+
-        "\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E"+
-        "\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F"+
-        "\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3"+
-        "\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B"+
-        "\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0"+
-        "\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA"+
-        "\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7"+
-        "\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA"+
-        "\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B"+
-        "\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2"+
-        "\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967"+
-        "\u596C\u5969\u5978\u5981\u599D\u4F5E\u4FAB\u59A3"+
-        "\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25"+
-        "\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49"+
-        "\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB"+
-        "\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA"+
-        "\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36"+
-        "\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B"+
-        "\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A"+
-        "\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4"+
-        "\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0"+
-        "\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20"+
-        "\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53";
-
-    private final static String innerIndex3=
-        "\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79"+
-        "\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC"+
-        "\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA"+
-        "\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F"+
-        "\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C"+
-        "\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84"+
-        "\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7"+
-        "\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB"+
-        "\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36"+
-        "\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F"+
-        "\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F"+
-        "\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\u5ED6\u5EE3"+
-        "\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC"+
-        "\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09"+
-        "\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38"+
-        "\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57"+
-        "\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F"+
-        "\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0"+
-        "\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1"+
-        "\u5FDD\u60B3\u5FFF\u6021\u6060\u6019\u6010\u6029"+
-        "\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A"+
-        "\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D"+
-        "\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081"+
-        "\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097"+
-        "\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4"+
-        "\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106"+
-        "\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB"+
-        "\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A"+
-        "\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173"+
-        "\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165"+
-        "\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187"+
-        "\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC"+
-        "\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB"+
-        "\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF"+
-        "\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C"+
-        "\u6214\u621B\u621E\u6221\u622A\u622E\u6230\u6232"+
-        "\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268"+
-        "\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4"+
-        "\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6"+
-        "\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B"+
-        "\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF"+
-        "\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E"+
-        "\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5"+
-        "\u636B\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9"+
-        "\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426"+
-        "\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476"+
-        "\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC"+
-        "\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1"+
-        "\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C"+
-        "\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C"+
-        "\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536"+
-        "\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E"+
-        "\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F"+
-        "\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2"+
-        "\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603"+
-        "\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644"+
-        "\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F"+
-        "\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698"+
-        "\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\u66C4\u66B8"+
-        "\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5"+
-        "\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E"+
-        "\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760"+
-        "\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A"+
-        "\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4"+
-        "\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2"+
-        "\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846"+
-        "\u6829\u6840\u684D\u6832\u684E\u68B3\u682B\u6859"+
-        "\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D"+
-        "\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA"+
-        "\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922"+
-        "\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936"+
-        "\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF"+
-        "\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977"+
-        "\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974"+
-        "\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A"+
-        "\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE"+
-        "\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991"+
-        "\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B"+
-        "\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E"+
-        "\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13"+
-        "\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59"+
-        "\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84"+
-        "\u6AA2\u6AA3\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8"+
-        "\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA"+
-        "\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F"+
-        "\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49"+
-        "\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79"+
-        "\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E"+
-        "\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7"+
-        "\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3"+
-        "\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23"+
-        "\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81"+
-        "\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1"+
-        "\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE"+
-        "\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36"+
-        "\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C"+
-        "\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95"+
-        "\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6"+
-        "\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5"+
-        "\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E"+
-        "\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B"+
-        "\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF"+
-        "\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3"+
-        "\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5"+
-        "\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE"+
-        "\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\u6F3E\u6F13"+
-        "\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B"+
-        "\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2"+
-        "\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA"+
-        "\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB"+
-        "\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B"+
-        "\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032"+
-        "\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8"+
-        "\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9\u7109\u70FD"+
-        "\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C"+
-        "\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC"+
-        "\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0"+
-        "\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210"+
-        "\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C"+
-        "\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282"+
-        "\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2"+
-        "\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1"+
-        "\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D"+
-        "\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8"+
-        "\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A"+
-        "\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE"+
-        "\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455"+
-        "\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463"+
-        "\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF"+
-        "\u74D4\u73F1\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2"+
-        "\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C"+
-        "\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C"+
-        "\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569"+
-        "\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587"+
-        "\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5"+
-        "\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC"+
-        "\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE"+
-        "\u75FF\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B"+
-        "\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624"+
-        "\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658"+
-        "\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670"+
-        "\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B"+
-        "\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8"+
-        "\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1"+
-        "\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704"+
-        "\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738"+
-        "\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E"+
-        "\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6"+
-        "\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7"+
-        "\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926"+
-        "\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A"+
-        "\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB"+
-        "\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\u78E7\u78DA"+
-        "\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B"+
-        "\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A"+
-        "\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3"+
-        "\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3"+
-        "\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31"+
-        "\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62"+
-        "\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95"+
-        "\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4"+
-        "\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3"+
-        "\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0"+
-        "\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E"+
-        "\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B"+
-        "\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71"+
-        "\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A"+
-        "\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC"+
-        "\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6"+
-        "\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17"+
-        "\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B"+
-        "\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58"+
-        "\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90"+
-        "\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2"+
-        "\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8"+
-        "\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6"+
-        "\u7CFA\u7D06\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B"+
-        "\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E"+
-        "\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B"+
-        "\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7"+
-        "\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F"+
-        "\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1"+
-        "\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09"+
-        "\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43"+
-        "\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59"+
-        "\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5"+
-        "\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90"+
-        "\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A";
-
-    private final static String innerIndex4=
-        "\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54"+
-        "\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82"+
-        "\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D"+
-        "\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8"+
-        "\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6"+
-        "\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012"+
-        "\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A"+
-        "\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073"+
-        "\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086"+
-        "\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB"+
-        "\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF"+
-        "\u80F1\u811B\u8129\u8123\u812F\u814B\u968B\u8146"+
-        "\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166"+
-        "\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195"+
-        "\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE"+
-        "\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1"+
-        "\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA"+
-        "\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D"+
-        "\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259"+
-        "\u8258\u825D\u825A\u825F\u8264\u8262\u8268\u826A"+
-        "\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292"+
-        "\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2"+
-        "\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE"+
-        "\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332"+
-        "\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317"+
-        "\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323"+
-        "\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0"+
-        "\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403"+
-        "\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D"+
-        "\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A"+
-        "\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482"+
-        "\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462"+
-        "\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0"+
-        "\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517"+
-        "\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563"+
-        "\u8558\u8548\u8541\u8602\u854B\u8555\u8580\u85A4"+
-        "\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA"+
-        "\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF"+
-        "\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A"+
-        "\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630"+
-        "\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693"+
-        "\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4"+
-        "\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9"+
-        "\u86EC\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700"+
-        "\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734"+
-        "\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F"+
-        "\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759"+
-        "\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF"+
-        "\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3"+
-        "\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D"+
-        "\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815"+
-        "\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844"+
-        "\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E"+
-        "\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892"+
-        "\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1"+
-        "\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902"+
-        "\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913"+
-        "\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B"+
-        "\u8936\u8938\u894C\u891D\u8960\u895E\u8966\u8964"+
-        "\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988"+
-        "\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF"+
-        "\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD"+
-        "\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B"+
-        "\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48"+
-        "\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8"+
-        "\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD"+
-        "\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14"+
-        "\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A"+
-        "\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26"+
-        "\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49"+
-        "\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74"+
-        "\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99"+
-        "\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50"+
-        "\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85"+
-        "\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD"+
-        "\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1"+
-        "\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05"+
-        "\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD"+
-        "\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99"+
-        "\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB"+
-        "\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09"+
-        "\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30"+
-        "\u8E34\u8E4A\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59"+
-        "\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C"+
-        "\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91"+
-        "\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1"+
-        "\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB"+
-        "\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13"+
-        "\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39"+
-        "\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57"+
-        "\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD"+
-        "\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087"+
-        "\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D"+
-        "\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8"+
-        "\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056"+
-        "\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082"+
-        "\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF"+
-        "\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112"+
-        "\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165"+
-        "\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB"+
-        "\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9"+
-        "\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5"+
-        "\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E"+
-        "\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B"+
-        "\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9"+
-        "\u92B7\u92E9\u930F\u92FA\u9344\u932E\u9319\u9322"+
-        "\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C"+
-        "\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6"+
-        "\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8"+
-        "\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436"+
-        "\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B"+
-        "\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477"+
-        "\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587"+
-        "\u958A\u9594\u9596\u9598\u9599\u95A0\u95A8\u95A7"+
-        "\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3"+
-        "\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5"+
-        "\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F"+
-        "\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672"+
-        "\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1"+
-        "\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB"+
-        "\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704"+
-        "\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719"+
-        "\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746"+
-        "\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768"+
-        "\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A"+
-        "\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3"+
-        "\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED"+
-        "\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838"+
-        "\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B"+
-        "\u986F\u9870\u9871\u9874\u9873\u98AA\u98AF\u98B1"+
-        "\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909"+
-        "\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920"+
-        "\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950"+
-        "\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5"+
-        "\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1"+
-        "\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F"+
-        "\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40"+
-        "\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62"+
-        "\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC"+
-        "\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2"+
-        "\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7"+
-        "\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25"+
-        "\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44"+
-        "\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93"+
-        "\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4"+
-        "\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3"+
-        "\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0"+
-        "\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12"+
-        "\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30"+
-        "\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76"+
-        "\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03"+
-        "\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15"+
-        "\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\u9D5D\u9D5E"+
-        "\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB"+
-        "\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1"+
-        "\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3"+
-        "\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E"+
-        "\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92"+
-        "\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD"+
-        "\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE"+
-        "\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7"+
-        "\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15"+
-        "\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F"+
-        "\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72"+
-        "\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464"+
-        "\u51DC\u7199\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\u7E8A\u891C\u9348\u9288\u84DC\u4FC9"+
-        "\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1"+
-        "\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A"+
-        "\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070"+
-        "\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE"+
-        "\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307"+
-        "\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A"+
-        "\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7"+
-        "\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D"+
-        "\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC"+
-        "\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42"+
-        "\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7";
-
-    private final static String innerIndex5=
-        "\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2"+
-        "\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460"+
-        "\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E"+
-        "\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699"+
-        "\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB"+
-        "\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14"+
-        "\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2"+
-        "\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04"+
-        "\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC"+
-        "\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5"+
-        "\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C"+
-        "\u7146\u7147\uFA15\u71C1\u71FE\u72B1\u72BE\u7324"+
-        "\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407"+
-        "\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F"+
-        "\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17"+
-        "\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18"+
-        "\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C"+
-        "\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6"+
-        "\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7"+
-        "\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0"+
-        "\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7"+
-        "\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4"+
-        "\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE"+
-        "\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE"+
-        "\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C"+
-        "\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278"+
-        "\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3"+
-        "\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302"+
-        "\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445"+
-        "\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B"+
-        "\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A"+
-        "\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75"+
-        "\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D"+
-        "\u9E19\u9ED1\uFFFD\uFFFD\u2170\u2171\u2172\u2173"+
-        "\u2174\u2175\u2176\u2177\u2178\u2179\uFFE2\uFFE4"+
-        "\uFF07\uFF02";
-
-    protected final static short index1[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0, 9, 0, 0,
-        10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
-        26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
-        42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
-        58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
-        74, 75, 76, 77, 78, 0, 0, 0, 0, 79, 80, 81, 82, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-    };
-
-    protected final static String index2[] = {
-        innerIndex0,
-        innerIndex1,
-        innerIndex2,
-        innerIndex3,
-        innerIndex4,
-        innerIndex5
-    };
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_MS932_Encoder.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_MS932_Encoder.java
deleted file mode 100755
index 467d041..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_MS932_Encoder.java
+++ /dev/null
@@ -1,3244 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-
-class JIS_X_0208_MS932_Encoder
-{
-    private final static String innerIndex0=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2178"+
-        "\u212F\u0000\u0000\u2263\u0000\u0000\u0000\u2131"+
-        "\u216B\u215E\u0000\u0000\u212D\u264c\u2279\u2126"+
-        "\u2124\u0000\u0000\u2264\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u215F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2160"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2621\u2622\u2623\u2624\u2625\u2626\u2627"+
-        "\u2628\u2629\u262A\u262B\u262C\u262D\u262E\u262F"+
-        "\u2630\u2631\u0000\u2632\u2633\u2634\u2635\u2636"+
-        "\u2637\u2638\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2641\u2642\u2643\u2644\u2645\u2646\u2647"+
-        "\u2648\u2649\u264A\u264B\u264C\u264D\u264E\u264F"+
-        "\u2650\u2651\u0000\u2652\u2653\u2654\u2655\u2656"+
-        "\u2657\u2658\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2727\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2721\u2722\u2723\u2724\u2725\u2726\u2728\u2729"+
-        "\u272A\u272B\u272C\u272D\u272E\u272F\u2730\u2731"+
-        "\u2732\u2733\u2734\u2735\u2736\u2737\u2738\u2739"+
-        "\u273A\u273B\u273C\u273D\u273E\u273F\u2740\u2741"+
-        "\u2751\u2752\u2753\u2754\u2755\u2756\u2758\u2759"+
-        "\u275A\u275B\u275C\u275D\u275E\u275F\u2760\u2761"+
-        "\u2762\u2763\u2764\u2765\u2766\u2767\u2768\u2769"+
-        "\u276A\u276B\u276C\u276D\u276E\u276F\u2770\u2771"+
-        "\u0000\u2757\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u213E\u0000\u0000\u0000\u0000\u213D\u0000\u0000"+
-        "\u2146\u2147\u0000\u0000\u2148\u2149\u0000\u0000"+
-        "\u2277\u2278\u0000\u0000\u0000\u2145\u2144\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2273\u0000\u216C\u216D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u2228\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u216E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2D62\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D64\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u2272\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2D35\u2D36\u2D37\u2D38\u2D39\u2D3A\u2D3B\u2D3C"+
-        "\u2D3D\u2D3E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7C71\u7C72\u7C73\u7C74\u7C75\u7C76\u7C77\u7C78"+
-        "\u7C79\u7C7A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u222B\u222C\u222A\u222D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u224D\u0000\u224E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u224F\u0000\u225F\u2250\u0000\u0000\u0000\u2260"+
-        "\u223A\u0000\u0000\u223B\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D74\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2D75\u0000\u0000\u2267\u2167\u2D78"+
-        "\u225C\u0000\u0000\u0000\u0000\u2142\u0000\u224A"+
-        "\u224B\u2241\u2240\u2D72\u226A\u0000\u2D73\u0000"+
-        "\u0000\u0000\u0000\u0000\u2168\u2268\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2266\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2262\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2162\u2261\u0000\u0000\u0000\u0000\u2165\u2166"+
-        "\u0000\u0000\u2263\u2264\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u223E\u223F\u0000\u0000\u223C\u223D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2D76\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2D79"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u225E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2D21\u2D22\u2D23\u2D24\u2D25\u2D26\u2D27\u2D28"+
-        "\u2D29\u2D2A\u2D2B\u2D2C\u2D2D\u2D2E\u2D2F\u2D30"+
-        "\u2D31\u2D32\u2D33\u2D34\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2821\u282C\u2822\u282D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2823\u0000\u0000\u282E"+
-        "\u2824\u0000\u0000\u282F\u2826\u0000\u0000\u2831"+
-        "\u2825\u0000\u0000\u2830\u2827\u283C\u0000\u0000"+
-        "\u2837\u0000\u0000\u2832\u2829\u283E\u0000\u0000"+
-        "\u2839\u0000\u0000\u2834\u2828\u0000\u0000\u2838"+
-        "\u283D\u0000\u0000\u2833\u282A\u0000\u0000\u283A"+
-        "\u283F\u0000\u0000\u2835\u282B\u0000\u0000\u283B"+
-        "\u0000\u0000\u2840\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u2836\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2223\u2222\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2225\u2224\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2227\u2226\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2221\u217E"+
-        "\u0000\u0000\u0000\u217B\u0000\u0000\u217D\u217C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u227E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u217A\u2179\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u216A\u0000\u2169\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2276\u0000\u0000\u2275\u0000\u2274"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2121\u2122\u2123\u2137\u0000\u2139\u213A\u213B"+
-        "\u2152\u2153\u2154\u2155\u2156\u2157\u2158\u2159"+
-        "\u215A\u215B\u2229\u222E\u214C\u214D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2D60\u0000\u2D61"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2421\u2422\u2423\u2424\u2425\u2426\u2427"+
-        "\u2428\u2429\u242A\u242B\u242C\u242D\u242E\u242F"+
-        "\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437"+
-        "\u2438\u2439\u243A\u243B\u243C\u243D\u243E\u243F"+
-        "\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447"+
-        "\u2448\u2449\u244A\u244B\u244C\u244D\u244E\u244F"+
-        "\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457"+
-        "\u2458\u2459\u245A\u245B\u245C\u245D\u245E\u245F"+
-        "\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467"+
-        "\u2468\u2469\u246A\u246B\u246C\u246D\u246E\u246F"+
-        "\u2470\u2471\u2472\u2473\u2574\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u212B\u212C\u2135\u2136\u0000"+
-        "\u0000\u2521\u2522\u2523\u2524\u2525\u2526\u2527"+
-        "\u2528\u2529\u252A\u252B\u252C\u252D\u252E\u252F"+
-        "\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537"+
-        "\u2538\u2539\u253A\u253B\u253C\u253D\u253E\u253F"+
-        "\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547"+
-        "\u2548\u2549\u254A\u254B\u254C\u254D\u254E\u254F"+
-        "\u2550\u2551\u2552\u2553\u2554\u2555\u2556\u2557"+
-        "\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F"+
-        "\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567"+
-        "\u2568\u2569\u256A\u256B\u256C\u256D\u256E\u256F"+
-        "\u2570\u2571\u2572\u2573\u2574\u2575\u2576\u0000"+
-        "\u0000\u0000\u0000\u2126\u213C\u2133\u2134\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D6A\u2D6B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D6C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2D65\u2D66\u2D67\u2D68"+
-        "\u2D69\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u2D46\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2D4A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2D41\u0000\u0000\u0000"+
-        "\u2D44\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2D42\u2D4C\u0000\u0000\u2D4B\u2D45"+
-        "\u0000\u0000\u0000\u2D4D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2D47\u0000"+
-        "\u0000\u0000\u0000\u2D4F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D40\u2D4E\u0000\u0000\u2D43\u0000\u0000"+
-        "\u0000\u2D48\u0000\u0000\u0000\u0000\u0000\u2D49"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u2D5F\u2D6F\u2D6E\u2D6D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2D53\u2D54"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2D50\u2D51\u2D52\u0000"+
-        "\u0000\u2D56\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2D55\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2D63\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u306C\u437A\u0000\u3C37\u0000\u0000\u0000\u4B7C"+
-        "\u3E66\u3B30\u3E65\u323C\u0000\u4954\u4D3F\u0000"+
-        "\u5022\u312F\u0000\u0000\u336E\u5023\u4024\u5242"+
-        "\u3556\u4A3A\u0000\u0000\u0000\u0000\u3E67\u0000"+
-        "\u0000\u4E3E\u0000\u0000\u0000\u0000\u4A42\u0000"+
-        "\u792D\u0000\u5024\u0000\u0000\u4366\u0000\u0000"+
-        "\u0000\u5025\u367A\u0000\u0000\u0000\u5026\u0000"+
-        "\u345D\u4330\u0000\u3C67\u5027\u0000\u0000\u5028"+
-        "\u0000\u0000\u5029\u4735\u0000\u3557\u0000\u0000"+
-        "\u0000\u0000\u0000\u4737\u0000\u4663\u3843\u4B33"+
-        "\u0000\u0000\u0000\u0000\u0000\u6949\u502A\u3E68"+
-        "\u502B\u3235\u0000\u0000\u0000\u3665\u3870\u4C69"+
-        "\u0000\u0000\u5626\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4D70\u0000\u467D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3425\u0000"+
-        "\u3535\u0000\u502C\u0000\u0000\u502D\u4E3B\u0000"+
-        "\u4D3D\u4168\u502F\u3B76\u4673\u0000\u5032\u0000"+
-        "\u0000\u313E\u385F\u0000\u385E\u3066\u0000\u0000"+
-        "\u4F4B\u4F4A\u0000\u3A33\u3021\u0000\u5033\u5034"+
-        "\u5035\u4B34\u5036\u0000\u3872\u3067\u4B72\u0000"+
-        "\u357C\u0000\u0000\u357D\u357E\u4462\u4E3C\u0000"+
-        "\u5037\u0000\u0000\u5038\u0000\u0000\u5039\u0000"+
-        "\u0000\u0000\u3F4D\u0000\u0000\u0000\u0000\u0000"+
-        "\u3D3A\u3F4E\u503E\u0000\u503C\u0000\u503D\u3558"+
-        "\u0000\u0000\u3A23\u3270\u0000\u503B\u503A\u4A29"+
-        "\u0000\u0000\u0000\u0000\u3B46\u3B45\u423E\u503F"+
-        "\u4955\u4067\u0000\u0000\u0000\u2138\u5040\u5042"+
-        "\u0000\u792E\u0000\u4265\u4E61\u304A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5041\u323E\u0000"+
-        "\u3644\u0000\u4367\u0000\u0000\u0000\u376F\u5043"+
-        "\u0000\u0000\u0000\u4724\u792F\u0000\u0000\u0000"+
-        "\u7930\u346B\u0000\u7931\u0000\u0000\u0000\u0000"+
-        "\u0000\u5044\u304B\u0000\u0000\u3860\u346C\u497A"+
-        "\u4832\u3559\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3271\u0000\u5067\u4541\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u476C"+
-        "\u5046\u0000\u0000\u0000\u483C\u0000\u4E62\u0000"+
-        "\u3F2D\u7932\u3B47\u0000\u3B77\u3240\u0000\u0000"+
-        "\u0000\u0000\u0000\u4451\u0000\u0000\u4322\u504A"+
-        "\u0000\u0000\u0000\u0000\u0000\u304C\u4463\u3D3B"+
-        "\u3A34\u4D24\u0000\u424E\u0000\u323F\u7933\u5049"+
-        "\u0000\u4D3E\u5045\u5047\u3A6E\u5048\u5524\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5050\u0000\u0000\u0000\u0000\u0000\u5053"+
-        "\u5051\u0000\u0000\u3242\u0000\u4A3B\u504B\u0000"+
-        "\u0000\u0000\u0000\u504F\u3873\u0000\u0000\u3B48"+
-        "\u0000\u0000\u0000\u3426\u0000\u0000\u5054\u0000"+
-        "\u504C\u0000\u7935\u4E63\u0000\u3B78\u0000\u504D"+
-        "\u0000\u5052\u7934\u0000\u7937\u0000\u5055\u0000"+
-        "\u504E\u0000\u7936\u3621\u0000\u304D\u0000\u0000"+
-        "\u3622\u3241\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5525\u0000\u4B79\u496E\u3874"+
-        "\u0000\u0000\u0000\u0000\u0000\u3F2F\u4E37\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4A58"+
-        "\u0000\u0000\u3738\u4225\u3264\u0000\u0000\u0000"+
-        "\u0000\u7926\u3D53\u0000\u0000\u7938\u5059\u0000"+
-        "\u505E\u505C\u0000\u0000\u5057\u0000\u0000\u422F"+
-        "\u505A\u0000\u505D\u505B\u0000\u4A5D\u0000\u5058"+
-        "\u0000\u3F2E\u0000\u4B73\u505F\u5060\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3D24\u506D"+
-        "\u0000\u0000\u0000\u4750\u0000\u4936\u5068\u0000"+
-        "\u4A70\u0000\u3236\u0000\u0000\u0000\u506C\u793B";
-
-    private final static String innerIndex1=
-        "\u0000\u0000\u0000\u0000\u0000\u5066\u506F\u0000"+
-        "\u0000\u4152\u0000\u3844\u0000\u475C\u0000\u6047"+
-        "\u0000\u506E\u455D\u0000\u5063\u0000\u3876\u0000"+
-        "\u0000\u3875\u5061\u0000\u0000\u0000\u793C\u3C5A"+
-        "\u0000\u5069\u793A\u4A6F\u434D\u5065\u3771\u0000"+
-        "\u5062\u506A\u5064\u4E51\u506B\u4F41\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3666\u0000"+
-        "\u0000\u3770\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7939\u0000\u793F\u5070\u0000\u0000\u793D\u5071"+
-        "\u5075\u304E\u0000\u0000\u0000\u0000\u0000\u4A50"+
-        "\u5074\u0000\u0000\u0000\u0000\u5073\u5077\u0000"+
-        "\u0000\u0000\u5076\u0000\u4464\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3772\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5078\u0000\u0000\u0000"+
-        "\u793E\u0000\u3C45\u0000\u4226\u4465\u3676\u0000"+
-        "\u5079\u0000\u0000\u0000\u0000\u3536\u0000\u0000"+
-        "\u507A\u0000\u0000\u0000\u0000\u507C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4B35\u0000\u0000"+
-        "\u0000\u3766\u0000\u0000\u7940\u0000\u0000\u0000"+
-        "\u3B31\u4877\u507B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3A45\u4D43\u0000\u0000"+
-        "\u0000\u0000\u507E\u5123\u507D\u3A44\u0000\u3D7D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3739\u0000"+
-        "\u0000\u0000\u5124\u0000\u0000\u364F\u0000\u0000"+
-        "\u0000\u5121\u5122\u0000\u0000\u462F\u0000\u417C"+
-        "\u0000\u3623\u0000\u0000\u0000\u4B4D\u5125\u0000"+
-        "\u7942\u0000\u4E3D\u0000\u0000\u0000\u5126\u0000"+
-        "\u0000\u0000\u0000\u5129\u0000\u5127\u0000\u414E"+
-        "\u0000\u0000\u0000\u0000\u0000\u5128\u512A\u0000"+
-        "\u0000\u0000\u0000\u0000\u7941\u512C\u0000\u0000"+
-        "\u0000\u512B\u0000\u4A48\u0000\u0000\u0000\u0000"+
-        "\u3537\u512E\u512F\u0000\u322F\u0000\u0000\u0000"+
-        "\u0000\u512D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3C74\u0000\u5132\u5131\u5130\u0000"+
-        "\u5056\u0000\u5133\u0000\u0000\u0000\u0000\u3D7E"+
-        "\u0000\u5134\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D25\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C59\u0000\u0000\u0000\u0000\u5136"+
-        "\u0000\u0000\u5135\u5138\u5137\u0000\u0000\u5139"+
-        "\u513A\u3074\u0000\u3835\u373B\u3D3C\u437B\u3624"+
-        "\u4068\u3877\u7943\u396E\u513C\u4C48\u4546\u0000"+
-        "\u3B79\u0000\u513B\u0000\u513D\u0000\u0000\u0000"+
-        "\u0000\u0000\u455E\u0000\u3375\u0000\u0000\u0000"+
-        "\u0000\u0000\u513E\u0000\u7944\u467E\u0000\u0000"+
-        "\u4134\u5140\u5141\u482C\u3878\u4F3B\u5142\u0000"+
-        "\u0000\u3626\u0000\u0000\u0000\u4A3C\u4236\u3671"+
-        "\u4535\u0000\u0000\u0000\u3773\u0000\u0000\u0000"+
-        "\u5143\u0000\u5144\u0000\u0000\u4662\u315F\u0000"+
-        "\u0000\u5147\u3A7D\u0000\u5146\u3A46\u0000\u5148"+
-        "\u666E\u5149\u4B41\u514A\u0000\u514B\u514C\u3E69"+
-        "\u0000\u3C4C\u0000\u0000\u0000\u7945\u0000\u0000"+
-        "\u3427\u0000\u514F\u0000\u514D\u4C3D\u514E\u0000"+
-        "\u495A\u5150\u5151\u5152\u455F\u0000\u0000\u0000"+
-        "\u5156\u5154\u5155\u5153\u3A63\u5157\u4C6A\u4E64"+
-        "\u0000\u0000\u0000\u0000\u0000\u5158\u7946\u0000"+
-        "\u0000\u0000\u0000\u0000\u4028\u5159\u3D5A\u0000"+
-        "\u0000\u515A\u0000\u437C\u4E3F\u4560\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5245\u0000"+
-        "\u0000\u0000\u0000\u515B\u7425\u3645\u0000\u0000"+
-        "\u515C\u4B5E\u0000\u0000\u0000\u0000\u3D68\u427C"+
-        "\u0000\u515E\u4664\u0000\u7947\u515F\u0000\u0000"+
-        "\u5160\u332E\u0000\u0000\u0000\u5161\u3627\u0000"+
-        "\u464C\u317A\u3D50\u0000\u0000\u4821\u5162\u0000"+
-        "\u4561\u0000\u0000\u3F4F\u5163\u0000\u4A2C\u405A"+
-        "\u3422\u0000\u3429\u5164\u0000\u0000\u5166\u0000"+
-        "\u0000\u373A\u0000\u0000\u5165\u7948\u0000\u4E73"+
-        "\u0000\u0000\u0000\u0000\u0000\u3D69\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u483D\u4A4C\u0000\u5167"+
-        "\u0000\u4D78\u5168\u0000\u0000\u0000\u5169\u0000"+
-        "\u457E\u0000\u0000\u516A\u0000\u0000\u4029\u3A7E"+
-        "\u3774\u516B\u3B49\u396F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4466\u516D\u0000\u0000\u4227"+
-        "\u0000\u0000\u3A6F\u516E\u516F\u4130\u0000\u516C"+
-        "\u0000\u0000\u0000\u0000\u5171\u0000\u4B36\u0000"+
-        "\u0000\u0000\u0000\u3964\u0000\u0000\u5170\u0000"+
-        "\u0000\u0000\u0000\u3775\u3A5E\u476D\u0000\u0000"+
-        "\u0000\u5174\u5172\u0000\u0000\u0000\u0000\u497B"+
-        "\u3E6A\u517B\u3364\u5175\u5173\u414F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5177\u0000\u5176"+
-        "\u0000\u0000\u0000\u3344\u0000\u0000\u0000\u3760"+
-        "\u517C\u4E2D\u0000\u0000\u0000\u5178\u0000\u0000"+
-        "\u0000\u517D\u517A\u0000\u5179\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4E4F\u7949\u0000\u0000\u3879"+
-        "\u3243\u0000\u0000\u4E74\u0000\u0000\u794A\u0000"+
-        "\u0000\u3D75\u4558\u3965\u5222\u5223\u0000\u7B3C"+
-        "\u0000\u4E65\u0000\u0000\u4F2B\u5225\u0000\u0000"+
-        "\u0000\u387A\u0000\u0000\u5224\u0000\u332F\u0000"+
-        "\u794B\u5226\u0000\u4B56\u0000\u443C\u0000\u4D26"+
-        "\u0000\u4A59\u0000\u0000\u0000\u5227\u0000\u0000"+
-        "\u0000\u0000\u7055\u0000\u0000\u4630\u0000\u5228"+
-        "\u342A\u4C33\u0000\u794C\u0000\u3E21\u5229\u4A67"+
-        "\u522D\u0000\u402A\u522A\u3650\u0000\u522B\u342B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u372E\u522E\u0000\u522F\u0000\u0000"+
-        "\u5230\u5231\u3C5B\u0000\u0000\u0000\u387B\u4C5E"+
-        "\u794D\u4C68\u4677\u0000\u0000\u4A71\u5232\u794E"+
-        "\u5233\u0000\u0000\u0000\u0000\u5235\u0000\u5237"+
-        "\u5236\u0000\u0000\u0000\u0000\u5238\u323D\u4B4C"+
-        "\u0000\u3A7C\u5239\u0000\u0000\u4159\u0000\u0000"+
-        "\u3E22\u3629\u0000\u523A\u794F\u0000\u0000\u0000"+
-        "\u0000\u0000\u485B\u0000\u0000\u0000\u0000\u523B"+
-        "\u0000\u523C\u0000\u523D\u0000\u0000\u0000\u0000"+
-        "\u523E\u4924\u3668\u3065\u0000\u0000\u0000\u463F"+
-        "\u523F\u3D3D\u0000\u4069\u0000\u5241\u5240\u3E23"+
-        "\u3861\u5243\u483E\u0000\u0000\u5244\u0000\u0000"+
-        "\u0000\u485C\u4234\u426E\u3628\u0000\u0000\u466E"+
-        "\u4331\u0000\u476E\u0000\u4B4E\u0000\u5246\u0000"+
-        "\u406A\u0000\u0000\u0000\u0000\u0000\u3735\u0000"+
-        "\u0000\u5247\u0000\u0000\u0000\u0000\u5248\u312C"+
-        "\u3075\u346D\u7950\u4228\u3551\u4D71\u0000\u524B"+
-        "\u3237\u0000\u0000\u524A\u0000\u0000\u0000\u362A"+
-        "\u0000\u0000\u524C\u0000\u4C71\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7951\u0000\u0000\u524D\u0000"+
-        "\u4E52\u0000\u387C\u0000\u0000\u0000\u0000\u3836"+
-        "\u524E\u0000\u0000\u0000\u0000\u5250\u524F\u0000"+
-        "\u3F5F\u3139\u0000\u0000\u0000\u315E\u5251\u0000"+
-        "\u5252\u0000\u7952\u3837\u0000\u0000\u5253\u0000"+
-        "\u0000\u0000\u0000\u356E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3B32\u5254\u0000\u0000\u0000\u0000"+
-        "\u4B74\u3A35\u355A\u4D27\u4150\u483F\u3C7D\u0000"+
-        "\u0000\u0000\u0000\u0000\u3D47\u0000\u3C68\u3C75"+
-        "\u0000\u3D76\u0000\u4840\u0000\u7953\u0000\u5257"+
-        "\u0000\u3143\u4151\u387D\u3845\u3667\u0000\u0000"+
-        "\u525B\u4321\u427E\u362B\u3E24\u525C\u525A\u3244"+
-        "\u4266\u3C38\u3B4B\u3126\u0000\u0000\u3370\u3966"+
-        "\u3B4A\u0000\u525D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u525E\u0000\u3549\u3346\u0000\u0000\u0000"+
-        "\u3967\u3548\u445F\u3125\u4631\u4C3E\u3921\u4D79"+
-        "\u4547\u387E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u372F\u0000\u5267\u0000\u3663"+
-        "\u4B4A\u0000\u0000\u0000\u0000\u0000\u485D\u0000"+
-        "\u0000\u5266\u0000\u345E\u5261\u5262\u5264\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5265\u0000"+
-        "\u355B\u3F61\u0000\u4A2D\u5263\u525F\u3863\u0000"+
-        "\u5260\u0000\u4F24\u0000\u0000\u0000\u4A72\u0000"+
-        "\u4468\u3862\u3970\u0000\u0000\u0000\u5268\u0000"+
-        "\u0000\u465D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u526C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3C7E\u0000\u3C76\u0000\u0000\u0000\u0000\u0000"+
-        "\u526F\u526D\u0000\u4C23\u0000\u526A\u5273\u526E"+
-        "\u0000\u0000\u0000\u5271\u3846\u4C3F\u0000\u0000"+
-        "\u5272\u0000\u0000\u0000\u5274\u0000\u5276\u0000"+
-        "\u0000\u0000\u7956\u3A70\u4F42\u0000\u526B\u5269"+
-        "\u5275\u0000\u5270\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u7955\u0000\u0000\u0000"+
-        "\u0000\u0000\u5278\u0000\u5323\u527A\u0000\u0000"+
-        "\u527E\u7957\u0000\u5321\u527B\u0000\u0000\u533E"+
-        "\u0000\u0000\u3A69\u3331\u0000\u0000\u0000\u0000"+
-        "\u5279\u0000\u0000\u0000\u5325\u3076\u5324\u0000"+
-        "\u3025\u494A\u5322\u0000\u527C\u0000\u0000\u5277"+
-        "\u527D\u3A48\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5326\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3077\u532F\u0000\u0000\u5327\u5328\u0000"+
-        "\u3E25\u4B69\u0000\u0000\u0000\u532D\u532C\u0000"+
-        "\u0000\u0000\u452F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u532E\u0000\u0000\u532B\u0000\u7958"+
-        "\u0000\u0000\u0000\u0000\u3134\u0000\u3A36\u3F30"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5329"+
-        "\u4562\u0000\u0000\u0000\u532A\u0000\u3022\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5334\u4D23"+
-        "\u0000\u3E27\u0000\u533A\u0000\u0000\u0000\u0000"+
-        "\u5339\u5330\u0000\u0000\u0000\u0000\u4243\u0000"+
-        "\u5331\u0000\u0000\u0000\u426F\u5336\u3E26\u0000"+
-        "\u0000\u0000\u0000\u0000\u5333\u0000\u0000\u4C64"+
-        "\u0000\u0000\u0000\u373C\u0000\u0000\u5337\u5338"+
-        "\u0000\u0000\u0000\u0000\u5335\u533B\u0000\u0000"+
-        "\u0000\u0000\u0000\u5332\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5341\u5346\u0000\u5342\u0000"+
-        "\u533D\u0000\u0000\u5347\u4131\u0000\u7959\u5349"+
-        "\u0000\u3922\u533F\u437D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5343\u533C\u342D\u0000\u346E\u3365\u5344\u5340"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3776"+
-        "\u534A\u5348\u4153\u354A\u362C\u0000\u5345\u0000"+
-        "\u3674\u0000\u0000\u0000\u0000\u0000\u3144\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u534E\u534C\u0000\u5427"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5351\u0000\u0000\u0000"+
-        "\u0000\u0000\u534B\u0000\u534F\u0000\u0000\u534D"+
-        "\u0000\u0000\u0000\u3B4C\u5350\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5353"+
-        "\u0000\u5358\u0000\u0000\u0000\u5356\u5355\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4332\u0000"+
-        "\u0000\u3245\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5352\u0000\u5354\u3E28"+
-        "\u3133\u0000\u0000\u5357\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u325E\u0000\u0000\u0000\u0000\u0000\u5362"+
-        "\u0000\u3E7C\u535E\u0000\u535C\u0000\u535D\u0000"+
-        "\u535F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u313D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4139\u0000\u5359\u0000"+
-        "\u535A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u337A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5361\u0000\u0000\u0000"+
-        "\u346F\u0000\u5364\u5360\u5363\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4A2E\u0000\u0000\u0000"+
-        "\u4655\u0000\u4838\u0000\u0000\u0000\u0000\u0000"+
-        "\u5366\u0000\u0000\u0000\u0000\u0000\u5365\u3345"+
-        "\u0000\u0000\u5367\u0000\u0000\u0000\u0000\u536A"+
-        "\u0000\u0000\u0000\u0000\u5369\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5368\u0000\u4739\u0000\u0000\u536B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u536C\u0000"+
-        "\u0000\u0000\u0000\u0000\u536E\u0000\u536D\u0000"+
-        "\u0000\u0000\u0000\u0000\u5370\u0000\u0000\u0000"+
-        "\u5373\u5371\u536F\u5372\u0000\u0000\u0000\u0000"+
-        "\u5374\u0000\u0000\u0000\u0000\u0000\u5375\u0000"+
-        "\u0000\u5376\u0000\u5377\u0000\u0000\u0000\u5378"+
-        "\u5145\u0000\u3C7C\u3B4D\u0000\u0000\u3273\u0000"+
-        "\u3078\u0000\u0000\u4344\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5379\u0000"+
-        "\u3A24\u0000\u304F\u3F5E\u0000\u0000\u0000\u0000"+
-        "\u0000\u537A\u3847\u0000\u0000\u3971\u0000\u537C"+
-        "\u537B\u0000\u0000\u4A60\u537D\u0000\u0000\u0000"+
-        "\u5421\u537E\u0000\u5422\u0000\u5423\u0000\u3777"+
-        "\u0000\u0000\u3160\u5424\u0000\u0000\u5426\u0000"+
-        "\u5425\u0000\u0000\u0000\u5428\u0000\u0000\u455A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5429\u3035"+
-        "\u3A5F\u0000\u0000\u0000\u0000\u373D\u0000\u0000"+
-        "\u434F\u0000\u0000\u0000\u0000\u0000\u0000\u542A"+
-        "\u542B\u0000\u0000\u542D\u0000\u0000\u0000\u0000"+
-        "\u542E\u0000\u3A64\u0000\u0000\u0000\u0000\u3651"+
-        "\u0000\u0000\u4B37\u0000\u0000\u0000\u542C\u542F"+
-        "\u3A41\u3923\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u795A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5433\u0000\u0000\u3A25\u795B\u4333\u0000"+
-        "\u0000\u5430\u445A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5434"+
-        "\u0000\u0000\u3F62\u0000\u0000\u0000\u0000\u0000"+
-        "\u5432\u5435\u0000\u373F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5436\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5437\u0000\u3924\u3340\u5439\u0000\u0000\u0000"+
-        "\u0000\u0000\u543A\u0000\u795C\u0000\u0000\u0000"+
-        "\u543B\u0000\u0000\u5438\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5431\u0000\u0000\u543C\u0000\u0000\u543D\u795E"+
-        "\u795D\u0000\u0000\u4B64\u0000\u0000\u3E6B\u0000"+
-        "\u0000\u0000\u543F\u5440\u543E\u0000\u5442\u0000"+
-        "\u0000\u0000\u0000\u0000\u4738\u0000\u0000\u3068"+
-        "\u4956\u0000\u0000\u5443\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3E7D\u0000\u0000\u3C39"+
-        "\u0000\u475D\u3470\u0000\u3A6B\u0000\u0000\u0000"+
-        "\u4B59\u0000\u4632\u0000\u0000\u3778\u424F\u0000"+
-        "\u0000\u0000\u5441\u5444\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4244\u0000\u0000"+
-        "\u0000\u5445\u0000\u0000\u0000\u5446\u0000\u0000"+
-        "\u0000\u5448\u0000\u0000\u4469\u0000\u0000\u0000"+
-        "\u0000\u0000\u342E\u0000\u0000\u0000\u0000\u7421"+
-        "\u3161\u4A73\u0000\u0000\u3E6C\u4548\u0000\u0000"+
-        "\u0000\u0000\u3A66\u0000\u0000\u544E\u0000\u0000"+
-        "\u4A3D\u4E5D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3274\u544A\u0000\u0000\u0000\u0000"+
-        "\u0000\u413A\u544D\u0000\u4563\u0000\u0000\u4549"+
-        "\u4564\u4839\u444D\u0000\u0000\u0000\u3A49\u0000"+
-        "\u0000\u0000\u5449\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3176\u0000\u4536\u0000\u0000\u0000\u0000"+
-        "\u544B\u0000\u5447\u0000\u0000\u3F50\u0000\u0000"+
-        "\u0000\u544F\u0000\u0000\u0000\u0000\u3D4E\u0000"+
-        "\u0000\u0000\u0000\u362D\u0000\u5450\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A68\u0000\u0000\u0000\u417D"+
-        "\u0000\u0000\u0000\u0000\u4446\u0000\u7961\u5452"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4B4F\u0000\u0000\u5453\u0000\u0000\u5458\u0000"+
-        "\u0000\u0000\u7962\u4A2F\u0000\u0000\u0000\u0000"+
-        "\u5457\u5451\u5454\u5456\u0000\u0000\u3A26\u0000"+
-        "\u0000\u4A49\u0000\u0000\u0000\u5459\u0000\u4345"+
-        "\u0000\u0000\u3275\u0000\u3E6D\u0000\u0000\u0000"+
-        "\u0000\u545B\u0000\u545A\u0000\u3968\u0000\u545C"+
-        "\u545E\u545D\u0000\u0000\u5460\u0000\u5455\u5462"+
-        "\u0000\u0000\u0000\u0000\u5461\u545F\u0000\u0000"+
-        "\u0000\u0000\u0000\u3B4E\u3F51\u0000\u4154\u5463"+
-        "\u403C\u306D\u4764\u0000\u0000\u0000\u0000\u445B"+
-        "\u0000\u5465\u5464\u5466\u5467\u5468\u0000\u0000"+
-        "\u0000\u0000\u5469\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A51\u546A\u7963\u0000\u0000\u0000\u3246"+
-        "\u546B\u0000\u0000\u0000\u0000\u4D3C\u3330\u0000"+
-        "\u5249\u3D48\u423F\u546C\u4C6B\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C34\u0000\u0000\u546E\u0000\u4267"+
-        "\u0000\u4537\u4240\u4957\u546F\u5470\u317B\u0000"+
-        "\u0000\u3C3A\u5471\u0000\u0000\u0000\u0000\u3050"+
-        "\u5472\u0000\u0000\u0000\u0000\u0000\u5473\u0000"+
-        "\u0000\u0000\u0000\u0000\u3162\u0000\u0000\u3471"+
-        "\u4660\u4A74\u0000\u0000\u0000\u0000\u5477\u4155"+
-        "\u5476\u3740\u0000\u7964\u4B5B\u5475\u0000\u4565"+
-        "\u5479\u0000\u5478\u7965\u0000\u7966\u0000\u0000"+
-        "\u547B\u0000\u547A\u7967\u0000\u317C\u0000\u547C"+
-        "\u3E29\u547E\u4325\u0000\u547D\u0000\u4A33\u0000"+
-        "\u0000\u0000\u0000\u3D77\u455B\u0000\u0000\u0000"+
-        "\u5521\u0000\u0000\u0000\u0000\u3925\u0000\u0000"+
-        "\u0000\u5522\u4721\u485E\u4C51\u0000\u0000\u0000"+
-        "\u0000\u0000\u4725\u0000\u0000\u552B\u0000\u0000"+
-        "\u0000\u0000\u0000\u3538\u0000\u0000\u4D45\u0000"+
-        "\u0000\u4C2F\u0000\u562C\u0000\u5523\u0000\u0000"+
-        "\u0000\u0000\u0000\u5526\u7968\u4245\u0000\u0000"+
-        "\u4B38\u0000\u0000\u0000\u454A\u0000\u0000\u0000"+
-        "\u0000\u0000\u5527\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4B65\u7969\u3A4A\u0000\u0000\u3E2A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5528\u0000"+
-        "\u0000\u3B50\u0000\u3B4F\u0000\u0000\u0000\u0000"+
-        "\u3039\u3848\u0000\u402B\u3051\u0000\u0000\u0000"+
-        "\u0000\u552C\u552D\u0000\u552A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3138\u342F\u0000"+
-        "\u5529\u0000\u4C45\u4931\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3028\u0000"+
-        "\u0000\u0000\u0000\u3079\u0000\u0000\u0000\u3B51"+
-        "\u0000\u3052\u0000\u3023\u0000\u0000\u0000\u0000"+
-        "\u0000\u5532\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5530\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4C3C\u0000\u5533\u0000\u5531\u0000\u0000\u552F"+
-        "\u3F31\u0000\u0000\u0000\u0000\u552E\u0000\u0000"+
-        "\u0000\u4A5A\u0000\u0000\u0000\u0000\u0000\u3864"+
-        "\u0000\u0000\u0000\u0000\u0000\u5537\u5538\u0000"+
-        "\u0000\u0000\u0000\u0000\u3E2B\u0000\u0000\u0000"+
-        "\u5534\u4F2C\u0000\u0000\u0000\u0000\u474C\u0000"+
-        "\u0000\u5536\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3A27\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5539\u0000\u0000\u0000\u4958\u0000"+
-        "\u0000\u0000\u553A\u0000\u5535\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4C3B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u475E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u553B\u4932\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u553C\u5540\u553D\u0000"+
-        "\u0000\u3247\u553F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3C3B\u0000\u553E\u3779\u0000\u0000\u0000"+
-        "\u554C\u0000\u0000\u0000\u0000\u0000\u5545\u5542"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4364\u0000\u5541\u0000\u0000\u5543\u0000"+
-        "\u0000\u5544\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5546\u5547\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3472\u0000\u5549\u5548\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u554A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3E6E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u554D\u0000\u445C\u0000\u0000\u0000"+
-        "\u3145\u0000\u554B\u0000\u0000\u0000\u554E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u554F\u0000"+
-        "\u5552\u0000\u0000\u5550\u0000\u5551\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3B52\u5553\u0000\u0000\u3926\u5554\u796A\u3B7A"+
-        "\u4238\u0000\u5555\u5556\u3B5A\u3927\u0000\u4C52"+
-        "\u0000\u0000\u0000\u3528\u3849\u5557\u3358\u0000"+
-        "\u0000\u5558\u0000\u4239\u0000\u0000\u0000\u0000"+
-        "\u5559\u5623\u0000\u555A\u0000\u555B\u0000\u0000"+
-        "\u555C\u0000\u555E\u0000\u0000\u0000\u0000\u0000"+
-        "\u555F\u0000\u0000\u5560\u0000\u4270\u0000\u3127"+
-        "\u3C69\u3042\u0000\u4157\u3430\u3C35\u0000\u3928"+
-        "\u0000\u0000\u0000\u0000\u0000\u4566\u0000\u3D21"+
-        "\u3431\u4368\u446A\u3038\u3539\u4A75\u0000\u3C42"+
-        "\u0000\u0000\u3552\u406B\u3C3C\u4D28\u5561\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u355C\u0000"+
-        "\u3A4B\u0000\u0000\u3332\u3163\u3E2C\u3248\u0000"+
-        "\u5562\u4D46\u0000\u0000\u0000\u0000\u0000\u3D49"+
-        "\u796B\u0000\u3C64\u5563\u3473\u4652\u4C29\u5564"+
-        "\u0000\u5565\u0000\u0000\u4959\u0000\u0000\u0000"+
-        "\u5567\u0000\u3428\u3677\u5566\u0000\u0000\u0000"+
-        "\u796D\u0000\u0000\u3432\u0000\u3F32\u556B\u3B21"+
-        "\u0000\u3249\u556A\u0000\u5568\u556C\u5569\u472B"+
-        "\u5C4D\u3F33\u0000\u556D\u796E\u0000\u4E40\u0000"+
-        "\u556E\u0000\u0000\u5570\u0000\u437E\u556F\u0000"+
-        "\u4023\u0000\u3B7B\u0000\u0000\u0000\u4250\u3C77"+
-        "\u0000\u4975\u406C\u0000\u3C4D\u5571\u3E2D\u5572"+
-        "\u5573\u3053\u423A\u3F52\u0000\u5574\u4633\u3E2E"+
-        "\u0000\u3E2F\u0000\u5575\u0000\u0000\u406D\u0000"+
-        "\u0000\u0000\u3E30\u0000\u0000\u0000\u796F\u0000"+
-        "\u5576\u0000\u5577\u0000\u4C60\u0000\u0000\u0000"+
-        "\u5578\u0000\u0000\u0000\u0000\u3646\u0000\u0000"+
-        "\u0000\u3D22\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5579\u557A\u3C5C\u3F2C\u4674\u3F54\u4878\u4722"+
-        "\u3649\u557B\u0000\u0000\u0000\u356F\u557C\u0000"+
-        "\u367E\u0000\u464F\u3230\u0000\u3B53\u557D\u5622"+
-        "\u5621\u367D\u0000\u557E\u0000\u4538\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4230\u0000"+
-        "\u454B\u3C48\u0000\u0000\u4158\u4D7A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5624\u0000\u5625\u4656"+
-        "\u0000\u3B33\u0000\u0000\u0000\u0000\u5627\u0000"+
-        "\u0000\u5628\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5629\u0000\u0000\u0000"+
-        "\u3474\u562A\u0000\u0000\u562B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u322C\u0000\u0000\u0000\u0000\u7970\u0000"+
-        "\u413B\u3464\u0000\u562D\u4C28\u0000\u0000\u0000"+
-        "\u0000\u4252\u0000\u3359\u0000\u0000\u562F\u5631"+
-        "\u345F\u0000\u7971\u562E\u5630\u0000\u5633\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5632\u0000\u5634"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5635\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u463D\u362E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3265\u5636\u563B\u0000\u0000\u5639\u0000\u4A77"+
-        "\u4A76\u0000\u0000\u0000\u0000\u7972\u4567\u0000"+
-        "\u0000\u0000\u5638\u3D54\u0000\u5637\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3F72"+
-        "\u0000\u0000\u0000\u563C\u0000\u0000\u3A6A\u0000"+
-        "\u0000\u5642\u0000\u0000\u5643\u563D\u3333\u563E"+
-        "\u5647\u5646\u5645\u5641\u0000\u0000\u0000\u5640"+
-        "\u0000\u0000\u5644\u0000\u0000\u0000\u0000\u7973"+
-        "\u0000\u4A78\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u7976\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u564B\u5648\u0000\u564A\u0000"+
-        "\u4D72\u0000\u5649\u7974\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u563F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3F73\u0000\u0000\u564C\u7977\u0000\u3A37"+
-        "\u0000\u0000\u0000\u564D\u0000\u0000\u564E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5651\u0000\u5650\u0000\u0000\u564F"+
-        "\u0000\u0000\u0000\u4568\u563A\u0000\u0000\u0000"+
-        "\u5657\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5653\u0000\u0000"+
-        "\u0000\u0000\u5652\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5654\u0000\u5655\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5658"+
-        "\u7978\u7979\u4E66\u0000\u5659\u5656\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u565A\u0000\u0000\u3460\u565B\u0000\u0000"+
-        "\u797A\u0000\u565D\u565C\u0000\u0000\u565E\u0000"+
-        "\u0000\u0000\u0000\u565F\u0000\u406E\u3D23\u0000"+
-        "\u0000\u3D64\u0000\u4163\u0000\u3929\u3A38\u392A"+
-        "\u3570\u0000\u0000\u5660\u0000\u0000\u3A39\u0000"+
-        "\u0000\u384A\u5661\u4C26\u4743\u5662\u0000\u392B"+
-        "\u0000\u0000\u0000\u342C\u0000\u4327\u3652\u0000"+
-        "\u0000\u0000\u3B54\u495B\u0000\u0000\u4841\u0000"+
-        "\u0000\u0000\u0000\u5663\u3475\u0000\u0000\u0000"+
-        "\u0000\u5666\u0000\u0000\u0000\u0000\u4421\u0000"+
-        "\u0000\u5665\u5664\u5667\u0000\u446B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3F63\u0000\u0000"+
-        "\u0000\u0000\u0000\u3B55\u0000\u404A\u0000\u4253"+
-        "\u3522\u0000\u0000\u4422\u0000\u0000\u5668\u5669"+
-        "\u3E6F\u0000\u0000\u0000\u0000\u4B39\u0000\u0000"+
-        "\u566C\u0000\u0000\u566B\u566A\u497D\u0000\u5673"+
-        "\u0000\u0000\u0000\u0000\u4B5A\u0000\u566D\u0000"+
-        "\u0000\u0000\u0000\u0000\u566F\u4B6B\u0000\u566E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5670"+
-        "\u0000\u4828\u5671\u4A3E\u5672\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3433\u4A3F\u472F\u5674\u5675\u0000"+
-        "\u392C\u3434\u5676\u3838\u4D44\u4D29\u3476\u5678"+
-        "\u0000\u4423\u0000\u392D\u3E31\u0000\u0000\u485F"+
-        "\u0000\u0000\u3E32\u0000\u0000\u0000\u0000\u3D78"+
-        "\u0000\u0000\u0000\u0000\u0000\u446C\u4A79\u4539"+
-        "\u0000\u0000\u392E\u0000\u495C\u0000\u0000\u0000"+
-        "\u5679\u0000\u0000\u0000\u0000\u0000\u4559\u3A42"+
-        "\u0000\u0000\u0000\u384B\u0000\u446D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3043\u3D6E\u392F"+
-        "\u4D47\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u567A\u567B\u4751\u0000\u0000\u0000\u0000"+
-        "\u567C\u4E77\u4F2D\u0000\u0000\u0000\u0000\u567E"+
-        "\u567D\u0000\u0000\u3347\u0000\u0000\u5721\u0000"+
-        "\u0000\u0000\u5724\u5725\u0000\u5723\u0000\u4940"+
-        "\u3E33\u5727\u5726\u5722\u0000\u0000\u0000\u0000"+
-        "\u5728\u5729\u0000\u0000\u572A\u0000\u0000\u0000"+
-        "\u572D\u572B\u0000\u572C\u572E\u0000\u3164\u446E"+
-        "\u572F\u0000\u377A\u3276\u4736\u0000\u5730\u467B"+
-        "\u0000\u4A5B\u0000\u5731\u4F2E\u0000\u0000\u0000"+
-        "\u0000\u5732\u4A40\u5735\u5021\u5031\u0000\u3C30"+
-        "\u4675\u5736\u0000\u355D\u4424\u307A\u5737\u4A26"+
-        "\u3930\u0000\u0000\u4350\u0000\u0000\u0000\u446F"+
-        "\u0000\u797B\u0000\u0000\u0000\u4C6F\u3839\u384C"+
-        "\u0000\u5738\u0000\u0000\u0000\u5739\u0000\u573F"+
-        "\u0000\u3C65\u0000\u0000\u797C\u4425\u0000\u362F"+
-        "\u573A\u0000\u0000\u0000\u492B\u0000\u4346\u0000"+
-        "\u0000\u573B\u0000\u0000\u0000\u792C\u0000\u0000"+
-        "\u573C\u0000\u3630\u0000\u573D\u0000\u573E\u0000"+
-        "\u0000\u5740\u0000\u4576\u0000\u0000\u5741\u5742"+
-        "\u0000\u5743\u0000\u0000\u5734\u5733\u0000\u0000"+
-        "\u0000\u5744\u3741\u0000\u0000\u0000\u4927\u797D"+
-        "\u0000\u3A4C\u4937\u4426\u494B\u5745\u0000\u0000"+
-        "\u3E34\u3146\u0000\u5746\u0000\u0000\u0000\u5747"+
-        "\u0000\u4C72\u0000\u0000\u4860\u0000\u0000\u574A"+
-        "\u317D\u402C\u5749\u5748\u3742\u4254\u0000\u574E"+
-        "\u574C\u0000\u574B\u4E27\u3865\u0000\u0000\u0000"+
-        "\u3D79\u574D\u454C\u3D3E\u0000\u0000\u0000\u4640"+
-        "\u5751\u5750\u0000\u0000\u0000\u0000\u574F\u0000"+
-        "\u5752\u3866\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5753\u497C\u3D5B\u0000\u0000\u5754\u4879\u0000"+
-        "\u0000\u0000\u0000\u4641\u4427\u0000\u0000\u797E"+
-        "\u0000\u4530\u0000\u0000\u5755\u352B\u0000\u0000"+
-        "\u0000\u0000\u0000\u3F34\u0000\u492C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3477\u4726\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5756\u3B56"+
-        "\u4B3A\u4B3B\u0000\u0000\u317E\u575B\u7A21\u0000"+
-        "\u4369\u0000\u0000\u0000\u5758\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3277\u0000\u0000\u0000\u0000"+
-        "\u582D\u575A\u0000\u0000\u0000\u4730\u0000\u0000"+
-        "\u5759\u0000\u0000\u5757\u0000\u397A\u0000\u575D";
-
-    private final static String innerIndex2=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5763\u5769"+
-        "\u5761\u0000\u455C\u0000\u0000\u5766\u495D\u0000"+
-        "\u0000\u5760\u0000\u5765\u4E67\u3B57\u0000\u0000"+
-        "\u4255\u575E\u0000\u0000\u0000\u355E\u5768\u402D"+
-        "\u3165\u5762\u3278\u5767\u0000\u0000\u0000\u3631"+
-        "\u0000\u5764\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u576A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u576C\u5776\u5774\u0000\u0000\u5771\u0000"+
-        "\u0000\u0000\u5770\u4E78\u0000\u5772\u0000\u0000"+
-        "\u3632\u0000\u3931\u0000\u0000\u3D7A\u0000\u0000"+
-        "\u0000\u5779\u576B\u0000\u0000\u7A22\u0000\u576F"+
-        "\u575F\u0000\u327A\u5773\u5775\u4351\u0000\u0000"+
-        "\u3A28\u3238\u576D\u5778\u5777\u3633\u0000\u4229"+
-        "\u3366\u0000\u0000\u0000\u0000\u3743\u0000\u576E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u577A\u0000\u577D\u5821\u7A23\u0000\u0000"+
-        "\u0000\u3C3D\u7A24\u5827\u4470\u577B\u0000\u0000"+
-        "\u0000\u0000\u5825\u0000\u3279\u0000\u5823\u5824"+
-        "\u0000\u0000\u577E\u5822\u0000\u0000\u0000\u3867"+
-        "\u4D2A\u0000\u0000\u3435\u0000\u0000\u3159\u5826"+
-        "\u0000\u473A\u302D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4861\u575C\u582C\u5830\u4C65\u0000"+
-        "\u5829\u0000\u0000\u0000\u4569\u582E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3E70\u582F\u4657"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4F47\u0000\u582B\u0000\u7A26\u0000\u0000"+
-        "\u5831\u0000\u397B\u0000\u404B\u0000\u7A25\u3054"+
-        "\u582A\u5828\u0000\u415A\u0000\u0000\u0000\u577C"+
-        "\u3B34\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4246\u583D\u7A28\u415B\u5838\u0000\u5835\u5836"+
-        "\u0000\u3C66\u5839\u583C\u0000\u0000\u0000\u0000"+
-        "\u5837\u3D25\u0000\u583A\u0000\u0000\u5834\u0000"+
-        "\u4C7C\u4C7B\u0000\u0000\u0000\u583E\u583F\u3055"+
-        "\u0000\u7A29\u0000\u0000\u0000\u5833\u0000\u0000"+
-        "\u0000\u0000\u3672\u3026\u0000\u0000\u0000\u3436"+
-        "\u7A27\u583B\u0000\u0000\u0000\u0000\u0000\u5843"+
-        "\u5842\u0000\u0000\u0000\u5847\u0000\u0000\u0000"+
-        "\u7A2B\u0000\u0000\u0000\u5848\u0000\u0000\u7A2A"+
-        "\u0000\u0000\u0000\u0000\u5846\u5849\u5841\u5845"+
-        "\u0000\u0000\u584A\u0000\u584B\u0000\u0000\u5840"+
-        "\u3B7C\u0000\u5844\u4256\u3932\u5832\u3F35\u0000"+
-        "\u0000\u0000\u0000\u5858\u0000\u4A69\u0000\u0000"+
-        "\u584E\u584F\u5850\u0000\u0000\u5857\u0000\u5856"+
-        "\u0000\u0000\u4B7D\u3437\u0000\u5854\u0000\u3745"+
-        "\u3334\u0000\u0000\u5851\u0000\u0000\u4E38\u5853"+
-        "\u3056\u5855\u0000\u584C\u5852\u5859\u3744\u584D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4D5D\u0000"+
-        "\u0000\u0000\u4D2B\u0000\u0000\u0000\u0000\u585C"+
-        "\u0000\u0000\u5860\u0000\u0000\u0000\u417E\u0000"+
-        "\u4E79\u5861\u0000\u0000\u585E\u0000\u585B\u0000"+
-        "\u7A2C\u585A\u585F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4A30\u0000\u0000\u4634"+
-        "\u0000\u3746\u0000\u5862\u585D\u0000\u5863\u0000"+
-        "\u0000\u0000\u377B\u0000\u0000\u0000\u3231\u0000"+
-        "\u0000\u0000\u586B\u0000\u0000\u0000\u3438\u0000"+
-        "\u0000\u0000\u0000\u5869\u0000\u0000\u586A\u3A29"+
-        "\u5868\u5866\u5865\u586C\u5864\u586E\u0000\u0000"+
-        "\u327B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5870\u0000\u0000\u586F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4428\u0000\u5873\u0000\u5871\u5867"+
-        "\u377C\u0000\u5872\u0000\u5876\u5875\u5877\u5874"+
-        "\u5878\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5879\u587A\u4A6A\u0000\u587C\u587B\u3D3F\u0000"+
-        "\u402E\u3266\u327C\u7A2D\u587D\u0000\u303F\u0000"+
-        "\u0000\u0000\u404C\u587E\u0000\u6C43\u5921\u3761"+
-        "\u0000\u5922\u0000\u0000\u0000\u0000\u406F\u0000"+
-        "\u0000\u0000\u5923\u0000\u0000\u0000\u5924\u353A"+
-        "\u5925\u0000\u5926\u5927\u4257\u0000\u0000\u0000"+
-        "\u384D\u0000\u0000\u4C61\u0000\u0000\u0000\u4B3C"+
-        "\u3D6A\u5928\u0000\u0000\u0000\u0000\u0000\u4070"+
-        "\u6E3D\u4862\u0000\u3C6A\u0000\u3A4D\u5929\u0000"+
-        "\u0000\u0000\u0000\u4247\u0000\u4A27\u0000\u0000"+
-        "\u4271\u0000\u0000\u592C\u0000\u0000\u592A\u0000"+
-        "\u592D\u0000\u0000\u592B\u0000\u0000\u0000\u0000"+
-        "\u592E\u0000\u0000\u0000\u0000\u0000\u4A31\u0000"+
-        "\u0000\u3037\u0000\u0000\u0000\u0000\u495E\u0000"+
-        "\u0000\u4863\u0000\u0000\u592F\u0000\u5932\u3E35"+
-        "\u353B\u0000\u5930\u5937\u3E36\u0000\u0000\u0000"+
-        "\u0000\u5931\u4744\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4D5E\u5933\u5934\u5938\u456A\u5935\u3933"+
-        "\u405E\u0000\u0000\u5946\u4834\u0000\u4272\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7A2E\u0000"+
-        "\u0000\u0000\u0000\u4864\u5A2D\u0000\u0000\u0000"+
-        "\u0000\u4A7A\u0000\u0000\u0000\u4471\u0000\u0000"+
-        "\u0000\u4B75\u0000\u593B\u3221\u436A\u0000\u0000"+
-        "\u0000\u0000\u5944\u0000\u0000\u4334\u593E\u5945"+
-        "\u5940\u5947\u5943\u0000\u5942\u476F\u0000\u593C"+
-        "\u327D\u593A\u3571\u4273\u5936\u0000\u0000\u5939"+
-        "\u3934\u405B\u0000\u3E37\u5941\u4752\u0000\u0000"+
-        "\u3572\u3348\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3367\u3F21\u5949\u594E"+
-        "\u0000\u594A\u0000\u377D\u0000\u594F\u3B22\u3969"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3D26\u593D"+
-        "\u0000\u3B7D\u594C\u0000\u0000\u0000\u0000\u3B58"+
-        "\u594D\u3044\u0000\u0000\u5948\u0000\u0000\u0000"+
-        "\u0000\u4429\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3573\u0000\u0000\u0000\u0000\u0000\u3634"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u594B"+
-        "\u3027\u0000\u0000\u3A43\u0000\u0000\u0000\u3F36"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4472\u0000\u0000\u4854\u5951\u415E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u422A\u0000\u0000\u3B2B\u5952\u0000\u5954"+
-        "\u5950\u0000\u0000\u0000\u0000\u4A61\u0000\u443D"+
-        "\u0000\u0000\u0000\u0000\u415C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4A7B"+
-        "\u3C4E\u5960\u0000\u595F\u0000\u0000\u3F78\u0000"+
-        "\u0000\u0000\u377E\u0000\u0000\u0000\u5959\u3E39"+
-        "\u0000\u0000\u4668\u4731\u0000\u0000\u0000\u0000"+
-        "\u5957\u0000\u0000\u415D\u0000\u0000\u0000\u0000"+
-        "\u3C78\u595C\u0000\u0000\u3E38\u0000\u5956\u595B"+
-        "\u0000\u0000\u4753\u0000\u0000\u0000\u5955\u0000"+
-        "\u3721\u0000\u0000\u335D\u0000\u0000\u0000\u595D"+
-        "\u4E2B\u3A4E\u4335\u595A\u0000\u405C\u0000\u3935"+
-        "\u3F64\u3166\u413C\u5958\u3545\u0000\u0000\u0000"+
-        "\u0000\u0000\u3747\u0000\u444F\u595E\u0000\u0000"+
-        "\u0000\u0000\u0000\u415F\u0000\u0000\u5961\u0000"+
-        "\u5963\u0000\u0000\u4237\u5969\u0000\u5964\u0000"+
-        "\u0000\u5966\u0000\u0000\u0000\u0000\u0000\u4941"+
-        "\u4473\u0000\u5967\u0000\u0000\u0000\u4D2C\u0000"+
-        "\u0000\u0000\u4D48\u3439\u0000\u0000\u0000\u0000"+
-        "\u0000\u302E\u0000\u5965\u0000\u0000\u0000\u0000"+
-        "\u0000\u5962\u0000\u0000\u0000\u0000\u3478\u0000"+
-        "\u0000\u0000\u0000\u0000\u3167\u7A2F\u5968\u0000"+
-        "\u0000\u0000\u4D49\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u596C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u423B\u0000\u5973"+
-        "\u0000\u0000\u0000\u596D\u0000\u0000\u596A\u5971"+
-        "\u0000\u0000\u0000\u0000\u5953\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u596E\u0000"+
-        "\u5972\u0000\u0000\u0000\u4842\u456B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u596B\u0000\u596F\u0000"+
-        "\u0000\u0000\u3748\u0000\u0000\u0000\u3A71\u0000"+
-        "\u0000\u0000\u405D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5977\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4526\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7A30\u0000\u0000\u0000\u0000\u0000\u0000\u5974"+
-        "\u0000\u4B60\u0000\u0000\u0000\u0000\u0000\u5975"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5976\u0000"+
-        "\u4C4E\u0000\u4022\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3762\u0000\u0000\u0000\u0000"+
-        "\u597D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3B35\u597A\u0000\u5979\u0000\u0000"+
-        "\u0000\u0000\u4732\u0000\u0000\u7A31\u4635\u0000"+
-        "\u0000\u0000\u0000\u0000\u4531\u597B\u0000\u0000"+
-        "\u0000\u597C\u0000\u496F\u0000\u4745\u3B23\u0000"+
-        "\u4071\u0000\u4B50\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3349\u0000\u5A25\u597E\u0000\u0000\u0000"+
-        "\u0000\u4D4A\u5A27\u0000\u0000\u5A23\u0000\u5A24"+
-        "\u0000\u0000\u0000\u0000\u0000\u4160\u7A32\u0000"+
-        "\u0000\u0000\u5A22\u0000\u593F\u0000\u0000\u0000"+
-        "\u5A26\u0000\u5A21\u0000\u0000\u0000\u0000\u0000"+
-        "\u5A2B\u5A2C\u4527\u5A2E\u0000\u0000\u3B24\u5A29"+
-        "\u0000\u0000\u0000\u0000\u353C\u0000\u0000\u5A2F"+
-        "\u0000\u5A28\u5A33\u0000\u5A32\u0000\u5A31\u0000"+
-        "\u0000\u0000\u5A34\u0000\u0000\u5A36\u3E71\u0000"+
-        "\u5A35\u0000\u0000\u0000\u0000\u5A39\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5A37\u0000\u0000\u0000\u5A38\u5970\u0000\u0000"+
-        "\u0000\u0000\u0000\u5A3B\u5A3A\u0000\u0000\u0000"+
-        "\u0000\u0000\u5978\u5A3C\u5A30\u0000\u0000\u3B59"+
-        "\u0000\u0000\u0000\u0000\u5A3D\u5A3E\u5A40\u5A3F"+
-        "\u5A41\u327E\u0000\u3936\u0000\u0000\u4A7C\u402F"+
-        "\u0000\u0000\u0000\u0000\u0000\u384E\u0000\u0000"+
-        "\u5A43\u0000\u0000\u0000\u0000\u5A46\u7A33\u4952"+
-        "\u0000\u355F\u0000\u0000\u0000\u5A45\u5A44\u4754"+
-        "\u5A47\u3635\u0000\u0000\u0000\u5A49\u5A48\u0000"+
-        "\u0000\u0000\u343A\u3B36\u0000\u0000\u4658\u0000"+
-        "\u0000\u0000\u0000\u0000\u3749\u0000\u0000\u0000"+
-        "\u3F74\u0000\u5A4A\u0000\u4030\u4528\u0000\u495F"+
-        "\u5A4B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5A4C\u5A4D\u0000\u0000\u0000\u4A38"+
-        "\u555D\u4046\u0000\u0000\u494C\u0000\u3A58\u0000"+
-        "\u4865\u4843\u0000\u0000\u0000\u0000\u0000\u454D"+
-        "\u0000\u4E41\u0000\u5A4F\u3C50\u0000\u0000\u5A50"+
-        "\u0000\u3036\u0000\u0000\u3654\u404D\u0000\u4960"+
-        "\u0000\u0000\u0000\u5A51\u3B42\u4347\u0000\u3B5B"+
-        "\u3F37\u0000\u0000\u0000\u0000\u0000\u0000\u5A52"+
-        "\u0000\u4A7D\u0000\u0000\u3177\u3B5C\u0000\u0000"+
-        "\u0000\u5A55\u0000\u5A53\u5A56\u4E39\u5A54\u0000"+
-        "\u0000\u0000\u0000\u407B\u5A57\u0000\u0000\u4232"+
-        "\u0000\u0000\u5A58\u0000\u0000\u0000\u0000\u347A"+
-        "\u0000\u5A5A\u0000\u5A59\u0000\u0000\u0000\u0000"+
-        "\u5A5B\u5A5C\u347B\u0000\u0000\u467C\u4336\u356C"+
-        "\u3B5D\u4161\u0000\u0000\u3D5C\u3030\u0000\u0000"+
-        "\u0000\u5A5D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3222\u5A61\u0000\u0000\u0000\u0000"+
-        "\u7A34\u0000\u3937\u5A60\u0000\u0000\u3A2B\u3E3A"+
-        "\u0000\u7A37\u5A5F\u0000\u3E3B\u0000\u4C40\u3A2A"+
-        "\u0000\u0000\u0000\u3057\u404E\u7A35\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5A66\u0000\u7A39\u4031"+
-        "\u3147\u0000\u0000\u0000\u7A3A\u3D55\u0000\u4B66"+
-        "\u3A72\u0000\u0000\u0000\u0000\u3E3C\u7A38\u4027"+
-        "\u0000\u7928\u0000\u0000\u5A65\u5A63\u5A64\u0000"+
-        "\u0000\u0000\u0000\u7A36\u436B\u0000\u0000\u5B26"+
-        "\u0000\u5A6A\u3B7E\u3938\u5A68\u0000\u0000\u0000"+
-        "\u0000\u5A69\u0000\u3F38\u0000\u0000\u0000\u5A67"+
-        "\u0000\u0000\u3B2F\u0000\u0000\u0000\u0000\u7A3C"+
-        "\u0000\u7A3D\u0000\u0000\u0000\u5A6C\u5A6B\u5A70"+
-        "\u0000\u0000\u5A71\u0000\u5A6D\u7A3B\u3322\u5A6E"+
-        "\u5A6F\u4855\u0000\u0000\u0000\u0000\u4961\u374A"+
-        "\u5A72\u0000\u0000\u7A3F\u4032\u0000\u3E3D\u0000"+
-        "\u0000\u0000\u4352\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3647\u0000\u5A73\u5A77\u0000\u0000\u324B"+
-        "\u5A74\u5A76\u0000\u0000\u0000\u0000\u5A75\u0000"+
-        "\u0000\u3D6B\u0000\u0000\u0000\u0000\u4348\u3045"+
-        "\u5A78\u7A40\u0000\u0000\u0000\u5A79\u0000\u0000"+
-        "\u7A41\u0000\u442A\u0000\u0000\u0000\u4E71\u0000"+
-        "\u0000\u0000\u0000\u3B43\u0000\u0000\u4A6B\u0000"+
-        "\u0000\u0000\u7A42\u0000\u4B3D\u0000\u0000\u0000"+
-        "\u5B22\u5A7B\u0000\u0000\u5A7E\u0000\u5A7D\u7A43"+
-        "\u0000\u5A7A\u0000\u0000\u5B21\u0000\u0000\u465E"+
-        "\u0000\u5A7C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5B23\u0000"+
-        "\u0000\u3D6C\u5B24\u0000\u4D4B\u4778\u0000\u0000"+
-        "\u5B25\u0000\u0000\u0000\u0000\u0000\u5B27\u0000"+
-        "\u0000\u5B28\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5B29\u0000\u364A\u3148\u3939\u5B2A\u0000\u5B2B"+
-        "\u3D71\u4162\u7A44\u792B\u5258\u413E\u413D\u4258"+
-        "\u3A47\u0000\u0000\u5072\u0000\u0000\u0000\u0000"+
-        "\u376E\u4D2D\u0000\u4A7E\u0000\u497E\u7A45\u5B2C"+
-        "\u0000\u0000\u0000\u0000\u3A73\u443F\u5B2D\u4F2F"+
-        "\u0000\u0000\u0000\u4B3E\u0000\u442B\u5B2E\u347C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5B2F\u5B30"+
-        "\u4C5A\u0000\u4C24\u4B76\u4B5C\u3B25\u5B32\u0000"+
-        "\u0000\u3C6B\u0000\u0000\u4B51\u0000\u5B34\u5B37"+
-        "\u5B36\u0000\u3479\u0000\u0000\u3560\u0000\u5B33"+
-        "\u0000\u5B35\u0000\u0000\u0000\u0000\u5B38\u0000"+
-        "\u0000\u3F79\u0000\u0000\u0000\u0000\u4D7B\u3049"+
-        "\u3A60\u423C\u0000\u3C5D\u0000\u0000\u3E73\u0000"+
-        "\u0000\u5B3B\u0000\u0000\u454E\u0000\u5B39\u422B"+
-        "\u5B3A\u3E72\u4C5D\u5B3C\u5B3D\u4D68\u7A47\u0000"+
-        "\u0000\u0000\u5B42\u0000\u0000\u393A\u0000\u4755"+
-        "\u5B3F\u456C\u5A5E\u5A62\u0000\u354F\u0000\u4747"+
-        "\u0000\u0000\u0000\u0000\u5B41\u0000\u3E3E\u4844"+
-        "\u0000\u0000\u0000\u0000\u0000\u5B47\u0000\u487A"+
-        "\u0000\u5B3E\u0000\u5B44\u5B43\u0000\u0000\u0000"+
-        "\u404F\u0000\u0000\u0000\u0000\u4B6D\u0000\u4E53"+
-        "\u0000\u0000\u4B67\u0000\u324C\u3B5E\u0000\u0000"+
-        "\u4F48\u5B46\u3F75\u0000\u0000\u0000\u5B45\u0000"+
-        "\u0000\u5B40\u0000\u0000\u0000\u0000\u0000\u384F"+
-        "\u0000\u0000\u0000\u5B4C\u5B4A\u0000\u324D\u5B48"+
-        "\u5B4E\u5B54\u0000\u7A48\u0000\u0000\u0000\u0000"+
-        "\u7A4A\u4248\u0000\u0000\u4A41\u0000\u5B56\u0000"+
-        "\u0000\u0000\u4922\u0000\u0000\u0000\u5B55\u4770"+
-        "\u4B3F\u343B\u0000\u4077\u3D40\u0000\u0000\u0000"+
-        "\u4453\u0000\u4D2E\u0000\u0000\u5B51\u5B50\u0000"+
-        "\u0000\u0000\u5B52\u0000\u5B4F\u0000\u0000\u5B57"+
-        "\u0000\u5B4D\u0000\u0000\u5B4B\u0000\u5B53\u5B49"+
-        "\u0000\u436C\u0000\u4C78\u3C46\u3A74\u0000\u0000"+
-        "\u0000\u0000\u0000\u3A3A\u0000\u0000\u4B6F\u3341"+
-        "\u0000\u7A4B\u444E\u464A\u3149\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4072\u0000\u0000\u4034\u372A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5B59\u0000"+
-        "\u0000\u393B\u337C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5B5B\u3374\u5B61\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5B5E\u0000\u4073\u0000\u0000\u0000"+
-        "\u334B\u3A2C\u0000\u0000\u334A\u3A4F\u0000\u0000"+
-        "\u5B5C\u3765\u374B\u456D\u7A4C\u0000\u5B5A\u0000"+
-        "\u3046\u0000\u0000\u0000\u0000\u5B5D\u5B5F\u0000"+
-        "\u364D\u372C\u7A49\u343C\u354B\u0000\u0000\u0000"+
-        "\u0000\u5B62\u0000\u0000\u3A79\u4B71\u0000\u3B37"+
-        "\u0000\u0000\u0000\u5B63\u0000\u0000\u0000\u4930"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5B6F\u0000\u3233\u5B64"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5B75\u5B65"+
-        "\u0000\u4E42\u0000\u5B6C\u0000\u475F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5B74\u0000\u5B67"+
-        "\u0000\u0000\u0000\u3034\u5B69\u0000\u0000\u393C"+
-        "\u0000\u0000\u0000\u5B6B\u0000\u5B6A\u0000\u5B66"+
-        "\u5B71\u0000\u3E3F\u0000\u0000\u0000\u546D\u3868"+
-        "\u4D7C\u0000\u0000\u0000\u0000\u5B68\u0000\u4474"+
-        "\u3323\u3A2D\u0000\u5B60\u0000\u5B70\u3361\u0000"+
-        "\u0000\u5B6E\u5B72\u0000\u456E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u347E\u0000\u5C32\u0000"+
-        "\u7929\u4C49\u5B77\u347D\u0000\u5B7E\u0000\u7A4D"+
-        "\u0000\u0000\u4B40\u0000\u5C21\u5C23\u0000\u5C27"+
-        "\u5B79\u0000\u432A\u0000\u0000\u0000\u0000\u456F"+
-        "\u5C2B\u5B7C\u0000\u5C28\u0000\u0000\u0000\u5C22"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3F39\u5C2C"+
-        "\u0000\u0000\u4033\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5C2A\u343D\u0000\u0000\u0000\u0000\u0000"+
-        "\u4F50\u5B76\u0000\u0000\u5C26\u3058\u0000\u0000"+
-        "\u5B78\u0000\u0000\u4C3A\u5B7D\u3F22\u4447\u5B73"+
-        "\u0000\u0000\u5C25\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3F7A\u5C2F\u3371\u3821\u0000\u0000\u0000"+
-        "\u0000\u5C31\u5B7A\u5C30\u0000\u5C29\u5B7B\u0000"+
-        "\u5C2D\u0000\u5C2E\u0000\u0000\u0000\u0000\u0000"+
-        "\u5C3F\u0000\u0000\u0000\u464E\u0000\u5C24\u0000"+
-        "\u0000\u5C3B\u0000\u0000\u0000\u5C3D\u0000\u4458"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D4C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4976\u5C38\u424A\u0000\u0000"+
-        "\u0000\u5C3E\u413F\u0000\u5C35\u5C42\u5C41\u0000"+
-        "\u466F\u5C40\u466A\u0000\u0000\u0000\u0000\u0000"+
-        "\u7A4F\u0000\u5C44\u5C37\u0000\u3648\u5C3A\u3D5D"+
-        "\u0000\u0000\u0000\u4760\u5C3C\u364B\u0000\u5C34"+
-        "\u5C36\u5C33\u0000\u0000\u4F30\u335A\u5C39\u0000"+
-        "\u0000\u5C43\u3335\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3A67\u0000\u0000\u0000\u315D\u0000"+
-        "\u0000\u5C54\u0000\u0000\u4F31\u5C57\u0000\u0000"+
-        "\u7A51\u0000\u0000\u3F3A\u5C56\u0000\u0000\u0000"+
-        "\u5C55\u0000\u0000\u0000\u0000\u0000\u0000\u5C52"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5C46\u0000"+
-        "\u0000\u5C63\u5C45\u0000\u5C58\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5C50\u0000\u0000\u5C4B\u5C48"+
-        "\u0000\u5C49\u0000\u5C51\u0000\u0000\u0000\u7422"+
-        "\u0000\u0000\u5C4E\u393D\u4448\u4164\u5C4C\u0000"+
-        "\u5C47\u0000\u0000\u5C4A\u0000\u0000\u0000\u0000"+
-        "\u4D4D\u4B6A\u0000\u0000\u0000\u5C4F\u5C59\u0000"+
-        "\u0000\u0000\u7A52\u0000\u0000\u0000\u0000\u5C61"+
-        "\u5C5A\u0000\u0000\u5C67\u0000\u5C65\u0000\u0000"+
-        "\u0000\u0000\u5C60\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5C5F\u0000\u4450\u0000\u4165\u0000\u5C5D"+
-        "\u0000\u0000\u5C5B\u0000\u0000\u5C62\u0000\u0000"+
-        "\u0000\u0000\u5C68\u4875\u5C6E\u0000\u0000\u0000"+
-        "\u0000\u0000\u5C69\u5C6C\u5C66\u0000\u0000\u4374"+
-        "\u0000\u4938\u0000\u5C5C\u0000\u0000\u5C64\u3E40"+
-        "\u0000\u4C4F\u5C78\u5C6B\u0000\u0000\u0000\u0000"+
-        "\u0000\u3822\u3223\u335F\u0000\u0000\u5C53\u0000"+
-        "\u7A53\u0000\u0000\u0000\u0000\u3E41\u5C70\u0000"+
-        "\u5C77\u3C79\u3372\u0000\u0000\u432E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5C6D\u0000\u7A55\u5C72"+
-        "\u5C76\u0000\u0000\u3636\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u354C\u5C74\u0000\u0000\u0000\u0000\u0000\u3521"+
-        "\u0000\u464B\u5C73\u0000\u0000\u0000\u5C75\u0000"+
-        "\u0000\u0000\u0000\u7A54\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5C6F\u7A56\u0000\u0000\u0000\u0000"+
-        "\u5C71\u0000\u0000\u0000\u0000\u0000\u7A57\u3360"+
-        "\u4349\u0000\u0000\u0000\u5C7C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5C7A\u3869\u0000"+
-        "\u5C79\u0000\u0000\u0000\u0000\u0000\u0000\u5D21"+
-        "\u0000\u0000\u0000\u0000\u5B58\u0000\u0000\u0000"+
-        "\u5C7B\u0000\u5C7D\u5C7E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5D2C\u0000\u5D28\u0000\u5B6D\u0000"+
-        "\u0000\u0000\u0000\u5D27\u0000\u0000\u0000\u0000"+
-        "\u5D26\u0000\u0000\u5D23\u0000\u0000\u0000\u0000"+
-        "\u0000\u5C6A\u5D25\u5D24\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5D2A\u0000\u4F26\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5D2D\u367B\u0000\u0000\u5D29\u5D2B"+
-        "\u0000\u0000\u7A58\u0000\u7A59\u0000\u0000\u0000"+
-        "\u4827\u0000\u5D2E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5D32\u5D2F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4D73\u5D30\u0000\u0000"+
-        "\u0000\u0000\u5C5E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5D33\u0000\u0000\u0000\u5D34\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3135\u0000\u5D36"+
-        "\u3767\u3C21\u0000\u3655\u0000\u0000\u0000\u3224"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D5F\u0000\u0000\u0000\u0000\u5D38"+
-        "\u5D37\u5D3A\u353D\u0000\u0000\u3656\u343E\u0000"+
-        "\u0000\u0000\u0000\u5D3D\u0000\u0000\u0000\u5D3C"+
-        "\u0000\u5D3E\u0000\u0000\u324E\u0000\u4337\u0000"+
-        "\u5D3F\u0000\u0000\u343F\u5D41\u0000\u0000\u0000"+
-        "\u0000\u5D40\u0000\u5D42\u0000\u0000\u0000\u5D43"+
-        "\u0000\u5D44\u3B5F\u4035\u3A21\u0000\u4970\u0000"+
-        "\u0000\u4A62\u4F44\u0000\u0000\u0000\u0000\u3B75"+
-        "\u0000\u0000\u0000\u3A50\u4E72\u0000\u0000\u0000"+
-        "\u5D45\u5D46\u0000\u3B60\u0000\u0000\u0000\u5D47"+
-        "\u5D48\u0000\u0000\u5D4A\u5D49\u0000\u4B58\u0000"+
-        "\u0000\u3D5E\u3C6C\u3B44\u0000\u5D4B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5D4D\u3F23\u0000"+
-        "\u5D4C\u0000\u0000\u0000\u0000\u0000\u5D4E\u0000"+
-        "\u0000\u0000\u0000\u0000\u5D4F\u0000\u0000\u0000"+
-        "\u0000\u0000\u5D50\u5D51\u0000\u0000\u0000\u5D52"+
-        "\u0000\u5D54\u5D53\u5D55\u3225\u434A\u0000\u5D56"+
-        "\u0000\u0000\u3B26\u334C\u5D57\u0000\u0000\u4542"+
-        "\u544C\u0000\u0000\u0000\u0000\u3523\u5D58\u0000"+
-        "\u0000\u0000\u0000\u5D59\u0000\u4A6C\u4B68\u0000"+
-        "\u0000\u0000\u4647\u5D5A\u4866\u0000\u7A5A\u0000"+
-        "\u487B\u0000\u0000\u4C53\u0000\u0000\u0000\u5D5B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5D5D\u5D5C\u0000\u0000\u5D5F"+
-        "\u0000\u0000\u0000\u5D5E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5D61\u0000\u0000\u0000\u0000\u0000\u0000\u3B61"+
-        "\u0000\u4C31\u0000\u5D62\u5D63\u0000\u0000\u3524"+
-        "\u0000\u0000\u0000\u5D64\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5D66\u5D65\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3F65\u0000\u0000\u4939"+
-        "\u314A\u0000\u0000\u0000\u0000\u0000\u4845\u7A5B"+
-        "\u4475\u3D41\u3561\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4846\u0000"+
-        "\u3C2E\u0000\u0000\u0000\u0000\u5D68\u0000\u3440"+
-        "\u0000\u0000\u3178\u0000\u7A5C\u4672\u5D67\u393E"+
-        "\u4353\u0000\u5D69\u0000\u0000\u0000\u0000\u0000"+
-        "\u5D71\u0000\u5D6A\u0000\u0000\u0000\u0000\u7A5E"+
-        "\u4241\u0000\u3562\u5D72\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3768\u0000\u0000\u3525\u5D70\u0000"+
-        "\u0000\u5D6E\u5D6B\u4D60\u0000\u0000\u7A5D\u0000"+
-        "\u4440\u0000\u0000\u0000\u4659\u5D6C\u0000\u0000"+
-        "\u5D74\u0000\u5D73\u3723\u0000\u0000\u322D\u0000"+
-        "\u0000\u3A3B\u5D6D\u5D6F\u0000\u0000\u0000\u0000"+
-        "\u0000\u4B57\u4274\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4B77\u0000\u0000\u5D7C\u0000"+
-        "\u0000\u5D7D\u0000\u324F\u0000\u0000\u0000\u0000"+
-        "\u4A28\u4C7D\u5E21\u3C23\u3E42\u5D78\u5D7E\u3168"+
-        "\u0000\u3637\u0000\u0000\u5D75\u5D7A\u0000\u0000"+
-        "\u0000\u4074\u4771\u0000\u4867\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5D77\u0000\u4B21\u0000\u5D79"+
-        "\u0000\u5E24\u7A5F\u5E22\u0000\u5D7B\u0000\u0000"+
-        "\u0000\u4B22\u4748\u3563\u0000\u4525\u0000\u0000"+
-        "\u436D\u0000\u5E25\u0000\u0000\u0000\u0000\u5E23"+
-        "\u4259\u5D76\u0000\u314B\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u7A60\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4D4E\u5E30\u0000\u0000\u0000"+
-        "\u0000\u0000\u5E2F\u0000\u0000\u0000\u0000\u4076"+
-        "\u0000\u5E2C\u0000\u4D6C\u0000\u0000\u4636\u5E26"+
-        "\u0000\u0000\u0000\u0000\u0000\u4445\u0000\u0000"+
-        "\u0000\u314C\u393F\u5E29\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3D27\u5E2E\u0000\u5E2D\u5E28\u0000"+
-        "\u5E2B\u0000\u0000\u3368\u0000\u5E2A\u4749\u0000"+
-        "\u0000\u4E2E\u0000\u0000\u3E74\u4075\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5E36\u5E34\u0000\u494D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5E31\u5E33\u0000\u313A\u0000"+
-        "\u0000\u3940\u4F32\u0000\u333D\u0000\u4962\u7A62"+
-        "\u0000\u0000\u0000\u0000\u4D61\u0000\u0000\u3324"+
-        "\u3F3B\u5E35\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5E3A\u0000\u7A61"+
-        "\u3E43\u0000\u0000\u0000\u4D30\u0000\u5E37\u0000"+
-        "\u0000\u0000\u0000\u5E32\u0000\u5E38\u7A63\u0000"+
-        "\u0000\u4E5E\u0000\u4573\u4642\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u7A64\u0000\u0000\u3336"+
-        "\u0000\u0000\u3155\u0000\u0000\u5E3E\u0000\u0000"+
-        "\u5E41\u0000\u0000\u0000\u4E43\u0000\u0000\u0000"+
-        "\u4D64\u0000\u0000\u0000\u0000\u5E48\u5E42\u5E3F"+
-        "\u0000\u0000\u0000\u4E54\u5E45\u0000\u0000\u7A65"+
-        "\u0000\u3D4A\u5E47\u0000\u0000\u5E4C\u0000\u0000"+
-        "\u4571\u5E4A\u0000\u0000\u0000\u0000\u5E44\u0000"+
-        "\u0000\u4338\u0000\u0000\u5E4B\u0000\u5E40\u0000"+
-        "\u5E46\u0000\u5E4D\u307C\u5E43\u0000\u5E4E\u0000"+
-        "\u0000\u3F3C\u7A67\u3D5F\u0000\u4A25\u0000\u3A2E"+
-        "\u7A66\u5E3B\u5E49\u453A\u7A68\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4036\u0000\u3369"+
-        "\u3A51\u3E44\u5E3D\u3D42\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u374C\u0000\u5E3C\u0000\u0000"+
-        "\u0000\u5E52\u3D6D\u383A\u0000\u5E61\u0000\u5E5B"+
-        "\u3574\u454F\u0000\u5E56\u5E5F\u302F\u3132\u7A6B"+
-        "\u0000\u3239\u0000\u5E58\u422C\u5E4F\u5E51\u3941"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5E62\u7A69\u5E5D\u0000\u7A6C\u0000\u5E55\u0000"+
-        "\u0000\u0000\u0000\u5E5C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C2B\u0000\u0000\u5E5A\u5E5E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3850\u0000"+
-        "\u3E45\u0000\u0000\u4339\u7A6A\u0000\u0000\u5E54"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4D2F"+
-        "\u0000\u0000\u0000\u5E57\u0000\u0000\u5E50\u4572"+
-        "\u0000\u0000\u5E53\u0000\u0000\u0000\u5E59\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4F51\u3C3E"+
-        "\u4B7E\u0000\u5E63\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u482E\u0000\u0000\u5E6F"+
-        "\u383B\u0000\u0000\u0000\u0000\u0000\u3D60\u0000"+
-        "\u5E65\u0000\u0000\u0000\u4E2F\u3942\u0000\u5E72"+
-        "\u0000\u0000\u306E\u0000\u0000\u5E70\u0000\u0000"+
-        "\u0000\u0000\u5E64\u0000\u0000\u0000\u0000\u5E6A"+
-        "\u0000\u0000\u5E6C\u0000\u0000\u0000\u4D4F\u5E67"+
-        "\u0000\u0000\u452E\u0000\u0000\u5E69\u0000\u7A6D"+
-        "\u0000\u0000\u5E71\u0000\u5E6B\u4C47\u0000\u0000"+
-        "\u0000\u5E66\u0000\u3C22\u5E7E\u0000\u0000\u0000"+
-        "\u0000\u336A\u0000\u5E68\u5E6D\u5E6E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u426C\u425A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5E76\u0000\u0000\u5E7C"+
-        "\u0000\u0000\u5E7A\u0000\u4529\u0000\u0000\u5F23"+
-        "\u5E77\u0000\u0000\u0000\u0000\u0000\u5E78\u5E60"+
-        "\u0000\u3579\u493A\u0000\u0000\u0000\u3C3F\u0000"+
-        "\u0000\u3977\u0000\u0000\u0000\u0000\u0000\u4F33"+
-        "\u0000\u5E74\u0000\u5F22\u3169\u4166\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4779\u0000\u3441\u4E7A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4C21\u4452\u0000\u0000\u0000"+
-        "\u0000\u5E7B\u5E7D\u0000\u0000\u0000\u0000\u0000"+
-        "\u4132\u0000\u0000\u0000\u0000\u0000\u5F21\u5E79"+
-        "\u0000\u5E73\u0000\u0000\u0000\u3443\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3769\u0000\u0000\u0000"+
-        "\u5F2F\u0000\u0000\u5F2A\u4078\u0000\u0000\u3363"+
-        "\u0000\u0000\u0000\u0000\u3D61\u0000\u5F33\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F2C\u442C\u5F29"+
-        "\u4459\u0000\u0000\u0000\u5F4C\u0000\u0000\u0000"+
-        "\u5F26\u0000\u5F25\u0000\u5F2E\u0000\u0000\u0000"+
-        "\u5F28\u5F27\u5F2D\u0000\u4021\u0000\u5F24\u0000"+
-        "\u7A6E\u0000\u0000\u0000\u0000\u0000\u5F30\u0000"+
-        "\u0000\u5F31\u0000\u0000\u0000\u0000\u0000\u3442"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F36\u0000\u5F35\u5F37\u0000\u0000\u0000"+
-        "\u0000\u0000\u5F3A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4543\u0000\u5F34\u0000\u7A6F\u0000\u0000"+
-        "\u0000\u5F38\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3763\u4279\u5F32\u473B\u0000\u0000\u5F39\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5F3E\u5F3C\u0000\u0000"+
-        "\u5F3F\u0000\u0000\u5F42\u0000\u0000\u0000\u5F3B"+
-        "\u396A\u4728\u0000\u0000\u5E39\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4D74\u5F3D\u0000\u5F41\u4275"+
-        "\u0000\u5F40\u0000\u5F2B\u0000\u7A70\u6F69\u0000"+
-        "\u0000\u0000\u5F45\u0000\u0000\u0000\u5F49\u0000";
-
-    private final static String innerIndex3=
-        "\u0000\u5F47\u0000\u0000\u0000\u7A71\u0000\u7A72"+
-        "\u0000\u5F43\u0000\u5F44\u0000\u0000\u0000\u5F48"+
-        "\u0000\u5F46\u0000\u0000\u0000\u494E\u0000\u0000"+
-        "\u5F4E\u0000\u5F4B\u5F4A\u0000\u5F4D\u4654\u5F4F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4375\u426D"+
-        "\u7A73\u0000\u0000\u0000\u4025\u0000\u0000\u0000"+
-        "\u5F50\u0000\u5F52\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5F51\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5E75\u0000\u0000\u0000"+
-        "\u0000\u5F53\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4667\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5F54\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3250\u0000\u0000\u0000\u4574"+
-        "\u3325\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3564\u0000\u0000\u0000\u3C5E\u3A52\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7A74\u0000\u0000"+
-        "\u0000\u4F27\u3F66\u0000\u0000\u0000\u316A\u0000"+
-        "\u0000\u0000\u5F56\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F55\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7A75\u5F59\u433A\u5F5C\u5F57"+
-        "\u0000\u0000\u0000\u5F5B\u0000\u0000\u0000\u0000"+
-        "\u5F5A\u4540\u3059\u7927\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4E75\u0000\u0000\u5F5E\u0000\u0000\u0000\u3128"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F60\u0000\u0000\u0000\u5F5F\u0000\u5F5D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F58\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4B23\u0000\u0000\u0000\u5F62\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u7A77\u0000\u0000\u0000"+
-        "\u0000\u5F61\u0000\u0000\u0000\u0000\u0000\u7A76"+
-        "\u0000\u0000\u0000\u0000\u316B\u0000\u0000\u0000"+
-        "\u0000\u5F64\u4A32\u0000\u5F63\u0000\u0000\u0000"+
-        "\u0000\u4C35\u0000\u0000\u0000\u0000\u3E47\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4133\u0000"+
-        "\u0000\u0000\u0000\u0000\u3E46\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7A79\u7A7A"+
-        "\u0000\u4E7B\u0000\u0000\u5F6A\u0000\u4079\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F66\u5F6B\u0000"+
-        "\u0000\u316C\u0000\u0000\u7A78\u0000\u0000\u0000"+
-        "\u0000\u0000\u5F69\u0000\u4761\u5F65\u5F68\u3E48"+
-        "\u0000\u4851\u0000\u0000\u5F6C\u0000\u3C51\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u407A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5F6F\u0000\u0000\u0000"+
-        "\u5F67\u0000\u3727\u0000\u0000\u0000\u0000\u5F6D"+
-        "\u0000\u0000\u0000\u0000\u4D50\u5F70\u0000\u0000"+
-        "\u0000\u7426\u0000\u0000\u0000\u0000\u0000\u3D4F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5F71\u0000\u0000\u0000\u5F72\u0000\u0000\u0000"+
-        "\u0000\u472E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F74\u0000\u0000\u0000\u0000\u5F75\u0000"+
-        "\u0000\u7A7C\u0000\u4733\u0000\u0000\u0000\u0000"+
-        "\u4575\u5F77\u0000\u0000\u0000\u0000\u5F79\u0000"+
-        "\u4E55\u0000\u5F76\u0000\u5F78\u316D\u0000\u5F73"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u535B"+
-        "\u5F7A\u0000\u0000\u0000\u0000\u4167\u3B38\u5F7C"+
-        "\u0000\u0000\u0000\u0000\u5F7B\u3F24\u5259\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F7D\u0000\u0000"+
-        "\u0000\u6021\u0000\u5F6E\u5F7E\u0000\u7A7D\u6022"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u477A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6023\u0000\u0000"+
-        "\u6024\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6025\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6026\u0000\u445E\u0000\u6028\u6027\u0000\u0000"+
-        "\u6029\u0000\u602A\u0000\u0000\u3C5F\u4963\u0000"+
-        "\u0000\u0000\u4C6C\u602B\u602C\u4156\u3C24\u602D"+
-        "\u602E\u0000\u0000\u0000\u0000\u0000\u602F\u4A52"+
-        "\u4847\u0000\u0000\u6030\u4757\u0000\u0000\u0000"+
-        "\u0000\u0000\u442D\u0000\u0000\u0000\u0000\u0000"+
-        "\u6031\u3267\u0000\u356D\u0000\u4C46\u0000\u4C36"+
-        "\u0000\u3234\u4F34\u0000\u0000\u0000\u0000\u4B52"+
-        "\u0000\u4A2A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4037\u0000\u6032\u0000\u0000\u0000"+
-        "\u0000\u4643\u0000\u0000\u0000\u3823\u6033\u0000"+
-        "\u3A54\u6035\u6034\u0000\u0000\u0000\u0000\u6036"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6037\u0000\u0000\u0000\u6038\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u353E\u0000\u6039\u0000\u0000\u0000\u0000\u603A"+
-        "\u0000\u0000\u0000\u0000\u3824\u0000\u0000\u4848"+
-        "\u0000\u7A7E\u603C\u0000\u0000\u0000\u3E75\u0000"+
-        "\u0000\u603B\u0000\u0000\u0000\u0000\u7B21\u0000"+
-        "\u0000\u0000\u3638\u603D\u603F\u0000\u603E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6040\u0000"+
-        "\u3851\u0000\u6041\u0000\u0000\u0000\u0000\u3669"+
-        "\u0000\u4140\u0000\u397D\u0000\u0000\u0000\u0000"+
-        "\u6043\u6044\u6042\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3C6D\u0000\u0000\u4648\u3639\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6046"+
-        "\u432C\u6045\u0000\u0000\u4F35\u4762\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6049\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u604B\u6048"+
-        "\u0000\u0000\u0000\u4C54\u604A\u604C\u0000\u4E44"+
-        "\u0000\u0000\u0000\u0000\u7B22\u6050\u0000\u0000"+
-        "\u0000\u604F\u4376\u472D\u0000\u0000\u3825\u604E"+
-        "\u0000\u0000\u0000\u0000\u604D\u0000\u4D31\u4D32"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6051\u316E"+
-        "\u0000\u0000\u0000\u0000\u3976\u3B62\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6052\u6053"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6055"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3D43\u0000\u0000\u0000\u0000"+
-        "\u6057\u0000\u6056\u0000\u0000\u0000\u0000\u0000"+
-        "\u6058\u0000\u334D\u0000\u0000\u605A\u0000\u7B24"+
-        "\u6059\u0000\u605C\u605B\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u383C\u0000\u0000\u4E28"+
-        "\u0000\u364C\u0000\u3226\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u366A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3461\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4E68\u605E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6060\u0000\u7B25\u0000\u0000"+
-        "\u6061\u0000\u3251\u0000\u0000\u0000\u0000\u0000"+
-        "\u605D\u7B26\u3B39\u0000\u0000\u4441\u605F\u0000"+
-        "\u0000\u0000\u7B29\u0000\u0000\u0000\u7B27\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6064\u0000"+
-        "\u3C6E\u0000\u0000\u7B28\u0000\u6062\u0000\u0000"+
-        "\u0000\u0000\u373E\u0000\u0000\u4849\u6063\u0000"+
-        "\u0000\u607E\u0000\u0000\u0000\u7B2B\u0000\u0000"+
-        "\u6069\u0000\u0000\u0000\u0000\u0000\u383D\u0000"+
-        "\u0000\u0000\u0000\u3565\u0000\u6066\u4D7D\u7B2A"+
-        "\u0000\u4E30\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4276\u0000\u0000\u6068\u7B2C\u0000"+
-        "\u0000\u7B2E\u7B2D\u0000\u0000\u0000\u7B2F\u0000"+
-        "\u0000\u0000\u606A\u4E56\u3657\u487C\u474A\u0000"+
-        "\u0000\u0000\u606B\u0000\u0000\u0000\u0000\u606D"+
-        "\u0000\u6070\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u606C\u0000\u0000"+
-        "\u0000\u606F\u386A\u314D\u6071\u0000\u3F70\u606E"+
-        "\u4E5C\u0000\u7B30\u6074\u7424\u0000\u0000\u0000"+
-        "\u0000\u6072\u6075\u0000\u0000\u0000\u0000\u6067"+
-        "\u6073\u0000\u0000\u3A3C\u0000\u0000\u6076\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6077\u0000"+
-        "\u0000\u0000\u0000\u4D7E\u0000\u0000\u0000\u0000"+
-        "\u0000\u7B31\u0000\u6078\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6079\u7B32"+
-        "\u0000\u0000\u6065\u0000\u0000\u0000\u0000\u607A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3444\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3C25\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u607B\u0000\u0000\u0000\u0000\u607C"+
-        "\u0000\u0000\u0000\u0000\u607D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u313B\u0000\u0000\u0000"+
-        "\u6121\u0000\u493B\u6122\u0000\u0000\u3424\u6123"+
-        "\u0000\u6124\u0000\u0000\u0000\u0000\u6125\u0000"+
-        "\u6127\u6128\u6126\u0000\u0000\u0000\u4953\u612A"+
-        "\u6129\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u7B33\u0000\u612C\u612B\u612D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u612E\u6130\u612F\u0000"+
-        "\u0000\u3979\u0000\u6132\u0000\u6131\u0000\u0000"+
-        "\u3445\u0000\u3F53\u0000\u453C\u0000\u6133\u4038"+
-        "\u0000\u0000\u0000\u3B3A\u0000\u3179\u6134\u0000"+
-        "\u4D51\u0000\u0000\u4A63\u6135\u0000\u0000\u796C"+
-        "\u4544\u4D33\u3943\u3F3D\u0000\u0000\u0000\u434B"+
-        "\u5234\u0000\u442E\u3268\u6136\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6137\u0000\u613C\u0000"+
-        "\u0000\u613A\u6139\u5A42\u3326\u6138\u0000\u305A"+
-        "\u0000\u482A\u0000\u0000\u484A\u0000\u0000\u0000"+
-        "\u0000\u4E31\u613D\u613B\u435C\u4026\u0000\u0000"+
-        "\u482B\u0000\u492D\u0000\u613F\u4E2C\u374D\u6140"+
-        "\u0000\u613E\u4856\u6141\u0000\u6142\u0000\u7B34"+
-        "\u305B\u0000\u0000\u3E76\u6147\u0000\u6144\u466D"+
-        "\u6143\u0000\u0000\u0000\u0000\u0000\u0000\u3526"+
-        "\u0000\u0000\u614A\u0000\u0000\u0000\u6145\u6146"+
-        "\u0000\u6149\u6148\u4925\u0000\u0000\u4142\u4141"+
-        "\u0000\u353F\u0000\u0000\u614B\u0000\u0000\u0000"+
-        "\u0000\u0000\u614C\u0000\u0000\u614D\u0000\u0000"+
-        "\u0000\u0000\u0000\u614F\u0000\u614E\u0000\u0000"+
-        "\u0000\u0000\u0000\u3156\u0000\u0000\u0000\u0000"+
-        "\u0000\u6157\u4868\u6151\u0000\u6153\u0000\u0000"+
-        "\u6155\u3F3E\u0000\u0000\u6156\u6154\u3C40\u0000"+
-        "\u0000\u0000\u6150\u6152\u0000\u4942\u0000\u3E49"+
-        "\u0000\u0000\u6159\u0000\u0000\u6158\u0000\u0000"+
-        "\u0000\u0000\u615A\u0000\u3C26\u3A2F\u0000\u0000"+
-        "\u4577\u615B\u0000\u444B\u0000\u0000\u615D\u0000"+
-        "\u0000\u0000\u4E21\u615C\u0000\u0000\u0000\u0000"+
-        "\u0000\u4169\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6162\u0000\u6164\u6165\u4354\u0000\u0000\u0000"+
-        "\u0000\u0000\u6163\u0000\u6160\u0000\u615E\u615F"+
-        "\u0000\u6161\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6168\u0000\u6166\u0000\u6167\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6169"+
-        "\u616B\u616C\u616D\u0000\u616E\u0000\u0000\u616A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6170\u0000\u0000\u0000\u616F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6171\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4E45\u0000\u0000\u0000\u6174\u6172"+
-        "\u6173\u0000\u0000\u0000\u3462\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C7E\u0000\u0000\u0000\u4A4A\u0000"+
-        "\u6176\u0000\u0000\u0000\u6175\u0000\u0000\u0000"+
-        "\u0000\u6177\u6178\u0000\u0000\u0000\u0000\u617C"+
-        "\u6179\u617A\u617B\u0000\u617D\u0000\u0000\u0000"+
-        "\u617E\u0000\u6221\u0000\u0000\u0000\u6222\u0000"+
-        "\u6223\u0000\u482F\u4550\u6224\u4772\u4934\u0000"+
-        "\u6225\u0000\u7B35\u6226\u452A\u0000\u3327\u3944"+
-        "\u6227\u0000\u0000\u6228\u0000\u0000\u6229\u0000"+
-        "\u3B29\u0000\u0000\u622B\u0000\u0000\u622A\u0000"+
-        "\u0000\u622C\u622D\u7B38\u7B36\u0000\u7B37\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7B39\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4869\u0000"+
-        "\u622E\u0000\u0000\u0000\u622F\u0000\u0000\u7369"+
-        "\u6230\u6231\u6232\u0000\u0000\u0000\u0000\u3B2E"+
-        "\u0000\u0000\u6233\u4756\u0000\u0000\u4B5F\u0000"+
-        "\u314E\u0000\u3157\u0000\u0000\u6234\u0000\u0000"+
-        "\u0000\u0000\u6236\u0000\u0000\u0000\u6235\u4570"+
-        "\u0000\u0000\u0000\u4039\u5D39\u0000\u6237\u4C41"+
-        "\u0000\u6238\u0000\u3446\u4857\u6239\u0000\u623A"+
-        "\u0000\u0000\u623B\u0000\u0000\u0000\u4C5C\u0000"+
-        "\u0000\u0000\u4C55\u0000\u443E\u0000\u0000\u0000"+
-        "\u416A\u0000\u0000\u623D\u0000\u0000\u3D62\u0000"+
-        "\u0000\u3E4A\u0000\u0000\u6240\u0000\u0000\u623F"+
-        "\u623E\u487D\u0000\u3447\u3829\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6246\u0000\u0000\u6243\u3F3F"+
-        "\u4C32\u0000\u0000\u0000\u6242\u6244\u6245\u0000"+
-        "\u0000\u6241\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6247"+
-        "\u6248\u0000\u442F\u0000\u3463\u0000\u0000\u0000"+
-        "\u4365\u0000\u0000\u0000\u0000\u0000\u7B3B\u6249"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u624A\u624D\u0000\u0000\u0000\u0000"+
-        "\u0000\u3F67\u0000\u4644\u0000\u624E\u4B53\u0000"+
-        "\u624B\u0000\u0000\u624C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6251\u0000\u0000\u0000\u0000\u6250\u624F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6253\u0000\u0000\u6252\u0000"+
-        "\u0000\u6254\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6256\u0000"+
-        "\u6255\u0000\u0000\u0000\u0000\u4A4D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3D56\u4E46\u0000\u0000"+
-        "\u6257\u0000\u0000\u4637\u0000\u0000\u6258\u0000"+
-        "\u0000\u6259\u0000\u625D\u625B\u625C\u0000\u625A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u625E"+
-        "\u0000\u0000\u0000\u0000\u0000\u625F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6260"+
-        "\u0000\u0000\u6261\u4C37\u6262\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C70\u6263\u0000\u434E\u0000\u476A"+
-        "\u0000\u366B\u0000\u0000\u0000\u433B\u6264\u363A"+
-        "\u0000\u0000\u0000\u4050\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6265\u0000\u0000\u0000"+
-        "\u0000\u0000\u3A3D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6266\u0000\u0000\u0000"+
-        "\u0000\u0000\u6267\u0000\u3826\u3A55\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6269\u7B3D\u0000\u0000\u0000\u4556\u3A56\u354E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4B24\u0000\u474B\u0000\u0000\u0000"+
-        "\u0000\u0000\u4557\u0000\u0000\u0000\u0000\u395C"+
-        "\u0000\u0000\u0000\u0000\u0000\u626B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7B3E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3E4B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u7B3F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4E32\u3945\u0000\u0000\u3827"+
-        "\u0000\u0000\u4823\u0000\u626D\u0000\u0000\u0000"+
-        "\u0000\u0000\u7B40\u0000\u626F\u0000\u0000\u0000"+
-        "\u0000\u386B\u0000\u0000\u0000\u0000\u626E\u4476"+
-        "\u0000\u0000\u0000\u0000\u6271\u3337\u626C\u0000"+
-        "\u0000\u486A\u0000\u3130\u0000\u3A6C\u0000\u4F52"+
-        "\u0000\u0000\u6270\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6272\u0000\u0000\u0000\u4A4B"+
-        "\u0000\u4059\u6274\u0000\u0000\u0000\u0000\u6275"+
-        "\u0000\u0000\u0000\u0000\u0000\u6273\u0000\u0000"+
-        "\u0000\u0000\u334E\u0000\u627B\u0000\u627A\u0000"+
-        "\u0000\u3C27\u0000\u0000\u0000\u627C\u6277\u0000"+
-        "\u0000\u0000\u627D\u6278\u0000\u0000\u0000\u0000"+
-        "\u4858\u6276\u0000\u0000\u6279\u0000\u0000\u0000"+
-        "\u0000\u0000\u6322\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6321"+
-        "\u4B61\u0000\u0000\u0000\u627E\u0000\u0000\u306B"+
-        "\u0000\u0000\u0000\u0000\u6324\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6323\u0000\u0000"+
-        "\u0000\u3E4C\u0000\u0000\u0000\u0000\u0000\u6325"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4143\u0000"+
-        "\u0000\u6327\u6326\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6328\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6268\u0000"+
-        "\u0000\u0000\u626A\u632A\u6329\u0000\u0000\u0000"+
-        "\u7B41\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3C28\u0000\u4E69\u0000\u3C52\u0000"+
-        "\u632B\u3737\u0000\u0000\u0000\u0000\u0000\u3540"+
-        "\u3527\u3B63\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4D34\u0000\u0000\u6331\u0000\u6330\u4144\u632D"+
-        "\u0000\u0000\u632F\u0000\u0000\u3D4B\u3F40\u632E"+
-        "\u632C\u0000\u472A\u0000\u0000\u3E4D\u0000\u0000"+
-        "\u493C\u0000\u0000\u0000\u0000\u3A57\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4578"+
-        "\u0000\u0000\u6332\u0000\u0000\u0000\u0000\u6333"+
-        "\u6349\u3658\u0000\u0000\u4F3D\u4135\u0000\u0000"+
-        "\u0000\u0000\u6334\u0000\u0000\u3252\u4477\u4A21"+
-        "\u0000\u0000\u0000\u0000\u7B45\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7B47\u0000\u6335\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u357A\u6336"+
-        "\u0000\u0000\u6338\u0000\u0000\u0000\u6339\u0000"+
-        "\u4729\u0000\u0000\u633A\u0000\u0000\u0000\u0000"+
-        "\u0000\u633B\u633C\u0000\u0000\u3659\u3253\u4645"+
-        "\u3D28\u3B64\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u633D\u0000\u3D29\u0000\u0000\u0000\u0000"+
-        "\u0000\u324A\u4943\u0000\u0000\u633E\u0000\u0000"+
-        "\u486B\u0000\u0000\u0000\u0000\u0000\u0000\u4145"+
-        "\u0000\u6341\u0000\u6342\u4769\u0000\u3F41\u633F"+
-        "\u0000\u4361\u0000\u0000\u6340\u0000\u0000\u0000"+
-        "\u3E4E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u305C\u0000\u0000\u0000\u0000"+
-        "\u3529\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6343\u0000\u0000\u4478\u0000\u6344\u4047\u0000"+
-        "\u0000\u0000\u0000\u0000\u4C2D\u0000\u0000\u4923"+
-        "\u6345\u6346\u4355\u0000\u4E47\u0000\u0000\u6348"+
-        "\u6347\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3C6F\u0000"+
-        "\u0000\u634A\u3070\u0000\u0000\u0000\u0000\u634D"+
-        "\u0000\u0000\u0000\u634B\u3254\u374E\u634C\u3946"+
-        "\u3972\u0000\u4A66\u634E\u0000\u0000\u4B54\u0000"+
-        "\u0000\u6350\u0000\u0000\u0000\u4051\u314F\u323A"+
-        "\u302C\u0000\u0000\u0000\u0000\u0000\u0000\u634F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6351\u6352\u3E77\u0000\u0000\u0000\u0000"+
-        "\u0000\u6353\u0000\u334F\u0000\u0000\u0000\u0000"+
-        "\u6355\u0000\u0000\u0000\u376A\u0000\u3566\u0000"+
-        "\u0000\u6356\u3675\u0000\u0000\u6357\u0000\u407C"+
-        "\u0000\u464D\u0000\u4060\u3A75\u0000\u0000\u0000"+
-        "\u6358\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4362\u416B\u0000\u635A\u635C\u6359"+
-        "\u635B\u0000\u0000\u0000\u0000\u0000\u0000\u3722"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u635D\u3726\u0000\u0000\u0000\u3567\u4D52"+
-        "\u635F\u0000\u0000\u0000\u0000\u0000\u6360\u0000"+
-        "\u0000\u0000\u312E\u0000\u0000\u0000\u0000\u6363"+
-        "\u0000\u0000\u0000\u3376\u6362\u6361\u0000\u6365"+
-        "\u635E\u0000\u6366\u4E29\u0000\u6367\u0000\u6368"+
-        "\u0000\u7B48\u5474\u636A\u0000\u6369\u0000\u0000"+
-        "\u0000\u636B\u636C\u0000\u4E35\u636D\u0000\u706F"+
-        "\u3E4F\u636E\u636F\u3D57\u0000\u4638\u6370\u7B49"+
-        "\u0000\u0000\u4328\u7B4B\u0000\u6371\u0000\u433C"+
-        "\u6372\u0000\u0000\u0000\u0000\u0000\u3625\u0000"+
-        "\u513F\u435D\u3C33\u0000\u0000\u0000\u0000\u3448"+
-        "\u0000\u0000\u6373\u0000\u6422\u0000\u6376\u0000"+
-        "\u3568\u0000\u6375\u6424\u0000\u0000\u0000\u6374"+
-        "\u0000\u3E50\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6378\u6379\u0000\u452B\u0000\u0000\u637A\u0000"+
-        "\u335E\u0000\u0000\u0000\u0000\u3F5A\u4964\u0000"+
-        "\u637C\u0000\u0000\u0000\u4268\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6377\u0000\u637B\u637D\u0000"+
-        "\u0000\u3A7B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6426\u492E\u0000"+
-        "\u4826\u4579\u0000\u365A\u6425\u6423\u0000\u4835"+
-        "\u637E\u435E\u457B\u0000\u457A\u0000\u3A76\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6438\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6428\u0000\u642A"+
-        "\u0000\u0000\u0000\u0000\u642D\u0000\u642E\u0000"+
-        "\u642B\u642C\u0000\u0000\u6429\u6427\u0000\u0000"+
-        "\u0000\u0000\u6421\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4A4F\u3255"+
-        "\u0000\u0000\u0000\u6435\u0000\u6432\u0000\u6437"+
-        "\u0000\u0000\u6436\u0000\u4773\u4C27\u0000\u3B3B"+
-        "\u6430\u6439\u6434\u0000\u6433\u642F\u7B4C\u6431"+
-        "\u0000\u3449\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u433D\u0000\u0000\u407D\u0000\u0000"+
-        "\u0000\u4822\u0000\u0000\u643E\u0000\u0000\u0000"+
-        "\u4824\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4061\u643B\u0000\u0000\u484F\u0000\u643F\u4A53"+
-        "\u0000\u435B\u0000\u643A\u643C\u0000\u0000\u643D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6440\u0000\u0000"+
-        "\u3C44\u0000\u0000\u0000\u4646\u6445\u6444\u0000"+
-        "\u0000\u6441\u0000\u0000\u0000\u4F36\u0000\u0000"+
-        "\u0000\u0000\u0000\u644A\u0000\u0000\u644E\u644B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6447\u0000\u0000\u0000\u0000\u0000\u0000\u6448"+
-        "\u0000\u0000\u0000\u0000\u0000\u644D\u0000\u0000"+
-        "\u0000\u6442\u5255\u6449\u6443\u0000\u0000\u644C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6452"+
-        "\u0000\u344A\u0000\u644F\u0000\u0000\u0000\u6450"+
-        "\u0000\u0000\u6451\u6454\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6453"+
-        "\u4876\u0000\u0000\u0000\u0000\u6455\u4E7C\u4A6D"+
-        "\u645A\u0000\u0000\u6457\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6456\u4052\u0000\u6459"+
-        "\u645B\u0000\u0000\u0000\u6458\u0000\u645F\u0000"+
-        "\u645C\u0000\u0000\u0000\u0000\u0000\u0000\u645D"+
-        "\u6446\u0000\u0000\u0000\u645E\u6460\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6461\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A46\u0000\u6462\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4C62\u0000"+
-        "\u0000\u364E\u3729\u6463\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A34\u0000\u3F68\u0000\u4C30\u0000\u0000"+
-        "\u6464\u0000\u4E33\u0000\u0000\u4774\u0000\u4146"+
-        "\u4734\u0000\u0000\u3D4D\u0000\u0000\u0000\u3040"+
-        "\u0000\u6469\u6467\u0000\u6465\u3421\u0000\u3E51"+
-        "\u646A\u0000\u0000\u6468\u0000\u6466\u646E\u0000"+
-        "\u0000\u646D\u646C\u646B\u0000\u0000\u0000\u0000"+
-        "\u0000\u646F\u0000\u0000\u0000\u6470\u403A\u0000"+
-        "\u6471\u0000\u6473\u0000\u0000\u6472\u0000\u0000"+
-        "\u0000\u0000\u3852\u0000\u0000\u0000\u4138\u0000"+
-        "\u0000\u0000\u6475\u0000\u0000\u0000\u457C\u0000"+
-        "\u6474\u0000\u0000\u0000\u6476\u0000\u4A35\u416C"+
-        "\u3947\u0000\u6477\u0000\u0000\u0000\u0000\u4E48"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6479"+
-        "\u0000\u0000\u647A\u0000\u647B\u0000\u647C\u0000"+
-        "\u3B65\u0000\u647D\u374F\u0000\u0000\u356A\u0000"+
-        "\u352A\u0000\u6521\u0000\u4C73\u3948\u647E\u0000"+
-        "\u0000\u0000\u6524\u4C66\u0000\u473C\u0000\u0000"+
-        "\u4933\u0000\u0000\u0000\u3D63\u6523\u0000\u3C53"+
-        "\u3949\u3B66\u3569\u4A36\u6522\u0000\u0000\u0000"+
-        "\u4147\u4B42\u3A77\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3B67\u445D\u0000\u6527\u4E5F"+
-        "\u3A59\u0000\u6528\u3F42\u0000\u652A\u0000\u0000"+
-        "\u0000\u3E52\u3A30\u0000\u0000\u0000\u0000\u6529"+
-        "\u0000\u0000\u3D2A\u383E\u4148\u6525\u652B\u0000"+
-        "\u7B4E\u0000\u0000\u6526\u3750\u0000\u652E\u6532"+
-        "\u376B\u0000\u0000\u0000\u0000\u0000\u652D\u0000"+
-        "\u0000\u0000\u0000\u6536\u7B4F\u0000\u394A\u0000"+
-        "\u0000\u4D6D\u303C\u6533\u0000\u0000\u356B\u0000"+
-        "\u6530\u0000\u0000\u0000\u0000\u0000\u6531\u0000"+
-        "\u0000\u457D\u652F\u652C\u0000\u3328\u4064\u0000"+
-        "\u0000\u3828\u0000\u0000\u0000\u6538\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6535\u0000\u0000\u0000\u0000\u0000\u6537"+
-        "\u0000\u0000\u0000\u6534\u0000\u0000\u0000\u0000"+
-        "\u0000\u3751\u4233\u6539\u416E\u0000\u0000\u6546"+
-        "\u7B51\u0000\u6542\u653C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6540\u3C7A\u305D\u653B\u6543"+
-        "\u6547\u394B\u4C56\u0000\u4456\u653D\u0000\u7B50"+
-        "\u6545\u0000\u653A\u433E\u0000\u653F\u303D\u4C4A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u653E"+
-        "\u0000\u0000\u365B\u486C\u0000\u0000\u0000\u416D"+
-        "\u0000\u4E50\u3D6F\u0000\u0000\u656E\u7B52\u0000"+
-        "\u6548\u0000\u407E\u0000\u6544\u6549\u654B\u0000"+
-        "\u4479\u654E\u0000\u0000\u654A\u0000\u0000\u0000"+
-        "\u4A54\u344B\u0000\u0000\u4C4B\u0000\u0000\u305E"+
-        "\u0000\u0000\u654D\u0000\u4E7D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u654C\u0000\u0000\u0000\u0000"+
-        "\u0000\u316F\u0000\u0000\u466C\u654F\u0000\u0000"+
-        "\u0000\u6556\u6550\u6557\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6553\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u477B\u0000\u0000\u3C4A\u6555"+
-        "\u0000\u6552\u6558\u6551\u0000\u0000\u3D44\u0000"+
-        "\u0000\u0000\u0000\u4B25\u0000\u0000\u3D4C\u0000"+
-        "\u0000\u6554\u6560\u0000\u0000\u655C\u0000\u655F"+
-        "\u0000\u655D\u6561\u655B\u0000\u6541\u4053\u0000"+
-        "\u0000\u484B\u0000\u655E\u0000\u0000\u6559\u0000"+
-        "\u0000\u0000\u4121\u3752\u0000\u3D2B\u0000\u0000"+
-        "\u0000\u0000\u7B53\u0000\u3F25\u4136\u6564\u0000"+
-        "\u0000\u6566\u6567\u0000\u0000\u6563\u6565\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u655A\u6562"+
-        "\u0000\u656A\u6569\u0000\u0000\u4B7A\u0000\u0000"+
-        "\u372B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6568\u0000\u656C\u656B\u656F\u0000\u6571"+
-        "\u0000\u0000\u3B3C\u656D\u0000\u0000\u0000\u0000"+
-        "\u6572\u6573\u7921\u0000\u6574\u0000\u657A\u453B"+
-        "\u6576\u0000\u6575\u6577\u6578\u0000\u6579\u0000"+
-        "\u0000\u0000\u0000\u657B\u657C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u344C\u0000"+
-        "\u657D\u0000\u657E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6621\u0000\u7B54"+
-        "\u0000\u0000\u0000\u0000\u6622\u6623\u6624\u0000"+
-        "\u6625\u6626\u0000\u0000\u6628\u6627\u0000\u0000"+
-        "\u6629\u0000\u0000\u0000\u0000\u0000\u0000\u662A"+
-        "\u662B\u0000\u0000\u0000\u0000\u0000\u0000\u662E"+
-        "\u662C\u662D\u3A61\u3753\u0000\u0000\u4356\u0000"+
-        "\u4833\u0000\u3D70\u0000\u0000\u474D\u0000\u486D"+
-        "\u662F\u586D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6630\u6632\u0000\u4D65\u6631\u6634"+
-        "\u6633\u0000\u4D53\u0000\u6635\u0000\u487E\u0000"+
-        "\u0000\u0000\u0000\u0000\u6636\u0000\u0000\u0000"+
-        "\u0000\u0000\u6639\u0000\u0000\u6638\u6637\u0000"+
-        "\u0000\u7B55\u0000\u663A\u3732\u0000\u0000\u0000"+
-        "\u4122\u3541\u0000\u0000\u0000\u0000\u663E\u663B"+
-        "\u0000\u0000\u663C\u0000\u0000\u0000\u663F\u0000"+
-        "\u6640\u663D\u0000\u0000\u0000\u3129\u0000\u0000"+
-        "\u0000\u3227\u0000\u0000\u0000\u6642\u6643\u0000"+
-        "\u0000\u0000\u6644\u0000\u4D62\u0000\u0000\u0000"+
-        "\u0000\u0000\u3D2C\u0000\u6646\u6645\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3F69\u6647\u0000\u0000\u0000\u0000\u6648\u0000"+
-        "\u0000\u6649\u0000\u3465\u0000\u0000\u0000\u0000"+
-        "\u344D\u0000\u0000\u664A\u0000\u0000\u0000\u0000"+
-        "\u0000\u664B\u0000\u4B5D\u4D63\u0000\u0000\u0000";
-
-    private final static String innerIndex4=
-        "\u4D54\u4F37\u0000\u394D\u664E\u3C54\u664D\u0000"+
-        "\u0000\u0000\u0000\u664F\u3C29\u0000\u0000\u0000"+
-        "\u4251\u0000\u6650\u0000\u0000\u394C\u0000\u4C57"+
-        "\u6651\u6652\u0000\u0000\u6653\u0000\u0000\u0000"+
-        "\u0000\u6654\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6655\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3C2A\u0000\u0000\u4C6D\u0000"+
-        "\u0000\u0000\u0000\u6657\u0000\u433F\u0000\u6656"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6659\u0000"+
-        "\u0000\u0000\u6658\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u665A\u0000\u0000\u0000\u403B\u0000"+
-        "\u665B\u0000\u665C\u0000\u0000\u0000\u4A39\u665D"+
-        "\u0000\u416F\u665E\u0000\u0000\u0000\u0000\u0000"+
-        "\u665F\u0000\u0000\u0000\u0000\u0000\u0000\u4E7E"+
-        "\u6662\u0000\u6661\u6660\u4430\u0000\u6663\u3F26"+
-        "\u0000\u6664\u0000\u0000\u0000\u6665\u4F38\u6666"+
-        "\u0000\u0000\u0000\u0000\u6667\u6669\u6668\u4825"+
-        "\u0000\u4679\u0000\u4F3E\u4829\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u666B\u0000\u0000\u3E53\u0000"+
-        "\u492A\u0000\u666C\u666A\u0000\u344E\u0000\u0000"+
-        "\u0000\u3854\u3B68\u0000\u0000\u486E\u0000\u0000"+
-        "\u0000\u382A\u4B43\u0000\u666F\u666D\u0000\u394E"+
-        "\u0000\u394F\u3069\u0000\u3A68\u0000\u0000\u0000"+
-        "\u0000\u0000\u4759\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u305F\u6674\u0000\u4340\u0000"+
-        "\u0000\u0000\u0000\u0000\u4758\u0000\u425B\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6676\u0000"+
-        "\u0000\u6672\u6675\u6670\u0000\u6673\u4B26\u0000"+
-        "\u0000\u3855\u0000\u0000\u307D\u6671\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6678"+
-        "\u0000\u6679\u0000\u0000\u4639\u0000\u0000\u0000"+
-        "\u363B\u0000\u0000\u0000\u6726\u473D\u0000\u0000"+
-        "\u0000\u0000\u3B69\u0000\u0000\u363C\u4048\u4F46"+
-        "\u4C2E\u6677\u4054\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3553\u667A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u667C\u0000\u0000\u0000\u0000"+
-        "\u0000\u667B\u0000\u0000\u0000\u0000\u0000\u667D"+
-        "\u0000\u4326\u0000\u473E\u0000\u0000\u0000\u0000"+
-        "\u0000\u4431\u0000\u0000\u0000\u0000\u6723\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6722\u0000"+
-        "\u0000\u0000\u0000\u667E\u0000\u0000\u3F55\u0000"+
-        "\u4965\u6725\u0000\u6724\u3950\u4F53\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6735"+
-        "\u0000\u0000\u0000\u0000\u0000\u6729\u672A\u0000"+
-        "\u0000\u0000\u0000\u3C70\u0000\u0000\u6728\u0000"+
-        "\u3978\u6727\u0000\u0000\u672B\u0000\u0000\u0000"+
-        "\u4432\u4A22\u4123\u0000\u0000\u0000\u0000\u425C"+
-        "\u672F\u0000\u6730\u672C\u0000\u0000\u0000\u0000"+
-        "\u672D\u0000\u672E\u0000\u0000\u0000\u0000\u3951"+
-        "\u0000\u0000\u0000\u6736\u0000\u6732\u0000\u0000"+
-        "\u0000\u0000\u4966\u0000\u4B6C\u4928\u0000\u0000"+
-        "\u6731\u0000\u0000\u6734\u6733\u0000\u0000\u0000"+
-        "\u4B44\u6737\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6738\u0000\u0000\u4137\u0000\u6739\u0000\u0000"+
-        "\u673B\u0000\u673F\u0000\u0000\u673C\u673A\u473F"+
-        "\u673D\u0000\u673E\u0000\u0000\u0000\u3232\u0000"+
-        "\u6745\u6740\u0000\u0000\u0000\u6741\u0000\u0000"+
-        "\u0000\u6742\u0000\u4221\u0000\u0000\u0000\u0000"+
-        "\u6744\u6743\u6746\u0000\u0000\u0000\u0000\u6747"+
-        "\u6748\u0000\u0000\u3F43\u0000\u3269\u0000\u6749"+
-        "\u4E57\u0000\u3C2B\u0000\u0000\u3D2D\u0000\u0000"+
-        "\u0000\u0000\u0000\u3B6A\u4357\u0000\u0000\u0000"+
-        "\u0000\u0000\u674A\u674B\u3131\u0000\u674C\u0000"+
-        "\u0000\u674D\u674E\u0000\u0000\u674F\u0000\u6750"+
-        "\u363D\u5A2A\u6751\u0000\u4065\u6752\u3C4B\u0000"+
-        "\u6753\u0000\u5030\u0000\u0000\u0000\u6754\u4A5E"+
-        "\u345C\u0000\u0000\u4124\u3D58\u0000\u4971\u3D2E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6755\u3952\u6756\u484C\u0000\u6764\u0000"+
-        "\u0000\u0000\u0000\u6758\u0000\u4249\u4775\u383F"+
-        "\u6757\u4125\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6759\u0000\u0000\u0000\u0000\u0000\u0000\u447A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u675B\u675A\u675D\u0000\u0000\u675C\u0000\u675E"+
-        "\u0000\u0000\u6760\u0000\u675F\u0000\u344F\u0000"+
-        "\u6761\u0000\u6762\u6763\u0000\u0000\u3A31\u4E49"+
-        "\u0000\u6765\u3F27\u0000\u0000\u0000\u3170\u6766"+
-        "\u6767\u0000\u0000\u0000\u0000\u0000\u6768\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3072\u0000\u6769\u0000\u0000"+
-        "\u0000\u0000\u676A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4967\u0000\u0000\u0000\u3C47\u0000\u676C"+
-        "\u0000\u0000\u0000\u0000\u0000\u3329\u3032\u0000"+
-        "\u0000\u0000\u0000\u676B\u676E\u474E\u0000\u3F44"+
-        "\u0000\u3256\u0000\u4B27\u0000\u0000\u0000\u0000"+
-        "\u375D\u365C\u0000\u676D\u0000\u326A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3423\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3171\u6772\u4E6A\u425D\u0000\u0000\u4944"+
-        "\u0000\u677E\u0000\u3257\u677C\u0000\u677A\u6771"+
-        "\u0000\u676F\u0000\u6770\u0000\u3C63\u366C\u4377"+
-        "\u0000\u0000\u0000\u4651\u0000\u0000\u0000\u0000"+
-        "\u0000\u3151\u0000\u6774\u6773\u0000\u0000\u0000"+
-        "\u0000\u6779\u6775\u6778\u0000\u0000\u0000\u0000"+
-        "\u0000\u7B57\u4C50\u6777\u3258\u337D\u677B\u0000"+
-        "\u0000\u677D\u0000\u0000\u0000\u0000\u3754\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6823\u682C"+
-        "\u682D\u0000\u0000\u0000\u302B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6834\u0000\u0000\u0000\u0000"+
-        "\u3071\u0000\u0000\u682B\u0000\u0000\u0000\u682A"+
-        "\u0000\u6825\u6824\u0000\u6822\u6821\u4363\u0000"+
-        "\u427B\u6827\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6826\u0000\u0000\u0000\u0000\u6829\u0000\u0000"+
-        "\u0000\u4170\u3755\u0000\u0000\u0000\u0000\u3141"+
-        "\u6828\u0000\u3953\u0000\u0000\u0000\u0000\u0000"+
-        "\u4171\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u7B58\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u683A\u0000\u683B\u0000\u3259"+
-        "\u0000\u0000\u0000\u322E\u6838\u0000\u0000\u7B59"+
-        "\u0000\u0000\u0000\u0000\u0000\u682E\u0000\u6836"+
-        "\u0000\u683D\u6837\u0000\u0000\u0000\u6835\u0000"+
-        "\u0000\u0000\u0000\u6776\u0000\u0000\u6833\u0000"+
-        "\u0000\u0000\u682F\u0000\u0000\u0000\u3450\u6831"+
-        "\u683C\u0000\u6832\u0000\u0000\u0000\u0000\u0000"+
-        "\u683E\u0000\u6830\u477C\u0000\u0000\u0000\u0000"+
-        "\u0000\u4D69\u0000\u0000\u0000\u6839\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u684F\u0000\u0000"+
-        "\u0000\u6847\u0000\u0000\u0000\u3F7B\u0000\u7B5A"+
-        "\u0000\u0000\u3546\u0000\u365D\u0000\u6842\u0000"+
-        "\u0000\u0000\u0000\u325B\u0000\u0000\u3E54\u0000"+
-        "\u6845\u0000\u0000\u0000\u3A5A\u0000\u0000\u4551"+
-        "\u684A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A6E\u0000\u6841\u0000\u0000\u0000\u325A"+
-        "\u3856\u4929\u684B\u0000\u683F\u0000\u7B5B\u6848"+
-        "\u0000\u0000\u0000\u6852\u0000\u6843\u0000\u0000"+
-        "\u0000\u0000\u0000\u6844\u463A\u0000\u0000\u6849"+
-        "\u0000\u0000\u0000\u6846\u4B28\u684C\u3060\u0000"+
-        "\u0000\u0000\u0000\u6840\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u684E\u0000\u684D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u476B\u6854\u0000\u685F\u0000\u0000\u0000"+
-        "\u0000\u337E\u0000\u0000\u0000\u6862\u0000\u0000"+
-        "\u6850\u0000\u0000\u0000\u6855\u4D6E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u685E\u0000"+
-        "\u7B5C\u4D55\u0000\u0000\u0000\u0000\u4E2A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4378"+
-        "\u0000\u0000\u0000\u336B\u0000\u0000\u0000\u0000"+
-        "\u0000\u4972\u6864\u4621\u0000\u0000\u3031\u0000"+
-        "\u0000\u685D\u0000\u6859\u4172\u6853\u685B\u6860"+
-        "\u0000\u472C\u0000\u0000\u0000\u302A\u0000\u6858"+
-        "\u0000\u6861\u4978\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u685C\u0000\u6857\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3E55\u0000\u0000\u0000\u0000"+
-        "\u3D2F\u0000\u0000\u0000\u3C2C\u0000\u0000\u0000"+
-        "\u0000\u4C58\u0000\u0000\u4947\u0000\u0000\u6867"+
-        "\u0000\u6870\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u685A\u0000\u0000"+
-        "\u0000\u0000\u3377\u0000\u7B5D\u0000\u0000\u0000"+
-        "\u3E78\u6865\u0000\u686A\u4173\u0000\u0000\u6866"+
-        "\u0000\u686D\u0000\u0000\u435F\u0000\u686E\u0000"+
-        "\u0000\u4D56\u6863\u3338\u0000\u6869\u0000\u0000"+
-        "\u686C\u4C2C\u0000\u0000\u0000\u0000\u686F\u0000"+
-        "\u0000\u6868\u686B\u0000\u7925\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4B29\u0000\u4F21\u0000"+
-        "\u0000\u0000\u0000\u0000\u6873\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u687A\u0000\u0000\u6872"+
-        "\u3C43\u0000\u0000\u0000\u0000\u0000\u6851\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A4E\u0000\u4C22\u6879\u6878\u0000\u6874"+
-        "\u6875\u0000\u3136\u0000\u0000\u0000\u0000\u6877"+
-        "\u0000\u6871\u0000\u0000\u0000\u0000\u4455\u0000"+
-        "\u0000\u0000\u0000\u0000\u6876\u307E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4222\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4A43\u0000\u0000"+
-        "\u687B\u6921\u0000\u4859\u0000\u0000\u0000\u0000"+
-        "\u687E\u3E56\u3C49\u6923\u0000\u0000\u363E\u0000"+
-        "\u0000\u0000\u0000\u7B5E\u0000\u6924\u0000\u4979"+
-        "\u687D\u7B5F\u6856\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u687C\u0000\u0000\u0000\u0000"+
-        "\u4F4F\u4622\u4973\u7B60\u0000\u692B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6931"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6932\u0000"+
-        "\u6925\u0000\u0000\u0000\u4776\u0000\u0000\u692F"+
-        "\u6927\u0000\u6929\u0000\u0000\u0000\u0000\u0000"+
-        "\u6933\u6928\u0000\u0000\u692C\u0000\u0000\u3172"+
-        "\u0000\u4665\u0000\u692D\u6930\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6926\u0000\u4126\u0000"+
-        "\u692A\u3B27\u3F45\u3730\u4C74\u0000\u4C79\u3D72"+
-        "\u7B62\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6937\u6935\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4F4E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6934\u0000\u0000\u0000\u4D75\u0000\u6936"+
-        "\u6938\u0000\u0000\u0000\u0000\u6939\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u693C\u693A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4623\u693B\u0000\u0000"+
-        "\u0000\u484D\u692E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3D73"+
-        "\u0000\u693D\u6942\u4174\u0000\u0000\u6941\u0000"+
-        "\u0000\u0000\u6922\u0000\u0000\u0000\u6943\u4149"+
-        "\u0000\u0000\u693E\u6940\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u693F\u0000\u0000\u5D31\u5D22"+
-        "\u0000\u0000\u6945\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6944\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4D76\u0000\u623C"+
-        "\u6946\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6947"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6948\u3857\u0000"+
-        "\u3554\u0000\u0000\u0000\u694A\u515D\u0000\u0000"+
-        "\u0000\u0000\u3575\u0000\u4E3A\u0000\u3673\u694B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u694C"+
-        "\u0000\u0000\u0000\u436E\u0000\u0000\u0000\u0000"+
-        "\u0000\u694D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u467A\u0000\u303A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3263\u6952\u6953\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u694E\u0000\u3B3D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u694F\u4742\u0000\u0000\u0000"+
-        "\u0000\u6950\u6951\u695B\u0000\u0000\u0000\u6955"+
-        "\u6958\u0000\u0000\u0000\u0000\u0000\u6954\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6956\u0000\u6957\u3C58"+
-        "\u0000\u6959\u0000\u4341\u0000\u3756\u3342\u0000"+
-        "\u0000\u0000\u0000\u0000\u695C\u0000\u0000\u0000"+
-        "\u0000\u333F\u0000\u6961\u0000\u0000\u695D\u6960"+
-        "\u0000\u0000\u0000\u0000\u483A\u0000\u0000\u0000"+
-        "\u0000\u695E\u0000\u0000\u695F\u4948\u485A\u6962"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u427D\u696C\u0000\u6968\u0000\u0000\u326B\u0000"+
-        "\u6966\u0000\u4B2A\u6967\u0000\u0000\u6964\u0000"+
-        "\u6965\u696A\u696D\u0000\u0000\u696B\u0000\u0000"+
-        "\u0000\u6969\u6963\u0000\u0000\u0000\u0000\u0000"+
-        "\u4358\u0000\u6974\u0000\u4C2A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6972\u0000\u0000"+
-        "\u0000\u6973\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u696E\u0000\u0000\u6970"+
-        "\u0000\u0000\u0000\u6971\u0000\u0000\u0000\u696F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4066\u0000\u4F39\u6978\u0000\u6979\u0000"+
-        "\u0000\u0000\u0000\u6A21\u0000\u3F2A\u0000\u697B"+
-        "\u0000\u697E\u0000\u0000\u0000\u0000\u0000\u6976"+
-        "\u6975\u0000\u0000\u6A22\u0000\u0000\u325C\u0000"+
-        "\u697C\u0000\u6A23\u0000\u0000\u0000\u697D\u0000"+
-        "\u0000\u0000\u0000\u0000\u697A\u0000\u4433\u0000"+
-        "\u6977\u0000\u0000\u0000\u0000\u0000\u0000\u4768"+
-        "\u0000\u0000\u6A27\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4D3B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6A26"+
-        "\u0000\u0000\u6A25\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6A2E\u0000\u0000\u0000\u6A28"+
-        "\u0000\u0000\u0000\u6A30\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D66\u6A33\u0000\u6A2A\u0000\u0000"+
-        "\u6A2B\u0000\u0000\u0000\u6A2F\u0000\u6A32\u6A31"+
-        "\u0000\u0000\u0000\u6A29\u0000\u0000\u0000\u0000"+
-        "\u6A2C\u0000\u6A3D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6A36\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6A34"+
-        "\u0000\u0000\u6A35\u0000\u0000\u0000\u6A3A\u6A3B"+
-        "\u0000\u332A\u0000\u3542\u0000\u0000\u6A39\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A24\u0000\u7B65"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A38\u6A3C\u6A37"+
-        "\u0000\u6A3E\u0000\u0000\u0000\u6A40\u6A3F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6A42\u6A41\u695A\u0000\u0000\u0000\u6A46"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6A43\u0000\u0000\u0000\u0000\u6A44\u0000"+
-        "\u0000\u6A45\u0000\u6A47\u0000\u0000\u0000\u0000"+
-        "\u376C\u0000\u6A49\u0000\u6A48\u0000\u3D30\u0000"+
-        "\u0000\u0000\u0000\u0000\u3954\u5E27\u0000\u0000"+
-        "\u0000\u0000\u6A4A\u3D51\u0000\u0000\u0000\u3339"+
-        "\u0000\u6A4B\u0000\u3152\u0000\u3E57\u6A4C\u0000"+
-        "\u0000\u3955\u6A4D\u3061\u0000\u0000\u0000\u0000"+
-        "\u493D\u0000\u0000\u6A4E\u0000\u0000\u0000\u0000"+
-        "\u3F6A\u0000\u6A55\u0000\u0000\u6A52\u0000\u436F"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A53\u6A50\u365E"+
-        "\u0000\u6A4F\u6A56\u0000\u0000\u0000\u0000\u0000"+
-        "\u3736\u0000\u0000\u425E\u0000\u6A5C\u0000\u0000"+
-        "\u0000\u0000\u6A58\u0000\u0000\u0000\u4235\u6A57"+
-        "\u0000\u6A5A\u0000\u0000\u0000\u0000\u6A51\u0000"+
-        "\u0000\u0000\u6A5B\u0000\u6A5D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u486F\u0000\u0000\u6A59\u0000"+
-        "\u6A5E\u6A60\u0000\u0000\u3853\u6A54\u0000\u3041"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6A5F"+
-        "\u0000\u3A5B\u4E76\u6A61\u6A62\u4175\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4E22"+
-        "\u0000\u0000\u0000\u0000\u6A63\u4D35\u0000\u0000"+
-        "\u6A64\u6A65\u0000\u0000\u4A64\u6A66\u0000\u3A40"+
-        "\u0000\u4E23\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6A6B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6A6C\u3E58\u6A6A\u7B66\u0000\u0000"+
-        "\u4D67\u6A67\u0000\u0000\u6A69\u403D\u3F7E\u0000"+
-        "\u0000\u0000\u6A68\u0000\u6A6D\u0000\u0000\u4A23"+
-        "\u0000\u0000\u6A6F\u0000\u6A6E\u0000\u0000\u0000"+
-        "\u336C\u0000\u4B2B\u6A70\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u7922\u6A7C\u6A72\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A73\u0000\u0000"+
-        "\u0000\u0000\u6A74\u6A75\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6A79\u0000"+
-        "\u6A7A\u0000\u0000\u6A78\u0000\u0000\u0000\u0000"+
-        "\u0000\u6A76\u0000\u6A71\u6A77\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6A7B\u7037\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3228\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6A7E\u365F"+
-        "\u6A7D\u0000\u0000\u0000\u6B22\u0000\u6B21\u0000"+
-        "\u0000\u0000\u6B24\u0000\u0000\u6B23\u0000\u6B25"+
-        "\u0000\u0000\u3D31\u0000\u6B26\u0000\u0000\u6B27"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6B28\u403E"+
-        "\u0000\u4D57\u0000\u6B29\u0000\u0000\u4A24\u4746"+
-        "\u6B2A\u0000\u6B2B\u382B\u0000\u0000\u0000\u352C"+
-        "\u0000\u0000\u0000\u6B2C\u0000\u0000\u3B6B\u4741"+
-        "\u6B2D\u0000\u3350\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6B2E\u0000\u0000\u0000\u0000\u6B30\u4D77"+
-        "\u0000\u6B2F\u3F46\u0000\u6B31\u0000\u0000\u6B32"+
-        "\u0000\u0000\u6B33\u3451\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6B34\u0000\u0000\u6B35\u0000\u6B36"+
-        "\u6B37\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3351\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6B38\u0000\u6B39\u6B3A\u0000\u0000"+
-        "\u0000\u0000\u0000\u3272\u0000\u0000\u3F28\u6B3B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6B3C\u0000\u0000\u0000"+
-        "\u6B3D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3840\u0000\u447B\u6B3E\u0000\u0000\u0000\u0000"+
-        "\u3757\u0000\u3F56\u0000\u6B41\u0000\u4624\u0000"+
-        "\u6B40\u0000\u7B67\u3731\u0000\u0000\u6B3F\u4277"+
-        "\u352D\u0000\u0000\u6B42\u0000\u6B43\u0000\u3E59"+
-        "\u0000\u0000\u0000\u376D\u0000\u6B44\u0000\u0000"+
-        "\u0000\u0000\u4B2C\u0000\u0000\u405F\u0000\u0000"+
-        "\u0000\u3576\u0000\u4C75\u414A\u0000\u6B45\u7B68"+
-        "\u0000\u0000\u3F47\u4370\u3E5A\u0000\u0000\u0000"+
-        "\u0000\u6B46\u0000\u0000\u0000\u0000\u6B49\u0000"+
-        "\u6B4A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3A3E\u4242\u6B48\u0000\u3E5B\u493E\u0000\u0000"+
-        "\u0000\u0000\u0000\u6B47\u0000\u0000\u3B6C\u0000"+
-        "\u3153\u0000\u6B4E\u3758\u0000\u0000\u3B6E\u0000"+
-        "\u0000\u3B6D\u0000\u4F4D\u6B4D\u6B4C\u4127\u0000"+
-        "\u354D\u4F43\u333A\u3E5C\u0000\u0000\u0000\u0000"+
-        "\u0000\u7B69\u0000\u0000\u6B4B\u0000\u0000\u0000"+
-        "\u0000\u0000\u6B50\u0000\u6B51\u6B4F\u0000\u3858"+
-        "\u0000\u4D40\u0000\u0000\u3B6F\u4727\u0000\u0000"+
-        "\u0000\u6B54\u0000\u4040\u0000\u4342\u0000\u0000"+
-        "\u4D36\u0000\u6B57\u0000\u0000\u0000\u386C\u0000"+
-        "\u403F\u6B53\u0000\u6B58\u386D\u6B55\u6B56\u7B6A"+
-        "\u6B52\u0000\u0000\u0000\u4062\u4649\u0000\u0000"+
-        "\u432F\u0000\u325D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4870\u0000\u0000\u3543\u0000\u7B6B\u4434"+
-        "\u0000\u0000\u6B5B\u0000\u6B59\u0000\u0000\u434C"+
-        "\u0000\u0000\u0000\u4041\u3452\u6B5A\u0000\u3F5B"+
-        "\u0000\u0000\u4E4A\u0000\u0000\u0000\u4F40\u0000"+
-        "\u0000\u0000\u6B5C\u6B67\u4435\u0000\u6B66\u7B6C"+
-        "\u6B63\u6B6B\u6B64\u0000\u6B60\u0000\u447C\u6B5F"+
-        "\u0000\u0000\u0000\u6B5D\u0000\u4D21\u3B70\u0000"+
-        "\u0000\u6B61\u0000\u6B5E\u0000\u0000\u7B6E\u6B65"+
-        "\u3D74\u0000\u3841\u0000\u0000\u0000\u427A\u0000"+
-        "\u4B45\u315A\u3062\u0000\u4625\u0000\u0000\u6B69"+
-        "\u0000\u0000\u0000\u0000\u6B68\u0000\u4666\u0000"+
-        "\u6B6D\u0000\u0000\u0000\u6B62\u0000\u6B6C\u6B6E"+
-        "\u0000\u382C\u6B6A\u3956\u0000\u3C55\u0000\u0000"+
-        "\u6B6F\u4D58\u0000\u0000\u0000\u0000\u6B72\u0000"+
-        "\u6B75\u0000\u0000\u6B73\u4935\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6B70\u0000\u0000\u0000\u0000"+
-        "\u0000\u3660\u0000\u0000\u0000\u0000\u6B74\u0000"+
-        "\u0000\u6B76\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6B7A\u0000\u0000\u6B77\u0000\u6B79\u6B78"+
-        "\u0000\u0000\u0000\u7B6F\u0000\u0000\u6B7B\u0000"+
-        "\u3C31\u0000\u6B7D\u6B7C\u4968\u0000\u0000\u6C21"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3759\u0000"+
-        "\u0000\u0000\u0000\u6B7E\u6C22\u0000\u0000\u6C23"+
-        "\u3544\u6641\u3E79\u0000\u6C24\u0000\u0000\u386E"+
-        "\u0000\u0000\u0000\u0000\u0000\u6C25\u0000\u7B70"+
-        "\u6C26\u0000\u0000\u3B3E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5A4E\u0000\u6C27\u0000\u6C28\u0000"+
-        "\u3D32\u0000\u6C29\u6C2A\u0000\u0000\u6C2B\u0000"+
-        "\u0000\u6C2C\u6C2D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u432B"+
-        "\u0000\u0000\u6C2E\u0000\u0000\u0000\u0000\u6C30"+
-        "\u0000\u6C2F\u0000\u0000\u0000\u0000\u4626\u0000"+
-        "\u6C31\u0000\u4B2D\u0000\u6C32\u0000\u6C33\u0000"+
-        "\u6C34\u0000\u0000\u0000\u0000\u6C35\u0000\u0000"+
-        "\u0000\u0000\u465A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3E5D\u6C36\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u396B\u502E\u6C37\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6C38\u493F\u6C39\u0000\u6C41\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C3A\u0000\u0000\u6C3C\u0000\u0000"+
-        "\u0000\u6C3B\u6C3D\u0000\u4B46\u6C3E\u6C3F\u0000"+
-        "\u0000\u0000\u0000\u0000\u6C40\u0000\u0000\u0000"+
-        "\u6C42\u0000\u0000\u0000\u0000\u332D\u4467\u0000"+
-        "\u4969\u3A62\u3957\u0000\u0000\u0000\u0000\u494F"+
-        "\u325F\u484E\u6C45\u3453\u4055\u6C44\u6C49\u4379"+
-        "\u4C63\u0000\u6C47\u6C48\u352E\u0000\u6C4A\u4763"+
-        "\u425F\u0000\u0000\u4871\u453D\u6C46\u0000\u4B47"+
-        "\u326C\u6C4C\u4F28\u4442\u4F45\u0000\u0000\u3B71"+
-        "\u6C4B\u0000\u4231\u0000\u0000\u6C5C\u4128\u0000"+
-        "\u0000\u4678\u0000\u4950\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C4F\u3B3F\u3B72\u0000\u3E5E\u0000"+
-        "\u4765\u0000\u382D\u6C4E\u6C4D\u0000\u496A\u0000"+
-        "\u0000\u0000\u3C41\u0000\u0000\u4552\u0000\u0000"+
-        "\u7B71\u0000\u0000\u0000\u7B72\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C51\u6C52\u3958\u6C50\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6C53\u6C54\u0000\u6C56"+
-        "\u4223\u0000\u6C55\u3466\u0000\u6C58\u0000\u6C57"+
-        "\u6C59\u0000\u7B73\u6C5B\u6C5D\u0000\u6C5E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4056\u0000\u3C4F\u6C5F"+
-        "\u0000\u0000\u0000\u3352\u0000\u6C60\u0000\u0000"+
-        "\u4176\u6C61\u0000\u6C62\u496B\u0000\u7B74\u352F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6C63\u0000\u0000\u0000\u4436\u0000\u0000"+
-        "\u0000\u0000\u315B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6C64\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3C71\u0000\u0000\u0000\u0000"+
-        "\u3F76\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u422D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C67\u0000\u0000\u0000\u6C66\u0000"+
-        "\u0000\u0000\u6C65\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6C6D\u6C6B\u0000\u0000\u6C68"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6C6A\u0000"+
-        "\u0000\u0000\u6C69\u6C6C\u0000\u3577\u0000\u6C70"+
-        "\u0000\u4057\u0000\u6C71\u0000\u0000\u0000\u0000"+
-        "\u3859\u0000\u6C6E\u6C6F\u0000\u0000\u0000\u4F29"+
-        "\u0000\u0000\u0000\u4437\u0000\u4129\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6C72\u0000\u0000\u6C75"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6C73\u6C74\u4D59\u0000\u0000\u0000\u0000\u4627"+
-        "\u6C78\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6C76\u6C77\u6C79"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D29\u0000\u0000\u0000\u0000\u0000"+
-        "\u6C7C\u0000\u0000\u0000\u6C7D\u6C7B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C7A\u0000\u447D\u0000\u0000\u6D21"+
-        "\u6D25\u6D22\u6C7E\u0000\u6D23\u0000\u0000\u0000"+
-        "\u6D24\u0000\u0000\u0000\u0000\u6D2B\u0000\u0000"+
-        "\u0000\u6D26\u0000\u0000\u0000\u0000\u0000\u4058"+
-        "\u6D28\u0000\u0000\u6D2A\u6D27\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D2D\u0000\u3D33\u0000\u6D2C\u0000"+
-        "\u0000\u0000\u0000\u0000\u6D2E\u0000\u0000\u0000"+
-        "\u0000\u6D2F\u0000\u0000\u6D32\u6D31\u0000\u6D30"+
-        "\u0000\u0000\u6D34\u6D33\u0000\u4C76\u0000\u0000"+
-        "\u0000\u6D36\u0000\u6D35\u6D37\u0000\u0000\u0000"+
-        "\u0000\u6D38\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6D3A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D39\u3F48\u6D3B\u0000\u0000\u366D"+
-        "\u6D3C\u6D3E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6D3F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6D40\u6D3D\u0000"+
-        "\u6D41\u0000\u3C56\u6D42\u3530\u3733\u0000\u7B76"+
-        "\u0000\u0000\u382E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6D43\u0000\u0000\u0000\u4670"+
-        "\u0000\u0000\u453E\u6D44\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6D47\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3C34\u0000\u0000\u6D46\u6D45\u375A\u6D48\u0000"+
-        "\u0000\u0000\u0000\u3353\u0000\u6D4A\u0000\u0000"+
-        "\u0000\u3A5C\u6D49\u0000\u6D52\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D4C\u6D4E\u4A65\u6D4B\u0000\u0000"+
-        "\u0000\u6D4D\u0000\u6D51\u6D4F\u3531\u0000\u6D50"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6D53\u0000"+
-        "\u0000\u475A\u4E58\u0000\u0000\u0000\u0000\u3D34"+
-        "\u0000\u0000\u0000\u6D54\u0000\u0000\u0000\u0000"+
-        "\u4D22\u6D56\u0000\u6D55\u0000\u0000\u6D59\u4D41"+
-        "\u0000\u0000\u6D58\u0000\u336D\u6D57\u6D5C\u0000"+
-        "\u0000\u6D5B\u0000\u0000\u6D5A\u4532\u6D5D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6D5E"+
-        "\u0000\u0000\u0000\u0000\u6D5F\u0000\u0000\u396C"+
-        "\u0000\u3725\u6D60\u6D61\u6D62\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3F49\u6D63\u0000\u3C2D\u6D64"+
-        "\u0000\u0000\u0000\u6D65\u0000\u0000\u0000\u5221"+
-        "\u517E\u0000\u0000\u0000\u0000\u6D66\u6570\u6D67"+
-        "\u4324\u3F2B\u4740\u0000\u0000\u0000\u0000\u6D68"+
-        "\u0000\u0000\u4A55\u4454\u397E\u0000\u0000\u4329"+
-        "\u0000\u0000\u312A\u0000\u4B78\u3F57\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u375E\u0000"+
-        "\u0000\u3661\u0000\u0000\u4A56\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D69\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6D6B\u0000\u0000\u6D6A\u3260\u0000"+
-        "\u0000\u4676\u6D6C\u4777\u0000\u4533\u0000\u6D6D"+
-        "\u3D52\u0000\u0000\u0000\u6D6F\u0000\u0000\u4C42"+
-        "\u6D7E\u6D71\u6D72\u0000\u0000\u4449\u0000\u0000";
-
-    private final static String innerIndex5=
-        "\u4260\u4177\u0000\u4628\u0000\u6D70\u3555\u0000"+
-        "\u0000\u0000\u0000\u6D79\u0000\u6D76\u6E25\u4629"+
-        "\u4360\u6D73\u0000\u447E\u4553\u6D74\u6D78\u3F60"+
-        "\u0000\u4767\u444C\u0000\u0000\u4042\u6D77\u422E"+
-        "\u4224\u6D75\u3029\u4F22\u0000\u0000\u0000\u6D7A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4261\u0000"+
-        "\u0000\u3D35\u3F4A\u0000\u0000\u6D7C\u6D7B\u0000"+
-        "\u306F\u6D7D\u0000\u0000\u492F\u0000\u6E27\u0000"+
-        "\u0000\u465B\u3F6B\u0000\u0000\u4359\u0000\u3678"+
-        "\u0000\u6E26\u4D37\u313F\u0000\u4A57\u3261\u6E21"+
-        "\u6E22\u6E23\u6E24\u463B\u4323\u3063\u6E28\u0000"+
-        "\u6E29\u7423\u0000\u0000\u423D\u0000\u6E2A\u0000"+
-        "\u3173\u414C\u0000\u382F\u0000\u4D5A\u0000\u7B79"+
-        "\u6E2B\u452C\u0000\u0000\u0000\u4178\u3C57\u6E2C"+
-        "\u0000\u0000\u6E2F\u0000\u0000\u3D65\u6E2D\u412B"+
-        "\u412A\u0000\u3064\u0000\u4E4B\u6E31\u0000\u4872"+
-        "\u6E33\u6E32\u6E30\u6364\u3454\u0000\u0000\u6D6E"+
-        "\u0000\u6E35\u6E34\u0000\u0000\u0000\u0000\u6E36"+
-        "\u0000\u4D38\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4661\u0000\u0000\u4B2E\u0000"+
-        "\u6E37\u0000\u3C59\u0000\u0000\u0000\u0000\u6E38"+
-        "\u0000\u6E39\u0000\u0000\u0000\u6E3A\u0000\u0000"+
-        "\u4521\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u306A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3959\u0000\u0000\u0000\u4F3A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6E3E\u0000\u0000\u7B7A\u0000"+
-        "\u0000\u3734\u6E3B\u0000\u6E3C\u0000\u0000\u0000"+
-        "\u4974\u0000\u0000\u0000\u0000\u3354\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4D39\u0000\u363F"+
-        "\u0000\u0000\u0000\u0000\u0000\u4554\u0000\u0000"+
-        "\u0000\u0000\u6E3F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6E40\u0000\u0000\u7B7C\u0000\u0000"+
-        "\u0000\u6E41\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7B7D"+
-        "\u0000\u0000\u0000\u0000\u0000\u4522\u0000\u0000"+
-        "\u6E43\u0000\u6E42\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4653\u6E44\u3D36\u3C60\u475B\u4371\u0000"+
-        "\u0000\u0000\u3C72\u0000\u3F6C\u0000\u6E45\u0000"+
-        "\u6E46\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3F5D\u6E47\u0000\u6E48\u0000\u0000"+
-        "\u0000\u6E49\u4D6F\u0000\u3D37\u0000\u0000\u0000"+
-        "\u0000\u0000\u6E4B\u6E4A\u0000\u395A\u0000\u3973"+
-        "\u3B40\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6E4E\u0000\u0000\u0000\u0000\u3D66"+
-        "\u0000\u6E4D\u0000\u6E4C\u0000\u4269\u0000\u0000"+
-        "\u386F\u0000\u4043\u0000\u0000\u0000\u0000\u4830"+
-        "\u0000\u0000\u0000\u0000\u3D39\u0000\u0000\u0000"+
-        "\u0000\u0000\u6E4F\u0000\u3E5F\u0000\u0000\u0000"+
-        "\u0000\u0000\u6E52\u6E50\u0000\u0000\u0000\u6E51"+
-        "\u0000\u0000\u0000\u0000\u6E54\u6E53\u0000\u0000"+
-        "\u3E7A\u0000\u6E55\u0000\u0000\u0000\u0000\u0000"+
-        "\u6E56\u6E57\u0000\u0000\u0000\u0000\u4850\u3A53"+
-        "\u3C61\u6E58\u0000\u6E59\u4E24\u3D45\u4C6E\u4E4C"+
-        "\u6E5A\u3662\u0000\u0000\u0000\u0000\u6E5B\u7C21"+
-        "\u4523\u0000\u7B7E\u6E5E\u3378\u3F4B\u7C22\u6E5C"+
-        "\u0000\u6E5D\u0000\u4460\u7C25\u7C26\u4B55\u367C"+
-        "\u0000\u0000\u0000\u0000\u0000\u7C23\u7C24\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6E60\u6E61\u0000"+
-        "\u0000\u0000\u0000\u0000\u6E5F\u0000\u0000\u6E63"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7C27\u0000"+
-        "\u0000\u0000\u7C29\u0000\u0000\u465F\u3343\u0000"+
-        "\u7C28\u6E67\u0000\u0000\u6E64\u6E66\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6E62\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6F4F\u0000\u0000\u6E65\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4E6B\u0000\u0000\u385A"+
-        "\u0000\u7C30\u7C2A\u0000\u7C2C\u0000\u0000\u6E6F"+
-        "\u7C2B\u0000\u0000\u0000\u4534\u6E6A\u0000\u0000"+
-        "\u6E6D\u6E6B\u0000\u6E70\u0000\u0000\u7C2D\u0000"+
-        "\u6E71\u7C2F\u0000\u0000\u0000\u0000\u0000\u6E69"+
-        "\u0000\u7C2E\u6E76\u3174\u0000\u0000\u6E68\u0000"+
-        "\u0000\u0000\u482D\u0000\u6E6C\u0000\u3E60\u7C31"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u395B\u0000\u0000\u0000\u0000\u0000\u7C33"+
-        "\u7C34\u0000\u0000\u0000\u0000\u0000\u4B48\u0000"+
-        "\u3664\u0000\u0000\u3D46\u0000\u463C\u0000\u0000"+
-        "\u7924\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u412D\u0000\u6E74\u0000\u6E6E\u6E73\u0000"+
-        "\u4C43\u0000\u4438\u6E75\u6E72\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7C32"+
-        "\u0000\u0000\u0000\u0000\u0000\u412C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E79"+
-        "\u0000\u6E78\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E77"+
-        "\u7C38\u0000\u4B2F\u7C3C\u0000\u7C3A\u0000\u7C36"+
-        "\u0000\u7C37\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7C3B\u0000\u0000\u0000\u3D7B\u0000\u0000\u7C35"+
-        "\u0000\u6E7A\u4A5F\u0000\u0000\u3154\u0000\u0000"+
-        "\u0000\u0000\u4946\u4372\u0000\u0000\u0000\u0000"+
-        "\u3578\u792A\u6E7C\u7C3F\u395D\u0000\u0000\u7C42"+
-        "\u0000\u0000\u7C44\u0000\u0000\u0000\u3B2C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E7B"+
-        "\u3F6D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3F6E\u6F21\u6F23\u0000\u0000\u7C43\u7C41\u0000"+
-        "\u3E7B\u7C3E\u6F22\u6F24\u0000\u7C3D\u3653\u0000"+
-        "\u4945\u0000\u0000\u3C62\u4F23\u0000\u6E7E\u3A78"+
-        "\u0000\u0000\u4F3F\u0000\u0000\u6F26\u0000\u0000"+
-        "\u0000\u0000\u6F25\u6F27\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6E7D\u0000\u0000\u0000"+
-        "\u7923\u0000\u0000\u4669\u0000\u4555\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4457\u0000\u6F2C\u7C46"+
-        "\u0000\u0000\u0000\u4343\u6F28\u0000\u0000\u0000"+
-        "\u6F29\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u372D\u0000\u6F2B\u0000"+
-        "\u7C45\u0000\u0000\u0000\u0000\u3830\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6F2A\u0000\u3E61\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3379\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6F30\u0000\u3A3F\u4179"+
-        "\u0000\u0000\u444A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u7C47\u0000\u0000\u333B"+
-        "\u0000\u0000\u0000\u0000\u6F2E\u6F2F\u4443\u0000"+
-        "\u6F2D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6F31\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6F37\u0000\u0000\u7C48\u0000"+
-        "\u6F3A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6F39\u452D\u0000\u0000\u0000\u0000\u6F32\u6F33"+
-        "\u6F36\u0000\u0000\u0000\u0000\u6F38\u7C49\u0000"+
-        "\u0000\u3640\u0000\u0000\u6F3B\u6F35\u0000\u0000"+
-        "\u6F34\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7C4A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6F3F\u0000\u0000\u0000\u6F40"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6F41\u0000\u0000\u6F3E\u6F3D\u0000\u0000\u0000"+
-        "\u3E62\u462A\u6F3C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6F45\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6F43\u0000\u0000\u0000\u0000"+
-        "\u0000\u7C4B\u0000\u0000\u0000\u6F44\u6F42\u0000"+
-        "\u4278\u0000\u6F46\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6F47\u0000\u0000\u6F49\u7C4C\u0000\u0000"+
-        "\u7C4D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3455\u6F48\u4C7A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6F54\u6F4A\u0000\u0000\u6F4D\u0000"+
-        "\u6F4B\u0000\u6F4C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6F4E\u0000\u0000\u0000\u0000\u0000"+
-        "\u6F50\u0000\u0000\u0000\u0000\u6F51\u0000\u6F52"+
-        "\u0000\u0000\u0000\u0000\u6F55\u6F53\u6F56\u6F58"+
-        "\u0000\u6F57\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4439"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4C67\u0000\u6F59\u412E\u0000\u0000\u0000\u6F5A"+
-        "\u0000\u4A44\u6F5B\u332B\u0000\u0000\u0000\u313C"+
-        "\u0000\u3457\u7C4E\u3456\u6F5C\u0000\u6F5D\u0000"+
-        "\u6F5E\u6F5F\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6F60\u0000\u3458\u3355\u395E\u4836\u0000\u6F62"+
-        "\u6F61\u0000\u0000\u0000\u0000\u6F63\u0000\u0000"+
-        "\u0000\u0000\u315C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6F66\u0000\u6F65\u6F64\u0000\u6F67\u0000"+
-        "\u0000\u0000\u0000\u6F6A\u0000\u0000\u0000\u3047"+
-        "\u0000\u0000\u6F68\u0000\u6F6C\u6F6B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6F6E\u6F6D\u6F6F\u0000"+
-        "\u462E\u0000\u0000\u0000\u6F70\u0000\u0000\u0000"+
-        "\u0000\u6F71\u6F73\u0000\u0000\u6F72\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u496C\u0000\u0000\u0000"+
-        "\u0000\u6F74\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6F75\u0000\u3A65\u0000\u0000\u0000\u6F76\u6F77"+
-        "\u0000\u0000\u4B49\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u414B\u0000\u0000\u0000\u3024"+
-        "\u424B\u0000\u6F78\u0000\u496D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6F7B\u6F79\u395F\u0000\u6F7A"+
-        "\u3842\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A45\u6F7D\u7021\u6F7E\u7022"+
-        "\u0000\u0000\u3121\u3F58\u3D7C\u3459\u7023\u0000"+
-        "\u0000\u0000\u4766\u0000\u7025\u0000\u0000\u0000"+
-        "\u3122\u0000\u7024\u4444\u0000\u4E4D\u462B\u6F7C"+
-        "\u4E26\u0000\u3831\u0000\u0000\u4D5B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3679\u4E34\u0000"+
-        "\u3728\u0000\u4262\u6721\u0000\u7026\u332C\u3F6F"+
-        "\u0000\u0000\u0000\u0000\u3356\u7028\u0000\u7029"+
-        "\u7027\u3764\u0000\u3A5D\u3E63\u7C51\u0000\u0000"+
-        "\u3123\u0000\u0000\u4E59\u0000\u0000\u0000\u702B"+
-        "\u6E2E\u0000\u702A\u0000\u0000\u0000\u0000\u7C52"+
-        "\u702E\u702C\u702D\u0000\u702F\u0000\u7030\u4E6C"+
-        "\u7031\u7032\u0000\u4049\u483B\u0000\u0000\u0000"+
-        "\u3F7D\u3467\u0000\u0000\u4D3A\u326D\u3D38\u385B"+
-        "\u0000\u7035\u0000\u7034\u3B73\u7036\u7033\u0000"+
-        "\u0000\u3B28\u0000\u0000\u0000\u703A\u6A2D\u0000"+
-        "\u0000\u5256\u0000\u3F77\u7038\u0000\u0000\u0000"+
-        "\u0000\u0000\u4E25\u4671\u0000\u0000\u0000\u0000"+
-        "\u312B\u0000\u4063\u3C36\u0000\u0000\u0000\u0000"+
-        "\u4A37\u0000\u3140\u0000\u0000\u0000\u4E6D\u4D6B"+
-        "\u0000\u703B\u0000\u4545\u0000\u0000\u0000\u0000"+
-        "\u3C7B\u0000\u0000\u0000\u703C\u0000\u703D\u3F4C"+
-        "\u703E\u0000\u4E6E\u0000\u0000\u7039\u7040\u7042"+
-        "\u0000\u7041\u0000\u703F\u0000\u0000\u7043\u0000"+
-        "\u0000\u7044\u0000\u0000\u417A\u0000\u3262\u0000"+
-        "\u0000\u0000\u0000\u0000\u7045\u0000\u0000\u4C38"+
-        "\u0000\u0000\u7046\u0000\u0000\u0000\u0000\u0000"+
-        "\u7047\u0000\u4F2A\u7C53\u0000\u0000\u0000\u0000"+
-        "\u5B31\u7048\u0000\u7C54\u0000\u7049\u704A\u0000"+
-        "\u0000\u0000\u704E\u7C55\u704B\u0000\u704C\u0000"+
-        "\u704D\u704F\u0000\u0000\u0000\u7C56\u0000\u7C57"+
-        "\u0000\u7C58\u4044\u0000\u0000\u7C59\u4C77\u0000"+
-        "\u0000\u4045\u0000\u0000\u7050\u0000\u4873\u0000"+
-        "\u7051\u7353\u4C4C\u0000\u7052\u0000\u7053\u0000"+
-        "\u7054\u3357\u0000\u7056\u0000\u3F59\u0000\u0000"+
-        "\u0000\u7057\u0000\u0000\u3724\u0000\u0000\u0000"+
-        "\u0000\u7058\u705C\u0000\u705A\u0000\u0000\u0000"+
-        "\u0000\u705B\u0000\u0000\u3373\u7059\u705D\u0000"+
-        "\u0000\u0000\u0000\u705E\u0000\u3048\u0000\u705F"+
-        "\u7060\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3E64\u0000\u0000\u0000\u7061\u0000\u0000\u0000"+
-        "\u3547\u0000\u0000\u7064\u0000\u0000\u7063\u0000"+
-        "\u7062\u0000\u0000\u6B71\u0000\u4A5C\u0000\u0000"+
-        "\u0000\u0000\u0000\u7065\u7066\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7067\u0000\u0000\u7068\u0000"+
-        "\u7069\u0000\u0000\u706A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u345A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u706B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u706C\u4723\u0000"+
-        "\u0000\u0000\u706E\u323B\u0000\u7071\u7070\u0000"+
-        "\u0000\u0000\u0000\u3124\u0000\u0000\u0000\u3641"+
-        "\u0000\u4A47\u443A\u3A22\u0000\u3960\u3D67\u0000"+
-        "\u3F5C\u0000\u0000\u0000\u7073\u0000\u0000\u7072"+
-        "\u4D42\u3468\u4852\u465C\u0000\u0000\u0000\u3F7C"+
-        "\u4E4E\u0000\u375B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u7076\u0000\u0000\u7075\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4B4B\u462C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3150\u0000\u0000\u7077"+
-        "\u7074\u0000\u0000\u4951\u4D6A\u7078\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7079\u0000"+
-        "\u0000\u0000\u0000\u707B\u426A\u335B\u335C\u707A"+
-        "\u0000\u0000\u0000\u0000\u3469\u3832\u0000\u7C5A"+
-        "\u346A\u0000\u0000\u453F\u0000\u0000\u4E60\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7C5B\u0000\u385C"+
-        "\u0000\u0000\u0000\u707C\u0000\u0000\u0000\u707D"+
-        "\u707E\u7121\u0000\u7123\u7122\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4977\u0000\u7124\u0000\u0000\u0000\u0000\u7125"+
-        "\u0000\u7126\u0000\u0000\u0000\u0000\u7127\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7129\u7128\u0000\u712A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4874\u664C\u0000\u0000\u3F29"+
-        "\u0000\u0000\u3532\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u712B\u0000\u712C\u0000\u522C\u5D3B\u4853"+
-        "\u0000\u0000\u307B\u0000\u303B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3B74\u4B30\u3E7E\u0000"+
-        "\u0000\u0000\u0000\u712D\u0000\u4C5F\u0000\u0000"+
-        "\u0000\u712E\u4D5C\u0000\u3142\u0000\u0000\u0000"+
-        "\u3B41\u0000\u712F\u326E\u7130\u0000\u0000\u0000"+
-        "\u7131\u0000\u0000\u0000\u0000\u7133\u7134\u0000"+
-        "\u7136\u7132\u0000\u0000\u7135\u0000\u0000\u7C5E"+
-        "\u345B\u0000\u0000\u0000\u7137\u0000\u7138\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7139\u713A\u0000"+
-        "\u0000\u0000\u713B\u0000\u0000\u713D\u0000\u0000"+
-        "\u0000\u713C\u0000\u713F\u7142\u0000\u0000\u0000"+
-        "\u713E\u7140\u7141\u0000\u0000\u7143\u0000\u3642"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3C73\u7144"+
-        "\u7145\u3961\u0000\u0000\u0000\u0000\u7C60\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7146\u0000\u0000"+
-        "\u333E\u0000\u0000\u0000\u474F\u7147\u7148\u0000"+
-        "\u0000\u0000\u0000\u435A\u466B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u7149\u0000\u0000\u0000"+
-        "\u0000\u477D\u0000\u0000\u424C\u3158\u366E\u0000"+
-        "\u366F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4373\u714E\u3670\u0000\u0000\u326F\u0000\u0000"+
-        "\u714D\u0000\u0000\u714B\u0000\u714C\u0000\u714A"+
-        "\u0000\u0000\u7158\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u714F\u7150\u0000"+
-        "\u0000\u7151\u7152\u0000\u0000\u0000\u0000\u0000"+
-        "\u7154\u0000\u0000\u7153\u0000\u0000\u0000\u3D59"+
-        "\u0000\u7155\u0000\u0000\u0000\u7157\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3533\u7156"+
-        "\u0000\u0000\u417B\u3833\u0000\u0000\u0000\u0000"+
-        "\u0000\u7159\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u424D\u0000\u0000\u715A\u0000\u0000\u0000\u0000"+
-        "\u462D\u0000\u0000\u0000\u0000\u0000\u0000\u715B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7160\u0000"+
-        "\u715E\u0000\u715D\u715F\u0000\u715C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7162\u7C61\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7161\u0000\u7164"+
-        "\u0000\u0000\u3643\u7163\u0000\u0000\u0000\u7165"+
-        "\u0000\u0000\u7166\u0000\u7168\u7167\u0000\u0000"+
-        "\u0000\u7169\u716B\u716A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u397C\u0000\u0000\u0000\u0000\u716C\u0000\u0000"+
-        "\u716D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u333C\u0000\u0000\u0000\u716E\u0000\u0000\u0000"+
-        "\u716F\u0000\u0000\u0000\u3F71\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7170"+
-        "\u0000\u7171\u0000\u7172\u7173\u0000\u0000\u0000"+
-        "\u3962\u7C62\u0000\u0000\u7C63\u0000\u7174\u7175"+
-        "\u0000\u0000\u7176\u7177\u0000\u0000\u7178\u0000"+
-        "\u0000\u0000\u4831\u717A\u0000\u4926\u717B\u7179"+
-        "\u0000\u717D\u0000\u0000\u717C\u0000\u0000\u717E"+
-        "\u0000\u0000\u0000\u7221\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7222\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7223\u0000\u7224\u0000\u0000\u0000\u0000\u7225"+
-        "\u0000\u0000\u7226\u7227\u0000\u7228\u0000\u7229"+
-        "\u722A\u722B\u722C\u0000\u0000\u0000\u722D\u722E"+
-        "\u0000\u5D35\u722F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6478\u3534\u0000\u0000\u0000"+
-        "\u0000\u3321\u3A32\u7231\u7230\u4C25\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7233\u7234\u7232"+
-        "\u0000\u7235\u0000\u0000\u4B62\u0000\u0000\u0000"+
-        "\u7236\u0000\u357B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4F25"+
-        "\u0000\u0000\u7C65\u0000\u7237\u7C64\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7239\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u303E\u7C66"+
-        "\u0000\u723A\u4A2B\u7238\u0000\u0000\u723B\u723C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u723D"+
-        "\u723E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u723F\u0000\u4B6E\u3B2D\u0000\u3A7A\u412F\u0000"+
-        "\u0000\u7C67\u0000\u0000\u7240\u0000\u0000\u0000"+
-        "\u0000\u7243\u0000\u7C68\u0000\u0000\u0000\u0000"+
-        "\u7241\u0000\u0000\u0000\u0000\u0000\u7244\u0000"+
-        "\u0000\u3871\u7242\u0000\u0000\u0000\u0000\u7245"+
-        "\u0000\u7246\u7247\u0000\u724B\u0000\u3B2A\u0000"+
-        "\u0000\u0000\u0000\u4264\u0000\u0000\u0000\u0000"+
-        "\u0000\u724C\u7249\u7248\u724A\u0000\u0000\u0000"+
-        "\u375F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7250\u724F\u724E\u0000\u0000\u3033\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7C69\u0000\u0000\u0000\u725A\u0000\u7256\u0000"+
-        "\u7257\u7253\u7259\u0000\u7255\u3362\u0000\u0000"+
-        "\u4F4C\u0000\u7258\u7254\u7252\u7251\u0000\u0000"+
-        "\u0000\u0000\u0000\u725C\u0000\u0000\u0000\u0000"+
-        "\u0000\u725F\u0000\u0000\u725E\u725D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4949\u725B\u3073"+
-        "\u7260\u0000\u7262\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u336F\u724D\u3137\u0000\u0000\u7264\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7263\u7261"+
-        "\u432D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4B70\u0000\u0000\u0000\u0000\u4E5A"+
-        "\u0000\u0000\u7265\u0000\u0000\u0000\u0000\u0000"+
-        "\u7266\u0000\u0000\u0000\u0000\u0000\u0000\u7267"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7268\u0000"+
-        "\u7269\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u443B\u0000\u726A"+
-        "\u0000\u4837\u0000\u726F\u726B\u0000\u0000\u0000"+
-        "\u726C\u0000\u0000\u4B31\u4C44\u0000\u4650\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7270\u0000\u0000\u7271\u463E"+
-        "\u726E\u726D\u0000\u0000\u0000\u0000\u322A\u0000"+
-        "\u0000\u0000\u7279\u0000\u0000\u7278\u0000\u0000"+
-        "\u0000\u0000\u0000\u3175\u0000\u0000\u0000\u7276"+
-        "\u0000\u0000\u0000\u7275\u0000\u0000\u7273\u0000"+
-        "\u337B\u0000\u7272\u3C32\u3229\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3963\u0000\u0000\u727C\u727B"+
-        "\u0000\u727A\u0000\u0000\u7277\u0000\u727D\u0000"+
-        "\u727E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7325\u7324\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u7326\u0000\u0000\u312D\u7321\u7322\u0000"+
-        "\u3974\u4C39\u0000\u0000\u7323\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7C6B\u4B32\u0000\u0000\u732B"+
-        "\u7C6A\u0000\u7327\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u732C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7329"+
-        "\u0000\u7328\u0000\u0000\u0000\u0000\u0000\u375C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u732D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u732E\u0000\u0000\u0000"+
-        "\u0000\u732F\u0000\u732A\u0000\u0000\u0000\u7274"+
-        "\u0000\u0000\u7330\u0000\u4461\u0000\u0000\u0000"+
-        "\u7334\u0000\u7335\u7333\u0000\u0000\u0000\u0000"+
-        "\u0000\u7332\u7338\u0000\u7331\u0000\u7336\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7337"+
-        "\u0000\u0000\u0000\u733A\u0000\u0000\u0000\u0000"+
-        "\u0000\u7339\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u733C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u733D\u0000\u733E"+
-        "\u0000\u0000\u4F49\u0000\u0000\u0000\u0000\u0000"+
-        "\u733B\u426B\u3A6D\u0000\u0000\u733F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u7C6D\u7340\u7341\u0000\u0000\u7342\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u7343\u0000\u0000"+
-        "\u3834\u7344\u0000\u0000\u0000\u7345\u0000\u3C2F"+
-        "\u0000\u7346\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7347\u0000\u0000\u7348\u7349\u0000\u0000\u0000"+
-        "\u0000\u734C\u734A\u4F3C\u0000\u734B\u0000\u4E6F"+
-        "\u0000\u0000\u0000\u0000\u0000\u734D\u0000\u4E5B"+
-        "\u0000\u0000\u0000\u0000\u0000\u734E\u477E\u0000"+
-        "\u0000\u734F\u7351\u0000\u0000\u7352\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7350\u396D\u4C4D\u4B63\u5677\u0000\u5D60\u4B7B"+
-        "\u0000\u0000\u0000\u0000\u322B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u7354\u3550\u7355\u7356"+
-        "\u7357\u7C6E\u3975\u0000\u7358\u0000\u0000\u0000"+
-        "\u6054\u4C5B\u0000\u4263\u7359\u735B\u735A\u0000"+
-        "\u735C\u0000\u0000\u0000\u0000\u735D\u0000\u0000"+
-        "\u735E\u0000\u0000\u0000\u0000\u0000\u0000\u735F"+
-        "\u0000\u0000\u0000\u0000\u7360\u0000\u7361\u7362"+
-        "\u0000\u7363\u0000\u7364\u7365\u7366\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7367"+
-        "\u7368\u0000\u0000\u0000\u0000\u0000\u4524\u0000"+
-        "\u0000\u0000\u0000\u385D\u0000\u736A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u414D\u736B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u736C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4921\u0000\u0000\u736D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u736E\u6337\u0000\u0000\u6C5A\u706D"+
-        "\u0000\u0000\u736F\u0000\u7370\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7372"+
-        "\u7373\u7374\u4E70\u7371\u0000\u0000\u7375\u7376"+
-        "\u0000\u0000\u7378\u0000\u7377\u0000\u0000\u0000"+
-        "\u0000\u0000\u737A\u0000\u0000\u0000\u737B\u7379"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4E36\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u737C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u737D\u6354\u0000\u0000"+
-        "\u737E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-    private final static String innerIndex6=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u7A46\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u7C4F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7954\u795F"+
-        "\u7960\u7975\u7A3E\u7A4E\u7A50\u7A7B\u7B23\u7B3A"+
-        "\u7B42\u7B43\u7B44\u7B46\u7B4A\u7B4D\u7B56\u7B61"+
-        "\u7B63\u7B64\u7B6D\u7B75\u7B77\u7B78\u7B7B\u7C39"+
-        "\u7C40\u7C50\u7C5C\u7C5D\u7C5F\u7C6C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u212A\u7C7E\u2174\u2170\u2173\u2175\u7C7D"+
-        "\u214A\u214B\u2176\u215C\u2124\u215D\u2125\u213F"+
-        "\u2330\u2331\u2332\u2333\u2334\u2335\u2336\u2337"+
-        "\u2338\u2339\u2127\u2128\u2163\u2161\u2164\u2129"+
-        "\u2177\u2341\u2342\u2343\u2344\u2345\u2346\u2347"+
-        "\u2348\u2349\u234A\u234B\u234C\u234D\u234E\u234F"+
-        "\u2350\u2351\u2352\u2353\u2354\u2355\u2356\u2357"+
-        "\u2358\u2359\u235A\u214E\u2140\u214F\u2130\u2132"+
-        "\u212E\u2361\u2362\u2363\u2364\u2365\u2366\u2367"+
-        "\u2368\u2369\u236A\u236B\u236C\u236D\u236E\u236F"+
-        "\u2370\u2371\u2372\u2373\u2374\u2375\u2376\u2377"+
-        "\u2378\u2379\u237A\u2150\u2143\u2151\u2141\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2171\u2172\u7C7B\u2131\u7C7C\u216F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-    protected final static short index1[] = {
-        1, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        11, 0, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 15,
-        16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
-        32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
-        48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
-        64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
-        80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, 0, 0, 0, 0, 98
-    };
-
-    protected final static String index2[] = {
-        innerIndex0,
-        innerIndex1,
-        innerIndex2,
-        innerIndex3,
-        innerIndex4,
-        innerIndex5,
-        innerIndex6
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_Solaris_Decoder.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_Solaris_Decoder.java
deleted file mode 100755
index 390d7e3..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_Solaris_Decoder.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-
-public class JIS_X_0208_Solaris_Decoder extends DoubleByteDecoder
-{
-
-    public JIS_X_0208_Solaris_Decoder(Charset cs) {
-        super(cs,
-              index1,
-              index2,
-              0x21,
-              0x7E);
-    }
-    private final static String innerIndex0=
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2460\u2461"+
-        "\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469"+
-        "\u246A\u246B\u246C\u246D\u246E\u246F\u2470\u2471"+
-        "\u2472\u2473\u2160\u2161\u2162\u2163\u2164\u2165"+
-        "\u2166\u2167\u2168\u2169\uFFFD\u3349\u3314\u3322"+
-        "\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D"+
-        "\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E"+
-        "\u338E\u338F\u33C4\u33A1\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u337B\u301D\u301F\u2116"+
-        "\u33CD\u2121\u32A4\u32A5\u32A6\u32A7\u32A8\u3231"+
-        "\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B"+
-        "\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235"+
-        "\u2229\u222A\uFFFD\uFFFD\u7E8A\u891C\u9348\u9288"+
-        "\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45"+
-        "\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92"+
-        "\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E"+
-        "\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164"+
-        "\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB"+
-        "\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E"+
-        "\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC"+
-        "\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953"+
-        "\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F"+
-        "\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53"+
-        "\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34"+
-        "\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5"+
-        "\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6"+
-        "\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B"+
-        "\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12"+
-        "\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929"+
-        "\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13"+
-        "\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73"+
-        "\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F"+
-        "\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8"+
-        "\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88"+
-        "\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F"+
-        "\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1"+
-        "\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3"+
-        "\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462"+
-        "\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B"+
-        "\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A"+
-        "\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1"+
-        "\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7"+
-        "\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362"+
-        "\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B"+
-        "\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37"+
-        "\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F"+
-        "\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25"+
-        "\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE"+
-        "\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A"+
-        "\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7"+
-        "\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5"+
-        "\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF"+
-        "\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8"+
-        "\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF"+
-        "\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857"+
-        "\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9"+
-        "\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70"+
-        "\u9D6B\uFA2D\u9E19\u9ED1\uFFFD\uFFFD\u2170\u2171"+
-        "\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179"+
-        "\u3052\u00A6\uFF07\uFF02\u2170\u2171\u2172\u2173"+
-        "\u2174\u2175\u2176\u2177\u2178\u2179\u2160\u2161"+
-        "\u2162\u2163\u2164\u2165\u2166\u2167\u2168\u2169"+
-        "\u3052\u00A6\uFF07\uFF02\u3231\u2116\u2121\u306E"+
-        "\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631"+
-        "\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00"+
-        "\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD"+
-        "\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094"+
-        "\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215"+
-        "\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372"+
-        "\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF"+
-        "\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10"+
-        "\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4"+
-        "\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6"+
-        "\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8"+
-        "\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D"+
-        "\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137"+
-        "\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE"+
-        "\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624"+
-        "\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2"+
-        "\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0"+
-        "\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2"+
-        "\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6"+
-        "\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F"+
-        "\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C"+
-        "\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007"+
-        "\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147"+
-        "\uFA15\u71C1\u71FE\u72B1\u72BE\u7324\uFA16\u7377"+
-        "\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426"+
-        "\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F"+
-        "\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF"+
-        "\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A"+
-        "\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E"+
-        "\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47"+
-        "\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448"+
-        "\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21"+
-        "\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF"+
-        "\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76"+
-        "\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115"+
-        "\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5"+
-        "\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259"+
-        "\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7"+
-        "\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321"+
-        "\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357"+
-        "\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592"+
-        "\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D"+
-        "\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927"+
-        "\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F"+
-        "\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD";
-
-    private static final short index1[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-    };
-
-    private final static String index2[] = {
-        innerIndex0
-    };
-
-    protected char convSingleByte(int b) {
-        return REPLACE_CHAR;
-    }
-
-
-    /**
-     * These accessors are temporarily supplied while sun.io
-     * converters co-exist with the sun.nio.cs.{ext} charset coders
-     * These facilitate sharing of conversion tables between the
-     * two co-existing implementations. When sun.io converters
-     * are made extinct these will be unncessary and should be removed
-     */
-
-    public static short[] getIndex1() {
-       return index1;
-    }
-
-    public static String[] getIndex2() {
-       return index2;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_Solaris_Encoder.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_Solaris_Encoder.java
deleted file mode 100755
index b25223b..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0208_Solaris_Encoder.java
+++ /dev/null
@@ -1,2728 +0,0 @@
-/*
- * Copyright (c) 2003, 2005, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-
-public class JIS_X_0208_Solaris_Encoder extends DoubleByteEncoder
-{
-    private static byte[] repl = { (byte)0x21, (byte)0x29 };
-
-    public JIS_X_0208_Solaris_Encoder(Charset cs) {
-        super(cs,
-              index1,
-              index2 ,
-              repl
-             );
-    }
-
-    protected int encodeSingle(char inputChar) {
-        return -1;
-    }
-
-    private final static String innerIndex0=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9336\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2D62\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D64\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2D35\u2D36\u2D37\u2D38\u2D39\u2D3A\u2D3B\u2D3C"+
-        "\u2D3D\u2D3E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9321\u9322\u9323\u9324\u9325\u9326\u9327\u9328"+
-        "\u9329\u932A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D74\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2D75\u0000\u0000\u0000\u0000\u2D78"+
-        "\u2D77\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D7B\u2D7C\u2D72\u0000\u0000\u2D73\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2D7A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2D70\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D71\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2D76\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2D79"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2D21\u2D22\u2D23\u2D24\u2D25\u2D26\u2D27\u2D28"+
-        "\u2D29\u2D2A\u2D2B\u2D2C\u2D2D\u2D2E\u2D2F\u2D30"+
-        "\u2D31\u2D32\u2D33\u2D34\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2D60\u0000\u2D61"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9335\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u933C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D6A\u2D6B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D6C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2D65\u2D66\u2D67\u2D68"+
-        "\u2D69\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u2D46\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2D4A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2D41\u0000\u0000\u0000"+
-        "\u2D44\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2D42\u2D4C\u0000\u0000\u2D4B\u2D45"+
-        "\u0000\u0000\u0000\u2D4D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2D47\u0000"+
-        "\u0000\u0000\u0000\u2D4F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2D40\u2D4E\u0000\u0000\u2D43\u0000\u0000"+
-        "\u0000\u2D48\u0000\u0000\u0000\u0000\u0000\u2D49"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u2D5F\u2D6F\u2D6E\u2D6D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2D53\u2D54"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2D50\u2D51\u2D52\u0000"+
-        "\u0000\u2D56\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2D55\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2D63\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9349\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u934A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u934B\u0000\u0000\u0000"+
-        "\u934C\u0000\u0000\u934D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u934E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u934F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9351\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9350\u0000\u9353\u0000\u0000\u0000"+
-        "\u0000\u0000\u9352\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9342\u0000\u0000\u0000\u9354\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9357"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9358\u0000"+
-        "\u0000\u0000\u9356\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9355\u0000\u935B\u0000\u0000\u0000\u9359\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u935A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u935C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u935E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u935D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u935F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u9360\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u9361\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9362\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u9363\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u9364\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u9365\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9366\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9558"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9367\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9368\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9369\u0000\u0000\u0000\u0000\u0000\u0000\u936A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u936B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u936C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u936D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u936E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u936F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9372\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u9371\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9373\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9374"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9375\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-    private final static String innerIndex1=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9376\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u9377\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u9378\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u937A"+
-        "\u9379\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u937D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u937E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9421\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9422\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9423\u0000\u9424\u0000\u0000"+
-        "\u0000\u0000\u0000\u9425\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u9426\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9427\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9428\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9429\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u942B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u942C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u942D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u942E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u942F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u9430\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9431"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9434\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9432\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u9435\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9436\u9437\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9438\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9439\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u943A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u9348\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u943B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u943C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u943D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u943E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u943F\u0000\u0000"+
-        "\u0000\u0000\u9440\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u9442\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9441\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9444\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9445\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9443\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9447\u0000\u0000\u0000\u0000\u0000\u0000\u9446"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9448\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9449\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u944A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u944B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u944C\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u944D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u944E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u944F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9450\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9453\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u9451\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9455\u0000"+
-        "\u0000\u0000\u0000\u0000\u9456\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9454\u0000"+
-        "\u0000\u9344\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9452\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9458"+
-        "\u0000\u9459\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u9457\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u945B\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u945C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u945D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u945E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u945F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9460\u9347\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9461\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9463\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9464\u0000\u0000\u0000\u0000"+
-        "\u9466\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9467\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u9468\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9465\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9345\u0000\u0000\u0000\u0000\u0000\u0000\u9469"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-    private final static String innerIndex2=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u946B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u946D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u946E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u946F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9471\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9470\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9472\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9473\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9474\u0000\u9475\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9476\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9477"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u9478\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u947A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9479\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u947B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u947C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u947E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u947D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9521\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u9522\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9523"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9525\u0000\u0000\u0000\u0000\u0000"+
-        "\u9524\u0000\u0000\u0000\u9526\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9529"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9527\u0000\u0000\u952A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u9528\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u952B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u952C\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u952D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u952E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u952F\u0000\u9530"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9531\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u9532\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9533\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9343\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u9535\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9534"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9537\u9538"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u9536\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u953A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u953B\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u953C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u953D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u953E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9540"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u9541\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9542\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9545\u0000\u0000\u0000\u9543\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9544\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u9547\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9546"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9548\u0000"+
-        "\u0000\u954A\u9549\u0000\u0000\u0000\u954B\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u954C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u954D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u954E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u954F\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u942A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9550"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9551\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9554\u9552\u0000\u9553\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9555\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9557\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9559\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u955A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u955B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u955C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-    private final static String innerIndex3=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u955D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u9561\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9563\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9564\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9565"+
-        "\u0000\u0000\u0000\u9567\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9568\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u956A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u956B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u956D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u956C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u956E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u956F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u933D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9570"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9571\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9573\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9574\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9575"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9576"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9577\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9578\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u9579\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u9341\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u957A\u0000\u0000\u0000\u0000"+
-        "\u0000\u957B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u957C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u957E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9623"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u9624\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u933E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9625\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9626"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9627\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9628"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9629\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u962A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u962C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u962D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u962E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u962F\u0000\u0000\u0000\u9630\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9631\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9632\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9634"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-    private final static String innerIndex4=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9637"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9638\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u963A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u963B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u963D"+
-        "\u0000\u0000\u963C\u0000\u0000\u0000\u963E\u0000"+
-        "\u0000\u0000\u0000\u0000\u9641\u9642\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u963F\u9640\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9643\u0000"+
-        "\u0000\u0000\u9645\u0000\u0000\u0000\u0000\u0000"+
-        "\u9644\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u964C\u9646\u0000\u9648\u0000\u0000\u0000"+
-        "\u9647\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9649\u0000"+
-        "\u0000\u964B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u964A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u964D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u964F"+
-        "\u9650\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9340\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u964E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9654\u0000\u0000\u9658\u0000\u9656\u0000\u9652"+
-        "\u0000\u9653\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9657\u0000\u0000\u0000\u0000\u0000\u0000\u9651"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9346\u0000\u965B\u0000\u0000\u0000\u965E"+
-        "\u0000\u0000\u9660\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u965F\u965D\u0000"+
-        "\u0000\u965A\u0000\u0000\u0000\u9659\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u933F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9662"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9661\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u9663\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9664\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9665\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9666\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9667\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u9668\u0000\u0000"+
-        "\u9669\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u966A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u966D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u966E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u966F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9670\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9671\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u9672\u0000\u9673"+
-        "\u0000\u9674\u0000\u0000\u0000\u9675\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9676"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u9677\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u967A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u967C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u967D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u967E\u0000\u0000\u9721\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9723\u0000\u0000\u9722\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9724"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9725\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9726\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u9727\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u9729\u0000\u0000\u0000\u0000"+
-        "\u9728\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u972B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u972C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u9462\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u966B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-    private final static String innerIndex5=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u9370\u937B"+
-        "\u937C\u9433\u945A\u946A\u946C\u9539\u953F\u9556"+
-        "\u955E\u955F\u9560\u9562\u9566\u9569\u9572\u957D"+
-        "\u9621\u9622\u962B\u9633\u9635\u9636\u9639\u9655"+
-        "\u965C\u966C\u9678\u9679\u967B\u972A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u9338\u0000\u0000\u0000\u0000\u9337"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-    private final static short index1[] = {
-        1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 2, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 9,
-        10, 11, 12, 13, 14, 15, 0, 16, 17, 18, 0, 19, 20, 21, 0, 22,
-        23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
-        39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 0, 51, 52, 53,
-        0, 0, 0, 54, 55, 56, 0, 0, 57, 58, 59, 60, 61, 62, 63, 0,
-        64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 80, 0, 0, 0, 0, 81
-    };
-
-    private final static String index2[] = {
-        innerIndex0,
-        innerIndex1,
-        innerIndex2,
-        innerIndex3,
-        innerIndex4,
-        innerIndex5
-    };
-
-    /**
-     * These accessors are temporarily supplied while sun.io
-     * converters co-exist with the sun.nio.cs.{ext} charset coders
-     * These facilitate sharing of conversion tables between the
-     * two co-existing implementations. When sun.io converters
-     * are made extinct these will be unncessary and should be removed
-     */
-    public static short[] getIndex1() {
-       return index1;
-    }
-
-    public static String[] getIndex2() {
-       return index2;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212.java
deleted file mode 100755
index a78f06a..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
-public class JIS_X_0212
-    extends Charset
-{
-
-    public JIS_X_0212() {
-        super("JIS_X0212-1990", ExtendedCharsets.aliasesFor("JIS_X0212-1990"));
-    }
-
-    public boolean contains(Charset cs) {
-        return (cs instanceof JIS_X_0212);
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new JIS_X_0212_Encoder(this);
-    }
-
-    private static class Decoder extends JIS_X_0212_Decoder {
-        protected char decodeSingle(int b) {
-            return DoubleByteDecoder.REPLACE_CHAR;
-        }
-
-        public Decoder(Charset cs) {
-            super(cs);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_Decoder.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_Decoder.java
deleted file mode 100755
index 7434ac7..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_Decoder.java
+++ /dev/null
@@ -1,911 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
-public class JIS_X_0212_Decoder extends DoubleByteDecoder
-{
-    public JIS_X_0212_Decoder(Charset cs) {
-        super(cs,
-              index1,
-              index2,
-              0x21,
-              0x7E);
-    }
-
-    /**
-     * These accessors are temporarily supplied while sun.io
-     * converters co-exist with the sun.nio.cs.{ext} charset coders
-     * These facilitate sharing of conversion tables between the
-     * two co-existing implementations. When sun.io converters
-     * are made extinct these will be unncessary and should be removed
-     */
-
-    public static short[] getIndex1() {
-        return index1;
-    }
-    public static String[] getIndex2() {
-        return index2;
-    }
-
-    private final static String innerIndex0=
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u02D8\u02C7\u00B8\u02D9"+
-        "\u02DD\u00AF\u02DB\u02DA\uFF5E\u0384\u0385\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00A1"+
-        "\u00A6\u00BF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\u00BA\u00AA\u00A9\u00AE\u2122\u00A4\u2116\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u0386\u0388\u0389\u038A"+
-        "\u03AA\uFFFD\u038C\uFFFD\u038E\u03AB\uFFFD\u038F"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u03AC\u03AD\u03AE\u03AF"+
-        "\u03CA\u0390\u03CC\u03C2\u03CD\u03CB\u03B0\u03CE"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\u0402\u0403\u0404\u0405\u0406"+
-        "\u0407\u0408\u0409\u040A\u040B\u040C\u040E\u040F"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\u0452\u0453\u0454\u0455\u0456"+
-        "\u0457\u0458\u0459\u045A\u045B\u045C\u045E\u045F"+
-        "\u00C6\u0110\uFFFD\u0126\uFFFD\u0132\uFFFD\u0141"+
-        "\u013F\uFFFD\u014A\u00D8\u0152\uFFFD\u0166\u00DE"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\u00E6\u0111\u00F0\u0127\u0131\u0133\u0138\u0142"+
-        "\u0140\u0149\u014B\u00F8\u0153\u00DF\u0167\u00FE"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00C1\u00C0"+
-        "\u00C4\u00C2\u0102\u01CD\u0100\u0104\u00C5\u00C3"+
-        "\u0106\u0108\u010C\u00C7\u010A\u010E\u00C9\u00C8"+
-        "\u00CB\u00CA\u011A\u0116\u0112\u0118\uFFFD\u011C"+
-        "\u011E\u0122\u0120\u0124\u00CD\u00CC\u00CF\u00CE"+
-        "\u01CF\u0130\u012A\u012E\u0128\u0134\u0136\u0139"+
-        "\u013D\u013B\u0143\u0147\u0145\u00D1\u00D3\u00D2"+
-        "\u00D6\u00D4\u01D1\u0150\u014C\u00D5\u0154\u0158"+
-        "\u0156\u015A\u015C\u0160\u015E\u0164\u0162\u00DA"+
-        "\u00D9\u00DC\u00DB\u016C\u01D3\u0170\u016A\u0172"+
-        "\u016E\u0168\u01D7\u01DB\u01D9\u01D5\u0174\u00DD"+
-        "\u0178\u0176\u0179\u017D\u017B\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u00E1\u00E0\u00E4\u00E2"+
-        "\u0103\u01CE\u0101\u0105\u00E5\u00E3\u0107\u0109"+
-        "\u010D\u00E7\u010B\u010F\u00E9\u00E8\u00EB\u00EA"+
-        "\u011B\u0117\u0113\u0119\u01F5\u011D\u011F\uFFFD"+
-        "\u0121\u0125\u00ED\u00EC\u00EF\u00EE\u01D0\uFFFD"+
-        "\u012B\u012F\u0129\u0135\u0137\u013A\u013E\u013C"+
-        "\u0144\u0148\u0146\u00F1\u00F3\u00F2\u00F6\u00F4"+
-        "\u01D2\u0151\u014D\u00F5\u0155\u0159\u0157\u015B"+
-        "\u015D\u0161\u015F\u0165\u0163\u00FA\u00F9\u00FC"+
-        "\u00FB\u016D\u01D4\u0171\u016B\u0173\u016F\u0169"+
-        "\u01D8\u01DC\u01DA\u01D6\u0175\u00FD\u00FF\u0177"+
-        "\u017A\u017E\u017C\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\u4E02\u4E04\u4E05\u4E0C\u4E12\u4E1F"+
-        "\u4E23\u4E24\u4E28\u4E2B\u4E2E\u4E2F\u4E30\u4E35"+
-        "\u4E40\u4E41\u4E44\u4E47\u4E51\u4E5A\u4E5C\u4E63"+
-        "\u4E68\u4E69\u4E74\u4E75\u4E79\u4E7F\u4E8D\u4E96"+
-        "\u4E97\u4E9D\u4EAF\u4EB9\u4EC3\u4ED0\u4EDA\u4EDB"+
-        "\u4EE0\u4EE1\u4EE2\u4EE8\u4EEF\u4EF1\u4EF3\u4EF5"+
-        "\u4EFD\u4EFE\u4EFF\u4F00\u4F02\u4F03\u4F08\u4F0B"+
-        "\u4F0C\u4F12\u4F15\u4F16\u4F17\u4F19\u4F2E\u4F31"+
-        "\u4F60\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F40"+
-        "\u4F42\u4F48\u4F49\u4F4B\u4F4C\u4F52\u4F54\u4F56"+
-        "\u4F58\u4F5F\u4F63\u4F6A\u4F6C\u4F6E\u4F71\u4F77"+
-        "\u4F78\u4F79\u4F7A\u4F7D\u4F7E\u4F81\u4F82\u4F84"+
-        "\u4F85\u4F89\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93"+
-        "\u4F94\u4F97\u4F99\u4F9A\u4F9E\u4F9F\u4FB2\u4FB7"+
-        "\u4FB9\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC5"+
-        "\u4FC6\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FCF\u4FD2"+
-        "\u4FDC\u4FE0\u4FE2\u4FF0\u4FF2\u4FFC\u4FFD\u4FFF"+
-        "\u5000\u5001\u5004\u5007\u500A\u500C\u500E\u5010"+
-        "\u5013\u5017\u5018\u501B\u501C\u501D\u501E\u5022"+
-        "\u5027\u502E\u5030\u5032\u5033\u5035\u5040\u5041"+
-        "\u5042\u5045\u5046\u504A\u504C\u504E\u5051\u5052"+
-        "\u5053\u5057\u5059\u505F\u5060\u5062\u5063\u5066"+
-        "\u5067\u506A\u506D\u5070\u5071\u503B\u5081\u5083"+
-        "\u5084\u5086\u508A\u508E\u508F\u5090\u5092\u5093"+
-        "\u5094\u5096\u509B\u509C\u509E\u509F\u50A0\u50A1"+
-        "\u50A2\u50AA\u50AF\u50B0\u50B9\u50BA\u50BD\u50C0"+
-        "\u50C3\u50C4\u50C7\u50CC\u50CE\u50D0\u50D3\u50D4"+
-        "\u50D8\u50DC\u50DD\u50DF\u50E2\u50E4\u50E6\u50E8"+
-        "\u50E9\u50EF\u50F1\u50F6\u50FA\u50FE\u5103\u5106"+
-        "\u5107\u5108\u510B\u510C\u510D\u510E\u50F2\u5110"+
-        "\u5117\u5119\u511B\u511C\u511D\u511E\u5123\u5127"+
-        "\u5128\u512C\u512D\u512F\u5131\u5133\u5134\u5135"+
-        "\u5138\u5139\u5142\u514A\u514F\u5153\u5155\u5157"+
-        "\u5158\u515F\u5164\u5166\u517E\u5183\u5184\u518B"+
-        "\u518E\u5198\u519D\u51A1\u51A3\u51AD\u51B8\u51BA"+
-        "\u51BC\u51BE\u51BF\u51C2\u51C8\u51CF\u51D1\u51D2"+
-        "\u51D3\u51D5\u51D8\u51DE\u51E2\u51E5\u51EE\u51F2"+
-        "\u51F3\u51F4\u51F7\u5201\u5202\u5205\u5212\u5213"+
-        "\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235"+
-        "\u523C\u5245\u5249\u5255\u5257\u5258\u525A\u525C"+
-        "\u525F\u5260\u5261\u5266\u526E\u5277\u5278\u5279"+
-        "\u5280\u5282\u5285\u528A\u528C\u5293\u5295\u5296"+
-        "\u5297\u5298\u529A\u529C\u52A4\u52A5\u52A6\u52A7"+
-        "\u52AF\u52B0\u52B6\u52B7\u52B8\u52BA\u52BB\u52BD"+
-        "\u52C0\u52C4\u52C6\u52C8\u52CC\u52CF\u52D1\u52D4"+
-        "\u52D6\u52DB\u52DC\u52E1\u52E5\u52E8\u52E9\u52EA"+
-        "\u52EC\u52F0\u52F1\u52F4\u52F6\u52F7\u5300\u5303"+
-        "\u530A\u530B\u530C\u5311\u5313\u5318\u531B\u531C"+
-        "\u531E\u531F\u5325\u5327\u5328\u5329\u532B\u532C"+
-        "\u532D\u5330\u5332\u5335\u533C\u533D\u533E\u5342"+
-        "\u534C\u534B\u5359\u535B\u5361\u5363\u5365\u536C"+
-        "\u536D\u5372\u5379\u537E\u5383\u5387\u5388\u538E"+
-        "\u5393\u5394\u5399\u539D\u53A1\u53A4\u53AA\u53AB"+
-        "\u53AF\u53B2\u53B4\u53B5\u53B7\u53B8\u53BA\u53BD"+
-        "\u53C0\u53C5\u53CF\u53D2\u53D3\u53D5\u53DA\u53DD"+
-        "\u53DE\u53E0\u53E6\u53E7\u53F5\u5402\u5413\u541A"+
-        "\u5421\u5427\u5428\u542A\u542F\u5431\u5434\u5435"+
-        "\u5443\u5444\u5447\u544D\u544F\u545E\u5462\u5464"+
-        "\u5466\u5467\u5469\u546B\u546D\u546E\u5474\u547F"+
-        "\u5481\u5483\u5485\u5488\u5489\u548D\u5491\u5495"+
-        "\u5496\u549C\u549F\u54A1\u54A6\u54A7\u54A9\u54AA"+
-        "\u54AD\u54AE\u54B1\u54B7\u54B9\u54BA\u54BB\u54BF"+
-        "\u54C6\u54CA\u54CD\u54CE\u54E0\u54EA\u54EC\u54EF"+
-        "\u54F6\u54FC\u54FE\u54FF\u5500\u5501\u5505\u5508"+
-        "\u5509\u550C\u550D\u550E\u5515\u552A\u552B\u5532"+
-        "\u5535\u5536\u553B\u553C\u553D\u5541\u5547\u5549"+
-        "\u554A\u554D\u5550\u5551\u5558\u555A\u555B\u555E"+
-        "\u5560\u5561\u5564\u5566\u557F\u5581\u5582\u5586"+
-        "\u5588\u558E\u558F\u5591\u5592\u5593\u5594\u5597"+
-        "\u55A3\u55A4\u55AD\u55B2\u55BF\u55C1\u55C3\u55C6"+
-        "\u55C9\u55CB\u55CC\u55CE\u55D1\u55D2\u55D3\u55D7"+
-        "\u55D8\u55DB\u55DE\u55E2\u55E9\u55F6\u55FF\u5605"+
-        "\u5608\u560A\u560D\u560E\u560F\u5610\u5611\u5612"+
-        "\u5619\u562C\u5630\u5633\u5635\u5637\u5639\u563B"+
-        "\u563C\u563D\u563F\u5640\u5641\u5643\u5644\u5646"+
-        "\u5649\u564B\u564D\u564F\u5654\u565E\u5660\u5661"+
-        "\u5662\u5663\u5666\u5669\u566D\u566F\u5671\u5672"+
-        "\u5675\u5684\u5685\u5688\u568B\u568C\u5695\u5699"+
-        "\u569A\u569D\u569E\u569F\u56A6\u56A7\u56A8\u56A9"+
-        "\u56AB\u56AC\u56AD\u56B1\u56B3\u56B7\u56BE\u56C5"+
-        "\u56C9\u56CA\u56CB\u56CF\u56D0\u56CC\u56CD\u56D9"+
-        "\u56DC\u56DD\u56DF\u56E1\u56E4\u56E5\u56E6\u56E7"+
-        "\u56E8\u56F1\u56EB\u56ED\u56F6\u56F7\u5701\u5702"+
-        "\u5707\u570A\u570C\u5711\u5715\u571A\u571B\u571D"+
-        "\u5720\u5722\u5723\u5724\u5725\u5729\u572A\u572C"+
-        "\u572E\u572F\u5733\u5734\u573D\u573E\u573F\u5745"+
-        "\u5746\u574C\u574D\u5752\u5762\u5765\u5767\u5768"+
-        "\u576B\u576D\u576E\u576F\u5770\u5771\u5773\u5774"+
-        "\u5775\u5777\u5779\u577A\u577B\u577C\u577E\u5781"+
-        "\u5783\u578C\u5794\u5797\u5799\u579A\u579C\u579D"+
-        "\u579E\u579F\u57A1\u5795\u57A7\u57A8\u57A9\u57AC"+
-        "\u57B8\u57BD\u57C7\u57C8\u57CC\u57CF\u57D5\u57DD"+
-        "\u57DE\u57E4\u57E6\u57E7\u57E9\u57ED\u57F0\u57F5"+
-        "\u57F6\u57F8\u57FD\u57FE\u57FF\u5803\u5804\u5808"+
-        "\u5809\u57E1\u580C\u580D\u581B\u581E\u581F\u5820"+
-        "\u5826\u5827\u582D\u5832\u5839\u583F\u5849\u584C"+
-        "\u584D\u584F\u5850\u5855\u585F\u5861\u5864\u5867"+
-        "\u5868\u5878\u587C\u587F\u5880\u5881\u5887\u5888"+
-        "\u5889\u588A\u588C\u588D\u588F\u5890\u5894\u5896"+
-        "\u589D\u58A0\u58A1\u58A2\u58A6\u58A9\u58B1\u58B2"+
-        "\u58C4\u58BC\u58C2\u58C8\u58CD\u58CE\u58D0\u58D2"+
-        "\u58D4\u58D6\u58DA\u58DD\u58E1\u58E2\u58E9\u58F3"+
-        "\u5905\u5906\u590B\u590C\u5912\u5913\u5914\u8641"+
-        "\u591D\u5921\u5923\u5924\u5928\u592F\u5930\u5933"+
-        "\u5935\u5936\u593F\u5943\u5946\u5952\u5953\u5959"+
-        "\u595B\u595D\u595E\u595F\u5961\u5963\u596B\u596D";
-
-    private final static String innerIndex1=
-        "\u596F\u5972\u5975\u5976\u5979\u597B\u597C\u598B"+
-        "\u598C\u598E\u5992\u5995\u5997\u599F\u59A4\u59A7"+
-        "\u59AD\u59AE\u59AF\u59B0\u59B3\u59B7\u59BA\u59BC"+
-        "\u59C1\u59C3\u59C4\u59C8\u59CA\u59CD\u59D2\u59DD"+
-        "\u59DE\u59DF\u59E3\u59E4\u59E7\u59EE\u59EF\u59F1"+
-        "\u59F2\u59F4\u59F7\u5A00\u5A04\u5A0C\u5A0D\u5A0E"+
-        "\u5A12\u5A13\u5A1E\u5A23\u5A24\u5A27\u5A28\u5A2A"+
-        "\u5A2D\u5A30\u5A44\u5A45\u5A47\u5A48\u5A4C\u5A50"+
-        "\u5A55\u5A5E\u5A63\u5A65\u5A67\u5A6D\u5A77\u5A7A"+
-        "\u5A7B\u5A7E\u5A8B\u5A90\u5A93\u5A96\u5A99\u5A9C"+
-        "\u5A9E\u5A9F\u5AA0\u5AA2\u5AA7\u5AAC\u5AB1\u5AB2"+
-        "\u5AB3\u5AB5\u5AB8\u5ABA\u5ABB\u5ABF\u5AC4\u5AC6"+
-        "\u5AC8\u5ACF\u5ADA\u5ADC\u5AE0\u5AE5\u5AEA\u5AEE"+
-        "\u5AF5\u5AF6\u5AFD\u5B00\u5B01\u5B08\u5B17\u5B34"+
-        "\u5B19\u5B1B\u5B1D\u5B21\u5B25\u5B2D\u5B38\u5B41"+
-        "\u5B4B\u5B4C\u5B52\u5B56\u5B5E\u5B68\u5B6E\u5B6F"+
-        "\u5B7C\u5B7D\u5B7E\u5B7F\u5B81\u5B84\u5B86\u5B8A"+
-        "\u5B8E\u5B90\u5B91\u5B93\u5B94\u5B96\u5BA8\u5BA9"+
-        "\u5BAC\u5BAD\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBC"+
-        "\u5BC0\u5BC1\u5BCD\u5BCF\u5BD6\u5BD7\u5BD8\u5BD9"+
-        "\u5BDA\u5BE0\u5BEF\u5BF1\u5BF4\u5BFD\u5C0C\u5C17"+
-        "\u5C1E\u5C1F\u5C23\u5C26\u5C29\u5C2B\u5C2C\u5C2E"+
-        "\u5C30\u5C32\u5C35\u5C36\u5C59\u5C5A\u5C5C\u5C62"+
-        "\u5C63\u5C67\u5C68\u5C69\u5C6D\u5C70\u5C74\u5C75"+
-        "\u5C7A\u5C7B\u5C7C\u5C7D\u5C87\u5C88\u5C8A\u5C8F"+
-        "\u5C92\u5C9D\u5C9F\u5CA0\u5CA2\u5CA3\u5CA6\u5CAA"+
-        "\u5CB2\u5CB4\u5CB5\u5CBA\u5CC9\u5CCB\u5CD2\u5CDD"+
-        "\u5CD7\u5CEE\u5CF1\u5CF2\u5CF4\u5D01\u5D06\u5D0D"+
-        "\u5D12\u5D2B\u5D23\u5D24\u5D26\u5D27\u5D31\u5D34"+
-        "\u5D39\u5D3D\u5D3F\u5D42\u5D43\u5D46\u5D48\u5D55"+
-        "\u5D51\u5D59\u5D4A\u5D5F\u5D60\u5D61\u5D62\u5D64"+
-        "\u5D6A\u5D6D\u5D70\u5D79\u5D7A\u5D7E\u5D7F\u5D81"+
-        "\u5D83\u5D88\u5D8A\u5D92\u5D93\u5D94\u5D95\u5D99"+
-        "\u5D9B\u5D9F\u5DA0\u5DA7\u5DAB\u5DB0\u5DB4\u5DB8"+
-        "\u5DB9\u5DC3\u5DC7\u5DCB\u5DD0\u5DCE\u5DD8\u5DD9"+
-        "\u5DE0\u5DE4\u5DE9\u5DF8\u5DF9\u5E00\u5E07\u5E0D"+
-        "\u5E12\u5E14\u5E15\u5E18\u5E1F\u5E20\u5E2E\u5E28"+
-        "\u5E32\u5E35\u5E3E\u5E4B\u5E50\u5E49\u5E51\u5E56"+
-        "\u5E58\u5E5B\u5E5C\u5E5E\u5E68\u5E6A\u5E6B\u5E6C"+
-        "\u5E6D\u5E6E\u5E70\u5E80\u5E8B\u5E8E\u5EA2\u5EA4"+
-        "\u5EA5\u5EA8\u5EAA\u5EAC\u5EB1\u5EB3\u5EBD\u5EBE"+
-        "\u5EBF\u5EC6\u5ECC\u5ECB\u5ECE\u5ED1\u5ED2\u5ED4"+
-        "\u5ED5\u5EDC\u5EDE\u5EE5\u5EEB\u5F02\u5F06\u5F07"+
-        "\u5F08\u5F0E\u5F19\u5F1C\u5F1D\u5F21\u5F22\u5F23"+
-        "\u5F24\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F34\u5F36"+
-        "\u5F3B\u5F3D\u5F3F\u5F40\u5F44\u5F45\u5F47\u5F4D"+
-        "\u5F50\u5F54\u5F58\u5F5B\u5F60\u5F63\u5F64\u5F67"+
-        "\u5F6F\u5F72\u5F74\u5F75\u5F78\u5F7A\u5F7D\u5F7E"+
-        "\u5F89\u5F8D\u5F8F\u5F96\u5F9C\u5F9D\u5FA2\u5FA7"+
-        "\u5FAB\u5FA4\u5FAC\u5FAF\u5FB0\u5FB1\u5FB8\u5FC4"+
-        "\u5FC7\u5FC8\u5FC9\u5FCB\u5FD0\u5FD1\u5FD2\u5FD3"+
-        "\u5FD4\u5FDE\u5FE1\u5FE2\u5FE8\u5FE9\u5FEA\u5FEC"+
-        "\u5FED\u5FEE\u5FEF\u5FF2\u5FF3\u5FF6\u5FFA\u5FFC"+
-        "\u6007\u600A\u600D\u6013\u6014\u6017\u6018\u601A"+
-        "\u601F\u6024\u602D\u6033\u6035\u6040\u6047\u6048"+
-        "\u6049\u604C\u6051\u6054\u6056\u6057\u605D\u6061"+
-        "\u6067\u6071\u607E\u607F\u6082\u6086\u6088\u608A"+
-        "\u608E\u6091\u6093\u6095\u6098\u609D\u609E\u60A2"+
-        "\u60A4\u60A5\u60A8\u60B0\u60B1\u60B7\u60BB\u60BE"+
-        "\u60C2\u60C4\u60C8\u60C9\u60CA\u60CB\u60CE\u60CF"+
-        "\u60D4\u60D5\u60D9\u60DB\u60DD\u60DE\u60E2\u60E5"+
-        "\u60F2\u60F5\u60F8\u60FC\u60FD\u6102\u6107\u610A"+
-        "\u610C\u6110\u6111\u6112\u6113\u6114\u6116\u6117"+
-        "\u6119\u611C\u611E\u6122\u612A\u612B\u6130\u6131"+
-        "\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149"+
-        "\u615E\u6160\u616C\u6172\u6178\u617B\u617C\u617F"+
-        "\u6180\u6181\u6183\u6184\u618B\u618D\u6192\u6193"+
-        "\u6197\u6198\u619C\u619D\u619F\u61A0\u61A5\u61A8"+
-        "\u61AA\u61AD\u61B8\u61B9\u61BC\u61C0\u61C1\u61C2"+
-        "\u61CE\u61CF\u61D5\u61DC\u61DD\u61DE\u61DF\u61E1"+
-        "\u61E2\u61E7\u61E9\u61E5\u61EC\u61ED\u61EF\u6201"+
-        "\u6203\u6204\u6207\u6213\u6215\u621C\u6220\u6222"+
-        "\u6223\u6227\u6229\u622B\u6239\u623D\u6242\u6243"+
-        "\u6244\u6246\u624C\u6250\u6251\u6252\u6254\u6256"+
-        "\u625A\u625C\u6264\u626D\u626F\u6273\u627A\u627D"+
-        "\u628D\u628E\u628F\u6290\u62A6\u62A8\u62B3\u62B6"+
-        "\u62B7\u62BA\u62BE\u62BF\u62C4\u62CE\u62D5\u62D6"+
-        "\u62DA\u62EA\u62F2\u62F4\u62FC\u62FD\u6303\u6304"+
-        "\u630A\u630B\u630D\u6310\u6313\u6316\u6318\u6329"+
-        "\u632A\u632D\u6335\u6336\u6339\u633C\u6341\u6342"+
-        "\u6343\u6344\u6346\u634A\u634B\u634E\u6352\u6353"+
-        "\u6354\u6358\u635B\u6365\u6366\u636C\u636D\u6371"+
-        "\u6374\u6375\u6378\u637C\u637D\u637F\u6382\u6384"+
-        "\u6387\u638A\u6390\u6394\u6395\u6399\u639A\u639E"+
-        "\u63A4\u63A6\u63AD\u63AE\u63AF\u63BD\u63C1\u63C5"+
-        "\u63C8\u63CE\u63D1\u63D3\u63D4\u63D5\u63DC\u63E0"+
-        "\u63E5\u63EA\u63EC\u63F2\u63F3\u63F5\u63F8\u63F9"+
-        "\u6409\u640A\u6410\u6412\u6414\u6418\u641E\u6420"+
-        "\u6422\u6424\u6425\u6429\u642A\u642F\u6430\u6435"+
-        "\u643D\u643F\u644B\u644F\u6451\u6452\u6453\u6454"+
-        "\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6463"+
-        "\u646D\u6473\u6474\u647B\u647D\u6485\u6487\u648F"+
-        "\u6490\u6491\u6498\u6499\u649B\u649D\u649F\u64A1"+
-        "\u64A3\u64A6\u64A8\u64AC\u64B3\u64BD\u64BE\u64BF"+
-        "\u64C4\u64C9\u64CA\u64CB\u64CC\u64CE\u64D0\u64D1"+
-        "\u64D5\u64D7\u64E4\u64E5\u64E9\u64EA\u64ED\u64F0"+
-        "\u64F5\u64F7\u64FB\u64FF\u6501\u6504\u6508\u6509"+
-        "\u650A\u650F\u6513\u6514\u6516\u6519\u651B\u651E"+
-        "\u651F\u6522\u6526\u6529\u652E\u6531\u653A\u653C"+
-        "\u653D\u6543\u6547\u6549\u6550\u6552\u6554\u655F"+
-        "\u6560\u6567\u656B\u657A\u657D\u6581\u6585\u658A"+
-        "\u6592\u6595\u6598\u659D\u65A0\u65A3\u65A6\u65AE"+
-        "\u65B2\u65B3\u65B4\u65BF\u65C2\u65C8\u65C9\u65CE"+
-        "\u65D0\u65D4\u65D6\u65D8\u65DF\u65F0\u65F2\u65F4"+
-        "\u65F5\u65F9\u65FE\u65FF\u6600\u6604\u6608\u6609"+
-        "\u660D\u6611\u6612\u6615\u6616\u661D\u661E\u6621"+
-        "\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C"+
-        "\u662E\u6630\u6631\u6633\u6639\u6637\u6640\u6645"+
-        "\u6646\u664A\u664C\u6651\u664E\u6657\u6658\u6659"+
-        "\u665B\u665C\u6660\u6661\u66FB\u666A\u666B\u666C"+
-        "\u667E\u6673\u6675\u667F\u6677\u6678\u6679\u667B"+
-        "\u6680\u667C\u668B\u668C\u668D\u6690\u6692\u6699"+
-        "\u669A\u669B\u669C\u669F\u66A0\u66A4\u66AD\u66B1"+
-        "\u66B2\u66B5\u66BB\u66BF\u66C0\u66C2\u66C3\u66C8"+
-        "\u66CC\u66CE\u66CF\u66D4\u66DB\u66DF\u66E8\u66EB"+
-        "\u66EC\u66EE\u66FA\u6705\u6707\u670E\u6713\u6719"+
-        "\u671C\u6720\u6722\u6733\u673E\u6745\u6747\u6748"+
-        "\u674C\u6754\u6755\u675D\u6766\u676C\u676E\u6774"+
-        "\u6776\u677B\u6781\u6784\u678E\u678F\u6791\u6793"+
-        "\u6796\u6798\u6799\u679B\u67B0\u67B1\u67B2\u67B5"+
-        "\u67BB\u67BC\u67BD\u67F9\u67C0\u67C2\u67C3\u67C5"+
-        "\u67C8\u67C9\u67D2\u67D7\u67D9\u67DC\u67E1\u67E6"+
-        "\u67F0\u67F2\u67F6\u67F7\u6852\u6814\u6819\u681D"+
-        "\u681F\u6828\u6827\u682C\u682D\u682F\u6830\u6831"+
-        "\u6833\u683B\u683F\u6844\u6845\u684A\u684C\u6855"+
-        "\u6857\u6858\u685B\u686B\u686E\u686F\u6870\u6871"+
-        "\u6872\u6875\u6879\u687A\u687B\u687C\u6882\u6884"+
-        "\u6886\u6888\u6896\u6898\u689A\u689C\u68A1\u68A3"+
-        "\u68A5\u68A9\u68AA\u68AE\u68B2\u68BB\u68C5\u68C8"+
-        "\u68CC\u68CF\u68D0\u68D1\u68D3\u68D6\u68D9\u68DC"+
-        "\u68DD\u68E5\u68E8\u68EA\u68EB\u68EC\u68ED\u68F0"+
-        "\u68F1\u68F5\u68F6\u68FB\u68FC\u68FD\u6906\u6909"+
-        "\u690A\u6910\u6911\u6913\u6916\u6917\u6931\u6933"+
-        "\u6935\u6938\u693B\u6942\u6945\u6949\u694E\u6957"+
-        "\u695B\u6963\u6964\u6965\u6966\u6968\u6969\u696C"+
-        "\u6970\u6971\u6972\u697A\u697B\u697F\u6980\u698D"+
-        "\u6992\u6996\u6998\u69A1\u69A5\u69A6\u69A8\u69AB"+
-        "\u69AD\u69AF\u69B7\u69B8\u69BA\u69BC\u69C5\u69C8"+
-        "\u69D1\u69D6\u69D7\u69E2\u69E5\u69EE\u69EF\u69F1"+
-        "\u69F3\u69F5\u69FE\u6A00\u6A01\u6A03\u6A0F\u6A11"+
-        "\u6A15\u6A1A\u6A1D\u6A20\u6A24\u6A28\u6A30\u6A32"+
-        "\u6A34\u6A37\u6A3B\u6A3E\u6A3F\u6A45\u6A46\u6A49"+
-        "\u6A4A\u6A4E\u6A50\u6A51\u6A52\u6A55\u6A56\u6A5B"+
-        "\u6A64\u6A67\u6A6A\u6A71\u6A73\u6A7E\u6A81\u6A83"+
-        "\u6A86\u6A87\u6A89\u6A8B\u6A91\u6A9B\u6A9D\u6A9E"+
-        "\u6A9F\u6AA5\u6AAB\u6AAF\u6AB0\u6AB1\u6AB4\u6ABD"+
-        "\u6ABE\u6ABF\u6AC6\u6AC9\u6AC8\u6ACC\u6AD0\u6AD4"+
-        "\u6AD5\u6AD6\u6ADC\u6ADD\u6AE4\u6AE7\u6AEC\u6AF0"+
-        "\u6AF1\u6AF2\u6AFC\u6AFD\u6B02\u6B03\u6B06\u6B07"+
-        "\u6B09\u6B0F\u6B10\u6B11\u6B17\u6B1B\u6B1E\u6B24"+
-        "\u6B28\u6B2B\u6B2C\u6B2F\u6B35\u6B36\u6B3B\u6B3F"+
-        "\u6B46\u6B4A\u6B4D\u6B52\u6B56\u6B58\u6B5D\u6B60"+
-        "\u6B67\u6B6B\u6B6E\u6B70\u6B75\u6B7D\u6B7E\u6B82"+
-        "\u6B85\u6B97\u6B9B\u6B9F\u6BA0\u6BA2\u6BA3\u6BA8"+
-        "\u6BA9\u6BAC\u6BAD\u6BAE\u6BB0\u6BB8\u6BB9\u6BBD"+
-        "\u6BBE\u6BC3\u6BC4\u6BC9\u6BCC\u6BD6\u6BDA\u6BE1"+
-        "\u6BE3\u6BE6\u6BE7\u6BEE\u6BF1\u6BF7\u6BF9\u6BFF"+
-        "\u6C02\u6C04\u6C05\u6C09\u6C0D\u6C0E\u6C10\u6C12"+
-        "\u6C19\u6C1F\u6C26\u6C27\u6C28\u6C2C\u6C2E\u6C33"+
-        "\u6C35\u6C36\u6C3A\u6C3B\u6C3F\u6C4A\u6C4B\u6C4D"+
-        "\u6C4F\u6C52\u6C54\u6C59\u6C5B\u6C5C\u6C6B\u6C6D"+
-        "\u6C6F\u6C74\u6C76\u6C78\u6C79\u6C7B\u6C85\u6C86"+
-        "\u6C87\u6C89\u6C94\u6C95\u6C97\u6C98\u6C9C\u6C9F"+
-        "\u6CB0\u6CB2\u6CB4\u6CC2\u6CC6\u6CCD\u6CCF\u6CD0"+
-        "\u6CD1\u6CD2\u6CD4\u6CD6\u6CDA\u6CDC\u6CE0\u6CE7"+
-        "\u6CE9\u6CEB\u6CEC\u6CEE\u6CF2\u6CF4\u6D04\u6D07"+
-        "\u6D0A\u6D0E\u6D0F\u6D11\u6D13\u6D1A\u6D26\u6D27"+
-        "\u6D28\u6C67\u6D2E\u6D2F\u6D31\u6D39\u6D3C\u6D3F"+
-        "\u6D57\u6D5E\u6D5F\u6D61\u6D65\u6D67\u6D6F\u6D70"+
-        "\u6D7C\u6D82\u6D87\u6D91\u6D92\u6D94\u6D96\u6D97"+
-        "\u6D98\u6DAA\u6DAC\u6DB4\u6DB7\u6DB9\u6DBD\u6DBF"+
-        "\u6DC4\u6DC8\u6DCA\u6DCE\u6DCF\u6DD6\u6DDB\u6DDD"+
-        "\u6DDF\u6DE0\u6DE2\u6DE5\u6DE9\u6DEF\u6DF0\u6DF4"+
-        "\u6DF6\u6DFC\u6E00\u6E04\u6E1E\u6E22\u6E27\u6E32"+
-        "\u6E36\u6E39\u6E3B\u6E3C\u6E44\u6E45\u6E48\u6E49"+
-        "\u6E4B\u6E4F\u6E51\u6E52\u6E53\u6E54\u6E57\u6E5C"+
-        "\u6E5D\u6E5E\u6E62\u6E63\u6E68\u6E73\u6E7B\u6E7D"+
-        "\u6E8D\u6E93\u6E99\u6EA0\u6EA7\u6EAD\u6EAE\u6EB1"+
-        "\u6EB3\u6EBB\u6EBF\u6EC0\u6EC1\u6EC3\u6EC7\u6EC8"+
-        "\u6ECA\u6ECD\u6ECE\u6ECF\u6EEB\u6EED\u6EEE\u6EF9"+
-        "\u6EFB\u6EFD\u6F04\u6F08\u6F0A\u6F0C\u6F0D\u6F16"+
-        "\u6F18\u6F1A\u6F1B\u6F26\u6F29\u6F2A\u6F2F\u6F30"+
-        "\u6F33\u6F36\u6F3B\u6F3C\u6F2D\u6F4F\u6F51\u6F52"+
-        "\u6F53\u6F57\u6F59\u6F5A\u6F5D\u6F5E\u6F61\u6F62"+
-        "\u6F68\u6F6C\u6F7D\u6F7E\u6F83\u6F87\u6F88\u6F8B"+
-        "\u6F8C\u6F8D\u6F90\u6F92\u6F93\u6F94\u6F96\u6F9A"+
-        "\u6F9F\u6FA0\u6FA5\u6FA6\u6FA7\u6FA8\u6FAE\u6FAF"+
-        "\u6FB0\u6FB5\u6FB6\u6FBC\u6FC5\u6FC7\u6FC8\u6FCA";
-
-    private final static String innerIndex2=
-        "\u6FDA\u6FDE\u6FE8\u6FE9\u6FF0\u6FF5\u6FF9\u6FFC"+
-        "\u6FFD\u7000\u7005\u7006\u7007\u700D\u7017\u7020"+
-        "\u7023\u702F\u7034\u7037\u7039\u703C\u7043\u7044"+
-        "\u7048\u7049\u704A\u704B\u7054\u7055\u705D\u705E"+
-        "\u704E\u7064\u7065\u706C\u706E\u7075\u7076\u707E"+
-        "\u7081\u7085\u7086\u7094\u7095\u7096\u7097\u7098"+
-        "\u709B\u70A4\u70AB\u70B0\u70B1\u70B4\u70B7\u70CA"+
-        "\u70D1\u70D3\u70D4\u70D5\u70D6\u70D8\u70DC\u70E4"+
-        "\u70FA\u7103\u7104\u7105\u7106\u7107\u710B\u710C"+
-        "\u710F\u711E\u7120\u712B\u712D\u712F\u7130\u7131"+
-        "\u7138\u7141\u7145\u7146\u7147\u714A\u714B\u7150"+
-        "\u7152\u7157\u715A\u715C\u715E\u7160\u7168\u7179"+
-        "\u7180\u7185\u7187\u718C\u7192\u719A\u719B\u71A0"+
-        "\u71A2\u71AF\u71B0\u71B2\u71B3\u71BA\u71BF\u71C0"+
-        "\u71C1\u71C4\u71CB\u71CC\u71D3\u71D6\u71D9\u71DA"+
-        "\u71DC\u71F8\u71FE\u7200\u7207\u7208\u7209\u7213"+
-        "\u7217\u721A\u721D\u721F\u7224\u722B\u722F\u7234"+
-        "\u7238\u7239\u7241\u7242\u7243\u7245\u724E\u724F"+
-        "\u7250\u7253\u7255\u7256\u725A\u725C\u725E\u7260"+
-        "\u7263\u7268\u726B\u726E\u726F\u7271\u7277\u7278"+
-        "\u727B\u727C\u727F\u7284\u7289\u728D\u728E\u7293"+
-        "\u729B\u72A8\u72AD\u72AE\u72B1\u72B4\u72BE\u72C1"+
-        "\u72C7\u72C9\u72CC\u72D5\u72D6\u72D8\u72DF\u72E5"+
-        "\u72F3\u72F4\u72FA\u72FB\u72FE\u7302\u7304\u7305"+
-        "\u7307\u730B\u730D\u7312\u7313\u7318\u7319\u731E"+
-        "\u7322\u7324\u7327\u7328\u732C\u7331\u7332\u7335"+
-        "\u733A\u733B\u733D\u7343\u734D\u7350\u7352\u7356"+
-        "\u7358\u735D\u735E\u735F\u7360\u7366\u7367\u7369"+
-        "\u736B\u736C\u736E\u736F\u7371\u7377\u7379\u737C"+
-        "\u7380\u7381\u7383\u7385\u7386\u738E\u7390\u7393"+
-        "\u7395\u7397\u7398\u739C\u739E\u739F\u73A0\u73A2"+
-        "\u73A5\u73A6\u73AA\u73AB\u73AD\u73B5\u73B7\u73B9"+
-        "\u73BC\u73BD\u73BF\u73C5\u73C6\u73C9\u73CB\u73CC"+
-        "\u73CF\u73D2\u73D3\u73D6\u73D9\u73DD\u73E1\u73E3"+
-        "\u73E6\u73E7\u73E9\u73F4\u73F5\u73F7\u73F9\u73FA"+
-        "\u73FB\u73FD\u73FF\u7400\u7401\u7404\u7407\u740A"+
-        "\u7411\u741A\u741B\u7424\u7426\u7428\u7429\u742A"+
-        "\u742B\u742C\u742D\u742E\u742F\u7430\u7431\u7439"+
-        "\u7440\u7443\u7444\u7446\u7447\u744B\u744D\u7451"+
-        "\u7452\u7457\u745D\u7462\u7466\u7467\u7468\u746B"+
-        "\u746D\u746E\u7471\u7472\u7480\u7481\u7485\u7486"+
-        "\u7487\u7489\u748F\u7490\u7491\u7492\u7498\u7499"+
-        "\u749A\u749C\u749F\u74A0\u74A1\u74A3\u74A6\u74A8"+
-        "\u74A9\u74AA\u74AB\u74AE\u74AF\u74B1\u74B2\u74B5"+
-        "\u74B9\u74BB\u74BF\u74C8\u74C9\u74CC\u74D0\u74D3"+
-        "\u74D8\u74DA\u74DB\u74DE\u74DF\u74E4\u74E8\u74EA"+
-        "\u74EB\u74EF\u74F4\u74FA\u74FB\u74FC\u74FF\u7506"+
-        "\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529"+
-        "\u752A\u752F\u7536\u7539\u753D\u753E\u753F\u7540"+
-        "\u7543\u7547\u7548\u754E\u7550\u7552\u7557\u755E"+
-        "\u755F\u7561\u756F\u7571\u7579\u757A\u757B\u757C"+
-        "\u757D\u757E\u7581\u7585\u7590\u7592\u7593\u7595"+
-        "\u7599\u759C\u75A2\u75A4\u75B4\u75BA\u75BF\u75C0"+
-        "\u75C1\u75C4\u75C6\u75CC\u75CE\u75CF\u75D7\u75DC"+
-        "\u75DF\u75E0\u75E1\u75E4\u75E7\u75EC\u75EE\u75EF"+
-        "\u75F1\u75F9\u7600\u7602\u7603\u7604\u7607\u7608"+
-        "\u760A\u760C\u760F\u7612\u7613\u7615\u7616\u7619"+
-        "\u761B\u761C\u761D\u761E\u7623\u7625\u7626\u7629"+
-        "\u762D\u7632\u7633\u7635\u7638\u7639\u763A\u763C"+
-        "\u764A\u7640\u7641\u7643\u7644\u7645\u7649\u764B"+
-        "\u7655\u7659\u765F\u7664\u7665\u766D\u766E\u766F"+
-        "\u7671\u7674\u7681\u7685\u768C\u768D\u7695\u769B"+
-        "\u769C\u769D\u769F\u76A0\u76A2\u76A3\u76A4\u76A5"+
-        "\u76A6\u76A7\u76A8\u76AA\u76AD\u76BD\u76C1\u76C5"+
-        "\u76C9\u76CB\u76CC\u76CE\u76D4\u76D9\u76E0\u76E6"+
-        "\u76E8\u76EC\u76F0\u76F1\u76F6\u76F9\u76FC\u7700"+
-        "\u7706\u770A\u770E\u7712\u7714\u7715\u7717\u7719"+
-        "\u771A\u771C\u7722\u7728\u772D\u772E\u772F\u7734"+
-        "\u7735\u7736\u7739\u773D\u773E\u7742\u7745\u7746"+
-        "\u774A\u774D\u774E\u774F\u7752\u7756\u7757\u775C"+
-        "\u775E\u775F\u7760\u7762\u7764\u7767\u776A\u776C"+
-        "\u7770\u7772\u7773\u7774\u777A\u777D\u7780\u7784"+
-        "\u778C\u778D\u7794\u7795\u7796\u779A\u779F\u77A2"+
-        "\u77A7\u77AA\u77AE\u77AF\u77B1\u77B5\u77BE\u77C3"+
-        "\u77C9\u77D1\u77D2\u77D5\u77D9\u77DE\u77DF\u77E0"+
-        "\u77E4\u77E6\u77EA\u77EC\u77F0\u77F1\u77F4\u77F8"+
-        "\u77FB\u7805\u7806\u7809\u780D\u780E\u7811\u781D"+
-        "\u7821\u7822\u7823\u782D\u782E\u7830\u7835\u7837"+
-        "\u7843\u7844\u7847\u7848\u784C\u784E\u7852\u785C"+
-        "\u785E\u7860\u7861\u7863\u7864\u7868\u786A\u786E"+
-        "\u787A\u787E\u788A\u788F\u7894\u7898\u78A1\u789D"+
-        "\u789E\u789F\u78A4\u78A8\u78AC\u78AD\u78B0\u78B1"+
-        "\u78B2\u78B3\u78BB\u78BD\u78BF\u78C7\u78C8\u78C9"+
-        "\u78CC\u78CE\u78D2\u78D3\u78D5\u78D6\u78E4\u78DB"+
-        "\u78DF\u78E0\u78E1\u78E6\u78EA\u78F2\u78F3\u7900"+
-        "\u78F6\u78F7\u78FA\u78FB\u78FF\u7906\u790C\u7910"+
-        "\u791A\u791C\u791E\u791F\u7920\u7925\u7927\u7929"+
-        "\u792D\u7931\u7934\u7935\u793B\u793D\u793F\u7944"+
-        "\u7945\u7946\u794A\u794B\u794F\u7951\u7954\u7958"+
-        "\u795B\u795C\u7967\u7969\u796B\u7972\u7979\u797B"+
-        "\u797C\u797E\u798B\u798C\u7991\u7993\u7994\u7995"+
-        "\u7996\u7998\u799B\u799C\u79A1\u79A8\u79A9\u79AB"+
-        "\u79AF\u79B1\u79B4\u79B8\u79BB\u79C2\u79C4\u79C7"+
-        "\u79C8\u79CA\u79CF\u79D4\u79D6\u79DA\u79DD\u79DE"+
-        "\u79E0\u79E2\u79E5\u79EA\u79EB\u79ED\u79F1\u79F8"+
-        "\u79FC\u7A02\u7A03\u7A07\u7A09\u7A0A\u7A0C\u7A11"+
-        "\u7A15\u7A1B\u7A1E\u7A21\u7A27\u7A2B\u7A2D\u7A2F"+
-        "\u7A30\u7A34\u7A35\u7A38\u7A39\u7A3A\u7A44\u7A45"+
-        "\u7A47\u7A48\u7A4C\u7A55\u7A56\u7A59\u7A5C\u7A5D"+
-        "\u7A5F\u7A60\u7A65\u7A67\u7A6A\u7A6D\u7A75\u7A78"+
-        "\u7A7E\u7A80\u7A82\u7A85\u7A86\u7A8A\u7A8B\u7A90"+
-        "\u7A91\u7A94\u7A9E\u7AA0\u7AA3\u7AAC\u7AB3\u7AB5"+
-        "\u7AB9\u7ABB\u7ABC\u7AC6\u7AC9\u7ACC\u7ACE\u7AD1"+
-        "\u7ADB\u7AE8\u7AE9\u7AEB\u7AEC\u7AF1\u7AF4\u7AFB"+
-        "\u7AFD\u7AFE\u7B07\u7B14\u7B1F\u7B23\u7B27\u7B29"+
-        "\u7B2A\u7B2B\u7B2D\u7B2E\u7B2F\u7B30\u7B31\u7B34"+
-        "\u7B3D\u7B3F\u7B40\u7B41\u7B47\u7B4E\u7B55\u7B60"+
-        "\u7B64\u7B66\u7B69\u7B6A\u7B6D\u7B6F\u7B72\u7B73"+
-        "\u7B77\u7B84\u7B89\u7B8E\u7B90\u7B91\u7B96\u7B9B"+
-        "\u7B9E\u7BA0\u7BA5\u7BAC\u7BAF\u7BB0\u7BB2\u7BB5"+
-        "\u7BB6\u7BBA\u7BBB\u7BBC\u7BBD\u7BC2\u7BC5\u7BC8"+
-        "\u7BCA\u7BD4\u7BD6\u7BD7\u7BD9\u7BDA\u7BDB\u7BE8"+
-        "\u7BEA\u7BF2\u7BF4\u7BF5\u7BF8\u7BF9\u7BFA\u7BFC"+
-        "\u7BFE\u7C01\u7C02\u7C03\u7C04\u7C06\u7C09\u7C0B"+
-        "\u7C0C\u7C0E\u7C0F\u7C19\u7C1B\u7C20\u7C25\u7C26"+
-        "\u7C28\u7C2C\u7C31\u7C33\u7C34\u7C36\u7C39\u7C3A"+
-        "\u7C46\u7C4A\u7C55\u7C51\u7C52\u7C53\u7C59\u7C5A"+
-        "\u7C5B\u7C5C\u7C5D\u7C5E\u7C61\u7C63\u7C67\u7C69"+
-        "\u7C6D\u7C6E\u7C70\u7C72\u7C79\u7C7C\u7C7D\u7C86"+
-        "\u7C87\u7C8F\u7C94\u7C9E\u7CA0\u7CA6\u7CB0\u7CB6"+
-        "\u7CB7\u7CBA\u7CBB\u7CBC\u7CBF\u7CC4\u7CC7\u7CC8"+
-        "\u7CC9\u7CCD\u7CCF\u7CD3\u7CD4\u7CD5\u7CD7\u7CD9"+
-        "\u7CDA\u7CDD\u7CE6\u7CE9\u7CEB\u7CF5\u7D03\u7D07"+
-        "\u7D08\u7D09\u7D0F\u7D11\u7D12\u7D13\u7D16\u7D1D"+
-        "\u7D1E\u7D23\u7D26\u7D2A\u7D2D\u7D31\u7D3C\u7D3D"+
-        "\u7D3E\u7D40\u7D41\u7D47\u7D48\u7D4D\u7D51\u7D53"+
-        "\u7D57\u7D59\u7D5A\u7D5C\u7D5D\u7D65\u7D67\u7D6A"+
-        "\u7D70\u7D78\u7D7A\u7D7B\u7D7F\u7D81\u7D82\u7D83"+
-        "\u7D85\u7D86\u7D88\u7D8B\u7D8C\u7D8D\u7D91\u7D96"+
-        "\u7D97\u7D9D\u7D9E\u7DA6\u7DA7\u7DAA\u7DB3\u7DB6"+
-        "\u7DB7\u7DB9\u7DC2\u7DC3\u7DC4\u7DC5\u7DC6\u7DCC"+
-        "\u7DCD\u7DCE\u7DD7\u7DD9\u7E00\u7DE2\u7DE5\u7DE6"+
-        "\u7DEA\u7DEB\u7DED\u7DF1\u7DF5\u7DF6\u7DF9\u7DFA"+
-        "\u7E08\u7E10\u7E11\u7E15\u7E17\u7E1C\u7E1D\u7E20"+
-        "\u7E27\u7E28\u7E2C\u7E2D\u7E2F\u7E33\u7E36\u7E3F"+
-        "\u7E44\u7E45\u7E47\u7E4E\u7E50\u7E52\u7E58\u7E5F"+
-        "\u7E61\u7E62\u7E65\u7E6B\u7E6E\u7E6F\u7E73\u7E78"+
-        "\u7E7E\u7E81\u7E86\u7E87\u7E8A\u7E8D\u7E91\u7E95"+
-        "\u7E98\u7E9A\u7E9D\u7E9E\u7F3C\u7F3B\u7F3D\u7F3E"+
-        "\u7F3F\u7F43\u7F44\u7F47\u7F4F\u7F52\u7F53\u7F5B"+
-        "\u7F5C\u7F5D\u7F61\u7F63\u7F64\u7F65\u7F66\u7F6D"+
-        "\u7F71\u7F7D\u7F7E\u7F7F\u7F80\u7F8B\u7F8D\u7F8F"+
-        "\u7F90\u7F91\u7F96\u7F97\u7F9C\u7FA1\u7FA2\u7FA6"+
-        "\u7FAA\u7FAD\u7FB4\u7FBC\u7FBF\u7FC0\u7FC3\u7FC8"+
-        "\u7FCE\u7FCF\u7FDB\u7FDF\u7FE3\u7FE5\u7FE8\u7FEC"+
-        "\u7FEE\u7FEF\u7FF2\u7FFA\u7FFD\u7FFE\u7FFF\u8007"+
-        "\u8008\u800A\u800D\u800E\u800F\u8011\u8013\u8014"+
-        "\u8016\u801D\u801E\u801F\u8020\u8024\u8026\u802C"+
-        "\u802E\u8030\u8034\u8035\u8037\u8039\u803A\u803C"+
-        "\u803E\u8040\u8044\u8060\u8064\u8066\u806D\u8071"+
-        "\u8075\u8081\u8088\u808E\u809C\u809E\u80A6\u80A7"+
-        "\u80AB\u80B8\u80B9\u80C8\u80CD\u80CF\u80D2\u80D4"+
-        "\u80D5\u80D7\u80D8\u80E0\u80ED\u80EE\u80F0\u80F2"+
-        "\u80F3\u80F6\u80F9\u80FA\u80FE\u8103\u810B\u8116"+
-        "\u8117\u8118\u811C\u811E\u8120\u8124\u8127\u812C"+
-        "\u8130\u8135\u813A\u813C\u8145\u8147\u814A\u814C"+
-        "\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816D"+
-        "\u816F\u8177\u8181\u8190\u8184\u8185\u8186\u818B"+
-        "\u818E\u8196\u8198\u819B\u819E\u81A2\u81AE\u81B2"+
-        "\u81B4\u81BB\u81CB\u81C3\u81C5\u81CA\u81CE\u81CF"+
-        "\u81D5\u81D7\u81DB\u81DD\u81DE\u81E1\u81E4\u81EB"+
-        "\u81EC\u81F0\u81F1\u81F2\u81F5\u81F6\u81F8\u81F9"+
-        "\u81FD\u81FF\u8200\u8203\u820F\u8213\u8214\u8219"+
-        "\u821A\u821D\u8221\u8222\u8228\u8232\u8234\u823A"+
-        "\u8243\u8244\u8245\u8246\u824B\u824E\u824F\u8251"+
-        "\u8256\u825C\u8260\u8263\u8267\u826D\u8274\u827B"+
-        "\u827D\u827F\u8280\u8281\u8283\u8284\u8287\u8289"+
-        "\u828A\u828E\u8291\u8294\u8296\u8298\u829A\u829B"+
-        "\u82A0\u82A1\u82A3\u82A4\u82A7\u82A8\u82A9\u82AA"+
-        "\u82AE\u82B0\u82B2\u82B4\u82B7\u82BA\u82BC\u82BE"+
-        "\u82BF\u82C6\u82D0\u82D5\u82DA\u82E0\u82E2\u82E4"+
-        "\u82E8\u82EA\u82ED\u82EF\u82F6\u82F7\u82FD\u82FE"+
-        "\u8300\u8301\u8307\u8308\u830A\u830B\u8354\u831B"+
-        "\u831D\u831E\u831F\u8321\u8322\u832C\u832D\u832E"+
-        "\u8330\u8333\u8337\u833A\u833C\u833D\u8342\u8343"+
-        "\u8344\u8347\u834D\u834E\u8351\u8355\u8356\u8357"+
-        "\u8370\u8378\u837D\u837F\u8380\u8382\u8384\u8386"+
-        "\u838D\u8392\u8394\u8395\u8398\u8399\u839B\u839C"+
-        "\u839D\u83A6\u83A7\u83A9\u83AC\u83BE\u83BF\u83C0"+
-        "\u83C7\u83C9\u83CF\u83D0\u83D1\u83D4\u83DD\u8353"+
-        "\u83E8\u83EA\u83F6\u83F8\u83F9\u83FC\u8401\u8406"+
-        "\u840A\u840F\u8411\u8415\u8419\u83AD\u842F\u8439"+
-        "\u8445\u8447\u8448\u844A\u844D\u844F\u8451\u8452"+
-        "\u8456\u8458\u8459\u845A\u845C\u8460\u8464\u8465"+
-        "\u8467\u846A\u8470\u8473\u8474\u8476\u8478\u847C"+
-        "\u847D\u8481\u8485\u8492\u8493\u8495\u849E\u84A6"+
-        "\u84A8\u84A9\u84AA\u84AF\u84B1\u84B4\u84BA\u84BD"+
-        "\u84BE\u84C0\u84C2\u84C7\u84C8\u84CC\u84CF\u84D3";
-
-    private final static String innerIndex3=
-        "\u84DC\u84E7\u84EA\u84EF\u84F0\u84F1\u84F2\u84F7"+
-        "\u8532\u84FA\u84FB\u84FD\u8502\u8503\u8507\u850C"+
-        "\u850E\u8510\u851C\u851E\u8522\u8523\u8524\u8525"+
-        "\u8527\u852A\u852B\u852F\u8533\u8534\u8536\u853F"+
-        "\u8546\u854F\u8550\u8551\u8552\u8553\u8556\u8559"+
-        "\u855C\u855D\u855E\u855F\u8560\u8561\u8562\u8564"+
-        "\u856B\u856F\u8579\u857A\u857B\u857D\u857F\u8581"+
-        "\u8585\u8586\u8589\u858B\u858C\u858F\u8593\u8598"+
-        "\u859D\u859F\u85A0\u85A2\u85A5\u85A7\u85B4\u85B6"+
-        "\u85B7\u85B8\u85BC\u85BD\u85BE\u85BF\u85C2\u85C7"+
-        "\u85CA\u85CB\u85CE\u85AD\u85D8\u85DA\u85DF\u85E0"+
-        "\u85E6\u85E8\u85ED\u85F3\u85F6\u85FC\u85FF\u8600"+
-        "\u8604\u8605\u860D\u860E\u8610\u8611\u8612\u8618"+
-        "\u8619\u861B\u861E\u8621\u8627\u8629\u8636\u8638"+
-        "\u863A\u863C\u863D\u8640\u8642\u8646\u8652\u8653"+
-        "\u8656\u8657\u8658\u8659\u865D\u8660\u8661\u8662"+
-        "\u8663\u8664\u8669\u866C\u866F\u8675\u8676\u8677"+
-        "\u867A\u868D\u8691\u8696\u8698\u869A\u869C\u86A1"+
-        "\u86A6\u86A7\u86A8\u86AD\u86B1\u86B3\u86B4\u86B5"+
-        "\u86B7\u86B8\u86B9\u86BF\u86C0\u86C1\u86C3\u86C5"+
-        "\u86D1\u86D2\u86D5\u86D7\u86DA\u86DC\u86E0\u86E3"+
-        "\u86E5\u86E7\u8688\u86FA\u86FC\u86FD\u8704\u8705"+
-        "\u8707\u870B\u870E\u870F\u8710\u8713\u8714\u8719"+
-        "\u871E\u871F\u8721\u8723\u8728\u872E\u872F\u8731"+
-        "\u8732\u8739\u873A\u873C\u873D\u873E\u8740\u8743"+
-        "\u8745\u874D\u8758\u875D\u8761\u8764\u8765\u876F"+
-        "\u8771\u8772\u877B\u8783\u8784\u8785\u8786\u8787"+
-        "\u8788\u8789\u878B\u878C\u8790\u8793\u8795\u8797"+
-        "\u8798\u8799\u879E\u87A0\u87A3\u87A7\u87AC\u87AD"+
-        "\u87AE\u87B1\u87B5\u87BE\u87BF\u87C1\u87C8\u87C9"+
-        "\u87CA\u87CE\u87D5\u87D6\u87D9\u87DA\u87DC\u87DF"+
-        "\u87E2\u87E3\u87E4\u87EA\u87EB\u87ED\u87F1\u87F3"+
-        "\u87F8\u87FA\u87FF\u8801\u8803\u8806\u8809\u880A"+
-        "\u880B\u8810\u8819\u8812\u8813\u8814\u8818\u881A"+
-        "\u881B\u881C\u881E\u881F\u8828\u882D\u882E\u8830"+
-        "\u8832\u8835\u883A\u883C\u8841\u8843\u8845\u8848"+
-        "\u8849\u884A\u884B\u884E\u8851\u8855\u8856\u8858"+
-        "\u885A\u885C\u885F\u8860\u8864\u8869\u8871\u8879"+
-        "\u887B\u8880\u8898\u889A\u889B\u889C\u889F\u88A0"+
-        "\u88A8\u88AA\u88BA\u88BD\u88BE\u88C0\u88CA\u88CB"+
-        "\u88CC\u88CD\u88CE\u88D1\u88D2\u88D3\u88DB\u88DE"+
-        "\u88E7\u88EF\u88F0\u88F1\u88F5\u88F7\u8901\u8906"+
-        "\u890D\u890E\u890F\u8915\u8916\u8918\u8919\u891A"+
-        "\u891C\u8920\u8926\u8927\u8928\u8930\u8931\u8932"+
-        "\u8935\u8939\u893A\u893E\u8940\u8942\u8945\u8946"+
-        "\u8949\u894F\u8952\u8957\u895A\u895B\u895C\u8961"+
-        "\u8962\u8963\u896B\u896E\u8970\u8973\u8975\u897A"+
-        "\u897B\u897C\u897D\u8989\u898D\u8990\u8994\u8995"+
-        "\u899B\u899C\u899F\u89A0\u89A5\u89B0\u89B4\u89B5"+
-        "\u89B6\u89B7\u89BC\u89D4\u89D5\u89D6\u89D7\u89D8"+
-        "\u89E5\u89E9\u89EB\u89ED\u89F1\u89F3\u89F6\u89F9"+
-        "\u89FD\u89FF\u8A04\u8A05\u8A07\u8A0F\u8A11\u8A12"+
-        "\u8A14\u8A15\u8A1E\u8A20\u8A22\u8A24\u8A26\u8A2B"+
-        "\u8A2C\u8A2F\u8A35\u8A37\u8A3D\u8A3E\u8A40\u8A43"+
-        "\u8A45\u8A47\u8A49\u8A4D\u8A4E\u8A53\u8A56\u8A57"+
-        "\u8A58\u8A5C\u8A5D\u8A61\u8A65\u8A67\u8A75\u8A76"+
-        "\u8A77\u8A79\u8A7A\u8A7B\u8A7E\u8A7F\u8A80\u8A83"+
-        "\u8A86\u8A8B\u8A8F\u8A90\u8A92\u8A96\u8A97\u8A99"+
-        "\u8A9F\u8AA7\u8AA9\u8AAE\u8AAF\u8AB3\u8AB6\u8AB7"+
-        "\u8ABB\u8ABE\u8AC3\u8AC6\u8AC8\u8AC9\u8ACA\u8AD1"+
-        "\u8AD3\u8AD4\u8AD5\u8AD7\u8ADD\u8ADF\u8AEC\u8AF0"+
-        "\u8AF4\u8AF5\u8AF6\u8AFC\u8AFF\u8B05\u8B06\u8B0B"+
-        "\u8B11\u8B1C\u8B1E\u8B1F\u8B0A\u8B2D\u8B30\u8B37"+
-        "\u8B3C\u8B42\u8B43\u8B44\u8B45\u8B46\u8B48\u8B52"+
-        "\u8B53\u8B54\u8B59\u8B4D\u8B5E\u8B63\u8B6D\u8B76"+
-        "\u8B78\u8B79\u8B7C\u8B7E\u8B81\u8B84\u8B85\u8B8B"+
-        "\u8B8D\u8B8F\u8B94\u8B95\u8B9C\u8B9E\u8B9F\u8C38"+
-        "\u8C39\u8C3D\u8C3E\u8C45\u8C47\u8C49\u8C4B\u8C4F"+
-        "\u8C51\u8C53\u8C54\u8C57\u8C58\u8C5B\u8C5D\u8C59"+
-        "\u8C63\u8C64\u8C66\u8C68\u8C69\u8C6D\u8C73\u8C75"+
-        "\u8C76\u8C7B\u8C7E\u8C86\u8C87\u8C8B\u8C90\u8C92"+
-        "\u8C93\u8C99\u8C9B\u8C9C\u8CA4\u8CB9\u8CBA\u8CC5"+
-        "\u8CC6\u8CC9\u8CCB\u8CCF\u8CD6\u8CD5\u8CD9\u8CDD"+
-        "\u8CE1\u8CE8\u8CEC\u8CEF\u8CF0\u8CF2\u8CF5\u8CF7"+
-        "\u8CF8\u8CFE\u8CFF\u8D01\u8D03\u8D09\u8D12\u8D17"+
-        "\u8D1B\u8D65\u8D69\u8D6C\u8D6E\u8D7F\u8D82\u8D84"+
-        "\u8D88\u8D8D\u8D90\u8D91\u8D95\u8D9E\u8D9F\u8DA0"+
-        "\u8DA6\u8DAB\u8DAC\u8DAF\u8DB2\u8DB5\u8DB7\u8DB9"+
-        "\u8DBB\u8DC0\u8DC5\u8DC6\u8DC7\u8DC8\u8DCA\u8DCE"+
-        "\u8DD1\u8DD4\u8DD5\u8DD7\u8DD9\u8DE4\u8DE5\u8DE7"+
-        "\u8DEC\u8DF0\u8DBC\u8DF1\u8DF2\u8DF4\u8DFD\u8E01"+
-        "\u8E04\u8E05\u8E06\u8E0B\u8E11\u8E14\u8E16\u8E20"+
-        "\u8E21\u8E22\u8E23\u8E26\u8E27\u8E31\u8E33\u8E36"+
-        "\u8E37\u8E38\u8E39\u8E3D\u8E40\u8E41\u8E4B\u8E4D"+
-        "\u8E4E\u8E4F\u8E54\u8E5B\u8E5C\u8E5D\u8E5E\u8E61"+
-        "\u8E62\u8E69\u8E6C\u8E6D\u8E6F\u8E70\u8E71\u8E79"+
-        "\u8E7A\u8E7B\u8E82\u8E83\u8E89\u8E90\u8E92\u8E95"+
-        "\u8E9A\u8E9B\u8E9D\u8E9E\u8EA2\u8EA7\u8EA9\u8EAD"+
-        "\u8EAE\u8EB3\u8EB5\u8EBA\u8EBB\u8EC0\u8EC1\u8EC3"+
-        "\u8EC4\u8EC7\u8ECF\u8ED1\u8ED4\u8EDC\u8EE8\u8EEE"+
-        "\u8EF0\u8EF1\u8EF7\u8EF9\u8EFA\u8EED\u8F00\u8F02"+
-        "\u8F07\u8F08\u8F0F\u8F10\u8F16\u8F17\u8F18\u8F1E"+
-        "\u8F20\u8F21\u8F23\u8F25\u8F27\u8F28\u8F2C\u8F2D"+
-        "\u8F2E\u8F34\u8F35\u8F36\u8F37\u8F3A\u8F40\u8F41"+
-        "\u8F43\u8F47\u8F4F\u8F51\u8F52\u8F53\u8F54\u8F55"+
-        "\u8F58\u8F5D\u8F5E\u8F65\u8F9D\u8FA0\u8FA1\u8FA4"+
-        "\u8FA5\u8FA6\u8FB5\u8FB6\u8FB8\u8FBE\u8FC0\u8FC1"+
-        "\u8FC6\u8FCA\u8FCB\u8FCD\u8FD0\u8FD2\u8FD3\u8FD5"+
-        "\u8FE0\u8FE3\u8FE4\u8FE8\u8FEE\u8FF1\u8FF5\u8FF6"+
-        "\u8FFB\u8FFE\u9002\u9004\u9008\u900C\u9018\u901B"+
-        "\u9028\u9029\u902F\u902A\u902C\u902D\u9033\u9034"+
-        "\u9037\u903F\u9043\u9044\u904C\u905B\u905D\u9062"+
-        "\u9066\u9067\u906C\u9070\u9074\u9079\u9085\u9088"+
-        "\u908B\u908C\u908E\u9090\u9095\u9097\u9098\u9099"+
-        "\u909B\u90A0\u90A1\u90A2\u90A5\u90B0\u90B2\u90B3"+
-        "\u90B4\u90B6\u90BD\u90CC\u90BE\u90C3\u90C4\u90C5"+
-        "\u90C7\u90C8\u90D5\u90D7\u90D8\u90D9\u90DC\u90DD"+
-        "\u90DF\u90E5\u90D2\u90F6\u90EB\u90EF\u90F0\u90F4"+
-        "\u90FE\u90FF\u9100\u9104\u9105\u9106\u9108\u910D"+
-        "\u9110\u9114\u9116\u9117\u9118\u911A\u911C\u911E"+
-        "\u9120\u9125\u9122\u9123\u9127\u9129\u912E\u912F"+
-        "\u9131\u9134\u9136\u9137\u9139\u913A\u913C\u913D"+
-        "\u9143\u9147\u9148\u914F\u9153\u9157\u9159\u915A"+
-        "\u915B\u9161\u9164\u9167\u916D\u9174\u9179\u917A"+
-        "\u917B\u9181\u9183\u9185\u9186\u918A\u918E\u9191"+
-        "\u9193\u9194\u9195\u9198\u919E\u91A1\u91A6\u91A8"+
-        "\u91AC\u91AD\u91AE\u91B0\u91B1\u91B2\u91B3\u91B6"+
-        "\u91BB\u91BC\u91BD\u91BF\u91C2\u91C3\u91C5\u91D3"+
-        "\u91D4\u91D7\u91D9\u91DA\u91DE\u91E4\u91E5\u91E9"+
-        "\u91EA\u91EC\u91ED\u91EE\u91EF\u91F0\u91F1\u91F7"+
-        "\u91F9\u91FB\u91FD\u9200\u9201\u9204\u9205\u9206"+
-        "\u9207\u9209\u920A\u920C\u9210\u9212\u9213\u9216"+
-        "\u9218\u921C\u921D\u9223\u9224\u9225\u9226\u9228"+
-        "\u922E\u922F\u9230\u9233\u9235\u9236\u9238\u9239"+
-        "\u923A\u923C\u923E\u9240\u9242\u9243\u9246\u9247"+
-        "\u924A\u924D\u924E\u924F\u9251\u9258\u9259\u925C"+
-        "\u925D\u9260\u9261\u9265\u9267\u9268\u9269\u926E"+
-        "\u926F\u9270\u9275\u9276\u9277\u9278\u9279\u927B"+
-        "\u927C\u927D\u927F\u9288\u9289\u928A\u928D\u928E"+
-        "\u9292\u9297\u9299\u929F\u92A0\u92A4\u92A5\u92A7"+
-        "\u92A8\u92AB\u92AF\u92B2\u92B6\u92B8\u92BA\u92BB"+
-        "\u92BC\u92BD\u92BF\u92C0\u92C1\u92C2\u92C3\u92C5"+
-        "\u92C6\u92C7\u92C8\u92CB\u92CC\u92CD\u92CE\u92D0"+
-        "\u92D3\u92D5\u92D7\u92D8\u92D9\u92DC\u92DD\u92DF"+
-        "\u92E0\u92E1\u92E3\u92E5\u92E7\u92E8\u92EC\u92EE"+
-        "\u92F0\u92F9\u92FB\u92FF\u9300\u9302\u9308\u930D"+
-        "\u9311\u9314\u9315\u931C\u931D\u931E\u931F\u9321"+
-        "\u9324\u9325\u9327\u9329\u932A\u9333\u9334\u9336"+
-        "\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355"+
-        "\u9357\u9358\u935A\u935E\u9364\u9365\u9367\u9369"+
-        "\u936A\u936D\u936F\u9370\u9371\u9373\u9374\u9376"+
-        "\u937A\u937D\u937F\u9380\u9381\u9382\u9388\u938A"+
-        "\u938B\u938D\u938F\u9392\u9395\u9398\u939B\u939E"+
-        "\u93A1\u93A3\u93A4\u93A6\u93A8\u93AB\u93B4\u93B5"+
-        "\u93B6\u93BA\u93A9\u93C1\u93C4\u93C5\u93C6\u93C7"+
-        "\u93C9\u93CA\u93CB\u93CC\u93CD\u93D3\u93D9\u93DC"+
-        "\u93DE\u93DF\u93E2\u93E6\u93E7\u93F9\u93F7\u93F8"+
-        "\u93FA\u93FB\u93FD\u9401\u9402\u9404\u9408\u9409"+
-        "\u940D\u940E\u940F\u9415\u9416\u9417\u941F\u942E"+
-        "\u942F\u9431\u9432\u9433\u9434\u943B\u943F\u943D"+
-        "\u9443\u9445\u9448\u944A\u944C\u9455\u9459\u945C"+
-        "\u945F\u9461\u9463\u9468\u946B\u946D\u946E\u946F"+
-        "\u9471\u9472\u9484\u9483\u9578\u9579\u957E\u9584"+
-        "\u9588\u958C\u958D\u958E\u959D\u959E\u959F\u95A1"+
-        "\u95A6\u95A9\u95AB\u95AC\u95B4\u95B6\u95BA\u95BD"+
-        "\u95BF\u95C6\u95C8\u95C9\u95CB\u95D0\u95D1\u95D2"+
-        "\u95D3\u95D9\u95DA\u95DD\u95DE\u95DF\u95E0\u95E4"+
-        "\u95E6\u961D\u961E\u9622\u9624\u9625\u9626\u962C"+
-        "\u9631\u9633\u9637\u9638\u9639\u963A\u963C\u963D"+
-        "\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966E"+
-        "\u9674\u967B\u967C\u967E\u967F\u9681\u9682\u9683"+
-        "\u9684\u9689\u9691\u9696\u969A\u969D\u969F\u96A4"+
-        "\u96A5\u96A6\u96A9\u96AE\u96AF\u96B3\u96BA\u96CA"+
-        "\u96D2\u5DB2\u96D8\u96DA\u96DD\u96DE\u96DF\u96E9"+
-        "\u96EF\u96F1\u96FA\u9702\u9703\u9705\u9709\u971A"+
-        "\u971B\u971D\u9721\u9722\u9723\u9728\u9731\u9733"+
-        "\u9741\u9743\u974A\u974E\u974F\u9755\u9757\u9758"+
-        "\u975A\u975B\u9763\u9767\u976A\u976E\u9773\u9776"+
-        "\u9777\u9778\u977B\u977D\u977F\u9780\u9789\u9795"+
-        "\u9796\u9797\u9799\u979A\u979E\u979F\u97A2\u97AC"+
-        "\u97AE\u97B1\u97B2\u97B5\u97B6\u97B8\u97B9\u97BA"+
-        "\u97BC\u97BE\u97BF\u97C1\u97C4\u97C5\u97C7\u97C9"+
-        "\u97CA\u97CC\u97CD\u97CE\u97D0\u97D1\u97D4\u97D7"+
-        "\u97D8\u97D9\u97DD\u97DE\u97E0\u97DB\u97E1\u97E4"+
-        "\u97EF\u97F1\u97F4\u97F7\u97F8\u97FA\u9807\u980A"+
-        "\u9819\u980D\u980E\u9814\u9816\u981C\u981E\u9820"+
-        "\u9823\u9826\u982B\u982E\u982F\u9830\u9832\u9833"+
-        "\u9835\u9825\u983E\u9844\u9847\u984A\u9851\u9852"+
-        "\u9853\u9856\u9857\u9859\u985A\u9862\u9863\u9865"+
-        "\u9866\u986A\u986C\u98AB\u98AD\u98AE\u98B0\u98B4"+
-        "\u98B7\u98B8\u98BA\u98BB\u98BF\u98C2\u98C5\u98C8"+
-        "\u98CC\u98E1\u98E3\u98E5\u98E6\u98E7\u98EA\u98F3"+
-        "\u98F6\u9902\u9907\u9908\u9911\u9915\u9916\u9917"+
-        "\u991A\u991B\u991C\u991F\u9922\u9926\u9927\u992B"+
-        "\u9931\u9932\u9933\u9934\u9935\u9939\u993A\u993B"+
-        "\u993C\u9940\u9941\u9946\u9947\u9948\u994D\u994E"+
-        "\u9954\u9958\u9959\u995B\u995C\u995E\u995F\u9960"+
-        "\u999B\u999D\u999F\u99A6\u99B0\u99B1\u99B2\u99B5";
-
-    private final static String innerIndex4=
-        "\u99B9\u99BA\u99BD\u99BF\u99C3\u99C9\u99D3\u99D4"+
-        "\u99D9\u99DA\u99DC\u99DE\u99E7\u99EA\u99EB\u99EC"+
-        "\u99F0\u99F4\u99F5\u99F9\u99FD\u99FE\u9A02\u9A03"+
-        "\u9A04\u9A0B\u9A0C\u9A10\u9A11\u9A16\u9A1E\u9A20"+
-        "\u9A22\u9A23\u9A24\u9A27\u9A2D\u9A2E\u9A33\u9A35"+
-        "\u9A36\u9A38\u9A47\u9A41\u9A44\u9A4A\u9A4B\u9A4C"+
-        "\u9A4E\u9A51\u9A54\u9A56\u9A5D\u9AAA\u9AAC\u9AAE"+
-        "\u9AAF\u9AB2\u9AB4\u9AB5\u9AB6\u9AB9\u9ABB\u9ABE"+
-        "\u9ABF\u9AC1\u9AC3\u9AC6\u9AC8\u9ACE\u9AD0\u9AD2"+
-        "\u9AD5\u9AD6\u9AD7\u9ADB\u9ADC\u9AE0\u9AE4\u9AE5"+
-        "\u9AE7\u9AE9\u9AEC\u9AF2\u9AF3\u9AF5\u9AF9\u9AFA"+
-        "\u9AFD\u9AFF\u9B00\u9B01\u9B02\u9B03\u9B04\u9B05"+
-        "\u9B08\u9B09\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B12"+
-        "\u9B16\u9B19\u9B1B\u9B1C\u9B20\u9B26\u9B2B\u9B2D"+
-        "\u9B33\u9B34\u9B35\u9B37\u9B39\u9B3A\u9B3D\u9B48"+
-        "\u9B4B\u9B4C\u9B55\u9B56\u9B57\u9B5B\u9B5E\u9B61"+
-        "\u9B63\u9B65\u9B66\u9B68\u9B6A\u9B6B\u9B6C\u9B6D"+
-        "\u9B6E\u9B73\u9B75\u9B77\u9B78\u9B79\u9B7F\u9B80"+
-        "\u9B84\u9B85\u9B86\u9B87\u9B89\u9B8A\u9B8B\u9B8D"+
-        "\u9B8F\u9B90\u9B94\u9B9A\u9B9D\u9B9E\u9BA6\u9BA7"+
-        "\u9BA9\u9BAC\u9BB0\u9BB1\u9BB2\u9BB7\u9BB8\u9BBB"+
-        "\u9BBC\u9BBE\u9BBF\u9BC1\u9BC7\u9BC8\u9BCE\u9BD0"+
-        "\u9BD7\u9BD8\u9BDD\u9BDF\u9BE5\u9BE7\u9BEA\u9BEB"+
-        "\u9BEF\u9BF3\u9BF7\u9BF8\u9BF9\u9BFA\u9BFD\u9BFF"+
-        "\u9C00\u9C02\u9C0B\u9C0F\u9C11\u9C16\u9C18\u9C19"+
-        "\u9C1A\u9C1C\u9C1E\u9C22\u9C23\u9C26\u9C27\u9C28"+
-        "\u9C29\u9C2A\u9C31\u9C35\u9C36\u9C37\u9C3D\u9C41"+
-        "\u9C43\u9C44\u9C45\u9C49\u9C4A\u9C4E\u9C4F\u9C50"+
-        "\u9C53\u9C54\u9C56\u9C58\u9C5B\u9C5D\u9C5E\u9C5F"+
-        "\u9C63\u9C69\u9C6A\u9C5C\u9C6B\u9C68\u9C6E\u9C70"+
-        "\u9C72\u9C75\u9C77\u9C7B\u9CE6\u9CF2\u9CF7\u9CF9"+
-        "\u9D0B\u9D02\u9D11\u9D17\u9D18\u9D1C\u9D1D\u9D1E"+
-        "\u9D2F\u9D30\u9D32\u9D33\u9D34\u9D3A\u9D3C\u9D45"+
-        "\u9D3D\u9D42\u9D43\u9D47\u9D4A\u9D53\u9D54\u9D5F"+
-        "\u9D63\u9D62\u9D65\u9D69\u9D6A\u9D6B\u9D70\u9D76"+
-        "\u9D77\u9D7B\u9D7C\u9D7E\u9D83\u9D84\u9D86\u9D8A"+
-        "\u9D8D\u9D8E\u9D92\u9D93\u9D95\u9D96\u9D97\u9D98"+
-        "\u9DA1\u9DAA\u9DAC\u9DAE\u9DB1\u9DB5\u9DB9\u9DBC"+
-        "\u9DBF\u9DC3\u9DC7\u9DC9\u9DCA\u9DD4\u9DD5\u9DD6"+
-        "\u9DD7\u9DDA\u9DDE\u9DDF\u9DE0\u9DE5\u9DE7\u9DE9"+
-        "\u9DEB\u9DEE\u9DF0\u9DF3\u9DF4\u9DFE\u9E0A\u9E02"+
-        "\u9E07\u9E0E\u9E10\u9E11\u9E12\u9E15\u9E16\u9E19"+
-        "\u9E1C\u9E1D\u9E7A\u9E7B\u9E7C\u9E80\u9E82\u9E83"+
-        "\u9E84\u9E85\u9E87\u9E8E\u9E8F\u9E96\u9E98\u9E9B"+
-        "\u9E9E\u9EA4\u9EA8\u9EAC\u9EAE\u9EAF\u9EB0\u9EB3"+
-        "\u9EB4\u9EB5\u9EC6\u9EC8\u9ECB\u9ED5\u9EDF\u9EE4"+
-        "\u9EE7\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF5"+
-        "\u9EF8\u9EFF\u9F02\u9F03\u9F09\u9F0F\u9F10\u9F11"+
-        "\u9F12\u9F14\u9F16\u9F17\u9F19\u9F1A\u9F1B\u9F1F"+
-        "\u9F22\u9F26\u9F2A\u9F2B\u9F2F\u9F31\u9F32\u9F34"+
-        "\u9F37\u9F39\u9F3A\u9F3C\u9F3D\u9F3F\u9F41\u9F43"+
-        "\u9F44\u9F45\u9F46\u9F47\u9F53\u9F55\u9F56\u9F57"+
-        "\u9F58\u9F5A\u9F5D\u9F5E\u9F68\u9F69\u9F6D\u9F6E"+
-        "\u9F6F\u9F70\u9F71\u9F73\u9F75\u9F7A\u9F7D\u9F8F"+
-        "\u9F90\u9F91\u9F92\u9F94\u9F96\u9F97\u9F9E\u9FA1"+
-        "\u9FA2\u9FA3\u9FA5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD";
-
-    private final static short index1[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 1, 0, 0, 0, 2, 3, 0, 4, 5, 6, 0, 0, 0, 0,
-        7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
-        23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
-        39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
-        55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-    };
-
-    private final static String index2[] = {
-        innerIndex0,
-        innerIndex1,
-        innerIndex2,
-        innerIndex3,
-        innerIndex4
-    };
-
-    protected char convSingleByte(int b) {
-        return REPLACE_CHAR;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_Encoder.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_Encoder.java
deleted file mode 100755
index 4551859..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_Encoder.java
+++ /dev/null
@@ -1,2995 +0,0 @@
-/*
- * Copyright (c) 2003, 2005, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-
-public class JIS_X_0212_Encoder extends DoubleByteEncoder
-{
-    /*
-     * default replacement defined merely for pseudo
-     * charset x-JIS-X-0208 to instantiate with a
-     * decodeable replacement byte sequence
-     * JIS X 0212(1990) 0x2244 maps to INVERTED QUESTION MARK
-     * Compound converters, CES (character encoding schemes)
-     * based upon JIS X 0212-1990 will most likely redefine
-     * their own replacement chars or use 0x3f
-     * (ASCII
-     */
-
-    private static byte[] repl = { (byte)0x22, (byte)0x44 };
-
-    public JIS_X_0212_Encoder(Charset cs) {
-        super(cs,
-              index1,
-              index2 ,
-              repl
-             );
-    }
-
-    protected int encodeSingle(char inputChar) {
-        return -1;
-    }
-
-    /**
-     * These accessors are temporarily supplied while sun.io
-     * converters co-exist with the sun.nio.cs.{ext} charset coders
-     * These facilitate sharing of conversion tables between the
-     * two co-existing implementations. When sun.io converters
-     * are made extinct these will be unncessary and should be removed
-     */
-    public static short[] getIndex1() {
-        return index1;
-    }
-    public static String[] getIndex2() {
-        return index2;
-    }
-
-    private final static String innerIndex0=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2242\u0000\u0000\u2270\u0000\u2243\u0000"+
-        "\u0000\u226D\u226C\u0000\u0000\u0000\u226E\u2234"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2231\u0000\u226B\u0000\u0000\u0000\u0000\u2244"+
-        "\u2A22\u2A21\u2A24\u2A2A\u2A23\u2A29\u2921\u2A2E"+
-        "\u2A32\u2A31\u2A34\u2A33\u2A40\u2A3F\u2A42\u2A41"+
-        "\u0000\u2A50\u2A52\u2A51\u2A54\u2A58\u2A53\u0000"+
-        "\u292C\u2A63\u2A62\u2A65\u2A64\u2A72\u2930\u294E"+
-        "\u2B22\u2B21\u2B24\u2B2A\u2B23\u2B29\u2941\u2B2E"+
-        "\u2B32\u2B31\u2B34\u2B33\u2B40\u2B3F\u2B42\u2B41"+
-        "\u2943\u2B50\u2B52\u2B51\u2B54\u2B58\u2B53\u0000"+
-        "\u294C\u2B63\u2B62\u2B65\u2B64\u2B72\u2950\u2B73"+
-        "\u2A27\u2B27\u2A25\u2B25\u2A28\u2B28\u2A2B\u2B2B"+
-        "\u2A2C\u2B2C\u2A2F\u2B2F\u2A2D\u2B2D\u2A30\u2B30"+
-        "\u2922\u2942\u2A37\u2B37\u0000\u0000\u2A36\u2B36"+
-        "\u2A38\u2B38\u2A35\u2B35\u2A3A\u2B3A\u2A3B\u2B3B"+
-        "\u2A3D\u2B3D\u2A3C\u0000\u2A3E\u2B3E\u2924\u2944"+
-        "\u2A47\u2B47\u2A45\u2B45\u0000\u0000\u2A46\u2B46"+
-        "\u2A44\u2945\u2926\u2946\u2A48\u2B48\u2A49\u2B49"+
-        "\u2947\u2A4A\u2B4A\u2A4C\u2B4C\u2A4B\u2B4B\u2929"+
-        "\u2949\u2928\u2948\u2A4D\u2B4D\u2A4F\u2B4F\u2A4E"+
-        "\u2B4E\u294A\u292B\u294B\u2A57\u2B57\u0000\u0000"+
-        "\u2A56\u2B56\u292D\u294D\u2A59\u2B59\u2A5B\u2B5B"+
-        "\u2A5A\u2B5A\u2A5C\u2B5C\u2A5D\u2B5D\u2A5F\u2B5F"+
-        "\u2A5E\u2B5E\u2A61\u2B61\u2A60\u2B60\u292F\u294F"+
-        "\u2A6C\u2B6C\u2A69\u2B69\u2A66\u2B66\u2A6B\u2B6B"+
-        "\u2A68\u2B68\u2A6A\u2B6A\u2A71\u2B71\u2A74\u2B74"+
-        "\u2A73\u2A75\u2B75\u2A77\u2B77\u2A76\u2B76\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2A26\u2B26\u2A43"+
-        "\u2B43\u2A55\u2B55\u2A67\u2B67\u2A70\u2B70\u2A6D"+
-        "\u2B6D\u2A6F\u2B6F\u2A6E\u2B6E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2B39\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2230"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u222F\u2232\u2236\u2235\u0000\u2233\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2238\u2239\u2661\u0000"+
-        "\u2662\u2663\u2664\u0000\u2667\u0000\u2669\u266C"+
-        "\u2676\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2665\u266A\u2671\u2672\u2673\u2674"+
-        "\u267B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2678\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2675\u267A\u2677\u2679\u267C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2742\u2743\u2744\u2745\u2746\u2747"+
-        "\u2748\u2749\u274A\u274B\u274C\u0000\u274D\u274E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2772\u2773\u2774\u2775\u2776\u2777"+
-        "\u2778\u2779\u277A\u277B\u277C\u0000\u277D\u277E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2271\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u226F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3021\u0000\u3022\u3023\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3024\u0000\u0000\u0000"+
-        "\u0000\u0000\u3025\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3026"+
-        "\u0000\u0000\u0000\u3027\u3028\u0000\u0000\u0000"+
-        "\u3029\u0000\u0000\u302A\u0000\u0000\u302B\u302C"+
-        "\u302D\u0000\u0000\u0000\u0000\u302E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u302F\u3030\u0000\u0000\u3031\u0000\u0000\u3032"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3033\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3034\u0000\u3035\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3036\u0000\u0000\u0000\u0000"+
-        "\u3037\u3038\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3039\u303A\u0000\u0000"+
-        "\u0000\u303B\u0000\u0000\u0000\u0000\u0000\u303C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u303D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u303E\u303F"+
-        "\u0000\u0000\u0000\u0000\u0000\u3040\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3041"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3042\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3043\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3044\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3045\u3046\u0000\u0000\u0000\u0000"+
-        "\u3047\u3048\u3049\u0000\u0000\u0000\u0000\u0000"+
-        "\u304A\u0000\u0000\u0000\u0000\u0000\u0000\u304B"+
-        "\u0000\u304C\u0000\u304D\u0000\u304E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u304F\u3050\u3051"+
-        "\u3052\u0000\u3053\u3054\u0000\u0000\u0000\u0000"+
-        "\u3055\u0000\u0000\u3056\u3057\u0000\u0000\u0000"+
-        "\u0000\u0000\u3058\u0000\u0000\u3059\u305A\u305B"+
-        "\u0000\u305C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u305D\u0000"+
-        "\u0000\u305E\u0000\u3060\u0000\u3061\u0000\u3062"+
-        "\u0000\u3063\u0000\u3064\u0000\u0000\u3065\u0000"+
-        "\u3066\u0000\u3067\u0000\u0000\u0000\u0000\u0000"+
-        "\u3068\u3069\u0000\u306A\u306B\u0000\u0000\u0000"+
-        "\u0000\u0000\u306C\u0000\u306D\u0000\u306E\u0000"+
-        "\u306F\u0000\u0000\u0000\u0000\u0000\u0000\u3070"+
-        "\u305F\u0000\u0000\u3071\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3072\u0000\u3073\u0000\u3074\u0000"+
-        "\u0000\u3075\u0000\u0000\u0000\u0000\u0000\u3076"+
-        "\u3077\u3078\u3079\u0000\u0000\u307A\u307B\u0000"+
-        "\u0000\u307C\u307D\u0000\u307E\u3121\u0000\u0000"+
-        "\u0000\u3122\u3123\u0000\u3124\u0000\u3125\u0000"+
-        "\u3126\u0000\u3127\u3128\u3129\u0000\u0000\u312A"+
-        "\u0000\u312B\u312C\u0000\u0000\u0000\u312D\u312E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u312F\u0000\u0000\u0000\u0000\u3130"+
-        "\u0000\u3131\u0000\u3132\u3133\u3134\u3135\u0000"+
-        "\u3136\u3137\u0000\u0000\u0000\u3138\u3139\u0000"+
-        "\u313A\u313B\u0000\u313C\u313D\u313E\u0000\u313F"+
-        "\u0000\u0000\u3140\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3141\u0000\u0000\u0000"+
-        "\u3142\u0000\u3143\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3144\u0000\u3145\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3146\u3147\u0000\u3148"+
-        "\u3149\u314A\u0000\u0000\u314B\u0000\u0000\u314C"+
-        "\u0000\u0000\u314D\u0000\u314E\u0000\u314F\u0000"+
-        "\u3150\u0000\u0000\u3151\u0000\u0000\u0000\u3152"+
-        "\u3153\u0000\u0000\u3154\u3155\u3156\u3157\u0000"+
-        "\u0000\u0000\u3158\u0000\u0000\u0000\u0000\u3159"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u315A\u0000"+
-        "\u315B\u0000\u315C\u315D\u0000\u315E\u0000\u0000"+
-        "\u0000\u0000\u0000\u3176\u0000\u0000\u0000\u0000"+
-        "\u315F\u3160\u3161\u0000\u0000\u3162\u3163\u0000"+
-        "\u0000\u0000\u3164\u0000\u3165\u0000\u3166\u0000"+
-        "\u0000\u3167\u3168\u3169\u0000\u0000\u0000\u316A"+
-        "\u0000\u316B\u0000\u0000\u0000\u0000\u0000\u316C"+
-        "\u316D\u0000\u316E\u316F\u0000\u0000\u3170\u3171"+
-        "\u0000\u0000\u3172\u0000\u0000\u3173\u0000\u0000"+
-        "\u3174\u3175\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3177\u0000\u3178\u3179\u0000\u317A\u0000"+
-        "\u0000\u0000\u317B\u0000\u0000\u0000\u317C\u317D"+
-        "\u317E\u0000\u3221\u3222\u3223\u0000\u3224\u0000"+
-        "\u0000\u0000\u0000\u3225\u3226\u0000\u3227\u3228"+
-        "\u3229\u322A\u322B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u322C\u0000\u0000\u0000\u0000\u322D"+
-        "\u322E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u322F\u3230\u0000\u0000\u3231\u0000\u0000"+
-        "\u3232\u0000\u0000\u3233\u3234\u0000\u0000\u3235"+
-        "\u0000\u0000\u0000\u0000\u3236\u0000\u3237\u0000"+
-        "\u3238\u0000\u0000\u3239\u323A\u0000\u0000\u0000"+
-        "\u323B\u0000\u0000\u0000\u323C\u323D\u0000\u323E"+
-        "\u0000\u0000\u323F\u0000\u3240\u0000\u3241\u0000"+
-        "\u3242\u3243\u0000\u0000\u0000\u0000\u0000\u3244"+
-        "\u0000\u3245\u3251\u0000\u0000\u0000\u3246\u0000"+
-        "\u0000\u0000\u3247\u0000\u0000\u0000\u3248\u0000"+
-        "\u0000\u0000\u0000\u3249\u0000\u0000\u324A\u324B"+
-        "\u324C\u0000\u0000\u324D\u324E\u324F\u3250\u0000"+
-        "\u3252\u0000\u0000\u0000\u0000\u0000\u0000\u3253"+
-        "\u0000\u3254\u0000\u3255\u3256\u3257\u3258\u0000"+
-        "\u0000\u0000\u0000\u3259\u0000\u0000\u0000\u325A"+
-        "\u325B\u0000\u0000\u0000\u325C\u325D\u0000\u325E"+
-        "\u0000\u325F\u0000\u3260\u3261\u3262\u0000\u0000"+
-        "\u3263\u3264\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3265\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3266\u0000\u0000\u0000\u0000\u3267"+
-        "\u0000\u0000\u0000\u3268\u0000\u3269\u0000\u326A"+
-        "\u326B\u0000\u0000\u0000\u0000\u0000\u0000\u326C"+
-        "\u0000\u0000\u0000\u0000\u326D\u0000\u326E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u326F\u0000"+
-        "\u0000\u0000\u0000\u3270\u3271\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3272\u0000\u0000\u3273\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3274\u0000\u0000\u0000\u0000\u3275\u0000\u0000"+
-        "\u0000\u3276\u0000\u3277\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3278\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3279\u0000\u327A\u0000\u327B\u0000\u327C\u327D"+
-        "\u0000\u0000\u327E\u0000\u0000\u0000\u0000\u0000"+
-        "\u3321\u0000\u0000\u0000\u0000\u0000\u0000\u3322"+
-        "\u0000\u3323\u3324\u3325\u0000\u3326\u0000\u0000"+
-        "\u3327\u0000\u0000\u0000\u0000\u0000\u3328\u0000"+
-        "\u0000\u0000\u3329\u0000\u0000\u332A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u332B\u0000"+
-        "\u0000\u0000\u332C\u332D\u332E\u0000\u0000\u332F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3330\u3331\u0000\u0000\u3332\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3333\u3334\u0000\u3335\u3336\u0000"+
-        "\u3337\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3338\u0000\u0000\u0000\u0000\u0000"+
-        "\u3339\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u333A\u333B\u0000\u0000\u333C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u333D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u333E\u0000\u0000"+
-        "\u0000\u333F\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3340\u0000\u3341"+
-        "\u3342\u0000\u3343\u0000\u3344\u0000\u0000\u3345"+
-        "\u3346\u3347\u0000\u0000\u0000\u0000\u3348\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3349\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u334A"+
-        "\u334B\u334C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u334D\u0000\u334E\u0000\u0000\u334F\u0000\u0000"+
-        "\u0000\u0000\u3350\u0000\u3351\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3352\u0000\u3353\u3354\u3355"+
-        "\u3356\u0000\u3357\u0000\u3358\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3359\u335A\u335B\u335C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u335D"+
-        "\u335E\u0000\u0000\u0000\u0000\u0000\u335F\u3360"+
-        "\u3361\u0000\u3362\u3363\u0000\u3364\u0000\u0000"+
-        "\u3365\u0000\u0000\u0000\u3366\u0000\u3367\u0000"+
-        "\u3368\u0000\u0000\u0000\u3369\u0000\u0000\u336A"+
-        "\u0000\u336B\u0000\u0000\u336C\u0000\u336D\u0000"+
-        "\u0000\u0000\u0000\u336E\u336F\u0000\u0000\u0000"+
-        "\u0000\u3370\u0000\u0000\u0000\u3371\u0000\u0000"+
-        "\u3372\u3373\u3374\u0000\u3375\u0000\u0000\u0000"+
-        "\u3376\u3377\u0000\u0000\u3378\u0000\u3379\u337A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u337B\u0000\u0000\u337C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u337D\u337E\u3421\u0000\u0000\u0000"+
-        "\u0000\u3422\u0000\u3423\u0000\u0000\u0000\u0000"+
-        "\u3424\u0000\u0000\u3425\u3426\u0000\u3427\u3428"+
-        "\u0000\u0000\u0000\u0000\u0000\u3429\u0000\u342A"+
-        "\u342B\u342C\u0000\u342D\u342E\u342F\u0000\u0000"+
-        "\u3430\u0000\u3431\u0000\u0000\u3432\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3433\u3434\u3435\u0000"+
-        "\u0000\u0000\u3436\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3438\u3437\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3439\u0000\u343A\u0000\u0000\u0000\u0000"+
-        "\u0000\u343B\u0000\u343C\u0000\u343D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u343E\u343F\u0000\u0000"+
-        "\u0000\u0000\u3440\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3441\u0000\u0000\u0000\u0000\u3442\u0000"+
-        "\u0000\u0000\u0000\u3443\u0000\u0000\u0000\u3444"+
-        "\u3445\u0000\u0000\u0000\u0000\u0000\u3446\u0000"+
-        "\u0000\u0000\u0000\u3447\u3448\u0000\u0000\u0000"+
-        "\u0000\u3449\u0000\u0000\u0000\u344A\u0000\u0000"+
-        "\u0000\u344B\u0000\u0000\u344C\u0000\u0000\u0000"+
-        "\u0000\u0000\u344D\u344E\u0000\u0000\u0000\u344F"+
-        "\u0000\u0000\u3450\u0000\u3451\u3452\u0000\u3453"+
-        "\u3454\u0000\u3455\u0000\u0000\u3456\u0000\u0000"+
-        "\u3457\u0000\u0000\u0000\u0000\u3458\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3459"+
-        "\u0000\u0000\u345A\u345B\u0000\u345C\u0000\u0000"+
-        "\u0000\u0000\u345D\u0000\u0000\u345E\u345F\u0000"+
-        "\u3460\u0000\u0000\u0000\u0000\u0000\u3461\u3462"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3463\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3464\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3465\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3466\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3467\u0000\u0000\u0000\u0000\u0000\u3468"+
-        "\u3469\u0000\u346A\u0000\u0000\u0000\u0000\u346B"+
-        "\u0000\u346C\u0000\u0000\u346D\u346E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u346F\u3470\u0000\u0000\u3471"+
-        "\u0000\u0000\u0000\u0000\u0000\u3472\u0000\u3473"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3474\u0000"+
-        "\u0000\u0000\u3475\u0000\u3476\u0000\u3477\u3478"+
-        "\u0000\u3479\u0000\u347A\u0000\u347B\u347C\u0000"+
-        "\u0000\u0000\u0000\u0000\u347D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u347E"+
-        "\u0000\u3521\u0000\u3522\u0000\u3523\u0000\u0000"+
-        "\u3524\u3525\u0000\u0000\u0000\u3526\u0000\u0000"+
-        "\u0000\u3527\u0000\u0000\u0000\u3528\u3529\u0000"+
-        "\u0000\u0000\u0000\u0000\u352A\u0000\u0000\u352B"+
-        "\u0000\u352C\u0000\u0000\u0000\u0000\u352D\u352E"+
-        "\u0000\u352F\u3530\u0000\u0000\u3531\u3532\u0000"+
-        "\u0000\u3533\u0000\u0000\u0000\u0000\u0000\u3534"+
-        "\u0000\u3535\u3536\u3537\u0000\u0000\u0000\u3538"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3539\u0000"+
-        "\u0000\u0000\u353A\u0000\u0000\u353B\u353C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u353D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u353E\u0000\u353F\u0000\u0000\u3540"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3541\u0000"+
-        "\u0000\u0000\u0000\u0000\u3542\u0000\u3543\u3544"+
-        "\u3545\u3546\u0000\u0000\u0000\u3547\u0000\u0000"+
-        "\u3548\u3549\u0000\u0000\u354A\u354B\u354C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u354D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u354E\u354F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3550\u0000\u0000\u3551\u3552\u0000"+
-        "\u0000\u0000\u0000\u3553\u3554\u3555\u0000\u0000"+
-        "\u0000\u3556\u0000\u0000\u0000\u0000\u0000\u3557"+
-        "\u0000\u3558\u3559\u0000\u0000\u355A\u0000\u0000"+
-        "\u355B\u355C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u355D\u0000\u355E\u355F\u0000\u0000\u3560\u0000"+
-        "\u3561\u3562\u0000\u0000\u3563\u0000\u3564\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3565"+
-        "\u0000\u3566\u3567\u0000\u0000\u0000\u3568\u0000"+
-        "\u3569\u0000\u0000\u0000\u0000\u0000\u356A\u356B"+
-        "\u0000\u356C\u356D\u356E\u356F\u0000\u0000\u3570"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3571\u3572\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3573\u0000\u0000"+
-        "\u0000\u0000\u3574\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3575"+
-        "\u0000\u3576\u0000\u3577\u0000\u0000\u3578\u0000"+
-        "\u0000\u3579\u0000\u357A\u357B\u0000\u357C\u0000"+
-        "\u0000\u357D\u357E\u3621\u0000\u0000\u0000\u3622"+
-        "\u3623\u0000\u0000\u3624\u0000\u0000\u3625\u0000"+
-        "\u0000\u0000\u3626\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3627\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3628\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3629"+
-        "\u0000\u0000\u0000\u0000\u0000\u362A\u0000\u0000"+
-        "\u362B\u0000\u362C\u0000\u0000\u362D\u362E\u362F"+
-        "\u3630\u3631\u3632\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3633\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3634\u0000\u0000\u0000"+
-        "\u3635\u0000\u0000\u3636\u0000\u3637\u0000\u3638"+
-        "\u0000\u3639\u0000\u363A\u363B\u363C\u0000\u363D"+
-        "\u363E\u363F\u0000\u3640\u3641\u0000\u3642\u0000"+
-        "\u0000\u3643\u0000\u3644\u0000\u3645\u0000\u3646"+
-        "\u0000\u0000\u0000\u0000\u3647\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3648\u0000"+
-        "\u3649\u364A\u364B\u364C\u0000\u0000\u364D\u0000"+
-        "\u0000\u364E\u0000\u0000\u0000\u364F\u0000\u3650"+
-        "\u0000\u3651\u3652\u0000\u0000\u3653\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3654\u3655\u0000\u0000"+
-        "\u3656\u0000\u0000\u3657\u3658\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3659\u0000\u0000"+
-        "\u0000\u365A\u365B\u0000\u0000\u365C\u365D\u365E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u365F\u3660"+
-        "\u3661\u3662\u0000\u3663\u3664\u3665\u0000\u0000"+
-        "\u0000\u3666\u0000\u3667\u0000\u0000\u0000\u3668"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3669\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u366A\u0000\u0000"+
-        "\u0000\u366B\u366C\u366D\u3670\u3671\u0000\u366E"+
-        "\u366F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3672\u0000\u0000\u3673\u3674\u0000\u3675"+
-        "\u0000\u3676\u0000\u0000\u3677\u3678\u3679\u367A"+
-        "\u367B\u0000\u0000\u367D\u0000\u367E\u0000\u0000"+
-        "\u0000\u367C\u0000\u0000\u0000\u0000\u3721\u3722"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-    private final static String innerIndex1=
-        "\u0000\u3723\u3724\u0000\u0000\u0000\u0000\u3725"+
-        "\u0000\u0000\u3726\u0000\u3727\u0000\u0000\u0000"+
-        "\u0000\u3728\u0000\u0000\u0000\u3729\u0000\u0000"+
-        "\u0000\u0000\u372A\u372B\u0000\u372C\u0000\u0000"+
-        "\u372D\u0000\u372E\u372F\u3730\u3731\u0000\u0000"+
-        "\u0000\u3732\u3733\u0000\u3734\u0000\u3735\u3736"+
-        "\u0000\u0000\u0000\u3737\u3738\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3739\u373A\u373B"+
-        "\u0000\u0000\u0000\u0000\u0000\u373C\u373D\u0000"+
-        "\u0000\u0000\u0000\u0000\u373E\u373F\u0000\u0000"+
-        "\u0000\u0000\u3740\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3741\u0000\u0000\u3742\u0000\u3743"+
-        "\u3744\u0000\u0000\u3745\u0000\u3746\u3747\u3748"+
-        "\u3749\u374A\u0000\u374B\u374C\u374D\u0000\u374E"+
-        "\u0000\u374F\u3750\u3751\u3752\u0000\u3753\u0000"+
-        "\u0000\u3754\u0000\u3755\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3756\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3757\u3760\u0000\u3758"+
-        "\u0000\u3759\u375A\u0000\u375B\u375C\u375D\u375E"+
-        "\u0000\u375F\u0000\u0000\u0000\u0000\u0000\u3761"+
-        "\u3762\u3763\u0000\u0000\u3764\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3765\u0000\u0000\u0000\u0000\u3766\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3767"+
-        "\u3768\u0000\u0000\u0000\u3769\u0000\u0000\u376A"+
-        "\u0000\u0000\u0000\u0000\u0000\u376B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u376C\u376D\u0000"+
-        "\u0000\u377E\u0000\u0000\u376E\u0000\u376F\u3770"+
-        "\u0000\u3771\u0000\u0000\u0000\u3772\u0000\u0000"+
-        "\u3773\u0000\u0000\u0000\u0000\u3774\u3775\u0000"+
-        "\u3776\u0000\u0000\u0000\u0000\u3777\u3778\u3779"+
-        "\u0000\u0000\u0000\u377A\u377B\u0000\u0000\u0000"+
-        "\u377C\u377D\u0000\u0000\u3821\u3822\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3823\u0000\u0000\u3824\u3825"+
-        "\u3826\u0000\u0000\u0000\u0000\u0000\u3827\u3828"+
-        "\u0000\u0000\u0000\u0000\u0000\u3829\u0000\u0000"+
-        "\u0000\u0000\u382A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u382B\u0000\u0000\u0000\u0000\u0000\u382C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u382D\u0000\u0000\u382E\u382F\u0000\u3830"+
-        "\u3831\u0000\u0000\u0000\u0000\u3832\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3833"+
-        "\u0000\u3834\u0000\u0000\u3835\u0000\u0000\u3836"+
-        "\u3837\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3838\u0000\u0000\u0000\u3839\u0000\u0000\u383A"+
-        "\u383B\u383C\u0000\u0000\u0000\u0000\u0000\u383D"+
-        "\u383E\u383F\u3840\u0000\u3841\u3842\u0000\u3843"+
-        "\u3844\u0000\u0000\u0000\u3845\u0000\u3846\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3847\u0000\u0000"+
-        "\u3848\u3849\u384A\u0000\u0000\u0000\u384B\u0000"+
-        "\u0000\u384C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u384D\u384E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3850\u0000\u0000\u0000"+
-        "\u0000\u0000\u3851\u0000\u384F\u0000\u0000\u0000"+
-        "\u3852\u0000\u0000\u0000\u0000\u3853\u3854\u0000"+
-        "\u3855\u0000\u3856\u0000\u3857\u0000\u3858\u0000"+
-        "\u0000\u0000\u3859\u0000\u0000\u385A\u0000\u0000"+
-        "\u0000\u385B\u385C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u385D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u385E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u385F\u3860\u0000"+
-        "\u0000\u0000\u0000\u3861\u3862\u0000\u0000\u0000"+
-        "\u0000\u0000\u3863\u3864\u3865\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3867\u0000\u0000"+
-        "\u0000\u3868\u0000\u3869\u386A\u0000\u0000\u0000"+
-        "\u386B\u0000\u0000\u0000\u0000\u0000\u0000\u386C"+
-        "\u386D\u0000\u0000\u386E\u0000\u386F\u3870\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3871"+
-        "\u0000\u0000\u0000\u3872\u0000\u0000\u3873\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3874\u3875\u0000\u0000\u0000\u0000"+
-        "\u0000\u3876\u0000\u3877\u0000\u3878\u3879\u387A"+
-        "\u0000\u387B\u0000\u387C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u387D\u0000\u387E\u0000\u3921"+
-        "\u0000\u0000\u3922\u0000\u0000\u3923\u3924\u0000"+
-        "\u0000\u3925\u0000\u3926\u3927\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3928\u3929\u0000\u392A\u0000"+
-        "\u0000\u0000\u392B\u0000\u0000\u392C\u0000\u392D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u392E"+
-        "\u0000\u0000\u0000\u0000\u392F\u0000\u0000\u3930"+
-        "\u0000\u0000\u0000\u0000\u0000\u3931\u3932\u3933"+
-        "\u3934\u0000\u0000\u3935\u0000\u0000\u0000\u3936"+
-        "\u0000\u0000\u3937\u0000\u3938\u0000\u0000\u0000"+
-        "\u0000\u3939\u0000\u393A\u393B\u0000\u0000\u0000"+
-        "\u393C\u0000\u393D\u0000\u0000\u393E\u0000\u0000"+
-        "\u0000\u0000\u393F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3940\u3941\u3942"+
-        "\u0000\u0000\u0000\u3943\u3944\u0000\u0000\u3945"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3946\u3947"+
-        "\u0000\u3948\u3949\u0000\u394A\u0000\u0000\u394B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u394C\u0000\u0000\u0000\u394D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u394E\u394F\u3950\u0000"+
-        "\u0000\u0000\u3951\u3952\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3953\u0000"+
-        "\u0000\u0000\u0000\u3954\u3955\u0000\u0000\u3956"+
-        "\u3957\u0000\u3958\u0000\u0000\u3959\u0000\u0000"+
-        "\u395A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u395B\u395C\u0000\u395D"+
-        "\u395E\u0000\u0000\u0000\u395F\u0000\u0000\u0000"+
-        "\u3960\u0000\u0000\u0000\u0000\u3961\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3962\u0000"+
-        "\u0000\u0000\u0000\u3963\u0000\u3964\u0000\u3965"+
-        "\u0000\u0000\u0000\u0000\u0000\u3966\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3967"+
-        "\u0000\u0000\u3968\u3969\u0000\u0000\u396A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u396B\u0000\u0000\u0000\u0000"+
-        "\u396C\u0000\u0000\u396D\u0000\u0000\u396E\u0000"+
-        "\u0000\u396F\u0000\u0000\u3970\u0000\u3971\u3972"+
-        "\u3973\u0000\u3974\u0000\u0000\u0000\u0000\u3975"+
-        "\u0000\u0000\u0000\u0000\u3976\u0000\u0000\u0000"+
-        "\u0000\u3977\u3978\u3979\u0000\u397A\u0000\u0000"+
-        "\u397B\u0000\u397C\u397D\u0000\u0000\u0000\u397E"+
-        "\u0000\u0000\u0000\u0000\u3A21\u0000\u3A22\u0000"+
-        "\u3A23\u0000\u0000\u0000\u0000\u0000\u0000\u3A24"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3A25\u0000\u3A26\u0000\u0000\u0000"+
-        "\u3A27\u0000\u0000\u0000\u0000\u3A28\u0000\u0000"+
-        "\u0000\u0000\u3A29\u0000\u0000\u0000\u3A2A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3A2B\u3A2C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3A2D\u0000\u0000"+
-        "\u3A2E\u3A2F\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3A30\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3A31"+
-        "\u0000\u3A33\u0000\u3A34\u0000\u3A35\u0000\u0000"+
-        "\u0000\u3A36\u0000\u0000\u0000\u3A37\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3A38\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3A32\u0000\u0000\u0000"+
-        "\u3A39\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3A3A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3A3B\u3A3C\u0000\u0000\u0000"+
-        "\u0000\u0000\u3A3D\u0000\u0000\u0000\u3A3E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3A3F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3A40\u0000\u0000\u0000\u0000\u0000\u3A41\u3A42"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3A43\u3A44\u3A45\u3A46"+
-        "\u0000\u3A47\u0000\u0000\u3A48\u0000\u3A49\u0000"+
-        "\u0000\u0000\u3A4A\u0000\u0000\u0000\u3A4B\u0000"+
-        "\u3A4C\u3A4D\u0000\u3A4E\u3A4F\u0000\u3A50\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3A51\u3A52\u0000\u0000\u3A53\u3A54\u0000\u3A55"+
-        "\u0000\u3A56\u3A57\u0000\u0000\u0000\u0000\u3A58"+
-        "\u0000\u0000\u3A59\u0000\u3A5A\u0000\u0000\u0000"+
-        "\u3A5B\u3A5C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3A5D\u0000\u3A5E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3A5F\u3A60"+
-        "\u3A61\u3A62\u3A63\u0000\u0000\u0000\u0000\u0000"+
-        "\u3A64\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3A65"+
-        "\u0000\u3A66\u0000\u0000\u3A67\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3A68\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3A69\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3A6A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3A6B\u3A6C"+
-        "\u0000\u0000\u0000\u3A6D\u0000\u0000\u3A6E\u0000"+
-        "\u0000\u3A6F\u0000\u3A70\u3A71\u0000\u3A72\u0000"+
-        "\u3A73\u0000\u3A74\u0000\u0000\u3A75\u3A76\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3A77\u3A78\u0000\u3A79\u0000\u0000\u0000"+
-        "\u0000\u0000\u3A7A\u3A7B\u0000\u0000\u0000\u3A7C"+
-        "\u3A7D\u3A7E\u0000\u0000\u0000\u3B21\u0000\u0000"+
-        "\u3B22\u0000\u0000\u0000\u3B23\u3B24\u0000\u0000"+
-        "\u0000\u0000\u3B25\u3B26\u3B27\u3B28\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3B29"+
-        "\u3B2A\u0000\u3B2B\u0000\u0000\u0000\u0000\u3B2C"+
-        "\u0000\u0000\u3B2D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3B2E\u0000\u3B2F"+
-        "\u3B30\u0000\u3B31\u3B32\u0000\u0000\u3B33\u0000"+
-        "\u0000\u0000\u3B34\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3B35\u0000\u3B36\u3B37\u0000\u0000"+
-        "\u0000\u0000\u3B38\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3B39\u0000\u3B3A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3B3B\u0000\u0000\u0000\u0000\u3B3D"+
-        "\u0000\u0000\u0000\u0000\u0000\u3B3C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3B3E\u0000"+
-        "\u0000\u3B3F\u3B40\u0000\u3B41\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3B42\u0000\u0000\u0000\u0000\u3B43\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3B44\u0000\u0000"+
-        "\u0000\u0000\u3B45\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3B47\u3B48\u0000\u3B49\u3B4A"+
-        "\u0000\u0000\u0000\u3B46\u0000\u0000\u0000\u0000"+
-        "\u0000\u3B4B\u0000\u0000\u3B4C\u0000\u0000\u0000"+
-        "\u0000\u3B4D\u0000\u0000\u0000\u3B4E\u0000\u3B4F"+
-        "\u0000\u0000\u3B50\u3B51\u0000\u0000\u3B52\u0000"+
-        "\u3B53\u0000\u3B57\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3B55\u0000\u0000\u0000\u3B54\u0000\u0000"+
-        "\u0000\u3B56\u0000\u0000\u0000\u0000\u0000\u3B58"+
-        "\u3B59\u3B5A\u3B5B\u0000\u3B5C\u0000\u0000\u0000"+
-        "\u0000\u0000\u3B5D\u0000\u0000\u3B5E\u0000\u0000"+
-        "\u3B5F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3B60\u3B61\u0000\u0000\u0000\u3B62\u3B63"+
-        "\u0000\u3B64\u0000\u3B65\u0000\u0000\u0000\u0000"+
-        "\u3B66\u0000\u3B67\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3B68\u3B69\u3B6A\u3B6B\u0000\u0000"+
-        "\u0000\u3B6C\u0000\u3B6D\u0000\u0000\u0000\u3B6E"+
-        "\u3B6F\u0000\u0000\u0000\u0000\u0000\u0000\u3B70"+
-        "\u0000\u0000\u0000\u3B71\u0000\u0000\u0000\u0000"+
-        "\u3B72\u0000\u6674\u0000\u3B73\u0000\u0000\u0000"+
-        "\u3B74\u3B75\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3B76\u0000\u0000\u0000\u3B77"+
-        "\u0000\u0000\u0000\u3B78\u0000\u0000\u3B7A\u0000"+
-        "\u3B79\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3B7B\u3B7C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3B7D\u0000\u0000\u0000\u3B7E\u0000\u0000\u0000"+
-        "\u0000\u3C21\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3C22\u3C23\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3C24\u0000\u0000\u0000\u0000\u0000\u0000\u3C25"+
-        "\u0000\u0000\u0000\u0000\u0000\u3C26\u0000\u0000"+
-        "\u0000\u0000\u3C27\u0000\u3C28\u3C29\u0000\u0000"+
-        "\u3C2A\u0000\u0000\u0000\u0000\u0000\u0000\u3C2B"+
-        "\u3C2C\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3C2E\u0000\u0000\u0000\u0000\u0000\u3C2D\u0000"+
-        "\u0000\u0000\u3C2F\u0000\u0000\u3C30\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3C31\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3C34\u0000\u3C32\u0000\u0000\u0000\u0000"+
-        "\u3C33\u3C35\u0000\u0000\u0000\u0000\u3C36\u0000"+
-        "\u3C37\u0000\u0000\u3C38\u3C39\u0000\u3C3A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3C3B\u0000\u3C3C\u3C3D\u3C3E\u3C3F\u3C40\u0000"+
-        "\u3C41\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3C42\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3C43\u0000\u0000\u3C44\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3C45\u0000\u3C46\u3C47\u0000\u0000"+
-        "\u3C48\u0000\u3C49\u0000\u3C4A\u0000\u0000\u0000"+
-        "\u0000\u3C4B\u0000\u3C4C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3C4D\u3C4E\u3C4F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3C50\u0000"+
-        "\u0000\u0000\u0000\u3C52\u3C51\u0000\u3C53\u0000"+
-        "\u0000\u3C54\u3C55\u0000\u3C56\u3C57\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3C58\u0000\u3C59\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3C5A\u0000\u0000"+
-        "\u0000\u0000\u0000\u3C5B\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3C5C\u0000\u0000\u0000\u3C5D\u3C5E"+
-        "\u3C5F\u0000\u0000\u0000\u0000\u0000\u3C60\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3C61\u0000\u0000\u3C62\u3C63\u0000\u0000"+
-        "\u0000\u3C64\u3C65\u3C66\u3C67\u0000\u0000\u0000"+
-        "\u3C68\u0000\u0000\u3C69\u3C6A\u0000\u3C6B\u0000"+
-        "\u3C6C\u0000\u0000\u0000\u3C6D\u0000\u3C6E\u0000"+
-        "\u0000\u0000\u0000\u3C6F\u0000\u3C70\u0000\u3C71"+
-        "\u3C72\u0000\u0000\u0000\u3C73\u3C74\u0000\u3C75"+
-        "\u0000\u0000\u0000\u0000\u0000\u3C76\u0000\u0000"+
-        "\u3C77\u0000\u0000\u0000\u3C78\u0000\u0000\u0000"+
-        "\u3C79\u0000\u0000\u3C7A\u0000\u0000\u0000\u0000"+
-        "\u3C7B\u0000\u0000\u3C7C\u3C7D\u0000\u0000\u3C7E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3D21"+
-        "\u0000\u0000\u3D22\u0000\u3D23\u3D24\u0000\u0000"+
-        "\u3D25\u0000\u3D26\u0000\u0000\u3D27\u3D28\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3D29\u0000\u0000\u0000\u3D2A\u0000\u3D2B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3D2C\u0000"+
-        "\u0000\u0000\u0000\u0000\u3D2D\u3D2E\u0000\u0000"+
-        "\u0000\u0000\u3D2F\u0000\u3D32\u0000\u0000\u3D30"+
-        "\u0000\u0000\u0000\u3D31\u3D33\u0000\u0000\u3D34"+
-        "\u3D35\u3D36\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3D37\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3D38\u0000\u0000\u3D39"+
-        "\u3D3A\u3D3B\u0000\u3D3C\u0000\u0000\u0000\u0000"+
-        "\u3D3D\u3D3E\u3D3F\u3D40\u3D41\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3D42\u0000"+
-        "\u0000\u3D43\u3D44\u0000\u0000\u0000\u0000\u0000"+
-        "\u3D45\u3D46\u3D47\u0000\u3D48\u3D49\u3D4A\u3D4B"+
-        "\u0000\u0000\u3D4C\u3D4D\u0000\u0000\u3D4E\u0000"+
-        "\u0000\u0000\u3D4F\u0000\u3D50\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3D51"+
-        "\u0000\u0000\u3D52\u0000\u0000\u3D53\u0000\u0000"+
-        "\u0000\u0000\u0000\u3D54\u3D55\u0000\u0000\u3D56"+
-        "\u3D57\u0000\u3D58\u0000\u0000\u0000\u0000\u3D59"+
-        "\u0000\u0000\u0000\u0000\u3D5A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3D5B\u0000\u0000"+
-        "\u0000\u0000\u0000\u3D5C\u0000\u3D5D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3D5E\u0000\u0000\u0000\u0000\u0000\u0000\u3D5F"+
-        "\u3D60\u3D61\u0000\u0000\u3D62\u0000\u0000\u0000"+
-        "\u0000\u3D63\u0000\u0000\u3D64\u0000\u3D65\u3D66"+
-        "\u0000\u0000\u0000\u0000\u0000\u3D67\u0000\u0000"+
-        "\u0000\u3D68\u0000\u0000\u0000\u0000\u0000\u3D69"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3D6A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3D6B\u3D6C"+
-        "\u0000\u0000\u3D6D\u0000\u0000\u0000\u3D6E\u0000"+
-        "\u3D6F\u0000\u3D70\u0000\u0000\u0000\u3D71\u0000"+
-        "\u0000\u3D72\u0000\u3D73\u0000\u3D74\u0000\u0000"+
-        "\u3D75\u0000\u0000\u0000\u0000\u3D76\u3D77\u0000"+
-        "\u0000\u0000\u3D78\u0000\u3D79\u3D7A\u0000\u0000"+
-        "\u3D7B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3D7C\u3D7D\u0000\u0000\u0000\u0000\u0000\u3D7E"+
-        "\u0000\u0000\u0000\u3E21\u0000\u0000\u3E22\u0000"+
-        "\u0000\u0000\u3E23\u0000\u3E24\u0000\u0000\u0000"+
-        "\u3E25\u3E26\u3E27\u3E28\u0000\u0000\u3E29\u3E2A"+
-        "\u0000\u0000\u0000\u0000\u3E2B\u3E2C\u0000\u0000"+
-        "\u0000\u3E2D\u0000\u3E2E\u0000\u3E2F\u3E30\u0000"+
-        "\u0000\u0000\u3E31\u0000\u0000\u3E32\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3E33\u0000\u0000\u3E34\u0000\u0000"+
-        "\u3E35\u0000\u0000\u0000\u3E36\u3E37\u0000\u0000"+
-        "\u0000\u0000\u3E38\u0000\u0000\u0000\u0000\u3E39"+
-        "\u0000\u0000\u3E3A\u0000\u3E3B\u0000\u0000\u0000"+
-        "\u3E3C\u3E3D\u3E3E\u3E3F\u3E40\u0000\u3E41\u3E42"+
-        "\u0000\u3E43\u0000\u0000\u3E44\u0000\u3E45\u0000"+
-        "\u0000\u0000\u3E46\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3E47\u3E48\u0000\u0000\u0000\u0000"+
-        "\u3E49\u3E4A\u0000\u0000\u0000\u3E4B\u3E4C\u3E4D"+
-        "\u0000\u3E4E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3E4F\u0000\u0000\u0000\u3E50\u3E51\u0000"+
-        "\u0000\u3E52\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3E53\u0000"+
-        "\u3E54\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3E55\u0000\u0000\u0000"+
-        "\u0000\u0000\u3E56\u0000\u0000\u0000\u0000\u0000"+
-        "\u3E57\u0000\u0000\u3E58\u3E59\u0000\u0000\u3E5A"+
-        "\u3E5B\u3E5C\u0000\u3E5D\u3E5E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3E5F\u0000\u3E60\u0000\u0000"+
-        "\u0000\u0000\u3E61\u3E62\u0000\u0000\u0000\u3E63"+
-        "\u3E64\u0000\u0000\u0000\u3E65\u3E66\u0000\u3E67"+
-        "\u3E68\u0000\u0000\u0000\u0000\u3E69\u0000\u0000"+
-        "\u3E6A\u0000\u3E6B\u0000\u0000\u3E6C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3E6D\u3E6E\u0000\u0000\u3E6F\u0000\u0000\u0000"+
-        "\u3E70\u3E71\u3E72\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3E73\u3E74"+
-        "\u0000\u0000\u0000\u0000\u0000\u3E75\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3E76\u3E77\u3E78\u3E79"+
-        "\u0000\u3E7A\u3E7B\u0000\u0000\u3E7E\u0000\u3E7C"+
-        "\u0000\u3E7D\u0000\u0000\u3F21\u3F22\u0000\u3F23"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3F24\u0000\u3F25\u3F26\u0000\u0000\u3F27"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3F28\u0000\u3F29\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3F2A\u0000\u0000\u0000"+
-        "\u3F2B\u0000\u3F2C\u3F2D\u0000\u0000\u0000\u3F2E"+
-        "\u0000\u3F2F\u0000\u3F30\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3F31\u0000\u0000\u0000\u3F32\u0000\u0000"+
-        "\u0000\u0000\u3F33\u3F34\u3F35\u0000\u3F36\u0000"+
-        "\u0000\u0000\u0000\u0000\u3F37\u0000\u0000\u0000"+
-        "\u3F38\u3F39\u3F3A\u0000\u3F3B\u0000\u3F3C\u0000"+
-        "\u0000\u0000\u3F3D\u0000\u3F3E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3F3F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3F40\u0000\u3F41"+
-        "\u0000\u0000\u0000\u3F42\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3F43\u0000\u0000\u3F44\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3F45\u3F46\u3F47"+
-        "\u3F48\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3F49\u0000"+
-        "\u3F4A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3F4B\u0000\u0000\u3F4C\u3F4D"+
-        "\u0000\u0000\u3F4E\u0000\u0000\u0000\u3F4F\u3F50"+
-        "\u0000\u0000\u0000\u0000\u3F51\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3F52\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3F53\u3F54\u0000"+
-        "\u0000\u0000\u3F55\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3F56\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3F57\u0000\u3F58\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3F59\u3F5A\u0000\u0000"+
-        "\u0000\u0000\u0000\u3F5B\u3F5C\u0000\u0000\u0000"+
-        "\u0000\u0000\u3F5D\u3F5E\u0000\u3F5F\u0000\u0000"+
-        "\u3F60\u0000\u0000\u3F61\u0000\u0000\u3F62\u0000"+
-        "\u3F63\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3F64\u3F65\u0000\u0000\u3F66\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3F67\u3F68\u0000"+
-        "\u0000\u3F69\u0000\u0000\u3F6A\u0000\u0000\u0000"+
-        "\u0000\u3F6B\u3F6C\u3F6D\u3F6E\u0000\u3F6F\u0000"+
-        "\u0000\u0000\u3F70\u3F71\u0000\u0000\u3F72\u0000"+
-        "\u0000\u0000\u3F73\u3F74\u3F75\u0000\u0000\u0000"+
-        "\u3F76\u0000\u0000\u3F77\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3F78\u3F79\u0000"+
-        "\u0000\u0000\u0000\u0000\u3F7A\u3F7B\u0000\u0000"+
-        "\u0000\u3F7C\u0000\u0000\u3F7D\u3F7E\u0000\u0000"+
-        "\u4021\u0000\u0000\u0000\u4022\u4023\u0000\u4024"+
-        "\u0000\u0000\u4025\u0000\u4026\u0000\u0000\u4027"+
-        "\u0000\u0000\u4028\u0000\u0000\u0000\u0000\u0000"+
-        "\u4029\u0000\u0000\u0000\u402A\u402B\u0000\u0000"+
-        "\u0000\u402C\u402D\u0000\u0000\u0000\u402E\u0000"+
-        "\u0000\u0000\u0000\u0000\u402F\u0000\u4030\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4031\u4032\u4033"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4034\u0000\u0000"+
-        "\u0000\u4035\u0000\u0000\u0000\u4036\u0000\u0000"+
-        "\u4037\u0000\u0000\u0000\u0000\u0000\u4038\u0000"+
-        "\u0000\u4039\u0000\u403A\u403B\u403C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u403D\u0000\u0000\u0000"+
-        "\u403E\u0000\u0000\u0000\u0000\u403F\u0000\u0000"+
-        "\u0000\u0000\u4040\u0000\u4041\u0000\u0000\u0000"+
-        "\u0000\u0000\u4042\u4043\u0000\u4044\u0000\u0000"+
-        "\u4045\u4046\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4047\u4048\u0000\u0000\u0000\u0000\u0000"+
-        "\u4049\u0000\u404A\u0000\u404B\u0000\u0000\u0000"+
-        "\u404C\u0000\u0000\u0000\u0000\u0000\u404D\u0000"+
-        "\u404E\u0000\u404F\u0000\u4050\u4051\u0000\u0000"+
-        "\u0000\u4052\u4053\u0000\u0000\u0000\u0000\u4054"+
-        "\u4055\u0000\u0000\u0000\u0000\u4056\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4057\u0000\u4058"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4059\u0000\u0000\u0000\u405A"+
-        "\u0000\u405B\u405C\u405D\u405E\u0000\u0000\u0000"+
-        "\u0000\u0000\u405F\u4060\u4061\u4062\u0000\u4063"+
-        "\u4064\u4065\u0000\u4066\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4067\u0000\u0000"+
-        "\u0000\u0000\u0000\u4068\u4069\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u406A\u0000\u406B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u406C\u0000\u406D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u406E"+
-        "\u406F\u4070\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4071\u4072\u0000\u4073\u0000\u4074\u0000\u4075"+
-        "\u0000\u4076\u0000\u4077\u0000\u0000\u4078\u0000"+
-        "\u4079\u0000\u0000\u0000\u407A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u407B\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u407C\u407D\u407E"+
-        "\u0000\u0000\u0000\u0000\u4121\u0000\u0000\u0000"+
-        "\u0000\u4122\u4123\u4124\u4125\u0000\u4126\u0000"+
-        "\u4127\u4128\u0000\u0000\u0000\u4129\u0000\u412A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u412B\u412C\u0000\u0000"+
-        "\u0000\u412D\u412E\u0000\u0000\u412F\u0000\u0000"+
-        "\u4130\u0000\u0000\u0000\u0000\u4131\u0000\u4132"+
-        "\u0000\u0000\u0000\u4133\u0000\u0000\u0000\u4134"+
-        "\u0000\u4135\u0000\u0000\u4136\u0000\u0000\u0000"+
-        "\u4137\u4138\u4139\u0000\u0000\u0000\u0000\u413A"+
-        "\u0000\u0000\u0000\u413B\u413C\u0000\u413D\u0000"+
-        "\u0000\u413E\u0000\u413F\u0000\u0000\u4140\u4141"+
-        "\u0000\u0000\u4142\u0000\u0000\u0000\u4143\u0000"+
-        "\u0000\u4144\u0000\u0000\u0000\u0000\u4145\u0000"+
-        "\u0000\u4146\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4147\u0000\u4148\u4149\u0000\u0000"+
-        "\u0000\u0000\u0000\u414A\u0000\u0000\u0000\u414B"+
-        "\u0000\u414C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u414D\u0000\u414E\u0000\u414F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4150"+
-        "\u4151\u0000\u0000\u0000\u0000\u0000\u0000\u4152"+
-        "\u0000\u0000\u0000\u4153\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4154\u0000\u0000\u4155\u0000\u0000"+
-        "\u0000\u4156\u0000\u0000\u0000\u4157\u0000\u0000"+
-        "\u0000\u0000\u4158\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4159\u0000\u0000\u415A\u0000\u0000"+
-        "\u415B\u0000\u0000\u0000\u0000\u415C\u0000\u0000"+
-        "\u415D\u0000\u0000\u415E\u0000\u0000\u415F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4160\u0000"+
-        "\u0000\u0000\u4161\u4162\u4163\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4164"+
-        "\u0000\u0000\u4165\u0000\u0000\u0000\u0000\u0000"+
-        "\u4166\u4167\u0000\u0000\u0000\u0000\u4168\u0000"+
-        "\u4169\u0000\u0000\u0000\u416A\u0000\u416B\u0000"+
-        "\u416C\u0000\u0000\u0000\u0000\u0000\u0000\u416D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u416E\u0000\u416F\u0000\u4170\u4171\u0000\u0000"+
-        "\u0000\u4172\u0000\u0000\u0000\u0000\u4173\u4174"+
-        "\u4175\u0000\u0000\u0000\u4176\u0000\u0000\u0000"+
-        "\u4177\u4178\u0000\u0000\u0000\u4179\u0000\u0000"+
-        "\u0000\u417A\u417B\u0000\u0000\u417C\u417D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u417E\u4221\u0000"+
-        "\u0000\u4222\u4223\u4224\u4225\u0000\u4226\u0000"+
-        "\u0000\u4227\u4228\u4229\u422A\u0000\u422B\u0000"+
-        "\u422C\u422D\u0000\u422E\u0000\u0000\u0000\u4230"+
-        "\u0000\u422F\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4231\u0000\u0000\u0000\u0000\u4232\u4233\u0000"+
-        "\u0000\u0000\u4234\u0000\u4235\u0000\u4237\u0000"+
-        "\u0000\u4236\u0000\u0000\u0000\u0000\u0000\u4238"+
-        "\u4239\u423A\u0000\u423B\u423C\u0000\u0000\u0000"+
-        "\u423D\u423E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4240\u4241\u4242\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4244\u0000\u4245\u0000\u4247"+
-        "\u4248\u4249\u0000\u424A\u424C\u0000\u4243\u4246"+
-        "\u424B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u424D\u424E\u424F\u0000\u0000"+
-        "\u4250\u0000\u4251\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4252\u4253\u4254\u4255\u0000\u0000\u4256"+
-        "\u4257\u0000\u0000\u0000\u4258\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4259\u0000\u0000"+
-        "\u0000\u425A\u425B\u0000\u0000\u425C\u0000\u0000"+
-        "\u0000\u0000\u0000\u425D\u0000\u0000\u0000\u425E"+
-        "\u425F\u0000\u4260\u4261\u0000\u0000\u0000\u0000"+
-        "\u4262\u0000\u0000\u0000\u4263\u0000\u4264\u4265"+
-        "\u0000\u0000\u0000\u0000\u4266\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4267\u0000\u0000\u0000\u4268"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4269\u0000\u0000\u426A\u426B\u0000\u426C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u426D\u423F\u0000\u0000\u0000\u0000";
-
-    private final static String innerIndex2=
-        "\u0000\u0000\u0000\u0000\u0000\u426E\u0000\u426F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4270\u0000"+
-        "\u0000\u0000\u0000\u4271\u0000\u0000\u0000\u0000"+
-        "\u0000\u4272\u0000\u0000\u4273\u0000\u0000\u0000"+
-        "\u4274\u0000\u4275\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4276\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4277\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4278\u0000\u4279"+
-        "\u427A\u0000\u0000\u0000\u427B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u427C\u427D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u427E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4321\u0000"+
-        "\u0000\u0000\u0000\u0000\u4322\u0000\u4323\u0000"+
-        "\u0000\u0000\u0000\u0000\u4324\u0000\u4325\u0000"+
-        "\u0000\u0000\u0000\u4326\u0000\u0000\u0000\u0000"+
-        "\u0000\u4327\u0000\u0000\u4328\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4329\u432A"+
-        "\u0000\u432B\u0000\u432C\u0000\u0000\u432D\u0000"+
-        "\u432E\u432F\u0000\u4330\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4331\u4332\u4333\u0000\u0000\u4334\u0000\u0000"+
-        "\u0000\u0000\u0000\u4335\u4336\u4337\u0000\u0000"+
-        "\u4339\u0000\u433A\u433B\u0000\u433C\u0000\u0000"+
-        "\u433D\u433E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u433F\u0000\u0000\u0000\u0000\u4340"+
-        "\u0000\u4341\u0000\u0000\u4342\u0000\u0000\u0000"+
-        "\u0000\u4343\u0000\u0000\u0000\u0000\u4344\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4345\u0000\u4346\u0000\u0000\u0000\u4347\u4348"+
-        "\u0000\u4338\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u434A\u0000\u0000\u0000"+
-        "\u0000\u434B\u0000\u0000\u0000\u434C\u0000\u434D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u434F"+
-        "\u434E\u0000\u0000\u0000\u4350\u4351\u0000\u4352"+
-        "\u4353\u4354\u0000\u4355\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4356\u0000\u0000\u0000\u4357"+
-        "\u0000\u0000\u0000\u0000\u4358\u4359\u0000\u0000"+
-        "\u0000\u0000\u435A\u0000\u435B\u0000\u0000\u0000"+
-        "\u0000\u0000\u4349\u0000\u0000\u435C\u0000\u435D"+
-        "\u435E\u0000\u0000\u435F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4360\u0000\u0000\u4361\u4362"+
-        "\u4363\u4364\u4365\u0000\u0000\u4366\u0000\u0000"+
-        "\u0000\u4367\u4368\u4369\u436A\u0000\u0000\u0000"+
-        "\u0000\u0000\u436B\u0000\u436C\u0000\u436D\u0000"+
-        "\u436E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u436F\u0000"+
-        "\u4370\u0000\u4371\u0000\u4372\u0000\u0000\u0000"+
-        "\u0000\u4373\u0000\u4374\u0000\u4375\u0000\u0000"+
-        "\u0000\u4376\u4377\u0000\u0000\u0000\u4378\u0000"+
-        "\u0000\u0000\u4379\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u437A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u437B\u0000\u0000"+
-        "\u437C\u0000\u0000\u0000\u437D\u0000\u0000\u437E"+
-        "\u4421\u4422\u0000\u4423\u0000\u0000\u4424\u0000"+
-        "\u0000\u4425\u0000\u0000\u4426\u4427\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4428\u0000\u0000"+
-        "\u4429\u0000\u442A\u442B\u442C\u442D\u0000\u0000"+
-        "\u442E\u442F\u0000\u0000\u0000\u4430\u4431\u0000"+
-        "\u0000\u0000\u0000\u4432\u4433\u4434\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4435\u0000"+
-        "\u0000\u4436\u4437\u0000\u0000\u0000\u0000\u0000"+
-        "\u4438\u4439\u0000\u443A\u0000\u0000\u443B\u443C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u443D\u0000\u443E\u0000\u443F\u0000\u0000"+
-        "\u4440\u0000\u0000\u4441\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4442\u0000\u0000\u4443\u0000\u0000"+
-        "\u0000\u4444\u0000\u0000\u0000\u0000\u4445\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4446"+
-        "\u0000\u0000\u0000\u4447\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4448\u4449\u444A\u444B\u0000"+
-        "\u444C\u444D\u0000\u0000\u444E\u0000\u0000\u0000"+
-        "\u444F\u4450\u4451\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4452\u4453\u0000\u0000\u0000\u4454"+
-        "\u4455\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4456\u0000\u0000"+
-        "\u0000\u0000\u4457\u0000\u0000\u0000\u4458\u0000"+
-        "\u4459\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u445A\u0000\u0000\u0000\u445B\u445C\u0000"+
-        "\u445D\u0000\u0000\u445E\u0000\u445F\u0000\u4460"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4461"+
-        "\u4462\u0000\u4463\u0000\u4464\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4465\u0000\u0000"+
-        "\u4466\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4467\u0000\u0000\u0000\u0000\u4468\u4469"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u446A\u0000\u0000\u446B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u446C\u446D"+
-        "\u0000\u446E\u0000\u446F\u0000\u4470\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4471\u0000"+
-        "\u4472\u4473\u0000\u4474\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4475"+
-        "\u0000\u4476\u0000\u0000\u0000\u4477\u0000\u0000"+
-        "\u0000\u0000\u4478\u0000\u0000\u4479\u0000\u0000"+
-        "\u447A\u0000\u0000\u0000\u447B\u0000\u0000\u0000"+
-        "\u447C\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u447D\u0000\u447E\u0000\u4521\u0000\u0000\u4522"+
-        "\u0000\u0000\u0000\u4523\u0000\u0000\u4524\u4525"+
-        "\u0000\u0000\u0000\u0000\u0000\u4526\u4527\u0000"+
-        "\u0000\u4528\u4529\u0000\u0000\u0000\u452A\u0000"+
-        "\u452B\u452C\u452D\u0000\u0000\u452E\u452F\u0000"+
-        "\u0000\u0000\u0000\u4530\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4531\u0000\u0000\u4532"+
-        "\u0000\u0000\u4533\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4534\u0000\u4535\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4536\u0000"+
-        "\u0000\u4537\u0000\u4538\u0000\u0000\u4539\u453A"+
-        "\u0000\u453B\u0000\u453C\u0000\u0000\u0000\u0000"+
-        "\u0000\u453D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u453E\u0000\u453F\u4540\u4541"+
-        "\u0000\u0000\u0000\u0000\u0000\u4542\u0000\u0000"+
-        "\u0000\u0000\u0000\u4543\u0000\u0000\u0000\u4544"+
-        "\u4545\u4546\u0000\u0000\u4547\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4548\u4549\u454A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u454B\u0000"+
-        "\u454D\u454C\u0000\u0000\u454E\u0000\u0000\u0000"+
-        "\u454F\u0000\u0000\u0000\u4550\u4551\u4552\u0000"+
-        "\u0000\u0000\u0000\u0000\u4553\u4554\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4555\u0000\u0000\u4556"+
-        "\u0000\u0000\u0000\u0000\u4557\u0000\u0000\u0000"+
-        "\u4558\u4559\u455A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u455B\u455C\u0000\u0000"+
-        "\u0000\u0000\u455D\u455E\u0000\u0000\u455F\u4560"+
-        "\u0000\u4561\u0000\u0000\u0000\u0000\u0000\u4562"+
-        "\u4563\u4564\u0000\u0000\u0000\u0000\u0000\u4565"+
-        "\u0000\u0000\u0000\u4566\u0000\u0000\u4567\u0000"+
-        "\u0000\u0000\u0000\u0000\u4568\u0000\u0000\u0000"+
-        "\u4569\u0000\u0000\u456A\u456B\u0000\u0000\u456C"+
-        "\u0000\u0000\u0000\u0000\u0000\u456D\u456E\u0000"+
-        "\u0000\u0000\u0000\u456F\u0000\u0000\u0000\u4570"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4571\u0000"+
-        "\u0000\u0000\u4572\u0000\u0000\u4573\u0000\u0000"+
-        "\u0000\u0000\u4574\u0000\u0000\u0000\u4575\u0000"+
-        "\u4576\u0000\u0000\u0000\u0000\u4577\u0000\u0000"+
-        "\u4578\u0000\u0000\u0000\u0000\u0000\u0000\u4579"+
-        "\u0000\u0000\u0000\u457A\u0000\u0000\u457B\u0000"+
-        "\u457C\u0000\u0000\u0000\u0000\u457D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u457E\u4621\u0000"+
-        "\u0000\u0000\u4622\u0000\u0000\u4623\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4624"+
-        "\u0000\u0000\u0000\u4625\u0000\u0000\u0000\u4626"+
-        "\u4627\u0000\u4628\u4629\u0000\u0000\u0000\u0000"+
-        "\u462A\u462B\u0000\u0000\u462C\u462D\u462E\u0000"+
-        "\u462F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4630\u4631\u0000\u0000\u0000\u4632\u4633\u0000"+
-        "\u0000\u0000\u0000\u4634\u4635\u0000\u0000\u0000"+
-        "\u0000\u4636\u0000\u0000\u4637\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4638\u0000"+
-        "\u0000\u0000\u4639\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u463A\u0000\u463B\u0000\u0000\u463C\u463D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u463E\u0000"+
-        "\u0000\u463F\u0000\u0000\u0000\u0000\u0000\u4640"+
-        "\u0000\u4641\u0000\u0000\u0000\u0000\u0000\u4642"+
-        "\u0000\u0000\u4643\u0000\u4644\u4645\u0000\u0000"+
-        "\u0000\u4646\u0000\u0000\u0000\u4647\u4648\u0000"+
-        "\u4649\u0000\u464A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u464B\u0000\u0000\u0000\u0000\u0000\u464C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u464D\u464E"+
-        "\u464F\u0000\u0000\u0000\u4650\u0000\u4651\u0000"+
-        "\u0000\u0000\u0000\u4652\u0000\u4653\u4654\u0000"+
-        "\u0000\u0000\u4655\u4656\u0000\u0000\u0000\u4657"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4658\u4659\u0000\u465A\u0000\u465B"+
-        "\u0000\u0000\u465C\u0000\u465D\u0000\u0000\u0000"+
-        "\u0000\u465E\u0000\u465F\u4660\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4736"+
-        "\u0000\u0000\u0000\u4661\u0000\u4662\u0000\u4663"+
-        "\u0000\u0000\u0000\u0000\u4664\u0000\u4665\u0000"+
-        "\u4666\u4667\u0000\u4668\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4669\u466A\u466B"+
-        "\u0000\u466C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u466D\u466E\u0000\u466F"+
-        "\u4670\u0000\u0000\u0000\u4671\u0000\u0000\u4672"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4673\u0000\u4674\u0000\u4675\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4676\u0000\u0000\u0000\u4677\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4678\u0000\u4679"+
-        "\u467A\u467B\u467C\u0000\u467D\u0000\u467E\u0000"+
-        "\u0000\u0000\u4721\u0000\u4722\u0000\u0000\u0000"+
-        "\u4723\u0000\u0000\u0000\u0000\u0000\u0000\u4724"+
-        "\u0000\u4725\u0000\u4726\u4727\u0000\u4728\u0000"+
-        "\u0000\u0000\u4729\u0000\u472A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u472B\u0000\u0000\u472C"+
-        "\u0000\u0000\u472D\u0000\u0000\u0000\u472E\u472F"+
-        "\u0000\u4730\u0000\u4731\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4732\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4733\u4734"+
-        "\u4735\u0000\u0000\u0000\u0000\u0000\u4737\u4738"+
-        "\u0000\u4739\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u473A\u0000\u0000\u473B\u0000\u0000\u473C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u473D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u473E\u473F"+
-        "\u0000\u4740\u0000\u0000\u0000\u4741\u0000\u4742"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4743"+
-        "\u4744\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4745\u0000\u0000\u0000"+
-        "\u0000\u0000\u4746\u0000\u0000\u0000\u0000\u4747"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4748\u4749\u0000\u474A\u0000\u474B\u474C"+
-        "\u474D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u474E\u0000\u474F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4750\u0000\u0000\u4751"+
-        "\u0000\u4752\u0000\u0000\u0000\u4753\u0000\u4754"+
-        "\u0000\u0000\u0000\u0000\u4755\u0000\u0000\u0000"+
-        "\u4756\u0000\u4757\u0000\u0000\u0000\u4758\u4759"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u475A\u0000"+
-        "\u0000\u0000\u0000\u475B\u0000\u475C\u0000\u475D"+
-        "\u475E\u0000\u475F\u0000\u0000\u4760\u0000\u0000"+
-        "\u0000\u4761\u0000\u0000\u0000\u0000\u0000\u4762"+
-        "\u4763\u0000\u0000\u0000\u4764\u0000\u4765\u0000"+
-        "\u0000\u0000\u0000\u0000\u4766\u0000\u0000\u0000"+
-        "\u4767\u0000\u0000\u0000\u4768\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4769\u0000"+
-        "\u0000\u0000\u476A\u0000\u0000\u0000\u0000\u476B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u476C\u0000\u0000\u0000\u476D\u0000"+
-        "\u0000\u476E\u0000\u476F\u4770\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4771\u4772\u0000\u0000"+
-        "\u4773\u4774\u0000\u4775\u0000\u0000\u0000\u4776"+
-        "\u0000\u4777\u4778\u4779\u477A\u0000\u0000\u477B"+
-        "\u0000\u0000\u0000\u0000\u477C\u477D\u477E\u0000"+
-        "\u0000\u0000\u4821\u4822\u0000\u0000\u0000\u0000"+
-        "\u4823\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4824\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4825\u0000\u4826\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4827\u0000\u0000"+
-        "\u0000\u0000\u0000\u4828\u0000\u0000\u0000\u0000"+
-        "\u0000\u4829\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u482A\u0000\u0000\u0000\u0000\u0000\u0000\u482B"+
-        "\u0000\u0000\u0000\u0000\u0000\u482C\u482D\u0000"+
-        "\u0000\u482E\u0000\u482F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4830\u0000\u0000\u0000\u4831"+
-        "\u4832\u4833\u0000\u4834\u0000\u0000\u0000\u4835"+
-        "\u4836\u0000\u4837\u0000\u0000\u4838\u4839\u483A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u483B\u0000\u483C\u483D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u483E\u0000\u483F\u0000\u4840\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4841\u0000\u0000\u0000"+
-        "\u4842\u0000\u4843\u0000\u4844\u4845\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4846\u0000"+
-        "\u4847\u0000\u4848\u4849\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u484A\u0000"+
-        "\u0000\u484B\u484C\u0000\u0000\u4853\u0000\u484D"+
-        "\u484E\u0000\u0000\u484F\u0000\u0000\u4850\u0000"+
-        "\u0000\u0000\u0000\u4851\u4852\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4854"+
-        "\u0000\u4855\u4856\u4857\u0000\u0000\u0000\u4858"+
-        "\u0000\u4859\u485A\u0000\u0000\u485B\u485C\u0000"+
-        "\u0000\u485D\u485E\u0000\u0000\u0000\u0000\u0000"+
-        "\u485F\u0000\u0000\u0000\u4860\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4861\u4862\u0000"+
-        "\u0000\u0000\u0000\u4863\u0000\u0000\u0000\u4864"+
-        "\u4865\u0000\u0000\u4866\u4867\u4868\u0000\u0000"+
-        "\u4869\u0000\u486A\u486B\u486C\u0000\u486D\u0000"+
-        "\u0000\u0000\u486E\u0000\u0000\u0000\u0000\u486F"+
-        "\u4870\u0000\u0000\u0000\u0000\u4871\u4872\u4873"+
-        "\u4874\u0000\u0000\u0000\u0000\u0000\u4875\u4876"+
-        "\u4877\u0000\u0000\u0000\u0000\u4878\u4879\u0000"+
-        "\u0000\u0000\u0000\u0000\u487A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u487B\u0000\u487C"+
-        "\u487D\u0000\u487E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4921\u0000\u0000\u0000\u4922\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4923\u4924\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4925\u0000\u0000\u0000\u0000\u4926\u0000\u0000"+
-        "\u0000\u4927\u0000\u0000\u4928\u4929\u0000\u0000"+
-        "\u492A\u0000\u0000\u0000\u0000\u492B\u492C\u492D"+
-        "\u0000\u0000\u0000\u0000\u0000\u492E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u492F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4930\u0000\u0000\u4931\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4932"+
-        "\u0000\u0000\u0000\u0000\u4933\u0000\u0000\u4934"+
-        "\u0000\u4935\u0000\u0000\u4936\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4937\u4938\u0000\u0000\u0000"+
-        "\u4939\u493A\u493B\u493C\u0000\u0000\u4941\u0000"+
-        "\u0000\u0000\u0000\u0000\u493D\u493E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u493F\u4940\u0000"+
-        "\u0000\u0000\u0000\u0000\u4942\u4943\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4944\u0000\u4945\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4946\u4947\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4948\u0000"+
-        "\u0000\u4949\u0000\u0000\u0000\u494A\u494B\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u494C\u494D\u494E\u494F"+
-        "\u4950\u0000\u0000\u4951\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4952\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4953\u0000\u0000\u0000\u0000"+
-        "\u4954\u4955\u0000\u0000\u4956\u0000\u0000\u4957"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4958\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4959\u0000\u495A\u495B\u495C\u495D\u0000"+
-        "\u495E\u0000\u0000\u0000\u495F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4960\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4961\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4962\u4963\u4964\u4965\u4966"+
-        "\u0000\u0000\u0000\u4967\u4968\u0000\u0000\u4969"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u496A\u0000"+
-        "\u496B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u496C\u0000\u496D\u0000\u496E"+
-        "\u496F\u4970\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4971\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4972\u0000\u0000\u0000\u4973\u4974\u4975"+
-        "\u0000\u0000\u4976\u4977\u0000\u0000\u0000\u0000"+
-        "\u4978\u0000\u4979\u0000\u0000\u0000\u0000\u497A"+
-        "\u0000\u0000\u497B\u0000\u497C\u0000\u497D\u0000"+
-        "\u497E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4A21\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A22\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4A23\u0000\u0000\u0000\u0000\u4A24\u0000\u4A25"+
-        "\u0000\u0000\u0000\u0000\u4A26\u0000\u0000\u0000"+
-        "\u0000\u0000\u4A27\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4A28\u4A29\u0000\u0000\u0000\u0000"+
-        "\u4A2A\u0000\u4A2B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4A2C"+
-        "\u4A2D\u0000\u4A2E\u4A2F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4A30\u0000\u0000\u0000\u0000\u4A31"+
-        "\u4A32\u4A33\u0000\u0000\u4A34\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A35\u4A36\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A37\u0000\u0000\u4A38\u0000"+
-        "\u0000\u4A39\u4A3A\u0000\u4A3B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4A3C\u0000\u0000\u0000\u0000\u0000\u4A3D\u0000"+
-        "\u4A3E\u0000\u0000\u0000\u0000\u0000\u0000\u4A3F"+
-        "\u4A40\u4A41\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A42\u0000\u0000\u0000\u4A43"+
-        "\u0000\u0000\u4A44\u0000\u0000\u4A45\u0000\u4A46"+
-        "\u0000\u0000\u0000\u0000\u4A47\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A48\u0000\u0000\u0000\u4A49"+
-        "\u0000\u0000\u0000\u0000\u4A4A\u0000\u0000\u0000"+
-        "\u4A4B\u4A4C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A4D\u4A4E\u4A4F\u0000\u4A50\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4A51\u4A52"+
-        "\u4A53\u0000\u0000\u4A54\u0000\u4A55\u4A56\u0000"+
-        "\u0000\u0000\u4A57\u0000\u4A58\u0000\u4A59\u0000"+
-        "\u4A5A\u0000\u0000\u4A5B\u0000\u0000\u0000\u0000"+
-        "\u4A5C\u0000\u0000\u4A5D\u0000\u0000\u4A5E\u4A5F"+
-        "\u0000\u4A60\u0000\u0000\u0000\u0000\u0000\u4A61"+
-        "\u4A62\u0000\u0000\u4A63\u4A64\u0000\u0000\u4A65"+
-        "\u0000\u0000\u0000\u0000\u4A66\u0000\u0000\u0000"+
-        "\u0000\u4A67\u0000\u0000\u0000\u4A68\u4A69\u0000"+
-        "\u0000\u0000\u0000\u4A6A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A6B\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4A6C\u0000\u0000\u0000\u0000\u4A6D\u4A6E\u0000"+
-        "\u0000\u4A6F\u0000\u0000\u4A70\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4A71\u0000"+
-        "\u0000\u4A72\u0000\u0000\u0000\u0000\u0000\u4A73"+
-        "\u0000\u4A74\u0000\u0000\u4A75\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4A76\u4A77\u0000"+
-        "\u4A78\u0000\u0000\u0000\u0000\u0000\u0000\u4A79"+
-        "\u0000\u0000\u0000\u0000\u0000\u4A7A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A7B\u4A7C\u0000\u0000\u0000"+
-        "\u0000\u0000\u4A7D\u4A7E\u0000\u0000\u4B21\u0000"+
-        "\u0000\u0000\u4B22\u0000\u4B23\u4B24\u0000\u4B25"+
-        "\u0000\u0000\u0000\u4B26\u0000\u4B27\u0000\u0000"+
-        "\u0000\u0000\u4B28\u4B29\u0000\u0000\u0000\u0000"+
-        "\u4B2A\u4B2B\u0000\u0000\u0000\u0000\u4B2C\u0000"+
-        "\u0000\u0000\u4B2D\u0000\u4B2E\u0000\u0000\u4B2F"+
-        "\u4B30\u0000\u0000\u0000\u4B31\u0000\u0000\u0000"+
-        "\u0000\u4B32\u4B33\u0000\u0000\u4B34\u0000\u0000"+
-        "\u0000\u0000\u4B35\u4B36\u0000\u4B37\u0000\u0000"+
-        "\u0000\u0000\u0000\u4B38\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4B39\u0000\u0000"+
-        "\u4B3A\u0000\u4B3B\u0000\u0000\u0000\u4B3C\u0000"+
-        "\u4B3D\u0000\u0000\u0000\u0000\u4B3E\u4B3F\u4B40"+
-        "\u4B41\u0000\u0000\u0000\u0000\u0000\u4B42\u4B43"+
-        "\u0000\u4B44\u0000\u4B45\u4B46\u0000\u4B47\u4B48"+
-        "\u0000\u4B49\u0000\u0000\u0000\u0000\u0000\u4B4A"+
-        "\u0000\u4B4B\u0000\u0000\u4B4C\u0000\u0000\u0000"+
-        "\u4B4D\u4B4E\u0000\u4B4F\u0000\u4B50\u4B51\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4B52\u0000"+
-        "\u4B53\u0000\u0000\u4B54\u0000\u4B55\u0000\u4B56"+
-        "\u4B57\u0000\u0000\u0000\u4B58\u0000\u4B59\u4B5A"+
-        "\u4B5B\u0000\u4B5C\u0000\u0000\u4B5D\u4B5E\u0000"+
-        "\u0000\u0000\u4B5F\u4B60\u0000\u4B61\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4B62\u0000\u4B63"+
-        "\u0000\u4B64\u0000\u0000\u4B65\u4B66\u0000\u4B67"+
-        "\u0000\u0000\u0000\u0000\u0000\u4B68\u4B69\u0000"+
-        "\u0000\u4B6A\u0000\u4B6B\u4B6C\u0000\u0000\u4B6D"+
-        "\u0000\u0000\u4B6E\u4B6F\u0000\u0000\u4B70\u0000"+
-        "\u0000\u4B71\u0000\u0000\u0000\u4B72\u0000\u0000"+
-        "\u0000\u4B73\u0000\u4B74\u0000\u0000\u4B75\u4B76"+
-        "\u0000\u4B77\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4B78\u4B79\u0000\u4B7A"+
-        "\u0000\u4B7B\u4B7C\u4B7D\u0000\u4B7E\u0000\u4C21"+
-        "\u4C22\u4C23\u0000\u0000\u4C24\u0000\u0000\u4C25"+
-        "\u0000\u0000\u4C26\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4C27\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C28\u4C29\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4C2A\u0000\u4C2B\u0000"+
-        "\u4C2C\u4C2D\u4C2E\u4C2F\u4C30\u4C31\u4C32\u4C33"+
-        "\u4C34\u4C35\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4C36\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4C37\u0000\u0000\u4C38\u4C39\u0000\u4C3A\u4C3B"+
-        "\u0000\u0000\u0000\u4C3C\u0000\u4C3D\u0000\u0000"+
-        "\u0000\u4C3E\u4C3F\u0000\u0000\u0000\u0000\u4C40"+
-        "\u0000\u0000\u0000\u0000\u0000\u4C41\u0000\u0000"+
-        "\u0000\u0000\u4C42\u0000\u0000\u0000\u4C43\u4C44"+
-        "\u4C45\u0000\u0000\u4C46\u0000\u4C47\u4C48\u0000"+
-        "\u0000\u4C49\u4C4A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4C4B\u4C4C\u0000\u0000\u0000\u4C4D\u4C4E\u4C4F"+
-        "\u0000\u4C50\u0000\u0000\u0000\u0000\u0000\u4C51"+
-        "\u4C52\u4C53\u4C54\u0000\u0000\u0000\u0000\u0000"+
-        "\u4C55\u4C56\u4C57\u0000\u4C58\u0000\u0000\u4C59"+
-        "\u4C5A\u4C5B\u0000\u4C5C\u0000\u0000\u4C5D\u0000"+
-        "\u4C5E\u4C5F\u4C60\u4C61\u0000\u0000\u4C62\u4C63"+
-        "\u0000\u4C64\u4C65\u0000\u0000\u4C66\u0000\u0000"+
-        "\u0000\u4C67\u0000\u4C68\u0000\u0000\u0000\u4C69"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4C6A\u4C6B\u0000\u0000\u4C6C\u0000\u0000\u0000"+
-        "\u4C6D\u0000\u0000\u4C6E\u0000\u0000\u0000\u0000"+
-        "\u4C6F\u0000\u4C70\u4C71\u0000\u0000\u4C72\u4C73"+
-        "\u0000\u0000\u0000\u0000\u4C74\u0000\u0000\u0000"+
-        "\u4C75\u0000\u4C76\u4C77\u0000\u0000\u0000\u4C78"+
-        "\u0000\u0000\u0000\u0000\u4C79\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C7A\u4C7B\u4C7C\u0000\u0000\u4C7D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4C7E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D21\u0000\u0000\u0000\u4D22\u4D23"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4D24\u4D25\u0000\u0000\u4D26\u0000\u0000\u4D27"+
-        "\u0000\u4D28\u4D29\u0000\u0000\u0000\u0000\u4D2A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4D2B\u0000"+
-        "\u0000\u4D2C\u0000\u0000\u0000\u4D2D\u4D2E\u4D2F"+
-        "\u4D30\u0000\u0000\u4D31\u0000\u0000\u0000\u4D32"+
-        "\u4D33\u0000\u0000\u0000\u0000\u0000\u4D34\u0000"+
-        "\u4D35\u0000\u4D36\u0000\u0000\u0000\u0000\u4D37"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4D38\u4D39"+
-        "\u0000\u4D3A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4D3B"+
-        "\u0000\u4D3C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4D3D\u4D3E\u4D3F\u4D40\u4D41\u4D42\u0000"+
-        "\u0000\u4D43\u0000\u0000\u0000\u4D44\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4D45\u0000\u4D46\u4D47\u0000\u4D48\u0000\u0000"+
-        "\u0000\u4D49\u0000\u0000\u4D4A\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D4B\u0000\u4D4C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4D4D\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D4E\u0000\u0000\u0000\u0000\u4D4F"+
-        "\u4D50\u4D51\u0000\u0000\u4D52\u0000\u4D53\u0000"+
-        "\u0000\u0000\u0000\u0000\u4D54\u0000\u4D55\u4D56"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4D57"+
-        "\u0000\u0000\u0000\u0000\u4D58\u0000\u0000\u4D59"+
-        "\u4D5A\u4D5B\u0000\u0000\u4D5C\u0000\u0000\u4D5D"+
-        "\u0000\u0000\u0000\u0000\u4D5E\u0000\u4D5F\u4D60"+
-        "\u0000\u4D61\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4D62\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4D63\u0000\u4D64\u4D65\u4D66\u0000\u0000\u4D67"+
-        "\u4D68\u0000\u4D69\u0000\u4D6A\u0000\u0000\u4D6B"+
-        "\u0000\u0000\u4D6C\u4D6D\u0000\u4D6E\u4D6F\u0000"+
-        "\u0000\u4D70\u0000\u4D71\u4D72\u4D73\u4D74\u0000"+
-        "\u0000\u0000\u0000\u4D75\u0000\u4D76\u4D77\u0000"+
-        "\u0000\u4D78\u0000\u0000\u0000\u4D79\u0000\u0000"+
-        "\u0000\u0000\u4D7A\u4D7B\u0000\u4D7C\u0000\u0000"+
-        "\u4D7D\u4D7E\u4E21\u0000\u4E22\u0000\u0000\u0000"+
-        "\u4E24\u4E25\u0000\u4E26\u4E27\u4E28\u0000\u0000"+
-        "\u0000\u4E29\u4E23\u4E2A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4E2B\u0000\u0000"+
-        "\u0000\u4E2C\u0000\u0000\u0000\u0000\u0000\u4E2D"+
-        "\u0000\u0000\u0000\u0000\u4E2E\u4E2F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4E30\u4E31\u4E32"+
-        "\u0000\u4E33\u0000\u0000\u4E34\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4E35\u0000\u0000\u0000\u4E36\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4E37\u4E38\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4E39\u0000\u0000"+
-        "\u0000\u0000\u0000\u4E3A\u4E3B\u4E3C\u0000\u4E3D"+
-        "\u4E3E\u0000\u4E3F\u4E40\u4E41\u4E42\u4E43\u4E44"+
-        "\u4E45\u0000\u4E46\u0000\u0000\u4E47\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4E48\u0000\u0000"+
-        "\u0000\u4E49\u0000\u0000\u0000\u4E4A\u0000\u0000"+
-        "\u0000\u4E4B\u0000\u4E4C\u4E4D\u0000\u4E4E\u0000"+
-        "\u0000\u0000\u0000\u0000\u4E4F\u0000\u0000\u0000"+
-        "\u0000\u4E50\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4E51\u0000\u0000\u0000\u0000\u0000\u4E52\u0000"+
-        "\u4E53\u0000\u0000\u0000\u4E54\u0000\u0000\u0000"+
-        "\u4E55\u4E56\u0000\u0000\u0000\u0000\u4E57\u0000"+
-        "\u0000\u4E58\u0000\u0000\u4E59\u0000\u0000\u0000";
-
-    private final static String innerIndex3=
-        "\u4E5A\u0000\u0000\u0000\u0000\u0000\u4E5B\u0000"+
-        "\u0000\u0000\u4E5C\u0000\u0000\u0000\u4E5D\u0000"+
-        "\u0000\u0000\u4E5E\u0000\u4E5F\u4E60\u0000\u4E61"+
-        "\u0000\u4E62\u4E63\u0000\u4E64\u0000\u0000\u0000"+
-        "\u0000\u0000\u4E65\u0000\u0000\u0000\u0000\u0000"+
-        "\u4E66\u0000\u0000\u0000\u0000\u4E67\u4E68\u4E69"+
-        "\u0000\u0000\u0000\u0000\u4E6A\u4E6B\u4E6C\u0000"+
-        "\u0000\u4E6D\u0000\u0000\u0000\u4E6E\u4E6F\u0000"+
-        "\u0000\u0000\u4E70\u0000\u0000\u4E71\u4E72\u0000"+
-        "\u0000\u0000\u4E73\u0000\u0000\u4E74\u4E75\u4E76"+
-        "\u0000\u0000\u4E77\u0000\u0000\u0000\u4E78\u4E79"+
-        "\u0000\u0000\u0000\u0000\u4E7A\u0000\u4E7B\u4E7C"+
-        "\u4E7D\u0000\u4E7E\u0000\u4F21\u0000\u0000\u4F22"+
-        "\u0000\u0000\u4F23\u0000\u4F24\u0000\u0000\u0000"+
-        "\u4F25\u0000\u4F26\u4F27\u4F28\u0000\u0000\u0000"+
-        "\u0000\u0000\u4F29\u0000\u0000\u4F2A\u0000\u0000"+
-        "\u4F2B\u0000\u0000\u0000\u4F2C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4F2D\u4F2E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4F2F\u4F30\u4F31\u0000"+
-        "\u0000\u0000\u4F32\u0000\u0000\u0000\u0000\u4F33"+
-        "\u0000\u0000\u4F34\u0000\u0000\u0000\u0000\u4F35"+
-        "\u0000\u0000\u4F36\u0000\u0000\u0000\u4F37\u4F38"+
-        "\u0000\u4F39\u0000\u0000\u0000\u4F3A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4F3B\u0000"+
-        "\u0000\u0000\u0000\u4F3C\u0000\u0000\u0000\u0000"+
-        "\u0000\u4F3D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4F3E\u4F3F\u0000\u0000\u4F40\u0000\u0000"+
-        "\u0000\u4F41\u0000\u0000\u0000\u0000\u4F42\u4F43"+
-        "\u4F44\u0000\u0000\u0000\u4F45\u0000\u4F46\u0000"+
-        "\u0000\u0000\u4F47\u0000\u4F48\u0000\u0000\u0000"+
-        "\u4F49\u4F4A\u0000\u0000\u4F4B\u0000\u0000\u0000"+
-        "\u4F4C\u0000\u0000\u4F4D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4F4E\u4F4F\u0000"+
-        "\u0000\u4F50\u0000\u0000\u0000\u4F51\u4F52\u0000"+
-        "\u0000\u4F53\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4F54\u0000\u0000"+
-        "\u0000\u4F55\u4F56\u4F57\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4F58\u4F59\u0000"+
-        "\u4F5A\u0000\u0000\u0000\u0000\u4F5B\u0000\u4F5C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4F5D\u4F5E\u0000\u0000\u4F5F"+
-        "\u4F60\u0000\u0000\u0000\u4F61\u0000\u4F62\u0000"+
-        "\u0000\u0000\u4F63\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4F64\u0000\u4F65\u0000"+
-        "\u4F66\u4F67\u0000\u4F68\u4F69\u0000\u0000\u0000"+
-        "\u4F6A\u0000\u4F6B\u0000\u0000\u0000\u4F6C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4F6D\u0000\u0000\u0000\u4F6E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4F6F\u0000\u0000\u0000\u0000\u4F70"+
-        "\u0000\u0000\u0000\u0000\u4F71\u0000\u0000\u0000"+
-        "\u4F72\u0000\u0000\u0000\u0000\u4F74\u4F75\u4F76"+
-        "\u0000\u4F73\u0000\u0000\u4F77\u0000\u0000\u0000"+
-        "\u4F78\u0000\u0000\u0000\u4F79\u4F7A\u0000\u0000"+
-        "\u4F7B\u4F7C\u4F7D\u4F7E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5021\u0000\u5022\u0000\u5023"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5024"+
-        "\u5025\u5026\u0000\u0000\u5027\u0000\u5028\u0000"+
-        "\u0000\u0000\u5029\u502A\u0000\u502B\u502C\u0000"+
-        "\u0000\u0000\u0000\u502E\u0000\u0000\u0000\u502F"+
-        "\u5030\u5031\u0000\u0000\u502D\u0000\u5032\u0000"+
-        "\u0000\u0000\u5033\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5034\u5035\u0000\u0000\u5037\u5038"+
-        "\u0000\u0000\u5039\u503A\u0000\u0000\u0000\u503B"+
-        "\u5036\u0000\u0000\u0000\u0000\u0000\u503C\u0000"+
-        "\u0000\u0000\u0000\u0000\u503D\u0000\u0000\u0000"+
-        "\u503E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u503F\u0000\u5040\u0000\u5041\u5042"+
-        "\u5043\u0000\u0000\u0000\u0000\u5044\u0000\u5045"+
-        "\u0000\u5046\u0000\u0000\u0000\u5047\u0000\u0000"+
-        "\u0000\u5048\u0000\u0000\u5049\u504A\u0000\u0000"+
-        "\u0000\u0000\u0000\u504B\u0000\u504C\u0000\u504D"+
-        "\u0000\u0000\u0000\u0000\u504E\u504F\u5050\u0000"+
-        "\u0000\u0000\u5051\u5052\u0000\u0000\u0000\u5053"+
-        "\u0000\u5054\u0000\u0000\u5055\u0000\u0000\u0000"+
-        "\u5056\u0000\u0000\u5057\u5058\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5059"+
-        "\u0000\u505A\u0000\u505B\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u505C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u505D\u0000\u505E\u505F\u0000\u5060\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5061\u5062\u0000\u0000\u0000"+
-        "\u0000\u5063\u0000\u5064\u5065\u5066\u5067\u0000"+
-        "\u5068\u0000\u0000\u5069\u506A\u0000\u0000\u0000"+
-        "\u0000\u506B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u506C\u506D\u0000\u506E\u0000\u0000\u0000\u506F"+
-        "\u0000\u5070\u0000\u0000\u5071\u0000\u0000\u0000"+
-        "\u5072\u0000\u0000\u5073\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5074\u0000\u5075\u0000\u0000\u5076"+
-        "\u5077\u0000\u5078\u0000\u0000\u0000\u0000\u5079"+
-        "\u0000\u0000\u0000\u0000\u507A\u0000\u507B\u0000"+
-        "\u0000\u0000\u507C\u0000\u0000\u507D\u507E\u0000"+
-        "\u5121\u0000\u5122\u0000\u0000\u5123\u0000\u0000"+
-        "\u0000\u0000\u5124\u5125\u0000\u5126\u0000\u0000"+
-        "\u0000\u5127\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5128\u0000\u0000\u0000\u5129\u0000\u0000\u0000"+
-        "\u0000\u0000\u512A\u512B\u0000\u0000\u0000\u512C"+
-        "\u0000\u512D\u512E\u0000\u512F\u0000\u0000\u0000"+
-        "\u0000\u5130\u0000\u0000\u0000\u5131\u0000\u0000"+
-        "\u0000\u0000\u0000\u5132\u0000\u0000\u5133\u0000"+
-        "\u0000\u5134\u0000\u0000\u0000\u0000\u0000\u5135"+
-        "\u0000\u0000\u0000\u5136\u0000\u5137\u0000\u5138"+
-        "\u5139\u0000\u0000\u0000\u513A\u513B\u0000\u0000"+
-        "\u513C\u513D\u513E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u513F\u5140\u0000\u5141"+
-        "\u5142\u0000\u0000\u0000\u5143\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5144\u5145\u0000"+
-        "\u0000\u5146\u0000\u0000\u5147\u5148\u0000\u5149"+
-        "\u514A\u0000\u0000\u0000\u0000\u514B\u0000\u514C"+
-        "\u0000\u0000\u514D\u0000\u0000\u514E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u514F\u0000\u0000"+
-        "\u5150\u0000\u0000\u0000\u0000\u0000\u5151\u0000"+
-        "\u5152\u0000\u5153\u0000\u0000\u5154\u5155\u0000"+
-        "\u0000\u0000\u5156\u5157\u0000\u0000\u0000\u0000"+
-        "\u5158\u5159\u0000\u0000\u515A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u515B\u0000"+
-        "\u515C\u0000\u0000\u515D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u515E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u515F\u0000\u5160\u0000\u0000"+
-        "\u0000\u5161\u0000\u5162\u5163\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5164\u0000"+
-        "\u0000\u5165\u0000\u0000\u5166\u0000\u5167\u0000"+
-        "\u0000\u5168\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5169\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u516A\u516B\u0000\u516C\u516D\u0000\u0000\u0000"+
-        "\u0000\u516E\u0000\u0000\u516F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5170\u0000\u5171\u5172\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5173"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5174\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5175"+
-        "\u0000\u0000\u0000\u5176\u0000\u0000\u0000\u5177"+
-        "\u0000\u5178\u5179\u517A\u0000\u517B\u517C\u517D"+
-        "\u517E\u5221\u0000\u0000\u5222\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5223\u0000\u5224"+
-        "\u5225\u5226\u0000\u0000\u0000\u0000\u0000\u5227"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5228\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5229\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u522A\u0000\u0000\u0000\u522B\u0000\u522C\u0000"+
-        "\u0000\u522D\u522E\u0000\u0000\u522F\u0000\u5230"+
-        "\u0000\u0000\u5231\u5232\u0000\u0000\u0000\u5233"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5234\u0000\u0000\u0000"+
-        "\u0000\u5235\u0000\u0000\u0000\u0000\u5236\u0000"+
-        "\u5237\u5238\u0000\u0000\u0000\u0000\u5239\u0000"+
-        "\u0000\u0000\u0000\u523A\u0000\u0000\u523B\u0000"+
-        "\u523C\u0000\u0000\u0000\u0000\u523D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u523E\u0000\u0000\u523F"+
-        "\u5240\u0000\u5241\u0000\u0000\u5242\u5243\u0000"+
-        "\u0000\u0000\u5244\u5245\u5246\u5247\u0000\u0000"+
-        "\u0000\u0000\u5248\u0000\u0000\u5249\u0000\u0000"+
-        "\u524A\u0000\u524B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u524C\u0000\u524D\u524E"+
-        "\u0000\u524F\u5250\u5251\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5252\u0000\u5253\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5254\u0000\u5255\u5256\u0000\u0000"+
-        "\u5257\u5258\u5259\u0000\u525A\u0000\u525B\u0000"+
-        "\u0000\u525C\u525D\u525E\u525F\u0000\u5260\u0000"+
-        "\u0000\u5261\u0000\u5262\u5263\u0000\u5264\u5265"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5266\u0000\u5267\u0000\u0000\u0000\u0000"+
-        "\u5268\u0000\u0000\u0000\u0000\u5269\u526A\u0000"+
-        "\u526B\u0000\u0000\u0000\u526C\u0000\u0000\u0000"+
-        "\u0000\u526D\u0000\u526E\u526F\u0000\u5270\u0000"+
-        "\u0000\u5271\u5272\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5273\u0000"+
-        "\u0000\u0000\u5274\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5276\u5277\u5278\u0000\u5275\u0000\u0000"+
-        "\u0000\u5279\u527A\u527B\u527C\u527D\u527E\u0000"+
-        "\u0000\u5321\u0000\u5322\u0000\u0000\u0000\u5323"+
-        "\u0000\u5324\u0000\u0000\u0000\u5325\u5326\u0000"+
-        "\u5327\u0000\u5328\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5329\u0000\u0000\u532A\u532B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u532C\u532D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u532E"+
-        "\u0000\u0000\u0000\u0000\u532F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5330\u0000"+
-        "\u5331\u0000\u0000\u0000\u0000\u0000\u5332\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5333\u0000\u0000\u0000\u0000\u0000\u5334\u5335"+
-        "\u0000\u0000\u5336\u5337\u5338\u0000\u0000\u5339"+
-        "\u0000\u0000\u0000\u0000\u533A\u0000\u0000\u533B"+
-        "\u533C\u533D\u0000\u0000\u0000\u533E\u0000\u533F"+
-        "\u0000\u0000\u0000\u5340\u5341\u5342\u0000\u5343"+
-        "\u0000\u5344\u5345\u0000\u0000\u5346\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5347\u0000"+
-        "\u0000\u5348\u0000\u5349\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u534A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u534B\u0000\u0000\u0000\u534C"+
-        "\u534D\u534E\u0000\u0000\u0000\u0000\u0000\u534F"+
-        "\u0000\u5350\u5351\u5352\u0000\u0000\u5353\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5354\u5355\u0000"+
-        "\u0000\u0000\u0000\u5356\u0000\u0000\u5357\u0000"+
-        "\u0000\u0000\u5358\u0000\u0000\u5359\u0000\u0000"+
-        "\u0000\u535A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u535B\u535C\u535D\u0000"+
-        "\u535E\u535F\u0000\u0000\u0000\u0000\u0000\u5360"+
-        "\u5361\u0000\u0000\u0000\u0000\u5362\u0000\u0000"+
-        "\u0000\u5363\u0000\u5364\u0000\u0000\u0000\u5365"+
-        "\u0000\u5366\u5367\u0000\u5368\u5369\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u536A\u0000\u536B"+
-        "\u0000\u0000\u536C\u0000\u0000\u0000\u0000\u0000"+
-        "\u536D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u536E\u0000\u536F\u5370\u0000\u0000\u0000\u5371"+
-        "\u0000\u5372\u5373\u5374\u0000\u5375\u5376\u0000"+
-        "\u5377\u0000\u0000\u5378\u5379\u537A\u0000\u0000"+
-        "\u0000\u537B\u0000\u0000\u0000\u0000\u537C\u537D"+
-        "\u0000\u0000\u0000\u0000\u0000\u537E\u5421\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5422\u5423"+
-        "\u0000\u0000\u5424\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5425\u0000\u0000\u5426\u5427"+
-        "\u0000\u5428\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5429\u542A\u542B\u542C\u542D\u0000"+
-        "\u0000\u0000\u0000\u0000\u542E\u542F\u5430\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5431"+
-        "\u0000\u5432\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5434\u0000\u0000\u5435\u5436\u0000"+
-        "\u0000\u0000\u5437\u5438\u0000\u5439\u0000\u0000"+
-        "\u0000\u543A\u0000\u0000\u0000\u543B\u543C\u0000"+
-        "\u0000\u543D\u543E\u0000\u0000\u0000\u0000\u0000"+
-        "\u5433\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u543F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5440\u5441\u0000\u0000\u0000\u5442\u0000\u5443"+
-        "\u0000\u0000\u0000\u0000\u5444\u5445\u0000\u0000"+
-        "\u5446\u0000\u0000\u0000\u0000\u0000\u0000\u5447"+
-        "\u5448\u0000\u0000\u0000\u5449\u544A\u0000\u544B"+
-        "\u0000\u0000\u0000\u544C\u0000\u0000\u544D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u544E"+
-        "\u0000\u0000\u0000\u0000\u544F\u5450\u0000\u5451"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5452\u0000"+
-        "\u5453\u0000\u5454\u0000\u0000\u0000\u0000\u0000"+
-        "\u5455\u0000\u0000\u0000\u0000\u0000\u0000\u5456"+
-        "\u0000\u5457\u5458\u0000\u0000\u5459\u0000\u0000"+
-        "\u0000\u0000\u0000\u545A\u0000\u0000\u545B\u545C"+
-        "\u0000\u0000\u0000\u545D\u0000\u0000\u0000\u0000"+
-        "\u545E\u0000\u0000\u0000\u0000\u0000\u545F\u0000"+
-        "\u0000\u5460\u0000\u0000\u0000\u0000\u5461\u5462"+
-        "\u0000\u0000\u5463\u0000\u0000\u5464\u0000\u0000"+
-        "\u0000\u5465\u0000\u0000\u0000\u5466\u0000\u0000"+
-        "\u5467\u0000\u5468\u0000\u0000\u5469\u546A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u546C\u546B\u546D\u546E\u546F"+
-        "\u0000\u0000\u0000\u5470\u5471\u0000\u0000\u5472"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5473"+
-        "\u0000\u0000\u5474\u5475\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5476\u5477\u5478\u0000\u0000"+
-        "\u0000\u5479\u0000\u547A\u547B\u547C\u547D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u547E\u0000\u0000"+
-        "\u0000\u5521\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5522\u5523\u5524"+
-        "\u5525\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5526\u0000\u5527\u0000\u5528"+
-        "\u5529\u552A\u0000\u0000\u0000\u0000\u552B\u552C"+
-        "\u0000\u0000\u0000\u0000\u552D\u0000\u0000\u0000"+
-        "\u0000\u552E\u552F\u0000\u0000\u0000\u5530\u0000"+
-        "\u0000\u0000\u5531\u0000\u0000\u5532\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5533\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5534\u0000\u0000\u5535"+
-        "\u5536\u0000\u0000\u5537\u0000\u0000\u0000\u0000"+
-        "\u5538\u0000\u0000\u0000\u0000\u0000\u5539\u553A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u553B\u0000\u0000\u0000\u553C"+
-        "\u0000\u0000\u0000\u553D\u0000\u553E\u0000\u0000"+
-        "\u553F\u0000\u0000\u0000\u5540\u0000\u5541\u5542"+
-        "\u0000\u0000\u5543\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5544\u0000\u0000\u5545\u5546\u5547"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5548"+
-        "\u5549\u0000\u554A\u0000\u0000\u554B\u554C\u554D"+
-        "\u0000\u554E\u0000\u554F\u5550\u0000\u5551\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5552\u5553\u5554"+
-        "\u5555\u0000\u0000\u0000\u5556\u0000\u5557\u0000"+
-        "\u0000\u0000\u0000\u0000\u5558\u0000\u5559\u0000"+
-        "\u555A\u0000\u0000\u0000\u555B\u555C\u0000\u555D"+
-        "\u0000\u555E\u555F\u0000\u5560\u0000\u5561\u0000"+
-        "\u5562\u0000\u0000\u0000\u5563\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5564\u0000\u0000\u0000\u5565\u0000\u5566\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5567\u0000\u0000"+
-        "\u0000\u5568\u0000\u0000\u0000\u5569\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u556A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u556B\u0000\u0000\u0000\u0000\u0000\u556C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u556D\u0000\u556E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u556F\u5570"+
-        "\u0000\u0000\u0000\u5571\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5572\u5573\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5574\u0000\u0000\u0000\u0000\u5575\u0000\u5576"+
-        "\u0000\u0000\u5577\u0000\u5578\u5579\u0000\u557A"+
-        "\u557B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u557C\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u557D\u557E\u0000"+
-        "\u5621\u0000\u5622\u5623\u0000\u0000\u5624\u0000"+
-        "\u0000\u5625\u5626\u0000\u0000\u0000\u5627\u0000"+
-        "\u0000\u0000\u0000\u5628\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5629\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u562A\u562B"+
-        "\u562C\u0000\u0000\u0000\u562D\u0000\u562E\u0000"+
-        "\u562F\u0000\u0000\u0000\u5630\u0000\u0000\u5631"+
-        "\u0000\u0000\u0000\u0000\u5632\u0000\u0000\u0000"+
-        "\u5633\u0000\u0000\u0000\u0000\u5634\u0000\u0000"+
-        "\u0000\u0000\u5635\u0000\u5636\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5637\u0000\u5638"+
-        "\u0000\u0000\u5639\u0000\u563A\u0000\u0000\u0000"+
-        "\u0000\u0000\u563B\u0000\u0000\u0000\u0000\u563C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u563D\u563E\u0000\u0000\u0000\u0000\u0000\u563F"+
-        "\u5640\u5641\u0000\u0000\u0000\u5642\u0000\u5643"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5644"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5645\u0000\u0000\u5647\u5648\u5649\u0000"+
-        "\u0000\u0000\u0000\u564A\u0000\u0000\u564B\u0000"+
-        "\u5646\u0000\u0000\u0000\u0000\u0000\u564C\u0000"+
-        "\u564D\u0000\u0000\u564E\u0000\u0000\u564F\u0000"+
-        "\u0000\u0000\u5650\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5651\u0000"+
-        "\u0000\u0000\u5652\u0000\u5653\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5654\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5656\u0000\u5657\u0000\u0000"+
-        "\u0000\u0000\u5658\u5655\u0000\u0000\u5659\u565A"+
-        "\u0000\u0000\u0000\u0000\u0000\u565B\u0000\u565C"+
-        "\u0000\u0000\u0000\u565D\u0000\u565E\u565F\u0000"+
-        "\u0000\u5660\u0000\u0000\u5661\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5662\u5663\u0000\u0000\u0000"+
-        "\u5664\u5665\u5666\u0000\u0000\u5667\u5668\u0000"+
-        "\u5669\u566A\u0000\u0000\u0000\u566B\u0000\u566C"+
-        "\u566D\u0000\u0000\u566E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u566F"+
-        "\u0000\u0000\u0000\u5670\u5671\u0000\u0000\u0000"+
-        "\u0000\u5672\u5673\u0000\u0000\u5674\u0000\u0000"+
-        "\u0000\u5675\u5676\u0000\u0000\u0000\u0000\u0000"+
-        "\u5677\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5678\u0000\u5679\u0000\u0000\u0000"+
-        "\u0000\u0000\u567A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u567B\u567C\u567D\u567E\u0000"+
-        "\u0000\u0000\u0000\u5721\u0000\u0000\u5722\u5723"+
-        "\u0000\u5724\u0000\u0000\u0000\u0000\u5725\u0000"+
-        "\u0000\u0000\u0000\u0000\u5726\u0000\u0000\u0000"+
-        "\u5727\u0000\u0000\u5728\u0000\u0000\u0000\u5729"+
-        "\u0000\u0000\u0000\u0000\u0000\u572A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u572B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u572C\u0000\u572D\u0000\u572E"+
-        "\u572F\u5730\u0000\u5731\u5732\u0000\u0000\u5733"+
-        "\u0000\u5734\u5735\u0000\u0000\u0000\u5736\u0000"+
-        "\u0000\u5737\u0000\u0000\u5738\u0000\u5739\u0000"+
-        "\u573A\u0000\u573B\u573C\u0000\u0000\u0000\u0000"+
-        "\u573D\u573E\u0000\u573F\u5740\u0000\u0000\u5741"+
-        "\u5742\u5743\u5744\u0000\u0000\u0000\u5745\u0000"+
-        "\u5746\u0000\u5747\u0000\u5748\u0000\u0000\u5749"+
-        "\u0000\u0000\u574A\u0000\u574B\u0000\u574C\u574D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u574E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u574F\u0000\u0000\u0000\u0000\u5750\u0000\u0000"+
-        "\u0000\u0000\u5751\u0000\u0000\u0000\u0000\u0000"+
-        "\u5752\u0000\u5753\u0000\u5754\u0000\u0000\u0000"+
-        "\u5755\u0000\u5756\u0000\u0000\u5757\u0000\u5758"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5759\u575A"+
-        "\u0000\u0000\u0000\u0000\u0000\u575B\u575C\u0000"+
-        "\u575D\u575E\u0000\u0000\u0000\u0000\u0000\u575F"+
-        "\u5760\u0000\u5761\u5762\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5764\u0000\u5765\u5766\u5767"+
-        "\u0000\u5768\u5769\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u576A\u576B\u576C\u0000"+
-        "\u576D\u0000\u0000\u576E\u0000\u0000\u0000\u576F"+
-        "\u0000\u0000\u5770\u0000\u5771\u5772\u0000\u0000"+
-        "\u0000\u0000\u5773\u5774\u5775\u0000\u0000\u5776"+
-        "\u0000\u0000\u0000\u0000\u0000\u5777\u5778\u0000"+
-        "\u0000\u5779\u0000\u583E\u5763\u577A\u577B\u577C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u577D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u577E\u0000\u0000\u0000\u0000\u5821\u0000\u5822"+
-        "\u5823\u0000\u5824\u0000\u5825\u0000\u5826\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5827\u0000\u0000"+
-        "\u0000\u0000\u5828\u0000\u5829\u582A\u0000\u0000"+
-        "\u582B\u582C\u0000\u582D\u582E\u582F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5830\u5831"+
-        "\u0000\u5832\u0000\u0000\u5833\u584C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5834\u5835"+
-        "\u5836\u0000\u0000\u0000\u0000\u0000\u0000\u5837"+
-        "\u0000\u5838\u0000\u0000\u0000\u0000\u0000\u5839"+
-        "\u583A\u583B\u0000\u0000\u583C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u583D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u583F\u0000\u5840\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5841\u0000"+
-        "\u5842\u5843\u0000\u0000\u5844\u0000\u0000\u0000"+
-        "\u0000\u5845\u0000\u0000\u0000\u0000\u5846\u0000"+
-        "\u0000\u0000\u5847\u0000\u0000\u0000\u0000\u5848"+
-        "\u0000\u5849\u0000\u0000\u0000\u584A\u0000\u0000"+
-        "\u0000\u584B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u584D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u584E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u584F\u0000\u5850"+
-        "\u5851\u0000\u5852\u0000\u0000\u5853\u0000\u5854"+
-        "\u0000\u5855\u5856\u0000\u0000\u0000\u5857\u0000"+
-        "\u5858\u5859\u585A\u0000\u585B\u0000\u0000\u0000"+
-        "\u585C\u0000\u0000\u0000\u585D\u585E\u0000\u585F"+
-        "\u0000\u0000\u5860\u0000\u0000\u0000\u0000\u0000"+
-        "\u5861\u0000\u0000\u5862\u5863\u0000\u5864\u0000"+
-        "\u5865\u0000\u0000\u0000\u5866\u5867\u0000\u0000"+
-        "\u0000\u5868\u0000\u0000\u0000\u5869\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u586A\u586B\u0000\u586C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u586D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u586E\u0000"+
-        "\u586F\u5870\u5871\u0000\u0000\u0000\u0000\u5872"+
-        "\u0000\u5873\u0000\u0000\u5874\u0000\u0000\u0000"+
-        "\u0000\u0000\u5875\u0000\u0000\u5876\u5877\u0000"+
-        "\u5878\u0000\u5879\u0000\u0000\u0000\u0000\u587A"+
-        "\u587B\u0000\u0000\u0000\u587C\u0000\u0000\u587D"+
-        "\u0000\u0000\u0000\u587E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5921\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5922"+
-        "\u0000\u0000\u5923\u0000\u0000\u0000\u0000\u5924"+
-        "\u5925\u5926\u5927\u0000\u0000\u0000\u0000\u5928"+
-        "\u0000\u0000\u592A\u592B\u0000\u592C\u0000\u0000"+
-        "\u0000\u0000\u592D\u592E\u0000\u0000\u0000\u592F"+
-        "\u0000\u0000\u0000\u0000\u5930\u0000\u5931\u0000"+
-        "\u5932\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5933\u0000\u5934\u0000"+
-        "\u0000\u0000\u5935\u5936\u5937\u5938\u0000\u5939"+
-        "\u0000\u0000\u593A\u593B\u0000\u0000\u0000\u593C"+
-        "\u0000\u0000\u5929\u593D\u593E\u0000\u593F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5940"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5941\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5942"+
-        "\u5943\u5944\u5945\u5946\u0000\u0000\u5947\u0000"+
-        "\u0000\u5948\u0000\u0000\u5949\u594A\u594B\u594C"+
-        "\u594D\u594E\u594F\u0000\u5950\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5951\u0000\u0000\u0000\u5952"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5953\u5954\u5955\u0000\u5956\u0000\u5957"+
-        "\u0000\u5958\u0000\u0000\u0000\u5959\u595A\u0000"+
-        "\u0000\u595B\u0000\u595C\u595D\u0000\u0000\u595E"+
-        "\u0000\u0000\u0000\u595F\u0000\u0000\u0000\u0000"+
-        "\u5960\u0000\u0000\u0000\u0000\u5961\u0000\u5962"+
-        "\u5963\u0000\u5964\u0000\u0000\u5965\u0000\u5966"+
-        "\u0000\u0000\u0000\u0000\u0000\u5974\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5967\u0000\u5968\u5969"+
-        "\u596A\u0000\u0000\u0000\u596B\u596C\u596D\u596E"+
-        "\u0000\u0000\u596F\u0000\u0000\u0000\u0000\u5970"+
-        "\u0000\u0000\u5971\u5972\u0000\u0000\u5973\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5975\u0000\u5976\u0000\u0000\u0000\u0000\u5977"+
-        "\u5978\u0000\u0000\u0000\u0000\u0000\u5979\u0000"+
-        "\u597A\u0000\u0000\u0000\u0000\u597B\u0000\u0000"+
-        "\u0000\u0000\u0000\u597C\u0000\u0000\u597D\u0000"+
-        "\u0000\u0000\u0000\u0000\u597E\u0000\u0000\u5A21"+
-        "\u5A22\u0000\u0000\u0000\u5A23\u5A24\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5A25\u5A26\u0000"+
-        "\u5A27\u5A28\u5A29\u0000\u0000\u0000\u0000\u0000"+
-        "\u5A2A\u5A2B\u0000\u5A2C\u0000\u0000\u5A2D\u0000"+
-        "\u0000\u5A2E\u0000\u0000\u0000\u0000\u0000\u5A2F"+
-        "\u0000\u5A30\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5A31\u0000"+
-        "\u5A32\u0000\u5A33\u0000\u5A34\u5A35\u0000\u0000"+
-        "\u5A36\u3866\u5A37\u0000\u0000\u0000\u5A38\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5A39\u5A3A\u0000\u0000\u5A3B\u5A3C"+
-        "\u5A3D\u5A3E\u0000\u0000\u0000\u5A3F\u0000\u0000"+
-        "\u5A40\u5A41\u5A42\u5A43\u5A44\u0000\u0000\u0000"+
-        "\u0000\u5A45\u0000\u0000\u5A46\u0000\u0000\u5A47"+
-        "\u0000\u0000\u0000\u0000\u0000\u5A48\u5A49\u5A4A"+
-        "\u0000\u0000\u5A4B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5A6D\u0000\u0000\u0000\u0000\u5A4C\u0000\u0000"+
-        "\u0000\u5A4D\u0000\u0000\u0000\u0000\u5A4E\u0000"+
-        "\u5A4F\u0000\u5A50\u0000\u5A51\u0000\u0000\u0000"+
-        "\u0000\u5A52\u0000\u0000\u0000\u0000\u5A53\u5A54"+
-        "\u5A55\u0000\u0000\u0000\u0000\u5A56\u0000\u0000"+
-        "\u0000\u5A57\u0000\u5A58\u5A59\u5A5A\u0000\u5A5B"+
-        "\u5A5C\u5A5D\u0000\u0000\u0000\u0000\u0000\u5A5E"+
-        "\u5A5F\u5A60\u0000\u5A61\u0000\u5A62\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5A63\u5A64\u0000\u0000\u5A65\u0000\u5A66"+
-        "\u0000\u0000\u5A67\u0000\u5A68\u0000\u0000\u0000"+
-        "\u5A69\u0000\u0000\u5A6A\u0000\u5A6B\u0000\u5A6C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5A6E\u0000\u5A6F\u5A70\u0000\u0000";
-
-    private final static String innerIndex4=
-        "\u0000\u0000\u0000\u0000\u5A71\u5A72\u0000\u5A73"+
-        "\u0000\u0000\u0000\u5A74\u0000\u0000\u5A75\u5A76"+
-        "\u5A77\u0000\u0000\u5A78\u5A79\u0000\u0000\u0000"+
-        "\u0000\u5A7A\u0000\u0000\u0000\u0000\u5A7B\u5A7C"+
-        "\u0000\u5A7D\u0000\u5A7E\u0000\u0000\u0000\u0000"+
-        "\u5B21\u0000\u0000\u0000\u0000\u0000\u5B22\u5B23"+
-        "\u0000\u5B24\u5B25\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5B26\u5B27\u0000\u5B28\u5B29\u5B2A\u0000"+
-        "\u5B2B\u0000\u0000\u5B2C\u0000\u5B2D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5B2E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5B2F\u0000\u0000\u0000\u0000\u5B30\u0000\u0000"+
-        "\u0000\u5B31\u0000\u0000\u5B32\u5B33\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5B34"+
-        "\u0000\u5B35\u5B36\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5B37\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5B38\u5B39\u5B3A\u5B3B\u5B3C"+
-        "\u5B3D\u5B3E\u0000\u5B3F\u5B40\u0000\u0000\u0000"+
-        "\u5B41\u0000\u0000\u5B42\u0000\u5B43\u0000\u5B44"+
-        "\u5B45\u5B46\u0000\u0000\u0000\u0000\u5B47\u0000"+
-        "\u5B48\u0000\u0000\u5B49\u0000\u0000\u0000\u5B4A"+
-        "\u0000\u0000\u0000\u0000\u5B4B\u5B4C\u5B4D\u0000"+
-        "\u0000\u5B4E\u0000\u0000\u0000\u5B4F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5B50\u5B51"+
-        "\u0000\u5B52\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5B53\u5B54\u5B55\u0000\u0000\u0000\u5B56\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5B57\u5B58\u0000"+
-        "\u0000\u5B59\u5B5A\u0000\u5B5B\u0000\u0000\u5B5C"+
-        "\u0000\u0000\u5B5D\u5B5E\u5B5F\u0000\u0000\u0000"+
-        "\u0000\u0000\u5B60\u5B61\u0000\u5B62\u0000\u0000"+
-        "\u0000\u5B63\u0000\u5B64\u0000\u0000\u0000\u0000"+
-        "\u5B65\u0000\u5B66\u0000\u0000\u0000\u0000\u5B67"+
-        "\u0000\u5B68\u0000\u5B69\u0000\u0000\u5B6A\u0000"+
-        "\u0000\u5B6B\u5B6C\u5B6D\u0000\u0000\u0000\u0000"+
-        "\u5B6E\u0000\u5B70\u5B71\u5B72\u0000\u0000\u0000"+
-        "\u5B73\u5B6F\u5B74\u5B75\u5B76\u0000\u5B77\u5B78"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5B79\u0000\u0000\u0000\u0000\u5B7A\u5B7B\u0000"+
-        "\u5B7C\u0000\u5B7D\u0000\u0000\u5B7E\u0000\u0000"+
-        "\u0000\u0000\u5C21\u0000\u5C22\u0000\u0000\u0000"+
-        "\u0000\u5C23\u0000\u5C24\u0000\u5C25\u0000\u0000"+
-        "\u5C26\u5C27\u5C28\u5C29\u0000\u0000\u5C2A\u0000"+
-        "\u0000\u5C2B\u0000\u0000\u0000\u5C2C\u5C2D\u0000"+
-        "\u5C2E\u0000\u5C2F\u0000\u5C30\u0000\u0000\u5C31"+
-        "\u5C32\u0000\u0000\u0000\u5C33\u0000\u0000\u0000"+
-        "\u0000\u5C34\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5C35\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5C36\u0000\u5C37\u0000\u0000\u0000\u0000"+
-        "\u5C38\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5C39\u0000\u5C3A\u5C3B\u5C3C\u0000\u0000\u5C3D"+
-        "\u5C3E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5C3F\u0000\u5C40\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5C41\u0000\u0000\u5C42\u5C43\u0000"+
-        "\u5C44\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5C45\u5C46\u5C47\u5C48\u5C49\u0000"+
-        "\u0000\u5C4A\u5C4B\u5C4C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5C4D\u0000\u0000\u5C4E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5C4F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5C50"+
-        "\u5C51\u5C52\u0000\u0000\u0000\u5C53\u0000\u5C54"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5C55\u0000\u0000\u0000\u0000\u5C56\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5C57\u5C58\u5C59"+
-        "\u0000\u0000\u0000\u0000\u0000\u5C5A\u5C5B\u0000"+
-        "\u5C5C\u5C5D\u5C5E\u0000\u5C5F\u0000\u0000\u0000"+
-        "\u5C60\u0000\u0000\u0000\u0000\u0000\u5C61\u5C62"+
-        "\u5C63\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5C64\u5C65\u5C66\u0000\u0000\u5C67\u0000\u0000"+
-        "\u0000\u5C68\u5C69\u0000\u0000\u0000\u5C6A\u0000"+
-        "\u5C6B\u0000\u5C6C\u0000\u0000\u5C6D\u5C6E\u0000"+
-        "\u0000\u5C6F\u0000\u0000\u0000\u0000\u0000\u5C70"+
-        "\u0000\u0000\u5C71\u0000\u0000\u0000\u0000\u5C72"+
-        "\u0000\u0000\u5C73\u5C74\u5C75\u0000\u0000\u0000"+
-        "\u0000\u5C76\u5C77\u5C78\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5C79\u0000\u0000\u5C7A\u0000"+
-        "\u5C7B\u0000\u0000\u5C7C\u0000\u5C7D\u0000\u0000"+
-        "\u0000\u0000\u5C7E\u5D21\u5D22\u5D23\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5D24\u0000\u0000\u0000\u5D25\u0000\u0000"+
-        "\u5D26\u0000\u0000\u0000\u5D27\u5D28\u0000\u0000"+
-        "\u0000\u0000\u0000\u5D29\u5D2A\u0000\u0000\u5D2B"+
-        "\u5D2C\u0000\u0000\u0000\u0000\u5D2D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5D2E\u0000\u0000\u0000\u5D2F\u5D30\u5D31\u5D32"+
-        "\u0000\u0000\u0000\u0000\u5D33\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5D34\u5D35\u5D36\u5D37"+
-        "\u5D38\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5D39\u0000\u0000"+
-        "\u0000\u5D3A\u0000\u5D3B\u0000\u5D3C\u0000\u0000"+
-        "\u0000\u5D3D\u0000\u5D3E\u0000\u0000\u5D3F\u0000"+
-        "\u0000\u5D40\u0000\u0000\u0000\u5D41\u0000\u5D42"+
-        "\u0000\u0000\u0000\u0000\u5D43\u5D44\u0000\u5D45"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5D46"+
-        "\u0000\u5D47\u5D48\u0000\u5D49\u5D4A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5D4B\u0000"+
-        "\u5D4C\u0000\u5D4D\u0000\u5D4E\u0000\u5D4F\u0000"+
-        "\u0000\u0000\u0000\u5D50\u5D51\u0000\u0000\u5D52"+
-        "\u0000\u0000\u0000\u0000\u0000\u5D53\u0000\u5D54"+
-        "\u0000\u0000\u0000\u0000\u0000\u5D55\u5D56\u0000"+
-        "\u5D57\u0000\u0000\u5D58\u0000\u5D59\u0000\u5D5A"+
-        "\u0000\u5D5B\u0000\u0000\u0000\u5D5C\u5D5D\u0000"+
-        "\u0000\u0000\u0000\u5D5E\u0000\u0000\u5D5F\u5D60"+
-        "\u5D61\u0000\u0000\u0000\u5D62\u5D63\u0000\u0000"+
-        "\u0000\u5D64\u0000\u0000\u0000\u5D65\u0000\u5D66"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5D67\u5D68\u5D69"+
-        "\u0000\u5D6A\u5D6B\u5D6C\u0000\u0000\u5D6D\u5D6E"+
-        "\u5D6F\u0000\u0000\u5D70\u0000\u0000\u5D71\u0000"+
-        "\u0000\u0000\u0000\u5D72\u0000\u0000\u0000\u5D73"+
-        "\u5D74\u0000\u5D75\u0000\u0000\u0000\u5D76\u5D77"+
-        "\u0000\u5D78\u0000\u0000\u0000\u0000\u0000\u5D79"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5D7A"+
-        "\u0000\u5D7B\u0000\u0000\u0000\u0000\u5D7C\u5D7D"+
-        "\u0000\u0000\u0000\u5D7E\u0000\u0000\u5E21\u5E22"+
-        "\u0000\u0000\u0000\u5E23\u0000\u0000\u5E24\u0000"+
-        "\u0000\u0000\u0000\u5E25\u0000\u0000\u5E26\u0000"+
-        "\u5E27\u5E28\u5E29\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5E2A\u0000\u5E2B\u5E2C\u5E2D\u0000\u5E2E"+
-        "\u0000\u0000\u0000\u0000\u0000\u5E2F\u0000\u5E30"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5E31\u0000\u0000\u0000"+
-        "\u5E32\u0000\u0000\u0000\u5E33\u5E34\u5E35\u0000"+
-        "\u0000\u0000\u0000\u0000\u5E36\u0000\u0000\u5E37"+
-        "\u0000\u0000\u0000\u0000\u0000\u5E38\u5E39\u0000"+
-        "\u0000\u0000\u5E3F\u5E3A\u0000\u0000\u0000\u0000"+
-        "\u0000\u5E3B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5E3C\u0000\u5E3D\u5E3E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5E40\u0000\u0000"+
-        "\u5E41\u0000\u0000\u0000\u0000\u0000\u0000\u5E42"+
-        "\u0000\u0000\u0000\u0000\u5E43\u0000\u0000\u0000"+
-        "\u0000\u0000\u5E44\u5E45\u5E46\u5E47\u5E48\u0000"+
-        "\u5E49\u0000\u0000\u0000\u0000\u5E4E\u0000\u0000"+
-        "\u0000\u0000\u5E4A\u5E4B\u5E4C\u0000\u0000\u0000"+
-        "\u0000\u5E4D\u0000\u0000\u0000\u0000\u5E4F\u0000"+
-        "\u0000\u0000\u0000\u5E50\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5E51\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5E52\u0000"+
-        "\u5E53\u5E54\u0000\u0000\u5E55\u0000\u5E56\u0000"+
-        "\u0000\u5E57\u0000\u0000\u5E58\u5E59\u0000\u0000"+
-        "\u0000\u0000\u0000\u5E5A\u0000\u5E5B\u0000\u5E5C"+
-        "\u0000\u0000\u0000\u0000\u5E5D\u5E5E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5E5F\u0000\u5E60\u5E61"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5E62\u5E63\u0000\u0000\u0000\u5E64\u5E65\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5E66\u0000\u5E67"+
-        "\u0000\u5E68\u0000\u5E69\u0000\u0000\u0000\u5E6A"+
-        "\u0000\u5E6B\u0000\u5E6C\u5E6D\u0000\u0000\u5E6E"+
-        "\u5E6F\u5E72\u0000\u5E70\u0000\u5E71\u0000\u0000"+
-        "\u0000\u0000\u0000\u5E73\u5E74\u0000\u5E75\u0000"+
-        "\u5E76\u5E77\u0000\u0000\u0000\u5E78\u0000\u0000"+
-        "\u0000\u0000\u0000\u5E79\u0000\u5E7A\u5E7B\u0000"+
-        "\u0000\u0000\u0000\u5E7C\u0000\u0000\u5E7D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5E7E\u5F21"+
-        "\u0000\u0000\u0000\u5F22\u0000\u0000\u0000\u0000"+
-        "\u5F23\u0000\u5F24\u5F25\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F26\u0000\u5F27\u5F28\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5F29\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F2A\u5F2B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F2C\u5F2D\u0000"+
-        "\u0000\u5F2E\u0000\u5F2F\u0000\u0000\u0000\u5F30"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F32\u5F31\u0000"+
-        "\u0000\u5F33\u0000\u0000\u0000\u5F34\u0000\u0000"+
-        "\u0000\u5F35\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5F36\u0000\u0000\u0000\u5F37\u0000\u0000\u5F38"+
-        "\u5F39\u0000\u5F3A\u0000\u0000\u5F3B\u0000\u5F3C"+
-        "\u5F3D\u0000\u0000\u0000\u0000\u0000\u5F3E\u5F3F"+
-        "\u0000\u5F40\u0000\u5F41\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F42\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5F43\u0000\u0000\u0000\u0000\u5F44"+
-        "\u0000\u0000\u0000\u5F45\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F46\u0000\u0000"+
-        "\u0000\u5F47\u0000\u0000\u5F48\u0000\u5F49\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5F4A"+
-        "\u0000\u0000\u5F4B\u0000\u5F4C\u0000\u0000\u0000"+
-        "\u5F4D\u0000\u0000\u0000\u0000\u5F4E\u0000\u0000"+
-        "\u5F4F\u5F50\u0000\u0000\u0000\u5F51\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5F52\u5F53"+
-        "\u5F54\u0000\u0000\u0000\u0000\u0000\u5F55\u0000"+
-        "\u0000\u0000\u0000\u5F56\u5F57\u0000\u0000\u5F58"+
-        "\u0000\u0000\u5F59\u0000\u0000\u5F5A\u0000\u5F5B"+
-        "\u0000\u5F5C\u0000\u5F5D\u5F6F\u0000\u0000\u0000"+
-        "\u5F5E\u0000\u0000\u0000\u0000\u5F5F\u5F60\u5F61"+
-        "\u5F62\u0000\u5F63\u0000\u0000\u0000\u5F64\u0000"+
-        "\u0000\u5F65\u0000\u0000\u5F66\u5F67\u0000\u5F68"+
-        "\u0000\u5F69\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5F6A\u5F6B\u0000\u5F6C"+
-        "\u0000\u0000\u0000\u0000\u5F6D\u0000\u0000\u0000"+
-        "\u5F6E\u5F70\u5F71\u0000\u5F72\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F73\u0000\u0000"+
-        "\u0000\u5F74\u0000\u0000\u5F75\u5F76\u5F77\u0000"+
-        "\u0000\u0000\u0000\u5F78\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F79\u0000\u0000\u5F7A\u0000\u5F7B\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5F7C\u5F7D\u5F7E\u6021\u0000\u0000\u6022\u6023"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6024\u0000\u6025\u0000\u0000\u6026\u6027"+
-        "\u6028\u6029\u0000\u0000\u0000\u602A\u0000\u0000"+
-        "\u602B\u602C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u602D\u0000\u602E\u602F\u6030"+
-        "\u0000\u0000\u0000\u0000\u6031\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6032\u6033\u6034\u6035\u0000"+
-        "\u0000\u6036\u6037\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6038\u0000\u0000\u6039\u603A\u0000\u603B"+
-        "\u603C\u603D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u603E\u603F\u6040\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6041\u6042\u0000\u0000\u0000\u0000"+
-        "\u0000\u6043\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6044\u0000\u6045\u0000\u0000\u6046\u0000\u0000"+
-        "\u0000\u0000\u6047\u6048\u0000\u6049\u604A\u0000"+
-        "\u0000\u0000\u604B\u0000\u0000\u0000\u0000\u604C"+
-        "\u0000\u604D\u0000\u0000\u0000\u604E\u604F\u0000"+
-        "\u0000\u0000\u0000\u6050\u0000\u6051\u0000\u0000"+
-        "\u0000\u0000\u6052\u6053\u0000\u0000\u0000\u0000"+
-        "\u6054\u6055\u0000\u6056\u6057\u0000\u0000\u6058"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6059"+
-        "\u0000\u605A\u0000\u0000\u605B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u605C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u605D\u0000\u0000\u0000\u0000\u6064\u605E\u0000"+
-        "\u605F\u6060\u0000\u0000\u0000\u0000\u0000\u6061"+
-        "\u0000\u6062\u6063\u0000\u0000\u0000\u0000\u0000"+
-        "\u6065\u0000\u6066\u0000\u0000\u0000\u0000\u6067"+
-        "\u6068\u0000\u0000\u0000\u0000\u0000\u0000\u6069"+
-        "\u606A\u0000\u0000\u0000\u0000\u0000\u606B\u606C"+
-        "\u606D\u0000\u0000\u0000\u0000\u0000\u606E\u0000"+
-        "\u606F\u6070\u0000\u6071\u0000\u6072\u0000\u6073"+
-        "\u6074\u0000\u0000\u0000\u6075\u6076\u6077\u0000"+
-        "\u0000\u0000\u0000\u0000\u6078\u6079\u607A\u607B"+
-        "\u0000\u0000\u607C\u0000\u0000\u0000\u0000\u0000"+
-        "\u607D\u607E\u0000\u6121\u0000\u0000\u0000\u6122"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6123"+
-        "\u0000\u6124\u6125\u6126\u6127\u6128\u0000\u0000"+
-        "\u6129\u0000\u0000\u0000\u0000\u612A\u612B\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u612C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u612D\u0000\u0000"+
-        "\u612E\u612F\u0000\u0000\u6130\u6131\u6132\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6133\u6134\u0000"+
-        "\u6135\u0000\u0000\u0000\u0000\u0000\u6136\u0000"+
-        "\u6137\u6138\u0000\u0000\u0000\u0000\u6139\u0000"+
-        "\u0000\u0000\u613A\u613B\u0000\u613C\u0000\u0000"+
-        "\u613D\u0000\u613E\u613F\u0000\u6140\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6141\u0000\u0000\u6142\u6143\u0000\u0000\u0000"+
-        "\u6144\u0000\u0000\u0000\u0000\u0000\u6145\u0000"+
-        "\u0000\u6146\u0000\u0000\u0000\u6147\u6148\u0000"+
-        "\u0000\u0000\u0000\u6149\u0000\u0000\u614A\u0000"+
-        "\u0000\u0000\u614B\u0000\u614C\u0000\u0000\u0000"+
-        "\u614D\u0000\u0000\u0000\u614E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u614F\u0000\u0000\u6150\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6151\u6152\u6154\u0000\u6155\u6156\u0000\u6153"+
-        "\u0000\u0000\u0000\u6157\u6158\u0000\u0000\u6159"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u615A"+
-        "\u0000\u0000\u0000\u615B\u615C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u615D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u615E\u0000\u615F\u0000\u0000"+
-        "\u0000\u0000\u6160\u0000\u0000\u0000\u6161\u6162"+
-        "\u0000\u0000\u0000\u0000\u6163\u0000\u0000\u0000"+
-        "\u6164\u0000\u0000\u0000\u6165\u0000\u0000\u0000"+
-        "\u0000\u6166\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6167\u0000\u0000"+
-        "\u6168\u0000\u0000\u6169\u616A\u0000\u616B\u0000"+
-        "\u616C\u0000\u0000\u0000\u0000\u616D\u0000\u616E"+
-        "\u616F\u6170\u0000\u6171\u0000\u0000\u0000\u0000"+
-        "\u6172\u6173\u6174\u0000\u0000\u6175\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6176\u0000\u6177\u6178\u6179\u0000\u617A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u617B\u617D\u0000"+
-        "\u0000\u0000\u0000\u617E\u6221\u6222\u0000\u6223"+
-        "\u6224\u0000\u0000\u0000\u617C\u0000\u0000\u0000"+
-        "\u0000\u0000\u622D\u0000\u0000\u6225\u0000\u6226"+
-        "\u6227\u6228\u0000\u0000\u6229\u622A\u0000\u622B"+
-        "\u0000\u0000\u0000\u0000\u0000\u622C\u0000\u0000"+
-        "\u0000\u0000\u0000\u622F\u0000\u0000\u0000\u6230"+
-        "\u6231\u0000\u0000\u0000\u6232\u0000\u622E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6233\u6234"+
-        "\u6235\u0000\u0000\u0000\u6236\u6237\u6238\u0000"+
-        "\u6239\u0000\u0000\u0000\u0000\u623A\u0000\u0000"+
-        "\u623B\u0000\u0000\u0000\u623C\u0000\u623D\u623E"+
-        "\u623F\u0000\u6240\u0000\u6241\u0000\u6242\u0000"+
-        "\u6243\u0000\u6245\u6246\u0000\u6244\u0000\u6247"+
-        "\u0000\u6248\u0000\u0000\u0000\u0000\u6249\u624A"+
-        "\u0000\u624B\u0000\u0000\u624C\u0000\u624D\u624E"+
-        "\u0000\u624F\u6250\u0000\u6251\u6252\u0000\u0000"+
-        "\u0000\u0000\u0000\u6253\u0000\u0000\u0000\u6254"+
-        "\u6255\u0000\u0000\u0000\u0000\u0000\u0000\u6256"+
-        "\u0000\u0000\u0000\u6257\u0000\u0000\u0000\u6258"+
-        "\u0000\u6259\u625A\u625B\u0000\u0000\u0000\u0000"+
-        "\u0000\u625C\u0000\u0000\u625D\u0000\u0000\u625E"+
-        "\u0000\u0000\u0000\u0000\u0000\u625F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6260\u0000\u0000\u0000"+
-        "\u0000\u6261\u6262\u6263\u0000\u0000\u0000\u0000"+
-        "\u0000\u6264\u0000\u6265\u0000\u6266\u6267\u0000"+
-        "\u0000\u0000\u6268\u0000\u0000\u0000\u6269\u0000"+
-        "\u0000\u626A\u0000\u626B\u626C\u626D\u0000\u0000"+
-        "\u626E\u0000\u0000\u0000\u0000\u0000\u626F\u0000"+
-        "\u0000\u6270\u0000\u0000\u0000\u0000\u6271\u0000"+
-        "\u6272\u0000\u0000\u0000\u6273\u6274\u6275\u0000"+
-        "\u6276\u6277\u6278\u6279\u0000\u0000\u627A\u0000"+
-        "\u0000\u0000\u0000\u627B\u627C\u627D\u0000\u627E"+
-        "\u0000\u0000\u6321\u6322\u0000\u6323\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6324\u6325\u0000\u0000\u6326"+
-        "\u0000\u6327\u6328\u0000\u0000\u0000\u6329\u0000"+
-        "\u0000\u0000\u0000\u0000\u632A\u632B\u0000\u0000"+
-        "\u0000\u632C\u632D\u0000\u632E\u632F\u6330\u6331"+
-        "\u6332\u6333\u0000\u0000\u0000\u0000\u0000\u6334"+
-        "\u0000\u6335\u0000\u6336\u0000\u6337\u0000\u0000"+
-        "\u6338\u6339\u0000\u0000\u633A\u633B\u633C\u633D"+
-        "\u0000\u633E\u633F\u0000\u6340\u0000\u0000\u0000"+
-        "\u6341\u0000\u6342\u6343\u0000\u0000\u6344\u0000"+
-        "\u6345\u0000\u0000\u0000\u6346\u6347\u0000\u0000"+
-        "\u0000\u0000\u0000\u6348\u6349\u634A\u634B\u0000"+
-        "\u634C\u0000\u0000\u0000\u0000\u0000\u634D\u634E"+
-        "\u634F\u0000\u0000\u6350\u0000\u6351\u6352\u0000"+
-        "\u6353\u6354\u6355\u0000\u6356\u0000\u6357\u0000"+
-        "\u6358\u0000\u6359\u635A\u0000\u0000\u635B\u635C"+
-        "\u0000\u0000\u635D\u0000\u0000\u635E\u635F\u6360"+
-        "\u0000\u6361\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6362\u6363\u0000\u0000\u6364\u6365\u0000\u0000"+
-        "\u6366\u6367\u0000\u0000\u0000\u6368\u0000\u6369"+
-        "\u636A\u636B\u0000\u0000\u0000\u0000\u636C\u636D"+
-        "\u636E\u0000\u0000\u0000\u0000\u636F\u6370\u6371"+
-        "\u6372\u6373\u0000\u6374\u6375\u6376\u0000\u6377"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6378\u6379\u637A\u0000\u0000\u637B\u637C\u0000"+
-        "\u0000\u0000\u637D\u0000\u0000\u0000\u0000\u637E"+
-        "\u0000\u6421\u0000\u0000\u0000\u0000\u0000\u6422"+
-        "\u6423\u0000\u0000\u0000\u6424\u6425\u0000\u6426"+
-        "\u6427\u0000\u0000\u6428\u0000\u0000\u0000\u6429"+
-        "\u0000\u0000\u642A\u0000\u0000\u0000\u642B\u0000"+
-        "\u642C\u0000\u642D\u642E\u642F\u6430\u0000\u6431"+
-        "\u6432\u6433\u6434\u6435\u0000\u6436\u6437\u6438"+
-        "\u6439\u0000\u0000\u643A\u643B\u643C\u643D\u0000"+
-        "\u643E\u0000\u0000\u643F\u0000\u6440\u0000\u6441"+
-        "\u6442\u6443\u0000\u0000\u6444\u6445\u0000\u6446"+
-        "\u6447\u6448\u0000\u6449\u0000\u644A\u0000\u644B"+
-        "\u644C\u0000\u0000\u0000\u644D\u0000\u644E\u0000"+
-        "\u644F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6450\u0000\u6451\u0000\u0000\u0000\u6452"+
-        "\u6453\u0000\u6454\u0000\u0000\u0000\u0000\u0000"+
-        "\u6455\u0000\u0000\u0000\u0000\u6456\u0000\u0000"+
-        "\u0000\u6457\u0000\u0000\u6458\u6459\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u645A\u645B\u645C\u645D"+
-        "\u0000\u645E\u0000\u0000\u645F\u6460\u0000\u6461"+
-        "\u0000\u6462\u6463\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6464\u6465\u0000\u6466\u6467"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6468"+
-        "\u6469\u646A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u646B\u646C\u646D\u0000\u0000\u646E\u0000\u646F"+
-        "\u6470\u0000\u6471\u0000\u0000\u0000\u6472\u0000"+
-        "\u0000\u0000\u0000\u0000\u6473\u6474\u0000\u6475"+
-        "\u0000\u6476\u6477\u0000\u0000\u6478\u0000\u6479"+
-        "\u647A\u647B\u0000\u647C\u647D\u0000\u647E\u0000"+
-        "\u0000\u0000\u6521\u0000\u0000\u6522\u0000\u6523"+
-        "\u6524\u6525\u6526\u0000\u0000\u0000\u0000\u0000"+
-        "\u6527\u0000\u6528\u6529\u0000\u652A\u0000\u652B"+
-        "\u0000\u0000\u652C\u0000\u0000\u652D\u0000\u0000"+
-        "\u652E\u0000\u0000\u652F\u0000\u0000\u6530\u0000"+
-        "\u0000\u6531\u0000\u6532\u6533\u0000\u6534\u0000"+
-        "\u6535\u653B\u0000\u6536\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6537\u6538\u6539\u0000"+
-        "\u0000\u0000\u653A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u653C\u0000\u0000\u653D\u653E\u653F\u6540"+
-        "\u0000\u6541\u6542\u6543\u6544\u6545\u0000\u0000"+
-        "\u0000\u0000\u0000\u6546\u0000\u0000\u0000\u0000"+
-        "\u0000\u6547\u0000\u0000\u6548\u0000\u6549\u654A"+
-        "\u0000\u0000\u654B\u0000\u0000\u0000\u654C\u654D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u654F"+
-        "\u6550\u654E\u6551\u6552\u0000\u6553\u0000\u0000"+
-        "\u0000\u6554\u6555\u0000\u6556\u0000\u0000\u0000"+
-        "\u6557\u6558\u0000\u0000\u0000\u6559\u655A\u655B"+
-        "\u0000\u0000\u0000\u0000\u0000\u655C\u655D\u655E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u655F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6560\u6561"+
-        "\u0000\u6562\u6563\u6564\u6565\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6566\u0000\u6568\u0000\u6567"+
-        "\u0000\u0000\u0000\u6569\u0000\u656A\u0000\u0000"+
-        "\u656B\u0000\u656C\u0000\u656D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u656E\u0000\u0000"+
-        "\u0000\u656F\u0000\u0000\u6570\u0000\u0000\u6571"+
-        "\u0000\u6572\u0000\u6573\u0000\u0000\u0000\u0000"+
-        "\u6574\u0000\u0000\u6575\u0000\u6576\u6577\u6578"+
-        "\u0000\u6579\u657A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u657C\u657B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u657D\u657E\u0000\u0000\u0000\u0000\u6621\u0000"+
-        "\u0000\u0000\u0000\u0000\u6622\u0000\u0000\u0000"+
-        "\u6623\u0000\u0000\u0000\u6624\u6625\u6626\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6627\u6628\u6629"+
-        "\u0000\u662A\u0000\u0000\u0000\u0000\u662B\u0000"+
-        "\u0000\u662C\u0000\u662D\u662E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u662F\u0000\u6630\u0000"+
-        "\u0000\u0000\u6631\u0000\u0000\u6632\u0000\u6633"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6634\u0000"+
-        "\u6635\u6636\u0000\u6637\u0000\u0000\u0000\u0000"+
-        "\u6638\u6639\u663A\u663B\u0000\u0000\u0000\u0000"+
-        "\u0000\u663C\u663D\u0000\u0000\u663E\u663F\u6640"+
-        "\u6641\u0000\u0000\u0000\u6642\u0000\u6643\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6644\u6645\u0000"+
-        "\u0000\u0000\u6646\u0000\u6647\u6648\u6649\u0000"+
-        "\u0000\u0000\u0000\u0000\u664A\u0000\u0000\u0000"+
-        "\u0000\u664B\u0000\u664C\u0000\u0000\u0000\u664D"+
-        "\u664E\u664F\u6650\u0000\u6651\u6652\u0000\u0000"+
-        "\u0000\u6653\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6654\u0000\u6655\u0000\u6656\u6657"+
-        "\u6658\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6659\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u665A\u0000"+
-        "\u0000\u0000\u0000\u0000\u665B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u665C\u665D\u0000\u665E\u665F"+
-        "\u0000\u6660\u6661\u6662\u6663\u0000\u0000\u0000"+
-        "\u0000\u6664\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6665\u0000\u0000\u0000\u0000\u6666\u0000"+
-        "\u0000\u0000\u6667\u0000\u0000\u6668\u0000\u6669"+
-        "\u0000\u0000\u0000\u0000\u666A\u666B\u666C\u0000"+
-        "\u0000\u666D\u0000\u0000\u0000\u0000\u666E\u666F"+
-        "\u0000\u0000\u0000\u6670\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6671\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6672\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6673\u0000\u0000\u0000\u0000\u0000"+
-        "\u6675\u0000\u6676\u0000\u0000\u6677\u6678\u6679"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u667A\u0000\u0000\u0000\u0000\u0000\u667B"+
-        "\u0000\u667C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u667D\u0000\u0000\u0000\u0000\u0000";
-
-    private final static String innerIndex5=
-        "\u0000\u0000\u667E\u6721\u0000\u6722\u0000\u0000"+
-        "\u0000\u6723\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6724\u6725\u0000\u6726\u0000\u0000"+
-        "\u0000\u6727\u6728\u6729\u0000\u0000\u0000\u0000"+
-        "\u672A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u672B\u0000\u672C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u672D\u0000\u672E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u672F\u0000\u0000\u0000\u6730\u6731"+
-        "\u0000\u0000\u0000\u0000\u0000\u6732\u0000\u6733"+
-        "\u6734\u0000\u6735\u6736\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6737\u0000\u0000\u0000\u6738"+
-        "\u0000\u0000\u6739\u0000\u0000\u0000\u673A\u0000"+
-        "\u0000\u0000\u0000\u673B\u0000\u0000\u673C\u673D"+
-        "\u673E\u0000\u0000\u673F\u0000\u6740\u0000\u6741"+
-        "\u6742\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6743\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6744\u6745\u6746"+
-        "\u0000\u6747\u6748\u0000\u0000\u0000\u6749\u674A"+
-        "\u0000\u0000\u674B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u674C\u0000\u674D\u0000"+
-        "\u0000\u674E\u674F\u0000\u0000\u6750\u6751\u0000"+
-        "\u6752\u6753\u6754\u0000\u6755\u0000\u6756\u6757"+
-        "\u0000\u6758\u0000\u0000\u6759\u675A\u0000\u675B"+
-        "\u0000\u675C\u675D\u0000\u675E\u675F\u6760\u0000"+
-        "\u6761\u6762\u0000\u0000\u6763\u0000\u0000\u6764"+
-        "\u6765\u6766\u0000\u676A\u0000\u6767\u6768\u0000"+
-        "\u6769\u676B\u0000\u0000\u676C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u676D"+
-        "\u0000\u676E\u0000\u0000\u676F\u0000\u0000\u6770"+
-        "\u6771\u0000\u6772\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6773"+
-        "\u0000\u0000\u6774\u0000\u0000\u6776\u6777\u0000"+
-        "\u0000\u0000\u0000\u0000\u6778\u0000\u6779\u0000"+
-        "\u0000\u6775\u0000\u0000\u677A\u0000\u677B\u0000"+
-        "\u677C\u0000\u0000\u677D\u0000\u6828\u677E\u0000"+
-        "\u0000\u0000\u0000\u6821\u0000\u0000\u6822\u6823"+
-        "\u6824\u0000\u6825\u6826\u0000\u6827\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6829\u0000"+
-        "\u0000\u0000\u0000\u0000\u682A\u0000\u0000\u682B"+
-        "\u0000\u0000\u682C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u682D\u682E\u682F\u0000\u0000\u6830\u6831"+
-        "\u0000\u6832\u6833\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6834\u6835\u0000\u6836\u6837\u0000"+
-        "\u0000\u0000\u6838\u0000\u6839\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u683A\u0000\u683B\u683C\u0000"+
-        "\u683D\u0000\u0000\u0000\u683E\u0000\u0000\u683F"+
-        "\u6840\u0000\u6841\u6842\u0000\u0000\u0000\u6843"+
-        "\u0000\u0000\u6844\u0000\u0000\u6845\u0000\u0000"+
-        "\u6846\u0000\u0000\u0000\u6847\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6848\u0000\u6849\u0000\u684A\u684B\u684C"+
-        "\u0000\u0000\u684D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u684E\u0000\u0000\u684F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6850\u0000\u0000\u0000\u0000\u6851"+
-        "\u6852\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6853\u0000\u0000\u0000\u6854\u6855\u6856"+
-        "\u0000\u0000\u6857\u6858\u6859\u0000\u0000\u685A"+
-        "\u0000\u0000\u685B\u0000\u0000\u0000\u685C\u685D"+
-        "\u0000\u0000\u0000\u685E\u0000\u0000\u0000\u0000"+
-        "\u0000\u685F\u6860\u6861\u6862\u6863\u0000\u0000"+
-        "\u0000\u6864\u6865\u6866\u6867\u0000\u0000\u0000"+
-        "\u6868\u6869\u0000\u0000\u0000\u0000\u686A\u686B"+
-        "\u686C\u0000\u0000\u0000\u0000\u686D\u686E\u0000"+
-        "\u0000\u0000\u0000\u0000\u686F\u0000\u0000\u0000"+
-        "\u6870\u6871\u0000\u6872\u6873\u0000\u6874\u6875"+
-        "\u6876\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6877\u0000\u6878\u0000\u6879"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u687A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u687B\u687C\u687D\u0000\u0000\u687E\u0000\u0000"+
-        "\u0000\u6921\u6922\u0000\u0000\u6923\u0000\u6924"+
-        "\u0000\u0000\u0000\u6925\u0000\u0000\u0000\u0000"+
-        "\u0000\u6926\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6927\u6928\u0000\u0000\u0000"+
-        "\u0000\u6929\u692A\u0000\u692B\u0000\u692C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u692D"+
-        "\u0000\u0000\u692E\u692F\u6930\u0000\u0000\u0000"+
-        "\u6931\u0000\u0000\u0000\u6932\u6933\u0000\u0000"+
-        "\u0000\u6934\u0000\u0000\u0000\u6935\u6936\u0000"+
-        "\u0000\u0000\u6937\u6938\u6939\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u693A\u693B\u0000\u0000\u0000"+
-        "\u693C\u693D\u0000\u0000\u0000\u0000\u693E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u693F\u0000"+
-        "\u6940\u0000\u6941\u6942\u6943\u0000\u0000\u6944"+
-        "\u0000\u0000\u0000\u0000\u0000\u6945\u6946\u0000"+
-        "\u0000\u0000\u0000\u6947\u0000\u6948\u6949\u0000"+
-        "\u694A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u694C\u0000\u0000\u694D\u0000\u0000\u694B"+
-        "\u0000\u0000\u694E\u694F\u6950\u0000\u6951\u0000"+
-        "\u0000\u6952\u0000\u0000\u6953\u0000\u6954\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6955\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6956\u0000\u6957\u0000\u6958\u6959"+
-        "\u0000\u0000\u695A\u0000\u695B\u695C\u695D\u0000"+
-        "\u0000\u695E\u0000\u695F\u0000\u0000\u6960\u6961"+
-        "\u0000\u6962\u0000\u6963\u0000\u0000\u6964\u0000"+
-        "\u6965\u0000\u0000\u0000\u0000\u0000\u6966\u0000"+
-        "\u6967\u0000\u6968\u0000\u0000\u6969\u696A\u696B"+
-        "\u0000\u0000\u0000\u696C\u696D\u0000\u0000\u0000"+
-        "\u696E\u0000\u0000\u0000\u696F\u6970\u0000\u6971"+
-        "\u0000\u6972\u0000\u0000\u6973\u0000\u0000\u0000"+
-        "\u0000\u0000\u6974\u6975\u0000\u6976\u0000\u0000"+
-        "\u0000\u6977\u6978\u0000\u0000\u6979\u0000\u697A"+
-        "\u697B\u697C\u697D\u697E\u6A21\u6A22\u0000\u0000"+
-        "\u6A23\u6A24\u0000\u6A25\u6A26\u6A27\u6A28\u0000"+
-        "\u6A29\u0000\u6A2A\u0000\u0000\u0000\u6A2B\u0000"+
-        "\u0000\u6A2C\u0000\u6A2D\u6A2E\u0000\u0000\u0000"+
-        "\u6A2F\u0000\u0000\u0000\u0000\u0000\u6A30\u0000"+
-        "\u0000\u0000\u0000\u6A31\u0000\u6A32\u0000\u0000"+
-        "\u0000\u0000\u0000\u6A33\u6A34\u6A35\u0000\u6A36"+
-        "\u0000\u6A37\u6A38\u0000\u0000\u6A39\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6A3A\u0000\u0000\u6A3B\u6A3C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A3D\u6A3E\u6A3F"+
-        "\u0000\u0000\u0000\u6A40\u0000\u0000\u6A41\u0000"+
-        "\u0000\u6A42\u0000\u6A43\u0000\u6A44\u6A45\u0000"+
-        "\u6A46\u0000\u6A47\u6A48\u6A49\u6A4A\u6A4B\u0000"+
-        "\u0000\u0000\u0000\u6A4C\u0000\u6A4D\u0000\u6A4E"+
-        "\u6A4F\u6A50\u0000\u0000\u0000\u0000\u0000\u6A51"+
-        "\u6A52\u0000\u0000\u0000\u6A53\u6A54\u6A55\u6A56"+
-        "\u0000\u6A57\u6A58\u6A59\u0000\u6A5A\u0000\u6A5B"+
-        "\u6A5C\u0000\u0000\u0000\u6A5D\u0000\u0000\u0000"+
-        "\u0000\u0000\u6A5E\u0000\u0000\u6A5F\u6A60\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6A61\u6A62"+
-        "\u0000\u6A63\u0000\u0000\u6A64\u0000\u0000\u0000"+
-        "\u6A65\u6A66\u6A67\u0000\u0000\u0000\u0000\u6A68"+
-        "\u6A69\u0000\u0000\u6A6A\u6A6B\u0000\u6A6C\u6A6D"+
-        "\u0000\u6A6E\u0000\u0000\u0000\u0000\u0000\u6A6F"+
-        "\u6A70\u0000\u0000\u0000\u0000\u0000\u6A71\u0000"+
-        "\u6A72\u0000\u0000\u0000\u0000\u0000\u0000\u6A73"+
-        "\u6A74\u0000\u0000\u0000\u0000\u6A75\u0000\u6A76"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A77\u0000\u6A78"+
-        "\u0000\u0000\u6A79\u6A7A\u0000\u0000\u0000\u6A7B"+
-        "\u0000\u0000\u0000\u6A7C\u0000\u0000\u0000\u6A7D"+
-        "\u6A7E\u6B21\u6B22\u0000\u0000\u6B23\u0000\u6B24"+
-        "\u6B25\u0000\u6B26\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6B27\u0000\u0000\u0000\u6B28"+
-        "\u0000\u6B29\u0000\u0000\u0000\u0000\u6B2A\u0000"+
-        "\u6B2B\u6B2C\u6B2D\u0000\u6B2E\u0000\u6B2F\u0000"+
-        "\u0000\u0000\u6B30\u6B31\u0000\u0000\u6B32\u6B33"+
-        "\u6B34\u6B35\u6B36\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6B37\u0000\u0000\u0000\u6B38\u6B39\u6B3A"+
-        "\u0000\u0000\u0000\u0000\u0000\u6B3B\u0000\u0000"+
-        "\u0000\u6B3C\u0000\u6B3D\u6B3E\u6B3F\u0000\u0000"+
-        "\u0000\u6B40\u6B41\u0000\u0000\u0000\u6B42\u6B43"+
-        "\u6B44\u0000\u0000\u6B45\u6B46\u0000\u6B47\u0000"+
-        "\u6B48\u0000\u0000\u6B49\u6B50\u6B4A\u6B4B\u6B4C"+
-        "\u0000\u0000\u0000\u6B4D\u0000\u0000\u0000\u0000"+
-        "\u6B52\u6B4E\u6B4F\u6B51\u0000\u0000\u6B53\u0000"+
-        "\u6B54\u0000\u6B55\u0000\u0000\u6B56\u0000\u6B57"+
-        "\u0000\u0000\u0000\u6B58\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6B59\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6B5A\u0000\u0000\u0000\u0000\u6B5B"+
-        "\u0000\u6B5C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6B5E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6B5D\u0000\u0000\u0000\u0000"+
-        "\u0000\u6B5F\u0000\u0000\u0000\u0000\u0000\u6B60"+
-        "\u6B61\u0000\u0000\u0000\u6B62\u6B63\u6B64\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6B65"+
-        "\u6B66\u0000\u6B67\u6B68\u6B69\u0000\u0000\u0000"+
-        "\u0000\u0000\u6B6A\u0000\u6B6B\u6B6D\u0000\u0000"+
-        "\u0000\u0000\u6B6E\u6B6F\u0000\u6B6C\u0000\u6B70"+
-        "\u0000\u0000\u6B71\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6B72\u6B73\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6B74"+
-        "\u0000\u0000\u6B76\u6B75\u0000\u6B77\u0000\u0000"+
-        "\u0000\u6B78\u6B79\u6B7A\u0000\u0000\u0000\u0000"+
-        "\u6B7B\u0000\u0000\u0000\u0000\u0000\u6B7C\u6B7D"+
-        "\u0000\u0000\u0000\u6B7E\u6C21\u0000\u6C22\u0000"+
-        "\u0000\u0000\u0000\u6C23\u6C24\u0000\u6C25\u0000"+
-        "\u0000\u0000\u6C26\u0000\u0000\u6C27\u6C28\u0000"+
-        "\u0000\u0000\u6C29\u6C2A\u0000\u6C2B\u6C2C\u6C2D"+
-        "\u6C2E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6C2F\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C30\u0000\u6C31\u0000\u6C32\u0000"+
-        "\u0000\u6C33\u0000\u0000\u0000\u6C34\u0000\u0000"+
-        "\u0000\u6C35\u0000\u0000\u6C36\u0000\u0000\u6C37"+
-        "\u0000\u0000\u0000\u6C38\u0000\u0000\u0000\u6C39"+
-        "\u0000\u6C3A\u6C3B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6C3C\u6C3D\u6C3E\u6C3F"+
-        "\u0000\u0000\u6C40\u0000\u0000\u0000\u6C41\u6C42"+
-        "\u6C43\u0000\u0000\u0000\u0000\u6C44\u0000\u6C45"+
-        "\u0000\u6C46\u0000\u6C47\u0000\u0000\u6C48\u0000"+
-        "\u6C49\u0000\u0000\u6C4A\u6C4B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6C4C\u0000"+
-        "\u0000\u0000\u6C4E\u0000\u0000\u0000\u0000\u6C4F"+
-        "\u0000\u0000\u6C4D\u0000\u0000\u0000\u6C50\u0000"+
-        "\u6C51\u6C52\u6C53\u0000\u0000\u6C54\u6C55\u0000"+
-        "\u0000\u6C56\u0000\u0000\u6C57\u6C58\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C59\u6C5A\u6C5B\u0000\u0000\u0000"+
-        "\u6C5C\u0000\u6C5D\u6C5E\u6C5F\u6C60\u0000\u6C61"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6C62\u6C63"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6C64\u0000"+
-        "\u6C65\u0000\u0000\u6C66\u0000\u0000\u6C67\u0000"+
-        "\u0000\u0000\u0000\u0000\u6C68\u0000\u0000\u0000"+
-        "\u6C69\u0000\u0000\u0000\u6C6A\u0000\u6C6B\u6C6C"+
-        "\u6C6D\u0000\u0000\u6C6E\u6C6F\u6C70\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6C71\u0000"+
-        "\u6C72\u0000\u0000\u6C73\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6C74\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6C75"+
-        "\u0000\u0000\u0000\u0000\u6C76\u0000\u0000\u6C77"+
-        "\u0000\u0000\u0000\u0000\u6C78\u6C79\u6C7A\u0000"+
-        "\u6C7B\u6C7C\u6C7D\u0000\u0000\u6C7E\u0000\u0000"+
-        "\u6D21\u0000\u0000\u0000\u0000\u0000\u0000\u6D22"+
-        "\u0000\u0000\u6D23\u6D24\u0000\u0000\u0000\u0000"+
-        "\u0000\u6D25\u0000\u0000\u0000\u0000\u0000\u6D26"+
-        "\u6D27\u6D28\u6D29\u0000\u6D2A\u0000\u6D2B\u6D2C"+
-        "\u0000\u6D2D\u6D2E\u6D2F\u0000\u0000\u0000\u6D30"+
-        "\u0000\u0000\u6D31\u0000\u0000\u0000\u6D32\u0000"+
-        "\u0000\u0000\u6D33\u6D34\u0000\u0000\u0000\u6D35"+
-        "\u0000\u6D36\u6D37\u0000\u6D38\u0000\u0000\u6D39"+
-        "\u0000\u6D3A\u6D3B\u0000\u6D3C\u6D3D\u0000\u6D3E"+
-        "\u0000\u6D3F\u0000\u6D40\u6D41\u6D42\u6D43\u6D44"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6D45\u0000\u6D46\u6D47\u6D48"+
-        "\u6D49\u0000\u6D4A\u0000\u0000\u6D4B\u6D4C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6D4D\u6D4E\u0000\u0000\u0000\u6D4F\u6D50\u6D51"+
-        "\u6D52\u6D53\u0000\u6D54\u0000\u6D55\u0000\u0000"+
-        "\u0000\u0000\u6D56\u0000\u0000\u6D57\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6D58"+
-        "\u6D59\u6D5A\u6D5B\u0000\u6D5C\u0000\u6D5D\u6D5E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6D5F\u0000"+
-        "\u0000\u6D60\u6D61\u6D62\u0000\u6D63\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2237\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-    private final static short index1[] = {
-        1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8,
-        9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
-        25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
-        41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
-        57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
-        73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89
-    };
-
-    private final static String index2[] = {
-        innerIndex0,
-        innerIndex1,
-        innerIndex2,
-        innerIndex3,
-        innerIndex4,
-        innerIndex5
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_MS5022X_Decoder.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_MS5022X_Decoder.java
deleted file mode 100755
index 844429a..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_MS5022X_Decoder.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
-class JIS_X_0212_MS5022X_Decoder extends JIS_X_0212_Decoder
-{
-    private int _start, _end;
-
-    public JIS_X_0212_MS5022X_Decoder(Charset cs) {
-        super(cs);
-        _start = 0x21;
-        _end = 0x7E;
-    }
-
-    protected char decodeDouble(int byte1, int byte2) {
-        if (((byte1 < 0) || (byte1 > _index1.length))
-            || ((byte2 < _start) || (byte2 > _end)))
-            return REPLACE_CHAR;
-        int n = (_index1[byte1] & 0xf)*(_end - _start + 1) + (byte2 - _start);
-        char unicode = _index2[_index1[byte1] >> 4].charAt(n);
-        if (unicode == '\u0000')
-            return (super.decodeDouble(byte1, byte2));
-        else
-            return unicode;
-    }
-
-    private final static String _innerIndex0=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2170\u2171"+
-        "\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\uFF07\uFF02\u0000\u0000\u0000\u70BB"+
-        "\u4EFC\u50F4\u51EC\u5307\u5324\uFA0E\u548A\u5759"+
-        "\uFA0F\uFA10\u589E\u5BEC\u5CF5\u5D53\uFA11\u5FB7"+
-        "\u6085\u6120\u654E\u0000\u6665\uFA12\uF929\u6801"+
-        "\uFA13\uFA14\u6A6B\u6AE2\u6DF8\u6DF2\u7028\uFA15"+
-        "\uFA16\u7501\u7682\u769E\uFA17\u7930\uFA18\uFA19"+
-        "\uFA1A\uFA1B\u7AE7\uFA1C\uFA1D\u7DA0\u7DD6\uFA1E"+
-        "\u8362\uFA1F\u85B0\uFA20\uFA21\u8807\uFA22\u8B7F"+
-        "\u8CF4\u8D76\uFA23\uFA24\uFA25\u90DE\uFA26\u9115"+
-        "\uFA27\uFA28\u9592\uF9DC\uFA29\u973B\u0000\u9751"+
-        "\uFA2A\uFA2B\uFA2C\u999E\u9AD9\u9B72\uFA2D\u9ED1"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u974D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\uE3AC\uE3AD\uE3AE\uE3AF\uE3B0\uE3B1"+
-        "\uE3B2\uE3B3\uE3B4\uE3B5\uE3B6\uE3B7\uE3B8\uE3B9"+
-        "\uE3BA\uE3BB\uE3BC\uE3BD\uE3BE\uE3BF\uE3C0\uE3C1"+
-        "\uE3C2\uE3C3\uE3C4\uE3C5\uE3C6\uE3C7\uE3C8\uE3C9"+
-        "\uE3CA\uE3CB\uE3CC\uE3CD\uE3CE\uE3CF\uE3D0\uE3D1"+
-        "\uE3D2\uE3D3\uE3D4\uE3D5\uE3D6\uE3D7\uE3D8\uE3D9"+
-        "\uE3DA\uE3DB\uE3DC\uE3DD\uE3DE\uE3DF\uE3E0\uE3E1"+
-        "\uE3E2\uE3E3\uE3E4\uE3E5\uE3E6\uE3E7\uE3E8\uE3E9"+
-        "\uE3EA\uE3EB\uE3EC\uE3ED\uE3EE\uE3EF\uE3F0\uE3F1"+
-        "\uE3F2\uE3F3\uE3F4\uE3F5\uE3F6\uE3F7\uE3F8\uE3F9"+
-        "\uE3FA\uE3FB\uE3FC\uE3FD\uE3FE\uE3FF\uE400\uE401"+
-        "\uE402\uE403\uE404\uE405\uE406\uE407\uE408\uE409"+
-        "\uE40A\uE40B\uE40C\uE40D\uE40E\uE40F\uE410\uE411"+
-        "\uE412\uE413\uE414\uE415\uE416\uE417\uE418\uE419"+
-        "\uE41A\uE41B\uE41C\uE41D\uE41E\uE41F\uE420\uE421"+
-        "\uE422\uE423\uE424\uE425\uE426\uE427\uE428\uE429"+
-        "\uE42A\uE42B\uE42C\uE42D\uE42E\uE42F\uE430\uE431"+
-        "\uE432\uE433\uE434\uE435\uE436\uE437\uE438\uE439"+
-        "\uE43A\uE43B\uE43C\uE43D\uE43E\uE43F\uE440\uE441"+
-        "\uE442\uE443\uE444\uE445\uE446\uE447\uE448\uE449"+
-        "\uE44A\uE44B\uE44C\uE44D\uE44E\uE44F\uE450\uE451"+
-        "\uE452\uE453\uE454\uE455\uE456\uE457\uE458\uE459"+
-        "\uE45A\uE45B\uE45C\uE45D\uE45E\uE45F\uE460\uE461"+
-        "\uE462\uE463\uE464\uE465\uE466\uE467\uE468\uE469"+
-        "\uE46A\uE46B\uE46C\uE46D\uE46E\uE46F\uE470\uE471"+
-        "\uE472\uE473\uE474\uE475\uE476\uE477\uE478\uE479"+
-        "\uE47A\uE47B\uE47C\uE47D\uE47E\uE47F\uE480\uE481"+
-        "\uE482\uE483\uE484\uE485\uE486\uE487\uE488\uE489"+
-        "\uE48A\uE48B\uE48C\uE48D\uE48E\uE48F\uE490\uE491"+
-        "\uE492\uE493\uE494\uE495\uE496\uE497\uE498\uE499"+
-        "\uE49A\uE49B\uE49C\uE49D\uE49E\uE49F\uE4A0\uE4A1"+
-        "\uE4A2\uE4A3\uE4A4\uE4A5\uE4A6\uE4A7\uE4A8\uE4A9"+
-        "\uE4AA\uE4AB\uE4AC\uE4AD\uE4AE\uE4AF\uE4B0\uE4B1"+
-        "\uE4B2\uE4B3\uE4B4\uE4B5\uE4B6\uE4B7\uE4B8\uE4B9"+
-        "\uE4BA\uE4BB\uE4BC\uE4BD\uE4BE\uE4BF\uE4C0\uE4C1"+
-        "\uE4C2\uE4C3\uE4C4\uE4C5\uE4C6\uE4C7\uE4C8\uE4C9"+
-        "\uE4CA\uE4CB\uE4CC\uE4CD\uE4CE\uE4CF\uE4D0\uE4D1"+
-        "\uE4D2\uE4D3\uE4D4\uE4D5\uE4D6\uE4D7\uE4D8\uE4D9"+
-        "\uE4DA\uE4DB\uE4DC\uE4DD\uE4DE\uE4DF\uE4E0\uE4E1"+
-        "\uE4E2\uE4E3\uE4E4\uE4E5\uE4E6\uE4E7\uE4E8\uE4E9"+
-        "\uE4EA\uE4EB\uE4EC\uE4ED\uE4EE\uE4EF\uE4F0\uE4F1"+
-        "\uE4F2\uE4F3\uE4F4\uE4F5\uE4F6\uE4F7\uE4F8\uE4F9"+
-        "\uE4FA\uE4FB\uE4FC\uE4FD\uE4FE\uE4FF\uE500\uE501"+
-        "\uE502\uE503\uE504\uE505\uE506\uE507\uE508\uE509"+
-        "\uE50A\uE50B\uE50C\uE50D\uE50E\uE50F\uE510\uE511"+
-        "\uE512\uE513\uE514\uE515\uE516\uE517\uE518\uE519"+
-        "\uE51A\uE51B\uE51C\uE51D\uE51E\uE51F\uE520\uE521"+
-        "\uE522\uE523\uE524\uE525\uE526\uE527\uE528\uE529"+
-        "\uE52A\uE52B\uE52C\uE52D\uE52E\uE52F\uE530\uE531"+
-        "\uE532\uE533\uE534\uE535\uE536\uE537\uE538\uE539"+
-        "\uE53A\uE53B\uE53C\uE53D\uE53E\uE53F\uE540\uE541"+
-        "\uE542\uE543\uE544\uE545\uE546\uE547\uE548\uE549"+
-        "\uE54A\uE54B\uE54C\uE54D\uE54E\uE54F\uE550\uE551"+
-        "\uE552\uE553\uE554\uE555\uE556\uE557\uE558\uE559"+
-        "\uE55A\uE55B\uE55C\uE55D\uE55E\uE55F\uE560\uE561"+
-        "\uE562\uE563\uE564\uE565\uE566\uE567\uE568\uE569"+
-        "\uE56A\uE56B\uE56C\uE56D\uE56E\uE56F\uE570\uE571"+
-        "\uE572\uE573\uE574\uE575\uE576\uE577\uE578\uE579"+
-        "\uE57A\uE57B\uE57C\uE57D\uE57E\uE57F\uE580\uE581"+
-        "\uE582\uE583\uE584\uE585\uE586\uE587\uE588\uE589"+
-        "\uE58A\uE58B\uE58C\uE58D\uE58E\uE58F\uE590\uE591"+
-        "\uE592\uE593\uE594\uE595\uE596\uE597\uE598\uE599"+
-        "\uE59A\uE59B\uE59C\uE59D\uE59E\uE59F\uE5A0\uE5A1"+
-        "\uE5A2\uE5A3\uE5A4\uE5A5\uE5A6\uE5A7\uE5A8\uE5A9"+
-        "\uE5AA\uE5AB\uE5AC\uE5AD\uE5AE\uE5AF\uE5B0\uE5B1"+
-        "\uE5B2\uE5B3\uE5B4\uE5B5\uE5B6\uE5B7\uE5B8\uE5B9"+
-        "\uE5BA\uE5BB\uE5BC\uE5BD\uE5BE\uE5BF\uE5C0\uE5C1"+
-        "\uE5C2\uE5C3\uE5C4\uE5C5\uE5C6\uE5C7\uE5C8\uE5C9"+
-        "\uE5CA\uE5CB\uE5CC\uE5CD\uE5CE\uE5CF\uE5D0\uE5D1"+
-        "\uE5D2\uE5D3\uE5D4\uE5D5\uE5D6\uE5D7\uE5D8\uE5D9"+
-        "\uE5DA\uE5DB\uE5DC\uE5DD\uE5DE\uE5DF\uE5E0\uE5E1"+
-        "\uE5E2\uE5E3\uE5E4\uE5E5\uE5E6\uE5E7\uE5E8\uE5E9"+
-        "\uE5EA\uE5EB\uE5EC\uE5ED\uE5EE\uE5EF\uE5F0\uE5F1"+
-        "\uE5F2\uE5F3\uE5F4\uE5F5\uE5F6\uE5F7\uE5F8\uE5F9"+
-        "\uE5FA\uE5FB\uE5FC\uE5FD\uE5FE\uE5FF\uE600\uE601"+
-        "\uE602\uE603\uE604\uE605\uE606\uE607\uE608\uE609"+
-        "\uE60A\uE60B\uE60C\uE60D\uE60E\uE60F\uE610\uE611"+
-        "\uE612\uE613\uE614\uE615\uE616\uE617\uE618\uE619"+
-        "\uE61A\uE61B\uE61C\uE61D\uE61E\uE61F\uE620\uE621"+
-        "\uE622\uE623\uE624\uE625\uE626\uE627\uE628\uE629"+
-        "\uE62A\uE62B\uE62C\uE62D\uE62E\uE62F\uE630\uE631"+
-        "\uE632\uE633\uE634\uE635\uE636\uE637\uE638\uE639"+
-        "\uE63A\uE63B\uE63C\uE63D\uE63E\uE63F\uE640\uE641"+
-        "\uE642\uE643\uE644\uE645\uE646\uE647\uE648\uE649"+
-        "\uE64A\uE64B\uE64C\uE64D\uE64E\uE64F\uE650\uE651"+
-        "\uE652\uE653\uE654\uE655\uE656\uE657\uE658\uE659"+
-        "\uE65A\uE65B\uE65C\uE65D\uE65E\uE65F\uE660\uE661"+
-        "\uE662\uE663\uE664\uE665\uE666\uE667\uE668\uE669"+
-        "\uE66A\uE66B\uE66C\uE66D\uE66E\uE66F\uE670\uE671"+
-        "\uE672\uE673\uE674\uE675\uE676\uE677\uE678\uE679"+
-        "\uE67A\uE67B\uE67C\uE67D\uE67E\uE67F\uE680\uE681"+
-        "\uE682\uE683\uE684\uE685\uE686\uE687\uE688\uE689"+
-        "\uE68A\uE68B\uE68C\uE68D\uE68E\uE68F\uE690\uE691"+
-        "\uE692\uE693\uE694\uE695\uE696\uE697\uE698\uE699"+
-        "\uE69A\uE69B\uE69C\uE69D\uE69E\uE69F\uE6A0\uE6A1"+
-        "\uE6A2\uE6A3\uE6A4\uE6A5\uE6A6\uE6A7\uE6A8\uE6A9"+
-        "\uE6AA\uE6AB\uE6AC\uE6AD\uE6AE\uE6AF\uE6B0\uE6B1"+
-        "\uE6B2\uE6B3\uE6B4\uE6B5\uE6B6\uE6B7\uE6B8\uE6B9"+
-        "\uE6BA\uE6BB\uE6BC\uE6BD\uE6BE\uE6BF\uE6C0\uE6C1"+
-        "\uE6C2\uE6C3\uE6C4\uE6C5\uE6C6\uE6C7\uE6C8\uE6C9"+
-        "\uE6CA\uE6CB\uE6CC\uE6CD\uE6CE\uE6CF\uE6D0\uE6D1"+
-        "\uE6D2\uE6D3\uE6D4\uE6D5\uE6D6\uE6D7\uE6D8\uE6D9"+
-        "\uE6DA\uE6DB\uE6DC\uE6DD\uE6DE\uE6DF\uE6E0\uE6E1"+
-        "\uE6E2\uE6E3\uE6E4\uE6E5\uE6E6\uE6E7\uE6E8\uE6E9"+
-        "\uE6EA\uE6EB\uE6EC\uE6ED\uE6EE\uE6EF\uE6F0\uE6F1"+
-        "\uE6F2\uE6F3\uE6F4\uE6F5\uE6F6\uE6F7\uE6F8\uE6F9"+
-        "\uE6FA\uE6FB\uE6FC\uE6FD\uE6FE\uE6FF\uE700\uE701"+
-        "\uE702\uE703\uE704\uE705\uE706\uE707\uE708\uE709"+
-        "\uE70A\uE70B\uE70C\uE70D\uE70E\uE70F\uE710\uE711"+
-        "\uE712\uE713\uE714\uE715\uE716\uE717\uE718\uE719"+
-        "\uE71A\uE71B\uE71C\uE71D\uE71E\uE71F\uE720\uE721"+
-        "\uE722\uE723\uE724\uE725\uE726\uE727\uE728\uE729"+
-        "\uE72A\uE72B\uE72C\uE72D\uE72E\uE72F\uE730\uE731"+
-        "\uE732\uE733\uE734\uE735\uE736\uE737\uE738\uE739"+
-        "\uE73A\uE73B\uE73C\uE73D\uE73E\uE73F\uE740\uE741"+
-        "\uE742\uE743\uE744\uE745\uE746\uE747\uE748\uE749"+
-        "\uE74A\uE74B\uE74C\uE74D\uE74E\uE74F\uE750\uE751"+
-        "\uE752\uE753\uE754\uE755\uE756\uE757";
-
-    private final static short _index1[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-    };
-
-    private final static String _index2[] = {
-        _innerIndex0
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_MS5022X_Encoder.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_MS5022X_Encoder.java
deleted file mode 100755
index 2e60caa..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_MS5022X_Encoder.java
+++ /dev/null
@@ -1,1618 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
-class JIS_X_0212_MS5022X_Encoder extends JIS_X_0212_Encoder
-{
-    public JIS_X_0212_MS5022X_Encoder(Charset cs) {
-        super(cs);
-    }
-
-    protected int encodeSingle(char inputChar) {
-        return -1;
-    }
-
-    protected int encodeDouble(char ch) {
-        int offset = _index1[((ch & 0xff00) >> 8 )] << 8;
-        int nativeCode = _index2[offset >> 12].charAt((offset & 0xFFF) + (ch & 0xFF));
-        if (nativeCode == '\u0001')
-            return (super.encodeDouble(ch));
-        else
-            return nativeCode;
-    }
-
-    private final static String _innerIndex0=
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u7321\u7322\u7323\u7324\u7325\u7326\u7327\u7328"+
-        "\u7329\u732A\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u733B\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u733C\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u733D\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u733E"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u733F\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u7341\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u7342\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u7345\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u7346\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u7347\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u7348\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u734A"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u734B\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u734C\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u734D\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001";
-
-    private final static String _innerIndex1=
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u734F\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u7352\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u7355\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u7356\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u7358\u0001\u0001\u0001\u0001\u0001"+
-        "\u7357\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u7359\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u733A\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u735C\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u735D\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u735E\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u7360\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u7365"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u7368\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u7369\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u736B\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u736D\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u7370"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u7372"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u7373\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u7374\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001";
-
-    private final static String _innerIndex2=
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u7378\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u737A\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u737D\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u7422\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u7463\u0001\u0001"+
-        "\u0001\u7424\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u7428\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u7429\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u742A\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u742C\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u7521\u7522\u7523\u7524"+
-        "\u7525\u7526\u7527\u7528\u7529\u752A\u752B\u752C"+
-        "\u752D\u752E\u752F\u7530\u7531\u7532\u7533\u7534"+
-        "\u7535\u7536\u7537\u7538\u7539\u753A\u753B\u753C"+
-        "\u753D\u753E\u753F\u7540\u7541\u7542\u7543\u7544"+
-        "\u7545\u7546\u7547\u7548\u7549\u754A\u754B\u754C"+
-        "\u754D\u754E\u754F\u7550\u7551\u7552\u7553\u7554"+
-        "\u7555\u7556\u7557\u7558\u7559\u755A\u755B\u755C"+
-        "\u755D\u755E\u755F\u7560\u7561\u7562\u7563\u7564"+
-        "\u7565\u7566\u7567\u7568\u7569\u756A\u756B\u756C"+
-        "\u756D\u756E\u756F\u7570\u7571\u7572\u7573\u7574"+
-        "\u7575\u7576\u7577\u7578\u7579\u757A\u757B\u757C"+
-        "\u757D\u757E\u7621\u7622\u7623\u7624\u7625\u7626"+
-        "\u7627\u7628\u7629\u762A\u762B\u762C\u762D\u762E"+
-        "\u762F\u7630\u7631\u7632\u7633\u7634\u7635\u7636"+
-        "\u7637\u7638\u7639\u763A\u763B\u763C\u763D\u763E"+
-        "\u763F\u7640\u7641\u7642\u7643\u7644\u7645\u7646"+
-        "\u7647\u7648\u7649\u764A\u764B\u764C\u764D\u764E"+
-        "\u764F\u7650\u7651\u7652\u7653\u7654\u7655\u7656"+
-        "\u7657\u7658\u7659\u765A\u765B\u765C\u765D\u765E"+
-        "\u765F\u7660\u7661\u7662\u7663\u7664\u7665\u7666"+
-        "\u7667\u7668\u7669\u766A\u766B\u766C\u766D\u766E"+
-        "\u766F\u7670\u7671\u7672\u7673\u7674\u7675\u7676"+
-        "\u7677\u7678\u7679\u767A\u767B\u767C\u767D\u767E"+
-        "\u7721\u7722\u7723\u7724\u7725\u7726\u7727\u7728"+
-        "\u7729\u772A\u772B\u772C\u772D\u772E\u772F\u7730"+
-        "\u7731\u7732\u7733\u7734\u7735\u7736\u7737\u7738"+
-        "\u7739\u773A\u773B\u773C\u773D\u773E\u773F\u7740"+
-        "\u7741\u7742\u7743\u7744\u7745\u7746\u7747\u7748"+
-        "\u7749\u774A\u774B\u774C\u774D\u774E\u774F\u7750"+
-        "\u7751\u7752\u7753\u7754\u7755\u7756\u7757\u7758"+
-        "\u7759\u775A\u775B\u775C\u775D\u775E\u775F\u7760"+
-        "\u7761\u7762\u7763\u7764\u7765\u7766\u7767\u7768"+
-        "\u7769\u776A\u776B\u776C\u776D\u776E\u776F\u7770"+
-        "\u7771\u7772\u7773\u7774\u7775\u7776\u7777\u7778"+
-        "\u7779\u777A\u777B\u777C\u777D\u777E\u7821\u7822"+
-        "\u7823\u7824\u7825\u7826\u7827\u7828\u7829\u782A"+
-        "\u782B\u782C\u782D\u782E\u782F\u7830\u7831\u7832"+
-        "\u7833\u7834\u7835\u7836\u7837\u7838\u7839\u783A"+
-        "\u783B\u783C\u783D\u783E\u783F\u7840\u7841\u7842"+
-        "\u7843\u7844\u7845\u7846\u7847\u7848\u7849\u784A"+
-        "\u784B\u784C\u784D\u784E\u784F\u7850\u7851\u7852"+
-        "\u7853\u7854\u7855\u7856\u7857\u7858\u7859\u785A"+
-        "\u785B\u785C\u785D\u785E\u785F\u7860\u7861\u7862"+
-        "\u7863\u7864\u7865\u7866\u7867\u7868\u7869\u786A"+
-        "\u786B\u786C\u786D\u786E\u786F\u7870\u7871\u7872"+
-        "\u7873\u7874\u7875\u7876\u7877\u7878\u7879\u787A"+
-        "\u787B\u787C\u787D\u787E\u7921\u7922\u7923\u7924"+
-        "\u7925\u7926\u7927\u7928\u7929\u792A\u792B\u792C"+
-        "\u792D\u792E\u792F\u7930\u7931\u7932\u7933\u7934"+
-        "\u7935\u7936\u7937\u7938\u7939\u793A\u793B\u793C"+
-        "\u793D\u793E\u793F\u7940\u7941\u7942\u7943\u7944"+
-        "\u7945\u7946\u7947\u7948\u7949\u794A\u794B\u794C"+
-        "\u794D\u794E\u794F\u7950\u7951\u7952\u7953\u7954"+
-        "\u7955\u7956\u7957\u7958\u7959\u795A\u795B\u795C"+
-        "\u795D\u795E\u795F\u7960\u7961\u7962\u7963\u7964"+
-        "\u7965\u7966\u7967\u7968\u7969\u796A\u796B\u796C"+
-        "\u796D\u796E\u796F\u7970\u7971\u7972\u7973\u7974"+
-        "\u7975\u7976\u7977\u7978\u7979\u797A\u797B\u797C"+
-        "\u797D\u797E\u7A21\u7A22\u7A23\u7A24\u7A25\u7A26"+
-        "\u7A27\u7A28\u7A29\u7A2A\u7A2B\u7A2C\u7A2D\u7A2E"+
-        "\u7A2F\u7A30\u7A31\u7A32\u7A33\u7A34\u7A35\u7A36"+
-        "\u7A37\u7A38\u7A39\u7A3A\u7A3B\u7A3C\u7A3D\u7A3E"+
-        "\u7A3F\u7A40\u7A41\u7A42\u7A43\u7A44\u7A45\u7A46"+
-        "\u7A47\u7A48\u7A49\u7A4A\u7A4B\u7A4C\u7A4D\u7A4E"+
-        "\u7A4F\u7A50\u7A51\u7A52\u7A53\u7A54\u7A55\u7A56"+
-        "\u7A57\u7A58\u7A59\u7A5A\u7A5B\u7A5C\u7A5D\u7A5E"+
-        "\u7A5F\u7A60\u7A61\u7A62\u7A63\u7A64\u7A65\u7A66"+
-        "\u7A67\u7A68\u7A69\u7A6A\u7A6B\u7A6C\u7A6D\u7A6E"+
-        "\u7A6F\u7A70\u7A71\u7A72\u7A73\u7A74\u7A75\u7A76"+
-        "\u7A77\u7A78\u7A79\u7A7A\u7A7B\u7A7C\u7A7D\u7A7E"+
-        "\u7B21\u7B22\u7B23\u7B24\u7B25\u7B26\u7B27\u7B28"+
-        "\u7B29\u7B2A\u7B2B\u7B2C\u7B2D\u7B2E\u7B2F\u7B30"+
-        "\u7B31\u7B32\u7B33\u7B34\u7B35\u7B36\u7B37\u7B38"+
-        "\u7B39\u7B3A\u7B3B\u7B3C\u7B3D\u7B3E\u7B3F\u7B40"+
-        "\u7B41\u7B42\u7B43\u7B44\u7B45\u7B46\u7B47\u7B48"+
-        "\u7B49\u7B4A\u7B4B\u7B4C\u7B4D\u7B4E\u7B4F\u7B50"+
-        "\u7B51\u7B52\u7B53\u7B54\u7B55\u7B56\u7B57\u7B58"+
-        "\u7B59\u7B5A\u7B5B\u7B5C\u7B5D\u7B5E\u7B5F\u7B60"+
-        "\u7B61\u7B62\u7B63\u7B64\u7B65\u7B66\u7B67\u7B68"+
-        "\u7B69\u7B6A\u7B6B\u7B6C\u7B6D\u7B6E\u7B6F\u7B70"+
-        "\u7B71\u7B72\u7B73\u7B74\u7B75\u7B76\u7B77\u7B78"+
-        "\u7B79\u7B7A\u7B7B\u7B7C\u7B7D\u7B7E\u7C21\u7C22"+
-        "\u7C23\u7C24\u7C25\u7C26\u7C27\u7C28\u7C29\u7C2A"+
-        "\u7C2B\u7C2C\u7C2D\u7C2E\u7C2F\u7C30\u7C31\u7C32"+
-        "\u7C33\u7C34\u7C35\u7C36\u7C37\u7C38\u7C39\u7C3A"+
-        "\u7C3B\u7C3C\u7C3D\u7C3E\u7C3F\u7C40\u7C41\u7C42"+
-        "\u7C43\u7C44\u7C45\u7C46\u7C47\u7C48\u7C49\u7C4A"+
-        "\u7C4B\u7C4C\u7C4D\u7C4E\u7C4F\u7C50\u7C51\u7C52"+
-        "\u7C53\u7C54\u7C55\u7C56\u7C57\u7C58\u7C59\u7C5A"+
-        "\u7C5B\u7C5C\u7C5D\u7C5E\u7C5F\u7C60\u7C61\u7C62"+
-        "\u7C63\u7C64\u7C65\u7C66\u7C67\u7C68\u7C69\u7C6A"+
-        "\u7C6B\u7C6C\u7C6D\u7C6E\u7C6F\u7C70\u7C71\u7C72"+
-        "\u7C73\u7C74\u7C75\u7C76\u7C77\u7C78\u7C79\u7C7A"+
-        "\u7C7B\u7C7C\u7C7D\u7C7E\u7D21\u7D22\u7D23\u7D24"+
-        "\u7D25\u7D26\u7D27\u7D28\u7D29\u7D2A\u7D2B\u7D2C"+
-        "\u7D2D\u7D2E\u7D2F\u7D30\u7D31\u7D32\u7D33\u7D34"+
-        "\u7D35\u7D36\u7D37\u7D38\u7D39\u7D3A\u7D3B\u7D3C"+
-        "\u7D3D\u7D3E\u7D3F\u7D40\u7D41\u7D42\u7D43\u7D44"+
-        "\u7D45\u7D46\u7D47\u7D48\u7D49\u7D4A\u7D4B\u7D4C"+
-        "\u7D4D\u7D4E\u7D4F\u7D50\u7D51\u7D52\u7D53\u7D54"+
-        "\u7D55\u7D56\u7D57\u7D58\u7D59\u7D5A\u7D5B\u7D5C"+
-        "\u7D5D\u7D5E\u7D5F\u7D60\u7D61\u7D62\u7D63\u7D64"+
-        "\u7D65\u7D66\u7D67\u7D68\u7D69\u7D6A\u7D6B\u7D6C"+
-        "\u7D6D\u7D6E\u7D6F\u7D70\u7D71\u7D72\u7D73\u7D74"+
-        "\u7D75\u7D76\u7D77\u7D78\u7D79\u7D7A\u7D7B\u7D7C"+
-        "\u7D7D\u7D7E\u7E21\u7E22\u7E23\u7E24\u7E25\u7E26"+
-        "\u7E27\u7E28\u7E29\u7E2A\u7E2B\u7E2C\u7E2D\u7E2E"+
-        "\u7E2F\u7E30\u7E31\u7E32\u7E33\u7E34\u7E35\u7E36"+
-        "\u7E37\u7E38\u7E39\u7E3A\u7E3B\u7E3C\u7E3D\u7E3E"+
-        "\u7E3F\u7E40\u7E41\u7E42\u7E43\u7E44\u7E45\u7E46"+
-        "\u7E47\u7E48\u7E49\u7E4A\u7E4B\u7E4C\u7E4D\u7E4E"+
-        "\u7E4F\u7E50\u7E51\u7E52\u7E53\u7E54\u7E55\u7E56"+
-        "\u7E57\u7E58\u7E59\u7E5A\u7E5B\u7E5C\u7E5D\u7E5E"+
-        "\u7E5F\u7E60\u7E61\u7E62\u7E63\u7E64\u7E65\u7E66"+
-        "\u7E67\u7E68\u7E69\u7E6A\u7E6B\u7E6C\u7E6D\u7E6E"+
-        "\u7E6F\u7E70\u7E71\u7E72\u7E73\u7E74\u7E75\u7E76"+
-        "\u7E77\u7E78\u7E79\u7E7A\u7E7B\u7E7C\u7E7D\u7E7E"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u7351\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u737E\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u7340\u7343"+
-        "\u7344\u7349\u7350\u7353\u7354\u735A\u735B\u735F"+
-        "\u7361\u7362\u7363\u7364\u7366\u7367\u736A\u736C"+
-        "\u736E\u736F\u7371\u7375\u7376\u7377\u7379\u737B"+
-        "\u737C\u7421\u7425\u7426\u7427\u742B\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u7336\u0001\u0001\u0001\u0001\u7335"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001";
-
-    private final static short _index1[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
-        3, 4, 0, 5, 6, 0, 0, 7, 8, 0, 0, 9, 10, 11, 0, 12,
-        13, 14, 0, 0, 0, 15, 16, 0, 17, 0, 18, 0, 0, 19, 0, 0,
-        20, 0, 0, 0, 0, 21, 22, 0, 0, 23, 24, 0, 0, 25, 0, 0,
-        0, 0, 0, 26, 0, 27, 0, 0, 28, 0, 0, 29, 30, 31, 0, 0,
-        32, 33, 0, 0, 0, 34, 0, 35, 0, 36, 37, 38, 0, 0, 39, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 40, 41, 42, 43, 44, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 46, 0, 0, 0, 0, 47
-    };
-
-    private final static String _index2[] = {
-        _innerIndex0,
-        _innerIndex1,
-        _innerIndex2
-    };
-
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_Solaris_Decoder.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_Solaris_Decoder.java
deleted file mode 100755
index 0ffd4a5..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_Solaris_Decoder.java
+++ /dev/null
@@ -1,934 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-
-public class JIS_X_0212_Solaris_Decoder extends DoubleByteDecoder
-{
-    public JIS_X_0212_Solaris_Decoder(Charset cs) {
-        super(cs,
-              index1,
-              index2,
-              0x21,
-              0x7E);
-    }
-
-    /**
-     * These accessors are temporarily supplied while sun.io
-     * converters co-exist with the sun.nio.cs.{ext} charset coders
-     * These facilitate sharing of conversion tables between the
-     * two co-existing implementations. When sun.io converters
-     * are made extinct these will be unncessary and should be removed
-     */
-
-    public static short[] getIndex1() {
-        return index1;
-    }
-    public static String[] getIndex2() {
-        return index2;
-    }
-
-    private final static String innerIndex0=
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u02D8\u02C7\u00B8\u02D9"+
-        "\u02DD\u00AF\u02DB\u02DA\uFF5E\u0384\u0385\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00A1"+
-        "\u00A6\u00BF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\u00BA\u00AA\u00A9\u00AE\u2122\u00A4\u2116\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u0386\u0388\u0389\u038A"+
-        "\u03AA\uFFFD\u038C\uFFFD\u038E\u03AB\uFFFD\u038F"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u03AC\u03AD\u03AE\u03AF"+
-        "\u03CA\u0390\u03CC\u03C2\u03CD\u03CB\u03B0\u03CE"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\u0402\u0403\u0404\u0405\u0406"+
-        "\u0407\u0408\u0409\u040A\u040B\u040C\u040E\u040F"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\u0452\u0453\u0454\u0455\u0456"+
-        "\u0457\u0458\u0459\u045A\u045B\u045C\u045E\u045F"+
-        "\u00C6\u0110\uFFFD\u0126\uFFFD\u0132\uFFFD\u0141"+
-        "\u013F\uFFFD\u014A\u00D8\u0152\uFFFD\u0166\u00DE"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\u00E6\u0111\u00F0\u0127\u0131\u0133\u0138\u0142"+
-        "\u0140\u0149\u014B\u00F8\u0153\u00DF\u0167\u00FE"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00C1\u00C0"+
-        "\u00C4\u00C2\u0102\u01CD\u0100\u0104\u00C5\u00C3"+
-        "\u0106\u0108\u010C\u00C7\u010A\u010E\u00C9\u00C8"+
-        "\u00CB\u00CA\u011A\u0116\u0112\u0118\uFFFD\u011C"+
-        "\u011E\u0122\u0120\u0124\u00CD\u00CC\u00CF\u00CE"+
-        "\u01CF\u0130\u012A\u012E\u0128\u0134\u0136\u0139"+
-        "\u013D\u013B\u0143\u0147\u0145\u00D1\u00D3\u00D2"+
-        "\u00D6\u00D4\u01D1\u0150\u014C\u00D5\u0154\u0158"+
-        "\u0156\u015A\u015C\u0160\u015E\u0164\u0162\u00DA"+
-        "\u00D9\u00DC\u00DB\u016C\u01D3\u0170\u016A\u0172"+
-        "\u016E\u0168\u01D7\u01DB\u01D9\u01D5\u0174\u00DD"+
-        "\u0178\u0176\u0179\u017D\u017B\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\u00E1\u00E0\u00E4\u00E2"+
-        "\u0103\u01CE\u0101\u0105\u00E5\u00E3\u0107\u0109"+
-        "\u010D\u00E7\u010B\u010F\u00E9\u00E8\u00EB\u00EA"+
-        "\u011B\u0117\u0113\u0119\u01F5\u011D\u011F\uFFFD"+
-        "\u0121\u0125\u00ED\u00EC\u00EF\u00EE\u01D0\uFFFD"+
-        "\u012B\u012F\u0129\u0135\u0137\u013A\u013E\u013C"+
-        "\u0144\u0148\u0146\u00F1\u00F3\u00F2\u00F6\u00F4"+
-        "\u01D2\u0151\u014D\u00F5\u0155\u0159\u0157\u015B"+
-        "\u015D\u0161\u015F\u0165\u0163\u00FA\u00F9\u00FC"+
-        "\u00FB\u016D\u01D4\u0171\u016B\u0173\u016F\u0169"+
-        "\u01D8\u01DC\u01DA\u01D6\u0175\u00FD\u00FF\u0177"+
-        "\u017A\u017E\u017C\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\u4E02\u4E04\u4E05\u4E0C\u4E12\u4E1F"+
-        "\u4E23\u4E24\u4E28\u4E2B\u4E2E\u4E2F\u4E30\u4E35"+
-        "\u4E40\u4E41\u4E44\u4E47\u4E51\u4E5A\u4E5C\u4E63"+
-        "\u4E68\u4E69\u4E74\u4E75\u4E79\u4E7F\u4E8D\u4E96"+
-        "\u4E97\u4E9D\u4EAF\u4EB9\u4EC3\u4ED0\u4EDA\u4EDB"+
-        "\u4EE0\u4EE1\u4EE2\u4EE8\u4EEF\u4EF1\u4EF3\u4EF5"+
-        "\u4EFD\u4EFE\u4EFF\u4F00\u4F02\u4F03\u4F08\u4F0B"+
-        "\u4F0C\u4F12\u4F15\u4F16\u4F17\u4F19\u4F2E\u4F31"+
-        "\u4F60\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F40"+
-        "\u4F42\u4F48\u4F49\u4F4B\u4F4C\u4F52\u4F54\u4F56"+
-        "\u4F58\u4F5F\u4F63\u4F6A\u4F6C\u4F6E\u4F71\u4F77"+
-        "\u4F78\u4F79\u4F7A\u4F7D\u4F7E\u4F81\u4F82\u4F84"+
-        "\u4F85\u4F89\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93"+
-        "\u4F94\u4F97\u4F99\u4F9A\u4F9E\u4F9F\u4FB2\u4FB7"+
-        "\u4FB9\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC5"+
-        "\u4FC6\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FCF\u4FD2"+
-        "\u4FDC\u4FE0\u4FE2\u4FF0\u4FF2\u4FFC\u4FFD\u4FFF"+
-        "\u5000\u5001\u5004\u5007\u500A\u500C\u500E\u5010"+
-        "\u5013\u5017\u5018\u501B\u501C\u501D\u501E\u5022"+
-        "\u5027\u502E\u5030\u5032\u5033\u5035\u5040\u5041"+
-        "\u5042\u5045\u5046\u504A\u504C\u504E\u5051\u5052"+
-        "\u5053\u5057\u5059\u505F\u5060\u5062\u5063\u5066"+
-        "\u5067\u506A\u506D\u5070\u5071\u503B\u5081\u5083"+
-        "\u5084\u5086\u508A\u508E\u508F\u5090\u5092\u5093"+
-        "\u5094\u5096\u509B\u509C\u509E\u509F\u50A0\u50A1"+
-        "\u50A2\u50AA\u50AF\u50B0\u50B9\u50BA\u50BD\u50C0"+
-        "\u50C3\u50C4\u50C7\u50CC\u50CE\u50D0\u50D3\u50D4"+
-        "\u50D8\u50DC\u50DD\u50DF\u50E2\u50E4\u50E6\u50E8"+
-        "\u50E9\u50EF\u50F1\u50F6\u50FA\u50FE\u5103\u5106"+
-        "\u5107\u5108\u510B\u510C\u510D\u510E\u50F2\u5110"+
-        "\u5117\u5119\u511B\u511C\u511D\u511E\u5123\u5127"+
-        "\u5128\u512C\u512D\u512F\u5131\u5133\u5134\u5135"+
-        "\u5138\u5139\u5142\u514A\u514F\u5153\u5155\u5157"+
-        "\u5158\u515F\u5164\u5166\u517E\u5183\u5184\u518B"+
-        "\u518E\u5198\u519D\u51A1\u51A3\u51AD\u51B8\u51BA"+
-        "\u51BC\u51BE\u51BF\u51C2\u51C8\u51CF\u51D1\u51D2"+
-        "\u51D3\u51D5\u51D8\u51DE\u51E2\u51E5\u51EE\u51F2"+
-        "\u51F3\u51F4\u51F7\u5201\u5202\u5205\u5212\u5213"+
-        "\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235"+
-        "\u523C\u5245\u5249\u5255\u5257\u5258\u525A\u525C"+
-        "\u525F\u5260\u5261\u5266\u526E\u5277\u5278\u5279"+
-        "\u5280\u5282\u5285\u528A\u528C\u5293\u5295\u5296"+
-        "\u5297\u5298\u529A\u529C\u52A4\u52A5\u52A6\u52A7"+
-        "\u52AF\u52B0\u52B6\u52B7\u52B8\u52BA\u52BB\u52BD"+
-        "\u52C0\u52C4\u52C6\u52C8\u52CC\u52CF\u52D1\u52D4"+
-        "\u52D6\u52DB\u52DC\u52E1\u52E5\u52E8\u52E9\u52EA"+
-        "\u52EC\u52F0\u52F1\u52F4\u52F6\u52F7\u5300\u5303"+
-        "\u530A\u530B\u530C\u5311\u5313\u5318\u531B\u531C"+
-        "\u531E\u531F\u5325\u5327\u5328\u5329\u532B\u532C"+
-        "\u532D\u5330\u5332\u5335\u533C\u533D\u533E\u5342"+
-        "\u534C\u534B\u5359\u535B\u5361\u5363\u5365\u536C"+
-        "\u536D\u5372\u5379\u537E\u5383\u5387\u5388\u538E"+
-        "\u5393\u5394\u5399\u539D\u53A1\u53A4\u53AA\u53AB"+
-        "\u53AF\u53B2\u53B4\u53B5\u53B7\u53B8\u53BA\u53BD"+
-        "\u53C0\u53C5\u53CF\u53D2\u53D3\u53D5\u53DA\u53DD"+
-        "\u53DE\u53E0\u53E6\u53E7\u53F5\u5402\u5413\u541A"+
-        "\u5421\u5427\u5428\u542A\u542F\u5431\u5434\u5435"+
-        "\u5443\u5444\u5447\u544D\u544F\u545E\u5462\u5464"+
-        "\u5466\u5467\u5469\u546B\u546D\u546E\u5474\u547F"+
-        "\u5481\u5483\u5485\u5488\u5489\u548D\u5491\u5495"+
-        "\u5496\u549C\u549F\u54A1\u54A6\u54A7\u54A9\u54AA"+
-        "\u54AD\u54AE\u54B1\u54B7\u54B9\u54BA\u54BB\u54BF"+
-        "\u54C6\u54CA\u54CD\u54CE\u54E0\u54EA\u54EC\u54EF"+
-        "\u54F6\u54FC\u54FE\u54FF\u5500\u5501\u5505\u5508"+
-        "\u5509\u550C\u550D\u550E\u5515\u552A\u552B\u5532"+
-        "\u5535\u5536\u553B\u553C\u553D\u5541\u5547\u5549"+
-        "\u554A\u554D\u5550\u5551\u5558\u555A\u555B\u555E"+
-        "\u5560\u5561\u5564\u5566\u557F\u5581\u5582\u5586"+
-        "\u5588\u558E\u558F\u5591\u5592\u5593\u5594\u5597"+
-        "\u55A3\u55A4\u55AD\u55B2\u55BF\u55C1\u55C3\u55C6"+
-        "\u55C9\u55CB\u55CC\u55CE\u55D1\u55D2\u55D3\u55D7"+
-        "\u55D8\u55DB\u55DE\u55E2\u55E9\u55F6\u55FF\u5605"+
-        "\u5608\u560A\u560D\u560E\u560F\u5610\u5611\u5612"+
-        "\u5619\u562C\u5630\u5633\u5635\u5637\u5639\u563B"+
-        "\u563C\u563D\u563F\u5640\u5641\u5643\u5644\u5646"+
-        "\u5649\u564B\u564D\u564F\u5654\u565E\u5660\u5661"+
-        "\u5662\u5663\u5666\u5669\u566D\u566F\u5671\u5672"+
-        "\u5675\u5684\u5685\u5688\u568B\u568C\u5695\u5699"+
-        "\u569A\u569D\u569E\u569F\u56A6\u56A7\u56A8\u56A9"+
-        "\u56AB\u56AC\u56AD\u56B1\u56B3\u56B7\u56BE\u56C5"+
-        "\u56C9\u56CA\u56CB\u56CF\u56D0\u56CC\u56CD\u56D9"+
-        "\u56DC\u56DD\u56DF\u56E1\u56E4\u56E5\u56E6\u56E7"+
-        "\u56E8\u56F1\u56EB\u56ED\u56F6\u56F7\u5701\u5702"+
-        "\u5707\u570A\u570C\u5711\u5715\u571A\u571B\u571D"+
-        "\u5720\u5722\u5723\u5724\u5725\u5729\u572A\u572C"+
-        "\u572E\u572F\u5733\u5734\u573D\u573E\u573F\u5745"+
-        "\u5746\u574C\u574D\u5752\u5762\u5765\u5767\u5768"+
-        "\u576B\u576D\u576E\u576F\u5770\u5771\u5773\u5774"+
-        "\u5775\u5777\u5779\u577A\u577B\u577C\u577E\u5781"+
-        "\u5783\u578C\u5794\u5797\u5799\u579A\u579C\u579D"+
-        "\u579E\u579F\u57A1\u5795\u57A7\u57A8\u57A9\u57AC"+
-        "\u57B8\u57BD\u57C7\u57C8\u57CC\u57CF\u57D5\u57DD"+
-        "\u57DE\u57E4\u57E6\u57E7\u57E9\u57ED\u57F0\u57F5"+
-        "\u57F6\u57F8\u57FD\u57FE\u57FF\u5803\u5804\u5808"+
-        "\u5809\u57E1\u580C\u580D\u581B\u581E\u581F\u5820"+
-        "\u5826\u5827\u582D\u5832\u5839\u583F\u5849\u584C"+
-        "\u584D\u584F\u5850\u5855\u585F\u5861\u5864\u5867"+
-        "\u5868\u5878\u587C\u587F\u5880\u5881\u5887\u5888"+
-        "\u5889\u588A\u588C\u588D\u588F\u5890\u5894\u5896"+
-        "\u589D\u58A0\u58A1\u58A2\u58A6\u58A9\u58B1\u58B2"+
-        "\u58C4\u58BC\u58C2\u58C8\u58CD\u58CE\u58D0\u58D2"+
-        "\u58D4\u58D6\u58DA\u58DD\u58E1\u58E2\u58E9\u58F3"+
-        "\u5905\u5906\u590B\u590C\u5912\u5913\u5914\u8641"+
-        "\u591D\u5921\u5923\u5924\u5928\u592F\u5930\u5933"+
-        "\u5935\u5936\u593F\u5943\u5946\u5952\u5953\u5959"+
-        "\u595B\u595D\u595E\u595F\u5961\u5963\u596B\u596D";
-
-    private final static String innerIndex1=
-        "\u596F\u5972\u5975\u5976\u5979\u597B\u597C\u598B"+
-        "\u598C\u598E\u5992\u5995\u5997\u599F\u59A4\u59A7"+
-        "\u59AD\u59AE\u59AF\u59B0\u59B3\u59B7\u59BA\u59BC"+
-        "\u59C1\u59C3\u59C4\u59C8\u59CA\u59CD\u59D2\u59DD"+
-        "\u59DE\u59DF\u59E3\u59E4\u59E7\u59EE\u59EF\u59F1"+
-        "\u59F2\u59F4\u59F7\u5A00\u5A04\u5A0C\u5A0D\u5A0E"+
-        "\u5A12\u5A13\u5A1E\u5A23\u5A24\u5A27\u5A28\u5A2A"+
-        "\u5A2D\u5A30\u5A44\u5A45\u5A47\u5A48\u5A4C\u5A50"+
-        "\u5A55\u5A5E\u5A63\u5A65\u5A67\u5A6D\u5A77\u5A7A"+
-        "\u5A7B\u5A7E\u5A8B\u5A90\u5A93\u5A96\u5A99\u5A9C"+
-        "\u5A9E\u5A9F\u5AA0\u5AA2\u5AA7\u5AAC\u5AB1\u5AB2"+
-        "\u5AB3\u5AB5\u5AB8\u5ABA\u5ABB\u5ABF\u5AC4\u5AC6"+
-        "\u5AC8\u5ACF\u5ADA\u5ADC\u5AE0\u5AE5\u5AEA\u5AEE"+
-        "\u5AF5\u5AF6\u5AFD\u5B00\u5B01\u5B08\u5B17\u5B34"+
-        "\u5B19\u5B1B\u5B1D\u5B21\u5B25\u5B2D\u5B38\u5B41"+
-        "\u5B4B\u5B4C\u5B52\u5B56\u5B5E\u5B68\u5B6E\u5B6F"+
-        "\u5B7C\u5B7D\u5B7E\u5B7F\u5B81\u5B84\u5B86\u5B8A"+
-        "\u5B8E\u5B90\u5B91\u5B93\u5B94\u5B96\u5BA8\u5BA9"+
-        "\u5BAC\u5BAD\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBC"+
-        "\u5BC0\u5BC1\u5BCD\u5BCF\u5BD6\u5BD7\u5BD8\u5BD9"+
-        "\u5BDA\u5BE0\u5BEF\u5BF1\u5BF4\u5BFD\u5C0C\u5C17"+
-        "\u5C1E\u5C1F\u5C23\u5C26\u5C29\u5C2B\u5C2C\u5C2E"+
-        "\u5C30\u5C32\u5C35\u5C36\u5C59\u5C5A\u5C5C\u5C62"+
-        "\u5C63\u5C67\u5C68\u5C69\u5C6D\u5C70\u5C74\u5C75"+
-        "\u5C7A\u5C7B\u5C7C\u5C7D\u5C87\u5C88\u5C8A\u5C8F"+
-        "\u5C92\u5C9D\u5C9F\u5CA0\u5CA2\u5CA3\u5CA6\u5CAA"+
-        "\u5CB2\u5CB4\u5CB5\u5CBA\u5CC9\u5CCB\u5CD2\u5CDD"+
-        "\u5CD7\u5CEE\u5CF1\u5CF2\u5CF4\u5D01\u5D06\u5D0D"+
-        "\u5D12\u5D2B\u5D23\u5D24\u5D26\u5D27\u5D31\u5D34"+
-        "\u5D39\u5D3D\u5D3F\u5D42\u5D43\u5D46\u5D48\u5D55"+
-        "\u5D51\u5D59\u5D4A\u5D5F\u5D60\u5D61\u5D62\u5D64"+
-        "\u5D6A\u5D6D\u5D70\u5D79\u5D7A\u5D7E\u5D7F\u5D81"+
-        "\u5D83\u5D88\u5D8A\u5D92\u5D93\u5D94\u5D95\u5D99"+
-        "\u5D9B\u5D9F\u5DA0\u5DA7\u5DAB\u5DB0\u5DB4\u5DB8"+
-        "\u5DB9\u5DC3\u5DC7\u5DCB\u5DD0\u5DCE\u5DD8\u5DD9"+
-        "\u5DE0\u5DE4\u5DE9\u5DF8\u5DF9\u5E00\u5E07\u5E0D"+
-        "\u5E12\u5E14\u5E15\u5E18\u5E1F\u5E20\u5E2E\u5E28"+
-        "\u5E32\u5E35\u5E3E\u5E4B\u5E50\u5E49\u5E51\u5E56"+
-        "\u5E58\u5E5B\u5E5C\u5E5E\u5E68\u5E6A\u5E6B\u5E6C"+
-        "\u5E6D\u5E6E\u5E70\u5E80\u5E8B\u5E8E\u5EA2\u5EA4"+
-        "\u5EA5\u5EA8\u5EAA\u5EAC\u5EB1\u5EB3\u5EBD\u5EBE"+
-        "\u5EBF\u5EC6\u5ECC\u5ECB\u5ECE\u5ED1\u5ED2\u5ED4"+
-        "\u5ED5\u5EDC\u5EDE\u5EE5\u5EEB\u5F02\u5F06\u5F07"+
-        "\u5F08\u5F0E\u5F19\u5F1C\u5F1D\u5F21\u5F22\u5F23"+
-        "\u5F24\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F34\u5F36"+
-        "\u5F3B\u5F3D\u5F3F\u5F40\u5F44\u5F45\u5F47\u5F4D"+
-        "\u5F50\u5F54\u5F58\u5F5B\u5F60\u5F63\u5F64\u5F67"+
-        "\u5F6F\u5F72\u5F74\u5F75\u5F78\u5F7A\u5F7D\u5F7E"+
-        "\u5F89\u5F8D\u5F8F\u5F96\u5F9C\u5F9D\u5FA2\u5FA7"+
-        "\u5FAB\u5FA4\u5FAC\u5FAF\u5FB0\u5FB1\u5FB8\u5FC4"+
-        "\u5FC7\u5FC8\u5FC9\u5FCB\u5FD0\u5FD1\u5FD2\u5FD3"+
-        "\u5FD4\u5FDE\u5FE1\u5FE2\u5FE8\u5FE9\u5FEA\u5FEC"+
-        "\u5FED\u5FEE\u5FEF\u5FF2\u5FF3\u5FF6\u5FFA\u5FFC"+
-        "\u6007\u600A\u600D\u6013\u6014\u6017\u6018\u601A"+
-        "\u601F\u6024\u602D\u6033\u6035\u6040\u6047\u6048"+
-        "\u6049\u604C\u6051\u6054\u6056\u6057\u605D\u6061"+
-        "\u6067\u6071\u607E\u607F\u6082\u6086\u6088\u608A"+
-        "\u608E\u6091\u6093\u6095\u6098\u609D\u609E\u60A2"+
-        "\u60A4\u60A5\u60A8\u60B0\u60B1\u60B7\u60BB\u60BE"+
-        "\u60C2\u60C4\u60C8\u60C9\u60CA\u60CB\u60CE\u60CF"+
-        "\u60D4\u60D5\u60D9\u60DB\u60DD\u60DE\u60E2\u60E5"+
-        "\u60F2\u60F5\u60F8\u60FC\u60FD\u6102\u6107\u610A"+
-        "\u610C\u6110\u6111\u6112\u6113\u6114\u6116\u6117"+
-        "\u6119\u611C\u611E\u6122\u612A\u612B\u6130\u6131"+
-        "\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149"+
-        "\u615E\u6160\u616C\u6172\u6178\u617B\u617C\u617F"+
-        "\u6180\u6181\u6183\u6184\u618B\u618D\u6192\u6193"+
-        "\u6197\u6198\u619C\u619D\u619F\u61A0\u61A5\u61A8"+
-        "\u61AA\u61AD\u61B8\u61B9\u61BC\u61C0\u61C1\u61C2"+
-        "\u61CE\u61CF\u61D5\u61DC\u61DD\u61DE\u61DF\u61E1"+
-        "\u61E2\u61E7\u61E9\u61E5\u61EC\u61ED\u61EF\u6201"+
-        "\u6203\u6204\u6207\u6213\u6215\u621C\u6220\u6222"+
-        "\u6223\u6227\u6229\u622B\u6239\u623D\u6242\u6243"+
-        "\u6244\u6246\u624C\u6250\u6251\u6252\u6254\u6256"+
-        "\u625A\u625C\u6264\u626D\u626F\u6273\u627A\u627D"+
-        "\u628D\u628E\u628F\u6290\u62A6\u62A8\u62B3\u62B6"+
-        "\u62B7\u62BA\u62BE\u62BF\u62C4\u62CE\u62D5\u62D6"+
-        "\u62DA\u62EA\u62F2\u62F4\u62FC\u62FD\u6303\u6304"+
-        "\u630A\u630B\u630D\u6310\u6313\u6316\u6318\u6329"+
-        "\u632A\u632D\u6335\u6336\u6339\u633C\u6341\u6342"+
-        "\u6343\u6344\u6346\u634A\u634B\u634E\u6352\u6353"+
-        "\u6354\u6358\u635B\u6365\u6366\u636C\u636D\u6371"+
-        "\u6374\u6375\u6378\u637C\u637D\u637F\u6382\u6384"+
-        "\u6387\u638A\u6390\u6394\u6395\u6399\u639A\u639E"+
-        "\u63A4\u63A6\u63AD\u63AE\u63AF\u63BD\u63C1\u63C5"+
-        "\u63C8\u63CE\u63D1\u63D3\u63D4\u63D5\u63DC\u63E0"+
-        "\u63E5\u63EA\u63EC\u63F2\u63F3\u63F5\u63F8\u63F9"+
-        "\u6409\u640A\u6410\u6412\u6414\u6418\u641E\u6420"+
-        "\u6422\u6424\u6425\u6429\u642A\u642F\u6430\u6435"+
-        "\u643D\u643F\u644B\u644F\u6451\u6452\u6453\u6454"+
-        "\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6463"+
-        "\u646D\u6473\u6474\u647B\u647D\u6485\u6487\u648F"+
-        "\u6490\u6491\u6498\u6499\u649B\u649D\u649F\u64A1"+
-        "\u64A3\u64A6\u64A8\u64AC\u64B3\u64BD\u64BE\u64BF"+
-        "\u64C4\u64C9\u64CA\u64CB\u64CC\u64CE\u64D0\u64D1"+
-        "\u64D5\u64D7\u64E4\u64E5\u64E9\u64EA\u64ED\u64F0"+
-        "\u64F5\u64F7\u64FB\u64FF\u6501\u6504\u6508\u6509"+
-        "\u650A\u650F\u6513\u6514\u6516\u6519\u651B\u651E"+
-        "\u651F\u6522\u6526\u6529\u652E\u6531\u653A\u653C"+
-        "\u653D\u6543\u6547\u6549\u6550\u6552\u6554\u655F"+
-        "\u6560\u6567\u656B\u657A\u657D\u6581\u6585\u658A"+
-        "\u6592\u6595\u6598\u659D\u65A0\u65A3\u65A6\u65AE"+
-        "\u65B2\u65B3\u65B4\u65BF\u65C2\u65C8\u65C9\u65CE"+
-        "\u65D0\u65D4\u65D6\u65D8\u65DF\u65F0\u65F2\u65F4"+
-        "\u65F5\u65F9\u65FE\u65FF\u6600\u6604\u6608\u6609"+
-        "\u660D\u6611\u6612\u6615\u6616\u661D\u661E\u6621"+
-        "\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C"+
-        "\u662E\u6630\u6631\u6633\u6639\u6637\u6640\u6645"+
-        "\u6646\u664A\u664C\u6651\u664E\u6657\u6658\u6659"+
-        "\u665B\u665C\u6660\u6661\u66FB\u666A\u666B\u666C"+
-        "\u667E\u6673\u6675\u667F\u6677\u6678\u6679\u667B"+
-        "\u6680\u667C\u668B\u668C\u668D\u6690\u6692\u6699"+
-        "\u669A\u669B\u669C\u669F\u66A0\u66A4\u66AD\u66B1"+
-        "\u66B2\u66B5\u66BB\u66BF\u66C0\u66C2\u66C3\u66C8"+
-        "\u66CC\u66CE\u66CF\u66D4\u66DB\u66DF\u66E8\u66EB"+
-        "\u66EC\u66EE\u66FA\u6705\u6707\u670E\u6713\u6719"+
-        "\u671C\u6720\u6722\u6733\u673E\u6745\u6747\u6748"+
-        "\u674C\u6754\u6755\u675D\u6766\u676C\u676E\u6774"+
-        "\u6776\u677B\u6781\u6784\u678E\u678F\u6791\u6793"+
-        "\u6796\u6798\u6799\u679B\u67B0\u67B1\u67B2\u67B5"+
-        "\u67BB\u67BC\u67BD\u67F9\u67C0\u67C2\u67C3\u67C5"+
-        "\u67C8\u67C9\u67D2\u67D7\u67D9\u67DC\u67E1\u67E6"+
-        "\u67F0\u67F2\u67F6\u67F7\u6852\u6814\u6819\u681D"+
-        "\u681F\u6828\u6827\u682C\u682D\u682F\u6830\u6831"+
-        "\u6833\u683B\u683F\u6844\u6845\u684A\u684C\u6855"+
-        "\u6857\u6858\u685B\u686B\u686E\u686F\u6870\u6871"+
-        "\u6872\u6875\u6879\u687A\u687B\u687C\u6882\u6884"+
-        "\u6886\u6888\u6896\u6898\u689A\u689C\u68A1\u68A3"+
-        "\u68A5\u68A9\u68AA\u68AE\u68B2\u68BB\u68C5\u68C8"+
-        "\u68CC\u68CF\u68D0\u68D1\u68D3\u68D6\u68D9\u68DC"+
-        "\u68DD\u68E5\u68E8\u68EA\u68EB\u68EC\u68ED\u68F0"+
-        "\u68F1\u68F5\u68F6\u68FB\u68FC\u68FD\u6906\u6909"+
-        "\u690A\u6910\u6911\u6913\u6916\u6917\u6931\u6933"+
-        "\u6935\u6938\u693B\u6942\u6945\u6949\u694E\u6957"+
-        "\u695B\u6963\u6964\u6965\u6966\u6968\u6969\u696C"+
-        "\u6970\u6971\u6972\u697A\u697B\u697F\u6980\u698D"+
-        "\u6992\u6996\u6998\u69A1\u69A5\u69A6\u69A8\u69AB"+
-        "\u69AD\u69AF\u69B7\u69B8\u69BA\u69BC\u69C5\u69C8"+
-        "\u69D1\u69D6\u69D7\u69E2\u69E5\u69EE\u69EF\u69F1"+
-        "\u69F3\u69F5\u69FE\u6A00\u6A01\u6A03\u6A0F\u6A11"+
-        "\u6A15\u6A1A\u6A1D\u6A20\u6A24\u6A28\u6A30\u6A32"+
-        "\u6A34\u6A37\u6A3B\u6A3E\u6A3F\u6A45\u6A46\u6A49"+
-        "\u6A4A\u6A4E\u6A50\u6A51\u6A52\u6A55\u6A56\u6A5B"+
-        "\u6A64\u6A67\u6A6A\u6A71\u6A73\u6A7E\u6A81\u6A83"+
-        "\u6A86\u6A87\u6A89\u6A8B\u6A91\u6A9B\u6A9D\u6A9E"+
-        "\u6A9F\u6AA5\u6AAB\u6AAF\u6AB0\u6AB1\u6AB4\u6ABD"+
-        "\u6ABE\u6ABF\u6AC6\u6AC9\u6AC8\u6ACC\u6AD0\u6AD4"+
-        "\u6AD5\u6AD6\u6ADC\u6ADD\u6AE4\u6AE7\u6AEC\u6AF0"+
-        "\u6AF1\u6AF2\u6AFC\u6AFD\u6B02\u6B03\u6B06\u6B07"+
-        "\u6B09\u6B0F\u6B10\u6B11\u6B17\u6B1B\u6B1E\u6B24"+
-        "\u6B28\u6B2B\u6B2C\u6B2F\u6B35\u6B36\u6B3B\u6B3F"+
-        "\u6B46\u6B4A\u6B4D\u6B52\u6B56\u6B58\u6B5D\u6B60"+
-        "\u6B67\u6B6B\u6B6E\u6B70\u6B75\u6B7D\u6B7E\u6B82"+
-        "\u6B85\u6B97\u6B9B\u6B9F\u6BA0\u6BA2\u6BA3\u6BA8"+
-        "\u6BA9\u6BAC\u6BAD\u6BAE\u6BB0\u6BB8\u6BB9\u6BBD"+
-        "\u6BBE\u6BC3\u6BC4\u6BC9\u6BCC\u6BD6\u6BDA\u6BE1"+
-        "\u6BE3\u6BE6\u6BE7\u6BEE\u6BF1\u6BF7\u6BF9\u6BFF"+
-        "\u6C02\u6C04\u6C05\u6C09\u6C0D\u6C0E\u6C10\u6C12"+
-        "\u6C19\u6C1F\u6C26\u6C27\u6C28\u6C2C\u6C2E\u6C33"+
-        "\u6C35\u6C36\u6C3A\u6C3B\u6C3F\u6C4A\u6C4B\u6C4D"+
-        "\u6C4F\u6C52\u6C54\u6C59\u6C5B\u6C5C\u6C6B\u6C6D"+
-        "\u6C6F\u6C74\u6C76\u6C78\u6C79\u6C7B\u6C85\u6C86"+
-        "\u6C87\u6C89\u6C94\u6C95\u6C97\u6C98\u6C9C\u6C9F"+
-        "\u6CB0\u6CB2\u6CB4\u6CC2\u6CC6\u6CCD\u6CCF\u6CD0"+
-        "\u6CD1\u6CD2\u6CD4\u6CD6\u6CDA\u6CDC\u6CE0\u6CE7"+
-        "\u6CE9\u6CEB\u6CEC\u6CEE\u6CF2\u6CF4\u6D04\u6D07"+
-        "\u6D0A\u6D0E\u6D0F\u6D11\u6D13\u6D1A\u6D26\u6D27"+
-        "\u6D28\u6C67\u6D2E\u6D2F\u6D31\u6D39\u6D3C\u6D3F"+
-        "\u6D57\u6D5E\u6D5F\u6D61\u6D65\u6D67\u6D6F\u6D70"+
-        "\u6D7C\u6D82\u6D87\u6D91\u6D92\u6D94\u6D96\u6D97"+
-        "\u6D98\u6DAA\u6DAC\u6DB4\u6DB7\u6DB9\u6DBD\u6DBF"+
-        "\u6DC4\u6DC8\u6DCA\u6DCE\u6DCF\u6DD6\u6DDB\u6DDD"+
-        "\u6DDF\u6DE0\u6DE2\u6DE5\u6DE9\u6DEF\u6DF0\u6DF4"+
-        "\u6DF6\u6DFC\u6E00\u6E04\u6E1E\u6E22\u6E27\u6E32"+
-        "\u6E36\u6E39\u6E3B\u6E3C\u6E44\u6E45\u6E48\u6E49"+
-        "\u6E4B\u6E4F\u6E51\u6E52\u6E53\u6E54\u6E57\u6E5C"+
-        "\u6E5D\u6E5E\u6E62\u6E63\u6E68\u6E73\u6E7B\u6E7D"+
-        "\u6E8D\u6E93\u6E99\u6EA0\u6EA7\u6EAD\u6EAE\u6EB1"+
-        "\u6EB3\u6EBB\u6EBF\u6EC0\u6EC1\u6EC3\u6EC7\u6EC8"+
-        "\u6ECA\u6ECD\u6ECE\u6ECF\u6EEB\u6EED\u6EEE\u6EF9"+
-        "\u6EFB\u6EFD\u6F04\u6F08\u6F0A\u6F0C\u6F0D\u6F16"+
-        "\u6F18\u6F1A\u6F1B\u6F26\u6F29\u6F2A\u6F2F\u6F30"+
-        "\u6F33\u6F36\u6F3B\u6F3C\u6F2D\u6F4F\u6F51\u6F52"+
-        "\u6F53\u6F57\u6F59\u6F5A\u6F5D\u6F5E\u6F61\u6F62"+
-        "\u6F68\u6F6C\u6F7D\u6F7E\u6F83\u6F87\u6F88\u6F8B"+
-        "\u6F8C\u6F8D\u6F90\u6F92\u6F93\u6F94\u6F96\u6F9A"+
-        "\u6F9F\u6FA0\u6FA5\u6FA6\u6FA7\u6FA8\u6FAE\u6FAF"+
-        "\u6FB0\u6FB5\u6FB6\u6FBC\u6FC5\u6FC7\u6FC8\u6FCA";
-
-    private final static String innerIndex2=
-        "\u6FDA\u6FDE\u6FE8\u6FE9\u6FF0\u6FF5\u6FF9\u6FFC"+
-        "\u6FFD\u7000\u7005\u7006\u7007\u700D\u7017\u7020"+
-        "\u7023\u702F\u7034\u7037\u7039\u703C\u7043\u7044"+
-        "\u7048\u7049\u704A\u704B\u7054\u7055\u705D\u705E"+
-        "\u704E\u7064\u7065\u706C\u706E\u7075\u7076\u707E"+
-        "\u7081\u7085\u7086\u7094\u7095\u7096\u7097\u7098"+
-        "\u709B\u70A4\u70AB\u70B0\u70B1\u70B4\u70B7\u70CA"+
-        "\u70D1\u70D3\u70D4\u70D5\u70D6\u70D8\u70DC\u70E4"+
-        "\u70FA\u7103\u7104\u7105\u7106\u7107\u710B\u710C"+
-        "\u710F\u711E\u7120\u712B\u712D\u712F\u7130\u7131"+
-        "\u7138\u7141\u7145\u7146\u7147\u714A\u714B\u7150"+
-        "\u7152\u7157\u715A\u715C\u715E\u7160\u7168\u7179"+
-        "\u7180\u7185\u7187\u718C\u7192\u719A\u719B\u71A0"+
-        "\u71A2\u71AF\u71B0\u71B2\u71B3\u71BA\u71BF\u71C0"+
-        "\u71C1\u71C4\u71CB\u71CC\u71D3\u71D6\u71D9\u71DA"+
-        "\u71DC\u71F8\u71FE\u7200\u7207\u7208\u7209\u7213"+
-        "\u7217\u721A\u721D\u721F\u7224\u722B\u722F\u7234"+
-        "\u7238\u7239\u7241\u7242\u7243\u7245\u724E\u724F"+
-        "\u7250\u7253\u7255\u7256\u725A\u725C\u725E\u7260"+
-        "\u7263\u7268\u726B\u726E\u726F\u7271\u7277\u7278"+
-        "\u727B\u727C\u727F\u7284\u7289\u728D\u728E\u7293"+
-        "\u729B\u72A8\u72AD\u72AE\u72B1\u72B4\u72BE\u72C1"+
-        "\u72C7\u72C9\u72CC\u72D5\u72D6\u72D8\u72DF\u72E5"+
-        "\u72F3\u72F4\u72FA\u72FB\u72FE\u7302\u7304\u7305"+
-        "\u7307\u730B\u730D\u7312\u7313\u7318\u7319\u731E"+
-        "\u7322\u7324\u7327\u7328\u732C\u7331\u7332\u7335"+
-        "\u733A\u733B\u733D\u7343\u734D\u7350\u7352\u7356"+
-        "\u7358\u735D\u735E\u735F\u7360\u7366\u7367\u7369"+
-        "\u736B\u736C\u736E\u736F\u7371\u7377\u7379\u737C"+
-        "\u7380\u7381\u7383\u7385\u7386\u738E\u7390\u7393"+
-        "\u7395\u7397\u7398\u739C\u739E\u739F\u73A0\u73A2"+
-        "\u73A5\u73A6\u73AA\u73AB\u73AD\u73B5\u73B7\u73B9"+
-        "\u73BC\u73BD\u73BF\u73C5\u73C6\u73C9\u73CB\u73CC"+
-        "\u73CF\u73D2\u73D3\u73D6\u73D9\u73DD\u73E1\u73E3"+
-        "\u73E6\u73E7\u73E9\u73F4\u73F5\u73F7\u73F9\u73FA"+
-        "\u73FB\u73FD\u73FF\u7400\u7401\u7404\u7407\u740A"+
-        "\u7411\u741A\u741B\u7424\u7426\u7428\u7429\u742A"+
-        "\u742B\u742C\u742D\u742E\u742F\u7430\u7431\u7439"+
-        "\u7440\u7443\u7444\u7446\u7447\u744B\u744D\u7451"+
-        "\u7452\u7457\u745D\u7462\u7466\u7467\u7468\u746B"+
-        "\u746D\u746E\u7471\u7472\u7480\u7481\u7485\u7486"+
-        "\u7487\u7489\u748F\u7490\u7491\u7492\u7498\u7499"+
-        "\u749A\u749C\u749F\u74A0\u74A1\u74A3\u74A6\u74A8"+
-        "\u74A9\u74AA\u74AB\u74AE\u74AF\u74B1\u74B2\u74B5"+
-        "\u74B9\u74BB\u74BF\u74C8\u74C9\u74CC\u74D0\u74D3"+
-        "\u74D8\u74DA\u74DB\u74DE\u74DF\u74E4\u74E8\u74EA"+
-        "\u74EB\u74EF\u74F4\u74FA\u74FB\u74FC\u74FF\u7506"+
-        "\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529"+
-        "\u752A\u752F\u7536\u7539\u753D\u753E\u753F\u7540"+
-        "\u7543\u7547\u7548\u754E\u7550\u7552\u7557\u755E"+
-        "\u755F\u7561\u756F\u7571\u7579\u757A\u757B\u757C"+
-        "\u757D\u757E\u7581\u7585\u7590\u7592\u7593\u7595"+
-        "\u7599\u759C\u75A2\u75A4\u75B4\u75BA\u75BF\u75C0"+
-        "\u75C1\u75C4\u75C6\u75CC\u75CE\u75CF\u75D7\u75DC"+
-        "\u75DF\u75E0\u75E1\u75E4\u75E7\u75EC\u75EE\u75EF"+
-        "\u75F1\u75F9\u7600\u7602\u7603\u7604\u7607\u7608"+
-        "\u760A\u760C\u760F\u7612\u7613\u7615\u7616\u7619"+
-        "\u761B\u761C\u761D\u761E\u7623\u7625\u7626\u7629"+
-        "\u762D\u7632\u7633\u7635\u7638\u7639\u763A\u763C"+
-        "\u764A\u7640\u7641\u7643\u7644\u7645\u7649\u764B"+
-        "\u7655\u7659\u765F\u7664\u7665\u766D\u766E\u766F"+
-        "\u7671\u7674\u7681\u7685\u768C\u768D\u7695\u769B"+
-        "\u769C\u769D\u769F\u76A0\u76A2\u76A3\u76A4\u76A5"+
-        "\u76A6\u76A7\u76A8\u76AA\u76AD\u76BD\u76C1\u76C5"+
-        "\u76C9\u76CB\u76CC\u76CE\u76D4\u76D9\u76E0\u76E6"+
-        "\u76E8\u76EC\u76F0\u76F1\u76F6\u76F9\u76FC\u7700"+
-        "\u7706\u770A\u770E\u7712\u7714\u7715\u7717\u7719"+
-        "\u771A\u771C\u7722\u7728\u772D\u772E\u772F\u7734"+
-        "\u7735\u7736\u7739\u773D\u773E\u7742\u7745\u7746"+
-        "\u774A\u774D\u774E\u774F\u7752\u7756\u7757\u775C"+
-        "\u775E\u775F\u7760\u7762\u7764\u7767\u776A\u776C"+
-        "\u7770\u7772\u7773\u7774\u777A\u777D\u7780\u7784"+
-        "\u778C\u778D\u7794\u7795\u7796\u779A\u779F\u77A2"+
-        "\u77A7\u77AA\u77AE\u77AF\u77B1\u77B5\u77BE\u77C3"+
-        "\u77C9\u77D1\u77D2\u77D5\u77D9\u77DE\u77DF\u77E0"+
-        "\u77E4\u77E6\u77EA\u77EC\u77F0\u77F1\u77F4\u77F8"+
-        "\u77FB\u7805\u7806\u7809\u780D\u780E\u7811\u781D"+
-        "\u7821\u7822\u7823\u782D\u782E\u7830\u7835\u7837"+
-        "\u7843\u7844\u7847\u7848\u784C\u784E\u7852\u785C"+
-        "\u785E\u7860\u7861\u7863\u7864\u7868\u786A\u786E"+
-        "\u787A\u787E\u788A\u788F\u7894\u7898\u78A1\u789D"+
-        "\u789E\u789F\u78A4\u78A8\u78AC\u78AD\u78B0\u78B1"+
-        "\u78B2\u78B3\u78BB\u78BD\u78BF\u78C7\u78C8\u78C9"+
-        "\u78CC\u78CE\u78D2\u78D3\u78D5\u78D6\u78E4\u78DB"+
-        "\u78DF\u78E0\u78E1\u78E6\u78EA\u78F2\u78F3\u7900"+
-        "\u78F6\u78F7\u78FA\u78FB\u78FF\u7906\u790C\u7910"+
-        "\u791A\u791C\u791E\u791F\u7920\u7925\u7927\u7929"+
-        "\u792D\u7931\u7934\u7935\u793B\u793D\u793F\u7944"+
-        "\u7945\u7946\u794A\u794B\u794F\u7951\u7954\u7958"+
-        "\u795B\u795C\u7967\u7969\u796B\u7972\u7979\u797B"+
-        "\u797C\u797E\u798B\u798C\u7991\u7993\u7994\u7995"+
-        "\u7996\u7998\u799B\u799C\u79A1\u79A8\u79A9\u79AB"+
-        "\u79AF\u79B1\u79B4\u79B8\u79BB\u79C2\u79C4\u79C7"+
-        "\u79C8\u79CA\u79CF\u79D4\u79D6\u79DA\u79DD\u79DE"+
-        "\u79E0\u79E2\u79E5\u79EA\u79EB\u79ED\u79F1\u79F8"+
-        "\u79FC\u7A02\u7A03\u7A07\u7A09\u7A0A\u7A0C\u7A11"+
-        "\u7A15\u7A1B\u7A1E\u7A21\u7A27\u7A2B\u7A2D\u7A2F"+
-        "\u7A30\u7A34\u7A35\u7A38\u7A39\u7A3A\u7A44\u7A45"+
-        "\u7A47\u7A48\u7A4C\u7A55\u7A56\u7A59\u7A5C\u7A5D"+
-        "\u7A5F\u7A60\u7A65\u7A67\u7A6A\u7A6D\u7A75\u7A78"+
-        "\u7A7E\u7A80\u7A82\u7A85\u7A86\u7A8A\u7A8B\u7A90"+
-        "\u7A91\u7A94\u7A9E\u7AA0\u7AA3\u7AAC\u7AB3\u7AB5"+
-        "\u7AB9\u7ABB\u7ABC\u7AC6\u7AC9\u7ACC\u7ACE\u7AD1"+
-        "\u7ADB\u7AE8\u7AE9\u7AEB\u7AEC\u7AF1\u7AF4\u7AFB"+
-        "\u7AFD\u7AFE\u7B07\u7B14\u7B1F\u7B23\u7B27\u7B29"+
-        "\u7B2A\u7B2B\u7B2D\u7B2E\u7B2F\u7B30\u7B31\u7B34"+
-        "\u7B3D\u7B3F\u7B40\u7B41\u7B47\u7B4E\u7B55\u7B60"+
-        "\u7B64\u7B66\u7B69\u7B6A\u7B6D\u7B6F\u7B72\u7B73"+
-        "\u7B77\u7B84\u7B89\u7B8E\u7B90\u7B91\u7B96\u7B9B"+
-        "\u7B9E\u7BA0\u7BA5\u7BAC\u7BAF\u7BB0\u7BB2\u7BB5"+
-        "\u7BB6\u7BBA\u7BBB\u7BBC\u7BBD\u7BC2\u7BC5\u7BC8"+
-        "\u7BCA\u7BD4\u7BD6\u7BD7\u7BD9\u7BDA\u7BDB\u7BE8"+
-        "\u7BEA\u7BF2\u7BF4\u7BF5\u7BF8\u7BF9\u7BFA\u7BFC"+
-        "\u7BFE\u7C01\u7C02\u7C03\u7C04\u7C06\u7C09\u7C0B"+
-        "\u7C0C\u7C0E\u7C0F\u7C19\u7C1B\u7C20\u7C25\u7C26"+
-        "\u7C28\u7C2C\u7C31\u7C33\u7C34\u7C36\u7C39\u7C3A"+
-        "\u7C46\u7C4A\u7C55\u7C51\u7C52\u7C53\u7C59\u7C5A"+
-        "\u7C5B\u7C5C\u7C5D\u7C5E\u7C61\u7C63\u7C67\u7C69"+
-        "\u7C6D\u7C6E\u7C70\u7C72\u7C79\u7C7C\u7C7D\u7C86"+
-        "\u7C87\u7C8F\u7C94\u7C9E\u7CA0\u7CA6\u7CB0\u7CB6"+
-        "\u7CB7\u7CBA\u7CBB\u7CBC\u7CBF\u7CC4\u7CC7\u7CC8"+
-        "\u7CC9\u7CCD\u7CCF\u7CD3\u7CD4\u7CD5\u7CD7\u7CD9"+
-        "\u7CDA\u7CDD\u7CE6\u7CE9\u7CEB\u7CF5\u7D03\u7D07"+
-        "\u7D08\u7D09\u7D0F\u7D11\u7D12\u7D13\u7D16\u7D1D"+
-        "\u7D1E\u7D23\u7D26\u7D2A\u7D2D\u7D31\u7D3C\u7D3D"+
-        "\u7D3E\u7D40\u7D41\u7D47\u7D48\u7D4D\u7D51\u7D53"+
-        "\u7D57\u7D59\u7D5A\u7D5C\u7D5D\u7D65\u7D67\u7D6A"+
-        "\u7D70\u7D78\u7D7A\u7D7B\u7D7F\u7D81\u7D82\u7D83"+
-        "\u7D85\u7D86\u7D88\u7D8B\u7D8C\u7D8D\u7D91\u7D96"+
-        "\u7D97\u7D9D\u7D9E\u7DA6\u7DA7\u7DAA\u7DB3\u7DB6"+
-        "\u7DB7\u7DB9\u7DC2\u7DC3\u7DC4\u7DC5\u7DC6\u7DCC"+
-        "\u7DCD\u7DCE\u7DD7\u7DD9\u7E00\u7DE2\u7DE5\u7DE6"+
-        "\u7DEA\u7DEB\u7DED\u7DF1\u7DF5\u7DF6\u7DF9\u7DFA"+
-        "\u7E08\u7E10\u7E11\u7E15\u7E17\u7E1C\u7E1D\u7E20"+
-        "\u7E27\u7E28\u7E2C\u7E2D\u7E2F\u7E33\u7E36\u7E3F"+
-        "\u7E44\u7E45\u7E47\u7E4E\u7E50\u7E52\u7E58\u7E5F"+
-        "\u7E61\u7E62\u7E65\u7E6B\u7E6E\u7E6F\u7E73\u7E78"+
-        "\u7E7E\u7E81\u7E86\u7E87\u7E8A\u7E8D\u7E91\u7E95"+
-        "\u7E98\u7E9A\u7E9D\u7E9E\u7F3C\u7F3B\u7F3D\u7F3E"+
-        "\u7F3F\u7F43\u7F44\u7F47\u7F4F\u7F52\u7F53\u7F5B"+
-        "\u7F5C\u7F5D\u7F61\u7F63\u7F64\u7F65\u7F66\u7F6D"+
-        "\u7F71\u7F7D\u7F7E\u7F7F\u7F80\u7F8B\u7F8D\u7F8F"+
-        "\u7F90\u7F91\u7F96\u7F97\u7F9C\u7FA1\u7FA2\u7FA6"+
-        "\u7FAA\u7FAD\u7FB4\u7FBC\u7FBF\u7FC0\u7FC3\u7FC8"+
-        "\u7FCE\u7FCF\u7FDB\u7FDF\u7FE3\u7FE5\u7FE8\u7FEC"+
-        "\u7FEE\u7FEF\u7FF2\u7FFA\u7FFD\u7FFE\u7FFF\u8007"+
-        "\u8008\u800A\u800D\u800E\u800F\u8011\u8013\u8014"+
-        "\u8016\u801D\u801E\u801F\u8020\u8024\u8026\u802C"+
-        "\u802E\u8030\u8034\u8035\u8037\u8039\u803A\u803C"+
-        "\u803E\u8040\u8044\u8060\u8064\u8066\u806D\u8071"+
-        "\u8075\u8081\u8088\u808E\u809C\u809E\u80A6\u80A7"+
-        "\u80AB\u80B8\u80B9\u80C8\u80CD\u80CF\u80D2\u80D4"+
-        "\u80D5\u80D7\u80D8\u80E0\u80ED\u80EE\u80F0\u80F2"+
-        "\u80F3\u80F6\u80F9\u80FA\u80FE\u8103\u810B\u8116"+
-        "\u8117\u8118\u811C\u811E\u8120\u8124\u8127\u812C"+
-        "\u8130\u8135\u813A\u813C\u8145\u8147\u814A\u814C"+
-        "\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816D"+
-        "\u816F\u8177\u8181\u8190\u8184\u8185\u8186\u818B"+
-        "\u818E\u8196\u8198\u819B\u819E\u81A2\u81AE\u81B2"+
-        "\u81B4\u81BB\u81CB\u81C3\u81C5\u81CA\u81CE\u81CF"+
-        "\u81D5\u81D7\u81DB\u81DD\u81DE\u81E1\u81E4\u81EB"+
-        "\u81EC\u81F0\u81F1\u81F2\u81F5\u81F6\u81F8\u81F9"+
-        "\u81FD\u81FF\u8200\u8203\u820F\u8213\u8214\u8219"+
-        "\u821A\u821D\u8221\u8222\u8228\u8232\u8234\u823A"+
-        "\u8243\u8244\u8245\u8246\u824B\u824E\u824F\u8251"+
-        "\u8256\u825C\u8260\u8263\u8267\u826D\u8274\u827B"+
-        "\u827D\u827F\u8280\u8281\u8283\u8284\u8287\u8289"+
-        "\u828A\u828E\u8291\u8294\u8296\u8298\u829A\u829B"+
-        "\u82A0\u82A1\u82A3\u82A4\u82A7\u82A8\u82A9\u82AA"+
-        "\u82AE\u82B0\u82B2\u82B4\u82B7\u82BA\u82BC\u82BE"+
-        "\u82BF\u82C6\u82D0\u82D5\u82DA\u82E0\u82E2\u82E4"+
-        "\u82E8\u82EA\u82ED\u82EF\u82F6\u82F7\u82FD\u82FE"+
-        "\u8300\u8301\u8307\u8308\u830A\u830B\u8354\u831B"+
-        "\u831D\u831E\u831F\u8321\u8322\u832C\u832D\u832E"+
-        "\u8330\u8333\u8337\u833A\u833C\u833D\u8342\u8343"+
-        "\u8344\u8347\u834D\u834E\u8351\u8355\u8356\u8357"+
-        "\u8370\u8378\u837D\u837F\u8380\u8382\u8384\u8386"+
-        "\u838D\u8392\u8394\u8395\u8398\u8399\u839B\u839C"+
-        "\u839D\u83A6\u83A7\u83A9\u83AC\u83BE\u83BF\u83C0"+
-        "\u83C7\u83C9\u83CF\u83D0\u83D1\u83D4\u83DD\u8353"+
-        "\u83E8\u83EA\u83F6\u83F8\u83F9\u83FC\u8401\u8406"+
-        "\u840A\u840F\u8411\u8415\u8419\u83AD\u842F\u8439"+
-        "\u8445\u8447\u8448\u844A\u844D\u844F\u8451\u8452"+
-        "\u8456\u8458\u8459\u845A\u845C\u8460\u8464\u8465"+
-        "\u8467\u846A\u8470\u8473\u8474\u8476\u8478\u847C"+
-        "\u847D\u8481\u8485\u8492\u8493\u8495\u849E\u84A6"+
-        "\u84A8\u84A9\u84AA\u84AF\u84B1\u84B4\u84BA\u84BD"+
-        "\u84BE\u84C0\u84C2\u84C7\u84C8\u84CC\u84CF\u84D3";
-
-    private final static String innerIndex3=
-        "\u84DC\u84E7\u84EA\u84EF\u84F0\u84F1\u84F2\u84F7"+
-        "\u8532\u84FA\u84FB\u84FD\u8502\u8503\u8507\u850C"+
-        "\u850E\u8510\u851C\u851E\u8522\u8523\u8524\u8525"+
-        "\u8527\u852A\u852B\u852F\u8533\u8534\u8536\u853F"+
-        "\u8546\u854F\u8550\u8551\u8552\u8553\u8556\u8559"+
-        "\u855C\u855D\u855E\u855F\u8560\u8561\u8562\u8564"+
-        "\u856B\u856F\u8579\u857A\u857B\u857D\u857F\u8581"+
-        "\u8585\u8586\u8589\u858B\u858C\u858F\u8593\u8598"+
-        "\u859D\u859F\u85A0\u85A2\u85A5\u85A7\u85B4\u85B6"+
-        "\u85B7\u85B8\u85BC\u85BD\u85BE\u85BF\u85C2\u85C7"+
-        "\u85CA\u85CB\u85CE\u85AD\u85D8\u85DA\u85DF\u85E0"+
-        "\u85E6\u85E8\u85ED\u85F3\u85F6\u85FC\u85FF\u8600"+
-        "\u8604\u8605\u860D\u860E\u8610\u8611\u8612\u8618"+
-        "\u8619\u861B\u861E\u8621\u8627\u8629\u8636\u8638"+
-        "\u863A\u863C\u863D\u8640\u8642\u8646\u8652\u8653"+
-        "\u8656\u8657\u8658\u8659\u865D\u8660\u8661\u8662"+
-        "\u8663\u8664\u8669\u866C\u866F\u8675\u8676\u8677"+
-        "\u867A\u868D\u8691\u8696\u8698\u869A\u869C\u86A1"+
-        "\u86A6\u86A7\u86A8\u86AD\u86B1\u86B3\u86B4\u86B5"+
-        "\u86B7\u86B8\u86B9\u86BF\u86C0\u86C1\u86C3\u86C5"+
-        "\u86D1\u86D2\u86D5\u86D7\u86DA\u86DC\u86E0\u86E3"+
-        "\u86E5\u86E7\u8688\u86FA\u86FC\u86FD\u8704\u8705"+
-        "\u8707\u870B\u870E\u870F\u8710\u8713\u8714\u8719"+
-        "\u871E\u871F\u8721\u8723\u8728\u872E\u872F\u8731"+
-        "\u8732\u8739\u873A\u873C\u873D\u873E\u8740\u8743"+
-        "\u8745\u874D\u8758\u875D\u8761\u8764\u8765\u876F"+
-        "\u8771\u8772\u877B\u8783\u8784\u8785\u8786\u8787"+
-        "\u8788\u8789\u878B\u878C\u8790\u8793\u8795\u8797"+
-        "\u8798\u8799\u879E\u87A0\u87A3\u87A7\u87AC\u87AD"+
-        "\u87AE\u87B1\u87B5\u87BE\u87BF\u87C1\u87C8\u87C9"+
-        "\u87CA\u87CE\u87D5\u87D6\u87D9\u87DA\u87DC\u87DF"+
-        "\u87E2\u87E3\u87E4\u87EA\u87EB\u87ED\u87F1\u87F3"+
-        "\u87F8\u87FA\u87FF\u8801\u8803\u8806\u8809\u880A"+
-        "\u880B\u8810\u8819\u8812\u8813\u8814\u8818\u881A"+
-        "\u881B\u881C\u881E\u881F\u8828\u882D\u882E\u8830"+
-        "\u8832\u8835\u883A\u883C\u8841\u8843\u8845\u8848"+
-        "\u8849\u884A\u884B\u884E\u8851\u8855\u8856\u8858"+
-        "\u885A\u885C\u885F\u8860\u8864\u8869\u8871\u8879"+
-        "\u887B\u8880\u8898\u889A\u889B\u889C\u889F\u88A0"+
-        "\u88A8\u88AA\u88BA\u88BD\u88BE\u88C0\u88CA\u88CB"+
-        "\u88CC\u88CD\u88CE\u88D1\u88D2\u88D3\u88DB\u88DE"+
-        "\u88E7\u88EF\u88F0\u88F1\u88F5\u88F7\u8901\u8906"+
-        "\u890D\u890E\u890F\u8915\u8916\u8918\u8919\u891A"+
-        "\u891C\u8920\u8926\u8927\u8928\u8930\u8931\u8932"+
-        "\u8935\u8939\u893A\u893E\u8940\u8942\u8945\u8946"+
-        "\u8949\u894F\u8952\u8957\u895A\u895B\u895C\u8961"+
-        "\u8962\u8963\u896B\u896E\u8970\u8973\u8975\u897A"+
-        "\u897B\u897C\u897D\u8989\u898D\u8990\u8994\u8995"+
-        "\u899B\u899C\u899F\u89A0\u89A5\u89B0\u89B4\u89B5"+
-        "\u89B6\u89B7\u89BC\u89D4\u89D5\u89D6\u89D7\u89D8"+
-        "\u89E5\u89E9\u89EB\u89ED\u89F1\u89F3\u89F6\u89F9"+
-        "\u89FD\u89FF\u8A04\u8A05\u8A07\u8A0F\u8A11\u8A12"+
-        "\u8A14\u8A15\u8A1E\u8A20\u8A22\u8A24\u8A26\u8A2B"+
-        "\u8A2C\u8A2F\u8A35\u8A37\u8A3D\u8A3E\u8A40\u8A43"+
-        "\u8A45\u8A47\u8A49\u8A4D\u8A4E\u8A53\u8A56\u8A57"+
-        "\u8A58\u8A5C\u8A5D\u8A61\u8A65\u8A67\u8A75\u8A76"+
-        "\u8A77\u8A79\u8A7A\u8A7B\u8A7E\u8A7F\u8A80\u8A83"+
-        "\u8A86\u8A8B\u8A8F\u8A90\u8A92\u8A96\u8A97\u8A99"+
-        "\u8A9F\u8AA7\u8AA9\u8AAE\u8AAF\u8AB3\u8AB6\u8AB7"+
-        "\u8ABB\u8ABE\u8AC3\u8AC6\u8AC8\u8AC9\u8ACA\u8AD1"+
-        "\u8AD3\u8AD4\u8AD5\u8AD7\u8ADD\u8ADF\u8AEC\u8AF0"+
-        "\u8AF4\u8AF5\u8AF6\u8AFC\u8AFF\u8B05\u8B06\u8B0B"+
-        "\u8B11\u8B1C\u8B1E\u8B1F\u8B0A\u8B2D\u8B30\u8B37"+
-        "\u8B3C\u8B42\u8B43\u8B44\u8B45\u8B46\u8B48\u8B52"+
-        "\u8B53\u8B54\u8B59\u8B4D\u8B5E\u8B63\u8B6D\u8B76"+
-        "\u8B78\u8B79\u8B7C\u8B7E\u8B81\u8B84\u8B85\u8B8B"+
-        "\u8B8D\u8B8F\u8B94\u8B95\u8B9C\u8B9E\u8B9F\u8C38"+
-        "\u8C39\u8C3D\u8C3E\u8C45\u8C47\u8C49\u8C4B\u8C4F"+
-        "\u8C51\u8C53\u8C54\u8C57\u8C58\u8C5B\u8C5D\u8C59"+
-        "\u8C63\u8C64\u8C66\u8C68\u8C69\u8C6D\u8C73\u8C75"+
-        "\u8C76\u8C7B\u8C7E\u8C86\u8C87\u8C8B\u8C90\u8C92"+
-        "\u8C93\u8C99\u8C9B\u8C9C\u8CA4\u8CB9\u8CBA\u8CC5"+
-        "\u8CC6\u8CC9\u8CCB\u8CCF\u8CD6\u8CD5\u8CD9\u8CDD"+
-        "\u8CE1\u8CE8\u8CEC\u8CEF\u8CF0\u8CF2\u8CF5\u8CF7"+
-        "\u8CF8\u8CFE\u8CFF\u8D01\u8D03\u8D09\u8D12\u8D17"+
-        "\u8D1B\u8D65\u8D69\u8D6C\u8D6E\u8D7F\u8D82\u8D84"+
-        "\u8D88\u8D8D\u8D90\u8D91\u8D95\u8D9E\u8D9F\u8DA0"+
-        "\u8DA6\u8DAB\u8DAC\u8DAF\u8DB2\u8DB5\u8DB7\u8DB9"+
-        "\u8DBB\u8DC0\u8DC5\u8DC6\u8DC7\u8DC8\u8DCA\u8DCE"+
-        "\u8DD1\u8DD4\u8DD5\u8DD7\u8DD9\u8DE4\u8DE5\u8DE7"+
-        "\u8DEC\u8DF0\u8DBC\u8DF1\u8DF2\u8DF4\u8DFD\u8E01"+
-        "\u8E04\u8E05\u8E06\u8E0B\u8E11\u8E14\u8E16\u8E20"+
-        "\u8E21\u8E22\u8E23\u8E26\u8E27\u8E31\u8E33\u8E36"+
-        "\u8E37\u8E38\u8E39\u8E3D\u8E40\u8E41\u8E4B\u8E4D"+
-        "\u8E4E\u8E4F\u8E54\u8E5B\u8E5C\u8E5D\u8E5E\u8E61"+
-        "\u8E62\u8E69\u8E6C\u8E6D\u8E6F\u8E70\u8E71\u8E79"+
-        "\u8E7A\u8E7B\u8E82\u8E83\u8E89\u8E90\u8E92\u8E95"+
-        "\u8E9A\u8E9B\u8E9D\u8E9E\u8EA2\u8EA7\u8EA9\u8EAD"+
-        "\u8EAE\u8EB3\u8EB5\u8EBA\u8EBB\u8EC0\u8EC1\u8EC3"+
-        "\u8EC4\u8EC7\u8ECF\u8ED1\u8ED4\u8EDC\u8EE8\u8EEE"+
-        "\u8EF0\u8EF1\u8EF7\u8EF9\u8EFA\u8EED\u8F00\u8F02"+
-        "\u8F07\u8F08\u8F0F\u8F10\u8F16\u8F17\u8F18\u8F1E"+
-        "\u8F20\u8F21\u8F23\u8F25\u8F27\u8F28\u8F2C\u8F2D"+
-        "\u8F2E\u8F34\u8F35\u8F36\u8F37\u8F3A\u8F40\u8F41"+
-        "\u8F43\u8F47\u8F4F\u8F51\u8F52\u8F53\u8F54\u8F55"+
-        "\u8F58\u8F5D\u8F5E\u8F65\u8F9D\u8FA0\u8FA1\u8FA4"+
-        "\u8FA5\u8FA6\u8FB5\u8FB6\u8FB8\u8FBE\u8FC0\u8FC1"+
-        "\u8FC6\u8FCA\u8FCB\u8FCD\u8FD0\u8FD2\u8FD3\u8FD5"+
-        "\u8FE0\u8FE3\u8FE4\u8FE8\u8FEE\u8FF1\u8FF5\u8FF6"+
-        "\u8FFB\u8FFE\u9002\u9004\u9008\u900C\u9018\u901B"+
-        "\u9028\u9029\u902F\u902A\u902C\u902D\u9033\u9034"+
-        "\u9037\u903F\u9043\u9044\u904C\u905B\u905D\u9062"+
-        "\u9066\u9067\u906C\u9070\u9074\u9079\u9085\u9088"+
-        "\u908B\u908C\u908E\u9090\u9095\u9097\u9098\u9099"+
-        "\u909B\u90A0\u90A1\u90A2\u90A5\u90B0\u90B2\u90B3"+
-        "\u90B4\u90B6\u90BD\u90CC\u90BE\u90C3\u90C4\u90C5"+
-        "\u90C7\u90C8\u90D5\u90D7\u90D8\u90D9\u90DC\u90DD"+
-        "\u90DF\u90E5\u90D2\u90F6\u90EB\u90EF\u90F0\u90F4"+
-        "\u90FE\u90FF\u9100\u9104\u9105\u9106\u9108\u910D"+
-        "\u9110\u9114\u9116\u9117\u9118\u911A\u911C\u911E"+
-        "\u9120\u9125\u9122\u9123\u9127\u9129\u912E\u912F"+
-        "\u9131\u9134\u9136\u9137\u9139\u913A\u913C\u913D"+
-        "\u9143\u9147\u9148\u914F\u9153\u9157\u9159\u915A"+
-        "\u915B\u9161\u9164\u9167\u916D\u9174\u9179\u917A"+
-        "\u917B\u9181\u9183\u9185\u9186\u918A\u918E\u9191"+
-        "\u9193\u9194\u9195\u9198\u919E\u91A1\u91A6\u91A8"+
-        "\u91AC\u91AD\u91AE\u91B0\u91B1\u91B2\u91B3\u91B6"+
-        "\u91BB\u91BC\u91BD\u91BF\u91C2\u91C3\u91C5\u91D3"+
-        "\u91D4\u91D7\u91D9\u91DA\u91DE\u91E4\u91E5\u91E9"+
-        "\u91EA\u91EC\u91ED\u91EE\u91EF\u91F0\u91F1\u91F7"+
-        "\u91F9\u91FB\u91FD\u9200\u9201\u9204\u9205\u9206"+
-        "\u9207\u9209\u920A\u920C\u9210\u9212\u9213\u9216"+
-        "\u9218\u921C\u921D\u9223\u9224\u9225\u9226\u9228"+
-        "\u922E\u922F\u9230\u9233\u9235\u9236\u9238\u9239"+
-        "\u923A\u923C\u923E\u9240\u9242\u9243\u9246\u9247"+
-        "\u924A\u924D\u924E\u924F\u9251\u9258\u9259\u925C"+
-        "\u925D\u9260\u9261\u9265\u9267\u9268\u9269\u926E"+
-        "\u926F\u9270\u9275\u9276\u9277\u9278\u9279\u927B"+
-        "\u927C\u927D\u927F\u9288\u9289\u928A\u928D\u928E"+
-        "\u9292\u9297\u9299\u929F\u92A0\u92A4\u92A5\u92A7"+
-        "\u92A8\u92AB\u92AF\u92B2\u92B6\u92B8\u92BA\u92BB"+
-        "\u92BC\u92BD\u92BF\u92C0\u92C1\u92C2\u92C3\u92C5"+
-        "\u92C6\u92C7\u92C8\u92CB\u92CC\u92CD\u92CE\u92D0"+
-        "\u92D3\u92D5\u92D7\u92D8\u92D9\u92DC\u92DD\u92DF"+
-        "\u92E0\u92E1\u92E3\u92E5\u92E7\u92E8\u92EC\u92EE"+
-        "\u92F0\u92F9\u92FB\u92FF\u9300\u9302\u9308\u930D"+
-        "\u9311\u9314\u9315\u931C\u931D\u931E\u931F\u9321"+
-        "\u9324\u9325\u9327\u9329\u932A\u9333\u9334\u9336"+
-        "\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355"+
-        "\u9357\u9358\u935A\u935E\u9364\u9365\u9367\u9369"+
-        "\u936A\u936D\u936F\u9370\u9371\u9373\u9374\u9376"+
-        "\u937A\u937D\u937F\u9380\u9381\u9382\u9388\u938A"+
-        "\u938B\u938D\u938F\u9392\u9395\u9398\u939B\u939E"+
-        "\u93A1\u93A3\u93A4\u93A6\u93A8\u93AB\u93B4\u93B5"+
-        "\u93B6\u93BA\u93A9\u93C1\u93C4\u93C5\u93C6\u93C7"+
-        "\u93C9\u93CA\u93CB\u93CC\u93CD\u93D3\u93D9\u93DC"+
-        "\u93DE\u93DF\u93E2\u93E6\u93E7\u93F9\u93F7\u93F8"+
-        "\u93FA\u93FB\u93FD\u9401\u9402\u9404\u9408\u9409"+
-        "\u940D\u940E\u940F\u9415\u9416\u9417\u941F\u942E"+
-        "\u942F\u9431\u9432\u9433\u9434\u943B\u943F\u943D"+
-        "\u9443\u9445\u9448\u944A\u944C\u9455\u9459\u945C"+
-        "\u945F\u9461\u9463\u9468\u946B\u946D\u946E\u946F"+
-        "\u9471\u9472\u9484\u9483\u9578\u9579\u957E\u9584"+
-        "\u9588\u958C\u958D\u958E\u959D\u959E\u959F\u95A1"+
-        "\u95A6\u95A9\u95AB\u95AC\u95B4\u95B6\u95BA\u95BD"+
-        "\u95BF\u95C6\u95C8\u95C9\u95CB\u95D0\u95D1\u95D2"+
-        "\u95D3\u95D9\u95DA\u95DD\u95DE\u95DF\u95E0\u95E4"+
-        "\u95E6\u961D\u961E\u9622\u9624\u9625\u9626\u962C"+
-        "\u9631\u9633\u9637\u9638\u9639\u963A\u963C\u963D"+
-        "\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966E"+
-        "\u9674\u967B\u967C\u967E\u967F\u9681\u9682\u9683"+
-        "\u9684\u9689\u9691\u9696\u969A\u969D\u969F\u96A4"+
-        "\u96A5\u96A6\u96A9\u96AE\u96AF\u96B3\u96BA\u96CA"+
-        "\u96D2\u5DB2\u96D8\u96DA\u96DD\u96DE\u96DF\u96E9"+
-        "\u96EF\u96F1\u96FA\u9702\u9703\u9705\u9709\u971A"+
-        "\u971B\u971D\u9721\u9722\u9723\u9728\u9731\u9733"+
-        "\u9741\u9743\u974A\u974E\u974F\u9755\u9757\u9758"+
-        "\u975A\u975B\u9763\u9767\u976A\u976E\u9773\u9776"+
-        "\u9777\u9778\u977B\u977D\u977F\u9780\u9789\u9795"+
-        "\u9796\u9797\u9799\u979A\u979E\u979F\u97A2\u97AC"+
-        "\u97AE\u97B1\u97B2\u97B5\u97B6\u97B8\u97B9\u97BA"+
-        "\u97BC\u97BE\u97BF\u97C1\u97C4\u97C5\u97C7\u97C9"+
-        "\u97CA\u97CC\u97CD\u97CE\u97D0\u97D1\u97D4\u97D7"+
-        "\u97D8\u97D9\u97DD\u97DE\u97E0\u97DB\u97E1\u97E4"+
-        "\u97EF\u97F1\u97F4\u97F7\u97F8\u97FA\u9807\u980A"+
-        "\u9819\u980D\u980E\u9814\u9816\u981C\u981E\u9820"+
-        "\u9823\u9826\u982B\u982E\u982F\u9830\u9832\u9833"+
-        "\u9835\u9825\u983E\u9844\u9847\u984A\u9851\u9852"+
-        "\u9853\u9856\u9857\u9859\u985A\u9862\u9863\u9865"+
-        "\u9866\u986A\u986C\u98AB\u98AD\u98AE\u98B0\u98B4"+
-        "\u98B7\u98B8\u98BA\u98BB\u98BF\u98C2\u98C5\u98C8"+
-        "\u98CC\u98E1\u98E3\u98E5\u98E6\u98E7\u98EA\u98F3"+
-        "\u98F6\u9902\u9907\u9908\u9911\u9915\u9916\u9917"+
-        "\u991A\u991B\u991C\u991F\u9922\u9926\u9927\u992B"+
-        "\u9931\u9932\u9933\u9934\u9935\u9939\u993A\u993B"+
-        "\u993C\u9940\u9941\u9946\u9947\u9948\u994D\u994E"+
-        "\u9954\u9958\u9959\u995B\u995C\u995E\u995F\u9960"+
-        "\u999B\u999D\u999F\u99A6\u99B0\u99B1\u99B2\u99B5";
-
-    private final static String innerIndex4=
-        "\u99B9\u99BA\u99BD\u99BF\u99C3\u99C9\u99D3\u99D4"+
-        "\u99D9\u99DA\u99DC\u99DE\u99E7\u99EA\u99EB\u99EC"+
-        "\u99F0\u99F4\u99F5\u99F9\u99FD\u99FE\u9A02\u9A03"+
-        "\u9A04\u9A0B\u9A0C\u9A10\u9A11\u9A16\u9A1E\u9A20"+
-        "\u9A22\u9A23\u9A24\u9A27\u9A2D\u9A2E\u9A33\u9A35"+
-        "\u9A36\u9A38\u9A47\u9A41\u9A44\u9A4A\u9A4B\u9A4C"+
-        "\u9A4E\u9A51\u9A54\u9A56\u9A5D\u9AAA\u9AAC\u9AAE"+
-        "\u9AAF\u9AB2\u9AB4\u9AB5\u9AB6\u9AB9\u9ABB\u9ABE"+
-        "\u9ABF\u9AC1\u9AC3\u9AC6\u9AC8\u9ACE\u9AD0\u9AD2"+
-        "\u9AD5\u9AD6\u9AD7\u9ADB\u9ADC\u9AE0\u9AE4\u9AE5"+
-        "\u9AE7\u9AE9\u9AEC\u9AF2\u9AF3\u9AF5\u9AF9\u9AFA"+
-        "\u9AFD\u9AFF\u9B00\u9B01\u9B02\u9B03\u9B04\u9B05"+
-        "\u9B08\u9B09\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B12"+
-        "\u9B16\u9B19\u9B1B\u9B1C\u9B20\u9B26\u9B2B\u9B2D"+
-        "\u9B33\u9B34\u9B35\u9B37\u9B39\u9B3A\u9B3D\u9B48"+
-        "\u9B4B\u9B4C\u9B55\u9B56\u9B57\u9B5B\u9B5E\u9B61"+
-        "\u9B63\u9B65\u9B66\u9B68\u9B6A\u9B6B\u9B6C\u9B6D"+
-        "\u9B6E\u9B73\u9B75\u9B77\u9B78\u9B79\u9B7F\u9B80"+
-        "\u9B84\u9B85\u9B86\u9B87\u9B89\u9B8A\u9B8B\u9B8D"+
-        "\u9B8F\u9B90\u9B94\u9B9A\u9B9D\u9B9E\u9BA6\u9BA7"+
-        "\u9BA9\u9BAC\u9BB0\u9BB1\u9BB2\u9BB7\u9BB8\u9BBB"+
-        "\u9BBC\u9BBE\u9BBF\u9BC1\u9BC7\u9BC8\u9BCE\u9BD0"+
-        "\u9BD7\u9BD8\u9BDD\u9BDF\u9BE5\u9BE7\u9BEA\u9BEB"+
-        "\u9BEF\u9BF3\u9BF7\u9BF8\u9BF9\u9BFA\u9BFD\u9BFF"+
-        "\u9C00\u9C02\u9C0B\u9C0F\u9C11\u9C16\u9C18\u9C19"+
-        "\u9C1A\u9C1C\u9C1E\u9C22\u9C23\u9C26\u9C27\u9C28"+
-        "\u9C29\u9C2A\u9C31\u9C35\u9C36\u9C37\u9C3D\u9C41"+
-        "\u9C43\u9C44\u9C45\u9C49\u9C4A\u9C4E\u9C4F\u9C50"+
-        "\u9C53\u9C54\u9C56\u9C58\u9C5B\u9C5D\u9C5E\u9C5F"+
-        "\u9C63\u9C69\u9C6A\u9C5C\u9C6B\u9C68\u9C6E\u9C70"+
-        "\u9C72\u9C75\u9C77\u9C7B\u9CE6\u9CF2\u9CF7\u9CF9"+
-        "\u9D0B\u9D02\u9D11\u9D17\u9D18\u9D1C\u9D1D\u9D1E"+
-        "\u9D2F\u9D30\u9D32\u9D33\u9D34\u9D3A\u9D3C\u9D45"+
-        "\u9D3D\u9D42\u9D43\u9D47\u9D4A\u9D53\u9D54\u9D5F"+
-        "\u9D63\u9D62\u9D65\u9D69\u9D6A\u9D6B\u9D70\u9D76"+
-        "\u9D77\u9D7B\u9D7C\u9D7E\u9D83\u9D84\u9D86\u9D8A"+
-        "\u9D8D\u9D8E\u9D92\u9D93\u9D95\u9D96\u9D97\u9D98"+
-        "\u9DA1\u9DAA\u9DAC\u9DAE\u9DB1\u9DB5\u9DB9\u9DBC"+
-        "\u9DBF\u9DC3\u9DC7\u9DC9\u9DCA\u9DD4\u9DD5\u9DD6"+
-        "\u9DD7\u9DDA\u9DDE\u9DDF\u9DE0\u9DE5\u9DE7\u9DE9"+
-        "\u9DEB\u9DEE\u9DF0\u9DF3\u9DF4\u9DFE\u9E0A\u9E02"+
-        "\u9E07\u9E0E\u9E10\u9E11\u9E12\u9E15\u9E16\u9E19"+
-        "\u9E1C\u9E1D\u9E7A\u9E7B\u9E7C\u9E80\u9E82\u9E83"+
-        "\u9E84\u9E85\u9E87\u9E8E\u9E8F\u9E96\u9E98\u9E9B"+
-        "\u9E9E\u9EA4\u9EA8\u9EAC\u9EAE\u9EAF\u9EB0\u9EB3"+
-        "\u9EB4\u9EB5\u9EC6\u9EC8\u9ECB\u9ED5\u9EDF\u9EE4"+
-        "\u9EE7\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF5"+
-        "\u9EF8\u9EFF\u9F02\u9F03\u9F09\u9F0F\u9F10\u9F11"+
-        "\u9F12\u9F14\u9F16\u9F17\u9F19\u9F1A\u9F1B\u9F1F"+
-        "\u9F22\u9F26\u9F2A\u9F2B\u9F2F\u9F31\u9F32\u9F34"+
-        "\u9F37\u9F39\u9F3A\u9F3C\u9F3D\u9F3F\u9F41\u9F43"+
-        "\u9F44\u9F45\u9F46\u9F47\u9F53\u9F55\u9F56\u9F57"+
-        "\u9F58\u9F5A\u9F5D\u9F5E\u9F68\u9F69\u9F6D\u9F6E"+
-        "\u9F6F\u9F70\u9F71\u9F73\u9F75\u9F7A\u9F7D\u9F8F"+
-        "\u9F90\u9F91\u9F92\u9F94\u9F96\u9F97\u9F9E\u9FA1"+
-        "\u9FA2\u9FA3\u9FA5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
-        "\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177"+
-        "\u2178\u2179\u2160\u2161\u2162\u2163\u2164\u2165"+
-        "\u2166\u2167\u2168\u2169\uFF07\uFF02\u3231\u2116"+
-        "\u2121\u70BB\u4EFC\u50F4\u51EC\u5307\u5324\uFA0E"+
-        "\u548A\u5759\uFA0F\uFA10\u589E\u5BEC\u5CF5\u5D53"+
-        "\uFA11\u5FB7\u6085\u6120\u654E\u663B\u6665\uFA12"+
-        "\uF929\u6801\uFA13\uFA14\u6A6B\u6AE2\u6DF8\u6DF2"+
-        "\u7028\uFA15\uFA16\u7501\u7682\u769E\uFA17\u7930"+
-        "\uFA18\uFA19\uFA1A\uFA1B\u7AE7\uFA1C\uFA1D\u7DA0"+
-        "\u7DD6\uFA1E\u8362\uFA1F\u85B0\uFA20\uFA21\u8807"+
-        "\uFA22\u8B7F\u8CF4\u8D76\uFA23\uFA24\uFA25\u90DE"+
-        "\uFA26\u9115\uFA27\uFA28\u9592\uF9DC\uFA29\u973B"+
-        "\u974D\u9751\uFA2A\uFA2B\uFA2C\u999E\u9AD9\u9B72"+
-        "\uFA2D\u9ED1";
-
-    private final static short index1[] = {
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 1, 0, 0, 0, 2, 3, 0, 4, 5, 6, 0, 0, 0, 0,
-        7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
-        23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
-        39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
-        55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 0, 0,
-        0, 0, 0, 69, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-    };
-
-    private final static String index2[] = {
-        innerIndex0,
-        innerIndex1,
-        innerIndex2,
-        innerIndex3,
-        innerIndex4
-    };
-
-    protected char convSingleByte(int b) {
-        return REPLACE_CHAR;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_Solaris_Encoder.java b/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_Solaris_Encoder.java
deleted file mode 100755
index 26cb5d3..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/JIS_X_0212_Solaris_Encoder.java
+++ /dev/null
@@ -1,3081 +0,0 @@
-/*
- * Copyright (c) 2003, 2005, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-
-public class JIS_X_0212_Solaris_Encoder extends DoubleByteEncoder
-{
-
-    private static byte[] repl = { (byte)0x22, (byte)0x44 };
-
-    public JIS_X_0212_Solaris_Encoder(Charset cs) {
-        super(cs,
-              index1,
-              index2 ,
-              repl
-             );
-    }
-
-    protected int encodeSingle(char inputChar) {
-        return -1;
-    }
-
-    /**
-     * These accessors are temporarily supplied while sun.io
-     * converters co-exist with the sun.nio.cs.{ext} charset coders
-     * These facilitate sharing of conversion tables between the
-     * two co-existing implementations. When sun.io converters
-     * are made extinct these will be unncessary and should be removed
-     */
-
-    public static short[] getIndex1() {
-        return index1;
-    }
-    public static String[] getIndex2() {
-        return index2;
-    }
-
-    private final static String innerIndex0=
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007"+
-        "\b\t\n\u000B\f\r\u000E\u000F"+
-        "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017"+
-        "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F"+
-        "\u0020\u0021\"\u0023\u0024\u0025\u0026\'"+
-        "\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F"+
-        "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037"+
-        "\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u0000"+
-        "\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047"+
-        "\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F"+
-        "\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057"+
-        "\u0058\u0059\u005A\u005B\\\u005D\u005E\u005F"+
-        "\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067"+
-        "\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F"+
-        "\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077"+
-        "\u0078\u0079\u007A\u007B\u007C\u007D\u007E\u007F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u2242\u0000\u0000\u2270\u0000\u2243\u0000"+
-        "\u0000\u226D\u226C\u0000\u0000\u0000\u226E\u2234"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2231\u0000\u226B\u0000\u0000\u0000\u0000\u2244"+
-        "\u2A22\u2A21\u2A24\u2A2A\u2A23\u2A29\u2921\u2A2E"+
-        "\u2A32\u2A31\u2A34\u2A33\u2A40\u2A3F\u2A42\u2A41"+
-        "\u0000\u2A50\u2A52\u2A51\u2A54\u2A58\u2A53\u0000"+
-        "\u292C\u2A63\u2A62\u2A65\u2A64\u2A72\u2930\u294E"+
-        "\u2B22\u2B21\u2B24\u2B2A\u2B23\u2B29\u2941\u2B2E"+
-        "\u2B32\u2B31\u2B34\u2B33\u2B40\u2B3F\u2B42\u2B41"+
-        "\u2943\u2B50\u2B52\u2B51\u2B54\u2B58\u2B53\u0000"+
-        "\u294C\u2B63\u2B62\u2B65\u2B64\u2B72\u2950\u2B73"+
-        "\u2A27\u2B27\u2A25\u2B25\u2A28\u2B28\u2A2B\u2B2B"+
-        "\u2A2C\u2B2C\u2A2F\u2B2F\u2A2D\u2B2D\u2A30\u2B30"+
-        "\u2922\u2942\u2A37\u2B37\u0000\u0000\u2A36\u2B36"+
-        "\u2A38\u2B38\u2A35\u2B35\u2A3A\u2B3A\u2A3B\u2B3B"+
-        "\u2A3D\u2B3D\u2A3C\u0000\u2A3E\u2B3E\u2924\u2944"+
-        "\u2A47\u2B47\u2A45\u2B45\u0000\u0000\u2A46\u2B46"+
-        "\u2A44\u2945\u2926\u2946\u2A48\u2B48\u2A49\u2B49"+
-        "\u2947\u2A4A\u2B4A\u2A4C\u2B4C\u2A4B\u2B4B\u2929"+
-        "\u2949\u2928\u2948\u2A4D\u2B4D\u2A4F\u2B4F\u2A4E"+
-        "\u2B4E\u294A\u292B\u294B\u2A57\u2B57\u0000\u0000"+
-        "\u2A56\u2B56\u292D\u294D\u2A59\u2B59\u2A5B\u2B5B"+
-        "\u2A5A\u2B5A\u2A5C\u2B5C\u2A5D\u2B5D\u2A5F\u2B5F"+
-        "\u2A5E\u2B5E\u2A61\u2B61\u2A60\u2B60\u292F\u294F"+
-        "\u2A6C\u2B6C\u2A69\u2B69\u2A66\u2B66\u2A6B\u2B6B"+
-        "\u2A68\u2B68\u2A6A\u2B6A\u2A71\u2B71\u2A74\u2B74"+
-        "\u2A73\u2A75\u2B75\u2A77\u2B77\u2A76\u2B76\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2A26\u2B26\u2A43"+
-        "\u2B43\u2A55\u2B55\u2A67\u2B67\u2A70\u2B70\u2A6D"+
-        "\u2B6D\u2A6F\u2B6F\u2A6E\u2B6E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u2B39\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2230"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u222F\u2232\u2236\u2235\u0000\u2233\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u2238\u2239\u2661\u0000"+
-        "\u2662\u2663\u2664\u0000\u2667\u0000\u2669\u266C"+
-        "\u2676\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2665\u266A\u2671\u2672\u2673\u2674"+
-        "\u267B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2678\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2675\u267A\u2677\u2679\u267C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2742\u2743\u2744\u2745\u2746\u2747"+
-        "\u2748\u2749\u274A\u274B\u274C\u0000\u274D\u274E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u2772\u2773\u2774\u2775\u2776\u2777"+
-        "\u2778\u2779\u277A\u277B\u277C\u0000\u277D\u277E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2271\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u226F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u7373\u7374\u7375\u7376\u7377\u7378\u7379\u737A"+
-        "\u737B\u737C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3021\u0000\u3022\u3023\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3024\u0000\u0000\u0000"+
-        "\u0000\u0000\u3025\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3026"+
-        "\u0000\u0000\u0000\u3027\u3028\u0000\u0000\u0000"+
-        "\u3029\u0000\u0000\u302A\u0000\u0000\u302B\u302C"+
-        "\u302D\u0000\u0000\u0000\u0000\u302E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u302F\u3030\u0000\u0000\u3031\u0000\u0000\u3032"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3033\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3034\u0000\u3035\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3036\u0000\u0000\u0000\u0000"+
-        "\u3037\u3038\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3039\u303A\u0000\u0000"+
-        "\u0000\u303B\u0000\u0000\u0000\u0000\u0000\u303C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u303D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u303E\u303F"+
-        "\u0000\u0000\u0000\u0000\u0000\u3040\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3041"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3042\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3043\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3044\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3045\u3046\u0000\u0000\u0000\u0000"+
-        "\u3047\u3048\u3049\u0000\u0000\u0000\u0000\u0000"+
-        "\u304A\u0000\u0000\u0000\u0000\u0000\u0000\u304B"+
-        "\u0000\u304C\u0000\u304D\u0000\u304E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u742F\u304F\u3050\u3051"+
-        "\u3052\u0000\u3053\u3054\u0000\u0000\u0000\u0000"+
-        "\u3055\u0000\u0000\u3056\u3057\u0000\u0000\u0000"+
-        "\u0000\u0000\u3058\u0000\u0000\u3059\u305A\u305B"+
-        "\u0000\u305C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u305D\u0000"+
-        "\u0000\u305E\u0000\u3060\u0000\u3061\u0000\u3062"+
-        "\u0000\u3063\u0000\u3064\u0000\u0000\u3065\u0000"+
-        "\u3066\u0000\u3067\u0000\u0000\u0000\u0000\u0000"+
-        "\u3068\u3069\u0000\u306A\u306B\u0000\u0000\u0000"+
-        "\u0000\u0000\u306C\u0000\u306D\u0000\u306E\u0000"+
-        "\u306F\u0000\u0000\u0000\u0000\u0000\u0000\u3070"+
-        "\u305F\u0000\u0000\u3071\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3072\u0000\u3073\u0000\u3074\u0000"+
-        "\u0000\u3075\u0000\u0000\u0000\u0000\u0000\u3076"+
-        "\u3077\u3078\u3079\u0000\u0000\u307A\u307B\u0000"+
-        "\u0000\u307C\u307D\u0000\u307E\u3121\u0000\u0000"+
-        "\u0000\u3122\u3123\u0000\u3124\u0000\u3125\u0000"+
-        "\u3126\u0000\u3127\u3128\u3129\u0000\u0000\u312A"+
-        "\u0000\u312B\u312C\u0000\u0000\u0000\u312D\u312E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u312F\u0000\u0000\u0000\u0000\u3130"+
-        "\u0000\u3131\u0000\u3132\u3133\u3134\u3135\u0000"+
-        "\u3136\u3137\u0000\u0000\u0000\u3138\u3139\u0000"+
-        "\u313A\u313B\u0000\u313C\u313D\u313E\u0000\u313F"+
-        "\u0000\u0000\u3140\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3141\u0000\u0000\u0000"+
-        "\u3142\u0000\u3143\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3144\u0000\u3145\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3146\u3147\u0000\u3148"+
-        "\u3149\u314A\u0000\u0000\u314B\u0000\u0000\u314C"+
-        "\u0000\u0000\u314D\u0000\u314E\u0000\u314F\u0000"+
-        "\u3150\u0000\u0000\u3151\u0000\u0000\u0000\u3152"+
-        "\u3153\u0000\u0000\u3154\u3155\u3156\u3157\u0000"+
-        "\u0000\u0000\u3158\u0000\u0000\u0000\u0000\u3159"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u315A\u0000"+
-        "\u315B\u0000\u315C\u315D\u0000\u315E\u0000\u0000"+
-        "\u0000\u0000\u0000\u3176\u0000\u0000\u0000\u0000"+
-        "\u315F\u3160\u3161\u0000\u0000\u3162\u3163\u0000"+
-        "\u0000\u0000\u3164\u0000\u3165\u0000\u3166\u0000"+
-        "\u0000\u3167\u3168\u3169\u0000\u0000\u0000\u316A"+
-        "\u0000\u316B\u0000\u0000\u0000\u0000\u0000\u316C"+
-        "\u316D\u0000\u316E\u316F\u0000\u0000\u3170\u3171"+
-        "\u0000\u0000\u3172\u0000\u0000\u3173\u0000\u0000"+
-        "\u3174\u3175\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3177\u0000\u3178\u3179\u0000\u317A\u0000"+
-        "\u0000\u0000\u317B\u0000\u0000\u0000\u317C\u317D"+
-        "\u317E\u0000\u3221\u3222\u3223\u0000\u3224\u0000"+
-        "\u0000\u0000\u0000\u3225\u3226\u0000\u3227\u3228"+
-        "\u3229\u322A\u322B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u322C\u0000\u0000\u0000\u0000\u322D"+
-        "\u322E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u322F\u3230\u0000\u0000\u3231\u0000\u0000"+
-        "\u3232\u0000\u0000\u3233\u3234\u0000\u0000\u3235"+
-        "\u0000\u0000\u0000\u0000\u3236\u0000\u3237\u0000"+
-        "\u3238\u0000\u0000\u3239\u323A\u0000\u0000\u0000"+
-        "\u323B\u0000\u0000\u0000\u323C\u323D\u0000\u323E"+
-        "\u0000\u0000\u323F\u0000\u3240\u0000\u3241\u0000"+
-        "\u3242\u3243\u0000\u0000\u0000\u0000\u0000\u3244"+
-        "\u0000\u3245\u3251\u0000\u7430\u0000\u3246\u0000"+
-        "\u0000\u0000\u3247\u0000\u0000\u0000\u3248\u0000"+
-        "\u0000\u0000\u0000\u3249\u0000\u0000\u324A\u324B"+
-        "\u324C\u0000\u0000\u324D\u324E\u324F\u3250\u0000"+
-        "\u3252\u0000\u0000\u0000\u0000\u0000\u0000\u3253"+
-        "\u0000\u3254\u0000\u3255\u3256\u3257\u3258\u0000"+
-        "\u0000\u0000\u0000\u3259\u0000\u0000\u0000\u325A"+
-        "\u325B\u0000\u0000\u0000\u325C\u325D\u0000\u325E"+
-        "\u0000\u325F\u0000\u3260\u3261\u3262\u0000\u0000"+
-        "\u3263\u3264\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3265\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3266\u0000\u0000\u0000\u0000\u3267"+
-        "\u0000\u0000\u0000\u3268\u0000\u3269\u0000\u326A"+
-        "\u326B\u0000\u0000\u0000\u0000\u0000\u0000\u326C"+
-        "\u0000\u0000\u0000\u0000\u326D\u0000\u326E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u326F\u0000"+
-        "\u0000\u0000\u0000\u3270\u3271\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3272\u0000\u0000\u3273\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3274\u0000\u0000\u0000\u0000\u3275\u0000\u0000"+
-        "\u0000\u3276\u0000\u3277\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3278\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3279\u0000\u327A\u0000\u327B\u0000\u327C\u327D"+
-        "\u0000\u0000\u327E\u0000\u0000\u0000\u0000\u0000"+
-        "\u3321\u0000\u0000\u0000\u0000\u0000\u0000\u3322"+
-        "\u0000\u3323\u3324\u3325\u0000\u3326\u0000\u0000"+
-        "\u3327\u0000\u0000\u0000\u0000\u0000\u3328\u0000"+
-        "\u0000\u0000\u3329\u0000\u0000\u332A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u7431\u0000\u332B\u0000"+
-        "\u0000\u0000\u332C\u332D\u332E\u0000\u0000\u332F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3330\u3331\u0000\u0000\u3332\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3333\u3334\u0000\u3335\u3336\u0000"+
-        "\u3337\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3338\u0000\u0000\u0000\u0000\u0000"+
-        "\u3339\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u333A\u333B\u0000\u0000\u333C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u333D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u333E\u0000\u0000"+
-        "\u0000\u333F\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3340\u0000\u3341"+
-        "\u3342\u0000\u3343\u0000\u3344\u0000\u0000\u3345"+
-        "\u3346\u3347\u0000\u0000\u0000\u0000\u3348\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3349\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u334A"+
-        "\u334B\u334C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u334D\u0000\u334E\u0000\u0000\u334F\u0000\u0000"+
-        "\u0000\u0000\u3350\u0000\u3351\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3352\u0000\u3353\u3354\u3355"+
-        "\u3356\u0000\u3357\u0000\u3358\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3359\u335A\u335B\u335C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u335D"+
-        "\u335E\u0000\u0000\u0000\u0000\u0000\u335F\u3360"+
-        "\u3361\u0000\u3362\u3363\u0000\u3364\u0000\u0000"+
-        "\u3365\u0000\u0000\u0000\u3366\u0000\u3367\u0000"+
-        "\u3368\u0000\u0000\u0000\u3369\u0000\u0000\u336A"+
-        "\u0000\u336B\u0000\u0000\u336C\u0000\u336D\u0000"+
-        "\u0000\u0000\u0000\u336E\u336F\u0000\u0000\u0000"+
-        "\u0000\u3370\u0000\u0000\u0000\u3371\u0000\u0000"+
-        "\u3372\u3373\u3374\u0000\u3375\u0000\u0000\u0000"+
-        "\u3376\u3377\u0000\u0000\u3378\u0000\u3379\u337A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u337B\u0000\u0000\u337C\u0000\u0000\u0000\u7432"+
-        "\u0000\u0000\u337D\u337E\u3421\u0000\u0000\u0000"+
-        "\u0000\u3422\u0000\u3423\u0000\u0000\u0000\u0000"+
-        "\u3424\u0000\u0000\u3425\u3426\u0000\u3427\u3428"+
-        "\u0000\u0000\u0000\u0000\u7433\u3429\u0000\u342A"+
-        "\u342B\u342C\u0000\u342D\u342E\u342F\u0000\u0000"+
-        "\u3430\u0000\u3431\u0000\u0000\u3432\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3433\u3434\u3435\u0000"+
-        "\u0000\u0000\u3436\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3438\u3437\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3439\u0000\u343A\u0000\u0000\u0000\u0000"+
-        "\u0000\u343B\u0000\u343C\u0000\u343D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u343E\u343F\u0000\u0000"+
-        "\u0000\u0000\u3440\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3441\u0000\u0000\u0000\u0000\u3442\u0000"+
-        "\u0000\u0000\u0000\u3443\u0000\u0000\u0000\u3444"+
-        "\u3445\u0000\u0000\u0000\u0000\u0000\u3446\u0000"+
-        "\u0000\u0000\u0000\u3447\u3448\u0000\u0000\u0000"+
-        "\u0000\u3449\u0000\u0000\u0000\u344A\u0000\u0000"+
-        "\u0000\u344B\u0000\u0000\u344C\u0000\u0000\u0000"+
-        "\u0000\u0000\u344D\u344E\u0000\u0000\u0000\u344F"+
-        "\u0000\u0000\u3450\u0000\u3451\u3452\u0000\u3453"+
-        "\u3454\u0000\u3455\u0000\u0000\u3456\u0000\u0000"+
-        "\u3457\u0000\u0000\u0000\u0000\u3458\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3459"+
-        "\u0000\u0000\u345A\u345B\u0000\u345C\u0000\u0000"+
-        "\u0000\u0000\u345D\u0000\u0000\u345E\u345F\u0000"+
-        "\u3460\u0000\u0000\u0000\u0000\u0000\u3461\u3462"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3463\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3464\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3465\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3466\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3467\u0000\u0000\u0000\u0000\u0000\u3468"+
-        "\u3469\u0000\u346A\u0000\u0000\u0000\u0000\u346B"+
-        "\u0000\u346C\u0000\u0000\u346D\u346E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u346F\u3470\u0000\u0000\u3471"+
-        "\u0000\u0000\u0000\u0000\u0000\u3472\u0000\u3473"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3474\u0000"+
-        "\u0000\u0000\u3475\u0000\u3476\u0000\u3477\u3478"+
-        "\u0000\u3479\u0000\u347A\u0000\u347B\u347C\u0000"+
-        "\u0000\u0000\u0000\u0000\u347D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u347E"+
-        "\u0000\u3521\u0000\u3522\u0000\u3523\u0000\u0000"+
-        "\u3524\u3525\u7435\u0000\u0000\u3526\u0000\u0000"+
-        "\u0000\u3527\u0000\u0000\u0000\u3528\u3529\u0000"+
-        "\u0000\u0000\u0000\u0000\u352A\u0000\u0000\u352B"+
-        "\u0000\u352C\u0000\u0000\u0000\u0000\u352D\u352E"+
-        "\u0000\u352F\u3530\u0000\u0000\u3531\u3532\u0000"+
-        "\u0000\u3533\u0000\u0000\u0000\u0000\u0000\u3534"+
-        "\u0000\u3535\u3536\u3537\u0000\u0000\u0000\u3538"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3539\u0000"+
-        "\u0000\u0000\u353A\u0000\u0000\u353B\u353C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u353D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u353E\u0000\u353F\u0000\u0000\u3540"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3541\u0000"+
-        "\u0000\u0000\u0000\u0000\u3542\u0000\u3543\u3544"+
-        "\u3545\u3546\u0000\u0000\u0000\u3547\u0000\u0000"+
-        "\u3548\u3549\u0000\u0000\u354A\u354B\u354C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u354D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u354E\u354F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3550\u0000\u0000\u3551\u3552\u0000"+
-        "\u0000\u0000\u0000\u3553\u3554\u3555\u0000\u0000"+
-        "\u0000\u3556\u0000\u0000\u0000\u0000\u0000\u3557"+
-        "\u0000\u3558\u3559\u0000\u0000\u355A\u0000\u0000"+
-        "\u355B\u355C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u355D\u0000\u355E\u355F\u0000\u0000\u3560\u0000"+
-        "\u3561\u3562\u0000\u0000\u3563\u0000\u3564\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3565"+
-        "\u0000\u3566\u3567\u0000\u0000\u0000\u3568\u0000"+
-        "\u3569\u0000\u0000\u0000\u0000\u0000\u356A\u356B"+
-        "\u0000\u356C\u356D\u356E\u356F\u0000\u0000\u3570"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3571\u3572\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3573\u0000\u0000"+
-        "\u0000\u0000\u3574\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3575"+
-        "\u0000\u3576\u0000\u3577\u0000\u0000\u3578\u0000"+
-        "\u0000\u3579\u0000\u357A\u357B\u0000\u357C\u0000"+
-        "\u0000\u357D\u357E\u3621\u0000\u0000\u0000\u3622"+
-        "\u3623\u0000\u0000\u3624\u0000\u0000\u3625\u0000"+
-        "\u0000\u0000\u3626\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3627\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3628\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3629"+
-        "\u0000\u0000\u0000\u0000\u0000\u362A\u0000\u0000"+
-        "\u362B\u0000\u362C\u0000\u0000\u362D\u362E\u362F"+
-        "\u3630\u3631\u3632\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3633\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3634\u0000\u0000\u0000"+
-        "\u3635\u0000\u0000\u3636\u0000\u3637\u0000\u3638"+
-        "\u0000\u3639\u0000\u363A\u363B\u363C\u0000\u363D"+
-        "\u363E\u363F\u0000\u3640\u3641\u0000\u3642\u0000"+
-        "\u0000\u3643\u0000\u3644\u0000\u3645\u0000\u3646"+
-        "\u0000\u0000\u0000\u0000\u3647\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3648\u0000"+
-        "\u3649\u364A\u364B\u364C\u0000\u0000\u364D\u0000"+
-        "\u0000\u364E\u0000\u0000\u0000\u364F\u0000\u3650"+
-        "\u0000\u3651\u3652\u0000\u0000\u3653\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3654\u3655\u0000\u0000"+
-        "\u3656\u0000\u0000\u3657\u3658\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3659\u0000\u0000"+
-        "\u0000\u365A\u365B\u0000\u0000\u365C\u365D\u365E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u365F\u3660"+
-        "\u3661\u3662\u0000\u3663\u3664\u3665\u0000\u0000"+
-        "\u0000\u3666\u0000\u3667\u0000\u0000\u0000\u3668"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3669\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u366A\u0000\u0000"+
-        "\u0000\u366B\u366C\u366D\u3670\u3671\u0000\u366E"+
-        "\u366F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3672\u0000\u0000\u3673\u3674\u0000\u3675"+
-        "\u0000\u3676\u0000\u0000\u3677\u3678\u3679\u367A"+
-        "\u367B\u0000\u0000\u367D\u0000\u367E\u0000\u0000"+
-        "\u0000\u367C\u0000\u0000\u0000\u0000\u3721\u3722"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-    private final static String innerIndex1=
-        "\u0000\u3723\u3724\u0000\u0000\u0000\u0000\u3725"+
-        "\u0000\u0000\u3726\u0000\u3727\u0000\u0000\u0000"+
-        "\u0000\u3728\u0000\u0000\u0000\u3729\u0000\u0000"+
-        "\u0000\u0000\u372A\u372B\u0000\u372C\u0000\u0000"+
-        "\u372D\u0000\u372E\u372F\u3730\u3731\u0000\u0000"+
-        "\u0000\u3732\u3733\u0000\u3734\u0000\u3735\u3736"+
-        "\u0000\u0000\u0000\u3737\u3738\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3739\u373A\u373B"+
-        "\u0000\u0000\u0000\u0000\u0000\u373C\u373D\u0000"+
-        "\u0000\u0000\u0000\u0000\u373E\u373F\u0000\u0000"+
-        "\u0000\u0000\u3740\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u7436\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3741\u0000\u0000\u3742\u0000\u3743"+
-        "\u3744\u0000\u0000\u3745\u0000\u3746\u3747\u3748"+
-        "\u3749\u374A\u0000\u374B\u374C\u374D\u0000\u374E"+
-        "\u0000\u374F\u3750\u3751\u3752\u0000\u3753\u0000"+
-        "\u0000\u3754\u0000\u3755\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3756\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3757\u3760\u0000\u3758"+
-        "\u0000\u3759\u375A\u0000\u375B\u375C\u375D\u375E"+
-        "\u0000\u375F\u0000\u0000\u0000\u0000\u0000\u3761"+
-        "\u3762\u3763\u0000\u0000\u3764\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3765\u0000\u0000\u0000\u0000\u3766\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3767"+
-        "\u3768\u0000\u0000\u0000\u3769\u0000\u0000\u376A"+
-        "\u0000\u0000\u0000\u0000\u0000\u376B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u376C\u376D\u0000"+
-        "\u0000\u377E\u0000\u0000\u376E\u0000\u376F\u3770"+
-        "\u0000\u3771\u0000\u0000\u0000\u3772\u0000\u0000"+
-        "\u3773\u0000\u0000\u0000\u0000\u3774\u3775\u0000"+
-        "\u3776\u0000\u0000\u0000\u0000\u3777\u3778\u3779"+
-        "\u0000\u0000\u0000\u377A\u377B\u0000\u0000\u0000"+
-        "\u377C\u377D\u0000\u0000\u3821\u3822\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3823\u0000\u0000\u3824\u3825"+
-        "\u3826\u0000\u0000\u0000\u0000\u0000\u3827\u3828"+
-        "\u0000\u0000\u0000\u0000\u0000\u3829\u0000\u0000"+
-        "\u0000\u0000\u382A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u382B\u0000\u0000\u0000\u0000\u0000\u382C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u382D\u0000\u0000\u382E\u382F\u0000\u3830"+
-        "\u3831\u0000\u0000\u0000\u0000\u3832\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3833"+
-        "\u0000\u3834\u0000\u0000\u3835\u0000\u0000\u3836"+
-        "\u3837\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3838\u0000\u0000\u0000\u3839\u0000\u0000\u383A"+
-        "\u383B\u383C\u0000\u0000\u0000\u0000\u0000\u383D"+
-        "\u383E\u383F\u3840\u0000\u3841\u3842\u0000\u3843"+
-        "\u3844\u0000\u0000\u0000\u3845\u0000\u3846\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3847\u7439\u0000"+
-        "\u3848\u3849\u384A\u0000\u0000\u0000\u384B\u0000"+
-        "\u0000\u384C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u384D\u384E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3850\u0000\u0000\u0000"+
-        "\u0000\u0000\u3851\u0000\u384F\u0000\u0000\u0000"+
-        "\u3852\u0000\u0000\u0000\u0000\u3853\u3854\u0000"+
-        "\u3855\u0000\u3856\u0000\u3857\u0000\u3858\u0000"+
-        "\u0000\u0000\u3859\u0000\u0000\u385A\u0000\u0000"+
-        "\u0000\u385B\u385C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u385D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u385E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u385F\u3860\u0000"+
-        "\u0000\u0000\u0000\u3861\u3862\u0000\u0000\u0000"+
-        "\u0000\u0000\u3863\u3864\u3865\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3867\u0000\u0000"+
-        "\u0000\u3868\u0000\u3869\u386A\u0000\u0000\u0000"+
-        "\u386B\u0000\u0000\u0000\u0000\u0000\u0000\u386C"+
-        "\u386D\u0000\u0000\u386E\u0000\u386F\u3870\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3871"+
-        "\u0000\u0000\u0000\u3872\u0000\u0000\u3873\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3874\u3875\u0000\u0000\u0000\u0000"+
-        "\u0000\u3876\u0000\u3877\u0000\u3878\u3879\u387A"+
-        "\u0000\u387B\u0000\u387C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u387D\u0000\u387E\u0000\u3921"+
-        "\u0000\u0000\u3922\u0000\u0000\u3923\u3924\u0000"+
-        "\u0000\u3925\u0000\u3926\u3927\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3928\u3929\u0000\u392A\u0000"+
-        "\u0000\u0000\u392B\u0000\u0000\u392C\u0000\u392D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u392E"+
-        "\u0000\u0000\u0000\u0000\u392F\u0000\u0000\u3930"+
-        "\u0000\u0000\u0000\u0000\u0000\u3931\u3932\u3933"+
-        "\u3934\u0000\u0000\u3935\u0000\u0000\u0000\u3936"+
-        "\u0000\u0000\u3937\u0000\u3938\u0000\u0000\u0000"+
-        "\u0000\u3939\u0000\u393A\u393B\u0000\u0000\u0000"+
-        "\u393C\u0000\u393D\u0000\u0000\u393E\u0000\u0000"+
-        "\u0000\u0000\u393F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3940\u3941\u3942"+
-        "\u0000\u0000\u0000\u3943\u3944\u0000\u0000\u3945"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3946\u3947"+
-        "\u0000\u3948\u3949\u0000\u394A\u0000\u0000\u394B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u394C\u0000\u0000\u0000\u394D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u394E\u394F\u3950\u0000"+
-        "\u0000\u0000\u3951\u3952\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3953\u0000"+
-        "\u0000\u0000\u0000\u3954\u3955\u0000\u0000\u3956"+
-        "\u3957\u0000\u3958\u0000\u0000\u3959\u0000\u0000"+
-        "\u395A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u395B\u395C\u0000\u395D"+
-        "\u395E\u0000\u0000\u0000\u395F\u0000\u0000\u0000"+
-        "\u3960\u0000\u0000\u0000\u0000\u3961\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3962\u0000"+
-        "\u0000\u0000\u0000\u3963\u0000\u3964\u0000\u3965"+
-        "\u0000\u0000\u0000\u0000\u0000\u3966\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3967"+
-        "\u0000\u0000\u3968\u3969\u0000\u0000\u396A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u396B\u0000\u0000\u0000\u0000"+
-        "\u396C\u0000\u0000\u396D\u0000\u0000\u396E\u0000"+
-        "\u0000\u396F\u0000\u0000\u3970\u0000\u3971\u3972"+
-        "\u3973\u0000\u3974\u0000\u0000\u0000\u0000\u3975"+
-        "\u0000\u0000\u0000\u0000\u3976\u0000\u0000\u0000"+
-        "\u0000\u3977\u3978\u3979\u0000\u397A\u0000\u0000"+
-        "\u397B\u0000\u397C\u397D\u0000\u0000\u0000\u397E"+
-        "\u0000\u0000\u0000\u0000\u3A21\u0000\u3A22\u0000"+
-        "\u3A23\u0000\u0000\u0000\u0000\u0000\u0000\u3A24"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3A25\u0000\u3A26\u0000\u0000\u0000"+
-        "\u3A27\u0000\u0000\u0000\u0000\u3A28\u0000\u0000"+
-        "\u0000\u0000\u3A29\u0000\u0000\u0000\u3A2A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3A2B\u3A2C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3A2D\u0000\u0000"+
-        "\u3A2E\u3A2F\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3A30\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3A31"+
-        "\u0000\u3A33\u0000\u3A34\u0000\u3A35\u0000\u0000"+
-        "\u0000\u3A36\u0000\u0000\u0000\u3A37\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3A38\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3A32\u0000\u0000\u0000"+
-        "\u3A39\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3A3A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3A3B\u3A3C\u0000\u0000\u0000"+
-        "\u0000\u0000\u3A3D\u0000\u0000\u0000\u3A3E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3A3F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3A40\u0000\u0000\u0000\u0000\u0000\u3A41\u3A42"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3A43\u3A44\u3A45\u3A46"+
-        "\u0000\u3A47\u0000\u0000\u3A48\u0000\u3A49\u0000"+
-        "\u0000\u0000\u3A4A\u0000\u0000\u0000\u3A4B\u0000"+
-        "\u3A4C\u3A4D\u0000\u3A4E\u3A4F\u0000\u3A50\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3A51\u3A52\u0000\u0000\u3A53\u3A54\u0000\u3A55"+
-        "\u0000\u3A56\u3A57\u0000\u0000\u0000\u0000\u3A58"+
-        "\u0000\u0000\u3A59\u0000\u3A5A\u0000\u0000\u0000"+
-        "\u3A5B\u3A5C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3A5D\u0000\u3A5E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3A5F\u3A60"+
-        "\u3A61\u3A62\u3A63\u0000\u0000\u0000\u0000\u0000"+
-        "\u3A64\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u743A\u0000\u0000\u3A65"+
-        "\u0000\u3A66\u0000\u0000\u3A67\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3A68\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3A69\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3A6A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3A6B\u3A6C"+
-        "\u0000\u0000\u0000\u3A6D\u0000\u0000\u3A6E\u0000"+
-        "\u0000\u3A6F\u0000\u3A70\u3A71\u0000\u3A72\u0000"+
-        "\u3A73\u0000\u3A74\u0000\u0000\u3A75\u3A76\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3A77\u3A78\u0000\u3A79\u0000\u0000\u0000"+
-        "\u0000\u0000\u3A7A\u3A7B\u0000\u0000\u0000\u3A7C"+
-        "\u3A7D\u3A7E\u0000\u0000\u0000\u3B21\u0000\u0000"+
-        "\u3B22\u0000\u0000\u0000\u3B23\u3B24\u0000\u0000"+
-        "\u0000\u0000\u3B25\u3B26\u3B27\u3B28\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3B29"+
-        "\u3B2A\u0000\u3B2B\u0000\u0000\u0000\u0000\u3B2C"+
-        "\u0000\u0000\u3B2D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3B2E\u0000\u3B2F"+
-        "\u3B30\u0000\u3B31\u3B32\u0000\u0000\u3B33\u0000"+
-        "\u0000\u0000\u3B34\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3B35\u0000\u3B36\u3B37\u0000\u0000"+
-        "\u0000\u0000\u3B38\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3B39\u0000\u3B3A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3B3B\u0000\u0000\u0000\u0000\u3B3D"+
-        "\u0000\u0000\u0000\u0000\u0000\u3B3C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3B3E\u0000"+
-        "\u0000\u3B3F\u3B40\u0000\u3B41\u743B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3B42\u0000\u0000\u0000\u0000\u3B43\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3B44\u0000\u0000"+
-        "\u0000\u0000\u3B45\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3B47\u3B48\u0000\u3B49\u3B4A"+
-        "\u0000\u0000\u0000\u3B46\u0000\u0000\u0000\u0000"+
-        "\u0000\u3B4B\u0000\u0000\u3B4C\u0000\u0000\u0000"+
-        "\u0000\u3B4D\u0000\u0000\u0000\u3B4E\u0000\u3B4F"+
-        "\u0000\u0000\u3B50\u3B51\u0000\u0000\u3B52\u0000"+
-        "\u3B53\u0000\u3B57\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3B55\u0000\u743C\u0000\u3B54\u0000\u0000"+
-        "\u0000\u3B56\u0000\u0000\u0000\u0000\u0000\u3B58"+
-        "\u3B59\u3B5A\u3B5B\u0000\u3B5C\u0000\u0000\u0000"+
-        "\u0000\u0000\u3B5D\u0000\u0000\u3B5E\u0000\u0000"+
-        "\u3B5F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3B60\u3B61\u0000\u0000\u0000\u3B62\u3B63"+
-        "\u0000\u3B64\u0000\u3B65\u0000\u0000\u0000\u0000"+
-        "\u3B66\u0000\u3B67\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3B68\u3B69\u3B6A\u3B6B\u0000\u0000"+
-        "\u0000\u3B6C\u0000\u3B6D\u0000\u0000\u0000\u3B6E"+
-        "\u3B6F\u0000\u0000\u0000\u0000\u0000\u0000\u3B70"+
-        "\u0000\u0000\u0000\u3B71\u0000\u0000\u0000\u0000"+
-        "\u3B72\u0000\u6674\u0000\u3B73\u0000\u0000\u0000"+
-        "\u3B74\u3B75\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3B76\u0000\u0000\u0000\u3B77"+
-        "\u0000\u0000\u0000\u3B78\u0000\u0000\u3B7A\u0000"+
-        "\u3B79\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3B7B\u3B7C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3B7D\u0000\u0000\u0000\u3B7E\u0000\u0000\u0000"+
-        "\u0000\u3C21\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3C22\u3C23\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3C24\u0000\u0000\u0000\u0000\u0000\u0000\u3C25"+
-        "\u0000\u0000\u0000\u0000\u0000\u3C26\u0000\u0000"+
-        "\u0000\u0000\u3C27\u0000\u3C28\u3C29\u0000\u0000"+
-        "\u3C2A\u0000\u0000\u0000\u0000\u0000\u0000\u3C2B"+
-        "\u3C2C\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3C2E\u0000\u0000\u0000\u0000\u0000\u3C2D\u0000"+
-        "\u0000\u0000\u3C2F\u0000\u0000\u3C30\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3C31\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3C34\u0000\u3C32\u0000\u0000\u0000\u0000"+
-        "\u3C33\u3C35\u0000\u0000\u0000\u0000\u3C36\u0000"+
-        "\u3C37\u0000\u0000\u3C38\u3C39\u0000\u3C3A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3C3B\u0000\u3C3C\u3C3D\u3C3E\u3C3F\u3C40\u0000"+
-        "\u3C41\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3C42\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3C43\u0000\u0000\u3C44\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3C45\u0000\u3C46\u3C47\u0000\u0000"+
-        "\u3C48\u0000\u3C49\u0000\u3C4A\u0000\u0000\u0000"+
-        "\u0000\u3C4B\u0000\u3C4C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3C4D\u3C4E\u3C4F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3C50\u0000"+
-        "\u0000\u0000\u0000\u3C52\u3C51\u0000\u3C53\u0000"+
-        "\u0000\u3C54\u3C55\u0000\u3C56\u3C57\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3C58\u0000\u3C59\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3C5A\u0000\u0000"+
-        "\u0000\u0000\u0000\u3C5B\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3C5C\u0000\u0000\u0000\u3C5D\u3C5E"+
-        "\u3C5F\u0000\u0000\u0000\u0000\u0000\u3C60\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3C61\u0000\u0000\u3C62\u3C63\u0000\u0000"+
-        "\u0000\u3C64\u3C65\u3C66\u3C67\u0000\u0000\u0000"+
-        "\u3C68\u0000\u0000\u3C69\u3C6A\u0000\u3C6B\u0000"+
-        "\u3C6C\u0000\u0000\u0000\u3C6D\u0000\u3C6E\u0000"+
-        "\u0000\u0000\u0000\u3C6F\u0000\u3C70\u0000\u3C71"+
-        "\u3C72\u0000\u0000\u0000\u3C73\u3C74\u0000\u3C75"+
-        "\u0000\u0000\u0000\u0000\u0000\u3C76\u0000\u0000"+
-        "\u3C77\u0000\u0000\u0000\u3C78\u0000\u0000\u0000"+
-        "\u3C79\u0000\u0000\u3C7A\u0000\u0000\u0000\u0000"+
-        "\u3C7B\u0000\u0000\u3C7C\u3C7D\u0000\u0000\u3C7E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3D21"+
-        "\u0000\u0000\u3D22\u0000\u3D23\u3D24\u0000\u0000"+
-        "\u3D25\u0000\u3D26\u0000\u0000\u3D27\u3D28\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3D29\u0000\u0000\u0000\u3D2A\u0000\u3D2B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3D2C\u0000"+
-        "\u0000\u0000\u0000\u0000\u3D2D\u3D2E\u0000\u0000"+
-        "\u0000\u0000\u3D2F\u0000\u3D32\u0000\u0000\u3D30"+
-        "\u0000\u0000\u0000\u3D31\u3D33\u0000\u0000\u3D34"+
-        "\u3D35\u3D36\u0000\u0000\u0000\u0000\u0000\u743E"+
-        "\u3D37\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3D38\u0000\u0000\u3D39"+
-        "\u3D3A\u3D3B\u0000\u3D3C\u0000\u0000\u0000\u0000"+
-        "\u3D3D\u3D3E\u3D3F\u3D40\u3D41\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3D42\u0000"+
-        "\u0000\u3D43\u3D44\u0000\u0000\u0000\u0000\u0000"+
-        "\u3D45\u3D46\u3D47\u0000\u3D48\u3D49\u3D4A\u3D4B"+
-        "\u0000\u0000\u3D4C\u3D4D\u0000\u0000\u3D4E\u0000"+
-        "\u0000\u0000\u3D4F\u0000\u3D50\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3D51"+
-        "\u0000\u0000\u3D52\u0000\u0000\u3D53\u0000\u0000"+
-        "\u0000\u0000\u0000\u3D54\u3D55\u0000\u0000\u3D56"+
-        "\u3D57\u0000\u3D58\u0000\u0000\u0000\u0000\u3D59"+
-        "\u0000\u0000\u0000\u0000\u3D5A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3D5B\u0000\u0000"+
-        "\u0000\u0000\u0000\u3D5C\u0000\u3D5D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3D5E\u0000\u0000\u0000\u0000\u0000\u0000\u3D5F"+
-        "\u3D60\u3D61\u0000\u0000\u3D62\u0000\u0000\u0000"+
-        "\u0000\u3D63\u0000\u0000\u3D64\u0000\u3D65\u3D66"+
-        "\u0000\u0000\u0000\u0000\u0000\u3D67\u0000\u0000"+
-        "\u0000\u3D68\u0000\u0000\u0000\u0000\u0000\u3D69"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3D6A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3D6B\u3D6C"+
-        "\u0000\u0000\u3D6D\u0000\u0000\u743F\u3D6E\u0000"+
-        "\u3D6F\u0000\u3D70\u0000\u0000\u0000\u3D71\u0000"+
-        "\u0000\u3D72\u0000\u3D73\u0000\u3D74\u0000\u0000"+
-        "\u3D75\u0000\u0000\u0000\u0000\u3D76\u3D77\u0000"+
-        "\u0000\u0000\u3D78\u0000\u3D79\u3D7A\u0000\u0000"+
-        "\u3D7B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3D7C\u3D7D\u0000\u0000\u0000\u0000\u0000\u3D7E"+
-        "\u0000\u0000\u0000\u3E21\u0000\u0000\u3E22\u0000"+
-        "\u0000\u0000\u3E23\u0000\u3E24\u0000\u0000\u0000"+
-        "\u3E25\u3E26\u3E27\u3E28\u0000\u0000\u3E29\u3E2A"+
-        "\u0000\u0000\u0000\u0000\u3E2B\u3E2C\u0000\u0000"+
-        "\u0000\u3E2D\u0000\u3E2E\u0000\u3E2F\u3E30\u0000"+
-        "\u0000\u0000\u3E31\u0000\u0000\u3E32\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3E33\u0000\u0000\u3E34\u0000\u0000"+
-        "\u3E35\u0000\u0000\u0000\u3E36\u3E37\u0000\u0000"+
-        "\u0000\u0000\u3E38\u0000\u0000\u0000\u0000\u3E39"+
-        "\u0000\u0000\u3E3A\u0000\u3E3B\u0000\u0000\u0000"+
-        "\u3E3C\u3E3D\u3E3E\u3E3F\u3E40\u0000\u3E41\u3E42"+
-        "\u0000\u3E43\u0000\u0000\u3E44\u0000\u3E45\u0000"+
-        "\u7440\u0000\u3E46\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3E47\u3E48\u0000\u0000\u0000\u0000"+
-        "\u3E49\u3E4A\u0000\u0000\u0000\u3E4B\u3E4C\u3E4D"+
-        "\u0000\u3E4E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3E4F\u0000\u0000\u0000\u3E50\u3E51\u0000"+
-        "\u0000\u3E52\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3E53\u0000"+
-        "\u3E54\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3E55\u0000\u0000\u0000"+
-        "\u0000\u0000\u3E56\u0000\u0000\u0000\u0000\u0000"+
-        "\u3E57\u0000\u0000\u3E58\u3E59\u0000\u0000\u3E5A"+
-        "\u3E5B\u3E5C\u0000\u3E5D\u3E5E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3E5F\u0000\u3E60\u0000\u0000"+
-        "\u0000\u0000\u3E61\u3E62\u0000\u0000\u0000\u3E63"+
-        "\u3E64\u0000\u0000\u0000\u3E65\u3E66\u0000\u3E67"+
-        "\u3E68\u0000\u0000\u0000\u0000\u3E69\u0000\u0000"+
-        "\u3E6A\u0000\u3E6B\u0000\u0000\u3E6C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u3E6D\u3E6E\u0000\u0000\u3E6F\u0000\u0000\u0000"+
-        "\u3E70\u3E71\u3E72\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3E73\u3E74"+
-        "\u0000\u0000\u0000\u0000\u0000\u3E75\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3E76\u3E77\u3E78\u3E79"+
-        "\u0000\u3E7A\u3E7B\u0000\u0000\u3E7E\u0000\u3E7C"+
-        "\u0000\u3E7D\u0000\u0000\u3F21\u3F22\u0000\u3F23"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3F24\u0000\u3F25\u3F26\u0000\u0000\u3F27"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3F28\u0000\u3F29\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3F2A\u0000\u0000\u0000"+
-        "\u3F2B\u0000\u3F2C\u3F2D\u0000\u0000\u0000\u3F2E"+
-        "\u0000\u3F2F\u0000\u3F30\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3F31\u0000\u0000\u0000\u3F32\u0000\u0000"+
-        "\u0000\u0000\u3F33\u3F34\u3F35\u0000\u3F36\u0000"+
-        "\u0000\u0000\u0000\u0000\u3F37\u0000\u0000\u0000"+
-        "\u3F38\u3F39\u3F3A\u0000\u3F3B\u0000\u3F3C\u0000"+
-        "\u0000\u0000\u3F3D\u0000\u3F3E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3F3F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3F40\u0000\u3F41"+
-        "\u0000\u0000\u0000\u3F42\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3F43\u0000\u0000\u3F44\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3F45\u3F46\u3F47"+
-        "\u3F48\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3F49\u0000"+
-        "\u3F4A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u3F4B\u0000\u0000\u3F4C\u3F4D"+
-        "\u0000\u0000\u3F4E\u0000\u0000\u0000\u3F4F\u3F50"+
-        "\u0000\u0000\u0000\u0000\u3F51\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u3F52\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3F53\u3F54\u0000"+
-        "\u0000\u0000\u3F55\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3F56\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u3F57\u0000\u3F58\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u3F59\u3F5A\u0000\u0000"+
-        "\u0000\u0000\u0000\u3F5B\u3F5C\u0000\u0000\u0000"+
-        "\u0000\u0000\u3F5D\u3F5E\u0000\u3F5F\u0000\u0000"+
-        "\u3F60\u0000\u0000\u3F61\u0000\u0000\u3F62\u0000"+
-        "\u3F63\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u3F64\u3F65\u0000\u0000\u3F66\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3F67\u3F68\u0000"+
-        "\u0000\u3F69\u0000\u0000\u3F6A\u0000\u0000\u0000"+
-        "\u0000\u3F6B\u3F6C\u3F6D\u3F6E\u0000\u3F6F\u0000"+
-        "\u0000\u0000\u3F70\u3F71\u0000\u0000\u3F72\u0000"+
-        "\u0000\u0000\u3F73\u3F74\u3F75\u0000\u0000\u0000"+
-        "\u3F76\u0000\u0000\u3F77\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u3F78\u3F79\u0000"+
-        "\u0000\u0000\u0000\u0000\u3F7A\u3F7B\u0000\u0000"+
-        "\u0000\u3F7C\u0000\u0000\u3F7D\u3F7E\u0000\u0000"+
-        "\u4021\u0000\u0000\u0000\u4022\u4023\u0000\u4024"+
-        "\u0000\u0000\u4025\u0000\u4026\u0000\u0000\u4027"+
-        "\u0000\u0000\u4028\u0000\u0000\u0000\u0000\u0000"+
-        "\u4029\u0000\u0000\u0000\u402A\u402B\u0000\u0000"+
-        "\u0000\u402C\u402D\u0000\u0000\u0000\u402E\u0000"+
-        "\u0000\u0000\u0000\u0000\u402F\u0000\u4030\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4031\u4032\u4033"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4034\u0000\u0000"+
-        "\u0000\u4035\u0000\u0000\u0000\u4036\u0000\u0000"+
-        "\u4037\u0000\u0000\u0000\u0000\u0000\u4038\u0000"+
-        "\u0000\u4039\u0000\u403A\u403B\u403C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u403D\u0000\u0000\u0000"+
-        "\u403E\u0000\u0000\u0000\u0000\u403F\u0000\u0000"+
-        "\u0000\u0000\u4040\u0000\u4041\u0000\u0000\u0000"+
-        "\u0000\u0000\u4042\u4043\u0000\u4044\u0000\u0000"+
-        "\u4045\u4046\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4047\u4048\u0000\u0000\u0000\u0000\u0000"+
-        "\u4049\u0000\u404A\u0000\u404B\u0000\u0000\u0000"+
-        "\u404C\u0000\u0000\u0000\u0000\u0000\u404D\u0000"+
-        "\u404E\u0000\u404F\u0000\u4050\u4051\u0000\u0000"+
-        "\u0000\u4052\u4053\u0000\u0000\u0000\u0000\u4054"+
-        "\u4055\u0000\u0000\u0000\u0000\u4056\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4057\u0000\u4058"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4059\u0000\u0000\u0000\u405A"+
-        "\u0000\u405B\u405C\u405D\u405E\u0000\u0000\u0000"+
-        "\u0000\u0000\u405F\u4060\u4061\u4062\u0000\u4063"+
-        "\u4064\u4065\u0000\u4066\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4067\u0000\u0000"+
-        "\u0000\u0000\u0000\u4068\u4069\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u406A\u0000\u406B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u406C\u0000\u406D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u406E"+
-        "\u406F\u4070\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4071\u4072\u0000\u4073\u0000\u4074\u0000\u4075"+
-        "\u0000\u4076\u0000\u4077\u0000\u0000\u4078\u0000"+
-        "\u4079\u0000\u0000\u0000\u407A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u407B\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u407C\u407D\u407E"+
-        "\u0000\u0000\u0000\u0000\u4121\u0000\u0000\u0000"+
-        "\u0000\u4122\u4123\u4124\u4125\u0000\u4126\u0000"+
-        "\u4127\u4128\u0000\u0000\u0000\u4129\u0000\u412A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u412B\u412C\u0000\u0000"+
-        "\u0000\u412D\u412E\u0000\u0000\u412F\u0000\u0000"+
-        "\u4130\u0000\u0000\u0000\u0000\u4131\u0000\u4132"+
-        "\u0000\u0000\u0000\u4133\u0000\u0000\u0000\u4134"+
-        "\u0000\u4135\u0000\u0000\u4136\u0000\u0000\u0000"+
-        "\u4137\u4138\u4139\u0000\u0000\u0000\u0000\u413A"+
-        "\u0000\u0000\u0000\u413B\u413C\u0000\u413D\u0000"+
-        "\u0000\u413E\u0000\u413F\u0000\u0000\u4140\u4141"+
-        "\u0000\u0000\u4142\u0000\u0000\u0000\u4143\u0000"+
-        "\u0000\u4144\u0000\u0000\u0000\u0000\u4145\u0000"+
-        "\u0000\u4146\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4147\u0000\u4148\u4149\u0000\u0000"+
-        "\u0000\u0000\u0000\u414A\u0000\u0000\u0000\u414B"+
-        "\u0000\u414C\u0000\u0000\u0000\u0000\u7441\u0000"+
-        "\u414D\u0000\u414E\u0000\u414F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4150"+
-        "\u4151\u0000\u0000\u0000\u0000\u0000\u0000\u4152"+
-        "\u0000\u0000\u0000\u4153\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4154\u0000\u0000\u4155\u0000\u0000"+
-        "\u0000\u4156\u0000\u0000\u0000\u4157\u0000\u0000"+
-        "\u0000\u0000\u4158\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4159\u0000\u0000\u415A\u0000\u0000"+
-        "\u415B\u0000\u0000\u0000\u0000\u415C\u0000\u0000"+
-        "\u415D\u0000\u0000\u415E\u0000\u0000\u415F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4160\u0000"+
-        "\u0000\u0000\u4161\u4162\u4163\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4164"+
-        "\u0000\u0000\u4165\u0000\u0000\u0000\u0000\u0000"+
-        "\u4166\u4167\u0000\u0000\u0000\u0000\u4168\u0000"+
-        "\u4169\u0000\u0000\u0000\u416A\u0000\u416B\u0000"+
-        "\u416C\u0000\u0000\u0000\u0000\u0000\u0000\u416D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u416E\u0000\u416F\u0000\u4170\u4171\u0000\u0000"+
-        "\u0000\u4172\u0000\u0000\u0000\u0000\u4173\u4174"+
-        "\u4175\u0000\u0000\u0000\u4176\u0000\u0000\u0000"+
-        "\u4177\u4178\u0000\u0000\u0000\u4179\u0000\u0000"+
-        "\u0000\u417A\u417B\u0000\u0000\u417C\u417D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u417E\u4221\u0000"+
-        "\u0000\u4222\u4223\u4224\u4225\u0000\u4226\u0000"+
-        "\u0000\u4227\u4228\u4229\u422A\u0000\u422B\u0000"+
-        "\u422C\u422D\u0000\u422E\u0000\u0000\u0000\u4230"+
-        "\u0000\u422F\u0000\u7442\u0000\u0000\u0000\u0000"+
-        "\u4231\u0000\u0000\u0000\u0000\u4232\u4233\u0000"+
-        "\u0000\u0000\u4234\u0000\u4235\u0000\u4237\u0000"+
-        "\u0000\u4236\u0000\u0000\u0000\u0000\u0000\u4238"+
-        "\u4239\u423A\u0000\u423B\u423C\u0000\u0000\u0000"+
-        "\u423D\u423E\u0000\u0000\u0000\u7443\u0000\u0000"+
-        "\u0000\u0000\u4240\u4241\u4242\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4244\u0000\u4245\u0000\u4247"+
-        "\u4248\u4249\u0000\u424A\u424C\u0000\u4243\u4246"+
-        "\u424B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u424D\u424E\u424F\u0000\u0000"+
-        "\u4250\u0000\u4251\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4252\u4253\u4254\u4255\u0000\u0000\u4256"+
-        "\u4257\u0000\u0000\u0000\u4258\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4259\u0000\u0000"+
-        "\u0000\u425A\u425B\u0000\u0000\u425C\u0000\u0000"+
-        "\u0000\u0000\u0000\u425D\u0000\u0000\u0000\u425E"+
-        "\u425F\u0000\u4260\u4261\u0000\u0000\u0000\u0000"+
-        "\u4262\u0000\u0000\u0000\u4263\u0000\u4264\u4265"+
-        "\u0000\u0000\u0000\u0000\u4266\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4267\u0000\u0000\u0000\u4268"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4269\u0000\u0000\u426A\u426B\u0000\u426C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u426D\u423F\u0000\u0000\u0000\u0000";
-
-    private final static String innerIndex2=
-        "\u0000\u0000\u0000\u0000\u0000\u426E\u0000\u426F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4270\u0000"+
-        "\u0000\u0000\u0000\u4271\u0000\u0000\u0000\u0000"+
-        "\u0000\u4272\u0000\u0000\u4273\u0000\u0000\u0000"+
-        "\u4274\u0000\u4275\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4276\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4277\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4278\u0000\u4279"+
-        "\u427A\u0000\u0000\u0000\u427B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u427C\u427D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u427E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4321\u0000"+
-        "\u0000\u0000\u0000\u0000\u4322\u0000\u4323\u0000"+
-        "\u0000\u0000\u0000\u0000\u4324\u0000\u4325\u0000"+
-        "\u0000\u0000\u0000\u4326\u0000\u0000\u0000\u0000"+
-        "\u0000\u4327\u0000\u0000\u4328\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4329\u432A"+
-        "\u0000\u432B\u0000\u432C\u0000\u0000\u432D\u0000"+
-        "\u432E\u432F\u0000\u4330\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4331\u4332\u4333\u0000\u0000\u4334\u0000\u0000"+
-        "\u0000\u0000\u0000\u4335\u4336\u4337\u0000\u0000"+
-        "\u4339\u0000\u433A\u433B\u0000\u433C\u0000\u0000"+
-        "\u433D\u433E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u433F\u0000\u0000\u0000\u0000\u4340"+
-        "\u0000\u4341\u0000\u0000\u4342\u0000\u0000\u0000"+
-        "\u0000\u4343\u0000\u0000\u0000\u0000\u4344\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4345\u0000\u4346\u0000\u0000\u0000\u4347\u4348"+
-        "\u0000\u4338\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u7446\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u434A\u0000\u0000\u0000"+
-        "\u0000\u434B\u0000\u0000\u0000\u434C\u0000\u434D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u434F"+
-        "\u434E\u0000\u0000\u0000\u4350\u4351\u0000\u4352"+
-        "\u4353\u4354\u0000\u4355\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4356\u0000\u0000\u0000\u4357"+
-        "\u0000\u0000\u0000\u0000\u4358\u4359\u0000\u0000"+
-        "\u0000\u0000\u435A\u0000\u435B\u0000\u0000\u0000"+
-        "\u0000\u0000\u4349\u0000\u0000\u435C\u0000\u435D"+
-        "\u435E\u0000\u0000\u435F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4360\u0000\u0000\u4361\u4362"+
-        "\u4363\u4364\u4365\u0000\u0000\u4366\u0000\u0000"+
-        "\u0000\u4367\u4368\u4369\u436A\u0000\u0000\u0000"+
-        "\u0000\u0000\u436B\u0000\u436C\u0000\u436D\u0000"+
-        "\u436E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u436F\u0000"+
-        "\u4370\u0000\u4371\u0000\u4372\u0000\u0000\u0000"+
-        "\u0000\u4373\u0000\u4374\u0000\u4375\u0000\u0000"+
-        "\u0000\u4376\u4377\u0000\u0000\u0000\u4378\u0000"+
-        "\u0000\u0000\u4379\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u437A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u437B\u0000\u0000"+
-        "\u437C\u0000\u0000\u0000\u437D\u0000\u0000\u437E"+
-        "\u4421\u4422\u0000\u4423\u0000\u0000\u4424\u0000"+
-        "\u0000\u4425\u0000\u0000\u4426\u4427\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4428\u0000\u0000"+
-        "\u4429\u0000\u442A\u442B\u442C\u442D\u0000\u0000"+
-        "\u442E\u442F\u0000\u0000\u0000\u4430\u4431\u0000"+
-        "\u0000\u0000\u0000\u4432\u4433\u4434\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4435\u0000"+
-        "\u0000\u4436\u4437\u0000\u0000\u0000\u0000\u0000"+
-        "\u4438\u4439\u0000\u443A\u0000\u0000\u443B\u443C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u443D\u0000\u443E\u0000\u443F\u0000\u0000"+
-        "\u4440\u0000\u0000\u4441\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4442\u0000\u0000\u4443\u0000\u0000"+
-        "\u0000\u4444\u0000\u0000\u0000\u0000\u4445\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4446"+
-        "\u0000\u0000\u0000\u4447\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4448\u4449\u444A\u444B\u0000"+
-        "\u444C\u444D\u0000\u0000\u444E\u0000\u0000\u0000"+
-        "\u444F\u4450\u4451\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4452\u4453\u0000\u0000\u0000\u4454"+
-        "\u4455\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4456\u0000\u0000"+
-        "\u0000\u0000\u4457\u0000\u0000\u0000\u4458\u0000"+
-        "\u4459\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u445A\u0000\u0000\u0000\u445B\u445C\u0000"+
-        "\u445D\u0000\u0000\u445E\u0000\u445F\u0000\u4460"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4461"+
-        "\u4462\u0000\u4463\u0000\u4464\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4465\u0000\u0000"+
-        "\u4466\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4467\u0000\u0000\u0000\u0000\u4468\u4469"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u446A\u0000\u0000\u446B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u446C\u446D"+
-        "\u0000\u446E\u0000\u446F\u0000\u4470\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4471\u0000"+
-        "\u4472\u4473\u0000\u4474\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4475"+
-        "\u0000\u4476\u0000\u0000\u0000\u4477\u0000\u0000"+
-        "\u0000\u0000\u4478\u0000\u0000\u4479\u0000\u0000"+
-        "\u447A\u0000\u0000\u0000\u447B\u0000\u0000\u0000"+
-        "\u447C\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u447D\u0000\u447E\u0000\u4521\u0000\u0000\u4522"+
-        "\u0000\u0000\u0000\u4523\u0000\u0000\u4524\u4525"+
-        "\u0000\u0000\u0000\u0000\u0000\u4526\u4527\u0000"+
-        "\u0000\u4528\u4529\u0000\u0000\u0000\u452A\u0000"+
-        "\u452B\u452C\u452D\u0000\u0000\u452E\u452F\u0000"+
-        "\u0000\u0000\u0000\u4530\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4531\u0000\u0000\u4532"+
-        "\u0000\u0000\u4533\u7449\u0000\u0000\u0000\u0000"+
-        "\u0000\u4534\u0000\u4535\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4536\u0000"+
-        "\u0000\u4537\u0000\u4538\u0000\u0000\u4539\u453A"+
-        "\u0000\u453B\u0000\u453C\u0000\u0000\u0000\u0000"+
-        "\u0000\u453D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u453E\u0000\u453F\u4540\u4541"+
-        "\u0000\u0000\u0000\u0000\u0000\u4542\u0000\u0000"+
-        "\u0000\u0000\u0000\u4543\u0000\u0000\u0000\u4544"+
-        "\u4545\u4546\u0000\u0000\u4547\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4548\u4549\u454A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u454B\u0000"+
-        "\u454D\u454C\u0000\u0000\u454E\u0000\u0000\u0000"+
-        "\u454F\u0000\u0000\u0000\u4550\u4551\u4552\u0000"+
-        "\u0000\u0000\u0000\u0000\u4553\u4554\u0000\u0000"+
-        "\u0000\u0000\u744A\u0000\u4555\u0000\u0000\u4556"+
-        "\u0000\u0000\u0000\u0000\u4557\u0000\u0000\u0000"+
-        "\u4558\u4559\u455A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u455B\u455C\u0000\u0000"+
-        "\u0000\u0000\u455D\u455E\u0000\u0000\u455F\u4560"+
-        "\u0000\u4561\u0000\u0000\u0000\u0000\u0000\u4562"+
-        "\u4563\u4564\u0000\u0000\u0000\u0000\u0000\u4565"+
-        "\u0000\u0000\u0000\u4566\u0000\u0000\u4567\u0000"+
-        "\u0000\u0000\u0000\u0000\u4568\u0000\u0000\u0000"+
-        "\u4569\u0000\u0000\u456A\u456B\u0000\u0000\u456C"+
-        "\u0000\u0000\u0000\u0000\u0000\u456D\u456E\u0000"+
-        "\u0000\u0000\u0000\u456F\u0000\u0000\u0000\u4570"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4571\u0000"+
-        "\u0000\u0000\u4572\u0000\u0000\u4573\u0000\u0000"+
-        "\u0000\u0000\u4574\u0000\u0000\u0000\u4575\u0000"+
-        "\u4576\u0000\u0000\u0000\u0000\u4577\u0000\u0000"+
-        "\u4578\u0000\u0000\u0000\u0000\u0000\u0000\u4579"+
-        "\u0000\u0000\u0000\u457A\u0000\u0000\u457B\u0000"+
-        "\u457C\u0000\u0000\u0000\u0000\u457D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u457E\u4621\u0000"+
-        "\u0000\u0000\u4622\u0000\u0000\u4623\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4624"+
-        "\u0000\u0000\u0000\u4625\u0000\u0000\u0000\u4626"+
-        "\u4627\u0000\u4628\u4629\u0000\u0000\u0000\u0000"+
-        "\u462A\u462B\u0000\u0000\u462C\u462D\u462E\u0000"+
-        "\u462F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4630\u4631\u0000\u0000\u0000\u4632\u4633\u0000"+
-        "\u0000\u0000\u0000\u4634\u4635\u0000\u0000\u0000"+
-        "\u0000\u4636\u0000\u0000\u4637\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4638\u0000"+
-        "\u0000\u0000\u4639\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u463A\u0000\u463B\u0000\u0000\u463C\u463D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u463E\u0000"+
-        "\u0000\u463F\u0000\u0000\u0000\u0000\u0000\u4640"+
-        "\u0000\u4641\u0000\u0000\u0000\u0000\u0000\u4642"+
-        "\u0000\u0000\u4643\u0000\u4644\u4645\u0000\u0000"+
-        "\u0000\u4646\u0000\u0000\u0000\u4647\u4648\u0000"+
-        "\u4649\u0000\u464A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u464B\u0000\u0000\u0000\u0000\u0000\u464C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u464D\u464E"+
-        "\u464F\u0000\u0000\u0000\u4650\u0000\u4651\u0000"+
-        "\u0000\u0000\u0000\u4652\u0000\u4653\u4654\u0000"+
-        "\u0000\u0000\u4655\u4656\u0000\u0000\u0000\u4657"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4658\u4659\u0000\u465A\u0000\u465B"+
-        "\u0000\u0000\u465C\u0000\u465D\u0000\u0000\u0000"+
-        "\u0000\u465E\u0000\u465F\u4660\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4736"+
-        "\u0000\u0000\u0000\u4661\u0000\u4662\u0000\u4663"+
-        "\u0000\u0000\u0000\u0000\u4664\u0000\u4665\u0000"+
-        "\u4666\u4667\u0000\u4668\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4669\u466A\u466B"+
-        "\u0000\u466C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u466D\u466E\u0000\u466F"+
-        "\u4670\u0000\u0000\u0000\u4671\u0000\u0000\u4672"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4673\u0000\u4674\u0000\u4675\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4676\u0000\u0000\u0000\u4677\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4678\u0000\u4679"+
-        "\u467A\u467B\u467C\u0000\u467D\u0000\u467E\u0000"+
-        "\u0000\u0000\u4721\u0000\u4722\u0000\u0000\u0000"+
-        "\u4723\u0000\u0000\u0000\u0000\u0000\u0000\u4724"+
-        "\u0000\u4725\u0000\u4726\u4727\u0000\u4728\u0000"+
-        "\u0000\u0000\u4729\u0000\u472A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u472B\u0000\u0000\u472C"+
-        "\u0000\u0000\u472D\u0000\u0000\u0000\u472E\u472F"+
-        "\u0000\u4730\u0000\u4731\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4732\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4733\u4734"+
-        "\u4735\u0000\u0000\u0000\u0000\u0000\u4737\u4738"+
-        "\u0000\u4739\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u473A\u0000\u0000\u473B\u0000\u0000\u473C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u473D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u473E\u473F"+
-        "\u0000\u4740\u0000\u0000\u0000\u4741\u0000\u4742"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4743"+
-        "\u4744\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4745\u0000\u0000\u0000"+
-        "\u0000\u0000\u4746\u0000\u0000\u0000\u0000\u4747"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4748\u4749\u0000\u474A\u0000\u474B\u474C"+
-        "\u474D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u474E\u0000\u474F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4750\u0000\u0000\u4751"+
-        "\u0000\u4752\u0000\u0000\u0000\u4753\u0000\u4754"+
-        "\u0000\u0000\u0000\u0000\u4755\u0000\u0000\u0000"+
-        "\u4756\u0000\u4757\u0000\u0000\u0000\u4758\u4759"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u475A\u0000"+
-        "\u0000\u0000\u0000\u475B\u0000\u475C\u0000\u475D"+
-        "\u475E\u0000\u475F\u0000\u0000\u4760\u0000\u0000"+
-        "\u0000\u4761\u0000\u0000\u0000\u0000\u0000\u4762"+
-        "\u4763\u0000\u744C\u0000\u4764\u0000\u4765\u0000"+
-        "\u744B\u0000\u0000\u0000\u4766\u0000\u0000\u0000"+
-        "\u4767\u0000\u0000\u0000\u4768\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4769\u0000"+
-        "\u0000\u0000\u476A\u0000\u0000\u0000\u0000\u476B"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u476C\u0000\u0000\u0000\u476D\u0000"+
-        "\u0000\u476E\u0000\u476F\u4770\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4771\u4772\u0000\u0000"+
-        "\u4773\u4774\u0000\u4775\u0000\u0000\u0000\u4776"+
-        "\u0000\u4777\u4778\u4779\u477A\u0000\u0000\u477B"+
-        "\u0000\u0000\u0000\u0000\u477C\u477D\u477E\u0000"+
-        "\u0000\u0000\u4821\u4822\u0000\u0000\u0000\u0000"+
-        "\u4823\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4824\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4825\u0000\u4826\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4827\u0000\u0000"+
-        "\u0000\u0000\u0000\u4828\u0000\u0000\u0000\u0000"+
-        "\u0000\u4829\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u482A\u0000\u0000\u0000\u0000\u0000\u0000\u482B"+
-        "\u0000\u0000\u0000\u0000\u0000\u482C\u482D\u0000"+
-        "\u0000\u482E\u0000\u482F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4830\u0000\u0000\u0000\u4831"+
-        "\u4832\u4833\u0000\u4834\u0000\u0000\u0000\u4835"+
-        "\u4836\u0000\u4837\u0000\u0000\u4838\u4839\u483A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u483B\u0000\u483C\u483D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u483E\u0000\u483F\u0000\u4840\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4841\u0000\u0000\u0000"+
-        "\u4842\u0000\u4843\u0000\u4844\u4845\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4846\u0000"+
-        "\u4847\u0000\u4848\u4849\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u484A\u0000"+
-        "\u0000\u484B\u484C\u0000\u0000\u4853\u0000\u484D"+
-        "\u484E\u0000\u0000\u484F\u0000\u0000\u4850\u0000"+
-        "\u0000\u0000\u0000\u4851\u4852\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4854"+
-        "\u0000\u4855\u4856\u4857\u0000\u0000\u0000\u4858"+
-        "\u0000\u4859\u485A\u0000\u0000\u485B\u485C\u0000"+
-        "\u0000\u485D\u485E\u0000\u0000\u0000\u0000\u0000"+
-        "\u485F\u0000\u0000\u0000\u4860\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4861\u4862\u0000"+
-        "\u0000\u0000\u0000\u4863\u0000\u0000\u0000\u4864"+
-        "\u4865\u0000\u0000\u4866\u4867\u4868\u0000\u0000"+
-        "\u4869\u0000\u486A\u486B\u486C\u0000\u486D\u0000"+
-        "\u0000\u0000\u486E\u0000\u0000\u0000\u0000\u486F"+
-        "\u4870\u0000\u0000\u0000\u0000\u4871\u4872\u4873"+
-        "\u4874\u0000\u0000\u0000\u0000\u0000\u4875\u4876"+
-        "\u4877\u0000\u0000\u0000\u0000\u4878\u4879\u0000"+
-        "\u0000\u0000\u0000\u0000\u487A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u487B\u0000\u487C"+
-        "\u487D\u0000\u487E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4921\u0000\u0000\u0000\u4922\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4923\u4924\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4925\u0000\u0000\u0000\u0000\u4926\u0000\u0000"+
-        "\u0000\u4927\u0000\u0000\u4928\u4929\u0000\u0000"+
-        "\u492A\u0000\u0000\u0000\u0000\u492B\u492C\u492D"+
-        "\u0000\u0000\u0000\u0000\u0000\u492E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u492F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4930\u0000\u0000\u4931\u0000\u0000\u0000\u0000"+
-        "\u744D\u0000\u0000\u0000\u0000\u0000\u0000\u4932"+
-        "\u0000\u0000\u0000\u0000\u4933\u0000\u0000\u4934"+
-        "\u0000\u4935\u0000\u0000\u4936\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4937\u4938\u0000\u0000\u0000"+
-        "\u4939\u493A\u493B\u493C\u0000\u0000\u4941\u0000"+
-        "\u0000\u0000\u0000\u0000\u493D\u493E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u493F\u4940\u0000"+
-        "\u0000\u0000\u0000\u0000\u4942\u4943\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4944\u0000\u4945\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4946\u4947\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4948\u0000"+
-        "\u0000\u4949\u0000\u0000\u0000\u494A\u494B\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u494C\u494D\u494E\u494F"+
-        "\u4950\u0000\u0000\u4951\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4952\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4953\u0000\u0000\u0000\u0000"+
-        "\u4954\u4955\u0000\u0000\u4956\u0000\u0000\u4957"+
-        "\u0000\u0000\u0000\u742E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4958\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4959\u0000\u495A\u495B\u495C\u495D\u0000"+
-        "\u495E\u0000\u0000\u0000\u495F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4960\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4961\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4962\u4963\u4964\u4965\u4966"+
-        "\u0000\u0000\u0000\u4967\u4968\u0000\u0000\u4969"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u496A\u0000"+
-        "\u496B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u496C\u0000\u496D\u0000\u496E"+
-        "\u496F\u4970\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4971\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4972\u0000\u0000\u0000\u4973\u4974\u4975"+
-        "\u0000\u0000\u4976\u4977\u0000\u0000\u0000\u0000"+
-        "\u4978\u0000\u4979\u0000\u0000\u0000\u0000\u497A"+
-        "\u0000\u0000\u497B\u0000\u497C\u0000\u497D\u0000"+
-        "\u497E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4A21\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A22\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4A23\u0000\u0000\u0000\u0000\u4A24\u0000\u4A25"+
-        "\u0000\u0000\u0000\u0000\u4A26\u0000\u0000\u0000"+
-        "\u0000\u0000\u4A27\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4A28\u4A29\u0000\u0000\u0000\u0000"+
-        "\u4A2A\u0000\u4A2B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4A2C"+
-        "\u4A2D\u0000\u4A2E\u4A2F\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4A30\u0000\u0000\u0000\u0000\u4A31"+
-        "\u4A32\u4A33\u0000\u0000\u4A34\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A35\u4A36\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A37\u0000\u0000\u4A38\u0000"+
-        "\u0000\u4A39\u4A3A\u0000\u4A3B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4A3C\u0000\u0000\u0000\u0000\u0000\u4A3D\u0000"+
-        "\u4A3E\u0000\u0000\u0000\u0000\u0000\u0000\u4A3F"+
-        "\u4A40\u4A41\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A42\u0000\u0000\u0000\u4A43"+
-        "\u0000\u0000\u4A44\u0000\u0000\u4A45\u0000\u4A46"+
-        "\u0000\u0000\u0000\u0000\u4A47\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A48\u0000\u0000\u0000\u4A49"+
-        "\u0000\u0000\u0000\u0000\u4A4A\u0000\u0000\u0000"+
-        "\u4A4B\u4A4C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4A4D\u4A4E\u4A4F\u0000\u4A50\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4A51\u4A52"+
-        "\u4A53\u0000\u0000\u4A54\u0000\u4A55\u4A56\u0000"+
-        "\u0000\u0000\u4A57\u0000\u4A58\u0000\u4A59\u0000"+
-        "\u4A5A\u0000\u0000\u4A5B\u0000\u0000\u0000\u0000"+
-        "\u4A5C\u0000\u0000\u4A5D\u0000\u0000\u4A5E\u4A5F"+
-        "\u0000\u4A60\u0000\u0000\u0000\u0000\u0000\u4A61"+
-        "\u4A62\u0000\u0000\u4A63\u4A64\u0000\u0000\u4A65"+
-        "\u0000\u0000\u0000\u0000\u4A66\u0000\u0000\u0000"+
-        "\u0000\u4A67\u0000\u0000\u0000\u4A68\u4A69\u0000"+
-        "\u0000\u0000\u0000\u4A6A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A6B\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4A6C\u0000\u0000\u0000\u0000\u4A6D\u4A6E\u0000"+
-        "\u0000\u4A6F\u0000\u0000\u4A70\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4A71\u0000"+
-        "\u0000\u4A72\u0000\u0000\u0000\u0000\u0000\u4A73"+
-        "\u0000\u4A74\u0000\u0000\u4A75\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4A76\u4A77\u0000"+
-        "\u4A78\u0000\u0000\u0000\u0000\u0000\u0000\u4A79"+
-        "\u0000\u0000\u0000\u0000\u0000\u4A7A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4A7B\u4A7C\u0000\u0000\u0000"+
-        "\u0000\u0000\u4A7D\u4A7E\u0000\u0000\u4B21\u0000"+
-        "\u0000\u0000\u4B22\u0000\u4B23\u4B24\u0000\u4B25"+
-        "\u0000\u0000\u0000\u4B26\u0000\u4B27\u0000\u0000"+
-        "\u0000\u0000\u4B28\u4B29\u0000\u0000\u0000\u0000"+
-        "\u4B2A\u4B2B\u0000\u0000\u0000\u0000\u4B2C\u0000"+
-        "\u0000\u0000\u4B2D\u0000\u4B2E\u0000\u0000\u4B2F"+
-        "\u4B30\u0000\u0000\u0000\u4B31\u0000\u0000\u0000"+
-        "\u0000\u4B32\u4B33\u0000\u0000\u4B34\u0000\u0000"+
-        "\u0000\u0000\u4B35\u4B36\u0000\u4B37\u0000\u0000"+
-        "\u0000\u0000\u0000\u4B38\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4B39\u0000\u0000"+
-        "\u4B3A\u0000\u4B3B\u0000\u0000\u0000\u4B3C\u0000"+
-        "\u4B3D\u0000\u0000\u0000\u0000\u4B3E\u4B3F\u4B40"+
-        "\u4B41\u0000\u0000\u0000\u0000\u0000\u4B42\u4B43"+
-        "\u0000\u4B44\u0000\u4B45\u4B46\u0000\u4B47\u4B48"+
-        "\u0000\u4B49\u0000\u0000\u0000\u0000\u0000\u4B4A"+
-        "\u0000\u4B4B\u0000\u0000\u4B4C\u0000\u0000\u0000"+
-        "\u4B4D\u4B4E\u0000\u4B4F\u0000\u4B50\u4B51\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4B52\u0000"+
-        "\u4B53\u0000\u0000\u4B54\u0000\u4B55\u0000\u4B56"+
-        "\u4B57\u0000\u0000\u0000\u4B58\u0000\u4B59\u4B5A"+
-        "\u4B5B\u0000\u4B5C\u0000\u0000\u4B5D\u4B5E\u0000"+
-        "\u0000\u0000\u4B5F\u4B60\u0000\u4B61\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4B62\u0000\u4B63"+
-        "\u0000\u4B64\u0000\u0000\u4B65\u4B66\u0000\u4B67"+
-        "\u0000\u0000\u0000\u0000\u0000\u4B68\u4B69\u0000"+
-        "\u0000\u4B6A\u0000\u4B6B\u4B6C\u0000\u0000\u4B6D"+
-        "\u0000\u0000\u4B6E\u4B6F\u0000\u0000\u4B70\u0000"+
-        "\u0000\u4B71\u0000\u0000\u0000\u4B72\u0000\u0000"+
-        "\u0000\u4B73\u0000\u4B74\u0000\u0000\u4B75\u4B76"+
-        "\u0000\u4B77\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4B78\u4B79\u0000\u4B7A"+
-        "\u0000\u4B7B\u4B7C\u4B7D\u0000\u4B7E\u0000\u4C21"+
-        "\u4C22\u4C23\u0000\u0000\u4C24\u0000\u0000\u4C25"+
-        "\u0000\u0000\u4C26\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4C27\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C28\u4C29\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4C2A\u0000\u4C2B\u0000"+
-        "\u4C2C\u4C2D\u4C2E\u4C2F\u4C30\u4C31\u4C32\u4C33"+
-        "\u4C34\u4C35\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4C36\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4C37\u0000\u0000\u4C38\u4C39\u0000\u4C3A\u4C3B"+
-        "\u0000\u0000\u0000\u4C3C\u0000\u4C3D\u0000\u0000"+
-        "\u0000\u4C3E\u4C3F\u0000\u0000\u0000\u0000\u4C40"+
-        "\u0000\u0000\u0000\u0000\u0000\u4C41\u0000\u0000"+
-        "\u0000\u0000\u4C42\u0000\u0000\u0000\u4C43\u4C44"+
-        "\u4C45\u0000\u0000\u4C46\u0000\u4C47\u4C48\u0000"+
-        "\u0000\u4C49\u4C4A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4C4B\u4C4C\u0000\u0000\u0000\u4C4D\u4C4E\u4C4F"+
-        "\u0000\u4C50\u0000\u0000\u0000\u0000\u0000\u4C51"+
-        "\u4C52\u4C53\u4C54\u0000\u0000\u0000\u0000\u0000"+
-        "\u4C55\u4C56\u4C57\u0000\u4C58\u0000\u0000\u4C59"+
-        "\u4C5A\u4C5B\u0000\u4C5C\u0000\u0000\u4C5D\u0000"+
-        "\u4C5E\u4C5F\u4C60\u4C61\u0000\u0000\u4C62\u4C63"+
-        "\u0000\u4C64\u4C65\u0000\u0000\u4C66\u0000\u0000"+
-        "\u0000\u4C67\u0000\u4C68\u0000\u0000\u0000\u4C69"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4C6A\u4C6B\u0000\u0000\u4C6C\u0000\u0000\u0000"+
-        "\u4C6D\u0000\u0000\u4C6E\u0000\u0000\u0000\u0000"+
-        "\u4C6F\u0000\u4C70\u4C71\u0000\u0000\u4C72\u4C73"+
-        "\u0000\u0000\u0000\u0000\u4C74\u0000\u0000\u0000"+
-        "\u4C75\u0000\u4C76\u4C77\u0000\u0000\u0000\u4C78"+
-        "\u0000\u0000\u0000\u0000\u4C79\u0000\u0000\u0000"+
-        "\u0000\u0000\u4C7A\u4C7B\u4C7C\u0000\u0000\u4C7D"+
-        "\u0000\u7450\u0000\u0000\u0000\u0000\u4C7E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D21\u0000\u0000\u0000\u4D22\u4D23"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4D24\u4D25\u0000\u0000\u4D26\u0000\u0000\u4D27"+
-        "\u0000\u4D28\u4D29\u0000\u0000\u0000\u0000\u4D2A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4D2B\u0000"+
-        "\u0000\u4D2C\u0000\u0000\u0000\u4D2D\u4D2E\u4D2F"+
-        "\u4D30\u0000\u0000\u4D31\u0000\u0000\u0000\u4D32"+
-        "\u4D33\u0000\u0000\u0000\u0000\u0000\u4D34\u0000"+
-        "\u4D35\u0000\u4D36\u0000\u0000\u0000\u0000\u4D37"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4D38\u4D39"+
-        "\u0000\u4D3A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4D3B"+
-        "\u0000\u4D3C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4D3D\u4D3E\u4D3F\u4D40\u4D41\u4D42\u0000"+
-        "\u0000\u4D43\u0000\u0000\u0000\u4D44\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4D45\u0000\u4D46\u4D47\u0000\u4D48\u0000\u0000"+
-        "\u0000\u4D49\u0000\u0000\u4D4A\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D4B\u0000\u4D4C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4D4D\u0000\u0000\u0000"+
-        "\u0000\u0000\u4D4E\u0000\u0000\u0000\u0000\u4D4F"+
-        "\u4D50\u4D51\u0000\u0000\u4D52\u0000\u4D53\u0000"+
-        "\u0000\u0000\u0000\u0000\u4D54\u0000\u4D55\u4D56"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4D57"+
-        "\u0000\u0000\u0000\u0000\u4D58\u0000\u0000\u4D59"+
-        "\u4D5A\u4D5B\u0000\u0000\u4D5C\u0000\u0000\u4D5D"+
-        "\u0000\u0000\u0000\u0000\u4D5E\u0000\u4D5F\u4D60"+
-        "\u0000\u4D61\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4D62\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4D63\u0000\u4D64\u4D65\u4D66\u0000\u0000\u4D67"+
-        "\u4D68\u0000\u4D69\u0000\u4D6A\u0000\u0000\u4D6B"+
-        "\u0000\u0000\u4D6C\u4D6D\u0000\u4D6E\u4D6F\u0000"+
-        "\u0000\u4D70\u0000\u4D71\u4D72\u4D73\u4D74\u0000"+
-        "\u0000\u0000\u0000\u4D75\u0000\u4D76\u4D77\u0000"+
-        "\u0000\u4D78\u0000\u0000\u0000\u4D79\u0000\u0000"+
-        "\u0000\u0000\u4D7A\u4D7B\u0000\u4D7C\u0000\u0000"+
-        "\u4D7D\u4D7E\u4E21\u0000\u4E22\u0000\u0000\u0000"+
-        "\u4E24\u4E25\u0000\u4E26\u4E27\u4E28\u0000\u0000"+
-        "\u0000\u4E29\u4E23\u4E2A\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4E2B\u0000\u0000"+
-        "\u0000\u4E2C\u0000\u0000\u0000\u0000\u0000\u4E2D"+
-        "\u0000\u0000\u0000\u0000\u4E2E\u4E2F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4E30\u4E31\u4E32"+
-        "\u0000\u4E33\u0000\u0000\u4E34\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4E35\u7451\u0000\u0000\u4E36\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4E37\u4E38\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4E39\u0000\u0000"+
-        "\u0000\u0000\u0000\u4E3A\u4E3B\u4E3C\u7452\u4E3D"+
-        "\u4E3E\u0000\u4E3F\u4E40\u4E41\u4E42\u4E43\u4E44"+
-        "\u4E45\u0000\u4E46\u0000\u0000\u4E47\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4E48\u0000\u0000"+
-        "\u0000\u4E49\u0000\u0000\u0000\u4E4A\u0000\u0000"+
-        "\u0000\u4E4B\u0000\u4E4C\u4E4D\u0000\u4E4E\u0000"+
-        "\u0000\u0000\u0000\u0000\u4E4F\u0000\u0000\u0000"+
-        "\u0000\u4E50\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u4E51\u0000\u0000\u0000\u0000\u0000\u4E52\u0000"+
-        "\u4E53\u0000\u0000\u0000\u4E54\u0000\u0000\u0000"+
-        "\u4E55\u4E56\u0000\u0000\u0000\u0000\u4E57\u0000"+
-        "\u0000\u4E58\u0000\u0000\u4E59\u0000\u0000\u0000";
-
-    private final static String innerIndex3=
-        "\u4E5A\u0000\u0000\u0000\u0000\u0000\u4E5B\u0000"+
-        "\u0000\u0000\u4E5C\u0000\u0000\u0000\u4E5D\u0000"+
-        "\u0000\u0000\u4E5E\u0000\u4E5F\u4E60\u0000\u4E61"+
-        "\u0000\u4E62\u4E63\u0000\u4E64\u0000\u0000\u0000"+
-        "\u0000\u0000\u4E65\u0000\u0000\u0000\u0000\u0000"+
-        "\u4E66\u0000\u0000\u0000\u0000\u4E67\u4E68\u4E69"+
-        "\u0000\u0000\u0000\u0000\u4E6A\u4E6B\u4E6C\u0000"+
-        "\u0000\u4E6D\u0000\u0000\u0000\u4E6E\u4E6F\u0000"+
-        "\u0000\u0000\u4E70\u0000\u0000\u4E71\u4E72\u0000"+
-        "\u0000\u0000\u4E73\u0000\u0000\u4E74\u4E75\u4E76"+
-        "\u0000\u0000\u4E77\u0000\u0000\u0000\u4E78\u4E79"+
-        "\u0000\u0000\u0000\u0000\u4E7A\u0000\u4E7B\u4E7C"+
-        "\u4E7D\u0000\u4E7E\u0000\u4F21\u0000\u0000\u4F22"+
-        "\u0000\u0000\u4F23\u0000\u4F24\u0000\u0000\u0000"+
-        "\u4F25\u0000\u4F26\u4F27\u4F28\u0000\u0000\u0000"+
-        "\u0000\u0000\u4F29\u0000\u0000\u4F2A\u0000\u0000"+
-        "\u4F2B\u0000\u0000\u0000\u4F2C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4F2D\u4F2E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4F2F\u4F30\u4F31\u0000"+
-        "\u0000\u0000\u4F32\u0000\u0000\u0000\u0000\u4F33"+
-        "\u0000\u0000\u4F34\u0000\u0000\u0000\u0000\u4F35"+
-        "\u0000\u0000\u4F36\u0000\u0000\u0000\u4F37\u4F38"+
-        "\u0000\u4F39\u0000\u0000\u0000\u4F3A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u4F3B\u0000"+
-        "\u0000\u0000\u0000\u4F3C\u0000\u0000\u0000\u0000"+
-        "\u0000\u4F3D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u4F3E\u4F3F\u0000\u0000\u4F40\u0000\u0000"+
-        "\u0000\u4F41\u0000\u0000\u0000\u0000\u4F42\u4F43"+
-        "\u4F44\u0000\u0000\u0000\u4F45\u0000\u4F46\u0000"+
-        "\u0000\u0000\u4F47\u0000\u4F48\u0000\u0000\u0000"+
-        "\u4F49\u4F4A\u0000\u0000\u4F4B\u0000\u0000\u0000"+
-        "\u4F4C\u0000\u0000\u4F4D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4F4E\u4F4F\u0000"+
-        "\u0000\u4F50\u0000\u0000\u0000\u4F51\u4F52\u0000"+
-        "\u0000\u4F53\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4F54\u0000\u0000"+
-        "\u0000\u4F55\u4F56\u4F57\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u4F58\u4F59\u0000"+
-        "\u4F5A\u0000\u0000\u0000\u0000\u4F5B\u0000\u4F5C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u4F5D\u4F5E\u0000\u0000\u4F5F"+
-        "\u4F60\u0000\u0000\u0000\u4F61\u0000\u4F62\u0000"+
-        "\u0000\u0000\u4F63\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u4F64\u0000\u4F65\u0000"+
-        "\u4F66\u4F67\u0000\u4F68\u4F69\u0000\u0000\u0000"+
-        "\u4F6A\u0000\u4F6B\u0000\u0000\u0000\u4F6C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4F6D\u0000\u0000\u0000\u4F6E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u4F6F\u0000\u0000\u0000\u0000\u4F70"+
-        "\u0000\u0000\u0000\u0000\u4F71\u0000\u0000\u0000"+
-        "\u4F72\u0000\u0000\u0000\u0000\u4F74\u4F75\u4F76"+
-        "\u0000\u4F73\u0000\u0000\u4F77\u0000\u0000\u0000"+
-        "\u4F78\u0000\u0000\u0000\u4F79\u4F7A\u0000\u0000"+
-        "\u4F7B\u4F7C\u4F7D\u4F7E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5021\u0000\u5022\u0000\u5023"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5024"+
-        "\u5025\u5026\u0000\u0000\u5027\u0000\u5028\u0000"+
-        "\u0000\u0000\u5029\u502A\u0000\u502B\u502C\u0000"+
-        "\u0000\u0000\u0000\u502E\u0000\u0000\u0000\u502F"+
-        "\u5030\u5031\u0000\u0000\u502D\u0000\u5032\u0000"+
-        "\u0000\u0000\u5033\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5034\u5035\u0000\u0000\u5037\u5038"+
-        "\u0000\u0000\u5039\u503A\u0000\u0000\u0000\u503B"+
-        "\u5036\u0000\u0000\u0000\u0000\u0000\u503C\u0000"+
-        "\u0000\u0000\u0000\u0000\u503D\u0000\u0000\u0000"+
-        "\u503E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u503F\u0000\u5040\u0000\u5041\u5042"+
-        "\u5043\u0000\u0000\u0000\u0000\u5044\u0000\u5045"+
-        "\u0000\u5046\u0000\u0000\u0000\u5047\u0000\u0000"+
-        "\u7454\u5048\u0000\u0000\u5049\u504A\u0000\u0000"+
-        "\u0000\u0000\u0000\u504B\u0000\u504C\u0000\u504D"+
-        "\u0000\u0000\u0000\u0000\u504E\u504F\u5050\u0000"+
-        "\u0000\u0000\u5051\u5052\u0000\u0000\u0000\u5053"+
-        "\u0000\u5054\u0000\u0000\u5055\u0000\u0000\u0000"+
-        "\u5056\u0000\u0000\u5057\u5058\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5059"+
-        "\u0000\u505A\u0000\u505B\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u505C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u505D\u0000\u505E\u505F\u0000\u5060\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5061\u5062\u0000\u0000\u0000"+
-        "\u0000\u5063\u0000\u5064\u5065\u5066\u5067\u0000"+
-        "\u5068\u0000\u0000\u5069\u506A\u0000\u0000\u0000"+
-        "\u0000\u506B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u506C\u506D\u0000\u506E\u0000\u0000\u0000\u506F"+
-        "\u0000\u5070\u0000\u0000\u5071\u0000\u0000\u0000"+
-        "\u5072\u0000\u0000\u5073\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5074\u0000\u5075\u0000\u0000\u5076"+
-        "\u5077\u0000\u5078\u0000\u0000\u0000\u0000\u5079"+
-        "\u0000\u0000\u0000\u0000\u507A\u0000\u507B\u0000"+
-        "\u0000\u0000\u507C\u0000\u0000\u507D\u507E\u0000"+
-        "\u5121\u0000\u5122\u0000\u0000\u5123\u0000\u0000"+
-        "\u0000\u0000\u5124\u5125\u0000\u5126\u0000\u0000"+
-        "\u0000\u5127\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5128\u0000\u0000\u0000\u5129\u0000\u0000\u0000"+
-        "\u0000\u0000\u512A\u512B\u0000\u0000\u0000\u512C"+
-        "\u0000\u512D\u512E\u0000\u512F\u0000\u0000\u0000"+
-        "\u0000\u5130\u0000\u0000\u0000\u5131\u0000\u0000"+
-        "\u0000\u0000\u0000\u5132\u0000\u0000\u5133\u0000"+
-        "\u0000\u5134\u0000\u0000\u0000\u0000\u0000\u5135"+
-        "\u0000\u0000\u0000\u5136\u0000\u5137\u0000\u5138"+
-        "\u5139\u0000\u0000\u0000\u513A\u513B\u0000\u0000"+
-        "\u513C\u513D\u513E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u513F\u5140\u0000\u5141"+
-        "\u5142\u0000\u0000\u0000\u5143\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5144\u5145\u0000"+
-        "\u0000\u5146\u0000\u0000\u5147\u5148\u0000\u5149"+
-        "\u514A\u0000\u0000\u0000\u0000\u514B\u0000\u514C"+
-        "\u0000\u0000\u514D\u0000\u0000\u514E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u514F\u0000\u0000"+
-        "\u5150\u0000\u0000\u0000\u0000\u0000\u5151\u0000"+
-        "\u5152\u0000\u5153\u0000\u0000\u5154\u5155\u0000"+
-        "\u0000\u0000\u5156\u5157\u0000\u0000\u0000\u0000"+
-        "\u5158\u5159\u0000\u0000\u515A\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u515B\u0000"+
-        "\u515C\u0000\u0000\u515D\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u515E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u515F\u0000\u5160\u0000\u0000"+
-        "\u0000\u5161\u0000\u5162\u5163\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5164\u0000"+
-        "\u0000\u5165\u0000\u0000\u5166\u0000\u5167\u0000"+
-        "\u0000\u5168\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5169\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7459"+
-        "\u516A\u516B\u0000\u516C\u516D\u0000\u0000\u0000"+
-        "\u0000\u516E\u0000\u0000\u516F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5170\u0000\u5171\u5172\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5173"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5174\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5175"+
-        "\u0000\u0000\u0000\u5176\u0000\u0000\u0000\u5177"+
-        "\u0000\u5178\u5179\u517A\u0000\u517B\u517C\u517D"+
-        "\u517E\u5221\u0000\u0000\u5222\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5223\u0000\u5224"+
-        "\u5225\u5226\u0000\u0000\u0000\u0000\u0000\u5227"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5228\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5229\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u522A\u0000\u0000\u0000\u522B\u0000\u522C\u0000"+
-        "\u0000\u522D\u522E\u0000\u0000\u522F\u0000\u5230"+
-        "\u0000\u0000\u5231\u5232\u0000\u0000\u0000\u5233"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5234\u0000\u0000\u0000"+
-        "\u0000\u5235\u0000\u0000\u0000\u0000\u5236\u0000"+
-        "\u5237\u5238\u0000\u0000\u0000\u0000\u5239\u0000"+
-        "\u0000\u0000\u0000\u523A\u0000\u0000\u523B\u0000"+
-        "\u523C\u0000\u0000\u0000\u0000\u523D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u523E\u0000\u0000\u523F"+
-        "\u5240\u0000\u5241\u0000\u0000\u5242\u5243\u0000"+
-        "\u0000\u0000\u5244\u5245\u5246\u5247\u0000\u0000"+
-        "\u0000\u0000\u5248\u0000\u0000\u5249\u0000\u0000"+
-        "\u524A\u0000\u524B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u524C\u0000\u524D\u524E"+
-        "\u0000\u524F\u5250\u5251\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5252\u0000\u5253\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5254\u0000\u5255\u5256\u0000\u0000"+
-        "\u5257\u5258\u5259\u0000\u525A\u0000\u525B\u0000"+
-        "\u0000\u525C\u525D\u525E\u525F\u0000\u5260\u0000"+
-        "\u0000\u5261\u0000\u5262\u5263\u0000\u5264\u5265"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5266\u0000\u5267\u0000\u0000\u0000\u0000"+
-        "\u5268\u0000\u0000\u0000\u0000\u5269\u526A\u0000"+
-        "\u526B\u0000\u0000\u0000\u526C\u0000\u0000\u0000"+
-        "\u0000\u526D\u0000\u526E\u526F\u0000\u5270\u0000"+
-        "\u0000\u5271\u5272\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5273\u0000"+
-        "\u0000\u0000\u5274\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5276\u5277\u5278\u0000\u5275\u0000\u0000"+
-        "\u0000\u5279\u527A\u527B\u527C\u527D\u527E\u0000"+
-        "\u0000\u5321\u0000\u5322\u0000\u0000\u0000\u5323"+
-        "\u0000\u5324\u0000\u0000\u0000\u5325\u5326\u0000"+
-        "\u5327\u0000\u5328\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5329\u0000\u0000\u532A\u532B\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u532C\u532D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u532E"+
-        "\u0000\u0000\u0000\u0000\u532F\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5330\u0000"+
-        "\u5331\u0000\u0000\u0000\u0000\u0000\u5332\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5333\u0000\u0000\u0000\u0000\u0000\u5334\u5335"+
-        "\u0000\u0000\u5336\u5337\u5338\u0000\u0000\u5339"+
-        "\u0000\u0000\u0000\u0000\u533A\u0000\u0000\u533B"+
-        "\u533C\u533D\u0000\u0000\u0000\u533E\u0000\u533F"+
-        "\u0000\u0000\u0000\u5340\u5341\u5342\u0000\u5343"+
-        "\u0000\u5344\u5345\u0000\u0000\u5346\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5347\u0000"+
-        "\u0000\u5348\u0000\u5349\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u534A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u534B\u0000\u0000\u0000\u534C"+
-        "\u534D\u534E\u0000\u0000\u0000\u0000\u0000\u534F"+
-        "\u0000\u5350\u5351\u5352\u0000\u0000\u5353\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5354\u5355\u0000"+
-        "\u0000\u0000\u0000\u5356\u0000\u0000\u5357\u0000"+
-        "\u0000\u0000\u5358\u0000\u0000\u5359\u0000\u0000"+
-        "\u0000\u535A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u535B\u535C\u535D\u0000"+
-        "\u535E\u535F\u0000\u0000\u0000\u0000\u0000\u5360"+
-        "\u5361\u0000\u0000\u0000\u0000\u5362\u0000\u0000"+
-        "\u0000\u5363\u0000\u5364\u0000\u0000\u0000\u5365"+
-        "\u0000\u5366\u5367\u0000\u5368\u5369\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u536A\u0000\u536B"+
-        "\u0000\u0000\u536C\u0000\u0000\u0000\u0000\u0000"+
-        "\u536D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u536E\u0000\u536F\u5370\u0000\u0000\u0000\u5371"+
-        "\u0000\u5372\u5373\u5374\u0000\u5375\u5376\u0000"+
-        "\u5377\u0000\u0000\u5378\u5379\u537A\u0000\u0000"+
-        "\u0000\u537B\u0000\u0000\u0000\u0000\u537C\u537D"+
-        "\u0000\u0000\u0000\u0000\u0000\u537E\u5421\u0000"+
-        "\u745C\u0000\u0000\u0000\u0000\u0000\u5422\u5423"+
-        "\u0000\u0000\u5424\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5425\u0000\u0000\u5426\u5427"+
-        "\u0000\u5428\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5429\u542A\u542B\u542C\u542D\u0000"+
-        "\u0000\u0000\u0000\u0000\u542E\u542F\u5430\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u745D\u5431"+
-        "\u0000\u5432\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5434\u0000\u0000\u5435\u5436\u0000"+
-        "\u0000\u0000\u5437\u5438\u0000\u5439\u0000\u0000"+
-        "\u0000\u543A\u0000\u0000\u0000\u543B\u543C\u0000"+
-        "\u0000\u543D\u543E\u0000\u0000\u0000\u0000\u0000"+
-        "\u5433\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u543F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5440\u5441\u0000\u0000\u0000\u5442\u0000\u5443"+
-        "\u0000\u0000\u0000\u0000\u5444\u5445\u0000\u0000"+
-        "\u5446\u0000\u0000\u0000\u0000\u0000\u0000\u5447"+
-        "\u5448\u0000\u0000\u0000\u5449\u544A\u0000\u544B"+
-        "\u0000\u0000\u0000\u544C\u0000\u0000\u544D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u544E"+
-        "\u0000\u0000\u0000\u0000\u544F\u5450\u0000\u5451"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5452\u0000"+
-        "\u5453\u0000\u5454\u0000\u0000\u0000\u0000\u0000"+
-        "\u5455\u0000\u0000\u0000\u0000\u0000\u0000\u5456"+
-        "\u0000\u5457\u5458\u0000\u0000\u5459\u0000\u0000"+
-        "\u0000\u0000\u0000\u545A\u0000\u0000\u545B\u545C"+
-        "\u0000\u0000\u0000\u545D\u0000\u0000\u0000\u0000"+
-        "\u545E\u0000\u0000\u0000\u0000\u0000\u545F\u0000"+
-        "\u0000\u5460\u0000\u0000\u0000\u0000\u5461\u5462"+
-        "\u0000\u0000\u5463\u0000\u0000\u5464\u0000\u0000"+
-        "\u0000\u5465\u0000\u0000\u0000\u5466\u0000\u0000"+
-        "\u5467\u0000\u5468\u0000\u0000\u5469\u546A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u546C\u546B\u546D\u546E\u546F"+
-        "\u0000\u0000\u0000\u5470\u5471\u0000\u0000\u5472"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5473"+
-        "\u0000\u0000\u5474\u5475\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5476\u5477\u5478\u0000\u0000"+
-        "\u0000\u5479\u0000\u547A\u547B\u547C\u547D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u547E\u0000\u0000"+
-        "\u0000\u5521\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5522\u5523\u5524"+
-        "\u5525\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5526\u0000\u5527\u0000\u5528"+
-        "\u5529\u552A\u0000\u0000\u0000\u0000\u552B\u552C"+
-        "\u0000\u0000\u0000\u0000\u552D\u0000\u0000\u0000"+
-        "\u0000\u552E\u552F\u0000\u0000\u0000\u5530\u0000"+
-        "\u0000\u0000\u5531\u0000\u0000\u5532\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5533\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5534\u0000\u0000\u5535"+
-        "\u5536\u0000\u0000\u5537\u0000\u0000\u0000\u0000"+
-        "\u5538\u0000\u0000\u0000\u0000\u0000\u5539\u553A"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u553B\u0000\u0000\u0000\u553C"+
-        "\u0000\u0000\u0000\u553D\u0000\u553E\u0000\u0000"+
-        "\u553F\u0000\u0000\u0000\u5540\u0000\u5541\u5542"+
-        "\u0000\u0000\u5543\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5544\u0000\u0000\u5545\u5546\u5547"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5548"+
-        "\u5549\u0000\u554A\u0000\u0000\u554B\u554C\u554D"+
-        "\u0000\u554E\u0000\u554F\u5550\u0000\u5551\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5552\u5553\u5554"+
-        "\u5555\u0000\u0000\u0000\u5556\u0000\u5557\u0000"+
-        "\u0000\u0000\u0000\u0000\u5558\u0000\u5559\u0000"+
-        "\u555A\u0000\u0000\u0000\u555B\u555C\u0000\u555D"+
-        "\u0000\u555E\u555F\u0000\u5560\u0000\u5561\u0000"+
-        "\u5562\u0000\u0000\u0000\u5563\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5564\u0000\u0000\u0000\u5565\u0000\u5566\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5567\u0000\u0000"+
-        "\u0000\u5568\u0000\u0000\u0000\u5569\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u556A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u556B\u0000\u0000\u0000\u0000\u0000\u556C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u556D\u0000\u556E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u556F\u5570"+
-        "\u0000\u0000\u0000\u5571\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5572\u5573\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5574\u0000\u0000\u0000\u0000\u5575\u0000\u5576"+
-        "\u0000\u0000\u5577\u0000\u5578\u5579\u0000\u557A"+
-        "\u557B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u557C\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u557D\u557E\u0000"+
-        "\u5621\u0000\u5622\u5623\u0000\u0000\u5624\u0000"+
-        "\u0000\u5625\u5626\u0000\u0000\u0000\u5627\u0000"+
-        "\u0000\u0000\u0000\u5628\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5629\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u562A\u562B"+
-        "\u562C\u0000\u0000\u0000\u562D\u0000\u562E\u0000"+
-        "\u562F\u0000\u0000\u0000\u5630\u0000\u0000\u5631"+
-        "\u0000\u0000\u0000\u0000\u5632\u0000\u0000\u0000"+
-        "\u5633\u0000\u0000\u0000\u0000\u5634\u0000\u0000"+
-        "\u0000\u0000\u5635\u0000\u5636\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5637\u0000\u5638"+
-        "\u0000\u0000\u5639\u0000\u563A\u0000\u0000\u0000"+
-        "\u0000\u0000\u563B\u0000\u0000\u0000\u0000\u563C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u563D\u563E\u0000\u0000\u0000\u0000\u0000\u563F"+
-        "\u5640\u5641\u0000\u0000\u0000\u5642\u0000\u5643"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5644"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5645\u0000\u0000\u5647\u5648\u5649\u0000"+
-        "\u0000\u0000\u0000\u564A\u0000\u0000\u564B\u0000"+
-        "\u5646\u0000\u0000\u0000\u0000\u0000\u564C\u0000"+
-        "\u564D\u0000\u0000\u564E\u0000\u0000\u564F\u0000"+
-        "\u0000\u0000\u5650\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5651\u0000"+
-        "\u0000\u0000\u5652\u0000\u5653\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5654\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5656\u0000\u5657\u0000\u0000"+
-        "\u0000\u0000\u5658\u5655\u0000\u0000\u5659\u565A"+
-        "\u0000\u0000\u0000\u0000\u0000\u565B\u0000\u565C"+
-        "\u0000\u0000\u0000\u565D\u0000\u565E\u565F\u0000"+
-        "\u0000\u5660\u0000\u0000\u5661\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5662\u5663\u0000\u0000\u0000"+
-        "\u5664\u5665\u5666\u0000\u0000\u5667\u5668\u0000"+
-        "\u5669\u566A\u0000\u0000\u0000\u566B\u0000\u566C"+
-        "\u566D\u0000\u0000\u566E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u566F"+
-        "\u0000\u0000\u0000\u5670\u5671\u0000\u0000\u0000"+
-        "\u0000\u5672\u5673\u0000\u0000\u5674\u0000\u0000"+
-        "\u0000\u5675\u5676\u0000\u0000\u0000\u0000\u0000"+
-        "\u5677\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5678\u0000\u5679\u0000\u0000\u0000"+
-        "\u0000\u0000\u567A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u567B\u567C\u567D\u567E\u0000"+
-        "\u0000\u0000\u0000\u5721\u0000\u0000\u5722\u5723"+
-        "\u0000\u5724\u0000\u0000\u0000\u0000\u5725\u0000"+
-        "\u0000\u0000\u0000\u0000\u5726\u0000\u0000\u0000"+
-        "\u5727\u0000\u0000\u5728\u0000\u0000\u0000\u5729"+
-        "\u0000\u0000\u0000\u0000\u0000\u572A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u572B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u572C\u0000\u572D\u0000\u572E"+
-        "\u572F\u5730\u0000\u5731\u5732\u0000\u0000\u5733"+
-        "\u0000\u5734\u5735\u0000\u0000\u0000\u5736\u0000"+
-        "\u0000\u5737\u0000\u0000\u5738\u0000\u5739\u0000"+
-        "\u573A\u0000\u573B\u573C\u0000\u0000\u0000\u0000"+
-        "\u573D\u573E\u0000\u573F\u5740\u0000\u0000\u5741"+
-        "\u5742\u5743\u5744\u0000\u0000\u0000\u5745\u0000"+
-        "\u5746\u0000\u5747\u0000\u5748\u0000\u0000\u5749"+
-        "\u0000\u0000\u574A\u0000\u574B\u0000\u574C\u574D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u574E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u574F\u0000\u0000\u0000\u0000\u5750\u0000\u0000"+
-        "\u0000\u0000\u5751\u0000\u0000\u0000\u0000\u0000"+
-        "\u5752\u0000\u5753\u0000\u5754\u0000\u0000\u0000"+
-        "\u5755\u0000\u5756\u0000\u0000\u5757\u0000\u5758"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5759\u575A"+
-        "\u0000\u0000\u0000\u0000\u0000\u575B\u575C\u0000"+
-        "\u575D\u575E\u0000\u0000\u0000\u0000\u0000\u575F"+
-        "\u5760\u0000\u5761\u5762\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5764\u0000\u5765\u5766\u5767"+
-        "\u0000\u5768\u5769\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u576A\u576B\u576C\u0000"+
-        "\u576D\u0000\u0000\u576E\u0000\u0000\u0000\u576F"+
-        "\u0000\u0000\u5770\u0000\u5771\u5772\u0000\u0000"+
-        "\u0000\u0000\u5773\u5774\u5775\u0000\u0000\u5776"+
-        "\u0000\u0000\u0000\u0000\u0000\u5777\u5778\u0000"+
-        "\u0000\u5779\u0000\u583E\u5763\u577A\u577B\u577C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u745F\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u577D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u577E\u0000\u0000\u0000\u0000\u5821\u0000\u5822"+
-        "\u5823\u0000\u5824\u0000\u5825\u0000\u5826\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5827\u0000\u0000"+
-        "\u0000\u0000\u5828\u0000\u5829\u582A\u0000\u0000"+
-        "\u582B\u582C\u0000\u582D\u582E\u582F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5830\u5831"+
-        "\u0000\u5832\u0000\u0000\u5833\u584C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5834\u5835"+
-        "\u5836\u0000\u0000\u0000\u0000\u0000\u0000\u5837"+
-        "\u0000\u5838\u0000\u0000\u0000\u0000\u0000\u5839"+
-        "\u583A\u583B\u0000\u0000\u583C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u583D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u583F\u0000\u5840\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5841\u0000"+
-        "\u5842\u5843\u0000\u0000\u5844\u0000\u0000\u0000"+
-        "\u0000\u5845\u0000\u0000\u0000\u0000\u5846\u0000"+
-        "\u0000\u0000\u5847\u0000\u0000\u0000\u0000\u5848"+
-        "\u0000\u5849\u0000\u0000\u0000\u584A\u0000\u0000"+
-        "\u0000\u584B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u584D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u584E\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u584F\u0000\u5850"+
-        "\u5851\u0000\u5852\u0000\u0000\u5853\u0000\u5854"+
-        "\u0000\u5855\u5856\u0000\u0000\u0000\u5857\u0000"+
-        "\u5858\u5859\u585A\u0000\u585B\u0000\u0000\u0000"+
-        "\u585C\u0000\u0000\u0000\u585D\u585E\u0000\u585F"+
-        "\u0000\u0000\u5860\u0000\u0000\u0000\u0000\u0000"+
-        "\u5861\u0000\u0000\u5862\u5863\u0000\u5864\u0000"+
-        "\u5865\u0000\u0000\u0000\u5866\u5867\u0000\u0000"+
-        "\u0000\u5868\u0000\u0000\u0000\u5869\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u586A\u586B\u0000\u586C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u586D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u586E\u0000"+
-        "\u586F\u5870\u5871\u0000\u0000\u0000\u0000\u5872"+
-        "\u0000\u5873\u0000\u0000\u5874\u0000\u0000\u0000"+
-        "\u0000\u0000\u5875\u0000\u0000\u5876\u5877\u0000"+
-        "\u5878\u0000\u5879\u0000\u0000\u0000\u0000\u587A"+
-        "\u587B\u0000\u0000\u0000\u587C\u0000\u0000\u587D"+
-        "\u0000\u0000\u0000\u587E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5921\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5922"+
-        "\u0000\u0000\u5923\u0000\u0000\u0000\u0000\u5924"+
-        "\u5925\u5926\u5927\u0000\u0000\u0000\u0000\u5928"+
-        "\u0000\u0000\u592A\u592B\u0000\u592C\u0000\u0000"+
-        "\u0000\u0000\u592D\u592E\u0000\u0000\u0000\u592F"+
-        "\u0000\u0000\u0000\u0000\u5930\u0000\u5931\u0000"+
-        "\u5932\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5933\u0000\u5934\u0000"+
-        "\u0000\u0000\u5935\u5936\u5937\u5938\u0000\u5939"+
-        "\u0000\u0000\u593A\u593B\u0000\u0000\u0000\u593C"+
-        "\u0000\u0000\u5929\u593D\u593E\u0000\u593F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5940"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5941\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5942"+
-        "\u5943\u5944\u5945\u5946\u0000\u0000\u5947\u0000"+
-        "\u0000\u5948\u0000\u0000\u5949\u594A\u594B\u594C"+
-        "\u594D\u594E\u594F\u0000\u5950\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5951\u0000\u0000\u0000\u5952"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5953\u5954\u5955\u0000\u5956\u0000\u5957"+
-        "\u0000\u5958\u0000\u0000\u0000\u5959\u595A\u0000"+
-        "\u0000\u595B\u0000\u595C\u595D\u0000\u0000\u595E"+
-        "\u0000\u0000\u0000\u595F\u0000\u0000\u0000\u0000"+
-        "\u5960\u0000\u0000\u0000\u0000\u5961\u0000\u5962"+
-        "\u5963\u0000\u5964\u0000\u0000\u5965\u0000\u5966"+
-        "\u0000\u0000\u0000\u0000\u0000\u5974\u0000\u0000"+
-        "\u7461\u0000\u0000\u0000\u5967\u0000\u5968\u5969"+
-        "\u596A\u0000\u0000\u0000\u596B\u596C\u596D\u596E"+
-        "\u0000\u0000\u596F\u0000\u0000\u0000\u0000\u5970"+
-        "\u0000\u0000\u5971\u5972\u0000\u0000\u5973\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5975\u0000\u5976\u0000\u0000\u0000\u0000\u5977"+
-        "\u5978\u0000\u0000\u0000\u0000\u0000\u5979\u0000"+
-        "\u597A\u0000\u0000\u0000\u0000\u597B\u0000\u0000"+
-        "\u0000\u0000\u0000\u597C\u0000\u0000\u597D\u0000"+
-        "\u0000\u0000\u0000\u0000\u597E\u0000\u0000\u5A21"+
-        "\u5A22\u0000\u0000\u0000\u5A23\u5A24\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5A25\u5A26\u0000"+
-        "\u5A27\u5A28\u5A29\u0000\u0000\u0000\u0000\u0000"+
-        "\u5A2A\u5A2B\u0000\u5A2C\u0000\u0000\u5A2D\u0000"+
-        "\u0000\u5A2E\u0000\u0000\u0000\u0000\u0000\u5A2F"+
-        "\u0000\u5A30\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5A31\u0000"+
-        "\u5A32\u0000\u5A33\u0000\u5A34\u5A35\u0000\u0000"+
-        "\u5A36\u3866\u5A37\u0000\u0000\u0000\u5A38\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5A39\u5A3A\u0000\u0000\u5A3B\u5A3C"+
-        "\u5A3D\u5A3E\u0000\u0000\u0000\u5A3F\u0000\u0000"+
-        "\u5A40\u5A41\u5A42\u5A43\u5A44\u0000\u0000\u0000"+
-        "\u0000\u5A45\u0000\u0000\u5A46\u0000\u0000\u5A47"+
-        "\u0000\u0000\u0000\u0000\u0000\u5A48\u5A49\u5A4A"+
-        "\u0000\u0000\u5A4B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5A6D\u0000\u0000\u0000\u0000\u5A4C\u0000\u0000"+
-        "\u0000\u5A4D\u0000\u0000\u0000\u0000\u5A4E\u0000"+
-        "\u5A4F\u0000\u5A50\u0000\u5A51\u0000\u0000\u0000"+
-        "\u0000\u5A52\u0000\u0000\u0000\u0000\u5A53\u5A54"+
-        "\u5A55\u0000\u0000\u0000\u0000\u5A56\u0000\u0000"+
-        "\u0000\u5A57\u0000\u5A58\u5A59\u5A5A\u0000\u5A5B"+
-        "\u5A5C\u5A5D\u0000\u0000\u0000\u0000\u0000\u5A5E"+
-        "\u5A5F\u5A60\u0000\u5A61\u0000\u5A62\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5A63\u5A64\u0000\u0000\u5A65\u0000\u5A66"+
-        "\u0000\u0000\u5A67\u0000\u5A68\u0000\u0000\u0000"+
-        "\u5A69\u0000\u0000\u5A6A\u0000\u5A6B\u0000\u5A6C"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5A6E\u0000\u5A6F\u5A70\u0000\u0000";
-
-    private final static String innerIndex4=
-        "\u0000\u0000\u0000\u0000\u5A71\u5A72\u0000\u5A73"+
-        "\u0000\u0000\u0000\u5A74\u0000\u0000\u5A75\u5A76"+
-        "\u5A77\u0000\u0000\u5A78\u5A79\u0000\u0000\u0000"+
-        "\u0000\u5A7A\u0000\u0000\u0000\u0000\u5A7B\u5A7C"+
-        "\u0000\u5A7D\u0000\u5A7E\u0000\u0000\u0000\u0000"+
-        "\u5B21\u0000\u0000\u0000\u0000\u0000\u5B22\u5B23"+
-        "\u0000\u5B24\u5B25\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5B26\u5B27\u0000\u5B28\u5B29\u5B2A\u0000"+
-        "\u5B2B\u0000\u0000\u5B2C\u0000\u5B2D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5B2E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5B2F\u0000\u0000\u0000\u0000\u5B30\u0000\u0000"+
-        "\u0000\u5B31\u0000\u0000\u5B32\u5B33\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5B34"+
-        "\u0000\u5B35\u5B36\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5B37\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5B38\u5B39\u5B3A\u5B3B\u5B3C"+
-        "\u5B3D\u5B3E\u0000\u5B3F\u5B40\u0000\u0000\u0000"+
-        "\u5B41\u0000\u0000\u5B42\u0000\u5B43\u0000\u5B44"+
-        "\u5B45\u5B46\u0000\u0000\u0000\u0000\u5B47\u0000"+
-        "\u5B48\u0000\u0000\u5B49\u0000\u0000\u0000\u5B4A"+
-        "\u0000\u0000\u0000\u0000\u5B4B\u5B4C\u5B4D\u0000"+
-        "\u0000\u5B4E\u0000\u0000\u0000\u5B4F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5B50\u5B51"+
-        "\u0000\u5B52\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5B53\u5B54\u5B55\u0000\u0000\u0000\u5B56\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5B57\u5B58\u0000"+
-        "\u0000\u5B59\u5B5A\u0000\u5B5B\u0000\u0000\u5B5C"+
-        "\u0000\u0000\u5B5D\u5B5E\u5B5F\u0000\u0000\u0000"+
-        "\u0000\u0000\u5B60\u5B61\u0000\u5B62\u0000\u0000"+
-        "\u0000\u5B63\u0000\u5B64\u0000\u0000\u0000\u0000"+
-        "\u5B65\u0000\u5B66\u0000\u0000\u0000\u0000\u5B67"+
-        "\u0000\u5B68\u0000\u5B69\u0000\u0000\u5B6A\u7464"+
-        "\u0000\u5B6B\u5B6C\u5B6D\u0000\u0000\u0000\u0000"+
-        "\u5B6E\u0000\u5B70\u5B71\u5B72\u0000\u0000\u0000"+
-        "\u5B73\u5B6F\u5B74\u5B75\u5B76\u0000\u5B77\u5B78"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5B79\u0000\u0000\u0000\u0000\u5B7A\u5B7B\u0000"+
-        "\u5B7C\u0000\u5B7D\u0000\u0000\u5B7E\u0000\u0000"+
-        "\u0000\u0000\u5C21\u0000\u5C22\u0000\u0000\u0000"+
-        "\u0000\u5C23\u0000\u5C24\u0000\u5C25\u0000\u0000"+
-        "\u5C26\u5C27\u5C28\u5C29\u0000\u0000\u5C2A\u0000"+
-        "\u0000\u5C2B\u0000\u0000\u0000\u5C2C\u5C2D\u0000"+
-        "\u5C2E\u0000\u5C2F\u0000\u5C30\u0000\u0000\u5C31"+
-        "\u5C32\u0000\u0000\u0000\u5C33\u0000\u0000\u0000"+
-        "\u0000\u5C34\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5C35\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5C36\u0000\u5C37\u0000\u0000\u0000\u0000"+
-        "\u5C38\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5C39\u0000\u5C3A\u5C3B\u5C3C\u0000\u0000\u5C3D"+
-        "\u5C3E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5C3F\u0000\u5C40\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5C41\u0000\u0000\u5C42\u5C43\u0000"+
-        "\u5C44\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5C45\u5C46\u5C47\u5C48\u5C49\u0000"+
-        "\u0000\u5C4A\u5C4B\u5C4C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5C4D\u0000\u0000\u5C4E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5C4F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5C50"+
-        "\u5C51\u5C52\u0000\u0000\u0000\u5C53\u0000\u5C54"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5C55\u0000\u0000\u0000\u0000\u5C56\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5C57\u5C58\u5C59"+
-        "\u0000\u0000\u0000\u0000\u0000\u5C5A\u5C5B\u0000"+
-        "\u5C5C\u5C5D\u5C5E\u0000\u5C5F\u0000\u0000\u0000"+
-        "\u5C60\u0000\u0000\u0000\u0000\u0000\u5C61\u5C62"+
-        "\u5C63\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5C64\u5C65\u5C66\u0000\u0000\u5C67\u0000\u0000"+
-        "\u0000\u5C68\u5C69\u0000\u0000\u0000\u5C6A\u0000"+
-        "\u5C6B\u0000\u5C6C\u0000\u0000\u5C6D\u5C6E\u0000"+
-        "\u0000\u5C6F\u0000\u0000\u0000\u0000\u0000\u5C70"+
-        "\u0000\u0000\u5C71\u0000\u0000\u0000\u0000\u5C72"+
-        "\u0000\u0000\u5C73\u5C74\u5C75\u0000\u0000\u0000"+
-        "\u0000\u5C76\u5C77\u5C78\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u5C79\u0000\u0000\u5C7A\u0000"+
-        "\u5C7B\u0000\u0000\u5C7C\u0000\u5C7D\u0000\u0000"+
-        "\u0000\u0000\u5C7E\u5D21\u5D22\u5D23\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5D24\u0000\u0000\u0000\u5D25\u0000\u0000"+
-        "\u5D26\u0000\u0000\u0000\u5D27\u5D28\u0000\u0000"+
-        "\u0000\u0000\u0000\u5D29\u5D2A\u0000\u0000\u5D2B"+
-        "\u5D2C\u0000\u0000\u0000\u0000\u5D2D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5D2E\u0000\u0000\u0000\u5D2F\u5D30\u5D31\u5D32"+
-        "\u0000\u0000\u0000\u0000\u5D33\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5D34\u5D35\u5D36\u5D37"+
-        "\u5D38\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5D39\u0000\u0000"+
-        "\u0000\u5D3A\u0000\u5D3B\u0000\u5D3C\u0000\u0000"+
-        "\u0000\u5D3D\u0000\u5D3E\u0000\u0000\u5D3F\u0000"+
-        "\u0000\u5D40\u0000\u0000\u0000\u5D41\u0000\u5D42"+
-        "\u0000\u0000\u0000\u0000\u5D43\u5D44\u0000\u5D45"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5D46"+
-        "\u0000\u5D47\u5D48\u0000\u5D49\u5D4A\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5D4B\u0000"+
-        "\u5D4C\u0000\u5D4D\u0000\u5D4E\u0000\u5D4F\u0000"+
-        "\u0000\u0000\u0000\u5D50\u5D51\u0000\u0000\u5D52"+
-        "\u0000\u0000\u0000\u0000\u0000\u5D53\u0000\u5D54"+
-        "\u0000\u0000\u0000\u0000\u0000\u5D55\u5D56\u0000"+
-        "\u5D57\u0000\u0000\u5D58\u0000\u5D59\u0000\u5D5A"+
-        "\u0000\u5D5B\u0000\u0000\u0000\u5D5C\u5D5D\u0000"+
-        "\u0000\u0000\u0000\u5D5E\u0000\u0000\u5D5F\u5D60"+
-        "\u5D61\u0000\u0000\u0000\u5D62\u5D63\u0000\u0000"+
-        "\u0000\u5D64\u0000\u0000\u0000\u5D65\u0000\u5D66"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5D67\u5D68\u5D69"+
-        "\u0000\u5D6A\u5D6B\u5D6C\u0000\u0000\u5D6D\u5D6E"+
-        "\u5D6F\u0000\u0000\u5D70\u0000\u0000\u5D71\u0000"+
-        "\u0000\u0000\u0000\u5D72\u0000\u0000\u0000\u5D73"+
-        "\u5D74\u0000\u5D75\u0000\u0000\u0000\u5D76\u5D77"+
-        "\u0000\u5D78\u0000\u0000\u0000\u0000\u0000\u5D79"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5D7A"+
-        "\u0000\u5D7B\u0000\u0000\u0000\u0000\u5D7C\u5D7D"+
-        "\u0000\u0000\u0000\u5D7E\u0000\u0000\u5E21\u5E22"+
-        "\u0000\u0000\u0000\u5E23\u0000\u0000\u5E24\u0000"+
-        "\u0000\u0000\u0000\u5E25\u0000\u0000\u5E26\u0000"+
-        "\u5E27\u5E28\u5E29\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5E2A\u0000\u5E2B\u5E2C\u5E2D\u0000\u5E2E"+
-        "\u0000\u0000\u0000\u0000\u0000\u5E2F\u0000\u5E30"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5E31\u0000\u0000\u0000"+
-        "\u5E32\u0000\u0000\u0000\u5E33\u5E34\u5E35\u0000"+
-        "\u0000\u0000\u0000\u0000\u5E36\u0000\u0000\u5E37"+
-        "\u0000\u0000\u0000\u0000\u0000\u5E38\u5E39\u0000"+
-        "\u0000\u0000\u5E3F\u5E3A\u0000\u0000\u0000\u0000"+
-        "\u0000\u5E3B\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5E3C\u0000\u5E3D\u5E3E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5E40\u0000\u0000"+
-        "\u5E41\u0000\u0000\u0000\u0000\u0000\u0000\u5E42"+
-        "\u0000\u0000\u0000\u0000\u5E43\u0000\u0000\u0000"+
-        "\u0000\u0000\u5E44\u5E45\u5E46\u5E47\u5E48\u0000"+
-        "\u5E49\u0000\u0000\u0000\u0000\u5E4E\u0000\u0000"+
-        "\u0000\u0000\u5E4A\u5E4B\u5E4C\u0000\u0000\u0000"+
-        "\u0000\u5E4D\u0000\u0000\u0000\u0000\u5E4F\u0000"+
-        "\u0000\u0000\u0000\u5E50\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5E51\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5E52\u0000"+
-        "\u5E53\u5E54\u0000\u0000\u5E55\u0000\u5E56\u7466"+
-        "\u0000\u5E57\u0000\u0000\u5E58\u5E59\u0000\u0000"+
-        "\u0000\u0000\u0000\u5E5A\u0000\u5E5B\u0000\u5E5C"+
-        "\u0000\u0000\u0000\u0000\u5E5D\u5E5E\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5E5F\u0000\u5E60\u5E61"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5E62\u5E63\u0000\u0000\u0000\u5E64\u5E65\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5E66\u0000\u5E67"+
-        "\u0000\u5E68\u0000\u5E69\u0000\u0000\u0000\u5E6A"+
-        "\u0000\u5E6B\u0000\u5E6C\u5E6D\u0000\u0000\u5E6E"+
-        "\u5E6F\u5E72\u0000\u5E70\u0000\u5E71\u0000\u0000"+
-        "\u0000\u0000\u0000\u5E73\u5E74\u0000\u5E75\u0000"+
-        "\u5E76\u5E77\u0000\u0000\u0000\u5E78\u0000\u0000"+
-        "\u0000\u0000\u0000\u5E79\u0000\u5E7A\u5E7B\u0000"+
-        "\u0000\u0000\u0000\u5E7C\u0000\u0000\u5E7D\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5E7E\u5F21"+
-        "\u0000\u0000\u0000\u5F22\u0000\u0000\u0000\u0000"+
-        "\u5F23\u0000\u5F24\u5F25\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F26\u0000\u5F27\u5F28\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5F29\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F2A\u5F2B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F2C\u5F2D\u0000"+
-        "\u0000\u5F2E\u0000\u5F2F\u0000\u0000\u0000\u5F30"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F32\u5F31\u0000"+
-        "\u0000\u5F33\u0000\u0000\u0000\u5F34\u0000\u0000"+
-        "\u0000\u5F35\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5F36\u0000\u0000\u0000\u5F37\u0000\u0000\u5F38"+
-        "\u5F39\u0000\u5F3A\u0000\u7467\u5F3B\u0000\u5F3C"+
-        "\u5F3D\u0000\u0000\u0000\u0000\u0000\u5F3E\u5F3F"+
-        "\u0000\u5F40\u0000\u5F41\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F42\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u5F43\u0000\u0000\u0000\u0000\u5F44"+
-        "\u0000\u0000\u0000\u5F45\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F46\u0000\u0000"+
-        "\u0000\u5F47\u0000\u0000\u5F48\u0000\u5F49\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7468\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5F4A"+
-        "\u0000\u0000\u5F4B\u0000\u5F4C\u0000\u0000\u0000"+
-        "\u5F4D\u0000\u0000\u0000\u0000\u5F4E\u0000\u0000"+
-        "\u5F4F\u5F50\u0000\u0000\u0000\u5F51\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u5F52\u5F53"+
-        "\u5F54\u0000\u0000\u0000\u0000\u0000\u5F55\u0000"+
-        "\u0000\u0000\u0000\u5F56\u5F57\u0000\u0000\u5F58"+
-        "\u0000\u0000\u5F59\u0000\u0000\u5F5A\u0000\u5F5B"+
-        "\u0000\u5F5C\u0000\u5F5D\u5F6F\u0000\u0000\u0000"+
-        "\u5F5E\u0000\u0000\u0000\u0000\u5F5F\u5F60\u5F61"+
-        "\u5F62\u0000\u5F63\u0000\u0000\u0000\u5F64\u0000"+
-        "\u0000\u5F65\u0000\u0000\u5F66\u5F67\u0000\u5F68"+
-        "\u0000\u5F69\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u5F6A\u5F6B\u0000\u5F6C"+
-        "\u0000\u0000\u0000\u0000\u5F6D\u0000\u0000\u0000"+
-        "\u5F6E\u5F70\u5F71\u0000\u5F72\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u5F73\u0000\u0000"+
-        "\u0000\u5F74\u0000\u0000\u5F75\u5F76\u5F77\u0000"+
-        "\u0000\u0000\u0000\u5F78\u0000\u0000\u0000\u0000"+
-        "\u0000\u5F79\u0000\u0000\u5F7A\u0000\u5F7B\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u5F7C\u5F7D\u5F7E\u6021\u0000\u0000\u6022\u6023"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6024\u0000\u6025\u0000\u0000\u6026\u6027"+
-        "\u6028\u6029\u0000\u0000\u0000\u602A\u0000\u0000"+
-        "\u602B\u602C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u602D\u0000\u602E\u602F\u6030"+
-        "\u0000\u0000\u0000\u0000\u6031\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6032\u6033\u6034\u6035\u0000"+
-        "\u0000\u6036\u6037\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6038\u0000\u0000\u6039\u603A\u0000\u603B"+
-        "\u603C\u603D\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u603E\u603F\u6040\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6041\u6042\u0000\u0000\u0000\u0000"+
-        "\u0000\u6043\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6044\u0000\u6045\u0000\u0000\u6046\u0000\u0000"+
-        "\u0000\u0000\u6047\u6048\u0000\u6049\u604A\u0000"+
-        "\u0000\u0000\u604B\u0000\u0000\u0000\u0000\u604C"+
-        "\u0000\u604D\u0000\u0000\u0000\u604E\u604F\u0000"+
-        "\u0000\u0000\u0000\u6050\u0000\u6051\u0000\u0000"+
-        "\u0000\u0000\u6052\u6053\u0000\u0000\u0000\u0000"+
-        "\u6054\u6055\u0000\u6056\u6057\u0000\u0000\u6058"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6059"+
-        "\u0000\u605A\u0000\u0000\u605B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u605C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u605D\u0000\u0000\u0000\u0000\u6064\u605E\u0000"+
-        "\u605F\u6060\u0000\u0000\u0000\u0000\u0000\u6061"+
-        "\u0000\u6062\u6063\u0000\u0000\u0000\u0000\u0000"+
-        "\u6065\u0000\u6066\u0000\u0000\u0000\u0000\u6067"+
-        "\u6068\u0000\u0000\u0000\u0000\u0000\u0000\u6069"+
-        "\u606A\u0000\u0000\u0000\u0000\u0000\u606B\u606C"+
-        "\u606D\u0000\u0000\u0000\u0000\u0000\u606E\u0000"+
-        "\u606F\u6070\u0000\u6071\u0000\u6072\u0000\u6073"+
-        "\u6074\u0000\u0000\u0000\u6075\u6076\u6077\u0000"+
-        "\u0000\u0000\u0000\u0000\u6078\u6079\u607A\u607B"+
-        "\u0000\u0000\u607C\u0000\u0000\u0000\u0000\u0000"+
-        "\u607D\u607E\u0000\u6121\u0000\u0000\u0000\u6122"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6123"+
-        "\u0000\u6124\u6125\u6126\u6127\u6128\u0000\u0000"+
-        "\u6129\u0000\u0000\u0000\u0000\u612A\u612B\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u612C\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u612D\u0000\u0000"+
-        "\u612E\u612F\u0000\u0000\u6130\u6131\u6132\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6133\u6134\u0000"+
-        "\u6135\u0000\u0000\u0000\u0000\u0000\u6136\u0000"+
-        "\u6137\u6138\u0000\u0000\u0000\u0000\u6139\u0000"+
-        "\u0000\u0000\u613A\u613B\u0000\u613C\u0000\u0000"+
-        "\u613D\u0000\u613E\u613F\u0000\u6140\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6141\u0000\u0000\u6142\u6143\u0000\u0000\u0000"+
-        "\u6144\u0000\u0000\u0000\u0000\u0000\u6145\u0000"+
-        "\u0000\u6146\u0000\u0000\u0000\u6147\u6148\u0000"+
-        "\u0000\u0000\u0000\u6149\u0000\u0000\u614A\u0000"+
-        "\u0000\u0000\u614B\u0000\u614C\u0000\u0000\u0000"+
-        "\u614D\u0000\u0000\u0000\u614E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u614F\u0000\u0000\u6150\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6151\u6152\u6154\u0000\u6155\u6156\u0000\u6153"+
-        "\u0000\u0000\u0000\u6157\u6158\u0000\u0000\u6159"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u615A"+
-        "\u0000\u0000\u0000\u615B\u615C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u615D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u615E\u0000\u615F\u0000\u0000"+
-        "\u0000\u0000\u6160\u0000\u0000\u0000\u6161\u6162"+
-        "\u0000\u0000\u0000\u0000\u6163\u0000\u0000\u0000"+
-        "\u6164\u0000\u0000\u0000\u6165\u0000\u0000\u0000"+
-        "\u0000\u6166\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6167\u0000\u0000"+
-        "\u6168\u0000\u0000\u6169\u616A\u0000\u616B\u0000"+
-        "\u616C\u0000\u0000\u0000\u0000\u616D\u0000\u616E"+
-        "\u616F\u6170\u0000\u6171\u0000\u0000\u0000\u0000"+
-        "\u6172\u6173\u6174\u0000\u0000\u6175\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6176\u0000\u6177\u6178\u6179\u0000\u617A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u617B\u617D\u0000"+
-        "\u0000\u0000\u0000\u617E\u6221\u6222\u0000\u6223"+
-        "\u6224\u0000\u0000\u0000\u617C\u0000\u0000\u0000"+
-        "\u0000\u0000\u622D\u0000\u0000\u6225\u0000\u6226"+
-        "\u6227\u6228\u0000\u0000\u6229\u622A\u746C\u622B"+
-        "\u0000\u0000\u0000\u0000\u0000\u622C\u0000\u0000"+
-        "\u0000\u0000\u0000\u622F\u0000\u0000\u0000\u6230"+
-        "\u6231\u0000\u0000\u0000\u6232\u0000\u622E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6233\u6234"+
-        "\u6235\u0000\u0000\u0000\u6236\u6237\u6238\u0000"+
-        "\u6239\u0000\u0000\u0000\u0000\u623A\u0000\u0000"+
-        "\u623B\u0000\u0000\u0000\u623C\u746E\u623D\u623E"+
-        "\u623F\u0000\u6240\u0000\u6241\u0000\u6242\u0000"+
-        "\u6243\u0000\u6245\u6246\u0000\u6244\u0000\u6247"+
-        "\u0000\u6248\u0000\u0000\u0000\u0000\u6249\u624A"+
-        "\u0000\u624B\u0000\u0000\u624C\u0000\u624D\u624E"+
-        "\u0000\u624F\u6250\u0000\u6251\u6252\u0000\u0000"+
-        "\u0000\u0000\u0000\u6253\u0000\u0000\u0000\u6254"+
-        "\u6255\u0000\u0000\u0000\u0000\u0000\u0000\u6256"+
-        "\u0000\u0000\u0000\u6257\u0000\u0000\u0000\u6258"+
-        "\u0000\u6259\u625A\u625B\u0000\u0000\u0000\u0000"+
-        "\u0000\u625C\u0000\u0000\u625D\u0000\u0000\u625E"+
-        "\u0000\u0000\u0000\u0000\u0000\u625F\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6260\u0000\u0000\u0000"+
-        "\u0000\u6261\u6262\u6263\u0000\u0000\u0000\u0000"+
-        "\u0000\u6264\u0000\u6265\u0000\u6266\u6267\u0000"+
-        "\u0000\u0000\u6268\u0000\u0000\u0000\u6269\u0000"+
-        "\u0000\u626A\u0000\u626B\u626C\u626D\u0000\u0000"+
-        "\u626E\u0000\u0000\u0000\u0000\u0000\u626F\u0000"+
-        "\u0000\u6270\u0000\u0000\u0000\u0000\u6271\u0000"+
-        "\u6272\u0000\u0000\u0000\u6273\u6274\u6275\u0000"+
-        "\u6276\u6277\u6278\u6279\u0000\u0000\u627A\u0000"+
-        "\u0000\u0000\u0000\u627B\u627C\u627D\u0000\u627E"+
-        "\u0000\u0000\u6321\u6322\u0000\u6323\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6324\u6325\u0000\u0000\u6326"+
-        "\u0000\u6327\u6328\u0000\u0000\u0000\u6329\u0000"+
-        "\u0000\u0000\u0000\u0000\u632A\u632B\u0000\u0000"+
-        "\u0000\u632C\u632D\u0000\u632E\u632F\u6330\u6331"+
-        "\u6332\u6333\u0000\u0000\u0000\u0000\u0000\u6334"+
-        "\u0000\u6335\u0000\u6336\u0000\u6337\u0000\u0000"+
-        "\u6338\u6339\u0000\u0000\u633A\u633B\u633C\u633D"+
-        "\u0000\u633E\u633F\u0000\u6340\u0000\u0000\u0000"+
-        "\u6341\u0000\u6342\u6343\u0000\u0000\u6344\u0000"+
-        "\u6345\u0000\u0000\u0000\u6346\u6347\u0000\u0000"+
-        "\u0000\u0000\u0000\u6348\u6349\u634A\u634B\u0000"+
-        "\u634C\u0000\u0000\u0000\u0000\u0000\u634D\u634E"+
-        "\u634F\u0000\u0000\u6350\u0000\u6351\u6352\u0000"+
-        "\u6353\u6354\u6355\u0000\u6356\u0000\u6357\u0000"+
-        "\u6358\u0000\u6359\u635A\u0000\u0000\u635B\u635C"+
-        "\u0000\u0000\u635D\u0000\u0000\u635E\u635F\u6360"+
-        "\u0000\u6361\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6362\u6363\u0000\u0000\u6364\u6365\u0000\u0000"+
-        "\u6366\u6367\u0000\u0000\u0000\u6368\u0000\u6369"+
-        "\u636A\u636B\u0000\u0000\u0000\u0000\u636C\u636D"+
-        "\u636E\u0000\u0000\u0000\u0000\u636F\u6370\u6371"+
-        "\u6372\u6373\u0000\u6374\u6375\u6376\u0000\u6377"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6378\u6379\u637A\u0000\u0000\u637B\u637C\u0000"+
-        "\u0000\u0000\u637D\u0000\u0000\u0000\u0000\u637E"+
-        "\u0000\u6421\u0000\u0000\u0000\u0000\u0000\u6422"+
-        "\u6423\u0000\u0000\u0000\u6424\u6425\u0000\u6426"+
-        "\u6427\u0000\u0000\u6428\u0000\u0000\u0000\u6429"+
-        "\u0000\u0000\u642A\u0000\u0000\u0000\u642B\u0000"+
-        "\u642C\u0000\u642D\u642E\u642F\u6430\u0000\u6431"+
-        "\u6432\u6433\u6434\u6435\u0000\u6436\u6437\u6438"+
-        "\u6439\u0000\u0000\u643A\u643B\u643C\u643D\u0000"+
-        "\u643E\u0000\u0000\u643F\u0000\u6440\u0000\u6441"+
-        "\u6442\u6443\u0000\u0000\u6444\u6445\u0000\u6446"+
-        "\u6447\u6448\u0000\u6449\u0000\u644A\u0000\u644B"+
-        "\u644C\u0000\u0000\u0000\u644D\u0000\u644E\u0000"+
-        "\u644F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6450\u0000\u6451\u0000\u0000\u0000\u6452"+
-        "\u6453\u0000\u6454\u0000\u0000\u0000\u0000\u0000"+
-        "\u6455\u0000\u0000\u0000\u0000\u6456\u0000\u0000"+
-        "\u0000\u6457\u0000\u0000\u6458\u6459\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u645A\u645B\u645C\u645D"+
-        "\u0000\u645E\u0000\u0000\u645F\u6460\u0000\u6461"+
-        "\u0000\u6462\u6463\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6464\u6465\u0000\u6466\u6467"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6468"+
-        "\u6469\u646A\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u646B\u646C\u646D\u0000\u0000\u646E\u0000\u646F"+
-        "\u6470\u0000\u6471\u0000\u0000\u0000\u6472\u0000"+
-        "\u0000\u0000\u0000\u0000\u6473\u6474\u0000\u6475"+
-        "\u0000\u6476\u6477\u0000\u0000\u6478\u0000\u6479"+
-        "\u647A\u647B\u0000\u647C\u647D\u0000\u647E\u0000"+
-        "\u0000\u0000\u6521\u0000\u0000\u6522\u0000\u6523"+
-        "\u6524\u6525\u6526\u0000\u0000\u0000\u0000\u0000"+
-        "\u6527\u0000\u6528\u6529\u0000\u652A\u0000\u652B"+
-        "\u0000\u0000\u652C\u0000\u0000\u652D\u0000\u0000"+
-        "\u652E\u0000\u0000\u652F\u0000\u0000\u6530\u0000"+
-        "\u0000\u6531\u0000\u6532\u6533\u0000\u6534\u0000"+
-        "\u6535\u653B\u0000\u6536\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6537\u6538\u6539\u0000"+
-        "\u0000\u0000\u653A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u653C\u0000\u0000\u653D\u653E\u653F\u6540"+
-        "\u0000\u6541\u6542\u6543\u6544\u6545\u0000\u0000"+
-        "\u0000\u0000\u0000\u6546\u0000\u0000\u0000\u0000"+
-        "\u0000\u6547\u0000\u0000\u6548\u0000\u6549\u654A"+
-        "\u0000\u0000\u654B\u0000\u0000\u0000\u654C\u654D"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u654F"+
-        "\u6550\u654E\u6551\u6552\u0000\u6553\u0000\u0000"+
-        "\u0000\u6554\u6555\u0000\u6556\u0000\u0000\u0000"+
-        "\u6557\u6558\u0000\u0000\u0000\u6559\u655A\u655B"+
-        "\u0000\u0000\u0000\u0000\u0000\u655C\u655D\u655E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u655F"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6560\u6561"+
-        "\u0000\u6562\u6563\u6564\u6565\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6566\u0000\u6568\u0000\u6567"+
-        "\u0000\u0000\u0000\u6569\u0000\u656A\u0000\u0000"+
-        "\u656B\u0000\u656C\u0000\u656D\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u656E\u0000\u0000"+
-        "\u0000\u656F\u0000\u0000\u6570\u0000\u0000\u6571"+
-        "\u0000\u6572\u0000\u6573\u0000\u0000\u0000\u0000"+
-        "\u6574\u0000\u0000\u6575\u0000\u6576\u6577\u6578"+
-        "\u0000\u6579\u657A\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u657C\u657B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u657D\u657E\u0000\u0000\u0000\u0000\u6621\u0000"+
-        "\u0000\u0000\u0000\u0000\u6622\u0000\u0000\u0000"+
-        "\u6623\u0000\u0000\u0000\u6624\u6625\u6626\u0000"+
-        "\u0000\u0000\u7471\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6627\u6628\u6629"+
-        "\u0000\u662A\u0000\u0000\u0000\u0000\u662B\u0000"+
-        "\u0000\u662C\u0000\u662D\u662E\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u662F\u0000\u6630\u0000"+
-        "\u0000\u0000\u6631\u0000\u0000\u6632\u0000\u6633"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6634\u0000"+
-        "\u6635\u6636\u0000\u6637\u0000\u0000\u0000\u0000"+
-        "\u6638\u6639\u663A\u663B\u0000\u0000\u0000\u0000"+
-        "\u0000\u663C\u663D\u0000\u0000\u663E\u663F\u6640"+
-        "\u6641\u0000\u0000\u0000\u6642\u0000\u6643\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6644\u6645\u0000"+
-        "\u0000\u0000\u6646\u0000\u6647\u6648\u6649\u0000"+
-        "\u0000\u0000\u0000\u0000\u664A\u0000\u0000\u0000"+
-        "\u0000\u664B\u0000\u664C\u0000\u0000\u0000\u664D"+
-        "\u664E\u664F\u6650\u0000\u6651\u6652\u0000\u0000"+
-        "\u0000\u6653\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6654\u0000\u6655\u0000\u6656\u6657"+
-        "\u6658\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6659\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u665A\u0000"+
-        "\u0000\u0000\u0000\u0000\u665B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u665C\u665D\u0000\u665E\u665F"+
-        "\u0000\u6660\u6661\u6662\u6663\u0000\u0000\u0000"+
-        "\u0000\u6664\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6665\u0000\u0000\u0000\u0000\u6666\u0000"+
-        "\u0000\u0000\u6667\u0000\u0000\u6668\u0000\u6669"+
-        "\u0000\u0000\u0000\u0000\u666A\u666B\u666C\u0000"+
-        "\u0000\u666D\u0000\u0000\u0000\u0000\u666E\u666F"+
-        "\u0000\u0000\u0000\u6670\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6671\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6672\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6673\u0000\u0000\u0000\u0000\u0000"+
-        "\u6675\u0000\u6676\u0000\u0000\u6677\u6678\u6679"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u667A\u0000\u0000\u0000\u0000\u0000\u667B"+
-        "\u0000\u667C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u667D\u0000\u0000\u0000\u0000\u0000";
-
-    private final static String innerIndex5=
-        "\u0000\u0000\u667E\u6721\u0000\u6722\u0000\u0000"+
-        "\u0000\u6723\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6724\u6725\u0000\u6726\u0000\u0000"+
-        "\u0000\u6727\u6728\u6729\u0000\u0000\u0000\u0000"+
-        "\u672A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u672B\u0000\u672C\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u7474\u0000\u0000\u0000\u0000"+
-        "\u0000\u672D\u0000\u672E\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u672F\u0000\u0000\u7475\u6730\u6731"+
-        "\u0000\u7476\u0000\u0000\u0000\u6732\u0000\u6733"+
-        "\u6734\u0000\u6735\u6736\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6737\u0000\u0000\u0000\u6738"+
-        "\u0000\u0000\u6739\u0000\u0000\u0000\u673A\u0000"+
-        "\u0000\u0000\u0000\u673B\u0000\u0000\u673C\u673D"+
-        "\u673E\u0000\u0000\u673F\u0000\u6740\u0000\u6741"+
-        "\u6742\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6743\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6744\u6745\u6746"+
-        "\u0000\u6747\u6748\u0000\u0000\u0000\u6749\u674A"+
-        "\u0000\u0000\u674B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u674C\u0000\u674D\u0000"+
-        "\u0000\u674E\u674F\u0000\u0000\u6750\u6751\u0000"+
-        "\u6752\u6753\u6754\u0000\u6755\u0000\u6756\u6757"+
-        "\u0000\u6758\u0000\u0000\u6759\u675A\u0000\u675B"+
-        "\u0000\u675C\u675D\u0000\u675E\u675F\u6760\u0000"+
-        "\u6761\u6762\u0000\u0000\u6763\u0000\u0000\u6764"+
-        "\u6765\u6766\u0000\u676A\u0000\u6767\u6768\u0000"+
-        "\u6769\u676B\u0000\u0000\u676C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u676D"+
-        "\u0000\u676E\u0000\u0000\u676F\u0000\u0000\u6770"+
-        "\u6771\u0000\u6772\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6773"+
-        "\u0000\u0000\u6774\u0000\u0000\u6776\u6777\u0000"+
-        "\u0000\u0000\u0000\u0000\u6778\u0000\u6779\u0000"+
-        "\u0000\u6775\u0000\u0000\u677A\u0000\u677B\u0000"+
-        "\u677C\u0000\u0000\u677D\u0000\u6828\u677E\u0000"+
-        "\u0000\u0000\u0000\u6821\u0000\u0000\u6822\u6823"+
-        "\u6824\u0000\u6825\u6826\u0000\u6827\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6829\u0000"+
-        "\u0000\u0000\u0000\u0000\u682A\u0000\u0000\u682B"+
-        "\u0000\u0000\u682C\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u682D\u682E\u682F\u0000\u0000\u6830\u6831"+
-        "\u0000\u6832\u6833\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6834\u6835\u0000\u6836\u6837\u0000"+
-        "\u0000\u0000\u6838\u0000\u6839\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u683A\u0000\u683B\u683C\u0000"+
-        "\u683D\u0000\u0000\u0000\u683E\u0000\u0000\u683F"+
-        "\u6840\u0000\u6841\u6842\u0000\u0000\u0000\u6843"+
-        "\u0000\u0000\u6844\u0000\u0000\u6845\u0000\u0000"+
-        "\u6846\u0000\u0000\u0000\u6847\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6848\u0000\u6849\u0000\u684A\u684B\u684C"+
-        "\u0000\u0000\u684D\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u684E\u0000\u0000\u684F\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6850\u0000\u0000\u0000\u0000\u6851"+
-        "\u6852\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6853\u0000\u0000\u0000\u6854\u6855\u6856"+
-        "\u0000\u0000\u6857\u6858\u6859\u0000\u0000\u685A"+
-        "\u0000\u0000\u685B\u0000\u0000\u0000\u685C\u685D"+
-        "\u0000\u0000\u0000\u685E\u0000\u0000\u0000\u0000"+
-        "\u0000\u685F\u6860\u6861\u6862\u6863\u0000\u0000"+
-        "\u0000\u6864\u6865\u6866\u6867\u0000\u0000\u0000"+
-        "\u6868\u6869\u0000\u0000\u0000\u0000\u686A\u686B"+
-        "\u686C\u0000\u0000\u0000\u0000\u686D\u686E\u0000"+
-        "\u0000\u0000\u0000\u0000\u686F\u0000\u0000\u0000"+
-        "\u6870\u6871\u0000\u6872\u6873\u0000\u6874\u6875"+
-        "\u6876\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6877\u0000\u6878\u747A\u6879"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u687A\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u687B\u687C\u687D\u0000\u0000\u687E\u0000\u0000"+
-        "\u0000\u6921\u6922\u0000\u0000\u6923\u0000\u6924"+
-        "\u0000\u0000\u0000\u6925\u0000\u0000\u0000\u0000"+
-        "\u0000\u6926\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6927\u6928\u0000\u0000\u0000"+
-        "\u0000\u6929\u692A\u0000\u692B\u0000\u692C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u692D"+
-        "\u0000\u0000\u692E\u692F\u6930\u0000\u0000\u0000"+
-        "\u6931\u0000\u0000\u0000\u6932\u6933\u0000\u0000"+
-        "\u0000\u6934\u0000\u0000\u0000\u6935\u6936\u0000"+
-        "\u0000\u0000\u6937\u6938\u6939\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u693A\u693B\u0000\u0000\u0000"+
-        "\u693C\u693D\u0000\u0000\u0000\u0000\u693E\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u693F\u0000"+
-        "\u6940\u0000\u6941\u6942\u6943\u0000\u0000\u6944"+
-        "\u0000\u0000\u0000\u0000\u0000\u6945\u6946\u0000"+
-        "\u0000\u0000\u0000\u6947\u0000\u6948\u6949\u0000"+
-        "\u694A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u694C\u0000\u0000\u694D\u0000\u0000\u694B"+
-        "\u0000\u0000\u694E\u694F\u6950\u0000\u6951\u0000"+
-        "\u0000\u6952\u0000\u0000\u6953\u0000\u6954\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6955\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6956\u0000\u6957\u0000\u6958\u6959"+
-        "\u0000\u0000\u695A\u0000\u695B\u695C\u695D\u0000"+
-        "\u0000\u695E\u0000\u695F\u0000\u0000\u6960\u6961"+
-        "\u0000\u6962\u0000\u6963\u0000\u0000\u6964\u0000"+
-        "\u6965\u0000\u0000\u0000\u0000\u0000\u6966\u0000"+
-        "\u6967\u0000\u6968\u0000\u0000\u6969\u696A\u696B"+
-        "\u0000\u747B\u0000\u696C\u696D\u0000\u0000\u0000"+
-        "\u696E\u0000\u0000\u0000\u696F\u6970\u0000\u6971"+
-        "\u0000\u6972\u0000\u0000\u6973\u0000\u0000\u0000"+
-        "\u0000\u0000\u6974\u6975\u0000\u6976\u0000\u0000"+
-        "\u0000\u6977\u6978\u0000\u0000\u6979\u0000\u697A"+
-        "\u697B\u697C\u697D\u697E\u6A21\u6A22\u0000\u0000"+
-        "\u6A23\u6A24\u0000\u6A25\u6A26\u6A27\u6A28\u0000"+
-        "\u6A29\u0000\u6A2A\u0000\u0000\u0000\u6A2B\u0000"+
-        "\u0000\u6A2C\u0000\u6A2D\u6A2E\u0000\u0000\u0000"+
-        "\u6A2F\u0000\u0000\u0000\u0000\u0000\u6A30\u0000"+
-        "\u0000\u0000\u0000\u6A31\u0000\u6A32\u0000\u0000"+
-        "\u0000\u0000\u0000\u6A33\u6A34\u6A35\u0000\u6A36"+
-        "\u0000\u6A37\u6A38\u0000\u0000\u6A39\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6A3A\u0000\u0000\u6A3B\u6A3C\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A3D\u6A3E\u6A3F"+
-        "\u0000\u0000\u0000\u6A40\u0000\u0000\u6A41\u0000"+
-        "\u0000\u6A42\u0000\u6A43\u0000\u6A44\u6A45\u0000"+
-        "\u6A46\u0000\u6A47\u6A48\u6A49\u6A4A\u6A4B\u0000"+
-        "\u0000\u0000\u747C\u6A4C\u0000\u6A4D\u0000\u6A4E"+
-        "\u6A4F\u6A50\u0000\u0000\u0000\u0000\u0000\u6A51"+
-        "\u6A52\u0000\u0000\u0000\u6A53\u6A54\u6A55\u6A56"+
-        "\u0000\u6A57\u6A58\u6A59\u0000\u6A5A\u0000\u6A5B"+
-        "\u6A5C\u0000\u0000\u0000\u6A5D\u0000\u0000\u0000"+
-        "\u0000\u0000\u6A5E\u0000\u0000\u6A5F\u6A60\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6A61\u6A62"+
-        "\u0000\u6A63\u0000\u0000\u6A64\u0000\u0000\u0000"+
-        "\u6A65\u6A66\u6A67\u0000\u0000\u0000\u0000\u6A68"+
-        "\u6A69\u0000\u0000\u6A6A\u6A6B\u0000\u6A6C\u6A6D"+
-        "\u0000\u6A6E\u0000\u0000\u0000\u0000\u0000\u6A6F"+
-        "\u6A70\u0000\u0000\u0000\u0000\u0000\u6A71\u0000"+
-        "\u6A72\u0000\u0000\u0000\u0000\u0000\u0000\u6A73"+
-        "\u6A74\u0000\u0000\u0000\u0000\u6A75\u0000\u6A76"+
-        "\u0000\u0000\u0000\u0000\u0000\u6A77\u0000\u6A78"+
-        "\u0000\u0000\u6A79\u6A7A\u0000\u0000\u0000\u6A7B"+
-        "\u0000\u0000\u0000\u6A7C\u0000\u0000\u0000\u6A7D"+
-        "\u6A7E\u6B21\u6B22\u0000\u0000\u6B23\u0000\u6B24"+
-        "\u6B25\u0000\u6B26\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6B27\u0000\u0000\u0000\u6B28"+
-        "\u0000\u6B29\u0000\u0000\u0000\u0000\u6B2A\u0000"+
-        "\u6B2B\u6B2C\u6B2D\u0000\u6B2E\u0000\u6B2F\u0000"+
-        "\u0000\u0000\u6B30\u6B31\u0000\u0000\u6B32\u6B33"+
-        "\u6B34\u6B35\u6B36\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6B37\u0000\u0000\u0000\u6B38\u6B39\u6B3A"+
-        "\u0000\u0000\u0000\u0000\u0000\u6B3B\u0000\u0000"+
-        "\u0000\u6B3C\u0000\u6B3D\u6B3E\u6B3F\u0000\u0000"+
-        "\u0000\u6B40\u6B41\u0000\u0000\u0000\u6B42\u6B43"+
-        "\u6B44\u0000\u0000\u6B45\u6B46\u0000\u6B47\u0000"+
-        "\u6B48\u0000\u0000\u6B49\u6B50\u6B4A\u6B4B\u6B4C"+
-        "\u0000\u0000\u0000\u6B4D\u0000\u0000\u0000\u0000"+
-        "\u6B52\u6B4E\u6B4F\u6B51\u0000\u0000\u6B53\u0000"+
-        "\u6B54\u0000\u6B55\u0000\u0000\u6B56\u0000\u6B57"+
-        "\u0000\u0000\u0000\u6B58\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6B59\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6B5A\u0000\u0000\u0000\u0000\u6B5B"+
-        "\u0000\u6B5C\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6B5E\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6B5D\u0000\u0000\u0000\u0000"+
-        "\u0000\u6B5F\u0000\u0000\u0000\u0000\u0000\u6B60"+
-        "\u6B61\u0000\u0000\u0000\u6B62\u6B63\u6B64\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6B65"+
-        "\u6B66\u0000\u6B67\u6B68\u6B69\u0000\u0000\u0000"+
-        "\u0000\u0000\u6B6A\u0000\u6B6B\u6B6D\u0000\u0000"+
-        "\u0000\u0000\u6B6E\u6B6F\u0000\u6B6C\u0000\u6B70"+
-        "\u0000\u0000\u6B71\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6B72\u6B73\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6B74"+
-        "\u0000\u0000\u6B76\u6B75\u0000\u6B77\u0000\u0000"+
-        "\u0000\u6B78\u6B79\u6B7A\u0000\u0000\u0000\u0000"+
-        "\u6B7B\u0000\u0000\u0000\u0000\u0000\u6B7C\u6B7D"+
-        "\u0000\u0000\u0000\u6B7E\u6C21\u0000\u6C22\u0000"+
-        "\u0000\u0000\u0000\u6C23\u6C24\u0000\u6C25\u0000"+
-        "\u0000\u0000\u6C26\u0000\u0000\u6C27\u6C28\u0000"+
-        "\u0000\u0000\u6C29\u6C2A\u0000\u6C2B\u6C2C\u6C2D"+
-        "\u6C2E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u6C2F\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C30\u0000\u6C31\u0000\u6C32\u0000"+
-        "\u0000\u6C33\u0000\u0000\u0000\u6C34\u0000\u0000"+
-        "\u0000\u6C35\u0000\u0000\u6C36\u0000\u0000\u6C37"+
-        "\u0000\u0000\u0000\u6C38\u0000\u0000\u0000\u6C39"+
-        "\u0000\u6C3A\u6C3B\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u6C3C\u6C3D\u6C3E\u6C3F"+
-        "\u0000\u0000\u6C40\u0000\u0000\u0000\u6C41\u6C42"+
-        "\u6C43\u0000\u0000\u0000\u0000\u6C44\u0000\u6C45"+
-        "\u0000\u6C46\u0000\u6C47\u0000\u0000\u6C48\u0000"+
-        "\u6C49\u0000\u0000\u6C4A\u6C4B\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6C4C\u0000"+
-        "\u0000\u0000\u6C4E\u0000\u0000\u0000\u0000\u6C4F"+
-        "\u0000\u0000\u6C4D\u0000\u0000\u0000\u6C50\u0000"+
-        "\u6C51\u6C52\u6C53\u0000\u0000\u6C54\u6C55\u0000"+
-        "\u0000\u6C56\u0000\u0000\u6C57\u6C58\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u6C59\u6C5A\u6C5B\u0000\u0000\u0000"+
-        "\u6C5C\u0000\u6C5D\u6C5E\u6C5F\u6C60\u0000\u6C61"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6C62\u6C63"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6C64\u0000"+
-        "\u6C65\u0000\u0000\u6C66\u0000\u0000\u6C67\u0000"+
-        "\u0000\u0000\u0000\u0000\u6C68\u0000\u0000\u0000"+
-        "\u6C69\u0000\u0000\u0000\u6C6A\u0000\u6C6B\u6C6C"+
-        "\u6C6D\u0000\u0000\u6C6E\u6C6F\u6C70\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6C71\u0000"+
-        "\u6C72\u0000\u0000\u6C73\u0000\u0000\u0000\u0000"+
-        "\u0000\u747E\u0000\u0000\u0000\u6C74\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6C75"+
-        "\u0000\u0000\u0000\u0000\u6C76\u0000\u0000\u6C77"+
-        "\u0000\u0000\u0000\u0000\u6C78\u6C79\u6C7A\u0000"+
-        "\u6C7B\u6C7C\u6C7D\u0000\u0000\u6C7E\u0000\u0000"+
-        "\u6D21\u0000\u0000\u0000\u0000\u0000\u0000\u6D22"+
-        "\u0000\u0000\u6D23\u6D24\u0000\u0000\u0000\u0000"+
-        "\u0000\u6D25\u0000\u0000\u0000\u0000\u0000\u6D26"+
-        "\u6D27\u6D28\u6D29\u0000\u6D2A\u0000\u6D2B\u6D2C"+
-        "\u0000\u6D2D\u6D2E\u6D2F\u0000\u0000\u0000\u6D30"+
-        "\u0000\u0000\u6D31\u0000\u0000\u0000\u6D32\u0000"+
-        "\u0000\u0000\u6D33\u6D34\u0000\u0000\u0000\u6D35"+
-        "\u0000\u6D36\u6D37\u0000\u6D38\u0000\u0000\u6D39"+
-        "\u0000\u6D3A\u6D3B\u0000\u6D3C\u6D3D\u0000\u6D3E"+
-        "\u0000\u6D3F\u0000\u6D40\u6D41\u6D42\u6D43\u6D44"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u6D45\u0000\u6D46\u6D47\u6D48"+
-        "\u6D49\u0000\u6D4A\u0000\u0000\u6D4B\u6D4C\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u6D4D\u6D4E\u0000\u0000\u0000\u6D4F\u6D50\u6D51"+
-        "\u6D52\u6D53\u0000\u6D54\u0000\u6D55\u0000\u0000"+
-        "\u0000\u0000\u6D56\u0000\u0000\u6D57\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6D58"+
-        "\u6D59\u6D5A\u6D5B\u0000\u6D5C\u0000\u6D5D\u6D5E"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u6D5F\u0000"+
-        "\u0000\u6D60\u6D61\u6D62\u0000\u6D63\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u2271\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u7445\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u7472\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u7434\u7437"+
-        "\u7438\u743D\u7444\u7447\u7448\u744E\u744F\u7453"+
-        "\u7455\u7456\u7457\u7458\u745A\u745B\u745E\u7460"+
-        "\u7462\u7463\u7465\u7469\u746A\u746B\u746D\u746F"+
-        "\u7470\u7473\u7477\u7478\u7479\u747D\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u742A\u0000\u0000\u0000\u0000\u7429"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u2237\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-        "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-    private final static short index1[] = {
-        1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8,
-        9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
-        25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
-        41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
-        57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
-        73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 89, 0, 0, 90, 91, 0, 0, 0, 0, 92
-    };
-
-    private final static String index2[] = {
-        innerIndex0,
-        innerIndex1,
-        innerIndex2,
-        innerIndex3,
-        innerIndex4,
-        innerIndex5
-    };
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/MS50220.java b/ojluni/src/main/java/sun/nio/cs/ext/MS50220.java
deleted file mode 100755
index 2ba2624..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/MS50220.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-
-public class MS50220 extends ISO2022_JP
-{
-    public MS50220() {
-        super("x-windows-50220",
-              ExtendedCharsets.aliasesFor("x-windows-50220"));
-    }
-
-    public String historicalName() {
-        return "MS50220";
-    }
-
-    public boolean contains(Charset cs) {
-      return super.contains(cs) ||
-             (cs instanceof JIS_X_0212) ||
-             (cs instanceof MS50220);
-    }
-
-    protected short[] getDecIndex1() {
-        return JIS_X_0208_MS5022X_Decoder.index1;
-    }
-
-    protected String[] getDecIndex2() {
-        return JIS_X_0208_MS5022X_Decoder.index2;
-    }
-
-    protected DoubleByteDecoder get0212Decoder() {
-        return new JIS_X_0212_MS5022X_Decoder(this);
-    }
-
-    protected short[] getEncIndex1() {
-        return JIS_X_0208_MS5022X_Encoder.index1;
-    }
-
-    protected String[] getEncIndex2() {
-        return JIS_X_0208_MS5022X_Encoder.index2;
-    }
-
-    protected DoubleByteEncoder get0212Encoder() {
-        return new JIS_X_0212_MS5022X_Encoder(this);
-    }
-
-    protected boolean doSBKANA() {
-        return false;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/MS50221.java b/ojluni/src/main/java/sun/nio/cs/ext/MS50221.java
deleted file mode 100755
index 035094e..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/MS50221.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-
-public class MS50221 extends ISO2022_JP
-{
-    public MS50221() {
-        super("x-windows-50221",
-              ExtendedCharsets.aliasesFor("x-windows-50221"));
-    }
-
-    public String historicalName() {
-        return "MS50221";
-    }
-
-    public boolean contains(Charset cs) {
-      return super.contains(cs) ||
-             (cs instanceof JIS_X_0212) ||
-             (cs instanceof MS50221);
-    }
-
-    protected short[] getDecIndex1() {
-        return JIS_X_0208_MS5022X_Decoder.index1;
-    }
-
-    protected String[] getDecIndex2() {
-        return JIS_X_0208_MS5022X_Decoder.index2;
-    }
-
-    protected DoubleByteDecoder get0212Decoder() {
-        return new JIS_X_0212_MS5022X_Decoder(this);
-    }
-
-    protected short[] getEncIndex1() {
-        return JIS_X_0208_MS5022X_Encoder.index1;
-    }
-
-    protected String[] getEncIndex2() {
-        return JIS_X_0208_MS5022X_Encoder.index2;
-    }
-
-    protected DoubleByteEncoder get0212Encoder() {
-        return new JIS_X_0212_MS5022X_Encoder(this);
-    }
-
-    protected boolean doSBKANA() {
-        return true;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/MS932_0213.java b/ojluni/src/main/java/sun/nio/cs/ext/MS932_0213.java
deleted file mode 100755
index 035ba6a..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/MS932_0213.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2008, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class MS932_0213 extends Charset {
-    public MS932_0213() {
-        super("x-MS932_0213", ExtendedCharsets.aliasesFor("MS932_0213"));
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof MS932)
-                || (cs instanceof MS932_0213));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    protected static class Decoder extends SJIS_0213.Decoder {
-        static DoubleByte.Decoder decMS932 =
-            (DoubleByte.Decoder)new MS932().newDecoder();
-        protected Decoder(Charset cs) {
-            super(cs);
-        }
-
-        protected char decodeDouble(int b1, int b2) {
-            char c = decMS932.decodeDouble(b1, b2);
-            if (c == UNMAPPABLE_DECODING)
-                return super.decodeDouble(b1, b2);
-            return c;
-        }
-    }
-
-    protected static class Encoder extends SJIS_0213.Encoder {
-        // we only use its encodeChar() method
-        static DoubleByte.Encoder encMS932 =
-            (DoubleByte.Encoder)new MS932().newEncoder();
-        protected Encoder(Charset cs) {
-            super(cs);
-        }
-
-        protected int encodeChar(char ch) {
-            int db = encMS932.encodeChar(ch);
-            if (db == UNMAPPABLE_ENCODING)
-                return super.encodeChar(ch);
-            return db;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/MS950_HKSCS.java b/ojluni/src/main/java/sun/nio/cs/ext/MS950_HKSCS.java
deleted file mode 100755
index 505e447..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/MS950_HKSCS.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2010, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import sun.nio.cs.HistoricallyNamedCharset;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class MS950_HKSCS extends Charset implements HistoricallyNamedCharset
-{
-    public MS950_HKSCS() {
-        super("x-MS950-HKSCS", ExtendedCharsets.aliasesFor("x-MS950-HKSCS"));
-    }
-
-    public String historicalName() {
-        return "MS950_HKSCS";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof MS950)
-                || (cs instanceof MS950_HKSCS));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    static class Decoder extends HKSCS.Decoder {
-        private static DoubleByte.Decoder ms950 =
-            (DoubleByte.Decoder)new MS950().newDecoder();
-
-        private static char[][] b2cBmp = new char[0x100][];
-        private static char[][] b2cSupp = new char[0x100][];
-        static {
-            initb2c(b2cBmp, HKSCSMapping.b2cBmpStr);
-            initb2c(b2cSupp, HKSCSMapping.b2cSuppStr);
-        }
-
-        private Decoder(Charset cs) {
-            super(cs, ms950, b2cBmp, b2cSupp);
-        }
-    }
-
-    private static class Encoder extends HKSCS.Encoder {
-        private static DoubleByte.Encoder ms950 =
-            (DoubleByte.Encoder)new MS950().newEncoder();
-
-        static char[][] c2bBmp = new char[0x100][];
-        static char[][] c2bSupp = new char[0x100][];
-        static {
-            initc2b(c2bBmp, HKSCSMapping.b2cBmpStr, HKSCSMapping.pua);
-            initc2b(c2bSupp, HKSCSMapping.b2cSuppStr, null);
-        }
-
-        private Encoder(Charset cs) {
-            super(cs, ms950, c2bBmp, c2bSupp);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/MS950_HKSCS_XP.java b/ojluni/src/main/java/sun/nio/cs/ext/MS950_HKSCS_XP.java
deleted file mode 100755
index 2fddb92..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/MS950_HKSCS_XP.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2002, 2010, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import sun.nio.cs.HistoricallyNamedCharset;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class MS950_HKSCS_XP extends Charset
-{
-    public MS950_HKSCS_XP() {
-        super("x-MS950-HKSCS-XP", ExtendedCharsets.aliasesFor("x-MS950-HKSCS-XP"));
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof MS950)
-                || (cs instanceof MS950_HKSCS_XP));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    static class Decoder extends HKSCS.Decoder {
-        private static DoubleByte.Decoder ms950 =
-            (DoubleByte.Decoder)new MS950().newDecoder();
-
-        /*
-         * Note current decoder decodes 0x8BC2 --> U+F53A
-         * ie. maps to Unicode PUA.
-         * Unaccounted discrepancy between this mapping
-         * inferred from MS950/windows-950 and the published
-         * MS HKSCS mappings which maps 0x8BC2 --> U+5C22
-         * a character defined with the Unified CJK block
-         */
-        private static char[][] b2cBmp = new char[0x100][];
-        static {
-            initb2c(b2cBmp, HKSCS_XPMapping.b2cBmpStr);
-        }
-
-        public char decodeDoubleEx(int b1, int b2) {
-            return UNMAPPABLE_DECODING;
-        }
-
-        private Decoder(Charset cs) {
-            super(cs, ms950, b2cBmp, null);
-        }
-    }
-
-    private static class Encoder extends HKSCS.Encoder {
-        private static DoubleByte.Encoder ms950 =
-            (DoubleByte.Encoder)new MS950().newEncoder();
-
-        /*
-         * Note current encoder encodes U+F53A --> 0x8BC2
-         * Published MS HKSCS mappings show
-         * U+5C22 <--> 0x8BC2
-         */
-        static char[][] c2bBmp = new char[0x100][];
-        static {
-            initc2b(c2bBmp, HKSCS_XPMapping.b2cBmpStr, null);
-        }
-
-        public int encodeSupp(int cp) {
-            return UNMAPPABLE_ENCODING;
-        }
-
-        private Encoder(Charset cs) {
-            super(cs, ms950, c2bBmp, null);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/MSISO2022JP.java b/ojluni/src/main/java/sun/nio/cs/ext/MSISO2022JP.java
deleted file mode 100755
index 02ac1e7..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/MSISO2022JP.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-
-public class MSISO2022JP extends ISO2022_JP
-{
-    public MSISO2022JP() {
-        super("x-windows-iso2022jp",
-              ExtendedCharsets.aliasesFor("x-windows-iso2022jp"));
-    }
-
-    public String historicalName() {
-        return "windows-iso2022jp";
-    }
-
-    public boolean contains(Charset cs) {
-      return super.contains(cs) ||
-             (cs instanceof MSISO2022JP);
-    }
-
-    protected short[] getDecIndex1() {
-        return JIS_X_0208_MS932_Decoder.index1;
-    }
-
-    protected String[] getDecIndex2() {
-        return JIS_X_0208_MS932_Decoder.index2;
-    }
-
-    protected DoubleByteDecoder get0212Decoder() {
-        return null;
-    }
-
-    protected short[] getEncIndex1() {
-        return JIS_X_0208_MS932_Encoder.index1;
-    }
-
-    protected String[] getEncIndex2() {
-        return JIS_X_0208_MS932_Encoder.index2;
-    }
-
-    protected DoubleByteEncoder get0212Encoder() {
-        return null;
-    }
-
-    protected boolean doSBKANA() {
-        return true;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/PCK.java b/ojluni/src/main/java/sun/nio/cs/ext/PCK.java
deleted file mode 100755
index f048d25..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/PCK.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import sun.nio.cs.HistoricallyNamedCharset;
-
-public class PCK
-    extends Charset
-    implements HistoricallyNamedCharset
-{
-
-    public PCK() {
-        super("x-PCK", ExtendedCharsets.aliasesFor("x-PCK"));
-    }
-
-    public String historicalName() {
-        return "PCK";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof JIS_X_0201)
-                || (cs instanceof PCK));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-
-        // Need to force the replacement byte to 0x3f
-        // because JIS_X_0208_Encoder defines its own
-        // alternative 2 byte substitution to permit it
-        // to exist as a self-standing Encoder
-
-        byte[] replacementBytes = { (byte)0x3f };
-        return new Encoder(this).replaceWith(replacementBytes);
-    }
-
-    private static class Decoder extends SJIS.Decoder {
-
-        JIS_X_0208_Solaris_Decoder jis0208;
-        private static final char REPLACE_CHAR='\uFFFD';
-
-        private Decoder(Charset cs) {
-            super(cs);
-            jis0208 = new JIS_X_0208_Solaris_Decoder(cs);
-        }
-
-        protected char decodeDouble(int c1, int c2) {
-            char outChar;
-
-            if ((outChar = super.decodeDouble(c1, c2)) != '\uFFFD')  {
-                // Map JIS X 0208:1983 0x213D <--> U+2015
-                return ((outChar != '\u2014')? outChar: '\u2015');
-            } else {
-                int adjust = c2 < 0x9F ? 1 : 0;
-                int rowOffset = c1 < 0xA0 ? 0x70 : 0xB0;
-                int cellOffset = (adjust == 1) ? (c2 > 0x7F ? 0x20 : 0x1F) : 0x7E;
-                int b1 = ((c1 - rowOffset) << 1) - adjust;
-                int b2 = c2 - cellOffset;
-                char outChar2 = jis0208.decodeDouble(b1, b2);
-                return outChar2;
-            }
-        }
-    }
-
-    private static class Encoder extends SJIS.Encoder {
-
-        private JIS_X_0201.Encoder jis0201;
-
-        private static final short[] j0208Index1 =
-            JIS_X_0208_Solaris_Encoder.getIndex1();
-        private static final String[] j0208Index2 =
-            JIS_X_0208_Solaris_Encoder.getIndex2();
-
-        private Encoder(Charset cs) {
-            super(cs);
-            jis0201 = new JIS_X_0201.Encoder(cs);
-        }
-
-        protected int encodeDouble(char ch) {
-            int result = 0;
-
-            // PCK uses JIS_X_0208:1983 rather than JIS_X_0208:1997
-
-            switch (ch) {
-                case '\u2015':
-                    return 0x815C;
-                case '\u2014':
-                    return 0;
-                default:
-                    break;
-            }
-
-            if ((result = super.encodeDouble(ch)) != 0) {
-                return result;
-            }
-            else {
-                int offset = j0208Index1[ch >> 8] << 8;
-                int pos = j0208Index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
-                if (pos != 0) {
-                int c1 = (pos >> 8) & 0xff;
-                int c2 = pos & 0xff;
-                int rowOffset = c1 < 0x5F ? 0x70 : 0xB0;
-                int cellOffset = (c1 % 2 == 1) ? (c2 > 0x5F ? 0x20 : 0x1F) : 0x7E;
-                result = ((((c1 + 1 ) >> 1) + rowOffset) << 8) | (c2 + cellOffset);
-                }
-            }
-            return result;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/SJIS.java b/ojluni/src/main/java/sun/nio/cs/ext/SJIS.java
deleted file mode 100755
index 308c25a..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/SJIS.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 2002, 2010, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.HistoricallyNamedCharset;
-
-public class SJIS
-    extends Charset
-    implements HistoricallyNamedCharset
-{
-
-    public SJIS() {
-        super("Shift_JIS", ExtendedCharsets.aliasesFor("Shift_JIS"));
-    }
-
-    public String historicalName() {
-        return "SJIS";
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof JIS_X_0201)
-                || (cs instanceof SJIS)
-                || (cs instanceof JIS_X_0208));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-
-        // Need to force the replacement byte to 0x3f
-        // because JIS_X_0208_Encoder defines its own
-        // alternative 2 byte substitution to permit it
-        // to exist as a self-standing Encoder
-
-        byte[] replacementBytes = { (byte)0x3f };
-        return new Encoder(this).replaceWith(replacementBytes);
-    }
-
-    static class Decoder extends JIS_X_0208_Decoder
-        implements DelegatableDecoder {
-
-        JIS_X_0201.Decoder jis0201;
-
-        protected Decoder(Charset cs) {
-            super(cs);
-            jis0201 = new JIS_X_0201.Decoder(cs);
-        }
-
-        protected char decodeSingle(int b) {
-            // If the high bits are all off, it's ASCII == Unicode
-            if ((b & 0xFF80) == 0) {
-                return (char)b;
-            }
-            return jis0201.decode(b);
-        }
-
-        protected char decodeDouble(int c1, int c2) {
-            int adjust = c2 < 0x9F ? 1 : 0;
-            int rowOffset = c1 < 0xA0 ? 0x70 : 0xB0;
-            int cellOffset = (adjust == 1) ? (c2 > 0x7F ? 0x20 : 0x1F) : 0x7E;
-            int b1 = ((c1 - rowOffset) << 1) - adjust;
-            int b2 = c2 - cellOffset;
-            return super.decodeDouble(b1, b2);
-        }
-
-        // Make some protected methods public for use by JISAutoDetect
-        public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            return super.decodeLoop(src, dst);
-        }
-        public void implReset() {
-            super.implReset();
-        }
-        public CoderResult implFlush(CharBuffer out) {
-            return super.implFlush(out);
-        }
-    }
-
-    static class Encoder extends JIS_X_0208_Encoder {
-
-        private JIS_X_0201.Encoder jis0201;
-
-        private static final short[] j0208Index1 =
-            JIS_X_0208_Encoder.getIndex1();
-        private static final String[] j0208Index2 =
-            JIS_X_0208_Encoder.getIndex2();
-
-        protected Encoder(Charset cs) {
-            super(cs);
-            jis0201 = new JIS_X_0201.Encoder(cs);
-        }
-
-        protected int encodeSingle(char inputChar) {
-            byte b;
-
-            // \u0000 - \u007F map straight through
-            if ((inputChar & 0xFF80) == 0)
-                return (byte)inputChar;
-
-            if ((b = jis0201.encode(inputChar)) == 0)
-                return -1;
-            else
-                return b;
-        }
-
-        protected int encodeDouble(char ch) {
-            int offset = j0208Index1[ch >> 8] << 8;
-            int pos = j0208Index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
-            if (pos == 0) {
-                /* Zero value indicates this Unicode has no mapping to
-                 * JIS0208.
-                 * We bail here because the JIS -> SJIS algorithm produces
-                 * bogus SJIS values for invalid JIS input.  Zero should be
-                 * the only invalid JIS value in our table.
-                 */
-                return 0;
-            }
-            /*
-             * This algorithm for converting from JIS to SJIS comes from
-             * Ken Lunde's "Understanding Japanese Information Processing",
-             * pg 163.
-             */
-            int c1 = (pos >> 8) & 0xff;
-            int c2 = pos & 0xff;
-            int rowOffset = c1 < 0x5F ? 0x70 : 0xB0;
-            int cellOffset = (c1 % 2 == 1) ? (c2 > 0x5F ? 0x20 : 0x1F) : 0x7E;
-            return ((((c1 + 1 ) >> 1) + rowOffset) << 8) | (c2 + cellOffset);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/SJIS_0213.java b/ojluni/src/main/java/sun/nio/cs/ext/SJIS_0213.java
deleted file mode 100755
index 10fd8b7..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/SJIS_0213.java
+++ /dev/null
@@ -1,408 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, 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.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CoderResult;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Arrays;
-import sun.nio.cs.CharsetMapping;
-
-/*
- *  5 types of entry in SJIS_X_0213/Unicode mapping table
- *
- *  (1)Single-Byte
- *     JIS_X_0213 does not define single-byte character itself, the
- *     JIS_X_0201 entries are added in for sjis implementation.
- *
- *  (2)Double-Byte SJIS <-> BMP Unicode
- *     ex: 0x8140 U+3000    # IDEOGRAPHIC SPACE
- *
- *  (3)Double-Byte SJIS <-> Supplementary
- *     ex: 0xFCF0 U+2A61A   # <cjk> [2000] [Unicode3.1]
- *
- *  (4)Double-Byte SJIS <-> Composite
- *   ex: 0x83F6 U+31F7+309A # [2000]
- *
- *  (5)"Windows-only" special mapping entries
- *     are handled by MS932_0213.
- */
-
-public class SJIS_0213 extends Charset {
-    public SJIS_0213() {
-        super("x-SJIS_0213", ExtendedCharsets.aliasesFor("SJIS_0213"));
-    }
-
-    public boolean contains(Charset cs) {
-        return ((cs.name().equals("US-ASCII"))
-                || (cs instanceof SJIS)
-                || (cs instanceof SJIS_0213));
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    static CharsetMapping mapping = AccessController.doPrivileged(
-        new PrivilegedAction<CharsetMapping>() {
-            public CharsetMapping run() {
-                return CharsetMapping.get(SJIS_0213.class.getResourceAsStream("sjis0213.dat"));
-            }
-        });
-
-    protected static class Decoder extends CharsetDecoder {
-        protected static final char UNMAPPABLE = CharsetMapping.UNMAPPABLE_DECODING;
-
-        protected Decoder(Charset cs) {
-            super(cs, 0.5f, 1.0f);
-        }
-
-        private CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    int b1 = sa[sp] & 0xff;
-                    char c = decodeSingle(b1);
-                    int inSize = 1, outSize = 1;
-                    char[] cc = null;
-                    if (c == UNMAPPABLE) {
-                        if (sl - sp < 2)
-                            return CoderResult.UNDERFLOW;
-                        int b2 = sa[sp + 1] & 0xff;
-                        c = decodeDouble(b1, b2);
-                        inSize++;
-                        if (c == UNMAPPABLE) {
-                            cc = decodeDoubleEx(b1, b2);
-                            if (cc == null) {
-                                if (decodeSingle(b2) == UNMAPPABLE)
-                                    return CoderResult.unmappableForLength(2);
-                                else
-                                    return CoderResult.unmappableForLength(1);
-                            }
-                            outSize++;
-                        }
-                    }
-                    if (dl - dp < outSize)
-                        return CoderResult.OVERFLOW;
-                    if (outSize == 2) {
-                        da[dp++] = cc[0];
-                        da[dp++] = cc[1];
-                    } else {
-                        da[dp++] = c;
-                    }
-                    sp += inSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    char[] cc = null;
-                    int b1 = src.get() & 0xff;
-                    char c = decodeSingle(b1);
-                    int inSize = 1, outSize = 1;
-                    if (c == UNMAPPABLE) {
-                        if (src.remaining() < 1)
-                            return CoderResult.UNDERFLOW;
-                        int b2 = src.get() & 0xff;
-                        inSize++;
-                        c = decodeDouble(b1, b2);
-                        if (c == UNMAPPABLE) {
-                            cc = decodeDoubleEx(b1, b2);
-                            if (cc == null) {
-                                if (decodeSingle(b2) == UNMAPPABLE)
-                                    return CoderResult.unmappableForLength(2);
-                                else
-                                    return CoderResult.unmappableForLength(1);
-                            }
-                            outSize++;
-                        }
-                    }
-                    if (dst.remaining() < outSize)
-                        return CoderResult.OVERFLOW;
-                    if (outSize == 2) {
-                        dst.put(cc[0]);
-                        dst.put(cc[1]);
-                    } else {
-                        dst.put(c);
-                    }
-                    mark += inSize;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            if (src.hasArray() && dst.hasArray())
-                return decodeArrayLoop(src, dst);
-            else
-                return decodeBufferLoop(src, dst);
-        }
-
-        protected char decodeSingle(int b) {
-            return mapping.decodeSingle(b);
-        }
-
-        protected char decodeDouble(int b1, int b2) {
-            return mapping.decodeDouble(b1, b2);
-        }
-
-        private char[] cc = new char[2];
-        private CharsetMapping.Entry comp = new CharsetMapping.Entry();
-        protected char[] decodeDoubleEx(int b1, int b2) {
-            int db = (b1 << 8) | b2;
-            if (mapping.decodeSurrogate(db, cc) != null)
-                return cc;
-            comp.bs = db;
-            if (mapping.decodeComposite(comp, cc) != null)
-                return cc;
-            return null;
-        }
-    }
-
-    protected static class Encoder extends CharsetEncoder {
-        protected static final int UNMAPPABLE = CharsetMapping.UNMAPPABLE_ENCODING;
-        protected static final int MAX_SINGLEBYTE = 0xff;
-
-        protected Encoder(Charset cs) {
-            super(cs, 2.0f, 2.0f);
-        }
-
-        public boolean canEncode(char c) {
-            return (encodeChar(c) != UNMAPPABLE);
-        }
-
-        protected int encodeChar(char ch) {
-            return mapping.encodeChar(ch);
-        }
-
-        protected int encodeSurrogate(char hi, char lo) {
-            return mapping.encodeSurrogate(hi, lo);
-        }
-
-        private CharsetMapping.Entry comp = new CharsetMapping.Entry();
-        protected int encodeComposite(char base, char cc) {
-            comp.cp = base;
-            comp.cp2 = cc;
-            return mapping.encodeComposite(comp);
-        }
-
-        protected boolean isCompositeBase(char ch) {
-            comp.cp = ch;
-            return mapping.isCompositeBase(comp);
-        }
-
-        // Unlike surrogate pair, the base character of a base+cc composite
-        // itself is a legal codepoint in 0213, if we simply return UNDERFLOW
-        // when a base candidate is the last input char in the CharBuffer, like
-        // what we do for the surrogte pair, encoding will fail if this base
-        // character is indeed the last character of the input char sequence.
-        // Keep this base candidate in "leftoverBase" so we can flush it out
-        // at the end of the encoding circle.
-        char leftoverBase = 0;
-        protected CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    int db;
-                    char c = sa[sp];
-                    if (leftoverBase != 0) {
-                        boolean isComp = false;
-                        db = encodeComposite(leftoverBase, c);
-                        if (db == UNMAPPABLE)
-                            db = encodeChar(leftoverBase);
-                        else
-                            isComp = true;
-                        if (dl - dp < 2)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = (byte)(db >> 8);
-                        da[dp++] = (byte)db;
-                        leftoverBase = 0;
-                        if (isComp) {
-                            sp++;
-                            continue;
-                        }
-                    }
-                    if (isCompositeBase(c)) {
-                        leftoverBase = c;
-                    } else {
-                        db = encodeChar(c);
-                        if (db <= MAX_SINGLEBYTE) {      // SingleByte
-                            if (dl <= dp)
-                                return CoderResult.OVERFLOW;
-                            da[dp++] = (byte)db;
-                        } else if (db != UNMAPPABLE) {   // DoubleByte
-                            if (dl - dp < 2)
-                                return CoderResult.OVERFLOW;
-                            da[dp++] = (byte)(db >> 8);
-                            da[dp++] = (byte)db;
-                        } else if (Character.isHighSurrogate(c)) {
-                            if ((sp + 1) == sl)
-                                return CoderResult.UNDERFLOW;
-                            char c2 = sa[sp + 1];
-                            if (!Character.isLowSurrogate(c2))
-                                return CoderResult.malformedForLength(1);
-                            db = encodeSurrogate(c, c2);
-                            if (db == UNMAPPABLE)
-                                return CoderResult.unmappableForLength(2);
-                            if (dl - dp < 2)
-                                return CoderResult.OVERFLOW;
-                            da[dp++] = (byte)(db >> 8);
-                            da[dp++] = (byte)db;
-                            sp++;
-                        } else if (Character.isLowSurrogate(c)) {
-                            return CoderResult.malformedForLength(1);
-                        } else {
-                            return CoderResult.unmappableForLength(1);
-                        }
-                    }
-                    sp++;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        protected CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
-            int mark = src.position();
-            try {
-                while (src.hasRemaining()) {
-                    int db;
-                    char c = src.get();
-                    if (leftoverBase != 0) {
-                        boolean isComp = false;
-                        db = encodeComposite(leftoverBase, c);
-                        if (db == UNMAPPABLE)
-                            db = encodeChar(leftoverBase);
-                        else
-                            isComp = true;
-                        if (dst.remaining() < 2)
-                            return CoderResult.OVERFLOW;
-                        dst.put((byte)(db >> 8));
-                        dst.put((byte)(db));
-                        leftoverBase = 0;
-                        if (isComp) {
-                            mark++;
-                            continue;
-                        }
-                    }
-                    if (isCompositeBase(c)) {
-                        leftoverBase = c;
-                    } else {
-                        db = encodeChar(c);
-                        if (db <= MAX_SINGLEBYTE) {    // Single-byte
-                            if (dst.remaining() < 1)
-                                return CoderResult.OVERFLOW;
-                            dst.put((byte)db);
-                        } else if (db != UNMAPPABLE) {   // DoubleByte
-                            if (dst.remaining() < 2)
-                                return CoderResult.OVERFLOW;
-                            dst.put((byte)(db >> 8));
-                            dst.put((byte)(db));
-                        } else if (Character.isHighSurrogate(c)) {
-                            if (!src.hasRemaining())     // Surrogates
-                                return CoderResult.UNDERFLOW;
-                            char c2 = src.get();
-                            if (!Character.isLowSurrogate(c2))
-                                return CoderResult.malformedForLength(1);
-                            db = encodeSurrogate(c, c2);
-                            if (db == UNMAPPABLE)
-                                return CoderResult.unmappableForLength(2);
-                            if (dst.remaining() < 2)
-                                return CoderResult.OVERFLOW;
-                            dst.put((byte)(db >> 8));
-                            dst.put((byte)(db));
-                            mark++;
-                        } else if (Character.isLowSurrogate(c)) {
-                            return CoderResult.malformedForLength(1);
-                        } else {
-                            return CoderResult.unmappableForLength(1);
-                        }
-                    }
-                    mark++;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(mark);
-            }
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            if (src.hasArray() && dst.hasArray())
-                return encodeArrayLoop(src, dst);
-            else
-                return encodeBufferLoop(src, dst);
-        }
-
-        protected CoderResult implFlush(ByteBuffer dst) {
-            if (leftoverBase > 0) {
-                if (dst.remaining() < 2)
-                    return CoderResult.OVERFLOW;
-                int db = encodeChar(leftoverBase);
-                dst.put((byte)(db >> 8));
-                dst.put((byte)(db));
-                leftoverBase = 0;
-            }
-            return CoderResult.UNDERFLOW;
-        }
-
-        protected void implReset() {
-            leftoverBase = 0;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/cs/ext/SimpleEUCEncoder.java b/ojluni/src/main/java/sun/nio/cs/ext/SimpleEUCEncoder.java
deleted file mode 100755
index 80f41ac..0000000
--- a/ojluni/src/main/java/sun/nio/cs/ext/SimpleEUCEncoder.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.Surrogate;
-
-
-public abstract class SimpleEUCEncoder
-    extends CharsetEncoder
-{
-
-    protected short  index1[];
-    protected String index2;
-    protected String index2a;
-    protected String index2b;
-    protected String index2c;
-    protected int    mask1;
-    protected int    mask2;
-    protected int    shift;
-
-    private byte[] outputByte = new byte[4];
-    private final Surrogate.Parser sgp = new Surrogate.Parser();
-
-    protected SimpleEUCEncoder(Charset cs)
-    {
-        super(cs, 3.0f, 4.0f);
-    }
-
-    /**
-     * Returns true if the given character can be converted to the
-     * target character encoding.
-     */
-
-    public boolean canEncode(char ch) {
-       int    index;
-       String theChars;
-
-       index = index1[((ch & mask1) >> shift)] + (ch & mask2);
-
-       if (index < 7500)
-         theChars = index2;
-       else
-         if (index < 15000) {
-           index = index - 7500;
-           theChars = index2a;
-         }
-         else
-           if (index < 22500){
-             index = index - 15000;
-             theChars = index2b;
-           }
-           else {
-             index = index - 22500;
-             theChars = index2c;
-           }
-
-       if (theChars.charAt(2*index) != '\u0000' ||
-                    theChars.charAt(2*index + 1) != '\u0000')
-         return (true);
-
-       // only return true if input char was unicode null - all others are
-       //     undefined
-       return( ch == '\u0000');
-
-    }
-    private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
-        char[] sa = src.array();
-        int sp = src.arrayOffset() + src.position();
-        int sl = src.arrayOffset() + src.limit();
-        assert (sp <= sl);
-        sp = (sp <= sl ? sp : sl);
-        byte[] da = dst.array();
-        int dp = dst.arrayOffset() + dst.position();
-        int dl = dst.arrayOffset() + dst.limit();
-        assert (dp <= dl);
-        dp = (dp <= dl ? dp : dl);
-
-        int     index;
-        int     spaceNeeded;
-        int     i;
-
-        try {
-            while (sp < sl) {
-                boolean allZeroes = true;
-                char inputChar = sa[sp];
-                if (Character.isSurrogate(inputChar)) {
-                    if (sgp.parse(inputChar, sa, sp, sl) < 0)
-                        return sgp.error();
-                    return sgp.unmappableResult();
-                }
-
-                if (inputChar >= '\uFFFE')
-                    return CoderResult.unmappableForLength(1);
-
-                String theChars;
-                char   aChar;
-
-                 // We have a valid character, get the bytes for it
-                index = index1[((inputChar & mask1) >> shift)] + (inputChar & mask2);
-
-                if (index < 7500)
-                    theChars = index2;
-                else if (index < 15000) {
-                     index = index - 7500;
-                     theChars = index2a;
-                } else if (index < 22500){
-                    index = index - 15000;
-                    theChars = index2b;
-                }
-                else {
-                    index = index - 22500;
-                    theChars = index2c;
-                }
-
-                aChar = theChars.charAt(2*index);
-                outputByte[0] = (byte)((aChar & 0xff00)>>8);
-                outputByte[1] = (byte)(aChar & 0x00ff);
-                aChar = theChars.charAt(2*index + 1);
-                outputByte[2] = (byte)((aChar & 0xff00)>>8);
-                outputByte[3] = (byte)(aChar & 0x00ff);
-
-            for (i = 0; i < outputByte.length; i++) {
-                if (outputByte[i] != 0x00) {
-                allZeroes = false;
-                break;
-                }
-            }
-
-            if (allZeroes && inputChar != '\u0000') {
-                return CoderResult.unmappableForLength(1);
-            }
-
-            int oindex = 0;
-
-            for (spaceNeeded = outputByte.length;
-                 spaceNeeded > 1; spaceNeeded--){
-                if (outputByte[oindex++] != 0x00 )
-                    break;
-            }
-
-            if (dp + spaceNeeded > dl)
-                return CoderResult.OVERFLOW;
-
-            for (i = outputByte.length - spaceNeeded;
-                 i < outputByte.length; i++) {
-                    da[dp++] = outputByte[i];
-            }
-            sp++;
-        }
-        return CoderResult.UNDERFLOW;
-        } finally {
-            src.position(sp - src.arrayOffset());
-            dst.position(dp - dst.arrayOffset());
-        }
-    }
-
-    private CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
-        int     index;
-        int     spaceNeeded;
-        int     i;
-        int mark = src.position();
-        try {
-            while (src.hasRemaining()) {
-                char inputChar = src.get();
-                boolean allZeroes = true;
-                if (Character.isSurrogate(inputChar)) {
-                    if (sgp.parse(inputChar, src) < 0)
-                        return sgp.error();
-                    return sgp.unmappableResult();
-                }
-
-                if (inputChar >= '\uFFFE')
-                    return CoderResult.unmappableForLength(1);
-
-                String theChars;
-                char   aChar;
-
-                 // We have a valid character, get the bytes for it
-                index = index1[((inputChar & mask1) >> shift)] + (inputChar & mask2);
-
-                if (index < 7500)
-                    theChars = index2;
-                else if (index < 15000) {
-                     index = index - 7500;
-                     theChars = index2a;
-                } else if (index < 22500){
-                    index = index - 15000;
-                    theChars = index2b;
-                }
-                else {
-                    index = index - 22500;
-                    theChars = index2c;
-                }
-
-                aChar = theChars.charAt(2*index);
-                outputByte[0] = (byte)((aChar & 0xff00)>>8);
-                outputByte[1] = (byte)(aChar & 0x00ff);
-                aChar = theChars.charAt(2*index + 1);
-                outputByte[2] = (byte)((aChar & 0xff00)>>8);
-                outputByte[3] = (byte)(aChar & 0x00ff);
-
-            for (i = 0; i < outputByte.length; i++) {
-                if (outputByte[i] != 0x00) {
-                allZeroes = false;
-                break;
-                }
-            }
-            if (allZeroes && inputChar != '\u0000') {
-                return CoderResult.unmappableForLength(1);
-            }
-
-            int oindex = 0;
-
-            for (spaceNeeded = outputByte.length;
-                 spaceNeeded > 1; spaceNeeded--){
-                if (outputByte[oindex++] != 0x00 )
-                    break;
-            }
-            if (dst.remaining() < spaceNeeded)
-                return CoderResult.OVERFLOW;
-
-            for (i = outputByte.length - spaceNeeded;
-                 i < outputByte.length; i++) {
-                    dst.put(outputByte[i]);
-            }
-            mark++;
-            }
-            return CoderResult.UNDERFLOW;
-        } finally {
-            src.position(mark);
-        }
-    }
-
-    protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-        if (true && src.hasArray() && dst.hasArray())
-            return encodeArrayLoop(src, dst);
-        else
-            return encodeBufferLoop(src, dst);
-    }
-
-    public byte encode(char inputChar) {
-        return (byte)index2.charAt(index1[(inputChar & mask1) >> shift] +
-                (inputChar & mask2));
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/AbstractAclFileAttributeView.java b/ojluni/src/main/java/sun/nio/fs/AbstractAclFileAttributeView.java
deleted file mode 100755
index 2e56206..0000000
--- a/ojluni/src/main/java/sun/nio/fs/AbstractAclFileAttributeView.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.attribute.*;
-import java.util.*;
-import java.io.IOException;
-
-/**
- * Base implementation of AclFileAttributeView
- */
-
-abstract class AbstractAclFileAttributeView
-    implements AclFileAttributeView, DynamicFileAttributeView
-{
-    private static final String OWNER_NAME = "owner";
-    private static final String ACL_NAME = "acl";
-
-    @Override
-    public final String name() {
-        return "acl";
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public final void setAttribute(String attribute, Object value)
-        throws IOException
-    {
-        if (attribute.equals(OWNER_NAME)) {
-            setOwner((UserPrincipal)value);
-            return;
-        }
-        if (attribute.equals(ACL_NAME)) {
-            setAcl((List<AclEntry>)value);
-            return;
-        }
-        throw new IllegalArgumentException("'" + name() + ":" +
-            attribute + "' not recognized");
-    }
-
-    @Override
-    public final Map<String,Object> readAttributes(String[] attributes)
-        throws IOException
-    {
-        boolean acl = false;
-        boolean owner = false;
-        for (String attribute: attributes) {
-            if (attribute.equals("*")) {
-                owner = true;
-                acl = true;
-                continue;
-            }
-            if (attribute.equals(ACL_NAME)) {
-                acl = true;
-                continue;
-            }
-            if (attribute.equals(OWNER_NAME)) {
-                owner = true;
-                continue;
-            }
-            throw new IllegalArgumentException("'" + name() + ":" +
-                attribute + "' not recognized");
-        }
-        Map<String,Object> result = new HashMap<>(2);
-        if (acl)
-            result.put(ACL_NAME, getAcl());
-        if (owner)
-            result.put(OWNER_NAME, getOwner());
-        return Collections.unmodifiableMap(result);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/AbstractPoller.java b/ojluni/src/main/java/sun/nio/fs/AbstractPoller.java
deleted file mode 100755
index fd3503c..0000000
--- a/ojluni/src/main/java/sun/nio/fs/AbstractPoller.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * Base implementation of background poller thread used in watch service
- * implementations. A poller thread waits on events from the file system and
- * also services "requests" from clients to register for new events or cancel
- * existing registrations.
- */
-
-abstract class AbstractPoller implements Runnable {
-
-    // list of requests pending to the poller thread
-    private final LinkedList<Request> requestList;
-
-    // set to true when shutdown
-    private boolean shutdown;
-
-    protected AbstractPoller() {
-        this.requestList = new LinkedList<Request>();
-        this.shutdown = false;
-    }
-
-    /**
-     * Starts the poller thread
-     */
-    public void start() {
-        final Runnable thisRunnable = this;
-        AccessController.doPrivileged(new PrivilegedAction<Object>() {
-            @Override
-            public Object run() {
-                Thread thr = new Thread(thisRunnable);
-                thr.setDaemon(true);
-                thr.start();
-                return null;
-            }
-         });
-    }
-
-    /**
-     * Wakeup poller thread so that it can service pending requests
-     */
-    abstract void wakeup() throws IOException;
-
-    /**
-     * Executed by poller thread to register directory for changes
-     */
-    abstract Object implRegister(Path path,
-                                 Set<? extends WatchEvent.Kind<?>> events,
-                                 WatchEvent.Modifier... modifiers);
-
-    /**
-     * Executed by poller thread to cancel key
-     */
-    abstract void implCancelKey(WatchKey key);
-
-    /**
-     * Executed by poller thread to shutdown and cancel all keys
-     */
-    abstract void implCloseAll();
-
-    /**
-     * Requests, and waits on, poller thread to register given file.
-     */
-    final WatchKey register(Path dir,
-                            WatchEvent.Kind<?>[] events,
-                            WatchEvent.Modifier... modifiers)
-        throws IOException
-    {
-        // validate arguments before request to poller
-        if (dir == null)
-            throw new NullPointerException();
-        if (events.length == 0)
-            throw new IllegalArgumentException("No events to register");
-        Set<WatchEvent.Kind<?>> eventSet = new HashSet<>(events.length);
-        for (WatchEvent.Kind<?> event: events) {
-            // standard events
-            if (event == StandardWatchEventKinds.ENTRY_CREATE ||
-                event == StandardWatchEventKinds.ENTRY_MODIFY ||
-                event == StandardWatchEventKinds.ENTRY_DELETE)
-            {
-                eventSet.add(event);
-                continue;
-            }
-
-            // OVERFLOW is ignored
-            if (event == StandardWatchEventKinds.OVERFLOW) {
-                if (events.length == 1)
-                    throw new IllegalArgumentException("No events to register");
-                continue;
-            }
-
-            // null/unsupported
-            if (event == null)
-                throw new NullPointerException("An element in event set is 'null'");
-            throw new UnsupportedOperationException(event.name());
-        }
-        return (WatchKey)invoke(RequestType.REGISTER, dir, eventSet, modifiers);
-    }
-
-    /**
-     * Cancels, and waits on, poller thread to cancel given key.
-     */
-    final void cancel(WatchKey key) {
-        try {
-            invoke(RequestType.CANCEL, key);
-        } catch (IOException x) {
-            // should not happen
-            throw new AssertionError(x.getMessage());
-        }
-    }
-
-    /**
-     * Shutdown poller thread
-     */
-    final void close() throws IOException {
-        invoke(RequestType.CLOSE);
-    }
-
-    /**
-     * Types of request that the poller thread must handle
-     */
-    private static enum RequestType {
-        REGISTER,
-        CANCEL,
-        CLOSE;
-    }
-
-    /**
-     * Encapsulates a request (command) to the poller thread.
-     */
-    private static class Request {
-        private final RequestType type;
-        private final Object[] params;
-
-        private boolean completed = false;
-        private Object result = null;
-
-        Request(RequestType type, Object... params) {
-            this.type = type;
-            this.params = params;
-        }
-
-        RequestType type() {
-            return type;
-        }
-
-        Object[] parameters() {
-            return params;
-        }
-
-        void release(Object result) {
-            synchronized (this) {
-                this.completed = true;
-                this.result = result;
-                notifyAll();
-            }
-        }
-
-        /**
-         * Await completion of the request. The return value is the result of
-         * the request.
-         */
-        Object awaitResult() {
-            synchronized (this) {
-                while (!completed) {
-                    try {
-                        wait();
-                    } catch (InterruptedException x) {
-                        // ignore
-                    }
-                }
-                return result;
-            }
-        }
-    }
-
-    /**
-     * Enqueues request to poller thread and waits for result
-     */
-    private Object invoke(RequestType type, Object... params) throws IOException {
-        // submit request
-        Request req = new Request(type, params);
-        synchronized (requestList) {
-            if (shutdown) {
-                throw new ClosedWatchServiceException();
-            }
-            requestList.add(req);
-        }
-
-        // wakeup thread
-        wakeup();
-
-        // wait for result
-        Object result = req.awaitResult();
-
-        if (result instanceof RuntimeException)
-            throw (RuntimeException)result;
-        if (result instanceof IOException )
-            throw (IOException)result;
-        return result;
-    }
-
-    /**
-     * Invoked by poller thread to process all pending requests
-     *
-     * @return  true if poller thread should shutdown
-     */
-    @SuppressWarnings("unchecked")
-    boolean processRequests() {
-        synchronized (requestList) {
-            Request req;
-            while ((req = requestList.poll()) != null) {
-                // if in process of shutdown then reject request
-                if (shutdown) {
-                    req.release(new ClosedWatchServiceException());
-                }
-
-                switch (req.type()) {
-                    /**
-                     * Register directory
-                     */
-                    case REGISTER: {
-                        Object[] params = req.parameters();
-                        Path path = (Path)params[0];
-                        Set<? extends WatchEvent.Kind<?>> events =
-                            (Set<? extends WatchEvent.Kind<?>>)params[1];
-                        WatchEvent.Modifier[] modifiers =
-                            (WatchEvent.Modifier[])params[2];
-                        req.release(implRegister(path, events, modifiers));
-                        break;
-                    }
-                    /**
-                     * Cancel existing key
-                     */
-                    case CANCEL : {
-                        Object[] params = req.parameters();
-                        WatchKey key = (WatchKey)params[0];
-                        implCancelKey(key);
-                        req.release(null);
-                        break;
-                    }
-                    /**
-                     * Close watch service
-                     */
-                    case CLOSE: {
-                        implCloseAll();
-                        req.release(null);
-                        shutdown = true;
-                        break;
-                    }
-
-                    default:
-                        req.release(new IOException("request not recognized"));
-                }
-            }
-        }
-        return shutdown;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/AbstractUserDefinedFileAttributeView.java b/ojluni/src/main/java/sun/nio/fs/AbstractUserDefinedFileAttributeView.java
deleted file mode 100755
index 3886aa1..0000000
--- a/ojluni/src/main/java/sun/nio/fs/AbstractUserDefinedFileAttributeView.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.ByteBuffer;
-import java.nio.file.attribute.UserDefinedFileAttributeView;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * Base implementation of UserDefinedAttributeView
- */
-
-abstract class AbstractUserDefinedFileAttributeView
-    implements UserDefinedFileAttributeView, DynamicFileAttributeView
-{
-    protected AbstractUserDefinedFileAttributeView() { }
-
-    protected void checkAccess(String file,
-                               boolean checkRead,
-                               boolean checkWrite)
-    {
-        assert checkRead || checkWrite;
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            if (checkRead)
-                sm.checkRead(file);
-            if (checkWrite)
-                sm.checkWrite(file);
-            sm.checkPermission(new RuntimePermission("accessUserDefinedAttributes"));
-        }
-    }
-
-    @Override
-    public final String name() {
-        return "user";
-    }
-
-    @Override
-    public final void setAttribute(String attribute, Object value)
-        throws IOException
-    {
-        ByteBuffer bb;
-        if (value instanceof byte[]) {
-            bb = ByteBuffer.wrap((byte[])value);
-        } else {
-            bb = (ByteBuffer)value;
-        }
-        write(attribute, bb);
-    }
-
-    @Override
-    public final Map<String,Object> readAttributes(String[] attributes)
-        throws IOException
-    {
-        // names of attributes to return
-        List<String> names = new ArrayList<>();
-        for (String name: attributes) {
-            if (name.equals("*")) {
-                names = list();
-                break;
-            } else {
-                if (name.length() == 0)
-                    throw new IllegalArgumentException();
-                names.add(name);
-            }
-        }
-
-        // read each value and return in map
-        Map<String,Object> result = new HashMap<>();
-        for (String name: names) {
-            int size = size(name);
-            byte[] buf = new byte[size];
-            int n = read(name, ByteBuffer.wrap(buf));
-            byte[] value = (n == size) ? buf : Arrays.copyOf(buf, n);
-            result.put(name, value);
-        }
-        return result;
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/BsdFileStore.java b/ojluni/src/main/java/sun/nio/fs/BsdFileStore.java
deleted file mode 100755
index 9dfc791..0000000
--- a/ojluni/src/main/java/sun/nio/fs/BsdFileStore.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2008, 2010, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.attribute.*;
-import java.util.*;
-import java.io.IOException;
-
-/**
- * Bsd implementation of FileStore
- */
-
-class BsdFileStore
-    extends UnixFileStore
-{
-    BsdFileStore(UnixPath file) throws IOException {
-        super(file);
-    }
-
-    BsdFileStore(UnixFileSystem fs, UnixMountEntry entry) throws IOException {
-        super(fs, entry);
-    }
-
-    /**
-     * Finds, and returns, the mount entry for the file system where the file
-     * resides.
-     */
-    @Override
-    UnixMountEntry findMountEntry() throws IOException {
-        UnixFileSystem fs = file().getFileSystem();
-
-        // step 1: get realpath
-        UnixPath path = null;
-        try {
-            byte[] rp = UnixNativeDispatcher.realpath(file());
-            path = new UnixPath(fs, rp);
-        } catch (UnixException x) {
-            x.rethrowAsIOException(file());
-        }
-
-        // step 2: find mount point
-        UnixPath parent = path.getParent();
-        while (parent != null) {
-            UnixFileAttributes attrs = null;
-            try {
-                attrs = UnixFileAttributes.get(parent, true);
-            } catch (UnixException x) {
-                x.rethrowAsIOException(parent);
-            }
-            if (attrs.dev() != dev())
-                break;
-            path = parent;
-            parent = parent.getParent();
-        }
-
-        // step 3: lookup mounted file systems
-        byte[] dir = path.asByteArray();
-        for (UnixMountEntry entry: fs.getMountEntries()) {
-            if (Arrays.equals(dir, entry.dir()))
-                return entry;
-        }
-
-        throw new IOException("Mount point not found in fstab");
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/BsdFileSystem.java b/ojluni/src/main/java/sun/nio/fs/BsdFileSystem.java
deleted file mode 100755
index 873feea..0000000
--- a/ojluni/src/main/java/sun/nio/fs/BsdFileSystem.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.io.IOException;
-import java.util.*;
-import java.security.AccessController;
-import sun.security.action.GetPropertyAction;
-
-/**
- * Bsd implementation of FileSystem
- */
-
-class BsdFileSystem extends UnixFileSystem {
-
-    BsdFileSystem(UnixFileSystemProvider provider, String dir) {
-        super(provider, dir);
-    }
-
-    @Override
-    public WatchService newWatchService()
-        throws IOException
-    {
-        // use polling implementation until we implement a BSD/kqueue one
-        return new PollingWatchService();
-    }
-
-    // lazy initialization of the list of supported attribute views
-    private static class SupportedFileFileAttributeViewsHolder {
-        static final Set<String> supportedFileAttributeViews =
-            supportedFileAttributeViews();
-        private static Set<String> supportedFileAttributeViews() {
-            Set<String> result = new HashSet<String>();
-            result.addAll(standardFileAttributeViews());
-            return Collections.unmodifiableSet(result);
-        }
-    }
-
-    @Override
-    public Set<String> supportedFileAttributeViews() {
-        return SupportedFileFileAttributeViewsHolder.supportedFileAttributeViews;
-    }
-
-    @Override
-    void copyNonPosixAttributes(int ofd, int nfd) {
-    }
-
-    /**
-     * Returns object to iterate over mount entries
-     */
-    @Override
-    Iterable<UnixMountEntry> getMountEntries() {
-        ArrayList<UnixMountEntry> entries = new ArrayList<UnixMountEntry>();
-        try {
-            long iter = BsdNativeDispatcher.getfsstat();
-            try {
-                for (;;) {
-                    UnixMountEntry entry = new UnixMountEntry();
-                    int res = BsdNativeDispatcher.fsstatEntry(iter, entry);
-                    if (res < 0)
-                        break;
-                    entries.add(entry);
-                }
-            } finally {
-                BsdNativeDispatcher.endfsstat(iter);
-            }
-
-        } catch (UnixException x) {
-            // nothing we can do
-        }
-        return entries;
-    }
-
-
-
-    @Override
-    FileStore getFileStore(UnixMountEntry entry) throws IOException {
-        return new BsdFileStore(this, entry);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/BsdFileSystemProvider.java b/ojluni/src/main/java/sun/nio/fs/BsdFileSystemProvider.java
deleted file mode 100755
index 73c7e83..0000000
--- a/ojluni/src/main/java/sun/nio/fs/BsdFileSystemProvider.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.nio.file.attribute.*;
-import java.io.IOException;
-
-/**
- * Bsd implementation of FileSystemProvider
- */
-
-public class BsdFileSystemProvider extends UnixFileSystemProvider {
-    public BsdFileSystemProvider() {
-        super();
-    }
-
-    @Override
-    BsdFileSystem newFileSystem(String dir) {
-        return new BsdFileSystem(this, dir);
-    }
-
-    @Override
-    BsdFileStore getFileStore(UnixPath path) throws IOException {
-        return new BsdFileStore(path);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/BsdNativeDispatcher.java b/ojluni/src/main/java/sun/nio/fs/BsdNativeDispatcher.java
deleted file mode 100755
index 83b668c..0000000
--- a/ojluni/src/main/java/sun/nio/fs/BsdNativeDispatcher.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-package sun.nio.fs;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-/**
- * Bsd specific system calls.
- */
-
-class BsdNativeDispatcher extends UnixNativeDispatcher {
-    protected BsdNativeDispatcher() { }
-
-   /**
-    * struct fsstat_iter *getfsstat();
-    */
-    static native long getfsstat() throws UnixException;
-
-   /**
-    * int fsstatEntry(struct fsstat_iter * iter, UnixMountEntry entry);
-    */
-    static native int fsstatEntry(long iter, UnixMountEntry entry)
-        throws UnixException;
-
-   /**
-    * void endfsstat(struct fsstat_iter * iter);
-    */
-    static native void endfsstat(long iter) throws UnixException;
-
-    // initialize field IDs
-    private static native void initIDs();
-
-    static {
-         initIDs();
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/GnomeFileTypeDetector.java b/ojluni/src/main/java/sun/nio/fs/GnomeFileTypeDetector.java
deleted file mode 100755
index af3a474..0000000
--- a/ojluni/src/main/java/sun/nio/fs/GnomeFileTypeDetector.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.Path;
-import java.io.IOException;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-/**
- * File type detector that uses the GNOME I/O library or the deprecated
- * GNOME VFS to guess the MIME type of a file.
- */
-
-public class GnomeFileTypeDetector
-    extends AbstractFileTypeDetector
-{
-    private static final String GNOME_VFS_MIME_TYPE_UNKNOWN =
-        "application/octet-stream";
-
-    // true if GIO available
-    private final boolean gioAvailable;
-
-    // true if GNOME VFS available and GIO is not available
-    private final boolean gnomeVfsAvailable;
-
-    public GnomeFileTypeDetector() {
-        gioAvailable = initializeGio();
-        if (gioAvailable) {
-            gnomeVfsAvailable = false;
-        } else {
-            gnomeVfsAvailable = initializeGnomeVfs();
-        }
-    }
-
-    @Override
-    public String implProbeContentType(Path obj) throws IOException {
-        if (!gioAvailable && !gnomeVfsAvailable)
-            return null;
-        if (!(obj instanceof UnixPath))
-            return null;
-
-        UnixPath path = (UnixPath)obj;
-        NativeBuffer buffer = NativeBuffers.asNativeBuffer(path.getByteArrayForSysCalls());
-        try {
-            if (gioAvailable) {
-                // GIO may access file so need permission check
-                path.checkRead();
-                byte[] type = probeUsingGio(buffer.address());
-                return (type == null) ? null : new String(type);
-            } else {
-                byte[] type = probeUsingGnomeVfs(buffer.address());
-                if (type == null)
-                    return null;
-                String s = new String(type);
-                return s.equals(GNOME_VFS_MIME_TYPE_UNKNOWN) ? null : s;
-            }
-        } finally {
-            buffer.release();
-        }
-
-    }
-
-    // GIO
-    private static native boolean initializeGio();
-    private static native byte[] probeUsingGio(long pathAddress);
-
-    // GNOME VFS
-    private static native boolean initializeGnomeVfs();
-    private static native byte[] probeUsingGnomeVfs(long pathAddress);
-
-    static {
-        AccessController.doPrivileged(new PrivilegedAction<Void>() {
-            public Void run() {
-                System.loadLibrary("nio");
-                return null;
-        }});
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/LinuxDosFileAttributeView.java b/ojluni/src/main/java/sun/nio/fs/LinuxDosFileAttributeView.java
deleted file mode 100755
index 4a97e09..0000000
--- a/ojluni/src/main/java/sun/nio/fs/LinuxDosFileAttributeView.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.attribute.*;
-import java.util.Map;
-import java.util.Set;
-import java.io.IOException;
-import sun.misc.Unsafe;
-
-import static sun.nio.fs.UnixNativeDispatcher.*;
-import static sun.nio.fs.UnixConstants.*;
-
-/**
- * Linux implementation of DosFileAttributeView for use on file systems such
- * as ext3 that have extended attributes enabled and SAMBA configured to store
- * DOS attributes.
- */
-
-class LinuxDosFileAttributeView
-    extends UnixFileAttributeViews.Basic implements DosFileAttributeView
-{
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-
-    private static final String READONLY_NAME = "readonly";
-    private static final String ARCHIVE_NAME = "archive";
-    private static final String SYSTEM_NAME = "system";
-    private static final String HIDDEN_NAME = "hidden";
-
-    private static final String DOS_XATTR_NAME = "user.DOSATTRIB";
-    private static final byte[] DOS_XATTR_NAME_AS_BYTES = DOS_XATTR_NAME.getBytes();
-
-    private static final int DOS_XATTR_READONLY = 0x01;
-    private static final int DOS_XATTR_HIDDEN   = 0x02;
-    private static final int DOS_XATTR_SYSTEM   = 0x04;
-    private static final int DOS_XATTR_ARCHIVE  = 0x20;
-
-    // the names of the DOS attributes (includes basic)
-    private static final Set<String> dosAttributeNames =
-        Util.newSet(basicAttributeNames, READONLY_NAME, ARCHIVE_NAME, SYSTEM_NAME, HIDDEN_NAME);
-
-    LinuxDosFileAttributeView(UnixPath file, boolean followLinks) {
-        super(file, followLinks);
-    }
-
-    @Override
-    public String name() {
-        return "dos";
-    }
-
-    @Override
-    public void setAttribute(String attribute, Object value)
-        throws IOException
-    {
-        if (attribute.equals(READONLY_NAME)) {
-            setReadOnly((Boolean)value);
-            return;
-        }
-        if (attribute.equals(ARCHIVE_NAME)) {
-            setArchive((Boolean)value);
-            return;
-        }
-        if (attribute.equals(SYSTEM_NAME)) {
-            setSystem((Boolean)value);
-            return;
-        }
-        if (attribute.equals(HIDDEN_NAME)) {
-            setHidden((Boolean)value);
-            return;
-        }
-        super.setAttribute(attribute, value);
-    }
-
-    @Override
-    public Map<String,Object> readAttributes(String[] attributes)
-        throws IOException
-    {
-        AttributesBuilder builder =
-            AttributesBuilder.create(dosAttributeNames, attributes);
-        DosFileAttributes attrs = readAttributes();
-        addRequestedBasicAttributes(attrs, builder);
-        if (builder.match(READONLY_NAME))
-            builder.add(READONLY_NAME, attrs.isReadOnly());
-        if (builder.match(ARCHIVE_NAME))
-            builder.add(ARCHIVE_NAME, attrs.isArchive());
-        if (builder.match(SYSTEM_NAME))
-            builder.add(SYSTEM_NAME, attrs.isSystem());
-        if (builder.match(HIDDEN_NAME))
-            builder.add(HIDDEN_NAME, attrs.isHidden());
-        return builder.unmodifiableMap();
-    }
-
-    @Override
-    public DosFileAttributes readAttributes() throws IOException {
-        file.checkRead();
-
-        int fd = file.openForAttributeAccess(followLinks);
-        try {
-             final UnixFileAttributes attrs = UnixFileAttributes.get(fd);
-             final int dosAttribute = getDosAttribute(fd);
-
-             return new DosFileAttributes() {
-                @Override
-                public FileTime lastModifiedTime() {
-                    return attrs.lastModifiedTime();
-                }
-                @Override
-                public FileTime lastAccessTime() {
-                    return attrs.lastAccessTime();
-                }
-                @Override
-                public FileTime creationTime() {
-                    return attrs.creationTime();
-                }
-                @Override
-                public boolean isRegularFile() {
-                    return attrs.isRegularFile();
-                }
-                @Override
-                public boolean isDirectory() {
-                    return attrs.isDirectory();
-                }
-                @Override
-                public boolean isSymbolicLink() {
-                    return attrs.isSymbolicLink();
-                }
-                @Override
-                public boolean isOther() {
-                    return attrs.isOther();
-                }
-                @Override
-                public long size() {
-                    return attrs.size();
-                }
-                @Override
-                public Object fileKey() {
-                    return attrs.fileKey();
-                }
-                @Override
-                public boolean isReadOnly() {
-                    return (dosAttribute & DOS_XATTR_READONLY) != 0;
-                }
-                @Override
-                public boolean isHidden() {
-                    return (dosAttribute & DOS_XATTR_HIDDEN) != 0;
-                }
-                @Override
-                public boolean isArchive() {
-                    return (dosAttribute & DOS_XATTR_ARCHIVE) != 0;
-                }
-                @Override
-                public boolean isSystem() {
-                    return (dosAttribute & DOS_XATTR_SYSTEM) != 0;
-                }
-             };
-
-        } catch (UnixException x) {
-            x.rethrowAsIOException(file);
-            return null;    // keep compiler happy
-        } finally {
-            close(fd);
-        }
-    }
-
-    @Override
-    public void setReadOnly(boolean value) throws IOException {
-        updateDosAttribute(DOS_XATTR_READONLY, value);
-    }
-
-    @Override
-    public void setHidden(boolean value) throws IOException {
-        updateDosAttribute(DOS_XATTR_HIDDEN, value);
-    }
-
-    @Override
-    public void setArchive(boolean value) throws IOException {
-        updateDosAttribute(DOS_XATTR_ARCHIVE, value);
-    }
-
-    @Override
-    public void setSystem(boolean value) throws IOException {
-        updateDosAttribute(DOS_XATTR_SYSTEM, value);
-    }
-
-    /**
-     * Reads the value of the user.DOSATTRIB extended attribute
-     */
-    private int getDosAttribute(int fd) throws UnixException {
-        final int size = 24;
-
-        NativeBuffer buffer = NativeBuffers.getNativeBuffer(size);
-        try {
-            int len = LinuxNativeDispatcher
-                .fgetxattr(fd, DOS_XATTR_NAME_AS_BYTES, buffer.address(), size);
-
-            if (len > 0) {
-                // ignore null terminator
-                if (unsafe.getByte(buffer.address()+len-1) == 0)
-                    len--;
-
-                // convert to String and parse
-                byte[] buf = new byte[len];
-                unsafe.copyMemory(null, buffer.address(), buf,
-                    Unsafe.ARRAY_BYTE_BASE_OFFSET, len);
-                String value = new String(buf); // platform encoding
-
-                // should be something like 0x20
-                if (value.length() >= 3 && value.startsWith("0x")) {
-                    try {
-                        return Integer.parseInt(value.substring(2), 16);
-                    } catch (NumberFormatException x) {
-                        // ignore
-                    }
-                }
-            }
-            throw new UnixException("Value of " + DOS_XATTR_NAME + " attribute is invalid");
-        } catch (UnixException x) {
-            // default value when attribute does not exist
-            if (x.errno() == ENODATA)
-                return 0;
-            throw x;
-        } finally {
-            buffer.release();
-        }
-    }
-
-    /**
-     * Updates the value of the user.DOSATTRIB extended attribute
-     */
-    private void updateDosAttribute(int flag, boolean enable) throws IOException {
-        file.checkWrite();
-
-        int fd = file.openForAttributeAccess(followLinks);
-        try {
-            int oldValue = getDosAttribute(fd);
-            int newValue = oldValue;
-            if (enable) {
-                newValue |= flag;
-            } else {
-                newValue &= ~flag;
-            }
-            if (newValue != oldValue) {
-                byte[] value = ("0x" + Integer.toHexString(newValue)).getBytes();
-                NativeBuffer buffer = NativeBuffers.asNativeBuffer(value);
-                try {
-                    LinuxNativeDispatcher.fsetxattr(fd, DOS_XATTR_NAME_AS_BYTES,
-                        buffer.address(), value.length+1);
-                } finally {
-                    buffer.release();
-                }
-            }
-        } catch (UnixException x) {
-            x.rethrowAsIOException(file);
-        } finally {
-            close(fd);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/LinuxFileStore.java b/ojluni/src/main/java/sun/nio/fs/LinuxFileStore.java
deleted file mode 100755
index 0571227..0000000
--- a/ojluni/src/main/java/sun/nio/fs/LinuxFileStore.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 2008, 2010, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.attribute.*;
-import java.util.*;
-import java.io.IOException;
-
-/**
- * Linux implementation of FileStore
- */
-
-class LinuxFileStore
-    extends UnixFileStore
-{
-    // used when checking if extended attributes are enabled or not
-    private volatile boolean xattrChecked;
-    private volatile boolean xattrEnabled;
-
-    LinuxFileStore(UnixPath file) throws IOException {
-        super(file);
-    }
-
-    LinuxFileStore(UnixFileSystem fs, UnixMountEntry entry) throws IOException {
-        super(fs, entry);
-    }
-
-    /**
-     * Finds, and returns, the mount entry for the file system where the file
-     * resides.
-     */
-    @Override
-    UnixMountEntry findMountEntry() throws IOException {
-        LinuxFileSystem fs = (LinuxFileSystem)file().getFileSystem();
-
-        // step 1: get realpath
-        UnixPath path = null;
-        try {
-            byte[] rp = UnixNativeDispatcher.realpath(file());
-            path = new UnixPath(fs, rp);
-        } catch (UnixException x) {
-            x.rethrowAsIOException(file());
-        }
-
-        // step 2: find mount point
-        UnixPath parent = path.getParent();
-        while (parent != null) {
-            UnixFileAttributes attrs = null;
-            try {
-                attrs = UnixFileAttributes.get(parent, true);
-            } catch (UnixException x) {
-                x.rethrowAsIOException(parent);
-            }
-            if (attrs.dev() != dev())
-                break;
-            path = parent;
-            parent = parent.getParent();
-        }
-
-        // step 3: lookup mounted file systems (use /proc/mounts to ensure we
-        // find the file system even when not in /etc/mtab)
-        byte[] dir = path.asByteArray();
-        for (UnixMountEntry entry: fs.getMountEntries("/proc/mounts")) {
-            if (Arrays.equals(dir, entry.dir()))
-                return entry;
-        }
-
-        throw new IOException("Mount point not found");
-    }
-
-    // returns true if extended attributes enabled on file system where given
-    // file resides, returns false if disabled or unable to determine.
-    private boolean isExtendedAttributesEnabled(UnixPath path) {
-        try {
-            int fd = path.openForAttributeAccess(false);
-            try {
-                // fgetxattr returns size if called with size==0
-                LinuxNativeDispatcher.fgetxattr(fd, "user.java".getBytes(), 0L, 0);
-                return true;
-            } catch (UnixException e) {
-                // attribute does not exist
-                if (e.errno() == UnixConstants.ENODATA)
-                    return true;
-            } finally {
-                UnixNativeDispatcher.close(fd);
-            }
-        } catch (IOException ignore) {
-            // nothing we can do
-        }
-        return false;
-    }
-
-    @Override
-    public boolean supportsFileAttributeView(Class<? extends FileAttributeView> type) {
-        // support DosFileAttributeView and UserDefinedAttributeView if extended
-        // attributes enabled
-        if (type == DosFileAttributeView.class ||
-            type == UserDefinedFileAttributeView.class)
-        {
-            // lookup fstypes.properties
-            FeatureStatus status = checkIfFeaturePresent("user_xattr");
-            if (status == FeatureStatus.PRESENT)
-                return true;
-            if (status == FeatureStatus.NOT_PRESENT)
-                return false;
-
-            // if file system is mounted with user_xattr option then assume
-            // extended attributes are enabled
-            if ((entry().hasOption("user_xattr")))
-                return true;
-
-            // user_xattr option not present but we special-case ext3/4 as we
-            // know that extended attributes are not enabled by default.
-            if (entry().fstype().equals("ext3") || entry().fstype().equals("ext4"))
-                return false;
-
-            // not ext3/4 so probe mount point
-            if (!xattrChecked) {
-                UnixPath dir = new UnixPath(file().getFileSystem(), entry().dir());
-                xattrEnabled = isExtendedAttributesEnabled(dir);
-                xattrChecked = true;
-            }
-            return xattrEnabled;
-        }
-        return super.supportsFileAttributeView(type);
-    }
-
-    @Override
-    public boolean supportsFileAttributeView(String name) {
-        if (name.equals("dos"))
-            return supportsFileAttributeView(DosFileAttributeView.class);
-        if (name.equals("user"))
-            return supportsFileAttributeView(UserDefinedFileAttributeView.class);
-        return super.supportsFileAttributeView(name);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/LinuxFileSystem.java b/ojluni/src/main/java/sun/nio/fs/LinuxFileSystem.java
deleted file mode 100755
index fb6f6d1..0000000
--- a/ojluni/src/main/java/sun/nio/fs/LinuxFileSystem.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.io.IOException;
-import java.util.*;
-import static sun.nio.fs.LinuxNativeDispatcher.*;
-
-/**
- * Linux implementation of FileSystem
- */
-
-class LinuxFileSystem extends UnixFileSystem {
-    LinuxFileSystem(UnixFileSystemProvider provider, String dir) {
-        super(provider, dir);
-    }
-
-    @Override
-    public WatchService newWatchService()
-        throws IOException
-    {
-        // assume 2.6.13 or newer
-        return new LinuxWatchService(this);
-    }
-
-
-    // lazy initialization of the list of supported attribute views
-    private static class SupportedFileFileAttributeViewsHolder {
-        static final Set<String> supportedFileAttributeViews =
-            supportedFileAttributeViews();
-        private static Set<String> supportedFileAttributeViews() {
-            Set<String> result = new HashSet<>();
-            result.addAll(standardFileAttributeViews());
-            // additional Linux-specific views
-            result.add("dos");
-            result.add("user");
-            return Collections.unmodifiableSet(result);
-        }
-    }
-
-    @Override
-    public Set<String> supportedFileAttributeViews() {
-        return SupportedFileFileAttributeViewsHolder.supportedFileAttributeViews;
-    }
-
-    @Override
-    void copyNonPosixAttributes(int ofd, int nfd) {
-        LinuxUserDefinedFileAttributeView.copyExtendedAttributes(ofd, nfd);
-    }
-
-    /**
-     * Returns object to iterate over the mount entries in the given fstab file.
-     */
-    Iterable<UnixMountEntry> getMountEntries(String fstab) {
-        ArrayList<UnixMountEntry> entries = new ArrayList<>();
-        try {
-            long fp = setmntent(fstab.getBytes(), "r".getBytes());
-            try {
-                for (;;) {
-                    UnixMountEntry entry = new UnixMountEntry();
-                    int res = getmntent(fp, entry);
-                    if (res < 0)
-                        break;
-                    entries.add(entry);
-                }
-            } finally {
-                endmntent(fp);
-            }
-
-        } catch (UnixException x) {
-            // nothing we can do
-        }
-        return entries;
-    }
-
-    /**
-     * Returns object to iterate over the mount entries in /etc/mtab
-     */
-    @Override
-    Iterable<UnixMountEntry> getMountEntries() {
-        return getMountEntries("/etc/mtab");
-    }
-
-
-
-    @Override
-    FileStore getFileStore(UnixMountEntry entry) throws IOException {
-        return new LinuxFileStore(this, entry);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/LinuxFileSystemProvider.java b/ojluni/src/main/java/sun/nio/fs/LinuxFileSystemProvider.java
deleted file mode 100755
index 4d61598..0000000
--- a/ojluni/src/main/java/sun/nio/fs/LinuxFileSystemProvider.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.nio.file.attribute.*;
-import java.nio.file.spi.FileTypeDetector;
-import java.io.IOException;
-
-/**
- * Linux implementation of FileSystemProvider
- */
-
-public class LinuxFileSystemProvider extends UnixFileSystemProvider {
-    public LinuxFileSystemProvider() {
-        super();
-    }
-
-    @Override
-    LinuxFileSystem newFileSystem(String dir) {
-        return new LinuxFileSystem(this, dir);
-    }
-
-    @Override
-    LinuxFileStore getFileStore(UnixPath path) throws IOException {
-        return new LinuxFileStore(path);
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public <V extends FileAttributeView> V getFileAttributeView(Path obj,
-                                                                Class<V> type,
-                                                                LinkOption... options)
-    {
-        if (type == DosFileAttributeView.class) {
-            return (V) new LinuxDosFileAttributeView(UnixPath.toUnixPath(obj),
-                                                     Util.followLinks(options));
-        }
-        if (type == UserDefinedFileAttributeView.class) {
-            return (V) new LinuxUserDefinedFileAttributeView(UnixPath.toUnixPath(obj),
-                                                             Util.followLinks(options));
-        }
-        return super.getFileAttributeView(obj, type, options);
-    }
-
-    @Override
-    public DynamicFileAttributeView getFileAttributeView(Path obj,
-                                                         String name,
-                                                         LinkOption... options)
-    {
-        if (name.equals("dos")) {
-            return new LinuxDosFileAttributeView(UnixPath.toUnixPath(obj),
-                                                 Util.followLinks(options));
-        }
-        if (name.equals("user")) {
-            return new LinuxUserDefinedFileAttributeView(UnixPath.toUnixPath(obj),
-                                                         Util.followLinks(options));
-        }
-        return super.getFileAttributeView(obj, name, options);
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public <A extends BasicFileAttributes> A readAttributes(Path file,
-                                                            Class<A> type,
-                                                            LinkOption... options)
-        throws IOException
-    {
-        if (type == DosFileAttributes.class) {
-            DosFileAttributeView view =
-                getFileAttributeView(file, DosFileAttributeView.class, options);
-            return (A) view.readAttributes();
-        } else {
-            return super.readAttributes(file, type, options);
-        }
-    }
-
-    @Override
-    FileTypeDetector getFileTypeDetector() {
-        return new GnomeFileTypeDetector();
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/LinuxNativeDispatcher.java b/ojluni/src/main/java/sun/nio/fs/LinuxNativeDispatcher.java
deleted file mode 100755
index d657fcb..0000000
--- a/ojluni/src/main/java/sun/nio/fs/LinuxNativeDispatcher.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-package sun.nio.fs;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-/**
- * Linux specific system calls.
- */
-
-class LinuxNativeDispatcher extends UnixNativeDispatcher {
-    private LinuxNativeDispatcher() { }
-
-   /**
-    * FILE *setmntent(const char *filename, const char *type);
-    */
-    static long setmntent(byte[] filename, byte[] type) throws UnixException {
-        NativeBuffer pathBuffer = NativeBuffers.asNativeBuffer(filename);
-        NativeBuffer typeBuffer = NativeBuffers.asNativeBuffer(type);
-        try {
-            return setmntent0(pathBuffer.address(), typeBuffer.address());
-        } finally {
-            typeBuffer.release();
-            pathBuffer.release();
-        }
-    }
-    private static native long setmntent0(long pathAddress, long typeAddress)
-        throws UnixException;
-
-    /**
-     * int getmntent(FILE *fp, struct mnttab *mp, int len);
-     */
-    static native int getmntent(long fp, UnixMountEntry entry)
-        throws UnixException;
-
-    /**
-     * int endmntent(FILE* filep);
-     */
-    static native void endmntent(long stream) throws UnixException;
-
-    /**
-     * ssize_t fgetxattr(int filedes, const char *name, void *value, size_t size);
-     */
-    static int fgetxattr(int filedes, byte[] name, long valueAddress,
-                         int valueLen) throws UnixException
-    {
-        NativeBuffer buffer = NativeBuffers.asNativeBuffer(name);
-        try {
-            return fgetxattr0(filedes, buffer.address(), valueAddress, valueLen);
-        } finally {
-            buffer.release();
-        }
-    }
-
-    private static native int fgetxattr0(int filedes, long nameAddress,
-        long valueAdddress, int valueLen) throws UnixException;
-
-    /**
-     *  fsetxattr(int filedes, const char *name, const void *value, size_t size, int flags);
-     */
-    static void fsetxattr(int filedes, byte[] name, long valueAddress,
-        int valueLen) throws UnixException
-    {
-        NativeBuffer buffer = NativeBuffers.asNativeBuffer(name);
-        try {
-            fsetxattr0(filedes, buffer.address(), valueAddress, valueLen);
-        } finally {
-            buffer.release();
-        }
-    }
-
-    private static native void fsetxattr0(int filedes, long nameAddress,
-        long valueAdddress, int valueLen) throws UnixException;
-
-    /**
-     * fremovexattr(int filedes, const char *name);
-     */
-    static void fremovexattr(int filedes, byte[] name) throws UnixException {
-        NativeBuffer buffer = NativeBuffers.asNativeBuffer(name);
-        try {
-            fremovexattr0(filedes, buffer.address());
-        } finally {
-            buffer.release();
-        }
-    }
-
-    private static native void fremovexattr0(int filedes, long nameAddress)
-        throws UnixException;
-
-    /**
-     * size_t flistxattr(int filedes, const char *list, size_t size)
-     */
-    static native int flistxattr(int filedes, long listAddress, int size)
-        throws UnixException;
-
-    // initialize
-    private static native void init();
-
-    static {
-        AccessController.doPrivileged(new PrivilegedAction<Void>() {
-            public Void run() {
-                System.loadLibrary("nio");
-                return null;
-        }});
-        init();
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/LinuxUserDefinedFileAttributeView.java b/ojluni/src/main/java/sun/nio/fs/LinuxUserDefinedFileAttributeView.java
deleted file mode 100755
index 46e7f2c..0000000
--- a/ojluni/src/main/java/sun/nio/fs/LinuxUserDefinedFileAttributeView.java
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.nio.ByteBuffer;
-import java.io.IOException;
-import java.util.*;
-import sun.misc.Unsafe;
-
-import static sun.nio.fs.UnixConstants.*;
-import static sun.nio.fs.LinuxNativeDispatcher.*;
-
-/**
- * Linux implementation of UserDefinedFileAttributeView using extended attributes.
- */
-
-class LinuxUserDefinedFileAttributeView
-    extends AbstractUserDefinedFileAttributeView
-{
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-
-    // namespace for extended user attributes
-    private static final String USER_NAMESPACE = "user.";
-
-    // maximum bytes in extended attribute name (includes namespace)
-    private static final int XATTR_NAME_MAX = 255;
-
-    private byte[] nameAsBytes(UnixPath file, String name) throws IOException {
-        if (name == null)
-            throw new NullPointerException("'name' is null");
-        name = USER_NAMESPACE + name;
-        byte[] bytes = name.getBytes();
-        if (bytes.length > XATTR_NAME_MAX) {
-            throw new FileSystemException(file.getPathForExceptionMessage(),
-                null, "'" + name + "' is too big");
-        }
-        return bytes;
-    }
-
-    // Parses buffer as array of NULL-terminated C strings.
-    private List<String> asList(long address, int size) {
-        List<String> list = new ArrayList<>();
-        int start = 0;
-        int pos = 0;
-        while (pos < size) {
-            if (unsafe.getByte(address + pos) == 0) {
-                int len = pos - start;
-                byte[] value = new byte[len];
-                unsafe.copyMemory(null, address+start, value,
-                    Unsafe.ARRAY_BYTE_BASE_OFFSET, len);
-                String s = new String(value);
-                if (s.startsWith(USER_NAMESPACE)) {
-                    s = s.substring(USER_NAMESPACE.length());
-                    list.add(s);
-                }
-                start = pos + 1;
-            }
-            pos++;
-        }
-        return list;
-    }
-
-    private final UnixPath file;
-    private final boolean followLinks;
-
-    LinuxUserDefinedFileAttributeView(UnixPath file, boolean followLinks) {
-        this.file = file;
-        this.followLinks = followLinks;
-    }
-
-    @Override
-    public List<String> list() throws IOException  {
-        if (System.getSecurityManager() != null)
-            checkAccess(file.getPathForPermissionCheck(), true, false);
-
-        int fd = file.openForAttributeAccess(followLinks);
-        NativeBuffer buffer = null;
-        try {
-            int size = 1024;
-            buffer = NativeBuffers.getNativeBuffer(size);
-            for (;;) {
-                try {
-                    int n = flistxattr(fd, buffer.address(), size);
-                    List<String> list = asList(buffer.address(), n);
-                    return Collections.unmodifiableList(list);
-                } catch (UnixException x) {
-                    // allocate larger buffer if required
-                    if (x.errno() == ERANGE && size < 32*1024) {
-                        buffer.release();
-                        size *= 2;
-                        buffer = null;
-                        buffer = NativeBuffers.getNativeBuffer(size);
-                        continue;
-                    }
-                    throw new FileSystemException(file.getPathForExceptionMessage(),
-                        null, "Unable to get list of extended attributes: " +
-                        x.getMessage());
-                }
-            }
-        } finally {
-            if (buffer != null)
-                buffer.release();
-            close(fd);
-        }
-    }
-
-    @Override
-    public int size(String name) throws IOException  {
-        if (System.getSecurityManager() != null)
-            checkAccess(file.getPathForPermissionCheck(), true, false);
-
-        int fd = file.openForAttributeAccess(followLinks);
-        try {
-            // fgetxattr returns size if called with size==0
-            return fgetxattr(fd, nameAsBytes(file,name), 0L, 0);
-        } catch (UnixException x) {
-            throw new FileSystemException(file.getPathForExceptionMessage(),
-                null, "Unable to get size of extended attribute '" + name +
-                "': " + x.getMessage());
-        } finally {
-            close(fd);
-        }
-    }
-
-    @Override
-    public int read(String name, ByteBuffer dst) throws IOException {
-        if (System.getSecurityManager() != null)
-            checkAccess(file.getPathForPermissionCheck(), true, false);
-
-        if (dst.isReadOnly())
-            throw new IllegalArgumentException("Read-only buffer");
-        int pos = dst.position();
-        int lim = dst.limit();
-        assert (pos <= lim);
-        int rem = (pos <= lim ? lim - pos : 0);
-
-        NativeBuffer nb;
-        long address;
-        if (dst instanceof sun.nio.ch.DirectBuffer) {
-            nb = null;
-            address = ((sun.nio.ch.DirectBuffer)dst).address() + pos;
-        } else {
-            // substitute with native buffer
-            nb = NativeBuffers.getNativeBuffer(rem);
-            address = nb.address();
-        }
-
-        int fd = file.openForAttributeAccess(followLinks);
-        try {
-            try {
-                int n = fgetxattr(fd, nameAsBytes(file,name), address, rem);
-
-                // if remaining is zero then fgetxattr returns the size
-                if (rem == 0) {
-                    if (n > 0)
-                        throw new UnixException(ERANGE);
-                    return 0;
-                }
-
-                // copy from buffer into backing array if necessary
-                if (nb != null) {
-                    int off = dst.arrayOffset() + pos + Unsafe.ARRAY_BYTE_BASE_OFFSET;
-                    unsafe.copyMemory(null, address, dst.array(), off, n);
-                }
-                dst.position(pos + n);
-                return n;
-            } catch (UnixException x) {
-                String msg = (x.errno() == ERANGE) ?
-                    "Insufficient space in buffer" : x.getMessage();
-                throw new FileSystemException(file.getPathForExceptionMessage(),
-                    null, "Error reading extended attribute '" + name + "': " + msg);
-            } finally {
-                close(fd);
-            }
-        } finally {
-            if (nb != null)
-                nb.release();
-        }
-    }
-
-    @Override
-    public int write(String name, ByteBuffer src) throws IOException {
-        if (System.getSecurityManager() != null)
-            checkAccess(file.getPathForPermissionCheck(), false, true);
-
-        int pos = src.position();
-        int lim = src.limit();
-        assert (pos <= lim);
-        int rem = (pos <= lim ? lim - pos : 0);
-
-        NativeBuffer nb;
-        long address;
-        if (src instanceof sun.nio.ch.DirectBuffer) {
-            nb = null;
-            address = ((sun.nio.ch.DirectBuffer)src).address() + pos;
-        } else {
-            // substitute with native buffer
-            nb = NativeBuffers.getNativeBuffer(rem);
-            address = nb.address();
-
-            if (src.hasArray()) {
-                // copy from backing array into buffer
-                int off = src.arrayOffset() + pos + Unsafe.ARRAY_BYTE_BASE_OFFSET;
-                unsafe.copyMemory(src.array(), off, null, address, rem);
-            } else {
-                // backing array not accessible so transfer via temporary array
-                byte[] tmp = new byte[rem];
-                src.get(tmp);
-                src.position(pos);  // reset position as write may fail
-                unsafe.copyMemory(tmp, Unsafe.ARRAY_BYTE_BASE_OFFSET, null,
-                    address, rem);
-            }
-        }
-
-        int fd = file.openForAttributeAccess(followLinks);
-        try {
-            try {
-                fsetxattr(fd, nameAsBytes(file,name), address, rem);
-                src.position(pos + rem);
-                return rem;
-            } catch (UnixException x) {
-                throw new FileSystemException(file.getPathForExceptionMessage(),
-                    null, "Error writing extended attribute '" + name + "': " +
-                    x.getMessage());
-            } finally {
-                close(fd);
-            }
-        } finally {
-            if (nb != null)
-                nb.release();
-        }
-    }
-
-    @Override
-    public void delete(String name) throws IOException {
-        if (System.getSecurityManager() != null)
-            checkAccess(file.getPathForPermissionCheck(), false, true);
-
-        int fd = file.openForAttributeAccess(followLinks);
-        try {
-            fremovexattr(fd, nameAsBytes(file,name));
-        } catch (UnixException x) {
-            throw new FileSystemException(file.getPathForExceptionMessage(),
-                null, "Unable to delete extended attribute '" + name + "': " + x.getMessage());
-        } finally {
-            close(fd);
-        }
-    }
-
-    /**
-     * Used by copyTo/moveTo to copy extended attributes from source to target.
-     *
-     * @param   ofd
-     *          file descriptor for source file
-     * @param   nfd
-     *          file descriptor for target file
-     */
-    static void copyExtendedAttributes(int ofd, int nfd) {
-        NativeBuffer buffer = null;
-        try {
-
-            // call flistxattr to get list of extended attributes.
-            int size = 1024;
-            buffer = NativeBuffers.getNativeBuffer(size);
-            for (;;) {
-                try {
-                    size = flistxattr(ofd, buffer.address(), size);
-                    break;
-                } catch (UnixException x) {
-                    // allocate larger buffer if required
-                    if (x.errno() == ERANGE && size < 32*1024) {
-                        buffer.release();
-                        size *= 2;
-                        buffer = null;
-                        buffer = NativeBuffers.getNativeBuffer(size);
-                        continue;
-                    }
-
-                    // unable to get list of attributes
-                    return;
-                }
-            }
-
-            // parse buffer as array of NULL-terminated C strings.
-            long address = buffer.address();
-            int start = 0;
-            int pos = 0;
-            while (pos < size) {
-                if (unsafe.getByte(address + pos) == 0) {
-                    // extract attribute name and copy attribute to target.
-                    // FIXME: We can avoid needless copying by using address+pos
-                    // as the address of the name.
-                    int len = pos - start;
-                    byte[] name = new byte[len];
-                    unsafe.copyMemory(null, address+start, name,
-                        Unsafe.ARRAY_BYTE_BASE_OFFSET, len);
-                    try {
-                        copyExtendedAttribute(ofd, name, nfd);
-                    } catch (UnixException ignore) {
-                        // ignore
-                    }
-                    start = pos + 1;
-                }
-                pos++;
-            }
-
-        } finally {
-            if (buffer != null)
-                buffer.release();
-        }
-    }
-
-    private static void copyExtendedAttribute(int ofd, byte[] name, int nfd)
-        throws UnixException
-    {
-        int size = fgetxattr(ofd, name, 0L, 0);
-        NativeBuffer buffer = NativeBuffers.getNativeBuffer(size);
-        try {
-            long address = buffer.address();
-            size = fgetxattr(ofd, name, address, size);
-            fsetxattr(nfd, name, address, size);
-        } finally {
-            buffer.release();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/LinuxWatchService.java b/ojluni/src/main/java/sun/nio/fs/LinuxWatchService.java
deleted file mode 100755
index 8a2e8c6..0000000
--- a/ojluni/src/main/java/sun/nio/fs/LinuxWatchService.java
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.*;
-import java.io.IOException;
-import sun.misc.Unsafe;
-
-import static sun.nio.fs.UnixNativeDispatcher.*;
-import static sun.nio.fs.UnixConstants.*;
-
-/**
- * Linux implementation of WatchService based on inotify.
- *
- * In summary a background thread polls inotify plus a socket used for the wakeup
- * mechanism. Requests to add or remove a watch, or close the watch service,
- * cause the thread to wakeup and process the request. Events are processed
- * by the thread which causes it to signal/queue the corresponding watch keys.
- */
-
-class LinuxWatchService
-    extends AbstractWatchService
-{
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-
-    // background thread to read change events
-    private final Poller poller;
-
-    LinuxWatchService(UnixFileSystem fs) throws IOException {
-        // initialize inotify
-        int ifd = - 1;
-        try {
-            ifd = inotifyInit();
-        } catch (UnixException x) {
-            throw new IOException(x.errorString());
-        }
-
-        // configure inotify to be non-blocking
-        // create socketpair used in the close mechanism
-        int sp[] = new int[2];
-        try {
-            configureBlocking(ifd, false);
-            socketpair(sp);
-            configureBlocking(sp[0], false);
-        } catch (UnixException x) {
-            UnixNativeDispatcher.close(ifd);
-            throw new IOException(x.errorString());
-        }
-
-        this.poller = new Poller(fs, this, ifd, sp);
-        this.poller.start();
-    }
-
-    @Override
-    WatchKey register(Path dir,
-                      WatchEvent.Kind<?>[] events,
-                      WatchEvent.Modifier... modifiers)
-         throws IOException
-    {
-        // delegate to poller
-        return poller.register(dir, events, modifiers);
-    }
-
-    @Override
-    void implClose() throws IOException {
-        // delegate to poller
-        poller.close();
-    }
-
-    /**
-     * WatchKey implementation
-     */
-    private static class LinuxWatchKey extends AbstractWatchKey {
-        // inotify descriptor
-        private final int ifd;
-        // watch descriptor
-        private volatile int wd;
-
-        LinuxWatchKey(UnixPath dir, LinuxWatchService watcher, int ifd, int wd) {
-            super(dir, watcher);
-            this.ifd = ifd;
-            this.wd = wd;
-        }
-
-        int descriptor() {
-            return wd;
-        }
-
-        void invalidate(boolean remove) {
-            if (remove) {
-                try {
-                    inotifyRmWatch(ifd, wd);
-                } catch (UnixException x) {
-                    // ignore
-                }
-            }
-            wd = -1;
-        }
-
-        @Override
-        public boolean isValid() {
-            return (wd != -1);
-        }
-
-        @Override
-        public void cancel() {
-            if (isValid()) {
-                // delegate to poller
-                ((LinuxWatchService)watcher()).poller.cancel(this);
-            }
-        }
-    }
-
-    /**
-     * Background thread to read from inotify
-     */
-    private static class Poller extends AbstractPoller {
-        /**
-         * struct inotify_event {
-         *     int          wd;
-         *     uint32_t     mask;
-         *     uint32_t     len;
-         *     char name    __flexarr;  // present if len > 0
-         * } act_t;
-         */
-        private static final int SIZEOF_INOTIFY_EVENT  = eventSize();
-        private static final int[] offsets             = eventOffsets();
-        private static final int OFFSETOF_WD           = offsets[0];
-        private static final int OFFSETOF_MASK         = offsets[1];
-        private static final int OFFSETOF_LEN          = offsets[3];
-        private static final int OFFSETOF_NAME         = offsets[4];
-
-        private static final int IN_MODIFY          = 0x00000002;
-        private static final int IN_ATTRIB          = 0x00000004;
-        private static final int IN_MOVED_FROM      = 0x00000040;
-        private static final int IN_MOVED_TO        = 0x00000080;
-        private static final int IN_CREATE          = 0x00000100;
-        private static final int IN_DELETE          = 0x00000200;
-
-        private static final int IN_UNMOUNT         = 0x00002000;
-        private static final int IN_Q_OVERFLOW      = 0x00004000;
-        private static final int IN_IGNORED         = 0x00008000;
-
-        // sizeof buffer for when polling inotify
-        private static final int BUFFER_SIZE = 8192;
-
-        private final UnixFileSystem fs;
-        private final LinuxWatchService watcher;
-
-        // inotify file descriptor
-        private final int ifd;
-        // socketpair used to shutdown polling thread
-        private final int socketpair[];
-        // maps watch descriptor to Key
-        private final Map<Integer,LinuxWatchKey> wdToKey;
-        // address of read buffer
-        private final long address;
-
-        Poller(UnixFileSystem fs, LinuxWatchService watcher, int ifd, int[] sp) {
-            this.fs = fs;
-            this.watcher = watcher;
-            this.ifd = ifd;
-            this.socketpair = sp;
-            this.wdToKey = new HashMap<Integer,LinuxWatchKey>();
-            this.address = unsafe.allocateMemory(BUFFER_SIZE);
-        }
-
-        @Override
-        void wakeup() throws IOException {
-            // write to socketpair to wakeup polling thread
-            try {
-                write(socketpair[1], address, 1);
-            } catch (UnixException x) {
-                throw new IOException(x.errorString());
-            }
-        }
-
-        @Override
-        Object implRegister(Path obj,
-                            Set<? extends WatchEvent.Kind<?>> events,
-                            WatchEvent.Modifier... modifiers)
-        {
-            UnixPath dir = (UnixPath)obj;
-
-            int mask = 0;
-            for (WatchEvent.Kind<?> event: events) {
-                if (event == StandardWatchEventKinds.ENTRY_CREATE) {
-                    mask |= IN_CREATE | IN_MOVED_TO;
-                    continue;
-                }
-                if (event == StandardWatchEventKinds.ENTRY_DELETE) {
-                    mask |= IN_DELETE | IN_MOVED_FROM;
-                    continue;
-                }
-                if (event == StandardWatchEventKinds.ENTRY_MODIFY) {
-                    mask |= IN_MODIFY | IN_ATTRIB;
-                    continue;
-                }
-            }
-
-            // no modifiers supported at this time
-            if (modifiers.length > 0) {
-                for (WatchEvent.Modifier modifier: modifiers) {
-                    if (modifier == null)
-                        return new NullPointerException();
-                    if (modifier instanceof com.sun.nio.file.SensitivityWatchEventModifier)
-                        continue; // ignore
-                    return new UnsupportedOperationException("Modifier not supported");
-                }
-            }
-
-            // check file is directory
-            UnixFileAttributes attrs = null;
-            try {
-                attrs = UnixFileAttributes.get(dir, true);
-            } catch (UnixException x) {
-                return x.asIOException(dir);
-            }
-            if (!attrs.isDirectory()) {
-                return new NotDirectoryException(dir.getPathForExceptionMessage());
-            }
-
-            // register with inotify (replaces existing mask if already registered)
-            int wd = -1;
-            try {
-                NativeBuffer buffer =
-                    NativeBuffers.asNativeBuffer(dir.getByteArrayForSysCalls());
-                try {
-                    wd = inotifyAddWatch(ifd, buffer.address(), mask);
-                } finally {
-                    buffer.release();
-                }
-            } catch (UnixException x) {
-                if (x.errno() == ENOSPC) {
-                    return new IOException("User limit of inotify watches reached");
-                }
-                return x.asIOException(dir);
-            }
-
-            // ensure watch descriptor is in map
-            LinuxWatchKey key = wdToKey.get(wd);
-            if (key == null) {
-                key = new LinuxWatchKey(dir, watcher, ifd, wd);
-                wdToKey.put(wd, key);
-            }
-            return key;
-        }
-
-        // cancel single key
-        @Override
-        void implCancelKey(WatchKey obj) {
-            LinuxWatchKey key = (LinuxWatchKey)obj;
-            if (key.isValid()) {
-                wdToKey.remove(key.descriptor());
-                key.invalidate(true);
-            }
-        }
-
-        // close watch service
-        @Override
-        void implCloseAll() {
-            // invalidate all keys
-            for (Map.Entry<Integer,LinuxWatchKey> entry: wdToKey.entrySet()) {
-                entry.getValue().invalidate(true);
-            }
-            wdToKey.clear();
-
-            // free resources
-            unsafe.freeMemory(address);
-            UnixNativeDispatcher.close(socketpair[0]);
-            UnixNativeDispatcher.close(socketpair[1]);
-            UnixNativeDispatcher.close(ifd);
-        }
-
-        /**
-         * Poller main loop
-         */
-        @Override
-        public void run() {
-            try {
-                for (;;) {
-                    int nReady, bytesRead;
-
-                    // wait for close or inotify event
-                    nReady = poll(ifd, socketpair[0]);
-
-                    // read from inotify
-                    try {
-                        bytesRead = read(ifd, address, BUFFER_SIZE);
-                    } catch (UnixException x) {
-                        if (x.errno() != EAGAIN)
-                            throw x;
-                        bytesRead = 0;
-                    }
-
-                    // process any pending requests
-                    if ((nReady > 1) || (nReady == 1 && bytesRead == 0)) {
-                        try {
-                            read(socketpair[0], address, BUFFER_SIZE);
-                            boolean shutdown = processRequests();
-                            if (shutdown)
-                                break;
-                        } catch (UnixException x) {
-                            if (x.errno() != UnixConstants.EAGAIN)
-                                throw x;
-                        }
-                    }
-
-                    // iterate over buffer to decode events
-                    int offset = 0;
-                    while (offset < bytesRead) {
-                        long event = address + offset;
-                        int wd = unsafe.getInt(event + OFFSETOF_WD);
-                        int mask = unsafe.getInt(event + OFFSETOF_MASK);
-                        int len = unsafe.getInt(event + OFFSETOF_LEN);
-
-                        // file name
-                        UnixPath name = null;
-                        if (len > 0) {
-                            int actual = len;
-
-                            // null-terminated and maybe additional null bytes to
-                            // align the next event
-                            while (actual > 0) {
-                                long last = event + OFFSETOF_NAME + actual - 1;
-                                if (unsafe.getByte(last) != 0)
-                                    break;
-                                actual--;
-                            }
-                            if (actual > 0) {
-                                byte[] buf = new byte[actual];
-                                unsafe.copyMemory(null, event + OFFSETOF_NAME,
-                                    buf, Unsafe.ARRAY_BYTE_BASE_OFFSET, actual);
-                                name = new UnixPath(fs, buf);
-                            }
-                        }
-
-                        // process event
-                        processEvent(wd, mask, name);
-
-                        offset += (SIZEOF_INOTIFY_EVENT + len);
-                    }
-                }
-            } catch (UnixException x) {
-                x.printStackTrace();
-            }
-        }
-
-
-        /**
-         * map inotify event to WatchEvent.Kind
-         */
-        private WatchEvent.Kind<?> maskToEventKind(int mask) {
-            if ((mask & IN_MODIFY) > 0)
-                return StandardWatchEventKinds.ENTRY_MODIFY;
-            if ((mask & IN_ATTRIB) > 0)
-                return StandardWatchEventKinds.ENTRY_MODIFY;
-            if ((mask & IN_CREATE) > 0)
-                return StandardWatchEventKinds.ENTRY_CREATE;
-            if ((mask & IN_MOVED_TO) > 0)
-                return StandardWatchEventKinds.ENTRY_CREATE;
-            if ((mask & IN_DELETE) > 0)
-                return StandardWatchEventKinds.ENTRY_DELETE;
-            if ((mask & IN_MOVED_FROM) > 0)
-                return StandardWatchEventKinds.ENTRY_DELETE;
-            return null;
-        }
-
-        /**
-         * Process event from inotify
-         */
-        private void processEvent(int wd, int mask, final UnixPath name) {
-            // overflow - signal all keys
-            if ((mask & IN_Q_OVERFLOW) > 0) {
-                for (Map.Entry<Integer,LinuxWatchKey> entry: wdToKey.entrySet()) {
-                    entry.getValue()
-                        .signalEvent(StandardWatchEventKinds.OVERFLOW, null);
-                }
-                return;
-            }
-
-            // lookup wd to get key
-            LinuxWatchKey key = wdToKey.get(wd);
-            if (key == null)
-                return; // should not happen
-
-            // file deleted
-            if ((mask & IN_IGNORED) > 0) {
-                wdToKey.remove(wd);
-                key.invalidate(false);
-                key.signal();
-                return;
-            }
-
-            // event for directory itself
-            if (name == null)
-                return;
-
-            // map to event and queue to key
-            WatchEvent.Kind<?> kind = maskToEventKind(mask);
-            if (kind != null) {
-                key.signalEvent(kind, name);
-            }
-        }
-    }
-
-    // -- native methods --
-
-    // sizeof inotify_event
-    private static native int eventSize();
-
-    // offsets of inotify_event
-    private static native int[] eventOffsets();
-
-    private static native int inotifyInit() throws UnixException;
-
-    private static native int inotifyAddWatch(int fd, long pathAddress, int mask)
-        throws UnixException;
-
-    private static native void inotifyRmWatch(int fd, int wd)
-        throws UnixException;
-
-    private static native void configureBlocking(int fd, boolean blocking)
-        throws UnixException;
-
-    private static native void socketpair(int[] sv) throws UnixException;
-
-    private static native int poll(int fd1, int fd2) throws UnixException;
-
-    static {
-        AccessController.doPrivileged(new PrivilegedAction<Void>() {
-            public Void run() {
-                System.loadLibrary("nio");
-                return null;
-        }});
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/MacOSXFileSystem.java b/ojluni/src/main/java/sun/nio/fs/MacOSXFileSystem.java
deleted file mode 100755
index ab9888e7..0000000
--- a/ojluni/src/main/java/sun/nio/fs/MacOSXFileSystem.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.io.IOException;
-import java.util.*;
-import java.util.regex.Pattern;
-import java.security.AccessController;
-import sun.security.action.GetPropertyAction;
-
-import static sun.nio.fs.MacOSXNativeDispatcher.*;
-
-/**
- * MacOS implementation of FileSystem
- */
-
-class MacOSXFileSystem extends BsdFileSystem {
-
-    MacOSXFileSystem(UnixFileSystemProvider provider, String dir) {
-        super(provider, dir);
-    }
-
-    // match in unicode canon_eq
-    Pattern compilePathMatchPattern(String expr) {
-        return Pattern.compile(expr, Pattern.CANON_EQ) ;
-    }
-
-    char[] normalizeNativePath(char[] path) {
-        for (char c : path) {
-            if (c > 0x80)
-                return normalizepath(path, kCFStringNormalizationFormD);
-        }
-        return path;
-    }
-
-    String normalizeJavaPath(String path) {
-        for (int i = 0; i < path.length(); i++) {
-            if (path.charAt(i) > 0x80)
-                return new String(normalizepath(path.toCharArray(),
-                                  kCFStringNormalizationFormC));
-        }
-        return path;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/MacOSXFileSystemProvider.java b/ojluni/src/main/java/sun/nio/fs/MacOSXFileSystemProvider.java
deleted file mode 100755
index 5e48c00..0000000
--- a/ojluni/src/main/java/sun/nio/fs/MacOSXFileSystemProvider.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.nio.file.attribute.*;
-import java.io.IOException;
-
-/**
- * MacOSX implementation of FileSystemProvider
- */
-
-public class MacOSXFileSystemProvider extends BsdFileSystemProvider {
-    public MacOSXFileSystemProvider() {
-        super();
-    }
-
-    @Override
-    MacOSXFileSystem newFileSystem(String dir) {
-        return new MacOSXFileSystem(this, dir);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/MacOSXNativeDispatcher.java b/ojluni/src/main/java/sun/nio/fs/MacOSXNativeDispatcher.java
deleted file mode 100755
index d591857..0000000
--- a/ojluni/src/main/java/sun/nio/fs/MacOSXNativeDispatcher.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-package sun.nio.fs;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-/**
- * MacOSX specific system calls.
- */
-
-class MacOSXNativeDispatcher extends BsdNativeDispatcher {
-    private MacOSXNativeDispatcher() { }
-
-    static final int kCFStringNormalizationFormC = 2;
-    static final int kCFStringNormalizationFormD = 0;
-    static native char[] normalizepath(char[] path, int form);
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/PollingWatchService.java b/ojluni/src/main/java/sun/nio/fs/PollingWatchService.java
deleted file mode 100755
index 30de247..0000000
--- a/ojluni/src/main/java/sun/nio/fs/PollingWatchService.java
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.nio.file.attribute.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedExceptionAction;
-import java.security.PrivilegedActionException;
-import java.io.IOException;
-import java.util.*;
-import java.util.concurrent.*;
-import com.sun.nio.file.SensitivityWatchEventModifier;
-
-/**
- * Simple WatchService implementation that uses periodic tasks to poll
- * registered directories for changes.  This implementation is for use on
- * operating systems that do not have native file change notification support.
- */
-
-class PollingWatchService
-    extends AbstractWatchService
-{
-    // map of registrations
-    private final Map<Object,PollingWatchKey> map =
-        new HashMap<Object,PollingWatchKey>();
-
-    // used to execute the periodic tasks that poll for changes
-    private final ScheduledExecutorService scheduledExecutor;
-
-    PollingWatchService() {
-        // TBD: Make the number of threads configurable
-        scheduledExecutor = Executors
-            .newSingleThreadScheduledExecutor(new ThreadFactory() {
-                 @Override
-                 public Thread newThread(Runnable r) {
-                     Thread t = new Thread(r);
-                     t.setDaemon(true);
-                     return t;
-                 }});
-    }
-
-    /**
-     * Register the given file with this watch service
-     */
-    @Override
-    WatchKey register(final Path path,
-                      WatchEvent.Kind<?>[] events,
-                      WatchEvent.Modifier... modifiers)
-         throws IOException
-    {
-        // check events - CCE will be thrown if there are invalid elements
-        if (events.length == 0)
-            throw new IllegalArgumentException("No events to register");
-        final Set<WatchEvent.Kind<?>> eventSet =
-            new HashSet<WatchEvent.Kind<?>>(events.length);
-        for (WatchEvent.Kind<?> event: events) {
-            // standard events
-            if (event == StandardWatchEventKinds.ENTRY_CREATE ||
-                event == StandardWatchEventKinds.ENTRY_MODIFY ||
-                event == StandardWatchEventKinds.ENTRY_DELETE)
-            {
-                eventSet.add(event);
-                continue;
-            }
-
-            // OVERFLOW is ignored
-            if (event == StandardWatchEventKinds.OVERFLOW) {
-                if (events.length == 1)
-                    throw new IllegalArgumentException("No events to register");
-                continue;
-            }
-
-            // null/unsupported
-            if (event == null)
-                throw new NullPointerException("An element in event set is 'null'");
-            throw new UnsupportedOperationException(event.name());
-        }
-
-        // A modifier may be used to specify the sensitivity level
-        SensitivityWatchEventModifier sensivity = SensitivityWatchEventModifier.MEDIUM;
-        if (modifiers.length > 0) {
-            for (WatchEvent.Modifier modifier: modifiers) {
-                if (modifier == null)
-                    throw new NullPointerException();
-                if (modifier instanceof SensitivityWatchEventModifier) {
-                    sensivity = (SensitivityWatchEventModifier)modifier;
-                    continue;
-                }
-                throw new UnsupportedOperationException("Modifier not supported");
-            }
-        }
-
-        // check if watch service is closed
-        if (!isOpen())
-            throw new ClosedWatchServiceException();
-
-        // registration is done in privileged block as it requires the
-        // attributes of the entries in the directory.
-        try {
-            final SensitivityWatchEventModifier s = sensivity;
-            return AccessController.doPrivileged(
-                new PrivilegedExceptionAction<PollingWatchKey>() {
-                    @Override
-                    public PollingWatchKey run() throws IOException {
-                        return doPrivilegedRegister(path, eventSet, s);
-                    }
-                });
-        } catch (PrivilegedActionException pae) {
-            Throwable cause = pae.getCause();
-            if (cause != null && cause instanceof IOException)
-                throw (IOException)cause;
-            throw new AssertionError(pae);
-        }
-    }
-
-    // registers directory returning a new key if not already registered or
-    // existing key if already registered
-    private PollingWatchKey doPrivilegedRegister(Path path,
-                                                 Set<? extends WatchEvent.Kind<?>> events,
-                                                 SensitivityWatchEventModifier sensivity)
-        throws IOException
-    {
-        // check file is a directory and get its file key if possible
-        BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
-        if (!attrs.isDirectory()) {
-            throw new NotDirectoryException(path.toString());
-        }
-        Object fileKey = attrs.fileKey();
-        if (fileKey == null)
-            throw new AssertionError("File keys must be supported");
-
-        // grab close lock to ensure that watch service cannot be closed
-        synchronized (closeLock()) {
-            if (!isOpen())
-                throw new ClosedWatchServiceException();
-
-            PollingWatchKey watchKey;
-            synchronized (map) {
-                watchKey = map.get(fileKey);
-                if (watchKey == null) {
-                    // new registration
-                    watchKey = new PollingWatchKey(path, this, fileKey);
-                    map.put(fileKey, watchKey);
-                } else {
-                    // update to existing registration
-                    watchKey.disable();
-                }
-            }
-            watchKey.enable(events, sensivity.sensitivityValueInSeconds());
-            return watchKey;
-        }
-
-    }
-
-    @Override
-    void implClose() throws IOException {
-        synchronized (map) {
-            for (Map.Entry<Object,PollingWatchKey> entry: map.entrySet()) {
-                PollingWatchKey watchKey = entry.getValue();
-                watchKey.disable();
-                watchKey.invalidate();
-            }
-            map.clear();
-        }
-        AccessController.doPrivileged(new PrivilegedAction<Void>() {
-            @Override
-            public Void run() {
-                scheduledExecutor.shutdown();
-                return null;
-            }
-         });
-    }
-
-    /**
-     * Entry in directory cache to record file last-modified-time and tick-count
-     */
-    private static class CacheEntry {
-        private long lastModified;
-        private int lastTickCount;
-
-        CacheEntry(long lastModified, int lastTickCount) {
-            this.lastModified = lastModified;
-            this.lastTickCount = lastTickCount;
-        }
-
-        int lastTickCount() {
-            return lastTickCount;
-        }
-
-        long lastModified() {
-            return lastModified;
-        }
-
-        void update(long lastModified, int tickCount) {
-            this.lastModified = lastModified;
-            this.lastTickCount = tickCount;
-        }
-    }
-
-    /**
-     * WatchKey implementation that encapsulates a map of the entries of the
-     * entries in the directory. Polling the key causes it to re-scan the
-     * directory and queue keys when entries are added, modified, or deleted.
-     */
-    private class PollingWatchKey extends AbstractWatchKey {
-        private final Object fileKey;
-
-        // current event set
-        private Set<? extends WatchEvent.Kind<?>> events;
-
-        // the result of the periodic task that causes this key to be polled
-        private ScheduledFuture<?> poller;
-
-        // indicates if the key is valid
-        private volatile boolean valid;
-
-        // used to detect files that have been deleted
-        private int tickCount;
-
-        // map of entries in directory
-        private Map<Path,CacheEntry> entries;
-
-        PollingWatchKey(Path dir, PollingWatchService watcher, Object fileKey)
-            throws IOException
-        {
-            super(dir, watcher);
-            this.fileKey = fileKey;
-            this.valid = true;
-            this.tickCount = 0;
-            this.entries = new HashMap<Path,CacheEntry>();
-
-            // get the initial entries in the directory
-            try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
-                for (Path entry: stream) {
-                    // don't follow links
-                    long lastModified =
-                        Files.getLastModifiedTime(entry, LinkOption.NOFOLLOW_LINKS).toMillis();
-                    entries.put(entry.getFileName(), new CacheEntry(lastModified, tickCount));
-                }
-            } catch (DirectoryIteratorException e) {
-                throw e.getCause();
-            }
-        }
-
-        Object fileKey() {
-            return fileKey;
-        }
-
-        @Override
-        public boolean isValid() {
-            return valid;
-        }
-
-        void invalidate() {
-            valid = false;
-        }
-
-        // enables periodic polling
-        void enable(Set<? extends WatchEvent.Kind<?>> events, long period) {
-            synchronized (this) {
-                // update the events
-                this.events = events;
-
-                // create the periodic task
-                Runnable thunk = new Runnable() { public void run() { poll(); }};
-                this.poller = scheduledExecutor
-                    .scheduleAtFixedRate(thunk, period, period, TimeUnit.SECONDS);
-            }
-        }
-
-        // disables periodic polling
-        void disable() {
-            synchronized (this) {
-                if (poller != null)
-                    poller.cancel(false);
-            }
-        }
-
-        @Override
-        public void cancel() {
-            valid = false;
-            synchronized (map) {
-                map.remove(fileKey());
-            }
-            disable();
-        }
-
-        /**
-         * Polls the directory to detect for new files, modified files, or
-         * deleted files.
-         */
-        synchronized void poll() {
-            if (!valid) {
-                return;
-            }
-
-            // update tick
-            tickCount++;
-
-            // open directory
-            DirectoryStream<Path> stream = null;
-            try {
-                stream = Files.newDirectoryStream(watchable());
-            } catch (IOException x) {
-                // directory is no longer accessible so cancel key
-                cancel();
-                signal();
-                return;
-            }
-
-            // iterate over all entries in directory
-            try {
-                for (Path entry: stream) {
-                    long lastModified = 0L;
-                    try {
-                        lastModified =
-                            Files.getLastModifiedTime(entry, LinkOption.NOFOLLOW_LINKS).toMillis();
-                    } catch (IOException x) {
-                        // unable to get attributes of entry. If file has just
-                        // been deleted then we'll report it as deleted on the
-                        // next poll
-                        continue;
-                    }
-
-                    // lookup cache
-                    CacheEntry e = entries.get(entry.getFileName());
-                    if (e == null) {
-                        // new file found
-                        entries.put(entry.getFileName(),
-                                     new CacheEntry(lastModified, tickCount));
-
-                        // queue ENTRY_CREATE if event enabled
-                        if (events.contains(StandardWatchEventKinds.ENTRY_CREATE)) {
-                            signalEvent(StandardWatchEventKinds.ENTRY_CREATE, entry.getFileName());
-                            continue;
-                        } else {
-                            // if ENTRY_CREATE is not enabled and ENTRY_MODIFY is
-                            // enabled then queue event to avoid missing out on
-                            // modifications to the file immediately after it is
-                            // created.
-                            if (events.contains(StandardWatchEventKinds.ENTRY_MODIFY)) {
-                                signalEvent(StandardWatchEventKinds.ENTRY_MODIFY, entry.getFileName());
-                            }
-                        }
-                        continue;
-                    }
-
-                    // check if file has changed
-                    if (e.lastModified != lastModified) {
-                        if (events.contains(StandardWatchEventKinds.ENTRY_MODIFY)) {
-                            signalEvent(StandardWatchEventKinds.ENTRY_MODIFY,
-                                        entry.getFileName());
-                        }
-                    }
-                    // entry in cache so update poll time
-                    e.update(lastModified, tickCount);
-
-                }
-            } catch (DirectoryIteratorException e) {
-                // ignore for now; if the directory is no longer accessible
-                // then the key will be cancelled on the next poll
-            } finally {
-
-                // close directory stream
-                try {
-                    stream.close();
-                } catch (IOException x) {
-                    // ignore
-                }
-            }
-
-            // iterate over cache to detect entries that have been deleted
-            Iterator<Map.Entry<Path,CacheEntry>> i = entries.entrySet().iterator();
-            while (i.hasNext()) {
-                Map.Entry<Path,CacheEntry> mapEntry = i.next();
-                CacheEntry entry = mapEntry.getValue();
-                if (entry.lastTickCount() != tickCount) {
-                    Path name = mapEntry.getKey();
-                    // remove from map and queue delete event (if enabled)
-                    i.remove();
-                    if (events.contains(StandardWatchEventKinds.ENTRY_DELETE)) {
-                        signalEvent(StandardWatchEventKinds.ENTRY_DELETE, name);
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/Reflect.java b/ojluni/src/main/java/sun/nio/fs/Reflect.java
deleted file mode 100755
index 04c7700..0000000
--- a/ojluni/src/main/java/sun/nio/fs/Reflect.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-package sun.nio.fs;
-
-import java.lang.reflect.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-/**
- * Utility class for reflection.
- */
-
-class Reflect {
-    private Reflect() {}
-
-    private static void setAccessible(final AccessibleObject ao) {
-        AccessController.doPrivileged(new PrivilegedAction<Object>() {
-                @Override
-                public Object run() {
-                    ao.setAccessible(true);
-                    return null;
-                }});
-    }
-
-    /**
-     * Lookup the field of a given class.
-     */
-    static Field lookupField(String className, String fieldName) {
-        try {
-            Class<?> cl = Class.forName(className);
-            Field f = cl.getDeclaredField(fieldName);
-            setAccessible(f);
-            return f;
-        } catch (ClassNotFoundException x) {
-            throw new AssertionError(x);
-        } catch (NoSuchFieldException x) {
-            throw new AssertionError(x);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/SolarisAclFileAttributeView.java b/ojluni/src/main/java/sun/nio/fs/SolarisAclFileAttributeView.java
deleted file mode 100755
index 74c804d..0000000
--- a/ojluni/src/main/java/sun/nio/fs/SolarisAclFileAttributeView.java
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.nio.file.attribute.*;
-import java.util.*;
-import java.io.IOException;
-import sun.misc.Unsafe;
-
-import static sun.nio.fs.UnixConstants.*;
-import static sun.nio.fs.SolarisConstants.*;
-import static sun.nio.fs.SolarisNativeDispatcher.*;
-
-
-/**
- * Solaris implementation of AclFileAttributeView with native support for
- * NFSv4 ACLs on ZFS.
- */
-
-class SolarisAclFileAttributeView
-    extends AbstractAclFileAttributeView
-{
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-
-    // Maximum number of entries allowed in an ACL
-    private static final int MAX_ACL_ENTRIES = 1024;
-
-    /**
-     * typedef struct ace {
-     *     uid_t        a_who;
-     *     uint32_t     a_access_mask;
-     *     uint16_t     a_flags;
-     *     uint16_t     a_type;
-     * } ace_t;
-     */
-    private static final short SIZEOF_ACE_T     = 12;
-    private static final short OFFSETOF_UID     = 0;
-    private static final short OFFSETOF_MASK    = 4;
-    private static final short OFFSETOF_FLAGS   = 8;
-    private static final short OFFSETOF_TYPE    = 10;
-
-    private final UnixPath file;
-    private final boolean followLinks;
-
-    SolarisAclFileAttributeView(UnixPath file, boolean followLinks) {
-        this.file = file;
-        this.followLinks = followLinks;
-    }
-
-    /**
-     * Permission checks to access file
-     */
-    private void checkAccess(UnixPath file,
-                             boolean checkRead,
-                             boolean checkWrite)
-    {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-            if (checkRead)
-                file.checkRead();
-            if (checkWrite)
-                file.checkWrite();
-            sm.checkPermission(new RuntimePermission("accessUserInformation"));
-        }
-    }
-
-    /**
-     * Encode the ACL to the given buffer
-     */
-    private static void encode(List<AclEntry> acl, long address) {
-        long offset = address;
-        for (AclEntry ace: acl) {
-            int flags = 0;
-
-            // map UserPrincipal to uid and flags
-            UserPrincipal who = ace.principal();
-            if (!(who instanceof UnixUserPrincipals.User))
-                throw new ProviderMismatchException();
-            UnixUserPrincipals.User user = (UnixUserPrincipals.User)who;
-            int uid;
-            if (user.isSpecial()) {
-                uid = -1;
-                if (who == UnixUserPrincipals.SPECIAL_OWNER)
-                    flags |= ACE_OWNER;
-                else if (who == UnixUserPrincipals.SPECIAL_GROUP)
-                    flags |= (ACE_GROUP | ACE_IDENTIFIER_GROUP);
-                else if (who == UnixUserPrincipals.SPECIAL_EVERYONE)
-                    flags |= ACE_EVERYONE;
-                else
-                    throw new AssertionError("Unable to map special identifier");
-            } else {
-                if (user instanceof UnixUserPrincipals.Group) {
-                    uid = user.gid();
-                    flags |= ACE_IDENTIFIER_GROUP;
-                } else {
-                    uid = user.uid();
-                }
-            }
-
-            // map ACE type
-            int type;
-            switch (ace.type()) {
-                case ALLOW:
-                    type = ACE_ACCESS_ALLOWED_ACE_TYPE;
-                    break;
-                case DENY:
-                    type = ACE_ACCESS_DENIED_ACE_TYPE;
-                    break;
-                case AUDIT:
-                    type = ACE_SYSTEM_AUDIT_ACE_TYPE;
-                    break;
-                case ALARM:
-                    type = ACE_SYSTEM_ALARM_ACE_TYPE;
-                    break;
-                default:
-                    throw new AssertionError("Unable to map ACE type");
-            }
-
-            // map permissions
-            Set<AclEntryPermission> aceMask = ace.permissions();
-            int mask = 0;
-            if (aceMask.contains(AclEntryPermission.READ_DATA))
-                mask |= ACE_READ_DATA;
-            if (aceMask.contains(AclEntryPermission.WRITE_DATA))
-                mask |= ACE_WRITE_DATA;
-            if (aceMask.contains(AclEntryPermission.APPEND_DATA))
-                mask |= ACE_APPEND_DATA;
-            if (aceMask.contains(AclEntryPermission.READ_NAMED_ATTRS))
-                mask |= ACE_READ_NAMED_ATTRS;
-            if (aceMask.contains(AclEntryPermission.WRITE_NAMED_ATTRS))
-                mask |= ACE_WRITE_NAMED_ATTRS;
-            if (aceMask.contains(AclEntryPermission.EXECUTE))
-                mask |= ACE_EXECUTE;
-            if (aceMask.contains(AclEntryPermission.DELETE_CHILD))
-                mask |= ACE_DELETE_CHILD;
-            if (aceMask.contains(AclEntryPermission.READ_ATTRIBUTES))
-                mask |= ACE_READ_ATTRIBUTES;
-            if (aceMask.contains(AclEntryPermission.WRITE_ATTRIBUTES))
-                mask |= ACE_WRITE_ATTRIBUTES;
-            if (aceMask.contains(AclEntryPermission.DELETE))
-                mask |= ACE_DELETE;
-            if (aceMask.contains(AclEntryPermission.READ_ACL))
-                mask |= ACE_READ_ACL;
-            if (aceMask.contains(AclEntryPermission.WRITE_ACL))
-                mask |= ACE_WRITE_ACL;
-            if (aceMask.contains(AclEntryPermission.WRITE_OWNER))
-                mask |= ACE_WRITE_OWNER;
-            if (aceMask.contains(AclEntryPermission.SYNCHRONIZE))
-                mask |= ACE_SYNCHRONIZE;
-
-            // FIXME - it would be desirable to know here if the file is a
-            // directory or not. Solaris returns EINVAL if an ACE has a directory
-            // -only flag and the file is not a directory.
-            Set<AclEntryFlag> aceFlags = ace.flags();
-            if (aceFlags.contains(AclEntryFlag.FILE_INHERIT))
-                flags |= ACE_FILE_INHERIT_ACE;
-            if (aceFlags.contains(AclEntryFlag.DIRECTORY_INHERIT))
-                flags |= ACE_DIRECTORY_INHERIT_ACE;
-            if (aceFlags.contains(AclEntryFlag.NO_PROPAGATE_INHERIT))
-                flags |= ACE_NO_PROPAGATE_INHERIT_ACE;
-            if (aceFlags.contains(AclEntryFlag.INHERIT_ONLY))
-                flags |= ACE_INHERIT_ONLY_ACE;
-
-            unsafe.putInt(offset + OFFSETOF_UID, uid);
-            unsafe.putInt(offset + OFFSETOF_MASK, mask);
-            unsafe.putShort(offset + OFFSETOF_FLAGS, (short)flags);
-            unsafe.putShort(offset + OFFSETOF_TYPE, (short)type);
-
-            offset += SIZEOF_ACE_T;
-        }
-    }
-
-    /**
-     * Decode the buffer, returning an ACL
-     */
-    private static List<AclEntry> decode(long address, int n) {
-        ArrayList<AclEntry> acl = new ArrayList<>(n);
-        for (int i=0; i<n; i++) {
-            long offset = address + i*SIZEOF_ACE_T;
-
-            int uid = unsafe.getInt(offset + OFFSETOF_UID);
-            int mask = unsafe.getInt(offset + OFFSETOF_MASK);
-            int flags = (int)unsafe.getShort(offset + OFFSETOF_FLAGS);
-            int type = (int)unsafe.getShort(offset + OFFSETOF_TYPE);
-
-            // map uid and flags to UserPrincipal
-            UnixUserPrincipals.User who = null;
-            if ((flags & ACE_OWNER) > 0) {
-                who = UnixUserPrincipals.SPECIAL_OWNER;
-            } else if ((flags & ACE_GROUP) > 0) {
-                who = UnixUserPrincipals.SPECIAL_GROUP;
-            } else if ((flags & ACE_EVERYONE) > 0) {
-                who = UnixUserPrincipals.SPECIAL_EVERYONE;
-            } else if ((flags & ACE_IDENTIFIER_GROUP) > 0) {
-                who = UnixUserPrincipals.fromGid(uid);
-            } else {
-                who = UnixUserPrincipals.fromUid(uid);
-            }
-
-            AclEntryType aceType = null;
-            switch (type) {
-                case ACE_ACCESS_ALLOWED_ACE_TYPE:
-                    aceType = AclEntryType.ALLOW;
-                    break;
-                case ACE_ACCESS_DENIED_ACE_TYPE:
-                    aceType = AclEntryType.DENY;
-                    break;
-                case ACE_SYSTEM_AUDIT_ACE_TYPE:
-                    aceType = AclEntryType.AUDIT;
-                    break;
-                case ACE_SYSTEM_ALARM_ACE_TYPE:
-                    aceType = AclEntryType.ALARM;
-                    break;
-                default:
-                    assert false;
-            }
-
-            Set<AclEntryPermission> aceMask = EnumSet.noneOf(AclEntryPermission.class);
-            if ((mask & ACE_READ_DATA) > 0)
-                aceMask.add(AclEntryPermission.READ_DATA);
-            if ((mask & ACE_WRITE_DATA) > 0)
-                aceMask.add(AclEntryPermission.WRITE_DATA);
-            if ((mask & ACE_APPEND_DATA ) > 0)
-                aceMask.add(AclEntryPermission.APPEND_DATA);
-            if ((mask & ACE_READ_NAMED_ATTRS) > 0)
-                aceMask.add(AclEntryPermission.READ_NAMED_ATTRS);
-            if ((mask & ACE_WRITE_NAMED_ATTRS) > 0)
-                aceMask.add(AclEntryPermission.WRITE_NAMED_ATTRS);
-            if ((mask & ACE_EXECUTE) > 0)
-                aceMask.add(AclEntryPermission.EXECUTE);
-            if ((mask & ACE_DELETE_CHILD ) > 0)
-                aceMask.add(AclEntryPermission.DELETE_CHILD);
-            if ((mask & ACE_READ_ATTRIBUTES) > 0)
-                aceMask.add(AclEntryPermission.READ_ATTRIBUTES);
-            if ((mask & ACE_WRITE_ATTRIBUTES) > 0)
-                aceMask.add(AclEntryPermission.WRITE_ATTRIBUTES);
-            if ((mask & ACE_DELETE) > 0)
-                aceMask.add(AclEntryPermission.DELETE);
-            if ((mask & ACE_READ_ACL) > 0)
-                aceMask.add(AclEntryPermission.READ_ACL);
-            if ((mask & ACE_WRITE_ACL) > 0)
-                aceMask.add(AclEntryPermission.WRITE_ACL);
-            if ((mask & ACE_WRITE_OWNER) > 0)
-                aceMask.add(AclEntryPermission.WRITE_OWNER);
-            if ((mask & ACE_SYNCHRONIZE) > 0)
-                aceMask.add(AclEntryPermission.SYNCHRONIZE);
-
-            Set<AclEntryFlag> aceFlags = EnumSet.noneOf(AclEntryFlag.class);
-            if ((flags & ACE_FILE_INHERIT_ACE) > 0)
-                aceFlags.add(AclEntryFlag.FILE_INHERIT);
-            if ((flags & ACE_DIRECTORY_INHERIT_ACE) > 0)
-                aceFlags.add(AclEntryFlag.DIRECTORY_INHERIT);
-            if ((flags & ACE_NO_PROPAGATE_INHERIT_ACE) > 0)
-                aceFlags.add(AclEntryFlag.NO_PROPAGATE_INHERIT);
-            if ((flags & ACE_INHERIT_ONLY_ACE) > 0)
-                aceFlags.add(AclEntryFlag.INHERIT_ONLY);
-
-            // build the ACL entry and add it to the list
-            AclEntry ace = AclEntry.newBuilder()
-                .setType(aceType)
-                .setPrincipal(who)
-                .setPermissions(aceMask).setFlags(aceFlags).build();
-            acl.add(ace);
-        }
-
-        return acl;
-    }
-
-    // Retrns true if NFSv4 ACLs not enabled on file system
-    private static boolean isAclsEnabled(int fd) {
-        try {
-            long enabled = fpathconf(fd, _PC_ACL_ENABLED);
-            if (enabled == _ACL_ACE_ENABLED)
-                return true;
-        } catch (UnixException x) {
-        }
-        return false;
-    }
-
-    @Override
-    public List<AclEntry> getAcl()
-        throws IOException
-    {
-        // permission check
-        checkAccess(file, true, false);
-
-        // open file (will fail if file is a link and not following links)
-        int fd = file.openForAttributeAccess(followLinks);
-        try {
-            long address = unsafe.allocateMemory(SIZEOF_ACE_T * MAX_ACL_ENTRIES);
-            try {
-                // read ACL and decode it
-                int n = facl(fd, ACE_GETACL, MAX_ACL_ENTRIES, address);
-                assert n >= 0;
-                return decode(address, n);
-            } catch (UnixException x) {
-                if ((x.errno() == ENOSYS) || !isAclsEnabled(fd)) {
-                    throw new FileSystemException(file.getPathForExceptionMessage(),
-                        null, x.getMessage() + " (file system does not support NFSv4 ACLs)");
-                }
-                x.rethrowAsIOException(file);
-                return null;    // keep compiler happy
-            } finally {
-                unsafe.freeMemory(address);
-            }
-        } finally {
-            close(fd);
-        }
-    }
-
-    @Override
-    public void setAcl(List<AclEntry> acl) throws IOException {
-        // permission check
-        checkAccess(file, false, true);
-
-        // open file (will fail if file is a link and not following links)
-        int fd = file.openForAttributeAccess(followLinks);
-        try {
-            // SECURITY: need to copy list as can change during processing
-            acl = new ArrayList<AclEntry>(acl);
-            int n = acl.size();
-
-            long address = unsafe.allocateMemory(SIZEOF_ACE_T * n);
-            try {
-                encode(acl, address);
-                facl(fd, ACE_SETACL, n, address);
-            } catch (UnixException x) {
-                if ((x.errno() == ENOSYS) || !isAclsEnabled(fd)) {
-                    throw new FileSystemException(file.getPathForExceptionMessage(),
-                        null, x.getMessage() + " (file system does not support NFSv4 ACLs)");
-                }
-                if (x.errno() == EINVAL && (n < 3))
-                    throw new IOException("ACL must contain at least 3 entries");
-                x.rethrowAsIOException(file);
-            } finally {
-                unsafe.freeMemory(address);
-            }
-        } finally {
-            close(fd);
-        }
-    }
-
-    @Override
-    public UserPrincipal getOwner()
-        throws IOException
-    {
-        checkAccess(file, true, false);
-
-        try {
-            UnixFileAttributes attrs =
-                UnixFileAttributes.get(file, followLinks);
-            return UnixUserPrincipals.fromUid(attrs.uid());
-        } catch (UnixException x) {
-            x.rethrowAsIOException(file);
-            return null; // keep compile happy
-        }
-    }
-
-    @Override
-    public void setOwner(UserPrincipal owner) throws IOException {
-        checkAccess(file, true, false);
-
-        if (!(owner instanceof UnixUserPrincipals.User))
-            throw new ProviderMismatchException();
-        if (owner instanceof UnixUserPrincipals.Group)
-            throw new IOException("'owner' parameter is a group");
-        int uid = ((UnixUserPrincipals.User)owner).uid();
-
-        try {
-            if (followLinks) {
-                lchown(file, uid, -1);
-            } else {
-                chown(file, uid, -1);
-            }
-        } catch (UnixException x) {
-            x.rethrowAsIOException(file);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/SolarisFileStore.java b/ojluni/src/main/java/sun/nio/fs/SolarisFileStore.java
deleted file mode 100755
index 1fcda3e..0000000
--- a/ojluni/src/main/java/sun/nio/fs/SolarisFileStore.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (c) 2008, 2010, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.attribute.*;
-import java.io.IOException;
-
-import static sun.nio.fs.UnixNativeDispatcher.*;
-import static sun.nio.fs.SolarisConstants.*;
-
-/**
- * Solaris implementation of FileStore
- */
-
-class SolarisFileStore
-    extends UnixFileStore
-{
-    private final boolean xattrEnabled;
-
-    SolarisFileStore(UnixPath file) throws IOException {
-        super(file);
-        this.xattrEnabled = xattrEnabled();
-    }
-
-    SolarisFileStore(UnixFileSystem fs, UnixMountEntry entry) throws IOException {
-        super(fs, entry);
-        this.xattrEnabled = xattrEnabled();
-    }
-
-    // returns true if extended attributes enabled
-    private boolean xattrEnabled() {
-        long res = 0L;
-        try {
-            res = pathconf(file(), _PC_XATTR_ENABLED);
-        } catch (UnixException x) {
-            // ignore
-        }
-        return (res != 0L);
-    }
-
-    @Override
-    UnixMountEntry findMountEntry() throws IOException {
-        // On Solaris iterate over the entries in the mount table to find device
-        for (UnixMountEntry entry: file().getFileSystem().getMountEntries()) {
-            if (entry.dev() == dev()) {
-                return entry;
-            }
-        }
-        throw new IOException("Device not found in mnttab");
-    }
-
-    @Override
-    public boolean supportsFileAttributeView(Class<? extends FileAttributeView> type) {
-        if (type == AclFileAttributeView.class) {
-            // lookup fstypes.properties
-            FeatureStatus status = checkIfFeaturePresent("nfsv4acl");
-            switch (status) {
-                case PRESENT     : return true;
-                case NOT_PRESENT : return false;
-                default :
-                    // AclFileAttributeView available on ZFS
-                    return (type().equals("zfs"));
-            }
-        }
-        if (type == UserDefinedFileAttributeView.class) {
-            // lookup fstypes.properties
-            FeatureStatus status = checkIfFeaturePresent("xattr");
-            switch (status) {
-                case PRESENT     : return true;
-                case NOT_PRESENT : return false;
-                default :
-                    // UserDefinedFileAttributeView available if extended
-                    // attributes supported
-                    return xattrEnabled;
-            }
-        }
-        return super.supportsFileAttributeView(type);
-    }
-
-    @Override
-    public boolean supportsFileAttributeView(String name) {
-        if (name.equals("acl"))
-            return supportsFileAttributeView(AclFileAttributeView.class);
-        if (name.equals("user"))
-            return supportsFileAttributeView(UserDefinedFileAttributeView.class);
-        return super.supportsFileAttributeView(name);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/SolarisFileSystem.java b/ojluni/src/main/java/sun/nio/fs/SolarisFileSystem.java
deleted file mode 100755
index 14bc339..0000000
--- a/ojluni/src/main/java/sun/nio/fs/SolarisFileSystem.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.io.IOException;
-import java.util.*;
-import java.security.AccessController;
-import sun.security.action.GetPropertyAction;
-import static sun.nio.fs.SolarisNativeDispatcher.*;
-
-/**
- * Solaris implementation of FileSystem
- */
-
-class SolarisFileSystem extends UnixFileSystem {
-    private final boolean hasSolaris11Features;
-
-    SolarisFileSystem(UnixFileSystemProvider provider, String dir) {
-        super(provider, dir);
-
-        // check os.version
-        String osversion = AccessController
-            .doPrivileged(new GetPropertyAction("os.version"));
-        String[] vers = Util.split(osversion, '.');
-        assert vers.length >= 2;
-        int majorVersion = Integer.parseInt(vers[0]);
-        int minorVersion = Integer.parseInt(vers[1]);
-        this.hasSolaris11Features =
-            (majorVersion > 5 || (majorVersion == 5 && minorVersion >= 11));
-    }
-
-    @Override
-    boolean isSolaris() {
-        return true;
-    }
-
-    @Override
-    public WatchService newWatchService()
-        throws IOException
-    {
-        // FEN available since Solaris 11
-        if (hasSolaris11Features) {
-            return new SolarisWatchService(this);
-        } else {
-            return new PollingWatchService();
-        }
-    }
-
-
-    // lazy initialization of the list of supported attribute views
-    private static class SupportedFileFileAttributeViewsHolder {
-        static final Set<String> supportedFileAttributeViews =
-            supportedFileAttributeViews();
-        private static Set<String> supportedFileAttributeViews() {
-            Set<String> result = new HashSet<>();
-            result.addAll(standardFileAttributeViews());
-            // additional Solaris-specific views
-            result.add("acl");
-            result.add("user");
-            return Collections.unmodifiableSet(result);
-        }
-    }
-
-    @Override
-    public Set<String> supportedFileAttributeViews() {
-        return SupportedFileFileAttributeViewsHolder.supportedFileAttributeViews;
-    }
-
-    @Override
-    void copyNonPosixAttributes(int ofd, int nfd) {
-        SolarisUserDefinedFileAttributeView.copyExtendedAttributes(ofd, nfd);
-        // TDB: copy ACL from source to target
-    }
-
-    /**
-     * Returns object to iterate over entries in /etc/mnttab
-     */
-    @Override
-    Iterable<UnixMountEntry> getMountEntries() {
-        ArrayList<UnixMountEntry> entries = new ArrayList<>();
-        try {
-            UnixPath mnttab = new UnixPath(this, "/etc/mnttab");
-            long fp = fopen(mnttab, "r");
-            try {
-                for (;;) {
-                    UnixMountEntry entry = new UnixMountEntry();
-                    int res = getextmntent(fp, entry);
-                    if (res < 0)
-                        break;
-                    entries.add(entry);
-                }
-            } finally {
-                fclose(fp);
-            }
-        } catch (UnixException x) {
-            // nothing we can do
-        }
-        return entries;
-    }
-
-    @Override
-    FileStore getFileStore(UnixMountEntry entry) throws IOException {
-        return new SolarisFileStore(this, entry);
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/SolarisFileSystemProvider.java b/ojluni/src/main/java/sun/nio/fs/SolarisFileSystemProvider.java
deleted file mode 100755
index fec87c7..0000000
--- a/ojluni/src/main/java/sun/nio/fs/SolarisFileSystemProvider.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.nio.file.attribute.*;
-import java.nio.file.spi.FileTypeDetector;
-import java.io.IOException;
-
-/**
- * Solaris implementation of FileSystemProvider
- */
-
-public class SolarisFileSystemProvider extends UnixFileSystemProvider {
-    public SolarisFileSystemProvider() {
-        super();
-    }
-
-    @Override
-    SolarisFileSystem newFileSystem(String dir) {
-        return new SolarisFileSystem(this, dir);
-    }
-
-    @Override
-    SolarisFileStore getFileStore(UnixPath path) throws IOException {
-        return new SolarisFileStore(path);
-    }
-
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public <V extends FileAttributeView> V getFileAttributeView(Path obj,
-                                                                Class<V> type,
-                                                                LinkOption... options)
-    {
-        if (type == AclFileAttributeView.class) {
-            return (V) new SolarisAclFileAttributeView(UnixPath.toUnixPath(obj),
-                                                       Util.followLinks(options));
-        }
-        if (type == UserDefinedFileAttributeView.class) {
-            return(V) new SolarisUserDefinedFileAttributeView(UnixPath.toUnixPath(obj),
-                                                              Util.followLinks(options));
-        }
-        return super.getFileAttributeView(obj, type, options);
-    }
-
-    @Override
-    public DynamicFileAttributeView getFileAttributeView(Path obj,
-                                                         String name,
-                                                         LinkOption... options)
-    {
-        if (name.equals("acl"))
-            return new SolarisAclFileAttributeView(UnixPath.toUnixPath(obj),
-                                                   Util.followLinks(options));
-        if (name.equals("user"))
-            return new SolarisUserDefinedFileAttributeView(UnixPath.toUnixPath(obj),
-                                                           Util.followLinks(options));
-        return super.getFileAttributeView(obj, name, options);
-    }
-
-    @Override
-    FileTypeDetector getFileTypeDetector() {
-        return new GnomeFileTypeDetector();
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/SolarisNativeDispatcher.java b/ojluni/src/main/java/sun/nio/fs/SolarisNativeDispatcher.java
deleted file mode 100755
index 3d54b75..0000000
--- a/ojluni/src/main/java/sun/nio/fs/SolarisNativeDispatcher.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, 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.
- */
-
-package sun.nio.fs;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-/**
- * Solaris specific system calls.
- */
-
-class SolarisNativeDispatcher extends UnixNativeDispatcher {
-    private SolarisNativeDispatcher() { }
-
-    /**
-     * int getextmntent(FILE *fp, struct extmnttab *mp, int len);
-     */
-    static native int getextmntent(long fp, UnixMountEntry entry)
-        throws UnixException;
-
-    /**
-     * int facl(int filedes, int cmd, int nentries, void aclbufp)
-     */
-    static native int facl(int fd, int cmd, int nentries, long aclbufp)
-        throws UnixException;
-
-
-    // initialize
-    private static native void init();
-
-    static {
-        AccessController.doPrivileged(new PrivilegedAction<Void>() {
-            public Void run() {
-                System.loadLibrary("nio");
-                return null;
-        }});
-        init();
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/SolarisUserDefinedFileAttributeView.java b/ojluni/src/main/java/sun/nio/fs/SolarisUserDefinedFileAttributeView.java
deleted file mode 100755
index 150c633..0000000
--- a/ojluni/src/main/java/sun/nio/fs/SolarisUserDefinedFileAttributeView.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
-import java.io.IOException;
-import java.util.*;
-
-import static sun.nio.fs.UnixNativeDispatcher.*;
-import static sun.nio.fs.UnixConstants.*;
-import static sun.nio.fs.SolarisConstants.*;
-
-/**
- * Solaris emulation of NamedAttributeView using extended attributes.
- */
-
-class SolarisUserDefinedFileAttributeView
-    extends AbstractUserDefinedFileAttributeView
-{
-    private byte[] nameAsBytes(UnixPath file, String name) throws IOException {
-        byte[] bytes = name.getBytes();
-        //  "", "." and ".." not allowed
-        if (bytes.length == 0 || bytes[0] == '.') {
-            if (bytes.length <= 1 ||
-                (bytes.length == 2 && bytes[1] == '.'))
-            {
-                throw new FileSystemException(file.getPathForExceptionMessage(),
-                    null, "'" + name + "' is not a valid name");
-            }
-        }
-        return bytes;
-    }
-
-    private final UnixPath file;
-    private final boolean followLinks;
-
-    SolarisUserDefinedFileAttributeView(UnixPath file, boolean followLinks) {
-        this.file = file;
-        this.followLinks = followLinks;
-    }
-
-    @Override
-    public List<String> list() throws IOException  {
-        if (System.getSecurityManager() != null)
-            checkAccess(file.getPathForPermissionCheck(), true, false);
-
-        int fd = file.openForAttributeAccess(followLinks);
-        try {
-            try {
-                // open extended attribute directory
-                int dfd = openat(fd, ".".getBytes(), (O_RDONLY|O_XATTR), 0);
-                long dp;
-                try {
-                    dp = fdopendir(dfd);
-                } catch (UnixException x) {
-                    close(dfd);
-                    throw x;
-                }
-
-                // read list of extended attributes
-                List<String> list = new ArrayList<>();
-                try {
-                    byte[] name;
-                    while ((name = readdir(dp)) != null) {
-                        String s = new String(name);
-                        if (!s.equals(".") && !s.equals(".."))
-                            list.add(s);
-                    }
-                } finally {
-                    closedir(dp);
-                }
-                return Collections.unmodifiableList(list);
-            } catch (UnixException x) {
-                throw new FileSystemException(file.getPathForExceptionMessage(),
-                    null, "Unable to get list of extended attributes: " +
-                    x.getMessage());
-            }
-        } finally {
-            close(fd);
-        }
-    }
-
-    @Override
-    public int size(String name) throws IOException  {
-        if (System.getSecurityManager() != null)
-            checkAccess(file.getPathForPermissionCheck(), true, false);
-
-        int fd = file.openForAttributeAccess(followLinks);
-        try {
-            try {
-                // open attribute file
-                int afd = openat(fd, nameAsBytes(file,name), (O_RDONLY|O_XATTR), 0);
-                try {
-                    // read attribute's attributes
-                    UnixFileAttributes attrs = UnixFileAttributes.get(afd);
-                    long size = attrs.size();
-                    if (size > Integer.MAX_VALUE)
-                        throw new ArithmeticException("Extended attribute value too large");
-                    return (int)size;
-                } finally {
-                    close(afd);
-                }
-            } catch (UnixException x) {
-                throw new FileSystemException(file.getPathForExceptionMessage(),
-                    null, "Unable to get size of extended attribute '" + name +
-                    "': " + x.getMessage());
-            }
-        } finally {
-            close(fd);
-        }
-    }
-
-    @Override
-    public int read(String name, ByteBuffer dst) throws IOException {
-        if (System.getSecurityManager() != null)
-            checkAccess(file.getPathForPermissionCheck(), true, false);
-
-        int fd = file.openForAttributeAccess(followLinks);
-        try {
-            try {
-                // open attribute file
-                int afd = openat(fd, nameAsBytes(file,name), (O_RDONLY|O_XATTR), 0);
-
-                // wrap with channel
-                FileChannel fc = UnixChannelFactory.newFileChannel(afd, file.toString(), true, false);
-
-                // read to EOF (nothing we can do if I/O error occurs)
-                try {
-                    if (fc.size() > dst.remaining())
-                        throw new IOException("Extended attribute file too large");
-                    int total = 0;
-                    while (dst.hasRemaining()) {
-                        int n = fc.read(dst);
-                        if (n < 0)
-                            break;
-                        total += n;
-                    }
-                    return total;
-                } finally {
-                    fc.close();
-                }
-            } catch (UnixException x) {
-                throw new FileSystemException(file.getPathForExceptionMessage(),
-                    null, "Unable to read extended attribute '" + name +
-                    "': " + x.getMessage());
-            }
-        } finally {
-            close(fd);
-        }
-    }
-
-    @Override
-    public int write(String name, ByteBuffer src) throws IOException {
-        if (System.getSecurityManager() != null)
-            checkAccess(file.getPathForPermissionCheck(), false, true);
-
-        int fd = file.openForAttributeAccess(followLinks);
-        try {
-            try {
-                // open/create attribute file
-                int afd = openat(fd, nameAsBytes(file,name),
-                                 (O_CREAT|O_WRONLY|O_TRUNC|O_XATTR),
-                                 UnixFileModeAttribute.ALL_PERMISSIONS);
-
-                // wrap with channel
-                FileChannel fc = UnixChannelFactory.newFileChannel(afd, file.toString(), false, true);
-
-                // write value (nothing we can do if I/O error occurs)
-                try {
-                    int rem = src.remaining();
-                    while (src.hasRemaining()) {
-                        fc.write(src);
-                    }
-                    return rem;
-                } finally {
-                    fc.close();
-                }
-            } catch (UnixException x) {
-                throw new FileSystemException(file.getPathForExceptionMessage(),
-                    null, "Unable to write extended attribute '" + name +
-                    "': " + x.getMessage());
-            }
-        } finally {
-            close(fd);
-        }
-    }
-
-    @Override
-    public void delete(String name) throws IOException {
-        if (System.getSecurityManager() != null)
-            checkAccess(file.getPathForPermissionCheck(), false, true);
-
-        int fd = file.openForAttributeAccess(followLinks);
-        try {
-            int dfd = openat(fd, ".".getBytes(), (O_RDONLY|O_XATTR), 0);
-            try {
-                unlinkat(dfd, nameAsBytes(file,name), 0);
-            } finally {
-                close(dfd);
-            }
-        } catch (UnixException x) {
-            throw new FileSystemException(file.getPathForExceptionMessage(),
-                null, "Unable to delete extended attribute '" + name +
-                "': " + x.getMessage());
-        } finally {
-            close(fd);
-        }
-    }
-
-    /**
-     * Used by copyTo/moveTo to copy extended attributes from source to target.
-     *
-     * @param   ofd
-     *          file descriptor for source file
-     * @param   nfd
-     *          file descriptor for target file
-     */
-    static void copyExtendedAttributes(int ofd, int nfd) {
-        try {
-            // open extended attribute directory
-            int dfd = openat(ofd, ".".getBytes(), (O_RDONLY|O_XATTR), 0);
-            long dp = 0L;
-            try {
-                dp = fdopendir(dfd);
-            } catch (UnixException x) {
-                close(dfd);
-                throw x;
-            }
-
-            // copy each extended attribute
-            try {
-                byte[] name;
-                while ((name = readdir(dp)) != null) {
-                    // ignore "." and ".."
-                    if (name[0] == '.') {
-                        if (name.length == 1)
-                            continue;
-                        if (name.length == 2 && name[1] == '.')
-                            continue;
-                    }
-                    copyExtendedAttribute(ofd, name, nfd);
-                }
-            } finally {
-                closedir(dp);
-            }
-        } catch (UnixException ignore) {
-        }
-    }
-
-    private static void copyExtendedAttribute(int ofd, byte[] name, int nfd)
-        throws UnixException
-    {
-        // open source attribute file
-        int src = openat(ofd, name, (O_RDONLY|O_XATTR), 0);
-        try {
-            // create target attribute file
-            int dst = openat(nfd, name, (O_CREAT|O_WRONLY|O_TRUNC|O_XATTR),
-                UnixFileModeAttribute.ALL_PERMISSIONS);
-            try {
-                UnixCopyFile.transfer(dst, src, 0L);
-            } finally {
-                close(dst);
-            }
-        } finally {
-            close(src);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/SolarisWatchService.java b/ojluni/src/main/java/sun/nio/fs/SolarisWatchService.java
deleted file mode 100755
index 62b305f..0000000
--- a/ojluni/src/main/java/sun/nio/fs/SolarisWatchService.java
+++ /dev/null
@@ -1,768 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.*;
-import java.io.IOException;
-import sun.misc.Unsafe;
-
-import static sun.nio.fs.UnixConstants.*;
-
-/**
- * Solaris implementation of WatchService based on file events notification
- * facility.
- */
-
-class SolarisWatchService
-    extends AbstractWatchService
-{
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-    private static int addressSize = unsafe.addressSize();
-
-    private static int dependsArch(int value32, int value64) {
-        return (addressSize == 4) ? value32 : value64;
-    }
-
-    /*
-     * typedef struct port_event {
-     *     int             portev_events;
-     *     ushort_t        portev_source;
-     *     ushort_t        portev_pad;
-     *     uintptr_t       portev_object;
-     *     void            *portev_user;
-     * } port_event_t;
-     */
-    private static final int SIZEOF_PORT_EVENT  = dependsArch(16, 24);
-    private static final int OFFSETOF_EVENTS    = 0;
-    private static final int OFFSETOF_SOURCE    = 4;
-    private static final int OFFSETOF_OBJECT    = 8;
-
-    /*
-     * typedef struct file_obj {
-     *     timestruc_t     fo_atime;
-     *     timestruc_t     fo_mtime;
-     *     timestruc_t     fo_ctime;
-     *     uintptr_t       fo_pad[3];
-     *     char            *fo_name;
-     * } file_obj_t;
-     */
-    private static final int SIZEOF_FILEOBJ    = dependsArch(40, 80);
-    private static final int OFFSET_FO_NAME    = dependsArch(36, 72);
-
-    // port sources
-    private static final short PORT_SOURCE_USER     = 3;
-    private static final short PORT_SOURCE_FILE     = 7;
-
-    // user-watchable events
-    private static final int FILE_MODIFIED      = 0x00000002;
-    private static final int FILE_ATTRIB        = 0x00000004;
-    private static final int FILE_NOFOLLOW      = 0x10000000;
-
-    // exception events
-    private static final int FILE_DELETE        = 0x00000010;
-    private static final int FILE_RENAME_TO     = 0x00000020;
-    private static final int FILE_RENAME_FROM   = 0x00000040;
-    private static final int UNMOUNTED          = 0x20000000;
-    private static final int MOUNTEDOVER        = 0x40000000;
-
-    // background thread to read change events
-    private final Poller poller;
-
-    SolarisWatchService(UnixFileSystem fs) throws IOException {
-        int port = -1;
-        try {
-            port = portCreate();
-        } catch (UnixException x) {
-            throw new IOException(x.errorString());
-        }
-
-        this.poller = new Poller(fs, this, port);
-        this.poller.start();
-    }
-
-    @Override
-    WatchKey register(Path dir,
-                      WatchEvent.Kind<?>[] events,
-                      WatchEvent.Modifier... modifiers)
-         throws IOException
-    {
-        // delegate to poller
-        return poller.register(dir, events, modifiers);
-    }
-
-    @Override
-    void implClose() throws IOException {
-        // delegate to poller
-        poller.close();
-    }
-
-    /**
-     * WatchKey implementation
-     */
-    private class SolarisWatchKey extends AbstractWatchKey
-        implements DirectoryNode
-    {
-        private final UnixFileKey fileKey;
-
-        // pointer to native file_obj object
-        private final long object;
-
-        // events (may be changed). set to null when watch key is invalid
-        private volatile Set<? extends WatchEvent.Kind<?>> events;
-
-        // map of entries in directory; created lazily; accessed only by
-        // poller thread.
-        private Map<Path,EntryNode> children;
-
-        SolarisWatchKey(SolarisWatchService watcher,
-                        UnixPath dir,
-                        UnixFileKey fileKey,
-                        long object,
-                        Set<? extends WatchEvent.Kind<?>> events)
-        {
-            super(dir, watcher);
-            this.fileKey = fileKey;
-            this.object = object;
-            this.events = events;
-        }
-
-        UnixPath getDirectory() {
-            return (UnixPath)watchable();
-        }
-
-        UnixFileKey getFileKey() {
-            return fileKey;
-        }
-
-        @Override
-        public long object() {
-            return object;
-        }
-
-        void invalidate() {
-            events = null;
-        }
-
-        Set<? extends WatchEvent.Kind<?>> events() {
-            return events;
-        }
-
-        void setEvents(Set<? extends WatchEvent.Kind<?>> events) {
-            this.events = events;
-        }
-
-        @Override
-        public boolean isValid() {
-            return events != null;
-        }
-
-        @Override
-        public void cancel() {
-            if (isValid()) {
-                // delegate to poller
-                poller.cancel(this);
-            }
-        }
-
-        @Override
-        public void addChild(Path name, EntryNode node) {
-            if (children == null)
-                children = new HashMap<Path,EntryNode>();
-            children.put(name, node);
-        }
-
-        @Override
-        public void removeChild(Path name) {
-            children.remove(name);
-        }
-
-        @Override
-        public EntryNode getChild(Path name) {
-            if (children != null)
-                return children.get(name);
-            return null;
-        }
-    }
-
-    /**
-     * Background thread to read from port
-     */
-    private class Poller extends AbstractPoller {
-
-        // maximum number of events to read per call to port_getn
-        private static final int MAX_EVENT_COUNT            = 128;
-
-        // events that map to ENTRY_DELETE
-        private static final int FILE_REMOVED =
-            (FILE_DELETE|FILE_RENAME_TO|FILE_RENAME_FROM);
-
-        // events that tell us not to re-associate the object
-        private static final int FILE_EXCEPTION =
-            (FILE_REMOVED|UNMOUNTED|MOUNTEDOVER);
-
-        // address of event buffers (used to receive events with port_getn)
-        private final long bufferAddress;
-
-        private final SolarisWatchService watcher;
-
-        // the I/O port
-        private final int port;
-
-        // maps file key (dev/inode) to WatchKey
-        private final Map<UnixFileKey,SolarisWatchKey> fileKey2WatchKey;
-
-        // maps file_obj object to Node
-        private final Map<Long,Node> object2Node;
-
-        /**
-         * Create a new instance
-         */
-        Poller(UnixFileSystem fs, SolarisWatchService watcher, int port) {
-            this.watcher = watcher;
-            this.port = port;
-            this.bufferAddress =
-                unsafe.allocateMemory(SIZEOF_PORT_EVENT * MAX_EVENT_COUNT);
-            this.fileKey2WatchKey = new HashMap<UnixFileKey,SolarisWatchKey>();
-            this.object2Node = new HashMap<Long,Node>();
-        }
-
-        @Override
-        void wakeup() throws IOException {
-            // write to port to wakeup polling thread
-            try {
-                portSend(port, 0);
-            } catch (UnixException x) {
-                throw new IOException(x.errorString());
-            }
-        }
-
-        @Override
-        Object implRegister(Path obj,
-                            Set<? extends WatchEvent.Kind<?>> events,
-                            WatchEvent.Modifier... modifiers)
-        {
-            // no modifiers supported at this time
-            if (modifiers.length > 0) {
-                for (WatchEvent.Modifier modifier: modifiers) {
-                    if (modifier == null)
-                        return new NullPointerException();
-                    if (modifier instanceof com.sun.nio.file.SensitivityWatchEventModifier)
-                        continue; // ignore
-                    return new UnsupportedOperationException("Modifier not supported");
-                }
-            }
-
-            UnixPath dir = (UnixPath)obj;
-
-            // check file is directory
-            UnixFileAttributes attrs = null;
-            try {
-                attrs = UnixFileAttributes.get(dir, true);
-            } catch (UnixException x) {
-                return x.asIOException(dir);
-            }
-            if (!attrs.isDirectory()) {
-                return new NotDirectoryException(dir.getPathForExceptionMessage());
-            }
-
-            // return existing watch key after updating events if already
-            // registered
-            UnixFileKey fileKey = attrs.fileKey();
-            SolarisWatchKey watchKey = fileKey2WatchKey.get(fileKey);
-            if (watchKey != null) {
-                updateEvents(watchKey, events);
-                return watchKey;
-            }
-
-            // register directory
-            long object = 0L;
-            try {
-                object = registerImpl(dir, (FILE_MODIFIED | FILE_ATTRIB));
-            } catch (UnixException x) {
-                return x.asIOException(dir);
-            }
-
-            // create watch key and insert it into maps
-            watchKey = new SolarisWatchKey(watcher, dir, fileKey, object, events);
-            object2Node.put(object, watchKey);
-            fileKey2WatchKey.put(fileKey, watchKey);
-
-            // register all entries in directory
-            registerChildren(dir, watchKey, false);
-
-            return watchKey;
-        }
-
-        // cancel single key
-        @Override
-        void implCancelKey(WatchKey obj) {
-           SolarisWatchKey key = (SolarisWatchKey)obj;
-           if (key.isValid()) {
-               fileKey2WatchKey.remove(key.getFileKey());
-
-               // release resources for entries in directory
-               if (key.children != null) {
-                   for (Map.Entry<Path,EntryNode> entry: key.children.entrySet()) {
-                       EntryNode node = entry.getValue();
-                       long object = node.object();
-                       object2Node.remove(object);
-                       releaseObject(object, true);
-                   }
-               }
-
-               // release resources for directory
-               long object = key.object();
-               object2Node.remove(object);
-               releaseObject(object, true);
-
-               // and finally invalidate the key
-               key.invalidate();
-           }
-        }
-
-        // close watch service
-        @Override
-        void implCloseAll() {
-            // release all native resources
-            for (Long object: object2Node.keySet()) {
-                releaseObject(object, true);
-            }
-
-            // invalidate all keys
-            for (Map.Entry<UnixFileKey,SolarisWatchKey> entry: fileKey2WatchKey.entrySet()) {
-                entry.getValue().invalidate();
-            }
-
-            // clean-up
-            object2Node.clear();
-            fileKey2WatchKey.clear();
-
-            // free global resources
-            unsafe.freeMemory(bufferAddress);
-            UnixNativeDispatcher.close(port);
-        }
-
-        /**
-         * Poller main loop. Blocks on port_getn waiting for events and then
-         * processes them.
-         */
-        @Override
-        public void run() {
-            try {
-                for (;;) {
-                    int n = portGetn(port, bufferAddress, MAX_EVENT_COUNT);
-                    assert n > 0;
-
-                    long address = bufferAddress;
-                    for (int i=0; i<n; i++) {
-                        boolean shutdown = processEvent(address);
-                        if (shutdown)
-                            return;
-                        address += SIZEOF_PORT_EVENT;
-                    }
-                }
-            } catch (UnixException x) {
-                x.printStackTrace();
-            }
-        }
-
-        /**
-         * Process a single port_event
-         *
-         * Returns true if poller thread is requested to shutdown.
-         */
-        boolean processEvent(long address) {
-            // pe->portev_source
-            short source = unsafe.getShort(address + OFFSETOF_SOURCE);
-            // pe->portev_object
-            long object = unsafe.getAddress(address + OFFSETOF_OBJECT);
-            // pe->portev_events
-            int events = unsafe.getInt(address + OFFSETOF_EVENTS);
-
-            // user event is trigger to process pending requests
-            if (source != PORT_SOURCE_FILE) {
-                if (source == PORT_SOURCE_USER) {
-                    // process any pending requests
-                    boolean shutdown = processRequests();
-                    if (shutdown)
-                        return true;
-                }
-                return false;
-            }
-
-            // lookup object to get Node
-            Node node = object2Node.get(object);
-            if (node == null) {
-                // should not happen
-                return false;
-            }
-
-            // As a workaround for 6642290 and 6636438/6636412 we don't use
-            // FILE_EXCEPTION events to tell use not to register the file.
-            // boolean reregister = (events & FILE_EXCEPTION) == 0;
-            boolean reregister = true;
-
-            // If node is EntryNode then event relates to entry in directory
-            // If node is a SolarisWatchKey (DirectoryNode) then event relates
-            // to a watched directory.
-            boolean isDirectory = (node instanceof SolarisWatchKey);
-            if (isDirectory) {
-                processDirectoryEvents((SolarisWatchKey)node, events);
-            } else {
-                boolean ignore = processEntryEvents((EntryNode)node, events);
-                if (ignore)
-                    reregister = false;
-            }
-
-            // need to re-associate to get further events
-            if (reregister) {
-                try {
-                    events = FILE_MODIFIED | FILE_ATTRIB;
-                    if (!isDirectory) events |= FILE_NOFOLLOW;
-                    portAssociate(port,
-                                  PORT_SOURCE_FILE,
-                                  object,
-                                  events);
-                } catch (UnixException x) {
-                    // unable to re-register
-                    reregister = false;
-                }
-            }
-
-            // object is not re-registered so release resources. If
-            // object is a watched directory then signal key
-            if (!reregister) {
-                // release resources
-                object2Node.remove(object);
-                releaseObject(object, false);
-
-                // if watch key then signal it
-                if (isDirectory) {
-                    SolarisWatchKey key = (SolarisWatchKey)node;
-                    fileKey2WatchKey.remove( key.getFileKey() );
-                    key.invalidate();
-                    key.signal();
-                } else {
-                    // if entry then remove it from parent
-                    EntryNode entry = (EntryNode)node;
-                    SolarisWatchKey key = (SolarisWatchKey)entry.parent();
-                    key.removeChild(entry.name());
-                }
-            }
-
-            return false;
-        }
-
-        /**
-         * Process directory events. If directory is modified then re-scan
-         * directory to register any new entries
-         */
-        void processDirectoryEvents(SolarisWatchKey key, int mask) {
-            if ((mask & (FILE_MODIFIED | FILE_ATTRIB)) != 0) {
-                registerChildren(key.getDirectory(), key,
-                    key.events().contains(StandardWatchEventKinds.ENTRY_CREATE));
-            }
-        }
-
-        /**
-         * Process events for entries in registered directories. Returns {@code
-         * true} if events are ignored because the watch key has been cancelled.
-         */
-        boolean processEntryEvents(EntryNode node, int mask) {
-            SolarisWatchKey key = (SolarisWatchKey)node.parent();
-            Set<? extends WatchEvent.Kind<?>> events = key.events();
-            if (events == null) {
-                // key has been cancelled so ignore event
-                return true;
-            }
-
-            // entry modified
-            if (((mask & (FILE_MODIFIED | FILE_ATTRIB)) != 0) &&
-                events.contains(StandardWatchEventKinds.ENTRY_MODIFY))
-            {
-                key.signalEvent(StandardWatchEventKinds.ENTRY_MODIFY, node.name());
-            }
-
-            // entry removed
-            if (((mask & (FILE_REMOVED)) != 0) &&
-                events.contains(StandardWatchEventKinds.ENTRY_DELETE))
-            {
-                // Due to 6636438/6636412 we may get a remove event for cases
-                // where a rmdir/unlink/rename is attempted but fails. Until
-                // this issue is resolved we re-lstat the file to check if it
-                // exists. If it exists then we ignore the event. To keep the
-                // workaround simple we don't check the st_ino so it isn't
-                // effective when the file is replaced.
-                boolean removed = true;
-                try {
-                    UnixFileAttributes
-                        .get(key.getDirectory().resolve(node.name()), false);
-                    removed = false;
-                } catch (UnixException x) { }
-
-                if (removed)
-                    key.signalEvent(StandardWatchEventKinds.ENTRY_DELETE, node.name());
-            }
-            return false;
-        }
-
-        /**
-         * Registers all entries in the given directory
-         *
-         * The {@code sendEvents} parameter indicates if ENTRY_CREATE events
-         * should be queued when new entries are found. When initially
-         * registering a directory then will always be false. When re-scanning
-         * a directory then it depends on if the event is enabled or not.
-         */
-        void registerChildren(UnixPath dir,
-                              SolarisWatchKey parent,
-                              boolean sendEvents)
-        {
-            // if the ENTRY_MODIFY event is not enabled then we don't need
-            // modification events for entries in the directory
-            int events = FILE_NOFOLLOW;
-            if (parent.events().contains(StandardWatchEventKinds.ENTRY_MODIFY))
-                events |= (FILE_MODIFIED | FILE_ATTRIB);
-
-            DirectoryStream<Path> stream = null;
-            try {
-                stream = Files.newDirectoryStream(dir);
-            } catch (IOException x) {
-                // nothing we can do
-                return;
-            }
-            try {
-                for (Path entry: stream) {
-                    Path name = entry.getFileName();
-
-                    // skip entry if already registered
-                    if (parent.getChild(name) != null)
-                        continue;
-
-                    // send ENTRY_CREATE if enabled
-                    if (sendEvents) {
-                        parent.signalEvent(StandardWatchEventKinds.ENTRY_CREATE, name);
-                    }
-
-                    // register it
-                    long object = 0L;
-                    try {
-                        object = registerImpl((UnixPath)entry, events);
-                    } catch (UnixException x) {
-                        // can't register so ignore for now.
-                        continue;
-                    }
-
-                    // create node
-                    EntryNode node = new EntryNode(object, entry.getFileName(), parent);
-                    // tell the parent about it
-                    parent.addChild(entry.getFileName(), node);
-                    object2Node.put(object, node);
-                }
-            } catch (ConcurrentModificationException x) {
-                // error during iteration which we ignore for now
-            } finally {
-                try {
-                    stream.close();
-                } catch (IOException x) { }
-            }
-        }
-
-        /**
-         * Update watch key's events. Where the ENTRY_MODIFY changes then we
-         * need to update the events of registered children.
-         */
-        void updateEvents(SolarisWatchKey key, Set<? extends WatchEvent.Kind<?>> events) {
-            // update events, rembering if ENTRY_MODIFY was previously
-            // enabled or disabled.
-            boolean wasModifyEnabled = key.events()
-                .contains(StandardWatchEventKinds.ENTRY_MODIFY);
-            key.setEvents(events);
-
-            // check if ENTRY_MODIFY has changed
-            boolean isModifyEnabled = events
-                .contains(StandardWatchEventKinds.ENTRY_MODIFY);
-            if (wasModifyEnabled == isModifyEnabled) {
-                return;
-            }
-
-            // if changed then update events of children
-            if (key.children != null) {
-                int ev = FILE_NOFOLLOW;
-                if (isModifyEnabled)
-                    ev |= (FILE_MODIFIED | FILE_ATTRIB);
-
-                for (Map.Entry<Path,EntryNode> entry: key.children.entrySet()) {
-                    long object = entry.getValue().object();
-                    try {
-                        portAssociate(port,
-                                      PORT_SOURCE_FILE,
-                                      object,
-                                      ev);
-                    } catch (UnixException x) {
-                        // nothing we can do.
-                    }
-                }
-            }
-        }
-
-        /**
-         * Calls port_associate to register the given path.
-         * Returns pointer to fileobj structure that is allocated for
-         * the registration.
-         */
-        long registerImpl(UnixPath dir, int events)
-            throws UnixException
-        {
-            // allocate memory for the path (file_obj->fo_name field)
-            byte[] path = dir.getByteArrayForSysCalls();
-            int len = path.length;
-            long name = unsafe.allocateMemory(len+1);
-            unsafe.copyMemory(path, Unsafe.ARRAY_BYTE_BASE_OFFSET, null,
-                name, (long)len);
-            unsafe.putByte(name + len, (byte)0);
-
-            // allocate memory for filedatanode structure - this is the object
-            // to port_associate
-            long object = unsafe.allocateMemory(SIZEOF_FILEOBJ);
-            unsafe.setMemory(null, object, SIZEOF_FILEOBJ, (byte)0);
-            unsafe.putAddress(object + OFFSET_FO_NAME, name);
-
-            // associate the object with the port
-            try {
-                portAssociate(port,
-                              PORT_SOURCE_FILE,
-                              object,
-                              events);
-            } catch (UnixException x) {
-                // debugging
-                if (x.errno() == EAGAIN) {
-                    System.err.println("The maximum number of objects associated "+
-                        "with the port has been reached");
-                }
-
-                unsafe.freeMemory(name);
-                unsafe.freeMemory(object);
-                throw x;
-            }
-            return object;
-        }
-
-        /**
-         * Frees all resources for an file_obj object; optionally remove
-         * association from port
-         */
-        void releaseObject(long object, boolean dissociate) {
-            // remove association
-            if (dissociate) {
-                try {
-                    portDissociate(port, PORT_SOURCE_FILE, object);
-                } catch (UnixException x) {
-                    // ignore
-                }
-            }
-
-            // free native memory
-            long name = unsafe.getAddress(object + OFFSET_FO_NAME);
-            unsafe.freeMemory(name);
-            unsafe.freeMemory(object);
-        }
-    }
-
-    /**
-     * A node with native (file_obj) resources
-     */
-    private static interface Node {
-        long object();
-    }
-
-    /**
-     * A directory node with a map of the entries in the directory
-     */
-    private static interface DirectoryNode extends Node {
-        void addChild(Path name, EntryNode node);
-        void removeChild(Path name);
-        EntryNode getChild(Path name);
-    }
-
-    /**
-     * An implementation of a node that is an entry in a directory.
-     */
-    private static class EntryNode implements Node {
-        private final long object;
-        private final Path name;
-        private final DirectoryNode parent;
-
-        EntryNode(long object, Path name, DirectoryNode parent) {
-            this.object = object;
-            this.name = name;
-            this.parent = parent;
-        }
-
-        @Override
-        public long object() {
-            return object;
-        }
-
-        Path name() {
-            return name;
-        }
-
-        DirectoryNode parent() {
-            return parent;
-        }
-    }
-
-    // -- native methods --
-
-    private static native void init();
-
-    private static native int portCreate() throws UnixException;
-
-    private static native void portAssociate(int port, int source, long object, int events)
-        throws UnixException;
-
-    private static native void portDissociate(int port, int source, long object)
-        throws UnixException;
-
-    private static native void portSend(int port, int events)
-        throws UnixException;
-
-    private static native int portGetn(int port, long address, int max)
-        throws UnixException;
-
-    static {
-        AccessController.doPrivileged(new PrivilegedAction<Void>() {
-            public Void run() {
-                System.loadLibrary("nio");
-                return null;
-        }});
-        init();
-    }
-}
diff --git a/ojluni/src/main/java/sun/nio/fs/UnixFileStore.java b/ojluni/src/main/java/sun/nio/fs/UnixFileStore.java
deleted file mode 100755
index 4299b26..0000000
--- a/ojluni/src/main/java/sun/nio/fs/UnixFileStore.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * Copyright (c) 2008, 2011, 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.
- */
-
-package sun.nio.fs;
-
-import java.nio.file.*;
-import java.nio.file.attribute.*;
-import java.nio.channels.*;
-import java.util.*;
-import java.io.IOException;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-/**
- * Base implementation of FileStore for Unix/like implementations.
- */
-
-abstract class UnixFileStore
-    extends FileStore
-{
-    // original path of file that identified file system
-    private final UnixPath file;
-
-    // device ID
-    private final long dev;
-
-    // entry in the mount tab
-    private final UnixMountEntry entry;
-
-    // return the device ID where the given file resides
-    private static long devFor(UnixPath file) throws IOException {
-        try {
-            return UnixFileAttributes.get(file, true).dev();
-        } catch (UnixException x) {
-            x.rethrowAsIOException(file);
-            return 0L;  // keep compiler happy
-        }
-    }
-
-    UnixFileStore(UnixPath file) throws IOException {
-        this.file = file;
-        this.dev = devFor(file);
-        this.entry = findMountEntry();
-    }
-
-    UnixFileStore(UnixFileSystem fs, UnixMountEntry entry) throws IOException {
-        this.file = new UnixPath(fs, entry.dir());
-        this.dev = (entry.dev() == 0L) ? devFor(this.file) : entry.dev();
-        this.entry = entry;
-    }
-
-    /**
-     * Find the mount entry for the file store
-     */
-    abstract UnixMountEntry findMountEntry() throws IOException;
-
-    UnixPath file() {
-        return file;
-    }
-
-    long dev() {
-        return dev;
-    }
-
-    UnixMountEntry entry() {
-        return entry;
-    }
-
-    @Override
-    public String name() {
-        return entry.name();
-    }
-
-    @Override
-    public String type() {
-        return entry.fstype();
-    }
-
-    @Override
-    public boolean isReadOnly() {
-        return entry.isReadOnly();
-    }
-
-    // uses statvfs to read the file system information
-    private UnixFileStoreAttributes readAttributes() throws IOException {
-        try {
-            return UnixFileStoreAttributes.get(file);
-        } catch (UnixException x) {
-            x.rethrowAsIOException(file);
-            return null;    // keep compile happy
-        }
-    }
-
-    @Override
-    public long getTotalSpace() throws IOException {
-        UnixFileStoreAttributes attrs = readAttributes();
-        return attrs.blockSize() * attrs.totalBlocks();
-    }
-
-    @Override
-    public long getUsableSpace() throws IOException {
-       UnixFileStoreAttributes attrs = readAttributes();
-       return attrs.blockSize() * attrs.availableBlocks();
-    }
-
-    @Override
-    public long getUnallocatedSpace() throws IOException {
-        UnixFileStoreAttributes attrs = readAttributes();
-        return attrs.blockSize() * attrs.freeBlocks();
-    }
-
-    @Override
-    public <V extends FileStoreAttributeView> V getFileStoreAttributeView(Class<V> view)
-    {
-        if (view == null)
-            throw new NullPointerException();
-        return (V) null;
-    }
-
-    @Override
-    public Object getAttribute(String attribute) throws IOException {
-        if (attribute.equals("totalSpace"))
-            return getTotalSpace();
-        if (attribute.equals("usableSpace"))
-            return getUsableSpace();
-        if (attribute.equals("unallocatedSpace"))
-            return getUnallocatedSpace();
-        throw new UnsupportedOperationException("'" + attribute + "' not recognized");
-    }
-
-    @Override
-    public boolean supportsFileAttributeView(Class<? extends FileAttributeView> type) {
-        if (type == null)
-            throw new NullPointerException();
-        if (type == BasicFileAttributeView.class)
-            return true;
-        if (type == PosixFileAttributeView.class ||
-            type == FileOwnerAttributeView.class)
-        {
-            // lookup fstypes.properties
-            FeatureStatus status = checkIfFeaturePresent("posix");
-            // assume supported if UNKNOWN
-            return (status != FeatureStatus.NOT_PRESENT);
-        }
-        return false;
-    }
-
-    @Override
-    public boolean supportsFileAttributeView(String name) {
-        if (name.equals("basic") || name.equals("unix"))
-            return true;
-        if (name.equals("posix"))
-            return supportsFileAttributeView(PosixFileAttributeView.class);
-        if (name.equals("owner"))
-            return supportsFileAttributeView(FileOwnerAttributeView.class);
-        return false;
-    }
-
-    @Override
-    public boolean equals(Object ob) {
-        if (ob == this)
-            return true;
-        if (!(ob instanceof UnixFileStore))
-            return false;
-        UnixFileStore other = (UnixFileStore)ob;
-        return (this.dev == other.dev) &&
-               Arrays.equals(this.entry.dir(), other.entry.dir());
-    }
-
-    @Override
-    public int hashCode() {
-        return (int)(dev ^ (dev >>> 32)) ^ Arrays.hashCode(entry.dir());
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder(new String(entry.dir()));
-        sb.append(" (");
-        sb.append(entry.name());
-        sb.append(")");
-        return sb.toString();
-    }
-
-    // -- fstypes.properties --
-
-    private static final Object loadLock = new Object();
-    private static volatile Properties props;
-
-    enum FeatureStatus {
-        PRESENT,
-        NOT_PRESENT,
-        UNKNOWN;
-    }
-
-    /**
-     * Returns status to indicate if file system supports a given feature
-     */
-    FeatureStatus checkIfFeaturePresent(String feature) {
-        if (props == null) {
-            synchronized (loadLock) {
-                if (props == null) {
-                    props = AccessController.doPrivileged(
-                        new PrivilegedAction<Properties>() {
-                            @Override
-                            public Properties run() {
-                                return loadProperties();
-                            }});
-                }
-            }
-        }
-
-        String value = props.getProperty(type());
-        if (value != null) {
-            String[] values = value.split("\\s");
-            for (String s: values) {
-                s = s.trim().toLowerCase();
-                if (s.equals(feature)) {
-                    return FeatureStatus.PRESENT;
-                }
-                if (s.startsWith("no")) {
-                    s = s.substring(2);
-                    if (s.equals(feature)) {
-                        return FeatureStatus.NOT_PRESENT;
-                    }
-                }
-            }
-        }
-        return FeatureStatus.UNKNOWN;
-    }
-
-    private static Properties loadProperties() {
-        Properties result = new Properties();
-        String fstypes = System.getProperty("java.home") + "/lib/fstypes.properties";
-        Path file = Paths.get(fstypes);
-        try {
-            try (ReadableByteChannel rbc = Files.newByteChannel(file)) {
-                result.load(Channels.newReader(rbc, "UTF-8"));
-            }
-        } catch (IOException x) {
-        }
-        return result;
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/AccessorGenerator.java b/ojluni/src/main/java/sun/reflect/AccessorGenerator.java
deleted file mode 100755
index c4c3337..0000000
--- a/ojluni/src/main/java/sun/reflect/AccessorGenerator.java
+++ /dev/null
@@ -1,712 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.*;
-import sun.misc.Unsafe;
-
-/** Shared functionality for all accessor generators */
-
-class AccessorGenerator implements ClassFileConstants {
-    static final Unsafe unsafe = Unsafe.getUnsafe();
-
-    // Constants because there's no way to say "short integer constant",
-    // i.e., "1S"
-    protected static final short S0 = (short) 0;
-    protected static final short S1 = (short) 1;
-    protected static final short S2 = (short) 2;
-    protected static final short S3 = (short) 3;
-    protected static final short S4 = (short) 4;
-    protected static final short S5 = (short) 5;
-    protected static final short S6 = (short) 6;
-
-    // Instance variables for shared functionality between
-    // FieldAccessorGenerator and MethodAccessorGenerator
-    protected ClassFileAssembler asm;
-    protected int   modifiers;
-    protected short thisClass;
-    protected short superClass;
-    protected short targetClass;
-    // Common constant pool entries to FieldAccessor and MethodAccessor
-    protected short throwableClass;
-    protected short classCastClass;
-    protected short nullPointerClass;
-    protected short illegalArgumentClass;
-    protected short invocationTargetClass;
-    protected short initIdx;
-    protected short initNameAndTypeIdx;
-    protected short initStringNameAndTypeIdx;
-    protected short nullPointerCtorIdx;
-    protected short illegalArgumentCtorIdx;
-    protected short illegalArgumentStringCtorIdx;
-    protected short invocationTargetCtorIdx;
-    protected short superCtorIdx;
-    protected short objectClass;
-    protected short toStringIdx;
-    protected short codeIdx;
-    protected short exceptionsIdx;
-    // Boxing
-    protected short booleanIdx;
-    protected short booleanCtorIdx;
-    protected short booleanUnboxIdx;
-    protected short byteIdx;
-    protected short byteCtorIdx;
-    protected short byteUnboxIdx;
-    protected short characterIdx;
-    protected short characterCtorIdx;
-    protected short characterUnboxIdx;
-    protected short doubleIdx;
-    protected short doubleCtorIdx;
-    protected short doubleUnboxIdx;
-    protected short floatIdx;
-    protected short floatCtorIdx;
-    protected short floatUnboxIdx;
-    protected short integerIdx;
-    protected short integerCtorIdx;
-    protected short integerUnboxIdx;
-    protected short longIdx;
-    protected short longCtorIdx;
-    protected short longUnboxIdx;
-    protected short shortIdx;
-    protected short shortCtorIdx;
-    protected short shortUnboxIdx;
-
-    protected final short NUM_COMMON_CPOOL_ENTRIES = (short) 30;
-    protected final short NUM_BOXING_CPOOL_ENTRIES = (short) 72;
-
-    // Requires that superClass has been set up
-    protected void emitCommonConstantPoolEntries() {
-        // +   [UTF-8] "java/lang/Throwable"
-        // +   [CONSTANT_Class_info] for above
-        // +   [UTF-8] "java/lang/ClassCastException"
-        // +   [CONSTANT_Class_info] for above
-        // +   [UTF-8] "java/lang/NullPointerException"
-        // +   [CONSTANT_Class_info] for above
-        // +   [UTF-8] "java/lang/IllegalArgumentException"
-        // +   [CONSTANT_Class_info] for above
-        // +   [UTF-8] "java/lang/InvocationTargetException"
-        // +   [CONSTANT_Class_info] for above
-        // +   [UTF-8] "<init>"
-        // +   [UTF-8] "()V"
-        // +   [CONSTANT_NameAndType_info] for above
-        // +   [CONSTANT_Methodref_info] for NullPointerException's constructor
-        // +   [CONSTANT_Methodref_info] for IllegalArgumentException's constructor
-        // +   [UTF-8] "(Ljava/lang/String;)V"
-        // +   [CONSTANT_NameAndType_info] for "<init>(Ljava/lang/String;)V"
-        // +   [CONSTANT_Methodref_info] for IllegalArgumentException's constructor taking a String
-        // +   [UTF-8] "(Ljava/lang/Throwable;)V"
-        // +   [CONSTANT_NameAndType_info] for "<init>(Ljava/lang/Throwable;)V"
-        // +   [CONSTANT_Methodref_info] for InvocationTargetException's constructor
-        // +   [CONSTANT_Methodref_info] for "super()"
-        // +   [UTF-8] "java/lang/Object"
-        // +   [CONSTANT_Class_info] for above
-        // +   [UTF-8] "toString"
-        // +   [UTF-8] "()Ljava/lang/String;"
-        // +   [CONSTANT_NameAndType_info] for "toString()Ljava/lang/String;"
-        // +   [CONSTANT_Methodref_info] for Object's toString method
-        // +   [UTF-8] "Code"
-        // +   [UTF-8] "Exceptions"
-        asm.emitConstantPoolUTF8("java/lang/Throwable");
-        asm.emitConstantPoolClass(asm.cpi());
-        throwableClass = asm.cpi();
-        asm.emitConstantPoolUTF8("java/lang/ClassCastException");
-        asm.emitConstantPoolClass(asm.cpi());
-        classCastClass = asm.cpi();
-        asm.emitConstantPoolUTF8("java/lang/NullPointerException");
-        asm.emitConstantPoolClass(asm.cpi());
-        nullPointerClass = asm.cpi();
-        asm.emitConstantPoolUTF8("java/lang/IllegalArgumentException");
-        asm.emitConstantPoolClass(asm.cpi());
-        illegalArgumentClass = asm.cpi();
-        asm.emitConstantPoolUTF8("java/lang/reflect/InvocationTargetException");
-        asm.emitConstantPoolClass(asm.cpi());
-        invocationTargetClass = asm.cpi();
-        asm.emitConstantPoolUTF8("<init>");
-        initIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("()V");
-        asm.emitConstantPoolNameAndType(initIdx, asm.cpi());
-        initNameAndTypeIdx = asm.cpi();
-        asm.emitConstantPoolMethodref(nullPointerClass, initNameAndTypeIdx);
-        nullPointerCtorIdx = asm.cpi();
-        asm.emitConstantPoolMethodref(illegalArgumentClass, initNameAndTypeIdx);
-        illegalArgumentCtorIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("(Ljava/lang/String;)V");
-        asm.emitConstantPoolNameAndType(initIdx, asm.cpi());
-        initStringNameAndTypeIdx = asm.cpi();
-        asm.emitConstantPoolMethodref(illegalArgumentClass, initStringNameAndTypeIdx);
-        illegalArgumentStringCtorIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("(Ljava/lang/Throwable;)V");
-        asm.emitConstantPoolNameAndType(initIdx, asm.cpi());
-        asm.emitConstantPoolMethodref(invocationTargetClass, asm.cpi());
-        invocationTargetCtorIdx = asm.cpi();
-        asm.emitConstantPoolMethodref(superClass, initNameAndTypeIdx);
-        superCtorIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("java/lang/Object");
-        asm.emitConstantPoolClass(asm.cpi());
-        objectClass = asm.cpi();
-        asm.emitConstantPoolUTF8("toString");
-        asm.emitConstantPoolUTF8("()Ljava/lang/String;");
-        asm.emitConstantPoolNameAndType(sub(asm.cpi(), S1), asm.cpi());
-        asm.emitConstantPoolMethodref(objectClass, asm.cpi());
-        toStringIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("Code");
-        codeIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("Exceptions");
-        exceptionsIdx = asm.cpi();
-    }
-
-    /** Constant pool entries required to be able to box/unbox primitive
-        types. Note that we don't emit these if we don't need them. */
-    protected void emitBoxingContantPoolEntries() {
-        //  *  [UTF-8] "java/lang/Boolean"
-        //  *  [CONSTANT_Class_info] for above
-        //  *  [UTF-8] "(Z)V"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "booleanValue"
-        //  *  [UTF-8] "()Z"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "java/lang/Byte"
-        //  *  [CONSTANT_Class_info] for above
-        //  *  [UTF-8] "(B)V"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "byteValue"
-        //  *  [UTF-8] "()B"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "java/lang/Character"
-        //  *  [CONSTANT_Class_info] for above
-        //  *  [UTF-8] "(C)V"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "charValue"
-        //  *  [UTF-8] "()C"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "java/lang/Double"
-        //  *  [CONSTANT_Class_info] for above
-        //  *  [UTF-8] "(D)V"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "doubleValue"
-        //  *  [UTF-8] "()D"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "java/lang/Float"
-        //  *  [CONSTANT_Class_info] for above
-        //  *  [UTF-8] "(F)V"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "floatValue"
-        //  *  [UTF-8] "()F"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "java/lang/Integer"
-        //  *  [CONSTANT_Class_info] for above
-        //  *  [UTF-8] "(I)V"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "intValue"
-        //  *  [UTF-8] "()I"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "java/lang/Long"
-        //  *  [CONSTANT_Class_info] for above
-        //  *  [UTF-8] "(J)V"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "longValue"
-        //  *  [UTF-8] "()J"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "java/lang/Short"
-        //  *  [CONSTANT_Class_info] for above
-        //  *  [UTF-8] "(S)V"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "shortValue"
-        //  *  [UTF-8] "()S"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        // Boolean
-        asm.emitConstantPoolUTF8("java/lang/Boolean");
-        asm.emitConstantPoolClass(asm.cpi());
-        booleanIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("(Z)V");
-        asm.emitConstantPoolNameAndType(initIdx, asm.cpi());
-        asm.emitConstantPoolMethodref(sub(asm.cpi(), S2), asm.cpi());
-        booleanCtorIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("booleanValue");
-        asm.emitConstantPoolUTF8("()Z");
-        asm.emitConstantPoolNameAndType(sub(asm.cpi(), S1), asm.cpi());
-        asm.emitConstantPoolMethodref(sub(asm.cpi(), S6), asm.cpi());
-        booleanUnboxIdx = asm.cpi();
-
-        // Byte
-        asm.emitConstantPoolUTF8("java/lang/Byte");
-        asm.emitConstantPoolClass(asm.cpi());
-        byteIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("(B)V");
-        asm.emitConstantPoolNameAndType(initIdx, asm.cpi());
-        asm.emitConstantPoolMethodref(sub(asm.cpi(), S2), asm.cpi());
-        byteCtorIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("byteValue");
-        asm.emitConstantPoolUTF8("()B");
-        asm.emitConstantPoolNameAndType(sub(asm.cpi(), S1), asm.cpi());
-        asm.emitConstantPoolMethodref(sub(asm.cpi(), S6), asm.cpi());
-        byteUnboxIdx = asm.cpi();
-
-        // Character
-        asm.emitConstantPoolUTF8("java/lang/Character");
-        asm.emitConstantPoolClass(asm.cpi());
-        characterIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("(C)V");
-        asm.emitConstantPoolNameAndType(initIdx, asm.cpi());
-        asm.emitConstantPoolMethodref(sub(asm.cpi(), S2), asm.cpi());
-        characterCtorIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("charValue");
-        asm.emitConstantPoolUTF8("()C");
-        asm.emitConstantPoolNameAndType(sub(asm.cpi(), S1), asm.cpi());
-        asm.emitConstantPoolMethodref(sub(asm.cpi(), S6), asm.cpi());
-        characterUnboxIdx = asm.cpi();
-
-        // Double
-        asm.emitConstantPoolUTF8("java/lang/Double");
-        asm.emitConstantPoolClass(asm.cpi());
-        doubleIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("(D)V");
-        asm.emitConstantPoolNameAndType(initIdx, asm.cpi());
-        asm.emitConstantPoolMethodref(sub(asm.cpi(), S2), asm.cpi());
-        doubleCtorIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("doubleValue");
-        asm.emitConstantPoolUTF8("()D");
-        asm.emitConstantPoolNameAndType(sub(asm.cpi(), S1), asm.cpi());
-        asm.emitConstantPoolMethodref(sub(asm.cpi(), S6), asm.cpi());
-        doubleUnboxIdx = asm.cpi();
-
-        // Float
-        asm.emitConstantPoolUTF8("java/lang/Float");
-        asm.emitConstantPoolClass(asm.cpi());
-        floatIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("(F)V");
-        asm.emitConstantPoolNameAndType(initIdx, asm.cpi());
-        asm.emitConstantPoolMethodref(sub(asm.cpi(), S2), asm.cpi());
-        floatCtorIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("floatValue");
-        asm.emitConstantPoolUTF8("()F");
-        asm.emitConstantPoolNameAndType(sub(asm.cpi(), S1), asm.cpi());
-        asm.emitConstantPoolMethodref(sub(asm.cpi(), S6), asm.cpi());
-        floatUnboxIdx = asm.cpi();
-
-        // Integer
-        asm.emitConstantPoolUTF8("java/lang/Integer");
-        asm.emitConstantPoolClass(asm.cpi());
-        integerIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("(I)V");
-        asm.emitConstantPoolNameAndType(initIdx, asm.cpi());
-        asm.emitConstantPoolMethodref(sub(asm.cpi(), S2), asm.cpi());
-        integerCtorIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("intValue");
-        asm.emitConstantPoolUTF8("()I");
-        asm.emitConstantPoolNameAndType(sub(asm.cpi(), S1), asm.cpi());
-        asm.emitConstantPoolMethodref(sub(asm.cpi(), S6), asm.cpi());
-        integerUnboxIdx = asm.cpi();
-
-        // Long
-        asm.emitConstantPoolUTF8("java/lang/Long");
-        asm.emitConstantPoolClass(asm.cpi());
-        longIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("(J)V");
-        asm.emitConstantPoolNameAndType(initIdx, asm.cpi());
-        asm.emitConstantPoolMethodref(sub(asm.cpi(), S2), asm.cpi());
-        longCtorIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("longValue");
-        asm.emitConstantPoolUTF8("()J");
-        asm.emitConstantPoolNameAndType(sub(asm.cpi(), S1), asm.cpi());
-        asm.emitConstantPoolMethodref(sub(asm.cpi(), S6), asm.cpi());
-        longUnboxIdx = asm.cpi();
-
-        // Short
-        asm.emitConstantPoolUTF8("java/lang/Short");
-        asm.emitConstantPoolClass(asm.cpi());
-        shortIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("(S)V");
-        asm.emitConstantPoolNameAndType(initIdx, asm.cpi());
-        asm.emitConstantPoolMethodref(sub(asm.cpi(), S2), asm.cpi());
-        shortCtorIdx = asm.cpi();
-        asm.emitConstantPoolUTF8("shortValue");
-        asm.emitConstantPoolUTF8("()S");
-        asm.emitConstantPoolNameAndType(sub(asm.cpi(), S1), asm.cpi());
-        asm.emitConstantPoolMethodref(sub(asm.cpi(), S6), asm.cpi());
-        shortUnboxIdx = asm.cpi();
-    }
-
-    // Necessary because of Java's annoying promotion rules
-    protected static short add(short s1, short s2) {
-        return (short) (s1 + s2);
-    }
-
-    protected static short sub(short s1, short s2) {
-        return (short) (s1 - s2);
-    }
-
-    protected boolean isStatic() {
-        return Modifier.isStatic(modifiers);
-    }
-
-    /** Returns class name in "internal" form (i.e., '/' separators
-        instead of '.') */
-    protected static String getClassName
-        (Class c, boolean addPrefixAndSuffixForNonPrimitiveTypes)
-    {
-        if (c.isPrimitive()) {
-            if (c == Boolean.TYPE) {
-                return "Z";
-            } else if (c == Byte.TYPE) {
-                return "B";
-            } else if (c == Character.TYPE) {
-                return "C";
-            } else if (c == Double.TYPE) {
-                return "D";
-            } else if (c == Float.TYPE) {
-                return "F";
-            } else if (c == Integer.TYPE) {
-                return "I";
-            } else if (c == Long.TYPE) {
-                return "J";
-            } else if (c == Short.TYPE) {
-                return "S";
-            } else if (c == Void.TYPE) {
-                return "V";
-            }
-            throw new InternalError("Should have found primitive type");
-        } else if (c.isArray()) {
-            return "[" + getClassName(c.getComponentType(), true);
-        } else {
-            if (addPrefixAndSuffixForNonPrimitiveTypes) {
-                return internalize("L" + c.getName() + ";");
-            } else {
-                return internalize(c.getName());
-            }
-        }
-    }
-
-    private static String internalize(String className) {
-        return className.replace('.', '/');
-    }
-
-    protected void emitConstructor() {
-        // Generate code into fresh code buffer
-        ClassFileAssembler cb = new ClassFileAssembler();
-        // 0 incoming arguments
-        cb.setMaxLocals(1);
-        cb.opc_aload_0();
-        cb.opc_invokespecial(superCtorIdx, 0, 0);
-        cb.opc_return();
-
-        // Emit method
-        emitMethod(initIdx, cb.getMaxLocals(), cb, null, null);
-    }
-
-    // The descriptor's index in the constant pool must be (1 +
-    // nameIdx). "numArgs" must indicate ALL arguments, including the
-    // implicit "this" argument; double and long arguments each count
-    // as 2 in this count. The code buffer must NOT contain the code
-    // length. The exception table may be null, but if non-null must
-    // NOT contain the exception table's length. The checked exception
-    // indices may be null.
-    protected void emitMethod(short nameIdx,
-                              int numArgs,
-                              ClassFileAssembler code,
-                              ClassFileAssembler exceptionTable,
-                              short[] checkedExceptionIndices)
-    {
-        int codeLen = code.getLength();
-        int excLen  = 0;
-        if (exceptionTable != null) {
-            excLen = exceptionTable.getLength();
-            if ((excLen % 8) != 0) {
-                throw new IllegalArgumentException("Illegal exception table");
-            }
-        }
-        int attrLen = 12 + codeLen + excLen;
-        excLen = excLen / 8; // No-op if no exception table
-
-        asm.emitShort(ACC_PUBLIC);
-        asm.emitShort(nameIdx);
-        asm.emitShort(add(nameIdx, S1));
-        if (checkedExceptionIndices == null) {
-            // Code attribute only
-            asm.emitShort(S1);
-        } else {
-            // Code and Exceptions attributes
-            asm.emitShort(S2);
-        }
-        // Code attribute
-        asm.emitShort(codeIdx);
-        asm.emitInt(attrLen);
-        asm.emitShort(code.getMaxStack());
-        asm.emitShort((short) Math.max(numArgs, code.getMaxLocals()));
-        asm.emitInt(codeLen);
-        asm.append(code);
-        asm.emitShort((short) excLen);
-        if (exceptionTable != null) {
-            asm.append(exceptionTable);
-        }
-        asm.emitShort(S0); // No additional attributes for Code attribute
-        if (checkedExceptionIndices != null) {
-            // Exceptions attribute
-            asm.emitShort(exceptionsIdx);
-            asm.emitInt(2 + 2 * checkedExceptionIndices.length);
-            asm.emitShort((short) checkedExceptionIndices.length);
-            for (int i = 0; i < checkedExceptionIndices.length; i++) {
-                asm.emitShort(checkedExceptionIndices[i]);
-            }
-        }
-    }
-
-    protected short indexForPrimitiveType(Class type) {
-        if (type == Boolean.TYPE) {
-            return booleanIdx;
-        } else if (type == Byte.TYPE) {
-            return byteIdx;
-        } else if (type == Character.TYPE) {
-            return characterIdx;
-        } else if (type == Double.TYPE) {
-            return doubleIdx;
-        } else if (type == Float.TYPE) {
-            return floatIdx;
-        } else if (type == Integer.TYPE) {
-            return integerIdx;
-        } else if (type == Long.TYPE) {
-            return longIdx;
-        } else if (type == Short.TYPE) {
-            return shortIdx;
-        }
-        throw new InternalError("Should have found primitive type");
-    }
-
-    protected short ctorIndexForPrimitiveType(Class type) {
-        if (type == Boolean.TYPE) {
-            return booleanCtorIdx;
-        } else if (type == Byte.TYPE) {
-            return byteCtorIdx;
-        } else if (type == Character.TYPE) {
-            return characterCtorIdx;
-        } else if (type == Double.TYPE) {
-            return doubleCtorIdx;
-        } else if (type == Float.TYPE) {
-            return floatCtorIdx;
-        } else if (type == Integer.TYPE) {
-            return integerCtorIdx;
-        } else if (type == Long.TYPE) {
-            return longCtorIdx;
-        } else if (type == Short.TYPE) {
-            return shortCtorIdx;
-        }
-        throw new InternalError("Should have found primitive type");
-    }
-
-    /** Returns true for widening or identity conversions for primitive
-        types only */
-    protected static boolean canWidenTo(Class type, Class otherType) {
-        if (!type.isPrimitive()) {
-            return false;
-        }
-
-        // Widening conversions (from JVM spec):
-        //  byte to short, int, long, float, or double
-        //  short to int, long, float, or double
-        //  char to int, long, float, or double
-        //  int to long, float, or double
-        //  long to float or double
-        //  float to double
-
-        if (type == Boolean.TYPE) {
-            if (otherType == Boolean.TYPE) {
-                return true;
-            }
-        } else if (type == Byte.TYPE) {
-            if (   otherType == Byte.TYPE
-                   || otherType == Short.TYPE
-                   || otherType == Integer.TYPE
-                   || otherType == Long.TYPE
-                   || otherType == Float.TYPE
-                   || otherType == Double.TYPE) {
-                return true;
-            }
-        } else if (type == Short.TYPE) {
-            if (   otherType == Short.TYPE
-                   || otherType == Integer.TYPE
-                   || otherType == Long.TYPE
-                   || otherType == Float.TYPE
-                   || otherType == Double.TYPE) {
-                return true;
-            }
-        } else if (type == Character.TYPE) {
-            if (   otherType == Character.TYPE
-                   || otherType == Integer.TYPE
-                   || otherType == Long.TYPE
-                   || otherType == Float.TYPE
-                   || otherType == Double.TYPE) {
-                return true;
-            }
-        } else if (type == Integer.TYPE) {
-            if (   otherType == Integer.TYPE
-                   || otherType == Long.TYPE
-                   || otherType == Float.TYPE
-                   || otherType == Double.TYPE) {
-                return true;
-            }
-        } else if (type == Long.TYPE) {
-            if (   otherType == Long.TYPE
-                   || otherType == Float.TYPE
-                   || otherType == Double.TYPE) {
-                return true;
-            }
-        } else if (type == Float.TYPE) {
-            if (   otherType == Float.TYPE
-                   || otherType == Double.TYPE) {
-                return true;
-            }
-        } else if (type == Double.TYPE) {
-            if (otherType == Double.TYPE) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /** Emits the widening bytecode for the given primitive conversion
-        (or none if the identity conversion). Requires that a primitive
-        conversion exists; i.e., canWidenTo must have already been
-        called and returned true. */
-    protected static void emitWideningBytecodeForPrimitiveConversion
-        (ClassFileAssembler cb,
-         Class fromType,
-         Class toType)
-    {
-        // Note that widening conversions for integral types (i.e., "b2s",
-        // "s2i") are no-ops since values on the Java stack are
-        // sign-extended.
-
-        // Widening conversions (from JVM spec):
-        //  byte to short, int, long, float, or double
-        //  short to int, long, float, or double
-        //  char to int, long, float, or double
-        //  int to long, float, or double
-        //  long to float or double
-        //  float to double
-
-        if (   fromType == Byte.TYPE
-               || fromType == Short.TYPE
-               || fromType == Character.TYPE
-               || fromType == Integer.TYPE) {
-            if (toType == Long.TYPE) {
-                cb.opc_i2l();
-            } else if (toType == Float.TYPE) {
-                cb.opc_i2f();
-            } else if (toType == Double.TYPE) {
-                cb.opc_i2d();
-            }
-        } else if (fromType == Long.TYPE) {
-            if (toType == Float.TYPE) {
-                cb.opc_l2f();
-            } else if (toType == Double.TYPE) {
-                cb.opc_l2d();
-            }
-        } else if (fromType == Float.TYPE) {
-            if (toType == Double.TYPE) {
-                cb.opc_f2d();
-            }
-        }
-
-        // Otherwise, was identity or no-op conversion. Fall through.
-    }
-
-    protected short unboxingMethodForPrimitiveType(Class primType) {
-        if (primType == Boolean.TYPE) {
-            return booleanUnboxIdx;
-        } else if (primType == Byte.TYPE) {
-            return byteUnboxIdx;
-        } else if (primType == Character.TYPE) {
-            return characterUnboxIdx;
-        } else if (primType == Short.TYPE) {
-            return shortUnboxIdx;
-        } else if (primType == Integer.TYPE) {
-            return integerUnboxIdx;
-        } else if (primType == Long.TYPE) {
-            return longUnboxIdx;
-        } else if (primType == Float.TYPE) {
-            return floatUnboxIdx;
-        } else if (primType == Double.TYPE) {
-            return doubleUnboxIdx;
-        }
-        throw new InternalError("Illegal primitive type " + primType.getName());
-    }
-
-    protected static final Class[] primitiveTypes = new Class[] {
-        Boolean.TYPE,
-        Byte.TYPE,
-        Character.TYPE,
-        Short.TYPE,
-        Integer.TYPE,
-        Long.TYPE,
-        Float.TYPE,
-        Double.TYPE
-    };
-
-    /** We don't consider "Void" to be a primitive type */
-    protected static boolean isPrimitive(Class c) {
-        return (c.isPrimitive() && c != Void.TYPE);
-    }
-
-    protected int typeSizeInStackSlots(Class c) {
-        if (c == Void.TYPE) {
-            return 0;
-        }
-        if (c == Long.TYPE || c == Double.TYPE) {
-            return 2;
-        }
-        return 1;
-    }
-
-    private ClassFileAssembler illegalArgumentCodeBuffer;
-    protected ClassFileAssembler illegalArgumentCodeBuffer() {
-        if (illegalArgumentCodeBuffer == null) {
-            illegalArgumentCodeBuffer = new ClassFileAssembler();
-            illegalArgumentCodeBuffer.opc_new(illegalArgumentClass);
-            illegalArgumentCodeBuffer.opc_dup();
-            illegalArgumentCodeBuffer.opc_invokespecial(illegalArgumentCtorIdx, 0, 0);
-            illegalArgumentCodeBuffer.opc_athrow();
-        }
-
-        return illegalArgumentCodeBuffer;
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/BootstrapConstructorAccessorImpl.java b/ojluni/src/main/java/sun/reflect/BootstrapConstructorAccessorImpl.java
deleted file mode 100755
index 62bf886..0000000
--- a/ojluni/src/main/java/sun/reflect/BootstrapConstructorAccessorImpl.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Constructor;
-
-/** Uses Unsafe.allocateObject() to instantiate classes; only used for
-    bootstrapping. */
-
-class BootstrapConstructorAccessorImpl extends ConstructorAccessorImpl {
-    private Constructor constructor;
-
-    BootstrapConstructorAccessorImpl(Constructor c) {
-        this.constructor = c;
-    }
-
-    public Object newInstance(Object[] args)
-        throws IllegalArgumentException, InvocationTargetException
-    {
-        try {
-            return UnsafeFieldAccessorImpl.unsafe.
-                allocateInstance(constructor.getDeclaringClass());
-        } catch (InstantiationException e) {
-            throw new InvocationTargetException(e);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/ByteVector.java b/ojluni/src/main/java/sun/reflect/ByteVector.java
deleted file mode 100755
index ad28ee3..0000000
--- a/ojluni/src/main/java/sun/reflect/ByteVector.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-/** A growable array of bytes. */
-
-interface ByteVector {
-    public int  getLength();
-    public byte get(int index);
-    public void put(int index, byte value);
-    public void add(byte value);
-    public void trim();
-    public byte[] getData();
-}
diff --git a/ojluni/src/main/java/sun/reflect/ByteVectorFactory.java b/ojluni/src/main/java/sun/reflect/ByteVectorFactory.java
deleted file mode 100755
index 64af68d..0000000
--- a/ojluni/src/main/java/sun/reflect/ByteVectorFactory.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-class ByteVectorFactory {
-    static ByteVector create() {
-        return new ByteVectorImpl();
-    }
-
-    static ByteVector create(int sz) {
-        return new ByteVectorImpl(sz);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/ByteVectorImpl.java b/ojluni/src/main/java/sun/reflect/ByteVectorImpl.java
deleted file mode 100755
index efa1c8a..0000000
--- a/ojluni/src/main/java/sun/reflect/ByteVectorImpl.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-class ByteVectorImpl implements ByteVector {
-    private byte[] data;
-    private int pos;
-
-    public ByteVectorImpl() {
-        this(100);
-    }
-
-    public ByteVectorImpl(int sz) {
-        data = new byte[sz];
-        pos = -1;
-    }
-
-    public int getLength() {
-        return pos + 1;
-    }
-
-    public byte get(int index) {
-        if (index >= data.length) {
-            resize(index);
-            pos = index;
-        }
-        return data[index];
-    }
-
-    public void put(int index, byte value) {
-        if (index >= data.length) {
-            resize(index);
-            pos = index;
-        }
-        data[index] = value;
-    }
-
-    public void add(byte value) {
-        if (++pos >= data.length) {
-            resize(pos);
-        }
-        data[pos] = value;
-    }
-
-    public void trim() {
-        if (pos != data.length - 1) {
-            byte[] newData = new byte[pos + 1];
-            System.arraycopy(data, 0, newData, 0, pos + 1);
-            data = newData;
-        }
-    }
-
-    public byte[] getData() {
-        return data;
-    }
-
-    private void resize(int minSize) {
-        if (minSize <= 2 * data.length) {
-            minSize = 2 * data.length;
-        }
-        byte[] newData = new byte[minSize];
-        System.arraycopy(data, 0, newData, 0, data.length);
-        data = newData;
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/ClassDefiner.java b/ojluni/src/main/java/sun/reflect/ClassDefiner.java
deleted file mode 100755
index 9ec4015..0000000
--- a/ojluni/src/main/java/sun/reflect/ClassDefiner.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2001, 2008, 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.
- */
-
-package sun.reflect;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import sun.misc.Unsafe;
-
-/** Utility class which assists in calling Unsafe.defineClass() by
-    creating a new class loader which delegates to the one needed in
-    order for proper resolution of the given bytecodes to occur. */
-
-class ClassDefiner {
-    static final Unsafe unsafe = Unsafe.getUnsafe();
-
-    /** <P> We define generated code into a new class loader which
-      delegates to the defining loader of the target class. It is
-      necessary for the VM to be able to resolve references to the
-      target class from the generated bytecodes, which could not occur
-      if the generated code was loaded into the bootstrap class
-      loader. </P>
-
-      <P> There are two primary reasons for creating a new loader
-      instead of defining these bytecodes directly into the defining
-      loader of the target class: first, it avoids any possible
-      security risk of having these bytecodes in the same loader.
-      Second, it allows the generated bytecodes to be unloaded earlier
-      than would otherwise be possible, decreasing run-time
-      footprint. </P>
-    */
-    static Class defineClass(String name, byte[] bytes, int off, int len,
-                             final ClassLoader parentClassLoader)
-    {
-        ClassLoader newLoader = AccessController.doPrivileged(
-            new PrivilegedAction<ClassLoader>() {
-                public ClassLoader run() {
-                        return new DelegatingClassLoader(parentClassLoader);
-                    }
-                });
-        return unsafe.defineClass(name, bytes, off, len, newLoader, null);
-    }
-}
-
-
-// NOTE: this class's name and presence are known to the virtual
-// machine as of the fix for 4474172.
-class DelegatingClassLoader extends ClassLoader {
-    DelegatingClassLoader(ClassLoader parent) {
-        super(parent);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/ClassFileAssembler.java b/ojluni/src/main/java/sun/reflect/ClassFileAssembler.java
deleted file mode 100755
index 7f6cecc..0000000
--- a/ojluni/src/main/java/sun/reflect/ClassFileAssembler.java
+++ /dev/null
@@ -1,671 +0,0 @@
-/*
- * Copyright (c) 2001, 2004, 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.
- */
-
-package sun.reflect;
-
-class ClassFileAssembler implements ClassFileConstants {
-    private ByteVector vec;
-    private short cpIdx = 0;
-
-    public ClassFileAssembler() {
-        this(ByteVectorFactory.create());
-    }
-
-    public ClassFileAssembler(ByteVector vec) {
-        this.vec = vec;
-    }
-
-    public ByteVector getData() {
-        return vec;
-    }
-
-    /** Length in bytes */
-    public short getLength() {
-        return (short) vec.getLength();
-    }
-
-    public void emitMagicAndVersion() {
-        emitInt(0xCAFEBABE);
-        emitShort((short) 0);
-        emitShort((short) 49);
-    }
-
-    public void emitInt(int val) {
-        emitByte((byte) (val >> 24));
-        emitByte((byte) ((val >> 16) & 0xFF));
-        emitByte((byte) ((val >> 8) & 0xFF));
-        emitByte((byte) (val & 0xFF));
-    }
-
-    public void emitShort(short val) {
-        emitByte((byte) ((val >> 8) & 0xFF));
-        emitByte((byte) (val & 0xFF));
-    }
-
-    // Support for labels; package-private
-    void emitShort(short bci, short val) {
-        vec.put(bci,     (byte) ((val >> 8) & 0xFF));
-        vec.put(bci + 1, (byte) (val & 0xFF));
-    }
-
-    public void emitByte(byte val) {
-        vec.add(val);
-    }
-
-    public void append(ClassFileAssembler asm) {
-        append(asm.vec);
-    }
-
-    public void append(ByteVector vec) {
-        for (int i = 0; i < vec.getLength(); i++) {
-            emitByte(vec.get(i));
-        }
-    }
-
-    /** Keeps track of the current (one-based) constant pool index;
-        incremented after emitting one of the following constant pool
-        entries. Can fetch the current constant pool index for use in
-        later entries.  Index points at the last valid constant pool
-        entry; initially invalid. It is illegal to fetch the constant
-        pool index before emitting at least one constant pool entry. */
-    public short cpi() {
-        if (cpIdx == 0) {
-            throw new RuntimeException("Illegal use of ClassFileAssembler");
-        }
-        return cpIdx;
-    }
-
-    public void emitConstantPoolUTF8(String str) {
-        // NOTE: can not use str.getBytes("UTF-8") here because of
-        // bootstrapping issues with the character set converters.
-        byte[] bytes = UTF8.encode(str);
-        emitByte(CONSTANT_Utf8);
-        emitShort((short) bytes.length);
-        for (int i = 0; i < bytes.length; i++) {
-            emitByte(bytes[i]);
-        }
-        cpIdx++;
-    }
-
-    public void emitConstantPoolClass(short index) {
-        emitByte(CONSTANT_Class);
-        emitShort(index);
-        cpIdx++;
-    }
-
-    public void emitConstantPoolNameAndType(short nameIndex, short typeIndex) {
-        emitByte(CONSTANT_NameAndType);
-        emitShort(nameIndex);
-        emitShort(typeIndex);
-        cpIdx++;
-    }
-
-    public void emitConstantPoolFieldref
-        (short classIndex, short nameAndTypeIndex)
-    {
-        emitByte(CONSTANT_Fieldref);
-        emitShort(classIndex);
-        emitShort(nameAndTypeIndex);
-        cpIdx++;
-    }
-
-    public void emitConstantPoolMethodref
-        (short classIndex, short nameAndTypeIndex)
-    {
-        emitByte(CONSTANT_Methodref);
-        emitShort(classIndex);
-        emitShort(nameAndTypeIndex);
-        cpIdx++;
-    }
-
-    public void emitConstantPoolInterfaceMethodref
-        (short classIndex, short nameAndTypeIndex)
-    {
-        emitByte(CONSTANT_InterfaceMethodref);
-        emitShort(classIndex);
-        emitShort(nameAndTypeIndex);
-        cpIdx++;
-    }
-
-    public void emitConstantPoolString(short utf8Index) {
-        emitByte(CONSTANT_String);
-        emitShort(utf8Index);
-        cpIdx++;
-    }
-
-    //----------------------------------------------------------------------
-    // Opcodes. Keeps track of maximum stack and locals. Make a new
-    // assembler for each piece of assembled code, then append the
-    // result to the previous assembler's class file.
-    //
-
-    private int stack     = 0;
-    private int maxStack  = 0;
-    private int maxLocals = 0;
-
-    private void incStack() {
-        setStack(stack + 1);
-    }
-
-    private void decStack() {
-        --stack;
-    }
-
-    public short getMaxStack() {
-        return (short) maxStack;
-    }
-
-    public short getMaxLocals() {
-        return (short) maxLocals;
-    }
-
-    /** It's necessary to be able to specify the number of arguments at
-        the beginning of the method (which translates to the initial
-        value of max locals) */
-    public void setMaxLocals(int maxLocals) {
-        this.maxLocals = maxLocals;
-    }
-
-    /** Needed to do flow control. Returns current stack depth. */
-    public int getStack() {
-        return stack;
-    }
-
-    /** Needed to do flow control. */
-    public void setStack(int value) {
-        stack = value;
-        if (stack > maxStack) {
-            maxStack = stack;
-        }
-    }
-
-    ///////////////
-    // Constants //
-    ///////////////
-
-    public void opc_aconst_null() {
-        emitByte(opc_aconst_null);
-        incStack();
-    }
-
-    public void opc_sipush(short constant) {
-        emitByte(opc_sipush);
-        emitShort(constant);
-        incStack();
-    }
-
-    public void opc_ldc(byte cpIdx) {
-        emitByte(opc_ldc);
-        emitByte(cpIdx);
-        incStack();
-    }
-
-    /////////////////////////////////////
-    // Local variable loads and stores //
-    /////////////////////////////////////
-
-    public void opc_iload_0() {
-        emitByte(opc_iload_0);
-        if (maxLocals < 1) maxLocals = 1;
-        incStack();
-    }
-
-    public void opc_iload_1() {
-        emitByte(opc_iload_1);
-        if (maxLocals < 2) maxLocals = 2;
-        incStack();
-    }
-
-    public void opc_iload_2() {
-        emitByte(opc_iload_2);
-        if (maxLocals < 3) maxLocals = 3;
-        incStack();
-    }
-
-    public void opc_iload_3() {
-        emitByte(opc_iload_3);
-        if (maxLocals < 4) maxLocals = 4;
-        incStack();
-    }
-
-    public void opc_lload_0() {
-        emitByte(opc_lload_0);
-        if (maxLocals < 2) maxLocals = 2;
-        incStack();
-        incStack();
-    }
-
-    public void opc_lload_1() {
-        emitByte(opc_lload_1);
-        if (maxLocals < 3) maxLocals = 3;
-        incStack();
-        incStack();
-    }
-
-    public void opc_lload_2() {
-        emitByte(opc_lload_2);
-        if (maxLocals < 4) maxLocals = 4;
-        incStack();
-        incStack();
-    }
-
-    public void opc_lload_3() {
-        emitByte(opc_lload_3);
-        if (maxLocals < 5) maxLocals = 5;
-        incStack();
-        incStack();
-    }
-
-    public void opc_fload_0() {
-        emitByte(opc_fload_0);
-        if (maxLocals < 1) maxLocals = 1;
-        incStack();
-    }
-
-    public void opc_fload_1() {
-        emitByte(opc_fload_1);
-        if (maxLocals < 2) maxLocals = 2;
-        incStack();
-    }
-
-    public void opc_fload_2() {
-        emitByte(opc_fload_2);
-        if (maxLocals < 3) maxLocals = 3;
-        incStack();
-    }
-
-    public void opc_fload_3() {
-        emitByte(opc_fload_3);
-        if (maxLocals < 4) maxLocals = 4;
-        incStack();
-    }
-
-    public void opc_dload_0() {
-        emitByte(opc_dload_0);
-        if (maxLocals < 2) maxLocals = 2;
-        incStack();
-        incStack();
-    }
-
-    public void opc_dload_1() {
-        emitByte(opc_dload_1);
-        if (maxLocals < 3) maxLocals = 3;
-        incStack();
-        incStack();
-    }
-
-    public void opc_dload_2() {
-        emitByte(opc_dload_2);
-        if (maxLocals < 4) maxLocals = 4;
-        incStack();
-        incStack();
-    }
-
-    public void opc_dload_3() {
-        emitByte(opc_dload_3);
-        if (maxLocals < 5) maxLocals = 5;
-        incStack();
-        incStack();
-    }
-
-    public void opc_aload_0() {
-        emitByte(opc_aload_0);
-        if (maxLocals < 1) maxLocals = 1;
-        incStack();
-    }
-
-    public void opc_aload_1() {
-        emitByte(opc_aload_1);
-        if (maxLocals < 2) maxLocals = 2;
-        incStack();
-    }
-
-    public void opc_aload_2() {
-        emitByte(opc_aload_2);
-        if (maxLocals < 3) maxLocals = 3;
-        incStack();
-    }
-
-    public void opc_aload_3() {
-        emitByte(opc_aload_3);
-        if (maxLocals < 4) maxLocals = 4;
-        incStack();
-    }
-
-    public void opc_aaload() {
-        emitByte(opc_aaload);
-        decStack();
-    }
-
-    public void opc_astore_0() {
-        emitByte(opc_astore_0);
-        if (maxLocals < 1) maxLocals = 1;
-        decStack();
-    }
-
-    public void opc_astore_1() {
-        emitByte(opc_astore_1);
-        if (maxLocals < 2) maxLocals = 2;
-        decStack();
-    }
-
-    public void opc_astore_2() {
-        emitByte(opc_astore_2);
-        if (maxLocals < 3) maxLocals = 3;
-        decStack();
-    }
-
-    public void opc_astore_3() {
-        emitByte(opc_astore_3);
-        if (maxLocals < 4) maxLocals = 4;
-        decStack();
-    }
-
-    ////////////////////////
-    // Stack manipulation //
-    ////////////////////////
-
-    public void opc_pop() {
-        emitByte(opc_pop);
-        decStack();
-    }
-
-    public void opc_dup() {
-        emitByte(opc_dup);
-        incStack();
-    }
-
-    public void opc_dup_x1() {
-        emitByte(opc_dup_x1);
-        incStack();
-    }
-
-    public void opc_swap() {
-        emitByte(opc_swap);
-    }
-
-    ///////////////////////////////
-    // Widening conversions only //
-    ///////////////////////////////
-
-    public void opc_i2l() {
-        emitByte(opc_i2l);
-    }
-
-    public void opc_i2f() {
-        emitByte(opc_i2f);
-    }
-
-    public void opc_i2d() {
-        emitByte(opc_i2d);
-    }
-
-    public void opc_l2f() {
-        emitByte(opc_l2f);
-    }
-
-    public void opc_l2d() {
-        emitByte(opc_l2d);
-    }
-
-    public void opc_f2d() {
-        emitByte(opc_f2d);
-    }
-
-    //////////////////
-    // Control flow //
-    //////////////////
-
-    public void opc_ifeq(short bciOffset) {
-        emitByte(opc_ifeq);
-        emitShort(bciOffset);
-        decStack();
-    }
-
-    /** Control flow with forward-reference BCI. Stack assumes
-        straight-through control flow. */
-    public void opc_ifeq(Label l) {
-        short instrBCI = getLength();
-        emitByte(opc_ifeq);
-        l.add(this, instrBCI, getLength(), getStack() - 1);
-        emitShort((short) -1); // Must be patched later
-    }
-
-    public void opc_if_icmpeq(short bciOffset) {
-        emitByte(opc_if_icmpeq);
-        emitShort(bciOffset);
-        setStack(getStack() - 2);
-    }
-
-    /** Control flow with forward-reference BCI. Stack assumes straight
-        control flow. */
-    public void opc_if_icmpeq(Label l) {
-        short instrBCI = getLength();
-        emitByte(opc_if_icmpeq);
-        l.add(this, instrBCI, getLength(), getStack() - 2);
-        emitShort((short) -1); // Must be patched later
-    }
-
-    public void opc_goto(short bciOffset) {
-        emitByte(opc_goto);
-        emitShort(bciOffset);
-    }
-
-    /** Control flow with forward-reference BCI. Stack assumes straight
-        control flow. */
-    public void opc_goto(Label l) {
-        short instrBCI = getLength();
-        emitByte(opc_goto);
-        l.add(this, instrBCI, getLength(), getStack());
-        emitShort((short) -1); // Must be patched later
-    }
-
-    public void opc_ifnull(short bciOffset) {
-        emitByte(opc_ifnull);
-        emitShort(bciOffset);
-        decStack();
-    }
-
-    /** Control flow with forward-reference BCI. Stack assumes straight
-        control flow. */
-    public void opc_ifnull(Label l) {
-        short instrBCI = getLength();
-        emitByte(opc_ifnull);
-        l.add(this, instrBCI, getLength(), getStack() - 1);
-        emitShort((short) -1); // Must be patched later
-        decStack();
-    }
-
-    public void opc_ifnonnull(short bciOffset) {
-        emitByte(opc_ifnonnull);
-        emitShort(bciOffset);
-        decStack();
-    }
-
-    /** Control flow with forward-reference BCI. Stack assumes straight
-        control flow. */
-    public void opc_ifnonnull(Label l) {
-        short instrBCI = getLength();
-        emitByte(opc_ifnonnull);
-        l.add(this, instrBCI, getLength(), getStack() - 1);
-        emitShort((short) -1); // Must be patched later
-        decStack();
-    }
-
-    /////////////////////////
-    // Return instructions //
-    /////////////////////////
-
-    public void opc_ireturn() {
-        emitByte(opc_ireturn);
-        setStack(0);
-    }
-
-    public void opc_lreturn() {
-        emitByte(opc_lreturn);
-        setStack(0);
-    }
-
-    public void opc_freturn() {
-        emitByte(opc_freturn);
-        setStack(0);
-    }
-
-    public void opc_dreturn() {
-        emitByte(opc_dreturn);
-        setStack(0);
-    }
-
-    public void opc_areturn() {
-        emitByte(opc_areturn);
-        setStack(0);
-    }
-
-    public void opc_return() {
-        emitByte(opc_return);
-        setStack(0);
-    }
-
-    //////////////////////
-    // Field operations //
-    //////////////////////
-
-    public void opc_getstatic(short fieldIndex, int fieldSizeInStackSlots) {
-        emitByte(opc_getstatic);
-        emitShort(fieldIndex);
-        setStack(getStack() + fieldSizeInStackSlots);
-    }
-
-    public void opc_putstatic(short fieldIndex, int fieldSizeInStackSlots) {
-        emitByte(opc_putstatic);
-        emitShort(fieldIndex);
-        setStack(getStack() - fieldSizeInStackSlots);
-    }
-
-    public void opc_getfield(short fieldIndex, int fieldSizeInStackSlots) {
-        emitByte(opc_getfield);
-        emitShort(fieldIndex);
-        setStack(getStack() + fieldSizeInStackSlots - 1);
-    }
-
-    public void opc_putfield(short fieldIndex, int fieldSizeInStackSlots) {
-        emitByte(opc_putfield);
-        emitShort(fieldIndex);
-        setStack(getStack() - fieldSizeInStackSlots - 1);
-    }
-
-    ////////////////////////
-    // Method invocations //
-    ////////////////////////
-
-    /** Long and double arguments and return types count as 2 arguments;
-        other values count as 1. */
-    public void opc_invokevirtual(short methodIndex,
-                                  int numArgs,
-                                  int numReturnValues)
-    {
-        emitByte(opc_invokevirtual);
-        emitShort(methodIndex);
-        setStack(getStack() - numArgs - 1 + numReturnValues);
-    }
-
-    /** Long and double arguments and return types count as 2 arguments;
-        other values count as 1. */
-    public void opc_invokespecial(short methodIndex,
-                                  int numArgs,
-                                  int numReturnValues)
-    {
-        emitByte(opc_invokespecial);
-        emitShort(methodIndex);
-        setStack(getStack() - numArgs - 1 + numReturnValues);
-    }
-
-    /** Long and double arguments and return types count as 2 arguments;
-        other values count as 1. */
-    public void opc_invokestatic(short methodIndex,
-                                 int numArgs,
-                                 int numReturnValues)
-    {
-        emitByte(opc_invokestatic);
-        emitShort(methodIndex);
-        setStack(getStack() - numArgs + numReturnValues);
-    }
-
-    /** Long and double arguments and return types count as 2 arguments;
-        other values count as 1. */
-    public void opc_invokeinterface(short methodIndex,
-                                    int numArgs,
-                                    byte count,
-                                    int numReturnValues)
-    {
-        emitByte(opc_invokeinterface);
-        emitShort(methodIndex);
-        emitByte(count);
-        emitByte((byte) 0);
-        setStack(getStack() - numArgs - 1 + numReturnValues);
-    }
-
-    //////////////////
-    // Array length //
-    //////////////////
-
-    public void opc_arraylength() {
-        emitByte(opc_arraylength);
-    }
-
-    /////////
-    // New //
-    /////////
-
-    public void opc_new(short classIndex) {
-        emitByte(opc_new);
-        emitShort(classIndex);
-        incStack();
-    }
-
-    ////////////
-    // Athrow //
-    ////////////
-
-    public void opc_athrow() {
-        emitByte(opc_athrow);
-        setStack(1);
-    }
-
-    //////////////////////////////
-    // Checkcast and instanceof //
-    //////////////////////////////
-
-    /** Assumes the checkcast succeeds */
-    public void opc_checkcast(short classIndex) {
-        emitByte(opc_checkcast);
-        emitShort(classIndex);
-    }
-
-    public void opc_instanceof(short classIndex) {
-        emitByte(opc_instanceof);
-        emitShort(classIndex);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/ClassFileConstants.java b/ojluni/src/main/java/sun/reflect/ClassFileConstants.java
deleted file mode 100755
index 0bf391a..0000000
--- a/ojluni/src/main/java/sun/reflect/ClassFileConstants.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-/** Minimal set of class file constants for assembly of field and
-    method accessors. */
-
-interface ClassFileConstants {
-    // Constants
-    public static final byte opc_aconst_null   = (byte) 0x1;
-    public static final byte opc_sipush        = (byte) 0x11;
-    public static final byte opc_ldc           = (byte) 0x12;
-
-    // Local variable loads and stores
-    public static final byte opc_iload_0       = (byte) 0x1a;
-    public static final byte opc_iload_1       = (byte) 0x1b;
-    public static final byte opc_iload_2       = (byte) 0x1c;
-    public static final byte opc_iload_3       = (byte) 0x1d;
-    public static final byte opc_lload_0       = (byte) 0x1e;
-    public static final byte opc_lload_1       = (byte) 0x1f;
-    public static final byte opc_lload_2       = (byte) 0x20;
-    public static final byte opc_lload_3       = (byte) 0x21;
-    public static final byte opc_fload_0       = (byte) 0x22;
-    public static final byte opc_fload_1       = (byte) 0x23;
-    public static final byte opc_fload_2       = (byte) 0x24;
-    public static final byte opc_fload_3       = (byte) 0x25;
-    public static final byte opc_dload_0       = (byte) 0x26;
-    public static final byte opc_dload_1       = (byte) 0x27;
-    public static final byte opc_dload_2       = (byte) 0x28;
-    public static final byte opc_dload_3       = (byte) 0x29;
-    public static final byte opc_aload_0       = (byte) 0x2a;
-    public static final byte opc_aload_1       = (byte) 0x2b;
-    public static final byte opc_aload_2       = (byte) 0x2c;
-    public static final byte opc_aload_3       = (byte) 0x2d;
-    public static final byte opc_aaload        = (byte) 0x32;
-    public static final byte opc_astore_0      = (byte) 0x4b;
-    public static final byte opc_astore_1      = (byte) 0x4c;
-    public static final byte opc_astore_2      = (byte) 0x4d;
-    public static final byte opc_astore_3      = (byte) 0x4e;
-
-    // Stack manipulation
-    public static final byte opc_pop           = (byte) 0x57;
-    public static final byte opc_dup           = (byte) 0x59;
-    public static final byte opc_dup_x1        = (byte) 0x5a;
-    public static final byte opc_swap          = (byte) 0x5f;
-
-    // Conversions
-    public static final byte opc_i2l           = (byte) 0x85;
-    public static final byte opc_i2f           = (byte) 0x86;
-    public static final byte opc_i2d           = (byte) 0x87;
-    public static final byte opc_l2i           = (byte) 0x88;
-    public static final byte opc_l2f           = (byte) 0x89;
-    public static final byte opc_l2d           = (byte) 0x8a;
-    public static final byte opc_f2i           = (byte) 0x8b;
-    public static final byte opc_f2l           = (byte) 0x8c;
-    public static final byte opc_f2d           = (byte) 0x8d;
-    public static final byte opc_d2i           = (byte) 0x8e;
-    public static final byte opc_d2l           = (byte) 0x8f;
-    public static final byte opc_d2f           = (byte) 0x90;
-    public static final byte opc_i2b           = (byte) 0x91;
-    public static final byte opc_i2c           = (byte) 0x92;
-    public static final byte opc_i2s           = (byte) 0x93;
-
-    // Control flow
-    public static final byte opc_ifeq          = (byte) 0x99;
-    public static final byte opc_if_icmpeq     = (byte) 0x9f;
-    public static final byte opc_goto          = (byte) 0xa7;
-
-    // Return instructions
-    public static final byte opc_ireturn       = (byte) 0xac;
-    public static final byte opc_lreturn       = (byte) 0xad;
-    public static final byte opc_freturn       = (byte) 0xae;
-    public static final byte opc_dreturn       = (byte) 0xaf;
-    public static final byte opc_areturn       = (byte) 0xb0;
-    public static final byte opc_return        = (byte) 0xb1;
-
-    // Field operations
-    public static final byte opc_getstatic     = (byte) 0xb2;
-    public static final byte opc_putstatic     = (byte) 0xb3;
-    public static final byte opc_getfield      = (byte) 0xb4;
-    public static final byte opc_putfield      = (byte) 0xb5;
-
-    // Method invocations
-    public static final byte opc_invokevirtual   = (byte) 0xb6;
-    public static final byte opc_invokespecial   = (byte) 0xb7;
-    public static final byte opc_invokestatic    = (byte) 0xb8;
-    public static final byte opc_invokeinterface = (byte) 0xb9;
-
-    // Array length
-    public static final byte opc_arraylength     = (byte) 0xbe;
-
-    // New
-    public static final byte opc_new           = (byte) 0xbb;
-
-    // Athrow
-    public static final byte opc_athrow        = (byte) 0xbf;
-
-    // Checkcast and instanceof
-    public static final byte opc_checkcast     = (byte) 0xc0;
-    public static final byte opc_instanceof    = (byte) 0xc1;
-
-    // Ifnull and ifnonnull
-    public static final byte opc_ifnull        = (byte) 0xc6;
-    public static final byte opc_ifnonnull     = (byte) 0xc7;
-
-    // Constant pool tags
-    public static final byte CONSTANT_Class              = (byte) 7;
-    public static final byte CONSTANT_Fieldref           = (byte) 9;
-    public static final byte CONSTANT_Methodref          = (byte) 10;
-    public static final byte CONSTANT_InterfaceMethodref = (byte) 11;
-    public static final byte CONSTANT_NameAndType        = (byte) 12;
-    public static final byte CONSTANT_String             = (byte) 8;
-    public static final byte CONSTANT_Utf8               = (byte) 1;
-
-    // Access flags
-    public static final short ACC_PUBLIC = (short) 0x0001;
-}
diff --git a/ojluni/src/main/java/sun/reflect/ConstantPool.java b/ojluni/src/main/java/sun/reflect/ConstantPool.java
deleted file mode 100755
index 5df2344..0000000
--- a/ojluni/src/main/java/sun/reflect/ConstantPool.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.*;
-
-/** Provides reflective access to the constant pools of classes.
-    Currently this is needed to provide reflective access to annotations
-    but may be used by other internal subsystems in the future. */
-
-public class ConstantPool {
-  // Number of entries in this constant pool (= maximum valid constant pool index)
-  public int      getSize()                      { return getSize0            (constantPoolOop);        }
-  public Class    getClassAt         (int index) { return getClassAt0         (constantPoolOop, index); }
-  public Class    getClassAtIfLoaded (int index) { return getClassAtIfLoaded0 (constantPoolOop, index); }
-  // Returns either a Method or Constructor.
-  // Static initializers are returned as Method objects.
-  public Member   getMethodAt        (int index) { return getMethodAt0        (constantPoolOop, index); }
-  public Member   getMethodAtIfLoaded(int index) { return getMethodAtIfLoaded0(constantPoolOop, index); }
-  public Field    getFieldAt         (int index) { return getFieldAt0         (constantPoolOop, index); }
-  public Field    getFieldAtIfLoaded (int index) { return getFieldAtIfLoaded0 (constantPoolOop, index); }
-  // Fetches the class name, member (field, method or interface
-  // method) name, and type descriptor as an array of three Strings
-  public String[] getMemberRefInfoAt (int index) { return getMemberRefInfoAt0 (constantPoolOop, index); }
-  public int      getIntAt           (int index) { return getIntAt0           (constantPoolOop, index); }
-  public long     getLongAt          (int index) { return getLongAt0          (constantPoolOop, index); }
-  public float    getFloatAt         (int index) { return getFloatAt0         (constantPoolOop, index); }
-  public double   getDoubleAt        (int index) { return getDoubleAt0        (constantPoolOop, index); }
-  public String   getStringAt        (int index) { return getStringAt0        (constantPoolOop, index); }
-  public String   getUTF8At          (int index) { return getUTF8At0          (constantPoolOop, index); }
-
-  //---------------------------------------------------------------------------
-  // Internals only below this point
-  //
-
-  static {
-      Reflection.registerFieldsToFilter(ConstantPool.class, new String[] { "constantPoolOop" });
-  }
-
-  // HotSpot-internal constant pool object (set by the VM, name known to the VM)
-  private Object constantPoolOop;
-
-  private native int      getSize0            (Object constantPoolOop);
-  private native Class    getClassAt0         (Object constantPoolOop, int index);
-  private native Class    getClassAtIfLoaded0 (Object constantPoolOop, int index);
-  private native Member   getMethodAt0        (Object constantPoolOop, int index);
-  private native Member   getMethodAtIfLoaded0(Object constantPoolOop, int index);
-  private native Field    getFieldAt0         (Object constantPoolOop, int index);
-  private native Field    getFieldAtIfLoaded0 (Object constantPoolOop, int index);
-  private native String[] getMemberRefInfoAt0 (Object constantPoolOop, int index);
-  private native int      getIntAt0           (Object constantPoolOop, int index);
-  private native long     getLongAt0          (Object constantPoolOop, int index);
-  private native float    getFloatAt0         (Object constantPoolOop, int index);
-  private native double   getDoubleAt0        (Object constantPoolOop, int index);
-  private native String   getStringAt0        (Object constantPoolOop, int index);
-  private native String   getUTF8At0          (Object constantPoolOop, int index);
-}
diff --git a/ojluni/src/main/java/sun/reflect/ConstructorAccessorImpl.java b/ojluni/src/main/java/sun/reflect/ConstructorAccessorImpl.java
deleted file mode 100755
index 9b09831..0000000
--- a/ojluni/src/main/java/sun/reflect/ConstructorAccessorImpl.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.InvocationTargetException;
-
-/** Package-private implementation of the ConstructorAccessor
-    interface which has access to all classes and all fields,
-    regardless of language restrictions. See MagicAccessorImpl. */
-
-abstract class ConstructorAccessorImpl extends MagicAccessorImpl
-    implements ConstructorAccessor {
-    /** Matches specification in {@link java.lang.reflect.Constructor} */
-    public abstract Object newInstance(Object[] args)
-        throws InstantiationException,
-               IllegalArgumentException,
-               InvocationTargetException;
-}
diff --git a/ojluni/src/main/java/sun/reflect/DelegatingConstructorAccessorImpl.java b/ojluni/src/main/java/sun/reflect/DelegatingConstructorAccessorImpl.java
deleted file mode 100755
index 6ee4d5f..0000000
--- a/ojluni/src/main/java/sun/reflect/DelegatingConstructorAccessorImpl.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.InvocationTargetException;
-
-/** Delegates its invocation to another ConstructorAccessorImpl and can
-    change its delegate at run time. */
-
-class DelegatingConstructorAccessorImpl extends ConstructorAccessorImpl {
-    private ConstructorAccessorImpl delegate;
-
-    DelegatingConstructorAccessorImpl(ConstructorAccessorImpl delegate) {
-        setDelegate(delegate);
-    }
-
-    public Object newInstance(Object[] args)
-      throws InstantiationException,
-             IllegalArgumentException,
-             InvocationTargetException
-    {
-        return delegate.newInstance(args);
-    }
-
-    void setDelegate(ConstructorAccessorImpl delegate) {
-        this.delegate = delegate;
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/DelegatingMethodAccessorImpl.java b/ojluni/src/main/java/sun/reflect/DelegatingMethodAccessorImpl.java
deleted file mode 100755
index 115d9aa..0000000
--- a/ojluni/src/main/java/sun/reflect/DelegatingMethodAccessorImpl.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.InvocationTargetException;
-
-/** Delegates its invocation to another MethodAccessorImpl and can
-    change its delegate at run time. */
-
-class DelegatingMethodAccessorImpl extends MethodAccessorImpl {
-    private MethodAccessorImpl delegate;
-
-    DelegatingMethodAccessorImpl(MethodAccessorImpl delegate) {
-        setDelegate(delegate);
-    }
-
-    public Object invoke(Object obj, Object[] args)
-        throws IllegalArgumentException, InvocationTargetException
-    {
-        return delegate.invoke(obj, args);
-    }
-
-    void setDelegate(MethodAccessorImpl delegate) {
-        this.delegate = delegate;
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/FieldAccessor.java b/ojluni/src/main/java/sun/reflect/FieldAccessor.java
deleted file mode 100755
index 7b974f6..0000000
--- a/ojluni/src/main/java/sun/reflect/FieldAccessor.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-/** This interface provides the declarations for the accessor methods
-    of java.lang.reflect.Field. Each Field object is configured with a
-    (possibly dynamically-generated) class which implements this
-    interface. */
-
-public interface FieldAccessor {
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public Object get(Object obj) throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public boolean getBoolean(Object obj) throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public byte getByte(Object obj) throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public char getChar(Object obj) throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public short getShort(Object obj) throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public int getInt(Object obj) throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public long getLong(Object obj) throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public float getFloat(Object obj) throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public double getDouble(Object obj) throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException;
-}
diff --git a/ojluni/src/main/java/sun/reflect/FieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/FieldAccessorImpl.java
deleted file mode 100755
index cbfa3c1..0000000
--- a/ojluni/src/main/java/sun/reflect/FieldAccessorImpl.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-/** Package-private implementation of the FieldAccessor interface
-    which has access to all classes and all fields, regardless of
-    language restrictions. See MagicAccessorImpl. */
-
-abstract class FieldAccessorImpl extends MagicAccessorImpl
-    implements FieldAccessor {
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract Object get(Object obj)
-        throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract boolean getBoolean(Object obj)
-        throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract byte getByte(Object obj)
-        throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract char getChar(Object obj)
-        throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract short getShort(Object obj)
-        throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract int getInt(Object obj)
-        throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract long getLong(Object obj)
-        throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract float getFloat(Object obj)
-        throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract double getDouble(Object obj)
-        throws IllegalArgumentException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException;
-
-    /** Matches specification in {@link java.lang.reflect.Field} */
-    public abstract void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException;
-}
diff --git a/ojluni/src/main/java/sun/reflect/FieldInfo.java b/ojluni/src/main/java/sun/reflect/FieldInfo.java
deleted file mode 100755
index 6972155..0000000
--- a/ojluni/src/main/java/sun/reflect/FieldInfo.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-
-/** NOTE: obsolete as of JDK 1.4 B75 and should be removed from the
-    workspace (FIXME) */
-
-public class FieldInfo {
-    // Set by the VM directly. Do not move these fields around or add
-    // others before (or after) them without also modifying the VM's code.
-    private String name;
-    private String signature;
-    private int    modifiers;
-    // This is compatible with the old reflection implementation's
-    // "slot" value to allow sun.misc.Unsafe to work
-    private int    slot;
-
-    // Not really necessary to provide a constructor since the VM
-    // creates these directly
-    FieldInfo() {
-    }
-
-    public String name() {
-        return name;
-    }
-
-    /** This is in "external" format, i.e. having '.' as separator
-        rather than '/' */
-    public String signature() {
-        return signature;
-    }
-
-    public int modifiers() {
-        return modifiers;
-    }
-
-    public int slot() {
-        return slot;
-    }
-
-    /** Convenience routine */
-    public boolean isPublic() {
-        return (Modifier.isPublic(modifiers()));
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/InstantiationExceptionConstructorAccessorImpl.java b/ojluni/src/main/java/sun/reflect/InstantiationExceptionConstructorAccessorImpl.java
deleted file mode 100755
index 08f921f..0000000
--- a/ojluni/src/main/java/sun/reflect/InstantiationExceptionConstructorAccessorImpl.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-
-/** Throws an InstantiationException with given error message upon
-    newInstance() call */
-
-class InstantiationExceptionConstructorAccessorImpl
-    extends ConstructorAccessorImpl {
-    private String message;
-
-    InstantiationExceptionConstructorAccessorImpl(String message) {
-        this.message = message;
-    }
-
-    public Object newInstance(Object[] args)
-        throws InstantiationException,
-               IllegalArgumentException,
-               InvocationTargetException
-    {
-        if (message == null) {
-            throw new InstantiationException();
-        }
-        throw new InstantiationException(message);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/Label.java b/ojluni/src/main/java/sun/reflect/Label.java
deleted file mode 100755
index e4092d8..0000000
--- a/ojluni/src/main/java/sun/reflect/Label.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.ArrayList;
-
-/** Allows forward references in bytecode streams emitted by
-    ClassFileAssembler. Assumes that the start of the method body is
-    the first byte in the assembler's buffer. May be used at more than
-    one branch site. */
-
-class Label {
-    static class PatchInfo {
-        PatchInfo(ClassFileAssembler asm,
-                  short instrBCI,
-                  short patchBCI,
-                  int stackDepth)
-        {
-            this.asm = asm;
-            this.instrBCI   = instrBCI;
-            this.patchBCI   = patchBCI;
-            this.stackDepth = stackDepth;
-        }
-        // This won't work for more than one assembler anyway, so this is
-        // unnecessary
-        ClassFileAssembler asm;
-        short instrBCI;
-        short patchBCI;
-        int   stackDepth;
-    }
-    private List/*<PatchInfo>*/ patches = new ArrayList();
-
-    public Label() {
-    }
-
-    void add(ClassFileAssembler asm,
-             short instrBCI,
-             short patchBCI,
-             int stackDepth)
-    {
-        patches.add(new PatchInfo(asm, instrBCI, patchBCI, stackDepth));
-    }
-
-    public void bind() {
-        for (Iterator iter = patches.iterator(); iter.hasNext(); ) {
-            PatchInfo patch = (PatchInfo) iter.next();
-            short curBCI = patch.asm.getLength();
-            short offset = (short) (curBCI - patch.instrBCI);
-            patch.asm.emitShort(patch.patchBCI, offset);
-            patch.asm.setStack(patch.stackDepth);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/LangReflectAccess.java b/ojluni/src/main/java/sun/reflect/LangReflectAccess.java
deleted file mode 100755
index fba1d31..0000000
--- a/ojluni/src/main/java/sun/reflect/LangReflectAccess.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2001, 2004, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.*;
-
-/** An interface which gives privileged packages Java-level access to
-    internals of java.lang.reflect. */
-
-public interface LangReflectAccess {
-    /** Creates a new java.lang.reflect.Field. Access checks as per
-        java.lang.reflect.AccessibleObject are not overridden. */
-    public Field newField(Class<?> declaringClass,
-                          String name,
-                          Class<?> type,
-                          int modifiers,
-                          int slot,
-                          String signature,
-                          byte[] annotations);
-
-    /** Creates a new java.lang.reflect.Method. Access checks as per
-      java.lang.reflect.AccessibleObject are not overridden. */
-    public Method newMethod(Class<?> declaringClass,
-                            String name,
-                            Class<?>[] parameterTypes,
-                            Class<?> returnType,
-                            Class<?>[] checkedExceptions,
-                            int modifiers,
-                            int slot,
-                            String signature,
-                            byte[] annotations,
-                            byte[] parameterAnnotations,
-                            byte[] annotationDefault);
-
-    /** Creates a new java.lang.reflect.Constructor. Access checks as
-      per java.lang.reflect.AccessibleObject are not overridden. */
-    public <T> Constructor<T> newConstructor(Class<T> declaringClass,
-                                             Class<?>[] parameterTypes,
-                                             Class<?>[] checkedExceptions,
-                                             int modifiers,
-                                             int slot,
-                                             String signature,
-                                             byte[] annotations,
-                                             byte[] parameterAnnotations);
-
-    /** Gets the MethodAccessor object for a java.lang.reflect.Method */
-    public MethodAccessor getMethodAccessor(Method m);
-
-    /** Sets the MethodAccessor object for a java.lang.reflect.Method */
-    public void setMethodAccessor(Method m, MethodAccessor accessor);
-
-    /** Gets the ConstructorAccessor object for a
-        java.lang.reflect.Constructor */
-    public ConstructorAccessor getConstructorAccessor(Constructor<?> c);
-
-    /** Sets the ConstructorAccessor object for a
-        java.lang.reflect.Constructor */
-    public void setConstructorAccessor(Constructor<?> c,
-                                       ConstructorAccessor accessor);
-
-    /** Gets the "slot" field from a Constructor (used for serialization) */
-    public int getConstructorSlot(Constructor<?> c);
-
-    /** Gets the "signature" field from a Constructor (used for serialization) */
-    public String getConstructorSignature(Constructor<?> c);
-
-    /** Gets the "annotations" field from a Constructor (used for serialization) */
-    public byte[] getConstructorAnnotations(Constructor<?> c);
-
-    /** Gets the "parameterAnnotations" field from a Constructor (used for serialization) */
-    public byte[] getConstructorParameterAnnotations(Constructor<?> c);
-
-    //
-    // Copying routines, needed to quickly fabricate new Field,
-    // Method, and Constructor objects from templates
-    //
-
-    /** Makes a "child" copy of a Method */
-    public Method      copyMethod(Method arg);
-
-    /** Makes a "child" copy of a Field */
-    public Field       copyField(Field arg);
-
-    /** Makes a "child" copy of a Constructor */
-    public <T> Constructor<T> copyConstructor(Constructor<T> arg);
-}
diff --git a/ojluni/src/main/java/sun/reflect/MagicAccessorImpl.java b/ojluni/src/main/java/sun/reflect/MagicAccessorImpl.java
deleted file mode 100755
index 5962436..0000000
--- a/ojluni/src/main/java/sun/reflect/MagicAccessorImpl.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-/** <P> MagicAccessorImpl (named for parity with FieldAccessorImpl and
-    others, not because it actually implements an interface) is a
-    marker class in the hierarchy. All subclasses of this class are
-    "magically" granted access by the VM to otherwise inaccessible
-    fields and methods of other classes. It is used to hold the code
-    for dynamically-generated FieldAccessorImpl and MethodAccessorImpl
-    subclasses. (Use of the word "unsafe" was avoided in this class's
-    name to avoid confusion with {@link sun.misc.Unsafe}.) </P>
-
-    <P> The bug fix for 4486457 also necessitated disabling
-    verification for this class and all subclasses, as opposed to just
-    SerializationConstructorAccessorImpl and subclasses, to avoid
-    having to indicate to the VM which of these dynamically-generated
-    stub classes were known to be able to pass the verifier. </P>
-
-    <P> Do not change the name of this class without also changing the
-    VM's code. </P> */
-
-class MagicAccessorImpl {
-}
diff --git a/ojluni/src/main/java/sun/reflect/MethodAccessor.java b/ojluni/src/main/java/sun/reflect/MethodAccessor.java
deleted file mode 100755
index b38514a..0000000
--- a/ojluni/src/main/java/sun/reflect/MethodAccessor.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.InvocationTargetException;
-
-/** This interface provides the declaration for
-    java.lang.reflect.Method.invoke(). Each Method object is
-    configured with a (possibly dynamically-generated) class which
-    implements this interface.
-*/
-
-public interface MethodAccessor {
-    /** Matches specification in {@link java.lang.reflect.Method} */
-    public Object invoke(Object obj, Object[] args)
-        throws IllegalArgumentException, InvocationTargetException;
-}
diff --git a/ojluni/src/main/java/sun/reflect/MethodAccessorGenerator.java b/ojluni/src/main/java/sun/reflect/MethodAccessorGenerator.java
deleted file mode 100755
index f312f3e..0000000
--- a/ojluni/src/main/java/sun/reflect/MethodAccessorGenerator.java
+++ /dev/null
@@ -1,782 +0,0 @@
-/*
- * Copyright (c) 2001, 2008, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import sun.misc.Unsafe;
-
-/** Generator for sun.reflect.MethodAccessor and
-    sun.reflect.ConstructorAccessor objects using bytecodes to
-    implement reflection. A java.lang.reflect.Method or
-    java.lang.reflect.Constructor object can delegate its invoke or
-    newInstance method to an accessor using native code or to one
-    generated by this class. (Methods and Constructors were merged
-    together in this class to ensure maximum code sharing.) */
-
-class MethodAccessorGenerator extends AccessorGenerator {
-
-    private static final short NUM_BASE_CPOOL_ENTRIES   = (short) 12;
-    // One for invoke() plus one for constructor
-    private static final short NUM_METHODS              = (short) 2;
-    // Only used if forSerialization is true
-    private static final short NUM_SERIALIZATION_CPOOL_ENTRIES = (short) 2;
-
-    private static volatile int methodSymnum = 0;
-    private static volatile int constructorSymnum = 0;
-    private static volatile int serializationConstructorSymnum = 0;
-
-    private Class   declaringClass;
-    private Class[] parameterTypes;
-    private Class   returnType;
-    private boolean isConstructor;
-    private boolean forSerialization;
-
-    private short targetMethodRef;
-    private short invokeIdx;
-    private short invokeDescriptorIdx;
-    // Constant pool index of CONSTANT_Class_info for first
-    // non-primitive parameter type. Should be incremented by 2.
-    private short nonPrimitiveParametersBaseIdx;
-
-    MethodAccessorGenerator() {
-    }
-
-    /** This routine is not thread-safe */
-    public MethodAccessor generateMethod(Class declaringClass,
-                                         String name,
-                                         Class[] parameterTypes,
-                                         Class   returnType,
-                                         Class[] checkedExceptions,
-                                         int modifiers)
-    {
-        return (MethodAccessor) generate(declaringClass,
-                                         name,
-                                         parameterTypes,
-                                         returnType,
-                                         checkedExceptions,
-                                         modifiers,
-                                         false,
-                                         false,
-                                         null);
-    }
-
-    /** This routine is not thread-safe */
-    public ConstructorAccessor generateConstructor(Class declaringClass,
-                                                   Class[] parameterTypes,
-                                                   Class[] checkedExceptions,
-                                                   int modifiers)
-    {
-        return (ConstructorAccessor) generate(declaringClass,
-                                              "<init>",
-                                              parameterTypes,
-                                              Void.TYPE,
-                                              checkedExceptions,
-                                              modifiers,
-                                              true,
-                                              false,
-                                              null);
-    }
-
-    /** This routine is not thread-safe */
-    public SerializationConstructorAccessorImpl
-    generateSerializationConstructor(Class declaringClass,
-                                     Class[] parameterTypes,
-                                     Class[] checkedExceptions,
-                                     int modifiers,
-                                     Class targetConstructorClass)
-    {
-        return (SerializationConstructorAccessorImpl)
-            generate(declaringClass,
-                     "<init>",
-                     parameterTypes,
-                     Void.TYPE,
-                     checkedExceptions,
-                     modifiers,
-                     true,
-                     true,
-                     targetConstructorClass);
-    }
-
-    /** This routine is not thread-safe */
-    private MagicAccessorImpl generate(final Class declaringClass,
-                                       String name,
-                                       Class[] parameterTypes,
-                                       Class   returnType,
-                                       Class[] checkedExceptions,
-                                       int modifiers,
-                                       boolean isConstructor,
-                                       boolean forSerialization,
-                                       Class serializationTargetClass)
-    {
-        ByteVector vec = ByteVectorFactory.create();
-        asm = new ClassFileAssembler(vec);
-        this.declaringClass = declaringClass;
-        this.parameterTypes = parameterTypes;
-        this.returnType = returnType;
-        this.modifiers = modifiers;
-        this.isConstructor = isConstructor;
-        this.forSerialization = forSerialization;
-
-        asm.emitMagicAndVersion();
-
-        // Constant pool entries:
-        // ( * = Boxing information: optional)
-        // (+  = Shared entries provided by AccessorGenerator)
-        // (^  = Only present if generating SerializationConstructorAccessor)
-        //     [UTF-8] [This class's name]
-        //     [CONSTANT_Class_info] for above
-        //     [UTF-8] "sun/reflect/{MethodAccessorImpl,ConstructorAccessorImpl,SerializationConstructorAccessorImpl}"
-        //     [CONSTANT_Class_info] for above
-        //     [UTF-8] [Target class's name]
-        //     [CONSTANT_Class_info] for above
-        // ^   [UTF-8] [Serialization: Class's name in which to invoke constructor]
-        // ^   [CONSTANT_Class_info] for above
-        //     [UTF-8] target method or constructor name
-        //     [UTF-8] target method or constructor signature
-        //     [CONSTANT_NameAndType_info] for above
-        //     [CONSTANT_Methodref_info or CONSTANT_InterfaceMethodref_info] for target method
-        //     [UTF-8] "invoke" or "newInstance"
-        //     [UTF-8] invoke or newInstance descriptor
-        //     [UTF-8] descriptor for type of non-primitive parameter 1
-        //     [CONSTANT_Class_info] for type of non-primitive parameter 1
-        //     ...
-        //     [UTF-8] descriptor for type of non-primitive parameter n
-        //     [CONSTANT_Class_info] for type of non-primitive parameter n
-        // +   [UTF-8] "java/lang/Exception"
-        // +   [CONSTANT_Class_info] for above
-        // +   [UTF-8] "java/lang/ClassCastException"
-        // +   [CONSTANT_Class_info] for above
-        // +   [UTF-8] "java/lang/NullPointerException"
-        // +   [CONSTANT_Class_info] for above
-        // +   [UTF-8] "java/lang/IllegalArgumentException"
-        // +   [CONSTANT_Class_info] for above
-        // +   [UTF-8] "java/lang/InvocationTargetException"
-        // +   [CONSTANT_Class_info] for above
-        // +   [UTF-8] "<init>"
-        // +   [UTF-8] "()V"
-        // +   [CONSTANT_NameAndType_info] for above
-        // +   [CONSTANT_Methodref_info] for NullPointerException's constructor
-        // +   [CONSTANT_Methodref_info] for IllegalArgumentException's constructor
-        // +   [UTF-8] "(Ljava/lang/String;)V"
-        // +   [CONSTANT_NameAndType_info] for "<init>(Ljava/lang/String;)V"
-        // +   [CONSTANT_Methodref_info] for IllegalArgumentException's constructor taking a String
-        // +   [UTF-8] "(Ljava/lang/Throwable;)V"
-        // +   [CONSTANT_NameAndType_info] for "<init>(Ljava/lang/Throwable;)V"
-        // +   [CONSTANT_Methodref_info] for InvocationTargetException's constructor
-        // +   [CONSTANT_Methodref_info] for "super()"
-        // +   [UTF-8] "java/lang/Object"
-        // +   [CONSTANT_Class_info] for above
-        // +   [UTF-8] "toString"
-        // +   [UTF-8] "()Ljava/lang/String;"
-        // +   [CONSTANT_NameAndType_info] for "toString()Ljava/lang/String;"
-        // +   [CONSTANT_Methodref_info] for Object's toString method
-        // +   [UTF-8] "Code"
-        // +   [UTF-8] "Exceptions"
-        //  *  [UTF-8] "java/lang/Boolean"
-        //  *  [CONSTANT_Class_info] for above
-        //  *  [UTF-8] "(Z)V"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "booleanValue"
-        //  *  [UTF-8] "()Z"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "java/lang/Byte"
-        //  *  [CONSTANT_Class_info] for above
-        //  *  [UTF-8] "(B)V"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "byteValue"
-        //  *  [UTF-8] "()B"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "java/lang/Character"
-        //  *  [CONSTANT_Class_info] for above
-        //  *  [UTF-8] "(C)V"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "charValue"
-        //  *  [UTF-8] "()C"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "java/lang/Double"
-        //  *  [CONSTANT_Class_info] for above
-        //  *  [UTF-8] "(D)V"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "doubleValue"
-        //  *  [UTF-8] "()D"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "java/lang/Float"
-        //  *  [CONSTANT_Class_info] for above
-        //  *  [UTF-8] "(F)V"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "floatValue"
-        //  *  [UTF-8] "()F"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "java/lang/Integer"
-        //  *  [CONSTANT_Class_info] for above
-        //  *  [UTF-8] "(I)V"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "intValue"
-        //  *  [UTF-8] "()I"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "java/lang/Long"
-        //  *  [CONSTANT_Class_info] for above
-        //  *  [UTF-8] "(J)V"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "longValue"
-        //  *  [UTF-8] "()J"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "java/lang/Short"
-        //  *  [CONSTANT_Class_info] for above
-        //  *  [UTF-8] "(S)V"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-        //  *  [UTF-8] "shortValue"
-        //  *  [UTF-8] "()S"
-        //  *  [CONSTANT_NameAndType_info] for above
-        //  *  [CONSTANT_Methodref_info] for above
-
-        short numCPEntries = NUM_BASE_CPOOL_ENTRIES + NUM_COMMON_CPOOL_ENTRIES;
-        boolean usesPrimitives = usesPrimitiveTypes();
-        if (usesPrimitives) {
-            numCPEntries += NUM_BOXING_CPOOL_ENTRIES;
-        }
-        if (forSerialization) {
-            numCPEntries += NUM_SERIALIZATION_CPOOL_ENTRIES;
-        }
-
-        // Add in variable-length number of entries to be able to describe
-        // non-primitive parameter types and checked exceptions.
-        numCPEntries += (short) (2 * numNonPrimitiveParameterTypes());
-
-        asm.emitShort(add(numCPEntries, S1));
-
-        final String generatedName = generateName(isConstructor, forSerialization);
-        asm.emitConstantPoolUTF8(generatedName);
-        asm.emitConstantPoolClass(asm.cpi());
-        thisClass = asm.cpi();
-        if (isConstructor) {
-            if (forSerialization) {
-                asm.emitConstantPoolUTF8
-                    ("sun/reflect/SerializationConstructorAccessorImpl");
-            } else {
-                asm.emitConstantPoolUTF8("sun/reflect/ConstructorAccessorImpl");
-            }
-        } else {
-            asm.emitConstantPoolUTF8("sun/reflect/MethodAccessorImpl");
-        }
-        asm.emitConstantPoolClass(asm.cpi());
-        superClass = asm.cpi();
-        asm.emitConstantPoolUTF8(getClassName(declaringClass, false));
-        asm.emitConstantPoolClass(asm.cpi());
-        targetClass = asm.cpi();
-        short serializationTargetClassIdx = (short) 0;
-        if (forSerialization) {
-            asm.emitConstantPoolUTF8(getClassName(serializationTargetClass, false));
-            asm.emitConstantPoolClass(asm.cpi());
-            serializationTargetClassIdx = asm.cpi();
-        }
-        asm.emitConstantPoolUTF8(name);
-        asm.emitConstantPoolUTF8(buildInternalSignature());
-        asm.emitConstantPoolNameAndType(sub(asm.cpi(), S1), asm.cpi());
-        if (isInterface()) {
-            asm.emitConstantPoolInterfaceMethodref(targetClass, asm.cpi());
-        } else {
-            if (forSerialization) {
-                asm.emitConstantPoolMethodref(serializationTargetClassIdx, asm.cpi());
-            } else {
-                asm.emitConstantPoolMethodref(targetClass, asm.cpi());
-            }
-        }
-        targetMethodRef = asm.cpi();
-        if (isConstructor) {
-            asm.emitConstantPoolUTF8("newInstance");
-        } else {
-            asm.emitConstantPoolUTF8("invoke");
-        }
-        invokeIdx = asm.cpi();
-        if (isConstructor) {
-            asm.emitConstantPoolUTF8("([Ljava/lang/Object;)Ljava/lang/Object;");
-        } else {
-            asm.emitConstantPoolUTF8
-                ("(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;");
-        }
-        invokeDescriptorIdx = asm.cpi();
-
-        // Output class information for non-primitive parameter types
-        nonPrimitiveParametersBaseIdx = add(asm.cpi(), S2);
-        for (int i = 0; i < parameterTypes.length; i++) {
-            Class c = parameterTypes[i];
-            if (!isPrimitive(c)) {
-                asm.emitConstantPoolUTF8(getClassName(c, false));
-                asm.emitConstantPoolClass(asm.cpi());
-            }
-        }
-
-        // Entries common to FieldAccessor, MethodAccessor and ConstructorAccessor
-        emitCommonConstantPoolEntries();
-
-        // Boxing entries
-        if (usesPrimitives) {
-            emitBoxingContantPoolEntries();
-        }
-
-        if (asm.cpi() != numCPEntries) {
-            throw new InternalError("Adjust this code (cpi = " + asm.cpi() +
-                                    ", numCPEntries = " + numCPEntries + ")");
-        }
-
-        // Access flags
-        asm.emitShort(ACC_PUBLIC);
-
-        // This class
-        asm.emitShort(thisClass);
-
-        // Superclass
-        asm.emitShort(superClass);
-
-        // Interfaces count and interfaces
-        asm.emitShort(S0);
-
-        // Fields count and fields
-        asm.emitShort(S0);
-
-        // Methods count and methods
-        asm.emitShort(NUM_METHODS);
-
-        emitConstructor();
-        emitInvoke();
-
-        // Additional attributes (none)
-        asm.emitShort(S0);
-
-        // Load class
-        vec.trim();
-        final byte[] bytes = vec.getData();
-        // Note: the class loader is the only thing that really matters
-        // here -- it's important to get the generated code into the
-        // same namespace as the target class. Since the generated code
-        // is privileged anyway, the protection domain probably doesn't
-        // matter.
-        return AccessController.doPrivileged(
-            new PrivilegedAction<MagicAccessorImpl>() {
-                public MagicAccessorImpl run() {
-                        try {
-                        return (MagicAccessorImpl)
-                        ClassDefiner.defineClass
-                                (generatedName,
-                                 bytes,
-                                 0,
-                                 bytes.length,
-                                 declaringClass.getClassLoader()).newInstance();
-                        } catch (InstantiationException e) {
-                            throw (InternalError)
-                                new InternalError().initCause(e);
-                        } catch (IllegalAccessException e) {
-                            throw (InternalError)
-                                new InternalError().initCause(e);
-                        }
-                    }
-                });
-    }
-
-    /** This emits the code for either invoke() or newInstance() */
-    private void emitInvoke() {
-        // NOTE that this code will only handle 65535 parameters since we
-        // use the sipush instruction to get the array index on the
-        // operand stack.
-        if (parameterTypes.length > 65535) {
-            throw new InternalError("Can't handle more than 65535 parameters");
-        }
-
-        // Generate code into fresh code buffer
-        ClassFileAssembler cb = new ClassFileAssembler();
-        if (isConstructor) {
-            // 1 incoming argument
-            cb.setMaxLocals(2);
-        } else {
-            // 2 incoming arguments
-            cb.setMaxLocals(3);
-        }
-
-        short illegalArgStartPC = 0;
-
-        if (isConstructor) {
-            // Instantiate target class before continuing
-            // new <target class type>
-            // dup
-            cb.opc_new(targetClass);
-            cb.opc_dup();
-        } else {
-            // Setup before iterating down argument list
-            if (isPrimitive(returnType)) {
-                // new <boxing type for primitive type>
-                // dup
-                // ... (see below:)
-                // invokespecial <constructor for boxing type for primitive type>
-                // areturn
-                cb.opc_new(indexForPrimitiveType(returnType));
-                cb.opc_dup();
-            }
-
-            // Get target object on operand stack if necessary.
-
-            // We need to do an explicit null check here; we won't see
-            // NullPointerExceptions from the invoke bytecode, since it's
-            // covered by an exception handler.
-            if (!isStatic()) {
-                // aload_1
-                // ifnonnull <checkcast label>
-                // new <NullPointerException>
-                // dup
-                // invokespecial <NullPointerException ctor>
-                // athrow
-                // <checkcast label:>
-                // aload_1
-                // checkcast <target class's type>
-                cb.opc_aload_1();
-                Label l = new Label();
-                cb.opc_ifnonnull(l);
-                cb.opc_new(nullPointerClass);
-                cb.opc_dup();
-                cb.opc_invokespecial(nullPointerCtorIdx, 0, 0);
-                cb.opc_athrow();
-                l.bind();
-                illegalArgStartPC = cb.getLength();
-                cb.opc_aload_1();
-                cb.opc_checkcast(targetClass);
-            }
-        }
-
-        // Have to check length of incoming array and throw
-        // IllegalArgumentException if not correct. A concession to the
-        // JCK (isn't clearly specified in the spec): we allow null in the
-        // case where the argument list is zero length.
-        // if no-arg:
-        //   aload_2 | aload_1 (Method | Constructor)
-        //   ifnull <success label>
-        // aload_2 | aload_1
-        // arraylength
-        // sipush <num parameter types>
-        // if_icmpeq <success label>
-        // new <IllegalArgumentException>
-        // dup
-        // invokespecial <IllegalArgumentException ctor>
-        // athrow
-        // <success label:>
-        Label successLabel = new Label();
-        if (parameterTypes.length == 0) {
-            if (isConstructor) {
-                cb.opc_aload_1();
-            } else {
-                cb.opc_aload_2();
-            }
-            cb.opc_ifnull(successLabel);
-        }
-        if (isConstructor) {
-            cb.opc_aload_1();
-        } else {
-            cb.opc_aload_2();
-        }
-        cb.opc_arraylength();
-        cb.opc_sipush((short) parameterTypes.length);
-        cb.opc_if_icmpeq(successLabel);
-        cb.opc_new(illegalArgumentClass);
-        cb.opc_dup();
-        cb.opc_invokespecial(illegalArgumentCtorIdx, 0, 0);
-        cb.opc_athrow();
-        successLabel.bind();
-
-        // Iterate through incoming actual parameters, ensuring that each
-        // is compatible with the formal parameter type, and pushing the
-        // actual on the operand stack (unboxing and widening if necessary).
-
-        short paramTypeCPIdx = nonPrimitiveParametersBaseIdx;
-        Label nextParamLabel = null;
-        byte count = 1; // both invokeinterface opcode's "count" as well as
-        // num args of other invoke bytecodes
-        for (int i = 0; i < parameterTypes.length; i++) {
-            Class paramType = parameterTypes[i];
-            count += (byte) typeSizeInStackSlots(paramType);
-            if (nextParamLabel != null) {
-                nextParamLabel.bind();
-                nextParamLabel = null;
-            }
-            // aload_2 | aload_1
-            // sipush <index>
-            // aaload
-            if (isConstructor) {
-                cb.opc_aload_1();
-            } else {
-                cb.opc_aload_2();
-            }
-            cb.opc_sipush((short) i);
-            cb.opc_aaload();
-            if (isPrimitive(paramType)) {
-                // Unboxing code.
-                // Put parameter into temporary local variable
-                // astore_3 | astore_2
-                if (isConstructor) {
-                    cb.opc_astore_2();
-                } else {
-                    cb.opc_astore_3();
-                }
-
-                // repeat for all possible widening conversions:
-                //   aload_3 | aload_2
-                //   instanceof <primitive boxing type>
-                //   ifeq <next unboxing label>
-                //   aload_3 | aload_2
-                //   checkcast <primitive boxing type> // Note: this is "redundant",
-                //                                     // but necessary for the verifier
-                //   invokevirtual <unboxing method>
-                //   <widening conversion bytecode, if necessary>
-                //   goto <next parameter label>
-                // <next unboxing label:> ...
-                // last unboxing label:
-                //   new <IllegalArgumentException>
-                //   dup
-                //   invokespecial <IllegalArgumentException ctor>
-                //   athrow
-
-                Label l = null; // unboxing label
-                nextParamLabel = new Label();
-
-                for (int j = 0; j < primitiveTypes.length; j++) {
-                    Class c = primitiveTypes[j];
-                    if (canWidenTo(c, paramType)) {
-                        if (l != null) {
-                            l.bind();
-                        }
-                        // Emit checking and unboxing code for this type
-                        if (isConstructor) {
-                            cb.opc_aload_2();
-                        } else {
-                            cb.opc_aload_3();
-                        }
-                        cb.opc_instanceof(indexForPrimitiveType(c));
-                        l = new Label();
-                        cb.opc_ifeq(l);
-                        if (isConstructor) {
-                            cb.opc_aload_2();
-                        } else {
-                            cb.opc_aload_3();
-                        }
-                        cb.opc_checkcast(indexForPrimitiveType(c));
-                        cb.opc_invokevirtual(unboxingMethodForPrimitiveType(c),
-                                             0,
-                                             typeSizeInStackSlots(c));
-                        emitWideningBytecodeForPrimitiveConversion(cb,
-                                                                   c,
-                                                                   paramType);
-                        cb.opc_goto(nextParamLabel);
-                    }
-                }
-
-                if (l == null) {
-                    throw new InternalError
-                        ("Must have found at least identity conversion");
-                }
-
-                // Fell through; given object is null or invalid. According to
-                // the spec, we can throw IllegalArgumentException for both of
-                // these cases.
-
-                l.bind();
-                cb.opc_new(illegalArgumentClass);
-                cb.opc_dup();
-                cb.opc_invokespecial(illegalArgumentCtorIdx, 0, 0);
-                cb.opc_athrow();
-            } else {
-                // Emit appropriate checkcast
-                cb.opc_checkcast(paramTypeCPIdx);
-                paramTypeCPIdx = add(paramTypeCPIdx, S2);
-                // Fall through to next argument
-            }
-        }
-        // Bind last goto if present
-        if (nextParamLabel != null) {
-            nextParamLabel.bind();
-        }
-
-        short invokeStartPC = cb.getLength();
-
-        // OK, ready to perform the invocation.
-        if (isConstructor) {
-            cb.opc_invokespecial(targetMethodRef, count, 0);
-        } else {
-            if (isStatic()) {
-                cb.opc_invokestatic(targetMethodRef,
-                                    count,
-                                    typeSizeInStackSlots(returnType));
-            } else {
-                if (isInterface()) {
-                    cb.opc_invokeinterface(targetMethodRef,
-                                           count,
-                                           count,
-                                           typeSizeInStackSlots(returnType));
-                } else {
-                    cb.opc_invokevirtual(targetMethodRef,
-                                         count,
-                                         typeSizeInStackSlots(returnType));
-                }
-            }
-        }
-
-        short invokeEndPC = cb.getLength();
-
-        if (!isConstructor) {
-            // Box return value if necessary
-            if (isPrimitive(returnType)) {
-                cb.opc_invokespecial(ctorIndexForPrimitiveType(returnType),
-                                     typeSizeInStackSlots(returnType),
-                                     0);
-            } else if (returnType == Void.TYPE) {
-                cb.opc_aconst_null();
-            }
-        }
-        cb.opc_areturn();
-
-        // We generate two exception handlers; one which is responsible
-        // for catching ClassCastException and NullPointerException and
-        // throwing IllegalArgumentException, and the other which catches
-        // all java/lang/Throwable objects thrown from the target method
-        // and wraps them in InvocationTargetExceptions.
-
-        short classCastHandler = cb.getLength();
-
-        // ClassCast, etc. exception handler
-        cb.setStack(1);
-        cb.opc_invokespecial(toStringIdx, 0, 1);
-        cb.opc_new(illegalArgumentClass);
-        cb.opc_dup_x1();
-        cb.opc_swap();
-        cb.opc_invokespecial(illegalArgumentStringCtorIdx, 1, 0);
-        cb.opc_athrow();
-
-        short invocationTargetHandler = cb.getLength();
-
-        // InvocationTargetException exception handler
-        cb.setStack(1);
-        cb.opc_new(invocationTargetClass);
-        cb.opc_dup_x1();
-        cb.opc_swap();
-        cb.opc_invokespecial(invocationTargetCtorIdx, 1, 0);
-        cb.opc_athrow();
-
-        // Generate exception table. We cover the entire code sequence
-        // with an exception handler which catches ClassCastException and
-        // converts it into an IllegalArgumentException.
-
-        ClassFileAssembler exc = new ClassFileAssembler();
-
-        exc.emitShort(illegalArgStartPC);       // start PC
-        exc.emitShort(invokeStartPC);           // end PC
-        exc.emitShort(classCastHandler);        // handler PC
-        exc.emitShort(classCastClass);          // catch type
-
-        exc.emitShort(illegalArgStartPC);       // start PC
-        exc.emitShort(invokeStartPC);           // end PC
-        exc.emitShort(classCastHandler);        // handler PC
-        exc.emitShort(nullPointerClass);        // catch type
-
-        exc.emitShort(invokeStartPC);           // start PC
-        exc.emitShort(invokeEndPC);             // end PC
-        exc.emitShort(invocationTargetHandler); // handler PC
-        exc.emitShort(throwableClass);          // catch type
-
-        emitMethod(invokeIdx, cb.getMaxLocals(), cb, exc,
-                   new short[] { invocationTargetClass });
-    }
-
-    private boolean usesPrimitiveTypes() {
-        // We need to emit boxing/unboxing constant pool information if
-        // the method takes a primitive type for any of its parameters or
-        // returns a primitive value (except void)
-        if (returnType.isPrimitive()) {
-            return true;
-        }
-        for (int i = 0; i < parameterTypes.length; i++) {
-            if (parameterTypes[i].isPrimitive()) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private int numNonPrimitiveParameterTypes() {
-        int num = 0;
-        for (int i = 0; i < parameterTypes.length; i++) {
-            if (!parameterTypes[i].isPrimitive()) {
-                ++num;
-            }
-        }
-        return num;
-    }
-
-    private boolean isInterface() {
-        return declaringClass.isInterface();
-    }
-
-    private String buildInternalSignature() {
-        StringBuffer buf = new StringBuffer();
-        buf.append("(");
-        for (int i = 0; i < parameterTypes.length; i++) {
-            buf.append(getClassName(parameterTypes[i], true));
-        }
-        buf.append(")");
-        buf.append(getClassName(returnType, true));
-        return buf.toString();
-    }
-
-    private static synchronized String generateName(boolean isConstructor,
-                                                    boolean forSerialization)
-    {
-        if (isConstructor) {
-            if (forSerialization) {
-                int num = ++serializationConstructorSymnum;
-                return "sun/reflect/GeneratedSerializationConstructorAccessor" + num;
-            } else {
-                int num = ++constructorSymnum;
-                return "sun/reflect/GeneratedConstructorAccessor" + num;
-            }
-        } else {
-            int num = ++methodSymnum;
-            return "sun/reflect/GeneratedMethodAccessor" + num;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/MethodAccessorImpl.java b/ojluni/src/main/java/sun/reflect/MethodAccessorImpl.java
deleted file mode 100755
index 14282fb..0000000
--- a/ojluni/src/main/java/sun/reflect/MethodAccessorImpl.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.InvocationTargetException;
-
-/** <P> Package-private implementation of the MethodAccessor interface
-    which has access to all classes and all fields, regardless of
-    language restrictions. See MagicAccessor. </P>
-
-    <P> This class is known to the VM; do not change its name without
-    also changing the VM's code. </P>
-
-    <P> NOTE: ALL methods of subclasses are skipped during security
-    walks up the stack. The assumption is that the only such methods
-    that will persistently show up on the stack are the implementing
-    methods for java.lang.reflect.Method.invoke(). </P>
-*/
-
-abstract class MethodAccessorImpl extends MagicAccessorImpl
-    implements MethodAccessor {
-    /** Matches specification in {@link java.lang.reflect.Method} */
-    public abstract Object invoke(Object obj, Object[] args)
-        throws IllegalArgumentException, InvocationTargetException;
-}
diff --git a/ojluni/src/main/java/sun/reflect/NativeConstructorAccessorImpl.java b/ojluni/src/main/java/sun/reflect/NativeConstructorAccessorImpl.java
deleted file mode 100755
index 91d3d6d..0000000
--- a/ojluni/src/main/java/sun/reflect/NativeConstructorAccessorImpl.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.*;
-
-/** Used only for the first few invocations of a Constructor;
-    afterward, switches to bytecode-based implementation */
-
-class NativeConstructorAccessorImpl extends ConstructorAccessorImpl {
-    private Constructor c;
-    private DelegatingConstructorAccessorImpl parent;
-    private int numInvocations;
-
-    NativeConstructorAccessorImpl(Constructor c) {
-        this.c = c;
-    }
-
-    public Object newInstance(Object[] args)
-        throws InstantiationException,
-               IllegalArgumentException,
-               InvocationTargetException
-    {
-        if (++numInvocations > ReflectionFactory.inflationThreshold()) {
-            ConstructorAccessorImpl acc = (ConstructorAccessorImpl)
-                new MethodAccessorGenerator().
-                    generateConstructor(c.getDeclaringClass(),
-                                        c.getParameterTypes(),
-                                        c.getExceptionTypes(),
-                                        c.getModifiers());
-            parent.setDelegate(acc);
-        }
-
-        return newInstance0(c, args);
-    }
-
-    void setParent(DelegatingConstructorAccessorImpl parent) {
-        this.parent = parent;
-    }
-
-    private static native Object newInstance0(Constructor c, Object[] args)
-        throws InstantiationException,
-               IllegalArgumentException,
-               InvocationTargetException;
-}
diff --git a/ojluni/src/main/java/sun/reflect/NativeMethodAccessorImpl.java b/ojluni/src/main/java/sun/reflect/NativeMethodAccessorImpl.java
deleted file mode 100755
index 93f186b..0000000
--- a/ojluni/src/main/java/sun/reflect/NativeMethodAccessorImpl.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.*;
-
-/** Used only for the first few invocations of a Method; afterward,
-    switches to bytecode-based implementation */
-
-class NativeMethodAccessorImpl extends MethodAccessorImpl {
-    private Method method;
-    private DelegatingMethodAccessorImpl parent;
-    private int numInvocations;
-
-    NativeMethodAccessorImpl(Method method) {
-        this.method = method;
-    }
-
-    public Object invoke(Object obj, Object[] args)
-        throws IllegalArgumentException, InvocationTargetException
-    {
-        if (++numInvocations > ReflectionFactory.inflationThreshold()) {
-            MethodAccessorImpl acc = (MethodAccessorImpl)
-                new MethodAccessorGenerator().
-                    generateMethod(method.getDeclaringClass(),
-                                   method.getName(),
-                                   method.getParameterTypes(),
-                                   method.getReturnType(),
-                                   method.getExceptionTypes(),
-                                   method.getModifiers());
-            parent.setDelegate(acc);
-        }
-
-        return invoke0(method, obj, args);
-    }
-
-    void setParent(DelegatingMethodAccessorImpl parent) {
-        this.parent = parent;
-    }
-
-    private static native Object invoke0(Method m, Object obj, Object[] args);
-}
diff --git a/ojluni/src/main/java/sun/reflect/ReflectionFactory.java b/ojluni/src/main/java/sun/reflect/ReflectionFactory.java
deleted file mode 100755
index 8f952eb..0000000
--- a/ojluni/src/main/java/sun/reflect/ReflectionFactory.java
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- * Copyright (c) 2001, 2008, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Modifier;
-import java.security.AccessController;
-import java.security.Permission;
-import java.security.PrivilegedAction;
-
-/** <P> The master factory for all reflective objects, both those in
-    java.lang.reflect (Fields, Methods, Constructors) as well as their
-    delegates (FieldAccessors, MethodAccessors, ConstructorAccessors).
-    </P>
-
-    <P> The methods in this class are extremely unsafe and can cause
-    subversion of both the language and the verifier. For this reason,
-    they are all instance methods, and access to the constructor of
-    this factory is guarded by a security check, in similar style to
-    {@link sun.misc.Unsafe}. </P>
-*/
-
-public class ReflectionFactory {
-
-    private static boolean initted = false;
-    private static Permission reflectionFactoryAccessPerm
-        = new RuntimePermission("reflectionFactoryAccess");
-    private static ReflectionFactory soleInstance = new ReflectionFactory();
-    // Provides access to package-private mechanisms in java.lang.reflect
-    private static volatile LangReflectAccess langReflectAccess;
-
-    //
-    // "Inflation" mechanism. Loading bytecodes to implement
-    // Method.invoke() and Constructor.newInstance() currently costs
-    // 3-4x more than an invocation via native code for the first
-    // invocation (though subsequent invocations have been benchmarked
-    // to be over 20x faster). Unfortunately this cost increases
-    // startup time for certain applications that use reflection
-    // intensively (but only once per class) to bootstrap themselves.
-    // To avoid this penalty we reuse the existing JVM entry points
-    // for the first few invocations of Methods and Constructors and
-    // then switch to the bytecode-based implementations.
-    //
-    // Package-private to be accessible to NativeMethodAccessorImpl
-    // and NativeConstructorAccessorImpl
-    private static boolean noInflation        = false;
-    private static int     inflationThreshold = 15;
-
-    private ReflectionFactory() {
-    }
-
-    /**
-     * A convenience class for acquiring the capability to instantiate
-     * reflective objects.  Use this instead of a raw call to {@link
-     * #getReflectionFactory} in order to avoid being limited by the
-     * permissions of your callers.
-     *
-     * <p>An instance of this class can be used as the argument of
-     * <code>AccessController.doPrivileged</code>.
-     */
-    public static final class GetReflectionFactoryAction
-        implements PrivilegedAction<ReflectionFactory> {
-        public ReflectionFactory run() {
-            return getReflectionFactory();
-        }
-    }
-
-    /**
-     * Provides the caller with the capability to instantiate reflective
-     * objects.
-     *
-     * <p> First, if there is a security manager, its
-     * <code>checkPermission</code> method is called with a {@link
-     * java.lang.RuntimePermission} with target
-     * <code>"reflectionFactoryAccess"</code>.  This may result in a
-     * security exception.
-     *
-     * <p> The returned <code>ReflectionFactory</code> object should be
-     * carefully guarded by the caller, since it can be used to read and
-     * write private data and invoke private methods, as well as to load
-     * unverified bytecodes.  It must never be passed to untrusted code.
-     *
-     * @exception SecurityException if a security manager exists and its
-     *             <code>checkPermission</code> method doesn't allow
-     *             access to the RuntimePermission "reflectionFactoryAccess".  */
-    public static ReflectionFactory getReflectionFactory() {
-        SecurityManager security = System.getSecurityManager();
-        if (security != null) {
-            // TO DO: security.checkReflectionFactoryAccess();
-            security.checkPermission(reflectionFactoryAccessPerm);
-        }
-        return soleInstance;
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    // Routines used by java.lang.reflect
-    //
-    //
-
-    /** Called only by java.lang.reflect.Modifier's static initializer */
-    public void setLangReflectAccess(LangReflectAccess access) {
-        langReflectAccess = access;
-    }
-
-    /**
-     * Note: this routine can cause the declaring class for the field
-     * be initialized and therefore must not be called until the
-     * first get/set of this field.
-     * @param field the field
-     * @param override true if caller has overridden aaccessibility
-     */
-    public FieldAccessor newFieldAccessor(Field field, boolean override) {
-        checkInitted();
-        return UnsafeFieldAccessorFactory.newFieldAccessor(field, override);
-    }
-
-    public MethodAccessor newMethodAccessor(Method method) {
-        checkInitted();
-
-        if (noInflation) {
-            return new MethodAccessorGenerator().
-                generateMethod(method.getDeclaringClass(),
-                               method.getName(),
-                               method.getParameterTypes(),
-                               method.getReturnType(),
-                               method.getExceptionTypes(),
-                               method.getModifiers());
-        } else {
-            NativeMethodAccessorImpl acc =
-                new NativeMethodAccessorImpl(method);
-            DelegatingMethodAccessorImpl res =
-                new DelegatingMethodAccessorImpl(acc);
-            acc.setParent(res);
-            return res;
-        }
-    }
-
-    public ConstructorAccessor newConstructorAccessor(Constructor c) {
-        checkInitted();
-
-        Class<?> declaringClass = c.getDeclaringClass();
-        if (Modifier.isAbstract(declaringClass.getModifiers())) {
-            return new InstantiationExceptionConstructorAccessorImpl(null);
-        }
-        if (declaringClass == Class.class) {
-            return new InstantiationExceptionConstructorAccessorImpl
-                ("Can not instantiate java.lang.Class");
-        }
-        // Bootstrapping issue: since we use Class.newInstance() in
-        // the ConstructorAccessor generation process, we have to
-        // break the cycle here.
-        if (Reflection.isSubclassOf(declaringClass,
-                                    ConstructorAccessorImpl.class)) {
-            return new BootstrapConstructorAccessorImpl(c);
-        }
-
-        if (noInflation) {
-            return new MethodAccessorGenerator().
-                generateConstructor(c.getDeclaringClass(),
-                                    c.getParameterTypes(),
-                                    c.getExceptionTypes(),
-                                    c.getModifiers());
-        } else {
-            NativeConstructorAccessorImpl acc =
-                new NativeConstructorAccessorImpl(c);
-            DelegatingConstructorAccessorImpl res =
-                new DelegatingConstructorAccessorImpl(acc);
-            acc.setParent(res);
-            return res;
-        }
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    // Routines used by java.lang
-    //
-    //
-
-    /** Creates a new java.lang.reflect.Field. Access checks as per
-        java.lang.reflect.AccessibleObject are not overridden. */
-    public Field newField(Class<?> declaringClass,
-                          String name,
-                          Class<?> type,
-                          int modifiers,
-                          int slot,
-                          String signature,
-                          byte[] annotations)
-    {
-        return langReflectAccess().newField(declaringClass,
-                                            name,
-                                            type,
-                                            modifiers,
-                                            slot,
-                                            signature,
-                                            annotations);
-    }
-
-    /** Creates a new java.lang.reflect.Method. Access checks as per
-        java.lang.reflect.AccessibleObject are not overridden. */
-    public Method newMethod(Class<?> declaringClass,
-                            String name,
-                            Class<?>[] parameterTypes,
-                            Class<?> returnType,
-                            Class<?>[] checkedExceptions,
-                            int modifiers,
-                            int slot,
-                            String signature,
-                            byte[] annotations,
-                            byte[] parameterAnnotations,
-                            byte[] annotationDefault)
-    {
-        return langReflectAccess().newMethod(declaringClass,
-                                             name,
-                                             parameterTypes,
-                                             returnType,
-                                             checkedExceptions,
-                                             modifiers,
-                                             slot,
-                                             signature,
-                                             annotations,
-                                             parameterAnnotations,
-                                             annotationDefault);
-    }
-
-    /** Creates a new java.lang.reflect.Constructor. Access checks as
-        per java.lang.reflect.AccessibleObject are not overridden. */
-    public Constructor newConstructor(Class<?> declaringClass,
-                                      Class<?>[] parameterTypes,
-                                      Class<?>[] checkedExceptions,
-                                      int modifiers,
-                                      int slot,
-                                      String signature,
-                                      byte[] annotations,
-                                      byte[] parameterAnnotations)
-    {
-        return langReflectAccess().newConstructor(declaringClass,
-                                                  parameterTypes,
-                                                  checkedExceptions,
-                                                  modifiers,
-                                                  slot,
-                                                  signature,
-                                                  annotations,
-                                                  parameterAnnotations);
-    }
-
-    /** Gets the MethodAccessor object for a java.lang.reflect.Method */
-    public MethodAccessor getMethodAccessor(Method m) {
-        return langReflectAccess().getMethodAccessor(m);
-    }
-
-    /** Sets the MethodAccessor object for a java.lang.reflect.Method */
-    public void setMethodAccessor(Method m, MethodAccessor accessor) {
-        langReflectAccess().setMethodAccessor(m, accessor);
-    }
-
-    /** Gets the ConstructorAccessor object for a
-        java.lang.reflect.Constructor */
-    public ConstructorAccessor getConstructorAccessor(Constructor c) {
-        return langReflectAccess().getConstructorAccessor(c);
-    }
-
-    /** Sets the ConstructorAccessor object for a
-        java.lang.reflect.Constructor */
-    public void setConstructorAccessor(Constructor c,
-                                       ConstructorAccessor accessor)
-    {
-        langReflectAccess().setConstructorAccessor(c, accessor);
-    }
-
-    /** Makes a copy of the passed method. The returned method is a
-        "child" of the passed one; see the comments in Method.java for
-        details. */
-    public Method copyMethod(Method arg) {
-        return langReflectAccess().copyMethod(arg);
-    }
-
-    /** Makes a copy of the passed field. The returned field is a
-        "child" of the passed one; see the comments in Field.java for
-        details. */
-    public Field copyField(Field arg) {
-        return langReflectAccess().copyField(arg);
-    }
-
-    /** Makes a copy of the passed constructor. The returned
-        constructor is a "child" of the passed one; see the comments
-        in Constructor.java for details. */
-    public <T> Constructor<T> copyConstructor(Constructor<T> arg) {
-        return langReflectAccess().copyConstructor(arg);
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    // Routines used by serialization
-    //
-    //
-
-    public Constructor newConstructorForSerialization
-        (Class<?> classToInstantiate, Constructor constructorToCall)
-    {
-        // Fast path
-        if (constructorToCall.getDeclaringClass() == classToInstantiate) {
-            return constructorToCall;
-        }
-
-        ConstructorAccessor acc = new MethodAccessorGenerator().
-            generateSerializationConstructor(classToInstantiate,
-                                             constructorToCall.getParameterTypes(),
-                                             constructorToCall.getExceptionTypes(),
-                                             constructorToCall.getModifiers(),
-                                             constructorToCall.getDeclaringClass());
-        Constructor c = newConstructor(constructorToCall.getDeclaringClass(),
-                                       constructorToCall.getParameterTypes(),
-                                       constructorToCall.getExceptionTypes(),
-                                       constructorToCall.getModifiers(),
-                                       langReflectAccess().
-                                       getConstructorSlot(constructorToCall),
-                                       langReflectAccess().
-                                       getConstructorSignature(constructorToCall),
-                                       langReflectAccess().
-                                       getConstructorAnnotations(constructorToCall),
-                                       langReflectAccess().
-                                       getConstructorParameterAnnotations(constructorToCall));
-        setConstructorAccessor(c, acc);
-        return c;
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    // Internals only below this point
-    //
-
-    static int inflationThreshold() {
-        return inflationThreshold;
-    }
-
-    /** We have to defer full initialization of this class until after
-        the static initializer is run since java.lang.reflect.Method's
-        static initializer (more properly, that for
-        java.lang.reflect.AccessibleObject) causes this class's to be
-        run, before the system properties are set up. */
-    private static void checkInitted() {
-        if (initted) return;
-        AccessController.doPrivileged(
-            new PrivilegedAction<Void>() {
-                public Void run() {
-                    // Tests to ensure the system properties table is fully
-                    // initialized. This is needed because reflection code is
-                    // called very early in the initialization process (before
-                    // command-line arguments have been parsed and therefore
-                    // these user-settable properties installed.) We assume that
-                    // if System.out is non-null then the System class has been
-                    // fully initialized and that the bulk of the startup code
-                    // has been run.
-
-                    if (System.out == null) {
-                        // java.lang.System not yet fully initialized
-                        return null;
-                    }
-
-                    String val = System.getProperty("sun.reflect.noInflation");
-                    if (val != null && val.equals("true")) {
-                        noInflation = true;
-                    }
-
-                    val = System.getProperty("sun.reflect.inflationThreshold");
-                    if (val != null) {
-                        try {
-                            inflationThreshold = Integer.parseInt(val);
-                        } catch (NumberFormatException e) {
-                            throw (RuntimeException)
-                                new RuntimeException("Unable to parse property sun.reflect.inflationThreshold").
-                                    initCause(e);
-                        }
-                    }
-
-                    initted = true;
-                    return null;
-                }
-            });
-    }
-
-    private static LangReflectAccess langReflectAccess() {
-        if (langReflectAccess == null) {
-            // Call a static method to get class java.lang.reflect.Modifier
-            // initialized. Its static initializer will cause
-            // setLangReflectAccess() to be called from the context of the
-            // java.lang.reflect package.
-            Modifier.isPublic(Modifier.PUBLIC);
-        }
-        return langReflectAccess;
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/SerializationConstructorAccessorImpl.java b/ojluni/src/main/java/sun/reflect/SerializationConstructorAccessorImpl.java
deleted file mode 100755
index a26d066..0000000
--- a/ojluni/src/main/java/sun/reflect/SerializationConstructorAccessorImpl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-/** <P> Java serialization (in java.io) expects to be able to
-    instantiate a class and invoke a no-arg constructor of that
-    class's first non-Serializable superclass. This is not a valid
-    operation according to the VM specification; one can not (for
-    classes A and B, where B is a subclass of A) write "new B;
-    invokespecial A()" without getting a verification error. </P>
-
-    <P> In all other respects, the bytecode-based reflection framework
-    can be reused for this purpose. This marker class was originally
-    known to the VM and verification disabled for it and all
-    subclasses, but the bug fix for 4486457 necessitated disabling
-    verification for all of the dynamically-generated bytecodes
-    associated with reflection. This class has been left in place to
-    make future debugging easier. </P> */
-
-abstract class SerializationConstructorAccessorImpl
-    extends ConstructorAccessorImpl {
-}
diff --git a/ojluni/src/main/java/sun/reflect/SignatureIterator.java b/ojluni/src/main/java/sun/reflect/SignatureIterator.java
deleted file mode 100755
index 7b4ac45..0000000
--- a/ojluni/src/main/java/sun/reflect/SignatureIterator.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-/** Assists in iterating down a method's signature */
-
-public class SignatureIterator {
-    private String sig;
-    private int idx;
-
-    public SignatureIterator(String sig) {
-        this.sig = sig;
-        reset();
-    }
-
-    public void reset() {
-        idx = 1;
-    }
-
-    public boolean atEnd() {
-        return sig.charAt(idx) == ')';
-    }
-
-    public String next() {
-        if (atEnd()) return null;
-        char c = sig.charAt(idx);
-        if (c != '[' && c != 'L') {
-            ++idx;
-            return new String(new char[] { c });
-        }
-        // Walk forward to end of entry
-        int endIdx = idx;
-        if (c == '[') {
-            while ((c = sig.charAt(endIdx)) == '[') {
-                endIdx++;
-            }
-        }
-
-        if (c == 'L') {
-            while (sig.charAt(endIdx) != ';') {
-                endIdx++;
-            }
-        }
-
-        int beginIdx = idx;
-        idx = endIdx + 1;
-        return sig.substring(beginIdx, idx);
-    }
-
-    /** Should only be called when atEnd() is true. Does not change
-        state of iterator. */
-    public String returnType() {
-        if (!atEnd()) {
-            throw new InternalError("Illegal use of SignatureIterator");
-        }
-        return sig.substring(idx + 1, sig.length());
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UTF8.java b/ojluni/src/main/java/sun/reflect/UTF8.java
deleted file mode 100755
index 22f6c77..0000000
--- a/ojluni/src/main/java/sun/reflect/UTF8.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2001, 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.
- */
-
-package sun.reflect;
-
-/** It is necessary to use a "bootstrap" UTF-8 encoder for encoding
-    constant pool entries because the character set converters rely on
-    Class.newInstance(). */
-
-class UTF8 {
-    // This encoder is not quite correct.  It does not handle surrogate pairs.
-    static byte[] encode(String str) {
-        int len = str.length();
-        byte[] res = new byte[utf8Length(str)];
-        int utf8Idx = 0;
-        try {
-            for (int i = 0; i < len; i++) {
-                int c = str.charAt(i) & 0xFFFF;
-                if (c >= 0x0001 && c <= 0x007F) {
-                    res[utf8Idx++] = (byte) c;
-                } else if (c == 0x0000 ||
-                           (c >= 0x0080 && c <= 0x07FF)) {
-                    res[utf8Idx++] = (byte) (0xC0 + (c >> 6));
-                    res[utf8Idx++] = (byte) (0x80 + (c & 0x3F));
-                } else {
-                    res[utf8Idx++] = (byte) (0xE0 + (c >> 12));
-                    res[utf8Idx++] = (byte) (0x80 + ((c >> 6) & 0x3F));
-                    res[utf8Idx++] = (byte) (0x80 + (c & 0x3F));
-                }
-            }
-        } catch (ArrayIndexOutOfBoundsException e) {
-            throw new InternalError
-                ("Bug in sun.reflect bootstrap UTF-8 encoder");
-        }
-        return res;
-    }
-
-    private static int utf8Length(String str) {
-        int len = str.length();
-        int utf8Len = 0;
-        for (int i = 0; i < len; i++) {
-            int c = str.charAt(i) & 0xFFFF;
-            if (c >= 0x0001 && c <= 0x007F) {
-                utf8Len += 1;
-            } else if (c == 0x0000 ||
-                       (c >= 0x0080 && c <= 0x07FF)) {
-                utf8Len += 2;
-            } else {
-                utf8Len += 3;
-            }
-        }
-        return utf8Len;
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeBooleanFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeBooleanFieldAccessorImpl.java
deleted file mode 100755
index 8c7cdd4..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeBooleanFieldAccessorImpl.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeBooleanFieldAccessorImpl extends UnsafeFieldAccessorImpl {
-    UnsafeBooleanFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Boolean(getBoolean(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getBoolean(obj, fieldOffset);
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        throw newGetLongIllegalArgumentException();
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        throw newGetFloatIllegalArgumentException();
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        throw newGetDoubleIllegalArgumentException();
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Boolean) {
-            unsafe.putBoolean(obj, fieldOffset, ((Boolean) value).booleanValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(z);
-        }
-        unsafe.putBoolean(obj, fieldOffset, z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeByteFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeByteFieldAccessorImpl.java
deleted file mode 100755
index 8095fc2..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeByteFieldAccessorImpl.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeByteFieldAccessorImpl extends UnsafeFieldAccessorImpl {
-    UnsafeByteFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Byte(getByte(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getByte(obj, fieldOffset);
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putByte(obj, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(b);
-        }
-        unsafe.putByte(obj, fieldOffset, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeCharacterFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeCharacterFieldAccessorImpl.java
deleted file mode 100755
index bdf83bc..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeCharacterFieldAccessorImpl.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeCharacterFieldAccessorImpl extends UnsafeFieldAccessorImpl {
-    UnsafeCharacterFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Character(getChar(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getChar(obj, fieldOffset);
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        return getChar(obj);
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return getChar(obj);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getChar(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getChar(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Character) {
-            unsafe.putChar(obj, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(c);
-        }
-        unsafe.putChar(obj, fieldOffset, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeDoubleFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeDoubleFieldAccessorImpl.java
deleted file mode 100755
index df43f59..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeDoubleFieldAccessorImpl.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeDoubleFieldAccessorImpl extends UnsafeFieldAccessorImpl {
-    UnsafeDoubleFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Double(getDouble(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        throw newGetLongIllegalArgumentException();
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        throw newGetFloatIllegalArgumentException();
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getDouble(obj, fieldOffset);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putDouble(obj, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putDouble(obj, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        if (value instanceof Character) {
-            unsafe.putDouble(obj, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        if (value instanceof Integer) {
-            unsafe.putDouble(obj, fieldOffset, ((Integer) value).intValue());
-            return;
-        }
-        if (value instanceof Long) {
-            unsafe.putDouble(obj, fieldOffset, ((Long) value).longValue());
-            return;
-        }
-        if (value instanceof Float) {
-            unsafe.putDouble(obj, fieldOffset, ((Float) value).floatValue());
-            return;
-        }
-        if (value instanceof Double) {
-            unsafe.putDouble(obj, fieldOffset, ((Double) value).doubleValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(d);
-        }
-        unsafe.putDouble(obj, fieldOffset, d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeFieldAccessorFactory.java b/ojluni/src/main/java/sun/reflect/UnsafeFieldAccessorFactory.java
deleted file mode 100755
index 0da2480..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeFieldAccessorFactory.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (c) 2001, 2004, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-
-class UnsafeFieldAccessorFactory {
-    static FieldAccessor newFieldAccessor(Field field, boolean override) {
-        Class type = field.getType();
-        boolean isStatic = Modifier.isStatic(field.getModifiers());
-        boolean isFinal = Modifier.isFinal(field.getModifiers());
-        boolean isVolatile = Modifier.isVolatile(field.getModifiers());
-        boolean isQualified = isFinal || isVolatile;
-        boolean isReadOnly = isFinal && (isStatic || !override);
-        if (isStatic) {
-            // This code path does not guarantee that the field's
-            // declaring class has been initialized, but it must be
-            // before performing reflective operations.
-            UnsafeFieldAccessorImpl.unsafe.ensureClassInitialized(field.getDeclaringClass());
-
-            if (!isQualified) {
-                if (type == Boolean.TYPE) {
-                    return new UnsafeStaticBooleanFieldAccessorImpl(field);
-                } else if (type == Byte.TYPE) {
-                    return new UnsafeStaticByteFieldAccessorImpl(field);
-                } else if (type == Short.TYPE) {
-                    return new UnsafeStaticShortFieldAccessorImpl(field);
-                } else if (type == Character.TYPE) {
-                    return new UnsafeStaticCharacterFieldAccessorImpl(field);
-                } else if (type == Integer.TYPE) {
-                    return new UnsafeStaticIntegerFieldAccessorImpl(field);
-                } else if (type == Long.TYPE) {
-                    return new UnsafeStaticLongFieldAccessorImpl(field);
-                } else if (type == Float.TYPE) {
-                    return new UnsafeStaticFloatFieldAccessorImpl(field);
-                } else if (type == Double.TYPE) {
-                    return new UnsafeStaticDoubleFieldAccessorImpl(field);
-                } else {
-                    return new UnsafeStaticObjectFieldAccessorImpl(field);
-                }
-            } else {
-                if (type == Boolean.TYPE) {
-                    return new UnsafeQualifiedStaticBooleanFieldAccessorImpl(field, isReadOnly);
-                } else if (type == Byte.TYPE) {
-                    return new UnsafeQualifiedStaticByteFieldAccessorImpl(field, isReadOnly);
-                } else if (type == Short.TYPE) {
-                    return new UnsafeQualifiedStaticShortFieldAccessorImpl(field, isReadOnly);
-                } else if (type == Character.TYPE) {
-                    return new UnsafeQualifiedStaticCharacterFieldAccessorImpl(field, isReadOnly);
-                } else if (type == Integer.TYPE) {
-                    return new UnsafeQualifiedStaticIntegerFieldAccessorImpl(field, isReadOnly);
-                } else if (type == Long.TYPE) {
-                    return new UnsafeQualifiedStaticLongFieldAccessorImpl(field, isReadOnly);
-                } else if (type == Float.TYPE) {
-                    return new UnsafeQualifiedStaticFloatFieldAccessorImpl(field, isReadOnly);
-                } else if (type == Double.TYPE) {
-                    return new UnsafeQualifiedStaticDoubleFieldAccessorImpl(field, isReadOnly);
-                } else {
-                    return new UnsafeQualifiedStaticObjectFieldAccessorImpl(field, isReadOnly);
-                }
-            }
-        } else {
-            if (!isQualified) {
-                if (type == Boolean.TYPE) {
-                    return new UnsafeBooleanFieldAccessorImpl(field);
-                } else if (type == Byte.TYPE) {
-                    return new UnsafeByteFieldAccessorImpl(field);
-                } else if (type == Short.TYPE) {
-                    return new UnsafeShortFieldAccessorImpl(field);
-                } else if (type == Character.TYPE) {
-                    return new UnsafeCharacterFieldAccessorImpl(field);
-                } else if (type == Integer.TYPE) {
-                    return new UnsafeIntegerFieldAccessorImpl(field);
-                } else if (type == Long.TYPE) {
-                    return new UnsafeLongFieldAccessorImpl(field);
-                } else if (type == Float.TYPE) {
-                    return new UnsafeFloatFieldAccessorImpl(field);
-                } else if (type == Double.TYPE) {
-                    return new UnsafeDoubleFieldAccessorImpl(field);
-                } else {
-                    return new UnsafeObjectFieldAccessorImpl(field);
-                }
-            } else {
-                if (type == Boolean.TYPE) {
-                    return new UnsafeQualifiedBooleanFieldAccessorImpl(field, isReadOnly);
-                } else if (type == Byte.TYPE) {
-                    return new UnsafeQualifiedByteFieldAccessorImpl(field, isReadOnly);
-                } else if (type == Short.TYPE) {
-                    return new UnsafeQualifiedShortFieldAccessorImpl(field, isReadOnly);
-                } else if (type == Character.TYPE) {
-                    return new UnsafeQualifiedCharacterFieldAccessorImpl(field, isReadOnly);
-                } else if (type == Integer.TYPE) {
-                    return new UnsafeQualifiedIntegerFieldAccessorImpl(field, isReadOnly);
-                } else if (type == Long.TYPE) {
-                    return new UnsafeQualifiedLongFieldAccessorImpl(field, isReadOnly);
-                } else if (type == Float.TYPE) {
-                    return new UnsafeQualifiedFloatFieldAccessorImpl(field, isReadOnly);
-                } else if (type == Double.TYPE) {
-                    return new UnsafeQualifiedDoubleFieldAccessorImpl(field, isReadOnly);
-                } else {
-                    return new UnsafeQualifiedObjectFieldAccessorImpl(field, isReadOnly);
-                }
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeFieldAccessorImpl.java
deleted file mode 100755
index f8d474c..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeFieldAccessorImpl.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import sun.misc.Unsafe;
-
-/** Base class for sun.misc.Unsafe-based FieldAccessors. The
-    observation is that there are only nine types of fields from the
-    standpoint of reflection code: the eight primitive types and
-    Object. Using class Unsafe instead of generated bytecodes saves
-    memory and loading time for the dynamically-generated
-    FieldAccessors. */
-
-abstract class UnsafeFieldAccessorImpl extends FieldAccessorImpl {
-    static final Unsafe unsafe = Unsafe.getUnsafe();
-
-    protected final Field   field;
-    protected final int     fieldOffset;
-    protected final boolean isFinal;
-
-    UnsafeFieldAccessorImpl(Field field) {
-        this.field = field;
-        fieldOffset = unsafe.fieldOffset(field);
-        isFinal = Modifier.isFinal(field.getModifiers());
-    }
-
-    protected void ensureObj(Object o) {
-        // NOTE: will throw NullPointerException, as specified, if o is null
-        if (!field.getDeclaringClass().isAssignableFrom(o.getClass())) {
-            throwSetIllegalArgumentException(o);
-        }
-    }
-
-    private String getQualifiedFieldName() {
-      return field.getDeclaringClass().getName() + "." +field.getName();
-    }
-
-    protected IllegalArgumentException newGetIllegalArgumentException(String type) {
-        return new IllegalArgumentException(
-          "Attempt to get "+field.getType().getName()+" field \"" +
-          getQualifiedFieldName() + "\" with illegal data type conversion to "+type
-        );
-    }
-
-    protected void throwFinalFieldIllegalAccessException(String attemptedType,
-                                                         String attemptedValue)
-                                                         throws IllegalAccessException {
-        throw new IllegalAccessException(getSetMessage(attemptedType, attemptedValue));
-
-    }
-    protected void throwFinalFieldIllegalAccessException(Object o) throws IllegalAccessException {
-        throwFinalFieldIllegalAccessException(o != null ? o.getClass().getName() : "", "");
-    }
-
-    protected void throwFinalFieldIllegalAccessException(boolean z) throws IllegalAccessException {
-        throwFinalFieldIllegalAccessException("boolean", Boolean.toString(z));
-    }
-
-    protected void throwFinalFieldIllegalAccessException(char b) throws IllegalAccessException {
-        throwFinalFieldIllegalAccessException("char", Character.toString(b));
-    }
-
-    protected void throwFinalFieldIllegalAccessException(byte b) throws IllegalAccessException {
-        throwFinalFieldIllegalAccessException("byte", Byte.toString(b));
-    }
-
-    protected void throwFinalFieldIllegalAccessException(short b) throws IllegalAccessException {
-        throwFinalFieldIllegalAccessException("short", Short.toString(b));
-    }
-
-    protected void throwFinalFieldIllegalAccessException(int i) throws IllegalAccessException {
-        throwFinalFieldIllegalAccessException("int", Integer.toString(i));
-    }
-
-    protected void throwFinalFieldIllegalAccessException(long i) throws IllegalAccessException {
-        throwFinalFieldIllegalAccessException("long", Long.toString(i));
-    }
-
-    protected void throwFinalFieldIllegalAccessException(float f) throws IllegalAccessException {
-        throwFinalFieldIllegalAccessException("float", Float.toString(f));
-    }
-
-    protected void throwFinalFieldIllegalAccessException(double f) throws IllegalAccessException {
-        throwFinalFieldIllegalAccessException("double", Double.toString(f));
-    }
-
-    protected IllegalArgumentException newGetBooleanIllegalArgumentException() {
-        return newGetIllegalArgumentException("boolean");
-    }
-
-    protected IllegalArgumentException newGetByteIllegalArgumentException() {
-        return newGetIllegalArgumentException("byte");
-    }
-
-    protected IllegalArgumentException newGetCharIllegalArgumentException() {
-        return newGetIllegalArgumentException("char");
-    }
-
-    protected IllegalArgumentException newGetShortIllegalArgumentException() {
-        return newGetIllegalArgumentException("short");
-    }
-
-    protected IllegalArgumentException newGetIntIllegalArgumentException() {
-        return newGetIllegalArgumentException("int");
-    }
-
-    protected IllegalArgumentException newGetLongIllegalArgumentException() {
-        return newGetIllegalArgumentException("long");
-    }
-
-    protected IllegalArgumentException newGetFloatIllegalArgumentException() {
-        return newGetIllegalArgumentException("float");
-    }
-
-    protected IllegalArgumentException newGetDoubleIllegalArgumentException() {
-        return newGetIllegalArgumentException("double");
-    }
-
-    protected String getSetMessage(String attemptedType, String attemptedValue) {
-        String err = "Can not set";
-        if (Modifier.isStatic(field.getModifiers()))
-            err += " static";
-        if (isFinal)
-            err += " final";
-        err += " " + field.getType().getName() + " field " + getQualifiedFieldName() + " to ";
-        if (attemptedValue.length() > 0) {
-            err += "(" + attemptedType + ")" + attemptedValue;
-        } else {
-            if (attemptedType.length() > 0)
-                err += attemptedType;
-            else
-                err += "null value";
-        }
-        return err;
-    }
-
-    protected void throwSetIllegalArgumentException(String attemptedType,
-                                                    String attemptedValue) {
-        throw new IllegalArgumentException(getSetMessage(attemptedType,attemptedValue));
-    }
-
-    protected void throwSetIllegalArgumentException(Object o) {
-        throwSetIllegalArgumentException(o != null ? o.getClass().getName() : "", "");
-    }
-
-    protected void throwSetIllegalArgumentException(boolean b) {
-        throwSetIllegalArgumentException("boolean", Boolean.toString(b));
-    }
-
-    protected void throwSetIllegalArgumentException(byte b) {
-        throwSetIllegalArgumentException("byte", Byte.toString(b));
-    }
-
-    protected void throwSetIllegalArgumentException(char c) {
-        throwSetIllegalArgumentException("char", Character.toString(c));
-    }
-
-    protected void throwSetIllegalArgumentException(short s) {
-        throwSetIllegalArgumentException("short", Short.toString(s));
-    }
-
-    protected void throwSetIllegalArgumentException(int i) {
-        throwSetIllegalArgumentException("int", Integer.toString(i));
-    }
-
-    protected void throwSetIllegalArgumentException(long l) {
-        throwSetIllegalArgumentException("long", Long.toString(l));
-    }
-
-    protected void throwSetIllegalArgumentException(float f) {
-        throwSetIllegalArgumentException("float", Float.toString(f));
-    }
-
-    protected void throwSetIllegalArgumentException(double d) {
-        throwSetIllegalArgumentException("double", Double.toString(d));
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeFloatFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeFloatFieldAccessorImpl.java
deleted file mode 100755
index ca7789a..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeFloatFieldAccessorImpl.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeFloatFieldAccessorImpl extends UnsafeFieldAccessorImpl {
-    UnsafeFloatFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Float(getFloat(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        throw newGetLongIllegalArgumentException();
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getFloat(obj, fieldOffset);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getFloat(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putFloat(obj, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putFloat(obj, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        if (value instanceof Character) {
-            unsafe.putFloat(obj, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        if (value instanceof Integer) {
-            unsafe.putFloat(obj, fieldOffset, ((Integer) value).intValue());
-            return;
-        }
-        if (value instanceof Long) {
-            unsafe.putFloat(obj, fieldOffset, ((Long) value).longValue());
-            return;
-        }
-        if (value instanceof Float) {
-            unsafe.putFloat(obj, fieldOffset, ((Float) value).floatValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(f);
-        }
-        unsafe.putFloat(obj, fieldOffset, f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeIntegerFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeIntegerFieldAccessorImpl.java
deleted file mode 100755
index 951a220..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeIntegerFieldAccessorImpl.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeIntegerFieldAccessorImpl extends UnsafeFieldAccessorImpl {
-    UnsafeIntegerFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Integer(getInt(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getInt(obj, fieldOffset);
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return getInt(obj);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getInt(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getInt(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putInt(obj, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putInt(obj, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        if (value instanceof Character) {
-            unsafe.putInt(obj, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        if (value instanceof Integer) {
-            unsafe.putInt(obj, fieldOffset, ((Integer) value).intValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setInt(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setInt(obj, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setInt(obj, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(i);
-        }
-        unsafe.putInt(obj, fieldOffset, i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeLongFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeLongFieldAccessorImpl.java
deleted file mode 100755
index 85fcf32..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeLongFieldAccessorImpl.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeLongFieldAccessorImpl extends UnsafeFieldAccessorImpl {
-    UnsafeLongFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Long(getLong(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getLong(obj, fieldOffset);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getLong(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getLong(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putLong(obj, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putLong(obj, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        if (value instanceof Character) {
-            unsafe.putLong(obj, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        if (value instanceof Integer) {
-            unsafe.putLong(obj, fieldOffset, ((Integer) value).intValue());
-            return;
-        }
-        if (value instanceof Long) {
-            unsafe.putLong(obj, fieldOffset, ((Long) value).longValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setLong(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setLong(obj, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setLong(obj, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setLong(obj, i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(l);
-        }
-        unsafe.putLong(obj, fieldOffset, l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeObjectFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeObjectFieldAccessorImpl.java
deleted file mode 100755
index bb5b5b6..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeObjectFieldAccessorImpl.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeObjectFieldAccessorImpl extends UnsafeFieldAccessorImpl {
-    UnsafeObjectFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getObject(obj, fieldOffset);
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        throw newGetLongIllegalArgumentException();
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        throw newGetFloatIllegalArgumentException();
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        throw newGetDoubleIllegalArgumentException();
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value != null) {
-            if (!field.getType().isAssignableFrom(value.getClass())) {
-                throwSetIllegalArgumentException(value);
-            }
-        }
-        unsafe.putObject(obj, fieldOffset, value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedBooleanFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedBooleanFieldAccessorImpl.java
deleted file mode 100755
index 8e66c7f..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedBooleanFieldAccessorImpl.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedBooleanFieldAccessorImpl
-    extends UnsafeQualifiedFieldAccessorImpl
-{
-    UnsafeQualifiedBooleanFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Boolean(getBoolean(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getBooleanVolatile(obj, fieldOffset);
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        throw newGetLongIllegalArgumentException();
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        throw newGetFloatIllegalArgumentException();
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        throw newGetDoubleIllegalArgumentException();
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Boolean) {
-            unsafe.putBooleanVolatile(obj, fieldOffset, ((Boolean) value).booleanValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(z);
-        }
-        unsafe.putBooleanVolatile(obj, fieldOffset, z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedByteFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedByteFieldAccessorImpl.java
deleted file mode 100755
index f3cc928..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedByteFieldAccessorImpl.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedByteFieldAccessorImpl
-    extends UnsafeQualifiedFieldAccessorImpl
-{
-    UnsafeQualifiedByteFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Byte(getByte(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getByteVolatile(obj, fieldOffset);
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putByteVolatile(obj, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(b);
-        }
-        unsafe.putByteVolatile(obj, fieldOffset, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedCharacterFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedCharacterFieldAccessorImpl.java
deleted file mode 100755
index 247e3b2..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedCharacterFieldAccessorImpl.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedCharacterFieldAccessorImpl
-    extends UnsafeQualifiedFieldAccessorImpl
-{
-    UnsafeQualifiedCharacterFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Character(getChar(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getCharVolatile(obj, fieldOffset);
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        return getChar(obj);
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return getChar(obj);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getChar(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getChar(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Character) {
-            unsafe.putCharVolatile(obj, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(c);
-        }
-        unsafe.putCharVolatile(obj, fieldOffset, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedDoubleFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedDoubleFieldAccessorImpl.java
deleted file mode 100755
index c7b2ae1..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedDoubleFieldAccessorImpl.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedDoubleFieldAccessorImpl
-    extends UnsafeQualifiedFieldAccessorImpl
-{
-    UnsafeQualifiedDoubleFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Double(getDouble(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        throw newGetLongIllegalArgumentException();
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        throw newGetFloatIllegalArgumentException();
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getDoubleVolatile(obj, fieldOffset);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putDoubleVolatile(obj, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putDoubleVolatile(obj, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        if (value instanceof Character) {
-            unsafe.putDoubleVolatile(obj, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        if (value instanceof Integer) {
-            unsafe.putDoubleVolatile(obj, fieldOffset, ((Integer) value).intValue());
-            return;
-        }
-        if (value instanceof Long) {
-            unsafe.putDoubleVolatile(obj, fieldOffset, ((Long) value).longValue());
-            return;
-        }
-        if (value instanceof Float) {
-            unsafe.putDoubleVolatile(obj, fieldOffset, ((Float) value).floatValue());
-            return;
-        }
-        if (value instanceof Double) {
-            unsafe.putDoubleVolatile(obj, fieldOffset, ((Double) value).doubleValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(d);
-        }
-        unsafe.putDoubleVolatile(obj, fieldOffset, d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedFieldAccessorImpl.java
deleted file mode 100755
index a40ca95..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedFieldAccessorImpl.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2004, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import sun.misc.Unsafe;
-
-/**
- * Base class for sun.misc.Unsafe-based FieldAccessors for fields with
- * final or volatile qualifiers. These differ from unqualified
- * versions in that (1) they check for read-only status (2) they use
- * the volatile forms of Unsafe get/put methods. (When accessed via
- * reflection, finals act as slightly "lighter" forms of volatiles. So
- * the volatile forms are heavier than necessary in terms of
- * underlying reordering rules and memory barriers, but preserve
- * correctness.)
- */
-
-abstract class UnsafeQualifiedFieldAccessorImpl
-    extends UnsafeFieldAccessorImpl
-{
-    protected final boolean isReadOnly;
-
-    UnsafeQualifiedFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field);
-        this.isReadOnly = isReadOnly;
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedFloatFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedFloatFieldAccessorImpl.java
deleted file mode 100755
index c06af79..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedFloatFieldAccessorImpl.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedFloatFieldAccessorImpl
-    extends UnsafeQualifiedFieldAccessorImpl
-{
-    UnsafeQualifiedFloatFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Float(getFloat(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        throw newGetLongIllegalArgumentException();
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getFloatVolatile(obj, fieldOffset);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getFloat(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putFloatVolatile(obj, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putFloatVolatile(obj, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        if (value instanceof Character) {
-            unsafe.putFloatVolatile(obj, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        if (value instanceof Integer) {
-            unsafe.putFloatVolatile(obj, fieldOffset, ((Integer) value).intValue());
-            return;
-        }
-        if (value instanceof Long) {
-            unsafe.putFloatVolatile(obj, fieldOffset, ((Long) value).longValue());
-            return;
-        }
-        if (value instanceof Float) {
-            unsafe.putFloatVolatile(obj, fieldOffset, ((Float) value).floatValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(f);
-        }
-        unsafe.putFloatVolatile(obj, fieldOffset, f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedIntegerFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedIntegerFieldAccessorImpl.java
deleted file mode 100755
index b675158..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedIntegerFieldAccessorImpl.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedIntegerFieldAccessorImpl
-    extends UnsafeQualifiedFieldAccessorImpl
-{
-    UnsafeQualifiedIntegerFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Integer(getInt(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getIntVolatile(obj, fieldOffset);
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return getInt(obj);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getInt(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getInt(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putIntVolatile(obj, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putIntVolatile(obj, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        if (value instanceof Character) {
-            unsafe.putIntVolatile(obj, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        if (value instanceof Integer) {
-            unsafe.putIntVolatile(obj, fieldOffset, ((Integer) value).intValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setInt(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setInt(obj, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setInt(obj, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(i);
-        }
-        unsafe.putIntVolatile(obj, fieldOffset, i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedLongFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedLongFieldAccessorImpl.java
deleted file mode 100755
index 50fa38d..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedLongFieldAccessorImpl.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedLongFieldAccessorImpl
-    extends UnsafeQualifiedFieldAccessorImpl
-{
-    UnsafeQualifiedLongFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Long(getLong(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getLongVolatile(obj, fieldOffset);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getLong(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getLong(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putLongVolatile(obj, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putLongVolatile(obj, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        if (value instanceof Character) {
-            unsafe.putLongVolatile(obj, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        if (value instanceof Integer) {
-            unsafe.putLongVolatile(obj, fieldOffset, ((Integer) value).intValue());
-            return;
-        }
-        if (value instanceof Long) {
-            unsafe.putLongVolatile(obj, fieldOffset, ((Long) value).longValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setLong(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setLong(obj, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setLong(obj, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setLong(obj, i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(l);
-        }
-        unsafe.putLongVolatile(obj, fieldOffset, l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedObjectFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedObjectFieldAccessorImpl.java
deleted file mode 100755
index 1a502ab..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedObjectFieldAccessorImpl.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedObjectFieldAccessorImpl
-    extends UnsafeQualifiedFieldAccessorImpl
-{
-    UnsafeQualifiedObjectFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getObjectVolatile(obj, fieldOffset);
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        throw newGetLongIllegalArgumentException();
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        throw newGetFloatIllegalArgumentException();
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        throw newGetDoubleIllegalArgumentException();
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value != null) {
-            if (!field.getType().isAssignableFrom(value.getClass())) {
-                throwSetIllegalArgumentException(value);
-            }
-        }
-        unsafe.putObjectVolatile(obj, fieldOffset, value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedShortFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedShortFieldAccessorImpl.java
deleted file mode 100755
index fddfef2..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedShortFieldAccessorImpl.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedShortFieldAccessorImpl
-    extends UnsafeQualifiedFieldAccessorImpl
-{
-    UnsafeQualifiedShortFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Short(getShort(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getShortVolatile(obj, fieldOffset);
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        return getShort(obj);
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return getShort(obj);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getShort(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getShort(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putShortVolatile(obj, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putShortVolatile(obj, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setShort(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(s);
-        }
-        unsafe.putShortVolatile(obj, fieldOffset, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticBooleanFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticBooleanFieldAccessorImpl.java
deleted file mode 100755
index 5b1e3f3..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticBooleanFieldAccessorImpl.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedStaticBooleanFieldAccessorImpl
-    extends UnsafeQualifiedStaticFieldAccessorImpl
-{
-    UnsafeQualifiedStaticBooleanFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Boolean(getBoolean(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        return unsafe.getBooleanVolatile(base, fieldOffset);
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        throw newGetLongIllegalArgumentException();
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        throw newGetFloatIllegalArgumentException();
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        throw newGetDoubleIllegalArgumentException();
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Boolean) {
-            unsafe.putBooleanVolatile(base, fieldOffset, ((Boolean) value).booleanValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(z);
-        }
-        unsafe.putBooleanVolatile(base, fieldOffset, z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticByteFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticByteFieldAccessorImpl.java
deleted file mode 100755
index a3e087e..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticByteFieldAccessorImpl.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedStaticByteFieldAccessorImpl
-    extends UnsafeQualifiedStaticFieldAccessorImpl
-{
-    UnsafeQualifiedStaticByteFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Byte(getByte(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        return unsafe.getByteVolatile(base, fieldOffset);
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putByteVolatile(base, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(b);
-        }
-        unsafe.putByteVolatile(base, fieldOffset, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticCharacterFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticCharacterFieldAccessorImpl.java
deleted file mode 100755
index c171064..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticCharacterFieldAccessorImpl.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedStaticCharacterFieldAccessorImpl
-    extends UnsafeQualifiedStaticFieldAccessorImpl
-{
-    UnsafeQualifiedStaticCharacterFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Character(getChar(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        return unsafe.getCharVolatile(base, fieldOffset);
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        return getChar(obj);
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return getChar(obj);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getChar(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getChar(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Character) {
-            unsafe.putCharVolatile(base, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(c);
-        }
-        unsafe.putCharVolatile(base, fieldOffset, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticDoubleFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticDoubleFieldAccessorImpl.java
deleted file mode 100755
index 4acd9f5..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticDoubleFieldAccessorImpl.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedStaticDoubleFieldAccessorImpl
-    extends UnsafeQualifiedStaticFieldAccessorImpl
-{
-    UnsafeQualifiedStaticDoubleFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Double(getDouble(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        throw newGetLongIllegalArgumentException();
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        throw newGetFloatIllegalArgumentException();
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return unsafe.getDoubleVolatile(base, fieldOffset);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putDoubleVolatile(base, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putDoubleVolatile(base, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        if (value instanceof Character) {
-            unsafe.putDoubleVolatile(base, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        if (value instanceof Integer) {
-            unsafe.putDoubleVolatile(base, fieldOffset, ((Integer) value).intValue());
-            return;
-        }
-        if (value instanceof Long) {
-            unsafe.putDoubleVolatile(base, fieldOffset, ((Long) value).longValue());
-            return;
-        }
-        if (value instanceof Float) {
-            unsafe.putDoubleVolatile(base, fieldOffset, ((Float) value).floatValue());
-            return;
-        }
-        if (value instanceof Double) {
-            unsafe.putDoubleVolatile(base, fieldOffset, ((Double) value).doubleValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(d);
-        }
-        unsafe.putDoubleVolatile(base, fieldOffset, d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl.java
deleted file mode 100755
index f5837e6..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2004, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.security.AccessController;
-import sun.misc.Unsafe;
-
-/** Base class for sun.misc.Unsafe-based FieldAccessors for final or
-    volatile static fields.  */
-
-abstract class UnsafeQualifiedStaticFieldAccessorImpl
-    extends UnsafeStaticFieldAccessorImpl
-{
-    protected final boolean isReadOnly;
-
-    UnsafeQualifiedStaticFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field);
-        this.isReadOnly = isReadOnly;
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticFloatFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticFloatFieldAccessorImpl.java
deleted file mode 100755
index 86eb74e..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticFloatFieldAccessorImpl.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedStaticFloatFieldAccessorImpl
-    extends UnsafeQualifiedStaticFieldAccessorImpl
-{
-    UnsafeQualifiedStaticFloatFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Float(getFloat(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        throw newGetLongIllegalArgumentException();
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return unsafe.getFloatVolatile(base, fieldOffset);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getFloat(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putFloatVolatile(base, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putFloatVolatile(base, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        if (value instanceof Character) {
-            unsafe.putFloatVolatile(base, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        if (value instanceof Integer) {
-            unsafe.putFloatVolatile(base, fieldOffset, ((Integer) value).intValue());
-            return;
-        }
-        if (value instanceof Long) {
-            unsafe.putFloatVolatile(base, fieldOffset, ((Long) value).longValue());
-            return;
-        }
-        if (value instanceof Float) {
-            unsafe.putFloatVolatile(base, fieldOffset, ((Float) value).floatValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(f);
-        }
-        unsafe.putFloatVolatile(base, fieldOffset, f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl.java
deleted file mode 100755
index 7ddcd8c..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedStaticIntegerFieldAccessorImpl
-    extends UnsafeQualifiedStaticFieldAccessorImpl
-{
-    UnsafeQualifiedStaticIntegerFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Integer(getInt(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        return unsafe.getIntVolatile(base, fieldOffset);
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return getInt(obj);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getInt(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getInt(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putIntVolatile(base, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putIntVolatile(base, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        if (value instanceof Character) {
-            unsafe.putIntVolatile(base, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        if (value instanceof Integer) {
-            unsafe.putIntVolatile(base, fieldOffset, ((Integer) value).intValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setInt(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setInt(obj, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setInt(obj, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(i);
-        }
-        unsafe.putIntVolatile(base, fieldOffset, i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl.java
deleted file mode 100755
index 97da2f2..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedStaticLongFieldAccessorImpl
-    extends UnsafeQualifiedStaticFieldAccessorImpl
-{
-    UnsafeQualifiedStaticLongFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Long(getLong(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return unsafe.getLongVolatile(base, fieldOffset);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getLong(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getLong(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putLongVolatile(base, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putLongVolatile(base, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        if (value instanceof Character) {
-            unsafe.putLongVolatile(base, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        if (value instanceof Integer) {
-            unsafe.putLongVolatile(base, fieldOffset, ((Integer) value).intValue());
-            return;
-        }
-        if (value instanceof Long) {
-            unsafe.putLongVolatile(base, fieldOffset, ((Long) value).longValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setLong(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setLong(obj, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setLong(obj, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setLong(obj, i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(l);
-        }
-        unsafe.putLongVolatile(base, fieldOffset, l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticObjectFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticObjectFieldAccessorImpl.java
deleted file mode 100755
index 8bea19e..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticObjectFieldAccessorImpl.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedStaticObjectFieldAccessorImpl
-    extends UnsafeQualifiedStaticFieldAccessorImpl
-{
-    UnsafeQualifiedStaticObjectFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return unsafe.getObjectVolatile(base, fieldOffset);
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        throw newGetLongIllegalArgumentException();
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        throw newGetFloatIllegalArgumentException();
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        throw newGetDoubleIllegalArgumentException();
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value != null) {
-            if (!field.getType().isAssignableFrom(value.getClass())) {
-                throwSetIllegalArgumentException(value);
-            }
-        }
-        unsafe.putObjectVolatile(base, fieldOffset, value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticShortFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticShortFieldAccessorImpl.java
deleted file mode 100755
index 4caf4d1..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeQualifiedStaticShortFieldAccessorImpl.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (c) 2004, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeQualifiedStaticShortFieldAccessorImpl
-    extends UnsafeQualifiedStaticFieldAccessorImpl
-{
-    UnsafeQualifiedStaticShortFieldAccessorImpl(Field field, boolean isReadOnly) {
-        super(field, isReadOnly);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Short(getShort(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        return unsafe.getShortVolatile(base, fieldOffset);
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        return getShort(obj);
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return getShort(obj);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getShort(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getShort(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putShortVolatile(base, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putShortVolatile(base, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setShort(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isReadOnly) {
-            throwFinalFieldIllegalAccessException(s);
-        }
-        unsafe.putShortVolatile(base, fieldOffset, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeShortFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeShortFieldAccessorImpl.java
deleted file mode 100755
index d8fe8dc..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeShortFieldAccessorImpl.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeShortFieldAccessorImpl extends UnsafeFieldAccessorImpl {
-    UnsafeShortFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Short(getShort(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        ensureObj(obj);
-        return unsafe.getShort(obj, fieldOffset);
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        return getShort(obj);
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return getShort(obj);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getShort(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getShort(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putShort(obj, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putShort(obj, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setShort(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        ensureObj(obj);
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(s);
-        }
-        unsafe.putShort(obj, fieldOffset, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeStaticBooleanFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeStaticBooleanFieldAccessorImpl.java
deleted file mode 100755
index 741c5ff..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeStaticBooleanFieldAccessorImpl.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeStaticBooleanFieldAccessorImpl extends UnsafeStaticFieldAccessorImpl {
-    UnsafeStaticBooleanFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Boolean(getBoolean(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        return unsafe.getBoolean(base, fieldOffset);
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        throw newGetLongIllegalArgumentException();
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        throw newGetFloatIllegalArgumentException();
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        throw newGetDoubleIllegalArgumentException();
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Boolean) {
-            unsafe.putBoolean(base, fieldOffset, ((Boolean) value).booleanValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(z);
-        }
-        unsafe.putBoolean(base, fieldOffset, z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeStaticByteFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeStaticByteFieldAccessorImpl.java
deleted file mode 100755
index 726961b..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeStaticByteFieldAccessorImpl.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeStaticByteFieldAccessorImpl extends UnsafeStaticFieldAccessorImpl {
-    UnsafeStaticByteFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Byte(getByte(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        return unsafe.getByte(base, fieldOffset);
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getByte(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putByte(base, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(b);
-        }
-        unsafe.putByte(base, fieldOffset, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeStaticCharacterFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeStaticCharacterFieldAccessorImpl.java
deleted file mode 100755
index 29b0303..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeStaticCharacterFieldAccessorImpl.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeStaticCharacterFieldAccessorImpl extends UnsafeStaticFieldAccessorImpl {
-    UnsafeStaticCharacterFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Character(getChar(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        return unsafe.getChar(base, fieldOffset);
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        return getChar(obj);
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return getChar(obj);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getChar(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getChar(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Character) {
-            unsafe.putChar(base, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(c);
-        }
-        unsafe.putChar(base, fieldOffset, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeStaticDoubleFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeStaticDoubleFieldAccessorImpl.java
deleted file mode 100755
index 34c9784..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeStaticDoubleFieldAccessorImpl.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeStaticDoubleFieldAccessorImpl extends UnsafeStaticFieldAccessorImpl {
-    UnsafeStaticDoubleFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Double(getDouble(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        throw newGetLongIllegalArgumentException();
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        throw newGetFloatIllegalArgumentException();
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return unsafe.getDouble(base, fieldOffset);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putDouble(base, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putDouble(base, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        if (value instanceof Character) {
-            unsafe.putDouble(base, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        if (value instanceof Integer) {
-            unsafe.putDouble(base, fieldOffset, ((Integer) value).intValue());
-            return;
-        }
-        if (value instanceof Long) {
-            unsafe.putDouble(base, fieldOffset, ((Long) value).longValue());
-            return;
-        }
-        if (value instanceof Float) {
-            unsafe.putDouble(base, fieldOffset, ((Float) value).floatValue());
-            return;
-        }
-        if (value instanceof Double) {
-            unsafe.putDouble(base, fieldOffset, ((Double) value).doubleValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setDouble(obj, f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(d);
-        }
-        unsafe.putDouble(base, fieldOffset, d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeStaticFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeStaticFieldAccessorImpl.java
deleted file mode 100755
index d3fce62..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeStaticFieldAccessorImpl.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2001, 2004, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.security.AccessController;
-import sun.misc.Unsafe;
-
-/** Base class for sun.misc.Unsafe-based FieldAccessors for static
-    fields. The observation is that there are only nine types of
-    fields from the standpoint of reflection code: the eight primitive
-    types and Object. Using class Unsafe instead of generated
-    bytecodes saves memory and loading time for the
-    dynamically-generated FieldAccessors. */
-
-abstract class UnsafeStaticFieldAccessorImpl extends UnsafeFieldAccessorImpl {
-    static {
-        Reflection.registerFieldsToFilter(UnsafeStaticFieldAccessorImpl.class,
-                                          new String[] { "base" });
-    }
-
-    protected Object base; // base
-
-    UnsafeStaticFieldAccessorImpl(Field field) {
-        super(field);
-        base = unsafe.staticFieldBase(field);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeStaticFloatFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeStaticFloatFieldAccessorImpl.java
deleted file mode 100755
index 780a794..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeStaticFloatFieldAccessorImpl.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeStaticFloatFieldAccessorImpl extends UnsafeStaticFieldAccessorImpl {
-    UnsafeStaticFloatFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Float(getFloat(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        throw newGetLongIllegalArgumentException();
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return unsafe.getFloat(base, fieldOffset);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getFloat(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putFloat(base, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putFloat(base, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        if (value instanceof Character) {
-            unsafe.putFloat(base, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        if (value instanceof Integer) {
-            unsafe.putFloat(base, fieldOffset, ((Integer) value).intValue());
-            return;
-        }
-        if (value instanceof Long) {
-            unsafe.putFloat(base, fieldOffset, ((Long) value).longValue());
-            return;
-        }
-        if (value instanceof Float) {
-            unsafe.putFloat(base, fieldOffset, ((Float) value).floatValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setFloat(obj, l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(f);
-        }
-        unsafe.putFloat(base, fieldOffset, f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeStaticIntegerFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeStaticIntegerFieldAccessorImpl.java
deleted file mode 100755
index 1b21b76..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeStaticIntegerFieldAccessorImpl.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeStaticIntegerFieldAccessorImpl extends UnsafeStaticFieldAccessorImpl {
-    UnsafeStaticIntegerFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Integer(getInt(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        return unsafe.getInt(base, fieldOffset);
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return getInt(obj);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getInt(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getInt(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putInt(base, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putInt(base, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        if (value instanceof Character) {
-            unsafe.putInt(base, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        if (value instanceof Integer) {
-            unsafe.putInt(base, fieldOffset, ((Integer) value).intValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setInt(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setInt(obj, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setInt(obj, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(i);
-        }
-        unsafe.putInt(base, fieldOffset, i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeStaticLongFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeStaticLongFieldAccessorImpl.java
deleted file mode 100755
index 7d50ac2..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeStaticLongFieldAccessorImpl.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeStaticLongFieldAccessorImpl extends UnsafeStaticFieldAccessorImpl {
-    UnsafeStaticLongFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Long(getLong(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return unsafe.getLong(base, fieldOffset);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getLong(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getLong(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putLong(base, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putLong(base, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        if (value instanceof Character) {
-            unsafe.putLong(base, fieldOffset, ((Character) value).charValue());
-            return;
-        }
-        if (value instanceof Integer) {
-            unsafe.putLong(base, fieldOffset, ((Integer) value).intValue());
-            return;
-        }
-        if (value instanceof Long) {
-            unsafe.putLong(base, fieldOffset, ((Long) value).longValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setLong(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setLong(obj, c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setLong(obj, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setLong(obj, i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(l);
-        }
-        unsafe.putLong(base, fieldOffset, l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeStaticObjectFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeStaticObjectFieldAccessorImpl.java
deleted file mode 100755
index e8b4548..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeStaticObjectFieldAccessorImpl.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeStaticObjectFieldAccessorImpl extends UnsafeStaticFieldAccessorImpl {
-    UnsafeStaticObjectFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return unsafe.getObject(base, fieldOffset);
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        throw newGetShortIllegalArgumentException();
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        throw newGetIntIllegalArgumentException();
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        throw newGetLongIllegalArgumentException();
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        throw newGetFloatIllegalArgumentException();
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        throw newGetDoubleIllegalArgumentException();
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value != null) {
-            if (!field.getType().isAssignableFrom(value.getClass())) {
-                throwSetIllegalArgumentException(value);
-            }
-        }
-        unsafe.putObject(base, fieldOffset, value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/UnsafeStaticShortFieldAccessorImpl.java b/ojluni/src/main/java/sun/reflect/UnsafeStaticShortFieldAccessorImpl.java
deleted file mode 100755
index d56d621..0000000
--- a/ojluni/src/main/java/sun/reflect/UnsafeStaticShortFieldAccessorImpl.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, 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.
- */
-
-package sun.reflect;
-
-import java.lang.reflect.Field;
-
-class UnsafeStaticShortFieldAccessorImpl extends UnsafeStaticFieldAccessorImpl {
-    UnsafeStaticShortFieldAccessorImpl(Field field) {
-        super(field);
-    }
-
-    public Object get(Object obj) throws IllegalArgumentException {
-        return new Short(getShort(obj));
-    }
-
-    public boolean getBoolean(Object obj) throws IllegalArgumentException {
-        throw newGetBooleanIllegalArgumentException();
-    }
-
-    public byte getByte(Object obj) throws IllegalArgumentException {
-        throw newGetByteIllegalArgumentException();
-    }
-
-    public char getChar(Object obj) throws IllegalArgumentException {
-        throw newGetCharIllegalArgumentException();
-    }
-
-    public short getShort(Object obj) throws IllegalArgumentException {
-        return unsafe.getShort(base, fieldOffset);
-    }
-
-    public int getInt(Object obj) throws IllegalArgumentException {
-        return getShort(obj);
-    }
-
-    public long getLong(Object obj) throws IllegalArgumentException {
-        return getShort(obj);
-    }
-
-    public float getFloat(Object obj) throws IllegalArgumentException {
-        return getShort(obj);
-    }
-
-    public double getDouble(Object obj) throws IllegalArgumentException {
-        return getShort(obj);
-    }
-
-    public void set(Object obj, Object value)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(value);
-        }
-        if (value == null) {
-            throwSetIllegalArgumentException(value);
-        }
-        if (value instanceof Byte) {
-            unsafe.putShort(base, fieldOffset, ((Byte) value).byteValue());
-            return;
-        }
-        if (value instanceof Short) {
-            unsafe.putShort(base, fieldOffset, ((Short) value).shortValue());
-            return;
-        }
-        throwSetIllegalArgumentException(value);
-    }
-
-    public void setBoolean(Object obj, boolean z)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(z);
-    }
-
-    public void setByte(Object obj, byte b)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        setShort(obj, b);
-    }
-
-    public void setChar(Object obj, char c)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(c);
-    }
-
-    public void setShort(Object obj, short s)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        if (isFinal) {
-            throwFinalFieldIllegalAccessException(s);
-        }
-        unsafe.putShort(base, fieldOffset, s);
-    }
-
-    public void setInt(Object obj, int i)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(i);
-    }
-
-    public void setLong(Object obj, long l)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(l);
-    }
-
-    public void setFloat(Object obj, float f)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(f);
-    }
-
-    public void setDouble(Object obj, double d)
-        throws IllegalArgumentException, IllegalAccessException
-    {
-        throwSetIllegalArgumentException(d);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/annotation/AnnotationInvocationHandler.java b/ojluni/src/main/java/sun/reflect/annotation/AnnotationInvocationHandler.java
deleted file mode 100755
index 6e73de7..0000000
--- a/ojluni/src/main/java/sun/reflect/annotation/AnnotationInvocationHandler.java
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * 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.
- */
-
-package sun.reflect.annotation;
-
-import java.lang.annotation.*;
-import java.lang.reflect.*;
-import java.io.Serializable;
-import java.util.*;
-import java.lang.annotation.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-/**
- * InvocationHandler for dynamic proxy implementation of Annotation.
- *
- * @author  Josh Bloch
- * @since   1.5
- */
-class AnnotationInvocationHandler implements InvocationHandler, Serializable {
-    private static final long serialVersionUID = 6182022883658399397L;
-    private final Class<? extends Annotation> type;
-    private final Map<String, Object> memberValues;
-
-    AnnotationInvocationHandler(Class<? extends Annotation> type, Map<String, Object> memberValues) {
-        this.type = type;
-        this.memberValues = memberValues;
-    }
-
-    public Object invoke(Object proxy, Method method, Object[] args) {
-        String member = method.getName();
-        Class<?>[] paramTypes = method.getParameterTypes();
-
-        // Handle Object and Annotation methods
-        if (member.equals("equals") && paramTypes.length == 1 &&
-            paramTypes[0] == Object.class)
-            return equalsImpl(args[0]);
-        assert paramTypes.length == 0;
-        if (member.equals("toString"))
-            return toStringImpl();
-        if (member.equals("hashCode"))
-            return hashCodeImpl();
-        if (member.equals("annotationType"))
-            return type;
-
-        // Handle annotation member accessors
-        Object result = memberValues.get(member);
-
-        if (result == null)
-            throw new IncompleteAnnotationException(type, member);
-
-        if (result instanceof ExceptionProxy)
-            throw ((ExceptionProxy) result).generateException();
-
-        if (result.getClass().isArray() && Array.getLength(result) != 0)
-            result = cloneArray(result);
-
-        return result;
-    }
-
-    /**
-     * This method, which clones its array argument, would not be necessary
-     * if Cloneable had a public clone method.
-     */
-    private Object cloneArray(Object array) {
-        Class<?> type = array.getClass();
-
-        if (type == byte[].class) {
-            byte[] byteArray = (byte[])array;
-            return byteArray.clone();
-        }
-        if (type == char[].class) {
-            char[] charArray = (char[])array;
-            return charArray.clone();
-        }
-        if (type == double[].class) {
-            double[] doubleArray = (double[])array;
-            return doubleArray.clone();
-        }
-        if (type == float[].class) {
-            float[] floatArray = (float[])array;
-            return floatArray.clone();
-        }
-        if (type == int[].class) {
-            int[] intArray = (int[])array;
-            return intArray.clone();
-        }
-        if (type == long[].class) {
-            long[] longArray = (long[])array;
-            return longArray.clone();
-        }
-        if (type == short[].class) {
-            short[] shortArray = (short[])array;
-            return shortArray.clone();
-        }
-        if (type == boolean[].class) {
-            boolean[] booleanArray = (boolean[])array;
-            return booleanArray.clone();
-        }
-
-        Object[] objectArray = (Object[])array;
-        return objectArray.clone();
-    }
-
-
-    /**
-     * Implementation of dynamicProxy.toString()
-     */
-    private String toStringImpl() {
-        StringBuffer result = new StringBuffer(128);
-        result.append('@');
-        result.append(type.getName());
-        result.append('(');
-        boolean firstMember = true;
-        for (Map.Entry<String, Object> e : memberValues.entrySet()) {
-            if (firstMember)
-                firstMember = false;
-            else
-                result.append(", ");
-
-            result.append(e.getKey());
-            result.append('=');
-            result.append(memberValueToString(e.getValue()));
-        }
-        result.append(')');
-        return result.toString();
-    }
-
-    /**
-     * Translates a member value (in "dynamic proxy return form") into a string
-     */
-    private static String memberValueToString(Object value) {
-        Class<?> type = value.getClass();
-        if (!type.isArray())    // primitive, string, class, enum const,
-                                // or annotation
-            return value.toString();
-
-        if (type == byte[].class)
-            return Arrays.toString((byte[]) value);
-        if (type == char[].class)
-            return Arrays.toString((char[]) value);
-        if (type == double[].class)
-            return Arrays.toString((double[]) value);
-        if (type == float[].class)
-            return Arrays.toString((float[]) value);
-        if (type == int[].class)
-            return Arrays.toString((int[]) value);
-        if (type == long[].class)
-            return Arrays.toString((long[]) value);
-        if (type == short[].class)
-            return Arrays.toString((short[]) value);
-        if (type == boolean[].class)
-            return Arrays.toString((boolean[]) value);
-        return Arrays.toString((Object[]) value);
-    }
-
-    /**
-     * Implementation of dynamicProxy.equals(Object o)
-     */
-    private Boolean equalsImpl(Object o) {
-        if (o == this)
-            return true;
-
-        if (!type.isInstance(o))
-            return false;
-        for (Method memberMethod : getMemberMethods()) {
-            String member = memberMethod.getName();
-            Object ourValue = memberValues.get(member);
-            Object hisValue = null;
-            AnnotationInvocationHandler hisHandler = asOneOfUs(o);
-            if (hisHandler != null) {
-                hisValue = hisHandler.memberValues.get(member);
-            } else {
-                try {
-                    hisValue = memberMethod.invoke(o);
-                } catch (InvocationTargetException e) {
-                    return false;
-                } catch (IllegalAccessException e) {
-                    throw new AssertionError(e);
-                }
-            }
-            if (!memberValueEquals(ourValue, hisValue))
-                return false;
-        }
-        return true;
-    }
-
-    /**
-     * Returns an object's invocation handler if that object is a dynamic
-     * proxy with a handler of type AnnotationInvocationHandler.
-     * Returns null otherwise.
-     */
-    private AnnotationInvocationHandler asOneOfUs(Object o) {
-        if (Proxy.isProxyClass(o.getClass())) {
-            InvocationHandler handler = Proxy.getInvocationHandler(o);
-            if (handler instanceof AnnotationInvocationHandler)
-                return (AnnotationInvocationHandler) handler;
-        }
-        return null;
-    }
-
-    /**
-     * Returns true iff the two member values in "dynamic proxy return form"
-     * are equal using the appropriate equality function depending on the
-     * member type.  The two values will be of the same type unless one of
-     * the containing annotations is ill-formed.  If one of the containing
-     * annotations is ill-formed, this method will return false unless the
-     * two members are identical object references.
-     */
-    private static boolean memberValueEquals(Object v1, Object v2) {
-        Class<?> type = v1.getClass();
-
-        // Check for primitive, string, class, enum const, annotation,
-        // or ExceptionProxy
-        if (!type.isArray())
-            return v1.equals(v2);
-
-        // Check for array of string, class, enum const, annotation,
-        // or ExceptionProxy
-        if (v1 instanceof Object[] && v2 instanceof Object[])
-            return Arrays.equals((Object[]) v1, (Object[]) v2);
-
-        // Check for ill formed annotation(s)
-        if (v2.getClass() != type)
-            return false;
-
-        // Deal with array of primitives
-        if (type == byte[].class)
-            return Arrays.equals((byte[]) v1, (byte[]) v2);
-        if (type == char[].class)
-            return Arrays.equals((char[]) v1, (char[]) v2);
-        if (type == double[].class)
-            return Arrays.equals((double[]) v1, (double[]) v2);
-        if (type == float[].class)
-            return Arrays.equals((float[]) v1, (float[]) v2);
-        if (type == int[].class)
-            return Arrays.equals((int[]) v1, (int[]) v2);
-        if (type == long[].class)
-            return Arrays.equals((long[]) v1, (long[]) v2);
-        if (type == short[].class)
-            return Arrays.equals((short[]) v1, (short[]) v2);
-        assert type == boolean[].class;
-        return Arrays.equals((boolean[]) v1, (boolean[]) v2);
-    }
-
-    /**
-     * Returns the member methods for our annotation type.  These are
-     * obtained lazily and cached, as they're expensive to obtain
-     * and we only need them if our equals method is invoked (which should
-     * be rare).
-     */
-    private Method[] getMemberMethods() {
-        if (memberMethods == null) {
-            memberMethods = AccessController.doPrivileged(
-                new PrivilegedAction<Method[]>() {
-                    public Method[] run() {
-                        final Method[] mm = type.getDeclaredMethods();
-                        AccessibleObject.setAccessible(mm, true);
-                        return mm;
-                    }
-                });
-        }
-        return memberMethods;
-    }
-    private transient volatile Method[] memberMethods = null;
-
-    /**
-     * Implementation of dynamicProxy.hashCode()
-     */
-    private int hashCodeImpl() {
-        int result = 0;
-        for (Map.Entry<String, Object> e : memberValues.entrySet()) {
-            result += (127 * e.getKey().hashCode()) ^
-                memberValueHashCode(e.getValue());
-        }
-        return result;
-    }
-
-    /**
-     * Computes hashCode of a member value (in "dynamic proxy return form")
-     */
-    private static int memberValueHashCode(Object value) {
-        Class<?> type = value.getClass();
-        if (!type.isArray())    // primitive, string, class, enum const,
-                                // or annotation
-            return value.hashCode();
-
-        if (type == byte[].class)
-            return Arrays.hashCode((byte[]) value);
-        if (type == char[].class)
-            return Arrays.hashCode((char[]) value);
-        if (type == double[].class)
-            return Arrays.hashCode((double[]) value);
-        if (type == float[].class)
-            return Arrays.hashCode((float[]) value);
-        if (type == int[].class)
-            return Arrays.hashCode((int[]) value);
-        if (type == long[].class)
-            return Arrays.hashCode((long[]) value);
-        if (type == short[].class)
-            return Arrays.hashCode((short[]) value);
-        if (type == boolean[].class)
-            return Arrays.hashCode((boolean[]) value);
-        return Arrays.hashCode((Object[]) value);
-    }
-
-    private void readObject(java.io.ObjectInputStream s)
-        throws java.io.IOException, ClassNotFoundException {
-        s.defaultReadObject();
-
-
-        // Check to make sure that types have not evolved incompatibly
-
-        AnnotationType annotationType = null;
-        try {
-            annotationType = AnnotationType.getInstance(type);
-        } catch(IllegalArgumentException e) {
-            // Class is no longer an annotation type; time to punch out
-            throw new java.io.InvalidObjectException("Non-annotation type in annotation serial stream");
-        }
-
-        Map<String, Class<?>> memberTypes = annotationType.memberTypes();
-
-
-        // If there are annotation members without values, that
-        // situation is handled by the invoke method.
-        for (Map.Entry<String, Object> memberValue : memberValues.entrySet()) {
-            String name = memberValue.getKey();
-            Class<?> memberType = memberTypes.get(name);
-            if (memberType != null) {  // i.e. member still exists
-                Object value = memberValue.getValue();
-                if (!(memberType.isInstance(value) ||
-                      value instanceof ExceptionProxy)) {
-                    memberValue.setValue(
-                        new AnnotationTypeMismatchExceptionProxy(
-                            value.getClass() + "[" + value + "]").setMember(
-                                annotationType.members().get(name)));
-                }
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/annotation/AnnotationParser.java b/ojluni/src/main/java/sun/reflect/annotation/AnnotationParser.java
deleted file mode 100755
index d42bb90..0000000
--- a/ojluni/src/main/java/sun/reflect/annotation/AnnotationParser.java
+++ /dev/null
@@ -1,805 +0,0 @@
-/*
- * Copyright (c) 2003, 2005, 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.
- */
-
-package sun.reflect.annotation;
-
-import java.lang.annotation.*;
-import java.util.*;
-import java.nio.ByteBuffer;
-import java.nio.BufferUnderflowException;
-import java.lang.reflect.*;
-import sun.reflect.ConstantPool;
-
-import sun.reflect.generics.parser.SignatureParser;
-import sun.reflect.generics.tree.TypeSignature;
-import sun.reflect.generics.factory.GenericsFactory;
-import sun.reflect.generics.factory.CoreReflectionFactory;
-import sun.reflect.generics.visitor.Reifier;
-import sun.reflect.generics.scope.ClassScope;
-
-/**
- * Parser for Java programming language annotations.  Translates
- * annotation byte streams emitted by compiler into annotation objects.
- *
- * @author  Josh Bloch
- * @since   1.5
- */
-public class AnnotationParser {
-    /**
-     * Parses the annotations described by the specified byte array.
-     * resolving constant references in the specified constant pool.
-     * The array must contain an array of annotations as described
-     * in the RuntimeVisibleAnnotations_attribute:
-     *
-     *   u2 num_annotations;
-     *   annotation annotations[num_annotations];
-     *
-     * @throws AnnotationFormatError if an annotation is found to be
-     *         malformed.
-     */
-    public static Map<Class<? extends Annotation>, Annotation> parseAnnotations(
-                byte[] rawAnnotations,
-                ConstantPool constPool,
-                Class<?> container) {
-        if (rawAnnotations == null)
-            return Collections.emptyMap();
-
-        try {
-            return parseAnnotations2(rawAnnotations, constPool, container);
-        } catch(BufferUnderflowException e) {
-            throw new AnnotationFormatError("Unexpected end of annotations.");
-        } catch(IllegalArgumentException e) {
-            // Type mismatch in constant pool
-            throw new AnnotationFormatError(e);
-        }
-    }
-
-    private static Map<Class<? extends Annotation>, Annotation> parseAnnotations2(
-                byte[] rawAnnotations,
-                ConstantPool constPool,
-                Class<?> container) {
-        Map<Class<? extends Annotation>, Annotation> result =
-            new LinkedHashMap<Class<? extends Annotation>, Annotation>();
-        ByteBuffer buf = ByteBuffer.wrap(rawAnnotations);
-        int numAnnotations = buf.getShort() & 0xFFFF;
-        for (int i = 0; i < numAnnotations; i++) {
-            Annotation a = parseAnnotation(buf, constPool, container, false);
-            if (a != null) {
-                Class<? extends Annotation> klass = a.annotationType();
-                AnnotationType type = AnnotationType.getInstance(klass);
-                if (type.retention() == RetentionPolicy.RUNTIME)
-                    if (result.put(klass, a) != null)
-                        throw new AnnotationFormatError(
-                            "Duplicate annotation for class: "+klass+": " + a);
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Parses the parameter annotations described by the specified byte array.
-     * resolving constant references in the specified constant pool.
-     * The array must contain an array of annotations as described
-     * in the RuntimeVisibleParameterAnnotations_attribute:
-     *
-     *    u1 num_parameters;
-     *    {
-     *        u2 num_annotations;
-     *        annotation annotations[num_annotations];
-     *    } parameter_annotations[num_parameters];
-     *
-     * Unlike parseAnnotations, rawAnnotations must not be null!
-     * A null value must be handled by the caller.  This is so because
-     * we cannot determine the number of parameters if rawAnnotations
-     * is null.  Also, the caller should check that the number
-     * of parameters indicated by the return value of this method
-     * matches the actual number of method parameters.  A mismatch
-     * indicates that an AnnotationFormatError should be thrown.
-     *
-     * @throws AnnotationFormatError if an annotation is found to be
-     *         malformed.
-     */
-    public static Annotation[][] parseParameterAnnotations(
-                    byte[] rawAnnotations,
-                    ConstantPool constPool,
-                    Class<?> container) {
-        try {
-            return parseParameterAnnotations2(rawAnnotations, constPool, container);
-        } catch(BufferUnderflowException e) {
-            throw new AnnotationFormatError(
-                "Unexpected end of parameter annotations.");
-        } catch(IllegalArgumentException e) {
-            // Type mismatch in constant pool
-            throw new AnnotationFormatError(e);
-        }
-    }
-
-    private static Annotation[][] parseParameterAnnotations2(
-                    byte[] rawAnnotations,
-                    ConstantPool constPool,
-                    Class<?> container) {
-        ByteBuffer buf = ByteBuffer.wrap(rawAnnotations);
-        int numParameters = buf.get() & 0xFF;
-        Annotation[][] result = new Annotation[numParameters][];
-
-        for (int i = 0; i < numParameters; i++) {
-            int numAnnotations = buf.getShort() & 0xFFFF;
-            List<Annotation> annotations =
-                new ArrayList<Annotation>(numAnnotations);
-            for (int j = 0; j < numAnnotations; j++) {
-                Annotation a = parseAnnotation(buf, constPool, container, false);
-                if (a != null) {
-                    AnnotationType type = AnnotationType.getInstance(
-                                              a.annotationType());
-                    if (type.retention() == RetentionPolicy.RUNTIME)
-                        annotations.add(a);
-                }
-            }
-            result[i] = annotations.toArray(EMPTY_ANNOTATIONS_ARRAY);
-        }
-        return result;
-    }
-
-    private static final Annotation[] EMPTY_ANNOTATIONS_ARRAY =
-                    new Annotation[0];
-
-    /**
-     * Parses the annotation at the current position in the specified
-     * byte buffer, resolving constant references in the specified constant
-     * pool.  The cursor of the byte buffer must point to an "annotation
-     * structure" as described in the RuntimeVisibleAnnotations_attribute:
-     *
-     * annotation {
-     *    u2    type_index;
-     *       u2    num_member_value_pairs;
-     *       {    u2    member_name_index;
-     *             member_value value;
-     *       }    member_value_pairs[num_member_value_pairs];
-     *    }
-     * }
-     *
-     * Returns the annotation, or null if the annotation's type cannot
-     * be found by the VM, or is not a valid annotation type.
-     *
-     * @param exceptionOnMissingAnnotationClass if true, throw
-     * TypeNotPresentException if a referenced annotation type is not
-     * available at runtime
-     */
-    private static Annotation parseAnnotation(ByteBuffer buf,
-                                              ConstantPool constPool,
-                                              Class<?> container,
-                                              boolean exceptionOnMissingAnnotationClass) {
-        int typeIndex = buf.getShort() & 0xFFFF;
-        Class<? extends Annotation> annotationClass = null;
-        String sig = "[unknown]";
-        try {
-            try {
-                sig = constPool.getUTF8At(typeIndex);
-                annotationClass = (Class<? extends Annotation>)parseSig(sig, container);
-            } catch (IllegalArgumentException ex) {
-                // support obsolete early jsr175 format class files
-                annotationClass = constPool.getClassAt(typeIndex);
-            }
-        } catch (NoClassDefFoundError e) {
-            if (exceptionOnMissingAnnotationClass)
-                // note: at this point sig is "[unknown]" or VM-style
-                // name instead of a binary name
-                throw new TypeNotPresentException(sig, e);
-            skipAnnotation(buf, false);
-            return null;
-        }
-        catch (TypeNotPresentException e) {
-            if (exceptionOnMissingAnnotationClass)
-                throw e;
-            skipAnnotation(buf, false);
-            return null;
-        }
-        AnnotationType type = null;
-        try {
-            type = AnnotationType.getInstance(annotationClass);
-        } catch (IllegalArgumentException e) {
-            skipAnnotation(buf, false);
-            return null;
-        }
-
-        Map<String, Class<?>> memberTypes = type.memberTypes();
-        Map<String, Object> memberValues =
-            new LinkedHashMap<String, Object>(type.memberDefaults());
-
-        int numMembers = buf.getShort() & 0xFFFF;
-        for (int i = 0; i < numMembers; i++) {
-            int memberNameIndex = buf.getShort() & 0xFFFF;
-            String memberName = constPool.getUTF8At(memberNameIndex);
-            Class<?> memberType = memberTypes.get(memberName);
-
-            if (memberType == null) {
-                // Member is no longer present in annotation type; ignore it
-                skipMemberValue(buf);
-            } else {
-                Object value = parseMemberValue(memberType, buf, constPool, container);
-                if (value instanceof AnnotationTypeMismatchExceptionProxy)
-                    ((AnnotationTypeMismatchExceptionProxy) value).
-                        setMember(type.members().get(memberName));
-                memberValues.put(memberName, value);
-            }
-        }
-        return annotationForMap(annotationClass, memberValues);
-    }
-
-    /**
-     * Returns an annotation of the given type backed by the given
-     * member -> value map.
-     */
-    public static Annotation annotationForMap(
-        Class<? extends Annotation> type, Map<String, Object> memberValues)
-    {
-        return (Annotation) Proxy.newProxyInstance(
-            type.getClassLoader(), new Class[] { type },
-            new AnnotationInvocationHandler(type, memberValues));
-    }
-
-    /**
-     * Parses the annotation member value at the current position in the
-     * specified byte buffer, resolving constant references in the specified
-     * constant pool.  The cursor of the byte buffer must point to a
-     * "member_value structure" as described in the
-     * RuntimeVisibleAnnotations_attribute:
-     *
-     *  member_value {
-     *    u1 tag;
-     *    union {
-     *       u2   const_value_index;
-     *       {
-     *           u2   type_name_index;
-     *           u2   const_name_index;
-     *       } enum_const_value;
-     *       u2   class_info_index;
-     *       annotation annotation_value;
-     *       {
-     *           u2    num_values;
-     *           member_value values[num_values];
-     *       } array_value;
-     *    } value;
-     * }
-     *
-     * The member must be of the indicated type. If it is not, this
-     * method returns an AnnotationTypeMismatchExceptionProxy.
-     */
-    public static Object parseMemberValue(Class<?> memberType,
-                                          ByteBuffer buf,
-                                          ConstantPool constPool,
-                                          Class<?> container) {
-        Object result = null;
-        int tag = buf.get();
-        switch(tag) {
-          case 'e':
-              return parseEnumValue((Class<? extends Enum<?>>)memberType, buf, constPool, container);
-          case 'c':
-              result = parseClassValue(buf, constPool, container);
-              break;
-          case '@':
-              result = parseAnnotation(buf, constPool, container, true);
-              break;
-          case '[':
-              return parseArray(memberType, buf, constPool, container);
-          default:
-              result = parseConst(tag, buf, constPool);
-        }
-
-        if (!(result instanceof ExceptionProxy) &&
-            !memberType.isInstance(result))
-            result = new AnnotationTypeMismatchExceptionProxy(
-                result.getClass() + "[" + result + "]");
-        return result;
-    }
-
-    /**
-     * Parses the primitive or String annotation member value indicated by
-     * the specified tag byte at the current position in the specified byte
-     * buffer, resolving constant reference in the specified constant pool.
-     * The cursor of the byte buffer must point to an annotation member value
-     * of the type indicated by the specified tag, as described in the
-     * RuntimeVisibleAnnotations_attribute:
-     *
-     *       u2   const_value_index;
-     */
-    private static Object parseConst(int tag,
-                                     ByteBuffer buf, ConstantPool constPool) {
-        int constIndex = buf.getShort() & 0xFFFF;
-        switch(tag) {
-          case 'B':
-            return Byte.valueOf((byte) constPool.getIntAt(constIndex));
-          case 'C':
-            return Character.valueOf((char) constPool.getIntAt(constIndex));
-          case 'D':
-            return Double.valueOf(constPool.getDoubleAt(constIndex));
-          case 'F':
-            return Float.valueOf(constPool.getFloatAt(constIndex));
-          case 'I':
-            return Integer.valueOf(constPool.getIntAt(constIndex));
-          case 'J':
-            return Long.valueOf(constPool.getLongAt(constIndex));
-          case 'S':
-            return Short.valueOf((short) constPool.getIntAt(constIndex));
-          case 'Z':
-            return Boolean.valueOf(constPool.getIntAt(constIndex) != 0);
-          case 's':
-            return constPool.getUTF8At(constIndex);
-          default:
-            throw new AnnotationFormatError(
-                "Invalid member-value tag in annotation: " + tag);
-        }
-    }
-
-    /**
-     * Parses the Class member value at the current position in the
-     * specified byte buffer, resolving constant references in the specified
-     * constant pool.  The cursor of the byte buffer must point to a "class
-     * info index" as described in the RuntimeVisibleAnnotations_attribute:
-     *
-     *       u2   class_info_index;
-     */
-    private static Object parseClassValue(ByteBuffer buf,
-                                          ConstantPool constPool,
-                                          Class<?> container) {
-        int classIndex = buf.getShort() & 0xFFFF;
-        try {
-            try {
-                String sig = constPool.getUTF8At(classIndex);
-                return parseSig(sig, container);
-            } catch (IllegalArgumentException ex) {
-                // support obsolete early jsr175 format class files
-                return constPool.getClassAt(classIndex);
-            }
-        } catch (NoClassDefFoundError e) {
-            return new TypeNotPresentExceptionProxy("[unknown]", e);
-        }
-        catch (TypeNotPresentException e) {
-            return new TypeNotPresentExceptionProxy(e.typeName(), e.getCause());
-        }
-    }
-
-    private static Class<?> parseSig(String sig, Class<?> container) {
-        if (sig.equals("V")) return void.class;
-        SignatureParser parser = SignatureParser.make();
-        TypeSignature typeSig = parser.parseTypeSig(sig);
-        GenericsFactory factory = CoreReflectionFactory.make(container, ClassScope.make(container));
-        Reifier reify = Reifier.make(factory);
-        typeSig.accept(reify);
-        Type result = reify.getResult();
-        return toClass(result);
-    }
-    static Class<?> toClass(Type o) {
-        if (o instanceof GenericArrayType)
-            return Array.newInstance(toClass(((GenericArrayType)o).getGenericComponentType()),
-                                     0)
-                .getClass();
-        return (Class)o;
-    }
-
-    /**
-     * Parses the enum constant member value at the current position in the
-     * specified byte buffer, resolving constant references in the specified
-     * constant pool.  The cursor of the byte buffer must point to a
-     * "enum_const_value structure" as described in the
-     * RuntimeVisibleAnnotations_attribute:
-     *
-     *       {
-     *           u2   type_name_index;
-     *           u2   const_name_index;
-     *       } enum_const_value;
-     */
-    private static Object parseEnumValue(Class<? extends Enum> enumType, ByteBuffer buf,
-                                         ConstantPool constPool,
-                                         Class<?> container) {
-        int typeNameIndex = buf.getShort() & 0xFFFF;
-        String typeName  = constPool.getUTF8At(typeNameIndex);
-        int constNameIndex = buf.getShort() & 0xFFFF;
-        String constName = constPool.getUTF8At(constNameIndex);
-
-        if (!typeName.endsWith(";")) {
-            // support now-obsolete early jsr175-format class files.
-            if (!enumType.getName().equals(typeName))
-            return new AnnotationTypeMismatchExceptionProxy(
-                typeName + "." + constName);
-        } else if (enumType != parseSig(typeName, container)) {
-            return new AnnotationTypeMismatchExceptionProxy(
-                typeName + "." + constName);
-        }
-
-        try {
-            return  Enum.valueOf(enumType, constName);
-        } catch(IllegalArgumentException e) {
-            return new EnumConstantNotPresentExceptionProxy(
-                (Class<? extends Enum>)enumType, constName);
-        }
-    }
-
-    /**
-     * Parses the array value at the current position in the specified byte
-     * buffer, resolving constant references in the specified constant pool.
-     * The cursor of the byte buffer must point to an array value struct
-     * as specified in the RuntimeVisibleAnnotations_attribute:
-     *
-     *       {
-     *           u2    num_values;
-     *           member_value values[num_values];
-     *       } array_value;
-     *
-     * If the array values do not match arrayType, an
-     * AnnotationTypeMismatchExceptionProxy will be returned.
-     */
-    private static Object parseArray(Class<?> arrayType,
-                                     ByteBuffer buf,
-                                     ConstantPool constPool,
-                                     Class<?> container) {
-        int length = buf.getShort() & 0xFFFF;  // Number of array components
-        Class<?> componentType = arrayType.getComponentType();
-
-        if (componentType == byte.class) {
-            return parseByteArray(length, buf, constPool);
-        } else if (componentType == char.class) {
-            return parseCharArray(length, buf, constPool);
-        } else if (componentType == double.class) {
-            return parseDoubleArray(length, buf, constPool);
-        } else if (componentType == float.class) {
-            return parseFloatArray(length, buf, constPool);
-        } else if (componentType == int.class) {
-            return parseIntArray(length, buf, constPool);
-        } else if (componentType == long.class) {
-            return parseLongArray(length, buf, constPool);
-        } else if (componentType == short.class) {
-            return parseShortArray(length, buf, constPool);
-        } else if (componentType == boolean.class) {
-            return parseBooleanArray(length, buf, constPool);
-        } else if (componentType == String.class) {
-            return parseStringArray(length, buf, constPool);
-        } else if (componentType == Class.class) {
-            return parseClassArray(length, buf, constPool, container);
-        } else if (componentType.isEnum()) {
-            return parseEnumArray(length, (Class<? extends Enum>)componentType, buf,
-                                  constPool, container);
-        } else {
-            assert componentType.isAnnotation();
-            return parseAnnotationArray(length, (Class <? extends Annotation>)componentType, buf,
-                                        constPool, container);
-        }
-    }
-
-    private static Object parseByteArray(int length,
-                                  ByteBuffer buf, ConstantPool constPool) {
-        byte[] result = new byte[length];
-        boolean typeMismatch = false;
-        int tag = 0;
-
-        for (int i = 0; i < length; i++) {
-            tag = buf.get();
-            if (tag == 'B') {
-                int index = buf.getShort() & 0xFFFF;
-                result[i] = (byte) constPool.getIntAt(index);
-            } else {
-                skipMemberValue(tag, buf);
-                typeMismatch = true;
-            }
-        }
-        return typeMismatch ? exceptionProxy(tag) : result;
-    }
-
-    private static Object parseCharArray(int length,
-                                  ByteBuffer buf, ConstantPool constPool) {
-        char[] result = new char[length];
-        boolean typeMismatch = false;
-        byte tag = 0;
-
-        for (int i = 0; i < length; i++) {
-            tag = buf.get();
-            if (tag == 'C') {
-                int index = buf.getShort() & 0xFFFF;
-                result[i] = (char) constPool.getIntAt(index);
-            } else {
-                skipMemberValue(tag, buf);
-                typeMismatch = true;
-            }
-        }
-        return typeMismatch ? exceptionProxy(tag) : result;
-    }
-
-    private static Object parseDoubleArray(int length,
-                                    ByteBuffer buf, ConstantPool constPool) {
-        double[] result = new  double[length];
-        boolean typeMismatch = false;
-        int tag = 0;
-
-        for (int i = 0; i < length; i++) {
-            tag = buf.get();
-            if (tag == 'D') {
-                int index = buf.getShort() & 0xFFFF;
-                result[i] = constPool.getDoubleAt(index);
-            } else {
-                skipMemberValue(tag, buf);
-                typeMismatch = true;
-            }
-        }
-        return typeMismatch ? exceptionProxy(tag) : result;
-    }
-
-    private static Object parseFloatArray(int length,
-                                   ByteBuffer buf, ConstantPool constPool) {
-        float[] result = new float[length];
-        boolean typeMismatch = false;
-        int tag = 0;
-
-        for (int i = 0; i < length; i++) {
-            tag = buf.get();
-            if (tag == 'F') {
-                int index = buf.getShort() & 0xFFFF;
-                result[i] = constPool.getFloatAt(index);
-            } else {
-                skipMemberValue(tag, buf);
-                typeMismatch = true;
-            }
-        }
-        return typeMismatch ? exceptionProxy(tag) : result;
-    }
-
-    private static Object parseIntArray(int length,
-                                 ByteBuffer buf, ConstantPool constPool) {
-        int[] result = new  int[length];
-        boolean typeMismatch = false;
-        int tag = 0;
-
-        for (int i = 0; i < length; i++) {
-            tag = buf.get();
-            if (tag == 'I') {
-                int index = buf.getShort() & 0xFFFF;
-                result[i] = constPool.getIntAt(index);
-            } else {
-                skipMemberValue(tag, buf);
-                typeMismatch = true;
-            }
-        }
-        return typeMismatch ? exceptionProxy(tag) : result;
-    }
-
-    private static Object parseLongArray(int length,
-                                  ByteBuffer buf, ConstantPool constPool) {
-        long[] result = new long[length];
-        boolean typeMismatch = false;
-        int tag = 0;
-
-        for (int i = 0; i < length; i++) {
-            tag = buf.get();
-            if (tag == 'J') {
-                int index = buf.getShort() & 0xFFFF;
-                result[i] = constPool.getLongAt(index);
-            } else {
-                skipMemberValue(tag, buf);
-                typeMismatch = true;
-            }
-        }
-        return typeMismatch ? exceptionProxy(tag) : result;
-    }
-
-    private static Object parseShortArray(int length,
-                                   ByteBuffer buf, ConstantPool constPool) {
-        short[] result = new short[length];
-        boolean typeMismatch = false;
-        int tag = 0;
-
-        for (int i = 0; i < length; i++) {
-            tag = buf.get();
-            if (tag == 'S') {
-                int index = buf.getShort() & 0xFFFF;
-                result[i] = (short) constPool.getIntAt(index);
-            } else {
-                skipMemberValue(tag, buf);
-                typeMismatch = true;
-            }
-        }
-        return typeMismatch ? exceptionProxy(tag) : result;
-    }
-
-    private static Object parseBooleanArray(int length,
-                                     ByteBuffer buf, ConstantPool constPool) {
-        boolean[] result = new boolean[length];
-        boolean typeMismatch = false;
-        int tag = 0;
-
-        for (int i = 0; i < length; i++) {
-            tag = buf.get();
-            if (tag == 'Z') {
-                int index = buf.getShort() & 0xFFFF;
-                result[i] = (constPool.getIntAt(index) != 0);
-            } else {
-                skipMemberValue(tag, buf);
-                typeMismatch = true;
-            }
-        }
-        return typeMismatch ? exceptionProxy(tag) : result;
-    }
-
-    private static Object parseStringArray(int length,
-                                    ByteBuffer buf,  ConstantPool constPool) {
-        String[] result = new String[length];
-        boolean typeMismatch = false;
-        int tag = 0;
-
-        for (int i = 0; i < length; i++) {
-            tag = buf.get();
-            if (tag == 's') {
-                int index = buf.getShort() & 0xFFFF;
-                result[i] = constPool.getUTF8At(index);
-            } else {
-                skipMemberValue(tag, buf);
-                typeMismatch = true;
-            }
-        }
-        return typeMismatch ? exceptionProxy(tag) : result;
-    }
-
-    private static Object parseClassArray(int length,
-                                          ByteBuffer buf,
-                                          ConstantPool constPool,
-                                          Class<?> container) {
-        Object[] result = new Class<?>[length];
-        boolean typeMismatch = false;
-        int tag = 0;
-
-        for (int i = 0; i < length; i++) {
-            tag = buf.get();
-            if (tag == 'c') {
-                result[i] = parseClassValue(buf, constPool, container);
-            } else {
-                skipMemberValue(tag, buf);
-                typeMismatch = true;
-            }
-        }
-        return typeMismatch ? exceptionProxy(tag) : result;
-    }
-
-    private static Object parseEnumArray(int length, Class<? extends Enum> enumType,
-                                         ByteBuffer buf,
-                                         ConstantPool constPool,
-                                         Class<?> container) {
-        Object[] result = (Object[]) Array.newInstance(enumType, length);
-        boolean typeMismatch = false;
-        int tag = 0;
-
-        for (int i = 0; i < length; i++) {
-            tag = buf.get();
-            if (tag == 'e') {
-                result[i] = parseEnumValue(enumType, buf, constPool, container);
-            } else {
-                skipMemberValue(tag, buf);
-                typeMismatch = true;
-            }
-        }
-        return typeMismatch ? exceptionProxy(tag) : result;
-    }
-
-    private static Object parseAnnotationArray(int length,
-                                               Class<? extends Annotation> annotationType,
-                                               ByteBuffer buf,
-                                               ConstantPool constPool,
-                                               Class<?> container) {
-        Object[] result = (Object[]) Array.newInstance(annotationType, length);
-        boolean typeMismatch = false;
-        int tag = 0;
-
-        for (int i = 0; i < length; i++) {
-            tag = buf.get();
-            if (tag == '@') {
-                result[i] = parseAnnotation(buf, constPool, container, true);
-            } else {
-                skipMemberValue(tag, buf);
-                typeMismatch = true;
-            }
-        }
-        return typeMismatch ? exceptionProxy(tag) : result;
-    }
-
-    /**
-     * Return an appropriate exception proxy for a mismatching array
-     * annotation where the erroneous array has the specified tag.
-     */
-    private static ExceptionProxy exceptionProxy(int tag) {
-        return new AnnotationTypeMismatchExceptionProxy(
-            "Array with component tag: " + tag);
-    }
-
-    /**
-     * Skips the annotation at the current position in the specified
-     * byte buffer.  The cursor of the byte buffer must point to
-     * an "annotation structure" OR two bytes into an annotation
-     * structure (i.e., after the type index).
-     *
-     * @parameter complete true if the byte buffer points to the beginning
-     *     of an annotation structure (rather than two bytes in).
-     */
-    private static void skipAnnotation(ByteBuffer buf, boolean complete) {
-        if (complete)
-            buf.getShort();   // Skip type index
-        int numMembers = buf.getShort() & 0xFFFF;
-        for (int i = 0; i < numMembers; i++) {
-            buf.getShort();   // Skip memberNameIndex
-            skipMemberValue(buf);
-        }
-    }
-
-    /**
-     * Skips the annotation member value at the current position in the
-     * specified byte buffer.  The cursor of the byte buffer must point to a
-     * "member_value structure."
-     */
-    private static void skipMemberValue(ByteBuffer buf) {
-        int tag = buf.get();
-        skipMemberValue(tag, buf);
-    }
-
-    /**
-     * Skips the annotation member value at the current position in the
-     * specified byte buffer.  The cursor of the byte buffer must point
-     * immediately after the tag in a "member_value structure."
-     */
-    private static void skipMemberValue(int tag, ByteBuffer buf) {
-        switch(tag) {
-          case 'e': // Enum value
-            buf.getInt();  // (Two shorts, actually.)
-            break;
-          case '@':
-            skipAnnotation(buf, true);
-            break;
-          case '[':
-            skipArray(buf);
-            break;
-          default:
-            // Class, primitive, or String
-            buf.getShort();
-        }
-    }
-
-    /**
-     * Skips the array value at the current position in the specified byte
-     * buffer.  The cursor of the byte buffer must point to an array value
-     * struct.
-     */
-    private static void skipArray(ByteBuffer buf) {
-        int length = buf.getShort() & 0xFFFF;
-        for (int i = 0; i < length; i++)
-            skipMemberValue(buf);
-    }
-
-    /*
-     * This method converts the annotation map returned by the parseAnnotations()
-     * method to an array.  It is called by Field.getDeclaredAnnotations(),
-     * Method.getDeclaredAnnotations(), and Constructor.getDeclaredAnnotations().
-     * This avoids the reflection classes to load the Annotation class until
-     * it is needed.
-     */
-    private static final Annotation[] EMPTY_ANNOTATION_ARRAY = new Annotation[0];
-    public static Annotation[] toArray(Map<Class<? extends Annotation>, Annotation> annotations) {
-        return annotations.values().toArray(EMPTY_ANNOTATION_ARRAY);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/annotation/AnnotationTypeMismatchExceptionProxy.java b/ojluni/src/main/java/sun/reflect/annotation/AnnotationTypeMismatchExceptionProxy.java
deleted file mode 100755
index c69fe48..0000000
--- a/ojluni/src/main/java/sun/reflect/annotation/AnnotationTypeMismatchExceptionProxy.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2004, 2011, 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.
- */
-
-package sun.reflect.annotation;
-import java.lang.annotation.*;
-import java.lang.reflect.Method;
-
-/**
- * ExceptionProxy for AnnotationTypeMismatchException.
- *
- * @author  Josh Bloch
- * @since   1.5
- */
-class AnnotationTypeMismatchExceptionProxy extends ExceptionProxy {
-    private static final long serialVersionUID = 7844069490309503934L;
-    private Method member;
-    private String foundType;
-
-    /**
-     * It turns out to be convenient to construct these proxies in
-     * two stages.  Since this is a private implementation class, we
-     * permit ourselves this liberty even though it's normally a very
-     * bad idea.
-     */
-    AnnotationTypeMismatchExceptionProxy(String foundType) {
-        this.foundType = foundType;
-    }
-
-    AnnotationTypeMismatchExceptionProxy setMember(Method member) {
-        this.member = member;
-        return this;
-    }
-
-    protected RuntimeException generateException() {
-        return new AnnotationTypeMismatchException(member, foundType);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/annotation/EnumConstantNotPresentExceptionProxy.java b/ojluni/src/main/java/sun/reflect/annotation/EnumConstantNotPresentExceptionProxy.java
deleted file mode 100755
index 5193987..0000000
--- a/ojluni/src/main/java/sun/reflect/annotation/EnumConstantNotPresentExceptionProxy.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2004, 2011, 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.
- */
-
-package sun.reflect.annotation;
-import java.lang.annotation.*;
-
-/**
- * ExceptionProxy for EnumConstantNotPresentException.
- *
- * @author  Josh Bloch
- * @since   1.5
- */
-public class EnumConstantNotPresentExceptionProxy extends ExceptionProxy {
-    private static final long serialVersionUID = -604662101303187330L;
-    Class<? extends Enum> enumType;
-    String constName;
-
-    public EnumConstantNotPresentExceptionProxy(Class<? extends Enum> enumType,
-                                                String constName) {
-        this.enumType = enumType;
-        this.constName = constName;
-    }
-
-    protected RuntimeException generateException() {
-        return new EnumConstantNotPresentException(enumType, constName);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/annotation/ExceptionProxy.java b/ojluni/src/main/java/sun/reflect/annotation/ExceptionProxy.java
deleted file mode 100755
index 0fa1806..0000000
--- a/ojluni/src/main/java/sun/reflect/annotation/ExceptionProxy.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2004, 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.
- */
-
-package sun.reflect.annotation;
-
-/**
- * An instance of this class is stored in an AnnotationInvocationHandler's
- * "memberValues" map in lieu of a value for an annotation member that
- * cannot be returned due to some exceptional condition (typically some
- * form of illegal evolution of the annotation class).  The ExceptionProxy
- * instance describes the exception that the dynamic proxy should throw if
- * it is queried for this member.
- *
- * @author  Josh Bloch
- * @since   1.5
- */
-public abstract class ExceptionProxy implements java.io.Serializable {
-    protected abstract RuntimeException generateException();
-}
diff --git a/ojluni/src/main/java/sun/reflect/annotation/TypeNotPresentExceptionProxy.java b/ojluni/src/main/java/sun/reflect/annotation/TypeNotPresentExceptionProxy.java
deleted file mode 100755
index 76cba1d..0000000
--- a/ojluni/src/main/java/sun/reflect/annotation/TypeNotPresentExceptionProxy.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2004, 2011, 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.
- */
-
-package sun.reflect.annotation;
-import java.lang.annotation.*;
-
-/**
- * ExceptionProxy for TypeNotPresentException.
- *
- * @author  Josh Bloch
- * @since   1.5
- */
-public class TypeNotPresentExceptionProxy extends ExceptionProxy {
-    private static final long serialVersionUID = 5565925172427947573L;
-    String typeName;
-    Throwable cause;
-
-    public TypeNotPresentExceptionProxy(String typeName, Throwable cause) {
-        this.typeName = typeName;
-        this.cause = cause;
-    }
-
-    protected RuntimeException generateException() {
-        return new TypeNotPresentException(typeName, cause);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/factory/CoreReflectionFactory.java b/ojluni/src/main/java/sun/reflect/generics/factory/CoreReflectionFactory.java
deleted file mode 100755
index 71a34bb..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/factory/CoreReflectionFactory.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package sun.reflect.generics.factory;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.GenericDeclaration;
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.lang.reflect.WildcardType;
-
-
-import sun.reflect.generics.reflectiveObjects.*;
-import sun.reflect.generics.scope.Scope;
-import sun.reflect.generics.tree.FieldTypeSignature;
-
-
-/**
- * Factory for reflective generic type objects for use by
- * core reflection (java.lang.reflect).
- */
-public class CoreReflectionFactory implements GenericsFactory {
-    private GenericDeclaration decl;
-    private Scope scope;
-
-    private CoreReflectionFactory(GenericDeclaration d, Scope s) {
-        decl = d;
-        scope = s;
-    }
-
-    private GenericDeclaration getDecl(){ return decl;}
-
-    private Scope getScope(){ return scope;}
-
-
-    private ClassLoader getDeclsLoader() {
-        if (decl instanceof Class) {return ((Class) decl).getClassLoader();}
-        if (decl instanceof Method) {
-            return ((Method) decl).getDeclaringClass().getClassLoader();
-        }
-        assert decl instanceof Constructor : "Constructor expected";
-        return ((Constructor) decl).getDeclaringClass().getClassLoader();
-
-    }
-
-    /**
-     * Factory for this class. Returns an instance of
-     * <tt>CoreReflectionFactory</tt> for the declaration and scope
-     * provided.
-     * This factory will produce reflective objects of the appropriate
-     * kind. Classes produced will be those that would be loaded by the
-     * defining class loader of the declaration <tt>d</tt> (if <tt>d</tt>
-     * is a type declaration, or by the defining loader of the declaring
-     * class of <tt>d</tt>  otherwise.
-     * <p> Type variables will be created or lookup as necessary in the
-     * scope <tt> s</tt>.
-     * @param d - the generic declaration (class, interface, method or
-     * constructor) that thsi factory services
-     * @param s  the scope in which the factory will allocate and search for
-     * type variables
-     * @return an instance of <tt>CoreReflectionFactory</tt>
-     */
-    public static CoreReflectionFactory make(GenericDeclaration d, Scope s) {
-        return new CoreReflectionFactory(d, s);
-    }
-
-    public TypeVariable<?> makeTypeVariable(String name,
-                                            FieldTypeSignature[] bounds){
-        return TypeVariableImpl.make(getDecl(), name, bounds, this);
-    }
-
-    public WildcardType makeWildcard(FieldTypeSignature[] ubs,
-                                     FieldTypeSignature[] lbs) {
-        return WildcardTypeImpl.make(ubs, lbs, this);
-    }
-
-    public ParameterizedType makeParameterizedType(Type declaration,
-                                                   Type[] typeArgs,
-                                                   Type owner) {
-        return ParameterizedTypeImpl.make((Class<?>) declaration,
-                                          typeArgs, owner);
-    }
-
-    public TypeVariable<?> findTypeVariable(String name){
-        return getScope().lookup(name);
-    }
-
-    public Type makeNamedType(String name){
-        try {return Class.forName(name, false, // don't initialize
-                                  getDeclsLoader());}
-        catch (ClassNotFoundException c) {
-            throw new TypeNotPresentException(name, c);
-        }
-    }
-
-    public Type makeArrayType(Type componentType){
-        if (componentType instanceof Class<?>)
-            return Array.newInstance((Class<?>) componentType, 0).getClass();
-        else
-            return GenericArrayTypeImpl.make(componentType);
-    }
-
-    public Type makeByte(){return byte.class;}
-    public Type makeBool(){return boolean.class;}
-    public Type makeShort(){return short.class;}
-    public Type makeChar(){return char.class;}
-    public Type makeInt(){return int.class;}
-    public Type makeLong(){return long.class;}
-    public Type makeFloat(){return float.class;}
-    public Type makeDouble(){return double.class;}
-
-    public Type makeVoid(){return void.class;}
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/factory/GenericsFactory.java b/ojluni/src/main/java/sun/reflect/generics/factory/GenericsFactory.java
deleted file mode 100755
index 9f32d3d..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/factory/GenericsFactory.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.
- */
-
-package sun.reflect.generics.factory;
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.lang.reflect.WildcardType;
-import sun.reflect.generics.tree.FieldTypeSignature;
-
-/**
- * A factory interface for reflective objects representing generic types.
- * Implementors (such as core reflection or JDI, or possibly javadoc
- * will manufacture instances of (potentially) different classes
- * in response to invocations of the methods described here.
- * <p> The intent is that reflective systems use these factories to
- * produce generic type information on demand.
- * Certain components of such reflective systems can be independent
- * of a specific implementation by using this interface. For example,
- * repositories of generic type information are initialized with a
- * factory conforming to this interface, and use it to generate the
- * tpe information they are required to provide. As a result, such
- * repository code can be shared across different reflective systems.
- */
-public interface GenericsFactory {
-    /**
-     * Returns a new type variable declaration. Note that <tt>name</tt>
-     * may be empty (but not <tt>null</tt>). If <tt>bounds</tt> is
-     * empty, a bound of <tt>java.lang.Object</tt> is used.
-     * @param name The name of the type variable
-     * @param bounds An array of abstract syntax trees representing
-     * the upper bound(s) on the type variable being declared
-     * @return a new type variable declaration
-     * @throws NullPointerException - if any of the actual parameters
-     * or any of the elements of <tt>bounds</tt> are <tt>null</tt>.
-     */
-    TypeVariable<?> makeTypeVariable(String name,
-                                     FieldTypeSignature[] bounds);
-    /**
-     * Return an instance of the <tt>ParameterizedType</tt> interface
-     * that corresponds to a generic type instantiation of the
-     * generic declaration <tt>declaration</tt> with actual type arguments
-     * <tt>typeArgs</tt>.
-     * If <tt>owner</tt> is <tt>null</tt>, the declaring class of
-     * <tt>declaration</tt> is used as the owner of this parameterized
-     * type.
-     * <p> This method throws a MalformedParameterizedTypeException
-     * under the following circumstances:
-     * If the type declaration does not represent a generic declaration
-     * (i.e., it is not an instance of <tt>GenericDeclaration</tt>).
-     * If the number of actual type arguments (i.e., the size of the
-     * array <tt>typeArgs</tt>) does not correspond to the number of
-     * formal type arguments.
-     * If any of the actual type arguments is not an instance of the
-     * bounds on the corresponding formal.
-     * @param declaration - the generic type declaration that is to be
-     * instantiated
-     * @param typeArgs - the list of actual type arguments
-     * @return - a parameterized type representing the instantiation
-     * of the declaration with the actual type arguments
-     * @throws MalformedParameterizedTypeException - if the instantiation
-     * is invalid
-     * @throws NullPointerException - if any of <tt>declaration</tt>
-     * , <tt>typeArgs</tt>
-     * or any of the elements of <tt>typeArgs</tt> are <tt>null</tt>
-     */
-    ParameterizedType makeParameterizedType(Type declaration,
-                                            Type[] typeArgs,
-                                            Type owner);
-
-    /**
-     * Returns the type variable with name <tt>name</tt>, if such
-     * a type variable is declared in the
-     * scope used to create this factory.
-     * Returns <tt>null</tt> otherwise.
-     * @param name - the name of the type variable to search for
-     * @return - the type variable with name <tt>name</tt>, or <tt>null</tt>
-     * @throws  NullPointerException - if any of actual parameters are
-     * <tt>null</tt>
-     */
-    TypeVariable<?> findTypeVariable(String name);
-
-    /**
-     * Returns a new wildcard type variable. If
-     * <tt>ubs</tt> is empty, a bound of <tt>java.lang.Object</tt> is used.
-     * @param ubs An array of abstract syntax trees representing
-     * the upper bound(s) on the type variable being declared
-     * @param lbs An array of abstract syntax trees representing
-     * the lower bound(s) on the type variable being declared
-     * @return a new wildcard type variable
-     * @throws NullPointerException - if any of the actual parameters
-     * or any of the elements of <tt>ubs</tt> or <tt>lbs</tt>are
-     * <tt>null</tt>
-     */
-    WildcardType makeWildcard(FieldTypeSignature[] ubs,
-                              FieldTypeSignature[] lbs);
-
-    Type makeNamedType(String name);
-
-    /**
-     * Returns a (possibly generic) array type.
-     * If the component type is a parameterized type, it must
-     * only have unbounded wildcard arguemnts, otherwise
-     * a MalformedParameterizedTypeException is thrown.
-     * @param componentType - the component type of the array
-     * @return a (possibly generic) array type.
-     * @throws MalformedParameterizedTypeException if <tt>componentType</tt>
-     * is a parameterized type with non-wildcard type arguments
-     * @throws NullPointerException - if any of the actual parameters
-     * are <tt>null</tt>
-     */
-    Type makeArrayType(Type componentType);
-
-    /**
-     * Returns the reflective representation of type <tt>byte</tt>.
-     * @return the reflective representation of type <tt>byte</tt>.
-     */
-    Type makeByte();
-
-    /**
-     * Returns the reflective representation of type <tt>boolean</tt>.
-     * @return the reflective representation of type <tt>boolean</tt>.
-     */
-    Type makeBool();
-
-    /**
-     * Returns the reflective representation of type <tt>short</tt>.
-     * @return the reflective representation of type <tt>short</tt>.
-     */
-    Type makeShort();
-
-    /**
-     * Returns the reflective representation of type <tt>char</tt>.
-     * @return the reflective representation of type <tt>char</tt>.
-     */
-    Type makeChar();
-
-    /**
-     * Returns the reflective representation of type <tt>int</tt>.
-     * @return the reflective representation of type <tt>int</tt>.
-     */
-    Type makeInt();
-
-    /**
-     * Returns the reflective representation of type <tt>long</tt>.
-     * @return the reflective representation of type <tt>long</tt>.
-     */
-    Type makeLong();
-
-    /**
-     * Returns the reflective representation of type <tt>float</tt>.
-     * @return the reflective representation of type <tt>float</tt>.
-     */
-    Type makeFloat();
-
-    /**
-     * Returns the reflective representation of type <tt>double</tt>.
-     * @return the reflective representation of type <tt>double</tt>.
-     */
-    Type makeDouble();
-
-    /**
-     * Returns the reflective representation of <tt>void</tt>.
-     * @return the reflective representation of <tt>void</tt>.
-     */
-    Type makeVoid();
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/parser/SignatureParser.java b/ojluni/src/main/java/sun/reflect/generics/parser/SignatureParser.java
deleted file mode 100755
index 3800dfd..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/parser/SignatureParser.java
+++ /dev/null
@@ -1,652 +0,0 @@
-/*
- * Copyright (c) 2003, 2011, 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.
- */
-
-package sun.reflect.generics.parser;
-
-import java.lang.reflect.GenericSignatureFormatError;
-import java.util.*;
-import sun.reflect.generics.tree.*;
-
-/**
- * Parser for type signatures, as defined in the Java Virtual
- * Machine Specification (JVMS) chapter 4.
- * Converts the signatures into an abstract syntax tree (AST) representation.
- * See the package sun.reflect.generics.tree for details of the AST.
- */
-public class SignatureParser {
-    // The input is conceptually a character stream (though currently it's
-    // a string). This is slightly different than traditional parsers,
-    // because there is no lexical scanner performing tokenization.
-    // Having a separate tokenizer does not fit with the nature of the
-    // input format.
-    // Other than the absence of a tokenizer, this parser is a classic
-    // recursive descent parser. Its structure corresponds as closely
-    // as possible to the grammar in the JVMS.
-    //
-    // A note on asserts vs. errors: The code contains assertions
-    // in situations that should never occur. An assertion failure
-    // indicates a failure of the parser logic. A common pattern
-    // is an assertion that the current input is a particular
-    // character. This is often paired with a separate check
-    // that this is the case, which seems redundant. For example:
-    //
-    // assert(current() != x);
-    // if (current != x {error("expected an x");
-    //
-    // where x is some character constant.
-    // The assertion indicates, that, as currently written,
-    // the code should never reach this point unless the input is an
-    // x. On the other hand, the test is there to check the legality
-    // of the input wrt to a given production. It may be that at a later
-    // time the code might be called directly, and if the input is
-    // invalid, the parser should flag an error in accordance
-    // with its logic.
-
-    private char[] input; // the input signature
-    private int index = 0; // index into the input
-    // used to mark end of input
-    private static final char EOI = ':';
-    private static final boolean DEBUG = false;
-
-    // private constructor - enforces use of static factory
-    private SignatureParser(){}
-
-    // Utility methods.
-
-    // Most parsing routines use the following routines to access the
-    // input stream, and advance it as necessary.
-    // This makes it easy to adapt the parser to operate on streams
-    // of various kinds as well as strings.
-
-    // returns current element of the input and advances the input
-    private char getNext(){
-        assert(index <= input.length);
-        try {
-            return input[index++];
-        } catch (ArrayIndexOutOfBoundsException e) { return EOI;}
-    }
-
-    // returns current element of the input
-    private char current(){
-        assert(index <= input.length);
-        try {
-            return input[index];
-        } catch (ArrayIndexOutOfBoundsException e) { return EOI;}
-    }
-
-    // advance the input
-    private void advance(){
-        assert(index <= input.length);
-        index++;
-    }
-
-    // For debugging, prints current character to the end of the input.
-    private String remainder() {
-        return new String(input, index, input.length-index);
-    }
-
-    // Match c against a "set" of characters
-    private boolean matches(char c, char... set) {
-        for (char e : set) {
-            if (c == e) return true;
-        }
-        return false;
-    }
-
-    // Error handling routine. Encapsulates error handling.
-    // Takes a string error message as argument.
-    // Currently throws a GenericSignatureFormatError.
-
-    private Error error(String errorMsg) {
-        if (DEBUG)
-            System.out.println("Signature Parse error: " + errorMsg +
-                               "\n\tRemaining input: " + remainder());
-        return new GenericSignatureFormatError();
-    }
-
-    /**
-     * Verify the parse has made forward progress; throw an exception
-     * if no progress.
-     */
-    private void progress(int startingPosition) {
-        if (index <= startingPosition)
-            throw error("Failure to make progress!");
-    }
-
-    /**
-     * Static factory method. Produces a parser instance.
-     * @return an instance of <tt>SignatureParser</tt>
-     */
-    public static SignatureParser make() {
-        return new SignatureParser();
-    }
-
-    /**
-     * Parses a class signature (as defined in the JVMS, chapter 4)
-     * and produces an abstract syntax tree representing it.
-     * @param s a string representing the input class signature
-     * @return An abstract syntax tree for a class signature
-     * corresponding to the input string
-     * @throws GenericSignatureFormatError if the input is not a valid
-     * class signature
-     */
-    public ClassSignature parseClassSig(String s) {
-        if (DEBUG) System.out.println("Parsing class sig:" + s);
-        input = s.toCharArray();
-        return parseClassSignature();
-    }
-
-    /**
-     * Parses a method signature (as defined in the JVMS, chapter 4)
-     * and produces an abstract syntax tree representing it.
-     * @param s a string representing the input method signature
-     * @return An abstract syntax tree for a method signature
-     * corresponding to the input string
-     * @throws GenericSignatureFormatError if the input is not a valid
-     * method signature
-     */
-    public MethodTypeSignature parseMethodSig(String s) {
-        if (DEBUG) System.out.println("Parsing method sig:" + s);
-        input = s.toCharArray();
-        return parseMethodTypeSignature();
-    }
-
-
-    /**
-     * Parses a type signature
-     * and produces an abstract syntax tree representing it.
-     *
-     * @param s a string representing the input type signature
-     * @return An abstract syntax tree for a type signature
-     * corresponding to the input string
-     * @throws GenericSignatureFormatError if the input is not a valid
-     * type signature
-     */
-    public TypeSignature parseTypeSig(String s) {
-        if (DEBUG) System.out.println("Parsing type sig:" + s);
-        input = s.toCharArray();
-        return parseTypeSignature();
-    }
-
-    // Parsing routines.
-    // As a rule, the parsing routines access the input using the
-    // utilities current(), getNext() and/or advance().
-    // The convention is that when a parsing routine is invoked
-    // it expects the current input to be the first character it should parse
-    // and when it completes parsing, it leaves the input at the first
-    // character after the input parses.
-
-    /*
-     * Note on grammar conventions: a trailing "*" matches zero or
-     * more occurrences, a trailing "+" matches one or more occurrences,
-     * "_opt" indicates an optional component.
-     */
-
-    /**
-     * ClassSignature:
-     *     FormalTypeParameters_opt SuperclassSignature SuperinterfaceSignature*
-     */
-    private ClassSignature parseClassSignature() {
-        // parse a class signature based on the implicit input.
-        assert(index == 0);
-        return ClassSignature.make(parseZeroOrMoreFormalTypeParameters(),
-                                   parseClassTypeSignature(), // Only rule for SuperclassSignature
-                                   parseSuperInterfaces());
-    }
-
-    private FormalTypeParameter[] parseZeroOrMoreFormalTypeParameters(){
-        if (current() == '<') {
-            return parseFormalTypeParameters();
-        } else {
-            return new FormalTypeParameter[0];
-        }
-    }
-
-    /**
-     * FormalTypeParameters:
-     *     "<" FormalTypeParameter+ ">"
-     */
-    private FormalTypeParameter[] parseFormalTypeParameters(){
-        List<FormalTypeParameter> ftps =  new ArrayList<>(3);
-        assert(current() == '<'); // should not have been called at all
-        if (current() != '<') { throw error("expected '<'");}
-        advance();
-        ftps.add(parseFormalTypeParameter());
-        while (current() != '>') {
-            int startingPosition = index;
-            ftps.add(parseFormalTypeParameter());
-            progress(startingPosition);
-        }
-        advance();
-        return ftps.toArray(new FormalTypeParameter[ftps.size()]);
-    }
-
-    /**
-     * FormalTypeParameter:
-     *     Identifier ClassBound InterfaceBound*
-     */
-    private FormalTypeParameter parseFormalTypeParameter(){
-        String id = parseIdentifier();
-        FieldTypeSignature[] bs = parseBounds();
-        return FormalTypeParameter.make(id, bs);
-    }
-
-    private String parseIdentifier(){
-        StringBuilder result = new StringBuilder();
-        while (!Character.isWhitespace(current())) {
-            char c = current();
-            switch(c) {
-            case ';':
-            case '.':
-            case '/':
-            case '[':
-            case ':':
-            case '>':
-            case '<':
-                return result.toString();
-            default:{
-                result.append(c);
-                advance();
-            }
-
-            }
-        }
-        return result.toString();
-    }
-    /**
-     * FieldTypeSignature:
-     *     ClassTypeSignature
-     *     ArrayTypeSignature
-     *     TypeVariableSignature
-     */
-    private FieldTypeSignature parseFieldTypeSignature() {
-        return parseFieldTypeSignature(true);
-    }
-
-    private FieldTypeSignature parseFieldTypeSignature(boolean allowArrays) {
-        switch(current()) {
-        case 'L':
-           return parseClassTypeSignature();
-        case 'T':
-            return parseTypeVariableSignature();
-        case '[':
-            if (allowArrays)
-                return parseArrayTypeSignature();
-            else
-                throw error("Array signature not allowed here.");
-        default: throw error("Expected Field Type Signature");
-        }
-    }
-
-    /**
-     * ClassTypeSignature:
-     *     "L" PackageSpecifier_opt SimpleClassTypeSignature ClassTypeSignatureSuffix* ";"
-     */
-    private ClassTypeSignature parseClassTypeSignature(){
-        assert(current() == 'L');
-        if (current() != 'L') { throw error("expected a class type");}
-        advance();
-        List<SimpleClassTypeSignature> scts = new ArrayList<>(5);
-        scts.add(parsePackageNameAndSimpleClassTypeSignature());
-
-        parseClassTypeSignatureSuffix(scts);
-        if (current() != ';')
-            throw error("expected ';' got '" + current() + "'");
-
-        advance();
-        return ClassTypeSignature.make(scts);
-    }
-
-    /**
-     * PackageSpecifier:
-     *     Identifier "/" PackageSpecifier*
-     */
-    private SimpleClassTypeSignature parsePackageNameAndSimpleClassTypeSignature() {
-        // Parse both any optional leading PackageSpecifier as well as
-        // the following SimpleClassTypeSignature.
-
-        String id = parseIdentifier();
-
-        if (current() == '/') { // package name
-            StringBuilder idBuild = new StringBuilder(id);
-
-            while(current() == '/') {
-                advance();
-                idBuild.append(".");
-                idBuild.append(parseIdentifier());
-            }
-            id = idBuild.toString();
-        }
-
-        switch (current()) {
-        case ';':
-            return SimpleClassTypeSignature.make(id, false, new TypeArgument[0]); // all done!
-        case '<':
-            if (DEBUG) System.out.println("\t remainder: " + remainder());
-            return SimpleClassTypeSignature.make(id, false, parseTypeArguments());
-        default:
-            throw error("expected '<' or ';' but got " + current());
-        }
-    }
-
-    /**
-     * SimpleClassTypeSignature:
-     *     Identifier TypeArguments_opt
-     */
-    private SimpleClassTypeSignature parseSimpleClassTypeSignature(boolean dollar){
-        String id = parseIdentifier();
-        char c = current();
-
-        switch (c) {
-        case ';':
-        case '.':
-            return SimpleClassTypeSignature.make(id, dollar, new TypeArgument[0]) ;
-        case '<':
-            return SimpleClassTypeSignature.make(id, dollar, parseTypeArguments());
-        default:
-            throw error("expected '<' or ';' or '.', got '" + c + "'.");
-        }
-    }
-
-    /**
-     * ClassTypeSignatureSuffix:
-     *     "." SimpleClassTypeSignature
-     */
-    private void parseClassTypeSignatureSuffix(List<SimpleClassTypeSignature> scts) {
-        while (current() == '.') {
-            advance();
-            scts.add(parseSimpleClassTypeSignature(true));
-        }
-    }
-
-    private TypeArgument[] parseTypeArgumentsOpt() {
-        if (current() == '<') {return parseTypeArguments();}
-        else {return new TypeArgument[0];}
-    }
-
-    /**
-     * TypeArguments:
-     *     "<" TypeArgument+ ">"
-     */
-    private TypeArgument[] parseTypeArguments() {
-        List<TypeArgument> tas = new ArrayList<>(3);
-        assert(current() == '<');
-        if (current() != '<') { throw error("expected '<'");}
-        advance();
-        tas.add(parseTypeArgument());
-        while (current() != '>') {
-                //(matches(current(),  '+', '-', 'L', '[', 'T', '*')) {
-            tas.add(parseTypeArgument());
-        }
-        advance();
-        return tas.toArray(new TypeArgument[tas.size()]);
-    }
-
-    /**
-     * TypeArgument:
-     *     WildcardIndicator_opt FieldTypeSignature
-     *     "*"
-     */
-    private TypeArgument parseTypeArgument() {
-        FieldTypeSignature[] ub, lb;
-        ub = new FieldTypeSignature[1];
-        lb = new FieldTypeSignature[1];
-        TypeArgument[] ta = new TypeArgument[0];
-        char c = current();
-        switch (c) {
-        case '+': {
-            advance();
-            ub[0] = parseFieldTypeSignature();
-            lb[0] = BottomSignature.make(); // bottom
-            return Wildcard.make(ub, lb);
-        }
-        case '*':{
-            advance();
-            ub[0] = SimpleClassTypeSignature.make("java.lang.Object", false, ta);
-            lb[0] = BottomSignature.make(); // bottom
-            return Wildcard.make(ub, lb);
-        }
-        case '-': {
-            advance();
-            lb[0] = parseFieldTypeSignature();
-            ub[0] = SimpleClassTypeSignature.make("java.lang.Object", false, ta);
-            return Wildcard.make(ub, lb);
-        }
-        default:
-            return parseFieldTypeSignature();
-        }
-    }
-
-    /**
-     * TypeVariableSignature:
-     *     "T" Identifier ";"
-     */
-    private TypeVariableSignature parseTypeVariableSignature() {
-        assert(current() == 'T');
-        if (current() != 'T') { throw error("expected a type variable usage");}
-        advance();
-        TypeVariableSignature ts = TypeVariableSignature.make(parseIdentifier());
-        if (current() != ';') {
-            throw error("; expected in signature of type variable named" +
-                  ts.getIdentifier());
-        }
-        advance();
-        return ts;
-    }
-
-    /**
-     * ArrayTypeSignature:
-     *     "[" TypeSignature
-     */
-    private ArrayTypeSignature parseArrayTypeSignature() {
-        if (current() != '[') {throw error("expected array type signature");}
-        advance();
-        return ArrayTypeSignature.make(parseTypeSignature());
-    }
-
-    /**
-     * TypeSignature:
-     *     FieldTypeSignature
-     *     BaseType
-     */
-    private TypeSignature parseTypeSignature() {
-        switch (current()) {
-        case 'B':
-        case 'C':
-        case 'D':
-        case 'F':
-        case 'I':
-        case 'J':
-        case 'S':
-        case 'Z':
-            return parseBaseType();
-
-        default:
-            return parseFieldTypeSignature();
-        }
-    }
-
-    private BaseType parseBaseType() {
-        switch(current()) {
-        case 'B':
-            advance();
-            return ByteSignature.make();
-        case 'C':
-            advance();
-            return CharSignature.make();
-        case 'D':
-            advance();
-            return DoubleSignature.make();
-        case 'F':
-            advance();
-            return FloatSignature.make();
-        case 'I':
-            advance();
-            return IntSignature.make();
-        case 'J':
-            advance();
-            return LongSignature.make();
-        case 'S':
-            advance();
-            return ShortSignature.make();
-        case 'Z':
-            advance();
-            return BooleanSignature.make();
-        default: {
-            assert(false);
-            throw error("expected primitive type");
-        }
-        }
-    }
-
-    /**
-     * ClassBound:
-     *     ":" FieldTypeSignature_opt
-     *
-     * InterfaceBound:
-     *     ":" FieldTypeSignature
-     */
-    private FieldTypeSignature[] parseBounds() {
-        List<FieldTypeSignature> fts = new ArrayList<>(3);
-
-        if (current() == ':') {
-            advance();
-            switch(current()) {
-            case ':': // empty class bound
-                break;
-
-            default: // parse class bound
-                fts.add(parseFieldTypeSignature());
-            }
-
-            // zero or more interface bounds
-            while (current() == ':') {
-                advance();
-                fts.add(parseFieldTypeSignature());
-            }
-        } else
-            error("Bound expected");
-
-        return fts.toArray(new FieldTypeSignature[fts.size()]);
-    }
-
-    /**
-     * SuperclassSignature:
-     *     ClassTypeSignature
-     */
-    private ClassTypeSignature[] parseSuperInterfaces() {
-        List<ClassTypeSignature> cts = new ArrayList<>(5);
-        while(current() == 'L') {
-            cts.add(parseClassTypeSignature());
-        }
-        return cts.toArray(new ClassTypeSignature[cts.size()]);
-    }
-
-
-    /**
-     * MethodTypeSignature:
-     *     FormalTypeParameters_opt "(" TypeSignature* ")" ReturnType ThrowsSignature*
-     */
-    private MethodTypeSignature parseMethodTypeSignature() {
-        // Parse a method signature based on the implicit input.
-        FieldTypeSignature[] ets;
-
-        assert(index == 0);
-        return MethodTypeSignature.make(parseZeroOrMoreFormalTypeParameters(),
-                                        parseFormalParameters(),
-                                        parseReturnType(),
-                                        parseZeroOrMoreThrowsSignatures());
-    }
-
-    // "(" TypeSignature* ")"
-    private TypeSignature[] parseFormalParameters() {
-        if (current() != '(') {throw error("expected '('");}
-        advance();
-        TypeSignature[] pts = parseZeroOrMoreTypeSignatures();
-        if (current() != ')') {throw error("expected ')'");}
-        advance();
-        return pts;
-    }
-
-    // TypeSignature*
-    private TypeSignature[] parseZeroOrMoreTypeSignatures() {
-        List<TypeSignature> ts = new ArrayList<>();
-        boolean stop = false;
-        while (!stop) {
-            switch(current()) {
-            case 'B':
-            case 'C':
-            case 'D':
-            case 'F':
-            case 'I':
-            case 'J':
-            case 'S':
-            case 'Z':
-            case 'L':
-            case 'T':
-            case '[': {
-                ts.add(parseTypeSignature());
-                break;
-            }
-            default: stop = true;
-            }
-        }
-        return ts.toArray(new TypeSignature[ts.size()]);
-    }
-
-    /**
-     * ReturnType:
-     *     TypeSignature
-     *     VoidDescriptor
-     */
-    private ReturnType parseReturnType(){
-        if (current() == 'V') {
-            advance();
-            return VoidDescriptor.make();
-        } else
-            return parseTypeSignature();
-    }
-
-    // ThrowSignature*
-    private FieldTypeSignature[] parseZeroOrMoreThrowsSignatures(){
-        List<FieldTypeSignature> ets = new ArrayList<>(3);
-        while( current() == '^') {
-            ets.add(parseThrowsSignature());
-        }
-        return ets.toArray(new FieldTypeSignature[ets.size()]);
-    }
-
-    /**
-     * ThrowsSignature:
-     *     "^" ClassTypeSignature
-     *     "^" TypeVariableSignature
-     */
-    private FieldTypeSignature parseThrowsSignature() {
-        assert(current() == '^');
-        if (current() != '^') { throw error("expected throws signature");}
-        advance();
-        return parseFieldTypeSignature(false);
-    }
- }
diff --git a/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/GenericArrayTypeImpl.java b/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/GenericArrayTypeImpl.java
deleted file mode 100755
index e356a49..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/GenericArrayTypeImpl.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package sun.reflect.generics.reflectiveObjects;
-
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.Type;
-
-
-/**
- * Implementation of GenericArrayType interface for core reflection.
- */
-public class GenericArrayTypeImpl
-    implements GenericArrayType {
-    private Type genericComponentType;
-
-    // private constructor enforces use of static factory
-    private GenericArrayTypeImpl(Type ct) {
-        genericComponentType = ct;
-    }
-
-    /**
-     * Factory method.
-     * @param ct - the desired component type of the generic array type
-     * being created
-     * @return a generic array type with the desired component type
-     */
-    public static GenericArrayTypeImpl make(Type ct) {
-        return new GenericArrayTypeImpl(ct);
-    }
-
-
-    /**
-     * Returns  a <tt>Type</tt> object representing the component type
-     * of this array.
-     *
-     * @return  a <tt>Type</tt> object representing the component type
-     *     of this array
-     * @since 1.5
-     */
-    public Type getGenericComponentType() {
-        return genericComponentType; // return cached component type
-    }
-
-    public String toString() {
-        Type componentType = getGenericComponentType();
-        StringBuilder sb = new StringBuilder();
-
-        if (componentType instanceof Class)
-            sb.append(((Class)componentType).getName() );
-        else
-            sb.append(componentType.toString());
-        sb.append("[]");
-        return sb.toString();
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (o instanceof GenericArrayType) {
-            GenericArrayType that = (GenericArrayType) o;
-
-            Type thatComponentType = that.getGenericComponentType();
-            return genericComponentType == null ?
-                thatComponentType == null :
-                genericComponentType.equals(thatComponentType);
-        } else
-            return false;
-    }
-
-    @Override
-    public int hashCode() {
-        return (genericComponentType == null) ?
-            0:
-            genericComponentType.hashCode();
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/LazyReflectiveObjectGenerator.java b/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/LazyReflectiveObjectGenerator.java
deleted file mode 100755
index 7cedafd..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/LazyReflectiveObjectGenerator.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.reflectiveObjects;
-
-import sun.reflect.generics.factory.GenericsFactory;
-import sun.reflect.generics.visitor.Reifier;
-
-
-/**
- * Common infrastructure for things that lazily generate reflective generics
- * objects.
- * <p> In all these cases, one needs produce a visitor that will, on demand,
- * traverse the stored AST(s) and reify them into reflective objects.
- * The visitor needs to be initialized with a factory, which will be
- * provided when the instance is initialized.
- * The factory should be cached.
- *
-*/
-public abstract class LazyReflectiveObjectGenerator {
-    private GenericsFactory factory; // cached factory
-
-    protected LazyReflectiveObjectGenerator(GenericsFactory f) {
-        factory = f;
-    }
-
-    // accessor for factory
-    private GenericsFactory getFactory() {
-        return factory;
-    }
-
-    // produce a reifying visitor (could this be typed as a TypeTreeVisitor?
-    protected Reifier getReifier(){return Reifier.make(getFactory());}
-
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/NotImplementedException.java b/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/NotImplementedException.java
deleted file mode 100755
index 9eadf58..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/NotImplementedException.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.reflectiveObjects;
-
-/** Temporary class used to indicate missing functionality */
-public class NotImplementedException extends RuntimeException {}
diff --git a/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java b/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java
deleted file mode 100755
index 83353ae..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package sun.reflect.generics.reflectiveObjects;
-
-import sun.reflect.generics.tree.FieldTypeSignature;
-
-import java.lang.reflect.MalformedParameterizedTypeException;
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.util.Arrays;
-
-
-/** Implementing class for ParameterizedType interface. */
-
-public class ParameterizedTypeImpl implements ParameterizedType {
-    private Type[] actualTypeArguments;
-    private Class<?>  rawType;
-    private Type   ownerType;
-
-    private ParameterizedTypeImpl(Class<?> rawType,
-                                  Type[] actualTypeArguments,
-                                  Type ownerType) {
-        this.actualTypeArguments = actualTypeArguments;
-        this.rawType             = rawType;
-        if (ownerType != null) {
-            this.ownerType = ownerType;
-        } else { this.ownerType = rawType.getDeclaringClass();}
-        validateConstructorArguments();
-    }
-
-    private void validateConstructorArguments() {
-        TypeVariable/*<?>*/[] formals = rawType.getTypeParameters();
-        // check correct arity of actual type args
-        if (formals.length != actualTypeArguments.length){
-            throw new MalformedParameterizedTypeException();
-        }
-        for (int i = 0; i < actualTypeArguments.length; i++) {
-            // check actuals against formals' bounds
-        }
-
-    }
-
-    /**
-     * Static factory. Given a (generic) class, actual type arguments
-     * and an owner type, creates a parameterized type.
-     * This class can be instantiated with a a raw type that does not
-     * represent a generic type, provided the list of actual type
-     * arguments is empty.
-     * If the ownerType argument is null, the declaring class of the
-     * raw type is used as the owner type.
-     * <p> This method throws a MalformedParameterizedTypeException
-     * under the following circumstances:
-     * If the number of actual type arguments (i.e., the size of the
-     * array <tt>typeArgs</tt>) does not correspond to the number of
-     * formal type arguments.
-     * If any of the actual type arguments is not an instance of the
-     * bounds on the corresponding formal.
-     * @param rawType the Class representing the generic type declaration being
-     * instantiated
-     * @param actualTypeArguments - a (possibly empty) array of types
-     * representing the actual type arguments to the parameterized type
-     * @param ownerType - the enclosing type, if known.
-     * @return An instance of <tt>ParameterizedType</tt>
-     * @throws MalformedParameterizedTypeException - if the instantiation
-     * is invalid
-     */
-    public static ParameterizedTypeImpl make(Class<?> rawType,
-                                             Type[] actualTypeArguments,
-                                             Type ownerType) {
-        return new ParameterizedTypeImpl(rawType, actualTypeArguments,
-                                         ownerType);
-    }
-
-
-    /**
-     * Returns an array of <tt>Type</tt> objects representing the actual type
-     * arguments to this type.
-     *
-     * <p>Note that in some cases, the returned array be empty. This can occur
-     * if this type represents a non-parameterized type nested within
-     * a parameterized type.
-     *
-     * @return an array of <tt>Type</tt> objects representing the actual type
-     *     arguments to this type
-     * @throws <tt>TypeNotPresentException</tt> if any of the
-     *     actual type arguments refers to a non-existent type declaration
-     * @throws <tt>MalformedParameterizedTypeException</tt> if any of the
-     *     actual type parameters refer to a parameterized type that cannot
-     *     be instantiated for any reason
-     * @since 1.5
-     */
-    public Type[] getActualTypeArguments() {
-        return actualTypeArguments.clone();
-    }
-
-    /**
-     * Returns the <tt>Type</tt> object representing the class or interface
-     * that declared this type.
-     *
-     * @return the <tt>Type</tt> object representing the class or interface
-     *     that declared this type
-     */
-    public Class<?> getRawType() {
-        return rawType;
-    }
-
-
-    /**
-     * Returns a <tt>Type</tt> object representing the type that this type
-     * is a member of.  For example, if this type is <tt>O<T>.I<S></tt>,
-     * return a representation of <tt>O<T></tt>.
-     *
-     * <p>If this type is a top-level type, <tt>null</tt> is returned.
-     *
-     * @return a <tt>Type</tt> object representing the type that
-     *     this type is a member of. If this type is a top-level type,
-     *     <tt>null</tt> is returned
-     * @throws <tt>TypeNotPresentException</tt> if the owner type
-     *     refers to a non-existent type declaration
-     * @throws <tt>MalformedParameterizedTypeException</tt> if the owner type
-     *     refers to a parameterized type that cannot be instantiated
-     *     for any reason
-     *
-     */
-    public Type getOwnerType() {
-        return ownerType;
-    }
-
-    /*
-     * From the JavaDoc for java.lang.reflect.ParameterizedType
-     * "Instances of classes that implement this interface must
-     * implement an equals() method that equates any two instances
-     * that share the same generic type declaration and have equal
-     * type parameters."
-     */
-    @Override
-    public boolean equals(Object o) {
-        if (o instanceof ParameterizedType) {
-            // Check that information is equivalent
-            ParameterizedType that = (ParameterizedType) o;
-
-            if (this == that)
-                return true;
-
-            Type thatOwner   = that.getOwnerType();
-            Type thatRawType = that.getRawType();
-
-            if (false) { // Debugging
-                boolean ownerEquality = (ownerType == null ?
-                                         thatOwner == null :
-                                         ownerType.equals(thatOwner));
-                boolean rawEquality = (rawType == null ?
-                                       thatRawType == null :
-                                       rawType.equals(thatRawType));
-
-                boolean typeArgEquality = Arrays.equals(actualTypeArguments, // avoid clone
-                                                        that.getActualTypeArguments());
-                for (Type t : actualTypeArguments) {
-                    System.out.printf("\t\t%s%s%n", t, t.getClass());
-                }
-
-                System.out.printf("\towner %s\traw %s\ttypeArg %s%n",
-                                  ownerEquality, rawEquality, typeArgEquality);
-                return ownerEquality && rawEquality && typeArgEquality;
-            }
-
-
-            return
-                (ownerType == null ?
-                 thatOwner == null :
-                 ownerType.equals(thatOwner)) &&
-                (rawType == null ?
-                 thatRawType == null :
-                 rawType.equals(thatRawType)) &&
-                Arrays.equals(actualTypeArguments, // avoid clone
-                              that.getActualTypeArguments());
-        } else
-            return false;
-    }
-
-    @Override
-    public int hashCode() {
-        return
-            Arrays.hashCode(actualTypeArguments) ^
-            (ownerType == null ? 0 : ownerType.hashCode() ) ^
-            (rawType == null   ? 0 : rawType.hashCode() );
-    }
-
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-
-        if (ownerType != null) {
-            if (ownerType instanceof Class)
-                sb.append(((Class)ownerType).getName());
-            else
-                sb.append(ownerType.toString());
-
-            sb.append(".");
-
-            if (ownerType instanceof ParameterizedTypeImpl) {
-                // Find simple name of nested type by removing the
-                // shared prefix with owner.
-                sb.append(rawType.getName().replace( ((ParameterizedTypeImpl)ownerType).rawType.getName() + "$",
-                                         ""));
-            } else
-                sb.append(rawType.getName());
-        } else
-            sb.append(rawType.getName());
-
-        if (actualTypeArguments != null &&
-            actualTypeArguments.length > 0) {
-            sb.append("<");
-            boolean first = true;
-            for(Type t: actualTypeArguments) {
-                if (!first)
-                    sb.append(", ");
-                if (t instanceof Class)
-                    sb.append(((Class)t).getName());
-                else
-                    sb.append(t.toString());
-                first = false;
-            }
-            sb.append(">");
-        }
-
-        return sb.toString();
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/TypeVariableImpl.java b/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/TypeVariableImpl.java
deleted file mode 100755
index 6f0dc6d..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/TypeVariableImpl.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package sun.reflect.generics.reflectiveObjects;
-
-import java.lang.reflect.GenericDeclaration;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-
-import sun.reflect.generics.factory.GenericsFactory;
-import sun.reflect.generics.tree.FieldTypeSignature;
-import sun.reflect.generics.visitor.Reifier;
-
-/**
- * Implementation of <tt>java.lang.reflect.TypeVariable</tt> interface
- * for core reflection.
- */
-public class TypeVariableImpl<D extends GenericDeclaration>
-    extends LazyReflectiveObjectGenerator implements TypeVariable<D> {
-    D genericDeclaration;
-    private String name;
-    // upper bounds - evaluated lazily
-    private Type[] bounds;
-
-    // The ASTs for the bounds. We are required to evaluate the bounds
-    // lazily, so we store these at least until we are first asked
-    // for the bounds. This also neatly solves the
-    // problem with F-bounds - you can't reify them before the formal
-    // is defined.
-    private FieldTypeSignature[] boundASTs;
-
-    // constructor is private to enforce access through static factory
-    private TypeVariableImpl(D decl, String n, FieldTypeSignature[] bs,
-                             GenericsFactory f) {
-        super(f);
-        genericDeclaration = decl;
-        name = n;
-        boundASTs = bs;
-    }
-
-    // Accessors
-
-    // accessor for ASTs for bounds. Must not be called after
-    // bounds have been evaluated, because we might throw the ASTs
-    // away (but that is not thread-safe, is it?)
-    private FieldTypeSignature[] getBoundASTs() {
-        // check that bounds were not evaluated yet
-        assert(bounds == null);
-        return boundASTs;
-    }
-
-    /**
-     * Factory method.
-     * @param decl - the reflective object that declared the type variable
-     * that this method should create
-     * @param name - the name of the type variable to be returned
-     * @param bs - an array of ASTs representing the bounds for the type
-     * variable to be created
-     * @param f - a factory that can be used to manufacture reflective
-     * objects that represent the bounds of this type variable
-     * @return A type variable with name, bounds, declaration and factory
-     * specified
-     */
-    public static <T extends GenericDeclaration>
-                             TypeVariableImpl<T> make(T decl, String name,
-                                                      FieldTypeSignature[] bs,
-                                                      GenericsFactory f) {
-        return new TypeVariableImpl<T>(decl, name, bs, f);
-    }
-
-
-    /**
-     * Returns an array of <tt>Type</tt> objects representing the
-     * upper bound(s) of this type variable.  Note that if no upper bound is
-     * explicitly declared, the upper bound is <tt>Object</tt>.
-     *
-     * <p>For each upper bound B:
-     * <ul>
-     *  <li>if B is a parameterized type or a type variable, it is created,
-     *  (see {@link #ParameterizedType} for the details of the creation
-     *  process for parameterized types).
-     *  <li>Otherwise, B is resolved.
-     * </ul>
-     *
-     * @throws <tt>TypeNotPresentException</tt>  if any of the
-     *     bounds refers to a non-existent type declaration
-     * @throws <tt>MalformedParameterizedTypeException</tt> if any of the
-     *     bounds refer to a parameterized type that cannot be instantiated
-     *     for any reason
-     * @return an array of Types representing the upper bound(s) of this
-     *     type variable
-    */
-    public Type[] getBounds() {
-        // lazily initialize bounds if necessary
-        if (bounds == null) {
-            FieldTypeSignature[] fts = getBoundASTs(); // get AST
-            // allocate result array; note that
-            // keeping ts and bounds separate helps with threads
-            Type[] ts = new Type[fts.length];
-            // iterate over bound trees, reifying each in turn
-            for ( int j = 0; j  < fts.length; j++) {
-                Reifier r = getReifier();
-                fts[j].accept(r);
-                ts[j] = r.getResult();
-            }
-            // cache result
-            bounds = ts;
-            // could throw away bound ASTs here; thread safety?
-        }
-        return bounds.clone(); // return cached bounds
-    }
-
-    /**
-     * Returns the <tt>GenericDeclaration</tt>  object representing the
-     * generic declaration that declared this type variable.
-     *
-     * @return the generic declaration that declared this type variable.
-     *
-     * @since 1.5
-     */
-    public D getGenericDeclaration(){
-        return genericDeclaration;
-    }
-
-
-    /**
-     * Returns the name of this type variable, as it occurs in the source code.
-     *
-     * @return the name of this type variable, as it appears in the source code
-     */
-    public String getName()   { return name; }
-
-    public String toString() {return getName();}
-
-    @Override
-    public boolean equals(Object o) {
-        if (o instanceof TypeVariable) {
-            TypeVariable that = (TypeVariable) o;
-
-            GenericDeclaration thatDecl = that.getGenericDeclaration();
-            String thatName = that.getName();
-
-            return
-                (genericDeclaration == null ?
-                 thatDecl == null :
-                 genericDeclaration.equals(thatDecl)) &&
-                (name == null ?
-                 thatName == null :
-                 name.equals(thatName));
-
-        } else
-            return false;
-    }
-
-    @Override
-    public int hashCode() {
-        return genericDeclaration.hashCode() ^ name.hashCode();
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/WildcardTypeImpl.java b/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/WildcardTypeImpl.java
deleted file mode 100755
index cbbfae0..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/reflectiveObjects/WildcardTypeImpl.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package sun.reflect.generics.reflectiveObjects;
-
-
-import java.lang.reflect.Type;
-import java.lang.reflect.WildcardType;
-import sun.reflect.generics.factory.GenericsFactory;
-import sun.reflect.generics.tree.FieldTypeSignature;
-import sun.reflect.generics.visitor.Reifier;
-import java.util.Arrays;
-
-
-/**
- * Implementation of WildcardType interface for core reflection.
- */
-public class WildcardTypeImpl extends LazyReflectiveObjectGenerator
-    implements WildcardType {
-    // upper bounds - evaluated lazily
-    private Type[] upperBounds;
-    // lower bounds - evaluated lazily
-    private Type[] lowerBounds;
-    // The ASTs for the bounds. We are required to evaluate the bounds
-    // lazily, so we store these at least until we are first asked
-    // for the bounds. This also neatly solves the
-    // problem with F-bounds - you can't reify them before the formal
-    // is defined.
-    private FieldTypeSignature[] upperBoundASTs;
-    private FieldTypeSignature[] lowerBoundASTs;
-
-    // constructor is private to enforce access through static factory
-    private WildcardTypeImpl(FieldTypeSignature[] ubs,
-                             FieldTypeSignature[] lbs,
-                             GenericsFactory f) {
-        super(f);
-        upperBoundASTs = ubs;
-        lowerBoundASTs = lbs;
-    }
-
-    /**
-     * Factory method.
-     * @param ubs - an array of ASTs representing the upper bounds for the type
-     * variable to be created
-     * @param lbs - an array of ASTs representing the lower bounds for the type
-     * variable to be created
-     * @param f - a factory that can be used to manufacture reflective
-     * objects that represent the bounds of this wildcard type
-     * @return a wild card type with the requested bounds and factory
-     */
-    public static WildcardTypeImpl make(FieldTypeSignature[] ubs,
-                                        FieldTypeSignature[] lbs,
-                                        GenericsFactory f) {
-        return new WildcardTypeImpl(ubs, lbs, f);
-    }
-
-    // Accessors
-
-    // accessor for ASTs for upper bounds. Must not be called after upper
-    // bounds have been evaluated, because we might throw the ASTs
-    // away (but that is not thread-safe, is it?)
-    private FieldTypeSignature[] getUpperBoundASTs() {
-        // check that upper bounds were not evaluated yet
-        assert(upperBounds == null);
-        return upperBoundASTs;
-    }
-    // accessor for ASTs for lower bounds. Must not be called after lower
-    // bounds have been evaluated, because we might throw the ASTs
-    // away (but that is not thread-safe, is it?)
-    private FieldTypeSignature[] getLowerBoundASTs() {
-        // check that lower bounds were not evaluated yet
-        assert(lowerBounds == null);
-        return lowerBoundASTs;
-    }
-
-    /**
-     * Returns an array of <tt>Type</tt> objects representing the  upper
-     * bound(s) of this type variable.  Note that if no upper bound is
-     * explicitly declared, the upper bound is <tt>Object</tt>.
-     *
-     * <p>For each upper bound B :
-     * <ul>
-     *  <li>if B is a parameterized type or a type variable, it is created,
-     *  (see {@link #ParameterizedType} for the details of the creation
-     *  process for parameterized types).
-     *  <li>Otherwise, B is resolved.
-     * </ul>
-     *
-     * @return an array of Types representing the upper bound(s) of this
-     *     type variable
-     * @throws <tt>TypeNotPresentException</tt> if any of the
-     *     bounds refers to a non-existent type declaration
-     * @throws <tt>MalformedParameterizedTypeException</tt> if any of the
-     *     bounds refer to a parameterized type that cannot be instantiated
-     *     for any reason
-     */
-    public Type[] getUpperBounds() {
-        // lazily initialize bounds if necessary
-        if (upperBounds == null) {
-            FieldTypeSignature[] fts = getUpperBoundASTs(); // get AST
-
-            // allocate result array; note that
-            // keeping ts and bounds separate helps with threads
-            Type[] ts = new Type[fts.length];
-            // iterate over bound trees, reifying each in turn
-            for ( int j = 0; j  < fts.length; j++) {
-                Reifier r = getReifier();
-                fts[j].accept(r);
-                ts[j] = r.getResult();
-            }
-            // cache result
-            upperBounds = ts;
-            // could throw away upper bound ASTs here; thread safety?
-        }
-        return upperBounds.clone(); // return cached bounds
-    }
-
-    /**
-     * Returns an array of <tt>Type</tt> objects representing the
-     * lower bound(s) of this type variable.  Note that if no lower bound is
-     * explicitly declared, the lower bound is the type of <tt>null</tt>.
-     * In this case, a zero length array is returned.
-     *
-     * <p>For each lower bound B :
-     * <ul>
-     *   <li>if B is a parameterized type or a type variable, it is created,
-     *   (see {@link #ParameterizedType} for the details of the creation
-     *   process for parameterized types).
-     *   <li>Otherwise, B is resolved.
-     * </ul>
-     *
-     * @return an array of Types representing the lower bound(s) of this
-     *     type variable
-     * @throws <tt>TypeNotPresentException</tt> if any of the
-     *     bounds refers to a non-existent type declaration
-     * @throws <tt>MalformedParameterizedTypeException</tt> if any of the
-     *     bounds refer to a parameterized type that cannot be instantiated
-     *     for any reason
-     */
-    public Type[] getLowerBounds() {
-        // lazily initialize bounds if necessary
-        if (lowerBounds == null) {
-            FieldTypeSignature[] fts = getLowerBoundASTs(); // get AST
-            // allocate result array; note that
-            // keeping ts and bounds separate helps with threads
-            Type[] ts = new Type[fts.length];
-            // iterate over bound trees, reifying each in turn
-            for ( int j = 0; j  < fts.length; j++) {
-                Reifier r = getReifier();
-                fts[j].accept(r);
-                ts[j] = r.getResult();
-            }
-            // cache result
-            lowerBounds = ts;
-            // could throw away lower bound ASTs here; thread safety?
-        }
-        return lowerBounds.clone(); // return cached bounds
-    }
-
-    public String toString() {
-        Type[] lowerBounds = getLowerBounds();
-        Type[] bounds = lowerBounds;
-        StringBuilder sb = new StringBuilder();
-
-        if (lowerBounds.length > 0)
-            sb.append("? super ");
-        else {
-            Type[] upperBounds = getUpperBounds();
-            if (upperBounds.length > 0 && !upperBounds[0].equals(Object.class) ) {
-                bounds = upperBounds;
-                sb.append("? extends ");
-            } else
-                return "?";
-        }
-
-        assert bounds.length > 0;
-
-        boolean first = true;
-        for(Type bound: bounds) {
-            if (!first)
-                sb.append(" & ");
-
-            first = false;
-            if (bound instanceof Class)
-                sb.append(((Class)bound).getName() );
-            else
-                sb.append(bound.toString());
-        }
-        return sb.toString();
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (o instanceof WildcardType) {
-            WildcardType that = (WildcardType) o;
-            return
-                Arrays.equals(this.getLowerBounds(),
-                              that.getLowerBounds()) &&
-                Arrays.equals(this.getUpperBounds(),
-                              that.getUpperBounds());
-        } else
-            return false;
-    }
-
-    @Override
-    public int hashCode() {
-        Type [] lowerBounds = getLowerBounds();
-        Type [] upperBounds = getUpperBounds();
-
-        return Arrays.hashCode(lowerBounds) ^ Arrays.hashCode(upperBounds);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/repository/AbstractRepository.java b/ojluni/src/main/java/sun/reflect/generics/repository/AbstractRepository.java
deleted file mode 100755
index a28d88d..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/repository/AbstractRepository.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.repository;
-
-import sun.reflect.generics.factory.GenericsFactory;
-import sun.reflect.generics.tree.Tree;
-import sun.reflect.generics.visitor.Reifier;
-
-
-/**
- * Abstract superclass for representing the generic type information for
- * a reflective entity.
- * The code is not dependent on a particular reflective implementation.
- * It is designed to be used unchanged by at least core reflection and JDI.
- */
-public abstract class AbstractRepository<T extends Tree> {
-
-    // A factory used to produce reflective objects. Provided when the
-    //repository is created. Will vary across implementations.
-    private GenericsFactory factory;
-
-    private T tree; // the AST for the generic type info
-
-    //accessors
-    private GenericsFactory getFactory() { return factory;}
-
-    /**
-     * Accessor for <tt>tree</tt>.
-     * @return the cached AST this repository holds
-     */
-    protected T getTree(){ return tree;}
-
-    /**
-     * Returns a <tt>Reifier</tt> used to convert parts of the
-     * AST into reflective objects.
-     * @return  a <tt>Reifier</tt> used to convert parts of the
-     * AST into reflective objects
-     */
-    protected Reifier getReifier(){return Reifier.make(getFactory());}
-
-    /**
-     * Constructor. Should only be used by subclasses. Concrete subclasses
-     * should make their constructors private and provide public factory
-     * methods.
-     * @param rawSig - the generic signature of the reflective object
-     * that this repository is servicing
-     * @param f - a factory that will provide instances of reflective
-     * objects when this repository converts its AST
-     */
-    protected AbstractRepository(String rawSig, GenericsFactory f) {
-        tree = parse(rawSig);
-        factory = f;
-    }
-
-    /**
-     * Returns the AST for the genric type info of this entity.
-     * @param s - a string representing the generic signature of this
-     * entity
-     * @return the AST for the generic type info of this entity.
-     */
-    protected abstract T parse(String s);
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/repository/ClassRepository.java b/ojluni/src/main/java/sun/reflect/generics/repository/ClassRepository.java
deleted file mode 100755
index a964823..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/repository/ClassRepository.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package sun.reflect.generics.repository;
-
-import sun.reflect.generics.factory.GenericsFactory;
-import sun.reflect.generics.tree.ClassSignature;
-import sun.reflect.generics.tree.TypeTree;
-import sun.reflect.generics.visitor.Reifier;
-import sun.reflect.generics.parser.SignatureParser;
-import java.lang.reflect.Type;
-
-
-/**
- * This class represents the generic type information for a class.
- * The code is not dependent on a particular reflective implementation.
- * It is designed to be used unchanged by at least core reflection and JDI.
- */
-public class ClassRepository extends GenericDeclRepository<ClassSignature> {
-
-    private Type superclass; // caches the generic superclass info
-    private Type[] superInterfaces; // caches the generic superinterface info
-
- // private, to enforce use of static factory
-    private ClassRepository(String rawSig, GenericsFactory f) {
-        super(rawSig, f);
-    }
-
-    protected ClassSignature parse(String s) {
-        return SignatureParser.make().parseClassSig(s);
-    }
-
-    /**
-     * Static factory method.
-     * @param rawSig - the generic signature of the reflective object
-     * that this repository is servicing
-     * @param f - a factory that will provide instances of reflective
-     * objects when this repository converts its AST
-     * @return a <tt>ClassRepository</tt> that manages the generic type
-     * information represented in the signature <tt>rawSig</tt>
-     */
-    public static ClassRepository make(String rawSig, GenericsFactory f) {
-        return new ClassRepository(rawSig, f);
-    }
-
-    // public API
- /*
- * When queried for a particular piece of type information, the
- * general pattern is to consult the corresponding cached value.
- * If the corresponding field is non-null, it is returned.
- * If not, it is created lazily. This is done by selecting the appropriate
- * part of the tree and transforming it into a reflective object
- * using a visitor.
- * a visitor, which is created by feeding it the factory
- * with which the repository was created.
- */
-
-    public Type getSuperclass(){
-        if (superclass == null) { // lazily initialize superclass
-            Reifier r = getReifier(); // obtain visitor
-            // Extract superclass subtree from AST and reify
-            getTree().getSuperclass().accept(r);
-            // extract result from visitor and cache it
-            superclass = r.getResult();
-            }
-        return superclass; // return cached result
-    }
-
-    public Type[] getSuperInterfaces(){
-        if (superInterfaces == null) { // lazily initialize super interfaces
-            // first, extract super interface subtree(s) from AST
-            TypeTree[] ts  = getTree().getSuperInterfaces();
-            // create array to store reified subtree(s)
-            Type[] sis = new Type[ts.length];
-            // reify all subtrees
-            for (int i = 0; i < ts.length; i++) {
-                Reifier r = getReifier(); // obtain visitor
-                ts[i].accept(r);// reify subtree
-                // extract result from visitor and store it
-                sis[i] = r.getResult();
-            }
-            superInterfaces = sis; // cache overall result
-        }
-        return superInterfaces.clone(); // return cached result
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/repository/ConstructorRepository.java b/ojluni/src/main/java/sun/reflect/generics/repository/ConstructorRepository.java
deleted file mode 100755
index a47a0f1..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/repository/ConstructorRepository.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package sun.reflect.generics.repository;
-
-import java.lang.reflect.Type;
-import sun.reflect.generics.factory.GenericsFactory;
-import sun.reflect.generics.parser.SignatureParser;
-import sun.reflect.generics.tree.FieldTypeSignature;
-import sun.reflect.generics.tree.MethodTypeSignature;
-import sun.reflect.generics.tree.TypeSignature;
-import sun.reflect.generics.visitor.Reifier;
-
-
-
-/**
- * This class represents the generic type information for a constructor.
- * The code is not dependent on a particular reflective implementation.
- * It is designed to be used unchanged by at least core reflection and JDI.
- */
-public class ConstructorRepository
-    extends GenericDeclRepository<MethodTypeSignature> {
-
-    private Type[] paramTypes; // caches the generic parameter types info
-    private Type[] exceptionTypes; // caches the generic exception types info
-
- // protected, to enforce use of static factory yet allow subclassing
-    protected ConstructorRepository(String rawSig, GenericsFactory f) {
-      super(rawSig, f);
-    }
-
-    protected MethodTypeSignature parse(String s) {
-        return SignatureParser.make().parseMethodSig(s);
-    }
-
-    /**
-     * Static factory method.
-     * @param rawSig - the generic signature of the reflective object
-     * that this repository is servicing
-     * @param f - a factory that will provide instances of reflective
-     * objects when this repository converts its AST
-     * @return a <tt>ConstructorRepository</tt> that manages the generic type
-     * information represented in the signature <tt>rawSig</tt>
-     */
-    public static ConstructorRepository make(String rawSig,
-                                             GenericsFactory f) {
-        return new ConstructorRepository(rawSig, f);
-    }
-
-    // public API
-
- /*
- * When queried for a particular piece of type information, the
- * general pattern is to consult the corresponding cached value.
- * If the corresponding field is non-null, it is returned.
- * If not, it is created lazily. This is done by selecting the appropriate
- * part of the tree and transforming it into a reflective object
- * using a visitor.
- * a visitor, which is created by feeding it the factory
- * with which the repository was created.
- */
-
-    public Type[] getParameterTypes(){
-        if (paramTypes == null) { // lazily initialize parameter types
-            // first, extract parameter type subtree(s) from AST
-            TypeSignature[] pts = getTree().getParameterTypes();
-            // create array to store reified subtree(s)
-            Type[] ps = new Type[pts.length];
-            // reify all subtrees
-            for (int i = 0; i < pts.length; i++) {
-                Reifier r = getReifier(); // obtain visitor
-                pts[i].accept(r); // reify subtree
-                // extract result from visitor and store it
-                ps[i] = r.getResult();
-            }
-            paramTypes = ps; // cache overall result
-        }
-        return paramTypes.clone(); // return cached result
-    }
-
-    public Type[] getExceptionTypes(){
-        if (exceptionTypes == null) { // lazily initialize exception types
-            // first, extract exception type subtree(s) from AST
-            FieldTypeSignature[] ets = getTree().getExceptionTypes();
-            // create array to store reified subtree(s)
-            Type[] es = new Type[ets.length];
-            // reify all subtrees
-            for (int i = 0; i < ets.length; i++) {
-                Reifier r = getReifier(); // obtain visitor
-                ets[i].accept(r); // reify subtree
-                // extract result from visitor and store it
-                es[i] = r.getResult();
-            }
-            exceptionTypes = es; // cache overall result
-        }
-        return exceptionTypes.clone(); // return cached result
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/repository/FieldRepository.java b/ojluni/src/main/java/sun/reflect/generics/repository/FieldRepository.java
deleted file mode 100755
index dc74ac5..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/repository/FieldRepository.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.repository;
-
-
-import java.lang.reflect.Type;
-import sun.reflect.generics.factory.GenericsFactory;
-import sun.reflect.generics.tree.TypeSignature;
-import sun.reflect.generics.parser.SignatureParser;
-import sun.reflect.generics.visitor.Reifier;
-
-
-
-/**
- * This class represents the generic type information for a constructor.
- * The code is not dependent on a particular reflective implementation.
- * It is designed to be used unchanged by at least core reflection and JDI.
- */
-public class FieldRepository extends AbstractRepository<TypeSignature> {
-
-    private Type genericType; // caches the generic type info
-
- // protected, to enforce use of static factory yet allow subclassing
-    protected FieldRepository(String rawSig, GenericsFactory f) {
-      super(rawSig, f);
-    }
-
-    protected TypeSignature parse(String s) {
-        return SignatureParser.make().parseTypeSig(s);
-    }
-
-    /**
-     * Static factory method.
-     * @param rawSig - the generic signature of the reflective object
-     * that this repository is servicing
-     * @param f - a factory that will provide instances of reflective
-     * objects when this repository converts its AST
-     * @return a <tt>FieldRepository</tt> that manages the generic type
-     * information represented in the signature <tt>rawSig</tt>
-     */
-    public static FieldRepository make(String rawSig,
-                                             GenericsFactory f) {
-        return new FieldRepository(rawSig, f);
-    }
-
-    // public API
-
- /*
- * When queried for a particular piece of type information, the
- * general pattern is to consult the corresponding cached value.
- * If the corresponding field is non-null, it is returned.
- * If not, it is created lazily. This is done by selecting the appropriate
- * part of the tree and transforming it into a reflective object
- * using a visitor.
- * a visitor, which is created by feeding it the factory
- * with which the repository was created.
- */
-
-    public Type getGenericType(){
-        if (genericType == null) { // lazily initialize generic type
-            Reifier r = getReifier(); // obtain visitor
-            getTree().accept(r); // reify subtree
-            // extract result from visitor and cache it
-            genericType = r.getResult();
-        }
-        return genericType; // return cached result
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/repository/GenericDeclRepository.java b/ojluni/src/main/java/sun/reflect/generics/repository/GenericDeclRepository.java
deleted file mode 100755
index 2a22803..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/repository/GenericDeclRepository.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package sun.reflect.generics.repository;
-
-import java.lang.reflect.TypeVariable;
-import sun.reflect.generics.factory.GenericsFactory;
-import sun.reflect.generics.tree.FormalTypeParameter;
-import sun.reflect.generics.tree.Signature;
-import sun.reflect.generics.visitor.Reifier;
-
-
-
-/**
- * This class represents the generic type information for a generic
- * declaration.
- * The code is not dependent on a particular reflective implementation.
- * It is designed to be used unchanged by at least core reflection and JDI.
- */
-public abstract class GenericDeclRepository<S extends Signature>
-    extends AbstractRepository<S> {
-
-    private TypeVariable[] typeParams; // caches the formal type parameters
-
-    protected GenericDeclRepository(String rawSig, GenericsFactory f) {
-        super(rawSig, f);
-    }
-
-    // public API
- /*
- * When queried for a particular piece of type information, the
- * general pattern is to consult the corresponding cached value.
- * If the corresponding field is non-null, it is returned.
- * If not, it is created lazily. This is done by selecting the appropriate
- * part of the tree and transforming it into a reflective object
- * using a visitor.
- * a visitor, which is created by feeding it the factory
- * with which the repository was created.
- */
-
-    /**
-     * Return the formal type parameters of this generic declaration.
-     * @return the formal type parameters of this generic declaration
-     */
-    public TypeVariable/*<?>*/[] getTypeParameters(){
-        if (typeParams == null) { // lazily initialize type parameters
-            // first, extract type parameter subtree(s) from AST
-            FormalTypeParameter[] ftps = getTree().getFormalTypeParameters();
-            // create array to store reified subtree(s)
-            TypeVariable[] tps = new TypeVariable[ftps.length];
-            // reify all subtrees
-            for (int i = 0; i < ftps.length; i++) {
-                Reifier r = getReifier(); // obtain visitor
-                ftps[i].accept(r); // reify subtree
-                // extract result from visitor and store it
-                tps[i] = (TypeVariable<?>) r.getResult();
-            }
-            typeParams = tps; // cache overall result
-        }
-        return typeParams.clone(); // return cached result
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/repository/MethodRepository.java b/ojluni/src/main/java/sun/reflect/generics/repository/MethodRepository.java
deleted file mode 100755
index 54221c6..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/repository/MethodRepository.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.repository;
-
-
-import java.lang.reflect.Type;
-import sun.reflect.generics.factory.GenericsFactory;
-import sun.reflect.generics.visitor.Reifier;
-
-
-
-/**
- * This class represents the generic type information for a method.
- * The code is not dependent on a particular reflective implementation.
- * It is designed to be used unchanged by at least core reflection and JDI.
- */
-public class MethodRepository extends ConstructorRepository {
-
-    private Type returnType; // caches the generic return type info
-
- // private, to enforce use of static factory
-    private MethodRepository(String rawSig, GenericsFactory f) {
-      super(rawSig, f);
-    }
-
-    /**
-     * Static factory method.
-     * @param rawSig - the generic signature of the reflective object
-     * that this repository is servicing
-     * @param f - a factory that will provide instances of reflective
-     * objects when this repository converts its AST
-     * @return a <tt>MethodRepository</tt> that manages the generic type
-     * information represented in the signature <tt>rawSig</tt>
-     */
-    public static MethodRepository make(String rawSig, GenericsFactory f) {
-        return new MethodRepository(rawSig, f);
-    }
-
-    // public API
-
-    public Type getReturnType() {
-        if (returnType == null) { // lazily initialize return type
-            Reifier r = getReifier(); // obtain visitor
-            // Extract return type subtree from AST and reify
-            getTree().getReturnType().accept(r);
-            // extract result from visitor and cache it
-            returnType = r.getResult();
-            }
-        return returnType; // return cached result
-    }
-
-
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/scope/AbstractScope.java b/ojluni/src/main/java/sun/reflect/generics/scope/AbstractScope.java
deleted file mode 100755
index 3eee4bd..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/scope/AbstractScope.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.scope;
-
-import java.lang.reflect.GenericDeclaration;
-import java.lang.reflect.TypeVariable;
-
-
-
-/**
- * Abstract superclass for lazy scope objects, used when building
- * factories for generic information repositories.
- * The type parameter <tt>D</tt> represents the type of reflective
- * object whose scope this class is representing.
- * <p> To subclass this, all one needs to do is implement
- * <tt>computeEnclosingScope</tt> and the subclass' constructor.
- */
-public abstract class AbstractScope<D extends GenericDeclaration>
-    implements Scope {
-
-    private D recvr; // the declaration whose scope this instance represents
-    private Scope enclosingScope; // the enclosing scope of this scope
-
-    /**
-     * Constructor. Takes a reflective object whose scope the newly
-     * constructed instance will represent.
-     * @param D - A generic declaration whose scope the newly
-     * constructed instance will represent
-     */
-    protected AbstractScope(D decl){ recvr = decl;}
-
-    /**
-     * Accessor for the receiver - the object whose scope this <tt>Scope</tt>
-     * object represents.
-     * @return The object whose scope this <tt>Scope</tt> object represents
-     */
-    protected D getRecvr() {return recvr;}
-
-    /** This method must be implemented by any concrete subclass.
-     * It must return the enclosing scope of this scope. If this scope
-     * is a top-level scope, an instance of  DummyScope must be returned.
-     * @return The enclosing scope of this scope
-     */
-    protected abstract Scope computeEnclosingScope();
-
-    /**
-     * Accessor for the enclosing scope, which is computed lazily and cached.
-     * @return the enclosing scope
-     */
-    protected Scope getEnclosingScope(){
-        if (enclosingScope == null) {enclosingScope = computeEnclosingScope();}
-        return enclosingScope;
-    }
-
-    /**
-     * Lookup a type variable in the scope, using its name. Returns null if
-     * no type variable with this name is declared in this scope or any of its
-     * surrounding scopes.
-     * @param name - the name of the type variable being looked up
-     * @return the requested type variable, if found
-     */
-    public TypeVariable<?> lookup(String name) {
-        TypeVariable[] tas = getRecvr().getTypeParameters();
-        for (TypeVariable/*<?>*/ tv : tas) {
-            if (tv.getName().equals(name)) {return tv;}
-        }
-        return getEnclosingScope().lookup(name);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/scope/ClassScope.java b/ojluni/src/main/java/sun/reflect/generics/scope/ClassScope.java
deleted file mode 100755
index ce1853f..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/scope/ClassScope.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package sun.reflect.generics.scope;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-
-
-/**
- * This class represents the scope containing the type variables of
- * a class.
- */
-public class ClassScope extends AbstractScope<Class<?>> implements Scope {
-
-    // constructor is private to enforce use of factory method
-    private ClassScope(Class<?> c){
-        super(c);
-    }
-
-    /**
-     * Overrides the abstract method in the superclass.
-     * @return the enclosing scope
-     */
-    protected Scope computeEnclosingScope() {
-        Class<?> receiver = getRecvr();
-
-        Method m = receiver.getEnclosingMethod();
-        if (m != null)
-            // Receiver is a local or anonymous class enclosed in a
-            // method.
-            return MethodScope.make(m);
-
-        Constructor<?> cnstr = receiver.getEnclosingConstructor();
-        if (cnstr != null)
-            // Receiver is a local or anonymous class enclosed in a
-            // constructor.
-            return ConstructorScope.make(cnstr);
-
-        Class<?> c = receiver.getEnclosingClass();
-        // if there is a declaring class, recvr is a member class
-        // and its enclosing scope is that of the declaring class
-        if (c != null)
-            // Receiver is a local class, an anonymous class, or a
-            // member class (static or not).
-            return ClassScope.make(c);
-
-        // otherwise, recvr is a top level class, and it has no real
-        // enclosing scope.
-        return DummyScope.make();
-    }
-
-    /**
-     * Factory method. Takes a <tt>Class</tt> object and creates a
-     * scope for it.
-     * @param c - a Class whose scope we want to obtain
-     * @return The type-variable scope for the class c
-     */
-    public static ClassScope make(Class<?> c) { return new ClassScope(c);}
-
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/scope/ConstructorScope.java b/ojluni/src/main/java/sun/reflect/generics/scope/ConstructorScope.java
deleted file mode 100755
index 2953037..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/scope/ConstructorScope.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.scope;
-
-import java.lang.reflect.Constructor;
-
-
-/**
- * This class represents the scope containing the type variables of
- * a constructor.
- */
-public class ConstructorScope extends AbstractScope<Constructor> {
-
-    // constructor is private to enforce use of factory method
-    private ConstructorScope(Constructor c){
-        super(c);
-    }
-
-    // utility method; computes enclosing class, from which we can
-    // derive enclosing scope.
-    private Class<?> getEnclosingClass(){
-        return getRecvr().getDeclaringClass();
-    }
-
-    /**
-     * Overrides the abstract method in the superclass.
-     * @return the enclosing scope
-     */
-    protected Scope computeEnclosingScope() {
-        // the enclosing scope of a (generic) constructor is the scope of the
-        // class in which it was declared.
-        return ClassScope.make(getEnclosingClass());
-    }
-
-    /**
-     * Factory method. Takes a <tt>Constructor</tt> object and creates a
-     * scope for it.
-     * @param m - A Constructor whose scope we want to obtain
-     * @return The type-variable scope for the constructor m
-     */
-    public static ConstructorScope make(Constructor c) {
-        return new ConstructorScope(c);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/scope/DummyScope.java b/ojluni/src/main/java/sun/reflect/generics/scope/DummyScope.java
deleted file mode 100755
index 3370c9f..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/scope/DummyScope.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.scope;
-
-import java.lang.reflect.TypeVariable;
-
-/**
- * This class is used to provide enclosing scopes for top level classes.
- * We cannot use <tt>null</tt> to represent such a scope, since the
- * enclosing scope is computed lazily, and so the field storing it is
- * null until it has been computed. Therefore, <tt>null</tt> is reserved
- * to represent an as-yet-uncomputed scope, and cannot be used for any
- * other kind of scope.
- */
-public class DummyScope implements Scope {
-    // Caches the unique instance of this class; instances contain no data
-    // so we can use the singleton pattern
-    private static DummyScope singleton = new DummyScope();
-
-    // constructor is private to enforce use of factory method
-    private DummyScope(){}
-
-    /**
-     * Factory method. Enforces the singleton pattern - only one
-     * instance of this class ever exists.
-     */
-    public static DummyScope make() {
-        return singleton;
-    }
-
-    /**
-     * Lookup a type variable in the scope, using its name. Always returns
-     * <tt>null</tt>.
-     * @param name - the name of the type variable being looked up
-     * @return  null
-     */
-    public TypeVariable<?> lookup(String name) {return null;}
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/scope/MethodScope.java b/ojluni/src/main/java/sun/reflect/generics/scope/MethodScope.java
deleted file mode 100755
index 83a1ab8..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/scope/MethodScope.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.scope;
-
-import java.lang.reflect.Method;
-
-
-/**
- * This class represents the scope containing the type variables of
- * a method.
- */
-public class MethodScope extends AbstractScope<Method> {
-
-    // constructor is private to enforce use of factory method
-    private MethodScope(Method m){
-        super(m);
-    }
-
-    // utility method; computes enclosing class, from which we can
-    // derive enclosing scope.
-    private Class<?> getEnclosingClass(){
-        return getRecvr().getDeclaringClass();
-    }
-
-    /**
-     * Overrides the abstract method in the superclass.
-     * @return the enclosing scope
-     */
-    protected Scope computeEnclosingScope() {
-        // the enclosing scope of a (generic) method is the scope of the
-        // class in which it was declared.
-        return ClassScope.make(getEnclosingClass());
-    }
-
-    /**
-     * Factory method. Takes a <tt>Method</tt> object and creates a
-     * scope for it.
-     * @param m - A Method whose scope we want to obtain
-     * @return The type-variable scope for the method m
-     */
-    public static MethodScope make(Method m) {
-        return new MethodScope(m);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/scope/Scope.java b/ojluni/src/main/java/sun/reflect/generics/scope/Scope.java
deleted file mode 100755
index 19e1ea0..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/scope/Scope.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.scope;
-
-import java.lang.reflect.TypeVariable;
-
-
-public interface Scope {
-    TypeVariable<?> lookup(String name);
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/ArrayTypeSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/ArrayTypeSignature.java
deleted file mode 100755
index b6606d2..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/ArrayTypeSignature.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-public class ArrayTypeSignature implements FieldTypeSignature {
-    private TypeSignature componentType;
-
-    private ArrayTypeSignature(TypeSignature ct) {componentType = ct;}
-
-    public static ArrayTypeSignature make(TypeSignature ct) {
-        return new ArrayTypeSignature(ct);
-    }
-
-    public TypeSignature getComponentType(){return componentType;}
-
-    public void accept(TypeTreeVisitor<?> v){
-        v.visitArrayTypeSignature(this);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/BaseType.java b/ojluni/src/main/java/sun/reflect/generics/tree/BaseType.java
deleted file mode 100755
index 19c47eb..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/BaseType.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-/**
- * Common superinterface for all nodes representing a primitive type.
- * Corresponds to the production of the same name in the JVMS
- * section on signatures.
- */
-public interface BaseType
-    extends TypeSignature{}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/BooleanSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/BooleanSignature.java
deleted file mode 100755
index 5e3b8a3..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/BooleanSignature.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-/** AST that represents the type boolean. */
-public class BooleanSignature implements BaseType {
-    private static BooleanSignature singleton = new BooleanSignature();
-
-    private BooleanSignature(){}
-
-    public static BooleanSignature make() {return singleton;}
-
-    public void accept(TypeTreeVisitor<?> v){
-        v.visitBooleanSignature(this);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/BottomSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/BottomSignature.java
deleted file mode 100755
index b0aaedb..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/BottomSignature.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-public class BottomSignature implements FieldTypeSignature {
-    private static BottomSignature singleton = new BottomSignature();
-
-    private BottomSignature(){}
-
-    public static BottomSignature make() {return singleton;}
-
-    public void accept(TypeTreeVisitor<?> v){v.visitBottomSignature(this);}
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/ByteSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/ByteSignature.java
deleted file mode 100755
index 47b64f9..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/ByteSignature.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-/** AST that represents the type byte. */
-public class ByteSignature implements BaseType {
-    private static ByteSignature singleton = new ByteSignature();
-
-    private ByteSignature(){}
-
-    public static ByteSignature make() {return singleton;}
-
-    public void accept(TypeTreeVisitor<?> v){
-        v.visitByteSignature(this);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/CharSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/CharSignature.java
deleted file mode 100755
index 365c361..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/CharSignature.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-/** AST that represents the type char. */
-public class CharSignature implements BaseType {
-    private static CharSignature singleton = new CharSignature();
-
-    private CharSignature(){}
-
-    public static CharSignature make() {return singleton;}
-
-    public void accept(TypeTreeVisitor<?> v){
-        v.visitCharSignature(this);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/ClassSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/ClassSignature.java
deleted file mode 100755
index 7856dd2..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/ClassSignature.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.Visitor;
-
-public class ClassSignature implements Signature {
-    private FormalTypeParameter[] formalTypeParams;
-    private ClassTypeSignature superclass;
-    private ClassTypeSignature[] superInterfaces;
-
-    private ClassSignature(FormalTypeParameter[] ftps,
-                                      ClassTypeSignature sc,
-                                      ClassTypeSignature[] sis) {
-        formalTypeParams = ftps;
-        superclass = sc;
-        superInterfaces = sis;
-    }
-
-    public static ClassSignature make(FormalTypeParameter[] ftps,
-                                      ClassTypeSignature sc,
-                                      ClassTypeSignature[] sis) {
-        return new ClassSignature(ftps, sc, sis);
-    }
-
-    public FormalTypeParameter[] getFormalTypeParameters(){
-        return formalTypeParams;
-    }
-    public ClassTypeSignature getSuperclass(){return superclass;}
-    public ClassTypeSignature[] getSuperInterfaces(){return superInterfaces;}
-
-    public void accept(Visitor v){v.visitClassSignature(this);}
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/ClassTypeSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/ClassTypeSignature.java
deleted file mode 100755
index f16622b..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/ClassTypeSignature.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import java.util.List;
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-
-/**
- * AST representing class types.
- */
-public class ClassTypeSignature implements FieldTypeSignature {
-    private List<SimpleClassTypeSignature> path;
-
-
-    private ClassTypeSignature(List<SimpleClassTypeSignature> p) {
-        path = p;
-    }
-
-    public static ClassTypeSignature make(List<SimpleClassTypeSignature> p) {
-        return new ClassTypeSignature(p);
-    }
-
-    public List<SimpleClassTypeSignature> getPath(){return path;}
-
-    public void accept(TypeTreeVisitor<?> v){v.visitClassTypeSignature(this);}
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/DoubleSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/DoubleSignature.java
deleted file mode 100755
index 533d43e..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/DoubleSignature.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-/** AST that represents the type double. */
-public class DoubleSignature implements BaseType {
-    private static DoubleSignature singleton = new DoubleSignature();
-
-    private DoubleSignature(){}
-
-    public static DoubleSignature make() {return singleton;}
-
-    public void accept(TypeTreeVisitor<?> v){v.visitDoubleSignature(this);}
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/FieldTypeSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/FieldTypeSignature.java
deleted file mode 100755
index 5eaefcd..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/FieldTypeSignature.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-/**
- * Common superinterface for nodes that represent a (possibly generic)
- * type.
- * Corresponds to the production of the same name in the JVMS
- * section on signatures.
- */
-public interface FieldTypeSignature
-    extends BaseType, TypeSignature, TypeArgument {}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/FloatSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/FloatSignature.java
deleted file mode 100755
index 61f8f45..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/FloatSignature.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-/** AST that represents the type float. */
-public class FloatSignature implements BaseType {
-    private static FloatSignature singleton = new FloatSignature();
-
-    private FloatSignature(){}
-
-    public static FloatSignature make() {return singleton;}
-
-    public void accept(TypeTreeVisitor<?> v){v.visitFloatSignature(this);}
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/FormalTypeParameter.java b/ojluni/src/main/java/sun/reflect/generics/tree/FormalTypeParameter.java
deleted file mode 100755
index 262cdb3..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/FormalTypeParameter.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-/** AST that represents a formal type parameter. */
-public class FormalTypeParameter implements TypeTree {
-    private String name;
-    private FieldTypeSignature[] bounds;
-
-    private FormalTypeParameter(String n, FieldTypeSignature[] bs) {
-        name = n;
-        bounds = bs;
-    }
-
-    /**
-     * Factory method.
-     * Returns a formal type parameter with the requested name and bounds.
-     * @param n  the name of the type variable to be created by this method.
-     * @param bs - the bounds of the type variable to be created by this method.
-     * @return a formal type parameter with the requested name and bounds
-     */
-    public static FormalTypeParameter make(String n, FieldTypeSignature[] bs){
-        return new FormalTypeParameter(n,bs);
-    }
-
-    public FieldTypeSignature[] getBounds(){return bounds;}
-    public String getName(){return name;}
-
-    public void accept(TypeTreeVisitor<?> v){v.visitFormalTypeParameter(this);}
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/IntSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/IntSignature.java
deleted file mode 100755
index e622b23..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/IntSignature.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-/** AST that represents the type int. */
-public class IntSignature implements BaseType {
-    private static IntSignature singleton = new IntSignature();
-
-    private IntSignature(){}
-
-    public static IntSignature make() {return singleton;}
-
-    public void accept(TypeTreeVisitor<?> v){v.visitIntSignature(this);}
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/LongSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/LongSignature.java
deleted file mode 100755
index a730a98..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/LongSignature.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-/** AST that represents the type long. */
-public class LongSignature implements BaseType {
-    private static LongSignature singleton = new LongSignature();
-
-    private LongSignature(){}
-
-    public static LongSignature make() {return singleton;}
-
-    public void accept(TypeTreeVisitor<?> v){v.visitLongSignature(this);}
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/MethodTypeSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/MethodTypeSignature.java
deleted file mode 100755
index e741905..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/MethodTypeSignature.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.Visitor;
-
-public class MethodTypeSignature implements Signature {
-    private FormalTypeParameter[] formalTypeParams;
-    private TypeSignature[] parameterTypes;
-    private ReturnType returnType;
-    private FieldTypeSignature[] exceptionTypes;
-
-    private MethodTypeSignature(FormalTypeParameter[] ftps,
-                                TypeSignature[] pts,
-                                ReturnType rt,
-                                FieldTypeSignature[] ets) {
-        formalTypeParams = ftps;
-        parameterTypes = pts;
-        returnType = rt;
-        exceptionTypes = ets;
-    }
-
-    public static MethodTypeSignature make(FormalTypeParameter[] ftps,
-                                           TypeSignature[] pts,
-                                           ReturnType rt,
-                                           FieldTypeSignature[] ets) {
-        return new MethodTypeSignature(ftps, pts, rt, ets);
-    }
-
-    public FormalTypeParameter[] getFormalTypeParameters(){
-        return formalTypeParams;
-    }
-    public TypeSignature[] getParameterTypes(){return parameterTypes;}
-    public ReturnType getReturnType(){return returnType;}
-    public FieldTypeSignature[] getExceptionTypes(){return exceptionTypes;}
-
-    public void accept(Visitor v){v.visitMethodTypeSignature(this);}
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/ReturnType.java b/ojluni/src/main/java/sun/reflect/generics/tree/ReturnType.java
deleted file mode 100755
index 7b1054c..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/ReturnType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-public interface ReturnType extends TypeTree{}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/ShortSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/ShortSignature.java
deleted file mode 100755
index ccdadcf..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/ShortSignature.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-/** AST that represents the type short. */
-public class ShortSignature implements BaseType {
-    private static ShortSignature singleton = new ShortSignature();
-
-    private ShortSignature(){}
-
-    public static ShortSignature make() {return singleton;}
-
-    public void accept(TypeTreeVisitor<?> v){
-        v.visitShortSignature(this);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/Signature.java b/ojluni/src/main/java/sun/reflect/generics/tree/Signature.java
deleted file mode 100755
index f4a54f8..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/Signature.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-/**
- * Common superinterface for generic signatures. These are the signatures
- * of complete class and method/constructor delcarations.
- */
-public interface Signature extends Tree{
-    FormalTypeParameter[] getFormalTypeParameters();
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/SimpleClassTypeSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/SimpleClassTypeSignature.java
deleted file mode 100755
index 45ba803..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/SimpleClassTypeSignature.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-public class SimpleClassTypeSignature implements FieldTypeSignature {
-    private boolean dollar;
-    private String name;
-    private TypeArgument[] typeArgs;
-
-    private SimpleClassTypeSignature(String n, boolean dollar, TypeArgument[] tas) {
-        name = n;
-        this.dollar = dollar;
-        typeArgs = tas;
-    }
-
-    public static SimpleClassTypeSignature make(String n,
-                                                boolean dollar,
-                                                TypeArgument[] tas){
-        return new SimpleClassTypeSignature(n, dollar, tas);
-    }
-
-    /*
-     * Should a '$' be used instead of '.' to separate this component
-     * of the name from the previous one when composing a string to
-     * pass to Class.forName; in other words, is this a transition to
-     * a nested class.
-     */
-    public boolean getDollar(){return dollar;}
-    public String getName(){return name;}
-    public TypeArgument[] getTypeArguments(){return typeArgs;}
-
-    public void accept(TypeTreeVisitor<?> v){
-        v.visitSimpleClassTypeSignature(this);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/Tree.java b/ojluni/src/main/java/sun/reflect/generics/tree/Tree.java
deleted file mode 100755
index a3d1deb..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/Tree.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-/** Root of the abstract syntax tree hierarchy for generic signatures */
-public interface Tree{}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/TypeArgument.java b/ojluni/src/main/java/sun/reflect/generics/tree/TypeArgument.java
deleted file mode 100755
index 832e57d0..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/TypeArgument.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-/** Common supertype for all possible type arguments in the
- * generic signature AST. Corresponds to the production TypeArgument
- * in the JVMS.
- */
-public interface TypeArgument extends TypeTree {}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/TypeSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/TypeSignature.java
deleted file mode 100755
index 6366349..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/TypeSignature.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-/**
- * Common superinterface for all signatures that represent a
- * type expression.
- * Corresponds to the production of the same name in the JVMS
- * section on signatures.
- */
-public interface TypeSignature extends ReturnType {}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/TypeTree.java b/ojluni/src/main/java/sun/reflect/generics/tree/TypeTree.java
deleted file mode 100755
index aaceb8d..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/TypeTree.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-/** Common supertype for all nodes that represent type expressions in
- * the generic signature AST.
- */
-public interface TypeTree extends Tree {
-    /**
-     * Accept method for the visitor pattern.
-     * @param v - a <tt>TypeTreeVisitor</tt> that will process this
-     * tree
-     */
-    void accept(TypeTreeVisitor<?> v);
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/TypeVariableSignature.java b/ojluni/src/main/java/sun/reflect/generics/tree/TypeVariableSignature.java
deleted file mode 100755
index 68e46e5..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/TypeVariableSignature.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-public class TypeVariableSignature implements FieldTypeSignature {
-    private String identifier;
-
-    private TypeVariableSignature(String id) {identifier = id;}
-
-
-    public static TypeVariableSignature make(String id) {
-        return new TypeVariableSignature(id);
-    }
-
-    public String getIdentifier(){return identifier;}
-
-    public void accept(TypeTreeVisitor<?> v){
-        v.visitTypeVariableSignature(this);
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/VoidDescriptor.java b/ojluni/src/main/java/sun/reflect/generics/tree/VoidDescriptor.java
deleted file mode 100755
index d685c60..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/VoidDescriptor.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-
-/** AST that represents the pseudo-type void. */
-public class VoidDescriptor implements ReturnType {
-    private static VoidDescriptor singleton = new VoidDescriptor();
-
-    private VoidDescriptor(){}
-
-    public static VoidDescriptor make() {return singleton;}
-
-
-
-    public void accept(TypeTreeVisitor<?> v){v.visitVoidDescriptor(this);}
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/tree/Wildcard.java b/ojluni/src/main/java/sun/reflect/generics/tree/Wildcard.java
deleted file mode 100755
index 5e3b6b8..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/tree/Wildcard.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package sun.reflect.generics.tree;
-
-import sun.reflect.generics.visitor.TypeTreeVisitor;
-
-public class Wildcard implements TypeArgument {
-    private FieldTypeSignature[] upperBounds;
-    private FieldTypeSignature[] lowerBounds;
-
-    private Wildcard(FieldTypeSignature[] ubs, FieldTypeSignature[] lbs) {
-        upperBounds = ubs;
-        lowerBounds = lbs;
-    }
-
-    private static final FieldTypeSignature[] emptyBounds = new FieldTypeSignature[0];
-
-    public static Wildcard make(FieldTypeSignature[] ubs,
-                                FieldTypeSignature[] lbs) {
-        return new Wildcard(ubs, lbs);
-    }
-
-    public FieldTypeSignature[] getUpperBounds(){
-        return upperBounds;
-    }
-
-    public FieldTypeSignature[] getLowerBounds(){
-        if (lowerBounds.length == 1 &&
-            lowerBounds[0] == BottomSignature.make())
-            return emptyBounds;
-        else
-            return lowerBounds;
-    }
-
-    public void accept(TypeTreeVisitor<?> v){v.visitWildcard(this);}
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/visitor/Reifier.java b/ojluni/src/main/java/sun/reflect/generics/visitor/Reifier.java
deleted file mode 100755
index b0a4557..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/visitor/Reifier.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright (c) 2003, 2005, 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.
- */
-
-package sun.reflect.generics.visitor;
-
-
-import java.lang.reflect.Type;
-import java.util.List;
-import java.util.Iterator;
-import sun.reflect.generics.tree.*;
-import sun.reflect.generics.factory.*;
-
-
-
-/**
- * Visitor that converts AST to reified types.
- */
-public class Reifier implements TypeTreeVisitor<Type> {
-    private Type resultType;
-    private GenericsFactory factory;
-
-    private Reifier(GenericsFactory f){
-        factory = f;
-    }
-
-    private GenericsFactory getFactory(){ return factory;}
-
-    /**
-     * Factory method. The resulting visitor will convert an AST
-     * representing generic signatures into corresponding reflective
-     * objects, using the provided factory, <tt>f</tt>.
-     * @param f - a factory that can be used to manufacture reflective
-     * objects returned by this visitor
-     * @return A visitor that can be used to reify ASTs representing
-     * generic type information into reflective objects
-     */
-    public static Reifier make(GenericsFactory f){
-        return new Reifier(f);
-    }
-
-    // Helper method. Visits an array of TypeArgument and produces
-    // reified Type array.
-    private Type[] reifyTypeArguments(TypeArgument[] tas) {
-        Type[] ts = new Type[tas.length];
-        for (int i = 0; i < tas.length; i++) {
-            tas[i].accept(this);
-            ts[i] = resultType;
-        }
-        return ts;
-    }
-
-
-    /**
-     * Accessor for the result of the last visit by this visitor,
-     * @return The type computed by this visitor based on its last
-     * visit
-     */
-    public Type getResult() { assert resultType != null;return resultType;}
-
-    public void visitFormalTypeParameter(FormalTypeParameter ftp){
-        resultType = getFactory().makeTypeVariable(ftp.getName(),
-                                                   ftp.getBounds());
-    }
-
-
-    public void visitClassTypeSignature(ClassTypeSignature ct){
-        // This method examines the pathname stored in ct, which has the form
-        // n1.n2...nk<targs>....
-        // where n1 ... nk-1 might not exist OR
-        // nk might not exist (but not both). It may be that k equals 1.
-        // The idea is that nk is the simple class type name that has
-        // any type parameters associated with it.
-        //  We process this path in two phases.
-        //  First, we scan until we reach nk (if it exists).
-        //  If nk does not exist, this identifies a raw class n1 ... nk-1
-        // which we can return.
-        // if nk does exist, we begin the 2nd phase.
-        // Here nk defines a parameterized type. Every further step nj (j > k)
-        // down the path must also be represented as a parameterized type,
-        // whose owner is the representation of the previous step in the path,
-        // n{j-1}.
-
-        // extract iterator on list of simple class type sigs
-        List<SimpleClassTypeSignature> scts = ct.getPath();
-        assert(!scts.isEmpty());
-        Iterator<SimpleClassTypeSignature> iter = scts.iterator();
-        SimpleClassTypeSignature sc = iter.next();
-        StringBuilder n = new StringBuilder(sc.getName());
-        boolean dollar = sc.getDollar();
-
-        // phase 1: iterate over simple class types until
-        // we are either done or we hit one with non-empty type parameters
-        while (iter.hasNext() && sc.getTypeArguments().length == 0) {
-            sc = iter.next();
-            dollar = sc.getDollar();
-            n.append(dollar?"$":".").append(sc.getName());
-        }
-
-        // Now, either sc is the last element of the list, or
-        // it has type arguments (or both)
-        assert(!(iter.hasNext()) || (sc.getTypeArguments().length > 0));
-        // Create the raw type
-        Type c = getFactory().makeNamedType(n.toString());
-        // if there are no type arguments
-        if (sc.getTypeArguments().length == 0) {
-            //we have surely reached the end of the path
-            assert(!iter.hasNext());
-            resultType = c; // the result is the raw type
-        } else {
-            assert(sc.getTypeArguments().length > 0);
-            // otherwise, we have type arguments, so we create a parameterized
-            // type, whose declaration is the raw type c, and whose owner is
-            // the declaring class of c (if any). This latter fact is indicated
-            // by passing null as the owner.
-            // First, we reify the type arguments
-            Type[] pts = reifyTypeArguments(sc.getTypeArguments());
-
-            Type owner = getFactory().makeParameterizedType(c, pts, null);
-            // phase 2: iterate over remaining simple class types
-            dollar =false;
-            while (iter.hasNext()) {
-                sc = iter.next();
-                dollar = sc.getDollar();
-                n.append(dollar?"$":".").append(sc.getName()); // build up raw class name
-                c = getFactory().makeNamedType(n.toString()); // obtain raw class
-                pts = reifyTypeArguments(sc.getTypeArguments());// reify params
-                // Create a parameterized type, based on type args, raw type
-                // and previous owner
-                owner = getFactory().makeParameterizedType(c, pts, owner);
-            }
-            resultType = owner;
-        }
-    }
-
-    public void visitArrayTypeSignature(ArrayTypeSignature a){
-        // extract and reify component type
-        a.getComponentType().accept(this);
-        Type ct = resultType;
-        resultType = getFactory().makeArrayType(ct);
-    }
-
-    public void visitTypeVariableSignature(TypeVariableSignature tv){
-        resultType = getFactory().findTypeVariable(tv.getIdentifier());
-    }
-
-    public void visitWildcard(Wildcard w){
-        resultType = getFactory().makeWildcard(w.getUpperBounds(),
-                                               w.getLowerBounds());
-    }
-
-    public void visitSimpleClassTypeSignature(SimpleClassTypeSignature sct){
-        resultType = getFactory().makeNamedType(sct.getName());
-    }
-
-    public void visitBottomSignature(BottomSignature b){
-
-    }
-
-    public void visitByteSignature(ByteSignature b){
-        resultType = getFactory().makeByte();
-    }
-
-    public void visitBooleanSignature(BooleanSignature b){
-        resultType = getFactory().makeBool();
-    }
-
-    public void visitShortSignature(ShortSignature s){
-        resultType = getFactory().makeShort();
-    }
-
-    public void visitCharSignature(CharSignature c){
-        resultType = getFactory().makeChar();
-    }
-
-    public void visitIntSignature(IntSignature i){
-        resultType = getFactory().makeInt();
-    }
-
-    public void visitLongSignature(LongSignature l){
-        resultType = getFactory().makeLong();
-    }
-
-    public void visitFloatSignature(FloatSignature f){
-        resultType = getFactory().makeFloat();
-    }
-
-    public void visitDoubleSignature(DoubleSignature d){
-        resultType = getFactory().makeDouble();
-    }
-
-    public void visitVoidDescriptor(VoidDescriptor v){
-        resultType = getFactory().makeVoid();
-    }
-
-
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/visitor/TypeTreeVisitor.java b/ojluni/src/main/java/sun/reflect/generics/visitor/TypeTreeVisitor.java
deleted file mode 100755
index a928e5e..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/visitor/TypeTreeVisitor.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.visitor;
-
-import sun.reflect.generics.tree.*;
-
-/**
- * Visit a TypeTree and produce a result of type T.
- */
-public interface TypeTreeVisitor<T> {
-
-    /**
-     * Returns the result of the visit.
-     * @return the result of the visit
-     */
-    T getResult();
-
-    // Visitor methods, per node type
-
-    void visitFormalTypeParameter(FormalTypeParameter ftp);
-
-    void visitClassTypeSignature(ClassTypeSignature ct);
-    void visitArrayTypeSignature(ArrayTypeSignature a);
-    void visitTypeVariableSignature(TypeVariableSignature tv);
-    void visitWildcard(Wildcard w);
-
-    void visitSimpleClassTypeSignature(SimpleClassTypeSignature sct);
-    void visitBottomSignature(BottomSignature b);
-
-    //  Primitives and Void
-    void visitByteSignature(ByteSignature b);
-    void visitBooleanSignature(BooleanSignature b);
-    void visitShortSignature(ShortSignature s);
-    void visitCharSignature(CharSignature c);
-    void visitIntSignature(IntSignature i);
-    void visitLongSignature(LongSignature l);
-    void visitFloatSignature(FloatSignature f);
-    void visitDoubleSignature(DoubleSignature d);
-
-    void visitVoidDescriptor(VoidDescriptor v);
-}
diff --git a/ojluni/src/main/java/sun/reflect/generics/visitor/Visitor.java b/ojluni/src/main/java/sun/reflect/generics/visitor/Visitor.java
deleted file mode 100755
index 0642c8d..0000000
--- a/ojluni/src/main/java/sun/reflect/generics/visitor/Visitor.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.reflect.generics.visitor;
-
-import sun.reflect.generics.tree.*;
-
-public interface Visitor<T> extends TypeTreeVisitor<T> {
-
-    void visitClassSignature(ClassSignature cs);
-    void visitMethodTypeSignature(MethodTypeSignature ms);
-}
diff --git a/ojluni/src/main/java/sun/reflect/misc/ConstructorUtil.java b/ojluni/src/main/java/sun/reflect/misc/ConstructorUtil.java
deleted file mode 100755
index cc95503..0000000
--- a/ojluni/src/main/java/sun/reflect/misc/ConstructorUtil.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.reflect.misc;
-
-import java.lang.reflect.Constructor;
-
-public final class ConstructorUtil {
-
-    private ConstructorUtil() {
-    }
-
-    public static Constructor getConstructor(Class cls, Class[] params)
-        throws NoSuchMethodException {
-        ReflectUtil.checkPackageAccess(cls);
-        return cls.getConstructor(params);
-    }
-
-    public static Constructor[] getConstructors(Class cls) {
-        ReflectUtil.checkPackageAccess(cls);
-        return cls.getConstructors();
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/misc/FieldUtil.java b/ojluni/src/main/java/sun/reflect/misc/FieldUtil.java
deleted file mode 100755
index cf4bc2d..0000000
--- a/ojluni/src/main/java/sun/reflect/misc/FieldUtil.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.reflect.misc;
-
-import java.lang.reflect.Field;
-
-/*
- * Create a trampoline class.
- */
-public final class FieldUtil {
-
-    private FieldUtil() {
-    }
-
-    public static Field getField(Class cls, String name)
-        throws NoSuchFieldException {
-        ReflectUtil.checkPackageAccess(cls);
-        return cls.getField(name);
-    }
-
-    public static Field[] getFields(Class cls) {
-        ReflectUtil.checkPackageAccess(cls);
-        return cls.getFields();
-    }
-
-    public static Field[] getDeclaredFields(Class cls) {
-        ReflectUtil.checkPackageAccess(cls);
-        return cls.getDeclaredFields();
-    }
-}
diff --git a/ojluni/src/main/java/sun/reflect/misc/MethodUtil.java b/ojluni/src/main/java/sun/reflect/misc/MethodUtil.java
deleted file mode 100755
index 8cfc811..0000000
--- a/ojluni/src/main/java/sun/reflect/misc/MethodUtil.java
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
- * Copyright (c) 2005, 2009, 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.
- */
-
-package sun.reflect.misc;
-
-import java.security.AllPermission;
-import java.security.AccessController;
-import java.security.PermissionCollection;
-import java.security.SecureClassLoader;
-import java.security.PrivilegedExceptionAction;
-import java.security.CodeSource;
-import java.io.InputStream;
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.HttpURLConnection;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Modifier;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import sun.misc.IOUtils;
-import sun.net.www.ParseUtil;
-import sun.security.util.SecurityConstants;
-
-
-class Trampoline {
-    static {
-        if (Trampoline.class.getClassLoader() == null) {
-            throw new Error(
-                "Trampoline must not be defined by the bootstrap classloader");
-        }
-    }
-
-    private static void ensureInvocableMethod(Method m)
-        throws InvocationTargetException
-    {
-        Class<?> clazz = m.getDeclaringClass();
-        if (clazz.equals(AccessController.class) ||
-            clazz.equals(Method.class) ||
-            clazz.getName().startsWith("java.lang.invoke."))
-            throw new InvocationTargetException(
-                new UnsupportedOperationException("invocation not supported"));
-    }
-
-    private static Object invoke(Method m, Object obj, Object[] params)
-        throws InvocationTargetException, IllegalAccessException
-    {
-        ensureInvocableMethod(m);
-        return m.invoke(obj, params);
-    }
-}
-
-/*
- * Create a trampoline class.
- */
-public final class MethodUtil extends SecureClassLoader {
-    private static String MISC_PKG = "sun.reflect.misc.";
-    private static String TRAMPOLINE = MISC_PKG + "Trampoline";
-    private static Method bounce = getTrampoline();
-
-    private MethodUtil() {
-        super();
-    }
-
-    public static Method getMethod(Class<?> cls, String name, Class[] args)
-        throws NoSuchMethodException {
-        ReflectUtil.checkPackageAccess(cls);
-        return cls.getMethod(name, args);
-    }
-
-    public static Method[] getMethods(Class cls) {
-        ReflectUtil.checkPackageAccess(cls);
-        return cls.getMethods();
-    }
-
-    /*
-     * Discover the public methods on public classes
-     * and interfaces accessible to any caller by calling
-     * Class.getMethods() and walking towards Object until
-     * we're done.
-     */
-     public static Method[] getPublicMethods(Class cls) {
-        // compatibility for update release
-        if (System.getSecurityManager() == null) {
-            return cls.getMethods();
-        }
-        Map<Signature, Method> sigs = new HashMap<Signature, Method>();
-        while (cls != null) {
-            boolean done = getInternalPublicMethods(cls, sigs);
-            if (done) {
-                break;
-            }
-            getInterfaceMethods(cls, sigs);
-            cls = cls.getSuperclass();
-        }
-        return sigs.values().toArray(new Method[sigs.size()]);
-    }
-
-    /*
-     * Process the immediate interfaces of this class or interface.
-     */
-    private static void getInterfaceMethods(Class cls,
-                                            Map<Signature, Method> sigs) {
-        Class[] intfs = cls.getInterfaces();
-        for (int i=0; i < intfs.length; i++) {
-            Class intf = intfs[i];
-            boolean done = getInternalPublicMethods(intf, sigs);
-            if (!done) {
-                getInterfaceMethods(intf, sigs);
-            }
-        }
-    }
-
-    /*
-     *
-     * Process the methods in this class or interface
-     */
-    private static boolean getInternalPublicMethods(Class cls,
-                                                    Map<Signature, Method> sigs) {
-        Method[] methods = null;
-        try {
-            /*
-             * This class or interface is non-public so we
-             * can't use any of it's methods. Go back and
-             * try again with a superclass or superinterface.
-             */
-            if (!Modifier.isPublic(cls.getModifiers())) {
-                return false;
-            }
-            if (!ReflectUtil.isPackageAccessible(cls)) {
-                return false;
-            }
-
-            methods = cls.getMethods();
-        } catch (SecurityException se) {
-            return false;
-        }
-
-        /*
-         * Check for inherited methods with non-public
-         * declaring classes. They might override and hide
-         * methods from their superclasses or
-         * superinterfaces.
-         */
-        boolean done = true;
-        for (int i=0; i < methods.length; i++) {
-            Class dc = methods[i].getDeclaringClass();
-            if (!Modifier.isPublic(dc.getModifiers())) {
-                done = false;
-                break;
-            }
-        }
-
-        if (done) {
-            /*
-             * We're done. Spray all the methods into
-             * the list and then we're out of here.
-             */
-            for (int i=0; i < methods.length; i++) {
-                addMethod(sigs, methods[i]);
-            }
-        } else {
-            /*
-             * Simulate cls.getDeclaredMethods() by
-             * stripping away inherited methods.
-             */
-            for (int i=0; i < methods.length; i++) {
-                Class dc = methods[i].getDeclaringClass();
-                if (cls.equals(dc)) {
-                    addMethod(sigs, methods[i]);
-                }
-            }
-        }
-        return done;
-    }
-
-    private static void addMethod(Map<Signature, Method> sigs, Method method) {
-        Signature signature = new Signature(method);
-        if (!sigs.containsKey(signature)) {
-            sigs.put(signature, method);
-        } else if (!method.getDeclaringClass().isInterface()){
-            /*
-             * Superclasses beat interfaces.
-             */
-            Method old = sigs.get(signature);
-            if (old.getDeclaringClass().isInterface()) {
-                sigs.put(signature, method);
-            }
-        }
-    }
-
-    /**
-     * A class that represents the unique elements of a method that will be a
-     * key in the method cache.
-     */
-    private static class Signature {
-        private String methodName;
-        private Class[] argClasses;
-
-        private volatile int hashCode = 0;
-
-        Signature(Method m) {
-            this.methodName = m.getName();
-            this.argClasses = m.getParameterTypes();
-        }
-
-        public boolean equals(Object o2) {
-            if (this == o2) {
-                return true;
-            }
-            Signature that = (Signature)o2;
-            if (!(methodName.equals(that.methodName))) {
-                return false;
-            }
-            if (argClasses.length != that.argClasses.length) {
-                return false;
-            }
-            for (int i = 0; i < argClasses.length; i++) {
-                if (!(argClasses[i] == that.argClasses[i])) {
-                  return false;
-                }
-            }
-            return true;
-        }
-
-        /**
-         * Hash code computed using algorithm suggested in
-         * Effective Java, Item 8.
-         */
-        public int hashCode() {
-            if (hashCode == 0) {
-                int result = 17;
-                result = 37 * result + methodName.hashCode();
-                if (argClasses != null) {
-                    for (int i = 0; i < argClasses.length; i++) {
-                        result = 37 * result + ((argClasses[i] == null) ? 0 :
-                            argClasses[i].hashCode());
-                    }
-                }
-                hashCode = result;
-            }
-            return hashCode;
-        }
-    }
-
-
-    /*
-     * Bounce through the trampoline.
-     */
-    public static Object invoke(Method m, Object obj, Object[] params)
-        throws InvocationTargetException, IllegalAccessException {
-        try {
-            return bounce.invoke(null, new Object[] {m, obj, params});
-        } catch (InvocationTargetException ie) {
-            Throwable t = ie.getCause();
-
-            if (t instanceof InvocationTargetException) {
-                throw (InvocationTargetException)t;
-            } else if (t instanceof IllegalAccessException) {
-                throw (IllegalAccessException)t;
-            } else if (t instanceof RuntimeException) {
-                throw (RuntimeException)t;
-            } else if (t instanceof Error) {
-                throw (Error)t;
-            } else {
-                throw new Error("Unexpected invocation error", t);
-            }
-        } catch (IllegalAccessException iae) {
-            // this can't happen
-            throw new Error("Unexpected invocation error", iae);
-        }
-    }
-
-    private static Method getTrampoline() {
-        try {
-            return AccessController.doPrivileged(
-                new PrivilegedExceptionAction<Method>() {
-                    public Method run() throws Exception {
-                        Class<?> t = getTrampolineClass();
-                        Class[] types = {
-                            Method.class, Object.class, Object[].class
-                        };
-                        Method b = t.getDeclaredMethod("invoke", types);
-                        b.setAccessible(true);
-                        return b;
-                    }
-                });
-        } catch (Exception e) {
-            throw new InternalError("bouncer cannot be found");
-        }
-    }
-
-
-    protected synchronized Class loadClass(String name, boolean resolve)
-        throws ClassNotFoundException
-    {
-        // First, check if the class has already been loaded
-        ReflectUtil.checkPackageAccess(name);
-        Class c = findLoadedClass(name);
-        if (c == null) {
-            try {
-                c = findClass(name);
-            } catch (ClassNotFoundException e) {
-                // Fall through ...
-            }
-            if (c == null) {
-                c = getParent().loadClass(name);
-            }
-        }
-        if (resolve) {
-            resolveClass(c);
-        }
-        return c;
-    }
-
-
-    protected Class findClass(final String name)
-        throws ClassNotFoundException
-    {
-        if (!name.startsWith(MISC_PKG)) {
-            throw new ClassNotFoundException(name);
-        }
-        String path = name.replace('.', '/').concat(".class");
-        URL res = getResource(path);
-        if (res != null) {
-            try {
-                return defineClass(name, res);
-            } catch (IOException e) {
-                throw new ClassNotFoundException(name, e);
-            }
-        } else {
-            throw new ClassNotFoundException(name);
-        }
-    }
-
-
-    /*
-     * Define the proxy classes
-     */
-    private Class defineClass(String name, URL url) throws IOException {
-        byte[] b = getBytes(url);
-        CodeSource cs = new CodeSource(null, (java.security.cert.Certificate[])null);
-        if (!name.equals(TRAMPOLINE)) {
-            throw new IOException("MethodUtil: bad name " + name);
-        }
-        return defineClass(name, b, 0, b.length, cs);
-    }
-
-
-    /*
-     * Returns the contents of the specified URL as an array of bytes.
-     */
-    private static byte[] getBytes(URL url) throws IOException {
-        URLConnection uc = url.openConnection();
-        if (uc instanceof java.net.HttpURLConnection) {
-            java.net.HttpURLConnection huc = (java.net.HttpURLConnection) uc;
-            int code = huc.getResponseCode();
-            if (code >= java.net.HttpURLConnection.HTTP_BAD_REQUEST) {
-                throw new IOException("open HTTP connection failed.");
-            }
-        }
-        int len = uc.getContentLength();
-        InputStream in = new BufferedInputStream(uc.getInputStream());
-
-        byte[] b;
-        try {
-            b = IOUtils.readFully(in, len, true);
-        } finally {
-            in.close();
-        }
-        return b;
-    }
-
-
-    protected PermissionCollection getPermissions(CodeSource codesource)
-    {
-        PermissionCollection perms = super.getPermissions(codesource);
-        perms.add(new AllPermission());
-        return perms;
-    }
-
-    private static Class getTrampolineClass() {
-        try {
-            return Class.forName(TRAMPOLINE, true, new MethodUtil());
-        } catch (ClassNotFoundException e) {
-        }
-        return null;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/action/GetBooleanSecurityPropertyAction.java b/ojluni/src/main/java/sun/security/action/GetBooleanSecurityPropertyAction.java
deleted file mode 100755
index a96d1e0..0000000
--- a/ojluni/src/main/java/sun/security/action/GetBooleanSecurityPropertyAction.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-
-package sun.security.action;
-
-import java.security.Security;
-
-/**
- * A convenience class for retrieving the boolean value of a security property
- * as a privileged action.
- *
- * <p>An instance of this class can be used as the argument of
- * <code>AccessController.doPrivileged</code>.
- *
- * <p>The following code retrieves the boolean value of the security
- * property named <code>"prop"</code> as a privileged action: <p>
- *
- * <pre>
- * boolean b = java.security.AccessController.doPrivileged
- *              (new GetBooleanSecurityPropertyAction("prop")).booleanValue();
- * </pre>
- *
- */
-public class GetBooleanSecurityPropertyAction
-        implements java.security.PrivilegedAction<Boolean> {
-    private String theProp;
-
-    /**
-     * Constructor that takes the name of the security property whose boolean
-     * value needs to be determined.
-     *
-     * @param theProp the name of the security property
-     */
-    public GetBooleanSecurityPropertyAction(String theProp) {
-        this.theProp = theProp;
-    }
-
-    /**
-     * Determines the boolean value of the security property whose name was
-     * specified in the constructor.
-     *
-     * @return the <code>Boolean</code> value of the security property.
-     */
-    public Boolean run() {
-        boolean b = false;
-        try {
-            String value = Security.getProperty(theProp);
-            b = (value != null) && value.equalsIgnoreCase("true");
-        } catch (NullPointerException e) {}
-        return b;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/action/GetLongAction.java b/ojluni/src/main/java/sun/security/action/GetLongAction.java
deleted file mode 100755
index 4b99f02..0000000
--- a/ojluni/src/main/java/sun/security/action/GetLongAction.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.
- */
-
-package sun.security.action;
-
-/**
- * A convenience class for retrieving the <code>Long</code> value of a system
- * property as a privileged action.
- *
- * <p>An instance of this class can be used as the argument of
- * <code>AccessController.doPrivileged</code>.
- *
- * <p>The following code retrieves the <code>Long</code> value of the system
- * property named <code>"prop"</code> as a privileged action. Since it does
- * not pass a default value to be used in case the property
- * <code>"prop"</code> is not defined, it has to check the result for
- * <code>null</code>: <p>
- *
- * <pre>
- * Long tmp = java.security.AccessController.doPrivileged
- *     (new sun.security.action.GetLongAction("prop"));
- * long l;
- * if (tmp != null) {
- *     l = tmp.longValue();
- * }
- * </pre>
- *
- * <p>The following code retrieves the <code>Long</code> value of the system
- * property named <code>"prop"</code> as a privileged action, and also passes
- * a default value to be used in case the property <code>"prop"</code> is not
- * defined: <p>
- *
- * <pre>
- * long l = java.security.AccessController.doPrivileged
- *      (new GetLongAction("prop")).longValue();
- * </pre>
- *
- * @author Roland Schemers
- * @see java.security.PrivilegedAction
- * @see java.security.AccessController
- * @since 1.2
- */
-
-public class GetLongAction implements java.security.PrivilegedAction<Long> {
-    private String theProp;
-    private long defaultVal;
-    private boolean defaultSet = false;
-
-    /**
-     * Constructor that takes the name of the system property whose
-     * <code>Long</code> value needs to be determined.
-     *
-     * @param theProp the name of the system property.
-     */
-    public GetLongAction(String theProp) {
-        this.theProp = theProp;
-    }
-
-    /**
-     * Constructor that takes the name of the system property and the default
-     * value of that property.
-     *
-     * @param theProp the name of the system property.
-     * @param defaulVal the default value.
-     */
-    public GetLongAction(String theProp, long defaultVal) {
-        this.theProp = theProp;
-        this.defaultVal = defaultVal;
-        this.defaultSet = true;
-    }
-
-    /**
-     * Determines the <code>Long</code> value of the system property whose
-     * name was specified in the constructor.
-     *
-     * <p>If there is no property of the specified name, or if the property
-     * does not have the correct numeric format, then a <code>Long</code>
-     * object representing the default value that was specified in the
-     * constructor is returned, or <code>null</code> if no default value was
-     * specified.
-     *
-     * @return the <code>Long</code> value of the property.
-     */
-    public Long run() {
-        Long value = Long.getLong(theProp);
-        if ((value == null) && defaultSet)
-            return new Long(defaultVal);
-        return value;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/action/OpenFileInputStreamAction.java b/ojluni/src/main/java/sun/security/action/OpenFileInputStreamAction.java
deleted file mode 100755
index 4692a22..0000000
--- a/ojluni/src/main/java/sun/security/action/OpenFileInputStreamAction.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2002, 2004, 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.
- */
-
-package sun.security.action;
-
-import java.io.*;
-
-import java.security.PrivilegedExceptionAction;
-
-/**
- * A convenience class for opening a FileInputStream as a privileged action.
- *
- * @author Andreas Sterbenz
- */
-public class OpenFileInputStreamAction
-        implements PrivilegedExceptionAction<FileInputStream> {
-
-    private final File file;
-
-    public OpenFileInputStreamAction(File file) {
-        this.file = file;
-    }
-
-    public OpenFileInputStreamAction(String filename) {
-        this.file = new File(filename);
-    }
-
-    public FileInputStream run() throws Exception {
-        return new FileInputStream(file);
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/ec/ECDHKeyAgreement.java b/ojluni/src/main/java/sun/security/ec/ECDHKeyAgreement.java
deleted file mode 100755
index aa086a4..0000000
--- a/ojluni/src/main/java/sun/security/ec/ECDHKeyAgreement.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-
-package sun.security.ec;
-
-import java.security.*;
-import java.security.interfaces.*;
-import java.security.spec.*;
-
-import javax.crypto.*;
-import javax.crypto.spec.*;
-
-/**
- * KeyAgreement implementation for ECDH.
- *
- * @since   1.7
- */
-public final class ECDHKeyAgreement extends KeyAgreementSpi {
-
-    // private key, if initialized
-    private ECPrivateKey privateKey;
-
-    // encoded public point, non-null between doPhase() & generateSecret() only
-    private byte[] publicValue;
-
-    // length of the secret to be derived
-    private int secretLen;
-
-    /**
-     * Constructs a new ECDHKeyAgreement.
-     */
-    public ECDHKeyAgreement() {
-    }
-
-    // see JCE spec
-    @Override
-    protected void engineInit(Key key, SecureRandom random)
-            throws InvalidKeyException {
-        if (!(key instanceof PrivateKey)) {
-            throw new InvalidKeyException
-                        ("Key must be instance of PrivateKey");
-        }
-        privateKey = (ECPrivateKey) ECKeyFactory.toECKey(key);
-        publicValue = null;
-    }
-
-    // see JCE spec
-    @Override
-    protected void engineInit(Key key, AlgorithmParameterSpec params,
-            SecureRandom random) throws InvalidKeyException,
-            InvalidAlgorithmParameterException {
-        if (params != null) {
-            throw new InvalidAlgorithmParameterException
-                        ("Parameters not supported");
-        }
-        engineInit(key, random);
-    }
-
-    // see JCE spec
-    @Override
-    protected Key engineDoPhase(Key key, boolean lastPhase)
-            throws InvalidKeyException, IllegalStateException {
-        if (privateKey == null) {
-            throw new IllegalStateException("Not initialized");
-        }
-        if (publicValue != null) {
-            throw new IllegalStateException("Phase already executed");
-        }
-        if (!lastPhase) {
-            throw new IllegalStateException
-                ("Only two party agreement supported, lastPhase must be true");
-        }
-        if (!(key instanceof ECPublicKey)) {
-            throw new InvalidKeyException
-                ("Key must be a PublicKey with algorithm EC");
-        }
-
-        ECPublicKey ecKey = (ECPublicKey)key;
-        ECParameterSpec params = ecKey.getParams();
-
-        if (ecKey instanceof ECPublicKeyImpl) {
-            publicValue = ((ECPublicKeyImpl)ecKey).getEncodedPublicValue();
-        } else { // instanceof ECPublicKey
-            publicValue =
-                ECParameters.encodePoint(ecKey.getW(), params.getCurve());
-        }
-        int keyLenBits = params.getCurve().getField().getFieldSize();
-        secretLen = (keyLenBits + 7) >> 3;
-
-        return null;
-    }
-
-    // see JCE spec
-    @Override
-    protected byte[] engineGenerateSecret() throws IllegalStateException {
-        if ((privateKey == null) || (publicValue == null)) {
-            throw new IllegalStateException("Not initialized correctly");
-        }
-
-        byte[] s = privateKey.getS().toByteArray();
-        byte[] encodedParams =
-            ECParameters.encodeParameters(privateKey.getParams()); // DER OID
-
-        try {
-
-            return deriveKey(s, publicValue, encodedParams);
-
-        } catch (GeneralSecurityException e) {
-            throw new ProviderException("Could not derive key", e);
-        }
-
-    }
-
-    // see JCE spec
-    @Override
-    protected int engineGenerateSecret(byte[] sharedSecret, int
-            offset) throws IllegalStateException, ShortBufferException {
-        if (offset + secretLen > sharedSecret.length) {
-            throw new ShortBufferException("Need " + secretLen
-                + " bytes, only " + (sharedSecret.length - offset) + " available");
-        }
-        byte[] secret = engineGenerateSecret();
-        System.arraycopy(secret, 0, sharedSecret, offset, secret.length);
-        return secret.length;
-    }
-
-    // see JCE spec
-    @Override
-    protected SecretKey engineGenerateSecret(String algorithm)
-            throws IllegalStateException, NoSuchAlgorithmException,
-            InvalidKeyException {
-        if (algorithm == null) {
-            throw new NoSuchAlgorithmException("Algorithm must not be null");
-        }
-        if (!(algorithm.equals("TlsPremasterSecret"))) {
-            throw new NoSuchAlgorithmException
-                ("Only supported for algorithm TlsPremasterSecret");
-        }
-        return new SecretKeySpec(engineGenerateSecret(), "TlsPremasterSecret");
-    }
-
-    /**
-     * Generates a secret key using the public and private keys.
-     *
-     * @param s the private key's S value.
-     * @param w the public key's W point (in uncompressed form).
-     * @param encodedParams the curve's DER encoded object identifier.
-     *
-     * @return byte[] the secret key.
-     */
-    private static native byte[] deriveKey(byte[] s, byte[] w,
-        byte[] encodedParams) throws GeneralSecurityException;
-}
diff --git a/ojluni/src/main/java/sun/security/ec/ECDSASignature.java b/ojluni/src/main/java/sun/security/ec/ECDSASignature.java
deleted file mode 100755
index 500a964..0000000
--- a/ojluni/src/main/java/sun/security/ec/ECDSASignature.java
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-
-package sun.security.ec;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.math.BigInteger;
-import java.util.Arrays;
-
-import java.security.*;
-import java.security.interfaces.*;
-import java.security.spec.*;
-
-import sun.security.jca.JCAUtil;
-import sun.security.util.*;
-import sun.security.x509.AlgorithmId;
-
-/**
- * ECDSA signature implementation. This class currently supports the
- * following algorithm names:
- *
- *   . "NONEwithECDSA"
- *   . "SHA1withECDSA"
- *   . "SHA256withECDSA"
- *   . "SHA384withECDSA"
- *   . "SHA512withECDSA"
- *
- * @since   1.7
- */
-abstract class ECDSASignature extends SignatureSpi {
-
-    // message digest implementation we use
-    private final MessageDigest messageDigest;
-
-    // supplied entropy
-    private SecureRandom random;
-
-    // flag indicating whether the digest has been reset
-    private boolean needsReset;
-
-    // private key, if initialized for signing
-    private ECPrivateKey privateKey;
-
-    // public key, if initialized for verifying
-    private ECPublicKey publicKey;
-
-    /**
-     * Constructs a new ECDSASignature. Used by Raw subclass.
-     *
-     * @exception ProviderException if the native ECC library is unavailable.
-     */
-    ECDSASignature() {
-        messageDigest = null;
-    }
-
-    /**
-     * Constructs a new ECDSASignature. Used by subclasses.
-     */
-    ECDSASignature(String digestName) {
-        try {
-            messageDigest = MessageDigest.getInstance(digestName);
-        } catch (NoSuchAlgorithmException e) {
-            throw new ProviderException(e);
-        }
-        needsReset = false;
-    }
-
-    // Nested class for NONEwithECDSA signatures
-    public static final class Raw extends ECDSASignature {
-
-        // the longest supported digest is 512 bits (SHA-512)
-        private static final int RAW_ECDSA_MAX = 64;
-
-        private final byte[] precomputedDigest;
-        private int offset = 0;
-
-        public Raw() {
-            precomputedDigest = new byte[RAW_ECDSA_MAX];
-        }
-
-        // Stores the precomputed message digest value.
-        @Override
-        protected void engineUpdate(byte b) throws SignatureException {
-            if (offset >= precomputedDigest.length) {
-                offset = RAW_ECDSA_MAX + 1;
-                return;
-            }
-            precomputedDigest[offset++] = b;
-        }
-
-        // Stores the precomputed message digest value.
-        @Override
-        protected void engineUpdate(byte[] b, int off, int len)
-                throws SignatureException {
-            if (offset >= precomputedDigest.length) {
-                offset = RAW_ECDSA_MAX + 1;
-                return;
-            }
-            System.arraycopy(b, off, precomputedDigest, offset, len);
-            offset += len;
-        }
-
-        // Stores the precomputed message digest value.
-        @Override
-        protected void engineUpdate(ByteBuffer byteBuffer) {
-            int len = byteBuffer.remaining();
-            if (len <= 0) {
-                return;
-            }
-            if (offset + len >= precomputedDigest.length) {
-                offset = RAW_ECDSA_MAX + 1;
-                return;
-            }
-            byteBuffer.get(precomputedDigest, offset, len);
-            offset += len;
-        }
-
-        @Override
-        protected void resetDigest(){
-            offset = 0;
-        }
-
-        // Returns the precomputed message digest value.
-        @Override
-        protected byte[] getDigestValue() throws SignatureException {
-            if (offset > RAW_ECDSA_MAX) {
-                throw new SignatureException("Message digest is too long");
-
-            }
-            byte[] result = new byte[offset];
-            System.arraycopy(precomputedDigest, 0, result, 0, offset);
-            offset = 0;
-
-            return result;
-        }
-    }
-
-    // Nested class for SHA1withECDSA signatures
-    public static final class SHA1 extends ECDSASignature {
-        public SHA1() {
-            super("SHA1");
-        }
-    }
-
-    // Nested class for SHA256withECDSA signatures
-    public static final class SHA256 extends ECDSASignature {
-        public SHA256() {
-            super("SHA-256");
-        }
-    }
-
-    // Nested class for SHA384withECDSA signatures
-    public static final class SHA384 extends ECDSASignature {
-        public SHA384() {
-            super("SHA-384");
-        }
-    }
-
-    // Nested class for SHA512withECDSA signatures
-    public static final class SHA512 extends ECDSASignature {
-        public SHA512() {
-            super("SHA-512");
-        }
-    }
-
-    // initialize for verification. See JCA doc
-    @Override
-    protected void engineInitVerify(PublicKey publicKey)
-            throws InvalidKeyException {
-        this.publicKey = (ECPublicKey) ECKeyFactory.toECKey(publicKey);
-
-        // Should check that the supplied key is appropriate for signature
-        // algorithm (e.g. P-256 for SHA256withECDSA)
-        this.privateKey = null;
-        resetDigest();
-    }
-
-    // initialize for signing. See JCA doc
-    @Override
-    protected void engineInitSign(PrivateKey privateKey)
-            throws InvalidKeyException {
-        engineInitSign(privateKey, null);
-    }
-
-    // initialize for signing. See JCA doc
-    @Override
-    protected void engineInitSign(PrivateKey privateKey, SecureRandom random)
-            throws InvalidKeyException {
-        this.privateKey = (ECPrivateKey) ECKeyFactory.toECKey(privateKey);
-
-        // Should check that the supplied key is appropriate for signature
-        // algorithm (e.g. P-256 for SHA256withECDSA)
-        this.publicKey = null;
-        this.random = random;
-        resetDigest();
-    }
-
-    /**
-     * Resets the message digest if needed.
-     */
-    protected void resetDigest() {
-        if (needsReset) {
-            if (messageDigest != null) {
-                messageDigest.reset();
-            }
-            needsReset = false;
-        }
-    }
-
-    /**
-     * Returns the message digest value.
-     */
-    protected byte[] getDigestValue() throws SignatureException {
-        needsReset = false;
-        return messageDigest.digest();
-    }
-
-    // update the signature with the plaintext data. See JCA doc
-    @Override
-    protected void engineUpdate(byte b) throws SignatureException {
-        messageDigest.update(b);
-        needsReset = true;
-    }
-
-    // update the signature with the plaintext data. See JCA doc
-    @Override
-    protected void engineUpdate(byte[] b, int off, int len)
-            throws SignatureException {
-        messageDigest.update(b, off, len);
-        needsReset = true;
-    }
-
-    // update the signature with the plaintext data. See JCA doc
-    @Override
-    protected void engineUpdate(ByteBuffer byteBuffer) {
-        int len = byteBuffer.remaining();
-        if (len <= 0) {
-            return;
-        }
-
-        messageDigest.update(byteBuffer);
-        needsReset = true;
-    }
-
-    // sign the data and return the signature. See JCA doc
-    @Override
-    protected byte[] engineSign() throws SignatureException {
-        byte[] s = privateKey.getS().toByteArray();
-        ECParameterSpec params = privateKey.getParams();
-        byte[] encodedParams = ECParameters.encodeParameters(params); // DER OID
-        int keySize = params.getCurve().getField().getFieldSize();
-
-        // seed is twice the key size (in bytes) plus 1
-        byte[] seed = new byte[(((keySize + 7) >> 3) + 1) * 2];
-        if (random == null) {
-            random = JCAUtil.getSecureRandom();
-        }
-        random.nextBytes(seed);
-
-        try {
-
-            return encodeSignature(
-                signDigest(getDigestValue(), s, encodedParams, seed));
-
-        } catch (GeneralSecurityException e) {
-            throw new SignatureException("Could not sign data", e);
-        }
-    }
-
-    // verify the data and return the result. See JCA doc
-    @Override
-    protected boolean engineVerify(byte[] signature) throws SignatureException {
-
-        byte[] w;
-        ECParameterSpec params = publicKey.getParams();
-        byte[] encodedParams = ECParameters.encodeParameters(params); // DER OID
-
-        if (publicKey instanceof ECPublicKeyImpl) {
-            w = ((ECPublicKeyImpl)publicKey).getEncodedPublicValue();
-        } else { // instanceof ECPublicKey
-            w = ECParameters.encodePoint(publicKey.getW(), params.getCurve());
-        }
-
-        try {
-
-            return verifySignedDigest(
-                decodeSignature(signature), getDigestValue(), w, encodedParams);
-
-        } catch (GeneralSecurityException e) {
-            throw new SignatureException("Could not verify signature", e);
-        }
-    }
-
-    // set parameter, not supported. See JCA doc
-    @Override
-    protected void engineSetParameter(String param, Object value)
-            throws InvalidParameterException {
-        throw new UnsupportedOperationException("setParameter() not supported");
-    }
-
-    // get parameter, not supported. See JCA doc
-    @Override
-    protected Object engineGetParameter(String param)
-            throws InvalidParameterException {
-        throw new UnsupportedOperationException("getParameter() not supported");
-    }
-
-    // Convert the concatenation of R and S into their DER encoding
-    private byte[] encodeSignature(byte[] signature) throws SignatureException {
-
-        try {
-
-            int n = signature.length >> 1;
-            byte[] bytes = new byte[n];
-            System.arraycopy(signature, 0, bytes, 0, n);
-            BigInteger r = new BigInteger(1, bytes);
-            System.arraycopy(signature, n, bytes, 0, n);
-            BigInteger s = new BigInteger(1, bytes);
-
-            DerOutputStream out = new DerOutputStream(signature.length + 10);
-            out.putInteger(r);
-            out.putInteger(s);
-            DerValue result =
-                new DerValue(DerValue.tag_Sequence, out.toByteArray());
-
-            return result.toByteArray();
-
-        } catch (Exception e) {
-            throw new SignatureException("Could not encode signature", e);
-        }
-    }
-
-    // Convert the DER encoding of R and S into a concatenation of R and S
-    private byte[] decodeSignature(byte[] signature) throws SignatureException {
-
-        try {
-            DerInputStream in = new DerInputStream(signature);
-            DerValue[] values = in.getSequence(2);
-            BigInteger r = values[0].getPositiveBigInteger();
-            BigInteger s = values[1].getPositiveBigInteger();
-            // trim leading zeroes
-            byte[] rBytes = trimZeroes(r.toByteArray());
-            byte[] sBytes = trimZeroes(s.toByteArray());
-            int k = Math.max(rBytes.length, sBytes.length);
-            // r and s each occupy half the array
-            byte[] result = new byte[k << 1];
-            System.arraycopy(rBytes, 0, result, k - rBytes.length,
-                rBytes.length);
-            System.arraycopy(sBytes, 0, result, result.length - sBytes.length,
-                sBytes.length);
-            return result;
-
-        } catch (Exception e) {
-            throw new SignatureException("Could not decode signature", e);
-        }
-    }
-
-    // trim leading (most significant) zeroes from the result
-    private static byte[] trimZeroes(byte[] b) {
-        int i = 0;
-        while ((i < b.length - 1) && (b[i] == 0)) {
-            i++;
-        }
-        if (i == 0) {
-            return b;
-        }
-        byte[] t = new byte[b.length - i];
-        System.arraycopy(b, i, t, 0, t.length);
-        return t;
-    }
-
-    /**
-     * Signs the digest using the private key.
-     *
-     * @param digest the digest to be signed.
-     * @param s the private key's S value.
-     * @param encodedParams the curve's DER encoded object identifier.
-     * @param seed the random seed.
-     *
-     * @return byte[] the signature.
-     */
-    private static native byte[] signDigest(byte[] digest, byte[] s,
-        byte[] encodedParams, byte[] seed) throws GeneralSecurityException;
-
-    /**
-     * Verifies the signed digest using the public key.
-     *
-     * @param signedDigest the signature to be verified. It is encoded
-     *        as a concatenation of the key's R and S values.
-     * @param digest the digest to be used.
-     * @param w the public key's W point (in uncompressed form).
-     * @param encodedParams the curve's DER encoded object identifier.
-     *
-     * @return boolean true if the signature is successfully verified.
-     */
-    private static native boolean verifySignedDigest(byte[] signature,
-        byte[] digest, byte[] w, byte[] encodedParams)
-            throws GeneralSecurityException;
-}
diff --git a/ojluni/src/main/java/sun/security/ec/ECKeyPairGenerator.java b/ojluni/src/main/java/sun/security/ec/ECKeyPairGenerator.java
deleted file mode 100755
index 046fb42..0000000
--- a/ojluni/src/main/java/sun/security/ec/ECKeyPairGenerator.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (c) 2009, 2011, 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.
- */
-
-package sun.security.ec;
-
-import java.math.BigInteger;
-import java.security.*;
-import java.security.spec.AlgorithmParameterSpec;
-import java.security.spec.ECGenParameterSpec;
-import java.security.spec.ECParameterSpec;
-import java.security.spec.ECPoint;
-
-import sun.security.ec.NamedCurve;
-import sun.security.ec.ECParameters;
-import sun.security.ec.ECPrivateKeyImpl;
-import sun.security.ec.ECPublicKeyImpl;
-import sun.security.jca.JCAUtil;
-
-/**
- * EC keypair generator.
- * Standard algorithm, minimum key length is 112 bits, maximum is 571 bits.
- *
- * @since 1.7
- */
-public final class ECKeyPairGenerator extends KeyPairGeneratorSpi {
-
-    private static final int KEY_SIZE_MIN = 112; // min bits (see ecc_impl.h)
-    private static final int KEY_SIZE_MAX = 571; // max bits (see ecc_impl.h)
-    private static final int KEY_SIZE_DEFAULT = 256;
-
-    // used to seed the keypair generator
-    private SecureRandom random;
-
-    // size of the key to generate, KEY_SIZE_MIN <= keySize <= KEY_SIZE_MAX
-    private int keySize;
-
-    // parameters specified via init, if any
-    private AlgorithmParameterSpec params = null;
-
-    /**
-     * Constructs a new ECKeyPairGenerator.
-     */
-    public ECKeyPairGenerator() {
-        // initialize to default in case the app does not call initialize()
-        initialize(KEY_SIZE_DEFAULT, null);
-    }
-
-    // initialize the generator. See JCA doc
-    @Override
-    public void initialize(int keySize, SecureRandom random) {
-
-        checkKeySize(keySize);
-        this.params = NamedCurve.getECParameterSpec(keySize);
-        if (params == null) {
-            throw new InvalidParameterException(
-                "No EC parameters available for key size " + keySize + " bits");
-        }
-        this.random = random;
-    }
-
-    // second initialize method. See JCA doc
-    @Override
-    public void initialize(AlgorithmParameterSpec params, SecureRandom random)
-            throws InvalidAlgorithmParameterException {
-
-        if (params instanceof ECParameterSpec) {
-            this.params = ECParameters.getNamedCurve((ECParameterSpec)params);
-            if (this.params == null) {
-                throw new InvalidAlgorithmParameterException(
-                    "Unsupported curve: " + params);
-            }
-        } else if (params instanceof ECGenParameterSpec) {
-            String name = ((ECGenParameterSpec)params).getName();
-            this.params = NamedCurve.getECParameterSpec(name);
-            if (this.params == null) {
-                throw new InvalidAlgorithmParameterException(
-                    "Unknown curve name: " + name);
-            }
-        } else {
-            throw new InvalidAlgorithmParameterException(
-                "ECParameterSpec or ECGenParameterSpec required for EC");
-        }
-        this.keySize =
-            ((ECParameterSpec)this.params).getCurve().getField().getFieldSize();
-        this.random = random;
-    }
-
-    // generate the keypair. See JCA doc
-    @Override
-    public KeyPair generateKeyPair() {
-
-        byte[] encodedParams =
-            ECParameters.encodeParameters((ECParameterSpec)params);
-
-        // seed is twice the key size (in bytes) plus 1
-        byte[] seed = new byte[(((keySize + 7) >> 3) + 1) * 2];
-        if (random == null) {
-            random = JCAUtil.getSecureRandom();
-        }
-        random.nextBytes(seed);
-
-        try {
-
-            long[] handles = generateECKeyPair(keySize, encodedParams, seed);
-
-            // The 'params' object supplied above is equivalent to the native
-            // one so there is no need to fetch it.
-
-            // handles[0] points to the native private key
-            BigInteger s = new BigInteger(1, getEncodedBytes(handles[0]));
-
-            PrivateKey privateKey =
-                new ECPrivateKeyImpl(s, (ECParameterSpec)params);
-
-            // handles[1] points to the native public key
-            ECPoint w = ECParameters.decodePoint(getEncodedBytes(handles[1]),
-                ((ECParameterSpec)params).getCurve());
-            PublicKey publicKey =
-                new ECPublicKeyImpl(w, (ECParameterSpec)params);
-
-            return new KeyPair(publicKey, privateKey);
-
-        } catch (Exception e) {
-            throw new ProviderException(e);
-        }
-    }
-
-    private void checkKeySize(int keySize) throws InvalidParameterException {
-        if (keySize < KEY_SIZE_MIN) {
-            throw new InvalidParameterException
-                ("Key size must be at least " + KEY_SIZE_MIN + " bits");
-        }
-        if (keySize > KEY_SIZE_MAX) {
-            throw new InvalidParameterException
-                ("Key size must be at most " + KEY_SIZE_MAX + " bits");
-        }
-        this.keySize = keySize;
-    }
-
-    /*
-     * Generates the keypair and returns a 2-element array of handles.
-     * The first handle points to the private key, the second to the public key.
-     */
-    private static native long[] generateECKeyPair(int keySize,
-        byte[] encodedParams, byte[] seed) throws GeneralSecurityException;
-
-    /*
-     * Extracts the encoded key data using the supplied handle.
-     */
-    private static native byte[] getEncodedBytes(long handle);
-}
diff --git a/ojluni/src/main/java/sun/security/ec/SunEC.java b/ojluni/src/main/java/sun/security/ec/SunEC.java
deleted file mode 100755
index 539cea4..0000000
--- a/ojluni/src/main/java/sun/security/ec/SunEC.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-
-package sun.security.ec;
-
-import java.util.*;
-import java.security.*;
-import sun.security.action.PutAllAction;
-
-/**
- * Provider class for the Elliptic Curve provider.
- * Supports EC keypair and parameter generation, ECDSA signing and
- * ECDH key agreement.
- *
- * IMPLEMENTATION NOTE:
- * The Java classes in this provider access a native ECC implementation
- * via JNI to a C++ wrapper class which in turn calls C functions.
- * The Java classes are packaged into the signed sunec.jar in the JRE
- * extensions directory and the C++ and C functions are packaged into
- * libsunec.so or sunec.dll in the JRE native libraries directory.
- * If the native library is not present then this provider is registered
- * with support for fewer ECC algorithms (KeyPairGenerator, Signature and
- * KeyAgreement are omitted).
- *
- * @since   1.7
- */
-public final class SunEC extends Provider {
-
-    private static final long serialVersionUID = -2279741672933606418L;
-
-    // flag indicating whether the full EC implementation is present
-    // (when native library is absent then fewer EC algorithms are available)
-    private static boolean useFullImplementation = true;
-    static {
-        try {
-            AccessController.doPrivileged(new PrivilegedAction<Void>() {
-                public Void run() {
-                    System.loadLibrary("sunec"); // check for native library
-                    return null;
-                }
-            });
-        } catch (UnsatisfiedLinkError e) {
-            useFullImplementation = false;
-        }
-    }
-
-    public SunEC() {
-        super("SunEC", 1.7d, "Sun Elliptic Curve provider (EC, ECDSA, ECDH)");
-
-        // if there is no security manager installed, put directly into
-        // the provider. Otherwise, create a temporary map and use a
-        // doPrivileged() call at the end to transfer the contents
-        if (System.getSecurityManager() == null) {
-            SunECEntries.putEntries(this, useFullImplementation);
-        } else {
-            Map<Object, Object> map = new HashMap<Object, Object>();
-            SunECEntries.putEntries(map, useFullImplementation);
-            AccessController.doPrivileged(new PutAllAction(this, map));
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/ec/SunECEntries.java b/ojluni/src/main/java/sun/security/ec/SunECEntries.java
deleted file mode 100755
index 91c5669..0000000
--- a/ojluni/src/main/java/sun/security/ec/SunECEntries.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-
-package sun.security.ec;
-
-import java.util.Map;
-
-/**
- * Defines the entries of the SunEC provider.
- *
- * @since 1.7
- */
-final class SunECEntries {
-
-    private SunECEntries() {
-        // empty
-    }
-
-    static void putEntries(Map<Object, Object> map,
-        boolean useFullImplementation) {
-
-        /*
-         *  Key Factory engine
-         */
-        map.put("KeyFactory.EC", "sun.security.ec.ECKeyFactory");
-        map.put("Alg.Alias.KeyFactory.EllipticCurve", "EC");
-
-        map.put("KeyFactory.EC ImplementedIn", "Software");
-
-        /*
-         * Algorithm Parameter engine
-         */
-        map.put("AlgorithmParameters.EC", "sun.security.ec.ECParameters");
-        map.put("Alg.Alias.AlgorithmParameters.EllipticCurve", "EC");
-
-        map.put("AlgorithmParameters.EC KeySize", "256");
-
-        map.put("AlgorithmParameters.EC ImplementedIn", "Software");
-
-        map.put("AlgorithmParameters.EC SupportedCurves",
-
-            // A list comprising lists of curve names and object identifiers.
-            // '[' ( <curve-name> ',' )+ <curve-object-identifier> ']' '|'
-
-            // SEC 2 prime curves
-            "[secp112r1,1.3.132.0.6]|" +
-            "[secp112r2,1.3.132.0.7]|" +
-            "[secp128r1,1.3.132.0.28]|" +
-            "[secp128r2,1.3.132.0.29]|" +
-            "[secp160k1,1.3.132.0.9]|" +
-            "[secp160r1,1.3.132.0.8]|" +
-            "[secp160r2,1.3.132.0.30]|" +
-            "[secp192k1,1.3.132.0.31]|" +
-            "[secp192r1,NIST P-192,X9.62 prime192v1,1.2.840.10045.3.1.1]|" +
-            "[secp224k1,1.3.132.0.32]|" +
-            "[secp224r1,NIST P-224,1.3.132.0.33]|" +
-            "[secp256k1,1.3.132.0.10]|" +
-            "[secp256r1,NIST P-256,X9.62 prime256v1,1.2.840.10045.3.1.7]|" +
-            "[secp384r1,NIST P-384,1.3.132.0.34]|" +
-            "[secp521r1,NIST P-521,1.3.132.0.35]|" +
-
-            // ANSI X9.62 prime curves
-            "[X9.62 prime192v2,1.2.840.10045.3.1.2]|" +
-            "[X9.62 prime192v3,1.2.840.10045.3.1.3]|" +
-            "[X9.62 prime239v1,1.2.840.10045.3.1.4]|" +
-            "[X9.62 prime239v2,1.2.840.10045.3.1.5]|" +
-            "[X9.62 prime239v3,1.2.840.10045.3.1.6]|" +
-
-            // SEC 2 binary curves
-            "[sect113r1,1.3.132.0.4]|" +
-            "[sect113r2,1.3.132.0.5]|" +
-            "[sect131r1,1.3.132.0.22]|" +
-            "[sect131r2,1.3.132.0.23]|" +
-            "[sect163k1,NIST K-163,1.3.132.0.1]|" +
-            "[sect163r1,1.3.132.0.2]|" +
-            "[sect163r2,NIST B-163,1.3.132.0.15]|" +
-            "[sect193r1,1.3.132.0.24]|" +
-            "[sect193r2,1.3.132.0.25]|" +
-            "[sect233k1,NIST K-233,1.3.132.0.26]|" +
-            "[sect233r1,NIST B-233,1.3.132.0.27]|" +
-            "[sect239k1,1.3.132.0.3]|" +
-            "[sect283k1,NIST K-283,1.3.132.0.16]|" +
-            "[sect283r1,NIST B-283,1.3.132.0.17]|" +
-            "[sect409k1,NIST K-409,1.3.132.0.36]|" +
-            "[sect409r1,NIST B-409,1.3.132.0.37]|" +
-            "[sect571k1,NIST K-571,1.3.132.0.38]|" +
-            "[sect571r1,NIST B-571,1.3.132.0.39]|" +
-
-            // ANSI X9.62 binary curves
-            "[X9.62 c2tnb191v1,1.2.840.10045.3.0.5]|" +
-            "[X9.62 c2tnb191v2,1.2.840.10045.3.0.6]|" +
-            "[X9.62 c2tnb191v3,1.2.840.10045.3.0.7]|" +
-            "[X9.62 c2tnb239v1,1.2.840.10045.3.0.11]|" +
-            "[X9.62 c2tnb239v2,1.2.840.10045.3.0.12]|" +
-            "[X9.62 c2tnb239v3,1.2.840.10045.3.0.13]|" +
-            "[X9.62 c2tnb359v1,1.2.840.10045.3.0.18]|" +
-            "[X9.62 c2tnb431r1,1.2.840.10045.3.0.20]");
-
-        /*
-         * Register the algorithms below only when the full ECC implementation
-         * is available
-         */
-        if (!useFullImplementation) {
-            return;
-        }
-
-        /*
-         * Signature engines
-         */
-        map.put("Signature.NONEwithECDSA",
-            "sun.security.ec.ECDSASignature$Raw");
-        map.put("Signature.SHA1withECDSA",
-            "sun.security.ec.ECDSASignature$SHA1");
-        map.put("Signature.SHA256withECDSA",
-            "sun.security.ec.ECDSASignature$SHA256");
-        map.put("Signature.SHA384withECDSA",
-            "sun.security.ec.ECDSASignature$SHA384");
-        map.put("Signature.SHA512withECDSA",
-            "sun.security.ec.ECDSASignature$SHA512");
-
-        String ecKeyClasses = "java.security.interfaces.ECPublicKey" +
-                "|java.security.interfaces.ECPrivateKey";
-        map.put("Signature.NONEwithECDSA SupportedKeyClasses", ecKeyClasses);
-        map.put("Signature.SHA1withECDSA SupportedKeyClasses", ecKeyClasses);
-        map.put("Signature.SHA256withECDSA SupportedKeyClasses", ecKeyClasses);
-        map.put("Signature.SHA384withECDSA SupportedKeyClasses", ecKeyClasses);
-        map.put("Signature.SHA512withECDSA SupportedKeyClasses", ecKeyClasses);
-
-        map.put("Signature.SHA1withECDSA KeySize", "256");
-
-        map.put("Signature.NONEwithECDSA ImplementedIn", "Software");
-        map.put("Signature.SHA1withECDSA ImplementedIn", "Software");
-        map.put("Signature.SHA256withECDSA ImplementedIn", "Software");
-        map.put("Signature.SHA384withECDSA ImplementedIn", "Software");
-        map.put("Signature.SHA512withECDSA ImplementedIn", "Software");
-
-        /*
-         *  Key Pair Generator engine
-         */
-        map.put("KeyPairGenerator.EC", "sun.security.ec.ECKeyPairGenerator");
-        map.put("Alg.Alias.KeyPairGenerator.EllipticCurve", "EC");
-
-        map.put("KeyPairGenerator.EC KeySize", "256");
-
-        map.put("KeyPairGenerator.EC ImplementedIn", "Software");
-
-        /*
-         * Key Agreement engine
-         */
-        map.put("KeyAgreement.ECDH", "sun.security.ec.ECDHKeyAgreement");
-
-        map.put("KeyAgreement.ECDH SupportedKeyClasses", ecKeyClasses);
-
-        map.put("KeyAgreement.ECDH ImplementedIn", "Software");
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/pkcs/EncodingException.java b/ojluni/src/main/java/sun/security/pkcs/EncodingException.java
deleted file mode 100755
index 81650cd..0000000
--- a/ojluni/src/main/java/sun/security/pkcs/EncodingException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-/**
- * Generic PKCS Encoding exception.
- *
- * @author Benjamin Renaud
- */
-
-package sun.security.pkcs;
-
-public class EncodingException extends Exception {
-
-    private static final long serialVersionUID = 4060198374240668325L;
-
-    public EncodingException() {
-        super();
-    }
-
-    public EncodingException(String s) {
-        super(s);
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/pkcs/EncryptedPrivateKeyInfo.java b/ojluni/src/main/java/sun/security/pkcs/EncryptedPrivateKeyInfo.java
deleted file mode 100755
index d9a5dcf..0000000
--- a/ojluni/src/main/java/sun/security/pkcs/EncryptedPrivateKeyInfo.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (c) 1998, 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.
- */
-
-package sun.security.pkcs;
-
-import java.io.*;
-import sun.security.x509.*;
-import sun.security.util.DerValue;
-import sun.security.util.DerOutputStream;
-
-/**
- * This class implements the <code>EncryptedPrivateKeyInfo</code> type,
- * which is defined in PKCS #8 as follows:
- *
- * <pre>
- * EncryptedPrivateKeyInfo ::=  SEQUENCE {
- *     encryptionAlgorithm   AlgorithmIdentifier,
- *     encryptedData   OCTET STRING }
- * </pre>
- *
- * @author Jan Luehe
- *
- */
-
-public class EncryptedPrivateKeyInfo {
-
-    // the "encryptionAlgorithm" field
-    private AlgorithmId algid;
-
-    // the "encryptedData" field
-    private byte[] encryptedData;
-
-    // the ASN.1 encoded contents of this class
-    private byte[] encoded;
-
-    /**
-     * Constructs (i.e., parses) an <code>EncryptedPrivateKeyInfo</code> from
-     * its encoding.
-     */
-    public EncryptedPrivateKeyInfo(byte[] encoded)
-        throws IOException
-    {
-        if (encoded == null) {
-            throw new IllegalArgumentException("encoding must not be null");
-        }
-
-        DerValue val = new DerValue(encoded);
-
-        DerValue[] seq = new DerValue[2];
-
-        seq[0] = val.data.getDerValue();
-        seq[1] = val.data.getDerValue();
-
-        if (val.data.available() != 0) {
-            throw new IOException("overrun, bytes = " + val.data.available());
-        }
-
-        this.algid = AlgorithmId.parse(seq[0]);
-        if (seq[0].data.available() != 0) {
-            throw new IOException("encryptionAlgorithm field overrun");
-        }
-
-        this.encryptedData = seq[1].getOctetString();
-        if (seq[1].data.available() != 0)
-            throw new IOException("encryptedData field overrun");
-
-        this.encoded = encoded.clone();
-    }
-
-    /**
-     * Constructs an <code>EncryptedPrivateKeyInfo</code> from the
-     * encryption algorithm and the encrypted data.
-     */
-    public EncryptedPrivateKeyInfo(AlgorithmId algid, byte[] encryptedData) {
-        this.algid = algid;
-        this.encryptedData = encryptedData.clone();
-    }
-
-    /**
-     * Returns the encryption algorithm.
-     */
-    public AlgorithmId getAlgorithm() {
-        return this.algid;
-    }
-
-    /**
-     * Returns the encrypted data.
-     */
-    public byte[] getEncryptedData() {
-        return this.encryptedData.clone();
-    }
-
-    /**
-     * Returns the ASN.1 encoding of this class.
-     */
-    public byte[] getEncoded()
-        throws IOException
-    {
-        if (this.encoded != null) return this.encoded.clone();
-
-        DerOutputStream out = new DerOutputStream();
-        DerOutputStream tmp = new DerOutputStream();
-
-        // encode encryption algorithm
-        algid.encode(tmp);
-
-        // encode encrypted data
-        tmp.putOctetString(encryptedData);
-
-        // wrap everything into a SEQUENCE
-        out.write(DerValue.tag_Sequence, tmp);
-        this.encoded = out.toByteArray();
-
-        return this.encoded.clone();
-    }
-
-    public boolean equals(Object other) {
-        if (this == other)
-            return true;
-        if (!(other instanceof EncryptedPrivateKeyInfo))
-            return false;
-        try {
-            byte[] thisEncrInfo = this.getEncoded();
-            byte[] otherEncrInfo
-                = ((EncryptedPrivateKeyInfo)other).getEncoded();
-
-            if (thisEncrInfo.length != otherEncrInfo.length)
-                return false;
-            for (int i = 0; i < thisEncrInfo.length; i++)
-                 if (thisEncrInfo[i] != otherEncrInfo[i])
-                     return false;
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-
-    /**
-     * Returns a hashcode for this EncryptedPrivateKeyInfo.
-     *
-     * @return a hashcode for this EncryptedPrivateKeyInfo.
-     */
-    public int hashCode() {
-        int retval = 0;
-
-        for (int i = 0; i < this.encryptedData.length; i++)
-            retval += this.encryptedData[i] * i;
-        return retval;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/pkcs/PKCS10.java b/ojluni/src/main/java/sun/security/pkcs/PKCS10.java
deleted file mode 100755
index a1c0b9f..0000000
--- a/ojluni/src/main/java/sun/security/pkcs/PKCS10.java
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- * Copyright (c) 1996, 2002, 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.
- */
-
-
-package sun.security.pkcs;
-
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-import java.io.IOException;
-import java.math.BigInteger;
-
-import java.security.cert.CertificateException;
-import java.security.NoSuchAlgorithmException;
-import java.security.InvalidKeyException;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.security.PublicKey;
-
-import sun.misc.BASE64Encoder;
-
-import sun.security.util.*;
-import sun.security.x509.AlgorithmId;
-import sun.security.x509.X509Key;
-import sun.security.x509.X500Name;
-
-/**
- * A PKCS #10 certificate request is created and sent to a Certificate
- * Authority, which then creates an X.509 certificate and returns it to
- * the entity that requested it. A certificate request basically consists
- * of the subject's X.500 name, public key, and optionally some attributes,
- * signed using the corresponding private key.
- *
- * The ASN.1 syntax for a Certification Request is:
- * <pre>
- * CertificationRequest ::= SEQUENCE {
- *    certificationRequestInfo CertificationRequestInfo,
- *    signatureAlgorithm       SignatureAlgorithmIdentifier,
- *    signature                Signature
- *  }
- *
- * SignatureAlgorithmIdentifier ::= AlgorithmIdentifier
- * Signature ::= BIT STRING
- *
- * CertificationRequestInfo ::= SEQUENCE {
- *    version                 Version,
- *    subject                 Name,
- *    subjectPublicKeyInfo    SubjectPublicKeyInfo,
- *    attributes [0] IMPLICIT Attributes
- * }
- * Attributes ::= SET OF Attribute
- * </pre>
- *
- * @author David Brownell
- * @author Amit Kapoor
- * @author Hemma Prafullchandra
- */
-public class PKCS10 {
-    /**
-     * Constructs an unsigned PKCS #10 certificate request.  Before this
-     * request may be used, it must be encoded and signed.  Then it
-     * must be retrieved in some conventional format (e.g. string).
-     *
-     * @param publicKey the public key that should be placed
-     *          into the certificate generated by the CA.
-     */
-    public PKCS10(PublicKey publicKey) {
-        subjectPublicKeyInfo = publicKey;
-        attributeSet = new PKCS10Attributes();
-    }
-
-    /**
-     * Constructs an unsigned PKCS #10 certificate request.  Before this
-     * request may be used, it must be encoded and signed.  Then it
-     * must be retrieved in some conventional format (e.g. string).
-     *
-     * @param publicKey the public key that should be placed
-     *          into the certificate generated by the CA.
-     * @param attributes additonal set of PKCS10 attributes requested
-     *          for in the certificate.
-     */
-    public PKCS10(PublicKey publicKey, PKCS10Attributes attributes) {
-        subjectPublicKeyInfo = publicKey;
-        attributeSet = attributes;
-    }
-
-    /**
-     * Parses an encoded, signed PKCS #10 certificate request, verifying
-     * the request's signature as it does so.  This constructor would
-     * typically be used by a Certificate Authority, from which a new
-     * certificate would then be constructed.
-     *
-     * @param data the DER-encoded PKCS #10 request.
-     * @exception IOException for low level errors reading the data
-     * @exception SignatureException when the signature is invalid
-     * @exception NoSuchAlgorithmException when the signature
-     *  algorithm is not supported in this environment
-     */
-    public PKCS10(byte[] data)
-    throws IOException, SignatureException, NoSuchAlgorithmException {
-        DerInputStream  in;
-        DerValue[]      seq;
-        AlgorithmId     id;
-        byte[]          sigData;
-        Signature       sig;
-
-        encoded = data;
-
-        //
-        // Outer sequence:  request, signature algorithm, signature.
-        // Parse, and prepare to verify later.
-        //
-        in = new DerInputStream(data);
-        seq = in.getSequence(3);
-
-        if (seq.length != 3)
-            throw new IllegalArgumentException("not a PKCS #10 request");
-
-        data = seq[0].toByteArray();            // reusing this variable
-        id = AlgorithmId.parse(seq[1]);
-        sigData = seq[2].getBitString();
-
-        //
-        // Inner sequence:  version, name, key, attributes
-        //
-        BigInteger      serial;
-        DerValue        val;
-
-        serial = seq[0].data.getBigInteger();
-        if (!serial.equals(BigInteger.ZERO))
-            throw new IllegalArgumentException("not PKCS #10 v1");
-
-        subject = new X500Name(seq[0].data);
-        subjectPublicKeyInfo = X509Key.parse(seq[0].data.getDerValue());
-
-        // Cope with a somewhat common illegal PKCS #10 format
-        if (seq[0].data.available() != 0)
-            attributeSet = new PKCS10Attributes(seq[0].data);
-        else
-            attributeSet = new PKCS10Attributes();
-
-        if (seq[0].data.available() != 0)
-            throw new IllegalArgumentException("illegal PKCS #10 data");
-
-        //
-        // OK, we parsed it all ... validate the signature using the
-        // key and signature algorithm we found.
-        //
-        try {
-            sig = Signature.getInstance(id.getName());
-            sig.initVerify(subjectPublicKeyInfo);
-            sig.update(data);
-            if (!sig.verify(sigData))
-                throw new SignatureException("Invalid PKCS #10 signature");
-        } catch (InvalidKeyException e) {
-            throw new SignatureException("invalid key");
-        }
-    }
-
-    /**
-     * Create the signed certificate request.  This will later be
-     * retrieved in either string or binary format.
-     *
-     * @param subject identifies the signer (by X.500 name).
-     * @param signature private key and signing algorithm to use.
-     * @exception IOException on errors.
-     * @exception CertificateException on certificate handling errors.
-     * @exception SignatureException on signature handling errors.
-     */
-    public void encodeAndSign(X500Name subject, Signature signature)
-    throws CertificateException, IOException, SignatureException {
-        DerOutputStream out, scratch;
-        byte[]          certificateRequestInfo;
-        byte[]          sig;
-
-        if (encoded != null)
-            throw new SignatureException("request is already signed");
-
-        this.subject = subject;
-
-        /*
-         * Encode cert request info, wrap in a sequence for signing
-         */
-        scratch = new DerOutputStream();
-        scratch.putInteger(BigInteger.ZERO);            // PKCS #10 v1.0
-        subject.encode(scratch);                        // X.500 name
-        scratch.write(subjectPublicKeyInfo.getEncoded()); // public key
-        attributeSet.encode(scratch);
-
-        out = new DerOutputStream();
-        out.write(DerValue.tag_Sequence, scratch);      // wrap it!
-        certificateRequestInfo = out.toByteArray();
-        scratch = out;
-
-        /*
-         * Sign it ...
-         */
-        signature.update(certificateRequestInfo, 0,
-                certificateRequestInfo.length);
-        sig = signature.sign();
-
-        /*
-         * Build guts of SIGNED macro
-         */
-        AlgorithmId algId = null;
-        try {
-            algId = AlgorithmId.getAlgorithmId(signature.getAlgorithm());
-        } catch (NoSuchAlgorithmException nsae) {
-            throw new SignatureException(nsae);
-        }
-        algId.encode(scratch);     // sig algorithm
-        scratch.putBitString(sig);                      // sig
-
-        /*
-         * Wrap those guts in a sequence
-         */
-        out = new DerOutputStream();
-        out.write(DerValue.tag_Sequence, scratch);
-        encoded = out.toByteArray();
-    }
-
-    /**
-     * Returns the subject's name.
-     */
-    public X500Name getSubjectName() { return subject; }
-
-    /**
-     * Returns the subject's public key.
-     */
-    public PublicKey getSubjectPublicKeyInfo()
-        { return subjectPublicKeyInfo; }
-
-    /**
-     * Returns the additional attributes requested.
-     */
-    public PKCS10Attributes getAttributes()
-        { return attributeSet; }
-
-    /**
-     * Returns the encoded and signed certificate request as a
-     * DER-encoded byte array.
-     *
-     * @return the certificate request, or null if encodeAndSign()
-     *          has not yet been called.
-     */
-    public byte[] getEncoded() {
-        if (encoded != null)
-            return encoded.clone();
-        else
-            return null;
-    }
-
-    /**
-     * Prints an E-Mailable version of the certificate request on the print
-     * stream passed.  The format is a common base64 encoded one, supported
-     * by most Certificate Authorities because Netscape web servers have
-     * used this for some time.  Some certificate authorities expect some
-     * more information, in particular contact information for the web
-     * server administrator.
-     *
-     * @param out the print stream where the certificate request
-     *  will be printed.
-     * @exception IOException when an output operation failed
-     * @exception SignatureException when the certificate request was
-     *  not yet signed.
-     */
-    public void print(PrintStream out)
-    throws IOException, SignatureException {
-        if (encoded == null)
-            throw new SignatureException("Cert request was not signed");
-
-        BASE64Encoder   encoder = new BASE64Encoder();
-
-        out.println("-----BEGIN NEW CERTIFICATE REQUEST-----");
-        encoder.encodeBuffer(encoded, out);
-        out.println("-----END NEW CERTIFICATE REQUEST-----");
-    }
-
-    /**
-     * Provides a short description of this request.
-     */
-    public String toString() {
-        return "[PKCS #10 certificate request:\n"
-            + subjectPublicKeyInfo.toString()
-            + " subject: <" + subject + ">" + "\n"
-            + " attributes: " + attributeSet.toString()
-            + "\n]";
-    }
-
-    /**
-     * Compares this object for equality with the specified
-     * object. If the <code>other</code> object is an
-     * <code>instanceof</code> <code>PKCS10</code>, then
-     * its encoded form is retrieved and compared with the
-     * encoded form of this certificate request.
-     *
-     * @param other the object to test for equality with this object.
-     * @return true iff the encoded forms of the two certificate
-     * requests match, false otherwise.
-     */
-    public boolean equals(Object other) {
-        if (this == other)
-            return true;
-        if (!(other instanceof PKCS10))
-            return false;
-        if (encoded == null) // not signed yet
-            return false;
-        byte[] otherEncoded = ((PKCS10)other).getEncoded();
-        if (otherEncoded == null)
-            return false;
-
-        return java.util.Arrays.equals(encoded, otherEncoded);
-    }
-
-    /**
-     * Returns a hashcode value for this certificate request from its
-     * encoded form.
-     *
-     * @return the hashcode value.
-     */
-    public int hashCode() {
-        int     retval = 0;
-        if (encoded != null)
-            for (int i = 1; i < encoded.length; i++)
-             retval += encoded[i] * i;
-        return(retval);
-    }
-
-    private X500Name            subject;
-    private PublicKey           subjectPublicKeyInfo;
-    private PKCS10Attributes    attributeSet;
-    private byte[]              encoded;        // signed
-}
diff --git a/ojluni/src/main/java/sun/security/pkcs/PKCS10Attribute.java b/ojluni/src/main/java/sun/security/pkcs/PKCS10Attribute.java
deleted file mode 100755
index a838131..0000000
--- a/ojluni/src/main/java/sun/security/pkcs/PKCS10Attribute.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 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.
- */
-
-package sun.security.pkcs;
-
-import java.io.OutputStream;
-import java.io.IOException;
-
-import sun.security.util.*;
-
-/**
- * Represent a PKCS#10 Attribute.
- *
- * <p>Attributes are additonal information which can be inserted in a PKCS#10
- * certificate request. For example a "Driving License Certificate" could have
- * the driving license number as an attribute.
- *
- * <p>Attributes are represented as a sequence of the attribute identifier
- * (Object Identifier) and a set of DER encoded attribute values.
- *
- * ASN.1 definition of Attribute:
- * <pre>
- * Attribute :: SEQUENCE {
- *    type    AttributeType,
- *    values  SET OF AttributeValue
- * }
- * AttributeType  ::= OBJECT IDENTIFIER
- * AttributeValue ::= ANY defined by type
- * </pre>
- *
- * @author Amit Kapoor
- * @author Hemma Prafullchandra
- */
-public class PKCS10Attribute implements DerEncoder {
-
-    protected ObjectIdentifier  attributeId = null;
-    protected Object            attributeValue = null;
-
-    /**
-     * Constructs an attribute from a DER encoding.
-     * This constructor expects the value to be encoded as defined above,
-     * i.e. a SEQUENCE of OID and SET OF value(s), not a literal
-     * X.509 v3 extension. Only PKCS9 defined attributes are supported
-     * currently.
-     *
-     * @param derVal the der encoded attribute.
-     * @exception IOException on parsing errors.
-     */
-    public PKCS10Attribute(DerValue derVal) throws IOException {
-        PKCS9Attribute attr = new PKCS9Attribute(derVal);
-        this.attributeId = attr.getOID();
-        this.attributeValue = attr.getValue();
-    }
-
-    /**
-     * Constructs an attribute from individual components of
-     * ObjectIdentifier and the value (any java object).
-     *
-     * @param attributeId the ObjectIdentifier of the attribute.
-     * @param attributeValue an instance of a class that implements
-     * the attribute identified by the ObjectIdentifier.
-     */
-    public PKCS10Attribute(ObjectIdentifier attributeId,
-                           Object attributeValue) {
-        this.attributeId = attributeId;
-        this.attributeValue = attributeValue;
-    }
-
-    /**
-     * Constructs an attribute from PKCS9 attribute.
-     *
-     * @param attr the PKCS9Attribute to create from.
-     */
-    public PKCS10Attribute(PKCS9Attribute attr) {
-        this.attributeId = attr.getOID();
-        this.attributeValue = attr.getValue();
-    }
-
-    /**
-     * DER encode this object onto an output stream.
-     * Implements the <code>DerEncoder</code> interface.
-     *
-     * @param out
-     * the OutputStream on which to write the DER encoding.
-     *
-     * @exception IOException on encoding errors.
-     */
-    public void derEncode(OutputStream out) throws IOException {
-        PKCS9Attribute attr = new PKCS9Attribute(attributeId, attributeValue);
-        attr.derEncode(out);
-    }
-
-    /**
-     * Returns the ObjectIdentifier of the attribute.
-     */
-    public ObjectIdentifier getAttributeId() {
-        return (attributeId);
-    }
-
-    /**
-     * Returns the attribute value.
-     */
-    public Object getAttributeValue() {
-        return (attributeValue);
-    }
-
-    /**
-     * Returns the attribute in user readable form.
-     */
-    public String toString() {
-        return (attributeValue.toString());
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/pkcs/PKCS10Attributes.java b/ojluni/src/main/java/sun/security/pkcs/PKCS10Attributes.java
deleted file mode 100755
index 8279ae2..0000000
--- a/ojluni/src/main/java/sun/security/pkcs/PKCS10Attributes.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.
- */
-
-package sun.security.pkcs;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.security.cert.CertificateException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-import sun.security.util.*;
-
-/**
- * This class defines the PKCS10 attributes for the request.
- * The ASN.1 syntax for this is:
- * <pre>
- * Attributes ::= SET OF Attribute
- * </pre>
- *
- * @author Amit Kapoor
- * @author Hemma Prafullchandra
- * @see PKCS10
- * @see PKCS10Attribute
- */
-public class PKCS10Attributes implements DerEncoder {
-
-    private Hashtable<String, PKCS10Attribute> map =
-                        new Hashtable<String, PKCS10Attribute>(3);
-
-    /**
-     * Default constructor for the PKCS10 attribute.
-     */
-    public PKCS10Attributes() { }
-
-    /**
-     * Create the object from the array of PKCS10Attribute objects.
-     *
-     * @param attrs the array of PKCS10Attribute objects.
-     */
-    public PKCS10Attributes(PKCS10Attribute[] attrs) {
-        for (int i = 0; i < attrs.length; i++) {
-            map.put(attrs[i].getAttributeId().toString(), attrs[i]);
-        }
-    }
-
-    /**
-     * Create the object, decoding the values from the passed DER stream.
-     * The DER stream contains the SET OF Attribute.
-     *
-     * @param in the DerInputStream to read the attributes from.
-     * @exception IOException on decoding errors.
-     */
-    public PKCS10Attributes(DerInputStream in) throws IOException {
-        DerValue[] attrs = in.getSet(3, true);
-
-        if (attrs == null)
-            throw new IOException("Illegal encoding of attributes");
-        for (int i = 0; i < attrs.length; i++) {
-            PKCS10Attribute attr = new PKCS10Attribute(attrs[i]);
-            map.put(attr.getAttributeId().toString(), attr);
-        }
-    }
-
-    /**
-     * Encode the attributes in DER form to the stream.
-     *
-     * @param out the OutputStream to marshal the contents to.
-     * @exception IOException on encoding errors.
-     */
-    public void encode(OutputStream out) throws IOException {
-        derEncode(out);
-    }
-
-    /**
-     * Encode the attributes in DER form to the stream.
-     * Implements the <code>DerEncoder</code> interface.
-     *
-     * @param out the OutputStream to marshal the contents to.
-     * @exception IOException on encoding errors.
-     */
-    public void derEncode(OutputStream out) throws IOException {
-        // first copy the elements into an array
-        Collection<PKCS10Attribute> allAttrs = map.values();
-        PKCS10Attribute[] attribs =
-                allAttrs.toArray(new PKCS10Attribute[map.size()]);
-
-        DerOutputStream attrOut = new DerOutputStream();
-        attrOut.putOrderedSetOf(DerValue.createTag(DerValue.TAG_CONTEXT,
-                                                   true, (byte)0),
-                                attribs);
-        out.write(attrOut.toByteArray());
-    }
-
-    /**
-     * Set the attribute value.
-     */
-    public void setAttribute(String name, Object obj) {
-        if (obj instanceof PKCS10Attribute) {
-            map.put(name, (PKCS10Attribute)obj);
-        }
-    }
-
-    /**
-     * Get the attribute value.
-     */
-    public Object getAttribute(String name) {
-        return map.get(name);
-    }
-
-    /**
-     * Delete the attribute value.
-     */
-    public void deleteAttribute(String name) {
-        map.remove(name);
-    }
-
-    /**
-     * Return an enumeration of names of attributes existing within this
-     * attribute.
-     */
-    public Enumeration<PKCS10Attribute> getElements() {
-        return (map.elements());
-    }
-
-    /**
-     * Return a Collection of attributes existing within this
-     * PKCS10Attributes object.
-     */
-    public Collection<PKCS10Attribute> getAttributes() {
-        return (Collections.unmodifiableCollection(map.values()));
-    }
-
-    /**
-     * Compares this PKCS10Attributes for equality with the specified
-     * object. If the <code>other</code> object is an
-     * <code>instanceof</code> <code>PKCS10Attributes</code>, then
-     * all the entries are compared with the entries from this.
-     *
-     * @param other the object to test for equality with this PKCS10Attributes.
-     * @return true if all the entries match that of the Other,
-     * false otherwise.
-     */
-    public boolean equals(Object other) {
-        if (this == other)
-            return true;
-        if (!(other instanceof PKCS10Attributes))
-            return false;
-
-        Collection<PKCS10Attribute> othersAttribs =
-                ((PKCS10Attributes)other).getAttributes();
-        PKCS10Attribute[] attrs =
-            othersAttribs.toArray(new PKCS10Attribute[othersAttribs.size()]);
-        int len = attrs.length;
-        if (len != map.size())
-            return false;
-        PKCS10Attribute thisAttr, otherAttr;
-        String key = null;
-        for (int i=0; i < len; i++) {
-            otherAttr = attrs[i];
-            key = otherAttr.getAttributeId().toString();
-
-            if (key == null)
-                return false;
-            thisAttr = map.get(key);
-            if (thisAttr == null)
-                return false;
-            if (! thisAttr.equals(otherAttr))
-                return false;
-        }
-        return true;
-    }
-
-    /**
-     * Returns a hashcode value for this PKCS10Attributes.
-     *
-     * @return the hashcode value.
-     */
-    public int hashCode() {
-        return map.hashCode();
-    }
-
-    /**
-     * Returns a string representation of this <tt>PKCS10Attributes</tt> object
-     * in the form of a set of entries, enclosed in braces and separated
-     * by the ASCII characters "<tt>,&nbsp;</tt>" (comma and space).
-     * <p>Overrides the <tt>toString</tt> method of <tt>Object</tt>.
-     *
-     * @return  a string representation of this PKCS10Attributes.
-     */
-    public String toString() {
-        String s = map.size() + "\n" + map.toString();
-        return s;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/ByteArrayAccess.java b/ojluni/src/main/java/sun/security/provider/ByteArrayAccess.java
deleted file mode 100755
index 1c76413..0000000
--- a/ojluni/src/main/java/sun/security/provider/ByteArrayAccess.java
+++ /dev/null
@@ -1,423 +0,0 @@
-/*
- * Copyright (c) 2006, 2012, 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.
- */
-
-package sun.security.provider;
-
-import static java.lang.Integer.reverseBytes;
-import static java.lang.Long.reverseBytes;
-
-import java.nio.ByteOrder;
-
-import sun.misc.Unsafe;
-
-/**
- * Optimized methods for converting between byte[] and int[]/long[], both for
- * big endian and little endian byte orders.
- *
- * Currently, it includes a default code path plus two optimized code paths.
- * One is for little endian architectures that support full speed int/long
- * access at unaligned addresses (i.e. x86/amd64). The second is for big endian
- * architectures (that only support correctly aligned access), such as SPARC.
- * These are the only platforms we currently support, but other optimized
- * variants could be added as needed.
- *
- * NOTE that because this code performs unchecked direct memory access, it
- * MUST be restricted to trusted code. It is imperative that the caller protects
- * against out of bounds memory access by performing the necessary bounds
- * checks before calling methods in this class.
- *
- * This class may also be helpful in improving the performance of the
- * crypto code in the SunJCE provider. However, for now it is only accessible by
- * the message digest implementation in the SUN provider.
- *
- * @since   1.6
- * @author  Andreas Sterbenz
- */
-final class ByteArrayAccess {
-
-    private ByteArrayAccess() {
-        // empty
-    }
-
-    private static final Unsafe unsafe = Unsafe.getUnsafe();
-
-    // whether to use the optimized path for little endian platforms that
-    // support full speed unaligned memory access.
-    private static final boolean littleEndianUnaligned;
-
-    // whether to use the optimzied path for big endian platforms that
-    // support only correctly aligned full speed memory access.
-    // (Note that on SPARC unaligned memory access is possible, but it is
-    // implemented using a software trap and therefore very slow)
-    private static final boolean bigEndian;
-
-    private final static int byteArrayOfs = unsafe.arrayBaseOffset(byte[].class);
-
-    static {
-        boolean scaleOK = ((unsafe.arrayIndexScale(byte[].class) == 1)
-            && (unsafe.arrayIndexScale(int[].class) == 4)
-            && (unsafe.arrayIndexScale(long[].class) == 8)
-            && ((byteArrayOfs & 3) == 0));
-
-        ByteOrder byteOrder = ByteOrder.nativeOrder();
-        littleEndianUnaligned =
-            scaleOK && unaligned() && (byteOrder == ByteOrder.LITTLE_ENDIAN);
-        bigEndian =
-            scaleOK && (byteOrder == ByteOrder.BIG_ENDIAN);
-    }
-
-    // Return whether this platform supports full speed int/long memory access
-    // at unaligned addresses.
-    // This code was copied from java.nio.Bits because there is no equivalent
-    // public API.
-    private static boolean unaligned() {
-        String arch = java.security.AccessController.doPrivileged
-            (new sun.security.action.GetPropertyAction("os.arch", ""));
-        return arch.equals("i386") || arch.equals("x86") || arch.equals("amd64")
-            || arch.equals("x86_64");
-    }
-
-    /**
-     * byte[] to int[] conversion, little endian byte order.
-     */
-    static void b2iLittle(byte[] in, int inOfs, int[] out, int outOfs, int len) {
-        if (littleEndianUnaligned) {
-            inOfs += byteArrayOfs;
-            len += inOfs;
-            while (inOfs < len) {
-                out[outOfs++] = unsafe.getInt(in, (long)inOfs);
-                inOfs += 4;
-            }
-        } else if (bigEndian && ((inOfs & 3) == 0)) {
-            inOfs += byteArrayOfs;
-            len += inOfs;
-            while (inOfs < len) {
-                out[outOfs++] = reverseBytes(unsafe.getInt(in, (long)inOfs));
-                inOfs += 4;
-            }
-        } else {
-            len += inOfs;
-            while (inOfs < len) {
-                out[outOfs++] = ((in[inOfs    ] & 0xff)      )
-                              | ((in[inOfs + 1] & 0xff) <<  8)
-                              | ((in[inOfs + 2] & 0xff) << 16)
-                              | ((in[inOfs + 3]       ) << 24);
-                inOfs += 4;
-            }
-        }
-    }
-
-    // Special optimization of b2iLittle(in, inOfs, out, 0, 64)
-    static void b2iLittle64(byte[] in, int inOfs, int[] out) {
-        if (littleEndianUnaligned) {
-            inOfs += byteArrayOfs;
-            out[ 0] = unsafe.getInt(in, (long)(inOfs     ));
-            out[ 1] = unsafe.getInt(in, (long)(inOfs +  4));
-            out[ 2] = unsafe.getInt(in, (long)(inOfs +  8));
-            out[ 3] = unsafe.getInt(in, (long)(inOfs + 12));
-            out[ 4] = unsafe.getInt(in, (long)(inOfs + 16));
-            out[ 5] = unsafe.getInt(in, (long)(inOfs + 20));
-            out[ 6] = unsafe.getInt(in, (long)(inOfs + 24));
-            out[ 7] = unsafe.getInt(in, (long)(inOfs + 28));
-            out[ 8] = unsafe.getInt(in, (long)(inOfs + 32));
-            out[ 9] = unsafe.getInt(in, (long)(inOfs + 36));
-            out[10] = unsafe.getInt(in, (long)(inOfs + 40));
-            out[11] = unsafe.getInt(in, (long)(inOfs + 44));
-            out[12] = unsafe.getInt(in, (long)(inOfs + 48));
-            out[13] = unsafe.getInt(in, (long)(inOfs + 52));
-            out[14] = unsafe.getInt(in, (long)(inOfs + 56));
-            out[15] = unsafe.getInt(in, (long)(inOfs + 60));
-        } else if (bigEndian && ((inOfs & 3) == 0)) {
-            inOfs += byteArrayOfs;
-            out[ 0] = reverseBytes(unsafe.getInt(in, (long)(inOfs     )));
-            out[ 1] = reverseBytes(unsafe.getInt(in, (long)(inOfs +  4)));
-            out[ 2] = reverseBytes(unsafe.getInt(in, (long)(inOfs +  8)));
-            out[ 3] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 12)));
-            out[ 4] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 16)));
-            out[ 5] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 20)));
-            out[ 6] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 24)));
-            out[ 7] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 28)));
-            out[ 8] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 32)));
-            out[ 9] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 36)));
-            out[10] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 40)));
-            out[11] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 44)));
-            out[12] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 48)));
-            out[13] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 52)));
-            out[14] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 56)));
-            out[15] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 60)));
-        } else {
-            b2iLittle(in, inOfs, out, 0, 64);
-        }
-    }
-
-    /**
-     * int[] to byte[] conversion, little endian byte order.
-     */
-    static void i2bLittle(int[] in, int inOfs, byte[] out, int outOfs, int len) {
-        if (littleEndianUnaligned) {
-            outOfs += byteArrayOfs;
-            len += outOfs;
-            while (outOfs < len) {
-                unsafe.putInt(out, (long)outOfs, in[inOfs++]);
-                outOfs += 4;
-            }
-        } else if (bigEndian && ((outOfs & 3) == 0)) {
-            outOfs += byteArrayOfs;
-            len += outOfs;
-            while (outOfs < len) {
-                unsafe.putInt(out, (long)outOfs, reverseBytes(in[inOfs++]));
-                outOfs += 4;
-            }
-        } else {
-            len += outOfs;
-            while (outOfs < len) {
-                int i = in[inOfs++];
-                out[outOfs++] = (byte)(i      );
-                out[outOfs++] = (byte)(i >>  8);
-                out[outOfs++] = (byte)(i >> 16);
-                out[outOfs++] = (byte)(i >> 24);
-            }
-        }
-    }
-
-    // Store one 32-bit value into out[outOfs..outOfs+3] in little endian order.
-    static void i2bLittle4(int val, byte[] out, int outOfs) {
-        if (littleEndianUnaligned) {
-            unsafe.putInt(out, (long)(byteArrayOfs + outOfs), val);
-        } else if (bigEndian && ((outOfs & 3) == 0)) {
-            unsafe.putInt(out, (long)(byteArrayOfs + outOfs), reverseBytes(val));
-        } else {
-            out[outOfs    ] = (byte)(val      );
-            out[outOfs + 1] = (byte)(val >>  8);
-            out[outOfs + 2] = (byte)(val >> 16);
-            out[outOfs + 3] = (byte)(val >> 24);
-        }
-    }
-
-    /**
-     * byte[] to int[] conversion, big endian byte order.
-     */
-    static void b2iBig(byte[] in, int inOfs, int[] out, int outOfs, int len) {
-        if (littleEndianUnaligned) {
-            inOfs += byteArrayOfs;
-            len += inOfs;
-            while (inOfs < len) {
-                out[outOfs++] = reverseBytes(unsafe.getInt(in, (long)inOfs));
-                inOfs += 4;
-            }
-        } else if (bigEndian && ((inOfs & 3) == 0)) {
-            inOfs += byteArrayOfs;
-            len += inOfs;
-            while (inOfs < len) {
-                out[outOfs++] = unsafe.getInt(in, (long)inOfs);
-                inOfs += 4;
-            }
-        } else {
-            len += inOfs;
-            while (inOfs < len) {
-                out[outOfs++] = ((in[inOfs + 3] & 0xff)      )
-                              | ((in[inOfs + 2] & 0xff) <<  8)
-                              | ((in[inOfs + 1] & 0xff) << 16)
-                              | ((in[inOfs    ]       ) << 24);
-                inOfs += 4;
-            }
-        }
-    }
-
-    // Special optimization of b2iBig(in, inOfs, out, 0, 64)
-    static void b2iBig64(byte[] in, int inOfs, int[] out) {
-        if (littleEndianUnaligned) {
-            inOfs += byteArrayOfs;
-            out[ 0] = reverseBytes(unsafe.getInt(in, (long)(inOfs     )));
-            out[ 1] = reverseBytes(unsafe.getInt(in, (long)(inOfs +  4)));
-            out[ 2] = reverseBytes(unsafe.getInt(in, (long)(inOfs +  8)));
-            out[ 3] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 12)));
-            out[ 4] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 16)));
-            out[ 5] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 20)));
-            out[ 6] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 24)));
-            out[ 7] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 28)));
-            out[ 8] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 32)));
-            out[ 9] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 36)));
-            out[10] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 40)));
-            out[11] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 44)));
-            out[12] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 48)));
-            out[13] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 52)));
-            out[14] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 56)));
-            out[15] = reverseBytes(unsafe.getInt(in, (long)(inOfs + 60)));
-        } else if (bigEndian && ((inOfs & 3) == 0)) {
-            inOfs += byteArrayOfs;
-            out[ 0] = unsafe.getInt(in, (long)(inOfs     ));
-            out[ 1] = unsafe.getInt(in, (long)(inOfs +  4));
-            out[ 2] = unsafe.getInt(in, (long)(inOfs +  8));
-            out[ 3] = unsafe.getInt(in, (long)(inOfs + 12));
-            out[ 4] = unsafe.getInt(in, (long)(inOfs + 16));
-            out[ 5] = unsafe.getInt(in, (long)(inOfs + 20));
-            out[ 6] = unsafe.getInt(in, (long)(inOfs + 24));
-            out[ 7] = unsafe.getInt(in, (long)(inOfs + 28));
-            out[ 8] = unsafe.getInt(in, (long)(inOfs + 32));
-            out[ 9] = unsafe.getInt(in, (long)(inOfs + 36));
-            out[10] = unsafe.getInt(in, (long)(inOfs + 40));
-            out[11] = unsafe.getInt(in, (long)(inOfs + 44));
-            out[12] = unsafe.getInt(in, (long)(inOfs + 48));
-            out[13] = unsafe.getInt(in, (long)(inOfs + 52));
-            out[14] = unsafe.getInt(in, (long)(inOfs + 56));
-            out[15] = unsafe.getInt(in, (long)(inOfs + 60));
-        } else {
-            b2iBig(in, inOfs, out, 0, 64);
-        }
-    }
-
-    /**
-     * int[] to byte[] conversion, big endian byte order.
-     */
-    static void i2bBig(int[] in, int inOfs, byte[] out, int outOfs, int len) {
-        if (littleEndianUnaligned) {
-            outOfs += byteArrayOfs;
-            len += outOfs;
-            while (outOfs < len) {
-                unsafe.putInt(out, (long)outOfs, reverseBytes(in[inOfs++]));
-                outOfs += 4;
-            }
-        } else if (bigEndian && ((outOfs & 3) == 0)) {
-            outOfs += byteArrayOfs;
-            len += outOfs;
-            while (outOfs < len) {
-                unsafe.putInt(out, (long)outOfs, in[inOfs++]);
-                outOfs += 4;
-            }
-        } else {
-            len += outOfs;
-            while (outOfs < len) {
-                int i = in[inOfs++];
-                out[outOfs++] = (byte)(i >> 24);
-                out[outOfs++] = (byte)(i >> 16);
-                out[outOfs++] = (byte)(i >>  8);
-                out[outOfs++] = (byte)(i      );
-            }
-        }
-    }
-
-    // Store one 32-bit value into out[outOfs..outOfs+3] in big endian order.
-    static void i2bBig4(int val, byte[] out, int outOfs) {
-        if (littleEndianUnaligned) {
-            unsafe.putInt(out, (long)(byteArrayOfs + outOfs), reverseBytes(val));
-        } else if (bigEndian && ((outOfs & 3) == 0)) {
-            unsafe.putInt(out, (long)(byteArrayOfs + outOfs), val);
-        } else {
-            out[outOfs    ] = (byte)(val >> 24);
-            out[outOfs + 1] = (byte)(val >> 16);
-            out[outOfs + 2] = (byte)(val >>  8);
-            out[outOfs + 3] = (byte)(val      );
-        }
-    }
-
-    /**
-     * byte[] to long[] conversion, big endian byte order.
-     */
-    static void b2lBig(byte[] in, int inOfs, long[] out, int outOfs, int len) {
-        if (littleEndianUnaligned) {
-            inOfs += byteArrayOfs;
-            len += inOfs;
-            while (inOfs < len) {
-                out[outOfs++] = reverseBytes(unsafe.getLong(in, (long)inOfs));
-                inOfs += 8;
-            }
-        } else if (bigEndian && ((inOfs & 3) == 0)) {
-            // In the current HotSpot memory layout, the first element of a
-            // byte[] is only 32-bit aligned, not 64-bit.
-            // That means we could use getLong() only for offset 4, 12, etc.,
-            // which would rarely occur in practice. Instead, we use an
-            // optimization that uses getInt() so that it works for offset 0.
-            inOfs += byteArrayOfs;
-            len += inOfs;
-            while (inOfs < len) {
-                out[outOfs++] =
-                      ((long)unsafe.getInt(in, (long)inOfs) << 32)
-                          | (unsafe.getInt(in, (long)(inOfs + 4)) & 0xffffffffL);
-                inOfs += 8;
-            }
-        } else {
-            len += inOfs;
-            while (inOfs < len) {
-                int i1 = ((in[inOfs + 3] & 0xff)      )
-                       | ((in[inOfs + 2] & 0xff) <<  8)
-                       | ((in[inOfs + 1] & 0xff) << 16)
-                       | ((in[inOfs    ]       ) << 24);
-                inOfs += 4;
-                int i2 = ((in[inOfs + 3] & 0xff)      )
-                       | ((in[inOfs + 2] & 0xff) <<  8)
-                       | ((in[inOfs + 1] & 0xff) << 16)
-                       | ((in[inOfs    ]       ) << 24);
-                out[outOfs++] = ((long)i1 << 32) | (i2 & 0xffffffffL);
-                inOfs += 4;
-            }
-        }
-    }
-
-    // Special optimization of b2lBig(in, inOfs, out, 0, 128)
-    static void b2lBig128(byte[] in, int inOfs, long[] out) {
-        if (littleEndianUnaligned) {
-            inOfs += byteArrayOfs;
-            out[ 0] = reverseBytes(unsafe.getLong(in, (long)(inOfs      )));
-            out[ 1] = reverseBytes(unsafe.getLong(in, (long)(inOfs +   8)));
-            out[ 2] = reverseBytes(unsafe.getLong(in, (long)(inOfs +  16)));
-            out[ 3] = reverseBytes(unsafe.getLong(in, (long)(inOfs +  24)));
-            out[ 4] = reverseBytes(unsafe.getLong(in, (long)(inOfs +  32)));
-            out[ 5] = reverseBytes(unsafe.getLong(in, (long)(inOfs +  40)));
-            out[ 6] = reverseBytes(unsafe.getLong(in, (long)(inOfs +  48)));
-            out[ 7] = reverseBytes(unsafe.getLong(in, (long)(inOfs +  56)));
-            out[ 8] = reverseBytes(unsafe.getLong(in, (long)(inOfs +  64)));
-            out[ 9] = reverseBytes(unsafe.getLong(in, (long)(inOfs +  72)));
-            out[10] = reverseBytes(unsafe.getLong(in, (long)(inOfs +  80)));
-            out[11] = reverseBytes(unsafe.getLong(in, (long)(inOfs +  88)));
-            out[12] = reverseBytes(unsafe.getLong(in, (long)(inOfs +  96)));
-            out[13] = reverseBytes(unsafe.getLong(in, (long)(inOfs + 104)));
-            out[14] = reverseBytes(unsafe.getLong(in, (long)(inOfs + 112)));
-            out[15] = reverseBytes(unsafe.getLong(in, (long)(inOfs + 120)));
-        } else {
-            // no optimization for big endian, see comments in b2lBig
-            b2lBig(in, inOfs, out, 0, 128);
-        }
-    }
-
-    /**
-     * long[] to byte[] conversion, big endian byte order.
-     */
-    static void l2bBig(long[] in, int inOfs, byte[] out, int outOfs, int len) {
-        len += outOfs;
-        while (outOfs < len) {
-            long i = in[inOfs++];
-            out[outOfs++] = (byte)(i >> 56);
-            out[outOfs++] = (byte)(i >> 48);
-            out[outOfs++] = (byte)(i >> 40);
-            out[outOfs++] = (byte)(i >> 32);
-            out[outOfs++] = (byte)(i >> 24);
-            out[outOfs++] = (byte)(i >> 16);
-            out[outOfs++] = (byte)(i >>  8);
-            out[outOfs++] = (byte)(i      );
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/provider/ConfigSpiFile.java b/ojluni/src/main/java/sun/security/provider/ConfigSpiFile.java
deleted file mode 100755
index 998e263..0000000
--- a/ojluni/src/main/java/sun/security/provider/ConfigSpiFile.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-package sun.security.provider;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.URIParameter;
-
-import javax.security.auth.login.Configuration;
-import javax.security.auth.login.ConfigurationSpi;
-import javax.security.auth.login.AppConfigurationEntry;
-
-import com.sun.security.auth.login.ConfigFile;
-
-/**
- * This class wraps the ConfigFile subclass implementation of Configuration
- * inside a ConfigurationSpi implementation that is available from the
- * SUN provider via the Configuration.getInstance calls.
- *
- */
-public final class ConfigSpiFile extends ConfigurationSpi {
-
-    private ConfigFile cf;
-
-    public ConfigSpiFile(final Configuration.Parameters params)
-        throws java.io.IOException {
-
-        // call in a doPrivileged
-        //
-        // we have already passed the Configuration.getInstance
-        // security check.  also this class is not freely accessible
-        // (it is in the "sun" package).
-        //
-        // we can not put doPrivileged calls into
-        // ConfigFile because it is a public com.sun class
-
-        try {
-            AccessController.doPrivileged(new PrivilegedAction<Void>() {
-            public Void run() {
-                if (params == null) {
-                    cf = new ConfigFile();
-                } else {
-                    if (!(params instanceof URIParameter)) {
-                        throw new IllegalArgumentException
-                                ("Unrecognized parameter: " + params);
-                    }
-                    URIParameter uriParam = (URIParameter)params;
-
-                    cf = new ConfigFile(uriParam.getURI());
-                }
-                return null;
-            }
-            });
-        } catch (SecurityException se) {
-
-            // if ConfigFile threw a standalone SecurityException
-            // (no cause), re-throw it.
-            //
-            // ConfigFile chains checked IOExceptions to SecurityException.
-
-            Throwable cause = se.getCause();
-            if (cause != null && cause instanceof java.io.IOException) {
-                throw (java.io.IOException)cause;
-            }
-
-            // unrecognized cause
-            throw se;
-        }
-
-        // if ConfigFile throws some other RuntimeException,
-        // let it percolate up naturally.
-    }
-
-    protected AppConfigurationEntry[] engineGetAppConfigurationEntry
-                (String name) {
-        return cf.getAppConfigurationEntry(name);
-    }
-
-    protected void engineRefresh() {
-        cf.refresh();
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/DSA.java b/ojluni/src/main/java/sun/security/provider/DSA.java
deleted file mode 100755
index a59679c..0000000
--- a/ojluni/src/main/java/sun/security/provider/DSA.java
+++ /dev/null
@@ -1,678 +0,0 @@
-/*
- * Copyright (c) 1996, 2004, 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.
- */
-
-package sun.security.provider;
-
-import java.io.*;
-import java.util.*;
-import java.math.BigInteger;
-import java.nio.ByteBuffer;
-
-import java.security.*;
-import java.security.SecureRandom;
-import java.security.interfaces.*;
-import java.security.spec.DSAParameterSpec;
-import java.security.spec.InvalidParameterSpecException;
-
-import sun.security.util.Debug;
-import sun.security.util.DerValue;
-import sun.security.util.DerInputStream;
-import sun.security.util.DerOutputStream;
-import sun.security.x509.AlgIdDSA;
-import sun.security.jca.JCAUtil;
-
-/**
- * The Digital Signature Standard (using the Digital Signature
- * Algorithm), as described in fips186 of the National Instute of
- * Standards and Technology (NIST), using fips180-1 (SHA-1).
- *
- * This file contains both the signature implementation for the
- * commonly used SHA1withDSA (DSS) as well as RawDSA, used by TLS
- * among others. RawDSA expects the 20 byte SHA-1 digest as input
- * via update rather than the original data like other signature
- * implementations.
- *
- * @author Benjamin Renaud
- *
- * @since   1.1
- *
- * @see DSAPublicKey
- * @see DSAPrivateKey
- */
-abstract class DSA extends SignatureSpi {
-
-    /* Are we debugging? */
-    private static final boolean debug = false;
-
-    /* The parameter object */
-    private DSAParams params;
-
-    /* algorithm parameters */
-    private BigInteger presetP, presetQ, presetG;
-
-    /* The public key, if any */
-    private BigInteger presetY;
-
-    /* The private key, if any */
-    private BigInteger presetX;
-
-    /* The random seed used to generate k */
-    private int[] Kseed;
-
-    /* The random seed used to generate k (specified by application) */
-    private byte[] KseedAsByteArray;
-
-    /*
-     * The random seed used to generate k
-     * (prevent the same Kseed from being used twice in a row
-     */
-    private int[] previousKseed;
-
-    /* The RNG used to output a seed for generating k */
-    private SecureRandom signingRandom;
-
-    /**
-     * Construct a blank DSA object. It must be
-     * initialized before being usable for signing or verifying.
-     */
-    DSA() {
-        super();
-    }
-
-    /**
-     * Return the 20 byte hash value and reset the digest.
-     */
-    abstract byte[] getDigest() throws SignatureException;
-
-    /**
-     * Reset the digest.
-     */
-    abstract void resetDigest();
-
-    /**
-     * Standard SHA1withDSA implementation.
-     */
-    public static final class SHA1withDSA extends DSA {
-
-        /* The SHA hash for the data */
-        private final MessageDigest dataSHA;
-
-        public SHA1withDSA() throws NoSuchAlgorithmException {
-            dataSHA = MessageDigest.getInstance("SHA-1");
-        }
-
-        /**
-         * Update a byte to be signed or verified.
-         */
-        protected void engineUpdate(byte b) {
-            dataSHA.update(b);
-        }
-
-        /**
-         * Update an array of bytes to be signed or verified.
-         */
-        protected void engineUpdate(byte[] data, int off, int len) {
-            dataSHA.update(data, off, len);
-        }
-
-        protected void engineUpdate(ByteBuffer b) {
-            dataSHA.update(b);
-        }
-
-        byte[] getDigest() {
-            return dataSHA.digest();
-        }
-
-        void resetDigest() {
-            dataSHA.reset();
-        }
-    }
-
-    /**
-     * RawDSA implementation.
-     *
-     * RawDSA requires the data to be exactly 20 bytes long. If it is
-     * not, a SignatureException is thrown when sign()/verify() is called
-     * per JCA spec.
-     */
-    public static final class RawDSA extends DSA {
-
-        // length of the SHA-1 digest (20 bytes)
-        private final static int SHA1_LEN = 20;
-
-        // 20 byte digest buffer
-        private final byte[] digestBuffer;
-
-        // offset into the buffer
-        private int ofs;
-
-        public RawDSA() {
-            digestBuffer = new byte[SHA1_LEN];
-        }
-
-        protected void engineUpdate(byte b) {
-            if (ofs == SHA1_LEN) {
-                ofs = SHA1_LEN + 1;
-                return;
-            }
-            digestBuffer[ofs++] = b;
-        }
-
-        protected void engineUpdate(byte[] data, int off, int len) {
-            if (ofs + len > SHA1_LEN) {
-                ofs = SHA1_LEN + 1;
-                return;
-            }
-            System.arraycopy(data, off, digestBuffer, ofs, len);
-            ofs += len;
-        }
-
-        byte[] getDigest() throws SignatureException {
-            if (ofs != SHA1_LEN) {
-                throw new SignatureException
-                        ("Data for RawDSA must be exactly 20 bytes long");
-            }
-            ofs = 0;
-            return digestBuffer;
-        }
-
-        void resetDigest() {
-            ofs = 0;
-        }
-    }
-
-    /**
-     * Initialize the DSA object with a DSA private key.
-     *
-     * @param privateKey the DSA private key
-     *
-     * @exception InvalidKeyException if the key is not a valid DSA private
-     * key.
-     */
-    protected void engineInitSign(PrivateKey privateKey)
-            throws InvalidKeyException {
-        if (!(privateKey instanceof java.security.interfaces.DSAPrivateKey)) {
-            throw new InvalidKeyException("not a DSA private key: " +
-                                          privateKey);
-        }
-        java.security.interfaces.DSAPrivateKey priv =
-            (java.security.interfaces.DSAPrivateKey)privateKey;
-        this.presetX = priv.getX();
-        this.presetY = null;
-        initialize(priv.getParams());
-    }
-
-    /**
-     * Initialize the DSA object with a DSA public key.
-     *
-     * @param publicKey the DSA public key.
-     *
-     * @exception InvalidKeyException if the key is not a valid DSA public
-     * key.
-     */
-    protected void engineInitVerify(PublicKey publicKey)
-            throws InvalidKeyException {
-        if (!(publicKey instanceof java.security.interfaces.DSAPublicKey)) {
-            throw new InvalidKeyException("not a DSA public key: " +
-                                          publicKey);
-        }
-        java.security.interfaces.DSAPublicKey pub =
-            (java.security.interfaces.DSAPublicKey)publicKey;
-        this.presetY = pub.getY();
-        this.presetX = null;
-        initialize(pub.getParams());
-    }
-
-    private void initialize(DSAParams params) throws InvalidKeyException {
-        resetDigest();
-        setParams(params);
-    }
-
-    /**
-     * Sign all the data thus far updated. The signature is formatted
-     * according to the Canonical Encoding Rules, returned as a DER
-     * sequence of Integer, r and s.
-     *
-     * @return a signature block formatted according to the Canonical
-     * Encoding Rules.
-     *
-     * @exception SignatureException if the signature object was not
-     * properly initialized, or if another exception occurs.
-     *
-     * @see sun.security.DSA#engineUpdate
-     * @see sun.security.DSA#engineVerify
-     */
-    protected byte[] engineSign() throws SignatureException {
-        BigInteger k = generateK(presetQ);
-        BigInteger r = generateR(presetP, presetQ, presetG, k);
-        BigInteger s = generateS(presetX, presetQ, r, k);
-
-        try {
-            DerOutputStream outseq = new DerOutputStream(100);
-            outseq.putInteger(r);
-            outseq.putInteger(s);
-            DerValue result = new DerValue(DerValue.tag_Sequence,
-                                           outseq.toByteArray());
-
-            return result.toByteArray();
-
-        } catch (IOException e) {
-            throw new SignatureException("error encoding signature");
-        }
-    }
-
-    /**
-     * Verify all the data thus far updated.
-     *
-     * @param signature the alledged signature, encoded using the
-     * Canonical Encoding Rules, as a sequence of integers, r and s.
-     *
-     * @exception SignatureException if the signature object was not
-     * properly initialized, or if another exception occurs.
-     *
-     * @see sun.security.DSA#engineUpdate
-     * @see sun.security.DSA#engineSign
-     */
-    protected boolean engineVerify(byte[] signature)
-            throws SignatureException {
-        return engineVerify(signature, 0, signature.length);
-    }
-
-    /**
-     * Verify all the data thus far updated.
-     *
-     * @param signature the alledged signature, encoded using the
-     * Canonical Encoding Rules, as a sequence of integers, r and s.
-     *
-     * @param offset the offset to start from in the array of bytes.
-     *
-     * @param length the number of bytes to use, starting at offset.
-     *
-     * @exception SignatureException if the signature object was not
-     * properly initialized, or if another exception occurs.
-     *
-     * @see sun.security.DSA#engineUpdate
-     * @see sun.security.DSA#engineSign
-     */
-    protected boolean engineVerify(byte[] signature, int offset, int length)
-            throws SignatureException {
-
-        BigInteger r = null;
-        BigInteger s = null;
-        // first decode the signature.
-        try {
-            DerInputStream in = new DerInputStream(signature, offset, length);
-            DerValue[] values = in.getSequence(2);
-
-            r = values[0].getBigInteger();
-            s = values[1].getBigInteger();
-
-        } catch (IOException e) {
-            throw new SignatureException("invalid encoding for signature");
-        }
-
-        // some implementations do not correctly encode values in the ASN.1
-        // 2's complement format. force r and s to be positive in order to
-        // to validate those signatures
-        if (r.signum() < 0) {
-            r = new BigInteger(1, r.toByteArray());
-        }
-        if (s.signum() < 0) {
-            s = new BigInteger(1, s.toByteArray());
-        }
-
-        if ((r.compareTo(presetQ) == -1) && (s.compareTo(presetQ) == -1)) {
-            BigInteger w = generateW(presetP, presetQ, presetG, s);
-            BigInteger v = generateV(presetY, presetP, presetQ, presetG, w, r);
-            return v.equals(r);
-        } else {
-            throw new SignatureException("invalid signature: out of range values");
-        }
-    }
-
-    private BigInteger generateR(BigInteger p, BigInteger q, BigInteger g,
-                         BigInteger k) {
-        BigInteger temp = g.modPow(k, p);
-        return temp.remainder(q);
-   }
-
-    private BigInteger generateS(BigInteger x, BigInteger q,
-            BigInteger r, BigInteger k) throws SignatureException {
-
-        byte[] s2 = getDigest();
-        BigInteger temp = new BigInteger(1, s2);
-        BigInteger k1 = k.modInverse(q);
-
-        BigInteger s = x.multiply(r);
-        s = temp.add(s);
-        s = k1.multiply(s);
-        return s.remainder(q);
-    }
-
-    private BigInteger generateW(BigInteger p, BigInteger q,
-                         BigInteger g, BigInteger s) {
-        return s.modInverse(q);
-    }
-
-    private BigInteger generateV(BigInteger y, BigInteger p,
-             BigInteger q, BigInteger g, BigInteger w, BigInteger r)
-             throws SignatureException {
-
-        byte[] s2 = getDigest();
-        BigInteger temp = new BigInteger(1, s2);
-
-        temp = temp.multiply(w);
-        BigInteger u1 = temp.remainder(q);
-
-        BigInteger u2 = (r.multiply(w)).remainder(q);
-
-        BigInteger t1 = g.modPow(u1,p);
-        BigInteger t2 = y.modPow(u2,p);
-        BigInteger t3 = t1.multiply(t2);
-        BigInteger t5 = t3.remainder(p);
-        return t5.remainder(q);
-    }
-
-    /*
-     * Please read bug report 4044247 for an alternative, faster,
-     * NON-FIPS approved method to generate K
-     */
-    private BigInteger generateK(BigInteger q) {
-
-        BigInteger k = null;
-
-        // The application specified a Kseed for us to use.
-        // Note that we do not allow usage of the same Kseed twice in a row
-        if (Kseed != null && !Arrays.equals(Kseed, previousKseed)) {
-            k = generateK(Kseed, q);
-            if (k.signum() > 0 && k.compareTo(q) < 0) {
-                previousKseed = new int [Kseed.length];
-                System.arraycopy(Kseed, 0, previousKseed, 0, Kseed.length);
-                return k;
-            }
-        }
-
-        // The application did not specify a Kseed for us to use.
-        // We'll generate a new Kseed by getting random bytes from
-        // a SecureRandom object.
-        SecureRandom random = getSigningRandom();
-
-        while (true) {
-            int[] seed = new int[5];
-
-            for (int i = 0; i < 5; i++)
-                seed[i] = random.nextInt();
-            k = generateK(seed, q);
-            if (k.signum() > 0 && k.compareTo(q) < 0) {
-                previousKseed = new int [seed.length];
-                System.arraycopy(seed, 0, previousKseed, 0, seed.length);
-                return k;
-            }
-        }
-    }
-
-    // Use the application-specified SecureRandom Object if provided.
-    // Otherwise, use our default SecureRandom Object.
-    private SecureRandom getSigningRandom() {
-        if (signingRandom == null) {
-            if (appRandom != null) {
-                signingRandom = appRandom;
-            } else {
-                signingRandom = JCAUtil.getSecureRandom();
-            }
-        }
-        return signingRandom;
-    }
-
-    /**
-     * Compute k for a DSA signature.
-     *
-     * @param seed the seed for generating k. This seed should be
-     * secure. This is what is refered to as the KSEED in the DSA
-     * specification.
-     *
-     * @param g the g parameter from the DSA key pair.
-     */
-    private BigInteger generateK(int[] seed, BigInteger q) {
-
-        // check out t in the spec.
-        int[] t = { 0xEFCDAB89, 0x98BADCFE, 0x10325476,
-                    0xC3D2E1F0, 0x67452301 };
-        //
-        int[] tmp = DSA.SHA_7(seed, t);
-        byte[] tmpBytes = new byte[tmp.length * 4];
-        for (int i = 0; i < tmp.length; i++) {
-            int k = tmp[i];
-            for (int j = 0; j < 4; j++) {
-                tmpBytes[(i * 4) + j] = (byte) (k >>> (24 - (j * 8)));
-            }
-        }
-        BigInteger k = new BigInteger(1, tmpBytes).mod(q);
-        return k;
-    }
-
-   // Constants for each round
-    private static final int round1_kt = 0x5a827999;
-    private static final int round2_kt = 0x6ed9eba1;
-    private static final int round3_kt = 0x8f1bbcdc;
-    private static final int round4_kt = 0xca62c1d6;
-
-   /**
-    * Computes set 1 thru 7 of SHA-1 on m1. */
-   static int[] SHA_7(int[] m1, int[] h) {
-
-       int[] W = new int[80];
-       System.arraycopy(m1,0,W,0,m1.length);
-       int temp = 0;
-
-        for (int t = 16; t <= 79; t++){
-            temp = W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16];
-            W[t] = ((temp << 1) | (temp >>>(32 - 1)));
-        }
-
-       int a = h[0],b = h[1],c = h[2], d = h[3], e = h[4];
-       for (int i = 0; i < 20; i++) {
-            temp = ((a<<5) | (a>>>(32-5))) +
-                ((b&c)|((~b)&d))+ e + W[i] + round1_kt;
-            e = d;
-            d = c;
-            c = ((b<<30) | (b>>>(32-30)));
-            b = a;
-            a = temp;
-        }
-
-        // Round 2
-        for (int i = 20; i < 40; i++) {
-            temp = ((a<<5) | (a>>>(32-5))) +
-                (b ^ c ^ d) + e + W[i] + round2_kt;
-            e = d;
-            d = c;
-            c = ((b<<30) | (b>>>(32-30)));
-            b = a;
-            a = temp;
-        }
-
-        // Round 3
-        for (int i = 40; i < 60; i++) {
-            temp = ((a<<5) | (a>>>(32-5))) +
-                ((b&c)|(b&d)|(c&d)) + e + W[i] + round3_kt;
-            e = d;
-            d = c;
-            c = ((b<<30) | (b>>>(32-30)));
-            b = a;
-            a = temp;
-        }
-
-        // Round 4
-        for (int i = 60; i < 80; i++) {
-            temp = ((a<<5) | (a>>>(32-5))) +
-                (b ^ c ^ d) + e + W[i] + round4_kt;
-            e = d;
-            d = c;
-            c = ((b<<30) | (b>>>(32-30)));
-            b = a;
-            a = temp;
-        }
-       int[] md = new int[5];
-       md[0] = h[0] + a;
-       md[1] = h[1] + b;
-       md[2] = h[2] + c;
-       md[3] = h[3] + d;
-       md[4] = h[4] + e;
-       return md;
-   }
-
-
-    /**
-     * This implementation recognizes the following parameter:<dl>
-     *
-     * <dt><tt>Kseed</tt>
-     *
-     * <dd>a byte array.
-     *
-     * </dl>
-     *
-     * @deprecated
-     */
-    @Deprecated
-    protected void engineSetParameter(String key, Object param) {
-        if (key.equals("KSEED")) {
-            if (param instanceof byte[]) {
-                Kseed = byteArray2IntArray((byte[])param);
-                KseedAsByteArray = (byte[])param;
-            } else {
-                debug("unrecognized param: " + key);
-                throw new InvalidParameterException("Kseed not a byte array");
-            }
-        } else {
-            throw new InvalidParameterException("invalid parameter");
-        }
-    }
-
-    /**
-     * Return the value of the requested parameter. Recognized
-     * parameters are:
-     *
-     * <dl>
-     *
-     * <dt><tt>Kseed</tt>
-     *
-     * <dd>a byte array.
-     *
-     * </dl>
-     *
-     * @return the value of the requested parameter.
-     *
-     * @see java.security.SignatureEngine
-     *
-     * @deprecated
-     */
-    @Deprecated
-    protected Object engineGetParameter(String key) {
-        if (key.equals("KSEED")) {
-            return KseedAsByteArray;
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Set the algorithm object.
-     */
-    private void setParams(DSAParams params) throws InvalidKeyException {
-        if (params == null) {
-            throw new InvalidKeyException("DSA public key lacks parameters");
-        }
-        this.params = params;
-        this.presetP = params.getP();
-        this.presetQ = params.getQ();
-        this.presetG = params.getG();
-    }
-
-    /**
-     * Return a human readable rendition of the engine.
-     */
-    public String toString() {
-        String printable = "DSA Signature";
-        if (presetP != null && presetQ != null && presetG != null) {
-            printable += "\n\tp: " + Debug.toHexString(presetP);
-            printable += "\n\tq: " + Debug.toHexString(presetQ);
-            printable += "\n\tg: " + Debug.toHexString(presetG);
-        } else {
-            printable += "\n\t P, Q or G not initialized.";
-        }
-        if (presetY != null) {
-            printable += "\n\ty: " + Debug.toHexString(presetY);
-        }
-        if (presetY == null && presetX == null) {
-            printable += "\n\tUNINIIALIZED";
-        }
-        return printable;
-    }
-
-    /*
-     * Utility routine for converting a byte array into an int array
-     */
-    private int[] byteArray2IntArray(byte[] byteArray) {
-
-        int j = 0;
-        byte[] newBA;
-        int mod = byteArray.length % 4;
-
-        // guarantee that the incoming byteArray is a multiple of 4
-        // (pad with 0's)
-        switch (mod) {
-            case 3:     newBA = new byte[byteArray.length + 1]; break;
-            case 2:     newBA = new byte[byteArray.length + 2]; break;
-            case 1:     newBA = new byte[byteArray.length + 3]; break;
-            default:    newBA = new byte[byteArray.length + 0]; break;
-        }
-        System.arraycopy(byteArray, 0, newBA, 0, byteArray.length);
-
-        // copy each set of 4 bytes in the byte array into an integer
-        int[] newSeed = new int[newBA.length / 4];
-        for (int i = 0; i < newBA.length; i += 4) {
-            newSeed[j] = newBA[i + 3] & 0xFF;
-            newSeed[j] |= (newBA[i + 2] << 8) & 0xFF00;
-            newSeed[j] |= (newBA[i + 1] << 16) & 0xFF0000;
-            newSeed[j] |= (newBA[i + 0] << 24) & 0xFF000000;
-            j++;
-        }
-
-        return newSeed;
-    }
-
-    private static void debug(Exception e) {
-        if (debug) {
-            e.printStackTrace();
-        }
-    }
-
-    private static void debug(String s) {
-        if (debug) {
-            System.err.println(s);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/DSAKeyFactory.java b/ojluni/src/main/java/sun/security/provider/DSAKeyFactory.java
deleted file mode 100755
index ea74aff..0000000
--- a/ojluni/src/main/java/sun/security/provider/DSAKeyFactory.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.
- */
-
-package sun.security.provider;
-
-import java.util.*;
-import java.lang.*;
-import java.security.Key;
-import java.security.PublicKey;
-import java.security.PrivateKey;
-import java.security.KeyFactorySpi;
-import java.security.InvalidKeyException;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.interfaces.DSAParams;
-import java.security.spec.DSAPublicKeySpec;
-import java.security.spec.DSAPrivateKeySpec;
-import java.security.spec.KeySpec;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.X509EncodedKeySpec;
-import java.security.spec.PKCS8EncodedKeySpec;
-
-import sun.security.action.GetPropertyAction;
-
-/**
- * This class implements the DSA key factory of the Sun provider.
- *
- * @author Jan Luehe
- *
- *
- * @since 1.2
- */
-
-public class DSAKeyFactory extends KeyFactorySpi {
-
-    // package private for DSAKeyPairGenerator
-    static final boolean SERIAL_INTEROP;
-    private static final String SERIAL_PROP = "sun.security.key.serial.interop";
-
-    static {
-
-        /**
-         * Check to see if we need to maintain interoperability for serialized
-         * keys between JDK 5.0 -> JDK 1.4.  In other words, determine whether
-         * a key object serialized in JDK 5.0 must be deserializable in
-         * JDK 1.4.
-         *
-         * If true, then we generate sun.security.provider.DSAPublicKey.
-         * If false, then we generate sun.security.provider.DSAPublicKeyImpl.
-         *
-         * By default this is false.
-         * This incompatibility was introduced by 4532506.
-         */
-        String prop = AccessController.doPrivileged
-                (new GetPropertyAction(SERIAL_PROP, null));
-        SERIAL_INTEROP = "true".equalsIgnoreCase(prop);
-    }
-
-    /**
-     * Generates a public key object from the provided key specification
-     * (key material).
-     *
-     * @param keySpec the specification (key material) of the public key
-     *
-     * @return the public key
-     *
-     * @exception InvalidKeySpecException if the given key specification
-     * is inappropriate for this key factory to produce a public key.
-     */
-    protected PublicKey engineGeneratePublic(KeySpec keySpec)
-    throws InvalidKeySpecException {
-        try {
-            if (keySpec instanceof DSAPublicKeySpec) {
-                DSAPublicKeySpec dsaPubKeySpec = (DSAPublicKeySpec)keySpec;
-                if (SERIAL_INTEROP) {
-                    return new DSAPublicKey(dsaPubKeySpec.getY(),
-                                        dsaPubKeySpec.getP(),
-                                        dsaPubKeySpec.getQ(),
-                                        dsaPubKeySpec.getG());
-                } else {
-                    return new DSAPublicKeyImpl(dsaPubKeySpec.getY(),
-                                        dsaPubKeySpec.getP(),
-                                        dsaPubKeySpec.getQ(),
-                                        dsaPubKeySpec.getG());
-                }
-            } else if (keySpec instanceof X509EncodedKeySpec) {
-                if (SERIAL_INTEROP) {
-                    return new DSAPublicKey
-                        (((X509EncodedKeySpec)keySpec).getEncoded());
-                } else {
-                    return new DSAPublicKeyImpl
-                        (((X509EncodedKeySpec)keySpec).getEncoded());
-                }
-            } else {
-                throw new InvalidKeySpecException
-                    ("Inappropriate key specification");
-            }
-        } catch (InvalidKeyException e) {
-            throw new InvalidKeySpecException
-                ("Inappropriate key specification: " + e.getMessage());
-        }
-    }
-
-    /**
-     * Generates a private key object from the provided key specification
-     * (key material).
-     *
-     * @param keySpec the specification (key material) of the private key
-     *
-     * @return the private key
-     *
-     * @exception InvalidKeySpecException if the given key specification
-     * is inappropriate for this key factory to produce a private key.
-     */
-    protected PrivateKey engineGeneratePrivate(KeySpec keySpec)
-    throws InvalidKeySpecException {
-        try {
-            if (keySpec instanceof DSAPrivateKeySpec) {
-                DSAPrivateKeySpec dsaPrivKeySpec = (DSAPrivateKeySpec)keySpec;
-                return new DSAPrivateKey(dsaPrivKeySpec.getX(),
-                                         dsaPrivKeySpec.getP(),
-                                         dsaPrivKeySpec.getQ(),
-                                         dsaPrivKeySpec.getG());
-
-            } else if (keySpec instanceof PKCS8EncodedKeySpec) {
-                return new DSAPrivateKey
-                    (((PKCS8EncodedKeySpec)keySpec).getEncoded());
-
-            } else {
-                throw new InvalidKeySpecException
-                    ("Inappropriate key specification");
-            }
-        } catch (InvalidKeyException e) {
-            throw new InvalidKeySpecException
-                ("Inappropriate key specification: " + e.getMessage());
-        }
-    }
-
-    /**
-     * Returns a specification (key material) of the given key object
-     * in the requested format.
-     *
-     * @param key the key
-     *
-     * @param keySpec the requested format in which the key material shall be
-     * returned
-     *
-     * @return the underlying key specification (key material) in the
-     * requested format
-     *
-     * @exception InvalidKeySpecException if the requested key specification is
-     * inappropriate for the given key, or the given key cannot be processed
-     * (e.g., the given key has an unrecognized algorithm or format).
-     */
-    protected <T extends KeySpec>
-        T engineGetKeySpec(Key key, Class<T> keySpec)
-    throws InvalidKeySpecException {
-
-        DSAParams params;
-
-        try {
-
-            if (key instanceof java.security.interfaces.DSAPublicKey) {
-
-                // Determine valid key specs
-                Class<?> dsaPubKeySpec = Class.forName
-                    ("java.security.spec.DSAPublicKeySpec");
-                Class<?> x509KeySpec = Class.forName
-                    ("java.security.spec.X509EncodedKeySpec");
-
-                if (dsaPubKeySpec.isAssignableFrom(keySpec)) {
-                    java.security.interfaces.DSAPublicKey dsaPubKey
-                        = (java.security.interfaces.DSAPublicKey)key;
-                    params = dsaPubKey.getParams();
-                    return (T) new DSAPublicKeySpec(dsaPubKey.getY(),
-                                                    params.getP(),
-                                                    params.getQ(),
-                                                    params.getG());
-
-                } else if (x509KeySpec.isAssignableFrom(keySpec)) {
-                    return (T) new X509EncodedKeySpec(key.getEncoded());
-
-                } else {
-                    throw new InvalidKeySpecException
-                        ("Inappropriate key specification");
-                }
-
-            } else if (key instanceof java.security.interfaces.DSAPrivateKey) {
-
-                // Determine valid key specs
-                Class<?> dsaPrivKeySpec = Class.forName
-                    ("java.security.spec.DSAPrivateKeySpec");
-                Class<?> pkcs8KeySpec = Class.forName
-                    ("java.security.spec.PKCS8EncodedKeySpec");
-
-                if (dsaPrivKeySpec.isAssignableFrom(keySpec)) {
-                    java.security.interfaces.DSAPrivateKey dsaPrivKey
-                        = (java.security.interfaces.DSAPrivateKey)key;
-                    params = dsaPrivKey.getParams();
-                    return (T) new DSAPrivateKeySpec(dsaPrivKey.getX(),
-                                                     params.getP(),
-                                                     params.getQ(),
-                                                     params.getG());
-
-                } else if (pkcs8KeySpec.isAssignableFrom(keySpec)) {
-                    return (T) new PKCS8EncodedKeySpec(key.getEncoded());
-
-                } else {
-                    throw new InvalidKeySpecException
-                        ("Inappropriate key specification");
-                }
-
-            } else {
-                throw new InvalidKeySpecException("Inappropriate key type");
-            }
-
-        } catch (ClassNotFoundException e) {
-            throw new InvalidKeySpecException
-                ("Unsupported key specification: " + e.getMessage());
-        }
-    }
-
-    /**
-     * Translates a key object, whose provider may be unknown or potentially
-     * untrusted, into a corresponding key object of this key factory.
-     *
-     * @param key the key whose provider is unknown or untrusted
-     *
-     * @return the translated key
-     *
-     * @exception InvalidKeyException if the given key cannot be processed by
-     * this key factory.
-     */
-    protected Key engineTranslateKey(Key key) throws InvalidKeyException {
-
-        try {
-
-            if (key instanceof java.security.interfaces.DSAPublicKey) {
-                // Check if key originates from this factory
-                if (key instanceof sun.security.provider.DSAPublicKey) {
-                    return key;
-                }
-                // Convert key to spec
-                DSAPublicKeySpec dsaPubKeySpec
-                    = engineGetKeySpec(key, DSAPublicKeySpec.class);
-                // Create key from spec, and return it
-                return engineGeneratePublic(dsaPubKeySpec);
-
-            } else if (key instanceof java.security.interfaces.DSAPrivateKey) {
-                // Check if key originates from this factory
-                if (key instanceof sun.security.provider.DSAPrivateKey) {
-                    return key;
-                }
-                // Convert key to spec
-                DSAPrivateKeySpec dsaPrivKeySpec
-                    = engineGetKeySpec(key, DSAPrivateKeySpec.class);
-                // Create key from spec, and return it
-                return engineGeneratePrivate(dsaPrivKeySpec);
-
-            } else {
-                throw new InvalidKeyException("Wrong algorithm type");
-            }
-
-        } catch (InvalidKeySpecException e) {
-            throw new InvalidKeyException("Cannot translate key: "
-                                          + e.getMessage());
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/DSAKeyPairGenerator.java b/ojluni/src/main/java/sun/security/provider/DSAKeyPairGenerator.java
deleted file mode 100755
index 9adab7b..0000000
--- a/ojluni/src/main/java/sun/security/provider/DSAKeyPairGenerator.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-package sun.security.provider;
-
-import java.math.BigInteger;
-
-import java.security.*;
-import java.security.SecureRandom;
-import java.security.interfaces.DSAParams;
-import java.security.spec.AlgorithmParameterSpec;
-import java.security.spec.InvalidParameterSpecException;
-import java.security.spec.DSAParameterSpec;
-
-import sun.security.jca.JCAUtil;
-
-/**
- * This class generates DSA key parameters and public/private key
- * pairs according to the DSS standard NIST FIPS 186. It uses the
- * updated version of SHA, SHA-1 as described in FIPS 180-1.
- *
- * @author Benjamin Renaud
- * @author Andreas Sterbenz
- *
- */
-public class DSAKeyPairGenerator extends KeyPairGenerator
-implements java.security.interfaces.DSAKeyPairGenerator {
-
-    /* The modulus length */
-    private int modlen;
-
-    /* whether to force new parameters to be generated for each KeyPair */
-    private boolean forceNewParameters;
-
-    /* preset algorithm parameters. */
-    private DSAParameterSpec params;
-
-    /* The source of random bits to use */
-    private SecureRandom random;
-
-    public DSAKeyPairGenerator() {
-        super("DSA");
-        initialize(1024, null);
-    }
-
-    private static void checkStrength(int strength) {
-        if ((strength < 512) || (strength > 1024) || (strength % 64 != 0)) {
-            throw new InvalidParameterException
-                ("Modulus size must range from 512 to 1024 "
-                 + "and be a multiple of 64");
-        }
-    }
-
-    public void initialize(int modlen, SecureRandom random) {
-        checkStrength(modlen);
-        this.random = random;
-        this.modlen = modlen;
-        this.params = null;
-        this.forceNewParameters = false;
-    }
-
-    /**
-     * Initializes the DSA key pair generator. If <code>genParams</code>
-     * is false, a set of pre-computed parameters is used.
-     */
-    public void initialize(int modlen, boolean genParams, SecureRandom random) {
-        checkStrength(modlen);
-        if (genParams) {
-            params = null;
-        } else {
-            params = ParameterCache.getCachedDSAParameterSpec(modlen);
-            if (params == null) {
-                throw new InvalidParameterException
-                    ("No precomputed parameters for requested modulus size "
-                     + "available");
-            }
-        }
-        this.modlen = modlen;
-        this.random = random;
-        this.forceNewParameters = genParams;
-    }
-
-    /**
-     * Initializes the DSA object using a DSA parameter object.
-     *
-     * @param params a fully initialized DSA parameter object.
-     */
-    public void initialize(DSAParams params, SecureRandom random) {
-        if (params == null) {
-            throw new InvalidParameterException("Params must not be null");
-        }
-        DSAParameterSpec spec = new DSAParameterSpec
-                                (params.getP(), params.getQ(), params.getG());
-        initialize0(spec, random);
-    }
-
-    /**
-     * Initializes the DSA object using a parameter object.
-     *
-     * @param params the parameter set to be used to generate
-     * the keys.
-     * @param random the source of randomness for this generator.
-     *
-     * @exception InvalidAlgorithmParameterException if the given parameters
-     * are inappropriate for this key pair generator
-     */
-    public void initialize(AlgorithmParameterSpec params, SecureRandom random)
-            throws InvalidAlgorithmParameterException {
-        if (!(params instanceof DSAParameterSpec)) {
-            throw new InvalidAlgorithmParameterException
-                ("Inappropriate parameter");
-        }
-        initialize0((DSAParameterSpec)params, random);
-    }
-
-    private void initialize0(DSAParameterSpec params, SecureRandom random) {
-        int modlen = params.getP().bitLength();
-        checkStrength(modlen);
-        this.modlen = modlen;
-        this.params = params;
-        this.random = random;
-        this.forceNewParameters = false;
-    }
-
-    /**
-     * Generates a pair of keys usable by any JavaSecurity compliant
-     * DSA implementation.
-     */
-    public KeyPair generateKeyPair() {
-        if (random == null) {
-            random = JCAUtil.getSecureRandom();
-        }
-        DSAParameterSpec spec;
-        try {
-            if (forceNewParameters) {
-                // generate new parameters each time
-                spec = ParameterCache.getNewDSAParameterSpec(modlen, random);
-            } else {
-                if (params == null) {
-                    params =
-                        ParameterCache.getDSAParameterSpec(modlen, random);
-                }
-                spec = params;
-            }
-        } catch (GeneralSecurityException e) {
-            throw new ProviderException(e);
-        }
-        return generateKeyPair(spec.getP(), spec.getQ(), spec.getG(), random);
-    }
-
-    public KeyPair generateKeyPair(BigInteger p, BigInteger q, BigInteger g,
-                                   SecureRandom random) {
-
-        BigInteger x = generateX(random, q);
-        BigInteger y = generateY(x, p, g);
-
-        try {
-
-            // See the comments in DSAKeyFactory, 4532506, and 6232513.
-
-            DSAPublicKey pub;
-            if (DSAKeyFactory.SERIAL_INTEROP) {
-                pub = new DSAPublicKey(y, p, q, g);
-            } else {
-                pub = new DSAPublicKeyImpl(y, p, q, g);
-            }
-            DSAPrivateKey priv = new DSAPrivateKey(x, p, q, g);
-
-            KeyPair pair = new KeyPair(pub, priv);
-            return pair;
-        } catch (InvalidKeyException e) {
-            throw new ProviderException(e);
-        }
-    }
-
-    /**
-     * Generate the private key component of the key pair using the
-     * provided source of random bits. This method uses the random but
-     * source passed to generate a seed and then calls the seed-based
-     * generateX method.
-     */
-    private BigInteger generateX(SecureRandom random, BigInteger q) {
-        BigInteger x = null;
-        while (true) {
-            int[] seed = new int[5];
-            for (int i = 0; i < 5; i++) {
-                seed[i] = random.nextInt();
-            }
-            x = generateX(seed, q);
-            if (x.signum() > 0 && (x.compareTo(q) < 0)) {
-                break;
-            }
-        }
-        return x;
-    }
-
-    /**
-     * Given a seed, generate the private key component of the key
-     * pair. In the terminology used in the DSA specification
-     * (FIPS-186) seed is the XSEED quantity.
-     *
-     * @param seed the seed to use to generate the private key.
-     */
-    BigInteger generateX(int[] seed, BigInteger q) {
-
-        // check out t in the spec.
-        int[] t = { 0x67452301, 0xEFCDAB89, 0x98BADCFE,
-                    0x10325476, 0xC3D2E1F0 };
-        //
-
-        int[] tmp = DSA.SHA_7(seed, t);
-        byte[] tmpBytes = new byte[tmp.length * 4];
-        for (int i = 0; i < tmp.length; i++) {
-            int k = tmp[i];
-            for (int j = 0; j < 4; j++) {
-                tmpBytes[(i * 4) + j] = (byte) (k >>> (24 - (j * 8)));
-            }
-        }
-        BigInteger x = new BigInteger(1, tmpBytes).mod(q);
-        return x;
-    }
-
-    /**
-     * Generate the public key component y of the key pair.
-     *
-     * @param x the private key component.
-     *
-     * @param p the base parameter.
-     */
-    BigInteger generateY(BigInteger x, BigInteger p, BigInteger g) {
-        BigInteger y = g.modPow(x, p);
-        return y;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/provider/DSAParameterGenerator.java b/ojluni/src/main/java/sun/security/provider/DSAParameterGenerator.java
deleted file mode 100755
index 953d715..0000000
--- a/ojluni/src/main/java/sun/security/provider/DSAParameterGenerator.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.
- */
-
-package sun.security.provider;
-
-import java.math.BigInteger;
-import java.security.AlgorithmParameterGeneratorSpi;
-import java.security.AlgorithmParameters;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.InvalidParameterException;
-import java.security.SecureRandom;
-import java.security.spec.AlgorithmParameterSpec;
-import java.security.spec.InvalidParameterSpecException;
-import java.security.spec.DSAParameterSpec;
-
-/**
- * This class generates parameters for the DSA algorithm. It uses a default
- * prime modulus size of 1024 bits, which can be overwritten during
- * initialization.
- *
- * @author Jan Luehe
- *
- *
- * @see java.security.AlgorithmParameters
- * @see java.security.spec.AlgorithmParameterSpec
- * @see DSAParameters
- *
- * @since 1.2
- */
-
-public class DSAParameterGenerator extends AlgorithmParameterGeneratorSpi {
-
-    // the modulus length
-    private int modLen = 1024; // default
-
-    // the source of randomness
-    private SecureRandom random;
-
-    // useful constants
-    private static final BigInteger ZERO = BigInteger.valueOf(0);
-    private static final BigInteger ONE = BigInteger.valueOf(1);
-    private static final BigInteger TWO = BigInteger.valueOf(2);
-
-    // Make a SHA-1 hash function
-    private SHA sha;
-
-    public DSAParameterGenerator() {
-        this.sha = new SHA();
-    }
-
-    /**
-     * Initializes this parameter generator for a certain strength
-     * and source of randomness.
-     *
-     * @param strength the strength (size of prime) in bits
-     * @param random the source of randomness
-     */
-    protected void engineInit(int strength, SecureRandom random) {
-        /*
-         * Bruce Schneier, "Applied Cryptography", 2nd Edition,
-         * Description of DSA:
-         * [...] The algorithm uses the following parameter:
-         * p=a prime number L bits long, when L ranges from 512 to 1024 and is
-         * a multiple of 64. [...]
-         */
-        if ((strength < 512) || (strength > 1024) || (strength % 64 != 0)) {
-            throw new InvalidParameterException
-                ("Prime size must range from 512 to 1024 "
-                 + "and be a multiple of 64");
-        }
-        this.modLen = strength;
-        this.random = random;
-    }
-
-    /**
-     * Initializes this parameter generator with a set of
-     * algorithm-specific parameter generation values.
-     *
-     * @param params the set of algorithm-specific parameter generation values
-     * @param random the source of randomness
-     *
-     * @exception InvalidAlgorithmParameterException if the given parameter
-     * generation values are inappropriate for this parameter generator
-     */
-    protected void engineInit(AlgorithmParameterSpec genParamSpec,
-                              SecureRandom random)
-        throws InvalidAlgorithmParameterException {
-            throw new InvalidAlgorithmParameterException("Invalid parameter");
-    }
-
-    /**
-     * Generates the parameters.
-     *
-     * @return the new AlgorithmParameters object
-     */
-    protected AlgorithmParameters engineGenerateParameters() {
-        AlgorithmParameters algParams = null;
-        try {
-            if (this.random == null) {
-                this.random = new SecureRandom();
-            }
-
-            BigInteger[] pAndQ = generatePandQ(this.random, this.modLen);
-            BigInteger paramP = pAndQ[0];
-            BigInteger paramQ = pAndQ[1];
-            BigInteger paramG = generateG(paramP, paramQ);
-
-            DSAParameterSpec dsaParamSpec = new DSAParameterSpec(paramP,
-                                                                 paramQ,
-                                                                 paramG);
-            algParams = AlgorithmParameters.getInstance("DSA", "SUN");
-            algParams.init(dsaParamSpec);
-        } catch (InvalidParameterSpecException e) {
-            // this should never happen
-            throw new RuntimeException(e.getMessage());
-        } catch (NoSuchAlgorithmException e) {
-            // this should never happen, because we provide it
-            throw new RuntimeException(e.getMessage());
-        } catch (NoSuchProviderException e) {
-            // this should never happen, because we provide it
-            throw new RuntimeException(e.getMessage());
-        }
-
-        return algParams;
-    }
-
-    /*
-     * Generates the prime and subprime parameters for DSA,
-     * using the provided source of randomness.
-     * This method will generate new seeds until a suitable
-     * seed has been found.
-     *
-     * @param random the source of randomness to generate the
-     * seed
-     * @param L the size of <code>p</code>, in bits.
-     *
-     * @return an array of BigInteger, with <code>p</code> at index 0 and
-     * <code>q</code> at index 1.
-     */
-    BigInteger[] generatePandQ(SecureRandom random, int L) {
-        BigInteger[] result = null;
-        byte[] seed = new byte[20];
-
-        while(result == null) {
-            for (int i = 0; i < 20; i++) {
-                seed[i] = (byte)random.nextInt();
-            }
-            result = generatePandQ(seed, L);
-        }
-        return result;
-    }
-
-    /*
-     * Generates the prime and subprime parameters for DSA.
-     *
-     * <p>The seed parameter corresponds to the <code>SEED</code> parameter
-     * referenced in the FIPS specification of the DSA algorithm,
-     * and L is the size of <code>p</code>, in bits.
-     *
-     * @param seed the seed to generate the parameters
-     * @param L the size of <code>p</code>, in bits.
-     *
-     * @return an array of BigInteger, with <code>p</code> at index 0,
-     * <code>q</code> at index 1, the seed at index 2, and the counter value
-     * at index 3, or null if the seed does not yield suitable numbers.
-     */
-    BigInteger[] generatePandQ(byte[] seed, int L) {
-
-        /* Useful variables */
-        int g = seed.length * 8;
-        int n = (L - 1) / 160;
-        int b = (L - 1) % 160;
-
-        BigInteger SEED = new BigInteger(1, seed);
-        BigInteger TWOG = TWO.pow(2 * g);
-
-        /* Step 2 (Step 1 is getting seed). */
-        byte[] U1 = SHA(seed);
-        byte[] U2 = SHA(toByteArray((SEED.add(ONE)).mod(TWOG)));
-
-        xor(U1, U2);
-        byte[] U = U1;
-
-        /* Step 3: For q by setting the msb and lsb to 1 */
-        U[0] |= 0x80;
-        U[19] |= 1;
-        BigInteger q = new BigInteger(1, U);
-
-        /* Step 5 */
-         if (!q.isProbablePrime(80)) {
-             return null;
-
-         } else {
-             BigInteger V[] = new BigInteger[n + 1];
-             BigInteger offset = TWO;
-
-             /* Step 6 */
-             for (int counter = 0; counter < 4096; counter++) {
-
-                 /* Step 7 */
-                 for (int k = 0; k <= n; k++) {
-                     BigInteger K = BigInteger.valueOf(k);
-                     BigInteger tmp = (SEED.add(offset).add(K)).mod(TWOG);
-                     V[k] = new BigInteger(1, SHA(toByteArray(tmp)));
-                 }
-
-                 /* Step 8 */
-                 BigInteger W = V[0];
-                 for (int i = 1; i < n; i++) {
-                     W = W.add(V[i].multiply(TWO.pow(i * 160)));
-                 }
-                 W = W.add((V[n].mod(TWO.pow(b))).multiply(TWO.pow(n * 160)));
-
-                 BigInteger TWOLm1 = TWO.pow(L - 1);
-                 BigInteger X = W.add(TWOLm1);
-
-                 /* Step 9 */
-                 BigInteger c = X.mod(q.multiply(TWO));
-                 BigInteger p = X.subtract(c.subtract(ONE));
-
-                 /* Step 10 - 13 */
-                 if (p.compareTo(TWOLm1) > -1 && p.isProbablePrime(80)) {
-                     BigInteger[] result = {p, q, SEED,
-                                            BigInteger.valueOf(counter)};
-                     return result;
-                 }
-                 offset = offset.add(BigInteger.valueOf(n)).add(ONE);
-             }
-             return null;
-         }
-    }
-
-    /*
-     * Generates the <code>g</code> parameter for DSA.
-     *
-     * @param p the prime, <code>p</code>.
-     * @param q the subprime, <code>q</code>.
-     *
-     * @param the <code>g</code>
-     */
-    BigInteger generateG(BigInteger p, BigInteger q) {
-        BigInteger h = ONE;
-        BigInteger pMinusOneOverQ = (p.subtract(ONE)).divide(q);
-        BigInteger g = ONE;
-        while (g.compareTo(TWO) < 0) {
-            g = h.modPow(pMinusOneOverQ, p);
-            h = h.add(ONE);
-        }
-        return g;
-    }
-
-    /*
-     * Returns the SHA-1 digest of some data
-     */
-    private byte[] SHA(byte[] array) {
-        sha.engineReset();
-        sha.engineUpdate(array, 0, array.length);
-        return sha.engineDigest();
-    }
-
-    /*
-     * Converts the result of a BigInteger.toByteArray call to an exact
-     * signed magnitude representation for any positive number.
-     */
-    private byte[] toByteArray(BigInteger bigInt) {
-        byte[] result = bigInt.toByteArray();
-        if (result[0] == 0) {
-            byte[] tmp = new byte[result.length - 1];
-            System.arraycopy(result, 1, tmp, 0, tmp.length);
-            result = tmp;
-        }
-        return result;
-    }
-
-    /*
-     * XORs U2 into U1
-     */
-    private void xor(byte[] U1, byte[] U2) {
-        for (int i = 0; i < U1.length; i++) {
-            U1[i] ^= U2[i];
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/DSAParameters.java b/ojluni/src/main/java/sun/security/provider/DSAParameters.java
deleted file mode 100755
index 5d388dd..0000000
--- a/ojluni/src/main/java/sun/security/provider/DSAParameters.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.
- */
-
-package sun.security.provider;
-
-import java.util.*;
-import java.io.*;
-import java.math.BigInteger;
-import java.security.AlgorithmParametersSpi;
-import java.security.spec.AlgorithmParameterSpec;
-import java.security.spec.DSAParameterSpec;
-import java.security.spec.InvalidParameterSpecException;
-
-import sun.security.util.Debug;
-import sun.security.util.DerValue;
-import sun.security.util.DerOutputStream;
-
-/**
- * This class implements the parameter set used by the
- * Digital Signature Algorithm as specified in the FIPS 186
- * standard.
- *
- * @author Jan Luehe
- *
- *
- * @since 1.2
- */
-
-public class DSAParameters extends AlgorithmParametersSpi {
-
-    // the prime (p)
-    protected BigInteger p;
-
-    // the sub-prime (q)
-    protected BigInteger q;
-
-    // the base (g)
-    protected BigInteger g;
-
-    protected void engineInit(AlgorithmParameterSpec paramSpec)
-        throws InvalidParameterSpecException {
-            if (!(paramSpec instanceof DSAParameterSpec)) {
-                throw new InvalidParameterSpecException
-                    ("Inappropriate parameter specification");
-            }
-            this.p = ((DSAParameterSpec)paramSpec).getP();
-            this.q = ((DSAParameterSpec)paramSpec).getQ();
-            this.g = ((DSAParameterSpec)paramSpec).getG();
-    }
-
-    protected void engineInit(byte[] params) throws IOException {
-        DerValue encodedParams = new DerValue(params);
-
-        if (encodedParams.tag != DerValue.tag_Sequence) {
-            throw new IOException("DSA params parsing error");
-        }
-
-        encodedParams.data.reset();
-
-        this.p = encodedParams.data.getBigInteger();
-        this.q = encodedParams.data.getBigInteger();
-        this.g = encodedParams.data.getBigInteger();
-
-        if (encodedParams.data.available() != 0) {
-            throw new IOException("encoded params have " +
-                                  encodedParams.data.available() +
-                                  " extra bytes");
-        }
-    }
-
-    protected void engineInit(byte[] params, String decodingMethod)
-        throws IOException {
-            engineInit(params);
-    }
-
-    protected <T extends AlgorithmParameterSpec>
-        T engineGetParameterSpec(Class<T> paramSpec)
-        throws InvalidParameterSpecException
-    {
-            try {
-                Class<?> dsaParamSpec = Class.forName
-                    ("java.security.spec.DSAParameterSpec");
-                if (dsaParamSpec.isAssignableFrom(paramSpec)) {
-                    return (T)new DSAParameterSpec(this.p, this.q, this.g);
-                } else {
-                    throw new InvalidParameterSpecException
-                        ("Inappropriate parameter Specification");
-                }
-            } catch (ClassNotFoundException e) {
-                throw new InvalidParameterSpecException
-                    ("Unsupported parameter specification: " + e.getMessage());
-            }
-    }
-
-    protected byte[] engineGetEncoded() throws IOException {
-        DerOutputStream out = new DerOutputStream();
-        DerOutputStream bytes = new DerOutputStream();
-
-        bytes.putInteger(p);
-        bytes.putInteger(q);
-        bytes.putInteger(g);
-        out.write(DerValue.tag_Sequence, bytes);
-        return out.toByteArray();
-    }
-
-    protected byte[] engineGetEncoded(String encodingMethod)
-        throws IOException {
-            return engineGetEncoded();
-    }
-
-    /*
-     * Returns a formatted string describing the parameters.
-     */
-    protected String engineToString() {
-        return "\n\tp: " + Debug.toHexString(p)
-            + "\n\tq: " + Debug.toHexString(q)
-            + "\n\tg: " + Debug.toHexString(g)
-            + "\n";
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/DSAPrivateKey.java b/ojluni/src/main/java/sun/security/provider/DSAPrivateKey.java
deleted file mode 100755
index b521e3d..0000000
--- a/ojluni/src/main/java/sun/security/provider/DSAPrivateKey.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (c) 1996, 2002, 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.
- */
-
-package sun.security.provider;
-
-import java.util.*;
-import java.io.*;
-import java.math.BigInteger;
-import java.security.InvalidKeyException;
-import java.security.ProviderException;
-import java.security.AlgorithmParameters;
-import java.security.spec.DSAParameterSpec;
-import java.security.spec.InvalidParameterSpecException;
-import java.security.interfaces.DSAParams;
-
-import sun.security.x509.AlgIdDSA;
-import sun.security.pkcs.PKCS8Key;
-import sun.security.util.Debug;
-import sun.security.util.DerValue;
-import sun.security.util.DerInputStream;
-import sun.security.util.DerOutputStream;
-
-/**
- * A PKCS#8 private key for the Digital Signature Algorithm.
- *
- * @author Benjamin Renaud
- *
- *
- * @see DSAPublicKey
- * @see AlgIdDSA
- * @see DSA
- */
-
-public final class DSAPrivateKey extends PKCS8Key
-implements java.security.interfaces.DSAPrivateKey, Serializable {
-
-    /** use serialVersionUID from JDK 1.1. for interoperability */
-    private static final long serialVersionUID = -3244453684193605938L;
-
-    /* the private key */
-    private BigInteger x;
-
-    /*
-     * Keep this constructor for backwards compatibility with JDK1.1.
-     */
-    public DSAPrivateKey() {
-    }
-
-    /**
-     * Make a DSA private key out of a private key and three parameters.
-     */
-    public DSAPrivateKey(BigInteger x, BigInteger p,
-                         BigInteger q, BigInteger g)
-    throws InvalidKeyException {
-        this.x = x;
-        algid = new AlgIdDSA(p, q, g);
-
-        try {
-            key = new DerValue(DerValue.tag_Integer,
-                               x.toByteArray()).toByteArray();
-            encode();
-        } catch (IOException e) {
-            InvalidKeyException ike = new InvalidKeyException(
-                "could not DER encode x: " + e.getMessage());
-            ike.initCause(e);
-            throw ike;
-        }
-    }
-
-    /**
-     * Make a DSA private key from its DER encoding (PKCS #8).
-     */
-    public DSAPrivateKey(byte[] encoded) throws InvalidKeyException {
-        clearOldKey();
-        decode(encoded);
-    }
-
-    /**
-     * Returns the DSA parameters associated with this key, or null if the
-     * parameters could not be parsed.
-     */
-    public DSAParams getParams() {
-        try {
-            if (algid instanceof DSAParams) {
-                return (DSAParams)algid;
-            } else {
-                DSAParameterSpec paramSpec;
-                AlgorithmParameters algParams = algid.getParameters();
-                if (algParams == null) {
-                    return null;
-                }
-                paramSpec = algParams.getParameterSpec(DSAParameterSpec.class);
-                return (DSAParams)paramSpec;
-            }
-        } catch (InvalidParameterSpecException e) {
-            return null;
-        }
-    }
-
-    /**
-     * Get the raw private key, x, without the parameters.
-     *
-     * @see getParameters
-     */
-    public BigInteger getX() {
-        return x;
-    }
-
-    private void clearOldKey() {
-        int i;
-        if (this.encodedKey != null) {
-            for (i = 0; i < this.encodedKey.length; i++) {
-                this.encodedKey[i] = (byte)0x00;
-            }
-        }
-        if (this.key != null) {
-            for (i = 0; i < this.key.length; i++) {
-                this.key[i] = (byte)0x00;
-            }
-        }
-    }
-
-    public String toString() {
-        return "Sun DSA Private Key \nparameters:" + algid + "\nx: " +
-            Debug.toHexString(x) + "\n";
-    }
-
-    protected void parseKeyBits() throws InvalidKeyException {
-        try {
-            DerInputStream in = new DerInputStream(key);
-            x = in.getBigInteger();
-        } catch (IOException e) {
-            InvalidKeyException ike = new InvalidKeyException(e.getMessage());
-            ike.initCause(e);
-            throw ike;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/DSAPublicKey.java b/ojluni/src/main/java/sun/security/provider/DSAPublicKey.java
deleted file mode 100755
index a8340f3..0000000
--- a/ojluni/src/main/java/sun/security/provider/DSAPublicKey.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-package sun.security.provider;
-
-import java.util.*;
-import java.io.*;
-import java.math.BigInteger;
-import java.security.InvalidKeyException;
-import java.security.ProviderException;
-import java.security.AlgorithmParameters;
-import java.security.spec.DSAParameterSpec;
-import java.security.spec.InvalidParameterSpecException;
-import java.security.interfaces.DSAParams;
-
-import sun.security.x509.X509Key;
-import sun.security.x509.AlgIdDSA;
-import sun.security.util.Debug;
-import sun.security.util.DerValue;
-import sun.security.util.DerInputStream;
-import sun.security.util.DerOutputStream;
-
-/**
- * An X.509 public key for the Digital Signature Algorithm.
- *
- * @author Benjamin Renaud
- *
- *
- * @see DSAPrivateKey
- * @see AlgIdDSA
- * @see DSA
- */
-
-public class DSAPublicKey extends X509Key
-implements java.security.interfaces.DSAPublicKey, Serializable {
-
-    /** use serialVersionUID from JDK 1.1. for interoperability */
-    private static final long serialVersionUID = -2994193307391104133L;
-
-    /* the public key */
-    private BigInteger y;
-
-    /*
-     * Keep this constructor for backwards compatibility with JDK1.1.
-     */
-    public DSAPublicKey() {
-    }
-
-    /**
-     * Make a DSA public key out of a public key and three parameters.
-     * The p, q, and g parameters may be null, but if so, parameters will need
-     * to be supplied from some other source before this key can be used in
-     * cryptographic operations.  PKIX RFC2459bis explicitly allows DSA public
-     * keys without parameters, where the parameters are provided in the
-     * issuer's DSA public key.
-     *
-     * @param y the actual key bits
-     * @param p DSA parameter p, may be null if all of p, q, and g are null.
-     * @param q DSA parameter q, may be null if all of p, q, and g are null.
-     * @param g DSA parameter g, may be null if all of p, q, and g are null.
-     */
-    public DSAPublicKey(BigInteger y, BigInteger p, BigInteger q,
-                        BigInteger g)
-    throws InvalidKeyException {
-        this.y = y;
-        algid = new AlgIdDSA(p, q, g);
-
-        try {
-            key = new DerValue(DerValue.tag_Integer,
-                               y.toByteArray()).toByteArray();
-            encode();
-        } catch (IOException e) {
-            throw new InvalidKeyException("could not DER encode y: " +
-                                          e.getMessage());
-        }
-    }
-
-    /**
-     * Make a DSA public key from its DER encoding (X.509).
-     */
-    public DSAPublicKey(byte[] encoded) throws InvalidKeyException {
-        decode(encoded);
-    }
-
-    /**
-     * Returns the DSA parameters associated with this key, or null if the
-     * parameters could not be parsed.
-     */
-    public DSAParams getParams() {
-        try {
-            if (algid instanceof DSAParams) {
-                return (DSAParams)algid;
-            } else {
-                DSAParameterSpec paramSpec;
-                AlgorithmParameters algParams = algid.getParameters();
-                if (algParams == null) {
-                    return null;
-                }
-                paramSpec = algParams.getParameterSpec(DSAParameterSpec.class);
-                return (DSAParams)paramSpec;
-            }
-        } catch (InvalidParameterSpecException e) {
-            return null;
-        }
-    }
-
-    /**
-     * Get the raw public value, y, without the parameters.
-     *
-     * @see getParameters
-     */
-    public BigInteger getY() {
-        return y;
-    }
-
-    public String toString() {
-        return "Sun DSA Public Key\n    Parameters:" + algid
-            + "\n  y:\n" + Debug.toHexString(y) + "\n";
-    }
-
-    protected void parseKeyBits() throws InvalidKeyException {
-        try {
-            DerInputStream in = new DerInputStream(key);
-            y = in.getBigInteger();
-        } catch (IOException e) {
-            throw new InvalidKeyException("Invalid key: y value\n" +
-                                          e.getMessage());
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/DSAPublicKeyImpl.java b/ojluni/src/main/java/sun/security/provider/DSAPublicKeyImpl.java
deleted file mode 100755
index 7ccc1c0..0000000
--- a/ojluni/src/main/java/sun/security/provider/DSAPublicKeyImpl.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.security.provider;
-
-import java.math.BigInteger;
-import java.security.KeyRep;
-import java.security.InvalidKeyException;
-
-/**
- * An X.509 public key for the Digital Signature Algorithm.
- *
- * The difference between DSAPublicKeyImpl and DSAPublicKey is that
- * DSAPublicKeyImpl calls writeReplace with KeyRep, and DSAPublicKey
- * calls writeObject.
- *
- * See the comments in DSAKeyFactory, 4532506, and 6232513.
- *
- */
-
-public final class DSAPublicKeyImpl extends DSAPublicKey {
-
-    private static final long serialVersionUID = 7819830118247182730L;
-
-    /**
-     * Make a DSA public key out of a public key and three parameters.
-     * The p, q, and g parameters may be null, but if so, parameters will need
-     * to be supplied from some other source before this key can be used in
-     * cryptographic operations.  PKIX RFC2459bis explicitly allows DSA public
-     * keys without parameters, where the parameters are provided in the
-     * issuer's DSA public key.
-     *
-     * @param y the actual key bits
-     * @param p DSA parameter p, may be null if all of p, q, and g are null.
-     * @param q DSA parameter q, may be null if all of p, q, and g are null.
-     * @param g DSA parameter g, may be null if all of p, q, and g are null.
-     */
-    public DSAPublicKeyImpl(BigInteger y, BigInteger p, BigInteger q,
-                        BigInteger g)
-                throws InvalidKeyException {
-        super(y, p, q, g);
-    }
-
-    /**
-     * Make a DSA public key from its DER encoding (X.509).
-     */
-    public DSAPublicKeyImpl(byte[] encoded) throws InvalidKeyException {
-        super(encoded);
-    }
-
-    protected Object writeReplace() throws java.io.ObjectStreamException {
-        return new KeyRep(KeyRep.Type.PUBLIC,
-                        getAlgorithm(),
-                        getFormat(),
-                        getEncoded());
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/DigestBase.java b/ojluni/src/main/java/sun/security/provider/DigestBase.java
deleted file mode 100755
index 2c7b719..0000000
--- a/ojluni/src/main/java/sun/security/provider/DigestBase.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright (c) 2003, 2006, 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.
- */
-
-package sun.security.provider;
-
-import java.security.MessageDigestSpi;
-import java.security.DigestException;
-import java.security.ProviderException;
-
-/**
- * Common base message digest implementation for the Sun provider.
- * It implements all the JCA methods as suitable for a Java message digest
- * implementation of an algorithm based on a compression function (as all
- * commonly used algorithms are). The individual digest subclasses only need to
- * implement the following methods:
- *
- *  . abstract void implCompress(byte[] b, int ofs);
- *  . abstract void implDigest(byte[] out, int ofs);
- *  . abstract void implReset();
- *  . public abstract Object clone();
- *
- * See the inline documentation for details.
- *
- * @since   1.5
- * @author  Andreas Sterbenz
- */
-abstract class DigestBase extends MessageDigestSpi implements Cloneable {
-
-    // one element byte array, temporary storage for update(byte)
-    private byte[] oneByte;
-
-    // algorithm name to use in the exception message
-    private final String algorithm;
-    // length of the message digest in bytes
-    private final int digestLength;
-
-    // size of the input to the compression function in bytes
-    private final int blockSize;
-    // buffer to store partial blocks, blockSize bytes large
-    // Subclasses should not access this array directly except possibly in their
-    // implDigest() method. See MD5.java as an example.
-    final byte[] buffer;
-    // offset into buffer
-    private int bufOfs;
-
-    // number of bytes processed so far. subclasses should not modify
-    // this value.
-    // also used as a flag to indicate reset status
-    // -1: need to call engineReset() before next call to update()
-    //  0: is already reset
-    long bytesProcessed;
-
-    /**
-     * Main constructor.
-     */
-    DigestBase(String algorithm, int digestLength, int blockSize) {
-        super();
-        this.algorithm = algorithm;
-        this.digestLength = digestLength;
-        this.blockSize = blockSize;
-        buffer = new byte[blockSize];
-    }
-
-    /**
-     * Constructor for cloning. Replicates common data.
-     */
-    DigestBase(DigestBase base) {
-        this.algorithm = base.algorithm;
-        this.digestLength = base.digestLength;
-        this.blockSize = base.blockSize;
-        this.buffer = base.buffer.clone();
-        this.bufOfs = base.bufOfs;
-        this.bytesProcessed = base.bytesProcessed;
-    }
-
-    // return digest length. See JCA doc.
-    protected final int engineGetDigestLength() {
-        return digestLength;
-    }
-
-    // single byte update. See JCA doc.
-    protected final void engineUpdate(byte b) {
-        if (oneByte == null) {
-            oneByte = new byte[1];
-        }
-        oneByte[0] = b;
-        engineUpdate(oneByte, 0, 1);
-    }
-
-    // array update. See JCA doc.
-    protected final void engineUpdate(byte[] b, int ofs, int len) {
-        if (len == 0) {
-            return;
-        }
-        if ((ofs < 0) || (len < 0) || (ofs > b.length - len)) {
-            throw new ArrayIndexOutOfBoundsException();
-        }
-        if (bytesProcessed < 0) {
-            engineReset();
-        }
-        bytesProcessed += len;
-        // if buffer is not empty, we need to fill it before proceeding
-        if (bufOfs != 0) {
-            int n = Math.min(len, blockSize - bufOfs);
-            System.arraycopy(b, ofs, buffer, bufOfs, n);
-            bufOfs += n;
-            ofs += n;
-            len -= n;
-            if (bufOfs >= blockSize) {
-                // compress completed block now
-                implCompress(buffer, 0);
-                bufOfs = 0;
-            }
-        }
-        // compress complete blocks
-        while (len >= blockSize) {
-            implCompress(b, ofs);
-            len -= blockSize;
-            ofs += blockSize;
-        }
-        // copy remainder to buffer
-        if (len > 0) {
-            System.arraycopy(b, ofs, buffer, 0, len);
-            bufOfs = len;
-        }
-    }
-
-    // reset this object. See JCA doc.
-    protected final void engineReset() {
-        if (bytesProcessed == 0) {
-            // already reset, ignore
-            return;
-        }
-        implReset();
-        bufOfs = 0;
-        bytesProcessed = 0;
-    }
-
-    // return the digest. See JCA doc.
-    protected final byte[] engineDigest() {
-        byte[] b = new byte[digestLength];
-        try {
-            engineDigest(b, 0, b.length);
-        } catch (DigestException e) {
-            throw (ProviderException)
-                new ProviderException("Internal error").initCause(e);
-        }
-        return b;
-    }
-
-    // return the digest in the specified array. See JCA doc.
-    protected final int engineDigest(byte[] out, int ofs, int len)
-            throws DigestException {
-        if (len < digestLength) {
-            throw new DigestException("Length must be at least "
-                + digestLength + " for " + algorithm + "digests");
-        }
-        if ((ofs < 0) || (len < 0) || (ofs > out.length - len)) {
-            throw new DigestException("Buffer too short to store digest");
-        }
-        if (bytesProcessed < 0) {
-            engineReset();
-        }
-        implDigest(out, ofs);
-        bytesProcessed = -1;
-        return digestLength;
-    }
-
-    /**
-     * Core compression function. Processes blockSize bytes at a time
-     * and updates the state of this object.
-     */
-    abstract void implCompress(byte[] b, int ofs);
-
-    /**
-     * Return the digest. Subclasses do not need to reset() themselves,
-     * DigestBase calls implReset() when necessary.
-     */
-    abstract void implDigest(byte[] out, int ofs);
-
-    /**
-     * Reset subclass specific state to their initial values. DigestBase
-     * calls this method when necessary.
-     */
-    abstract void implReset();
-
-    /**
-     * Clone this digest. Should be implemented as "return new MyDigest(this)".
-     * That constructor should first call "super(baseDigest)" and then copy
-     * subclass specific data.
-     */
-    public abstract Object clone();
-
-    // padding used for the MD5, and SHA-* message digests
-    static final byte[] padding;
-
-    static {
-        // we need 128 byte padding for SHA-384/512
-        // and an additional 8 bytes for the high 8 bytes of the 16
-        // byte bit counter in SHA-384/512
-        padding = new byte[136];
-        padding[0] = (byte)0x80;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/provider/JavaKeyStore.java b/ojluni/src/main/java/sun/security/provider/JavaKeyStore.java
deleted file mode 100755
index 1a89986..0000000
--- a/ojluni/src/main/java/sun/security/provider/JavaKeyStore.java
+++ /dev/null
@@ -1,802 +0,0 @@
-/*
- * Copyright (c) 1997, 2010, 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.
- */
-
-package sun.security.provider;
-
-import java.io.*;
-import java.security.*;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateFactory;
-import java.security.cert.CertificateException;
-import java.util.*;
-import sun.misc.IOUtils;
-
-import sun.security.pkcs.EncryptedPrivateKeyInfo;
-
-/**
- * This class provides the keystore implementation referred to as "JKS".
- *
- * @author Jan Luehe
- * @author David Brownell
- *
- *
- * @see KeyProtector
- * @see java.security.KeyStoreSpi
- * @see KeyTool
- *
- * @since 1.2
- */
-
-abstract class JavaKeyStore extends KeyStoreSpi {
-
-    // regular JKS
-    public static final class JKS extends JavaKeyStore {
-        String convertAlias(String alias) {
-            return alias.toLowerCase();
-        }
-    }
-
-    // special JKS that uses case sensitive aliases
-    public static final class CaseExactJKS extends JavaKeyStore {
-        String convertAlias(String alias) {
-            return alias;
-        }
-    }
-
-    private static final int MAGIC = 0xfeedfeed;
-    private static final int VERSION_1 = 0x01;
-    private static final int VERSION_2 = 0x02;
-
-    // Private keys and their supporting certificate chains
-    private static class KeyEntry {
-        Date date; // the creation date of this entry
-        byte[] protectedPrivKey;
-        Certificate chain[];
-    };
-
-    // Trusted certificates
-    private static class TrustedCertEntry {
-        Date date; // the creation date of this entry
-        Certificate cert;
-    };
-
-    /**
-     * Private keys and certificates are stored in a hashtable.
-     * Hash entries are keyed by alias names.
-     */
-    private final Hashtable<String, Object> entries;
-
-    JavaKeyStore() {
-        entries = new Hashtable<String, Object>();
-    }
-
-    // convert an alias to internal form, overridden in subclasses:
-    // lower case for regular JKS
-    // original string for CaseExactJKS
-    abstract String convertAlias(String alias);
-
-    /**
-     * Returns the key associated with the given alias, using the given
-     * password to recover it.
-     *
-     * @param alias the alias name
-     * @param password the password for recovering the key
-     *
-     * @return the requested key, or null if the given alias does not exist
-     * or does not identify a <i>key entry</i>.
-     *
-     * @exception NoSuchAlgorithmException if the algorithm for recovering the
-     * key cannot be found
-     * @exception UnrecoverableKeyException if the key cannot be recovered
-     * (e.g., the given password is wrong).
-     */
-    public Key engineGetKey(String alias, char[] password)
-        throws NoSuchAlgorithmException, UnrecoverableKeyException
-    {
-        Object entry = entries.get(convertAlias(alias));
-
-        if (entry == null || !(entry instanceof KeyEntry)) {
-            return null;
-        }
-        if (password == null) {
-            throw new UnrecoverableKeyException("Password must not be null");
-        }
-
-        KeyProtector keyProtector = new KeyProtector(password);
-        byte[] encrBytes = ((KeyEntry)entry).protectedPrivKey;
-        EncryptedPrivateKeyInfo encrInfo;
-        byte[] plain;
-        try {
-            encrInfo = new EncryptedPrivateKeyInfo(encrBytes);
-        } catch (IOException ioe) {
-            throw new UnrecoverableKeyException("Private key not stored as "
-                                                + "PKCS #8 "
-                                                + "EncryptedPrivateKeyInfo");
-        }
-        return keyProtector.recover(encrInfo);
-    }
-
-    /**
-     * Returns the certificate chain associated with the given alias.
-     *
-     * @param alias the alias name
-     *
-     * @return the certificate chain (ordered with the user's certificate first
-     * and the root certificate authority last), or null if the given alias
-     * does not exist or does not contain a certificate chain (i.e., the given
-     * alias identifies either a <i>trusted certificate entry</i> or a
-     * <i>key entry</i> without a certificate chain).
-     */
-    public Certificate[] engineGetCertificateChain(String alias) {
-        Object entry = entries.get(convertAlias(alias));
-
-        if (entry != null && entry instanceof KeyEntry) {
-            if (((KeyEntry)entry).chain == null) {
-                return null;
-            } else {
-                return ((KeyEntry)entry).chain.clone();
-            }
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Returns the certificate associated with the given alias.
-     *
-     * <p>If the given alias name identifies a
-     * <i>trusted certificate entry</i>, the certificate associated with that
-     * entry is returned. If the given alias name identifies a
-     * <i>key entry</i>, the first element of the certificate chain of that
-     * entry is returned, or null if that entry does not have a certificate
-     * chain.
-     *
-     * @param alias the alias name
-     *
-     * @return the certificate, or null if the given alias does not exist or
-     * does not contain a certificate.
-     */
-    public Certificate engineGetCertificate(String alias) {
-        Object entry = entries.get(convertAlias(alias));
-
-        if (entry != null) {
-            if (entry instanceof TrustedCertEntry) {
-                return ((TrustedCertEntry)entry).cert;
-            } else {
-                if (((KeyEntry)entry).chain == null) {
-                    return null;
-                } else {
-                    return ((KeyEntry)entry).chain[0];
-                }
-            }
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Returns the creation date of the entry identified by the given alias.
-     *
-     * @param alias the alias name
-     *
-     * @return the creation date of this entry, or null if the given alias does
-     * not exist
-     */
-    public Date engineGetCreationDate(String alias) {
-        Object entry = entries.get(convertAlias(alias));
-
-        if (entry != null) {
-            if (entry instanceof TrustedCertEntry) {
-                return new Date(((TrustedCertEntry)entry).date.getTime());
-            } else {
-                return new Date(((KeyEntry)entry).date.getTime());
-            }
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Assigns the given private key to the given alias, protecting
-     * it with the given password as defined in PKCS8.
-     *
-     * <p>The given java.security.PrivateKey <code>key</code> must
-     * be accompanied by a certificate chain certifying the
-     * corresponding public key.
-     *
-     * <p>If the given alias already exists, the keystore information
-     * associated with it is overridden by the given key and certificate
-     * chain.
-     *
-     * @param alias the alias name
-     * @param key the private key to be associated with the alias
-     * @param password the password to protect the key
-     * @param chain the certificate chain for the corresponding public
-     * key (only required if the given key is of type
-     * <code>java.security.PrivateKey</code>).
-     *
-     * @exception KeyStoreException if the given key is not a private key,
-     * cannot be protected, or this operation fails for some other reason
-     */
-    public void engineSetKeyEntry(String alias, Key key, char[] password,
-                                  Certificate[] chain)
-        throws KeyStoreException
-    {
-        KeyProtector keyProtector = null;
-
-        if (!(key instanceof java.security.PrivateKey)) {
-            throw new KeyStoreException("Cannot store non-PrivateKeys");
-        }
-        try {
-            synchronized(entries) {
-                KeyEntry entry = new KeyEntry();
-                entry.date = new Date();
-
-                // Protect the encoding of the key
-                keyProtector = new KeyProtector(password);
-                entry.protectedPrivKey = keyProtector.protect(key);
-
-                // clone the chain
-                if ((chain != null) &&
-                    (chain.length != 0)) {
-                    entry.chain = chain.clone();
-                } else {
-                    entry.chain = null;
-                }
-
-                entries.put(convertAlias(alias), entry);
-            }
-        } catch (NoSuchAlgorithmException nsae) {
-            throw new KeyStoreException("Key protection algorithm not found");
-        } finally {
-            keyProtector = null;
-        }
-    }
-
-    /**
-     * Assigns the given key (that has already been protected) to the given
-     * alias.
-     *
-     * <p>If the protected key is of type
-     * <code>java.security.PrivateKey</code>, it must be accompanied by a
-     * certificate chain certifying the corresponding public key. If the
-     * underlying keystore implementation is of type <code>jks</code>,
-     * <code>key</code> must be encoded as an
-     * <code>EncryptedPrivateKeyInfo</code> as defined in the PKCS #8 standard.
-     *
-     * <p>If the given alias already exists, the keystore information
-     * associated with it is overridden by the given key (and possibly
-     * certificate chain).
-     *
-     * @param alias the alias name
-     * @param key the key (in protected format) to be associated with the alias
-     * @param chain the certificate chain for the corresponding public
-     * key (only useful if the protected key is of type
-     * <code>java.security.PrivateKey</code>).
-     *
-     * @exception KeyStoreException if this operation fails.
-     */
-    public void engineSetKeyEntry(String alias, byte[] key,
-                                  Certificate[] chain)
-        throws KeyStoreException
-    {
-        synchronized(entries) {
-            // key must be encoded as EncryptedPrivateKeyInfo as defined in
-            // PKCS#8
-            try {
-                new EncryptedPrivateKeyInfo(key);
-            } catch (IOException ioe) {
-                throw new KeyStoreException("key is not encoded as "
-                                            + "EncryptedPrivateKeyInfo");
-            }
-
-            KeyEntry entry = new KeyEntry();
-            entry.date = new Date();
-
-            entry.protectedPrivKey = key.clone();
-            if ((chain != null) &&
-                (chain.length != 0)) {
-                entry.chain = chain.clone();
-            } else {
-                entry.chain = null;
-            }
-
-            entries.put(convertAlias(alias), entry);
-        }
-    }
-
-    /**
-     * Assigns the given certificate to the given alias.
-     *
-     * <p>If the given alias already exists in this keystore and identifies a
-     * <i>trusted certificate entry</i>, the certificate associated with it is
-     * overridden by the given certificate.
-     *
-     * @param alias the alias name
-     * @param cert the certificate
-     *
-     * @exception KeyStoreException if the given alias already exists and does
-     * not identify a <i>trusted certificate entry</i>, or this operation
-     * fails for some other reason.
-     */
-    public void engineSetCertificateEntry(String alias, Certificate cert)
-        throws KeyStoreException
-    {
-        synchronized(entries) {
-
-            Object entry = entries.get(convertAlias(alias));
-            if ((entry != null) && (entry instanceof KeyEntry)) {
-                throw new KeyStoreException
-                    ("Cannot overwrite own certificate");
-            }
-
-            TrustedCertEntry trustedCertEntry = new TrustedCertEntry();
-            trustedCertEntry.cert = cert;
-            trustedCertEntry.date = new Date();
-            entries.put(convertAlias(alias), trustedCertEntry);
-        }
-    }
-
-    /**
-     * Deletes the entry identified by the given alias from this keystore.
-     *
-     * @param alias the alias name
-     *
-     * @exception KeyStoreException if the entry cannot be removed.
-     */
-    public void engineDeleteEntry(String alias)
-        throws KeyStoreException
-    {
-        synchronized(entries) {
-            entries.remove(convertAlias(alias));
-        }
-    }
-
-    /**
-     * Lists all the alias names of this keystore.
-     *
-     * @return enumeration of the alias names
-     */
-    public Enumeration<String> engineAliases() {
-        return entries.keys();
-    }
-
-    /**
-     * Checks if the given alias exists in this keystore.
-     *
-     * @param alias the alias name
-     *
-     * @return true if the alias exists, false otherwise
-     */
-    public boolean engineContainsAlias(String alias) {
-        return entries.containsKey(convertAlias(alias));
-    }
-
-    /**
-     * Retrieves the number of entries in this keystore.
-     *
-     * @return the number of entries in this keystore
-     */
-    public int engineSize() {
-        return entries.size();
-    }
-
-    /**
-     * Returns true if the entry identified by the given alias is a
-     * <i>key entry</i>, and false otherwise.
-     *
-     * @return true if the entry identified by the given alias is a
-     * <i>key entry</i>, false otherwise.
-     */
-    public boolean engineIsKeyEntry(String alias) {
-        Object entry = entries.get(convertAlias(alias));
-        if ((entry != null) && (entry instanceof KeyEntry)) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Returns true if the entry identified by the given alias is a
-     * <i>trusted certificate entry</i>, and false otherwise.
-     *
-     * @return true if the entry identified by the given alias is a
-     * <i>trusted certificate entry</i>, false otherwise.
-     */
-    public boolean engineIsCertificateEntry(String alias) {
-        Object entry = entries.get(convertAlias(alias));
-        if ((entry != null) && (entry instanceof TrustedCertEntry)) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Returns the (alias) name of the first keystore entry whose certificate
-     * matches the given certificate.
-     *
-     * <p>This method attempts to match the given certificate with each
-     * keystore entry. If the entry being considered
-     * is a <i>trusted certificate entry</i>, the given certificate is
-     * compared to that entry's certificate. If the entry being considered is
-     * a <i>key entry</i>, the given certificate is compared to the first
-     * element of that entry's certificate chain (if a chain exists).
-     *
-     * @param cert the certificate to match with.
-     *
-     * @return the (alias) name of the first entry with matching certificate,
-     * or null if no such entry exists in this keystore.
-     */
-    public String engineGetCertificateAlias(Certificate cert) {
-        Certificate certElem;
-
-        for (Enumeration<String> e = entries.keys(); e.hasMoreElements(); ) {
-            String alias = e.nextElement();
-            Object entry = entries.get(alias);
-            if (entry instanceof TrustedCertEntry) {
-                certElem = ((TrustedCertEntry)entry).cert;
-            } else if (((KeyEntry)entry).chain != null) {
-                certElem = ((KeyEntry)entry).chain[0];
-            } else {
-                continue;
-            }
-            if (certElem.equals(cert)) {
-                return alias;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Stores this keystore to the given output stream, and protects its
-     * integrity with the given password.
-     *
-     * @param stream the output stream to which this keystore is written.
-     * @param password the password to generate the keystore integrity check
-     *
-     * @exception IOException if there was an I/O problem with data
-     * @exception NoSuchAlgorithmException if the appropriate data integrity
-     * algorithm could not be found
-     * @exception CertificateException if any of the certificates included in
-     * the keystore data could not be stored
-     */
-    public void engineStore(OutputStream stream, char[] password)
-        throws IOException, NoSuchAlgorithmException, CertificateException
-    {
-        synchronized(entries) {
-            /*
-             * KEYSTORE FORMAT:
-             *
-             * Magic number (big-endian integer),
-             * Version of this file format (big-endian integer),
-             *
-             * Count (big-endian integer),
-             * followed by "count" instances of either:
-             *
-             *     {
-             *      tag=1 (big-endian integer),
-             *      alias (UTF string)
-             *      timestamp
-             *      encrypted private-key info according to PKCS #8
-             *          (integer length followed by encoding)
-             *      cert chain (integer count, then certs; for each cert,
-             *          integer length followed by encoding)
-             *     }
-             *
-             * or:
-             *
-             *     {
-             *      tag=2 (big-endian integer)
-             *      alias (UTF string)
-             *      timestamp
-             *      cert (integer length followed by encoding)
-             *     }
-             *
-             * ended by a keyed SHA1 hash (bytes only) of
-             *     { password + whitener + preceding body }
-             */
-
-            // password is mandatory when storing
-            if (password == null) {
-                throw new IllegalArgumentException("password can't be null");
-            }
-
-            byte[] encoded; // the certificate encoding
-
-            MessageDigest md = getPreKeyedHash(password);
-            DataOutputStream dos
-                = new DataOutputStream(new DigestOutputStream(stream, md));
-
-            dos.writeInt(MAGIC);
-            // always write the latest version
-            dos.writeInt(VERSION_2);
-
-            dos.writeInt(entries.size());
-
-            for (Enumeration<String> e = entries.keys(); e.hasMoreElements();) {
-
-                String alias = e.nextElement();
-                Object entry = entries.get(alias);
-
-                if (entry instanceof KeyEntry) {
-
-                    // Store this entry as a KeyEntry
-                    dos.writeInt(1);
-
-                    // Write the alias
-                    dos.writeUTF(alias);
-
-                    // Write the (entry creation) date
-                    dos.writeLong(((KeyEntry)entry).date.getTime());
-
-                    // Write the protected private key
-                    dos.writeInt(((KeyEntry)entry).protectedPrivKey.length);
-                    dos.write(((KeyEntry)entry).protectedPrivKey);
-
-                    // Write the certificate chain
-                    int chainLen;
-                    if (((KeyEntry)entry).chain == null) {
-                        chainLen = 0;
-                    } else {
-                        chainLen = ((KeyEntry)entry).chain.length;
-                    }
-                    dos.writeInt(chainLen);
-                    for (int i = 0; i < chainLen; i++) {
-                        encoded = ((KeyEntry)entry).chain[i].getEncoded();
-                        dos.writeUTF(((KeyEntry)entry).chain[i].getType());
-                        dos.writeInt(encoded.length);
-                        dos.write(encoded);
-                    }
-                } else {
-
-                    // Store this entry as a certificate
-                    dos.writeInt(2);
-
-                    // Write the alias
-                    dos.writeUTF(alias);
-
-                    // Write the (entry creation) date
-                    dos.writeLong(((TrustedCertEntry)entry).date.getTime());
-
-                    // Write the trusted certificate
-                    encoded = ((TrustedCertEntry)entry).cert.getEncoded();
-                    dos.writeUTF(((TrustedCertEntry)entry).cert.getType());
-                    dos.writeInt(encoded.length);
-                    dos.write(encoded);
-                }
-            }
-
-            /*
-             * Write the keyed hash which is used to detect tampering with
-             * the keystore (such as deleting or modifying key or
-             * certificate entries).
-             */
-            byte digest[] = md.digest();
-
-            dos.write(digest);
-            dos.flush();
-        }
-    }
-
-    /**
-     * Loads the keystore from the given input stream.
-     *
-     * <p>If a password is given, it is used to check the integrity of the
-     * keystore data. Otherwise, the integrity of the keystore is not checked.
-     *
-     * @param stream the input stream from which the keystore is loaded
-     * @param password the (optional) password used to check the integrity of
-     * the keystore.
-     *
-     * @exception IOException if there is an I/O or format problem with the
-     * keystore data
-     * @exception NoSuchAlgorithmException if the algorithm used to check
-     * the integrity of the keystore cannot be found
-     * @exception CertificateException if any of the certificates in the
-     * keystore could not be loaded
-     */
-    public void engineLoad(InputStream stream, char[] password)
-        throws IOException, NoSuchAlgorithmException, CertificateException
-    {
-        synchronized(entries) {
-            DataInputStream dis;
-            MessageDigest md = null;
-            CertificateFactory cf = null;
-            Hashtable<String, CertificateFactory> cfs = null;
-            ByteArrayInputStream bais = null;
-            byte[] encoded = null;
-
-            if (stream == null)
-                return;
-
-            if (password != null) {
-                md = getPreKeyedHash(password);
-                dis = new DataInputStream(new DigestInputStream(stream, md));
-            } else {
-                dis = new DataInputStream(stream);
-            }
-
-            // Body format: see store method
-
-            int xMagic = dis.readInt();
-            int xVersion = dis.readInt();
-
-            if (xMagic!=MAGIC ||
-                (xVersion!=VERSION_1 && xVersion!=VERSION_2)) {
-                throw new IOException("Invalid keystore format");
-            }
-
-            if (xVersion == VERSION_1) {
-                cf = CertificateFactory.getInstance("X509");
-            } else {
-                // version 2
-                cfs = new Hashtable<String, CertificateFactory>(3);
-            }
-
-            entries.clear();
-            int count = dis.readInt();
-
-            for (int i = 0; i < count; i++) {
-                int tag;
-                String alias;
-
-                tag = dis.readInt();
-
-                if (tag == 1) { // private key entry
-
-                    KeyEntry entry = new KeyEntry();
-
-                    // Read the alias
-                    alias = dis.readUTF();
-
-                    // Read the (entry creation) date
-                    entry.date = new Date(dis.readLong());
-
-                    // Read the private key
-                    entry.protectedPrivKey =
-                            IOUtils.readFully(dis, dis.readInt(), true);
-
-                    // Read the certificate chain
-                    int numOfCerts = dis.readInt();
-                    if (numOfCerts > 0) {
-                        List<Certificate> certs = new ArrayList<>(
-                                numOfCerts > 10 ? 10 : numOfCerts);
-                        for (int j = 0; j < numOfCerts; j++) {
-                            if (xVersion == 2) {
-                                // read the certificate type, and instantiate a
-                                // certificate factory of that type (reuse
-                                // existing factory if possible)
-                                String certType = dis.readUTF();
-                                if (cfs.containsKey(certType)) {
-                                    // reuse certificate factory
-                                    cf = cfs.get(certType);
-                                } else {
-                                    // create new certificate factory
-                                    cf = CertificateFactory.getInstance(certType);
-                                    // store the certificate factory so we can
-                                    // reuse it later
-                                    cfs.put(certType, cf);
-                                }
-                            }
-                            // instantiate the certificate
-                            encoded = IOUtils.readFully(dis, dis.readInt(), true);
-                            bais = new ByteArrayInputStream(encoded);
-                            certs.add(cf.generateCertificate(bais));
-                            bais.close();
-                        }
-                        // We can be sure now that numOfCerts of certs are read
-                        entry.chain = certs.toArray(new Certificate[numOfCerts]);
-                    }
-
-                    // Add the entry to the list
-                    entries.put(alias, entry);
-
-                } else if (tag == 2) { // trusted certificate entry
-
-                    TrustedCertEntry entry = new TrustedCertEntry();
-
-                    // Read the alias
-                    alias = dis.readUTF();
-
-                    // Read the (entry creation) date
-                    entry.date = new Date(dis.readLong());
-
-                    // Read the trusted certificate
-                    if (xVersion == 2) {
-                        // read the certificate type, and instantiate a
-                        // certificate factory of that type (reuse
-                        // existing factory if possible)
-                        String certType = dis.readUTF();
-                        if (cfs.containsKey(certType)) {
-                            // reuse certificate factory
-                            cf = cfs.get(certType);
-                        } else {
-                            // create new certificate factory
-                            cf = CertificateFactory.getInstance(certType);
-                            // store the certificate factory so we can
-                            // reuse it later
-                            cfs.put(certType, cf);
-                        }
-                    }
-                    encoded = IOUtils.readFully(dis, dis.readInt(), true);
-                    bais = new ByteArrayInputStream(encoded);
-                    entry.cert = cf.generateCertificate(bais);
-                    bais.close();
-
-                    // Add the entry to the list
-                    entries.put(alias, entry);
-
-                } else {
-                    throw new IOException("Unrecognized keystore entry");
-                }
-            }
-
-            /*
-             * If a password has been provided, we check the keyed digest
-             * at the end. If this check fails, the store has been tampered
-             * with
-             */
-            if (password != null) {
-                byte computed[], actual[];
-                computed = md.digest();
-                actual = new byte[computed.length];
-                dis.readFully(actual);
-                for (int i = 0; i < computed.length; i++) {
-                    if (computed[i] != actual[i]) {
-                        Throwable t = new UnrecoverableKeyException
-                            ("Password verification failed");
-                        throw (IOException)new IOException
-                            ("Keystore was tampered with, or "
-                            + "password was incorrect").initCause(t);
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * To guard against tampering with the keystore, we append a keyed
-     * hash with a bit of whitener.
-     */
-    private MessageDigest getPreKeyedHash(char[] password)
-        throws NoSuchAlgorithmException, UnsupportedEncodingException
-    {
-        int i, j;
-
-        MessageDigest md = MessageDigest.getInstance("SHA");
-        byte[] passwdBytes = new byte[password.length * 2];
-        for (i=0, j=0; i<password.length; i++) {
-            passwdBytes[j++] = (byte)(password[i] >> 8);
-            passwdBytes[j++] = (byte)password[i];
-        }
-        md.update(passwdBytes);
-        for (i=0; i<passwdBytes.length; i++)
-            passwdBytes[i] = 0;
-        md.update("Mighty Aphrodite".getBytes("UTF8"));
-        return md;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/KeyProtector.java b/ojluni/src/main/java/sun/security/provider/KeyProtector.java
deleted file mode 100755
index ef7a1f4..0000000
--- a/ojluni/src/main/java/sun/security/provider/KeyProtector.java
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.
- */
-
-package sun.security.provider;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.security.Key;
-import java.security.KeyStoreException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.security.UnrecoverableKeyException;
-import java.util.*;
-
-import sun.security.pkcs.PKCS8Key;
-import sun.security.pkcs.EncryptedPrivateKeyInfo;
-import sun.security.x509.AlgorithmId;
-import sun.security.util.ObjectIdentifier;
-import sun.security.util.DerValue;
-
-/**
- * This is an implementation of a Sun proprietary, exportable algorithm
- * intended for use when protecting (or recovering the cleartext version of)
- * sensitive keys.
- * This algorithm is not intended as a general purpose cipher.
- *
- * This is how the algorithm works for key protection:
- *
- * p - user password
- * s - random salt
- * X - xor key
- * P - to-be-protected key
- * Y - protected key
- * R - what gets stored in the keystore
- *
- * Step 1:
- * Take the user's password, append a random salt (of fixed size) to it,
- * and hash it: d1 = digest(p, s)
- * Store d1 in X.
- *
- * Step 2:
- * Take the user's password, append the digest result from the previous step,
- * and hash it: dn = digest(p, dn-1).
- * Store dn in X (append it to the previously stored digests).
- * Repeat this step until the length of X matches the length of the private key
- * P.
- *
- * Step 3:
- * XOR X and P, and store the result in Y: Y = X XOR P.
- *
- * Step 4:
- * Store s, Y, and digest(p, P) in the result buffer R:
- * R = s + Y + digest(p, P), where "+" denotes concatenation.
- * (NOTE: digest(p, P) is stored in the result buffer, so that when the key is
- * recovered, we can check if the recovered key indeed matches the original
- * key.) R is stored in the keystore.
- *
- * The protected key is recovered as follows:
- *
- * Step1 and Step2 are the same as above, except that the salt is not randomly
- * generated, but taken from the result R of step 4 (the first length(s)
- * bytes).
- *
- * Step 3 (XOR operation) yields the plaintext key.
- *
- * Then concatenate the password with the recovered key, and compare with the
- * last length(digest(p, P)) bytes of R. If they match, the recovered key is
- * indeed the same key as the original key.
- *
- * @author Jan Luehe
- *
- *
- * @see java.security.KeyStore
- * @see JavaKeyStore
- * @see KeyTool
- *
- * @since 1.2
- */
-
-final class KeyProtector {
-
-    private static final int SALT_LEN = 20; // the salt length
-    private static final String DIGEST_ALG = "SHA";
-    private static final int DIGEST_LEN = 20;
-
-    // defined by JavaSoft
-    private static final String KEY_PROTECTOR_OID = "1.3.6.1.4.1.42.2.17.1.1";
-
-    // The password used for protecting/recovering keys passed through this
-    // key protector. We store it as a byte array, so that we can digest it.
-    private byte[] passwdBytes;
-
-    private MessageDigest md;
-
-
-    /**
-     * Creates an instance of this class, and initializes it with the given
-     * password.
-     *
-     * <p>The password is expected to be in printable ASCII.
-     * Normal rules for good password selection apply: at least
-     * seven characters, mixed case, with punctuation encouraged.
-     * Phrases or words which are easily guessed, for example by
-     * being found in dictionaries, are bad.
-     */
-    public KeyProtector(char[] password)
-        throws NoSuchAlgorithmException
-    {
-        int i, j;
-
-        if (password == null) {
-           throw new IllegalArgumentException("password can't be null");
-        }
-        md = MessageDigest.getInstance(DIGEST_ALG);
-        // Convert password to byte array, so that it can be digested
-        passwdBytes = new byte[password.length * 2];
-        for (i=0, j=0; i<password.length; i++) {
-            passwdBytes[j++] = (byte)(password[i] >> 8);
-            passwdBytes[j++] = (byte)password[i];
-        }
-    }
-
-    /**
-     * Ensures that the password bytes of this key protector are
-     * set to zero when there are no more references to it.
-     */
-    protected void finalize() {
-        if (passwdBytes != null) {
-            Arrays.fill(passwdBytes, (byte)0x00);
-            passwdBytes = null;
-        }
-    }
-
-    /*
-     * Protects the given plaintext key, using the password provided at
-     * construction time.
-     */
-    public byte[] protect(Key key) throws KeyStoreException
-    {
-        int i;
-        int numRounds;
-        byte[] digest;
-        int xorOffset; // offset in xorKey where next digest will be stored
-        int encrKeyOffset = 0;
-
-        if (key == null) {
-            throw new IllegalArgumentException("plaintext key can't be null");
-        }
-
-        if (!"PKCS#8".equalsIgnoreCase(key.getFormat())) {
-            throw new KeyStoreException(
-                "Cannot get key bytes, not PKCS#8 encoded");
-        }
-
-        byte[] plainKey = key.getEncoded();
-        if (plainKey == null) {
-            throw new KeyStoreException(
-                "Cannot get key bytes, encoding not supported");
-        }
-
-        // Determine the number of digest rounds
-        numRounds = plainKey.length / DIGEST_LEN;
-        if ((plainKey.length % DIGEST_LEN) != 0)
-            numRounds++;
-
-        // Create a random salt
-        byte[] salt = new byte[SALT_LEN];
-        SecureRandom random = new SecureRandom();
-        random.nextBytes(salt);
-
-        // Set up the byte array which will be XORed with "plainKey"
-        byte[] xorKey = new byte[plainKey.length];
-
-        // Compute the digests, and store them in "xorKey"
-        for (i = 0, xorOffset = 0, digest = salt;
-             i < numRounds;
-             i++, xorOffset += DIGEST_LEN) {
-            md.update(passwdBytes);
-            md.update(digest);
-            digest = md.digest();
-            md.reset();
-            // Copy the digest into "xorKey"
-            if (i < numRounds - 1) {
-                System.arraycopy(digest, 0, xorKey, xorOffset,
-                                 digest.length);
-            } else {
-                System.arraycopy(digest, 0, xorKey, xorOffset,
-                                 xorKey.length - xorOffset);
-            }
-        }
-
-        // XOR "plainKey" with "xorKey", and store the result in "tmpKey"
-        byte[] tmpKey = new byte[plainKey.length];
-        for (i = 0; i < tmpKey.length; i++) {
-            tmpKey[i] = (byte)(plainKey[i] ^ xorKey[i]);
-        }
-
-        // Store salt and "tmpKey" in "encrKey"
-        byte[] encrKey = new byte[salt.length + tmpKey.length + DIGEST_LEN];
-        System.arraycopy(salt, 0, encrKey, encrKeyOffset, salt.length);
-        encrKeyOffset += salt.length;
-        System.arraycopy(tmpKey, 0, encrKey, encrKeyOffset, tmpKey.length);
-        encrKeyOffset += tmpKey.length;
-
-        // Append digest(password, plainKey) as an integrity check to "encrKey"
-        md.update(passwdBytes);
-        Arrays.fill(passwdBytes, (byte)0x00);
-        passwdBytes = null;
-        md.update(plainKey);
-        digest = md.digest();
-        md.reset();
-        System.arraycopy(digest, 0, encrKey, encrKeyOffset, digest.length);
-
-        // wrap the protected private key in a PKCS#8-style
-        // EncryptedPrivateKeyInfo, and returns its encoding
-        AlgorithmId encrAlg;
-        try {
-            encrAlg = new AlgorithmId(new ObjectIdentifier(KEY_PROTECTOR_OID));
-            return new EncryptedPrivateKeyInfo(encrAlg,encrKey).getEncoded();
-        } catch (IOException ioe) {
-            throw new KeyStoreException(ioe.getMessage());
-        }
-    }
-
-    /*
-     * Recovers the plaintext version of the given key (in protected format),
-     * using the password provided at construction time.
-     */
-    public Key recover(EncryptedPrivateKeyInfo encrInfo)
-        throws UnrecoverableKeyException
-    {
-        int i;
-        byte[] digest;
-        int numRounds;
-        int xorOffset; // offset in xorKey where next digest will be stored
-        int encrKeyLen; // the length of the encrpyted key
-
-        // do we support the algorithm?
-        AlgorithmId encrAlg = encrInfo.getAlgorithm();
-        if (!(encrAlg.getOID().toString().equals(KEY_PROTECTOR_OID))) {
-            throw new UnrecoverableKeyException("Unsupported key protection "
-                                                + "algorithm");
-        }
-
-        byte[] protectedKey = encrInfo.getEncryptedData();
-
-        /*
-         * Get the salt associated with this key (the first SALT_LEN bytes of
-         * <code>protectedKey</code>)
-         */
-        byte[] salt = new byte[SALT_LEN];
-        System.arraycopy(protectedKey, 0, salt, 0, SALT_LEN);
-
-        // Determine the number of digest rounds
-        encrKeyLen = protectedKey.length - SALT_LEN - DIGEST_LEN;
-        numRounds = encrKeyLen / DIGEST_LEN;
-        if ((encrKeyLen % DIGEST_LEN) != 0) numRounds++;
-
-        // Get the encrypted key portion and store it in "encrKey"
-        byte[] encrKey = new byte[encrKeyLen];
-        System.arraycopy(protectedKey, SALT_LEN, encrKey, 0, encrKeyLen);
-
-        // Set up the byte array which will be XORed with "encrKey"
-        byte[] xorKey = new byte[encrKey.length];
-
-        // Compute the digests, and store them in "xorKey"
-        for (i = 0, xorOffset = 0, digest = salt;
-             i < numRounds;
-             i++, xorOffset += DIGEST_LEN) {
-            md.update(passwdBytes);
-            md.update(digest);
-            digest = md.digest();
-            md.reset();
-            // Copy the digest into "xorKey"
-            if (i < numRounds - 1) {
-                System.arraycopy(digest, 0, xorKey, xorOffset,
-                                 digest.length);
-            } else {
-                System.arraycopy(digest, 0, xorKey, xorOffset,
-                                 xorKey.length - xorOffset);
-            }
-        }
-
-        // XOR "encrKey" with "xorKey", and store the result in "plainKey"
-        byte[] plainKey = new byte[encrKey.length];
-        for (i = 0; i < plainKey.length; i++) {
-            plainKey[i] = (byte)(encrKey[i] ^ xorKey[i]);
-        }
-
-        /*
-         * Check the integrity of the recovered key by concatenating it with
-         * the password, digesting the concatenation, and comparing the
-         * result of the digest operation with the digest provided at the end
-         * of <code>protectedKey</code>. If the two digest values are
-         * different, throw an exception.
-         */
-        md.update(passwdBytes);
-        Arrays.fill(passwdBytes, (byte)0x00);
-        passwdBytes = null;
-        md.update(plainKey);
-        digest = md.digest();
-        md.reset();
-        for (i = 0; i < digest.length; i++) {
-            if (digest[i] != protectedKey[SALT_LEN + encrKeyLen + i]) {
-                throw new UnrecoverableKeyException("Cannot recover key");
-            }
-        }
-
-        // The parseKey() method of PKCS8Key parses the key
-        // algorithm and instantiates the appropriate key factory,
-        // which in turn parses the key material.
-        try {
-            return PKCS8Key.parseKey(new DerValue(plainKey));
-        } catch (IOException ioe) {
-            throw new UnrecoverableKeyException(ioe.getMessage());
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/MD2.java b/ojluni/src/main/java/sun/security/provider/MD2.java
deleted file mode 100755
index c0c116a..0000000
--- a/ojluni/src/main/java/sun/security/provider/MD2.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.security.provider;
-
-import java.util.Arrays;
-
-/**
- * Implementation for the MD2 algorithm, see RFC1319. It is very slow and
- * not particular secure. It is only supported to be able to verify
- * RSA/Verisign root certificates signed using MD2withRSA. It should not
- * be used for anything else.
- *
- * @since   1.5
- * @author  Andreas Sterbenz
- */
-public final class MD2 extends DigestBase {
-
-    // state, 48 ints
-    private final int[] X;
-
-    // checksum, 16 ints. they are really bytes, but byte arithmetic in
-    // the JVM is much slower that int arithmetic.
-    private final int[] C;
-
-    // temporary store for checksum C during final digest
-    private final byte[] cBytes;
-
-    /**
-     * Create a new MD2 digest. Called by the JCA framework
-     */
-    public MD2() {
-        super("MD2", 16, 16);
-        X = new int[48];
-        C = new int[16];
-        cBytes = new byte[16];
-    }
-
-    private MD2(MD2 base) {
-        super(base);
-        this.X = base.X.clone();
-        this.C = base.C.clone();
-        cBytes = new byte[16];
-    }
-
-    public Object clone() {
-        return new MD2(this);
-    }
-
-    // reset state and checksum
-    void implReset() {
-        Arrays.fill(X, 0);
-        Arrays.fill(C, 0);
-    }
-
-    // finish the digest
-    void implDigest(byte[] out, int ofs) {
-        int padValue = 16 - ((int)bytesProcessed & 15);
-        engineUpdate(PADDING[padValue], 0, padValue);
-        for (int i = 0; i < 16; i++) {
-            cBytes[i] = (byte)C[i];
-        }
-        implCompress(cBytes, 0);
-        for (int i = 0; i < 16; i++) {
-            out[ofs + i] = (byte)X[i];
-        }
-    }
-
-    // one iteration of the compression function
-    void implCompress(byte[] b, int ofs) {
-        for (int i = 0; i < 16; i++) {
-            int k = b[ofs + i] & 0xff;
-            X[16 + i] = k;
-            X[32 + i] = k ^ X[i];
-        }
-
-        // update the checksum
-        int t = C[15];
-        for (int i = 0; i < 16; i++) {
-            t = (C[i] ^= S[X[16 + i] ^ t]);
-        }
-
-        t = 0;
-        for (int i = 0; i < 18; i++) {
-            for (int j = 0; j < 48; j++) {
-                t = (X[j] ^= S[t]);
-            }
-            t = (t + i) & 0xff;
-        }
-    }
-
-    // substitution table derived from Pi. Copied from the RFC.
-    private final static int[] S = new int[] {
-        41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6,
-        19, 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188,
-        76, 130, 202, 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24,
-        138, 23, 229, 18, 190, 78, 196, 214, 218, 158, 222, 73, 160, 251,
-        245, 142, 187, 47, 238, 122, 169, 104, 121, 145, 21, 178, 7, 63,
-        148, 194, 16, 137, 11, 34, 95, 33, 128, 127, 93, 154, 90, 144, 50,
-        39, 53, 62, 204, 231, 191, 247, 151, 3, 255, 25, 48, 179, 72, 165,
-        181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56, 210,
-        150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157,
-        112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27,
-        96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15,
-        85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197,
-        234, 38, 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65,
-        129, 77, 82, 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123,
-        8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99, 232, 109, 233,
-        203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88, 208, 228,
-        166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237,
-        31, 26, 219, 153, 141, 51, 159, 17, 131, 20,
-    };
-
-    // digest padding. 17 element array.
-    // padding[0] is null
-    // padding[i] is an array of i time the byte value i (i = 1..16)
-    private final static byte[][] PADDING;
-
-    static {
-        PADDING = new byte[17][];
-        for (int i = 1; i < 17; i++) {
-            byte[] b = new byte[i];
-            Arrays.fill(b, (byte)i);
-            PADDING[i] = b;
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/provider/MD4.java b/ojluni/src/main/java/sun/security/provider/MD4.java
deleted file mode 100755
index b44a24d..0000000
--- a/ojluni/src/main/java/sun/security/provider/MD4.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-package sun.security.provider;
-
-import java.security.*;
-
-import static sun.security.provider.ByteArrayAccess.*;
-
-/**
- * The MD4 class is used to compute an MD4 message digest over a given
- * buffer of bytes. It is an implementation of the RSA Data Security Inc
- * MD4 algorithim as described in internet RFC 1320.
- *
- * <p>The MD4 algorithm is very weak and should not be used unless it is
- * unavoidable. Therefore, it is not registered in our standard providers. To
- * obtain an implementation, call the static getInstance() method in this
- * class.
- *
- * @author      Andreas Sterbenz
- */
-public final class MD4 extends DigestBase {
-
-    // state of this object
-    private final int[] state;
-    // temporary buffer, used by implCompress()
-    private final int[] x;
-
-    // rotation constants
-    private static final int S11 = 3;
-    private static final int S12 = 7;
-    private static final int S13 = 11;
-    private static final int S14 = 19;
-    private static final int S21 = 3;
-    private static final int S22 = 5;
-    private static final int S23 = 9;
-    private static final int S24 = 13;
-    private static final int S31 = 3;
-    private static final int S32 = 9;
-    private static final int S33 = 11;
-    private static final int S34 = 15;
-
-    private final static Provider md4Provider;
-
-    static {
-        md4Provider = new Provider("MD4Provider", 1.0d, "MD4 MessageDigest") {};
-        AccessController.doPrivileged(new PrivilegedAction<Void>() {
-            public Void run() {
-                md4Provider.put("MessageDigest.MD4", "sun.security.provider.MD4");
-                return null;
-            }
-        });
-    }
-
-    public static MessageDigest getInstance() {
-        try {
-            return MessageDigest.getInstance("MD4", md4Provider);
-        } catch (NoSuchAlgorithmException e) {
-            // should never occur
-            throw new ProviderException(e);
-        }
-    }
-
-    // Standard constructor, creates a new MD4 instance.
-    public MD4() {
-        super("MD4", 16, 64);
-        state = new int[4];
-        x = new int[16];
-        implReset();
-    }
-
-    // Cloning constructor
-    private MD4(MD4 base) {
-        super(base);
-        this.state = base.state.clone();
-        this.x = new int[16];
-    }
-
-    // clone this object
-    public Object clone() {
-        return new MD4(this);
-    }
-
-    /**
-     * Reset the state of this object.
-     */
-    void implReset() {
-        // Load magic initialization constants.
-        state[0] = 0x67452301;
-        state[1] = 0xefcdab89;
-        state[2] = 0x98badcfe;
-        state[3] = 0x10325476;
-    }
-
-    /**
-     * Perform the final computations, any buffered bytes are added
-     * to the digest, the count is added to the digest, and the resulting
-     * digest is stored.
-     */
-    void implDigest(byte[] out, int ofs) {
-        long bitsProcessed = bytesProcessed << 3;
-
-        int index = (int)bytesProcessed & 0x3f;
-        int padLen = (index < 56) ? (56 - index) : (120 - index);
-        engineUpdate(padding, 0, padLen);
-
-        i2bLittle4((int)bitsProcessed, buffer, 56);
-        i2bLittle4((int)(bitsProcessed >>> 32), buffer, 60);
-        implCompress(buffer, 0);
-
-        i2bLittle(state, 0, out, ofs, 16);
-    }
-
-    private static int FF(int a, int b, int c, int d, int x, int s) {
-        a += ((b & c) | ((~b) & d)) + x;
-        return ((a << s) | (a >>> (32 - s)));
-    }
-
-    private static int GG(int a, int b, int c, int d, int x, int s) {
-        a += ((b & c) | (b & d) | (c & d)) + x + 0x5a827999;
-        return ((a << s) | (a >>> (32 - s)));
-    }
-
-    private static int HH(int a, int b, int c, int d, int x, int s) {
-        a += ((b ^ c) ^ d) + x + 0x6ed9eba1;
-        return ((a << s) | (a >>> (32 - s)));
-    }
-
-    /**
-     * This is where the functions come together as the generic MD4
-     * transformation operation. It consumes sixteen
-     * bytes from the buffer, beginning at the specified offset.
-     */
-    void implCompress(byte[] buf, int ofs) {
-        b2iLittle64(buf, ofs, x);
-
-        int a = state[0];
-        int b = state[1];
-        int c = state[2];
-        int d = state[3];
-
-        /* Round 1 */
-        a = FF (a, b, c, d, x[ 0], S11); /* 1 */
-        d = FF (d, a, b, c, x[ 1], S12); /* 2 */
-        c = FF (c, d, a, b, x[ 2], S13); /* 3 */
-        b = FF (b, c, d, a, x[ 3], S14); /* 4 */
-        a = FF (a, b, c, d, x[ 4], S11); /* 5 */
-        d = FF (d, a, b, c, x[ 5], S12); /* 6 */
-        c = FF (c, d, a, b, x[ 6], S13); /* 7 */
-        b = FF (b, c, d, a, x[ 7], S14); /* 8 */
-        a = FF (a, b, c, d, x[ 8], S11); /* 9 */
-        d = FF (d, a, b, c, x[ 9], S12); /* 10 */
-        c = FF (c, d, a, b, x[10], S13); /* 11 */
-        b = FF (b, c, d, a, x[11], S14); /* 12 */
-        a = FF (a, b, c, d, x[12], S11); /* 13 */
-        d = FF (d, a, b, c, x[13], S12); /* 14 */
-        c = FF (c, d, a, b, x[14], S13); /* 15 */
-        b = FF (b, c, d, a, x[15], S14); /* 16 */
-
-        /* Round 2 */
-        a = GG (a, b, c, d, x[ 0], S21); /* 17 */
-        d = GG (d, a, b, c, x[ 4], S22); /* 18 */
-        c = GG (c, d, a, b, x[ 8], S23); /* 19 */
-        b = GG (b, c, d, a, x[12], S24); /* 20 */
-        a = GG (a, b, c, d, x[ 1], S21); /* 21 */
-        d = GG (d, a, b, c, x[ 5], S22); /* 22 */
-        c = GG (c, d, a, b, x[ 9], S23); /* 23 */
-        b = GG (b, c, d, a, x[13], S24); /* 24 */
-        a = GG (a, b, c, d, x[ 2], S21); /* 25 */
-        d = GG (d, a, b, c, x[ 6], S22); /* 26 */
-        c = GG (c, d, a, b, x[10], S23); /* 27 */
-        b = GG (b, c, d, a, x[14], S24); /* 28 */
-        a = GG (a, b, c, d, x[ 3], S21); /* 29 */
-        d = GG (d, a, b, c, x[ 7], S22); /* 30 */
-        c = GG (c, d, a, b, x[11], S23); /* 31 */
-        b = GG (b, c, d, a, x[15], S24); /* 32 */
-
-        /* Round 3 */
-        a = HH (a, b, c, d, x[ 0], S31); /* 33 */
-        d = HH (d, a, b, c, x[ 8], S32); /* 34 */
-        c = HH (c, d, a, b, x[ 4], S33); /* 35 */
-        b = HH (b, c, d, a, x[12], S34); /* 36 */
-        a = HH (a, b, c, d, x[ 2], S31); /* 37 */
-        d = HH (d, a, b, c, x[10], S32); /* 38 */
-        c = HH (c, d, a, b, x[ 6], S33); /* 39 */
-        b = HH (b, c, d, a, x[14], S34); /* 40 */
-        a = HH (a, b, c, d, x[ 1], S31); /* 41 */
-        d = HH (d, a, b, c, x[ 9], S32); /* 42 */
-        c = HH (c, d, a, b, x[ 5], S33); /* 43 */
-        b = HH (b, c, d, a, x[13], S34); /* 44 */
-        a = HH (a, b, c, d, x[ 3], S31); /* 45 */
-        d = HH (d, a, b, c, x[11], S32); /* 46 */
-        c = HH (c, d, a, b, x[ 7], S33); /* 47 */
-        b = HH (b, c, d, a, x[15], S34); /* 48 */
-
-        state[0] += a;
-        state[1] += b;
-        state[2] += c;
-        state[3] += d;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/provider/MD5.java b/ojluni/src/main/java/sun/security/provider/MD5.java
deleted file mode 100755
index 85830e5..0000000
--- a/ojluni/src/main/java/sun/security/provider/MD5.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Copyright (c) 1996, 2006, 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.
- */
-
-package sun.security.provider;
-
-import static sun.security.provider.ByteArrayAccess.*;
-
-/**
- * The MD5 class is used to compute an MD5 message digest over a given
- * buffer of bytes. It is an implementation of the RSA Data Security Inc
- * MD5 algorithim as described in internet RFC 1321.
- *
- * @author      Chuck McManis
- * @author      Benjamin Renaud
- * @author      Andreas Sterbenz
- */
-public final class MD5 extends DigestBase {
-
-    // state of this object
-    private final int[] state;
-    // temporary buffer, used by implCompress()
-    private final int[] x;
-
-    // rotation constants
-    private static final int S11 = 7;
-    private static final int S12 = 12;
-    private static final int S13 = 17;
-    private static final int S14 = 22;
-    private static final int S21 = 5;
-    private static final int S22 = 9;
-    private static final int S23 = 14;
-    private static final int S24 = 20;
-    private static final int S31 = 4;
-    private static final int S32 = 11;
-    private static final int S33 = 16;
-    private static final int S34 = 23;
-    private static final int S41 = 6;
-    private static final int S42 = 10;
-    private static final int S43 = 15;
-    private static final int S44 = 21;
-
-    // Standard constructor, creates a new MD5 instance.
-    public MD5() {
-        super("MD5", 16, 64);
-        state = new int[4];
-        x = new int[16];
-        implReset();
-    }
-
-    // Cloning constructor
-    private MD5(MD5 base) {
-        super(base);
-        this.state = base.state.clone();
-        this.x = new int[16];
-    }
-
-    // clone this object
-    public Object clone() {
-        return new MD5(this);
-    }
-
-    /**
-     * Reset the state of this object.
-     */
-    void implReset() {
-        // Load magic initialization constants.
-        state[0] = 0x67452301;
-        state[1] = 0xefcdab89;
-        state[2] = 0x98badcfe;
-        state[3] = 0x10325476;
-    }
-
-    /**
-     * Perform the final computations, any buffered bytes are added
-     * to the digest, the count is added to the digest, and the resulting
-     * digest is stored.
-     */
-    void implDigest(byte[] out, int ofs) {
-        long bitsProcessed = bytesProcessed << 3;
-
-        int index = (int)bytesProcessed & 0x3f;
-        int padLen = (index < 56) ? (56 - index) : (120 - index);
-        engineUpdate(padding, 0, padLen);
-
-        i2bLittle4((int)bitsProcessed, buffer, 56);
-        i2bLittle4((int)(bitsProcessed >>> 32), buffer, 60);
-        implCompress(buffer, 0);
-
-        i2bLittle(state, 0, out, ofs, 16);
-    }
-
-    /* **********************************************************
-     * The MD5 Functions. The results of this
-     * implementation were checked against the RSADSI version.
-     * **********************************************************
-     */
-
-    private static int FF(int a, int b, int c, int d, int x, int s, int ac) {
-        a += ((b & c) | ((~b) & d)) + x + ac;
-        return ((a << s) | (a >>> (32 - s))) + b;
-    }
-
-    private static int GG(int a, int b, int c, int d, int x, int s, int ac) {
-        a += ((b & d) | (c & (~d))) + x + ac;
-        return ((a << s) | (a >>> (32 - s))) + b;
-    }
-
-    private static int HH(int a, int b, int c, int d, int x, int s, int ac) {
-        a += ((b ^ c) ^ d) + x + ac;
-        return ((a << s) | (a >>> (32 - s))) + b;
-    }
-
-    private static int II(int a, int b, int c, int d, int x, int s, int ac) {
-        a += (c ^ (b | (~d))) + x + ac;
-        return ((a << s) | (a >>> (32 - s))) + b;
-    }
-
-    /**
-     * This is where the functions come together as the generic MD5
-     * transformation operation. It consumes sixteen
-     * bytes from the buffer, beginning at the specified offset.
-     */
-    void implCompress(byte[] buf, int ofs) {
-        b2iLittle64(buf, ofs, x);
-
-        int a = state[0];
-        int b = state[1];
-        int c = state[2];
-        int d = state[3];
-
-        /* Round 1 */
-        a = FF ( a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
-        d = FF ( d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
-        c = FF ( c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
-        b = FF ( b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
-        a = FF ( a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
-        d = FF ( d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
-        c = FF ( c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
-        b = FF ( b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
-        a = FF ( a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
-        d = FF ( d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
-        c = FF ( c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
-        b = FF ( b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
-        a = FF ( a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
-        d = FF ( d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
-        c = FF ( c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
-        b = FF ( b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
-
-        /* Round 2 */
-        a = GG ( a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
-        d = GG ( d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
-        c = GG ( c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
-        b = GG ( b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
-        a = GG ( a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
-        d = GG ( d, a, b, c, x[10], S22,  0x2441453); /* 22 */
-        c = GG ( c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
-        b = GG ( b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
-        a = GG ( a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
-        d = GG ( d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
-        c = GG ( c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
-        b = GG ( b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
-        a = GG ( a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
-        d = GG ( d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
-        c = GG ( c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
-        b = GG ( b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
-
-        /* Round 3 */
-        a = HH ( a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
-        d = HH ( d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
-        c = HH ( c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
-        b = HH ( b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
-        a = HH ( a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
-        d = HH ( d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
-        c = HH ( c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
-        b = HH ( b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
-        a = HH ( a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
-        d = HH ( d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
-        c = HH ( c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
-        b = HH ( b, c, d, a, x[ 6], S34,  0x4881d05); /* 44 */
-        a = HH ( a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
-        d = HH ( d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
-        c = HH ( c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
-        b = HH ( b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
-
-        /* Round 4 */
-        a = II ( a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
-        d = II ( d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
-        c = II ( c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
-        b = II ( b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
-        a = II ( a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
-        d = II ( d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
-        c = II ( c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
-        b = II ( b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
-        a = II ( a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
-        d = II ( d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
-        c = II ( c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
-        b = II ( b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
-        a = II ( a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
-        d = II ( d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
-        c = II ( c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
-        b = II ( b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
-
-        state[0] += a;
-        state[1] += b;
-        state[2] += c;
-        state[3] += d;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/provider/ParameterCache.java b/ojluni/src/main/java/sun/security/provider/ParameterCache.java
deleted file mode 100755
index f263fb7..0000000
--- a/ojluni/src/main/java/sun/security/provider/ParameterCache.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.security.provider;
-
-import java.util.*;
-import java.math.BigInteger;
-
-import java.security.*;
-import java.security.SecureRandom;
-import java.security.spec.*;
-
-import javax.crypto.spec.DHParameterSpec;
-
-/**
- * Cache for DSA and DH parameter specs. Used by the KeyPairGenerators
- * in the Sun, SunJCE, and SunPKCS11 provider if no parameters have been
- * explicitly specified by the application.
- *
- * @author  Andreas Sterbenz
- * @since   1.5
- */
-public final class ParameterCache {
-
-    private ParameterCache() {
-        // empty
-    }
-
-    // cache of DSA parameters
-    private final static Map<Integer,DSAParameterSpec> dsaCache;
-
-    // cache of DH parameters
-    private final static Map<Integer,DHParameterSpec> dhCache;
-
-    /**
-     * Return cached DSA parameters for the given keylength, or null if none
-     * are available in the cache.
-     */
-    public static DSAParameterSpec getCachedDSAParameterSpec(int keyLength) {
-        return dsaCache.get(Integer.valueOf(keyLength));
-    }
-
-    /**
-     * Return cached DH parameters for the given keylength, or null if none
-     * are available in the cache.
-     */
-    public static DHParameterSpec getCachedDHParameterSpec(int keyLength) {
-        return dhCache.get(Integer.valueOf(keyLength));
-    }
-
-    /**
-     * Return DSA parameters for the given keylength. Uses cache if possible,
-     * generates new parameters and adds them to the cache otherwise.
-     */
-    public static DSAParameterSpec getDSAParameterSpec(int keyLength,
-            SecureRandom random)
-            throws NoSuchAlgorithmException, InvalidParameterSpecException {
-        DSAParameterSpec spec = getCachedDSAParameterSpec(keyLength);
-        if (spec != null) {
-            return spec;
-        }
-        spec = getNewDSAParameterSpec(keyLength, random);
-        dsaCache.put(Integer.valueOf(keyLength), spec);
-        return spec;
-    }
-
-    /**
-     * Return DH parameters for the given keylength. Uses cache if possible,
-     * generates new parameters and adds them to the cache otherwise.
-     */
-    public static DHParameterSpec getDHParameterSpec(int keyLength,
-            SecureRandom random)
-            throws NoSuchAlgorithmException, InvalidParameterSpecException {
-        DHParameterSpec spec = getCachedDHParameterSpec(keyLength);
-        if (spec != null) {
-            return spec;
-        }
-        AlgorithmParameterGenerator gen =
-                AlgorithmParameterGenerator.getInstance("DH");
-        gen.init(keyLength, random);
-        AlgorithmParameters params = gen.generateParameters();
-        spec = params.getParameterSpec(DHParameterSpec.class);
-        dhCache.put(Integer.valueOf(keyLength), spec);
-        return spec;
-    }
-
-    /**
-     * Return new DSA parameters for the given keylength. Do not lookup in
-     * cache and do not cache the newly generated parameters. This method
-     * really only exists for the legacy method
-     * DSAKeyPairGenerator.initialize(int, boolean, SecureRandom).
-     */
-    public static DSAParameterSpec getNewDSAParameterSpec(int keyLength,
-            SecureRandom random)
-            throws NoSuchAlgorithmException, InvalidParameterSpecException {
-        AlgorithmParameterGenerator gen =
-                AlgorithmParameterGenerator.getInstance("DSA");
-        gen.init(keyLength, random);
-        AlgorithmParameters params = gen.generateParameters();
-        DSAParameterSpec spec = params.getParameterSpec(DSAParameterSpec.class);
-        return spec;
-    }
-
-    static {
-        // XXX change to ConcurrentHashMap once available
-        dhCache = Collections.synchronizedMap
-                        (new HashMap<Integer,DHParameterSpec>());
-        dsaCache = Collections.synchronizedMap
-                        (new HashMap<Integer,DSAParameterSpec>());
-
-        /*
-         * We support precomputed parameter for 512, 768 and 1024 bit
-         * moduli. In this file we provide both the seed and counter
-         * value of the generation process for each of these seeds,
-         * for validation purposes. We also include the test vectors
-         * from the DSA specification, FIPS 186, and the FIPS 186
-         * Change No 1, which updates the test vector using SHA-1
-         * instead of SHA (for both the G function and the message
-         * hash.
-         */
-
-        /*
-         * L = 512
-         * SEED = b869c82b35d70e1b1ff91b28e37a62ecdc34409b
-         * counter = 123
-         */
-        BigInteger p512 =
-            new BigInteger("fca682ce8e12caba26efccf7110e526db078b05edecb" +
-                           "cd1eb4a208f3ae1617ae01f35b91a47e6df63413c5e1" +
-                           "2ed0899bcd132acd50d99151bdc43ee737592e17", 16);
-
-        BigInteger q512 =
-            new BigInteger("962eddcc369cba8ebb260ee6b6a126d9346e38c5", 16);
-
-        BigInteger g512 =
-            new BigInteger("678471b27a9cf44ee91a49c5147db1a9aaf244f05a43" +
-                           "4d6486931d2d14271b9e35030b71fd73da179069b32e" +
-                           "2935630e1c2062354d0da20a6c416e50be794ca4", 16);
-
-        /*
-         * L = 768
-         * SEED = 77d0f8c4dad15eb8c4f2f8d6726cefd96d5bb399
-         * counter = 263
-         */
-        BigInteger p768 =
-            new BigInteger("e9e642599d355f37c97ffd3567120b8e25c9cd43e" +
-                           "927b3a9670fbec5d890141922d2c3b3ad24800937" +
-                           "99869d1e846aab49fab0ad26d2ce6a22219d470bc" +
-                           "e7d777d4a21fbe9c270b57f607002f3cef8393694" +
-                           "cf45ee3688c11a8c56ab127a3daf", 16);
-
-        BigInteger q768 =
-            new BigInteger("9cdbd84c9f1ac2f38d0f80f42ab952e7338bf511",
-                           16);
-
-        BigInteger g768 =
-            new BigInteger("30470ad5a005fb14ce2d9dcd87e38bc7d1b1c5fac" +
-                           "baecbe95f190aa7a31d23c4dbbcbe06174544401a" +
-                           "5b2c020965d8c2bd2171d3668445771f74ba084d2" +
-                           "029d83c1c158547f3a9f1a2715be23d51ae4d3e5a" +
-                           "1f6a7064f316933a346d3f529252", 16);
-
-
-        /*
-         * L = 1024
-         * SEED = 8d5155894229d5e689ee01e6018a237e2cae64cd
-         * counter = 92
-         */
-        BigInteger p1024 =
-            new BigInteger("fd7f53811d75122952df4a9c2eece4e7f611b7523c" +
-                           "ef4400c31e3f80b6512669455d402251fb593d8d58" +
-                           "fabfc5f5ba30f6cb9b556cd7813b801d346ff26660" +
-                           "b76b9950a5a49f9fe8047b1022c24fbba9d7feb7c6" +
-                           "1bf83b57e7c6a8a6150f04fb83f6d3c51ec3023554" +
-                           "135a169132f675f3ae2b61d72aeff22203199dd148" +
-                           "01c7", 16);
-
-        BigInteger q1024 =
-            new BigInteger("9760508f15230bccb292b982a2eb840bf0581cf5",
-                           16);
-
-        BigInteger g1024 =
-            new BigInteger("f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa" +
-                           "3aea82f9574c0b3d0782675159578ebad4594fe671" +
-                           "07108180b449167123e84c281613b7cf09328cc8a6" +
-                           "e13c167a8b547c8d28e0a3ae1e2bb3a675916ea37f" +
-                           "0bfa213562f1fb627a01243bcca4f1bea8519089a8" +
-                           "83dfe15ae59f06928b665e807b552564014c3bfecf" +
-                           "492a", 16);
-
-        dsaCache.put(Integer.valueOf(512),
-                                new DSAParameterSpec(p512, q512, g512));
-        dsaCache.put(Integer.valueOf(768),
-                                new DSAParameterSpec(p768, q768, g768));
-        dsaCache.put(Integer.valueOf(1024),
-                                new DSAParameterSpec(p1024, q1024, g1024));
-
-        // use DSA parameters for DH as well
-        dhCache.put(Integer.valueOf(512), new DHParameterSpec(p512, g512));
-        dhCache.put(Integer.valueOf(768), new DHParameterSpec(p768, g768));
-        dhCache.put(Integer.valueOf(1024), new DHParameterSpec(p1024, g1024));
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/provider/PolicyFile.java b/ojluni/src/main/java/sun/security/provider/PolicyFile.java
deleted file mode 100755
index b9a8ec2..0000000
--- a/ojluni/src/main/java/sun/security/provider/PolicyFile.java
+++ /dev/null
@@ -1,2437 +0,0 @@
-/*
- * Copyright (c) 1997, 2011, 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.
- */
-
-package sun.security.provider;
-
-import java.io.*;
-import java.lang.RuntimePermission;
-import java.lang.reflect.*;
-import java.lang.ref.*;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URI;
-import java.util.*;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.StringTokenizer;
-import java.util.PropertyPermission;
-import java.util.ArrayList;
-import java.util.ListIterator;
-import java.util.WeakHashMap;
-import java.text.MessageFormat;
-import com.sun.security.auth.PrincipalComparator;
-import java.security.*;
-import java.security.cert.Certificate;
-import java.security.cert.X509Certificate;
-import javax.security.auth.PrivateCredentialPermission;
-import javax.security.auth.Subject;
-import javax.security.auth.x500.X500Principal;
-import java.io.FilePermission;
-import java.net.SocketPermission;
-import java.net.NetPermission;
-import java.util.PropertyPermission;
-import java.util.concurrent.atomic.AtomicReference;
-/*
-import javax.security.auth.AuthPermission;
-import javax.security.auth.kerberos.ServicePermission;
-import javax.security.auth.kerberos.DelegationPermission;
-import java.io.SerializablePermission;
-import java.util.logging.LoggingPermission;
-import java.sql.SQLPermission;
-import java.lang.reflect.ReflectPermission;
-import javax.sound.sampled.AudioPermission;
-import javax.net.ssl.SSLPermission;
-*/
-import sun.misc.JavaSecurityProtectionDomainAccess;
-import static sun.misc.JavaSecurityProtectionDomainAccess.ProtectionDomainCache;
-import sun.misc.SharedSecrets;
-import sun.security.util.Password;
-import sun.security.util.PolicyUtil;
-import sun.security.util.PropertyExpander;
-import sun.security.util.Debug;
-import sun.security.util.ResourcesMgr;
-import sun.security.util.SecurityConstants;
-import sun.net.www.ParseUtil;
-
-/**
- * This class represents a default implementation for
- * <code>java.security.Policy</code>.
- *
- * Note:
- * For backward compatibility with JAAS 1.0 it loads
- * both java.auth.policy and java.policy. However it
- * is recommended that java.auth.policy be not used
- * and the java.policy contain all grant entries including
- * that contain principal-based entries.
- *
- *
- * <p> This object stores the policy for entire Java runtime,
- * and is the amalgamation of multiple static policy
- * configurations that resides in files.
- * The algorithm for locating the policy file(s) and reading their
- * information into this <code>Policy</code> object is:
- *
- * <ol>
- * <li>
- *   Loop through the <code>java.security.Security</code> properties,
- *   <i>policy.url.1</i>, <i>policy.url.2</i>, ...,
- *   <i>policy.url.X</i>" and
- *   <i>auth.policy.url.1</i>, <i>auth.policy.url.2</i>, ...,
- *   <i>auth.policy.url.X</i>".  These properties are set
- *   in the Java security properties file, which is located in the file named
- *   &lt;JAVA_HOME&gt;/lib/security/java.security.
- *   &lt;JAVA_HOME&gt; refers to the value of the java.home system property,
- *   and specifies the directory where the JRE is installed.
- *   Each property value specifies a <code>URL</code> pointing to a
- *   policy file to be loaded.  Read in and load each policy.
- *
- *   <i>auth.policy.url</i> is supported only for backward compatibility.
- *
- * <li>
- *   The <code>java.lang.System</code> property <i>java.security.policy</i>
- *   may also be set to a <code>URL</code> pointing to another policy file
- *   (which is the case when a user uses the -D switch at runtime).
- *   If this property is defined, and its use is allowed by the
- *   security property file (the Security property,
- *   <i>policy.allowSystemProperty</i> is set to <i>true</i>),
- *   also load that policy.
- *
- * <li>
- *   The <code>java.lang.System</code> property
- *   <i>java.security.auth.policy</i> may also be set to a
- *   <code>URL</code> pointing to another policy file
- *   (which is the case when a user uses the -D switch at runtime).
- *   If this property is defined, and its use is allowed by the
- *   security property file (the Security property,
- *   <i>policy.allowSystemProperty</i> is set to <i>true</i>),
- *   also load that policy.
- *
- *   <i>java.security.auth.policy</i> is supported only for backward
- *   compatibility.
- *
- *   If the  <i>java.security.policy</i> or
- *   <i>java.security.auth.policy</i> property is defined using
- *   "==" (rather than "="), then ignore all other specified
- *   policies and only load this policy.
- * </ol>
- *
- * Each policy file consists of one or more grant entries, each of
- * which consists of a number of permission entries.
- *
- * <pre>
- *   grant signedBy "<b>alias</b>", codeBase "<b>URL</b>",
- *         principal <b>principalClass</b> "<b>principalName</b>",
- *         principal <b>principalClass</b> "<b>principalName</b>",
- *         ... {
- *
- *     permission <b>Type</b> "<b>name</b> "<b>action</b>",
- *         signedBy "<b>alias</b>";
- *     permission <b>Type</b> "<b>name</b> "<b>action</b>",
- *         signedBy "<b>alias</b>";
- *     ....
- *   };
- * </pre>
- *
- * All non-bold items above must appear as is (although case
- * doesn't matter and some are optional, as noted below).
- * principal entries are optional and need not be present.
- * Italicized items represent variable values.
- *
- * <p> A grant entry must begin with the word <code>grant</code>.
- * The <code>signedBy</code>,<code>codeBase</code> and <code>principal</code>
- * name/value pairs are optional.
- * If they are not present, then any signer (including unsigned code)
- * will match, and any codeBase will match.
- * Note that the <i>principalClass</i>
- * may be set to the wildcard value, *, which allows it to match
- * any <code>Principal</code> class.  In addition, the <i>principalName</i>
- * may also be set to the wildcard value, *, allowing it to match
- * any <code>Principal</code> name.  When setting the <i>principalName</i>
- * to the *, do not surround the * with quotes.
- *
- * <p> A permission entry must begin with the word <code>permission</code>.
- * The word <code><i>Type</i></code> in the template above is
- * a specific permission type, such as <code>java.io.FilePermission</code>
- * or <code>java.lang.RuntimePermission</code>.
- *
- * <p> The "<i>action</i>" is required for
- * many permission types, such as <code>java.io.FilePermission</code>
- * (where it specifies what type of file access that is permitted).
- * It is not required for categories such as
- * <code>java.lang.RuntimePermission</code>
- * where it is not necessary - you either have the
- * permission specified by the <code>"<i>name</i>"</code>
- * value following the type name or you don't.
- *
- * <p> The <code>signedBy</code> name/value pair for a permission entry
- * is optional. If present, it indicates a signed permission. That is,
- * the permission class itself must be signed by the given alias in
- * order for it to be granted. For example,
- * suppose you have the following grant entry:
- *
- * <pre>
- *   grant principal foo.com.Principal "Duke" {
- *     permission Foo "foobar", signedBy "FooSoft";
- *   }
- * </pre>
- *
- * <p> Then this permission of type <i>Foo</i> is granted if the
- * <code>Foo.class</code> permission has been signed by the
- * "FooSoft" alias, or if XXX <code>Foo.class</code> is a
- * system class (i.e., is found on the CLASSPATH).
- *
- *
- * <p> Items that appear in an entry must appear in the specified order
- * (<code>permission</code>, <i>Type</i>, "<i>name</i>", and
- * "<i>action</i>"). An entry is terminated with a semicolon.
- *
- * <p> Case is unimportant for the identifiers (<code>permission</code>,
- * <code>signedBy</code>, <code>codeBase</code>, etc.) but is
- * significant for the <i>Type</i>
- * or for any string that is passed in as a value. <p>
- *
- * <p> An example of two entries in a policy configuration file is
- * <pre>
- *   // if the code is comes from "foo.com" and is running as "Duke",
- *   // grant it read/write to all files in /tmp.
- *
- *   grant codeBase "foo.com", principal foo.com.Principal "Duke" {
- *              permission java.io.FilePermission "/tmp/*", "read,write";
- *   };
- *
- *   // grant any code running as "Duke" permission to read
- *   // the "java.vendor" Property.
- *
- *   grant principal foo.com.Principal "Duke" {
- *         permission java.util.PropertyPermission "java.vendor";
- *
- *
- * </pre>
- *  This Policy implementation supports special handling of any
- *  permission that contains the string, "<b>${{self}}</b>", as part of
- *  its target name.  When such a permission is evaluated
- *  (such as during a security check), <b>${{self}}</b> is replaced
- *  with one or more Principal class/name pairs.  The exact
- *  replacement performed depends upon the contents of the
- *  grant clause to which the permission belongs.
- *<p>
- *
- *  If the grant clause does not contain any principal information,
- *  the permission will be ignored (permissions containing
- *  <b>${{self}}</b> in their target names are only valid in the context
- *  of a principal-based grant clause).  For example, BarPermission
- *  will always be ignored in the following grant clause:
- *
- *<pre>
- *    grant codebase "www.foo.com", signedby "duke" {
- *      permission BarPermission "... ${{self}} ...";
- *    };
- *</pre>
- *
- *  If the grant clause contains principal information, <b>${{self}}</b>
- *  will be replaced with that same principal information.
- *  For example, <b>${{self}}</b> in BarPermission will be replaced by
- *  <b>javax.security.auth.x500.X500Principal "cn=Duke"</b>
- *  in the following grant clause:
- *
- *  <pre>
- *    grant principal javax.security.auth.x500.X500Principal "cn=Duke" {
- *      permission BarPermission "... ${{self}} ...";
- *    };
- *  </pre>
- *
- *  If there is a comma-separated list of principals in the grant
- *  clause, then <b>${{self}}</b> will be replaced by the same
- *  comma-separated list or principals.
- *  In the case where both the principal class and name are
- *  wildcarded in the grant clause, <b>${{self}}</b> is replaced
- *  with all the principals associated with the <code>Subject</code>
- *  in the current <code>AccessControlContext</code>.
- *
- *
- * <p> For PrivateCredentialPermissions, you can also use "<b>self</b>"
- * instead of "<b>${{self}}</b>". However the use of "<b>self</b>" is
- * deprecated in favour of "<b>${{self}}</b>".
- *
- * @see java.security.CodeSource
- * @see java.security.Permissions
- * @see java.security.ProtectionDomain
- */
-public class PolicyFile extends java.security.Policy {
-
-    private static final Debug debug = Debug.getInstance("policy");
-
-    private static final String NONE = "NONE";
-    private static final String P11KEYSTORE = "PKCS11";
-
-    private static final String SELF = "${{self}}";
-    private static final String X500PRINCIPAL =
-                        "javax.security.auth.x500.X500Principal";
-    private static final String POLICY = "java.security.policy";
-    private static final String SECURITY_MANAGER = "java.security.manager";
-    private static final String POLICY_URL = "policy.url.";
-    private static final String AUTH_POLICY = "java.security.auth.policy";
-    private static final String AUTH_POLICY_URL = "auth.policy.url.";
-
-    private static final int DEFAULT_CACHE_SIZE = 1;
-
-    // contains the policy grant entries, PD cache, and alias mapping
-    private AtomicReference<PolicyInfo> policyInfo = new AtomicReference<>();
-    private boolean constructed = false;
-
-    private boolean expandProperties = true;
-    private boolean ignoreIdentityScope = true;
-    private boolean allowSystemProperties = true;
-    private boolean notUtf8 = false;
-    private URL url;
-
-    // for use with the reflection API
-
-    private static final Class[] PARAMS0 = { };
-    private static final Class[] PARAMS1 = { String.class };
-    private static final Class[] PARAMS2 = { String.class, String.class };
-
-    /**
-     * Initializes the Policy object and reads the default policy
-     * configuration file(s) into the Policy object.
-     */
-    public PolicyFile() {
-        init((URL)null);
-    }
-
-    /**
-     * Initializes the Policy object and reads the default policy
-     * from the specified URL only.
-     */
-    public PolicyFile(URL url) {
-        this.url = url;
-        init(url);
-    }
-
-    /**
-     * Initializes the Policy object and reads the default policy
-     * configuration file(s) into the Policy object.
-     *
-     * The algorithm for locating the policy file(s) and reading their
-     * information into the Policy object is:
-     * <pre>
-     *   loop through the Security Properties named "policy.url.1",
-     *  ""policy.url.2", "auth.policy.url.1",  "auth.policy.url.2" etc, until
-     *   you don't find one. Each of these specify a policy file.
-     *
-     *   if none of these could be loaded, use a builtin static policy
-     *      equivalent to the default lib/security/java.policy file.
-     *
-     *   if the system property "java.policy" or "java.auth.policy" is defined
-     * (which is the
-     *      case when the user uses the -D switch at runtime), and
-     *     its use is allowed by the security property file,
-     *     also load it.
-     * </pre>
-     *
-     * Each policy file consists of one or more grant entries, each of
-     * which consists of a number of permission entries.
-     * <pre>
-     *   grant signedBy "<i>alias</i>", codeBase "<i>URL</i>" {
-     *     permission <i>Type</i> "<i>name</i>", "<i>action</i>",
-     *         signedBy "<i>alias</i>";
-     *     ....
-     *     permission <i>Type</i> "<i>name</i>", "<i>action</i>",
-     *         signedBy "<i>alias</i>";
-     *   };
-     *
-     * </pre>
-     *
-     * All non-italicized items above must appear as is (although case
-     * doesn't matter and some are optional, as noted below).
-     * Italicized items represent variable values.
-     *
-     * <p> A grant entry must begin with the word <code>grant</code>.
-     * The <code>signedBy</code> and <code>codeBase</code> name/value
-     * pairs are optional.
-     * If they are not present, then any signer (including unsigned code)
-     * will match, and any codeBase will match.
-     *
-     * <p> A permission entry must begin with the word <code>permission</code>.
-     * The word <code><i>Type</i></code> in the template above would actually
-     * be a specific permission type, such as
-     * <code>java.io.FilePermission</code> or
-     * <code>java.lang.RuntimePermission</code>.
-     *
-     * <p>The "<i>action</i>" is required for
-     * many permission types, such as <code>java.io.FilePermission</code>
-     * (where it specifies what type of file access is permitted).
-     * It is not required for categories such as
-     * <code>java.lang.RuntimePermission</code>
-     * where it is not necessary - you either have the
-     * permission specified by the <code>"<i>name</i>"</code>
-     * value following the type name or you don't.
-     *
-     * <p>The <code>signedBy</code> name/value pair for a permission entry
-     * is optional. If present, it indicates a signed permission. That is,
-     * the permission class itself must be signed by the given alias in
-     * order for it to be granted. For example,
-     * suppose you have the following grant entry:
-     *
-     * <pre>
-     *   grant {
-     *     permission Foo "foobar", signedBy "FooSoft";
-     *   }
-     * </pre>
-     *
-     * <p>Then this permission of type <i>Foo</i> is granted if the
-     * <code>Foo.class</code> permission has been signed by the
-     * "FooSoft" alias, or if <code>Foo.class</code> is a
-     * system class (i.e., is found on the CLASSPATH).
-     *
-     * <p>Items that appear in an entry must appear in the specified order
-     * (<code>permission</code>, <i>Type</i>, "<i>name</i>", and
-     * "<i>action</i>"). An entry is terminated with a semicolon.
-     *
-     * <p>Case is unimportant for the identifiers (<code>permission</code>,
-     * <code>signedBy</code>, <code>codeBase</code>, etc.) but is
-     * significant for the <i>Type</i>
-     * or for any string that is passed in as a value. <p>
-     *
-     * <p>An example of two entries in a policy configuration file is
-     * <pre>
-     *   //  if the code is signed by "Duke", grant it read/write to all
-     *   // files in /tmp.
-     *
-     *   grant signedBy "Duke" {
-     *          permission java.io.FilePermission "/tmp/*", "read,write";
-     *   };
-     * <p>
-     *   // grant everyone the following permission
-     *
-     *   grant {
-     *     permission java.util.PropertyPermission "java.vendor";
-     *   };
-     *  </pre>
-     */
-    private void init(URL url) {
-        // Properties are set once for each init(); ignore changes between
-        // between diff invocations of initPolicyFile(policy, url, info).
-        String numCacheStr =
-          AccessController.doPrivileged(new PrivilegedAction<String>() {
-            public String run() {
-                expandProperties = "true".equalsIgnoreCase
-                    (Security.getProperty("policy.expandProperties"));
-                ignoreIdentityScope = "true".equalsIgnoreCase
-                    (Security.getProperty("policy.ignoreIdentityScope"));
-                allowSystemProperties = "true".equalsIgnoreCase
-                    (Security.getProperty("policy.allowSystemProperty"));
-                notUtf8 = "false".equalsIgnoreCase
-                    (System.getProperty("sun.security.policy.utf8"));
-                return System.getProperty("sun.security.policy.numcaches");
-            }});
-
-        int numCaches;
-        if (numCacheStr != null) {
-            try {
-                numCaches = Integer.parseInt(numCacheStr);
-            } catch (NumberFormatException e) {
-                numCaches = DEFAULT_CACHE_SIZE;
-            }
-        } else {
-            numCaches = DEFAULT_CACHE_SIZE;
-        }
-        // System.out.println("number caches=" + numCaches);
-        PolicyInfo newInfo = new PolicyInfo(numCaches);
-        initPolicyFile(newInfo, url);
-        policyInfo.set(newInfo);
-    }
-
-    private void initPolicyFile(final PolicyInfo newInfo, final URL url) {
-
-        if (url != null) {
-
-            /**
-             * If the caller specified a URL via Policy.getInstance,
-             * we only read from that URL
-             */
-
-            if (debug != null) {
-                debug.println("reading "+url);
-            }
-            AccessController.doPrivileged(new PrivilegedAction<Void>() {
-                public Void run() {
-                    if (init(url, newInfo) == false) {
-                        // use static policy if all else fails
-                        initStaticPolicy(newInfo);
-                    }
-                    return null;
-                }
-            });
-
-        } else {
-
-            /**
-             * Caller did not specify URL via Policy.getInstance.
-             * Read from URLs listed in the java.security properties file.
-             *
-             * We call initPolicyFile with POLICY , POLICY_URL and then
-             * call it with AUTH_POLICY and AUTH_POLICY_URL
-             * So first we will process the JAVA standard policy
-             * and then process the JAVA AUTH Policy.
-             * This is for backward compatibility as well as to handle
-             * cases where the user has a single unified policyfile
-             * with both java policy entries and auth entries
-             */
-
-            boolean loaded_one = initPolicyFile(POLICY, POLICY_URL, newInfo);
-            // To maintain strict backward compatibility
-            // we load the static policy only if POLICY load failed
-            if (!loaded_one) {
-                // use static policy if all else fails
-                initStaticPolicy(newInfo);
-            }
-
-            initPolicyFile(AUTH_POLICY, AUTH_POLICY_URL, newInfo);
-        }
-    }
-
-    private boolean initPolicyFile(final String propname, final String urlname,
-                                final PolicyInfo newInfo) {
-        Boolean loadedPolicy =
-            AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
-            public Boolean run() {
-                boolean loaded_policy = false;
-
-                if (allowSystemProperties) {
-                    String extra_policy = System.getProperty(propname);
-                    if (extra_policy != null) {
-                        boolean overrideAll = false;
-                        if (extra_policy.startsWith("=")) {
-                            overrideAll = true;
-                            extra_policy = extra_policy.substring(1);
-                        }
-                        try {
-                            extra_policy =
-                                PropertyExpander.expand(extra_policy);
-                            URL policyURL;
-
-                            File policyFile = new File(extra_policy);
-                            if (policyFile.exists()) {
-                                policyURL = ParseUtil.fileToEncodedURL
-                                    (new File(policyFile.getCanonicalPath()));
-                            } else {
-                                policyURL = new URL(extra_policy);
-                            }
-                            if (debug != null)
-                                debug.println("reading "+policyURL);
-                            if (init(policyURL, newInfo))
-                                loaded_policy = true;
-                        } catch (Exception e) {
-                            // ignore.
-                            if (debug != null) {
-                                debug.println("caught exception: "+e);
-                            }
-                        }
-                        if (overrideAll) {
-                            if (debug != null) {
-                                debug.println("overriding other policies!");
-                            }
-                            return Boolean.valueOf(loaded_policy);
-                        }
-                    }
-                }
-
-                int n = 1;
-                String policy_uri;
-
-                while ((policy_uri = Security.getProperty(urlname+n)) != null) {
-                    try {
-                        URL policy_url = null;
-                        String expanded_uri = PropertyExpander.expand
-                                (policy_uri).replace(File.separatorChar, '/');
-
-                        if (policy_uri.startsWith("file:${java.home}/") ||
-                            policy_uri.startsWith("file:${user.home}/")) {
-
-                            // this special case accommodates
-                            // the situation java.home/user.home
-                            // expand to a single slash, resulting in
-                            // a file://foo URI
-                            policy_url = new File
-                                (expanded_uri.substring(5)).toURI().toURL();
-                        } else {
-                            policy_url = new URI(expanded_uri).toURL();
-                        }
-
-                        if (debug != null)
-                            debug.println("reading "+policy_url);
-                        if (init(policy_url, newInfo))
-                            loaded_policy = true;
-                    } catch (Exception e) {
-                        if (debug != null) {
-                            debug.println("error reading policy "+e);
-                            e.printStackTrace();
-                        }
-                        // ignore that policy
-                    }
-                    n++;
-                }
-                return Boolean.valueOf(loaded_policy);
-            }
-        });
-
-        return loadedPolicy.booleanValue();
-    }
-
-    /**
-     * Reads a policy configuration into the Policy object using a
-     * Reader object.
-     *
-     * @param policyFile the policy Reader object.
-     */
-    private boolean init(URL policy, PolicyInfo newInfo) {
-        boolean success = false;
-        PolicyParser pp = new PolicyParser(expandProperties);
-        InputStreamReader isr = null;
-        try {
-
-            // read in policy using UTF-8 by default
-            //
-            // check non-standard system property to see if
-            // the default encoding should be used instead
-
-            if (notUtf8) {
-                isr = new InputStreamReader
-                                (PolicyUtil.getInputStream(policy));
-            } else {
-                isr = new InputStreamReader
-                                (PolicyUtil.getInputStream(policy), "UTF-8");
-            }
-
-            pp.read(isr);
-
-            KeyStore keyStore = null;
-            try {
-                keyStore = PolicyUtil.getKeyStore
-                                (policy,
-                                pp.getKeyStoreUrl(),
-                                pp.getKeyStoreType(),
-                                pp.getKeyStoreProvider(),
-                                pp.getStorePassURL(),
-                                debug);
-            } catch (Exception e) {
-                // ignore, treat it like we have no keystore
-                if (debug != null) {
-                    e.printStackTrace();
-                }
-            }
-
-            Enumeration<PolicyParser.GrantEntry> enum_ = pp.grantElements();
-            while (enum_.hasMoreElements()) {
-                PolicyParser.GrantEntry ge = enum_.nextElement();
-                addGrantEntry(ge, keyStore, newInfo);
-            }
-        } catch (PolicyParser.ParsingException pe) {
-            MessageFormat form = new MessageFormat(ResourcesMgr.getString
-                (POLICY + ".error.parsing.policy.message"));
-            Object[] source = {policy, pe.getLocalizedMessage()};
-            System.err.println(form.format(source));
-            if (debug != null)
-                pe.printStackTrace();
-
-        } catch (Exception e) {
-            if (debug != null) {
-                debug.println("error parsing "+policy);
-                debug.println(e.toString());
-                e.printStackTrace();
-            }
-        } finally {
-            if (isr != null) {
-                try {
-                    isr.close();
-                    success = true;
-                } catch (IOException e) {
-                    // ignore the exception
-                }
-            } else {
-                success = true;
-            }
-        }
-
-        return success;
-    }
-
-    private void initStaticPolicy(final PolicyInfo newInfo) {
-        AccessController.doPrivileged(new PrivilegedAction<Void>() {
-            public Void run() {
-                PolicyEntry pe = new PolicyEntry(new CodeSource(null,
-                    (Certificate[]) null));
-                pe.add(SecurityConstants.LOCAL_LISTEN_PERMISSION);
-                pe.add(new PropertyPermission("java.version",
-                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission("java.vendor",
-                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission("java.vendor.url",
-                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission("java.class.version",
-                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission("os.name",
-                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission("os.version",
-                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission("os.arch",
-                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission("file.separator",
-                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission("path.separator",
-                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission("line.separator",
-                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission
-                                ("java.specification.version",
-                                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission
-                                ("java.specification.vendor",
-                                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission
-                                ("java.specification.name",
-                                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission
-                                ("java.vm.specification.version",
-                                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission
-                                ("java.vm.specification.vendor",
-                                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission
-                                ("java.vm.specification.name",
-                                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission("java.vm.version",
-                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission("java.vm.vendor",
-                    SecurityConstants.PROPERTY_READ_ACTION));
-                pe.add(new PropertyPermission("java.vm.name",
-                    SecurityConstants.PROPERTY_READ_ACTION));
-
-                // No need to sync because noone has access to newInfo yet
-                newInfo.policyEntries.add(pe);
-
-                // Add AllPermissions for standard extensions
-                String[] extCodebases = PolicyParser.parseExtDirs(
-                    PolicyParser.EXTDIRS_EXPANSION, 0);
-                if (extCodebases != null && extCodebases.length > 0) {
-                    for (int i = 0; i < extCodebases.length; i++) {
-                        try {
-                            pe = new PolicyEntry(canonicalizeCodebase(
-                                new CodeSource(new URL(extCodebases[i]),
-                                    (Certificate[]) null), false ));
-                            pe.add(SecurityConstants.ALL_PERMISSION);
-
-                            // No need to sync because noone has access to
-                            // newInfo yet
-                            newInfo.policyEntries.add(pe);
-                        } catch (Exception e) {
-                            // this is probably bad (though not dangerous).
-                            // What should we do?
-                        }
-                    }
-                }
-                return null;
-            }
-        });
-    }
-
-    /**
-     * Given a GrantEntry, create a codeSource.
-     *
-     * @return null if signedBy alias is not recognized
-     */
-    private CodeSource getCodeSource(PolicyParser.GrantEntry ge, KeyStore keyStore,
-        PolicyInfo newInfo) throws java.net.MalformedURLException
-    {
-        Certificate[] certs = null;
-        if (ge.signedBy != null) {
-            certs = getCertificates(keyStore, ge.signedBy, newInfo);
-            if (certs == null) {
-                // we don't have a key for this alias,
-                // just return
-                if (debug != null) {
-                    debug.println("  -- No certs for alias '" +
-                                       ge.signedBy + "' - ignoring entry");
-                }
-                return null;
-            }
-        }
-
-        URL location;
-
-        if (ge.codeBase != null)
-            location = new URL(ge.codeBase);
-        else
-            location = null;
-
-        return (canonicalizeCodebase(new CodeSource(location, certs),false));
-    }
-
-    /**
-     * Add one policy entry to the list.
-     */
-    private void addGrantEntry(PolicyParser.GrantEntry ge,
-                               KeyStore keyStore, PolicyInfo newInfo) {
-
-        if (debug != null) {
-            debug.println("Adding policy entry: ");
-            debug.println("  signedBy " + ge.signedBy);
-            debug.println("  codeBase " + ge.codeBase);
-            if (ge.principals != null && ge.principals.size() > 0) {
-                ListIterator<PolicyParser.PrincipalEntry> li =
-                                                ge.principals.listIterator();
-                while (li.hasNext()) {
-                    PolicyParser.PrincipalEntry pppe = li.next();
-                debug.println("  " + pppe.toString());
-                }
-            }
-        }
-
-        try {
-            CodeSource codesource = getCodeSource(ge, keyStore, newInfo);
-            // skip if signedBy alias was unknown...
-            if (codesource == null) return;
-
-            // perform keystore alias principal replacement.
-            // for example, if alias resolves to X509 certificate,
-            // replace principal with:  <X500Principal class>  <SubjectDN>
-            // -- skip if alias is unknown
-            if (replacePrincipals(ge.principals, keyStore) == false)
-                return;
-            PolicyEntry entry = new PolicyEntry(codesource, ge.principals);
-            Enumeration<PolicyParser.PermissionEntry> enum_ =
-                                                ge.permissionElements();
-            while (enum_.hasMoreElements()) {
-                PolicyParser.PermissionEntry pe = enum_.nextElement();
-
-                try {
-                    // perform ${{ ... }} expansions within permission name
-                    expandPermissionName(pe, keyStore);
-
-                    // XXX special case PrivateCredentialPermission-SELF
-                    Permission perm;
-                    if (pe.permission.equals
-                        ("javax.security.auth.PrivateCredentialPermission") &&
-                        pe.name.endsWith(" self")) {
-                        pe.name = pe.name.substring(0, pe.name.indexOf("self"))
-                                + SELF;
-                    }
-                    // check for self
-                    if (pe.name != null && pe.name.indexOf(SELF) != -1) {
-                        // Create a "SelfPermission" , it could be an
-                        // an unresolved permission which will be resolved
-                        // when implies is called
-                        // Add it to entry
-                        Certificate certs[];
-                        if (pe.signedBy != null) {
-                            certs = getCertificates(keyStore,
-                                                    pe.signedBy,
-                                                    newInfo);
-                        } else {
-                            certs = null;
-                        }
-                        perm = new SelfPermission(pe.permission,
-                                                  pe.name,
-                                                  pe.action,
-                                                  certs);
-                    } else {
-                        perm = getInstance(pe.permission,
-                                           pe.name,
-                                           pe.action);
-                    }
-                    entry.add(perm);
-                    if (debug != null) {
-                        debug.println("  "+perm);
-                    }
-                } catch (ClassNotFoundException cnfe) {
-                    Certificate certs[];
-                    if (pe.signedBy != null) {
-                        certs = getCertificates(keyStore,
-                                                pe.signedBy,
-                                                newInfo);
-                    } else {
-                        certs = null;
-                    }
-
-                    // only add if we had no signer or we had a
-                    // a signer and found the keys for it.
-                    if (certs != null || pe.signedBy == null) {
-                        Permission perm = new UnresolvedPermission(
-                                                  pe.permission,
-                                                  pe.name,
-                                                  pe.action,
-                                                  certs);
-                        entry.add(perm);
-                        if (debug != null) {
-                            debug.println("  "+perm);
-                        }
-                    }
-                } catch (java.lang.reflect.InvocationTargetException ite) {
-                    MessageFormat form = new MessageFormat
-                        (ResourcesMgr.getString
-                         (POLICY +
-                          ".error.adding.Permission.perm.message"));
-                    Object[] source = {pe.permission,
-                                       ite.getTargetException().toString()};
-                    System.err.println(form.format(source));
-                } catch (Exception e) {
-                    MessageFormat form = new MessageFormat
-                        (ResourcesMgr.getString
-                         (POLICY +
-                          ".error.adding.Permission.perm.message"));
-                    Object[] source = {pe.permission,
-                                       e.toString()};
-                    System.err.println(form.format(source));
-                }
-            }
-
-            // No need to sync because noone has access to newInfo yet
-            newInfo.policyEntries.add(entry);
-        } catch (Exception e) {
-            MessageFormat form = new MessageFormat(ResourcesMgr.getString
-                                         (POLICY
-                                         + ".error.adding.Entry.message"));
-            Object[] source = {e.toString()};
-            System.err.println(form.format(source));
-        }
-        if (debug != null)
-            debug.println();
-    }
-
-    /**
-     * Returns a new Permission object of the given Type. The Permission is
-     * created by getting the
-     * Class object using the <code>Class.forName</code> method, and using
-     * the reflection API to invoke the (String name, String actions)
-     * constructor on the
-     * object.
-     *
-     * @param type the type of Permission being created.
-     * @param name the name of the Permission being created.
-     * @param actions the actions of the Permission being created.
-     *
-     * @exception  ClassNotFoundException  if the particular Permission
-     *             class could not be found.
-     *
-     * @exception  IllegalAccessException  if the class or initializer is
-     *               not accessible.
-     *
-     * @exception  InstantiationException  if getInstance tries to
-     *               instantiate an abstract class or an interface, or if the
-     *               instantiation fails for some other reason.
-     *
-     * @exception  NoSuchMethodException if the (String, String) constructor
-     *               is not found.
-     *
-     * @exception  InvocationTargetException if the underlying Permission
-     *               constructor throws an exception.
-     *
-     */
-
-    private static final Permission getInstance(String type,
-                                    String name,
-                                    String actions)
-        throws ClassNotFoundException,
-               InstantiationException,
-               IllegalAccessException,
-               NoSuchMethodException,
-               InvocationTargetException
-    {
-        //XXX we might want to keep a hash of created factories...
-        Class<?> pc = Class.forName(type);
-        Permission answer = getKnownInstance(pc, name, actions);
-        if (answer != null) {
-            return answer;
-        }
-
-        if (name == null && actions == null) {
-            try {
-                Constructor<?> c = pc.getConstructor(PARAMS0);
-                return (Permission) c.newInstance(new Object[] {});
-            } catch (NoSuchMethodException ne) {
-                try {
-                    Constructor<?> c = pc.getConstructor(PARAMS1);
-                    return (Permission) c.newInstance(
-                              new Object[] { name});
-                } catch (NoSuchMethodException ne1 ) {
-                    Constructor<?> c = pc.getConstructor(PARAMS2);
-                    return (Permission) c.newInstance(
-                        new Object[] { name, actions });
-                }
-            }
-        } else {
-            if (name != null && actions == null) {
-                try {
-                    Constructor<?> c = pc.getConstructor(PARAMS1);
-                    return (Permission) c.newInstance(new Object[] { name});
-                } catch (NoSuchMethodException ne) {
-                    Constructor<?> c = pc.getConstructor(PARAMS2);
-                    return (Permission) c.newInstance(
-                          new Object[] { name, actions });
-                }
-            } else {
-                Constructor<?> c = pc.getConstructor(PARAMS2);
-                return (Permission) c.newInstance(
-                      new Object[] { name, actions });
-             }
-        }
-    }
-
-    /**
-     * Creates one of the well-known permissions directly instead of
-     * via reflection. Keep list short to not penalize non-JDK-defined
-     * permissions.
-     */
-    private static final Permission getKnownInstance(Class claz,
-        String name, String actions) {
-        // XXX shorten list to most popular ones?
-        if (claz.equals(FilePermission.class)) {
-            return new FilePermission(name, actions);
-        } else if (claz.equals(SocketPermission.class)) {
-            return new SocketPermission(name, actions);
-        } else if (claz.equals(RuntimePermission.class)) {
-            return new RuntimePermission(name, actions);
-        } else if (claz.equals(PropertyPermission.class)) {
-            return new PropertyPermission(name, actions);
-        } else if (claz.equals(NetPermission.class)) {
-            return new NetPermission(name, actions);
-        } else if (claz.equals(AllPermission.class)) {
-            return SecurityConstants.ALL_PERMISSION;
-/*
-        } else if (claz.equals(ReflectPermission.class)) {
-            return new ReflectPermission(name, actions);
-        } else if (claz.equals(SecurityPermission.class)) {
-            return new SecurityPermission(name, actions);
-        } else if (claz.equals(PrivateCredentialPermission.class)) {
-            return new PrivateCredentialPermission(name, actions);
-        } else if (claz.equals(AuthPermission.class)) {
-            return new AuthPermission(name, actions);
-        } else if (claz.equals(ServicePermission.class)) {
-            return new ServicePermission(name, actions);
-        } else if (claz.equals(DelegationPermission.class)) {
-            return new DelegationPermission(name, actions);
-        } else if (claz.equals(SerializablePermission.class)) {
-            return new SerializablePermission(name, actions);
-        } else if (claz.equals(AudioPermission.class)) {
-            return new AudioPermission(name, actions);
-        } else if (claz.equals(SSLPermission.class)) {
-            return new SSLPermission(name, actions);
-        } else if (claz.equals(LoggingPermission.class)) {
-            return new LoggingPermission(name, actions);
-        } else if (claz.equals(SQLPermission.class)) {
-            return new SQLPermission(name, actions);
-*/
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Fetch all certs associated with this alias.
-     */
-    private Certificate[] getCertificates
-                (KeyStore keyStore, String aliases, PolicyInfo newInfo) {
-
-        List<Certificate> vcerts = null;
-
-        StringTokenizer st = new StringTokenizer(aliases, ",");
-        int n = 0;
-
-        while (st.hasMoreTokens()) {
-            String alias = st.nextToken().trim();
-            n++;
-            Certificate cert = null;
-            // See if this alias's cert has already been cached
-            synchronized (newInfo.aliasMapping) {
-                cert = (Certificate)newInfo.aliasMapping.get(alias);
-
-                if (cert == null && keyStore != null) {
-
-                    try {
-                        cert = keyStore.getCertificate(alias);
-                    } catch (KeyStoreException kse) {
-                        // never happens, because keystore has already been loaded
-                        // when we call this
-                    }
-                    if (cert != null) {
-                        newInfo.aliasMapping.put(alias, cert);
-                        newInfo.aliasMapping.put(cert, alias);
-                    }
-                }
-            }
-
-            if (cert != null) {
-                if (vcerts == null)
-                    vcerts = new ArrayList<Certificate>();
-                vcerts.add(cert);
-            }
-        }
-
-        // make sure n == vcerts.size, since we are doing a logical *and*
-        if (vcerts != null && n == vcerts.size()) {
-            Certificate[] certs = new Certificate[vcerts.size()];
-            vcerts.toArray(certs);
-            return certs;
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Refreshes the policy object by re-reading all the policy files.
-     */
-    @Override public void refresh() {
-        init(url);
-    }
-
-    /**
-     * Evaluates the the global policy for the permissions granted to
-     * the ProtectionDomain and tests whether the permission is
-     * granted.
-     *
-     * @param domain the ProtectionDomain to test
-     * @param permission the Permission object to be tested for implication.
-     *
-     * @return true if "permission" is a proper subset of a permission
-     * granted to this ProtectionDomain.
-     *
-     * @see java.security.ProtectionDomain
-     */
-    @Override
-    public boolean implies(ProtectionDomain pd, Permission p) {
-        PolicyInfo pi = policyInfo.get();
-        ProtectionDomainCache pdMap = pi.getPdMapping();
-
-        PermissionCollection pc = pdMap.get(pd);
-
-        if (pc != null) {
-            return pc.implies(p);
-        }
-
-        pc = getPermissions(pd);
-        if (pc == null) {
-            return false;
-        }
-
-        // cache mapping of protection domain to its PermissionCollection
-        pdMap.put(pd, pc);
-        return pc.implies(p);
-    }
-
-    /**
-     * Examines this <code>Policy</code> and returns the permissions granted
-     * to the specified <code>ProtectionDomain</code>.  This includes
-     * the permissions currently associated with the domain as well
-     * as the policy permissions granted to the domain's
-     * CodeSource, ClassLoader, and Principals.
-     *
-     * <p> Note that this <code>Policy</code> implementation has
-     * special handling for PrivateCredentialPermissions.
-     * When this method encounters a <code>PrivateCredentialPermission</code>
-     * which specifies "self" as the <code>Principal</code> class and name,
-     * it does not add that <code>Permission</code> to the returned
-     * <code>PermissionCollection</code>.  Instead, it builds
-     * a new <code>PrivateCredentialPermission</code>
-     * for each <code>Principal</code> associated with the provided
-     * <code>Subject</code>.  Each new <code>PrivateCredentialPermission</code>
-     * contains the same Credential class as specified in the
-     * originally granted permission, as well as the Class and name
-     * for the respective <code>Principal</code>.
-     *
-     * <p>
-     *
-     * @param domain the Permissions granted to this
-     *          <code>ProtectionDomain</code> are returned.
-     *
-     * @return the Permissions granted to the provided
-     *          <code>ProtectionDomain</code>.
-     */
-    @Override
-    public PermissionCollection getPermissions(ProtectionDomain domain) {
-        Permissions perms = new Permissions();
-
-        if (domain == null)
-           return perms;
-
-        // first get policy perms
-        getPermissions(perms, domain);
-
-        // add static perms
-        //      - adding static perms after policy perms is necessary
-        //        to avoid a regression for 4301064
-        PermissionCollection pc = domain.getPermissions();
-        if (pc != null) {
-            synchronized (pc) {
-                Enumeration<Permission> e = pc.elements();
-                while (e.hasMoreElements()) {
-                    perms.add(e.nextElement());
-                }
-            }
-        }
-
-        return perms;
-    }
-
-    /**
-     * Examines this Policy and creates a PermissionCollection object with
-     * the set of permissions for the specified CodeSource.
-     *
-     * @param CodeSource the codesource associated with the caller.
-     * This encapsulates the original location of the code (where the code
-     * came from) and the public key(s) of its signer.
-     *
-     * @return the set of permissions according to the policy.
-     */
-    @Override
-    public PermissionCollection getPermissions(CodeSource codesource) {
-        return getPermissions(new Permissions(), codesource);
-    }
-
-    /**
-     * Examines the global policy and returns the provided Permissions
-     * object with additional permissions granted to the specified
-     * ProtectionDomain.
-     *
-     * @param perm the Permissions to populate
-     * @param pd the ProtectionDomain associated with the caller.
-     *
-     * @return the set of Permissions according to the policy.
-     */
-    private PermissionCollection getPermissions(Permissions perms,
-                                        ProtectionDomain pd ) {
-        if (debug != null) {
-            debug.println("getPermissions:\n\t" + printPD(pd));
-        }
-
-        final CodeSource cs = pd.getCodeSource();
-        if (cs == null)
-            return perms;
-
-        CodeSource canonCodeSource = AccessController.doPrivileged(
-            new java.security.PrivilegedAction<CodeSource>(){
-                public CodeSource run() {
-                    return canonicalizeCodebase(cs, true);
-                }
-            });
-        return getPermissions(perms, canonCodeSource, pd.getPrincipals());
-    }
-
-    /**
-     * Examines the global policy and returns the provided Permissions
-     * object with additional permissions granted to the specified
-     * CodeSource.
-     *
-     * @param permissions the permissions to populate
-     * @param codesource the codesource associated with the caller.
-     * This encapsulates the original location of the code (where the code
-     * came from) and the public key(s) of its signer.
-     *
-     * @return the set of permissions according to the policy.
-     */
-    private PermissionCollection getPermissions(Permissions perms,
-                               final CodeSource cs) {
-
-        CodeSource canonCodeSource = AccessController.doPrivileged(
-            new java.security.PrivilegedAction<CodeSource>(){
-                public CodeSource run() {
-                    return canonicalizeCodebase(cs, true);
-                }
-            });
-
-        return getPermissions(perms, canonCodeSource, null);
-    }
-
-    private Permissions getPermissions(Permissions perms,
-                                       final CodeSource cs,
-                                       Principal[] principals) {
-        PolicyInfo pi = policyInfo.get();
-
-        for (PolicyEntry entry : pi.policyEntries) {
-            addPermissions(perms, cs, principals, entry);
-        }
-
-        // Go through policyEntries gotten from identity db; sync required
-        // because checkForTrustedIdentity (below) might update list
-        synchronized (pi.identityPolicyEntries) {
-            for (PolicyEntry entry : pi.identityPolicyEntries) {
-                addPermissions(perms, cs, principals, entry);
-            }
-        }
-
-        // now see if any of the keys are trusted ids.
-        if (!ignoreIdentityScope) {
-            Certificate certs[] = cs.getCertificates();
-            if (certs != null) {
-                for (int k=0; k < certs.length; k++) {
-                    Object idMap = pi.aliasMapping.get(certs[k]);
-                    if (idMap == null &&
-                        checkForTrustedIdentity(certs[k], pi)) {
-                        // checkForTrustedIdentity added it
-                        // to the policy for us. next time
-                        // around we'll find it. This time
-                        // around we need to add it.
-                        perms.add(SecurityConstants.ALL_PERMISSION);
-                    }
-                }
-            }
-        }
-        return perms;
-    }
-
-    private void addPermissions(Permissions perms,
-        final CodeSource cs,
-        Principal[] principals,
-        final PolicyEntry entry) {
-
-        if (debug != null) {
-            debug.println("evaluate codesources:\n" +
-                "\tPolicy CodeSource: " + entry.getCodeSource() + "\n" +
-                "\tActive CodeSource: " + cs);
-        }
-
-        // check to see if the CodeSource implies
-        Boolean imp = AccessController.doPrivileged
-            (new PrivilegedAction<Boolean>() {
-            public Boolean run() {
-                return new Boolean(entry.getCodeSource().implies(cs));
-            }
-        });
-        if (!imp.booleanValue()) {
-            if (debug != null) {
-                debug.println("evaluation (codesource) failed");
-            }
-
-            // CodeSource does not imply - return and try next policy entry
-            return;
-        }
-
-        // check to see if the Principals imply
-
-        List<PolicyParser.PrincipalEntry> entryPs = entry.getPrincipals();
-        if (debug != null) {
-            ArrayList<PolicyParser.PrincipalEntry> accPs = new ArrayList<>();
-            if (principals != null) {
-                for (int i = 0; i < principals.length; i++) {
-                    accPs.add(new PolicyParser.PrincipalEntry
-                                        (principals[i].getClass().getName(),
-                                        principals[i].getName()));
-                }
-            }
-            debug.println("evaluate principals:\n" +
-                "\tPolicy Principals: " + entryPs + "\n" +
-                "\tActive Principals: " + accPs);
-        }
-
-        if (entryPs == null || entryPs.size() == 0) {
-
-            // policy entry has no principals -
-            // add perms regardless of principals in current ACC
-
-            addPerms(perms, principals, entry);
-            if (debug != null) {
-                debug.println("evaluation (codesource/principals) passed");
-            }
-            return;
-
-        } else if (principals == null || principals.length == 0) {
-
-            // current thread has no principals but this policy entry
-            // has principals - perms are not added
-
-            if (debug != null) {
-                debug.println("evaluation (principals) failed");
-            }
-            return;
-        }
-
-        // current thread has principals and this policy entry
-        // has principals.  see if policy entry principals match
-        // principals in current ACC
-
-        for (int i = 0; i < entryPs.size(); i++) {
-            PolicyParser.PrincipalEntry pppe = entryPs.get(i);
-
-            // see if principal entry is a PrincipalComparator
-
-            try {
-                Class<?> pClass = Class.forName
-                                (pppe.principalClass,
-                                true,
-                                Thread.currentThread().getContextClassLoader());
-
-                if (!PrincipalComparator.class.isAssignableFrom(pClass)) {
-
-                    // common case - dealing with regular Principal class.
-                    // see if policy entry principal is in current ACC
-
-                    if (!checkEntryPs(principals, pppe)) {
-                        if (debug != null) {
-                            debug.println("evaluation (principals) failed");
-                        }
-
-                        // policy entry principal not in current ACC -
-                        // immediately return and go to next policy entry
-                        return;
-                    }
-
-                } else {
-
-                    // dealing with a PrincipalComparator
-
-                    Constructor<?> c = pClass.getConstructor(PARAMS1);
-                    PrincipalComparator pc = (PrincipalComparator)c.newInstance
-                                        (new Object[] { pppe.principalName });
-
-                    if (debug != null) {
-                        debug.println("found PrincipalComparator " +
-                                        pc.getClass().getName());
-                    }
-
-                    // check if the PrincipalComparator
-                    // implies the current thread's principals
-
-                    Set<Principal> pSet = new HashSet<>(principals.length);
-                    for (int j = 0; j < principals.length; j++) {
-                        pSet.add(principals[j]);
-                    }
-                    Subject subject = new Subject(true,
-                                                pSet,
-                                                Collections.EMPTY_SET,
-                                                Collections.EMPTY_SET);
-
-                    if (!pc.implies(subject)) {
-                        if (debug != null) {
-                            debug.println
-                                ("evaluation (principal comparator) failed");
-                        }
-
-                        // policy principal does not imply the current Subject -
-                        // immediately return and go to next policy entry
-                        return;
-                    }
-                }
-            } catch (Exception e) {
-                // fall back to regular principal comparison.
-                // see if policy entry principal is in current ACC
-
-                if (debug != null) {
-                    e.printStackTrace();
-                }
-
-                if (!checkEntryPs(principals, pppe)) {
-                    if (debug != null) {
-                        debug.println("evaluation (principals) failed");
-                    }
-
-                    // policy entry principal not in current ACC -
-                    // immediately return and go to next policy entry
-                    return;
-                }
-            }
-
-            // either the principal information matched,
-            // or the PrincipalComparator.implies succeeded.
-            // continue loop and test the next policy principal
-        }
-
-        // all policy entry principals were found in the current ACC -
-        // grant the policy permissions
-
-        if (debug != null) {
-            debug.println("evaluation (codesource/principals) passed");
-        }
-        addPerms(perms, principals, entry);
-    }
-
-    private void addPerms(Permissions perms,
-                        Principal[] accPs,
-                        PolicyEntry entry) {
-        for (int i = 0; i < entry.permissions.size(); i++) {
-            Permission p = entry.permissions.get(i);
-            if (debug != null) {
-                debug.println("  granting " + p);
-            }
-
-            if (p instanceof SelfPermission) {
-                // handle "SELF" permissions
-                expandSelf((SelfPermission)p,
-                        entry.getPrincipals(),
-                        accPs,
-                        perms);
-            } else {
-                perms.add(p);
-            }
-        }
-    }
-
-    /**
-     * This method returns, true, if the principal in the policy entry,
-     * pppe, is part of the current thread's principal array, pList.
-     * This method also returns, true, if the policy entry's principal
-     * is appropriately wildcarded.
-     *
-     * Note that the provided <i>pppe</i> argument may have
-     * wildcards (*) for both the <code>Principal</code> class and name.
-     *
-     * @param pList an array of principals from the current thread's
-     *          AccessControlContext.
-     *
-     * @param pppe a Principal specified in a policy grant entry.
-     *
-     * @return true if the current thread's pList "contains" the
-     *          principal in the policy entry, pppe.  This method
-     *          also returns true if the policy entry's principal
-     *          appropriately wildcarded.
-     */
-    private boolean checkEntryPs(Principal[] pList,
-                                PolicyParser.PrincipalEntry pppe) {
-
-        for (int i = 0; i < pList.length; i++) {
-
-            if (pppe.principalClass.equals
-                        (PolicyParser.PrincipalEntry.WILDCARD_CLASS) ||
-                pppe.principalClass.equals
-                        (pList[i].getClass().getName())) {
-
-                if (pppe.principalName.equals
-                        (PolicyParser.PrincipalEntry.WILDCARD_NAME) ||
-                    pppe.principalName.equals
-                        (pList[i].getName())) {
-
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * <p>
-     *
-     * @param sp the SelfPermission that needs to be expanded <p>
-     *
-     * @param entryPs list of principals for the Policy entry.
-     *
-     * @param pdp Principal array from the current ProtectionDomain.
-     *
-     * @param perms the PermissionCollection where the individual
-     *                  Permissions will be added after expansion.
-     */
-
-    private void expandSelf(SelfPermission sp,
-                            List<PolicyParser.PrincipalEntry> entryPs,
-                            Principal[] pdp,
-                            Permissions perms) {
-
-        if (entryPs == null || entryPs.size() == 0) {
-            // No principals in the grant to substitute
-            if (debug != null) {
-                debug.println("Ignoring permission "
-                                + sp.getSelfType()
-                                + " with target name ("
-                                + sp.getSelfName() + ").  "
-                                + "No Principal(s) specified "
-                                + "in the grant clause.  "
-                                + "SELF-based target names are "
-                                + "only valid in the context "
-                                + "of a Principal-based grant entry."
-                             );
-            }
-            return;
-        }
-        int startIndex = 0;
-        int v;
-        StringBuilder sb = new StringBuilder();
-        while ((v = sp.getSelfName().indexOf(SELF, startIndex)) != -1) {
-
-            // add non-SELF string
-            sb.append(sp.getSelfName().substring(startIndex, v));
-
-            // expand SELF
-            ListIterator<PolicyParser.PrincipalEntry> pli =
-                                                entryPs.listIterator();
-            while (pli.hasNext()) {
-                PolicyParser.PrincipalEntry pppe = pli.next();
-                String[][] principalInfo = getPrincipalInfo(pppe,pdp);
-                for (int i = 0; i < principalInfo.length; i++) {
-                    if (i != 0) {
-                        sb.append(", ");
-                    }
-                    sb.append(principalInfo[i][0] + " " +
-                        "\"" + principalInfo[i][1] + "\"");
-                }
-                if (pli.hasNext()) {
-                    sb.append(", ");
-                }
-            }
-            startIndex = v + SELF.length();
-        }
-        // add remaining string (might be the entire string)
-        sb.append(sp.getSelfName().substring(startIndex));
-
-        if (debug != null) {
-            debug.println("  expanded:\n\t" + sp.getSelfName()
-                        + "\n  into:\n\t" + sb.toString());
-        }
-        try {
-            // first try to instantiate the permission
-            perms.add(getInstance(sp.getSelfType(),
-                                sb.toString(),
-                                sp.getSelfActions()));
-        } catch (ClassNotFoundException cnfe) {
-            // ok, the permission is not in the bootclasspath.
-            // before we add an UnresolvedPermission, check to see
-            // whether this perm already belongs to the collection.
-            // if so, use that perm's ClassLoader to create a new
-            // one.
-            Class<?> pc = null;
-            synchronized (perms) {
-                Enumeration<Permission> e = perms.elements();
-                while (e.hasMoreElements()) {
-                    Permission pElement = e.nextElement();
-                    if (pElement.getClass().getName().equals(sp.getSelfType())) {
-                        pc = pElement.getClass();
-                        break;
-                    }
-                }
-            }
-            if (pc == null) {
-                // create an UnresolvedPermission
-                perms.add(new UnresolvedPermission(sp.getSelfType(),
-                                                        sb.toString(),
-                                                        sp.getSelfActions(),
-                                                        sp.getCerts()));
-            } else {
-                try {
-                    // we found an instantiated permission.
-                    // use its class loader to instantiate a new permission.
-                    Constructor<?> c;
-                    // name parameter can not be null
-                    if (sp.getSelfActions() == null) {
-                        try {
-                            c = pc.getConstructor(PARAMS1);
-                            perms.add((Permission)c.newInstance
-                                 (new Object[] {sb.toString()}));
-                        } catch (NoSuchMethodException ne) {
-                            c = pc.getConstructor(PARAMS2);
-                            perms.add((Permission)c.newInstance
-                                 (new Object[] {sb.toString(),
-                                                sp.getSelfActions() }));
-                        }
-                    } else {
-                        c = pc.getConstructor(PARAMS2);
-                        perms.add((Permission)c.newInstance
-                           (new Object[] {sb.toString(),
-                                          sp.getSelfActions()}));
-                    }
-                } catch (Exception nme) {
-                    if (debug != null) {
-                        debug.println("self entry expansion " +
-                        " instantiation failed: "
-                        +  nme.toString());
-                    }
-                }
-            }
-        } catch (Exception e) {
-            if (debug != null) {
-                debug.println(e.toString());
-            }
-        }
-    }
-
-    /**
-     * return the principal class/name pair in the 2D array.
-     * array[x][y]:     x corresponds to the array length.
-     *                  if (y == 0), it's the principal class.
-     *                  if (y == 1), it's the principal name.
-     */
-    private String[][] getPrincipalInfo
-        (PolicyParser.PrincipalEntry pe, Principal[] pdp) {
-
-        // there are 3 possibilities:
-        // 1) the entry's Principal class and name are not wildcarded
-        // 2) the entry's Principal name is wildcarded only
-        // 3) the entry's Principal class and name are wildcarded
-
-        if (!pe.principalClass.equals
-            (PolicyParser.PrincipalEntry.WILDCARD_CLASS) &&
-            !pe.principalName.equals
-            (PolicyParser.PrincipalEntry.WILDCARD_NAME)) {
-
-            // build an info array for the principal
-            // from the Policy entry
-            String[][] info = new String[1][2];
-            info[0][0] = pe.principalClass;
-            info[0][1] = pe.principalName;
-            return info;
-
-        } else if (!pe.principalClass.equals
-                   (PolicyParser.PrincipalEntry.WILDCARD_CLASS) &&
-                   pe.principalName.equals
-                   (PolicyParser.PrincipalEntry.WILDCARD_NAME)) {
-
-            // build an info array for every principal
-            // in the current domain which has a principal class
-            // that is equal to policy entry principal class name
-            List<Principal> plist = new ArrayList<>();
-            for (int i = 0; i < pdp.length; i++) {
-                if(pe.principalClass.equals(pdp[i].getClass().getName()))
-                    plist.add(pdp[i]);
-            }
-            String[][] info = new String[plist.size()][2];
-            int i = 0;
-            java.util.Iterator<Principal> pIterator = plist.iterator();
-            while (pIterator.hasNext()) {
-                Principal p = pIterator.next();
-                info[i][0] = p.getClass().getName();
-                info[i][1] = p.getName();
-                i++;
-            }
-            return info;
-
-        } else {
-
-            // build an info array for every
-            // one of the current Domain's principals
-
-            String[][] info = new String[pdp.length][2];
-
-            for (int i = 0; i < pdp.length; i++) {
-                info[i][0] = pdp[i].getClass().getName();
-                info[i][1] = pdp[i].getName();
-            }
-            return info;
-        }
-    }
-
-    /*
-     * Returns the signer certificates from the list of certificates
-     * associated with the given code source.
-     *
-     * The signer certificates are those certificates that were used
-     * to verifysigned code originating from the codesource location.
-     *
-     * This method assumes that in the given code source, each signer
-     * certificate is followed by its supporting certificate chain
-     * (which may be empty), and that the signer certificate and its
-     * supporting certificate chain are ordered bottom-to-top
-     * (i.e., with the signer certificate first and the (root) certificate
-     * authority last).
-     */
-    protected Certificate[] getSignerCertificates(CodeSource cs) {
-        Certificate[] certs = null;
-        if ((certs = cs.getCertificates()) == null)
-            return null;
-        for (int i=0; i<certs.length; i++) {
-            if (!(certs[i] instanceof X509Certificate))
-                return cs.getCertificates();
-        }
-
-        // Do we have to do anything?
-        int i = 0;
-        int count = 0;
-        while (i < certs.length) {
-            count++;
-            while (((i+1) < certs.length)
-                   && ((X509Certificate)certs[i]).getIssuerDN().equals(
-                           ((X509Certificate)certs[i+1]).getSubjectDN())) {
-                i++;
-            }
-            i++;
-        }
-        if (count == certs.length)
-            // Done
-            return certs;
-
-        ArrayList<Certificate> userCertList = new ArrayList<>();
-        i = 0;
-        while (i < certs.length) {
-            userCertList.add(certs[i]);
-            while (((i+1) < certs.length)
-                   && ((X509Certificate)certs[i]).getIssuerDN().equals(
-                           ((X509Certificate)certs[i+1]).getSubjectDN())) {
-                i++;
-            }
-            i++;
-        }
-        Certificate[] userCerts = new Certificate[userCertList.size()];
-        userCertList.toArray(userCerts);
-        return userCerts;
-    }
-
-    private CodeSource canonicalizeCodebase(CodeSource cs,
-                                            boolean extractSignerCerts) {
-
-        String path = null;
-
-        CodeSource canonCs = cs;
-        URL u = cs.getLocation();
-        if (u != null) {
-            if (u.getProtocol().equals("jar")) {
-                // unwrap url embedded inside jar url
-                String spec = u.getFile();
-                int separator = spec.indexOf("!/");
-                if (separator != -1) {
-                    try {
-                        u = new URL(spec.substring(0, separator));
-                    } catch (MalformedURLException e) {
-                        // Fail silently. In this case, url stays what
-                        // it was above
-                    }
-                }
-            }
-            if (u.getProtocol().equals("file")) {
-                boolean isLocalFile = false;
-                String host = u.getHost();
-                isLocalFile = (host == null || host.equals("") ||
-                    host.equals("~") || host.equalsIgnoreCase("localhost"));
-
-                if (isLocalFile) {
-                    path = u.getFile().replace('/', File.separatorChar);
-                    path = ParseUtil.decode(path);
-                }
-            }
-        }
-
-        if (path != null) {
-            try {
-                URL csUrl = null;
-                path = canonPath(path);
-                csUrl = ParseUtil.fileToEncodedURL(new File(path));
-
-                if (extractSignerCerts) {
-                    canonCs = new CodeSource(csUrl,
-                                             getSignerCertificates(cs));
-                } else {
-                    canonCs = new CodeSource(csUrl,
-                                             cs.getCertificates());
-                }
-            } catch (IOException ioe) {
-                // leave codesource as it is, unless we have to extract its
-                // signer certificates
-                if (extractSignerCerts) {
-                    canonCs = new CodeSource(cs.getLocation(),
-                                             getSignerCertificates(cs));
-                }
-            }
-        } else {
-            if (extractSignerCerts) {
-                canonCs = new CodeSource(cs.getLocation(),
-                                         getSignerCertificates(cs));
-            }
-        }
-        return canonCs;
-    }
-
-    // Wrapper to return a canonical path that avoids calling getCanonicalPath()
-    // with paths that are intended to match all entries in the directory
-    private static String canonPath(String path) throws IOException {
-        if (path.endsWith("*")) {
-            path = path.substring(0, path.length()-1) + "-";
-            path = new File(path).getCanonicalPath();
-            return path.substring(0, path.length()-1) + "*";
-        } else {
-            return new File(path).getCanonicalPath();
-        }
-    }
-
-    private String printPD(ProtectionDomain pd) {
-        Principal[] principals = pd.getPrincipals();
-        String pals = "<no principals>";
-        if (principals != null && principals.length > 0) {
-            StringBuilder palBuf = new StringBuilder("(principals ");
-            for (int i = 0; i < principals.length; i++) {
-                palBuf.append(principals[i].getClass().getName() +
-                              " \"" + principals[i].getName() +
-                              "\"");
-                if (i < principals.length-1)
-                    palBuf.append(", ");
-                else
-                    palBuf.append(")");
-            }
-            pals = palBuf.toString();
-        }
-        return "PD CodeSource: "
-                + pd.getCodeSource()
-                +"\n\t" + "PD ClassLoader: "
-                + pd.getClassLoader()
-                +"\n\t" + "PD Principals: "
-                + pals;
-    }
-
-    /**
-     * return true if no replacement was performed,
-     * or if replacement succeeded.
-     */
-    private boolean replacePrincipals(
-        List<PolicyParser.PrincipalEntry> principals, KeyStore keystore) {
-
-        if (principals == null || principals.size() == 0 || keystore == null)
-            return true;
-
-        ListIterator<PolicyParser.PrincipalEntry> i = principals.listIterator();
-        while (i.hasNext()) {
-            PolicyParser.PrincipalEntry pppe = i.next();
-            if (pppe.principalClass.equals(PolicyParser.REPLACE_NAME)) {
-
-                // perform replacement
-                // (only X509 replacement is possible now)
-                String name;
-                if ((name = getDN(pppe.principalName, keystore)) == null) {
-                    return false;
-                }
-
-                if (debug != null) {
-                    debug.println("  Replacing \"" +
-                        pppe.principalName +
-                        "\" with " +
-                        X500PRINCIPAL + "/\"" +
-                        name +
-                        "\"");
-                }
-
-                pppe.principalClass = X500PRINCIPAL;
-                pppe.principalName = name;
-            }
-        }
-        // return true if no replacement was performed,
-        // or if replacement succeeded
-        return true;
-    }
-
-    private void expandPermissionName(PolicyParser.PermissionEntry pe,
-                                        KeyStore keystore) throws Exception {
-        // short cut the common case
-        if (pe.name == null || pe.name.indexOf("${{", 0) == -1) {
-            return;
-        }
-
-        int startIndex = 0;
-        int b, e;
-        StringBuilder sb = new StringBuilder();
-        while ((b = pe.name.indexOf("${{", startIndex)) != -1) {
-            e = pe.name.indexOf("}}", b);
-            if (e < 1) {
-                break;
-            }
-            sb.append(pe.name.substring(startIndex, b));
-
-            // get the value in ${{...}}
-            String value = pe.name.substring(b+3, e);
-
-            // parse up to the first ':'
-            int colonIndex;
-            String prefix = value;
-            String suffix;
-            if ((colonIndex = value.indexOf(":")) != -1) {
-                prefix = value.substring(0, colonIndex);
-            }
-
-            // handle different prefix possibilities
-            if (prefix.equalsIgnoreCase("self")) {
-                // do nothing - handled later
-                sb.append(pe.name.substring(b, e+2));
-                startIndex = e+2;
-                continue;
-            } else if (prefix.equalsIgnoreCase("alias")) {
-                // get the suffix and perform keystore alias replacement
-                if (colonIndex == -1) {
-                    MessageFormat form = new MessageFormat
-                        (ResourcesMgr.getString
-                        ("alias.name.not.provided.pe.name."));
-                    Object[] source = {pe.name};
-                    throw new Exception(form.format(source));
-                }
-                suffix = value.substring(colonIndex+1);
-                if ((suffix = getDN(suffix, keystore)) == null) {
-                    MessageFormat form = new MessageFormat
-                        (ResourcesMgr.getString
-                        ("unable.to.perform.substitution.on.alias.suffix"));
-                    Object[] source = {value.substring(colonIndex+1)};
-                    throw new Exception(form.format(source));
-                }
-
-                sb.append(X500PRINCIPAL + " \"" + suffix + "\"");
-                startIndex = e+2;
-            } else {
-                MessageFormat form = new MessageFormat
-                        (ResourcesMgr.getString
-                        ("substitution.value.prefix.unsupported"));
-                Object[] source = {prefix};
-                throw new Exception(form.format(source));
-            }
-        }
-
-        // copy the rest of the value
-        sb.append(pe.name.substring(startIndex));
-
-        // replace the name with expanded value
-        if (debug != null) {
-            debug.println("  Permission name expanded from:\n\t" +
-                        pe.name + "\nto\n\t" + sb.toString());
-        }
-        pe.name = sb.toString();
-    }
-
-    private String getDN(String alias, KeyStore keystore) {
-        Certificate cert = null;
-        try {
-            cert = keystore.getCertificate(alias);
-        } catch (Exception e) {
-            if (debug != null) {
-                debug.println("  Error retrieving certificate for '" +
-                                alias +
-                                "': " +
-                                e.toString());
-            }
-            return null;
-        }
-
-        if (cert == null || !(cert instanceof X509Certificate)) {
-            if (debug != null) {
-                debug.println("  -- No certificate for '" +
-                                alias +
-                                "' - ignoring entry");
-            }
-            return null;
-        } else {
-            X509Certificate x509Cert = (X509Certificate)cert;
-
-            // 4702543:  X500 names with an EmailAddress
-            // were encoded incorrectly.  create new
-            // X500Principal name with correct encoding
-
-            X500Principal p = new X500Principal
-                (x509Cert.getSubjectX500Principal().toString());
-            return p.getName();
-        }
-    }
-
-    /**
-     * Checks public key. If it is marked as trusted in
-     * the identity database, add it to the policy
-     * with the AllPermission.
-     */
-    private boolean checkForTrustedIdentity(final Certificate cert,
-        PolicyInfo myInfo)
-    {
-        return false;
-    }
-
-    /**
-     * Each entry in the policy configuration file is represented by a
-     * PolicyEntry object.  <p>
-     *
-     * A PolicyEntry is a (CodeSource,Permission) pair.  The
-     * CodeSource contains the (URL, PublicKey) that together identify
-     * where the Java bytecodes come from and who (if anyone) signed
-     * them.  The URL could refer to localhost.  The URL could also be
-     * null, meaning that this policy entry is given to all comers, as
-     * long as they match the signer field.  The signer could be null,
-     * meaning the code is not signed. <p>
-     *
-     * The Permission contains the (Type, Name, Action) triplet. <p>
-     *
-     * For now, the Policy object retrieves the public key from the
-     * X.509 certificate on disk that corresponds to the signedBy
-     * alias specified in the Policy config file.  For reasons of
-     * efficiency, the Policy object keeps a hashtable of certs already
-     * read in.  This could be replaced by a secure internal key
-     * store.
-     *
-     * <p>
-     * For example, the entry
-     * <pre>
-     *          permission java.io.File "/tmp", "read,write",
-     *          signedBy "Duke";
-     * </pre>
-     * is represented internally
-     * <pre>
-     *
-     * FilePermission f = new FilePermission("/tmp", "read,write");
-     * PublicKey p = publickeys.get("Duke");
-     * URL u = InetAddress.getLocalHost();
-     * CodeBase c = new CodeBase( p, u );
-     * pe = new PolicyEntry(f, c);
-     * </pre>
-     *
-     * @author Marianne Mueller
-     * @author Roland Schemers
-     * @see java.security.CodeSource
-     * @see java.security.Policy
-     * @see java.security.Permissions
-     * @see java.security.ProtectionDomain
-     */
-    private static class PolicyEntry {
-
-        private final CodeSource codesource;
-        final List<Permission> permissions;
-        private final List<PolicyParser.PrincipalEntry> principals;
-
-        /**
-         * Given a Permission and a CodeSource, create a policy entry.
-         *
-         * XXX Decide if/how to add validity fields and "purpose" fields to
-         * XXX policy entries
-         *
-         * @param cs the CodeSource, which encapsulates the URL and the
-         *        public key
-         *        attributes from the policy config file. Validity checks
-         *        are performed on the public key before PolicyEntry is
-         *        called.
-         *
-         */
-        PolicyEntry(CodeSource cs, List<PolicyParser.PrincipalEntry> principals)
-        {
-            this.codesource = cs;
-            this.permissions = new ArrayList<Permission>();
-            this.principals = principals; // can be null
-        }
-
-        PolicyEntry(CodeSource cs)
-        {
-            this(cs, null);
-        }
-
-        List<PolicyParser.PrincipalEntry> getPrincipals() {
-            return principals; // can be null
-        }
-
-        /**
-         * add a Permission object to this entry.
-         * No need to sync add op because perms are added to entry only
-         * while entry is being initialized
-         */
-        void add(Permission p) {
-            permissions.add(p);
-        }
-
-        /**
-         * Return the CodeSource for this policy entry
-         */
-        CodeSource getCodeSource() {
-            return codesource;
-        }
-
-        @Override public String toString(){
-            StringBuilder sb = new StringBuilder();
-            sb.append(ResourcesMgr.getString("LPARAM"));
-            sb.append(getCodeSource());
-            sb.append("\n");
-            for (int j = 0; j < permissions.size(); j++) {
-                Permission p = permissions.get(j);
-                sb.append(ResourcesMgr.getString("SPACE"));
-                sb.append(ResourcesMgr.getString("SPACE"));
-                sb.append(p);
-                sb.append(ResourcesMgr.getString("NEWLINE"));
-            }
-            sb.append(ResourcesMgr.getString("RPARAM"));
-            sb.append(ResourcesMgr.getString("NEWLINE"));
-            return sb.toString();
-        }
-    }
-
-    private static class SelfPermission extends Permission {
-
-        private static final long serialVersionUID = -8315562579967246806L;
-
-        /**
-         * The class name of the Permission class that will be
-         * created when this self permission is expanded .
-         *
-         * @serial
-         */
-        private String type;
-
-        /**
-         * The permission name.
-         *
-         * @serial
-         */
-        private String name;
-
-        /**
-         * The actions of the permission.
-         *
-         * @serial
-         */
-        private String actions;
-
-        /**
-         * The certs of the permission.
-         *
-         * @serial
-         */
-        private Certificate certs[];
-
-        /**
-         * Creates a new SelfPermission containing the permission
-         * information needed later to expand the self
-         * @param type the class name of the Permission class that will be
-         * created when this permission is expanded and if necessary resolved.
-         * @param name the name of the permission.
-         * @param actions the actions of the permission.
-         * @param certs the certificates the permission's class was signed with.
-         * This is a list of certificate chains, where each chain is composed of
-         * a signer certificate and optionally its supporting certificate chain.
-         * Each chain is ordered bottom-to-top (i.e., with the signer
-         * certificate first and the (root) certificate authority last).
-         */
-        public SelfPermission(String type, String name, String actions,
-                              Certificate certs[])
-        {
-            super(type);
-            if (type == null) {
-                throw new NullPointerException
-                    (ResourcesMgr.getString("type.can.t.be.null"));
-            }
-            this.type = type;
-            this.name = name;
-            this.actions = actions;
-            if (certs != null) {
-                // Extract the signer certs from the list of certificates.
-                for (int i=0; i<certs.length; i++) {
-                    if (!(certs[i] instanceof X509Certificate)) {
-                        // there is no concept of signer certs, so we store the
-                        // entire cert array
-                        this.certs = certs.clone();
-                        break;
-                    }
-                }
-
-                if (this.certs == null) {
-                    // Go through the list of certs and see if all the certs are
-                    // signer certs.
-                    int i = 0;
-                    int count = 0;
-                    while (i < certs.length) {
-                        count++;
-                        while (((i+1) < certs.length) &&
-                            ((X509Certificate)certs[i]).getIssuerDN().equals(
-                            ((X509Certificate)certs[i+1]).getSubjectDN())) {
-                            i++;
-                        }
-                        i++;
-                    }
-                    if (count == certs.length) {
-                        // All the certs are signer certs, so we store the
-                        // entire array
-                        this.certs = certs.clone();
-                    }
-
-                    if (this.certs == null) {
-                        // extract the signer certs
-                        ArrayList<Certificate> signerCerts =
-                            new ArrayList<>();
-                        i = 0;
-                        while (i < certs.length) {
-                            signerCerts.add(certs[i]);
-                            while (((i+1) < certs.length) &&
-                                ((X509Certificate)certs[i]).getIssuerDN().equals(
-                                ((X509Certificate)certs[i+1]).getSubjectDN())) {
-                                i++;
-                            }
-                            i++;
-                        }
-                        this.certs = new Certificate[signerCerts.size()];
-                        signerCerts.toArray(this.certs);
-                    }
-                }
-            }
-        }
-
-        /**
-         * This method always returns false for SelfPermission permissions.
-         * That is, an SelfPermission never considered to
-         * imply another permission.
-         *
-         * @param p the permission to check against.
-         *
-         * @return false.
-         */
-        @Override public boolean implies(Permission p) {
-            return false;
-        }
-
-        /**
-         * Checks two SelfPermission objects for equality.
-         *
-         * Checks that <i>obj</i> is an SelfPermission, and has
-         * the same type (class) name, permission name, actions, and
-         * certificates as this object.
-         *
-         * @param obj the object we are testing for equality with this object.
-         *
-         * @return true if obj is an SelfPermission, and has the same
-         * type (class) name, permission name, actions, and
-         * certificates as this object.
-         */
-        @Override public boolean equals(Object obj) {
-            if (obj == this)
-                return true;
-
-            if (! (obj instanceof SelfPermission))
-                return false;
-            SelfPermission that = (SelfPermission) obj;
-
-            if (!(this.type.equals(that.type) &&
-                this.name.equals(that.name) &&
-                this.actions.equals(that.actions)))
-                return false;
-
-            if (this.certs.length != that.certs.length)
-                return false;
-
-            int i,j;
-            boolean match;
-
-            for (i = 0; i < this.certs.length; i++) {
-                match = false;
-                for (j = 0; j < that.certs.length; j++) {
-                    if (this.certs[i].equals(that.certs[j])) {
-                        match = true;
-                        break;
-                    }
-                }
-                if (!match) return false;
-            }
-
-            for (i = 0; i < that.certs.length; i++) {
-                match = false;
-                for (j = 0; j < this.certs.length; j++) {
-                    if (that.certs[i].equals(this.certs[j])) {
-                        match = true;
-                        break;
-                    }
-                }
-                if (!match) return false;
-            }
-            return true;
-        }
-
-        /**
-         * Returns the hash code value for this object.
-         *
-         * @return a hash code value for this object.
-         */
-        @Override public int hashCode() {
-            int hash = type.hashCode();
-            if (name != null)
-                hash ^= name.hashCode();
-            if (actions != null)
-                hash ^= actions.hashCode();
-            return hash;
-        }
-
-        /**
-         * Returns the canonical string representation of the actions,
-         * which currently is the empty string "", since there are no actions
-         * for an SelfPermission. That is, the actions for the
-         * permission that will be created when this SelfPermission
-         * is resolved may be non-null, but an SelfPermission
-         * itself is never considered to have any actions.
-         *
-         * @return the empty string "".
-         */
-        @Override public String getActions() {
-            return "";
-        }
-
-        public String getSelfType() {
-            return type;
-        }
-
-        public String getSelfName() {
-            return name;
-        }
-
-        public String getSelfActions() {
-            return actions;
-        }
-
-        public Certificate[] getCerts() {
-            return certs;
-        }
-
-        /**
-         * Returns a string describing this SelfPermission.  The convention
-         * is to specify the class name, the permission name, and the actions,
-         * in the following format: '(unresolved "ClassName" "name" "actions")'.
-         *
-         * @return information about this SelfPermission.
-         */
-        @Override public String toString() {
-            return "(SelfPermission " + type + " " + name + " " + actions + ")";
-        }
-    }
-
-    /**
-     * holds policy information that we need to synch on
-     */
-    private static class PolicyInfo {
-        private static final boolean verbose = false;
-
-        // Stores grant entries in the policy
-        final List<PolicyEntry> policyEntries;
-
-        // Stores grant entries gotten from identity database
-        // Use separate lists to avoid sync on policyEntries
-        final List<PolicyEntry> identityPolicyEntries;
-
-        // Maps aliases to certs
-        final Map aliasMapping;
-
-        // Maps ProtectionDomain to PermissionCollection
-        private final ProtectionDomainCache[] pdMapping;
-        private java.util.Random random;
-
-        PolicyInfo(int numCaches) {
-            policyEntries = new ArrayList<PolicyEntry>();
-            identityPolicyEntries =
-                Collections.synchronizedList(new ArrayList<PolicyEntry>(2));
-            aliasMapping = Collections.synchronizedMap(new HashMap(11));
-
-            pdMapping = new ProtectionDomainCache[numCaches];
-            JavaSecurityProtectionDomainAccess jspda
-                = SharedSecrets.getJavaSecurityProtectionDomainAccess();
-            for (int i = 0; i < numCaches; i++) {
-                pdMapping[i] = jspda.getProtectionDomainCache();
-            }
-            if (numCaches > 1) {
-                random = new java.util.Random();
-            }
-        }
-        ProtectionDomainCache getPdMapping() {
-            if (pdMapping.length == 1) {
-                return pdMapping[0];
-            } else {
-                int i = java.lang.Math.abs(random.nextInt() % pdMapping.length);
-                return pdMapping[i];
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/PolicyParser.java b/ojluni/src/main/java/sun/security/provider/PolicyParser.java
deleted file mode 100755
index 07956f4..0000000
--- a/ojluni/src/main/java/sun/security/provider/PolicyParser.java
+++ /dev/null
@@ -1,1237 +0,0 @@
-/*
- * Copyright (c) 1997, 2010, 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.
- */
-
-package sun.security.provider;
-
-import java.io.*;
-import java.lang.RuntimePermission;
-import java.net.SocketPermission;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.LinkedList;
-import java.util.ListIterator;
-import java.util.Vector;
-import java.util.StringTokenizer;
-import java.text.MessageFormat;
-import javax.security.auth.x500.X500Principal;
-
-import java.security.GeneralSecurityException;
-import sun.security.util.Debug;
-import sun.security.util.PropertyExpander;
-import sun.security.util.ResourcesMgr;
-
-/**
- * The policy for a Java runtime (specifying
- * which permissions are available for code from various principals)
- * is represented as a separate
- * persistent configuration.  The configuration may be stored as a
- * flat ASCII file, as a serialized binary file of
- * the Policy class, or as a database. <p>
- *
- * <p>The Java runtime creates one global Policy object, which is used to
- * represent the static policy configuration file.  It is consulted by
- * a ProtectionDomain when the protection domain initializes its set of
- * permissions. <p>
- *
- * <p>The Policy <code>init</code> method parses the policy
- * configuration file, and then
- * populates the Policy object.  The Policy object is agnostic in that
- * it is not involved in making policy decisions.  It is merely the
- * Java runtime representation of the persistent policy configuration
- * file. <p>
- *
- * <p>When a protection domain needs to initialize its set of
- * permissions, it executes code such as the following
- * to ask the global Policy object to populate a
- * Permissions object with the appropriate permissions:
- * <pre>
- *  policy = Policy.getPolicy();
- *  Permissions perms = policy.getPermissions(protectiondomain)
- * </pre>
- *
- * <p>The protection domain contains CodeSource
- * object, which encapsulates its codebase (URL) and public key attributes.
- * It also contains the principals associated with the domain.
- * The Policy object evaluates the global policy in light of who the
- * principal is and what the code source is and returns an appropriate
- * Permissions object.
- *
- * @author Roland Schemers
- * @author Ram Marti
- *
- * @since 1.2
- */
-
-public class PolicyParser {
-
-    // needs to be public for PolicyTool
-    public static final String REPLACE_NAME = "PolicyParser.REPLACE_NAME";
-
-    private static final String EXTDIRS_PROPERTY = "java.ext.dirs";
-    private static final String OLD_EXTDIRS_EXPANSION =
-        "${" + EXTDIRS_PROPERTY + "}";
-
-    // package-private: used by PolicyFile for static policy
-    static final String EXTDIRS_EXPANSION = "${{" + EXTDIRS_PROPERTY + "}}";
-
-
-    private Vector<GrantEntry> grantEntries;
-
-    // Convenience variables for parsing
-    private static final Debug debug = Debug.getInstance("parser",
-                                                "\t[Policy Parser]");
-    private StreamTokenizer st;
-    private int lookahead;
-    private boolean expandProp = false;
-    private String keyStoreUrlString = null; // unexpanded
-    private String keyStoreType = null;
-    private String keyStoreProvider = null;
-    private String storePassURL = null;
-
-    private String expand(String value)
-        throws PropertyExpander.ExpandException
-    {
-        return expand(value, false);
-    }
-
-    private String expand(String value, boolean encodeURL)
-        throws PropertyExpander.ExpandException
-    {
-        if (!expandProp) {
-            return value;
-        } else {
-            return PropertyExpander.expand(value, encodeURL);
-        }
-    }
-
-    /**
-     * Creates a PolicyParser object.
-     */
-
-    public PolicyParser() {
-        grantEntries = new Vector<GrantEntry>();
-    }
-
-
-    public PolicyParser(boolean expandProp) {
-        this();
-        this.expandProp = expandProp;
-    }
-
-    /**
-     * Reads a policy configuration into the Policy object using a
-     * Reader object. <p>
-     *
-     * @param policy the policy Reader object.
-     *
-     * @exception ParsingException if the policy configuration contains
-     *          a syntax error.
-     *
-     * @exception IOException if an error occurs while reading the policy
-     *          configuration.
-     */
-
-    public void read(Reader policy)
-        throws ParsingException, IOException
-    {
-        if (!(policy instanceof BufferedReader)) {
-            policy = new BufferedReader(policy);
-        }
-
-        /**
-         * Configure the stream tokenizer:
-         *      Recognize strings between "..."
-         *      Don't convert words to lowercase
-         *      Recognize both C-style and C++-style comments
-         *      Treat end-of-line as white space, not as a token
-         */
-        st   = new StreamTokenizer(policy);
-
-        st.resetSyntax();
-        st.wordChars('a', 'z');
-        st.wordChars('A', 'Z');
-        st.wordChars('.', '.');
-        st.wordChars('0', '9');
-        st.wordChars('_', '_');
-        st.wordChars('$', '$');
-        st.wordChars(128 + 32, 255);
-        st.whitespaceChars(0, ' ');
-        st.commentChar('/');
-        st.quoteChar('\'');
-        st.quoteChar('"');
-        st.lowerCaseMode(false);
-        st.ordinaryChar('/');
-        st.slashSlashComments(true);
-        st.slashStarComments(true);
-
-        /**
-         * The main parsing loop.  The loop is executed once
-         * for each entry in the config file.      The entries
-         * are delimited by semicolons.   Once we've read in
-         * the information for an entry, go ahead and try to
-         * add it to the policy vector.
-         *
-         */
-
-        lookahead = st.nextToken();
-        while (lookahead != StreamTokenizer.TT_EOF) {
-            if (peek("grant")) {
-                GrantEntry ge = parseGrantEntry();
-                // could be null if we couldn't expand a property
-                if (ge != null)
-                    add(ge);
-            } else if (peek("keystore") && keyStoreUrlString==null) {
-                // only one keystore entry per policy file, others will be
-                // ignored
-                parseKeyStoreEntry();
-            } else if (peek("keystorePasswordURL") && storePassURL==null) {
-                // only one keystore passwordURL per policy file, others will be
-                // ignored
-                parseStorePassURL();
-            } else {
-                // error?
-            }
-            match(";");
-        }
-
-        if (keyStoreUrlString == null && storePassURL != null) {
-            throw new ParsingException(ResourcesMgr.getString
-                ("keystorePasswordURL.can.not.be.specified.without.also.specifying.keystore"));
-        }
-    }
-
-    public void add(GrantEntry ge)
-    {
-        grantEntries.addElement(ge);
-    }
-
-    public void replace(GrantEntry origGe, GrantEntry newGe)
-    {
-        grantEntries.setElementAt(newGe, grantEntries.indexOf(origGe));
-    }
-
-    public boolean remove(GrantEntry ge)
-    {
-        return grantEntries.removeElement(ge);
-    }
-
-    /**
-     * Returns the (possibly expanded) keystore location, or null if the
-     * expansion fails.
-     */
-    public String getKeyStoreUrl() {
-        try {
-            if (keyStoreUrlString!=null && keyStoreUrlString.length()!=0) {
-                return expand(keyStoreUrlString, true).replace
-                                                (File.separatorChar, '/');
-            }
-        } catch (PropertyExpander.ExpandException peee) {
-            if (debug != null) {
-                debug.println(peee.toString());
-            }
-            return null;
-        }
-        return null;
-    }
-
-    public void setKeyStoreUrl(String url) {
-        keyStoreUrlString = url;
-    }
-
-    public String getKeyStoreType() {
-        return keyStoreType;
-    }
-
-    public void setKeyStoreType(String type) {
-        keyStoreType = type;
-    }
-
-    public String getKeyStoreProvider() {
-        return keyStoreProvider;
-    }
-
-    public void setKeyStoreProvider(String provider) {
-        keyStoreProvider = provider;
-    }
-
-    public String getStorePassURL() {
-        try {
-            if (storePassURL!=null && storePassURL.length()!=0) {
-                return expand(storePassURL, true).replace
-                                                (File.separatorChar, '/');
-            }
-        } catch (PropertyExpander.ExpandException peee) {
-            if (debug != null) {
-                debug.println(peee.toString());
-            }
-            return null;
-        }
-        return null;
-    }
-
-    public void setStorePassURL(String storePassURL) {
-        this.storePassURL = storePassURL;
-    }
-
-    /**
-     * Enumerate all the entries in the global policy object.
-     * This method is used by policy admin tools.   The tools
-     * should use the Enumeration methods on the returned object
-     * to fetch the elements sequentially.
-     */
-    public Enumeration<GrantEntry> grantElements(){
-        return grantEntries.elements();
-    }
-
-    /**
-     * write out the policy
-     */
-
-    public void write(Writer policy)
-    {
-        PrintWriter out = new PrintWriter(new BufferedWriter(policy));
-
-        Enumeration<GrantEntry> enum_ = grantElements();
-
-        out.println("/* AUTOMATICALLY GENERATED ON "+
-                    (new java.util.Date()) + "*/");
-        out.println("/* DO NOT EDIT */");
-        out.println();
-
-        // write the (unexpanded) keystore entry as the first entry of the
-        // policy file
-        if (keyStoreUrlString != null) {
-            writeKeyStoreEntry(out);
-        }
-        if (storePassURL != null) {
-            writeStorePassURL(out);
-        }
-
-        // write "grant" entries
-        while (enum_.hasMoreElements()) {
-            GrantEntry ge = enum_.nextElement();
-            ge.write(out);
-            out.println();
-        }
-        out.flush();
-    }
-
-    /**
-     * parses a keystore entry
-     */
-    private void parseKeyStoreEntry() throws ParsingException, IOException {
-        match("keystore");
-        keyStoreUrlString = match("quoted string");
-
-        // parse keystore type
-        if (!peek(",")) {
-            return; // default type
-        }
-        match(",");
-
-        if (peek("\"")) {
-            keyStoreType = match("quoted string");
-        } else {
-            throw new ParsingException(st.lineno(),
-                        ResourcesMgr.getString("expected.keystore.type"));
-        }
-
-        // parse keystore provider
-        if (!peek(",")) {
-            return; // provider optional
-        }
-        match(",");
-
-        if (peek("\"")) {
-            keyStoreProvider = match("quoted string");
-        } else {
-            throw new ParsingException(st.lineno(),
-                        ResourcesMgr.getString("expected.keystore.provider"));
-        }
-    }
-
-    private void parseStorePassURL() throws ParsingException, IOException {
-        match("keyStorePasswordURL");
-        storePassURL = match("quoted string");
-    }
-
-    /**
-     * writes the (unexpanded) keystore entry
-     */
-    private void writeKeyStoreEntry(PrintWriter out) {
-        out.print("keystore \"");
-        out.print(keyStoreUrlString);
-        out.print('"');
-        if (keyStoreType != null && keyStoreType.length() > 0)
-            out.print(", \"" + keyStoreType + "\"");
-        if (keyStoreProvider != null && keyStoreProvider.length() > 0)
-            out.print(", \"" + keyStoreProvider + "\"");
-        out.println(";");
-        out.println();
-    }
-
-    private void writeStorePassURL(PrintWriter out) {
-        out.print("keystorePasswordURL \"");
-        out.print(storePassURL);
-        out.print('"');
-        out.println(";");
-        out.println();
-    }
-
-    /**
-     * parse a Grant entry
-     */
-    private GrantEntry parseGrantEntry()
-        throws ParsingException, IOException
-    {
-        GrantEntry e = new GrantEntry();
-        LinkedList<PrincipalEntry> principals = null;
-        boolean ignoreEntry = false;
-
-        match("grant");
-
-        while(!peek("{")) {
-
-            if (peekAndMatch("Codebase")) {
-                if (e.codeBase != null)
-                    throw new ParsingException(
-                            st.lineno(),
-                            ResourcesMgr.getString
-                                ("multiple.Codebase.expressions"));
-                e.codeBase = match("quoted string");
-                peekAndMatch(",");
-            } else if (peekAndMatch("SignedBy")) {
-                if (e.signedBy != null)
-                    throw new ParsingException(
-                            st.lineno(),
-                            ResourcesMgr.getString(
-                                "multiple.SignedBy.expressions"));
-                e.signedBy = match("quoted string");
-
-                // verify syntax of the aliases
-                StringTokenizer aliases = new StringTokenizer(e.signedBy,
-                                                              ",", true);
-                int actr = 0;
-                int cctr = 0;
-                while (aliases.hasMoreTokens()) {
-                    String alias = aliases.nextToken().trim();
-                    if (alias.equals(","))
-                        cctr++;
-                    else if (alias.length() > 0)
-                        actr++;
-                }
-                if (actr <= cctr)
-                    throw new ParsingException(
-                            st.lineno(),
-                            ResourcesMgr.getString(
-                                "SignedBy.has.empty.alias"));
-
-                peekAndMatch(",");
-            } else if (peekAndMatch("Principal")) {
-                if (principals == null) {
-                    principals = new LinkedList<PrincipalEntry>();
-                }
-
-                String principalClass;
-                String principalName;
-
-                if (peek("\"")) {
-                    // both the principalClass and principalName
-                    // will be replaced later
-                    principalClass = REPLACE_NAME;
-                    principalName = match("principal type");
-                } else {
-                    // check for principalClass wildcard
-                    if (peek("*")) {
-                        match("*");
-                        principalClass = PrincipalEntry.WILDCARD_CLASS;
-                    } else {
-                        principalClass = match("principal type");
-                    }
-
-                    // check for principalName wildcard
-                    if (peek("*")) {
-                        match("*");
-                        principalName = PrincipalEntry.WILDCARD_NAME;
-                    } else {
-                        principalName = match("quoted string");
-                    }
-
-                    // disallow WILDCARD_CLASS && actual name
-                    if (principalClass.equals(PrincipalEntry.WILDCARD_CLASS) &&
-                        !principalName.equals(PrincipalEntry.WILDCARD_NAME)) {
-                        if (debug != null) {
-                                debug.println("disallowing principal that " +
-                                    "has WILDCARD class but no WILDCARD name");
-                        }
-                        throw new ParsingException
-                                (st.lineno(),
-                                 ResourcesMgr.getString
-                                    ("can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name"));
-                    }
-                }
-
-                try {
-                    principalName = expand(principalName);
-
-                    if (principalClass.equals
-                                ("javax.security.auth.x500.X500Principal") &&
-                        !principalName.equals(PrincipalEntry.WILDCARD_NAME)) {
-
-                        // 4702543:  X500 names with an EmailAddress
-                        // were encoded incorrectly.  construct a new
-                        // X500Principal with correct encoding.
-
-                        X500Principal p = new X500Principal
-                                ((new X500Principal(principalName)).toString());
-                        principalName = p.getName();
-                    }
-
-                    principals.add
-                        (new PrincipalEntry(principalClass, principalName));
-                } catch (PropertyExpander.ExpandException peee) {
-                    // ignore the entire policy entry
-                    // but continue parsing all the info
-                    // so we can get to the next entry
-                    if (debug != null) {
-                        debug.println("principal name expansion failed: " +
-                                        principalName);
-                    }
-                    ignoreEntry = true;
-                }
-                peekAndMatch(",");
-
-            } else {
-                throw new ParsingException(st.lineno(),
-                                  ResourcesMgr.getString(
-                                      "expected.codeBase.or.SignedBy.or.Principal"));
-            }
-        }
-
-        if (principals != null) e.principals = principals;
-        match("{");
-
-        while(!peek("}")) {
-            if (peek("Permission")) {
-                try {
-                    PermissionEntry pe = parsePermissionEntry();
-                    e.add(pe);
-                } catch (PropertyExpander.ExpandException peee) {
-                    // ignore. The add never happened
-                    if (debug != null) {
-                        debug.println(peee.toString());
-                    }
-                    skipEntry();  // BugId 4219343
-                }
-                match(";");
-            } else {
-                throw new
-                    ParsingException(st.lineno(),
-                                     ResourcesMgr.getString(
-                                        "expected.permission.entry"));
-            }
-        }
-        match("}");
-
-        try {
-            if (e.signedBy != null) e.signedBy = expand(e.signedBy);
-            if (e.codeBase != null) {
-
-                // For backward compatibility with 1.4
-                if (e.codeBase.equals(OLD_EXTDIRS_EXPANSION)) {
-                    e.codeBase = EXTDIRS_EXPANSION;
-                }
-                int es;
-                if ((es=e.codeBase.indexOf(EXTDIRS_EXPANSION)) < 0) {
-                    e.codeBase = expand(e.codeBase, true).replace
-                                        (File.separatorChar, '/');
-                } else {
-                    // expand the system property "java.ext.dirs",
-                    // parse it into its path components,
-                    // and then create a grant entry for each component
-                    String[] extDirs = parseExtDirs(e.codeBase, es);
-                    if (extDirs != null && extDirs.length > 0) {
-                        for (int i = 0; i < extDirs.length; i++) {
-                            GrantEntry newGe = (GrantEntry)e.clone();
-                            newGe.codeBase = extDirs[i];
-                            add(newGe);
-
-                            if (debug != null) {
-                                debug.println("creating policy entry for " +
-                                        "expanded java.ext.dirs path:\n\t\t" +
-                                        extDirs[i]);
-                            }
-                        }
-                    }
-                    ignoreEntry = true;
-                }
-            }
-        } catch (PropertyExpander.ExpandException peee) {
-            if (debug != null) {
-                debug.println(peee.toString());
-            }
-            return null;
-        }
-
-        return (ignoreEntry == true) ? null : e;
-    }
-
-    /**
-     * parse a Permission entry
-     */
-    private PermissionEntry parsePermissionEntry()
-        throws ParsingException, IOException, PropertyExpander.ExpandException
-    {
-        PermissionEntry e = new PermissionEntry();
-
-        // Permission
-        match("Permission");
-        e.permission = match("permission type");
-
-        if (peek("\"")) {
-            // Permission name
-            e.name = expand(match("quoted string"));
-        }
-
-        if (!peek(",")) {
-            return e;
-        }
-        match(",");
-
-        if (peek("\"")) {
-                e.action = expand(match("quoted string"));
-                if (!peek(",")) {
-                    return e;
-                }
-                match(",");
-        }
-
-        if (peekAndMatch("SignedBy")) {
-            e.signedBy = expand(match("quoted string"));
-        }
-        return e;
-    }
-
-    // package-private: used by PolicyFile for static policy
-    static String[] parseExtDirs(String codebase, int start) {
-
-        String s = System.getProperty(EXTDIRS_PROPERTY);
-        String globalPrefix = (start > 0 ? codebase.substring(0, start) : "file:");
-        int end = start + EXTDIRS_EXPANSION.length();
-        String globalSuffix = (end < codebase.length() ? codebase.substring(end) :
-            (String) null);
-
-        String[] dirs = null;
-        String localSuffix;
-        if (s != null) {
-            StringTokenizer st =
-                new StringTokenizer(s, File.pathSeparator);
-            int count = st.countTokens();
-            dirs = new String[count];
-            for (int i = 0; i < count; i++) {
-                File file = new File(st.nextToken());
-                dirs[i] = sun.net.www.ParseUtil.encodePath
-                        (file.getAbsolutePath());
-
-                if (!dirs[i].startsWith("/")) {
-                    dirs[i] = "/" + dirs[i];
-                }
-
-                localSuffix = (globalSuffix == null ?
-                    (dirs[i].endsWith("/") ? "*" : "/*") :
-                    globalSuffix);
-
-                dirs[i] = globalPrefix + dirs[i] + localSuffix;
-            }
-        }
-        return dirs;
-    }
-
-    private boolean peekAndMatch(String expect)
-        throws ParsingException, IOException
-    {
-        if (peek(expect)) {
-            match(expect);
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    private boolean peek(String expect) {
-        boolean found = false;
-
-        switch (lookahead) {
-
-        case StreamTokenizer.TT_WORD:
-            if (expect.equalsIgnoreCase(st.sval))
-                found = true;
-            break;
-        case ',':
-            if (expect.equalsIgnoreCase(","))
-                found = true;
-            break;
-        case '{':
-            if (expect.equalsIgnoreCase("{"))
-                found = true;
-            break;
-        case '}':
-            if (expect.equalsIgnoreCase("}"))
-                found = true;
-            break;
-        case '"':
-            if (expect.equalsIgnoreCase("\""))
-                found = true;
-            break;
-        case '*':
-            if (expect.equalsIgnoreCase("*"))
-                found = true;
-            break;
-        default:
-
-        }
-        return found;
-    }
-
-    private String match(String expect)
-        throws ParsingException, IOException
-    {
-        String value = null;
-
-        switch (lookahead) {
-        case StreamTokenizer.TT_NUMBER:
-            throw new ParsingException(st.lineno(), expect,
-                                       ResourcesMgr.getString("number.") +
-                                       String.valueOf(st.nval));
-        case StreamTokenizer.TT_EOF:
-            MessageFormat form = new MessageFormat(
-                    ResourcesMgr.getString
-                            ("expected.expect.read.end.of.file."));
-            Object[] source = {expect};
-            throw new ParsingException(form.format(source));
-        case StreamTokenizer.TT_WORD:
-            if (expect.equalsIgnoreCase(st.sval)) {
-                lookahead = st.nextToken();
-            } else if (expect.equalsIgnoreCase("permission type")) {
-                value = st.sval;
-                lookahead = st.nextToken();
-            } else if (expect.equalsIgnoreCase("principal type")) {
-                value = st.sval;
-                lookahead = st.nextToken();
-            } else {
-                 throw new ParsingException(st.lineno(), expect,
-                                            st.sval);
-            }
-            break;
-        case '"':
-            if (expect.equalsIgnoreCase("quoted string")) {
-                value = st.sval;
-                lookahead = st.nextToken();
-            } else if (expect.equalsIgnoreCase("permission type")) {
-                value = st.sval;
-                lookahead = st.nextToken();
-            } else if (expect.equalsIgnoreCase("principal type")) {
-                value = st.sval;
-                lookahead = st.nextToken();
-            } else {
-                throw new ParsingException(st.lineno(), expect, st.sval);
-            }
-            break;
-        case ',':
-            if (expect.equalsIgnoreCase(","))
-                lookahead = st.nextToken();
-            else
-                throw new ParsingException(st.lineno(), expect, ",");
-            break;
-        case '{':
-            if (expect.equalsIgnoreCase("{"))
-                lookahead = st.nextToken();
-            else
-                throw new ParsingException(st.lineno(), expect, "{");
-            break;
-        case '}':
-            if (expect.equalsIgnoreCase("}"))
-                lookahead = st.nextToken();
-            else
-                throw new ParsingException(st.lineno(), expect, "}");
-            break;
-        case ';':
-            if (expect.equalsIgnoreCase(";"))
-                lookahead = st.nextToken();
-            else
-                throw new ParsingException(st.lineno(), expect, ";");
-            break;
-        case '*':
-            if (expect.equalsIgnoreCase("*"))
-                lookahead = st.nextToken();
-            else
-                throw new ParsingException(st.lineno(), expect, "*");
-            break;
-        default:
-            throw new ParsingException(st.lineno(), expect,
-                               new String(new char[] {(char)lookahead}));
-        }
-        return value;
-    }
-
-    /**
-     * skip all tokens for this entry leaving the delimiter ";"
-     * in the stream.
-     */
-    private void skipEntry() throws ParsingException, IOException {
-        while(lookahead != ';') {
-            switch (lookahead) {
-            case StreamTokenizer.TT_NUMBER:
-                throw new ParsingException(st.lineno(), ";",
-                                          ResourcesMgr.getString("number.") +
-                                          String.valueOf(st.nval));
-            case StreamTokenizer.TT_EOF:
-                throw new ParsingException(ResourcesMgr.getString
-                        ("expected.read.end.of.file."));
-            default:
-                lookahead = st.nextToken();
-            }
-        }
-    }
-
-    /**
-     * Each grant entry in the policy configuration file is
-     * represented by a
-     * GrantEntry object.  <p>
-     *
-     * <p>
-     * For example, the entry
-     * <pre>
-     *      grant signedBy "Duke" {
-     *          permission java.io.FilePermission "/tmp", "read,write";
-     *      };
-     *
-     * </pre>
-     * is represented internally
-     * <pre>
-     *
-     * pe = new PermissionEntry("java.io.FilePermission",
-     *                           "/tmp", "read,write");
-     *
-     * ge = new GrantEntry("Duke", null);
-     *
-     * ge.add(pe);
-     *
-     * </pre>
-     *
-     * @author Roland Schemers
-     *
-     * version 1.19, 05/21/98
-     */
-
-    public static class GrantEntry {
-
-        public String signedBy;
-        public String codeBase;
-        public LinkedList<PrincipalEntry> principals;
-        public Vector<PermissionEntry> permissionEntries;
-
-        public GrantEntry() {
-            principals = new LinkedList<PrincipalEntry>();
-            permissionEntries = new Vector<PermissionEntry>();
-        }
-
-        public GrantEntry(String signedBy, String codeBase) {
-            this.codeBase = codeBase;
-            this.signedBy = signedBy;
-            principals = new LinkedList<PrincipalEntry>();
-            permissionEntries = new Vector<PermissionEntry>();
-        }
-
-        public void add(PermissionEntry pe)
-        {
-            permissionEntries.addElement(pe);
-        }
-
-        public boolean remove(PrincipalEntry pe)
-        {
-            return principals.remove(pe);
-        }
-
-        public boolean remove(PermissionEntry pe)
-        {
-            return permissionEntries.removeElement(pe);
-        }
-
-        public boolean contains(PrincipalEntry pe)
-        {
-            return principals.contains(pe);
-        }
-
-        public boolean contains(PermissionEntry pe)
-        {
-            return permissionEntries.contains(pe);
-        }
-
-        /**
-         * Enumerate all the permission entries in this GrantEntry.
-         */
-        public Enumeration<PermissionEntry> permissionElements(){
-            return permissionEntries.elements();
-        }
-
-
-        public void write(PrintWriter out) {
-            out.print("grant");
-            if (signedBy != null) {
-                out.print(" signedBy \"");
-                out.print(signedBy);
-                out.print('"');
-                if (codeBase != null)
-                    out.print(", ");
-            }
-            if (codeBase != null) {
-                out.print(" codeBase \"");
-                out.print(codeBase);
-                out.print('"');
-                if (principals != null && principals.size() > 0)
-                    out.print(",\n");
-            }
-            if (principals != null && principals.size() > 0) {
-                ListIterator<PrincipalEntry> pli = principals.listIterator();
-                while (pli.hasNext()) {
-                    out.print("      ");
-                    PrincipalEntry pe = pli.next();
-                    pe.write(out);
-                    if (pli.hasNext())
-                        out.print(",\n");
-                }
-            }
-            out.println(" {");
-            Enumeration<PermissionEntry> enum_ = permissionEntries.elements();
-            while (enum_.hasMoreElements()) {
-                PermissionEntry pe = enum_.nextElement();
-                out.write("  ");
-                pe.write(out);
-            }
-            out.println("};");
-        }
-
-        public Object clone() {
-            GrantEntry ge = new GrantEntry();
-            ge.codeBase = this.codeBase;
-            ge.signedBy = this.signedBy;
-            ge.principals = new LinkedList<PrincipalEntry>(this.principals);
-            ge.permissionEntries =
-                        new Vector<PermissionEntry>(this.permissionEntries);
-            return ge;
-        }
-    }
-
-    /**
-     * Principal info (class and name) in a grant entry
-     */
-    public static class PrincipalEntry {
-
-        public static final String WILDCARD_CLASS = "WILDCARD_PRINCIPAL_CLASS";
-        public static final String WILDCARD_NAME = "WILDCARD_PRINCIPAL_NAME";
-
-        String principalClass;
-        String principalName;
-
-        /**
-         * A PrincipalEntry consists of the <code>Principal</code>
-         * class and <code>Principal</code> name.
-         *
-         * <p>
-         *
-         * @param principalClass the <code>Principal</code> class. <p>
-         *
-         * @param principalName the <code>Principal</code> name. <p>
-         */
-        public PrincipalEntry(String principalClass, String principalName) {
-            if (principalClass == null || principalName == null)
-                throw new NullPointerException(ResourcesMgr.getString(
-                                  "null.principalClass.or.principalName"));
-            this.principalClass = principalClass;
-            this.principalName = principalName;
-        }
-
-        public String getPrincipalClass() {
-            return principalClass;
-        }
-
-        public String getPrincipalName() {
-            return principalName;
-        }
-
-        public String getDisplayClass() {
-            if (principalClass.equals(WILDCARD_CLASS)) {
-                return "*";
-            } else if (principalClass.equals(REPLACE_NAME)) {
-                return "";
-            }
-            else return principalClass;
-        }
-
-        public String getDisplayName() {
-            return getDisplayName(false);
-        }
-
-        public String getDisplayName(boolean addQuote) {
-            if (principalName.equals(WILDCARD_NAME)) {
-                return "*";
-            }
-            else {
-                if (addQuote) return "\"" + principalName + "\"";
-                else return principalName;
-            }
-        }
-
-        public String toString() {
-            if (!principalClass.equals(REPLACE_NAME)) {
-                return getDisplayClass() + "/" + getDisplayName();
-            } else {
-                return getDisplayName();
-            }
-        }
-
-        /**
-         * Test for equality between the specified object and this object.
-         * Two PrincipalEntries are equal if their PrincipalClass and
-         * PrincipalName values are equal.
-         *
-         * <p>
-         *
-         * @param obj the object to test for equality with this object.
-         *
-         * @return true if the objects are equal, false otherwise.
-         */
-        public boolean equals(Object obj) {
-            if (this == obj)
-                return true;
-
-            if (!(obj instanceof PrincipalEntry))
-                return false;
-
-            PrincipalEntry that = (PrincipalEntry)obj;
-            if (this.principalClass.equals(that.principalClass) &&
-                this.principalName.equals(that.principalName)) {
-                return true;
-            }
-
-            return false;
-        }
-
-        /**
-         * Return a hashcode for this <code>PrincipalEntry</code>.
-         *
-         * <p>
-         *
-         * @return a hashcode for this <code>PrincipalEntry</code>.
-         */
-        public int hashCode() {
-            return principalClass.hashCode();
-        }
-        public void write(PrintWriter out) {
-            out.print("principal " + getDisplayClass() + " " +
-                getDisplayName(true));
-        }
-    }
-
-    /**
-     * Each permission entry in the policy configuration file is
-     * represented by a
-     * PermissionEntry object.  <p>
-     *
-     * <p>
-     * For example, the entry
-     * <pre>
-     *          permission java.io.FilePermission "/tmp", "read,write";
-     * </pre>
-     * is represented internally
-     * <pre>
-     *
-     * pe = new PermissionEntry("java.io.FilePermission",
-     *                           "/tmp", "read,write");
-     * </pre>
-     *
-     * @author Roland Schemers
-     *
-     * version 1.19, 05/21/98
-     */
-
-    public static class PermissionEntry {
-
-        public String permission;
-        public String name;
-        public String action;
-        public String signedBy;
-
-        public PermissionEntry() {
-        }
-
-        public PermissionEntry(String permission,
-                        String name,
-                        String action) {
-            this.permission = permission;
-            this.name = name;
-            this.action = action;
-        }
-
-        /**
-         * Calculates a hash code value for the object.  Objects
-         * which are equal will also have the same hashcode.
-         */
-        public int hashCode() {
-            int retval = permission.hashCode();
-            if (name != null) retval ^= name.hashCode();
-            if (action != null) retval ^= action.hashCode();
-            return retval;
-        }
-
-        public boolean equals(Object obj) {
-            if (obj == this)
-                return true;
-
-            if (! (obj instanceof PermissionEntry))
-                return false;
-
-            PermissionEntry that = (PermissionEntry) obj;
-
-            if (this.permission == null) {
-                if (that.permission != null) return false;
-            } else {
-                if (!this.permission.equals(that.permission)) return false;
-            }
-
-            if (this.name == null) {
-                if (that.name != null) return false;
-            } else {
-                if (!this.name.equals(that.name)) return false;
-            }
-
-            if (this.action == null) {
-                if (that.action != null) return false;
-            } else {
-                if (!this.action.equals(that.action)) return false;
-            }
-
-            if (this.signedBy == null) {
-                if (that.signedBy != null) return false;
-            } else {
-                if (!this.signedBy.equals(that.signedBy)) return false;
-            }
-
-            // everything matched -- the 2 objects are equal
-            return true;
-        }
-
-        public void write(PrintWriter out) {
-            out.print("permission ");
-            out.print(permission);
-            if (name != null) {
-                out.print(" \"");
-
-                // ATTENTION: regex with double escaping,
-                // the normal forms look like:
-                // $name =~ s/\\/\\\\/g; and
-                // $name =~ s/\"/\\\"/g;
-                // and then in a java string, it's escaped again
-
-                out.print(name.replaceAll("\\\\", "\\\\\\\\").replaceAll("\\\"", "\\\\\\\""));
-                out.print('"');
-            }
-            if (action != null) {
-                out.print(", \"");
-                out.print(action);
-                out.print('"');
-            }
-            if (signedBy != null) {
-                out.print(", signedBy \"");
-                out.print(signedBy);
-                out.print('"');
-            }
-            out.println(";");
-        }
-    }
-
-    public static class ParsingException extends GeneralSecurityException {
-
-        private static final long serialVersionUID = -4330692689482574072L;
-
-        private String i18nMessage;
-
-        /**
-         * Constructs a ParsingException with the specified
-         * detail message. A detail message is a String that describes
-         * this particular exception, which may, for example, specify which
-         * algorithm is not available.
-         *
-         * @param msg the detail message.
-         */
-        public ParsingException(String msg) {
-            super(msg);
-            i18nMessage = msg;
-        }
-
-        public ParsingException(int line, String msg) {
-            super("line " + line + ": " + msg);
-            MessageFormat form = new MessageFormat
-                (ResourcesMgr.getString("line.number.msg"));
-            Object[] source = {new Integer(line), msg};
-            i18nMessage = form.format(source);
-        }
-
-        public ParsingException(int line, String expect, String actual) {
-            super("line " + line + ": expected [" + expect +
-                "], found [" + actual + "]");
-            MessageFormat form = new MessageFormat(ResourcesMgr.getString
-                ("line.number.expected.expect.found.actual."));
-            Object[] source = {new Integer(line), expect, actual};
-            i18nMessage = form.format(source);
-        }
-
-        public String getLocalizedMessage() {
-            return i18nMessage;
-        }
-    }
-
-    public static void main(String arg[]) throws Exception {
-        FileReader fr = null;
-        FileWriter fw = null;
-        try {
-            PolicyParser pp = new PolicyParser(true);
-            fr = new FileReader(arg[0]);
-            pp.read(fr);
-            fw = new FileWriter(arg[1]);
-            pp.write(fw);
-        } finally {
-            if (fr != null) {
-                fr.close();
-            }
-
-            if (fw != null) {
-                fw.close();
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/PolicySpiFile.java b/ojluni/src/main/java/sun/security/provider/PolicySpiFile.java
deleted file mode 100755
index e32626a..0000000
--- a/ojluni/src/main/java/sun/security/provider/PolicySpiFile.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.security.provider;
-
-import java.security.CodeSource;
-import java.security.Permission;
-import java.security.PermissionCollection;
-import java.security.Policy;
-import java.security.PolicySpi;
-import java.security.ProtectionDomain;
-import java.security.URIParameter;
-
-import java.net.MalformedURLException;
-
-/**
- * This class wraps the PolicyFile subclass implementation of Policy
- * inside a PolicySpi implementation that is available from the SUN provider
- * via the Policy.getInstance calls.
- *
- */
-public final class PolicySpiFile extends PolicySpi {
-
-    private PolicyFile pf;
-
-    public PolicySpiFile(Policy.Parameters params) {
-
-        if (params == null) {
-            pf = new PolicyFile();
-        } else {
-            if (!(params instanceof URIParameter)) {
-                throw new IllegalArgumentException
-                        ("Unrecognized policy parameter: " + params);
-            }
-            URIParameter uriParam = (URIParameter)params;
-            try {
-                pf = new PolicyFile(uriParam.getURI().toURL());
-            } catch (MalformedURLException mue) {
-                throw new IllegalArgumentException("Invalid URIParameter", mue);
-            }
-        }
-    }
-
-    protected PermissionCollection engineGetPermissions(CodeSource codesource) {
-        return pf.getPermissions(codesource);
-    }
-
-    protected PermissionCollection engineGetPermissions(ProtectionDomain d) {
-        return pf.getPermissions(d);
-    }
-
-    protected boolean engineImplies(ProtectionDomain d, Permission p) {
-        return pf.implies(d, p);
-    }
-
-    protected void engineRefresh() {
-        pf.refresh();
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/SHA.java b/ojluni/src/main/java/sun/security/provider/SHA.java
deleted file mode 100755
index 723c64a..0000000
--- a/ojluni/src/main/java/sun/security/provider/SHA.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright (c) 1996, 2006, 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.
- */
-
-package sun.security.provider;
-
-import static sun.security.provider.ByteArrayAccess.*;
-
-/**
- * This class implements the Secure Hash Algorithm (SHA) developed by
- * the National Institute of Standards and Technology along with the
- * National Security Agency.  This is the updated version of SHA
- * fip-180 as superseded by fip-180-1.
- *
- * <p>It implement JavaSecurity MessageDigest, and can be used by in
- * the Java Security framework, as a pluggable implementation, as a
- * filter for the digest stream classes.
- *
- * @author      Roger Riggs
- * @author      Benjamin Renaud
- * @author      Andreas Sterbenz
- */
-public final class SHA extends DigestBase {
-
-    // Buffer of int's and count of characters accumulated
-    // 64 bytes are included in each hash block so the low order
-    // bits of count are used to know how to pack the bytes into ints
-    // and to know when to compute the block and start the next one.
-    private final int[] W;
-
-    // state of this
-    private final int[] state;
-
-    /**
-     * Creates a new SHA object.
-     */
-    public SHA() {
-        super("SHA-1", 20, 64);
-        state = new int[5];
-        W = new int[80];
-        implReset();
-    }
-
-    /**
-     * Creates a SHA object.with state (for cloning) */
-    private SHA(SHA base) {
-        super(base);
-        this.state = base.state.clone();
-        this.W = new int[80];
-    }
-
-    /*
-     * Clones this object.
-     */
-    public Object clone() {
-        return new SHA(this);
-    }
-
-    /**
-     * Resets the buffers and hash value to start a new hash.
-     */
-    void implReset() {
-        state[0] = 0x67452301;
-        state[1] = 0xefcdab89;
-        state[2] = 0x98badcfe;
-        state[3] = 0x10325476;
-        state[4] = 0xc3d2e1f0;
-    }
-
-    /**
-     * Computes the final hash and copies the 20 bytes to the output array.
-     */
-    void implDigest(byte[] out, int ofs) {
-        long bitsProcessed = bytesProcessed << 3;
-
-        int index = (int)bytesProcessed & 0x3f;
-        int padLen = (index < 56) ? (56 - index) : (120 - index);
-        engineUpdate(padding, 0, padLen);
-
-        i2bBig4((int)(bitsProcessed >>> 32), buffer, 56);
-        i2bBig4((int)bitsProcessed, buffer, 60);
-        implCompress(buffer, 0);
-
-        i2bBig(state, 0, out, ofs, 20);
-    }
-
-    // Constants for each round
-    private final static int round1_kt = 0x5a827999;
-    private final static int round2_kt = 0x6ed9eba1;
-    private final static int round3_kt = 0x8f1bbcdc;
-    private final static int round4_kt = 0xca62c1d6;
-
-    /**
-     * Compute a the hash for the current block.
-     *
-     * This is in the same vein as Peter Gutmann's algorithm listed in
-     * the back of Applied Cryptography, Compact implementation of
-     * "old" NIST Secure Hash Algorithm.
-     */
-    void implCompress(byte[] buf, int ofs) {
-        b2iBig64(buf, ofs, W);
-
-        // The first 16 ints have the byte stream, compute the rest of
-        // the buffer
-        for (int t = 16; t <= 79; t++) {
-            int temp = W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16];
-            W[t] = (temp << 1) | (temp >>> 31);
-        }
-
-        int a = state[0];
-        int b = state[1];
-        int c = state[2];
-        int d = state[3];
-        int e = state[4];
-
-        // Round 1
-        for (int i = 0; i < 20; i++) {
-            int temp = ((a<<5) | (a>>>(32-5))) +
-                ((b&c)|((~b)&d))+ e + W[i] + round1_kt;
-            e = d;
-            d = c;
-            c = ((b<<30) | (b>>>(32-30)));
-            b = a;
-            a = temp;
-        }
-
-        // Round 2
-        for (int i = 20; i < 40; i++) {
-            int temp = ((a<<5) | (a>>>(32-5))) +
-                (b ^ c ^ d) + e + W[i] + round2_kt;
-            e = d;
-            d = c;
-            c = ((b<<30) | (b>>>(32-30)));
-            b = a;
-            a = temp;
-        }
-
-        // Round 3
-        for (int i = 40; i < 60; i++) {
-            int temp = ((a<<5) | (a>>>(32-5))) +
-                ((b&c)|(b&d)|(c&d)) + e + W[i] + round3_kt;
-            e = d;
-            d = c;
-            c = ((b<<30) | (b>>>(32-30)));
-            b = a;
-            a = temp;
-        }
-
-        // Round 4
-        for (int i = 60; i < 80; i++) {
-            int temp = ((a<<5) | (a>>>(32-5))) +
-                (b ^ c ^ d) + e + W[i] + round4_kt;
-            e = d;
-            d = c;
-            c = ((b<<30) | (b>>>(32-30)));
-            b = a;
-            a = temp;
-        }
-        state[0] += a;
-        state[1] += b;
-        state[2] += c;
-        state[3] += d;
-        state[4] += e;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/provider/SHA2.java b/ojluni/src/main/java/sun/security/provider/SHA2.java
deleted file mode 100755
index a04ada0..0000000
--- a/ojluni/src/main/java/sun/security/provider/SHA2.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.
- */
-
-package sun.security.provider;
-
-import static sun.security.provider.ByteArrayAccess.*;
-
-/**
- * This class implements the Secure Hash Algorithm SHA-256 developed by
- * the National Institute of Standards and Technology along with the
- * National Security Agency.
- *
- * <p>It implements java.security.MessageDigestSpi, and can be used
- * through Java Cryptography Architecture (JCA), as a pluggable
- * MessageDigest implementation.
- *
- * @since       1.4.2
- * @author      Valerie Peng
- * @author      Andreas Sterbenz
- */
-public final class SHA2 extends DigestBase {
-
-    private static final int ITERATION = 64;
-    // Constants for each round
-    private static final int[] ROUND_CONSTS = {
-        0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
-        0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
-        0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
-        0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
-        0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
-        0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
-        0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
-        0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
-        0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
-        0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
-        0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
-        0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
-        0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
-        0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
-        0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
-        0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
-    };
-
-    // buffer used by implCompress()
-    private final int[] W;
-
-    // state of this object
-    private final int[] state;
-
-    /**
-     * Creates a new SHA object.
-     */
-    public SHA2() {
-        super("SHA-256", 32, 64);
-        state = new int[8];
-        W = new int[64];
-        implReset();
-    }
-
-    /**
-     * Creates a SHA2 object.with state (for cloning)
-     */
-    private SHA2(SHA2 base) {
-        super(base);
-        this.state = base.state.clone();
-        this.W = new int[64];
-    }
-
-    public Object clone() {
-        return new SHA2(this);
-    }
-
-    /**
-     * Resets the buffers and hash value to start a new hash.
-     */
-    void implReset() {
-        state[0] = 0x6a09e667;
-        state[1] = 0xbb67ae85;
-        state[2] = 0x3c6ef372;
-        state[3] = 0xa54ff53a;
-        state[4] = 0x510e527f;
-        state[5] = 0x9b05688c;
-        state[6] = 0x1f83d9ab;
-        state[7] = 0x5be0cd19;
-    }
-
-    void implDigest(byte[] out, int ofs) {
-        long bitsProcessed = bytesProcessed << 3;
-
-        int index = (int)bytesProcessed & 0x3f;
-        int padLen = (index < 56) ? (56 - index) : (120 - index);
-        engineUpdate(padding, 0, padLen);
-
-        i2bBig4((int)(bitsProcessed >>> 32), buffer, 56);
-        i2bBig4((int)bitsProcessed, buffer, 60);
-        implCompress(buffer, 0);
-
-        i2bBig(state, 0, out, ofs, 32);
-    }
-
-    /**
-     * logical function ch(x,y,z) as defined in spec:
-     * @return (x and y) xor ((complement x) and z)
-     * @param x int
-     * @param y int
-     * @param z int
-     */
-    private static int lf_ch(int x, int y, int z) {
-        return (x & y) ^ ((~x) & z);
-    }
-
-    /**
-     * logical function maj(x,y,z) as defined in spec:
-     * @return (x and y) xor (x and z) xor (y and z)
-     * @param x int
-     * @param y int
-     * @param z int
-     */
-    private static int lf_maj(int x, int y, int z) {
-        return (x & y) ^ (x & z) ^ (y & z);
-    }
-
-    /**
-     * logical function R(x,s) - right shift
-     * @return x right shift for s times
-     * @param x int
-     * @param s int
-     */
-    private static int lf_R( int x, int s ) {
-        return (x >>> s);
-    }
-
-    /**
-     * logical function S(x,s) - right rotation
-     * @return x circular right shift for s times
-     * @param x int
-     * @param s int
-     */
-    private static int lf_S(int x, int s) {
-        return (x >>> s) | (x << (32 - s));
-    }
-
-    /**
-     * logical function sigma0(x) - xor of results of right rotations
-     * @return S(x,2) xor S(x,13) xor S(x,22)
-     * @param x int
-     */
-    private static int lf_sigma0(int x) {
-        return lf_S(x, 2) ^ lf_S(x, 13) ^ lf_S(x, 22);
-    }
-
-    /**
-     * logical function sigma1(x) - xor of results of right rotations
-     * @return S(x,6) xor S(x,11) xor S(x,25)
-     * @param x int
-     */
-    private static int lf_sigma1(int x) {
-        return lf_S( x, 6 ) ^ lf_S( x, 11 ) ^ lf_S( x, 25 );
-    }
-
-    /**
-     * logical function delta0(x) - xor of results of right shifts/rotations
-     * @return int
-     * @param x int
-     */
-    private static int lf_delta0(int x) {
-        return lf_S(x, 7) ^ lf_S(x, 18) ^ lf_R(x, 3);
-    }
-
-    /**
-     * logical function delta1(x) - xor of results of right shifts/rotations
-     * @return int
-     * @param x int
-     */
-    private static int lf_delta1(int x) {
-        return lf_S(x, 17) ^ lf_S(x, 19) ^ lf_R(x, 10);
-    }
-
-    /**
-     * Process the current block to update the state variable state.
-     */
-    void implCompress(byte[] buf, int ofs) {
-        b2iBig64(buf, ofs, W);
-
-        // The first 16 ints are from the byte stream, compute the rest of
-        // the W[]'s
-        for (int t = 16; t < ITERATION; t++) {
-            W[t] = lf_delta1(W[t-2]) + W[t-7] + lf_delta0(W[t-15])
-                   + W[t-16];
-        }
-
-        int a = state[0];
-        int b = state[1];
-        int c = state[2];
-        int d = state[3];
-        int e = state[4];
-        int f = state[5];
-        int g = state[6];
-        int h = state[7];
-
-        for (int i = 0; i < ITERATION; i++) {
-            int T1 = h + lf_sigma1(e) + lf_ch(e,f,g) + ROUND_CONSTS[i] + W[i];
-            int T2 = lf_sigma0(a) + lf_maj(a,b,c);
-            h = g;
-            g = f;
-            f = e;
-            e = d + T1;
-            d = c;
-            c = b;
-            b = a;
-            a = T1 + T2;
-        }
-        state[0] += a;
-        state[1] += b;
-        state[2] += c;
-        state[3] += d;
-        state[4] += e;
-        state[5] += f;
-        state[6] += g;
-        state[7] += h;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/provider/SHA5.java b/ojluni/src/main/java/sun/security/provider/SHA5.java
deleted file mode 100755
index 413770c..0000000
--- a/ojluni/src/main/java/sun/security/provider/SHA5.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.
- */
-
-package sun.security.provider;
-
-import java.security.*;
-import java.math.BigInteger;
-
-import static sun.security.provider.ByteArrayAccess.*;
-
-/**
- * This class implements the Secure Hash Algorithm SHA-384 and SHA-512
- * developed by the National Institute of Standards and Technology along
- * with the National Security Agency.
- *
- * The two algorithms are almost identical. This file contains a base
- * class SHA5 and two nested static subclasses as the classes to be used
- * by the JCA framework.
- *
- * <p>It implements java.security.MessageDigestSpi, and can be used
- * through Java Cryptography Architecture (JCA), as a pluggable
- * MessageDigest implementation.
- *
- * @since       1.4.2
- * @author      Valerie Peng
- * @author      Andreas Sterbenz
- */
-abstract class SHA5 extends DigestBase {
-
-    private static final int ITERATION = 80;
-    // Constants for each round/iteration
-    private static final long[] ROUND_CONSTS = {
-        0x428A2F98D728AE22L, 0x7137449123EF65CDL, 0xB5C0FBCFEC4D3B2FL,
-        0xE9B5DBA58189DBBCL, 0x3956C25BF348B538L, 0x59F111F1B605D019L,
-        0x923F82A4AF194F9BL, 0xAB1C5ED5DA6D8118L, 0xD807AA98A3030242L,
-        0x12835B0145706FBEL, 0x243185BE4EE4B28CL, 0x550C7DC3D5FFB4E2L,
-        0x72BE5D74F27B896FL, 0x80DEB1FE3B1696B1L, 0x9BDC06A725C71235L,
-        0xC19BF174CF692694L, 0xE49B69C19EF14AD2L, 0xEFBE4786384F25E3L,
-        0x0FC19DC68B8CD5B5L, 0x240CA1CC77AC9C65L, 0x2DE92C6F592B0275L,
-        0x4A7484AA6EA6E483L, 0x5CB0A9DCBD41FBD4L, 0x76F988DA831153B5L,
-        0x983E5152EE66DFABL, 0xA831C66D2DB43210L, 0xB00327C898FB213FL,
-        0xBF597FC7BEEF0EE4L, 0xC6E00BF33DA88FC2L, 0xD5A79147930AA725L,
-        0x06CA6351E003826FL, 0x142929670A0E6E70L, 0x27B70A8546D22FFCL,
-        0x2E1B21385C26C926L, 0x4D2C6DFC5AC42AEDL, 0x53380D139D95B3DFL,
-        0x650A73548BAF63DEL, 0x766A0ABB3C77B2A8L, 0x81C2C92E47EDAEE6L,
-        0x92722C851482353BL, 0xA2BFE8A14CF10364L, 0xA81A664BBC423001L,
-        0xC24B8B70D0F89791L, 0xC76C51A30654BE30L, 0xD192E819D6EF5218L,
-        0xD69906245565A910L, 0xF40E35855771202AL, 0x106AA07032BBD1B8L,
-        0x19A4C116B8D2D0C8L, 0x1E376C085141AB53L, 0x2748774CDF8EEB99L,
-        0x34B0BCB5E19B48A8L, 0x391C0CB3C5C95A63L, 0x4ED8AA4AE3418ACBL,
-        0x5B9CCA4F7763E373L, 0x682E6FF3D6B2B8A3L, 0x748F82EE5DEFB2FCL,
-        0x78A5636F43172F60L, 0x84C87814A1F0AB72L, 0x8CC702081A6439ECL,
-        0x90BEFFFA23631E28L, 0xA4506CEBDE82BDE9L, 0xBEF9A3F7B2C67915L,
-        0xC67178F2E372532BL, 0xCA273ECEEA26619CL, 0xD186B8C721C0C207L,
-        0xEADA7DD6CDE0EB1EL, 0xF57D4F7FEE6ED178L, 0x06F067AA72176FBAL,
-        0x0A637DC5A2C898A6L, 0x113F9804BEF90DAEL, 0x1B710B35131C471BL,
-        0x28DB77F523047D84L, 0x32CAAB7B40C72493L, 0x3C9EBE0A15C9BEBCL,
-        0x431D67C49C100D4CL, 0x4CC5D4BECB3E42B6L, 0x597F299CFC657E2AL,
-        0x5FCB6FAB3AD6FAECL, 0x6C44198C4A475817L
-    };
-
-    // buffer used by implCompress()
-    private final long[] W;
-
-    // state of this object
-    private final long[] state;
-
-    // initial state value. different between SHA-384 and SHA-512
-    private final long[] initialHashes;
-
-    /**
-     * Creates a new SHA object.
-     */
-    SHA5(String name, int digestLength, long[] initialHashes) {
-        super(name, digestLength, 128);
-        this.initialHashes = initialHashes;
-        state = new long[8];
-        W = new long[80];
-        implReset();
-    }
-
-    /**
-     * Creates a SHA object with state (for cloning)
-     */
-    SHA5(SHA5 base) {
-        super(base);
-        this.initialHashes = base.initialHashes;
-        this.state = base.state.clone();
-        this.W = new long[80];
-    }
-
-    final void implReset() {
-        System.arraycopy(initialHashes, 0, state, 0, state.length);
-    }
-
-    final void implDigest(byte[] out, int ofs) {
-        long bitsProcessed = bytesProcessed << 3;
-
-        int index = (int)bytesProcessed & 0x7f;
-        int padLen = (index < 112) ? (112 - index) : (240 - index);
-        engineUpdate(padding, 0, padLen + 8);
-
-        i2bBig4((int)(bitsProcessed >>> 32), buffer, 120);
-        i2bBig4((int)bitsProcessed, buffer, 124);
-        implCompress(buffer, 0);
-
-        l2bBig(state, 0, out, ofs, engineGetDigestLength());
-    }
-
-    /**
-     * logical function ch(x,y,z) as defined in spec:
-     * @return (x and y) xor ((complement x) and z)
-     * @param x long
-     * @param y long
-     * @param z long
-     */
-    private static long lf_ch(long x, long y, long z) {
-        return (x & y) ^ ((~x) & z);
-    }
-
-    /**
-     * logical function maj(x,y,z) as defined in spec:
-     * @return (x and y) xor (x and z) xor (y and z)
-     * @param x long
-     * @param y long
-     * @param z long
-     */
-    private static long lf_maj(long x, long y, long z) {
-        return (x & y) ^ (x & z) ^ (y & z);
-    }
-
-    /**
-     * logical function R(x,s) - right shift
-     * @return x right shift for s times
-     * @param x long
-     * @param s int
-     */
-    private static long lf_R(long x, int s) {
-        return (x >>> s);
-    }
-
-    /**
-     * logical function S(x,s) - right rotation
-     * @return x circular right shift for s times
-     * @param x long
-     * @param s int
-     */
-    private static long lf_S(long x, int s) {
-        return (x >>> s) | (x << (64 - s));
-    }
-
-    /**
-     * logical function sigma0(x) - xor of results of right rotations
-     * @return S(x,28) xor S(x,34) xor S(x,39)
-     * @param x long
-     */
-    private static long lf_sigma0(long x) {
-        return lf_S(x, 28) ^ lf_S(x, 34) ^ lf_S(x, 39);
-    }
-
-    /**
-     * logical function sigma1(x) - xor of results of right rotations
-     * @return S(x,14) xor S(x,18) xor S(x,41)
-     * @param x long
-     */
-    private static long lf_sigma1(long x) {
-        return lf_S(x, 14) ^ lf_S(x, 18) ^ lf_S(x, 41);
-    }
-
-    /**
-     * logical function delta0(x) - xor of results of right shifts/rotations
-     * @return long
-     * @param x long
-     */
-    private static long lf_delta0(long x) {
-        return lf_S(x, 1) ^ lf_S(x, 8) ^ lf_R(x, 7);
-    }
-
-    /**
-     * logical function delta1(x) - xor of results of right shifts/rotations
-     * @return long
-     * @param x long
-     */
-    private static long lf_delta1(long x) {
-        return lf_S(x, 19) ^ lf_S(x, 61) ^ lf_R(x, 6);
-    }
-
-    /**
-     * Compute the hash for the current block.
-     *
-     * This is in the same vein as Peter Gutmann's algorithm listed in
-     * the back of Applied Cryptography, Compact implementation of
-     * "old" NIST Secure Hash Algorithm.
-     */
-    final void implCompress(byte[] buf, int ofs) {
-        b2lBig128(buf, ofs, W);
-
-        // The first 16 longs are from the byte stream, compute the rest of
-        // the W[]'s
-        for (int t = 16; t < ITERATION; t++) {
-            W[t] = lf_delta1(W[t-2]) + W[t-7] + lf_delta0(W[t-15])
-                   + W[t-16];
-        }
-
-        long a = state[0];
-        long b = state[1];
-        long c = state[2];
-        long d = state[3];
-        long e = state[4];
-        long f = state[5];
-        long g = state[6];
-        long h = state[7];
-
-        for (int i = 0; i < ITERATION; i++) {
-            long T1 = h + lf_sigma1(e) + lf_ch(e,f,g) + ROUND_CONSTS[i] + W[i];
-            long T2 = lf_sigma0(a) + lf_maj(a,b,c);
-            h = g;
-            g = f;
-            f = e;
-            e = d + T1;
-            d = c;
-            c = b;
-            b = a;
-            a = T1 + T2;
-        }
-        state[0] += a;
-        state[1] += b;
-        state[2] += c;
-        state[3] += d;
-        state[4] += e;
-        state[5] += f;
-        state[6] += g;
-        state[7] += h;
-    }
-
-    /**
-     * SHA-512 implementation class.
-     */
-    public static final class SHA512 extends SHA5 {
-
-        private static final long[] INITIAL_HASHES = {
-            0x6a09e667f3bcc908L, 0xbb67ae8584caa73bL,
-            0x3c6ef372fe94f82bL, 0xa54ff53a5f1d36f1L,
-            0x510e527fade682d1L, 0x9b05688c2b3e6c1fL,
-            0x1f83d9abfb41bd6bL, 0x5be0cd19137e2179L
-        };
-
-        public SHA512() {
-            super("SHA-512", 64, INITIAL_HASHES);
-        }
-
-        private SHA512(SHA512 base) {
-            super(base);
-        }
-
-        public Object clone() {
-            return new SHA512(this);
-        }
-    }
-
-    /**
-     * SHA-384 implementation class.
-     */
-    public static final class SHA384 extends SHA5 {
-
-        private static final long[] INITIAL_HASHES = {
-            0xcbbb9d5dc1059ed8L, 0x629a292a367cd507L,
-            0x9159015a3070dd17L, 0x152fecd8f70e5939L,
-            0x67332667ffc00b31L, 0x8eb44a8768581511L,
-            0xdb0c2e0d64f98fa7L, 0x47b5481dbefa4fa4L
-        };
-
-        public SHA384() {
-            super("SHA-384", 48, INITIAL_HASHES);
-        }
-
-        private SHA384(SHA384 base) {
-            super(base);
-        }
-
-        public Object clone() {
-            return new SHA384(this);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/provider/Sun.java b/ojluni/src/main/java/sun/security/provider/Sun.java
deleted file mode 100755
index 20edc86..0000000
--- a/ojluni/src/main/java/sun/security/provider/Sun.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 1996, 2011, 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.
- */
-
-package sun.security.provider;
-
-import java.util.*;
-import java.security.*;
-
-import sun.security.action.PutAllAction;
-
-/**
- * The SUN Security Provider.
- *
- */
-public final class Sun extends Provider {
-
-    private static final long serialVersionUID = 6440182097568097204L;
-
-    private static final String INFO = "SUN " +
-    "(DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; " +
-    "SecureRandom; X.509 certificates; JKS keystore; PKIX CertPathValidator; " +
-    "PKIX CertPathBuilder; LDAP, Collection CertStores, JavaPolicy Policy; " +
-    "JavaLoginConfig Configuration)";
-
-    public Sun() {
-        /* We are the SUN provider */
-        super("SUN", 1.7, INFO);
-
-        // if there is no security manager installed, put directly into
-        // the provider. Otherwise, create a temporary map and use a
-        // doPrivileged() call at the end to transfer the contents
-        if (System.getSecurityManager() == null) {
-            SunEntries.putEntries(this);
-        } else {
-            // use LinkedHashMap to preserve the order of the PRNGs
-            Map<Object, Object> map = new LinkedHashMap<>();
-            SunEntries.putEntries(map);
-            AccessController.doPrivileged(new PutAllAction(this, map));
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/AdaptableX509CertSelector.java b/ojluni/src/main/java/sun/security/provider/certpath/AdaptableX509CertSelector.java
deleted file mode 100755
index 959ac59..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/AdaptableX509CertSelector.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Copyright (c) 2011, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.io.IOException;
-import java.util.Date;
-
-import java.security.cert.Certificate;
-import java.security.cert.X509Certificate;
-import java.security.cert.X509CertSelector;
-import java.security.cert.CertificateException;
-
-import sun.security.util.DerOutputStream;
-import sun.security.x509.SerialNumber;
-import sun.security.x509.KeyIdentifier;
-import sun.security.x509.AuthorityKeyIdentifierExtension;
-
-/**
- * An adaptable X509 certificate selector for forward certification path
- * building.
- *
- * @since 1.7
- */
-class AdaptableX509CertSelector extends X509CertSelector {
-    // The start date of a validity period.
-    private Date startDate;
-
-    // The end date of a validity period.
-    private Date endDate;
-
-    // Is subject key identifier sensitive?
-    private boolean isSKIDSensitive = false;
-
-    // Is serial number sensitive?
-    private boolean isSNSensitive = false;
-
-    AdaptableX509CertSelector() {
-        super();
-    }
-
-    /**
-     * Sets the criterion of the X509Certificate validity period.
-     *
-     * Normally, we may not have to check that a certificate validity period
-     * must fall within its issuer's certificate validity period. However,
-     * when we face root CA key updates for version 1 certificates, according
-     * to scheme of RFC 4210 or 2510, the validity periods should be checked
-     * to determine the right issuer's certificate.
-     *
-     * Conservatively, we will only check the validity periods for version
-     * 1 and version 2 certificates. For version 3 certificates, we can
-     * determine the right issuer by authority and subject key identifier
-     * extensions.
-     *
-     * @param startDate the start date of a validity period that must fall
-     *        within the certificate validity period for the X509Certificate
-     * @param endDate the end date of a validity period that must fall
-     *        within the certificate validity period for the X509Certificate
-     */
-    void setValidityPeriod(Date startDate, Date endDate) {
-        this.startDate = startDate;
-        this.endDate = endDate;
-    }
-
-    /**
-     * Parse the authority key identifier extension.
-     *
-     * If the keyIdentifier field of the extension is non-null, set the
-     * subjectKeyIdentifier criterion. If the authorityCertSerialNumber
-     * field is non-null, set the serialNumber criterion.
-     *
-     * Note that we will not set the subject criterion according to the
-     * authorityCertIssuer field of the extension. The caller MUST set
-     * the subject criterion before call match().
-     *
-     * @param akidext the authorityKeyIdentifier extension
-     */
-    void parseAuthorityKeyIdentifierExtension(
-            AuthorityKeyIdentifierExtension akidext) throws IOException {
-        if (akidext != null) {
-            KeyIdentifier akid = (KeyIdentifier)akidext.get(akidext.KEY_ID);
-            if (akid != null) {
-                // Do not override the previous setting for initial selection.
-                if (isSKIDSensitive || getSubjectKeyIdentifier() == null) {
-                    DerOutputStream derout = new DerOutputStream();
-                    derout.putOctetString(akid.getIdentifier());
-                    super.setSubjectKeyIdentifier(derout.toByteArray());
-
-                    isSKIDSensitive = true;
-                }
-            }
-
-            SerialNumber asn =
-                (SerialNumber)akidext.get(akidext.SERIAL_NUMBER);
-            if (asn != null) {
-                // Do not override the previous setting for initial selection.
-                if (isSNSensitive || getSerialNumber() == null) {
-                    super.setSerialNumber(asn.getNumber());
-                    isSNSensitive = true;
-                }
-            }
-
-            // the subject criterion should be set by the caller.
-        }
-    }
-
-    /**
-     * Decides whether a <code>Certificate</code> should be selected.
-     *
-     * For the purpose of compatibility, when a certificate is of
-     * version 1 and version 2, or the certificate does not include
-     * a subject key identifier extension, the selection criterion
-     * of subjectKeyIdentifier will be disabled.
-     */
-    @Override
-    public boolean match(Certificate cert) {
-        if (!(cert instanceof X509Certificate)) {
-            return false;
-        }
-
-        X509Certificate xcert = (X509Certificate)cert;
-        int version = xcert.getVersion();
-
-        // Check the validity period for version 1 and 2 certificate.
-        if (version < 3) {
-            if (startDate != null) {
-                try {
-                    xcert.checkValidity(startDate);
-                } catch (CertificateException ce) {
-                    return false;
-                }
-            }
-
-            if (endDate != null) {
-                try {
-                    xcert.checkValidity(endDate);
-                } catch (CertificateException ce) {
-                    return false;
-                }
-            }
-        }
-
-        // If no SubjectKeyIdentifier extension, don't bother to check it.
-        if (isSKIDSensitive &&
-            (version < 3 || xcert.getExtensionValue("2.5.29.14") == null)) {
-            setSubjectKeyIdentifier(null);
-        }
-
-        // In practice, a CA may replace its root certificate and require that
-        // the existing certificate is still valid, even if the AKID extension
-        // does not match the replacement root certificate fields.
-        //
-        // Conservatively, we only support the replacement for version 1 and
-        // version 2 certificate. As for version 2, the certificate extension
-        // may contain sensitive information (for example, policies), the
-        // AKID need to be respected to seek the exact certificate in case
-        // of key or certificate abuse.
-        if (isSNSensitive && version < 3) {
-            setSerialNumber(null);
-        }
-
-        return super.match(cert);
-    }
-
-    @Override
-    public Object clone() {
-        AdaptableX509CertSelector copy =
-                        (AdaptableX509CertSelector)super.clone();
-        if (startDate != null) {
-            copy.startDate = (Date)startDate.clone();
-        }
-
-        if (endDate != null) {
-            copy.endDate = (Date)endDate.clone();
-        }
-
-        return copy;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/AdjacencyList.java b/ojluni/src/main/java/sun/security/provider/certpath/AdjacencyList.java
deleted file mode 100755
index 0001e66..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/AdjacencyList.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.
- */
-package sun.security.provider.certpath;
-
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-
-/**
- * An AdjacencyList is used to store the history of certification paths
- * attempted in constructing a path from an initiator to a target. The
- * AdjacencyList is initialized with a <code>List</code> of
- * <code>List</code>s, where each sub-<code>List</code> contains objects of
- * type <code>Vertex</code>. A <code>Vertex</code> describes one possible or
- * actual step in the chain building process, and the associated
- * <code>Certificate</code>. Specifically, a <code>Vertex</code> object
- * contains a <code>Certificate</code> and an index value referencing the
- * next sub-list in the process. If the index value is -1 then this
- * <code>Vertex</code> doesn't continue the attempted build path.
- * <p>
- * Example:
- * <p>
- * Attempted Paths:<ul>
- * <li>C1-&gt;C2-&gt;C3
- * <li>C1-&gt;C4-&gt;C5
- * <li>C1-&gt;C4-&gt;C6
- * <li>C1-&gt;C4-&gt;C7
- * <li>C1-&gt;C8-&gt;C9
- * <li>C1-&gt;C10-&gt;C11
- * </ul>
- * <p>
- * AdjacencyList structure:<ul>
- * <li>AL[0] = C1,1
- * <li>AL[1] = C2,2   =&gt;C4,3   =&gt;C8,4     =&gt;C10,5
- * <li>AL[2] = C3,-1
- * <li>AL[3] = C5,-1  =&gt;C6,-1  =&gt;C7,-1
- * <li>AL[4] = C9,-1
- * <li>AL[5] = C11,-1
- * </ul>
- * <p>
- * The iterator method returns objects of type <code>BuildStep</code>, not
- * objects of type <code>Vertex</code>.
- * A <code>BuildStep</code> contains a <code>Vertex</code> and a result code,
- * accessable via getResult method. There are five result values.
- * <code>POSSIBLE</code> denotes that the current step represents a
- * <code>Certificate</code> that the builder is considering at this point in
- * the build. <code>FOLLOW</code> denotes a <code>Certificate</code> (one of
- * those noted as <code>POSSIBLE</code>) that the builder is using to try
- * extending the chain. <code>BACK</code> represents that a
- * <code>FOLLOW</code> was incorrect, and is being removed from the chain.
- * There is exactly one <code>FOLLOW</code> for each <code>BACK</code>. The
- * values <code>SUCCEED</code> and <code>FAIL</code> mean that we've come to
- * the end of the build process, and there will not be any more entries in
- * the list.
- * <p>
- * @see sun.security.provider.certpath.BuildStep
- * @see sun.security.provider.certpath.Vertex
- * <p>
- * @author  seth proctor
- * @since   1.4
- */
-public class AdjacencyList {
-
-    // the actual set of steps the AdjacencyList represents
-    private ArrayList<BuildStep> mStepList;
-
-    // the original list, just for the toString method
-    private List<List<Vertex>> mOrigList;
-
-    /**
-     * Constructs a new <code>AdjacencyList</code> based on the specified
-     * <code>List</code>. See the example above.
-     *
-     * @param list a <code>List</code> of <code>List</code>s of
-     *             <code>Vertex</code> objects
-     */
-    public AdjacencyList(List<List<Vertex>> list) {
-        mStepList = new ArrayList<BuildStep>();
-        mOrigList = list;
-        buildList(list, 0, null);
-    }
-
-    /**
-     * Gets an <code>Iterator</code> to iterate over the set of
-     * <code>BuildStep</code>s in build-order. Any attempts to change
-     * the list through the remove method will fail.
-     *
-     * @return an <code>Iterator</code> over the <code>BuildStep</code>s
-     */
-    public Iterator<BuildStep> iterator() {
-        return Collections.unmodifiableList(mStepList).iterator();
-    }
-
-    /**
-     * Recursive, private method which actually builds the step list from
-     * the given adjacency list. <code>Follow</code> is the parent BuildStep
-     * that we followed to get here, and if it's null, it means that we're
-     * at the start.
-     */
-    private boolean buildList(List<List<Vertex>> theList, int index,
-        BuildStep follow) {
-
-        // Each time this method is called, we're examining a new list
-        // from the global list. So, we have to start by getting the list
-        // that contains the set of Vertexes we're considering.
-        List<Vertex> l = theList.get(index);
-
-        try {
-            // we're interested in the case where all indexes are -1...
-            boolean allNegOne = true;
-            // ...and in the case where every entry has a Throwable
-            boolean allXcps = true;
-
-            for (Vertex v : l) {
-                if (v.getIndex() != -1) {
-                    // count an empty list the same as an index of -1...this
-                    // is to patch a bug somewhere in the builder
-                    if (theList.get(v.getIndex()).size() != 0)
-                        allNegOne = false;
-                }
-                else
-                    if (v.getThrowable() == null)
-                        allXcps = false;
-
-                // every entry, regardless of the final use for it, is always
-                // entered as a possible step before we take any actions
-                mStepList.add(new BuildStep(v, BuildStep.POSSIBLE));
-            }
-
-            if (allNegOne) {
-                // There are two cases that we could be looking at here. We
-                // may need to back up, or the build may have succeeded at
-                // this point. This is based on whether or not any
-                // exceptions were found in the list.
-                if (allXcps) {
-                    // we need to go back...see if this is the last one
-                    if (follow == null)
-                        mStepList.add(new BuildStep(null, BuildStep.FAIL));
-                    else
-                        mStepList.add(new BuildStep(follow.getVertex(),
-                                                    BuildStep.BACK));
-
-                    return false;
-                } else {
-                    // we succeeded...now the only question is which is the
-                    // successful step? If there's only one entry without
-                    // a throwable, then that's the successful step. Otherwise,
-                    // we'll have to make some guesses...
-                    List<Vertex> possibles = new ArrayList<Vertex>();
-                    for (Vertex v : l) {
-                        if (v.getThrowable() == null)
-                            possibles.add(v);
-                    }
-
-                    if (possibles.size() == 1) {
-                        // real easy...we've found the final Vertex
-                        mStepList.add(new BuildStep(possibles.get(0),
-                                                    BuildStep.SUCCEED));
-                    } else {
-                        // ok...at this point, there is more than one Cert
-                        // which might be the succeed step...how do we know
-                        // which it is? I'm going to assume that our builder
-                        // algorithm is good enough to know which is the
-                        // correct one, and put it first...but a FIXME goes
-                        // here anyway, and we should be comparing to the
-                        // target/initiator Cert...
-                        mStepList.add(new BuildStep(possibles.get(0),
-                                                    BuildStep.SUCCEED));
-                    }
-
-                    return true;
-                }
-            } else {
-                // There's at least one thing that we can try before we give
-                // up and go back. Run through the list now, and enter a new
-                // BuildStep for each path that we try to follow. If none of
-                // the paths we try produce a successful end, we're going to
-                // have to back out ourselves.
-                boolean success = false;
-
-                for (Vertex v : l) {
-
-                    // Note that we'll only find a SUCCEED case when we're
-                    // looking at the last possible path, so we don't need to
-                    // consider success in the while loop
-
-                    if (v.getIndex() != -1) {
-                        if (theList.get(v.getIndex()).size() != 0) {
-                            // If the entry we're looking at doesn't have an
-                            // index of -1, and doesn't lead to an empty list,
-                            // then it's something we follow!
-                            BuildStep bs = new BuildStep(v, BuildStep.FOLLOW);
-                            mStepList.add(bs);
-                            success = buildList(theList, v.getIndex(), bs);
-                        }
-                    }
-                }
-
-                if (success) {
-                    // We're already finished!
-                    return true;
-                } else {
-                    // We failed, and we've exhausted all the paths that we
-                    // could take. The only choice is to back ourselves out.
-                    if (follow == null)
-                        mStepList.add(new BuildStep(null, BuildStep.FAIL));
-                    else
-                        mStepList.add(new BuildStep(follow.getVertex(),
-                                                    BuildStep.BACK));
-
-                    return false;
-                }
-            }
-        }
-        catch (Exception e) {}
-
-        // we'll never get here, but you know java...
-        return false;
-    }
-
-    /**
-     * Prints out a string representation of this AdjacencyList.
-     *
-     * @return String representation
-     */
-    public String toString() {
-        String out = "[\n";
-
-        int i = 0;
-        for (List<Vertex> l : mOrigList) {
-            out = out + "LinkedList[" + i++ + "]:\n";
-
-            for (Vertex step : l) {
-                try {
-                    out = out + step.toString();
-                    out = out + "\n";
-                }
-                catch (Exception e) { out = out + "No Such Element\n"; }
-            }
-        }
-        out = out + "]\n";
-
-        return out;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/BasicChecker.java b/ojluni/src/main/java/sun/security/provider/certpath/BasicChecker.java
deleted file mode 100755
index dbc4126..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/BasicChecker.java
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * Copyright (c) 2000, 2008, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.math.BigInteger;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Set;
-import java.security.GeneralSecurityException;
-import java.security.KeyFactory;
-import java.security.PublicKey;
-import java.security.SignatureException;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateNotYetValidException;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.CertPathValidatorException.BasicReason;
-import java.security.cert.X509Certificate;
-import java.security.cert.PKIXCertPathChecker;
-import java.security.cert.PKIXReason;
-import java.security.cert.TrustAnchor;
-import java.security.interfaces.DSAParams;
-import java.security.interfaces.DSAPublicKey;
-import java.security.spec.DSAPublicKeySpec;
-import javax.security.auth.x500.X500Principal;
-import sun.security.x509.X500Name;
-import sun.security.util.Debug;
-
-/**
- * BasicChecker is a PKIXCertPathChecker that checks the basic information
- * on a PKIX certificate, namely the signature, timestamp, and subject/issuer
- * name chaining.
- *
- * @since       1.4
- * @author      Yassir Elley
- */
-class BasicChecker extends PKIXCertPathChecker {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-    private final PublicKey trustedPubKey;
-    private final X500Principal caName;
-    private final Date testDate;
-    private final String sigProvider;
-    private final boolean sigOnly;
-    private X500Principal prevSubject;
-    private PublicKey prevPubKey;
-
-    /**
-     * Constructor that initializes the input parameters.
-     *
-     * @param anchor the anchor selected to validate the target certificate
-     * @param testDate the time for which the validity of the certificate
-     * should be determined
-     * @param sigProvider the name of the signature provider
-     * @param sigOnly true if only signature checking is to be done;
-     *        if false, all checks are done
-     */
-    BasicChecker(TrustAnchor anchor, Date testDate, String sigProvider,
-        boolean sigOnly) throws CertPathValidatorException
-    {
-        if (anchor.getTrustedCert() != null) {
-            this.trustedPubKey = anchor.getTrustedCert().getPublicKey();
-            this.caName = anchor.getTrustedCert().getSubjectX500Principal();
-        } else {
-            this.trustedPubKey = anchor.getCAPublicKey();
-            this.caName = anchor.getCA();
-        }
-        this.testDate = testDate;
-        this.sigProvider = sigProvider;
-        this.sigOnly = sigOnly;
-        init(false);
-    }
-
-    /**
-     * Initializes the internal state of the checker from parameters
-     * specified in the constructor.
-     */
-    public void init(boolean forward) throws CertPathValidatorException {
-        if (!forward) {
-            prevPubKey = trustedPubKey;
-            prevSubject = caName;
-        } else {
-            throw new
-                CertPathValidatorException("forward checking not supported");
-        }
-    }
-
-    public boolean isForwardCheckingSupported() {
-        return false;
-    }
-
-    public Set<String> getSupportedExtensions() {
-        return null;
-    }
-
-    /**
-     * Performs the signature, timestamp, and subject/issuer name chaining
-     * checks on the certificate using its internal state. This method does
-     * not remove any critical extensions from the Collection.
-     *
-     * @param cert the Certificate
-     * @param unresolvedCritExts a Collection of the unresolved critical
-     * extensions
-     * @exception CertPathValidatorException Exception thrown if certificate
-     * does not verify.
-     */
-    public void check(Certificate cert, Collection<String> unresolvedCritExts)
-        throws CertPathValidatorException
-    {
-        X509Certificate currCert = (X509Certificate) cert;
-
-        if (!sigOnly) {
-            verifyTimestamp(currCert, testDate);
-            verifyNameChaining(currCert, prevSubject);
-        }
-        verifySignature(currCert, prevPubKey, sigProvider);
-
-        updateState(currCert);
-    }
-
-    /**
-     * Verifies the signature on the certificate using the previous public key
-     * @param cert the Certificate
-     * @param prevPubKey the previous PublicKey
-     * @param sigProvider a String containing the signature provider
-     * @exception CertPathValidatorException Exception thrown if certificate
-     * does not verify.
-     */
-    private void verifySignature(X509Certificate cert, PublicKey prevPubKey,
-        String sigProvider) throws CertPathValidatorException
-    {
-        String msg = "signature";
-        if (debug != null)
-            debug.println("---checking " + msg + "...");
-
-        try {
-            cert.verify(prevPubKey, sigProvider);
-        } catch (SignatureException e) {
-            throw new CertPathValidatorException
-                (msg + " check failed", e, null, -1,
-                 BasicReason.INVALID_SIGNATURE);
-        } catch (Exception e) {
-            throw new CertPathValidatorException(msg + " check failed", e);
-        }
-
-        if (debug != null)
-            debug.println(msg + " verified.");
-    }
-
-    /**
-     * Internal method to verify the timestamp on a certificate
-     */
-    private void verifyTimestamp(X509Certificate cert, Date date)
-        throws CertPathValidatorException
-    {
-        String msg = "timestamp";
-        if (debug != null)
-            debug.println("---checking " + msg + ":" + date.toString() + "...");
-
-        try {
-            cert.checkValidity(date);
-        } catch (CertificateExpiredException e) {
-            throw new CertPathValidatorException
-                (msg + " check failed", e, null, -1, BasicReason.EXPIRED);
-        } catch (CertificateNotYetValidException e) {
-            throw new CertPathValidatorException
-                (msg + " check failed", e, null, -1, BasicReason.NOT_YET_VALID);
-        }
-
-        if (debug != null)
-            debug.println(msg + " verified.");
-    }
-
-    /**
-     * Internal method to check that cert has a valid DN to be next in a chain
-     */
-    private void verifyNameChaining(X509Certificate cert,
-        X500Principal prevSubject) throws CertPathValidatorException
-    {
-        if (prevSubject != null) {
-
-            String msg = "subject/issuer name chaining";
-            if (debug != null)
-                debug.println("---checking " + msg + "...");
-
-            X500Principal currIssuer = cert.getIssuerX500Principal();
-            // reject null or empty issuer DNs
-
-            if (X500Name.asX500Name(currIssuer).isEmpty()) {
-                throw new CertPathValidatorException
-                    (msg + " check failed: " +
-                     "empty/null issuer DN in certificate is invalid", null,
-                     null, -1, PKIXReason.NAME_CHAINING);
-            }
-
-            if (!(currIssuer.equals(prevSubject))) {
-                throw new CertPathValidatorException
-                    (msg + " check failed", null, null, -1,
-                     PKIXReason.NAME_CHAINING);
-            }
-
-            if (debug != null)
-                debug.println(msg + " verified.");
-        }
-    }
-
-    /**
-     * Internal method to manage state information at each iteration
-     */
-    private void updateState(X509Certificate currCert)
-        throws CertPathValidatorException
-    {
-        PublicKey cKey = currCert.getPublicKey();
-        if (debug != null) {
-            debug.println("BasicChecker.updateState issuer: " +
-                currCert.getIssuerX500Principal().toString() + "; subject: " +
-                currCert.getSubjectX500Principal() + "; serial#: " +
-                currCert.getSerialNumber().toString());
-        }
-        if (cKey instanceof DSAPublicKey &&
-            ((DSAPublicKey)cKey).getParams() == null) {
-            //cKey needs to inherit DSA parameters from prev key
-            cKey = makeInheritedParamsKey(cKey, prevPubKey);
-            if (debug != null) debug.println("BasicChecker.updateState Made " +
-                                             "key with inherited params");
-        }
-        prevPubKey = cKey;
-        prevSubject = currCert.getSubjectX500Principal();
-    }
-
-    /**
-     * Internal method to create a new key with inherited key parameters
-     *
-     * @param keyValueKey key from which to obtain key value
-     * @param keyParamsKey key from which to obtain key parameters
-     * @return new public key having value and parameters
-     * @throws CertPathValidatorException if keys are not appropriate types
-     * for this operation
-     */
-    static PublicKey makeInheritedParamsKey(PublicKey keyValueKey,
-        PublicKey keyParamsKey) throws CertPathValidatorException
-    {
-        PublicKey usableKey;
-        if (!(keyValueKey instanceof DSAPublicKey) ||
-            !(keyParamsKey instanceof DSAPublicKey))
-            throw new CertPathValidatorException("Input key is not " +
-                                                 "appropriate type for " +
-                                                 "inheriting parameters");
-        DSAParams params = ((DSAPublicKey)keyParamsKey).getParams();
-        if (params == null)
-            throw new CertPathValidatorException("Key parameters missing");
-        try {
-            BigInteger y = ((DSAPublicKey)keyValueKey).getY();
-            KeyFactory kf = KeyFactory.getInstance("DSA");
-            DSAPublicKeySpec ks = new DSAPublicKeySpec(y,
-                                                       params.getP(),
-                                                       params.getQ(),
-                                                       params.getG());
-            usableKey = kf.generatePublic(ks);
-        } catch (GeneralSecurityException e) {
-            throw new CertPathValidatorException("Unable to generate key with" +
-                                                 " inherited parameters: " +
-                                                 e.getMessage(), e);
-        }
-        return usableKey;
-    }
-
-    /**
-     * return the public key associated with the last certificate processed
-     *
-     * @return PublicKey the last public key processed
-     */
-    PublicKey getPublicKey() {
-        return prevPubKey;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/BuildStep.java b/ojluni/src/main/java/sun/security/provider/certpath/BuildStep.java
deleted file mode 100755
index ef3e021..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/BuildStep.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright (c) 2000, 2005, 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.
- */
-
-package sun.security.provider.certpath;
-
-import sun.security.util.Debug;
-import java.security.cert.X509Certificate;
-
-/**
- * Describes one step of a certification path build, consisting of a
- * <code>Vertex</code> state description, a certificate, a possible throwable,
- * and a result code.
- *
- * @author      Anne Anderson
- * @since       1.4
- * @see sun.security.provider.certpath.Vertex
- */
-public class BuildStep {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-    private Vertex          vertex;
-    private X509Certificate cert;
-    private Throwable       throwable;
-    private int             result;
-
-    /**
-     * result code associated with a certificate that may continue a path from
-     * the current certificate.
-     */
-    public static final int POSSIBLE = 1;
-
-    /**
-     * result code associated with a certificate that was tried, but that
-     * represents an unsuccessful path, so the certificate has been backed out
-     * to allow backtracking to the next possible path.
-     */
-    public static final int BACK = 2;
-
-    /**
-     * result code associated with a certificate that successfully continues the
-     * current path, but does not yet reach the target.
-     */
-    public static final int FOLLOW = 3;
-
-    /**
-     * result code associated with a certificate that represents the end of the
-     * last possible path, where no path successfully reached the target.
-     */
-    public static final int FAIL = 4;
-
-    /**
-     * result code associated with a certificate that represents the end of a
-     * path that successfully reaches the target.
-     */
-    public static final int SUCCEED = 5;
-
-    /**
-     * construct a BuildStep
-     *
-     * @param vtx description of the vertex at this step
-     * @param res result, where result is one of POSSIBLE, BACK,
-     *            FOLLOW, FAIL, SUCCEED
-     */
-    public BuildStep(Vertex vtx, int res) {
-        vertex = vtx;
-        if (vertex != null) {
-            cert = (X509Certificate)vertex.getCertificate();
-            throwable = vertex.getThrowable();
-        }
-        result = res;
-    }
-
-    /**
-     * return vertex description for this build step
-     *
-     * @returns Vertex
-     */
-    public Vertex getVertex() {
-        return vertex;
-    }
-
-    /**
-     * return the certificate associated with this build step
-     *
-     * @returns X509Certificate
-     */
-    public X509Certificate getCertificate() {
-        return cert;
-    }
-
-    /**
-     * return string form of issuer name from certificate associated with this
-     * build step
-     *
-     * @returns String form of issuer name or null, if no certificate.
-     */
-    public String getIssuerName() {
-        return (cert == null ? null : cert.getIssuerX500Principal().toString());
-    }
-
-    /**
-     * return string form of issuer name from certificate associated with this
-     * build step, or a default name if no certificate associated with this
-     * build step, or if issuer name could not be obtained from the certificate.
-     *
-     * @param defaultName name to use as default if unable to return an issuer
-     * name from the certificate, or if no certificate.
-     * @returns String form of issuer name or defaultName, if no certificate or
-     * exception received while trying to extract issuer name from certificate.
-     */
-    public String getIssuerName(String defaultName) {
-        return (cert == null ? defaultName
-                             : cert.getIssuerX500Principal().toString());
-    }
-
-    /**
-     * return string form of subject name from certificate associated with this
-     * build step.
-     *
-     * @returns String form of subject name or null, if no certificate.
-     */
-    public String getSubjectName() {
-        return (cert == null ? null : cert.getSubjectX500Principal().toString());
-    }
-
-    /**
-     * return string form of subject name from certificate associated with this
-     * build step, or a default name if no certificate associated with this
-     * build step, or if subject name could not be obtained from the
-     * certificate.
-     *
-     * @param defaultName name to use as default if unable to return a subject
-     * name from the certificate, or if no certificate.
-     * @returns String form of subject name or defaultName, if no certificate or
-     * if an exception was received while attempting to extract the subject name
-     * from the certificate.
-     */
-    public String getSubjectName(String defaultName) {
-        return (cert == null ? defaultName
-                             : cert.getSubjectX500Principal().toString());
-    }
-
-    /**
-     * return the exception associated with this build step.
-     *
-     * @returns Throwable
-     */
-    public Throwable getThrowable() {
-        return throwable;
-    }
-
-    /**
-     * return the result code associated with this build step.  The result codes
-     * are POSSIBLE, FOLLOW, BACK, FAIL, SUCCEED.
-     *
-     * @returns int result code
-     */
-    public int getResult() {
-        return result;
-    }
-
-    /**
-     * return a string representing the meaning of the result code associated
-     * with this build step.
-     *
-     * @param   res    result code
-     * @returns String string representing meaning of the result code
-     */
-    public String resultToString(int res) {
-        String resultString = "";
-        switch (res) {
-            case BuildStep.POSSIBLE:
-                resultString = "Certificate to be tried.\n";
-                break;
-            case BuildStep.BACK:
-                resultString = "Certificate backed out since path does not "
-                    + "satisfy build requirements.\n";
-                break;
-            case BuildStep.FOLLOW:
-                resultString = "Certificate satisfies conditions.\n";
-                break;
-            case BuildStep.FAIL:
-                resultString = "Certificate backed out since path does not "
-                    + "satisfy conditions.\n";
-                break;
-            case BuildStep.SUCCEED:
-                resultString = "Certificate satisfies conditions.\n";
-                break;
-            default:
-                resultString = "Internal error: Invalid step result value.\n";
-        }
-        return resultString;
-    }
-
-    /**
-     * return a string representation of this build step, showing minimal
-     * detail.
-     *
-     * @returns String
-     */
-    public String toString() {
-        String out = "Internal Error\n";
-        switch (result) {
-        case BACK:
-        case FAIL:
-            out = resultToString(result);
-            out = out + vertex.throwableToString();
-            break;
-        case FOLLOW:
-        case SUCCEED:
-        case POSSIBLE:
-            out = resultToString(result);
-            break;
-        default:
-            out = "Internal Error: Invalid step result\n";
-        }
-        return out;
-    }
-
-    /**
-     * return a string representation of this build step, showing all detail of
-     * the vertex state appropriate to the result of this build step, and the
-     * certificate contents.
-     *
-     * @returns String
-     */
-    public String verboseToString() {
-        String out = resultToString(getResult());
-        switch (result) {
-        case BACK:
-        case FAIL:
-            out = out + vertex.throwableToString();
-            break;
-        case FOLLOW:
-        case SUCCEED:
-            out = out + vertex.moreToString();
-            break;
-        case POSSIBLE:
-            break;
-        default:
-            break;
-        }
-        out = out + "Certificate contains:\n" + vertex.certToString();
-        return out;
-    }
-
-    /**
-     * return a string representation of this build step, including all possible
-     * detail of the vertex state, but not including the certificate contents.
-     *
-     * @returns String
-     */
-    public String fullToString() {
-        String out = resultToString(getResult());
-        out = out + vertex.toString();
-        return out;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/Builder.java b/ojluni/src/main/java/sun/security/provider/certpath/Builder.java
deleted file mode 100755
index 4d46174..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/Builder.java
+++ /dev/null
@@ -1,485 +0,0 @@
-/*
- * Copyright (c) 2000, 2009, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.io.IOException;
-import java.security.AccessController;
-import java.security.GeneralSecurityException;
-import java.security.cert.*;
-import java.util.*;
-
-import javax.security.auth.x500.X500Principal;
-
-import sun.security.action.GetBooleanAction;
-import sun.security.util.Debug;
-import sun.security.x509.GeneralNames;
-import sun.security.x509.GeneralNameInterface;
-import sun.security.x509.GeneralSubtrees;
-import sun.security.x509.NameConstraintsExtension;
-import sun.security.x509.SubjectAlternativeNameExtension;
-import sun.security.x509.X500Name;
-import sun.security.x509.X509CertImpl;
-
-/**
- * Abstract class representing a builder, which is able to retrieve
- * matching certificates and is able to verify a particular certificate.
- *
- * @since       1.4
- * @author      Sean Mullan
- * @author      Yassir Elley
- */
-
-public abstract class Builder {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-    private Set<String> matchingPolicies;
-    final PKIXBuilderParameters buildParams;
-    final X500Principal targetSubjectDN;
-    final Date date;
-    final X509CertSelector targetCertConstraints;
-
-    /**
-     * Flag indicating whether support for the caIssuers field of the
-     * Authority Information Access extension shall be enabled. Currently
-     * disabled by default for compatibility reasons.
-     */
-    final static boolean USE_AIA = AccessController.doPrivileged
-        (new GetBooleanAction("com.sun.security.enableAIAcaIssuers"));
-
-    /**
-     * Initialize the builder with the input parameters.
-     *
-     * @param params the parameter set used to build a certification path
-     */
-    Builder(PKIXBuilderParameters buildParams, X500Principal targetSubjectDN) {
-        this.buildParams = buildParams;
-        this.targetSubjectDN = targetSubjectDN;
-        // Initialize date if not specified
-        Date paramsDate = buildParams.getDate();
-        this.date = paramsDate != null ? paramsDate : new Date();
-        this.targetCertConstraints =
-            (X509CertSelector) buildParams.getTargetCertConstraints();
-    }
-
-    /**
-     * Retrieves certificates from the list of certStores using the buildParams
-     * and the currentState as a filter
-     *
-     * @param currentState the current State
-     * @param certStores list of CertStores
-     */
-    abstract Collection<X509Certificate> getMatchingCerts
-        (State currentState, List<CertStore> certStores)
-        throws CertStoreException, CertificateException, IOException;
-
-    /**
-     * Verifies the cert against the currentState, using the certPathList
-     * generated thus far to help with loop detection
-     *
-     * @param cert the certificate to be verified
-     * @param currentState the current state against which the cert is verified
-     * @param certPathList the certPathList generated thus far
-     */
-    abstract void verifyCert(X509Certificate cert, State currentState,
-        List<X509Certificate> certPathList) throws GeneralSecurityException;
-
-    /**
-     * Verifies whether the input certificate completes the path.
-     * When building forward, a trust anchor will complete the path.
-     * When building reverse, the target certificate will complete the path.
-     *
-     * @param cert the certificate to test
-     * @return a boolean value indicating whether the cert completes the path.
-     */
-    abstract boolean isPathCompleted(X509Certificate cert);
-
-    /**
-     * Adds the certificate to the certPathList
-     *
-     * @param cert the certificate to be added
-     * @param certPathList the certification path list
-     */
-    abstract void addCertToPath(X509Certificate cert,
-        LinkedList<X509Certificate> certPathList);
-
-    /**
-     * Removes final certificate from the certPathList
-     *
-     * @param certPathList the certification path list
-     */
-    abstract void removeFinalCertFromPath
-        (LinkedList<X509Certificate> certPathList);
-
-    /**
-     * get distance of one GeneralName from another
-     *
-     * @param base GeneralName at base of subtree
-     * @param test GeneralName to be tested against base
-     * @param incomparable the value to return if the names are
-     *  incomparable
-     * @return distance of test name from base, where 0
-     *         means exact match, 1 means test is an immediate
-     *         child of base, 2 means test is a grandchild, etc.
-     *         -1 means test is a parent of base, -2 means test
-     *         is a grandparent, etc.
-     */
-    static int distance(GeneralNameInterface base,
-        GeneralNameInterface test, int incomparable) {
-        switch (base.constrains(test)) {
-        case GeneralNameInterface.NAME_DIFF_TYPE:
-            if (debug != null) {
-                debug.println("Builder.distance(): Names are different types");
-            }
-        case GeneralNameInterface.NAME_SAME_TYPE:
-            if (debug != null) {
-                debug.println("Builder.distance(): Names are same type but " +
-                    "in different subtrees");
-            }
-            return incomparable;
-        case GeneralNameInterface.NAME_MATCH:
-            return 0;
-        case GeneralNameInterface.NAME_WIDENS:
-            break;
-        case GeneralNameInterface.NAME_NARROWS:
-            break;
-        default: // should never occur
-            return incomparable;
-        }
-
-        /* names are in same subtree */
-        return test.subtreeDepth() - base.subtreeDepth();
-    }
-
-    /**
-     * get hop distance of one GeneralName from another in links where
-     * the names need not have an ancestor/descendant relationship.
-     * For example, the hop distance from ou=D,ou=C,o=B,c=US to
-     * ou=F,ou=E,ou=C,o=B,c=US is 3: D->C, C->E, E->F.  The hop distance
-     * from ou=C,o=B,c=US to ou=D,ou=C,o=B,c=US is -1: C->D
-     *
-     * @param base GeneralName
-     * @param test GeneralName to be tested against base
-     * @param incomparable the value to return if the names are
-     *  incomparable
-     * @return distance of test name from base measured in hops in the
-     *         namespace hierarchy, where 0 means exact match.  Result
-     *         is positive if path is some number of up hops followed by
-     *         some number of down hops; result is negative if path is
-     *         some number of down hops.
-     */
-    static int hops(GeneralNameInterface base, GeneralNameInterface test,
-        int incomparable) {
-        int baseRtest = base.constrains(test);
-        switch (baseRtest) {
-        case GeneralNameInterface.NAME_DIFF_TYPE:
-            if (debug != null) {
-                debug.println("Builder.hops(): Names are different types");
-            }
-            return incomparable;
-        case GeneralNameInterface.NAME_SAME_TYPE:
-            /* base and test are in different subtrees */
-            break;
-        case GeneralNameInterface.NAME_MATCH:
-            /* base matches test */
-            return 0;
-        case GeneralNameInterface.NAME_WIDENS:
-            /* base is ancestor of test */
-            return (test.subtreeDepth()-base.subtreeDepth());
-        case GeneralNameInterface.NAME_NARROWS:
-            /* base is descendant of test */
-            return (test.subtreeDepth()-base.subtreeDepth());
-        default: // should never occur
-            return incomparable;
-        }
-
-        /* names are in different subtrees */
-        if (base.getType() != GeneralNameInterface.NAME_DIRECTORY) {
-            if (debug != null) {
-                debug.println("Builder.hops(): hopDistance not implemented " +
-                    "for this name type");
-            }
-            return incomparable;
-        }
-        X500Name baseName = (X500Name)base;
-        X500Name testName = (X500Name)test;
-        X500Name commonName = baseName.commonAncestor(testName);
-        if (commonName == null) {
-            if (debug != null) {
-                debug.println("Builder.hops(): Names are in different " +
-                    "namespaces");
-            }
-            return incomparable;
-        } else {
-            int commonDistance = commonName.subtreeDepth();
-            int baseDistance = baseName.subtreeDepth();
-            int testDistance = testName.subtreeDepth();
-            return (baseDistance + testDistance - (2 * commonDistance));
-        }
-    }
-
-    /**
-     * Determine how close a given certificate gets you toward
-     * a given target.
-     *
-     * @param constraints Current NameConstraints; if null,
-     *        then caller must verify NameConstraints
-     *        independently, realizing that this certificate
-     *        may not actually lead to the target at all.
-     * @param cert Candidate certificate for chain
-     * @param target GeneralNameInterface name of target
-     * @return distance from this certificate to target:
-     * <ul>
-     * <li>-1 means certificate could be CA for target, but
-     *     there are no NameConstraints limiting how close
-     * <li> 0 means certificate subject or subjectAltName
-     *      matches target
-     * <li> 1 means certificate is permitted to be CA for
-     *      target.
-     * <li> 2 means certificate is permitted to be CA for
-     *      parent of target.
-     * <li>&gt;0 in general, means certificate is permitted
-     *     to be a CA for this distance higher in the naming
-     *     hierarchy than the target, plus 1.
-     * </ul>
-     * <p>Note that the subject and/or subjectAltName of the
-     * candidate cert does not have to be an ancestor of the
-     * target in order to be a CA that can issue a certificate to
-     * the target. In these cases, the target distance is calculated
-     * by inspecting the NameConstraints extension in the candidate
-     * certificate. For example, suppose the target is an X.500 DN with
-     * a value of "CN=mullan,OU=ireland,O=sun,C=us" and the
-     * NameConstraints extension in the candidate certificate
-     * includes a permitted component of "O=sun,C=us", which implies
-     * that the candidate certificate is allowed to issue certs in
-     * the "O=sun,C=us" namespace. The target distance is 3
-     * ((distance of permitted NC from target) + 1).
-     * The (+1) is added to distinguish the result from the case
-     * which returns (0).
-     * @throws IOException if certificate does not get closer
-     */
-    static int targetDistance(NameConstraintsExtension constraints,
-            X509Certificate cert, GeneralNameInterface target)
-            throws IOException {
-
-        /* ensure that certificate satisfies existing name constraints */
-        if (constraints != null && !constraints.verify(cert)) {
-            throw new IOException("certificate does not satisfy existing name "
-                + "constraints");
-        }
-
-        X509CertImpl certImpl;
-        try {
-            certImpl = X509CertImpl.toImpl(cert);
-        } catch (CertificateException e) {
-            throw (IOException)new IOException("Invalid certificate").initCause(e);
-        }
-        /* see if certificate subject matches target */
-        X500Name subject = X500Name.asX500Name(certImpl.getSubjectX500Principal());
-        if (subject.equals(target)) {
-            /* match! */
-            return 0;
-        }
-
-        SubjectAlternativeNameExtension altNameExt =
-            certImpl.getSubjectAlternativeNameExtension();
-        if (altNameExt != null) {
-            GeneralNames altNames =
-                (GeneralNames)altNameExt.get(altNameExt.SUBJECT_NAME);
-            /* see if any alternative name matches target */
-            if (altNames != null) {
-                for (int j = 0, n = altNames.size(); j < n; j++) {
-                    GeneralNameInterface altName = altNames.get(j).getName();
-                    if (altName.equals(target)) {
-                        return 0;
-                    }
-                }
-            }
-        }
-
-
-        /* no exact match; see if certificate can get us to target */
-
-        /* first, get NameConstraints out of certificate */
-        NameConstraintsExtension ncExt = certImpl.getNameConstraintsExtension();
-        if (ncExt == null) {
-            return -1;
-        }
-
-        /* merge certificate's NameConstraints with current NameConstraints */
-        if (constraints != null) {
-            constraints.merge(ncExt);
-        } else {
-            // Make sure we do a clone here, because we're probably
-            // going to modify this object later and we don't want to
-            // be sharing it with a Certificate object!
-            constraints = (NameConstraintsExtension) ncExt.clone();
-        }
-
-        if (debug != null) {
-            debug.println("Builder.targetDistance() merged constraints: "
-                + String.valueOf(constraints));
-        }
-        /* reduce permitted by excluded */
-        GeneralSubtrees permitted = (GeneralSubtrees)
-            constraints.get(constraints.PERMITTED_SUBTREES);
-        GeneralSubtrees excluded = (GeneralSubtrees)
-            constraints.get(constraints.EXCLUDED_SUBTREES);
-        if (permitted != null) {
-            permitted.reduce(excluded);
-        }
-        if (debug != null) {
-            debug.println("Builder.targetDistance() reduced constraints: "
-                + permitted);
-        }
-        /* see if new merged constraints allow target */
-        if (!constraints.verify(target)) {
-            throw new IOException("New certificate not allowed to sign "
-                + "certificate for target");
-        }
-        /* find distance to target, if any, in permitted */
-        if (permitted == null) {
-            /* certificate is unconstrained; could sign for anything */
-            return -1;
-        }
-        for (int i = 0, n = permitted.size(); i < n; i++) {
-            GeneralNameInterface perName = permitted.get(i).getName().getName();
-            int distance = distance(perName, target, -1);
-            if (distance >= 0) {
-                return (distance + 1);
-            }
-        }
-        /* no matching type in permitted; cert holder could certify target */
-        return -1;
-    }
-
-    /**
-     * This method can be used as an optimization to filter out
-     * certificates that do not have policies which are valid.
-     * It returns the set of policies (String OIDs) that should exist in
-     * the certificate policies extension of the certificate that is
-     * needed by the builder. The logic applied is as follows:
-     * <p>
-     *   1) If some initial policies have been set *and* policy mappings are
-     *   inhibited, then acceptable certificates are those that include
-     *   the ANY_POLICY OID or with policies that intersect with the
-     *   initial policies.
-     *   2) If no initial policies have been set *or* policy mappings are
-     *   not inhibited then we don't have much to work with. All we know is
-     *   that a certificate must have *some* policy because if it didn't
-     *   have any policy then the policy tree would become null (and validation
-     *   would fail).
-     *
-     * @return the Set of policies any of which must exist in a
-     * cert's certificate policies extension in order for a cert to be selected.
-     */
-    Set<String> getMatchingPolicies() {
-        if (matchingPolicies != null) {
-            Set<String> initialPolicies = buildParams.getInitialPolicies();
-            if ((!initialPolicies.isEmpty()) &&
-                (!initialPolicies.contains(PolicyChecker.ANY_POLICY)) &&
-                (buildParams.isPolicyMappingInhibited()))
-            {
-                initialPolicies.add(PolicyChecker.ANY_POLICY);
-                matchingPolicies = initialPolicies;
-            } else {
-                // we just return an empty set to make sure that there is
-                // at least a certificate policies extension in the cert
-                matchingPolicies = Collections.<String>emptySet();
-            }
-        }
-        return matchingPolicies;
-    }
-
-    /**
-     * Search the specified CertStores and add all certificates matching
-     * selector to resultCerts. Self-signed certs are not useful here
-     * and therefore ignored.
-     *
-     * If the targetCert criterion of the selector is set, only that cert
-     * is examined and the CertStores are not searched.
-     *
-     * If checkAll is true, all CertStores are searched for matching certs.
-     * If false, the method returns as soon as the first CertStore returns
-     * a matching cert(s).
-     *
-     * Returns true iff resultCerts changed (a cert was added to the collection)
-     */
-    boolean addMatchingCerts(X509CertSelector selector,
-            Collection<CertStore> certStores,
-            Collection<X509Certificate> resultCerts, boolean checkAll) {
-        X509Certificate targetCert = selector.getCertificate();
-        if (targetCert != null) {
-            // no need to search CertStores
-            if (selector.match(targetCert) && !X509CertImpl.isSelfSigned
-                (targetCert, buildParams.getSigProvider())) {
-                if (debug != null) {
-                    debug.println("Builder.addMatchingCerts: adding target cert");
-                }
-                return resultCerts.add(targetCert);
-            }
-            return false;
-        }
-        boolean add = false;
-        for (CertStore store : certStores) {
-            try {
-                Collection<? extends Certificate> certs =
-                                        store.getCertificates(selector);
-                for (Certificate cert : certs) {
-                    if (!X509CertImpl.isSelfSigned
-                        ((X509Certificate)cert, buildParams.getSigProvider())) {
-                        if (resultCerts.add((X509Certificate)cert)) {
-                            add = true;
-                        }
-                    }
-                }
-                if (!checkAll && add) {
-                    return true;
-                }
-            } catch (CertStoreException cse) {
-                // if getCertificates throws a CertStoreException, we ignore
-                // it and move on to the next CertStore
-                if (debug != null) {
-                    debug.println("Builder.addMatchingCerts, non-fatal " +
-                        "exception retrieving certs: " + cse);
-                    cse.printStackTrace();
-                }
-            }
-        }
-        return add;
-    }
-
-    /**
-     * Returns true if CertStore is local. Currently, returns true if
-     * type is Collection or if it has been initialized with
-     * CollectionCertStoreParameters. A new API method should be added
-     * to CertStore that returns local or remote.
-     */
-    static boolean isLocalCertStore(CertStore certStore) {
-        return (certStore.getType().equals("Collection") ||
-                certStore.getCertStoreParameters() instanceof
-                CollectionCertStoreParameters);
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/CertId.java b/ojluni/src/main/java/sun/security/provider/certpath/CertId.java
deleted file mode 100755
index 731111e..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/CertId.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.X509Certificate;
-import java.util.Arrays;
-import sun.misc.HexDumpEncoder;
-import sun.security.x509.*;
-import sun.security.util.*;
-
-/**
- * This class corresponds to the CertId field in OCSP Request
- * and the OCSP Response. The ASN.1 definition for CertID is defined
- * in RFC 2560 as:
- * <pre>
- *
- * CertID          ::=     SEQUENCE {
- *      hashAlgorithm       AlgorithmIdentifier,
- *      issuerNameHash      OCTET STRING, -- Hash of Issuer's DN
- *      issuerKeyHash       OCTET STRING, -- Hash of Issuers public key
- *      serialNumber        CertificateSerialNumber
- *      }
- *
- * </pre>
- *
- * @author      Ram Marti
- */
-
-public class CertId {
-
-    private static final boolean debug = false;
-    private static final AlgorithmId SHA1_ALGID
-        = new AlgorithmId(AlgorithmId.SHA_oid);
-    private final AlgorithmId hashAlgId;
-    private final byte[] issuerNameHash;
-    private final byte[] issuerKeyHash;
-    private final SerialNumber certSerialNumber;
-    private int myhash = -1; // hashcode for this CertId
-
-    /**
-     * Creates a CertId. The hash algorithm used is SHA-1.
-     */
-    public CertId(X509Certificate issuerCert, SerialNumber serialNumber)
-        throws IOException {
-
-        // compute issuerNameHash
-        MessageDigest md = null;
-        try {
-            md = MessageDigest.getInstance("SHA1");
-        } catch (NoSuchAlgorithmException nsae) {
-            throw new IOException("Unable to create CertId", nsae);
-        }
-        hashAlgId = SHA1_ALGID;
-        md.update(issuerCert.getSubjectX500Principal().getEncoded());
-        issuerNameHash = md.digest();
-
-        // compute issuerKeyHash (remove the tag and length)
-        byte[] pubKey = issuerCert.getPublicKey().getEncoded();
-        DerValue val = new DerValue(pubKey);
-        DerValue[] seq = new DerValue[2];
-        seq[0] = val.data.getDerValue(); // AlgorithmID
-        seq[1] = val.data.getDerValue(); // Key
-        byte[] keyBytes = seq[1].getBitString();
-        md.update(keyBytes);
-        issuerKeyHash = md.digest();
-        certSerialNumber = serialNumber;
-
-        if (debug) {
-            HexDumpEncoder encoder = new HexDumpEncoder();
-            System.out.println("Issuer Certificate is " + issuerCert);
-            System.out.println("issuerNameHash is " +
-                encoder.encodeBuffer(issuerNameHash));
-            System.out.println("issuerKeyHash is " +
-                encoder.encodeBuffer(issuerKeyHash));
-            System.out.println("SerialNumber is " + serialNumber.getNumber());
-        }
-    }
-
-    /**
-     * Creates a CertId from its ASN.1 DER encoding.
-     */
-    public CertId(DerInputStream derIn) throws IOException {
-        hashAlgId = AlgorithmId.parse(derIn.getDerValue());
-        issuerNameHash = derIn.getOctetString();
-        issuerKeyHash = derIn.getOctetString();
-        certSerialNumber = new SerialNumber(derIn);
-    }
-
-    /**
-     * Return the hash algorithm identifier.
-     */
-    public AlgorithmId getHashAlgorithm() {
-        return hashAlgId;
-    }
-
-    /**
-     * Return the hash value for the issuer name.
-     */
-    public byte[] getIssuerNameHash() {
-        return issuerNameHash;
-    }
-
-    /**
-     * Return the hash value for the issuer key.
-     */
-    public byte[] getIssuerKeyHash() {
-        return issuerKeyHash;
-    }
-
-    /**
-     * Return the serial number.
-     */
-    public BigInteger getSerialNumber() {
-        return certSerialNumber.getNumber();
-    }
-
-    /**
-     * Encode the CertId using ASN.1 DER.
-     * The hash algorithm used is SHA-1.
-     */
-    public void encode(DerOutputStream out) throws IOException {
-
-        DerOutputStream tmp = new DerOutputStream();
-        hashAlgId.encode(tmp);
-        tmp.putOctetString(issuerNameHash);
-        tmp.putOctetString(issuerKeyHash);
-        certSerialNumber.encode(tmp);
-        out.write(DerValue.tag_Sequence, tmp);
-
-        if (debug) {
-            HexDumpEncoder encoder = new HexDumpEncoder();
-            System.out.println("Encoded certId is " +
-                encoder.encode(out.toByteArray()));
-        }
-    }
-
-   /**
-     * Returns a hashcode value for this CertId.
-     *
-     * @return the hashcode value.
-     */
-    @Override public int hashCode() {
-        if (myhash == -1) {
-            myhash = hashAlgId.hashCode();
-            for (int i = 0; i < issuerNameHash.length; i++) {
-                myhash += issuerNameHash[i] * i;
-            }
-            for (int i = 0; i < issuerKeyHash.length; i++) {
-                myhash += issuerKeyHash[i] * i;
-            }
-            myhash += certSerialNumber.getNumber().hashCode();
-        }
-        return myhash;
-    }
-
-    /**
-     * Compares this CertId for equality with the specified
-     * object. Two CertId objects are considered equal if their hash algorithms,
-     * their issuer name and issuer key hash values and their serial numbers
-     * are equal.
-     *
-     * @param other the object to test for equality with this object.
-     * @return true if the objects are considered equal, false otherwise.
-     */
-    @Override public boolean equals(Object other) {
-        if (this == other) {
-            return true;
-        }
-        if (other == null || (!(other instanceof CertId))) {
-            return false;
-        }
-
-        CertId that = (CertId) other;
-        if (hashAlgId.equals(that.getHashAlgorithm()) &&
-            Arrays.equals(issuerNameHash, that.getIssuerNameHash()) &&
-            Arrays.equals(issuerKeyHash, that.getIssuerKeyHash()) &&
-            certSerialNumber.getNumber().equals(that.getSerialNumber())) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Create a string representation of the CertId.
-     */
-    @Override public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append("CertId \n");
-        sb.append("Algorithm: " + hashAlgId.toString() +"\n");
-        sb.append("issuerNameHash \n");
-        HexDumpEncoder encoder = new HexDumpEncoder();
-        sb.append(encoder.encode(issuerNameHash));
-        sb.append("\nissuerKeyHash: \n");
-        sb.append(encoder.encode(issuerKeyHash));
-        sb.append("\n" +  certSerialNumber.toString());
-        return sb.toString();
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/CertStoreHelper.java b/ojluni/src/main/java/sun/security/provider/certpath/CertStoreHelper.java
deleted file mode 100755
index 891919a..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/CertStoreHelper.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.net.URI;
-import java.util.Collection;
-import java.security.NoSuchAlgorithmException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.cert.CertStore;
-import java.security.cert.X509CertSelector;
-import java.security.cert.X509CRLSelector;
-import javax.security.auth.x500.X500Principal;
-import java.io.IOException;
-
-/**
- * Helper used by URICertStore when delegating to another CertStore to
- * fetch certs and CRLs.
- */
-
-public interface CertStoreHelper {
-
-    /**
-     * Returns a CertStore using the given URI as parameters.
-     */
-    CertStore getCertStore(URI uri)
-        throws NoSuchAlgorithmException, InvalidAlgorithmParameterException;
-
-    /**
-     * Wraps an existing X509CertSelector when needing to avoid DN matching
-     * issues.
-     */
-    X509CertSelector wrap(X509CertSelector selector,
-                          X500Principal certSubject,
-                          String dn)
-        throws IOException;
-
-    /**
-     * Wraps an existing X509CRLSelector when needing to avoid DN matching
-     * issues.
-     */
-    X509CRLSelector wrap(X509CRLSelector selector,
-                         Collection<X500Principal> certIssuers,
-                         String dn)
-        throws IOException;
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/CollectionCertStore.java b/ojluni/src/main/java/sun/security/provider/certpath/CollectionCertStore.java
deleted file mode 100755
index 54c47c8..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/CollectionCertStore.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.cert.Certificate;
-import java.security.cert.CRL;
-import java.util.Collection;
-import java.util.ConcurrentModificationException;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.security.cert.CertSelector;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.security.cert.CertStoreParameters;
-import java.security.cert.CollectionCertStoreParameters;
-import java.security.cert.CRLSelector;
-import java.security.cert.CertStoreSpi;
-
-/**
- * A <code>CertStore</code> that retrieves <code>Certificates</code> and
- * <code>CRL</code>s from a <code>Collection</code>.
- * <p>
- * Before calling the {@link #engineGetCertificates engineGetCertificates} or
- * {@link #engineGetCRLs engineGetCRLs} methods, the
- * {@link #CollectionCertStore(CertStoreParameters)
- * CollectionCertStore(CertStoreParameters)} constructor is called to
- * create the <code>CertStore</code> and establish the
- * <code>Collection</code> from which <code>Certificate</code>s and
- * <code>CRL</code>s will be retrieved. If the specified
- * <code>Collection</code> contains an object that is not a
- * <code>Certificate</code> or <code>CRL</code>, that object will be
- * ignored.
- * <p>
- * <b>Concurrent Access</b>
- * <p>
- * As described in the javadoc for <code>CertStoreSpi</code>, the
- * <code>engineGetCertificates</code> and <code>engineGetCRLs</code> methods
- * must be thread-safe. That is, multiple threads may concurrently
- * invoke these methods on a single <code>CollectionCertStore</code>
- * object (or more than one) with no ill effects.
- * <p>
- * This is achieved by requiring that the <code>Collection</code> passed to
- * the {@link #CollectionCertStore(CertStoreParameters)
- * CollectionCertStore(CertStoreParameters)} constructor (via the
- * <code>CollectionCertStoreParameters</code> object) must have fail-fast
- * iterators. Simultaneous modifications to the <code>Collection</code> can thus be
- * detected and certificate or CRL retrieval can be retried. The fact that
- * <code>Certificate</code>s and <code>CRL</code>s must be thread-safe is also
- * essential.
- *
- * @see java.security.cert.CertStore
- *
- * @since       1.4
- * @author      Steve Hanna
- */
-public class CollectionCertStore extends CertStoreSpi {
-
-    private Collection<?> coll;
-
-    /**
-     * Creates a <code>CertStore</code> with the specified parameters.
-     * For this class, the parameters object must be an instance of
-     * <code>CollectionCertStoreParameters</code>. The <code>Collection</code>
-     * included in the <code>CollectionCertStoreParameters</code> object
-     * must be thread-safe.
-     *
-     * @param params the algorithm parameters
-     * @exception InvalidAlgorithmParameterException if params is not an
-     *   instance of <code>CollectionCertStoreParameters</code>
-     */
-    public CollectionCertStore(CertStoreParameters params)
-        throws InvalidAlgorithmParameterException
-    {
-        super(params);
-        if (!(params instanceof CollectionCertStoreParameters))
-            throw new InvalidAlgorithmParameterException(
-                "parameters must be CollectionCertStoreParameters");
-        coll = ((CollectionCertStoreParameters) params).getCollection();
-    }
-
-    /**
-     * Returns a <code>Collection</code> of <code>Certificate</code>s that
-     * match the specified selector. If no <code>Certificate</code>s
-     * match the selector, an empty <code>Collection</code> will be returned.
-     *
-     * @param selector a <code>CertSelector</code> used to select which
-     *  <code>Certificate</code>s should be returned. Specify <code>null</code>
-     *  to return all <code>Certificate</code>s.
-     * @return a <code>Collection</code> of <code>Certificate</code>s that
-     *         match the specified selector
-     * @throws CertStoreException if an exception occurs
-     */
-    public Collection<Certificate> engineGetCertificates
-            (CertSelector selector) throws CertStoreException {
-        if (coll == null) {
-            throw new CertStoreException("Collection is null");
-        }
-        // Tolerate a few ConcurrentModificationExceptions
-        for (int c = 0; c < 10; c++) {
-            try {
-                HashSet<Certificate> result = new HashSet<Certificate>();
-                Iterator<?> i = coll.iterator();
-                if (selector != null) {
-                    while (i.hasNext()) {
-                        Object o = i.next();
-                        if ((o instanceof Certificate) &&
-                            selector.match((Certificate) o))
-                            result.add((Certificate)o);
-                    }
-                } else {
-                    while (i.hasNext()) {
-                        Object o = i.next();
-                        if (o instanceof Certificate)
-                            result.add((Certificate)o);
-                    }
-                }
-                return(result);
-            } catch (ConcurrentModificationException e) { }
-        }
-        throw new ConcurrentModificationException("Too many "
-            + "ConcurrentModificationExceptions");
-    }
-
-    /**
-     * Returns a <code>Collection</code> of <code>CRL</code>s that
-     * match the specified selector. If no <code>CRL</code>s
-     * match the selector, an empty <code>Collection</code> will be returned.
-     *
-     * @param selector a <code>CRLSelector</code> used to select which
-     *  <code>CRL</code>s should be returned. Specify <code>null</code>
-     *  to return all <code>CRL</code>s.
-     * @return a <code>Collection</code> of <code>CRL</code>s that
-     *         match the specified selector
-     * @throws CertStoreException if an exception occurs
-     */
-    public Collection<CRL> engineGetCRLs(CRLSelector selector)
-        throws CertStoreException
-    {
-        if (coll == null)
-            throw new CertStoreException("Collection is null");
-
-        // Tolerate a few ConcurrentModificationExceptions
-        for (int c = 0; c < 10; c++) {
-            try {
-                HashSet<CRL> result = new HashSet<CRL>();
-                Iterator<?> i = coll.iterator();
-                if (selector != null) {
-                    while (i.hasNext()) {
-                        Object o = i.next();
-                        if ((o instanceof CRL) && selector.match((CRL) o))
-                            result.add((CRL)o);
-                    }
-                } else {
-                    while (i.hasNext()) {
-                        Object o = i.next();
-                        if (o instanceof CRL)
-                            result.add((CRL)o);
-                    }
-                }
-                return(result);
-            } catch (ConcurrentModificationException e) { }
-        }
-        throw new ConcurrentModificationException("Too many "
-            + "ConcurrentModificationExceptions");
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/ConstraintsChecker.java b/ojluni/src/main/java/sun/security/provider/certpath/ConstraintsChecker.java
deleted file mode 100755
index d393ac1..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/ConstraintsChecker.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * Copyright (c) 2000, 2008, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Set;
-import java.util.HashSet;
-import java.io.IOException;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateException;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.X509Certificate;
-import java.security.cert.PKIXCertPathChecker;
-import java.security.cert.PKIXReason;
-import sun.security.util.Debug;
-import sun.security.x509.PKIXExtensions;
-import sun.security.x509.NameConstraintsExtension;
-import sun.security.x509.X509CertImpl;
-
-/**
- * ConstraintsChecker is a <code>PKIXCertPathChecker</code> that checks
- * constraints information on a PKIX certificate, namely basic constraints
- * and name constraints.
- *
- * @since       1.4
- * @author      Yassir Elley
- */
-class ConstraintsChecker extends PKIXCertPathChecker {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-    /* length of cert path */
-    private final int certPathLength;
-    /* current maximum path length (as defined in PKIX) */
-    private int maxPathLength;
-    /* current index of cert */
-    private int i;
-    private NameConstraintsExtension prevNC;
-
-    private Set<String> supportedExts;
-
-    /**
-     * Creates a ConstraintsChecker.
-     *
-     * @param certPathLength the length of the certification path
-     * @throws CertPathValidatorException if the checker cannot be initialized
-     */
-    ConstraintsChecker(int certPathLength) throws CertPathValidatorException {
-        this.certPathLength = certPathLength;
-        init(false);
-    }
-
-    public void init(boolean forward) throws CertPathValidatorException {
-        if (!forward) {
-            i = 0;
-            maxPathLength = certPathLength;
-            prevNC = null;
-        } else {
-            throw new CertPathValidatorException
-                ("forward checking not supported");
-        }
-    }
-
-    public boolean isForwardCheckingSupported() {
-        return false;
-    }
-
-    public Set<String> getSupportedExtensions() {
-        if (supportedExts == null) {
-            supportedExts = new HashSet<String>();
-            supportedExts.add(PKIXExtensions.BasicConstraints_Id.toString());
-            supportedExts.add(PKIXExtensions.NameConstraints_Id.toString());
-            supportedExts = Collections.unmodifiableSet(supportedExts);
-        }
-        return supportedExts;
-    }
-
-    /**
-     * Performs the basic constraints and name constraints
-     * checks on the certificate using its internal state.
-     *
-     * @param cert the <code>Certificate</code> to be checked
-     * @param unresCritExts a <code>Collection</code> of OID strings
-     * representing the current set of unresolved critical extensions
-     * @throws CertPathValidatorException if the specified certificate
-     * does not pass the check
-     */
-    public void check(Certificate cert, Collection<String> unresCritExts)
-        throws CertPathValidatorException
-    {
-        X509Certificate currCert = (X509Certificate) cert;
-
-        i++;
-        // MUST run NC check second, since it depends on BC check to
-        // update remainingCerts
-        checkBasicConstraints(currCert);
-        verifyNameConstraints(currCert);
-
-        if (unresCritExts != null && !unresCritExts.isEmpty()) {
-            unresCritExts.remove(PKIXExtensions.BasicConstraints_Id.toString());
-            unresCritExts.remove(PKIXExtensions.NameConstraints_Id.toString());
-        }
-    }
-
-    /**
-     * Internal method to check the name constraints against a cert
-     */
-    private void verifyNameConstraints(X509Certificate currCert)
-        throws CertPathValidatorException
-    {
-        String msg = "name constraints";
-        if (debug != null) {
-            debug.println("---checking " + msg + "...");
-        }
-
-        // check name constraints only if there is a previous name constraint
-        // and either the currCert is the final cert or the currCert is not
-        // self-issued
-        if (prevNC != null && ((i == certPathLength) ||
-                !X509CertImpl.isSelfIssued(currCert))) {
-            if (debug != null) {
-                debug.println("prevNC = " + prevNC);
-                debug.println("currDN = " + currCert.getSubjectX500Principal());
-            }
-
-            try {
-                if (!prevNC.verify(currCert)) {
-                    throw new CertPathValidatorException(msg + " check failed",
-                        null, null, -1, PKIXReason.INVALID_NAME);
-                }
-            } catch (IOException ioe) {
-                throw new CertPathValidatorException(ioe);
-            }
-        }
-
-        // merge name constraints regardless of whether cert is self-issued
-        prevNC = mergeNameConstraints(currCert, prevNC);
-
-        if (debug != null)
-            debug.println(msg + " verified.");
-    }
-
-    /**
-     * Helper to fold sets of name constraints together
-     */
-    static NameConstraintsExtension
-        mergeNameConstraints(X509Certificate currCert,
-            NameConstraintsExtension prevNC) throws CertPathValidatorException
-    {
-        X509CertImpl currCertImpl;
-        try {
-            currCertImpl = X509CertImpl.toImpl(currCert);
-        } catch (CertificateException ce) {
-            throw new CertPathValidatorException(ce);
-        }
-
-        NameConstraintsExtension newConstraints =
-            currCertImpl.getNameConstraintsExtension();
-
-        if (debug != null) {
-            debug.println("prevNC = " + prevNC);
-            debug.println("newNC = " + String.valueOf(newConstraints));
-        }
-
-        // if there are no previous name constraints, we just return the
-        // new name constraints.
-        if (prevNC == null) {
-            if (debug != null) {
-                debug.println("mergedNC = " + String.valueOf(newConstraints));
-            }
-            if (newConstraints == null) {
-                return newConstraints;
-            } else {
-                // Make sure we do a clone here, because we're probably
-                // going to modify this object later and we don't want to
-                // be sharing it with a Certificate object!
-                return (NameConstraintsExtension) newConstraints.clone();
-            }
-        } else {
-            try {
-                // after merge, prevNC should contain the merged constraints
-                prevNC.merge(newConstraints);
-            } catch (IOException ioe) {
-                throw new CertPathValidatorException(ioe);
-            }
-            if (debug != null) {
-                debug.println("mergedNC = " + prevNC);
-            }
-            return prevNC;
-        }
-    }
-
-    /**
-     * Internal method to check that a given cert meets basic constraints.
-     */
-    private void checkBasicConstraints(X509Certificate currCert)
-        throws CertPathValidatorException
-    {
-        String msg = "basic constraints";
-        if (debug != null) {
-            debug.println("---checking " + msg + "...");
-            debug.println("i = " + i);
-            debug.println("maxPathLength = " + maxPathLength);
-        }
-
-        /* check if intermediate cert */
-        if (i < certPathLength) {
-            // RFC5280: If certificate i is a version 3 certificate, verify
-            // that the basicConstraints extension is present and that cA is
-            // set to TRUE.  (If certificate i is a version 1 or version 2
-            // certificate, then the application MUST either verify that
-            // certificate i is a CA certificate through out-of-band means
-            // or reject the certificate.  Conforming implementations may
-            // choose to reject all version 1 and version 2 intermediate
-            // certificates.)
-            //
-            // We choose to reject all version 1 and version 2 intermediate
-            // certificates except that it is self issued by the trust
-            // anchor in order to support key rollover or changes in
-            // certificate policies.
-            int pathLenConstraint = -1;
-            if (currCert.getVersion() < 3) {    // version 1 or version 2
-                if (i == 1) {                   // issued by a trust anchor
-                    if (X509CertImpl.isSelfIssued(currCert)) {
-                        pathLenConstraint = Integer.MAX_VALUE;
-                    }
-                }
-            } else {
-                pathLenConstraint = currCert.getBasicConstraints();
-            }
-
-            if (pathLenConstraint == -1) {
-                throw new CertPathValidatorException
-                    (msg + " check failed: this is not a CA certificate",
-                     null, null, -1, PKIXReason.NOT_CA_CERT);
-            }
-
-            if (!X509CertImpl.isSelfIssued(currCert)) {
-                if (maxPathLength <= 0) {
-                   throw new CertPathValidatorException
-                        (msg + " check failed: pathLenConstraint violated - "
-                         + "this cert must be the last cert in the "
-                         + "certification path", null, null, -1,
-                         PKIXReason.PATH_TOO_LONG);
-                }
-                maxPathLength--;
-            }
-            if (pathLenConstraint < maxPathLength)
-                maxPathLength = pathLenConstraint;
-        }
-
-        if (debug != null) {
-            debug.println("after processing, maxPathLength = " + maxPathLength);
-            debug.println(msg + " verified.");
-        }
-    }
-
-    /**
-     * Merges the specified maxPathLength with the pathLenConstraint
-     * obtained from the certificate.
-     *
-     * @param cert the <code>X509Certificate</code>
-     * @param maxPathLength the previous maximum path length
-     * @return the new maximum path length constraint (-1 means no more
-     * certificates can follow, Integer.MAX_VALUE means path length is
-     * unconstrained)
-     */
-    static int mergeBasicConstraints(X509Certificate cert, int maxPathLength) {
-
-        int pathLenConstraint = cert.getBasicConstraints();
-
-        if (!X509CertImpl.isSelfIssued(cert)) {
-            maxPathLength--;
-        }
-
-        if (pathLenConstraint < maxPathLength) {
-            maxPathLength = pathLenConstraint;
-        }
-
-        return maxPathLength;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/CrlRevocationChecker.java b/ojluni/src/main/java/sun/security/provider/certpath/CrlRevocationChecker.java
deleted file mode 100755
index 64e28de..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/CrlRevocationChecker.java
+++ /dev/null
@@ -1,802 +0,0 @@
-/*
- * Copyright (c) 2000, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.math.BigInteger;
-import java.util.Arrays;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.Iterator;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.NoSuchAlgorithmException;
-import java.security.PublicKey;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateRevokedException;
-import java.security.cert.CertPathBuilder;
-import java.security.cert.CertPathBuilderException;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.CertPathValidatorException.BasicReason;
-import java.security.cert.CertStore;
-import java.security.cert.CollectionCertStoreParameters;
-import java.security.cert.CRLException;
-import java.security.cert.CRLReason;
-import java.security.cert.PKIXBuilderParameters;
-import java.security.cert.PKIXCertPathBuilderResult;
-import java.security.cert.PKIXCertPathChecker;
-import java.security.cert.PKIXParameters;
-import java.security.cert.TrustAnchor;
-import java.security.cert.X509Certificate;
-import java.security.cert.X509CertSelector;
-import java.security.cert.X509CRL;
-import java.security.cert.X509CRLEntry;
-import java.security.cert.X509CRLSelector;
-import java.security.interfaces.DSAPublicKey;
-import javax.security.auth.x500.X500Principal;
-import sun.security.util.Debug;
-import sun.security.x509.AccessDescription;
-import sun.security.x509.AuthorityInfoAccessExtension;
-import sun.security.x509.CRLDistributionPointsExtension;
-import sun.security.x509.DistributionPoint;
-import sun.security.x509.GeneralName;
-import sun.security.x509.GeneralNames;
-import sun.security.x509.PKIXExtensions;
-import sun.security.x509.X500Name;
-import sun.security.x509.X509CertImpl;
-import sun.security.x509.X509CRLEntryImpl;
-
-/**
- * CrlRevocationChecker is a <code>PKIXCertPathChecker</code> that checks
- * revocation status information on a PKIX certificate using CRLs obtained
- * from one or more <code>CertStores</code>. This is based on section 6.3
- * of RFC 3280 (http://www.ietf.org/rfc/rfc3280.txt).
- *
- * @since       1.4
- * @author      Seth Proctor
- * @author      Steve Hanna
- */
-class CrlRevocationChecker extends PKIXCertPathChecker {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-    private final TrustAnchor mAnchor;
-    private final List<CertStore> mStores;
-    private final String mSigProvider;
-    private final Date mCurrentTime;
-    private PublicKey mPrevPubKey;
-    private boolean mCRLSignFlag;
-    private HashSet<X509CRL> mPossibleCRLs;
-    private HashSet<X509CRL> mApprovedCRLs;
-    private final PKIXParameters mParams;
-    private static final boolean [] mCrlSignUsage =
-        { false, false, false, false, false, false, true };
-    private static final boolean[] ALL_REASONS =
-        {true, true, true, true, true, true, true, true, true};
-    private boolean mOnlyEECert = false;
-
-    // Maximum clock skew in milliseconds (15 minutes) allowed when checking
-    // validity of CRLs
-    private static final long MAX_CLOCK_SKEW = 900000;
-
-    /**
-     * Creates a <code>CrlRevocationChecker</code>.
-     *
-     * @param anchor anchor selected to validate the target certificate
-     * @param params <code>PKIXParameters</code> to be used for
-     *               finding certificates and CRLs, etc.
-     */
-    CrlRevocationChecker(TrustAnchor anchor, PKIXParameters params)
-        throws CertPathValidatorException
-    {
-        this(anchor, params, null);
-    }
-
-    /**
-     * Creates a <code>CrlRevocationChecker</code>, allowing
-     * extra certificates to be supplied beyond those contained
-     * in the <code>PKIXParameters</code>.
-     *
-     * @param anchor anchor selected to validate the target certificate
-     * @param params <code>PKIXParameters</code> to be used for
-     *               finding certificates and CRLs, etc.
-     * @param certs a <code>Collection</code> of certificates
-     *              that may be useful, beyond those available
-     *              through <code>params</code> (<code>null</code>
-     *              if none)
-     */
-    CrlRevocationChecker(TrustAnchor anchor, PKIXParameters params,
-        Collection<X509Certificate> certs) throws CertPathValidatorException
-    {
-        this(anchor, params, certs, false);
-    }
-
-    CrlRevocationChecker(TrustAnchor anchor, PKIXParameters params,
-        Collection<X509Certificate> certs, boolean onlyEECert)
-        throws CertPathValidatorException {
-        mAnchor = anchor;
-        mParams = params;
-        mStores = new ArrayList<CertStore>(params.getCertStores());
-        mSigProvider = params.getSigProvider();
-        if (certs != null) {
-            try {
-                mStores.add(CertStore.getInstance("Collection",
-                    new CollectionCertStoreParameters(certs)));
-            } catch (Exception e) {
-                // should never occur but not necessarily fatal, so log it,
-                // ignore and continue
-                if (debug != null) {
-                    debug.println("CrlRevocationChecker: " +
-                        "error creating Collection CertStore: " + e);
-                }
-            }
-        }
-        Date testDate = params.getDate();
-        mCurrentTime = (testDate != null ? testDate : new Date());
-        mOnlyEECert = onlyEECert;
-        init(false);
-    }
-
-    /**
-     * Initializes the internal state of the checker from parameters
-     * specified in the constructor
-     */
-    public void init(boolean forward) throws CertPathValidatorException
-    {
-        if (!forward) {
-            if (mAnchor != null) {
-                if (mAnchor.getCAPublicKey() != null) {
-                    mPrevPubKey = mAnchor.getCAPublicKey();
-                } else {
-                    mPrevPubKey = mAnchor.getTrustedCert().getPublicKey();
-                }
-            } else {
-                mPrevPubKey = null;
-            }
-            mCRLSignFlag = true;
-        } else {
-            throw new CertPathValidatorException("forward checking "
-                                + "not supported");
-        }
-    }
-
-    public boolean isForwardCheckingSupported() {
-        return false;
-    }
-
-    public Set<String> getSupportedExtensions() {
-        return null;
-    }
-
-    /**
-     * Performs the revocation status check on the certificate using
-     * its internal state.
-     *
-     * @param cert the Certificate
-     * @param unresolvedCritExts a Collection of the unresolved critical
-     * extensions
-     * @exception CertPathValidatorException Exception thrown if
-     * certificate does not verify
-     */
-    public void check(Certificate cert, Collection<String> unresolvedCritExts)
-        throws CertPathValidatorException
-    {
-        X509Certificate currCert = (X509Certificate) cert;
-        verifyRevocationStatus(currCert, mPrevPubKey, mCRLSignFlag, true);
-
-        // Make new public key if parameters are missing
-        PublicKey cKey = currCert.getPublicKey();
-        if (cKey instanceof DSAPublicKey &&
-            ((DSAPublicKey)cKey).getParams() == null) {
-            // cKey needs to inherit DSA parameters from prev key
-            cKey = BasicChecker.makeInheritedParamsKey(cKey, mPrevPubKey);
-        }
-        mPrevPubKey = cKey;
-        mCRLSignFlag = certCanSignCrl(currCert);
-    }
-
-    /**
-     * Performs the revocation status check on the certificate using
-     * the provided state variables, as well as the constant internal
-     * data.
-     *
-     * @param currCert the Certificate
-     * @param prevKey the previous PublicKey in the chain
-     * @param signFlag a boolean as returned from the last call, or true
-     * if this is the first cert in the chain
-     * @return a boolean specifying if the cert is allowed to vouch for the
-     * validity of a CRL for the next iteration
-     * @exception CertPathValidatorException Exception thrown if
-     *            certificate does not verify.
-     */
-    public boolean check(X509Certificate currCert, PublicKey prevKey,
-        boolean signFlag) throws CertPathValidatorException
-    {
-        verifyRevocationStatus(currCert, prevKey, signFlag, true);
-        return certCanSignCrl(currCert);
-    }
-
-    /**
-     * Checks that a cert can be used to verify a CRL.
-     *
-     * @param currCert an X509Certificate to check
-     * @return a boolean specifying if the cert is allowed to vouch for the
-     * validity of a CRL
-     */
-    static boolean certCanSignCrl(X509Certificate currCert) {
-        // if the cert doesn't include the key usage ext, or
-        // the key usage ext asserts cRLSigning, return true,
-        // otherwise return false.
-        boolean[] kbools = currCert.getKeyUsage();
-        if (kbools != null) {
-            return kbools[6];
-        }
-        return false;
-    }
-
-    /**
-     * Internal method to start the verification of a cert
-     */
-    private void verifyRevocationStatus(X509Certificate currCert,
-        PublicKey prevKey, boolean signFlag, boolean allowSeparateKey)
-        throws CertPathValidatorException
-    {
-        verifyRevocationStatus(currCert, prevKey, signFlag,
-                   allowSeparateKey, null, mParams.getTrustAnchors());
-    }
-
-    /**
-     * Internal method to start the verification of a cert
-     * @param stackedCerts a <code>Set</code> of <code>X509Certificate</code>s>
-     *                     whose revocation status depends on the
-     *                     non-revoked status of this cert. To avoid
-     *                     circular dependencies, we assume they're
-     *                     revoked while checking the revocation
-     *                     status of this cert.
-     * @param trustAnchors a <code>Set</code> of <code>TrustAnchor</code>s
-     */
-    private void verifyRevocationStatus(X509Certificate currCert,
-        PublicKey prevKey, boolean signFlag, boolean allowSeparateKey,
-        Set<X509Certificate> stackedCerts,
-        Set<TrustAnchor> trustAnchors) throws CertPathValidatorException {
-
-        String msg = "revocation status";
-        if (debug != null) {
-            debug.println("CrlRevocationChecker.verifyRevocationStatus()" +
-                " ---checking " + msg + "...");
-        }
-
-        if (mOnlyEECert && currCert.getBasicConstraints() != -1) {
-            if (debug != null) {
-                debug.println("Skipping revocation check, not end entity cert");
-            }
-            return;
-        }
-
-        // reject circular dependencies - RFC 3280 is not explicit on how
-        // to handle this, so we feel it is safest to reject them until
-        // the issue is resolved in the PKIX WG.
-        if ((stackedCerts != null) && stackedCerts.contains(currCert)) {
-            if (debug != null) {
-                debug.println("CrlRevocationChecker.verifyRevocationStatus()" +
-                    " circular dependency");
-            }
-            throw new CertPathValidatorException
-                ("Could not determine revocation status", null, null, -1,
-                 BasicReason.UNDETERMINED_REVOCATION_STATUS);
-        }
-
-        // init the state for this run
-        mPossibleCRLs = new HashSet<X509CRL>();
-        mApprovedCRLs = new HashSet<X509CRL>();
-        boolean[] reasonsMask = new boolean[9];
-
-        try {
-            X509CRLSelector sel = new X509CRLSelector();
-            sel.setCertificateChecking(currCert);
-            CertPathHelper.setDateAndTime(sel, mCurrentTime, MAX_CLOCK_SKEW);
-
-            for (CertStore mStore : mStores) {
-                for (java.security.cert.CRL crl : mStore.getCRLs(sel)) {
-                    mPossibleCRLs.add((X509CRL)crl);
-                }
-            }
-            // all CRLs returned by the DP Fetcher have also been verified
-            mApprovedCRLs.addAll(DistributionPointFetcher.getCRLs(sel, signFlag,
-                prevKey, mSigProvider, mStores, reasonsMask, trustAnchors,
-                mParams.getDate()));
-        } catch (Exception e) {
-            if (debug != null) {
-                debug.println("CrlRevocationChecker.verifyRevocationStatus() "
-                    + "unexpected exception: " + e.getMessage());
-            }
-            throw new CertPathValidatorException(e);
-        }
-
-        if (debug != null) {
-            debug.println("CrlRevocationChecker.verifyRevocationStatus() " +
-                "crls.size() = " + mPossibleCRLs.size());
-        }
-        if (!mPossibleCRLs.isEmpty()) {
-            // Now that we have a list of possible CRLs, see which ones can
-            // be approved
-            mApprovedCRLs.addAll(verifyPossibleCRLs(mPossibleCRLs, currCert,
-                signFlag, prevKey, reasonsMask, trustAnchors));
-        }
-        if (debug != null) {
-            debug.println("CrlRevocationChecker.verifyRevocationStatus() " +
-                "approved crls.size() = " + mApprovedCRLs.size());
-        }
-
-        // make sure that we have at least one CRL that _could_ cover
-        // the certificate in question and all reasons are covered
-        if (mApprovedCRLs.isEmpty() ||
-            !Arrays.equals(reasonsMask, ALL_REASONS)) {
-            if (allowSeparateKey) {
-                verifyWithSeparateSigningKey(currCert, prevKey, signFlag,
-                                             stackedCerts);
-                return;
-            } else {
-                throw new CertPathValidatorException
-                ("Could not determine revocation status", null, null, -1,
-                 BasicReason.UNDETERMINED_REVOCATION_STATUS);
-            }
-        }
-
-        // See if the cert is in the set of approved crls.
-        if (debug != null) {
-            BigInteger sn = currCert.getSerialNumber();
-            debug.println("CrlRevocationChecker.verifyRevocationStatus() " +
-                            "starting the final sweep...");
-            debug.println("CrlRevocationChecker.verifyRevocationStatus" +
-                            " cert SN: " + sn.toString());
-        }
-
-        CRLReason reasonCode = CRLReason.UNSPECIFIED;
-        X509CRLEntryImpl entry = null;
-        for (X509CRL crl : mApprovedCRLs) {
-            X509CRLEntry e = crl.getRevokedCertificate(currCert);
-            if (e != null) {
-                try {
-                    entry = X509CRLEntryImpl.toImpl(e);
-                } catch (CRLException ce) {
-                    throw new CertPathValidatorException(ce);
-                }
-                if (debug != null) {
-                    debug.println("CrlRevocationChecker.verifyRevocationStatus"
-                        + " CRL entry: " + entry.toString());
-                }
-
-                /*
-                 * Abort CRL validation and throw exception if there are any
-                 * unrecognized critical CRL entry extensions (see section
-                 * 5.3 of RFC 3280).
-                 */
-                Set<String> unresCritExts = entry.getCriticalExtensionOIDs();
-                if (unresCritExts != null && !unresCritExts.isEmpty()) {
-                    /* remove any that we will process */
-                    unresCritExts.remove
-                        (PKIXExtensions.ReasonCode_Id.toString());
-                    unresCritExts.remove
-                        (PKIXExtensions.CertificateIssuer_Id.toString());
-                    if (!unresCritExts.isEmpty()) {
-                        if (debug != null) {
-                            debug.println("Unrecognized "
-                            + "critical extension(s) in revoked CRL entry: "
-                            + unresCritExts);
-                        }
-                        throw new CertPathValidatorException
-                        ("Could not determine revocation status", null, null,
-                         -1, BasicReason.UNDETERMINED_REVOCATION_STATUS);
-                    }
-                }
-
-                reasonCode = entry.getRevocationReason();
-                if (reasonCode == null) {
-                    reasonCode = CRLReason.UNSPECIFIED;
-                }
-                Throwable t = new CertificateRevokedException
-                    (entry.getRevocationDate(), reasonCode,
-                     crl.getIssuerX500Principal(), entry.getExtensions());
-                throw new CertPathValidatorException(t.getMessage(), t,
-                    null, -1, BasicReason.REVOKED);
-            }
-        }
-    }
-
-    /**
-     * We have a cert whose revocation status couldn't be verified by
-     * a CRL issued by the cert that issued the CRL. See if we can
-     * find a valid CRL issued by a separate key that can verify the
-     * revocation status of this certificate.
-     * <p>
-     * Note that this does not provide support for indirect CRLs,
-     * only CRLs signed with a different key (but the same issuer
-     * name) as the certificate being checked.
-     *
-     * @param currCert the <code>X509Certificate</code> to be checked
-     * @param prevKey the <code>PublicKey</code> that failed
-     * @param signFlag <code>true</code> if that key was trusted to sign CRLs
-     * @param stackedCerts a <code>Set</code> of <code>X509Certificate</code>s>
-     *                     whose revocation status depends on the
-     *                     non-revoked status of this cert. To avoid
-     *                     circular dependencies, we assume they're
-     *                     revoked while checking the revocation
-     *                     status of this cert.
-     * @throws CertPathValidatorException if the cert's revocation status
-     *         cannot be verified successfully with another key
-     */
-    private void verifyWithSeparateSigningKey(X509Certificate currCert,
-        PublicKey prevKey, boolean signFlag, Set<X509Certificate> stackedCerts)
-        throws CertPathValidatorException {
-        String msg = "revocation status";
-        if (debug != null) {
-            debug.println(
-                "CrlRevocationChecker.verifyWithSeparateSigningKey()" +
-                " ---checking " + msg + "...");
-        }
-
-        // reject circular dependencies - RFC 3280 is not explicit on how
-        // to handle this, so we feel it is safest to reject them until
-        // the issue is resolved in the PKIX WG.
-        if ((stackedCerts != null) && stackedCerts.contains(currCert)) {
-            if (debug != null) {
-                debug.println(
-                    "CrlRevocationChecker.verifyWithSeparateSigningKey()" +
-                    " circular dependency");
-            }
-            throw new CertPathValidatorException
-                ("Could not determine revocation status", null, null,
-                 -1, BasicReason.UNDETERMINED_REVOCATION_STATUS);
-        }
-
-        // If prevKey wasn't trusted, maybe we just didn't have the right
-        // path to it. Don't rule that key out.
-        if (!signFlag) {
-            prevKey = null;
-        }
-
-        // Try to find another key that might be able to sign
-        // CRLs vouching for this cert.
-        buildToNewKey(currCert, prevKey, stackedCerts);
-    }
-
-    /**
-     * Tries to find a CertPath that establishes a key that can be
-     * used to verify the revocation status of a given certificate.
-     * Ignores keys that have previously been tried. Throws a
-     * CertPathValidatorException if no such key could be found.
-     *
-     * @param currCert the <code>X509Certificate</code> to be checked
-     * @param prevKey the <code>PublicKey</code> of the certificate whose key
-     *    cannot be used to vouch for the CRL and should be ignored
-     * @param stackedCerts a <code>Set</code> of <code>X509Certificate</code>s>
-     *                     whose revocation status depends on the
-     *                     establishment of this path.
-     * @throws CertPathValidatorException on failure
-     */
-    private void buildToNewKey(X509Certificate currCert,
-        PublicKey prevKey, Set<X509Certificate> stackedCerts)
-        throws CertPathValidatorException {
-
-        if (debug != null) {
-            debug.println("CrlRevocationChecker.buildToNewKey()" +
-                          " starting work");
-        }
-        Set<PublicKey> badKeys = new HashSet<PublicKey>();
-        if (prevKey != null) {
-            badKeys.add(prevKey);
-        }
-        X509CertSelector certSel = new RejectKeySelector(badKeys);
-        certSel.setSubject(currCert.getIssuerX500Principal());
-        certSel.setKeyUsage(mCrlSignUsage);
-
-        Set<TrustAnchor> newAnchors =
-            (mAnchor == null ? mParams.getTrustAnchors() :
-                                Collections.singleton(mAnchor));
-
-        PKIXBuilderParameters builderParams;
-        if (mParams instanceof PKIXBuilderParameters) {
-            builderParams = (PKIXBuilderParameters) mParams.clone();
-            builderParams.setTargetCertConstraints(certSel);
-            // Policy qualifiers must be rejected, since we don't have
-            // any way to convey them back to the application.
-            builderParams.setPolicyQualifiersRejected(true);
-            try {
-                builderParams.setTrustAnchors(newAnchors);
-            } catch (InvalidAlgorithmParameterException iape) {
-                throw new RuntimeException(iape); // should never occur
-            }
-        } else {
-            // It's unfortunate that there's no easy way to make a
-            // PKIXBuilderParameters object from a PKIXParameters
-            // object. This might miss some things if parameters
-            // are added in the future or the validatorParams object
-            // is a custom class derived from PKIXValidatorParameters.
-            try {
-                builderParams = new PKIXBuilderParameters(newAnchors, certSel);
-            } catch (InvalidAlgorithmParameterException iape) {
-                throw new RuntimeException(iape); // should never occur
-            }
-            builderParams.setInitialPolicies(mParams.getInitialPolicies());
-            builderParams.setCertStores(mStores);
-            builderParams.setExplicitPolicyRequired
-                (mParams.isExplicitPolicyRequired());
-            builderParams.setPolicyMappingInhibited
-                (mParams.isPolicyMappingInhibited());
-            builderParams.setAnyPolicyInhibited(mParams.isAnyPolicyInhibited());
-            // Policy qualifiers must be rejected, since we don't have
-            // any way to convey them back to the application.
-            // That's the default, so no need to write code.
-            builderParams.setDate(mParams.getDate());
-            builderParams.setCertPathCheckers(mParams.getCertPathCheckers());
-            builderParams.setSigProvider(mParams.getSigProvider());
-        }
-
-        // Skip revocation during this build to detect circular
-        // references. But check revocation afterwards, using the
-        // key (or any other that works).
-        builderParams.setRevocationEnabled(false);
-
-        // check for AuthorityInformationAccess extension
-        if (Builder.USE_AIA == true) {
-            X509CertImpl currCertImpl = null;
-            try {
-                currCertImpl = X509CertImpl.toImpl(currCert);
-            } catch (CertificateException ce) {
-                // ignore but log it
-                if (debug != null) {
-                    debug.println("CrlRevocationChecker.buildToNewKey: " +
-                        "error decoding cert: " + ce);
-                }
-            }
-            AuthorityInfoAccessExtension aiaExt = null;
-            if (currCertImpl != null) {
-                aiaExt = currCertImpl.getAuthorityInfoAccessExtension();
-            }
-            if (aiaExt != null) {
-                List<AccessDescription> adList = aiaExt.getAccessDescriptions();
-                if (adList != null) {
-                    for (AccessDescription ad : adList) {
-                        CertStore cs = URICertStore.getInstance(ad);
-                        if (cs != null) {
-                            if (debug != null) {
-                                debug.println("adding AIAext CertStore");
-                            }
-                            builderParams.addCertStore(cs);
-                        }
-                    }
-                }
-            }
-        }
-
-        CertPathBuilder builder = null;
-        try {
-            builder = CertPathBuilder.getInstance("PKIX");
-        } catch (NoSuchAlgorithmException nsae) {
-            throw new CertPathValidatorException(nsae);
-        }
-        while (true) {
-            try {
-                if (debug != null) {
-                    debug.println("CrlRevocationChecker.buildToNewKey()" +
-                                  " about to try build ...");
-                }
-                PKIXCertPathBuilderResult cpbr =
-                    (PKIXCertPathBuilderResult) builder.build(builderParams);
-
-                if (debug != null) {
-                    debug.println("CrlRevocationChecker.buildToNewKey()" +
-                                  " about to check revocation ...");
-                }
-                // Now check revocation of all certs in path, assuming that
-                // the stackedCerts are revoked.
-                if (stackedCerts == null) {
-                    stackedCerts = new HashSet<X509Certificate>();
-                }
-                stackedCerts.add(currCert);
-                TrustAnchor ta = cpbr.getTrustAnchor();
-                PublicKey prevKey2 = ta.getCAPublicKey();
-                if (prevKey2 == null) {
-                    prevKey2 = ta.getTrustedCert().getPublicKey();
-                }
-                boolean signFlag = true;
-                List<? extends Certificate> cpList =
-                    cpbr.getCertPath().getCertificates();
-                try {
-                    for (int i = cpList.size()-1; i >= 0; i-- ) {
-                        X509Certificate cert = (X509Certificate) cpList.get(i);
-
-                        if (debug != null) {
-                            debug.println("CrlRevocationChecker.buildToNewKey()"
-                                + " index " + i + " checking " + cert);
-                        }
-                        verifyRevocationStatus(cert, prevKey2, signFlag, true,
-                                stackedCerts, newAnchors);
-                        signFlag = certCanSignCrl(cert);
-                        prevKey2 = cert.getPublicKey();
-                    }
-                } catch (CertPathValidatorException cpve) {
-                    // ignore it and try to get another key
-                    badKeys.add(cpbr.getPublicKey());
-                    continue;
-                }
-
-                if (debug != null) {
-                    debug.println("CrlRevocationChecker.buildToNewKey()" +
-                                  " got key " + cpbr.getPublicKey());
-                }
-                // Now check revocation on the current cert using that key.
-                // If it doesn't check out, try to find a different key.
-                // And if we can't find a key, then return false.
-                PublicKey newKey = cpbr.getPublicKey();
-                try {
-                    verifyRevocationStatus(currCert, newKey, true, false);
-                    // If that passed, the cert is OK!
-                    return;
-                } catch (CertPathValidatorException cpve) {
-                    // If it is revoked, rethrow exception
-                    if (cpve.getReason() == BasicReason.REVOKED) {
-                        throw cpve;
-                    }
-                    // Otherwise, ignore the exception and
-                    // try to get another key.
-                }
-                badKeys.add(newKey);
-            } catch (InvalidAlgorithmParameterException iape) {
-                throw new CertPathValidatorException(iape);
-            } catch (CertPathBuilderException cpbe) {
-                throw new CertPathValidatorException
-                    ("Could not determine revocation status", null, null,
-                     -1, BasicReason.UNDETERMINED_REVOCATION_STATUS);
-            }
-        }
-    }
-
-    /*
-     * This inner class extends the X509CertSelector to add an additional
-     * check to make sure the subject public key isn't on a particular list.
-     * This class is used by buildToNewKey() to make sure the builder doesn't
-     * end up with a CertPath to a public key that has already been rejected.
-     */
-    private static class RejectKeySelector extends X509CertSelector {
-        private final Set<PublicKey> badKeySet;
-
-        /**
-         * Creates a new <code>RejectKeySelector</code>.
-         *
-         * @param badPublicKeys a <code>Set</code> of
-         *                      <code>PublicKey</code>s that
-         *                      should be rejected (or <code>null</code>
-         *                      if no such check should be done)
-         */
-        RejectKeySelector(Set<PublicKey> badPublicKeys) {
-            this.badKeySet = badPublicKeys;
-        }
-
-        /**
-         * Decides whether a <code>Certificate</code> should be selected.
-         *
-         * @param cert the <code>Certificate</code> to be checked
-         * @return <code>true</code> if the <code>Certificate</code> should be
-         *         selected, <code>false</code> otherwise
-         */
-        public boolean match(Certificate cert) {
-            if (!super.match(cert))
-                return(false);
-
-            if (badKeySet.contains(cert.getPublicKey())) {
-                if (debug != null)
-                    debug.println("RejectCertSelector.match: bad key");
-                return false;
-            }
-
-            if (debug != null)
-                debug.println("RejectCertSelector.match: returning true");
-            return true;
-        }
-
-        /**
-         * Return a printable representation of the <code>CertSelector</code>.
-         *
-         * @return a <code>String</code> describing the contents of the
-         *         <code>CertSelector</code>
-         */
-        public String toString() {
-            StringBuilder sb = new StringBuilder();
-            sb.append("RejectCertSelector: [\n");
-            sb.append(super.toString());
-            sb.append(badKeySet);
-            sb.append("]");
-            return sb.toString();
-        }
-    }
-
-    /**
-     * Internal method that verifies a set of possible_crls,
-     * and sees if each is approved, based on the cert.
-     *
-     * @param crls a set of possible CRLs to test for acceptability
-     * @param cert the certificate whose revocation status is being checked
-     * @param signFlag <code>true</code> if prevKey was trusted to sign CRLs
-     * @param prevKey the public key of the issuer of cert
-     * @param reasonsMask the reason code mask
-     * @param trustAnchors a <code>Set</code> of <code>TrustAnchor</code>s>
-     * @return a collection of approved crls (or an empty collection)
-     */
-    private Collection<X509CRL> verifyPossibleCRLs(Set<X509CRL> crls,
-        X509Certificate cert, boolean signFlag, PublicKey prevKey,
-        boolean[] reasonsMask,
-        Set<TrustAnchor> trustAnchors) throws CertPathValidatorException {
-
-        try {
-            X509CertImpl certImpl = X509CertImpl.toImpl(cert);
-            if (debug != null) {
-                debug.println("CRLRevocationChecker.verifyPossibleCRLs: " +
-                        "Checking CRLDPs for "
-                        + certImpl.getSubjectX500Principal());
-            }
-            CRLDistributionPointsExtension ext =
-                certImpl.getCRLDistributionPointsExtension();
-            List<DistributionPoint> points = null;
-            if (ext == null) {
-                // assume a DP with reasons and CRLIssuer fields omitted
-                // and a DP name of the cert issuer.
-                // TODO add issuerAltName too
-                X500Name certIssuer = (X500Name)certImpl.getIssuerDN();
-                DistributionPoint point = new DistributionPoint
-                    (new GeneralNames().add(new GeneralName(certIssuer)),
-                     null, null);
-                points = Collections.singletonList(point);
-            } else {
-                points = (List<DistributionPoint>)ext.get(
-                                        CRLDistributionPointsExtension.POINTS);
-            }
-            Set<X509CRL> results = new HashSet<X509CRL>();
-            for (Iterator<DistributionPoint> t = points.iterator();
-                 t.hasNext() && !Arrays.equals(reasonsMask, ALL_REASONS); ) {
-                DistributionPoint point = t.next();
-                for (X509CRL crl : crls) {
-                    if (DistributionPointFetcher.verifyCRL(certImpl, point, crl,
-                            reasonsMask, signFlag, prevKey, mSigProvider,
-                            trustAnchors, mStores, mParams.getDate())) {
-                        results.add(crl);
-                    }
-                }
-            }
-            return results;
-        } catch (Exception e) {
-            if (debug != null) {
-                debug.println("Exception while verifying CRL: "+e.getMessage());
-                e.printStackTrace();
-            }
-            return Collections.emptySet();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/DistributionPointFetcher.java b/ojluni/src/main/java/sun/security/provider/certpath/DistributionPointFetcher.java
deleted file mode 100755
index ee547d7..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/DistributionPointFetcher.java
+++ /dev/null
@@ -1,730 +0,0 @@
-/*
- * Copyright (c) 2002, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.io.*;
-import java.net.URI;
-import java.util.*;
-import java.security.*;
-import java.security.cert.*;
-import javax.security.auth.x500.X500Principal;
-
-import sun.security.action.GetBooleanAction;
-import sun.security.util.Debug;
-import sun.security.util.DerOutputStream;
-import sun.security.x509.*;
-
-/**
- * Class to obtain CRLs via the CRLDistributionPoints extension.
- * Note that the functionality of this class must be explicitly enabled
- * via a system property, see the USE_CRLDP variable below.
- *
- * This class uses the URICertStore class to fetch CRLs. The URICertStore
- * class also implements CRL caching: see the class description for more
- * information.
- *
- * @author Andreas Sterbenz
- * @author Sean Mullan
- * @since 1.4.2
- */
-public class DistributionPointFetcher {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-
-    private static final boolean[] ALL_REASONS =
-        {true, true, true, true, true, true, true, true, true};
-
-    /**
-     * Flag indicating whether support for the CRL distribution point
-     * extension shall be enabled. Currently disabled by default for
-     * compatibility and legal reasons.
-     */
-    private final static boolean USE_CRLDP = AccessController.doPrivileged
-        (new GetBooleanAction("com.sun.security.enableCRLDP"));
-
-    /**
-     * Private instantiation only.
-     */
-    private DistributionPointFetcher() {}
-
-    /**
-     * Return the X509CRLs matching this selector. The selector must be
-     * an X509CRLSelector with certificateChecking set.
-     *
-     * If CRLDP support is disabled, this method always returns an
-     * empty set.
-     */
-    public static Collection<X509CRL> getCRLs(X509CRLSelector selector,
-                                              boolean signFlag,
-                                              PublicKey prevKey,
-                                              String provider,
-                                              List<CertStore> certStores,
-                                              boolean[] reasonsMask,
-                                              Set<TrustAnchor> trustAnchors,
-                                              Date validity)
-        throws CertStoreException
-    {
-        if (USE_CRLDP == false) {
-            return Collections.emptySet();
-        }
-        X509Certificate cert = selector.getCertificateChecking();
-        if (cert == null) {
-            return Collections.emptySet();
-        }
-        try {
-            X509CertImpl certImpl = X509CertImpl.toImpl(cert);
-            if (debug != null) {
-                debug.println("DistributionPointFetcher.getCRLs: Checking "
-                        + "CRLDPs for " + certImpl.getSubjectX500Principal());
-            }
-            CRLDistributionPointsExtension ext =
-                certImpl.getCRLDistributionPointsExtension();
-            if (ext == null) {
-                if (debug != null) {
-                    debug.println("No CRLDP ext");
-                }
-                return Collections.emptySet();
-            }
-            List<DistributionPoint> points = (List<DistributionPoint>)ext.get(
-                                        CRLDistributionPointsExtension.POINTS);
-            Set<X509CRL> results = new HashSet<X509CRL>();
-            for (Iterator<DistributionPoint> t = points.iterator();
-                 t.hasNext() && !Arrays.equals(reasonsMask, ALL_REASONS); ) {
-                DistributionPoint point = t.next();
-                Collection<X509CRL> crls = getCRLs(selector, certImpl,
-                    point, reasonsMask, signFlag, prevKey, provider,
-                    certStores, trustAnchors, validity);
-                results.addAll(crls);
-            }
-            if (debug != null) {
-                debug.println("Returning " + results.size() + " CRLs");
-            }
-            return results;
-        } catch (CertificateException e) {
-            return Collections.emptySet();
-        } catch (IOException e) {
-            return Collections.emptySet();
-        }
-    }
-
-    /**
-     * Download CRLs from the given distribution point, verify and return them.
-     * See the top of the class for current limitations.
-     */
-    private static Collection<X509CRL> getCRLs(X509CRLSelector selector,
-        X509CertImpl certImpl, DistributionPoint point, boolean[] reasonsMask,
-        boolean signFlag, PublicKey prevKey, String provider,
-        List<CertStore> certStores, Set<TrustAnchor> trustAnchors,
-        Date validity) {
-
-        // check for full name
-        GeneralNames fullName = point.getFullName();
-        if (fullName == null) {
-            // check for relative name
-            RDN relativeName = point.getRelativeName();
-            if (relativeName == null) {
-                return Collections.emptySet();
-            }
-            try {
-                GeneralNames crlIssuers = point.getCRLIssuer();
-                if (crlIssuers == null) {
-                    fullName = getFullNames
-                        ((X500Name) certImpl.getIssuerDN(), relativeName);
-                } else {
-                    // should only be one CRL Issuer
-                    if (crlIssuers.size() != 1) {
-                        return Collections.emptySet();
-                    } else {
-                        fullName = getFullNames
-                            ((X500Name) crlIssuers.get(0).getName(), relativeName);
-                    }
-                }
-            } catch (IOException ioe) {
-                return Collections.emptySet();
-            }
-        }
-        Collection<X509CRL> possibleCRLs = new ArrayList<X509CRL>();
-        Collection<X509CRL> crls = new ArrayList<X509CRL>(2);
-        for (Iterator<GeneralName> t = fullName.iterator(); t.hasNext(); ) {
-            GeneralName name = t.next();
-            if (name.getType() == GeneralNameInterface.NAME_DIRECTORY) {
-                X500Name x500Name = (X500Name) name.getName();
-                possibleCRLs.addAll(
-                    getCRLs(x500Name, certImpl.getIssuerX500Principal(),
-                            certStores));
-            } else if (name.getType() == GeneralNameInterface.NAME_URI) {
-                URIName uriName = (URIName)name.getName();
-                X509CRL crl = getCRL(uriName);
-                if (crl != null) {
-                    possibleCRLs.add(crl);
-                }
-            }
-        }
-
-        for (X509CRL crl : possibleCRLs) {
-            try {
-                // make sure issuer is not set
-                // we check the issuer in verifyCRLs method
-                selector.setIssuerNames(null);
-                if (selector.match(crl) && verifyCRL(certImpl, point, crl,
-                        reasonsMask, signFlag, prevKey, provider, trustAnchors,
-                        certStores, validity)) {
-                    crls.add(crl);
-                }
-            } catch (Exception e) {
-                // don't add the CRL
-                if (debug != null) {
-                    debug.println("Exception verifying CRL: " + e.getMessage());
-                    e.printStackTrace();
-                }
-            }
-        }
-        return crls;
-    }
-
-    /**
-     * Download CRL from given URI.
-     */
-    private static X509CRL getCRL(URIName name) {
-        URI uri = name.getURI();
-        if (debug != null) {
-            debug.println("Trying to fetch CRL from DP " + uri);
-        }
-        try {
-            CertStore ucs = URICertStore.getInstance
-                (new URICertStore.URICertStoreParameters(uri));
-            Collection<? extends CRL> crls = ucs.getCRLs(null);
-            if (crls.isEmpty()) {
-                return null;
-            } else {
-                return (X509CRL) crls.iterator().next();
-            }
-        } catch (Exception e) {
-            if (debug != null) {
-                debug.println("Exception getting CRL from CertStore: " + e);
-                e.printStackTrace();
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Fetch CRLs from certStores.
-     */
-    private static Collection<X509CRL> getCRLs(X500Name name,
-        X500Principal certIssuer, List<CertStore> certStores)
-    {
-        if (debug != null) {
-            debug.println("Trying to fetch CRL from DP " + name);
-        }
-        X509CRLSelector xcs = new X509CRLSelector();
-        xcs.addIssuer(name.asX500Principal());
-        xcs.addIssuer(certIssuer);
-        Collection<X509CRL> crls = new ArrayList<X509CRL>();
-        for (CertStore store : certStores) {
-            try {
-                for (CRL crl : store.getCRLs(xcs)) {
-                    crls.add((X509CRL)crl);
-                }
-            } catch (CertStoreException cse) {
-                // don't add the CRL
-                if (debug != null) {
-                    debug.println("Non-fatal exception while retrieving " +
-                        "CRLs: " + cse);
-                    cse.printStackTrace();
-                }
-            }
-        }
-        return crls;
-    }
-
-    /**
-     * Verifies a CRL for the given certificate's Distribution Point to
-     * ensure it is appropriate for checking the revocation status.
-     *
-     * @param certImpl the certificate whose revocation status is being checked
-     * @param point one of the distribution points of the certificate
-     * @param crl the CRL
-     * @param reasonsMask the interim reasons mask
-     * @param signFlag true if prevKey can be used to verify the CRL
-     * @param prevKey the public key that verifies the certificate's signature
-     * @param provider the Signature provider to use
-     * @param trustAnchors a {@code Set} of {@code TrustAnchor}s
-     * @param certStores a {@code List} of {@code CertStore}s to be used in
-     *        finding certificates and CRLs
-     * @param validity the time for which the validity of the CRL issuer's
-     *        certification path should be determined
-     * @return true if ok, false if not
-     */
-    static boolean verifyCRL(X509CertImpl certImpl, DistributionPoint point,
-        X509CRL crl, boolean[] reasonsMask, boolean signFlag,
-        PublicKey prevKey, String provider,
-        Set<TrustAnchor> trustAnchors, List<CertStore> certStores,
-        Date validity) throws CRLException, IOException {
-
-        boolean indirectCRL = false;
-        X509CRLImpl crlImpl = X509CRLImpl.toImpl(crl);
-        IssuingDistributionPointExtension idpExt =
-            crlImpl.getIssuingDistributionPointExtension();
-        X500Name certIssuer = (X500Name) certImpl.getIssuerDN();
-        X500Name crlIssuer = (X500Name) crlImpl.getIssuerDN();
-
-        // if crlIssuer is set, verify that it matches the issuer of the
-        // CRL and the CRL contains an IDP extension with the indirectCRL
-        // boolean asserted. Otherwise, verify that the CRL issuer matches the
-        // certificate issuer.
-        GeneralNames pointCrlIssuers = point.getCRLIssuer();
-        X500Name pointCrlIssuer = null;
-        if (pointCrlIssuers != null) {
-            if (idpExt == null ||
-                ((Boolean) idpExt.get
-                    (IssuingDistributionPointExtension.INDIRECT_CRL)).equals
-                        (Boolean.FALSE)) {
-                return false;
-            }
-            boolean match = false;
-            for (Iterator<GeneralName> t = pointCrlIssuers.iterator();
-                 !match && t.hasNext(); ) {
-                GeneralNameInterface name = t.next().getName();
-                if (crlIssuer.equals(name) == true) {
-                    pointCrlIssuer = (X500Name) name;
-                    match = true;
-                }
-            }
-            if (match == false) {
-                return false;
-            }
-
-            // we accept the case that a CRL issuer provide status
-            // information for itself.
-            if (issues(certImpl, crlImpl, provider)) {
-                // reset the public key used to verify the CRL's signature
-                prevKey = certImpl.getPublicKey();
-            } else {
-                indirectCRL = true;
-            }
-        } else if (crlIssuer.equals(certIssuer) == false) {
-            if (debug != null) {
-                debug.println("crl issuer does not equal cert issuer");
-            }
-            return false;
-        } else {
-            // in case of self-issued indirect CRL issuer.
-            byte[] certAKID = certImpl.getExtensionValue(
-                                PKIXExtensions.AuthorityKey_Id.toString());
-            byte[] crlAKID = crlImpl.getExtensionValue(
-                                PKIXExtensions.AuthorityKey_Id.toString());
-
-            if (certAKID == null || crlAKID == null) {
-                // cannot recognize indirect CRL without AKID
-
-                // we accept the case that a CRL issuer provide status
-                // information for itself.
-                if (issues(certImpl, crlImpl, provider)) {
-                    // reset the public key used to verify the CRL's signature
-                    prevKey = certImpl.getPublicKey();
-                }
-            } else if (!Arrays.equals(certAKID, crlAKID)) {
-                // we accept the case that a CRL issuer provide status
-                // information for itself.
-                if (issues(certImpl, crlImpl, provider)) {
-                    // reset the public key used to verify the CRL's signature
-                    prevKey = certImpl.getPublicKey();
-                } else {
-                    indirectCRL = true;
-                }
-            }
-        }
-
-        if (!indirectCRL && !signFlag) {
-            // cert's key cannot be used to verify the CRL
-            return false;
-        }
-
-        if (idpExt != null) {
-            DistributionPointName idpPoint = (DistributionPointName)
-                idpExt.get(IssuingDistributionPointExtension.POINT);
-            if (idpPoint != null) {
-                GeneralNames idpNames = idpPoint.getFullName();
-                if (idpNames == null) {
-                    RDN relativeName = idpPoint.getRelativeName();
-                    if (relativeName == null) {
-                        if (debug != null) {
-                           debug.println("IDP must be relative or full DN");
-                        }
-                        return false;
-                    }
-                    if (debug != null) {
-                        debug.println("IDP relativeName:" + relativeName);
-                    }
-                    idpNames = getFullNames(crlIssuer, relativeName);
-                }
-                // if the DP name is present in the IDP CRL extension and the
-                // DP field is present in the DP, then verify that one of the
-                // names in the IDP matches one of the names in the DP
-                if (point.getFullName() != null ||
-                    point.getRelativeName() != null) {
-                    GeneralNames pointNames = point.getFullName();
-                    if (pointNames == null) {
-                        RDN relativeName = point.getRelativeName();
-                        if (relativeName == null) {
-                            if (debug != null) {
-                                debug.println("DP must be relative or full DN");
-                            }
-                            return false;
-                        }
-                        if (debug != null) {
-                            debug.println("DP relativeName:" + relativeName);
-                        }
-                        if (indirectCRL) {
-                            if (pointCrlIssuers.size() != 1) {
-                                // RFC 3280: there must be only 1 CRL issuer
-                                // name when relativeName is present
-                                if (debug != null) {
-                                    debug.println("must only be one CRL " +
-                                        "issuer when relative name present");
-                                }
-                                return false;
-                            }
-                            pointNames = getFullNames
-                                (pointCrlIssuer, relativeName);
-                        } else {
-                            pointNames = getFullNames(certIssuer, relativeName);
-                        }
-                    }
-                    boolean match = false;
-                    for (Iterator<GeneralName> i = idpNames.iterator();
-                         !match && i.hasNext(); ) {
-                        GeneralNameInterface idpName = i.next().getName();
-                        if (debug != null) {
-                            debug.println("idpName: " + idpName);
-                        }
-                        for (Iterator<GeneralName> p = pointNames.iterator();
-                             !match && p.hasNext(); ) {
-                            GeneralNameInterface pointName = p.next().getName();
-                            if (debug != null) {
-                                debug.println("pointName: " + pointName);
-                            }
-                            match = idpName.equals(pointName);
-                        }
-                    }
-                    if (!match) {
-                        if (debug != null) {
-                            debug.println("IDP name does not match DP name");
-                        }
-                        return false;
-                    }
-                // if the DP name is present in the IDP CRL extension and the
-                // DP field is absent from the DP, then verify that one of the
-                // names in the IDP matches one of the names in the crlIssuer
-                // field of the DP
-                } else {
-                    // verify that one of the names in the IDP matches one of
-                    // the names in the cRLIssuer of the cert's DP
-                    boolean match = false;
-                    for (Iterator<GeneralName> t = pointCrlIssuers.iterator();
-                         !match && t.hasNext(); ) {
-                        GeneralNameInterface crlIssuerName = t.next().getName();
-                        for (Iterator<GeneralName> i = idpNames.iterator();
-                             !match && i.hasNext(); ) {
-                            GeneralNameInterface idpName = i.next().getName();
-                            match = crlIssuerName.equals(idpName);
-                        }
-                    }
-                    if (!match) {
-                        return false;
-                    }
-                }
-            }
-
-            // if the onlyContainsUserCerts boolean is asserted, verify that the
-            // cert is not a CA cert
-            Boolean b = (Boolean)
-                idpExt.get(IssuingDistributionPointExtension.ONLY_USER_CERTS);
-            if (b.equals(Boolean.TRUE) && certImpl.getBasicConstraints() != -1) {
-                if (debug != null) {
-                    debug.println("cert must be a EE cert");
-                }
-                return false;
-            }
-
-            // if the onlyContainsCACerts boolean is asserted, verify that the
-            // cert is a CA cert
-            b = (Boolean)
-                idpExt.get(IssuingDistributionPointExtension.ONLY_CA_CERTS);
-            if (b.equals(Boolean.TRUE) && certImpl.getBasicConstraints() == -1) {
-                if (debug != null) {
-                    debug.println("cert must be a CA cert");
-                }
-                return false;
-            }
-
-            // verify that the onlyContainsAttributeCerts boolean is not
-            // asserted
-            b = (Boolean) idpExt.get
-                (IssuingDistributionPointExtension.ONLY_ATTRIBUTE_CERTS);
-            if (b.equals(Boolean.TRUE)) {
-                if (debug != null) {
-                    debug.println("cert must not be an AA cert");
-                }
-                return false;
-            }
-        }
-
-        // compute interim reasons mask
-        boolean[] interimReasonsMask = new boolean[9];
-        ReasonFlags reasons = null;
-        if (idpExt != null) {
-            reasons = (ReasonFlags)
-                idpExt.get(IssuingDistributionPointExtension.REASONS);
-        }
-
-        boolean[] pointReasonFlags = point.getReasonFlags();
-        if (reasons != null) {
-            if (pointReasonFlags != null) {
-                // set interim reasons mask to the intersection of
-                // reasons in the DP and onlySomeReasons in the IDP
-                boolean[] idpReasonFlags = reasons.getFlags();
-                for (int i = 0; i < idpReasonFlags.length; i++) {
-                    if (idpReasonFlags[i] && pointReasonFlags[i]) {
-                        interimReasonsMask[i] = true;
-                    }
-                }
-            } else {
-                // set interim reasons mask to the value of
-                // onlySomeReasons in the IDP (and clone it since we may
-                // modify it)
-                interimReasonsMask = reasons.getFlags().clone();
-            }
-        } else if (idpExt == null || reasons == null) {
-            if (pointReasonFlags != null) {
-                // set interim reasons mask to the value of DP reasons
-                interimReasonsMask = pointReasonFlags.clone();
-            } else {
-                // set interim reasons mask to the special value all-reasons
-                interimReasonsMask = new boolean[9];
-                Arrays.fill(interimReasonsMask, true);
-            }
-        }
-
-        // verify that interim reasons mask includes one or more reasons
-        // not included in the reasons mask
-        boolean oneOrMore = false;
-        for (int i=0; i < interimReasonsMask.length && !oneOrMore; i++) {
-            if (!reasonsMask[i] && interimReasonsMask[i]) {
-                oneOrMore = true;
-            }
-        }
-        if (!oneOrMore) {
-            return false;
-        }
-
-        // Obtain and validate the certification path for the complete
-        // CRL issuer (if indirect CRL). If a key usage extension is present
-        // in the CRL issuer's certificate, verify that the cRLSign bit is set.
-        if (indirectCRL) {
-            X509CertSelector certSel = new X509CertSelector();
-            certSel.setSubject(crlIssuer.asX500Principal());
-            boolean[] crlSign = {false,false,false,false,false,false,true};
-            certSel.setKeyUsage(crlSign);
-
-            // Currently by default, forward builder does not enable
-            // subject/authority key identifier identifying for target
-            // certificate, instead, it only compares the CRL issuer and
-            // the target certificate subject. If the certificate of the
-            // delegated CRL issuer is a self-issued certificate, the
-            // builder is unable to find the proper CRL issuer by issuer
-            // name only, there is a potential dead loop on finding the
-            // proper issuer. It is of great help to narrow the target
-            // scope down to aware of authority key identifiers in the
-            // selector, for the purposes of breaking the dead loop.
-            AuthorityKeyIdentifierExtension akidext =
-                                            crlImpl.getAuthKeyIdExtension();
-            if (akidext != null) {
-                KeyIdentifier akid = (KeyIdentifier)akidext.get(akidext.KEY_ID);
-                if (akid != null) {
-                    DerOutputStream derout = new DerOutputStream();
-                    derout.putOctetString(akid.getIdentifier());
-                    certSel.setSubjectKeyIdentifier(derout.toByteArray());
-                }
-
-                SerialNumber asn =
-                    (SerialNumber)akidext.get(akidext.SERIAL_NUMBER);
-                if (asn != null) {
-                    certSel.setSerialNumber(asn.getNumber());
-                }
-                // the subject criterion will be set by builder automatically.
-            }
-
-            // by far, we have validated the previous certificate, we can
-            // trust it during validating the CRL issuer.
-            // Except the performance improvement, another benefit is to break
-            // the dead loop while looking for the issuer back and forth
-            // between the delegated self-issued certificate and its issuer.
-            Set<TrustAnchor> newTrustAnchors = new HashSet<>(trustAnchors);
-
-            if (prevKey != null) {
-                // Add the previous certificate as a trust anchor.
-                X500Principal principal = certImpl.getIssuerX500Principal();
-                TrustAnchor temporary =
-                        new TrustAnchor(principal, prevKey, null);
-                newTrustAnchors.add(temporary);
-            }
-
-            PKIXBuilderParameters params = null;
-            try {
-                params = new PKIXBuilderParameters(newTrustAnchors, certSel);
-            } catch (InvalidAlgorithmParameterException iape) {
-                throw new CRLException(iape);
-            }
-            params.setCertStores(certStores);
-            params.setSigProvider(provider);
-            params.setDate(validity);
-            try {
-                CertPathBuilder builder = CertPathBuilder.getInstance("PKIX");
-                PKIXCertPathBuilderResult result =
-                    (PKIXCertPathBuilderResult) builder.build(params);
-                prevKey = result.getPublicKey();
-            } catch (Exception e) {
-                throw new CRLException(e);
-            }
-        }
-
-        // check the crl signature algorithm
-        try {
-            AlgorithmChecker.check(prevKey, crl);
-        } catch (CertPathValidatorException cpve) {
-            if (debug != null) {
-                debug.println("CRL signature algorithm check failed: " + cpve);
-            }
-            return false;
-        }
-
-        // validate the signature on the CRL
-        try {
-            crl.verify(prevKey, provider);
-        } catch (Exception e) {
-            if (debug != null) {
-                debug.println("CRL signature failed to verify");
-            }
-            return false;
-        }
-
-        // reject CRL if any unresolved critical extensions remain in the CRL.
-        Set<String> unresCritExts = crl.getCriticalExtensionOIDs();
-        // remove any that we have processed
-        if (unresCritExts != null) {
-            unresCritExts.remove
-                (PKIXExtensions.IssuingDistributionPoint_Id.toString());
-            if (!unresCritExts.isEmpty()) {
-                if (debug != null) {
-                    debug.println("Unrecognized critical extension(s) in CRL: "
-                        + unresCritExts);
-                    Iterator<String> i = unresCritExts.iterator();
-                    while (i.hasNext())
-                        debug.println(i.next());
-                }
-                return false;
-            }
-        }
-
-        // update reasonsMask
-        for (int i=0; i < interimReasonsMask.length; i++) {
-            if (!reasonsMask[i] && interimReasonsMask[i]) {
-                reasonsMask[i] = true;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Append relative name to the issuer name and return a new
-     * GeneralNames object.
-     */
-    private static GeneralNames getFullNames(X500Name issuer, RDN rdn)
-        throws IOException {
-        List<RDN> rdns = new ArrayList<RDN>(issuer.rdns());
-        rdns.add(rdn);
-        X500Name fullName = new X500Name(rdns.toArray(new RDN[0]));
-        GeneralNames fullNames = new GeneralNames();
-        fullNames.add(new GeneralName(fullName));
-        return fullNames;
-    }
-
-    /** Verifies whether a CRL is issued by a certain certificate
-     *
-     * @param cert the certificate
-     * @param crl the CRL to be verified
-     * @param provider the name of the signature provider
-     */
-    private static boolean issues(X509CertImpl cert, X509CRLImpl crl,
-            String provider) throws IOException {
-
-        boolean matched = false;
-
-        AdaptableX509CertSelector issuerSelector =
-                                    new AdaptableX509CertSelector();
-
-        // check certificate's key usage
-        boolean[] usages = cert.getKeyUsage();
-        if (usages != null) {
-            usages[6] = true;       // cRLSign
-            issuerSelector.setKeyUsage(usages);
-        }
-
-        // check certificate's subject
-        X500Principal crlIssuer = crl.getIssuerX500Principal();
-        issuerSelector.setSubject(crlIssuer);
-
-        /*
-         * Facilitate certification path construction with authority
-         * key identifier and subject key identifier.
-         *
-         * In practice, conforming CAs MUST use the key identifier method,
-         * and MUST include authority key identifier extension in all CRLs
-         * issued. [section 5.2.1, RFC 2459]
-         */
-        AuthorityKeyIdentifierExtension crlAKID = crl.getAuthKeyIdExtension();
-        if (crlAKID != null) {
-            issuerSelector.parseAuthorityKeyIdentifierExtension(crlAKID);
-        }
-
-        matched = issuerSelector.match(cert);
-
-        // if AKID is unreliable, verify the CRL signature with the cert
-        if (matched && (crlAKID == null ||
-                cert.getAuthorityKeyIdentifierExtension() == null)) {
-            try {
-                crl.verify(cert.getPublicKey(), provider);
-                matched = true;
-            } catch (Exception e) {
-                matched = false;
-            }
-        }
-
-        return matched;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/ForwardBuilder.java b/ojluni/src/main/java/sun/security/provider/certpath/ForwardBuilder.java
deleted file mode 100755
index a070440..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/ForwardBuilder.java
+++ /dev/null
@@ -1,933 +0,0 @@
-/*
- * Copyright (c) 2000, 2012, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.io.IOException;
-import java.util.*;
-
-import java.security.GeneralSecurityException;
-import java.security.InvalidKeyException;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateException;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.PKIXReason;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.security.cert.PKIXBuilderParameters;
-import java.security.cert.PKIXCertPathChecker;
-import java.security.cert.TrustAnchor;
-import java.security.cert.X509Certificate;
-import java.security.cert.X509CertSelector;
-import javax.security.auth.x500.X500Principal;
-
-import sun.security.util.Debug;
-import sun.security.util.DerOutputStream;
-import sun.security.x509.AccessDescription;
-import sun.security.x509.AuthorityInfoAccessExtension;
-import sun.security.x509.PKIXExtensions;
-import sun.security.x509.PolicyMappingsExtension;
-import sun.security.x509.X500Name;
-import sun.security.x509.X509CertImpl;
-import sun.security.x509.X509CRLImpl;
-import sun.security.x509.AuthorityKeyIdentifierExtension;
-import sun.security.x509.KeyIdentifier;
-import sun.security.x509.SubjectKeyIdentifierExtension;
-import sun.security.x509.SerialNumber;
-import sun.security.x509.GeneralNames;
-import sun.security.x509.GeneralName;
-import sun.security.x509.GeneralNameInterface;
-import java.math.BigInteger;
-
-/**
- * This class represents a forward builder, which is able to retrieve
- * matching certificates from CertStores and verify a particular certificate
- * against a ForwardState.
- *
- * @since       1.4
- * @author      Yassir Elley
- * @author      Sean Mullan
- */
-class ForwardBuilder extends Builder {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-    private final Set<X509Certificate> trustedCerts;
-    private final Set<X500Principal> trustedSubjectDNs;
-    private final Set<TrustAnchor> trustAnchors;
-    private X509CertSelector eeSelector;
-    private AdaptableX509CertSelector caSelector;
-    private X509CertSelector caTargetSelector;
-    TrustAnchor trustAnchor;
-    private Comparator<X509Certificate> comparator;
-    private boolean searchAllCertStores = true;
-    private boolean onlyEECert = false;
-
-    /**
-     * Initialize the builder with the input parameters.
-     *
-     * @param params the parameter set used to build a certification path
-     */
-    ForwardBuilder(PKIXBuilderParameters buildParams,
-        X500Principal targetSubjectDN, boolean searchAllCertStores,
-        boolean onlyEECert)
-    {
-        super(buildParams, targetSubjectDN);
-
-        // populate sets of trusted certificates and subject DNs
-        trustAnchors = buildParams.getTrustAnchors();
-        trustedCerts = new HashSet<X509Certificate>(trustAnchors.size());
-        trustedSubjectDNs = new HashSet<X500Principal>(trustAnchors.size());
-        for (TrustAnchor anchor : trustAnchors) {
-            X509Certificate trustedCert = anchor.getTrustedCert();
-            if (trustedCert != null) {
-                trustedCerts.add(trustedCert);
-                trustedSubjectDNs.add(trustedCert.getSubjectX500Principal());
-            } else {
-                trustedSubjectDNs.add(anchor.getCA());
-            }
-        }
-        comparator = new PKIXCertComparator(trustedSubjectDNs);
-        this.searchAllCertStores = searchAllCertStores;
-        this.onlyEECert = onlyEECert;
-    }
-
-    /**
-     * Retrieves all certs from the specified CertStores that satisfy the
-     * requirements specified in the parameters and the current
-     * PKIX state (name constraints, policy constraints, etc).
-     *
-     * @param currentState the current state.
-     *        Must be an instance of <code>ForwardState</code>
-     * @param certStores list of CertStores
-     */
-    Collection<X509Certificate> getMatchingCerts
-        (State currentState, List<CertStore> certStores)
-        throws CertStoreException, CertificateException, IOException
-    {
-        if (debug != null) {
-            debug.println("ForwardBuilder.getMatchingCerts()...");
-        }
-
-        ForwardState currState = (ForwardState) currentState;
-
-        /*
-         * We store certs in a Set because we don't want duplicates.
-         * As each cert is added, it is sorted based on the PKIXCertComparator
-         * algorithm.
-         */
-        Set<X509Certificate> certs = new TreeSet<X509Certificate>(comparator);
-
-        /*
-         * Only look for EE certs if search has just started.
-         */
-        if (currState.isInitial()) {
-            getMatchingEECerts(currState, certStores, certs);
-        }
-        getMatchingCACerts(currState, certStores, certs);
-
-        return certs;
-    }
-
-    /*
-     * Retrieves all end-entity certificates which satisfy constraints
-     * and requirements specified in the parameters and PKIX state.
-     */
-    private void getMatchingEECerts(ForwardState currentState,
-        List<CertStore> certStores, Collection<X509Certificate> eeCerts)
-        throws IOException {
-
-        if (debug != null) {
-            debug.println("ForwardBuilder.getMatchingEECerts()...");
-        }
-        /*
-         * Compose a certificate matching rule to filter out
-         * certs which don't satisfy constraints
-         *
-         * First, retrieve clone of current target cert constraints,
-         * and then add more selection criteria based on current validation
-         * state. Since selector never changes, cache local copy & reuse.
-         */
-        if (eeSelector == null) {
-            eeSelector = (X509CertSelector) targetCertConstraints.clone();
-
-            /*
-             * Match on certificate validity date
-             */
-            eeSelector.setCertificateValid(date);
-
-            /*
-             * Policy processing optimizations
-             */
-            if (buildParams.isExplicitPolicyRequired()) {
-                eeSelector.setPolicy(getMatchingPolicies());
-            }
-            /*
-             * Require EE certs
-             */
-            eeSelector.setBasicConstraints(-2);
-        }
-
-        /* Retrieve matching EE certs from CertStores */
-        addMatchingCerts(eeSelector, certStores, eeCerts, searchAllCertStores);
-    }
-
-    /**
-     * Retrieves all CA certificates which satisfy constraints
-     * and requirements specified in the parameters and PKIX state.
-     */
-    private void getMatchingCACerts(ForwardState currentState,
-        List<CertStore> certStores, Collection<X509Certificate> caCerts)
-        throws IOException {
-
-        if (debug != null) {
-            debug.println("ForwardBuilder.getMatchingCACerts()...");
-        }
-        int initialSize = caCerts.size();
-
-        /*
-         * Compose a CertSelector to filter out
-         * certs which do not satisfy requirements.
-         */
-        X509CertSelector sel = null;
-
-        if (currentState.isInitial()) {
-            if (targetCertConstraints.getBasicConstraints() == -2) {
-                // no need to continue: this means we never can match a CA cert
-                return;
-            }
-
-            /* This means a CA is the target, so match on same stuff as
-             * getMatchingEECerts
-             */
-            if (debug != null) {
-                debug.println("ForwardBuilder.getMatchingCACerts(): ca is target");
-            }
-
-            if (caTargetSelector == null) {
-                caTargetSelector = (X509CertSelector)
-                    targetCertConstraints.clone();
-
-                /*
-                 * Since we don't check the validity period of trusted
-                 * certificates, please don't set the certificate valid
-                 * criterion unless the trusted certificate matching is
-                 * completed.
-                 */
-
-                /*
-                 * Policy processing optimizations
-                 */
-                if (buildParams.isExplicitPolicyRequired())
-                    caTargetSelector.setPolicy(getMatchingPolicies());
-            }
-
-            sel = caTargetSelector;
-        } else {
-
-            if (caSelector == null) {
-                caSelector = new AdaptableX509CertSelector();
-
-                /*
-                 * Since we don't check the validity period of trusted
-                 * certificates, please don't set the certificate valid
-                 * criterion unless the trusted certificate matching is
-                 * completed.
-                 */
-
-                /*
-                 * Policy processing optimizations
-                 */
-                if (buildParams.isExplicitPolicyRequired())
-                    caSelector.setPolicy(getMatchingPolicies());
-            }
-
-            /*
-             * Match on subject (issuer of previous cert)
-             */
-            caSelector.setSubject(currentState.issuerDN);
-
-            /*
-             * Match on subjectNamesTraversed (both DNs and AltNames)
-             * (checks that current cert's name constraints permit it
-             * to certify all the DNs and AltNames that have been traversed)
-             */
-            CertPathHelper.setPathToNames
-                (caSelector, currentState.subjectNamesTraversed);
-
-            /*
-             * Facilitate certification path construction with authority
-             * key identifier and subject key identifier.
-             */
-            AuthorityKeyIdentifierExtension akidext =
-                    currentState.cert.getAuthorityKeyIdentifierExtension();
-            caSelector.parseAuthorityKeyIdentifierExtension(akidext);
-
-            /*
-             * check the validity period
-             */
-            caSelector.setValidityPeriod(currentState.cert.getNotBefore(),
-                                            currentState.cert.getNotAfter());
-
-            sel = caSelector;
-        }
-
-        /*
-         * For compatibility, conservatively, we don't check the path
-         * length constraint of trusted anchors.  Please don't set the
-         * basic constraints criterion unless the trusted certificate
-         * matching is completed.
-         */
-        sel.setBasicConstraints(-1);
-
-        for (X509Certificate trustedCert : trustedCerts) {
-            if (sel.match(trustedCert)) {
-                if (debug != null) {
-                    debug.println("ForwardBuilder.getMatchingCACerts: "
-                        + "found matching trust anchor");
-                }
-                if (caCerts.add(trustedCert) && !searchAllCertStores) {
-                    return;
-                }
-            }
-        }
-
-        /*
-         * The trusted certificate matching is completed. We need to match
-         * on certificate validity date.
-         */
-        sel.setCertificateValid(date);
-
-        /*
-         * Require CA certs with a pathLenConstraint that allows
-         * at least as many CA certs that have already been traversed
-         */
-        sel.setBasicConstraints(currentState.traversedCACerts);
-
-        /*
-         * If we have already traversed as many CA certs as the maxPathLength
-         * will allow us to, then we don't bother looking through these
-         * certificate pairs. If maxPathLength has a value of -1, this
-         * means it is unconstrained, so we always look through the
-         * certificate pairs.
-         */
-        if (currentState.isInitial() ||
-           (buildParams.getMaxPathLength() == -1) ||
-           (buildParams.getMaxPathLength() > currentState.traversedCACerts))
-        {
-            if (addMatchingCerts(sel, certStores,
-                    caCerts, searchAllCertStores) && !searchAllCertStores) {
-                return;
-            }
-        }
-
-        if (!currentState.isInitial() && Builder.USE_AIA) {
-            // check for AuthorityInformationAccess extension
-            AuthorityInfoAccessExtension aiaExt =
-                currentState.cert.getAuthorityInfoAccessExtension();
-            if (aiaExt != null) {
-                getCerts(aiaExt, caCerts);
-            }
-        }
-
-        if (debug != null) {
-            int numCerts = caCerts.size() - initialSize;
-            debug.println("ForwardBuilder.getMatchingCACerts: found " +
-                numCerts + " CA certs");
-        }
-    }
-
-    /**
-     * Download Certificates from the given AIA and add them to the
-     * specified Collection.
-     */
-    private boolean getCerts(AuthorityInfoAccessExtension aiaExt,
-        Collection<X509Certificate> certs) {
-        if (Builder.USE_AIA == false) {
-            return false;
-        }
-        List<AccessDescription> adList = aiaExt.getAccessDescriptions();
-        if (adList == null || adList.isEmpty()) {
-            return false;
-        }
-
-        boolean add = false;
-        for (AccessDescription ad : adList) {
-            CertStore cs = URICertStore.getInstance(ad);
-            try {
-                if (certs.addAll((Collection<X509Certificate>)
-                    cs.getCertificates(caSelector))) {
-                    add = true;
-                    if (!searchAllCertStores) {
-                        return true;
-                    }
-                }
-            } catch (CertStoreException cse) {
-                if (debug != null) {
-                    debug.println("exception getting certs from CertStore:");
-                    cse.printStackTrace();
-                }
-                continue;
-            }
-        }
-        return add;
-    }
-
-    /**
-     * This inner class compares 2 PKIX certificates according to which
-     * should be tried first when building a path from the target.
-     * The preference order is as follows:
-     *
-     * Given trusted certificate(s):
-     *    Subject:ou=D,ou=C,o=B,c=A
-     *
-     * Preference order for current cert:
-     *
-     * 1) Issuer matches a trusted subject
-     *    Issuer: ou=D,ou=C,o=B,c=A
-     *
-     * 2) Issuer is a descendant of a trusted subject (in order of
-     *    number of links to the trusted subject)
-     *    a) Issuer: ou=E,ou=D,ou=C,o=B,c=A        [links=1]
-     *    b) Issuer: ou=F,ou=E,ou=D,ou=C,ou=B,c=A  [links=2]
-     *
-     * 3) Issuer is an ancestor of a trusted subject (in order of number of
-     *    links to the trusted subject)
-     *    a) Issuer: ou=C,o=B,c=A [links=1]
-     *    b) Issuer: o=B,c=A      [links=2]
-     *
-     * 4) Issuer is in the same namespace as a trusted subject (in order of
-     *    number of links to the trusted subject)
-     *    a) Issuer: ou=G,ou=C,o=B,c=A  [links=2]
-     *    b) Issuer: ou=H,o=B,c=A       [links=3]
-     *
-     * 5) Issuer is an ancestor of certificate subject (in order of number
-     *    of links to the certificate subject)
-     *    a) Issuer:  ou=K,o=J,c=A
-     *       Subject: ou=L,ou=K,o=J,c=A
-     *    b) Issuer:  o=J,c=A
-     *       Subject: ou=L,ou=K,0=J,c=A
-     *
-     * 6) Any other certificates
-     */
-    static class PKIXCertComparator implements Comparator<X509Certificate> {
-
-        final static String METHOD_NME = "PKIXCertComparator.compare()";
-
-        private final Set<X500Principal> trustedSubjectDNs;
-
-        PKIXCertComparator(Set<X500Principal> trustedSubjectDNs) {
-            this.trustedSubjectDNs = trustedSubjectDNs;
-        }
-
-        /**
-         * @param oCert1 First X509Certificate to be compared
-         * @param oCert2 Second X509Certificate to be compared
-         * @return -1 if oCert1 is preferable to oCert2, or
-         *            if oCert1 and oCert2 are equally preferable (in this
-         *            case it doesn't matter which is preferable, but we don't
-         *            return 0 because the comparator would behave strangely
-         *            when used in a SortedSet).
-         *          1 if oCert2 is preferable to oCert1
-         *          0 if oCert1.equals(oCert2). We only return 0 if the
-         *          certs are equal so that this comparator behaves
-         *          correctly when used in a SortedSet.
-         * @throws ClassCastException if either argument is not of type
-         * X509Certificate
-         */
-        public int compare(X509Certificate oCert1, X509Certificate oCert2) {
-
-            // if certs are the same, return 0
-            if (oCert1.equals(oCert2)) return 0;
-
-            X500Principal cIssuer1 = oCert1.getIssuerX500Principal();
-            X500Principal cIssuer2 = oCert2.getIssuerX500Principal();
-            X500Name cIssuer1Name = X500Name.asX500Name(cIssuer1);
-            X500Name cIssuer2Name = X500Name.asX500Name(cIssuer2);
-
-            if (debug != null) {
-                debug.println(METHOD_NME + " o1 Issuer:  " + cIssuer1);
-                debug.println(METHOD_NME + " o2 Issuer:  " + cIssuer2);
-            }
-
-            /* If one cert's issuer matches a trusted subject, then it is
-             * preferable.
-             */
-            if (debug != null) {
-                debug.println(METHOD_NME + " MATCH TRUSTED SUBJECT TEST...");
-            }
-
-            boolean m1 = trustedSubjectDNs.contains(cIssuer1);
-            boolean m2 = trustedSubjectDNs.contains(cIssuer2);
-            if (debug != null) {
-                debug.println(METHOD_NME + " m1: " + m1);
-                debug.println(METHOD_NME + " m2: " + m2);
-            }
-            if (m1 && m2) {
-                return -1;
-            } else if (m1) {
-                return -1;
-            } else if (m2) {
-                return 1;
-            }
-
-            /* If one cert's issuer is a naming descendant of a trusted subject,
-             * then it is preferable, in order of increasing naming distance.
-             */
-            if (debug != null) {
-                debug.println(METHOD_NME + " NAMING DESCENDANT TEST...");
-            }
-            for (X500Principal tSubject : trustedSubjectDNs) {
-                X500Name tSubjectName = X500Name.asX500Name(tSubject);
-                int distanceTto1 =
-                    Builder.distance(tSubjectName, cIssuer1Name, -1);
-                int distanceTto2 =
-                    Builder.distance(tSubjectName, cIssuer2Name, -1);
-                if (debug != null) {
-                    debug.println(METHOD_NME +" distanceTto1: " + distanceTto1);
-                    debug.println(METHOD_NME +" distanceTto2: " + distanceTto2);
-                }
-                if (distanceTto1 > 0 || distanceTto2 > 0) {
-                    if (distanceTto1 == distanceTto2) {
-                        return -1;
-                    } else if (distanceTto1 > 0 && distanceTto2 <= 0) {
-                        return -1;
-                    } else if (distanceTto1 <= 0 && distanceTto2 > 0) {
-                        return 1;
-                    } else if (distanceTto1 < distanceTto2) {
-                        return -1;
-                    } else {    // distanceTto1 > distanceTto2
-                        return 1;
-                    }
-                }
-            }
-
-            /* If one cert's issuer is a naming ancestor of a trusted subject,
-             * then it is preferable, in order of increasing naming distance.
-             */
-            if (debug != null) {
-                debug.println(METHOD_NME + " NAMING ANCESTOR TEST...");
-            }
-            for (X500Principal tSubject : trustedSubjectDNs) {
-                X500Name tSubjectName = X500Name.asX500Name(tSubject);
-
-                int distanceTto1 = Builder.distance
-                    (tSubjectName, cIssuer1Name, Integer.MAX_VALUE);
-                int distanceTto2 = Builder.distance
-                    (tSubjectName, cIssuer2Name, Integer.MAX_VALUE);
-                if (debug != null) {
-                    debug.println(METHOD_NME +" distanceTto1: " + distanceTto1);
-                    debug.println(METHOD_NME +" distanceTto2: " + distanceTto2);
-                }
-                if (distanceTto1 < 0 || distanceTto2 < 0) {
-                    if (distanceTto1 == distanceTto2) {
-                        return -1;
-                    } else if (distanceTto1 < 0 && distanceTto2 >= 0) {
-                        return -1;
-                    } else if (distanceTto1 >= 0 && distanceTto2 < 0) {
-                        return 1;
-                    } else if (distanceTto1 > distanceTto2) {
-                        return -1;
-                    } else {
-                        return 1;
-                    }
-                }
-            }
-
-            /* If one cert's issuer is in the same namespace as a trusted
-             * subject, then it is preferable, in order of increasing naming
-             * distance.
-             */
-            if (debug != null) {
-                debug.println(METHOD_NME +" SAME NAMESPACE AS TRUSTED TEST...");
-            }
-            for (X500Principal tSubject : trustedSubjectDNs) {
-                X500Name tSubjectName = X500Name.asX500Name(tSubject);
-                X500Name tAo1 = tSubjectName.commonAncestor(cIssuer1Name);
-                X500Name tAo2 = tSubjectName.commonAncestor(cIssuer2Name);
-                if (debug != null) {
-                    debug.println(METHOD_NME +" tAo1: " + String.valueOf(tAo1));
-                    debug.println(METHOD_NME +" tAo2: " + String.valueOf(tAo2));
-                }
-                if (tAo1 != null || tAo2 != null) {
-                    if (tAo1 != null && tAo2 != null) {
-                        int hopsTto1 = Builder.hops
-                            (tSubjectName, cIssuer1Name, Integer.MAX_VALUE);
-                        int hopsTto2 = Builder.hops
-                            (tSubjectName, cIssuer2Name, Integer.MAX_VALUE);
-                        if (debug != null) {
-                            debug.println(METHOD_NME +" hopsTto1: " + hopsTto1);
-                            debug.println(METHOD_NME +" hopsTto2: " + hopsTto2);
-                        }
-                        if (hopsTto1 == hopsTto2) {
-                        } else if (hopsTto1 > hopsTto2) {
-                            return 1;
-                        } else {  // hopsTto1 < hopsTto2
-                            return -1;
-                        }
-                    } else if (tAo1 == null) {
-                        return 1;
-                    } else {
-                        return -1;
-                    }
-                }
-            }
-
-
-            /* If one cert's issuer is an ancestor of that cert's subject,
-             * then it is preferable, in order of increasing naming distance.
-             */
-            if (debug != null) {
-                debug.println(METHOD_NME+" CERT ISSUER/SUBJECT COMPARISON TEST...");
-            }
-            X500Principal cSubject1 = oCert1.getSubjectX500Principal();
-            X500Principal cSubject2 = oCert2.getSubjectX500Principal();
-            X500Name cSubject1Name = X500Name.asX500Name(cSubject1);
-            X500Name cSubject2Name = X500Name.asX500Name(cSubject2);
-
-            if (debug != null) {
-                debug.println(METHOD_NME + " o1 Subject: " + cSubject1);
-                debug.println(METHOD_NME + " o2 Subject: " + cSubject2);
-            }
-            int distanceStoI1 = Builder.distance
-                (cSubject1Name, cIssuer1Name, Integer.MAX_VALUE);
-            int distanceStoI2 = Builder.distance
-                (cSubject2Name, cIssuer2Name, Integer.MAX_VALUE);
-            if (debug != null) {
-                debug.println(METHOD_NME + " distanceStoI1: " + distanceStoI1);
-                debug.println(METHOD_NME + " distanceStoI2: " + distanceStoI2);
-            }
-            if (distanceStoI2 > distanceStoI1) {
-                return -1;
-            } else if (distanceStoI2 < distanceStoI1) {
-                return 1;
-            }
-
-            /* Otherwise, certs are equally preferable.
-             */
-            if (debug != null) {
-                debug.println(METHOD_NME + " no tests matched; RETURN 0");
-            }
-            return -1;
-        }
-    }
-
-    /**
-     * Verifies a matching certificate.
-     *
-     * This method executes the validation steps in the PKIX path
-     * validation algorithm <draft-ietf-pkix-new-part1-08.txt> which were
-     * not satisfied by the selection criteria used by getCertificates()
-     * to find the certs and only the steps that can be executed in a
-     * forward direction (target to trust anchor). Those steps that can
-     * only be executed in a reverse direction are deferred until the
-     * complete path has been built.
-     *
-     * Trust anchor certs are not validated, but are used to verify the
-     * signature and revocation status of the previous cert.
-     *
-     * If the last certificate is being verified (the one whose subject
-     * matches the target subject, then steps in 6.1.4 of the PKIX
-     * Certification Path Validation algorithm are NOT executed,
-     * regardless of whether or not the last cert is an end-entity
-     * cert or not. This allows callers to certify CA certs as
-     * well as EE certs.
-     *
-     * @param cert the certificate to be verified
-     * @param currentState the current state against which the cert is verified
-     * @param certPathList the certPathList generated thus far
-     */
-    void verifyCert(X509Certificate cert, State currentState,
-        List<X509Certificate> certPathList) throws GeneralSecurityException
-    {
-        if (debug != null) {
-            debug.println("ForwardBuilder.verifyCert(SN: "
-                + Debug.toHexString(cert.getSerialNumber())
-                + "\n  Issuer: " + cert.getIssuerX500Principal() + ")"
-                + "\n  Subject: " + cert.getSubjectX500Principal() + ")");
-        }
-
-        ForwardState currState = (ForwardState)currentState;
-
-        // Don't bother to verify untrusted certificate more.
-        currState.untrustedChecker.check(cert, Collections.<String>emptySet());
-
-        /*
-         * check for looping - abort a loop if
-         * ((we encounter the same certificate twice) AND
-         * ((policyMappingInhibited = true) OR (no policy mapping
-         * extensions can be found between the occurences of the same
-         * certificate)))
-         */
-        if (certPathList != null) {
-            boolean policyMappingFound = false;
-            for (X509Certificate cpListCert : certPathList) {
-                X509CertImpl cpListCertImpl = X509CertImpl.toImpl(cpListCert);
-                PolicyMappingsExtension policyMappingsExt
-                    = cpListCertImpl.getPolicyMappingsExtension();
-                if (policyMappingsExt != null) {
-                    policyMappingFound = true;
-                }
-                if (debug != null) {
-                    debug.println("policyMappingFound = " + policyMappingFound);
-                }
-                if (cert.equals(cpListCert)) {
-                    if ((buildParams.isPolicyMappingInhibited()) ||
-                        (!policyMappingFound)) {
-                        if (debug != null) {
-                            debug.println("loop detected!!");
-                        }
-                        throw new CertPathValidatorException("loop detected");
-                    }
-                }
-            }
-        }
-
-        /* check if trusted cert */
-        boolean isTrustedCert = trustedCerts.contains(cert);
-
-        /* we don't perform any validation of the trusted cert */
-        if (!isTrustedCert) {
-            /*
-             * Check CRITICAL private extensions for user checkers that
-             * support forward checking (forwardCheckers) and remove
-             * ones we know how to check.
-             */
-            Set<String> unresCritExts = cert.getCriticalExtensionOIDs();
-            if (unresCritExts == null) {
-                unresCritExts = Collections.<String>emptySet();
-            }
-            for (PKIXCertPathChecker checker : currState.forwardCheckers) {
-                checker.check(cert, unresCritExts);
-            }
-
-            /*
-             * Remove extensions from user checkers that don't support
-             * forward checking. After this step, we will have removed
-             * all extensions that all user checkers are capable of
-             * processing.
-             */
-            for (PKIXCertPathChecker checker : buildParams.getCertPathCheckers()) {
-                if (!checker.isForwardCheckingSupported()) {
-                    Set<String> supportedExts = checker.getSupportedExtensions();
-                    if (supportedExts != null) {
-                        unresCritExts.removeAll(supportedExts);
-                    }
-                }
-            }
-
-            /*
-             * Look at the remaining extensions and remove any ones we know how
-             * to check. If there are any left, throw an exception!
-             */
-            if (!unresCritExts.isEmpty()) {
-                unresCritExts.remove(
-                    PKIXExtensions.BasicConstraints_Id.toString());
-                unresCritExts.remove(
-                    PKIXExtensions.NameConstraints_Id.toString());
-                unresCritExts.remove(
-                    PKIXExtensions.CertificatePolicies_Id.toString());
-                unresCritExts.remove(
-                    PKIXExtensions.PolicyMappings_Id.toString());
-                unresCritExts.remove(
-                    PKIXExtensions.PolicyConstraints_Id.toString());
-                unresCritExts.remove(
-                    PKIXExtensions.InhibitAnyPolicy_Id.toString());
-                unresCritExts.remove(
-                    PKIXExtensions.SubjectAlternativeName_Id.toString());
-                unresCritExts.remove(PKIXExtensions.KeyUsage_Id.toString());
-                unresCritExts.remove(
-                    PKIXExtensions.ExtendedKeyUsage_Id.toString());
-
-                if (!unresCritExts.isEmpty())
-                    throw new CertPathValidatorException
-                        ("Unrecognized critical extension(s)", null, null, -1,
-                         PKIXReason.UNRECOGNIZED_CRIT_EXT);
-            }
-        }
-
-        /*
-         * if this is the target certificate (init=true), then we are
-         * not able to do any more verification, so just return
-         */
-        if (currState.isInitial()) {
-            return;
-        }
-
-        /* we don't perform any validation of the trusted cert */
-        if (!isTrustedCert) {
-            /* Make sure this is a CA cert */
-            if (cert.getBasicConstraints() == -1) {
-                throw new CertificateException("cert is NOT a CA cert");
-            }
-
-            /*
-             * Check keyUsage extension
-             */
-            KeyChecker.verifyCAKeyUsage(cert);
-        }
-
-        /*
-         * the following checks are performed even when the cert
-         * is a trusted cert, since we are only extracting the
-         * subjectDN, and publicKey from the cert
-         * in order to verify a previous cert
-         */
-
-        /*
-         * Check revocation for the previous cert
-         */
-        if (buildParams.isRevocationEnabled()) {
-
-            // first off, see if this cert can authorize revocation...
-            if (CrlRevocationChecker.certCanSignCrl(cert)) {
-                // And then check to be sure no key requiring key parameters
-                // has been encountered
-                if (!currState.keyParamsNeeded())
-                    // If all that checks out, we can check the
-                    // revocation status of the cert. Otherwise,
-                    // we'll just wait until the end.
-                    currState.crlChecker.check(currState.cert,
-                                               cert.getPublicKey(),
-                                               true);
-            }
-        }
-
-        /*
-         * Check signature only if no key requiring key parameters has been
-         * encountered.
-         */
-        if (!currState.keyParamsNeeded()) {
-            (currState.cert).verify(cert.getPublicKey(),
-                                    buildParams.getSigProvider());
-        }
-    }
-
-    /**
-     * Verifies whether the input certificate completes the path.
-     * Checks the cert against each trust anchor that was specified, in order,
-     * and returns true as soon as it finds a valid anchor.
-     * Returns true if the cert matches a trust anchor specified as a
-     * certificate or if the cert verifies with a trust anchor that
-     * was specified as a trusted {pubkey, caname} pair. Returns false if none
-     * of the trust anchors are valid for this cert.
-     *
-     * @param cert the certificate to test
-     * @return a boolean value indicating whether the cert completes the path.
-     */
-    boolean isPathCompleted(X509Certificate cert) {
-        for (TrustAnchor anchor : trustAnchors) {
-            if (anchor.getTrustedCert() != null) {
-                if (cert.equals(anchor.getTrustedCert())) {
-                    this.trustAnchor = anchor;
-                    return true;
-                } else {
-                    continue;
-                }
-            } else {
-                X500Principal principal = anchor.getCA();
-                java.security.PublicKey publicKey = anchor.getCAPublicKey();
-
-                if (principal != null && publicKey != null &&
-                        principal.equals(cert.getSubjectX500Principal())) {
-                    if (publicKey.equals(cert.getPublicKey())) {
-                        // the cert itself is a trust anchor
-                        this.trustAnchor = anchor;
-                        return true;
-                    }
-                    // else, it is a self-issued certificate of the anchor
-                }
-
-                // Check subject/issuer name chaining
-                if (principal == null ||
-                        !principal.equals(cert.getIssuerX500Principal())) {
-                    continue;
-                }
-            }
-
-            /* Check revocation if it is enabled */
-            if (buildParams.isRevocationEnabled()) {
-                try {
-                    CrlRevocationChecker crlChecker = new CrlRevocationChecker
-                        (anchor, buildParams, null, onlyEECert);
-                    crlChecker.check(cert, anchor.getCAPublicKey(), true);
-                } catch (CertPathValidatorException cpve) {
-                    if (debug != null) {
-                        debug.println("ForwardBuilder.isPathCompleted() cpve");
-                        cpve.printStackTrace();
-                    }
-                    continue;
-                }
-            }
-
-            /*
-             * Check signature
-             */
-            try {
-                // NOTE: the DSA public key in the buildParams may lack
-                // parameters, yet there is no key to inherit the parameters
-                // from.  This is probably such a rare case that it is not worth
-                // trying to detect the situation earlier.
-                cert.verify(anchor.getCAPublicKey(),
-                            buildParams.getSigProvider());
-            } catch (InvalidKeyException ike) {
-                if (debug != null) {
-                    debug.println("ForwardBuilder.isPathCompleted() invalid "
-                        + "DSA key found");
-                }
-                continue;
-            } catch (Exception e){
-                if (debug != null) {
-                    debug.println("ForwardBuilder.isPathCompleted() " +
-                        "unexpected exception");
-                    e.printStackTrace();
-                }
-                continue;
-            }
-
-            this.trustAnchor = anchor;
-            return true;
-        }
-
-        return false;
-    }
-
-    /** Adds the certificate to the certPathList
-     *
-     * @param cert the certificate to be added
-     * @param certPathList the certification path list
-     */
-    void addCertToPath(X509Certificate cert,
-        LinkedList<X509Certificate> certPathList) {
-        certPathList.addFirst(cert);
-    }
-
-    /** Removes final certificate from the certPathList
-     *
-     * @param certPathList the certification path list
-     */
-    void removeFinalCertFromPath(LinkedList<X509Certificate> certPathList) {
-        certPathList.removeFirst();
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/ForwardState.java b/ojluni/src/main/java/sun/security/provider/certpath/ForwardState.java
deleted file mode 100755
index 7a7d393..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/ForwardState.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Copyright (c) 2000, 2012, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.io.IOException;
-import java.security.PublicKey;
-import java.security.cert.CertificateException;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.PKIXCertPathChecker;
-import java.security.cert.X509Certificate;
-import java.security.interfaces.DSAPublicKey;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import javax.security.auth.x500.X500Principal;
-
-import sun.security.util.Debug;
-import sun.security.x509.SubjectAlternativeNameExtension;
-import sun.security.x509.GeneralNames;
-import sun.security.x509.GeneralName;
-import sun.security.x509.GeneralNameInterface;
-import sun.security.x509.X500Name;
-import sun.security.x509.X509CertImpl;
-
-/**
- * A specification of a forward PKIX validation state
- * which is initialized by each build and updated each time a
- * certificate is added to the current path.
- * @since       1.4
- * @author      Yassir Elley
- */
-class ForwardState implements State {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-
-    /* The issuer DN of the last cert in the path */
-    X500Principal issuerDN;
-
-    /* The last cert in the path */
-    X509CertImpl cert;
-
-    /* The set of subjectDNs and subjectAltNames of all certs in the path */
-    HashSet<GeneralNameInterface> subjectNamesTraversed;
-
-    /*
-     * The number of intermediate CA certs which have been traversed so
-     * far in the path
-     */
-    int traversedCACerts;
-
-    /* Flag indicating if state is initial (path is just starting) */
-    private boolean init = true;
-
-    /* the checker used for revocation status */
-    public CrlRevocationChecker crlChecker;
-
-    /* the untrusted certificates checker */
-    UntrustedChecker untrustedChecker;
-
-    /* The list of user-defined checkers that support forward checking */
-    ArrayList<PKIXCertPathChecker> forwardCheckers;
-
-    /* Flag indicating if key needing to inherit key parameters has been
-     * encountered.
-     */
-    boolean keyParamsNeededFlag = false;
-
-    /**
-     * Returns a boolean flag indicating if the state is initial
-     * (just starting)
-     *
-     * @return boolean flag indicating if the state is initial (just starting)
-     */
-    public boolean isInitial() {
-        return init;
-    }
-
-    /**
-     * Return boolean flag indicating whether a public key that needs to inherit
-     * key parameters has been encountered.
-     *
-     * @return boolean true if key needing to inherit parameters has been
-     * encountered; false otherwise.
-     */
-    public boolean keyParamsNeeded() {
-        return keyParamsNeededFlag;
-    }
-
-    /**
-     * Display state for debugging purposes
-     */
-    public String toString() {
-        StringBuffer sb = new StringBuffer();
-        try {
-            sb.append("State [");
-            sb.append("\n  issuerDN of last cert: " + issuerDN);
-            sb.append("\n  traversedCACerts: " + traversedCACerts);
-            sb.append("\n  init: " + String.valueOf(init));
-            sb.append("\n  keyParamsNeeded: "
-                + String.valueOf(keyParamsNeededFlag));
-            sb.append("\n  subjectNamesTraversed: \n" + subjectNamesTraversed);
-            sb.append("]\n");
-        } catch (Exception e) {
-            if (debug != null) {
-                debug.println("ForwardState.toString() unexpected exception");
-                e.printStackTrace();
-            }
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Initialize the state.
-     *
-     * @param certPathCheckers the list of user-defined PKIXCertPathCheckers
-     */
-    public void initState(List<PKIXCertPathChecker> certPathCheckers)
-        throws CertPathValidatorException
-    {
-        subjectNamesTraversed = new HashSet<GeneralNameInterface>();
-        traversedCACerts = 0;
-
-        /*
-         * Populate forwardCheckers with every user-defined checker
-         * that supports forward checking and initialize the forwardCheckers
-         */
-        forwardCheckers = new ArrayList<PKIXCertPathChecker>();
-        if (certPathCheckers != null) {
-            for (PKIXCertPathChecker checker : certPathCheckers) {
-                if (checker.isForwardCheckingSupported()) {
-                    checker.init(true);
-                    forwardCheckers.add(checker);
-                }
-            }
-        }
-
-        init = true;
-    }
-
-    /**
-     * Update the state with the next certificate added to the path.
-     *
-     * @param cert the certificate which is used to update the state
-     */
-    public void updateState(X509Certificate cert)
-        throws CertificateException, IOException, CertPathValidatorException {
-
-        if (cert == null)
-            return;
-
-        X509CertImpl icert = X509CertImpl.toImpl(cert);
-
-        /* see if certificate key has null parameters */
-        PublicKey newKey = icert.getPublicKey();
-        if (newKey instanceof DSAPublicKey &&
-            ((DSAPublicKey)newKey).getParams() == null) {
-            keyParamsNeededFlag = true;
-        }
-
-        /* update certificate */
-        this.cert = icert;
-
-        /* update issuer DN */
-        issuerDN = cert.getIssuerX500Principal();
-
-        if (!X509CertImpl.isSelfIssued(cert)) {
-
-            /*
-             * update traversedCACerts only if this is a non-self-issued
-             * intermediate CA cert
-             */
-            if (!init && cert.getBasicConstraints() != -1) {
-                traversedCACerts++;
-            }
-        }
-
-        /* update subjectNamesTraversed only if this is the EE cert or if
-           this cert is not self-issued */
-        if (init || !X509CertImpl.isSelfIssued(cert)){
-            X500Principal subjName = cert.getSubjectX500Principal();
-            subjectNamesTraversed.add(X500Name.asX500Name(subjName));
-
-            try {
-                SubjectAlternativeNameExtension subjAltNameExt
-                    = icert.getSubjectAlternativeNameExtension();
-                if (subjAltNameExt != null) {
-                    GeneralNames gNames = (GeneralNames)
-                        subjAltNameExt.get(SubjectAlternativeNameExtension.SUBJECT_NAME);
-                    for (Iterator<GeneralName> t = gNames.iterator();
-                                t.hasNext(); ) {
-                        GeneralNameInterface gName = t.next().getName();
-                        subjectNamesTraversed.add(gName);
-                    }
-                }
-            } catch (Exception e) {
-                if (debug != null) {
-                    debug.println("ForwardState.updateState() unexpected "
-                        + "exception");
-                    e.printStackTrace();
-                }
-                throw new CertPathValidatorException(e);
-            }
-        }
-
-        init = false;
-    }
-
-    /*
-     * Clone current state. The state is cloned as each cert is
-     * added to the path. This is necessary if backtracking occurs,
-     * and a prior state needs to be restored.
-     *
-     * Note that this is a SMART clone. Not all fields are fully copied,
-     * because some of them will
-     * not have their contents modified by subsequent calls to updateState.
-     */
-    public Object clone() {
-        try {
-            ForwardState clonedState = (ForwardState) super.clone();
-
-            /* clone checkers, if cloneable */
-            clonedState.forwardCheckers = (ArrayList<PKIXCertPathChecker>)
-                                                forwardCheckers.clone();
-            ListIterator<PKIXCertPathChecker> li =
-                                clonedState.forwardCheckers.listIterator();
-            while (li.hasNext()) {
-                PKIXCertPathChecker checker = li.next();
-                if (checker instanceof Cloneable) {
-                    li.set((PKIXCertPathChecker)checker.clone());
-                }
-            }
-
-            /*
-             * Shallow copy traversed names. There is no need to
-             * deep copy contents, since the elements of the Set
-             * are never modified by subsequent calls to updateState().
-             */
-            clonedState.subjectNamesTraversed
-                = (HashSet<GeneralNameInterface>)subjectNamesTraversed.clone();
-            return clonedState;
-        } catch (CloneNotSupportedException e) {
-            throw new InternalError(e.toString());
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/IndexedCollectionCertStore.java b/ojluni/src/main/java/sun/security/provider/certpath/IndexedCollectionCertStore.java
deleted file mode 100755
index 167e286..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/IndexedCollectionCertStore.java
+++ /dev/null
@@ -1,411 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.util.*;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.cert.*;
-
-import javax.security.auth.x500.X500Principal;
-
-/**
- * A <code>CertStore</code> that retrieves <code>Certificates</code> and
- * <code>CRL</code>s from a <code>Collection</code>.
- * <p>
- * This implementation is functionally equivalent to CollectionCertStore
- * with two differences:
- * <ol>
- * <li>Upon construction, the elements in the specified Collection are
- * partially indexed. X509Certificates are indexed by subject, X509CRLs
- * by issuer, non-X509 Certificates and CRLs are copied without indexing,
- * other objects are ignored. This increases CertStore construction time
- * but allows significant speedups for searches which specify the indexed
- * attributes, in particular for large Collections (reduction from linear
- * time to effectively constant time). Searches for non-indexed queries
- * are as fast (or marginally faster) than for the standard
- * CollectionCertStore. Certificate subjects and CRL issuers
- * were found to be specified in most searches used internally by the
- * CertPath provider. Additional attributes could indexed if there are
- * queries that justify the effort.
- *
- * <li>Changes to the specified Collection after construction time are
- * not detected and ignored. This is because there is no way to efficiently
- * detect if a Collection has been modified, a full traversal would be
- * required. That would degrade lookup performance to linear time and
- * eliminated the benefit of indexing. We may fix this via the introduction
- * of new public APIs in the future.
- * </ol>
- * <p>
- * Before calling the {@link #engineGetCertificates engineGetCertificates} or
- * {@link #engineGetCRLs engineGetCRLs} methods, the
- * {@link #CollectionCertStore(CertStoreParameters)
- * CollectionCertStore(CertStoreParameters)} constructor is called to
- * create the <code>CertStore</code> and establish the
- * <code>Collection</code> from which <code>Certificate</code>s and
- * <code>CRL</code>s will be retrieved. If the specified
- * <code>Collection</code> contains an object that is not a
- * <code>Certificate</code> or <code>CRL</code>, that object will be
- * ignored.
- * <p>
- * <b>Concurrent Access</b>
- * <p>
- * As described in the javadoc for <code>CertStoreSpi</code>, the
- * <code>engineGetCertificates</code> and <code>engineGetCRLs</code> methods
- * must be thread-safe. That is, multiple threads may concurrently
- * invoke these methods on a single <code>CollectionCertStore</code>
- * object (or more than one) with no ill effects.
- * <p>
- * This is achieved by requiring that the <code>Collection</code> passed to
- * the {@link #CollectionCertStore(CertStoreParameters)
- * CollectionCertStore(CertStoreParameters)} constructor (via the
- * <code>CollectionCertStoreParameters</code> object) must have fail-fast
- * iterators. Simultaneous modifications to the <code>Collection</code> can thus be
- * detected and certificate or CRL retrieval can be retried. The fact that
- * <code>Certificate</code>s and <code>CRL</code>s must be thread-safe is also
- * essential.
- *
- * @see java.security.cert.CertStore
- * @see CollectionCertStore
- *
- * @author Andreas Sterbenz
- */
-public class IndexedCollectionCertStore extends CertStoreSpi {
-
-    /**
-     * Map X500Principal(subject) -> X509Certificate | List of X509Certificate
-     */
-    private Map<X500Principal, Object> certSubjects;
-    /**
-     * Map X500Principal(issuer) -> X509CRL | List of X509CRL
-     */
-    private Map<X500Principal, Object> crlIssuers;
-    /**
-     * Sets of non-X509 certificates and CRLs
-     */
-    private Set<Certificate> otherCertificates;
-    private Set<CRL> otherCRLs;
-
-    /**
-     * Creates a <code>CertStore</code> with the specified parameters.
-     * For this class, the parameters object must be an instance of
-     * <code>CollectionCertStoreParameters</code>.
-     *
-     * @param params the algorithm parameters
-     * @exception InvalidAlgorithmParameterException if params is not an
-     *   instance of <code>CollectionCertStoreParameters</code>
-     */
-    public IndexedCollectionCertStore(CertStoreParameters params)
-            throws InvalidAlgorithmParameterException {
-        super(params);
-        if (!(params instanceof CollectionCertStoreParameters)) {
-            throw new InvalidAlgorithmParameterException(
-                "parameters must be CollectionCertStoreParameters");
-        }
-        Collection<?> coll = ((CollectionCertStoreParameters)params).getCollection();
-        if (coll == null) {
-            throw new InvalidAlgorithmParameterException
-                                        ("Collection must not be null");
-        }
-        buildIndex(coll);
-    }
-
-    /**
-     * Index the specified Collection copying all references to Certificates
-     * and CRLs.
-     */
-    private void buildIndex(Collection<?> coll) {
-        certSubjects = new HashMap<X500Principal, Object>();
-        crlIssuers = new HashMap<X500Principal, Object>();
-        otherCertificates = null;
-        otherCRLs = null;
-        for (Object obj : coll) {
-            if (obj instanceof X509Certificate) {
-                indexCertificate((X509Certificate)obj);
-            } else if (obj instanceof X509CRL) {
-                indexCRL((X509CRL)obj);
-            } else if (obj instanceof Certificate) {
-                if (otherCertificates == null) {
-                    otherCertificates = new HashSet<Certificate>();
-                }
-                otherCertificates.add((Certificate)obj);
-            } else if (obj instanceof CRL) {
-                if (otherCRLs == null) {
-                    otherCRLs = new HashSet<CRL>();
-                }
-                otherCRLs.add((CRL)obj);
-            } else {
-                // ignore
-            }
-        }
-        if (otherCertificates == null) {
-            otherCertificates = Collections.<Certificate>emptySet();
-        }
-        if (otherCRLs == null) {
-            otherCRLs = Collections.<CRL>emptySet();
-        }
-    }
-
-    /**
-     * Add an X509Certificate to the index.
-     */
-    private void indexCertificate(X509Certificate cert) {
-        X500Principal subject = cert.getSubjectX500Principal();
-        Object oldEntry = certSubjects.put(subject, cert);
-        if (oldEntry != null) { // assume this is unlikely
-            if (oldEntry instanceof X509Certificate) {
-                if (cert.equals(oldEntry)) {
-                    return;
-                }
-                List<X509Certificate> list = new ArrayList<X509Certificate>(2);
-                list.add(cert);
-                list.add((X509Certificate)oldEntry);
-                certSubjects.put(subject, list);
-            } else {
-                List<X509Certificate> list = (List<X509Certificate>)oldEntry;
-                if (list.contains(cert) == false) {
-                    list.add(cert);
-                }
-                certSubjects.put(subject, list);
-            }
-        }
-    }
-
-    /**
-     * Add an X509CRL to the index.
-     */
-    private void indexCRL(X509CRL crl) {
-        X500Principal issuer = crl.getIssuerX500Principal();
-        Object oldEntry = crlIssuers.put(issuer, crl);
-        if (oldEntry != null) { // assume this is unlikely
-            if (oldEntry instanceof X509CRL) {
-                if (crl.equals(oldEntry)) {
-                    return;
-                }
-                List<X509CRL> list = new ArrayList<X509CRL>(2);
-                list.add(crl);
-                list.add((X509CRL)oldEntry);
-                crlIssuers.put(issuer, list);
-            } else {
-                List<X509CRL> list = (List<X509CRL>)oldEntry;
-                if (list.contains(crl) == false) {
-                    list.add(crl);
-                }
-                crlIssuers.put(issuer, list);
-            }
-        }
-    }
-
-    /**
-     * Returns a <code>Collection</code> of <code>Certificate</code>s that
-     * match the specified selector. If no <code>Certificate</code>s
-     * match the selector, an empty <code>Collection</code> will be returned.
-     *
-     * @param selector a <code>CertSelector</code> used to select which
-     *  <code>Certificate</code>s should be returned. Specify <code>null</code>
-     *  to return all <code>Certificate</code>s.
-     * @return a <code>Collection</code> of <code>Certificate</code>s that
-     *         match the specified selector
-     * @throws CertStoreException if an exception occurs
-     */
-    public Collection<? extends Certificate> engineGetCertificates(CertSelector selector)
-            throws CertStoreException {
-
-        // no selector means match all
-        if (selector == null) {
-            Set<Certificate> matches = new HashSet<Certificate>();
-            matchX509Certs(new X509CertSelector(), matches);
-            matches.addAll(otherCertificates);
-            return matches;
-        }
-
-        if (selector instanceof X509CertSelector == false) {
-            Set<Certificate> matches = new HashSet<Certificate>();
-            matchX509Certs(selector, matches);
-            for (Certificate cert : otherCertificates) {
-                if (selector.match(cert)) {
-                    matches.add(cert);
-                }
-            }
-            return matches;
-        }
-
-        if (certSubjects.isEmpty()) {
-            return Collections.<X509Certificate>emptySet();
-        }
-        X509CertSelector x509Selector = (X509CertSelector)selector;
-        // see if the subject is specified
-        X500Principal subject;
-        X509Certificate matchCert = x509Selector.getCertificate();
-        if (matchCert != null) {
-            subject = matchCert.getSubjectX500Principal();
-        } else {
-            subject = x509Selector.getSubject();
-        }
-        if (subject != null) {
-            // yes, narrow down candidates to indexed possibilities
-            Object entry = certSubjects.get(subject);
-            if (entry == null) {
-                return Collections.<X509Certificate>emptySet();
-            }
-            if (entry instanceof X509Certificate) {
-                X509Certificate x509Entry = (X509Certificate)entry;
-                if (x509Selector.match(x509Entry)) {
-                    return Collections.singleton(x509Entry);
-                } else {
-                    return Collections.<X509Certificate>emptySet();
-                }
-            } else {
-                List<X509Certificate> list = (List<X509Certificate>)entry;
-                Set<X509Certificate> matches = new HashSet<X509Certificate>(16);
-                for (X509Certificate cert : list) {
-                    if (x509Selector.match(cert)) {
-                        matches.add(cert);
-                    }
-                }
-                return matches;
-            }
-        }
-        // cannot use index, iterate all
-        Set<Certificate> matches = new HashSet<Certificate>(16);
-        matchX509Certs(x509Selector, matches);
-        return matches;
-    }
-
-    /**
-     * Iterate through all the X509Certificates and add matches to the
-     * collection.
-     */
-    private void matchX509Certs(CertSelector selector,
-        Collection<Certificate> matches) {
-
-        for (Object obj : certSubjects.values()) {
-            if (obj instanceof X509Certificate) {
-                X509Certificate cert = (X509Certificate)obj;
-                if (selector.match(cert)) {
-                    matches.add(cert);
-                }
-            } else {
-                List<X509Certificate> list = (List<X509Certificate>)obj;
-                for (X509Certificate cert : list) {
-                    if (selector.match(cert)) {
-                        matches.add(cert);
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Returns a <code>Collection</code> of <code>CRL</code>s that
-     * match the specified selector. If no <code>CRL</code>s
-     * match the selector, an empty <code>Collection</code> will be returned.
-     *
-     * @param selector a <code>CRLSelector</code> used to select which
-     *  <code>CRL</code>s should be returned. Specify <code>null</code>
-     *  to return all <code>CRL</code>s.
-     * @return a <code>Collection</code> of <code>CRL</code>s that
-     *         match the specified selector
-     * @throws CertStoreException if an exception occurs
-     */
-    public Collection<CRL> engineGetCRLs(CRLSelector selector)
-            throws CertStoreException {
-
-        if (selector == null) {
-            Set<CRL> matches = new HashSet<CRL>();
-            matchX509CRLs(new X509CRLSelector(), matches);
-            matches.addAll(otherCRLs);
-            return matches;
-        }
-
-        if (selector instanceof X509CRLSelector == false) {
-            Set<CRL> matches = new HashSet<CRL>();
-            matchX509CRLs(selector, matches);
-            for (CRL crl : otherCRLs) {
-                if (selector.match(crl)) {
-                    matches.add(crl);
-                }
-            }
-            return matches;
-        }
-
-        if (crlIssuers.isEmpty()) {
-            return Collections.<CRL>emptySet();
-        }
-        X509CRLSelector x509Selector = (X509CRLSelector)selector;
-        // see if the issuer is specified
-        Collection<X500Principal> issuers = x509Selector.getIssuers();
-        if (issuers != null) {
-            HashSet<CRL> matches = new HashSet<CRL>(16);
-            for (X500Principal issuer : issuers) {
-                Object entry = crlIssuers.get(issuer);
-                if (entry == null) {
-                    // empty
-                } else if (entry instanceof X509CRL) {
-                    X509CRL crl = (X509CRL)entry;
-                    if (x509Selector.match(crl)) {
-                        matches.add(crl);
-                    }
-                } else { // List
-                    List<X509CRL> list = (List<X509CRL>)entry;
-                    for (X509CRL crl : list) {
-                        if (x509Selector.match(crl)) {
-                            matches.add(crl);
-                        }
-                    }
-                }
-            }
-            return matches;
-        }
-        // cannot use index, iterate all
-        Set<CRL> matches = new HashSet<CRL>(16);
-        matchX509CRLs(x509Selector, matches);
-        return matches;
-    }
-
-    /**
-     * Iterate through all the X509CRLs and add matches to the
-     * collection.
-     */
-    private void matchX509CRLs(CRLSelector selector, Collection<CRL> matches) {
-        for (Object obj : crlIssuers.values()) {
-            if (obj instanceof X509CRL) {
-                X509CRL crl = (X509CRL)obj;
-                if (selector.match(crl)) {
-                    matches.add(crl);
-                }
-            } else {
-                List<X509CRL> list = (List<X509CRL>)obj;
-                for (X509CRL crl : list) {
-                    if (selector.match(crl)) {
-                        matches.add(crl);
-                    }
-                }
-            }
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/KeyChecker.java b/ojluni/src/main/java/sun/security/provider/certpath/KeyChecker.java
deleted file mode 100755
index 1619efb..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/KeyChecker.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (c) 2000, 2008, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.util.*;
-import java.security.cert.*;
-import java.security.cert.PKIXReason;
-
-import sun.security.util.Debug;
-import sun.security.x509.PKIXExtensions;
-
-/**
- * KeyChecker is a <code>PKIXCertPathChecker</code> that checks that the
- * keyCertSign bit is set in the keyUsage extension in an intermediate CA
- * certificate. It also checks whether the final certificate in a
- * certification path meets the specified target constraints specified as
- * a CertSelector in the PKIXParameters passed to the CertPathValidator.
- *
- * @since       1.4
- * @author      Yassir Elley
- */
-class KeyChecker extends PKIXCertPathChecker {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-    // the index of keyCertSign in the boolean KeyUsage array
-    private static final int keyCertSign = 5;
-    private final int certPathLen;
-    private CertSelector targetConstraints;
-    private int remainingCerts;
-
-    private Set<String> supportedExts;
-
-    /**
-     * Default Constructor
-     *
-     * @param certPathLen allowable cert path length
-     * @param targetCertSel a CertSelector object specifying the constraints
-     * on the target certificate
-     */
-    KeyChecker(int certPathLen, CertSelector targetCertSel)
-        throws CertPathValidatorException
-    {
-        this.certPathLen = certPathLen;
-        this.targetConstraints = targetCertSel;
-        init(false);
-    }
-
-    /**
-     * Initializes the internal state of the checker from parameters
-     * specified in the constructor
-     */
-    public void init(boolean forward) throws CertPathValidatorException {
-        if (!forward) {
-            remainingCerts = certPathLen;
-        } else {
-            throw new CertPathValidatorException
-                ("forward checking not supported");
-        }
-    }
-
-    public final boolean isForwardCheckingSupported() {
-        return false;
-    }
-
-    public Set<String> getSupportedExtensions() {
-        if (supportedExts == null) {
-            supportedExts = new HashSet<String>();
-            supportedExts.add(PKIXExtensions.KeyUsage_Id.toString());
-            supportedExts.add(PKIXExtensions.ExtendedKeyUsage_Id.toString());
-            supportedExts.add(PKIXExtensions.SubjectAlternativeName_Id.toString());
-            supportedExts = Collections.unmodifiableSet(supportedExts);
-        }
-        return supportedExts;
-    }
-
-    /**
-     * Checks that keyUsage and target constraints are satisfied by
-     * the specified certificate.
-     *
-     * @param cert the Certificate
-     * @param unresolvedCritExts the unresolved critical extensions
-     * @exception CertPathValidatorException Exception thrown if certificate
-     * does not verify
-     */
-    public void check(Certificate cert, Collection<String> unresCritExts)
-        throws CertPathValidatorException
-    {
-        X509Certificate currCert = (X509Certificate) cert;
-
-        remainingCerts--;
-
-        // if final certificate, check that target constraints are satisfied
-        if (remainingCerts == 0) {
-            if ((targetConstraints != null) &&
-                (targetConstraints.match(currCert) == false)) {
-                throw new CertPathValidatorException("target certificate " +
-                    "constraints check failed");
-            }
-        } else {
-            // otherwise, verify that keyCertSign bit is set in CA certificate
-            verifyCAKeyUsage(currCert);
-        }
-
-        // remove the extensions that we have checked
-        if (unresCritExts != null && !unresCritExts.isEmpty()) {
-            unresCritExts.remove(PKIXExtensions.KeyUsage_Id.toString());
-            unresCritExts.remove(PKIXExtensions.ExtendedKeyUsage_Id.toString());
-            unresCritExts.remove(
-                PKIXExtensions.SubjectAlternativeName_Id.toString());
-        }
-    }
-
-    /**
-     * Static method to verify that the key usage and extended key usage
-     * extension in a CA cert. The key usage extension, if present, must
-     * assert the keyCertSign bit. The extended key usage extension, if
-     * present, must include anyExtendedKeyUsage.
-     */
-    static void verifyCAKeyUsage(X509Certificate cert)
-            throws CertPathValidatorException {
-        String msg = "CA key usage";
-        if (debug != null) {
-            debug.println("KeyChecker.verifyCAKeyUsage() ---checking " + msg
-                + "...");
-        }
-
-        boolean[] keyUsageBits = cert.getKeyUsage();
-
-        // getKeyUsage returns null if the KeyUsage extension is not present
-        // in the certificate - in which case there is nothing to check
-        if (keyUsageBits == null) {
-            return;
-        }
-
-        // throw an exception if the keyCertSign bit is not set
-        if (!keyUsageBits[keyCertSign]) {
-            throw new CertPathValidatorException
-                (msg + " check failed: keyCertSign bit is not set", null,
-                 null, -1, PKIXReason.INVALID_KEY_USAGE);
-        }
-
-        if (debug != null) {
-            debug.println("KeyChecker.verifyCAKeyUsage() " + msg
-                + " verified.");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/OCSP.java b/ojluni/src/main/java/sun/security/provider/certpath/OCSP.java
deleted file mode 100755
index 831b746..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/OCSP.java
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-package sun.security.provider.certpath;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.URI;
-import java.net.URL;
-import java.net.HttpURLConnection;
-import java.security.cert.CertificateException;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.CRLReason;
-import java.security.cert.Extension;
-import java.security.cert.X509Certificate;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import static sun.security.provider.certpath.OCSPResponse.*;
-import sun.security.action.GetIntegerAction;
-import sun.security.util.Debug;
-import sun.security.x509.AccessDescription;
-import sun.security.x509.AuthorityInfoAccessExtension;
-import sun.security.x509.GeneralName;
-import sun.security.x509.GeneralNameInterface;
-import sun.security.x509.URIName;
-import sun.security.x509.X509CertImpl;
-
-/**
- * This is a class that checks the revocation status of a certificate(s) using
- * OCSP. It is not a PKIXCertPathChecker and therefore can be used outside of
- * the CertPathValidator framework. It is useful when you want to
- * just check the revocation status of a certificate, and you don't want to
- * incur the overhead of validating all of the certificates in the
- * associated certificate chain.
- *
- * @author Sean Mullan
- */
-public final class OCSP {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-
-    private static final int DEFAULT_CONNECT_TIMEOUT = 15000;
-
-    /**
-     * Integer value indicating the timeout length, in seconds, to be
-     * used for the OCSP check. A timeout of zero is interpreted as
-     * an infinite timeout.
-     */
-    private static final int CONNECT_TIMEOUT = initializeTimeout();
-
-    /**
-     * Initialize the timeout length by getting the OCSP timeout
-     * system property. If the property has not been set, or if its
-     * value is negative, set the timeout length to the default.
-     */
-    private static int initializeTimeout() {
-        Integer tmp = java.security.AccessController.doPrivileged(
-                new GetIntegerAction("com.sun.security.ocsp.timeout"));
-        if (tmp == null || tmp < 0) {
-            return DEFAULT_CONNECT_TIMEOUT;
-        }
-        // Convert to milliseconds, as the system property will be
-        // specified in seconds
-        return tmp * 1000;
-    }
-
-    private OCSP() {}
-
-    /**
-     * Obtains the revocation status of a certificate using OCSP using the most
-     * common defaults. The OCSP responder URI is retrieved from the
-     * certificate's AIA extension. The OCSP responder certificate is assumed
-     * to be the issuer's certificate (or issued by the issuer CA).
-     *
-     * @param cert the certificate to be checked
-     * @param issuerCert the issuer certificate
-     * @return the RevocationStatus
-     * @throws IOException if there is an exception connecting to or
-     *    communicating with the OCSP responder
-     * @throws CertPathValidatorException if an exception occurs while
-     *    encoding the OCSP Request or validating the OCSP Response
-     */
-    public static RevocationStatus check(X509Certificate cert,
-        X509Certificate issuerCert)
-            throws IOException, CertPathValidatorException {
-        CertId certId = null;
-        URI responderURI = null;
-        try {
-            X509CertImpl certImpl = X509CertImpl.toImpl(cert);
-            responderURI = getResponderURI(certImpl);
-            if (responderURI == null) {
-                throw new CertPathValidatorException
-                    ("No OCSP Responder URI in certificate");
-            }
-            certId = new CertId(issuerCert, certImpl.getSerialNumberObject());
-        } catch (CertificateException ce) {
-            throw new CertPathValidatorException
-                ("Exception while encoding OCSPRequest", ce);
-        } catch (IOException ioe) {
-            throw new CertPathValidatorException
-                ("Exception while encoding OCSPRequest", ioe);
-        }
-        OCSPResponse ocspResponse = check(Collections.singletonList(certId),
-            responderURI, Collections.singletonList(issuerCert), null);
-        return (RevocationStatus) ocspResponse.getSingleResponse(certId);
-    }
-
-    /**
-     * Obtains the revocation status of a certificate using OCSP.
-     *
-     * @param cert the certificate to be checked
-     * @param issuerCert the issuer certificate
-     * @param responderURI the URI of the OCSP responder
-     * @param responderCert the OCSP responder's certificate
-     * @param date the time the validity of the OCSP responder's certificate
-     *    should be checked against. If null, the current time is used.
-     * @return the RevocationStatus
-     * @throws IOException if there is an exception connecting to or
-     *    communicating with the OCSP responder
-     * @throws CertPathValidatorException if an exception occurs while
-     *    encoding the OCSP Request or validating the OCSP Response
-     */
-    public static RevocationStatus check(X509Certificate cert,
-        X509Certificate issuerCert, URI responderURI,
-        X509Certificate responderCert, Date date)
-            throws IOException, CertPathValidatorException {
-
-        return check(cert, issuerCert, responderURI,
-            Collections.singletonList(responderCert), date);
-    }
-
-    /**
-     * Obtains the revocation status of a certificate using OCSP.
-     *
-     * @param cert the certificate to be checked
-     * @param issuerCert the issuer certificate
-     * @param responderURI the URI of the OCSP responder
-     * @param responderCerts the OCSP responder's certificates
-     * @param date the time the validity of the OCSP responder's certificate
-     *    should be checked against. If null, the current time is used.
-     * @return the RevocationStatus
-     * @throws IOException if there is an exception connecting to or
-     *    communicating with the OCSP responder
-     * @throws CertPathValidatorException if an exception occurs while
-     *    encoding the OCSP Request or validating the OCSP Response
-     */
-    public static RevocationStatus check(X509Certificate cert,
-        X509Certificate issuerCert, URI responderURI,
-        List<X509Certificate> responderCerts, Date date)
-            throws IOException, CertPathValidatorException {
-
-        CertId certId = null;
-        try {
-            X509CertImpl certImpl = X509CertImpl.toImpl(cert);
-            certId = new CertId(issuerCert, certImpl.getSerialNumberObject());
-        } catch (CertificateException ce) {
-            throw new CertPathValidatorException
-                ("Exception while encoding OCSPRequest", ce);
-        } catch (IOException ioe) {
-            throw new CertPathValidatorException
-                ("Exception while encoding OCSPRequest", ioe);
-        }
-        OCSPResponse ocspResponse = check(Collections.singletonList(certId),
-            responderURI, responderCerts, date);
-        return (RevocationStatus) ocspResponse.getSingleResponse(certId);
-    }
-
-    /**
-     * Checks the revocation status of a list of certificates using OCSP.
-     *
-     * @param certs the CertIds to be checked
-     * @param responderURI the URI of the OCSP responder
-     * @param responderCerts the OCSP responder's certificates
-     * @param date the time the validity of the OCSP responder's certificate
-     *    should be checked against. If null, the current time is used.
-     * @return the OCSPResponse
-     * @throws IOException if there is an exception connecting to or
-     *    communicating with the OCSP responder
-     * @throws CertPathValidatorException if an exception occurs while
-     *    encoding the OCSP Request or validating the OCSP Response
-     */
-    static OCSPResponse check(List<CertId> certIds, URI responderURI,
-        List<X509Certificate> responderCerts, Date date)
-            throws IOException, CertPathValidatorException {
-
-        byte[] bytes = null;
-        try {
-            OCSPRequest request = new OCSPRequest(certIds);
-            bytes = request.encodeBytes();
-        } catch (IOException ioe) {
-            throw new CertPathValidatorException
-                ("Exception while encoding OCSPRequest", ioe);
-        }
-
-        InputStream in = null;
-        OutputStream out = null;
-        byte[] response = null;
-        try {
-            URL url = responderURI.toURL();
-            if (debug != null) {
-                debug.println("connecting to OCSP service at: " + url);
-            }
-            HttpURLConnection con = (HttpURLConnection)url.openConnection();
-            con.setConnectTimeout(CONNECT_TIMEOUT);
-            con.setReadTimeout(CONNECT_TIMEOUT);
-            con.setDoOutput(true);
-            con.setDoInput(true);
-            con.setRequestMethod("POST");
-            con.setRequestProperty
-                ("Content-type", "application/ocsp-request");
-            con.setRequestProperty
-                ("Content-length", String.valueOf(bytes.length));
-            out = con.getOutputStream();
-            out.write(bytes);
-            out.flush();
-            // Check the response
-            if (debug != null &&
-                con.getResponseCode() != HttpURLConnection.HTTP_OK) {
-                debug.println("Received HTTP error: " + con.getResponseCode()
-                    + " - " + con.getResponseMessage());
-            }
-            in = con.getInputStream();
-            int contentLength = con.getContentLength();
-            if (contentLength == -1) {
-                contentLength = Integer.MAX_VALUE;
-            }
-            response = new byte[contentLength > 2048 ? 2048 : contentLength];
-            int total = 0;
-            while (total < contentLength) {
-                int count = in.read(response, total, response.length - total);
-                if (count < 0)
-                    break;
-
-                total += count;
-                if (total >= response.length && total < contentLength) {
-                    response = Arrays.copyOf(response, total * 2);
-                }
-            }
-            response = Arrays.copyOf(response, total);
-        } finally {
-            if (in != null) {
-                try {
-                    in.close();
-                } catch (IOException ioe) {
-                    throw ioe;
-                }
-            }
-            if (out != null) {
-                try {
-                    out.close();
-                } catch (IOException ioe) {
-                    throw ioe;
-                }
-            }
-        }
-
-        OCSPResponse ocspResponse = null;
-        try {
-            ocspResponse = new OCSPResponse(response, date, responderCerts);
-        } catch (IOException ioe) {
-            // response decoding exception
-            throw new CertPathValidatorException(ioe);
-        }
-        if (ocspResponse.getResponseStatus() != ResponseStatus.SUCCESSFUL) {
-            throw new CertPathValidatorException
-                ("OCSP response error: " + ocspResponse.getResponseStatus());
-        }
-
-        // Check that the response includes a response for all of the
-        // certs that were supplied in the request
-        for (CertId certId : certIds) {
-            SingleResponse sr = ocspResponse.getSingleResponse(certId);
-            if (sr == null) {
-                if (debug != null) {
-                    debug.println("No response found for CertId: " + certId);
-                }
-                throw new CertPathValidatorException(
-                    "OCSP response does not include a response for a " +
-                    "certificate supplied in the OCSP request");
-            }
-            if (debug != null) {
-                debug.println("Status of certificate (with serial number " +
-                    certId.getSerialNumber() + ") is: " + sr.getCertStatus());
-            }
-        }
-        return ocspResponse;
-    }
-
-    /**
-     * Returns the URI of the OCSP Responder as specified in the
-     * certificate's Authority Information Access extension, or null if
-     * not specified.
-     *
-     * @param cert the certificate
-     * @return the URI of the OCSP Responder, or null if not specified
-     */
-    public static URI getResponderURI(X509Certificate cert) {
-        try {
-            return getResponderURI(X509CertImpl.toImpl(cert));
-        } catch (CertificateException ce) {
-            // treat this case as if the cert had no extension
-            return null;
-        }
-    }
-
-    static URI getResponderURI(X509CertImpl certImpl) {
-
-        // Examine the certificate's AuthorityInfoAccess extension
-        AuthorityInfoAccessExtension aia =
-            certImpl.getAuthorityInfoAccessExtension();
-        if (aia == null) {
-            return null;
-        }
-
-        List<AccessDescription> descriptions = aia.getAccessDescriptions();
-        for (AccessDescription description : descriptions) {
-            if (description.getAccessMethod().equals((Object)
-                AccessDescription.Ad_OCSP_Id)) {
-
-                GeneralName generalName = description.getAccessLocation();
-                if (generalName.getType() == GeneralNameInterface.NAME_URI) {
-                    URIName uri = (URIName) generalName.getName();
-                    return uri.getURI();
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * The Revocation Status of a certificate.
-     */
-    public static interface RevocationStatus {
-        public enum CertStatus { GOOD, REVOKED, UNKNOWN };
-
-        /**
-         * Returns the revocation status.
-         */
-        CertStatus getCertStatus();
-        /**
-         * Returns the time when the certificate was revoked, or null
-         * if it has not been revoked.
-         */
-        Date getRevocationTime();
-        /**
-         * Returns the reason the certificate was revoked, or null if it
-         * has not been revoked.
-         */
-        CRLReason getRevocationReason();
-
-        /**
-         * Returns a Map of additional extensions.
-         */
-        Map<String, Extension> getSingleExtensions();
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/OCSPChecker.java b/ojluni/src/main/java/sun/security/provider/certpath/OCSPChecker.java
deleted file mode 100755
index 1453295..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/OCSPChecker.java
+++ /dev/null
@@ -1,520 +0,0 @@
-/*
- * Copyright (c) 2003, 2012, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.util.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.Security;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateRevokedException;
-import java.security.cert.CertPath;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.CertPathValidatorException.BasicReason;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.security.cert.PKIXCertPathChecker;
-import java.security.cert.PKIXParameters;
-import java.security.cert.TrustAnchor;
-import java.security.cert.X509Certificate;
-import java.security.cert.X509CertSelector;
-import java.net.URI;
-import java.net.URISyntaxException;
-import javax.security.auth.x500.X500Principal;
-
-import static sun.security.provider.certpath.OCSP.*;
-import sun.security.util.Debug;
-import sun.security.x509.*;
-
-/**
- * OCSPChecker is a <code>PKIXCertPathChecker</code> that uses the
- * Online Certificate Status Protocol (OCSP) as specified in RFC 2560
- * <a href="http://www.ietf.org/rfc/rfc2560.txt">
- * http://www.ietf.org/rfc/rfc2560.txt</a>.
- *
- * @author      Ram Marti
- */
-class OCSPChecker extends PKIXCertPathChecker {
-
-    static final String OCSP_ENABLE_PROP = "ocsp.enable";
-    static final String OCSP_URL_PROP = "ocsp.responderURL";
-    static final String OCSP_CERT_SUBJECT_PROP =
-        "ocsp.responderCertSubjectName";
-    static final String OCSP_CERT_ISSUER_PROP = "ocsp.responderCertIssuerName";
-    static final String OCSP_CERT_NUMBER_PROP =
-        "ocsp.responderCertSerialNumber";
-
-    private static final String HEX_DIGITS = "0123456789ABCDEFabcdef";
-    private static final Debug DEBUG = Debug.getInstance("certpath");
-    private static final boolean dump = false;
-
-    private int remainingCerts;
-
-    private X509Certificate[] certs;
-
-    private CertPath cp;
-
-    private PKIXParameters pkixParams;
-
-    private boolean onlyEECert = false;
-
-    /**
-     * Default Constructor
-     *
-     * @param certPath the X509 certification path
-     * @param pkixParams the input PKIX parameter set
-     * @throws CertPathValidatorException if OCSPChecker can not be created
-     */
-    OCSPChecker(CertPath certPath, PKIXParameters pkixParams)
-        throws CertPathValidatorException {
-        this(certPath, pkixParams, false);
-    }
-
-    OCSPChecker(CertPath certPath, PKIXParameters pkixParams, boolean onlyEECert)
-        throws CertPathValidatorException {
-
-        this.cp = certPath;
-        this.pkixParams = pkixParams;
-        this.onlyEECert = onlyEECert;
-        List<? extends Certificate> tmp = cp.getCertificates();
-        certs = tmp.toArray(new X509Certificate[tmp.size()]);
-        init(false);
-    }
-
-    /**
-     * Initializes the internal state of the checker from parameters
-     * specified in the constructor
-     */
-    @Override
-    public void init(boolean forward) throws CertPathValidatorException {
-        if (!forward) {
-            remainingCerts = certs.length + 1;
-        } else {
-            throw new CertPathValidatorException(
-                "Forward checking not supported");
-        }
-    }
-
-    @Override public boolean isForwardCheckingSupported() {
-        return false;
-    }
-
-    @Override public Set<String> getSupportedExtensions() {
-        return Collections.<String>emptySet();
-    }
-
-    /**
-     * Sends an OCSPRequest for the certificate to the OCSP Server and
-     * processes the response back from the OCSP Server.
-     *
-     * @param cert the Certificate
-     * @param unresolvedCritExts the unresolved critical extensions
-     * @exception CertPathValidatorException Exception is thrown if the
-     *            certificate has been revoked.
-     */
-    @Override
-    public void check(Certificate cert, Collection<String> unresolvedCritExts)
-        throws CertPathValidatorException {
-
-        // Decrement the certificate counter
-        remainingCerts--;
-
-        X509CertImpl currCertImpl = null;
-        try {
-            currCertImpl = X509CertImpl.toImpl((X509Certificate)cert);
-        } catch (CertificateException ce) {
-            throw new CertPathValidatorException(ce);
-        }
-
-        if (onlyEECert && currCertImpl.getBasicConstraints() != -1) {
-            if (DEBUG != null) {
-                DEBUG.println("Skipping revocation check, not end entity cert");
-            }
-            return;
-        }
-
-        /*
-         * OCSP security property values, in the following order:
-         *   1. ocsp.responderURL
-         *   2. ocsp.responderCertSubjectName
-         *   3. ocsp.responderCertIssuerName
-         *   4. ocsp.responderCertSerialNumber
-         */
-        // should cache these properties to avoid calling every time?
-        String[] properties = getOCSPProperties();
-
-        // Check whether OCSP is feasible before seeking cert information
-        URI uri = getOCSPServerURI(currCertImpl, properties[0]);
-
-        // When responder's subject name is set then the issuer/serial
-        // properties are ignored
-        X500Principal responderSubjectName = null;
-        X500Principal responderIssuerName = null;
-        BigInteger responderSerialNumber = null;
-        if (properties[1] != null) {
-            responderSubjectName = new X500Principal(properties[1]);
-        } else if (properties[2] != null && properties[3] != null) {
-            responderIssuerName = new X500Principal(properties[2]);
-            // remove colon or space separators
-            String value = stripOutSeparators(properties[3]);
-            responderSerialNumber = new BigInteger(value, 16);
-        } else if (properties[2] != null || properties[3] != null) {
-            throw new CertPathValidatorException(
-                "Must specify both ocsp.responderCertIssuerName and " +
-                "ocsp.responderCertSerialNumber properties");
-        }
-
-        // If the OCSP responder cert properties are set then the
-        // identified cert must be located in the trust anchors or
-        // in the cert stores.
-        boolean seekResponderCert = false;
-        if (responderSubjectName != null || responderIssuerName != null) {
-            seekResponderCert = true;
-        }
-
-        // Set the issuer certificate to the next cert in the chain
-        // (unless we're processing the final cert).
-        X509Certificate issuerCert = null;
-        boolean seekIssuerCert = true;
-        List<X509Certificate> responderCerts = new ArrayList<X509Certificate>();
-
-        if (remainingCerts < certs.length) {
-            issuerCert = certs[remainingCerts];
-            seekIssuerCert = false; // done
-
-            // By default, the OCSP responder's cert is the same as the
-            // issuer of the cert being validated.
-            if (!seekResponderCert) {
-                responderCerts.add(issuerCert);
-                if (DEBUG != null) {
-                    DEBUG.println("Responder's certificate is the same " +
-                        "as the issuer of the certificate being validated");
-                }
-            }
-        }
-
-        // Check anchor certs for:
-        //    - the issuer cert (of the cert being validated)
-        //    - the OCSP responder's cert
-        if (seekIssuerCert || seekResponderCert) {
-
-            if (DEBUG != null && seekResponderCert) {
-                DEBUG.println("Searching trust anchors for issuer or " +
-                    "responder certificate");
-            }
-
-            // Extract the anchor certs
-            Iterator<TrustAnchor> anchors
-                = pkixParams.getTrustAnchors().iterator();
-            if (!anchors.hasNext()) {
-                throw new CertPathValidatorException(
-                    "Must specify at least one trust anchor");
-            }
-
-            X500Principal certIssuerName =
-                currCertImpl.getIssuerX500Principal();
-            byte[] certIssuerKeyId = null;
-
-            while (anchors.hasNext() && (seekIssuerCert || seekResponderCert)) {
-
-                TrustAnchor anchor = anchors.next();
-                X509Certificate anchorCert = anchor.getTrustedCert();
-                X500Principal anchorSubjectName =
-                    anchorCert.getSubjectX500Principal();
-
-                if (dump) {
-                    System.out.println("Issuer DN is " + certIssuerName);
-                    System.out.println("Subject DN is " + anchorSubjectName);
-                }
-
-                // Check if anchor cert is the issuer cert
-                if (seekIssuerCert &&
-                    certIssuerName.equals(anchorSubjectName)) {
-
-                    // Retrieve the issuer's key identifier
-                    if (certIssuerKeyId == null) {
-                        certIssuerKeyId = currCertImpl.getIssuerKeyIdentifier();
-                        if (certIssuerKeyId == null) {
-                            if (DEBUG != null) {
-                                DEBUG.println("No issuer key identifier (AKID) "
-                                    + "in the certificate being validated");
-                            }
-                        }
-                    }
-
-                    // Check that the key identifiers match, if both are present
-                    byte[] anchorKeyId = null;
-                    if (certIssuerKeyId != null &&
-                        (anchorKeyId =
-                            OCSPChecker.getKeyId(anchorCert)) != null) {
-                        if (!Arrays.equals(certIssuerKeyId, anchorKeyId)) {
-                            continue; // try next cert
-                        }
-
-                        if (DEBUG != null) {
-                            DEBUG.println("Issuer certificate key ID: " +
-                                String.format("0x%0" +
-                                    (certIssuerKeyId.length * 2) + "x",
-                                        new BigInteger(1, certIssuerKeyId)));
-                        }
-                    }
-
-                    issuerCert = anchorCert;
-                    seekIssuerCert = false; // done
-
-                    // By default, the OCSP responder's cert is the same as
-                    // the issuer of the cert being validated.
-                    if (!seekResponderCert && responderCerts.isEmpty()) {
-                        responderCerts.add(anchorCert);
-                        if (DEBUG != null) {
-                            DEBUG.println("Responder's certificate is the" +
-                                " same as the issuer of the certificate " +
-                                "being validated");
-                        }
-                    }
-                }
-
-                // Check if anchor cert is the responder cert
-                if (seekResponderCert) {
-                    // Satisfy the responder subject name property only, or
-                    // satisfy the responder issuer name and serial number
-                    // properties only
-                    if ((responderSubjectName != null &&
-                         responderSubjectName.equals(anchorSubjectName)) ||
-                        (responderIssuerName != null &&
-                         responderSerialNumber != null &&
-                         responderIssuerName.equals(
-                         anchorCert.getIssuerX500Principal()) &&
-                         responderSerialNumber.equals(
-                         anchorCert.getSerialNumber()))) {
-
-                        responderCerts.add(anchorCert);
-                    }
-                }
-            }
-            if (issuerCert == null) {
-                throw new CertPathValidatorException(
-                    "No trusted certificate for " + currCertImpl.getIssuerDN());
-            }
-
-            // Check cert stores if responder cert has not yet been found
-            if (seekResponderCert) {
-                if (DEBUG != null) {
-                    DEBUG.println("Searching cert stores for responder's " +
-                        "certificate");
-                }
-                X509CertSelector filter = null;
-                if (responderSubjectName != null) {
-                    filter = new X509CertSelector();
-                    filter.setSubject(responderSubjectName);
-                } else if (responderIssuerName != null &&
-                    responderSerialNumber != null) {
-                    filter = new X509CertSelector();
-                    filter.setIssuer(responderIssuerName);
-                    filter.setSerialNumber(responderSerialNumber);
-                }
-                if (filter != null) {
-                    List<CertStore> certStores = pkixParams.getCertStores();
-                    for (CertStore certStore : certStores) {
-                        try {
-                            responderCerts.addAll(
-                                (Collection<X509Certificate>)
-                                    certStore.getCertificates(filter));
-                        } catch (CertStoreException cse) {
-                            // ignore and try next certStore
-                            if (DEBUG != null) {
-                                DEBUG.println("CertStore exception:" + cse);
-                            }
-                            continue;
-                        }
-                    }
-                }
-            }
-        }
-
-        // Could not find the certificate identified in the OCSP properties
-        if (seekResponderCert && responderCerts.isEmpty()) {
-            throw new CertPathValidatorException(
-                "Cannot find the responder's certificate " +
-                "(set using the OCSP security properties).");
-        }
-
-        if (DEBUG != null) {
-            DEBUG.println("Located " + responderCerts.size() +
-                " trusted responder certificate(s)");
-        }
-
-        // The algorithm constraints of the OCSP trusted responder certificate
-        // does not need to be checked in this code. The constraints will be
-        // checked when the responder's certificate is validated.
-
-        CertId certId = null;
-        OCSPResponse response = null;
-        try {
-            certId = new CertId
-                (issuerCert, currCertImpl.getSerialNumberObject());
-            response = OCSP.check(Collections.singletonList(certId), uri,
-                responderCerts, pkixParams.getDate());
-        } catch (Exception e) {
-            if (e instanceof CertPathValidatorException) {
-                throw (CertPathValidatorException) e;
-            } else {
-                // Wrap exceptions in CertPathValidatorException so that
-                // we can fallback to CRLs, if enabled.
-                throw new CertPathValidatorException(e);
-            }
-        }
-
-        RevocationStatus rs = (RevocationStatus) response.getSingleResponse(certId);
-        RevocationStatus.CertStatus certStatus = rs.getCertStatus();
-        if (certStatus == RevocationStatus.CertStatus.REVOKED) {
-            Throwable t = new CertificateRevokedException(
-                rs.getRevocationTime(), rs.getRevocationReason(),
-                responderCerts.get(0).getSubjectX500Principal(),
-                rs.getSingleExtensions());
-            throw new CertPathValidatorException(t.getMessage(), t,
-                null, -1, BasicReason.REVOKED);
-        } else if (certStatus == RevocationStatus.CertStatus.UNKNOWN) {
-            throw new CertPathValidatorException(
-                "Certificate's revocation status is unknown", null, cp,
-                (remainingCerts - 1),
-                BasicReason.UNDETERMINED_REVOCATION_STATUS);
-        }
-    }
-
-    /*
-     * The OCSP security property values are in the following order:
-     *   1. ocsp.responderURL
-     *   2. ocsp.responderCertSubjectName
-     *   3. ocsp.responderCertIssuerName
-     *   4. ocsp.responderCertSerialNumber
-     */
-    private static URI getOCSPServerURI(X509CertImpl currCertImpl,
-        String responderURL) throws CertPathValidatorException {
-
-        if (responderURL != null) {
-            try {
-                return new URI(responderURL);
-            } catch (URISyntaxException e) {
-                throw new CertPathValidatorException(e);
-            }
-        }
-
-        // Examine the certificate's AuthorityInfoAccess extension
-        AuthorityInfoAccessExtension aia =
-            currCertImpl.getAuthorityInfoAccessExtension();
-        if (aia == null) {
-            throw new CertPathValidatorException(
-                "Must specify the location of an OCSP Responder");
-        }
-
-        List<AccessDescription> descriptions = aia.getAccessDescriptions();
-        for (AccessDescription description : descriptions) {
-            if (description.getAccessMethod().equals((Object)
-                AccessDescription.Ad_OCSP_Id)) {
-
-                GeneralName generalName = description.getAccessLocation();
-                if (generalName.getType() == GeneralNameInterface.NAME_URI) {
-                    URIName uri = (URIName) generalName.getName();
-                    return uri.getURI();
-                }
-            }
-        }
-
-        throw new CertPathValidatorException(
-            "Cannot find the location of the OCSP Responder");
-    }
-
-    /*
-     * Retrieves the values of the OCSP security properties.
-     */
-    private static String[] getOCSPProperties() {
-        final String[] properties = new String[4];
-
-        AccessController.doPrivileged(
-            new PrivilegedAction<Void>() {
-                public Void run() {
-                    properties[0] = Security.getProperty(OCSP_URL_PROP);
-                    properties[1] =
-                        Security.getProperty(OCSP_CERT_SUBJECT_PROP);
-                    properties[2] =
-                        Security.getProperty(OCSP_CERT_ISSUER_PROP);
-                    properties[3] =
-                        Security.getProperty(OCSP_CERT_NUMBER_PROP);
-                    return null;
-                }
-            });
-
-        return properties;
-    }
-
-    /*
-     * Removes any non-hexadecimal characters from a string.
-     */
-    private static String stripOutSeparators(String value) {
-        char[] chars = value.toCharArray();
-        StringBuilder hexNumber = new StringBuilder();
-        for (int i = 0; i < chars.length; i++) {
-            if (HEX_DIGITS.indexOf(chars[i]) != -1) {
-                hexNumber.append(chars[i]);
-            }
-        }
-        return hexNumber.toString();
-    }
-
-    /*
-     * Returns the subject key identifier for the supplied certificate, or null
-     */
-    static byte[] getKeyId(X509Certificate cert) {
-        X509CertImpl certImpl = null;
-        byte[] certSubjectKeyId = null;
-
-        try {
-            certImpl = X509CertImpl.toImpl(cert);
-            certSubjectKeyId = certImpl.getSubjectKeyIdentifier();
-
-            if (certSubjectKeyId == null) {
-                if (DEBUG != null) {
-                    DEBUG.println("No subject key identifier (SKID) in the " +
-                        "certificate (Subject: " +
-                        cert.getSubjectX500Principal() + ")");
-                }
-            }
-
-        } catch (CertificateException e) {
-            // Ignore certificate
-            if (DEBUG != null) {
-                DEBUG.println("Error parsing X.509 certificate (Subject: " +
-                    cert.getSubjectX500Principal() + ") " + e);
-            }
-        }
-
-        return certSubjectKeyId;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/OCSPRequest.java b/ojluni/src/main/java/sun/security/provider/certpath/OCSPRequest.java
deleted file mode 100755
index 4c4707c..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/OCSPRequest.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 2003, 2009, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-import sun.misc.HexDumpEncoder;
-import sun.security.util.*;
-
-/**
- * This class can be used to generate an OCSP request and send it over
- * an outputstream. Currently we do not support signing requests
- * The OCSP Request is specified in RFC 2560 and
- * the ASN.1 definition is as follows:
- * <pre>
- *
- * OCSPRequest     ::=     SEQUENCE {
- *      tbsRequest                  TBSRequest,
- *      optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
- *
- *   TBSRequest      ::=     SEQUENCE {
- *      version             [0]     EXPLICIT Version DEFAULT v1,
- *      requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
- *      requestList                 SEQUENCE OF Request,
- *      requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }
- *
- *  Signature       ::=     SEQUENCE {
- *      signatureAlgorithm      AlgorithmIdentifier,
- *      signature               BIT STRING,
- *      certs               [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL
- *   }
- *
- *  Version         ::=             INTEGER  {  v1(0) }
- *
- *  Request         ::=     SEQUENCE {
- *      reqCert                     CertID,
- *      singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }
- *
- *  CertID          ::= SEQUENCE {
- *       hashAlgorithm  AlgorithmIdentifier,
- *       issuerNameHash OCTET STRING, -- Hash of Issuer's DN
- *       issuerKeyHash  OCTET STRING, -- Hash of Issuers public key
- *       serialNumber   CertificateSerialNumber
- * }
- *
- * </pre>
- *
- * @author      Ram Marti
- */
-
-class OCSPRequest {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-    private static final boolean dump = debug.isOn("ocsp");
-
-    // List of request CertIds
-    private final List<CertId> certIds;
-
-    /*
-     * Constructs an OCSPRequest. This constructor is used
-     * to construct an unsigned OCSP Request for a single user cert.
-     */
-    OCSPRequest(CertId certId) {
-        this.certIds = Collections.singletonList(certId);
-    }
-
-    OCSPRequest(List<CertId> certIds) {
-        this.certIds = certIds;
-    }
-
-    byte[] encodeBytes() throws IOException {
-
-        // encode tbsRequest
-        DerOutputStream tmp = new DerOutputStream();
-        DerOutputStream requestsOut = new DerOutputStream();
-        for (CertId certId : certIds) {
-            DerOutputStream certIdOut = new DerOutputStream();
-            certId.encode(certIdOut);
-            requestsOut.write(DerValue.tag_Sequence, certIdOut);
-        }
-
-        tmp.write(DerValue.tag_Sequence, requestsOut);
-        // No extensions supported
-        DerOutputStream tbsRequest = new DerOutputStream();
-        tbsRequest.write(DerValue.tag_Sequence, tmp);
-
-        // OCSPRequest without the signature
-        DerOutputStream ocspRequest = new DerOutputStream();
-        ocspRequest.write(DerValue.tag_Sequence, tbsRequest);
-
-        byte[] bytes = ocspRequest.toByteArray();
-
-        if (dump) {
-            HexDumpEncoder hexEnc = new HexDumpEncoder();
-            debug.println("\nOCSPRequest bytes... ");
-            debug.println(hexEnc.encode(bytes) + "\n");
-        }
-
-        return bytes;
-    }
-
-    List<CertId> getCertIds() {
-        return certIds;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/OCSPResponse.java b/ojluni/src/main/java/sun/security/provider/certpath/OCSPResponse.java
deleted file mode 100755
index 3d2eb3c..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/OCSPResponse.java
+++ /dev/null
@@ -1,771 +0,0 @@
-/*
- * 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.io.*;
-import java.math.BigInteger;
-import java.security.*;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateParsingException;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.CRLReason;
-import java.security.cert.TrustAnchor;
-import java.security.cert.X509Certificate;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import sun.misc.HexDumpEncoder;
-import sun.security.action.GetIntegerAction;
-import sun.security.x509.*;
-import sun.security.util.*;
-
-/**
- * This class is used to process an OCSP response.
- * The OCSP Response is defined
- * in RFC 2560 and the ASN.1 encoding is as follows:
- * <pre>
- *
- *  OCSPResponse ::= SEQUENCE {
- *      responseStatus         OCSPResponseStatus,
- *      responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }
- *
- *   OCSPResponseStatus ::= ENUMERATED {
- *       successful            (0),  --Response has valid confirmations
- *       malformedRequest      (1),  --Illegal confirmation request
- *       internalError         (2),  --Internal error in issuer
- *       tryLater              (3),  --Try again later
- *                                   --(4) is not used
- *       sigRequired           (5),  --Must sign the request
- *       unauthorized          (6)   --Request unauthorized
- *   }
- *
- *   ResponseBytes ::=       SEQUENCE {
- *       responseType   OBJECT IDENTIFIER,
- *       response       OCTET STRING }
- *
- *   BasicOCSPResponse       ::= SEQUENCE {
- *      tbsResponseData      ResponseData,
- *      signatureAlgorithm   AlgorithmIdentifier,
- *      signature            BIT STRING,
- *      certs                [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }
- *
- *   The value for signature SHALL be computed on the hash of the DER
- *   encoding ResponseData.
- *
- *   ResponseData ::= SEQUENCE {
- *      version              [0] EXPLICIT Version DEFAULT v1,
- *      responderID              ResponderID,
- *      producedAt               GeneralizedTime,
- *      responses                SEQUENCE OF SingleResponse,
- *      responseExtensions   [1] EXPLICIT Extensions OPTIONAL }
- *
- *   ResponderID ::= CHOICE {
- *      byName               [1] Name,
- *      byKey                [2] KeyHash }
- *
- *   KeyHash ::= OCTET STRING -- SHA-1 hash of responder's public key
- *   (excluding the tag and length fields)
- *
- *   SingleResponse ::= SEQUENCE {
- *      certID                       CertID,
- *      certStatus                   CertStatus,
- *      thisUpdate                   GeneralizedTime,
- *      nextUpdate         [0]       EXPLICIT GeneralizedTime OPTIONAL,
- *      singleExtensions   [1]       EXPLICIT Extensions OPTIONAL }
- *
- *   CertStatus ::= CHOICE {
- *       good        [0]     IMPLICIT NULL,
- *       revoked     [1]     IMPLICIT RevokedInfo,
- *       unknown     [2]     IMPLICIT UnknownInfo }
- *
- *   RevokedInfo ::= SEQUENCE {
- *       revocationTime              GeneralizedTime,
- *       revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }
- *
- *   UnknownInfo ::= NULL -- this can be replaced with an enumeration
- *
- * </pre>
- *
- * @author      Ram Marti
- */
-
-public final class OCSPResponse {
-
-    public enum ResponseStatus {
-        SUCCESSFUL,            // Response has valid confirmations
-        MALFORMED_REQUEST,     // Illegal confirmation request
-        INTERNAL_ERROR,        // Internal error in issuer
-        TRY_LATER,             // Try again later
-        UNUSED,                // is not used
-        SIG_REQUIRED,          // Must sign the request
-        UNAUTHORIZED           // Request unauthorized
-    };
-    private static ResponseStatus[] rsvalues = ResponseStatus.values();
-
-    private static final Debug DEBUG = Debug.getInstance("certpath");
-    private static final boolean dump = DEBUG.isOn("ocsp");
-    private static final ObjectIdentifier OCSP_BASIC_RESPONSE_OID =
-        ObjectIdentifier.newInternal(new int[] { 1, 3, 6, 1, 5, 5, 7, 48, 1, 1});
-    private static final ObjectIdentifier OCSP_NONCE_EXTENSION_OID =
-        ObjectIdentifier.newInternal(new int[] { 1, 3, 6, 1, 5, 5, 7, 48, 1, 2});
-
-    private static final int CERT_STATUS_GOOD = 0;
-    private static final int CERT_STATUS_REVOKED = 1;
-    private static final int CERT_STATUS_UNKNOWN = 2;
-
-    // ResponderID CHOICE tags
-    private static final int NAME_TAG = 1;
-    private static final int KEY_TAG = 2;
-
-    // Object identifier for the OCSPSigning key purpose
-    private static final String KP_OCSP_SIGNING_OID = "1.3.6.1.5.5.7.3.9";
-
-    private final ResponseStatus responseStatus;
-    private final Map<CertId, SingleResponse> singleResponseMap;
-
-    // Default maximum clock skew in milliseconds (15 minutes)
-    // allowed when checking validity of OCSP responses
-    private static final int DEFAULT_MAX_CLOCK_SKEW = 900000;
-
-    /**
-     * Integer value indicating the maximum allowable clock skew, in seconds,
-     * to be used for the OCSP check.
-     */
-    private static final int MAX_CLOCK_SKEW = initializeClockSkew();
-
-    /**
-     * Initialize the maximum allowable clock skew by getting the OCSP
-     * clock skew system property. If the property has not been set, or if its
-     * value is negative, set the skew to the default.
-     */
-    private static int initializeClockSkew() {
-        Integer tmp = java.security.AccessController.doPrivileged(
-                new GetIntegerAction("com.sun.security.ocsp.clockSkew"));
-        if (tmp == null || tmp < 0) {
-            return DEFAULT_MAX_CLOCK_SKEW;
-        }
-        // Convert to milliseconds, as the system property will be
-        // specified in seconds
-        return tmp * 1000;
-    }
-
-    // an array of all of the CRLReasons (used in SingleResponse)
-    private static CRLReason[] values = CRLReason.values();
-
-    /*
-     * Create an OCSP response from its ASN.1 DER encoding.
-     */
-    OCSPResponse(byte[] bytes, Date dateCheckedAgainst,
-        List<X509Certificate> responderCerts)
-        throws IOException, CertPathValidatorException {
-
-        // OCSPResponse
-        if (dump) {
-            HexDumpEncoder hexEnc = new HexDumpEncoder();
-            DEBUG.println("\nOCSPResponse bytes...");
-            DEBUG.println(hexEnc.encode(bytes) + "\n");
-        }
-        DerValue der = new DerValue(bytes);
-        if (der.tag != DerValue.tag_Sequence) {
-            throw new IOException("Bad encoding in OCSP response: " +
-                "expected ASN.1 SEQUENCE tag.");
-        }
-        DerInputStream derIn = der.getData();
-
-        // responseStatus
-        int status = derIn.getEnumerated();
-        if (status >= 0 && status < rsvalues.length) {
-            responseStatus = rsvalues[status];
-        } else {
-            // unspecified responseStatus
-            throw new IOException("Unknown OCSPResponse status: " + status);
-        }
-        if (DEBUG != null) {
-            DEBUG.println("OCSP response status: " + responseStatus);
-        }
-        if (responseStatus != ResponseStatus.SUCCESSFUL) {
-            // no need to continue, responseBytes are not set.
-            singleResponseMap = Collections.emptyMap();
-            return;
-        }
-
-        // responseBytes
-        der = derIn.getDerValue();
-        if (!der.isContextSpecific((byte)0)) {
-            throw new IOException("Bad encoding in responseBytes element " +
-                "of OCSP response: expected ASN.1 context specific tag 0.");
-        }
-        DerValue tmp = der.data.getDerValue();
-        if (tmp.tag != DerValue.tag_Sequence) {
-            throw new IOException("Bad encoding in responseBytes element " +
-                "of OCSP response: expected ASN.1 SEQUENCE tag.");
-        }
-
-        // responseType
-        derIn = tmp.data;
-        ObjectIdentifier responseType = derIn.getOID();
-        if (responseType.equals((Object)OCSP_BASIC_RESPONSE_OID)) {
-            if (DEBUG != null) {
-                DEBUG.println("OCSP response type: basic");
-            }
-        } else {
-            if (DEBUG != null) {
-                DEBUG.println("OCSP response type: " + responseType);
-            }
-            throw new IOException("Unsupported OCSP response type: " +
-                responseType);
-        }
-
-        // BasicOCSPResponse
-        DerInputStream basicOCSPResponse =
-            new DerInputStream(derIn.getOctetString());
-
-        DerValue[] seqTmp = basicOCSPResponse.getSequence(2);
-        if (seqTmp.length < 3) {
-            throw new IOException("Unexpected BasicOCSPResponse value");
-        }
-
-        DerValue responseData = seqTmp[0];
-
-        // Need the DER encoded ResponseData to verify the signature later
-        byte[] responseDataDer = seqTmp[0].toByteArray();
-
-        // tbsResponseData
-        if (responseData.tag != DerValue.tag_Sequence) {
-            throw new IOException("Bad encoding in tbsResponseData " +
-                "element of OCSP response: expected ASN.1 SEQUENCE tag.");
-        }
-        DerInputStream seqDerIn = responseData.data;
-        DerValue seq = seqDerIn.getDerValue();
-
-        // version
-        if (seq.isContextSpecific((byte)0)) {
-            // seq[0] is version
-            if (seq.isConstructed() && seq.isContextSpecific()) {
-                //System.out.println ("version is available");
-                seq = seq.data.getDerValue();
-                int version = seq.getInteger();
-                if (seq.data.available() != 0) {
-                    throw new IOException("Bad encoding in version " +
-                        " element of OCSP response: bad format");
-                }
-                seq = seqDerIn.getDerValue();
-            }
-        }
-
-        // responderID
-        short tag = (byte)(seq.tag & 0x1f);
-        if (tag == NAME_TAG) {
-            if (DEBUG != null) {
-                X500Name responderName = new X500Name(seq.getData());
-                DEBUG.println("OCSP Responder name: " + responderName);
-            }
-        } else if (tag == KEY_TAG) {
-            seq = seq.data.getDerValue(); // consume tag and length
-            if (DEBUG != null) {
-                byte[] responderKeyId = seq.getOctetString();
-                DEBUG.println("OCSP Responder key ID: " +
-                    String.format("0x%0" +
-                        (responderKeyId.length * 2) + "x",
-                            new BigInteger(1, responderKeyId)));
-            }
-        } else {
-            throw new IOException("Bad encoding in responderID element of " +
-                "OCSP response: expected ASN.1 context specific tag 1 or 2");
-        }
-
-        // producedAt
-        seq = seqDerIn.getDerValue();
-        if (DEBUG != null) {
-            Date producedAtDate = seq.getGeneralizedTime();
-            DEBUG.println("OCSP response produced at: " + producedAtDate);
-        }
-
-        // responses
-        DerValue[] singleResponseDer = seqDerIn.getSequence(1);
-        singleResponseMap
-            = new HashMap<CertId, SingleResponse>(singleResponseDer.length);
-        if (DEBUG != null) {
-            DEBUG.println("OCSP number of SingleResponses: "
-                + singleResponseDer.length);
-        }
-        for (int i = 0; i < singleResponseDer.length; i++) {
-            SingleResponse singleResponse
-                = new SingleResponse(singleResponseDer[i], dateCheckedAgainst);
-            singleResponseMap.put(singleResponse.getCertId(), singleResponse);
-        }
-
-        // responseExtensions
-        if (seqDerIn.available() > 0) {
-            seq = seqDerIn.getDerValue();
-            if (seq.isContextSpecific((byte)1)) {
-                DerValue[] responseExtDer = seq.data.getSequence(3);
-                for (int i = 0; i < responseExtDer.length; i++) {
-                    Extension responseExtension
-                        = new Extension(responseExtDer[i]);
-                    if (DEBUG != null) {
-                        DEBUG.println("OCSP extension: " + responseExtension);
-                    }
-                    if (responseExtension.getExtensionId().equals((Object)
-                        OCSP_NONCE_EXTENSION_OID)) {
-                        /*
-                        ocspNonce =
-                            responseExtension[i].getExtensionValue();
-                         */
-                    } else if (responseExtension.isCritical())  {
-                        throw new IOException(
-                            "Unsupported OCSP critical extension: " +
-                            responseExtension.getExtensionId());
-                    }
-                }
-            }
-        }
-
-        // signatureAlgorithmId
-        AlgorithmId sigAlgId = AlgorithmId.parse(seqTmp[1]);
-
-        // signature
-        byte[] signature = seqTmp[2].getBitString();
-        X509CertImpl[] x509Certs = null;
-
-        // if seq[3] is available , then it is a sequence of certificates
-        if (seqTmp.length > 3) {
-            // certs are available
-            DerValue seqCert = seqTmp[3];
-            if (!seqCert.isContextSpecific((byte)0)) {
-                throw new IOException("Bad encoding in certs element of " +
-                    "OCSP response: expected ASN.1 context specific tag 0.");
-            }
-            DerValue[] certs = seqCert.getData().getSequence(3);
-            x509Certs = new X509CertImpl[certs.length];
-            try {
-                for (int i = 0; i < certs.length; i++) {
-                    x509Certs[i] = new X509CertImpl(certs[i].toByteArray());
-                }
-            } catch (CertificateException ce) {
-                throw new IOException("Bad encoding in X509 Certificate", ce);
-            }
-        }
-
-        // By default, the OCSP responder's cert is the same as the issuer of
-        // the cert being validated. The issuer cert is the first in the list.
-        X509Certificate trustedResponderCert = responderCerts.get(0);
-
-        // Check whether the signer cert returned by the responder is trusted
-        if (x509Certs != null && x509Certs[0] != null) {
-            X509CertImpl signerCert = x509Certs[0];
-
-            if (DEBUG != null) {
-                DEBUG.println("Signer certificate name: " +
-                    signerCert.getSubjectX500Principal());
-
-                byte[] signerKeyId = signerCert.getSubjectKeyIdentifier();
-                if (signerKeyId != null) {
-                    DEBUG.println("Signer certificate key ID: " +
-                        String.format("0x%0" + (signerKeyId.length * 2) + "x",
-                                new BigInteger(1, signerKeyId)));
-                }
-            }
-
-            byte[] certIssuerKeyId = null;
-
-            for (X509Certificate responderCert : responderCerts) {
-
-                // First check if signer cert matches a trusted responder cert
-                if (signerCert.equals(responderCert)) {
-
-                    // signer cert is trusted, now verify the signed response
-                    trustedResponderCert = responderCert;
-                    if (DEBUG != null) {
-                        DEBUG.println("Signer certificate is a trusted " +
-                            "responder");
-                    }
-                    break;
-
-                // Next check if signer cert was issued by a trusted responder
-                // cert
-                } else if (signerCert.getIssuerX500Principal().equals(
-                    responderCert.getSubjectX500Principal())) {
-
-                    // Retrieve the issuer's key identifier
-                    if (certIssuerKeyId == null) {
-                        certIssuerKeyId = signerCert.getIssuerKeyIdentifier();
-                        if (certIssuerKeyId == null) {
-                            if (DEBUG != null) {
-                                DEBUG.println("No issuer key identifier (AKID) "
-                                    + "in the signer certificate");
-                            }
-                        }
-                    }
-
-                    // Check that the key identifiers match, if both are present
-                    byte[] responderKeyId = null;
-                    if (certIssuerKeyId != null &&
-                        (responderKeyId =
-                            OCSPChecker.getKeyId(responderCert)) != null) {
-                        if (!Arrays.equals(certIssuerKeyId, responderKeyId)) {
-                            continue; // try next cert
-                        }
-
-                        if (DEBUG != null) {
-                            DEBUG.println("Issuer certificate key ID: " +
-                                String.format("0x%0" +
-                                    (certIssuerKeyId.length * 2) + "x",
-                                        new BigInteger(1, certIssuerKeyId)));
-                        }
-                    }
-
-                    // Check for the OCSPSigning key purpose
-                    try {
-                        List<String> keyPurposes =
-                            signerCert.getExtendedKeyUsage();
-                        if (keyPurposes == null ||
-                            !keyPurposes.contains(KP_OCSP_SIGNING_OID)) {
-
-                            continue; // try next cert
-                        }
-                    } catch (CertificateParsingException cpe) {
-
-                        continue; // try next cert
-                    }
-
-                    // Check algorithm constraints specified in security
-                    // property "jdk.certpath.disabledAlgorithms".
-                    AlgorithmChecker algChecker = new AlgorithmChecker(
-                                        new TrustAnchor(responderCert, null));
-                    algChecker.init(false);
-                    algChecker.check(signerCert,
-                        Collections.<String>emptySet());
-
-                    // Check the date validity
-                    try {
-                        if (dateCheckedAgainst == null) {
-                            signerCert.checkValidity();
-                        } else {
-                            signerCert.checkValidity(dateCheckedAgainst);
-                        }
-                    } catch (GeneralSecurityException e) {
-                        if (DEBUG != null) {
-                            DEBUG.println("Responder's certificate not within" +
-                            " the validity period " + e);
-                        }
-                        continue; // try next cert
-                    }
-
-                    // Check for revocation
-                    //
-                    // A CA may specify that an OCSP client can trust a
-                    // responder for the lifetime of the responder's
-                    // certificate. The CA does so by including the
-                    // extension id-pkix-ocsp-nocheck.
-                    //
-                    Extension noCheck =
-                        signerCert.getExtension(PKIXExtensions.OCSPNoCheck_Id);
-                    if (noCheck != null) {
-                        if (DEBUG != null) {
-                            DEBUG.println("Responder's certificate includes " +
-                                "the extension id-pkix-ocsp-nocheck.");
-                        }
-                    } else {
-                        // we should do the revocation checking of the
-                        // authorized responder in a future update.
-                    }
-
-                    // Verify the signature
-                    try {
-                        signerCert.verify(responderCert.getPublicKey());
-                        trustedResponderCert = signerCert;
-                        // cert is trusted, now verify the signed response
-                        if (DEBUG != null) {
-                            DEBUG.println("Signer certificate was issued by " +
-                                "a trusted responder");
-                        }
-                        break;
-
-                    } catch (GeneralSecurityException e) {
-                        trustedResponderCert = null;
-                    }
-                }
-            }
-        }
-
-        // Confirm that the signed response was generated using the public
-        // key from the trusted responder cert
-        if (trustedResponderCert != null) {
-            // Check algorithm constraints specified in security property
-            // "jdk.certpath.disabledAlgorithms".
-            AlgorithmChecker.check(trustedResponderCert.getPublicKey(),
-                sigAlgId);
-
-            if (!verifyResponse(responseDataDer, trustedResponderCert,
-                sigAlgId, signature)) {
-                throw new CertPathValidatorException(
-                    "Error verifying OCSP Responder's signature");
-            }
-        } else {
-            // Need responder's cert in order to verify the signature
-            throw new CertPathValidatorException(
-                "Responder's certificate is not trusted for signing " +
-                "OCSP responses");
-        }
-    }
-
-    /**
-     * Returns the OCSP ResponseStatus.
-     */
-    ResponseStatus getResponseStatus() {
-        return responseStatus;
-    }
-
-    /*
-     * Verify the signature of the OCSP response.
-     * The responder's cert is implicitly trusted.
-     */
-    private boolean verifyResponse(byte[] responseData, X509Certificate cert,
-        AlgorithmId sigAlgId, byte[] signBytes)
-        throws CertPathValidatorException {
-
-        try {
-            Signature respSignature = Signature.getInstance(sigAlgId.getName());
-            respSignature.initVerify(cert.getPublicKey());
-            respSignature.update(responseData);
-
-            if (respSignature.verify(signBytes)) {
-                if (DEBUG != null) {
-                    DEBUG.println("Verified signature of OCSP Responder");
-                }
-                return true;
-
-            } else {
-                if (DEBUG != null) {
-                    DEBUG.println(
-                        "Error verifying signature of OCSP Responder");
-                }
-                return false;
-            }
-        } catch (InvalidKeyException ike) {
-            throw new CertPathValidatorException(ike);
-        } catch (NoSuchAlgorithmException nsae) {
-            throw new CertPathValidatorException(nsae);
-        } catch (SignatureException se) {
-            throw new CertPathValidatorException(se);
-        }
-    }
-
-    /**
-     * Returns the SingleResponse of the specified CertId, or null if
-     * there is no response for that CertId.
-     */
-    SingleResponse getSingleResponse(CertId certId) {
-        return singleResponseMap.get(certId);
-    }
-
-    /*
-     * A class representing a single OCSP response.
-     */
-    final static class SingleResponse implements OCSP.RevocationStatus {
-        private final CertId certId;
-        private final CertStatus certStatus;
-        private final Date thisUpdate;
-        private final Date nextUpdate;
-        private final Date revocationTime;
-        private final CRLReason revocationReason;
-        private final Map<String, java.security.cert.Extension> singleExtensions;
-
-        private SingleResponse(DerValue der) throws IOException {
-            this(der, null);
-        }
-
-        private SingleResponse(DerValue der, Date dateCheckedAgainst)
-            throws IOException {
-            if (der.tag != DerValue.tag_Sequence) {
-                throw new IOException("Bad ASN.1 encoding in SingleResponse");
-            }
-            DerInputStream tmp = der.data;
-
-            certId = new CertId(tmp.getDerValue().data);
-            DerValue derVal = tmp.getDerValue();
-            short tag = (byte)(derVal.tag & 0x1f);
-            if (tag ==  CERT_STATUS_REVOKED) {
-                certStatus = CertStatus.REVOKED;
-                revocationTime = derVal.data.getGeneralizedTime();
-                if (derVal.data.available() != 0) {
-                    DerValue dv = derVal.data.getDerValue();
-                    tag = (byte)(dv.tag & 0x1f);
-                    if (tag == 0) {
-                        int reason = dv.data.getEnumerated();
-                        // if reason out-of-range just leave as UNSPECIFIED
-                        if (reason >= 0 && reason < values.length) {
-                            revocationReason = values[reason];
-                        } else {
-                            revocationReason = CRLReason.UNSPECIFIED;
-                        }
-                    } else {
-                        revocationReason = CRLReason.UNSPECIFIED;
-                    }
-                } else {
-                    revocationReason = CRLReason.UNSPECIFIED;
-                }
-                // RevokedInfo
-                if (DEBUG != null) {
-                    DEBUG.println("Revocation time: " + revocationTime);
-                    DEBUG.println("Revocation reason: " + revocationReason);
-                }
-            } else {
-                revocationTime = null;
-                revocationReason = CRLReason.UNSPECIFIED;
-                if (tag == CERT_STATUS_GOOD) {
-                    certStatus = CertStatus.GOOD;
-                } else if (tag == CERT_STATUS_UNKNOWN) {
-                    certStatus = CertStatus.UNKNOWN;
-                } else {
-                    throw new IOException("Invalid certificate status");
-                }
-            }
-
-            thisUpdate = tmp.getGeneralizedTime();
-
-            if (tmp.available() == 0)  {
-                // we are done
-                nextUpdate = null;
-            } else {
-                derVal = tmp.getDerValue();
-                tag = (byte)(derVal.tag & 0x1f);
-                if (tag == 0) {
-                    // next update
-                    nextUpdate = derVal.data.getGeneralizedTime();
-
-                    if (tmp.available() == 0)  {
-                        // we are done
-                    } else {
-                        derVal = tmp.getDerValue();
-                        tag = (byte)(derVal.tag & 0x1f);
-                    }
-                } else {
-                    nextUpdate = null;
-                }
-            }
-            // singleExtensions
-            if (tmp.available() > 0) {
-                derVal = tmp.getDerValue();
-                if (derVal.isContextSpecific((byte)1)) {
-                    DerValue[] singleExtDer = derVal.data.getSequence(3);
-                    singleExtensions =
-                        new HashMap<String, java.security.cert.Extension>
-                            (singleExtDer.length);
-                    for (int i = 0; i < singleExtDer.length; i++) {
-                        Extension ext = new Extension(singleExtDer[i]);
-                        if (DEBUG != null) {
-                            DEBUG.println("OCSP single extension: " + ext);
-                        }
-                        // We don't support any extensions yet. Therefore, if it
-                        // is critical we must throw an exception because we
-                        // don't know how to process it.
-                        if (ext.isCritical()) {
-                            throw new IOException(
-                                "Unsupported OCSP critical extension: " +
-                                ext.getExtensionId());
-                        }
-                        singleExtensions.put(ext.getId(), ext);
-                    }
-                } else {
-                    singleExtensions = Collections.emptyMap();
-                }
-            } else {
-                singleExtensions = Collections.emptyMap();
-            }
-
-            long now = System.currentTimeMillis();
-            Date nowPlusSkew = new Date(now + MAX_CLOCK_SKEW);
-            Date nowMinusSkew = new Date(now - MAX_CLOCK_SKEW);
-            if (DEBUG != null) {
-                String until = "";
-                if (nextUpdate != null) {
-                    until = " until " + nextUpdate;
-                }
-                DEBUG.println("Response's validity interval is from " +
-                    thisUpdate + until);
-            }
-            // Check that the test date is within the validity interval
-            if ((thisUpdate != null && nowPlusSkew.before(thisUpdate)) ||
-                (nextUpdate != null && nowMinusSkew.after(nextUpdate))) {
-
-                if (DEBUG != null) {
-                    DEBUG.println("Response is unreliable: its validity " +
-                        "interval is out-of-date");
-                }
-                throw new IOException("Response is unreliable: its validity " +
-                    "interval is out-of-date");
-            }
-        }
-
-        /*
-         * Return the certificate's revocation status code
-         */
-        @Override public CertStatus getCertStatus() {
-            return certStatus;
-        }
-
-        private CertId getCertId() {
-            return certId;
-        }
-
-        @Override public Date getRevocationTime() {
-            return (Date) revocationTime.clone();
-        }
-
-        @Override public CRLReason getRevocationReason() {
-            return revocationReason;
-        }
-
-        @Override
-        public Map<String, java.security.cert.Extension> getSingleExtensions() {
-            return Collections.unmodifiableMap(singleExtensions);
-        }
-
-        /**
-         * Construct a string representation of a single OCSP response.
-         */
-        @Override public String toString() {
-            StringBuilder sb = new StringBuilder();
-            sb.append("SingleResponse:  \n");
-            sb.append(certId);
-            sb.append("\nCertStatus: "+ certStatus + "\n");
-            if (certStatus == CertStatus.REVOKED) {
-                sb.append("revocationTime is " + revocationTime + "\n");
-                sb.append("revocationReason is " + revocationReason + "\n");
-            }
-            sb.append("thisUpdate is " + thisUpdate + "\n");
-            if (nextUpdate != null) {
-                sb.append("nextUpdate is " + nextUpdate + "\n");
-            }
-            return sb.toString();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/PKIXCertPathValidator.java b/ojluni/src/main/java/sun/security/provider/certpath/PKIXCertPathValidator.java
deleted file mode 100755
index bab5834..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/PKIXCertPathValidator.java
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * Copyright (c) 2000, 2012, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.io.IOException;
-import java.security.AccessController;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.cert.CertPath;
-import java.security.cert.CertPathParameters;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.CertPathValidatorSpi;
-import java.security.cert.CertPathValidatorResult;
-import java.security.cert.PKIXCertPathChecker;
-import java.security.cert.PKIXCertPathValidatorResult;
-import java.security.cert.PKIXParameters;
-import java.security.cert.PKIXReason;
-import java.security.cert.PolicyNode;
-import java.security.cert.TrustAnchor;
-import java.security.cert.X509Certificate;
-import java.security.cert.X509CertSelector;
-import java.util.Collections;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Set;
-import javax.security.auth.x500.X500Principal;
-import sun.security.action.GetBooleanSecurityPropertyAction;
-import sun.security.util.Debug;
-
-import sun.security.x509.X509CertImpl;
-
-
-/**
- * This class implements the PKIX validation algorithm for certification
- * paths consisting exclusively of <code>X509Certificates</code>. It uses
- * the specified input parameter set (which must be a
- * <code>PKIXParameters</code> object) and signature provider (if any).
- *
- * @since       1.4
- * @author      Yassir Elley
- */
-public class PKIXCertPathValidator extends CertPathValidatorSpi {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-    private Date testDate;
-    private List<PKIXCertPathChecker> userCheckers;
-    private String sigProvider;
-    private BasicChecker basicChecker;
-    private boolean ocspEnabled = false;
-    private boolean onlyEECert = false;
-
-    /**
-     * Default constructor.
-     */
-    public PKIXCertPathValidator() {}
-
-    /**
-     * Validates a certification path consisting exclusively of
-     * <code>X509Certificate</code>s using the PKIX validation algorithm,
-     * which uses the specified input parameter set.
-     * The input parameter set must be a <code>PKIXParameters</code> object.
-     *
-     * @param cp the X509 certification path
-     * @param param the input PKIX parameter set
-     * @return the result
-     * @exception CertPathValidatorException Exception thrown if cert path
-     * does not validate.
-     * @exception InvalidAlgorithmParameterException if the specified
-     * parameters are inappropriate for this certification path validator
-     */
-    public CertPathValidatorResult engineValidate(CertPath cp,
-        CertPathParameters param)
-        throws CertPathValidatorException, InvalidAlgorithmParameterException
-    {
-        if (debug != null)
-            debug.println("PKIXCertPathValidator.engineValidate()...");
-
-        if (!(param instanceof PKIXParameters)) {
-            throw new InvalidAlgorithmParameterException("inappropriate "
-                + "parameters, must be an instance of PKIXParameters");
-        }
-
-        if (!cp.getType().equals("X.509") && !cp.getType().equals("X509")) {
-            throw new InvalidAlgorithmParameterException("inappropriate "
-                + "certification path type specified, must be X.509 or X509");
-        }
-
-        PKIXParameters pkixParam = (PKIXParameters) param;
-
-        // Make sure that none of the trust anchors include name constraints
-        // (not supported).
-        Set<TrustAnchor> anchors = pkixParam.getTrustAnchors();
-        for (TrustAnchor anchor : anchors) {
-            if (anchor.getNameConstraints() != null) {
-                throw new InvalidAlgorithmParameterException
-                    ("name constraints in trust anchor not supported");
-            }
-        }
-
-        // the certpath which has been passed in (cp)
-        // has the target cert as the first certificate - we
-        // need to keep this cp so we can return it
-        // in case of an exception and for policy qualifier
-        // processing - however, for certpath validation,
-        // we need to create a reversed path, where we reverse the
-        // ordering so that the target cert is the last certificate
-
-        // Must copy elements of certList into a new modifiable List before
-        // calling Collections.reverse().
-        ArrayList<X509Certificate> certList = new ArrayList<X509Certificate>
-            ((List<X509Certificate>)cp.getCertificates());
-        if (debug != null) {
-            if (certList.isEmpty()) {
-                debug.println("PKIXCertPathValidator.engineValidate() "
-                    + "certList is empty");
-            }
-            debug.println("PKIXCertPathValidator.engineValidate() "
-                + "reversing certpath...");
-        }
-        Collections.reverse(certList);
-
-        // now certList has the target cert as the last cert and we
-        // can proceed with normal validation
-
-        populateVariables(pkixParam);
-
-        // Retrieve the first certificate in the certpath
-        // (to be used later in pre-screening)
-        X509Certificate firstCert = null;
-        if (!certList.isEmpty()) {
-            firstCert = certList.get(0);
-        }
-
-        CertPathValidatorException lastException = null;
-
-        // We iterate through the set of trust anchors until we find
-        // one that works at which time we stop iterating
-        for (TrustAnchor anchor : anchors) {
-            X509Certificate trustedCert = anchor.getTrustedCert();
-            if (trustedCert != null) {
-                if (debug != null) {
-                    debug.println("PKIXCertPathValidator.engineValidate() "
-                        + "anchor.getTrustedCert() != null");
-                }
-
-                // if this trust anchor is not worth trying,
-                // we move on to the next one
-                if (!isWorthTrying(trustedCert, firstCert)) {
-                    continue;
-                }
-
-                if (debug != null) {
-                    debug.println("anchor.getTrustedCert()."
-                        + "getSubjectX500Principal() = "
-                        + trustedCert.getSubjectX500Principal());
-                }
-            } else {
-                if (debug != null) {
-                    debug.println("PKIXCertPathValidator.engineValidate(): "
-                        + "anchor.getTrustedCert() == null");
-                }
-            }
-
-            try {
-                PolicyNodeImpl rootNode = new PolicyNodeImpl(null,
-                    PolicyChecker.ANY_POLICY, null, false,
-                    Collections.singleton(PolicyChecker.ANY_POLICY), false);
-                PolicyNode policyTree =
-                    doValidate(anchor, cp, certList, pkixParam, rootNode);
-                // if this anchor works, return success
-                return new PKIXCertPathValidatorResult(anchor, policyTree,
-                    basicChecker.getPublicKey());
-            } catch (CertPathValidatorException cpe) {
-                // remember this exception
-                lastException = cpe;
-            }
-        }
-
-        // could not find a trust anchor that verified
-        // (a) if we did a validation and it failed, use that exception
-        if (lastException != null) {
-            throw lastException;
-        }
-        // (b) otherwise, generate new exception
-        throw new CertPathValidatorException
-            ("Path does not chain with any of the trust anchors",
-             null, null, -1, PKIXReason.NO_TRUST_ANCHOR);
-    }
-
-    /**
-     * Internal method to do some simple checks to see if a given cert is
-     * worth trying to validate in the chain.
-     */
-    private boolean isWorthTrying(X509Certificate trustedCert,
-          X509Certificate firstCert) {
-
-        boolean worthy = false;
-
-        if (debug != null) {
-            debug.println("PKIXCertPathValidator.isWorthTrying() checking "
-                + "if this trusted cert is worth trying ...");
-        }
-
-        if (firstCert == null) {
-            return true;
-        }
-
-        AdaptableX509CertSelector issuerSelector =
-                        new AdaptableX509CertSelector();
-
-        // check trusted certificate's subject
-        issuerSelector.setSubject(firstCert.getIssuerX500Principal());
-
-        // check the validity period
-        issuerSelector.setValidityPeriod(firstCert.getNotBefore(),
-                                                firstCert.getNotAfter());
-
-        /*
-         * Facilitate certification path construction with authority
-         * key identifier and subject key identifier.
-         */
-        try {
-            X509CertImpl firstCertImpl = X509CertImpl.toImpl(firstCert);
-            issuerSelector.parseAuthorityKeyIdentifierExtension(
-                        firstCertImpl.getAuthorityKeyIdentifierExtension());
-
-            worthy = issuerSelector.match(trustedCert);
-        } catch (Exception e) {
-            // It is not worth trying.
-        }
-
-        if (debug != null) {
-            if (worthy) {
-                debug.println("YES - try this trustedCert");
-            } else {
-                debug.println("NO - don't try this trustedCert");
-            }
-        }
-
-        return worthy;
-    }
-
-    /**
-     * Internal method to setup the internal state
-     */
-    private void populateVariables(PKIXParameters pkixParam)
-    {
-        // default value for testDate is current time
-        testDate = pkixParam.getDate();
-        if (testDate == null) {
-            testDate = new Date(System.currentTimeMillis());
-        }
-
-        userCheckers = pkixParam.getCertPathCheckers();
-        sigProvider = pkixParam.getSigProvider();
-
-        if (pkixParam.isRevocationEnabled()) {
-            // Examine OCSP security property
-            ocspEnabled = AccessController.doPrivileged(
-                new GetBooleanSecurityPropertyAction
-                    (OCSPChecker.OCSP_ENABLE_PROP));
-            onlyEECert = AccessController.doPrivileged(
-                new GetBooleanSecurityPropertyAction
-                    ("com.sun.security.onlyCheckRevocationOfEECert"));
-        }
-    }
-
-    /**
-     * Internal method to actually validate a constructed path.
-     *
-     * @return the valid policy tree
-     */
-    private PolicyNode doValidate(
-            TrustAnchor anchor, CertPath cpOriginal,
-            ArrayList<X509Certificate> certList, PKIXParameters pkixParam,
-            PolicyNodeImpl rootNode) throws CertPathValidatorException
-    {
-        int certPathLen = certList.size();
-
-        basicChecker = new BasicChecker(anchor, testDate, sigProvider, false);
-        AlgorithmChecker algorithmChecker = new AlgorithmChecker(anchor);
-        KeyChecker keyChecker = new KeyChecker(certPathLen,
-            pkixParam.getTargetCertConstraints());
-        ConstraintsChecker constraintsChecker =
-            new ConstraintsChecker(certPathLen);
-
-        PolicyChecker policyChecker =
-            new PolicyChecker(pkixParam.getInitialPolicies(), certPathLen,
-                              pkixParam.isExplicitPolicyRequired(),
-                              pkixParam.isPolicyMappingInhibited(),
-                              pkixParam.isAnyPolicyInhibited(),
-                              pkixParam.getPolicyQualifiersRejected(),
-                              rootNode);
-        UntrustedChecker untrustedChecker = new UntrustedChecker();
-
-        ArrayList<PKIXCertPathChecker> certPathCheckers =
-            new ArrayList<PKIXCertPathChecker>();
-        // add standard checkers that we will be using
-        certPathCheckers.add(untrustedChecker);
-        certPathCheckers.add(algorithmChecker);
-        certPathCheckers.add(keyChecker);
-        certPathCheckers.add(constraintsChecker);
-        certPathCheckers.add(policyChecker);
-        certPathCheckers.add(basicChecker);
-
-        // only add a revocationChecker if revocation is enabled
-        if (pkixParam.isRevocationEnabled()) {
-
-            // Use OCSP if it has been enabled
-            if (ocspEnabled) {
-                OCSPChecker ocspChecker =
-                    new OCSPChecker(cpOriginal, pkixParam, onlyEECert);
-                certPathCheckers.add(ocspChecker);
-            }
-
-            // Always use CRLs
-            CrlRevocationChecker revocationChecker = new
-                CrlRevocationChecker(anchor, pkixParam, certList, onlyEECert);
-            certPathCheckers.add(revocationChecker);
-        }
-
-        // add user-specified checkers
-        certPathCheckers.addAll(userCheckers);
-
-        PKIXMasterCertPathValidator masterValidator =
-            new PKIXMasterCertPathValidator(certPathCheckers);
-
-        masterValidator.validate(cpOriginal, certList);
-
-        return policyChecker.getPolicyTree();
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/PKIXMasterCertPathValidator.java b/ojluni/src/main/java/sun/security/provider/certpath/PKIXMasterCertPathValidator.java
deleted file mode 100755
index e825b84..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/PKIXMasterCertPathValidator.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (c) 2000, 2009, 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.
- */
-
-package sun.security.provider.certpath;
-
-import sun.security.util.Debug;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-import java.security.cert.CertificateRevokedException;
-import java.security.cert.CertPath;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.CertPathValidatorException.BasicReason;
-import java.security.cert.PKIXCertPathChecker;
-import java.security.cert.PKIXReason;
-import java.security.cert.X509Certificate;
-
-/**
- * This class is initialized with a list of <code>PKIXCertPathChecker</code>s
- * and is used to verify the certificates in a <code>CertPath</code> by
- * feeding each certificate to each <code>PKIXCertPathChecker</code>.
- *
- * @since       1.4
- * @author      Yassir Elley
- */
-class PKIXMasterCertPathValidator {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-    private List<PKIXCertPathChecker> certPathCheckers;
-
-    /**
-     * Initializes the list of PKIXCertPathCheckers whose checks
-     * will be performed on each certificate in the certpath.
-     *
-     * @param certPathCheckers a List of checkers to use
-     */
-    PKIXMasterCertPathValidator(List<PKIXCertPathChecker> certPathCheckers) {
-        this.certPathCheckers = certPathCheckers;
-    }
-
-    /**
-     * Validates a certification path consisting exclusively of
-     * <code>X509Certificate</code>s using the
-     * <code>PKIXCertPathChecker</code>s specified
-     * in the constructor. It is assumed that the
-     * <code>PKIXCertPathChecker</code>s
-     * have been initialized with any input parameters they may need.
-     *
-     * @param cpOriginal the original X509 CertPath passed in by the user
-     * @param reversedCertList the reversed X509 CertPath (as a List)
-     * @exception CertPathValidatorException Exception thrown if cert
-     * path does not validate.
-     */
-    void validate(CertPath cpOriginal, List<X509Certificate> reversedCertList)
-        throws CertPathValidatorException
-    {
-        // we actually process reversedCertList, but we keep cpOriginal because
-        // we need to return the original certPath when we throw an exception.
-        // we will also need to modify the index appropriately when we
-        // throw an exception.
-
-        int cpSize = reversedCertList.size();
-
-        if (debug != null) {
-            debug.println("--------------------------------------------------"
-                  + "------------");
-            debug.println("Executing PKIX certification path validation "
-                  + "algorithm.");
-        }
-
-        for (int i = 0; i < cpSize; i++) {
-
-            /* The basic loop algorithm is that we get the
-             * current certificate, we verify the current certificate using
-             * information from the previous certificate and from the state,
-             * and we modify the state for the next loop by setting the
-             * current certificate of this loop to be the previous certificate
-             * of the next loop. The state is initialized during first loop.
-             */
-            if (debug != null)
-                debug.println("Checking cert" + (i+1) + " ...");
-
-            X509Certificate currCert = reversedCertList.get(i);
-            Set<String> unresolvedCritExts =
-                                        currCert.getCriticalExtensionOIDs();
-            if (unresolvedCritExts == null) {
-                unresolvedCritExts = Collections.<String>emptySet();
-            }
-
-            if (debug != null && !unresolvedCritExts.isEmpty()) {
-                debug.println("Set of critical extensions:");
-                for (String oid : unresolvedCritExts) {
-                    debug.println(oid);
-                }
-            }
-
-            CertPathValidatorException ocspCause = null;
-            for (int j = 0; j < certPathCheckers.size(); j++) {
-
-                PKIXCertPathChecker currChecker = certPathCheckers.get(j);
-                if (debug != null) {
-                    debug.println("-Using checker" + (j + 1) + " ... [" +
-                        currChecker.getClass().getName() + "]");
-                }
-
-                if (i == 0)
-                    currChecker.init(false);
-
-                try {
-                    currChecker.check(currCert, unresolvedCritExts);
-
-                    // OCSP has validated the cert so skip the CRL check
-                    if (isRevocationCheck(currChecker, j, certPathCheckers)) {
-                        if (debug != null) {
-                            debug.println("-checker" + (j + 1) +
-                                " validation succeeded");
-                        }
-                        j++;
-                        continue; // skip
-                    }
-
-                } catch (CertPathValidatorException cpve) {
-                    // Throw the saved OCSP exception unless the CRL
-                    // checker has determined that the cert is revoked
-                    if (ocspCause != null &&
-                            currChecker instanceof CrlRevocationChecker) {
-                        if (cpve.getReason() == BasicReason.REVOKED) {
-                            throw cpve;
-                        } else {
-                            throw ocspCause;
-                        }
-                    }
-                    /*
-                     * Handle failover from OCSP to CRLs
-                     */
-                    CertPathValidatorException currentCause =
-                        new CertPathValidatorException(cpve.getMessage(),
-                            cpve.getCause(), cpOriginal, cpSize - (i + 1),
-                            cpve.getReason());
-
-                    // Check if OCSP has confirmed that the cert was revoked
-                    if (cpve.getReason() == BasicReason.REVOKED) {
-                        throw currentCause;
-                    }
-                    // Check if it is appropriate to failover
-                    if (! isRevocationCheck(currChecker, j, certPathCheckers)) {
-                        // no failover
-                        throw currentCause;
-                    }
-                    // Save the current exception
-                    // (in case the CRL check also fails)
-                    ocspCause = currentCause;
-
-                    // Otherwise, failover to CRLs
-                    if (debug != null) {
-                        debug.println(cpve.getMessage());
-                        debug.println(
-                            "preparing to failover (from OCSP to CRLs)");
-                    }
-                }
-
-                if (debug != null)
-                    debug.println("-checker" + (j+1) + " validation succeeded");
-            }
-
-            if (debug != null)
-                debug.println("checking for unresolvedCritExts");
-            if (!unresolvedCritExts.isEmpty()) {
-                throw new CertPathValidatorException("unrecognized " +
-                    "critical extension(s)", null, cpOriginal, cpSize-(i+1),
-                    PKIXReason.UNRECOGNIZED_CRIT_EXT);
-            }
-
-            if (debug != null)
-                debug.println("\ncert" + (i+1) + " validation succeeded.\n");
-        }
-
-        if (debug != null) {
-            debug.println("Cert path validation succeeded. (PKIX validation "
-                    + "algorithm)");
-            debug.println("-------------------------------------------------"
-                    + "-------------");
-        }
-    }
-
-    /*
-     * Examines the list of PKIX cert path checkers to determine whether
-     * both the current checker and the next checker are revocation checkers.
-     * OCSPChecker and CrlRevocationChecker are both revocation checkers.
-     */
-    private static boolean isRevocationCheck(PKIXCertPathChecker checker,
-        int index, List<PKIXCertPathChecker> checkers) {
-
-        if (checker instanceof OCSPChecker && index + 1 < checkers.size()) {
-            PKIXCertPathChecker nextChecker = checkers.get(index + 1);
-            if (nextChecker instanceof CrlRevocationChecker) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/PolicyChecker.java b/ojluni/src/main/java/sun/security/provider/certpath/PolicyChecker.java
deleted file mode 100755
index a4acc87..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/PolicyChecker.java
+++ /dev/null
@@ -1,926 +0,0 @@
-/*
- * Copyright (c) 2000, 2008, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.util.*;
-import java.io.IOException;
-
-import java.security.cert.Certificate;
-import java.security.cert.CertificateException;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.PKIXCertPathChecker;
-import java.security.cert.PKIXReason;
-import java.security.cert.PolicyNode;
-import java.security.cert.PolicyQualifierInfo;
-import java.security.cert.X509Certificate;
-
-import sun.security.util.Debug;
-import sun.security.x509.CertificatePoliciesExtension;
-import sun.security.x509.PolicyConstraintsExtension;
-import sun.security.x509.PolicyMappingsExtension;
-import sun.security.x509.CertificatePolicyMap;
-import sun.security.x509.PKIXExtensions;
-import sun.security.x509.PolicyInformation;
-import sun.security.x509.X509CertImpl;
-import sun.security.x509.InhibitAnyPolicyExtension;
-
-/**
- * PolicyChecker is a <code>PKIXCertPathChecker</code> that checks policy
- * information on a PKIX certificate, namely certificate policies, policy
- * mappings, policy constraints and policy qualifiers.
- *
- * @since       1.4
- * @author      Yassir Elley
- */
-class PolicyChecker extends PKIXCertPathChecker {
-
-    private final Set<String> initPolicies;
-    private final int certPathLen;
-    private final boolean expPolicyRequired;
-    private final boolean polMappingInhibited;
-    private final boolean anyPolicyInhibited;
-    private final boolean rejectPolicyQualifiers;
-    private PolicyNodeImpl rootNode;
-    private int explicitPolicy;
-    private int policyMapping;
-    private int inhibitAnyPolicy;
-    private int certIndex;
-
-    private Set<String> supportedExts;
-
-    private static final Debug debug = Debug.getInstance("certpath");
-    static final String ANY_POLICY = "2.5.29.32.0";
-
-    /**
-     * Constructs a Policy Checker.
-     *
-     * @param initialPolicies Set of initial policies
-     * @param certPathLen length of the certification path to be checked
-     * @param expPolicyRequired true if explicit policy is required
-     * @param polMappingInhibited true if policy mapping is inhibited
-     * @param anyPolicyInhibited true if the ANY_POLICY OID should be inhibited
-     * @param rejectPolicyQualifiers true if pol qualifiers are to be rejected
-     * @param rootNode the initial root node of the valid policy tree
-     */
-    PolicyChecker(Set<String> initialPolicies, int certPathLen,
-        boolean expPolicyRequired, boolean polMappingInhibited,
-        boolean anyPolicyInhibited, boolean rejectPolicyQualifiers,
-        PolicyNodeImpl rootNode) throws CertPathValidatorException
-    {
-        if (initialPolicies.isEmpty()) {
-            // if no initialPolicies are specified by user, set
-            // initPolicies to be anyPolicy by default
-            this.initPolicies = new HashSet<String>(1);
-            this.initPolicies.add(ANY_POLICY);
-        } else {
-            this.initPolicies = new HashSet<String>(initialPolicies);
-        }
-        this.certPathLen = certPathLen;
-        this.expPolicyRequired = expPolicyRequired;
-        this.polMappingInhibited = polMappingInhibited;
-        this.anyPolicyInhibited = anyPolicyInhibited;
-        this.rejectPolicyQualifiers = rejectPolicyQualifiers;
-        this.rootNode = rootNode;
-        init(false);
-    }
-
-    /**
-     * Initializes the internal state of the checker from parameters
-     * specified in the constructor
-     *
-     * @param forward a boolean indicating whether this checker should
-     * be initialized capable of building in the forward direction
-     * @exception CertPathValidatorException Exception thrown if user
-     * wants to enable forward checking and forward checking is not supported.
-     */
-    public void init(boolean forward) throws CertPathValidatorException {
-        if (forward) {
-            throw new CertPathValidatorException
-                                        ("forward checking not supported");
-        }
-
-        certIndex = 1;
-        explicitPolicy = (expPolicyRequired ? 0 : certPathLen + 1);
-        policyMapping = (polMappingInhibited ? 0 : certPathLen + 1);
-        inhibitAnyPolicy = (anyPolicyInhibited ? 0 : certPathLen + 1);
-    }
-
-    /**
-     * Checks if forward checking is supported. Forward checking refers
-     * to the ability of the PKIXCertPathChecker to perform its checks
-     * when presented with certificates in the forward direction (from
-     * target to anchor).
-     *
-     * @return true if forward checking is supported, false otherwise
-     */
-    public boolean isForwardCheckingSupported() {
-        return false;
-    }
-
-    /**
-     * Gets an immutable Set of the OID strings for the extensions that
-     * the PKIXCertPathChecker supports (i.e. recognizes, is able to
-     * process), or null if no extensions are
-     * supported. All OID strings that a PKIXCertPathChecker might
-     * possibly be able to process should be included.
-     *
-     * @return the Set of extensions supported by this PKIXCertPathChecker,
-     * or null if no extensions are supported
-     */
-    public Set<String> getSupportedExtensions() {
-        if (supportedExts == null) {
-            supportedExts = new HashSet<String>();
-            supportedExts.add(PKIXExtensions.CertificatePolicies_Id.toString());
-            supportedExts.add(PKIXExtensions.PolicyMappings_Id.toString());
-            supportedExts.add(PKIXExtensions.PolicyConstraints_Id.toString());
-            supportedExts.add(PKIXExtensions.InhibitAnyPolicy_Id.toString());
-            supportedExts = Collections.unmodifiableSet(supportedExts);
-        }
-        return supportedExts;
-    }
-
-    /**
-     * Performs the policy processing checks on the certificate using its
-     * internal state.
-     *
-     * @param cert the Certificate to be processed
-     * @param unresCritExts the unresolved critical extensions
-     * @exception CertPathValidatorException Exception thrown if
-     * the certificate does not verify.
-     */
-    public void check(Certificate cert, Collection<String> unresCritExts)
-        throws CertPathValidatorException
-    {
-        // now do the policy checks
-        checkPolicy((X509Certificate) cert);
-
-        if (unresCritExts != null && !unresCritExts.isEmpty()) {
-            unresCritExts.remove(PKIXExtensions.CertificatePolicies_Id.toString());
-            unresCritExts.remove(PKIXExtensions.PolicyMappings_Id.toString());
-            unresCritExts.remove(PKIXExtensions.PolicyConstraints_Id.toString());
-            unresCritExts.remove(PKIXExtensions.InhibitAnyPolicy_Id.toString());
-        }
-    }
-
-    /**
-     * Internal method to run through all the checks.
-     *
-     * @param currCert the certificate to be processed
-     * @exception CertPathValidatorException Exception thrown if
-     * the certificate does not verify
-     */
-    private void checkPolicy(X509Certificate currCert)
-        throws CertPathValidatorException
-    {
-        String msg = "certificate policies";
-        if (debug != null) {
-            debug.println("PolicyChecker.checkPolicy() ---checking " + msg
-                + "...");
-            debug.println("PolicyChecker.checkPolicy() certIndex = "
-                + certIndex);
-            debug.println("PolicyChecker.checkPolicy() BEFORE PROCESSING: "
-                + "explicitPolicy = " + explicitPolicy);
-            debug.println("PolicyChecker.checkPolicy() BEFORE PROCESSING: "
-                + "policyMapping = " + policyMapping);
-            debug.println("PolicyChecker.checkPolicy() BEFORE PROCESSING: "
-                + "inhibitAnyPolicy = " + inhibitAnyPolicy);
-            debug.println("PolicyChecker.checkPolicy() BEFORE PROCESSING: "
-                + "policyTree = " + rootNode);
-        }
-
-        X509CertImpl currCertImpl = null;
-        try {
-            currCertImpl = X509CertImpl.toImpl(currCert);
-        } catch (CertificateException ce) {
-            throw new CertPathValidatorException(ce);
-        }
-
-        boolean finalCert = (certIndex == certPathLen);
-
-        rootNode = processPolicies(certIndex, initPolicies, explicitPolicy,
-            policyMapping, inhibitAnyPolicy, rejectPolicyQualifiers, rootNode,
-            currCertImpl, finalCert);
-
-        if (!finalCert) {
-            explicitPolicy = mergeExplicitPolicy(explicitPolicy, currCertImpl,
-                                                 finalCert);
-            policyMapping = mergePolicyMapping(policyMapping, currCertImpl);
-            inhibitAnyPolicy = mergeInhibitAnyPolicy(inhibitAnyPolicy,
-                                                     currCertImpl);
-        }
-
-        certIndex++;
-
-        if (debug != null) {
-            debug.println("PolicyChecker.checkPolicy() AFTER PROCESSING: "
-                + "explicitPolicy = " + explicitPolicy);
-            debug.println("PolicyChecker.checkPolicy() AFTER PROCESSING: "
-                + "policyMapping = " + policyMapping);
-            debug.println("PolicyChecker.checkPolicy() AFTER PROCESSING: "
-                + "inhibitAnyPolicy = " + inhibitAnyPolicy);
-            debug.println("PolicyChecker.checkPolicy() AFTER PROCESSING: "
-                + "policyTree = " + rootNode);
-            debug.println("PolicyChecker.checkPolicy() " + msg + " verified");
-        }
-    }
-
-    /**
-     * Merges the specified explicitPolicy value with the
-     * requireExplicitPolicy field of the <code>PolicyConstraints</code>
-     * extension obtained from the certificate. An explicitPolicy
-     * value of -1 implies no constraint.
-     *
-     * @param explicitPolicy an integer which indicates if a non-null
-     * valid policy tree is required
-     * @param currCert the Certificate to be processed
-     * @param finalCert a boolean indicating whether currCert is
-     * the final cert in the cert path
-     * @return returns the new explicitPolicy value
-     * @exception CertPathValidatorException Exception thrown if an error
-     * occurs
-     */
-    static int mergeExplicitPolicy(int explicitPolicy, X509CertImpl currCert,
-        boolean finalCert) throws CertPathValidatorException
-    {
-        if ((explicitPolicy > 0) && !X509CertImpl.isSelfIssued(currCert)) {
-            explicitPolicy--;
-        }
-
-        try {
-            PolicyConstraintsExtension polConstExt
-                = currCert.getPolicyConstraintsExtension();
-            if (polConstExt == null)
-                return explicitPolicy;
-            int require = ((Integer)
-                polConstExt.get(PolicyConstraintsExtension.REQUIRE)).intValue();
-            if (debug != null) {
-                debug.println("PolicyChecker.mergeExplicitPolicy() "
-                   + "require Index from cert = " + require);
-            }
-            if (!finalCert) {
-                if (require != -1) {
-                    if ((explicitPolicy == -1) || (require < explicitPolicy)) {
-                        explicitPolicy = require;
-                    }
-                }
-            } else {
-                if (require == 0)
-                    explicitPolicy = require;
-            }
-        } catch (Exception e) {
-            if (debug != null) {
-                debug.println("PolicyChecker.mergeExplicitPolicy "
-                              + "unexpected exception");
-                e.printStackTrace();
-            }
-            throw new CertPathValidatorException(e);
-        }
-
-        return explicitPolicy;
-    }
-
-    /**
-     * Merges the specified policyMapping value with the
-     * inhibitPolicyMapping field of the <code>PolicyConstraints</code>
-     * extension obtained from the certificate. A policyMapping
-     * value of -1 implies no constraint.
-     *
-     * @param policyMapping an integer which indicates if policy mapping
-     * is inhibited
-     * @param currCert the Certificate to be processed
-     * @return returns the new policyMapping value
-     * @exception CertPathValidatorException Exception thrown if an error
-     * occurs
-     */
-    static int mergePolicyMapping(int policyMapping, X509CertImpl currCert)
-        throws CertPathValidatorException
-    {
-        if ((policyMapping > 0) && !X509CertImpl.isSelfIssued(currCert)) {
-            policyMapping--;
-        }
-
-        try {
-            PolicyConstraintsExtension polConstExt
-                = currCert.getPolicyConstraintsExtension();
-            if (polConstExt == null)
-                return policyMapping;
-
-            int inhibit = ((Integer)
-                polConstExt.get(PolicyConstraintsExtension.INHIBIT)).intValue();
-            if (debug != null)
-                debug.println("PolicyChecker.mergePolicyMapping() "
-                    + "inhibit Index from cert = " + inhibit);
-
-            if (inhibit != -1) {
-                if ((policyMapping == -1) || (inhibit < policyMapping)) {
-                    policyMapping = inhibit;
-                }
-            }
-        } catch (Exception e) {
-            if (debug != null) {
-                debug.println("PolicyChecker.mergePolicyMapping "
-                              + "unexpected exception");
-                e.printStackTrace();
-            }
-            throw new CertPathValidatorException(e);
-        }
-
-        return policyMapping;
-    }
-
-    /**
-     * Merges the specified inhibitAnyPolicy value with the
-     * SkipCerts value of the InhibitAnyPolicy
-     * extension obtained from the certificate.
-     *
-     * @param inhibitAnyPolicy an integer which indicates whether
-     * "any-policy" is considered a match
-     * @param currCert the Certificate to be processed
-     * @return returns the new inhibitAnyPolicy value
-     * @exception CertPathValidatorException Exception thrown if an error
-     * occurs
-     */
-    static int mergeInhibitAnyPolicy(int inhibitAnyPolicy,
-        X509CertImpl currCert) throws CertPathValidatorException
-    {
-        if ((inhibitAnyPolicy > 0) && !X509CertImpl.isSelfIssued(currCert)) {
-            inhibitAnyPolicy--;
-        }
-
-        try {
-            InhibitAnyPolicyExtension inhAnyPolExt = (InhibitAnyPolicyExtension)
-                currCert.getExtension(PKIXExtensions.InhibitAnyPolicy_Id);
-            if (inhAnyPolExt == null)
-                return inhibitAnyPolicy;
-
-            int skipCerts = ((Integer)
-                inhAnyPolExt.get(InhibitAnyPolicyExtension.SKIP_CERTS)).intValue();
-            if (debug != null)
-                debug.println("PolicyChecker.mergeInhibitAnyPolicy() "
-                    + "skipCerts Index from cert = " + skipCerts);
-
-            if (skipCerts != -1) {
-                if (skipCerts < inhibitAnyPolicy) {
-                    inhibitAnyPolicy = skipCerts;
-                }
-            }
-        } catch (Exception e) {
-            if (debug != null) {
-                debug.println("PolicyChecker.mergeInhibitAnyPolicy "
-                              + "unexpected exception");
-                e.printStackTrace();
-            }
-            throw new CertPathValidatorException(e);
-        }
-
-        return inhibitAnyPolicy;
-    }
-
-    /**
-     * Processes certificate policies in the certificate.
-     *
-     * @param certIndex the index of the certificate
-     * @param initPolicies the initial policies required by the user
-     * @param explicitPolicy an integer which indicates if a non-null
-     * valid policy tree is required
-     * @param policyMapping an integer which indicates if policy
-     * mapping is inhibited
-     * @param inhibitAnyPolicy an integer which indicates whether
-     * "any-policy" is considered a match
-     * @param rejectPolicyQualifiers a boolean indicating whether the
-     * user wants to reject policies that have qualifiers
-     * @param origRootNode the root node of the valid policy tree
-     * @param currCert the Certificate to be processed
-     * @param finalCert a boolean indicating whether currCert is the final
-     * cert in the cert path
-     * @return the root node of the valid policy tree after modification
-     * @exception CertPathValidatorException Exception thrown if an
-     * error occurs while processing policies.
-     */
-    static PolicyNodeImpl processPolicies(int certIndex, Set<String> initPolicies,
-        int explicitPolicy, int policyMapping, int inhibitAnyPolicy,
-        boolean rejectPolicyQualifiers, PolicyNodeImpl origRootNode,
-        X509CertImpl currCert, boolean finalCert)
-        throws CertPathValidatorException
-    {
-        boolean policiesCritical = false;
-        List<PolicyInformation> policyInfo;
-        PolicyNodeImpl rootNode = null;
-        Set<PolicyQualifierInfo> anyQuals = new HashSet<PolicyQualifierInfo>();
-
-        if (origRootNode == null)
-            rootNode = null;
-        else
-            rootNode = origRootNode.copyTree();
-
-        // retrieve policyOIDs from currCert
-        CertificatePoliciesExtension currCertPolicies
-            = currCert.getCertificatePoliciesExtension();
-
-        // PKIX: Section 6.1.3: Step (d)
-        if ((currCertPolicies != null) && (rootNode != null)) {
-            policiesCritical = currCertPolicies.isCritical();
-            if (debug != null)
-                debug.println("PolicyChecker.processPolicies() "
-                    + "policiesCritical = " + policiesCritical);
-
-            try {
-                policyInfo = (List<PolicyInformation>)
-                    currCertPolicies.get(CertificatePoliciesExtension.POLICIES);
-            } catch (IOException ioe) {
-                throw new CertPathValidatorException("Exception while "
-                    + "retrieving policyOIDs", ioe);
-            }
-
-            if (debug != null)
-                debug.println("PolicyChecker.processPolicies() "
-                    + "rejectPolicyQualifiers = " + rejectPolicyQualifiers);
-
-            boolean foundAnyPolicy = false;
-
-            // process each policy in cert
-            for (PolicyInformation curPolInfo : policyInfo) {
-                String curPolicy =
-                    curPolInfo.getPolicyIdentifier().getIdentifier().toString();
-
-                if (curPolicy.equals(ANY_POLICY)) {
-                    foundAnyPolicy = true;
-                    anyQuals = curPolInfo.getPolicyQualifiers();
-                } else {
-                    // PKIX: Section 6.1.3: Step (d)(1)
-                    if (debug != null)
-                        debug.println("PolicyChecker.processPolicies() "
-                                      + "processing policy: " + curPolicy);
-
-                    // retrieve policy qualifiers from cert
-                    Set<PolicyQualifierInfo> pQuals =
-                                        curPolInfo.getPolicyQualifiers();
-
-                    // reject cert if we find critical policy qualifiers and
-                    // the policyQualifiersRejected flag is set in the params
-                    if (!pQuals.isEmpty() && rejectPolicyQualifiers &&
-                        policiesCritical) {
-                        throw new CertPathValidatorException(
-                            "critical policy qualifiers present in certificate",
-                            null, null, -1, PKIXReason.INVALID_POLICY);
-                    }
-
-                    // PKIX: Section 6.1.3: Step (d)(1)(i)
-                    boolean foundMatch = processParents(certIndex,
-                        policiesCritical, rejectPolicyQualifiers, rootNode,
-                        curPolicy, pQuals, false);
-
-                    if (!foundMatch) {
-                        // PKIX: Section 6.1.3: Step (d)(1)(ii)
-                        processParents(certIndex, policiesCritical,
-                            rejectPolicyQualifiers, rootNode, curPolicy,
-                            pQuals, true);
-                    }
-                }
-            }
-
-            // PKIX: Section 6.1.3: Step (d)(2)
-            if (foundAnyPolicy) {
-                if ((inhibitAnyPolicy > 0) ||
-                        (!finalCert && X509CertImpl.isSelfIssued(currCert))) {
-                    if (debug != null) {
-                        debug.println("PolicyChecker.processPolicies() "
-                            + "processing policy: " + ANY_POLICY);
-                    }
-                    processParents(certIndex, policiesCritical,
-                        rejectPolicyQualifiers, rootNode, ANY_POLICY, anyQuals,
-                        true);
-                }
-            }
-
-            // PKIX: Section 6.1.3: Step (d)(3)
-            rootNode.prune(certIndex);
-            if (!rootNode.getChildren().hasNext()) {
-                rootNode = null;
-            }
-        } else if (currCertPolicies == null) {
-            if (debug != null)
-                debug.println("PolicyChecker.processPolicies() "
-                              + "no policies present in cert");
-            // PKIX: Section 6.1.3: Step (e)
-            rootNode = null;
-        }
-
-        // We delay PKIX: Section 6.1.3: Step (f) to the end
-        // because the code that follows may delete some nodes
-        // resulting in a null tree
-        if (rootNode != null) {
-            if (!finalCert) {
-                // PKIX: Section 6.1.4: Steps (a)-(b)
-                rootNode = processPolicyMappings(currCert, certIndex,
-                    policyMapping, rootNode, policiesCritical, anyQuals);
-            }
-        }
-
-        // At this point, we optimize the PKIX algorithm by
-        // removing those nodes which would later have
-        // been removed by PKIX: Section 6.1.5: Step (g)(iii)
-
-        if ((rootNode != null) && (!initPolicies.contains(ANY_POLICY))
-            && (currCertPolicies != null)) {
-            rootNode = removeInvalidNodes(rootNode, certIndex,
-                                          initPolicies, currCertPolicies);
-
-            // PKIX: Section 6.1.5: Step (g)(iii)
-            if ((rootNode != null) && finalCert) {
-                // rewrite anyPolicy leaf nodes (see method comments)
-                rootNode = rewriteLeafNodes(certIndex, initPolicies, rootNode);
-            }
-        }
-
-
-        if (finalCert) {
-            // PKIX: Section 6.1.5: Steps (a) and (b)
-            explicitPolicy = mergeExplicitPolicy(explicitPolicy, currCert,
-                                             finalCert);
-        }
-
-        // PKIX: Section 6.1.3: Step (f)
-        // verify that either explicit policy is greater than 0 or
-        // the valid_policy_tree is not equal to NULL
-
-        if ((explicitPolicy == 0) && (rootNode == null)) {
-            throw new CertPathValidatorException
-                ("non-null policy tree required and policy tree is null",
-                 null, null, -1, PKIXReason.INVALID_POLICY);
-        }
-
-        return rootNode;
-    }
-
-    /**
-     * Rewrite leaf nodes at the end of validation as described in RFC 3280
-     * section 6.1.5: Step (g)(iii). Leaf nodes with anyPolicy are replaced
-     * by nodes explicitly representing initial policies not already
-     * represented by leaf nodes.
-     *
-     * This method should only be called when processing the final cert
-     * and if the policy tree is not null and initial policies is not
-     * anyPolicy.
-     *
-     * @param certIndex the depth of the tree
-     * @param initPolicies Set of user specified initial policies
-     * @param rootNode the root of the policy tree
-     */
-    private static PolicyNodeImpl rewriteLeafNodes(int certIndex,
-            Set<String> initPolicies, PolicyNodeImpl rootNode) {
-        Set<PolicyNodeImpl> anyNodes =
-                        rootNode.getPolicyNodesValid(certIndex, ANY_POLICY);
-        if (anyNodes.isEmpty()) {
-            return rootNode;
-        }
-        PolicyNodeImpl anyNode = anyNodes.iterator().next();
-        PolicyNodeImpl parentNode = (PolicyNodeImpl)anyNode.getParent();
-        parentNode.deleteChild(anyNode);
-        // see if there are any initialPolicies not represented by leaf nodes
-        Set<String> initial = new HashSet<String>(initPolicies);
-        for (PolicyNodeImpl node : rootNode.getPolicyNodes(certIndex)) {
-            initial.remove(node.getValidPolicy());
-        }
-        if (initial.isEmpty()) {
-            // we deleted the anyPolicy node and have nothing to re-add,
-            // so we need to prune the tree
-            rootNode.prune(certIndex);
-            if (rootNode.getChildren().hasNext() == false) {
-                rootNode = null;
-            }
-        } else {
-            boolean anyCritical = anyNode.isCritical();
-            Set<PolicyQualifierInfo> anyQualifiers =
-                                                anyNode.getPolicyQualifiers();
-            for (String policy : initial) {
-                Set<String> expectedPolicies = Collections.singleton(policy);
-                PolicyNodeImpl node = new PolicyNodeImpl(parentNode, policy,
-                    anyQualifiers, anyCritical, expectedPolicies, false);
-            }
-        }
-        return rootNode;
-    }
-
-    /**
-     * Finds the policy nodes of depth (certIndex-1) where curPolicy
-     * is in the expected policy set and creates a new child node
-     * appropriately. If matchAny is true, then a value of ANY_POLICY
-     * in the expected policy set will match any curPolicy. If matchAny
-     * is false, then the expected policy set must exactly contain the
-     * curPolicy to be considered a match. This method returns a boolean
-     * value indicating whether a match was found.
-     *
-     * @param certIndex the index of the certificate whose policy is
-     * being processed
-     * @param policiesCritical a boolean indicating whether the certificate
-     * policies extension is critical
-     * @param rejectPolicyQualifiers a boolean indicating whether the
-     * user wants to reject policies that have qualifiers
-     * @param rootNode the root node of the valid policy tree
-     * @param curPolicy a String representing the policy being processed
-     * @param pQuals the policy qualifiers of the policy being processed or an
-     * empty Set if there are no qualifiers
-     * @param matchAny a boolean indicating whether a value of ANY_POLICY
-     * in the expected policy set will be considered a match
-     * @return a boolean indicating whether a match was found
-     * @exception CertPathValidatorException Exception thrown if error occurs.
-     */
-    private static boolean processParents(int certIndex,
-        boolean policiesCritical, boolean rejectPolicyQualifiers,
-        PolicyNodeImpl rootNode, String curPolicy,
-        Set<PolicyQualifierInfo> pQuals,
-        boolean matchAny) throws CertPathValidatorException
-    {
-        boolean foundMatch = false;
-
-        if (debug != null)
-            debug.println("PolicyChecker.processParents(): matchAny = "
-                + matchAny);
-
-        // find matching parents
-        Set<PolicyNodeImpl> parentNodes =
-                rootNode.getPolicyNodesExpected(certIndex - 1,
-                                                curPolicy, matchAny);
-
-        // for each matching parent, extend policy tree
-        for (PolicyNodeImpl curParent : parentNodes) {
-            if (debug != null)
-                debug.println("PolicyChecker.processParents() "
-                              + "found parent:\n" + curParent.asString());
-
-            foundMatch = true;
-            String curParPolicy = curParent.getValidPolicy();
-
-            PolicyNodeImpl curNode = null;
-            Set<String> curExpPols = null;
-
-            if (curPolicy.equals(ANY_POLICY)) {
-                // do step 2
-                Set<String> parExpPols = curParent.getExpectedPolicies();
-            parentExplicitPolicies:
-                for (String curParExpPol : parExpPols) {
-
-                    Iterator<PolicyNodeImpl> childIter =
-                                        curParent.getChildren();
-                    while (childIter.hasNext()) {
-                        PolicyNodeImpl childNode = childIter.next();
-                        String childPolicy = childNode.getValidPolicy();
-                        if (curParExpPol.equals(childPolicy)) {
-                            if (debug != null)
-                                debug.println(childPolicy + " in parent's "
-                                    + "expected policy set already appears in "
-                                    + "child node");
-                            continue parentExplicitPolicies;
-                        }
-                    }
-
-                    Set<String> expPols = new HashSet<String>();
-                    expPols.add(curParExpPol);
-
-                    curNode = new PolicyNodeImpl
-                        (curParent, curParExpPol, pQuals,
-                         policiesCritical, expPols, false);
-                }
-            } else {
-                curExpPols = new HashSet<String>();
-                curExpPols.add(curPolicy);
-
-                curNode = new PolicyNodeImpl
-                    (curParent, curPolicy, pQuals,
-                     policiesCritical, curExpPols, false);
-            }
-        }
-
-        return foundMatch;
-    }
-
-    /**
-     * Processes policy mappings in the certificate.
-     *
-     * @param currCert the Certificate to be processed
-     * @param certIndex the index of the current certificate
-     * @param policyMapping an integer which indicates if policy
-     * mapping is inhibited
-     * @param rootNode the root node of the valid policy tree
-     * @param policiesCritical a boolean indicating if the certificate policies
-     * extension is critical
-     * @param anyQuals the qualifiers associated with ANY-POLICY, or an empty
-     * Set if there are no qualifiers associated with ANY-POLICY
-     * @return the root node of the valid policy tree after modification
-     * @exception CertPathValidatorException exception thrown if an error
-     * occurs while processing policy mappings
-     */
-    private static PolicyNodeImpl processPolicyMappings(X509CertImpl currCert,
-        int certIndex, int policyMapping, PolicyNodeImpl rootNode,
-        boolean policiesCritical, Set<PolicyQualifierInfo> anyQuals)
-        throws CertPathValidatorException
-    {
-        PolicyMappingsExtension polMappingsExt
-            = currCert.getPolicyMappingsExtension();
-
-        if (polMappingsExt == null)
-            return rootNode;
-
-        if (debug != null)
-            debug.println("PolicyChecker.processPolicyMappings() "
-                + "inside policyMapping check");
-
-        List<CertificatePolicyMap> maps = null;
-        try {
-            maps = (List<CertificatePolicyMap>)polMappingsExt.get
-                                        (PolicyMappingsExtension.MAP);
-        } catch (IOException e) {
-            if (debug != null) {
-                debug.println("PolicyChecker.processPolicyMappings() "
-                    + "mapping exception");
-                e.printStackTrace();
-            }
-            throw new CertPathValidatorException("Exception while checking "
-                                                 + "mapping", e);
-        }
-
-        boolean childDeleted = false;
-        for (int j = 0; j < maps.size(); j++) {
-            CertificatePolicyMap polMap = maps.get(j);
-            String issuerDomain
-                = polMap.getIssuerIdentifier().getIdentifier().toString();
-            String subjectDomain
-                = polMap.getSubjectIdentifier().getIdentifier().toString();
-            if (debug != null) {
-                debug.println("PolicyChecker.processPolicyMappings() "
-                              + "issuerDomain = " + issuerDomain);
-                debug.println("PolicyChecker.processPolicyMappings() "
-                              + "subjectDomain = " + subjectDomain);
-            }
-
-            if (issuerDomain.equals(ANY_POLICY)) {
-                throw new CertPathValidatorException
-                    ("encountered an issuerDomainPolicy of ANY_POLICY",
-                     null, null, -1, PKIXReason.INVALID_POLICY);
-            }
-
-            if (subjectDomain.equals(ANY_POLICY)) {
-                throw new CertPathValidatorException
-                    ("encountered a subjectDomainPolicy of ANY_POLICY",
-                     null, null, -1, PKIXReason.INVALID_POLICY);
-            }
-
-            Set<PolicyNodeImpl> validNodes =
-                rootNode.getPolicyNodesValid(certIndex, issuerDomain);
-            if (!validNodes.isEmpty()) {
-                for (PolicyNodeImpl curNode : validNodes) {
-                    if ((policyMapping > 0) || (policyMapping == -1)) {
-                        curNode.addExpectedPolicy(subjectDomain);
-                    } else if (policyMapping == 0) {
-                        PolicyNodeImpl parentNode =
-                            (PolicyNodeImpl) curNode.getParent();
-                        if (debug != null)
-                            debug.println("PolicyChecker.processPolicyMappings"
-                                + "() before deleting: policy tree = "
-                                + rootNode);
-                        parentNode.deleteChild(curNode);
-                        childDeleted = true;
-                        if (debug != null)
-                            debug.println("PolicyChecker.processPolicyMappings"
-                                + "() after deleting: policy tree = "
-                                + rootNode);
-                    }
-                }
-            } else { // no node of depth i has a valid policy
-                if ((policyMapping > 0) || (policyMapping == -1)) {
-                    Set<PolicyNodeImpl> validAnyNodes =
-                        rootNode.getPolicyNodesValid(certIndex, ANY_POLICY);
-                    for (PolicyNodeImpl curAnyNode : validAnyNodes) {
-                        PolicyNodeImpl curAnyNodeParent =
-                            (PolicyNodeImpl) curAnyNode.getParent();
-
-                        Set<String> expPols = new HashSet<String>();
-                        expPols.add(subjectDomain);
-
-                        PolicyNodeImpl curNode = new PolicyNodeImpl
-                            (curAnyNodeParent, issuerDomain, anyQuals,
-                             policiesCritical, expPols, true);
-                    }
-                }
-            }
-        }
-
-        if (childDeleted) {
-            rootNode.prune(certIndex);
-            if (!rootNode.getChildren().hasNext()) {
-                if (debug != null)
-                    debug.println("setting rootNode to null");
-                rootNode = null;
-            }
-        }
-
-        return rootNode;
-    }
-
-    /**
-     * Removes those nodes which do not intersect with the initial policies
-     * specified by the user.
-     *
-     * @param rootNode the root node of the valid policy tree
-     * @param certIndex the index of the certificate being processed
-     * @param initPolicies the Set of policies required by the user
-     * @param currCertPolicies the CertificatePoliciesExtension of the
-     * certificate being processed
-     * @returns the root node of the valid policy tree after modification
-     * @exception CertPathValidatorException Exception thrown if error occurs.
-     */
-    private static PolicyNodeImpl removeInvalidNodes(PolicyNodeImpl rootNode,
-        int certIndex, Set<String> initPolicies,
-        CertificatePoliciesExtension currCertPolicies)
-        throws CertPathValidatorException
-    {
-        List<PolicyInformation> policyInfo = null;
-        try {
-            policyInfo = (List<PolicyInformation>)
-                currCertPolicies.get(CertificatePoliciesExtension.POLICIES);
-        } catch (IOException ioe) {
-            throw new CertPathValidatorException("Exception while "
-                + "retrieving policyOIDs", ioe);
-        }
-
-        boolean childDeleted = false;
-        for (PolicyInformation curPolInfo : policyInfo) {
-            String curPolicy =
-                curPolInfo.getPolicyIdentifier().getIdentifier().toString();
-
-            if (debug != null)
-                debug.println("PolicyChecker.processPolicies() "
-                              + "processing policy second time: " + curPolicy);
-
-            Set<PolicyNodeImpl> validNodes =
-                        rootNode.getPolicyNodesValid(certIndex, curPolicy);
-            for (PolicyNodeImpl curNode : validNodes) {
-                PolicyNodeImpl parentNode = (PolicyNodeImpl)curNode.getParent();
-                if (parentNode.getValidPolicy().equals(ANY_POLICY)) {
-                    if ((!initPolicies.contains(curPolicy)) &&
-                        (!curPolicy.equals(ANY_POLICY))) {
-                        if (debug != null)
-                            debug.println("PolicyChecker.processPolicies() "
-                                + "before deleting: policy tree = " + rootNode);
-                        parentNode.deleteChild(curNode);
-                        childDeleted = true;
-                        if (debug != null)
-                            debug.println("PolicyChecker.processPolicies() "
-                                + "after deleting: policy tree = " + rootNode);
-                    }
-                }
-            }
-        }
-
-        if (childDeleted) {
-            rootNode.prune(certIndex);
-            if (!rootNode.getChildren().hasNext()) {
-                rootNode = null;
-            }
-        }
-
-        return rootNode;
-    }
-
-    /**
-     * Gets the root node of the valid policy tree, or null if the
-     * valid policy tree is null. Marks each node of the returned tree
-     * immutable and thread-safe.
-     *
-     * @returns the root node of the valid policy tree, or null if
-     * the valid policy tree is null
-     */
-    PolicyNode getPolicyTree() {
-        if (rootNode == null)
-            return null;
-        else {
-            PolicyNodeImpl policyTree = rootNode.copyTree();
-            policyTree.setImmutable();
-            return policyTree;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/PolicyNodeImpl.java b/ojluni/src/main/java/sun/security/provider/certpath/PolicyNodeImpl.java
deleted file mode 100755
index 13234db..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/PolicyNodeImpl.java
+++ /dev/null
@@ -1,417 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import java.security.cert.*;
-
-/**
- * Implements the <code>PolicyNode</code> interface.
- * <p>
- * This class provides an implementation of the <code>PolicyNode</code>
- * interface, and is used internally to build and search Policy Trees.
- * While the implementation is mutable during construction, it is immutable
- * before returning to a client and no mutable public or protected methods
- * are exposed by this implementation, as per the contract of PolicyNode.
- *
- * @since       1.4
- * @author      Seth Proctor
- * @author      Sean Mullan
- */
-final class PolicyNodeImpl implements PolicyNode {
-
-    /**
-     * Use to specify the special policy "Any Policy"
-     */
-    private static final String ANY_POLICY = "2.5.29.32.0";
-
-    // every node has one parent, and zero or more children
-    private PolicyNodeImpl mParent;
-    private HashSet<PolicyNodeImpl> mChildren;
-
-    // the 4 fields specified by RFC 3280
-    private String mValidPolicy;
-    private HashSet<PolicyQualifierInfo> mQualifierSet;
-    private boolean mCriticalityIndicator;
-    private HashSet<String> mExpectedPolicySet;
-    private boolean mOriginalExpectedPolicySet;
-
-    // the tree depth
-    private int mDepth;
-    // immutability flag
-    private boolean isImmutable = false;
-
-    /**
-     * Constructor which takes a <code>PolicyNodeImpl</code> representing the
-     * parent in the Policy Tree to this node. If null, this is the
-     * root of the tree. The constructor also takes the associated data
-     * for this node, as found in the certificate. It also takes a boolean
-     * argument specifying whether this node is being created as a result
-     * of policy mapping.
-     *
-     * @param parent the PolicyNode above this in the tree, or null if this
-     *               node is the tree's root node
-     * @param validPolicy a String representing this node's valid policy OID
-     * @param qualifierSet the Set of qualifiers for this policy
-     * @param criticalityIndicator a boolean representing whether or not the
-     *                             extension is critical
-     * @param expectedPolicySet a Set of expected policies
-     * @param generatedByPolicyMapping a boolean indicating whether this
-     * node was generated by a policy mapping
-     */
-    PolicyNodeImpl(PolicyNodeImpl parent, String validPolicy,
-                Set<PolicyQualifierInfo> qualifierSet,
-                boolean criticalityIndicator, Set<String> expectedPolicySet,
-                boolean generatedByPolicyMapping) {
-        mParent = parent;
-        mChildren = new HashSet<PolicyNodeImpl>();
-
-        if (validPolicy != null)
-            mValidPolicy = validPolicy;
-        else
-            mValidPolicy = "";
-
-        if (qualifierSet != null)
-            mQualifierSet = new HashSet<PolicyQualifierInfo>(qualifierSet);
-        else
-            mQualifierSet = new HashSet<PolicyQualifierInfo>();
-
-        mCriticalityIndicator = criticalityIndicator;
-
-        if (expectedPolicySet != null)
-            mExpectedPolicySet = new HashSet<String>(expectedPolicySet);
-        else
-            mExpectedPolicySet = new HashSet<String>();
-
-        mOriginalExpectedPolicySet = !generatedByPolicyMapping;
-
-        // see if we're the root, and act appropriately
-        if (mParent != null) {
-            mDepth = mParent.getDepth() + 1;
-            mParent.addChild(this);
-        } else {
-            mDepth = 0;
-        }
-    }
-
-    /**
-     * Alternate constructor which makes a new node with the policy data
-     * in an existing <code>PolicyNodeImpl</code>.
-     *
-     * @param parent a PolicyNode that's the new parent of the node, or
-     *               null if this is the root node
-     * @param node a PolicyNode containing the policy data to copy
-     */
-    PolicyNodeImpl(PolicyNodeImpl parent, PolicyNodeImpl node) {
-        this(parent, node.mValidPolicy, node.mQualifierSet,
-             node.mCriticalityIndicator, node.mExpectedPolicySet, false);
-    }
-
-    public PolicyNode getParent() {
-        return mParent;
-    }
-
-    public Iterator<PolicyNodeImpl> getChildren() {
-        return Collections.unmodifiableSet(mChildren).iterator();
-    }
-
-    public int getDepth() {
-        return mDepth;
-    }
-
-    public String getValidPolicy() {
-        return mValidPolicy;
-    }
-
-    public Set<PolicyQualifierInfo> getPolicyQualifiers() {
-        return Collections.unmodifiableSet(mQualifierSet);
-    }
-
-    public Set<String> getExpectedPolicies() {
-        return Collections.unmodifiableSet(mExpectedPolicySet);
-    }
-
-    public boolean isCritical() {
-        return mCriticalityIndicator;
-    }
-
-    /**
-     * Return a printable representation of the PolicyNode.
-     * Starting at the node on which this method is called,
-     * it recurses through the tree and prints out each node.
-     *
-     * @return a String describing the contents of the Policy Node
-     */
-    public String toString() {
-        StringBuffer buffer = new StringBuffer(this.asString());
-
-        Iterator<PolicyNodeImpl> it = getChildren();
-        while (it.hasNext()) {
-            buffer.append(it.next());
-        }
-        return buffer.toString();
-    }
-
-    // private methods and package private operations
-
-    boolean isImmutable() {
-        return isImmutable;
-    }
-
-    /**
-     * Sets the immutability flag of this node and all of its children
-     * to true.
-     */
-    void setImmutable() {
-        if (isImmutable)
-            return;
-        for (PolicyNodeImpl node : mChildren) {
-            node.setImmutable();
-        }
-        isImmutable = true;
-    }
-
-    /**
-     * Private method sets a child node. This is called from the child's
-     * constructor.
-     *
-     * @param child new <code>PolicyNodeImpl</code> child node
-     */
-    private void addChild(PolicyNodeImpl child) {
-        if (isImmutable) {
-            throw new IllegalStateException("PolicyNode is immutable");
-        }
-        mChildren.add(child);
-    }
-
-    /**
-     * Adds an expectedPolicy to the expected policy set.
-     * If this is the original expected policy set initialized
-     * by the constructor, then the expected policy set is cleared
-     * before the expected policy is added.
-     *
-     * @param expectedPolicy a String representing an expected policy.
-     */
-    void addExpectedPolicy(String expectedPolicy) {
-        if (isImmutable) {
-            throw new IllegalStateException("PolicyNode is immutable");
-        }
-        if (mOriginalExpectedPolicySet) {
-            mExpectedPolicySet.clear();
-            mOriginalExpectedPolicySet = false;
-        }
-        mExpectedPolicySet.add(expectedPolicy);
-    }
-
-    /**
-     * Removes all paths which don't reach the specified depth.
-     *
-     * @param depth an int representing the desired minimum depth of all paths
-     */
-    void prune(int depth) {
-        if (isImmutable)
-            throw new IllegalStateException("PolicyNode is immutable");
-
-        // if we have no children, we can't prune below us...
-        if (mChildren.size() == 0)
-            return;
-
-        Iterator<PolicyNodeImpl> it = mChildren.iterator();
-        while (it.hasNext()) {
-            PolicyNodeImpl node = it.next();
-            node.prune(depth);
-            // now that we've called prune on the child, see if we should
-            // remove it from the tree
-            if ((node.mChildren.size() == 0) && (depth > mDepth + 1))
-                it.remove();
-        }
-    }
-
-    /**
-     * Deletes the specified child node of this node, if it exists.
-     *
-     * @param childNode the child node to be deleted
-     */
-    void deleteChild(PolicyNode childNode) {
-        if (isImmutable) {
-            throw new IllegalStateException("PolicyNode is immutable");
-        }
-        mChildren.remove(childNode);
-    }
-
-    /**
-     * Returns a copy of the tree, without copying the policy-related data,
-     * rooted at the node on which this was called.
-     *
-     * @return a copy of the tree
-     */
-    PolicyNodeImpl copyTree() {
-        return copyTree(null);
-    }
-
-    private PolicyNodeImpl copyTree(PolicyNodeImpl parent) {
-        PolicyNodeImpl newNode = new PolicyNodeImpl(parent, this);
-
-        for (PolicyNodeImpl node : mChildren) {
-            node.copyTree(newNode);
-        }
-
-        return newNode;
-    }
-
-    /**
-     * Returns all nodes at the specified depth in the tree.
-     *
-     * @param depth an int representing the depth of the desired nodes
-     * @return a <code>Set</code> of all nodes at the specified depth
-     */
-    Set<PolicyNodeImpl> getPolicyNodes(int depth) {
-        Set<PolicyNodeImpl> set = new HashSet<PolicyNodeImpl>();
-        getPolicyNodes(depth, set);
-        return set;
-    }
-
-    /**
-     * Add all nodes at depth depth to set and return the Set.
-     * Internal recursion helper.
-     */
-    private void getPolicyNodes(int depth, Set<PolicyNodeImpl> set) {
-        // if we've reached the desired depth, then return ourself
-        if (mDepth == depth) {
-            set.add(this);
-        } else {
-            for (PolicyNodeImpl node : mChildren) {
-                node.getPolicyNodes(depth, set);
-            }
-        }
-    }
-
-    /**
-     * Finds all nodes at the specified depth whose expected_policy_set
-     * contains the specified expected OID (if matchAny is false)
-     * or the special OID "any value" (if matchAny is true).
-     *
-     * @param depth an int representing the desired depth
-     * @param expectedOID a String encoding the valid OID to match
-     * @param matchAny a boolean indicating whether an expected_policy_set
-     * containing ANY_POLICY should be considered a match
-     * @return a Set of matched <code>PolicyNode</code>s
-     */
-    Set<PolicyNodeImpl> getPolicyNodesExpected(int depth,
-        String expectedOID, boolean matchAny) {
-
-        if (expectedOID.equals(ANY_POLICY)) {
-            return getPolicyNodes(depth);
-        } else {
-            return getPolicyNodesExpectedHelper(depth, expectedOID, matchAny);
-        }
-    }
-
-    private Set<PolicyNodeImpl> getPolicyNodesExpectedHelper(int depth,
-        String expectedOID, boolean matchAny) {
-
-        HashSet<PolicyNodeImpl> set = new HashSet<PolicyNodeImpl>();
-
-        if (mDepth < depth) {
-            for (PolicyNodeImpl node : mChildren) {
-                set.addAll(node.getPolicyNodesExpectedHelper(depth,
-                                                             expectedOID,
-                                                             matchAny));
-            }
-        } else {
-            if (matchAny) {
-                if (mExpectedPolicySet.contains(ANY_POLICY))
-                    set.add(this);
-            } else {
-                if (mExpectedPolicySet.contains(expectedOID))
-                    set.add(this);
-            }
-        }
-
-        return set;
-    }
-
-    /**
-     * Finds all nodes at the specified depth that contains the
-     * specified valid OID
-     *
-     * @param depth an int representing the desired depth
-     * @param validOID a String encoding the valid OID to match
-     * @return a Set of matched <code>PolicyNode</code>s
-     */
-    Set<PolicyNodeImpl> getPolicyNodesValid(int depth, String validOID) {
-        HashSet<PolicyNodeImpl> set = new HashSet<PolicyNodeImpl>();
-
-        if (mDepth < depth) {
-            for (PolicyNodeImpl node : mChildren) {
-                set.addAll(node.getPolicyNodesValid(depth, validOID));
-            }
-        } else {
-            if (mValidPolicy.equals(validOID))
-                set.add(this);
-        }
-
-        return set;
-    }
-
-    private static String policyToString(String oid) {
-        if (oid.equals(ANY_POLICY)) {
-            return "anyPolicy";
-        } else {
-            return oid;
-        }
-    }
-
-    /**
-     * Prints out some data on this node.
-     */
-    String asString() {
-        if (mParent == null) {
-            return "anyPolicy  ROOT\n";
-        } else {
-            StringBuffer sb = new StringBuffer();
-            for (int i = 0, n = getDepth(); i < n; i++) {
-                sb.append("  ");
-            }
-            sb.append(policyToString(getValidPolicy()));
-            sb.append("  CRIT: ");
-            sb.append(isCritical());
-            sb.append("  EP: ");
-            for (String policy : getExpectedPolicies()) {
-                sb.append(policyToString(policy));
-                sb.append(" ");
-            }
-            sb.append(" (");
-            sb.append(getDepth());
-            sb.append(")\n");
-            return sb.toString();
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/ReverseBuilder.java b/ojluni/src/main/java/sun/security/provider/certpath/ReverseBuilder.java
deleted file mode 100755
index 1babd0f..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/ReverseBuilder.java
+++ /dev/null
@@ -1,543 +0,0 @@
-/*
- * Copyright (c) 2000, 2012, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.io.IOException;
-import java.security.GeneralSecurityException;
-import java.security.Principal;
-import java.security.cert.CertificateException;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.security.cert.PKIXBuilderParameters;
-import java.security.cert.PKIXCertPathChecker;
-import java.security.cert.PKIXParameters;
-import java.security.cert.PKIXReason;
-import java.security.cert.TrustAnchor;
-import java.security.cert.X509Certificate;
-import java.security.cert.X509CertSelector;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.LinkedList;
-import java.util.Set;
-
-import javax.security.auth.x500.X500Principal;
-
-import sun.security.util.Debug;
-import sun.security.x509.Extension;
-import sun.security.x509.PKIXExtensions;
-import sun.security.x509.X500Name;
-import sun.security.x509.X509CertImpl;
-import sun.security.x509.PolicyMappingsExtension;
-
-/**
- * This class represents a reverse builder, which is able to retrieve
- * matching certificates from CertStores and verify a particular certificate
- * against a ReverseState.
- *
- * @since       1.4
- * @author      Sean Mullan
- * @author      Yassir Elley
- */
-
-class ReverseBuilder extends Builder {
-
-    private Debug debug = Debug.getInstance("certpath");
-
-    Set<String> initPolicies;
-
-    /**
-     * Initialize the builder with the input parameters.
-     *
-     * @param params the parameter set used to build a certification path
-     */
-    ReverseBuilder(PKIXBuilderParameters buildParams,
-        X500Principal targetSubjectDN) {
-
-        super(buildParams, targetSubjectDN);
-
-        Set<String> initialPolicies = buildParams.getInitialPolicies();
-        initPolicies = new HashSet<String>();
-        if (initialPolicies.isEmpty()) {
-            // if no initialPolicies are specified by user, set
-            // initPolicies to be anyPolicy by default
-            initPolicies.add(PolicyChecker.ANY_POLICY);
-        } else {
-            for (String policy : initialPolicies) {
-                initPolicies.add(policy);
-            }
-        }
-    }
-
-    /**
-     * Retrieves all certs from the specified CertStores that satisfy the
-     * requirements specified in the parameters and the current
-     * PKIX state (name constraints, policy constraints, etc).
-     *
-     * @param currentState the current state.
-     *        Must be an instance of <code>ReverseState</code>
-     * @param certStores list of CertStores
-     */
-    Collection<X509Certificate> getMatchingCerts
-        (State currState, List<CertStore> certStores)
-        throws CertStoreException, CertificateException, IOException
-    {
-        ReverseState currentState = (ReverseState) currState;
-
-        if (debug != null)
-            debug.println("In ReverseBuilder.getMatchingCerts.");
-
-        /*
-         * The last certificate could be an EE or a CA certificate
-         * (we may be building a partial certification path or
-         * establishing trust in a CA).
-         *
-         * Try the EE certs before the CA certs. It will be more
-         * common to build a path to an end entity.
-         */
-        Collection<X509Certificate> certs =
-            getMatchingEECerts(currentState, certStores);
-        certs.addAll(getMatchingCACerts(currentState, certStores));
-
-        return certs;
-    }
-
-    /*
-     * Retrieves all end-entity certificates which satisfy constraints
-     * and requirements specified in the parameters and PKIX state.
-     */
-    private Collection<X509Certificate> getMatchingEECerts
-        (ReverseState currentState, List<CertStore> certStores)
-        throws CertStoreException, CertificateException, IOException {
-
-      /*
-       * Compose a CertSelector to filter out
-       * certs which do not satisfy requirements.
-       *
-       * First, retrieve clone of current target cert constraints,
-       * and then add more selection criteria based on current validation state.
-       */
-      X509CertSelector sel = (X509CertSelector) targetCertConstraints.clone();
-
-      /*
-       * Match on issuer (subject of previous cert)
-       */
-      sel.setIssuer(currentState.subjectDN);
-
-      /*
-       * Match on certificate validity date.
-       */
-      sel.setCertificateValid(date);
-
-      /*
-       * Policy processing optimizations
-       */
-      if (currentState.explicitPolicy == 0)
-          sel.setPolicy(getMatchingPolicies());
-
-      /*
-       * If previous cert has a subject key identifier extension,
-       * use it to match on authority key identifier extension.
-       */
-      /*if (currentState.subjKeyId != null) {
-        AuthorityKeyIdentifierExtension authKeyId = new AuthorityKeyIdentifierExtension(
-                (KeyIdentifier) currentState.subjKeyId.get(SubjectKeyIdentifierExtension.KEY_ID),
-                null, null);
-        sel.setAuthorityKeyIdentifier(authKeyId.getExtensionValue());
-      }*/
-
-      /*
-       * Require EE certs
-       */
-      sel.setBasicConstraints(-2);
-
-      /* Retrieve matching certs from CertStores */
-      HashSet<X509Certificate> eeCerts = new HashSet<X509Certificate>();
-      addMatchingCerts(sel, certStores, eeCerts, true);
-
-      if (debug != null) {
-        debug.println("ReverseBuilder.getMatchingEECerts got " + eeCerts.size()
-                    + " certs.");
-      }
-      return eeCerts;
-    }
-
-    /*
-     * Retrieves all CA certificates which satisfy constraints
-     * and requirements specified in the parameters and PKIX state.
-     */
-    private Collection<X509Certificate> getMatchingCACerts
-        (ReverseState currentState, List<CertStore> certStores)
-        throws CertificateException, CertStoreException, IOException {
-
-      /*
-       * Compose a CertSelector to filter out
-       * certs which do not satisfy requirements.
-       */
-      X509CertSelector sel = new X509CertSelector();
-
-      /*
-       * Match on issuer (subject of previous cert)
-       */
-      sel.setIssuer(currentState.subjectDN);
-
-      /*
-       * Match on certificate validity date.
-       */
-      sel.setCertificateValid(date);
-
-      /*
-       * Match on target subject name (checks that current cert's
-       * name constraints permit it to certify target).
-       * (4 is the integer type for DIRECTORY name).
-       */
-      sel.addPathToName(4, targetCertConstraints.getSubjectAsBytes());
-
-      /*
-       * Policy processing optimizations
-       */
-      if (currentState.explicitPolicy == 0)
-          sel.setPolicy(getMatchingPolicies());
-
-      /*
-       * If previous cert has a subject key identifier extension,
-       * use it to match on authority key identifier extension.
-       */
-      /*if (currentState.subjKeyId != null) {
-        AuthorityKeyIdentifierExtension authKeyId = new AuthorityKeyIdentifierExtension(
-                (KeyIdentifier) currentState.subjKeyId.get(SubjectKeyIdentifierExtension.KEY_ID),
-                                null, null);
-        sel.setAuthorityKeyIdentifier(authKeyId.getExtensionValue());
-      }*/
-
-      /*
-       * Require CA certs
-       */
-      sel.setBasicConstraints(0);
-
-      /* Retrieve matching certs from CertStores */
-      ArrayList<X509Certificate> reverseCerts =
-          new ArrayList<X509Certificate>();
-      addMatchingCerts(sel, certStores, reverseCerts, true);
-
-      /* Sort remaining certs using name constraints */
-      Collections.sort(reverseCerts, new PKIXCertComparator());
-
-      if (debug != null)
-        debug.println("ReverseBuilder.getMatchingCACerts got " +
-                    reverseCerts.size() + " certs.");
-      return reverseCerts;
-    }
-
-    /*
-     * This inner class compares 2 PKIX certificates according to which
-     * should be tried first when building a path to the target. For
-     * now, the algorithm is to look at name constraints in each cert and those
-     * which constrain the path closer to the target should be
-     * ranked higher. Later, we may want to consider other components,
-     * such as key identifiers.
-     */
-    class PKIXCertComparator implements Comparator<X509Certificate> {
-
-        private Debug debug = Debug.getInstance("certpath");
-
-        public int compare(X509Certificate cert1, X509Certificate cert2) {
-
-            /*
-             * if either cert certifies the target, always
-             * put at head of list.
-             */
-            if (cert1.getSubjectX500Principal().equals(targetSubjectDN)) {
-                return -1;
-            }
-            if (cert2.getSubjectX500Principal().equals(targetSubjectDN)) {
-                return 1;
-            }
-
-            int targetDist1;
-            int targetDist2;
-            try {
-                X500Name targetSubjectName = X500Name.asX500Name(targetSubjectDN);
-                targetDist1 = Builder.targetDistance(
-                    null, cert1, targetSubjectName);
-                targetDist2 = Builder.targetDistance(
-                    null, cert2, targetSubjectName);
-            } catch (IOException e) {
-                if (debug != null) {
-                    debug.println("IOException in call to Builder.targetDistance");
-                    e.printStackTrace();
-                }
-                throw new ClassCastException
-                    ("Invalid target subject distinguished name");
-            }
-
-            if (targetDist1 == targetDist2)
-                return 0;
-
-            if (targetDist1 == -1)
-                return 1;
-
-            if (targetDist1 < targetDist2)
-                return -1;
-
-            return 1;
-        }
-    }
-
-    /**
-     * Verifies a matching certificate.
-     *
-     * This method executes any of the validation steps in the PKIX path validation
-     * algorithm which were not satisfied via filtering out non-compliant
-     * certificates with certificate matching rules.
-     *
-     * If the last certificate is being verified (the one whose subject
-     * matches the target subject, then the steps in Section 6.1.4 of the
-     * Certification Path Validation algorithm are NOT executed,
-     * regardless of whether or not the last cert is an end-entity
-     * cert or not. This allows callers to certify CA certs as
-     * well as EE certs.
-     *
-     * @param cert the certificate to be verified
-     * @param currentState the current state against which the cert is verified
-     * @param certPathList the certPathList generated thus far
-     */
-    void verifyCert(X509Certificate cert, State currState,
-        List<X509Certificate> certPathList)
-        throws GeneralSecurityException
-    {
-        if (debug != null) {
-            debug.println("ReverseBuilder.verifyCert(SN: "
-                + Debug.toHexString(cert.getSerialNumber())
-                + "\n  Subject: " + cert.getSubjectX500Principal() + ")");
-        }
-
-        ReverseState currentState = (ReverseState) currState;
-
-        /* we don't perform any validation of the trusted cert */
-        if (currentState.isInitial()) {
-            return;
-        }
-
-        // Don't bother to verify untrusted certificate more.
-        currentState.untrustedChecker.check(cert,
-                                    Collections.<String>emptySet());
-
-        /*
-         * check for looping - abort a loop if
-         * ((we encounter the same certificate twice) AND
-         * ((policyMappingInhibited = true) OR (no policy mapping
-         * extensions can be found between the occurences of the same
-         * certificate)))
-         * in order to facilitate the check to see if there are
-         * any policy mapping extensions found between the occurences
-         * of the same certificate, we reverse the certpathlist first
-         */
-        if ((certPathList != null) && (!certPathList.isEmpty())) {
-            List<X509Certificate> reverseCertList =
-                new ArrayList<X509Certificate>();
-            for (X509Certificate c : certPathList) {
-                reverseCertList.add(0, c);
-            }
-
-            boolean policyMappingFound = false;
-            for (X509Certificate cpListCert : reverseCertList) {
-                X509CertImpl cpListCertImpl = X509CertImpl.toImpl(cpListCert);
-                PolicyMappingsExtension policyMappingsExt =
-                        cpListCertImpl.getPolicyMappingsExtension();
-                if (policyMappingsExt != null) {
-                    policyMappingFound = true;
-                }
-                if (debug != null)
-                    debug.println("policyMappingFound = " + policyMappingFound);
-                if (cert.equals(cpListCert)){
-                    if ((buildParams.isPolicyMappingInhibited()) ||
-                        (!policyMappingFound)){
-                        if (debug != null)
-                            debug.println("loop detected!!");
-                        throw new CertPathValidatorException("loop detected");
-                    }
-                }
-            }
-        }
-
-        /* check if target cert */
-        boolean finalCert = cert.getSubjectX500Principal().equals(targetSubjectDN);
-
-        /* check if CA cert */
-        boolean caCert = (cert.getBasicConstraints() != -1 ? true : false);
-
-        /* if there are more certs to follow, verify certain constraints */
-        if (!finalCert) {
-
-            /* check if CA cert */
-            if (!caCert)
-                throw new CertPathValidatorException("cert is NOT a CA cert");
-
-            /* If the certificate was not self-issued, verify that
-             * remainingCerts is greater than zero
-             */
-            if ((currentState.remainingCACerts <= 0) && !X509CertImpl.isSelfIssued(cert)) {
-                    throw new CertPathValidatorException
-                        ("pathLenConstraint violated, path too long", null,
-                         null, -1, PKIXReason.PATH_TOO_LONG);
-            }
-
-            /*
-             * Check keyUsage extension (only if CA cert and not final cert)
-             */
-            KeyChecker.verifyCAKeyUsage(cert);
-
-        } else {
-
-            /*
-             * If final cert, check that it satisfies specified target
-             * constraints
-             */
-            if (targetCertConstraints.match(cert) == false) {
-                throw new CertPathValidatorException("target certificate " +
-                    "constraints check failed");
-            }
-        }
-
-        /*
-         * Check revocation.
-         */
-        if (buildParams.isRevocationEnabled()) {
-
-            currentState.crlChecker.check(cert,
-                                          currentState.pubKey,
-                                          currentState.crlSign);
-        }
-
-        /* Check name constraints if this is not a self-issued cert */
-        if (finalCert || !X509CertImpl.isSelfIssued(cert)){
-            if (currentState.nc != null){
-                try {
-                    if (!currentState.nc.verify(cert)){
-                        throw new CertPathValidatorException
-                            ("name constraints check failed", null, null, -1,
-                             PKIXReason.INVALID_NAME);
-                    }
-                } catch (IOException ioe){
-                    throw new CertPathValidatorException(ioe);
-                }
-            }
-        }
-
-        /*
-         * Check policy
-         */
-        X509CertImpl certImpl = X509CertImpl.toImpl(cert);
-        currentState.rootNode = PolicyChecker.processPolicies
-            (currentState.certIndex, initPolicies,
-            currentState.explicitPolicy, currentState.policyMapping,
-            currentState.inhibitAnyPolicy,
-            buildParams.getPolicyQualifiersRejected(), currentState.rootNode,
-            certImpl, finalCert);
-
-        /*
-         * Check CRITICAL private extensions
-         */
-        Set<String> unresolvedCritExts = cert.getCriticalExtensionOIDs();
-        if (unresolvedCritExts == null) {
-            unresolvedCritExts = Collections.<String>emptySet();
-        }
-
-        /*
-         * Check that the signature algorithm is not disabled.
-         */
-        currentState.algorithmChecker.check(cert, unresolvedCritExts);
-
-        for (PKIXCertPathChecker checker : currentState.userCheckers) {
-            checker.check(cert, unresolvedCritExts);
-        }
-
-        /*
-         * Look at the remaining extensions and remove any ones we have
-         * already checked. If there are any left, throw an exception!
-         */
-        if (!unresolvedCritExts.isEmpty()) {
-            unresolvedCritExts.remove(PKIXExtensions.BasicConstraints_Id.toString());
-            unresolvedCritExts.remove(PKIXExtensions.NameConstraints_Id.toString());
-            unresolvedCritExts.remove(PKIXExtensions.CertificatePolicies_Id.toString());
-            unresolvedCritExts.remove(PKIXExtensions.PolicyMappings_Id.toString());
-            unresolvedCritExts.remove(PKIXExtensions.PolicyConstraints_Id.toString());
-            unresolvedCritExts.remove(PKIXExtensions.InhibitAnyPolicy_Id.toString());
-            unresolvedCritExts.remove(PKIXExtensions.SubjectAlternativeName_Id.toString());
-            unresolvedCritExts.remove(PKIXExtensions.KeyUsage_Id.toString());
-            unresolvedCritExts.remove(PKIXExtensions.ExtendedKeyUsage_Id.toString());
-
-            if (!unresolvedCritExts.isEmpty())
-                throw new CertPathValidatorException
-                    ("Unrecognized critical extension(s)", null, null, -1,
-                     PKIXReason.UNRECOGNIZED_CRIT_EXT);
-        }
-
-        /*
-         * Check signature.
-         */
-        if (buildParams.getSigProvider() != null) {
-            cert.verify(currentState.pubKey, buildParams.getSigProvider());
-        } else {
-            cert.verify(currentState.pubKey);
-        }
-    }
-
-    /**
-     * Verifies whether the input certificate completes the path.
-     * This checks whether the cert is the target certificate.
-     *
-     * @param cert the certificate to test
-     * @return a boolean value indicating whether the cert completes the path.
-     */
-    boolean isPathCompleted(X509Certificate cert) {
-        return cert.getSubjectX500Principal().equals(targetSubjectDN);
-    }
-
-    /** Adds the certificate to the certPathList
-     *
-     * @param cert the certificate to be added
-     * @param certPathList the certification path list
-     */
-    void addCertToPath(X509Certificate cert,
-        LinkedList<X509Certificate> certPathList) {
-        certPathList.addLast(cert);
-    }
-
-    /** Removes final certificate from the certPathList
-     *
-     * @param certPathList the certification path list
-     */
-    void removeFinalCertFromPath(LinkedList<X509Certificate> certPathList) {
-        certPathList.removeLast();
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/ReverseState.java b/ojluni/src/main/java/sun/security/provider/certpath/ReverseState.java
deleted file mode 100755
index e919f7b..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/ReverseState.java
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- * Copyright (c) 2000, 2012, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.io.IOException;
-import java.security.PublicKey;
-import java.security.cert.CertificateException;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.PKIXCertPathChecker;
-import java.security.cert.TrustAnchor;
-import java.security.cert.X509Certificate;
-import java.security.interfaces.DSAPublicKey;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Set;
-import javax.security.auth.x500.X500Principal;
-
-import sun.security.util.Debug;
-import sun.security.x509.NameConstraintsExtension;
-import sun.security.x509.SubjectKeyIdentifierExtension;
-import sun.security.x509.X509CertImpl;
-
-/**
- * A specification of a reverse PKIX validation state
- * which is initialized by each build and updated each time a
- * certificate is added to the current path.
- * @since       1.4
- * @author      Sean Mullan
- * @author      Yassir Elley
- */
-
-class ReverseState implements State {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-
-    /* The subject DN of the last cert in the path */
-    X500Principal subjectDN;
-
-    /* The subject public key of the last cert */
-    PublicKey pubKey;
-
-    /* The subject key identifier extension (if any) of the last cert */
-    SubjectKeyIdentifierExtension subjKeyId;
-
-    /* The PKIX constrained/excluded subtrees state variable */
-    NameConstraintsExtension nc;
-
-    /* The PKIX explicit policy, policy mapping, and inhibit_any-policy
-       state variables */
-    int explicitPolicy;
-    int policyMapping;
-    int inhibitAnyPolicy;
-    int certIndex;
-    PolicyNodeImpl rootNode;
-
-    /* The number of remaining CA certs which may follow in the path.
-     * -1: previous cert was an EE cert
-     * 0: only EE certs may follow.
-     * >0 and <Integer.MAX_VALUE:no more than this number of CA certs may follow
-     * Integer.MAX_VALUE: unlimited
-     */
-    int remainingCACerts;
-
-    /* The list of user-defined checkers retrieved from the PKIXParameters
-     * instance */
-    ArrayList<PKIXCertPathChecker> userCheckers;
-
-    /* Flag indicating if state is initial (path is just starting) */
-    private boolean init = true;
-
-    /* the checker used for revocation status */
-    public CrlRevocationChecker crlChecker;
-
-    /* the algorithm checker */
-    AlgorithmChecker algorithmChecker;
-
-    /* the untrusted certificates checker */
-    UntrustedChecker untrustedChecker;
-
-    /* the trust anchor used to validate the path */
-    TrustAnchor trustAnchor;
-
-    /* Flag indicating if current cert can vouch for the CRL for
-     * the next cert
-     */
-    public boolean crlSign = true;
-
-    /**
-     * Returns a boolean flag indicating if the state is initial
-     * (just starting)
-     *
-     * @return boolean flag indicating if the state is initial (just starting)
-     */
-    public boolean isInitial() {
-        return init;
-    }
-
-    /**
-     * Display state for debugging purposes
-     */
-    public String toString() {
-        StringBuffer sb = new StringBuffer();
-        try {
-            sb.append("State [");
-            sb.append("\n  subjectDN of last cert: " + subjectDN);
-            sb.append("\n  subjectKeyIdentifier: " + String.valueOf(subjKeyId));
-            sb.append("\n  nameConstraints: " + String.valueOf(nc));
-            sb.append("\n  certIndex: " + certIndex);
-            sb.append("\n  explicitPolicy: " + explicitPolicy);
-            sb.append("\n  policyMapping:  " + policyMapping);
-            sb.append("\n  inhibitAnyPolicy:  " + inhibitAnyPolicy);
-            sb.append("\n  rootNode: " + rootNode);
-            sb.append("\n  remainingCACerts: " + remainingCACerts);
-            sb.append("\n  crlSign: " + crlSign);
-            sb.append("\n  init: " + init);
-            sb.append("\n]\n");
-        } catch (Exception e) {
-            if (debug != null) {
-                debug.println("ReverseState.toString() unexpected exception");
-                e.printStackTrace();
-            }
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Initialize the state.
-     *
-     * @param maxPathLen The maximum number of CA certs in a path, where -1
-     * means unlimited and 0 means only a single EE cert is allowed.
-     * @param explicitPolicyRequired True, if explicit policy is required.
-     * @param policyMappingInhibited True, if policy mapping is inhibited.
-     * @param anyPolicyInhibited True, if any policy is inhibited.
-     * @param certPathCheckers the list of user-defined PKIXCertPathCheckers
-     */
-    public void initState(int maxPathLen, boolean explicitPolicyRequired,
-        boolean policyMappingInhibited, boolean anyPolicyInhibited,
-        List<PKIXCertPathChecker> certPathCheckers)
-        throws CertPathValidatorException
-    {
-        /*
-         * Initialize number of remainingCACerts.
-         * Note that -1 maxPathLen implies unlimited.
-         * 0 implies only an EE cert is acceptable.
-         */
-        remainingCACerts = (maxPathLen == -1 ? Integer.MAX_VALUE : maxPathLen);
-
-        /* Initialize explicit policy state variable */
-        if (explicitPolicyRequired) {
-            explicitPolicy = 0;
-        } else {
-            // unconstrained if maxPathLen is -1,
-            // otherwise, we want to initialize this to the value of the
-            // longest possible path + 1 (i.e. maxpathlen + finalcert + 1)
-            explicitPolicy = (maxPathLen == -1)
-                ? maxPathLen
-                : maxPathLen + 2;
-        }
-
-        /* Initialize policy mapping state variable */
-        if (policyMappingInhibited) {
-            policyMapping = 0;
-        } else {
-            policyMapping = (maxPathLen == -1)
-                ? maxPathLen
-                : maxPathLen + 2;
-        }
-
-        /* Initialize inhibit any policy state variable */
-        if (anyPolicyInhibited) {
-            inhibitAnyPolicy = 0;
-        } else {
-            inhibitAnyPolicy = (maxPathLen == -1)
-                ? maxPathLen
-                : maxPathLen + 2;
-        }
-
-        /* Initialize certIndex */
-        certIndex = 1;
-
-        /* Initialize policy tree */
-        Set<String> initExpPolSet = new HashSet<String>(1);
-        initExpPolSet.add(PolicyChecker.ANY_POLICY);
-
-        rootNode = new PolicyNodeImpl
-            (null, PolicyChecker.ANY_POLICY, null, false, initExpPolSet, false);
-
-        /*
-         * Initialize each user-defined checker
-         */
-        if (certPathCheckers != null) {
-            /* Shallow copy the checkers */
-            userCheckers = new ArrayList<PKIXCertPathChecker>(certPathCheckers);
-            /* initialize each checker (just in case) */
-            for (PKIXCertPathChecker checker : certPathCheckers) {
-                checker.init(false);
-            }
-        } else {
-            userCheckers = new ArrayList<PKIXCertPathChecker>();
-        }
-
-        /* Start by trusting the cert to sign CRLs */
-        crlSign = true;
-
-        init = true;
-    }
-
-    /**
-     * Update the state with the specified trust anchor.
-     *
-     * @param anchor the most-trusted CA
-     */
-    public void updateState(TrustAnchor anchor)
-        throws CertificateException, IOException, CertPathValidatorException
-    {
-        trustAnchor = anchor;
-        X509Certificate trustedCert = anchor.getTrustedCert();
-        if (trustedCert != null) {
-            updateState(trustedCert);
-        } else {
-            X500Principal caName = anchor.getCA();
-            updateState(anchor.getCAPublicKey(), caName);
-        }
-
-        // The user specified AlgorithmChecker may not be
-        // able to set the trust anchor until now.
-        for (PKIXCertPathChecker checker : userCheckers) {
-            if (checker instanceof AlgorithmChecker) {
-                ((AlgorithmChecker)checker).trySetTrustAnchor(anchor);
-            }
-        }
-
-        init = false;
-    }
-
-    /**
-     * Update the state. This method is used when the most-trusted CA is
-     * a trusted public-key and caName, instead of a trusted cert.
-     *
-     * @param pubKey the public key of the trusted CA
-     * @param subjectDN the subject distinguished name of the trusted CA
-     */
-    private void updateState(PublicKey pubKey, X500Principal subjectDN) {
-
-        /* update subject DN */
-        this.subjectDN = subjectDN;
-
-        /* update subject public key */
-        this.pubKey = pubKey;
-    }
-
-    /**
-     * Update the state with the next certificate added to the path.
-     *
-     * @param cert the certificate which is used to update the state
-     */
-    public void updateState(X509Certificate cert)
-        throws CertificateException, IOException, CertPathValidatorException {
-
-        if (cert == null) {
-            return;
-        }
-
-        /* update subject DN */
-        subjectDN = cert.getSubjectX500Principal();
-
-        /* check for key needing to inherit alg parameters */
-        X509CertImpl icert = X509CertImpl.toImpl(cert);
-        PublicKey newKey = cert.getPublicKey();
-        if (newKey instanceof DSAPublicKey &&
-            (((DSAPublicKey)newKey).getParams() == null)) {
-            newKey = BasicChecker.makeInheritedParamsKey(newKey, pubKey);
-        }
-
-        /* update subject public key */
-        pubKey = newKey;
-
-        /*
-         * if this is a trusted cert (init == true), then we
-         * don't update any of the remaining fields
-         */
-        if (init) {
-            init = false;
-            return;
-        }
-
-        /* update subject key identifier */
-        subjKeyId = icert.getSubjectKeyIdentifierExtension();
-
-        /* update crlSign */
-        crlSign = CrlRevocationChecker.certCanSignCrl(cert);
-
-        /* update current name constraints */
-        if (nc != null) {
-            nc.merge(icert.getNameConstraintsExtension());
-        } else {
-            nc = icert.getNameConstraintsExtension();
-            if (nc != null) {
-                // Make sure we do a clone here, because we're probably
-                // going to modify this object later and we don't want to
-                // be sharing it with a Certificate object!
-                nc = (NameConstraintsExtension) nc.clone();
-            }
-        }
-
-        /* update policy state variables */
-        explicitPolicy =
-            PolicyChecker.mergeExplicitPolicy(explicitPolicy, icert, false);
-        policyMapping =
-            PolicyChecker.mergePolicyMapping(policyMapping, icert);
-        inhibitAnyPolicy =
-            PolicyChecker.mergeInhibitAnyPolicy(inhibitAnyPolicy, icert);
-        certIndex++;
-
-        /*
-         * Update remaining CA certs
-         */
-        remainingCACerts =
-            ConstraintsChecker.mergeBasicConstraints(cert, remainingCACerts);
-
-        init = false;
-    }
-
-    /**
-     * Returns a boolean flag indicating if a key lacking necessary key
-     * algorithm parameters has been encountered.
-     *
-     * @return boolean flag indicating if key lacking parameters encountered.
-     */
-    public boolean keyParamsNeeded() {
-        /* when building in reverse, we immediately get parameters needed
-         * or else throw an exception
-         */
-        return false;
-    }
-
-    /*
-     * Clone current state. The state is cloned as each cert is
-     * added to the path. This is necessary if backtracking occurs,
-     * and a prior state needs to be restored.
-     *
-     * Note that this is a SMART clone. Not all fields are fully copied,
-     * because some of them (e.g., subjKeyId) will
-     * not have their contents modified by subsequent calls to updateState.
-     */
-    public Object clone() {
-        try {
-            ReverseState clonedState = (ReverseState) super.clone();
-
-            /* clone checkers, if cloneable */
-            clonedState.userCheckers =
-                        (ArrayList<PKIXCertPathChecker>)userCheckers.clone();
-            ListIterator<PKIXCertPathChecker> li =
-                        clonedState.userCheckers.listIterator();
-            while (li.hasNext()) {
-                PKIXCertPathChecker checker = li.next();
-                if (checker instanceof Cloneable) {
-                    li.set((PKIXCertPathChecker)checker.clone());
-                }
-            }
-
-            /* make copy of name constraints */
-            if (nc != null) {
-                clonedState.nc = (NameConstraintsExtension) nc.clone();
-            }
-
-            /* make copy of policy tree */
-            if (rootNode != null) {
-                clonedState.rootNode = rootNode.copyTree();
-            }
-
-            return clonedState;
-        } catch (CloneNotSupportedException e) {
-            throw new InternalError(e.toString());
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/State.java b/ojluni/src/main/java/sun/security/provider/certpath/State.java
deleted file mode 100755
index 93a153f..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/State.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2000, 2001, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.io.IOException;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-import java.security.cert.CertPathValidatorException;
-
-/**
- * A specification of a PKIX validation state
- * which is initialized by each build and updated each time a
- * certificate is added to the current path.
- *
- * @since       1.4
- * @author      Sean Mullan
- * @author      Yassir Elley
- */
-
-interface State extends Cloneable {
-
-    /**
-     * Update the state with the next certificate added to the path.
-     *
-     * @param cert the certificate which is used to update the state
-     */
-    public void updateState(X509Certificate cert)
-        throws CertificateException, IOException, CertPathValidatorException;
-
-    /**
-     * Creates and returns a copy of this object
-     */
-    public Object clone();
-
-    /**
-     * Returns a boolean flag indicating if the state is initial
-     * (just starting)
-     *
-     * @return boolean flag indicating if the state is initial (just starting)
-     */
-    public boolean isInitial();
-
-    /**
-     * Returns a boolean flag indicating if a key lacking necessary key
-     * algorithm parameters has been encountered.
-     *
-     * @return boolean flag indicating if key lacking parameters encountered.
-     */
-    public boolean keyParamsNeeded();
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilder.java b/ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilder.java
deleted file mode 100755
index c88c37b..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilder.java
+++ /dev/null
@@ -1,883 +0,0 @@
-/*
- * Copyright (c) 2000, 2012, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.io.IOException;
-import java.security.AccessController;
-import java.security.GeneralSecurityException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.Principal;
-import java.security.PublicKey;
-import java.security.cert.*;
-import java.security.cert.PKIXReason;
-import java.security.interfaces.DSAPublicKey;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.LinkedList;
-import java.util.Set;
-import javax.security.auth.x500.X500Principal;
-
-import sun.security.action.GetBooleanSecurityPropertyAction;
-import sun.security.x509.X500Name;
-import sun.security.x509.PKIXExtensions;
-import sun.security.util.Debug;
-
-/**
- * This class is able to build certification paths in either the forward
- * or reverse directions.
- *
- * <p> If successful, it returns a certification path which has succesfully
- * satisfied all the constraints and requirements specified in the
- * PKIXBuilderParameters object and has been validated according to the PKIX
- * path validation algorithm defined in RFC 3280.
- *
- * <p> This implementation uses a depth-first search approach to finding
- * certification paths. If it comes to a point in which it cannot find
- * any more certificates leading to the target OR the path length is too long
- * it backtracks to previous paths until the target has been found or
- * all possible paths have been exhausted.
- *
- * <p> This implementation is not thread-safe.
- *
- * @since       1.4
- * @author      Sean Mullan
- * @author      Yassir Elley
- */
-public final class SunCertPathBuilder extends CertPathBuilderSpi {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-
-    /*
-     * private objects shared by methods
-     */
-    private PKIXBuilderParameters buildParams;
-    private CertificateFactory cf;
-    private boolean pathCompleted = false;
-    private X500Principal targetSubjectDN;
-    private PolicyNode policyTreeResult;
-    private TrustAnchor trustAnchor;
-    private PublicKey finalPublicKey;
-    private X509CertSelector targetSel;
-    private List<CertStore> orderedCertStores;
-    private boolean onlyEECert = false;
-
-    /**
-     * Create an instance of <code>SunCertPathBuilder</code>.
-     *
-     * @throws CertPathBuilderException if an error occurs
-     */
-    public SunCertPathBuilder() throws CertPathBuilderException {
-        try {
-            cf = CertificateFactory.getInstance("X.509");
-        } catch (CertificateException e) {
-            throw new CertPathBuilderException(e);
-        }
-        onlyEECert = AccessController.doPrivileged(
-            new GetBooleanSecurityPropertyAction
-                ("com.sun.security.onlyCheckRevocationOfEECert"));
-    }
-
-    /**
-     * Attempts to build a certification path using the Sun build
-     * algorithm from a trusted anchor(s) to a target subject, which must both
-     * be specified in the input parameter set. By default, this method will
-     * attempt to build in the forward direction. In order to build in the
-     * reverse direction, the caller needs to pass in an instance of
-     * SunCertPathBuilderParameters with the buildForward flag set to false.
-     *
-     * <p>The certification path that is constructed is validated
-     * according to the PKIX specification.
-     *
-     * @param params the parameter set for building a path. Must be an instance
-     *  of <code>PKIXBuilderParameters</code>.
-     * @return a certification path builder result.
-     * @exception CertPathBuilderException Exception thrown if builder is
-     *  unable to build a complete certification path from the trusted anchor(s)
-     *  to the target subject.
-     * @throws InvalidAlgorithmParameterException if the given parameters are
-     *  inappropriate for this certification path builder.
-     */
-    public CertPathBuilderResult engineBuild(CertPathParameters params)
-        throws CertPathBuilderException, InvalidAlgorithmParameterException {
-
-        if (debug != null) {
-            debug.println("SunCertPathBuilder.engineBuild(" + params + ")");
-        }
-
-        if (!(params instanceof PKIXBuilderParameters)) {
-            throw new InvalidAlgorithmParameterException("inappropriate " +
-                "parameter type, must be an instance of PKIXBuilderParameters");
-        }
-
-        boolean buildForward = true;
-        if (params instanceof SunCertPathBuilderParameters) {
-            buildForward =
-                ((SunCertPathBuilderParameters)params).getBuildForward();
-        }
-
-        buildParams = (PKIXBuilderParameters)params;
-
-        /* Check mandatory parameters */
-
-        // Make sure that none of the trust anchors include name constraints
-        // (not supported).
-        for (TrustAnchor anchor : buildParams.getTrustAnchors()) {
-            if (anchor.getNameConstraints() != null) {
-                throw new InvalidAlgorithmParameterException
-                    ("name constraints in trust anchor not supported");
-            }
-        }
-
-        CertSelector sel = buildParams.getTargetCertConstraints();
-        if (!(sel instanceof X509CertSelector)) {
-            throw new InvalidAlgorithmParameterException("the "
-                + "targetCertConstraints parameter must be an "
-                + "X509CertSelector");
-        }
-        targetSel = (X509CertSelector)sel;
-        targetSubjectDN = targetSel.getSubject();
-        if (targetSubjectDN == null) {
-            X509Certificate targetCert = targetSel.getCertificate();
-            if (targetCert != null) {
-                targetSubjectDN = targetCert.getSubjectX500Principal();
-            }
-        }
-        // reorder CertStores so that local CertStores are tried first
-        orderedCertStores =
-            new ArrayList<CertStore>(buildParams.getCertStores());
-        Collections.sort(orderedCertStores, new CertStoreComparator());
-        if (targetSubjectDN == null) {
-            targetSubjectDN = getTargetSubjectDN(orderedCertStores, targetSel);
-        }
-        if (targetSubjectDN == null) {
-            throw new InvalidAlgorithmParameterException
-                ("Could not determine unique target subject");
-        }
-
-        List<List<Vertex>> adjList = new ArrayList<List<Vertex>>();
-        CertPathBuilderResult result =
-            buildCertPath(buildForward, false, adjList);
-        if (result == null) {
-            if (debug != null) {
-                debug.println("SunCertPathBuilder.engineBuild: 2nd pass");
-            }
-            // try again
-            adjList.clear();
-            result = buildCertPath(buildForward, true, adjList);
-            if (result == null) {
-                throw new SunCertPathBuilderException("unable to find valid "
-                    + "certification path to requested target",
-                    new AdjacencyList(adjList));
-            }
-        }
-        return result;
-    }
-
-    private CertPathBuilderResult buildCertPath(boolean buildForward,
-        boolean searchAllCertStores, List<List<Vertex>> adjList)
-        throws CertPathBuilderException {
-
-        // Init shared variables and build certification path
-        pathCompleted = false;
-        trustAnchor = null;
-        finalPublicKey = null;
-        policyTreeResult = null;
-        LinkedList<X509Certificate> certPathList =
-            new LinkedList<X509Certificate>();
-        try {
-            if (buildForward) {
-                buildForward(adjList, certPathList, searchAllCertStores);
-            } else {
-                buildReverse(adjList, certPathList);
-            }
-        } catch (Exception e) {
-            if (debug != null) {
-                debug.println("SunCertPathBuilder.engineBuild() exception in "
-                    + "build");
-                e.printStackTrace();
-            }
-            throw new SunCertPathBuilderException("unable to find valid "
-                + "certification path to requested target", e,
-                new AdjacencyList(adjList));
-        }
-
-        // construct SunCertPathBuilderResult
-        try {
-            if (pathCompleted) {
-                if (debug != null)
-                    debug.println("SunCertPathBuilder.engineBuild() "
-                                  + "pathCompleted");
-
-                // we must return a certpath which has the target
-                // as the first cert in the certpath - i.e. reverse
-                // the certPathList
-                Collections.reverse(certPathList);
-
-                return new SunCertPathBuilderResult(
-                    cf.generateCertPath(certPathList), this.trustAnchor,
-                    policyTreeResult, finalPublicKey,
-                    new AdjacencyList(adjList));
-            }
-        } catch (Exception e) {
-            if (debug != null) {
-                debug.println("SunCertPathBuilder.engineBuild() exception "
-                              + "in wrap-up");
-                e.printStackTrace();
-            }
-            throw new SunCertPathBuilderException("unable to find valid "
-                + "certification path to requested target", e,
-                new AdjacencyList(adjList));
-        }
-
-        return null;
-    }
-
-    /*
-     * Private build reverse method.
-     */
-    private void buildReverse(List<List<Vertex>> adjacencyList,
-        LinkedList<X509Certificate> certPathList) throws Exception
-    {
-        if (debug != null) {
-            debug.println("SunCertPathBuilder.buildReverse()...");
-            debug.println("SunCertPathBuilder.buildReverse() InitialPolicies: "
-                + buildParams.getInitialPolicies());
-        }
-
-        ReverseState currentState = new ReverseState();
-        /* Initialize adjacency list */
-        adjacencyList.clear();
-        adjacencyList.add(new LinkedList<Vertex>());
-
-        /*
-         * Perform a search using each trust anchor, until a valid
-         * path is found
-         */
-        Iterator<TrustAnchor> iter = buildParams.getTrustAnchors().iterator();
-        while (iter.hasNext()) {
-            TrustAnchor anchor = iter.next();
-
-            /* check if anchor satisfies target constraints */
-            if (anchorIsTarget(anchor, targetSel)) {
-                this.trustAnchor = anchor;
-                this.pathCompleted = true;
-                this.finalPublicKey = anchor.getTrustedCert().getPublicKey();
-                break;
-            }
-
-            /* Initialize current state */
-            currentState.initState(buildParams.getMaxPathLength(),
-                       buildParams.isExplicitPolicyRequired(),
-                       buildParams.isPolicyMappingInhibited(),
-                       buildParams.isAnyPolicyInhibited(),
-                       buildParams.getCertPathCheckers());
-            currentState.updateState(anchor);
-            // init the crl checker
-            currentState.crlChecker =
-                new CrlRevocationChecker(null, buildParams, null, onlyEECert);
-            currentState.algorithmChecker = new AlgorithmChecker(anchor);
-            currentState.untrustedChecker = new UntrustedChecker();
-            try {
-                depthFirstSearchReverse(null, currentState,
-                new ReverseBuilder(buildParams, targetSubjectDN), adjacencyList,
-                certPathList);
-            } catch (Exception e) {
-                // continue on error if more anchors to try
-                if (iter.hasNext())
-                    continue;
-                else
-                    throw e;
-            }
-
-            // break out of loop if search is successful
-            break;
-        }
-
-        if (debug != null) {
-            debug.println("SunCertPathBuilder.buildReverse() returned from "
-                + "depthFirstSearchReverse()");
-            debug.println("SunCertPathBuilder.buildReverse() "
-                + "certPathList.size: " + certPathList.size());
-        }
-    }
-
-    /*
-     * Private build forward method.
-     */
-    private void buildForward(List<List<Vertex>> adjacencyList,
-        LinkedList<X509Certificate> certPathList, boolean searchAllCertStores)
-        throws GeneralSecurityException, IOException
-    {
-        if (debug != null) {
-            debug.println("SunCertPathBuilder.buildForward()...");
-        }
-
-        /* Initialize current state */
-        ForwardState currentState = new ForwardState();
-        currentState.initState(buildParams.getCertPathCheckers());
-
-        /* Initialize adjacency list */
-        adjacencyList.clear();
-        adjacencyList.add(new LinkedList<Vertex>());
-
-        // init the crl checker
-        currentState.crlChecker
-            = new CrlRevocationChecker(null, buildParams, null, onlyEECert);
-        currentState.untrustedChecker = new UntrustedChecker();
-
-        depthFirstSearchForward(targetSubjectDN, currentState,
-          new ForwardBuilder
-              (buildParams, targetSubjectDN, searchAllCertStores, onlyEECert),
-          adjacencyList, certPathList);
-    }
-
-    /*
-     * This method performs a depth first search for a certification
-     * path while building forward which meets the requirements set in
-     * the parameters object.
-     * It uses an adjacency list to store all certificates which were
-     * tried (i.e. at one time added to the path - they may not end up in
-     * the final path if backtracking occurs). This information can
-     * be used later to debug or demo the build.
-     *
-     * See "Data Structure and Algorithms, by Aho, Hopcroft, and Ullman"
-     * for an explanation of the DFS algorithm.
-     *
-     * @param dN the distinguished name being currently searched for certs
-     * @param currentState the current PKIX validation state
-     */
-    void depthFirstSearchForward(X500Principal dN, ForwardState currentState,
-        ForwardBuilder builder, List<List<Vertex>> adjList,
-        LinkedList<X509Certificate> certPathList)
-        throws GeneralSecurityException, IOException
-    {
-        //XXX This method should probably catch & handle exceptions
-
-        if (debug != null) {
-            debug.println("SunCertPathBuilder.depthFirstSearchForward(" + dN
-                + ", " + currentState.toString() + ")");
-        }
-
-        /*
-         * Find all the certificates issued to dN which
-         * satisfy the PKIX certification path constraints.
-         */
-        List<Vertex> vertices = addVertices
-           (builder.getMatchingCerts(currentState, orderedCertStores), adjList);
-        if (debug != null) {
-            debug.println("SunCertPathBuilder.depthFirstSearchForward(): "
-                + "certs.size=" + vertices.size());
-        }
-
-        /*
-         * For each cert in the collection, verify anything
-         * that hasn't been checked yet (signature, revocation, etc)
-         * and check for loops. Call depthFirstSearchForward()
-         * recursively for each good cert.
-         */
-
-               vertices:
-        for (Vertex vertex : vertices) {
-            /**
-             * Restore state to currentState each time through the loop.
-             * This is important because some of the user-defined
-             * checkers modify the state, which MUST be restored if
-             * the cert eventually fails to lead to the target and
-             * the next matching cert is tried.
-             */
-            ForwardState nextState = (ForwardState) currentState.clone();
-            X509Certificate cert = (X509Certificate) vertex.getCertificate();
-
-            try {
-                builder.verifyCert(cert, nextState, certPathList);
-            } catch (GeneralSecurityException gse) {
-                if (debug != null) {
-                    debug.println("SunCertPathBuilder.depthFirstSearchForward()"
-                        + ": validation failed: " + gse);
-                    gse.printStackTrace();
-                }
-                vertex.setThrowable(gse);
-                continue;
-            }
-
-            /*
-             * Certificate is good.
-             * If cert completes the path,
-             *    process userCheckers that don't support forward checking
-             *    and process policies over whole path
-             *    and backtrack appropriately if there is a failure
-             * else if cert does not complete the path,
-             *    add it to the path
-             */
-            if (builder.isPathCompleted(cert)) {
-
-                BasicChecker basicChecker = null;
-                if (debug != null)
-                    debug.println("SunCertPathBuilder.depthFirstSearchForward()"
-                        + ": commencing final verification");
-
-                ArrayList<X509Certificate> appendedCerts =
-                    new ArrayList<X509Certificate>(certPathList);
-
-                /*
-                 * if the trust anchor selected is specified as a trusted
-                 * public key rather than a trusted cert, then verify this
-                 * cert (which is signed by the trusted public key), but
-                 * don't add it yet to the certPathList
-                 */
-                if (builder.trustAnchor.getTrustedCert() == null) {
-                    appendedCerts.add(0, cert);
-                }
-
-                HashSet<String> initExpPolSet = new HashSet<String>(1);
-                initExpPolSet.add(PolicyChecker.ANY_POLICY);
-
-                PolicyNodeImpl rootNode = new PolicyNodeImpl(null,
-                    PolicyChecker.ANY_POLICY, null, false, initExpPolSet, false);
-
-                PolicyChecker policyChecker
-                    = new PolicyChecker(buildParams.getInitialPolicies(),
-                                appendedCerts.size(),
-                                buildParams.isExplicitPolicyRequired(),
-                                buildParams.isPolicyMappingInhibited(),
-                                buildParams.isAnyPolicyInhibited(),
-                                buildParams.getPolicyQualifiersRejected(),
-                                rootNode);
-
-                List<PKIXCertPathChecker> userCheckers = new
-                    ArrayList<PKIXCertPathChecker>
-                        (buildParams.getCertPathCheckers());
-                int mustCheck = 0;
-                userCheckers.add(mustCheck, policyChecker);
-                mustCheck++;
-
-                // add the algorithm checker
-                userCheckers.add(mustCheck,
-                        new AlgorithmChecker(builder.trustAnchor));
-                mustCheck++;
-
-                if (nextState.keyParamsNeeded()) {
-                    PublicKey rootKey = cert.getPublicKey();
-                    if (builder.trustAnchor.getTrustedCert() == null) {
-                        rootKey = builder.trustAnchor.getCAPublicKey();
-                        if (debug != null)
-                            debug.println(
-                                "SunCertPathBuilder.depthFirstSearchForward " +
-                                "using buildParams public key: " +
-                                rootKey.toString());
-                    }
-                    TrustAnchor anchor = new TrustAnchor
-                        (cert.getSubjectX500Principal(), rootKey, null);
-
-                    // add the basic checker
-                    basicChecker = new BasicChecker(anchor,
-                                           builder.date,
-                                           buildParams.getSigProvider(),
-                                           true);
-                    userCheckers.add(mustCheck, basicChecker);
-                    mustCheck++;
-
-                    // add the crl revocation checker
-                    if (buildParams.isRevocationEnabled()) {
-                        userCheckers.add(mustCheck, new CrlRevocationChecker
-                            (anchor, buildParams, null, onlyEECert));
-                        mustCheck++;
-                    }
-                }
-                // Why we don't need BasicChecker and CrlRevocationChecker
-                // if nextState.keyParamsNeeded() is false?
-
-                for (int i=0; i<appendedCerts.size(); i++) {
-                    X509Certificate currCert = appendedCerts.get(i);
-                    if (debug != null)
-                        debug.println("current subject = "
-                                      + currCert.getSubjectX500Principal());
-                    Set<String> unresCritExts =
-                        currCert.getCriticalExtensionOIDs();
-                    if (unresCritExts == null) {
-                        unresCritExts = Collections.<String>emptySet();
-                    }
-
-                    for (int j=0; j<userCheckers.size(); j++) {
-                        PKIXCertPathChecker currChecker = userCheckers.get(j);
-                        if (j < mustCheck ||
-                            !currChecker.isForwardCheckingSupported()) {
-                            if (i == 0) {
-                                currChecker.init(false);
-
-                                // The user specified
-                                // AlgorithmChecker may not be
-                                // able to set the trust anchor until now.
-                                if (j >= mustCheck &&
-                                    currChecker instanceof AlgorithmChecker) {
-                                    ((AlgorithmChecker)currChecker).
-                                        trySetTrustAnchor(builder.trustAnchor);
-                                }
-                            }
-
-                            try {
-                                currChecker.check(currCert, unresCritExts);
-                            } catch (CertPathValidatorException cpve) {
-                                if (debug != null)
-                                    debug.println
-                                    ("SunCertPathBuilder.depthFirstSearchForward(): " +
-                                    "final verification failed: " + cpve);
-                                vertex.setThrowable(cpve);
-                                continue vertices;
-                            }
-                        }
-                    }
-
-                    /*
-                     * Remove extensions from user checkers that support
-                     * forward checking. After this step, we will have
-                     * removed all extensions that all user checkers
-                     * are capable of processing.
-                     */
-                    for (PKIXCertPathChecker checker :
-                         buildParams.getCertPathCheckers())
-                    {
-                        if (checker.isForwardCheckingSupported()) {
-                            Set<String> suppExts =
-                                checker.getSupportedExtensions();
-                            if (suppExts != null) {
-                                unresCritExts.removeAll(suppExts);
-                            }
-                        }
-                    }
-
-                    if (!unresCritExts.isEmpty()) {
-                        unresCritExts.remove
-                            (PKIXExtensions.BasicConstraints_Id.toString());
-                        unresCritExts.remove
-                            (PKIXExtensions.NameConstraints_Id.toString());
-                        unresCritExts.remove
-                            (PKIXExtensions.CertificatePolicies_Id.toString());
-                        unresCritExts.remove
-                            (PKIXExtensions.PolicyMappings_Id.toString());
-                        unresCritExts.remove
-                            (PKIXExtensions.PolicyConstraints_Id.toString());
-                        unresCritExts.remove
-                            (PKIXExtensions.InhibitAnyPolicy_Id.toString());
-                        unresCritExts.remove(PKIXExtensions.
-                            SubjectAlternativeName_Id.toString());
-                        unresCritExts.remove
-                            (PKIXExtensions.KeyUsage_Id.toString());
-                        unresCritExts.remove
-                            (PKIXExtensions.ExtendedKeyUsage_Id.toString());
-
-                        if (!unresCritExts.isEmpty()) {
-                            throw new CertPathValidatorException
-                                ("unrecognized critical extension(s)", null,
-                                 null, -1, PKIXReason.UNRECOGNIZED_CRIT_EXT);
-                        }
-                    }
-                }
-                if (debug != null)
-                    debug.println("SunCertPathBuilder.depthFirstSearchForward()"
-                        + ": final verification succeeded - path completed!");
-                pathCompleted = true;
-
-                /*
-                 * if the user specified a trusted public key rather than
-                 * trusted certs, then add this cert (which is signed by
-                 * the trusted public key) to the certPathList
-                 */
-                if (builder.trustAnchor.getTrustedCert() == null)
-                    builder.addCertToPath(cert, certPathList);
-                // Save the trust anchor
-                this.trustAnchor = builder.trustAnchor;
-
-                /*
-                 * Extract and save the final target public key
-                 */
-                if (basicChecker != null) {
-                    finalPublicKey = basicChecker.getPublicKey();
-                } else {
-                    Certificate finalCert;
-                    if (certPathList.size() == 0) {
-                        finalCert = builder.trustAnchor.getTrustedCert();
-                    } else {
-                        finalCert = certPathList.get(certPathList.size()-1);
-                    }
-                    finalPublicKey = finalCert.getPublicKey();
-                }
-
-                policyTreeResult = policyChecker.getPolicyTree();
-                return;
-            } else {
-                builder.addCertToPath(cert, certPathList);
-            }
-
-            /* Update the PKIX state */
-            nextState.updateState(cert);
-
-            /*
-             * Append an entry for cert in adjacency list and
-             * set index for current vertex.
-             */
-            adjList.add(new LinkedList<Vertex>());
-            vertex.setIndex(adjList.size() - 1);
-
-            /* recursively search for matching certs at next dN */
-            depthFirstSearchForward(cert.getIssuerX500Principal(),
-                                    nextState, builder, adjList, certPathList);
-
-            /*
-             * If path has been completed, return ASAP!
-             */
-            if (pathCompleted) {
-                return;
-            } else {
-                /*
-                 * If we get here, it means we have searched all possible
-                 * certs issued by the dN w/o finding any matching certs.
-                 * This means we have to backtrack to the previous cert in
-                 * the path and try some other paths.
-                 */
-                if (debug != null)
-                    debug.println("SunCertPathBuilder.depthFirstSearchForward()"
-                        + ": backtracking");
-                builder.removeFinalCertFromPath(certPathList);
-            }
-        }
-    }
-
-    /*
-     * This method performs a depth first search for a certification
-     * path while building reverse which meets the requirements set in
-     * the parameters object.
-     * It uses an adjacency list to store all certificates which were
-     * tried (i.e. at one time added to the path - they may not end up in
-     * the final path if backtracking occurs). This information can
-     * be used later to debug or demo the build.
-     *
-     * See "Data Structure and Algorithms, by Aho, Hopcroft, and Ullman"
-     * for an explanation of the DFS algorithm.
-     *
-     * @param dN the distinguished name being currently searched for certs
-     * @param currentState the current PKIX validation state
-     */
-    void depthFirstSearchReverse(X500Principal dN, ReverseState currentState,
-        ReverseBuilder builder, List<List<Vertex>> adjList,
-        LinkedList<X509Certificate> certPathList)
-        throws GeneralSecurityException, IOException
-    {
-        if (debug != null)
-            debug.println("SunCertPathBuilder.depthFirstSearchReverse(" + dN
-                + ", " + currentState.toString() + ")");
-
-        /*
-         * Find all the certificates issued by dN which
-         * satisfy the PKIX certification path constraints.
-         */
-        List<Vertex> vertices = addVertices
-           (builder.getMatchingCerts(currentState, orderedCertStores), adjList);
-        if (debug != null)
-            debug.println("SunCertPathBuilder.depthFirstSearchReverse(): "
-                + "certs.size=" + vertices.size());
-
-        /*
-         * For each cert in the collection, verify anything
-         * that hasn't been checked yet (signature, revocation, etc)
-         * and check for loops. Call depthFirstSearchReverse()
-         * recursively for each good cert.
-         */
-        for (Vertex vertex : vertices) {
-            /**
-             * Restore state to currentState each time through the loop.
-             * This is important because some of the user-defined
-             * checkers modify the state, which MUST be restored if
-             * the cert eventually fails to lead to the target and
-             * the next matching cert is tried.
-             */
-            ReverseState nextState = (ReverseState) currentState.clone();
-            X509Certificate cert = (X509Certificate) vertex.getCertificate();
-            try {
-                builder.verifyCert(cert, nextState, certPathList);
-            } catch (GeneralSecurityException gse) {
-                if (debug != null)
-                    debug.println("SunCertPathBuilder.depthFirstSearchReverse()"
-                        + ": validation failed: " + gse);
-                vertex.setThrowable(gse);
-                continue;
-            }
-
-            /*
-             * Certificate is good, add it to the path (if it isn't a
-             * self-signed cert) and update state
-             */
-            if (!currentState.isInitial())
-                builder.addCertToPath(cert, certPathList);
-            // save trust anchor
-            this.trustAnchor = currentState.trustAnchor;
-
-            /*
-             * Check if path is completed, return ASAP if so.
-             */
-            if (builder.isPathCompleted(cert)) {
-                if (debug != null)
-                    debug.println("SunCertPathBuilder.depthFirstSearchReverse()"
-                        + ": path completed!");
-                pathCompleted = true;
-
-                PolicyNodeImpl rootNode = nextState.rootNode;
-
-                if (rootNode == null)
-                    policyTreeResult = null;
-                else {
-                    policyTreeResult = rootNode.copyTree();
-                    ((PolicyNodeImpl)policyTreeResult).setImmutable();
-                }
-
-                /*
-                 * Extract and save the final target public key
-                 */
-                finalPublicKey = cert.getPublicKey();
-                if (finalPublicKey instanceof DSAPublicKey &&
-                    ((DSAPublicKey)finalPublicKey).getParams() == null)
-                {
-                    finalPublicKey =
-                        BasicChecker.makeInheritedParamsKey
-                            (finalPublicKey, currentState.pubKey);
-                }
-
-                return;
-            }
-
-            /* Update the PKIX state */
-            nextState.updateState(cert);
-
-            /*
-             * Append an entry for cert in adjacency list and
-             * set index for current vertex.
-             */
-            adjList.add(new LinkedList<Vertex>());
-            vertex.setIndex(adjList.size() - 1);
-
-            /* recursively search for matching certs at next dN */
-            depthFirstSearchReverse(cert.getSubjectX500Principal(), nextState,
-                builder, adjList, certPathList);
-
-            /*
-             * If path has been completed, return ASAP!
-             */
-            if (pathCompleted) {
-                return;
-            } else {
-                /*
-                 * If we get here, it means we have searched all possible
-                 * certs issued by the dN w/o finding any matching certs. This
-                 * means we have to backtrack to the previous cert in the path
-                 * and try some other paths.
-                 */
-                if (debug != null)
-                    debug.println("SunCertPathBuilder.depthFirstSearchReverse()"
-                        + ": backtracking");
-                if (!currentState.isInitial())
-                    builder.removeFinalCertFromPath(certPathList);
-            }
-        }
-        if (debug != null)
-            debug.println("SunCertPathBuilder.depthFirstSearchReverse() all "
-                + "certs in this adjacency list checked");
-    }
-
-    /*
-     * Adds a collection of matching certificates to the
-     * adjacency list.
-     */
-    private List<Vertex> addVertices(Collection<X509Certificate> certs,
-        List<List<Vertex>> adjList) {
-        List<Vertex> l = adjList.get(adjList.size() - 1);
-
-        for (X509Certificate cert : certs) {
-           Vertex v = new Vertex(cert);
-           l.add(v);
-        }
-
-        return l;
-    }
-
-    /**
-     * Returns true if trust anchor certificate matches specified
-     * certificate constraints.
-     */
-    private boolean anchorIsTarget(TrustAnchor anchor, X509CertSelector sel) {
-        X509Certificate anchorCert = anchor.getTrustedCert();
-        if (anchorCert != null) {
-            return sel.match(anchorCert);
-        }
-        return false;
-    }
-
-    /**
-     * Comparator that orders CertStores so that local CertStores come before
-     * remote CertStores.
-     */
-    private static class CertStoreComparator implements Comparator<CertStore> {
-        public int compare(CertStore store1, CertStore store2) {
-            if (Builder.isLocalCertStore(store1)) {
-                return -1;
-            } else {
-                return 1;
-            }
-        }
-    }
-
-    /**
-     * Returns the target subject DN from the first X509Certificate that
-     * is fetched that matches the specified X509CertSelector.
-     */
-    private X500Principal getTargetSubjectDN(List<CertStore> stores,
-        X509CertSelector targetSel) {
-        for (CertStore store : stores) {
-            try {
-                Collection<? extends Certificate> targetCerts =
-                    (Collection<? extends Certificate>)
-                        store.getCertificates(targetSel);
-                if (!targetCerts.isEmpty()) {
-                    X509Certificate targetCert =
-                        (X509Certificate)targetCerts.iterator().next();
-                    return targetCert.getSubjectX500Principal();
-                }
-            } catch (CertStoreException e) {
-                // ignore but log it
-                if (debug != null) {
-                    debug.println("SunCertPathBuilder.getTargetSubjectDN: " +
-                        "non-fatal exception retrieving certs: " + e);
-                    e.printStackTrace();
-                }
-            }
-        }
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilderException.java b/ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilderException.java
deleted file mode 100755
index 8ba440d..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilderException.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (c) 2000, 2004, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.util.List;
-import java.security.cert.CertPathBuilderException;
-
-/**
- * This is a subclass of the generic <code>CertPathBuilderException</code>.
- * It contains an adjacency list with information regarding the unsuccessful
- * paths that the SunCertPathBuilder tried.
- *
- * @since       1.4
- * @author      Sean Mullan
- * @see         CertPathBuilderException
- */
-public class SunCertPathBuilderException extends CertPathBuilderException {
-
-    private static final long serialVersionUID = -7814288414129264709L;
-
-    /**
-     * @serial
-     */
-    private transient AdjacencyList adjList;
-
-    /**
-     * Constructs a <code>SunCertPathBuilderException</code> with
-     * <code>null</code> as its detail message.
-     */
-    public SunCertPathBuilderException() {
-        super();
-    }
-
-    /**
-     * Constructs a <code>SunCertPathBuilderException</code> with the specified
-     * detail message. A detail message is a <code>String</code> that
-     * describes this particular exception.
-     *
-     * @param msg the detail message
-     */
-    public SunCertPathBuilderException(String msg) {
-        super(msg);
-    }
-
-    /**
-     * Constructs a <code>SunCertPathBuilderException</code> that wraps the
-     * specified throwable. This allows any exception to be converted into a
-     * <code>SunCertPathBuilderException</code>, while retaining information
-     * about the cause, which may be useful for debugging. The detail message is
-     * set to (<code>cause==null ? null : cause.toString()</code>) (which
-     * typically contains the class and detail message of cause).
-     *
-     * @param cause the cause (which is saved for later retrieval by the
-     * {@link #getCause getCause()} method). (A <code>null</code> value is
-     * permitted, and indicates that the cause is nonexistent or unknown.)
-     * root cause.
-     */
-    public SunCertPathBuilderException(Throwable cause) {
-        super(cause);
-    }
-
-    /**
-     * Creates a <code>SunCertPathBuilderException</code> with the specified
-     * detail message and cause.
-     *
-     * @param msg the detail message
-     * @param cause the cause
-     */
-    public SunCertPathBuilderException(String msg, Throwable cause) {
-        super(msg, cause);
-    }
-
-    /**
-     * Creates a <code>SunCertPathBuilderException</code> withe the specified
-     * detail message and adjacency list.
-     *
-     * @param msg the detail message
-     * @param adjList the adjacency list
-     */
-    SunCertPathBuilderException(String msg, AdjacencyList adjList) {
-        this(msg);
-        this.adjList = adjList;
-    }
-
-    /**
-     * Creates a <code>SunCertPathBuilderException</code> with the specified
-     * detail message, cause, and adjacency list.
-     *
-     * @param msg the detail message
-     * @param cause the throwable that occurred
-     * @param adjList Adjacency list
-     */
-    SunCertPathBuilderException(String msg, Throwable cause,
-        AdjacencyList adjList)
-    {
-        this(msg, cause);
-        this.adjList = adjList;
-    }
-
-    /**
-     * Returns the adjacency list containing information about the build.
-     *
-     * @return the adjacency list containing information about the build
-     */
-    public AdjacencyList getAdjacencyList() {
-        return adjList;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilderParameters.java b/ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilderParameters.java
deleted file mode 100755
index 11f9f8c..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilderParameters.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (c) 2000, 2003, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.util.Set;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.cert.*;
-
-/**
- * This class specifies the set of parameters used as input for the Sun
- * certification path build algorithm. It is identical to PKIXBuilderParameters
- * with the addition of a <code>buildForward</code> parameter which allows
- * the caller to specify whether or not the path should be constructed in
- * the forward direction.
- *
- * The default for the <code>buildForward</code> parameter is
- * true, which means that the build algorithm should construct paths
- * from the target subject back to the trusted anchor.
- *
- * @since       1.4
- * @author      Sean Mullan
- * @author      Yassir Elley
- */
-public class SunCertPathBuilderParameters extends PKIXBuilderParameters {
-
-    private boolean buildForward = true;
-
-    /**
-     * Creates an instance of <code>SunCertPathBuilderParameters</code> with the
-     * specified parameter values.
-     *
-     * @param trustAnchors a <code>Set</code> of <code>TrustAnchor</code>s
-     * @param targetConstraints a <code>CertSelector</code> specifying the
-     * constraints on the target certificate
-     * @throws InvalidAlgorithmParameterException if the specified
-     * <code>Set</code> is empty <code>(trustAnchors.isEmpty() == true)</code>
-     * @throws NullPointerException if the specified <code>Set</code> is
-     * <code>null</code>
-     * @throws ClassCastException if any of the elements in the <code>Set</code>
-     * are not of type <code>java.security.cert.TrustAnchor</code>
-     */
-    public SunCertPathBuilderParameters(Set<TrustAnchor> trustAnchors,
-        CertSelector targetConstraints) throws InvalidAlgorithmParameterException
-    {
-        super(trustAnchors, targetConstraints);
-        setBuildForward(true);
-    }
-
-    /**
-     * Creates an instance of <code>SunCertPathBuilderParameters</code> that
-     * uses the specified <code>KeyStore</code> to populate the set
-     * of most-trusted CA certificates.
-     *
-     * @param keystore A keystore from which the set of most-trusted
-     * CA certificates will be populated.
-     * @param targetConstraints a <code>CertSelector</code> specifying the
-     * constraints on the target certificate
-     * @throws KeyStoreException if the keystore has not been initialized.
-     * @throws InvalidAlgorithmParameterException if the keystore does
-     * not contain at least one trusted certificate entry
-     * @throws NullPointerException if the keystore is <code>null</code>
-     */
-    public SunCertPathBuilderParameters(KeyStore keystore,
-        CertSelector targetConstraints)
-        throws KeyStoreException, InvalidAlgorithmParameterException
-    {
-        super(keystore, targetConstraints);
-        setBuildForward(true);
-    }
-
-    /**
-     * Returns the value of the buildForward flag.
-     *
-     * @return the value of the buildForward flag
-     */
-    public boolean getBuildForward() {
-        return this.buildForward;
-    }
-
-    /**
-     * Sets the value of the buildForward flag. If true, paths
-     * are built from the target subject to the trusted anchor.
-     * If false, paths are built from the trusted anchor to the
-     * target subject. The default value if not specified is true.
-     *
-     * @param buildForward the value of the buildForward flag
-     */
-    public void setBuildForward(boolean buildForward) {
-        this.buildForward = buildForward;
-    }
-
-    /**
-     * Returns a formatted string describing the parameters.
-     *
-     * @return a formatted string describing the parameters.
-     */
-    public String toString() {
-        StringBuffer sb = new StringBuffer();
-        sb.append("[\n");
-        sb.append(super.toString());
-        sb.append("  Build Forward Flag: " + String.valueOf(buildForward) + "\n");
-        sb.append("]\n");
-        return sb.toString();
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilderResult.java b/ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilderResult.java
deleted file mode 100755
index 5924190..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilderResult.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2000, 2001, 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.
- */
-
-package sun.security.provider.certpath;
-
-import sun.security.util.Debug;
-import java.security.PublicKey;
-import java.security.cert.CertPath;
-import java.security.cert.PKIXCertPathBuilderResult;
-import java.security.cert.PolicyNode;
-import java.security.cert.TrustAnchor;
-
-/**
- * This class represents the result of a SunCertPathBuilder build.
- * Since all paths returned by the SunCertPathProvider are PKIX validated
- * the result contains the valid policy tree and subject public key returned
- * by the algorithm. It also contains the trust anchor and debug information
- * represented in the form of an adjacency list.
- *
- * @see PKIXCertPathBuilderResult
- *
- * @since       1.4
- * @author      Sean Mullan
- */
-//@@@ Note: this class is not in public API and access to adjacency list is
-//@@@ intended for debugging/replay of Sun PKIX CertPathBuilder implementation.
-
-public class SunCertPathBuilderResult extends PKIXCertPathBuilderResult {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-
-    private AdjacencyList adjList;
-
-    /**
-     * Creates a SunCertPathBuilderResult instance.
-     *
-     * @param certPath the validated <code>CertPath</code>
-     * @param trustAnchor a <code>TrustAnchor</code> describing the CA that
-     * served as a trust anchor for the certification path
-     * @param policyTree the valid policy tree, or <code>null</code>
-     * if there are no valid policies
-     * @param subjectPublicKey the public key of the subject
-     * @param adjList an Adjacency list containing debug information
-     */
-    SunCertPathBuilderResult(CertPath certPath,
-        TrustAnchor trustAnchor, PolicyNode policyTree,
-        PublicKey subjectPublicKey, AdjacencyList adjList)
-    {
-        super(certPath, trustAnchor, policyTree, subjectPublicKey);
-        this.adjList = adjList;
-    }
-
-    /**
-     * Returns the adjacency list containing information about the build.
-     *
-     * @return The adjacency list containing information about the build.
-     */
-    public AdjacencyList getAdjacencyList() {
-        return adjList;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/URICertStore.java b/ojluni/src/main/java/sun/security/provider/certpath/URICertStore.java
deleted file mode 100755
index 34b3fd6..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/URICertStore.java
+++ /dev/null
@@ -1,534 +0,0 @@
-/*
- * Copyright (c) 2006, 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.
- */
-
-package sun.security.provider.certpath;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.net.HttpURLConnection;
-import java.net.URI;
-import java.net.URLConnection;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.NoSuchAlgorithmException;
-import java.security.Provider;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-import java.security.cert.CertSelector;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.security.cert.CertStoreParameters;
-import java.security.cert.CertStoreSpi;
-import java.security.cert.CRLException;
-import java.security.cert.CRLSelector;
-import java.security.cert.X509Certificate;
-import java.security.cert.X509CertSelector;
-import java.security.cert.X509CRL;
-import java.security.cert.X509CRLSelector;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Locale;
-import sun.security.action.GetIntegerAction;
-import sun.security.x509.AccessDescription;
-import sun.security.x509.GeneralNameInterface;
-import sun.security.x509.URIName;
-import sun.security.util.Cache;
-import sun.security.util.Debug;
-
-/**
- * A <code>CertStore</code> that retrieves <code>Certificates</code> or
- * <code>CRL</code>s from a URI, for example, as specified in an X.509
- * AuthorityInformationAccess or CRLDistributionPoint extension.
- * <p>
- * For CRLs, this implementation retrieves a single DER encoded CRL per URI.
- * For Certificates, this implementation retrieves a single DER encoded CRL or
- * a collection of Certificates encoded as a PKCS#7 "certs-only" CMS message.
- * <p>
- * This <code>CertStore</code> also implements Certificate/CRL caching.
- * Currently, the cache is shared between all applications in the VM and uses a
- * hardcoded policy. The cache has a maximum size of 185 entries, which are held
- * by SoftReferences. A request will be satisfied from the cache if we last
- * checked for an update within CHECK_INTERVAL (last 30 seconds). Otherwise,
- * we open an URLConnection to download the Certificate(s)/CRL using an
- * If-Modified-Since request (HTTP) if possible. Note that both positive and
- * negative responses are cached, i.e. if we are unable to open the connection
- * or the Certificate(s)/CRL cannot be parsed, we remember this result and
- * additional calls during the CHECK_INTERVAL period do not try to open another
- * connection.
- * <p>
- * The URICertStore is not currently a standard CertStore type. We should
- * consider adding a standard "URI" CertStore type.
- *
- * @author Andreas Sterbenz
- * @author Sean Mullan
- * @since 7.0
- */
-class URICertStore extends CertStoreSpi {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-
-    // interval between checks for update of cached Certificates/CRLs
-    // (30 seconds)
-    private final static int CHECK_INTERVAL = 30 * 1000;
-
-    // size of the cache (see Cache class for sizing recommendations)
-    private final static int CACHE_SIZE = 185;
-
-    // X.509 certificate factory instance
-    private final CertificateFactory factory;
-
-    // cached Collection of X509Certificates (may be empty, never null)
-    private Collection<X509Certificate> certs =
-        Collections.<X509Certificate>emptySet();
-
-    // cached X509CRL (may be null)
-    private X509CRL crl;
-
-    // time we last checked for an update
-    private long lastChecked;
-
-    // time server returned as last modified time stamp
-    // or 0 if not available
-    private long lastModified;
-
-    // the URI of this CertStore
-    private URI uri;
-
-    // true if URI is ldap
-    private boolean ldap = false;
-    private CertStore ldapCertStore;
-    private String ldapPath;
-
-    /**
-     * Holder class to lazily load LDAPCertStoreHelper if present.
-     */
-    private static class LDAP {
-        private static final String CERT_STORE_HELPER =
-            "sun.security.provider.certpath.ldap.LDAPCertStoreHelper";
-        private static final CertStoreHelper helper =
-            AccessController.doPrivileged(
-                new PrivilegedAction<CertStoreHelper>() {
-                    public CertStoreHelper run() {
-                        try {
-                            Class<?> c = Class.forName(CERT_STORE_HELPER, true, null);
-                            return (CertStoreHelper)c.newInstance();
-                        } catch (ClassNotFoundException cnf) {
-                            return null;
-                        } catch (InstantiationException e) {
-                            throw new AssertionError(e);
-                        } catch (IllegalAccessException e) {
-                            throw new AssertionError(e);
-                        }
-                    }});
-        static CertStoreHelper helper() {
-            return helper;
-        }
-    }
-
-    // Default maximum connect timeout in milliseconds (15 seconds)
-    // allowed when downloading CRLs
-    private static final int DEFAULT_CRL_CONNECT_TIMEOUT = 15000;
-
-    /**
-     * Integer value indicating the connect timeout, in seconds, to be
-     * used for the CRL download. A timeout of zero is interpreted as
-     * an infinite timeout.
-     */
-    private static final int CRL_CONNECT_TIMEOUT = initializeTimeout();
-
-    /**
-     * Initialize the timeout length by getting the CRL timeout
-     * system property. If the property has not been set, or if its
-     * value is negative, set the timeout length to the default.
-     */
-    private static int initializeTimeout() {
-        Integer tmp = java.security.AccessController.doPrivileged(
-                new GetIntegerAction("com.sun.security.crl.timeout"));
-        if (tmp == null || tmp < 0) {
-            return DEFAULT_CRL_CONNECT_TIMEOUT;
-        }
-        // Convert to milliseconds, as the system property will be
-        // specified in seconds
-        return tmp * 1000;
-    }
-
-    /**
-     * Creates a URICertStore.
-     *
-     * @param parameters specifying the URI
-     */
-    URICertStore(CertStoreParameters params)
-        throws InvalidAlgorithmParameterException, NoSuchAlgorithmException {
-        super(params);
-        if (!(params instanceof URICertStoreParameters)) {
-            throw new InvalidAlgorithmParameterException
-                ("params must be instanceof URICertStoreParameters");
-        }
-        this.uri = ((URICertStoreParameters) params).uri;
-        // if ldap URI, use an LDAPCertStore to fetch certs and CRLs
-        if (uri.getScheme().toLowerCase(Locale.ENGLISH).equals("ldap")) {
-            if (LDAP.helper() == null)
-                throw new NoSuchAlgorithmException("LDAP not present");
-            ldap = true;
-            ldapCertStore = LDAP.helper().getCertStore(uri);
-            ldapPath = uri.getPath();
-            // strip off leading '/'
-            if (ldapPath.charAt(0) == '/') {
-                ldapPath = ldapPath.substring(1);
-            }
-        }
-        try {
-            factory = CertificateFactory.getInstance("X.509");
-        } catch (CertificateException e) {
-            throw new RuntimeException();
-        }
-    }
-
-    /**
-     * Returns a URI CertStore. This method consults a cache of
-     * CertStores (shared per JVM) using the URI as a key.
-     */
-    private static final Cache certStoreCache =
-        Cache.newSoftMemoryCache(CACHE_SIZE);
-    static synchronized CertStore getInstance(URICertStoreParameters params)
-        throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
-        if (debug != null) {
-            debug.println("CertStore URI:" + params.uri);
-        }
-        CertStore ucs = (CertStore) certStoreCache.get(params);
-        if (ucs == null) {
-            ucs = new UCS(new URICertStore(params), null, "URI", params);
-            certStoreCache.put(params, ucs);
-        } else {
-            if (debug != null) {
-                debug.println("URICertStore.getInstance: cache hit");
-            }
-        }
-        return ucs;
-    }
-
-    /**
-     * Creates a CertStore from information included in the AccessDescription
-     * object of a certificate's Authority Information Access Extension.
-     */
-    static CertStore getInstance(AccessDescription ad) {
-        if (!ad.getAccessMethod().equals(AccessDescription.Ad_CAISSUERS_Id)) {
-            return null;
-        }
-        GeneralNameInterface gn = ad.getAccessLocation().getName();
-        if (!(gn instanceof URIName)) {
-            return null;
-        }
-        URI uri = ((URIName) gn).getURI();
-        try {
-            return URICertStore.getInstance
-                (new URICertStore.URICertStoreParameters(uri));
-        } catch (Exception ex) {
-            if (debug != null) {
-                debug.println("exception creating CertStore: " + ex);
-                ex.printStackTrace();
-            }
-            return null;
-        }
-    }
-
-    /**
-     * Returns a <code>Collection</code> of <code>X509Certificate</code>s that
-     * match the specified selector. If no <code>X509Certificate</code>s
-     * match the selector, an empty <code>Collection</code> will be returned.
-     *
-     * @param selector a <code>CertSelector</code> used to select which
-     *  <code>X509Certificate</code>s should be returned. Specify
-     *  <code>null</code> to return all <code>X509Certificate</code>s.
-     * @return a <code>Collection</code> of <code>X509Certificate</code>s that
-     *         match the specified selector
-     * @throws CertStoreException if an exception occurs
-     */
-    public synchronized Collection<X509Certificate> engineGetCertificates
-        (CertSelector selector) throws CertStoreException {
-
-        // if ldap URI we wrap the CertSelector in an LDAPCertSelector to
-        // avoid LDAP DN matching issues (see LDAPCertSelector for more info)
-        if (ldap) {
-            X509CertSelector xsel = (X509CertSelector) selector;
-            try {
-                xsel = LDAP.helper().wrap(xsel, xsel.getSubject(), ldapPath);
-            } catch (IOException ioe) {
-                throw new CertStoreException(ioe);
-            }
-            // Fetch the certificates via LDAP. LDAPCertStore has its own
-            // caching mechanism, see the class description for more info.
-            return (Collection<X509Certificate>)
-                ldapCertStore.getCertificates(xsel);
-        }
-
-        // Return the Certificates for this entry. It returns the cached value
-        // if it is still current and fetches the Certificates otherwise.
-        // For the caching details, see the top of this class.
-        long time = System.currentTimeMillis();
-        if (time - lastChecked < CHECK_INTERVAL) {
-            if (debug != null) {
-                debug.println("Returning certificates from cache");
-            }
-            return getMatchingCerts(certs, selector);
-        }
-        lastChecked = time;
-        InputStream in = null;
-        try {
-            URLConnection connection = uri.toURL().openConnection();
-            if (lastModified != 0) {
-                connection.setIfModifiedSince(lastModified);
-            }
-            in = connection.getInputStream();
-            long oldLastModified = lastModified;
-            lastModified = connection.getLastModified();
-            if (oldLastModified != 0) {
-                if (oldLastModified == lastModified) {
-                    if (debug != null) {
-                        debug.println("Not modified, using cached copy");
-                    }
-                    return getMatchingCerts(certs, selector);
-                } else if (connection instanceof HttpURLConnection) {
-                    // some proxy servers omit last modified
-                    HttpURLConnection hconn = (HttpURLConnection) connection;
-                    if (hconn.getResponseCode()
-                                == HttpURLConnection.HTTP_NOT_MODIFIED) {
-                        if (debug != null) {
-                            debug.println("Not modified, using cached copy");
-                        }
-                        return getMatchingCerts(certs, selector);
-                    }
-                }
-            }
-            if (debug != null) {
-                debug.println("Downloading new certificates...");
-            }
-            certs = (Collection<X509Certificate>)
-                factory.generateCertificates(in);
-            return getMatchingCerts(certs, selector);
-        } catch (IOException e) {
-            if (debug != null) {
-                debug.println("Exception fetching certificates:");
-                e.printStackTrace();
-            }
-        } catch (CertificateException e) {
-            if (debug != null) {
-                debug.println("Exception fetching certificates:");
-                e.printStackTrace();
-            }
-        } finally {
-            if (in != null) {
-                try {
-                    in.close();
-                } catch (IOException e) {
-                    // ignore
-                }
-            }
-        }
-        // exception, forget previous values
-        lastModified = 0;
-        certs = Collections.<X509Certificate>emptySet();
-        return certs;
-    }
-
-    /**
-     * Iterates over the specified Collection of X509Certificates and
-     * returns only those that match the criteria specified in the
-     * CertSelector.
-     */
-    private static Collection<X509Certificate> getMatchingCerts
-        (Collection<X509Certificate> certs, CertSelector selector) {
-        // if selector not specified, all certs match
-        if (selector == null) {
-            return certs;
-        }
-        List<X509Certificate> matchedCerts =
-            new ArrayList<X509Certificate>(certs.size());
-        for (X509Certificate cert : certs) {
-            if (selector.match(cert)) {
-                matchedCerts.add(cert);
-            }
-        }
-        return matchedCerts;
-    }
-
-    /**
-     * Returns a <code>Collection</code> of <code>X509CRL</code>s that
-     * match the specified selector. If no <code>X509CRL</code>s
-     * match the selector, an empty <code>Collection</code> will be returned.
-     *
-     * @param selector A <code>CRLSelector</code> used to select which
-     *  <code>X509CRL</code>s should be returned. Specify <code>null</code>
-     *  to return all <code>X509CRL</code>s.
-     * @return A <code>Collection</code> of <code>X509CRL</code>s that
-     *         match the specified selector
-     * @throws CertStoreException if an exception occurs
-     */
-    public synchronized Collection<X509CRL> engineGetCRLs(CRLSelector selector)
-        throws CertStoreException {
-
-        // if ldap URI we wrap the CRLSelector in an LDAPCRLSelector to
-        // avoid LDAP DN matching issues (see LDAPCRLSelector for more info)
-        if (ldap) {
-            X509CRLSelector xsel = (X509CRLSelector) selector;
-            try {
-                xsel = LDAP.helper().wrap(xsel, null, ldapPath);
-            } catch (IOException ioe) {
-                throw new CertStoreException(ioe);
-            }
-            // Fetch the CRLs via LDAP. LDAPCertStore has its own
-            // caching mechanism, see the class description for more info.
-            return (Collection<X509CRL>) ldapCertStore.getCRLs(xsel);
-        }
-
-        // Return the CRLs for this entry. It returns the cached value
-        // if it is still current and fetches the CRLs otherwise.
-        // For the caching details, see the top of this class.
-        long time = System.currentTimeMillis();
-        if (time - lastChecked < CHECK_INTERVAL) {
-            if (debug != null) {
-                debug.println("Returning CRL from cache");
-            }
-            return getMatchingCRLs(crl, selector);
-        }
-        lastChecked = time;
-        InputStream in = null;
-        try {
-            URLConnection connection = uri.toURL().openConnection();
-            if (lastModified != 0) {
-                connection.setIfModifiedSince(lastModified);
-            }
-            connection.setConnectTimeout(CRL_CONNECT_TIMEOUT);
-            in = connection.getInputStream();
-            long oldLastModified = lastModified;
-            lastModified = connection.getLastModified();
-            if (oldLastModified != 0) {
-                if (oldLastModified == lastModified) {
-                    if (debug != null) {
-                        debug.println("Not modified, using cached copy");
-                    }
-                    return getMatchingCRLs(crl, selector);
-                } else if (connection instanceof HttpURLConnection) {
-                    // some proxy servers omit last modified
-                    HttpURLConnection hconn = (HttpURLConnection) connection;
-                    if (hconn.getResponseCode()
-                                == HttpURLConnection.HTTP_NOT_MODIFIED) {
-                        if (debug != null) {
-                            debug.println("Not modified, using cached copy");
-                        }
-                        return getMatchingCRLs(crl, selector);
-                    }
-                }
-            }
-            if (debug != null) {
-                debug.println("Downloading new CRL...");
-            }
-            crl = (X509CRL) factory.generateCRL(in);
-            return getMatchingCRLs(crl, selector);
-        } catch (IOException e) {
-            if (debug != null) {
-                debug.println("Exception fetching CRL:");
-                e.printStackTrace();
-            }
-        } catch (CRLException e) {
-            if (debug != null) {
-                debug.println("Exception fetching CRL:");
-                e.printStackTrace();
-            }
-        } finally {
-            if (in != null) {
-                try {
-                    in.close();
-                } catch (IOException e) {
-                    // ignore
-                }
-            }
-        }
-        // exception, forget previous values
-        lastModified = 0;
-        crl = null;
-        return Collections.<X509CRL>emptyList();
-    }
-
-    /**
-     * Checks if the specified X509CRL matches the criteria specified in the
-     * CRLSelector.
-     */
-    private static Collection<X509CRL> getMatchingCRLs
-        (X509CRL crl, CRLSelector selector) {
-        if (selector == null || (crl != null && selector.match(crl))) {
-            return Collections.<X509CRL>singletonList(crl);
-        } else {
-            return Collections.<X509CRL>emptyList();
-        }
-    }
-
-    /**
-     * CertStoreParameters for the URICertStore.
-     */
-    static class URICertStoreParameters implements CertStoreParameters {
-        private final URI uri;
-        private volatile int hashCode = 0;
-        URICertStoreParameters(URI uri) {
-            this.uri = uri;
-        }
-        public boolean equals(Object obj) {
-            if (!(obj instanceof URICertStoreParameters)) {
-                return false;
-            }
-            URICertStoreParameters params = (URICertStoreParameters) obj;
-            return uri.equals(params.uri);
-        }
-        public int hashCode() {
-            if (hashCode == 0) {
-                int result = 17;
-                result = 37*result + uri.hashCode();
-                hashCode = result;
-            }
-            return hashCode;
-        }
-        public Object clone() {
-            try {
-                return super.clone();
-            } catch (CloneNotSupportedException e) {
-                /* Cannot happen */
-                throw new InternalError(e.toString());
-            }
-        }
-    }
-
-    /**
-     * This class allows the URICertStore to be accessed as a CertStore.
-     */
-    private static class UCS extends CertStore {
-        protected UCS(CertStoreSpi spi, Provider p, String type,
-            CertStoreParameters params) {
-            super(spi, p, type, params);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/Vertex.java b/ojluni/src/main/java/sun/security/provider/certpath/Vertex.java
deleted file mode 100755
index 38df9d9..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/Vertex.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright (c) 2000, 2002, 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.
- */
-
-package sun.security.provider.certpath;
-
-import sun.security.util.Debug;
-
-import java.security.cert.Certificate;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-
-import sun.security.x509.AuthorityKeyIdentifierExtension;
-import sun.security.x509.KeyIdentifier;
-import sun.security.x509.SubjectKeyIdentifierExtension;
-import sun.security.x509.X509CertImpl;
-
-/*
- * This class represents a vertex in the adjacency list. A
- * vertex in the builder's view is just a distinguished name
- * in the directory.  The Vertex contains a certificate
- * along an attempted certification path, along with a pointer
- * to a list of certificates that followed this one in various
- * attempted certification paths.
- *
- * @author      Sean Mullan
- * @since       1.4
- */
-public class Vertex {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-    private Certificate cert;
-    private int         index;
-    private Throwable   throwable;
-
-    /**
-     * Constructor; creates vertex with index of -1
-     * Use setIndex method to set another index.
-     *
-     * @param cert Certificate associated with vertex
-     */
-    Vertex(Certificate cert) {
-        this.cert = cert;
-        this.index = -1;
-    }
-
-    /**
-     * return the certificate for this vertex
-     *
-     * @returns Certificate
-     */
-    public Certificate getCertificate() {
-        return cert;
-    }
-
-    /**
-     * get the index for this vertex, where the index is the row of the
-     * adjacency list that contains certificates that could follow this
-     * certificate.
-     *
-     * @returns int index for this vertex, or -1 if no following certificates.
-     */
-    public int getIndex() {
-        return index;
-    }
-
-    /**
-     * set the index for this vertex, where the index is the row of the
-     * adjacency list that contains certificates that could follow this
-     * certificate.
-     *
-     * @param ndx int index for vertex, or -1 if no following certificates.
-     */
-    void setIndex(int ndx) {
-        index = ndx;
-    }
-
-    /**
-     * return the throwable associated with this vertex;
-     * returns null if none.
-     *
-     * @returns Throwable
-     */
-    public Throwable getThrowable() {
-        return throwable;
-    }
-
-    /**
-     * set throwable associated with this vertex; default value is null.
-     *
-     * @param throwable Throwable associated with this vertex
-     *                  (or null)
-     */
-    void setThrowable(Throwable throwable) {
-        this.throwable = throwable;
-    }
-
-    /**
-     * Return full string representation of vertex
-     *
-     * @returns String representation of vertex
-     */
-    public String toString() {
-        return certToString() + throwableToString() + indexToString();
-    }
-
-    /**
-     * Return string representation of this vertex's
-     * certificate information.
-     *
-     * @returns String representation of certificate info
-     */
-    public String certToString() {
-        String out = "";
-        if (cert == null || ! (cert instanceof X509Certificate))
-            return "Cert:       Not an X509Certificate\n";
-
-        X509CertImpl x509Cert = null;
-        try {
-            x509Cert = X509CertImpl.toImpl((X509Certificate)cert);
-        } catch (CertificateException ce) {
-            if (debug != null) {
-                debug.println("Vertex.certToString() unexpected exception");
-                ce.printStackTrace();
-            }
-            return out;
-        }
-
-        out =       "Issuer:     " + x509Cert.getIssuerX500Principal() + "\n";
-        out = out + "Subject:    " + x509Cert.getSubjectX500Principal() + "\n";
-        out = out + "SerialNum:  " + (x509Cert.getSerialNumber()).toString(16) + "\n";
-        out = out + "Expires:    " + x509Cert.getNotAfter().toString() + "\n";
-        boolean[] iUID = x509Cert.getIssuerUniqueID();
-        if (iUID != null) {
-            out = out + "IssuerUID:  ";
-            for (int i=0; i < iUID.length; i++) {
-                out = out + (iUID[i]?1:0);
-            }
-            out = out + "\n";
-        }
-        boolean[] sUID = x509Cert.getSubjectUniqueID();
-        if (sUID != null) {
-            out = out + "SubjectUID: ";
-            for (int i=0; i< sUID.length; i++) {
-                out = out + (sUID[i]?1:0);
-            }
-            out = out + "\n";
-        }
-        SubjectKeyIdentifierExtension sKeyID = null;
-        try {
-            sKeyID = x509Cert.getSubjectKeyIdentifierExtension();
-            if (sKeyID != null) {
-                KeyIdentifier keyID = (KeyIdentifier)sKeyID.get(sKeyID.KEY_ID);
-                out = out + "SubjKeyID:  " + keyID.toString();
-            }
-        } catch (Exception e) {
-            if (debug != null) {
-                debug.println("Vertex.certToString() unexpected exception");
-                e.printStackTrace();
-            }
-        }
-        AuthorityKeyIdentifierExtension aKeyID = null;
-        try {
-            aKeyID = x509Cert.getAuthorityKeyIdentifierExtension();
-            if (aKeyID != null) {
-                KeyIdentifier keyID = (KeyIdentifier)aKeyID.get(aKeyID.KEY_ID);
-                out = out + "AuthKeyID:  " + keyID.toString();
-            }
-        } catch (Exception e) {
-            if (debug != null) {
-                debug.println("Vertex.certToString() 2 unexpected exception");
-                e.printStackTrace();
-            }
-        }
-        return out;
-    }
-
-    /**
-     * return Vertex throwable as String compatible with
-     * the way toString returns other information
-     *
-     * @returns String form of exception (or "none")
-     */
-    public String throwableToString() {
-        String out = "Exception:  ";
-        if (throwable != null)
-            out = out + throwable.toString();
-        else
-            out = out + "null";
-        out = out + "\n";
-        return out;
-    }
-
-    /**
-     * return Vertex index as String compatible with
-     * the way other Vertex.xToString() methods display
-     * information.
-     *
-     * @returns String form of index as "Last cert?  [Yes/No]
-     */
-    public String moreToString() {
-        String out = "Last cert?  ";
-        out = out + ((index == -1)?"Yes":"No");
-        out = out + "\n";
-        return out;
-    }
-
-    /**
-     * return Vertex index as String compatible with
-     * the way other Vertex.xToString() methods displays other information.
-     *
-     * @returns String form of index as "Index:     [numeric index]"
-     */
-    public String indexToString() {
-        String out = "Index:      " + index + "\n";
-        return out;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/ldap/LDAPCertStore.java b/ojluni/src/main/java/sun/security/provider/certpath/ldap/LDAPCertStore.java
deleted file mode 100755
index 0c037a5..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/ldap/LDAPCertStore.java
+++ /dev/null
@@ -1,1066 +0,0 @@
-/*
- * Copyright (c) 2000, 2006, 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.
- */
-
-package sun.security.provider.certpath.ldap;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.net.URI;
-import java.util.*;
-import javax.naming.Context;
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.naming.NameNotFoundException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.BasicAttributes;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.InitialDirContext;
-
-import java.security.*;
-import java.security.cert.Certificate;
-import java.security.cert.*;
-import javax.security.auth.x500.X500Principal;
-
-import sun.misc.HexDumpEncoder;
-import sun.security.provider.certpath.X509CertificatePair;
-import sun.security.util.Cache;
-import sun.security.util.Debug;
-import sun.security.x509.X500Name;
-import sun.security.action.GetPropertyAction;
-
-/**
- * A <code>CertStore</code> that retrieves <code>Certificates</code> and
- * <code>CRL</code>s from an LDAP directory, using the PKIX LDAP V2 Schema
- * (RFC 2587):
- * <a href="http://www.ietf.org/rfc/rfc2587.txt">
- * http://www.ietf.org/rfc/rfc2587.txt</a>.
- * <p>
- * Before calling the {@link #engineGetCertificates engineGetCertificates} or
- * {@link #engineGetCRLs engineGetCRLs} methods, the
- * {@link #LDAPCertStore(CertStoreParameters)
- * LDAPCertStore(CertStoreParameters)} constructor is called to create the
- * <code>CertStore</code> and establish the DNS name and port of the LDAP
- * server from which <code>Certificate</code>s and <code>CRL</code>s will be
- * retrieved.
- * <p>
- * <b>Concurrent Access</b>
- * <p>
- * As described in the javadoc for <code>CertStoreSpi</code>, the
- * <code>engineGetCertificates</code> and <code>engineGetCRLs</code> methods
- * must be thread-safe. That is, multiple threads may concurrently
- * invoke these methods on a single <code>LDAPCertStore</code> object
- * (or more than one) with no ill effects. This allows a
- * <code>CertPathBuilder</code> to search for a CRL while simultaneously
- * searching for further certificates, for instance.
- * <p>
- * This is achieved by adding the <code>synchronized</code> keyword to the
- * <code>engineGetCertificates</code> and <code>engineGetCRLs</code> methods.
- * <p>
- * This classes uses caching and requests multiple attributes at once to
- * minimize LDAP round trips. The cache is associated with the CertStore
- * instance. It uses soft references to hold the values to minimize impact
- * on footprint and currently has a maximum size of 750 attributes and a
- * 30 second default lifetime.
- * <p>
- * We always request CA certificates, cross certificate pairs, and ARLs in
- * a single LDAP request when any one of them is needed. The reason is that
- * we typically need all of them anyway and requesting them in one go can
- * reduce the number of requests to a third. Even if we don't need them,
- * these attributes are typically small enough not to cause a noticeable
- * overhead. In addition, when the prefetchCRLs flag is true, we also request
- * the full CRLs. It is currently false initially but set to true once any
- * request for an ARL to the server returns an null value. The reason is
- * that CRLs could be rather large but are rarely used. This implementation
- * should improve performance in most cases.
- *
- * @see java.security.cert.CertStore
- *
- * @since       1.4
- * @author      Steve Hanna
- * @author      Andreas Sterbenz
- */
-public class LDAPCertStore extends CertStoreSpi {
-
-    private static final Debug debug = Debug.getInstance("certpath");
-
-    private final static boolean DEBUG = false;
-
-    /**
-     * LDAP attribute identifiers.
-     */
-    private static final String USER_CERT = "userCertificate;binary";
-    private static final String CA_CERT = "cACertificate;binary";
-    private static final String CROSS_CERT = "crossCertificatePair;binary";
-    private static final String CRL = "certificateRevocationList;binary";
-    private static final String ARL = "authorityRevocationList;binary";
-    private static final String DELTA_CRL = "deltaRevocationList;binary";
-
-    // Constants for various empty values
-    private final static String[] STRING0 = new String[0];
-
-    private final static byte[][] BB0 = new byte[0][];
-
-    private final static Attributes EMPTY_ATTRIBUTES = new BasicAttributes();
-
-    // cache related constants
-    private final static int DEFAULT_CACHE_SIZE = 750;
-    private final static int DEFAULT_CACHE_LIFETIME = 30;
-
-    private final static int LIFETIME;
-
-    private final static String PROP_LIFETIME =
-                            "sun.security.certpath.ldap.cache.lifetime";
-
-    static {
-        String s = AccessController.doPrivileged(
-                                new GetPropertyAction(PROP_LIFETIME));
-        if (s != null) {
-            LIFETIME = Integer.parseInt(s); // throws NumberFormatException
-        } else {
-            LIFETIME = DEFAULT_CACHE_LIFETIME;
-        }
-    }
-
-    /**
-     * The CertificateFactory used to decode certificates from
-     * their binary stored form.
-     */
-    private CertificateFactory cf;
-    /**
-     * The JNDI directory context.
-     */
-    private DirContext ctx;
-
-    /**
-     * Flag indicating whether we should prefetch CRLs.
-     */
-    private boolean prefetchCRLs = false;
-
-    private final Cache valueCache;
-
-    private int cacheHits = 0;
-    private int cacheMisses = 0;
-    private int requests = 0;
-
-    /**
-     * Creates a <code>CertStore</code> with the specified parameters.
-     * For this class, the parameters object must be an instance of
-     * <code>LDAPCertStoreParameters</code>.
-     *
-     * @param params the algorithm parameters
-     * @exception InvalidAlgorithmParameterException if params is not an
-     *   instance of <code>LDAPCertStoreParameters</code>
-     */
-    public LDAPCertStore(CertStoreParameters params)
-            throws InvalidAlgorithmParameterException {
-        super(params);
-        if (!(params instanceof LDAPCertStoreParameters))
-          throw new InvalidAlgorithmParameterException(
-            "parameters must be LDAPCertStoreParameters");
-
-        LDAPCertStoreParameters lparams = (LDAPCertStoreParameters) params;
-
-        // Create InitialDirContext needed to communicate with the server
-        createInitialDirContext(lparams.getServerName(), lparams.getPort());
-
-        // Create CertificateFactory for use later on
-        try {
-            cf = CertificateFactory.getInstance("X.509");
-        } catch (CertificateException e) {
-            throw new InvalidAlgorithmParameterException(
-                "unable to create CertificateFactory for X.509");
-        }
-        if (LIFETIME == 0) {
-            valueCache = Cache.newNullCache();
-        } else if (LIFETIME < 0) {
-            valueCache = Cache.newSoftMemoryCache(DEFAULT_CACHE_SIZE);
-        } else {
-            valueCache = Cache.newSoftMemoryCache(DEFAULT_CACHE_SIZE, LIFETIME);
-        }
-    }
-
-    /**
-     * Returns an LDAP CertStore. This method consults a cache of
-     * CertStores (shared per JVM) using the LDAP server/port as a key.
-     */
-    private static final Cache certStoreCache = Cache.newSoftMemoryCache(185);
-    static synchronized CertStore getInstance(LDAPCertStoreParameters params)
-        throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
-        CertStore lcs = (CertStore) certStoreCache.get(params);
-        if (lcs == null) {
-            lcs = CertStore.getInstance("LDAP", params);
-            certStoreCache.put(params, lcs);
-        } else {
-            if (debug != null) {
-                debug.println("LDAPCertStore.getInstance: cache hit");
-            }
-        }
-        return lcs;
-    }
-
-    /**
-     * Create InitialDirContext.
-     *
-     * @param server Server DNS name hosting LDAP service
-     * @param port   Port at which server listens for requests
-     * @throws InvalidAlgorithmParameterException if creation fails
-     */
-    private void createInitialDirContext(String server, int port)
-            throws InvalidAlgorithmParameterException {
-        String url = "ldap://" + server + ":" + port;
-        Hashtable<String,Object> env = new Hashtable<String,Object>();
-        env.put(Context.INITIAL_CONTEXT_FACTORY,
-                "com.sun.jndi.ldap.LdapCtxFactory");
-        env.put(Context.PROVIDER_URL, url);
-        try {
-            ctx = new InitialDirContext(env);
-            /*
-             * By default, follow referrals unless application has
-             * overridden property in an application resource file.
-             */
-            Hashtable<?,?> currentEnv = ctx.getEnvironment();
-            if (currentEnv.get(Context.REFERRAL) == null) {
-                ctx.addToEnvironment(Context.REFERRAL, "follow");
-            }
-        } catch (NamingException e) {
-            if (debug != null) {
-                debug.println("LDAPCertStore.engineInit about to throw "
-                    + "InvalidAlgorithmParameterException");
-                e.printStackTrace();
-            }
-            Exception ee = new InvalidAlgorithmParameterException
-                ("unable to create InitialDirContext using supplied parameters");
-            ee.initCause(e);
-            throw (InvalidAlgorithmParameterException)ee;
-        }
-    }
-
-    /**
-     * Private class encapsulating the actual LDAP operations and cache
-     * handling. Use:
-     *
-     *   LDAPRequest request = new LDAPRequest(dn);
-     *   request.addRequestedAttribute(CROSS_CERT);
-     *   request.addRequestedAttribute(CA_CERT);
-     *   byte[][] crossValues = request.getValues(CROSS_CERT);
-     *   byte[][] caValues = request.getValues(CA_CERT);
-     *
-     * At most one LDAP request is sent for each instance created. If all
-     * getValues() calls can be satisfied from the cache, no request
-     * is sent at all. If a request is sent, all requested attributes
-     * are always added to the cache irrespective of whether the getValues()
-     * method is called.
-     */
-    private class LDAPRequest {
-
-        private final String name;
-        private Map<String, byte[][]> valueMap;
-        private final List<String> requestedAttributes;
-
-        LDAPRequest(String name) {
-            this.name = name;
-            requestedAttributes = new ArrayList<String>(5);
-        }
-
-        String getName() {
-            return name;
-        }
-
-        void addRequestedAttribute(String attrId) {
-            if (valueMap != null) {
-                throw new IllegalStateException("Request already sent");
-            }
-            requestedAttributes.add(attrId);
-        }
-
-        /**
-         * Gets one or more binary values from an attribute.
-         *
-         * @param name          the location holding the attribute
-         * @param attrId                the attribute identifier
-         * @return                      an array of binary values (byte arrays)
-         * @throws NamingException      if a naming exception occurs
-         */
-        byte[][] getValues(String attrId) throws NamingException {
-            if (DEBUG && ((cacheHits + cacheMisses) % 50 == 0)) {
-                System.out.println("Cache hits: " + cacheHits + "; misses: "
-                        + cacheMisses);
-            }
-            String cacheKey = name + "|" + attrId;
-            byte[][] values = (byte[][])valueCache.get(cacheKey);
-            if (values != null) {
-                cacheHits++;
-                return values;
-            }
-            cacheMisses++;
-            Map<String, byte[][]> attrs = getValueMap();
-            values = attrs.get(attrId);
-            return values;
-        }
-
-        /**
-         * Get a map containing the values for this request. The first time
-         * this method is called on an object, the LDAP request is sent,
-         * the results parsed and added to a private map and also to the
-         * cache of this LDAPCertStore. Subsequent calls return the private
-         * map immediately.
-         *
-         * The map contains an entry for each requested attribute. The
-         * attribute name is the key, values are byte[][]. If there are no
-         * values for that attribute, values are byte[0][].
-         *
-         * @return                      the value Map
-         * @throws NamingException      if a naming exception occurs
-         */
-        private Map<String, byte[][]> getValueMap() throws NamingException {
-            if (valueMap != null) {
-                return valueMap;
-            }
-            if (DEBUG) {
-                System.out.println("Request: " + name + ":" + requestedAttributes);
-                requests++;
-                if (requests % 5 == 0) {
-                    System.out.println("LDAP requests: " + requests);
-                }
-            }
-            valueMap = new HashMap<String, byte[][]>(8);
-            String[] attrIds = requestedAttributes.toArray(STRING0);
-            Attributes attrs;
-            try {
-                attrs = ctx.getAttributes(name, attrIds);
-            } catch (NameNotFoundException e) {
-                // name does not exist on this LDAP server
-                // treat same as not attributes found
-                attrs = EMPTY_ATTRIBUTES;
-            }
-            for (String attrId : requestedAttributes) {
-                Attribute attr = attrs.get(attrId);
-                byte[][] values = getAttributeValues(attr);
-                cacheAttribute(attrId, values);
-                valueMap.put(attrId, values);
-            }
-            return valueMap;
-        }
-
-        /**
-         * Add the values to the cache.
-         */
-        private void cacheAttribute(String attrId, byte[][] values) {
-            String cacheKey = name + "|" + attrId;
-            valueCache.put(cacheKey, values);
-        }
-
-        /**
-         * Get the values for the given attribute. If the attribute is null
-         * or does not contain any values, a zero length byte array is
-         * returned. NOTE that it is assumed that all values are byte arrays.
-         */
-        private byte[][] getAttributeValues(Attribute attr)
-                throws NamingException {
-            byte[][] values;
-            if (attr == null) {
-                values = BB0;
-            } else {
-                values = new byte[attr.size()][];
-                int i = 0;
-                NamingEnumeration<?> enum_ = attr.getAll();
-                while (enum_.hasMore()) {
-                    Object obj = enum_.next();
-                    if (debug != null) {
-                        if (obj instanceof String) {
-                            debug.println("LDAPCertStore.getAttrValues() "
-                                + "enum.next is a string!: " + obj);
-                        }
-                    }
-                    byte[] value = (byte[])obj;
-                    values[i++] = value;
-                }
-            }
-            return values;
-        }
-
-    }
-
-    /*
-     * Gets certificates from an attribute id and location in the LDAP
-     * directory. Returns a Collection containing only the Certificates that
-     * match the specified CertSelector.
-     *
-     * @param name the location holding the attribute
-     * @param id the attribute identifier
-     * @param sel a CertSelector that the Certificates must match
-     * @return a Collection of Certificates found
-     * @throws CertStoreException       if an exception occurs
-     */
-    private Collection<X509Certificate> getCertificates(LDAPRequest request,
-        String id, X509CertSelector sel) throws CertStoreException {
-
-        /* fetch encoded certs from storage */
-        byte[][] encodedCert;
-        try {
-            encodedCert = request.getValues(id);
-        } catch (NamingException namingEx) {
-            throw new CertStoreException(namingEx);
-        }
-
-        int n = encodedCert.length;
-        if (n == 0) {
-            return Collections.<X509Certificate>emptySet();
-        }
-
-        List<X509Certificate> certs = new ArrayList<X509Certificate>(n);
-        /* decode certs and check if they satisfy selector */
-        for (int i = 0; i < n; i++) {
-            ByteArrayInputStream bais = new ByteArrayInputStream(encodedCert[i]);
-            try {
-                Certificate cert = cf.generateCertificate(bais);
-                if (sel.match(cert)) {
-                  certs.add((X509Certificate)cert);
-                }
-            } catch (CertificateException e) {
-                if (debug != null) {
-                    debug.println("LDAPCertStore.getCertificates() encountered "
-                        + "exception while parsing cert, skipping the bad data: ");
-                    HexDumpEncoder encoder = new HexDumpEncoder();
-                    debug.println(
-                        "[ " + encoder.encodeBuffer(encodedCert[i]) + " ]");
-                }
-            }
-        }
-
-        return certs;
-    }
-
-    /*
-     * Gets certificate pairs from an attribute id and location in the LDAP
-     * directory.
-     *
-     * @param name the location holding the attribute
-     * @param id the attribute identifier
-     * @return a Collection of X509CertificatePairs found
-     * @throws CertStoreException       if an exception occurs
-     */
-    private Collection<X509CertificatePair> getCertPairs(
-        LDAPRequest request, String id) throws CertStoreException {
-
-        /* fetch the encoded cert pairs from storage */
-        byte[][] encodedCertPair;
-        try {
-            encodedCertPair = request.getValues(id);
-        } catch (NamingException namingEx) {
-            throw new CertStoreException(namingEx);
-        }
-
-        int n = encodedCertPair.length;
-        if (n == 0) {
-            return Collections.<X509CertificatePair>emptySet();
-        }
-
-        List<X509CertificatePair> certPairs =
-                                new ArrayList<X509CertificatePair>(n);
-        /* decode each cert pair and add it to the Collection */
-        for (int i = 0; i < n; i++) {
-            try {
-                X509CertificatePair certPair =
-                    X509CertificatePair.generateCertificatePair(encodedCertPair[i]);
-                certPairs.add(certPair);
-            } catch (CertificateException e) {
-                if (debug != null) {
-                    debug.println(
-                        "LDAPCertStore.getCertPairs() encountered exception "
-                        + "while parsing cert, skipping the bad data: ");
-                    HexDumpEncoder encoder = new HexDumpEncoder();
-                    debug.println(
-                        "[ " + encoder.encodeBuffer(encodedCertPair[i]) + " ]");
-                }
-            }
-        }
-
-        return certPairs;
-    }
-
-    /*
-     * Looks at certificate pairs stored in the crossCertificatePair attribute
-     * at the specified location in the LDAP directory. Returns a Collection
-     * containing all Certificates stored in the forward component that match
-     * the forward CertSelector and all Certificates stored in the reverse
-     * component that match the reverse CertSelector.
-     * <p>
-     * If either forward or reverse is null, all certificates from the
-     * corresponding component will be rejected.
-     *
-     * @param name the location to look in
-     * @param forward the forward CertSelector (or null)
-     * @param reverse the reverse CertSelector (or null)
-     * @return a Collection of Certificates found
-     * @throws CertStoreException       if an exception occurs
-     */
-    private Collection<X509Certificate> getMatchingCrossCerts(
-            LDAPRequest request, X509CertSelector forward,
-            X509CertSelector reverse)
-            throws CertStoreException {
-        // Get the cert pairs
-        Collection<X509CertificatePair> certPairs =
-                                getCertPairs(request, CROSS_CERT);
-
-        // Find Certificates that match and put them in a list
-        ArrayList<X509Certificate> matchingCerts =
-                                        new ArrayList<X509Certificate>();
-        for (X509CertificatePair certPair : certPairs) {
-            X509Certificate cert;
-            if (forward != null) {
-                cert = certPair.getForward();
-                if ((cert != null) && forward.match(cert)) {
-                    matchingCerts.add(cert);
-                }
-            }
-            if (reverse != null) {
-                cert = certPair.getReverse();
-                if ((cert != null) && reverse.match(cert)) {
-                    matchingCerts.add(cert);
-                }
-            }
-        }
-        return matchingCerts;
-    }
-
-    /**
-     * Returns a <code>Collection</code> of <code>Certificate</code>s that
-     * match the specified selector. If no <code>Certificate</code>s
-     * match the selector, an empty <code>Collection</code> will be returned.
-     * <p>
-     * It is not practical to search every entry in the LDAP database for
-     * matching <code>Certificate</code>s. Instead, the <code>CertSelector</code>
-     * is examined in order to determine where matching <code>Certificate</code>s
-     * are likely to be found (according to the PKIX LDAPv2 schema, RFC 2587).
-     * If the subject is specified, its directory entry is searched. If the
-     * issuer is specified, its directory entry is searched. If neither the
-     * subject nor the issuer are specified (or the selector is not an
-     * <code>X509CertSelector</code>), a <code>CertStoreException</code> is
-     * thrown.
-     *
-     * @param selector a <code>CertSelector</code> used to select which
-     *  <code>Certificate</code>s should be returned.
-     * @return a <code>Collection</code> of <code>Certificate</code>s that
-     *         match the specified selector
-     * @throws CertStoreException if an exception occurs
-     */
-    public synchronized Collection<X509Certificate> engineGetCertificates
-            (CertSelector selector) throws CertStoreException {
-        if (debug != null) {
-            debug.println("LDAPCertStore.engineGetCertificates() selector: "
-                + String.valueOf(selector));
-        }
-
-        if (selector == null) {
-            selector = new X509CertSelector();
-        }
-        if (!(selector instanceof X509CertSelector)) {
-            throw new CertStoreException("LDAPCertStore needs an X509CertSelector " +
-                                         "to find certs");
-        }
-        X509CertSelector xsel = (X509CertSelector) selector;
-        int basicConstraints = xsel.getBasicConstraints();
-        String subject = xsel.getSubjectAsString();
-        String issuer = xsel.getIssuerAsString();
-        HashSet<X509Certificate> certs = new HashSet<X509Certificate>();
-        if (debug != null) {
-            debug.println("LDAPCertStore.engineGetCertificates() basicConstraints: "
-                + basicConstraints);
-        }
-
-        // basicConstraints:
-        // -2: only EE certs accepted
-        // -1: no check is done
-        //  0: any CA certificate accepted
-        // >1: certificate's basicConstraints extension pathlen must match
-        if (subject != null) {
-            if (debug != null) {
-                debug.println("LDAPCertStore.engineGetCertificates() "
-                    + "subject is not null");
-            }
-            LDAPRequest request = new LDAPRequest(subject);
-            if (basicConstraints > -2) {
-                request.addRequestedAttribute(CROSS_CERT);
-                request.addRequestedAttribute(CA_CERT);
-                request.addRequestedAttribute(ARL);
-                if (prefetchCRLs) {
-                    request.addRequestedAttribute(CRL);
-                }
-            }
-            if (basicConstraints < 0) {
-                request.addRequestedAttribute(USER_CERT);
-            }
-
-            if (basicConstraints > -2) {
-                certs.addAll(getMatchingCrossCerts(request, xsel, null));
-                if (debug != null) {
-                    debug.println("LDAPCertStore.engineGetCertificates() after "
-                        + "getMatchingCrossCerts(subject,xsel,null),certs.size(): "
-                        + certs.size());
-                }
-                certs.addAll(getCertificates(request, CA_CERT, xsel));
-                if (debug != null) {
-                    debug.println("LDAPCertStore.engineGetCertificates() after "
-                        + "getCertificates(subject,CA_CERT,xsel),certs.size(): "
-                        + certs.size());
-                }
-            }
-            if (basicConstraints < 0) {
-                certs.addAll(getCertificates(request, USER_CERT, xsel));
-                if (debug != null) {
-                    debug.println("LDAPCertStore.engineGetCertificates() after "
-                        + "getCertificates(subject,USER_CERT, xsel),certs.size(): "
-                        + certs.size());
-                }
-            }
-        } else {
-            if (debug != null) {
-                debug.println
-                    ("LDAPCertStore.engineGetCertificates() subject is null");
-            }
-            if (basicConstraints == -2) {
-                throw new CertStoreException("need subject to find EE certs");
-            }
-            if (issuer == null) {
-                throw new CertStoreException("need subject or issuer to find certs");
-            }
-        }
-        if (debug != null) {
-            debug.println("LDAPCertStore.engineGetCertificates() about to "
-                + "getMatchingCrossCerts...");
-        }
-        if ((issuer != null) && (basicConstraints > -2)) {
-            LDAPRequest request = new LDAPRequest(issuer);
-            request.addRequestedAttribute(CROSS_CERT);
-            request.addRequestedAttribute(CA_CERT);
-            request.addRequestedAttribute(ARL);
-            if (prefetchCRLs) {
-                request.addRequestedAttribute(CRL);
-            }
-
-            certs.addAll(getMatchingCrossCerts(request, null, xsel));
-            if (debug != null) {
-                debug.println("LDAPCertStore.engineGetCertificates() after "
-                    + "getMatchingCrossCerts(issuer,null,xsel),certs.size(): "
-                    + certs.size());
-            }
-            certs.addAll(getCertificates(request, CA_CERT, xsel));
-            if (debug != null) {
-                debug.println("LDAPCertStore.engineGetCertificates() after "
-                    + "getCertificates(issuer,CA_CERT,xsel),certs.size(): "
-                    + certs.size());
-            }
-        }
-        if (debug != null) {
-            debug.println("LDAPCertStore.engineGetCertificates() returning certs");
-        }
-        return certs;
-    }
-
-    /*
-     * Gets CRLs from an attribute id and location in the LDAP directory.
-     * Returns a Collection containing only the CRLs that match the
-     * specified CRLSelector.
-     *
-     * @param name the location holding the attribute
-     * @param id the attribute identifier
-     * @param sel a CRLSelector that the CRLs must match
-     * @return a Collection of CRLs found
-     * @throws CertStoreException       if an exception occurs
-     */
-    private Collection<X509CRL> getCRLs(LDAPRequest request, String id,
-            X509CRLSelector sel) throws CertStoreException {
-
-        /* fetch the encoded crls from storage */
-        byte[][] encodedCRL;
-        try {
-            encodedCRL = request.getValues(id);
-        } catch (NamingException namingEx) {
-            throw new CertStoreException(namingEx);
-        }
-
-        int n = encodedCRL.length;
-        if (n == 0) {
-            return Collections.<X509CRL>emptySet();
-        }
-
-        List<X509CRL> crls = new ArrayList<X509CRL>(n);
-        /* decode each crl and check if it matches selector */
-        for (int i = 0; i < n; i++) {
-            try {
-                CRL crl = cf.generateCRL(new ByteArrayInputStream(encodedCRL[i]));
-                if (sel.match(crl)) {
-                    crls.add((X509CRL)crl);
-                }
-            } catch (CRLException e) {
-                if (debug != null) {
-                    debug.println("LDAPCertStore.getCRLs() encountered exception"
-                        + " while parsing CRL, skipping the bad data: ");
-                    HexDumpEncoder encoder = new HexDumpEncoder();
-                    debug.println("[ " + encoder.encodeBuffer(encodedCRL[i]) + " ]");
-                }
-            }
-        }
-
-        return crls;
-    }
-
-    /**
-     * Returns a <code>Collection</code> of <code>CRL</code>s that
-     * match the specified selector. If no <code>CRL</code>s
-     * match the selector, an empty <code>Collection</code> will be returned.
-     * <p>
-     * It is not practical to search every entry in the LDAP database for
-     * matching <code>CRL</code>s. Instead, the <code>CRLSelector</code>
-     * is examined in order to determine where matching <code>CRL</code>s
-     * are likely to be found (according to the PKIX LDAPv2 schema, RFC 2587).
-     * If issuerNames or certChecking are specified, the issuer's directory
-     * entry is searched. If neither issuerNames or certChecking are specified
-     * (or the selector is not an <code>X509CRLSelector</code>), a
-     * <code>CertStoreException</code> is thrown.
-     *
-     * @param selector A <code>CRLSelector</code> used to select which
-     *  <code>CRL</code>s should be returned. Specify <code>null</code>
-     *  to return all <code>CRL</code>s.
-     * @return A <code>Collection</code> of <code>CRL</code>s that
-     *         match the specified selector
-     * @throws CertStoreException if an exception occurs
-     */
-    public synchronized Collection<X509CRL> engineGetCRLs(CRLSelector selector)
-            throws CertStoreException {
-        if (debug != null) {
-            debug.println("LDAPCertStore.engineGetCRLs() selector: "
-                + selector);
-        }
-        // Set up selector and collection to hold CRLs
-        if (selector == null) {
-            selector = new X509CRLSelector();
-        }
-        if (!(selector instanceof X509CRLSelector)) {
-            throw new CertStoreException("need X509CRLSelector to find CRLs");
-        }
-        X509CRLSelector xsel = (X509CRLSelector) selector;
-        HashSet<X509CRL> crls = new HashSet<X509CRL>();
-
-        // Look in directory entry for issuer of cert we're checking.
-        Collection<Object> issuerNames;
-        X509Certificate certChecking = xsel.getCertificateChecking();
-        if (certChecking != null) {
-            issuerNames = new HashSet<Object>();
-            X500Principal issuer = certChecking.getIssuerX500Principal();
-            issuerNames.add(issuer.getName(X500Principal.RFC2253));
-        } else {
-            // But if we don't know which cert we're checking, try the directory
-            // entries of all acceptable CRL issuers
-            issuerNames = xsel.getIssuerNames();
-            if (issuerNames == null) {
-                throw new CertStoreException("need issuerNames or certChecking to "
-                    + "find CRLs");
-            }
-        }
-        for (Object nameObject : issuerNames) {
-            String issuerName;
-            if (nameObject instanceof byte[]) {
-                try {
-                    X500Principal issuer = new X500Principal((byte[])nameObject);
-                    issuerName = issuer.getName(X500Principal.RFC2253);
-                } catch (IllegalArgumentException e) {
-                    continue;
-                }
-            } else {
-                issuerName = (String)nameObject;
-            }
-            // If all we want is CA certs, try to get the (probably shorter) ARL
-            Collection<X509CRL> entryCRLs = Collections.<X509CRL>emptySet();
-            if (certChecking == null || certChecking.getBasicConstraints() != -1) {
-                LDAPRequest request = new LDAPRequest(issuerName);
-                request.addRequestedAttribute(CROSS_CERT);
-                request.addRequestedAttribute(CA_CERT);
-                request.addRequestedAttribute(ARL);
-                if (prefetchCRLs) {
-                    request.addRequestedAttribute(CRL);
-                }
-                try {
-                    entryCRLs = getCRLs(request, ARL, xsel);
-                    if (entryCRLs.isEmpty()) {
-                        // no ARLs found. We assume that means that there are
-                        // no ARLs on this server at all and prefetch the CRLs.
-                        prefetchCRLs = true;
-                    } else {
-                        crls.addAll(entryCRLs);
-                    }
-                } catch (CertStoreException e) {
-                    if (debug != null) {
-                        debug.println("LDAPCertStore.engineGetCRLs non-fatal error "
-                            + "retrieving ARLs:" + e);
-                        e.printStackTrace();
-                    }
-                }
-            }
-            // Otherwise, get the CRL
-            // if certChecking is null, we don't know if we should look in ARL or CRL
-            // attribute, so check both for matching CRLs.
-            if (entryCRLs.isEmpty() || certChecking == null) {
-                LDAPRequest request = new LDAPRequest(issuerName);
-                request.addRequestedAttribute(CRL);
-                entryCRLs = getCRLs(request, CRL, xsel);
-                crls.addAll(entryCRLs);
-            }
-        }
-        return crls;
-    }
-
-    // converts an LDAP URI into LDAPCertStoreParameters
-    static LDAPCertStoreParameters getParameters(URI uri) {
-        String host = uri.getHost();
-        if (host == null) {
-            return new SunLDAPCertStoreParameters();
-        } else {
-            int port = uri.getPort();
-            return (port == -1
-                    ? new SunLDAPCertStoreParameters(host)
-                    : new SunLDAPCertStoreParameters(host, port));
-        }
-    }
-
-    /*
-     * Subclass of LDAPCertStoreParameters with overridden equals/hashCode
-     * methods. This is necessary because the parameters are used as
-     * keys in the LDAPCertStore cache.
-     */
-    private static class SunLDAPCertStoreParameters
-        extends LDAPCertStoreParameters {
-
-        private volatile int hashCode = 0;
-
-        SunLDAPCertStoreParameters(String serverName, int port) {
-            super(serverName, port);
-        }
-        SunLDAPCertStoreParameters(String serverName) {
-            super(serverName);
-        }
-        SunLDAPCertStoreParameters() {
-            super();
-        }
-        public boolean equals(Object obj) {
-            if (!(obj instanceof LDAPCertStoreParameters)) {
-                return false;
-            }
-            LDAPCertStoreParameters params = (LDAPCertStoreParameters) obj;
-            return (getPort() == params.getPort() &&
-                    getServerName().equalsIgnoreCase(params.getServerName()));
-        }
-        public int hashCode() {
-            if (hashCode == 0) {
-                int result = 17;
-                result = 37*result + getPort();
-                result = 37*result + getServerName().toLowerCase().hashCode();
-                hashCode = result;
-            }
-            return hashCode;
-        }
-    }
-
-    /*
-     * This inner class wraps an existing X509CertSelector and adds
-     * additional criteria to match on when the certificate's subject is
-     * different than the LDAP Distinguished Name entry. The LDAPCertStore
-     * implementation uses the subject DN as the directory entry for
-     * looking up certificates. This can be problematic if the certificates
-     * that you want to fetch have a different subject DN than the entry
-     * where they are stored. You could set the selector's subject to the
-     * LDAP DN entry, but then the resulting match would fail to find the
-     * desired certificates because the subject DNs would not match. This
-     * class avoids that problem by introducing a certSubject which should
-     * be set to the certificate's subject DN when it is different than
-     * the LDAP DN.
-     */
-    static class LDAPCertSelector extends X509CertSelector {
-
-        private X500Principal certSubject;
-        private X509CertSelector selector;
-        private X500Principal subject;
-
-        /**
-         * Creates an LDAPCertSelector.
-         *
-         * @param selector the X509CertSelector to wrap
-         * @param certSubject the subject DN of the certificate that you want
-         *      to retrieve via LDAP
-         * @param ldapDN the LDAP DN where the certificate is stored
-         */
-        LDAPCertSelector(X509CertSelector selector, X500Principal certSubject,
-            String ldapDN) throws IOException {
-            this.selector = selector == null ? new X509CertSelector() : selector;
-            this.certSubject = certSubject;
-            this.subject = new X500Name(ldapDN).asX500Principal();
-        }
-
-        // we only override the get (accessor methods) since the set methods
-        // will not be invoked by the code that uses this LDAPCertSelector.
-        public X509Certificate getCertificate() {
-            return selector.getCertificate();
-        }
-        public BigInteger getSerialNumber() {
-            return selector.getSerialNumber();
-        }
-        public X500Principal getIssuer() {
-            return selector.getIssuer();
-        }
-        public String getIssuerAsString() {
-            return selector.getIssuerAsString();
-        }
-        public byte[] getIssuerAsBytes() throws IOException {
-            return selector.getIssuerAsBytes();
-        }
-        public X500Principal getSubject() {
-            // return the ldap DN
-            return subject;
-        }
-        public String getSubjectAsString() {
-            // return the ldap DN
-            return subject.getName();
-        }
-        public byte[] getSubjectAsBytes() throws IOException {
-            // return the encoded ldap DN
-            return subject.getEncoded();
-        }
-        public byte[] getSubjectKeyIdentifier() {
-            return selector.getSubjectKeyIdentifier();
-        }
-        public byte[] getAuthorityKeyIdentifier() {
-            return selector.getAuthorityKeyIdentifier();
-        }
-        public Date getCertificateValid() {
-            return selector.getCertificateValid();
-        }
-        public Date getPrivateKeyValid() {
-            return selector.getPrivateKeyValid();
-        }
-        public String getSubjectPublicKeyAlgID() {
-            return selector.getSubjectPublicKeyAlgID();
-        }
-        public PublicKey getSubjectPublicKey() {
-            return selector.getSubjectPublicKey();
-        }
-        public boolean[] getKeyUsage() {
-            return selector.getKeyUsage();
-        }
-        public Set<String> getExtendedKeyUsage() {
-            return selector.getExtendedKeyUsage();
-        }
-        public boolean getMatchAllSubjectAltNames() {
-            return selector.getMatchAllSubjectAltNames();
-        }
-        public Collection<List<?>> getSubjectAlternativeNames() {
-            return selector.getSubjectAlternativeNames();
-        }
-        public byte[] getNameConstraints() {
-            return selector.getNameConstraints();
-        }
-        public int getBasicConstraints() {
-            return selector.getBasicConstraints();
-        }
-        public Set<String> getPolicy() {
-            return selector.getPolicy();
-        }
-        public Collection<List<?>> getPathToNames() {
-            return selector.getPathToNames();
-        }
-
-        public boolean match(Certificate cert) {
-            // temporarily set the subject criterion to the certSubject
-            // so that match will not reject the desired certificates
-            selector.setSubject(certSubject);
-            boolean match = selector.match(cert);
-            selector.setSubject(subject);
-            return match;
-        }
-    }
-
-    /**
-     * This class has the same purpose as LDAPCertSelector except it is for
-     * X.509 CRLs.
-     */
-    static class LDAPCRLSelector extends X509CRLSelector {
-
-        private X509CRLSelector selector;
-        private Collection<X500Principal> certIssuers;
-        private Collection<X500Principal> issuers;
-        private HashSet<Object> issuerNames;
-
-        /**
-         * Creates an LDAPCRLSelector.
-         *
-         * @param selector the X509CRLSelector to wrap
-         * @param certIssuers the issuer DNs of the CRLs that you want
-         *      to retrieve via LDAP
-         * @param ldapDN the LDAP DN where the CRL is stored
-         */
-        LDAPCRLSelector(X509CRLSelector selector,
-            Collection<X500Principal> certIssuers, String ldapDN)
-            throws IOException {
-            this.selector = selector == null ? new X509CRLSelector() : selector;
-            this.certIssuers = certIssuers;
-            issuerNames = new HashSet<Object>();
-            issuerNames.add(ldapDN);
-            issuers = new HashSet<X500Principal>();
-            issuers.add(new X500Name(ldapDN).asX500Principal());
-        }
-        // we only override the get (accessor methods) since the set methods
-        // will not be invoked by the code that uses this LDAPCRLSelector.
-        public Collection<X500Principal> getIssuers() {
-            // return the ldap DN
-            return Collections.unmodifiableCollection(issuers);
-        }
-        public Collection<Object> getIssuerNames() {
-            // return the ldap DN
-            return Collections.unmodifiableCollection(issuerNames);
-        }
-        public BigInteger getMinCRL() {
-            return selector.getMinCRL();
-        }
-        public BigInteger getMaxCRL() {
-            return selector.getMaxCRL();
-        }
-        public Date getDateAndTime() {
-            return selector.getDateAndTime();
-        }
-        public X509Certificate getCertificateChecking() {
-            return selector.getCertificateChecking();
-        }
-        public boolean match(CRL crl) {
-            // temporarily set the issuer criterion to the certIssuers
-            // so that match will not reject the desired CRL
-            selector.setIssuers(certIssuers);
-            boolean match = selector.match(crl);
-            selector.setIssuers(issuers);
-            return match;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/provider/certpath/ldap/LDAPCertStoreHelper.java b/ojluni/src/main/java/sun/security/provider/certpath/ldap/LDAPCertStoreHelper.java
deleted file mode 100755
index 7eb65d5..0000000
--- a/ojluni/src/main/java/sun/security/provider/certpath/ldap/LDAPCertStoreHelper.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-
-package sun.security.provider.certpath.ldap;
-
-import java.net.URI;
-import java.util.Collection;
-import java.security.NoSuchAlgorithmException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.cert.CertStore;
-import java.security.cert.X509CertSelector;
-import java.security.cert.X509CRLSelector;
-import javax.security.auth.x500.X500Principal;
-import java.io.IOException;
-
-import sun.security.provider.certpath.CertStoreHelper;
-
-/**
- * LDAP implementation of CertStoreHelper.
- */
-
-public class LDAPCertStoreHelper
-    implements CertStoreHelper
-{
-    public LDAPCertStoreHelper() { }
-
-    @Override
-    public CertStore getCertStore(URI uri)
-        throws NoSuchAlgorithmException, InvalidAlgorithmParameterException
-    {
-        return LDAPCertStore.getInstance(LDAPCertStore.getParameters(uri));
-    }
-
-    @Override
-    public X509CertSelector wrap(X509CertSelector selector,
-                                 X500Principal certSubject,
-                                 String ldapDN)
-        throws IOException
-    {
-        return new LDAPCertStore.LDAPCertSelector(selector, certSubject, ldapDN);
-    }
-
-    @Override
-    public X509CRLSelector wrap(X509CRLSelector selector,
-                                Collection<X500Principal> certIssuers,
-                                String ldapDN)
-        throws IOException
-    {
-        return new LDAPCertStore.LDAPCRLSelector(selector, certIssuers, ldapDN);
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/rsa/RSACore.java b/ojluni/src/main/java/sun/security/rsa/RSACore.java
deleted file mode 100755
index c34f6a4..0000000
--- a/ojluni/src/main/java/sun/security/rsa/RSACore.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * Copyright (c) 2003, 2011, 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.
- */
-
-package sun.security.rsa;
-
-import java.math.BigInteger;
-import java.util.*;
-
-import java.security.SecureRandom;
-import java.security.interfaces.*;
-
-import javax.crypto.BadPaddingException;
-
-import sun.security.jca.JCAUtil;
-
-/**
- * Core of the RSA implementation. Has code to perform public and private key
- * RSA operations (with and without CRT for private key ops). Private CRT ops
- * also support blinding to twart timing attacks.
- *
- * The code in this class only does the core RSA operation. Padding and
- * unpadding must be done externally.
- *
- * Note: RSA keys should be at least 512 bits long
- *
- * @since   1.5
- * @author  Andreas Sterbenz
- */
-public final class RSACore {
-
-    private RSACore() {
-        // empty
-    }
-
-    /**
-     * Return the number of bytes required to store the magnitude byte[] of
-     * this BigInteger. Do not count a 0x00 byte toByteArray() would
-     * prefix for 2's complement form.
-     */
-    public static int getByteLength(BigInteger b) {
-        int n = b.bitLength();
-        return (n + 7) >> 3;
-    }
-
-    /**
-     * Return the number of bytes required to store the modulus of this
-     * RSA key.
-     */
-    public static int getByteLength(RSAKey key) {
-        return getByteLength(key.getModulus());
-    }
-
-    // temporary, used by RSACipher and RSAPadding. Move this somewhere else
-    public static byte[] convert(byte[] b, int ofs, int len) {
-        if ((ofs == 0) && (len == b.length)) {
-            return b;
-        } else {
-            byte[] t = new byte[len];
-            System.arraycopy(b, ofs, t, 0, len);
-            return t;
-        }
-    }
-
-    /**
-     * Perform an RSA public key operation.
-     */
-    public static byte[] rsa(byte[] msg, RSAPublicKey key)
-            throws BadPaddingException {
-        return crypt(msg, key.getModulus(), key.getPublicExponent());
-    }
-
-    /**
-     * Perform an RSA private key operation. Uses CRT if the key is a
-     * CRT key.
-     */
-    public static byte[] rsa(byte[] msg, RSAPrivateKey key)
-            throws BadPaddingException {
-        if (key instanceof RSAPrivateCrtKey) {
-            return crtCrypt(msg, (RSAPrivateCrtKey)key);
-        } else {
-            return crypt(msg, key.getModulus(), key.getPrivateExponent());
-        }
-    }
-
-    /**
-     * RSA public key ops and non-CRT private key ops. Simple modPow().
-     */
-    private static byte[] crypt(byte[] msg, BigInteger n, BigInteger exp)
-            throws BadPaddingException {
-        BigInteger m = parseMsg(msg, n);
-        BigInteger c = m.modPow(exp, n);
-        return toByteArray(c, getByteLength(n));
-    }
-
-    /**
-     * RSA private key operations with CRT. Algorithm and variable naming
-     * are taken from PKCS#1 v2.1, section 5.1.2.
-     *
-     * The only difference is the addition of blinding to twart timing attacks.
-     * This is described in the RSA Bulletin#2 (Jan 96) among other places.
-     * This means instead of implementing RSA as
-     *   m = c ^ d mod n (or RSA in CRT variant)
-     * we do
-     *   r  = random(0, n-1)
-     *   c' = c  * r^e  mod n
-     *   m' = c' ^ d    mod n (or RSA in CRT variant)
-     *   m  = m' * r^-1 mod n (where r^-1 is the modular inverse of r mod n)
-     * This works because r^(e*d) * r^-1 = r * r^-1 = 1 (all mod n)
-     *
-     * We do not generate new blinding parameters for each operation but reuse
-     * them BLINDING_MAX_REUSE times (see definition below).
-     */
-    private static byte[] crtCrypt(byte[] msg, RSAPrivateCrtKey key)
-            throws BadPaddingException {
-        BigInteger n = key.getModulus();
-        BigInteger c = parseMsg(msg, n);
-        BigInteger p = key.getPrimeP();
-        BigInteger q = key.getPrimeQ();
-        BigInteger dP = key.getPrimeExponentP();
-        BigInteger dQ = key.getPrimeExponentQ();
-        BigInteger qInv = key.getCrtCoefficient();
-
-        BlindingParameters params;
-        if (ENABLE_BLINDING) {
-            params = getBlindingParameters(key);
-            c = c.multiply(params.re).mod(n);
-        } else {
-            params = null;
-        }
-
-        // m1 = c ^ dP mod p
-        BigInteger m1 = c.modPow(dP, p);
-        // m2 = c ^ dQ mod q
-        BigInteger m2 = c.modPow(dQ, q);
-
-        // h = (m1 - m2) * qInv mod p
-        BigInteger mtmp = m1.subtract(m2);
-        if (mtmp.signum() < 0) {
-            mtmp = mtmp.add(p);
-        }
-        BigInteger h = mtmp.multiply(qInv).mod(p);
-
-        // m = m2 + q * h
-        BigInteger m = h.multiply(q).add(m2);
-
-        if (params != null) {
-            m = m.multiply(params.rInv).mod(n);
-        }
-
-        return toByteArray(m, getByteLength(n));
-    }
-
-    /**
-     * Parse the msg into a BigInteger and check against the modulus n.
-     */
-    private static BigInteger parseMsg(byte[] msg, BigInteger n)
-            throws BadPaddingException {
-        BigInteger m = new BigInteger(1, msg);
-        if (m.compareTo(n) >= 0) {
-            throw new BadPaddingException("Message is larger than modulus");
-        }
-        return m;
-    }
-
-    /**
-     * Return the encoding of this BigInteger that is exactly len bytes long.
-     * Prefix/strip off leading 0x00 bytes if necessary.
-     * Precondition: bi must fit into len bytes
-     */
-    private static byte[] toByteArray(BigInteger bi, int len) {
-        byte[] b = bi.toByteArray();
-        int n = b.length;
-        if (n == len) {
-            return b;
-        }
-        // BigInteger prefixed a 0x00 byte for 2's complement form, remove it
-        if ((n == len + 1) && (b[0] == 0)) {
-            byte[] t = new byte[len];
-            System.arraycopy(b, 1, t, 0, len);
-            return t;
-        }
-        // must be smaller
-        assert (n < len);
-        byte[] t = new byte[len];
-        System.arraycopy(b, 0, t, (len - n), n);
-        return t;
-    }
-
-    // globally enable/disable use of blinding
-    private final static boolean ENABLE_BLINDING = true;
-
-    // maximum number of times that we will use a set of blinding parameters
-    // value suggested by Paul Kocher (quoted by NSS)
-    private final static int BLINDING_MAX_REUSE = 50;
-
-    // cache for blinding parameters. Map<BigInteger, BlindingParameters>
-    // use a weak hashmap so that cached values are automatically cleared
-    // when the modulus is GC'ed
-    private final static Map<BigInteger, BlindingParameters> blindingCache =
-                new WeakHashMap<>();
-
-    /**
-     * Set of blinding parameters for a given RSA key.
-     *
-     * The RSA modulus is usually unique, so we index by modulus in
-     * blindingCache. However, to protect against the unlikely case of two
-     * keys sharing the same modulus, we also store the public exponent.
-     * This means we cannot cache blinding parameters for multiple keys that
-     * share the same modulus, but since sharing moduli is fundamentally broken
-     * an insecure, this does not matter.
-     */
-    private static final class BlindingParameters {
-        // e (RSA public exponent)
-        final BigInteger e;
-        // r ^ e mod n
-        final BigInteger re;
-        // inverse of r mod n
-        final BigInteger rInv;
-        // how many more times this parameter object can be used
-        private volatile int remainingUses;
-        BlindingParameters(BigInteger e, BigInteger re, BigInteger rInv) {
-            this.e = e;
-            this.re = re;
-            this.rInv = rInv;
-            // initialize remaining uses, subtract current use now
-            remainingUses = BLINDING_MAX_REUSE - 1;
-        }
-        boolean valid(BigInteger e) {
-            int k = remainingUses--;
-            return (k > 0) && this.e.equals(e);
-        }
-    }
-
-    /**
-     * Return valid RSA blinding parameters for the given private key.
-     * Use cached parameters if available. If not, generate new parameters
-     * and cache.
-     */
-    private static BlindingParameters getBlindingParameters
-            (RSAPrivateCrtKey key) {
-        BigInteger modulus = key.getModulus();
-        BigInteger e = key.getPublicExponent();
-        BlindingParameters params;
-        // we release the lock between get() and put()
-        // that means threads might concurrently generate new blinding
-        // parameters for the same modulus. this is only a slight waste
-        // of cycles and seems preferable in terms of scalability
-        // to locking out all threads while generating new parameters
-        synchronized (blindingCache) {
-            params = blindingCache.get(modulus);
-        }
-        if ((params != null) && params.valid(e)) {
-            return params;
-        }
-        int len = modulus.bitLength();
-        SecureRandom random = JCAUtil.getSecureRandom();
-        BigInteger r = new BigInteger(len, random).mod(modulus);
-        BigInteger re = r.modPow(e, modulus);
-        BigInteger rInv = r.modInverse(modulus);
-        params = new BlindingParameters(e, re, rInv);
-        synchronized (blindingCache) {
-            blindingCache.put(modulus, params);
-        }
-        return params;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/rsa/RSAKeyFactory.java b/ojluni/src/main/java/sun/security/rsa/RSAKeyFactory.java
deleted file mode 100755
index 42001f2..0000000
--- a/ojluni/src/main/java/sun/security/rsa/RSAKeyFactory.java
+++ /dev/null
@@ -1,401 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package sun.security.rsa;
-
-import java.math.BigInteger;
-
-import java.security.*;
-import java.security.interfaces.*;
-import java.security.spec.*;
-
-import sun.security.action.GetPropertyAction;
-
-/**
- * KeyFactory for RSA keys. Keys must be instances of PublicKey or PrivateKey
- * and getAlgorithm() must return "RSA". For such keys, it supports conversion
- * between the following:
- *
- * For public keys:
- *  . PublicKey with an X.509 encoding
- *  . RSAPublicKey
- *  . RSAPublicKeySpec
- *  . X509EncodedKeySpec
- *
- * For private keys:
- *  . PrivateKey with a PKCS#8 encoding
- *  . RSAPrivateKey
- *  . RSAPrivateCrtKey
- *  . RSAPrivateKeySpec
- *  . RSAPrivateCrtKeySpec
- *  . PKCS8EncodedKeySpec
- * (of course, CRT variants only for CRT keys)
- *
- * Note: as always, RSA keys should be at least 512 bits long
- *
- * @since   1.5
- * @author  Andreas Sterbenz
- */
-public final class RSAKeyFactory extends KeyFactorySpi {
-
-    private final static Class<?> rsaPublicKeySpecClass =
-                                                RSAPublicKeySpec.class;
-    private final static Class<?> rsaPrivateKeySpecClass =
-                                                RSAPrivateKeySpec.class;
-    private final static Class<?> rsaPrivateCrtKeySpecClass =
-                                                RSAPrivateCrtKeySpec.class;
-
-    private final static Class<?> x509KeySpecClass  = X509EncodedKeySpec.class;
-    private final static Class<?> pkcs8KeySpecClass = PKCS8EncodedKeySpec.class;
-
-    public final static int MIN_MODLEN = 512;
-    public final static int MAX_MODLEN = 16384;
-
-    /*
-     * If the modulus length is above this value, restrict the size of
-     * the exponent to something that can be reasonably computed.  We
-     * could simply hardcode the exp len to something like 64 bits, but
-     * this approach allows flexibility in case impls would like to use
-     * larger module and exponent values.
-     */
-    public final static int MAX_MODLEN_RESTRICT_EXP = 3072;
-    public final static int MAX_RESTRICTED_EXPLEN = 64;
-
-    private static final boolean restrictExpLen =
-        "true".equalsIgnoreCase(AccessController.doPrivileged(
-            new GetPropertyAction(
-                "sun.security.rsa.restrictRSAExponent", "true")));
-
-    // instance used for static translateKey();
-    private final static RSAKeyFactory INSTANCE = new RSAKeyFactory();
-
-    public RSAKeyFactory() {
-        // empty
-    }
-
-    /**
-     * Static method to convert Key into an instance of RSAPublicKeyImpl
-     * or RSAPrivate(Crt)KeyImpl. If the key is not an RSA key or cannot be
-     * used, throw an InvalidKeyException.
-     *
-     * Used by RSASignature and RSACipher.
-     */
-    public static RSAKey toRSAKey(Key key) throws InvalidKeyException {
-        if ((key instanceof RSAPrivateKeyImpl) ||
-            (key instanceof RSAPrivateCrtKeyImpl) ||
-            (key instanceof RSAPublicKeyImpl)) {
-            return (RSAKey)key;
-        } else {
-            return (RSAKey)INSTANCE.engineTranslateKey(key);
-        }
-    }
-
-    /*
-     * Single test entry point for all of the mechanisms in the SunRsaSign
-     * provider (RSA*KeyImpls).  All of the tests are the same.
-     *
-     * For compatibility, we round up to the nearest byte here:
-     * some Key impls might pass in a value within a byte of the
-     * real value.
-     */
-    static void checkRSAProviderKeyLengths(int modulusLen, BigInteger exponent)
-            throws InvalidKeyException {
-        checkKeyLengths(((modulusLen + 7) & ~7), exponent,
-            RSAKeyFactory.MIN_MODLEN, Integer.MAX_VALUE);
-    }
-
-    /**
-     * Check the length of an RSA key modulus/exponent to make sure it
-     * is not too short or long.  Some impls have their own min and
-     * max key sizes that may or may not match with a system defined value.
-     *
-     * @param modulusLen the bit length of the RSA modulus.
-     * @param exponent the RSA exponent
-     * @param minModulusLen if > 0, check to see if modulusLen is at
-     *        least this long, otherwise unused.
-     * @param maxModulusLen caller will allow this max number of bits.
-     *        Allow the smaller of the system-defined maximum and this param.
-     *
-     * @throws InvalidKeyException if any of the values are unacceptable.
-     */
-     public static void checkKeyLengths(int modulusLen, BigInteger exponent,
-            int minModulusLen, int maxModulusLen) throws InvalidKeyException {
-
-        if ((minModulusLen > 0) && (modulusLen < (minModulusLen))) {
-            throw new InvalidKeyException( "RSA keys must be at least " +
-                minModulusLen + " bits long");
-        }
-
-        // Even though our policy file may allow this, we don't want
-        // either value (mod/exp) to be too big.
-
-        int maxLen = Math.min(maxModulusLen, MAX_MODLEN);
-
-        // If a RSAPrivateKey/RSAPublicKey, make sure the
-        // modulus len isn't too big.
-        if (modulusLen > maxLen) {
-            throw new InvalidKeyException(
-                "RSA keys must be no longer than " + maxLen + " bits");
-        }
-
-        // If a RSAPublicKey, make sure the exponent isn't too big.
-        if (restrictExpLen && (exponent != null) &&
-                (modulusLen > MAX_MODLEN_RESTRICT_EXP) &&
-                (exponent.bitLength() > MAX_RESTRICTED_EXPLEN)) {
-            throw new InvalidKeyException(
-                "RSA exponents can be no longer than " +
-                MAX_RESTRICTED_EXPLEN + " bits " +
-                " if modulus is greater than " +
-                MAX_MODLEN_RESTRICT_EXP + " bits");
-        }
-    }
-
-    /**
-     * Translate an RSA key into a SunRsaSign RSA key. If conversion is
-     * not possible, throw an InvalidKeyException.
-     * See also JCA doc.
-     */
-    protected Key engineTranslateKey(Key key) throws InvalidKeyException {
-        if (key == null) {
-            throw new InvalidKeyException("Key must not be null");
-        }
-        String keyAlg = key.getAlgorithm();
-        if (keyAlg.equals("RSA") == false) {
-            throw new InvalidKeyException("Not an RSA key: " + keyAlg);
-        }
-        if (key instanceof PublicKey) {
-            return translatePublicKey((PublicKey)key);
-        } else if (key instanceof PrivateKey) {
-            return translatePrivateKey((PrivateKey)key);
-        } else {
-            throw new InvalidKeyException("Neither a public nor a private key");
-        }
-    }
-
-    // see JCA doc
-    protected PublicKey engineGeneratePublic(KeySpec keySpec)
-            throws InvalidKeySpecException {
-        try {
-            return generatePublic(keySpec);
-        } catch (InvalidKeySpecException e) {
-            throw e;
-        } catch (GeneralSecurityException e) {
-            throw new InvalidKeySpecException(e);
-        }
-    }
-
-    // see JCA doc
-    protected PrivateKey engineGeneratePrivate(KeySpec keySpec)
-            throws InvalidKeySpecException {
-        try {
-            return generatePrivate(keySpec);
-        } catch (InvalidKeySpecException e) {
-            throw e;
-        } catch (GeneralSecurityException e) {
-            throw new InvalidKeySpecException(e);
-        }
-    }
-
-    // internal implementation of translateKey() for public keys. See JCA doc
-    private PublicKey translatePublicKey(PublicKey key)
-            throws InvalidKeyException {
-        if (key instanceof RSAPublicKey) {
-            if (key instanceof RSAPublicKeyImpl) {
-                return key;
-            }
-            RSAPublicKey rsaKey = (RSAPublicKey)key;
-            try {
-                return new RSAPublicKeyImpl(
-                    rsaKey.getModulus(),
-                    rsaKey.getPublicExponent()
-                );
-            } catch (RuntimeException e) {
-                // catch providers that incorrectly implement RSAPublicKey
-                throw new InvalidKeyException("Invalid key", e);
-            }
-        } else if ("X.509".equals(key.getFormat())) {
-            byte[] encoded = key.getEncoded();
-            return new RSAPublicKeyImpl(encoded);
-        } else {
-            throw new InvalidKeyException("Public keys must be instance "
-                + "of RSAPublicKey or have X.509 encoding");
-        }
-    }
-
-    // internal implementation of translateKey() for private keys. See JCA doc
-    private PrivateKey translatePrivateKey(PrivateKey key)
-            throws InvalidKeyException {
-        if (key instanceof RSAPrivateCrtKey) {
-            if (key instanceof RSAPrivateCrtKeyImpl) {
-                return key;
-            }
-            RSAPrivateCrtKey rsaKey = (RSAPrivateCrtKey)key;
-            try {
-                return new RSAPrivateCrtKeyImpl(
-                    rsaKey.getModulus(),
-                    rsaKey.getPublicExponent(),
-                    rsaKey.getPrivateExponent(),
-                    rsaKey.getPrimeP(),
-                    rsaKey.getPrimeQ(),
-                    rsaKey.getPrimeExponentP(),
-                    rsaKey.getPrimeExponentQ(),
-                    rsaKey.getCrtCoefficient()
-                );
-            } catch (RuntimeException e) {
-                // catch providers that incorrectly implement RSAPrivateCrtKey
-                throw new InvalidKeyException("Invalid key", e);
-            }
-        } else if (key instanceof RSAPrivateKey) {
-            if (key instanceof RSAPrivateKeyImpl) {
-                return key;
-            }
-            RSAPrivateKey rsaKey = (RSAPrivateKey)key;
-            try {
-                return new RSAPrivateKeyImpl(
-                    rsaKey.getModulus(),
-                    rsaKey.getPrivateExponent()
-                );
-            } catch (RuntimeException e) {
-                // catch providers that incorrectly implement RSAPrivateKey
-                throw new InvalidKeyException("Invalid key", e);
-            }
-        } else if ("PKCS#8".equals(key.getFormat())) {
-            byte[] encoded = key.getEncoded();
-            return RSAPrivateCrtKeyImpl.newKey(encoded);
-        } else {
-            throw new InvalidKeyException("Private keys must be instance "
-                + "of RSAPrivate(Crt)Key or have PKCS#8 encoding");
-        }
-    }
-
-    // internal implementation of generatePublic. See JCA doc
-    private PublicKey generatePublic(KeySpec keySpec)
-            throws GeneralSecurityException {
-        if (keySpec instanceof X509EncodedKeySpec) {
-            X509EncodedKeySpec x509Spec = (X509EncodedKeySpec)keySpec;
-            return new RSAPublicKeyImpl(x509Spec.getEncoded());
-        } else if (keySpec instanceof RSAPublicKeySpec) {
-            RSAPublicKeySpec rsaSpec = (RSAPublicKeySpec)keySpec;
-            return new RSAPublicKeyImpl(
-                rsaSpec.getModulus(),
-                rsaSpec.getPublicExponent()
-            );
-        } else {
-            throw new InvalidKeySpecException("Only RSAPublicKeySpec "
-                + "and X509EncodedKeySpec supported for RSA public keys");
-        }
-    }
-
-    // internal implementation of generatePrivate. See JCA doc
-    private PrivateKey generatePrivate(KeySpec keySpec)
-            throws GeneralSecurityException {
-        if (keySpec instanceof PKCS8EncodedKeySpec) {
-            PKCS8EncodedKeySpec pkcsSpec = (PKCS8EncodedKeySpec)keySpec;
-            return RSAPrivateCrtKeyImpl.newKey(pkcsSpec.getEncoded());
-        } else if (keySpec instanceof RSAPrivateCrtKeySpec) {
-            RSAPrivateCrtKeySpec rsaSpec = (RSAPrivateCrtKeySpec)keySpec;
-            return new RSAPrivateCrtKeyImpl(
-                rsaSpec.getModulus(),
-                rsaSpec.getPublicExponent(),
-                rsaSpec.getPrivateExponent(),
-                rsaSpec.getPrimeP(),
-                rsaSpec.getPrimeQ(),
-                rsaSpec.getPrimeExponentP(),
-                rsaSpec.getPrimeExponentQ(),
-                rsaSpec.getCrtCoefficient()
-            );
-        } else if (keySpec instanceof RSAPrivateKeySpec) {
-            RSAPrivateKeySpec rsaSpec = (RSAPrivateKeySpec)keySpec;
-            return new RSAPrivateKeyImpl(
-                rsaSpec.getModulus(),
-                rsaSpec.getPrivateExponent()
-            );
-        } else {
-            throw new InvalidKeySpecException("Only RSAPrivate(Crt)KeySpec "
-                + "and PKCS8EncodedKeySpec supported for RSA private keys");
-        }
-    }
-
-    protected <T extends KeySpec> T engineGetKeySpec(Key key, Class<T> keySpec)
-            throws InvalidKeySpecException {
-        try {
-            // convert key to one of our keys
-            // this also verifies that the key is a valid RSA key and ensures
-            // that the encoding is X.509/PKCS#8 for public/private keys
-            key = engineTranslateKey(key);
-        } catch (InvalidKeyException e) {
-            throw new InvalidKeySpecException(e);
-        }
-        if (key instanceof RSAPublicKey) {
-            RSAPublicKey rsaKey = (RSAPublicKey)key;
-            if (rsaPublicKeySpecClass.isAssignableFrom(keySpec)) {
-                return (T) new RSAPublicKeySpec(
-                    rsaKey.getModulus(),
-                    rsaKey.getPublicExponent()
-                );
-            } else if (x509KeySpecClass.isAssignableFrom(keySpec)) {
-                return (T) new X509EncodedKeySpec(key.getEncoded());
-            } else {
-                throw new InvalidKeySpecException
-                        ("KeySpec must be RSAPublicKeySpec or "
-                        + "X509EncodedKeySpec for RSA public keys");
-            }
-        } else if (key instanceof RSAPrivateKey) {
-            if (pkcs8KeySpecClass.isAssignableFrom(keySpec)) {
-                return (T) new PKCS8EncodedKeySpec(key.getEncoded());
-            } else if (rsaPrivateCrtKeySpecClass.isAssignableFrom(keySpec)) {
-                if (key instanceof RSAPrivateCrtKey) {
-                    RSAPrivateCrtKey crtKey = (RSAPrivateCrtKey)key;
-                    return (T) new RSAPrivateCrtKeySpec(
-                        crtKey.getModulus(),
-                        crtKey.getPublicExponent(),
-                        crtKey.getPrivateExponent(),
-                        crtKey.getPrimeP(),
-                        crtKey.getPrimeQ(),
-                        crtKey.getPrimeExponentP(),
-                        crtKey.getPrimeExponentQ(),
-                        crtKey.getCrtCoefficient()
-                    );
-                } else {
-                    throw new InvalidKeySpecException
-                    ("RSAPrivateCrtKeySpec can only be used with CRT keys");
-                }
-            } else if (rsaPrivateKeySpecClass.isAssignableFrom(keySpec)) {
-                RSAPrivateKey rsaKey = (RSAPrivateKey)key;
-                return (T) new RSAPrivateKeySpec(
-                    rsaKey.getModulus(),
-                    rsaKey.getPrivateExponent()
-                );
-            } else {
-                throw new InvalidKeySpecException
-                        ("KeySpec must be RSAPrivate(Crt)KeySpec or "
-                        + "PKCS8EncodedKeySpec for RSA private keys");
-            }
-        } else {
-            // should not occur, caught in engineTranslateKey()
-            throw new InvalidKeySpecException("Neither public nor private key");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/rsa/RSAKeyPairGenerator.java b/ojluni/src/main/java/sun/security/rsa/RSAKeyPairGenerator.java
deleted file mode 100755
index ea579cc..0000000
--- a/ojluni/src/main/java/sun/security/rsa/RSAKeyPairGenerator.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package sun.security.rsa;
-
-import java.math.BigInteger;
-
-import java.security.*;
-import java.security.spec.AlgorithmParameterSpec;
-import java.security.spec.RSAKeyGenParameterSpec;
-
-import sun.security.jca.JCAUtil;
-
-/**
- * RSA keypair generation. Standard algorithm, minimum key length 512 bit.
- * We generate two random primes until we find two where phi is relative
- * prime to the public exponent. Default exponent is 65537. It has only bit 0
- * and bit 4 set, which makes it particularly efficient.
- *
- * @since   1.5
- * @author  Andreas Sterbenz
- */
-public final class RSAKeyPairGenerator extends KeyPairGeneratorSpi {
-
-    // public exponent to use
-    private BigInteger publicExponent;
-
-    // size of the key to generate, >= RSAKeyFactory.MIN_MODLEN
-    private int keySize;
-
-    // PRNG to use
-    private SecureRandom random;
-
-    public RSAKeyPairGenerator() {
-        // initialize to default in case the app does not call initialize()
-        initialize(1024, null);
-    }
-
-    // initialize the generator. See JCA doc
-    public void initialize(int keySize, SecureRandom random) {
-
-        // do not allow unreasonably small or large key sizes,
-        // probably user error
-        try {
-            RSAKeyFactory.checkKeyLengths(keySize, RSAKeyGenParameterSpec.F4,
-                512, 64 * 1024);
-        } catch (InvalidKeyException e) {
-            throw new InvalidParameterException(e.getMessage());
-        }
-
-        this.keySize = keySize;
-        this.random = random;
-        this.publicExponent = RSAKeyGenParameterSpec.F4;
-    }
-
-    // second initialize method. See JCA doc.
-    public void initialize(AlgorithmParameterSpec params, SecureRandom random)
-            throws InvalidAlgorithmParameterException {
-
-        if (params instanceof RSAKeyGenParameterSpec == false) {
-            throw new InvalidAlgorithmParameterException
-                ("Params must be instance of RSAKeyGenParameterSpec");
-        }
-
-        RSAKeyGenParameterSpec rsaSpec = (RSAKeyGenParameterSpec)params;
-        int tmpKeySize = rsaSpec.getKeysize();
-        BigInteger tmpPublicExponent = rsaSpec.getPublicExponent();
-
-        if (tmpPublicExponent == null) {
-            tmpPublicExponent = RSAKeyGenParameterSpec.F4;
-        } else {
-            if (tmpPublicExponent.compareTo(RSAKeyGenParameterSpec.F0) < 0) {
-                throw new InvalidAlgorithmParameterException
-                        ("Public exponent must be 3 or larger");
-            }
-            if (tmpPublicExponent.bitLength() > tmpKeySize) {
-                throw new InvalidAlgorithmParameterException
-                        ("Public exponent must be smaller than key size");
-            }
-        }
-
-        // do not allow unreasonably large key sizes, probably user error
-        try {
-            RSAKeyFactory.checkKeyLengths(tmpKeySize, tmpPublicExponent,
-                512, 64 * 1024);
-        } catch (InvalidKeyException e) {
-            throw new InvalidAlgorithmParameterException(
-                "Invalid key sizes", e);
-        }
-
-        this.keySize = tmpKeySize;
-        this.publicExponent = tmpPublicExponent;
-        this.random = random;
-    }
-
-    // generate the keypair. See JCA doc
-    public KeyPair generateKeyPair() {
-        // accomodate odd key sizes in case anybody wants to use them
-        int lp = (keySize + 1) >> 1;
-        int lq = keySize - lp;
-        if (random == null) {
-            random = JCAUtil.getSecureRandom();
-        }
-        BigInteger e = publicExponent;
-        while (true) {
-            // generate two random primes of size lp/lq
-            BigInteger p = BigInteger.probablePrime(lp, random);
-            BigInteger q, n;
-            do {
-                q = BigInteger.probablePrime(lq, random);
-                // convention is for p > q
-                if (p.compareTo(q) < 0) {
-                    BigInteger tmp = p;
-                    p = q;
-                    q = tmp;
-                }
-                // modulus n = p * q
-                n = p.multiply(q);
-                // even with correctly sized p and q, there is a chance that
-                // n will be one bit short. re-generate the smaller prime if so
-            } while (n.bitLength() < keySize);
-
-            // phi = (p - 1) * (q - 1) must be relative prime to e
-            // otherwise RSA just won't work ;-)
-            BigInteger p1 = p.subtract(BigInteger.ONE);
-            BigInteger q1 = q.subtract(BigInteger.ONE);
-            BigInteger phi = p1.multiply(q1);
-            // generate new p and q until they work. typically
-            // the first try will succeed when using F4
-            if (e.gcd(phi).equals(BigInteger.ONE) == false) {
-                continue;
-            }
-
-            // private exponent d is the inverse of e mod phi
-            BigInteger d = e.modInverse(phi);
-
-            // 1st prime exponent pe = d mod (p - 1)
-            BigInteger pe = d.mod(p1);
-            // 2nd prime exponent qe = d mod (q - 1)
-            BigInteger qe = d.mod(q1);
-
-            // crt coefficient coeff is the inverse of q mod p
-            BigInteger coeff = q.modInverse(p);
-
-            try {
-                PublicKey publicKey = new RSAPublicKeyImpl(n, e);
-                PrivateKey privateKey =
-                        new RSAPrivateCrtKeyImpl(n, e, d, p, q, pe, qe, coeff);
-                return new KeyPair(publicKey, privateKey);
-            } catch (InvalidKeyException exc) {
-                // invalid key exception only thrown for keys < 512 bit,
-                // will not happen here
-                throw new RuntimeException(exc);
-            }
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/rsa/RSAPadding.java b/ojluni/src/main/java/sun/security/rsa/RSAPadding.java
deleted file mode 100755
index 0ea04b1..0000000
--- a/ojluni/src/main/java/sun/security/rsa/RSAPadding.java
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.security.rsa;
-
-import java.math.BigInteger;
-import java.util.*;
-
-import java.security.*;
-import java.security.interfaces.*;
-import java.security.spec.*;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.spec.PSource;
-import javax.crypto.spec.OAEPParameterSpec;
-
-import sun.security.jca.JCAUtil;
-
-/**
- * RSA padding and unpadding.
- *
- * Format of PKCS#1 v1.5 padding is:
- *   0x00 | BT | PS...PS | 0x00 | data...data
- * where BT is the blocktype (1 or 2). The length of the entire string
- * must be the same as the size of the modulus (i.e. 128 byte for a 1024 bit
- * key). Per spec, the padding string must be at least 8 bytes long. That
- * leaves up to (length of key in bytes) - 11 bytes for the data.
- *
- * OAEP padding is a bit more complicated and has a number of options.
- * We support:
- *   . arbitrary hash functions ('Hash' in the specification), MessageDigest
- *     implementation must be available
- *   . MGF1 as the mask generation function
- *   . the empty string as the default value for label L and whatever
- *     specified in javax.crypto.spec.OAEPParameterSpec
- *
- * Note: RSA keys should be at least 512 bits long
- *
- * @since   1.5
- * @author  Andreas Sterbenz
- */
-public final class RSAPadding {
-
-    // NOTE: the constants below are embedded in the JCE RSACipher class
-    // file. Do not change without coordinating the update
-
-    // PKCS#1 v1.5 padding, blocktype 1 (signing)
-    public final static int PAD_BLOCKTYPE_1    = 1;
-    // PKCS#1 v1.5 padding, blocktype 2 (encryption)
-    public final static int PAD_BLOCKTYPE_2    = 2;
-    // nopadding. Does not do anything, but allows simpler RSACipher code
-    public final static int PAD_NONE           = 3;
-    // PKCS#1 v2.1 OAEP padding
-    public final static int PAD_OAEP_MGF1 = 4;
-
-    // type, one of PAD_*
-    private final int type;
-
-    // size of the padded block (i.e. size of the modulus)
-    private final int paddedSize;
-
-    // PRNG used to generate padding bytes (PAD_BLOCKTYPE_2, PAD_OAEP_MGF1)
-    private SecureRandom random;
-
-    // maximum size of the data
-    private final int maxDataSize;
-
-    // OAEP: main messagedigest
-    private MessageDigest md;
-
-    // OAEP: message digest for MGF1
-    private MessageDigest mgfMd;
-
-    // OAEP: value of digest of data (user-supplied or zero-length) using md
-    private byte[] lHash;
-
-    /**
-     * Get a RSAPadding instance of the specified type.
-     * Keys used with this padding must be paddedSize bytes long.
-     */
-    public static RSAPadding getInstance(int type, int paddedSize)
-            throws InvalidKeyException, InvalidAlgorithmParameterException {
-        return new RSAPadding(type, paddedSize, null, null);
-    }
-
-    /**
-     * Get a RSAPadding instance of the specified type.
-     * Keys used with this padding must be paddedSize bytes long.
-     */
-    public static RSAPadding getInstance(int type, int paddedSize,
-            SecureRandom random) throws InvalidKeyException,
-            InvalidAlgorithmParameterException {
-        return new RSAPadding(type, paddedSize, random, null);
-    }
-
-    /**
-     * Get a RSAPadding instance of the specified type, which must be
-     * OAEP. Keys used with this padding must be paddedSize bytes long.
-     */
-    public static RSAPadding getInstance(int type, int paddedSize,
-            SecureRandom random, OAEPParameterSpec spec)
-        throws InvalidKeyException, InvalidAlgorithmParameterException {
-        return new RSAPadding(type, paddedSize, random, spec);
-    }
-
-    // internal constructor
-    private RSAPadding(int type, int paddedSize, SecureRandom random,
-            OAEPParameterSpec spec) throws InvalidKeyException,
-            InvalidAlgorithmParameterException {
-        this.type = type;
-        this.paddedSize = paddedSize;
-        this.random = random;
-        if (paddedSize < 64) {
-            // sanity check, already verified in RSASignature/RSACipher
-            throw new InvalidKeyException("Padded size must be at least 64");
-        }
-        switch (type) {
-        case PAD_BLOCKTYPE_1:
-        case PAD_BLOCKTYPE_2:
-            maxDataSize = paddedSize - 11;
-            break;
-        case PAD_NONE:
-            maxDataSize = paddedSize;
-            break;
-        case PAD_OAEP_MGF1:
-            String mdName = "SHA-1";
-            String mgfMdName = "SHA-1";
-            byte[] digestInput = null;
-            try {
-                if (spec != null) {
-                    mdName = spec.getDigestAlgorithm();
-                    String mgfName = spec.getMGFAlgorithm();
-                    if (!mgfName.equalsIgnoreCase("MGF1")) {
-                        throw new InvalidAlgorithmParameterException
-                            ("Unsupported MGF algo: " + mgfName);
-                    }
-                    mgfMdName = ((MGF1ParameterSpec)spec.getMGFParameters()).getDigestAlgorithm();
-                    PSource pSrc = spec.getPSource();
-                    String pSrcAlgo = pSrc.getAlgorithm();
-                    if (!pSrcAlgo.equalsIgnoreCase("PSpecified")) {
-                        throw new InvalidAlgorithmParameterException
-                            ("Unsupported pSource algo: " + pSrcAlgo);
-                    }
-                    digestInput = ((PSource.PSpecified) pSrc).getValue();
-                }
-                md = MessageDigest.getInstance(mdName);
-                mgfMd = MessageDigest.getInstance(mgfMdName);
-            } catch (NoSuchAlgorithmException e) {
-                throw new InvalidKeyException
-                        ("Digest " + mdName + " not available", e);
-            }
-            lHash = getInitialHash(md, digestInput);
-            int digestLen = lHash.length;
-            maxDataSize = paddedSize - 2 - 2 * digestLen;
-            if (maxDataSize <= 0) {
-                throw new InvalidKeyException
-                        ("Key is too short for encryption using OAEPPadding" +
-                         " with " + mdName + " and MGF1" + mgfMdName);
-            }
-            break;
-        default:
-            throw new InvalidKeyException("Invalid padding: " + type);
-        }
-    }
-
-    // cache of hashes of zero length data
-    private static final Map<String,byte[]> emptyHashes =
-        Collections.synchronizedMap(new HashMap<String,byte[]>());
-
-    /**
-     * Return the value of the digest using the specified message digest
-     * <code>md</code> and the digest input <code>digestInput</code>.
-     * if <code>digestInput</code> is null or 0-length, zero length
-     * is used to generate the initial digest.
-     * Note: the md object must be in reset state
-     */
-    private static byte[] getInitialHash(MessageDigest md,
-        byte[] digestInput) {
-        byte[] result = null;
-        if ((digestInput == null) || (digestInput.length == 0)) {
-            String digestName = md.getAlgorithm();
-            result = emptyHashes.get(digestName);
-            if (result == null) {
-                result = md.digest();
-                emptyHashes.put(digestName, result);
-            }
-        } else {
-            result = md.digest(digestInput);
-        }
-        return result;
-    }
-
-    /**
-     * Return the maximum size of the plaintext data that can be processed using
-     * this object.
-     */
-    public int getMaxDataSize() {
-        return maxDataSize;
-    }
-
-    /**
-     * Pad the data and return the padded block.
-     */
-    public byte[] pad(byte[] data, int ofs, int len)
-            throws BadPaddingException {
-        return pad(RSACore.convert(data, ofs, len));
-    }
-
-    /**
-     * Pad the data and return the padded block.
-     */
-    public byte[] pad(byte[] data) throws BadPaddingException {
-        if (data.length > maxDataSize) {
-            throw new BadPaddingException("Data must be shorter than "
-                + (maxDataSize + 1) + " bytes");
-        }
-        switch (type) {
-        case PAD_NONE:
-            return data;
-        case PAD_BLOCKTYPE_1:
-        case PAD_BLOCKTYPE_2:
-            return padV15(data);
-        case PAD_OAEP_MGF1:
-            return padOAEP(data);
-        default:
-            throw new AssertionError();
-        }
-    }
-
-    /**
-     * Unpad the padded block and return the data.
-     */
-    public byte[] unpad(byte[] padded, int ofs, int len)
-            throws BadPaddingException {
-        return unpad(RSACore.convert(padded, ofs, len));
-    }
-
-    /**
-     * Unpad the padded block and return the data.
-     */
-    public byte[] unpad(byte[] padded) throws BadPaddingException {
-        if (padded.length != paddedSize) {
-            throw new BadPaddingException("Padded length must be " + paddedSize);
-        }
-        switch (type) {
-        case PAD_NONE:
-            return padded;
-        case PAD_BLOCKTYPE_1:
-        case PAD_BLOCKTYPE_2:
-            return unpadV15(padded);
-        case PAD_OAEP_MGF1:
-            return unpadOAEP(padded);
-        default:
-            throw new AssertionError();
-        }
-    }
-
-    /**
-     * PKCS#1 v1.5 padding (blocktype 1 and 2).
-     */
-    private byte[] padV15(byte[] data) throws BadPaddingException {
-        byte[] padded = new byte[paddedSize];
-        System.arraycopy(data, 0, padded, paddedSize - data.length, data.length);
-        int psSize = paddedSize - 3 - data.length;
-        int k = 0;
-        padded[k++] = 0;
-        padded[k++] = (byte)type;
-        if (type == PAD_BLOCKTYPE_1) {
-            // blocktype 1: all padding bytes are 0xff
-            while (psSize-- > 0) {
-                padded[k++] = (byte)0xff;
-            }
-        } else {
-            // blocktype 2: padding bytes are random non-zero bytes
-            if (random == null) {
-                random = JCAUtil.getSecureRandom();
-            }
-            // generate non-zero padding bytes
-            // use a buffer to reduce calls to SecureRandom
-            byte[] r = new byte[64];
-            int i = -1;
-            while (psSize-- > 0) {
-                int b;
-                do {
-                    if (i < 0) {
-                        random.nextBytes(r);
-                        i = r.length - 1;
-                    }
-                    b = r[i--] & 0xff;
-                } while (b == 0);
-                padded[k++] = (byte)b;
-            }
-        }
-        return padded;
-    }
-
-    /**
-     * PKCS#1 v1.5 unpadding (blocktype 1 and 2).
-     */
-    private byte[] unpadV15(byte[] padded) throws BadPaddingException {
-        int k = 0;
-        if (padded[k++] != 0) {
-            throw new BadPaddingException("Data must start with zero");
-        }
-        if (padded[k++] != type) {
-            throw new BadPaddingException("Blocktype mismatch: " + padded[1]);
-        }
-        while (true) {
-            int b = padded[k++] & 0xff;
-            if (b == 0) {
-                break;
-            }
-            if (k == padded.length) {
-                throw new BadPaddingException("Padding string not terminated");
-            }
-            if ((type == PAD_BLOCKTYPE_1) && (b != 0xff)) {
-                throw new BadPaddingException("Padding byte not 0xff: " + b);
-            }
-        }
-        int n = padded.length - k;
-        if (n > maxDataSize) {
-            throw new BadPaddingException("Padding string too short");
-        }
-        byte[] data = new byte[n];
-        System.arraycopy(padded, padded.length - n, data, 0, n);
-        return data;
-    }
-
-    /**
-     * PKCS#1 v2.0 OAEP padding (MGF1).
-     * Paragraph references refer to PKCS#1 v2.1 (June 14, 2002)
-     */
-    private byte[] padOAEP(byte[] M) throws BadPaddingException {
-        if (random == null) {
-            random = JCAUtil.getSecureRandom();
-        }
-        int hLen = lHash.length;
-
-        // 2.d: generate a random octet string seed of length hLen
-        // if necessary
-        byte[] seed = new byte[hLen];
-        random.nextBytes(seed);
-
-        // buffer for encoded message EM
-        byte[] EM = new byte[paddedSize];
-
-        // start and length of seed (as index into EM)
-        int seedStart = 1;
-        int seedLen = hLen;
-
-        // copy seed into EM
-        System.arraycopy(seed, 0, EM, seedStart, seedLen);
-
-        // start and length of data block DB in EM
-        // we place it inside of EM to reduce copying
-        int dbStart = hLen + 1;
-        int dbLen = EM.length - dbStart;
-
-        // start of message M in EM
-        int mStart = paddedSize - M.length;
-
-        // build DB
-        // 2.b: Concatenate lHash, PS, a single octet with hexadecimal value
-        // 0x01, and the message M to form a data block DB of length
-        // k - hLen -1 octets as DB = lHash || PS || 0x01 || M
-        // (note that PS is all zeros)
-        System.arraycopy(lHash, 0, EM, dbStart, hLen);
-        EM[mStart - 1] = 1;
-        System.arraycopy(M, 0, EM, mStart, M.length);
-
-        // produce maskedDB
-        mgf1(EM, seedStart, seedLen, EM, dbStart, dbLen);
-
-        // produce maskSeed
-        mgf1(EM, dbStart, dbLen, EM, seedStart, seedLen);
-
-        return EM;
-    }
-
-    /**
-     * PKCS#1 v2.1 OAEP unpadding (MGF1).
-     */
-    private byte[] unpadOAEP(byte[] padded) throws BadPaddingException {
-        byte[] EM = padded;
-        int hLen = lHash.length;
-
-        if (EM[0] != 0) {
-            throw new BadPaddingException("Data must start with zero");
-        }
-
-        int seedStart = 1;
-        int seedLen = hLen;
-
-        int dbStart = hLen + 1;
-        int dbLen = EM.length - dbStart;
-
-        mgf1(EM, dbStart, dbLen, EM, seedStart, seedLen);
-        mgf1(EM, seedStart, seedLen, EM, dbStart, dbLen);
-
-        // verify lHash == lHash'
-        for (int i = 0; i < hLen; i++) {
-            if (lHash[i] != EM[dbStart + i]) {
-                throw new BadPaddingException("lHash mismatch");
-            }
-        }
-
-        // skip over padding (0x00 bytes)
-        int i = dbStart + hLen;
-        while (EM[i] == 0) {
-            i++;
-            if (i >= EM.length) {
-                throw new BadPaddingException("Padding string not terminated");
-            }
-        }
-
-        if (EM[i++] != 1) {
-            throw new BadPaddingException
-                ("Padding string not terminated by 0x01 byte");
-        }
-
-        int mLen = EM.length - i;
-        byte[] m = new byte[mLen];
-        System.arraycopy(EM, i, m, 0, mLen);
-
-        return m;
-    }
-
-    /**
-     * Compute MGF1 using mgfMD as the message digest.
-     * Note that we combine MGF1 with the XOR operation to reduce data
-     * copying.
-     *
-     * We generate maskLen bytes of MGF1 from the seed and XOR it into
-     * out[] starting at outOfs;
-     */
-    private void mgf1(byte[] seed, int seedOfs, int seedLen,
-            byte[] out, int outOfs, int maskLen)  throws BadPaddingException {
-        byte[] C = new byte[4]; // 32 bit counter
-        byte[] digest = new byte[20]; // 20 bytes is length of SHA-1 digest
-        while (maskLen > 0) {
-            mgfMd.update(seed, seedOfs, seedLen);
-            mgfMd.update(C);
-            try {
-                mgfMd.digest(digest, 0, digest.length);
-            } catch (DigestException e) {
-                // should never happen
-                throw new BadPaddingException(e.toString());
-            }
-            for (int i = 0; (i < digest.length) && (maskLen > 0); maskLen--) {
-                out[outOfs++] ^= digest[i++];
-            }
-            if (maskLen > 0) {
-                // increment counter
-                for (int i = C.length - 1; (++C[i] == 0) && (i > 0); i--) {
-                    // empty
-                }
-            }
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/rsa/RSAPrivateCrtKeyImpl.java b/ojluni/src/main/java/sun/security/rsa/RSAPrivateCrtKeyImpl.java
deleted file mode 100755
index b289ef2..0000000
--- a/ojluni/src/main/java/sun/security/rsa/RSAPrivateCrtKeyImpl.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package sun.security.rsa;
-
-import java.io.IOException;
-import java.math.BigInteger;
-
-import java.security.*;
-import java.security.interfaces.*;
-
-import sun.security.util.*;
-import sun.security.x509.AlgorithmId;
-import sun.security.pkcs.PKCS8Key;
-
-/**
- * Key implementation for RSA private keys, CRT form. For non-CRT private
- * keys, see RSAPrivateKeyImpl. We need separate classes to ensure
- * correct behavior in instanceof checks, etc.
- *
- * Note: RSA keys must be at least 512 bits long
- *
- * @see RSAPrivateKeyImpl
- * @see RSAKeyFactory
- *
- * @since   1.5
- * @author  Andreas Sterbenz
- */
-public final class RSAPrivateCrtKeyImpl
-        extends PKCS8Key implements RSAPrivateCrtKey {
-
-    private static final long serialVersionUID = -1326088454257084918L;
-
-    private BigInteger n;       // modulus
-    private BigInteger e;       // public exponent
-    private BigInteger d;       // private exponent
-    private BigInteger p;       // prime p
-    private BigInteger q;       // prime q
-    private BigInteger pe;      // prime exponent p
-    private BigInteger qe;      // prime exponent q
-    private BigInteger coeff;   // CRT coeffcient
-
-    // algorithmId used to identify RSA keys
-    final static AlgorithmId rsaId =
-        new AlgorithmId(AlgorithmId.RSAEncryption_oid);
-
-    /**
-     * Generate a new key from its encoding. Returns a CRT key if possible
-     * and a non-CRT key otherwise. Used by RSAKeyFactory.
-     */
-    public static RSAPrivateKey newKey(byte[] encoded)
-            throws InvalidKeyException {
-        RSAPrivateCrtKeyImpl key = new RSAPrivateCrtKeyImpl(encoded);
-        if (key.getPublicExponent().signum() == 0) {
-            // public exponent is missing, return a non-CRT key
-            return new RSAPrivateKeyImpl(
-                key.getModulus(),
-                key.getPrivateExponent()
-            );
-        } else {
-            return key;
-        }
-    }
-
-    /**
-     * Construct a key from its encoding. Called from newKey above.
-     */
-    RSAPrivateCrtKeyImpl(byte[] encoded) throws InvalidKeyException {
-        decode(encoded);
-        RSAKeyFactory.checkRSAProviderKeyLengths(n.bitLength(), e);
-    }
-
-    /**
-     * Construct a key from its components. Used by the
-     * RSAKeyFactory and the RSAKeyPairGenerator.
-     */
-    RSAPrivateCrtKeyImpl(BigInteger n, BigInteger e, BigInteger d,
-            BigInteger p, BigInteger q, BigInteger pe, BigInteger qe,
-            BigInteger coeff) throws InvalidKeyException {
-        this.n = n;
-        this.e = e;
-        this.d = d;
-        this.p = p;
-        this.q = q;
-        this.pe = pe;
-        this.qe = qe;
-        this.coeff = coeff;
-        RSAKeyFactory.checkRSAProviderKeyLengths(n.bitLength(), e);
-
-        // generate the encoding
-        algid = rsaId;
-        try {
-            DerOutputStream out = new DerOutputStream();
-            out.putInteger(0); // version must be 0
-            out.putInteger(n);
-            out.putInteger(e);
-            out.putInteger(d);
-            out.putInteger(p);
-            out.putInteger(q);
-            out.putInteger(pe);
-            out.putInteger(qe);
-            out.putInteger(coeff);
-            DerValue val =
-                new DerValue(DerValue.tag_Sequence, out.toByteArray());
-            key = val.toByteArray();
-        } catch (IOException exc) {
-            // should never occur
-            throw new InvalidKeyException(exc);
-        }
-    }
-
-    // see JCA doc
-    public String getAlgorithm() {
-        return "RSA";
-    }
-
-    // see JCA doc
-    public BigInteger getModulus() {
-        return n;
-    }
-
-    // see JCA doc
-    public BigInteger getPublicExponent() {
-        return e;
-    }
-
-    // see JCA doc
-    public BigInteger getPrivateExponent() {
-        return d;
-    }
-
-    // see JCA doc
-    public BigInteger getPrimeP() {
-        return p;
-    }
-
-    // see JCA doc
-    public BigInteger getPrimeQ() {
-        return q;
-    }
-
-    // see JCA doc
-    public BigInteger getPrimeExponentP() {
-        return pe;
-    }
-
-    // see JCA doc
-    public BigInteger getPrimeExponentQ() {
-        return qe;
-    }
-
-    // see JCA doc
-    public BigInteger getCrtCoefficient() {
-        return coeff;
-    }
-
-    /**
-     * Parse the key. Called by PKCS8Key.
-     */
-    protected void parseKeyBits() throws InvalidKeyException {
-        try {
-            DerInputStream in = new DerInputStream(key);
-            DerValue derValue = in.getDerValue();
-            if (derValue.tag != DerValue.tag_Sequence) {
-                throw new IOException("Not a SEQUENCE");
-            }
-            DerInputStream data = derValue.data;
-            int version = data.getInteger();
-            if (version != 0) {
-                throw new IOException("Version must be 0");
-            }
-            n = getBigInteger(data);
-            e = getBigInteger(data);
-            d = getBigInteger(data);
-            p = getBigInteger(data);
-            q = getBigInteger(data);
-            pe = getBigInteger(data);
-            qe = getBigInteger(data);
-            coeff = getBigInteger(data);
-            if (derValue.data.available() != 0) {
-                throw new IOException("Extra data available");
-            }
-        } catch (IOException e) {
-            throw new InvalidKeyException("Invalid RSA private key", e);
-        }
-    }
-
-    /**
-     * Read a BigInteger from the DerInputStream.
-     */
-    static BigInteger getBigInteger(DerInputStream data) throws IOException {
-        BigInteger b = data.getBigInteger();
-
-        /*
-         * Some implementations do not correctly encode ASN.1 INTEGER values
-         * in 2's complement format, resulting in a negative integer when
-         * decoded. Correct the error by converting it to a positive integer.
-         *
-         * See CR 6255949
-         */
-        if (b.signum() < 0) {
-            b = new BigInteger(1, b.toByteArray());
-        }
-        return b;
-    }
-
-    // return a string representation of this key for debugging
-    public String toString() {
-        StringBuffer sb = new StringBuffer();
-        sb.append("Sun RSA private CRT key, ");
-        sb.append(n.bitLength());
-        sb.append(" bits\n  modulus:          ");
-        sb.append(n);
-        sb.append("\n  public exponent:  ");
-        sb.append(e);
-        sb.append("\n  private exponent: ");
-        sb.append(d);
-        sb.append("\n  prime p:          ");
-        sb.append(p);
-        sb.append("\n  prime q:          ");
-        sb.append(q);
-        sb.append("\n  prime exponent p: ");
-        sb.append(pe);
-        sb.append("\n  prime exponent q: ");
-        sb.append(qe);
-        sb.append("\n  crt coefficient:  ");
-        sb.append(coeff);
-        return sb.toString();
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/rsa/RSAPrivateKeyImpl.java b/ojluni/src/main/java/sun/security/rsa/RSAPrivateKeyImpl.java
deleted file mode 100755
index f9a7c34..0000000
--- a/ojluni/src/main/java/sun/security/rsa/RSAPrivateKeyImpl.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package sun.security.rsa;
-
-import java.io.IOException;
-import java.math.BigInteger;
-
-import java.security.*;
-import java.security.interfaces.*;
-
-import sun.security.util.*;
-import sun.security.pkcs.PKCS8Key;
-
-/**
- * Key implementation for RSA private keys, non-CRT form (modulus, private
- * exponent only). For CRT private keys, see RSAPrivateCrtKeyImpl. We need
- * separate classes to ensure correct behavior in instanceof checks, etc.
- *
- * Note: RSA keys must be at least 512 bits long
- *
- * @see RSAPrivateCrtKeyImpl
- * @see RSAKeyFactory
- *
- * @since   1.5
- * @author  Andreas Sterbenz
- */
-public final class RSAPrivateKeyImpl extends PKCS8Key implements RSAPrivateKey {
-
-    private static final long serialVersionUID = -33106691987952810L;
-
-    private final BigInteger n;         // modulus
-    private final BigInteger d;         // private exponent
-
-    /**
-     * Construct a key from its components. Used by the
-     * RSAKeyFactory and the RSAKeyPairGenerator.
-     */
-    RSAPrivateKeyImpl(BigInteger n, BigInteger d) throws InvalidKeyException {
-        this.n = n;
-        this.d = d;
-        RSAKeyFactory.checkRSAProviderKeyLengths(n.bitLength(), null);
-        // generate the encoding
-        algid = RSAPrivateCrtKeyImpl.rsaId;
-        try {
-            DerOutputStream out = new DerOutputStream();
-            out.putInteger(0); // version must be 0
-            out.putInteger(n);
-            out.putInteger(0);
-            out.putInteger(d);
-            out.putInteger(0);
-            out.putInteger(0);
-            out.putInteger(0);
-            out.putInteger(0);
-            out.putInteger(0);
-            DerValue val =
-                new DerValue(DerValue.tag_Sequence, out.toByteArray());
-            key = val.toByteArray();
-        } catch (IOException exc) {
-            // should never occur
-            throw new InvalidKeyException(exc);
-        }
-    }
-
-    // see JCA doc
-    public String getAlgorithm() {
-        return "RSA";
-    }
-
-    // see JCA doc
-    public BigInteger getModulus() {
-        return n;
-    }
-
-    // see JCA doc
-    public BigInteger getPrivateExponent() {
-        return d;
-    }
-
-    // return a string representation of this key for debugging
-    public String toString() {
-        return "Sun RSA private key, " + n.bitLength() + " bits\n  modulus: "
-                + n + "\n  private exponent: " + d;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/rsa/RSAPublicKeyImpl.java b/ojluni/src/main/java/sun/security/rsa/RSAPublicKeyImpl.java
deleted file mode 100755
index d0ef2eb..0000000
--- a/ojluni/src/main/java/sun/security/rsa/RSAPublicKeyImpl.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 2003, 2008, 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.
- */
-
-package sun.security.rsa;
-
-import java.io.IOException;
-import java.math.BigInteger;
-
-import java.security.*;
-import java.security.interfaces.*;
-
-import sun.security.util.*;
-import sun.security.x509.X509Key;
-
-/**
- * Key implementation for RSA public keys.
- *
- * Note: RSA keys must be at least 512 bits long
- *
- * @see RSAPrivateCrtKeyImpl
- * @see RSAKeyFactory
- *
- * @since   1.5
- * @author  Andreas Sterbenz
- */
-public final class RSAPublicKeyImpl extends X509Key implements RSAPublicKey {
-
-    private static final long serialVersionUID = 2644735423591199609L;
-
-    private BigInteger n;       // modulus
-    private BigInteger e;       // public exponent
-
-    /**
-     * Construct a key from its components. Used by the
-     * RSAKeyFactory and the RSAKeyPairGenerator.
-     */
-    public RSAPublicKeyImpl(BigInteger n, BigInteger e)
-            throws InvalidKeyException {
-        this.n = n;
-        this.e = e;
-        RSAKeyFactory.checkRSAProviderKeyLengths(n.bitLength(), e);
-        // generate the encoding
-        algid = RSAPrivateCrtKeyImpl.rsaId;
-        try {
-            DerOutputStream out = new DerOutputStream();
-            out.putInteger(n);
-            out.putInteger(e);
-            DerValue val =
-                new DerValue(DerValue.tag_Sequence, out.toByteArray());
-            key = val.toByteArray();
-        } catch (IOException exc) {
-            // should never occur
-            throw new InvalidKeyException(exc);
-        }
-    }
-
-    /**
-     * Construct a key from its encoding. Used by RSAKeyFactory.
-     */
-    public RSAPublicKeyImpl(byte[] encoded) throws InvalidKeyException {
-        decode(encoded);
-        RSAKeyFactory.checkRSAProviderKeyLengths(n.bitLength(), e);
-    }
-
-    // see JCA doc
-    public String getAlgorithm() {
-        return "RSA";
-    }
-
-    // see JCA doc
-    public BigInteger getModulus() {
-        return n;
-    }
-
-    // see JCA doc
-    public BigInteger getPublicExponent() {
-        return e;
-    }
-
-    /**
-     * Parse the key. Called by X509Key.
-     */
-    protected void parseKeyBits() throws InvalidKeyException {
-        try {
-            DerInputStream in = new DerInputStream(key);
-            DerValue derValue = in.getDerValue();
-            if (derValue.tag != DerValue.tag_Sequence) {
-                throw new IOException("Not a SEQUENCE");
-            }
-            DerInputStream data = derValue.data;
-            n = RSAPrivateCrtKeyImpl.getBigInteger(data);
-            e = RSAPrivateCrtKeyImpl.getBigInteger(data);
-            if (derValue.data.available() != 0) {
-                throw new IOException("Extra data available");
-            }
-        } catch (IOException e) {
-            throw new InvalidKeyException("Invalid RSA public key", e);
-        }
-    }
-
-    // return a string representation of this key for debugging
-    public String toString() {
-        return "Sun RSA public key, " + n.bitLength() + " bits\n  modulus: "
-                + n + "\n  public exponent: " + e;
-    }
-
-    protected Object writeReplace() throws java.io.ObjectStreamException {
-        return new KeyRep(KeyRep.Type.PUBLIC,
-                        getAlgorithm(),
-                        getFormat(),
-                        getEncoded());
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/rsa/RSASignature.java b/ojluni/src/main/java/sun/security/rsa/RSASignature.java
deleted file mode 100755
index c510413..0000000
--- a/ojluni/src/main/java/sun/security/rsa/RSASignature.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-package sun.security.rsa;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.math.BigInteger;
-import java.util.Arrays;
-
-import java.security.*;
-import java.security.interfaces.*;
-
-import sun.security.util.*;
-import sun.security.x509.AlgorithmId;
-
-/**
- * PKCS#1 RSA signatures with the various message digest algorithms.
- * This file contains an abstract base class with all the logic plus
- * a nested static class for each of the message digest algorithms
- * (see end of the file). We support MD2, MD5, SHA-1, SHA-256, SHA-384,
- * and SHA-512.
- *
- * @since   1.5
- * @author  Andreas Sterbenz
- */
-public abstract class RSASignature extends SignatureSpi {
-
-    // we sign an ASN.1 SEQUENCE of AlgorithmId and digest
-    // it has the form 30:xx:30:xx:[digestOID]:05:00:04:xx:[digest]
-    // this means the encoded length is (8 + digestOID.length + digest.length)
-    private static final int baseLength = 8;
-
-    // object identifier for the message digest algorithm used
-    private final ObjectIdentifier digestOID;
-
-    // length of the encoded signature blob
-    private final int encodedLength;
-
-    // message digest implementation we use
-    private final MessageDigest md;
-    // flag indicating whether the digest is reset
-    private boolean digestReset;
-
-    // private key, if initialized for signing
-    private RSAPrivateKey privateKey;
-    // public key, if initialized for verifying
-    private RSAPublicKey publicKey;
-
-    // padding to use, set when the initSign/initVerify is called
-    private RSAPadding padding;
-
-    /**
-     * Construct a new RSASignature. Used by subclasses.
-     */
-    RSASignature(String algorithm, ObjectIdentifier digestOID, int oidLength) {
-        this.digestOID = digestOID;
-        try {
-            md = MessageDigest.getInstance(algorithm);
-        } catch (NoSuchAlgorithmException e) {
-            throw new ProviderException(e);
-        }
-        digestReset = true;
-        encodedLength = baseLength + oidLength + md.getDigestLength();
-    }
-
-    // initialize for verification. See JCA doc
-    protected void engineInitVerify(PublicKey publicKey)
-            throws InvalidKeyException {
-        RSAPublicKey rsaKey = (RSAPublicKey)RSAKeyFactory.toRSAKey(publicKey);
-        this.privateKey = null;
-        this.publicKey = rsaKey;
-        initCommon(rsaKey, null);
-    }
-
-    // initialize for signing. See JCA doc
-    protected void engineInitSign(PrivateKey privateKey)
-            throws InvalidKeyException {
-        engineInitSign(privateKey, null);
-    }
-
-    // initialize for signing. See JCA doc
-    protected void engineInitSign(PrivateKey privateKey, SecureRandom random)
-            throws InvalidKeyException {
-        RSAPrivateKey rsaKey =
-            (RSAPrivateKey)RSAKeyFactory.toRSAKey(privateKey);
-        this.privateKey = rsaKey;
-        this.publicKey = null;
-        initCommon(rsaKey, random);
-    }
-
-    /**
-     * Init code common to sign and verify.
-     */
-    private void initCommon(RSAKey rsaKey, SecureRandom random)
-            throws InvalidKeyException {
-        resetDigest();
-        int keySize = RSACore.getByteLength(rsaKey);
-        try {
-            padding = RSAPadding.getInstance
-                (RSAPadding.PAD_BLOCKTYPE_1, keySize, random);
-        } catch (InvalidAlgorithmParameterException iape) {
-            throw new InvalidKeyException(iape.getMessage());
-        }
-        int maxDataSize = padding.getMaxDataSize();
-        if (encodedLength > maxDataSize) {
-            throw new InvalidKeyException
-                ("Key is too short for this signature algorithm");
-        }
-    }
-
-    /**
-     * Reset the message digest if it is not already reset.
-     */
-    private void resetDigest() {
-        if (digestReset == false) {
-            md.reset();
-            digestReset = true;
-        }
-    }
-
-    /**
-     * Return the message digest value.
-     */
-    private byte[] getDigestValue() {
-        digestReset = true;
-        return md.digest();
-    }
-
-    // update the signature with the plaintext data. See JCA doc
-    protected void engineUpdate(byte b) throws SignatureException {
-        md.update(b);
-        digestReset = false;
-    }
-
-    // update the signature with the plaintext data. See JCA doc
-    protected void engineUpdate(byte[] b, int off, int len)
-            throws SignatureException {
-        md.update(b, off, len);
-        digestReset = false;
-    }
-
-    // update the signature with the plaintext data. See JCA doc
-    protected void engineUpdate(ByteBuffer b) {
-        md.update(b);
-        digestReset = false;
-    }
-
-    // sign the data and return the signature. See JCA doc
-    protected byte[] engineSign() throws SignatureException {
-        byte[] digest = getDigestValue();
-        try {
-            byte[] encoded = encodeSignature(digestOID, digest);
-            byte[] padded = padding.pad(encoded);
-            byte[] encrypted = RSACore.rsa(padded, privateKey);
-            return encrypted;
-        } catch (GeneralSecurityException e) {
-            throw new SignatureException("Could not sign data", e);
-        } catch (IOException e) {
-            throw new SignatureException("Could not encode data", e);
-        }
-    }
-
-    // verify the data and return the result. See JCA doc
-    protected boolean engineVerify(byte[] sigBytes) throws SignatureException {
-        if (sigBytes.length != RSACore.getByteLength(publicKey)) {
-            throw new SignatureException("Signature length not correct: got " +
-                    sigBytes.length + " but was expecting " +
-                    RSACore.getByteLength(publicKey));
-        }
-        byte[] digest = getDigestValue();
-        try {
-            byte[] decrypted = RSACore.rsa(sigBytes, publicKey);
-            byte[] unpadded = padding.unpad(decrypted);
-            byte[] decodedDigest = decodeSignature(digestOID, unpadded);
-            return Arrays.equals(digest, decodedDigest);
-        } catch (javax.crypto.BadPaddingException e) {
-            // occurs if the app has used the wrong RSA public key
-            // or if sigBytes is invalid
-            // return false rather than propagating the exception for
-            // compatibility/ease of use
-            return false;
-        } catch (GeneralSecurityException e) {
-            throw new SignatureException("Signature verification failed", e);
-        } catch (IOException e) {
-            throw new SignatureException("Signature encoding error", e);
-        }
-    }
-
-    /**
-     * Encode the digest, return the to-be-signed data.
-     * Also used by the PKCS#11 provider.
-     */
-    public static byte[] encodeSignature(ObjectIdentifier oid, byte[] digest)
-            throws IOException {
-        DerOutputStream out = new DerOutputStream();
-        new AlgorithmId(oid).encode(out);
-        out.putOctetString(digest);
-        DerValue result =
-            new DerValue(DerValue.tag_Sequence, out.toByteArray());
-        return result.toByteArray();
-    }
-
-    /**
-     * Decode the signature data. Verify that the object identifier matches
-     * and return the message digest.
-     */
-    public static byte[] decodeSignature(ObjectIdentifier oid, byte[] signature)
-            throws IOException {
-        DerInputStream in = new DerInputStream(signature);
-        DerValue[] values = in.getSequence(2);
-        if ((values.length != 2) || (in.available() != 0)) {
-            throw new IOException("SEQUENCE length error");
-        }
-        AlgorithmId algId = AlgorithmId.parse(values[0]);
-        if (algId.getOID().equals(oid) == false) {
-            throw new IOException("ObjectIdentifier mismatch: "
-                + algId.getOID());
-        }
-        if (algId.getEncodedParams() != null) {
-            throw new IOException("Unexpected AlgorithmId parameters");
-        }
-        byte[] digest = values[1].getOctetString();
-        return digest;
-    }
-
-    // set parameter, not supported. See JCA doc
-    protected void engineSetParameter(String param, Object value)
-            throws InvalidParameterException {
-        throw new UnsupportedOperationException("setParameter() not supported");
-    }
-
-    // get parameter, not supported. See JCA doc
-    protected Object engineGetParameter(String param)
-            throws InvalidParameterException {
-        throw new UnsupportedOperationException("getParameter() not supported");
-    }
-
-    // Nested class for MD2withRSA signatures
-    public static final class MD2withRSA extends RSASignature {
-        public MD2withRSA() {
-            super("MD2", AlgorithmId.MD2_oid, 10);
-        }
-    }
-
-    // Nested class for MD5withRSA signatures
-    public static final class MD5withRSA extends RSASignature {
-        public MD5withRSA() {
-            super("MD5", AlgorithmId.MD5_oid, 10);
-        }
-    }
-
-    // Nested class for SHA1withRSA signatures
-    public static final class SHA1withRSA extends RSASignature {
-        public SHA1withRSA() {
-            super("SHA-1", AlgorithmId.SHA_oid, 7);
-        }
-    }
-
-    // Nested class for SHA256withRSA signatures
-    public static final class SHA256withRSA extends RSASignature {
-        public SHA256withRSA() {
-            super("SHA-256", AlgorithmId.SHA256_oid, 11);
-        }
-    }
-
-    // Nested class for SHA384withRSA signatures
-    public static final class SHA384withRSA extends RSASignature {
-        public SHA384withRSA() {
-            super("SHA-384", AlgorithmId.SHA384_oid, 11);
-        }
-    }
-
-    // Nested class for SHA512withRSA signatures
-    public static final class SHA512withRSA extends RSASignature {
-        public SHA512withRSA() {
-            super("SHA-512", AlgorithmId.SHA512_oid, 11);
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/rsa/SunRsaSign.java b/ojluni/src/main/java/sun/security/rsa/SunRsaSign.java
deleted file mode 100755
index a00bf30..0000000
--- a/ojluni/src/main/java/sun/security/rsa/SunRsaSign.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2003, 2011, 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.
- */
-
-package sun.security.rsa;
-
-import java.util.*;
-
-import java.security.*;
-
-import sun.security.action.PutAllAction;
-
-/**
- * Provider class for the RSA signature provider. Supports RSA keyfactory,
- * keypair generation, and RSA signatures.
- *
- * @since   1.5
- * @author  Andreas Sterbenz
- */
-public final class SunRsaSign extends Provider {
-
-    private static final long serialVersionUID = 866040293550393045L;
-
-    public SunRsaSign() {
-        super("SunRsaSign", 1.7d, "Sun RSA signature provider");
-
-        // if there is no security manager installed, put directly into
-        // the provider. Otherwise, create a temporary map and use a
-        // doPrivileged() call at the end to transfer the contents
-        if (System.getSecurityManager() == null) {
-            SunRsaSignEntries.putEntries(this);
-        } else {
-            // use LinkedHashMap to preserve the order of the PRNGs
-            Map<Object, Object> map = new HashMap<>();
-            SunRsaSignEntries.putEntries(map);
-            AccessController.doPrivileged(new PutAllAction(this, map));
-        }
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/ssl/KeyManagerFactoryImpl.java b/ojluni/src/main/java/sun/security/ssl/KeyManagerFactoryImpl.java
deleted file mode 100755
index 5b03f62..0000000
--- a/ojluni/src/main/java/sun/security/ssl/KeyManagerFactoryImpl.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 1999, 2007, 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.
- */
-
-package sun.security.ssl;
-
-import java.util.List;
-import java.util.Collections;
-
-import java.security.*;
-import java.security.KeyStore.*;
-
-import javax.net.ssl.*;
-
-abstract class KeyManagerFactoryImpl extends KeyManagerFactorySpi {
-
-    X509ExtendedKeyManager keyManager;
-    boolean isInitialized;
-
-    KeyManagerFactoryImpl() {
-        // empty
-    }
-
-    /**
-     * Returns one key manager for each type of key material.
-     */
-    protected KeyManager[] engineGetKeyManagers() {
-        if (!isInitialized) {
-            throw new IllegalStateException(
-                        "KeyManagerFactoryImpl is not initialized");
-        }
-        return new KeyManager[] { keyManager };
-    }
-
-    // Factory for the SunX509 keymanager
-    public static final class SunX509 extends KeyManagerFactoryImpl {
-
-        protected void engineInit(KeyStore ks, char[] password) throws
-                KeyStoreException, NoSuchAlgorithmException,
-                UnrecoverableKeyException {
-            if ((ks != null) && SunJSSE.isFIPS()) {
-                if (ks.getProvider() != SunJSSE.cryptoProvider) {
-                    throw new KeyStoreException("FIPS mode: KeyStore must be "
-                        + "from provider " + SunJSSE.cryptoProvider.getName());
-                }
-            }
-            keyManager = new SunX509KeyManagerImpl(ks, password);
-            isInitialized = true;
-        }
-
-        protected void engineInit(ManagerFactoryParameters spec) throws
-                InvalidAlgorithmParameterException {
-            throw new InvalidAlgorithmParameterException(
-                "SunX509KeyManager does not use ManagerFactoryParameters");
-        }
-
-    }
-
-    // Factory for the X509 keymanager
-    public static final class X509 extends KeyManagerFactoryImpl {
-
-        protected void engineInit(KeyStore ks, char[] password) throws
-                KeyStoreException, NoSuchAlgorithmException,
-                UnrecoverableKeyException {
-            if (ks == null) {
-                keyManager = new X509KeyManagerImpl(
-                        Collections.<Builder>emptyList());
-            } else {
-                if (SunJSSE.isFIPS() && (ks.getProvider() != SunJSSE.cryptoProvider)) {
-                    throw new KeyStoreException("FIPS mode: KeyStore must be "
-                        + "from provider " + SunJSSE.cryptoProvider.getName());
-                }
-                try {
-                    Builder builder = Builder.newInstance(ks,
-                        new PasswordProtection(password));
-                    keyManager = new X509KeyManagerImpl(builder);
-                } catch (RuntimeException e) {
-                    throw new KeyStoreException("initialization failed", e);
-                }
-            }
-            isInitialized = true;
-        }
-
-        protected void engineInit(ManagerFactoryParameters params) throws
-                InvalidAlgorithmParameterException {
-            if (params instanceof KeyStoreBuilderParameters == false) {
-                throw new InvalidAlgorithmParameterException(
-                "Parameters must be instance of KeyStoreBuilderParameters");
-            }
-            if (SunJSSE.isFIPS()) {
-                // XXX should be fixed
-                throw new InvalidAlgorithmParameterException
-                    ("FIPS mode: KeyStoreBuilderParameters not supported");
-            }
-            List<Builder> builders =
-                ((KeyStoreBuilderParameters)params).getParameters();
-            keyManager = new X509KeyManagerImpl(builders);
-            isInitialized = true;
-        }
-
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/security/ssl/krb5/KerberosClientKeyExchangeImpl.java b/ojluni/src/main/java/sun/security/ssl/krb5/KerberosClientKeyExchangeImpl.java
deleted file mode 100755
index 7e220bc..0000000
--- a/ojluni/src/main/java/sun/security/ssl/krb5/KerberosClientKeyExchangeImpl.java
+++ /dev/null
@@ -1,419 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-package sun.security.ssl.krb5;
-
-import java.io.IOException;
-import java.io.PrintStream;
-import java.security.AccessController;
-import java.security.AccessControlContext;
-import java.security.PrivilegedExceptionAction;
-import java.security.PrivilegedActionException;
-import java.security.SecureRandom;
-import java.net.InetAddress;
-
-import javax.crypto.SecretKey;
-import javax.security.auth.kerberos.KerberosTicket;
-import javax.security.auth.kerberos.KerberosKey;
-import javax.security.auth.kerberos.KerberosPrincipal;
-import javax.security.auth.kerberos.ServicePermission;
-import sun.security.jgss.GSSCaller;
-
-import sun.security.krb5.EncryptionKey;
-import sun.security.krb5.EncryptedData;
-import sun.security.krb5.PrincipalName;
-import sun.security.krb5.Realm;
-import sun.security.krb5.internal.Ticket;
-import sun.security.krb5.internal.EncTicketPart;
-import sun.security.krb5.internal.crypto.KeyUsage;
-
-import sun.security.jgss.krb5.Krb5Util;
-import sun.security.krb5.KrbException;
-import sun.security.krb5.internal.Krb5;
-
-import sun.security.ssl.Debug;
-import sun.security.ssl.HandshakeInStream;
-import sun.security.ssl.HandshakeOutStream;
-import sun.security.ssl.ProtocolVersion;
-
-/**
- * This is Kerberos option in the client key exchange message
- * (CLIENT -> SERVER). It holds the Kerberos ticket and the encrypted
- * premaster secret encrypted with the session key sealed in the ticket.
- * From RFC 2712:
- *  struct
- *  {
- *    opaque Ticket;
- *    opaque authenticator;            // optional
- *    opaque EncryptedPreMasterSecret; // encrypted with the session key
- *                                     // which is sealed in the ticket
- *  } KerberosWrapper;
- *
- *
- * Ticket and authenticator are encrypted as per RFC 1510 (in ASN.1)
- * Encrypted pre-master secret has the same structure as it does for RSA
- * except for Kerberos, the encryption key is the session key instead of
- * the RSA public key.
- *
- * XXX authenticator currently ignored
- *
- */
-public final class KerberosClientKeyExchangeImpl
-    extends sun.security.ssl.KerberosClientKeyExchange {
-
-    private KerberosPreMasterSecret preMaster;
-    private byte[] encodedTicket;
-    private KerberosPrincipal peerPrincipal;
-    private KerberosPrincipal localPrincipal;
-
-    public KerberosClientKeyExchangeImpl() {
-    }
-
-    /**
-     * Creates an instance of KerberosClientKeyExchange consisting of the
-     * Kerberos service ticket, authenticator and encrypted premaster secret.
-     * Called by client handshaker.
-     *
-     * @param serverName name of server with which to do handshake;
-     *             this is used to get the Kerberos service ticket
-     * @param protocolVersion Maximum version supported by client (i.e,
-     *          version it requested in client hello)
-     * @param rand random number generator to use for generating pre-master
-     *          secret
-     */
-    @Override
-    public void init(String serverName, boolean isLoopback,
-        AccessControlContext acc, ProtocolVersion protocolVersion,
-        SecureRandom rand) throws IOException {
-
-         // Get service ticket
-         KerberosTicket ticket = getServiceTicket(serverName, isLoopback, acc);
-         encodedTicket = ticket.getEncoded();
-
-         // Record the Kerberos principals
-         peerPrincipal = ticket.getServer();
-         localPrincipal = ticket.getClient();
-
-         // Optional authenticator, encrypted using session key,
-         // currently ignored
-
-         // Generate premaster secret and encrypt it using session key
-         EncryptionKey sessionKey = new EncryptionKey(
-                                        ticket.getSessionKeyType(),
-                                        ticket.getSessionKey().getEncoded());
-
-         preMaster = new KerberosPreMasterSecret(protocolVersion,
-             rand, sessionKey);
-    }
-
-    /**
-     * Creates an instance of KerberosClientKeyExchange from its ASN.1 encoding.
-     * Used by ServerHandshaker to verify and obtain premaster secret.
-     *
-     * @param protocolVersion current protocol version
-     * @param clientVersion version requested by client in its ClientHello;
-     *          used by premaster secret version check
-     * @param rand random number generator used for generating random
-     *          premaster secret if ticket and/or premaster verification fails
-     * @param input inputstream from which to get ASN.1-encoded KerberosWrapper
-     * @param serverKey server's master secret key
-     */
-    @Override
-    public void init(ProtocolVersion protocolVersion,
-        ProtocolVersion clientVersion,
-        SecureRandom rand, HandshakeInStream input, SecretKey[] secretKeys)
-        throws IOException {
-
-        KerberosKey[] serverKeys = (KerberosKey[])secretKeys;
-
-        // Read ticket
-        encodedTicket = input.getBytes16();
-
-        if (debug != null && Debug.isOn("verbose")) {
-            Debug.println(System.out,
-                "encoded Kerberos service ticket", encodedTicket);
-        }
-
-        EncryptionKey sessionKey = null;
-
-        try {
-            Ticket t = new Ticket(encodedTicket);
-
-            EncryptedData encPart = t.encPart;
-            PrincipalName ticketSname = t.sname;
-            Realm ticketRealm = t.realm;
-
-            String serverPrincipal = serverKeys[0].getPrincipal().getName();
-
-            /*
-             * permission to access and use the secret key of the Kerberized
-             * "host" service is done in ServerHandshaker.getKerberosKeys()
-             * to ensure server has the permission to use the secret key
-             * before promising the client
-             */
-
-            // Check that ticket Sname matches serverPrincipal
-            String ticketPrinc = ticketSname.toString().concat("@" +
-                                        ticketRealm.toString());
-            if (!ticketPrinc.equals(serverPrincipal)) {
-                if (debug != null && Debug.isOn("handshake"))
-                   System.out.println("Service principal in Ticket does not"
-                        + " match associated principal in KerberosKey");
-                throw new IOException("Server principal is " +
-                    serverPrincipal + " but ticket is for " +
-                    ticketPrinc);
-            }
-
-            // See if we have the right key to decrypt the ticket to get
-            // the session key.
-            int encPartKeyType = encPart.getEType();
-            Integer encPartKeyVersion = encPart.getKeyVersionNumber();
-            KerberosKey dkey = null;
-            try {
-                dkey = findKey(encPartKeyType, encPartKeyVersion, serverKeys);
-            } catch (KrbException ke) { // a kvno mismatch
-                throw new IOException(
-                        "Cannot find key matching version number", ke);
-            }
-            if (dkey == null) {
-                // %%% Should print string repr of etype
-                throw new IOException(
-        "Cannot find key of appropriate type to decrypt ticket - need etype " +
-                                   encPartKeyType);
-            }
-
-            EncryptionKey secretKey = new EncryptionKey(
-                encPartKeyType,
-                dkey.getEncoded());
-
-            // Decrypt encPart using server's secret key
-            byte[] bytes = encPart.decrypt(secretKey, KeyUsage.KU_TICKET);
-
-            // Reset data stream after decryption, remove redundant bytes
-            byte[] temp = encPart.reset(bytes);
-            EncTicketPart encTicketPart = new EncTicketPart(temp);
-
-            // Record the Kerberos Principals
-            peerPrincipal =
-                new KerberosPrincipal(encTicketPart.cname.getName());
-            localPrincipal = new KerberosPrincipal(ticketSname.getName());
-
-            sessionKey = encTicketPart.key;
-
-            if (debug != null && Debug.isOn("handshake")) {
-                System.out.println("server principal: " + serverPrincipal);
-                System.out.println("realm: " + encTicketPart.crealm.toString());
-                System.out.println("cname: " + encTicketPart.cname.toString());
-            }
-        } catch (IOException e) {
-            throw e;
-        } catch (Exception e) {
-            if (debug != null && Debug.isOn("handshake")) {
-                System.out.println("KerberosWrapper error getting session key,"
-                        + " generating random secret (" + e.getMessage() + ")");
-            }
-            sessionKey = null;
-        }
-
-        input.getBytes16();   // XXX Read and ignore authenticator
-
-        if (sessionKey != null) {
-            preMaster = new KerberosPreMasterSecret(protocolVersion,
-                clientVersion, rand, input, sessionKey);
-        } else {
-            // Generate bogus premaster secret
-            preMaster = new KerberosPreMasterSecret(clientVersion, rand);
-        }
-    }
-
-    @Override
-    public int messageLength() {
-        return (6 + encodedTicket.length + preMaster.getEncrypted().length);
-    }
-
-    @Override
-    public void send(HandshakeOutStream s) throws IOException {
-        s.putBytes16(encodedTicket);
-        s.putBytes16(null); // XXX no authenticator
-        s.putBytes16(preMaster.getEncrypted());
-    }
-
-    @Override
-    public void print(PrintStream s) throws IOException {
-        s.println("*** ClientKeyExchange, Kerberos");
-
-        if (debug != null && Debug.isOn("verbose")) {
-            Debug.println(s, "Kerberos service ticket", encodedTicket);
-            Debug.println(s, "Random Secret", preMaster.getUnencrypted());
-            Debug.println(s, "Encrypted random Secret",
-                preMaster.getEncrypted());
-        }
-    }
-
-    // Similar to sun.security.jgss.krb5.Krb5InitCredenetial/Krb5Context
-    private static KerberosTicket getServiceTicket(String srvName,
-        boolean isLoopback, final AccessControlContext acc) throws IOException {
-
-        // get the local hostname if srvName is loopback address
-        String serverName = srvName;
-        if (isLoopback) {
-            String localHost = java.security.AccessController.doPrivileged(
-                new java.security.PrivilegedAction<String>() {
-                public String run() {
-                    String hostname;
-                    try {
-                        hostname = InetAddress.getLocalHost().getHostName();
-                    } catch (java.net.UnknownHostException e) {
-                        hostname = "localhost";
-                    }
-                    return hostname;
-                }
-            });
-          serverName = localHost;
-        }
-
-        // Resolve serverName (possibly in IP addr form) to Kerberos principal
-        // name for service with hostname
-        String serviceName = "host/" + serverName;
-        PrincipalName principal;
-        try {
-            principal = new PrincipalName(serviceName,
-                                PrincipalName.KRB_NT_SRV_HST);
-        } catch (SecurityException se) {
-            throw se;
-        } catch (Exception e) {
-            IOException ioe = new IOException("Invalid service principal" +
-                                " name: " + serviceName);
-            ioe.initCause(e);
-            throw ioe;
-        }
-        String realm = principal.getRealmAsString();
-
-        final String serverPrincipal = principal.toString();
-        final String tgsPrincipal = "krbtgt/" + realm + "@" + realm;
-        final String clientPrincipal = null;  // use default
-
-
-        // check permission to obtain a service ticket to initiate a
-        // context with the "host" service
-        SecurityManager sm = System.getSecurityManager();
-        if (sm != null) {
-           sm.checkPermission(new ServicePermission(serverPrincipal,
-                                "initiate"), acc);
-        }
-
-        try {
-            KerberosTicket ticket = AccessController.doPrivileged(
-                new PrivilegedExceptionAction<KerberosTicket>() {
-                public KerberosTicket run() throws Exception {
-                    return Krb5Util.getTicketFromSubjectAndTgs(
-                        GSSCaller.CALLER_SSL_CLIENT,
-                        clientPrincipal, serverPrincipal,
-                        tgsPrincipal, acc);
-                        }});
-
-            if (ticket == null) {
-                throw new IOException("Failed to find any kerberos service" +
-                        " ticket for " + serverPrincipal);
-            }
-            return ticket;
-        } catch (PrivilegedActionException e) {
-            IOException ioe = new IOException(
-                "Attempt to obtain kerberos service ticket for " +
-                        serverPrincipal + " failed!");
-            ioe.initCause(e);
-            throw ioe;
-        }
-    }
-
-    @Override
-    public byte[] getUnencryptedPreMasterSecret() {
-        return preMaster.getUnencrypted();
-    }
-
-    @Override
-    public KerberosPrincipal getPeerPrincipal() {
-        return peerPrincipal;
-    }
-
-    @Override
-    public KerberosPrincipal getLocalPrincipal() {
-        return localPrincipal;
-    }
-
-    /**
-     * Determines if a kvno matches another kvno. Used in the method
-     * findKey(etype, version, keys). Always returns true if either input
-     * is null or zero, in case any side does not have kvno info available.
-     *
-     * Note: zero is included because N/A is not a legal value for kvno
-     * in javax.security.auth.kerberos.KerberosKey. Therefore, the info
-     * that the kvno is N/A might be lost when converting between
-     * EncryptionKey and KerberosKey.
-     */
-    private static boolean versionMatches(Integer v1, int v2) {
-        if (v1 == null || v1 == 0 || v2 == 0) {
-            return true;
-        }
-        return v1.equals(v2);
-    }
-
-    private static KerberosKey findKey(int etype, Integer version,
-            KerberosKey[] keys) throws KrbException {
-        int ktype;
-        boolean etypeFound = false;
-        for (int i = 0; i < keys.length; i++) {
-            ktype = keys[i].getKeyType();
-            if (etype == ktype) {
-                etypeFound = true;
-                if (versionMatches(version, keys[i].getVersionNumber())) {
-                    return keys[i];
-                }
-            }
-        }
-        // Key not found.
-        // %%% kludge to allow DES keys to be used for diff etypes
-        if ((etype == EncryptedData.ETYPE_DES_CBC_CRC ||
-            etype == EncryptedData.ETYPE_DES_CBC_MD5)) {
-            for (int i = 0; i < keys.length; i++) {
-                ktype = keys[i].getKeyType();
-                if (ktype == EncryptedData.ETYPE_DES_CBC_CRC ||
-                        ktype == EncryptedData.ETYPE_DES_CBC_MD5) {
-                    etypeFound = true;
-                    if (versionMatches(version, keys[i].getVersionNumber())) {
-                        return new KerberosKey(keys[i].getPrincipal(),
-                            keys[i].getEncoded(),
-                            etype,
-                            keys[i].getVersionNumber());
-                    }
-                }
-            }
-        }
-        if (etypeFound) {
-            throw new KrbException(Krb5.KRB_AP_ERR_BADKEYVER);
-        }
-        return null;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/ssl/krb5/KerberosPreMasterSecret.java b/ojluni/src/main/java/sun/security/ssl/krb5/KerberosPreMasterSecret.java
deleted file mode 100755
index 84c96a3..0000000
--- a/ojluni/src/main/java/sun/security/ssl/krb5/KerberosPreMasterSecret.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright (c) 2003, 2010, 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.
- */
-
-package sun.security.ssl.krb5;
-
-import java.io.*;
-import java.security.*;
-import java.util.Arrays;
-
-import javax.net.ssl.*;
-
-import sun.security.krb5.EncryptionKey;
-import sun.security.krb5.EncryptedData;
-import sun.security.krb5.KrbException;
-import sun.security.krb5.internal.crypto.KeyUsage;
-
-import sun.security.ssl.Debug;
-import sun.security.ssl.HandshakeInStream;
-import sun.security.ssl.HandshakeMessage;
-import sun.security.ssl.ProtocolVersion;
-
-/**
- * This is the Kerberos premaster secret in the Kerberos client key
- * exchange message (CLIENT --> SERVER); it holds the
- * Kerberos-encrypted pre-master secret. The secret is encrypted using the
- * Kerberos session key.  The padding and size of the resulting message
- * depends on the session key type, but the pre-master secret is
- * always exactly 48 bytes.
- *
- */
-final class KerberosPreMasterSecret {
-
-    private ProtocolVersion protocolVersion; // preMaster [0,1]
-    private byte preMaster[];           // 48 bytes
-    private byte encrypted[];
-
-    /**
-     * Constructor used by client to generate premaster secret.
-     *
-     * Client randomly creates a pre-master secret and encrypts it
-     * using the Kerberos session key; only the server can decrypt
-     * it, using the session key available in the service ticket.
-     *
-     * @param protocolVersion used to set preMaster[0,1]
-     * @param generator random number generator for generating premaster secret
-     * @param sessionKey Kerberos session key for encrypting premaster secret
-     */
-    KerberosPreMasterSecret(ProtocolVersion protocolVersion,
-        SecureRandom generator, EncryptionKey sessionKey) throws IOException {
-
-        if (sessionKey.getEType() ==
-            EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD) {
-            throw new IOException(
-               "session keys with des3-cbc-hmac-sha1-kd encryption type " +
-               "are not supported for TLS Kerberos cipher suites");
-        }
-
-        this.protocolVersion = protocolVersion;
-        preMaster = generatePreMaster(generator, protocolVersion);
-
-        // Encrypt premaster secret
-        try {
-            EncryptedData eData = new EncryptedData(sessionKey, preMaster,
-                KeyUsage.KU_UNKNOWN);
-            encrypted = eData.getBytes();  // not ASN.1 encoded.
-
-        } catch (KrbException e) {
-            throw (SSLKeyException)new SSLKeyException
-                ("Kerberos premaster secret error").initCause(e);
-        }
-    }
-
-    /*
-     * Constructor used by server to decrypt encrypted premaster secret.
-     * The protocol version in preMaster[0,1] must match either currentVersion
-     * or clientVersion, otherwise, the premaster secret is set to
-     * a random one to foil possible attack.
-     *
-     * @param currentVersion version of protocol being used
-     * @param clientVersion version requested by client
-     * @param generator random number generator used to generate
-     *        bogus premaster secret if premaster secret verification fails
-     * @param input input stream from which to read the encrypted
-     *        premaster secret
-     * @param sessionKey Kerberos session key to be used for decryption
-     */
-    KerberosPreMasterSecret(ProtocolVersion currentVersion,
-        ProtocolVersion clientVersion,
-        SecureRandom generator, HandshakeInStream input,
-        EncryptionKey sessionKey) throws IOException {
-
-         // Extract encrypted premaster secret from message
-         encrypted = input.getBytes16();
-
-         if (HandshakeMessage.debug != null && Debug.isOn("handshake")) {
-            if (encrypted != null) {
-                Debug.println(System.out,
-                     "encrypted premaster secret", encrypted);
-            }
-         }
-
-        if (sessionKey.getEType() ==
-            EncryptedData.ETYPE_DES3_CBC_HMAC_SHA1_KD) {
-            throw new IOException(
-               "session keys with des3-cbc-hmac-sha1-kd encryption type " +
-               "are not supported for TLS Kerberos cipher suites");
-        }
-
-        // Decrypt premaster secret
-        try {
-            EncryptedData data = new EncryptedData(sessionKey.getEType(),
-                        null /* optional kvno */, encrypted);
-
-            byte[] temp = data.decrypt(sessionKey, KeyUsage.KU_UNKNOWN);
-            if (HandshakeMessage.debug != null && Debug.isOn("handshake")) {
-                 if (encrypted != null) {
-                     Debug.println(System.out,
-                         "decrypted premaster secret", temp);
-                 }
-            }
-
-            // Remove padding bytes after decryption. Only DES and DES3 have
-            // paddings and we don't support DES3 in TLS (see above)
-
-            if (temp.length == 52 &&
-                    data.getEType() == EncryptedData.ETYPE_DES_CBC_CRC) {
-                // For des-cbc-crc, 4 paddings. Value can be 0x04 or 0x00.
-                if (paddingByteIs(temp, 52, (byte)4) ||
-                        paddingByteIs(temp, 52, (byte)0)) {
-                    temp = Arrays.copyOf(temp, 48);
-                }
-            } else if (temp.length == 56 &&
-                    data.getEType() == EncryptedData.ETYPE_DES_CBC_MD5) {
-                // For des-cbc-md5, 8 paddings with 0x08, or no padding
-                if (paddingByteIs(temp, 56, (byte)8)) {
-                    temp = Arrays.copyOf(temp, 48);
-                }
-            }
-
-            preMaster = temp;
-
-            protocolVersion = ProtocolVersion.valueOf(preMaster[0],
-                 preMaster[1]);
-            if (HandshakeMessage.debug != null && Debug.isOn("handshake")) {
-                 System.out.println("Kerberos PreMasterSecret version: "
-                        + protocolVersion);
-            }
-        } catch (Exception e) {
-            // catch exception & process below
-            preMaster = null;
-            protocolVersion = currentVersion;
-        }
-
-        // check if the premaster secret version is ok
-        // the specification says that it must be the maximum version supported
-        // by the client from its ClientHello message. However, many
-        // old implementations send the negotiated version, so accept both
-        // for SSL v3.0 and TLS v1.0.
-        // NOTE that we may be comparing two unsupported version numbers in
-        // the second case, which is why we cannot use object references
-        // equality in this special case
-        boolean versionMismatch = (protocolVersion.v != clientVersion.v);
-
-        /*
-         * we never checked the client_version in server side
-         * for TLS v1.0 and SSL v3.0. For compatibility, we
-         * maintain this behavior.
-         */
-        if (versionMismatch && (clientVersion.v <= 0x0301)) {
-            versionMismatch = (protocolVersion.v != currentVersion.v);
-        }
-
-        /*
-         * Bogus decrypted ClientKeyExchange? If so, conjure a
-         * a random preMaster secret that will fail later during
-         * Finished message processing. This is a countermeasure against
-         * the "interactive RSA PKCS#1 encryption envelop attack" reported
-         * in June 1998. Preserving the executation path will
-         * mitigate timing attacks and force consistent error handling
-         * that will prevent an attacking client from differentiating
-         * different kinds of decrypted ClientKeyExchange bogosities.
-         */
-         if ((preMaster == null) || (preMaster.length != 48)
-                || versionMismatch) {
-            if (HandshakeMessage.debug != null && Debug.isOn("handshake")) {
-                System.out.println("Kerberos PreMasterSecret error, "
-                                   + "generating random secret");
-                if (preMaster != null) {
-                    Debug.println(System.out, "Invalid secret", preMaster);
-                }
-            }
-
-            /*
-             * Randomize the preMaster secret with the
-             * ClientHello.client_version, as will produce invalid master
-             * secret to prevent the attacks.
-             */
-            preMaster = generatePreMaster(generator, clientVersion);
-            protocolVersion = clientVersion;
-        }
-    }
-
-    /**
-     * Checks if all paddings of data are b
-     * @param data the block with padding
-     * @param len length of data, >= 48
-     * @param b expected padding byte
-     */
-    private static boolean paddingByteIs(byte[] data, int len, byte b) {
-        for (int i=48; i<len; i++) {
-            if (data[i] != b) return false;
-        }
-        return true;
-    }
-
-    /*
-     * Used by server to generate premaster secret in case of
-     * problem decoding ticket.
-     *
-     * @param protocolVersion used for preMaster[0,1]
-     * @param generator random number generator to use for generating secret.
-     */
-    KerberosPreMasterSecret(ProtocolVersion protocolVersion,
-        SecureRandom generator) {
-
-        this.protocolVersion = protocolVersion;
-        preMaster = generatePreMaster(generator, protocolVersion);
-    }
-
-    private static byte[] generatePreMaster(SecureRandom rand,
-        ProtocolVersion ver) {
-
-        byte[] pm = new byte[48];
-        rand.nextBytes(pm);
-        pm[0] = ver.major;
-        pm[1] = ver.minor;
-
-        return pm;
-    }
-
-    // Clone not needed; internal use only
-    byte[] getUnencrypted() {
-        return preMaster;
-    }
-
-    // Clone not needed; internal use only
-    byte[] getEncrypted() {
-        return encrypted;
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/ssl/krb5/Krb5ProxyImpl.java b/ojluni/src/main/java/sun/security/ssl/krb5/Krb5ProxyImpl.java
deleted file mode 100755
index bc22a77..0000000
--- a/ojluni/src/main/java/sun/security/ssl/krb5/Krb5ProxyImpl.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2009, 2012, 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.
- */
-
-package sun.security.ssl.krb5;
-
-import java.security.AccessControlContext;
-import java.security.Permission;
-import java.security.Principal;
-import javax.crypto.SecretKey;
-import javax.security.auth.Subject;
-import javax.security.auth.kerberos.KerberosKey;
-import javax.security.auth.kerberos.ServicePermission;
-import javax.security.auth.login.LoginException;
-
-import sun.security.jgss.GSSCaller;
-import sun.security.jgss.krb5.Krb5Util;
-import sun.security.krb5.PrincipalName;
-import sun.security.ssl.Krb5Proxy;
-
-/**
- * An implementation of Krb5Proxy that simply delegates to the appropriate
- * Kerberos APIs.
- */
-public class Krb5ProxyImpl implements Krb5Proxy {
-
-    public Krb5ProxyImpl() { }
-
-    @Override
-    public Subject getClientSubject(AccessControlContext acc)
-            throws LoginException {
-        return Krb5Util.getSubject(GSSCaller.CALLER_SSL_CLIENT, acc);
-    }
-
-    @Override
-    public Subject getServerSubject(AccessControlContext acc)
-            throws LoginException {
-        return Krb5Util.getSubject(GSSCaller.CALLER_SSL_SERVER, acc);
-    }
-
-    @Override
-    public SecretKey[] getServerKeys(AccessControlContext acc)
-            throws LoginException {
-        Krb5Util.ServiceCreds serviceCreds =
-            Krb5Util.getServiceCreds(GSSCaller.CALLER_SSL_SERVER, null, acc);
-        return serviceCreds != null ? serviceCreds.getKKeys() :
-                                        new KerberosKey[0];
-    }
-
-    @Override
-    public String getServerPrincipalName(SecretKey kerberosKey) {
-        return ((KerberosKey)kerberosKey).getPrincipal().getName();
-    }
-
-    @Override
-    public String getPrincipalHostName(Principal principal) {
-        if (principal == null) {
-           return null;
-        }
-        String hostName = null;
-        try {
-            PrincipalName princName =
-                new PrincipalName(principal.getName(),
-                        PrincipalName.KRB_NT_SRV_HST);
-            String[] nameParts = princName.getNameStrings();
-            if (nameParts.length >= 2) {
-                hostName = nameParts[1];
-            }
-        } catch (Exception e) {
-            // ignore
-        }
-        return hostName;
-    }
-
-
-    @Override
-    public Permission getServicePermission(String principalName,
-            String action) {
-        return new ServicePermission(principalName, action);
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/timestamp/HttpTimestamper.java b/ojluni/src/main/java/sun/security/timestamp/HttpTimestamper.java
deleted file mode 100755
index ca3fab3..0000000
--- a/ojluni/src/main/java/sun/security/timestamp/HttpTimestamper.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (c) 2003, 2009, 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.
- */
-
-package sun.security.timestamp;
-
-import java.io.BufferedInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.net.HttpURLConnection;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.Arrays;
-
-import sun.misc.IOUtils;
-import sun.security.pkcs.*;
-
-/**
- * A timestamper that communicates with a Timestamping Authority (TSA)
- * over HTTP.
- * It supports the Time-Stamp Protocol defined in:
- * <a href="http://www.ietf.org/rfc/rfc3161.txt">RFC 3161</a>.
- *
- * @since 1.5
- * @author Vincent Ryan
- */
-
-public class HttpTimestamper implements Timestamper {
-
-    private static final int CONNECT_TIMEOUT = 15000; // 15 seconds
-
-    // The MIME type for a timestamp query
-    private static final String TS_QUERY_MIME_TYPE =
-        "application/timestamp-query";
-
-    // The MIME type for a timestamp reply
-    private static final String TS_REPLY_MIME_TYPE =
-        "application/timestamp-reply";
-
-    private static final boolean DEBUG = false;
-
-    /*
-     * HTTP URL identifying the location of the TSA
-     */
-    private String tsaUrl = null;
-
-    /**
-     * Creates a timestamper that connects to the specified TSA.
-     *
-     * @param tsa The location of the TSA. It must be an HTTP URL.
-     */
-    public HttpTimestamper(String tsaUrl) {
-        this.tsaUrl = tsaUrl;
-    }
-
-    /**
-     * Connects to the TSA and requests a timestamp.
-     *
-     * @param tsQuery The timestamp query.
-     * @return The result of the timestamp query.
-     * @throws IOException The exception is thrown if a problem occurs while
-     *         communicating with the TSA.
-     */
-    public TSResponse generateTimestamp(TSRequest tsQuery) throws IOException {
-
-        HttpURLConnection connection =
-            (HttpURLConnection) new URL(tsaUrl).openConnection();
-        connection.setDoOutput(true);
-        connection.setUseCaches(false); // ignore cache
-        connection.setRequestProperty("Content-Type", TS_QUERY_MIME_TYPE);
-        connection.setRequestMethod("POST");
-        // Avoids the "hang" when a proxy is required but none has been set.
-        connection.setConnectTimeout(CONNECT_TIMEOUT);
-
-        if (DEBUG) {
-            Set headers = connection.getRequestProperties().entrySet();
-            System.out.println(connection.getRequestMethod() + " " + tsaUrl +
-                " HTTP/1.1");
-            for (Iterator i = headers.iterator(); i.hasNext(); ) {
-                System.out.println("  " + i.next());
-            }
-            System.out.println();
-        }
-        connection.connect(); // No HTTP authentication is performed
-
-        // Send the request
-        DataOutputStream output = null;
-        try {
-            output = new DataOutputStream(connection.getOutputStream());
-            byte[] request = tsQuery.encode();
-            output.write(request, 0, request.length);
-            output.flush();
-            if (DEBUG) {
-                System.out.println("sent timestamp query (length=" +
-                        request.length + ")");
-            }
-        } finally {
-            if (output != null) {
-                output.close();
-            }
-        }
-
-        // Receive the reply
-        BufferedInputStream input = null;
-        byte[] replyBuffer = null;
-        try {
-            input = new BufferedInputStream(connection.getInputStream());
-            if (DEBUG) {
-                String header = connection.getHeaderField(0);
-                System.out.println(header);
-                int i = 1;
-                while ((header = connection.getHeaderField(i)) != null) {
-                    String key = connection.getHeaderFieldKey(i);
-                    System.out.println("  " + ((key==null) ? "" : key + ": ") +
-                        header);
-                    i++;
-                }
-                System.out.println();
-            }
-            verifyMimeType(connection.getContentType());
-
-            int total = 0;
-            int contentLength = connection.getContentLength();
-            replyBuffer = IOUtils.readFully(input, contentLength, false);
-
-            if (DEBUG) {
-                System.out.println("received timestamp response (length=" +
-                        total + ")");
-            }
-        } finally {
-            if (input != null) {
-                input.close();
-            }
-        }
-        return new TSResponse(replyBuffer);
-    }
-
-    /*
-     * Checks that the MIME content type is a timestamp reply.
-     *
-     * @param contentType The MIME content type to be checked.
-     * @throws IOException The exception is thrown if a mismatch occurs.
-     */
-    private static void verifyMimeType(String contentType) throws IOException {
-        if (! TS_REPLY_MIME_TYPE.equalsIgnoreCase(contentType)) {
-            throw new IOException("MIME Content-Type is not " +
-                TS_REPLY_MIME_TYPE);
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/timestamp/TSRequest.java b/ojluni/src/main/java/sun/security/timestamp/TSRequest.java
deleted file mode 100755
index 241811f..0000000
--- a/ojluni/src/main/java/sun/security/timestamp/TSRequest.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.security.timestamp;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.cert.X509Extension;
-import sun.security.util.DerValue;
-import sun.security.util.DerOutputStream;
-import sun.security.util.ObjectIdentifier;
-
-/**
- * This class provides a timestamp request, as defined in
- * <a href="http://www.ietf.org/rfc/rfc3161.txt">RFC 3161</a>.
- *
- * The TimeStampReq ASN.1 type has the following definition:
- * <pre>
- *
- *     TimeStampReq ::= SEQUENCE {
- *         version           INTEGER { v1(1) },
- *         messageImprint    MessageImprint
- *           -- a hash algorithm OID and the hash value of the data to be
- *           -- time-stamped.
- *         reqPolicy         TSAPolicyId    OPTIONAL,
- *         nonce             INTEGER        OPTIONAL,
- *         certReq           BOOLEAN        DEFAULT FALSE,
- *         extensions        [0] IMPLICIT Extensions OPTIONAL }
- *
- *     MessageImprint ::= SEQUENCE {
- *         hashAlgorithm     AlgorithmIdentifier,
- *         hashedMessage     OCTET STRING }
- *
- *     TSAPolicyId ::= OBJECT IDENTIFIER
- *
- * </pre>
- *
- * @since 1.5
- * @author Vincent Ryan
- * @see Timestamper
- */
-
-public class TSRequest {
-
-    private static final ObjectIdentifier SHA1_OID;
-    private static final ObjectIdentifier MD5_OID;
-    static {
-        ObjectIdentifier sha1 = null;
-        ObjectIdentifier md5 = null;
-        try {
-            sha1 = new ObjectIdentifier("1.3.14.3.2.26");
-            md5 = new ObjectIdentifier("1.2.840.113549.2.5");
-        } catch (IOException ioe) {
-            // should not happen
-        }
-        SHA1_OID = sha1;
-        MD5_OID = md5;
-    }
-
-    private int version = 1;
-
-    private ObjectIdentifier hashAlgorithmId = null;
-
-    private byte[] hashValue;
-
-    private String policyId = null;
-
-    private BigInteger nonce = null;
-
-    private boolean returnCertificate = false;
-
-    private X509Extension[] extensions = null;
-
-    /**
-     * Constructs a timestamp request for the supplied hash value..
-     *
-     * @param hashValue     The hash value. This is the data to be timestamped.
-     * @param hashAlgorithm The name of the hash algorithm.
-     */
-    public TSRequest(byte[] hashValue, String hashAlgorithm) {
-
-        // Check the common hash algorithms
-        if ("MD5".equalsIgnoreCase(hashAlgorithm)) {
-            hashAlgorithmId = MD5_OID;
-            // Check that the hash value matches the hash algorithm
-            assert hashValue.length == 16;
-
-        } else if ("SHA-1".equalsIgnoreCase(hashAlgorithm) ||
-            "SHA".equalsIgnoreCase(hashAlgorithm) ||
-            "SHA1".equalsIgnoreCase(hashAlgorithm)) {
-            hashAlgorithmId = SHA1_OID;
-            // Check that the hash value matches the hash algorithm
-            assert hashValue.length == 20;
-
-        }
-        // Clone the hash value
-        this.hashValue = new byte[hashValue.length];
-        System.arraycopy(hashValue, 0, this.hashValue, 0, hashValue.length);
-    }
-
-    /**
-     * Sets the Time-Stamp Protocol version.
-     *
-     * @param version The TSP version.
-     */
-    public void setVersion(int version) {
-        this.version = version;
-    }
-
-    /**
-     * Sets an object identifier for the Time-Stamp Protocol policy.
-     *
-     * @param version The policy object identifier.
-     */
-    public void setPolicyId(String policyId) {
-        this.policyId = policyId;
-    }
-
-    /**
-     * Sets a nonce.
-     * A nonce is a single-use random number.
-     *
-     * @param nonce The nonce value.
-     */
-    public void setNonce(BigInteger nonce) {
-        this.nonce = nonce;
-    }
-
-    /**
-     * Request that the TSA include its signing certificate in the response.
-     *
-     * @param returnCertificate True if the TSA should return its signing
-     *                          certificate. By default it is not returned.
-     */
-    public void requestCertificate(boolean returnCertificate) {
-        this.returnCertificate = returnCertificate;
-    }
-
-    /**
-     * Sets the Time-Stamp Protocol extensions.
-     *
-     * @param extensions The protocol extensions.
-     */
-    public void setExtensions(X509Extension[] extensions) {
-        this.extensions = extensions;
-    }
-
-    public byte[] encode() throws IOException {
-
-        DerOutputStream request = new DerOutputStream();
-
-        // encode version
-        request.putInteger(version);
-
-        // encode messageImprint
-        DerOutputStream messageImprint = new DerOutputStream();
-        DerOutputStream hashAlgorithm = new DerOutputStream();
-        hashAlgorithm.putOID(hashAlgorithmId);
-        messageImprint.write(DerValue.tag_Sequence, hashAlgorithm);
-        messageImprint.putOctetString(hashValue);
-        request.write(DerValue.tag_Sequence, messageImprint);
-
-        // encode optional elements
-
-        if (policyId != null) {
-            request.putOID(new ObjectIdentifier(policyId));
-        }
-        if (nonce != null) {
-            request.putInteger(nonce);
-        }
-        if (returnCertificate) {
-            request.putBoolean(true);
-        }
-
-        DerOutputStream out = new DerOutputStream();
-        out.write(DerValue.tag_Sequence, request);
-        return out.toByteArray();
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/timestamp/TSResponse.java b/ojluni/src/main/java/sun/security/timestamp/TSResponse.java
deleted file mode 100755
index 15bf851..0000000
--- a/ojluni/src/main/java/sun/security/timestamp/TSResponse.java
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- * Copyright (c) 2003, 2004, 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.
- */
-
-package sun.security.timestamp;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import sun.security.pkcs.PKCS7;
-import sun.security.pkcs.PKCS9Attribute;
-import sun.security.pkcs.PKCS9Attributes;
-import sun.security.pkcs.ParsingException;
-import sun.security.pkcs.SignerInfo;
-import sun.security.util.DerValue;
-import sun.security.x509.AlgorithmId;
-import sun.security.x509.X500Name;
-
-/**
- * This class provides the response corresponding to a timestamp request,
- * as defined in
- * <a href="http://www.ietf.org/rfc/rfc3161.txt">RFC 3161</a>.
- *
- * The TimeStampResp ASN.1 type has the following definition:
- * <pre>
- *
- *     TimeStampResp ::= SEQUENCE {
- *         status            PKIStatusInfo,
- *         timeStampToken    TimeStampToken OPTIONAL ]
- *
- *     PKIStatusInfo ::= SEQUENCE {
- *         status        PKIStatus,
- *         statusString  PKIFreeText OPTIONAL,
- *         failInfo      PKIFailureInfo OPTIONAL }
- *
- *     PKIStatus ::= INTEGER {
- *         granted                (0),
- *           -- when the PKIStatus contains the value zero a TimeStampToken, as
- *           -- requested, is present.
- *         grantedWithMods        (1),
- *           -- when the PKIStatus contains the value one a TimeStampToken,
- *           -- with modifications, is present.
- *         rejection              (2),
- *         waiting                (3),
- *         revocationWarning      (4),
- *           -- this message contains a warning that a revocation is
- *           -- imminent
- *         revocationNotification (5)
- *           -- notification that a revocation has occurred }
- *
- *     PKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
- *           -- text encoded as UTF-8 String (note:  each UTF8String SHOULD
- *           -- include an RFC 1766 language tag to indicate the language
- *           -- of the contained text)
- *
- *     PKIFailureInfo ::= BIT STRING {
- *         badAlg              (0),
- *           -- unrecognized or unsupported Algorithm Identifier
- *         badRequest          (2),
- *           -- transaction not permitted or supported
- *         badDataFormat       (5),
- *           -- the data submitted has the wrong format
- *         timeNotAvailable    (14),
- *           -- the TSA's time source is not available
- *         unacceptedPolicy    (15),
- *           -- the requested TSA policy is not supported by the TSA
- *         unacceptedExtension (16),
- *           -- the requested extension is not supported by the TSA
- *         addInfoNotAvailable (17)
- *           -- the additional information requested could not be understood
- *           -- or is not available
- *         systemFailure       (25)
- *           -- the request cannot be handled due to system failure }
- *
- *     TimeStampToken ::= ContentInfo
- *         -- contentType is id-signedData
- *         -- content is SignedData
- *         -- eContentType within SignedData is id-ct-TSTInfo
- *         -- eContent within SignedData is TSTInfo
- *
- * </pre>
- *
- * @since 1.5
- * @author Vincent Ryan
- * @see Timestamper
- */
-
-public class TSResponse {
-
-    // Status codes (from RFC 3161)
-
-    /**
-     * The requested timestamp was granted.
-     */
-    public static final int GRANTED = 0;
-
-    /**
-     * The requested timestamp was granted with some modifications.
-     */
-    public static final int GRANTED_WITH_MODS = 1;
-
-    /**
-     * The requested timestamp was not granted.
-     */
-    public static final int REJECTION = 2;
-
-    /**
-     * The requested timestamp has not yet been processed.
-     */
-    public static final int WAITING = 3;
-
-    /**
-     * A warning that a certificate revocation is imminent.
-     */
-    public static final int REVOCATION_WARNING = 4;
-
-    /**
-     * Notification that a certificate revocation has occurred.
-     */
-    public static final int REVOCATION_NOTIFICATION = 5;
-
-    // Failure codes (from RFC 3161)
-
-    /**
-     * Unrecognized or unsupported algorithm identifier.
-     */
-    public static final int BAD_ALG = 0;
-
-    /**
-     * The requested transaction is not permitted or supported.
-     */
-    public static final int BAD_REQUEST = 2;
-
-    /**
-     * The data submitted has the wrong format.
-     */
-    public static final int BAD_DATA_FORMAT = 5;
-
-    /**
-     * The TSA's time source is not available.
-     */
-    public static final int TIME_NOT_AVAILABLE = 14;
-
-    /**
-     * The requested TSA policy is not supported by the TSA.
-     */
-    public static final int UNACCEPTED_POLICY = 15;
-
-    /**
-     * The requested extension is not supported by the TSA.
-     */
-    public static final int UNACCEPTED_EXTENSION = 16;
-
-    /**
-     * The additional information requested could not be understood or is not
-     * available.
-     */
-    public static final int ADD_INFO_NOT_AVAILABLE = 17;
-
-    /**
-     * The request cannot be handled due to system failure.
-     */
-    public static final int SYSTEM_FAILURE = 25;
-
-    private static final boolean DEBUG = false;
-
-    private int status;
-
-    private String[] statusString = null;
-
-    private int failureInfo = -1;
-
-    private byte[] encodedTsToken = null;
-
-    private PKCS7 tsToken = null;
-
-    /**
-     * Constructs an object to store the response to a timestamp request.
-     *
-     * @param status A buffer containing the ASN.1 BER encoded response.
-     * @throws IOException The exception is thrown if a problem is encountered
-     *         parsing the timestamp response.
-     */
-    TSResponse(byte[] tsReply) throws IOException {
-        parse(tsReply);
-    }
-
-    /**
-     * Retrieve the status code returned by the TSA.
-     */
-    public int getStatusCode() {
-        return status;
-    }
-
-    /**
-     * Retrieve the status messages returned by the TSA.
-     *
-     * @return If null then no status messages were received.
-     */
-    public String[] getStatusMessages() {
-        return statusString;
-    }
-
-    /**
-     * Retrieve the failure code returned by the TSA.
-     *
-     * @return If -1 then no failure code was received.
-     */
-    public int getFailureCode() {
-        return failureInfo;
-    }
-
-    public String getStatusCodeAsText() {
-
-        switch (status)  {
-        case GRANTED:
-            return "the timestamp request was granted.";
-
-        case GRANTED_WITH_MODS:
-            return
-                "the timestamp request was granted with some modifications.";
-
-        case REJECTION:
-            return "the timestamp request was rejected.";
-
-        case WAITING:
-            return "the timestamp request has not yet been processed.";
-
-        case REVOCATION_WARNING:
-            return "warning: a certificate revocation is imminent.";
-
-        case REVOCATION_NOTIFICATION:
-            return "notification: a certificate revocation has occurred.";
-
-        default:
-            return ("unknown status code " + status + ".");
-        }
-    }
-
-    public String getFailureCodeAsText() {
-
-        if (failureInfo == -1) {
-            return null;
-        }
-
-        switch (failureInfo)  {
-
-        case BAD_ALG:
-            return "Unrecognized or unsupported alrorithm identifier.";
-
-        case BAD_REQUEST:
-            return "The requested transaction is not permitted or supported.";
-
-        case BAD_DATA_FORMAT:
-            return "The data submitted has the wrong format.";
-
-        case TIME_NOT_AVAILABLE:
-            return "The TSA's time source is not available.";
-
-        case UNACCEPTED_POLICY:
-            return "The requested TSA policy is not supported by the TSA.";
-
-        case UNACCEPTED_EXTENSION:
-            return "The requested extension is not supported by the TSA.";
-
-        case ADD_INFO_NOT_AVAILABLE:
-            return "The additional information requested could not be " +
-                "understood or is not available.";
-
-        case SYSTEM_FAILURE:
-            return "The request cannot be handled due to system failure.";
-
-        default:
-            return ("unknown status code " + status);
-        }
-    }
-
-    /**
-     * Retrieve the timestamp token returned by the TSA.
-     *
-     * @return If null then no token was received.
-     */
-    public PKCS7 getToken() {
-        return tsToken;
-    }
-
-    /**
-     * Retrieve the ASN.1 BER encoded timestamp token returned by the TSA.
-     *
-     * @return If null then no token was received.
-     */
-    public byte[] getEncodedToken() {
-        return encodedTsToken;
-    }
-
-    /*
-     * Parses the timestamp response.
-     *
-     * @param status A buffer containing the ASN.1 BER encoded response.
-     * @throws IOException The exception is thrown if a problem is encountered
-     *         parsing the timestamp response.
-     */
-    private void parse(byte[] tsReply) throws IOException {
-        // Decode TimeStampResp
-
-        DerValue derValue = new DerValue(tsReply);
-        if (derValue.tag != DerValue.tag_Sequence) {
-            throw new IOException("Bad encoding for timestamp response");
-        }
-
-        // Parse status
-
-        DerValue status = derValue.data.getDerValue();
-        // Parse status
-        this.status = status.data.getInteger();
-        if (DEBUG) {
-            System.out.println("timestamp response: status=" + this.status);
-        }
-        // Parse statusString, if present
-        if (status.data.available() > 0) {
-            DerValue[] strings = status.data.getSequence(1);
-            statusString = new String[strings.length];
-            for (int i = 0; i < strings.length; i++) {
-                statusString[i] = strings[i].getUTF8String();
-            }
-        }
-        // Parse failInfo, if present
-        if (status.data.available() > 0) {
-            byte[] failInfo = status.data.getBitString();
-            int failureInfo = (new Byte(failInfo[0])).intValue();
-            if (failureInfo < 0 || failureInfo > 25 || failInfo.length != 1) {
-                throw new IOException("Bad encoding for timestamp response: " +
-                    "unrecognized value for the failInfo element");
-            }
-            this.failureInfo = failureInfo;
-        }
-
-        // Parse timeStampToken, if present
-        if (derValue.data.available() > 0) {
-            DerValue timestampToken = derValue.data.getDerValue();
-            encodedTsToken = timestampToken.toByteArray();
-            tsToken = new PKCS7(encodedTsToken);
-        }
-
-        // Check the format of the timestamp response
-        if (this.status == 0 || this.status == 1) {
-            if (tsToken == null) {
-                throw new TimestampException(
-                    "Bad encoding for timestamp response: " +
-                    "expected a timeStampToken element to be present");
-            }
-        } else if (tsToken != null) {
-            throw new TimestampException(
-                "Bad encoding for timestamp response: " +
-                "expected no timeStampToken element to be present");
-        }
-    }
-
-final static class TimestampException extends IOException {
-    TimestampException(String message) {
-        super(message);
-    }
-}
-}
diff --git a/ojluni/src/main/java/sun/security/timestamp/Timestamper.java b/ojluni/src/main/java/sun/security/timestamp/Timestamper.java
deleted file mode 100755
index 0e8fc5e..0000000
--- a/ojluni/src/main/java/sun/security/timestamp/Timestamper.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-package sun.security.timestamp;
-
-import java.io.IOException;
-
-/**
- * A timestamping service which conforms to the Time-Stamp Protocol (TSP)
- * defined in:
- * <a href="http://www.ietf.org/rfc/rfc3161.txt">RFC 3161</a>.
- * Individual timestampers may communicate with a Timestamping Authority (TSA)
- * over different transport machanisms. TSP permits at least the following
- * transports: HTTP, Internet mail, file-based and socket-based.
- *
- * @author Vincent Ryan
- * @see HttpTimestamper
- */
-public interface Timestamper {
-
-    /*
-     * Connects to the TSA and requests a timestamp.
-     *
-     * @param tsQuery The timestamp query.
-     * @return The result of the timestamp query.
-     * @throws IOException The exception is thrown if a problem occurs while
-     *         communicating with the TSA.
-     */
-    public TSResponse generateTimestamp(TSRequest tsQuery) throws IOException;
-}
diff --git a/ojluni/src/main/java/sun/security/util/BigInt.java b/ojluni/src/main/java/sun/security/util/BigInt.java
deleted file mode 100755
index 4713cc4..0000000
--- a/ojluni/src/main/java/sun/security/util/BigInt.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright (c) 1996, 2006, 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.
- */
-
-package sun.security.util;
-
-import java.math.BigInteger;
-
-
-/**
- * A low-overhead arbitrary-precision <em>unsigned</em> integer.
- * This is intended for use with ASN.1 parsing, and printing of
- * such parsed values.  Convert to "BigInteger" if you need to do
- * arbitrary precision arithmetic, rather than just represent
- * the number as a wrapped array of bytes.
- *
- * <P><em><b>NOTE:</b>  This class may eventually disappear, to
- * be supplanted by big-endian byte arrays which hold both signed
- * and unsigned arbitrary-precision integers.</em>
- *
- * @author David Brownell
- */
-public final class BigInt {
-
-    // Big endian -- MSB first.
-    private byte[]      places;
-
-    /**
-     * Constructs a "Big" integer from a set of (big-endian) bytes.
-     * Leading zeroes should be stripped off.
-     *
-     * @param data a sequence of bytes, most significant bytes/digits
-     *          first.  CONSUMED.
-     */
-    public BigInt(byte[] data) { places = data.clone(); }
-
-    /**
-     * Constructs a "Big" integer from a "BigInteger", which must be
-     * positive (or zero) in value.
-     */
-    public BigInt(BigInteger i) {
-        byte[]  temp = i.toByteArray();
-
-        if ((temp[0] & 0x80) != 0)
-            throw new IllegalArgumentException("negative BigInteger");
-
-        // XXX we assume exactly _one_ sign byte is used...
-
-        if (temp[0] != 0)
-            places = temp;
-        else {
-            places = new byte[temp.length - 1];
-            for (int j = 1; j < temp.length; j++)
-                places[j - 1] = temp[j];
-        }
-    }
-
-    /**
-     * Constructs a "Big" integer from a normal Java integer.
-     *
-     * @param i the java primitive integer
-     */
-    public BigInt(int i) {
-        if (i < (1 << 8)) {
-            places = new byte[1];
-            places[0] = (byte) i;
-        } else if (i < (1 << 16)) {
-            places = new byte[2];
-            places[0] = (byte) (i >> 8);
-            places[1] = (byte) i;
-        } else if (i < (1 << 24)) {
-            places = new byte[3];
-            places[0] = (byte) (i >> 16);
-            places[1] = (byte) (i >> 8);
-            places[2] = (byte) i;
-        } else {
-            places = new byte[4];
-            places[0] = (byte) (i >> 24);
-            places[1] = (byte) (i >> 16);
-            places[2] = (byte) (i >> 8);
-            places[3] = (byte) i;
-        }
-    }
-
-    /**
-     * Converts the "big" integer to a java primitive integer.
-     *
-     * @excpet NumberFormatException if 32 bits is insufficient.
-     */
-    public int toInt() {
-        if (places.length > 4)
-            throw new NumberFormatException("BigInt.toLong, too big");
-        int retval = 0, i = 0;
-        for (; i < places.length; i++)
-            retval = (retval << 8) + ((int)places[i] & 0xff);
-        return retval;
-    }
-
-    /**
-     * Returns a hexadecimal printed representation.  The value is
-     * formatted to fit on lines of at least 75 characters, with
-     * embedded newlines.  Words are separated for readability,
-     * with eight words (32 bytes) per line.
-     */
-    public String toString() { return hexify(); }
-
-    /**
-     * Returns a BigInteger value which supports many arithmetic
-     * operations. Assumes negative values will never occur.
-     */
-    public BigInteger toBigInteger()
-        { return new BigInteger(1, places); }
-
-    /**
-     * Returns the data as a byte array.  The most significant bit
-     * of the array is bit zero (as in <code>java.math.BigInteger</code>).
-     */
-    public byte[] toByteArray() { return places.clone(); }
-
-    private static final String digits = "0123456789abcdef";
-    private String hexify() {
-        if (places.length == 0)
-            return "  0  ";
-
-        StringBuffer buf = new StringBuffer(places.length * 2);
-        buf.append("    ");     // four spaces
-        for (int i = 0; i < places.length; i++) {
-            buf.append(digits.charAt((places[i] >> 4) & 0x0f));
-            buf.append(digits.charAt(places[i] & 0x0f));
-            if (((i + 1) % 32) == 0) {
-                if ((i +  1) != places.length)
-                    buf.append("\n    ");       // line after four words
-            } else if (((i + 1) % 4) == 0)
-                buf.append(' ');                // space between words
-        }
-        return buf.toString();
-    }
-
-    /**
-     * Returns true iff the parameter is a numerically equivalent
-     * BigInt.
-     *
-     * @param other the object being compared with this one.
-     */
-    public boolean equals(Object other) {
-        if (other instanceof BigInt)
-            return equals((BigInt) other);
-        return false;
-    }
-
-    /**
-     * Returns true iff the parameter is numerically equivalent.
-     *
-     * @param other the BigInt being compared with this one.
-     */
-    public boolean equals(BigInt other) {
-        if (this == other)
-            return true;
-
-        byte[] otherPlaces = other.toByteArray();
-        if (places.length != otherPlaces.length)
-            return false;
-        for (int i = 0; i < places.length; i++)
-            if (places[i] != otherPlaces[i])
-                return false;
-        return true;
-    }
-
-    /**
-     * Returns a hashcode for this BigInt.
-     *
-     * @return a hashcode for this BigInt.
-     */
-    public int hashCode() {
-        return hexify().hashCode();
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/util/Password.java b/ojluni/src/main/java/sun/security/util/Password.java
deleted file mode 100755
index 26653b4..0000000
--- a/ojluni/src/main/java/sun/security/util/Password.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 2003, 2009, 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.
- */
-
-package sun.security.util;
-
-import java.io.*;
-import java.nio.*;
-import java.nio.charset.*;
-import java.util.Arrays;
-
-/**
- * A utility class for reading passwords
- *
- */
-public class Password {
-    /** Reads user password from given input stream. */
-    public static char[] readPassword(InputStream in) throws IOException {
-        return readPassword(in, false);
-    }
-
-    /** Reads user password from given input stream.
-     * @param isEchoOn true if the password should be echoed on the screen
-     */
-    public static char[] readPassword(InputStream in, boolean isEchoOn)
-            throws IOException {
-
-        char[] consoleEntered = null;
-        byte[] consoleBytes = null;
-
-        try {
-            // Use the new java.io.Console class
-            Console con = null;
-            if (!isEchoOn && in == System.in && ((con = System.console()) != null)) {
-                consoleEntered = con.readPassword();
-                // readPassword returns "" if you just print ENTER,
-                // to be compatible with old Password class, change to null
-                if (consoleEntered != null && consoleEntered.length == 0) {
-                    return null;
-                }
-                consoleBytes = convertToBytes(consoleEntered);
-                in = new ByteArrayInputStream(consoleBytes);
-            }
-
-            // Rest of the lines still necessary for KeyStoreLoginModule
-            // and when there is no console.
-
-            char[] lineBuffer;
-            char[] buf;
-            int i;
-
-            buf = lineBuffer = new char[128];
-
-            int room = buf.length;
-            int offset = 0;
-            int c;
-
-            boolean done = false;
-            while (!done) {
-                switch (c = in.read()) {
-                  case -1:
-                  case '\n':
-                      done = true;
-                      break;
-
-                  case '\r':
-                    int c2 = in.read();
-                    if ((c2 != '\n') && (c2 != -1)) {
-                        if (!(in instanceof PushbackInputStream)) {
-                            in = new PushbackInputStream(in);
-                        }
-                        ((PushbackInputStream)in).unread(c2);
-                    } else {
-                        done = true;
-                        break;
-                    }
-
-                  default:
-                    if (--room < 0) {
-                        buf = new char[offset + 128];
-                        room = buf.length - offset - 1;
-                        System.arraycopy(lineBuffer, 0, buf, 0, offset);
-                        Arrays.fill(lineBuffer, ' ');
-                        lineBuffer = buf;
-                    }
-                    buf[offset++] = (char) c;
-                    break;
-                }
-            }
-
-            if (offset == 0) {
-                return null;
-            }
-
-            char[] ret = new char[offset];
-            System.arraycopy(buf, 0, ret, 0, offset);
-            Arrays.fill(buf, ' ');
-
-            return ret;
-        } finally {
-            if (consoleEntered != null) {
-                Arrays.fill(consoleEntered, ' ');
-            }
-            if (consoleBytes != null) {
-                Arrays.fill(consoleBytes, (byte)0);
-            }
-        }
-    }
-
-    /**
-     * Change a password read from Console.readPassword() into
-     * its original bytes.
-     *
-     * @param pass a char[]
-     * @return its byte[] format, similar to new String(pass).getBytes()
-     */
-    private static byte[] convertToBytes(char[] pass) {
-        if (enc == null) {
-            synchronized (Password.class) {
-                enc = sun.misc.SharedSecrets.getJavaIOAccess()
-                        .charset()
-                        .newEncoder()
-                        .onMalformedInput(CodingErrorAction.REPLACE)
-                        .onUnmappableCharacter(CodingErrorAction.REPLACE);
-            }
-        }
-        byte[] ba = new byte[(int)(enc.maxBytesPerChar() * pass.length)];
-        ByteBuffer bb = ByteBuffer.wrap(ba);
-        synchronized (enc) {
-            enc.reset().encode(CharBuffer.wrap(pass), bb, true);
-        }
-        if (bb.position() < ba.length) {
-            ba[bb.position()] = '\n';
-        }
-        return ba;
-    }
-    private static volatile CharsetEncoder enc;
-}
diff --git a/ojluni/src/main/java/sun/security/util/PathList.java b/ojluni/src/main/java/sun/security/util/PathList.java
deleted file mode 100755
index 4d1fa71..0000000
--- a/ojluni/src/main/java/sun/security/util/PathList.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (c) 2004, 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.
- */
-
-package sun.security.util;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.String;
-import java.util.StringTokenizer;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.net.MalformedURLException;
-
-/**
- * A utility class for handle path list
- *
- */
-public class PathList {
-    /**
-     * Utility method for appending path from pathFrom to pathTo.
-     *
-     * @param pathTo the target path
-     * @param pathSource the path to be appended to pathTo
-     * @return the resulting path
-     */
-    public static String appendPath(String pathTo, String pathFrom) {
-        if (pathTo == null || pathTo.length() == 0) {
-            return pathFrom;
-        } else if (pathFrom == null || pathFrom.length() == 0) {
-            return pathTo;
-        } else {
-            return pathTo  + File.pathSeparator + pathFrom;
-        }
-    }
-
-    /**
-     * Utility method for converting a search path string to an array
-     * of directory and JAR file URLs.
-     *
-     * @param path the search path string
-     * @return the resulting array of directory and JAR file URLs
-     */
-    public static URL[] pathToURLs(String path) {
-        StringTokenizer st = new StringTokenizer(path, File.pathSeparator);
-        URL[] urls = new URL[st.countTokens()];
-        int count = 0;
-        while (st.hasMoreTokens()) {
-            URL url = fileToURL(new File(st.nextToken()));
-            if (url != null) {
-                urls[count++] = url;
-            }
-        }
-        if (urls.length != count) {
-            URL[] tmp = new URL[count];
-            System.arraycopy(urls, 0, tmp, 0, count);
-            urls = tmp;
-        }
-        return urls;
-    }
-
-    /**
-     * Returns the directory or JAR file URL corresponding to the specified
-     * local file name.
-     *
-     * @param file the File object
-     * @return the resulting directory or JAR file URL, or null if unknown
-     */
-    private static URL fileToURL(File file) {
-        String name;
-        try {
-            name = file.getCanonicalPath();
-        } catch (IOException e) {
-            name = file.getAbsolutePath();
-        }
-        name = name.replace(File.separatorChar, '/');
-        if (!name.startsWith("/")) {
-            name = "/" + name;
-        }
-        // If the file does not exist, then assume that it's a directory
-        if (!file.isFile()) {
-            name = name + "/";
-        }
-        try {
-            return new URL("file", "", name);
-        } catch (MalformedURLException e) {
-            throw new IllegalArgumentException("file");
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/util/PendingException.java b/ojluni/src/main/java/sun/security/util/PendingException.java
deleted file mode 100755
index 3997f25..0000000
--- a/ojluni/src/main/java/sun/security/util/PendingException.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2004, 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.
- */
-
-package sun.security.util;
-
-/**
- * An exception that denotes that an operation is pending.
- * Currently used by LoginContext.
- *
- */
-public class PendingException extends RuntimeException {
-
-    private static final long serialVersionUID = -5201837247928788640L;
-
-    /**
-     * Constructs a PendingException with no detail message. A detail
-     * message is a String that describes this particular exception.
-     */
-    public PendingException() {
-        super();
-    }
-
-    /**
-     * Constructs a PendingException with the specified detail message.
-     * A detail message is a String that describes this particular
-     * exception.
-     *
-     * <p>
-     *
-     * @param msg the detail message.
-     */
-    public PendingException(String msg) {
-        super(msg);
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/util/PermissionFactory.java b/ojluni/src/main/java/sun/security/util/PermissionFactory.java
deleted file mode 100755
index c6457ff..0000000
--- a/ojluni/src/main/java/sun/security/util/PermissionFactory.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2009, 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.
- */
-
-package sun.security.util;
-
-import java.security.Permission;
-
-/**
- * A factory object that creates Permission objects.
- */
-
-public interface PermissionFactory<T extends Permission> {
-    T newPermission(String name);
-}
diff --git a/ojluni/src/main/java/sun/security/util/PolicyUtil.java b/ojluni/src/main/java/sun/security/util/PolicyUtil.java
deleted file mode 100755
index 128c688..0000000
--- a/ojluni/src/main/java/sun/security/util/PolicyUtil.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (c) 2004, 2006, 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.
- */
-
-package sun.security.util;
-
-import java.io.*;
-import java.net.*;
-import java.security.*;
-import java.util.Arrays;
-
-import sun.net.www.ParseUtil;
-
-
-/**
- * A utility class for getting a KeyStore instance from policy information.
- * In addition, a supporting getInputStream method.
- *
- */
-public class PolicyUtil {
-
-    // standard PKCS11 KeyStore type
-    private static final String P11KEYSTORE = "PKCS11";
-
-    // reserved word
-    private static final String NONE = "NONE";
-
-    /*
-     * Fast path reading from file urls in order to avoid calling
-     * FileURLConnection.connect() which can be quite slow the first time
-     * it is called. We really should clean up FileURLConnection so that
-     * this is not a problem but in the meantime this fix helps reduce
-     * start up time noticeably for the new launcher. -- DAC
-     */
-    public static InputStream getInputStream(URL url) throws IOException {
-        if ("file".equals(url.getProtocol())) {
-            String path = url.getFile().replace('/', File.separatorChar);
-            path = ParseUtil.decode(path);
-            return new FileInputStream(path);
-        } else {
-            return url.openStream();
-        }
-    }
-
-    /**
-     * this is intended for use by policytool and the policy parser to
-     * instantiate a KeyStore from the information in the GUI/policy file
-     */
-    public static KeyStore getKeyStore
-                (URL policyUrl,                 // URL of policy file
-                String keyStoreName,            // input: keyStore URL
-                String keyStoreType,            // input: keyStore type
-                String keyStoreProvider,        // input: keyStore provider
-                String storePassURL,            // input: keyStore password
-                Debug debug)
-        throws KeyStoreException, MalformedURLException, IOException,
-                NoSuchProviderException, NoSuchAlgorithmException,
-                java.security.cert.CertificateException {
-
-        if (keyStoreName == null) {
-            throw new IllegalArgumentException("null KeyStore name");
-        }
-
-        char[] keyStorePassword = null;
-        try {
-            KeyStore ks;
-            if (keyStoreType == null) {
-                keyStoreType = KeyStore.getDefaultType();
-            }
-
-            if (P11KEYSTORE.equalsIgnoreCase(keyStoreType) &&
-                !NONE.equals(keyStoreName)) {
-                throw new IllegalArgumentException
-                        ("Invalid value (" +
-                        keyStoreName +
-                        ") for keystore URL.  If the keystore type is \"" +
-                        P11KEYSTORE +
-                        "\", the keystore url must be \"" +
-                        NONE +
-                        "\"");
-            }
-
-            if (keyStoreProvider != null) {
-                ks = KeyStore.getInstance(keyStoreType, keyStoreProvider);
-            } else {
-                ks = KeyStore.getInstance(keyStoreType);
-            }
-
-            if (storePassURL != null) {
-                URL passURL;
-                try {
-                    passURL = new URL(storePassURL);
-                    // absolute URL
-                } catch (MalformedURLException e) {
-                    // relative URL
-                    if (policyUrl == null) {
-                        throw e;
-                    }
-                    passURL = new URL(policyUrl, storePassURL);
-                }
-
-                if (debug != null) {
-                    debug.println("reading password"+passURL);
-                }
-
-                InputStream in = null;
-                try {
-                    in = passURL.openStream();
-                    keyStorePassword = Password.readPassword(in);
-                } finally {
-                    if (in != null) {
-                        in.close();
-                    }
-                }
-            }
-
-            if (NONE.equals(keyStoreName)) {
-                ks.load(null, keyStorePassword);
-                return ks;
-            } else {
-                /*
-                 * location of keystore is specified as absolute URL in policy
-                 * file, or is relative to URL of policy file
-                 */
-                URL keyStoreUrl = null;
-                try {
-                    keyStoreUrl = new URL(keyStoreName);
-                    // absolute URL
-                } catch (MalformedURLException e) {
-                    // relative URL
-                    if (policyUrl == null) {
-                        throw e;
-                    }
-                    keyStoreUrl = new URL(policyUrl, keyStoreName);
-                }
-
-                if (debug != null) {
-                    debug.println("reading keystore"+keyStoreUrl);
-                }
-
-                InputStream inStream = null;
-                try {
-                    inStream =
-                        new BufferedInputStream(getInputStream(keyStoreUrl));
-                    ks.load(inStream, keyStorePassword);
-                } finally {
-                    inStream.close();
-                }
-                return ks;
-            }
-        } finally {
-            if (keyStorePassword != null) {
-                Arrays.fill(keyStorePassword, ' ');
-            }
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/util/Resources_de.java b/ojluni/src/main/java/sun/security/util/Resources_de.java
deleted file mode 100755
index ebaabe6..0000000
--- a/ojluni/src/main/java/sun/security/util/Resources_de.java
+++ /dev/null
@@ -1,661 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, 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.
- */
-
-package sun.security.util;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for javax.security.auth and sun.security.
- *
- */
-public class Resources_de extends java.util.ListResourceBundle {
-
-    private static final Object[][] contents = {
-
-        // shared (from jarsigner)
-        {"SPACE", " "},
-        {"2SPACE", "  "},
-        {"6SPACE", "      "},
-        {"COMMA", ", "},
-        // shared (from keytool)
-        {"NEWLINE", "\n"},
-        {"STAR",
-                "*******************************************"},
-        {"STARNN",
-                "*******************************************\n\n"},
-
-        // keytool: Help part
-        {".OPTION.", " [OPTION]..."},
-        {"Options.", "Optionen:"},
-        {"Use.keytool.help.for.all.available.commands",
-                 "\"keytool -help\" f\u00FCr alle verf\u00FCgbaren Befehle verwenden"},
-        {"Key.and.Certificate.Management.Tool",
-                 "Schl\u00FCssel- und Zertifikatsverwaltungstool"},
-        {"Commands.", "Befehle:"},
-        {"Use.keytool.command.name.help.for.usage.of.command.name",
-                "\"keytool -command_name -help\" f\u00FCr Verwendung von command_name verwenden"},
-        // keytool: help: commands
-        {"Generates.a.certificate.request",
-                "Generiert eine Zertifikatanforderung"}, //-certreq
-        {"Changes.an.entry.s.alias",
-                "\u00C4ndert den Alias eines Eintrags"}, //-changealias
-        {"Deletes.an.entry",
-                "L\u00F6scht einen Eintrag"}, //-delete
-        {"Exports.certificate",
-                "Exportiert ein Zertifikat"}, //-exportcert
-        {"Generates.a.key.pair",
-                "Generiert ein Schl\u00FCsselpaar"}, //-genkeypair
-        {"Generates.a.secret.key",
-                "Generiert einen Secret Key"}, //-genseckey
-        {"Generates.certificate.from.a.certificate.request",
-                "Generiert ein Zertifikat aus einer Zertifikatanforderung"}, //-gencert
-        {"Generates.CRL", "Generiert eine CRL"}, //-gencrl
-        {"Imports.entries.from.a.JDK.1.1.x.style.identity.database",
-                "Importiert Eintr\u00E4ge aus einer Identity-Datenbank im JDK 1.1.x-Stil"}, //-identitydb
-        {"Imports.a.certificate.or.a.certificate.chain",
-                "Importiert ein Zertifikat oder eine Zertifikatkette"}, //-importcert
-        {"Imports.one.or.all.entries.from.another.keystore",
-                "Importiert einen oder alle Eintr\u00E4ge aus einem anderen Keystore"}, //-importkeystore
-        {"Clones.a.key.entry",
-                "Clont einen Schl\u00FCsseleintrag"}, //-keyclone
-        {"Changes.the.key.password.of.an.entry",
-                "\u00C4ndert das Schl\u00FCsselkennwort eines Eintrags"}, //-keypasswd
-        {"Lists.entries.in.a.keystore",
-                "Listet die Eintr\u00E4ge in einem Keystore auf"}, //-list
-        {"Prints.the.content.of.a.certificate",
-                "Druckt den Content eines Zertifikats"}, //-printcert
-        {"Prints.the.content.of.a.certificate.request",
-                "Druckt den Content einer Zertifikatanforderung"}, //-printcertreq
-        {"Prints.the.content.of.a.CRL.file",
-                "Druckt den Content einer CRL-Datei"}, //-printcrl
-        {"Generates.a.self.signed.certificate",
-                "Generiert ein selbst signiertes Zertifikat"}, //-selfcert
-        {"Changes.the.store.password.of.a.keystore",
-                "\u00C4ndert das Speicherkennwort eines Keystores"}, //-storepasswd
-        // keytool: help: options
-        {"alias.name.of.the.entry.to.process",
-                "Aliasname des zu verarbeitenden Eintrags"}, //-alias
-        {"destination.alias",
-                "Zielalias"}, //-destalias
-        {"destination.key.password",
-                "Zielschl\u00FCssel-Kennwort"}, //-destkeypass
-        {"destination.keystore.name",
-                "Ziel-Keystore-Name"}, //-destkeystore
-        {"destination.keystore.password.protected",
-                "Ziel-Keystore kennwortgesch\u00FCtzt"}, //-destprotected
-        {"destination.keystore.provider.name",
-                "Ziel-Keystore-Providername"}, //-destprovidername
-        {"destination.keystore.password",
-                "Ziel-Keystore-Kennwort"}, //-deststorepass
-        {"destination.keystore.type",
-                "Ziel-Keystore-Typ"}, //-deststoretype
-        {"distinguished.name",
-                "Distinguished Name"}, //-dname
-        {"X.509.extension",
-                "X.509-Erweiterung"}, //-ext
-        {"output.file.name",
-                "Ausgabedateiname"}, //-file and -outfile
-        {"input.file.name",
-                "Eingabedateiname"}, //-file and -infile
-        {"key.algorithm.name",
-                "Schl\u00FCsselalgorithmusname"}, //-keyalg
-        {"key.password",
-                "Schl\u00FCsselkennwort"}, //-keypass
-        {"key.bit.size",
-                "Schl\u00FCsselbitgr\u00F6\u00DFe"}, //-keysize
-        {"keystore.name",
-                "Keystore-Name"}, //-keystore
-        {"new.password",
-                "Neues Kennwort"}, //-new
-        {"do.not.prompt",
-                "Kein Prompt"}, //-noprompt
-        {"password.through.protected.mechanism",
-                "Kennwort \u00FCber gesch\u00FCtzten Mechanismus"}, //-protected
-        {"provider.argument",
-                "Providerargument"}, //-providerarg
-        {"provider.class.name",
-                "Providerklassenname"}, //-providerclass
-        {"provider.name",
-                "Providername"}, //-providername
-        {"provider.classpath",
-                "Provider-Classpath"}, //-providerpath
-        {"output.in.RFC.style",
-                "Ausgabe in RFC-Stil"}, //-rfc
-        {"signature.algorithm.name",
-                "Signaturalgorithmusname"}, //-sigalg
-        {"source.alias",
-                "Quellalias"}, //-srcalias
-        {"source.key.password",
-                "Quellschl\u00FCssel-Kennwort"}, //-srckeypass
-        {"source.keystore.name",
-                "Quell-Keystore-Name"}, //-srckeystore
-        {"source.keystore.password.protected",
-                "Quell-Keystore kennwortgesch\u00FCtzt"}, //-srcprotected
-        {"source.keystore.provider.name",
-                "Quell-Keystore-Providername"}, //-srcprovidername
-        {"source.keystore.password",
-                "Quell-Keystore-Kennwort"}, //-srcstorepass
-        {"source.keystore.type",
-                "Quell-Keystore-Typ"}, //-srcstoretype
-        {"SSL.server.host.and.port",
-                "SSL-Serverhost und -port"}, //-sslserver
-        {"signed.jar.file",
-                "Signierte JAR-Datei"}, //=jarfile
-        {"certificate.validity.start.date.time",
-                "Anfangsdatum/-zeit f\u00FCr Zertifikatsg\u00FCltigkeit"}, //-startdate
-        {"keystore.password",
-                "Keystore-Kennwort"}, //-storepass
-        {"keystore.type",
-                "Keystore-Typ"}, //-storetype
-        {"trust.certificates.from.cacerts",
-                "Zertifikaten aus cacerts vertrauen"}, //-trustcacerts
-        {"verbose.output",
-                "Verbose-Ausgabe"}, //-v
-        {"validity.number.of.days",
-                "G\u00FCltigkeitsdauer (Tage)"}, //-validity
-        {"Serial.ID.of.cert.to.revoke",
-                 "Serielle ID des zu entziehenden Certs"}, //-id
-        // keytool: Running part
-        {"keytool.error.", "Keytool-Fehler: "},
-        {"Illegal.option.", "Ung\u00FCltige Option:  "},
-        {"Illegal.value.", "Ung\u00FCltiger Wert: "},
-        {"Unknown.password.type.", "Unbekannter Kennworttyp: "},
-        {"Cannot.find.environment.variable.",
-                "Umgebungsvariable kann nicht gefunden werden: "},
-        {"Cannot.find.file.", "Datei kann nicht gefunden werden: "},
-        {"Command.option.flag.needs.an.argument.", "Befehlsoption {0} ben\u00F6tigt ein Argument."},
-        {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.",
-                "Warnung: Keine Unterst\u00FCtzung f\u00FCr unterschiedliche Speicher- und Schl\u00FCsselkennw\u00F6rter bei PKCS12 KeyStores. Der benutzerdefinierte Wert {0} wird ignoriert."},
-        {".keystore.must.be.NONE.if.storetype.is.{0}",
-                "-keystore muss NONE sein, wenn -storetype {0} ist"},
-        {"Too.many.retries.program.terminated",
-                 "Zu viele erneute Versuche. Programm wird beendet"},
-        {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}",
-                "Befehle -storepasswd und -keypasswd werden nicht unterst\u00FCtzt, wenn -storetype {0} ist"},
-        {".keypasswd.commands.not.supported.if.storetype.is.PKCS12",
-                "Befehle des Typs -keypasswd werden nicht unterst\u00FCtzt, wenn -storetype PKCS12 ist"},
-        {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}",
-                "-keypass und -new k\u00F6nnen nicht angegeben werden, wenn -storetype {0} ist"},
-        {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified",
-                "Wenn -protected angegeben ist, d\u00FCrfen -storepass, -keypass und -new nicht angegeben werden"},
-        {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "Wenn -srcprotected angegeben ist, d\u00FCrfen -srcstorepass und -srckeypass nicht angegeben werden"},
-        {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified",
-                "Wenn der Keystore nicht kennwortgesch\u00FCtzt ist, d\u00FCrfen -storepass, -keypass und -new nicht angegeben werden"},
-        {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "Wenn der Quell-Keystore nicht kennwortgesch\u00FCtzt ist, d\u00FCrfen -srcstorepass und -srckeypass nicht angegeben werden"},
-        {"Illegal.startdate.value", "Ung\u00FCltiger Wert f\u00FCr Anfangsdatum"},
-        {"Validity.must.be.greater.than.zero",
-                "G\u00FCltigkeit muss gr\u00F6\u00DFer als null sein"},
-        {"provName.not.a.provider", "{0} kein Provider"},
-        {"Usage.error.no.command.provided", "Verwendungsfehler: Kein Befehl angegeben"},
-        {"Source.keystore.file.exists.but.is.empty.", "Quell-Keystore-Datei ist zwar vorhanden, ist aber leer: "},
-        {"Please.specify.srckeystore", "Geben Sie -srckeystore an"},
-        {"Must.not.specify.both.v.and.rfc.with.list.command",
-                "-v und -rfc d\u00FCrfen bei Befehl \"list\" nicht beide angegeben werden"},
-        {"Key.password.must.be.at.least.6.characters",
-                "Schl\u00FCsselkennwort muss mindestens sechs Zeichen lang sein"},
-        {"New.password.must.be.at.least.6.characters",
-                "Neues Kennwort muss mindestens sechs Zeichen lang sein"},
-        {"Keystore.file.exists.but.is.empty.",
-                "Keystore-Datei ist vorhanden, ist aber leer: "},
-        {"Keystore.file.does.not.exist.",
-                "Keystore-Datei ist nicht vorhanden: "},
-        {"Must.specify.destination.alias", "Sie m\u00FCssen einen Zielalias angeben"},
-        {"Must.specify.alias", "Sie m\u00FCssen einen Alias angeben"},
-        {"Keystore.password.must.be.at.least.6.characters",
-                "Keystore-Kennwort muss mindestens sechs Zeichen lang sein"},
-        {"Enter.keystore.password.", "Keystore-Kennwort eingeben:  "},
-        {"Enter.source.keystore.password.", "Quell-Keystore-Kennwort eingeben:  "},
-        {"Enter.destination.keystore.password.", "Ziel-Keystore-Kennwort eingeben:  "},
-        {"Keystore.password.is.too.short.must.be.at.least.6.characters",
-         "Keystore-Kennwort ist zu kurz. Es muss mindestens sechs Zeichen lang sein"},
-        {"Unknown.Entry.Type", "Unbekannter Eintragstyp"},
-        {"Too.many.failures.Alias.not.changed", "Zu viele Fehler. Alias nicht ge\u00E4ndert"},
-        {"Entry.for.alias.alias.successfully.imported.",
-                 "Eintrag f\u00FCr Alias {0} erfolgreich importiert."},
-        {"Entry.for.alias.alias.not.imported.", "Eintrag f\u00FCr Alias {0} nicht importiert."},
-        {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.",
-                 "Problem beim Importieren des Eintrags f\u00FCr Alias {0}: {1}.\nEintrag f\u00FCr Alias {0} nicht importiert."},
-        {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled",
-                 "Importbefehl abgeschlossen: {0} Eintr\u00E4ge erfolgreich importiert, {1} Eintr\u00E4ge nicht erfolgreich oder abgebrochen"},
-        {"Warning.Overwriting.existing.alias.alias.in.destination.keystore",
-                 "Warnung: Vorhandener Alias {0} in Ziel-Keystore wird \u00FCberschrieben"},
-        {"Existing.entry.alias.alias.exists.overwrite.no.",
-                 "Eintragsalias {0} ist bereits vorhanden. \u00DCberschreiben? [Nein]:  "},
-        {"Too.many.failures.try.later", "Zu viele Fehler. Versuchen Sie es sp\u00E4ter erneut"},
-        {"Certification.request.stored.in.file.filename.",
-                "Zertifizierungsanforderung in Datei <{0}> gespeichert"},
-        {"Submit.this.to.your.CA", "Leiten Sie dies an die CA weiter"},
-        {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
-            "Wenn kein Alias angegeben ist, d\u00FCrfen destalias, srckeypass und destkeypass nicht angegeben werden"},
-        {"Certificate.stored.in.file.filename.",
-                "Zertifikat in Datei <{0}> gespeichert"},
-        {"Certificate.reply.was.installed.in.keystore",
-                "Zertifikatantwort wurde in Keystore installiert"},
-        {"Certificate.reply.was.not.installed.in.keystore",
-                "Zertifikatantwort wurde nicht in Keystore installiert"},
-        {"Certificate.was.added.to.keystore",
-                "Zertifikat wurde Keystore hinzugef\u00FCgt"},
-        {"Certificate.was.not.added.to.keystore",
-                "Zertifikat wurde nicht zu Keystore hinzugef\u00FCgt"},
-        {".Storing.ksfname.", "[{0} wird gesichert]"},
-        {"alias.has.no.public.key.certificate.",
-                "{0} hat keinen Public Key (Zertifikat)"},
-        {"Cannot.derive.signature.algorithm",
-                "Signaturalgorithmus kann nicht abgeleitet werden"},
-        {"Alias.alias.does.not.exist",
-                "Alias <{0}> ist nicht vorhanden"},
-        {"Alias.alias.has.no.certificate",
-                "Alias <{0}> hat kein Zertifikat"},
-        {"Key.pair.not.generated.alias.alias.already.exists",
-                "Schl\u00FCsselpaar wurde nicht generiert. Alias <{0}> ist bereits vorhanden"},
-        {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for",
-                "Generieren von Schl\u00FCsselpaar (Typ {1}, {0} Bit) und selbst signiertem Zertifikat ({2}) mit einer G\u00FCltigkeit von {3} Tagen\n\tf\u00FCr: {4}"},
-        {"Enter.key.password.for.alias.", "Schl\u00FCsselkennwort f\u00FCr <{0}> eingeben"},
-        {".RETURN.if.same.as.keystore.password.",
-                "\t(RETURN, wenn identisch mit Keystore-Kennwort):  "},
-        {"Key.password.is.too.short.must.be.at.least.6.characters",
-                "Schl\u00FCsselkennwort ist zu kurz. Es muss mindestens sechs Zeichen lang sein"},
-        {"Too.many.failures.key.not.added.to.keystore",
-                "Zu viele Fehler. Schl\u00FCssel wurde nicht zu Keystore hinzugef\u00FCgt"},
-        {"Destination.alias.dest.already.exists",
-                "Zielalias <{0}> bereits vorhanden"},
-        {"Password.is.too.short.must.be.at.least.6.characters",
-                "Kennwort ist zu kurz. Es muss mindestens sechs Zeichen lang sein"},
-        {"Too.many.failures.Key.entry.not.cloned",
-                "Zu viele Fehler. Schl\u00FCsseleintrag wurde nicht geclont"},
-        {"key.password.for.alias.", "Schl\u00FCsselkennwort f\u00FCr <{0}>"},
-        {"Keystore.entry.for.id.getName.already.exists",
-                "Keystore-Eintrag f\u00FCr <{0}> bereits vorhanden"},
-        {"Creating.keystore.entry.for.id.getName.",
-                "Keystore-Eintrag f\u00FCr <{0}> wird erstellt..."},
-        {"No.entries.from.identity.database.added",
-                "Keine Eintr\u00E4ge aus Identity-Datenbank hinzugef\u00FCgt"},
-        {"Alias.name.alias", "Aliasname: {0}"},
-        {"Creation.date.keyStore.getCreationDate.alias.",
-                "Erstellungsdatum: {0,date}"},
-        {"alias.keyStore.getCreationDate.alias.",
-                "{0}, {1,date}, "},
-        {"alias.", "{0}, "},
-        {"Entry.type.type.", "Eintragstyp: {0}"},
-        {"Certificate.chain.length.", "Zertifikatkettenl\u00E4nge: "},
-        {"Certificate.i.1.", "Zertifikat[{0,number,integer}]:"},
-        {"Certificate.fingerprint.SHA1.", "Zertifikat-Fingerprint (SHA1): "},
-        {"Keystore.type.", "Keystore-Typ: "},
-        {"Keystore.provider.", "Keystore-Provider: "},
-        {"Your.keystore.contains.keyStore.size.entry",
-                "Keystore enth\u00E4lt {0,number,integer} Eintrag"},
-        {"Your.keystore.contains.keyStore.size.entries",
-                "Keystore enth\u00E4lt {0,number,integer} Eintr\u00E4ge"},
-        {"Failed.to.parse.input", "Eingabe konnte nicht geparst werden"},
-        {"Empty.input", "Leere Eingabe"},
-        {"Not.X.509.certificate", "Kein X.509-Zertifikat"},
-        {"alias.has.no.public.key", "{0} hat keinen Public Key"},
-        {"alias.has.no.X.509.certificate", "{0} hat kein X.509-Zertifikat"},
-        {"New.certificate.self.signed.", "Neues Zertifikat (selbst signiert):"},
-        {"Reply.has.no.certificates", "Antwort hat keine Zertifikate"},
-        {"Certificate.not.imported.alias.alias.already.exists",
-                "Zertifikat nicht importiert. Alias <{0}> ist bereits vorhanden"},
-        {"Input.not.an.X.509.certificate", "Eingabe kein X.509-Zertifikat"},
-        {"Certificate.already.exists.in.keystore.under.alias.trustalias.",
-                "Zertifikat ist bereits unter Alias <{0}> im Keystore vorhanden"},
-        {"Do.you.still.want.to.add.it.no.",
-                "M\u00F6chten Sie es trotzdem hinzuf\u00FCgen? [Nein]:  "},
-        {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.",
-                "Zertifikat ist bereits unter Alias <{0}> im systemweiten CA-Keystore vorhanden"},
-        {"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
-                "M\u00F6chten Sie es trotzdem zu Ihrem eigenen Keystore hinzuf\u00FCgen? [Nein]:  "},
-        {"Trust.this.certificate.no.", "Diesem Zertifikat vertrauen? [Nein]:  "},
-        {"YES", "JA"},
-        {"New.prompt.", "Neues {0}: "},
-        {"Passwords.must.differ", "Kennw\u00F6rter m\u00FCssen sich unterscheiden"},
-        {"Re.enter.new.prompt.", "Neues {0} erneut eingeben: "},
-        {"Re.enter.new.password.", "Neues Kennwort erneut eingeben: "},
-        {"They.don.t.match.Try.again", "Keine \u00DCbereinstimmung. Wiederholen Sie den Vorgang"},
-        {"Enter.prompt.alias.name.", "{0}-Aliasnamen eingeben:  "},
-        {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.",
-                 "Geben Sie einen neuen Aliasnamen ein\t(RETURN, um den Import dieses Eintrags abzubrechen):  "},
-        {"Enter.alias.name.", "Aliasnamen eingeben:  "},
-        {".RETURN.if.same.as.for.otherAlias.",
-                "\t(RETURN, wenn identisch mit <{0}>)"},
-        {".PATTERN.printX509Cert",
-                "Eigent\u00FCmer: {0}\nAussteller: {1}\nSeriennummer: {2}\nG\u00FCltig von: {3} bis: {4}\nZertifikat-Fingerprints:\n\t MD5:  {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Signaturalgorithmusname: {8}\n\t Version: {9}"},
-        {"What.is.your.first.and.last.name.",
-                "Wie lautet Ihr Vor- und Nachname?"},
-        {"What.is.the.name.of.your.organizational.unit.",
-                "Wie lautet der Name Ihrer organisatorischen Einheit?"},
-        {"What.is.the.name.of.your.organization.",
-                "Wie lautet der Name Ihrer Organisation?"},
-        {"What.is.the.name.of.your.City.or.Locality.",
-                "Wie lautet der Name Ihrer Stadt oder Gemeinde?"},
-        {"What.is.the.name.of.your.State.or.Province.",
-                "Wie lautet der Name Ihres Bundeslands?"},
-        {"What.is.the.two.letter.country.code.for.this.unit.",
-                "Wie lautet der L\u00E4ndercode (zwei Buchstaben) f\u00FCr diese Einheit?"},
-        {"Is.name.correct.", "Ist {0} richtig?"},
-        {"no", "Nein"},
-        {"yes", "Ja"},
-        {"y", "J"},
-        {".defaultValue.", "  [{0}]:  "},
-        {"Alias.alias.has.no.key",
-                "Alias <{0}> verf\u00FCgt \u00FCber keinen Schl\u00FCssel"},
-        {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key",
-                 "Alias <{0}> verweist auf einen Eintragstyp, der kein Private Key-Eintrag ist. Der Befehl -keyclone unterst\u00FCtzt nur das Clonen von Private Key-Eintr\u00E4gen"},
-
-        {".WARNING.WARNING.WARNING.",
-            "*****************  WARNING WARNING WARNING  *****************"},
-        {"Signer.d.", "Signaturgeber #%d:"},
-        {"Timestamp.", "Zeitstempel:"},
-        {"Signature.", "Signatur:"},
-        {"CRLs.", "CRLs:"},
-        {"Certificate.owner.", "Zertifikateigent\u00FCmer: "},
-        {"Not.a.signed.jar.file", "Keine signierte JAR-Datei"},
-        {"No.certificate.from.the.SSL.server",
-                "Kein Zertifikat vom SSL-Server"},
-
-        {".The.integrity.of.the.information.stored.in.your.keystore.",
-            "* Die Integrit\u00E4t der Informationen, die in Ihrem Keystore gespeichert sind, *\n* wurde NICHT gepr\u00FCft. Um die Integrit\u00E4t zu pr\u00FCfen, *\n* m\u00FCssen Sie Ihr Keystore-Kennwort angeben.                  *"},
-        {".The.integrity.of.the.information.stored.in.the.srckeystore.",
-            "* Die Integrit\u00E4t der Informationen, die in Ihrem Srckeystore gespeichert sind, *\n* wurde NICHT gepr\u00FCft. Um die Integrit\u00E4t zu pr\u00FCfen, *\n* m\u00FCssen Sie Ihr Srckeystore-Kennwort angeben.                  *"},
-
-        {"Certificate.reply.does.not.contain.public.key.for.alias.",
-                "Zertifikatantwort enth\u00E4lt keinen Public Key f\u00FCr <{0}>"},
-        {"Incomplete.certificate.chain.in.reply",
-                "Unvollst\u00E4ndige Zertifikatkette in Antwort"},
-        {"Certificate.chain.in.reply.does.not.verify.",
-                "Zertifikatkette in Antwort verifiziert nicht: "},
-        {"Top.level.certificate.in.reply.",
-                "Zertifikat der obersten Ebene in Antwort:\n"},
-        {".is.not.trusted.", "... ist nicht vertrauensw\u00FCrdig. "},
-        {"Install.reply.anyway.no.", "Antwort trotzdem installieren? [Nein]:  "},
-        {"NO", "NEIN"},
-        {"Public.keys.in.reply.and.keystore.don.t.match",
-                "Public Keys in Antwort und Keystore stimmen nicht \u00FCberein"},
-        {"Certificate.reply.and.certificate.in.keystore.are.identical",
-                "Zertifikatantwort und Zertifikat in Keystore sind identisch"},
-        {"Failed.to.establish.chain.from.reply",
-                "Kette konnte der Antwort nicht entnommen werden"},
-        {"n", "N"},
-        {"Wrong.answer.try.again", "Falsche Antwort. Wiederholen Sie den Vorgang"},
-        {"Secret.key.not.generated.alias.alias.already.exists",
-                "Secret Key wurde nicht generiert. Alias <{0}> ist bereits vorhanden"},
-        {"Please.provide.keysize.for.secret.key.generation",
-                "Geben Sie -keysize zum Erstellen eines Secret Keys an"},
-
-        {"Extensions.", "Erweiterungen: "},
-        {".Empty.value.", "(Leerer Wert)"},
-        {"Extension.Request.", "Erweiterungsanforderung:"},
-        {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.",
-                "PKCS #10-Zertifikatanforderung (Version 1.0)\nSubjekt: %s\nPublic Key: %s Format %s Schl\u00FCssel\n"},
-        {"Unknown.keyUsage.type.", "Unbekannter keyUsage-Typ: "},
-        {"Unknown.extendedkeyUsage.type.", "Unbekannter extendedkeyUsage-Typ: "},
-        {"Unknown.AccessDescription.type.", "Unbekannter AccessDescription-Typ: "},
-        {"Unrecognized.GeneralName.type.", "Unbekannter GeneralName-Typ: "},
-        {"This.extension.cannot.be.marked.as.critical.",
-                 "Erweiterung kann nicht als \"Kritisch\" markiert werden. "},
-        {"Odd.number.of.hex.digits.found.", "Ungerade Anzahl hexadezimaler Ziffern gefunden: "},
-        {"Unknown.extension.type.", "Unbekannter Erweiterungstyp: "},
-        {"command.{0}.is.ambiguous.", "Befehl {0} ist mehrdeutig:"},
-
-        // policytool
-        {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.",
-                "Warnung: Kein Public Key f\u00FCr Alias {0} vorhanden. Vergewissern Sie sich, dass der KeyStore ordnungsgem\u00E4\u00DF konfiguriert ist."},
-        {"Warning.Class.not.found.class", "Warnung: Klasse nicht gefunden: {0}"},
-        {"Warning.Invalid.argument.s.for.constructor.arg",
-                "Warnung: Ung\u00FCltige(s) Argument(e) f\u00FCr Constructor: {0}"},
-        {"Illegal.Principal.Type.type", "Ung\u00FCltiger Principal-Typ: {0}"},
-        {"Illegal.option.option", "Ung\u00FCltige Option: {0}"},
-        {"Usage.policytool.options.", "Verwendung: policytool [Optionen]"},
-        {".file.file.policy.file.location",
-                " [-file <Datei>]    Policy-Dateiverzeichnis"},
-        {"New", "Neu"},
-        {"Open", "\u00D6ffnen"},
-        {"Save", "Speichern"},
-        {"Save.As", "Speichern unter"},
-        {"View.Warning.Log", "Warnungslog anzeigen"},
-        {"Exit", "Beenden"},
-        {"Add.Policy.Entry", "Policy-Eintrag hinzuf\u00FCgen"},
-        {"Edit.Policy.Entry", "Policy-Eintrag bearbeiten"},
-        {"Remove.Policy.Entry", "Policy-Eintrag entfernen"},
-        {"Edit", "Bearbeiten"},
-        {"Retain", "Beibehalten"},
-
-        {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes",
-            "Warnung: M\u00F6glicherweise enth\u00E4lt der Dateiname Escape-Zeichen mit Backslash. Es ist nicht notwendig, Backslash-Zeichen zu escapen (das Tool f\u00FChrt dies automatisch beim Schreiben des Policy-Contents in den persistenten Speicher aus).\n\nKlicken Sie auf \"Beibehalten\", um den eingegebenen Namen beizubehalten oder auf \"Bearbeiten\", um den Namen zu bearbeiten."},
-
-        {"Add.Public.Key.Alias", "Public Key-Alias hinzuf\u00FCgen"},
-        {"Remove.Public.Key.Alias", "Public Key-Alias entfernen"},
-        {"File", "Datei"},
-        {"KeyStore", "KeyStore"},
-        {"Policy.File.", "Policy-Datei:"},
-        {"Could.not.open.policy.file.policyFile.e.toString.",
-                "Policy-Datei konnte nicht ge\u00F6ffnet werden: {0}: {1}"},
-        {"Policy.Tool", "Policy-Tool"},
-        {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.",
-                "Beim \u00D6ffnen der Policy-Konfiguration sind Fehler aufgetreten. Weitere Informationen finden Sie im Warnungslog."},
-        {"Error", "Fehler"},
-        {"OK", "OK"},
-        {"Status", "Status"},
-        {"Warning", "Warnung"},
-        {"Permission.",
-                "Berechtigung:                                                       "},
-        {"Principal.Type.", "Principal-Typ:"},
-        {"Principal.Name.", "Principal-Name:"},
-        {"Target.Name.",
-                "Zielname:                                                    "},
-        {"Actions.",
-                "Aktionen:                                                             "},
-        {"OK.to.overwrite.existing.file.filename.",
-                "Vorhandene Datei {0} \u00FCberschreiben?"},
-        {"Cancel", "Abbrechen"},
-        {"CodeBase.", "CodeBase:"},
-        {"SignedBy.", "SignedBy:"},
-        {"Add.Principal", "Principal hinzuf\u00FCgen"},
-        {"Edit.Principal", "Principal bearbeiten"},
-        {"Remove.Principal", "Principal entfernen"},
-        {"Principals.", "Principals:"},
-        {".Add.Permission", "  Berechtigung hinzuf\u00FCgen"},
-        {".Edit.Permission", "  Berechtigung bearbeiten"},
-        {"Remove.Permission", "Berechtigung entfernen"},
-        {"Done", "Fertig"},
-        {"KeyStore.URL.", "KeyStore-URL:"},
-        {"KeyStore.Type.", "KeyStore-Typ:"},
-        {"KeyStore.Provider.", "KeyStore-Provider:"},
-        {"KeyStore.Password.URL.", "KeyStore-Kennwort-URL:"},
-        {"Principals", "Principals"},
-        {".Edit.Principal.", "  Principal bearbeiten:"},
-        {".Add.New.Principal.", "  Neuen Principal hinzuf\u00FCgen:"},
-        {"Permissions", "Berechtigungen"},
-        {".Edit.Permission.", "  Berechtigung bearbeiten:"},
-        {".Add.New.Permission.", "  Neue Berechtigung hinzuf\u00FCgen:"},
-        {"Signed.By.", "Signiert von:"},
-        {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name",
-            "Principal kann nicht mit einer Platzhalterklasse ohne Platzhalternamen angegeben werden"},
-        {"Cannot.Specify.Principal.without.a.Name",
-            "Principal kann nicht ohne einen Namen angegeben werden"},
-        {"Permission.and.Target.Name.must.have.a.value",
-                "Berechtigung und Zielname m\u00FCssen einen Wert haben"},
-        {"Remove.this.Policy.Entry.", "Diesen Policy-Eintrag entfernen?"},
-        {"Overwrite.File", "Datei \u00FCberschreiben"},
-        {"Policy.successfully.written.to.filename",
-                "Policy erfolgreich in {0} geschrieben"},
-        {"null.filename", "Null-Dateiname"},
-        {"Save.changes.", "\u00C4nderungen speichern?"},
-        {"Yes", "Ja"},
-        {"No", "Nein"},
-        {"Policy.Entry", "Policy-Eintrag"},
-        {"Save.Changes", "\u00C4nderungen speichern"},
-        {"No.Policy.Entry.selected", "Kein Policy-Eintrag ausgew\u00E4hlt"},
-        {"Unable.to.open.KeyStore.ex.toString.",
-                "KeyStore kann nicht ge\u00F6ffnet werden: {0}"},
-        {"No.principal.selected", "Kein Principal ausgew\u00E4hlt"},
-        {"No.permission.selected", "Keine Berechtigung ausgew\u00E4hlt"},
-        {"name", "Name"},
-        {"configuration.type", "Konfigurationstyp"},
-        {"environment.variable.name", "Umgebungsvariablenname"},
-        {"library.name", "Library-Name"},
-        {"package.name", "Packagename"},
-        {"policy.type", "Policy-Typ"},
-        {"property.name", "Eigenschaftsname"},
-        {"Principal.List", "Principal-Liste"},
-        {"Permission.List", "Berechtigungsliste"},
-        {"Code.Base", "Codebase"},
-        {"KeyStore.U.R.L.", "KeyStore-URL:"},
-        {"KeyStore.Password.U.R.L.", "KeyStore-Kennwort-URL:"},
-
-
-        // javax.security.auth.PrivateCredentialPermission
-        {"invalid.null.input.s.", "Ung\u00FCltige Nulleingabe(n)"},
-        {"actions.can.only.be.read.", "Aktionen k\u00F6nnen nur \"lesen\" sein"},
-        {"permission.name.name.syntax.invalid.",
-                "Syntax f\u00FCr Berechtigungsnamen [{0}] ung\u00FCltig: "},
-        {"Credential.Class.not.followed.by.a.Principal.Class.and.Name",
-                "Nach Zugangsdatenklasse folgt keine Principal-Klasse und kein Name"},
-        {"Principal.Class.not.followed.by.a.Principal.Name",
-                "Nach Principal-Klasse folgt kein Principal-Name"},
-        {"Principal.Name.must.be.surrounded.by.quotes",
-                "Principal-Name muss in Anf\u00FChrungszeichen stehen"},
-        {"Principal.Name.missing.end.quote",
-                "Abschlie\u00DFendes Anf\u00FChrungszeichen f\u00FCr Principal-Name fehlt"},
-        {"PrivateCredentialPermission.Principal.Class.can.not.be.a.wildcard.value.if.Principal.Name.is.not.a.wildcard.value",
-                "Principal-Klasse PrivateCredentialPermission kann kein Platzhalterwert (*) sein, wenn der Principal-Name kein Platzhalterwert (*) ist"},
-        {"CredOwner.Principal.Class.class.Principal.Name.name",
-                "CredOwner:\n\tPrincipal-Klasse = {0}\n\tPrincipal-Name = {1}"},
-
-        // javax.security.auth.x500
-        {"provided.null.name", "Nullname angegeben"},
-        {"provided.null.keyword.map", "Null-Schl\u00FCsselwortzuordnung angegeben"},
-        {"provided.null.OID.map", "Null-OID-Zuordnung angegeben"},
-
-        // javax.security.auth.Subject
-        {"invalid.null.AccessControlContext.provided",
-                "Ung\u00FCltiger Nullwert f\u00FCr AccessControlContext angegeben"},
-        {"invalid.null.action.provided", "Ung\u00FCltige Nullaktion angegeben"},
-        {"invalid.null.Class.provided", "Ung\u00FCltige Nullklasse angegeben"},
-        {"Subject.", "Subjekt:\n"},
-        {".Principal.", "\tPrincipal: "},
-        {".Public.Credential.", "\t\u00D6ffentliche Zugangsdaten: "},
-        {".Private.Credentials.inaccessible.",
-                "\tKein Zugriff auf private Zugangsdaten\n"},
-        {".Private.Credential.", "\tPrivate Zugangsdaten: "},
-        {".Private.Credential.inaccessible.",
-                "\tKein Zugriff auf private Zugangsdaten\n"},
-        {"Subject.is.read.only", "Subjekt ist schreibgesch\u00FCtzt"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.java.security.Principal.to.a.Subject.s.Principal.Set",
-                "Es wird versucht, ein Objekt hinzuzuf\u00FCgen, das keine Instanz von java.security.Principal f\u00FCr eine Principal-Gruppe eines Subjekts ist"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.class",
-                "Es wird versucht, ein Objekt hinzuzuf\u00FCgen, das keine Instanz von {0} ist"},
-
-        // javax.security.auth.login.AppConfigurationEntry
-        {"LoginModuleControlFlag.", "LoginModuleControlFlag: "},
-
-        // javax.security.auth.login.LoginContext
-        {"Invalid.null.input.name", "Ung\u00FCltige Nulleingabe: Name"},
-        {"No.LoginModules.configured.for.name",
-         "F\u00FCr {0} sind keine LoginModules konfiguriert"},
-        {"invalid.null.Subject.provided", "Ung\u00FCltiges Nullsubjekt angegeben"},
-        {"invalid.null.CallbackHandler.provided",
-                "Ung\u00FCltiger Nullwert f\u00FCr CallbackHandler angegeben"},
-        {"null.subject.logout.called.before.login",
-                "Nullsubjekt - Abmeldung vor Anmeldung aufgerufen"},
-        {"unable.to.instantiate.LoginModule.module.because.it.does.not.provide.a.no.argument.constructor",
-                "LoginModule {0} kann nicht instanziiert werden, da es keinen argumentlosen Constructor angibt"},
-        {"unable.to.instantiate.LoginModule",
-                "LoginModule kann nicht instanziiert werden"},
-        {"unable.to.instantiate.LoginModule.",
-                "LoginModule kann nicht instanziiert werden: "},
-        {"unable.to.find.LoginModule.class.",
-                "LoginModule-Klasse kann nicht gefunden werden: "},
-        {"unable.to.access.LoginModule.",
-                "Kein Zugriff auf LoginModule m\u00F6glich: "},
-        {"Login.Failure.all.modules.ignored",
-                "Anmeldefehler: Alle Module werden ignoriert"},
-
-        // sun.security.provider.PolicyFile
-
-        {"java.security.policy.error.parsing.policy.message",
-                "java.security.policy: Fehler beim Parsen von {0}:\n\t{1}"},
-        {"java.security.policy.error.adding.Permission.perm.message",
-                "java.security.policy: Fehler beim Hinzuf\u00FCgen von Berechtigung, {0}:\n\t{1}"},
-        {"java.security.policy.error.adding.Entry.message",
-                "java.security.policy: Fehler beim Hinzuf\u00FCgen von Eintrag:\n\t{0}"},
-        {"alias.name.not.provided.pe.name.", "Aliasname nicht angegeben ({0})"},
-        {"unable.to.perform.substitution.on.alias.suffix",
-                "Substitution f\u00FCr Alias {0} kann nicht ausgef\u00FChrt werden"},
-        {"substitution.value.prefix.unsupported",
-                "Substitutionswert {0} nicht unterst\u00FCtzt"},
-        {"LPARAM", "("},
-        {"RPARAM", ")"},
-        {"type.can.t.be.null","Typ kann nicht null sein"},
-
-        // sun.security.provider.PolicyParser
-        {"keystorePasswordURL.can.not.be.specified.without.also.specifying.keystore",
-                "keystorePasswordURL kann nicht ohne Keystore angegeben werden"},
-        {"expected.keystore.type", "Keystore-Typ erwartet"},
-        {"expected.keystore.provider", "Keystore-Provider erwartet"},
-        {"multiple.Codebase.expressions",
-                "mehrere Codebase-Ausdr\u00FCcke"},
-        {"multiple.SignedBy.expressions","mehrere SignedBy-Ausdr\u00FCcke"},
-        {"SignedBy.has.empty.alias","Leerer Alias in SignedBy"},
-        {"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
-                "Principal kann nicht mit einer Platzhalterklasse ohne Platzhalternamen angegeben werden"},
-        {"expected.codeBase.or.SignedBy.or.Principal",
-                "codeBase oder SignedBy oder Principal erwartet"},
-        {"expected.permission.entry", "Berechtigungseintrag erwartet"},
-        {"number.", "Nummer "},
-        {"expected.expect.read.end.of.file.",
-                "[{0}] erwartet, [Dateiende] gelesen"},
-        {"expected.read.end.of.file.",
-                "[;] erwartet, [Dateiende] gelesen"},
-        {"line.number.msg", "Zeile {0}: {1}"},
-        {"line.number.expected.expect.found.actual.",
-                "Zeile {0}: [{1}] erwartet, [{2}] gefunden"},
-        {"null.principalClass.or.principalName",
-                "principalClass oder principalName null"},
-
-        // sun.security.pkcs11.SunPKCS11
-        {"PKCS11.Token.providerName.Password.",
-                "Kennwort f\u00FCr PKCS11-Token [{0}]: "},
-
-        /* --- DEPRECATED --- */
-        // javax.security.auth.Policy
-        {"unable.to.instantiate.Subject.based.policy",
-                "Subjektbasierte Policy kann nicht instanziiert werden"}
-    };
-
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     *
-     * <p>
-     *
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-}
-
diff --git a/ojluni/src/main/java/sun/security/util/Resources_es.java b/ojluni/src/main/java/sun/security/util/Resources_es.java
deleted file mode 100755
index e3fc30a..0000000
--- a/ojluni/src/main/java/sun/security/util/Resources_es.java
+++ /dev/null
@@ -1,661 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, 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.
- */
-
-package sun.security.util;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for javax.security.auth and sun.security.
- *
- */
-public class Resources_es extends java.util.ListResourceBundle {
-
-    private static final Object[][] contents = {
-
-        // shared (from jarsigner)
-        {"SPACE", " "},
-        {"2SPACE", "  "},
-        {"6SPACE", "      "},
-        {"COMMA", ", "},
-        // shared (from keytool)
-        {"NEWLINE", "\n"},
-        {"STAR",
-                "*******************************************"},
-        {"STARNN",
-                "*******************************************\n\n"},
-
-        // keytool: Help part
-        {".OPTION.", " [OPTION]..."},
-        {"Options.", "Opciones:"},
-        {"Use.keytool.help.for.all.available.commands",
-                 "Utilice\"keytool -help\" para todos los comandos disponibles"},
-        {"Key.and.Certificate.Management.Tool",
-                 "Herramienta de Gesti\u00F3n de Certificados y Claves"},
-        {"Commands.", "Comandos:"},
-        {"Use.keytool.command.name.help.for.usage.of.command.name",
-                "Utilice \"keytool -command_name -help\" para la sintaxis de nombre_comando"},
-        // keytool: help: commands
-        {"Generates.a.certificate.request",
-                "Genera una solicitud de certificado"}, //-certreq
-        {"Changes.an.entry.s.alias",
-                "Cambia un alias de entrada"}, //-changealias
-        {"Deletes.an.entry",
-                "Suprime una entrada"}, //-delete
-        {"Exports.certificate",
-                "Exporta el certificado"}, //-exportcert
-        {"Generates.a.key.pair",
-                "Genera un par de claves"}, //-genkeypair
-        {"Generates.a.secret.key",
-                "Genera un clave secreta"}, //-genseckey
-        {"Generates.certificate.from.a.certificate.request",
-                "Genera un certificado a partir de una solicitud de certificado"}, //-gencert
-        {"Generates.CRL", "Genera CRL"}, //-gencrl
-        {"Imports.entries.from.a.JDK.1.1.x.style.identity.database",
-                "Importa entradas desde una base de datos de identidades JDK 1.1.x-style"}, //-identitydb
-        {"Imports.a.certificate.or.a.certificate.chain",
-                "Importa un certificado o una cadena de certificados"}, //-importcert
-        {"Imports.one.or.all.entries.from.another.keystore",
-                "Importa una o todas las entradas desde otro almac\u00E9n de claves"}, //-importkeystore
-        {"Clones.a.key.entry",
-                "Clona una entrada de clave"}, //-keyclone
-        {"Changes.the.key.password.of.an.entry",
-                "Cambia la contrase\u00F1a de clave de una entrada"}, //-keypasswd
-        {"Lists.entries.in.a.keystore",
-                "Enumera las entradas de un almac\u00E9n de claves"}, //-list
-        {"Prints.the.content.of.a.certificate",
-                "Imprime el contenido de un certificado"}, //-printcert
-        {"Prints.the.content.of.a.certificate.request",
-                "Imprime el contenido de una solicitud de certificado"}, //-printcertreq
-        {"Prints.the.content.of.a.CRL.file",
-                "Imprime el contenido de un archivo CRL"}, //-printcrl
-        {"Generates.a.self.signed.certificate",
-                "Genera un certificado autofirmado"}, //-selfcert
-        {"Changes.the.store.password.of.a.keystore",
-                "Cambia la contrase\u00F1a de almac\u00E9n de un almac\u00E9n de claves"}, //-storepasswd
-        // keytool: help: options
-        {"alias.name.of.the.entry.to.process",
-                "nombre de alias de la entrada que se va a procesar"}, //-alias
-        {"destination.alias",
-                "alias de destino"}, //-destalias
-        {"destination.key.password",
-                "contrase\u00F1a de clave de destino"}, //-destkeypass
-        {"destination.keystore.name",
-                "nombre de almac\u00E9n de claves de destino"}, //-destkeystore
-        {"destination.keystore.password.protected",
-                "almac\u00E9n de claves de destino protegido por contrase\u00F1a"}, //-destprotected
-        {"destination.keystore.provider.name",
-                "nombre de proveedor de almac\u00E9n de claves de destino"}, //-destprovidername
-        {"destination.keystore.password",
-                "contrase\u00F1a de almac\u00E9n de claves de destino"}, //-deststorepass
-        {"destination.keystore.type",
-                "tipo de almac\u00E9n de claves de destino"}, //-deststoretype
-        {"distinguished.name",
-                "nombre distintivo"}, //-dname
-        {"X.509.extension",
-                "extensi\u00F3n X.509"}, //-ext
-        {"output.file.name",
-                "nombre de archivo de salida"}, //-file and -outfile
-        {"input.file.name",
-                "nombre de archivo de entrada"}, //-file and -infile
-        {"key.algorithm.name",
-                "nombre de algoritmo de clave"}, //-keyalg
-        {"key.password",
-                "contrase\u00F1a de clave"}, //-keypass
-        {"key.bit.size",
-                "tama\u00F1o de bit de clave"}, //-keysize
-        {"keystore.name",
-                "nombre de almac\u00E9n de claves"}, //-keystore
-        {"new.password",
-                "nueva contrase\u00F1a"}, //-new
-        {"do.not.prompt",
-                "no solicitar"}, //-noprompt
-        {"password.through.protected.mechanism",
-                "contrase\u00F1a a trav\u00E9s de mecanismo protegido"}, //-protected
-        {"provider.argument",
-                "argumento del proveedor"}, //-providerarg
-        {"provider.class.name",
-                "nombre de clase del proveedor"}, //-providerclass
-        {"provider.name",
-                "nombre del proveedor"}, //-providername
-        {"provider.classpath",
-                "classpath de proveedor"}, //-providerpath
-        {"output.in.RFC.style",
-                "salida en estilo RFC"}, //-rfc
-        {"signature.algorithm.name",
-                "nombre de algoritmo de firma"}, //-sigalg
-        {"source.alias",
-                "alias de origen"}, //-srcalias
-        {"source.key.password",
-                "contrase\u00F1a de clave de origen"}, //-srckeypass
-        {"source.keystore.name",
-                "nombre de almac\u00E9n de claves de origen"}, //-srckeystore
-        {"source.keystore.password.protected",
-                "almac\u00E9n de claves de origen protegido por contrase\u00F1a"}, //-srcprotected
-        {"source.keystore.provider.name",
-                "nombre de proveedor de almac\u00E9n de claves de origen"}, //-srcprovidername
-        {"source.keystore.password",
-                "contrase\u00F1a de almac\u00E9n de claves de origen"}, //-srcstorepass
-        {"source.keystore.type",
-                "tipo de almac\u00E9n de claves de origen"}, //-srcstoretype
-        {"SSL.server.host.and.port",
-                "puerto y host del servidor SSL"}, //-sslserver
-        {"signed.jar.file",
-                "archivo jar firmado"}, //=jarfile
-        {"certificate.validity.start.date.time",
-                "fecha/hora de inicio de validez del certificado"}, //-startdate
-        {"keystore.password",
-                "contrase\u00F1a de almac\u00E9n de claves"}, //-storepass
-        {"keystore.type",
-                "tipo de almac\u00E9n de claves"}, //-storetype
-        {"trust.certificates.from.cacerts",
-                "certificados de protecci\u00F3n de cacerts"}, //-trustcacerts
-        {"verbose.output",
-                "salida detallada"}, //-v
-        {"validity.number.of.days",
-                "n\u00FAmero de validez de d\u00EDas"}, //-validity
-        {"Serial.ID.of.cert.to.revoke",
-                 "identificador de serie del certificado que se va a revocar"}, //-id
-        // keytool: Running part
-        {"keytool.error.", "error de herramienta de claves: "},
-        {"Illegal.option.", "Opci\u00F3n no permitida:  "},
-        {"Illegal.value.", "Valor no permitido: "},
-        {"Unknown.password.type.", "Tipo de contrase\u00F1a desconocido: "},
-        {"Cannot.find.environment.variable.",
-                "No se ha encontrado la variable del entorno: "},
-        {"Cannot.find.file.", "No se ha encontrado el archivo: "},
-        {"Command.option.flag.needs.an.argument.", "La opci\u00F3n de comando {0} necesita un argumento."},
-        {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.",
-                "Advertencia: los almacenes de claves en formato PKCS12 no admiten contrase\u00F1as de clave y almacenamiento distintas. Se ignorar\u00E1 el valor especificado por el usuario, {0}."},
-        {".keystore.must.be.NONE.if.storetype.is.{0}",
-                "-keystore debe ser NONE si -storetype es {0}"},
-        {"Too.many.retries.program.terminated",
-                 "Ha habido demasiados intentos, se ha cerrado el programa"},
-        {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}",
-                "Los comandos -storepasswd y -keypasswd no est\u00E1n soportados si -storetype es {0}"},
-        {".keypasswd.commands.not.supported.if.storetype.is.PKCS12",
-                "Los comandos -keypasswd no est\u00E1n soportados si -storetype es PKCS12"},
-        {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}",
-                "-keypass y -new no se pueden especificar si -storetype es {0}"},
-        {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified",
-                "si se especifica -protected, no deben especificarse -storepass, -keypass ni -new"},
-        {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "Si se especifica -srcprotected, no se puede especificar -srcstorepass ni -srckeypass"},
-        {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified",
-                "Si keystore no est\u00E1 protegido por contrase\u00F1a, no se deben especificar -storepass, -keypass ni -new"},
-        {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "Si el almac\u00E9n de claves de origen no est\u00E1 protegido por contrase\u00F1a, no se deben especificar -srcstorepass ni -srckeypass"},
-        {"Illegal.startdate.value", "Valor de fecha de inicio no permitido"},
-        {"Validity.must.be.greater.than.zero",
-                "La validez debe ser mayor que cero"},
-        {"provName.not.a.provider", "{0} no es un proveedor"},
-        {"Usage.error.no.command.provided", "Error de sintaxis: no se ha proporcionado ning\u00FAn comando"},
-        {"Source.keystore.file.exists.but.is.empty.", "El archivo de almac\u00E9n de claves de origen existe, pero est\u00E1 vac\u00EDo: "},
-        {"Please.specify.srckeystore", "Especifique -srckeystore"},
-        {"Must.not.specify.both.v.and.rfc.with.list.command",
-                "No se deben especificar -v y -rfc simult\u00E1neamente con el comando 'list'"},
-        {"Key.password.must.be.at.least.6.characters",
-                "La contrase\u00F1a de clave debe tener al menos 6 caracteres"},
-        {"New.password.must.be.at.least.6.characters",
-                "La nueva contrase\u00F1a debe tener al menos 6 caracteres"},
-        {"Keystore.file.exists.but.is.empty.",
-                "El archivo de almac\u00E9n de claves existe, pero est\u00E1 vac\u00EDo: "},
-        {"Keystore.file.does.not.exist.",
-                "El archivo de almac\u00E9n de claves no existe: "},
-        {"Must.specify.destination.alias", "Se debe especificar un alias de destino"},
-        {"Must.specify.alias", "Se debe especificar un alias"},
-        {"Keystore.password.must.be.at.least.6.characters",
-                "La contrase\u00F1a del almac\u00E9n de claves debe tener al menos 6 caracteres"},
-        {"Enter.keystore.password.", "Introduzca la contrase\u00F1a del almac\u00E9n de claves:  "},
-        {"Enter.source.keystore.password.", "Introduzca la contrase\u00F1a de almac\u00E9n de claves de origen:  "},
-        {"Enter.destination.keystore.password.", "Introduzca la contrase\u00F1a de almac\u00E9n de claves de destino:  "},
-        {"Keystore.password.is.too.short.must.be.at.least.6.characters",
-         "La contrase\u00F1a del almac\u00E9n de claves es demasiado corta, debe tener al menos 6 caracteres"},
-        {"Unknown.Entry.Type", "Tipo de Entrada Desconocido"},
-        {"Too.many.failures.Alias.not.changed", "Demasiados fallos. No se ha cambiado el alias"},
-        {"Entry.for.alias.alias.successfully.imported.",
-                 "La entrada del alias {0} se ha importado correctamente."},
-        {"Entry.for.alias.alias.not.imported.", "La entrada del alias {0} no se ha importado."},
-        {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.",
-                 "Problema al importar la entrada del alias {0}: {1}.\nNo se ha importado la entrada del alias {0}."},
-        {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled",
-                 "Comando de importaci\u00F3n completado: {0} entradas importadas correctamente, {1} entradas incorrectas o canceladas"},
-        {"Warning.Overwriting.existing.alias.alias.in.destination.keystore",
-                 "Advertencia: se sobrescribir\u00E1 el alias {0} en el almac\u00E9n de claves de destino"},
-        {"Existing.entry.alias.alias.exists.overwrite.no.",
-                 "El alias de entrada existente {0} ya existe, \u00BFdesea sobrescribirlo? [no]:  "},
-        {"Too.many.failures.try.later", "Demasiados fallos; int\u00E9ntelo m\u00E1s adelante"},
-        {"Certification.request.stored.in.file.filename.",
-                "Solicitud de certificaci\u00F3n almacenada en el archivo <{0}>"},
-        {"Submit.this.to.your.CA", "Enviar a la CA"},
-        {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
-            "si no se especifica el alias, no se puede especificar destalias, srckeypass ni destkeypass"},
-        {"Certificate.stored.in.file.filename.",
-                "Certificado almacenado en el archivo <{0}>"},
-        {"Certificate.reply.was.installed.in.keystore",
-                "Se ha instalado la respuesta del certificado en el almac\u00E9n de claves"},
-        {"Certificate.reply.was.not.installed.in.keystore",
-                "No se ha instalado la respuesta del certificado en el almac\u00E9n de claves"},
-        {"Certificate.was.added.to.keystore",
-                "Se ha agregado el certificado al almac\u00E9n de claves"},
-        {"Certificate.was.not.added.to.keystore",
-                "No se ha agregado el certificado al almac\u00E9n de claves"},
-        {".Storing.ksfname.", "[Almacenando {0}]"},
-        {"alias.has.no.public.key.certificate.",
-                "{0} no tiene clave p\u00FAblica (certificado)"},
-        {"Cannot.derive.signature.algorithm",
-                "No se puede derivar el algoritmo de firma"},
-        {"Alias.alias.does.not.exist",
-                "El alias <{0}> no existe"},
-        {"Alias.alias.has.no.certificate",
-                "El alias <{0}> no tiene certificado"},
-        {"Key.pair.not.generated.alias.alias.already.exists",
-                "No se ha generado el par de claves, el alias <{0}> ya existe"},
-        {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for",
-                "Generando par de claves {1} de {0} bits para certificado autofirmado ({2}) con una validez de {3} d\u00EDas\n\tpara: {4}"},
-        {"Enter.key.password.for.alias.", "Introduzca la contrase\u00F1a de clave para <{0}>"},
-        {".RETURN.if.same.as.keystore.password.",
-                "\t(INTRO si es la misma contrase\u00F1a que la del almac\u00E9n de claves):  "},
-        {"Key.password.is.too.short.must.be.at.least.6.characters",
-                "La contrase\u00F1a de clave es demasiado corta; debe tener al menos 6 caracteres"},
-        {"Too.many.failures.key.not.added.to.keystore",
-                "Demasiados fallos; no se ha agregado la clave al almac\u00E9n de claves"},
-        {"Destination.alias.dest.already.exists",
-                "El alias de destino <{0}> ya existe"},
-        {"Password.is.too.short.must.be.at.least.6.characters",
-                "La contrase\u00F1a es demasiado corta; debe tener al menos 6 caracteres"},
-        {"Too.many.failures.Key.entry.not.cloned",
-                "Demasiados fallos. No se ha clonado la entrada de clave"},
-        {"key.password.for.alias.", "contrase\u00F1a de clave para <{0}>"},
-        {"Keystore.entry.for.id.getName.already.exists",
-                "La entrada de almac\u00E9n de claves para <{0}> ya existe"},
-        {"Creating.keystore.entry.for.id.getName.",
-                "Creando entrada de almac\u00E9n de claves para <{0}> ..."},
-        {"No.entries.from.identity.database.added",
-                "No se han agregado entradas de la base de datos de identidades"},
-        {"Alias.name.alias", "Nombre de Alias: {0}"},
-        {"Creation.date.keyStore.getCreationDate.alias.",
-                "Fecha de Creaci\u00F3n: {0,date}"},
-        {"alias.keyStore.getCreationDate.alias.",
-                "{0}, {1,date}, "},
-        {"alias.", "{0}, "},
-        {"Entry.type.type.", "Tipo de Entrada: {0}"},
-        {"Certificate.chain.length.", "Longitud de la Cadena de Certificado: "},
-        {"Certificate.i.1.", "Certificado[{0,number,integer}]:"},
-        {"Certificate.fingerprint.SHA1.", "Huella Digital de Certificado (SHA1): "},
-        {"Keystore.type.", "Tipo de Almac\u00E9n de Claves: "},
-        {"Keystore.provider.", "Proveedor de Almac\u00E9n de Claves: "},
-        {"Your.keystore.contains.keyStore.size.entry",
-                "Su almac\u00E9n de claves contiene {0,number,integer} entrada"},
-        {"Your.keystore.contains.keyStore.size.entries",
-                "Su almac\u00E9n de claves contiene {0,number,integer} entradas"},
-        {"Failed.to.parse.input", "Fallo al analizar la entrada"},
-        {"Empty.input", "Entrada vac\u00EDa"},
-        {"Not.X.509.certificate", "No es un certificado X.509"},
-        {"alias.has.no.public.key", "{0} no tiene clave p\u00FAblica"},
-        {"alias.has.no.X.509.certificate", "{0} no tiene certificado X.509"},
-        {"New.certificate.self.signed.", "Nuevo Certificado (Autofirmado):"},
-        {"Reply.has.no.certificates", "La respuesta no tiene certificados"},
-        {"Certificate.not.imported.alias.alias.already.exists",
-                "Certificado no importado, el alias <{0}> ya existe"},
-        {"Input.not.an.X.509.certificate", "La entrada no es un certificado X.509"},
-        {"Certificate.already.exists.in.keystore.under.alias.trustalias.",
-                "El certificado ya existe en el almac\u00E9n de claves con el alias <{0}>"},
-        {"Do.you.still.want.to.add.it.no.",
-                "\u00BFA\u00FAn desea agregarlo? [no]:  "},
-        {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.",
-                "El certificado ya existe en el almac\u00E9n de claves de la CA del sistema, con el alias <{0}>"},
-        {"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
-                "\u00BFA\u00FAn desea agregarlo a su propio almac\u00E9n de claves? [no]:  "},
-        {"Trust.this.certificate.no.", "\u00BFConfiar en este certificado? [no]:  "},
-        {"YES", "S\u00CD"},
-        {"New.prompt.", "Nuevo {0}: "},
-        {"Passwords.must.differ", "Las contrase\u00F1as deben ser distintas"},
-        {"Re.enter.new.prompt.", "Vuelva a escribir el nuevo {0}: "},
-        {"Re.enter.new.password.", "Volver a escribir la contrase\u00F1a nueva: "},
-        {"They.don.t.match.Try.again", "No coinciden. Int\u00E9ntelo de nuevo"},
-        {"Enter.prompt.alias.name.", "Escriba el nombre de alias de {0}:  "},
-        {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.",
-                 "Indique el nuevo nombre de alias\t(INTRO para cancelar la importaci\u00F3n de esta entrada):  "},
-        {"Enter.alias.name.", "Introduzca el nombre de alias:  "},
-        {".RETURN.if.same.as.for.otherAlias.",
-                "\t(INTRO si es el mismo que para <{0}>)"},
-        {".PATTERN.printX509Cert",
-                "Propietario: {0}\nEmisor: {1}\nN\u00FAmero de serie: {2}\nV\u00E1lido desde: {3} hasta: {4}\nHuellas digitales del Certificado:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Nombre del Algoritmo de Firma: {8}\n\t Versi\u00F3n: {9}"},
-        {"What.is.your.first.and.last.name.",
-                "\u00BFCu\u00E1les son su nombre y su apellido?"},
-        {"What.is.the.name.of.your.organizational.unit.",
-                "\u00BFCu\u00E1l es el nombre de su unidad de organizaci\u00F3n?"},
-        {"What.is.the.name.of.your.organization.",
-                "\u00BFCu\u00E1l es el nombre de su organizaci\u00F3n?"},
-        {"What.is.the.name.of.your.City.or.Locality.",
-                "\u00BFCu\u00E1l es el nombre de su ciudad o localidad?"},
-        {"What.is.the.name.of.your.State.or.Province.",
-                "\u00BFCu\u00E1l es el nombre de su estado o provincia?"},
-        {"What.is.the.two.letter.country.code.for.this.unit.",
-                "\u00BFCu\u00E1l es el c\u00F3digo de pa\u00EDs de dos letras de la unidad?"},
-        {"Is.name.correct.", "\u00BFEs correcto {0}?"},
-        {"no", "no"},
-        {"yes", "s\u00ED"},
-        {"y", "s"},
-        {".defaultValue.", "  [{0}]:  "},
-        {"Alias.alias.has.no.key",
-                "El alias <{0}> no tiene clave"},
-        {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key",
-                 "El alias <{0}> hace referencia a un tipo de entrada que no es una clave privada. El comando -keyclone s\u00F3lo permite la clonaci\u00F3n de entradas de claves privadas"},
-
-        {".WARNING.WARNING.WARNING.",
-            "*****************  WARNING WARNING WARNING  *****************"},
-        {"Signer.d.", "#%d de Firmante:"},
-        {"Timestamp.", "Registro de Hora:"},
-        {"Signature.", "Firma:"},
-        {"CRLs.", "CRL:"},
-        {"Certificate.owner.", "Propietario del Certificado: "},
-        {"Not.a.signed.jar.file", "No es un archivo jar firmado"},
-        {"No.certificate.from.the.SSL.server",
-                "Ning\u00FAn certificado del servidor SSL"},
-
-        {".The.integrity.of.the.information.stored.in.your.keystore.",
-            "* La integridad de la informaci\u00F3n almacenada en el almac\u00E9n de claves  *\n* NO se ha comprobado.  Para comprobar dicha integridad, *\n* debe proporcionar la contrase\u00F1a del almac\u00E9n de claves.                  *"},
-        {".The.integrity.of.the.information.stored.in.the.srckeystore.",
-            "* La integridad de la informaci\u00F3n almacenada en srckeystore*\n* NO se ha comprobado.  Para comprobar dicha integridad, *\n* debe proporcionar la contrase\u00F1a de srckeystore.                *"},
-
-        {"Certificate.reply.does.not.contain.public.key.for.alias.",
-                "La respuesta de certificado no contiene una clave p\u00FAblica para <{0}>"},
-        {"Incomplete.certificate.chain.in.reply",
-                "Cadena de certificado incompleta en la respuesta"},
-        {"Certificate.chain.in.reply.does.not.verify.",
-                "La cadena de certificado de la respuesta no verifica: "},
-        {"Top.level.certificate.in.reply.",
-                "Certificado de nivel superior en la respuesta:\n"},
-        {".is.not.trusted.", "... no es de confianza. "},
-        {"Install.reply.anyway.no.", "\u00BFInstalar respuesta de todos modos? [no]:  "},
-        {"NO", "NO"},
-        {"Public.keys.in.reply.and.keystore.don.t.match",
-                "Las claves p\u00FAblicas en la respuesta y en el almac\u00E9n de claves no coinciden"},
-        {"Certificate.reply.and.certificate.in.keystore.are.identical",
-                "La respuesta del certificado y el certificado en el almac\u00E9n de claves son id\u00E9nticos"},
-        {"Failed.to.establish.chain.from.reply",
-                "No se ha podido definir una cadena a partir de la respuesta"},
-        {"n", "n"},
-        {"Wrong.answer.try.again", "Respuesta incorrecta, vuelva a intentarlo"},
-        {"Secret.key.not.generated.alias.alias.already.exists",
-                "No se ha generado la clave secreta, el alias <{0}> ya existe"},
-        {"Please.provide.keysize.for.secret.key.generation",
-                "Proporcione el valor de -keysize para la generaci\u00F3n de claves secretas"},
-
-        {"Extensions.", "Extensiones: "},
-        {".Empty.value.", "(Valor vac\u00EDo)"},
-        {"Extension.Request.", "Solicitud de Extensi\u00F3n:"},
-        {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.",
-                "Solicitud de Certificado PKCS #10 (Versi\u00F3n 1.0)\nAsunto: %s\nClave P\u00FAblica: %s formato %s clave\n"},
-        {"Unknown.keyUsage.type.", "Tipo de uso de clave desconocido: "},
-        {"Unknown.extendedkeyUsage.type.", "Tipo de uso de clave extendida desconocido: "},
-        {"Unknown.AccessDescription.type.", "Tipo de descripci\u00F3n de acceso desconocido: "},
-        {"Unrecognized.GeneralName.type.", "Tipo de nombre general no reconocido: "},
-        {"This.extension.cannot.be.marked.as.critical.",
-                 "Esta extensi\u00F3n no se puede marcar como cr\u00EDtica. "},
-        {"Odd.number.of.hex.digits.found.", "Se ha encontrado un n\u00FAmero impar de d\u00EDgitos hexadecimales: "},
-        {"Unknown.extension.type.", "Tipo de extensi\u00F3n desconocida: "},
-        {"command.{0}.is.ambiguous.", "El comando {0} es ambiguo:"},
-
-        // policytool
-        {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.",
-                "Advertencia: no hay clave p\u00FAblica para el alias {0}. Aseg\u00FArese de que se ha configurado correctamente un almac\u00E9n de claves."},
-        {"Warning.Class.not.found.class", "Advertencia: no se ha encontrado la clase: {0}"},
-        {"Warning.Invalid.argument.s.for.constructor.arg",
-                "Advertencia: argumento(s) no v\u00E1lido(s) para el constructor: {0}"},
-        {"Illegal.Principal.Type.type", "Tipo de principal no permitido: {0}"},
-        {"Illegal.option.option", "Opci\u00F3n no permitida: {0}"},
-        {"Usage.policytool.options.", "Sintaxis: policytool [opciones]"},
-        {".file.file.policy.file.location",
-                "  [-file <archivo>]    ubicaci\u00F3n del archivo de normas"},
-        {"New", "Nuevo"},
-        {"Open", "Abrir"},
-        {"Save", "Guardar"},
-        {"Save.As", "Guardar como"},
-        {"View.Warning.Log", "Ver Log de Advertencias"},
-        {"Exit", "Salir"},
-        {"Add.Policy.Entry", "Agregar Entrada de Pol\u00EDtica"},
-        {"Edit.Policy.Entry", "Editar Entrada de Pol\u00EDtica"},
-        {"Remove.Policy.Entry", "Eliminar Entrada de Pol\u00EDtica"},
-        {"Edit", "Editar"},
-        {"Retain", "Mantener"},
-
-        {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes",
-            "Advertencia: el nombre del archivo puede contener caracteres de barra invertida de escape. No es necesario utilizar barras invertidas de escape (la herramienta aplica caracteres de escape seg\u00FAn sea necesario al escribir el contenido de las pol\u00EDticas en el almac\u00E9n persistente).\n\nHaga clic en Mantener para conservar el nombre introducido o en Editar para modificarlo."},
-
-        {"Add.Public.Key.Alias", "Agregar Alias de Clave P\u00FAblico"},
-        {"Remove.Public.Key.Alias", "Eliminar Alias de Clave P\u00FAblico"},
-        {"File", "Archivo"},
-        {"KeyStore", "Almac\u00E9n de Claves"},
-        {"Policy.File.", "Archivo de Pol\u00EDtica:"},
-        {"Could.not.open.policy.file.policyFile.e.toString.",
-                "No se ha podido abrir el archivo de pol\u00EDtica: {0}: {1}"},
-        {"Policy.Tool", "Herramienta de Pol\u00EDticas"},
-        {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.",
-                "Ha habido errores al abrir la configuraci\u00F3n de pol\u00EDticas. V\u00E9ase el log de advertencias para obtener m\u00E1s informaci\u00F3n."},
-        {"Error", "Error"},
-        {"OK", "Aceptar"},
-        {"Status", "Estado"},
-        {"Warning", "Advertencia"},
-        {"Permission.",
-                "Permiso:                                                       "},
-        {"Principal.Type.", "Tipo de Principal:"},
-        {"Principal.Name.", "Nombre de Principal:"},
-        {"Target.Name.",
-                "Nombre de Destino:                                                    "},
-        {"Actions.",
-                "Acciones:                                                             "},
-        {"OK.to.overwrite.existing.file.filename.",
-                "\u00BFSobrescribir el archivo existente {0}?"},
-        {"Cancel", "Cancelar"},
-        {"CodeBase.", "CodeBase:"},
-        {"SignedBy.", "SignedBy:"},
-        {"Add.Principal", "Agregar Principal"},
-        {"Edit.Principal", "Editar Principal"},
-        {"Remove.Principal", "Eliminar Principal"},
-        {"Principals.", "Principales:"},
-        {".Add.Permission", "  Agregar Permiso"},
-        {".Edit.Permission", "  Editar Permiso"},
-        {"Remove.Permission", "Eliminar Permiso"},
-        {"Done", "Listo"},
-        {"KeyStore.URL.", "URL de Almac\u00E9n de Claves:"},
-        {"KeyStore.Type.", "Tipo de Almac\u00E9n de Claves:"},
-        {"KeyStore.Provider.", "Proveedor de Almac\u00E9n de Claves:"},
-        {"KeyStore.Password.URL.", "URL de Contrase\u00F1a de Almac\u00E9n de Claves:"},
-        {"Principals", "Principales"},
-        {".Edit.Principal.", "  Editar Principal:"},
-        {".Add.New.Principal.", "  Agregar Nuevo Principal:"},
-        {"Permissions", "Permisos"},
-        {".Edit.Permission.", "  Editar Permiso:"},
-        {".Add.New.Permission.", "  Agregar Permiso Nuevo:"},
-        {"Signed.By.", "Firmado Por:"},
-        {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name",
-            "No se puede especificar un principal con una clase de comod\u00EDn sin un nombre de comod\u00EDn"},
-        {"Cannot.Specify.Principal.without.a.Name",
-            "No se puede especificar el principal sin un nombre"},
-        {"Permission.and.Target.Name.must.have.a.value",
-                "Permiso y Nombre de Destino deben tener un valor"},
-        {"Remove.this.Policy.Entry.", "\u00BFEliminar esta entrada de pol\u00EDtica?"},
-        {"Overwrite.File", "Sobrescribir Archivo"},
-        {"Policy.successfully.written.to.filename",
-                "Pol\u00EDtica escrita correctamente en {0}"},
-        {"null.filename", "nombre de archivo nulo"},
-        {"Save.changes.", "\u00BFGuardar los cambios?"},
-        {"Yes", "S\u00ED"},
-        {"No", "No"},
-        {"Policy.Entry", "Entrada de Pol\u00EDtica"},
-        {"Save.Changes", "Guardar Cambios"},
-        {"No.Policy.Entry.selected", "No se ha seleccionado la entrada de pol\u00EDtica"},
-        {"Unable.to.open.KeyStore.ex.toString.",
-                "No se ha podido abrir el almac\u00E9n de claves: {0}"},
-        {"No.principal.selected", "No se ha seleccionado un principal"},
-        {"No.permission.selected", "No se ha seleccionado un permiso"},
-        {"name", "nombre"},
-        {"configuration.type", "tipo de configuraci\u00F3n"},
-        {"environment.variable.name", "nombre de variable de entorno"},
-        {"library.name", "nombre de la biblioteca"},
-        {"package.name", "nombre del paquete"},
-        {"policy.type", "tipo de pol\u00EDtica"},
-        {"property.name", "nombre de la propiedad"},
-        {"Principal.List", "Lista de Principales"},
-        {"Permission.List", "Lista de Permisos"},
-        {"Code.Base", "Base de C\u00F3digo"},
-        {"KeyStore.U.R.L.", "URL de Almac\u00E9n de Claves:"},
-        {"KeyStore.Password.U.R.L.", "URL de Contrase\u00F1a de Almac\u00E9n de Claves:"},
-
-
-        // javax.security.auth.PrivateCredentialPermission
-        {"invalid.null.input.s.", "entradas nulas no v\u00E1lidas"},
-        {"actions.can.only.be.read.", "las acciones s\u00F3lo pueden 'leerse'"},
-        {"permission.name.name.syntax.invalid.",
-                "sintaxis de nombre de permiso [{0}] no v\u00E1lida: "},
-        {"Credential.Class.not.followed.by.a.Principal.Class.and.Name",
-                "La clase de credencial no va seguida de una clase y nombre de principal"},
-        {"Principal.Class.not.followed.by.a.Principal.Name",
-                "La clase de principal no va seguida de un nombre de principal"},
-        {"Principal.Name.must.be.surrounded.by.quotes",
-                "El nombre de principal debe ir entre comillas"},
-        {"Principal.Name.missing.end.quote",
-                "Faltan las comillas finales en el nombre de principal"},
-        {"PrivateCredentialPermission.Principal.Class.can.not.be.a.wildcard.value.if.Principal.Name.is.not.a.wildcard.value",
-                "La clase de principal PrivateCredentialPermission no puede ser un valor comod\u00EDn (*) si el nombre de principal no lo es tambi\u00E9n"},
-        {"CredOwner.Principal.Class.class.Principal.Name.name",
-                "CredOwner:\n\tClase de Principal = {0}\n\tNombre de Principal = {1}"},
-
-        // javax.security.auth.x500
-        {"provided.null.name", "se ha proporcionado un nombre nulo"},
-        {"provided.null.keyword.map", "mapa de palabras clave proporcionado nulo"},
-        {"provided.null.OID.map", "mapa de OID proporcionado nulo"},
-
-        // javax.security.auth.Subject
-        {"invalid.null.AccessControlContext.provided",
-                "se ha proporcionado un AccessControlContext nulo no v\u00E1lido"},
-        {"invalid.null.action.provided", "se ha proporcionado una acci\u00F3n nula no v\u00E1lida"},
-        {"invalid.null.Class.provided", "se ha proporcionado una clase nula no v\u00E1lida"},
-        {"Subject.", "Asunto:\n"},
-        {".Principal.", "\tPrincipal: "},
-        {".Public.Credential.", "\tCredencial P\u00FAblica: "},
-        {".Private.Credentials.inaccessible.",
-                "\tCredenciales Privadas Inaccesibles\n"},
-        {".Private.Credential.", "\tCredencial Privada: "},
-        {".Private.Credential.inaccessible.",
-                "\tCredencial Privada Inaccesible\n"},
-        {"Subject.is.read.only", "El asunto es de s\u00F3lo lectura"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.java.security.Principal.to.a.Subject.s.Principal.Set",
-                "intentando agregar un objeto que no es una instancia de java.security.Principal al juego principal de un asunto"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.class",
-                "intentando agregar un objeto que no es una instancia de {0}"},
-
-        // javax.security.auth.login.AppConfigurationEntry
-        {"LoginModuleControlFlag.", "LoginModuleControlFlag: "},
-
-        // javax.security.auth.login.LoginContext
-        {"Invalid.null.input.name", "Entrada nula no v\u00E1lida: nombre"},
-        {"No.LoginModules.configured.for.name",
-         "No se han configurado LoginModules para {0}"},
-        {"invalid.null.Subject.provided", "se ha proporcionado un asunto nulo no v\u00E1lido"},
-        {"invalid.null.CallbackHandler.provided",
-                "se ha proporcionado CallbackHandler nulo no v\u00E1lido"},
-        {"null.subject.logout.called.before.login",
-                "asunto nulo - se ha llamado al cierre de sesi\u00F3n antes del inicio de sesi\u00F3n"},
-        {"unable.to.instantiate.LoginModule.module.because.it.does.not.provide.a.no.argument.constructor",
-                "no se ha podido instanciar LoginModule, {0}, porque no incluye un constructor sin argumentos"},
-        {"unable.to.instantiate.LoginModule",
-                "no se ha podido instanciar LoginModule"},
-        {"unable.to.instantiate.LoginModule.",
-                "no se ha podido instanciar LoginModule: "},
-        {"unable.to.find.LoginModule.class.",
-                "no se ha encontrado la clase LoginModule: "},
-        {"unable.to.access.LoginModule.",
-                "no se ha podido acceder a LoginModule: "},
-        {"Login.Failure.all.modules.ignored",
-                "Fallo en inicio de sesi\u00F3n: se han ignorado todos los m\u00F3dulos"},
-
-        // sun.security.provider.PolicyFile
-
-        {"java.security.policy.error.parsing.policy.message",
-                "java.security.policy: error de an\u00E1lisis de {0}:\n\t{1}"},
-        {"java.security.policy.error.adding.Permission.perm.message",
-                "java.security.policy: error al agregar un permiso, {0}:\n\t{1}"},
-        {"java.security.policy.error.adding.Entry.message",
-                "java.security.policy: error al agregar una entrada:\n\t{0}"},
-        {"alias.name.not.provided.pe.name.", "no se ha proporcionado el nombre de alias ({0})"},
-        {"unable.to.perform.substitution.on.alias.suffix",
-                "no se puede realizar la sustituci\u00F3n en el alias, {0}"},
-        {"substitution.value.prefix.unsupported",
-                "valor de sustituci\u00F3n, {0}, no soportado"},
-        {"LPARAM", "("},
-        {"RPARAM", ")"},
-        {"type.can.t.be.null","el tipo no puede ser nulo"},
-
-        // sun.security.provider.PolicyParser
-        {"keystorePasswordURL.can.not.be.specified.without.also.specifying.keystore",
-                "keystorePasswordURL no puede especificarse sin especificar tambi\u00E9n el almac\u00E9n de claves"},
-        {"expected.keystore.type", "se esperaba un tipo de almac\u00E9n de claves"},
-        {"expected.keystore.provider", "se esperaba un proveedor de almac\u00E9n de claves"},
-        {"multiple.Codebase.expressions",
-                "expresiones m\u00FAltiples de CodeBase"},
-        {"multiple.SignedBy.expressions","expresiones m\u00FAltiples de SignedBy"},
-        {"SignedBy.has.empty.alias","SignedBy tiene un alias vac\u00EDo"},
-        {"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
-                "no se puede especificar Principal con una clase de comod\u00EDn sin un nombre de comod\u00EDn"},
-        {"expected.codeBase.or.SignedBy.or.Principal",
-                "se esperaba codeBase o SignedBy o Principal"},
-        {"expected.permission.entry", "se esperaba una entrada de permiso"},
-        {"number.", "n\u00FAmero "},
-        {"expected.expect.read.end.of.file.",
-                "se esperaba [{0}], se ha le\u00EDdo [final de archivo]"},
-        {"expected.read.end.of.file.",
-                "se esperaba [;], se ha le\u00EDdo [final de archivo]"},
-        {"line.number.msg", "l\u00EDnea {0}: {1}"},
-        {"line.number.expected.expect.found.actual.",
-                "l\u00EDnea {0}: se esperaba [{1}], se ha encontrado [{2}]"},
-        {"null.principalClass.or.principalName",
-                "principalClass o principalName nulos"},
-
-        // sun.security.pkcs11.SunPKCS11
-        {"PKCS11.Token.providerName.Password.",
-                "Contrase\u00F1a del Token PKCS11 [{0}]: "},
-
-        /* --- DEPRECATED --- */
-        // javax.security.auth.Policy
-        {"unable.to.instantiate.Subject.based.policy",
-                "no se ha podido instanciar una pol\u00EDtica basada en asunto"}
-    };
-
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     *
-     * <p>
-     *
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-}
-
diff --git a/ojluni/src/main/java/sun/security/util/Resources_fr.java b/ojluni/src/main/java/sun/security/util/Resources_fr.java
deleted file mode 100755
index 757321e..0000000
--- a/ojluni/src/main/java/sun/security/util/Resources_fr.java
+++ /dev/null
@@ -1,661 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, 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.
- */
-
-package sun.security.util;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for javax.security.auth and sun.security.
- *
- */
-public class Resources_fr extends java.util.ListResourceBundle {
-
-    private static final Object[][] contents = {
-
-        // shared (from jarsigner)
-        {"SPACE", " "},
-        {"2SPACE", "  "},
-        {"6SPACE", "      "},
-        {"COMMA", ", "},
-        // shared (from keytool)
-        {"NEWLINE", "\n"},
-        {"STAR",
-                "*******************************************"},
-        {"STARNN",
-                "*******************************************\n\n"},
-
-        // keytool: Help part
-        {".OPTION.", " [OPTION]..."},
-        {"Options.", "Options :"},
-        {"Use.keytool.help.for.all.available.commands",
-                 "Utiliser \"keytool -help\" pour toutes les commandes disponibles"},
-        {"Key.and.Certificate.Management.Tool",
-                 "Outil de gestion de certificats et de cl\u00E9s"},
-        {"Commands.", "Commandes :"},
-        {"Use.keytool.command.name.help.for.usage.of.command.name",
-                "Utiliser \"keytool -command_name -help\" pour la syntaxe de command_name"},
-        // keytool: help: commands
-        {"Generates.a.certificate.request",
-                "G\u00E9n\u00E8re une demande de certificat"}, //-certreq
-        {"Changes.an.entry.s.alias",
-                "Modifie l'alias d'une entr\u00E9e"}, //-changealias
-        {"Deletes.an.entry",
-                "Supprime une entr\u00E9e"}, //-delete
-        {"Exports.certificate",
-                "Exporte le certificat"}, //-exportcert
-        {"Generates.a.key.pair",
-                "G\u00E9n\u00E8re une paire de cl\u00E9s"}, //-genkeypair
-        {"Generates.a.secret.key",
-                "G\u00E9n\u00E8re une cl\u00E9 secr\u00E8te"}, //-genseckey
-        {"Generates.certificate.from.a.certificate.request",
-                "G\u00E9n\u00E8re le certificat \u00E0 partir d'une demande de certificat"}, //-gencert
-        {"Generates.CRL", "G\u00E9n\u00E8re la liste des certificats r\u00E9voqu\u00E9s (CRL)"}, //-gencrl
-        {"Imports.entries.from.a.JDK.1.1.x.style.identity.database",
-                "Importe les entr\u00E9es \u00E0 partir d'une base de donn\u00E9es d'identit\u00E9s de type JDK 1.1.x"}, //-identitydb
-        {"Imports.a.certificate.or.a.certificate.chain",
-                "Importe un certificat ou une cha\u00EEne de certificat"}, //-importcert
-        {"Imports.one.or.all.entries.from.another.keystore",
-                "Importe une entr\u00E9e ou la totalit\u00E9 des entr\u00E9es depuis un autre fichier de cl\u00E9s"}, //-importkeystore
-        {"Clones.a.key.entry",
-                "Clone une entr\u00E9e de cl\u00E9"}, //-keyclone
-        {"Changes.the.key.password.of.an.entry",
-                "Modifie le mot de passe de cl\u00E9 d'une entr\u00E9e"}, //-keypasswd
-        {"Lists.entries.in.a.keystore",
-                "R\u00E9pertorie les entr\u00E9es d'un fichier de cl\u00E9s"}, //-list
-        {"Prints.the.content.of.a.certificate",
-                "Imprime le contenu d'un certificat"}, //-printcert
-        {"Prints.the.content.of.a.certificate.request",
-                "Imprime le contenu d'une demande de certificat"}, //-printcertreq
-        {"Prints.the.content.of.a.CRL.file",
-                "Imprime le contenu d'un fichier de liste des certificats r\u00E9voqu\u00E9s (CRL)"}, //-printcrl
-        {"Generates.a.self.signed.certificate",
-                "G\u00E9n\u00E8re un certificat auto-sign\u00E9"}, //-selfcert
-        {"Changes.the.store.password.of.a.keystore",
-                "Modifie le mot de passe de banque d'un fichier de cl\u00E9s"}, //-storepasswd
-        // keytool: help: options
-        {"alias.name.of.the.entry.to.process",
-                "nom d'alias de l'entr\u00E9e \u00E0 traiter"}, //-alias
-        {"destination.alias",
-                "alias de destination"}, //-destalias
-        {"destination.key.password",
-                "mot de passe de la cl\u00E9 de destination"}, //-destkeypass
-        {"destination.keystore.name",
-                "nom du fichier de cl\u00E9s de destination"}, //-destkeystore
-        {"destination.keystore.password.protected",
-                "mot de passe du fichier de cl\u00E9s de destination prot\u00E9g\u00E9"}, //-destprotected
-        {"destination.keystore.provider.name",
-                "nom du fournisseur du fichier de cl\u00E9s de destination"}, //-destprovidername
-        {"destination.keystore.password",
-                "mot de passe du fichier de cl\u00E9s de destination"}, //-deststorepass
-        {"destination.keystore.type",
-                "type du fichier de cl\u00E9s de destination"}, //-deststoretype
-        {"distinguished.name",
-                "nom distinctif"}, //-dname
-        {"X.509.extension",
-                "extension X.509"}, //-ext
-        {"output.file.name",
-                "nom du fichier de sortie"}, //-file and -outfile
-        {"input.file.name",
-                "nom du fichier d'entr\u00E9e"}, //-file and -infile
-        {"key.algorithm.name",
-                "nom de l'algorithme de cl\u00E9"}, //-keyalg
-        {"key.password",
-                "mot de passe de la cl\u00E9"}, //-keypass
-        {"key.bit.size",
-                "taille en bits de la cl\u00E9"}, //-keysize
-        {"keystore.name",
-                "nom du fichier de cl\u00E9s"}, //-keystore
-        {"new.password",
-                "nouveau mot de passe"}, //-new
-        {"do.not.prompt",
-                "ne pas inviter"}, //-noprompt
-        {"password.through.protected.mechanism",
-                "mot de passe via m\u00E9canisme prot\u00E9g\u00E9"}, //-protected
-        {"provider.argument",
-                "argument du fournisseur"}, //-providerarg
-        {"provider.class.name",
-                "nom de la classe de fournisseur"}, //-providerclass
-        {"provider.name",
-                "nom du fournisseur"}, //-providername
-        {"provider.classpath",
-                "variable d'environnement CLASSPATH du fournisseur"}, //-providerpath
-        {"output.in.RFC.style",
-                "sortie au style RFC"}, //-rfc
-        {"signature.algorithm.name",
-                "nom de l'algorithme de signature"}, //-sigalg
-        {"source.alias",
-                "alias source"}, //-srcalias
-        {"source.key.password",
-                "mot de passe de la cl\u00E9 source"}, //-srckeypass
-        {"source.keystore.name",
-                "nom du fichier de cl\u00E9s source"}, //-srckeystore
-        {"source.keystore.password.protected",
-                "mot de passe du fichier de cl\u00E9s source prot\u00E9g\u00E9"}, //-srcprotected
-        {"source.keystore.provider.name",
-                "nom du fournisseur du fichier de cl\u00E9s source"}, //-srcprovidername
-        {"source.keystore.password",
-                "mot de passe du fichier de cl\u00E9s source"}, //-srcstorepass
-        {"source.keystore.type",
-                "type du fichier de cl\u00E9s source"}, //-srcstoretype
-        {"SSL.server.host.and.port",
-                "Port et h\u00F4te du serveur SSL"}, //-sslserver
-        {"signed.jar.file",
-                "fichier JAR sign\u00E9"}, //=jarfile
-        {"certificate.validity.start.date.time",
-                "date/heure de d\u00E9but de validit\u00E9 du certificat"}, //-startdate
-        {"keystore.password",
-                "mot de passe du fichier de cl\u00E9s"}, //-storepass
-        {"keystore.type",
-                "type du fichier de cl\u00E9s"}, //-storetype
-        {"trust.certificates.from.cacerts",
-                "certificats s\u00E9curis\u00E9s issus de certificats CA"}, //-trustcacerts
-        {"verbose.output",
-                "sortie en mode verbose"}, //-v
-        {"validity.number.of.days",
-                "nombre de jours de validit\u00E9"}, //-validity
-        {"Serial.ID.of.cert.to.revoke",
-                 "ID de s\u00E9rie du certificat \u00E0 r\u00E9voquer"}, //-id
-        // keytool: Running part
-        {"keytool.error.", "erreur keytool : "},
-        {"Illegal.option.", "Option non admise :  "},
-        {"Illegal.value.", "Valeur non admise : "},
-        {"Unknown.password.type.", "Type de mot de passe inconnu : "},
-        {"Cannot.find.environment.variable.",
-                "Variable d'environnement introuvable : "},
-        {"Cannot.find.file.", "Fichier introuvable : "},
-        {"Command.option.flag.needs.an.argument.", "L''option de commande {0} requiert un argument."},
-        {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.",
-                "Avertissement\u00A0: les mots de passe de cl\u00E9 et de banque distincts ne sont pas pris en charge pour les fichiers de cl\u00E9s d''acc\u00E8s PKCS12. La valeur {0} sp\u00E9cifi\u00E9e par l''utilisateur est ignor\u00E9e."},
-        {".keystore.must.be.NONE.if.storetype.is.{0}",
-                "-keystore doit \u00EAtre d\u00E9fini sur NONE si -storetype est {0}"},
-        {"Too.many.retries.program.terminated",
-                 "Trop de tentatives, fin du programme"},
-        {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}",
-                "Les commandes -storepasswd et -keypasswd ne sont pas prises en charge si -storetype est d\u00E9fini sur {0}"},
-        {".keypasswd.commands.not.supported.if.storetype.is.PKCS12",
-                "Les commandes -keypasswd ne sont pas prises en charge si -storetype est d\u00E9fini sur PKCS12"},
-        {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}",
-                "Les commandes -keypass et -new ne peuvent pas \u00EAtre sp\u00E9cifi\u00E9es si -storetype est d\u00E9fini sur {0}"},
-        {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified",
-                "si -protected est sp\u00E9cifi\u00E9, -storepass, -keypass et -new ne doivent pas \u00EAtre indiqu\u00E9s"},
-        {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "Si -srcprotected est indiqu\u00E9, les commandes -srcstorepass et -srckeypass ne doivent pas \u00EAtre sp\u00E9cifi\u00E9es"},
-        {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified",
-                "Si le fichier de cl\u00E9s n'est pas prot\u00E9g\u00E9 par un mot de passe, les commandes -storepass, -keypass et -new ne doivent pas \u00EAtre sp\u00E9cifi\u00E9es"},
-        {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "Si le fichier de cl\u00E9s source n'est pas prot\u00E9g\u00E9 par un mot de passe, les commandes -srcstorepass et -srckeypass ne doivent pas \u00EAtre sp\u00E9cifi\u00E9es"},
-        {"Illegal.startdate.value", "Valeur de date de d\u00E9but non admise"},
-        {"Validity.must.be.greater.than.zero",
-                "La validit\u00E9 doit \u00EAtre sup\u00E9rieure \u00E0 z\u00E9ro"},
-        {"provName.not.a.provider", "{0} n''est pas un fournisseur"},
-        {"Usage.error.no.command.provided", "Erreur de syntaxe\u00A0: aucune commande fournie"},
-        {"Source.keystore.file.exists.but.is.empty.", "Le fichier de cl\u00E9s source existe mais il est vide : "},
-        {"Please.specify.srckeystore", "Indiquez -srckeystore"},
-        {"Must.not.specify.both.v.and.rfc.with.list.command",
-                "-v et -rfc ne doivent pas \u00EAtre sp\u00E9cifi\u00E9s avec la commande 'list'"},
-        {"Key.password.must.be.at.least.6.characters",
-                "Un mot de passe de cl\u00E9 doit comporter au moins 6 caract\u00E8res"},
-        {"New.password.must.be.at.least.6.characters",
-                "Le nouveau mot de passe doit comporter au moins 6 caract\u00E8res"},
-        {"Keystore.file.exists.but.is.empty.",
-                "Fichier de cl\u00E9s existant mais vide : "},
-        {"Keystore.file.does.not.exist.",
-                "Le fichier de cl\u00E9s n'existe pas : "},
-        {"Must.specify.destination.alias", "L'alias de destination doit \u00EAtre sp\u00E9cifi\u00E9"},
-        {"Must.specify.alias", "L'alias doit \u00EAtre sp\u00E9cifi\u00E9"},
-        {"Keystore.password.must.be.at.least.6.characters",
-                "Un mot de passe de fichier de cl\u00E9s doit comporter au moins 6 caract\u00E8res"},
-        {"Enter.keystore.password.", "Entrez le mot de passe du fichier de cl\u00E9s :  "},
-        {"Enter.source.keystore.password.", "Entrez le mot de passe du fichier de cl\u00E9s source\u00A0:  "},
-        {"Enter.destination.keystore.password.", "Entrez le mot de passe du fichier de cl\u00E9s de destination\u00A0:  "},
-        {"Keystore.password.is.too.short.must.be.at.least.6.characters",
-         "Le mot de passe du fichier de cl\u00E9s est trop court : il doit comporter au moins 6 caract\u00E8res"},
-        {"Unknown.Entry.Type", "Type d'entr\u00E9e inconnu"},
-        {"Too.many.failures.Alias.not.changed", "Trop d'erreurs. Alias non modifi\u00E9"},
-        {"Entry.for.alias.alias.successfully.imported.",
-                 "L''entr\u00E9e de l''alias {0} a \u00E9t\u00E9 import\u00E9e."},
-        {"Entry.for.alias.alias.not.imported.", "L''entr\u00E9e de l''alias {0} n''a pas \u00E9t\u00E9 import\u00E9e."},
-        {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.",
-                 "Probl\u00E8me lors de l''import de l''entr\u00E9e de l''alias {0}\u00A0: {1}.\nL''entr\u00E9e de l''alias {0} n''a pas \u00E9t\u00E9 import\u00E9e."},
-        {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled",
-                 "Commande d''import ex\u00E9cut\u00E9e\u00A0: {0} entr\u00E9es import\u00E9es, \u00E9chec ou annulation de {1} entr\u00E9es"},
-        {"Warning.Overwriting.existing.alias.alias.in.destination.keystore",
-                 "Avertissement\u00A0: l''alias {0} existant sera remplac\u00E9 dans le fichier de cl\u00E9s d''acc\u00E8s de destination"},
-        {"Existing.entry.alias.alias.exists.overwrite.no.",
-                 "L''alias d''entr\u00E9e {0} existe d\u00E9j\u00E0. Voulez-vous le remplacer ? [non]\u00A0:  "},
-        {"Too.many.failures.try.later", "Trop d'erreurs. R\u00E9essayez plus tard"},
-        {"Certification.request.stored.in.file.filename.",
-                "Demande de certification stock\u00E9e dans le fichier <{0}>"},
-        {"Submit.this.to.your.CA", "Soumettre \u00E0 votre CA"},
-        {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
-            "si l'alias n'est pas sp\u00E9cifi\u00E9, destalias, srckeypass et destkeypass ne doivent pas \u00EAtre sp\u00E9cifi\u00E9s"},
-        {"Certificate.stored.in.file.filename.",
-                "Certificat stock\u00E9 dans le fichier <{0}>"},
-        {"Certificate.reply.was.installed.in.keystore",
-                "R\u00E9ponse de certificat install\u00E9e dans le fichier de cl\u00E9s"},
-        {"Certificate.reply.was.not.installed.in.keystore",
-                "R\u00E9ponse de certificat non install\u00E9e dans le fichier de cl\u00E9s"},
-        {"Certificate.was.added.to.keystore",
-                "Certificat ajout\u00E9 au fichier de cl\u00E9s"},
-        {"Certificate.was.not.added.to.keystore",
-                "Certificat non ajout\u00E9 au fichier de cl\u00E9s"},
-        {".Storing.ksfname.", "[Stockage de {0}]"},
-        {"alias.has.no.public.key.certificate.",
-                "{0} ne poss\u00E8de pas de cl\u00E9 publique (certificat)"},
-        {"Cannot.derive.signature.algorithm",
-                "Impossible de d\u00E9duire l'algorithme de signature"},
-        {"Alias.alias.does.not.exist",
-                "L''alias <{0}> n''existe pas"},
-        {"Alias.alias.has.no.certificate",
-                "L''alias <{0}> ne poss\u00E8de pas de certificat"},
-        {"Key.pair.not.generated.alias.alias.already.exists",
-                "Paire de cl\u00E9s non g\u00E9n\u00E9r\u00E9e, l''alias <{0}> existe d\u00E9j\u00E0"},
-        {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for",
-                "G\u00E9n\u00E9ration d''une paire de cl\u00E9s {1} de {0} bits et d''un certificat auto-sign\u00E9 ({2}) d''une validit\u00E9 de {3} jours\n\tpour : {4}"},
-        {"Enter.key.password.for.alias.", "Entrez le mot de passe de la cl\u00E9 pour <{0}>"},
-        {".RETURN.if.same.as.keystore.password.",
-                "\t(appuyez sur Entr\u00E9e s'il s'agit du mot de passe du fichier de cl\u00E9s) :  "},
-        {"Key.password.is.too.short.must.be.at.least.6.characters",
-                "Le mot de passe de la cl\u00E9 est trop court : il doit comporter au moins 6 caract\u00E8res"},
-        {"Too.many.failures.key.not.added.to.keystore",
-                "Trop d'erreurs. Cl\u00E9 non ajout\u00E9e au fichier de cl\u00E9s"},
-        {"Destination.alias.dest.already.exists",
-                "L''alias de la destination <{0}> existe d\u00E9j\u00E0"},
-        {"Password.is.too.short.must.be.at.least.6.characters",
-                "Le mot de passe est trop court : il doit comporter au moins 6 caract\u00E8res"},
-        {"Too.many.failures.Key.entry.not.cloned",
-                "Trop d'erreurs. Entr\u00E9e de cl\u00E9 non clon\u00E9e"},
-        {"key.password.for.alias.", "mot de passe de cl\u00E9 pour <{0}>"},
-        {"Keystore.entry.for.id.getName.already.exists",
-                "L''entr\u00E9e de fichier de cl\u00E9s d''acc\u00E8s pour <{0}> existe d\u00E9j\u00E0"},
-        {"Creating.keystore.entry.for.id.getName.",
-                "Cr\u00E9ation d''une entr\u00E9e de fichier de cl\u00E9s d''acc\u00E8s pour <{0}>..."},
-        {"No.entries.from.identity.database.added",
-                "Aucune entr\u00E9e ajout\u00E9e \u00E0 partir de la base de donn\u00E9es d'identit\u00E9s"},
-        {"Alias.name.alias", "Nom d''alias : {0}"},
-        {"Creation.date.keyStore.getCreationDate.alias.",
-                "Date de cr\u00E9ation : {0,date}"},
-        {"alias.keyStore.getCreationDate.alias.",
-                "{0}, {1,date}, "},
-        {"alias.", "{0}, "},
-        {"Entry.type.type.", "Type d''entr\u00E9e\u00A0: {0}"},
-        {"Certificate.chain.length.", "Longueur de cha\u00EEne du certificat : "},
-        {"Certificate.i.1.", "Certificat[{0,number,integer}]:"},
-        {"Certificate.fingerprint.SHA1.", "Empreinte du certificat (SHA1) : "},
-        {"Keystore.type.", "Type de fichier de cl\u00E9s : "},
-        {"Keystore.provider.", "Fournisseur de fichier de cl\u00E9s : "},
-        {"Your.keystore.contains.keyStore.size.entry",
-                "Votre fichier de cl\u00E9s d''acc\u00E8s contient {0,number,integer} entr\u00E9e"},
-        {"Your.keystore.contains.keyStore.size.entries",
-                "Votre fichier de cl\u00E9s d''acc\u00E8s contient {0,number,integer} entr\u00E9es"},
-        {"Failed.to.parse.input", "L'analyse de l'entr\u00E9e a \u00E9chou\u00E9"},
-        {"Empty.input", "Entr\u00E9e vide"},
-        {"Not.X.509.certificate", "Pas un certificat X.509"},
-        {"alias.has.no.public.key", "{0} ne poss\u00E8de pas de cl\u00E9 publique"},
-        {"alias.has.no.X.509.certificate", "{0} ne poss\u00E8de pas de certificat X.509"},
-        {"New.certificate.self.signed.", "Nouveau certificat (auto-sign\u00E9) :"},
-        {"Reply.has.no.certificates", "La r\u00E9ponse n'a pas de certificat"},
-        {"Certificate.not.imported.alias.alias.already.exists",
-                "Certificat non import\u00E9, l''alias <{0}> existe d\u00E9j\u00E0"},
-        {"Input.not.an.X.509.certificate", "L'entr\u00E9e n'est pas un certificat X.509"},
-        {"Certificate.already.exists.in.keystore.under.alias.trustalias.",
-                "Le certificat existe d\u00E9j\u00E0 dans le fichier de cl\u00E9s d''acc\u00E8s sous l''alias <{0}>"},
-        {"Do.you.still.want.to.add.it.no.",
-                "Voulez-vous toujours l'ajouter ? [non] :  "},
-        {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.",
-                "Le certificat existe d\u00E9j\u00E0 dans le fichier de cl\u00E9s d''acc\u00E8s CA syst\u00E8me sous l''alias <{0}>"},
-        {"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
-                "Voulez-vous toujours l'ajouter \u00E0 votre fichier de cl\u00E9s ? [non] :  "},
-        {"Trust.this.certificate.no.", "Faire confiance \u00E0 ce certificat ? [non] :  "},
-        {"YES", "OUI"},
-        {"New.prompt.", "Nouveau {0} : "},
-        {"Passwords.must.differ", "Les mots de passe doivent diff\u00E9rer"},
-        {"Re.enter.new.prompt.", "Indiquez encore le nouveau {0} : "},
-        {"Re.enter.new.password.", "Ressaisissez le nouveau mot de passe : "},
-        {"They.don.t.match.Try.again", "Ils sont diff\u00E9rents. R\u00E9essayez."},
-        {"Enter.prompt.alias.name.", "Indiquez le nom d''alias {0} :  "},
-        {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.",
-                 "Saisissez le nom du nouvel alias\t(ou appuyez sur Entr\u00E9e pour annuler l'import de cette entr\u00E9e)\u00A0:  "},
-        {"Enter.alias.name.", "Indiquez le nom d'alias :  "},
-        {".RETURN.if.same.as.for.otherAlias.",
-                "\t(appuyez sur Entr\u00E9e si le r\u00E9sultat est identique \u00E0 <{0}>)"},
-        {".PATTERN.printX509Cert",
-                "Propri\u00E9taire : {0}\nEmetteur : {1}\nNum\u00E9ro de s\u00E9rie : {2}\nValide du : {3} au : {4}\nEmpreintes du certificat :\n\t MD5:  {5}\n\t SHA1 : {6}\n\t SHA256 : {7}\n\t Nom de l''algorithme de signature : {8}\n\t Version : {9}"},
-        {"What.is.your.first.and.last.name.",
-                "Quels sont vos nom et pr\u00E9nom ?"},
-        {"What.is.the.name.of.your.organizational.unit.",
-                "Quel est le nom de votre unit\u00E9 organisationnelle ?"},
-        {"What.is.the.name.of.your.organization.",
-                "Quel est le nom de votre entreprise ?"},
-        {"What.is.the.name.of.your.City.or.Locality.",
-                "Quel est le nom de votre ville de r\u00E9sidence ?"},
-        {"What.is.the.name.of.your.State.or.Province.",
-                "Quel est le nom de votre \u00E9tat ou province ?"},
-        {"What.is.the.two.letter.country.code.for.this.unit.",
-                "Quel est le code pays \u00E0 deux lettres pour cette unit\u00E9 ?"},
-        {"Is.name.correct.", "Est-ce {0} ?"},
-        {"no", "non"},
-        {"yes", "oui"},
-        {"y", "o"},
-        {".defaultValue.", "  [{0}]:  "},
-        {"Alias.alias.has.no.key",
-                "L''alias <{0}> n''est associ\u00E9 \u00E0 aucune cl\u00E9"},
-        {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key",
-                 "L''entr\u00E9e \u00E0 laquelle l''alias <{0}> fait r\u00E9f\u00E9rence n''est pas une entr\u00E9e de type cl\u00E9 priv\u00E9e. La commande -keyclone prend uniquement en charge le clonage des cl\u00E9s priv\u00E9es"},
-
-        {".WARNING.WARNING.WARNING.",
-            "*****************  WARNING WARNING WARNING  *****************"},
-        {"Signer.d.", "Signataire n\u00B0%d :"},
-        {"Timestamp.", "Horodatage :"},
-        {"Signature.", "Signature :"},
-        {"CRLs.", "Listes des certificats r\u00E9voqu\u00E9s (CRL) :"},
-        {"Certificate.owner.", "Propri\u00E9taire du certificat : "},
-        {"Not.a.signed.jar.file", "Fichier JAR non sign\u00E9"},
-        {"No.certificate.from.the.SSL.server",
-                "Aucun certificat du serveur SSL"},
-
-        {".The.integrity.of.the.information.stored.in.your.keystore.",
-            "* L'int\u00E9grit\u00E9 des informations stock\u00E9es dans votre fichier de cl\u00E9s  *\n* n'a PAS \u00E9t\u00E9 v\u00E9rifi\u00E9e. Pour cela, *\n* vous devez fournir le mot de passe de votre fichier de cl\u00E9s.                  *"},
-        {".The.integrity.of.the.information.stored.in.the.srckeystore.",
-            "* L'int\u00E9grit\u00E9 des informations stock\u00E9es dans le fichier de cl\u00E9s source  *\n* n'a PAS \u00E9t\u00E9 v\u00E9rifi\u00E9e. Pour cela, *\n* vous devez fournir le mot de passe de votre fichier de cl\u00E9s source.                  *"},
-
-        {"Certificate.reply.does.not.contain.public.key.for.alias.",
-                "La r\u00E9ponse au certificat ne contient pas de cl\u00E9 publique pour <{0}>"},
-        {"Incomplete.certificate.chain.in.reply",
-                "Cha\u00EEne de certificat incompl\u00E8te dans la r\u00E9ponse"},
-        {"Certificate.chain.in.reply.does.not.verify.",
-                "La cha\u00EEne de certificat de la r\u00E9ponse ne concorde pas : "},
-        {"Top.level.certificate.in.reply.",
-                "Certificat de niveau sup\u00E9rieur dans la r\u00E9ponse :\n"},
-        {".is.not.trusted.", "... non s\u00E9curis\u00E9. "},
-        {"Install.reply.anyway.no.", "Installer la r\u00E9ponse quand m\u00EAme ? [non] :  "},
-        {"NO", "NON"},
-        {"Public.keys.in.reply.and.keystore.don.t.match",
-                "Les cl\u00E9s publiques de la r\u00E9ponse et du fichier de cl\u00E9s ne concordent pas"},
-        {"Certificate.reply.and.certificate.in.keystore.are.identical",
-                "La r\u00E9ponse au certificat et le certificat du fichier de cl\u00E9s sont identiques"},
-        {"Failed.to.establish.chain.from.reply",
-                "Impossible de cr\u00E9er une cha\u00EEne \u00E0 partir de la r\u00E9ponse"},
-        {"n", "n"},
-        {"Wrong.answer.try.again", "R\u00E9ponse incorrecte, recommencez"},
-        {"Secret.key.not.generated.alias.alias.already.exists",
-                "Cl\u00E9 secr\u00E8te non g\u00E9n\u00E9r\u00E9e, l''alias <{0}> existe d\u00E9j\u00E0"},
-        {"Please.provide.keysize.for.secret.key.generation",
-                "Indiquez -keysize pour la g\u00E9n\u00E9ration de la cl\u00E9 secr\u00E8te"},
-
-        {"Extensions.", "Extensions\u00A0: "},
-        {".Empty.value.", "(Valeur vide)"},
-        {"Extension.Request.", "Demande d'extension :"},
-        {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.",
-                "Demande de certificat PKCS #10 (version 1.0)\nSujet : %s\nCl\u00E9 publique : format %s pour la cl\u00E9 %s\n"},
-        {"Unknown.keyUsage.type.", "Type keyUsage inconnu : "},
-        {"Unknown.extendedkeyUsage.type.", "Type extendedkeyUsage inconnu : "},
-        {"Unknown.AccessDescription.type.", "Type AccessDescription inconnu : "},
-        {"Unrecognized.GeneralName.type.", "Type GeneralName non reconnu : "},
-        {"This.extension.cannot.be.marked.as.critical.",
-                 "Cette extension ne peut pas \u00EAtre marqu\u00E9e comme critique. "},
-        {"Odd.number.of.hex.digits.found.", "Nombre impair de chiffres hexad\u00E9cimaux trouv\u00E9 : "},
-        {"Unknown.extension.type.", "Type d'extension inconnu : "},
-        {"command.{0}.is.ambiguous.", "commande {0} ambigu\u00EB :"},
-
-        // policytool
-        {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.",
-                "Avertissement\u00A0: il n''existe pas de cl\u00E9 publique pour l''alias {0}. V\u00E9rifiez que le fichier de cl\u00E9s d''acc\u00E8s est correctement configur\u00E9."},
-        {"Warning.Class.not.found.class", "Avertissement : classe introuvable - {0}"},
-        {"Warning.Invalid.argument.s.for.constructor.arg",
-                "Avertissement\u00A0: arguments non valides pour le constructeur\u00A0- {0}"},
-        {"Illegal.Principal.Type.type", "Type de principal non admis : {0}"},
-        {"Illegal.option.option", "Option non admise : {0}"},
-        {"Usage.policytool.options.", "Syntaxe : policytool [options]"},
-        {".file.file.policy.file.location",
-                "  [-file <file>]    emplacement du fichier de r\u00E8gles"},
-        {"New", "Nouveau"},
-        {"Open", "Ouvrir"},
-        {"Save", "Enregistrer"},
-        {"Save.As", "Enregistrer sous"},
-        {"View.Warning.Log", "Afficher le journal des avertissements"},
-        {"Exit", "Quitter"},
-        {"Add.Policy.Entry", "Ajouter une r\u00E8gle"},
-        {"Edit.Policy.Entry", "Modifier une r\u00E8gle"},
-        {"Remove.Policy.Entry", "Enlever une r\u00E8gle"},
-        {"Edit", "Modifier"},
-        {"Retain", "Conserver"},
-
-        {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes",
-            "Avertissement : il se peut que le nom de fichier contienne des barres obliques inverses avec caract\u00E8re d'\u00E9chappement. Il n'est pas n\u00E9cessaire d'ajouter un caract\u00E8re d'\u00E9chappement aux barres obliques inverses. L'outil proc\u00E8de \u00E0 l'\u00E9chappement si n\u00E9cessaire lorsqu'il \u00E9crit le contenu des r\u00E8gles dans la zone de stockage persistant).\n\nCliquez sur Conserver pour garder le nom saisi ou sur Modifier pour le remplacer."},
-
-        {"Add.Public.Key.Alias", "Ajouter un alias de cl\u00E9 publique"},
-        {"Remove.Public.Key.Alias", "Enlever un alias de cl\u00E9 publique"},
-        {"File", "Fichier"},
-        {"KeyStore", "Fichier de cl\u00E9s"},
-        {"Policy.File.", "Fichier de r\u00E8gles :"},
-        {"Could.not.open.policy.file.policyFile.e.toString.",
-                "Impossible d''ouvrir le fichier de r\u00E8gles\u00A0: {0}: {1}"},
-        {"Policy.Tool", "Policy Tool"},
-        {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.",
-                "Des erreurs se sont produites \u00E0 l'ouverture de la configuration de r\u00E8gles. Pour plus d'informations, consultez le journal des avertissements."},
-        {"Error", "Erreur"},
-        {"OK", "OK"},
-        {"Status", "Statut"},
-        {"Warning", "Avertissement"},
-        {"Permission.",
-                "Droit :                                                       "},
-        {"Principal.Type.", "Type de principal :"},
-        {"Principal.Name.", "Nom de principal :"},
-        {"Target.Name.",
-                "Nom de cible :                                                    "},
-        {"Actions.",
-                "Actions :                                                             "},
-        {"OK.to.overwrite.existing.file.filename.",
-                "Remplacer le fichier existant {0} ?"},
-        {"Cancel", "Annuler"},
-        {"CodeBase.", "Base de code :"},
-        {"SignedBy.", "Sign\u00E9 par :"},
-        {"Add.Principal", "Ajouter un principal"},
-        {"Edit.Principal", "Modifier un principal"},
-        {"Remove.Principal", "Enlever un principal"},
-        {"Principals.", "Principaux :"},
-        {".Add.Permission", "  Ajouter un droit"},
-        {".Edit.Permission", "  Modifier un droit"},
-        {"Remove.Permission", "Enlever un droit"},
-        {"Done", "Termin\u00E9"},
-        {"KeyStore.URL.", "URL du fichier de cl\u00E9s :"},
-        {"KeyStore.Type.", "Type du fichier de cl\u00E9s :"},
-        {"KeyStore.Provider.", "Fournisseur du fichier de cl\u00E9s :"},
-        {"KeyStore.Password.URL.", "URL du mot de passe du fichier de cl\u00E9s :"},
-        {"Principals", "Principaux"},
-        {".Edit.Principal.", "  Modifier un principal :"},
-        {".Add.New.Principal.", "  Ajouter un principal :"},
-        {"Permissions", "Droits"},
-        {".Edit.Permission.", "  Modifier un droit :"},
-        {".Add.New.Permission.", "  Ajouter un droit :"},
-        {"Signed.By.", "Sign\u00E9 par :"},
-        {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name",
-            "Impossible de sp\u00E9cifier un principal avec une classe g\u00E9n\u00E9rique sans nom g\u00E9n\u00E9rique"},
-        {"Cannot.Specify.Principal.without.a.Name",
-            "Impossible de sp\u00E9cifier un principal sans nom"},
-        {"Permission.and.Target.Name.must.have.a.value",
-                "Le droit et le nom de cible doivent avoir une valeur"},
-        {"Remove.this.Policy.Entry.", "Enlever cette r\u00E8gle ?"},
-        {"Overwrite.File", "Remplacer le fichier"},
-        {"Policy.successfully.written.to.filename",
-                "R\u00E8gle \u00E9crite dans {0}"},
-        {"null.filename", "nom de fichier NULL"},
-        {"Save.changes.", "Enregistrer les modifications ?"},
-        {"Yes", "Oui"},
-        {"No", "Non"},
-        {"Policy.Entry", "R\u00E8gle"},
-        {"Save.Changes", "Enregistrer les modifications"},
-        {"No.Policy.Entry.selected", "Aucune r\u00E8gle s\u00E9lectionn\u00E9e"},
-        {"Unable.to.open.KeyStore.ex.toString.",
-                "Impossible d''ouvrir le fichier de cl\u00E9s d''acc\u00E8s : {0}"},
-        {"No.principal.selected", "Aucun principal s\u00E9lectionn\u00E9"},
-        {"No.permission.selected", "Aucun droit s\u00E9lectionn\u00E9"},
-        {"name", "nom"},
-        {"configuration.type", "type de configuration"},
-        {"environment.variable.name", "Nom de variable d'environnement"},
-        {"library.name", "nom de biblioth\u00E8que"},
-        {"package.name", "nom de package"},
-        {"policy.type", "type de r\u00E8gle"},
-        {"property.name", "nom de propri\u00E9t\u00E9"},
-        {"Principal.List", "Liste de principaux"},
-        {"Permission.List", "Liste de droits"},
-        {"Code.Base", "Base de code"},
-        {"KeyStore.U.R.L.", "URL du fichier de cl\u00E9s :"},
-        {"KeyStore.Password.U.R.L.", "URL du mot de passe du fichier de cl\u00E9s :"},
-
-
-        // javax.security.auth.PrivateCredentialPermission
-        {"invalid.null.input.s.", "entr\u00E9es NULL non valides"},
-        {"actions.can.only.be.read.", "les actions sont accessibles en lecture uniquement"},
-        {"permission.name.name.syntax.invalid.",
-                "syntaxe de nom de droit [{0}] non valide : "},
-        {"Credential.Class.not.followed.by.a.Principal.Class.and.Name",
-                "Classe Credential non suivie d'une classe et d'un nom de principal"},
-        {"Principal.Class.not.followed.by.a.Principal.Name",
-                "Classe de principal non suivie d'un nom de principal"},
-        {"Principal.Name.must.be.surrounded.by.quotes",
-                "Le nom de principal doit \u00EAtre indiqu\u00E9 entre guillemets"},
-        {"Principal.Name.missing.end.quote",
-                "Guillemet fermant manquant pour le nom de principal"},
-        {"PrivateCredentialPermission.Principal.Class.can.not.be.a.wildcard.value.if.Principal.Name.is.not.a.wildcard.value",
-                "La classe de principal PrivateCredentialPermission ne peut pas \u00EAtre une valeur g\u00E9n\u00E9rique (*) si le nom de principal n'est pas une valeur g\u00E9n\u00E9rique (*)"},
-        {"CredOwner.Principal.Class.class.Principal.Name.name",
-                "CredOwner :\n\tClasse de principal = {0}\n\tNom de principal = {1}"},
-
-        // javax.security.auth.x500
-        {"provided.null.name", "nom NULL fourni"},
-        {"provided.null.keyword.map", "mappage de mots-cl\u00E9s NULL fourni"},
-        {"provided.null.OID.map", "mappage OID NULL fourni"},
-
-        // javax.security.auth.Subject
-        {"invalid.null.AccessControlContext.provided",
-                "AccessControlContext NULL fourni non valide"},
-        {"invalid.null.action.provided", "action NULL fournie non valide"},
-        {"invalid.null.Class.provided", "classe NULL fournie non valide"},
-        {"Subject.", "Objet :\n"},
-        {".Principal.", "\tPrincipal : "},
-        {".Public.Credential.", "\tInformations d'identification et de connexion publiques : "},
-        {".Private.Credentials.inaccessible.",
-                "\tInformations d'identification et de connexion priv\u00E9es inaccessibles\n"},
-        {".Private.Credential.", "\tInformations d'identification et de connexion priv\u00E9es : "},
-        {".Private.Credential.inaccessible.",
-                "\tInformations d'identification et de connexion priv\u00E9es inaccessibles\n"},
-        {"Subject.is.read.only", "Sujet en lecture seule"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.java.security.Principal.to.a.Subject.s.Principal.Set",
-                "tentative d'ajout d'un objet qui n'est pas une instance de java.security.Principal dans un ensemble de principaux du sujet"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.class",
-                "tentative d''ajout d''un objet qui n''est pas une instance de {0}"},
-
-        // javax.security.auth.login.AppConfigurationEntry
-        {"LoginModuleControlFlag.", "LoginModuleControlFlag : "},
-
-        // javax.security.auth.login.LoginContext
-        {"Invalid.null.input.name", "Entr\u00E9e NULL non valide : nom"},
-        {"No.LoginModules.configured.for.name",
-         "Aucun LoginModule configur\u00E9 pour {0}"},
-        {"invalid.null.Subject.provided", "sujet NULL fourni non valide"},
-        {"invalid.null.CallbackHandler.provided",
-                "CallbackHandler NULL fourni non valide"},
-        {"null.subject.logout.called.before.login",
-                "sujet NULL - Tentative de d\u00E9connexion avant la connexion"},
-        {"unable.to.instantiate.LoginModule.module.because.it.does.not.provide.a.no.argument.constructor",
-                "impossible d''instancier LoginModule {0} car il ne fournit pas de constructeur sans argument"},
-        {"unable.to.instantiate.LoginModule",
-                "impossible d'instancier LoginModule"},
-        {"unable.to.instantiate.LoginModule.",
-                "impossible d'instancier LoginModule\u00A0: "},
-        {"unable.to.find.LoginModule.class.",
-                "classe LoginModule introuvable : "},
-        {"unable.to.access.LoginModule.",
-                "impossible d'acc\u00E9der \u00E0 LoginModule : "},
-        {"Login.Failure.all.modules.ignored",
-                "Echec de connexion : tous les modules ont \u00E9t\u00E9 ignor\u00E9s"},
-
-        // sun.security.provider.PolicyFile
-
-        {"java.security.policy.error.parsing.policy.message",
-                "java.security.policy : erreur d''analyse de {0} :\n\t{1}"},
-        {"java.security.policy.error.adding.Permission.perm.message",
-                "java.security.policy : erreur d''ajout de droit, {0} :\n\t{1}"},
-        {"java.security.policy.error.adding.Entry.message",
-                "java.security.policy : erreur d''ajout d''entr\u00E9e :\n\t{0}"},
-        {"alias.name.not.provided.pe.name.", "nom d''alias non fourni ({0})"},
-        {"unable.to.perform.substitution.on.alias.suffix",
-                "impossible d''effectuer une substitution pour l''alias, {0}"},
-        {"substitution.value.prefix.unsupported",
-                "valeur de substitution, {0}, non prise en charge"},
-        {"LPARAM", "("},
-        {"RPARAM", ")"},
-        {"type.can.t.be.null","le type ne peut \u00EAtre NULL"},
-
-        // sun.security.provider.PolicyParser
-        {"keystorePasswordURL.can.not.be.specified.without.also.specifying.keystore",
-                "Impossible de sp\u00E9cifier keystorePasswordURL sans indiquer aussi le fichier de cl\u00E9s"},
-        {"expected.keystore.type", "type de fichier de cl\u00E9s attendu"},
-        {"expected.keystore.provider", "fournisseur de fichier de cl\u00E9s attendu"},
-        {"multiple.Codebase.expressions",
-                "expressions Codebase multiples"},
-        {"multiple.SignedBy.expressions","expressions SignedBy multiples"},
-        {"SignedBy.has.empty.alias","SignedBy poss\u00E8de un alias vide"},
-        {"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
-                "impossible de sp\u00E9cifier le principal avec une classe g\u00E9n\u00E9rique sans nom g\u00E9n\u00E9rique"},
-        {"expected.codeBase.or.SignedBy.or.Principal",
-                "codeBase, SignedBy ou Principal attendu"},
-        {"expected.permission.entry", "entr\u00E9e de droit attendue"},
-        {"number.", "nombre "},
-        {"expected.expect.read.end.of.file.",
-                "attendu [{0}], lu [fin de fichier]"},
-        {"expected.read.end.of.file.",
-                "attendu [;], lu [fin de fichier]"},
-        {"line.number.msg", "ligne {0} : {1}"},
-        {"line.number.expected.expect.found.actual.",
-                "ligne {0} : attendu [{1}], trouv\u00E9 [{2}]"},
-        {"null.principalClass.or.principalName",
-                "principalClass ou principalName NULL"},
-
-        // sun.security.pkcs11.SunPKCS11
-        {"PKCS11.Token.providerName.Password.",
-                "Mot de passe PKCS11 Token [{0}] : "},
-
-        /* --- DEPRECATED --- */
-        // javax.security.auth.Policy
-        {"unable.to.instantiate.Subject.based.policy",
-                "impossible d'instancier les r\u00E8gles bas\u00E9es sur le sujet"}
-    };
-
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     *
-     * <p>
-     *
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-}
-
diff --git a/ojluni/src/main/java/sun/security/util/Resources_it.java b/ojluni/src/main/java/sun/security/util/Resources_it.java
deleted file mode 100755
index ba26d93..0000000
--- a/ojluni/src/main/java/sun/security/util/Resources_it.java
+++ /dev/null
@@ -1,661 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, 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.
- */
-
-package sun.security.util;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for javax.security.auth and sun.security.
- *
- */
-public class Resources_it extends java.util.ListResourceBundle {
-
-    private static final Object[][] contents = {
-
-        // shared (from jarsigner)
-        {"SPACE", " "},
-        {"2SPACE", "  "},
-        {"6SPACE", "      "},
-        {"COMMA", ", "},
-        // shared (from keytool)
-        {"NEWLINE", "\n"},
-        {"STAR",
-                "*******************************************"},
-        {"STARNN",
-                "*******************************************\n\n"},
-
-        // keytool: Help part
-        {".OPTION.", " [OPTION]..."},
-        {"Options.", "Opzioni:"},
-        {"Use.keytool.help.for.all.available.commands",
-                 "Utilizzare \"keytool -help\" per visualizzare tutti i comandi disponibili"},
-        {"Key.and.Certificate.Management.Tool",
-                 "Strumento di gestione di chiavi e certificati"},
-        {"Commands.", "Comandi:"},
-        {"Use.keytool.command.name.help.for.usage.of.command.name",
-                "Utilizzare \"keytool -command_name -help\" per informazioni sull'uso di command_name"},
-        // keytool: help: commands
-        {"Generates.a.certificate.request",
-                "Genera una richiesta di certificato"}, //-certreq
-        {"Changes.an.entry.s.alias",
-                "Modifica l'alias di una voce"}, //-changealias
-        {"Deletes.an.entry",
-                "Elimina una voce"}, //-delete
-        {"Exports.certificate",
-                "Esporta il certificato"}, //-exportcert
-        {"Generates.a.key.pair",
-                "Genera una coppia di chiavi"}, //-genkeypair
-        {"Generates.a.secret.key",
-                "Genera una chiave segreta"}, //-genseckey
-        {"Generates.certificate.from.a.certificate.request",
-                "Genera un certificato da una richiesta di certificato"}, //-gencert
-        {"Generates.CRL", "Genera CRL"}, //-gencrl
-        {"Imports.entries.from.a.JDK.1.1.x.style.identity.database",
-                "Importa le voci da un database delle identit\u00E0 di tipo JDK 1.1.x"}, //-identitydb
-        {"Imports.a.certificate.or.a.certificate.chain",
-                "Importa un certificato o una catena di certificati"}, //-importcert
-        {"Imports.one.or.all.entries.from.another.keystore",
-                "Importa una o tutte le voci da un altro keystore"}, //-importkeystore
-        {"Clones.a.key.entry",
-                "Duplica una voce di chiave"}, //-keyclone
-        {"Changes.the.key.password.of.an.entry",
-                "Modifica la password della chiave per una voce"}, //-keypasswd
-        {"Lists.entries.in.a.keystore",
-                "Elenca le voci in un keystore"}, //-list
-        {"Prints.the.content.of.a.certificate",
-                "Visualizza i contenuti di un certificato"}, //-printcert
-        {"Prints.the.content.of.a.certificate.request",
-                "Visualizza i contenuti di una richiesta di certificato"}, //-printcertreq
-        {"Prints.the.content.of.a.CRL.file",
-                "Visualizza i contenuti di un file CRL"}, //-printcrl
-        {"Generates.a.self.signed.certificate",
-                "Genera certificato con firma automatica"}, //-selfcert
-        {"Changes.the.store.password.of.a.keystore",
-                "Modifica la password di area di memorizzazione di un keystore"}, //-storepasswd
-        // keytool: help: options
-        {"alias.name.of.the.entry.to.process",
-                "nome alias della voce da elaborare"}, //-alias
-        {"destination.alias",
-                "alias di destinazione"}, //-destalias
-        {"destination.key.password",
-                "password chiave di destinazione"}, //-destkeypass
-        {"destination.keystore.name",
-                "nome keystore di destinazione"}, //-destkeystore
-        {"destination.keystore.password.protected",
-                "password keystore di destinazione protetta"}, //-destprotected
-        {"destination.keystore.provider.name",
-                "nome provider keystore di destinazione"}, //-destprovidername
-        {"destination.keystore.password",
-                "password keystore di destinazione"}, //-deststorepass
-        {"destination.keystore.type",
-                "tipo keystore di destinazione"}, //-deststoretype
-        {"distinguished.name",
-                "nome distinto"}, //-dname
-        {"X.509.extension",
-                "estensione X.509"}, //-ext
-        {"output.file.name",
-                "nome file di output"}, //-file and -outfile
-        {"input.file.name",
-                "nome file di input"}, //-file and -infile
-        {"key.algorithm.name",
-                "nome algoritmo chiave"}, //-keyalg
-        {"key.password",
-                "password chiave"}, //-keypass
-        {"key.bit.size",
-                "dimensione bit chiave"}, //-keysize
-        {"keystore.name",
-                "nome keystore"}, //-keystore
-        {"new.password",
-                "nuova password"}, //-new
-        {"do.not.prompt",
-                "non richiedere"}, //-noprompt
-        {"password.through.protected.mechanism",
-                "password mediante meccanismo protetto"}, //-protected
-        {"provider.argument",
-                "argomento provider"}, //-providerarg
-        {"provider.class.name",
-                "nome classe provider"}, //-providerclass
-        {"provider.name",
-                "nome provider"}, //-providername
-        {"provider.classpath",
-                "classpath provider"}, //-providerpath
-        {"output.in.RFC.style",
-                "output in stile RFC"}, //-rfc
-        {"signature.algorithm.name",
-                "nome algoritmo firma"}, //-sigalg
-        {"source.alias",
-                "alias origine"}, //-srcalias
-        {"source.key.password",
-                "password chiave di origine"}, //-srckeypass
-        {"source.keystore.name",
-                "nome keystore di origine"}, //-srckeystore
-        {"source.keystore.password.protected",
-                "password keystore di origine protetta"}, //-srcprotected
-        {"source.keystore.provider.name",
-                "nome provider keystore di origine"}, //-srcprovidername
-        {"source.keystore.password",
-                "password keystore di origine"}, //-srcstorepass
-        {"source.keystore.type",
-                "tipo keystore di origine"}, //-srcstoretype
-        {"SSL.server.host.and.port",
-                "host e porta server SSL"}, //-sslserver
-        {"signed.jar.file",
-                "file jar firmato"}, //=jarfile
-        {"certificate.validity.start.date.time",
-                "data/ora di inizio validit\u00E0 certificato"}, //-startdate
-        {"keystore.password",
-                "password keystore"}, //-storepass
-        {"keystore.type",
-                "tipo keystore"}, //-storetype
-        {"trust.certificates.from.cacerts",
-                "considera sicuri i certificati da cacerts"}, //-trustcacerts
-        {"verbose.output",
-                "output descrittivo"}, //-v
-        {"validity.number.of.days",
-                "numero di giorni di validit\u00E0"}, //-validity
-        {"Serial.ID.of.cert.to.revoke",
-                 "ID seriale del certificato da revocare"}, //-id
-        // keytool: Running part
-        {"keytool.error.", "Errore keytool: "},
-        {"Illegal.option.", "Opzione non valida:  "},
-        {"Illegal.value.", "Valore non valido: "},
-        {"Unknown.password.type.", "Tipo di password sconosciuto: "},
-        {"Cannot.find.environment.variable.",
-                "Impossibile trovare la variabile di ambiente: "},
-        {"Cannot.find.file.", "Impossibile trovare il file: "},
-        {"Command.option.flag.needs.an.argument.", "\u00C8 necessario specificare un argomento per l''opzione di comando {0}."},
-        {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.",
-                "Avvertenza: non sono supportate password diverse di chiave e di archivio per i keystore PKCS12. Il valore {0} specificato dall''utente verr\u00E0 ignorato."},
-        {".keystore.must.be.NONE.if.storetype.is.{0}",
-                "Se -storetype \u00E8 impostato su {0}, -keystore deve essere impostato su NONE"},
-        {"Too.many.retries.program.terminated",
-                 "Il numero dei tentativi consentiti \u00E8 stato superato. Il programma verr\u00E0 terminato."},
-        {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}",
-                "Se -storetype \u00E8 impostato su {0}, i comandi -storepasswd e -keypasswd non sono supportati"},
-        {".keypasswd.commands.not.supported.if.storetype.is.PKCS12",
-                "Se -storetype \u00E8 impostato su PKCS12 i comandi -keypasswd non vengono supportati"},
-        {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}",
-                "Se -storetype \u00E8 impostato su {0}, non \u00E8 possibile specificare un valore per -keypass e -new"},
-        {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified",
-                "Se \u00E8 specificata l'opzione -protected, le opzioni -storepass, -keypass e -new non possono essere specificate"},
-        {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "Se viene specificato -srcprotected, -srcstorepass e -srckeypass non dovranno essere specificati"},
-        {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified",
-                "Se il file keystore non \u00E8 protetto da password, non deve essere specificato alcun valore per -storepass, -keypass e -new"},
-        {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "Se il file keystore non \u00E8 protetto da password, non deve essere specificato alcun valore per -srcstorepass e -srckeypass"},
-        {"Illegal.startdate.value", "Valore di data di inizio non valido"},
-        {"Validity.must.be.greater.than.zero",
-                "La validit\u00E0 deve essere maggiore di zero"},
-        {"provName.not.a.provider", "{0} non \u00E8 un provider"},
-        {"Usage.error.no.command.provided", "Errore di utilizzo: nessun comando specificato"},
-        {"Source.keystore.file.exists.but.is.empty.", "Il file keystore di origine esiste, ma \u00E8 vuoto: "},
-        {"Please.specify.srckeystore", "Specificare -srckeystore"},
-        {"Must.not.specify.both.v.and.rfc.with.list.command",
-                "Impossibile specificare sia -v sia -rfc con il comando 'list'"},
-        {"Key.password.must.be.at.least.6.characters",
-                "La password della chiave deve contenere almeno 6 caratteri"},
-        {"New.password.must.be.at.least.6.characters",
-                "La nuova password deve contenere almeno 6 caratteri"},
-        {"Keystore.file.exists.but.is.empty.",
-                "Il file keystore esiste ma \u00E8 vuoto: "},
-        {"Keystore.file.does.not.exist.",
-                "Il file keystore non esiste: "},
-        {"Must.specify.destination.alias", "\u00C8 necessario specificare l'alias di destinazione"},
-        {"Must.specify.alias", "\u00C8 necessario specificare l'alias"},
-        {"Keystore.password.must.be.at.least.6.characters",
-                "La password del keystore deve contenere almeno 6 caratteri"},
-        {"Enter.keystore.password.", "Immettere la password del keystore:  "},
-        {"Enter.source.keystore.password.", "Immettere la password del keystore di origine:  "},
-        {"Enter.destination.keystore.password.", "Immettere la password del keystore di destinazione:  "},
-        {"Keystore.password.is.too.short.must.be.at.least.6.characters",
-         "La password del keystore \u00E8 troppo corta - deve contenere almeno 6 caratteri"},
-        {"Unknown.Entry.Type", "Tipo di voce sconosciuto"},
-        {"Too.many.failures.Alias.not.changed", "Numero eccessivo di errori. L'alias non \u00E8 stato modificato."},
-        {"Entry.for.alias.alias.successfully.imported.",
-                 "La voce dell''alias {0} \u00E8 stata importata."},
-        {"Entry.for.alias.alias.not.imported.", "La voce dell''alias {0} non \u00E8 stata importata."},
-        {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.",
-                 "Si \u00E8 verificato un problema durante l''importazione della voce dell''alias {0}: {1}.\nLa voce dell''alias {0} non \u00E8 stata importata."},
-        {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled",
-                 "Comando di importazione completato: {0} voce/i importata/e, {1} voce/i non importata/e o annullata/e"},
-        {"Warning.Overwriting.existing.alias.alias.in.destination.keystore",
-                 "Avvertenza: sovrascrittura in corso dell''alias {0} nel file keystore di destinazione"},
-        {"Existing.entry.alias.alias.exists.overwrite.no.",
-                 "La voce dell''alias {0} esiste gi\u00E0. Sovrascrivere? [no]:  "},
-        {"Too.many.failures.try.later", "Troppi errori - riprovare"},
-        {"Certification.request.stored.in.file.filename.",
-                "La richiesta di certificazione \u00E8 memorizzata nel file <{0}>"},
-        {"Submit.this.to.your.CA", "Sottomettere alla propria CA"},
-        {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
-            "Se l'alias non \u00E8 specificato, destalias, srckeypass e destkeypass non dovranno essere specificati"},
-        {"Certificate.stored.in.file.filename.",
-                "Il certificato \u00E8 memorizzato nel file <{0}>"},
-        {"Certificate.reply.was.installed.in.keystore",
-                "La risposta del certificato \u00E8 stata installata nel keystore"},
-        {"Certificate.reply.was.not.installed.in.keystore",
-                "La risposta del certificato non \u00E8 stata installata nel keystore"},
-        {"Certificate.was.added.to.keystore",
-                "Il certificato \u00E8 stato aggiunto al keystore"},
-        {"Certificate.was.not.added.to.keystore",
-                "Il certificato non \u00E8 stato aggiunto al keystore"},
-        {".Storing.ksfname.", "[Memorizzazione di {0}] in corso"},
-        {"alias.has.no.public.key.certificate.",
-                "{0} non dispone di chiave pubblica (certificato)"},
-        {"Cannot.derive.signature.algorithm",
-                "Impossibile derivare l'algoritmo di firma"},
-        {"Alias.alias.does.not.exist",
-                "L''alias <{0}> non esiste"},
-        {"Alias.alias.has.no.certificate",
-                "L''alias <{0}> non dispone di certificato"},
-        {"Key.pair.not.generated.alias.alias.already.exists",
-                "Non \u00E8 stata generata la coppia di chiavi, l''alias <{0}> \u00E8 gi\u00E0 esistente"},
-        {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for",
-                "Generazione in corso di una coppia di chiavi {1} da {0} bit e di un certificato autofirmato ({2}) con una validit\u00E0 di {3} giorni\n\tper: {4}"},
-        {"Enter.key.password.for.alias.", "Immettere la password della chiave per <{0}>"},
-        {".RETURN.if.same.as.keystore.password.",
-                "\t(INVIO se corrisponde alla password del keystore):  "},
-        {"Key.password.is.too.short.must.be.at.least.6.characters",
-                "La password della chiave \u00E8 troppo corta - deve contenere almeno 6 caratteri"},
-        {"Too.many.failures.key.not.added.to.keystore",
-                "Troppi errori - la chiave non \u00E8 stata aggiunta al keystore"},
-        {"Destination.alias.dest.already.exists",
-                "L''alias di destinazione <{0}> \u00E8 gi\u00E0 esistente"},
-        {"Password.is.too.short.must.be.at.least.6.characters",
-                "La password \u00E8 troppo corta - deve contenere almeno 6 caratteri"},
-        {"Too.many.failures.Key.entry.not.cloned",
-                "Numero eccessivo di errori. Il valore della chiave non \u00E8 stato copiato."},
-        {"key.password.for.alias.", "password della chiave per <{0}>"},
-        {"Keystore.entry.for.id.getName.already.exists",
-                "La voce del keystore per <{0}> esiste gi\u00E0"},
-        {"Creating.keystore.entry.for.id.getName.",
-                "Creazione della voce del keystore per <{0}> in corso..."},
-        {"No.entries.from.identity.database.added",
-                "Nessuna voce aggiunta dal database delle identit\u00E0"},
-        {"Alias.name.alias", "Nome alias: {0}"},
-        {"Creation.date.keyStore.getCreationDate.alias.",
-                "Data di creazione: {0,date}"},
-        {"alias.keyStore.getCreationDate.alias.",
-                "{0}, {1,date}, "},
-        {"alias.", "{0}, "},
-        {"Entry.type.type.", "Tipo di voce: {0}"},
-        {"Certificate.chain.length.", "Lunghezza catena certificati: "},
-        {"Certificate.i.1.", "Certificato[{0,number,integer}]:"},
-        {"Certificate.fingerprint.SHA1.", "Impronta digitale certificato (SHA1): "},
-        {"Keystore.type.", "Tipo keystore: "},
-        {"Keystore.provider.", "Provider keystore: "},
-        {"Your.keystore.contains.keyStore.size.entry",
-                "Il keystore contiene {0,number,integer} voce"},
-        {"Your.keystore.contains.keyStore.size.entries",
-                "Il keystore contiene {0,number,integer} voci"},
-        {"Failed.to.parse.input", "Impossibile analizzare l'input"},
-        {"Empty.input", "Input vuoto"},
-        {"Not.X.509.certificate", "Il certificato non \u00E8 X.509"},
-        {"alias.has.no.public.key", "{0} non dispone di chiave pubblica"},
-        {"alias.has.no.X.509.certificate", "{0} non dispone di certificato X.509"},
-        {"New.certificate.self.signed.", "Nuovo certificato (autofirmato):"},
-        {"Reply.has.no.certificates", "La risposta non dispone di certificati"},
-        {"Certificate.not.imported.alias.alias.already.exists",
-                "Impossibile importare il certificato, l''alias <{0}> \u00E8 gi\u00E0 esistente"},
-        {"Input.not.an.X.509.certificate", "L'input non \u00E8 un certificato X.509"},
-        {"Certificate.already.exists.in.keystore.under.alias.trustalias.",
-                "Il certificato esiste gi\u00E0 nel keystore con alias <{0}>"},
-        {"Do.you.still.want.to.add.it.no.",
-                "Aggiungerlo ugualmente? [no]:  "},
-        {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.",
-                "Il certificato esiste gi\u00E0 nel keystore CA con alias <{0}>"},
-        {"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
-                "Aggiungerlo al proprio keystore? [no]:  "},
-        {"Trust.this.certificate.no.", "Considerare sicuro questo certificato? [no]:  "},
-        {"YES", "S\u00EC"},
-        {"New.prompt.", "Nuova {0}: "},
-        {"Passwords.must.differ", "Le password non devono coincidere"},
-        {"Re.enter.new.prompt.", "Reimmettere un nuovo valore per {0}: "},
-        {"Re.enter.new.password.", "Immettere nuovamente la nuova password: "},
-        {"They.don.t.match.Try.again", "Non corrispondono. Riprovare."},
-        {"Enter.prompt.alias.name.", "Immettere nome alias {0}:  "},
-        {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.",
-                 "Immettere un nuovo nome alias\t(premere INVIO per annullare l'importazione della voce):  "},
-        {"Enter.alias.name.", "Immettere nome alias:  "},
-        {".RETURN.if.same.as.for.otherAlias.",
-                "\t(INVIO se corrisponde al nome di <{0}>"},
-        {".PATTERN.printX509Cert",
-                "Proprietario: {0}\nAutorit\u00E0 emittente: {1}\nNumero di serie: {2}\nValido da: {3} a: {4}\nImpronte digitali certificato:\n\t MD5:  {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Nome algoritmo firma: {8}\n\t Versione: {9}"},
-        {"What.is.your.first.and.last.name.",
-                "Specificare nome e cognome"},
-        {"What.is.the.name.of.your.organizational.unit.",
-                "Specificare il nome dell'unit\u00E0 organizzativa"},
-        {"What.is.the.name.of.your.organization.",
-                "Specificare il nome dell'organizzazione"},
-        {"What.is.the.name.of.your.City.or.Locality.",
-                "Specificare la localit\u00E0"},
-        {"What.is.the.name.of.your.State.or.Province.",
-                "Specificare la provincia"},
-        {"What.is.the.two.letter.country.code.for.this.unit.",
-                "Specificare il codice a due lettere del paese in cui si trova l'unit\u00E0"},
-        {"Is.name.correct.", "Il dato {0} \u00E8 corretto?"},
-        {"no", "no"},
-        {"yes", "s\u00EC"},
-        {"y", "s"},
-        {".defaultValue.", "  [{0}]:  "},
-        {"Alias.alias.has.no.key",
-                "All''alias <{0}> non \u00E8 associata alcuna chiave"},
-        {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key",
-                 "L''alias <{0}> fa riferimento a un tipo di voce che non \u00E8 una voce di chiave privata. Il comando -keyclone supporta solo la copia delle voci di chiave private."},
-
-        {".WARNING.WARNING.WARNING.",
-            "*****************  WARNING WARNING WARNING  *****************"},
-        {"Signer.d.", "Firmatario #%d:"},
-        {"Timestamp.", "Indicatore orario:"},
-        {"Signature.", "Firma:"},
-        {"CRLs.", "CRL:"},
-        {"Certificate.owner.", "Proprietario certificato: "},
-        {"Not.a.signed.jar.file", "Non \u00E8 un file jar firmato"},
-        {"No.certificate.from.the.SSL.server",
-                "Nessun certificato dal server SSL"},
-
-        {".The.integrity.of.the.information.stored.in.your.keystore.",
-            "* L'integrit\u00E0 delle informazioni memorizzate nel keystore *\n* NON \u00E8 stata verificata. Per verificarne l'integrit\u00E0 *\n* \u00E8 necessario fornire la password del keystore.                  *"},
-        {".The.integrity.of.the.information.stored.in.the.srckeystore.",
-            "* L'integrit\u00E0 delle informazioni memorizzate nel srckeystore *\n* NON \u00E8 stata verificata. Per verificarne l'integrit\u00E0 *\n* \u00E8 necessario fornire la password del srckeystore.                  *"},
-
-        {"Certificate.reply.does.not.contain.public.key.for.alias.",
-                "La risposta del certificato non contiene la chiave pubblica per <{0}>"},
-        {"Incomplete.certificate.chain.in.reply",
-                "Catena dei certificati incompleta nella risposta"},
-        {"Certificate.chain.in.reply.does.not.verify.",
-                "La catena dei certificati nella risposta non verifica: "},
-        {"Top.level.certificate.in.reply.",
-                "Certificato di primo livello nella risposta:\n"},
-        {".is.not.trusted.", "...non \u00E8 considerato sicuro. "},
-        {"Install.reply.anyway.no.", "Installare la risposta? [no]:  "},
-        {"NO", "NO"},
-        {"Public.keys.in.reply.and.keystore.don.t.match",
-                "Le chiavi pubbliche nella risposta e nel keystore non corrispondono"},
-        {"Certificate.reply.and.certificate.in.keystore.are.identical",
-                "La risposta del certificato e il certificato nel keystore sono identici"},
-        {"Failed.to.establish.chain.from.reply",
-                "Impossibile stabilire la catena dalla risposta"},
-        {"n", "n"},
-        {"Wrong.answer.try.again", "Risposta errata, riprovare"},
-        {"Secret.key.not.generated.alias.alias.already.exists",
-                "La chiave segreta non \u00E8 stata generata; l''alias <{0}> esiste gi\u00E0"},
-        {"Please.provide.keysize.for.secret.key.generation",
-                "Specificare il valore -keysize per la generazione della chiave segreta"},
-
-        {"Extensions.", "Estensioni: "},
-        {".Empty.value.", "(valore vuoto)"},
-        {"Extension.Request.", "Richiesta di estensione:"},
-        {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.",
-                "Richiesta di certificato PKCS #10 (versione 1.0)\nOggetto: %s\nChiave pubblica: %s formato %s chiave\n"},
-        {"Unknown.keyUsage.type.", "Tipo keyUsage sconosciuto: "},
-        {"Unknown.extendedkeyUsage.type.", "Tipo extendedkeyUsage sconosciuto: "},
-        {"Unknown.AccessDescription.type.", "Tipo AccessDescription sconosciuto: "},
-        {"Unrecognized.GeneralName.type.", "Tipo GeneralName non riconosciuto: "},
-        {"This.extension.cannot.be.marked.as.critical.",
-                 "Impossibile contrassegnare questa estensione come critica. "},
-        {"Odd.number.of.hex.digits.found.", "\u00C8 stato trovato un numero dispari di cifre esadecimali: "},
-        {"Unknown.extension.type.", "Tipo di estensione sconosciuto: "},
-        {"command.{0}.is.ambiguous.", "il comando {0} \u00E8 ambiguo:"},
-
-        // policytool
-        {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.",
-                "Avvertenza: non esiste una chiave pubblica per l''alias {0}. Verificare che il keystore sia configurato correttamente."},
-        {"Warning.Class.not.found.class", "Avvertenza: classe non trovata: {0}"},
-        {"Warning.Invalid.argument.s.for.constructor.arg",
-                "Avvertenza: argomento o argomenti non validi per il costruttore {0}"},
-        {"Illegal.Principal.Type.type", "Tipo principal non valido: {0}"},
-        {"Illegal.option.option", "Opzione non valida: {0}"},
-        {"Usage.policytool.options.", "Uso: policytool [opzioni]"},
-        {".file.file.policy.file.location",
-                "  [-file <file>]    posizione del file dei criteri"},
-        {"New", "Nuovo"},
-        {"Open", "Apri"},
-        {"Save", "Salva"},
-        {"Save.As", "Salva con nome"},
-        {"View.Warning.Log", "Visualizza registro avvertenze"},
-        {"Exit", "Esci"},
-        {"Add.Policy.Entry", "Aggiungi voce dei criteri"},
-        {"Edit.Policy.Entry", "Modifica voce dei criteri"},
-        {"Remove.Policy.Entry", "Rimuovi voce dei criteri"},
-        {"Edit", "Modifica"},
-        {"Retain", "Mantieni"},
-
-        {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes",
-            "Avvertenza: il nome file pu\u00F2 includere barre rovesciate con escape. Non \u00E8 necessario eseguire l'escape delle barre rovesciate (se necessario lo strumento esegue l'escape dei caratteri al momento della scrittura del contenuto dei criteri nell'area di memorizzazione persistente).\n\nFare click su Mantieni per conservare il nome immesso, oppure su Modifica per modificare il nome."},
-
-        {"Add.Public.Key.Alias", "Aggiungi alias chiave pubblica"},
-        {"Remove.Public.Key.Alias", "Rimuovi alias chiave pubblica"},
-        {"File", "File"},
-        {"KeyStore", "Keystore"},
-        {"Policy.File.", "File dei criteri:"},
-        {"Could.not.open.policy.file.policyFile.e.toString.",
-                "Impossibile aprire il file di criteri {0}: {1}"},
-        {"Policy.Tool", "Strumento criteri"},
-        {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.",
-                "Si sono verificati errori durante l'apertura della configurazione dei criteri. Consultare il registro delle avvertenze per ulteriori informazioni."},
-        {"Error", "Errore"},
-        {"OK", "OK"},
-        {"Status", "Stato"},
-        {"Warning", "Avvertenza"},
-        {"Permission.",
-                "Autorizzazione:                                                       "},
-        {"Principal.Type.", "Tipo principal:"},
-        {"Principal.Name.", "Nome principal:"},
-        {"Target.Name.",
-                "Nome destinazione:                                                    "},
-        {"Actions.",
-                "Azioni:                                                             "},
-        {"OK.to.overwrite.existing.file.filename.",
-                "OK per sovrascrivere il file {0}?"},
-        {"Cancel", "Annulla"},
-        {"CodeBase.", "CodeBase:"},
-        {"SignedBy.", "SignedBy:"},
-        {"Add.Principal", "Aggiungi principal"},
-        {"Edit.Principal", "Modifica principal"},
-        {"Remove.Principal", "Rimuovi principal"},
-        {"Principals.", "Principal:"},
-        {".Add.Permission", "  Aggiungi autorizzazione"},
-        {".Edit.Permission", "  Modifica autorizzazione"},
-        {"Remove.Permission", "Rimuovi autorizzazione"},
-        {"Done", "Fine"},
-        {"KeyStore.URL.", "URL keystore:"},
-        {"KeyStore.Type.", "Tipo keystore:"},
-        {"KeyStore.Provider.", "Provider keystore:"},
-        {"KeyStore.Password.URL.", "URL password keystore:"},
-        {"Principals", "Principal:"},
-        {".Edit.Principal.", "  Modifica principal:"},
-        {".Add.New.Principal.", "  Aggiungi nuovo principal:"},
-        {"Permissions", "Autorizzazioni"},
-        {".Edit.Permission.", "  Modifica autorizzazione:"},
-        {".Add.New.Permission.", "  Aggiungi nuova autorizzazione:"},
-        {"Signed.By.", "Firmato da:"},
-        {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name",
-            "Impossibile specificare principal con una classe carattere jolly senza un nome carattere jolly"},
-        {"Cannot.Specify.Principal.without.a.Name",
-            "Impossibile specificare principal senza un nome"},
-        {"Permission.and.Target.Name.must.have.a.value",
-                "L'autorizzazione e il nome destinazione non possono essere nulli"},
-        {"Remove.this.Policy.Entry.", "Rimuovere questa voce dei criteri?"},
-        {"Overwrite.File", "Sovrascrivi file"},
-        {"Policy.successfully.written.to.filename",
-                "I criteri sono stati scritti in {0}"},
-        {"null.filename", "nome file nullo"},
-        {"Save.changes.", "Salvare le modifiche?"},
-        {"Yes", "S\u00EC"},
-        {"No", "No"},
-        {"Policy.Entry", "Voce dei criteri"},
-        {"Save.Changes", "Salva le modifiche"},
-        {"No.Policy.Entry.selected", "Nessuna voce dei criteri selezionata"},
-        {"Unable.to.open.KeyStore.ex.toString.",
-                "Impossibile aprire il keystore: {0}"},
-        {"No.principal.selected", "Nessun principal selezionato"},
-        {"No.permission.selected", "Nessuna autorizzazione selezionata"},
-        {"name", "nome"},
-        {"configuration.type", "tipo di configurazione"},
-        {"environment.variable.name", "nome variabile ambiente"},
-        {"library.name", "nome libreria"},
-        {"package.name", "nome package"},
-        {"policy.type", "tipo di criteri"},
-        {"property.name", "nome propriet\u00E0"},
-        {"Principal.List", "Lista principal"},
-        {"Permission.List", "Lista autorizzazioni"},
-        {"Code.Base", "Codebase"},
-        {"KeyStore.U.R.L.", "URL keystore:"},
-        {"KeyStore.Password.U.R.L.", "URL password keystore:"},
-
-
-        // javax.security.auth.PrivateCredentialPermission
-        {"invalid.null.input.s.", "input nullo/i non valido/i"},
-        {"actions.can.only.be.read.", "le azioni possono essere solamente 'lette'"},
-        {"permission.name.name.syntax.invalid.",
-                "sintassi [{0}] non valida per il nome autorizzazione: "},
-        {"Credential.Class.not.followed.by.a.Principal.Class.and.Name",
-                "la classe di credenziali non \u00E8 seguita da un nome e una classe di principal"},
-        {"Principal.Class.not.followed.by.a.Principal.Name",
-                "la classe di principal non \u00E8 seguita da un nome principal"},
-        {"Principal.Name.must.be.surrounded.by.quotes",
-                "il nome principal deve essere compreso tra apici"},
-        {"Principal.Name.missing.end.quote",
-                "apice di chiusura del nome principal mancante"},
-        {"PrivateCredentialPermission.Principal.Class.can.not.be.a.wildcard.value.if.Principal.Name.is.not.a.wildcard.value",
-                "la classe principal PrivateCredentialPermission non pu\u00F2 essere un valore carattere jolly (*) se il nome principal a sua volta non \u00E8 un valore carattere jolly (*)"},
-        {"CredOwner.Principal.Class.class.Principal.Name.name",
-                "CredOwner:\n\tclasse Principal = {0}\n\tNome Principal = {1}"},
-
-        // javax.security.auth.x500
-        {"provided.null.name", "il nome fornito \u00E8 nullo"},
-        {"provided.null.keyword.map", "specificata mappa parole chiave null"},
-        {"provided.null.OID.map", "specificata mappa OID null"},
-
-        // javax.security.auth.Subject
-        {"invalid.null.AccessControlContext.provided",
-                "fornito un valore nullo non valido per AccessControlContext"},
-        {"invalid.null.action.provided", "fornita un'azione nulla non valida"},
-        {"invalid.null.Class.provided", "fornita una classe nulla non valida"},
-        {"Subject.", "Oggetto:\n"},
-        {".Principal.", "\tPrincipal: "},
-        {".Public.Credential.", "\tCredenziale pubblica: "},
-        {".Private.Credentials.inaccessible.",
-                "\tImpossibile accedere alle credenziali private\n"},
-        {".Private.Credential.", "\tCredenziale privata: "},
-        {".Private.Credential.inaccessible.",
-                "\tImpossibile accedere alla credenziale privata\n"},
-        {"Subject.is.read.only", "L'oggetto \u00E8 di sola lettura"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.java.security.Principal.to.a.Subject.s.Principal.Set",
-                "si \u00E8 tentato di aggiungere un oggetto che non \u00E8 un'istanza di java.security.Principal a un set principal dell'oggetto"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.class",
-                "si \u00E8 tentato di aggiungere un oggetto che non \u00E8 un''istanza di {0}"},
-
-        // javax.security.auth.login.AppConfigurationEntry
-        {"LoginModuleControlFlag.", "LoginModuleControlFlag: "},
-
-        // javax.security.auth.login.LoginContext
-        {"Invalid.null.input.name", "Input nullo non valido: nome"},
-        {"No.LoginModules.configured.for.name",
-         "Nessun LoginModules configurato per {0}"},
-        {"invalid.null.Subject.provided", "fornito un valore nullo non valido per l'oggetto"},
-        {"invalid.null.CallbackHandler.provided",
-                "fornito un valore nullo non valido per CallbackHandler"},
-        {"null.subject.logout.called.before.login",
-                "oggetto nullo - il logout \u00E8 stato richiamato prima del login"},
-        {"unable.to.instantiate.LoginModule.module.because.it.does.not.provide.a.no.argument.constructor",
-                "impossibile creare un''istanza di LoginModule {0} in quanto non restituisce un argomento vuoto per il costruttore"},
-        {"unable.to.instantiate.LoginModule",
-                "impossibile creare un'istanza di LoginModule"},
-        {"unable.to.instantiate.LoginModule.",
-                "impossibile creare un'istanza di LoginModule: "},
-        {"unable.to.find.LoginModule.class.",
-                "impossibile trovare la classe LoginModule: "},
-        {"unable.to.access.LoginModule.",
-                "impossibile accedere a LoginModule "},
-        {"Login.Failure.all.modules.ignored",
-                "Errore di login: tutti i moduli sono stati ignorati"},
-
-        // sun.security.provider.PolicyFile
-
-        {"java.security.policy.error.parsing.policy.message",
-                "java.security.policy: errore durante l''analisi di {0}:\n\t{1}"},
-        {"java.security.policy.error.adding.Permission.perm.message",
-                "java.security.policy: errore durante l''aggiunta dell''autorizzazione {0}:\n\t{1}"},
-        {"java.security.policy.error.adding.Entry.message",
-                "java.security.policy: errore durante l''aggiunta della voce:\n\t{0}"},
-        {"alias.name.not.provided.pe.name.", "impossibile fornire nome alias ({0})"},
-        {"unable.to.perform.substitution.on.alias.suffix",
-                "impossibile eseguire una sostituzione sull''alias, {0}"},
-        {"substitution.value.prefix.unsupported",
-                "valore sostituzione, {0}, non supportato"},
-        {"LPARAM", "("},
-        {"RPARAM", ")"},
-        {"type.can.t.be.null","il tipo non pu\u00F2 essere nullo"},
-
-        // sun.security.provider.PolicyParser
-        {"keystorePasswordURL.can.not.be.specified.without.also.specifying.keystore",
-                "Impossibile specificare keystorePasswordURL senza specificare anche il keystore"},
-        {"expected.keystore.type", "tipo keystore previsto"},
-        {"expected.keystore.provider", "provider di keystore previsto"},
-        {"multiple.Codebase.expressions",
-                "espressioni Codebase multiple"},
-        {"multiple.SignedBy.expressions","espressioni SignedBy multiple"},
-        {"SignedBy.has.empty.alias","SignedBy presenta un alias vuoto"},
-        {"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
-                "impossibile specificare un principal con una classe carattere jolly senza un nome carattere jolly"},
-        {"expected.codeBase.or.SignedBy.or.Principal",
-                "previsto codeBase o SignedBy o principal"},
-        {"expected.permission.entry", "prevista voce di autorizzazione"},
-        {"number.", "numero "},
-        {"expected.expect.read.end.of.file.",
-                "previsto [{0}], letto [end of file]"},
-        {"expected.read.end.of.file.",
-                "previsto [;], letto [end of file]"},
-        {"line.number.msg", "riga {0}: {1}"},
-        {"line.number.expected.expect.found.actual.",
-                "riga {0}: previsto [{1}], trovato [{2}]"},
-        {"null.principalClass.or.principalName",
-                "principalClass o principalName nullo"},
-
-        // sun.security.pkcs11.SunPKCS11
-        {"PKCS11.Token.providerName.Password.",
-                "Password per token PKCS11 [{0}]: "},
-
-        /* --- DEPRECATED --- */
-        // javax.security.auth.Policy
-        {"unable.to.instantiate.Subject.based.policy",
-                "impossibile creare un'istanza dei criteri basati sull'oggetto"}
-    };
-
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     *
-     * <p>
-     *
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-}
-
diff --git a/ojluni/src/main/java/sun/security/util/Resources_ja.java b/ojluni/src/main/java/sun/security/util/Resources_ja.java
deleted file mode 100755
index 0876d15..0000000
--- a/ojluni/src/main/java/sun/security/util/Resources_ja.java
+++ /dev/null
@@ -1,661 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, 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.
- */
-
-package sun.security.util;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for javax.security.auth and sun.security.
- *
- */
-public class Resources_ja extends java.util.ListResourceBundle {
-
-    private static final Object[][] contents = {
-
-        // shared (from jarsigner)
-        {"SPACE", " "},
-        {"2SPACE", "  "},
-        {"6SPACE", "      "},
-        {"COMMA", ", "},
-        // shared (from keytool)
-        {"NEWLINE", "\n"},
-        {"STAR",
-                "*******************************************"},
-        {"STARNN",
-                "*******************************************\n\n"},
-
-        // keytool: Help part
-        {".OPTION.", " [OPTION]..."},
-        {"Options.", "\u30AA\u30D7\u30B7\u30E7\u30F3:"},
-        {"Use.keytool.help.for.all.available.commands",
-                 "\u4F7F\u7528\u53EF\u80FD\u306A\u3059\u3079\u3066\u306E\u30B3\u30DE\u30F3\u30C9\u306B\u3064\u3044\u3066\u306F\"keytool -help\"\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044"},
-        {"Key.and.Certificate.Management.Tool",
-                 "\u30AD\u30FC\u304A\u3088\u3073\u8A3C\u660E\u66F8\u7BA1\u7406\u30C4\u30FC\u30EB"},
-        {"Commands.", "\u30B3\u30DE\u30F3\u30C9:"},
-        {"Use.keytool.command.name.help.for.usage.of.command.name",
-                "command_name\u306E\u4F7F\u7528\u65B9\u6CD5\u306B\u3064\u3044\u3066\u306F\"keytool -command_name -help\"\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044"},
-        // keytool: help: commands
-        {"Generates.a.certificate.request",
-                "\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u751F\u6210\u3057\u307E\u3059"}, //-certreq
-        {"Changes.an.entry.s.alias",
-                "\u30A8\u30F3\u30C8\u30EA\u306E\u5225\u540D\u3092\u5909\u66F4\u3057\u307E\u3059"}, //-changealias
-        {"Deletes.an.entry",
-                "\u30A8\u30F3\u30C8\u30EA\u3092\u524A\u9664\u3057\u307E\u3059"}, //-delete
-        {"Exports.certificate",
-                "\u8A3C\u660E\u66F8\u3092\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3057\u307E\u3059"}, //-exportcert
-        {"Generates.a.key.pair",
-                "\u9375\u30DA\u30A2\u3092\u751F\u6210\u3057\u307E\u3059"}, //-genkeypair
-        {"Generates.a.secret.key",
-                "\u79D8\u5BC6\u9375\u3092\u751F\u6210\u3057\u307E\u3059"}, //-genseckey
-        {"Generates.certificate.from.a.certificate.request",
-                "\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8\u304B\u3089\u8A3C\u660E\u66F8\u3092\u751F\u6210\u3057\u307E\u3059"}, //-gencert
-        {"Generates.CRL", "CRL\u3092\u751F\u6210\u3057\u307E\u3059"}, //-gencrl
-        {"Imports.entries.from.a.JDK.1.1.x.style.identity.database",
-                "JDK 1.1.x-style\u30A2\u30A4\u30C7\u30F3\u30C6\u30A3\u30C6\u30A3\u30FB\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304B\u3089\u30A8\u30F3\u30C8\u30EA\u3092\u30A4\u30F3\u30DD\u30FC\u30C8\u3057\u307E\u3059"}, //-identitydb
-        {"Imports.a.certificate.or.a.certificate.chain",
-                "\u8A3C\u660E\u66F8\u307E\u305F\u306F\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u3092\u30A4\u30F3\u30DD\u30FC\u30C8\u3057\u307E\u3059"}, //-importcert
-        {"Imports.one.or.all.entries.from.another.keystore",
-                "\u5225\u306E\u30AD\u30FC\u30B9\u30C8\u30A2\u304B\u30891\u3064\u307E\u305F\u306F\u3059\u3079\u3066\u306E\u30A8\u30F3\u30C8\u30EA\u3092\u30A4\u30F3\u30DD\u30FC\u30C8\u3057\u307E\u3059"}, //-importkeystore
-        {"Clones.a.key.entry",
-                "\u9375\u30A8\u30F3\u30C8\u30EA\u306E\u30AF\u30ED\u30FC\u30F3\u3092\u4F5C\u6210\u3057\u307E\u3059"}, //-keyclone
-        {"Changes.the.key.password.of.an.entry",
-                "\u30A8\u30F3\u30C8\u30EA\u306E\u9375\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5909\u66F4\u3057\u307E\u3059"}, //-keypasswd
-        {"Lists.entries.in.a.keystore",
-                "\u30AD\u30FC\u30B9\u30C8\u30A2\u5185\u306E\u30A8\u30F3\u30C8\u30EA\u3092\u30EA\u30B9\u30C8\u3057\u307E\u3059"}, //-list
-        {"Prints.the.content.of.a.certificate",
-                "\u8A3C\u660E\u66F8\u306E\u5185\u5BB9\u3092\u51FA\u529B\u3057\u307E\u3059"}, //-printcert
-        {"Prints.the.content.of.a.certificate.request",
-                "\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8\u306E\u5185\u5BB9\u3092\u51FA\u529B\u3057\u307E\u3059"}, //-printcertreq
-        {"Prints.the.content.of.a.CRL.file",
-                "CRL\u30D5\u30A1\u30A4\u30EB\u306E\u5185\u5BB9\u3092\u51FA\u529B\u3057\u307E\u3059"}, //-printcrl
-        {"Generates.a.self.signed.certificate",
-                "\u81EA\u5DF1\u7F72\u540D\u578B\u8A3C\u660E\u66F8\u3092\u751F\u6210\u3057\u307E\u3059"}, //-selfcert
-        {"Changes.the.store.password.of.a.keystore",
-                "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30B9\u30C8\u30A2\u30FB\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5909\u66F4\u3057\u307E\u3059"}, //-storepasswd
-        // keytool: help: options
-        {"alias.name.of.the.entry.to.process",
-                "\u51E6\u7406\u3059\u308B\u30A8\u30F3\u30C8\u30EA\u306E\u5225\u540D"}, //-alias
-        {"destination.alias",
-                "\u51FA\u529B\u5148\u306E\u5225\u540D"}, //-destalias
-        {"destination.key.password",
-                "\u51FA\u529B\u5148\u30AD\u30FC\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-destkeypass
-        {"destination.keystore.name",
-                "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u540D"}, //-destkeystore
-        {"destination.keystore.password.protected",
-                "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u4FDD\u8B77\u5BFE\u8C61\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-destprotected
-        {"destination.keystore.provider.name",
-                "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D7\u30ED\u30D0\u30A4\u30C0\u540D"}, //-destprovidername
-        {"destination.keystore.password",
-                "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-deststorepass
-        {"destination.keystore.type",
-                "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30BF\u30A4\u30D7"}, //-deststoretype
-        {"distinguished.name",
-                "\u8B58\u5225\u540D"}, //-dname
-        {"X.509.extension",
-                "X.509\u62E1\u5F35"}, //-ext
-        {"output.file.name",
-                "\u51FA\u529B\u30D5\u30A1\u30A4\u30EB\u540D"}, //-file and -outfile
-        {"input.file.name",
-                "\u5165\u529B\u30D5\u30A1\u30A4\u30EB\u540D"}, //-file and -infile
-        {"key.algorithm.name",
-                "\u9375\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u540D"}, //-keyalg
-        {"key.password",
-                "\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-keypass
-        {"key.bit.size",
-                "\u9375\u306E\u30D3\u30C3\u30C8\u30FB\u30B5\u30A4\u30BA"}, //-keysize
-        {"keystore.name",
-                "\u30AD\u30FC\u30B9\u30C8\u30A2\u540D"}, //-keystore
-        {"new.password",
-                "\u65B0\u898F\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-new
-        {"do.not.prompt",
-                "\u30D7\u30ED\u30F3\u30D7\u30C8\u3092\u8868\u793A\u3057\u306A\u3044"}, //-noprompt
-        {"password.through.protected.mechanism",
-                "\u4FDD\u8B77\u30E1\u30AB\u30CB\u30BA\u30E0\u306B\u3088\u308B\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-protected
-        {"provider.argument",
-                "\u30D7\u30ED\u30D0\u30A4\u30C0\u5F15\u6570"}, //-providerarg
-        {"provider.class.name",
-                "\u30D7\u30ED\u30D0\u30A4\u30C0\u30FB\u30AF\u30E9\u30B9\u540D"}, //-providerclass
-        {"provider.name",
-                "\u30D7\u30ED\u30D0\u30A4\u30C0\u540D"}, //-providername
-        {"provider.classpath",
-                "\u30D7\u30ED\u30D0\u30A4\u30C0\u30FB\u30AF\u30E9\u30B9\u30D1\u30B9"}, //-providerpath
-        {"output.in.RFC.style",
-                "RFC\u30B9\u30BF\u30A4\u30EB\u306E\u51FA\u529B"}, //-rfc
-        {"signature.algorithm.name",
-                "\u7F72\u540D\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u540D"}, //-sigalg
-        {"source.alias",
-                "\u30BD\u30FC\u30B9\u5225\u540D"}, //-srcalias
-        {"source.key.password",
-                "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-srckeypass
-        {"source.keystore.name",
-                "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u540D"}, //-srckeystore
-        {"source.keystore.password.protected",
-                "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u4FDD\u8B77\u5BFE\u8C61\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-srcprotected
-        {"source.keystore.provider.name",
-                "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D7\u30ED\u30D0\u30A4\u30C0\u540D"}, //-srcprovidername
-        {"source.keystore.password",
-                "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-srcstorepass
-        {"source.keystore.type",
-                "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30BF\u30A4\u30D7"}, //-srcstoretype
-        {"SSL.server.host.and.port",
-                "SSL\u30B5\u30FC\u30D0\u30FC\u306E\u30DB\u30B9\u30C8\u3068\u30DD\u30FC\u30C8"}, //-sslserver
-        {"signed.jar.file",
-                "\u7F72\u540D\u4ED8\u304DJAR\u30D5\u30A1\u30A4\u30EB"}, //=jarfile
-        {"certificate.validity.start.date.time",
-                "\u8A3C\u660E\u66F8\u306E\u6709\u52B9\u958B\u59CB\u65E5\u6642"}, //-startdate
-        {"keystore.password",
-                "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"}, //-storepass
-        {"keystore.type",
-                "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30BF\u30A4\u30D7"}, //-storetype
-        {"trust.certificates.from.cacerts",
-                "cacerts\u304B\u3089\u306E\u8A3C\u660E\u66F8\u3092\u4FE1\u983C\u3059\u308B"}, //-trustcacerts
-        {"verbose.output",
-                "\u8A73\u7D30\u51FA\u529B"}, //-v
-        {"validity.number.of.days",
-                "\u59A5\u5F53\u6027\u65E5\u6570"}, //-validity
-        {"Serial.ID.of.cert.to.revoke",
-                 "\u5931\u52B9\u3059\u308B\u8A3C\u660E\u66F8\u306E\u30B7\u30EA\u30A2\u30EBID"}, //-id
-        // keytool: Running part
-        {"keytool.error.", "keytool\u30A8\u30E9\u30FC: "},
-        {"Illegal.option.", "\u4E0D\u6B63\u306A\u30AA\u30D7\u30B7\u30E7\u30F3:  "},
-        {"Illegal.value.", "\u4E0D\u6B63\u306A\u5024: "},
-        {"Unknown.password.type.", "\u4E0D\u660E\u306A\u30D1\u30B9\u30EF\u30FC\u30C9\u30FB\u30BF\u30A4\u30D7: "},
-        {"Cannot.find.environment.variable.",
-                "\u74B0\u5883\u5909\u6570\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: "},
-        {"Cannot.find.file.", "\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: "},
-        {"Command.option.flag.needs.an.argument.", "\u30B3\u30DE\u30F3\u30C9\u30FB\u30AA\u30D7\u30B7\u30E7\u30F3{0}\u306B\u306F\u5F15\u6570\u304C\u5FC5\u8981\u3067\u3059\u3002"},
-        {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.",
-                "\u8B66\u544A: PKCS12\u30AD\u30FC\u30B9\u30C8\u30A2\u3067\u306F\u3001\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3068\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u7570\u306A\u308B\u72B6\u6CC1\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093\u3002\u30E6\u30FC\u30B6\u30FC\u304C\u6307\u5B9A\u3057\u305F{0}\u306E\u5024\u306F\u7121\u8996\u3057\u307E\u3059\u3002"},
-        {".keystore.must.be.NONE.if.storetype.is.{0}",
-                "-storetype\u304C{0}\u306E\u5834\u5408\u3001-keystore\u306FNONE\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
-        {"Too.many.retries.program.terminated",
-                 "\u518D\u8A66\u884C\u304C\u591A\u3059\u304E\u307E\u3059\u3002\u30D7\u30ED\u30B0\u30E9\u30E0\u304C\u7D42\u4E86\u3057\u307E\u3057\u305F"},
-        {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}",
-                "-storetype\u304C{0}\u306E\u5834\u5408\u3001-storepasswd\u30B3\u30DE\u30F3\u30C9\u304A\u3088\u3073-keypasswd\u30B3\u30DE\u30F3\u30C9\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093"},
-        {".keypasswd.commands.not.supported.if.storetype.is.PKCS12",
-                "-storetype\u304CPKCS12\u306E\u5834\u5408\u3001-keypasswd\u30B3\u30DE\u30F3\u30C9\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093"},
-        {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}",
-                "-storetype\u304C{0}\u306E\u5834\u5408\u3001-keypass\u3068-new\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"},
-        {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified",
-                "-protected\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u3001-storepass\u3001-keypass\u304A\u3088\u3073-new\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"},
-        {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "-srcprotected\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u3001-srcstorepass\u304A\u3088\u3073-srckeypass\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"},
-        {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified",
-                "\u30AD\u30FC\u30B9\u30C8\u30A2\u304C\u30D1\u30B9\u30EF\u30FC\u30C9\u3067\u4FDD\u8B77\u3055\u308C\u3066\u3044\u306A\u3044\u5834\u5408\u3001-storepass\u3001-keypass\u304A\u3088\u3073-new\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"},
-        {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u304C\u30D1\u30B9\u30EF\u30FC\u30C9\u3067\u4FDD\u8B77\u3055\u308C\u3066\u3044\u306A\u3044\u5834\u5408\u3001-srcstorepass\u304A\u3088\u3073-srckeypass\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"},
-        {"Illegal.startdate.value", "startdate\u5024\u304C\u7121\u52B9\u3067\u3059"},
-        {"Validity.must.be.greater.than.zero",
-                "\u59A5\u5F53\u6027\u306F\u30BC\u30ED\u3088\u308A\u5927\u304D\u3044\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
-        {"provName.not.a.provider", "{0}\u306F\u30D7\u30ED\u30D0\u30A4\u30C0\u3067\u306F\u3042\u308A\u307E\u305B\u3093"},
-        {"Usage.error.no.command.provided", "\u4F7F\u7528\u30A8\u30E9\u30FC: \u30B3\u30DE\u30F3\u30C9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093"},
-        {"Source.keystore.file.exists.but.is.empty.", "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB\u306F\u3001\u5B58\u5728\u3057\u307E\u3059\u304C\u7A7A\u3067\u3059: "},
-        {"Please.specify.srckeystore", "-srckeystore\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"},
-        {"Must.not.specify.both.v.and.rfc.with.list.command",
-                "'list'\u30B3\u30DE\u30F3\u30C9\u306B-v\u3068-rfc\u306E\u4E21\u65B9\u3092\u6307\u5B9A\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093"},
-        {"Key.password.must.be.at.least.6.characters",
-                "\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306F6\u6587\u5B57\u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
-        {"New.password.must.be.at.least.6.characters",
-                "\u65B0\u898F\u30D1\u30B9\u30EF\u30FC\u30C9\u306F6\u6587\u5B57\u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
-        {"Keystore.file.exists.but.is.empty.",
-                "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB\u306F\u5B58\u5728\u3057\u307E\u3059\u304C\u3001\u7A7A\u3067\u3059: "},
-        {"Keystore.file.does.not.exist.",
-                "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D5\u30A1\u30A4\u30EB\u306F\u5B58\u5728\u3057\u307E\u305B\u3093: "},
-        {"Must.specify.destination.alias", "\u51FA\u529B\u5148\u306E\u5225\u540D\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
-        {"Must.specify.alias", "\u5225\u540D\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
-        {"Keystore.password.must.be.at.least.6.characters",
-                "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306F6\u6587\u5B57\u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
-        {"Enter.keystore.password.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044:  "},
-        {"Enter.source.keystore.password.", "\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044:  "},
-        {"Enter.destination.keystore.password.", "\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044:  "},
-        {"Keystore.password.is.too.short.must.be.at.least.6.characters",
-         "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u77ED\u3059\u304E\u307E\u3059 - 6\u6587\u5B57\u4EE5\u4E0A\u306B\u3057\u3066\u304F\u3060\u3055\u3044"},
-        {"Unknown.Entry.Type", "\u4E0D\u660E\u306A\u30A8\u30F3\u30C8\u30EA\u30FB\u30BF\u30A4\u30D7"},
-        {"Too.many.failures.Alias.not.changed", "\u969C\u5BB3\u304C\u591A\u3059\u304E\u307E\u3059\u3002\u5225\u540D\u306F\u5909\u66F4\u3055\u308C\u307E\u305B\u3093"},
-        {"Entry.for.alias.alias.successfully.imported.",
-                 "\u5225\u540D{0}\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u306B\u6210\u529F\u3057\u307E\u3057\u305F\u3002"},
-        {"Entry.for.alias.alias.not.imported.", "\u5225\u540D{0}\u306E\u30A8\u30F3\u30C8\u30EA\u306F\u30A4\u30F3\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002"},
-        {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.",
-                 "\u5225\u540D{0}\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u4E2D\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F: {1}\u3002\n\u5225\u540D{0}\u306E\u30A8\u30F3\u30C8\u30EA\u306F\u30A4\u30F3\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002"},
-        {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled",
-                 "\u30A4\u30F3\u30DD\u30FC\u30C8\u30FB\u30B3\u30DE\u30F3\u30C9\u304C\u5B8C\u4E86\u3057\u307E\u3057\u305F: {0}\u4EF6\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u304C\u6210\u529F\u3057\u307E\u3057\u305F\u3002{1}\u4EF6\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u304C\u5931\u6557\u3057\u305F\u304B\u53D6\u308A\u6D88\u3055\u308C\u307E\u3057\u305F"},
-        {"Warning.Overwriting.existing.alias.alias.in.destination.keystore",
-                 "\u8B66\u544A: \u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u5185\u306E\u65E2\u5B58\u306E\u5225\u540D{0}\u3092\u4E0A\u66F8\u304D\u3057\u3066\u3044\u307E\u3059"},
-        {"Existing.entry.alias.alias.exists.overwrite.no.",
-                 "\u65E2\u5B58\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u5225\u540D{0}\u304C\u5B58\u5728\u3057\u3066\u3044\u307E\u3059\u3002\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\u3002[\u3044\u3044\u3048]:  "},
-        {"Too.many.failures.try.later", "\u969C\u5BB3\u304C\u591A\u3059\u304E\u307E\u3059 - \u5F8C\u3067\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044"},
-        {"Certification.request.stored.in.file.filename.",
-                "\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u30D5\u30A1\u30A4\u30EB<{0}>\u306B\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F"},
-        {"Submit.this.to.your.CA", "\u3053\u308C\u3092CA\u306B\u63D0\u51FA\u3057\u3066\u304F\u3060\u3055\u3044"},
-        {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
-            "\u5225\u540D\u3092\u6307\u5B9A\u3057\u306A\u3044\u5834\u5408\u3001\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u5225\u540D\u3001\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304A\u3088\u3073\u51FA\u529B\u5148\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"},
-        {"Certificate.stored.in.file.filename.",
-                "\u8A3C\u660E\u66F8\u304C\u30D5\u30A1\u30A4\u30EB<{0}>\u306B\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F"},
-        {"Certificate.reply.was.installed.in.keystore",
-                "\u8A3C\u660E\u66F8\u5FDC\u7B54\u304C\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u307E\u3057\u305F"},
-        {"Certificate.reply.was.not.installed.in.keystore",
-                "\u8A3C\u660E\u66F8\u5FDC\u7B54\u304C\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F"},
-        {"Certificate.was.added.to.keystore",
-                "\u8A3C\u660E\u66F8\u304C\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u8FFD\u52A0\u3055\u308C\u307E\u3057\u305F"},
-        {"Certificate.was.not.added.to.keystore",
-                "\u8A3C\u660E\u66F8\u304C\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u8FFD\u52A0\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F"},
-        {".Storing.ksfname.", "[{0}\u3092\u683C\u7D0D\u4E2D]"},
-        {"alias.has.no.public.key.certificate.",
-                "{0}\u306B\u306F\u516C\u958B\u9375(\u8A3C\u660E\u66F8)\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"Cannot.derive.signature.algorithm",
-                "\u7F72\u540D\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093"},
-        {"Alias.alias.does.not.exist",
-                "\u5225\u540D<{0}>\u306F\u5B58\u5728\u3057\u307E\u305B\u3093"},
-        {"Alias.alias.has.no.certificate",
-                "\u5225\u540D<{0}>\u306B\u306F\u8A3C\u660E\u66F8\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"Key.pair.not.generated.alias.alias.already.exists",
-                "\u9375\u30DA\u30A2\u306F\u751F\u6210\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u5225\u540D<{0}>\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"},
-        {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for",
-                "{3}\u65E5\u9593\u6709\u52B9\u306A{0}\u30D3\u30C3\u30C8\u306E{1}\u306E\u9375\u30DA\u30A2\u3068\u81EA\u5DF1\u7F72\u540D\u578B\u8A3C\u660E\u66F8({2})\u3092\u751F\u6210\u3057\u3066\u3044\u307E\u3059\n\t\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u540D: {4}"},
-        {"Enter.key.password.for.alias.", "<{0}>\u306E\u9375\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044"},
-        {".RETURN.if.same.as.keystore.password.",
-                "\t(\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3068\u540C\u3058\u5834\u5408\u306FRETURN\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044):  "},
-        {"Key.password.is.too.short.must.be.at.least.6.characters",
-                "\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u77ED\u3059\u304E\u307E\u3059 - 6\u6587\u5B57\u4EE5\u4E0A\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"},
-        {"Too.many.failures.key.not.added.to.keystore",
-                "\u969C\u5BB3\u304C\u591A\u3059\u304E\u307E\u3059 - \u9375\u306F\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u8FFD\u52A0\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F"},
-        {"Destination.alias.dest.already.exists",
-                "\u51FA\u529B\u5148\u306E\u5225\u540D<{0}>\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"},
-        {"Password.is.too.short.must.be.at.least.6.characters",
-                "\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u77ED\u3059\u304E\u307E\u3059 - 6\u6587\u5B57\u4EE5\u4E0A\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"},
-        {"Too.many.failures.Key.entry.not.cloned",
-                "\u969C\u5BB3\u304C\u591A\u3059\u304E\u307E\u3059\u3002\u9375\u30A8\u30F3\u30C8\u30EA\u306E\u30AF\u30ED\u30FC\u30F3\u306F\u4F5C\u6210\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F"},
-        {"key.password.for.alias.", "<{0}>\u306E\u9375\u306E\u30D1\u30B9\u30EF\u30FC\u30C9"},
-        {"Keystore.entry.for.id.getName.already.exists",
-                "<{0}>\u306E\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30A8\u30F3\u30C8\u30EA\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"},
-        {"Creating.keystore.entry.for.id.getName.",
-                "<{0}>\u306E\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30A8\u30F3\u30C8\u30EA\u3092\u4F5C\u6210\u4E2D..."},
-        {"No.entries.from.identity.database.added",
-                "\u30A2\u30A4\u30C7\u30F3\u30C6\u30A3\u30C6\u30A3\u30FB\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304B\u3089\u8FFD\u52A0\u3055\u308C\u305F\u30A8\u30F3\u30C8\u30EA\u306F\u3042\u308A\u307E\u305B\u3093"},
-        {"Alias.name.alias", "\u5225\u540D: {0}"},
-        {"Creation.date.keyStore.getCreationDate.alias.",
-                "\u4F5C\u6210\u65E5: {0,date}"},
-        {"alias.keyStore.getCreationDate.alias.",
-                "{0},{1,date}, "},
-        {"alias.", "{0}, "},
-        {"Entry.type.type.", "\u30A8\u30F3\u30C8\u30EA\u30FB\u30BF\u30A4\u30D7: {0}"},
-        {"Certificate.chain.length.", "\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u306E\u9577\u3055: "},
-        {"Certificate.i.1.", "\u8A3C\u660E\u66F8[{0,number,integer}]:"},
-        {"Certificate.fingerprint.SHA1.", "\u8A3C\u660E\u66F8\u306E\u30D5\u30A3\u30F3\u30AC\u30D7\u30EA\u30F3\u30C8(SHA1): "},
-        {"Keystore.type.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30BF\u30A4\u30D7: "},
-        {"Keystore.provider.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D7\u30ED\u30D0\u30A4\u30C0: "},
-        {"Your.keystore.contains.keyStore.size.entry",
-                "\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u306F{0,number,integer}\u30A8\u30F3\u30C8\u30EA\u304C\u542B\u307E\u308C\u307E\u3059"},
-        {"Your.keystore.contains.keyStore.size.entries",
-                "\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u306F{0,number,integer}\u30A8\u30F3\u30C8\u30EA\u304C\u542B\u307E\u308C\u307E\u3059"},
-        {"Failed.to.parse.input", "\u5165\u529B\u306E\u69CB\u6587\u89E3\u6790\u306B\u5931\u6557\u3057\u307E\u3057\u305F"},
-        {"Empty.input", "\u5165\u529B\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"Not.X.509.certificate", "X.509\u8A3C\u660E\u66F8\u3067\u306F\u3042\u308A\u307E\u305B\u3093"},
-        {"alias.has.no.public.key", "{0}\u306B\u306F\u516C\u958B\u9375\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"alias.has.no.X.509.certificate", "{0}\u306B\u306FX.509\u8A3C\u660E\u66F8\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"New.certificate.self.signed.", "\u65B0\u3057\u3044\u8A3C\u660E\u66F8(\u81EA\u5DF1\u7F72\u540D\u578B):"},
-        {"Reply.has.no.certificates", "\u5FDC\u7B54\u306B\u306F\u8A3C\u660E\u66F8\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"Certificate.not.imported.alias.alias.already.exists",
-                "\u8A3C\u660E\u66F8\u306F\u30A4\u30F3\u30DD\u30FC\u30C8\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u5225\u540D<{0}>\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"},
-        {"Input.not.an.X.509.certificate", "\u5165\u529B\u306FX.509\u8A3C\u660E\u66F8\u3067\u306F\u3042\u308A\u307E\u305B\u3093"},
-        {"Certificate.already.exists.in.keystore.under.alias.trustalias.",
-                "\u8A3C\u660E\u66F8\u306F\u3001\u5225\u540D<{0}>\u306E\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"},
-        {"Do.you.still.want.to.add.it.no.",
-                "\u8FFD\u52A0\u3057\u307E\u3059\u304B\u3002[\u3044\u3044\u3048]:  "},
-        {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.",
-                "\u8A3C\u660E\u66F8\u306F\u3001\u5225\u540D<{0}>\u306E\u30B7\u30B9\u30C6\u30E0\u898F\u6A21\u306ECA\u30AD\u30FC\u30B9\u30C8\u30A2\u5185\u306B\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"},
-        {"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
-                "\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u8FFD\u52A0\u3057\u307E\u3059\u304B\u3002 [\u3044\u3044\u3048]:  "},
-        {"Trust.this.certificate.no.", "\u3053\u306E\u8A3C\u660E\u66F8\u3092\u4FE1\u983C\u3057\u307E\u3059\u304B\u3002 [\u3044\u3044\u3048]:  "},
-        {"YES", "\u306F\u3044"},
-        {"New.prompt.", "\u65B0\u898F{0}: "},
-        {"Passwords.must.differ", "\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u7570\u306A\u3063\u3066\u3044\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
-        {"Re.enter.new.prompt.", "\u65B0\u898F{0}\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "},
-        {"Re.enter.new.password.", "\u65B0\u898F\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: "},
-        {"They.don.t.match.Try.again", "\u4E00\u81F4\u3057\u307E\u305B\u3093\u3002\u3082\u3046\u4E00\u5EA6\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044"},
-        {"Enter.prompt.alias.name.", "{0}\u306E\u5225\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044:  "},
-        {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.",
-                 "\u65B0\u3057\u3044\u5225\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\t(\u3053\u306E\u30A8\u30F3\u30C8\u30EA\u306E\u30A4\u30F3\u30DD\u30FC\u30C8\u3092\u53D6\u308A\u6D88\u3059\u5834\u5408\u306FRETURN\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044):  "},
-        {"Enter.alias.name.", "\u5225\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044:  "},
-        {".RETURN.if.same.as.for.otherAlias.",
-                "\t(<{0}>\u3068\u540C\u3058\u5834\u5408\u306FRETURN\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044)"},
-        {".PATTERN.printX509Cert",
-                "\u6240\u6709\u8005: {0}\n\u767A\u884C\u8005: {1}\n\u30B7\u30EA\u30A2\u30EB\u756A\u53F7: {2}\n\u6709\u52B9\u671F\u9593\u306E\u958B\u59CB\u65E5: {3}\u7D42\u4E86\u65E5: {4}\n\u8A3C\u660E\u66F8\u306E\u30D5\u30A3\u30F3\u30AC\u30D7\u30EA\u30F3\u30C8:\n\t MD5:  {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t \u7F72\u540D\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u540D: {8}\n\t \u30D0\u30FC\u30B8\u30E7\u30F3: {9}"},
-        {"What.is.your.first.and.last.name.",
-                "\u59D3\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
-        {"What.is.the.name.of.your.organizational.unit.",
-                "\u7D44\u7E54\u5358\u4F4D\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
-        {"What.is.the.name.of.your.organization.",
-                "\u7D44\u7E54\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
-        {"What.is.the.name.of.your.City.or.Locality.",
-                "\u90FD\u5E02\u540D\u307E\u305F\u306F\u5730\u57DF\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
-        {"What.is.the.name.of.your.State.or.Province.",
-                "\u90FD\u9053\u5E9C\u770C\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
-        {"What.is.the.two.letter.country.code.for.this.unit.",
-                "\u3053\u306E\u5358\u4F4D\u306B\u8A72\u5F53\u3059\u308B2\u6587\u5B57\u306E\u56FD\u30B3\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
-        {"Is.name.correct.", "{0}\u3067\u3088\u308D\u3057\u3044\u3067\u3059\u304B\u3002"},
-        {"no", "\u3044\u3044\u3048"},
-        {"yes", "\u306F\u3044"},
-        {"y", "y"},
-        {".defaultValue.", "  [{0}]:  "},
-        {"Alias.alias.has.no.key",
-                "\u5225\u540D<{0}>\u306B\u306F\u9375\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key",
-                 "\u5225\u540D<{0}>\u304C\u53C2\u7167\u3057\u3066\u3044\u308B\u30A8\u30F3\u30C8\u30EA\u30FB\u30BF\u30A4\u30D7\u306F\u79D8\u5BC6\u9375\u30A8\u30F3\u30C8\u30EA\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002-keyclone\u30B3\u30DE\u30F3\u30C9\u306F\u79D8\u5BC6\u9375\u30A8\u30F3\u30C8\u30EA\u306E\u30AF\u30ED\u30FC\u30F3\u4F5C\u6210\u306E\u307F\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059"},
-
-        {".WARNING.WARNING.WARNING.",
-            "*****************  WARNING WARNING WARNING  *****************"},
-        {"Signer.d.", "\u7F72\u540D\u8005\u756A\u53F7%d:"},
-        {"Timestamp.", "\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7:"},
-        {"Signature.", "\u7F72\u540D:"},
-        {"CRLs.", "CRL:"},
-        {"Certificate.owner.", "\u8A3C\u660E\u66F8\u306E\u6240\u6709\u8005: "},
-        {"Not.a.signed.jar.file", "\u7F72\u540D\u4ED8\u304DJAR\u30D5\u30A1\u30A4\u30EB\u3067\u306F\u3042\u308A\u307E\u305B\u3093"},
-        {"No.certificate.from.the.SSL.server",
-                "SSL\u30B5\u30FC\u30D0\u30FC\u304B\u3089\u306E\u8A3C\u660E\u66F8\u304C\u3042\u308A\u307E\u305B\u3093"},
-
-        {".The.integrity.of.the.information.stored.in.your.keystore.",
-            "*\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u4FDD\u5B58\u3055\u308C\u305F\u60C5\u5831\u306E\u6574\u5408\u6027\u306F*\n*\u691C\u8A3C\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u6574\u5408\u6027\u3092\u691C\u8A3C\u3059\u308B\u306B\u306F*\n*\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002*"},
-        {".The.integrity.of.the.information.stored.in.the.srckeystore.",
-            "*\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306B\u4FDD\u5B58\u3055\u308C\u305F\u60C5\u5831\u306E\u6574\u5408\u6027\u306F*\n*\u691C\u8A3C\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u6574\u5408\u6027\u3092\u691C\u8A3C\u3059\u308B\u306B\u306F*\n*\u30BD\u30FC\u30B9\u30FB\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002*"},
-
-        {"Certificate.reply.does.not.contain.public.key.for.alias.",
-                "\u8A3C\u660E\u66F8\u5FDC\u7B54\u306B\u306F\u3001<{0}>\u306E\u516C\u958B\u9375\u306F\u542B\u307E\u308C\u307E\u305B\u3093"},
-        {"Incomplete.certificate.chain.in.reply",
-                "\u5FDC\u7B54\u3057\u305F\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u306F\u4E0D\u5B8C\u5168\u3067\u3059"},
-        {"Certificate.chain.in.reply.does.not.verify.",
-                "\u5FDC\u7B54\u3057\u305F\u8A3C\u660E\u66F8\u30C1\u30A7\u30FC\u30F3\u306F\u691C\u8A3C\u3055\u308C\u3066\u3044\u307E\u305B\u3093: "},
-        {"Top.level.certificate.in.reply.",
-                "\u5FDC\u7B54\u3057\u305F\u30C8\u30C3\u30D7\u30EC\u30D9\u30EB\u306E\u8A3C\u660E\u66F8:\n"},
-        {".is.not.trusted.", "... \u306F\u4FE1\u983C\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 "},
-        {"Install.reply.anyway.no.", "\u5FDC\u7B54\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u307E\u3059\u304B\u3002[\u3044\u3044\u3048]:  "},
-        {"NO", "\u3044\u3044\u3048"},
-        {"Public.keys.in.reply.and.keystore.don.t.match",
-                "\u5FDC\u7B54\u3057\u305F\u516C\u958B\u9375\u3068\u30AD\u30FC\u30B9\u30C8\u30A2\u304C\u4E00\u81F4\u3057\u307E\u305B\u3093"},
-        {"Certificate.reply.and.certificate.in.keystore.are.identical",
-                "\u8A3C\u660E\u66F8\u5FDC\u7B54\u3068\u30AD\u30FC\u30B9\u30C8\u30A2\u5185\u306E\u8A3C\u660E\u66F8\u304C\u540C\u3058\u3067\u3059"},
-        {"Failed.to.establish.chain.from.reply",
-                "\u5FDC\u7B54\u304B\u3089\u9023\u9396\u3092\u78BA\u7ACB\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F"},
-        {"n", "n"},
-        {"Wrong.answer.try.again", "\u5FDC\u7B54\u304C\u9593\u9055\u3063\u3066\u3044\u307E\u3059\u3002\u3082\u3046\u4E00\u5EA6\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044"},
-        {"Secret.key.not.generated.alias.alias.already.exists",
-                "\u79D8\u5BC6\u9375\u306F\u751F\u6210\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u5225\u540D<{0}>\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059"},
-        {"Please.provide.keysize.for.secret.key.generation",
-                "\u79D8\u5BC6\u9375\u306E\u751F\u6210\u6642\u306B\u306F -keysize\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044"},
-
-        {"Extensions.", "\u62E1\u5F35: "},
-        {".Empty.value.", "(\u7A7A\u306E\u5024)"},
-        {"Extension.Request.", "\u62E1\u5F35\u30EA\u30AF\u30A8\u30B9\u30C8:"},
-        {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.",
-                "PKCS #10\u8A3C\u660E\u66F8\u30EA\u30AF\u30A8\u30B9\u30C8(\u30D0\u30FC\u30B8\u30E7\u30F31.0)\n\u30B5\u30D6\u30B8\u30A7\u30AF\u30C8: %s\n\u516C\u958B\u9375: %s \u30D5\u30A9\u30FC\u30DE\u30C3\u30C8 %s \u30AD\u30FC\n"},
-        {"Unknown.keyUsage.type.", "\u4E0D\u660E\u306AkeyUsage\u30BF\u30A4\u30D7: "},
-        {"Unknown.extendedkeyUsage.type.", "\u4E0D\u660E\u306AextendedkeyUsage\u30BF\u30A4\u30D7: "},
-        {"Unknown.AccessDescription.type.", "\u4E0D\u660E\u306AAccessDescription\u30BF\u30A4\u30D7: "},
-        {"Unrecognized.GeneralName.type.", "\u8A8D\u8B58\u3055\u308C\u306A\u3044GeneralName\u30BF\u30A4\u30D7: "},
-        {"This.extension.cannot.be.marked.as.critical.",
-                 "\u3053\u306E\u62E1\u5F35\u306F\u30AF\u30EA\u30C6\u30A3\u30AB\u30EB\u3068\u3057\u3066\u30DE\u30FC\u30AF\u4ED8\u3051\u3067\u304D\u307E\u305B\u3093\u3002 "},
-        {"Odd.number.of.hex.digits.found.", "\u5947\u6570\u306E16\u9032\u6570\u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F: "},
-        {"Unknown.extension.type.", "\u4E0D\u660E\u306A\u62E1\u5F35\u30BF\u30A4\u30D7: "},
-        {"command.{0}.is.ambiguous.", "\u30B3\u30DE\u30F3\u30C9{0}\u306F\u3042\u3044\u307E\u3044\u3067\u3059:"},
-
-        // policytool
-        {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.",
-                "\u8B66\u544A: \u5225\u540D{0}\u306E\u516C\u958B\u9375\u304C\u5B58\u5728\u3057\u307E\u305B\u3093\u3002\u30AD\u30FC\u30B9\u30C8\u30A2\u304C\u6B63\u3057\u304F\u69CB\u6210\u3055\u308C\u3066\u3044\u308B\u3053\u3068\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
-        {"Warning.Class.not.found.class", "\u8B66\u544A: \u30AF\u30E9\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: {0}"},
-        {"Warning.Invalid.argument.s.for.constructor.arg",
-                "\u8B66\u544A: \u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u306E\u5F15\u6570\u304C\u7121\u52B9\u3067\u3059: {0}"},
-        {"Illegal.Principal.Type.type", "\u4E0D\u6B63\u306A\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u30BF\u30A4\u30D7: {0}"},
-        {"Illegal.option.option", "\u4E0D\u6B63\u306A\u30AA\u30D7\u30B7\u30E7\u30F3: {0}"},
-        {"Usage.policytool.options.", "\u4F7F\u7528\u65B9\u6CD5: policytool [options]"},
-        {".file.file.policy.file.location",
-                "  [-file <file>]  \u30DD\u30EA\u30B7\u30FC\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u5834\u6240"},
-        {"New", "\u65B0\u898F"},
-        {"Open", "\u958B\u304F"},
-        {"Save", "\u4FDD\u5B58"},
-        {"Save.As", "\u5225\u540D\u4FDD\u5B58"},
-        {"View.Warning.Log", "\u8B66\u544A\u30ED\u30B0\u306E\u8868\u793A"},
-        {"Exit", "\u7D42\u4E86"},
-        {"Add.Policy.Entry", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u306E\u8FFD\u52A0"},
-        {"Edit.Policy.Entry", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u306E\u7DE8\u96C6"},
-        {"Remove.Policy.Entry", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u306E\u524A\u9664"},
-        {"Edit", "\u7DE8\u96C6"},
-        {"Retain", "\u4FDD\u6301"},
-
-        {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes",
-            "\u8B66\u544A: \u30D5\u30A1\u30A4\u30EB\u540D\u306B\u30A8\u30B9\u30B1\u30FC\u30D7\u3055\u308C\u305F\u30D0\u30C3\u30AF\u30B9\u30E9\u30C3\u30B7\u30E5\u6587\u5B57\u304C\u542B\u307E\u308C\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u30D0\u30C3\u30AF\u30B9\u30E9\u30C3\u30B7\u30E5\u6587\u5B57\u3092\u30A8\u30B9\u30B1\u30FC\u30D7\u3059\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093(\u30C4\u30FC\u30EB\u306F\u30DD\u30EA\u30B7\u30FC\u5185\u5BB9\u3092\u6C38\u7D9A\u30B9\u30C8\u30A2\u306B\u66F8\u304D\u8FBC\u3080\u3068\u304D\u306B\u3001\u5FC5\u8981\u306B\u5FDC\u3058\u3066\u6587\u5B57\u3092\u30A8\u30B9\u30B1\u30FC\u30D7\u3057\u307E\u3059)\u3002\n\n\u5165\u529B\u6E08\u306E\u540D\u524D\u3092\u4FDD\u6301\u3059\u308B\u306B\u306F\u300C\u4FDD\u6301\u300D\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3001\u540D\u524D\u3092\u7DE8\u96C6\u3059\u308B\u306B\u306F\u300C\u7DE8\u96C6\u300D\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
-
-        {"Add.Public.Key.Alias", "\u516C\u958B\u9375\u306E\u5225\u540D\u306E\u8FFD\u52A0"},
-        {"Remove.Public.Key.Alias", "\u516C\u958B\u9375\u306E\u5225\u540D\u3092\u524A\u9664"},
-        {"File", "\u30D5\u30A1\u30A4\u30EB"},
-        {"KeyStore", "\u30AD\u30FC\u30B9\u30C8\u30A2"},
-        {"Policy.File.", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30D5\u30A1\u30A4\u30EB:"},
-        {"Could.not.open.policy.file.policyFile.e.toString.",
-                "\u30DD\u30EA\u30B7\u30FC\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u3051\u307E\u305B\u3093\u3067\u3057\u305F: {0}: {1}"},
-        {"Policy.Tool", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30C4\u30FC\u30EB"},
-        {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.",
-                "\u30DD\u30EA\u30B7\u30FC\u69CB\u6210\u3092\u958B\u304F\u3068\u304D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u8A73\u7D30\u306F\u8B66\u544A\u30ED\u30B0\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002"},
-        {"Error", "\u30A8\u30E9\u30FC"},
-        {"OK", "OK"},
-        {"Status", "\u72B6\u614B"},
-        {"Warning", "\u8B66\u544A"},
-        {"Permission.",
-                "\u30A2\u30AF\u30BB\u30B9\u6A29:                                                       "},
-        {"Principal.Type.", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u30BF\u30A4\u30D7:"},
-        {"Principal.Name.", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u540D\u524D:"},
-        {"Target.Name.",
-                "\u30BF\u30FC\u30B2\u30C3\u30C8\u540D:                                                    "},
-        {"Actions.",
-                "\u30A2\u30AF\u30B7\u30E7\u30F3:                                                             "},
-        {"OK.to.overwrite.existing.file.filename.",
-                "\u65E2\u5B58\u306E\u30D5\u30A1\u30A4\u30EB{0}\u306B\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B\u3002"},
-        {"Cancel", "\u53D6\u6D88"},
-        {"CodeBase.", "CodeBase:"},
-        {"SignedBy.", "SignedBy:"},
-        {"Add.Principal", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u8FFD\u52A0"},
-        {"Edit.Principal", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u7DE8\u96C6"},
-        {"Remove.Principal", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u524A\u9664"},
-        {"Principals.", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB:"},
-        {".Add.Permission", "  \u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u8FFD\u52A0"},
-        {".Edit.Permission", "  \u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u7DE8\u96C6"},
-        {"Remove.Permission", "\u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u524A\u9664"},
-        {"Done", "\u5B8C\u4E86"},
-        {"KeyStore.URL.", "\u30AD\u30FC\u30B9\u30C8\u30A2URL:"},
-        {"KeyStore.Type.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u306E\u30BF\u30A4\u30D7:"},
-        {"KeyStore.Provider.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D7\u30ED\u30D0\u30A4\u30C0:"},
-        {"KeyStore.Password.URL.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D1\u30B9\u30EF\u30FC\u30C9URL:"},
-        {"Principals", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB"},
-        {".Edit.Principal.", "  \u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u7DE8\u96C6:"},
-        {".Add.New.Principal.", "  \u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u65B0\u898F\u8FFD\u52A0:"},
-        {"Permissions", "\u30A2\u30AF\u30BB\u30B9\u6A29"},
-        {".Edit.Permission.", "  \u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u7DE8\u96C6:"},
-        {".Add.New.Permission.", "  \u65B0\u898F\u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u8FFD\u52A0:"},
-        {"Signed.By.", "\u7F72\u540D\u8005:"},
-        {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name",
-            "\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u540D\u306E\u306A\u3044\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u30FB\u30AF\u30E9\u30B9\u3092\u4F7F\u7528\u3057\u3066\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u3092\u6307\u5B9A\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093"},
-        {"Cannot.Specify.Principal.without.a.Name",
-            "\u540D\u524D\u3092\u4F7F\u7528\u305B\u305A\u306B\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u3092\u6307\u5B9A\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093"},
-        {"Permission.and.Target.Name.must.have.a.value",
-                "\u30A2\u30AF\u30BB\u30B9\u6A29\u3068\u30BF\u30FC\u30B2\u30C3\u30C8\u540D\u306F\u3001\u5024\u3092\u4FDD\u6301\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
-        {"Remove.this.Policy.Entry.", "\u3053\u306E\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u3092\u524A\u9664\u3057\u307E\u3059\u304B\u3002"},
-        {"Overwrite.File", "\u30D5\u30A1\u30A4\u30EB\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059"},
-        {"Policy.successfully.written.to.filename",
-                "\u30DD\u30EA\u30B7\u30FC\u306E{0}\u3078\u306E\u66F8\u8FBC\u307F\u306B\u6210\u529F\u3057\u307E\u3057\u305F"},
-        {"null.filename", "\u30D5\u30A1\u30A4\u30EB\u540D\u304Cnull\u3067\u3059"},
-        {"Save.changes.", "\u5909\u66F4\u3092\u4FDD\u5B58\u3057\u307E\u3059\u304B\u3002"},
-        {"Yes", "\u306F\u3044"},
-        {"No", "\u3044\u3044\u3048"},
-        {"Policy.Entry", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA"},
-        {"Save.Changes", "\u5909\u66F4\u3092\u4FDD\u5B58\u3057\u307E\u3059"},
-        {"No.Policy.Entry.selected", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093"},
-        {"Unable.to.open.KeyStore.ex.toString.",
-                "\u30AD\u30FC\u30B9\u30C8\u30A2{0}\u3092\u958B\u3051\u307E\u305B\u3093"},
-        {"No.principal.selected", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093"},
-        {"No.permission.selected", "\u30A2\u30AF\u30BB\u30B9\u6A29\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093"},
-        {"name", "\u540D\u524D"},
-        {"configuration.type", "\u69CB\u6210\u30BF\u30A4\u30D7"},
-        {"environment.variable.name", "\u74B0\u5883\u5909\u6570\u540D"},
-        {"library.name", "\u30E9\u30A4\u30D6\u30E9\u30EA\u540D"},
-        {"package.name", "\u30D1\u30C3\u30B1\u30FC\u30B8\u540D"},
-        {"policy.type", "\u30DD\u30EA\u30B7\u30FC\u30FB\u30BF\u30A4\u30D7"},
-        {"property.name", "\u30D7\u30ED\u30D1\u30C6\u30A3\u540D"},
-        {"Principal.List", "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u306E\u30EA\u30B9\u30C8"},
-        {"Permission.List", "\u30A2\u30AF\u30BB\u30B9\u6A29\u306E\u30EA\u30B9\u30C8"},
-        {"Code.Base", "\u30B3\u30FC\u30C9\u30FB\u30D9\u30FC\u30B9"},
-        {"KeyStore.U.R.L.", "\u30AD\u30FC\u30B9\u30C8\u30A2U R L:"},
-        {"KeyStore.Password.U.R.L.", "\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D1\u30B9\u30EF\u30FC\u30C9U R L:"},
-
-
-        // javax.security.auth.PrivateCredentialPermission
-        {"invalid.null.input.s.", "null\u306E\u5165\u529B\u306F\u7121\u52B9\u3067\u3059"},
-        {"actions.can.only.be.read.", "\u30A2\u30AF\u30B7\u30E7\u30F3\u306F'\u8AAD\u8FBC\u307F'\u306E\u307F\u53EF\u80FD\u3067\u3059"},
-        {"permission.name.name.syntax.invalid.",
-                "\u30A2\u30AF\u30BB\u30B9\u6A29\u540D[{0}]\u306E\u69CB\u6587\u304C\u7121\u52B9\u3067\u3059: "},
-        {"Credential.Class.not.followed.by.a.Principal.Class.and.Name",
-                "Credential\u30AF\u30E9\u30B9\u306E\u6B21\u306BPrincipal\u30AF\u30E9\u30B9\u304A\u3088\u3073\u540D\u524D\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"Principal.Class.not.followed.by.a.Principal.Name",
-                "Principal\u30AF\u30E9\u30B9\u306E\u6B21\u306B\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u540D\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"Principal.Name.must.be.surrounded.by.quotes",
-                "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u540D\u306F\u5F15\u7528\u7B26\u3067\u56F2\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059"},
-        {"Principal.Name.missing.end.quote",
-                "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u540D\u306E\u6700\u5F8C\u306B\u5F15\u7528\u7B26\u304C\u3042\u308A\u307E\u305B\u3093"},
-        {"PrivateCredentialPermission.Principal.Class.can.not.be.a.wildcard.value.if.Principal.Name.is.not.a.wildcard.value",
-                "\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u540D\u304C\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9(*)\u5024\u3067\u306A\u3044\u5834\u5408\u3001PrivateCredentialPermission\u306EPrincipal\u30AF\u30E9\u30B9\u3092\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9(*)\u5024\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093"},
-        {"CredOwner.Principal.Class.class.Principal.Name.name",
-                "CredOwner:\n\tPrincipal\u30AF\u30E9\u30B9={0}\n\t\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u540D={1}"},
-
-        // javax.security.auth.x500
-        {"provided.null.name", "null\u306E\u540D\u524D\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F"},
-        {"provided.null.keyword.map", "null\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u30FB\u30DE\u30C3\u30D7\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F"},
-        {"provided.null.OID.map", "null\u306EOID\u30DE\u30C3\u30D7\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F"},
-
-        // javax.security.auth.Subject
-        {"invalid.null.AccessControlContext.provided",
-                "\u7121\u52B9\u306Anull AccessControlContext\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F"},
-        {"invalid.null.action.provided", "\u7121\u52B9\u306Anull\u30A2\u30AF\u30B7\u30E7\u30F3\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F"},
-        {"invalid.null.Class.provided", "\u7121\u52B9\u306Anull\u30AF\u30E9\u30B9\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F"},
-        {"Subject.", "\u30B5\u30D6\u30B8\u30A7\u30AF\u30C8:\n"},
-        {".Principal.", "\t\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB: "},
-        {".Public.Credential.", "\t\u516C\u958B\u8CC7\u683C: "},
-        {".Private.Credentials.inaccessible.",
-                "\t\u975E\u516C\u958B\u8CC7\u683C\u306B\u306F\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u305B\u3093\n"},
-        {".Private.Credential.", "\t\u975E\u516C\u958B\u8CC7\u683C: "},
-        {".Private.Credential.inaccessible.",
-                "\t\u975E\u516C\u958B\u8CC7\u683C\u306B\u306F\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u305B\u3093\n"},
-        {"Subject.is.read.only", "\u30B5\u30D6\u30B8\u30A7\u30AF\u30C8\u306F\u8AAD\u53D6\u308A\u5C02\u7528\u3067\u3059"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.java.security.Principal.to.a.Subject.s.Principal.Set",
-                "java.security.Principal\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3067\u306F\u306A\u3044\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u3001\u30B5\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u30FB\u30BB\u30C3\u30C8\u306B\u8FFD\u52A0\u3057\u3088\u3046\u3068\u3057\u307E\u3057\u305F"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.class",
-                "{0}\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3067\u306F\u306A\u3044\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u8FFD\u52A0\u3057\u3088\u3046\u3068\u3057\u307E\u3057\u305F"},
-
-        // javax.security.auth.login.AppConfigurationEntry
-        {"LoginModuleControlFlag.", "LoginModuleControlFlag: "},
-
-        // javax.security.auth.login.LoginContext
-        {"Invalid.null.input.name", "\u7121\u52B9\u306Anull\u5165\u529B: \u540D\u524D"},
-        {"No.LoginModules.configured.for.name",
-         "{0}\u7528\u306B\u69CB\u6210\u3055\u308C\u305FLoginModules\u306F\u3042\u308A\u307E\u305B\u3093"},
-        {"invalid.null.Subject.provided", "\u7121\u52B9\u306Anull\u30B5\u30D6\u30B8\u30A7\u30AF\u30C8\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F"},
-        {"invalid.null.CallbackHandler.provided",
-                "\u7121\u52B9\u306Anull CallbackHandler\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F"},
-        {"null.subject.logout.called.before.login",
-                "null\u30B5\u30D6\u30B8\u30A7\u30AF\u30C8 - \u30ED\u30B0\u30A4\u30F3\u3059\u308B\u524D\u306B\u30ED\u30B0\u30A2\u30A6\u30C8\u304C\u547C\u3073\u51FA\u3055\u308C\u307E\u3057\u305F"},
-        {"unable.to.instantiate.LoginModule.module.because.it.does.not.provide.a.no.argument.constructor",
-                "LoginModule {0}\u306F\u5F15\u6570\u3092\u53D6\u3089\u306A\u3044\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u3092\u6307\u5B9A\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3092\u751F\u6210\u3067\u304D\u307E\u305B\u3093"},
-        {"unable.to.instantiate.LoginModule",
-                "LoginModule\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3092\u751F\u6210\u3067\u304D\u307E\u305B\u3093"},
-        {"unable.to.instantiate.LoginModule.",
-                "LoginModule\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3092\u751F\u6210\u3067\u304D\u307E\u305B\u3093: "},
-        {"unable.to.find.LoginModule.class.",
-                "LoginModule\u30AF\u30E9\u30B9\u3092\u691C\u51FA\u3067\u304D\u307E\u305B\u3093: "},
-        {"unable.to.access.LoginModule.",
-                "LoginModule\u306B\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u305B\u3093: "},
-        {"Login.Failure.all.modules.ignored",
-                "\u30ED\u30B0\u30A4\u30F3\u5931\u6557: \u3059\u3079\u3066\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u306F\u7121\u8996\u3055\u308C\u307E\u3059"},
-
-        // sun.security.provider.PolicyFile
-
-        {"java.security.policy.error.parsing.policy.message",
-                "java.security.policy: {0}\u306E\u69CB\u6587\u89E3\u6790\u30A8\u30E9\u30FC:\n\t{1}"},
-        {"java.security.policy.error.adding.Permission.perm.message",
-                "java.security.policy: \u30A2\u30AF\u30BB\u30B9\u6A29{0}\u306E\u8FFD\u52A0\u30A8\u30E9\u30FC:\n\t{1}"},
-        {"java.security.policy.error.adding.Entry.message",
-                "java.security.policy: \u30A8\u30F3\u30C8\u30EA\u306E\u8FFD\u52A0\u30A8\u30E9\u30FC:\n\t{0}"},
-        {"alias.name.not.provided.pe.name.", "\u5225\u540D\u306E\u6307\u5B9A\u304C\u3042\u308A\u307E\u305B\u3093({0})"},
-        {"unable.to.perform.substitution.on.alias.suffix",
-                "\u5225\u540D{0}\u306B\u5BFE\u3057\u3066\u7F6E\u63DB\u64CD\u4F5C\u304C\u3067\u304D\u307E\u305B\u3093"},
-        {"substitution.value.prefix.unsupported",
-                "\u7F6E\u63DB\u5024{0}\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093"},
-        {"LPARAM", "("},
-        {"RPARAM", ")"},
-        {"type.can.t.be.null","\u5165\u529B\u3092null\u306B\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093"},
-
-        // sun.security.provider.PolicyParser
-        {"keystorePasswordURL.can.not.be.specified.without.also.specifying.keystore",
-                "\u30AD\u30FC\u30B9\u30C8\u30A2\u3092\u6307\u5B9A\u3057\u306A\u3044\u5834\u5408\u3001keystorePasswordURL\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093"},
-        {"expected.keystore.type", "\u4E88\u60F3\u3055\u308C\u305F\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30BF\u30A4\u30D7"},
-        {"expected.keystore.provider", "\u4E88\u60F3\u3055\u308C\u305F\u30AD\u30FC\u30B9\u30C8\u30A2\u30FB\u30D7\u30ED\u30D0\u30A4\u30C0"},
-        {"multiple.Codebase.expressions",
-                "\u8907\u6570\u306ECodebase\u5F0F"},
-        {"multiple.SignedBy.expressions","\u8907\u6570\u306ESignedBy\u5F0F"},
-        {"SignedBy.has.empty.alias","SignedBy\u306F\u7A7A\u306E\u5225\u540D\u3092\u4FDD\u6301\u3057\u307E\u3059"},
-        {"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
-                "\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u540D\u306E\u306A\u3044\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u30FB\u30AF\u30E9\u30B9\u3092\u4F7F\u7528\u3057\u3066\u3001\u30D7\u30EA\u30F3\u30B7\u30D1\u30EB\u3092\u6307\u5B9A\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093"},
-        {"expected.codeBase.or.SignedBy.or.Principal",
-                "\u4E88\u60F3\u3055\u308C\u305FcodeBase\u3001SignedBy\u307E\u305F\u306FPrincipal"},
-        {"expected.permission.entry", "\u4E88\u60F3\u3055\u308C\u305F\u30A2\u30AF\u30BB\u30B9\u6A29\u30A8\u30F3\u30C8\u30EA"},
-        {"number.", "\u6570 "},
-        {"expected.expect.read.end.of.file.",
-                "[{0}]\u3067\u306F\u306A\u304F[\u30D5\u30A1\u30A4\u30EB\u306E\u7D42\u308F\u308A]\u304C\u8AAD\u307F\u8FBC\u307E\u308C\u307E\u3057\u305F"},
-        {"expected.read.end.of.file.",
-                "[;]\u3067\u306F\u306A\u304F[\u30D5\u30A1\u30A4\u30EB\u306E\u7D42\u308F\u308A]\u304C\u8AAD\u307F\u8FBC\u307E\u308C\u307E\u3057\u305F"},
-        {"line.number.msg", "\u884C{0}: {1}"},
-        {"line.number.expected.expect.found.actual.",
-                "\u884C{0}: [{1}]\u3067\u306F\u306A\u304F[{2}]\u304C\u691C\u51FA\u3055\u308C\u307E\u3057\u305F"},
-        {"null.principalClass.or.principalName",
-                "null\u306EprincipalClass\u307E\u305F\u306FprincipalName"},
-
-        // sun.security.pkcs11.SunPKCS11
-        {"PKCS11.Token.providerName.Password.",
-                "PKCS11\u30C8\u30FC\u30AF\u30F3[{0}]\u30D1\u30B9\u30EF\u30FC\u30C9: "},
-
-        /* --- DEPRECATED --- */
-        // javax.security.auth.Policy
-        {"unable.to.instantiate.Subject.based.policy",
-                "\u30B5\u30D6\u30B8\u30A7\u30AF\u30C8\u30FB\u30D9\u30FC\u30B9\u306E\u30DD\u30EA\u30B7\u30FC\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3092\u751F\u6210\u3067\u304D\u307E\u305B\u3093"}
-    };
-
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     *
-     * <p>
-     *
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-}
-
diff --git a/ojluni/src/main/java/sun/security/util/Resources_ko.java b/ojluni/src/main/java/sun/security/util/Resources_ko.java
deleted file mode 100755
index a9714a4..0000000
--- a/ojluni/src/main/java/sun/security/util/Resources_ko.java
+++ /dev/null
@@ -1,661 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, 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.
- */
-
-package sun.security.util;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for javax.security.auth and sun.security.
- *
- */
-public class Resources_ko extends java.util.ListResourceBundle {
-
-    private static final Object[][] contents = {
-
-        // shared (from jarsigner)
-        {"SPACE", " "},
-        {"2SPACE", "  "},
-        {"6SPACE", "      "},
-        {"COMMA", ", "},
-        // shared (from keytool)
-        {"NEWLINE", "\n"},
-        {"STAR",
-                "*******************************************"},
-        {"STARNN",
-                "*******************************************\n\n"},
-
-        // keytool: Help part
-        {".OPTION.", " [OPTION]..."},
-        {"Options.", "\uC635\uC158:"},
-        {"Use.keytool.help.for.all.available.commands",
-                 "\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uBAA8\uB4E0 \uBA85\uB839\uC5D0 \"keytool -help\" \uC0AC\uC6A9"},
-        {"Key.and.Certificate.Management.Tool",
-                 "\uD0A4 \uBC0F \uC778\uC99D\uC11C \uAD00\uB9AC \uD234"},
-        {"Commands.", "\uBA85\uB839:"},
-        {"Use.keytool.command.name.help.for.usage.of.command.name",
-                "command_name \uC0AC\uC6A9\uBC95\uC5D0 \"keytool -command_name -help\" \uC0AC\uC6A9"},
-        // keytool: help: commands
-        {"Generates.a.certificate.request",
-                "\uC778\uC99D\uC11C \uC694\uCCAD\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-certreq
-        {"Changes.an.entry.s.alias",
-                "\uD56D\uBAA9\uC758 \uBCC4\uCE6D\uC744 \uBCC0\uACBD\uD569\uB2C8\uB2E4."}, //-changealias
-        {"Deletes.an.entry",
-                "\uD56D\uBAA9\uC744 \uC0AD\uC81C\uD569\uB2C8\uB2E4."}, //-delete
-        {"Exports.certificate",
-                "\uC778\uC99D\uC11C\uB97C \uC775\uC2A4\uD3EC\uD2B8\uD569\uB2C8\uB2E4."}, //-exportcert
-        {"Generates.a.key.pair",
-                "\uD0A4 \uC30D\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-genkeypair
-        {"Generates.a.secret.key",
-                "\uBCF4\uC548 \uD0A4\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-genseckey
-        {"Generates.certificate.from.a.certificate.request",
-                "\uC778\uC99D\uC11C \uC694\uCCAD\uC5D0\uC11C \uC778\uC99D\uC11C\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-gencert
-        {"Generates.CRL", "CRL\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-gencrl
-        {"Imports.entries.from.a.JDK.1.1.x.style.identity.database",
-                "JDK 1.1.x \uC2A4\uD0C0\uC77C ID \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0\uC11C \uD56D\uBAA9\uC744 \uC784\uD3EC\uD2B8\uD569\uB2C8\uB2E4."}, //-identitydb
-        {"Imports.a.certificate.or.a.certificate.chain",
-                "\uC778\uC99D\uC11C \uB610\uB294 \uC778\uC99D\uC11C \uCCB4\uC778\uC744 \uC784\uD3EC\uD2B8\uD569\uB2C8\uB2E4."}, //-importcert
-        {"Imports.one.or.all.entries.from.another.keystore",
-                "\uB2E4\uB978 \uD0A4 \uC800\uC7A5\uC18C\uC5D0\uC11C \uD558\uB098 \uB610\uB294 \uBAA8\uB4E0 \uD56D\uBAA9\uC744 \uC784\uD3EC\uD2B8\uD569\uB2C8\uB2E4."}, //-importkeystore
-        {"Clones.a.key.entry",
-                "\uD0A4 \uD56D\uBAA9\uC744 \uBCF5\uC81C\uD569\uB2C8\uB2E4."}, //-keyclone
-        {"Changes.the.key.password.of.an.entry",
-                "\uD56D\uBAA9\uC758 \uD0A4 \uBE44\uBC00\uBC88\uD638\uB97C \uBCC0\uACBD\uD569\uB2C8\uB2E4."}, //-keypasswd
-        {"Lists.entries.in.a.keystore",
-                "\uD0A4 \uC800\uC7A5\uC18C\uC758 \uD56D\uBAA9\uC744 \uB098\uC5F4\uD569\uB2C8\uB2E4."}, //-list
-        {"Prints.the.content.of.a.certificate",
-                "\uC778\uC99D\uC11C\uC758 \uCF58\uD150\uCE20\uB97C \uC778\uC1C4\uD569\uB2C8\uB2E4."}, //-printcert
-        {"Prints.the.content.of.a.certificate.request",
-                "\uC778\uC99D\uC11C \uC694\uCCAD\uC758 \uCF58\uD150\uCE20\uB97C \uC778\uC1C4\uD569\uB2C8\uB2E4."}, //-printcertreq
-        {"Prints.the.content.of.a.CRL.file",
-                "CRL \uD30C\uC77C\uC758 \uCF58\uD150\uCE20\uB97C \uC778\uC1C4\uD569\uB2C8\uB2E4."}, //-printcrl
-        {"Generates.a.self.signed.certificate",
-                "\uC790\uCCB4 \uC11C\uBA85\uB41C \uC778\uC99D\uC11C\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4."}, //-selfcert
-        {"Changes.the.store.password.of.a.keystore",
-                "\uD0A4 \uC800\uC7A5\uC18C\uC758 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uB97C \uBCC0\uACBD\uD569\uB2C8\uB2E4."}, //-storepasswd
-        // keytool: help: options
-        {"alias.name.of.the.entry.to.process",
-                "\uCC98\uB9AC\uD560 \uD56D\uBAA9\uC758 \uBCC4\uCE6D \uC774\uB984"}, //-alias
-        {"destination.alias",
-                "\uB300\uC0C1 \uBCC4\uCE6D"}, //-destalias
-        {"destination.key.password",
-                "\uB300\uC0C1 \uD0A4 \uBE44\uBC00\uBC88\uD638"}, //-destkeypass
-        {"destination.keystore.name",
-                "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uC774\uB984"}, //-destkeystore
-        {"destination.keystore.password.protected",
-                "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uB85C \uBCF4\uD638\uB428"}, //-destprotected
-        {"destination.keystore.provider.name",
-                "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uC81C\uACF5\uC790 \uC774\uB984"}, //-destprovidername
-        {"destination.keystore.password",
-                "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638"}, //-deststorepass
-        {"destination.keystore.type",
-                "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uC720\uD615"}, //-deststoretype
-        {"distinguished.name",
-                "\uC2DD\uBCC4 \uC774\uB984"}, //-dname
-        {"X.509.extension",
-                "X.509 \uD655\uC7A5"}, //-ext
-        {"output.file.name",
-                "\uCD9C\uB825 \uD30C\uC77C \uC774\uB984"}, //-file and -outfile
-        {"input.file.name",
-                "\uC785\uB825 \uD30C\uC77C \uC774\uB984"}, //-file and -infile
-        {"key.algorithm.name",
-                "\uD0A4 \uC54C\uACE0\uB9AC\uC998 \uC774\uB984"}, //-keyalg
-        {"key.password",
-                "\uD0A4 \uBE44\uBC00\uBC88\uD638"}, //-keypass
-        {"key.bit.size",
-                "\uD0A4 \uBE44\uD2B8 \uD06C\uAE30"}, //-keysize
-        {"keystore.name",
-                "\uD0A4 \uC800\uC7A5\uC18C \uC774\uB984"}, //-keystore
-        {"new.password",
-                "\uC0C8 \uBE44\uBC00\uBC88\uD638"}, //-new
-        {"do.not.prompt",
-                "\uD655\uC778\uD558\uC9C0 \uC54A\uC74C"}, //-noprompt
-        {"password.through.protected.mechanism",
-                "\uBCF4\uD638\uB418\uB294 \uBA54\uCEE4\uB2C8\uC998\uC744 \uD1B5\uD55C \uBE44\uBC00\uBC88\uD638"}, //-protected
-        {"provider.argument",
-                "\uC81C\uACF5\uC790 \uC778\uC218"}, //-providerarg
-        {"provider.class.name",
-                "\uC81C\uACF5\uC790 \uD074\uB798\uC2A4 \uC774\uB984"}, //-providerclass
-        {"provider.name",
-                "\uC81C\uACF5\uC790 \uC774\uB984"}, //-providername
-        {"provider.classpath",
-                "\uC81C\uACF5\uC790 \uD074\uB798\uC2A4 \uACBD\uB85C"}, //-providerpath
-        {"output.in.RFC.style",
-                "RFC \uC2A4\uD0C0\uC77C\uC758 \uCD9C\uB825"}, //-rfc
-        {"signature.algorithm.name",
-                "\uC11C\uBA85 \uC54C\uACE0\uB9AC\uC998 \uC774\uB984"}, //-sigalg
-        {"source.alias",
-                "\uC18C\uC2A4 \uBCC4\uCE6D"}, //-srcalias
-        {"source.key.password",
-                "\uC18C\uC2A4 \uD0A4 \uBE44\uBC00\uBC88\uD638"}, //-srckeypass
-        {"source.keystore.name",
-                "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uC774\uB984"}, //-srckeystore
-        {"source.keystore.password.protected",
-                "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uB85C \uBCF4\uD638\uB428"}, //-srcprotected
-        {"source.keystore.provider.name",
-                "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uC81C\uACF5\uC790 \uC774\uB984"}, //-srcprovidername
-        {"source.keystore.password",
-                "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638"}, //-srcstorepass
-        {"source.keystore.type",
-                "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uC720\uD615"}, //-srcstoretype
-        {"SSL.server.host.and.port",
-                "SSL \uC11C\uBC84 \uD638\uC2A4\uD2B8 \uBC0F \uD3EC\uD2B8"}, //-sslserver
-        {"signed.jar.file",
-                "\uC11C\uBA85\uB41C jar \uD30C\uC77C"}, //=jarfile
-        {"certificate.validity.start.date.time",
-                "\uC778\uC99D\uC11C \uC720\uD6A8 \uAE30\uAC04 \uC2DC\uC791 \uB0A0\uC9DC/\uC2DC\uAC04"}, //-startdate
-        {"keystore.password",
-                "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638"}, //-storepass
-        {"keystore.type",
-                "\uD0A4 \uC800\uC7A5\uC18C \uC720\uD615"}, //-storetype
-        {"trust.certificates.from.cacerts",
-                "cacerts\uC758 \uBCF4\uC548 \uC778\uC99D\uC11C"}, //-trustcacerts
-        {"verbose.output",
-                "\uC0C1\uC138 \uC815\uBCF4 \uCD9C\uB825"}, //-v
-        {"validity.number.of.days",
-                "\uC720\uD6A8 \uAE30\uAC04 \uC77C \uC218"}, //-validity
-        {"Serial.ID.of.cert.to.revoke",
-                 "\uCCA0\uD68C\uD560 \uC778\uC99D\uC11C\uC758 \uC77C\uB828 ID"}, //-id
-        // keytool: Running part
-        {"keytool.error.", "keytool \uC624\uB958: "},
-        {"Illegal.option.", "\uC798\uBABB\uB41C \uC635\uC158:  "},
-        {"Illegal.value.", "\uC798\uBABB\uB41C \uAC12: "},
-        {"Unknown.password.type.", "\uC54C \uC218 \uC5C6\uB294 \uBE44\uBC00\uBC88\uD638 \uC720\uD615: "},
-        {"Cannot.find.environment.variable.",
-                "\uD658\uACBD \uBCC0\uC218\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC74C: "},
-        {"Cannot.find.file.", "\uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC74C: "},
-        {"Command.option.flag.needs.an.argument.", "\uBA85\uB839 \uC635\uC158 {0}\uC5D0 \uC778\uC218\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4."},
-        {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.",
-                "\uACBD\uACE0: \uB2E4\uB978 \uC800\uC7A5\uC18C \uBC0F \uD0A4 \uBE44\uBC00\uBC88\uD638\uB294 PKCS12 KeyStores\uC5D0 \uB300\uD574 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC0AC\uC6A9\uC790\uAC00 \uC9C0\uC815\uD55C {0} \uAC12\uC744 \uBB34\uC2DC\uD558\uB294 \uC911\uC785\uB2C8\uB2E4."},
-        {".keystore.must.be.NONE.if.storetype.is.{0}",
-                "-storetype\uC774 {0}\uC778 \uACBD\uC6B0 -keystore\uB294 NONE\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."},
-        {"Too.many.retries.program.terminated",
-                 "\uC7AC\uC2DC\uB3C4 \uD69F\uC218\uAC00 \uB108\uBB34 \uB9CE\uC544 \uD504\uB85C\uADF8\uB7A8\uC774 \uC885\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}",
-                "-storetype\uC774 {0}\uC778 \uACBD\uC6B0 -storepasswd \uBC0F -keypasswd \uBA85\uB839\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."},
-        {".keypasswd.commands.not.supported.if.storetype.is.PKCS12",
-                "-storetype\uC774 PKCS12\uC778 \uACBD\uC6B0 -keypasswd \uBA85\uB839\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."},
-        {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}",
-                "-storetype\uC774 {0}\uC778 \uACBD\uC6B0 -keypass \uBC0F -new\uB97C \uC9C0\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified",
-                "-protected\uB97C \uC9C0\uC815\uD55C \uACBD\uC6B0 -storepass, -keypass \uBC0F -new\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."},
-        {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "-srcprotected\uB97C \uC9C0\uC815\uD55C \uACBD\uC6B0 -srcstorepass \uBC0F -srckeypass\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."},
-        {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified",
-                "\uD0A4 \uC800\uC7A5\uC18C\uAC00 \uBE44\uBC00\uBC88\uD638\uB85C \uBCF4\uD638\uB418\uC9C0 \uC54A\uB294 \uACBD\uC6B0 -storepass, -keypass \uBC0F -new\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."},
-        {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C\uAC00 \uBE44\uBC00\uBC88\uD638\uB85C \uBCF4\uD638\uB418\uC9C0 \uC54A\uB294 \uACBD\uC6B0 -srcstorepass \uBC0F -srckeypass\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."},
-        {"Illegal.startdate.value", "startdate \uAC12\uC774 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {"Validity.must.be.greater.than.zero",
-                "\uC720\uD6A8 \uAE30\uAC04\uC740 0\uBCF4\uB2E4 \uCEE4\uC57C \uD569\uB2C8\uB2E4."},
-        {"provName.not.a.provider", "{0}\uC740(\uB294) \uC81C\uACF5\uC790\uAC00 \uC544\uB2D9\uB2C8\uB2E4."},
-        {"Usage.error.no.command.provided", "\uC0AC\uC6A9\uBC95 \uC624\uB958: \uBA85\uB839\uC744 \uC785\uB825\uD558\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."},
-        {"Source.keystore.file.exists.but.is.empty.", "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uD30C\uC77C\uC774 \uC874\uC7AC\uD558\uC9C0\uB9CC \uBE44\uC5B4 \uC788\uC74C: "},
-        {"Please.specify.srckeystore", "-srckeystore\uB97C \uC9C0\uC815\uD558\uC2ED\uC2DC\uC624."},
-        {"Must.not.specify.both.v.and.rfc.with.list.command",
-                "'list' \uBA85\uB839\uC5D0 -v\uC640 -rfc\uB97C \uD568\uAED8 \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."},
-        {"Key.password.must.be.at.least.6.characters",
-                "\uD0A4 \uBE44\uBC00\uBC88\uD638\uB294 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."},
-        {"New.password.must.be.at.least.6.characters",
-                "\uC0C8 \uBE44\uBC00\uBC88\uD638\uB294 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."},
-        {"Keystore.file.exists.but.is.empty.",
-                "\uD0A4 \uC800\uC7A5\uC18C \uD30C\uC77C\uC774 \uC874\uC7AC\uD558\uC9C0\uB9CC \uBE44\uC5B4 \uC788\uC74C: "},
-        {"Keystore.file.does.not.exist.",
-                "\uD0A4 \uC800\uC7A5\uC18C \uD30C\uC77C\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC74C: "},
-        {"Must.specify.destination.alias", "\uB300\uC0C1 \uBCC4\uCE6D\uC744 \uC9C0\uC815\uD574\uC57C \uD569\uB2C8\uB2E4."},
-        {"Must.specify.alias", "\uBCC4\uCE6D\uC744 \uC9C0\uC815\uD574\uC57C \uD569\uB2C8\uB2E4."},
-        {"Keystore.password.must.be.at.least.6.characters",
-                "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uB294 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."},
-        {"Enter.keystore.password.", "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638 \uC785\uB825:  "},
-        {"Enter.source.keystore.password.", "\uC18C\uC2A4 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638 \uC785\uB825:  "},
-        {"Enter.destination.keystore.password.", "\uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638 \uC785\uB825:  "},
-        {"Keystore.password.is.too.short.must.be.at.least.6.characters",
-         "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uAC00 \uB108\uBB34 \uC9E7\uC74C - 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."},
-        {"Unknown.Entry.Type", "\uC54C \uC218 \uC5C6\uB294 \uD56D\uBAA9 \uC720\uD615"},
-        {"Too.many.failures.Alias.not.changed", "\uC624\uB958\uAC00 \uB108\uBB34 \uB9CE\uC2B5\uB2C8\uB2E4. \uBCC4\uCE6D\uC774 \uBCC0\uACBD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."},
-        {"Entry.for.alias.alias.successfully.imported.",
-                 "{0} \uBCC4\uCE6D\uC5D0 \uB300\uD55C \uD56D\uBAA9\uC774 \uC131\uACF5\uC801\uC73C\uB85C \uC784\uD3EC\uD2B8\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {"Entry.for.alias.alias.not.imported.", "{0} \uBCC4\uCE6D\uC5D0 \uB300\uD55C \uD56D\uBAA9\uC774 \uC784\uD3EC\uD2B8\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."},
-        {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.",
-                 "{0} \uBCC4\uCE6D\uC5D0 \uB300\uD55C \uD56D\uBAA9\uC744 \uC784\uD3EC\uD2B8\uD558\uB294 \uC911 \uBB38\uC81C \uBC1C\uC0DD: {1}.\n{0} \uBCC4\uCE6D\uC5D0 \uB300\uD55C \uD56D\uBAA9\uC774 \uC784\uD3EC\uD2B8\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."},
-        {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled",
-                 "\uC784\uD3EC\uD2B8 \uBA85\uB839 \uC644\uB8CC: \uC131\uACF5\uC801\uC73C\uB85C \uC784\uD3EC\uD2B8\uB41C \uD56D\uBAA9\uC740 {0}\uAC1C, \uC2E4\uD328\uD558\uAC70\uB098 \uCDE8\uC18C\uB41C \uD56D\uBAA9\uC740 {1}\uAC1C\uC785\uB2C8\uB2E4."},
-        {"Warning.Overwriting.existing.alias.alias.in.destination.keystore",
-                 "\uACBD\uACE0: \uB300\uC0C1 \uD0A4 \uC800\uC7A5\uC18C\uC5D0\uC11C \uAE30\uC874 \uBCC4\uCE6D {0}\uC744(\uB97C) \uACB9\uCCD0 \uC4F0\uB294 \uC911"},
-        {"Existing.entry.alias.alias.exists.overwrite.no.",
-                 "\uAE30\uC874 \uD56D\uBAA9 \uBCC4\uCE6D {0}\uC774(\uAC00) \uC874\uC7AC\uD569\uB2C8\uB2E4. \uACB9\uCCD0 \uC4F0\uACA0\uC2B5\uB2C8\uAE4C? [\uC544\uB2C8\uC624]:  "},
-        {"Too.many.failures.try.later", "\uC624\uB958\uAC00 \uB108\uBB34 \uB9CE\uC74C - \uB098\uC911\uC5D0 \uC2DC\uB3C4\uD558\uC2ED\uC2DC\uC624."},
-        {"Certification.request.stored.in.file.filename.",
-                "\uC778\uC99D \uC694\uCCAD\uC774 <{0}> \uD30C\uC77C\uC5D0 \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {"Submit.this.to.your.CA", "CA\uC5D0\uAC8C \uC81C\uCD9C\uD558\uC2ED\uC2DC\uC624."},
-        {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
-            "\uBCC4\uCE6D\uC744 \uC9C0\uC815\uD558\uC9C0 \uC54A\uC740 \uACBD\uC6B0 destalias, srckeypass \uBC0F destkeypass\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4."},
-        {"Certificate.stored.in.file.filename.",
-                "\uC778\uC99D\uC11C\uAC00 <{0}> \uD30C\uC77C\uC5D0 \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {"Certificate.reply.was.installed.in.keystore",
-                "\uC778\uC99D\uC11C \uD68C\uC2E0\uC774 \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uC124\uCE58\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {"Certificate.reply.was.not.installed.in.keystore",
-                "\uC778\uC99D\uC11C \uD68C\uC2E0\uC774 \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uC124\uCE58\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."},
-        {"Certificate.was.added.to.keystore",
-                "\uC778\uC99D\uC11C\uAC00 \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uCD94\uAC00\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {"Certificate.was.not.added.to.keystore",
-                "\uC778\uC99D\uC11C\uAC00 \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uCD94\uAC00\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."},
-        {".Storing.ksfname.", "[{0}\uC744(\uB97C) \uC800\uC7A5\uD558\uB294 \uC911]"},
-        {"alias.has.no.public.key.certificate.",
-                "{0}\uC5D0 \uACF5\uC6A9 \uD0A4(\uC778\uC99D\uC11C)\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"Cannot.derive.signature.algorithm",
-                "\uC11C\uBA85 \uC54C\uACE0\uB9AC\uC998\uC744 \uD30C\uC0DD\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"Alias.alias.does.not.exist",
-                "<{0}> \uBCC4\uCE6D\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."},
-        {"Alias.alias.has.no.certificate",
-                "<{0}> \uBCC4\uCE6D\uC5D0 \uC778\uC99D\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"Key.pair.not.generated.alias.alias.already.exists",
-                "\uD0A4 \uC30D\uC774 \uC0DD\uC131\uB418\uC9C0 \uC54A\uC558\uC73C\uBA70 <{0}> \uBCC4\uCE6D\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4."},
-        {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for",
-                "\uB2E4\uC74C\uC5D0 \uB300\uD574 \uC720\uD6A8 \uAE30\uAC04\uC774 {3}\uC77C\uC778 {0}\uBE44\uD2B8 {1} \uD0A4 \uC30D \uBC0F \uC790\uCCB4 \uC11C\uBA85\uB41C \uC778\uC99D\uC11C({2})\uB97C \uC0DD\uC131\uD558\uB294 \uC911\n\t: {4}"},
-        {"Enter.key.password.for.alias.", "<{0}>\uC5D0 \uB300\uD55C \uD0A4 \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD558\uC2ED\uC2DC\uC624."},
-        {".RETURN.if.same.as.keystore.password.",
-                "\t(\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uC640 \uB3D9\uC77C\uD55C \uACBD\uC6B0 Enter \uD0A4\uB97C \uB204\uB984):  "},
-        {"Key.password.is.too.short.must.be.at.least.6.characters",
-                "\uD0A4 \uBE44\uBC00\uBC88\uD638\uAC00 \uB108\uBB34 \uC9E7\uC74C - 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."},
-        {"Too.many.failures.key.not.added.to.keystore",
-                "\uC624\uB958\uAC00 \uB108\uBB34 \uB9CE\uC74C - \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uD0A4\uAC00 \uCD94\uAC00\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."},
-        {"Destination.alias.dest.already.exists",
-                "\uB300\uC0C1 \uBCC4\uCE6D <{0}>\uC774(\uAC00) \uC874\uC7AC\uD569\uB2C8\uB2E4."},
-        {"Password.is.too.short.must.be.at.least.6.characters",
-                "\uBE44\uBC00\uBC88\uD638\uAC00 \uB108\uBB34 \uC9E7\uC74C - 6\uC790 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4."},
-        {"Too.many.failures.Key.entry.not.cloned",
-                "\uC624\uB958\uAC00 \uB108\uBB34 \uB9CE\uC2B5\uB2C8\uB2E4. \uD0A4 \uD56D\uBAA9\uC774 \uBCF5\uC81C\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4."},
-        {"key.password.for.alias.", "<{0}>\uC5D0 \uB300\uD55C \uD0A4 \uBE44\uBC00\uBC88\uD638"},
-        {"Keystore.entry.for.id.getName.already.exists",
-                "<{0}>\uC5D0 \uB300\uD55C \uD0A4 \uC800\uC7A5\uC18C \uD56D\uBAA9\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4."},
-        {"Creating.keystore.entry.for.id.getName.",
-                "<{0}>\uC5D0 \uB300\uD55C \uD0A4 \uC800\uC7A5\uC18C \uD56D\uBAA9\uC744 \uC0DD\uC131\uD558\uB294 \uC911..."},
-        {"No.entries.from.identity.database.added",
-                "ID \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uC5D0\uC11C \uCD94\uAC00\uB41C \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"Alias.name.alias", "\uBCC4\uCE6D \uC774\uB984: {0}"},
-        {"Creation.date.keyStore.getCreationDate.alias.",
-                "\uC0DD\uC131 \uB0A0\uC9DC: {0,date}"},
-        {"alias.keyStore.getCreationDate.alias.",
-                "{0}, {1,date}, "},
-        {"alias.", "{0}, "},
-        {"Entry.type.type.", "\uD56D\uBAA9 \uC720\uD615: {0}"},
-        {"Certificate.chain.length.", "\uC778\uC99D\uC11C \uCCB4\uC778 \uAE38\uC774: "},
-        {"Certificate.i.1.", "\uC778\uC99D\uC11C[{0,number,integer}]:"},
-        {"Certificate.fingerprint.SHA1.", "\uC778\uC99D\uC11C \uC9C0\uBB38(SHA1): "},
-        {"Keystore.type.", "\uD0A4 \uC800\uC7A5\uC18C \uC720\uD615: "},
-        {"Keystore.provider.", "\uD0A4 \uC800\uC7A5\uC18C \uC81C\uACF5\uC790: "},
-        {"Your.keystore.contains.keyStore.size.entry",
-                "\uD0A4 \uC800\uC7A5\uC18C\uC5D0 {0,number,integer}\uAC1C\uC758 \uD56D\uBAA9\uC774 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4."},
-        {"Your.keystore.contains.keyStore.size.entries",
-                "\uD0A4 \uC800\uC7A5\uC18C\uC5D0 {0,number,integer}\uAC1C\uC758 \uD56D\uBAA9\uC774 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4."},
-        {"Failed.to.parse.input", "\uC785\uB825\uAC12\uC758 \uAD6C\uBB38 \uBD84\uC11D\uC744 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4."},
-        {"Empty.input", "\uC785\uB825\uAC12\uC774 \uBE44\uC5B4 \uC788\uC2B5\uB2C8\uB2E4."},
-        {"Not.X.509.certificate", "X.509 \uC778\uC99D\uC11C\uAC00 \uC544\uB2D9\uB2C8\uB2E4."},
-        {"alias.has.no.public.key", "{0}\uC5D0 \uACF5\uC6A9 \uD0A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"alias.has.no.X.509.certificate", "{0}\uC5D0 X.509 \uC778\uC99D\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"New.certificate.self.signed.", "\uC0C8 \uC778\uC99D\uC11C(\uC790\uCCB4 \uC11C\uBA85):"},
-        {"Reply.has.no.certificates", "\uD68C\uC2E0\uC5D0 \uC778\uC99D\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"Certificate.not.imported.alias.alias.already.exists",
-                "\uC778\uC99D\uC11C\uAC00 \uC784\uD3EC\uD2B8\uB418\uC9C0 \uC54A\uC558\uC73C\uBA70 <{0}> \uBCC4\uCE6D\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4."},
-        {"Input.not.an.X.509.certificate", "\uC785\uB825\uC774 X.509 \uC778\uC99D\uC11C\uAC00 \uC544\uB2D9\uB2C8\uB2E4."},
-        {"Certificate.already.exists.in.keystore.under.alias.trustalias.",
-                "\uC778\uC99D\uC11C\uAC00 <{0}> \uBCC4\uCE6D \uC544\uB798\uC758 \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uC874\uC7AC\uD569\uB2C8\uB2E4."},
-        {"Do.you.still.want.to.add.it.no.",
-                "\uCD94\uAC00\uD558\uACA0\uC2B5\uB2C8\uAE4C? [\uC544\uB2C8\uC624]:  "},
-        {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.",
-                "\uC778\uC99D\uC11C\uAC00 <{0}> \uBCC4\uCE6D \uC544\uB798\uC5D0 \uC788\uB294 \uC2DC\uC2A4\uD15C \uCC28\uC6D0\uC758 CA \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uC874\uC7AC\uD569\uB2C8\uB2E4."},
-        {"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
-                "\uACE0\uC720\uD55C \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uCD94\uAC00\uD558\uACA0\uC2B5\uB2C8\uAE4C? [\uC544\uB2C8\uC624]:  "},
-        {"Trust.this.certificate.no.", "\uC774 \uC778\uC99D\uC11C\uB97C \uC2E0\uB8B0\uD569\uB2C8\uAE4C? [\uC544\uB2C8\uC624]:  "},
-        {"YES", "\uC608"},
-        {"New.prompt.", "\uC0C8 {0}: "},
-        {"Passwords.must.differ", "\uBE44\uBC00\uBC88\uD638\uB294 \uB2EC\uB77C\uC57C \uD569\uB2C8\uB2E4."},
-        {"Re.enter.new.prompt.", "\uC0C8 {0} \uB2E4\uC2DC \uC785\uB825: "},
-        {"Re.enter.new.password.", "\uC0C8 \uBE44\uBC00\uBC88\uD638 \uB2E4\uC2DC \uC785\uB825: "},
-        {"They.don.t.match.Try.again", "\uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC2ED\uC2DC\uC624."},
-        {"Enter.prompt.alias.name.", "{0} \uBCC4\uCE6D \uC774\uB984 \uC785\uB825:  "},
-        {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.",
-                 "\uC0C8 \uBCC4\uCE6D \uC774\uB984 \uC785\uB825\t(\uC774 \uD56D\uBAA9\uC5D0 \uB300\uD55C \uC784\uD3EC\uD2B8\uB97C \uCDE8\uC18C\uD558\uB824\uBA74 Enter \uD0A4\uB97C \uB204\uB984):  "},
-        {"Enter.alias.name.", "\uBCC4\uCE6D \uC774\uB984 \uC785\uB825:  "},
-        {".RETURN.if.same.as.for.otherAlias.",
-                "\t(<{0}>\uACFC(\uC640) \uB3D9\uC77C\uD55C \uACBD\uC6B0 Enter \uD0A4\uB97C \uB204\uB984)"},
-        {".PATTERN.printX509Cert",
-                "\uC18C\uC720\uC790: {0}\n\uBC1C\uD589\uC790: {1}\n\uC77C\uB828 \uBC88\uD638: {2}\n\uC801\uD569\uD55C \uC2DC\uC791 \uB0A0\uC9DC: {3}, \uC885\uB8CC \uB0A0\uC9DC: {4}\n\uC778\uC99D\uC11C \uC9C0\uBB38:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t \uC11C\uBA85 \uC54C\uACE0\uB9AC\uC998 \uC774\uB984: {8}\n\t \uBC84\uC804: {9}"},
-        {"What.is.your.first.and.last.name.",
-                "\uC774\uB984\uACFC \uC131\uC744 \uC785\uB825\uD558\uC2ED\uC2DC\uC624."},
-        {"What.is.the.name.of.your.organizational.unit.",
-                "\uC870\uC9C1 \uB2E8\uC704 \uC774\uB984\uC744 \uC785\uB825\uD558\uC2ED\uC2DC\uC624."},
-        {"What.is.the.name.of.your.organization.",
-                "\uC870\uC9C1 \uC774\uB984\uC744 \uC785\uB825\uD558\uC2ED\uC2DC\uC624."},
-        {"What.is.the.name.of.your.City.or.Locality.",
-                "\uAD6C/\uAD70/\uC2DC \uC774\uB984\uC744 \uC785\uB825\uD558\uC2ED\uC2DC\uC624?"},
-        {"What.is.the.name.of.your.State.or.Province.",
-                "\uC2DC/\uB3C4 \uC774\uB984\uC744 \uC785\uB825\uD558\uC2ED\uC2DC\uC624."},
-        {"What.is.the.two.letter.country.code.for.this.unit.",
-                "\uC774 \uC870\uC9C1\uC758 \uB450 \uC790\uB9AC \uAD6D\uAC00 \uCF54\uB4DC\uB97C \uC785\uB825\uD558\uC2ED\uC2DC\uC624."},
-        {"Is.name.correct.", "{0}\uC774(\uAC00) \uB9DE\uC2B5\uB2C8\uAE4C?"},
-        {"no", "\uC544\uB2C8\uC624"},
-        {"yes", "\uC608"},
-        {"y", "y"},
-        {".defaultValue.", "  [{0}]:  "},
-        {"Alias.alias.has.no.key",
-                "<{0}> \uBCC4\uCE6D\uC5D0 \uD0A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key",
-                 "<{0}> \uBCC4\uCE6D\uC740 \uC804\uC6A9 \uD0A4 \uD56D\uBAA9\uC774 \uC544\uB2CC \uD56D\uBAA9 \uC720\uD615\uC744 \uCC38\uC870\uD569\uB2C8\uB2E4. -keyclone \uBA85\uB839\uC740 \uC804\uC6A9 \uD0A4 \uD56D\uBAA9\uC758 \uBCF5\uC81C\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4."},
-
-        {".WARNING.WARNING.WARNING.",
-            "*****************  WARNING WARNING WARNING  *****************"},
-        {"Signer.d.", "\uC11C\uBA85\uC790 #%d:"},
-        {"Timestamp.", "\uC2DC\uAC04 \uAE30\uB85D:"},
-        {"Signature.", "\uC11C\uBA85:"},
-        {"CRLs.", "CRL:"},
-        {"Certificate.owner.", "\uC778\uC99D\uC11C \uC18C\uC720\uC790: "},
-        {"Not.a.signed.jar.file", "\uC11C\uBA85\uB41C jar \uD30C\uC77C\uC774 \uC544\uB2D9\uB2C8\uB2E4."},
-        {"No.certificate.from.the.SSL.server",
-                "SSL \uC11C\uBC84\uC5D0\uC11C \uAC00\uC838\uC628 \uC778\uC99D\uC11C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."},
-
-        {".The.integrity.of.the.information.stored.in.your.keystore.",
-            "* \uD0A4 \uC800\uC7A5\uC18C\uC5D0 \uC800\uC7A5\uB41C \uC815\uBCF4\uC758 \uBB34\uACB0\uC131\uC774  *\n* \uD655\uC778\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4! \uBB34\uACB0\uC131\uC744 \uD655\uC778\uD558\uB824\uBA74, *\n* \uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638\uB97C \uC81C\uACF5\uD574\uC57C \uD569\uB2C8\uB2E4.                  *"},
-        {".The.integrity.of.the.information.stored.in.the.srckeystore.",
-            "* srckeystore\uC5D0 \uC800\uC7A5\uB41C \uC815\uBCF4\uC758 \uBB34\uACB0\uC131\uC774  *\n* \uD655\uC778\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4! \uBB34\uACB0\uC131\uC744 \uD655\uC778\uD558\uB824\uBA74, *\n* srckeystore \uBE44\uBC00\uBC88\uD638\uB97C \uC81C\uACF5\uD574\uC57C \uD569\uB2C8\uB2E4.                  *"},
-
-        {"Certificate.reply.does.not.contain.public.key.for.alias.",
-                "\uC778\uC99D\uC11C \uD68C\uC2E0\uC5D0 <{0}>\uC5D0 \uB300\uD55C \uACF5\uC6A9 \uD0A4\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."},
-        {"Incomplete.certificate.chain.in.reply",
-                "\uD68C\uC2E0\uC5D0 \uBD88\uC644\uC804\uD55C \uC778\uC99D\uC11C \uCCB4\uC778\uC774 \uC788\uC2B5\uB2C8\uB2E4."},
-        {"Certificate.chain.in.reply.does.not.verify.",
-                "\uD68C\uC2E0\uC758 \uC778\uC99D\uC11C \uCCB4\uC778\uC774 \uD655\uC778\uB418\uC9C0 \uC54A\uC74C: "},
-        {"Top.level.certificate.in.reply.",
-                "\uD68C\uC2E0\uC5D0 \uCD5C\uC0C1\uC704 \uB808\uBCA8 \uC778\uC99D\uC11C\uAC00 \uC788\uC74C:\n"},
-        {".is.not.trusted.", "...\uC744(\uB97C) \uC2E0\uB8B0\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. "},
-        {"Install.reply.anyway.no.", "\uD68C\uC2E0\uC744 \uC124\uCE58\uD558\uACA0\uC2B5\uB2C8\uAE4C? [\uC544\uB2C8\uC624]:  "},
-        {"NO", "\uC544\uB2C8\uC624"},
-        {"Public.keys.in.reply.and.keystore.don.t.match",
-                "\uD68C\uC2E0\uACFC \uD0A4 \uC800\uC7A5\uC18C\uC758 \uACF5\uC6A9 \uD0A4\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."},
-        {"Certificate.reply.and.certificate.in.keystore.are.identical",
-                "\uD68C\uC2E0\uACFC \uD0A4 \uC800\uC7A5\uC18C\uC758 \uC778\uC99D\uC11C\uAC00 \uB3D9\uC77C\uD569\uB2C8\uB2E4."},
-        {"Failed.to.establish.chain.from.reply",
-                "\uD68C\uC2E0\uC758 \uCCB4\uC778 \uC124\uC815\uC744 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4."},
-        {"n", "n"},
-        {"Wrong.answer.try.again", "\uC798\uBABB\uB41C \uC751\uB2F5\uC785\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC2ED\uC2DC\uC624."},
-        {"Secret.key.not.generated.alias.alias.already.exists",
-                "\uBCF4\uC548 \uD0A4\uAC00 \uC0DD\uC131\uB418\uC9C0 \uC54A\uC558\uC73C\uBA70 <{0}> \uBCC4\uCE6D\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4."},
-        {"Please.provide.keysize.for.secret.key.generation",
-                "\uBCF4\uC548 \uD0A4\uB97C \uC0DD\uC131\uD558\uB824\uBA74 -keysize\uB97C \uC81C\uACF5\uD558\uC2ED\uC2DC\uC624."},
-
-        {"Extensions.", "\uD655\uC7A5: "},
-        {".Empty.value.", "(\uBE44\uC5B4 \uC788\uB294 \uAC12)"},
-        {"Extension.Request.", "\uD655\uC7A5 \uC694\uCCAD:"},
-        {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.",
-                "PKCS #10 \uC778\uC99D\uC11C \uC694\uCCAD(1.0 \uBC84\uC804)\n\uC81C\uBAA9: %s\n\uACF5\uC6A9 \uD0A4: %s \uD615\uC2DD %s \uD0A4\n"},
-        {"Unknown.keyUsage.type.", "\uC54C \uC218 \uC5C6\uB294 keyUsage \uC720\uD615: "},
-        {"Unknown.extendedkeyUsage.type.", "\uC54C \uC218 \uC5C6\uB294 extendedkeyUsage \uC720\uD615: "},
-        {"Unknown.AccessDescription.type.", "\uC54C \uC218 \uC5C6\uB294 AccessDescription \uC720\uD615: "},
-        {"Unrecognized.GeneralName.type.", "\uC54C \uC218 \uC5C6\uB294 GeneralName \uC720\uD615: "},
-        {"This.extension.cannot.be.marked.as.critical.",
-                 "\uC774 \uD655\uC7A5\uC740 \uC911\uC694\uD55C \uAC83\uC73C\uB85C \uD45C\uC2DC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. "},
-        {"Odd.number.of.hex.digits.found.", "\uD640\uC218 \uAC1C\uC758 16\uC9C4\uC218\uAC00 \uBC1C\uACAC\uB428: "},
-        {"Unknown.extension.type.", "\uC54C \uC218 \uC5C6\uB294 \uD655\uC7A5 \uC720\uD615: "},
-        {"command.{0}.is.ambiguous.", "{0} \uBA85\uB839\uC774 \uBAA8\uD638\uD568:"},
-
-        // policytool
-        {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.",
-                "\uACBD\uACE0: {0} \uBCC4\uCE6D\uC5D0 \uB300\uD55C \uACF5\uC6A9 \uD0A4\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uD0A4 \uC800\uC7A5\uC18C\uAC00 \uC81C\uB300\uB85C \uAD6C\uC131\uB418\uC5B4 \uC788\uB294\uC9C0 \uD655\uC778\uD558\uC2ED\uC2DC\uC624."},
-        {"Warning.Class.not.found.class", "\uACBD\uACE0: \uD074\uB798\uC2A4\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC74C: {0}"},
-        {"Warning.Invalid.argument.s.for.constructor.arg",
-                "\uACBD\uACE0: \uC0DD\uC131\uC790\uC5D0 \uB300\uD574 \uBD80\uC801\uD569\uD55C \uC778\uC218: {0}"},
-        {"Illegal.Principal.Type.type", "\uC798\uBABB\uB41C \uC8FC\uCCB4 \uC720\uD615: {0}"},
-        {"Illegal.option.option", "\uC798\uBABB\uB41C \uC635\uC158: {0}"},
-        {"Usage.policytool.options.", "\uC0AC\uC6A9\uBC95: policytool [options]"},
-        {".file.file.policy.file.location",
-                "  [-file <file>]    \uC815\uCC45 \uD30C\uC77C \uC704\uCE58"},
-        {"New", "\uC0C8\uB85C \uB9CC\uB4E4\uAE30"},
-        {"Open", "\uC5F4\uAE30"},
-        {"Save", "\uC800\uC7A5"},
-        {"Save.As", "\uB2E4\uB978 \uC774\uB984\uC73C\uB85C \uC800\uC7A5"},
-        {"View.Warning.Log", "\uACBD\uACE0 \uB85C\uADF8 \uBCF4\uAE30"},
-        {"Exit", "\uC885\uB8CC"},
-        {"Add.Policy.Entry", "\uC815\uCC45 \uD56D\uBAA9 \uCD94\uAC00"},
-        {"Edit.Policy.Entry", "\uC815\uCC45 \uD56D\uBAA9 \uD3B8\uC9D1"},
-        {"Remove.Policy.Entry", "\uC815\uCC45 \uD56D\uBAA9 \uC81C\uAC70"},
-        {"Edit", "\uD3B8\uC9D1"},
-        {"Retain", "\uC720\uC9C0"},
-
-        {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes",
-            "\uACBD\uACE0: \uD30C\uC77C \uC774\uB984\uC5D0 \uC774\uC2A4\uCF00\uC774\uD504\uB41C \uBC31\uC2AC\uB798\uC2DC \uBB38\uC790\uAC00 \uD3EC\uD568\uB418\uC5C8\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uBC31\uC2AC\uB798\uC2DC \uBB38\uC790\uB294 \uC774\uC2A4\uCF00\uC774\uD504\uD560 \uD544\uC694\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC601\uAD6C \uC800\uC7A5\uC18C\uC5D0 \uC815\uCC45 \uCF58\uD150\uCE20\uB97C \uC4F8 \uB54C \uD544\uC694\uC5D0 \uB530\uB77C \uC790\uB3D9\uC73C\uB85C \uBB38\uC790\uAC00 \uC774\uC2A4\uCF00\uC774\uD504\uB429\uB2C8\uB2E4.\n\n\uC785\uB825\uB41C \uC774\uB984\uC744 \uADF8\uB300\uB85C \uC720\uC9C0\uD558\uB824\uBA74 [\uC720\uC9C0]\uB97C \uB204\uB974\uACE0, \uC774\uB984\uC744 \uD3B8\uC9D1\uD558\uB824\uBA74 [\uD3B8\uC9D1]\uC744 \uB204\uB974\uC2ED\uC2DC\uC624."},
-
-        {"Add.Public.Key.Alias", "\uACF5\uC6A9 \uD0A4 \uBCC4\uCE6D \uCD94\uAC00"},
-        {"Remove.Public.Key.Alias", "\uACF5\uC6A9 \uD0A4 \uBCC4\uCE6D \uC81C\uAC70"},
-        {"File", "\uD30C\uC77C"},
-        {"KeyStore", "\uD0A4 \uC800\uC7A5\uC18C"},
-        {"Policy.File.", "\uC815\uCC45 \uD30C\uC77C:"},
-        {"Could.not.open.policy.file.policyFile.e.toString.",
-                "\uC815\uCC45 \uD30C\uC77C\uC744 \uC5F4 \uC218 \uC5C6\uC74C: {0}: {1}"},
-        {"Policy.Tool", "\uC815\uCC45 \uD234"},
-        {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.",
-                "\uC815\uCC45 \uAD6C\uC131\uC744 \uC5EC\uB294 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 \uACBD\uACE0 \uB85C\uADF8\uB97C \uD655\uC778\uD558\uC2ED\uC2DC\uC624."},
-        {"Error", "\uC624\uB958"},
-        {"OK", "\uD655\uC778"},
-        {"Status", "\uC0C1\uD0DC"},
-        {"Warning", "\uACBD\uACE0"},
-        {"Permission.",
-                "\uAD8C\uD55C:                                                       "},
-        {"Principal.Type.", "\uC8FC\uCCB4 \uC720\uD615:"},
-        {"Principal.Name.", "\uC8FC\uCCB4 \uC774\uB984:"},
-        {"Target.Name.",
-                "\uB300\uC0C1 \uC774\uB984:                                                    "},
-        {"Actions.",
-                "\uC791\uC5C5:                                                             "},
-        {"OK.to.overwrite.existing.file.filename.",
-                "\uAE30\uC874 \uD30C\uC77C {0}\uC744(\uB97C) \uACB9\uCCD0 \uC4F0\uACA0\uC2B5\uB2C8\uAE4C?"},
-        {"Cancel", "\uCDE8\uC18C"},
-        {"CodeBase.", "CodeBase:"},
-        {"SignedBy.", "SignedBy:"},
-        {"Add.Principal", "\uC8FC\uCCB4 \uCD94\uAC00"},
-        {"Edit.Principal", "\uC8FC\uCCB4 \uD3B8\uC9D1"},
-        {"Remove.Principal", "\uC8FC\uCCB4 \uC81C\uAC70"},
-        {"Principals.", "\uC8FC\uCCB4:"},
-        {".Add.Permission", "  \uAD8C\uD55C \uCD94\uAC00"},
-        {".Edit.Permission", "  \uAD8C\uD55C \uD3B8\uC9D1"},
-        {"Remove.Permission", "\uAD8C\uD55C \uC81C\uAC70"},
-        {"Done", "\uC644\uB8CC"},
-        {"KeyStore.URL.", "\uD0A4 \uC800\uC7A5\uC18C URL:"},
-        {"KeyStore.Type.", "\uD0A4 \uC800\uC7A5\uC18C \uC720\uD615:"},
-        {"KeyStore.Provider.", "\uD0A4 \uC800\uC7A5\uC18C \uC81C\uACF5\uC790:"},
-        {"KeyStore.Password.URL.", "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638 URL:"},
-        {"Principals", "\uC8FC\uCCB4"},
-        {".Edit.Principal.", "  \uC8FC\uCCB4 \uD3B8\uC9D1:"},
-        {".Add.New.Principal.", "  \uC0C8 \uC8FC\uCCB4 \uCD94\uAC00:"},
-        {"Permissions", "\uAD8C\uD55C"},
-        {".Edit.Permission.", "  \uAD8C\uD55C \uD3B8\uC9D1:"},
-        {".Add.New.Permission.", "  \uC0C8 \uAD8C\uD55C \uCD94\uAC00:"},
-        {"Signed.By.", "\uC11C\uBA85\uC790:"},
-        {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name",
-            "\uC640\uC77C\uB4DC \uCE74\uB4DC \uBB38\uC790 \uC774\uB984 \uC5C6\uC774 \uC640\uC77C\uB4DC \uCE74\uB4DC \uBB38\uC790 \uD074\uB798\uC2A4\uB97C \uC0AC\uC6A9\uD558\uB294 \uC8FC\uCCB4\uB97C \uC9C0\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"Cannot.Specify.Principal.without.a.Name",
-            "\uC774\uB984 \uC5C6\uC774 \uC8FC\uCCB4\uB97C \uC9C0\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"Permission.and.Target.Name.must.have.a.value",
-                "\uAD8C\uD55C\uACFC \uB300\uC0C1 \uC774\uB984\uC758 \uAC12\uC774 \uC788\uC5B4\uC57C \uD569\uB2C8\uB2E4."},
-        {"Remove.this.Policy.Entry.", "\uC774 \uC815\uCC45 \uD56D\uBAA9\uC744 \uC81C\uAC70\uD558\uACA0\uC2B5\uB2C8\uAE4C?"},
-        {"Overwrite.File", "\uD30C\uC77C \uACB9\uCCD0\uC4F0\uAE30"},
-        {"Policy.successfully.written.to.filename",
-                "{0}\uC5D0 \uC131\uACF5\uC801\uC73C\uB85C \uC815\uCC45\uC744 \uC37C\uC2B5\uB2C8\uB2E4."},
-        {"null.filename", "\uB110 \uD30C\uC77C \uC774\uB984"},
-        {"Save.changes.", "\uBCC0\uACBD \uC0AC\uD56D\uC744 \uC800\uC7A5\uD558\uACA0\uC2B5\uB2C8\uAE4C?"},
-        {"Yes", "\uC608"},
-        {"No", "\uC544\uB2C8\uC624"},
-        {"Policy.Entry", "\uC815\uCC45 \uD56D\uBAA9"},
-        {"Save.Changes", "\uBCC0\uACBD \uC0AC\uD56D \uC800\uC7A5"},
-        {"No.Policy.Entry.selected", "\uC120\uD0DD\uB41C \uC815\uCC45 \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"Unable.to.open.KeyStore.ex.toString.",
-                "\uD0A4 \uC800\uC7A5\uC18C\uB97C \uC5F4 \uC218 \uC5C6\uC74C: {0}"},
-        {"No.principal.selected", "\uC120\uD0DD\uB41C \uC8FC\uCCB4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"No.permission.selected", "\uC120\uD0DD\uB41C \uAD8C\uD55C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"name", "\uC774\uB984"},
-        {"configuration.type", "\uAD6C\uC131 \uC720\uD615"},
-        {"environment.variable.name", "\uD658\uACBD \uBCC0\uC218 \uC774\uB984"},
-        {"library.name", "\uB77C\uC774\uBE0C\uB7EC\uB9AC \uC774\uB984"},
-        {"package.name", "\uD328\uD0A4\uC9C0 \uC774\uB984"},
-        {"policy.type", "\uC815\uCC45 \uC720\uD615"},
-        {"property.name", "\uC18D\uC131 \uC774\uB984"},
-        {"Principal.List", "\uC8FC\uCCB4 \uBAA9\uB85D"},
-        {"Permission.List", "\uAD8C\uD55C \uBAA9\uB85D"},
-        {"Code.Base", "\uCF54\uB4DC \uBCA0\uC774\uC2A4"},
-        {"KeyStore.U.R.L.", "\uD0A4 \uC800\uC7A5\uC18C URL:"},
-        {"KeyStore.Password.U.R.L.", "\uD0A4 \uC800\uC7A5\uC18C \uBE44\uBC00\uBC88\uD638 URL:"},
-
-
-        // javax.security.auth.PrivateCredentialPermission
-        {"invalid.null.input.s.", "\uB110 \uC785\uB825\uAC12\uC774 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4."},
-        {"actions.can.only.be.read.", "\uC791\uC5C5\uC740 '\uC77D\uAE30' \uC804\uC6A9\uC785\uB2C8\uB2E4."},
-        {"permission.name.name.syntax.invalid.",
-                "\uAD8C\uD55C \uC774\uB984 [{0}] \uAD6C\uBB38\uC774 \uBD80\uC801\uD569\uD568: "},
-        {"Credential.Class.not.followed.by.a.Principal.Class.and.Name",
-                "\uC778\uC99D\uC11C \uD074\uB798\uC2A4 \uB2E4\uC74C\uC5D0 \uC8FC\uCCB4 \uD074\uB798\uC2A4\uC640 \uC774\uB984\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"Principal.Class.not.followed.by.a.Principal.Name",
-                "\uC8FC\uCCB4 \uD074\uB798\uC2A4 \uB2E4\uC74C\uC5D0 \uC8FC\uCCB4 \uC774\uB984\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"Principal.Name.must.be.surrounded.by.quotes",
-                "\uC8FC\uCCB4 \uC774\uB984\uC740 \uB530\uC634\uD45C\uB85C \uBB36\uC5B4\uC57C \uD569\uB2C8\uB2E4."},
-        {"Principal.Name.missing.end.quote",
-                "\uC8FC\uCCB4 \uC774\uB984\uC5D0 \uB2EB\uB294 \uB530\uC634\uD45C\uAC00 \uB204\uB77D\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {"PrivateCredentialPermission.Principal.Class.can.not.be.a.wildcard.value.if.Principal.Name.is.not.a.wildcard.value",
-                "\uC8FC\uCCB4 \uC774\uB984\uC774 \uC640\uC77C\uB4DC \uCE74\uB4DC \uBB38\uC790(*) \uAC12\uC774 \uC544\uB2CC \uACBD\uC6B0 PrivateCredentialPermission \uC8FC\uCCB4 \uD074\uB798\uC2A4\uB294 \uC640\uC77C\uB4DC \uCE74\uB4DC \uBB38\uC790(*) \uAC12\uC77C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"CredOwner.Principal.Class.class.Principal.Name.name",
-                "CredOwner:\n\t\uC8FC\uCCB4 \uD074\uB798\uC2A4 = {0}\n\t\uC8FC\uCCB4 \uC774\uB984 = {1}"},
-
-        // javax.security.auth.x500
-        {"provided.null.name", "\uB110 \uC774\uB984\uC744 \uC81C\uACF5\uD588\uC2B5\uB2C8\uB2E4."},
-        {"provided.null.keyword.map", "\uB110 \uD0A4\uC6CC\uB4DC \uB9F5\uC744 \uC81C\uACF5\uD588\uC2B5\uB2C8\uB2E4."},
-        {"provided.null.OID.map", "\uB110 OID \uB9F5\uC744 \uC81C\uACF5\uD588\uC2B5\uB2C8\uB2E4."},
-
-        // javax.security.auth.Subject
-        {"invalid.null.AccessControlContext.provided",
-                "\uBD80\uC801\uD569\uD55C \uB110 AccessControlContext\uAC00 \uC81C\uACF5\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {"invalid.null.action.provided", "\uBD80\uC801\uD569\uD55C \uB110 \uC791\uC5C5\uC774 \uC81C\uACF5\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {"invalid.null.Class.provided", "\uBD80\uC801\uD569\uD55C \uB110 \uD074\uB798\uC2A4\uAC00 \uC81C\uACF5\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {"Subject.", "\uC81C\uBAA9:\n"},
-        {".Principal.", "\\\uC8FC\uCCB4: "},
-        {".Public.Credential.", "\t\uACF5\uC6A9 \uC778\uC99D\uC11C: "},
-        {".Private.Credentials.inaccessible.",
-                "\t\uC804\uC6A9 \uC778\uC99D\uC11C\uC5D0 \uC561\uC138\uC2A4\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n"},
-        {".Private.Credential.", "\t\uC804\uC6A9 \uC778\uC99D\uC11C: "},
-        {".Private.Credential.inaccessible.",
-                "\t\uC804\uC6A9 \uC778\uC99D\uC11C\uC5D0 \uC561\uC138\uC2A4\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n"},
-        {"Subject.is.read.only", "\uC81C\uBAA9\uC774 \uC77D\uAE30 \uC804\uC6A9\uC785\uB2C8\uB2E4."},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.java.security.Principal.to.a.Subject.s.Principal.Set",
-                "java.security.Principal\uC758 \uC778\uC2A4\uD134\uC2A4\uAC00 \uC544\uB2CC \uAC1D\uCCB4\uB97C \uC81C\uBAA9\uC758 \uC8FC\uCCB4 \uC9D1\uD569\uC5D0 \uCD94\uAC00\uD558\uB824\uACE0 \uC2DC\uB3C4\uD558\uB294 \uC911"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.class",
-                "{0}\uC758 \uC778\uC2A4\uD134\uC2A4\uAC00 \uC544\uB2CC \uAC1D\uCCB4\uB97C \uCD94\uAC00\uD558\uB824\uACE0 \uC2DC\uB3C4\uD558\uB294 \uC911"},
-
-        // javax.security.auth.login.AppConfigurationEntry
-        {"LoginModuleControlFlag.", "LoginModuleControlFlag: "},
-
-        // javax.security.auth.login.LoginContext
-        {"Invalid.null.input.name", "\uBD80\uC801\uD569\uD55C \uB110 \uC785\uB825\uAC12: \uC774\uB984"},
-        {"No.LoginModules.configured.for.name",
-         "{0}\uC5D0 \uB300\uD574 \uAD6C\uC131\uB41C LoginModules\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"invalid.null.Subject.provided", "\uBD80\uC801\uD569\uD55C \uB110 \uC81C\uBAA9\uC774 \uC81C\uACF5\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {"invalid.null.CallbackHandler.provided",
-                "\uBD80\uC801\uD569\uD55C \uB110 CallbackHandler\uAC00 \uC81C\uACF5\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {"null.subject.logout.called.before.login",
-                "\uB110 \uC81C\uBAA9 - \uB85C\uADF8\uC778 \uC804\uC5D0 \uB85C\uADF8\uC544\uC6C3\uC774 \uD638\uCD9C\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {"unable.to.instantiate.LoginModule.module.because.it.does.not.provide.a.no.argument.constructor",
-                "\uC778\uC218\uAC00 \uC5C6\uB294 \uC0DD\uC131\uC790\uB97C \uC81C\uACF5\uD558\uC9C0 \uC54A\uC544 LoginModule {0}\uC744(\uB97C) \uC778\uC2A4\uD134\uC2A4\uD654\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"unable.to.instantiate.LoginModule",
-                "LoginModule\uC744 \uC778\uC2A4\uD134\uC2A4\uD654\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"unable.to.instantiate.LoginModule.",
-                "LoginModule\uC744 \uC778\uC2A4\uD134\uC2A4\uD654\uD560 \uC218 \uC5C6\uC74C: "},
-        {"unable.to.find.LoginModule.class.",
-                "LoginModule \uD074\uB798\uC2A4\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC74C: "},
-        {"unable.to.access.LoginModule.",
-                "LoginModule\uC5D0 \uC561\uC138\uC2A4\uD560 \uC218 \uC5C6\uC74C: "},
-        {"Login.Failure.all.modules.ignored",
-                "\uB85C\uADF8\uC778 \uC2E4\uD328: \uBAA8\uB4E0 \uBAA8\uB4C8\uC774 \uBB34\uC2DC\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-
-        // sun.security.provider.PolicyFile
-
-        {"java.security.policy.error.parsing.policy.message",
-                "java.security.policy: {0}\uC758 \uAD6C\uBB38\uC744 \uBD84\uC11D\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD:\n\t{1}"},
-        {"java.security.policy.error.adding.Permission.perm.message",
-                "java.security.policy: {0} \uAD8C\uD55C\uC744 \uCD94\uAC00\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD:\n\t{1}"},
-        {"java.security.policy.error.adding.Entry.message",
-                "java.security.policy: \uD56D\uBAA9\uC744 \uCD94\uAC00\uD558\uB294 \uC911 \uC624\uB958 \uBC1C\uC0DD:\n\t{0}"},
-        {"alias.name.not.provided.pe.name.", "\uBCC4\uCE6D \uC774\uB984\uC774 \uC81C\uACF5\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4({0})."},
-        {"unable.to.perform.substitution.on.alias.suffix",
-                "{0} \uBCC4\uCE6D\uC744 \uB300\uCCB4\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"substitution.value.prefix.unsupported",
-                "\uB300\uCCB4 \uAC12 {0}\uC740(\uB294) \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."},
-        {"LPARAM", "("},
-        {"RPARAM", ")"},
-        {"type.can.t.be.null","\uC720\uD615\uC740 \uB110\uC77C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."},
-
-        // sun.security.provider.PolicyParser
-        {"keystorePasswordURL.can.not.be.specified.without.also.specifying.keystore",
-                "\uD0A4 \uC800\uC7A5\uC18C\uB97C \uC9C0\uC815\uD558\uC9C0 \uC54A\uACE0 keystorePasswordURL\uC744 \uC9C0\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"expected.keystore.type", "\uD0A4 \uC800\uC7A5\uC18C \uC720\uD615\uC774 \uD544\uC694\uD569\uB2C8\uB2E4."},
-        {"expected.keystore.provider", "\uD0A4 \uC800\uC7A5\uC18C \uC81C\uACF5\uC790\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4."},
-        {"multiple.Codebase.expressions",
-                "Codebase \uD45C\uD604\uC2DD\uC774 \uC5EC\uB7EC \uAC1C\uC785\uB2C8\uB2E4."},
-        {"multiple.SignedBy.expressions","SignedBy \uD45C\uD604\uC2DD\uC774 \uC5EC\uB7EC \uAC1C\uC785\uB2C8\uB2E4."},
-        {"SignedBy.has.empty.alias","SignedBy\uC758 \uBCC4\uCE6D\uC774 \uBE44\uC5B4 \uC788\uC2B5\uB2C8\uB2E4."},
-        {"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
-                "\uC640\uC77C\uB4DC \uCE74\uB4DC \uBB38\uC790 \uC774\uB984 \uC5C6\uC774 \uC640\uC77C\uB4DC \uCE74\uB4DC \uBB38\uC790 \uD074\uB798\uC2A4\uB97C \uC0AC\uC6A9\uD558\uB294 \uC8FC\uCCB4\uB97C \uC9C0\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."},
-        {"expected.codeBase.or.SignedBy.or.Principal",
-                "codeBase, SignedBy \uB610\uB294 \uC8FC\uCCB4\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4."},
-        {"expected.permission.entry", "\uAD8C\uD55C \uD56D\uBAA9\uC774 \uD544\uC694\uD569\uB2C8\uB2E4."},
-        {"number.", "\uC22B\uC790 "},
-        {"expected.expect.read.end.of.file.",
-                "[{0}]\uC774(\uAC00) \uD544\uC694\uD558\uC9C0\uB9CC [\uD30C\uC77C\uC758 \uB05D]\uAE4C\uC9C0 \uC77D\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {"expected.read.end.of.file.",
-                "[;]\uC774 \uD544\uC694\uD558\uC9C0\uB9CC [\uD30C\uC77C\uC758 \uB05D]\uAE4C\uC9C0 \uC77D\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {"line.number.msg", "{0} \uD589: {1}"},
-        {"line.number.expected.expect.found.actual.",
-                "{0} \uD589: [{1}]\uC774(\uAC00) \uD544\uC694\uD558\uC9C0\uB9CC [{2}]\uC774(\uAC00) \uBC1C\uACAC\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-        {"null.principalClass.or.principalName",
-                "principalClass \uB610\uB294 principalName\uC774 \uB110\uC785\uB2C8\uB2E4."},
-
-        // sun.security.pkcs11.SunPKCS11
-        {"PKCS11.Token.providerName.Password.",
-                "PKCS11 \uD1A0\uD070 [{0}] \uBE44\uBC00\uBC88\uD638: "},
-
-        /* --- DEPRECATED --- */
-        // javax.security.auth.Policy
-        {"unable.to.instantiate.Subject.based.policy",
-                "\uC81C\uBAA9 \uAE30\uBC18 \uC815\uCC45\uC744 \uC778\uC2A4\uD134\uC2A4\uD654\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."}
-    };
-
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     *
-     * <p>
-     *
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-}
-
diff --git a/ojluni/src/main/java/sun/security/util/Resources_pt_BR.java b/ojluni/src/main/java/sun/security/util/Resources_pt_BR.java
deleted file mode 100755
index 152844d..0000000
--- a/ojluni/src/main/java/sun/security/util/Resources_pt_BR.java
+++ /dev/null
@@ -1,661 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, 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.
- */
-
-package sun.security.util;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for javax.security.auth and sun.security.
- *
- */
-public class Resources_pt_BR extends java.util.ListResourceBundle {
-
-    private static final Object[][] contents = {
-
-        // shared (from jarsigner)
-        {"SPACE", " "},
-        {"2SPACE", "  "},
-        {"6SPACE", "      "},
-        {"COMMA", ", "},
-        // shared (from keytool)
-        {"NEWLINE", "\n"},
-        {"STAR",
-                "*******************************************"},
-        {"STARNN",
-                "*******************************************\n\n"},
-
-        // keytool: Help part
-        {".OPTION.", " [OPTION]..."},
-        {"Options.", "Op\u00E7\u00F5es:"},
-        {"Use.keytool.help.for.all.available.commands",
-                 "Use \"keytool -help\" para todos os comandos dispon\u00EDveis"},
-        {"Key.and.Certificate.Management.Tool",
-                 "Ferramenta de Gerenciamento de Chave e Certificado"},
-        {"Commands.", "Comandos:"},
-        {"Use.keytool.command.name.help.for.usage.of.command.name",
-                "Use \"keytool -command_name -help\" para uso de command_name"},
-        // keytool: help: commands
-        {"Generates.a.certificate.request",
-                "Gera uma solicita\u00E7\u00E3o de certificado"}, //-certreq
-        {"Changes.an.entry.s.alias",
-                "Altera um alias de entrada"}, //-changealias
-        {"Deletes.an.entry",
-                "Deleta uma entrada"}, //-delete
-        {"Exports.certificate",
-                "Exporta o certificado"}, //-exportcert
-        {"Generates.a.key.pair",
-                "Gera um par de chaves"}, //-genkeypair
-        {"Generates.a.secret.key",
-                "Gera uma chave secreta"}, //-genseckey
-        {"Generates.certificate.from.a.certificate.request",
-                "Gera um certificado de uma solicita\u00E7\u00E3o de certificado"}, //-gencert
-        {"Generates.CRL", "Gera CRL"}, //-gencrl
-        {"Imports.entries.from.a.JDK.1.1.x.style.identity.database",
-                "Importa entradas de um banco de dados de identidade JDK 1.1.x-style"}, //-identitydb
-        {"Imports.a.certificate.or.a.certificate.chain",
-                "Importa um certificado ou uma cadeia de certificados"}, //-importcert
-        {"Imports.one.or.all.entries.from.another.keystore",
-                "Importa uma ou todas as entradas de outra \u00E1rea de armazenamento de chaves"}, //-importkeystore
-        {"Clones.a.key.entry",
-                "Clona uma entrada de chave"}, //-keyclone
-        {"Changes.the.key.password.of.an.entry",
-                "Altera a senha da chave de uma entrada"}, //-keypasswd
-        {"Lists.entries.in.a.keystore",
-                "Lista entradas em uma \u00E1rea de armazenamento de chaves"}, //-list
-        {"Prints.the.content.of.a.certificate",
-                "Imprime o conte\u00FAdo de um certificado"}, //-printcert
-        {"Prints.the.content.of.a.certificate.request",
-                "Imprime o conte\u00FAdo de uma solicita\u00E7\u00E3o de certificado"}, //-printcertreq
-        {"Prints.the.content.of.a.CRL.file",
-                "Imprime o conte\u00FAdo de um arquivo CRL"}, //-printcrl
-        {"Generates.a.self.signed.certificate",
-                "Gera um certificado autoassinado"}, //-selfcert
-        {"Changes.the.store.password.of.a.keystore",
-                "Altera a senha de armazenamento de uma \u00E1rea de armazenamento de chaves"}, //-storepasswd
-        // keytool: help: options
-        {"alias.name.of.the.entry.to.process",
-                "nome do alias da entrada a ser processada"}, //-alias
-        {"destination.alias",
-                "alias de destino"}, //-destalias
-        {"destination.key.password",
-                "senha da chave de destino"}, //-destkeypass
-        {"destination.keystore.name",
-                "nome da \u00E1rea de armazenamento de chaves de destino"}, //-destkeystore
-        {"destination.keystore.password.protected",
-                "senha protegida da \u00E1rea de armazenamento de chaves de destino"}, //-destprotected
-        {"destination.keystore.provider.name",
-                "nome do fornecedor da \u00E1rea de armazenamento de chaves de destino"}, //-destprovidername
-        {"destination.keystore.password",
-                "senha da \u00E1rea de armazenamento de chaves de destino"}, //-deststorepass
-        {"destination.keystore.type",
-                "tipo de \u00E1rea de armazenamento de chaves de destino"}, //-deststoretype
-        {"distinguished.name",
-                "nome distinto"}, //-dname
-        {"X.509.extension",
-                "extens\u00E3o X.509"}, //-ext
-        {"output.file.name",
-                "nome do arquivo de sa\u00EDda"}, //-file and -outfile
-        {"input.file.name",
-                "nome do arquivo de entrada"}, //-file and -infile
-        {"key.algorithm.name",
-                "nome do algoritmo da chave"}, //-keyalg
-        {"key.password",
-                "senha da chave"}, //-keypass
-        {"key.bit.size",
-                "tamanho do bit da chave"}, //-keysize
-        {"keystore.name",
-                "nome da \u00E1rea de armazenamento de chaves"}, //-keystore
-        {"new.password",
-                "nova senha"}, //-new
-        {"do.not.prompt",
-                "n\u00E3o perguntar"}, //-noprompt
-        {"password.through.protected.mechanism",
-                "senha por meio de mecanismo protegido"}, //-protected
-        {"provider.argument",
-                "argumento do fornecedor"}, //-providerarg
-        {"provider.class.name",
-                "nome da classe do fornecedor"}, //-providerclass
-        {"provider.name",
-                "nome do fornecedor"}, //-providername
-        {"provider.classpath",
-                "classpath do fornecedor"}, //-providerpath
-        {"output.in.RFC.style",
-                "sa\u00EDda no estilo RFC"}, //-rfc
-        {"signature.algorithm.name",
-                "nome do algoritmo de assinatura"}, //-sigalg
-        {"source.alias",
-                "alias de origem"}, //-srcalias
-        {"source.key.password",
-                "senha da chave de origem"}, //-srckeypass
-        {"source.keystore.name",
-                "nome da \u00E1rea de armazenamento de chaves de origem"}, //-srckeystore
-        {"source.keystore.password.protected",
-                "senha protegida da \u00E1rea de armazenamento de chaves de origem"}, //-srcprotected
-        {"source.keystore.provider.name",
-                "nome do fornecedor da \u00E1rea de armazenamento de chaves de origem"}, //-srcprovidername
-        {"source.keystore.password",
-                "senha da \u00E1rea de armazenamento de chaves de origem"}, //-srcstorepass
-        {"source.keystore.type",
-                "tipo de \u00E1rea de armazenamento de chaves de origem"}, //-srcstoretype
-        {"SSL.server.host.and.port",
-                "porta e host do servidor SSL"}, //-sslserver
-        {"signed.jar.file",
-                "arquivo jar assinado"}, //=jarfile
-        {"certificate.validity.start.date.time",
-                "data/hora inicial de validade do certificado"}, //-startdate
-        {"keystore.password",
-                "senha da \u00E1rea de armazenamento de chaves"}, //-storepass
-        {"keystore.type",
-                "tipo de \u00E1rea de armazenamento de chaves"}, //-storetype
-        {"trust.certificates.from.cacerts",
-                "certificados confi\u00E1veis do cacerts"}, //-trustcacerts
-        {"verbose.output",
-                "sa\u00EDda detalhada"}, //-v
-        {"validity.number.of.days",
-                "n\u00FAmero de dias da validade"}, //-validity
-        {"Serial.ID.of.cert.to.revoke",
-                 "ID de s\u00E9rie do certificado a ser revogado"}, //-id
-        // keytool: Running part
-        {"keytool.error.", "erro de keytool: "},
-        {"Illegal.option.", "Op\u00E7\u00E3o inv\u00E1lida:  "},
-        {"Illegal.value.", "Valor inv\u00E1lido: "},
-        {"Unknown.password.type.", "Tipo de senha desconhecido: "},
-        {"Cannot.find.environment.variable.",
-                "N\u00E3o \u00E9 poss\u00EDvel localizar a vari\u00E1vel do ambiente: "},
-        {"Cannot.find.file.", "N\u00E3o \u00E9 poss\u00EDvel localizar o arquivo: "},
-        {"Command.option.flag.needs.an.argument.", "A op\u00E7\u00E3o de comando {0} precisa de um argumento."},
-        {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.",
-                "Advert\u00EAncia: Senhas de chave e de armazenamento diferentes n\u00E3o suportadas para KeyStores PKCS12. Ignorando valor {0} especificado pelo usu\u00E1rio."},
-        {".keystore.must.be.NONE.if.storetype.is.{0}",
-                "-keystore deve ser NONE se -storetype for {0}"},
-        {"Too.many.retries.program.terminated",
-                 "Excesso de tentativas de repeti\u00E7\u00E3o; programa finalizado"},
-        {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}",
-                "comandos -storepasswd e -keypasswd n\u00E3o suportados se -storetype for {0}"},
-        {".keypasswd.commands.not.supported.if.storetype.is.PKCS12",
-                "comandos -keypasswd n\u00E3o suportados se -storetype for PKCS12"},
-        {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}",
-                "-keypass e -new n\u00E3o podem ser especificados se -storetype for {0}"},
-        {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified",
-                "se -protected for especificado, ent\u00E3o -storepass, -keypass e -new n\u00E3o dever\u00E3o ser especificados"},
-        {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "se -srcprotected for especificado, ent\u00E3o -srcstorepass e -srckeypass n\u00E3o dever\u00E3o ser especificados"},
-        {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified",
-                "se a \u00E1rea de armazenamento de chaves n\u00E3o estiver protegida por senha, ent\u00E3o -storepass, -keypass e -new n\u00E3o dever\u00E3o ser especificados"},
-        {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "se a \u00E1rea de armazenamento de chaves de origem n\u00E3o estiver protegida por senha, ent\u00E3o -srcstorepass e -srckeypass n\u00E3o dever\u00E3o ser especificados"},
-        {"Illegal.startdate.value", "valor da data inicial inv\u00E1lido"},
-        {"Validity.must.be.greater.than.zero",
-                "A validade deve ser maior do que zero"},
-        {"provName.not.a.provider", "{0} n\u00E3o \u00E9 um fornecedor"},
-        {"Usage.error.no.command.provided", "Erro de uso: nenhum comando fornecido"},
-        {"Source.keystore.file.exists.but.is.empty.", "O arquivo da \u00E1rea de armazenamento de chaves de origem existe, mas est\u00E1 vazio: "},
-        {"Please.specify.srckeystore", "Especifique -srckeystore"},
-        {"Must.not.specify.both.v.and.rfc.with.list.command",
-                "N\u00E3o devem ser especificados -v e -rfc com o comando 'list'"},
-        {"Key.password.must.be.at.least.6.characters",
-                "A senha da chave deve ter, no m\u00EDnimo, 6 caracteres"},
-        {"New.password.must.be.at.least.6.characters",
-                "A nova senha deve ter, no m\u00EDnimo, 6 caracteres"},
-        {"Keystore.file.exists.but.is.empty.",
-                "O arquivo da \u00E1rea de armazenamento de chaves existe, mas est\u00E1 vazio: "},
-        {"Keystore.file.does.not.exist.",
-                "O arquivo da \u00E1rea de armazenamento de chaves n\u00E3o existe. "},
-        {"Must.specify.destination.alias", "Deve ser especificado um alias de destino"},
-        {"Must.specify.alias", "Deve ser especificado um alias"},
-        {"Keystore.password.must.be.at.least.6.characters",
-                "A senha da \u00E1rea de armazenamento de chaves deve ter, no m\u00EDnimo, 6 caracteres"},
-        {"Enter.keystore.password.", "Informe a senha da \u00E1rea de armazenamento de chaves:  "},
-        {"Enter.source.keystore.password.", "Informe a senha da \u00E1rea de armazenamento de chaves de origem:  "},
-        {"Enter.destination.keystore.password.", "Informe a senha da \u00E1rea de armazenamento de chaves de destino:  "},
-        {"Keystore.password.is.too.short.must.be.at.least.6.characters",
-         "A senha da \u00E1rea de armazenamento de chaves \u00E9 muito curta - ela deve ter, no m\u00EDnimo, 6 caracteres"},
-        {"Unknown.Entry.Type", "Tipo de Entrada Desconhecido"},
-        {"Too.many.failures.Alias.not.changed", "Excesso de falhas. Alias n\u00E3o alterado"},
-        {"Entry.for.alias.alias.successfully.imported.",
-                 "Entrada do alias {0} importada com \u00EAxito."},
-        {"Entry.for.alias.alias.not.imported.", "Entrada do alias {0} n\u00E3o importada."},
-        {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.",
-                 "Problema ao importar a entrada do alias {0}: {1}.\nEntrada do alias {0} n\u00E3o importada."},
-        {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled",
-                 "Comando de importa\u00E7\u00E3o conclu\u00EDdo:  {0} entradas importadas com \u00EAxito, {1} entradas falharam ou foram canceladas"},
-        {"Warning.Overwriting.existing.alias.alias.in.destination.keystore",
-                 "Advert\u00EAncia: Substitui\u00E7\u00E3o do alias {0} existente na \u00E1rea de armazenamento de chaves de destino"},
-        {"Existing.entry.alias.alias.exists.overwrite.no.",
-                 "Entrada j\u00E1 existente no alias {0}, substituir? [n\u00E3o]:  "},
-        {"Too.many.failures.try.later", "Excesso de falhas - tente mais tarde"},
-        {"Certification.request.stored.in.file.filename.",
-                "Solicita\u00E7\u00E3o de certificado armazenada no arquivo <{0}>"},
-        {"Submit.this.to.your.CA", "Submeter \u00E0 CA"},
-        {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
-            "se o alias n\u00E3o estiver especificado, destalias, srckeypass e destkeypass n\u00E3o dever\u00E3o ser especificados"},
-        {"Certificate.stored.in.file.filename.",
-                "Certificado armazenado no arquivo <{0}>"},
-        {"Certificate.reply.was.installed.in.keystore",
-                "A resposta do certificado foi instalada na \u00E1rea de armazenamento de chaves"},
-        {"Certificate.reply.was.not.installed.in.keystore",
-                "A resposta do certificado n\u00E3o foi instalada na \u00E1rea de armazenamento de chaves"},
-        {"Certificate.was.added.to.keystore",
-                "O certificado foi adicionado \u00E0 \u00E1rea de armazenamento de chaves"},
-        {"Certificate.was.not.added.to.keystore",
-                "O certificado n\u00E3o foi adicionado \u00E0 \u00E1rea de armazenamento de chaves"},
-        {".Storing.ksfname.", "[Armazenando {0}]"},
-        {"alias.has.no.public.key.certificate.",
-                "{0} n\u00E3o tem chave p\u00FAblica (certificado)"},
-        {"Cannot.derive.signature.algorithm",
-                "N\u00E3o \u00E9 poss\u00EDvel obter um algoritmo de assinatura"},
-        {"Alias.alias.does.not.exist",
-                "O alias <{0}> n\u00E3o existe"},
-        {"Alias.alias.has.no.certificate",
-                "O alias <{0}> n\u00E3o tem certificado"},
-        {"Key.pair.not.generated.alias.alias.already.exists",
-                "Par de chaves n\u00E3o gerado; o alias <{0}> j\u00E1 existe"},
-        {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for",
-                "Gerando o par de chaves {1} de {0} bit e o certificado autoassinado ({2}) com uma validade de {3} dias\n\tpara: {4}"},
-        {"Enter.key.password.for.alias.", "Informar a senha da chave de <{0}>"},
-        {".RETURN.if.same.as.keystore.password.",
-                "\t(RETURN se for igual \u00E0 senha da \u00E1rea do armazenamento de chaves):  "},
-        {"Key.password.is.too.short.must.be.at.least.6.characters",
-                "A senha da chave \u00E9 muito curta - deve ter, no m\u00EDnimo, 6 caracteres"},
-        {"Too.many.failures.key.not.added.to.keystore",
-                "Excesso de falhas - chave n\u00E3o adicionada a \u00E1rea de armazenamento de chaves"},
-        {"Destination.alias.dest.already.exists",
-                "O alias de destino <{0}> j\u00E1 existe"},
-        {"Password.is.too.short.must.be.at.least.6.characters",
-                "A senha \u00E9 muito curta - deve ter, no m\u00EDnimo, 6 caracteres"},
-        {"Too.many.failures.Key.entry.not.cloned",
-                "Excesso de falhas. Entrada da chave n\u00E3o clonada"},
-        {"key.password.for.alias.", "senha da chave de <{0}>"},
-        {"Keystore.entry.for.id.getName.already.exists",
-                "A entrada da \u00E1rea do armazenamento de chaves de <{0}> j\u00E1 existe"},
-        {"Creating.keystore.entry.for.id.getName.",
-                "Criando entrada da \u00E1rea do armazenamento de chaves para <{0}> ..."},
-        {"No.entries.from.identity.database.added",
-                "Nenhuma entrada adicionada do banco de dados de identidades"},
-        {"Alias.name.alias", "Nome do alias: {0}"},
-        {"Creation.date.keyStore.getCreationDate.alias.",
-                "Data de cria\u00E7\u00E3o: {0,date}"},
-        {"alias.keyStore.getCreationDate.alias.",
-                "{0}, {1,date}, "},
-        {"alias.", "{0}, "},
-        {"Entry.type.type.", "Tipo de entrada: {0}"},
-        {"Certificate.chain.length.", "Comprimento da cadeia de certificados: "},
-        {"Certificate.i.1.", "Certificado[{0,number,integer}]:"},
-        {"Certificate.fingerprint.SHA1.", "Fingerprint (SHA1) do certificado: "},
-        {"Keystore.type.", "Tipo de \u00E1rea de armazenamento de chaves: "},
-        {"Keystore.provider.", "Fornecedor da \u00E1rea de armazenamento de chaves: "},
-        {"Your.keystore.contains.keyStore.size.entry",
-                "Sua \u00E1rea de armazenamento de chaves cont\u00E9m {0,number,integer} entrada"},
-        {"Your.keystore.contains.keyStore.size.entries",
-                "Sua \u00E1rea de armazenamento de chaves cont\u00E9m {0,number,integer} entradas"},
-        {"Failed.to.parse.input", "Falha durante o parsing da entrada"},
-        {"Empty.input", "Entrada vazia"},
-        {"Not.X.509.certificate", "N\u00E3o \u00E9 um certificado X.509"},
-        {"alias.has.no.public.key", "{0} n\u00E3o tem chave p\u00FAblica"},
-        {"alias.has.no.X.509.certificate", "{0} n\u00E3o tem certificado X.509"},
-        {"New.certificate.self.signed.", "Novo certificado (autoassinado):"},
-        {"Reply.has.no.certificates", "A resposta n\u00E3o tem certificado"},
-        {"Certificate.not.imported.alias.alias.already.exists",
-                "Certificado n\u00E3o importado, o alias <{0}> j\u00E1 existe"},
-        {"Input.not.an.X.509.certificate", "A entrada n\u00E3o \u00E9 um certificado X.509"},
-        {"Certificate.already.exists.in.keystore.under.alias.trustalias.",
-                "O certificado j\u00E1 existe no armazenamento de chaves no alias <{0}>"},
-        {"Do.you.still.want.to.add.it.no.",
-                "Ainda deseja adicion\u00E1-lo? [n\u00E3o]:  "},
-        {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.",
-                "O certificado j\u00E1 existe na \u00E1rea de armazenamento de chaves da CA em todo o sistema no alias <{0}>"},
-        {"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
-                "Ainda deseja adicion\u00E1-lo \u00E0 sua \u00E1rea de armazenamento de chaves? [n\u00E3o]:  "},
-        {"Trust.this.certificate.no.", "Confiar neste certificado? [n\u00E3o]:  "},
-        {"YES", "SIM"},
-        {"New.prompt.", "Nova {0}: "},
-        {"Passwords.must.differ", "As senhas devem ser diferentes"},
-        {"Re.enter.new.prompt.", "Informe novamente a nova {0}: "},
-        {"Re.enter.new.password.", "Informe novamente a nova senha: "},
-        {"They.don.t.match.Try.again", "Elas n\u00E3o correspondem. Tente novamente"},
-        {"Enter.prompt.alias.name.", "Informe o nome do alias {0}:  "},
-        {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.",
-                 "Informe o novo nome do alias\t(RETURN para cancelar a importa\u00E7\u00E3o desta entrada):  "},
-        {"Enter.alias.name.", "Informe o nome do alias:  "},
-        {".RETURN.if.same.as.for.otherAlias.",
-                "\t(RETURN se for igual ao de <{0}>)"},
-        {".PATTERN.printX509Cert",
-                "Propriet\u00E1rio: {0}\nEmissor: {1}\nN\u00FAmero de s\u00E9rie: {2}\nV\u00E1lido de: {3} a: {4}\nFingerprints do certificado:\n\t MD5:  {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Nome do algoritmo de assinatura: {8}\n\t Vers\u00E3o: {9}"},
-        {"What.is.your.first.and.last.name.",
-                "Qual \u00E9 o seu nome e o seu sobrenome?"},
-        {"What.is.the.name.of.your.organizational.unit.",
-                "Qual \u00E9 o nome da sua unidade organizacional?"},
-        {"What.is.the.name.of.your.organization.",
-                "Qual \u00E9 o nome da sua empresa?"},
-        {"What.is.the.name.of.your.City.or.Locality.",
-                "Qual \u00E9 o nome da sua Cidade ou Localidade?"},
-        {"What.is.the.name.of.your.State.or.Province.",
-                "Qual \u00E9 o nome do seu Estado ou Munic\u00EDpio?"},
-        {"What.is.the.two.letter.country.code.for.this.unit.",
-                "Quais s\u00E3o as duas letras do c\u00F3digo do pa\u00EDs desta unidade?"},
-        {"Is.name.correct.", "{0} Est\u00E1 correto?"},
-        {"no", "n\u00E3o"},
-        {"yes", "sim"},
-        {"y", "s"},
-        {".defaultValue.", "  [{0}]:  "},
-        {"Alias.alias.has.no.key",
-                "O alias <{0}> n\u00E3o tem chave"},
-        {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key",
-                 "O alias <{0}> faz refer\u00EAncia a um tipo de entrada que n\u00E3o \u00E9 uma entrada de chave privada. O comando -keyclone oferece suporte somente \u00E0 clonagem de entradas de chave privada"},
-
-        {".WARNING.WARNING.WARNING.",
-            "*****************  WARNING WARNING WARNING  *****************"},
-        {"Signer.d.", "Signat\u00E1rio #%d:"},
-        {"Timestamp.", "Timestamp:"},
-        {"Signature.", "Assinatura:"},
-        {"CRLs.", "CRLs:"},
-        {"Certificate.owner.", "Propriet\u00E1rio do certificado: "},
-        {"Not.a.signed.jar.file", "N\u00E3o \u00E9 um arquivo jar assinado"},
-        {"No.certificate.from.the.SSL.server",
-                "N\u00E3o \u00E9 um certificado do servidor SSL"},
-
-        {".The.integrity.of.the.information.stored.in.your.keystore.",
-            "* A integridade das informa\u00E7\u00F5es armazenadas na sua \u00E1rea de armazenamento de chaves  *\n* N\u00C3O foi verificada!  Para que seja poss\u00EDvel verificar sua integridade, *\n* voc\u00EA deve fornecer a senha da \u00E1rea de armazenamento de chaves.                  *"},
-        {".The.integrity.of.the.information.stored.in.the.srckeystore.",
-            "* A integridade das informa\u00E7\u00F5es armazenadas no srckeystore  *\n* N\u00C3O foi verificada!  Para que seja poss\u00EDvel verificar sua integridade, *\n* voc\u00EA deve fornecer a senha do srckeystore.                  *"},
-
-        {"Certificate.reply.does.not.contain.public.key.for.alias.",
-                "A resposta do certificado n\u00E3o cont\u00E9m a chave p\u00FAblica de <{0}>"},
-        {"Incomplete.certificate.chain.in.reply",
-                "Cadeia de certificados incompleta na resposta"},
-        {"Certificate.chain.in.reply.does.not.verify.",
-                "A cadeia de certificados da resposta n\u00E3o verifica: "},
-        {"Top.level.certificate.in.reply.",
-                "Certificado de n\u00EDvel superior na resposta:\n"},
-        {".is.not.trusted.", "... n\u00E3o \u00E9 confi\u00E1vel. "},
-        {"Install.reply.anyway.no.", "Instalar resposta assim mesmo? [n\u00E3o]:  "},
-        {"NO", "N\u00C3O"},
-        {"Public.keys.in.reply.and.keystore.don.t.match",
-                "As chaves p\u00FAblicas da resposta e da \u00E1rea de armazenamento de chaves n\u00E3o correspondem"},
-        {"Certificate.reply.and.certificate.in.keystore.are.identical",
-                "O certificado da resposta e o certificado da \u00E1rea de armazenamento de chaves s\u00E3o id\u00EAnticos"},
-        {"Failed.to.establish.chain.from.reply",
-                "Falha ao estabelecer a cadeia a partir da resposta"},
-        {"n", "n"},
-        {"Wrong.answer.try.again", "Resposta errada; tente novamente"},
-        {"Secret.key.not.generated.alias.alias.already.exists",
-                "Chave secreta n\u00E3o gerada; o alias <{0}> j\u00E1 existe"},
-        {"Please.provide.keysize.for.secret.key.generation",
-                "Forne\u00E7a o -keysize para a gera\u00E7\u00E3o da chave secreta"},
-
-        {"Extensions.", "Extens\u00F5es: "},
-        {".Empty.value.", "(Valor vazio)"},
-        {"Extension.Request.", "Solicita\u00E7\u00E3o de Extens\u00E3o:"},
-        {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.",
-                "Solicita\u00E7\u00E3o do Certificado PKCS #10 (Vers\u00E3o 1.0)\nAssunto: %s\nChave P\u00FAblica: %s formato %s chave\n"},
-        {"Unknown.keyUsage.type.", "Tipo de keyUsage desconhecido: "},
-        {"Unknown.extendedkeyUsage.type.", "Tipo de extendedkeyUsage desconhecido: "},
-        {"Unknown.AccessDescription.type.", "Tipo de AccessDescription desconhecido: "},
-        {"Unrecognized.GeneralName.type.", "Tipo de GeneralName n\u00E3o reconhecido: "},
-        {"This.extension.cannot.be.marked.as.critical.",
-                 "Esta extens\u00E3o n\u00E3o pode ser marcada como cr\u00EDtica. "},
-        {"Odd.number.of.hex.digits.found.", "Encontrado n\u00FAmero \u00EDmpar de seis d\u00EDgitos: "},
-        {"Unknown.extension.type.", "Tipo de extens\u00E3o desconhecido: "},
-        {"command.{0}.is.ambiguous.", "o comando {0} \u00E9 amb\u00EDguo:"},
-
-        // policytool
-        {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.",
-                "Advert\u00EAncia: N\u00E3o existe uma chave p\u00FAblica para o alias {0}. Certifique-se de que um KeyStore esteja configurado adequadamente."},
-        {"Warning.Class.not.found.class", "Advert\u00EAncia: Classe n\u00E3o encontrada: {0}"},
-        {"Warning.Invalid.argument.s.for.constructor.arg",
-                "Advert\u00EAncia: Argumento(s) inv\u00E1lido(s) para o construtor: {0}"},
-        {"Illegal.Principal.Type.type", "Tipo Principal Inv\u00E1lido: {0}"},
-        {"Illegal.option.option", "Op\u00E7\u00E3o inv\u00E1lida: {0}"},
-        {"Usage.policytool.options.", "Uso: policytool [op\u00E7\u00F5es]"},
-        {".file.file.policy.file.location",
-                "  [-file <arquivo>]    localiza\u00E7\u00E3o do arquivo de pol\u00EDtica"},
-        {"New", "Novo"},
-        {"Open", "Abrir"},
-        {"Save", "Salvar"},
-        {"Save.As", "Salvar Como"},
-        {"View.Warning.Log", "Exibir Log de Advert\u00EAncias"},
-        {"Exit", "Sair"},
-        {"Add.Policy.Entry", "Adicionar Entrada de Pol\u00EDtica"},
-        {"Edit.Policy.Entry", "Editar Entrada de Pol\u00EDtica"},
-        {"Remove.Policy.Entry", "Remover Entrada de Pol\u00EDtica"},
-        {"Edit", "Editar"},
-        {"Retain", "Reter"},
-
-        {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes",
-            "Advert\u00EAncia: O nome do arquivo pode conter caracteres de escape barra invertida. N\u00E3o \u00E9 necess\u00E1rio fazer o escape dos caracteres de barra invertida (a ferramenta faz o escape dos caracteres conforme necess\u00E1rio ao gravar o conte\u00FAdo da pol\u00EDtica no armazenamento persistente).\n\nClique em Reter para reter o nome da entrada ou clique em Editar para edit\u00E1-lo."},
-
-        {"Add.Public.Key.Alias", "Adicionar Alias de Chave P\u00FAblica"},
-        {"Remove.Public.Key.Alias", "Remover Alias de Chave P\u00FAblica"},
-        {"File", "Arquivo"},
-        {"KeyStore", "KeyStore"},
-        {"Policy.File.", "Arquivo de Pol\u00EDtica:"},
-        {"Could.not.open.policy.file.policyFile.e.toString.",
-                "N\u00E3o foi poss\u00EDvel abrir o arquivo de pol\u00EDtica: {0}: {1}"},
-        {"Policy.Tool", "Ferramenta de Pol\u00EDtica"},
-        {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.",
-                "Erros durante a abertura da configura\u00E7\u00E3o da pol\u00EDtica. Consulte o Log de Advert\u00EAncias para obter mais informa\u00E7\u00F5es."},
-        {"Error", "Erro"},
-        {"OK", "OK"},
-        {"Status", "Status"},
-        {"Warning", "Advert\u00EAncia"},
-        {"Permission.",
-                "Permiss\u00E3o:                                                       "},
-        {"Principal.Type.", "Tipo do Principal:"},
-        {"Principal.Name.", "Nome do Principal:"},
-        {"Target.Name.",
-                "Nome do Alvo:                                                    "},
-        {"Actions.",
-                "A\u00E7\u00F5es:                                                             "},
-        {"OK.to.overwrite.existing.file.filename.",
-                "Est\u00E1 correto substituir o arquivo existente {0}?"},
-        {"Cancel", "Cancelar"},
-        {"CodeBase.", "CodeBase:"},
-        {"SignedBy.", "SignedBy:"},
-        {"Add.Principal", "Adicionar Principal"},
-        {"Edit.Principal", "Editar Principal"},
-        {"Remove.Principal", "Remover Principal"},
-        {"Principals.", "Principais:"},
-        {".Add.Permission", "  Adicionar Permiss\u00E3o"},
-        {".Edit.Permission", "  Editar Permiss\u00E3o"},
-        {"Remove.Permission", "Remover Permiss\u00E3o"},
-        {"Done", "Conclu\u00EDdo"},
-        {"KeyStore.URL.", "URL do KeyStore:"},
-        {"KeyStore.Type.", "Tipo de KeyStore:"},
-        {"KeyStore.Provider.", "Fornecedor de KeyStore:"},
-        {"KeyStore.Password.URL.", "URL da Senha do KeyStore:"},
-        {"Principals", "Principais"},
-        {".Edit.Principal.", "  Editar Principal:"},
-        {".Add.New.Principal.", "  Adicionar Novo Principal:"},
-        {"Permissions", "Permiss\u00F5es"},
-        {".Edit.Permission.", "  Editar Permiss\u00E3o:"},
-        {".Add.New.Permission.", "  Adicionar Nova Permiss\u00E3o:"},
-        {"Signed.By.", "Assinado por:"},
-        {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name",
-            "N\u00E3o \u00E9 Poss\u00EDvel Especificar um Principal com uma Classe de Curinga sem um Nome de Curinga"},
-        {"Cannot.Specify.Principal.without.a.Name",
-            "N\u00E3o \u00E9 Poss\u00EDvel Especificar um Principal sem um Nome"},
-        {"Permission.and.Target.Name.must.have.a.value",
-                "O Nome de Destino e a Permiss\u00E3o devem ter um Valor"},
-        {"Remove.this.Policy.Entry.", "Remover esta Entrada de Pol\u00EDtica?"},
-        {"Overwrite.File", "Substituir Arquivo"},
-        {"Policy.successfully.written.to.filename",
-                "Pol\u00EDtica gravada com \u00EAxito em {0}"},
-        {"null.filename", "nome de arquivo nulo"},
-        {"Save.changes.", "Salvar altera\u00E7\u00F5es?"},
-        {"Yes", "Sim"},
-        {"No", "N\u00E3o"},
-        {"Policy.Entry", "Entrada de Pol\u00EDtica"},
-        {"Save.Changes", "Salvar Altera\u00E7\u00F5es"},
-        {"No.Policy.Entry.selected", "Nenhuma Entrada de Pol\u00EDtica Selecionada"},
-        {"Unable.to.open.KeyStore.ex.toString.",
-                "N\u00E3o \u00E9 poss\u00EDvel abrir a KeyStore: {0}"},
-        {"No.principal.selected", "Nenhum principal selecionado"},
-        {"No.permission.selected", "Nenhuma permiss\u00E3o selecionada"},
-        {"name", "nome"},
-        {"configuration.type", "tipo de configura\u00E7\u00E3o"},
-        {"environment.variable.name", "nome da vari\u00E1vel de ambiente"},
-        {"library.name", "nome da biblioteca"},
-        {"package.name", "nome do pacote"},
-        {"policy.type", "tipo de pol\u00EDtica"},
-        {"property.name", "nome da propriedade"},
-        {"Principal.List", "Lista de Principais"},
-        {"Permission.List", "Lista de Permiss\u00F5es"},
-        {"Code.Base", "Base de C\u00F3digo"},
-        {"KeyStore.U.R.L.", "U R L da KeyStore:"},
-        {"KeyStore.Password.U.R.L.", "U R L da Senha do KeyStore:"},
-
-
-        // javax.security.auth.PrivateCredentialPermission
-        {"invalid.null.input.s.", "entrada(s) nula(s) inv\u00E1lida(s)"},
-        {"actions.can.only.be.read.", "as a\u00E7\u00F5es s\u00F3 podem ser 'lidas'"},
-        {"permission.name.name.syntax.invalid.",
-                "sintaxe inv\u00E1lida do nome da permiss\u00E3o [{0}]: "},
-        {"Credential.Class.not.followed.by.a.Principal.Class.and.Name",
-                "Classe da Credencial n\u00E3o seguida por um Nome e uma Classe do Principal"},
-        {"Principal.Class.not.followed.by.a.Principal.Name",
-                "Classe do Principal n\u00E3o seguida por um Nome do Principal"},
-        {"Principal.Name.must.be.surrounded.by.quotes",
-                "O Nome do Principal deve estar entre aspas"},
-        {"Principal.Name.missing.end.quote",
-                "Faltam as aspas finais no Nome do Principal"},
-        {"PrivateCredentialPermission.Principal.Class.can.not.be.a.wildcard.value.if.Principal.Name.is.not.a.wildcard.value",
-                "A Classe do Principal PrivateCredentialPermission n\u00E3o pode ser um valor curinga (*) se o Nome do Principal n\u00E3o for um valor curinga (*)"},
-        {"CredOwner.Principal.Class.class.Principal.Name.name",
-                "CredOwner:\n\tClasse do Principal = {0}\n\tNome do Principal = {1}"},
-
-        // javax.security.auth.x500
-        {"provided.null.name", "nome nulo fornecido"},
-        {"provided.null.keyword.map", "mapa de palavra-chave nulo fornecido"},
-        {"provided.null.OID.map", "mapa OID nulo fornecido"},
-
-        // javax.security.auth.Subject
-        {"invalid.null.AccessControlContext.provided",
-                "AccessControlContext nulo inv\u00E1lido fornecido"},
-        {"invalid.null.action.provided", "a\u00E7\u00E3o nula inv\u00E1lida fornecida"},
-        {"invalid.null.Class.provided", "Classe nula inv\u00E1lida fornecida"},
-        {"Subject.", "Assunto:\n"},
-        {".Principal.", "\tPrincipal: "},
-        {".Public.Credential.", "\tCredencial P\u00FAblica: "},
-        {".Private.Credentials.inaccessible.",
-                "\tCredenciais Privadas inacess\u00EDveis\n"},
-        {".Private.Credential.", "\tCredencial Privada: "},
-        {".Private.Credential.inaccessible.",
-                "\tCredencial Privada inacess\u00EDvel\n"},
-        {"Subject.is.read.only", "O Assunto \u00E9 somente para leitura"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.java.security.Principal.to.a.Subject.s.Principal.Set",
-                "tentativa de adicionar um objeto que n\u00E3o \u00E9 uma inst\u00E2ncia de java.security.Principal a um conjunto de principais do Subject"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.class",
-                "tentativa de adicionar um objeto que n\u00E3o \u00E9 uma inst\u00E2ncia de {0}"},
-
-        // javax.security.auth.login.AppConfigurationEntry
-        {"LoginModuleControlFlag.", "LoginModuleControlFlag: "},
-
-        // javax.security.auth.login.LoginContext
-        {"Invalid.null.input.name", "Entrada nula inv\u00E1lida: nome"},
-        {"No.LoginModules.configured.for.name",
-         "Nenhum LoginModule configurado para {0}"},
-        {"invalid.null.Subject.provided", "Subject nulo inv\u00E1lido fornecido"},
-        {"invalid.null.CallbackHandler.provided",
-                "CallbackHandler nulo inv\u00E1lido fornecido"},
-        {"null.subject.logout.called.before.login",
-                "Subject nulo - log-out chamado antes do log-in"},
-        {"unable.to.instantiate.LoginModule.module.because.it.does.not.provide.a.no.argument.constructor",
-                "n\u00E3o \u00E9 poss\u00EDvel instanciar LoginModule, {0}, porque ele n\u00E3o fornece um construtor sem argumento"},
-        {"unable.to.instantiate.LoginModule",
-                "n\u00E3o \u00E9 poss\u00EDvel instanciar LoginModule"},
-        {"unable.to.instantiate.LoginModule.",
-                "n\u00E3o \u00E9 poss\u00EDvel instanciar LoginModule: "},
-        {"unable.to.find.LoginModule.class.",
-                "n\u00E3o \u00E9 poss\u00EDvel localizar a classe LoginModule: "},
-        {"unable.to.access.LoginModule.",
-                "n\u00E3o \u00E9 poss\u00EDvel acessar LoginModule: "},
-        {"Login.Failure.all.modules.ignored",
-                "Falha de Log-in: todos os m\u00F3dulos ignorados"},
-
-        // sun.security.provider.PolicyFile
-
-        {"java.security.policy.error.parsing.policy.message",
-                "java.security.policy: erro durante o parsing de {0}:\n\t{1}"},
-        {"java.security.policy.error.adding.Permission.perm.message",
-                "java.security.policy: erro ao adicionar a permiss\u00E3o, {0}:\n\t{1}"},
-        {"java.security.policy.error.adding.Entry.message",
-                "java.security.policy: erro ao adicionar a Entrada:\n\t{0}"},
-        {"alias.name.not.provided.pe.name.", "nome de alias n\u00E3o fornecido ({0})"},
-        {"unable.to.perform.substitution.on.alias.suffix",
-                "n\u00E3o \u00E9 poss\u00EDvel realizar a substitui\u00E7\u00E3o no alias, {0}"},
-        {"substitution.value.prefix.unsupported",
-                "valor da substitui\u00E7\u00E3o, {0}, n\u00E3o suportado"},
-        {"LPARAM", "("},
-        {"RPARAM", ")"},
-        {"type.can.t.be.null","o tipo n\u00E3o pode ser nulo"},
-
-        // sun.security.provider.PolicyParser
-        {"keystorePasswordURL.can.not.be.specified.without.also.specifying.keystore",
-                "keystorePasswordURL n\u00E3o pode ser especificado sem que a \u00E1rea de armazenamento de chaves tamb\u00E9m seja especificada"},
-        {"expected.keystore.type", "tipo de armazenamento de chaves esperado"},
-        {"expected.keystore.provider", "fornecedor da \u00E1rea de armazenamento de chaves esperado"},
-        {"multiple.Codebase.expressions",
-                "v\u00E1rias express\u00F5es CodeBase"},
-        {"multiple.SignedBy.expressions","v\u00E1rias express\u00F5es SignedBy"},
-        {"SignedBy.has.empty.alias","SignedBy tem alias vazio"},
-        {"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
-                "n\u00E3o \u00E9 poss\u00EDvel especificar um principal com uma classe curinga sem um nome curinga"},
-        {"expected.codeBase.or.SignedBy.or.Principal",
-                "CodeBase ou SignedBy ou Principal esperado"},
-        {"expected.permission.entry", "entrada de permiss\u00E3o esperada"},
-        {"number.", "n\u00FAmero "},
-        {"expected.expect.read.end.of.file.",
-                "esperado [{0}], lido [fim do arquivo]"},
-        {"expected.read.end.of.file.",
-                "esperado [;], lido [fim do arquivo]"},
-        {"line.number.msg", "linha {0}: {1}"},
-        {"line.number.expected.expect.found.actual.",
-                "linha {0}: esperada [{1}], encontrada [{2}]"},
-        {"null.principalClass.or.principalName",
-                "principalClass ou principalName nulo"},
-
-        // sun.security.pkcs11.SunPKCS11
-        {"PKCS11.Token.providerName.Password.",
-                "Senha PKCS11 de Token [{0}]: "},
-
-        /* --- DEPRECATED --- */
-        // javax.security.auth.Policy
-        {"unable.to.instantiate.Subject.based.policy",
-                "n\u00E3o \u00E9 poss\u00EDvel instanciar a pol\u00EDtica com base em Subject"}
-    };
-
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     *
-     * <p>
-     *
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-}
-
diff --git a/ojluni/src/main/java/sun/security/util/Resources_sv.java b/ojluni/src/main/java/sun/security/util/Resources_sv.java
deleted file mode 100755
index 51d8589..0000000
--- a/ojluni/src/main/java/sun/security/util/Resources_sv.java
+++ /dev/null
@@ -1,661 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, 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.
- */
-
-package sun.security.util;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for javax.security.auth and sun.security.
- *
- */
-public class Resources_sv extends java.util.ListResourceBundle {
-
-    private static final Object[][] contents = {
-
-        // shared (from jarsigner)
-        {"SPACE", " "},
-        {"2SPACE", "  "},
-        {"6SPACE", "      "},
-        {"COMMA", ", "},
-        // shared (from keytool)
-        {"NEWLINE", "\n"},
-        {"STAR",
-                "*******************************************"},
-        {"STARNN",
-                "*******************************************\n\n"},
-
-        // keytool: Help part
-        {".OPTION.", " [OPTION]..."},
-        {"Options.", "Alternativ:"},
-        {"Use.keytool.help.for.all.available.commands",
-                 "L\u00E4s \"Hj\u00E4lp - Nyckelverktyg\" f\u00F6r alla tillg\u00E4ngliga kommandon"},
-        {"Key.and.Certificate.Management.Tool",
-                 "Hanteringsverktyg f\u00F6r nycklar och certifikat"},
-        {"Commands.", "Kommandon:"},
-        {"Use.keytool.command.name.help.for.usage.of.command.name",
-                "L\u00E4s \"Hj\u00E4lp - Nyckelverktyg - command_name\" om anv\u00E4ndning av command_name"},
-        // keytool: help: commands
-        {"Generates.a.certificate.request",
-                "Genererar certifikatbeg\u00E4ran"}, //-certreq
-        {"Changes.an.entry.s.alias",
-                "\u00C4ndrar postalias"}, //-changealias
-        {"Deletes.an.entry",
-                "Tar bort post"}, //-delete
-        {"Exports.certificate",
-                "Exporterar certifikat"}, //-exportcert
-        {"Generates.a.key.pair",
-                "Genererar nyckelpar"}, //-genkeypair
-        {"Generates.a.secret.key",
-                "Genererar hemlig nyckel"}, //-genseckey
-        {"Generates.certificate.from.a.certificate.request",
-                "Genererar certifikat fr\u00E5n certifikatbeg\u00E4ran"}, //-gencert
-        {"Generates.CRL", "Genererar CRL"}, //-gencrl
-        {"Imports.entries.from.a.JDK.1.1.x.style.identity.database",
-                "Importerar poster fr\u00E5n identitetsdatabas i JDK 1.1.x-format"}, //-identitydb
-        {"Imports.a.certificate.or.a.certificate.chain",
-                "Importerar ett certifikat eller en certifikatkedja"}, //-importcert
-        {"Imports.one.or.all.entries.from.another.keystore",
-                "Importerar en eller alla poster fr\u00E5n annat nyckellager"}, //-importkeystore
-        {"Clones.a.key.entry",
-                "Klonar en nyckelpost"}, //-keyclone
-        {"Changes.the.key.password.of.an.entry",
-                "\u00C4ndrar nyckell\u00F6senordet f\u00F6r en post"}, //-keypasswd
-        {"Lists.entries.in.a.keystore",
-                "Visar lista \u00F6ver poster i nyckellager"}, //-list
-        {"Prints.the.content.of.a.certificate",
-                "Skriver ut inneh\u00E5llet i ett certifikat"}, //-printcert
-        {"Prints.the.content.of.a.certificate.request",
-                "Skriver ut inneh\u00E5llet i en certifikatbeg\u00E4ran"}, //-printcertreq
-        {"Prints.the.content.of.a.CRL.file",
-                "Skriver ut inneh\u00E5llet i en CRL-fil"}, //-printcrl
-        {"Generates.a.self.signed.certificate",
-                "Genererar ett sj\u00E4lvsignerat certifikat"}, //-selfcert
-        {"Changes.the.store.password.of.a.keystore",
-                "\u00C4ndrar lagerl\u00F6senordet f\u00F6r ett nyckellager"}, //-storepasswd
-        // keytool: help: options
-        {"alias.name.of.the.entry.to.process",
-                "aliasnamn f\u00F6r post som ska bearbetas"}, //-alias
-        {"destination.alias",
-                "destinationsalias"}, //-destalias
-        {"destination.key.password",
-                "l\u00F6senord f\u00F6r destinationsnyckel"}, //-destkeypass
-        {"destination.keystore.name",
-                "namn p\u00E5 destinationsnyckellager"}, //-destkeystore
-        {"destination.keystore.password.protected",
-                "skyddat l\u00F6senord f\u00F6r destinationsnyckellager"}, //-destprotected
-        {"destination.keystore.provider.name",
-                "leverant\u00F6rsnamn f\u00F6r destinationsnyckellager"}, //-destprovidername
-        {"destination.keystore.password",
-                "l\u00F6senord f\u00F6r destinationsnyckellager"}, //-deststorepass
-        {"destination.keystore.type",
-                "typ av destinationsnyckellager"}, //-deststoretype
-        {"distinguished.name",
-                "unikt namn"}, //-dname
-        {"X.509.extension",
-                "X.509-till\u00E4gg"}, //-ext
-        {"output.file.name",
-                "namn p\u00E5 utdatafil"}, //-file and -outfile
-        {"input.file.name",
-                "namn p\u00E5 indatafil"}, //-file and -infile
-        {"key.algorithm.name",
-                "namn p\u00E5 nyckelalgoritm"}, //-keyalg
-        {"key.password",
-                "nyckell\u00F6senord"}, //-keypass
-        {"key.bit.size",
-                "nyckelbitstorlek"}, //-keysize
-        {"keystore.name",
-                "namn p\u00E5 nyckellager"}, //-keystore
-        {"new.password",
-                "nytt l\u00F6senord"}, //-new
-        {"do.not.prompt",
-                "fr\u00E5ga inte"}, //-noprompt
-        {"password.through.protected.mechanism",
-                "l\u00F6senord med skyddad mekanism"}, //-protected
-        {"provider.argument",
-                "leverant\u00F6rsargument"}, //-providerarg
-        {"provider.class.name",
-                "namn p\u00E5 leverant\u00F6rsklass"}, //-providerclass
-        {"provider.name",
-                "leverant\u00F6rsnamn"}, //-providername
-        {"provider.classpath",
-                "leverant\u00F6rsklass\u00F6kv\u00E4g"}, //-providerpath
-        {"output.in.RFC.style",
-                "utdata i RFC-format"}, //-rfc
-        {"signature.algorithm.name",
-                "namn p\u00E5 signaturalgoritm"}, //-sigalg
-        {"source.alias",
-                "k\u00E4llalias"}, //-srcalias
-        {"source.key.password",
-                "l\u00F6senord f\u00F6r k\u00E4llnyckel"}, //-srckeypass
-        {"source.keystore.name",
-                "namn p\u00E5 k\u00E4llnyckellager"}, //-srckeystore
-        {"source.keystore.password.protected",
-                "skyddat l\u00F6senord f\u00F6r k\u00E4llnyckellager"}, //-srcprotected
-        {"source.keystore.provider.name",
-                "leverant\u00F6rsnamn f\u00F6r k\u00E4llnyckellager"}, //-srcprovidername
-        {"source.keystore.password",
-                "l\u00F6senord f\u00F6r k\u00E4llnyckellager"}, //-srcstorepass
-        {"source.keystore.type",
-                "typ av k\u00E4llnyckellager"}, //-srcstoretype
-        {"SSL.server.host.and.port",
-                "SSL-serverv\u00E4rd och -port"}, //-sslserver
-        {"signed.jar.file",
-                "signerad jar-fil"}, //=jarfile
-        {"certificate.validity.start.date.time",
-                "startdatum/-tid f\u00F6r certifikatets giltighet"}, //-startdate
-        {"keystore.password",
-                "l\u00F6senord f\u00F6r nyckellager"}, //-storepass
-        {"keystore.type",
-                "nyckellagertyp"}, //-storetype
-        {"trust.certificates.from.cacerts",
-                "tillf\u00F6rlitliga certifikat fr\u00E5n cacerts"}, //-trustcacerts
-        {"verbose.output",
-                "utf\u00F6rliga utdata"}, //-v
-        {"validity.number.of.days",
-                "antal dagar f\u00F6r giltighet"}, //-validity
-        {"Serial.ID.of.cert.to.revoke",
-                 "Seriellt ID f\u00F6r certifikat som ska \u00E5terkallas"}, //-id
-        // keytool: Running part
-        {"keytool.error.", "nyckelverktygsfel: "},
-        {"Illegal.option.", "Otill\u00E5tet alternativ:  "},
-        {"Illegal.value.", "Otill\u00E5tet v\u00E4rde: "},
-        {"Unknown.password.type.", "Ok\u00E4nd l\u00F6senordstyp: "},
-        {"Cannot.find.environment.variable.",
-                "Hittar inte milj\u00F6variabel: "},
-        {"Cannot.find.file.", "Hittar inte fil: "},
-        {"Command.option.flag.needs.an.argument.", "Kommandoalternativet {0} beh\u00F6ver ett argument."},
-        {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.",
-                "Varning!  PKCS12-nyckellager har inte st\u00F6d f\u00F6r olika l\u00F6senord f\u00F6r lagret och nyckeln. Det anv\u00E4ndarspecificerade {0}-v\u00E4rdet ignoreras."},
-        {".keystore.must.be.NONE.if.storetype.is.{0}",
-                "-keystore m\u00E5ste vara NONE om -storetype \u00E4r {0}"},
-        {"Too.many.retries.program.terminated",
-                 "F\u00F6r m\u00E5nga f\u00F6rs\u00F6k. Programmet avslutas"},
-        {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}",
-                "-storepasswd- och -keypasswd-kommandon st\u00F6ds inte om -storetype \u00E4r {0}"},
-        {".keypasswd.commands.not.supported.if.storetype.is.PKCS12",
-                "-keypasswd-kommandon st\u00F6ds inte om -storetype \u00E4r PKCS12"},
-        {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}",
-                "-keypass och -new kan inte anges om -storetype \u00E4r {0}"},
-        {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified",
-                "om -protected har angetts f\u00E5r inte -storepass, -keypass och -new anges"},
-        {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "om -srcprotected anges f\u00E5r -srcstorepass och -srckeypass inte anges"},
-        {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified",
-                "om nyckellagret inte \u00E4r l\u00F6senordsskyddat f\u00E5r -storepass, -keypass och -new inte anges"},
-        {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "om k\u00E4llnyckellagret inte \u00E4r l\u00F6senordsskyddat f\u00E5r -srcstorepass och -srckeypass inte anges"},
-        {"Illegal.startdate.value", "Otill\u00E5tet v\u00E4rde f\u00F6r startdatum"},
-        {"Validity.must.be.greater.than.zero",
-                "Giltigheten m\u00E5ste vara st\u00F6rre \u00E4n noll"},
-        {"provName.not.a.provider", "{0} \u00E4r inte en leverant\u00F6r"},
-        {"Usage.error.no.command.provided", "Syntaxfel: inget kommando angivet"},
-        {"Source.keystore.file.exists.but.is.empty.", "Nyckellagrets k\u00E4llfil finns, men \u00E4r tom: "},
-        {"Please.specify.srckeystore", "Ange -srckeystore"},
-        {"Must.not.specify.both.v.and.rfc.with.list.command",
-                "Kan inte specificera b\u00E5de -v och -rfc med 'list'-kommandot"},
-        {"Key.password.must.be.at.least.6.characters",
-                "Nyckell\u00F6senordet m\u00E5ste inneh\u00E5lla minst 6 tecken"},
-        {"New.password.must.be.at.least.6.characters",
-                "Det nya l\u00F6senordet m\u00E5ste inneh\u00E5lla minst 6 tecken"},
-        {"Keystore.file.exists.but.is.empty.",
-                "Nyckellagerfilen finns, men \u00E4r tom: "},
-        {"Keystore.file.does.not.exist.",
-                "Nyckellagerfilen finns inte: "},
-        {"Must.specify.destination.alias", "Du m\u00E5ste ange destinationsalias"},
-        {"Must.specify.alias", "Du m\u00E5ste ange alias"},
-        {"Keystore.password.must.be.at.least.6.characters",
-                "Nyckellagerl\u00F6senordet m\u00E5ste inneh\u00E5lla minst 6 tecken"},
-        {"Enter.keystore.password.", "Ange nyckellagerl\u00F6senord:  "},
-        {"Enter.source.keystore.password.", "Ange l\u00F6senord f\u00F6r k\u00E4llnyckellagret:  "},
-        {"Enter.destination.keystore.password.", "Ange nyckellagerl\u00F6senord f\u00F6r destination:  "},
-        {"Keystore.password.is.too.short.must.be.at.least.6.characters",
-         "Nyckellagerl\u00F6senordet \u00E4r f\u00F6r kort - det m\u00E5ste inneh\u00E5lla minst 6 tecken"},
-        {"Unknown.Entry.Type", "Ok\u00E4nd posttyp"},
-        {"Too.many.failures.Alias.not.changed", "F\u00F6r m\u00E5nga fel. Alias har inte \u00E4ndrats"},
-        {"Entry.for.alias.alias.successfully.imported.",
-                 "Posten f\u00F6r alias {0} har importerats."},
-        {"Entry.for.alias.alias.not.imported.", "Posten f\u00F6r alias {0} har inte importerats."},
-        {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.",
-                 "Ett problem uppstod vid importen av posten f\u00F6r alias {0}: {1}.\nPosten {0} har inte importerats."},
-        {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled",
-                 "Kommandoimporten slutf\u00F6rd: {0} poster har importerats, {1} poster var felaktiga eller annullerades"},
-        {"Warning.Overwriting.existing.alias.alias.in.destination.keystore",
-                 "Varning! Det befintliga aliaset {0} i destinationsnyckellagret skrivs \u00F6ver"},
-        {"Existing.entry.alias.alias.exists.overwrite.no.",
-                 "Aliaset {0} finns redan. Vill du skriva \u00F6ver det? [nej]:  "},
-        {"Too.many.failures.try.later", "F\u00F6r m\u00E5nga fel - f\u00F6rs\u00F6k igen senare"},
-        {"Certification.request.stored.in.file.filename.",
-                "Certifikatbeg\u00E4ran har lagrats i filen <{0}>"},
-        {"Submit.this.to.your.CA", "Skicka detta till certifikatutf\u00E4rdaren"},
-        {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
-            "om n\u00E5got alias inte anges f\u00E5r destalias, srckeypass och destkeypass inte anges"},
-        {"Certificate.stored.in.file.filename.",
-                "Certifikatet har lagrats i filen <{0}>"},
-        {"Certificate.reply.was.installed.in.keystore",
-                "Certifikatsvaret har installerats i nyckellagret"},
-        {"Certificate.reply.was.not.installed.in.keystore",
-                "Certifikatsvaret har inte installerats i nyckellagret"},
-        {"Certificate.was.added.to.keystore",
-                "Certifikatet har lagts till i nyckellagret"},
-        {"Certificate.was.not.added.to.keystore",
-                "Certifikatet har inte lagts till i nyckellagret"},
-        {".Storing.ksfname.", "[Lagrar {0}]"},
-        {"alias.has.no.public.key.certificate.",
-                "{0} saknar offentlig nyckel (certifikat)"},
-        {"Cannot.derive.signature.algorithm",
-                "Kan inte h\u00E4rleda signaturalgoritm"},
-        {"Alias.alias.does.not.exist",
-                "Aliaset <{0}> finns inte"},
-        {"Alias.alias.has.no.certificate",
-                "Aliaset <{0}> saknar certifikat"},
-        {"Key.pair.not.generated.alias.alias.already.exists",
-                "Nyckelparet genererades inte. Aliaset <{0}> finns redan"},
-        {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for",
-                "Genererar {0} bitars {1}-nyckelpar och sj\u00E4lvsignerat certifikat ({2}) med en giltighet p\u00E5 {3} dagar\n\tf\u00F6r: {4}"},
-        {"Enter.key.password.for.alias.", "Ange nyckell\u00F6senord f\u00F6r <{0}>"},
-        {".RETURN.if.same.as.keystore.password.",
-                "\t(RETURN om det \u00E4r identiskt med nyckellagerl\u00F6senordet):  "},
-        {"Key.password.is.too.short.must.be.at.least.6.characters",
-                "Nyckell\u00F6senordet \u00E4r f\u00F6r kort - det m\u00E5ste inneh\u00E5lla minst 6 tecken"},
-        {"Too.many.failures.key.not.added.to.keystore",
-                "F\u00F6r m\u00E5nga fel - nyckeln lades inte till i nyckellagret"},
-        {"Destination.alias.dest.already.exists",
-                "Destinationsaliaset <{0}> finns redan"},
-        {"Password.is.too.short.must.be.at.least.6.characters",
-                "L\u00F6senordet \u00E4r f\u00F6r kort - det m\u00E5ste inneh\u00E5lla minst 6 tecken"},
-        {"Too.many.failures.Key.entry.not.cloned",
-                "F\u00F6r m\u00E5nga fel. Nyckelposten har inte klonats"},
-        {"key.password.for.alias.", "nyckell\u00F6senord f\u00F6r <{0}>"},
-        {"Keystore.entry.for.id.getName.already.exists",
-                "Nyckellagerpost f\u00F6r <{0}> finns redan"},
-        {"Creating.keystore.entry.for.id.getName.",
-                "Skapar nyckellagerpost f\u00F6r <{0}> ..."},
-        {"No.entries.from.identity.database.added",
-                "Inga poster fr\u00E5n identitetsdatabasen har lagts till"},
-        {"Alias.name.alias", "Aliasnamn: {0}"},
-        {"Creation.date.keyStore.getCreationDate.alias.",
-                "Skapat den: {0,date}"},
-        {"alias.keyStore.getCreationDate.alias.",
-                "{0}, {1,date}, "},
-        {"alias.", "{0}, "},
-        {"Entry.type.type.", "Posttyp: {0}"},
-        {"Certificate.chain.length.", "L\u00E4ngd p\u00E5 certifikatskedja: "},
-        {"Certificate.i.1.", "Certifikat[{0,number,integer}]:"},
-        {"Certificate.fingerprint.SHA1.", "Certifikatets fingeravtryck (SHA1): "},
-        {"Keystore.type.", "Nyckellagertyp: "},
-        {"Keystore.provider.", "Nyckellagerleverant\u00F6r: "},
-        {"Your.keystore.contains.keyStore.size.entry",
-                "Nyckellagret inneh\u00E5ller {0,number,integer} post"},
-        {"Your.keystore.contains.keyStore.size.entries",
-                "Nyckellagret inneh\u00E5ller {0,number,integer} poster"},
-        {"Failed.to.parse.input", "Kunde inte tolka indata"},
-        {"Empty.input", "Inga indata"},
-        {"Not.X.509.certificate", "Inte ett X.509-certifikat"},
-        {"alias.has.no.public.key", "{0} saknar offentlig nyckel"},
-        {"alias.has.no.X.509.certificate", "{0} saknar X.509-certifikat"},
-        {"New.certificate.self.signed.", "Nytt certifikat (sj\u00E4lvsignerat):"},
-        {"Reply.has.no.certificates", "Svaret saknar certifikat"},
-        {"Certificate.not.imported.alias.alias.already.exists",
-                "Certifikatet importerades inte. Aliaset <{0}> finns redan"},
-        {"Input.not.an.X.509.certificate", "Indata \u00E4r inte ett X.509-certifikat"},
-        {"Certificate.already.exists.in.keystore.under.alias.trustalias.",
-                "Certifikatet finns redan i nyckellagerfilen under aliaset <{0}>"},
-        {"Do.you.still.want.to.add.it.no.",
-                "Vill du fortfarande l\u00E4gga till det? [nej]:  "},
-        {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.",
-                "Certifikatet finns redan i den systemomsp\u00E4nnande CA-nyckellagerfilen under aliaset <{0}>"},
-        {"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
-                "Vill du fortfarande l\u00E4gga till det i ditt eget nyckellagret? [nej]:  "},
-        {"Trust.this.certificate.no.", "Litar du p\u00E5 det h\u00E4r certifikatet? [nej]:  "},
-        {"YES", "JA"},
-        {"New.prompt.", "Nytt {0}: "},
-        {"Passwords.must.differ", "L\u00F6senorden m\u00E5ste vara olika"},
-        {"Re.enter.new.prompt.", "Ange nytt {0} igen: "},
-        {"Re.enter.new.password.", "Ange det nya l\u00F6senordet igen: "},
-        {"They.don.t.match.Try.again", "De matchar inte. F\u00F6rs\u00F6k igen"},
-        {"Enter.prompt.alias.name.", "Ange aliasnamn f\u00F6r {0}:  "},
-        {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.",
-                 "Ange ett nytt aliasnamn\t(skriv RETURN f\u00F6r att avbryta importen av denna post):  "},
-        {"Enter.alias.name.", "Ange aliasnamn:  "},
-        {".RETURN.if.same.as.for.otherAlias.",
-                "\t(RETURN om det \u00E4r det samma som f\u00F6r <{0}>)"},
-        {".PATTERN.printX509Cert",
-                "\u00C4gare: {0}\nUtf\u00E4rdare: {1}\nSerienummer: {2}\nGiltigt fr\u00E5n den: {3} till: {4}\nCertifikatets fingeravtryck:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Namn p\u00E5 signaturalgoritm: {8}\n\t Version: {9}"},
-        {"What.is.your.first.and.last.name.",
-                "Vad heter du i f\u00F6r- och efternamn?"},
-        {"What.is.the.name.of.your.organizational.unit.",
-                "Vad heter din avdelning inom organisationen?"},
-        {"What.is.the.name.of.your.organization.",
-                "Vad heter din organisation?"},
-        {"What.is.the.name.of.your.City.or.Locality.",
-                "Vad heter din ort eller plats?"},
-        {"What.is.the.name.of.your.State.or.Province.",
-                "Vad heter ditt land eller din provins?"},
-        {"What.is.the.two.letter.country.code.for.this.unit.",
-                "Vilken \u00E4r den tv\u00E5st\u00E4lliga landskoden?"},
-        {"Is.name.correct.", "\u00C4r {0} korrekt?"},
-        {"no", "nej"},
-        {"yes", "ja"},
-        {"y", "j"},
-        {".defaultValue.", "  [{0}]:  "},
-        {"Alias.alias.has.no.key",
-                "Aliaset <{0}> saknar nyckel"},
-        {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key",
-                 "Aliaset <{0}> refererar till en posttyp som inte \u00E4r n\u00E5gon privat nyckelpost. Kommandot -keyclone har endast st\u00F6d f\u00F6r kloning av privata nyckelposter"},
-
-        {".WARNING.WARNING.WARNING.",
-            "*****************  WARNING WARNING WARNING  *****************"},
-        {"Signer.d.", "Signerare #%d:"},
-        {"Timestamp.", "Tidsst\u00E4mpel:"},
-        {"Signature.", "Underskrift:"},
-        {"CRLs.", "CRL:er:"},
-        {"Certificate.owner.", "Certifikat\u00E4gare: "},
-        {"Not.a.signed.jar.file", "Ingen signerad jar-fil"},
-        {"No.certificate.from.the.SSL.server",
-                "Inget certifikat fr\u00E5n SSL-servern"},
-
-        {".The.integrity.of.the.information.stored.in.your.keystore.",
-            "* Integriteten f\u00F6r den information som lagras i nyckellagerfilen  *\n* har INTE verifierats!  Om du vill verifiera dess integritet *\n* m\u00E5ste du ange l\u00F6senordet f\u00F6r nyckellagret.                  *"},
-        {".The.integrity.of.the.information.stored.in.the.srckeystore.",
-            "* Integriteten f\u00F6r den information som lagras i srckeystore*\n* har INTE verifierats!  Om du vill verifiera dess integritet *\n* m\u00E5ste du ange l\u00F6senordet f\u00F6r srckeystore.                *"},
-
-        {"Certificate.reply.does.not.contain.public.key.for.alias.",
-                "Certifikatsvaret inneh\u00E5ller inte n\u00E5gon offentlig nyckel f\u00F6r <{0}>"},
-        {"Incomplete.certificate.chain.in.reply",
-                "Ofullst\u00E4ndig certifikatskedja i svaret"},
-        {"Certificate.chain.in.reply.does.not.verify.",
-                "Certifikatskedjan i svaret g\u00E5r inte att verifiera: "},
-        {"Top.level.certificate.in.reply.",
-                "Toppniv\u00E5certifikatet i svaret:\n"},
-        {".is.not.trusted.", "... \u00E4r inte betrott. "},
-        {"Install.reply.anyway.no.", "Vill du installera svaret \u00E4nd\u00E5? [nej]:  "},
-        {"NO", "NEJ"},
-        {"Public.keys.in.reply.and.keystore.don.t.match",
-                "De offentliga nycklarna i svaret och nyckellagret matchar inte varandra"},
-        {"Certificate.reply.and.certificate.in.keystore.are.identical",
-                "Certifikatsvaret och certifikatet i nyckellagret \u00E4r identiska"},
-        {"Failed.to.establish.chain.from.reply",
-                "Kunde inte uppr\u00E4tta kedja fr\u00E5n svaret"},
-        {"n", "n"},
-        {"Wrong.answer.try.again", "Fel svar. F\u00F6rs\u00F6k p\u00E5 nytt."},
-        {"Secret.key.not.generated.alias.alias.already.exists",
-                "Den hemliga nyckeln har inte genererats eftersom aliaset <{0}> redan finns"},
-        {"Please.provide.keysize.for.secret.key.generation",
-                "Ange -keysize f\u00F6r att skapa hemlig nyckel"},
-
-        {"Extensions.", "Till\u00E4gg: "},
-        {".Empty.value.", "(Tomt v\u00E4rde)"},
-        {"Extension.Request.", "Till\u00E4ggsbeg\u00E4ran:"},
-        {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.",
-                "PKCS #10 certifikatbeg\u00E4ran (version 1.0)\n\u00C4mne: %s\nAllm\u00E4n nyckel: %s-format %s-nyckel\n"},
-        {"Unknown.keyUsage.type.", "Ok\u00E4nd keyUsage-typ: "},
-        {"Unknown.extendedkeyUsage.type.", "Ok\u00E4nd extendedkeyUsage-typ: "},
-        {"Unknown.AccessDescription.type.", "Ok\u00E4nd AccessDescription-typ: "},
-        {"Unrecognized.GeneralName.type.", "Ok\u00E4nd GeneralName-typ: "},
-        {"This.extension.cannot.be.marked.as.critical.",
-                 "Detta till\u00E4gg kan inte markeras som kritiskt. "},
-        {"Odd.number.of.hex.digits.found.", "Udda antal hex-siffror p\u00E5tr\u00E4ffades: "},
-        {"Unknown.extension.type.", "Ok\u00E4nd till\u00E4ggstyp: "},
-        {"command.{0}.is.ambiguous.", "kommandot {0} \u00E4r tvetydigt:"},
-
-        // policytool
-        {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.",
-                "Varning! Det finns ingen offentlig nyckel f\u00F6r aliaset {0}. Kontrollera att det aktuella nyckellagret \u00E4r korrekt konfigurerat."},
-        {"Warning.Class.not.found.class", "Varning! Klassen hittades inte: {0}"},
-        {"Warning.Invalid.argument.s.for.constructor.arg",
-                "Varning! Ogiltiga argument f\u00F6r konstruktor: {0}"},
-        {"Illegal.Principal.Type.type", "Otill\u00E5ten identitetshavaretyp: {0}"},
-        {"Illegal.option.option", "Otill\u00E5tet alternativ: {0}"},
-        {"Usage.policytool.options.", "Syntax: policytool [alternativ]"},
-        {".file.file.policy.file.location",
-                "  [-file <fil>]    policyfilens plats"},
-        {"New", "Nytt"},
-        {"Open", "\u00D6ppna"},
-        {"Save", "Spara"},
-        {"Save.As", "Spara som"},
-        {"View.Warning.Log", "Visa varningslogg"},
-        {"Exit", "Avsluta"},
-        {"Add.Policy.Entry", "L\u00E4gg till policypost"},
-        {"Edit.Policy.Entry", "Redigera policypost"},
-        {"Remove.Policy.Entry", "Ta bort policypost"},
-        {"Edit", "Redigera"},
-        {"Retain", "Beh\u00E5ll"},
-
-        {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes",
-            "Varning! Filnamnet kan inneh\u00E5lla omv\u00E4nda snedstreck inom citattecken. Citattecken kr\u00E4vs inte f\u00F6r omv\u00E4nda snedstreck (verktyget hanterar detta n\u00E4r policyinneh\u00E5llet skrivs till det best\u00E4ndiga lagret).\n\nKlicka p\u00E5 Beh\u00E5ll f\u00F6r att beh\u00E5lla det angivna namnet, eller klicka p\u00E5 Redigera f\u00F6r att \u00E4ndra det."},
-
-        {"Add.Public.Key.Alias", "L\u00E4gg till offentligt nyckelalias"},
-        {"Remove.Public.Key.Alias", "Ta bort offentligt nyckelalias"},
-        {"File", "Fil"},
-        {"KeyStore", "Nyckellager"},
-        {"Policy.File.", "Policyfil:"},
-        {"Could.not.open.policy.file.policyFile.e.toString.",
-                "Kan inte \u00F6ppna policyfilen: {0}: {1}"},
-        {"Policy.Tool", "Policyverktyg"},
-        {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.",
-                "Det uppstod ett fel n\u00E4r policykonfigurationen skulle \u00F6ppnas. Se varningsloggen f\u00F6r mer information."},
-        {"Error", "Fel"},
-        {"OK", "OK"},
-        {"Status", "Status"},
-        {"Warning", "Varning"},
-        {"Permission.",
-                "Beh\u00F6righet:                                                       "},
-        {"Principal.Type.", "Identitetshavaretyp:"},
-        {"Principal.Name.", "Identitetshavare:"},
-        {"Target.Name.",
-                "M\u00E5l:                                                    "},
-        {"Actions.",
-                "Funktioner:                                                             "},
-        {"OK.to.overwrite.existing.file.filename.",
-                "Ska den befintliga filen {0} skrivas \u00F6ver?"},
-        {"Cancel", "Avbryt"},
-        {"CodeBase.", "Kodbas:"},
-        {"SignedBy.", "Signerad av:"},
-        {"Add.Principal", "L\u00E4gg till identitetshavare"},
-        {"Edit.Principal", "Redigera identitetshavare"},
-        {"Remove.Principal", "Ta bort identitetshavare"},
-        {"Principals.", "Identitetshavare:"},
-        {".Add.Permission", "  L\u00E4gg till beh\u00F6righet"},
-        {".Edit.Permission", "  Redigera beh\u00F6righet"},
-        {"Remove.Permission", "Ta bort beh\u00F6righet"},
-        {"Done", "Utf\u00F6rd"},
-        {"KeyStore.URL.", "URL f\u00F6r nyckellager:"},
-        {"KeyStore.Type.", "Nyckellagertyp:"},
-        {"KeyStore.Provider.", "Nyckellagerleverant\u00F6r:"},
-        {"KeyStore.Password.URL.", "URL f\u00F6r l\u00F6senord till nyckellager:"},
-        {"Principals", "Identitetshavare"},
-        {".Edit.Principal.", "  Redigera identitetshavare:"},
-        {".Add.New.Principal.", "  L\u00E4gg till ny identitetshavare:"},
-        {"Permissions", "Beh\u00F6righet"},
-        {".Edit.Permission.", "  Redigera beh\u00F6righet:"},
-        {".Add.New.Permission.", "  L\u00E4gg till ny beh\u00F6righet:"},
-        {"Signed.By.", "Signerad av:"},
-        {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name",
-            "Kan inte specificera identitetshavare med jokerteckenklass utan jokerteckennamn"},
-        {"Cannot.Specify.Principal.without.a.Name",
-            "Kan inte specificera identitetshavare utan namn"},
-        {"Permission.and.Target.Name.must.have.a.value",
-                "Beh\u00F6righet och m\u00E5lnamn m\u00E5ste ha ett v\u00E4rde"},
-        {"Remove.this.Policy.Entry.", "Vill du ta bort den h\u00E4r policyposten?"},
-        {"Overwrite.File", "Skriv \u00F6ver fil"},
-        {"Policy.successfully.written.to.filename",
-                "Policy har skrivits till {0}"},
-        {"null.filename", "nullfilnamn"},
-        {"Save.changes.", "Vill du spara \u00E4ndringarna?"},
-        {"Yes", "Ja"},
-        {"No", "Nej"},
-        {"Policy.Entry", "Policyfel"},
-        {"Save.Changes", "Spara \u00E4ndringar"},
-        {"No.Policy.Entry.selected", "Ingen policypost har valts"},
-        {"Unable.to.open.KeyStore.ex.toString.",
-                "Kan inte \u00F6ppna nyckellagret: {0}"},
-        {"No.principal.selected", "Ingen identitetshavare har valts"},
-        {"No.permission.selected", "Ingen beh\u00F6righet har valts"},
-        {"name", "namn"},
-        {"configuration.type", "konfigurationstyp"},
-        {"environment.variable.name", "variabelnamn f\u00F6r milj\u00F6"},
-        {"library.name", "biblioteksnamn"},
-        {"package.name", "paketnamn"},
-        {"policy.type", "policytyp"},
-        {"property.name", "egenskapsnamn"},
-        {"Principal.List", "Lista \u00F6ver identitetshavare"},
-        {"Permission.List", "Beh\u00F6righetslista"},
-        {"Code.Base", "Kodbas"},
-        {"KeyStore.U.R.L.", "URL f\u00F6r nyckellager:"},
-        {"KeyStore.Password.U.R.L.", "URL f\u00F6r l\u00F6senord till nyckellager:"},
-
-
-        // javax.security.auth.PrivateCredentialPermission
-        {"invalid.null.input.s.", "ogiltiga null-indata"},
-        {"actions.can.only.be.read.", "funktioner kan endast 'l\u00E4sas'"},
-        {"permission.name.name.syntax.invalid.",
-                "syntaxen f\u00F6r beh\u00F6righetsnamnet [{0}] \u00E4r ogiltig: "},
-        {"Credential.Class.not.followed.by.a.Principal.Class.and.Name",
-                "Inloggningsuppgiftsklassen f\u00F6ljs inte av klass eller namn f\u00F6r identitetshavare"},
-        {"Principal.Class.not.followed.by.a.Principal.Name",
-                "Identitetshavareklassen f\u00F6ljs inte av n\u00E5got identitetshavarenamn"},
-        {"Principal.Name.must.be.surrounded.by.quotes",
-                "Identitetshavarenamnet m\u00E5ste anges inom citattecken"},
-        {"Principal.Name.missing.end.quote",
-                "Identitetshavarenamnet saknar avslutande citattecken"},
-        {"PrivateCredentialPermission.Principal.Class.can.not.be.a.wildcard.value.if.Principal.Name.is.not.a.wildcard.value",
-                "Identitetshavareklassen PrivateCredentialPermission kan inte ha n\u00E5got jokertecken (*) om inte namnet p\u00E5 identitetshavaren anges med jokertecken (*)"},
-        {"CredOwner.Principal.Class.class.Principal.Name.name",
-                "CredOwner:\n\tIdentitetshavareklass = {0}\n\tIdentitetshavarenamn = {1}"},
-
-        // javax.security.auth.x500
-        {"provided.null.name", "angav null-namn"},
-        {"provided.null.keyword.map", "nullnyckelordsmappning tillhandah\u00F6lls"},
-        {"provided.null.OID.map", "null-OID-mappning tillhandah\u00F6lls"},
-
-        // javax.security.auth.Subject
-        {"invalid.null.AccessControlContext.provided",
-                "ogiltigt null-AccessControlContext"},
-        {"invalid.null.action.provided", "ogiltig null-funktion"},
-        {"invalid.null.Class.provided", "ogiltig null-klass"},
-        {"Subject.", "Innehavare:\n"},
-        {".Principal.", "\tIdentitetshavare: "},
-        {".Public.Credential.", "\tOffentlig inloggning: "},
-        {".Private.Credentials.inaccessible.",
-                "\tPrivat inloggning \u00E4r inte tillg\u00E4nglig\n"},
-        {".Private.Credential.", "\tPrivat inloggning: "},
-        {".Private.Credential.inaccessible.",
-                "\tPrivat inloggning \u00E4r inte tillg\u00E4nglig\n"},
-        {"Subject.is.read.only", "Innehavare \u00E4r skrivskyddad"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.java.security.Principal.to.a.Subject.s.Principal.Set",
-                "f\u00F6rs\u00F6k att l\u00E4gga till ett objekt som inte \u00E4r en f\u00F6rekomst av java.security.Principal till en upps\u00E4ttning av identitetshavare"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.class",
-                "f\u00F6rs\u00F6ker l\u00E4gga till ett objekt som inte \u00E4r en instans av {0}"},
-
-        // javax.security.auth.login.AppConfigurationEntry
-        {"LoginModuleControlFlag.", "LoginModuleControlFlag: "},
-
-        // javax.security.auth.login.LoginContext
-        {"Invalid.null.input.name", "Ogiltiga null-indata: namn"},
-        {"No.LoginModules.configured.for.name",
-         "Inga inloggningsmoduler har konfigurerats f\u00F6r {0}"},
-        {"invalid.null.Subject.provided", "ogiltig null-innehavare"},
-        {"invalid.null.CallbackHandler.provided",
-                "ogiltig null-CallbackHandler"},
-        {"null.subject.logout.called.before.login",
-                "null-innehavare - utloggning anropades f\u00F6re inloggning"},
-        {"unable.to.instantiate.LoginModule.module.because.it.does.not.provide.a.no.argument.constructor",
-                "kan inte instansiera LoginModule, {0}, eftersom den inte tillhandah\u00E5ller n\u00E5gon icke-argumentskonstruktor"},
-        {"unable.to.instantiate.LoginModule",
-                "kan inte instansiera LoginModule"},
-        {"unable.to.instantiate.LoginModule.",
-                "kan inte instansiera LoginModule: "},
-        {"unable.to.find.LoginModule.class.",
-                "hittar inte LoginModule-klassen: "},
-        {"unable.to.access.LoginModule.",
-                "ingen \u00E5tkomst till LoginModule: "},
-        {"Login.Failure.all.modules.ignored",
-                "Inloggningsfel: alla moduler ignoreras"},
-
-        // sun.security.provider.PolicyFile
-
-        {"java.security.policy.error.parsing.policy.message",
-                "java.security.policy: fel vid tolkning av {0}:\n\t{1}"},
-        {"java.security.policy.error.adding.Permission.perm.message",
-                "java.security.policy: fel vid till\u00E4gg av beh\u00F6righet, {0}:\n\t{1}"},
-        {"java.security.policy.error.adding.Entry.message",
-                "java.security.policy: fel vid till\u00E4gg av post:\n\t{0}"},
-        {"alias.name.not.provided.pe.name.", "aliasnamn ej angivet ({0})"},
-        {"unable.to.perform.substitution.on.alias.suffix",
-                "kan ej ers\u00E4tta alias, {0}"},
-        {"substitution.value.prefix.unsupported",
-                "ers\u00E4ttningsv\u00E4rde, {0}, st\u00F6ds ej"},
-        {"LPARAM", "("},
-        {"RPARAM", ")"},
-        {"type.can.t.be.null","typen kan inte vara null"},
-
-        // sun.security.provider.PolicyParser
-        {"keystorePasswordURL.can.not.be.specified.without.also.specifying.keystore",
-                "kan inte ange keystorePasswordURL utan att ange nyckellager"},
-        {"expected.keystore.type", "f\u00F6rv\u00E4ntad nyckellagertyp"},
-        {"expected.keystore.provider", "nyckellagerleverant\u00F6r f\u00F6rv\u00E4ntades"},
-        {"multiple.Codebase.expressions",
-                "flera CodeBase-uttryck"},
-        {"multiple.SignedBy.expressions","flera SignedBy-uttryck"},
-        {"SignedBy.has.empty.alias","SignedBy har ett tomt alias"},
-        {"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
-                "kan inte ange identitetshavare med en jokerteckenklass utan ett jokerteckennamn"},
-        {"expected.codeBase.or.SignedBy.or.Principal",
-                "f\u00F6rv\u00E4ntad codeBase eller SignedBy eller identitetshavare"},
-        {"expected.permission.entry", "f\u00F6rv\u00E4ntade beh\u00F6righetspost"},
-        {"number.", "antal "},
-        {"expected.expect.read.end.of.file.",
-                "f\u00F6rv\u00E4ntade [{0}], l\u00E4ste [filslut]"},
-        {"expected.read.end.of.file.",
-                "f\u00F6rv\u00E4ntade [;], l\u00E4ste [filslut]"},
-        {"line.number.msg", "rad {0}: {1}"},
-        {"line.number.expected.expect.found.actual.",
-                "rad {0}: f\u00F6rv\u00E4ntade [{1}], hittade [{2}]"},
-        {"null.principalClass.or.principalName",
-                "null-principalClass eller -principalName"},
-
-        // sun.security.pkcs11.SunPKCS11
-        {"PKCS11.Token.providerName.Password.",
-                "PKCS11-tecken [{0}] L\u00F6senord: "},
-
-        /* --- DEPRECATED --- */
-        // javax.security.auth.Policy
-        {"unable.to.instantiate.Subject.based.policy",
-                "den innehavarbaserade policyn kan inte skapas"}
-    };
-
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     *
-     * <p>
-     *
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-}
-
diff --git a/ojluni/src/main/java/sun/security/util/Resources_zh_CN.java b/ojluni/src/main/java/sun/security/util/Resources_zh_CN.java
deleted file mode 100755
index 3e4fe47..0000000
--- a/ojluni/src/main/java/sun/security/util/Resources_zh_CN.java
+++ /dev/null
@@ -1,661 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, 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.
- */
-
-package sun.security.util;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for javax.security.auth and sun.security.
- *
- */
-public class Resources_zh_CN extends java.util.ListResourceBundle {
-
-    private static final Object[][] contents = {
-
-        // shared (from jarsigner)
-        {"SPACE", " "},
-        {"2SPACE", "  "},
-        {"6SPACE", "      "},
-        {"COMMA", ", "},
-        // shared (from keytool)
-        {"NEWLINE", "\n"},
-        {"STAR",
-                "*******************************************"},
-        {"STARNN",
-                "*******************************************\n\n"},
-
-        // keytool: Help part
-        {".OPTION.", " [OPTION]..."},
-        {"Options.", "\u9009\u9879:"},
-        {"Use.keytool.help.for.all.available.commands",
-                 "\u4F7F\u7528 \"keytool -help\" \u83B7\u53D6\u6240\u6709\u53EF\u7528\u547D\u4EE4"},
-        {"Key.and.Certificate.Management.Tool",
-                 "\u5BC6\u94A5\u548C\u8BC1\u4E66\u7BA1\u7406\u5DE5\u5177"},
-        {"Commands.", "\u547D\u4EE4:"},
-        {"Use.keytool.command.name.help.for.usage.of.command.name",
-                "\u4F7F\u7528 \"keytool -command_name -help\" \u83B7\u53D6 command_name \u7684\u7528\u6CD5"},
-        // keytool: help: commands
-        {"Generates.a.certificate.request",
-                "\u751F\u6210\u8BC1\u4E66\u8BF7\u6C42"}, //-certreq
-        {"Changes.an.entry.s.alias",
-                "\u66F4\u6539\u6761\u76EE\u7684\u522B\u540D"}, //-changealias
-        {"Deletes.an.entry",
-                "\u5220\u9664\u6761\u76EE"}, //-delete
-        {"Exports.certificate",
-                "\u5BFC\u51FA\u8BC1\u4E66"}, //-exportcert
-        {"Generates.a.key.pair",
-                "\u751F\u6210\u5BC6\u94A5\u5BF9"}, //-genkeypair
-        {"Generates.a.secret.key",
-                "\u751F\u6210\u5BC6\u94A5"}, //-genseckey
-        {"Generates.certificate.from.a.certificate.request",
-                "\u6839\u636E\u8BC1\u4E66\u8BF7\u6C42\u751F\u6210\u8BC1\u4E66"}, //-gencert
-        {"Generates.CRL", "\u751F\u6210 CRL"}, //-gencrl
-        {"Imports.entries.from.a.JDK.1.1.x.style.identity.database",
-                "\u4ECE JDK 1.1.x \u6837\u5F0F\u7684\u8EAB\u4EFD\u6570\u636E\u5E93\u5BFC\u5165\u6761\u76EE"}, //-identitydb
-        {"Imports.a.certificate.or.a.certificate.chain",
-                "\u5BFC\u5165\u8BC1\u4E66\u6216\u8BC1\u4E66\u94FE"}, //-importcert
-        {"Imports.one.or.all.entries.from.another.keystore",
-                "\u4ECE\u5176\u4ED6\u5BC6\u94A5\u5E93\u5BFC\u5165\u4E00\u4E2A\u6216\u6240\u6709\u6761\u76EE"}, //-importkeystore
-        {"Clones.a.key.entry",
-                "\u514B\u9686\u5BC6\u94A5\u6761\u76EE"}, //-keyclone
-        {"Changes.the.key.password.of.an.entry",
-                "\u66F4\u6539\u6761\u76EE\u7684\u5BC6\u94A5\u53E3\u4EE4"}, //-keypasswd
-        {"Lists.entries.in.a.keystore",
-                "\u5217\u51FA\u5BC6\u94A5\u5E93\u4E2D\u7684\u6761\u76EE"}, //-list
-        {"Prints.the.content.of.a.certificate",
-                "\u6253\u5370\u8BC1\u4E66\u5185\u5BB9"}, //-printcert
-        {"Prints.the.content.of.a.certificate.request",
-                "\u6253\u5370\u8BC1\u4E66\u8BF7\u6C42\u7684\u5185\u5BB9"}, //-printcertreq
-        {"Prints.the.content.of.a.CRL.file",
-                "\u6253\u5370 CRL \u6587\u4EF6\u7684\u5185\u5BB9"}, //-printcrl
-        {"Generates.a.self.signed.certificate",
-                "\u751F\u6210\u81EA\u7B7E\u540D\u8BC1\u4E66"}, //-selfcert
-        {"Changes.the.store.password.of.a.keystore",
-                "\u66F4\u6539\u5BC6\u94A5\u5E93\u7684\u5B58\u50A8\u53E3\u4EE4"}, //-storepasswd
-        // keytool: help: options
-        {"alias.name.of.the.entry.to.process",
-                "\u8981\u5904\u7406\u7684\u6761\u76EE\u7684\u522B\u540D"}, //-alias
-        {"destination.alias",
-                "\u76EE\u6807\u522B\u540D"}, //-destalias
-        {"destination.key.password",
-                "\u76EE\u6807\u5BC6\u94A5\u53E3\u4EE4"}, //-destkeypass
-        {"destination.keystore.name",
-                "\u76EE\u6807\u5BC6\u94A5\u5E93\u540D\u79F0"}, //-destkeystore
-        {"destination.keystore.password.protected",
-                "\u53D7\u4FDD\u62A4\u7684\u76EE\u6807\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, //-destprotected
-        {"destination.keystore.provider.name",
-                "\u76EE\u6807\u5BC6\u94A5\u5E93\u63D0\u4F9B\u65B9\u540D\u79F0"}, //-destprovidername
-        {"destination.keystore.password",
-                "\u76EE\u6807\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, //-deststorepass
-        {"destination.keystore.type",
-                "\u76EE\u6807\u5BC6\u94A5\u5E93\u7C7B\u578B"}, //-deststoretype
-        {"distinguished.name",
-                "\u552F\u4E00\u5224\u522B\u540D"}, //-dname
-        {"X.509.extension",
-                "X.509 \u6269\u5C55"}, //-ext
-        {"output.file.name",
-                "\u8F93\u51FA\u6587\u4EF6\u540D"}, //-file and -outfile
-        {"input.file.name",
-                "\u8F93\u5165\u6587\u4EF6\u540D"}, //-file and -infile
-        {"key.algorithm.name",
-                "\u5BC6\u94A5\u7B97\u6CD5\u540D\u79F0"}, //-keyalg
-        {"key.password",
-                "\u5BC6\u94A5\u53E3\u4EE4"}, //-keypass
-        {"key.bit.size",
-                "\u5BC6\u94A5\u4F4D\u5927\u5C0F"}, //-keysize
-        {"keystore.name",
-                "\u5BC6\u94A5\u5E93\u540D\u79F0"}, //-keystore
-        {"new.password",
-                "\u65B0\u53E3\u4EE4"}, //-new
-        {"do.not.prompt",
-                "\u4E0D\u63D0\u793A"}, //-noprompt
-        {"password.through.protected.mechanism",
-                "\u901A\u8FC7\u53D7\u4FDD\u62A4\u7684\u673A\u5236\u7684\u53E3\u4EE4"}, //-protected
-        {"provider.argument",
-                "\u63D0\u4F9B\u65B9\u53C2\u6570"}, //-providerarg
-        {"provider.class.name",
-                "\u63D0\u4F9B\u65B9\u7C7B\u540D"}, //-providerclass
-        {"provider.name",
-                "\u63D0\u4F9B\u65B9\u540D\u79F0"}, //-providername
-        {"provider.classpath",
-                "\u63D0\u4F9B\u65B9\u7C7B\u8DEF\u5F84"}, //-providerpath
-        {"output.in.RFC.style",
-                "\u4EE5 RFC \u6837\u5F0F\u8F93\u51FA"}, //-rfc
-        {"signature.algorithm.name",
-                "\u7B7E\u540D\u7B97\u6CD5\u540D\u79F0"}, //-sigalg
-        {"source.alias",
-                "\u6E90\u522B\u540D"}, //-srcalias
-        {"source.key.password",
-                "\u6E90\u5BC6\u94A5\u53E3\u4EE4"}, //-srckeypass
-        {"source.keystore.name",
-                "\u6E90\u5BC6\u94A5\u5E93\u540D\u79F0"}, //-srckeystore
-        {"source.keystore.password.protected",
-                "\u53D7\u4FDD\u62A4\u7684\u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, //-srcprotected
-        {"source.keystore.provider.name",
-                "\u6E90\u5BC6\u94A5\u5E93\u63D0\u4F9B\u65B9\u540D\u79F0"}, //-srcprovidername
-        {"source.keystore.password",
-                "\u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, //-srcstorepass
-        {"source.keystore.type",
-                "\u6E90\u5BC6\u94A5\u5E93\u7C7B\u578B"}, //-srcstoretype
-        {"SSL.server.host.and.port",
-                "SSL \u670D\u52A1\u5668\u4E3B\u673A\u548C\u7AEF\u53E3"}, //-sslserver
-        {"signed.jar.file",
-                "\u5DF2\u7B7E\u540D\u7684 jar \u6587\u4EF6"}, //=jarfile
-        {"certificate.validity.start.date.time",
-                "\u8BC1\u4E66\u6709\u6548\u671F\u5F00\u59CB\u65E5\u671F/\u65F6\u95F4"}, //-startdate
-        {"keystore.password",
-                "\u5BC6\u94A5\u5E93\u53E3\u4EE4"}, //-storepass
-        {"keystore.type",
-                "\u5BC6\u94A5\u5E93\u7C7B\u578B"}, //-storetype
-        {"trust.certificates.from.cacerts",
-                "\u4FE1\u4EFB\u6765\u81EA cacerts \u7684\u8BC1\u4E66"}, //-trustcacerts
-        {"verbose.output",
-                "\u8BE6\u7EC6\u8F93\u51FA"}, //-v
-        {"validity.number.of.days",
-                "\u6709\u6548\u5929\u6570"}, //-validity
-        {"Serial.ID.of.cert.to.revoke",
-                 "\u8981\u64A4\u9500\u7684\u8BC1\u4E66\u7684\u5E8F\u5217 ID"}, //-id
-        // keytool: Running part
-        {"keytool.error.", "keytool \u9519\u8BEF: "},
-        {"Illegal.option.", "\u975E\u6CD5\u9009\u9879:  "},
-        {"Illegal.value.", "\u975E\u6CD5\u503C: "},
-        {"Unknown.password.type.", "\u672A\u77E5\u53E3\u4EE4\u7C7B\u578B: "},
-        {"Cannot.find.environment.variable.",
-                "\u627E\u4E0D\u5230\u73AF\u5883\u53D8\u91CF: "},
-        {"Cannot.find.file.", "\u627E\u4E0D\u5230\u6587\u4EF6: "},
-        {"Command.option.flag.needs.an.argument.", "\u547D\u4EE4\u9009\u9879{0}\u9700\u8981\u4E00\u4E2A\u53C2\u6570\u3002"},
-        {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.",
-                "\u8B66\u544A: PKCS12 \u5BC6\u94A5\u5E93\u4E0D\u652F\u6301\u5176\u4ED6\u5B58\u50A8\u548C\u5BC6\u94A5\u53E3\u4EE4\u3002\u6B63\u5728\u5FFD\u7565\u7528\u6237\u6307\u5B9A\u7684{0}\u503C\u3002"},
-        {".keystore.must.be.NONE.if.storetype.is.{0}",
-                "\u5982\u679C -storetype \u4E3A {0}, \u5219 -keystore \u5FC5\u987B\u4E3A NONE"},
-        {"Too.many.retries.program.terminated",
-                 "\u91CD\u8BD5\u6B21\u6570\u8FC7\u591A, \u7A0B\u5E8F\u5DF2\u7EC8\u6B62"},
-        {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}",
-                "\u5982\u679C -storetype \u4E3A {0}, \u5219\u4E0D\u652F\u6301 -storepasswd \u548C -keypasswd \u547D\u4EE4"},
-        {".keypasswd.commands.not.supported.if.storetype.is.PKCS12",
-                "\u5982\u679C -storetype \u4E3A PKCS12, \u5219\u4E0D\u652F\u6301 -keypasswd \u547D\u4EE4"},
-        {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}",
-                "\u5982\u679C -storetype \u4E3A {0}, \u5219\u4E0D\u80FD\u6307\u5B9A -keypass \u548C -new"},
-        {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified",
-                "\u5982\u679C\u6307\u5B9A\u4E86 -protected, \u5219\u4E0D\u80FD\u6307\u5B9A -storepass, -keypass \u548C -new"},
-        {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "\u5982\u679C\u6307\u5B9A\u4E86 -srcprotected, \u5219\u4E0D\u80FD\u6307\u5B9A -srcstorepass \u548C -srckeypass"},
-        {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified",
-                "\u5982\u679C\u5BC6\u94A5\u5E93\u672A\u53D7\u53E3\u4EE4\u4FDD\u62A4, \u5219\u4E0D\u80FD\u6307\u5B9A -storepass, -keypass \u548C -new"},
-        {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "\u5982\u679C\u6E90\u5BC6\u94A5\u5E93\u672A\u53D7\u53E3\u4EE4\u4FDD\u62A4, \u5219\u4E0D\u80FD\u6307\u5B9A -srcstorepass \u548C -srckeypass"},
-        {"Illegal.startdate.value", "\u975E\u6CD5\u5F00\u59CB\u65E5\u671F\u503C"},
-        {"Validity.must.be.greater.than.zero",
-                "\u6709\u6548\u6027\u5FC5\u987B\u5927\u4E8E\u96F6"},
-        {"provName.not.a.provider", "{0}\u4E0D\u662F\u63D0\u4F9B\u65B9"},
-        {"Usage.error.no.command.provided", "\u7528\u6CD5\u9519\u8BEF: \u6CA1\u6709\u63D0\u4F9B\u547D\u4EE4"},
-        {"Source.keystore.file.exists.but.is.empty.", "\u6E90\u5BC6\u94A5\u5E93\u6587\u4EF6\u5B58\u5728, \u4F46\u4E3A\u7A7A: "},
-        {"Please.specify.srckeystore", "\u8BF7\u6307\u5B9A -srckeystore"},
-        {"Must.not.specify.both.v.and.rfc.with.list.command",
-                "\u4E0D\u80FD\u4F7F\u7528 'list' \u547D\u4EE4\u6765\u6307\u5B9A -v \u53CA -rfc"},
-        {"Key.password.must.be.at.least.6.characters",
-                "\u5BC6\u94A5\u53E3\u4EE4\u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"},
-        {"New.password.must.be.at.least.6.characters",
-                "\u65B0\u53E3\u4EE4\u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"},
-        {"Keystore.file.exists.but.is.empty.",
-                "\u5BC6\u94A5\u5E93\u6587\u4EF6\u5B58\u5728, \u4F46\u4E3A\u7A7A: "},
-        {"Keystore.file.does.not.exist.",
-                "\u5BC6\u94A5\u5E93\u6587\u4EF6\u4E0D\u5B58\u5728: "},
-        {"Must.specify.destination.alias", "\u5FC5\u987B\u6307\u5B9A\u76EE\u6807\u522B\u540D"},
-        {"Must.specify.alias", "\u5FC5\u987B\u6307\u5B9A\u522B\u540D"},
-        {"Keystore.password.must.be.at.least.6.characters",
-                "\u5BC6\u94A5\u5E93\u53E3\u4EE4\u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"},
-        {"Enter.keystore.password.", "\u8F93\u5165\u5BC6\u94A5\u5E93\u53E3\u4EE4:  "},
-        {"Enter.source.keystore.password.", "\u8F93\u5165\u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4:  "},
-        {"Enter.destination.keystore.password.", "\u8F93\u5165\u76EE\u6807\u5BC6\u94A5\u5E93\u53E3\u4EE4:  "},
-        {"Keystore.password.is.too.short.must.be.at.least.6.characters",
-         "\u5BC6\u94A5\u5E93\u53E3\u4EE4\u592A\u77ED - \u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"},
-        {"Unknown.Entry.Type", "\u672A\u77E5\u6761\u76EE\u7C7B\u578B"},
-        {"Too.many.failures.Alias.not.changed", "\u6545\u969C\u592A\u591A\u3002\u672A\u66F4\u6539\u522B\u540D"},
-        {"Entry.for.alias.alias.successfully.imported.",
-                 "\u5DF2\u6210\u529F\u5BFC\u5165\u522B\u540D {0} \u7684\u6761\u76EE\u3002"},
-        {"Entry.for.alias.alias.not.imported.", "\u672A\u5BFC\u5165\u522B\u540D {0} \u7684\u6761\u76EE\u3002"},
-        {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.",
-                 "\u5BFC\u5165\u522B\u540D {0} \u7684\u6761\u76EE\u65F6\u51FA\u73B0\u95EE\u9898: {1}\u3002\n\u672A\u5BFC\u5165\u522B\u540D {0} \u7684\u6761\u76EE\u3002"},
-        {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled",
-                 "\u5DF2\u5B8C\u6210\u5BFC\u5165\u547D\u4EE4: {0} \u4E2A\u6761\u76EE\u6210\u529F\u5BFC\u5165, {1} \u4E2A\u6761\u76EE\u5931\u8D25\u6216\u53D6\u6D88"},
-        {"Warning.Overwriting.existing.alias.alias.in.destination.keystore",
-                 "\u8B66\u544A: \u6B63\u5728\u8986\u76D6\u76EE\u6807\u5BC6\u94A5\u5E93\u4E2D\u7684\u73B0\u6709\u522B\u540D {0}"},
-        {"Existing.entry.alias.alias.exists.overwrite.no.",
-                 "\u5B58\u5728\u73B0\u6709\u6761\u76EE\u522B\u540D {0}, \u662F\u5426\u8986\u76D6? [\u5426]:  "},
-        {"Too.many.failures.try.later", "\u6545\u969C\u592A\u591A - \u8BF7\u7A0D\u540E\u518D\u8BD5"},
-        {"Certification.request.stored.in.file.filename.",
-                "\u5B58\u50A8\u5728\u6587\u4EF6 <{0}> \u4E2D\u7684\u8BA4\u8BC1\u8BF7\u6C42"},
-        {"Submit.this.to.your.CA", "\u5C06\u6B64\u63D0\u4EA4\u7ED9\u60A8\u7684 CA"},
-        {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
-            "\u5982\u679C\u6CA1\u6709\u6307\u5B9A\u522B\u540D, \u5219\u4E0D\u80FD\u6307\u5B9A\u76EE\u6807\u522B\u540D, \u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4\u548C\u76EE\u6807\u5BC6\u94A5\u5E93\u53E3\u4EE4"},
-        {"Certificate.stored.in.file.filename.",
-                "\u5B58\u50A8\u5728\u6587\u4EF6 <{0}> \u4E2D\u7684\u8BC1\u4E66"},
-        {"Certificate.reply.was.installed.in.keystore",
-                "\u8BC1\u4E66\u56DE\u590D\u5DF2\u5B89\u88C5\u5728\u5BC6\u94A5\u5E93\u4E2D"},
-        {"Certificate.reply.was.not.installed.in.keystore",
-                "\u8BC1\u4E66\u56DE\u590D\u672A\u5B89\u88C5\u5728\u5BC6\u94A5\u5E93\u4E2D"},
-        {"Certificate.was.added.to.keystore",
-                "\u8BC1\u4E66\u5DF2\u6DFB\u52A0\u5230\u5BC6\u94A5\u5E93\u4E2D"},
-        {"Certificate.was.not.added.to.keystore",
-                "\u8BC1\u4E66\u672A\u6DFB\u52A0\u5230\u5BC6\u94A5\u5E93\u4E2D"},
-        {".Storing.ksfname.", "[\u6B63\u5728\u5B58\u50A8{0}]"},
-        {"alias.has.no.public.key.certificate.",
-                "{0}\u6CA1\u6709\u516C\u5171\u5BC6\u94A5 (\u8BC1\u4E66)"},
-        {"Cannot.derive.signature.algorithm",
-                "\u65E0\u6CD5\u6D3E\u751F\u7B7E\u540D\u7B97\u6CD5"},
-        {"Alias.alias.does.not.exist",
-                "\u522B\u540D <{0}> \u4E0D\u5B58\u5728"},
-        {"Alias.alias.has.no.certificate",
-                "\u522B\u540D <{0}> \u6CA1\u6709\u8BC1\u4E66"},
-        {"Key.pair.not.generated.alias.alias.already.exists",
-                "\u672A\u751F\u6210\u5BC6\u94A5\u5BF9, \u522B\u540D <{0}> \u5DF2\u7ECF\u5B58\u5728"},
-        {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for",
-                "\u6B63\u5728\u4E3A\u4EE5\u4E0B\u5BF9\u8C61\u751F\u6210 {0} \u4F4D{1}\u5BC6\u94A5\u5BF9\u548C\u81EA\u7B7E\u540D\u8BC1\u4E66 ({2}) (\u6709\u6548\u671F\u4E3A {3} \u5929):\n\t {4}"},
-        {"Enter.key.password.for.alias.", "\u8F93\u5165 <{0}> \u7684\u5BC6\u94A5\u53E3\u4EE4"},
-        {".RETURN.if.same.as.keystore.password.",
-                "\t(\u5982\u679C\u548C\u5BC6\u94A5\u5E93\u53E3\u4EE4\u76F8\u540C, \u6309\u56DE\u8F66):  "},
-        {"Key.password.is.too.short.must.be.at.least.6.characters",
-                "\u5BC6\u94A5\u53E3\u4EE4\u592A\u77ED - \u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"},
-        {"Too.many.failures.key.not.added.to.keystore",
-                "\u6545\u969C\u592A\u591A - \u5BC6\u94A5\u672A\u6DFB\u52A0\u5230\u5BC6\u94A5\u5E93\u4E2D"},
-        {"Destination.alias.dest.already.exists",
-                "\u76EE\u6807\u522B\u540D <{0}> \u5DF2\u7ECF\u5B58\u5728"},
-        {"Password.is.too.short.must.be.at.least.6.characters",
-                "\u53E3\u4EE4\u592A\u77ED - \u81F3\u5C11\u5FC5\u987B\u4E3A 6 \u4E2A\u5B57\u7B26"},
-        {"Too.many.failures.Key.entry.not.cloned",
-                "\u6545\u969C\u592A\u591A\u3002\u672A\u514B\u9686\u5BC6\u94A5\u6761\u76EE"},
-        {"key.password.for.alias.", "<{0}> \u7684\u5BC6\u94A5\u53E3\u4EE4"},
-        {"Keystore.entry.for.id.getName.already.exists",
-                "<{0}> \u7684\u5BC6\u94A5\u5E93\u6761\u76EE\u5DF2\u7ECF\u5B58\u5728"},
-        {"Creating.keystore.entry.for.id.getName.",
-                "\u6B63\u5728\u521B\u5EFA <{0}> \u7684\u5BC6\u94A5\u5E93\u6761\u76EE..."},
-        {"No.entries.from.identity.database.added",
-                "\u672A\u4ECE\u8EAB\u4EFD\u6570\u636E\u5E93\u4E2D\u6DFB\u52A0\u4EFB\u4F55\u6761\u76EE"},
-        {"Alias.name.alias", "\u522B\u540D: {0}"},
-        {"Creation.date.keyStore.getCreationDate.alias.",
-                "\u521B\u5EFA\u65E5\u671F: {0,date}"},
-        {"alias.keyStore.getCreationDate.alias.",
-                "{0}, {1,date}, "},
-        {"alias.", "{0}, "},
-        {"Entry.type.type.", "\u6761\u76EE\u7C7B\u578B: {0}"},
-        {"Certificate.chain.length.", "\u8BC1\u4E66\u94FE\u957F\u5EA6: "},
-        {"Certificate.i.1.", "\u8BC1\u4E66[{0,number,integer}]:"},
-        {"Certificate.fingerprint.SHA1.", "\u8BC1\u4E66\u6307\u7EB9 (SHA1): "},
-        {"Keystore.type.", "\u5BC6\u94A5\u5E93\u7C7B\u578B: "},
-        {"Keystore.provider.", "\u5BC6\u94A5\u5E93\u63D0\u4F9B\u65B9: "},
-        {"Your.keystore.contains.keyStore.size.entry",
-                "\u60A8\u7684\u5BC6\u94A5\u5E93\u5305\u542B {0,number,integer} \u4E2A\u6761\u76EE"},
-        {"Your.keystore.contains.keyStore.size.entries",
-                "\u60A8\u7684\u5BC6\u94A5\u5E93\u5305\u542B {0,number,integer} \u4E2A\u6761\u76EE"},
-        {"Failed.to.parse.input", "\u65E0\u6CD5\u5BF9\u8F93\u5165\u8FDB\u884C\u8BED\u6CD5\u5206\u6790"},
-        {"Empty.input", "\u7A7A\u8F93\u5165"},
-        {"Not.X.509.certificate", "\u975E X.509 \u8BC1\u4E66"},
-        {"alias.has.no.public.key", "{0}\u6CA1\u6709\u516C\u5171\u5BC6\u94A5"},
-        {"alias.has.no.X.509.certificate", "{0}\u6CA1\u6709 X.509 \u8BC1\u4E66"},
-        {"New.certificate.self.signed.", "\u65B0\u8BC1\u4E66 (\u81EA\u7B7E\u540D):"},
-        {"Reply.has.no.certificates", "\u56DE\u590D\u4E2D\u6CA1\u6709\u8BC1\u4E66"},
-        {"Certificate.not.imported.alias.alias.already.exists",
-                "\u8BC1\u4E66\u672A\u5BFC\u5165, \u522B\u540D <{0}> \u5DF2\u7ECF\u5B58\u5728"},
-        {"Input.not.an.X.509.certificate", "\u6240\u8F93\u5165\u7684\u4E0D\u662F X.509 \u8BC1\u4E66"},
-        {"Certificate.already.exists.in.keystore.under.alias.trustalias.",
-                "\u5728\u522B\u540D <{0}> \u4E4B\u4E0B, \u8BC1\u4E66\u5DF2\u7ECF\u5B58\u5728\u4E8E\u5BC6\u94A5\u5E93\u4E2D"},
-        {"Do.you.still.want.to.add.it.no.",
-                "\u662F\u5426\u4ECD\u8981\u6DFB\u52A0? [\u5426]:  "},
-        {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.",
-                "\u5728\u522B\u540D <{0}> \u4E4B\u4E0B, \u8BC1\u4E66\u5DF2\u7ECF\u5B58\u5728\u4E8E\u7CFB\u7EDF\u8303\u56F4\u7684 CA \u5BC6\u94A5\u5E93\u4E2D"},
-        {"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
-                "\u662F\u5426\u4ECD\u8981\u5C06\u5B83\u6DFB\u52A0\u5230\u81EA\u5DF1\u7684\u5BC6\u94A5\u5E93? [\u5426]:  "},
-        {"Trust.this.certificate.no.", "\u662F\u5426\u4FE1\u4EFB\u6B64\u8BC1\u4E66? [\u5426]:  "},
-        {"YES", "YES"},
-        {"New.prompt.", "\u65B0{0}: "},
-        {"Passwords.must.differ", "\u53E3\u4EE4\u4E0D\u80FD\u76F8\u540C"},
-        {"Re.enter.new.prompt.", "\u91CD\u65B0\u8F93\u5165\u65B0{0}: "},
-        {"Re.enter.new.password.", "\u518D\u6B21\u8F93\u5165\u65B0\u53E3\u4EE4: "},
-        {"They.don.t.match.Try.again", "\u5B83\u4EEC\u4E0D\u5339\u914D\u3002\u8BF7\u91CD\u8BD5"},
-        {"Enter.prompt.alias.name.", "\u8F93\u5165{0}\u522B\u540D:  "},
-        {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.",
-                 "\u5BFC\u5165\u65B0\u7684\u522B\u540D\t(\u6309\u56DE\u8F66\u4EE5\u53D6\u6D88\u5BF9\u6B64\u6761\u76EE\u7684\u5BFC\u5165):  "},
-        {"Enter.alias.name.", "\u8F93\u5165\u522B\u540D:  "},
-        {".RETURN.if.same.as.for.otherAlias.",
-                "\t(\u5982\u679C\u548C <{0}> \u76F8\u540C, \u5219\u6309\u56DE\u8F66)"},
-        {".PATTERN.printX509Cert",
-                "\u6240\u6709\u8005: {0}\n\u53D1\u5E03\u8005: {1}\n\u5E8F\u5217\u53F7: {2}\n\u6709\u6548\u671F\u5F00\u59CB\u65E5\u671F: {3}, \u622A\u6B62\u65E5\u671F: {4}\n\u8BC1\u4E66\u6307\u7EB9:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t \u7B7E\u540D\u7B97\u6CD5\u540D\u79F0: {8}\n\t \u7248\u672C: {9}"},
-        {"What.is.your.first.and.last.name.",
-                "\u60A8\u7684\u540D\u5B57\u4E0E\u59D3\u6C0F\u662F\u4EC0\u4E48?"},
-        {"What.is.the.name.of.your.organizational.unit.",
-                "\u60A8\u7684\u7EC4\u7EC7\u5355\u4F4D\u540D\u79F0\u662F\u4EC0\u4E48?"},
-        {"What.is.the.name.of.your.organization.",
-                "\u60A8\u7684\u7EC4\u7EC7\u540D\u79F0\u662F\u4EC0\u4E48?"},
-        {"What.is.the.name.of.your.City.or.Locality.",
-                "\u60A8\u6240\u5728\u7684\u57CE\u5E02\u6216\u533A\u57DF\u540D\u79F0\u662F\u4EC0\u4E48?"},
-        {"What.is.the.name.of.your.State.or.Province.",
-                "\u60A8\u6240\u5728\u7684\u7701/\u5E02/\u81EA\u6CBB\u533A\u540D\u79F0\u662F\u4EC0\u4E48?"},
-        {"What.is.the.two.letter.country.code.for.this.unit.",
-                "\u8BE5\u5355\u4F4D\u7684\u53CC\u5B57\u6BCD\u56FD\u5BB6/\u5730\u533A\u4EE3\u7801\u662F\u4EC0\u4E48?"},
-        {"Is.name.correct.", "{0}\u662F\u5426\u6B63\u786E?"},
-        {"no", "\u5426"},
-        {"yes", "\u662F"},
-        {"y", "y"},
-        {".defaultValue.", "  [{0}]:  "},
-        {"Alias.alias.has.no.key",
-                "\u522B\u540D <{0}> \u6CA1\u6709\u5BC6\u94A5"},
-        {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key",
-                 "\u522B\u540D <{0}> \u5F15\u7528\u4E86\u4E0D\u5C5E\u4E8E\u79C1\u6709\u5BC6\u94A5\u6761\u76EE\u7684\u6761\u76EE\u7C7B\u578B\u3002-keyclone \u547D\u4EE4\u4EC5\u652F\u6301\u5BF9\u79C1\u6709\u5BC6\u94A5\u6761\u76EE\u7684\u514B\u9686"},
-
-        {".WARNING.WARNING.WARNING.",
-            "*****************  WARNING WARNING WARNING  *****************"},
-        {"Signer.d.", "\u7B7E\u540D\u8005 #%d:"},
-        {"Timestamp.", "\u65F6\u95F4\u6233:"},
-        {"Signature.", "\u7B7E\u540D:"},
-        {"CRLs.", "CRL:"},
-        {"Certificate.owner.", "\u8BC1\u4E66\u6240\u6709\u8005: "},
-        {"Not.a.signed.jar.file", "\u4E0D\u662F\u5DF2\u7B7E\u540D\u7684 jar \u6587\u4EF6"},
-        {"No.certificate.from.the.SSL.server",
-                "\u6CA1\u6709\u6765\u81EA SSL \u670D\u52A1\u5668\u7684\u8BC1\u4E66"},
-
-        {".The.integrity.of.the.information.stored.in.your.keystore.",
-            "* \u5B58\u50A8\u5728\u60A8\u7684\u5BC6\u94A5\u5E93\u4E2D\u7684\u4FE1\u606F\u7684\u5B8C\u6574\u6027  *\n* \u5C1A\u672A\u7ECF\u8FC7\u9A8C\u8BC1!  \u4E3A\u4E86\u9A8C\u8BC1\u5176\u5B8C\u6574\u6027, *\n* \u5FC5\u987B\u63D0\u4F9B\u5BC6\u94A5\u5E93\u53E3\u4EE4\u3002                  *"},
-        {".The.integrity.of.the.information.stored.in.the.srckeystore.",
-            "* \u5B58\u50A8\u5728 srckeystore \u4E2D\u7684\u4FE1\u606F\u7684\u5B8C\u6574\u6027*\n* \u5C1A\u672A\u7ECF\u8FC7\u9A8C\u8BC1!  \u4E3A\u4E86\u9A8C\u8BC1\u5176\u5B8C\u6574\u6027, *\n* \u5FC5\u987B\u63D0\u4F9B\u6E90\u5BC6\u94A5\u5E93\u53E3\u4EE4\u3002                  *"},
-
-        {"Certificate.reply.does.not.contain.public.key.for.alias.",
-                "\u8BC1\u4E66\u56DE\u590D\u4E2D\u4E0D\u5305\u542B <{0}> \u7684\u516C\u5171\u5BC6\u94A5"},
-        {"Incomplete.certificate.chain.in.reply",
-                "\u56DE\u590D\u4E2D\u7684\u8BC1\u4E66\u94FE\u4E0D\u5B8C\u6574"},
-        {"Certificate.chain.in.reply.does.not.verify.",
-                "\u56DE\u590D\u4E2D\u7684\u8BC1\u4E66\u94FE\u672A\u9A8C\u8BC1: "},
-        {"Top.level.certificate.in.reply.",
-                "\u56DE\u590D\u4E2D\u7684\u9876\u7EA7\u8BC1\u4E66:\n"},
-        {".is.not.trusted.", "... \u662F\u4E0D\u53EF\u4FE1\u7684\u3002"},
-        {"Install.reply.anyway.no.", "\u662F\u5426\u4ECD\u8981\u5B89\u88C5\u56DE\u590D? [\u5426]:  "},
-        {"NO", "NO"},
-        {"Public.keys.in.reply.and.keystore.don.t.match",
-                "\u56DE\u590D\u4E2D\u7684\u516C\u5171\u5BC6\u94A5\u4E0E\u5BC6\u94A5\u5E93\u4E0D\u5339\u914D"},
-        {"Certificate.reply.and.certificate.in.keystore.are.identical",
-                "\u8BC1\u4E66\u56DE\u590D\u4E0E\u5BC6\u94A5\u5E93\u4E2D\u7684\u8BC1\u4E66\u662F\u76F8\u540C\u7684"},
-        {"Failed.to.establish.chain.from.reply",
-                "\u65E0\u6CD5\u4ECE\u56DE\u590D\u4E2D\u5EFA\u7ACB\u94FE"},
-        {"n", "n"},
-        {"Wrong.answer.try.again", "\u9519\u8BEF\u7684\u7B54\u6848, \u8BF7\u518D\u8BD5\u4E00\u6B21"},
-        {"Secret.key.not.generated.alias.alias.already.exists",
-                "\u6CA1\u6709\u751F\u6210\u5BC6\u94A5, \u522B\u540D <{0}> \u5DF2\u7ECF\u5B58\u5728"},
-        {"Please.provide.keysize.for.secret.key.generation",
-                "\u8BF7\u63D0\u4F9B -keysize \u4EE5\u751F\u6210\u5BC6\u94A5"},
-
-        {"Extensions.", "\u6269\u5C55: "},
-        {".Empty.value.", "(\u7A7A\u503C)"},
-        {"Extension.Request.", "\u6269\u5C55\u8BF7\u6C42:"},
-        {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.",
-                "PKCS #10 \u8BC1\u4E66\u8BF7\u6C42 (\u7248\u672C 1.0)\n\u4E3B\u9898: %s\n\u516C\u5171\u5BC6\u94A5: %s \u683C\u5F0F %s \u5BC6\u94A5\n"},
-        {"Unknown.keyUsage.type.", "\u672A\u77E5 keyUsage \u7C7B\u578B: "},
-        {"Unknown.extendedkeyUsage.type.", "\u672A\u77E5 extendedkeyUsage \u7C7B\u578B: "},
-        {"Unknown.AccessDescription.type.", "\u672A\u77E5 AccessDescription \u7C7B\u578B: "},
-        {"Unrecognized.GeneralName.type.", "\u65E0\u6CD5\u8BC6\u522B\u7684 GeneralName \u7C7B\u578B: "},
-        {"This.extension.cannot.be.marked.as.critical.",
-                 "\u65E0\u6CD5\u5C06\u6B64\u6269\u5C55\u6807\u8BB0\u4E3A\u201C\u4E25\u91CD\u201D\u3002"},
-        {"Odd.number.of.hex.digits.found.", "\u627E\u5230\u5947\u6570\u4E2A\u5341\u516D\u8FDB\u5236\u6570\u5B57: "},
-        {"Unknown.extension.type.", "\u672A\u77E5\u6269\u5C55\u7C7B\u578B: "},
-        {"command.{0}.is.ambiguous.", "\u547D\u4EE4{0}\u4E0D\u660E\u786E:"},
-
-        // policytool
-        {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.",
-                "\u8B66\u544A: \u522B\u540D {0} \u7684\u516C\u5171\u5BC6\u94A5\u4E0D\u5B58\u5728\u3002\u8BF7\u786E\u4FDD\u5DF2\u6B63\u786E\u914D\u7F6E\u5BC6\u94A5\u5E93\u3002"},
-        {"Warning.Class.not.found.class", "\u8B66\u544A: \u627E\u4E0D\u5230\u7C7B: {0}"},
-        {"Warning.Invalid.argument.s.for.constructor.arg",
-                "\u8B66\u544A: \u6784\u9020\u5668\u7684\u53C2\u6570\u65E0\u6548: {0}"},
-        {"Illegal.Principal.Type.type", "\u975E\u6CD5\u7684\u4E3B\u7528\u6237\u7C7B\u578B: {0}"},
-        {"Illegal.option.option", "\u975E\u6CD5\u9009\u9879: {0}"},
-        {"Usage.policytool.options.", "\u7528\u6CD5: policytool [\u9009\u9879]"},
-        {".file.file.policy.file.location",
-                "  [-file <file>]    \u7B56\u7565\u6587\u4EF6\u4F4D\u7F6E"},
-        {"New", "\u65B0\u5EFA"},
-        {"Open", "\u6253\u5F00"},
-        {"Save", "\u4FDD\u5B58"},
-        {"Save.As", "\u53E6\u5B58\u4E3A"},
-        {"View.Warning.Log", "\u67E5\u770B\u8B66\u544A\u65E5\u5FD7"},
-        {"Exit", "\u9000\u51FA"},
-        {"Add.Policy.Entry", "\u6DFB\u52A0\u7B56\u7565\u6761\u76EE"},
-        {"Edit.Policy.Entry", "\u7F16\u8F91\u7B56\u7565\u6761\u76EE"},
-        {"Remove.Policy.Entry", "\u5220\u9664\u7B56\u7565\u6761\u76EE"},
-        {"Edit", "\u7F16\u8F91"},
-        {"Retain", "\u4FDD\u7559"},
-
-        {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes",
-            "\u8B66\u544A: \u6587\u4EF6\u540D\u5305\u542B\u8F6C\u4E49\u7684\u53CD\u659C\u6760\u5B57\u7B26\u3002\u4E0D\u9700\u8981\u5BF9\u53CD\u659C\u6760\u5B57\u7B26\u8FDB\u884C\u8F6C\u4E49 (\u8BE5\u5DE5\u5177\u5728\u5C06\u7B56\u7565\u5185\u5BB9\u5199\u5165\u6C38\u4E45\u5B58\u50A8\u65F6\u4F1A\u6839\u636E\u9700\u8981\u5BF9\u5B57\u7B26\u8FDB\u884C\u8F6C\u4E49)\u3002\n\n\u5355\u51FB\u201C\u4FDD\u7559\u201D\u53EF\u4FDD\u7559\u8F93\u5165\u7684\u540D\u79F0, \u6216\u8005\u5355\u51FB\u201C\u7F16\u8F91\u201D\u53EF\u7F16\u8F91\u8BE5\u540D\u79F0\u3002"},
-
-        {"Add.Public.Key.Alias", "\u6DFB\u52A0\u516C\u5171\u5BC6\u94A5\u522B\u540D"},
-        {"Remove.Public.Key.Alias", "\u5220\u9664\u516C\u5171\u5BC6\u94A5\u522B\u540D"},
-        {"File", "\u6587\u4EF6"},
-        {"KeyStore", "\u5BC6\u94A5\u5E93"},
-        {"Policy.File.", "\u7B56\u7565\u6587\u4EF6:"},
-        {"Could.not.open.policy.file.policyFile.e.toString.",
-                "\u65E0\u6CD5\u6253\u5F00\u7B56\u7565\u6587\u4EF6: {0}: {1}"},
-        {"Policy.Tool", "\u7B56\u7565\u5DE5\u5177"},
-        {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.",
-                "\u6253\u5F00\u7B56\u7565\u914D\u7F6E\u65F6\u51FA\u9519\u3002\u6709\u5173\u8BE6\u7EC6\u4FE1\u606F, \u8BF7\u67E5\u770B\u8B66\u544A\u65E5\u5FD7\u3002"},
-        {"Error", "\u9519\u8BEF"},
-        {"OK", "\u786E\u5B9A"},
-        {"Status", "\u72B6\u6001"},
-        {"Warning", "\u8B66\u544A"},
-        {"Permission.",
-                "\u6743\u9650:                                                       "},
-        {"Principal.Type.", "\u4E3B\u7528\u6237\u7C7B\u578B:"},
-        {"Principal.Name.", "\u4E3B\u7528\u6237\u540D\u79F0:"},
-        {"Target.Name.",
-                "\u76EE\u6807\u540D\u79F0:                                                    "},
-        {"Actions.",
-                "\u64CD\u4F5C:                                                             "},
-        {"OK.to.overwrite.existing.file.filename.",
-                "\u786E\u8BA4\u8986\u76D6\u73B0\u6709\u7684\u6587\u4EF6{0}?"},
-        {"Cancel", "\u53D6\u6D88"},
-        {"CodeBase.", "CodeBase:"},
-        {"SignedBy.", "SignedBy:"},
-        {"Add.Principal", "\u6DFB\u52A0\u4E3B\u7528\u6237"},
-        {"Edit.Principal", "\u7F16\u8F91\u4E3B\u7528\u6237"},
-        {"Remove.Principal", "\u5220\u9664\u4E3B\u7528\u6237"},
-        {"Principals.", "\u4E3B\u7528\u6237:"},
-        {".Add.Permission", "  \u6DFB\u52A0\u6743\u9650"},
-        {".Edit.Permission", "  \u7F16\u8F91\u6743\u9650"},
-        {"Remove.Permission", "\u5220\u9664\u6743\u9650"},
-        {"Done", "\u5B8C\u6210"},
-        {"KeyStore.URL.", "\u5BC6\u94A5\u5E93 URL:"},
-        {"KeyStore.Type.", "\u5BC6\u94A5\u5E93\u7C7B\u578B:"},
-        {"KeyStore.Provider.", "\u5BC6\u94A5\u5E93\u63D0\u4F9B\u65B9:"},
-        {"KeyStore.Password.URL.", "\u5BC6\u94A5\u5E93\u53E3\u4EE4 URL:"},
-        {"Principals", "\u4E3B\u7528\u6237"},
-        {".Edit.Principal.", "  \u7F16\u8F91\u4E3B\u7528\u6237:"},
-        {".Add.New.Principal.", "  \u6DFB\u52A0\u65B0\u4E3B\u7528\u6237:"},
-        {"Permissions", "\u6743\u9650"},
-        {".Edit.Permission.", "  \u7F16\u8F91\u6743\u9650:"},
-        {".Add.New.Permission.", "  \u52A0\u5165\u65B0\u7684\u6743\u9650:"},
-        {"Signed.By.", "\u7B7E\u7F72\u4EBA: "},
-        {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name",
-            "\u6CA1\u6709\u901A\u914D\u7B26\u540D\u79F0, \u65E0\u6CD5\u4F7F\u7528\u901A\u914D\u7B26\u7C7B\u6307\u5B9A\u4E3B\u7528\u6237"},
-        {"Cannot.Specify.Principal.without.a.Name",
-            "\u6CA1\u6709\u540D\u79F0, \u65E0\u6CD5\u6307\u5B9A\u4E3B\u7528\u6237"},
-        {"Permission.and.Target.Name.must.have.a.value",
-                "\u6743\u9650\u53CA\u76EE\u6807\u540D\u5FC5\u987B\u6709\u4E00\u4E2A\u503C"},
-        {"Remove.this.Policy.Entry.", "\u662F\u5426\u5220\u9664\u6B64\u7B56\u7565\u6761\u76EE?"},
-        {"Overwrite.File", "\u8986\u76D6\u6587\u4EF6"},
-        {"Policy.successfully.written.to.filename",
-                "\u7B56\u7565\u5DF2\u6210\u529F\u5199\u5165\u5230{0}"},
-        {"null.filename", "\u7A7A\u6587\u4EF6\u540D"},
-        {"Save.changes.", "\u662F\u5426\u4FDD\u5B58\u6240\u505A\u7684\u66F4\u6539?"},
-        {"Yes", "\u662F"},
-        {"No", "\u5426"},
-        {"Policy.Entry", "\u7B56\u7565\u6761\u76EE"},
-        {"Save.Changes", "\u4FDD\u5B58\u66F4\u6539"},
-        {"No.Policy.Entry.selected", "\u6CA1\u6709\u9009\u62E9\u7B56\u7565\u6761\u76EE"},
-        {"Unable.to.open.KeyStore.ex.toString.",
-                "\u65E0\u6CD5\u6253\u5F00\u5BC6\u94A5\u5E93: {0}"},
-        {"No.principal.selected", "\u672A\u9009\u62E9\u4E3B\u7528\u6237"},
-        {"No.permission.selected", "\u6CA1\u6709\u9009\u62E9\u6743\u9650"},
-        {"name", "\u540D\u79F0"},
-        {"configuration.type", "\u914D\u7F6E\u7C7B\u578B"},
-        {"environment.variable.name", "\u73AF\u5883\u53D8\u91CF\u540D"},
-        {"library.name", "\u5E93\u540D\u79F0"},
-        {"package.name", "\u7A0B\u5E8F\u5305\u540D\u79F0"},
-        {"policy.type", "\u7B56\u7565\u7C7B\u578B"},
-        {"property.name", "\u5C5E\u6027\u540D\u79F0"},
-        {"Principal.List", "\u4E3B\u7528\u6237\u5217\u8868"},
-        {"Permission.List", "\u6743\u9650\u5217\u8868"},
-        {"Code.Base", "\u4EE3\u7801\u5E93"},
-        {"KeyStore.U.R.L.", "\u5BC6\u94A5\u5E93 URL:"},
-        {"KeyStore.Password.U.R.L.", "\u5BC6\u94A5\u5E93\u53E3\u4EE4 URL:"},
-
-
-        // javax.security.auth.PrivateCredentialPermission
-        {"invalid.null.input.s.", "\u65E0\u6548\u7684\u7A7A\u8F93\u5165"},
-        {"actions.can.only.be.read.", "\u64CD\u4F5C\u53EA\u80FD\u4E3A '\u8BFB\u53D6'"},
-        {"permission.name.name.syntax.invalid.",
-                "\u6743\u9650\u540D\u79F0 [{0}] \u8BED\u6CD5\u65E0\u6548: "},
-        {"Credential.Class.not.followed.by.a.Principal.Class.and.Name",
-                "\u8EAB\u4EFD\u8BC1\u660E\u7C7B\u540E\u9762\u672A\u8DDF\u968F\u4E3B\u7528\u6237\u7C7B\u53CA\u540D\u79F0"},
-        {"Principal.Class.not.followed.by.a.Principal.Name",
-                "\u4E3B\u7528\u6237\u7C7B\u540E\u9762\u672A\u8DDF\u968F\u4E3B\u7528\u6237\u540D\u79F0"},
-        {"Principal.Name.must.be.surrounded.by.quotes",
-                "\u4E3B\u7528\u6237\u540D\u79F0\u5FC5\u987B\u653E\u5728\u5F15\u53F7\u5185"},
-        {"Principal.Name.missing.end.quote",
-                "\u4E3B\u7528\u6237\u540D\u79F0\u7F3A\u5C11\u53F3\u5F15\u53F7"},
-        {"PrivateCredentialPermission.Principal.Class.can.not.be.a.wildcard.value.if.Principal.Name.is.not.a.wildcard.value",
-                "\u5982\u679C\u4E3B\u7528\u6237\u540D\u79F0\u4E0D\u662F\u901A\u914D\u7B26 (*) \u503C, \u90A3\u4E48 PrivateCredentialPermission \u4E3B\u7528\u6237\u7C7B\u4E0D\u80FD\u662F\u901A\u914D\u7B26 (*) \u503C"},
-        {"CredOwner.Principal.Class.class.Principal.Name.name",
-                "CredOwner:\n\t\u4E3B\u7528\u6237\u7C7B = {0}\n\t\u4E3B\u7528\u6237\u540D\u79F0 = {1}"},
-
-        // javax.security.auth.x500
-        {"provided.null.name", "\u63D0\u4F9B\u7684\u540D\u79F0\u4E3A\u7A7A\u503C"},
-        {"provided.null.keyword.map", "\u63D0\u4F9B\u7684\u5173\u952E\u5B57\u6620\u5C04\u4E3A\u7A7A\u503C"},
-        {"provided.null.OID.map", "\u63D0\u4F9B\u7684 OID \u6620\u5C04\u4E3A\u7A7A\u503C"},
-
-        // javax.security.auth.Subject
-        {"invalid.null.AccessControlContext.provided",
-                "\u63D0\u4F9B\u4E86\u65E0\u6548\u7684\u7A7A AccessControlContext"},
-        {"invalid.null.action.provided", "\u63D0\u4F9B\u4E86\u65E0\u6548\u7684\u7A7A\u64CD\u4F5C"},
-        {"invalid.null.Class.provided", "\u63D0\u4F9B\u4E86\u65E0\u6548\u7684\u7A7A\u7C7B"},
-        {"Subject.", "\u4E3B\u9898: \n"},
-        {".Principal.", "\t\u4E3B\u7528\u6237: "},
-        {".Public.Credential.", "\t\u516C\u5171\u8EAB\u4EFD\u8BC1\u660E: "},
-        {".Private.Credentials.inaccessible.",
-                "\t\u65E0\u6CD5\u8BBF\u95EE\u4E13\u7528\u8EAB\u4EFD\u8BC1\u660E\n"},
-        {".Private.Credential.", "\t\u4E13\u7528\u8EAB\u4EFD\u8BC1\u660E: "},
-        {".Private.Credential.inaccessible.",
-                "\t\u65E0\u6CD5\u8BBF\u95EE\u4E13\u7528\u8EAB\u4EFD\u8BC1\u660E\n"},
-        {"Subject.is.read.only", "\u4E3B\u9898\u4E3A\u53EA\u8BFB"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.java.security.Principal.to.a.Subject.s.Principal.Set",
-                "\u6B63\u5728\u5C1D\u8BD5\u5C06\u4E00\u4E2A\u975E java.security.Principal \u5B9E\u4F8B\u7684\u5BF9\u8C61\u6DFB\u52A0\u5230\u4E3B\u9898\u7684\u4E3B\u7528\u6237\u96C6\u4E2D"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.class",
-                "\u6B63\u5728\u5C1D\u8BD5\u6DFB\u52A0\u4E00\u4E2A\u975E{0}\u5B9E\u4F8B\u7684\u5BF9\u8C61"},
-
-        // javax.security.auth.login.AppConfigurationEntry
-        {"LoginModuleControlFlag.", "LoginModuleControlFlag: "},
-
-        // javax.security.auth.login.LoginContext
-        {"Invalid.null.input.name", "\u65E0\u6548\u7A7A\u8F93\u5165: \u540D\u79F0"},
-        {"No.LoginModules.configured.for.name",
-         "\u6CA1\u6709\u4E3A{0}\u914D\u7F6E LoginModules"},
-        {"invalid.null.Subject.provided", "\u63D0\u4F9B\u4E86\u65E0\u6548\u7684\u7A7A\u4E3B\u9898"},
-        {"invalid.null.CallbackHandler.provided",
-                "\u63D0\u4F9B\u4E86\u65E0\u6548\u7684\u7A7A CallbackHandler"},
-        {"null.subject.logout.called.before.login",
-                "\u7A7A\u4E3B\u9898 - \u5728\u767B\u5F55\u4E4B\u524D\u8C03\u7528\u4E86\u6CE8\u9500"},
-        {"unable.to.instantiate.LoginModule.module.because.it.does.not.provide.a.no.argument.constructor",
-                "\u65E0\u6CD5\u5B9E\u4F8B\u5316 LoginModule, {0}, \u56E0\u4E3A\u5B83\u672A\u63D0\u4F9B\u4E00\u4E2A\u65E0\u53C2\u6570\u6784\u9020\u5668"},
-        {"unable.to.instantiate.LoginModule",
-                "\u65E0\u6CD5\u5B9E\u4F8B\u5316 LoginModule"},
-        {"unable.to.instantiate.LoginModule.",
-                "\u65E0\u6CD5\u5B9E\u4F8B\u5316 LoginModule: "},
-        {"unable.to.find.LoginModule.class.",
-                "\u65E0\u6CD5\u627E\u5230 LoginModule \u7C7B: "},
-        {"unable.to.access.LoginModule.",
-                "\u65E0\u6CD5\u8BBF\u95EE LoginModule: "},
-        {"Login.Failure.all.modules.ignored",
-                "\u767B\u5F55\u5931\u8D25: \u5FFD\u7565\u6240\u6709\u6A21\u5757"},
-
-        // sun.security.provider.PolicyFile
-
-        {"java.security.policy.error.parsing.policy.message",
-                "java.security.policy: \u89E3\u6790{0}\u65F6\u51FA\u9519:\n\t{1}"},
-        {"java.security.policy.error.adding.Permission.perm.message",
-                "java.security.policy: \u6DFB\u52A0\u6743\u9650{0}\u65F6\u51FA\u9519:\n\t{1}"},
-        {"java.security.policy.error.adding.Entry.message",
-                "java.security.policy: \u6DFB\u52A0\u6761\u76EE\u65F6\u51FA\u9519:\n\t{0}"},
-        {"alias.name.not.provided.pe.name.", "\u672A\u63D0\u4F9B\u522B\u540D ({0})"},
-        {"unable.to.perform.substitution.on.alias.suffix",
-                "\u65E0\u6CD5\u5728\u522B\u540D {0} \u4E0A\u6267\u884C\u66FF\u4EE3"},
-        {"substitution.value.prefix.unsupported",
-                "\u66FF\u4EE3\u503C{0}\u4E0D\u53D7\u652F\u6301"},
-        {"LPARAM", "("},
-        {"RPARAM", ")"},
-        {"type.can.t.be.null","\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A\u503C"},
-
-        // sun.security.provider.PolicyParser
-        {"keystorePasswordURL.can.not.be.specified.without.also.specifying.keystore",
-                "\u4E0D\u6307\u5B9A\u5BC6\u94A5\u5E93\u65F6\u65E0\u6CD5\u6307\u5B9A keystorePasswordURL"},
-        {"expected.keystore.type", "\u5E94\u4E3A\u5BC6\u94A5\u5E93\u7C7B\u578B"},
-        {"expected.keystore.provider", "\u5E94\u4E3A\u5BC6\u94A5\u5E93\u63D0\u4F9B\u65B9"},
-        {"multiple.Codebase.expressions",
-                "\u591A\u4E2A\u4EE3\u7801\u5E93\u8868\u8FBE\u5F0F"},
-        {"multiple.SignedBy.expressions","\u591A\u4E2A SignedBy \u8868\u8FBE\u5F0F"},
-        {"SignedBy.has.empty.alias","SignedBy \u6709\u7A7A\u522B\u540D"},
-        {"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
-                "\u6CA1\u6709\u901A\u914D\u7B26\u540D\u79F0, \u65E0\u6CD5\u4F7F\u7528\u901A\u914D\u7B26\u7C7B\u6307\u5B9A\u4E3B\u7528\u6237"},
-        {"expected.codeBase.or.SignedBy.or.Principal",
-                "\u5E94\u4E3A codeBase, SignedBy \u6216\u4E3B\u7528\u6237"},
-        {"expected.permission.entry", "\u5E94\u4E3A\u6743\u9650\u6761\u76EE"},
-        {"number.", "\u7F16\u53F7 "},
-        {"expected.expect.read.end.of.file.",
-                "\u5E94\u4E3A [{0}], \u8BFB\u53D6\u7684\u662F [\u6587\u4EF6\u7ED3\u5C3E]"},
-        {"expected.read.end.of.file.",
-                "\u5E94\u4E3A [;], \u8BFB\u53D6\u7684\u662F [\u6587\u4EF6\u7ED3\u5C3E]"},
-        {"line.number.msg", "\u5217{0}: {1}"},
-        {"line.number.expected.expect.found.actual.",
-                "\u884C\u53F7 {0}: \u5E94\u4E3A [{1}], \u627E\u5230 [{2}]"},
-        {"null.principalClass.or.principalName",
-                "principalClass \u6216 principalName \u4E3A\u7A7A\u503C"},
-
-        // sun.security.pkcs11.SunPKCS11
-        {"PKCS11.Token.providerName.Password.",
-                "PKCS11 \u6807\u8BB0 [{0}] \u53E3\u4EE4: "},
-
-        /* --- DEPRECATED --- */
-        // javax.security.auth.Policy
-        {"unable.to.instantiate.Subject.based.policy",
-                "\u65E0\u6CD5\u5B9E\u4F8B\u5316\u57FA\u4E8E\u4E3B\u9898\u7684\u7B56\u7565"}
-    };
-
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     *
-     * <p>
-     *
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-}
-
diff --git a/ojluni/src/main/java/sun/security/util/Resources_zh_TW.java b/ojluni/src/main/java/sun/security/util/Resources_zh_TW.java
deleted file mode 100755
index ae10e51..0000000
--- a/ojluni/src/main/java/sun/security/util/Resources_zh_TW.java
+++ /dev/null
@@ -1,661 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, 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.
- */
-
-package sun.security.util;
-
-/**
- * <p> This class represents the <code>ResourceBundle</code>
- * for javax.security.auth and sun.security.
- *
- */
-public class Resources_zh_TW extends java.util.ListResourceBundle {
-
-    private static final Object[][] contents = {
-
-        // shared (from jarsigner)
-        {"SPACE", " "},
-        {"2SPACE", "  "},
-        {"6SPACE", "      "},
-        {"COMMA", ", "},
-        // shared (from keytool)
-        {"NEWLINE", "\n"},
-        {"STAR",
-                "*******************************************"},
-        {"STARNN",
-                "*******************************************\n\n"},
-
-        // keytool: Help part
-        {".OPTION.", " [OPTION]..."},
-        {"Options.", "\u9078\u9805:"},
-        {"Use.keytool.help.for.all.available.commands",
-                 "\u4F7F\u7528 \"keytool -help\" \u53D6\u5F97\u6240\u6709\u53EF\u7528\u7684\u547D\u4EE4"},
-        {"Key.and.Certificate.Management.Tool",
-                 "\u91D1\u9470\u8207\u6191\u8B49\u7BA1\u7406\u5DE5\u5177"},
-        {"Commands.", "\u547D\u4EE4:"},
-        {"Use.keytool.command.name.help.for.usage.of.command.name",
-                "\u4F7F\u7528 \"keytool -command_name -help\" \u53D6\u5F97 command_name \u7684\u7528\u6CD5"},
-        // keytool: help: commands
-        {"Generates.a.certificate.request",
-                "\u7522\u751F\u6191\u8B49\u8981\u6C42"}, //-certreq
-        {"Changes.an.entry.s.alias",
-                "\u8B8A\u66F4\u9805\u76EE\u7684\u5225\u540D"}, //-changealias
-        {"Deletes.an.entry",
-                "\u522A\u9664\u9805\u76EE"}, //-delete
-        {"Exports.certificate",
-                "\u532F\u51FA\u6191\u8B49"}, //-exportcert
-        {"Generates.a.key.pair",
-                "\u7522\u751F\u91D1\u9470\u7D44"}, //-genkeypair
-        {"Generates.a.secret.key",
-                "\u7522\u751F\u79D8\u5BC6\u91D1\u9470"}, //-genseckey
-        {"Generates.certificate.from.a.certificate.request",
-                "\u5F9E\u6191\u8B49\u8981\u6C42\u7522\u751F\u6191\u8B49"}, //-gencert
-        {"Generates.CRL", "\u7522\u751F CRL"}, //-gencrl
-        {"Imports.entries.from.a.JDK.1.1.x.style.identity.database",
-                "\u5F9E JDK 1.1.x-style \u8B58\u5225\u8CC7\u6599\u5EAB\u532F\u5165\u9805\u76EE"}, //-identitydb
-        {"Imports.a.certificate.or.a.certificate.chain",
-                "\u532F\u5165\u6191\u8B49\u6216\u6191\u8B49\u93C8"}, //-importcert
-        {"Imports.one.or.all.entries.from.another.keystore",
-                "\u5F9E\u5176\u4ED6\u91D1\u9470\u5132\u5B58\u5EAB\u532F\u5165\u4E00\u500B\u6216\u5168\u90E8\u9805\u76EE"}, //-importkeystore
-        {"Clones.a.key.entry",
-                "\u8907\u88FD\u91D1\u9470\u9805\u76EE"}, //-keyclone
-        {"Changes.the.key.password.of.an.entry",
-                "\u8B8A\u66F4\u9805\u76EE\u7684\u91D1\u9470\u5BC6\u78BC"}, //-keypasswd
-        {"Lists.entries.in.a.keystore",
-                "\u5217\u793A\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684\u9805\u76EE"}, //-list
-        {"Prints.the.content.of.a.certificate",
-                "\u5217\u5370\u6191\u8B49\u7684\u5167\u5BB9"}, //-printcert
-        {"Prints.the.content.of.a.certificate.request",
-                "\u5217\u5370\u6191\u8B49\u8981\u6C42\u7684\u5167\u5BB9"}, //-printcertreq
-        {"Prints.the.content.of.a.CRL.file",
-                "\u5217\u5370 CRL \u6A94\u6848\u7684\u5167\u5BB9"}, //-printcrl
-        {"Generates.a.self.signed.certificate",
-                "\u7522\u751F\u81EA\u884C\u7C3D\u7F72\u7684\u6191\u8B49"}, //-selfcert
-        {"Changes.the.store.password.of.a.keystore",
-                "\u8B8A\u66F4\u91D1\u9470\u5132\u5B58\u5EAB\u7684\u5132\u5B58\u5BC6\u78BC"}, //-storepasswd
-        // keytool: help: options
-        {"alias.name.of.the.entry.to.process",
-                "\u8981\u8655\u7406\u9805\u76EE\u7684\u5225\u540D\u540D\u7A31"}, //-alias
-        {"destination.alias",
-                "\u76EE\u7684\u5730\u5225\u540D"}, //-destalias
-        {"destination.key.password",
-                "\u76EE\u7684\u5730\u91D1\u9470\u5BC6\u78BC"}, //-destkeypass
-        {"destination.keystore.name",
-                "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u540D\u7A31"}, //-destkeystore
-        {"destination.keystore.password.protected",
-                "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u4FDD\u8B77"}, //-destprotected
-        {"destination.keystore.provider.name",
-                "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005\u540D\u7A31"}, //-destprovidername
-        {"destination.keystore.password",
-                "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC"}, //-deststorepass
-        {"destination.keystore.type",
-                "\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B"}, //-deststoretype
-        {"distinguished.name",
-                "\u8FA8\u5225\u540D\u7A31"}, //-dname
-        {"X.509.extension",
-                "X.509 \u64F4\u5145\u5957\u4EF6"}, //-ext
-        {"output.file.name",
-                "\u8F38\u51FA\u6A94\u6848\u540D\u7A31"}, //-file and -outfile
-        {"input.file.name",
-                "\u8F38\u5165\u6A94\u6848\u540D\u7A31"}, //-file and -infile
-        {"key.algorithm.name",
-                "\u91D1\u9470\u6F14\u7B97\u6CD5\u540D\u7A31"}, //-keyalg
-        {"key.password",
-                "\u91D1\u9470\u5BC6\u78BC"}, //-keypass
-        {"key.bit.size",
-                "\u91D1\u9470\u4F4D\u5143\u5927\u5C0F"}, //-keysize
-        {"keystore.name",
-                "\u91D1\u9470\u5132\u5B58\u5EAB\u540D\u7A31"}, //-keystore
-        {"new.password",
-                "\u65B0\u5BC6\u78BC"}, //-new
-        {"do.not.prompt",
-                "\u4E0D\u8981\u63D0\u793A"}, //-noprompt
-        {"password.through.protected.mechanism",
-                "\u7D93\u7531\u4FDD\u8B77\u6A5F\u5236\u7684\u5BC6\u78BC"}, //-protected
-        {"provider.argument",
-                "\u63D0\u4F9B\u8005\u5F15\u6578"}, //-providerarg
-        {"provider.class.name",
-                "\u63D0\u4F9B\u8005\u985E\u5225\u540D\u7A31"}, //-providerclass
-        {"provider.name",
-                "\u63D0\u4F9B\u8005\u540D\u7A31"}, //-providername
-        {"provider.classpath",
-                "\u63D0\u4F9B\u8005\u985E\u5225\u8DEF\u5F91"}, //-providerpath
-        {"output.in.RFC.style",
-                "\u4EE5 RFC \u6A23\u5F0F\u8F38\u51FA"}, //-rfc
-        {"signature.algorithm.name",
-                "\u7C3D\u7AE0\u6F14\u7B97\u6CD5\u540D\u7A31"}, //-sigalg
-        {"source.alias",
-                "\u4F86\u6E90\u5225\u540D"}, //-srcalias
-        {"source.key.password",
-                "\u4F86\u6E90\u91D1\u9470\u5BC6\u78BC"}, //-srckeypass
-        {"source.keystore.name",
-                "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u540D\u7A31"}, //-srckeystore
-        {"source.keystore.password.protected",
-                "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u4FDD\u8B77"}, //-srcprotected
-        {"source.keystore.provider.name",
-                "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005\u540D\u7A31"}, //-srcprovidername
-        {"source.keystore.password",
-                "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC"}, //-srcstorepass
-        {"source.keystore.type",
-                "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B"}, //-srcstoretype
-        {"SSL.server.host.and.port",
-                "SSL \u4F3A\u670D\u5668\u4E3B\u6A5F\u8207\u9023\u63A5\u57E0"}, //-sslserver
-        {"signed.jar.file",
-                "\u7C3D\u7F72\u7684 jar \u6A94\u6848"}, //=jarfile
-        {"certificate.validity.start.date.time",
-                "\u6191\u8B49\u6709\u6548\u6027\u958B\u59CB\u65E5\u671F/\u6642\u9593"}, //-startdate
-        {"keystore.password",
-                "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC"}, //-storepass
-        {"keystore.type",
-                "\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B"}, //-storetype
-        {"trust.certificates.from.cacerts",
-                "\u4F86\u81EA cacerts \u7684\u4FE1\u4EFB\u6191\u8B49"}, //-trustcacerts
-        {"verbose.output",
-                "\u8A73\u7D30\u8CC7\u8A0A\u8F38\u51FA"}, //-v
-        {"validity.number.of.days",
-                "\u6709\u6548\u6027\u65E5\u6578"}, //-validity
-        {"Serial.ID.of.cert.to.revoke",
-                 "\u8981\u64A4\u92B7\u6191\u8B49\u7684\u5E8F\u5217 ID"}, //-id
-        // keytool: Running part
-        {"keytool.error.", "\u91D1\u9470\u5DE5\u5177\u932F\u8AA4: "},
-        {"Illegal.option.", "\u7121\u6548\u7684\u9078\u9805:"},
-        {"Illegal.value.", "\u7121\u6548\u503C: "},
-        {"Unknown.password.type.", "\u4E0D\u660E\u7684\u5BC6\u78BC\u985E\u578B: "},
-        {"Cannot.find.environment.variable.",
-                "\u627E\u4E0D\u5230\u74B0\u5883\u8B8A\u6578: "},
-        {"Cannot.find.file.", "\u627E\u4E0D\u5230\u6A94\u6848: "},
-        {"Command.option.flag.needs.an.argument.", "\u547D\u4EE4\u9078\u9805 {0} \u9700\u8981\u5F15\u6578\u3002"},
-        {"Warning.Different.store.and.key.passwords.not.supported.for.PKCS12.KeyStores.Ignoring.user.specified.command.value.",
-                "\u8B66\u544A: PKCS12 \u91D1\u9470\u5132\u5B58\u5EAB\u4E0D\u652F\u63F4\u4E0D\u540C\u7684\u5132\u5B58\u5EAB\u548C\u91D1\u9470\u5BC6\u78BC\u3002\u5FFD\u7565\u4F7F\u7528\u8005\u6307\u5B9A\u7684 {0} \u503C\u3002"},
-        {".keystore.must.be.NONE.if.storetype.is.{0}",
-                "\u5982\u679C -storetype \u70BA {0}\uFF0C\u5247 -keystore \u5FC5\u9808\u70BA NONE"},
-        {"Too.many.retries.program.terminated",
-                 "\u91CD\u8A66\u6B21\u6578\u592A\u591A\uFF0C\u7A0B\u5F0F\u5DF2\u7D42\u6B62"},
-        {".storepasswd.and.keypasswd.commands.not.supported.if.storetype.is.{0}",
-                "\u5982\u679C -storetype \u70BA {0}\uFF0C\u5247\u4E0D\u652F\u63F4 -storepasswd \u548C -keypasswd \u547D\u4EE4"},
-        {".keypasswd.commands.not.supported.if.storetype.is.PKCS12",
-                "\u5982\u679C -storetype \u70BA PKCS12\uFF0C\u5247\u4E0D\u652F\u63F4 -keypasswd \u547D\u4EE4"},
-        {".keypass.and.new.can.not.be.specified.if.storetype.is.{0}",
-                "\u5982\u679C -storetype \u70BA {0}\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -keypass \u548C -new"},
-        {"if.protected.is.specified.then.storepass.keypass.and.new.must.not.be.specified",
-                "\u5982\u679C\u6307\u5B9A -protected\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -storepass\u3001-keypass \u548C -new"},
-        {"if.srcprotected.is.specified.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "\u5982\u679C\u6307\u5B9A -srcprotected\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -srcstorepass \u548C -srckeypass"},
-        {"if.keystore.is.not.password.protected.then.storepass.keypass.and.new.must.not.be.specified",
-                "\u5982\u679C\u91D1\u9470\u5132\u5B58\u5EAB\u4E0D\u53D7\u5BC6\u78BC\u4FDD\u8B77\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -storepass\u3001-keypass \u548C -new"},
-        {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified",
-                "\u5982\u679C\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u4E0D\u53D7\u5BC6\u78BC\u4FDD\u8B77\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A -srcstorepass \u548C -srckeypass"},
-        {"Illegal.startdate.value", "\u7121\u6548\u7684 startdate \u503C"},
-        {"Validity.must.be.greater.than.zero",
-                "\u6709\u6548\u6027\u5FC5\u9808\u5927\u65BC\u96F6"},
-        {"provName.not.a.provider", "{0} \u4E0D\u662F\u4E00\u500B\u63D0\u4F9B\u8005"},
-        {"Usage.error.no.command.provided", "\u7528\u6CD5\u932F\u8AA4: \u672A\u63D0\u4F9B\u547D\u4EE4"},
-        {"Source.keystore.file.exists.but.is.empty.", "\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u6A94\u6848\u5B58\u5728\uFF0C\u4F46\u70BA\u7A7A: "},
-        {"Please.specify.srckeystore", "\u8ACB\u6307\u5B9A -srckeystore"},
-        {"Must.not.specify.both.v.and.rfc.with.list.command",
-                " 'list' \u547D\u4EE4\u4E0D\u80FD\u540C\u6642\u6307\u5B9A -v \u53CA -rfc"},
-        {"Key.password.must.be.at.least.6.characters",
-                "\u91D1\u9470\u5BC6\u78BC\u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"},
-        {"New.password.must.be.at.least.6.characters",
-                "\u65B0\u7684\u5BC6\u78BC\u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"},
-        {"Keystore.file.exists.but.is.empty.",
-                "\u91D1\u9470\u5132\u5B58\u5EAB\u6A94\u6848\u5B58\u5728\uFF0C\u4F46\u70BA\u7A7A\u767D: "},
-        {"Keystore.file.does.not.exist.",
-                "\u91D1\u9470\u5132\u5B58\u5EAB\u6A94\u6848\u4E0D\u5B58\u5728: "},
-        {"Must.specify.destination.alias", "\u5FC5\u9808\u6307\u5B9A\u76EE\u7684\u5730\u5225\u540D"},
-        {"Must.specify.alias", "\u5FC5\u9808\u6307\u5B9A\u5225\u540D"},
-        {"Keystore.password.must.be.at.least.6.characters",
-                "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"},
-        {"Enter.keystore.password.", "\u8F38\u5165\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC:  "},
-        {"Enter.source.keystore.password.", "\u8ACB\u8F38\u5165\u4F86\u6E90\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC: "},
-        {"Enter.destination.keystore.password.", "\u8ACB\u8F38\u5165\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC: "},
-        {"Keystore.password.is.too.short.must.be.at.least.6.characters",
-         "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u592A\u77ED - \u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"},
-        {"Unknown.Entry.Type", "\u4E0D\u660E\u7684\u9805\u76EE\u985E\u578B"},
-        {"Too.many.failures.Alias.not.changed", "\u592A\u591A\u932F\u8AA4\u3002\u672A\u8B8A\u66F4\u5225\u540D"},
-        {"Entry.for.alias.alias.successfully.imported.",
-                 "\u5DF2\u6210\u529F\u532F\u5165\u5225\u540D {0} \u7684\u9805\u76EE\u3002"},
-        {"Entry.for.alias.alias.not.imported.", "\u672A\u532F\u5165\u5225\u540D {0} \u7684\u9805\u76EE\u3002"},
-        {"Problem.importing.entry.for.alias.alias.exception.Entry.for.alias.alias.not.imported.",
-                 "\u532F\u5165\u5225\u540D {0} \u7684\u9805\u76EE\u6642\u51FA\u73FE\u554F\u984C: {1}\u3002\n\u672A\u532F\u5165\u5225\u540D {0} \u7684\u9805\u76EE\u3002"},
-        {"Import.command.completed.ok.entries.successfully.imported.fail.entries.failed.or.cancelled",
-                 "\u5DF2\u5B8C\u6210\u532F\u5165\u547D\u4EE4: \u6210\u529F\u532F\u5165 {0} \u500B\u9805\u76EE\uFF0C{1} \u500B\u9805\u76EE\u5931\u6557\u6216\u5DF2\u53D6\u6D88"},
-        {"Warning.Overwriting.existing.alias.alias.in.destination.keystore",
-                 "\u8B66\u544A: \u6B63\u5728\u8986\u5BEB\u76EE\u7684\u5730\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684\u73FE\u6709\u5225\u540D {0}"},
-        {"Existing.entry.alias.alias.exists.overwrite.no.",
-                 "\u73FE\u6709\u9805\u76EE\u5225\u540D {0} \u5B58\u5728\uFF0C\u662F\u5426\u8986\u5BEB\uFF1F[\u5426]:  "},
-        {"Too.many.failures.try.later", "\u592A\u591A\u932F\u8AA4 - \u8ACB\u7A0D\u5F8C\u518D\u8A66"},
-        {"Certification.request.stored.in.file.filename.",
-                "\u8A8D\u8B49\u8981\u6C42\u5132\u5B58\u5728\u6A94\u6848 <{0}>"},
-        {"Submit.this.to.your.CA", "\u5C07\u6B64\u9001\u51FA\u81F3\u60A8\u7684 CA"},
-        {"if.alias.not.specified.destalias.srckeypass.and.destkeypass.must.not.be.specified",
-            "\u5982\u679C\u672A\u6307\u5B9A\u5225\u540D\uFF0C\u5247\u4E0D\u80FD\u6307\u5B9A destalias\u3001srckeypass \u53CA destkeypass"},
-        {"Certificate.stored.in.file.filename.",
-                "\u6191\u8B49\u5132\u5B58\u5728\u6A94\u6848 <{0}>"},
-        {"Certificate.reply.was.installed.in.keystore",
-                "\u6191\u8B49\u56DE\u8986\u5DF2\u5B89\u88DD\u5728\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D"},
-        {"Certificate.reply.was.not.installed.in.keystore",
-                "\u6191\u8B49\u56DE\u8986\u672A\u5B89\u88DD\u5728\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D"},
-        {"Certificate.was.added.to.keystore",
-                "\u6191\u8B49\u5DF2\u65B0\u589E\u81F3\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D"},
-        {"Certificate.was.not.added.to.keystore",
-                "\u6191\u8B49\u672A\u65B0\u589E\u81F3\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D"},
-        {".Storing.ksfname.", "[\u5132\u5B58 {0}]"},
-        {"alias.has.no.public.key.certificate.",
-                "{0} \u6C92\u6709\u516C\u958B\u91D1\u9470 (\u6191\u8B49)"},
-        {"Cannot.derive.signature.algorithm",
-                "\u7121\u6CD5\u53D6\u5F97\u7C3D\u7AE0\u6F14\u7B97\u6CD5"},
-        {"Alias.alias.does.not.exist",
-                "\u5225\u540D <{0}> \u4E0D\u5B58\u5728"},
-        {"Alias.alias.has.no.certificate",
-                "\u5225\u540D <{0}> \u6C92\u6709\u6191\u8B49"},
-        {"Key.pair.not.generated.alias.alias.already.exists",
-                "\u6C92\u6709\u5EFA\u7ACB\u91D1\u9470\u7D44\uFF0C\u5225\u540D <{0}> \u5DF2\u7D93\u5B58\u5728"},
-        {"Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for",
-                "\u91DD\u5C0D {4} \u7522\u751F\u6709\u6548\u671F {3} \u5929\u7684 {0} \u4F4D\u5143 {1} \u91D1\u9470\u7D44\u4EE5\u53CA\u81EA\u6211\u7C3D\u7F72\u6191\u8B49 ({2})\n\t"},
-        {"Enter.key.password.for.alias.", "\u8F38\u5165 <{0}> \u7684\u91D1\u9470\u5BC6\u78BC"},
-        {".RETURN.if.same.as.keystore.password.",
-                "\t(RETURN \u5982\u679C\u548C\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u76F8\u540C):  "},
-        {"Key.password.is.too.short.must.be.at.least.6.characters",
-                "\u91D1\u9470\u5BC6\u78BC\u592A\u77ED - \u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"},
-        {"Too.many.failures.key.not.added.to.keystore",
-                "\u592A\u591A\u932F\u8AA4 - \u91D1\u9470\u672A\u65B0\u589E\u81F3\u91D1\u9470\u5132\u5B58\u5EAB"},
-        {"Destination.alias.dest.already.exists",
-                "\u76EE\u7684\u5730\u5225\u540D <{0}> \u5DF2\u7D93\u5B58\u5728"},
-        {"Password.is.too.short.must.be.at.least.6.characters",
-                "\u5BC6\u78BC\u592A\u77ED - \u5FC5\u9808\u81F3\u5C11\u70BA 6 \u500B\u5B57\u5143"},
-        {"Too.many.failures.Key.entry.not.cloned",
-                "\u592A\u591A\u932F\u8AA4\u3002\u672A\u8907\u88FD\u91D1\u9470\u9805\u76EE"},
-        {"key.password.for.alias.", "<{0}> \u7684\u91D1\u9470\u5BC6\u78BC"},
-        {"Keystore.entry.for.id.getName.already.exists",
-                "<{0}> \u7684\u91D1\u9470\u5132\u5B58\u5EAB\u9805\u76EE\u5DF2\u7D93\u5B58\u5728"},
-        {"Creating.keystore.entry.for.id.getName.",
-                "\u5EFA\u7ACB <{0}> \u7684\u91D1\u9470\u5132\u5B58\u5EAB\u9805\u76EE..."},
-        {"No.entries.from.identity.database.added",
-                "\u6C92\u6709\u65B0\u589E\u4F86\u81EA\u8B58\u5225\u8CC7\u6599\u5EAB\u7684\u9805\u76EE"},
-        {"Alias.name.alias", "\u5225\u540D\u540D\u7A31: {0}"},
-        {"Creation.date.keyStore.getCreationDate.alias.",
-                "\u5EFA\u7ACB\u65E5\u671F: {0,date}"},
-        {"alias.keyStore.getCreationDate.alias.",
-                "{0}, {1,date}, "},
-        {"alias.", "{0}, "},
-        {"Entry.type.type.", "\u9805\u76EE\u985E\u578B: {0}"},
-        {"Certificate.chain.length.", "\u6191\u8B49\u93C8\u9577\u5EA6: "},
-        {"Certificate.i.1.", "\u6191\u8B49 [{0,number,integer}]:"},
-        {"Certificate.fingerprint.SHA1.", "\u6191\u8B49\u6307\u7D0B (SHA1): "},
-        {"Keystore.type.", "\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B: "},
-        {"Keystore.provider.", "\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005: "},
-        {"Your.keystore.contains.keyStore.size.entry",
-                "\u60A8\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u5305\u542B {0,number,integer} \u9805\u76EE"},
-        {"Your.keystore.contains.keyStore.size.entries",
-                "\u60A8\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u5305\u542B {0,number,integer} \u9805\u76EE"},
-        {"Failed.to.parse.input", "\u7121\u6CD5\u5256\u6790\u8F38\u5165"},
-        {"Empty.input", "\u7A7A\u8F38\u5165"},
-        {"Not.X.509.certificate", "\u975E X.509 \u6191\u8B49"},
-        {"alias.has.no.public.key", "{0} \u7121\u516C\u958B\u91D1\u9470"},
-        {"alias.has.no.X.509.certificate", "{0} \u7121 X.509 \u6191\u8B49"},
-        {"New.certificate.self.signed.", "\u65B0\u6191\u8B49 (\u81EA\u6211\u7C3D\u7F72): "},
-        {"Reply.has.no.certificates", "\u56DE\u8986\u4E0D\u542B\u6191\u8B49"},
-        {"Certificate.not.imported.alias.alias.already.exists",
-                "\u6191\u8B49\u672A\u8F38\u5165\uFF0C\u5225\u540D <{0}> \u5DF2\u7D93\u5B58\u5728"},
-        {"Input.not.an.X.509.certificate", "\u8F38\u5165\u7684\u4E0D\u662F X.509 \u6191\u8B49"},
-        {"Certificate.already.exists.in.keystore.under.alias.trustalias.",
-                "\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684 <{0}> \u5225\u540D\u4E4B\u4E0B\uFF0C\u6191\u8B49\u5DF2\u7D93\u5B58\u5728"},
-        {"Do.you.still.want.to.add.it.no.",
-                "\u60A8\u4ECD\u7136\u60F3\u8981\u5C07\u4E4B\u65B0\u589E\u55CE\uFF1F [\u5426]:  "},
-        {"Certificate.already.exists.in.system.wide.CA.keystore.under.alias.trustalias.",
-                "\u6574\u500B\u7CFB\u7D71 CA \u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684 <{0}> \u5225\u540D\u4E4B\u4E0B\uFF0C\u6191\u8B49\u5DF2\u7D93\u5B58\u5728"},
-        {"Do.you.still.want.to.add.it.to.your.own.keystore.no.",
-                "\u60A8\u4ECD\u7136\u60F3\u8981\u5C07\u4E4B\u65B0\u589E\u81F3\u81EA\u5DF1\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u55CE\uFF1F [\u5426]:  "},
-        {"Trust.this.certificate.no.", "\u4FE1\u4EFB\u9019\u500B\u6191\u8B49\uFF1F [\u5426]:  "},
-        {"YES", "\u662F"},
-        {"New.prompt.", "\u65B0 {0}: "},
-        {"Passwords.must.differ", "\u5FC5\u9808\u662F\u4E0D\u540C\u7684\u5BC6\u78BC"},
-        {"Re.enter.new.prompt.", "\u91CD\u65B0\u8F38\u5165\u65B0 {0}: "},
-        {"Re.enter.new.password.", "\u91CD\u65B0\u8F38\u5165\u65B0\u5BC6\u78BC: "},
-        {"They.don.t.match.Try.again", "\u5B83\u5011\u4E0D\u76F8\u7B26\u3002\u8ACB\u91CD\u8A66"},
-        {"Enter.prompt.alias.name.", "\u8F38\u5165 {0} \u5225\u540D\u540D\u7A31:  "},
-        {"Enter.new.alias.name.RETURN.to.cancel.import.for.this.entry.",
-                 "\u8ACB\u8F38\u5165\u65B0\u7684\u5225\u540D\u540D\u7A31\t(RETURN \u4EE5\u53D6\u6D88\u532F\u5165\u6B64\u9805\u76EE):"},
-        {"Enter.alias.name.", "\u8F38\u5165\u5225\u540D\u540D\u7A31:  "},
-        {".RETURN.if.same.as.for.otherAlias.",
-                "\t(RETURN \u5982\u679C\u548C <{0}> \u7684\u76F8\u540C)"},
-        {".PATTERN.printX509Cert",
-                "\u64C1\u6709\u8005: {0}\n\u767C\u51FA\u8005: {1}\n\u5E8F\u865F: {2}\n\u6709\u6548\u671F\u81EA: {3} \u5230: {4}\n\u6191\u8B49\u6307\u7D0B:\n\t MD5:  {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t \u7C3D\u7AE0\u6F14\u7B97\u6CD5\u540D\u7A31: {8}\n\t \u7248\u672C: {9}"},
-        {"What.is.your.first.and.last.name.",
-                "\u60A8\u7684\u540D\u5B57\u8207\u59D3\u6C0F\u70BA\u4F55\uFF1F"},
-        {"What.is.the.name.of.your.organizational.unit.",
-                "\u60A8\u7684\u7D44\u7E54\u55AE\u4F4D\u540D\u7A31\u70BA\u4F55\uFF1F"},
-        {"What.is.the.name.of.your.organization.",
-                "\u60A8\u7684\u7D44\u7E54\u540D\u7A31\u70BA\u4F55\uFF1F"},
-        {"What.is.the.name.of.your.City.or.Locality.",
-                "\u60A8\u6240\u5728\u7684\u57CE\u5E02\u6216\u5730\u5340\u540D\u7A31\u70BA\u4F55\uFF1F"},
-        {"What.is.the.name.of.your.State.or.Province.",
-                "\u60A8\u6240\u5728\u7684\u5DDE\u53CA\u7701\u4EFD\u540D\u7A31\u70BA\u4F55\uFF1F"},
-        {"What.is.the.two.letter.country.code.for.this.unit.",
-                "\u6B64\u55AE\u4F4D\u7684\u5169\u500B\u5B57\u6BCD\u570B\u5225\u4EE3\u78BC\u70BA\u4F55\uFF1F"},
-        {"Is.name.correct.", "{0} \u6B63\u78BA\u55CE\uFF1F"},
-        {"no", "\u5426"},
-        {"yes", "\u662F"},
-        {"y", "y"},
-        {".defaultValue.", "  [{0}]:  "},
-        {"Alias.alias.has.no.key",
-                "\u5225\u540D <{0}> \u6C92\u6709\u91D1\u9470"},
-        {"Alias.alias.references.an.entry.type.that.is.not.a.private.key.entry.The.keyclone.command.only.supports.cloning.of.private.key",
-                 "\u5225\u540D <{0}> \u6240\u53C3\u7167\u7684\u9805\u76EE\u4E0D\u662F\u79C1\u5BC6\u91D1\u9470\u985E\u578B\u3002-keyclone \u547D\u4EE4\u50C5\u652F\u63F4\u79C1\u5BC6\u91D1\u9470\u9805\u76EE\u7684\u8907\u88FD"},
-
-        {".WARNING.WARNING.WARNING.",
-            "*****************  WARNING WARNING WARNING  *****************"},
-        {"Signer.d.", "\u7C3D\u7F72\u8005 #%d:"},
-        {"Timestamp.", "\u6642\u6233:"},
-        {"Signature.", "\u7C3D\u7AE0:"},
-        {"CRLs.", "CRL:"},
-        {"Certificate.owner.", "\u6191\u8B49\u64C1\u6709\u8005: "},
-        {"Not.a.signed.jar.file", "\u4E0D\u662F\u7C3D\u7F72\u7684 jar \u6A94\u6848"},
-        {"No.certificate.from.the.SSL.server",
-                "\u6C92\u6709\u4F86\u81EA SSL \u4F3A\u670D\u5668\u7684\u6191\u8B49"},
-
-        {".The.integrity.of.the.information.stored.in.your.keystore.",
-            "* \u5C1A\u672A\u9A57\u8B49\u5132\u5B58\u65BC\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u8CC7\u8A0A  *\n* \u7684\u5B8C\u6574\u6027\uFF01\u82E5\u8981\u9A57\u8B49\u5176\u5B8C\u6574\u6027\uFF0C*\n* \u60A8\u5FC5\u9808\u63D0\u4F9B\u60A8\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC\u3002                  *"},
-        {".The.integrity.of.the.information.stored.in.the.srckeystore.",
-            "* \u5C1A\u672A\u9A57\u8B49\u5132\u5B58\u65BC srckeystore \u4E2D\u8CC7\u8A0A*\n* \u7684\u5B8C\u6574\u6027\uFF01\u82E5\u8981\u9A57\u8B49\u5176\u5B8C\u6574\u6027\uFF0C\u60A8\u5FC5\u9808 *\n* \u63D0\u4F9B srckeystore \u5BC6\u78BC\u3002          *"},
-
-        {"Certificate.reply.does.not.contain.public.key.for.alias.",
-                "\u6191\u8B49\u56DE\u8986\u4E26\u672A\u5305\u542B <{0}> \u7684\u516C\u958B\u91D1\u9470"},
-        {"Incomplete.certificate.chain.in.reply",
-                "\u56DE\u8986\u6642\u7684\u6191\u8B49\u93C8\u4E0D\u5B8C\u6574"},
-        {"Certificate.chain.in.reply.does.not.verify.",
-                "\u56DE\u8986\u6642\u7684\u6191\u8B49\u93C8\u672A\u9A57\u8B49: "},
-        {"Top.level.certificate.in.reply.",
-                "\u56DE\u8986\u6642\u7684\u6700\u9AD8\u7D1A\u6191\u8B49:\\n"},
-        {".is.not.trusted.", "... \u662F\u4E0D\u88AB\u4FE1\u4EFB\u7684\u3002"},
-        {"Install.reply.anyway.no.", "\u9084\u662F\u8981\u5B89\u88DD\u56DE\u8986\uFF1F [\u5426]:  "},
-        {"NO", "\u5426"},
-        {"Public.keys.in.reply.and.keystore.don.t.match",
-                "\u56DE\u8986\u6642\u7684\u516C\u958B\u91D1\u9470\u8207\u91D1\u9470\u5132\u5B58\u5EAB\u4E0D\u7B26"},
-        {"Certificate.reply.and.certificate.in.keystore.are.identical",
-                "\u6191\u8B49\u56DE\u8986\u8207\u91D1\u9470\u5132\u5B58\u5EAB\u4E2D\u7684\u6191\u8B49\u662F\u76F8\u540C\u7684"},
-        {"Failed.to.establish.chain.from.reply",
-                "\u7121\u6CD5\u5F9E\u56DE\u8986\u4E2D\u5C07\u93C8\u5EFA\u7ACB\u8D77\u4F86"},
-        {"n", "n"},
-        {"Wrong.answer.try.again", "\u932F\u8AA4\u7684\u7B54\u6848\uFF0C\u8ACB\u518D\u8A66\u4E00\u6B21"},
-        {"Secret.key.not.generated.alias.alias.already.exists",
-                "\u672A\u7522\u751F\u79D8\u5BC6\u91D1\u9470\uFF0C\u5225\u540D <{0}> \u5DF2\u5B58\u5728"},
-        {"Please.provide.keysize.for.secret.key.generation",
-                "\u8ACB\u63D0\u4F9B -keysize \u4EE5\u7522\u751F\u79D8\u5BC6\u91D1\u9470"},
-
-        {"Extensions.", "\u64F4\u5145\u5957\u4EF6: "},
-        {".Empty.value.", "(\u7A7A\u767D\u503C)"},
-        {"Extension.Request.", "\u64F4\u5145\u5957\u4EF6\u8981\u6C42:"},
-        {"PKCS.10.Certificate.Request.Version.1.0.Subject.s.Public.Key.s.format.s.key.",
-                "PKCS #10 \u6191\u8B49\u8981\u6C42 (\u7248\u672C 1.0)\n\u4E3B\u9AD4: %s\n\u516C\u7528\u91D1\u9470: %s \u683C\u5F0F %s \u91D1\u9470\n"},
-        {"Unknown.keyUsage.type.", "\u4E0D\u660E\u7684 keyUsage \u985E\u578B: "},
-        {"Unknown.extendedkeyUsage.type.", "\u4E0D\u660E\u7684 extendedkeyUsage \u985E\u578B: "},
-        {"Unknown.AccessDescription.type.", "\u4E0D\u660E\u7684 AccessDescription \u985E\u578B: "},
-        {"Unrecognized.GeneralName.type.", "\u7121\u6CD5\u8FA8\u8B58\u7684 GeneralName \u985E\u578B: "},
-        {"This.extension.cannot.be.marked.as.critical.",
-                 "\u6B64\u64F4\u5145\u5957\u4EF6\u7121\u6CD5\u6A19\u793A\u70BA\u95DC\u9375\u3002"},
-        {"Odd.number.of.hex.digits.found.", "\u627E\u5230\u5341\u516D\u9032\u4F4D\u6578\u5B57\u7684\u5947\u6578: "},
-        {"Unknown.extension.type.", "\u4E0D\u660E\u7684\u64F4\u5145\u5957\u4EF6\u985E\u578B: "},
-        {"command.{0}.is.ambiguous.", "\u547D\u4EE4 {0} \u4E0D\u660E\u78BA:"},
-
-        // policytool
-        {"Warning.A.public.key.for.alias.signers.i.does.not.exist.Make.sure.a.KeyStore.is.properly.configured.",
-                "\u8B66\u544A: \u5225\u540D {0} \u7684\u516C\u958B\u91D1\u9470\u4E0D\u5B58\u5728\u3002\u8ACB\u78BA\u5B9A\u91D1\u9470\u5132\u5B58\u5EAB\u914D\u7F6E\u6B63\u78BA\u3002"},
-        {"Warning.Class.not.found.class", "\u8B66\u544A: \u627E\u4E0D\u5230\u985E\u5225 {0}"},
-        {"Warning.Invalid.argument.s.for.constructor.arg",
-                "\u8B66\u544A: \u7121\u6548\u7684\u5EFA\u69CB\u5B50\u5F15\u6578: {0}"},
-        {"Illegal.Principal.Type.type", "\u7121\u6548\u7684 Principal \u985E\u578B: {0}"},
-        {"Illegal.option.option", "\u7121\u6548\u7684\u9078\u9805: {0}"},
-        {"Usage.policytool.options.", "\u7528\u6CD5: policytool [options]"},
-        {".file.file.policy.file.location",
-                "  [-file <file>]    \u539F\u5247\u6A94\u6848\u4F4D\u7F6E"},
-        {"New", "\u65B0\u589E"},
-        {"Open", "\u958B\u555F"},
-        {"Save", "\u5132\u5B58"},
-        {"Save.As", "\u53E6\u5B58\u65B0\u6A94"},
-        {"View.Warning.Log", "\u6AA2\u8996\u8B66\u544A\u8A18\u9304"},
-        {"Exit", "\u7D50\u675F"},
-        {"Add.Policy.Entry", "\u65B0\u589E\u539F\u5247\u9805\u76EE"},
-        {"Edit.Policy.Entry", "\u7DE8\u8F2F\u539F\u5247\u9805\u76EE"},
-        {"Remove.Policy.Entry", "\u79FB\u9664\u539F\u5247\u9805\u76EE"},
-        {"Edit", "\u7DE8\u8F2F"},
-        {"Retain", "\u4FDD\u7559"},
-
-        {"Warning.File.name.may.include.escaped.backslash.characters.It.is.not.necessary.to.escape.backslash.characters.the.tool.escapes",
-            "\u8B66\u544A: \u6A94\u6848\u540D\u7A31\u5305\u542B\u9041\u96E2\u53CD\u659C\u7DDA\u5B57\u5143\u3002\u4E0D\u9700\u8981\u9041\u96E2\u53CD\u659C\u7DDA\u5B57\u5143 (\u64B0\u5BEB\u539F\u5247\u5167\u5BB9\u81F3\u6C38\u4E45\u5B58\u653E\u5340\u6642\u9700\u8981\u5DE5\u5177\u9041\u96E2\u5B57\u5143)\u3002\n\n\u6309\u4E00\u4E0B\u300C\u4FDD\u7559\u300D\u4EE5\u4FDD\u7559\u8F38\u5165\u7684\u540D\u7A31\uFF0C\u6216\u6309\u4E00\u4E0B\u300C\u7DE8\u8F2F\u300D\u4EE5\u7DE8\u8F2F\u540D\u7A31\u3002"},
-
-        {"Add.Public.Key.Alias", "\u65B0\u589E\u516C\u958B\u91D1\u9470\u5225\u540D"},
-        {"Remove.Public.Key.Alias", "\u79FB\u9664\u516C\u958B\u91D1\u9470\u5225\u540D"},
-        {"File", "\u6A94\u6848"},
-        {"KeyStore", "\u91D1\u9470\u5132\u5B58\u5EAB"},
-        {"Policy.File.", "\u539F\u5247\u6A94\u6848: "},
-        {"Could.not.open.policy.file.policyFile.e.toString.",
-                "\u7121\u6CD5\u958B\u555F\u539F\u5247\u6A94\u6848: {0}: {1}"},
-        {"Policy.Tool", "\u539F\u5247\u5DE5\u5177"},
-        {"Errors.have.occurred.while.opening.the.policy.configuration.View.the.Warning.Log.for.more.information.",
-                "\u958B\u555F\u539F\u5247\u8A18\u7F6E\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u6AA2\u8996\u8B66\u544A\u8A18\u9304\u4EE5\u53D6\u5F97\u66F4\u591A\u7684\u8CC7\u8A0A"},
-        {"Error", "\u932F\u8AA4"},
-        {"OK", "\u78BA\u5B9A"},
-        {"Status", "\u72C0\u614B"},
-        {"Warning", "\u8B66\u544A"},
-        {"Permission.",
-                "\u6B0A\u9650:                                                       "},
-        {"Principal.Type.", "Principal \u985E\u578B: "},
-        {"Principal.Name.", "Principal \u540D\u7A31: "},
-        {"Target.Name.",
-                "\u76EE\u6A19\u540D\u7A31:                                                    "},
-        {"Actions.",
-                "\u52D5\u4F5C:                                                             "},
-        {"OK.to.overwrite.existing.file.filename.",
-                "\u78BA\u8A8D\u8986\u5BEB\u73FE\u5B58\u7684\u6A94\u6848 {0}\uFF1F"},
-        {"Cancel", "\u53D6\u6D88"},
-        {"CodeBase.", "CodeBase:"},
-        {"SignedBy.", "SignedBy:"},
-        {"Add.Principal", "\u65B0\u589E Principal"},
-        {"Edit.Principal", "\u7DE8\u8F2F Principal"},
-        {"Remove.Principal", "\u79FB\u9664 Principal"},
-        {"Principals.", "Principal:"},
-        {".Add.Permission", "  \u65B0\u589E\u6B0A\u9650"},
-        {".Edit.Permission", "  \u7DE8\u8F2F\u6B0A\u9650"},
-        {"Remove.Permission", "\u79FB\u9664\u6B0A\u9650"},
-        {"Done", "\u5B8C\u6210"},
-        {"KeyStore.URL.", "\u91D1\u9470\u5132\u5B58\u5EAB URL: "},
-        {"KeyStore.Type.", "\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B:"},
-        {"KeyStore.Provider.", "\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005:"},
-        {"KeyStore.Password.URL.", "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC URL: "},
-        {"Principals", "Principal"},
-        {".Edit.Principal.", "  \u7DE8\u8F2F Principal: "},
-        {".Add.New.Principal.", "  \u65B0\u589E Principal: "},
-        {"Permissions", "\u6B0A\u9650"},
-        {".Edit.Permission.", "  \u7DE8\u8F2F\u6B0A\u9650:"},
-        {".Add.New.Permission.", "  \u65B0\u589E\u6B0A\u9650:"},
-        {"Signed.By.", "\u7C3D\u7F72\u4EBA: "},
-        {"Cannot.Specify.Principal.with.a.Wildcard.Class.without.a.Wildcard.Name",
-            "\u6C92\u6709\u842C\u7528\u5B57\u5143\u540D\u7A31\uFF0C\u7121\u6CD5\u6307\u5B9A\u542B\u6709\u842C\u7528\u5B57\u5143\u985E\u5225\u7684 Principal"},
-        {"Cannot.Specify.Principal.without.a.Name",
-            "\u6C92\u6709\u540D\u7A31\uFF0C\u7121\u6CD5\u6307\u5B9A Principal"},
-        {"Permission.and.Target.Name.must.have.a.value",
-                "\u6B0A\u9650\u53CA\u76EE\u6A19\u540D\u7A31\u5FC5\u9808\u6709\u4E00\u500B\u503C\u3002"},
-        {"Remove.this.Policy.Entry.", "\u79FB\u9664\u9019\u500B\u539F\u5247\u9805\u76EE\uFF1F"},
-        {"Overwrite.File", "\u8986\u5BEB\u6A94\u6848"},
-        {"Policy.successfully.written.to.filename",
-                "\u539F\u5247\u6210\u529F\u5BEB\u5165\u81F3 {0}"},
-        {"null.filename", "\u7A7A\u503C\u6A94\u540D"},
-        {"Save.changes.", "\u5132\u5B58\u8B8A\u66F4\uFF1F"},
-        {"Yes", "\u662F"},
-        {"No", "\u5426"},
-        {"Policy.Entry", "\u539F\u5247\u9805\u76EE"},
-        {"Save.Changes", "\u5132\u5B58\u8B8A\u66F4"},
-        {"No.Policy.Entry.selected", "\u6C92\u6709\u9078\u53D6\u539F\u5247\u9805\u76EE"},
-        {"Unable.to.open.KeyStore.ex.toString.",
-                "\u7121\u6CD5\u958B\u555F\u91D1\u9470\u5132\u5B58\u5EAB: {0}"},
-        {"No.principal.selected", "\u672A\u9078\u53D6 Principal"},
-        {"No.permission.selected", "\u6C92\u6709\u9078\u53D6\u6B0A\u9650"},
-        {"name", "\u540D\u7A31"},
-        {"configuration.type", "\u7D44\u614B\u985E\u578B"},
-        {"environment.variable.name", "\u74B0\u5883\u8B8A\u6578\u540D\u7A31"},
-        {"library.name", "\u7A0B\u5F0F\u5EAB\u540D\u7A31"},
-        {"package.name", "\u5957\u88DD\u7A0B\u5F0F\u540D\u7A31"},
-        {"policy.type", "\u539F\u5247\u985E\u578B"},
-        {"property.name", "\u5C6C\u6027\u540D\u7A31"},
-        {"Principal.List", "Principal \u6E05\u55AE"},
-        {"Permission.List", "\u6B0A\u9650\u6E05\u55AE"},
-        {"Code.Base", "\u4EE3\u78BC\u57FA\u6E96"},
-        {"KeyStore.U.R.L.", "\u91D1\u9470\u5132\u5B58\u5EAB URL:"},
-        {"KeyStore.Password.U.R.L.", "\u91D1\u9470\u5132\u5B58\u5EAB\u5BC6\u78BC URL:"},
-
-
-        // javax.security.auth.PrivateCredentialPermission
-        {"invalid.null.input.s.", "\u7121\u6548\u7A7A\u503C\u8F38\u5165"},
-        {"actions.can.only.be.read.", "\u52D5\u4F5C\u53EA\u80FD\u88AB\u300C\u8B80\u53D6\u300D"},
-        {"permission.name.name.syntax.invalid.",
-                "\u6B0A\u9650\u540D\u7A31 [{0}] \u662F\u7121\u6548\u7684\u8A9E\u6CD5: "},
-        {"Credential.Class.not.followed.by.a.Principal.Class.and.Name",
-                "Credential \u985E\u5225\u5F8C\u9762\u4E0D\u662F Principal \u985E\u5225\u53CA\u540D\u7A31"},
-        {"Principal.Class.not.followed.by.a.Principal.Name",
-                "Principal \u985E\u5225\u5F8C\u9762\u4E0D\u662F Principal \u540D\u7A31"},
-        {"Principal.Name.must.be.surrounded.by.quotes",
-                "Principal \u540D\u7A31\u5FC5\u9808\u4EE5\u5F15\u865F\u5708\u4F4F"},
-        {"Principal.Name.missing.end.quote",
-                "Principal \u540D\u7A31\u7F3A\u5C11\u4E0B\u5F15\u865F"},
-        {"PrivateCredentialPermission.Principal.Class.can.not.be.a.wildcard.value.if.Principal.Name.is.not.a.wildcard.value",
-                "\u5982\u679C Principal \u540D\u7A31\u4E0D\u662F\u4E00\u500B\u842C\u7528\u5B57\u5143 (*) \u503C\uFF0C\u90A3\u9EBC PrivateCredentialPermission Principal \u985E\u5225\u5C31\u4E0D\u80FD\u662F\u842C\u7528\u5B57\u5143 (*) \u503C"},
-        {"CredOwner.Principal.Class.class.Principal.Name.name",
-                "CredOwner:\n\tPrincipal \u985E\u5225 = {0}\n\tPrincipal \u540D\u7A31 = {1}"},
-
-        // javax.security.auth.x500
-        {"provided.null.name", "\u63D0\u4F9B\u7A7A\u503C\u540D\u7A31"},
-        {"provided.null.keyword.map", "\u63D0\u4F9B\u7A7A\u503C\u95DC\u9375\u5B57\u5C0D\u6620"},
-        {"provided.null.OID.map", "\u63D0\u4F9B\u7A7A\u503C OID \u5C0D\u6620"},
-
-        // javax.security.auth.Subject
-        {"invalid.null.AccessControlContext.provided",
-                "\u63D0\u4F9B\u7121\u6548\u7684\u7A7A\u503C AccessControlContext"},
-        {"invalid.null.action.provided", "\u63D0\u4F9B\u7121\u6548\u7684\u7A7A\u503C\u52D5\u4F5C"},
-        {"invalid.null.Class.provided", "\u63D0\u4F9B\u7121\u6548\u7684\u7A7A\u503C\u985E\u5225"},
-        {"Subject.", "\u4E3B\u984C:\n"},
-        {".Principal.", "\tPrincipal: "},
-        {".Public.Credential.", "\t\u516C\u7528\u8B49\u660E\u8CC7\u6599: "},
-        {".Private.Credentials.inaccessible.",
-                "\t\u79C1\u4EBA\u8B49\u660E\u8CC7\u6599\u7121\u6CD5\u5B58\u53D6\n"},
-        {".Private.Credential.", "\t\u79C1\u4EBA\u8B49\u660E\u8CC7\u6599: "},
-        {".Private.Credential.inaccessible.",
-                "\t\u79C1\u4EBA\u8B49\u660E\u8CC7\u6599\u7121\u6CD5\u5B58\u53D6\n"},
-        {"Subject.is.read.only", "\u4E3B\u984C\u70BA\u552F\u8B80"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.java.security.Principal.to.a.Subject.s.Principal.Set",
-                "\u8A66\u5716\u65B0\u589E\u4E00\u500B\u975E java.security.Principal \u57F7\u884C\u8655\u7406\u7684\u7269\u4EF6\u81F3\u4E3B\u984C\u7684 Principal \u7FA4\u4E2D"},
-        {"attempting.to.add.an.object.which.is.not.an.instance.of.class",
-                "\u8A66\u5716\u65B0\u589E\u4E00\u500B\u975E {0} \u57F7\u884C\u8655\u7406\u7684\u7269\u4EF6"},
-
-        // javax.security.auth.login.AppConfigurationEntry
-        {"LoginModuleControlFlag.", "LoginModuleControlFlag: "},
-
-        // javax.security.auth.login.LoginContext
-        {"Invalid.null.input.name", "\u7121\u6548\u7A7A\u503C\u8F38\u5165: \u540D\u7A31"},
-        {"No.LoginModules.configured.for.name",
-         "\u7121\u91DD\u5C0D {0} \u914D\u7F6E\u7684 LoginModules"},
-        {"invalid.null.Subject.provided", "\u63D0\u4F9B\u7121\u6548\u7A7A\u503C\u4E3B\u984C"},
-        {"invalid.null.CallbackHandler.provided",
-                "\u63D0\u4F9B\u7121\u6548\u7A7A\u503C CallbackHandler"},
-        {"null.subject.logout.called.before.login",
-                "\u7A7A\u503C\u4E3B\u984C - \u5728\u767B\u5165\u4E4B\u524D\u5373\u547C\u53EB\u767B\u51FA"},
-        {"unable.to.instantiate.LoginModule.module.because.it.does.not.provide.a.no.argument.constructor",
-                "\u7121\u6CD5\u5275\u8A2D LoginModule\uFF0C{0}\uFF0C\u56E0\u70BA\u5B83\u4E26\u672A\u63D0\u4F9B\u975E\u5F15\u6578\u7684\u5EFA\u69CB\u5B50"},
-        {"unable.to.instantiate.LoginModule",
-                "\u7121\u6CD5\u5EFA\u7ACB LoginModule"},
-        {"unable.to.instantiate.LoginModule.",
-                "\u7121\u6CD5\u5EFA\u7ACB LoginModule: "},
-        {"unable.to.find.LoginModule.class.",
-                "\u627E\u4E0D\u5230 LoginModule \u985E\u5225: "},
-        {"unable.to.access.LoginModule.",
-                "\u7121\u6CD5\u5B58\u53D6 LoginModule: "},
-        {"Login.Failure.all.modules.ignored",
-                "\u767B\u5165\u5931\u6557: \u5FFD\u7565\u6240\u6709\u6A21\u7D44"},
-
-        // sun.security.provider.PolicyFile
-
-        {"java.security.policy.error.parsing.policy.message",
-                "java.security.policy: \u5256\u6790\u932F\u8AA4 {0}: \n\t{1}"},
-        {"java.security.policy.error.adding.Permission.perm.message",
-                "java.security.policy: \u65B0\u589E\u6B0A\u9650\u932F\u8AA4 {0}: \n\t{1}"},
-        {"java.security.policy.error.adding.Entry.message",
-                "java.security.policy: \u65B0\u589E\u9805\u76EE\u932F\u8AA4: \n\t{0}"},
-        {"alias.name.not.provided.pe.name.", "\u672A\u63D0\u4F9B\u5225\u540D\u540D\u7A31 ({0})"},
-        {"unable.to.perform.substitution.on.alias.suffix",
-                "\u7121\u6CD5\u5C0D\u5225\u540D\u57F7\u884C\u66FF\u63DB\uFF0C{0}"},
-        {"substitution.value.prefix.unsupported",
-                "\u4E0D\u652F\u63F4\u7684\u66FF\u63DB\u503C\uFF0C{0}"},
-        {"LPARAM", "("},
-        {"RPARAM", ")"},
-        {"type.can.t.be.null","\u8F38\u5165\u4E0D\u80FD\u70BA\u7A7A\u503C"},
-
-        // sun.security.provider.PolicyParser
-        {"keystorePasswordURL.can.not.be.specified.without.also.specifying.keystore",
-                "\u6307\u5B9A keystorePasswordURL \u9700\u8981\u540C\u6642\u6307\u5B9A\u91D1\u9470\u5132\u5B58\u5EAB"},
-        {"expected.keystore.type", "\u9810\u671F\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u985E\u578B"},
-        {"expected.keystore.provider", "\u9810\u671F\u7684\u91D1\u9470\u5132\u5B58\u5EAB\u63D0\u4F9B\u8005"},
-        {"multiple.Codebase.expressions",
-                "\u591A\u91CD Codebase \u8868\u793A\u5F0F"},
-        {"multiple.SignedBy.expressions","\u591A\u91CD SignedBy \u8868\u793A\u5F0F"},
-        {"SignedBy.has.empty.alias","SignedBy \u6709\u7A7A\u5225\u540D"},
-        {"can.not.specify.Principal.with.a.wildcard.class.without.a.wildcard.name",
-                "\u6C92\u6709\u842C\u7528\u5B57\u5143\u540D\u7A31\uFF0C\u7121\u6CD5\u6307\u5B9A\u542B\u6709\u842C\u7528\u5B57\u5143\u985E\u5225\u7684 Principal"},
-        {"expected.codeBase.or.SignedBy.or.Principal",
-                "\u9810\u671F\u7684 codeBase \u6216 SignedBy \u6216 Principal"},
-        {"expected.permission.entry", "\u9810\u671F\u7684\u6B0A\u9650\u9805\u76EE"},
-        {"number.", "\u865F\u78BC "},
-        {"expected.expect.read.end.of.file.",
-                "\u9810\u671F\u7684 [{0}], \u8B80\u53D6 [end of file]"},
-        {"expected.read.end.of.file.",
-                "\u9810\u671F\u7684 [;], \u8B80\u53D6 [end of file]"},
-        {"line.number.msg", "\u884C {0}: {1}"},
-        {"line.number.expected.expect.found.actual.",
-                "\u884C {0}: \u9810\u671F\u7684 [{1}]\uFF0C\u767C\u73FE [{2}]"},
-        {"null.principalClass.or.principalName",
-                "\u7A7A\u503C principalClass \u6216 principalName"},
-
-        // sun.security.pkcs11.SunPKCS11
-        {"PKCS11.Token.providerName.Password.",
-                "PKCS11 \u8A18\u865F [{0}] \u5BC6\u78BC: "},
-
-        /* --- DEPRECATED --- */
-        // javax.security.auth.Policy
-        {"unable.to.instantiate.Subject.based.policy",
-                "\u7121\u6CD5\u5EFA\u7ACB\u4E3B\u984C\u5F0F\u7684\u539F\u5247"}
-    };
-
-
-    /**
-     * Returns the contents of this <code>ResourceBundle</code>.
-     *
-     * <p>
-     *
-     * @return the contents of this <code>ResourceBundle</code>.
-     */
-    public Object[][] getContents() {
-        return contents;
-    }
-}
-
diff --git a/ojluni/src/main/java/sun/security/x509/AlgIdDSA.java b/ojluni/src/main/java/sun/security/x509/AlgIdDSA.java
deleted file mode 100755
index 219ef5c..0000000
--- a/ojluni/src/main/java/sun/security/x509/AlgIdDSA.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (c) 1996, 2003, 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.
- */
-
-package sun.security.x509;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.*;
-import java.security.interfaces.DSAParams;
-
-import sun.security.util.*;
-
-
-/**
- * This class identifies DSS/DSA Algorithm variants, which are distinguished
- * by using different algorithm parameters <em>P, Q, G</em>.  It uses the
- * NIST/IETF standard DER encoding.  These are used to implement the Digital
- * Signature Standard (DSS), FIPS 186.
- *
- * <P><em><b>NOTE:</b>  DSS/DSA Algorithm IDs may be created without these
- * parameters.  Use of DSS/DSA in modes where parameters are
- * either implicit (e.g. a default applicable to a site or a larger scope),
- * or are derived from some Certificate Authority's DSS certificate, is
- * not supported directly.  The application is responsible for creating a key
- * containing the required parameters prior to using the key in cryptographic
- * operations.  The follwoing is an example of how this may be done assuming
- * that we have a certificate called <code>currentCert</code> which doesn't
- * contain DSS/DSA parameters and we need to derive DSS/DSA parameters
- * from a CA's certificate called <code>caCert</code>.
- * <p>
- * <code><pre>
- * // key containing parameters to use
- * DSAPublicKey cAKey = (DSAPublicKey)(caCert.getPublicKey());
- * // key without parameters
- * DSAPublicKey nullParamsKey = (DSAPublicKey)(currentCert.getPublicKey());
- *
- * DSAParams cAKeyParams = cAKey.getParams();
- * KeyFactory kf = KeyFactory.getInstance("DSA");
- * DSAPublicKeySpec ks = new DSAPublicKeySpec(nullParamsKey.getY(),
- *                                            cAKeyParams.getP(),
- *                                            cAKeyParams.getQ(),
- *                                            cAKeyParams.getG());
- * DSAPublicKey usableKey = kf.generatePublic(ks);
- * </pre></code>
- *
- * @see java.security.interfaces.DSAParams
- * @see java.security.interfaces.DSAPublicKey
- * @see java.security.KeyFactory
- * @see java.security.spec.DSAPublicKeySpec
- *
- * @author David Brownell
- */
-public final
-class AlgIdDSA extends AlgorithmId implements DSAParams
-{
-
-    private static final long serialVersionUID = 3437177836797504046L;
-
-    /*
-     * The three unsigned integer parameters.
-     */
-    private BigInteger  p , q, g;
-
-    /** Returns the DSS/DSA parameter "P" */
-    public BigInteger   getP () { return p; }
-
-    /** Returns the DSS/DSA parameter "Q" */
-    public BigInteger   getQ () { return q; }
-
-    /** Returns the DSS/DSA parameter "G" */
-    public BigInteger   getG () { return g; }
-
-    /**
-     * Default constructor.  The OID and parameters must be
-     * deserialized before this algorithm ID is used.
-     */
-    // XXX deprecated for general use
-    public AlgIdDSA () {}
-
-    AlgIdDSA (DerValue val) throws IOException
-        { super(val.getOID()); }
-
-    /**
-     * Construct an AlgIdDSA from an X.509 encoded byte array.
-     */
-    public AlgIdDSA (byte[] encodedAlg) throws IOException
-        { super (new DerValue(encodedAlg).getOID()); }
-
-    /**
-     * Constructs a DSS/DSA Algorithm ID from unsigned integers that
-     * define the algorithm parameters.  Those integers are encoded
-     * as big-endian byte arrays.
-     *
-     * @param p the DSS/DSA paramter "P"
-     * @param q the DSS/DSA paramter "Q"
-     * @param g the DSS/DSA paramter "G"
-     */
-    public AlgIdDSA (byte p [], byte q [], byte g [])
-    throws IOException
-    {
-        this (new BigInteger (1, p),
-            new BigInteger (1, q),
-            new BigInteger (1, g));
-    }
-
-    /**
-     * Constructs a DSS/DSA Algorithm ID from numeric parameters.
-     * If all three are null, then the parameters portion of the algorithm id
-     * is set to null.  See note in header regarding use.
-     *
-     * @param p the DSS/DSA paramter "P"
-     * @param q the DSS/DSA paramter "Q"
-     * @param g the DSS/DSA paramter "G"
-     */
-    public AlgIdDSA (BigInteger p, BigInteger q, BigInteger g)
-    {
-        super (DSA_oid);
-
-        if (p != null || q != null || g != null) {
-            if (p == null || q == null || g == null)
-                throw new ProviderException("Invalid parameters for DSS/DSA" +
-                                            " Algorithm ID");
-            try {
-                this.p = p;
-                this.q = q;
-                this.g = g;
-                initializeParams ();
-
-            } catch (IOException e) {
-                /* this should not happen */
-                throw new ProviderException ("Construct DSS/DSA Algorithm ID");
-            }
-        }
-    }
-
-    /**
-     * Returns "DSA", indicating the Digital Signature Algorithm (DSA) as
-     * defined by the Digital Signature Standard (DSS), FIPS 186.
-     */
-    public String getName ()
-        { return "DSA"; }
-
-
-    /*
-     * For algorithm IDs which haven't been created from a DER encoded
-     * value, "params" must be created.
-     */
-    private void initializeParams ()
-    throws IOException
-    {
-        DerOutputStream out = new DerOutputStream ();
-
-        out.putInteger(p);
-        out.putInteger(q);
-        out.putInteger(g);
-        params = new DerValue (DerValue.tag_Sequence,out.toByteArray ());
-    }
-
-    /**
-     * Parses algorithm parameters P, Q, and G.  They're found
-     * in the "params" member, which never needs to be changed.
-     */
-    protected void decodeParams ()
-    throws IOException
-    {
-        if (params == null)
-            throw new IOException("DSA alg params are null");
-        if (params.tag != DerValue.tag_Sequence)
-            throw new  IOException("DSA alg parsing error");
-
-        params.data.reset ();
-
-        this.p = params.data.getBigInteger();
-        this.q = params.data.getBigInteger();
-        this.g = params.data.getBigInteger();
-
-        if (params.data.available () != 0)
-            throw new IOException ("AlgIdDSA params, extra="+
-                                   params.data.available ());
-    }
-
-
-    /*
-     * Returns a formatted string describing the parameters.
-     */
-    public String toString ()
-        { return paramsToString (); }
-
-    /*
-     * Returns a string describing the parameters.
-     */
-    protected String paramsToString ()
-    {
-        if (params == null)
-            return " null\n";
-        else
-            return
-                "\n    p:\n" + Debug.toHexString(p) +
-                "\n    q:\n" + Debug.toHexString(q) +
-                "\n    g:\n" + Debug.toHexString(g) +
-                "\n";
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/x509/CertAndKeyGen.java b/ojluni/src/main/java/sun/security/x509/CertAndKeyGen.java
deleted file mode 100755
index 1f9db3d..0000000
--- a/ojluni/src/main/java/sun/security/x509/CertAndKeyGen.java
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * Copyright (c) 1996, 2009, 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.
- */
-
-package sun.security.x509;
-
-import java.io.IOException;
-import java.security.cert.X509Certificate;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateEncodingException;
-import java.security.*;
-import java.util.Date;
-
-import sun.security.pkcs.PKCS10;
-
-
-/**
- * Generate a pair of keys, and provide access to them.  This class is
- * provided primarily for ease of use.
- *
- * <P>This provides some simple certificate management functionality.
- * Specifically, it allows you to create self-signed X.509 certificates
- * as well as PKCS 10 based certificate signing requests.
- *
- * <P>Keys for some public key signature algorithms have algorithm
- * parameters, such as DSS/DSA.  Some sites' Certificate Authorities
- * adopt fixed algorithm parameters, which speeds up some operations
- * including key generation and signing.  <em>At this time, this interface
- * does not provide a way to provide such algorithm parameters, e.g.
- * by providing the CA certificate which includes those parameters.</em>
- *
- * <P>Also, note that at this time only signature-capable keys may be
- * acquired through this interface.  Diffie-Hellman keys, used for secure
- * key exchange, may be supported later.
- *
- * @author David Brownell
- * @author Hemma Prafullchandra
- * @see PKCS10
- * @see X509CertImpl
- */
-public final class CertAndKeyGen {
-    /**
-     * Creates a CertAndKeyGen object for a particular key type
-     * and signature algorithm.
-     *
-     * @param keyType type of key, e.g. "RSA", "DSA"
-     * @param sigAlg name of the signature algorithm, e.g. "MD5WithRSA",
-     *          "MD2WithRSA", "SHAwithDSA".
-     * @exception NoSuchAlgorithmException on unrecognized algorithms.
-     */
-    public CertAndKeyGen (String keyType, String sigAlg)
-    throws NoSuchAlgorithmException
-    {
-        keyGen = KeyPairGenerator.getInstance(keyType);
-        this.sigAlg = sigAlg;
-    }
-
-    /**
-     * Creates a CertAndKeyGen object for a particular key type,
-     * signature algorithm, and provider.
-     *
-     * @param keyType type of key, e.g. "RSA", "DSA"
-     * @param sigAlg name of the signature algorithm, e.g. "MD5WithRSA",
-     *          "MD2WithRSA", "SHAwithDSA".
-     * @param providerName name of the provider
-     * @exception NoSuchAlgorithmException on unrecognized algorithms.
-     * @exception NoSuchProviderException on unrecognized providers.
-     */
-    public CertAndKeyGen (String keyType, String sigAlg, String providerName)
-    throws NoSuchAlgorithmException, NoSuchProviderException
-    {
-        if (providerName == null) {
-            keyGen = KeyPairGenerator.getInstance(keyType);
-        } else {
-            try {
-                keyGen = KeyPairGenerator.getInstance(keyType, providerName);
-            } catch (Exception e) {
-                // try first available provider instead
-                keyGen = KeyPairGenerator.getInstance(keyType);
-            }
-        }
-        this.sigAlg = sigAlg;
-    }
-
-    /**
-     * Sets the source of random numbers used when generating keys.
-     * If you do not provide one, a system default facility is used.
-     * You may wish to provide your own source of random numbers
-     * to get a reproducible sequence of keys and signatures, or
-     * because you may be able to take advantage of strong sources
-     * of randomness/entropy in your environment.
-     */
-    public void         setRandom (SecureRandom generator)
-    {
-        prng = generator;
-    }
-
-    // want "public void generate (X509Certificate)" ... inherit DSA/D-H param
-
-    /**
-     * Generates a random public/private key pair, with a given key
-     * size.  Different algorithms provide different degrees of security
-     * for the same key size, because of the "work factor" involved in
-     * brute force attacks.  As computers become faster, it becomes
-     * easier to perform such attacks.  Small keys are to be avoided.
-     *
-     * <P>Note that not all values of "keyBits" are valid for all
-     * algorithms, and not all public key algorithms are currently
-     * supported for use in X.509 certificates.  If the algorithm
-     * you specified does not produce X.509 compatible keys, an
-     * invalid key exception is thrown.
-     *
-     * @param keyBits the number of bits in the keys.
-     * @exception InvalidKeyException if the environment does not
-     *  provide X.509 public keys for this signature algorithm.
-     */
-    public void generate (int keyBits)
-    throws InvalidKeyException
-    {
-        KeyPair pair;
-
-        try {
-            if (prng == null) {
-                prng = new SecureRandom();
-            }
-            keyGen.initialize(keyBits, prng);
-            pair = keyGen.generateKeyPair();
-
-        } catch (Exception e) {
-            throw new IllegalArgumentException(e.getMessage());
-        }
-
-        publicKey = pair.getPublic();
-        privateKey = pair.getPrivate();
-
-        // publicKey's format must be X.509 otherwise
-        // the whole CertGen part of this class is broken.
-        if (!"X.509".equalsIgnoreCase(publicKey.getFormat())) {
-            throw new IllegalArgumentException("publicKey's is not X.509, but "
-                    + publicKey.getFormat());
-        }
-    }
-
-
-    /**
-     * Returns the public key of the generated key pair if it is of type
-     * <code>X509Key</code>, or null if the public key is of a different type.
-     *
-     * XXX Note: This behaviour is needed for backwards compatibility.
-     * What this method really should return is the public key of the
-     * generated key pair, regardless of whether or not it is an instance of
-     * <code>X509Key</code>. Accordingly, the return type of this method
-     * should be <code>PublicKey</code>.
-     */
-    public X509Key getPublicKey()
-    {
-        if (!(publicKey instanceof X509Key)) {
-            return null;
-        }
-        return (X509Key)publicKey;
-    }
-
-    /**
-     * Always returns the public key of the generated key pair. Used
-     * by KeyTool only.
-     *
-     * The publicKey is not necessarily to be an instance of
-     * X509Key in some JCA/JCE providers, for example SunPKCS11.
-     */
-    public PublicKey getPublicKeyAnyway() {
-        return publicKey;
-    }
-
-    /**
-     * Returns the private key of the generated key pair.
-     *
-     * <P><STRONG><em>Be extremely careful when handling private keys.
-     * When private keys are not kept secret, they lose their ability
-     * to securely authenticate specific entities ... that is a huge
-     * security risk!</em></STRONG>
-     */
-    public PrivateKey getPrivateKey ()
-    {
-        return privateKey;
-    }
-
-    /**
-     * Returns a self-signed X.509v3 certificate for the public key.
-     * The certificate is immediately valid. No extensions.
-     *
-     * <P>Such certificates normally are used to identify a "Certificate
-     * Authority" (CA).  Accordingly, they will not always be accepted by
-     * other parties.  However, such certificates are also useful when
-     * you are bootstrapping your security infrastructure, or deploying
-     * system prototypes.
-     *
-     * @param myname X.500 name of the subject (who is also the issuer)
-     * @param firstDate the issue time of the certificate
-     * @param validity how long the certificate should be valid, in seconds
-     * @exception CertificateException on certificate handling errors.
-     * @exception InvalidKeyException on key handling errors.
-     * @exception SignatureException on signature handling errors.
-     * @exception NoSuchAlgorithmException on unrecognized algorithms.
-     * @exception NoSuchProviderException on unrecognized providers.
-     */
-    public X509Certificate getSelfCertificate (
-            X500Name myname, Date firstDate, long validity)
-    throws CertificateException, InvalidKeyException, SignatureException,
-        NoSuchAlgorithmException, NoSuchProviderException
-    {
-        return getSelfCertificate(myname, firstDate, validity, null);
-    }
-
-    // Like above, plus a CertificateExtensions argument, which can be null.
-    public X509Certificate getSelfCertificate (X500Name myname, Date firstDate,
-            long validity, CertificateExtensions ext)
-    throws CertificateException, InvalidKeyException, SignatureException,
-        NoSuchAlgorithmException, NoSuchProviderException
-    {
-        X509CertImpl    cert;
-        Date            lastDate;
-
-        try {
-            lastDate = new Date ();
-            lastDate.setTime (firstDate.getTime () + validity * 1000);
-
-            CertificateValidity interval =
-                                   new CertificateValidity(firstDate,lastDate);
-
-            X509CertInfo info = new X509CertInfo();
-            // Add all mandatory attributes
-            info.set(X509CertInfo.VERSION,
-                     new CertificateVersion(CertificateVersion.V3));
-            info.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber(
-                    new java.util.Random().nextInt() & 0x7fffffff));
-            AlgorithmId algID = AlgorithmId.getAlgorithmId(sigAlg);
-            info.set(X509CertInfo.ALGORITHM_ID,
-                     new CertificateAlgorithmId(algID));
-            info.set(X509CertInfo.SUBJECT, new CertificateSubjectName(myname));
-            info.set(X509CertInfo.KEY, new CertificateX509Key(publicKey));
-            info.set(X509CertInfo.VALIDITY, interval);
-            info.set(X509CertInfo.ISSUER, new CertificateIssuerName(myname));
-            if (ext != null) info.set(X509CertInfo.EXTENSIONS, ext);
-
-            cert = new X509CertImpl(info);
-            cert.sign(privateKey, this.sigAlg);
-
-            return (X509Certificate)cert;
-
-        } catch (IOException e) {
-             throw new CertificateEncodingException("getSelfCert: " +
-                                                    e.getMessage());
-        }
-    }
-
-    // Keep the old method
-    public X509Certificate getSelfCertificate (X500Name myname, long validity)
-    throws CertificateException, InvalidKeyException, SignatureException,
-        NoSuchAlgorithmException, NoSuchProviderException
-    {
-        return getSelfCertificate(myname, new Date(), validity);
-    }
-
-    /**
-     * Returns a PKCS #10 certificate request.  The caller uses either
-     * <code>PKCS10.print</code> or <code>PKCS10.toByteArray</code>
-     * operations on the result, to get the request in an appropriate
-     * transmission format.
-     *
-     * <P>PKCS #10 certificate requests are sent, along with some proof
-     * of identity, to Certificate Authorities (CAs) which then issue
-     * X.509 public key certificates.
-     *
-     * @param myname X.500 name of the subject
-     * @exception InvalidKeyException on key handling errors.
-     * @exception SignatureException on signature handling errors.
-     */
-    public PKCS10 getCertRequest (X500Name myname)
-    throws InvalidKeyException, SignatureException
-    {
-        PKCS10  req = new PKCS10 (publicKey);
-
-        try {
-            Signature signature = Signature.getInstance(sigAlg);
-            signature.initSign (privateKey);
-            req.encodeAndSign(myname, signature);
-
-        } catch (CertificateException e) {
-            throw new SignatureException (sigAlg + " CertificateException");
-
-        } catch (IOException e) {
-            throw new SignatureException (sigAlg + " IOException");
-
-        } catch (NoSuchAlgorithmException e) {
-            // "can't happen"
-            throw new SignatureException (sigAlg + " unavailable?");
-        }
-        return req;
-    }
-
-    private SecureRandom        prng;
-    private String              sigAlg;
-    private KeyPairGenerator    keyGen;
-    private PublicKey           publicKey;
-    private PrivateKey          privateKey;
-}
diff --git a/ojluni/src/main/java/sun/security/x509/CertException.java b/ojluni/src/main/java/sun/security/x509/CertException.java
deleted file mode 100755
index 585d1f8..0000000
--- a/ojluni/src/main/java/sun/security/x509/CertException.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (c) 1996, 2004, 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.
- */
-
-package sun.security.x509;
-
-/**
- * CertException indicates one of a variety of certificate problems.
- *
- * @deprecated use one of Exceptions defined in the java.security.cert
- * package.
- *
- * @see java.security.Certificate
- *
- *
- * @author David Brownell
- */
-@Deprecated
-public class CertException extends SecurityException {
-
-    private static final long serialVersionUID = 6930793039696446142L;
-
-    // Zero is reserved.
-
-    /** Indicates that the signature in the certificate is not valid. */
-    public static final int verf_INVALID_SIG = 1;
-
-    /** Indicates that the certificate was revoked, and so is invalid. */
-    public static final int verf_INVALID_REVOKED = 2;
-
-    /** Indicates that the certificate is not yet valid. */
-    public static final int verf_INVALID_NOTBEFORE = 3;
-
-    /** Indicates that the certificate has expired and so is not valid. */
-    public static final int verf_INVALID_EXPIRED = 4;
-
-    /** Indicates that a certificate authority in the certification
-     * chain is not trusted. */
-    public static final int verf_CA_UNTRUSTED = 5;
-
-    /** Indicates that the certification chain is too long. */
-    public static final int verf_CHAIN_LENGTH = 6;
-
-    /** Indicates an error parsing the ASN.1/DER encoding of the certificate. */
-    public static final int verf_PARSE_ERROR = 7;
-
-    /** Indicates an error constructing a certificate or certificate chain. */
-    public static final int err_CONSTRUCTION = 8;
-
-    /** Indicates a problem with the public key */
-    public static final int err_INVALID_PUBLIC_KEY = 9;
-
-    /** Indicates a problem with the certificate version */
-    public static final int err_INVALID_VERSION = 10;
-
-    /** Indicates a problem with the certificate format */
-    public static final int err_INVALID_FORMAT = 11;
-
-    /** Indicates a problem with the certificate encoding */
-    public static final int err_ENCODING = 12;
-
-    // Private data members
-    private int         verfCode;
-    private String      moreData;
-
-
-    /**
-     * Constructs a certificate exception using an error code
-     * (<code>verf_*</code>) and a string describing the context
-     * of the error.
-     */
-    public CertException(int code, String moredata)
-    {
-        verfCode = code;
-        moreData = moredata;
-    }
-
-    /**
-     * Constructs a certificate exception using just an error code,
-     * without a string describing the context.
-     */
-    public CertException(int code)
-    {
-        verfCode = code;
-    }
-
-    /**
-     * Returns the error code with which the exception was created.
-     */
-    public int getVerfCode() { return verfCode; }
-
-    /**
-     * Returns a string describing the context in which the exception
-     * was reported.
-     */
-    public String getMoreData() { return moreData; }
-
-    /**
-     * Return a string corresponding to the error code used to create
-     * this exception.
-     */
-    public String getVerfDescription()
-    {
-        switch (verfCode) {
-        case verf_INVALID_SIG:
-            return "The signature in the certificate is not valid.";
-        case verf_INVALID_REVOKED:
-            return "The certificate has been revoked.";
-        case verf_INVALID_NOTBEFORE:
-            return "The certificate is not yet valid.";
-        case verf_INVALID_EXPIRED:
-            return "The certificate has expired.";
-        case verf_CA_UNTRUSTED:
-            return "The Authority which issued the certificate is not trusted.";
-        case verf_CHAIN_LENGTH:
-            return "The certificate path to a trusted authority is too long.";
-        case verf_PARSE_ERROR:
-            return "The certificate could not be parsed.";
-        case err_CONSTRUCTION:
-            return "There was an error when constructing the certificate.";
-        case err_INVALID_PUBLIC_KEY:
-            return "The public key was not in the correct format.";
-        case err_INVALID_VERSION:
-            return "The certificate has an invalid version number.";
-        case err_INVALID_FORMAT:
-            return "The certificate has an invalid format.";
-        case err_ENCODING:
-            return "Problem encountered while encoding the data.";
-
-        default:
-            return "Unknown code:  " + verfCode;
-        }
-    }
-
-    /**
-     * Returns a string describing the certificate exception.
-     */
-    public String toString()
-    {
-        return "[Certificate Exception: " + getMessage() + "]";
-    }
-
-    /**
-     * Returns a string describing the certificate exception.
-     */
-    public String getMessage()
-    {
-        return getVerfDescription()
-                + ( (moreData != null)
-                    ? ( "\n  (" + moreData + ")" ) : "" );
-    }
-}
diff --git a/ojluni/src/main/java/sun/security/x509/CertParseError.java b/ojluni/src/main/java/sun/security/x509/CertParseError.java
deleted file mode 100755
index 6e83f5e..0000000
--- a/ojluni/src/main/java/sun/security/x509/CertParseError.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1996, 2004, 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.
- */
-
-package sun.security.x509;
-
-/**
- * CertException indicates one of a variety of certificate problems.
- * @deprecated use one of the Exceptions defined in the
- * java.security.cert package.
- *
- * @author David Brownell
- */
-@Deprecated
-class CertParseError extends CertException
-{
-    private static final long serialVersionUID = -4559645519017017804L;
-
-    CertParseError (String where)
-    {
-        super (CertException.verf_PARSE_ERROR, where);
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/CodePointIterator.java b/ojluni/src/main/java/sun/text/CodePointIterator.java
deleted file mode 100755
index 519ad9e..0000000
--- a/ojluni/src/main/java/sun/text/CodePointIterator.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (c) 2003, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 2003 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- */
-
-package sun.text;
-
-import java.text.CharacterIterator;
-
-public abstract class CodePointIterator {
-    public static final int DONE = -1;
-
-    public abstract void setToStart();
-    public abstract void setToLimit();
-
-    public abstract int next();
-    public abstract int prev();
-
-    public abstract int charIndex();
-
-    public static CodePointIterator create(char[] text) {
-        return new CharArrayCodePointIterator(text);
-    }
-
-    public static CodePointIterator create(char[] text, int start, int limit) {
-        return new CharArrayCodePointIterator(text, start, limit);
-    }
-
-    public static CodePointIterator create(CharSequence text) {
-        return new CharSequenceCodePointIterator(text);
-    }
-
-    public static CodePointIterator create(CharacterIterator iter) {
-        return new CharacterIteratorCodePointIterator(iter);
-    }
-}
-
-final class CharArrayCodePointIterator extends CodePointIterator {
-    private char[] text;
-    private int start;
-    private int limit;
-    private int index;
-
-    public CharArrayCodePointIterator(char[] text) {
-        this.text = text;
-        this.limit = text.length;
-    }
-
-    public CharArrayCodePointIterator(char[] text, int start, int limit) {
-        if (start < 0 || limit < start || limit > text.length) {
-            throw new IllegalArgumentException();
-        }
-
-        this.text = text;
-        this.start = this.index = start;
-        this.limit = limit;
-    }
-
-    public void setToStart() {
-        index = start;
-    }
-
-    public void setToLimit() {
-        index = limit;
-    }
-
-    public int next() {
-        if (index < limit) {
-            char cp1 = text[index++];
-            if (Character.isHighSurrogate(cp1) && index < limit) {
-                char cp2 = text[index];
-                if (Character.isLowSurrogate(cp2)) {
-                    ++index;
-                    return Character.toCodePoint(cp1, cp2);
-                }
-            }
-            return cp1;
-        }
-        return DONE;
-    }
-
-    public int prev() {
-        if (index > start) {
-            char cp2 = text[--index];
-            if (Character.isLowSurrogate(cp2) && index > start) {
-                char cp1 = text[index - 1];
-                if (Character.isHighSurrogate(cp1)) {
-                    --index;
-                    return Character.toCodePoint(cp1, cp2);
-                }
-            }
-            return cp2;
-        }
-        return DONE;
-    }
-
-    public int charIndex() {
-        return index;
-    }
-}
-
-final class CharSequenceCodePointIterator extends CodePointIterator {
-    private CharSequence text;
-    private int index;
-
-    public CharSequenceCodePointIterator(CharSequence text) {
-        this.text = text;
-    }
-
-    public void setToStart() {
-        index = 0;
-    }
-
-    public void setToLimit() {
-        index = text.length();
-    }
-
-    public int next() {
-        if (index < text.length()) {
-            char cp1 = text.charAt(index++);
-            if (Character.isHighSurrogate(cp1) && index < text.length()) {
-                char cp2 = text.charAt(index+1);
-                if (Character.isLowSurrogate(cp2)) {
-                    ++index;
-                    return Character.toCodePoint(cp1, cp2);
-                }
-            }
-            return cp1;
-        }
-        return DONE;
-    }
-
-    public int prev() {
-        if (index > 0) {
-            char cp2 = text.charAt(--index);
-            if (Character.isLowSurrogate(cp2) && index > 0) {
-                char cp1 = text.charAt(index - 1);
-                if (Character.isHighSurrogate(cp1)) {
-                    --index;
-                    return Character.toCodePoint(cp1, cp2);
-                }
-            }
-            return cp2;
-        }
-        return DONE;
-    }
-
-    public int charIndex() {
-        return index;
-    }
-}
-
-// note this has different iteration semantics than CharacterIterator
-final class CharacterIteratorCodePointIterator extends CodePointIterator {
-    private CharacterIterator iter;
-
-    public CharacterIteratorCodePointIterator(CharacterIterator iter) {
-        this.iter = iter;
-    }
-
-    public void setToStart() {
-        iter.setIndex(iter.getBeginIndex());
-    }
-
-    public void setToLimit() {
-        iter.setIndex(iter.getEndIndex());
-    }
-
-    public int next() {
-        char cp1 = iter.current();
-        if (cp1 != CharacterIterator.DONE) {
-            char cp2 = iter.next();
-            if (Character.isHighSurrogate(cp1) && cp2 != CharacterIterator.DONE) {
-                if (Character.isLowSurrogate(cp2)) {
-                    iter.next();
-                    return Character.toCodePoint(cp1, cp2);
-                }
-            }
-            return cp1;
-        }
-        return DONE;
-    }
-
-    public int prev() {
-        char cp2 = iter.previous();
-        if (cp2 != CharacterIterator.DONE) {
-            if (Character.isLowSurrogate(cp2)) {
-                char cp1 = iter.previous();
-                if (Character.isHighSurrogate(cp1)) {
-                    return Character.toCodePoint(cp1, cp2);
-                }
-                iter.next();
-            }
-            return cp2;
-        }
-        return DONE;
-    }
-
-    public int charIndex() {
-        return iter.getIndex();
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/BreakIteratorInfo_th.java b/ojluni/src/main/java/sun/text/resources/BreakIteratorInfo_th.java
deleted file mode 100755
index 1638e5a..0000000
--- a/ojluni/src/main/java/sun/text/resources/BreakIteratorInfo_th.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2003, 2005, 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.
- */
-
-/*
- */
-
-/*
- * Licensed Materials - Property of IBM
- *
- * (C) Copyright IBM Corp. 1999 All Rights Reserved.
- * (C) IBM Corp. 1997-1998.  All Rights Reserved.
- *
- * The program is provided "as is" without any warranty express or
- * implied, including the warranty of non-infringement and the implied
- * warranties of merchantibility and fitness for a particular purpose.
- * IBM will not be liable for any damages suffered by you as a result
- * of using the Program. In no event will IBM be liable for any
- * special, indirect or consequential damages or lost profits even if
- * IBM has been advised of the possibility of their occurrence. IBM
- * will not be liable for any third party claims against you.
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class BreakIteratorInfo_th extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            // BreakIteratorClasses lists the class names to instantiate for each
-            // built-in type of BreakIterator
-            {"BreakIteratorClasses",
-                new String[] {
-                    "RuleBasedBreakIterator",  // character-break iterator class
-                    "DictionaryBasedBreakIterator",  // word-break iterator class
-                    "DictionaryBasedBreakIterator",  // line-break iterator class
-                    "RuleBasedBreakIterator"   // sentence-break iterator class
-                }
-            },
-
-            // Data filename for each break-iterator
-            {"WordData", "WordBreakIteratorData_th"},
-            {"LineData", "LineBreakIteratorData_th"},
-
-            // Dictionary filename for each dictionary-based break-iterator
-            {"WordDictionary", "thai_dict"},
-            {"LineDictionary", "thai_dict"},
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/BreakIteratorRules.java b/ojluni/src/main/java/sun/text/resources/BreakIteratorRules.java
deleted file mode 100755
index 4283cd3..0000000
--- a/ojluni/src/main/java/sun/text/resources/BreakIteratorRules.java
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
- * Copyright (c) 1999, 2007, 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.
- */
-
-/*
- */
-
-/*
- * Licensed Materials - Property of IBM
- *
- * (C) Copyright IBM Corp. 1999 All Rights Reserved.
- * (C) IBM Corp. 1997-1998.  All Rights Reserved.
- *
- * The program is provided "as is" without any warranty express or
- * implied, including the warranty of non-infringement and the implied
- * warranties of merchantibility and fitness for a particular purpose.
- * IBM will not be liable for any damages suffered by you as a result
- * of using the Program. In no event will IBM be liable for any
- * special, indirect or consequential damages or lost profits even if
- * IBM has been advised of the possibility of their occurrence. IBM
- * will not be liable for any third party claims against you.
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-/**
- * Default break-iterator rules.  These rules are more or less general for
- * all locales, although there are probably a few we're missing.  The
- * behavior currently mimics the behavior of BreakIterator in JDK 1.2.
- * There are known deficiencies in this behavior, including the fact that
- * the logic for handling CJK characters works for Japanese but not for
- * Chinese, and that we don't currently have an appropriate locale for
- * Thai.  The resources will eventually be updated to fix these problems.
- */
-
- /* Modified for Hindi 3/1/99. */
-
-/*
- * Since JDK 1.5.0, this file no longer goes to runtime and is used at J2SE
- * build phase in order to create [Character|Word|Line|Sentence]BreakIteratorData
- * files which are used on runtime instead.
- */
-
-public class BreakIteratorRules extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            // rules describing how to break between logical characters
-            { "CharacterBreakRules",
-
-              // ignore non-spacing marks and enclosing marks (since we never
-              // put a break before ignore characters, this keeps combining
-              // accents with the base characters they modify)
-              "<enclosing>=[:Mn::Me:];"
-
-              // other category definitions
-              + "<choseong>=[\u1100-\u115f];"
-              + "<jungseong>=[\u1160-\u11a7];"
-              + "<jongseong>=[\u11a8-\u11ff];"
-              + "<surr-hi>=[\ud800-\udbff];"
-              + "<surr-lo>=[\udc00-\udfff];"
-
-              // break after every character, except as follows:
-              + ".;"
-
-              // keep base and combining characters togethers
-              + "<base>=[^<enclosing>^[:Cc::Cf::Zl::Zp:]];"
-              + "<base><enclosing><enclosing>*;"
-
-              // keep CRLF sequences together
-              + "\r\n;"
-
-              // keep surrogate pairs together
-              + "<surr-hi><surr-lo>;"
-
-              // keep Hangul syllables spelled out using conjoining jamo together
-              + "<choseong>*<jungseong>*<jongseong>*;"
-
-              // various additions for Hindi support
-              + "<nukta>=[\u093c];"
-              + "<danda>=[\u0964\u0965];"
-              + "<virama>=[\u094d];"
-              + "<devVowelSign>=[\u093e-\u094c\u0962\u0963];"
-              + "<devConsonant>=[\u0915-\u0939];"
-              + "<devNuktaConsonant>=[\u0958-\u095f];"
-              + "<devCharEnd>=[\u0902\u0903\u0951-\u0954];"
-              + "<devCAMN>=(<devConsonant>{<nukta>});"
-              + "<devConsonant1>=(<devNuktaConsonant>|<devCAMN>);"
-              + "<zwj>=[\u200d];"
-              + "<devConjunct>=({<devConsonant1><virama>{<zwj>}}<devConsonant1>);"
-              + "<devConjunct>{<devVowelSign>}{<devCharEnd>};"
-              + "<danda><nukta>;"
-            },
-
-            // default rules for finding word boundaries
-            { "WordBreakRules",
-              // ignore non-spacing marks, enclosing marks, and format characters,
-              // all of which should not influence the algorithm
-              //"<ignore>=[:Mn::Me::Cf:];"
-              "<ignore>=[:Cf:];"
-
-              + "<enclosing>=[:Mn::Me:];"
-
-              // Hindi phrase separator, kanji, katakana, hiragana, CJK diacriticals,
-              // other letters, and digits
-              + "<danda>=[\u0964\u0965];"
-              + "<kanji>=[\u3005\u4e00-\u9fa5\uf900-\ufa2d];"
-              + "<kata>=[\u30a1-\u30fa\u30fd\u30fe];"
-              + "<hira>=[\u3041-\u3094\u309d\u309e];"
-              + "<cjk-diacrit>=[\u3099-\u309c\u30fb\u30fc];"
-              + "<letter-base>=[:L::Mc:^[<kanji><kata><hira><cjk-diacrit>]];"
-              + "<let>=(<letter-base><enclosing>*);"
-              + "<digit-base>=[:N:];"
-              + "<dgt>=(<digit-base><enclosing>*);"
-
-              // punctuation that can occur in the middle of a word: currently
-              // dashes, apostrophes, quotation marks, and periods
-              + "<mid-word>=[:Pd::Pc:\u00ad\u2027\\\"\\\'\\.];"
-
-              // punctuation that can occur in the middle of a number: currently
-              // apostrophes, qoutation marks, periods, commas, and the Arabic
-              // decimal point
-              + "<mid-num>=[\\\"\\\'\\,\u066b\\.];"
-
-              // punctuation that can occur at the beginning of a number: currently
-              // the period, the number sign, and all currency symbols except the cents sign
-              + "<pre-num>=[:Sc:\\#\\.^\u00a2];"
-
-              // punctuation that can occur at the end of a number: currently
-              // the percent, per-thousand, per-ten-thousand, and Arabic percent
-              // signs, the cents sign, and the ampersand
-              + "<post-num>=[\\%\\&\u00a2\u066a\u2030\u2031];"
-
-              // line separators: currently LF, FF, PS, and LS
-              + "<ls>=[\n\u000c\u2028\u2029];"
-
-              // whitespace: all space separators and the tab character
-              + "<ws-base>=[:Zs:\t];"
-              + "<ws>=(<ws-base><enclosing>*);"
-
-              // a word is a sequence of letters that may contain internal
-              // punctuation, as long as it begins and ends with a letter and
-              // never contains two punctuation marks in a row
-              + "<word>=((<let><let>*(<mid-word><let><let>*)*){<danda>});"
-
-              // a number is a sequence of digits that may contain internal
-              // punctuation, as long as it begins and ends with a digit and
-              // never contains two punctuation marks in a row.
-              + "<number>=(<dgt><dgt>*(<mid-num><dgt><dgt>*)*);"
-
-              // break after every character, with the following exceptions
-              // (this will cause punctuation marks that aren't considered
-              // part of words or numbers to be treated as words unto themselves)
-              + ".;"
-
-              // keep together any sequence of contiguous words and numbers
-              // (including just one of either), plus an optional trailing
-              // number-suffix character
-              + "{<word>}(<number><word>)*{<number>{<post-num>}};"
-
-              // keep together and sequence of contiguous words and numbers
-              // that starts with a number-prefix character and a number,
-              // and may end with a number-suffix character
-              + "<pre-num>(<number><word>)*{<number>{<post-num>}};"
-
-              // keep together runs of whitespace (optionally with a single trailing
-              // line separator or CRLF sequence)
-              + "<ws>*{\r}{<ls>};"
-
-              // keep together runs of Katakana and CJK diacritical marks
-              + "[<kata><cjk-diacrit>]*;"
-
-              // keep together runs of Hiragana and CJK diacritical marks
-              + "[<hira><cjk-diacrit>]*;"
-
-              // keep together runs of Kanji
-              + "<kanji>*;"
-
-              // keep together anything else and an enclosing mark
-              + "<base>=[^<enclosing>^[:Cc::Cf::Zl::Zp:]];"
-              + "<base><enclosing><enclosing>*;"
-            },
-
-            // default rules for determining legal line-breaking positions
-            { "LineBreakRules",
-              // characters that always cause a break: ETX, tab, LF, FF, LS, and PS
-              "<break>=[\u0003\t\n\f\u2028\u2029];"
-
-              // ignore format characters and control characters EXCEPT for breaking chars
-              + "<ignore>=[:Cf:[:Cc:^[<break>\r]]];"
-
-              // enclosing marks
-              + "<enclosing>=[:Mn::Me:];"
-
-              // Hindi phrase separators
-              + "<danda>=[\u0964\u0965];"
-
-              // characters that always prevent a break: the non-breaking space
-              // and similar characters
-              + "<glue>=[\u00a0\u0f0c\u2007\u2011\u202f\ufeff];"
-
-              // whitespace: space separators and control characters, except for
-              // CR and the other characters mentioned above
-              + "<space>=[:Zs::Cc:^[<glue><break>\r]];"
-
-              // dashes: dash punctuation and the discretionary hyphen, except for
-              // non-breaking hyphens
-              + "<dash>=[:Pd:\u00ad^<glue>];"
-
-              // characters that stick to a word if they precede it: currency symbols
-              // (except the cents sign) and starting punctuation
-              + "<pre-word>=[:Sc::Ps::Pi:^[\u00a2]\\\"\\\'];"
-
-              // characters that stick to a word if they follow it: ending punctuation,
-              // other punctuation that usually occurs at the end of a sentence,
-              // small Kana characters, some CJK diacritics, etc.
-              + "<post-word>=[\\\":Pe::Pf:\\!\\%\\.\\,\\:\\;\\?\u00a2\u00b0\u066a\u2030-\u2034\u2103"
-              + "\u2105\u2109\u3001\u3002\u3005\u3041\u3043\u3045\u3047\u3049\u3063"
-              + "\u3083\u3085\u3087\u308e\u3099-\u309e\u30a1\u30a3\u30a5\u30a7\u30a9"
-              + "\u30c3\u30e3\u30e5\u30e7\u30ee\u30f5\u30f6\u30fc-\u30fe\uff01\uff05"
-              + "\uff0c\uff0e\uff1a\uff1b\uff1f];"
-
-              // Kanji: actually includes Kanji,Kana and Hangul syllables,
-              // except for small Kana and CJK diacritics
-              + "<kanji>=[\u4e00-\u9fa5\uac00-\ud7a3\uf900-\ufa2d\ufa30-\ufa6a\u3041-\u3094\u30a1-\u30fa^[<post-word><ignore>]];"
-
-              // digits
-              + "<digit>=[:Nd::No:];"
-
-              // punctuation that can occur in the middle of a number: periods and commas
-              + "<mid-num>=[\\.\\,];"
-
-              // everything not mentioned above
-              + "<char>=[^[<break><space><dash><kanji><glue><ignore><pre-word><post-word><mid-num>\r<danda>]];"
-
-              // a "number" is a run of prefix characters and dashes, followed by one or
-              // more digits with isolated number-punctuation characters interspersed
-              + "<number>=([<pre-word><dash>]*<digit><digit>*(<mid-num><digit><digit>*)*);"
-
-              // the basic core of a word can be either a "number" as defined above, a single
-              // "Kanji" character, or a run of any number of not-explicitly-mentioned
-              // characters (this includes Latin letters)
-              + "<word-core>=(<char>*|<kanji>|<number>);"
-
-              // a word may end with an optional suffix that be either a run of one or
-              // more dashes or a run of word-suffix characters
-              + "<word-suffix>=((<dash><dash>*|<post-word>*));"
-
-              // a word, thus, is an optional run of word-prefix characters, followed by
-              // a word core and a word suffix (the syntax of <word-core> and <word-suffix>
-              // actually allows either of them to match the empty string, putting a break
-              // between things like ")(" or "aaa(aaa"
-              + "<word>=(<pre-word>*<word-core><word-suffix>);"
-
-              + "<hack1>=[\\(];"
-              + "<hack2>=[\\)];"
-              + "<hack3>=[\\$\\'];"
-
-              // finally, the rule that does the work: Keep together any run of words that
-              // are joined by runs of one of more non-spacing mark.  Also keep a trailing
-              // line-break character or CRLF combination with the word.  (line separators
-              // "win" over nbsp's)
-              + "<word>(((<space>*<glue><glue>*{<space>})|<hack3>)<word>)*<space>*{<enclosing>*}{<hack1><hack2><post-word>*}{<enclosing>*}{\r}{<break>};"
-              + "\r<break>;"
-            },
-
-            // default rules for finding sentence boundaries
-            { "SentenceBreakRules",
-              // ignore non-spacing marks, enclosing marks, and format characters
-              "<ignore>=[:Mn::Me::Cf:];"
-
-              // letters
-              + "<letter>=[:L:];"
-
-              // lowercase letters
-              + "<lc>=[:Ll:];"
-
-              // uppercase letters
-              + "<uc>=[:Lu:];"
-
-              // NOT lowercase letters
-              + "<notlc>=[<letter>^<lc>];"
-
-              // whitespace (line separators are treated as whitespace)
-              + "<space>=[\t\r\f\n\u2028:Zs:];"
-
-              // punctuation which may occur at the beginning of a sentence: "starting
-              // punctuation" and quotation marks
-              + "<start-punctuation>=[:Ps::Pi:\\\"\\\'];"
-
-              // punctuation with may occur at the end of a sentence: "ending punctuation"
-              // and quotation marks
-              + "<end>=[:Pe::Pf:\\\"\\\'];"
-
-              // digits
-              + "<digit>=[:N:];"
-
-              // characters that unambiguously signal the end of a sentence
-              + "<term>=[\\!\\?\u3002\uff01\uff1f];"
-
-              // periods, which MAY signal the end of a sentence
-              + "<period>=[\\.\uff0e];"
-
-              // characters that may occur at the beginning of a sentence: basically anything
-              // not mentioned above (letters and digits are specifically excluded)
-              + "<sent-start>=[^[:L:<space><start-punctuation><end><digit><term><period>\u2029<ignore>]];"
-
-              // Hindi phrase separator
-              + "<danda>=[\u0964\u0965];"
-
-              // always break sentences after paragraph separators
-              + ".*?{\u2029};"
-
-              // always break after a danda, if it's followed by whitespace
-              + ".*?<danda><space>*;"
-
-              // if you see a period, skip over additional periods and ending punctuation
-              // and if the next character is a paragraph separator, break after the
-              // paragraph separator
-              //+ ".*?<period>[<period><end>]*<space>*\u2029;"
-              //+ ".*?[<period><end>]*<space>*\u2029;"
-
-              // if you see a period, skip over additional periods and ending punctuation,
-              // followed by optional whitespace, followed by optional starting punctuation,
-              // and if the next character is something that can start a sentence
-              // (basically, a capital letter), then put the sentence break between the
-              // whitespace and the opening punctuation
-              + ".*?<period>[<period><end>]*<space><space>*/<notlc>;"
-              + ".*?<period>[<period><end>]*<space>*/[<start-punctuation><sent-start>][<start-punctuation><sent-start>]*<letter>;"
-
-              // if you see a sentence-terminating character, skip over any additional
-              // terminators, periods, or ending punctuation, followed by any whitespace,
-              // followed by a SINGLE optional paragraph separator, and put the break there
-              + ".*?<term>[<term><period><end>]*<space>*{\u2029};"
-
-              // The following rules are here to aid in backwards iteration.  The automatically
-              // generated backwards state table will rewind to the beginning of the
-              // paragraph all the time (or all the way to the beginning of the document
-              // if the document doesn't use the Unicode PS character) because the only
-              // unambiguous character pairs are those involving paragraph separators.
-              // These specify a few more unambiguous breaking situations.
-
-              // if you see a sentence-starting character, followed by starting punctuation
-              // (remember, we're iterating backwards), followed by an optional run of
-              // whitespace, followed by an optional run of ending punctuation, followed
-              // by a period, this is a safe place to turn around
-              + "!<sent-start><start-punctuation>*<space>*<end>*<period>;"
-
-              // if you see a letter or a digit, followed by an optional run of
-              // starting punctuation, followed by an optional run of whitespace,
-              // followed by an optional run of ending punctuation, followed by
-              // a sentence terminator, this is a safe place to turn around
-              + "![<sent-start><lc><digit>]<start-punctuation>*<space>*<end>*<term>;"
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/BreakIteratorRules_th.java b/ojluni/src/main/java/sun/text/resources/BreakIteratorRules_th.java
deleted file mode 100755
index 82f015c..0000000
--- a/ojluni/src/main/java/sun/text/resources/BreakIteratorRules_th.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 1999, 2005, 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.
- */
-
-/*
- */
-
-/*
- *  (C) Copyright IBM Corp. 1999 All Rights Reserved.
- */
-
-/*
- * Since JDK 1.5.0, this file no longer goes to runtime and is used at J2SE
- * build phase in order to create [Word|Line]BreakIteratorData_th files which
- * are used on runtime instead.
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-import java.util.MissingResourceException;
-import java.net.URL;
-
-public class BreakIteratorRules_th extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "WordBreakRules",
-              // this rule breaks the iterator with mixed Thai and English
-                "<dictionary>=[\u0e01-\u0e2e\u0e30-\u0e3a\u0e40-\u0e44\u0e47-\u0e4e];"
-
-                + "<ignore>=[:Mn::Me::Cf:^<dictionary>];"
-                + "<paiyannoi>=[\u0e2f];"
-                + "<maiyamok>=[\u0e46];"
-                + "<danda>=[\u0964\u0965];"
-                + "<kanji>=[\u3005\u4e00-\u9fa5\uf900-\ufa2d];"
-                + "<kata>=[\u30a1-\u30fa];"
-                + "<hira>=[\u3041-\u3094];"
-                + "<cjk-diacrit>=[\u3099-\u309c];"
-                + "<let>=[:L::Mc:^[<kanji><kata><hira><cjk-diacrit><dictionary>]];"
-                + "<dgt>=[:N:];"
-                + "<mid-word>=[:Pd:\u00ad\u2027\\\"\\\'\\.];"
-                + "<mid-num>=[\\\"\\\'\\,\u066b\\.];"
-                + "<pre-num>=[:Sc:\\#\\.^\u00a2];"
-                + "<post-num>=[\\%\\&\u00a2\u066a\u2030\u2031];"
-                + "<ls>=[\n\u000c\u2028\u2029];"
-                + "<ws>=[:Zs:\t];"
-                + "<word>=((<let><let>*(<mid-word><let><let>*)*){<danda>});"
-                + "<number>=(<dgt><dgt>*(<mid-num><dgt><dgt>*)*);"
-                + "<thai-etc>=<paiyannoi>\u0e25<paiyannoi>;"
-                + ".;"
-                + "{<word>}(<number><word>)*{<number>{<post-num>}};"
-                + "<pre-num>(<number><word>)*{<number>{<post-num>}};"
-                + "<dictionary><dictionary>*{{<paiyannoi>}<maiyamok>};"
-                + "<dictionary><dictionary>*<paiyannoi>/([^[\u0e25<ignore>]]"
-                        + "|\u0e25[^[<paiyannoi><ignore>]]);"
-                + "<thai-etc>;"
-                + "<ws>*{\r}{<ls>};"
-                + "[<kata><cjk-diacrit>]*;"
-                + "[<hira><cjk-diacrit>]*;"
-                + "<kanji>*;"
-            },
-
-            { "LineBreakRules",
-                "<dictionary>=[\u0e01-\u0e2e\u0e30-\u0e3a\u0e40-\u0e44\u0e47-\u0e4e];" // this rule breaks the iterator with mixed Thai and English
-                + "<ignore>=[:Mn::Me::Cf:^[<dictionary>]];"
-                + "<danda>=[\u0964\u0965];"
-                + "<break>=[\u0003\t\n\f\u2028\u2029];"
-                + "<nbsp>=[\u00a0\u0f0c\u2007\u2011\u202f\ufeff];"
-                + "<space>=[:Zs::Cc:^[<nbsp><break>\r]];"
-                + "<dash>=[:Pd:\u00ad^<nbsp>];"
-                + "<paiyannoi>=[\u0e2f];"
-                + "<maiyamok>=[\u0e46];"
-                + "<thai-etc>=(<paiyannoi>\u0e25<paiyannoi>);"
-                + "<pre-word>=[:Sc::Ps::Pi:^\u00a2\\\"];"
-                + "<post-word>=[:Pe::Pf:\\!\\%\\.\\,\\:\\;\\?\\\"\u00a2\u00b0\u066a\u2030-\u2034\u2103"
-                        + "\u2105\u2109\u3001\u3002\u3005\u3041\u3043\u3045\u3047\u3049\u3063"
-                        + "\u3083\u3085\u3087\u308e\u3099-\u309e\u30a1\u30a3\u30a5\u30a7\u30a9"
-                        + "\u30c3\u30e3\u30e5\u30e7\u30ee\u30f5\u30f6\u30fc-\u30fe\uff01\uff0e"
-                        + "\uff1f<maiyamok>];"
-                + "<kanji>=[\u4e00-\u9fa5\uf900-\ufa2d\u3041-\u3094\u30a1-\u30fa^[<post-word><ignore>]];"
-                + "<digit>=[:Nd::No:];"
-                + "<mid-num>=[\\.\\,];"
-                + "<char>=[^[<break><space><dash><kanji><nbsp><ignore><pre-word><post-word>"
-                        + "<mid-num>\r<danda><dictionary><paiyannoi><maiyamok>]];"
-                + "<number>=([<pre-word><dash>]*<digit><digit>*(<mid-num><digit><digit>*)*);"
-                + "<word-core>=(<char>*|<kanji>|<number>|<dictionary><dictionary>*|<thai-etc>);"
-                + "<word-suffix>=((<dash><dash>*|<post-word>*)<space>*);"
-                + "<word>=(<pre-word>*<word-core><word-suffix>);"
-                + "<word>(<nbsp><nbsp>*<word>)*{({\r}{<break>}|<paiyannoi>\r{break}|<paiyannoi><break>)};"
-                + "<word>(<nbsp><nbsp>*<word>)*<paiyannoi>/([^[\u0e25<ignore>]]|"
-                        + "\u0e25[^[<paiyannoi><ignore>]]);"
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData.java b/ojluni/src/main/java/sun/text/resources/CollationData.java
deleted file mode 100755
index f0848ed..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule", "" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_ar.java b/ojluni/src/main/java/sun/text/resources/CollationData_ar.java
deleted file mode 100755
index 012bd8e..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_ar.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_ar extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                // for ar, the following additions are needed:
-               "& \u0361 = \u0640"
-               + "= \u064b"
-               + "= \u064c"
-               + "= \u064d"
-               + "= \u064e"
-               + "= \u064f"
-               + "= \u0650"
-               + "= \u0652"
-               + "= \u066d"
-               + "= \u06d6"
-               + "= \u06d7"
-               + "= \u06d8"
-               + "= \u06d9"
-               + "= \u06da"
-               + "= \u06db"
-               + "= \u06dc"
-               + "= \u06dd"
-               + "= \u06de"
-               + "= \u06df"
-               + "= \u06e0"
-               + "= \u06e1"
-               + "= \u06e2"
-               + "= \u06e3"
-               + "= \u06e4"
-               + "= \u06e5"
-               + "= \u06e6"
-               + "= \u06e7"
-               + "= \u06e8"
-               + "= \u06e9"
-               + "= \u06ea"
-               + "= \u06eb"
-               + "= \u06ec"
-               + "= \u06ed"
-                // Numerics
-               + "& 0 < \u0660 < \u06f0"       // 0
-               + "& 1 < \u0661 < \u06f1"       // 1
-               + "& 2 < \u0662 < \u06f2"       // 2
-               + "& 3 < \u0663 < \u06f3"       // 3
-               + "& 4 < \u0664 < \u06f4"       // 4
-               + "& 5 < \u0665 < \u06f5"       // 5
-               + "& 6 < \u0666 < \u06f6"       // 6
-               + "& 7 < \u0667 < \u06f7"       // 7
-               + "& 8 < \u0668 < \u06f8"       // 8
-               + "& 9 < \u0669 < \u06f9"       // 9
-                // Punctuations
-               + "& \u00b5 < \u060c"  // retroflex click < arabic comma
-               + "< \u061b"           // ar semicolon
-               + "< \u061f"           // ar question mark
-               + "< \u066a"           // ar percent sign
-               + "< \u066b"           // ar decimal separator
-               + "< \u066c"           // ar thousand separator
-               + "< \u06d4"           // ar full stop
-                // Arabic script sorts after Z's
-               + "&  Z <  \u0621"
-               + "; \u0622"
-               + "; \u0623"
-               + "; \u0624"
-               + "; \u0625"
-               + "; \u0626"
-               + "< \u0627"
-               + "< \u0628"
-               + "< \u067e"
-               + "< \u0629"
-               + "= \u062a"
-               + "< \u062b"
-               + "< \u062c"
-               + "< \u0686"
-               + "< \u062d"
-               + "< \u062e"
-               + "< \u062f"
-               + "< \u0630"
-               + "< \u0631"
-               + "< \u0632"
-               + "< \u0698"
-               + "< \u0633"
-               + "< \u0634"
-               + "< \u0635"
-               + "< \u0636"
-               + "< \u0637"
-               + "< \u0638"
-               + "< \u0639"
-               + "< \u063a"
-               + "< \u0641"
-               + "< \u0642"
-               + "< \u0643"
-               + "< \u06af"
-               + "< \u0644"
-               + "< \u0645"
-               + "< \u0646"
-               + "< \u0647"
-               + "< \u0648"
-               + "< \u0649"
-               + "; \u064a"
-               + "< \u0670"
-               + "< \u0671"
-               + "< \u0672"
-               + "< \u0673"
-               + "< \u0674"
-               + "< \u0675"
-               + "< \u0676"
-               + "< \u0677"
-               + "< \u0678"
-               + "< \u0679"
-               + "< \u067a"
-               + "< \u067b"
-               + "< \u067c"
-               + "< \u067d"
-               + "< \u067f"
-               + "< \u0680"
-               + "< \u0681"
-               + "< \u0682"
-               + "< \u0683"
-               + "< \u0684"
-               + "< \u0685"
-               + "< \u0687"
-               + "< \u0688"
-               + "< \u0689"
-               + "< \u068a"
-               + "< \u068b"
-               + "< \u068c"
-               + "< \u068d"
-               + "< \u068e"
-               + "< \u068f"
-               + "< \u0690"
-               + "< \u0691"
-               + "< \u0692"
-               + "< \u0693"
-               + "< \u0694"
-               + "< \u0695"
-               + "< \u0696"
-               + "< \u0697"
-               + "< \u0699"
-               + "< \u069a"
-               + "< \u069b"
-               + "< \u069c"
-               + "< \u069d"
-               + "< \u069e"
-               + "< \u069f"
-               + "< \u06a0"
-               + "< \u06a1"
-               + "< \u06a2"
-               + "< \u06a3"
-               + "< \u06a4"
-               + "< \u06a5"
-               + "< \u06a6"
-               + "< \u06a7"
-               + "< \u06a8"
-               + "< \u06a9"
-               + "< \u06aa"
-               + "< \u06ab"
-               + "< \u06ac"
-               + "< \u06ad"
-               + "< \u06ae"
-               + "< \u06b0"
-               + "< \u06b1"
-               + "< \u06b2"
-               + "< \u06b3"
-               + "< \u06b4"
-               + "< \u06b5"
-               + "< \u06b6"
-               + "< \u06b7"
-               + "< \u06ba"
-               + "< \u06bb"
-               + "< \u06bc"
-               + "< \u06bd"
-               + "< \u06be"
-               + "< \u06c0"
-               + "< \u06c1"
-               + "< \u06c2"
-               + "< \u06c3"
-               + "< \u06c4"
-               + "< \u06c5"
-               + "< \u06c6"
-               + "< \u06c7"
-               + "< \u06c8"
-               + "< \u06c9"
-               + "< \u06ca"
-               + "< \u06cb"
-               + "< \u06cc"
-               + "< \u06cd"
-               + "< \u06ce"
-               + "< \u06d0"
-               + "< \u06d1"
-               + "< \u06d2"
-               + "< \u06d3"
-               + "< \u06d5"
-               + "< \u0651"
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_be.java b/ojluni/src/main/java/sun/text/resources/CollationData_be.java
deleted file mode 100755
index 8ffc9f4..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_be.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_be extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                "& 9 < \u0482 " +       // thousand sign
-                "& Z " +                // Arabic script sorts after Z's
-                "< \u0430 , \u0410" +   // a
-                "< \u0431 , \u0411" +   // be
-                "< \u0432 , \u0412" +   // ve
-                "< \u0433 , \u0413" +   // ghe
-                "; \u0491 , \u0490" +   // ghe-upturn
-                "; \u0495 , \u0494" +   // ghe-mid-hook
-                "; \u0453 , \u0403" +   // gje
-                "; \u0493 , \u0492" +   // ghe-stroke
-                "< \u0434 , \u0414" +   // de
-                "< \u0452 , \u0402" +   // dje
-                "< \u0435 , \u0415" +   // ie
-                "; \u04bd , \u04bc" +   // che
-                "; \u0451 , \u0401" +   // io
-                "; \u04bf , \u04be" +   // che-descender
-                "< \u0454 , \u0404" +   // uk ie
-                "< \u0436 , \u0416" +   // zhe
-                "; \u0497 , \u0496" +   // zhe-descender
-                "; \u04c2 , \u04c1" +   // zhe-breve
-                "< \u0437 , \u0417" +   // ze
-                "; \u0499 , \u0498" +   // zh-descender
-                "< \u0455 , \u0405" +   // dze
-                "< \u0438 , \u0418" +   // i
-                "< \u0456 , \u0406" +   // uk/bg i
-                "; \u04c0 " +           // palochka
-                "< \u0457 , \u0407" +   // uk yi
-                "< \u0439 , \u0419" +   // short i
-                "< \u0458 , \u0408" +   // je
-                "< \u043a , \u041a" +   // ka
-                "; \u049f , \u049e" +   // ka-stroke
-                "; \u04c4 , \u04c3" +   // ka-hook
-                "; \u049d , \u049c" +   // ka-vt-stroke
-                "; \u04a1 , \u04a0" +   // bashkir-ka
-                "; \u045c , \u040c" +   // kje
-                "; \u049b , \u049a" +   // ka-descender
-                "< \u043b , \u041b" +   // el
-                "< \u0459 , \u0409" +   // lje
-                "< \u043c , \u041c" +   // em
-                "< \u043d , \u041d" +   // en
-                "; \u0463 " +           // yat
-                "; \u04a3 , \u04a2" +   // en-descender
-                "; \u04a5 , \u04a4" +   // en-ghe
-                "; \u04bb , \u04ba" +   // shha
-                "; \u04c8 , \u04c7" +   // en-hook
-                "< \u045a , \u040a" +   // nje
-                "< \u043e , \u041e" +   // o
-                "; \u04a9 , \u04a8" +   // ha
-                "< \u043f , \u041f" +   // pe
-                "; \u04a7 , \u04a6" +   // pe-mid-hook
-                "< \u0440 , \u0420" +   // er
-                "< \u0441 , \u0421" +   // es
-                "; \u04ab , \u04aa" +   // es-descender
-                "< \u0442 , \u0422" +   // te
-                "; \u04ad , \u04ac" +   // te-descender
-                "< \u045b , \u040b" +   // tshe
-                "< \u0443 , \u0423" +   // u
-                "; \u04af , \u04ae" +   // straight u
-                "< \u045e , \u040e" +   // short u
-                "< \u04b1 , \u04b0" +   // straight u-stroke
-                "< \u0444 , \u0424" +   // ef
-                "< \u0445 , \u0425" +   // ha
-                "; \u04b3 , \u04b2" +   // ha-descender
-                "< \u0446 , \u0426" +   // tse
-                "; \u04b5 , \u04b4" +   // te tse
-                "< \u0447 , \u0427" +   // che
-                "; \u04b7 ; \u04b6" +   // che-descender
-                "; \u04b9 , \u04b8" +   // che-vt-stroke
-                "; \u04cc , \u04cb" +   // che
-                "< \u045f , \u040f" +   // dzhe
-                "< \u0448 , \u0428" +   // sha
-                "< \u0449 , \u0429" +   // shcha
-                "< \u044a , \u042a" +   // hard sign
-                "< \u044b , \u042b" +   // yeru
-                "< \u044c , \u042c" +   // soft sign
-                "< \u044d , \u042d" +   // e
-                "< \u044e , \u042e" +   // yu
-                "< \u044f , \u042f" +   // ya
-                "< \u0461 , \u0460" +   // omega
-                "< \u0462 " +           // yat
-                "< \u0465 , \u0464" +   // iotified e
-                "< \u0467 , \u0466" +   // little yus
-                "< \u0469 , \u0468" +   // iotified little yus
-                "< \u046b , \u046a" +   // big yus
-                "< \u046d , \u046c" +   // iotified big yus
-                "< \u046f , \u046e" +   // ksi
-                "< \u0471 , \u0470" +   // psi
-                "< \u0473 , \u0472" +   // fita
-                "< \u0475 , \u0474" +   // izhitsa
-                "; \u0477 , \u0476" +   // izhitsa-double-grave
-                "< \u0479 , \u0478" +   // uk
-                "< \u047b , \u047a" +   // round omega
-                "< \u047d , \u047c" +   // omega-titlo
-                "< \u047f , \u047e" +   // ot
-                "< \u0481 , \u0480"     // koppa
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_bg.java b/ojluni/src/main/java/sun/text/resources/CollationData_bg.java
deleted file mode 100755
index 2bd43d1..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_bg.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_bg extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                /* for bg, default plus the following */
-                "& 9 < \u0482 " +       // thousand sign
-                "& Z " +                // Arabic script sorts after Z's
-                "< \u0430 , \u0410" +   // a
-                "< \u0431 , \u0411" +   // be
-                "< \u0432 , \u0412" +   // ve
-                "< \u0433 , \u0413" +   // ghe
-                "; \u0491 , \u0490" +   // ghe-upturn
-                "; \u0495 , \u0494" +   // ghe-mid-hook
-                "; \u0453 , \u0403" +   // gje
-                "; \u0493 , \u0492" +   // ghe-stroke
-                "< \u0434 , \u0414" +   // de
-                "< \u0452 , \u0402" +   // dje
-                "< \u0435 , \u0415" +   // ie
-                "; \u04bd , \u04bc" +   // che
-                "; \u0451 , \u0401" +   // io
-                "; \u04bf , \u04be" +   // che-descender
-                "< \u0454 , \u0404" +   // uk ie
-                "< \u0436 , \u0416" +   // zhe
-                "; \u0497 , \u0496" +   // zhe-descender
-                "; \u04c2 , \u04c1" +   // zhe-breve
-                "< \u0437 , \u0417" +   // ze
-                "; \u0499 , \u0498" +   // zh-descender
-                "< \u0455 , \u0405" +   // dze
-                "< \u0438 , \u0418" +   // i
-                "< \u0456 , \u0406" +   // uk/bg i
-                "; \u04c0 " +           // palochka
-                "< \u0457 , \u0407" +   // uk yi
-                "< \u0439 , \u0419" +   // short i
-                "< \u0458 , \u0408" +   // je
-                "< \u043a , \u041a" +   // ka
-                "; \u049f , \u049e" +   // ka-stroke
-                "; \u04c4 , \u04c3" +   // ka-hook
-                "; \u049d , \u049c" +   // ka-vt-stroke
-                "; \u04a1 , \u04a0" +   // bashkir-ka
-                "; \u045c , \u040c" +   // kje
-                "; \u049b , \u049a" +   // ka-descender
-                "< \u043b , \u041b" +   // el
-                "< \u0459 , \u0409" +   // lje
-                "< \u043c , \u041c" +   // em
-                "< \u043d , \u041d" +   // en
-                "; \u0463 " +           // yat
-                "; \u04a3 , \u04a2" +   // en-descender
-                "; \u04a5 , \u04a4" +   // en-ghe
-                "; \u04bb , \u04ba" +   // shha
-                "; \u04c8 , \u04c7" +   // en-hook
-                "< \u045a , \u040a" +   // nje
-                "< \u043e , \u041e" +   // o
-                "; \u04a9 , \u04a8" +   // ha
-                "< \u043f , \u041f" +   // pe
-                "; \u04a7 , \u04a6" +   // pe-mid-hook
-                "< \u0440 , \u0420" +   // er
-                "< \u0441 , \u0421" +   // es
-                "; \u04ab , \u04aa" +   // es-descender
-                "< \u0442 , \u0422" +   // te
-                "; \u04ad , \u04ac" +   // te-descender
-                "< \u045b , \u040b" +   // tshe
-                "< \u0443 , \u0423" +   // u
-                "; \u04af , \u04ae" +   // straight u
-                "< \u045e , \u040e" +   // short u
-                "< \u04b1 , \u04b0" +   // straight u-stroke
-                "< \u0444 , \u0424" +   // ef
-                "< \u0445 , \u0425" +   // ha
-                "; \u04b3 , \u04b2" +   // ha-descender
-                "< \u0446 , \u0426" +   // tse
-                "; \u04b5 , \u04b4" +   // te tse
-                "< \u0447 , \u0427" +   // che
-                "; \u04b7 ; \u04b6" +   // che-descender
-                "; \u04b9 , \u04b8" +   // che-vt-stroke
-                "; \u04cc , \u04cb" +   // che
-                "< \u045f , \u040f" +   // dzhe
-                "< \u0448 , \u0428" +   // sha
-                "< \u0449 , \u0429" +   // shcha
-                "< \u044a , \u042a" +   // hard sign
-                "< \u044b , \u042b" +   // yeru
-                "< \u044c , \u042c" +   // soft sign
-                "< \u044d , \u042d" +   // e
-                "< \u044e , \u042e" +   // yu
-                "< \u044f , \u042f" +   // ya
-                "< \u0461 , \u0460" +   // omega
-                "< \u0462 " +           // yat
-                "< \u0465 , \u0464" +   // iotified e
-                "< \u0467 , \u0466" +   // little yus
-                "< \u0469 , \u0468" +   // iotified little yus
-                "< \u046b , \u046a" +   // big yus
-                "< \u046d , \u046c" +   // iotified big yus
-                "< \u046f , \u046e" +   // ksi
-                "< \u0471 , \u0470" +   // psi
-                "< \u0473 , \u0472" +   // fita
-                "< \u0475 , \u0474" +   // izhitsa
-                "; \u0477 , \u0476" +   // izhitsa-double-grave
-                "< \u0479 , \u0478" +   // uk
-                "< \u047b , \u047a" +   // round omega
-                "< \u047d , \u047c" +   // omega-titlo
-                "< \u047f , \u047e" +   // ot
-                "< \u0481 , \u0480"     // koppa
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_ca.java b/ojluni/src/main/java/sun/text/resources/CollationData_ca.java
deleted file mode 100755
index 2ad2748..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_ca.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_ca extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule", "@" }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_cs.java b/ojluni/src/main/java/sun/text/resources/CollationData_cs.java
deleted file mode 100755
index 1eeda27..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_cs.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_cs extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                /* for cs, default sorting except for the following: */
-                /* add d<stroke> between d and e. */
-                /* add ch "ligature" between h and i */
-                /* add l<stroke> between l and m. */
-                /* add z<abovedot> after z.       */
-                "& \u0361 ; \u0308 = \u030d"  // & inv-breve ; umlaut = vt-line-above
-                + "& C < c\u030c , C\u030c"  // c < c-caron
-                + "& H < ch , cH , Ch , CH " // h < ch ligatures
-                + "& R < r\u030c , R\u030c"  // r < r-caron
-                + "& S < s\u030c , S\u030c"  // s < s-caron
-                + "& Z < z\u030c , Z\u030c"  // z < z-caron
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_da.java b/ojluni/src/main/java/sun/text/resources/CollationData_da.java
deleted file mode 100755
index e8be128..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_da.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_da extends ListResourceBundle {
-
-        protected final Object[][] getContents() {
-                return new Object[][] {
-                        { "Rule",
-                                "& A;\u00C1;\u00C0;\u00C2,a;\u00E1;\u00E0;\u00E2" // A; A-acute; A-grave; A-circ, a; a-acute, a-grave, a-circ
-                                        + "<B,b"
-                                        + "<C;\u00c7,c;\u00e7" // c-cedill
-                                        + "<D;\u00D0;\u0110,d;\u00F0;\u0111" // eth(icelandic), d-stroke (sami); they looks identically
-                                        + "<E;\u00C9;\u00C8;\u00CA;\u00CB,e;\u00E9;\u00E8;\u00EA;\u00EB" // E; E-acute; E-grave; E-circ; E-diaeresis, e-acute, e-grave; e-circ; e-diaeresis
-                                        + "<F,f <G,g <H,h"
-                                        + "<I;\u00CD,i;\u00ED" // i-acute
-                                        + "<J,j <K,k <L,l <M,m <N,n"
-                                        + "<O;\u00D3;\u00d4,o;\u00F3;\u00f4" // o-acute, o-circ
-                                        + "<P,p <Q,q <R,r <S,s <T,t"
-                                        + "<U,u <V,v <W,w <X,x"
-                                        + "<Y;\u00DD;U\u0308,y;\u00FD;u\u0308" // y-acute, u-diaeresis
-                                        + "<Z,z"
-                                        // ae-ligature and variants
-                                        + "<\u00c6,\u00e6" // ae-ligature
-                                        + ";\u00c6\u0301,\u00e6\u0301" // ae-acute
-                                        + ";A\u0308,a\u0308 "       // a-diaeresis
-                                        // o-stroke and variant
-                                        + "<\u00d8,\u00f8 " // o-slash
-                                        + ";\u00d8\u0301,\u00f8\u0301" // o-slash-acute
-                                        + ";O\u0308,o\u0308 "  // ; o-diaeresis
-                                        + ";O\u030b,o\u030b"        // nt :  o-double-acute
-                                        // a-ring and variants
-                                        + "< \u00c5 , \u00e5"       // a-ring
-                                        + ";\u00c5\u0301,\u00e5\u0301" // a-ring-acute
-                                        + ", AA , Aa , aA , aa "      // after a-ring
-                                        + "& ss;\u00DF"             // s-zet
-                                        + "& th, \u00FE & th, \u00DE "     // thorn
-                                        + "& oe, \u0153 & oe, \u0152 " // oe-ligature
-                        }
-                };
-        }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_de.java b/ojluni/src/main/java/sun/text/resources/CollationData_de.java
deleted file mode 100755
index ecfdc70..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_de.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class CollationData_de extends EmptyListResourceBundle {
-    // This bundle is empty because the default rule is
-    // adequate for this locale.
-    // The bundle is necessary to prevent the resource
-    // bundle lookup from falling back to the default
-    // locale.
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_el.java b/ojluni/src/main/java/sun/text/resources/CollationData_el.java
deleted file mode 100755
index dc40914..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_el.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_el extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                "& \u0361 = \u0387 = \u03f3 " // ?? \u03f3 is letter yot
-                // punctuations
-                + "& \u00b5 "
-                + "< \u0374 "        // upper numeral sign
-                + "< \u0375 "        // lower numeral sign
-                + "< \u037a "        // ypogegrammeni
-                + "< \u037e "        // question mark
-                + "< \u0384 "        // tonos
-                + "< \u0385 "        // dialytika tonos
-                // Greek letters sorts after Z's
-                + "& Z < \u03b1 , \u0391 "  // alpha
-                + "; \u03ac , \u0386 "  // alpha-tonos
-                + "< \u03b2 , \u0392 "  // beta
-                + "; \u03d0 "           // beta symbol
-                + "< \u03b3 , \u0393 "  // gamma
-                + "< \u03b4 , \u0394 "  // delta
-                + "< \u03b5 , \u0395 "  // epsilon
-                + "; \u03ad , \u0388 "  // epsilon-tonos
-                + "< \u03b6 , \u0396 "  // zeta
-                + "< \u03b7 , \u0397 "  // eta
-                + "; \u03ae , \u0389 "  // eta-tonos
-                + "< \u03b8 , \u0398 "  // theta
-                + "; \u03d1 "           // theta-symbol
-                + "< \u03b9 , \u0399 "  // iota
-                + "; \u03af , \u038a "  // iota-tonos
-                + "; \u03ca , \u03aa "  // iota-dialytika
-                + "; \u0390 "           // iota-dialytika
-                + "< \u03ba , \u039a "  // kappa
-                + "; \u03f0 "           // kappa symbol
-                + "< \u03bb , \u039b "  // lamda
-                + "< \u03bc , \u039c "  // mu
-                + "< \u03bd , \u039d "  // nu
-                + "< \u03be , \u039e "  // xi
-                + "< \u03bf , \u039f "  // omicron
-                + "; \u03cc , \u038c "  // omicron-tonos
-                + "< \u03c0 , \u03a0 "  // pi
-                + "; \u03d6 < \u03c1 "  // pi-symbol
-                + ", \u03a1 "           // rho
-                + "; \u03f1 "           // rho-symbol
-                + "< \u03c3 , \u03c2 "  // sigma(final)
-                + ", \u03a3 "           // sigma
-                + "; \u03f2 "           // sigma-symbol
-                + "< \u03c4 , \u03a4 "  // tau
-                + "< \u03c5 , \u03a5 "  // upsilon
-                + "; \u03cd , \u038e "  // upsilon-tonos
-                + "; \u03cb , \u03ab "  // upsilon-dialytika
-                + "= \u03d4 "           // upsilon-diaeresis-hook
-                + "; \u03b0 "           // upsilon-dialytika-tonos
-                + "; \u03d2 "           // upsilon-hook symbol
-                + "; \u03d3 "           // upsilon-acute-hook
-                + "< \u03c6 , \u03a6 "  // phi
-                + "; \u03d5 "           // phi-symbol
-                + "< \u03c7 , \u03a7 "  // chi
-                + "< \u03c8 , \u03a8 "  // psi
-                + "< \u03c9 , \u03a9 "  // omega
-                + "; \u03ce , \u038f "  // omega-tonos
-                + ", \u03da , \u03dc "  // stigma, digamma
-                + ", \u03de , \u03e0 "  // koppa, sampi
-                + "< \u03e3 , \u03e2 "  // shei
-                + "< \u03e5 , \u03e4 "  // fei
-                + "< \u03e7 , \u03e6 "  // khei
-                + "< \u03e9 , \u03e8 "  // hori
-                + "< \u03eb , \u03ea "  // gangia
-                + "< \u03ed , \u03ec "  // shima
-                + "< \u03ef , \u03ee "  // dei
-
-                + "& \u03bc = \u00b5 "  // Micro symbol sorts with mu
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_en.java b/ojluni/src/main/java/sun/text/resources/CollationData_en.java
deleted file mode 100755
index b069133..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_en.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class CollationData_en extends EmptyListResourceBundle {
-    // This bundle is empty because the default rule is
-    // adequate for this locale.
-    // The bundle is necessary to prevent the resource
-    // bundle lookup from falling back to the default
-    // locale.
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_es.java b/ojluni/src/main/java/sun/text/resources/CollationData_es.java
deleted file mode 100755
index c46c349..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_es.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_es extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule", "& N < n\u0303, N\u0303 " }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_et.java b/ojluni/src/main/java/sun/text/resources/CollationData_et.java
deleted file mode 100755
index acb294b..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_et.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_et extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                "@"                    /* sort accents bkwd */
-                + "& S < s\u030c, S\u030c "         // s < s-caron
-                + "< z , Z < z\u030c , Z\u030c "    // z sorts between s and t
-                + "& V ; w , W < o\u0303 , O\u0303" // v is equiv. to w b4 o-tilde
-                + "< a\u0308 , A\u0308 < o\u0308 , O\u0308 "
-                + "; w\u0302 , W\u0302"             // w-circumflex
-                + "< u\u0308 , U\u0308"
-                + "& Y < \u01b6 , \u01b5 "          // y < z-stroke
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_fi.java b/ojluni/src/main/java/sun/text/resources/CollationData_fi.java
deleted file mode 100755
index b26be27..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_fi.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_fi extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                "& V ; w , W "
-                + "& Z < a\u030a , A\u030a"   // Z < a-ring
-                + "< a\u0308 , A\u0308 < o\u0308 , O\u0308"
-                + "< o\u030b , O\u030b ; \u00f8 , \u00d8"  // o-double-acute ; o-stroke
-                + "&  Y ; u\u030b, U\u030b "       // nt : y ; u-double-acute
-                + "; u\u0308 , U\u0308"   // nt & tal : y ; u-umlaut
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_fr.java b/ojluni/src/main/java/sun/text/resources/CollationData_fr.java
deleted file mode 100755
index a6f9121..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_fr.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_fr extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule", "@" }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_hi.java b/ojluni/src/main/java/sun/text/resources/CollationData_hi.java
deleted file mode 100755
index 74875f1..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_hi.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * Copyright (c) 1998 International Business Machines.
- * All Rights Reserved.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_hi extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-          { "Rule", ""
-                    + "< \u0901 < \u0902 < \u0903 < \u0905"
-                    + "< \u0906 < \u0907 < \u0908 < \u0909"
-                    + "< \u090a < \u090b < \u0960 < \u090e"
-                    + "< \u090f < \u090c < \u0961 < \u0910"
-                    + "< \u090d < \u0912 < \u0913 < \u0914"
-                    + "< \u0911 < \u0915 < \u0958 < \u0916"
-                    + "< \u0959 < \u0917 < \u095a < \u0918"
-                    + "< \u0919 < \u091a < \u091b < \u091c"
-                    + "< \u095b < \u091d < \u091e < \u091f"
-                    + "< \u0920 < \u0921 < \u095c < \u0922"
-                    + "< \u095d < \u0923 < \u0924 < \u0925"
-                    + "< \u0926 < \u0927 < \u0928 < \u0929"
-                    + "< \u092a < \u092b < \u095e < \u092c"
-                    + "< \u092d < \u092e < \u092f < \u095f"
-                    + "< \u0930 < \u0931 < \u0932 < \u0933"
-                    + "< \u0934 < \u0935 < \u0936 < \u0937"
-                    + "< \u0938 < \u0939 < \u093e < \u093f"
-                    + "< \u0940 < \u0941 < \u0942 < \u0943"
-                    + "< \u0944 < \u0946 < \u0947 < \u0948"
-                    + "< \u0945 < \u094a < \u094b < \u094c"
-                    + "< \u0949 < \u094d < \u093c < \u093d"
-                    + "< \u0950 < \u0951 < \u0952 < \u0953"
-                    + "< \u0954 < \u0962 < \u0963 < \u0964"
-                    + "< \u0965 < \u0966 < \u0967 < \u0968"
-                    + "< \u0969 < \u096a < \u096b < \u096c"
-                    + "< \u096d < \u096e < \u096f < \u0970"
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_hr.java b/ojluni/src/main/java/sun/text/resources/CollationData_hr.java
deleted file mode 100755
index 20ba928..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_hr.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_hr extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                /* for hr, default sorting except for the following: */
-
-                /* add dz "ligature" between d and d<stroke>. */
-                /* add d<stroke> between d and e. */
-                /* add lj "ligature" between l and l<stroke>. */
-                /* add l<stroke> between l and m. */
-                /* add nj "ligature" between n and o. */
-                /* add z<abovedot> after z.       */
-                "& \u200f = \u030c "
-                + "& \u0306 = \u030d "
-                + "& C < c\u030c , C\u030c "  // C < c-caron
-                + "< c\u0301 , C\u0301 "      // c-acute
-                + "& D < \u01f3 , \u01f2 , \u01f1 "  // dz
-                + "< dz , dZ , Dz , DZ "      // dz ligature
-                + "< \u01c6 , \u01c5 , \u01c4 "  // dz-caron
-                + "< \u0111 , \u0110 "           // d-stroke
-                + "& L < lj , lJ , Lj , LJ " // l < lj ligature
-                + "& N < nj , nJ , Nj , NJ " // n < nj ligature
-                + "& S < s\u030c , S\u030c "  // s < s-caron
-                + "& Z < z\u030c , Z\u030c "  // z < z-caron
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_hu.java b/ojluni/src/main/java/sun/text/resources/CollationData_hu.java
deleted file mode 100755
index d598ed1..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_hu.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_hu extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                /* for hu, default sorting except for the following: */
-                /* add cs "ligature" between c and d. */
-                /* add d<stroke> between d and e. */
-                /* add gy "ligature" between g and h. */
-                /* add ly "ligature" between l and l<stroke>. */
-                /* add l<stroke> between l and m. */
-                /* add sz "ligature" between s and t. */
-                /* add zs "ligature" between z and z<abovedot> */
-                /* add z<abovedot> after z.       */
-                "& C < cs , cS , Cs , CS " // cs ligatures
-                + "& D < \u0111, \u0110 "    // tal : african d < d-stroke
-                + "& G < gy, Gy, gY, GY "    // gy ligatures
-                + "& L < ly, Ly, lY, LY "    // l < ly
-                + "& O < o\u0308 , O\u0308 " // O < o-umlaut
-                + "< o\u030b , O\u030b "     // o-double-accute
-                + "& S < sz , sZ , Sz , SZ " // s < sz ligature
-                + "& U < u\u0308 , U\u0308 " // u < u-umlaut
-                + "< u\u030b , U\u030b "     // u-double-accute
-                + "& Z < zs , zS , Zs , ZS " // stop-stroke < zs ligature
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_is.java b/ojluni/src/main/java/sun/text/resources/CollationData_is.java
deleted file mode 100755
index 952ea177..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_is.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_is extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                /* for is, accents sorted backwards plus the following: */
-
-                "@"                                           /* sort accents bkwd */
-                /* assuming that in the default collation we add:                   */
-                /*  thorn, ae ligature, o-diaeresis, and o-slash                    */
-                /*  ....in this order...and ditto for the uppercase of these....    */
-                /* to be treated as characters (not accented characters) after z    */
-                /* then we don't have to add anything here. I've just added it here */
-                /* just in case it gets overlooked.                                 */
-                + "& A < a\u0301, A\u0301 "       // nt : A < a-acute
-                + "& D < \u00f0, \u00d0"          // nt : d < eth
-                + "& E < e\u0301, E\u0301 "       // nt : e < e-acute
-                + "& I < i\u0301, I\u0301 "       // nt : i < i-acute
-                + "& O < o\u0301, O\u0301 "       // nt : o < o-acute
-                + "& U < u\u0301, U\u0301 "       // nt : u < u-acute
-                + "& Y < y\u0301, Y\u0301 "       // nt : y < y-acute
-                + "& Z < \u00fe, \u00de < \u00e6, \u00c6" // nt : z < thron < a-e-ligature
-                + "< o\u0308, O\u0308 ; \u00f8, \u00d8" // nt : o-umlaut ; o-stroke
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_it.java b/ojluni/src/main/java/sun/text/resources/CollationData_it.java
deleted file mode 100755
index 4f0c4f5..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_it.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class CollationData_it extends EmptyListResourceBundle {
-    // This bundle is empty because the default rule is
-    // adequate for this locale.
-    // The bundle is necessary to prevent the resource
-    // bundle lookup from falling back to the default
-    // locale.
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_iw.java b/ojluni/src/main/java/sun/text/resources/CollationData_iw.java
deleted file mode 100755
index ab3b202..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_iw.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_iw extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                 "& \u0361 = \u05c4 "
-               + "& \u030d = \u0591 "
-               + "; \u0592 "
-               + "; \u0593 "
-               + "; \u0594 "
-               + "; \u0595 "
-               + "; \u0596 "
-               + "; \u0597 "
-               + "; \u0598 "
-               + "; \u0599 "
-               + "& \u0301 = \u059a "
-               + "& \u0300 = \u059b "
-               + "& \u0307 = \u059c ; \u059d "
-               + "& \u0302 = \u059e "
-               + "& \u0308 = \u059f "
-               + "& \u030c = \u05a0 "
-               + "& \u0306 = \u05a1 "
-               + "& \u0304 = \u05a3 ; \u05a4 "
-               + "& \u0303 = \u05a5 "
-               + "& \u030a = \u05a6 "
-               + "& \u0328 = \u05a7 "
-               + "& \u0327 = \u05a8 "
-               + "& \u030b = \u05a9 "
-               + "& \u0336 = \u05aa "
-               + "& \u0337 = \u05ab "
-               + "& \u0338 = \u05ac ; \u05ad ; \u05ae "
-               + "; \u05af "
-                // Points
-               + "; \u05b0 "
-               + "; \u05b1 "
-               + "; \u05b2 "
-               + "; \u05b3 "
-               + "; \u05b4 "
-               + "; \u05b5 "
-               + "; \u05b6 "
-               + "; \u05b7 "
-               + "; \u05b8 "
-               + "; \u05b9 "
-               + "; \u05bb "
-               + "; \u05bc "
-               + "; \u05bd "
-               + "; \u05bf "
-               + "; \u05c0 "
-               + "; \u05c1 "
-               + "; \u05c2 "
-                // Punctuations
-               + "& \u00b5 < \u05be "
-               + "< \u05c3 "
-               + "< \u05f3 "
-               + "< \u05f4 "
-                // Hebrew letters sort after Z's
-               + "& Z < \u05d0 "
-               + "< \u05d1 "
-               + "< \u05d2 "
-               + "< \u05d3 "
-               + "< \u05d4 "
-               + "< \u05d5 "
-               + "< \u05f0 "
-               + "< \u05f1 "
-               + "< \u05d6 "
-               + "< \u05d7 "
-               + "< \u05d8 "
-               + "< \u05d9 "
-               + "< \u05f2 "
-               + "< \u05da , \u05db "
-               + "< \u05dc "
-               + "< \u05dd , \u05de "
-               + "< \u05df , \u05e0 "
-               + "< \u05e1 "
-               + "< \u05e2 "
-               + "< \u05e3 , \u05e4 "
-               + "< \u05e5 , \u05e6 "
-               + "< \u05e7 "
-               + "< \u05e8 "
-               + "< \u05e9 "
-               + "< \u05ea "
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_ja.java b/ojluni/src/main/java/sun/text/resources/CollationData_ja.java
deleted file mode 100755
index 3c4fdb9..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_ja.java
+++ /dev/null
@@ -1,1877 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_ja extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                // Japanese JIS order
-                // Ignorables
-                "&\u0486;\u30fc"                         // L. MARK
-                + ";\u3099"                                // V. MARK
-                + ";\u309A"                                // SV. MARK
-                + ";\u30fb"                                // Kana MIDDLE DOT
-                + ",\u303F"                                // IDEOGRAPHIC HALF FILL SPACE
-
-                // Symbols
-                + "&\u2212 <\u309b"                       // Kana-Gana V. SOUND MARK
-                + "<\u309c"                                // Kana-Gana SV. SOUND MARK
-                + "<\u309d"                                // Gana ITERATION MARK
-                + ",\u30fd"                                // Kana ITERATION MARK
-                + "<\u309e"                                // Gana V. ITERATION MARK
-                + ",\u30fe"                                // Kana V. ITERATION MARK
-
-                // Hiragana/Kanakana Letters
-                // Remember that decomposition automatically turns
-                // <ga> into <ka><length>, so <ga>,etc. don't need separate rules
-
-                + "& Z <\u3042"                            // Gana A
-                + ",\u3041"                                // Gana SMALL A
-                + ",\u30a2"                                // Kana A
-                + ",\u30a1"                                // Kana SMALL A
-
-                + "<\u3044"                                // Gana I
-                + ",\u3043"                                // Gana SMALL I
-                + ",\u30a4"                                // Kana I
-                + ",\u30a3"                                // Kana SMALL I
-
-                + "<\u3046"                                // Gana U
-                + ",\u3045"                                // Gana SMALL U
-                + ",\u30a6"                                // Kana U
-                + ",\u30a5"                                // Kana SMALL U
-
-                + "<\u3048"                                // Gana E
-                + ",\u3047"                                // Gana SMALL E
-                + ",\u30a8"                                // Kana E
-                + ",\u30a7"                                // Kana SMALL E
-
-                + "<\u304a"                                // Gana O
-                + ",\u3049"                                // Gana SMALL O
-                + ",\u30aa"                                // Kana O
-                + ",\u30a9"                                // Kana SMALL O
-
-                + "<\u304b"                                // Gana KA
-                + ",\u30ab"                                // Kana KA
-                + ",\u30f5"                                // Kana SMALL KA
-                + "<\u304d"                                // Gana KI
-                + ",\u30ad"                                // Kana KI
-                + "<\u304f"     // Gana KU
-                + ",\u30af"     // Kana KU
-                + "<\u3051"     // Gana KE
-                + ",\u30b1"     // Kana KE
-                + ",\u30f6"     // Kana SMALL KE
-                + "<\u3053"     // Gana KO
-                + ",\u30b3"     // Kana KO
-
-                + "<\u3055"     // Gana SA
-                + ",\u30b5"     // Kana SA
-                + "<\u3057"     // Gana SI
-                + ",\u30b7"     // Kana SI
-                + "<\u3059"     // Gana SU
-                + ",\u30b9"     // Kana SU
-                + "<\u305b"     // Gana SE
-                + ",\u30bb"     // Kana SE
-                + "<\u305d"     // Gana SO
-                + ",\u30bd"     // Kana SO
-
-                + "<\u305f"     // Gana TA
-                + ",\u30bf"     // Kana TA
-                + "<\u3061"     // Gana TI
-                + ",\u30c1"     // Kana TI
-                + "<\u3064"     // Gana TU
-                + ",\u3063"     // Gana SMALL TU
-                + ",\u30c4"     // Kana TU
-                + ",\u30c3"     // Kana SMALL TU
-                + "<\u3066"     // Gana TE
-                + ",\u30c6"     // Kana TE
-                + "<\u3068"     // Gana TO
-                + ",\u30c8"     // Kana TO
-
-                + "<\u306a"     // Gana NA
-                + ",\u30ca"     // Kana NA
-                + "<\u306b"     // Gana NI
-                + ",\u30cb"     // Kana NI
-                + "<\u306c"     // Gana NU
-                + ",\u30cc"     // Kana NU
-                + "<\u306d"     // Gana NE
-                + ",\u30cd"     // Kana NE
-                + "<\u306e"     // Gana NO
-                + ",\u30ce"     // Kana NO
-
-                + "<\u306f"     // Gana HA
-                + ",\u30cf"     // Kana HA
-                + "<\u3072"     // Gana HI
-                + ",\u30d2"     // Kana HI
-                + "<\u3075"     // Gana HU
-                + ",\u30d5"     // Kana HU
-                + "<\u3078"     // Gana HE
-                + ",\u30d8"     // Kana HE
-                + "<\u307b"     // Gana HO
-                + ",\u30db"     // Kana HO
-
-                + "<\u307e"     // Gana MA
-                + ",\u30de"     // Kana MA
-                + "<\u307f"     // Gana MI
-                + ",\u30df"     // Kana MI
-                + "<\u3080"     // Gana MU
-                + ",\u30e0"     // Kana MU
-                + "<\u3081"     // Gana ME
-                + ",\u30e1"     // Kana ME
-                + "<\u3082"     // Gana MO
-                + ",\u30e2"     // Kana MO
-
-                + "<\u3084"     // Gana YA
-                + ",\u3083"     // Gana SMALL YA
-                + ",\u30e4"     // Kana YA
-                + ",\u30e3"     // Kana SMALL YA
-                + "<\u3086"     // Gana YU
-                + ",\u3085"     // Gana SMALL YU
-                + ",\u30e6"     // Kana YU
-                + ",\u30e5"     // Kana SMALL YU
-                + "<\u3088"     // Gana YO
-                + ",\u3087"     // Gana SMALL YO
-                + ",\u30e8"     // Kana YO
-                + ",\u30e7"     // Kana SMALL YO
-
-                + "<\u3089"     // Gana RA
-                + ",\u30e9"     // Kana RA
-                + "<\u308a"     // Gana RI
-                + ",\u30ea"     // Kana RI
-                + "<\u308b"     // Gana RU
-                + ",\u30eb"     // Kana RU
-                + "<\u308c"     // Gana RE
-                + ",\u30ec"     // Kana RE
-                + "<\u308d"     // Gana RO
-                + ",\u30ed"     // Kana RO
-
-                + "<\u308f"     // Gana WA
-                + ",\u308e"     // Gana SMALL WA
-                + ",\u30ef"     // Kana WA
-                + ",\u30ee"     // Kana SMALL WA
-                + "<\u3090"     // Gana WI
-                + ",\u30f0"     // Kana WI
-                + "<\u3091"     // Gana WE
-                + ",\u30f1"     // Kana WE
-                + "<\u3092"     // Gana WO
-                + ",\u30f2"     // Kana WO
-
-                + "<\u3093"     // Gana N
-                + ",\u30f3"     // Kana N
-
-                // START Handle Length mark.
-                // This is optional: some dictionaries just ignore length mark
-                // If you want to do that, comment out down to "END Handle Length mark."
-                // These rules handle matching the length mark to the right vowel.
-                // <ka><length> == <ka><a>, <ki><length> == <ki><i>, etc.
-                + "&\u30a2\u30a2 ,\u30a2\u30fc"     // Kana A
-                + "&\u30a1\u30a2 ,\u30a1\u30fc"     // Kana SMALL A
-                + "&\u30a4\u30a4 ,\u30a4\u30fc"     // Kana I
-                + "&\u30a3\u30a4 ,\u30a3\u30fc"     // Kana SMALL I
-                + "&\u30a6\u30a6 ,\u30a6\u30fc"     // Kana U
-                + "&\u30a5\u30a6 ,\u30a5\u30fc"     // Kana SMALL U
-                + "&\u30a8\u30a8 ,\u30a8\u30fc"     // Kana E
-                + "&\u30a7\u30a8 ,\u30a7\u30fc"     // Kana SMALL E
-                + "&\u30aa\u30aa ,\u30aa\u30fc"     // Kana O
-                + "&\u30a9\u30aa ,\u30a9\u30fc"     // Kana SMALL O
-
-                + "&\u30ab\u30a2 ,\u30ab\u30fc"     // Kana KA
-                + "&\u30f5\u30a2 ,\u30f5\u30fc"     // Kana SMALL KA
-                + "&\u30ad\u30a4 ,\u30ad\u30fc"     // Kana KI
-                + "&\u30af\u30a6 ,\u30af\u30fc"     // Kana KU
-                + "&\u30b1\u30a8 ,\u30b1\u30fc"     // Kana KE
-                + "&\u30f6\u30a8 ,\u30f6\u30fc"     // Kana SMALL KE
-                + "&\u30b3\u30aa ,\u30b3\u30fc"     // Kana KO
-
-                + "&\u30b5\u30a2 ,\u30b5\u30fc"     // Kana SA
-                + "&\u30b7\u30a4 ,\u30b7\u30fc"     // Kana SI
-                + "&\u30b9\u30a6 ,\u30b9\u30fc"     // Kana SU
-                + "&\u30bb\u30a8 ,\u30bb\u30fc"     // Kana SE
-                + "&\u30bd\u30aa ,\u30bd\u30fc"     // Kana SO
-
-                + "&\u30bf\u30a2 ,\u30bf\u30fc"     // Kana TA
-                + "&\u30c1\u30a4 ,\u30c1\u30fc"     // Kana TI
-                + "&\u30c4\u30a6 ,\u30c4\u30fc"     // Kana TU
-                + "&\u30c3\u30a6 ,\u30c3\u30fc"     // Kana SMALL TU
-                + "&\u30c6\u30a8 ,\u30c6\u30fc"     // Kana TE
-                + "&\u30c8\u30aa ,\u30c8\u30fc"     // Kana TO
-
-                + "&\u30ca\u30a2 ,\u30ca\u30fc"     // Kana NA
-                + "&\u30cb\u30a4 ,\u30cb\u30fc"     // Kana NI
-                + "&\u30cc\u30a6 ,\u30cc\u30fc"     // Kana NU
-                + "&\u30cd\u30a8 ,\u30cd\u30fc"     // Kana NE
-                + "&\u30ce\u30aa ,\u30ce\u30fc"     // Kana NO
-
-                + "&\u30cf\u30a2 ,\u30cf\u30fc"     // Kana HA
-                + "&\u30d2\u30a4 ,\u30d2\u30fc"     // Kana HI
-                + "&\u30d5\u30a6 ,\u30d5\u30fc"     // Kana HU
-                + "&\u30d8\u30a8 ,\u30d8\u30fc"     // Kana HE
-                + "&\u30db\u30aa ,\u30db\u30fc"     // Kana HO
-
-                + "&\u30de\u30a2 ,\u30de\u30fc"     // Kana MA
-                + "&\u30df\u30a4 ,\u30df\u30fc"     // Kana MI
-                + "&\u30e0\u30a6 ,\u30e0\u30fc"     // Kana MU
-                + "&\u30e1\u30a8 ,\u30e1\u30fc"     // Kana ME
-                + "&\u30e2\u30aa ,\u30e2\u30fc"     // Kana MO
-
-                + "&\u30e4\u30a2 ,\u30e4\u30fc"     // Kana YA
-                + "&\u30e3\u30a2 ,\u30e3\u30fc"     // Kana SMALL YAMARK
-                + "&\u30e6\u30a6 ,\u30e6\u30fc"     // Kana YU
-                + "&\u30e5\u30a6 ,\u30e5\u30fc"     // Kana SMALL YUMARK
-                + "&\u30e8\u30aa ,\u30e8\u30fc"     // Kana YO
-                + "&\u30e7\u30aa ,\u30e7\u30fc"     // Kana SMALL YOMARK
-
-                + "&\u30e9\u30a2 ,\u30e9\u30fc"     // Kana RA
-                + "&\u30ea\u30a4 ,\u30ea\u30fc"     // Kana RI
-                + "&\u30eb\u30a6 ,\u30eb\u30fc"     // Kana RU
-                + "&\u30ec\u30a8 ,\u30ec\u30fc"     // Kana RE
-                + "&\u30ed\u30aa ,\u30ed\u30fc"     // Kana RO
-
-                + "&\u30ef\u30a2 ,\u30ef\u30fc"     // Kana WA
-                + "&\u30ee\u30a2 ,\u30ee\u30fc"     // Kana SMALL WA
-                + "&\u30f0\u30a4 ,\u30f0\u30fc"     // Kana WI
-                + "&\u30f1\u30a8 ,\u30f1\u30fc"     // Kana WE
-                + "&\u30f2\u30aa ,\u30f2\u30fc"     // Kana WO
-
-                // And now, with voice marks
-                // <ga><length> == <ka><voice><length> == <ka><voice>><a>
-
-                + "&\u30ab\u309b\u30a2 ,\u30ab\u309b\u30fc"     // Kana KA + voice = GA
-                + "&\u30ad\u309b\u30a4 ,\u30ad\u309b\u30fc"     // Kana KI
-                + "&\u30af\u309b\u30a6 ,\u30af\u309b\u30fc"     // Kana KU
-                + "&\u30b1\u309b\u30a8 ,\u30b1\u309b\u30fc"     // Kana KE
-                + "&\u30b3\u309b\u30aa ,\u30b3\u309b\u30fc"     // Kana KO
-
-                + "&\u30b5\u309b\u30a2 ,\u30b5\u309b\u30fc"     // Kana SA
-                + "&\u30b7\u309b\u30a4 ,\u30b7\u309b\u30fc"     // Kana SI
-                + "&\u30b9\u309b\u30a6 ,\u30b9\u309b\u30fc"     // Kana SU
-                + "&\u30bb\u309b\u30a8 ,\u30bb\u309b\u30fc"     // Kana SE
-                + "&\u30bd\u309b\u30aa ,\u30bd\u309b\u30fc"     // Kana SO
-
-                + "&\u30bf\u309b\u30a2 ,\u30bf\u309b\u30fc"     // Kana TA
-                + "&\u30c1\u309b\u30a4 ,\u30c1\u309b\u30fc"     // Kana TI
-                + "&\u30c4\u309b\u30a6 ,\u30c4\u309b\u30fc"     // Kana TU
-                + "&\u30c6\u309b\u30a8 ,\u30c6\u309b\u30fc"     // Kana TE
-                + "&\u30c8\u309b\u30aa ,\u30c8\u309b\u30fc"     // Kana TO
-
-                + "&\u30cf\u309b\u30a2 ,\u30cf\u309b\u30fc"     // Kana HA
-                + "&\u30d2\u309b\u30a4 ,\u30d2\u309b\u30fc"     // Kana HI
-                + "&\u30d5\u309b\u30a6 ,\u30d5\u309b\u30fc"     // Kana HU
-                + "&\u30d8\u309b\u30a8 ,\u30d8\u309b\u30fc"     // Kana HE
-                + "&\u30db\u309b\u30aa ,\u30db\u309b\u30fc"     // Kana HO
-
-                + "&\u30a6\u309b\u30a6 ,\u30a6\u309b\u30fc"     // Kana U
-                + "&\u30f0\u309b\u30a4 ,\u30f0\u309b\u30fc"     // Kana WI
-                + "&\u30f1\u309b\u30a8 ,\u30f1\u309b\u30fc"     // Kana WE
-                + "&\u30f2\u309b\u30aa ,\u30f2\u309b\u30fc"     // Kana WO
-
-                // And now, with semi-voice marks
-
-                + "&\u30cf\u309c\u30a2 ,\u30cf\u309c\u30fc"     // Kana HA + semi-voice = PA
-                + "&\u30d2\u309c\u30a4 ,\u30d2\u309c\u30fc"     // Kana HI
-                + "&\u30d5\u309c\u30a6 ,\u30d5\u309c\u30fc"     // Kana HU
-                + "&\u30d8\u309c\u30a8 ,\u30d8\u309c\u30fc"     // Kana HE
-                + "&\u30db\u309c\u30aa ,\u30db\u309c\u30fc"     // Kana HO
-
-                // END Handle Length mark.
-
-                + "& \u30f3" +   // RESET TO END AFTER &'s
-                " <\u3001" + // IDEOGRAPHIC COMMA,Po
-                " <\u3002" + // IDEOGRAPHIC FULL STOP,Po
-                " <\u30fb" + // Kana MIDDLE DOT,Po
-
-                " <\u3003" + // DITTO MARK,Po
-                " <\u4edd" + // [CJK Unified Ideographs],
-                " <\u3005" + // IDEOGRAPHIC ITERATION MARK,Lm
-                " <\u3006" + // IDEOGRAPHIC CLOSING MARK,Po
-                " <\u3007" + // IDEOGRAPHIC NUMBER ZERO,Nl
-                " <\u30fc" + // Kana-Gana PROLONGED SOUND MARK,Lm
-                " <\u2014" + // EM DASH,Pd
-                " <\u2010" + // HYPHEN,Pd
-                " <\u301c" + // WAVE DASH,Pd
-                " <\u2016" + // DOUBLE VERTICAL LINE,Po
-                " <\u2026" + // HORIZONTAL ELLIPSIS,Po
-                " <\u2025" + // TWO DOT LEADER,Po
-                " <\u2018" + // LEFT SINGLE QUOTATION MARK,Ps
-                " <\u2019" + // RIGHT SINGLE QUOTATION MARK,Pe
-                " <\u201c" + // LEFT DOUBLE QUOTATION MARK,Ps
-                " <\u201d" + // RIGHT DOUBLE QUOTATION MARK,Pe
-                " <\u3014" + // LEFT TORTOISE SHELL BRACKET,Ps
-                " <\u3015" + // RIGHT TORTOISE SHELL BRACKET,Pe
-                " <\u3008" + // LEFT ANGLE BRACKET,Ps
-                " <\u3009" + // RIGHT ANGLE BRACKET,Pe
-                " <\u300a" + // LEFT DOUBLE ANGLE BRACKET,Ps
-                " <\u300b" + // RIGHT DOUBLE ANGLE BRACKET,Pe
-                " <\u300c" + // LEFT CORNER BRACKET,Ps
-                " <\u300d" + // RIGHT CORNER BRACKET,Pe
-                " <\u300e" + // LEFT WHITE CORNER BRACKET,Ps
-                " <\u300f" + // RIGHT WHITE CORNER BRACKET,Pe
-                " <\u3010" + // LEFT BLACK LENTICULAR BRACKET,Ps
-                " <\u3011" + // RIGHT BLACK LENTICULAR BRACKET,Pe
-                " <\u2212" + // MINUS SIGN,Sm
-                " <\u00b1" + // PLUS-MINUS SIGN,Sm
-                " <\u00d7" + // MULTIPLICATION SIGN,Sm
-                " <\u00f7" + // DIVISION SIGN,Sm
-                " <\u2260" + // NOT EQUAL TO,Sm
-                " <\u2266" + // LESS-THAN OVER EQUAL TO,Sm
-                " <\u2267" + // GREATER-THAN OVER EQUAL TO,Sm
-                " <\u221e" + // INFINITY,Sm
-                " <\u2234" + // THEREFORE,Sm
-                " <\u2642" + // MALE SIGN,So
-                " <\u2640" + // FEMALE SIGN,So
-                " <\u00b0" + // DEGREE SIGN,So
-                " <\u2032" + // PRIME,Po
-                " <\u2033" + // DOUBLE PRIME,Po
-                " <\u2103" + // DEGREE CELSIUS,So
-                " <\u00a7" + // SECTION SIGN,So
-                " <\u2606" + // WHITE STAR,So
-                " <\u2605" + // BLACK STAR,So
-                " <\u25cb" + // WHITE CIRCLE,So
-                " <\u25cf" + // BLACK CIRCLE,So
-                " <\u25ce" + // BULLSEYE,So
-                " <\u25c7" + // WHITE DIAMOND,So
-                " <\u25c6" + // BLACK DIAMOND,So
-                " <\u25a1" + // WHITE SQUARE,So
-                " <\u25a0" + // BLACK SQUARE,So
-                " <\u25b3" + // WHITE UP-POINTING TRIANGLE,So
-                " <\u25b2" + // BLACK UP-POINTING TRIANGLE,So
-                " <\u25bd" + // WHITE DOWN-POINTING TRIANGLE,So
-                " <\u25bc" + // BLACK DOWN-POINTING TRIANGLE,So
-                " <\u203b" + // REFERENCE MARK,Po
-                " <\u3012" + // POSTAL MARK,So
-                " <\u2192" + // RIGHTWARDS ARROW,Sm
-                " <\u2190" + // LEFTWARDS ARROW,Sm
-                " <\u2191" + // UPWARDS ARROW,Sm
-                " <\u2193" + // DOWNWARDS ARROW,Sm
-                " <\u3013" + // GETA MARK,So
-                " <\u2208" + // ELEMENT OF,Sm
-                " <\u220b" + // CONTAINS AS MEMBER,Sm
-                " <\u2286" + // SUBSET OF OR EQUAL TO,Sm
-                " <\u2287" + // SUPERSET OF OR EQUAL TO,Sm
-                " <\u2282" + // SUBSET OF,Sm
-                " <\u2283" + // SUPERSET OF,Sm
-                " <\u222a" + // UNION,Sm
-                " <\u2229" + // INTERSECTION,Sm
-                " <\u2227" + // LOGICAL AND,Sm
-                " <\u2228" + // LOGICAL OR,Sm
-                " <\u00ac" + // FULLWIDTH NOT SIGN,Sm
-                " <\u21d2" + // RIGHTWARDS DOUBLE ARROW,Sm
-                " <\u21d4" + // LEFT RIGHT DOUBLE ARROW,Sm
-                " <\u2200" + // FOR ALL,Sm
-                " <\u2203" + // THERE EXISTS,Sm
-                " <\u2220" + // ANGLE,Sm
-                " <\u22a5" + // UP TACK,Sm
-                " <\u2312" + // ARC,So
-                " <\u2202" + // PARTIAL DIFFERENTIAL,Sm
-                " <\u2207" + // NABLA,Sm
-                " <\u2261" + // IDENTICAL TO,Sm
-                " <\u2252" + // APPROXIMATELY EQUAL TO OR THE IMAGE OF,Sm
-                " <\u226a" + // MUCH LESS-THAN,Sm
-                " <\u226b" + // MUCH GREATER-THAN,Sm
-                " <\u221a" + // SQUARE ROOT,Sm
-                " <\u223d" + // REVERSED TILDE,Sm
-                " <\u221d" + // PROPORTIONAL TO,Sm
-                " <\u2235" + // BECAUSE,Sm
-                " <\u222b" + // INTEGRAL,Sm
-                " <\u222c" + // DOUBLE INTEGRAL,Sm
-                " <\u212b" + // ANGSTROM SIGN,Lu
-                " <\u2030" + // PER MILLE SIGN,Po
-                " <\u266f" + // MUSIC SHARP SIGN,So
-                " <\u266d" + // MUSIC FLAT SIGN,So
-                " <\u266a" + // EIGHTH NOTE,So
-                " <\u2020" + // DAGGER,Po
-                " <\u2021" + // DOUBLE DAGGER,Po
-                " <\u00b6" + // PILCROW SIGN,So
-                " <\u25ef" + // LARGE CIRCLE,So
-
-                " <\u03b1" + // GREEK SMALL LETTER ALPHA,Ll
-                " ,\u0391" + // GREEK CAPITAL LETTER ALPHA,Lu
-                " <\u03b2" + // GREEK SMALL LETTER BETA,Ll
-                " ,\u0392" + // GREEK CAPITAL LETTER BETA,Lu
-                " <\u03b3" + // GREEK SMALL LETTER GAMMA,Ll
-                " ,\u0393" + // GREEK CAPITAL LETTER GAMMA,Lu
-                " <\u03b4" + // GREEK SMALL LETTER DELTA,Ll
-                " ,\u0394" + // GREEK CAPITAL LETTER DELTA,Lu
-                " <\u03b5" + // GREEK SMALL LETTER EPSILON,Ll
-                " ,\u0395" + // GREEK CAPITAL LETTER EPSILON,Lu
-                " <\u03b6" + // GREEK SMALL LETTER ZETA,Ll
-                " ,\u0396" + // GREEK CAPITAL LETTER ZETA,Lu
-                " <\u03b7" + // GREEK SMALL LETTER ETA,Ll
-                " ,\u0397" + // GREEK CAPITAL LETTER ETA,Lu
-                " <\u03b8" + // GREEK SMALL LETTER THETA,Ll
-                " ,\u0398" + // GREEK CAPITAL LETTER THETA,Lu
-                " <\u03b9" + // GREEK SMALL LETTER IOTA,Ll
-                " ,\u0399" + // GREEK CAPITAL LETTER IOTA,Lu
-                " <\u03ba" + // GREEK SMALL LETTER KAPPA,Ll
-                " ,\u039a" + // GREEK CAPITAL LETTER KAPPA,Lu
-                " <\u03bb" + // GREEK SMALL LETTER LAMDA,Ll
-                " ,\u039b" + // GREEK CAPITAL LETTER LAMDA,Lu
-                " <\u03bc" + // GREEK SMALL LETTER MU,Ll
-                " ,\u039c" + // GREEK CAPITAL LETTER MU,Lu
-                " <\u03bd" + // GREEK SMALL LETTER NU,Ll
-                " ,\u039d" + // GREEK CAPITAL LETTER NU,Lu
-                " <\u03be" + // GREEK SMALL LETTER XI,Ll
-                " ,\u039e" + // GREEK CAPITAL LETTER XI,Lu
-                " <\u03bf" + // GREEK SMALL LETTER OMICRON,Ll
-                " ,\u039f" + // GREEK CAPITAL LETTER OMICRON,Lu
-                " <\u03c0" + // GREEK SMALL LETTER PI,Ll
-                " ,\u03a0" + // GREEK CAPITAL LETTER PI,Lu
-                " <\u03c1" + // GREEK SMALL LETTER RHO,Ll
-                " ,\u03a1" + // GREEK CAPITAL LETTER RHO,Lu
-                " <\u03c3" + // GREEK SMALL LETTER SIGMA,Ll
-                " ,\u03a3" + // GREEK CAPITAL LETTER SIGMA,Lu
-                " <\u03c4" + // GREEK SMALL LETTER TAU,Ll
-                " ,\u03a4" + // GREEK CAPITAL LETTER TAU,Lu
-                " <\u03c5" + // GREEK SMALL LETTER UPSILON,Ll
-                " ,\u03a5" + // GREEK CAPITAL LETTER UPSILON,Lu
-                " <\u03c6" + // GREEK SMALL LETTER PHI,Ll
-                " ,\u03a6" + // GREEK CAPITAL LETTER PHI,Lu
-                " <\u03c7" + // GREEK SMALL LETTER CHI,Ll
-                " ,\u03a7" + // GREEK CAPITAL LETTER CHI,Lu
-                " <\u03c8" + // GREEK SMALL LETTER PSI,Ll
-                " ,\u03a8" + // GREEK CAPITAL LETTER PSI,Lu
-                " <\u03c9" + // GREEK SMALL LETTER OMEGA,Ll
-                " ,\u03a9" + // GREEK CAPITAL LETTER OMEGA,Lu
-
-
-                " <\u0430" + // CYRILLIC SMALL LETTER A,Ll
-                " ,\u0410" + // CYRILLIC CAPITAL LETTER A,Lu
-                " <\u0431" + // CYRILLIC SMALL LETTER BE,Ll
-                " ,\u0411" + // CYRILLIC CAPITAL LETTER BE,Lu
-                " <\u0432" + // CYRILLIC SMALL LETTER VE,Ll
-                " ,\u0412" + // CYRILLIC CAPITAL LETTER VE,Lu
-                " <\u0433" + // CYRILLIC SMALL LETTER GHE,Ll
-                " ,\u0413" + // CYRILLIC CAPITAL LETTER GHE,Lu
-                " <\u0434" + // CYRILLIC SMALL LETTER DE,Ll
-                " ,\u0414" + // CYRILLIC CAPITAL LETTER DE,Lu
-                " <\u0435" + // CYRILLIC SMALL LETTER IE,Ll
-                " ,\u0415" + // CYRILLIC CAPITAL LETTER IE,Lu
-                " <\u0451" + // CYRILLIC SMALL LETTER IO,Ll
-                " ,\u0401" + // CYRILLIC CAPITAL LETTER IO,Lu
-                " <\u0436" + // CYRILLIC SMALL LETTER ZHE,Ll
-                " ,\u0416" + // CYRILLIC CAPITAL LETTER ZHE,Lu
-                " <\u0437" + // CYRILLIC SMALL LETTER ZE,Ll
-                " ,\u0417" + // CYRILLIC CAPITAL LETTER ZE,Lu
-                " <\u0438" + // CYRILLIC SMALL LETTER I,Ll
-                " ,\u0418" + // CYRILLIC CAPITAL LETTER I,Lu
-                " <\u0439" + // CYRILLIC SMALL LETTER SHORT I,Ll
-                " ,\u0419" + // CYRILLIC CAPITAL LETTER SHORT I,Lu
-                " <\u043a" + // CYRILLIC SMALL LETTER KA,Ll
-                " ,\u041a" + // CYRILLIC CAPITAL LETTER KA,Lu
-                " <\u043b" + // CYRILLIC SMALL LETTER EL,Ll
-                " ,\u041b" + // CYRILLIC CAPITAL LETTER EL,Lu
-                " <\u043c" + // CYRILLIC SMALL LETTER EM,Ll
-                " ,\u041c" + // CYRILLIC CAPITAL LETTER EM,Lu
-                " <\u043d" + // CYRILLIC SMALL LETTER EN,Ll
-                " ,\u041d" + // CYRILLIC CAPITAL LETTER EN,Lu
-                " <\u043e" + // CYRILLIC SMALL LETTER O,Ll
-                " ,\u041e" + // CYRILLIC CAPITAL LETTER O,Lu
-                " <\u043f" + // CYRILLIC SMALL LETTER PE,Ll
-                " ,\u041f" + // CYRILLIC CAPITAL LETTER PE,Lu
-                " <\u0440" + // CYRILLIC SMALL LETTER ER,Ll
-                " ,\u0420" + // CYRILLIC CAPITAL LETTER ER,Lu
-                " <\u0441" + // CYRILLIC SMALL LETTER ES,Ll
-                " ,\u0421" + // CYRILLIC CAPITAL LETTER ES,Lu
-                " <\u0442" + // CYRILLIC SMALL LETTER TE,Ll
-                " ,\u0422" + // CYRILLIC CAPITAL LETTER TE,Lu
-                " <\u0443" + // CYRILLIC SMALL LETTER U,Ll
-                " ,\u0423" + // CYRILLIC CAPITAL LETTER U,Lu
-                " <\u0444" + // CYRILLIC SMALL LETTER EF,Ll
-                " ,\u0424" + // CYRILLIC CAPITAL LETTER EF,Lu
-                " <\u0445" + // CYRILLIC SMALL LETTER HA,Ll
-                " ,\u0425" + // CYRILLIC CAPITAL LETTER HA,Lu
-                " <\u0446" + // CYRILLIC SMALL LETTER TSE,Ll
-                " ,\u0426" + // CYRILLIC CAPITAL LETTER TSE,Lu
-                " <\u0447" + // CYRILLIC SMALL LETTER CHE,Ll
-                " ,\u0427" + // CYRILLIC CAPITAL LETTER CHE,Lu
-                " <\u0448" + // CYRILLIC SMALL LETTER SHA,Ll
-                " ,\u0428" + // CYRILLIC CAPITAL LETTER SHA,Lu
-                " <\u0449" + // CYRILLIC SMALL LETTER SHCHA,Ll
-                " ,\u0429" + // CYRILLIC CAPITAL LETTER SHCHA,Lu
-                " <\u044a" + // CYRILLIC SMALL LETTER HARD SIGN,Ll
-                " ,\u042a" + // CYRILLIC CAPITAL LETTER HARD SIGN,Lu
-                " <\u044b" + // CYRILLIC SMALL LETTER YERU,Ll
-                " ,\u042b" + // CYRILLIC CAPITAL LETTER YERU,Lu
-                " <\u044c" + // CYRILLIC SMALL LETTER SOFT SIGN,Ll
-                " ,\u042c" + // CYRILLIC CAPITAL LETTER SOFT SIGN,Lu
-                " <\u044d" + // CYRILLIC SMALL LETTER E,Ll
-                " ,\u042d" + // CYRILLIC CAPITAL LETTER E,Lu
-                " <\u044e" + // CYRILLIC SMALL LETTER YU,Ll
-                " ,\u042e" + // CYRILLIC CAPITAL LETTER YU,Lu
-                " <\u044f" + // CYRILLIC SMALL LETTER YA,Ll
-                " ,\u042f" + // CYRILLIC CAPITAL LETTER YA,Lu
-
-
-                " <\u2500" + // BOX DRAWINGS LIGHT HORIZONTAL,So
-                " <\u2502" + // BOX DRAWINGS LIGHT VERTICAL,So
-                " <\u250c" + // BOX DRAWINGS LIGHT DOWN AND RIGHT,So
-                " <\u2510" + // BOX DRAWINGS LIGHT DOWN AND LEFT,So
-                " <\u2518" + // BOX DRAWINGS LIGHT UP AND LEFT,So
-                " <\u2514" + // BOX DRAWINGS LIGHT UP AND RIGHT,So
-                " <\u251c" + // BOX DRAWINGS LIGHT VERTICAL AND RIGHT,So
-                " <\u252c" + // BOX DRAWINGS LIGHT DOWN AND HORIZONTAL,So
-                " <\u2524" + // BOX DRAWINGS LIGHT VERTICAL AND LEFT,So
-                " <\u2534" + // BOX DRAWINGS LIGHT UP AND HORIZONTAL,So
-                " <\u253c" + // BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL,So
-                " <\u2501" + // BOX DRAWINGS HEAVY HORIZONTAL,So
-                " <\u2503" + // BOX DRAWINGS HEAVY VERTICAL,So
-                " <\u250f" + // BOX DRAWINGS HEAVY DOWN AND RIGHT,So
-                " <\u2513" + // BOX DRAWINGS HEAVY DOWN AND LEFT,So
-                " <\u251b" + // BOX DRAWINGS HEAVY UP AND LEFT,So
-                " <\u2517" + // BOX DRAWINGS HEAVY UP AND RIGHT,So
-                " <\u2523" + // BOX DRAWINGS HEAVY VERTICAL AND RIGHT,So
-                " <\u2533" + // BOX DRAWINGS HEAVY DOWN AND HORIZONTAL,So
-                " <\u252b" + // BOX DRAWINGS HEAVY VERTICAL AND LEFT,So
-                " <\u253b" + // BOX DRAWINGS HEAVY UP AND HORIZONTAL,So
-                " <\u254b" + // BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL,So
-                " <\u2520" + // BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT,So
-                " <\u252f" + // BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY,So
-                " <\u2528" + // BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT,So
-                " <\u2537" + // BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY,So
-                " <\u253f" + // BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY,So
-                " <\u251d" + // BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY,So
-                " <\u2530" + // BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT,So
-                " <\u2525" + // BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY,So
-                " <\u2538" + // BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT,So
-                " <\u2542" + // BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT,So
-
-                // JIS0208 Ideographs are in JIS order.
-                "<\u4e9c<\u5516<\u5a03<\u963f<\u54c0" +
-                "<\u611b<\u6328<\u59f6<\u9022<\u8475<\u831c<\u7a50<\u60aa" +
-                "<\u63e1<\u6e25<\u65ed<\u8466<\u82a6<\u9bf5<\u6893<\u5727" +
-                "<\u65a1<\u6271<\u5b9b<\u59d0<\u867b<\u98f4<\u7d62<\u7dbe" +
-                "<\u9b8e<\u6216<\u7c9f<\u88b7<\u5b89<\u5eb5<\u6309<\u6697" +
-                "<\u6848<\u95c7<\u978d<\u674f<\u4ee5<\u4f0a<\u4f4d<\u4f9d" +
-                "<\u5049<\u56f2<\u5937<\u59d4<\u5a01<\u5c09<\u60df<\u610f" +
-                "<\u6170<\u6613<\u6905<\u70ba<\u754f<\u7570<\u79fb<\u7dad" +
-                "<\u7def<\u80c3<\u840e<\u8863<\u8b02<\u9055<\u907a<\u533b" +
-                "<\u4e95<\u4ea5<\u57df<\u80b2<\u90c1<\u78ef<\u4e00<\u58f1" +
-                "<\u6ea2<\u9038<\u7a32<\u8328<\u828b<\u9c2f<\u5141<\u5370" +
-                "<\u54bd<\u54e1<\u56e0<\u59fb<\u5f15<\u98f2<\u6deb<\u80e4" +
-                "<\u852d<\u9662<\u9670<\u96a0<\u97fb<\u540b<\u53f3<\u5b87" +
-                "<\u70cf<\u7fbd<\u8fc2<\u96e8<\u536f<\u9d5c<\u7aba<\u4e11" +
-                "<\u7893<\u81fc<\u6e26<\u5618<\u5504<\u6b1d<\u851a<\u9c3b" +
-                "<\u59e5<\u53a9<\u6d66<\u74dc<\u958f<\u5642<\u4e91<\u904b" +
-                "<\u96f2<\u834f<\u990c<\u53e1<\u55b6<\u5b30<\u5f71<\u6620" +
-                "<\u66f3<\u6804<\u6c38<\u6cf3<\u6d29<\u745b<\u76c8<\u7a4e" +
-                "<\u9834<\u82f1<\u885b<\u8a60<\u92ed<\u6db2<\u75ab<\u76ca" +
-                "<\u99c5<\u60a6<\u8b01<\u8d8a<\u95b2<\u698e<\u53ad<\u5186" +
-                "<\u5712<\u5830<\u5944<\u5bb4<\u5ef6<\u6028<\u63a9<\u63f4" +
-                "<\u6cbf<\u6f14<\u708e<\u7114<\u7159<\u71d5<\u733f<\u7e01" +
-                "<\u8276<\u82d1<\u8597<\u9060<\u925b<\u9d1b<\u5869<\u65bc" +
-                "<\u6c5a<\u7525<\u51f9<\u592e<\u5965<\u5f80<\u5fdc<\u62bc" +
-                "<\u65fa<\u6a2a<\u6b27<\u6bb4<\u738b<\u7fc1<\u8956<\u9d2c" +
-                "<\u9d0e<\u9ec4<\u5ca1<\u6c96<\u837b<\u5104<\u5c4b<\u61b6" +
-                "<\u81c6<\u6876<\u7261<\u4e59<\u4ffa<\u5378<\u6069<\u6e29" +
-                "<\u7a4f<\u97f3<\u4e0b<\u5316<\u4eee<\u4f55<\u4f3d<\u4fa1" +
-                "<\u4f73<\u52a0<\u53ef<\u5609<\u590f<\u5ac1<\u5bb6<\u5be1" +
-                "<\u79d1<\u6687<\u679c<\u67b6<\u6b4c<\u6cb3<\u706b<\u73c2" +
-                "<\u798d<\u79be<\u7a3c<\u7b87<\u82b1<\u82db<\u8304<\u8377" +
-                "<\u83ef<\u83d3<\u8766<\u8ab2<\u5629<\u8ca8<\u8fe6<\u904e" +
-                "<\u971e<\u868a<\u4fc4<\u5ce8<\u6211<\u7259<\u753b<\u81e5" +
-                "<\u82bd<\u86fe<\u8cc0<\u96c5<\u9913<\u99d5<\u4ecb<\u4f1a" +
-                "<\u89e3<\u56de<\u584a<\u58ca<\u5efb<\u5feb<\u602a<\u6094" +
-                "<\u6062<\u61d0<\u6212<\u62d0<\u6539<\u9b41<\u6666<\u68b0" +
-                "<\u6d77<\u7070<\u754c<\u7686<\u7d75<\u82a5<\u87f9<\u958b" +
-                "<\u968e<\u8c9d<\u51f1<\u52be<\u5916<\u54b3<\u5bb3<\u5d16" +
-                "<\u6168<\u6982<\u6daf<\u788d<\u84cb<\u8857<\u8a72<\u93a7" +
-                "<\u9ab8<\u6d6c<\u99a8<\u86d9<\u57a3<\u67ff<\u86ce<\u920e" +
-                "<\u5283<\u5687<\u5404<\u5ed3<\u62e1<\u64b9<\u683c<\u6838" +
-                "<\u6bbb<\u7372<\u78ba<\u7a6b<\u899a<\u89d2<\u8d6b<\u8f03" +
-                "<\u90ed<\u95a3<\u9694<\u9769<\u5b66<\u5cb3<\u697d<\u984d" +
-                "<\u984e<\u639b<\u7b20<\u6a2b<\u6a7f<\u68b6<\u9c0d<\u6f5f" +
-                "<\u5272<\u559d<\u6070<\u62ec<\u6d3b<\u6e07<\u6ed1<\u845b" +
-                "<\u8910<\u8f44<\u4e14<\u9c39<\u53f6<\u691b<\u6a3a<\u9784" +
-                "<\u682a<\u515c<\u7ac3<\u84b2<\u91dc<\u938c<\u565b<\u9d28" +
-                "<\u6822<\u8305<\u8431<\u7ca5<\u5208<\u82c5<\u74e6<\u4e7e" +
-                "<\u4f83<\u51a0<\u5bd2<\u520a<\u52d8<\u52e7<\u5dfb<\u559a" +
-                "<\u582a<\u59e6<\u5b8c<\u5b98<\u5bdb<\u5e72<\u5e79<\u60a3" +
-                "<\u611f<\u6163<\u61be<\u63db<\u6562<\u67d1<\u6853<\u68fa" +
-                "<\u6b3e<\u6b53<\u6c57<\u6f22<\u6f97<\u6f45<\u74b0<\u7518" +
-                "<\u76e3<\u770b<\u7aff<\u7ba1<\u7c21<\u7de9<\u7f36<\u7ff0" +
-                "<\u809d<\u8266<\u839e<\u89b3<\u8acc<\u8cab<\u9084<\u9451" +
-                "<\u9593<\u9591<\u95a2<\u9665<\u97d3<\u9928<\u8218<\u4e38" +
-                "<\u542b<\u5cb8<\u5dcc<\u73a9<\u764c<\u773c<\u5ca9<\u7feb" +
-                "<\u8d0b<\u96c1<\u9811<\u9854<\u9858<\u4f01<\u4f0e<\u5371" +
-                "<\u559c<\u5668<\u57fa<\u5947<\u5b09<\u5bc4<\u5c90<\u5e0c" +
-                "<\u5e7e<\u5fcc<\u63ee<\u673a<\u65d7<\u65e2<\u671f<\u68cb" +
-                "<\u68c4<\u6a5f<\u5e30<\u6bc5<\u6c17<\u6c7d<\u757f<\u7948" +
-                "<\u5b63<\u7a00<\u7d00<\u5fbd<\u898f<\u8a18<\u8cb4<\u8d77" +
-                "<\u8ecc<\u8f1d<\u98e2<\u9a0e<\u9b3c<\u4e80<\u507d<\u5100" +
-                "<\u5993<\u5b9c<\u622f<\u6280<\u64ec<\u6b3a<\u72a0<\u7591" +
-                "<\u7947<\u7fa9<\u87fb<\u8abc<\u8b70<\u63ac<\u83ca<\u97a0" +
-                "<\u5409<\u5403<\u55ab<\u6854<\u6a58<\u8a70<\u7827<\u6775" +
-                "<\u9ecd<\u5374<\u5ba2<\u811a<\u8650<\u9006<\u4e18<\u4e45" +
-                "<\u4ec7<\u4f11<\u53ca<\u5438<\u5bae<\u5f13<\u6025<\u6551" +
-                "<\u673d<\u6c42<\u6c72<\u6ce3<\u7078<\u7403<\u7a76<\u7aae" +
-                "<\u7b08<\u7d1a<\u7cfe<\u7d66<\u65e7<\u725b<\u53bb<\u5c45" +
-                "<\u5de8<\u62d2<\u62e0<\u6319<\u6e20<\u865a<\u8a31<\u8ddd" +
-                "<\u92f8<\u6f01<\u79a6<\u9b5a<\u4ea8<\u4eab<\u4eac<\u4f9b" +
-                "<\u4fa0<\u50d1<\u5147<\u7af6<\u5171<\u51f6<\u5354<\u5321" +
-                "<\u537f<\u53eb<\u55ac<\u5883<\u5ce1<\u5f37<\u5f4a<\u602f" +
-                "<\u6050<\u606d<\u631f<\u6559<\u6a4b<\u6cc1<\u72c2<\u72ed" +
-                "<\u77ef<\u80f8<\u8105<\u8208<\u854e<\u90f7<\u93e1<\u97ff" +
-                "<\u9957<\u9a5a<\u4ef0<\u51dd<\u5c2d<\u6681<\u696d<\u5c40" +
-                "<\u66f2<\u6975<\u7389<\u6850<\u7c81<\u50c5<\u52e4<\u5747" +
-                "<\u5dfe<\u9326<\u65a4<\u6b23<\u6b3d<\u7434<\u7981<\u79bd" +
-                "<\u7b4b<\u7dca<\u82b9<\u83cc<\u887f<\u895f<\u8b39<\u8fd1" +
-                "<\u91d1<\u541f<\u9280<\u4e5d<\u5036<\u53e5<\u533a<\u72d7" +
-                "<\u7396<\u77e9<\u82e6<\u8eaf<\u99c6<\u99c8<\u99d2<\u5177" +
-                "<\u611a<\u865e<\u55b0<\u7a7a<\u5076<\u5bd3<\u9047<\u9685" +
-                "<\u4e32<\u6adb<\u91e7<\u5c51<\u5c48<\u6398<\u7a9f<\u6c93" +
-                "<\u9774<\u8f61<\u7aaa<\u718a<\u9688<\u7c82<\u6817<\u7e70" +
-                "<\u6851<\u936c<\u52f2<\u541b<\u85ab<\u8a13<\u7fa4<\u8ecd" +
-                "<\u90e1<\u5366<\u8888<\u7941<\u4fc2<\u50be<\u5211<\u5144" +
-                "<\u5553<\u572d<\u73ea<\u578b<\u5951<\u5f62<\u5f84<\u6075" +
-                "<\u6176<\u6167<\u61a9<\u63b2<\u643a<\u656c<\u666f<\u6842" +
-                "<\u6e13<\u7566<\u7a3d<\u7cfb<\u7d4c<\u7d99<\u7e4b<\u7f6b" +
-                "<\u830e<\u834a<\u86cd<\u8a08<\u8a63<\u8b66<\u8efd<\u981a" +
-                "<\u9d8f<\u82b8<\u8fce<\u9be8<\u5287<\u621f<\u6483<\u6fc0" +
-                "<\u9699<\u6841<\u5091<\u6b20<\u6c7a<\u6f54<\u7a74<\u7d50" +
-                "<\u8840<\u8a23<\u6708<\u4ef6<\u5039<\u5026<\u5065<\u517c" +
-                "<\u5238<\u5263<\u55a7<\u570f<\u5805<\u5acc<\u5efa<\u61b2" +
-                "<\u61f8<\u62f3<\u6372<\u691c<\u6a29<\u727d<\u72ac<\u732e" +
-                "<\u7814<\u786f<\u7d79<\u770c<\u80a9<\u898b<\u8b19<\u8ce2" +
-                "<\u8ed2<\u9063<\u9375<\u967a<\u9855<\u9a13<\u9e78<\u5143" +
-                "<\u539f<\u53b3<\u5e7b<\u5f26<\u6e1b<\u6e90<\u7384<\u73fe" +
-                "<\u7d43<\u8237<\u8a00<\u8afa<\u9650<\u4e4e<\u500b<\u53e4" +
-                "<\u547c<\u56fa<\u59d1<\u5b64<\u5df1<\u5eab<\u5f27<\u6238" +
-                "<\u6545<\u67af<\u6e56<\u72d0<\u7cca<\u88b4<\u80a1<\u80e1" +
-                "<\u83f0<\u864e<\u8a87<\u8de8<\u9237<\u96c7<\u9867<\u9f13" +
-                "<\u4e94<\u4e92<\u4f0d<\u5348<\u5449<\u543e<\u5a2f<\u5f8c" +
-                "<\u5fa1<\u609f<\u68a7<\u6a8e<\u745a<\u7881<\u8a9e<\u8aa4" +
-                "<\u8b77<\u9190<\u4e5e<\u9bc9<\u4ea4<\u4f7c<\u4faf<\u5019" +
-                "<\u5016<\u5149<\u516c<\u529f<\u52b9<\u52fe<\u539a<\u53e3" +
-                "<\u5411<\u540e<\u5589<\u5751<\u57a2<\u597d<\u5b54<\u5b5d" +
-                "<\u5b8f<\u5de5<\u5de7<\u5df7<\u5e78<\u5e83<\u5e9a<\u5eb7" +
-                "<\u5f18<\u6052<\u614c<\u6297<\u62d8<\u63a7<\u653b<\u6602" +
-                "<\u6643<\u66f4<\u676d<\u6821<\u6897<\u69cb<\u6c5f<\u6d2a" +
-                "<\u6d69<\u6e2f<\u6e9d<\u7532<\u7687<\u786c<\u7a3f<\u7ce0" +
-                "<\u7d05<\u7d18<\u7d5e<\u7db1<\u8015<\u8003<\u80af<\u80b1" +
-                "<\u8154<\u818f<\u822a<\u8352<\u884c<\u8861<\u8b1b<\u8ca2" +
-                "<\u8cfc<\u90ca<\u9175<\u9271<\u783f<\u92fc<\u95a4<\u964d" +
-                "<\u9805<\u9999<\u9ad8<\u9d3b<\u525b<\u52ab<\u53f7<\u5408" +
-                "<\u58d5<\u62f7<\u6fe0<\u8c6a<\u8f5f<\u9eb9<\u514b<\u523b" +
-                "<\u544a<\u56fd<\u7a40<\u9177<\u9d60<\u9ed2<\u7344<\u6f09" +
-                "<\u8170<\u7511<\u5ffd<\u60da<\u9aa8<\u72db<\u8fbc<\u6b64" +
-                "<\u9803<\u4eca<\u56f0<\u5764<\u58be<\u5a5a<\u6068<\u61c7" +
-                "<\u660f<\u6606<\u6839<\u68b1<\u6df7<\u75d5<\u7d3a<\u826e" +
-                "<\u9b42<\u4e9b<\u4f50<\u53c9<\u5506<\u5d6f<\u5de6<\u5dee" +
-                "<\u67fb<\u6c99<\u7473<\u7802<\u8a50<\u9396<\u88df<\u5750" +
-                "<\u5ea7<\u632b<\u50b5<\u50ac<\u518d<\u6700<\u54c9<\u585e" +
-                "<\u59bb<\u5bb0<\u5f69<\u624d<\u63a1<\u683d<\u6b73<\u6e08" +
-                "<\u707d<\u91c7<\u7280<\u7815<\u7826<\u796d<\u658e<\u7d30" +
-                "<\u83dc<\u88c1<\u8f09<\u969b<\u5264<\u5728<\u6750<\u7f6a" +
-                "<\u8ca1<\u51b4<\u5742<\u962a<\u583a<\u698a<\u80b4<\u54b2" +
-                "<\u5d0e<\u57fc<\u7895<\u9dfa<\u4f5c<\u524a<\u548b<\u643e" +
-                "<\u6628<\u6714<\u67f5<\u7a84<\u7b56<\u7d22<\u932f<\u685c" +
-                "<\u9bad<\u7b39<\u5319<\u518a<\u5237<\u5bdf<\u62f6<\u64ae" +
-                "<\u64e6<\u672d<\u6bba<\u85a9<\u96d1<\u7690<\u9bd6<\u634c" +
-                "<\u9306<\u9bab<\u76bf<\u6652<\u4e09<\u5098<\u53c2<\u5c71" +
-                "<\u60e8<\u6492<\u6563<\u685f<\u71e6<\u73ca<\u7523<\u7b97" +
-                "<\u7e82<\u8695<\u8b83<\u8cdb<\u9178<\u9910<\u65ac<\u66ab" +
-                "<\u6b8b<\u4ed5<\u4ed4<\u4f3a<\u4f7f<\u523a<\u53f8<\u53f2" +
-                "<\u55e3<\u56db<\u58eb<\u59cb<\u59c9<\u59ff<\u5b50<\u5c4d" +
-                "<\u5e02<\u5e2b<\u5fd7<\u601d<\u6307<\u652f<\u5b5c<\u65af" +
-                "<\u65bd<\u65e8<\u679d<\u6b62<\u6b7b<\u6c0f<\u7345<\u7949" +
-                "<\u79c1<\u7cf8<\u7d19<\u7d2b<\u80a2<\u8102<\u81f3<\u8996" +
-                "<\u8a5e<\u8a69<\u8a66<\u8a8c<\u8aee<\u8cc7<\u8cdc<\u96cc" +
-                "<\u98fc<\u6b6f<\u4e8b<\u4f3c<\u4f8d<\u5150<\u5b57<\u5bfa" +
-                "<\u6148<\u6301<\u6642<\u6b21<\u6ecb<\u6cbb<\u723e<\u74bd" +
-                "<\u75d4<\u78c1<\u793a<\u800c<\u8033<\u81ea<\u8494<\u8f9e" +
-                "<\u6c50<\u9e7f<\u5f0f<\u8b58<\u9d2b<\u7afa<\u8ef8<\u5b8d" +
-                "<\u96eb<\u4e03<\u53f1<\u57f7<\u5931<\u5ac9<\u5ba4<\u6089" +
-                "<\u6e7f<\u6f06<\u75be<\u8cea<\u5b9f<\u8500<\u7be0<\u5072" +
-                "<\u67f4<\u829d<\u5c61<\u854a<\u7e1e<\u820e<\u5199<\u5c04" +
-                "<\u6368<\u8d66<\u659c<\u716e<\u793e<\u7d17<\u8005<\u8b1d" +
-                "<\u8eca<\u906e<\u86c7<\u90aa<\u501f<\u52fa<\u5c3a<\u6753" +
-                "<\u707c<\u7235<\u914c<\u91c8<\u932b<\u82e5<\u5bc2<\u5f31" +
-                "<\u60f9<\u4e3b<\u53d6<\u5b88<\u624b<\u6731<\u6b8a<\u72e9" +
-                "<\u73e0<\u7a2e<\u816b<\u8da3<\u9152<\u9996<\u5112<\u53d7" +
-                "<\u546a<\u5bff<\u6388<\u6a39<\u7dac<\u9700<\u56da<\u53ce" +
-                "<\u5468<\u5b97<\u5c31<\u5dde<\u4fee<\u6101<\u62fe<\u6d32" +
-                "<\u79c0<\u79cb<\u7d42<\u7e4d<\u7fd2<\u81ed<\u821f<\u8490" +
-                "<\u8846<\u8972<\u8b90<\u8e74<\u8f2f<\u9031<\u914b<\u916c" +
-                "<\u96c6<\u919c<\u4ec0<\u4f4f<\u5145<\u5341<\u5f93<\u620e" +
-                "<\u67d4<\u6c41<\u6e0b<\u7363<\u7e26<\u91cd<\u9283<\u53d4" +
-                "<\u5919<\u5bbf<\u6dd1<\u795d<\u7e2e<\u7c9b<\u587e<\u719f" +
-                "<\u51fa<\u8853<\u8ff0<\u4fca<\u5cfb<\u6625<\u77ac<\u7ae3" +
-                "<\u821c<\u99ff<\u51c6<\u5faa<\u65ec<\u696f<\u6b89<\u6df3" +
-                "<\u6e96<\u6f64<\u76fe<\u7d14<\u5de1<\u9075<\u9187<\u9806" +
-                "<\u51e6<\u521d<\u6240<\u6691<\u66d9<\u6e1a<\u5eb6<\u7dd2" +
-                "<\u7f72<\u66f8<\u85af<\u85f7<\u8af8<\u52a9<\u53d9<\u5973" +
-                "<\u5e8f<\u5f90<\u6055<\u92e4<\u9664<\u50b7<\u511f<\u52dd" +
-                "<\u5320<\u5347<\u53ec<\u54e8<\u5546<\u5531<\u5617<\u5968" +
-                "<\u59be<\u5a3c<\u5bb5<\u5c06<\u5c0f<\u5c11<\u5c1a<\u5e84" +
-                "<\u5e8a<\u5ee0<\u5f70<\u627f<\u6284<\u62db<\u638c<\u6377" +
-                "<\u6607<\u660c<\u662d<\u6676<\u677e<\u68a2<\u6a1f<\u6a35" +
-                "<\u6cbc<\u6d88<\u6e09<\u6e58<\u713c<\u7126<\u7167<\u75c7" +
-                "<\u7701<\u785d<\u7901<\u7965<\u79f0<\u7ae0<\u7b11<\u7ca7" +
-                "<\u7d39<\u8096<\u83d6<\u848b<\u8549<\u885d<\u88f3<\u8a1f" +
-                "<\u8a3c<\u8a54<\u8a73<\u8c61<\u8cde<\u91a4<\u9266<\u937e" +
-                "<\u9418<\u969c<\u9798<\u4e0a<\u4e08<\u4e1e<\u4e57<\u5197" +
-                "<\u5270<\u57ce<\u5834<\u58cc<\u5b22<\u5e38<\u60c5<\u64fe" +
-                "<\u6761<\u6756<\u6d44<\u72b6<\u7573<\u7a63<\u84b8<\u8b72" +
-                "<\u91b8<\u9320<\u5631<\u57f4<\u98fe<\u62ed<\u690d<\u6b96" +
-                "<\u71ed<\u7e54<\u8077<\u8272<\u89e6<\u98df<\u8755<\u8fb1" +
-                "<\u5c3b<\u4f38<\u4fe1<\u4fb5<\u5507<\u5a20<\u5bdd<\u5be9" +
-                "<\u5fc3<\u614e<\u632f<\u65b0<\u664b<\u68ee<\u699b<\u6d78" +
-                "<\u6df1<\u7533<\u75b9<\u771f<\u795e<\u79e6<\u7d33<\u81e3" +
-                "<\u82af<\u85aa<\u89aa<\u8a3a<\u8eab<\u8f9b<\u9032<\u91dd" +
-                "<\u9707<\u4eba<\u4ec1<\u5203<\u5875<\u58ec<\u5c0b<\u751a" +
-                "<\u5c3d<\u814e<\u8a0a<\u8fc5<\u9663<\u976d<\u7b25<\u8acf" +
-                "<\u9808<\u9162<\u56f3<\u53a8<\u9017<\u5439<\u5782<\u5e25" +
-                "<\u63a8<\u6c34<\u708a<\u7761<\u7c8b<\u7fe0<\u8870<\u9042" +
-                "<\u9154<\u9310<\u9318<\u968f<\u745e<\u9ac4<\u5d07<\u5d69" +
-                "<\u6570<\u67a2<\u8da8<\u96db<\u636e<\u6749<\u6919<\u83c5" +
-                "<\u9817<\u96c0<\u88fe<\u6f84<\u647a<\u5bf8<\u4e16<\u702c" +
-                "<\u755d<\u662f<\u51c4<\u5236<\u52e2<\u59d3<\u5f81<\u6027" +
-                "<\u6210<\u653f<\u6574<\u661f<\u6674<\u68f2<\u6816<\u6b63" +
-                "<\u6e05<\u7272<\u751f<\u76db<\u7cbe<\u8056<\u58f0<\u88fd" +
-                "<\u897f<\u8aa0<\u8a93<\u8acb<\u901d<\u9192<\u9752<\u9759" +
-                "<\u6589<\u7a0e<\u8106<\u96bb<\u5e2d<\u60dc<\u621a<\u65a5" +
-                "<\u6614<\u6790<\u77f3<\u7a4d<\u7c4d<\u7e3e<\u810a<\u8cac" +
-                "<\u8d64<\u8de1<\u8e5f<\u78a9<\u5207<\u62d9<\u63a5<\u6442" +
-                "<\u6298<\u8a2d<\u7a83<\u7bc0<\u8aac<\u96ea<\u7d76<\u820c" +
-                "<\u8749<\u4ed9<\u5148<\u5343<\u5360<\u5ba3<\u5c02<\u5c16" +
-                "<\u5ddd<\u6226<\u6247<\u64b0<\u6813<\u6834<\u6cc9<\u6d45" +
-                "<\u6d17<\u67d3<\u6f5c<\u714e<\u717d<\u65cb<\u7a7f<\u7bad" +
-                "<\u7dda<\u7e4a<\u7fa8<\u817a<\u821b<\u8239<\u85a6<\u8a6e" +
-                "<\u8cce<\u8df5<\u9078<\u9077<\u92ad<\u9291<\u9583<\u9bae" +
-                "<\u524d<\u5584<\u6f38<\u7136<\u5168<\u7985<\u7e55<\u81b3" +
-                "<\u7cce<\u564c<\u5851<\u5ca8<\u63aa<\u66fe<\u66fd<\u695a" +
-                "<\u72d9<\u758f<\u758e<\u790e<\u7956<\u79df<\u7c97<\u7d20" +
-                "<\u7d44<\u8607<\u8a34<\u963b<\u9061<\u9f20<\u50e7<\u5275" +
-                "<\u53cc<\u53e2<\u5009<\u55aa<\u58ee<\u594f<\u723d<\u5b8b" +
-                "<\u5c64<\u531d<\u60e3<\u60f3<\u635c<\u6383<\u633f<\u63bb" +
-                "<\u64cd<\u65e9<\u66f9<\u5de3<\u69cd<\u69fd<\u6f15<\u71e5" +
-                "<\u4e89<\u75e9<\u76f8<\u7a93<\u7cdf<\u7dcf<\u7d9c<\u8061" +
-                "<\u8349<\u8358<\u846c<\u84bc<\u85fb<\u88c5<\u8d70<\u9001" +
-                "<\u906d<\u9397<\u971c<\u9a12<\u50cf<\u5897<\u618e<\u81d3" +
-                "<\u8535<\u8d08<\u9020<\u4fc3<\u5074<\u5247<\u5373<\u606f" +
-                "<\u6349<\u675f<\u6e2c<\u8db3<\u901f<\u4fd7<\u5c5e<\u8cca" +
-                "<\u65cf<\u7d9a<\u5352<\u8896<\u5176<\u63c3<\u5b58<\u5b6b" +
-                "<\u5c0a<\u640d<\u6751<\u905c<\u4ed6<\u591a<\u592a<\u6c70" +
-                "<\u8a51<\u553e<\u5815<\u59a5<\u60f0<\u6253<\u67c1<\u8235" +
-                "<\u6955<\u9640<\u99c4<\u9a28<\u4f53<\u5806<\u5bfe<\u8010" +
-                "<\u5cb1<\u5e2f<\u5f85<\u6020<\u614b<\u6234<\u66ff<\u6cf0" +
-                "<\u6ede<\u80ce<\u817f<\u82d4<\u888b<\u8cb8<\u9000<\u902e" +
-                "<\u968a<\u9edb<\u9bdb<\u4ee3<\u53f0<\u5927<\u7b2c<\u918d" +
-                "<\u984c<\u9df9<\u6edd<\u7027<\u5353<\u5544<\u5b85<\u6258" +
-                "<\u629e<\u62d3<\u6ca2<\u6fef<\u7422<\u8a17<\u9438<\u6fc1" +
-                "<\u8afe<\u8338<\u51e7<\u86f8<\u53ea<\u53e9<\u4f46<\u9054" +
-                "<\u8fb0<\u596a<\u8131<\u5dfd<\u7aea<\u8fbf<\u68da<\u8c37" +
-                "<\u72f8<\u9c48<\u6a3d<\u8ab0<\u4e39<\u5358<\u5606<\u5766" +
-                "<\u62c5<\u63a2<\u65e6<\u6b4e<\u6de1<\u6e5b<\u70ad<\u77ed" +
-                "<\u7aef<\u7baa<\u7dbb<\u803d<\u80c6<\u86cb<\u8a95<\u935b" +
-                "<\u56e3<\u58c7<\u5f3e<\u65ad<\u6696<\u6a80<\u6bb5<\u7537" +
-                "<\u8ac7<\u5024<\u77e5<\u5730<\u5f1b<\u6065<\u667a<\u6c60" +
-                "<\u75f4<\u7a1a<\u7f6e<\u81f4<\u8718<\u9045<\u99b3<\u7bc9" +
-                "<\u755c<\u7af9<\u7b51<\u84c4<\u9010<\u79e9<\u7a92<\u8336" +
-                "<\u5ae1<\u7740<\u4e2d<\u4ef2<\u5b99<\u5fe0<\u62bd<\u663c" +
-                "<\u67f1<\u6ce8<\u866b<\u8877<\u8a3b<\u914e<\u92f3<\u99d0" +
-                "<\u6a17<\u7026<\u732a<\u82e7<\u8457<\u8caf<\u4e01<\u5146" +
-                "<\u51cb<\u558b<\u5bf5<\u5e16<\u5e33<\u5e81<\u5f14<\u5f35" +
-                "<\u5f6b<\u5fb4<\u61f2<\u6311<\u66a2<\u671d<\u6f6e<\u7252" +
-                "<\u753a<\u773a<\u8074<\u8139<\u8178<\u8776<\u8abf<\u8adc" +
-                "<\u8d85<\u8df3<\u929a<\u9577<\u9802<\u9ce5<\u52c5<\u6357" +
-                "<\u76f4<\u6715<\u6c88<\u73cd<\u8cc3<\u93ae<\u9673<\u6d25" +
-                "<\u589c<\u690e<\u69cc<\u8ffd<\u939a<\u75db<\u901a<\u585a" +
-                "<\u6802<\u63b4<\u69fb<\u4f43<\u6f2c<\u67d8<\u8fbb<\u8526" +
-                "<\u7db4<\u9354<\u693f<\u6f70<\u576a<\u58f7<\u5b2c<\u7d2c" +
-                "<\u722a<\u540a<\u91e3<\u9db4<\u4ead<\u4f4e<\u505c<\u5075" +
-                "<\u5243<\u8c9e<\u5448<\u5824<\u5b9a<\u5e1d<\u5e95<\u5ead" +
-                "<\u5ef7<\u5f1f<\u608c<\u62b5<\u633a<\u63d0<\u68af<\u6c40" +
-                "<\u7887<\u798e<\u7a0b<\u7de0<\u8247<\u8a02<\u8ae6<\u8e44" +
-                "<\u9013<\u90b8<\u912d<\u91d8<\u9f0e<\u6ce5<\u6458<\u64e2" +
-                "<\u6575<\u6ef4<\u7684<\u7b1b<\u9069<\u93d1<\u6eba<\u54f2" +
-                "<\u5fb9<\u64a4<\u8f4d<\u8fed<\u9244<\u5178<\u586b<\u5929" +
-                "<\u5c55<\u5e97<\u6dfb<\u7e8f<\u751c<\u8cbc<\u8ee2<\u985b" +
-                "<\u70b9<\u4f1d<\u6bbf<\u6fb1<\u7530<\u96fb<\u514e<\u5410" +
-                "<\u5835<\u5857<\u59ac<\u5c60<\u5f92<\u6597<\u675c<\u6e21" +
-                "<\u767b<\u83df<\u8ced<\u9014<\u90fd<\u934d<\u7825<\u783a" +
-                "<\u52aa<\u5ea6<\u571f<\u5974<\u6012<\u5012<\u515a<\u51ac" +
-                "<\u51cd<\u5200<\u5510<\u5854<\u5858<\u5957<\u5b95<\u5cf6" +
-                "<\u5d8b<\u60bc<\u6295<\u642d<\u6771<\u6843<\u68bc<\u68df" +
-                "<\u76d7<\u6dd8<\u6e6f<\u6d9b<\u706f<\u71c8<\u5f53<\u75d8" +
-                "<\u7977<\u7b49<\u7b54<\u7b52<\u7cd6<\u7d71<\u5230<\u8463" +
-                "<\u8569<\u85e4<\u8a0e<\u8b04<\u8c46<\u8e0f<\u9003<\u900f" +
-                "<\u9419<\u9676<\u982d<\u9a30<\u95d8<\u50cd<\u52d5<\u540c" +
-                "<\u5802<\u5c0e<\u61a7<\u649e<\u6d1e<\u77b3<\u7ae5<\u80f4" +
-                "<\u8404<\u9053<\u9285<\u5ce0<\u9d07<\u533f<\u5f97<\u5fb3" +
-                "<\u6d9c<\u7279<\u7763<\u79bf<\u7be4<\u6bd2<\u72ec<\u8aad" +
-                "<\u6803<\u6a61<\u51f8<\u7a81<\u6934<\u5c4a<\u9cf6<\u82eb" +
-                "<\u5bc5<\u9149<\u701e<\u5678<\u5c6f<\u60c7<\u6566<\u6c8c" +
-                "<\u8c5a<\u9041<\u9813<\u5451<\u66c7<\u920d<\u5948<\u90a3" +
-                "<\u5185<\u4e4d<\u51ea<\u8599<\u8b0e<\u7058<\u637a<\u934b" +
-                "<\u6962<\u99b4<\u7e04<\u7577<\u5357<\u6960<\u8edf<\u96e3" +
-                "<\u6c5d<\u4e8c<\u5c3c<\u5f10<\u8fe9<\u5302<\u8cd1<\u8089" +
-                "<\u8679<\u5eff<\u65e5<\u4e73<\u5165<\u5982<\u5c3f<\u97ee" +
-                "<\u4efb<\u598a<\u5fcd<\u8a8d<\u6fe1<\u79b0<\u7962<\u5be7" +
-                "<\u8471<\u732b<\u71b1<\u5e74<\u5ff5<\u637b<\u649a<\u71c3" +
-                "<\u7c98<\u4e43<\u5efc<\u4e4b<\u57dc<\u56a2<\u60a9<\u6fc3" +
-                "<\u7d0d<\u80fd<\u8133<\u81bf<\u8fb2<\u8997<\u86a4<\u5df4" +
-                "<\u628a<\u64ad<\u8987<\u6777<\u6ce2<\u6d3e<\u7436<\u7834" +
-                "<\u5a46<\u7f75<\u82ad<\u99ac<\u4ff3<\u5ec3<\u62dd<\u6392" +
-                "<\u6557<\u676f<\u76c3<\u724c<\u80cc<\u80ba<\u8f29<\u914d" +
-                "<\u500d<\u57f9<\u5a92<\u6885<\u6973<\u7164<\u72fd<\u8cb7" +
-                "<\u58f2<\u8ce0<\u966a<\u9019<\u877f<\u79e4<\u77e7<\u8429" +
-                "<\u4f2f<\u5265<\u535a<\u62cd<\u67cf<\u6cca<\u767d<\u7b94" +
-                "<\u7c95<\u8236<\u8584<\u8feb<\u66dd<\u6f20<\u7206<\u7e1b" +
-                "<\u83ab<\u99c1<\u9ea6<\u51fd<\u7bb1<\u7872<\u7bb8<\u8087" +
-                "<\u7b48<\u6ae8<\u5e61<\u808c<\u7551<\u7560<\u516b<\u9262" +
-                "<\u6e8c<\u767a<\u9197<\u9aea<\u4f10<\u7f70<\u629c<\u7b4f" +
-                "<\u95a5<\u9ce9<\u567a<\u5859<\u86e4<\u96bc<\u4f34<\u5224" +
-                "<\u534a<\u53cd<\u53db<\u5e06<\u642c<\u6591<\u677f<\u6c3e" +
-                "<\u6c4e<\u7248<\u72af<\u73ed<\u7554<\u7e41<\u822c<\u85e9" +
-                "<\u8ca9<\u7bc4<\u91c6<\u7169<\u9812<\u98ef<\u633d<\u6669" +
-                "<\u756a<\u76e4<\u78d0<\u8543<\u86ee<\u532a<\u5351<\u5426" +
-                "<\u5983<\u5e87<\u5f7c<\u60b2<\u6249<\u6279<\u62ab<\u6590" +
-                "<\u6bd4<\u6ccc<\u75b2<\u76ae<\u7891<\u79d8<\u7dcb<\u7f77" +
-                "<\u80a5<\u88ab<\u8ab9<\u8cbb<\u907f<\u975e<\u98db<\u6a0b" +
-                "<\u7c38<\u5099<\u5c3e<\u5fae<\u6787<\u6bd8<\u7435<\u7709" +
-                "<\u7f8e<\u9f3b<\u67ca<\u7a17<\u5339<\u758b<\u9aed<\u5f66" +
-                "<\u819d<\u83f1<\u8098<\u5f3c<\u5fc5<\u7562<\u7b46<\u903c" +
-                "<\u6867<\u59eb<\u5a9b<\u7d10<\u767e<\u8b2c<\u4ff5<\u5f6a" +
-                "<\u6a19<\u6c37<\u6f02<\u74e2<\u7968<\u8868<\u8a55<\u8c79" +
-                "<\u5edf<\u63cf<\u75c5<\u79d2<\u82d7<\u9328<\u92f2<\u849c" +
-                "<\u86ed<\u9c2d<\u54c1<\u5f6c<\u658c<\u6d5c<\u7015<\u8ca7" +
-                "<\u8cd3<\u983b<\u654f<\u74f6<\u4e0d<\u4ed8<\u57e0<\u592b" +
-                "<\u5a66<\u5bcc<\u51a8<\u5e03<\u5e9c<\u6016<\u6276<\u6577" +
-                "<\u65a7<\u666e<\u6d6e<\u7236<\u7b26<\u8150<\u819a<\u8299" +
-                "<\u8b5c<\u8ca0<\u8ce6<\u8d74<\u961c<\u9644<\u4fae<\u64ab" +
-                "<\u6b66<\u821e<\u8461<\u856a<\u90e8<\u5c01<\u6953<\u98a8" +
-                "<\u847a<\u8557<\u4f0f<\u526f<\u5fa9<\u5e45<\u670d<\u798f" +
-                "<\u8179<\u8907<\u8986<\u6df5<\u5f17<\u6255<\u6cb8<\u4ecf" +
-                "<\u7269<\u9b92<\u5206<\u543b<\u5674<\u58b3<\u61a4<\u626e" +
-                "<\u711a<\u596e<\u7c89<\u7cde<\u7d1b<\u96f0<\u6587<\u805e" +
-                "<\u4e19<\u4f75<\u5175<\u5840<\u5e63<\u5e73<\u5f0a<\u67c4" +
-                "<\u4e26<\u853d<\u9589<\u965b<\u7c73<\u9801<\u50fb<\u58c1" +
-                "<\u7656<\u78a7<\u5225<\u77a5<\u8511<\u7b86<\u504f<\u5909" +
-                "<\u7247<\u7bc7<\u7de8<\u8fba<\u8fd4<\u904d<\u4fbf<\u52c9" +
-                "<\u5a29<\u5f01<\u97ad<\u4fdd<\u8217<\u92ea<\u5703<\u6355" +
-                "<\u6b69<\u752b<\u88dc<\u8f14<\u7a42<\u52df<\u5893<\u6155" +
-                "<\u620a<\u66ae<\u6bcd<\u7c3f<\u83e9<\u5023<\u4ff8<\u5305" +
-                "<\u5446<\u5831<\u5949<\u5b9d<\u5cf0<\u5cef<\u5d29<\u5e96" +
-                "<\u62b1<\u6367<\u653e<\u65b9<\u670b<\u6cd5<\u6ce1<\u70f9" +
-                "<\u7832<\u7e2b<\u80de<\u82b3<\u840c<\u84ec<\u8702<\u8912" +
-                "<\u8a2a<\u8c4a<\u90a6<\u92d2<\u98fd<\u9cf3<\u9d6c<\u4e4f" +
-                "<\u4ea1<\u508d<\u5256<\u574a<\u59a8<\u5e3d<\u5fd8<\u5fd9" +
-                "<\u623f<\u66b4<\u671b<\u67d0<\u68d2<\u5192<\u7d21<\u80aa" +
-                "<\u81a8<\u8b00<\u8c8c<\u8cbf<\u927e<\u9632<\u5420<\u982c" +
-                "<\u5317<\u50d5<\u535c<\u58a8<\u64b2<\u6734<\u7267<\u7766" +
-                "<\u7a46<\u91e6<\u52c3<\u6ca1<\u6b86<\u5800<\u5e4c<\u5954" +
-                "<\u672c<\u7ffb<\u51e1<\u76c6<\u6469<\u78e8<\u9b54<\u9ebb" +
-                "<\u57cb<\u59b9<\u6627<\u679a<\u6bce<\u54e9<\u69d9<\u5e55" +
-                "<\u819c<\u6795<\u9baa<\u67fe<\u9c52<\u685d<\u4ea6<\u4fe3" +
-                "<\u53c8<\u62b9<\u672b<\u6cab<\u8fc4<\u4fad<\u7e6d<\u9ebf" +
-                "<\u4e07<\u6162<\u6e80<\u6f2b<\u8513<\u5473<\u672a<\u9b45" +
-                "<\u5df3<\u7b95<\u5cac<\u5bc6<\u871c<\u6e4a<\u84d1<\u7a14" +
-                "<\u8108<\u5999<\u7c8d<\u6c11<\u7720<\u52d9<\u5922<\u7121" +
-                "<\u725f<\u77db<\u9727<\u9d61<\u690b<\u5a7f<\u5a18<\u51a5" +
-                "<\u540d<\u547d<\u660e<\u76df<\u8ff7<\u9298<\u9cf4<\u59ea" +
-                "<\u725d<\u6ec5<\u514d<\u68c9<\u7dbf<\u7dec<\u9762<\u9eba" +
-                "<\u6478<\u6a21<\u8302<\u5984<\u5b5f<\u6bdb<\u731b<\u76f2" +
-                "<\u7db2<\u8017<\u8499<\u5132<\u6728<\u9ed9<\u76ee<\u6762" +
-                "<\u52ff<\u9905<\u5c24<\u623b<\u7c7e<\u8cb0<\u554f<\u60b6" +
-                "<\u7d0b<\u9580<\u5301<\u4e5f<\u51b6<\u591c<\u723a<\u8036" +
-                "<\u91ce<\u5f25<\u77e2<\u5384<\u5f79<\u7d04<\u85ac<\u8a33" +
-                "<\u8e8d<\u9756<\u67f3<\u85ae<\u9453<\u6109<\u6108<\u6cb9" +
-                "<\u7652<\u8aed<\u8f38<\u552f<\u4f51<\u512a<\u52c7<\u53cb" +
-                "<\u5ba5<\u5e7d<\u60a0<\u6182<\u63d6<\u6709<\u67da<\u6e67" +
-                "<\u6d8c<\u7336<\u7337<\u7531<\u7950<\u88d5<\u8a98<\u904a" +
-                "<\u9091<\u90f5<\u96c4<\u878d<\u5915<\u4e88<\u4f59<\u4e0e" +
-                "<\u8a89<\u8f3f<\u9810<\u50ad<\u5e7c<\u5996<\u5bb9<\u5eb8" +
-                "<\u63da<\u63fa<\u64c1<\u66dc<\u694a<\u69d8<\u6d0b<\u6eb6" +
-                "<\u7194<\u7528<\u7aaf<\u7f8a<\u8000<\u8449<\u84c9<\u8981" +
-                "<\u8b21<\u8e0a<\u9065<\u967d<\u990a<\u617e<\u6291<\u6b32" +
-                "<\u6c83<\u6d74<\u7fcc<\u7ffc<\u6dc0<\u7f85<\u87ba<\u88f8" +
-                "<\u6765<\u83b1<\u983c<\u96f7<\u6d1b<\u7d61<\u843d<\u916a" +
-                "<\u4e71<\u5375<\u5d50<\u6b04<\u6feb<\u85cd<\u862d<\u89a7" +
-                "<\u5229<\u540f<\u5c65<\u674e<\u68a8<\u7406<\u7483<\u75e2" +
-                "<\u88cf<\u88e1<\u91cc<\u96e2<\u9678<\u5f8b<\u7387<\u7acb" +
-                "<\u844e<\u63a0<\u7565<\u5289<\u6d41<\u6e9c<\u7409<\u7559" +
-                "<\u786b<\u7c92<\u9686<\u7adc<\u9f8d<\u4fb6<\u616e<\u65c5" +
-                "<\u865c<\u4e86<\u4eae<\u50da<\u4e21<\u51cc<\u5bee<\u6599" +
-                "<\u6881<\u6dbc<\u731f<\u7642<\u77ad<\u7a1c<\u7ce7<\u826f" +
-                "<\u8ad2<\u907c<\u91cf<\u9675<\u9818<\u529b<\u7dd1<\u502b" +
-                "<\u5398<\u6797<\u6dcb<\u71d0<\u7433<\u81e8<\u8f2a<\u96a3" +
-                "<\u9c57<\u9e9f<\u7460<\u5841<\u6d99<\u7d2f<\u985e<\u4ee4" +
-                "<\u4f36<\u4f8b<\u51b7<\u52b1<\u5dba<\u601c<\u73b2<\u793c" +
-                "<\u82d3<\u9234<\u96b7<\u96f6<\u970a<\u9e97<\u9f62<\u66a6" +
-                "<\u6b74<\u5217<\u52a3<\u70c8<\u88c2<\u5ec9<\u604b<\u6190" +
-                "<\u6f23<\u7149<\u7c3e<\u7df4<\u806f<\u84ee<\u9023<\u932c" +
-                "<\u5442<\u9b6f<\u6ad3<\u7089<\u8cc2<\u8def<\u9732<\u52b4" +
-                "<\u5a41<\u5eca<\u5f04<\u6717<\u697c<\u6994<\u6d6a<\u6f0f" +
-                "<\u7262<\u72fc<\u7bed<\u8001<\u807e<\u874b<\u90ce<\u516d" +
-                "<\u9e93<\u7984<\u808b<\u9332<\u8ad6<\u502d<\u548c<\u8a71" +
-                "<\u6b6a<\u8cc4<\u8107<\u60d1<\u67a0<\u9df2<\u4e99<\u4e98" +
-                "<\u9c10<\u8a6b<\u85c1<\u8568<\u6900<\u6e7e<\u7897<\u8155" +
-                "<\u5f0c<\u4e10<\u4e15<\u4e2a<\u4e31<\u4e36<\u4e3c<\u4e3f" +
-                "<\u4e42<\u4e56<\u4e58<\u4e82<\u4e85<\u8c6b<\u4e8a<\u8212" +
-                "<\u5f0d<\u4e8e<\u4e9e<\u4e9f<\u4ea0<\u4ea2<\u4eb0<\u4eb3" +
-                "<\u4eb6<\u4ece<\u4ecd<\u4ec4<\u4ec6<\u4ec2<\u4ed7<\u4ede" +
-                "<\u4eed<\u4edf<\u4ef7<\u4f09<\u4f5a<\u4f30<\u4f5b<\u4f5d" +
-                "<\u4f57<\u4f47<\u4f76<\u4f88<\u4f8f<\u4f98<\u4f7b<\u4f69" +
-                "<\u4f70<\u4f91<\u4f6f<\u4f86<\u4f96<\u5118<\u4fd4<\u4fdf" +
-                "<\u4fce<\u4fd8<\u4fdb<\u4fd1<\u4fda<\u4fd0<\u4fe4<\u4fe5" +
-                "<\u501a<\u5028<\u5014<\u502a<\u5025<\u5005<\u4f1c<\u4ff6" +
-                "<\u5021<\u5029<\u502c<\u4ffe<\u4fef<\u5011<\u5006<\u5043" +
-                "<\u5047<\u6703<\u5055<\u5050<\u5048<\u505a<\u5056<\u506c" +
-                "<\u5078<\u5080<\u509a<\u5085<\u50b4<\u50b2<\u50c9<\u50ca" +
-                "<\u50b3<\u50c2<\u50d6<\u50de<\u50e5<\u50ed<\u50e3<\u50ee" +
-                "<\u50f9<\u50f5<\u5109<\u5101<\u5102<\u5116<\u5115<\u5114" +
-                "<\u511a<\u5121<\u513a<\u5137<\u513c<\u513b<\u513f<\u5140" +
-                "<\u5152<\u514c<\u5154<\u5162<\u7af8<\u5169<\u516a<\u516e" +
-                "<\u5180<\u5182<\u56d8<\u518c<\u5189<\u518f<\u5191<\u5193" +
-                "<\u5195<\u5196<\u51a4<\u51a6<\u51a2<\u51a9<\u51aa<\u51ab" +
-                "<\u51b3<\u51b1<\u51b2<\u51b0<\u51b5<\u51bd<\u51c5<\u51c9" +
-                "<\u51db<\u51e0<\u8655<\u51e9<\u51ed<\u51f0<\u51f5<\u51fe" +
-                "<\u5204<\u520b<\u5214<\u520e<\u5227<\u522a<\u522e<\u5233" +
-                "<\u5239<\u524f<\u5244<\u524b<\u524c<\u525e<\u5254<\u526a" +
-                "<\u5274<\u5269<\u5273<\u527f<\u527d<\u528d<\u5294<\u5292" +
-                "<\u5271<\u5288<\u5291<\u8fa8<\u8fa7<\u52ac<\u52ad<\u52bc" +
-                "<\u52b5<\u52c1<\u52cd<\u52d7<\u52de<\u52e3<\u52e6<\u98ed" +
-                "<\u52e0<\u52f3<\u52f5<\u52f8<\u52f9<\u5306<\u5308<\u7538" +
-                "<\u530d<\u5310<\u530f<\u5315<\u531a<\u5323<\u532f<\u5331" +
-                "<\u5333<\u5338<\u5340<\u5346<\u5345<\u4e17<\u5349<\u534d" +
-                "<\u51d6<\u535e<\u5369<\u536e<\u5918<\u537b<\u5377<\u5382" +
-                "<\u5396<\u53a0<\u53a6<\u53a5<\u53ae<\u53b0<\u53b6<\u53c3" +
-                "<\u7c12<\u96d9<\u53df<\u66fc<\u71ee<\u53ee<\u53e8<\u53ed" +
-                "<\u53fa<\u5401<\u543d<\u5440<\u542c<\u542d<\u543c<\u542e" +
-                "<\u5436<\u5429<\u541d<\u544e<\u548f<\u5475<\u548e<\u545f" +
-                "<\u5471<\u5477<\u5470<\u5492<\u547b<\u5480<\u5476<\u5484" +
-                "<\u5490<\u5486<\u54c7<\u54a2<\u54b8<\u54a5<\u54ac<\u54c4" +
-                "<\u54c8<\u54a8<\u54ab<\u54c2<\u54a4<\u54be<\u54bc<\u54d8" +
-                "<\u54e5<\u54e6<\u550f<\u5514<\u54fd<\u54ee<\u54ed<\u54fa" +
-                "<\u54e2<\u5539<\u5540<\u5563<\u554c<\u552e<\u555c<\u5545" +
-                "<\u5556<\u5557<\u5538<\u5533<\u555d<\u5599<\u5580<\u54af" +
-                "<\u558a<\u559f<\u557b<\u557e<\u5598<\u559e<\u55ae<\u557c" +
-                "<\u5583<\u55a9<\u5587<\u55a8<\u55da<\u55c5<\u55df<\u55c4" +
-                "<\u55dc<\u55e4<\u55d4<\u5614<\u55f7<\u5616<\u55fe<\u55fd" +
-                "<\u561b<\u55f9<\u564e<\u5650<\u71df<\u5634<\u5636<\u5632" +
-                "<\u5638<\u566b<\u5664<\u562f<\u566c<\u566a<\u5686<\u5680" +
-                "<\u568a<\u56a0<\u5694<\u568f<\u56a5<\u56ae<\u56b6<\u56b4" +
-                "<\u56c2<\u56bc<\u56c1<\u56c3<\u56c0<\u56c8<\u56ce<\u56d1" +
-                "<\u56d3<\u56d7<\u56ee<\u56f9<\u5700<\u56ff<\u5704<\u5709" +
-                "<\u5708<\u570b<\u570d<\u5713<\u5718<\u5716<\u55c7<\u571c" +
-                "<\u5726<\u5737<\u5738<\u574e<\u573b<\u5740<\u574f<\u5769" +
-                "<\u57c0<\u5788<\u5761<\u577f<\u5789<\u5793<\u57a0<\u57b3" +
-                "<\u57a4<\u57aa<\u57b0<\u57c3<\u57c6<\u57d4<\u57d2<\u57d3" +
-                "<\u580a<\u57d6<\u57e3<\u580b<\u5819<\u581d<\u5872<\u5821" +
-                "<\u5862<\u584b<\u5870<\u6bc0<\u5852<\u583d<\u5879<\u5885" +
-                "<\u58b9<\u589f<\u58ab<\u58ba<\u58de<\u58bb<\u58b8<\u58ae" +
-                "<\u58c5<\u58d3<\u58d1<\u58d7<\u58d9<\u58d8<\u58e5<\u58dc" +
-                "<\u58e4<\u58df<\u58ef<\u58fa<\u58f9<\u58fb<\u58fc<\u58fd" +
-                "<\u5902<\u590a<\u5910<\u591b<\u68a6<\u5925<\u592c<\u592d" +
-                "<\u5932<\u5938<\u593e<\u7ad2<\u5955<\u5950<\u594e<\u595a" +
-                "<\u5958<\u5962<\u5960<\u5967<\u596c<\u5969<\u5978<\u5981" +
-                "<\u599d<\u4f5e<\u4fab<\u59a3<\u59b2<\u59c6<\u59e8<\u59dc" +
-                "<\u598d<\u59d9<\u59da<\u5a25<\u5a1f<\u5a11<\u5a1c<\u5a09" +
-                "<\u5a1a<\u5a40<\u5a6c<\u5a49<\u5a35<\u5a36<\u5a62<\u5a6a" +
-                "<\u5a9a<\u5abc<\u5abe<\u5acb<\u5ac2<\u5abd<\u5ae3<\u5ad7" +
-                "<\u5ae6<\u5ae9<\u5ad6<\u5afa<\u5afb<\u5b0c<\u5b0b<\u5b16" +
-                "<\u5b32<\u5ad0<\u5b2a<\u5b36<\u5b3e<\u5b43<\u5b45<\u5b40" +
-                "<\u5b51<\u5b55<\u5b5a<\u5b5b<\u5b65<\u5b69<\u5b70<\u5b73" +
-                "<\u5b75<\u5b78<\u6588<\u5b7a<\u5b80<\u5b83<\u5ba6<\u5bb8" +
-                "<\u5bc3<\u5bc7<\u5bc9<\u5bd4<\u5bd0<\u5be4<\u5be6<\u5be2" +
-                "<\u5bde<\u5be5<\u5beb<\u5bf0<\u5bf6<\u5bf3<\u5c05<\u5c07" +
-                "<\u5c08<\u5c0d<\u5c13<\u5c20<\u5c22<\u5c28<\u5c38<\u5c39" +
-                "<\u5c41<\u5c46<\u5c4e<\u5c53<\u5c50<\u5c4f<\u5b71<\u5c6c" +
-                "<\u5c6e<\u4e62<\u5c76<\u5c79<\u5c8c<\u5c91<\u5c94<\u599b" +
-                "<\u5cab<\u5cbb<\u5cb6<\u5cbc<\u5cb7<\u5cc5<\u5cbe<\u5cc7" +
-                "<\u5cd9<\u5ce9<\u5cfd<\u5cfa<\u5ced<\u5d8c<\u5cea<\u5d0b" +
-                "<\u5d15<\u5d17<\u5d5c<\u5d1f<\u5d1b<\u5d11<\u5d14<\u5d22" +
-                "<\u5d1a<\u5d19<\u5d18<\u5d4c<\u5d52<\u5d4e<\u5d4b<\u5d6c" +
-                "<\u5d73<\u5d76<\u5d87<\u5d84<\u5d82<\u5da2<\u5d9d<\u5dac" +
-                "<\u5dae<\u5dbd<\u5d90<\u5db7<\u5dbc<\u5dc9<\u5dcd<\u5dd3" +
-                "<\u5dd2<\u5dd6<\u5ddb<\u5deb<\u5df2<\u5df5<\u5e0b<\u5e1a" +
-                "<\u5e19<\u5e11<\u5e1b<\u5e36<\u5e37<\u5e44<\u5e43<\u5e40" +
-                "<\u5e4e<\u5e57<\u5e54<\u5e5f<\u5e62<\u5e64<\u5e47<\u5e75" +
-                "<\u5e76<\u5e7a<\u9ebc<\u5e7f<\u5ea0<\u5ec1<\u5ec2<\u5ec8" +
-                "<\u5ed0<\u5ecf<\u5ed6<\u5ee3<\u5edd<\u5eda<\u5edb<\u5ee2" +
-                "<\u5ee1<\u5ee8<\u5ee9<\u5eec<\u5ef1<\u5ef3<\u5ef0<\u5ef4" +
-                "<\u5ef8<\u5efe<\u5f03<\u5f09<\u5f5d<\u5f5c<\u5f0b<\u5f11" +
-                "<\u5f16<\u5f29<\u5f2d<\u5f38<\u5f41<\u5f48<\u5f4c<\u5f4e" +
-                "<\u5f2f<\u5f51<\u5f56<\u5f57<\u5f59<\u5f61<\u5f6d<\u5f73" +
-                "<\u5f77<\u5f83<\u5f82<\u5f7f<\u5f8a<\u5f88<\u5f91<\u5f87" +
-                "<\u5f9e<\u5f99<\u5f98<\u5fa0<\u5fa8<\u5fad<\u5fbc<\u5fd6" +
-                "<\u5ffb<\u5fe4<\u5ff8<\u5ff1<\u5fdd<\u60b3<\u5fff<\u6021" +
-                "<\u6060<\u6019<\u6010<\u6029<\u600e<\u6031<\u601b<\u6015" +
-                "<\u602b<\u6026<\u600f<\u603a<\u605a<\u6041<\u606a<\u6077" +
-                "<\u605f<\u604a<\u6046<\u604d<\u6063<\u6043<\u6064<\u6042" +
-                "<\u606c<\u606b<\u6059<\u6081<\u608d<\u60e7<\u6083<\u609a" +
-                "<\u6084<\u609b<\u6096<\u6097<\u6092<\u60a7<\u608b<\u60e1" +
-                "<\u60b8<\u60e0<\u60d3<\u60b4<\u5ff0<\u60bd<\u60c6<\u60b5" +
-                "<\u60d8<\u614d<\u6115<\u6106<\u60f6<\u60f7<\u6100<\u60f4" +
-                "<\u60fa<\u6103<\u6121<\u60fb<\u60f1<\u610d<\u610e<\u6147" +
-                "<\u613e<\u6128<\u6127<\u614a<\u613f<\u613c<\u612c<\u6134" +
-                "<\u613d<\u6142<\u6144<\u6173<\u6177<\u6158<\u6159<\u615a" +
-                "<\u616b<\u6174<\u616f<\u6165<\u6171<\u615f<\u615d<\u6153" +
-                "<\u6175<\u6199<\u6196<\u6187<\u61ac<\u6194<\u619a<\u618a" +
-                "<\u6191<\u61ab<\u61ae<\u61cc<\u61ca<\u61c9<\u61f7<\u61c8" +
-                "<\u61c3<\u61c6<\u61ba<\u61cb<\u7f79<\u61cd<\u61e6<\u61e3" +
-                "<\u61f6<\u61fa<\u61f4<\u61ff<\u61fd<\u61fc<\u61fe<\u6200" +
-                "<\u6208<\u6209<\u620d<\u620c<\u6214<\u621b<\u621e<\u6221" +
-                "<\u622a<\u622e<\u6230<\u6232<\u6233<\u6241<\u624e<\u625e" +
-                "<\u6263<\u625b<\u6260<\u6268<\u627c<\u6282<\u6289<\u627e" +
-                "<\u6292<\u6293<\u6296<\u62d4<\u6283<\u6294<\u62d7<\u62d1" +
-                "<\u62bb<\u62cf<\u62ff<\u62c6<\u64d4<\u62c8<\u62dc<\u62cc" +
-                "<\u62ca<\u62c2<\u62c7<\u629b<\u62c9<\u630c<\u62ee<\u62f1" +
-                "<\u6327<\u6302<\u6308<\u62ef<\u62f5<\u6350<\u633e<\u634d" +
-                "<\u641c<\u634f<\u6396<\u638e<\u6380<\u63ab<\u6376<\u63a3" +
-                "<\u638f<\u6389<\u639f<\u63b5<\u636b<\u6369<\u63be<\u63e9" +
-                "<\u63c0<\u63c6<\u63e3<\u63c9<\u63d2<\u63f6<\u63c4<\u6416" +
-                "<\u6434<\u6406<\u6413<\u6426<\u6436<\u651d<\u6417<\u6428" +
-                "<\u640f<\u6467<\u646f<\u6476<\u644e<\u652a<\u6495<\u6493" +
-                "<\u64a5<\u64a9<\u6488<\u64bc<\u64da<\u64d2<\u64c5<\u64c7" +
-                "<\u64bb<\u64d8<\u64c2<\u64f1<\u64e7<\u8209<\u64e0<\u64e1" +
-                "<\u62ac<\u64e3<\u64ef<\u652c<\u64f6<\u64f4<\u64f2<\u64fa" +
-                "<\u6500<\u64fd<\u6518<\u651c<\u6505<\u6524<\u6523<\u652b" +
-                "<\u6534<\u6535<\u6537<\u6536<\u6538<\u754b<\u6548<\u6556" +
-                "<\u6555<\u654d<\u6558<\u655e<\u655d<\u6572<\u6578<\u6582" +
-                "<\u6583<\u8b8a<\u659b<\u659f<\u65ab<\u65b7<\u65c3<\u65c6" +
-                "<\u65c1<\u65c4<\u65cc<\u65d2<\u65db<\u65d9<\u65e0<\u65e1" +
-                "<\u65f1<\u6772<\u660a<\u6603<\u65fb<\u6773<\u6635<\u6636" +
-                "<\u6634<\u661c<\u664f<\u6644<\u6649<\u6641<\u665e<\u665d" +
-                "<\u6664<\u6667<\u6668<\u665f<\u6662<\u6670<\u6683<\u6688" +
-                "<\u668e<\u6689<\u6684<\u6698<\u669d<\u66c1<\u66b9<\u66c9" +
-                "<\u66be<\u66bc<\u66c4<\u66b8<\u66d6<\u66da<\u66e0<\u663f" +
-                "<\u66e6<\u66e9<\u66f0<\u66f5<\u66f7<\u670f<\u6716<\u671e" +
-                "<\u6726<\u6727<\u9738<\u672e<\u673f<\u6736<\u6741<\u6738" +
-                "<\u6737<\u6746<\u675e<\u6760<\u6759<\u6763<\u6764<\u6789" +
-                "<\u6770<\u67a9<\u677c<\u676a<\u678c<\u678b<\u67a6<\u67a1" +
-                "<\u6785<\u67b7<\u67ef<\u67b4<\u67ec<\u67b3<\u67e9<\u67b8" +
-                "<\u67e4<\u67de<\u67dd<\u67e2<\u67ee<\u67b9<\u67ce<\u67c6" +
-                "<\u67e7<\u6a9c<\u681e<\u6846<\u6829<\u6840<\u684d<\u6832" +
-                "<\u684e<\u68b3<\u682b<\u6859<\u6863<\u6877<\u687f<\u689f" +
-                "<\u688f<\u68ad<\u6894<\u689d<\u689b<\u6883<\u6aae<\u68b9" +
-                "<\u6874<\u68b5<\u68a0<\u68ba<\u690f<\u688d<\u687e<\u6901" +
-                "<\u68ca<\u6908<\u68d8<\u6922<\u6926<\u68e1<\u690c<\u68cd" +
-                "<\u68d4<\u68e7<\u68d5<\u6936<\u6912<\u6904<\u68d7<\u68e3" +
-                "<\u6925<\u68f9<\u68e0<\u68ef<\u6928<\u692a<\u691a<\u6923" +
-                "<\u6921<\u68c6<\u6979<\u6977<\u695c<\u6978<\u696b<\u6954" +
-                "<\u697e<\u696e<\u6939<\u6974<\u693d<\u6959<\u6930<\u6961" +
-                "<\u695e<\u695d<\u6981<\u696a<\u69b2<\u69ae<\u69d0<\u69bf" +
-                "<\u69c1<\u69d3<\u69be<\u69ce<\u5be8<\u69ca<\u69dd<\u69bb" +
-                "<\u69c3<\u69a7<\u6a2e<\u6991<\u69a0<\u699c<\u6995<\u69b4" +
-                "<\u69de<\u69e8<\u6a02<\u6a1b<\u69ff<\u6b0a<\u69f9<\u69f2" +
-                "<\u69e7<\u6a05<\u69b1<\u6a1e<\u69ed<\u6a14<\u69eb<\u6a0a" +
-                "<\u6a12<\u6ac1<\u6a23<\u6a13<\u6a44<\u6a0c<\u6a72<\u6a36" +
-                "<\u6a78<\u6a47<\u6a62<\u6a59<\u6a66<\u6a48<\u6a38<\u6a22" +
-                "<\u6a90<\u6a8d<\u6aa0<\u6a84<\u6aa2<\u6aa3<\u6a97<\u8617" +
-                "<\u6abb<\u6ac3<\u6ac2<\u6ab8<\u6ab3<\u6aac<\u6ade<\u6ad1" +
-                "<\u6adf<\u6aaa<\u6ada<\u6aea<\u6afb<\u6b05<\u8616<\u6afa" +
-                "<\u6b12<\u6b16<\u9b31<\u6b1f<\u6b38<\u6b37<\u76dc<\u6b39" +
-                "<\u98ee<\u6b47<\u6b43<\u6b49<\u6b50<\u6b59<\u6b54<\u6b5b" +
-                "<\u6b5f<\u6b61<\u6b78<\u6b79<\u6b7f<\u6b80<\u6b84<\u6b83" +
-                "<\u6b8d<\u6b98<\u6b95<\u6b9e<\u6ba4<\u6baa<\u6bab<\u6baf" +
-                "<\u6bb2<\u6bb1<\u6bb3<\u6bb7<\u6bbc<\u6bc6<\u6bcb<\u6bd3" +
-                "<\u6bdf<\u6bec<\u6beb<\u6bf3<\u6bef<\u9ebe<\u6c08<\u6c13" +
-                "<\u6c14<\u6c1b<\u6c24<\u6c23<\u6c5e<\u6c55<\u6c62<\u6c6a" +
-                "<\u6c82<\u6c8d<\u6c9a<\u6c81<\u6c9b<\u6c7e<\u6c68<\u6c73" +
-                "<\u6c92<\u6c90<\u6cc4<\u6cf1<\u6cd3<\u6cbd<\u6cd7<\u6cc5" +
-                "<\u6cdd<\u6cae<\u6cb1<\u6cbe<\u6cba<\u6cdb<\u6cef<\u6cd9" +
-                "<\u6cea<\u6d1f<\u884d<\u6d36<\u6d2b<\u6d3d<\u6d38<\u6d19" +
-                "<\u6d35<\u6d33<\u6d12<\u6d0c<\u6d63<\u6d93<\u6d64<\u6d5a" +
-                "<\u6d79<\u6d59<\u6d8e<\u6d95<\u6fe4<\u6d85<\u6df9<\u6e15" +
-                "<\u6e0a<\u6db5<\u6dc7<\u6de6<\u6db8<\u6dc6<\u6dec<\u6dde" +
-                "<\u6dcc<\u6de8<\u6dd2<\u6dc5<\u6dfa<\u6dd9<\u6de4<\u6dd5" +
-                "<\u6dea<\u6dee<\u6e2d<\u6e6e<\u6e2e<\u6e19<\u6e72<\u6e5f" +
-                "<\u6e3e<\u6e23<\u6e6b<\u6e2b<\u6e76<\u6e4d<\u6e1f<\u6e43" +
-                "<\u6e3a<\u6e4e<\u6e24<\u6eff<\u6e1d<\u6e38<\u6e82<\u6eaa" +
-                "<\u6e98<\u6ec9<\u6eb7<\u6ed3<\u6ebd<\u6eaf<\u6ec4<\u6eb2" +
-                "<\u6ed4<\u6ed5<\u6e8f<\u6ea5<\u6ec2<\u6e9f<\u6f41<\u6f11" +
-                "<\u704c<\u6eec<\u6ef8<\u6efe<\u6f3f<\u6ef2<\u6f31<\u6eef" +
-                "<\u6f32<\u6ecc<\u6f3e<\u6f13<\u6ef7<\u6f86<\u6f7a<\u6f78" +
-                "<\u6f81<\u6f80<\u6f6f<\u6f5b<\u6ff3<\u6f6d<\u6f82<\u6f7c" +
-                "<\u6f58<\u6f8e<\u6f91<\u6fc2<\u6f66<\u6fb3<\u6fa3<\u6fa1" +
-                "<\u6fa4<\u6fb9<\u6fc6<\u6faa<\u6fdf<\u6fd5<\u6fec<\u6fd4" +
-                "<\u6fd8<\u6ff1<\u6fee<\u6fdb<\u7009<\u700b<\u6ffa<\u7011" +
-                "<\u7001<\u700f<\u6ffe<\u701b<\u701a<\u6f74<\u701d<\u7018" +
-                "<\u701f<\u7030<\u703e<\u7032<\u7051<\u7063<\u7099<\u7092" +
-                "<\u70af<\u70f1<\u70ac<\u70b8<\u70b3<\u70ae<\u70df<\u70cb" +
-                "<\u70dd<\u70d9<\u7109<\u70fd<\u711c<\u7119<\u7165<\u7155" +
-                "<\u7188<\u7166<\u7162<\u714c<\u7156<\u716c<\u718f<\u71fb" +
-                "<\u7184<\u7195<\u71a8<\u71ac<\u71d7<\u71b9<\u71be<\u71d2" +
-                "<\u71c9<\u71d4<\u71ce<\u71e0<\u71ec<\u71e7<\u71f5<\u71fc" +
-                "<\u71f9<\u71ff<\u720d<\u7210<\u721b<\u7228<\u722d<\u722c" +
-                "<\u7230<\u7232<\u723b<\u723c<\u723f<\u7240<\u7246<\u724b" +
-                "<\u7258<\u7274<\u727e<\u7282<\u7281<\u7287<\u7292<\u7296" +
-                "<\u72a2<\u72a7<\u72b9<\u72b2<\u72c3<\u72c6<\u72c4<\u72ce" +
-                "<\u72d2<\u72e2<\u72e0<\u72e1<\u72f9<\u72f7<\u500f<\u7317" +
-                "<\u730a<\u731c<\u7316<\u731d<\u7334<\u732f<\u7329<\u7325" +
-                "<\u733e<\u734e<\u734f<\u9ed8<\u7357<\u736a<\u7368<\u7370" +
-                "<\u7378<\u7375<\u737b<\u737a<\u73c8<\u73b3<\u73ce<\u73bb" +
-                "<\u73c0<\u73e5<\u73ee<\u73de<\u74a2<\u7405<\u746f<\u7425" +
-                "<\u73f8<\u7432<\u743a<\u7455<\u743f<\u745f<\u7459<\u7441" +
-                "<\u745c<\u7469<\u7470<\u7463<\u746a<\u7476<\u747e<\u748b" +
-                "<\u749e<\u74a7<\u74ca<\u74cf<\u74d4<\u73f1<\u74e0<\u74e3" +
-                "<\u74e7<\u74e9<\u74ee<\u74f2<\u74f0<\u74f1<\u74f8<\u74f7" +
-                "<\u7504<\u7503<\u7505<\u750c<\u750e<\u750d<\u7515<\u7513" +
-                "<\u751e<\u7526<\u752c<\u753c<\u7544<\u754d<\u754a<\u7549" +
-                "<\u755b<\u7546<\u755a<\u7569<\u7564<\u7567<\u756b<\u756d" +
-                "<\u7578<\u7576<\u7586<\u7587<\u7574<\u758a<\u7589<\u7582" +
-                "<\u7594<\u759a<\u759d<\u75a5<\u75a3<\u75c2<\u75b3<\u75c3" +
-                "<\u75b5<\u75bd<\u75b8<\u75bc<\u75b1<\u75cd<\u75ca<\u75d2" +
-                "<\u75d9<\u75e3<\u75de<\u75fe<\u75ff<\u75fc<\u7601<\u75f0" +
-                "<\u75fa<\u75f2<\u75f3<\u760b<\u760d<\u7609<\u761f<\u7627" +
-                "<\u7620<\u7621<\u7622<\u7624<\u7634<\u7630<\u763b<\u7647" +
-                "<\u7648<\u7646<\u765c<\u7658<\u7661<\u7662<\u7668<\u7669" +
-                "<\u766a<\u7667<\u766c<\u7670<\u7672<\u7676<\u7678<\u767c" +
-                "<\u7680<\u7683<\u7688<\u768b<\u768e<\u7696<\u7693<\u7699" +
-                "<\u769a<\u76b0<\u76b4<\u76b8<\u76b9<\u76ba<\u76c2<\u76cd" +
-                "<\u76d6<\u76d2<\u76de<\u76e1<\u76e5<\u76e7<\u76ea<\u862f" +
-                "<\u76fb<\u7708<\u7707<\u7704<\u7729<\u7724<\u771e<\u7725" +
-                "<\u7726<\u771b<\u7737<\u7738<\u7747<\u775a<\u7768<\u776b" +
-                "<\u775b<\u7765<\u777f<\u777e<\u7779<\u778e<\u778b<\u7791" +
-                "<\u77a0<\u779e<\u77b0<\u77b6<\u77b9<\u77bf<\u77bc<\u77bd" +
-                "<\u77bb<\u77c7<\u77cd<\u77d7<\u77da<\u77dc<\u77e3<\u77ee" +
-                "<\u77fc<\u780c<\u7812<\u7926<\u7820<\u792a<\u7845<\u788e" +
-                "<\u7874<\u7886<\u787c<\u789a<\u788c<\u78a3<\u78b5<\u78aa" +
-                "<\u78af<\u78d1<\u78c6<\u78cb<\u78d4<\u78be<\u78bc<\u78c5" +
-                "<\u78ca<\u78ec<\u78e7<\u78da<\u78fd<\u78f4<\u7907<\u7912" +
-                "<\u7911<\u7919<\u792c<\u792b<\u7940<\u7960<\u7957<\u795f" +
-                "<\u795a<\u7955<\u7953<\u797a<\u797f<\u798a<\u799d<\u79a7" +
-                "<\u9f4b<\u79aa<\u79ae<\u79b3<\u79b9<\u79ba<\u79c9<\u79d5" +
-                "<\u79e7<\u79ec<\u79e1<\u79e3<\u7a08<\u7a0d<\u7a18<\u7a19" +
-                "<\u7a20<\u7a1f<\u7980<\u7a31<\u7a3b<\u7a3e<\u7a37<\u7a43" +
-                "<\u7a57<\u7a49<\u7a61<\u7a62<\u7a69<\u9f9d<\u7a70<\u7a79" +
-                "<\u7a7d<\u7a88<\u7a97<\u7a95<\u7a98<\u7a96<\u7aa9<\u7ac8" +
-                "<\u7ab0<\u7ab6<\u7ac5<\u7ac4<\u7abf<\u9083<\u7ac7<\u7aca" +
-                "<\u7acd<\u7acf<\u7ad5<\u7ad3<\u7ad9<\u7ada<\u7add<\u7ae1" +
-                "<\u7ae2<\u7ae6<\u7aed<\u7af0<\u7b02<\u7b0f<\u7b0a<\u7b06" +
-                "<\u7b33<\u7b18<\u7b19<\u7b1e<\u7b35<\u7b28<\u7b36<\u7b50" +
-                "<\u7b7a<\u7b04<\u7b4d<\u7b0b<\u7b4c<\u7b45<\u7b75<\u7b65" +
-                "<\u7b74<\u7b67<\u7b70<\u7b71<\u7b6c<\u7b6e<\u7b9d<\u7b98" +
-                "<\u7b9f<\u7b8d<\u7b9c<\u7b9a<\u7b8b<\u7b92<\u7b8f<\u7b5d" +
-                "<\u7b99<\u7bcb<\u7bc1<\u7bcc<\u7bcf<\u7bb4<\u7bc6<\u7bdd" +
-                "<\u7be9<\u7c11<\u7c14<\u7be6<\u7be5<\u7c60<\u7c00<\u7c07" +
-                "<\u7c13<\u7bf3<\u7bf7<\u7c17<\u7c0d<\u7bf6<\u7c23<\u7c27" +
-                "<\u7c2a<\u7c1f<\u7c37<\u7c2b<\u7c3d<\u7c4c<\u7c43<\u7c54" +
-                "<\u7c4f<\u7c40<\u7c50<\u7c58<\u7c5f<\u7c64<\u7c56<\u7c65" +
-                "<\u7c6c<\u7c75<\u7c83<\u7c90<\u7ca4<\u7cad<\u7ca2<\u7cab" +
-                "<\u7ca1<\u7ca8<\u7cb3<\u7cb2<\u7cb1<\u7cae<\u7cb9<\u7cbd" +
-                "<\u7cc0<\u7cc5<\u7cc2<\u7cd8<\u7cd2<\u7cdc<\u7ce2<\u9b3b" +
-                "<\u7cef<\u7cf2<\u7cf4<\u7cf6<\u7cfa<\u7d06<\u7d02<\u7d1c" +
-                "<\u7d15<\u7d0a<\u7d45<\u7d4b<\u7d2e<\u7d32<\u7d3f<\u7d35" +
-                "<\u7d46<\u7d73<\u7d56<\u7d4e<\u7d72<\u7d68<\u7d6e<\u7d4f" +
-                "<\u7d63<\u7d93<\u7d89<\u7d5b<\u7d8f<\u7d7d<\u7d9b<\u7dba" +
-                "<\u7dae<\u7da3<\u7db5<\u7dc7<\u7dbd<\u7dab<\u7e3d<\u7da2" +
-                "<\u7daf<\u7ddc<\u7db8<\u7d9f<\u7db0<\u7dd8<\u7ddd<\u7de4" +
-                "<\u7dde<\u7dfb<\u7df2<\u7de1<\u7e05<\u7e0a<\u7e23<\u7e21" +
-                "<\u7e12<\u7e31<\u7e1f<\u7e09<\u7e0b<\u7e22<\u7e46<\u7e66" +
-                "<\u7e3b<\u7e35<\u7e39<\u7e43<\u7e37<\u7e32<\u7e3a<\u7e67" +
-                "<\u7e5d<\u7e56<\u7e5e<\u7e59<\u7e5a<\u7e79<\u7e6a<\u7e69" +
-                "<\u7e7c<\u7e7b<\u7e83<\u7dd5<\u7e7d<\u8fae<\u7e7f<\u7e88" +
-                "<\u7e89<\u7e8c<\u7e92<\u7e90<\u7e93<\u7e94<\u7e96<\u7e8e" +
-                "<\u7e9b<\u7e9c<\u7f38<\u7f3a<\u7f45<\u7f4c<\u7f4d<\u7f4e" +
-                "<\u7f50<\u7f51<\u7f55<\u7f54<\u7f58<\u7f5f<\u7f60<\u7f68" +
-                "<\u7f69<\u7f67<\u7f78<\u7f82<\u7f86<\u7f83<\u7f88<\u7f87" +
-                "<\u7f8c<\u7f94<\u7f9e<\u7f9d<\u7f9a<\u7fa3<\u7faf<\u7fb2" +
-                "<\u7fb9<\u7fae<\u7fb6<\u7fb8<\u8b71<\u7fc5<\u7fc6<\u7fca" +
-                "<\u7fd5<\u7fd4<\u7fe1<\u7fe6<\u7fe9<\u7ff3<\u7ff9<\u98dc" +
-                "<\u8006<\u8004<\u800b<\u8012<\u8018<\u8019<\u801c<\u8021" +
-                "<\u8028<\u803f<\u803b<\u804a<\u8046<\u8052<\u8058<\u805a" +
-                "<\u805f<\u8062<\u8068<\u8073<\u8072<\u8070<\u8076<\u8079" +
-                "<\u807d<\u807f<\u8084<\u8086<\u8085<\u809b<\u8093<\u809a" +
-                "<\u80ad<\u5190<\u80ac<\u80db<\u80e5<\u80d9<\u80dd<\u80c4" +
-                "<\u80da<\u80d6<\u8109<\u80ef<\u80f1<\u811b<\u8129<\u8123" +
-                "<\u812f<\u814b<\u968b<\u8146<\u813e<\u8153<\u8151<\u80fc" +
-                "<\u8171<\u816e<\u8165<\u8166<\u8174<\u8183<\u8188<\u818a" +
-                "<\u8180<\u8182<\u81a0<\u8195<\u81a4<\u81a3<\u815f<\u8193" +
-                "<\u81a9<\u81b0<\u81b5<\u81be<\u81b8<\u81bd<\u81c0<\u81c2" +
-                "<\u81ba<\u81c9<\u81cd<\u81d1<\u81d9<\u81d8<\u81c8<\u81da" +
-                "<\u81df<\u81e0<\u81e7<\u81fa<\u81fb<\u81fe<\u8201<\u8202" +
-                "<\u8205<\u8207<\u820a<\u820d<\u8210<\u8216<\u8229<\u822b" +
-                "<\u8238<\u8233<\u8240<\u8259<\u8258<\u825d<\u825a<\u825f" +
-                "<\u8264<\u8262<\u8268<\u826a<\u826b<\u822e<\u8271<\u8277" +
-                "<\u8278<\u827e<\u828d<\u8292<\u82ab<\u829f<\u82bb<\u82ac" +
-                "<\u82e1<\u82e3<\u82df<\u82d2<\u82f4<\u82f3<\u82fa<\u8393" +
-                "<\u8303<\u82fb<\u82f9<\u82de<\u8306<\u82dc<\u8309<\u82d9" +
-                "<\u8335<\u8334<\u8316<\u8332<\u8331<\u8340<\u8339<\u8350" +
-                "<\u8345<\u832f<\u832b<\u8317<\u8318<\u8385<\u839a<\u83aa" +
-                "<\u839f<\u83a2<\u8396<\u8323<\u838e<\u8387<\u838a<\u837c" +
-                "<\u83b5<\u8373<\u8375<\u83a0<\u8389<\u83a8<\u83f4<\u8413" +
-                "<\u83eb<\u83ce<\u83fd<\u8403<\u83d8<\u840b<\u83c1<\u83f7" +
-                "<\u8407<\u83e0<\u83f2<\u840d<\u8422<\u8420<\u83bd<\u8438" +
-                "<\u8506<\u83fb<\u846d<\u842a<\u843c<\u855a<\u8484<\u8477" +
-                "<\u846b<\u84ad<\u846e<\u8482<\u8469<\u8446<\u842c<\u846f" +
-                "<\u8479<\u8435<\u84ca<\u8462<\u84b9<\u84bf<\u849f<\u84d9" +
-                "<\u84cd<\u84bb<\u84da<\u84d0<\u84c1<\u84c6<\u84d6<\u84a1" +
-                "<\u8521<\u84ff<\u84f4<\u8517<\u8518<\u852c<\u851f<\u8515" +
-                "<\u8514<\u84fc<\u8540<\u8563<\u8558<\u8548<\u8541<\u8602" +
-                "<\u854b<\u8555<\u8580<\u85a4<\u8588<\u8591<\u858a<\u85a8" +
-                "<\u856d<\u8594<\u859b<\u85ea<\u8587<\u859c<\u8577<\u857e" +
-                "<\u8590<\u85c9<\u85ba<\u85cf<\u85b9<\u85d0<\u85d5<\u85dd" +
-                "<\u85e5<\u85dc<\u85f9<\u860a<\u8613<\u860b<\u85fe<\u85fa" +
-                "<\u8606<\u8622<\u861a<\u8630<\u863f<\u864d<\u4e55<\u8654" +
-                "<\u865f<\u8667<\u8671<\u8693<\u86a3<\u86a9<\u86aa<\u868b" +
-                "<\u868c<\u86b6<\u86af<\u86c4<\u86c6<\u86b0<\u86c9<\u8823" +
-                "<\u86ab<\u86d4<\u86de<\u86e9<\u86ec<\u86df<\u86db<\u86ef" +
-                "<\u8712<\u8706<\u8708<\u8700<\u8703<\u86fb<\u8711<\u8709" +
-                "<\u870d<\u86f9<\u870a<\u8734<\u873f<\u8737<\u873b<\u8725" +
-                "<\u8729<\u871a<\u8760<\u875f<\u8778<\u874c<\u874e<\u8774" +
-                "<\u8757<\u8768<\u876e<\u8759<\u8753<\u8763<\u876a<\u8805" +
-                "<\u87a2<\u879f<\u8782<\u87af<\u87cb<\u87bd<\u87c0<\u87d0" +
-                "<\u96d6<\u87ab<\u87c4<\u87b3<\u87c7<\u87c6<\u87bb<\u87ef" +
-                "<\u87f2<\u87e0<\u880f<\u880d<\u87fe<\u87f6<\u87f7<\u880e" +
-                "<\u87d2<\u8811<\u8816<\u8815<\u8822<\u8821<\u8831<\u8836" +
-                "<\u8839<\u8827<\u883b<\u8844<\u8842<\u8852<\u8859<\u885e" +
-                "<\u8862<\u886b<\u8881<\u887e<\u889e<\u8875<\u887d<\u88b5" +
-                "<\u8872<\u8882<\u8897<\u8892<\u88ae<\u8899<\u88a2<\u888d" +
-                "<\u88a4<\u88b0<\u88bf<\u88b1<\u88c3<\u88c4<\u88d4<\u88d8" +
-                "<\u88d9<\u88dd<\u88f9<\u8902<\u88fc<\u88f4<\u88e8<\u88f2" +
-                "<\u8904<\u890c<\u890a<\u8913<\u8943<\u891e<\u8925<\u892a" +
-                "<\u892b<\u8941<\u8944<\u893b<\u8936<\u8938<\u894c<\u891d" +
-                "<\u8960<\u895e<\u8966<\u8964<\u896d<\u896a<\u896f<\u8974" +
-                "<\u8977<\u897e<\u8983<\u8988<\u898a<\u8993<\u8998<\u89a1" +
-                "<\u89a9<\u89a6<\u89ac<\u89af<\u89b2<\u89ba<\u89bd<\u89bf" +
-                "<\u89c0<\u89da<\u89dc<\u89dd<\u89e7<\u89f4<\u89f8<\u8a03" +
-                "<\u8a16<\u8a10<\u8a0c<\u8a1b<\u8a1d<\u8a25<\u8a36<\u8a41" +
-                "<\u8a5b<\u8a52<\u8a46<\u8a48<\u8a7c<\u8a6d<\u8a6c<\u8a62" +
-                "<\u8a85<\u8a82<\u8a84<\u8aa8<\u8aa1<\u8a91<\u8aa5<\u8aa6" +
-                "<\u8a9a<\u8aa3<\u8ac4<\u8acd<\u8ac2<\u8ada<\u8aeb<\u8af3" +
-                "<\u8ae7<\u8ae4<\u8af1<\u8b14<\u8ae0<\u8ae2<\u8af7<\u8ade" +
-                "<\u8adb<\u8b0c<\u8b07<\u8b1a<\u8ae1<\u8b16<\u8b10<\u8b17" +
-                "<\u8b20<\u8b33<\u97ab<\u8b26<\u8b2b<\u8b3e<\u8b28<\u8b41" +
-                "<\u8b4c<\u8b4f<\u8b4e<\u8b49<\u8b56<\u8b5b<\u8b5a<\u8b6b" +
-                "<\u8b5f<\u8b6c<\u8b6f<\u8b74<\u8b7d<\u8b80<\u8b8c<\u8b8e" +
-                "<\u8b92<\u8b93<\u8b96<\u8b99<\u8b9a<\u8c3a<\u8c41<\u8c3f" +
-                "<\u8c48<\u8c4c<\u8c4e<\u8c50<\u8c55<\u8c62<\u8c6c<\u8c78" +
-                "<\u8c7a<\u8c82<\u8c89<\u8c85<\u8c8a<\u8c8d<\u8c8e<\u8c94" +
-                "<\u8c7c<\u8c98<\u621d<\u8cad<\u8caa<\u8cbd<\u8cb2<\u8cb3" +
-                "<\u8cae<\u8cb6<\u8cc8<\u8cc1<\u8ce4<\u8ce3<\u8cda<\u8cfd" +
-                "<\u8cfa<\u8cfb<\u8d04<\u8d05<\u8d0a<\u8d07<\u8d0f<\u8d0d" +
-                "<\u8d10<\u9f4e<\u8d13<\u8ccd<\u8d14<\u8d16<\u8d67<\u8d6d" +
-                "<\u8d71<\u8d73<\u8d81<\u8d99<\u8dc2<\u8dbe<\u8dba<\u8dcf" +
-                "<\u8dda<\u8dd6<\u8dcc<\u8ddb<\u8dcb<\u8dea<\u8deb<\u8ddf" +
-                "<\u8de3<\u8dfc<\u8e08<\u8e09<\u8dff<\u8e1d<\u8e1e<\u8e10" +
-                "<\u8e1f<\u8e42<\u8e35<\u8e30<\u8e34<\u8e4a<\u8e47<\u8e49" +
-                "<\u8e4c<\u8e50<\u8e48<\u8e59<\u8e64<\u8e60<\u8e2a<\u8e63" +
-                "<\u8e55<\u8e76<\u8e72<\u8e7c<\u8e81<\u8e87<\u8e85<\u8e84" +
-                "<\u8e8b<\u8e8a<\u8e93<\u8e91<\u8e94<\u8e99<\u8eaa<\u8ea1" +
-                "<\u8eac<\u8eb0<\u8ec6<\u8eb1<\u8ebe<\u8ec5<\u8ec8<\u8ecb" +
-                "<\u8edb<\u8ee3<\u8efc<\u8efb<\u8eeb<\u8efe<\u8f0a<\u8f05" +
-                "<\u8f15<\u8f12<\u8f19<\u8f13<\u8f1c<\u8f1f<\u8f1b<\u8f0c" +
-                "<\u8f26<\u8f33<\u8f3b<\u8f39<\u8f45<\u8f42<\u8f3e<\u8f4c" +
-                "<\u8f49<\u8f46<\u8f4e<\u8f57<\u8f5c<\u8f62<\u8f63<\u8f64" +
-                "<\u8f9c<\u8f9f<\u8fa3<\u8fad<\u8faf<\u8fb7<\u8fda<\u8fe5" +
-                "<\u8fe2<\u8fea<\u8fef<\u9087<\u8ff4<\u9005<\u8ff9<\u8ffa" +
-                "<\u9011<\u9015<\u9021<\u900d<\u901e<\u9016<\u900b<\u9027" +
-                "<\u9036<\u9035<\u9039<\u8ff8<\u904f<\u9050<\u9051<\u9052" +
-                "<\u900e<\u9049<\u903e<\u9056<\u9058<\u905e<\u9068<\u906f" +
-                "<\u9076<\u96a8<\u9072<\u9082<\u907d<\u9081<\u9080<\u908a" +
-                "<\u9089<\u908f<\u90a8<\u90af<\u90b1<\u90b5<\u90e2<\u90e4" +
-                "<\u6248<\u90db<\u9102<\u9112<\u9119<\u9132<\u9130<\u914a" +
-                "<\u9156<\u9158<\u9163<\u9165<\u9169<\u9173<\u9172<\u918b" +
-                "<\u9189<\u9182<\u91a2<\u91ab<\u91af<\u91aa<\u91b5<\u91b4" +
-                "<\u91ba<\u91c0<\u91c1<\u91c9<\u91cb<\u91d0<\u91d6<\u91df" +
-                "<\u91e1<\u91db<\u91fc<\u91f5<\u91f6<\u921e<\u91ff<\u9214" +
-                "<\u922c<\u9215<\u9211<\u925e<\u9257<\u9245<\u9249<\u9264" +
-                "<\u9248<\u9295<\u923f<\u924b<\u9250<\u929c<\u9296<\u9293" +
-                "<\u929b<\u925a<\u92cf<\u92b9<\u92b7<\u92e9<\u930f<\u92fa" +
-                "<\u9344<\u932e<\u9319<\u9322<\u931a<\u9323<\u933a<\u9335" +
-                "<\u933b<\u935c<\u9360<\u937c<\u936e<\u9356<\u93b0<\u93ac" +
-                "<\u93ad<\u9394<\u93b9<\u93d6<\u93d7<\u93e8<\u93e5<\u93d8" +
-                "<\u93c3<\u93dd<\u93d0<\u93c8<\u93e4<\u941a<\u9414<\u9413" +
-                "<\u9403<\u9407<\u9410<\u9436<\u942b<\u9435<\u9421<\u943a" +
-                "<\u9441<\u9452<\u9444<\u945b<\u9460<\u9462<\u945e<\u946a" +
-                "<\u9229<\u9470<\u9475<\u9477<\u947d<\u945a<\u947c<\u947e" +
-                "<\u9481<\u947f<\u9582<\u9587<\u958a<\u9594<\u9596<\u9598" +
-                "<\u9599<\u95a0<\u95a8<\u95a7<\u95ad<\u95bc<\u95bb<\u95b9" +
-                "<\u95be<\u95ca<\u6ff6<\u95c3<\u95cd<\u95cc<\u95d5<\u95d4" +
-                "<\u95d6<\u95dc<\u95e1<\u95e5<\u95e2<\u9621<\u9628<\u962e" +
-                "<\u962f<\u9642<\u964c<\u964f<\u964b<\u9677<\u965c<\u965e" +
-                "<\u965d<\u965f<\u9666<\u9672<\u966c<\u968d<\u9698<\u9695" +
-                "<\u9697<\u96aa<\u96a7<\u96b1<\u96b2<\u96b0<\u96b4<\u96b6" +
-                "<\u96b8<\u96b9<\u96ce<\u96cb<\u96c9<\u96cd<\u894d<\u96dc" +
-                "<\u970d<\u96d5<\u96f9<\u9704<\u9706<\u9708<\u9713<\u970e" +
-                "<\u9711<\u970f<\u9716<\u9719<\u9724<\u972a<\u9730<\u9739" +
-                "<\u973d<\u973e<\u9744<\u9746<\u9748<\u9742<\u9749<\u975c" +
-                "<\u9760<\u9764<\u9766<\u9768<\u52d2<\u976b<\u9771<\u9779" +
-                "<\u9785<\u977c<\u9781<\u977a<\u9786<\u978b<\u978f<\u9790" +
-                "<\u979c<\u97a8<\u97a6<\u97a3<\u97b3<\u97b4<\u97c3<\u97c6" +
-                "<\u97c8<\u97cb<\u97dc<\u97ed<\u9f4f<\u97f2<\u7adf<\u97f6" +
-                "<\u97f5<\u980f<\u980c<\u9838<\u9824<\u9821<\u9837<\u983d" +
-                "<\u9846<\u984f<\u984b<\u986b<\u986f<\u9870<\u9871<\u9874" +
-                "<\u9873<\u98aa<\u98af<\u98b1<\u98b6<\u98c4<\u98c3<\u98c6" +
-                "<\u98e9<\u98eb<\u9903<\u9909<\u9912<\u9914<\u9918<\u9921" +
-                "<\u991d<\u991e<\u9924<\u9920<\u992c<\u992e<\u993d<\u993e" +
-                "<\u9942<\u9949<\u9945<\u9950<\u994b<\u9951<\u9952<\u994c" +
-                "<\u9955<\u9997<\u9998<\u99a5<\u99ad<\u99ae<\u99bc<\u99df" +
-                "<\u99db<\u99dd<\u99d8<\u99d1<\u99ed<\u99ee<\u99f1<\u99f2" +
-                "<\u99fb<\u99f8<\u9a01<\u9a0f<\u9a05<\u99e2<\u9a19<\u9a2b" +
-                "<\u9a37<\u9a45<\u9a42<\u9a40<\u9a43<\u9a3e<\u9a55<\u9a4d" +
-                "<\u9a5b<\u9a57<\u9a5f<\u9a62<\u9a65<\u9a64<\u9a69<\u9a6b" +
-                "<\u9a6a<\u9aad<\u9ab0<\u9abc<\u9ac0<\u9acf<\u9ad1<\u9ad3" +
-                "<\u9ad4<\u9ade<\u9adf<\u9ae2<\u9ae3<\u9ae6<\u9aef<\u9aeb" +
-                "<\u9aee<\u9af4<\u9af1<\u9af7<\u9afb<\u9b06<\u9b18<\u9b1a" +
-                "<\u9b1f<\u9b22<\u9b23<\u9b25<\u9b27<\u9b28<\u9b29<\u9b2a" +
-                "<\u9b2e<\u9b2f<\u9b32<\u9b44<\u9b43<\u9b4f<\u9b4d<\u9b4e" +
-                "<\u9b51<\u9b58<\u9b74<\u9b93<\u9b83<\u9b91<\u9b96<\u9b97" +
-                "<\u9b9f<\u9ba0<\u9ba8<\u9bb4<\u9bc0<\u9bca<\u9bb9<\u9bc6" +
-                "<\u9bcf<\u9bd1<\u9bd2<\u9be3<\u9be2<\u9be4<\u9bd4<\u9be1" +
-                "<\u9c3a<\u9bf2<\u9bf1<\u9bf0<\u9c15<\u9c14<\u9c09<\u9c13" +
-                "<\u9c0c<\u9c06<\u9c08<\u9c12<\u9c0a<\u9c04<\u9c2e<\u9c1b" +
-                "<\u9c25<\u9c24<\u9c21<\u9c30<\u9c47<\u9c32<\u9c46<\u9c3e" +
-                "<\u9c5a<\u9c60<\u9c67<\u9c76<\u9c78<\u9ce7<\u9cec<\u9cf0" +
-                "<\u9d09<\u9d08<\u9ceb<\u9d03<\u9d06<\u9d2a<\u9d26<\u9daf" +
-                "<\u9d23<\u9d1f<\u9d44<\u9d15<\u9d12<\u9d41<\u9d3f<\u9d3e" +
-                "<\u9d46<\u9d48<\u9d5d<\u9d5e<\u9d64<\u9d51<\u9d50<\u9d59" +
-                "<\u9d72<\u9d89<\u9d87<\u9dab<\u9d6f<\u9d7a<\u9d9a<\u9da4" +
-                "<\u9da9<\u9db2<\u9dc4<\u9dc1<\u9dbb<\u9db8<\u9dba<\u9dc6" +
-                "<\u9dcf<\u9dc2<\u9dd9<\u9dd3<\u9df8<\u9de6<\u9ded<\u9def" +
-                "<\u9dfd<\u9e1a<\u9e1b<\u9e1e<\u9e75<\u9e79<\u9e7d<\u9e81" +
-                "<\u9e88<\u9e8b<\u9e8c<\u9e92<\u9e95<\u9e91<\u9e9d<\u9ea5" +
-                "<\u9ea9<\u9eb8<\u9eaa<\u9ead<\u9761<\u9ecc<\u9ece<\u9ecf" +
-                "<\u9ed0<\u9ed4<\u9edc<\u9ede<\u9edd<\u9ee0<\u9ee5<\u9ee8" +
-                "<\u9eef<\u9ef4<\u9ef6<\u9ef7<\u9ef9<\u9efb<\u9efc<\u9efd" +
-                "<\u9f07<\u9f08<\u76b7<\u9f15<\u9f21<\u9f2c<\u9f3e<\u9f4a" +
-                "<\u9f52<\u9f54<\u9f63<\u9f5f<\u9f60<\u9f61<\u9f66<\u9f67" +
-                "<\u9f6c<\u9f6a<\u9f77<\u9f72<\u9f76<\u9f95<\u9f9c<\u9fa0" +
-                "<\u582f<\u69c7<\u9059<\u7464<\u51dc<\u7199" +
-                //
-                //jisx0213 ideographs
-                //  (1)Level 3 and 4 kanji characters are sorted after jisx0208
-                //     kanji (Level 1 and 2 kanji)
-                //  (2)In each level, characters are sorted by JIS order
-                //  (3)"JIS X 0213 compatibility additions" characters
-                //     0xfa30-0xfa6a have been purposely removed from the rules,
-                //     they will be added later during rule table initialization
-                //     by using the order value of their corresponding canonical
-                //     equivalent.
-                //
-                // jisx0213/level 3 kanji
-                "<\ud840\udc0b<\u3402<\u4e28<\u4e2f<\u4e30<\u4e8d<\u4ee1" +
-                "<\u4efd<\u4eff<\u4f03<\u4f0b<\u4f60<\u4f48<\u4f49<\u4f56" +
-                "<\u4f5f<\u4f6a<\u4f6c<\u4f7e<\u4f8a<\u4f94<\u4f97<\u4fc9" +
-                "<\u4fe0<\u5001<\u5002<\u500e<\u5018<\u5027<\u502e<\u5040" +
-                "<\u503b<\u5041<\u5094<\u50cc<\u50f2<\u50d0<\u50e6<\u5106" +
-                "<\u5103<\u510b<\u511e<\u5135<\u514a<\u5155<\u5157<\u34B5" +
-                "<\u519d<\u51C3<\u51CA<\u51de<\u51e2<\u51ee<\u5201<\u34DB" +
-                "<\u5213<\u5215<\u5249<\u5257<\u5261<\u5293<\u52c8<\u52cc" +
-                "<\u52D0<\u52d6<\u52db<\u52f0<\u52FB<\u5300<\u5307<\u531c" +
-                "<\u5361<\u5363<\u537D<\u5393<\u539d<\u53b2<\u5412<\u5427" +
-                "<\u544d<\u549c<\u546b<\u5474<\u547f<\u5488<\u5496<\u54a1" +
-                "<\u54a9<\u54c6<\u54ff<\u550e<\u552b<\u5535<\u5550<\u555e" +
-                "<\u5581<\u5586<\u558e<\u55ad<\u55ce<\u5608<\u560e<\u563b" +
-                "<\u5649<\u5676<\u5666<\u566f<\u5671<\u5672<\u5699<\u569e" +
-                "<\u56a9<\u56ac<\u56b3<\u56c9<\u56ca<\u570a<\ud844\ude3d" +
-                "<\u5721<\u572f<\u5733<\u5734<\u5770<\u5777<\u577c<\u579c" +
-                "<\ud844\udf1b<\u57b8<\u57c7<\u57c8<\u57cf<\u57e4<\u57ed" +
-                "<\u57f5<\u57f6<\u57ff<\u5809<\u5861<\u5864<\u587c<\u5889" +
-                "<\u589e<\u58a9<\ud845\udc6e<\u58d2<\u58ce<\u58d4<\u58da" +
-                "<\u58E0<\u58e9<\u590c<\u8641<\u595d<\u596d<\u598b<\u5992" +
-                "<\u59a4<\u59c3<\u59d2<\u59dd<\u5a13<\u5a23<\u5a67<\u5a6d" +
-                "<\u5a77<\u5a7e<\u5A84<\u5a9e<\u5aa7<\u5ac4<\ud846\udcbd" +
-                "<\u5b19<\u5b25<\u5b41<\u5b56<\u5b7d<\u5b93<\u5bd8<\u5bec" +
-                "<\u5C12<\u5c1e<\u5c23<\u5c2b<\u378D<\u5c62<\ud845\udeb4" +
-                "<\u5c7a<\u5c8f<\u5c9f<\u5ca3<\u5caa<\u5cba<\u5ccb<\u5CD0" +
-                "<\u5cd2<\u5cf4<\ud847\ude34<\u37E2<\u5d0d<\u5d27<\u5d46" +
-                "<\u5D47<\u5d53<\u5d4a<\u5d6d<\u5d81<\u5da0<\u5DA4<\u5da7" +
-                "<\u5db8<\u5dcb<\u5DE2<\u5e14<\u5e18<\u5e58<\u5e5e<\u5ebe" +
-                "<\u5ecb<\u5EF9<\u5F00<\u5f02<\u5f07<\u5f1d<\u5f23<\u5f34" +
-                "<\u5f36<\u5f3d<\u5f40<\u5f45<\u5f54<\u5f58<\u5f64<\u5f67" +
-                "<\u5f7d<\u5f89<\u5f9c<\u5fa7<\u5faf<\u5FB5<\u5fb7<\u5fc9" +
-                "<\u5fde<\u5fe1<\u5fe9<\u600d<\u6014<\u6018<\u6033<\u6035" +
-                "<\u6047<\u609d<\u609e<\u60cb<\u60d4<\u60d5<\u60dd<\u60f8" +
-                "<\u611c<\u612b<\u6130<\u6137<\u618d<\u61bc<\u61b9<\u6222" +
-                "<\u623E<\u6243<\u6256<\u625a<\u626f<\u6285<\u62c4<\u62d6" +
-                "<\u62fc<\u630a<\u6318<\u6339<\u6343<\u6365<\u637c<\u63e5" +
-                "<\u63ED<\u63f5<\u6410<\u6414<\u6422<\u6479<\u6451<\u6460" +
-                "<\u646d<\u64ce<\u64be<\u64bf<\u64c4<\u64ca<\u64d0<\u64f7" +
-                "<\u64fb<\u6522<\u6529<\u6567<\u659d<\u6600<\u6609<\u6615" +
-                "<\u661e<\u663A<\u6622<\u6624<\u662b<\u6630<\u6631<\u6633" +
-                "<\u66fb<\u6648<\u664c<\ud84c\uddc4<\u6659<\u665A<\u6661" +
-                "<\u6665<\u6673<\u6677<\u6678<\u668d<\u66a0<\u66b2<\u66bb" +
-                "<\u66C6<\u66c8<\u3B22<\u66db<\u66e8<\u66fa<\u6713<\u6733" +
-                "<\u6766<\u6747<\u6748<\u677b<\u6781<\u6793<\u6798<\u679b" +
-                "<\u67bb<\u67f9<\u67c0<\u67d7<\u67FC<\u6801<\u6852<\u681d" +
-                "<\u682c<\u6831<\u685b<\u6872<\u6875<\u68a3<\u68a5<\u68b2" +
-                "<\u68c8<\u68d0<\u68e8<\u68ed<\u68f0<\u68f1<\u68fc<\u690a" +
-                "<\u6949<\ud84d\uddc4<\u6935<\u6942<\u6957<\u6963<\u6964" +
-                "<\u6968<\u6980<\u69a5<\u69ad<\u69CF<\u3BB6<\u3BC3<\u69e2" +
-                "<\u69E9<\u69f5<\u69F6<\u6a0f<\u6a15<\ud84d\udf3f<\u6a3b" +
-                "<\u6a3e<\u6a45<\u6a50<\u6a56<\u6a5b<\u6a6b<\u6a73<\ud84d\udf63" +
-                "<\u6a89<\u6A94<\u6a9d<\u6a9e<\u6aa5<\u6ae4<\u6ae7<\u3C0F" +
-                "<\u6b1b<\u6b1e<\u6b2c<\u6b35<\u6b46<\u6b56<\u6b60<\u6B65" +
-                "<\u6b67<\u6B77<\u6b82<\u6ba9<\u6bad<\u6BCF<\u6bd6<\u6BD7" +
-                "<\u6bff<\u6c05<\u6c10<\u6c33<\u6c59<\u6c5c<\u6CAA<\u6c74" +
-                "<\u6c76<\u6c85<\u6c86<\u6c98<\u6c9c<\u6CFB<\u6cc6<\u6cd4" +
-                "<\u6ce0<\u6ceb<\u6cee<\ud84f\udcfe<\u6d04<\u6d0e<\u6d2e" +
-                "<\u6d31<\u6d39<\u6d3f<\u6D58<\u6d65<\u6d82<\u6d87<\u6D89" +
-                "<\u6d94<\u6daa<\u6dac<\u6dbf<\u6dc4<\u6dd6<\u6DDA<\u6ddb" +
-                "<\u6ddd<\u6dfc<\u6E34<\u6e44<\u6e5c<\u6e5e<\u6EAB<\u6eb1" +
-                "<\u6ec1<\u6ec7<\u6ece<\u6F10<\u6f1a<\u6f2a<\u6f2f<\u6f33" +
-                "<\u6f51<\u6f59<\u6f5e<\u6f61<\u6f62<\u6f7e<\u6f88<\u6f8c" +
-                "<\u6f8d<\u6f94<\u6fa0<\u6fa7<\u6fb6<\u6fbc<\u6fc7<\u6fca" +
-                "<\u6ff9<\u6ff0<\u6ff5<\u7005<\u7006<\u7028<\u704a<\u705d" +
-                "<\u705e<\u704e<\u7064<\u7075<\u7085<\u70a4<\u70ab<\u70b7" +
-                "<\u70d4<\u70d8<\u70e4<\u710f<\u712b<\u711e<\u7120<\u712E" +
-                "<\u7130<\u7146<\u7147<\u7151<\u7152<\u715c<\u7160<\u7168" +
-                "<\u7185<\u7187<\u7192<\u71c1<\u71ba<\u71c4<\u71fe<\u7200" +
-                "<\u7215<\u7255<\u7256<\u3E3F<\u728d<\u729b<\u72be<\u72C0" +
-                "<\u72fb<\ud851\udff1<\u7327<\u7328<\u7350<\u7366<\u737c" +
-                "<\u7395<\u739f<\u73a0<\u73a2<\u73a6<\u73ab<\u73c9<\u73cf" +
-                "<\u73d6<\u73d9<\u73e3<\u73e9<\u7407<\u740a<\u741a<\u741b" +
-                "<\u7426<\u7428<\u742a<\u742b<\u742c<\u742e<\u742f<\u7430" +
-                "<\u7444<\u7446<\u7447<\u744b<\u7457<\u7462<\u746b<\u746d" +
-                "<\u7486<\u7487<\u7489<\u7498<\u749c<\u749f<\u74a3<\u7490" +
-                "<\u74a6<\u74a8<\u74a9<\u74b5<\u74bf<\u74c8<\u74c9<\u74da" +
-                "<\u74ff<\u7501<\u7517<\u752f<\u756f<\u7579<\u7592<\u3F72" +
-                "<\u75ce<\u75e4<\u7600<\u7602<\u7608<\u7615<\u7616<\u7619" +
-                "<\u761e<\u762d<\u7635<\u7643<\u764b<\u7664<\u7665<\u766d" +
-                "<\u766f<\u7671<\u7681<\u769b<\u769d<\u769e<\u76a6<\u76aa" +
-                "<\u76B6<\u76c5<\u76cc<\u76ce<\u76d4<\u76e6<\u76f1<\u76fc" +
-                "<\u770a<\u7719<\u7734<\u7736<\u7746<\u774d<\u774e<\u775c" +
-                "<\u775f<\u7762<\u777a<\u7780<\u7794<\u77aa<\u77e0<\u782d" +
-                "<\ud855\udc8e<\u7843<\u784e<\u784F<\u7851<\u7868<\u786e" +
-                "<\u78b0<\ud855\udd0e<\u78ad<\u78e4<\u78f2<\u7900<\u78f7" +
-                "<\u791c<\u792E<\u7931<\u7934<\u7945<\u7946<\u795c<\u7979" +
-                "<\u7998<\u79b1<\u79b8<\u79c8<\u79ca<\ud855\udf71<\u79d4" +
-                "<\u79de<\u79eb<\u79ed<\u7a03<\u7a39<\u7a5d<\u7a6d<\u7a85" +
-                "<\u7aa0<\ud856\uddc4<\u7ab3<\u7abb<\u7ace<\u7aeb<\u7afd" +
-                "<\u7B12<\u7b2d<\u7B3B<\u7b47<\u7b4e<\u7b60<\u7b6d<\u7b6f" +
-                "<\u7b72<\u7b9e<\u7bd7<\u7bd9<\u7c01<\u7c31<\u7C1E<\u7c20" +
-                "<\u7c33<\u7c36<\u4264<\ud857\udda1<\u7c59<\u7c6d<\u7c79" +
-                "<\u7c8f<\u7c94<\u7ca0<\u7cbc<\u7cd5<\u7cd9<\u7cdd<\u7d07" +
-                "<\u7d08<\u7d13<\u7d1d<\u7d23<\u7d31<\u7d41<\u7d48<\u7d53" +
-                "<\u7d5c<\u7d7a<\u7d83<\u7d8b<\u7da0<\u7da6<\u7dc2<\u7dcc" +
-                "<\u7dd6<\u7DE3<\u7e28<\u7e08<\u7e11<\u7e15<\u7e47<\u7e52" +
-                "<\u7e61<\u7e8a<\u7e8d<\u7f47<\u7f91<\u7f97<\u7fbf<\u7fce" +
-                "<\u7fdb<\u7fdf<\u7fec<\u7fee<\u7ffa<\u8014<\u8026<\u8035" +
-                "<\u8037<\u803c<\u80CA<\u80d7<\u80e0<\u80f3<\u8118<\u814a" +
-                "<\u8160<\u8167<\u8168<\u816d<\u81bb<\u81ca<\u81cf<\u81d7" +
-                "<\u4453<\u445B<\u8260<\u8274<\ud85a\udeff<\u828e<\u82a1" +
-                "<\u82a3<\u82a4<\u82a9<\u82ae<\u82b7<\u82be<\u82bf<\u82c6" +
-                "<\u82d5<\u82fd<\u82fe<\u8300<\u8301<\u8362<\u8322<\u832d" +
-                "<\u833a<\u8343<\u8347<\u8351<\u8355<\u837d<\u8386<\u8392" +
-                "<\u8398<\u83a7<\u83a9<\u83bf<\u83c0<\u83c7<\u83cf<\u83d1" +
-                "<\u83E1<\u83ea<\u8401<\u8406<\u840a<\u8448<\u845F<\u8470" +
-                "<\u8473<\u8485<\u849e<\u84af<\u84b4<\u84ba<\u84c0<\u84c2" +
-                "<\ud85b\ude40<\u8532<\u851e<\u8523<\u852f<\u8559<\u8564" +
-                "<\u85ad<\u857a<\u858c<\u858f<\u85a2<\u85b0<\u85cb<\u85ce" +
-                "<\u85ed<\u8612<\u85ff<\u8604<\u8605<\u8610<\ud85c\udcf4" +
-                "<\u8618<\u8629<\u8638<\u8657<\u865B<\u8662<\u459D<\u866c" +
-                "<\u8675<\u8698<\u86b8<\u86fa<\u86fc<\u86fd<\u870b<\u8771" +
-                "<\u8787<\u8788<\u87ac<\u87ad<\u87b5<\u45EA<\u87d6<\u87EC" +
-                "<\u8806<\u880a<\u8810<\u8814<\u881f<\u8898<\u88aa<\u88ca" +
-                "<\u88ce<\ud85d\ude84<\u88f5<\u891c<\u8918<\u8919<\u891a" +
-                "<\u8927<\u8930<\u8932<\u8939<\u8940<\u8994<\u89d4<\u89e5" +
-                "<\u89f6<\u8a12<\u8a15<\u8a22<\u8a37<\u8a47<\u8a4e<\u8a5d" +
-                "<\u8a61<\u8a75<\u8a79<\u8aa7<\u8AD0<\u8adf<\u8af4<\u8af6" +
-                "<\u8b46<\u8b54<\u8b59<\u8B69<\u8B9D<\u8c49<\u8c68<\u8ce1" +
-                "<\u8cf4<\u8cf8<\u8cfe<\u8d12<\u8d1b<\u8daf<\u8dce<\u8dd1" +
-                "<\u8dd7<\u8e20<\u8e23<\u8e3d<\u8e70<\u8e7b<\ud860\ude77" +
-                "<\u8ec0<\u4844<\u8efa<\u8f1e<\u8f2d<\u8f36<\u8f54<\ud860\udfcd" +
-                "<\u8fa6<\u8fb5<\u8fe4<\u8fe8<\u8fee<\u9008<\u902d<\u9088" +
-                "<\u9095<\u9097<\u9099<\u909b<\u90a2<\u90b3<\u90be<\u90c4" +
-                "<\u90c5<\u90c7<\u90d7<\u90dd<\u90de<\u90ef<\u90f4<\u9114" +
-                "<\u9115<\u9116<\u9122<\u9123<\u9127<\u912f<\u9131<\u9134" +
-                "<\u913d<\u9148<\u915b<\u9183<\u919e<\u91ac<\u91b1<\u91bc" +
-                "<\u91d7<\u91fb<\u91e4<\u91e5<\u91ed<\u91f1<\u9207<\u9210" +
-                "<\u9238<\u9239<\u923a<\u923c<\u9240<\u9243<\u924f<\u9278" +
-                "<\u9288<\u92c2<\u92cb<\u92cc<\u92d3<\u92e0<\u92ff<\u9304" +
-                "<\u931f<\u9321<\u9325<\u9348<\u9349<\u934A<\u9364<\u9365" +
-                "<\u936a<\u9370<\u939b<\u93a3<\u93ba<\u93c6<\u93de<\u93df" +
-                "<\u9404<\u93fd<\u9433<\u944a<\u9463<\u946b<\u9471<\u9472" +
-                "<\u958e<\u959f<\u95a6<\u95a9<\u95ac<\u95b6<\u95bd<\u95cb" +
-                "<\u95d0<\u95d3<\u49B0<\u95da<\u95de<\u9658<\u9684<\u969d" +
-                "<\u96a4<\u96a5<\u96d2<\u96de<\u96e9<\u96ef<\u9733<\u973b" +
-                "<\u974d<\u974e<\u974f<\u975a<\u976e<\u9773<\u9795<\u97ae" +
-                "<\u97ba<\u97c1<\u97c9<\u97de<\u97db<\u97f4<\u980a<\u981e" +
-                "<\u982b<\u9830<\u9852<\u9853<\u9856<\u9857<\u9859<\u985a" +
-                "<\u9865<\u986c<\u98ba<\u98c8<\u98e7<\u9958<\u999e<\u9a02" +
-                "<\u9a03<\u9a24<\u9a2d<\u9a2e<\u9a38<\u9a4a<\u9a4e<\u9A52" +
-                "<\u9ab6<\u9ac1<\u9ac3<\u9ace<\u9ad6<\u9af9<\u9b02<\u9b08" +
-                "<\u9b20<\u4C17<\u9b2d<\u9b5e<\u9b79<\u9b66<\u9b72<\u9b75" +
-                "<\u9b84<\u9b8a<\u9b8f<\u9b9e<\u9ba7<\u9bc1<\u9bce<\u9be5" +
-                "<\u9bf8<\u9bfd<\u9c00<\u9c23<\u9c41<\u9c4f<\u9c50<\u9c53" +
-                "<\u9c63<\u9C65<\u9c77<\u9d1d<\u9d1e<\u9d43<\u9d47<\u9D52" +
-                "<\u9d63<\u9d70<\u9d7c<\u9d8a<\u9d96<\u9DC0<\u9dac<\u9dbc" +
-                "<\u9dd7<\ud868\udd90<\u9de7<\u9e07<\u9e15<\u9e7c<\u9e9e" +
-                "<\u9ea4<\u9eac<\u9eaf<\u9eb4<\u9eb5<\u9EC3<\u9ed1<\u9f10" +
-                "<\u9f39<\u9f57<\u9f90<\u9f94<\u9f97<\u9fa2" +
-                // jisx0213/level 4 kanji
-                "<\ud840\udc89<\u4e02<\u4E0F<\u4e12<\u4E29<\u4e2b<\u4e2e" +
-                "<\u4e40<\u4e47<\u4E48<\ud840\udca2<\u4e51<\u3406<\ud840\udca4" +
-                "<\u4e5a<\u4e69<\u4e9d<\u342C<\u342E<\u4eb9<\u4EBB<\ud840\udda2" +
-                "<\u4EBC<\u4ec3<\u4EC8<\u4ed0<\u4EEB<\u4eda<\u4ef1<\u4ef5" +
-                "<\u4f00<\u4f16<\u4F64<\u4f37<\u4f3e<\u4f54<\u4f58<\ud840\ude13" +
-                "<\u4f77<\u4f78<\u4f7a<\u4f7d<\u4f82<\u4f85<\u4f92<\u4f9a" +
-                "<\u4FE6<\u4fb2<\u4fbe<\u4fc5<\u4fcb<\u4fcf<\u4fd2<\u346A" +
-                "<\u4ff2<\u5000<\u5010<\u5013<\u501c<\u501e<\u5022<\u3468" +
-                "<\u5042<\u5046<\u504e<\u5053<\u5057<\u5063<\u5066<\u506a" +
-                "<\u5070<\u50A3<\u5088<\u5092<\u5093<\u5095<\u5096<\u509c" +
-                "<\u50aa<\ud840\udf2b<\u50B1<\u50ba<\u50BB<\u50c4<\u50c7" +
-                "<\u50F3<\ud840\udf81<\u50ce<\ud840\udf71<\u50d4<\u50D9" +
-                "<\u50E1<\u50e9<\u3492<\u5108<\ud840\udff9<\u5117<\u511b" +
-                "<\ud841\udc4a<\u5160<\ud841\udd09<\u5173<\u5183<\u518b" +
-                "<\u34BC<\u5198<\u51a3<\u51ad<\u34C7<\u51bc<\ud841\uddd6" +
-                "<\ud841\ude28<\u51f3<\u51f4<\u5202<\u5212<\u5216<\ud841\udf4f" +
-                "<\u5255<\u525c<\u526C<\u5277<\u5284<\u5282<\ud842\udc07" +
-                "<\u5298<\ud842\udc3a<\u52a4<\u52a6<\u52af<\u52ba<\u52bb" +
-                "<\u52CA<\u351F<\u52d1<\ud842\udcb9<\u52f7<\u530a<\u530b" +
-                "<\u5324<\u5335<\u533e<\u5342<\ud842\udd7c<\ud842\udd9d" +
-                "<\u5367<\u536c<\u537A<\u53a4<\u53b4<\ud842\uded3<\u53b7" +
-                "<\u53c0<\ud842\udf1d<\u355D<\u355E<\u53d5<\u53da<\u3563" +
-                "<\u53F4<\u53f5<\u5455<\u5424<\u5428<\u356E<\u5443<\u5462" +
-                "<\u5466<\u546C<\u548a<\u548d<\u5495<\u54A0<\u54a6<\u54ad" +
-                "<\u54ae<\u54b7<\u54ba<\u54bf<\u54C3<\ud843\udd45<\u54ec" +
-                "<\u54ef<\u54F1<\u54F3<\u5500<\u5501<\u5509<\u553c<\u5541" +
-                "<\u35A6<\u5547<\u554a<\u35A8<\u5560<\u5561<\u5564<\ud843\udde1" +
-                "<\u557D<\u5582<\u5588<\u5591<\u35C5<\u55d2<\ud843\ude95" +
-                "<\ud843\ude6d<\u55bf<\u55c9<\u55cc<\u55d1<\u55DD<\u35DA" +
-                "<\u55e2<\ud843\ude64<\u55e9<\u5628<\ud843\udf5f<\u5607" +
-                "<\u5610<\u5630<\u5637<\u35F4<\u563d<\u563f<\u5640<\u5647" +
-                "<\u565e<\u5660<\u566d<\u3605<\u5688<\u568c<\u5695<\u569a" +
-                "<\u569d<\u56a8<\u56ad<\u56B2<\u56c5<\u56cd<\u56df<\u56e8" +
-                "<\u56f6<\u56f7<\ud844\ude01<\u5715<\u5723<\ud844\ude55" +
-                "<\u5729<\ud844\ude7b<\u5745<\u5746<\u574c<\u574d<\ud844\ude74" +
-                "<\u5768<\u576f<\u5773<\u5774<\u5775<\u577b<\ud844\udee4" +
-                "<\ud844\uded7<\u57ac<\u579a<\u579d<\u579e<\u57a8<\u57D7" +
-                "<\ud844\udefd<\u57cc<\ud844\udf36<\ud844\udf44<\u57de" +
-                "<\u57e6<\u57f0<\u364A<\u57f8<\u57FB<\u57fd<\u5804<\u581e" +
-                "<\u5820<\u5827<\u5832<\u5839<\ud844\udfc4<\u5849<\u584c" +
-                "<\u5867<\u588a<\u588B<\u588d<\u588f<\u5890<\u5894<\u589d" +
-                "<\u58AA<\u58b1<\ud845\udc6d<\u58C3<\u58cd<\u58e2<\u58f3" +
-                "<\u58F4<\u5905<\u5906<\u590b<\u590D<\u5914<\u5924<\ud845\uddd7" +
-                "<\u3691<\u593D<\u3699<\u5946<\u3696<\ud85b\udc29<\u595b" +
-                "<\u595f<\ud845\ude47<\u5975<\u5976<\u597c<\u599f<\u59ae" +
-                "<\u59bc<\u59c8<\u59cd<\u59de<\u59e3<\u59e4<\u59e7<\u59ee" +
-                "<\ud845\udf06<\ud845\udf42<\u36CF<\u5a0c<\u5a0d<\u5A17" +
-                "<\u5a27<\u5a2d<\u5a55<\u5a65<\u5a7a<\u5a8b<\u5a9c<\u5a9f" +
-                "<\u5aa0<\u5aa2<\u5ab1<\u5ab3<\u5ab5<\u5aba<\u5abf<\u5ada" +
-                "<\u5adc<\u5ae0<\u5ae5<\u5AF0<\u5aee<\u5af5<\u5b00<\u5b08" +
-                "<\u5b17<\u5b34<\u5b2d<\u5b4c<\u5b52<\u5b68<\u5b6f<\u5b7c" +
-                "<\u5b7f<\u5b81<\u5b84<\ud846\uddc3<\u5b96<\u5bac<\u3761" +
-                "<\u5bc0<\u3762<\u5BCE<\u5bd6<\u376C<\u376B<\u5bf1<\u5bfd" +
-                "<\u3775<\u5C03<\u5c29<\u5c30<\ud847\udc56<\u5C5F<\u5c63" +
-                "<\u5c67<\u5c68<\u5c69<\u5c70<\ud847\udd2d<\ud847\udd45" +
-                "<\u5c7c<\ud847\udd78<\ud847\udd62<\u5c88<\u5c8a<\u37C1" +
-                "<\ud847\udda1<\ud847\udd9c<\u5ca0<\u5ca2<\u5ca6<\u5CA7" +
-                "<\ud847\udd92<\u5CAD<\u5cb5<\ud847\uddb7<\u5cc9<\ud847\udde0" +
-                "<\ud847\ude33<\u5d06<\u5D10<\u5d2b<\u5D1D<\u5D20<\u5d24" +
-                "<\u5d26<\u5d31<\u5d39<\u5d42<\u37E8<\u5d61<\u5d6a<\u37F4" +
-                "<\u5d70<\ud847\udf1e<\u37FD<\u5d88<\u3800<\u5d92<\u5d94" +
-                "<\u5D97<\u5d99<\u5db0<\u5db2<\u5db4<\ud847\udf76<\u5db9" +
-                "<\u5DD1<\u5DD7<\u5dd8<\u5de0<\ud847\udffa<\u5de4<\u5de9" +
-                "<\u382F<\u5e00<\u3836<\u5e12<\u5e15<\u3840<\u5e1f<\u5e2e" +
-                "<\u5e3e<\u5e49<\u385C<\u5e56<\u3861<\u5e6b<\u5e6c<\u5e6d" +
-                "<\u5e6e<\ud848\udd7b<\u5ea5<\u5eaa<\u5eac<\u5EB9<\u5ebf" +
-                "<\u5ec6<\u5ed2<\u5ED9<\ud848\udf1e<\u5EFD<\u5f08<\u5f0e" +
-                "<\u5f1c<\ud848\udfad<\u5F1E<\u5f47<\u5f63<\u5f72<\u5f7e" +
-                "<\u5f8f<\u5fa2<\u5fa4<\u5fb8<\u5fc4<\u38FA<\u5fc7<\u5fcb" +
-                "<\u5fd2<\u5fd3<\u5fd4<\u5fe2<\u5fee<\u5fef<\u5ff3<\u5ffc" +
-                "<\u3917<\u6017<\u6022<\u6024<\u391A<\u604c<\u607f<\u608a" +
-                "<\u6095<\u60a8<\ud849\udef3<\u60b0<\u60b1<\u60be<\u60c8" +
-                "<\u60d9<\u60db<\u60EE<\u60f2<\u60f5<\u6110<\u6112<\u6113" +
-                "<\u6119<\u611e<\u613A<\u396F<\u6141<\u6146<\u6160<\u617c" +
-                "<\ud84a\udc5b<\u6192<\u6193<\u6197<\u6198<\u61a5<\u61a8" +
-                "<\u61ad<\ud84a\udcab<\u61d5<\u61dd<\u61df<\u61F5<\ud84a\udd8f" +
-                "<\u6215<\u6223<\u6229<\u6246<\u624c<\u6251<\u6252<\u6261" +
-                "<\u6264<\u627B<\u626d<\u6273<\u6299<\u62a6<\u62d5<\ud84a\udeb8" +
-                "<\u62fd<\u6303<\u630d<\u6310<\ud84a\udf4f<\ud84a\udf50" +
-                "<\u6332<\u6335<\u633B<\u633c<\u6341<\u6344<\u634e<\ud84a\udf46" +
-                "<\u6359<\ud84b\udc1d<\ud84a\udfa6<\u636c<\u6384<\u6399" +
-                "<\ud84b\udc24<\u6394<\u63bd<\u63F7<\u63d4<\u63d5<\u63dc" +
-                "<\u63e0<\u63EB<\u63ec<\u63f2<\u6409<\u641e<\u6425<\u6429" +
-                "<\u642f<\u645a<\u645b<\u645d<\u6473<\u647d<\u6487<\u6491" +
-                "<\u649d<\u649f<\u64cb<\u64cc<\u64d5<\u64d7<\ud84b\udde1" +
-                "<\u64e4<\u64e5<\u64ff<\u6504<\u3A6E<\u650f<\u6514<\u6516" +
-                "<\u3A73<\u651e<\u6532<\u6544<\u6554<\u656b<\u657a<\u6581" +
-                "<\u6584<\u6585<\u658a<\u65b2<\u65B5<\u65B8<\u65bf<\u65c2" +
-                "<\u65c9<\u65d4<\u3AD6<\u65f2<\u65f9<\u65FC<\u6604<\u6608" +
-                "<\u6621<\u662a<\u6645<\u6651<\u664e<\u3AEA<\ud84c\uddc3" +
-                "<\u6657<\u665b<\u6663<\ud84c\uddf5<\ud84c\uddb6<\u666a" +
-                "<\u666b<\u666c<\u666D<\u667b<\u6680<\u6690<\u6692<\u6699" +
-                "<\u3B0E<\u66ad<\u66b1<\u66b5<\u3B1A<\u66bf<\u3B1C<\u66ec" +
-                "<\u3AD7<\u6701<\u6705<\u6712<\ud84c\udf72<\u6719<\ud84c\udfd3" +
-                "<\ud84c\udfd2<\u674c<\u674D<\u6754<\u675d<\ud84c\udfd0" +
-                "<\ud84c\udfe4<\ud84c\udfd5<\u6774<\u6776<\ud84c\udfda" +
-                "<\u6792<\ud84c\udfdf<\u8363<\u6810<\u67b0<\u67b2<\u67c3" +
-                "<\u67c8<\u67d2<\u67d9<\u67DB<\u67f0<\u67f7<\ud84d\udc4a" +
-                "<\ud84d\udc51<\ud84d\udc4b<\u6818<\u681f<\u682d<\ud84d\udc65" +
-                "<\u6833<\u683b<\u683E<\u6844<\u6845<\u6849<\u684c<\u6855" +
-                "<\u6857<\u3B77<\u686b<\u686e<\u687a<\u687c<\u6882<\u6890" +
-                "<\u6896<\u3B6D<\u6898<\u6899<\u689a<\u689c<\u68aa<\u68AB" +
-                "<\u68B4<\u68bb<\u68fb<\ud84d\udce4<\ud84d\udd5a<\u68C3" +
-                "<\u68c5<\u68cc<\u68cf<\u68d6<\u68d9<\u68E4<\u68e5<\u68ec" +
-                "<\u68F7<\u6903<\u6907<\u3B87<\u3B88<\ud84d\udd94<\u693b" +
-                "<\u3B8D<\u6946<\u6969<\u696c<\u6972<\u697a<\u697f<\u6992" +
-                "<\u3BA4<\u6996<\u6998<\u69a6<\u69B0<\u69b7<\u69ba<\u69bc" +
-                "<\u69C0<\u69d1<\u69d6<\ud84d\ude39<\ud84d\ude47<\u6a30" +
-                "<\ud84d\ude38<\ud84d\ude3a<\u69E3<\u69ee<\u69ef<\u69f3" +
-                "<\u3BCD<\u69F4<\u69fe<\u6a11<\u6a1a<\u6a1d<\ud84d\udf1c" +
-                "<\u6a32<\u6A33<\u6a34<\u6a3f<\u6a46<\u6a49<\u6A7A<\u6a4e" +
-                "<\u6a52<\u6a64<\ud84d\udf0c<\u6a7e<\u6a83<\u6a8b<\u3BF0" +
-                "<\u6a91<\u6a9f<\u6AA1<\ud84d\udf64<\u6aab<\u6abd<\u6ac6" +
-                "<\u6ad4<\u6ad0<\u6adc<\u6add<\ud84d\udfff<\ud84d\udfe7" +
-                "<\u6aec<\u6af1<\u6af2<\u6AF3<\u6afd<\ud84e\udc24<\u6B0B" +
-                "<\u6b0f<\u6b10<\u6b11<\ud84e\udc3d<\u6b17<\u3C26<\u6b2f" +
-                "<\u6b4a<\u6b58<\u6B6C<\u6b75<\u6B7A<\u6B81<\u6b9b<\u6bae" +
-                "<\ud84e\ude98<\u6bbd<\u6bbe<\u6BC7<\u6BC8<\u6bc9<\u6bda" +
-                "<\u6be6<\u6be7<\u6bee<\u6bf1<\u6c02<\u6C0A<\u6c0e<\u6c35" +
-                "<\u6c36<\u6c3a<\ud84f\udc7f<\u6c3f<\u6c4d<\u6c5b<\u6c6d" +
-                "<\u6C84<\u6c89<\u3CC3<\u6c94<\u6c95<\u6c97<\u6CAD<\u6cc2" +
-                "<\u6cd0<\u3CD2<\u6cd6<\u6cda<\u6cdc<\u6ce9<\u6cec<\u6CED" +
-                "<\ud84f\udd00<\u6D00<\u6d0a<\u6D24<\u6d26<\u6d27<\u6c67" +
-                "<\u6d2f<\u6d3c<\u6D5B<\u6d5e<\u6D60<\u6d70<\u6D80<\u6D81" +
-                "<\u6D8A<\u6D8D<\u6d91<\u6d98<\ud84f\udd40<\u6E17<\ud84f\uddfa" +
-                "<\ud84f\uddf9<\ud84f\uddd3<\u6DAB<\u6DAE<\u6db4<\u6DC2" +
-                "<\u6D34<\u6dc8<\u6dce<\u6dcf<\u6DD0<\u6ddf<\u6de9<\u6df6" +
-                "<\u6e36<\u6e1e<\u6e22<\u6e27<\u3D11<\u6e32<\u6e3c<\u6e48" +
-                "<\u6e49<\u6e4b<\u6E4C<\u6e4f<\u6e51<\u6e53<\u6e54<\u6e57" +
-                "<\u6e63<\u3D1E<\u6e93<\u6ea7<\u6EB4<\u6ebf<\u6ec3<\u6eca" +
-                "<\u6ED9<\u6F35<\u6eeb<\u6ef9<\u6efb<\u6f0a<\u6f0c<\u6f18" +
-                "<\u6F25<\u6f36<\u6f3c<\ud84f\udf7e<\u6f52<\u6f57<\u6f5a" +
-                "<\u6F60<\u6f68<\u6F98<\u6f7d<\u6f90<\u6f96<\u6FBE<\u6f9f" +
-                "<\u6fa5<\u6faf<\u3D64<\u6fb5<\u6fc8<\u6FC9<\u6fda<\u6fde" +
-                "<\u6fe9<\ud850\udc96<\u6ffc<\u7000<\u7007<\u700A<\u7023" +
-                "<\ud850\udd03<\u7039<\u703A<\u703c<\u7043<\u7047<\u704b" +
-                "<\u3D9A<\u7054<\u7065<\u7069<\u706c<\u706e<\u7076<\u707e" +
-                "<\u7081<\u7086<\u7095<\u7097<\u70bb<\ud850\uddc6<\u709F" +
-                "<\u70b1<\ud850\uddfe<\u70EC<\u70ca<\u70d1<\u70d3<\u70dc" +
-                "<\u7103<\u7104<\u7106<\u7107<\u7108<\u710c<\u3DC0<\u712f" +
-                "<\u7131<\u7150<\u714a<\u7153<\u715e<\u3DD4<\u7196<\u7180" +
-                "<\u719b<\u71a0<\u71a2<\u71AE<\u71af<\u71b3<\ud850\udfbc" +
-                "<\u71cb<\u71d3<\u71d9<\u71dc<\u7207<\u3E05<\u722b<\u7234" +
-                "<\u7238<\u7239<\u4E2C<\u7242<\u7253<\u7257<\u7263<\ud851\ude29" +
-                "<\u726e<\u726f<\u7278<\u727f<\u728e<\ud851\udea5<\u72ad" +
-                "<\u72ae<\u72B0<\u72b1<\u72c1<\u3E60<\u72cc<\u3E66<\u3E68" +
-                "<\u72f3<\u72fa<\u7307<\u7312<\u7318<\u7319<\u3E83<\u7339" +
-                "<\u732c<\u7331<\u7333<\u733d<\u7352<\u3E94<\u736b<\u736c" +
-                "<\ud852\udc96<\u736e<\u736f<\u7371<\u7377<\u7381<\u7385" +
-                "<\u738A<\u7394<\u7398<\u739c<\u739e<\u73a5<\u73A8<\u73b5" +
-                "<\u73b7<\u73b9<\u73bc<\u73bf<\u73c5<\u73cb<\u73e1<\u73e7" +
-                "<\u73f9<\u7413<\u73fa<\u7401<\u7424<\u7431<\u7439<\u7453" +
-                "<\u7440<\u7443<\u744d<\u7452<\u745d<\u7471<\u7481<\u7485" +
-                "<\u7488<\ud852\ude4d<\u7492<\u7497<\u7499<\u74a0<\u74a1" +
-                "<\u74A5<\u74aa<\u74ab<\u74b9<\u74bb<\u74BA<\u74D6<\u74d8" +
-                "<\u74de<\u74ef<\u74eb<\ud852\udf56<\u74fa<\ud852\udf6f" +
-                "<\u7520<\u7524<\u752a<\u3F57<\ud853\udc16<\u753d<\u753e" +
-                "<\u7540<\u7548<\u754e<\u7550<\u7552<\u756C<\u7572<\u7571" +
-                "<\u757a<\u757d<\u757e<\u7581<\ud853\udd14<\u758C<\u3F75" +
-                "<\u75a2<\u3F77<\u75B0<\u75B7<\u75bf<\u75c0<\u75c6<\u75cf" +
-                "<\u75D3<\u75DD<\u75df<\u75e0<\u75e7<\u75ec<\u75ee<\u75f1" +
-                "<\u75f9<\u7603<\u7618<\u7607<\u760f<\u3FAE<\ud853\ude0e" +
-                "<\u7613<\u761b<\u761c<\ud853\ude37<\u7625<\u7628<\u763c" +
-                "<\u7633<\ud853\ude6a<\u3FC9<\u7641<\ud853\ude8b<\u7649" +
-                "<\u7655<\u3FD7<\u766e<\u7695<\u769c<\u76A1<\u76a0<\u76a7" +
-                "<\u76a8<\u76AF<\ud854\udc4a<\u76c9<\ud854\udc55<\u76e8" +
-                "<\u76ec<\ud854\udd22<\u7717<\u771a<\u772d<\u7735<\ud854\udda9" +
-                "<\u4039<\ud854\udde5<\ud854\uddcd<\u7758<\u7760<\u776a" +
-                "<\ud854\ude1e<\u7772<\u777C<\u777d<\ud854\ude4c<\u4058" +
-                "<\u779a<\u779f<\u77a2<\u77A4<\u77A9<\u77de<\u77df<\u77e4" +
-                "<\u77e6<\u77ea<\u77ec<\u4093<\u77f0<\u77f4<\u77fb<\ud855\udc2e" +
-                "<\u7805<\u7806<\u7809<\u780d<\u7819<\u7821<\u782C<\u7847" +
-                "<\u7864<\u786a<\ud855\udcd9<\u788a<\u7894<\u78a4<\u789d" +
-                "<\u789e<\u789f<\u78bb<\u78c8<\u78cc<\u78ce<\u78d5<\u78e0" +
-                "<\u78e1<\u78e6<\u78F9<\u78fa<\u78fb<\u78FE<\ud855\udda7" +
-                "<\u7910<\u791B<\u7930<\u7925<\u793b<\u794a<\u7958<\u795b" +
-                "<\u4105<\u7967<\u7972<\u7994<\u7995<\u7996<\u799b<\u79a1" +
-                "<\u79a9<\u79b4<\u79bb<\u79c2<\u79c7<\u79CC<\u79CD<\u79d6" +
-                "<\u4148<\ud855\udfa9<\ud855\udfb4<\u414F<\u7a0a<\u7a11" +
-                "<\u7a15<\u7a1b<\u7a1e<\u4163<\u7a2d<\u7a38<\u7a47<\u7a4c" +
-                "<\u7a56<\u7a59<\u7a5c<\u7a5f<\u7a60<\u7a67<\u7a6a<\u7a75" +
-                "<\u7a78<\u7a82<\u7a8a<\u7a90<\u7aa3<\u7aac<\ud856\uddd4" +
-                "<\u41B4<\u7ab9<\u7abc<\u7ABE<\u41BF<\u7acc<\u7ad1<\u7ae7" +
-                "<\u7ae8<\u7af4<\ud856\udee4<\ud856\udee3<\u7b07<\ud856\udef1" +
-                "<\u7b3d<\u7b27<\u7b2a<\u7b2e<\u7b2f<\u7b31<\u41E6<\u41F3" +
-                "<\u7B7F<\u7b41<\u41EE<\u7b55<\u7B79<\u7b64<\u7b66<\u7b69" +
-                "<\u7b73<\ud856\udfb2<\u4207<\u7b90<\u7b91<\u7b9b<\u420E" +
-                "<\u7baf<\u7bb5<\u7bbc<\u7bc5<\u7bca<\ud857\udc4b<\ud857\udc64" +
-                "<\u7bd4<\u7bd6<\u7bda<\u7bea<\u7BF0<\u7c03<\u7c0b<\u7c0e" +
-                "<\u7c0f<\u7c26<\u7C45<\u7c4a<\u7c51<\u7C57<\u7c5e<\u7c61" +
-                "<\u7c69<\u7c6e<\u7C6F<\u7c70<\ud857\ude2e<\ud857\ude56" +
-                "<\ud857\ude65<\u7ca6<\ud857\ude62<\u7cb6<\u7cb7<\u7cbf" +
-                "<\ud857\uded8<\u7cc4<\ud857\udec2<\u7cc8<\u7ccd<\ud857\udee8" +
-                "<\u7cd7<\ud857\udf23<\u7ce6<\u7ceb<\ud857\udf5c<\u7cf5" +
-                "<\u7d03<\u7d09<\u42C6<\u7d12<\u7d1e<\ud857\udfe0<\ud857\udfd4" +
-                "<\u7d3d<\u7d3e<\u7d40<\u7d47<\ud858\udc0c<\ud857\udffb" +
-                "<\u42D6<\u7d59<\u7d5a<\u7d6a<\u7d70<\u42DD<\u7d7f<\ud858\udc17" +
-                "<\u7d86<\u7d88<\u7d8c<\u7d97<\ud858\udc60<\u7d9d<\u7da7" +
-                "<\u7daa<\u7db6<\u7db7<\u7DC0<\u7dd7<\u7dd9<\u7de6<\u7df1" +
-                "<\u7df9<\u4302<\ud858\udced<\u7e10<\u7e17<\u7e1d<\u7e20" +
-                "<\u7e27<\u7e2c<\u7e45<\u7e73<\u7E75<\u7e7e<\u7e86<\u7e87" +
-                "<\u432B<\u7e91<\u7e98<\u7e9a<\u4343<\u7f3c<\u7f3b<\u7f3e" +
-                "<\u7f43<\u7f44<\u7f4f<\u34C1<\ud858\ude70<\u7f52<\ud858\ude86" +
-                "<\u7f61<\u7f63<\u7f64<\u7f6d<\u7f7d<\u7f7e<\ud858\udf4c" +
-                "<\u7f90<\u517B<\ud84f\udd0e<\u7f96<\u7f9c<\u7fad<\ud859\udc02" +
-                "<\u7fc3<\u7fcf<\u7fe3<\u7fe5<\u7fef<\u7ff2<\u8002<\u800a" +
-                "<\u8008<\u800e<\u8011<\u8016<\u8024<\u802c<\u8030<\u8043" +
-                "<\u8066<\u8071<\u8075<\u807B<\u8099<\u809c<\u80A4<\u80a7" +
-                "<\u80b8<\ud859\ude7e<\u80C5<\u80d5<\u80d8<\u80E6<\ud859\udeb0" +
-                "<\u810D<\u80F5<\u80FB<\u43EE<\u8135<\u8116<\u811e<\u43F0" +
-                "<\u8124<\u8127<\u812c<\ud859\udf1d<\u813D<\u4408<\u8169" +
-                "<\u4417<\u8181<\u441C<\u8184<\u8185<\u4422<\u8198<\u81b2" +
-                "<\u81C1<\u81c3<\u81D6<\u81db<\ud85a\udcdd<\u81e4<\ud85a\udcea" +
-                "<\u81ec<\ud85a\udd51<\u81fd<\u81ff<\ud85a\udd6f<\u8204" +
-                "<\ud85a\udddd<\u8219<\u8221<\u8222<\ud85a\ude1e<\u8232" +
-                "<\u8234<\u823C<\u8246<\u8249<\u8245<\ud85a\ude58<\u824b" +
-                "<\u4476<\u824f<\u447A<\u8257<\ud85a\ude8c<\u825c<\u8263" +
-                "<\ud85a\udeb7<\u8279<\u4491<\u827d<\u827f<\u8283<\u828a" +
-                "<\u8293<\u82a7<\u82a8<\u82b2<\u82b4<\u82ba<\u82bc<\u82e2" +
-                "<\u82e8<\u82f7<\u8307<\u8308<\u830C<\u8354<\u831b<\u831d" +
-                "<\u8330<\u833c<\u8344<\u8357<\u44BE<\u837f<\u44D4<\u44B3" +
-                "<\u838d<\u8394<\u8395<\u839b<\u839d<\u83c9<\u83d0<\u83d4" +
-                "<\u83dd<\u83E5<\u83f9<\u840f<\u8411<\u8415<\ud85b\udc73" +
-                "<\u8417<\u8439<\u844a<\u844f<\u8451<\u8452<\u8459<\u845a" +
-                "<\u845c<\ud85b\udcdd<\u8465<\u8476<\u8478<\u847c<\u8481" +
-                "<\u450D<\u84dc<\u8497<\u84a6<\u84be<\u4508<\u84CE<\u84cf" +
-                "<\u84d3<\ud85b\ude65<\u84e7<\u84ea<\u84ef<\u84f0<\u84f1" +
-                "<\u84fa<\u84fd<\u850c<\u851B<\u8524<\u8525<\u852b<\u8534" +
-                "<\u854f<\u856f<\u4525<\u4543<\u853E<\u8551<\u8553<\u855e" +
-                "<\u8561<\u8562<\ud85b\udf94<\u857b<\u857d<\u857f<\u8581" +
-                "<\u8586<\u8593<\u859d<\u859f<\ud85b\udff8<\ud85b\udff6" +
-                "<\ud85b\udff7<\u85b7<\u85bc<\u85c7<\u85ca<\u85d8<\u85D9" +
-                "<\u85df<\u85E1<\u85e6<\u85f6<\u8600<\u8611<\u861e<\u8621" +
-                "<\u8624<\u8627<\ud85c\udd0d<\u8639<\u863c<\ud85c\udd39" +
-                "<\u8640<\u8653<\u8656<\u866f<\u8677<\u867a<\u8687<\u8689" +
-                "<\u868d<\u8691<\u869c<\u869D<\u86a8<\u86b1<\u86b3<\u86c1" +
-                "<\u86c3<\u86d1<\u86d5<\u86d7<\u86e3<\u86E6<\u45B8<\u8705" +
-                "<\u8707<\u870e<\u8710<\u8713<\u8719<\u871f<\u8721<\u8723" +
-                "<\u8731<\u873a<\u873e<\u8740<\u8743<\u8751<\u8758<\u8764" +
-                "<\u8765<\u8772<\u877C<\ud85c\udfdb<\ud85c\udfda<\u87a7" +
-                "<\u8789<\u878b<\u8793<\u87a0<\ud85c\udffe<\u45E5<\u87be" +
-                "<\ud85d\udc10<\u87c1<\u87ce<\u87F5<\u87df<\ud85d\udc49" +
-                "<\u87e3<\u87E5<\u87E6<\u87ea<\u87eb<\u87ed<\u8801<\u8803" +
-                "<\u880b<\u8813<\u8828<\u882e<\u8832<\u883c<\u460F<\u884a" +
-                "<\u8858<\u885f<\u8864<\ud85d\ude15<\ud85d\ude14<\u8869" +
-                "<\ud85d\ude31<\u886F<\u88a0<\u88BC<\u88bd<\u88be<\u88c0" +
-                "<\u88d2<\ud85d\ude93<\u88d1<\u88d3<\u88db<\u88f0<\u88f1" +
-                "<\u4641<\u8901<\ud85d\udf0e<\u8937<\ud85d\udf23<\u8942" +
-                "<\u8945<\u8949<\ud85d\udf52<\u4665<\u8962<\u8980<\u8989" +
-                "<\u8990<\u899f<\u89b0<\u89b7<\u89d6<\u89d8<\u89eb<\u46A1" +
-                "<\u89f1<\u89f3<\u89fd<\u89ff<\u46AF<\u8a11<\u8a14<\ud85e\udd85" +
-                "<\u8A21<\u8a35<\u8a3e<\u8a45<\u8a4d<\u8a58<\u8aae<\u8a90" +
-                "<\u8ab7<\u8abe<\u8ad7<\u8afc<\ud85e\ude84<\u8b0a<\u8b05" +
-                "<\u8B0D<\u8b1c<\u8b1f<\u8b2d<\u8b43<\u470C<\u8B51<\u8b5e" +
-                "<\u8b76<\u8b7f<\u8b81<\u8b8b<\u8b94<\u8b95<\u8b9c<\u8b9e" +
-                "<\u8c39<\ud85e\udfb3<\u8c3d<\ud85e\udfbe<\ud85e\udfc7" +
-                "<\u8c45<\u8c47<\u8c4f<\u8c54<\u8c57<\u8c69<\u8c6d<\u8c73" +
-                "<\ud85f\udcb8<\u8c93<\u8c92<\u8c99<\u4764<\u8c9b<\u8ca4" +
-                "<\u8cd6<\u8cd5<\u8cd9<\ud85f\udda0<\u8cf0<\u8CF1<\ud85f\ude10" +
-                "<\u8d09<\u8D0E<\u8d6c<\u8d84<\u8d95<\u8da6<\ud85f\udfb7" +
-                "<\u8dc6<\u8dc8<\u8dd9<\u8dec<\u8E0C<\u47FD<\u8dfd<\u8e06" +
-                "<\ud860\udc8a<\u8e14<\u8e16<\u8e21<\u8e22<\u8e27<\ud860\udcbb" +
-                "<\u4816<\u8e36<\u8e39<\u8e4b<\u8e54<\u8e62<\u8e6c<\u8e6d" +
-                "<\u8e6f<\u8E98<\u8e9e<\u8eae<\u8eb3<\u8eb5<\u8EB6<\u8ebb" +
-                "<\ud860\ude82<\u8ed1<\u8ed4<\u484E<\u8ef9<\ud860\udef3" +
-                "<\u8f00<\u8f08<\u8f17<\u8F2B<\u8f40<\u8F4A<\u8f58<\ud861\udc0c" +
-                "<\u8fa4<\u8FB4<\u8fb6<\ud861\udc55<\u8fc1<\u8fc6<\u8fca" +
-                "<\u8fcd<\u8fd3<\u8fd5<\u8fe0<\u8ff1<\u8ff5<\u8ffb<\u9002" +
-                "<\u900c<\u9037<\ud861\udd6b<\u9043<\u9044<\u905d<\ud861\uddc8" +
-                "<\ud861\uddc9<\u9085<\u908c<\u9090<\u961d<\u90a1<\u48B5" +
-                "<\u90b0<\u90b6<\u90c3<\u90c8<\ud861\uded7<\u90dc<\u90df" +
-                "<\ud861\udefa<\u90f6<\u90F2<\u9100<\u90eb<\u90fe<\u90ff" +
-                "<\u9104<\u9106<\u9118<\u911c<\u911e<\u9137<\u9139<\u913a" +
-                "<\u9146<\u9147<\u9157<\u9159<\u9161<\u9164<\u9174<\u9179" +
-                "<\u9185<\u918e<\u91a8<\u91ae<\u91b3<\u91b6<\u91c3<\u91C4" +
-                "<\u91da<\ud862\udd49<\ud862\udd46<\u91ec<\u91ee<\u9201" +
-                "<\u920a<\u9216<\u9217<\ud862\udd6b<\u9233<\u9242<\u9247" +
-                "<\u924a<\u924e<\u9251<\u9256<\u9259<\u9260<\u9261<\u9265" +
-                "<\u9267<\u9268<\ud862\udd87<\ud862\udd88<\u927c<\u927d" +
-                "<\u927f<\u9289<\u928d<\u9297<\u9299<\u929f<\u92a7<\u92ab" +
-                "<\ud862\uddba<\ud862\uddbb<\u92b2<\u92bf<\u92c0<\u92c6" +
-                "<\u92ce<\u92d0<\u92d7<\u92d9<\u92e5<\u92e7<\u9311<\ud862\ude1e" +
-                "<\ud862\ude29<\u92F7<\u92f9<\u92fb<\u9302<\u930d<\u9315" +
-                "<\u931d<\u931e<\u9327<\u9329<\ud862\ude71<\ud862\ude43" +
-                "<\u9347<\u9351<\u9357<\u935a<\u936B<\u9371<\u9373<\u93a1" +
-                "<\ud862\ude99<\ud862\udecd<\u9388<\u938b<\u938f<\u939e" +
-                "<\u93F5<\ud862\udee4<\ud862\udedd<\u93F1<\u93c1<\u93c7" +
-                "<\u93dc<\u93e2<\u93e7<\u9409<\u940f<\u9416<\u9417<\u93fb" +
-                "<\u9432<\u9434<\u943b<\u9445<\ud862\udfc1<\ud862\udfef" +
-                "<\u946d<\u946f<\u9578<\u9579<\u9586<\u958c<\u958d<\ud863\udd10" +
-                "<\u95ab<\u95b4<\ud863\udd71<\u95c8<\ud863\uddfb<\ud863\ude1f" +
-                "<\u962c<\u9633<\u9634<\ud863\ude36<\u963c<\u9641<\u9661" +
-                "<\ud863\ude89<\u9682<\ud863\udeeb<\u969a<\ud863\udf32" +
-                "<\u49E7<\u96a9<\u96af<\u96b3<\u96ba<\u96BD<\u49FA<\ud863\udff8" +
-                "<\u96d8<\u96da<\u96dd<\u4A04<\u9714<\u9723<\u4A29<\u9736" +
-                "<\u9741<\u9747<\u9755<\u9757<\u975b<\u976a<\ud864\udea0" +
-                "<\ud864\udeb1<\u9796<\u979a<\u979e<\u97a2<\u97b1<\u97b2" +
-                "<\u97be<\u97cc<\u97d1<\u97d4<\u97d8<\u97d9<\u97e1<\u97f1" +
-                "<\u9804<\u980d<\u980e<\u9814<\u9816<\u4ABC<\ud865\udc90" +
-                "<\u9823<\u9832<\u9833<\u9825<\u9847<\u9866<\u98ab<\u98ad" +
-                "<\u98b0<\ud865\uddcf<\u98b7<\u98b8<\u98bb<\u98BC<\u98bf" +
-                "<\u98c2<\u98C7<\u98CB<\u98E0<\ud865\ude7f<\u98e1<\u98e3" +
-                "<\u98e5<\u98ea<\u98F0<\u98F1<\u98f3<\u9908<\u4B3B<\ud865\udef0" +
-                "<\u9916<\u9917<\ud865\udf19<\u991a<\u991b<\u991c<\ud865\udf50" +
-                "<\u9931<\u9932<\u9933<\u993a<\u993b<\u993c<\u9940<\u9941" +
-                "<\u9946<\u994d<\u994e<\u995c<\u995f<\u9960<\u99A3<\u99a6" +
-                "<\u99b9<\u99bd<\u99bf<\u99c3<\u99c9<\u99d4<\u99d9<\u99de" +
-                "<\ud866\udcc6<\u99f0<\u99f9<\u99FC<\u9A0A<\u9a11<\u9a16" +
-                "<\u9A1A<\u9a20<\u9A31<\u9a36<\u9a44<\u9a4c<\u9A58<\u4BC2" +
-                "<\u9aaf<\u4BCA<\u9AB7<\u4BD2<\u9ab9<\ud866\ude72<\u9ac6" +
-                "<\u9ad0<\u9ad2<\u9ad5<\u4BE8<\u9adc<\u9ae0<\u9ae5<\u9ae9" +
-                "<\u9b03<\u9b0c<\u9b10<\u9b12<\u9b16<\u9b1c<\u9b2b<\u9b33" +
-                "<\u9b3d<\u4C20<\u9b4b<\u9b63<\u9b65<\u9b6b<\u9b6c<\u9b73" +
-                "<\u9B76<\u9b77<\u9ba6<\u9bac<\u9bb1<\ud867\udddb<\ud867\ude3d" +
-                "<\u9bb2<\u9bb8<\u9bbe<\u9bc7<\u9bf3<\u9bd8<\u9bdd<\u9be7" +
-                "<\u9bea<\u9beb<\u9bef<\u9BEE<\ud867\ude15<\u9bfa<\ud867\ude8a" +
-                "<\u9bf7<\ud867\ude49<\u9c16<\u9c18<\u9c19<\u9c1a<\u9C1D" +
-                "<\u9c22<\u9c27<\u9c29<\u9c2a<\ud867\udec4<\u9c31<\u9c36" +
-                "<\u9c37<\u9c45<\u9c5c<\ud867\udee9<\u9c49<\u9c4a<\ud867\udedb" +
-                "<\u9c54<\u9c58<\u9c5b<\u9c5d<\u9c5f<\u9c69<\u9c6a<\u9c6b" +
-                "<\u9C6D<\u9c6e<\u9c70<\u9c72<\u9c75<\u9C7A<\u9ce6<\u9cf2" +
-                "<\u9d0b<\u9d02<\ud867\udfce<\u9d11<\u9d17<\u9d18<\ud868\udc2f" +
-                "<\u4CC4<\ud868\udc1a<\u9d32<\u4CD1<\u9d42<\u9d4a<\u9d5f" +
-                "<\u9d62<\ud868\udcf9<\u9d69<\u9d6b<\ud868\udc82<\u9D73" +
-                "<\u9d76<\u9d77<\u9d7e<\u9d84<\u9d8d<\u9D99<\u9da1<\u9dbf" +
-                "<\u9db5<\u9db9<\u9DBD<\u9dc3<\u9dc7<\u9dc9<\u9dd6<\u9dda" +
-                "<\u9ddf<\u9de0<\u9DE3<\u9df4<\u4D07<\u9e0a<\u9e02<\u9E0D" +
-                "<\u9e19<\u9e1c<\u9e1d<\u9e7b<\ud848\ude18<\u9e80<\u9e85" +
-                "<\u9e9b<\u9ea8<\ud868\udf8c<\u9EBD<\ud869\udc37<\u9edf" +
-                "<\u9ee7<\u9eee<\u9eff<\u9f02<\u4D77<\u9f03<\u9f17<\u9f19" +
-                "<\u9f2f<\u9f37<\u9f3a<\u9f3d<\u9f41<\u9f45<\u9f46<\u9f53" +
-                "<\u9f55<\u9f58<\ud869\uddf1<\u9f5d<\ud869\ude02<\u9f69" +
-                "<\ud869\ude1a<\u9f6d<\u9f70<\u9f75<\ud869\udeb2"
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_ko.java b/ojluni/src/main/java/sun/text/resources/CollationData_ko.java
deleted file mode 100755
index f42caf4..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_ko.java
+++ /dev/null
@@ -1,1234 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_ko extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                   "& Z<\u3000<\u3001<\u3002<\u30fb"
-                 + "<\u2025<\u2026<\u00a8<\u3003<\u2010<\u2014<\u2225"
-                 + "<\uff3c<\u301c<\u2018<\u2019<\u201c<\u201d<\u3014"
-                 + "<\u3015<\u3008<\u3009<\u300a<\u300b<\u300c<\u300d"
-                 + "<\u300e<\u300f<\u3010<\u3011<\u00b1<\u00d7<\u00f7"
-                 + "<\u2260<\u2264<\u2265<\u221e<\u2234<\u00b0<\u2032"
-                 + "<\u2033<\u2103<\u212b<\uffe0<\uffe1<\uffe5<\u2642"
-                 + "<\u2640<\u2220<\u22a5<\u2312<\u2202<\u2207<\u2261"
-                 + "<\u2252<\u00a7<\u203b<\u2606<\u2605<\u25cb<\u25cf"
-                 + "<\u25ce<\u25c7<\u25c6<\u25a1<\u25a0<\u25b3<\u25b2"
-                 + "<\u25bd<\u25bc<\u2192<\u2190<\u2191<\u2193<\u2194"
-                 + "<\u3013<\u226a<\u226b<\u221a<\u223d<\u221d<\u2235"
-                 + "<\u222b<\u222c<\u2208<\u220b<\u2286<\u2287<\u2282"
-                 + "<\u2283<\u222a<\u2229<\u2227<\u2228<\uffe2<\u21d2"
-                 + "<\u21d4<\u2200<\u2203<\u00b4<\u02dc<\u02c7<\u02d8"
-                 + "<\u02dd<\u02da<\u02d9<\u00b8<\u02db<\u00a1<\u00bf"
-                 + "<\u02d0<\u222e<\u2211<\u220f<\u00a4<\u2109<\u2030"
-                 + "<\u25c1<\u25c0<\u25b7<\u25b6<\u2664<\u2660<\u2661"
-                 + "<\u2665<\u2667<\u2663<\u25c9<\u25c8<\u25a3<\u25d0"
-                 + "<\u25d1<\u2592<\u25a4<\u25a5<\u25a8<\u25a7<\u25a6"
-                 + "<\u25a9<\u2668<\u260f<\u260e<\u261c<\u261e<\u00b6"
-                 + "<\u2020<\u2021<\u2195<\u2197<\u2199<\u2196<\u2198"
-                 + "<\u266d<\u2669<\u266a<\u266c<\u327f<\u321c<\u2116"
-                 + "<\u33c7<\u2122<\u33c2<\u33d8<\u2121<\uff01<\uff02"
-                 + "<\uff03<\uff04<\uff05<\uff06<\uff07<\uff08<\uff09"
-                 + "<\uff0a<\uff0b<\uff0c<\uff0d<\uff0e<\uff0f<\uff10"
-                 + "<\uff11<\uff12<\uff13<\uff14<\uff15<\uff16<\uff17"
-                 + "<\uff18<\uff19<\uff1a<\uff1b<\uff1c<\uff1d<\uff1e"
-                 + "<\uff1f<\uff20<\uff21<\uff22<\uff23<\uff24<\uff25"
-                 + "<\uff26<\uff27<\uff28<\uff29<\uff2a<\uff2b<\uff2c"
-                 + "<\uff2d<\uff2e<\uff2f<\uff30<\uff31<\uff32<\uff33"
-                 + "<\uff34<\uff35<\uff36<\uff37<\uff38<\uff39<\uff3a"
-                 + "<\uff3b<\uffe6<\uff3d<\uff3e<\uff3f<\uff40<\uff41"
-                 + "<\uff42<\uff43<\uff44<\uff45<\uff46<\uff47<\uff48"
-                 + "<\uff49<\uff4a<\uff4b<\uff4c<\uff4d<\uff4e<\uff4f"
-                 + "<\uff50<\uff51<\uff52<\uff53<\uff54<\uff55<\uff56"
-                 + "<\uff57<\uff58<\uff59<\uff5a<\uff5b<\uff5c<\uff5d"
-                 + "<\uffe3<\u3131<\u3132<\u3133<\u3134<\u3135<\u3136"
-                 + "<\u3137<\u3138<\u3139<\u313a<\u313b<\u313c<\u313d"
-                 + "<\u313e<\u313f<\u3140<\u3141<\u3142<\u3143<\u3144"
-                 + "<\u3145<\u3146<\u3147<\u3148<\u3149<\u314a<\u314b"
-                 + "<\u314c<\u314d<\u314e<\u314f<\u3150<\u3151<\u3152"
-                 + "<\u3153<\u3154<\u3155<\u3156<\u3157<\u3158<\u3159"
-                 + "<\u315a<\u315b<\u315c<\u315d<\u315e<\u315f<\u3160"
-                 + "<\u3161<\u3162<\u3163<\u3164<\u3165<\u3166<\u3167"
-                 + "<\u3168<\u3169<\u316a<\u316b<\u316c<\u316d<\u316e"
-                 + "<\u316f<\u3170<\u3171<\u3172<\u3173<\u3174<\u3175"
-                 + "<\u3176<\u3177<\u3178<\u3179<\u317a<\u317b<\u317c"
-                 + "<\u317d<\u317e<\u317f<\u3180<\u3181<\u3182<\u3183"
-                 + "<\u3184<\u3185<\u3186<\u3187<\u3188<\u3189<\u318a"
-                 + "<\u318b<\u318c<\u318d<\u318e<\u2170<\u2171<\u2172"
-                 + "<\u2173<\u2174<\u2175<\u2176<\u2177<\u2178<\u2179"
-                 + "<\u2160<\u2161<\u2162<\u2163<\u2164<\u2165<\u2166"
-                 + "<\u2167<\u2168<\u2169<\u0391<\u0392<\u0393<\u0394"
-                 + "<\u0395<\u0396<\u0397<\u0398<\u0399<\u039a<\u039b"
-                 + "<\u039c<\u039d<\u039e<\u039f<\u03a0<\u03a1<\u03a3"
-                 + "<\u03a4<\u03a5<\u03a6<\u03a7<\u03a8<\u03a9<\u03b1"
-                 + "<\u03b2<\u03b3<\u03b4<\u03b5<\u03b6<\u03b7<\u03b8"
-                 + "<\u03b9<\u03ba<\u03bb<\u03bc<\u03bd<\u03be<\u03bf"
-                 + "<\u03c0<\u03c1<\u03c3<\u03c4<\u03c5<\u03c6<\u03c7"
-                 + "<\u03c8<\u03c9<\u2500<\u2502<\u250c<\u2510<\u2518"
-                 + "<\u2514<\u251c<\u252c<\u2524<\u2534<\u253c<\u2501"
-                 + "<\u2503<\u250f<\u2513<\u251b<\u2517<\u2523<\u2533"
-                 + "<\u252b<\u253b<\u254b<\u2520<\u252f<\u2528<\u2537"
-                 + "<\u253f<\u251d<\u2530<\u2525<\u2538<\u2542<\u2512"
-                 + "<\u2511<\u251a<\u2519<\u2516<\u2515<\u250e<\u250d"
-                 + "<\u251e<\u251f<\u2521<\u2522<\u2526<\u2527<\u2529"
-                 + "<\u252a<\u252d<\u252e<\u2531<\u2532<\u2535<\u2536"
-                 + "<\u2539<\u253a<\u253d<\u253e<\u2540<\u2541<\u2543"
-                 + "<\u2544<\u2545<\u2546<\u2547<\u2548<\u2549<\u254a"
-                 + "<\u3395<\u3396<\u3397<\u2113<\u3398<\u33c4<\u33a3"
-                 + "<\u33a4<\u33a5<\u33a6<\u3399<\u339a<\u339b<\u339c"
-                 + "<\u339d<\u339e<\u339f<\u33a0<\u33a1<\u33a2<\u33ca"
-                 + "<\u338d<\u338e<\u338f<\u33cf<\u3388<\u3389<\u33c8"
-                 + "<\u33a7<\u33a8<\u33b0<\u33b1<\u33b2<\u33b3<\u33b4"
-                 + "<\u33b5<\u33b6<\u33b7<\u33b8<\u33b9<\u3380<\u3381"
-                 + "<\u3382<\u3383<\u3384<\u33ba<\u33bb<\u33bc<\u33bd"
-                 + "<\u33be<\u33bf<\u3390<\u3391<\u3392<\u3393<\u3394"
-                 + "<\u2126<\u33c0<\u33c1<\u338a<\u338b<\u338c<\u33d6"
-                 + "<\u33c5<\u33ad<\u33ae<\u33af<\u33db<\u33a9<\u33aa"
-                 + "<\u33ab<\u33ac<\u33dd<\u33d0<\u33d3<\u33c3<\u33c9"
-                 + "<\u33dc<\u33c6<\u00c6<\u00d0<\u00aa<\u0126<\u0132"
-                 + "<\u013f<\u0141<\u00d8<\u0152<\u00ba<\u00de<\u0166"
-                 + "<\u014a<\u3260<\u3261<\u3262<\u3263<\u3264<\u3265"
-                 + "<\u3266<\u3267<\u3268<\u3269<\u326a<\u326b<\u326c"
-                 + "<\u326d<\u326e<\u326f<\u3270<\u3271<\u3272<\u3273"
-                 + "<\u3274<\u3275<\u3276<\u3277<\u3278<\u3279<\u327a"
-                 + "<\u327b<\u24d0<\u24d1<\u24d2<\u24d3<\u24d4<\u24d5"
-                 + "<\u24d6<\u24d7<\u24d8<\u24d9<\u24da<\u24db<\u24dc"
-                 + "<\u24dd<\u24de<\u24df<\u24e0<\u24e1<\u24e2<\u24e3"
-                 + "<\u24e4<\u24e5<\u24e6<\u24e7<\u24e8<\u24e9<\u2460"
-                 + "<\u2461<\u2462<\u2463<\u2464<\u2465<\u2466<\u2467"
-                 + "<\u2468<\u2469<\u246a<\u246b<\u246c<\u246d<\u246e"
-                 + "<\u00bd<\u2153<\u2154<\u00bc<\u00be<\u215b<\u215c"
-                 + "<\u215d<\u215e<\u00e6<\u0111<\u00f0<\u0127<\u0131"
-                 + "<\u0133<\u0138<\u0140<\u0142<\u00f8<\u0153<\u00df"
-                 + "<\u00fe<\u0167<\u014b<\u0149<\u3200<\u3201<\u3202"
-                 + "<\u3203<\u3204<\u3205<\u3206<\u3207<\u3208<\u3209"
-                 + "<\u320a<\u320b<\u320c<\u320d<\u320e<\u320f<\u3210"
-                 + "<\u3211<\u3212<\u3213<\u3214<\u3215<\u3216<\u3217"
-                 + "<\u3218<\u3219<\u321a<\u321b<\u249c<\u249d<\u249e"
-                 + "<\u249f<\u24a0<\u24a1<\u24a2<\u24a3<\u24a4<\u24a5"
-                 + "<\u24a6<\u24a7<\u24a8<\u24a9<\u24aa<\u24ab<\u24ac"
-                 + "<\u24ad<\u24ae<\u24af<\u24b0<\u24b1<\u24b2<\u24b3"
-                 + "<\u24b4<\u24b5<\u2474<\u2475<\u2476<\u2477<\u2478"
-                 + "<\u2479<\u247a<\u247b<\u247c<\u247d<\u247e<\u247f"
-                 + "<\u2480<\u2481<\u2482<\u00b9<\u00b2<\u00b3<\u2074"
-                 + "<\u207f<\u2081<\u2082<\u2083<\u2084<\u3041<\u3042"
-                 + "<\u3043<\u3044<\u3045<\u3046<\u3047<\u3048<\u3049"
-                 + "<\u304a<\u304b<\u304c<\u304d<\u304e<\u304f<\u3050"
-                 + "<\u3051<\u3052<\u3053<\u3054<\u3055<\u3056<\u3057"
-                 + "<\u3058<\u3059<\u305a<\u305b<\u305c<\u305d<\u305e"
-                 + "<\u305f<\u3060<\u3061<\u3062<\u3063<\u3064<\u3065"
-                 + "<\u3066<\u3067<\u3068<\u3069<\u306a<\u306b<\u306c"
-                 + "<\u306d<\u306e<\u306f<\u3070<\u3071<\u3072<\u3073"
-                 + "<\u3074<\u3075<\u3076<\u3077<\u3078<\u3079<\u307a"
-                 + "<\u307b<\u307c<\u307d<\u307e<\u307f<\u3080<\u3081"
-                 + "<\u3082<\u3083<\u3084<\u3085<\u3086<\u3087<\u3088"
-                 + "<\u3089<\u308a<\u308b<\u308c<\u308d<\u308e<\u308f"
-                 + "<\u3090<\u3091<\u3092<\u3093<\u30a1<\u30a2<\u30a3"
-                 + "<\u30a4<\u30a5<\u30a6<\u30a7<\u30a8<\u30a9<\u30aa"
-                 + "<\u30ab<\u30ac<\u30ad<\u30ae<\u30af<\u30b0<\u30b1"
-                 + "<\u30b2<\u30b3<\u30b4<\u30b5<\u30b6<\u30b7<\u30b8"
-                 + "<\u30b9<\u30ba<\u30bb<\u30bc<\u30bd<\u30be<\u30bf"
-                 + "<\u30c0<\u30c1<\u30c2<\u30c3<\u30c4<\u30c5<\u30c6"
-                 + "<\u30c7<\u30c8<\u30c9<\u30ca<\u30cb<\u30cc<\u30cd"
-                 + "<\u30ce<\u30cf<\u30d0<\u30d1<\u30d2<\u30d3<\u30d4"
-                 + "<\u30d5<\u30d6<\u30d7<\u30d8<\u30d9<\u30da<\u30db"
-                 + "<\u30dc<\u30dd<\u30de<\u30df<\u30e0<\u30e1<\u30e2"
-                 + "<\u30e3<\u30e4<\u30e5<\u30e6<\u30e7<\u30e8<\u30e9"
-                 + "<\u30ea<\u30eb<\u30ec<\u30ed<\u30ee<\u30ef<\u30f0"
-                 + "<\u30f1<\u30f2<\u30f3<\u30f4<\u30f5<\u30f6<\u0410"
-                 + "<\u0411<\u0412<\u0413<\u0414<\u0415<\u0401<\u0416"
-                 + "<\u0417<\u0418<\u0419<\u041a<\u041b<\u041c<\u041d"
-                 + "<\u041e<\u041f<\u0420<\u0421<\u0422<\u0423<\u0424"
-                 + "<\u0425<\u0426<\u0427<\u0428<\u0429<\u042a<\u042b"
-                 + "<\u042c<\u042d<\u042e<\u042f<\u0430<\u0431<\u0432"
-                 + "<\u0433<\u0434<\u0435<\u0451<\u0436<\u0437<\u0438"
-                 + "<\u0439<\u043a<\u043b<\u043c<\u043d<\u043e<\u043f"
-                 + "<\u0440<\u0441<\u0442<\u0443<\u0444<\u0445<\u0446"
-                 + "<\u0447<\u0448<\u0449<\u044a<\u044b<\u044c<\u044d"
-                 + "<\u044e<\u044f "
-        // KSC 5601-1987
-                 + "<\uac00<\uac01<\uac04<\uac07<\uac08"
-                 + "<\uac09<\uac0a<\uac10<\uac11<\uac12<\uac13<\uac14"
-                 + "<\uac15<\uac16<\uac17<\uac19<\uac1a<\uac1b<\uac1c"
-                 + "<\uac1d<\uac20<\uac24<\uac2c<\uac2d<\uac2f<\uac30"
-                 + "<\uac31<\uac38<\uac39<\uac3c<\uac40<\uac4b<\uac4d"
-                 + "<\uac54<\uac58<\uac5c<\uac70<\uac71<\uac74<\uac77"
-                 + "<\uac78<\uac7a<\uac80<\uac81<\uac83<\uac84<\uac85"
-                 + "<\uac86<\uac89<\uac8a<\uac8b<\uac8c<\uac90<\uac94"
-                 + "<\uac9c<\uac9d<\uac9f<\uaca0<\uaca1<\uaca8<\uaca9"
-                 + "<\uacaa<\uacac<\uacaf<\uacb0<\uacb8<\uacb9<\uacbb"
-                 + "<\uacbc<\uacbd<\uacc1<\uacc4<\uacc8<\uaccc<\uacd5"
-                 + "<\uacd7<\uace0<\uace1<\uace4<\uace7<\uace8<\uacea"
-                 + "<\uacec<\uacef<\uacf0<\uacf1<\uacf3<\uacf5<\uacf6"
-                 + "<\uacfc<\uacfd<\uad00<\uad04<\uad06<\uad0c<\uad0d"
-                 + "<\uad0f<\uad11<\uad18<\uad1c<\uad20<\uad29<\uad2c"
-                 + "<\uad2d<\uad34<\uad35<\uad38<\uad3c<\uad44<\uad45"
-                 + "<\uad47<\uad49<\uad50<\uad54<\uad58<\uad61<\uad63"
-                 + "<\uad6c<\uad6d<\uad70<\uad73<\uad74<\uad75<\uad76"
-                 + "<\uad7b<\uad7c<\uad7d<\uad7f<\uad81<\uad82<\uad88"
-                 + "<\uad89<\uad8c<\uad90<\uad9c<\uad9d<\uada4<\uadb7"
-                 + "<\uadc0<\uadc1<\uadc4<\uadc8<\uadd0<\uadd1<\uadd3"
-                 + "<\uaddc<\uade0<\uade4<\uadf8<\uadf9<\uadfc<\uadff"
-                 + "<\uae00<\uae01<\uae08<\uae09<\uae0b<\uae0d<\uae14"
-                 + "<\uae30<\uae31<\uae34<\uae37<\uae38<\uae3a<\uae40"
-                 + "<\uae41<\uae43<\uae45<\uae46<\uae4a<\uae4c<\uae4d"
-                 + "<\uae4e<\uae50<\uae54<\uae56<\uae5c<\uae5d<\uae5f"
-                 + "<\uae60<\uae61<\uae65<\uae68<\uae69<\uae6c<\uae70"
-                 + "<\uae78<\uae79<\uae7b<\uae7c<\uae7d<\uae84<\uae85"
-                 + "<\uae8c<\uaebc<\uaebd<\uaebe<\uaec0<\uaec4<\uaecc"
-                 + "<\uaecd<\uaecf<\uaed0<\uaed1<\uaed8<\uaed9<\uaedc"
-                 + "<\uaee8<\uaeeb<\uaeed<\uaef4<\uaef8<\uaefc<\uaf07"
-                 + "<\uaf08<\uaf0d<\uaf10<\uaf2c<\uaf2d<\uaf30<\uaf32"
-                 + "<\uaf34<\uaf3c<\uaf3d<\uaf3f<\uaf41<\uaf42<\uaf43"
-                 + "<\uaf48<\uaf49<\uaf50<\uaf5c<\uaf5d<\uaf64<\uaf65"
-                 + "<\uaf79<\uaf80<\uaf84<\uaf88<\uaf90<\uaf91<\uaf95"
-                 + "<\uaf9c<\uafb8<\uafb9<\uafbc<\uafc0<\uafc7<\uafc8"
-                 + "<\uafc9<\uafcb<\uafcd<\uafce<\uafd4<\uafdc<\uafe8"
-                 + "<\uafe9<\uaff0<\uaff1<\uaff4<\uaff8<\ub000<\ub001"
-                 + "<\ub004<\ub00c<\ub010<\ub014<\ub01c<\ub01d<\ub028"
-                 + "<\ub044<\ub045<\ub048<\ub04a<\ub04c<\ub04e<\ub053"
-                 + "<\ub054<\ub055<\ub057<\ub059<\ub05d<\ub07c<\ub07d"
-                 + "<\ub080<\ub084<\ub08c<\ub08d<\ub08f<\ub091<\ub098"
-                 + "<\ub099<\ub09a<\ub09c<\ub09f<\ub0a0<\ub0a1<\ub0a2"
-                 + "<\ub0a8<\ub0a9<\ub0ab<\ub0ac<\ub0ad<\ub0ae<\ub0af"
-                 + "<\ub0b1<\ub0b3<\ub0b4<\ub0b5<\ub0b8<\ub0bc<\ub0c4"
-                 + "<\ub0c5<\ub0c7<\ub0c8<\ub0c9<\ub0d0<\ub0d1<\ub0d4"
-                 + "<\ub0d8<\ub0e0<\ub0e5<\ub108<\ub109<\ub10b<\ub10c"
-                 + "<\ub110<\ub112<\ub113<\ub118<\ub119<\ub11b<\ub11c"
-                 + "<\ub11d<\ub123<\ub124<\ub125<\ub128<\ub12c<\ub134"
-                 + "<\ub135<\ub137<\ub138<\ub139<\ub140<\ub141<\ub144"
-                 + "<\ub148<\ub150<\ub151<\ub154<\ub155<\ub158<\ub15c"
-                 + "<\ub160<\ub178<\ub179<\ub17c<\ub180<\ub182<\ub188"
-                 + "<\ub189<\ub18b<\ub18d<\ub192<\ub193<\ub194<\ub198"
-                 + "<\ub19c<\ub1a8<\ub1cc<\ub1d0<\ub1d4<\ub1dc<\ub1dd"
-                 + "<\ub1df<\ub1e8<\ub1e9<\ub1ec<\ub1f0<\ub1f9<\ub1fb"
-                 + "<\ub1fd<\ub204<\ub205<\ub208<\ub20b<\ub20c<\ub214"
-                 + "<\ub215<\ub217<\ub219<\ub220<\ub234<\ub23c<\ub258"
-                 + "<\ub25c<\ub260<\ub268<\ub269<\ub274<\ub275<\ub27c"
-                 + "<\ub284<\ub285<\ub289<\ub290<\ub291<\ub294<\ub298"
-                 + "<\ub299<\ub29a<\ub2a0<\ub2a1<\ub2a3<\ub2a5<\ub2a6"
-                 + "<\ub2aa<\ub2ac<\ub2b0<\ub2b4<\ub2c8<\ub2c9<\ub2cc"
-                 + "<\ub2d0<\ub2d2<\ub2d8<\ub2d9<\ub2db<\ub2dd<\ub2e2"
-                 + "<\ub2e4<\ub2e5<\ub2e6<\ub2e8<\ub2eb<\ub2ec<\ub2ed"
-                 + "<\ub2ee<\ub2ef<\ub2f3<\ub2f4<\ub2f5<\ub2f7<\ub2f8"
-                 + "<\ub2f9<\ub2fa<\ub2fb<\ub2ff<\ub300<\ub301<\ub304"
-                 + "<\ub308<\ub310<\ub311<\ub313<\ub314<\ub315<\ub31c"
-                 + "<\ub354<\ub355<\ub356<\ub358<\ub35b<\ub35c<\ub35e"
-                 + "<\ub35f<\ub364<\ub365<\ub367<\ub369<\ub36b<\ub36e"
-                 + "<\ub370<\ub371<\ub374<\ub378<\ub380<\ub381<\ub383"
-                 + "<\ub384<\ub385<\ub38c<\ub390<\ub394<\ub3a0<\ub3a1"
-                 + "<\ub3a8<\ub3ac<\ub3c4<\ub3c5<\ub3c8<\ub3cb<\ub3cc"
-                 + "<\ub3ce<\ub3d0<\ub3d4<\ub3d5<\ub3d7<\ub3d9<\ub3db"
-                 + "<\ub3dd<\ub3e0<\ub3e4<\ub3e8<\ub3fc<\ub410<\ub418"
-                 + "<\ub41c<\ub420<\ub428<\ub429<\ub42b<\ub434<\ub450"
-                 + "<\ub451<\ub454<\ub458<\ub460<\ub461<\ub463<\ub465"
-                 + "<\ub46c<\ub480<\ub488<\ub49d<\ub4a4<\ub4a8<\ub4ac"
-                 + "<\ub4b5<\ub4b7<\ub4b9<\ub4c0<\ub4c4<\ub4c8<\ub4d0"
-                 + "<\ub4d5<\ub4dc<\ub4dd<\ub4e0<\ub4e3<\ub4e4<\ub4e6"
-                 + "<\ub4ec<\ub4ed<\ub4ef<\ub4f1<\ub4f8<\ub514<\ub515"
-                 + "<\ub518<\ub51b<\ub51c<\ub524<\ub525<\ub527<\ub528"
-                 + "<\ub529<\ub52a<\ub530<\ub531<\ub534<\ub538<\ub540"
-                 + "<\ub541<\ub543<\ub544<\ub545<\ub54b<\ub54c<\ub54d"
-                 + "<\ub550<\ub554<\ub55c<\ub55d<\ub55f<\ub560<\ub561"
-                 + "<\ub5a0<\ub5a1<\ub5a4<\ub5a8<\ub5aa<\ub5ab<\ub5b0"
-                 + "<\ub5b1<\ub5b3<\ub5b4<\ub5b5<\ub5bb<\ub5bc<\ub5bd"
-                 + "<\ub5c0<\ub5c4<\ub5cc<\ub5cd<\ub5cf<\ub5d0<\ub5d1"
-                 + "<\ub5d8<\ub5ec<\ub610<\ub611<\ub614<\ub618<\ub625"
-                 + "<\ub62c<\ub634<\ub648<\ub664<\ub668<\ub69c<\ub69d"
-                 + "<\ub6a0<\ub6a4<\ub6ab<\ub6ac<\ub6b1<\ub6d4<\ub6f0"
-                 + "<\ub6f4<\ub6f8<\ub700<\ub701<\ub705<\ub728<\ub729"
-                 + "<\ub72c<\ub72f<\ub730<\ub738<\ub739<\ub73b<\ub744"
-                 + "<\ub748<\ub74c<\ub754<\ub755<\ub760<\ub764<\ub768"
-                 + "<\ub770<\ub771<\ub773<\ub775<\ub77c<\ub77d<\ub780"
-                 + "<\ub784<\ub78c<\ub78d<\ub78f<\ub790<\ub791<\ub792"
-                 + "<\ub796<\ub797<\ub798<\ub799<\ub79c<\ub7a0<\ub7a8"
-                 + "<\ub7a9<\ub7ab<\ub7ac<\ub7ad<\ub7b4<\ub7b5<\ub7b8"
-                 + "<\ub7c7<\ub7c9<\ub7ec<\ub7ed<\ub7f0<\ub7f4<\ub7fc"
-                 + "<\ub7fd<\ub7ff<\ub800<\ub801<\ub807<\ub808<\ub809"
-                 + "<\ub80c<\ub810<\ub818<\ub819<\ub81b<\ub81d<\ub824"
-                 + "<\ub825<\ub828<\ub82c<\ub834<\ub835<\ub837<\ub838"
-                 + "<\ub839<\ub840<\ub844<\ub851<\ub853<\ub85c<\ub85d"
-                 + "<\ub860<\ub864<\ub86c<\ub86d<\ub86f<\ub871<\ub878"
-                 + "<\ub87c<\ub88d<\ub8a8<\ub8b0<\ub8b4<\ub8b8<\ub8c0"
-                 + "<\ub8c1<\ub8c3<\ub8c5<\ub8cc<\ub8d0<\ub8d4<\ub8dd"
-                 + "<\ub8df<\ub8e1<\ub8e8<\ub8e9<\ub8ec<\ub8f0<\ub8f8"
-                 + "<\ub8f9<\ub8fb<\ub8fd<\ub904<\ub918<\ub920<\ub93c"
-                 + "<\ub93d<\ub940<\ub944<\ub94c<\ub94f<\ub951<\ub958"
-                 + "<\ub959<\ub95c<\ub960<\ub968<\ub969<\ub96b<\ub96d"
-                 + "<\ub974<\ub975<\ub978<\ub97c<\ub984<\ub985<\ub987"
-                 + "<\ub989<\ub98a<\ub98d<\ub98e<\ub9ac<\ub9ad<\ub9b0"
-                 + "<\ub9b4<\ub9bc<\ub9bd<\ub9bf<\ub9c1<\ub9c8<\ub9c9"
-                 + "<\ub9cc<\ub9ce<\ub9cf<\ub9d0<\ub9d1<\ub9d2<\ub9d8"
-                 + "<\ub9d9<\ub9db<\ub9dd<\ub9de<\ub9e1<\ub9e3<\ub9e4"
-                 + "<\ub9e5<\ub9e8<\ub9ec<\ub9f4<\ub9f5<\ub9f7<\ub9f8"
-                 + "<\ub9f9<\ub9fa<\uba00<\uba01<\uba08<\uba15<\uba38"
-                 + "<\uba39<\uba3c<\uba40<\uba42<\uba48<\uba49<\uba4b"
-                 + "<\uba4d<\uba4e<\uba53<\uba54<\uba55<\uba58<\uba5c"
-                 + "<\uba64<\uba65<\uba67<\uba68<\uba69<\uba70<\uba71"
-                 + "<\uba74<\uba78<\uba83<\uba84<\uba85<\uba87<\uba8c"
-                 + "<\ubaa8<\ubaa9<\ubaab<\ubaac<\ubab0<\ubab2<\ubab8"
-                 + "<\ubab9<\ubabb<\ubabd<\ubac4<\ubac8<\ubad8<\ubad9"
-                 + "<\ubafc<\ubb00<\ubb04<\ubb0d<\ubb0f<\ubb11<\ubb18"
-                 + "<\ubb1c<\ubb20<\ubb29<\ubb2b<\ubb34<\ubb35<\ubb36"
-                 + "<\ubb38<\ubb3b<\ubb3c<\ubb3d<\ubb3e<\ubb44<\ubb45"
-                 + "<\ubb47<\ubb49<\ubb4d<\ubb4f<\ubb50<\ubb54<\ubb58"
-                 + "<\ubb61<\ubb63<\ubb6c<\ubb88<\ubb8c<\ubb90<\ubba4"
-                 + "<\ubba8<\ubbac<\ubbb4<\ubbb7<\ubbc0<\ubbc4<\ubbc8"
-                 + "<\ubbd0<\ubbd3<\ubbf8<\ubbf9<\ubbfc<\ubbff<\ubc00"
-                 + "<\ubc02<\ubc08<\ubc09<\ubc0b<\ubc0c<\ubc0d<\ubc0f"
-                 + "<\ubc11<\ubc14<\ubc15<\ubc16<\ubc17<\ubc18<\ubc1b"
-                 + "<\ubc1c<\ubc1d<\ubc1e<\ubc1f<\ubc24<\ubc25<\ubc27"
-                 + "<\ubc29<\ubc2d<\ubc30<\ubc31<\ubc34<\ubc38<\ubc40"
-                 + "<\ubc41<\ubc43<\ubc44<\ubc45<\ubc49<\ubc4c<\ubc4d"
-                 + "<\ubc50<\ubc5d<\ubc84<\ubc85<\ubc88<\ubc8b<\ubc8c"
-                 + "<\ubc8e<\ubc94<\ubc95<\ubc97<\ubc99<\ubc9a<\ubca0"
-                 + "<\ubca1<\ubca4<\ubca7<\ubca8<\ubcb0<\ubcb1<\ubcb3"
-                 + "<\ubcb4<\ubcb5<\ubcbc<\ubcbd<\ubcc0<\ubcc4<\ubccd"
-                 + "<\ubccf<\ubcd0<\ubcd1<\ubcd5<\ubcd8<\ubcdc<\ubcf4"
-                 + "<\ubcf5<\ubcf6<\ubcf8<\ubcfc<\ubd04<\ubd05<\ubd07"
-                 + "<\ubd09<\ubd10<\ubd14<\ubd24<\ubd2c<\ubd40<\ubd48"
-                 + "<\ubd49<\ubd4c<\ubd50<\ubd58<\ubd59<\ubd64<\ubd68"
-                 + "<\ubd80<\ubd81<\ubd84<\ubd87<\ubd88<\ubd89<\ubd8a"
-                 + "<\ubd90<\ubd91<\ubd93<\ubd95<\ubd99<\ubd9a<\ubd9c"
-                 + "<\ubda4<\ubdb0<\ubdb8<\ubdd4<\ubdd5<\ubdd8<\ubddc"
-                 + "<\ubde9<\ubdf0<\ubdf4<\ubdf8<\ube00<\ube03<\ube05"
-                 + "<\ube0c<\ube0d<\ube10<\ube14<\ube1c<\ube1d<\ube1f"
-                 + "<\ube44<\ube45<\ube48<\ube4c<\ube4e<\ube54<\ube55"
-                 + "<\ube57<\ube59<\ube5a<\ube5b<\ube60<\ube61<\ube64"
-                 + "<\ube68<\ube6a<\ube70<\ube71<\ube73<\ube74<\ube75"
-                 + "<\ube7b<\ube7c<\ube7d<\ube80<\ube84<\ube8c<\ube8d"
-                 + "<\ube8f<\ube90<\ube91<\ube98<\ube99<\ubea8<\ubed0"
-                 + "<\ubed1<\ubed4<\ubed7<\ubed8<\ubee0<\ubee3<\ubee4"
-                 + "<\ubee5<\ubeec<\ubf01<\ubf08<\ubf09<\ubf18<\ubf19"
-                 + "<\ubf1b<\ubf1c<\ubf1d<\ubf40<\ubf41<\ubf44<\ubf48"
-                 + "<\ubf50<\ubf51<\ubf55<\ubf94<\ubfb0<\ubfc5<\ubfcc"
-                 + "<\ubfcd<\ubfd0<\ubfd4<\ubfdc<\ubfdf<\ubfe1<\uc03c"
-                 + "<\uc051<\uc058<\uc05c<\uc060<\uc068<\uc069<\uc090"
-                 + "<\uc091<\uc094<\uc098<\uc0a0<\uc0a1<\uc0a3<\uc0a5"
-                 + "<\uc0ac<\uc0ad<\uc0af<\uc0b0<\uc0b3<\uc0b4<\uc0b5"
-                 + "<\uc0b6<\uc0bc<\uc0bd<\uc0bf<\uc0c0<\uc0c1<\uc0c5"
-                 + "<\uc0c8<\uc0c9<\uc0cc<\uc0d0<\uc0d8<\uc0d9<\uc0db"
-                 + "<\uc0dc<\uc0dd<\uc0e4<\uc0e5<\uc0e8<\uc0ec<\uc0f4"
-                 + "<\uc0f5<\uc0f7<\uc0f9<\uc100<\uc104<\uc108<\uc110"
-                 + "<\uc115<\uc11c<\uc11d<\uc11e<\uc11f<\uc120<\uc123"
-                 + "<\uc124<\uc126<\uc127<\uc12c<\uc12d<\uc12f<\uc130"
-                 + "<\uc131<\uc136<\uc138<\uc139<\uc13c<\uc140<\uc148"
-                 + "<\uc149<\uc14b<\uc14c<\uc14d<\uc154<\uc155<\uc158"
-                 + "<\uc15c<\uc164<\uc165<\uc167<\uc168<\uc169<\uc170"
-                 + "<\uc174<\uc178<\uc185<\uc18c<\uc18d<\uc18e<\uc190"
-                 + "<\uc194<\uc196<\uc19c<\uc19d<\uc19f<\uc1a1<\uc1a5"
-                 + "<\uc1a8<\uc1a9<\uc1ac<\uc1b0<\uc1bd<\uc1c4<\uc1c8"
-                 + "<\uc1cc<\uc1d4<\uc1d7<\uc1d8<\uc1e0<\uc1e4<\uc1e8"
-                 + "<\uc1f0<\uc1f1<\uc1f3<\uc1fc<\uc1fd<\uc200<\uc204"
-                 + "<\uc20c<\uc20d<\uc20f<\uc211<\uc218<\uc219<\uc21c"
-                 + "<\uc21f<\uc220<\uc228<\uc229<\uc22b<\uc22d<\uc22f"
-                 + "<\uc231<\uc232<\uc234<\uc248<\uc250<\uc251<\uc254"
-                 + "<\uc258<\uc260<\uc265<\uc26c<\uc26d<\uc270<\uc274"
-                 + "<\uc27c<\uc27d<\uc27f<\uc281<\uc288<\uc289<\uc290"
-                 + "<\uc298<\uc29b<\uc29d<\uc2a4<\uc2a5<\uc2a8<\uc2ac"
-                 + "<\uc2ad<\uc2b4<\uc2b5<\uc2b7<\uc2b9<\uc2dc<\uc2dd"
-                 + "<\uc2e0<\uc2e3<\uc2e4<\uc2eb<\uc2ec<\uc2ed<\uc2ef"
-                 + "<\uc2f1<\uc2f6<\uc2f8<\uc2f9<\uc2fb<\uc2fc<\uc300"
-                 + "<\uc308<\uc309<\uc30c<\uc30d<\uc313<\uc314<\uc315"
-                 + "<\uc318<\uc31c<\uc324<\uc325<\uc328<\uc329<\uc345"
-                 + "<\uc368<\uc369<\uc36c<\uc370<\uc372<\uc378<\uc379"
-                 + "<\uc37c<\uc37d<\uc384<\uc388<\uc38c<\uc3c0<\uc3d8"
-                 + "<\uc3d9<\uc3dc<\uc3df<\uc3e0<\uc3e2<\uc3e8<\uc3e9"
-                 + "<\uc3ed<\uc3f4<\uc3f5<\uc3f8<\uc408<\uc410<\uc424"
-                 + "<\uc42c<\uc430<\uc434<\uc43c<\uc43d<\uc448<\uc464"
-                 + "<\uc465<\uc468<\uc46c<\uc474<\uc475<\uc479<\uc480"
-                 + "<\uc494<\uc49c<\uc4b8<\uc4bc<\uc4e9<\uc4f0<\uc4f1"
-                 + "<\uc4f4<\uc4f8<\uc4fa<\uc4ff<\uc500<\uc501<\uc50c"
-                 + "<\uc510<\uc514<\uc51c<\uc528<\uc529<\uc52c<\uc530"
-                 + "<\uc538<\uc539<\uc53b<\uc53d<\uc544<\uc545<\uc548"
-                 + "<\uc549<\uc54a<\uc54c<\uc54d<\uc54e<\uc553<\uc554"
-                 + "<\uc555<\uc557<\uc558<\uc559<\uc55d<\uc55e<\uc560"
-                 + "<\uc561<\uc564<\uc568<\uc570<\uc571<\uc573<\uc574"
-                 + "<\uc575<\uc57c<\uc57d<\uc580<\uc584<\uc587<\uc58c"
-                 + "<\uc58d<\uc58f<\uc591<\uc595<\uc597<\uc598<\uc59c"
-                 + "<\uc5a0<\uc5a9<\uc5b4<\uc5b5<\uc5b8<\uc5b9<\uc5bb"
-                 + "<\uc5bc<\uc5bd<\uc5be<\uc5c4<\uc5c5<\uc5c6<\uc5c7"
-                 + "<\uc5c8<\uc5c9<\uc5ca<\uc5cc<\uc5ce<\uc5d0<\uc5d1"
-                 + "<\uc5d4<\uc5d8<\uc5e0<\uc5e1<\uc5e3<\uc5e5<\uc5ec"
-                 + "<\uc5ed<\uc5ee<\uc5f0<\uc5f4<\uc5f6<\uc5f7<\uc5fc"
-                 + "<\uc5fd<\uc5fe<\uc5ff<\uc600<\uc601<\uc605<\uc606"
-                 + "<\uc607<\uc608<\uc60c<\uc610<\uc618<\uc619<\uc61b"
-                 + "<\uc61c<\uc624<\uc625<\uc628<\uc62c<\uc62d<\uc62e"
-                 + "<\uc630<\uc633<\uc634<\uc635<\uc637<\uc639<\uc63b"
-                 + "<\uc640<\uc641<\uc644<\uc648<\uc650<\uc651<\uc653"
-                 + "<\uc654<\uc655<\uc65c<\uc65d<\uc660<\uc66c<\uc66f"
-                 + "<\uc671<\uc678<\uc679<\uc67c<\uc680<\uc688<\uc689"
-                 + "<\uc68b<\uc68d<\uc694<\uc695<\uc698<\uc69c<\uc6a4"
-                 + "<\uc6a5<\uc6a7<\uc6a9<\uc6b0<\uc6b1<\uc6b4<\uc6b8"
-                 + "<\uc6b9<\uc6ba<\uc6c0<\uc6c1<\uc6c3<\uc6c5<\uc6cc"
-                 + "<\uc6cd<\uc6d0<\uc6d4<\uc6dc<\uc6dd<\uc6e0<\uc6e1"
-                 + "<\uc6e8<\uc6e9<\uc6ec<\uc6f0<\uc6f8<\uc6f9<\uc6fd"
-                 + "<\uc704<\uc705<\uc708<\uc70c<\uc714<\uc715<\uc717"
-                 + "<\uc719<\uc720<\uc721<\uc724<\uc728<\uc730<\uc731"
-                 + "<\uc733<\uc735<\uc737<\uc73c<\uc73d<\uc740<\uc744"
-                 + "<\uc74a<\uc74c<\uc74d<\uc74f<\uc751<\uc752<\uc753"
-                 + "<\uc754<\uc755<\uc756<\uc757<\uc758<\uc75c<\uc760"
-                 + "<\uc768<\uc76b<\uc774<\uc775<\uc778<\uc77c<\uc77d"
-                 + "<\uc77e<\uc783<\uc784<\uc785<\uc787<\uc788<\uc789"
-                 + "<\uc78a<\uc78e<\uc790<\uc791<\uc794<\uc796<\uc797"
-                 + "<\uc798<\uc79a<\uc7a0<\uc7a1<\uc7a3<\uc7a4<\uc7a5"
-                 + "<\uc7a6<\uc7ac<\uc7ad<\uc7b0<\uc7b4<\uc7bc<\uc7bd"
-                 + "<\uc7bf<\uc7c0<\uc7c1<\uc7c8<\uc7c9<\uc7cc<\uc7ce"
-                 + "<\uc7d0<\uc7d8<\uc7dd<\uc7e4<\uc7e8<\uc7ec<\uc800"
-                 + "<\uc801<\uc804<\uc808<\uc80a<\uc810<\uc811<\uc813"
-                 + "<\uc815<\uc816<\uc81c<\uc81d<\uc820<\uc824<\uc82c"
-                 + "<\uc82d<\uc82f<\uc831<\uc838<\uc83c<\uc840<\uc848"
-                 + "<\uc849<\uc84c<\uc84d<\uc854<\uc870<\uc871<\uc874"
-                 + "<\uc878<\uc87a<\uc880<\uc881<\uc883<\uc885<\uc886"
-                 + "<\uc887<\uc88b<\uc88c<\uc88d<\uc894<\uc89d<\uc89f"
-                 + "<\uc8a1<\uc8a8<\uc8bc<\uc8bd<\uc8c4<\uc8c8<\uc8cc"
-                 + "<\uc8d4<\uc8d5<\uc8d7<\uc8d9<\uc8e0<\uc8e1<\uc8e4"
-                 + "<\uc8f5<\uc8fc<\uc8fd<\uc900<\uc904<\uc905<\uc906"
-                 + "<\uc90c<\uc90d<\uc90f<\uc911<\uc918<\uc92c<\uc934"
-                 + "<\uc950<\uc951<\uc954<\uc958<\uc960<\uc961<\uc963"
-                 + "<\uc96c<\uc970<\uc974<\uc97c<\uc988<\uc989<\uc98c"
-                 + "<\uc990<\uc998<\uc999<\uc99b<\uc99d<\uc9c0<\uc9c1"
-                 + "<\uc9c4<\uc9c7<\uc9c8<\uc9ca<\uc9d0<\uc9d1<\uc9d3"
-                 + "<\uc9d5<\uc9d6<\uc9d9<\uc9da<\uc9dc<\uc9dd<\uc9e0"
-                 + "<\uc9e2<\uc9e4<\uc9e7<\uc9ec<\uc9ed<\uc9ef<\uc9f0"
-                 + "<\uc9f1<\uc9f8<\uc9f9<\uc9fc<\uca00<\uca08<\uca09"
-                 + "<\uca0b<\uca0c<\uca0d<\uca14<\uca18<\uca29<\uca4c"
-                 + "<\uca4d<\uca50<\uca54<\uca5c<\uca5d<\uca5f<\uca60"
-                 + "<\uca61<\uca68<\uca7d<\uca84<\uca98<\ucabc<\ucabd"
-                 + "<\ucac0<\ucac4<\ucacc<\ucacd<\ucacf<\ucad1<\ucad3"
-                 + "<\ucad8<\ucad9<\ucae0<\ucaec<\ucaf4<\ucb08<\ucb10"
-                 + "<\ucb14<\ucb18<\ucb20<\ucb21<\ucb41<\ucb48<\ucb49"
-                 + "<\ucb4c<\ucb50<\ucb58<\ucb59<\ucb5d<\ucb64<\ucb78"
-                 + "<\ucb79<\ucb9c<\ucbb8<\ucbd4<\ucbe4<\ucbe7<\ucbe9"
-                 + "<\ucc0c<\ucc0d<\ucc10<\ucc14<\ucc1c<\ucc1d<\ucc21"
-                 + "<\ucc22<\ucc27<\ucc28<\ucc29<\ucc2c<\ucc2e<\ucc30"
-                 + "<\ucc38<\ucc39<\ucc3b<\ucc3c<\ucc3d<\ucc3e<\ucc44"
-                 + "<\ucc45<\ucc48<\ucc4c<\ucc54<\ucc55<\ucc57<\ucc58"
-                 + "<\ucc59<\ucc60<\ucc64<\ucc66<\ucc68<\ucc70<\ucc75"
-                 + "<\ucc98<\ucc99<\ucc9c<\ucca0<\ucca8<\ucca9<\uccab"
-                 + "<\uccac<\uccad<\uccb4<\uccb5<\uccb8<\uccbc<\uccc4"
-                 + "<\uccc5<\uccc7<\uccc9<\uccd0<\uccd4<\ucce4<\uccec"
-                 + "<\uccf0<\ucd01<\ucd08<\ucd09<\ucd0c<\ucd10<\ucd18"
-                 + "<\ucd19<\ucd1b<\ucd1d<\ucd24<\ucd28<\ucd2c<\ucd39"
-                 + "<\ucd5c<\ucd60<\ucd64<\ucd6c<\ucd6d<\ucd6f<\ucd71"
-                 + "<\ucd78<\ucd88<\ucd94<\ucd95<\ucd98<\ucd9c<\ucda4"
-                 + "<\ucda5<\ucda7<\ucda9<\ucdb0<\ucdc4<\ucdcc<\ucdd0"
-                 + "<\ucde8<\ucdec<\ucdf0<\ucdf8<\ucdf9<\ucdfb<\ucdfd"
-                 + "<\uce04<\uce08<\uce0c<\uce14<\uce19<\uce20<\uce21"
-                 + "<\uce24<\uce28<\uce30<\uce31<\uce33<\uce35<\uce58"
-                 + "<\uce59<\uce5c<\uce5f<\uce60<\uce61<\uce68<\uce69"
-                 + "<\uce6b<\uce6d<\uce74<\uce75<\uce78<\uce7c<\uce84"
-                 + "<\uce85<\uce87<\uce89<\uce90<\uce91<\uce94<\uce98"
-                 + "<\ucea0<\ucea1<\ucea3<\ucea4<\ucea5<\uceac<\ucead"
-                 + "<\ucec1<\ucee4<\ucee5<\ucee8<\uceeb<\uceec<\ucef4"
-                 + "<\ucef5<\ucef7<\ucef8<\ucef9<\ucf00<\ucf01<\ucf04"
-                 + "<\ucf08<\ucf10<\ucf11<\ucf13<\ucf15<\ucf1c<\ucf20"
-                 + "<\ucf24<\ucf2c<\ucf2d<\ucf2f<\ucf30<\ucf31<\ucf38"
-                 + "<\ucf54<\ucf55<\ucf58<\ucf5c<\ucf64<\ucf65<\ucf67"
-                 + "<\ucf69<\ucf70<\ucf71<\ucf74<\ucf78<\ucf80<\ucf85"
-                 + "<\ucf8c<\ucfa1<\ucfa8<\ucfb0<\ucfc4<\ucfe0<\ucfe1"
-                 + "<\ucfe4<\ucfe8<\ucff0<\ucff1<\ucff3<\ucff5<\ucffc"
-                 + "<\ud000<\ud004<\ud011<\ud018<\ud02d<\ud034<\ud035"
-                 + "<\ud038<\ud03c<\ud044<\ud045<\ud047<\ud049<\ud050"
-                 + "<\ud054<\ud058<\ud060<\ud06c<\ud06d<\ud070<\ud074"
-                 + "<\ud07c<\ud07d<\ud081<\ud0a4<\ud0a5<\ud0a8<\ud0ac"
-                 + "<\ud0b4<\ud0b5<\ud0b7<\ud0b9<\ud0c0<\ud0c1<\ud0c4"
-                 + "<\ud0c8<\ud0c9<\ud0d0<\ud0d1<\ud0d3<\ud0d4<\ud0d5"
-                 + "<\ud0dc<\ud0dd<\ud0e0<\ud0e4<\ud0ec<\ud0ed<\ud0ef"
-                 + "<\ud0f0<\ud0f1<\ud0f8<\ud10d<\ud130<\ud131<\ud134"
-                 + "<\ud138<\ud13a<\ud140<\ud141<\ud143<\ud144<\ud145"
-                 + "<\ud14c<\ud14d<\ud150<\ud154<\ud15c<\ud15d<\ud15f"
-                 + "<\ud161<\ud168<\ud16c<\ud17c<\ud184<\ud188<\ud1a0"
-                 + "<\ud1a1<\ud1a4<\ud1a8<\ud1b0<\ud1b1<\ud1b3<\ud1b5"
-                 + "<\ud1ba<\ud1bc<\ud1c0<\ud1d8<\ud1f4<\ud1f8<\ud207"
-                 + "<\ud209<\ud210<\ud22c<\ud22d<\ud230<\ud234<\ud23c"
-                 + "<\ud23d<\ud23f<\ud241<\ud248<\ud25c<\ud264<\ud280"
-                 + "<\ud281<\ud284<\ud288<\ud290<\ud291<\ud295<\ud29c"
-                 + "<\ud2a0<\ud2a4<\ud2ac<\ud2b1<\ud2b8<\ud2b9<\ud2bc"
-                 + "<\ud2bf<\ud2c0<\ud2c2<\ud2c8<\ud2c9<\ud2cb<\ud2d4"
-                 + "<\ud2d8<\ud2dc<\ud2e4<\ud2e5<\ud2f0<\ud2f1<\ud2f4"
-                 + "<\ud2f8<\ud300<\ud301<\ud303<\ud305<\ud30c<\ud30d"
-                 + "<\ud30e<\ud310<\ud314<\ud316<\ud31c<\ud31d<\ud31f"
-                 + "<\ud320<\ud321<\ud325<\ud328<\ud329<\ud32c<\ud330"
-                 + "<\ud338<\ud339<\ud33b<\ud33c<\ud33d<\ud344<\ud345"
-                 + "<\ud37c<\ud37d<\ud380<\ud384<\ud38c<\ud38d<\ud38f"
-                 + "<\ud390<\ud391<\ud398<\ud399<\ud39c<\ud3a0<\ud3a8"
-                 + "<\ud3a9<\ud3ab<\ud3ad<\ud3b4<\ud3b8<\ud3bc<\ud3c4"
-                 + "<\ud3c5<\ud3c8<\ud3c9<\ud3d0<\ud3d8<\ud3e1<\ud3e3"
-                 + "<\ud3ec<\ud3ed<\ud3f0<\ud3f4<\ud3fc<\ud3fd<\ud3ff"
-                 + "<\ud401<\ud408<\ud41d<\ud440<\ud444<\ud45c<\ud460"
-                 + "<\ud464<\ud46d<\ud46f<\ud478<\ud479<\ud47c<\ud47f"
-                 + "<\ud480<\ud482<\ud488<\ud489<\ud48b<\ud48d<\ud494"
-                 + "<\ud4a9<\ud4cc<\ud4d0<\ud4d4<\ud4dc<\ud4df<\ud4e8"
-                 + "<\ud4ec<\ud4f0<\ud4f8<\ud4fb<\ud4fd<\ud504<\ud508"
-                 + "<\ud50c<\ud514<\ud515<\ud517<\ud53c<\ud53d<\ud540"
-                 + "<\ud544<\ud54c<\ud54d<\ud54f<\ud551<\ud558<\ud559"
-                 + "<\ud55c<\ud560<\ud565<\ud568<\ud569<\ud56b<\ud56d"
-                 + "<\ud574<\ud575<\ud578<\ud57c<\ud584<\ud585<\ud587"
-                 + "<\ud588<\ud589<\ud590<\ud5a5<\ud5c8<\ud5c9<\ud5cc"
-                 + "<\ud5d0<\ud5d2<\ud5d8<\ud5d9<\ud5db<\ud5dd<\ud5e4"
-                 + "<\ud5e5<\ud5e8<\ud5ec<\ud5f4<\ud5f5<\ud5f7<\ud5f9"
-                 + "<\ud600<\ud601<\ud604<\ud608<\ud610<\ud611<\ud613"
-                 + "<\ud614<\ud615<\ud61c<\ud620<\ud624<\ud62d<\ud638"
-                 + "<\ud639<\ud63c<\ud640<\ud645<\ud648<\ud649<\ud64b"
-                 + "<\ud64d<\ud651<\ud654<\ud655<\ud658<\ud65c<\ud667"
-                 + "<\ud669<\ud670<\ud671<\ud674<\ud683<\ud685<\ud68c"
-                 + "<\ud68d<\ud690<\ud694<\ud69d<\ud69f<\ud6a1<\ud6a8"
-                 + "<\ud6ac<\ud6b0<\ud6b9<\ud6bb<\ud6c4<\ud6c5<\ud6c8"
-                 + "<\ud6cc<\ud6d1<\ud6d4<\ud6d7<\ud6d9<\ud6e0<\ud6e4"
-                 + "<\ud6e8<\ud6f0<\ud6f5<\ud6fc<\ud6fd<\ud700<\ud704"
-                 + "<\ud711<\ud718<\ud719<\ud71c<\ud720<\ud728<\ud729"
-                 + "<\ud72b<\ud72d<\ud734<\ud735<\ud738<\ud73c<\ud744"
-                 + "<\ud747<\ud749<\ud750<\ud751<\ud754<\ud756<\ud757"
-                 + "<\ud758<\ud759<\ud760<\ud761<\ud763<\ud765<\ud769"
-                 + "<\ud76c<\ud770<\ud774<\ud77c<\ud77d<\ud781<\ud788"
-                 + "<\ud789<\ud78c<\ud790<\ud798<\ud799<\ud79b<\ud79d"
-                 + "<\u4f3d<\u4f73<\u5047<\u50f9<\u52a0<\u53ef<\u5475"
-                 + "<\u54e5<\u5609<\u5ac1<\u5bb6<\u6687<\u67b6<\u67b7"
-                 + "<\u67ef<\u6b4c<\u73c2<\u75c2<\u7a3c<\u82db<\u8304"
-                 + "<\u8857<\u8888<\u8a36<\u8cc8<\u8dcf<\u8efb<\u8fe6"
-                 + "<\u99d5<\u523b<\u5374<\u5404<\u606a<\u6164<\u6bbc"
-                 + "<\u73cf<\u811a<\u89ba<\u89d2<\u95a3<\u4f83<\u520a"
-                 + "<\u58be<\u5978<\u59e6<\u5e72<\u5e79<\u61c7<\u63c0"
-                 + "<\u6746<\u67ec<\u687f<\u6f97<\u764e<\u770b<\u78f5"
-                 + "<\u7a08<\u7aff<\u7c21<\u809d<\u826e<\u8271<\u8aeb"
-                 + "<\u9593<\u4e6b<\u559d<\u66f7<\u6e34<\u78a3<\u7aed"
-                 + "<\u845b<\u8910<\u874e<\u97a8<\u52d8<\u574e<\u582a"
-                 + "<\u5d4c<\u611f<\u61be<\u6221<\u6562<\u67d1<\u6a44"
-                 + "<\u6e1b<\u7518<\u75b3<\u76e3<\u77b0<\u7d3a<\u90af"
-                 + "<\u9451<\u9452<\u9f95<\u5323<\u5cac<\u7532<\u80db"
-                 + "<\u9240<\u9598<\u525b<\u5808<\u59dc<\u5ca1<\u5d17"
-                 + "<\u5eb7<\u5f3a<\u5f4a<\u6177<\u6c5f<\u757a<\u7586"
-                 + "<\u7ce0<\u7d73<\u7db1<\u7f8c<\u8154<\u8221<\u8591"
-                 + "<\u8941<\u8b1b<\u92fc<\u964d<\u9c47<\u4ecb<\u4ef7"
-                 + "<\u500b<\u51f1<\u584f<\u6137<\u613e<\u6168<\u6539"
-                 + "<\u69ea<\u6f11<\u75a5<\u7686<\u76d6<\u7b87<\u82a5"
-                 + "<\u84cb<\uf900<\u93a7<\u958b<\u5580<\u5ba2<\u5751"
-                 + "<\uf901<\u7cb3<\u7fb9<\u91b5<\u5028<\u53bb<\u5c45"
-                 + "<\u5de8<\u62d2<\u636e<\u64da<\u64e7<\u6e20<\u70ac"
-                 + "<\u795b<\u8ddd<\u8e1e<\uf902<\u907d<\u9245<\u92f8"
-                 + "<\u4e7e<\u4ef6<\u5065<\u5dfe<\u5efa<\u6106<\u6957"
-                 + "<\u8171<\u8654<\u8e47<\u9375<\u9a2b<\u4e5e<\u5091"
-                 + "<\u6770<\u6840<\u5109<\u528d<\u5292<\u6aa2<\u77bc"
-                 + "<\u9210<\u9ed4<\u52ab<\u602f<\u8ff2<\u5048<\u61a9"
-                 + "<\u63ed<\u64ca<\u683c<\u6a84<\u6fc0<\u8188<\u89a1"
-                 + "<\u9694<\u5805<\u727d<\u72ac<\u7504<\u7d79<\u7e6d"
-                 + "<\u80a9<\u898b<\u8b74<\u9063<\u9d51<\u6289<\u6c7a"
-                 + "<\u6f54<\u7d50<\u7f3a<\u8a23<\u517c<\u614a<\u7b9d"
-                 + "<\u8b19<\u9257<\u938c<\u4eac<\u4fd3<\u501e<\u50be"
-                 + "<\u5106<\u52c1<\u52cd<\u537f<\u5770<\u5883<\u5e9a"
-                 + "<\u5f91<\u6176<\u61ac<\u64ce<\u656c<\u666f<\u66bb"
-                 + "<\u66f4<\u6897<\u6d87<\u7085<\u70f1<\u749f<\u74a5"
-                 + "<\u74ca<\u75d9<\u786c<\u78ec<\u7adf<\u7af6<\u7d45"
-                 + "<\u7d93<\u8015<\u803f<\u811b<\u8396<\u8b66<\u8f15"
-                 + "<\u9015<\u93e1<\u9803<\u9838<\u9a5a<\u9be8<\u4fc2"
-                 + "<\u5553<\u583a<\u5951<\u5b63<\u5c46<\u60b8<\u6212"
-                 + "<\u6842<\u68b0<\u68e8<\u6eaa<\u754c<\u7678<\u78ce"
-                 + "<\u7a3d<\u7cfb<\u7e6b<\u7e7c<\u8a08<\u8aa1<\u8c3f"
-                 + "<\u968e<\u9dc4<\u53e4<\u53e9<\u544a<\u5471<\u56fa"
-                 + "<\u59d1<\u5b64<\u5c3b<\u5eab<\u62f7<\u6537<\u6545"
-                 + "<\u6572<\u66a0<\u67af<\u69c1<\u6cbd<\u75fc<\u7690"
-                 + "<\u777e<\u7a3f<\u7f94<\u8003<\u80a1<\u818f<\u82e6"
-                 + "<\u82fd<\u83f0<\u85c1<\u8831<\u88b4<\u8aa5<\uf903"
-                 + "<\u8f9c<\u932e<\u96c7<\u9867<\u9ad8<\u9f13<\u54ed"
-                 + "<\u659b<\u66f2<\u688f<\u7a40<\u8c37<\u9d60<\u56f0"
-                 + "<\u5764<\u5d11<\u6606<\u68b1<\u68cd<\u6efe<\u7428"
-                 + "<\u889e<\u9be4<\u6c68<\uf904<\u9aa8<\u4f9b<\u516c"
-                 + "<\u5171<\u529f<\u5b54<\u5de5<\u6050<\u606d<\u62f1"
-                 + "<\u63a7<\u653b<\u73d9<\u7a7a<\u86a3<\u8ca2<\u978f"
-                 + "<\u4e32<\u5be1<\u6208<\u679c<\u74dc<\u79d1<\u83d3"
-                 + "<\u8a87<\u8ab2<\u8de8<\u904e<\u934b<\u9846<\u5ed3"
-                 + "<\u69e8<\u85ff<\u90ed<\uf905<\u51a0<\u5b98<\u5bec"
-                 + "<\u6163<\u68fa<\u6b3e<\u704c<\u742f<\u74d8<\u7ba1"
-                 + "<\u7f50<\u83c5<\u89c0<\u8cab<\u95dc<\u9928<\u522e"
-                 + "<\u605d<\u62ec<\u9002<\u4f8a<\u5149<\u5321<\u58d9"
-                 + "<\u5ee3<\u66e0<\u6d38<\u709a<\u72c2<\u73d6<\u7b50"
-                 + "<\u80f1<\u945b<\u5366<\u639b<\u7f6b<\u4e56<\u5080"
-                 + "<\u584a<\u58de<\u602a<\u6127<\u62d0<\u69d0<\u9b41"
-                 + "<\u5b8f<\u7d18<\u80b1<\u8f5f<\u4ea4<\u50d1<\u54ac"
-                 + "<\u55ac<\u5b0c<\u5da0<\u5de7<\u652a<\u654e<\u6821"
-                 + "<\u6a4b<\u72e1<\u768e<\u77ef<\u7d5e<\u7ff9<\u81a0"
-                 + "<\u854e<\u86df<\u8f03<\u8f4e<\u90ca<\u9903<\u9a55"
-                 + "<\u9bab<\u4e18<\u4e45<\u4e5d<\u4ec7<\u4ff1<\u5177"
-                 + "<\u52fe<\u5340<\u53e3<\u53e5<\u548e<\u5614<\u5775"
-                 + "<\u57a2<\u5bc7<\u5d87<\u5ed0<\u61fc<\u62d8<\u6551"
-                 + "<\u67b8<\u67e9<\u69cb<\u6b50<\u6bc6<\u6bec<\u6c42"
-                 + "<\u6e9d<\u7078<\u72d7<\u7396<\u7403<\u77bf<\u77e9"
-                 + "<\u7a76<\u7d7f<\u8009<\u81fc<\u8205<\u820a<\u82df"
-                 + "<\u8862<\u8b33<\u8cfc<\u8ec0<\u9011<\u90b1<\u9264"
-                 + "<\u92b6<\u99d2<\u9a45<\u9ce9<\u9dd7<\u9f9c<\u570b"
-                 + "<\u5c40<\u83ca<\u97a0<\u97ab<\u9eb4<\u541b<\u7a98"
-                 + "<\u7fa4<\u88d9<\u8ecd<\u90e1<\u5800<\u5c48<\u6398"
-                 + "<\u7a9f<\u5bae<\u5f13<\u7a79<\u7aae<\u828e<\u8eac"
-                 + "<\u5026<\u5238<\u52f8<\u5377<\u5708<\u62f3<\u6372"
-                 + "<\u6b0a<\u6dc3<\u7737<\u53a5<\u7357<\u8568<\u8e76"
-                 + "<\u95d5<\u673a<\u6ac3<\u6f70<\u8a6d<\u8ecc<\u994b"
-                 + "<\uf906<\u6677<\u6b78<\u8cb4<\u9b3c<\uf907<\u53eb"
-                 + "<\u572d<\u594e<\u63c6<\u69fb<\u73ea<\u7845<\u7aba"
-                 + "<\u7ac5<\u7cfe<\u8475<\u898f<\u8d73<\u9035<\u95a8"
-                 + "<\u52fb<\u5747<\u7547<\u7b60<\u83cc<\u921e<\uf908"
-                 + "<\u6a58<\u514b<\u524b<\u5287<\u621f<\u68d8<\u6975"
-                 + "<\u9699<\u50c5<\u52a4<\u52e4<\u61c3<\u65a4<\u6839"
-                 + "<\u69ff<\u747e<\u7b4b<\u82b9<\u83eb<\u89b2<\u8b39"
-                 + "<\u8fd1<\u9949<\uf909<\u4eca<\u5997<\u64d2<\u6611"
-                 + "<\u6a8e<\u7434<\u7981<\u79bd<\u82a9<\u887e<\u887f"
-                 + "<\u895f<\uf90a<\u9326<\u4f0b<\u53ca<\u6025<\u6271"
-                 + "<\u6c72<\u7d1a<\u7d66<\u4e98<\u5162<\u77dc<\u80af"
-                 + "<\u4f01<\u4f0e<\u5176<\u5180<\u55dc<\u5668<\u573b"
-                 + "<\u57fa<\u57fc<\u5914<\u5947<\u5993<\u5bc4<\u5c90"
-                 + "<\u5d0e<\u5df1<\u5e7e<\u5fcc<\u6280<\u65d7<\u65e3"
-                 + "<\u671e<\u671f<\u675e<\u68cb<\u68c4<\u6a5f<\u6b3a"
-                 + "<\u6c23<\u6c7d<\u6c82<\u6dc7<\u7398<\u7426<\u742a"
-                 + "<\u7482<\u74a3<\u7578<\u757f<\u7881<\u78ef<\u7941"
-                 + "<\u7947<\u7948<\u797a<\u7b95<\u7d00<\u7dba<\u7f88"
-                 + "<\u8006<\u802d<\u808c<\u8a18<\u8b4f<\u8c48<\u8d77"
-                 + "<\u9321<\u9324<\u98e2<\u9951<\u9a0e<\u9a0f<\u9a65"
-                 + "<\u9e92<\u7dca<\u4f76<\u5409<\u62ee<\u6854<\u91d1"
-                 + "<\u55ab<\u513a<\uf90b<\uf90c<\u5a1c<\u61e6<\uf90d"
-                 + "<\u62cf<\u62ff<\uf90e<\uf90f<\uf910<\uf911<\uf912"
-                 + "<\uf913<\u90a3<\uf914<\uf915<\uf916<\uf917<\uf918"
-                 + "<\u8afe<\uf919<\uf91a<\uf91b<\uf91c<\u6696<\uf91d"
-                 + "<\u7156<\uf91e<\uf91f<\u96e3<\uf920<\u634f<\u637a"
-                 + "<\u5357<\uf921<\u678f<\u6960<\u6e73<\uf922<\u7537"
-                 + "<\uf923<\uf924<\uf925<\u7d0d<\uf926<\uf927<\u8872"
-                 + "<\u56ca<\u5a18<\uf928<\uf929<\uf92a<\uf92b<\uf92c"
-                 + "<\u4e43<\uf92d<\u5167<\u5948<\u67f0<\u8010<\uf92e"
-                 + "<\u5973<\u5e74<\u649a<\u79ca<\u5ff5<\u606c<\u62c8"
-                 + "<\u637b<\u5be7<\u5bd7<\u52aa<\uf92f<\u5974<\u5f29"
-                 + "<\u6012<\uf930<\uf931<\uf932<\u7459<\uf933<\uf934"
-                 + "<\uf935<\uf936<\uf937<\uf938<\u99d1<\uf939<\uf93a"
-                 + "<\uf93b<\uf93c<\uf93d<\uf93e<\uf93f<\uf940<\uf941"
-                 + "<\uf942<\uf943<\u6fc3<\uf944<\uf945<\u81bf<\u8fb2"
-                 + "<\u60f1<\uf946<\uf947<\u8166<\uf948<\uf949<\u5c3f"
-                 + "<\uf94a<\uf94b<\uf94c<\uf94d<\uf94e<\uf94f<\uf950"
-                 + "<\uf951<\u5ae9<\u8a25<\u677b<\u7d10<\uf952<\uf953"
-                 + "<\uf954<\uf955<\uf956<\uf957<\u80fd<\uf958<\uf959"
-                 + "<\u5c3c<\u6ce5<\u533f<\u6eba<\u591a<\u8336<\u4e39"
-                 + "<\u4eb6<\u4f46<\u55ae<\u5718<\u58c7<\u5f56<\u65b7"
-                 + "<\u65e6<\u6a80<\u6bb5<\u6e4d<\u77ed<\u7aef<\u7c1e"
-                 + "<\u7dde<\u86cb<\u8892<\u9132<\u935b<\u64bb<\u6fbe"
-                 + "<\u737a<\u75b8<\u9054<\u5556<\u574d<\u61ba<\u64d4"
-                 + "<\u66c7<\u6de1<\u6e5b<\u6f6d<\u6fb9<\u75f0<\u8043"
-                 + "<\u81bd<\u8541<\u8983<\u8ac7<\u8b5a<\u931f<\u6c93"
-                 + "<\u7553<\u7b54<\u8e0f<\u905d<\u5510<\u5802<\u5858"
-                 + "<\u5e62<\u6207<\u649e<\u68e0<\u7576<\u7cd6<\u87b3"
-                 + "<\u9ee8<\u4ee3<\u5788<\u576e<\u5927<\u5c0d<\u5cb1"
-                 + "<\u5e36<\u5f85<\u6234<\u64e1<\u73b3<\u81fa<\u888b"
-                 + "<\u8cb8<\u968a<\u9edb<\u5b85<\u5fb7<\u60b3<\u5012"
-                 + "<\u5200<\u5230<\u5716<\u5835<\u5857<\u5c0e<\u5c60"
-                 + "<\u5cf6<\u5d8b<\u5ea6<\u5f92<\u60bc<\u6311<\u6389"
-                 + "<\u6417<\u6843<\u68f9<\u6ac2<\u6dd8<\u6e21<\u6ed4"
-                 + "<\u6fe4<\u71fe<\u76dc<\u7779<\u79b1<\u7a3b<\u8404"
-                 + "<\u89a9<\u8ced<\u8df3<\u8e48<\u9003<\u9014<\u9053"
-                 + "<\u90fd<\u934d<\u9676<\u97dc<\u6bd2<\u7006<\u7258"
-                 + "<\u72a2<\u7368<\u7763<\u79bf<\u7be4<\u7e9b<\u8b80"
-                 + "<\u58a9<\u60c7<\u6566<\u65fd<\u66be<\u6c8c<\u711e"
-                 + "<\u71c9<\u8c5a<\u9813<\u4e6d<\u7a81<\u4edd<\u51ac"
-                 + "<\u51cd<\u52d5<\u540c<\u61a7<\u6771<\u6850<\u68df"
-                 + "<\u6d1e<\u6f7c<\u75bc<\u77b3<\u7ae5<\u80f4<\u8463"
-                 + "<\u9285<\u515c<\u6597<\u675c<\u6793<\u75d8<\u7ac7"
-                 + "<\u8373<\uf95a<\u8c46<\u9017<\u982d<\u5c6f<\u81c0"
-                 + "<\u829a<\u9041<\u906f<\u920d<\u5f97<\u5d9d<\u6a59"
-                 + "<\u71c8<\u767b<\u7b49<\u85e4<\u8b04<\u9127<\u9a30"
-                 + "<\u5587<\u61f6<\uf95b<\u7669<\u7f85<\u863f<\u87ba"
-                 + "<\u88f8<\u908f<\uf95c<\u6d1b<\u70d9<\u73de<\u7d61"
-                 + "<\u843d<\uf95d<\u916a<\u99f1<\uf95e<\u4e82<\u5375"
-                 + "<\u6b04<\u6b12<\u703e<\u721b<\u862d<\u9e1e<\u524c"
-                 + "<\u8fa3<\u5d50<\u64e5<\u652c<\u6b16<\u6feb<\u7c43"
-                 + "<\u7e9c<\u85cd<\u8964<\u89bd<\u62c9<\u81d8<\u881f"
-                 + "<\u5eca<\u6717<\u6d6a<\u72fc<\u7405<\u746f<\u8782"
-                 + "<\u90de<\u4f86<\u5d0d<\u5fa0<\u840a<\u51b7<\u63a0"
-                 + "<\u7565<\u4eae<\u5006<\u5169<\u51c9<\u6881<\u6a11"
-                 + "<\u7cae<\u7cb1<\u7ce7<\u826f<\u8ad2<\u8f1b<\u91cf"
-                 + "<\u4fb6<\u5137<\u52f5<\u5442<\u5eec<\u616e<\u623e"
-                 + "<\u65c5<\u6ada<\u6ffe<\u792a<\u85dc<\u8823<\u95ad"
-                 + "<\u9a62<\u9a6a<\u9e97<\u9ece<\u529b<\u66c6<\u6b77"
-                 + "<\u701d<\u792b<\u8f62<\u9742<\u6190<\u6200<\u6523"
-                 + "<\u6f23<\u7149<\u7489<\u7df4<\u806f<\u84ee<\u8f26"
-                 + "<\u9023<\u934a<\u51bd<\u5217<\u52a3<\u6d0c<\u70c8"
-                 + "<\u88c2<\u5ec9<\u6582<\u6bae<\u6fc2<\u7c3e<\u7375"
-                 + "<\u4ee4<\u4f36<\u56f9<\uf95f<\u5cba<\u5dba<\u601c"
-                 + "<\u73b2<\u7b2d<\u7f9a<\u7fce<\u8046<\u901e<\u9234"
-                 + "<\u96f6<\u9748<\u9818<\u9f61<\u4f8b<\u6fa7<\u79ae"
-                 + "<\u91b4<\u96b7<\u52de<\uf960<\u6488<\u64c4<\u6ad3"
-                 + "<\u6f5e<\u7018<\u7210<\u76e7<\u8001<\u8606<\u865c"
-                 + "<\u8def<\u8f05<\u9732<\u9b6f<\u9dfa<\u9e75<\u788c"
-                 + "<\u797f<\u7da0<\u83c9<\u9304<\u9e7f<\u9e93<\u8ad6"
-                 + "<\u58df<\u5f04<\u6727<\u7027<\u74cf<\u7c60<\u807e"
-                 + "<\u5121<\u7028<\u7262<\u78ca<\u8cc2<\u8cda<\u8cf4"
-                 + "<\u96f7<\u4e86<\u50da<\u5bee<\u5ed6<\u6599<\u71ce"
-                 + "<\u7642<\u77ad<\u804a<\u84fc<\u907c<\u9b27<\u9f8d"
-                 + "<\u58d8<\u5a41<\u5c62<\u6a13<\u6dda<\u6f0f<\u763b"
-                 + "<\u7d2f<\u7e37<\u851e<\u8938<\u93e4<\u964b<\u5289"
-                 + "<\u65d2<\u67f3<\u69b4<\u6d41<\u6e9c<\u700f<\u7409"
-                 + "<\u7460<\u7559<\u7624<\u786b<\u8b2c<\u985e<\u516d"
-                 + "<\u622e<\u9678<\u4f96<\u502b<\u5d19<\u6dea<\u7db8"
-                 + "<\u8f2a<\u5f8b<\u6144<\u6817<\uf961<\u9686<\u52d2"
-                 + "<\u808b<\u51dc<\u51cc<\u695e<\u7a1c<\u7dbe<\u83f1"
-                 + "<\u9675<\u4fda<\u5229<\u5398<\u540f<\u550e<\u5c65"
-                 + "<\u60a7<\u674e<\u68a8<\u6d6c<\u7281<\u72f8<\u7406"
-                 + "<\u7483<\uf962<\u75e2<\u7c6c<\u7f79<\u7fb8<\u8389"
-                 + "<\u88cf<\u88e1<\u91cc<\u91d0<\u96e2<\u9bc9<\u541d"
-                 + "<\u6f7e<\u71d0<\u7498<\u85fa<\u8eaa<\u96a3<\u9c57"
-                 + "<\u9e9f<\u6797<\u6dcb<\u7433<\u81e8<\u9716<\u782c"
-                 + "<\u7acb<\u7b20<\u7c92<\u6469<\u746a<\u75f2<\u78bc"
-                 + "<\u78e8<\u99ac<\u9b54<\u9ebb<\u5bde<\u5e55<\u6f20"
-                 + "<\u819c<\u83ab<\u9088<\u4e07<\u534d<\u5a29<\u5dd2"
-                 + "<\u5f4e<\u6162<\u633d<\u6669<\u66fc<\u6eff<\u6f2b"
-                 + "<\u7063<\u779e<\u842c<\u8513<\u883b<\u8f13<\u9945"
-                 + "<\u9c3b<\u551c<\u62b9<\u672b<\u6cab<\u8309<\u896a"
-                 + "<\u977a<\u4ea1<\u5984<\u5fd8<\u5fd9<\u671b<\u7db2"
-                 + "<\u7f54<\u8292<\u832b<\u83bd<\u8f1e<\u9099<\u57cb"
-                 + "<\u59b9<\u5a92<\u5bd0<\u6627<\u679a<\u6885<\u6bcf"
-                 + "<\u7164<\u7f75<\u8cb7<\u8ce3<\u9081<\u9b45<\u8108"
-                 + "<\u8c8a<\u964c<\u9a40<\u9ea5<\u5b5f<\u6c13<\u731b"
-                 + "<\u76f2<\u76df<\u840c<\u51aa<\u8993<\u514d<\u5195"
-                 + "<\u52c9<\u68c9<\u6c94<\u7704<\u7720<\u7dbf<\u7dec"
-                 + "<\u9762<\u9eb5<\u6ec5<\u8511<\u51a5<\u540d<\u547d"
-                 + "<\u660e<\u669d<\u6927<\u6e9f<\u76bf<\u7791<\u8317"
-                 + "<\u84c2<\u879f<\u9169<\u9298<\u9cf4<\u8882<\u4fae"
-                 + "<\u5192<\u52df<\u59c6<\u5e3d<\u6155<\u6478<\u6479"
-                 + "<\u66ae<\u67d0<\u6a21<\u6bcd<\u6bdb<\u725f<\u7261"
-                 + "<\u7441<\u7738<\u77db<\u8017<\u82bc<\u8305<\u8b00"
-                 + "<\u8b28<\u8c8c<\u6728<\u6c90<\u7267<\u76ee<\u7766"
-                 + "<\u7a46<\u9da9<\u6b7f<\u6c92<\u5922<\u6726<\u8499"
-                 + "<\u536f<\u5893<\u5999<\u5edf<\u63cf<\u6634<\u6773"
-                 + "<\u6e3a<\u732b<\u7ad7<\u82d7<\u9328<\u52d9<\u5deb"
-                 + "<\u61ae<\u61cb<\u620a<\u62c7<\u64ab<\u65e0<\u6959"
-                 + "<\u6b66<\u6bcb<\u7121<\u73f7<\u755d<\u7e46<\u821e"
-                 + "<\u8302<\u856a<\u8aa3<\u8cbf<\u9727<\u9d61<\u58a8"
-                 + "<\u9ed8<\u5011<\u520e<\u543b<\u554f<\u6587<\u6c76"
-                 + "<\u7d0a<\u7d0b<\u805e<\u868a<\u9580<\u96ef<\u52ff"
-                 + "<\u6c95<\u7269<\u5473<\u5a9a<\u5c3e<\u5d4b<\u5f4c"
-                 + "<\u5fae<\u672a<\u68b6<\u6963<\u6e3c<\u6e44<\u7709"
-                 + "<\u7c73<\u7f8e<\u8587<\u8b0e<\u8ff7<\u9761<\u9ef4"
-                 + "<\u5cb7<\u60b6<\u610d<\u61ab<\u654f<\u65fb<\u65fc"
-                 + "<\u6c11<\u6cef<\u739f<\u73c9<\u7de1<\u9594<\u5bc6"
-                 + "<\u871c<\u8b10<\u525d<\u535a<\u62cd<\u640f<\u64b2"
-                 + "<\u6734<\u6a38<\u6cca<\u73c0<\u749e<\u7b94<\u7c95"
-                 + "<\u7e1b<\u818a<\u8236<\u8584<\u8feb<\u96f9<\u99c1"
-                 + "<\u4f34<\u534a<\u53cd<\u53db<\u62cc<\u642c<\u6500"
-                 + "<\u6591<\u69c3<\u6cee<\u6f58<\u73ed<\u7554<\u7622"
-                 + "<\u76e4<\u76fc<\u78d0<\u78fb<\u792c<\u7d46<\u822c"
-                 + "<\u87e0<\u8fd4<\u9812<\u98ef<\u52c3<\u62d4<\u64a5"
-                 + "<\u6e24<\u6f51<\u767c<\u8dcb<\u91b1<\u9262<\u9aee"
-                 + "<\u9b43<\u5023<\u508d<\u574a<\u59a8<\u5c28<\u5e47"
-                 + "<\u5f77<\u623f<\u653e<\u65b9<\u65c1<\u6609<\u678b"
-                 + "<\u699c<\u6ec2<\u78c5<\u7d21<\u80aa<\u8180<\u822b"
-                 + "<\u82b3<\u84a1<\u868c<\u8a2a<\u8b17<\u90a6<\u9632"
-                 + "<\u9f90<\u500d<\u4ff3<\uf963<\u57f9<\u5f98<\u62dc"
-                 + "<\u6392<\u676f<\u6e43<\u7119<\u76c3<\u80cc<\u80da"
-                 + "<\u88f4<\u88f5<\u8919<\u8ce0<\u8f29<\u914d<\u966a"
-                 + "<\u4f2f<\u4f70<\u5e1b<\u67cf<\u6822<\u767d<\u767e"
-                 + "<\u9b44<\u5e61<\u6a0a<\u7169<\u71d4<\u756a<\uf964"
-                 + "<\u7e41<\u8543<\u85e9<\u98dc<\u4f10<\u7b4f<\u7f70"
-                 + "<\u95a5<\u51e1<\u5e06<\u68b5<\u6c3e<\u6c4e<\u6cdb"
-                 + "<\u72af<\u7bc4<\u8303<\u6cd5<\u743a<\u50fb<\u5288"
-                 + "<\u58c1<\u64d8<\u6a97<\u74a7<\u7656<\u78a7<\u8617"
-                 + "<\u95e2<\u9739<\uf965<\u535e<\u5f01<\u8b8a<\u8fa8"
-                 + "<\u8faf<\u908a<\u5225<\u77a5<\u9c49<\u9f08<\u4e19"
-                 + "<\u5002<\u5175<\u5c5b<\u5e77<\u661e<\u663a<\u67c4"
-                 + "<\u68c5<\u70b3<\u7501<\u75c5<\u79c9<\u7add<\u8f27"
-                 + "<\u9920<\u9a08<\u4fdd<\u5821<\u5831<\u5bf6<\u666e"
-                 + "<\u6b65<\u6d11<\u6e7a<\u6f7d<\u73e4<\u752b<\u83e9"
-                 + "<\u88dc<\u8913<\u8b5c<\u8f14<\u4f0f<\u50d5<\u5310"
-                 + "<\u535c<\u5b93<\u5fa9<\u670d<\u798f<\u8179<\u832f"
-                 + "<\u8514<\u8907<\u8986<\u8f39<\u8f3b<\u99a5<\u9c12"
-                 + "<\u672c<\u4e76<\u4ff8<\u5949<\u5c01<\u5cef<\u5cf0"
-                 + "<\u6367<\u68d2<\u70fd<\u71a2<\u742b<\u7e2b<\u84ec"
-                 + "<\u8702<\u9022<\u92d2<\u9cf3<\u4e0d<\u4ed8<\u4fef"
-                 + "<\u5085<\u5256<\u526f<\u5426<\u5490<\u57e0<\u592b"
-                 + "<\u5a66<\u5b5a<\u5b75<\u5bcc<\u5e9c<\uf966<\u6276"
-                 + "<\u6577<\u65a7<\u6d6e<\u6ea5<\u7236<\u7b26<\u7c3f"
-                 + "<\u7f36<\u8150<\u8151<\u819a<\u8240<\u8299<\u83a9"
-                 + "<\u8a03<\u8ca0<\u8ce6<\u8cfb<\u8d74<\u8dba<\u90e8"
-                 + "<\u91dc<\u961c<\u9644<\u99d9<\u9ce7<\u5317<\u5206"
-                 + "<\u5429<\u5674<\u58b3<\u5954<\u596e<\u5fff<\u61a4"
-                 + "<\u626e<\u6610<\u6c7e<\u711a<\u76c6<\u7c89<\u7cde"
-                 + "<\u7d1b<\u82ac<\u8cc1<\u96f0<\uf967<\u4f5b<\u5f17"
-                 + "<\u5f7f<\u62c2<\u5d29<\u670b<\u68da<\u787c<\u7e43"
-                 + "<\u9d6c<\u4e15<\u5099<\u5315<\u532a<\u5351<\u5983"
-                 + "<\u5a62<\u5e87<\u60b2<\u618a<\u6249<\u6279<\u6590"
-                 + "<\u6787<\u69a7<\u6bd4<\u6bd6<\u6bd7<\u6bd8<\u6cb8"
-                 + "<\uf968<\u7435<\u75fa<\u7812<\u7891<\u79d5<\u79d8"
-                 + "<\u7c83<\u7dcb<\u7fe1<\u80a5<\u813e<\u81c2<\u83f2"
-                 + "<\u871a<\u88e8<\u8ab9<\u8b6c<\u8cbb<\u9119<\u975e"
-                 + "<\u98db<\u9f3b<\u56ac<\u5b2a<\u5f6c<\u658c<\u6ab3"
-                 + "<\u6baf<\u6d5c<\u6ff1<\u7015<\u725d<\u73ad<\u8ca7"
-                 + "<\u8cd3<\u983b<\u6191<\u6c37<\u8058<\u9a01<\u4e4d"
-                 + "<\u4e8b<\u4e9b<\u4ed5<\u4f3a<\u4f3c<\u4f7f<\u4fdf"
-                 + "<\u50ff<\u53f2<\u53f8<\u5506<\u55e3<\u56db<\u58eb"
-                 + "<\u5962<\u5a11<\u5beb<\u5bfa<\u5c04<\u5df3<\u5e2b"
-                 + "<\u5f99<\u601d<\u6368<\u659c<\u65af<\u67f6<\u67fb"
-                 + "<\u68ad<\u6b7b<\u6c99<\u6cd7<\u6e23<\u7009<\u7345"
-                 + "<\u7802<\u793e<\u7940<\u7960<\u79c1<\u7be9<\u7d17"
-                 + "<\u7d72<\u8086<\u820d<\u838e<\u84d1<\u86c7<\u88df"
-                 + "<\u8a50<\u8a5e<\u8b1d<\u8cdc<\u8d66<\u8fad<\u90aa"
-                 + "<\u98fc<\u99df<\u9e9d<\u524a<\uf969<\u6714<\uf96a"
-                 + "<\u5098<\u522a<\u5c71<\u6563<\u6c55<\u73ca<\u7523"
-                 + "<\u759d<\u7b97<\u849c<\u9178<\u9730<\u4e77<\u6492"
-                 + "<\u6bba<\u715e<\u85a9<\u4e09<\uf96b<\u6749<\u68ee"
-                 + "<\u6e17<\u829f<\u8518<\u886b<\u63f7<\u6f81<\u9212"
-                 + "<\u98af<\u4e0a<\u50b7<\u50cf<\u511f<\u5546<\u55aa"
-                 + "<\u5617<\u5b40<\u5c19<\u5ce0<\u5e38<\u5e8a<\u5ea0"
-                 + "<\u5ec2<\u60f3<\u6851<\u6a61<\u6e58<\u723d<\u7240"
-                 + "<\u72c0<\u76f8<\u7965<\u7bb1<\u7fd4<\u88f3<\u89f4"
-                 + "<\u8a73<\u8c61<\u8cde<\u971c<\u585e<\u74bd<\u8cfd"
-                 + "<\u55c7<\uf96c<\u7a61<\u7d22<\u8272<\u7272<\u751f"
-                 + "<\u7525<\uf96d<\u7b19<\u5885<\u58fb<\u5dbc<\u5e8f"
-                 + "<\u5eb6<\u5f90<\u6055<\u6292<\u637f<\u654d<\u6691"
-                 + "<\u66d9<\u66f8<\u6816<\u68f2<\u7280<\u745e<\u7b6e"
-                 + "<\u7d6e<\u7dd6<\u7f72<\u80e5<\u8212<\u85af<\u897f"
-                 + "<\u8a93<\u901d<\u92e4<\u9ecd<\u9f20<\u5915<\u596d"
-                 + "<\u5e2d<\u60dc<\u6614<\u6673<\u6790<\u6c50<\u6dc5"
-                 + "<\u6f5f<\u77f3<\u78a9<\u84c6<\u91cb<\u932b<\u4ed9"
-                 + "<\u50ca<\u5148<\u5584<\u5b0b<\u5ba3<\u6247<\u657e"
-                 + "<\u65cb<\u6e32<\u717d<\u7401<\u7444<\u7487<\u74bf"
-                 + "<\u766c<\u79aa<\u7dda<\u7e55<\u7fa8<\u817a<\u81b3"
-                 + "<\u8239<\u861a<\u87ec<\u8a75<\u8de3<\u9078<\u9291"
-                 + "<\u9425<\u994d<\u9bae<\u5368<\u5c51<\u6954<\u6cc4"
-                 + "<\u6d29<\u6e2b<\u820c<\u859b<\u893b<\u8a2d<\u8aaa"
-                 + "<\u96ea<\u9f67<\u5261<\u66b9<\u6bb2<\u7e96<\u87fe"
-                 + "<\u8d0d<\u9583<\u965d<\u651d<\u6d89<\u71ee<\uf96e"
-                 + "<\u57ce<\u59d3<\u5bac<\u6027<\u60fa<\u6210<\u661f"
-                 + "<\u665f<\u7329<\u73f9<\u76db<\u7701<\u7b6c<\u8056"
-                 + "<\u8072<\u8165<\u8aa0<\u9192<\u4e16<\u52e2<\u6b72"
-                 + "<\u6d17<\u7a05<\u7b39<\u7d30<\uf96f<\u8cb0<\u53ec"
-                 + "<\u562f<\u5851<\u5bb5<\u5c0f<\u5c11<\u5de2<\u6240"
-                 + "<\u6383<\u6414<\u662d<\u68b3<\u6cbc<\u6d88<\u6eaf"
-                 + "<\u701f<\u70a4<\u71d2<\u7526<\u758f<\u758e<\u7619"
-                 + "<\u7b11<\u7be0<\u7c2b<\u7d20<\u7d39<\u852c<\u856d"
-                 + "<\u8607<\u8a34<\u900d<\u9061<\u90b5<\u92b7<\u97f6"
-                 + "<\u9a37<\u4fd7<\u5c6c<\u675f<\u6d91<\u7c9f<\u7e8c"
-                 + "<\u8b16<\u8d16<\u901f<\u5b6b<\u5dfd<\u640d<\u84c0"
-                 + "<\u905c<\u98e1<\u7387<\u5b8b<\u609a<\u677e<\u6dde"
-                 + "<\u8a1f<\u8aa6<\u9001<\u980c<\u5237<\uf970<\u7051"
-                 + "<\u788e<\u9396<\u8870<\u91d7<\u4fee<\u53d7<\u55fd"
-                 + "<\u56da<\u5782<\u58fd<\u5ac2<\u5b88<\u5cab<\u5cc0"
-                 + "<\u5e25<\u6101<\u620d<\u624b<\u6388<\u641c<\u6536"
-                 + "<\u6578<\u6a39<\u6b8a<\u6c34<\u6d19<\u6f31<\u71e7"
-                 + "<\u72e9<\u7378<\u7407<\u74b2<\u7626<\u7761<\u79c0"
-                 + "<\u7a57<\u7aea<\u7cb9<\u7d8f<\u7dac<\u7e61<\u7f9e"
-                 + "<\u8129<\u8331<\u8490<\u84da<\u85ea<\u8896<\u8ab0"
-                 + "<\u8b90<\u8f38<\u9042<\u9083<\u916c<\u9296<\u92b9"
-                 + "<\u968b<\u96a7<\u96a8<\u96d6<\u9700<\u9808<\u9996"
-                 + "<\u9ad3<\u9b1a<\u53d4<\u587e<\u5919<\u5b70<\u5bbf"
-                 + "<\u6dd1<\u6f5a<\u719f<\u7421<\u74b9<\u8085<\u83fd"
-                 + "<\u5de1<\u5f87<\u5faa<\u6042<\u65ec<\u6812<\u696f"
-                 + "<\u6a53<\u6b89<\u6d35<\u6df3<\u73e3<\u76fe<\u77ac"
-                 + "<\u7b4d<\u7d14<\u8123<\u821c<\u8340<\u84f4<\u8563"
-                 + "<\u8a62<\u8ac4<\u9187<\u931e<\u9806<\u99b4<\u620c"
-                 + "<\u8853<\u8ff0<\u9265<\u5d07<\u5d27<\u5d69<\u745f"
-                 + "<\u819d<\u8768<\u6fd5<\u62fe<\u7fd2<\u8936<\u8972"
-                 + "<\u4e1e<\u4e58<\u50e7<\u52dd<\u5347<\u627f<\u6607"
-                 + "<\u7e69<\u8805<\u965e<\u4f8d<\u5319<\u5636<\u59cb"
-                 + "<\u5aa4<\u5c38<\u5c4e<\u5c4d<\u5e02<\u5f11<\u6043"
-                 + "<\u65bd<\u662f<\u6642<\u67be<\u67f4<\u731c<\u77e2"
-                 + "<\u793a<\u7fc5<\u8494<\u84cd<\u8996<\u8a66<\u8a69"
-                 + "<\u8ae1<\u8c55<\u8c7a<\u57f4<\u5bd4<\u5f0f<\u606f"
-                 + "<\u62ed<\u690d<\u6b96<\u6e5c<\u7184<\u7bd2<\u8755"
-                 + "<\u8b58<\u8efe<\u98df<\u98fe<\u4f38<\u4f81<\u4fe1"
-                 + "<\u547b<\u5a20<\u5bb8<\u613c<\u65b0<\u6668<\u71fc"
-                 + "<\u7533<\u795e<\u7d33<\u814e<\u81e3<\u8398<\u85aa"
-                 + "<\u85ce<\u8703<\u8a0a<\u8eab<\u8f9b<\uf971<\u8fc5"
-                 + "<\u5931<\u5ba4<\u5be6<\u6089<\u5be9<\u5c0b<\u5fc3"
-                 + "<\u6c81<\uf972<\u6df1<\u700b<\u751a<\u82af<\u8af6"
-                 + "<\u4ec0<\u5341<\uf973<\u96d9<\u6c0f<\u4e9e<\u4fc4"
-                 + "<\u5152<\u555e<\u5a25<\u5ce8<\u6211<\u7259<\u82bd"
-                 + "<\u83aa<\u86fe<\u8859<\u8a1d<\u963f<\u96c5<\u9913"
-                 + "<\u9d09<\u9d5d<\u580a<\u5cb3<\u5dbd<\u5e44<\u60e1"
-                 + "<\u6115<\u63e1<\u6a02<\u6e25<\u9102<\u9354<\u984e"
-                 + "<\u9c10<\u9f77<\u5b89<\u5cb8<\u6309<\u664f<\u6848"
-                 + "<\u773c<\u96c1<\u978d<\u9854<\u9b9f<\u65a1<\u8b01"
-                 + "<\u8ecb<\u95bc<\u5535<\u5ca9<\u5dd6<\u5eb5<\u6697"
-                 + "<\u764c<\u83f4<\u95c7<\u58d3<\u62bc<\u72ce<\u9d28"
-                 + "<\u4ef0<\u592e<\u600f<\u663b<\u6b83<\u79e7<\u9d26"
-                 + "<\u5393<\u54c0<\u57c3<\u5d16<\u611b<\u66d6<\u6daf"
-                 + "<\u788d<\u827e<\u9698<\u9744<\u5384<\u627c<\u6396"
-                 + "<\u6db2<\u7e0a<\u814b<\u984d<\u6afb<\u7f4c<\u9daf"
-                 + "<\u9e1a<\u4e5f<\u503b<\u51b6<\u591c<\u60f9<\u63f6"
-                 + "<\u6930<\u723a<\u8036<\uf974<\u91ce<\u5f31<\uf975"
-                 + "<\uf976<\u7d04<\u82e5<\u846f<\u84bb<\u85e5<\u8e8d"
-                 + "<\uf977<\u4f6f<\uf978<\uf979<\u58e4<\u5b43<\u6059"
-                 + "<\u63da<\u6518<\u656d<\u6698<\uf97a<\u694a<\u6a23"
-                 + "<\u6d0b<\u7001<\u716c<\u75d2<\u760d<\u79b3<\u7a70"
-                 + "<\uf97b<\u7f8a<\uf97c<\u8944<\uf97d<\u8b93<\u91c0"
-                 + "<\u967d<\uf97e<\u990a<\u5704<\u5fa1<\u65bc<\u6f01"
-                 + "<\u7600<\u79a6<\u8a9e<\u99ad<\u9b5a<\u9f6c<\u5104"
-                 + "<\u61b6<\u6291<\u6a8d<\u81c6<\u5043<\u5830<\u5f66"
-                 + "<\u7109<\u8a00<\u8afa<\u5b7c<\u8616<\u4ffa<\u513c"
-                 + "<\u56b4<\u5944<\u63a9<\u6df9<\u5daa<\u696d<\u5186"
-                 + "<\u4e88<\u4f59<\uf97f<\uf980<\uf981<\u5982<\uf982"
-                 + "<\uf983<\u6b5f<\u6c5d<\uf984<\u74b5<\u7916<\uf985"
-                 + "<\u8207<\u8245<\u8339<\u8f3f<\u8f5d<\uf986<\u9918"
-                 + "<\uf987<\uf988<\uf989<\u4ea6<\uf98a<\u57df<\u5f79"
-                 + "<\u6613<\uf98b<\uf98c<\u75ab<\u7e79<\u8b6f<\uf98d"
-                 + "<\u9006<\u9a5b<\u56a5<\u5827<\u59f8<\u5a1f<\u5bb4"
-                 + "<\uf98e<\u5ef6<\uf98f<\uf990<\u6350<\u633b<\uf991"
-                 + "<\u693d<\u6c87<\u6cbf<\u6d8e<\u6d93<\u6df5<\u6f14"
-                 + "<\uf992<\u70df<\u7136<\u7159<\uf993<\u71c3<\u71d5"
-                 + "<\uf994<\u784f<\u786f<\uf995<\u7b75<\u7de3<\uf996"
-                 + "<\u7e2f<\uf997<\u884d<\u8edf<\uf998<\uf999<\uf99a"
-                 + "<\u925b<\uf99b<\u9cf6<\uf99c<\uf99d<\uf99e<\u6085"
-                 + "<\u6d85<\uf99f<\u71b1<\uf9a0<\uf9a1<\u95b1<\u53ad"
-                 + "<\uf9a2<\uf9a3<\uf9a4<\u67d3<\uf9a5<\u708e<\u7130"
-                 + "<\u7430<\u8276<\u82d2<\uf9a6<\u95bb<\u9ae5<\u9e7d"
-                 + "<\u66c4<\uf9a7<\u71c1<\u8449<\uf9a8<\uf9a9<\u584b"
-                 + "<\uf9aa<\uf9ab<\u5db8<\u5f71<\uf9ac<\u6620<\u668e"
-                 + "<\u6979<\u69ae<\u6c38<\u6cf3<\u6e36<\u6f41<\u6fda"
-                 + "<\u701b<\u702f<\u7150<\u71df<\u7370<\uf9ad<\u745b"
-                 + "<\uf9ae<\u74d4<\u76c8<\u7a4e<\u7e93<\uf9af<\uf9b0"
-                 + "<\u82f1<\u8a60<\u8fce<\uf9b1<\u9348<\uf9b2<\u9719"
-                 + "<\uf9b3<\uf9b4<\u4e42<\u502a<\uf9b5<\u5208<\u53e1"
-                 + "<\u66f3<\u6c6d<\u6fca<\u730a<\u777f<\u7a62<\u82ae"
-                 + "<\u85dd<\u8602<\uf9b6<\u88d4<\u8a63<\u8b7d<\u8c6b"
-                 + "<\uf9b7<\u92b3<\uf9b8<\u9713<\u9810<\u4e94<\u4f0d"
-                 + "<\u4fc9<\u50b2<\u5348<\u543e<\u5433<\u55da<\u5862"
-                 + "<\u58ba<\u5967<\u5a1b<\u5be4<\u609f<\uf9b9<\u61ca"
-                 + "<\u6556<\u65ff<\u6664<\u68a7<\u6c5a<\u6fb3<\u70cf"
-                 + "<\u71ac<\u7352<\u7b7d<\u8708<\u8aa4<\u9c32<\u9f07"
-                 + "<\u5c4b<\u6c83<\u7344<\u7389<\u923a<\u6eab<\u7465"
-                 + "<\u761f<\u7a69<\u7e15<\u860a<\u5140<\u58c5<\u64c1"
-                 + "<\u74ee<\u7515<\u7670<\u7fc1<\u9095<\u96cd<\u9954"
-                 + "<\u6e26<\u74e6<\u7aa9<\u7aaa<\u81e5<\u86d9<\u8778"
-                 + "<\u8a1b<\u5a49<\u5b8c<\u5b9b<\u68a1<\u6900<\u6d63"
-                 + "<\u73a9<\u7413<\u742c<\u7897<\u7de9<\u7feb<\u8118"
-                 + "<\u8155<\u839e<\u8c4c<\u962e<\u9811<\u66f0<\u5f80"
-                 + "<\u65fa<\u6789<\u6c6a<\u738b<\u502d<\u5a03<\u6b6a"
-                 + "<\u77ee<\u5916<\u5d6c<\u5dcd<\u7325<\u754f<\uf9ba"
-                 + "<\uf9bb<\u50e5<\u51f9<\u582f<\u592d<\u5996<\u59da"
-                 + "<\u5be5<\uf9bc<\uf9bd<\u5da2<\u62d7<\u6416<\u6493"
-                 + "<\u64fe<\uf9be<\u66dc<\uf9bf<\u6a48<\uf9c0<\u71ff"
-                 + "<\u7464<\uf9c1<\u7a88<\u7aaf<\u7e47<\u7e5e<\u8000"
-                 + "<\u8170<\uf9c2<\u87ef<\u8981<\u8b20<\u9059<\uf9c3"
-                 + "<\u9080<\u9952<\u617e<\u6b32<\u6d74<\u7e1f<\u8925"
-                 + "<\u8fb1<\u4fd1<\u50ad<\u5197<\u52c7<\u57c7<\u5889"
-                 + "<\u5bb9<\u5eb8<\u6142<\u6995<\u6d8c<\u6e67<\u6eb6"
-                 + "<\u7194<\u7462<\u7528<\u752c<\u8073<\u8338<\u84c9"
-                 + "<\u8e0a<\u9394<\u93de<\uf9c4<\u4e8e<\u4f51<\u5076"
-                 + "<\u512a<\u53c8<\u53cb<\u53f3<\u5b87<\u5bd3<\u5c24"
-                 + "<\u611a<\u6182<\u65f4<\u725b<\u7397<\u7440<\u76c2"
-                 + "<\u7950<\u7991<\u79b9<\u7d06<\u7fbd<\u828b<\u85d5"
-                 + "<\u865e<\u8fc2<\u9047<\u90f5<\u91ea<\u9685<\u96e8"
-                 + "<\u96e9<\u52d6<\u5f67<\u65ed<\u6631<\u682f<\u715c"
-                 + "<\u7a36<\u90c1<\u980a<\u4e91<\uf9c5<\u6a52<\u6b9e"
-                 + "<\u6f90<\u7189<\u8018<\u82b8<\u8553<\u904b<\u9695"
-                 + "<\u96f2<\u97fb<\u851a<\u9b31<\u4e90<\u718a<\u96c4"
-                 + "<\u5143<\u539f<\u54e1<\u5713<\u5712<\u57a3<\u5a9b"
-                 + "<\u5ac4<\u5bc3<\u6028<\u613f<\u63f4<\u6c85<\u6d39"
-                 + "<\u6e72<\u6e90<\u7230<\u733f<\u7457<\u82d1<\u8881"
-                 + "<\u8f45<\u9060<\uf9c6<\u9662<\u9858<\u9d1b<\u6708"
-                 + "<\u8d8a<\u925e<\u4f4d<\u5049<\u50de<\u5371<\u570d"
-                 + "<\u59d4<\u5a01<\u5c09<\u6170<\u6690<\u6e2d<\u7232"
-                 + "<\u744b<\u7def<\u80c3<\u840e<\u8466<\u853f<\u875f"
-                 + "<\u885b<\u8918<\u8b02<\u9055<\u97cb<\u9b4f<\u4e73"
-                 + "<\u4f91<\u5112<\u516a<\uf9c7<\u552f<\u55a9<\u5b7a"
-                 + "<\u5ba5<\u5e7c<\u5e7d<\u5ebe<\u60a0<\u60df<\u6108"
-                 + "<\u6109<\u63c4<\u6538<\u6709<\uf9c8<\u67d4<\u67da"
-                 + "<\uf9c9<\u6961<\u6962<\u6cb9<\u6d27<\uf9ca<\u6e38"
-                 + "<\uf9cb<\u6fe1<\u7336<\u7337<\uf9cc<\u745c<\u7531"
-                 + "<\uf9cd<\u7652<\uf9ce<\uf9cf<\u7dad<\u81fe<\u8438"
-                 + "<\u88d5<\u8a98<\u8adb<\u8aed<\u8e30<\u8e42<\u904a"
-                 + "<\u903e<\u907a<\u9149<\u91c9<\u936e<\uf9d0<\uf9d1"
-                 + "<\u5809<\uf9d2<\u6bd3<\u8089<\u80b2<\uf9d3<\uf9d4"
-                 + "<\u5141<\u596b<\u5c39<\uf9d5<\uf9d6<\u6f64<\u73a7"
-                 + "<\u80e4<\u8d07<\uf9d7<\u9217<\u958f<\uf9d8<\uf9d9"
-                 + "<\uf9da<\uf9db<\u807f<\u620e<\u701c<\u7d68<\u878d"
-                 + "<\uf9dc<\u57a0<\u6069<\u6147<\u6bb7<\u8abe<\u9280"
-                 + "<\u96b1<\u4e59<\u541f<\u6deb<\u852d<\u9670<\u97f3"
-                 + "<\u98ee<\u63d6<\u6ce3<\u9091<\u51dd<\u61c9<\u81ba"
-                 + "<\u9df9<\u4f9d<\u501a<\u5100<\u5b9c<\u610f<\u61ff"
-                 + "<\u64ec<\u6905<\u6bc5<\u7591<\u77e3<\u7fa9<\u8264"
-                 + "<\u858f<\u87fb<\u8863<\u8abc<\u8b70<\u91ab<\u4e8c"
-                 + "<\u4ee5<\u4f0a<\uf9dd<\uf9de<\u5937<\u59e8<\uf9df"
-                 + "<\u5df2<\u5f1b<\u5f5b<\u6021<\uf9e0<\uf9e1<\uf9e2"
-                 + "<\uf9e3<\u723e<\u73e5<\uf9e4<\u7570<\u75cd<\uf9e5"
-                 + "<\u79fb<\uf9e6<\u800c<\u8033<\u8084<\u82e1<\u8351"
-                 + "<\uf9e7<\uf9e8<\u8cbd<\u8cb3<\u9087<\uf9e9<\uf9ea"
-                 + "<\u98f4<\u990c<\uf9eb<\uf9ec<\u7037<\u76ca<\u7fca"
-                 + "<\u7fcc<\u7ffc<\u8b1a<\u4eba<\u4ec1<\u5203<\u5370"
-                 + "<\uf9ed<\u54bd<\u56e0<\u59fb<\u5bc5<\u5f15<\u5fcd"
-                 + "<\u6e6e<\uf9ee<\uf9ef<\u7d6a<\u8335<\uf9f0<\u8693"
-                 + "<\u8a8d<\uf9f1<\u976d<\u9777<\uf9f2<\uf9f3<\u4e00"
-                 + "<\u4f5a<\u4f7e<\u58f9<\u65e5<\u6ea2<\u9038<\u93b0"
-                 + "<\u99b9<\u4efb<\u58ec<\u598a<\u59d9<\u6041<\uf9f4"
-                 + "<\uf9f5<\u7a14<\uf9f6<\u834f<\u8cc3<\u5165<\u5344"
-                 + "<\uf9f7<\uf9f8<\uf9f9<\u4ecd<\u5269<\u5b55<\u82bf"
-                 + "<\u4ed4<\u523a<\u54a8<\u59c9<\u59ff<\u5b50<\u5b57"
-                 + "<\u5b5c<\u6063<\u6148<\u6ecb<\u7099<\u716e<\u7386"
-                 + "<\u74f7<\u75b5<\u78c1<\u7d2b<\u8005<\u81ea<\u8328"
-                 + "<\u8517<\u85c9<\u8aee<\u8cc7<\u96cc<\u4f5c<\u52fa"
-                 + "<\u56bc<\u65ab<\u6628<\u707c<\u70b8<\u7235<\u7dbd"
-                 + "<\u828d<\u914c<\u96c0<\u9d72<\u5b71<\u68e7<\u6b98"
-                 + "<\u6f7a<\u76de<\u5c91<\u66ab<\u6f5b<\u7bb4<\u7c2a"
-                 + "<\u8836<\u96dc<\u4e08<\u4ed7<\u5320<\u5834<\u58bb"
-                 + "<\u58ef<\u596c<\u5c07<\u5e33<\u5e84<\u5f35<\u638c"
-                 + "<\u66b2<\u6756<\u6a1f<\u6aa3<\u6b0c<\u6f3f<\u7246"
-                 + "<\uf9fa<\u7350<\u748b<\u7ae0<\u7ca7<\u8178<\u81df"
-                 + "<\u81e7<\u838a<\u846c<\u8523<\u8594<\u85cf<\u88dd"
-                 + "<\u8d13<\u91ac<\u9577<\u969c<\u518d<\u54c9<\u5728"
-                 + "<\u5bb0<\u624d<\u6750<\u683d<\u6893<\u6e3d<\u6ed3"
-                 + "<\u707d<\u7e21<\u88c1<\u8ca1<\u8f09<\u9f4b<\u9f4e"
-                 + "<\u722d<\u7b8f<\u8acd<\u931a<\u4f47<\u4f4e<\u5132"
-                 + "<\u5480<\u59d0<\u5e95<\u62b5<\u6775<\u696e<\u6a17"
-                 + "<\u6cae<\u6e1a<\u72d9<\u732a<\u75bd<\u7bb8<\u7d35"
-                 + "<\u82e7<\u83f9<\u8457<\u85f7<\u8a5b<\u8caf<\u8e87"
-                 + "<\u9019<\u90b8<\u96ce<\u9f5f<\u52e3<\u540a<\u5ae1"
-                 + "<\u5bc2<\u6458<\u6575<\u6ef4<\u72c4<\uf9fb<\u7684"
-                 + "<\u7a4d<\u7b1b<\u7c4d<\u7e3e<\u7fdf<\u837b<\u8b2b"
-                 + "<\u8cca<\u8d64<\u8de1<\u8e5f<\u8fea<\u8ff9<\u9069"
-                 + "<\u93d1<\u4f43<\u4f7a<\u50b3<\u5168<\u5178<\u524d"
-                 + "<\u526a<\u5861<\u587c<\u5960<\u5c08<\u5c55<\u5edb"
-                 + "<\u609b<\u6230<\u6813<\u6bbf<\u6c08<\u6fb1<\u714e"
-                 + "<\u7420<\u7530<\u7538<\u7551<\u7672<\u7b4c<\u7b8b"
-                 + "<\u7bad<\u7bc6<\u7e8f<\u8a6e<\u8f3e<\u8f49<\u923f"
-                 + "<\u9293<\u9322<\u942b<\u96fb<\u985a<\u986b<\u991e"
-                 + "<\u5207<\u622a<\u6298<\u6d59<\u7664<\u7aca<\u7bc0"
-                 + "<\u7d76<\u5360<\u5cbe<\u5e97<\u6f38<\u70b9<\u7c98"
-                 + "<\u9711<\u9b8e<\u9ede<\u63a5<\u647a<\u8776<\u4e01"
-                 + "<\u4e95<\u4ead<\u505c<\u5075<\u5448<\u59c3<\u5b9a"
-                 + "<\u5e40<\u5ead<\u5ef7<\u5f81<\u60c5<\u633a<\u653f"
-                 + "<\u6574<\u65cc<\u6676<\u6678<\u67fe<\u6968<\u6a89"
-                 + "<\u6b63<\u6c40<\u6dc0<\u6de8<\u6e1f<\u6e5e<\u701e"
-                 + "<\u70a1<\u738e<\u73fd<\u753a<\u775b<\u7887<\u798e"
-                 + "<\u7a0b<\u7a7d<\u7cbe<\u7d8e<\u8247<\u8a02<\u8aea"
-                 + "<\u8c9e<\u912d<\u914a<\u91d8<\u9266<\u92cc<\u9320"
-                 + "<\u9706<\u9756<\u975c<\u9802<\u9f0e<\u5236<\u5291"
-                 + "<\u557c<\u5824<\u5e1d<\u5f1f<\u608c<\u63d0<\u68af"
-                 + "<\u6fdf<\u796d<\u7b2c<\u81cd<\u85ba<\u88fd<\u8af8"
-                 + "<\u8e44<\u918d<\u9664<\u969b<\u973d<\u984c<\u9f4a"
-                 + "<\u4fce<\u5146<\u51cb<\u52a9<\u5632<\u5f14<\u5f6b"
-                 + "<\u63aa<\u64cd<\u65e9<\u6641<\u66fa<\u66f9<\u671d"
-                 + "<\u689d<\u68d7<\u69fd<\u6f15<\u6f6e<\u7167<\u71e5"
-                 + "<\u722a<\u74aa<\u773a<\u7956<\u795a<\u79df<\u7a20"
-                 + "<\u7a95<\u7c97<\u7cdf<\u7d44<\u7e70<\u8087<\u85fb"
-                 + "<\u86a4<\u8a54<\u8abf<\u8d99<\u8e81<\u9020<\u906d"
-                 + "<\u91e3<\u963b<\u96d5<\u9ce5<\u65cf<\u7c07<\u8db3"
-                 + "<\u93c3<\u5b58<\u5c0a<\u5352<\u62d9<\u731d<\u5027"
-                 + "<\u5b97<\u5f9e<\u60b0<\u616b<\u68d5<\u6dd9<\u742e"
-                 + "<\u7a2e<\u7d42<\u7d9c<\u7e31<\u816b<\u8e2a<\u8e35"
-                 + "<\u937e<\u9418<\u4f50<\u5750<\u5de6<\u5ea7<\u632b"
-                 + "<\u7f6a<\u4e3b<\u4f4f<\u4f8f<\u505a<\u59dd<\u80c4"
-                 + "<\u546a<\u5468<\u55fe<\u594f<\u5b99<\u5dde<\u5eda"
-                 + "<\u665d<\u6731<\u67f1<\u682a<\u6ce8<\u6d32<\u6e4a"
-                 + "<\u6f8d<\u70b7<\u73e0<\u7587<\u7c4c<\u7d02<\u7d2c"
-                 + "<\u7da2<\u821f<\u86db<\u8a3b<\u8a85<\u8d70<\u8e8a"
-                 + "<\u8f33<\u9031<\u914e<\u9152<\u9444<\u99d0<\u7af9"
-                 + "<\u7ca5<\u4fca<\u5101<\u51c6<\u57c8<\u5bef<\u5cfb"
-                 + "<\u6659<\u6a3d<\u6d5a<\u6e96<\u6fec<\u710c<\u756f"
-                 + "<\u7ae3<\u8822<\u9021<\u9075<\u96cb<\u99ff<\u8301"
-                 + "<\u4e2d<\u4ef2<\u8846<\u91cd<\u537d<\u6adb<\u696b"
-                 + "<\u6c41<\u847a<\u589e<\u618e<\u66fe<\u62ef<\u70dd"
-                 + "<\u7511<\u75c7<\u7e52<\u84b8<\u8b49<\u8d08<\u4e4b"
-                 + "<\u53ea<\u54ab<\u5730<\u5740<\u5fd7<\u6301<\u6307"
-                 + "<\u646f<\u652f<\u65e8<\u667a<\u679d<\u67b3<\u6b62"
-                 + "<\u6c60<\u6c9a<\u6f2c<\u77e5<\u7825<\u7949<\u7957"
-                 + "<\u7d19<\u80a2<\u8102<\u81f3<\u829d<\u82b7<\u8718"
-                 + "<\u8a8c<\uf9fc<\u8d04<\u8dbe<\u9072<\u76f4<\u7a19"
-                 + "<\u7a37<\u7e54<\u8077<\u5507<\u55d4<\u5875<\u632f"
-                 + "<\u6422<\u6649<\u664b<\u686d<\u699b<\u6b84<\u6d25"
-                 + "<\u6eb1<\u73cd<\u7468<\u74a1<\u755b<\u75b9<\u76e1"
-                 + "<\u771e<\u778b<\u79e6<\u7e09<\u7e1d<\u81fb<\u852f"
-                 + "<\u8897<\u8a3a<\u8cd1<\u8eeb<\u8fb0<\u9032<\u93ad"
-                 + "<\u9663<\u9673<\u9707<\u4f84<\u53f1<\u59ea<\u5ac9"
-                 + "<\u5e19<\u684e<\u74c6<\u75be<\u79e9<\u7a92<\u81a3"
-                 + "<\u86ed<\u8cea<\u8dcc<\u8fed<\u659f<\u6715<\uf9fd"
-                 + "<\u57f7<\u6f57<\u7ddd<\u8f2f<\u93f6<\u96c6<\u5fb5"
-                 + "<\u61f2<\u6f84<\u4e14<\u4f98<\u501f<\u53c9<\u55df"
-                 + "<\u5d6f<\u5dee<\u6b21<\u6b64<\u78cb<\u7b9a<\uf9fe"
-                 + "<\u8e49<\u8eca<\u906e<\u6349<\u643e<\u7740<\u7a84"
-                 + "<\u932f<\u947f<\u9f6a<\u64b0<\u6faf<\u71e6<\u74a8"
-                 + "<\u74da<\u7ac4<\u7c12<\u7e82<\u7cb2<\u7e98<\u8b9a"
-                 + "<\u8d0a<\u947d<\u9910<\u994c<\u5239<\u5bdf<\u64e6"
-                 + "<\u672d<\u7d2e<\u50ed<\u53c3<\u5879<\u6158<\u6159"
-                 + "<\u61fa<\u65ac<\u7ad9<\u8b92<\u8b96<\u5009<\u5021"
-                 + "<\u5275<\u5531<\u5a3c<\u5ee0<\u5f70<\u6134<\u655e"
-                 + "<\u660c<\u6636<\u66a2<\u69cd<\u6ec4<\u6f32<\u7316"
-                 + "<\u7621<\u7a93<\u8139<\u8259<\u83d6<\u84bc<\u50b5"
-                 + "<\u57f0<\u5bc0<\u5be8<\u5f69<\u63a1<\u7826<\u7db5"
-                 + "<\u83dc<\u8521<\u91c7<\u91f5<\u518a<\u67f5<\u7b56"
-                 + "<\u8cac<\u51c4<\u59bb<\u60bd<\u8655<\u501c<\uf9ff"
-                 + "<\u5254<\u5c3a<\u617d<\u621a<\u62d3<\u64f2<\u65a5"
-                 + "<\u6ecc<\u7620<\u810a<\u8e60<\u965f<\u96bb<\u4edf"
-                 + "<\u5343<\u5598<\u5929<\u5ddd<\u64c5<\u6cc9<\u6dfa"
-                 + "<\u7394<\u7a7f<\u821b<\u85a6<\u8ce4<\u8e10<\u9077"
-                 + "<\u91e7<\u95e1<\u9621<\u97c6<\u51f8<\u54f2<\u5586"
-                 + "<\u5fb9<\u64a4<\u6f88<\u7db4<\u8f1f<\u8f4d<\u9435"
-                 + "<\u50c9<\u5c16<\u6cbe<\u6dfb<\u751b<\u77bb<\u7c3d"
-                 + "<\u7c64<\u8a79<\u8ac2<\u581e<\u59be<\u5e16<\u6377"
-                 + "<\u7252<\u758a<\u776b<\u8adc<\u8cbc<\u8f12<\u5ef3"
-                 + "<\u6674<\u6df8<\u807d<\u83c1<\u8acb<\u9751<\u9bd6"
-                 + "<\ufa00<\u5243<\u66ff<\u6d95<\u6eef<\u7de0<\u8ae6"
-                 + "<\u902e<\u905e<\u9ad4<\u521d<\u527f<\u54e8<\u6194"
-                 + "<\u6284<\u62db<\u68a2<\u6912<\u695a<\u6a35<\u7092"
-                 + "<\u7126<\u785d<\u7901<\u790e<\u79d2<\u7a0d<\u8096"
-                 + "<\u8278<\u82d5<\u8349<\u8549<\u8c82<\u8d85<\u9162"
-                 + "<\u918b<\u91ae<\u4fc3<\u56d1<\u71ed<\u77d7<\u8700"
-                 + "<\u89f8<\u5bf8<\u5fd6<\u6751<\u90a8<\u53e2<\u585a"
-                 + "<\u5bf5<\u60a4<\u6181<\u6460<\u7e3d<\u8070<\u8525"
-                 + "<\u9283<\u64ae<\u50ac<\u5d14<\u6700<\u589c<\u62bd"
-                 + "<\u63a8<\u690e<\u6978<\u6a1e<\u6e6b<\u76ba<\u79cb"
-                 + "<\u82bb<\u8429<\u8acf<\u8da8<\u8ffd<\u9112<\u914b"
-                 + "<\u919c<\u9310<\u9318<\u939a<\u96db<\u9a36<\u9c0d"
-                 + "<\u4e11<\u755c<\u795d<\u7afa<\u7b51<\u7bc9<\u7e2e"
-                 + "<\u84c4<\u8e59<\u8e74<\u8ef8<\u9010<\u6625<\u693f"
-                 + "<\u7443<\u51fa<\u672e<\u9edc<\u5145<\u5fe0<\u6c96"
-                 + "<\u87f2<\u885d<\u8877<\u60b4<\u81b5<\u8403<\u8d05"
-                 + "<\u53d6<\u5439<\u5634<\u5a36<\u5c31<\u708a<\u7fe0"
-                 + "<\u805a<\u8106<\u81ed<\u8da3<\u9189<\u9a5f<\u9df2"
-                 + "<\u5074<\u4ec4<\u53a0<\u60fb<\u6e2c<\u5c64<\u4f88"
-                 + "<\u5024<\u55e4<\u5cd9<\u5e5f<\u6065<\u6894<\u6cbb"
-                 + "<\u6dc4<\u71be<\u75d4<\u75f4<\u7661<\u7a1a<\u7a49"
-                 + "<\u7dc7<\u7dfb<\u7f6e<\u81f4<\u86a9<\u8f1c<\u96c9"
-                 + "<\u99b3<\u9f52<\u5247<\u52c5<\u98ed<\u89aa<\u4e03"
-                 + "<\u67d2<\u6f06<\u4fb5<\u5be2<\u6795<\u6c88<\u6d78"
-                 + "<\u741b<\u7827<\u91dd<\u937c<\u87c4<\u79e4<\u7a31"
-                 + "<\u5feb<\u4ed6<\u54a4<\u553e<\u58ae<\u59a5<\u60f0"
-                 + "<\u6253<\u62d6<\u6736<\u6955<\u8235<\u9640<\u99b1"
-                 + "<\u99dd<\u502c<\u5353<\u5544<\u577c<\ufa01<\u6258"
-                 + "<\ufa02<\u64e2<\u666b<\u67dd<\u6fc1<\u6fef<\u7422"
-                 + "<\u7438<\u8a17<\u9438<\u5451<\u5606<\u5766<\u5f48"
-                 + "<\u619a<\u6b4e<\u7058<\u70ad<\u7dbb<\u8a95<\u596a"
-                 + "<\u812b<\u63a2<\u7708<\u803d<\u8caa<\u5854<\u642d"
-                 + "<\u69bb<\u5b95<\u5e11<\u6e6f<\ufa03<\u8569<\u514c"
-                 + "<\u53f0<\u592a<\u6020<\u614b<\u6b86<\u6c70<\u6cf0"
-                 + "<\u7b1e<\u80ce<\u82d4<\u8dc6<\u90b0<\u98b1<\ufa04"
-                 + "<\u64c7<\u6fa4<\u6491<\u6504<\u514e<\u5410<\u571f"
-                 + "<\u8a0e<\u615f<\u6876<\ufa05<\u75db<\u7b52<\u7d71"
-                 + "<\u901a<\u5806<\u69cc<\u817f<\u892a<\u9000<\u9839"
-                 + "<\u5078<\u5957<\u59ac<\u6295<\u900f<\u9b2a<\u615d"
-                 + "<\u7279<\u95d6<\u5761<\u5a46<\u5df4<\u628a<\u64ad"
-                 + "<\u64fa<\u6777<\u6ce2<\u6d3e<\u722c<\u7436<\u7834"
-                 + "<\u7f77<\u82ad<\u8ddb<\u9817<\u5224<\u5742<\u677f"
-                 + "<\u7248<\u74e3<\u8ca9<\u8fa6<\u9211<\u962a<\u516b"
-                 + "<\u53ed<\u634c<\u4f69<\u5504<\u6096<\u6557<\u6c9b"
-                 + "<\u6d7f<\u724c<\u72fd<\u7a17<\u8987<\u8c9d<\u5f6d"
-                 + "<\u6f8e<\u70f9<\u81a8<\u610e<\u4fbf<\u504f<\u6241"
-                 + "<\u7247<\u7bc7<\u7de8<\u7fe9<\u904d<\u97ad<\u9a19"
-                 + "<\u8cb6<\u576a<\u5e73<\u67b0<\u840d<\u8a55<\u5420"
-                 + "<\u5b16<\u5e63<\u5ee2<\u5f0a<\u6583<\u80ba<\u853d"
-                 + "<\u9589<\u965b<\u4f48<\u5305<\u530d<\u530f<\u5486"
-                 + "<\u54fa<\u5703<\u5e03<\u6016<\u629b<\u62b1<\u6355"
-                 + "<\ufa06<\u6ce1<\u6d66<\u75b1<\u7832<\u80de<\u812f"
-                 + "<\u82de<\u8461<\u84b2<\u888d<\u8912<\u900b<\u92ea"
-                 + "<\u98fd<\u9b91<\u5e45<\u66b4<\u66dd<\u7011<\u7206"
-                 + "<\ufa07<\u4ff5<\u527d<\u5f6a<\u6153<\u6753<\u6a19"
-                 + "<\u6f02<\u74e2<\u7968<\u8868<\u8c79<\u98c7<\u98c4"
-                 + "<\u9a43<\u54c1<\u7a1f<\u6953<\u8af7<\u8c4a<\u98a8"
-                 + "<\u99ae<\u5f7c<\u62ab<\u75b2<\u76ae<\u88ab<\u907f"
-                 + "<\u9642<\u5339<\u5f3c<\u5fc5<\u6ccc<\u73cc<\u7562"
-                 + "<\u758b<\u7b46<\u82fe<\u999d<\u4e4f<\u903c<\u4e0b"
-                 + "<\u4f55<\u53a6<\u590f<\u5ec8<\u6630<\u6cb3<\u7455"
-                 + "<\u8377<\u8766<\u8cc0<\u9050<\u971e<\u9c15<\u58d1"
-                 + "<\u5b78<\u8650<\u8b14<\u9db4<\u5bd2<\u6068<\u608d"
-                 + "<\u65f1<\u6c57<\u6f22<\u6fa3<\u701a<\u7f55<\u7ff0"
-                 + "<\u9591<\u9592<\u9650<\u97d3<\u5272<\u8f44<\u51fd"
-                 + "<\u542b<\u54b8<\u5563<\u558a<\u6abb<\u6db5<\u7dd8"
-                 + "<\u8266<\u929c<\u9677<\u9e79<\u5408<\u54c8<\u76d2"
-                 + "<\u86e4<\u95a4<\u95d4<\u965c<\u4ea2<\u4f09<\u59ee"
-                 + "<\u5ae6<\u5df7<\u6052<\u6297<\u676d<\u6841<\u6c86"
-                 + "<\u6e2f<\u7f38<\u809b<\u822a<\ufa08<\ufa09<\u9805"
-                 + "<\u4ea5<\u5055<\u54b3<\u5793<\u595a<\u5b69<\u5bb3"
-                 + "<\u61c8<\u6977<\u6d77<\u7023<\u87f9<\u89e3<\u8a72"
-                 + "<\u8ae7<\u9082<\u99ed<\u9ab8<\u52be<\u6838<\u5016"
-                 + "<\u5e78<\u674f<\u8347<\u884c<\u4eab<\u5411<\u56ae"
-                 + "<\u73e6<\u9115<\u97ff<\u9909<\u9957<\u9999<\u5653"
-                 + "<\u589f<\u865b<\u8a31<\u61b2<\u6af6<\u737b<\u8ed2"
-                 + "<\u6b47<\u96aa<\u9a57<\u5955<\u7200<\u8d6b<\u9769"
-                 + "<\u4fd4<\u5cf4<\u5f26<\u61f8<\u665b<\u6ceb<\u70ab"
-                 + "<\u7384<\u73b9<\u73fe<\u7729<\u774d<\u7d43<\u7d62"
-                 + "<\u7e23<\u8237<\u8852<\ufa0a<\u8ce2<\u9249<\u986f"
-                 + "<\u5b51<\u7a74<\u8840<\u9801<\u5acc<\u4fe0<\u5354"
-                 + "<\u593e<\u5cfd<\u633e<\u6d79<\u72f9<\u8105<\u8107"
-                 + "<\u83a2<\u92cf<\u9830<\u4ea8<\u5144<\u5211<\u578b"
-                 + "<\u5f62<\u6cc2<\u6ece<\u7005<\u7050<\u70af<\u7192"
-                 + "<\u73e9<\u7469<\u834a<\u87a2<\u8861<\u9008<\u90a2"
-                 + "<\u93a3<\u99a8<\u516e<\u5f57<\u60e0<\u6167<\u66b3"
-                 + "<\u8559<\u8e4a<\u91af<\u978b<\u4e4e<\u4e92<\u547c"
-                 + "<\u58d5<\u58fa<\u597d<\u5cb5<\u5f27<\u6236<\u6248"
-                 + "<\u660a<\u6667<\u6beb<\u6d69<\u6dcf<\u6e56<\u6ef8"
-                 + "<\u6f94<\u6fe0<\u6fe9<\u705d<\u72d0<\u7425<\u745a"
-                 + "<\u74e0<\u7693<\u795c<\u7cca<\u7e1e<\u80e1<\u82a6"
-                 + "<\u846b<\u84bf<\u864e<\u865f<\u8774<\u8b77<\u8c6a"
-                 + "<\u93ac<\u9800<\u9865<\u60d1<\u6216<\u9177<\u5a5a"
-                 + "<\u660f<\u6df7<\u6e3e<\u743f<\u9b42<\u5ffd<\u60da"
-                 + "<\u7b0f<\u54c4<\u5f18<\u6c5e<\u6cd3<\u6d2a<\u70d8"
-                 + "<\u7d05<\u8679<\u8a0c<\u9d3b<\u5316<\u548c<\u5b05"
-                 + "<\u6a3a<\u706b<\u7575<\u798d<\u79be<\u82b1<\u83ef"
-                 + "<\u8a71<\u8b41<\u8ca8<\u9774<\ufa0b<\u64f4<\u652b"
-                 + "<\u78ba<\u78bb<\u7a6b<\u4e38<\u559a<\u5950<\u5ba6"
-                 + "<\u5e7b<\u60a3<\u63db<\u6b61<\u6665<\u6853<\u6e19"
-                 + "<\u7165<\u74b0<\u7d08<\u9084<\u9a69<\u9c25<\u6d3b"
-                 + "<\u6ed1<\u733e<\u8c41<\u95ca<\u51f0<\u5e4c<\u5fa8"
-                 + "<\u604d<\u60f6<\u6130<\u614c<\u6643<\u6644<\u69a5"
-                 + "<\u6cc1<\u6e5f<\u6ec9<\u6f62<\u714c<\u749c<\u7687"
-                 + "<\u7bc1<\u7c27<\u8352<\u8757<\u9051<\u968d<\u9ec3"
-                 + "<\u532f<\u56de<\u5efb<\u5f8a<\u6062<\u6094<\u61f7"
-                 + "<\u6666<\u6703<\u6a9c<\u6dee<\u6fae<\u7070<\u736a"
-                 + "<\u7e6a<\u81be<\u8334<\u86d4<\u8aa8<\u8cc4<\u5283"
-                 + "<\u7372<\u5b96<\u6a6b<\u9404<\u54ee<\u5686<\u5b5d"
-                 + "<\u6548<\u6585<\u66c9<\u689f<\u6d8d<\u6dc6<\u723b"
-                 + "<\u80b4<\u9175<\u9a4d<\u4faf<\u5019<\u539a<\u540e"
-                 + "<\u543c<\u5589<\u55c5<\u5e3f<\u5f8c<\u673d<\u7166"
-                 + "<\u73dd<\u9005<\u52db<\u52f3<\u5864<\u58ce<\u7104"
-                 + "<\u718f<\u71fb<\u85b0<\u8a13<\u6688<\u85a8<\u55a7"
-                 + "<\u6684<\u714a<\u8431<\u5349<\u5599<\u6bc1<\u5f59"
-                 + "<\u5fbd<\u63ee<\u6689<\u7147<\u8af1<\u8f1d<\u9ebe"
-                 + "<\u4f11<\u643a<\u70cb<\u7566<\u8667<\u6064<\u8b4e"
-                 + "<\u9df8<\u5147<\u51f6<\u5308<\u6d36<\u80f8<\u9ed1"
-                 + "<\u6615<\u6b23<\u7098<\u75d5<\u5403<\u5c79<\u7d07"
-                 + "<\u8a16<\u6b20<\u6b3d<\u6b46<\u5438<\u6070<\u6d3d"
-                 + "<\u7fd5<\u8208<\u50d6<\u51de<\u559c<\u566b<\u56cd"
-                 + "<\u59ec<\u5b09<\u5e0c<\u6199<\u6198<\u6231<\u665e"
-                 + "<\u66e6<\u7199<\u71b9<\u71ba<\u72a7<\u79a7<\u7a00"
-                 + "<\u7fb2<\u8a70 "
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_lt.java b/ojluni/src/main/java/sun/text/resources/CollationData_lt.java
deleted file mode 100755
index 71a303e..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_lt.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_lt extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                /* for lt, accents sorted backwards plus the following: */
-                "@" +                                     // tal : french secondary
-                "& C < c\u030c , C\u030c " +              // nt : open-o < c-caron
-                "& I ; y = \u0131 , Y = \u0130 " +        // nt : i is equivalent to y
-                "& S < s\u030c , S\u030c " +              // nt : long-s < s-caron
-                "& X < y\u0301, Y\u0301 "+                // nt : x < y-acute
-                "< y\u0302 , Y\u0302 < y\u0308, Y\u0308 " + // nt : y-circumflex < y-umlaut
-                "& Z < z\u030c , Z\u030c "                // nt : ezh-tail < z-caron
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_lv.java b/ojluni/src/main/java/sun/text/resources/CollationData_lv.java
deleted file mode 100755
index 14572cb..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_lv.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_lv extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                /* for lv, accents sorted backwards plus the following: */
-
-                "@" /* sort accents bkwd */
-                + "& C < c\u030c , C\u030c "  // C < c-caron
-                + "& G < g\u0327 , G\u0327 "  // G < g-cedilla
-                + "& I < y, Y"                // tal : i < y
-                + "& K < k\u0327 , K\u0327 "  // K < k-cedilla
-                + "& L < l\u0327 , L\u0327 "  // L < l-cedilla
-                + "& N < n\u0327 , N\u0327 "  // N < n-cedilla
-                + "& S < s\u030c , S\u030c "  // S < s-caron
-                + "& Z < z\u030c , Z\u030c "  // Z < z-caron
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_mk.java b/ojluni/src/main/java/sun/text/resources/CollationData_mk.java
deleted file mode 100755
index ba27d0e..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_mk.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_mk extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-             { "Rule",
-                /* for mk, default plus the following */
-
-              "& 9 < \u0482 " +       // thousand sign
-              "& Z " +                // Arabic script sorts after Z's
-              "< \u0430 , \u0410" +   // a
-              "< \u0431 , \u0411" +   // be
-              "< \u0432 , \u0412" +   // ve
-              "< \u0433 , \u0413" +   // ghe
-              "; \u0491 , \u0490" +   // ghe-upturn
-              "; \u0495 , \u0494" +   // ghe-mid-hook
-              "; \u0453 , \u0403" +   // gje
-              "; \u0493 , \u0492" +   // ghe-stroke
-              "< \u0434 , \u0414" +   // de
-              "< \u0452 , \u0402" +   // dje
-              "< \u0435 , \u0415" +   // ie
-              "; \u04bd , \u04bc" +   // che
-              "; \u0451 , \u0401" +   // io
-              "; \u04bf , \u04be" +   // che-descender
-              "< \u0454 , \u0404" +   // uk ie
-              "< \u0436 , \u0416" +   // zhe
-              "; \u0497 , \u0496" +   // zhe-descender
-              "; \u04c2 , \u04c1" +   // zhe-breve
-              "< \u0437 , \u0417" +   // ze
-              "; \u0499 , \u0498" +   // zh-descender
-              "< \u0455 , \u0405" +   // dze
-              "< \u0438 , \u0418" +   // i
-              "< \u0456 , \u0406" +   // uk/bg i
-              "; \u04c0 " +           // palochka
-              "< \u0457 , \u0407" +   // uk yi
-              "< \u0439 , \u0419" +   // short i
-              "< \u0458 , \u0408" +   // je
-              "< \u043a , \u041a" +   // ka
-              "; \u049f , \u049e" +   // ka-stroke
-              "; \u04c4 , \u04c3" +   // ka-hook
-              "; \u049d , \u049c" +   // ka-vt-stroke
-              "; \u04a1 , \u04a0" +   // bashkir-ka
-              "; \u045c , \u040c" +   // kje
-              "; \u049b , \u049a" +   // ka-descender
-              "< \u043b , \u041b" +   // el
-              "< \u0459 , \u0409" +   // lje
-              "< \u043c , \u041c" +   // em
-              "< \u043d , \u041d" +   // en
-              "; \u0463 " +           // yat
-              "; \u04a3 , \u04a2" +   // en-descender
-              "; \u04a5 , \u04a4" +   // en-ghe
-              "; \u04bb , \u04ba" +   // shha
-              "; \u04c8 , \u04c7" +   // en-hook
-              "< \u045a , \u040a" +   // nje
-              "< \u043e , \u041e" +   // o
-              "; \u04a9 , \u04a8" +   // ha
-              "< \u043f , \u041f" +   // pe
-              "; \u04a7 , \u04a6" +   // pe-mid-hook
-              "< \u0440 , \u0420" +   // er
-              "< \u0441 , \u0421" +   // es
-              "; \u04ab , \u04aa" +   // es-descender
-              "< \u0442 , \u0422" +   // te
-              "; \u04ad , \u04ac" +   // te-descender
-              "< \u045b , \u040b" +   // tshe
-              "< \u0443 , \u0423" +   // u
-              "; \u04af , \u04ae" +   // straight u
-              "< \u045e , \u040e" +   // short u
-              "< \u04b1 , \u04b0" +   // straight u-stroke
-              "< \u0444 , \u0424" +   // ef
-              "< \u0445 , \u0425" +   // ha
-              "; \u04b3 , \u04b2" +   // ha-descender
-              "< \u0446 , \u0426" +   // tse
-              "; \u04b5 , \u04b4" +   // te tse
-              "< \u0447 , \u0427" +   // che
-              "; \u04b7 ; \u04b6" +   // che-descender
-              "; \u04b9 , \u04b8" +   // che-vt-stroke
-              "; \u04cc , \u04cb" +   // che
-              "< \u045f , \u040f" +   // dzhe
-              "< \u0448 , \u0428" +   // sha
-              "< \u0449 , \u0429" +   // shcha
-              "< \u044a , \u042a" +   // hard sign
-              "< \u044b , \u042b" +   // yeru
-              "< \u044c , \u042c" +   // soft sign
-              "< \u044d , \u042d" +   // e
-              "< \u044e , \u042e" +   // yu
-              "< \u044f , \u042f" +   // ya
-              "< \u0461 , \u0460" +   // omega
-              "< \u0462 " +           // yat
-              "< \u0465 , \u0464" +   // iotified e
-              "< \u0467 , \u0466" +   // little yus
-              "< \u0469 , \u0468" +   // iotified little yus
-              "< \u046b , \u046a" +   // big yus
-              "< \u046d , \u046c" +   // iotified big yus
-              "< \u046f , \u046e" +   // ksi
-              "< \u0471 , \u0470" +   // psi
-              "< \u0473 , \u0472" +   // fita
-              "< \u0475 , \u0474" +   // izhitsa
-              "; \u0477 , \u0476" +   // izhitsa-double-grave
-              "< \u0479 , \u0478" +   // uk
-              "< \u047b , \u047a" +   // round omega
-              "< \u047d , \u047c" +   // omega-titlo
-              "< \u047f , \u047e" +   // ot
-              "< \u0481 , \u0480"     // koppa
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_nl.java b/ojluni/src/main/java/sun/text/resources/CollationData_nl.java
deleted file mode 100755
index 9396a88..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_nl.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class CollationData_nl extends EmptyListResourceBundle {
-    // This bundle is empty because the default rule is
-    // adequate for this locale.
-    // The bundle is necessary to prevent the resource
-    // bundle lookup from falling back to the default
-    // locale.
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_no.java b/ojluni/src/main/java/sun/text/resources/CollationData_no.java
deleted file mode 100755
index f6a1fc0..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_no.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_no extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                "& D <\u00D0,\u00F0" +      // eth
-                "& ss,\u00DF" +             // s-zet
-                "& y , u\u0308" +   // u-umlaut is eq. to y.
-                "& y ; U\u0308" +  // u-umlaut is eq. to y.
-                "& Z < \u00e6, \u00c6 " +    // z < z-caron
-                " < a\u0308, A\u0308" +      // nt : a-umlaut
-                "< \u00f8, \u00d8 < o\u0308, O\u0308" + // nt : o-stroke < o-umlaut
-                "< o\u030b, O\u030b " +      // nt : o-double-acute
-                "< a\u030a, A\u030a" +       // nt : a-ring
-                ", aa , aA , Aa , AA " +         // tal : aa ligature sorts after a-ring
-                " & V < w, W "
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_pl.java b/ojluni/src/main/java/sun/text/resources/CollationData_pl.java
deleted file mode 100755
index 2fdfa78..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_pl.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_pl extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                /* for pl, default sorting except for the following: */
-                /* add d<stroke> between d and e. */
-                /* add l<stroke> between l and m. */
-                /* add z<abovedot> after z.       */
-                "& A < a\u0328 , A\u0328 " +      // a < a-ogonek
-                "& C < c\u0301 , C\u0301 " +      // c < c-acute
-                "& D < \u0111, \u0110 " +         // tal : d < d-stroke
-                "& E < e\u0328 , E\u0328 " +      // e < e-ogonek
-                "& L < \u0142 , \u0141 " +        // l < l-stroke
-                "& N < n\u0301 , N\u0301 " +      // n < n-acute
-                "& O < o\u0301 , O\u0301 " +      // o < o-acute
-                "& S < s\u0301 , S\u0301 " +      // s < s-acute
-                "& Z < z\u0301 , Z\u0301 " +      // z < z-acute
-                "< z\u0307 , Z\u0307 "            // z-dot-above
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_pt.java b/ojluni/src/main/java/sun/text/resources/CollationData_pt.java
deleted file mode 100755
index 2cdddf8..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_pt.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class CollationData_pt extends EmptyListResourceBundle {
-    // This bundle is empty because the default rule is
-    // adequate for this locale.
-    // The bundle is necessary to prevent the resource
-    // bundle lookup from falling back to the default
-    // locale.
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_ro.java b/ojluni/src/main/java/sun/text/resources/CollationData_ro.java
deleted file mode 100755
index 1485fd7..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_ro.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_ro extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                "& A < a\u0306 , A\u0306 "       // a < a-breve
-                + "& D < \u0111, \u0110 "        // d < d-stroke
-                + "& I < i\u0302 , I\u0302 "     // i < i-circumflex
-                + "& S < s\u0327 , S\u0327 "     // s < s-cedilla
-                + "& \u00de < t\u0327 , T\u0327" // thorn < t-cedilla
-                + "& Z < z\u0307 , Z\u0307 "     // tal : ezh-tail < z-dot-above
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_ru.java b/ojluni/src/main/java/sun/text/resources/CollationData_ru.java
deleted file mode 100755
index 0ea3b4d..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_ru.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_ru extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                /* for ru, default plus the following  */
-                "& 9 < \u0482 " +       // thousand sign
-                "& Z " +                // Arabic script sorts after Z's
-                "< \u0430 , \u0410" +   // a
-                "< \u0431 , \u0411" +   // be
-                "< \u0432 , \u0412" +   // ve
-                "< \u0433 , \u0413" +   // ghe
-                "; \u0491 , \u0490" +   // ghe-upturn
-                "; \u0495 , \u0494" +   // ghe-mid-hook
-                "; \u0453 , \u0403" +   // gje
-                "; \u0493 , \u0492" +   // ghe-stroke
-                "< \u0434 , \u0414" +   // de
-                "< \u0452 , \u0402" +   // dje
-                "< \u0435 , \u0415" +   // ie
-                "; \u04bd , \u04bc" +   // che
-                "; \u0451 , \u0401" +   // io
-                "; \u04bf , \u04be" +   // che-descender
-                "< \u0454 , \u0404" +   // uk ie
-                "< \u0436 , \u0416" +   // zhe
-                "; \u0497 , \u0496" +   // zhe-descender
-                "; \u04c2 , \u04c1" +   // zhe-breve
-                "< \u0437 , \u0417" +   // ze
-                "; \u0499 , \u0498" +   // zh-descender
-                "< \u0455 , \u0405" +   // dze
-                "< \u0438 , \u0418" +   // i
-                "< \u0456 , \u0406" +   // uk/bg i
-                "; \u04c0 " +           // palochka
-                "< \u0457 , \u0407" +   // uk yi
-                "< \u0439 , \u0419" +   // short i
-                "< \u0458 , \u0408" +   // je
-                "< \u043a , \u041a" +   // ka
-                "; \u049f , \u049e" +   // ka-stroke
-                "; \u04c4 , \u04c3" +   // ka-hook
-                "; \u049d , \u049c" +   // ka-vt-stroke
-                "; \u04a1 , \u04a0" +   // bashkir-ka
-                "; \u045c , \u040c" +   // kje
-                "; \u049b , \u049a" +   // ka-descender
-                "< \u043b , \u041b" +   // el
-                "< \u0459 , \u0409" +   // lje
-                "< \u043c , \u041c" +   // em
-                "< \u043d , \u041d" +   // en
-                "; \u0463 " +           // yat
-                "; \u04a3 , \u04a2" +   // en-descender
-                "; \u04a5 , \u04a4" +   // en-ghe
-                "; \u04bb , \u04ba" +   // shha
-                "; \u04c8 , \u04c7" +   // en-hook
-                "< \u045a , \u040a" +   // nje
-                "< \u043e , \u041e" +   // o
-                "; \u04a9 , \u04a8" +   // ha
-                "< \u043f , \u041f" +   // pe
-                "; \u04a7 , \u04a6" +   // pe-mid-hook
-                "< \u0440 , \u0420" +   // er
-                "< \u0441 , \u0421" +   // es
-                "; \u04ab , \u04aa" +   // es-descender
-                "< \u0442 , \u0422" +   // te
-                "; \u04ad , \u04ac" +   // te-descender
-                "< \u045b , \u040b" +   // tshe
-                "< \u0443 , \u0423" +   // u
-                "; \u04af , \u04ae" +   // straight u
-                "< \u045e , \u040e" +   // short u
-                "< \u04b1 , \u04b0" +   // straight u-stroke
-                "< \u0444 , \u0424" +   // ef
-                "< \u0445 , \u0425" +   // ha
-                "; \u04b3 , \u04b2" +   // ha-descender
-                "< \u0446 , \u0426" +   // tse
-                "; \u04b5 , \u04b4" +   // te tse
-                "< \u0447 , \u0427" +   // che
-                "; \u04b7 ; \u04b6" +   // che-descender
-                "; \u04b9 , \u04b8" +   // che-vt-stroke
-                "; \u04cc , \u04cb" +   // che
-                "< \u045f , \u040f" +   // dzhe
-                "< \u0448 , \u0428" +   // sha
-                "< \u0449 , \u0429" +   // shcha
-                "< \u044a , \u042a" +   // hard sign
-                "< \u044b , \u042b" +   // yeru
-                "< \u044c , \u042c" +   // soft sign
-                "< \u044d , \u042d" +   // e
-                "< \u044e , \u042e" +   // yu
-                "< \u044f , \u042f" +   // ya
-                "< \u0461 , \u0460" +   // omega
-                "< \u0462 " +           // yat
-                "< \u0465 , \u0464" +   // iotified e
-                "< \u0467 , \u0466" +   // little yus
-                "< \u0469 , \u0468" +   // iotified little yus
-                "< \u046b , \u046a" +   // big yus
-                "< \u046d , \u046c" +   // iotified big yus
-                "< \u046f , \u046e" +   // ksi
-                "< \u0471 , \u0470" +   // psi
-                "< \u0473 , \u0472" +   // fita
-                "< \u0475 , \u0474" +   // izhitsa
-                "; \u0477 , \u0476" +   // izhitsa-double-grave
-                "< \u0479 , \u0478" +   // uk
-                "< \u047b , \u047a" +   // round omega
-                "< \u047d , \u047c" +   // omega-titlo
-                "< \u047f , \u047e" +   // ot
-                "< \u0481 , \u0480"     // koppa
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_sk.java b/ojluni/src/main/java/sun/text/resources/CollationData_sk.java
deleted file mode 100755
index 8d5d348..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_sk.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_sk extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                /* for sk, default sorting except for the following: */
-
-                /* add d<stroke> between d and e. */
-                /* add ch "ligature" between h and i */
-                /* add l<stroke> between l and m. */
-                /* add z<abovedot> after z.       */
-                "& \u0361 ; \u0308 = \u030d "
-                + "& A < a\u0308 , A\u0308 " // A < a-umlaut
-                + "& C < c\u030c , C\u030c " // C < c-caron
-                + "& D < \u0111, \u0110 "    // D < d-stroke
-                + "& H < ch , cH , Ch , CH " // H < ch ligature
-                + "& L < \u0142 , \u0141 "   // L < l-stroke
-                + "& O < o\u0302 , O\u0302 " // oe < o-circumflex
-                + "& R < r\u030c , R\u030c " // R < r-caron
-                + "& S < s\u030c , S\u030c " // S < s-caron
-                + "& Z < z\u030c , Z\u030c " // Z < z-caron
-                + "< z\u0307 , Z\u0307 "     // z-dot-above
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_sl.java b/ojluni/src/main/java/sun/text/resources/CollationData_sl.java
deleted file mode 100755
index 7d711dc..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_sl.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_sl extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                /* for sl, default sorting except for the following: */
-
-                /* add d<stroke> between d and e. */
-                /* add l<stroke> between l and m. */
-                /* add nj "ligature" between n and o. */
-                /* add z<abovedot> after z.       */
-                "& C < c\u030c , C\u030c "           // C < c-caron
-                + "< c\u0301 , C\u0301 "             // c-acute
-                + "& D < \u01f3 , \u01f2 , \u01f1 "  // dz
-                + "< \u01c6 , \u01c5 , \u01c4 "      // dz-caron
-                + "< \u0111 , \u0110 "               // d-stroke
-                + "& L < \u0142 , \u0141 "           // l < l-stroke
-                + "& N < nj , nJ , Nj , NJ "         // ligature updated
-                + "& S < s\u030c , S\u030c "         // s < s-caron
-                + "< s\u0301, S\u0301 "              // s-acute
-                + "& Z < z\u030c , Z\u030c "         // z < z-caron
-                + "< z\u0301 , Z\u0301 "             // z-acute
-                + "< z\u0307 , Z\u0307 "             // z-dot-above
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_sq.java b/ojluni/src/main/java/sun/text/resources/CollationData_sq.java
deleted file mode 100755
index 952ddac..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_sq.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_sq extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule", "@" }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_sr.java b/ojluni/src/main/java/sun/text/resources/CollationData_sr.java
deleted file mode 100755
index 7ef62d3..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_sr.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (c) 2006, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_sr extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                /* for sr, default plus the following */
-                "& 9 < \u0482 " +       // thousand sign
-                "& Z " +                // Arabic script sorts after Z's
-                "< \u0430 , \u0410" +   // a
-                "< \u0431 , \u0411" +   // be
-                "< \u0432 , \u0412" +   // ve
-                "< \u0433 , \u0413" +   // ghe
-                "; \u0491 , \u0490" +   // ghe-upturn
-                "; \u0495 , \u0494" +   // ghe-mid-hook
-                "; \u0453 , \u0403" +   // gje
-                "; \u0493 , \u0492" +   // ghe-stroke
-                "< \u0434 , \u0414" +   // de
-                "< \u0452 , \u0402" +   // dje
-                "< \u0435 , \u0415" +   // ie
-                "; \u04bd , \u04bc" +   // che
-                "; \u0451 , \u0401" +   // io
-                "; \u04bf , \u04be" +   // che-descender
-                "< \u0454 , \u0404" +   // uk ie
-                "< \u0436 , \u0416" +   // zhe
-                "; \u0497 , \u0496" +   // zhe-descender
-                "; \u04c2 , \u04c1" +   // zhe-breve
-                "< \u0437 , \u0417" +   // ze
-                "; \u0499 , \u0498" +   // zh-descender
-                "< \u0455 , \u0405" +   // dze
-                "< \u0438 , \u0418" +   // i
-                "< \u0456 , \u0406" +   // uk/bg i
-                "; \u04c0 " +           // palochka
-                "< \u0457 , \u0407" +   // uk yi
-                "< \u0439 , \u0419" +   // short i
-                "< \u0458 , \u0408" +   // je
-                "< \u043a , \u041a" +   // ka
-                "; \u049f , \u049e" +   // ka-stroke
-                "; \u04c4 , \u04c3" +   // ka-hook
-                "; \u049d , \u049c" +   // ka-vt-stroke
-                "; \u04a1 , \u04a0" +   // bashkir-ka
-                "; \u045c , \u040c" +   // kje
-                "; \u049b , \u049a" +   // ka-descender
-                "< \u043b , \u041b" +   // el
-                "< \u0459 , \u0409" +   // lje
-                "< \u043c , \u041c" +   // em
-                "< \u043d , \u041d" +   // en
-                "; \u0463 " +           // yat
-                "; \u04a3 , \u04a2" +   // en-descender
-                "; \u04a5 , \u04a4" +   // en-ghe
-                "; \u04bb , \u04ba" +   // shha
-                "; \u04c8 , \u04c7" +   // en-hook
-                "< \u045a , \u040a" +   // nje
-                "< \u043e , \u041e" +   // o
-                "; \u04a9 , \u04a8" +   // ha
-                "< \u043f , \u041f" +   // pe
-                "; \u04a7 , \u04a6" +   // pe-mid-hook
-                "< \u0440 , \u0420" +   // er
-                "< \u0441 , \u0421" +   // es
-                "; \u04ab , \u04aa" +   // es-descender
-                "< \u0442 , \u0422" +   // te
-                "; \u04ad , \u04ac" +   // te-descender
-                "< \u045b , \u040b" +   // tshe
-                "< \u0443 , \u0423" +   // u
-                "; \u04af , \u04ae" +   // straight u
-                "< \u045e , \u040e" +   // short u
-                "< \u04b1 , \u04b0" +   // straight u-stroke
-                "< \u0444 , \u0424" +   // ef
-                "< \u0445 , \u0425" +   // ha
-                "; \u04b3 , \u04b2" +   // ha-descender
-                "< \u0446 , \u0426" +   // tse
-                "; \u04b5 , \u04b4" +   // te tse
-                "< \u0447 , \u0427" +   // che
-                "; \u04b7 ; \u04b6" +   // che-descender
-                "; \u04b9 , \u04b8" +   // che-vt-stroke
-                "; \u04cc , \u04cb" +   // che
-                "< \u045f , \u040f" +   // dzhe
-                "< \u0448 , \u0428" +   // sha
-                "< \u0449 , \u0429" +   // shcha
-                "< \u044a , \u042a" +   // hard sign
-                "< \u044b , \u042b" +   // yeru
-                "< \u044c , \u042c" +   // soft sign
-                "< \u044d , \u042d" +   // e
-                "< \u044e , \u042e" +   // yu
-                "< \u044f , \u042f" +   // ya
-                "< \u0461 , \u0460" +   // omega
-                "< \u0462 " +           // yat
-                "< \u0465 , \u0464" +   // iotified e
-                "< \u0467 , \u0466" +   // little yus
-                "< \u0469 , \u0468" +   // iotified little yus
-                "< \u046b , \u046a" +   // big yus
-                "< \u046d , \u046c" +   // iotified big yus
-                "< \u046f , \u046e" +   // ksi
-                "< \u0471 , \u0470" +   // psi
-                "< \u0473 , \u0472" +   // fita
-                "< \u0475 , \u0474" +   // izhitsa
-                "; \u0477 , \u0476" +   // izhitsa-double-grave
-                "< \u0479 , \u0478" +   // uk
-                "< \u047b , \u047a" +   // round omega
-                "< \u047d , \u047c" +   // omega-titlo
-                "< \u047f , \u047e" +   // ot
-                "< \u0481 , \u0480"     // koppa
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_sr_Latn.java b/ojluni/src/main/java/sun/text/resources/CollationData_sr_Latn.java
deleted file mode 100755
index 5bd07aa..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_sr_Latn.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2005, 2011, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_sr_Latn extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                /* for sr-Latin, default sorting except for the following: */
-
-                /* add dz "ligature" between d and d<stroke>. */
-                /* add d<stroke> between d and e. */
-                /* add lj "ligature" between l and l<stroke>. */
-                /* add l<stroke> between l and m. */
-                /* add nj "ligature" between n and o. */
-                /* add z<abovedot> after z.       */
-                "& \u200f = \u030c "
-                + "& \u0306 = \u030d "
-                + "& C < c\u030c , C\u030c "  // C < c-caron
-                + "< c\u0301 , C\u0301 "      // c-acute
-                + "& D < \u01f3 , \u01f2 , \u01f1 "  // dz
-                + "< dz , dZ , Dz , DZ "      // dz ligature
-                + "< \u01c6 , \u01c5 , \u01c4 "  // dz-caron
-                + "< \u0111 , \u0110 "           // d-stroke
-                + "& L < lj , lJ , Lj , LJ " // l < lj ligature
-                + "& N < nj , nJ , Nj , NJ " // n < nj ligature
-                + "& S < s\u030c , S\u030c "  // s < s-caron
-                + "& Z < z\u030c , Z\u030c "  // z < z-caron
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_sv.java b/ojluni/src/main/java/sun/text/resources/CollationData_sv.java
deleted file mode 100755
index dc0bf4b..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_sv.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_sv extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                "& Z < a\u030a , A\u030a" +  // a-ring, aa ligaure
-                "< a\u0308 , A\u0308 < a\u030b, A\u030b " +  // a-umlaut, a-double-acute
-                "< \u00e6 , \u00c6 " +                   //  ae ligature
-                "< o\u0308 , O\u0308 " +   // o-umlaut
-                "< o\u030b , O\u030b ; \u00f8 , \u00d8 " +   // o-double-acute < o-stroke
-                "& V ; w , W" +
-                "& Y, u\u0308 , U\u0308" + // u-double-acute
-                "; u\u030b, U\u030b "
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_th.java b/ojluni/src/main/java/sun/text/resources/CollationData_th.java
deleted file mode 100755
index 0adc262..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_th.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_th extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                "! "                            // First turn on the SE Asian Vowel/Consonant
-                                                // swapping rule
-                + "& Z "                        // Put in all of the consonants, after Z
-                + "< \u0E01 "                   //  KO KAI
-                + "< \u0E02 "                   //  KHO KHAI
-                + "< \u0E03 "                   //  KHO KHUAT
-                + "< \u0E04 "                   //  KHO KHWAI
-                + "< \u0E05 "                   //  KHO KHON
-                + "< \u0E06 "                   //  KHO RAKHANG
-                + "< \u0E07 "                   //  NGO NGU
-                + "< \u0E08 "                   //  CHO CHAN
-                + "< \u0E09 "                   //  CHO CHING
-                + "< \u0E0A "                   //  CHO CHANG
-                + "< \u0E0B "                   //  SO SO
-                + "< \u0E0C "                   //  CHO CHOE
-                + "< \u0E0D "                   //  YO YING
-                + "< \u0E0E "                   //  DO CHADA
-                + "< \u0E0F "                   //  TO PATAK
-                + "< \u0E10 "                   //  THO THAN
-                + "< \u0E11 "                   //  THO NANGMONTHO
-                + "< \u0E12 "                   //  THO PHUTHAO
-                + "< \u0E13 "                   //  NO NEN
-                + "< \u0E14 "                   //  DO DEK
-                + "< \u0E15 "                   //  TO TAO
-                + "< \u0E16 "                   //  THO THUNG
-                + "< \u0E17 "                   //  THO THAHAN
-                + "< \u0E18 "                   //  THO THONG
-                + "< \u0E19 "                   //  NO NU
-                + "< \u0E1A "                   //  BO BAIMAI
-                + "< \u0E1B "                   //  PO PLA
-                + "< \u0E1C "                   //  PHO PHUNG
-                + "< \u0E1D "                   //  FO FA
-                + "< \u0E1E "                   //  PHO PHAN
-                + "< \u0E1F "                   //  FO FAN
-                + "< \u0E20 "                   //  PHO SAMPHAO
-                + "< \u0E21 "                   //  MO MA
-                + "< \u0E22 "                   //  YO YAK
-                + "< \u0E23 "                   //  RO RUA
-                + "< \u0E24 "                   //  RU
-                + "< \u0E25 "                   //  LO LING
-                + "< \u0E26 "                   //  LU
-                + "< \u0E27 "                   //  WO WAEN
-                + "< \u0E28 "                   //  SO SALA
-                + "< \u0E29 "                   //  SO RUSI
-                + "< \u0E2A "                   //  SO SUA
-                + "< \u0E2B "                   //  HO HIP
-                + "< \u0E2C "                   //  LO CHULA
-                + "< \u0E2D "                   //  O ANG
-                + "< \u0E2E "                   //  HO NOKHUK
-
-                //
-                // Normal vowels
-                //
-                + "< \u0E30 "                   //  SARA A
-                + "< \u0E31 "                   //  MAI HAN-AKAT
-                + "< \u0E32 "                   //  SARA AA
-
-                // Normalizer will decompose this character to \u0e4d\u0e32.  This is
-                // a Bad Thing, because we want the separate characters to sort
-                // differently than this individual one.  Since there's no public way to
-                // set the decomposition to be used when creating a collator, there's
-                // no way around this right now.
-                // It's best to go ahead and leave the character in, because it occurs
-                // this way a lot more often than it occurs as separate characters.
-                + "< \u0E33 "                   //  SARA AM
-
-                + "< \u0E34 "                   //  SARA I
-
-                + "< \u0E35 "                   //  SARA II
-                + "< \u0E36 "                   //  SARA UE
-                + "< \u0E37 "                   //  SARA UEE
-                + "< \u0E38 "                   //  SARA U
-                + "< \u0E39 "                   //  SARA UU
-
-                //
-                // Preceding vowels
-                //
-                + "< \u0E40 "                   //  SARA E
-                + "< \u0E41 "                   //  SARA AE
-                + "< \u0E42 "                   //  SARA O
-                + "< \u0E43 "                   //  SARA AI MAIMUAN
-                + "< \u0E44 "                   //  SARA AI MAIMALAI
-
-                //
-                // Digits
-                //
-                + "< \u0E50 "                   //  DIGIT ZERO
-                + "< \u0E51 "                   //  DIGIT ONE
-                + "< \u0E52 "                   //  DIGIT TWO
-                + "< \u0E53 "                   //  DIGIT THREE
-                + "< \u0E54 "                   //  DIGIT FOUR
-                + "< \u0E55 "                   //  DIGIT FIVE
-                + "< \u0E56 "                   //  DIGIT SIX
-                + "< \u0E57 "                   //  DIGIT SEVEN
-                + "< \u0E58 "                   //  DIGIT EIGHT
-                + "< \u0E59 "                   //  DIGIT NINE
-
-                // Sorta tonal marks, but maybe not really
-                + "< \u0E4D "                   //  NIKHAHIT
-
-                //
-                // Thai symbols are supposed to sort "after white space".
-                // I'm treating this as making them sort just after the normal Latin-1
-                // symbols, which are in turn after the white space.
-                //
-                + "&'\u007d'"  //  right-brace
-                + "< \u0E2F "                   //  PAIYANNOI      (ellipsis, abbreviation)
-                + "< \u0E46 "                   //  MAIYAMOK
-                + "< \u0E4F "                   //  FONGMAN
-                + "< \u0E5A "                   //  ANGKHANKHU
-                + "< \u0E5B "                   //  KHOMUT
-                + "< \u0E3F "                   //  CURRENCY SYMBOL BAHT
-
-                // These symbols are supposed to be "after all characters"
-                + "< \u0E4E "                   //  YAMAKKAN
-
-                // This rare symbol also comes after all characters.  But when it is
-                // used in combination with RU and LU, the combination is treated as
-                // a separate letter, ala "CH" sorting after "C" in traditional Spanish.
-                + "< \u0E45 "                   //  LAKKHANGYAO
-                + "& \u0E24 < \u0E24\u0E45 "
-                + "& \u0E26 < \u0E26\u0E45 "
-
-                // Tonal marks are primary ignorables but are treated as secondary
-                // differences
-                + "& \u0301 "   // acute accent
-                + "; \u0E47 "                   //  MAITAIKHU
-                + "; \u0E48 "                   //  MAI EK
-                + "; \u0E49 "                   //  MAI THO
-                + "; \u0E4A "                   //  MAI TRI
-                + "; \u0E4B "                   //  MAI CHATTAWA
-                + "; \u0E4C "                   //  THANTHAKHAT
-
-
-                // These are supposed to be ignored, so I'm treating them as controls
-                + "& \u0001 "
-                + "= \u0E3A "                   //  PHINTHU
-                + "= '.' "                      //  period
-                }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_tr.java b/ojluni/src/main/java/sun/text/resources/CollationData_tr.java
deleted file mode 100755
index 6b2b8a0..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_tr.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2005, 2006, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_tr extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                "& A < a\u0308 , A\u0308 "   // a-umlaut sorts between a and b
-                + "& C < c\u0327 , C\u0327 " // c-cedilla sorts between c and d
-                + "& G < g\u0306 , G\u0306 " // g-breve sorts between g and h
-                + "& H < \u0131 , I "  // dotless i, I
-                + "& I < i , \u0130 "  // dotted i, I
-                + "< \u0132 , \u0133 "       // ij ligature sorts between i and j
-                + "& O < o\u0308 , O\u0308 " // o-umlaut sorts between o and p
-                + "& S < s\u0327 , S\u0327 " // s-cedilla sorts between s and t
-                + "& U < u\u0308 , U\u0308 " // u-umlaut sorts between u and v
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_uk.java b/ojluni/src/main/java/sun/text/resources/CollationData_uk.java
deleted file mode 100755
index 1b28c4b..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_uk.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_uk extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                /* for uk, default plus the following */
-                "& 9 < \u0482 " +       // thousand sign
-                "& Z" +                 // Arabic script sorts after Z's
-                "< \u0430 , \u0410" +   // a
-                "< \u0431 , \u0411" +   // be
-                "< \u0432 , \u0412" +   // ve
-                "< \u0433 , \u0413" +   // ghe
-                "; \u0491 , \u0490" +   // ghe-upturn
-                "; \u0495 , \u0494" +   // ghe-mid-hook
-                "; \u0453 , \u0403" +   // gje
-                "; \u0493 , \u0492" +   // ghe-stroke
-                "< \u0434 , \u0414" +   // de
-                "< \u0452 , \u0402" +   // dje
-                "< \u0435 , \u0415" +   // ie
-                "; \u04bd , \u04bc" +   // che
-                "; \u0451 , \u0401" +   // io
-                "; \u04bf , \u04be" +   // che-descender
-                "< \u0454 , \u0404" +   // uk ie
-                "< \u0436 , \u0416" +   // zhe
-                "; \u0497 , \u0496" +   // zhe-descender
-                "; \u04c2 , \u04c1" +   // zhe-breve
-                "< \u0437 , \u0417" +   // ze
-                "; \u0499 , \u0498" +   // zh-descender
-                "< \u0455 , \u0405" +   // dze
-                "< \u0438 , \u0418" +   // i
-                "< \u0456 , \u0406" +   // uk/bg i
-                "; \u04c0 " +           // palochka
-                "< \u0457 , \u0407" +   // uk yi
-                "< \u0439 , \u0419" +   // short i
-                "< \u0458 , \u0408" +   // je
-                "< \u043a , \u041a" +   // ka
-                "; \u049f , \u049e" +   // ka-stroke
-                "; \u04c4 , \u04c3" +   // ka-hook
-                "; \u049d , \u049c" +   // ka-vt-stroke
-                "; \u04a1 , \u04a0" +   // bashkir-ka
-                "; \u045c , \u040c" +   // kje
-                "; \u049b , \u049a" +   // ka-descender
-                "< \u043b , \u041b" +   // el
-                "< \u0459 , \u0409" +   // lje
-                "< \u043c , \u041c" +   // em
-                "< \u043d , \u041d" +   // en
-                "; \u0463 " +           // yat
-                "; \u04a3 , \u04a2" +   // en-descender
-                "; \u04a5 , \u04a4" +   // en-ghe
-                "; \u04bb , \u04ba" +   // shha
-                "; \u04c8 , \u04c7" +   // en-hook
-                "< \u045a , \u040a" +   // nje
-                "< \u043e , \u041e" +   // o
-                "; \u04a9 , \u04a8" +   // ha
-                "< \u043f , \u041f" +   // pe
-                "; \u04a7 , \u04a6" +   // pe-mid-hook
-                "< \u0440 , \u0420" +   // er
-                "< \u0441 , \u0421" +   // es
-                "; \u04ab , \u04aa" +   // es-descender
-                "< \u0442 , \u0422" +   // te
-                "; \u04ad , \u04ac" +   // te-descender
-                "< \u045b , \u040b" +   // tshe
-                "< \u0443 , \u0423" +   // u
-                "; \u04af , \u04ae" +   // straight u
-                "< \u045e , \u040e" +   // short u
-                "< \u04b1 , \u04b0" +   // straight u-stroke
-                "< \u0444 , \u0424" +   // ef
-                "< \u0445 , \u0425" +   // ha
-                "; \u04b3 , \u04b2" +   // ha-descender
-                "< \u0446 , \u0426" +   // tse
-                "; \u04b5 , \u04b4" +   // te tse
-                "< \u0447 , \u0427" +   // che
-                "; \u04b7 ; \u04b6" +   // che-descender
-                "; \u04b9 , \u04b8" +   // che-vt-stroke
-                "; \u04cc , \u04cb" +   // che
-                "< \u045f , \u040f" +   // dzhe
-                "< \u0448 , \u0428" +   // sha
-                "< \u0449 , \u0429" +   // shcha
-                "< \u044a , \u042a" +   // hard sign
-                "< \u044b , \u042b" +   // yeru
-                "< \u044d , \u042d" +   // e
-                "< \u044e , \u042e" +   // yu
-                "< \u044f , \u042f" +   // ya
-                "< \u044c , \u042c" +   // soft sign
-                "< \u0461 , \u0460" +   // omega
-                "< \u0462 " +           // yat
-                "< \u0465 , \u0464" +   // iotified e
-                "< \u0467 , \u0466" +   // little yus
-                "< \u0469 , \u0468" +   // iotified little yus
-                "< \u046b , \u046a" +   // big yus
-                "< \u046d , \u046c" +   // iotified big yus
-                "< \u046f , \u046e" +   // ksi
-                "< \u0471 , \u0470" +   // psi
-                "< \u0473 , \u0472" +   // fita
-                "< \u0475 , \u0474" +   // izhitsa
-                "; \u0477 , \u0476" +   // izhitsa-double-grave
-                "< \u0479 , \u0478" +   // uk
-                "< \u047b , \u047a" +   // round omega
-                "< \u047d , \u047c" +   // omega-titlo
-                "< \u047f , \u047e" +   // ot
-                "< \u0481 , \u0480"     // koppa
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_vi.java b/ojluni/src/main/java/sun/text/resources/CollationData_vi.java
deleted file mode 100755
index e6f0395..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_vi.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- *******************************************************************************
- * (C) Copyright IBM Corp. 1996-2003 - All Rights Reserved                     *
- *                                                                             *
- * The original version of this source code and documentation is copyrighted   *
- * and owned by IBM, These materials are provided under terms of a License     *
- * Agreement between IBM and Sun. This technology is protected by multiple     *
- * US and International patents. This notice and attribution to IBM may not    *
- * to removed.                                                                 *
- *******************************************************************************
- *
- * This locale data is based on the ICU's Vietnamese locale data (rev. 1.38)
- * found at:
- *
- * http://oss.software.ibm.com/cvs/icu/icu/source/data/locales/vi.txt?rev=1.38
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_vi extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                "&\u0300;\u0309;\u0303;\u0301;\u0323"
-                + "&D<\u0111,\u0110"
-                + "&Z<\u0306<\u0302<\u031b"
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_zh.java b/ojluni/src/main/java/sun/text/resources/CollationData_zh.java
deleted file mode 100755
index 961e3e7..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_zh.java
+++ /dev/null
@@ -1,1124 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_zh extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                // GB 2312
-                   "& Z<\u3000<\u3001<\u3002<\u30fb<\u02c9"
-                 + "<\u02c7<\u3003<\u3005<\u2015<\uff5e<\u2016"
-                 + "<\u2026<\u2018<\u2019<\u201c<\u201d<\u3014<\u3015"
-                 + "<\u3008<\u3009<\u300a<\u300b<\u300c<\u300d<\u300e"
-                 + "<\u300f<\u3016<\u3017<\u3010<\u3011"
-                 + "<\u2236<\u2227<\u2228<\u2211<\u220f<\u222a"
-                 + "<\u2229<\u2208<\u2237<\u221a<\u22a5<\u2225<\u2220"
-                 + "<\u2312<\u2299<\u222b<\u222e<\u2261<\u224c<\u2248"
-                 + "<\u223d<\u221d<\u2260<\u226e<\u226f<\u2264<\u2265"
-                 + "<\u221e<\u2235<\u2234<\u2642<\u2640<\u2032"
-                 + "<\u2033<\u2103<\uff04<\uffe0<\uffe1<\u2030"
-                 + "<\u2116<\u2606<\u2605<\u25cb<\u25cf<\u25ce"
-                 + "<\u25c7<\u25c6<\u25a1<\u25a0<\u25b3<\u25b2<\u203b"
-                 + "<\u2192<\u2190<\u2191<\u2193<\u3013"
-                 + "<\u2488<\u2489<\u248a<\u248b<\u248c<\u248d<\u248e"
-                 + "<\u248f<\u2490<\u2491<\u2492<\u2493<\u2494<\u2495"
-                 + "<\u2496<\u2497<\u2498<\u2499<\u249a<\u249b<\u2474"
-                 + "<\u2475<\u2476<\u2477<\u2478<\u2479<\u247a<\u247b"
-                 + "<\u247c<\u247d<\u247e<\u247f<\u2480<\u2481<\u2482"
-                 + "<\u2483<\u2484<\u2485<\u2486<\u2487<\u2460<\u2461"
-                 + "<\u2462<\u2463<\u2464<\u2465<\u2466<\u2467<\u2468"
-                 + "<\u2469<\u3220<\u3221<\u3222<\u3223"
-                 + "<\u3224<\u3225<\u3226<\u3227<\u3228<\u3229"
-                 + "<\uff01<\uff02<\uff03<\uffe5<\uff05<\uff06"
-                 + "<\uff08<\uff09<\uff0a<\uff0b<\uff0c<\uff0d"
-                 + "<\uff0e<\uff0f<\uff10<\uff11<\uff12<\uff13<\uff14"
-                 + "<\uff15<\uff16<\uff17<\uff18<\uff19<\uff1a<\uff1b"
-                 + "<\uff1c<\uff1d<\uff1e<\uff1f<\uff20<\uff21<\uff22"
-                 + "<\uff23<\uff24<\uff25<\uff26<\uff27<\uff28<\uff29"
-                 + "<\uff2a<\uff2b<\uff2c<\uff2d<\uff2e<\uff2f<\uff30"
-                 + "<\uff31<\uff32<\uff33<\uff34<\uff35<\uff36<\uff37"
-                 + "<\uff38<\uff39<\uff3a<\uff3b<\uff3c<\uff3d<\uff3e"
-                 + "<\uff3f<\uff40<\uff41<\uff42<\uff43<\uff44<\uff45"
-                 + "<\uff46<\uff47<\uff48<\uff49<\uff4a<\uff4b<\uff4c"
-                 + "<\uff4d<\uff4e<\uff4f<\uff50<\uff51<\uff52<\uff53"
-                 + "<\uff54<\uff55<\uff56<\uff57<\uff58<\uff59<\uff5a"
-                 + "<\uff5b<\uff5c<\uff5d<\uffe3<\u3041<\u3042<\u3043"
-                 + "<\u3044<\u3045<\u3046<\u3047<\u3048<\u3049<\u304a"
-                 + "<\u304b<\u304c<\u304d<\u304e<\u304f<\u3050<\u3051"
-                 + "<\u3052<\u3053<\u3054<\u3055<\u3056<\u3057<\u3058"
-                 + "<\u3059<\u305a<\u305b<\u305c<\u305d<\u305e<\u305f"
-                 + "<\u3060<\u3061<\u3062<\u3063<\u3064<\u3065<\u3066"
-                 + "<\u3067<\u3068<\u3069<\u306a<\u306b<\u306c<\u306d"
-                 + "<\u306e<\u306f<\u3070<\u3071<\u3072<\u3073<\u3074"
-                 + "<\u3075<\u3076<\u3077<\u3078<\u3079<\u307a<\u307b"
-                 + "<\u307c<\u307d<\u307e<\u307f<\u3080<\u3081<\u3082"
-                 + "<\u3083<\u3084<\u3085<\u3086<\u3087<\u3088<\u3089"
-                 + "<\u308a<\u308b<\u308c<\u308d<\u308e<\u308f<\u3090"
-                 + "<\u3091<\u3092<\u3093"
-                 + "<\u30a1<\u30a2<\u30a3<\u30a4<\u30a5<\u30a6<\u30a7"
-                 + "<\u30a8<\u30a9<\u30aa<\u30ab<\u30ac<\u30ad<\u30ae"
-                 + "<\u30af<\u30b0<\u30b1<\u30b2<\u30b3<\u30b4<\u30b5"
-                 + "<\u30b6<\u30b7<\u30b8<\u30b9<\u30ba<\u30bb<\u30bc"
-                 + "<\u30bd<\u30be<\u30bf<\u30c0<\u30c1<\u30c2<\u30c3"
-                 + "<\u30c4<\u30c5<\u30c6<\u30c7<\u30c8<\u30c9<\u30ca"
-                 + "<\u30cb<\u30cc<\u30cd<\u30ce<\u30cf<\u30d0<\u30d1"
-                 + "<\u30d2<\u30d3<\u30d4<\u30d5<\u30d6<\u30d7<\u30d8"
-                 + "<\u30d9<\u30da<\u30db<\u30dc<\u30dd<\u30de<\u30df"
-                 + "<\u30e0<\u30e1<\u30e2<\u30e3<\u30e4<\u30e5<\u30e6"
-                 + "<\u30e7<\u30e8<\u30e9<\u30ea<\u30eb<\u30ec<\u30ed"
-                 + "<\u30ee<\u30ef<\u30f0<\u30f1<\u30f2<\u30f3<\u30f4"
-                 + "<\u30f5<\u30f6"
-                 + "<\u0391<\u0392<\u0393<\u0394"
-                 + "<\u0395<\u0396<\u0397<\u0398<\u0399<\u039a<\u039b"
-                 + "<\u039c<\u039d<\u039e<\u039f<\u03a0<\u03a1<\u03a3"
-                 + "<\u03a4<\u03a5<\u03a6<\u03a7<\u03a8<\u03a9"
-                 + "<\u03b1<\u03b2<\u03b3<\u03b4<\u03b5<\u03b6<\u03b7"
-                 + "<\u03b8<\u03b9<\u03ba<\u03bb<\u03bc<\u03bd<\u03be"
-                 + "<\u03bf<\u03c0<\u03c1<\u03c3<\u03c4<\u03c5<\u03c6"
-                 + "<\u03c7<\u03c8<\u03c9"
-                 + "<\u0410"
-                 + "<\u0411<\u0412<\u0413<\u0414<\u0415<\u0401<\u0416"
-                 + "<\u0417<\u0418<\u0419<\u041a<\u041b<\u041c<\u041d"
-                 + "<\u041e<\u041f<\u0420<\u0421<\u0422<\u0423<\u0424"
-                 + "<\u0425<\u0426<\u0427<\u0428<\u0429<\u042a<\u042b"
-                 + "<\u042c<\u042d<\u042e<\u042f"
-                 + "<\u0430<\u0431"
-                 + "<\u0432<\u0433<\u0434<\u0435<\u0451<\u0436<\u0437"
-                 + "<\u0438<\u0439<\u043a<\u043b<\u043c<\u043d<\u043e"
-                 + "<\u043f<\u0440<\u0441<\u0442<\u0443<\u0444<\u0445"
-                 + "<\u0446<\u0447<\u0448<\u0449<\u044a<\u044b<\u044c"
-                 + "<\u044d<\u044e<\u044f"
-                 + "<\u3105<\u3106<\u3107<\u3108"
-                 + "<\u3109<\u310a<\u310b<\u310c<\u310d<\u310e<\u310f"
-                 + "<\u3110<\u3111<\u3112<\u3113<\u3114<\u3115<\u3116"
-                 + "<\u3117<\u3118<\u3119<\u311a<\u311b<\u311c<\u311d"
-                 + "<\u311e<\u311f<\u3120<\u3121<\u3122<\u3123<\u3124"
-                 + "<\u3125<\u3126<\u3127<\u3128<\u3129"
-                 + "<\u2500<\u2501<\u2502<\u2503<\u2504<\u2505"
-                 + "<\u2506<\u2507<\u2508<\u2509<\u250a<\u250b<\u250c"
-                 + "<\u250d<\u250e<\u250f<\u2510<\u2511<\u2512<\u2513"
-                 + "<\u2514<\u2515<\u2516<\u2517<\u2518<\u2519<\u251a"
-                 + "<\u251b<\u251c<\u251d<\u251e<\u251f<\u2520<\u2521"
-                 + "<\u2522<\u2523<\u2524<\u2525<\u2526<\u2527<\u2528"
-                 + "<\u2529<\u252a<\u252b<\u252c<\u252d<\u252e<\u252f"
-                 + "<\u2530<\u2531<\u2532<\u2533<\u2534<\u2535<\u2536"
-                 + "<\u2537<\u2538<\u2539<\u253a<\u253b<\u253c<\u253d"
-                 + "<\u253e<\u253f<\u2540<\u2541<\u2542<\u2543<\u2544"
-                 + "<\u2545<\u2546<\u2547<\u2548<\u2549<\u254a<\u254b"
-                 + "<\u554a<\u963f"
-                 + "<\u57c3<\u6328<\u54ce<\u5509<\u54c0<\u7691<\u764c"
-                 + "<\u853c<\u77ee<\u827e<\u788d<\u7231<\u9698<\u978d"
-                 + "<\u6c28<\u5b89<\u4ffa<\u6309<\u6697<\u5cb8<\u80fa"
-                 + "<\u6848<\u80ae<\u6602<\u76ce<\u51f9<\u6556<\u71ac"
-                 + "<\u7ff1<\u8884<\u50b2<\u5965<\u61ca<\u6fb3<\u82ad"
-                 + "<\u634c<\u6252<\u53ed<\u5427<\u7b06<\u516b<\u75a4"
-                 + "<\u5df4<\u62d4<\u8dcb<\u9776<\u628a<\u8019<\u575d"
-                 + "<\u9738<\u7f62<\u7238<\u767d<\u67cf<\u767e<\u6446"
-                 + "<\u4f70<\u8d25<\u62dc<\u7a17<\u6591<\u73ed<\u642c"
-                 + "<\u6273<\u822c<\u9881<\u677f<\u7248<\u626e<\u62cc"
-                 + "<\u4f34<\u74e3<\u534a<\u529e<\u7eca<\u90a6<\u5e2e"
-                 + "<\u6886<\u699c<\u8180<\u7ed1<\u68d2<\u78c5<\u868c"
-                 + "<\u9551<\u508d<\u8c24<\u82de<\u80de<\u5305<\u8912"
-                 + "<\u5265<\u8584<\u96f9<\u4fdd<\u5821<\u9971<\u5b9d"
-                 + "<\u62b1<\u62a5<\u66b4<\u8c79<\u9c8d<\u7206<\u676f"
-                 + "<\u7891<\u60b2<\u5351<\u5317<\u8f88<\u80cc<\u8d1d"
-                 + "<\u94a1<\u500d<\u72c8<\u5907<\u60eb<\u7119<\u88ab"
-                 + "<\u5954<\u82ef<\u672c<\u7b28<\u5d29<\u7ef7<\u752d"
-                 + "<\u6cf5<\u8e66<\u8ff8<\u903c<\u9f3b<\u6bd4<\u9119"
-                 + "<\u7b14<\u5f7c<\u78a7<\u84d6<\u853d<\u6bd5<\u6bd9"
-                 + "<\u6bd6<\u5e01<\u5e87<\u75f9<\u95ed<\u655d<\u5f0a"
-                 + "<\u5fc5<\u8f9f<\u58c1<\u81c2<\u907f<\u965b<\u97ad"
-                 + "<\u8fb9<\u7f16<\u8d2c<\u6241<\u4fbf<\u53d8<\u535e"
-                 + "<\u8fa8<\u8fa9<\u8fab<\u904d<\u6807<\u5f6a<\u8198"
-                 + "<\u8868<\u9cd6<\u618b<\u522b<\u762a<\u5f6c<\u658c"
-                 + "<\u6fd2<\u6ee8<\u5bbe<\u6448<\u5175<\u51b0<\u67c4"
-                 + "<\u4e19<\u79c9<\u997c<\u70b3<\u75c5<\u5e76<\u73bb"
-                 + "<\u83e0<\u64ad<\u62e8<\u94b5<\u6ce2<\u535a<\u52c3"
-                 + "<\u640f<\u94c2<\u7b94<\u4f2f<\u5e1b<\u8236<\u8116"
-                 + "<\u818a<\u6e24<\u6cca<\u9a73<\u6355<\u535c<\u54fa"
-                 + "<\u8865<\u57e0<\u4e0d<\u5e03<\u6b65<\u7c3f<\u90e8"
-                 + "<\u6016<\u64e6<\u731c<\u88c1<\u6750<\u624d<\u8d22"
-                 + "<\u776c<\u8e29<\u91c7<\u5f69<\u83dc<\u8521<\u9910"
-                 + "<\u53c2<\u8695<\u6b8b<\u60ed<\u60e8<\u707f<\u82cd"
-                 + "<\u8231<\u4ed3<\u6ca7<\u85cf<\u64cd<\u7cd9<\u69fd"
-                 + "<\u66f9<\u8349<\u5395<\u7b56<\u4fa7<\u518c<\u6d4b"
-                 + "<\u5c42<\u8e6d<\u63d2<\u53c9<\u832c<\u8336<\u67e5"
-                 + "<\u78b4<\u643d<\u5bdf<\u5c94<\u5dee<\u8be7<\u62c6"
-                 + "<\u67f4<\u8c7a<\u6400<\u63ba<\u8749<\u998b<\u8c17"
-                 + "<\u7f20<\u94f2<\u4ea7<\u9610<\u98a4<\u660c<\u7316"
-                 + "<\u573a<\u5c1d<\u5e38<\u957f<\u507f<\u80a0<\u5382"
-                 + "<\u655e<\u7545<\u5531<\u5021<\u8d85<\u6284<\u949e"
-                 + "<\u671d<\u5632<\u6f6e<\u5de2<\u5435<\u7092<\u8f66"
-                 + "<\u626f<\u64a4<\u63a3<\u5f7b<\u6f88<\u90f4<\u81e3"
-                 + "<\u8fb0<\u5c18<\u6668<\u5ff1<\u6c89<\u9648<\u8d81"
-                 + "<\u886c<\u6491<\u79f0<\u57ce<\u6a59<\u6210<\u5448"
-                 + "<\u4e58<\u7a0b<\u60e9<\u6f84<\u8bda<\u627f<\u901e"
-                 + "<\u9a8b<\u79e4<\u5403<\u75f4<\u6301<\u5319<\u6c60"
-                 + "<\u8fdf<\u5f1b<\u9a70<\u803b<\u9f7f<\u4f88<\u5c3a"
-                 + "<\u8d64<\u7fc5<\u65a5<\u70bd<\u5145<\u51b2<\u866b"
-                 + "<\u5d07<\u5ba0<\u62bd<\u916c<\u7574<\u8e0c<\u7a20"
-                 + "<\u6101<\u7b79<\u4ec7<\u7ef8<\u7785<\u4e11<\u81ed"
-                 + "<\u521d<\u51fa<\u6a71<\u53a8<\u8e87<\u9504<\u96cf"
-                 + "<\u6ec1<\u9664<\u695a<\u7840<\u50a8<\u77d7<\u6410"
-                 + "<\u89e6<\u5904<\u63e3<\u5ddd<\u7a7f<\u693d<\u4f20"
-                 + "<\u8239<\u5598<\u4e32<\u75ae<\u7a97<\u5e62<\u5e8a"
-                 + "<\u95ef<\u521b<\u5439<\u708a<\u6376<\u9524<\u5782"
-                 + "<\u6625<\u693f<\u9187<\u5507<\u6df3<\u7eaf<\u8822"
-                 + "<\u6233<\u7ef0<\u75b5<\u8328<\u78c1<\u96cc<\u8f9e"
-                 + "<\u6148<\u74f7<\u8bcd<\u6b64<\u523a<\u8d50<\u6b21"
-                 + "<\u806a<\u8471<\u56f1<\u5306<\u4ece<\u4e1b<\u51d1"
-                 + "<\u7c97<\u918b<\u7c07<\u4fc3<\u8e7f<\u7be1<\u7a9c"
-                 + "<\u6467<\u5d14<\u50ac<\u8106<\u7601<\u7cb9<\u6dec"
-                 + "<\u7fe0<\u6751<\u5b58<\u5bf8<\u78cb<\u64ae<\u6413"
-                 + "<\u63aa<\u632b<\u9519<\u642d<\u8fbe<\u7b54<\u7629"
-                 + "<\u6253<\u5927<\u5446<\u6b79<\u50a3<\u6234<\u5e26"
-                 + "<\u6b86<\u4ee3<\u8d37<\u888b<\u5f85<\u902e<\u6020"
-                 + "<\u803d<\u62c5<\u4e39<\u5355<\u90f8<\u63b8<\u80c6"
-                 + "<\u65e6<\u6c2e<\u4f46<\u60ee<\u6de1<\u8bde<\u5f39"
-                 + "<\u86cb<\u5f53<\u6321<\u515a<\u8361<\u6863<\u5200"
-                 + "<\u6363<\u8e48<\u5012<\u5c9b<\u7977<\u5bfc<\u5230"
-                 + "<\u7a3b<\u60bc<\u9053<\u76d7<\u5fb7<\u5f97<\u7684"
-                 + "<\u8e6c<\u706f<\u767b<\u7b49<\u77aa<\u51f3<\u9093"
-                 + "<\u5824<\u4f4e<\u6ef4<\u8fea<\u654c<\u7b1b<\u72c4"
-                 + "<\u6da4<\u7fdf<\u5ae1<\u62b5<\u5e95<\u5730<\u8482"
-                 + "<\u7b2c<\u5e1d<\u5f1f<\u9012<\u7f14<\u98a0<\u6382"
-                 + "<\u6ec7<\u7898<\u70b9<\u5178<\u975b<\u57ab<\u7535"
-                 + "<\u4f43<\u7538<\u5e97<\u60e6<\u5960<\u6dc0<\u6bbf"
-                 + "<\u7889<\u53fc<\u96d5<\u51cb<\u5201<\u6389<\u540a"
-                 + "<\u9493<\u8c03<\u8dcc<\u7239<\u789f<\u8776<\u8fed"
-                 + "<\u8c0d<\u53e0<\u4e01<\u76ef<\u53ee<\u9489<\u9876"
-                 + "<\u9f0e<\u952d<\u5b9a<\u8ba2<\u4e22<\u4e1c<\u51ac"
-                 + "<\u8463<\u61c2<\u52a8<\u680b<\u4f97<\u606b<\u51bb"
-                 + "<\u6d1e<\u515c<\u6296<\u6597<\u9661<\u8c46<\u9017"
-                 + "<\u75d8<\u90fd<\u7763<\u6bd2<\u728a<\u72ec<\u8bfb"
-                 + "<\u5835<\u7779<\u8d4c<\u675c<\u9540<\u809a<\u5ea6"
-                 + "<\u6e21<\u5992<\u7aef<\u77ed<\u953b<\u6bb5<\u65ad"
-                 + "<\u7f0e<\u5806<\u5151<\u961f<\u5bf9<\u58a9<\u5428"
-                 + "<\u8e72<\u6566<\u987f<\u56e4<\u949d<\u76fe<\u9041"
-                 + "<\u6387<\u54c6<\u591a<\u593a<\u579b<\u8eb2<\u6735"
-                 + "<\u8dfa<\u8235<\u5241<\u60f0<\u5815<\u86fe<\u5ce8"
-                 + "<\u9e45<\u4fc4<\u989d<\u8bb9<\u5a25<\u6076<\u5384"
-                 + "<\u627c<\u904f<\u9102<\u997f<\u6069<\u800c<\u513f"
-                 + "<\u8033<\u5c14<\u9975<\u6d31<\u4e8c<\u8d30<\u53d1"
-                 + "<\u7f5a<\u7b4f<\u4f10<\u4e4f<\u9600<\u6cd5<\u73d0"
-                 + "<\u85e9<\u5e06<\u756a<\u7ffb<\u6a0a<\u77fe<\u9492"
-                 + "<\u7e41<\u51e1<\u70e6<\u53cd<\u8fd4<\u8303<\u8d29"
-                 + "<\u72af<\u996d<\u6cdb<\u574a<\u82b3<\u65b9<\u80aa"
-                 + "<\u623f<\u9632<\u59a8<\u4eff<\u8bbf<\u7eba<\u653e"
-                 + "<\u83f2<\u975e<\u5561<\u98de<\u80a5<\u532a<\u8bfd"
-                 + "<\u5420<\u80ba<\u5e9f<\u6cb8<\u8d39<\u82ac<\u915a"
-                 + "<\u5429<\u6c1b<\u5206<\u7eb7<\u575f<\u711a<\u6c7e"
-                 + "<\u7c89<\u594b<\u4efd<\u5fff<\u6124<\u7caa<\u4e30"
-                 + "<\u5c01<\u67ab<\u8702<\u5cf0<\u950b<\u98ce<\u75af"
-                 + "<\u70fd<\u9022<\u51af<\u7f1d<\u8bbd<\u5949<\u51e4"
-                 + "<\u4f5b<\u5426<\u592b<\u6577<\u80a4<\u5b75<\u6276"
-                 + "<\u62c2<\u8f90<\u5e45<\u6c1f<\u7b26<\u4f0f<\u4fd8"
-                 + "<\u670d<\u6d6e<\u6daa<\u798f<\u88b1<\u5f17<\u752b"
-                 + "<\u629a<\u8f85<\u4fef<\u91dc<\u65a7<\u812f<\u8151"
-                 + "<\u5e9c<\u8150<\u8d74<\u526f<\u8986<\u8d4b<\u590d"
-                 + "<\u5085<\u4ed8<\u961c<\u7236<\u8179<\u8d1f<\u5bcc"
-                 + "<\u8ba3<\u9644<\u5987<\u7f1a<\u5490<\u5676<\u560e"
-                 + "<\u8be5<\u6539<\u6982<\u9499<\u76d6<\u6e89<\u5e72"
-                 + "<\u7518<\u6746<\u67d1<\u7aff<\u809d<\u8d76<\u611f"
-                 + "<\u79c6<\u6562<\u8d63<\u5188<\u521a<\u94a2<\u7f38"
-                 + "<\u809b<\u7eb2<\u5c97<\u6e2f<\u6760<\u7bd9<\u768b"
-                 + "<\u9ad8<\u818f<\u7f94<\u7cd5<\u641e<\u9550<\u7a3f"
-                 + "<\u544a<\u54e5<\u6b4c<\u6401<\u6208<\u9e3d<\u80f3"
-                 + "<\u7599<\u5272<\u9769<\u845b<\u683c<\u86e4<\u9601"
-                 + "<\u9694<\u94ec<\u4e2a<\u5404<\u7ed9<\u6839<\u8ddf"
-                 + "<\u8015<\u66f4<\u5e9a<\u7fb9<\u57c2<\u803f<\u6897"
-                 + "<\u5de5<\u653b<\u529f<\u606d<\u9f9a<\u4f9b<\u8eac"
-                 + "<\u516c<\u5bab<\u5f13<\u5de9<\u6c5e<\u62f1<\u8d21"
-                 + "<\u5171<\u94a9<\u52fe<\u6c9f<\u82df<\u72d7<\u57a2"
-                 + "<\u6784<\u8d2d<\u591f<\u8f9c<\u83c7<\u5495<\u7b8d"
-                 + "<\u4f30<\u6cbd<\u5b64<\u59d1<\u9f13<\u53e4<\u86ca"
-                 + "<\u9aa8<\u8c37<\u80a1<\u6545<\u987e<\u56fa<\u96c7"
-                 + "<\u522e<\u74dc<\u5250<\u5be1<\u6302<\u8902<\u4e56"
-                 + "<\u62d0<\u602a<\u68fa<\u5173<\u5b98<\u51a0<\u89c2"
-                 + "<\u7ba1<\u9986<\u7f50<\u60ef<\u704c<\u8d2f<\u5149"
-                 + "<\u5e7f<\u901b<\u7470<\u89c4<\u572d<\u7845<\u5f52"
-                 + "<\u9f9f<\u95fa<\u8f68<\u9b3c<\u8be1<\u7678<\u6842"
-                 + "<\u67dc<\u8dea<\u8d35<\u523d<\u8f8a<\u6eda<\u68cd"
-                 + "<\u9505<\u90ed<\u56fd<\u679c<\u88f9<\u8fc7<\u54c8"
-                 + "<\u9ab8<\u5b69<\u6d77<\u6c26<\u4ea5<\u5bb3<\u9a87"
-                 + "<\u9163<\u61a8<\u90af<\u97e9<\u542b<\u6db5<\u5bd2"
-                 + "<\u51fd<\u558a<\u7f55<\u7ff0<\u64bc<\u634d<\u65f1"
-                 + "<\u61be<\u608d<\u710a<\u6c57<\u6c49<\u592f<\u676d"
-                 + "<\u822a<\u58d5<\u568e<\u8c6a<\u6beb<\u90dd<\u597d"
-                 + "<\u8017<\u53f7<\u6d69<\u5475<\u559d<\u8377<\u83cf"
-                 + "<\u6838<\u79be<\u548c<\u4f55<\u5408<\u76d2<\u8c89"
-                 + "<\u9602<\u6cb3<\u6db8<\u8d6b<\u8910<\u9e64<\u8d3a"
-                 + "<\u563f<\u9ed1<\u75d5<\u5f88<\u72e0<\u6068<\u54fc"
-                 + "<\u4ea8<\u6a2a<\u8861<\u6052<\u8f70<\u54c4<\u70d8"
-                 + "<\u8679<\u9e3f<\u6d2a<\u5b8f<\u5f18<\u7ea2<\u5589"
-                 + "<\u4faf<\u7334<\u543c<\u539a<\u5019<\u540e<\u547c"
-                 + "<\u4e4e<\u5ffd<\u745a<\u58f6<\u846b<\u80e1<\u8774"
-                 + "<\u72d0<\u7cca<\u6e56<\u5f27<\u864e<\u552c<\u62a4"
-                 + "<\u4e92<\u6caa<\u6237<\u82b1<\u54d7<\u534e<\u733e"
-                 + "<\u6ed1<\u753b<\u5212<\u5316<\u8bdd<\u69d0<\u5f8a"
-                 + "<\u6000<\u6dee<\u574f<\u6b22<\u73af<\u6853<\u8fd8"
-                 + "<\u7f13<\u6362<\u60a3<\u5524<\u75ea<\u8c62<\u7115"
-                 + "<\u6da3<\u5ba6<\u5e7b<\u8352<\u614c<\u9ec4<\u78fa"
-                 + "<\u8757<\u7c27<\u7687<\u51f0<\u60f6<\u714c<\u6643"
-                 + "<\u5e4c<\u604d<\u8c0e<\u7070<\u6325<\u8f89<\u5fbd"
-                 + "<\u6062<\u86d4<\u56de<\u6bc1<\u6094<\u6167<\u5349"
-                 + "<\u60e0<\u6666<\u8d3f<\u79fd<\u4f1a<\u70e9<\u6c47"
-                 + "<\u8bb3<\u8bf2<\u7ed8<\u8364<\u660f<\u5a5a<\u9b42"
-                 + "<\u6d51<\u6df7<\u8c41<\u6d3b<\u4f19<\u706b<\u83b7"
-                 + "<\u6216<\u60d1<\u970d<\u8d27<\u7978<\u51fb<\u573e"
-                 + "<\u57fa<\u673a<\u7578<\u7a3d<\u79ef<\u7b95<\u808c"
-                 + "<\u9965<\u8ff9<\u6fc0<\u8ba5<\u9e21<\u59ec<\u7ee9"
-                 + "<\u7f09<\u5409<\u6781<\u68d8<\u8f91<\u7c4d<\u96c6"
-                 + "<\u53ca<\u6025<\u75be<\u6c72<\u5373<\u5ac9<\u7ea7"
-                 + "<\u6324<\u51e0<\u810a<\u5df1<\u84df<\u6280<\u5180"
-                 + "<\u5b63<\u4f0e<\u796d<\u5242<\u60b8<\u6d4e<\u5bc4"
-                 + "<\u5bc2<\u8ba1<\u8bb0<\u65e2<\u5fcc<\u9645<\u5993"
-                 + "<\u7ee7<\u7eaa<\u5609<\u67b7<\u5939<\u4f73<\u5bb6"
-                 + "<\u52a0<\u835a<\u988a<\u8d3e<\u7532<\u94be<\u5047"
-                 + "<\u7a3c<\u4ef7<\u67b6<\u9a7e<\u5ac1<\u6b7c<\u76d1"
-                 + "<\u575a<\u5c16<\u7b3a<\u95f4<\u714e<\u517c<\u80a9"
-                 + "<\u8270<\u5978<\u7f04<\u8327<\u68c0<\u67ec<\u78b1"
-                 + "<\u7877<\u62e3<\u6361<\u7b80<\u4fed<\u526a<\u51cf"
-                 + "<\u8350<\u69db<\u9274<\u8df5<\u8d31<\u89c1<\u952e"
-                 + "<\u7bad<\u4ef6<\u5065<\u8230<\u5251<\u996f<\u6e10"
-                 + "<\u6e85<\u6da7<\u5efa<\u50f5<\u59dc<\u5c06<\u6d46"
-                 + "<\u6c5f<\u7586<\u848b<\u6868<\u5956<\u8bb2<\u5320"
-                 + "<\u9171<\u964d<\u8549<\u6912<\u7901<\u7126<\u80f6"
-                 + "<\u4ea4<\u90ca<\u6d47<\u9a84<\u5a07<\u56bc<\u6405"
-                 + "<\u94f0<\u77eb<\u4fa5<\u811a<\u72e1<\u89d2<\u997a"
-                 + "<\u7f34<\u7ede<\u527f<\u6559<\u9175<\u8f7f<\u8f83"
-                 + "<\u53eb<\u7a96<\u63ed<\u63a5<\u7686<\u79f8<\u8857"
-                 + "<\u9636<\u622a<\u52ab<\u8282<\u6854<\u6770<\u6377"
-                 + "<\u776b<\u7aed<\u6d01<\u7ed3<\u89e3<\u59d0<\u6212"
-                 + "<\u85c9<\u82a5<\u754c<\u501f<\u4ecb<\u75a5<\u8beb"
-                 + "<\u5c4a<\u5dfe<\u7b4b<\u65a4<\u91d1<\u4eca<\u6d25"
-                 + "<\u895f<\u7d27<\u9526<\u4ec5<\u8c28<\u8fdb<\u9773"
-                 + "<\u664b<\u7981<\u8fd1<\u70ec<\u6d78<\u5c3d<\u52b2"
-                 + "<\u8346<\u5162<\u830e<\u775b<\u6676<\u9cb8<\u4eac"
-                 + "<\u60ca<\u7cbe<\u7cb3<\u7ecf<\u4e95<\u8b66<\u666f"
-                 + "<\u9888<\u9759<\u5883<\u656c<\u955c<\u5f84<\u75c9"
-                 + "<\u9756<\u7adf<\u7ade<\u51c0<\u70af<\u7a98<\u63ea"
-                 + "<\u7a76<\u7ea0<\u7396<\u97ed<\u4e45<\u7078<\u4e5d"
-                 + "<\u9152<\u53a9<\u6551<\u65e7<\u81fc<\u8205<\u548e"
-                 + "<\u5c31<\u759a<\u97a0<\u62d8<\u72d9<\u75bd<\u5c45"
-                 + "<\u9a79<\u83ca<\u5c40<\u5480<\u77e9<\u4e3e<\u6cae"
-                 + "<\u805a<\u62d2<\u636e<\u5de8<\u5177<\u8ddd<\u8e1e"
-                 + "<\u952f<\u4ff1<\u53e5<\u60e7<\u70ac<\u5267<\u6350"
-                 + "<\u9e43<\u5a1f<\u5026<\u7737<\u5377<\u7ee2<\u6485"
-                 + "<\u652b<\u6289<\u6398<\u5014<\u7235<\u89c9<\u51b3"
-                 + "<\u8bc0<\u7edd<\u5747<\u83cc<\u94a7<\u519b<\u541b"
-                 + "<\u5cfb<\u4fca<\u7ae3<\u6d5a<\u90e1<\u9a8f<\u5580"
-                 + "<\u5496<\u5361<\u54af<\u5f00<\u63e9<\u6977<\u51ef"
-                 + "<\u6168<\u520a<\u582a<\u52d8<\u574e<\u780d<\u770b"
-                 + "<\u5eb7<\u6177<\u7ce0<\u625b<\u6297<\u4ea2<\u7095"
-                 + "<\u8003<\u62f7<\u70e4<\u9760<\u5777<\u82db<\u67ef"
-                 + "<\u68f5<\u78d5<\u9897<\u79d1<\u58f3<\u54b3<\u53ef"
-                 + "<\u6e34<\u514b<\u523b<\u5ba2<\u8bfe<\u80af<\u5543"
-                 + "<\u57a6<\u6073<\u5751<\u542d<\u7a7a<\u6050<\u5b54"
-                 + "<\u63a7<\u62a0<\u53e3<\u6263<\u5bc7<\u67af<\u54ed"
-                 + "<\u7a9f<\u82e6<\u9177<\u5e93<\u88e4<\u5938<\u57ae"
-                 + "<\u630e<\u8de8<\u80ef<\u5757<\u7b77<\u4fa9<\u5feb"
-                 + "<\u5bbd<\u6b3e<\u5321<\u7b50<\u72c2<\u6846<\u77ff"
-                 + "<\u7736<\u65f7<\u51b5<\u4e8f<\u76d4<\u5cbf<\u7aa5"
-                 + "<\u8475<\u594e<\u9b41<\u5080<\u9988<\u6127<\u6e83"
-                 + "<\u5764<\u6606<\u6346<\u56f0<\u62ec<\u6269<\u5ed3"
-                 + "<\u9614<\u5783<\u62c9<\u5587<\u8721<\u814a<\u8fa3"
-                 + "<\u5566<\u83b1<\u6765<\u8d56<\u84dd<\u5a6a<\u680f"
-                 + "<\u62e6<\u7bee<\u9611<\u5170<\u6f9c<\u8c30<\u63fd"
-                 + "<\u89c8<\u61d2<\u7f06<\u70c2<\u6ee5<\u7405<\u6994"
-                 + "<\u72fc<\u5eca<\u90ce<\u6717<\u6d6a<\u635e<\u52b3"
-                 + "<\u7262<\u8001<\u4f6c<\u59e5<\u916a<\u70d9<\u6d9d"
-                 + "<\u52d2<\u4e50<\u96f7<\u956d<\u857e<\u78ca<\u7d2f"
-                 + "<\u5121<\u5792<\u64c2<\u808b<\u7c7b<\u6cea<\u68f1"
-                 + "<\u695e<\u51b7<\u5398<\u68a8<\u7281<\u9ece<\u7bf1"
-                 + "<\u72f8<\u79bb<\u6f13<\u7406<\u674e<\u91cc<\u9ca4"
-                 + "<\u793c<\u8389<\u8354<\u540f<\u6817<\u4e3d<\u5389"
-                 + "<\u52b1<\u783e<\u5386<\u5229<\u5088<\u4f8b<\u4fd0"
-                 + "<\u75e2<\u7acb<\u7c92<\u6ca5<\u96b6<\u529b<\u7483"
-                 + "<\u54e9<\u4fe9<\u8054<\u83b2<\u8fde<\u9570<\u5ec9"
-                 + "<\u601c<\u6d9f<\u5e18<\u655b<\u8138<\u94fe<\u604b"
-                 + "<\u70bc<\u7ec3<\u7cae<\u51c9<\u6881<\u7cb1<\u826f"
-                 + "<\u4e24<\u8f86<\u91cf<\u667e<\u4eae<\u8c05<\u64a9"
-                 + "<\u804a<\u50da<\u7597<\u71ce<\u5be5<\u8fbd<\u6f66"
-                 + "<\u4e86<\u6482<\u9563<\u5ed6<\u6599<\u5217<\u88c2"
-                 + "<\u70c8<\u52a3<\u730e<\u7433<\u6797<\u78f7<\u9716"
-                 + "<\u4e34<\u90bb<\u9cde<\u6dcb<\u51db<\u8d41<\u541d"
-                 + "<\u62ce<\u73b2<\u83f1<\u96f6<\u9f84<\u94c3<\u4f36"
-                 + "<\u7f9a<\u51cc<\u7075<\u9675<\u5cad<\u9886<\u53e6"
-                 + "<\u4ee4<\u6e9c<\u7409<\u69b4<\u786b<\u998f<\u7559"
-                 + "<\u5218<\u7624<\u6d41<\u67f3<\u516d<\u9f99<\u804b"
-                 + "<\u5499<\u7b3c<\u7abf<\u9686<\u5784<\u62e2<\u9647"
-                 + "<\u697c<\u5a04<\u6402<\u7bd3<\u6f0f<\u964b<\u82a6"
-                 + "<\u5362<\u9885<\u5e90<\u7089<\u63b3<\u5364<\u864f"
-                 + "<\u9c81<\u9e93<\u788c<\u9732<\u8def<\u8d42<\u9e7f"
-                 + "<\u6f5e<\u7984<\u5f55<\u9646<\u622e<\u9a74<\u5415"
-                 + "<\u94dd<\u4fa3<\u65c5<\u5c65<\u5c61<\u7f15<\u8651"
-                 + "<\u6c2f<\u5f8b<\u7387<\u6ee4<\u7eff<\u5ce6<\u631b"
-                 + "<\u5b6a<\u6ee6<\u5375<\u4e71<\u63a0<\u7565<\u62a1"
-                 + "<\u8f6e<\u4f26<\u4ed1<\u6ca6<\u7eb6<\u8bba<\u841d"
-                 + "<\u87ba<\u7f57<\u903b<\u9523<\u7ba9<\u9aa1<\u88f8"
-                 + "<\u843d<\u6d1b<\u9a86<\u7edc<\u5988<\u9ebb<\u739b"
-                 + "<\u7801<\u8682<\u9a6c<\u9a82<\u561b<\u5417<\u57cb"
-                 + "<\u4e70<\u9ea6<\u5356<\u8fc8<\u8109<\u7792<\u9992"
-                 + "<\u86ee<\u6ee1<\u8513<\u66fc<\u6162<\u6f2b<\u8c29"
-                 + "<\u8292<\u832b<\u76f2<\u6c13<\u5fd9<\u83bd<\u732b"
-                 + "<\u8305<\u951a<\u6bdb<\u77db<\u94c6<\u536f<\u8302"
-                 + "<\u5192<\u5e3d<\u8c8c<\u8d38<\u4e48<\u73ab<\u679a"
-                 + "<\u6885<\u9176<\u9709<\u7164<\u6ca1<\u7709<\u5a92"
-                 + "<\u9541<\u6bcf<\u7f8e<\u6627<\u5bd0<\u59b9<\u5a9a"
-                 + "<\u95e8<\u95f7<\u4eec<\u840c<\u8499<\u6aac<\u76df"
-                 + "<\u9530<\u731b<\u68a6<\u5b5f<\u772f<\u919a<\u9761"
-                 + "<\u7cdc<\u8ff7<\u8c1c<\u5f25<\u7c73<\u79d8<\u89c5"
-                 + "<\u6ccc<\u871c<\u5bc6<\u5e42<\u68c9<\u7720<\u7ef5"
-                 + "<\u5195<\u514d<\u52c9<\u5a29<\u7f05<\u9762<\u82d7"
-                 + "<\u63cf<\u7784<\u85d0<\u79d2<\u6e3a<\u5e99<\u5999"
-                 + "<\u8511<\u706d<\u6c11<\u62bf<\u76bf<\u654f<\u60af"
-                 + "<\u95fd<\u660e<\u879f<\u9e23<\u94ed<\u540d<\u547d"
-                 + "<\u8c2c<\u6478<\u6479<\u8611<\u6a21<\u819c<\u78e8"
-                 + "<\u6469<\u9b54<\u62b9<\u672b<\u83ab<\u58a8<\u9ed8"
-                 + "<\u6cab<\u6f20<\u5bde<\u964c<\u8c0b<\u725f<\u67d0"
-                 + "<\u62c7<\u7261<\u4ea9<\u59c6<\u6bcd<\u5893<\u66ae"
-                 + "<\u5e55<\u52df<\u6155<\u6728<\u76ee<\u7766<\u7267"
-                 + "<\u7a46<\u62ff<\u54ea<\u5450<\u94a0<\u90a3<\u5a1c"
-                 + "<\u7eb3<\u6c16<\u4e43<\u5976<\u8010<\u5948<\u5357"
-                 + "<\u7537<\u96be<\u56ca<\u6320<\u8111<\u607c<\u95f9"
-                 + "<\u6dd6<\u5462<\u9981<\u5185<\u5ae9<\u80fd<\u59ae"
-                 + "<\u9713<\u502a<\u6ce5<\u5c3c<\u62df<\u4f60<\u533f"
-                 + "<\u817b<\u9006<\u6eba<\u852b<\u62c8<\u5e74<\u78be"
-                 + "<\u64b5<\u637b<\u5ff5<\u5a18<\u917f<\u9e1f<\u5c3f"
-                 + "<\u634f<\u8042<\u5b7d<\u556e<\u954a<\u954d<\u6d85"
-                 + "<\u60a8<\u67e0<\u72de<\u51dd<\u5b81<\u62e7<\u6cde"
-                 + "<\u725b<\u626d<\u94ae<\u7ebd<\u8113<\u6d53<\u519c"
-                 + "<\u5f04<\u5974<\u52aa<\u6012<\u5973<\u6696<\u8650"
-                 + "<\u759f<\u632a<\u61e6<\u7cef<\u8bfa<\u54e6<\u6b27"
-                 + "<\u9e25<\u6bb4<\u85d5<\u5455<\u5076<\u6ca4<\u556a"
-                 + "<\u8db4<\u722c<\u5e15<\u6015<\u7436<\u62cd<\u6392"
-                 + "<\u724c<\u5f98<\u6e43<\u6d3e<\u6500<\u6f58<\u76d8"
-                 + "<\u78d0<\u76fc<\u7554<\u5224<\u53db<\u4e53<\u5e9e"
-                 + "<\u65c1<\u802a<\u80d6<\u629b<\u5486<\u5228<\u70ae"
-                 + "<\u888d<\u8dd1<\u6ce1<\u5478<\u80da<\u57f9<\u88f4"
-                 + "<\u8d54<\u966a<\u914d<\u4f69<\u6c9b<\u55b7<\u76c6"
-                 + "<\u7830<\u62a8<\u70f9<\u6f8e<\u5f6d<\u84ec<\u68da"
-                 + "<\u787c<\u7bf7<\u81a8<\u670b<\u9e4f<\u6367<\u78b0"
-                 + "<\u576f<\u7812<\u9739<\u6279<\u62ab<\u5288<\u7435"
-                 + "<\u6bd7<\u5564<\u813e<\u75b2<\u76ae<\u5339<\u75de"
-                 + "<\u50fb<\u5c41<\u8b6c<\u7bc7<\u504f<\u7247<\u9a97"
-                 + "<\u98d8<\u6f02<\u74e2<\u7968<\u6487<\u77a5<\u62fc"
-                 + "<\u9891<\u8d2b<\u54c1<\u8058<\u4e52<\u576a<\u82f9"
-                 + "<\u840d<\u5e73<\u51ed<\u74f6<\u8bc4<\u5c4f<\u5761"
-                 + "<\u6cfc<\u9887<\u5a46<\u7834<\u9b44<\u8feb<\u7c95"
-                 + "<\u5256<\u6251<\u94fa<\u4ec6<\u8386<\u8461<\u83e9"
-                 + "<\u84b2<\u57d4<\u6734<\u5703<\u666e<\u6d66<\u8c31"
-                 + "<\u66dd<\u7011<\u671f<\u6b3a<\u6816<\u621a<\u59bb"
-                 + "<\u4e03<\u51c4<\u6f06<\u67d2<\u6c8f<\u5176<\u68cb"
-                 + "<\u5947<\u6b67<\u7566<\u5d0e<\u8110<\u9f50<\u65d7"
-                 + "<\u7948<\u7941<\u9a91<\u8d77<\u5c82<\u4e5e<\u4f01"
-                 + "<\u542f<\u5951<\u780c<\u5668<\u6c14<\u8fc4<\u5f03"
-                 + "<\u6c7d<\u6ce3<\u8bab<\u6390<\u6070<\u6d3d<\u7275"
-                 + "<\u6266<\u948e<\u94c5<\u5343<\u8fc1<\u7b7e<\u4edf"
-                 + "<\u8c26<\u4e7e<\u9ed4<\u94b1<\u94b3<\u524d<\u6f5c"
-                 + "<\u9063<\u6d45<\u8c34<\u5811<\u5d4c<\u6b20<\u6b49"
-                 + "<\u67aa<\u545b<\u8154<\u7f8c<\u5899<\u8537<\u5f3a"
-                 + "<\u62a2<\u6a47<\u9539<\u6572<\u6084<\u6865<\u77a7"
-                 + "<\u4e54<\u4fa8<\u5de7<\u9798<\u64ac<\u7fd8<\u5ced"
-                 + "<\u4fcf<\u7a8d<\u5207<\u8304<\u4e14<\u602f<\u7a83"
-                 + "<\u94a6<\u4fb5<\u4eb2<\u79e6<\u7434<\u52e4<\u82b9"
-                 + "<\u64d2<\u79bd<\u5bdd<\u6c81<\u9752<\u8f7b<\u6c22"
-                 + "<\u503e<\u537f<\u6e05<\u64ce<\u6674<\u6c30<\u60c5"
-                 + "<\u9877<\u8bf7<\u5e86<\u743c<\u7a77<\u79cb<\u4e18"
-                 + "<\u90b1<\u7403<\u6c42<\u56da<\u914b<\u6cc5<\u8d8b"
-                 + "<\u533a<\u86c6<\u66f2<\u8eaf<\u5c48<\u9a71<\u6e20"
-                 + "<\u53d6<\u5a36<\u9f8b<\u8da3<\u53bb<\u5708<\u98a7"
-                 + "<\u6743<\u919b<\u6cc9<\u5168<\u75ca<\u62f3<\u72ac"
-                 + "<\u5238<\u529d<\u7f3a<\u7094<\u7638<\u5374<\u9e4a"
-                 + "<\u69b7<\u786e<\u96c0<\u88d9<\u7fa4<\u7136<\u71c3"
-                 + "<\u5189<\u67d3<\u74e4<\u58e4<\u6518<\u56b7<\u8ba9"
-                 + "<\u9976<\u6270<\u7ed5<\u60f9<\u70ed<\u58ec<\u4ec1"
-                 + "<\u4eba<\u5fcd<\u97e7<\u4efb<\u8ba4<\u5203<\u598a"
-                 + "<\u7eab<\u6254<\u4ecd<\u65e5<\u620e<\u8338<\u84c9"
-                 + "<\u8363<\u878d<\u7194<\u6eb6<\u5bb9<\u7ed2<\u5197"
-                 + "<\u63c9<\u67d4<\u8089<\u8339<\u8815<\u5112<\u5b7a"
-                 + "<\u5982<\u8fb1<\u4e73<\u6c5d<\u5165<\u8925<\u8f6f"
-                 + "<\u962e<\u854a<\u745e<\u9510<\u95f0<\u6da6<\u82e5"
-                 + "<\u5f31<\u6492<\u6d12<\u8428<\u816e<\u9cc3<\u585e"
-                 + "<\u8d5b<\u4e09<\u53c1<\u4f1e<\u6563<\u6851<\u55d3"
-                 + "<\u4e27<\u6414<\u9a9a<\u626b<\u5ac2<\u745f<\u8272"
-                 + "<\u6da9<\u68ee<\u50e7<\u838e<\u7802<\u6740<\u5239"
-                 + "<\u6c99<\u7eb1<\u50bb<\u5565<\u715e<\u7b5b<\u6652"
-                 + "<\u73ca<\u82eb<\u6749<\u5c71<\u5220<\u717d<\u886b"
-                 + "<\u95ea<\u9655<\u64c5<\u8d61<\u81b3<\u5584<\u6c55"
-                 + "<\u6247<\u7f2e<\u5892<\u4f24<\u5546<\u8d4f<\u664c"
-                 + "<\u4e0a<\u5c1a<\u88f3<\u68a2<\u634e<\u7a0d<\u70e7"
-                 + "<\u828d<\u52fa<\u97f6<\u5c11<\u54e8<\u90b5<\u7ecd"
-                 + "<\u5962<\u8d4a<\u86c7<\u820c<\u820d<\u8d66<\u6444"
-                 + "<\u5c04<\u6151<\u6d89<\u793e<\u8bbe<\u7837<\u7533"
-                 + "<\u547b<\u4f38<\u8eab<\u6df1<\u5a20<\u7ec5<\u795e"
-                 + "<\u6c88<\u5ba1<\u5a76<\u751a<\u80be<\u614e<\u6e17"
-                 + "<\u58f0<\u751f<\u7525<\u7272<\u5347<\u7ef3<\u7701"
-                 + "<\u76db<\u5269<\u80dc<\u5723<\u5e08<\u5931<\u72ee"
-                 + "<\u65bd<\u6e7f<\u8bd7<\u5c38<\u8671<\u5341<\u77f3"
-                 + "<\u62fe<\u65f6<\u4ec0<\u98df<\u8680<\u5b9e<\u8bc6"
-                 + "<\u53f2<\u77e2<\u4f7f<\u5c4e<\u9a76<\u59cb<\u5f0f"
-                 + "<\u793a<\u58eb<\u4e16<\u67ff<\u4e8b<\u62ed<\u8a93"
-                 + "<\u901d<\u52bf<\u662f<\u55dc<\u566c<\u9002<\u4ed5"
-                 + "<\u4f8d<\u91ca<\u9970<\u6c0f<\u5e02<\u6043<\u5ba4"
-                 + "<\u89c6<\u8bd5<\u6536<\u624b<\u9996<\u5b88<\u5bff"
-                 + "<\u6388<\u552e<\u53d7<\u7626<\u517d<\u852c<\u67a2"
-                 + "<\u68b3<\u6b8a<\u6292<\u8f93<\u53d4<\u8212<\u6dd1"
-                 + "<\u758f<\u4e66<\u8d4e<\u5b70<\u719f<\u85af<\u6691"
-                 + "<\u66d9<\u7f72<\u8700<\u9ecd<\u9f20<\u5c5e<\u672f"
-                 + "<\u8ff0<\u6811<\u675f<\u620d<\u7ad6<\u5885<\u5eb6"
-                 + "<\u6570<\u6f31<\u6055<\u5237<\u800d<\u6454<\u8870"
-                 + "<\u7529<\u5e05<\u6813<\u62f4<\u971c<\u53cc<\u723d"
-                 + "<\u8c01<\u6c34<\u7761<\u7a0e<\u542e<\u77ac<\u987a"
-                 + "<\u821c<\u8bf4<\u7855<\u6714<\u70c1<\u65af<\u6495"
-                 + "<\u5636<\u601d<\u79c1<\u53f8<\u4e1d<\u6b7b<\u8086"
-                 + "<\u5bfa<\u55e3<\u56db<\u4f3a<\u4f3c<\u9972<\u5df3"
-                 + "<\u677e<\u8038<\u6002<\u9882<\u9001<\u5b8b<\u8bbc"
-                 + "<\u8bf5<\u641c<\u8258<\u64de<\u55fd<\u82cf<\u9165"
-                 + "<\u4fd7<\u7d20<\u901f<\u7c9f<\u50f3<\u5851<\u6eaf"
-                 + "<\u5bbf<\u8bc9<\u8083<\u9178<\u849c<\u7b97<\u867d"
-                 + "<\u968b<\u968f<\u7ee5<\u9ad3<\u788e<\u5c81<\u7a57"
-                 + "<\u9042<\u96a7<\u795f<\u5b59<\u635f<\u7b0b<\u84d1"
-                 + "<\u68ad<\u5506<\u7f29<\u7410<\u7d22<\u9501<\u6240"
-                 + "<\u584c<\u4ed6<\u5b83<\u5979<\u5854<\u736d<\u631e"
-                 + "<\u8e4b<\u8e0f<\u80ce<\u82d4<\u62ac<\u53f0<\u6cf0"
-                 + "<\u915e<\u592a<\u6001<\u6c70<\u574d<\u644a<\u8d2a"
-                 + "<\u762b<\u6ee9<\u575b<\u6a80<\u75f0<\u6f6d<\u8c2d"
-                 + "<\u8c08<\u5766<\u6bef<\u8892<\u78b3<\u63a2<\u53f9"
-                 + "<\u70ad<\u6c64<\u5858<\u642a<\u5802<\u68e0<\u819b"
-                 + "<\u5510<\u7cd6<\u5018<\u8eba<\u6dcc<\u8d9f<\u70eb"
-                 + "<\u638f<\u6d9b<\u6ed4<\u7ee6<\u8404<\u6843<\u9003"
-                 + "<\u6dd8<\u9676<\u8ba8<\u5957<\u7279<\u85e4<\u817e"
-                 + "<\u75bc<\u8a8a<\u68af<\u5254<\u8e22<\u9511<\u63d0"
-                 + "<\u9898<\u8e44<\u557c<\u4f53<\u66ff<\u568f<\u60d5"
-                 + "<\u6d95<\u5243<\u5c49<\u5929<\u6dfb<\u586b<\u7530"
-                 + "<\u751c<\u606c<\u8214<\u8146<\u6311<\u6761<\u8fe2"
-                 + "<\u773a<\u8df3<\u8d34<\u94c1<\u5e16<\u5385<\u542c"
-                 + "<\u70c3<\u6c40<\u5ef7<\u505c<\u4ead<\u5ead<\u633a"
-                 + "<\u8247<\u901a<\u6850<\u916e<\u77b3<\u540c<\u94dc"
-                 + "<\u5f64<\u7ae5<\u6876<\u6345<\u7b52<\u7edf<\u75db"
-                 + "<\u5077<\u6295<\u5934<\u900f<\u51f8<\u79c3<\u7a81"
-                 + "<\u56fe<\u5f92<\u9014<\u6d82<\u5c60<\u571f<\u5410"
-                 + "<\u5154<\u6e4d<\u56e2<\u63a8<\u9893<\u817f<\u8715"
-                 + "<\u892a<\u9000<\u541e<\u5c6f<\u81c0<\u62d6<\u6258"
-                 + "<\u8131<\u9e35<\u9640<\u9a6e<\u9a7c<\u692d<\u59a5"
-                 + "<\u62d3<\u553e<\u6316<\u54c7<\u86d9<\u6d3c<\u5a03"
-                 + "<\u74e6<\u889c<\u6b6a<\u5916<\u8c4c<\u5f2f<\u6e7e"
-                 + "<\u73a9<\u987d<\u4e38<\u70f7<\u5b8c<\u7897<\u633d"
-                 + "<\u665a<\u7696<\u60cb<\u5b9b<\u5a49<\u4e07<\u8155"
-                 + "<\u6c6a<\u738b<\u4ea1<\u6789<\u7f51<\u5f80<\u65fa"
-                 + "<\u671b<\u5fd8<\u5984<\u5a01<\u5dcd<\u5fae<\u5371"
-                 + "<\u97e6<\u8fdd<\u6845<\u56f4<\u552f<\u60df<\u4e3a"
-                 + "<\u6f4d<\u7ef4<\u82c7<\u840e<\u59d4<\u4f1f<\u4f2a"
-                 + "<\u5c3e<\u7eac<\u672a<\u851a<\u5473<\u754f<\u80c3"
-                 + "<\u5582<\u9b4f<\u4f4d<\u6e2d<\u8c13<\u5c09<\u6170"
-                 + "<\u536b<\u761f<\u6e29<\u868a<\u6587<\u95fb<\u7eb9"
-                 + "<\u543b<\u7a33<\u7d0a<\u95ee<\u55e1<\u7fc1<\u74ee"
-                 + "<\u631d<\u8717<\u6da1<\u7a9d<\u6211<\u65a1<\u5367"
-                 + "<\u63e1<\u6c83<\u5deb<\u545c<\u94a8<\u4e4c<\u6c61"
-                 + "<\u8bec<\u5c4b<\u65e0<\u829c<\u68a7<\u543e<\u5434"
-                 + "<\u6bcb<\u6b66<\u4e94<\u6342<\u5348<\u821e<\u4f0d"
-                 + "<\u4fae<\u575e<\u620a<\u96fe<\u6664<\u7269<\u52ff"
-                 + "<\u52a1<\u609f<\u8bef<\u6614<\u7199<\u6790<\u897f"
-                 + "<\u7852<\u77fd<\u6670<\u563b<\u5438<\u9521<\u727a"
-                 + "<\u7a00<\u606f<\u5e0c<\u6089<\u819d<\u5915<\u60dc"
-                 + "<\u7184<\u70ef<\u6eaa<\u6c50<\u7280<\u6a84<\u88ad"
-                 + "<\u5e2d<\u4e60<\u5ab3<\u559c<\u94e3<\u6d17<\u7cfb"
-                 + "<\u9699<\u620f<\u7ec6<\u778e<\u867e<\u5323<\u971e"
-                 + "<\u8f96<\u6687<\u5ce1<\u4fa0<\u72ed<\u4e0b<\u53a6"
-                 + "<\u590f<\u5413<\u6380<\u9528<\u5148<\u4ed9<\u9c9c"
-                 + "<\u7ea4<\u54b8<\u8d24<\u8854<\u8237<\u95f2<\u6d8e"
-                 + "<\u5f26<\u5acc<\u663e<\u9669<\u73b0<\u732e<\u53bf"
-                 + "<\u817a<\u9985<\u7fa1<\u5baa<\u9677<\u9650<\u7ebf"
-                 + "<\u76f8<\u53a2<\u9576<\u9999<\u7bb1<\u8944<\u6e58"
-                 + "<\u4e61<\u7fd4<\u7965<\u8be6<\u60f3<\u54cd<\u4eab"
-                 + "<\u9879<\u5df7<\u6a61<\u50cf<\u5411<\u8c61<\u8427"
-                 + "<\u785d<\u9704<\u524a<\u54ee<\u56a3<\u9500<\u6d88"
-                 + "<\u5bb5<\u6dc6<\u6653<\u5c0f<\u5b5d<\u6821<\u8096"
-                 + "<\u5578<\u7b11<\u6548<\u6954<\u4e9b<\u6b47<\u874e"
-                 + "<\u978b<\u534f<\u631f<\u643a<\u90aa<\u659c<\u80c1"
-                 + "<\u8c10<\u5199<\u68b0<\u5378<\u87f9<\u61c8<\u6cc4"
-                 + "<\u6cfb<\u8c22<\u5c51<\u85aa<\u82af<\u950c<\u6b23"
-                 + "<\u8f9b<\u65b0<\u5ffb<\u5fc3<\u4fe1<\u8845<\u661f"
-                 + "<\u8165<\u7329<\u60fa<\u5174<\u5211<\u578b<\u5f62"
-                 + "<\u90a2<\u884c<\u9192<\u5e78<\u674f<\u6027<\u59d3"
-                 + "<\u5144<\u51f6<\u80f8<\u5308<\u6c79<\u96c4<\u718a"
-                 + "<\u4f11<\u4fee<\u7f9e<\u673d<\u55c5<\u9508<\u79c0"
-                 + "<\u8896<\u7ee3<\u589f<\u620c<\u9700<\u865a<\u5618"
-                 + "<\u987b<\u5f90<\u8bb8<\u84c4<\u9157<\u53d9<\u65ed"
-                 + "<\u5e8f<\u755c<\u6064<\u7d6e<\u5a7f<\u7eea<\u7eed"
-                 + "<\u8f69<\u55a7<\u5ba3<\u60ac<\u65cb<\u7384<\u9009"
-                 + "<\u7663<\u7729<\u7eda<\u9774<\u859b<\u5b66<\u7a74"
-                 + "<\u96ea<\u8840<\u52cb<\u718f<\u5faa<\u65ec<\u8be2"
-                 + "<\u5bfb<\u9a6f<\u5de1<\u6b89<\u6c5b<\u8bad<\u8baf"
-                 + "<\u900a<\u8fc5<\u538b<\u62bc<\u9e26<\u9e2d<\u5440"
-                 + "<\u4e2b<\u82bd<\u7259<\u869c<\u5d16<\u8859<\u6daf"
-                 + "<\u96c5<\u54d1<\u4e9a<\u8bb6<\u7109<\u54bd<\u9609"
-                 + "<\u70df<\u6df9<\u76d0<\u4e25<\u7814<\u8712<\u5ca9"
-                 + "<\u5ef6<\u8a00<\u989c<\u960e<\u708e<\u6cbf<\u5944"
-                 + "<\u63a9<\u773c<\u884d<\u6f14<\u8273<\u5830<\u71d5"
-                 + "<\u538c<\u781a<\u96c1<\u5501<\u5f66<\u7130<\u5bb4"
-                 + "<\u8c1a<\u9a8c<\u6b83<\u592e<\u9e2f<\u79e7<\u6768"
-                 + "<\u626c<\u4f6f<\u75a1<\u7f8a<\u6d0b<\u9633<\u6c27"
-                 + "<\u4ef0<\u75d2<\u517b<\u6837<\u6f3e<\u9080<\u8170"
-                 + "<\u5996<\u7476<\u6447<\u5c27<\u9065<\u7a91<\u8c23"
-                 + "<\u59da<\u54ac<\u8200<\u836f<\u8981<\u8000<\u6930"
-                 + "<\u564e<\u8036<\u7237<\u91ce<\u51b6<\u4e5f<\u9875"
-                 + "<\u6396<\u4e1a<\u53f6<\u66f3<\u814b<\u591c<\u6db2"
-                 + "<\u4e00<\u58f9<\u533b<\u63d6<\u94f1<\u4f9d<\u4f0a"
-                 + "<\u8863<\u9890<\u5937<\u9057<\u79fb<\u4eea<\u80f0"
-                 + "<\u7591<\u6c82<\u5b9c<\u59e8<\u5f5d<\u6905<\u8681"
-                 + "<\u501a<\u5df2<\u4e59<\u77e3<\u4ee5<\u827a<\u6291"
-                 + "<\u6613<\u9091<\u5c79<\u4ebf<\u5f79<\u81c6<\u9038"
-                 + "<\u8084<\u75ab<\u4ea6<\u88d4<\u610f<\u6bc5<\u5fc6"
-                 + "<\u4e49<\u76ca<\u6ea2<\u8be3<\u8bae<\u8c0a<\u8bd1"
-                 + "<\u5f02<\u7ffc<\u7fcc<\u7ece<\u8335<\u836b<\u56e0"
-                 + "<\u6bb7<\u97f3<\u9634<\u59fb<\u541f<\u94f6<\u6deb"
-                 + "<\u5bc5<\u996e<\u5c39<\u5f15<\u9690<\u5370<\u82f1"
-                 + "<\u6a31<\u5a74<\u9e70<\u5e94<\u7f28<\u83b9<\u8424"
-                 + "<\u8425<\u8367<\u8747<\u8fce<\u8d62<\u76c8<\u5f71"
-                 + "<\u9896<\u786c<\u6620<\u54df<\u62e5<\u4f63<\u81c3"
-                 + "<\u75c8<\u5eb8<\u96cd<\u8e0a<\u86f9<\u548f<\u6cf3"
-                 + "<\u6d8c<\u6c38<\u607f<\u52c7<\u7528<\u5e7d<\u4f18"
-                 + "<\u60a0<\u5fe7<\u5c24<\u7531<\u90ae<\u94c0<\u72b9"
-                 + "<\u6cb9<\u6e38<\u9149<\u6709<\u53cb<\u53f3<\u4f51"
-                 + "<\u91c9<\u8bf1<\u53c8<\u5e7c<\u8fc2<\u6de4<\u4e8e"
-                 + "<\u76c2<\u6986<\u865e<\u611a<\u8206<\u4f59<\u4fde"
-                 + "<\u903e<\u9c7c<\u6109<\u6e1d<\u6e14<\u9685<\u4e88"
-                 + "<\u5a31<\u96e8<\u4e0e<\u5c7f<\u79b9<\u5b87<\u8bed"
-                 + "<\u7fbd<\u7389<\u57df<\u828b<\u90c1<\u5401<\u9047"
-                 + "<\u55bb<\u5cea<\u5fa1<\u6108<\u6b32<\u72f1<\u80b2"
-                 + "<\u8a89<\u6d74<\u5bd3<\u88d5<\u9884<\u8c6b<\u9a6d"
-                 + "<\u9e33<\u6e0a<\u51a4<\u5143<\u57a3<\u8881<\u539f"
-                 + "<\u63f4<\u8f95<\u56ed<\u5458<\u5706<\u733f<\u6e90"
-                 + "<\u7f18<\u8fdc<\u82d1<\u613f<\u6028<\u9662<\u66f0"
-                 + "<\u7ea6<\u8d8a<\u8dc3<\u94a5<\u5cb3<\u7ca4<\u6708"
-                 + "<\u60a6<\u9605<\u8018<\u4e91<\u90e7<\u5300<\u9668"
-                 + "<\u5141<\u8fd0<\u8574<\u915d<\u6655<\u97f5<\u5b55"
-                 + "<\u531d<\u7838<\u6742<\u683d<\u54c9<\u707e<\u5bb0"
-                 + "<\u8f7d<\u518d<\u5728<\u54b1<\u6512<\u6682<\u8d5e"
-                 + "<\u8d43<\u810f<\u846c<\u906d<\u7cdf<\u51ff<\u85fb"
-                 + "<\u67a3<\u65e9<\u6fa1<\u86a4<\u8e81<\u566a<\u9020"
-                 + "<\u7682<\u7076<\u71e5<\u8d23<\u62e9<\u5219<\u6cfd"
-                 + "<\u8d3c<\u600e<\u589e<\u618e<\u66fe<\u8d60<\u624e"
-                 + "<\u55b3<\u6e23<\u672d<\u8f67<\u94e1<\u95f8<\u7728"
-                 + "<\u6805<\u69a8<\u548b<\u4e4d<\u70b8<\u8bc8<\u6458"
-                 + "<\u658b<\u5b85<\u7a84<\u503a<\u5be8<\u77bb<\u6be1"
-                 + "<\u8a79<\u7c98<\u6cbe<\u76cf<\u65a9<\u8f97<\u5d2d"
-                 + "<\u5c55<\u8638<\u6808<\u5360<\u6218<\u7ad9<\u6e5b"
-                 + "<\u7efd<\u6a1f<\u7ae0<\u5f70<\u6f33<\u5f20<\u638c"
-                 + "<\u6da8<\u6756<\u4e08<\u5e10<\u8d26<\u4ed7<\u80c0"
-                 + "<\u7634<\u969c<\u62db<\u662d<\u627e<\u6cbc<\u8d75"
-                 + "<\u7167<\u7f69<\u5146<\u8087<\u53ec<\u906e<\u6298"
-                 + "<\u54f2<\u86f0<\u8f99<\u8005<\u9517<\u8517<\u8fd9"
-                 + "<\u6d59<\u73cd<\u659f<\u771f<\u7504<\u7827<\u81fb"
-                 + "<\u8d1e<\u9488<\u4fa6<\u6795<\u75b9<\u8bca<\u9707"
-                 + "<\u632f<\u9547<\u9635<\u84b8<\u6323<\u7741<\u5f81"
-                 + "<\u72f0<\u4e89<\u6014<\u6574<\u62ef<\u6b63<\u653f"
-                 + "<\u5e27<\u75c7<\u90d1<\u8bc1<\u829d<\u679d<\u652f"
-                 + "<\u5431<\u8718<\u77e5<\u80a2<\u8102<\u6c41<\u4e4b"
-                 + "<\u7ec7<\u804c<\u76f4<\u690d<\u6b96<\u6267<\u503c"
-                 + "<\u4f84<\u5740<\u6307<\u6b62<\u8dbe<\u53ea<\u65e8"
-                 + "<\u7eb8<\u5fd7<\u631a<\u63b7<\u81f3<\u81f4<\u7f6e"
-                 + "<\u5e1c<\u5cd9<\u5236<\u667a<\u79e9<\u7a1a<\u8d28"
-                 + "<\u7099<\u75d4<\u6ede<\u6cbb<\u7a92<\u4e2d<\u76c5"
-                 + "<\u5fe0<\u949f<\u8877<\u7ec8<\u79cd<\u80bf<\u91cd"
-                 + "<\u4ef2<\u4f17<\u821f<\u5468<\u5dde<\u6d32<\u8bcc"
-                 + "<\u7ca5<\u8f74<\u8098<\u5e1a<\u5492<\u76b1<\u5b99"
-                 + "<\u663c<\u9aa4<\u73e0<\u682a<\u86db<\u6731<\u732a"
-                 + "<\u8bf8<\u8bdb<\u9010<\u7af9<\u70db<\u716e<\u62c4"
-                 + "<\u77a9<\u5631<\u4e3b<\u8457<\u67f1<\u52a9<\u86c0"
-                 + "<\u8d2e<\u94f8<\u7b51<\u4f4f<\u6ce8<\u795d<\u9a7b"
-                 + "<\u6293<\u722a<\u62fd<\u4e13<\u7816<\u8f6c<\u64b0"
-                 + "<\u8d5a<\u7bc6<\u6869<\u5e84<\u88c5<\u5986<\u649e"
-                 + "<\u58ee<\u72b6<\u690e<\u9525<\u8ffd<\u8d58<\u5760"
-                 + "<\u7f00<\u8c06<\u51c6<\u6349<\u62d9<\u5353<\u684c"
-                 + "<\u7422<\u8301<\u914c<\u5544<\u7740<\u707c<\u6d4a"
-                 + "<\u5179<\u54a8<\u8d44<\u59ff<\u6ecb<\u6dc4<\u5b5c"
-                 + "<\u7d2b<\u4ed4<\u7c7d<\u6ed3<\u5b50<\u81ea<\u6e0d"
-                 + "<\u5b57<\u9b03<\u68d5<\u8e2a<\u5b97<\u7efc<\u603b"
-                 + "<\u7eb5<\u90b9<\u8d70<\u594f<\u63cd<\u79df<\u8db3"
-                 + "<\u5352<\u65cf<\u7956<\u8bc5<\u963b<\u7ec4<\u94bb"
-                 + "<\u7e82<\u5634<\u9189<\u6700<\u7f6a<\u5c0a<\u9075"
-                 + "<\u6628<\u5de6<\u4f50<\u67de<\u505a<\u4f5c<\u5750"
-                 + "<\u5ea7<\ue2d8<\ue2d9<\ue2da<\ue2db<\ue2dc<\u4e8d"
-                 + "<\u4e0c<\u5140<\u4e10<\u5eff<\u5345<\u4e15<\u4e98"
-                 + "<\u4e1e<\u9b32<\u5b6c<\u5669<\u4e28<\u79ba<\u4e3f"
-                 + "<\u5315<\u4e47<\u592d<\u723b<\u536e<\u6c10<\u56df"
-                 + "<\u80e4<\u9997<\u6bd3<\u777e<\u9f17<\u4e36<\u4e9f"
-                 + "<\u9f10<\u4e5c<\u4e69<\u4e93<\u8288<\u5b5b<\u556c"
-                 + "<\u560f<\u4ec4<\u538d<\u539d<\u53a3<\u53a5<\u53ae"
-                 + "<\u9765<\u8d5d<\u531a<\u53f5<\u5326<\u532e<\u533e"
-                 + "<\u8d5c<\u5366<\u5363<\u5202<\u5208<\u520e<\u522d"
-                 + "<\u5233<\u523f<\u5240<\u524c<\u525e<\u5261<\u525c"
-                 + "<\u84af<\u527d<\u5282<\u5281<\u5290<\u5293<\u5182"
-                 + "<\u7f54<\u4ebb<\u4ec3<\u4ec9<\u4ec2<\u4ee8<\u4ee1"
-                 + "<\u4eeb<\u4ede<\u4f1b<\u4ef3<\u4f22<\u4f64<\u4ef5"
-                 + "<\u4f25<\u4f27<\u4f09<\u4f2b<\u4f5e<\u4f67<\u6538"
-                 + "<\u4f5a<\u4f5d<\u4f5f<\u4f57<\u4f32<\u4f3d<\u4f76"
-                 + "<\u4f74<\u4f91<\u4f89<\u4f83<\u4f8f<\u4f7e<\u4f7b"
-                 + "<\u4faa<\u4f7c<\u4fac<\u4f94<\u4fe6<\u4fe8<\u4fea"
-                 + "<\u4fc5<\u4fda<\u4fe3<\u4fdc<\u4fd1<\u4fdf<\u4ff8"
-                 + "<\u5029<\u504c<\u4ff3<\u502c<\u500f<\u502e<\u502d"
-                 + "<\u4ffe<\u501c<\u500c<\u5025<\u5028<\u507e<\u5043"
-                 + "<\u5055<\u5048<\u504e<\u506c<\u507b<\u50a5<\u50a7"
-                 + "<\u50a9<\u50ba<\u50d6<\u5106<\u50ed<\u50ec<\u50e6"
-                 + "<\u50ee<\u5107<\u510b<\u4edd<\u6c3d<\u4f58<\u4f65"
-                 + "<\u4fce<\u9fa0<\u6c46<\u7c74<\u516e<\u5dfd<\u9ec9"
-                 + "<\u9998<\u5181<\u5914<\u52f9<\u530d<\u8a07<\u5310"
-                 + "<\u51eb<\u5919<\u5155<\u4ea0<\u5156<\u4eb3<\u886e"
-                 + "<\u88a4<\u4eb5<\u8114<\u88d2<\u7980<\u5b34<\u8803"
-                 + "<\u7fb8<\u51ab<\u51b1<\u51bd<\u51bc<\u51c7<\u5196"
-                 + "<\u51a2<\u51a5<\u8ba0<\u8ba6<\u8ba7<\u8baa<\u8bb4"
-                 + "<\u8bb5<\u8bb7<\u8bc2<\u8bc3<\u8bcb<\u8bcf<\u8bce"
-                 + "<\u8bd2<\u8bd3<\u8bd4<\u8bd6<\u8bd8<\u8bd9<\u8bdc"
-                 + "<\u8bdf<\u8be0<\u8be4<\u8be8<\u8be9<\u8bee<\u8bf0"
-                 + "<\u8bf3<\u8bf6<\u8bf9<\u8bfc<\u8bff<\u8c00<\u8c02"
-                 + "<\u8c04<\u8c07<\u8c0c<\u8c0f<\u8c11<\u8c12<\u8c14"
-                 + "<\u8c15<\u8c16<\u8c19<\u8c1b<\u8c18<\u8c1d<\u8c1f"
-                 + "<\u8c20<\u8c21<\u8c25<\u8c27<\u8c2a<\u8c2b<\u8c2e"
-                 + "<\u8c2f<\u8c32<\u8c33<\u8c35<\u8c36<\u5369<\u537a"
-                 + "<\u961d<\u9622<\u9621<\u9631<\u962a<\u963d<\u963c"
-                 + "<\u9642<\u9649<\u9654<\u965f<\u9667<\u966c<\u9672"
-                 + "<\u9674<\u9688<\u968d<\u9697<\u96b0<\u9097<\u909b"
-                 + "<\u909d<\u9099<\u90ac<\u90a1<\u90b4<\u90b3<\u90b6"
-                 + "<\u90ba<\u90b8<\u90b0<\u90cf<\u90c5<\u90be<\u90d0"
-                 + "<\u90c4<\u90c7<\u90d3<\u90e6<\u90e2<\u90dc<\u90d7"
-                 + "<\u90db<\u90eb<\u90ef<\u90fe<\u9104<\u9122<\u911e"
-                 + "<\u9123<\u9131<\u912f<\u9139<\u9143<\u9146<\u520d"
-                 + "<\u5942<\u52a2<\u52ac<\u52ad<\u52be<\u54ff<\u52d0"
-                 + "<\u52d6<\u52f0<\u53df<\u71ee<\u77cd<\u5ef4<\u51f5"
-                 + "<\u51fc<\u9b2f<\u53b6<\u5f01<\u755a<\u5def<\u574c"
-                 + "<\u57a9<\u57a1<\u587e<\u58bc<\u58c5<\u58d1<\u5729"
-                 + "<\u572c<\u572a<\u5733<\u5739<\u572e<\u572f<\u575c"
-                 + "<\u573b<\u5742<\u5769<\u5785<\u576b<\u5786<\u577c"
-                 + "<\u577b<\u5768<\u576d<\u5776<\u5773<\u57ad<\u57a4"
-                 + "<\u578c<\u57b2<\u57cf<\u57a7<\u57b4<\u5793<\u57a0"
-                 + "<\u57d5<\u57d8<\u57da<\u57d9<\u57d2<\u57b8<\u57f4"
-                 + "<\u57ef<\u57f8<\u57e4<\u57dd<\u580b<\u580d<\u57fd"
-                 + "<\u57ed<\u5800<\u581e<\u5819<\u5844<\u5820<\u5865"
-                 + "<\u586c<\u5881<\u5889<\u589a<\u5880<\u99a8<\u9f19"
-                 + "<\u61ff<\u8279<\u827d<\u827f<\u828f<\u828a<\u82a8"
-                 + "<\u8284<\u828e<\u8291<\u8297<\u8299<\u82ab<\u82b8"
-                 + "<\u82be<\u82b0<\u82c8<\u82ca<\u82e3<\u8298<\u82b7"
-                 + "<\u82ae<\u82cb<\u82cc<\u82c1<\u82a9<\u82b4<\u82a1"
-                 + "<\u82aa<\u829f<\u82c4<\u82ce<\u82a4<\u82e1<\u8309"
-                 + "<\u82f7<\u82e4<\u830f<\u8307<\u82dc<\u82f4<\u82d2"
-                 + "<\u82d8<\u830c<\u82fb<\u82d3<\u8311<\u831a<\u8306"
-                 + "<\u8314<\u8315<\u82e0<\u82d5<\u831c<\u8351<\u835b"
-                 + "<\u835c<\u8308<\u8392<\u833c<\u8334<\u8331<\u839b"
-                 + "<\u835e<\u832f<\u834f<\u8347<\u8343<\u835f<\u8340"
-                 + "<\u8317<\u8360<\u832d<\u833a<\u8333<\u8366<\u8365"
-                 + "<\u8368<\u831b<\u8369<\u836c<\u836a<\u836d<\u836e"
-                 + "<\u83b0<\u8378<\u83b3<\u83b4<\u83a0<\u83aa<\u8393"
-                 + "<\u839c<\u8385<\u837c<\u83b6<\u83a9<\u837d<\u83b8"
-                 + "<\u837b<\u8398<\u839e<\u83a8<\u83ba<\u83bc<\u83c1"
-                 + "<\u8401<\u83e5<\u83d8<\u5807<\u8418<\u840b<\u83dd"
-                 + "<\u83fd<\u83d6<\u841c<\u8438<\u8411<\u8406<\u83d4"
-                 + "<\u83df<\u840f<\u8403<\u83f8<\u83f9<\u83ea<\u83c5"
-                 + "<\u83c0<\u8426<\u83f0<\u83e1<\u845c<\u8451<\u845a"
-                 + "<\u8459<\u8473<\u8487<\u8488<\u847a<\u8489<\u8478"
-                 + "<\u843c<\u8446<\u8469<\u8476<\u848c<\u848e<\u8431"
-                 + "<\u846d<\u84c1<\u84cd<\u84d0<\u84e6<\u84bd<\u84d3"
-                 + "<\u84ca<\u84bf<\u84ba<\u84e0<\u84a1<\u84b9<\u84b4"
-                 + "<\u8497<\u84e5<\u84e3<\u850c<\u750d<\u8538<\u84f0"
-                 + "<\u8539<\u851f<\u853a<\u8556<\u853b<\u84ff<\u84fc"
-                 + "<\u8559<\u8548<\u8568<\u8564<\u855e<\u857a<\u77a2"
-                 + "<\u8543<\u8572<\u857b<\u85a4<\u85a8<\u8587<\u858f"
-                 + "<\u8579<\u85ae<\u859c<\u8585<\u85b9<\u85b7<\u85b0"
-                 + "<\u85d3<\u85c1<\u85dc<\u85ff<\u8627<\u8605<\u8629"
-                 + "<\u8616<\u863c<\u5efe<\u5f08<\u593c<\u5941<\u8037"
-                 + "<\u5955<\u595a<\u5958<\u530f<\u5c22<\u5c25<\u5c2c"
-                 + "<\u5c34<\u624c<\u626a<\u629f<\u62bb<\u62ca<\u62da"
-                 + "<\u62d7<\u62ee<\u6322<\u62f6<\u6339<\u634b<\u6343"
-                 + "<\u63ad<\u63f6<\u6371<\u637a<\u638e<\u63b4<\u636d"
-                 + "<\u63ac<\u638a<\u6369<\u63ae<\u63bc<\u63f2<\u63f8"
-                 + "<\u63e0<\u63ff<\u63c4<\u63de<\u63ce<\u6452<\u63c6"
-                 + "<\u63be<\u6445<\u6441<\u640b<\u641b<\u6420<\u640c"
-                 + "<\u6426<\u6421<\u645e<\u6484<\u646d<\u6496<\u647a"
-                 + "<\u64b7<\u64b8<\u6499<\u64ba<\u64c0<\u64d0<\u64d7"
-                 + "<\u64e4<\u64e2<\u6509<\u6525<\u652e<\u5f0b<\u5fd2"
-                 + "<\u7519<\u5f11<\u535f<\u53f1<\u53fd<\u53e9<\u53e8"
-                 + "<\u53fb<\u5412<\u5416<\u5406<\u544b<\u5452<\u5453"
-                 + "<\u5454<\u5456<\u5443<\u5421<\u5457<\u5459<\u5423"
-                 + "<\u5432<\u5482<\u5494<\u5477<\u5471<\u5464<\u549a"
-                 + "<\u549b<\u5484<\u5476<\u5466<\u549d<\u54d0<\u54ad"
-                 + "<\u54c2<\u54b4<\u54d2<\u54a7<\u54a6<\u54d3<\u54d4"
-                 + "<\u5472<\u54a3<\u54d5<\u54bb<\u54bf<\u54cc<\u54d9"
-                 + "<\u54da<\u54dc<\u54a9<\u54aa<\u54a4<\u54dd<\u54cf"
-                 + "<\u54de<\u551b<\u54e7<\u5520<\u54fd<\u5514<\u54f3"
-                 + "<\u5522<\u5523<\u550f<\u5511<\u5527<\u552a<\u5567"
-                 + "<\u558f<\u55b5<\u5549<\u556d<\u5541<\u5555<\u553f"
-                 + "<\u5550<\u553c<\u5537<\u5556<\u5575<\u5576<\u5577"
-                 + "<\u5533<\u5530<\u555c<\u558b<\u55d2<\u5583<\u55b1"
-                 + "<\u55b9<\u5588<\u5581<\u559f<\u557e<\u55d6<\u5591"
-                 + "<\u557b<\u55df<\u55bd<\u55be<\u5594<\u5599<\u55ea"
-                 + "<\u55f7<\u55c9<\u561f<\u55d1<\u55eb<\u55ec<\u55d4"
-                 + "<\u55e6<\u55dd<\u55c4<\u55ef<\u55e5<\u55f2<\u55f3"
-                 + "<\u55cc<\u55cd<\u55e8<\u55f5<\u55e4<\u8f94<\u561e"
-                 + "<\u5608<\u560c<\u5601<\u5624<\u5623<\u55fe<\u5600"
-                 + "<\u5627<\u562d<\u5658<\u5639<\u5657<\u562c<\u564d"
-                 + "<\u5662<\u5659<\u565c<\u564c<\u5654<\u5686<\u5664"
-                 + "<\u5671<\u566b<\u567b<\u567c<\u5685<\u5693<\u56af"
-                 + "<\u56d4<\u56d7<\u56dd<\u56e1<\u56f5<\u56eb<\u56f9"
-                 + "<\u56ff<\u5704<\u570a<\u5709<\u571c<\u5e0f<\u5e19"
-                 + "<\u5e14<\u5e11<\u5e31<\u5e3b<\u5e3c<\u5e37<\u5e44"
-                 + "<\u5e54<\u5e5b<\u5e5e<\u5e61<\u5c8c<\u5c7a<\u5c8d"
-                 + "<\u5c90<\u5c96<\u5c88<\u5c98<\u5c99<\u5c91<\u5c9a"
-                 + "<\u5c9c<\u5cb5<\u5ca2<\u5cbd<\u5cac<\u5cab<\u5cb1"
-                 + "<\u5ca3<\u5cc1<\u5cb7<\u5cc4<\u5cd2<\u5ce4<\u5ccb"
-                 + "<\u5ce5<\u5d02<\u5d03<\u5d27<\u5d26<\u5d2e<\u5d24"
-                 + "<\u5d1e<\u5d06<\u5d1b<\u5d58<\u5d3e<\u5d34<\u5d3d"
-                 + "<\u5d6c<\u5d5b<\u5d6f<\u5d5d<\u5d6b<\u5d4b<\u5d4a"
-                 + "<\u5d69<\u5d74<\u5d82<\u5d99<\u5d9d<\u8c73<\u5db7"
-                 + "<\u5dc5<\u5f73<\u5f77<\u5f82<\u5f87<\u5f89<\u5f8c"
-                 + "<\u5f95<\u5f99<\u5f9c<\u5fa8<\u5fad<\u5fb5<\u5fbc"
-                 + "<\u8862<\u5f61<\u72ad<\u72b0<\u72b4<\u72b7<\u72b8"
-                 + "<\u72c3<\u72c1<\u72ce<\u72cd<\u72d2<\u72e8<\u72ef"
-                 + "<\u72e9<\u72f2<\u72f4<\u72f7<\u7301<\u72f3<\u7303"
-                 + "<\u72fa<\u72fb<\u7317<\u7313<\u7321<\u730a<\u731e"
-                 + "<\u731d<\u7315<\u7322<\u7339<\u7325<\u732c<\u7338"
-                 + "<\u7331<\u7350<\u734d<\u7357<\u7360<\u736c<\u736f"
-                 + "<\u737e<\u821b<\u5925<\u98e7<\u5924<\u5902<\u9963"
-                 + "<\u9967<\u9968<\u9969<\u996a<\u996b<\u996c<\u9974"
-                 + "<\u9977<\u997d<\u9980<\u9984<\u9987<\u998a<\u998d"
-                 + "<\u9990<\u9991<\u9993<\u9994<\u9995<\u5e80<\u5e91"
-                 + "<\u5e8b<\u5e96<\u5ea5<\u5ea0<\u5eb9<\u5eb5<\u5ebe"
-                 + "<\u5eb3<\u8d53<\u5ed2<\u5ed1<\u5edb<\u5ee8<\u5eea"
-                 + "<\u81ba<\u5fc4<\u5fc9<\u5fd6<\u5fcf<\u6003<\u5fee"
-                 + "<\u6004<\u5fe1<\u5fe4<\u5ffe<\u6005<\u6006<\u5fea"
-                 + "<\u5fed<\u5ff8<\u6019<\u6035<\u6026<\u601b<\u600f"
-                 + "<\u600d<\u6029<\u602b<\u600a<\u603f<\u6021<\u6078"
-                 + "<\u6079<\u607b<\u607a<\u6042<\u606a<\u607d<\u6096"
-                 + "<\u609a<\u60ad<\u609d<\u6083<\u6092<\u608c<\u609b"
-                 + "<\u60ec<\u60bb<\u60b1<\u60dd<\u60d8<\u60c6<\u60da"
-                 + "<\u60b4<\u6120<\u6126<\u6115<\u6123<\u60f4<\u6100"
-                 + "<\u610e<\u612b<\u614a<\u6175<\u61ac<\u6194<\u61a7"
-                 + "<\u61b7<\u61d4<\u61f5<\u5fdd<\u96b3<\u95e9<\u95eb"
-                 + "<\u95f1<\u95f3<\u95f5<\u95f6<\u95fc<\u95fe<\u9603"
-                 + "<\u9604<\u9606<\u9608<\u960a<\u960b<\u960c<\u960d"
-                 + "<\u960f<\u9612<\u9615<\u9616<\u9617<\u9619<\u961a"
-                 + "<\u4e2c<\u723f<\u6215<\u6c35<\u6c54<\u6c5c<\u6c4a"
-                 + "<\u6ca3<\u6c85<\u6c90<\u6c94<\u6c8c<\u6c68<\u6c69"
-                 + "<\u6c74<\u6c76<\u6c86<\u6ca9<\u6cd0<\u6cd4<\u6cad"
-                 + "<\u6cf7<\u6cf8<\u6cf1<\u6cd7<\u6cb2<\u6ce0<\u6cd6"
-                 + "<\u6cfa<\u6ceb<\u6cee<\u6cb1<\u6cd3<\u6cef<\u6cfe"
-                 + "<\u6d39<\u6d27<\u6d0c<\u6d43<\u6d48<\u6d07<\u6d04"
-                 + "<\u6d19<\u6d0e<\u6d2b<\u6d4d<\u6d2e<\u6d35<\u6d1a"
-                 + "<\u6d4f<\u6d52<\u6d54<\u6d33<\u6d91<\u6d6f<\u6d9e"
-                 + "<\u6da0<\u6d5e<\u6d93<\u6d94<\u6d5c<\u6d60<\u6d7c"
-                 + "<\u6d63<\u6e1a<\u6dc7<\u6dc5<\u6dde<\u6e0e<\u6dbf"
-                 + "<\u6de0<\u6e11<\u6de6<\u6ddd<\u6dd9<\u6e16<\u6dab"
-                 + "<\u6e0c<\u6dae<\u6e2b<\u6e6e<\u6e4e<\u6e6b<\u6eb2"
-                 + "<\u6e5f<\u6e86<\u6e53<\u6e54<\u6e32<\u6e25<\u6e44"
-                 + "<\u6edf<\u6eb1<\u6e98<\u6ee0<\u6f2d<\u6ee2<\u6ea5"
-                 + "<\u6ea7<\u6ebd<\u6ebb<\u6eb7<\u6ed7<\u6eb4<\u6ecf"
-                 + "<\u6e8f<\u6ec2<\u6e9f<\u6f62<\u6f46<\u6f47<\u6f24"
-                 + "<\u6f15<\u6ef9<\u6f2f<\u6f36<\u6f4b<\u6f74<\u6f2a"
-                 + "<\u6f09<\u6f29<\u6f89<\u6f8d<\u6f8c<\u6f78<\u6f72"
-                 + "<\u6f7c<\u6f7a<\u6fd1<\u6fc9<\u6fa7<\u6fb9<\u6fb6"
-                 + "<\u6fc2<\u6fe1<\u6fee<\u6fde<\u6fe0<\u6fef<\u701a"
-                 + "<\u7023<\u701b<\u7039<\u7035<\u704f<\u705e<\u5b80"
-                 + "<\u5b84<\u5b95<\u5b93<\u5ba5<\u5bb8<\u752f<\u9a9e"
-                 + "<\u6434<\u5be4<\u5bee<\u8930<\u5bf0<\u8e47<\u8b07"
-                 + "<\u8fb6<\u8fd3<\u8fd5<\u8fe5<\u8fee<\u8fe4<\u8fe9"
-                 + "<\u8fe6<\u8ff3<\u8fe8<\u9005<\u9004<\u900b<\u9026"
-                 + "<\u9011<\u900d<\u9016<\u9021<\u9035<\u9036<\u902d"
-                 + "<\u902f<\u9044<\u9051<\u9052<\u9050<\u9068<\u9058"
-                 + "<\u9062<\u905b<\u66b9<\u9074<\u907d<\u9082<\u9088"
-                 + "<\u9083<\u908b<\u5f50<\u5f57<\u5f56<\u5f58<\u5c3b"
-                 + "<\u54ab<\u5c50<\u5c59<\u5b71<\u5c63<\u5c66<\u7fbc"
-                 + "<\u5f2a<\u5f29<\u5f2d<\u8274<\u5f3c<\u9b3b<\u5c6e"
-                 + "<\u5981<\u5983<\u598d<\u59a9<\u59aa<\u59a3<\u5997"
-                 + "<\u59ca<\u59ab<\u599e<\u59a4<\u59d2<\u59b2<\u59af"
-                 + "<\u59d7<\u59be<\u5a05<\u5a06<\u59dd<\u5a08<\u59e3"
-                 + "<\u59d8<\u59f9<\u5a0c<\u5a09<\u5a32<\u5a34<\u5a11"
-                 + "<\u5a23<\u5a13<\u5a40<\u5a67<\u5a4a<\u5a55<\u5a3c"
-                 + "<\u5a62<\u5a75<\u80ec<\u5aaa<\u5a9b<\u5a77<\u5a7a"
-                 + "<\u5abe<\u5aeb<\u5ab2<\u5ad2<\u5ad4<\u5ab8<\u5ae0"
-                 + "<\u5ae3<\u5af1<\u5ad6<\u5ae6<\u5ad8<\u5adc<\u5b09"
-                 + "<\u5b17<\u5b16<\u5b32<\u5b37<\u5b40<\u5c15<\u5c1c"
-                 + "<\u5b5a<\u5b65<\u5b73<\u5b51<\u5b53<\u5b62<\u9a75"
-                 + "<\u9a77<\u9a78<\u9a7a<\u9a7f<\u9a7d<\u9a80<\u9a81"
-                 + "<\u9a85<\u9a88<\u9a8a<\u9a90<\u9a92<\u9a93<\u9a96"
-                 + "<\u9a98<\u9a9b<\u9a9c<\u9a9d<\u9a9f<\u9aa0<\u9aa2"
-                 + "<\u9aa3<\u9aa5<\u9aa7<\u7e9f<\u7ea1<\u7ea3<\u7ea5"
-                 + "<\u7ea8<\u7ea9<\u7ead<\u7eb0<\u7ebe<\u7ec0<\u7ec1"
-                 + "<\u7ec2<\u7ec9<\u7ecb<\u7ecc<\u7ed0<\u7ed4<\u7ed7"
-                 + "<\u7edb<\u7ee0<\u7ee1<\u7ee8<\u7eeb<\u7eee<\u7eef"
-                 + "<\u7ef1<\u7ef2<\u7f0d<\u7ef6<\u7efa<\u7efb<\u7efe"
-                 + "<\u7f01<\u7f02<\u7f03<\u7f07<\u7f08<\u7f0b<\u7f0c"
-                 + "<\u7f0f<\u7f11<\u7f12<\u7f17<\u7f19<\u7f1c<\u7f1b"
-                 + "<\u7f1f<\u7f21<\u7f22<\u7f23<\u7f24<\u7f25<\u7f26"
-                 + "<\u7f27<\u7f2a<\u7f2b<\u7f2c<\u7f2d<\u7f2f<\u7f30"
-                 + "<\u7f31<\u7f32<\u7f33<\u7f35<\u5e7a<\u757f<\u5ddb"
-                 + "<\u753e<\u9095<\u738e<\u7391<\u73ae<\u73a2<\u739f"
-                 + "<\u73cf<\u73c2<\u73d1<\u73b7<\u73b3<\u73c0<\u73c9"
-                 + "<\u73c8<\u73e5<\u73d9<\u987c<\u740a<\u73e9<\u73e7"
-                 + "<\u73de<\u73ba<\u73f2<\u740f<\u742a<\u745b<\u7426"
-                 + "<\u7425<\u7428<\u7430<\u742e<\u742c<\u741b<\u741a"
-                 + "<\u7441<\u745c<\u7457<\u7455<\u7459<\u7477<\u746d"
-                 + "<\u747e<\u749c<\u748e<\u7480<\u7481<\u7487<\u748b"
-                 + "<\u749e<\u74a8<\u74a9<\u7490<\u74a7<\u74d2<\u74ba"
-                 + "<\u97ea<\u97eb<\u97ec<\u674c<\u6753<\u675e<\u6748"
-                 + "<\u6769<\u67a5<\u6787<\u676a<\u6773<\u6798<\u67a7"
-                 + "<\u6775<\u67a8<\u679e<\u67ad<\u678b<\u6777<\u677c"
-                 + "<\u67f0<\u6809<\u67d8<\u680a<\u67e9<\u67b0<\u680c"
-                 + "<\u67d9<\u67b5<\u67da<\u67b3<\u67dd<\u6800<\u67c3"
-                 + "<\u67b8<\u67e2<\u680e<\u67c1<\u67fd<\u6832<\u6833"
-                 + "<\u6860<\u6861<\u684e<\u6862<\u6844<\u6864<\u6883"
-                 + "<\u681d<\u6855<\u6866<\u6841<\u6867<\u6840<\u683e"
-                 + "<\u684a<\u6849<\u6829<\u68b5<\u688f<\u6874<\u6877"
-                 + "<\u6893<\u686b<\u68c2<\u696e<\u68fc<\u691f<\u6920"
-                 + "<\u68f9<\u6924<\u68f0<\u690b<\u6901<\u6957<\u68e3"
-                 + "<\u6910<\u6971<\u6939<\u6960<\u6942<\u695d<\u6984"
-                 + "<\u696b<\u6980<\u6998<\u6978<\u6934<\u69cc<\u6987"
-                 + "<\u6988<\u69ce<\u6989<\u6966<\u6963<\u6979<\u699b"
-                 + "<\u69a7<\u69bb<\u69ab<\u69ad<\u69d4<\u69b1<\u69c1"
-                 + "<\u69ca<\u69df<\u6995<\u69e0<\u698d<\u69ff<\u6a2f"
-                 + "<\u69ed<\u6a17<\u6a18<\u6a65<\u69f2<\u6a44<\u6a3e"
-                 + "<\u6aa0<\u6a50<\u6a5b<\u6a35<\u6a8e<\u6a79<\u6a3d"
-                 + "<\u6a28<\u6a58<\u6a7c<\u6a91<\u6a90<\u6aa9<\u6a97"
-                 + "<\u6aab<\u7337<\u7352<\u6b81<\u6b82<\u6b87<\u6b84"
-                 + "<\u6b92<\u6b93<\u6b8d<\u6b9a<\u6b9b<\u6ba1<\u6baa"
-                 + "<\u8f6b<\u8f6d<\u8f71<\u8f72<\u8f73<\u8f75<\u8f76"
-                 + "<\u8f78<\u8f77<\u8f79<\u8f7a<\u8f7c<\u8f7e<\u8f81"
-                 + "<\u8f82<\u8f84<\u8f87<\u8f8b<\u8f8d<\u8f8e<\u8f8f"
-                 + "<\u8f98<\u8f9a<\u8ece<\u620b<\u6217<\u621b<\u621f"
-                 + "<\u6222<\u6221<\u6225<\u6224<\u622c<\u81e7<\u74ef"
-                 + "<\u74f4<\u74ff<\u750f<\u7511<\u7513<\u6534<\u65ee"
-                 + "<\u65ef<\u65f0<\u660a<\u6619<\u6772<\u6603<\u6615"
-                 + "<\u6600<\u7085<\u66f7<\u661d<\u6634<\u6631<\u6636"
-                 + "<\u6635<\u8006<\u665f<\u6654<\u6641<\u664f<\u6656"
-                 + "<\u6661<\u6657<\u6677<\u6684<\u668c<\u66a7<\u669d"
-                 + "<\u66be<\u66db<\u66dc<\u66e6<\u66e9<\u8d32<\u8d33"
-                 + "<\u8d36<\u8d3b<\u8d3d<\u8d40<\u8d45<\u8d46<\u8d48"
-                 + "<\u8d49<\u8d47<\u8d4d<\u8d55<\u8d59<\u89c7<\u89ca"
-                 + "<\u89cb<\u89cc<\u89ce<\u89cf<\u89d0<\u89d1<\u726e"
-                 + "<\u729f<\u725d<\u7266<\u726f<\u727e<\u727f<\u7284"
-                 + "<\u728b<\u728d<\u728f<\u7292<\u6308<\u6332<\u63b0"
-                 + "<\u643f<\u64d8<\u8004<\u6bea<\u6bf3<\u6bfd<\u6bf5"
-                 + "<\u6bf9<\u6c05<\u6c07<\u6c06<\u6c0d<\u6c15<\u6c18"
-                 + "<\u6c19<\u6c1a<\u6c21<\u6c29<\u6c24<\u6c2a<\u6c32"
-                 + "<\u6535<\u6555<\u656b<\u724d<\u7252<\u7256<\u7230"
-                 + "<\u8662<\u5216<\u809f<\u809c<\u8093<\u80bc<\u670a"
-                 + "<\u80bd<\u80b1<\u80ab<\u80ad<\u80b4<\u80b7<\u80e7"
-                 + "<\u80e8<\u80e9<\u80ea<\u80db<\u80c2<\u80c4<\u80d9"
-                 + "<\u80cd<\u80d7<\u6710<\u80dd<\u80eb<\u80f1<\u80f4"
-                 + "<\u80ed<\u810d<\u810e<\u80f2<\u80fc<\u6715<\u8112"
-                 + "<\u8c5a<\u8136<\u811e<\u812c<\u8118<\u8132<\u8148"
-                 + "<\u814c<\u8153<\u8174<\u8159<\u815a<\u8171<\u8160"
-                 + "<\u8169<\u817c<\u817d<\u816d<\u8167<\u584d<\u5ab5"
-                 + "<\u8188<\u8182<\u8191<\u6ed5<\u81a3<\u81aa<\u81cc"
-                 + "<\u6726<\u81ca<\u81bb<\u81c1<\u81a6<\u6b24<\u6b37"
-                 + "<\u6b39<\u6b43<\u6b46<\u6b59<\u98d1<\u98d2<\u98d3"
-                 + "<\u98d5<\u98d9<\u98da<\u6bb3<\u5f40<\u6bc2<\u89f3"
-                 + "<\u6590<\u9f51<\u6593<\u65bc<\u65c6<\u65c4<\u65c3"
-                 + "<\u65cc<\u65ce<\u65d2<\u65d6<\u7080<\u709c<\u7096"
-                 + "<\u709d<\u70bb<\u70c0<\u70b7<\u70ab<\u70b1<\u70e8"
-                 + "<\u70ca<\u7110<\u7113<\u7116<\u712f<\u7131<\u7173"
-                 + "<\u715c<\u7168<\u7145<\u7172<\u714a<\u7178<\u717a"
-                 + "<\u7198<\u71b3<\u71b5<\u71a8<\u71a0<\u71e0<\u71d4"
-                 + "<\u71e7<\u71f9<\u721d<\u7228<\u706c<\u7118<\u7166"
-                 + "<\u71b9<\u623e<\u623d<\u6243<\u6248<\u6249<\u793b"
-                 + "<\u7940<\u7946<\u7949<\u795b<\u795c<\u7953<\u795a"
-                 + "<\u7962<\u7957<\u7960<\u796f<\u7967<\u797a<\u7985"
-                 + "<\u798a<\u799a<\u79a7<\u79b3<\u5fd1<\u5fd0<\u603c"
-                 + "<\u605d<\u605a<\u6067<\u6041<\u6059<\u6063<\u60ab"
-                 + "<\u6106<\u610d<\u615d<\u61a9<\u619d<\u61cb<\u61d1"
-                 + "<\u6206<\u8080<\u807f<\u6c93<\u6cf6<\u6dfc<\u77f6"
-                 + "<\u77f8<\u7800<\u7809<\u7817<\u7818<\u7811<\u65ab"
-                 + "<\u782d<\u781c<\u781d<\u7839<\u783a<\u783b<\u781f"
-                 + "<\u783c<\u7825<\u782c<\u7823<\u7829<\u784e<\u786d"
-                 + "<\u7856<\u7857<\u7826<\u7850<\u7847<\u784c<\u786a"
-                 + "<\u789b<\u7893<\u789a<\u7887<\u789c<\u78a1<\u78a3"
-                 + "<\u78b2<\u78b9<\u78a5<\u78d4<\u78d9<\u78c9<\u78ec"
-                 + "<\u78f2<\u7905<\u78f4<\u7913<\u7924<\u791e<\u7934"
-                 + "<\u9f9b<\u9ef9<\u9efb<\u9efc<\u76f1<\u7704<\u770d"
-                 + "<\u76f9<\u7707<\u7708<\u771a<\u7722<\u7719<\u772d"
-                 + "<\u7726<\u7735<\u7738<\u7750<\u7751<\u7747<\u7743"
-                 + "<\u775a<\u7768<\u7762<\u7765<\u777f<\u778d<\u777d"
-                 + "<\u7780<\u778c<\u7791<\u779f<\u77a0<\u77b0<\u77b5"
-                 + "<\u77bd<\u753a<\u7540<\u754e<\u754b<\u7548<\u755b"
-                 + "<\u7572<\u7579<\u7583<\u7f58<\u7f61<\u7f5f<\u8a48"
-                 + "<\u7f68<\u7f74<\u7f71<\u7f79<\u7f81<\u7f7e<\u76cd"
-                 + "<\u76e5<\u8832<\u9485<\u9486<\u9487<\u948b<\u948a"
-                 + "<\u948c<\u948d<\u948f<\u9490<\u9494<\u9497<\u9495"
-                 + "<\u949a<\u949b<\u949c<\u94a3<\u94a4<\u94ab<\u94aa"
-                 + "<\u94ad<\u94ac<\u94af<\u94b0<\u94b2<\u94b4<\u94b6"
-                 + "<\u94b7<\u94b8<\u94b9<\u94ba<\u94bc<\u94bd<\u94bf"
-                 + "<\u94c4<\u94c8<\u94c9<\u94ca<\u94cb<\u94cc<\u94cd"
-                 + "<\u94ce<\u94d0<\u94d1<\u94d2<\u94d5<\u94d6<\u94d7"
-                 + "<\u94d9<\u94d8<\u94db<\u94de<\u94df<\u94e0<\u94e2"
-                 + "<\u94e4<\u94e5<\u94e7<\u94e8<\u94ea<\u94e9<\u94eb"
-                 + "<\u94ee<\u94ef<\u94f3<\u94f4<\u94f5<\u94f7<\u94f9"
-                 + "<\u94fc<\u94fd<\u94ff<\u9503<\u9502<\u9506<\u9507"
-                 + "<\u9509<\u950a<\u950d<\u950e<\u950f<\u9512<\u9513"
-                 + "<\u9514<\u9515<\u9516<\u9518<\u951b<\u951d<\u951e"
-                 + "<\u951f<\u9522<\u952a<\u952b<\u9529<\u952c<\u9531"
-                 + "<\u9532<\u9534<\u9536<\u9537<\u9538<\u953c<\u953e"
-                 + "<\u953f<\u9542<\u9535<\u9544<\u9545<\u9546<\u9549"
-                 + "<\u954c<\u954e<\u954f<\u9552<\u9553<\u9554<\u9556"
-                 + "<\u9557<\u9558<\u9559<\u955b<\u955e<\u955f<\u955d"
-                 + "<\u9561<\u9562<\u9564<\u9565<\u9566<\u9567<\u9568"
-                 + "<\u9569<\u956a<\u956b<\u956c<\u956f<\u9571<\u9572"
-                 + "<\u9573<\u953a<\u77e7<\u77ec<\u96c9<\u79d5<\u79ed"
-                 + "<\u79e3<\u79eb<\u7a06<\u5d47<\u7a03<\u7a02<\u7a1e"
-                 + "<\u7a14<\u7a39<\u7a37<\u7a51<\u9ecf<\u99a5<\u7a70"
-                 + "<\u7688<\u768e<\u7693<\u7699<\u76a4<\u74de<\u74e0"
-                 + "<\u752c<\u9e20<\u9e22<\u9e28<\u9e29<\u9e2a<\u9e2b"
-                 + "<\u9e2c<\u9e32<\u9e31<\u9e36<\u9e38<\u9e37<\u9e39"
-                 + "<\u9e3a<\u9e3e<\u9e41<\u9e42<\u9e44<\u9e46<\u9e47"
-                 + "<\u9e48<\u9e49<\u9e4b<\u9e4c<\u9e4e<\u9e51<\u9e55"
-                 + "<\u9e57<\u9e5a<\u9e5b<\u9e5c<\u9e5e<\u9e63<\u9e66"
-                 + "<\u9e67<\u9e68<\u9e69<\u9e6a<\u9e6b<\u9e6c<\u9e71"
-                 + "<\u9e6d<\u9e73<\u7592<\u7594<\u7596<\u75a0<\u759d"
-                 + "<\u75ac<\u75a3<\u75b3<\u75b4<\u75b8<\u75c4<\u75b1"
-                 + "<\u75b0<\u75c3<\u75c2<\u75d6<\u75cd<\u75e3<\u75e8"
-                 + "<\u75e6<\u75e4<\u75eb<\u75e7<\u7603<\u75f1<\u75fc"
-                 + "<\u75ff<\u7610<\u7600<\u7605<\u760c<\u7617<\u760a"
-                 + "<\u7625<\u7618<\u7615<\u7619<\u761b<\u763c<\u7622"
-                 + "<\u7620<\u7640<\u762d<\u7630<\u763f<\u7635<\u7643"
-                 + "<\u763e<\u7633<\u764d<\u765e<\u7654<\u765c<\u7656"
-                 + "<\u766b<\u766f<\u7fca<\u7ae6<\u7a78<\u7a79<\u7a80"
-                 + "<\u7a86<\u7a88<\u7a95<\u7aa6<\u7aa0<\u7aac<\u7aa8"
-                 + "<\u7aad<\u7ab3<\u8864<\u8869<\u8872<\u887d<\u887f"
-                 + "<\u8882<\u88a2<\u88c6<\u88b7<\u88bc<\u88c9<\u88e2"
-                 + "<\u88ce<\u88e3<\u88e5<\u88f1<\u891a<\u88fc<\u88e8"
-                 + "<\u88fe<\u88f0<\u8921<\u8919<\u8913<\u891b<\u890a"
-                 + "<\u8934<\u892b<\u8936<\u8941<\u8966<\u897b<\u758b"
-                 + "<\u80e5<\u76b2<\u76b4<\u77dc<\u8012<\u8014<\u8016"
-                 + "<\u801c<\u8020<\u8022<\u8025<\u8026<\u8027<\u8029"
-                 + "<\u8028<\u8031<\u800b<\u8035<\u8043<\u8046<\u804d"
-                 + "<\u8052<\u8069<\u8071<\u8983<\u9878<\u9880<\u9883"
-                 + "<\u9889<\u988c<\u988d<\u988f<\u9894<\u989a<\u989b"
-                 + "<\u989e<\u989f<\u98a1<\u98a2<\u98a5<\u98a6<\u864d"
-                 + "<\u8654<\u866c<\u866e<\u867f<\u867a<\u867c<\u867b"
-                 + "<\u86a8<\u868d<\u868b<\u86ac<\u869d<\u86a7<\u86a3"
-                 + "<\u86aa<\u8693<\u86a9<\u86b6<\u86c4<\u86b5<\u86ce"
-                 + "<\u86b0<\u86ba<\u86b1<\u86af<\u86c9<\u86cf<\u86b4"
-                 + "<\u86e9<\u86f1<\u86f2<\u86ed<\u86f3<\u86d0<\u8713"
-                 + "<\u86de<\u86f4<\u86df<\u86d8<\u86d1<\u8703<\u8707"
-                 + "<\u86f8<\u8708<\u870a<\u870d<\u8709<\u8723<\u873b"
-                 + "<\u871e<\u8725<\u872e<\u871a<\u873e<\u8748<\u8734"
-                 + "<\u8731<\u8729<\u8737<\u873f<\u8782<\u8722<\u877d"
-                 + "<\u877e<\u877b<\u8760<\u8770<\u874c<\u876e<\u878b"
-                 + "<\u8753<\u8763<\u877c<\u8764<\u8759<\u8765<\u8793"
-                 + "<\u87af<\u87a8<\u87d2<\u87c6<\u8788<\u8785<\u87ad"
-                 + "<\u8797<\u8783<\u87ab<\u87e5<\u87ac<\u87b5<\u87b3"
-                 + "<\u87cb<\u87d3<\u87bd<\u87d1<\u87c0<\u87ca<\u87db"
-                 + "<\u87ea<\u87e0<\u87ee<\u8816<\u8813<\u87fe<\u880a"
-                 + "<\u881b<\u8821<\u8839<\u883c<\u7f36<\u7f42<\u7f44"
-                 + "<\u7f45<\u8210<\u7afa<\u7afd<\u7b08<\u7b03<\u7b04"
-                 + "<\u7b15<\u7b0a<\u7b2b<\u7b0f<\u7b47<\u7b38<\u7b2a"
-                 + "<\u7b19<\u7b2e<\u7b31<\u7b20<\u7b25<\u7b24<\u7b33"
-                 + "<\u7b3e<\u7b1e<\u7b58<\u7b5a<\u7b45<\u7b75<\u7b4c"
-                 + "<\u7b5d<\u7b60<\u7b6e<\u7b7b<\u7b62<\u7b72<\u7b71"
-                 + "<\u7b90<\u7ba6<\u7ba7<\u7bb8<\u7bac<\u7b9d<\u7ba8"
-                 + "<\u7b85<\u7baa<\u7b9c<\u7ba2<\u7bab<\u7bb4<\u7bd1"
-                 + "<\u7bc1<\u7bcc<\u7bdd<\u7bda<\u7be5<\u7be6<\u7bea"
-                 + "<\u7c0c<\u7bfe<\u7bfc<\u7c0f<\u7c16<\u7c0b<\u7c1f"
-                 + "<\u7c2a<\u7c26<\u7c38<\u7c41<\u7c40<\u81fe<\u8201"
-                 + "<\u8202<\u8204<\u81ec<\u8844<\u8221<\u8222<\u8223"
-                 + "<\u822d<\u822f<\u8228<\u822b<\u8238<\u823b<\u8233"
-                 + "<\u8234<\u823e<\u8244<\u8249<\u824b<\u824f<\u825a"
-                 + "<\u825f<\u8268<\u887e<\u8885<\u8888<\u88d8<\u88df"
-                 + "<\u895e<\u7f9d<\u7f9f<\u7fa7<\u7faf<\u7fb0<\u7fb2"
-                 + "<\u7c7c<\u6549<\u7c91<\u7c9d<\u7c9c<\u7c9e<\u7ca2"
-                 + "<\u7cb2<\u7cbc<\u7cbd<\u7cc1<\u7cc7<\u7ccc<\u7ccd"
-                 + "<\u7cc8<\u7cc5<\u7cd7<\u7ce8<\u826e<\u66a8<\u7fbf"
-                 + "<\u7fce<\u7fd5<\u7fe5<\u7fe1<\u7fe6<\u7fe9<\u7fee"
-                 + "<\u7ff3<\u7cf8<\u7d77<\u7da6<\u7dae<\u7e47<\u7e9b"
-                 + "<\u9eb8<\u9eb4<\u8d73<\u8d84<\u8d94<\u8d91<\u8db1"
-                 + "<\u8d67<\u8d6d<\u8c47<\u8c49<\u914a<\u9150<\u914e"
-                 + "<\u914f<\u9164<\u9162<\u9161<\u9170<\u9169<\u916f"
-                 + "<\u917d<\u917e<\u9172<\u9174<\u9179<\u918c<\u9185"
-                 + "<\u9190<\u918d<\u9191<\u91a2<\u91a3<\u91aa<\u91ad"
-                 + "<\u91ae<\u91af<\u91b5<\u91b4<\u91ba<\u8c55<\u9e7e"
-                 + "<\u8db8<\u8deb<\u8e05<\u8e59<\u8e69<\u8db5<\u8dbf"
-                 + "<\u8dbc<\u8dba<\u8dc4<\u8dd6<\u8dd7<\u8dda<\u8dde"
-                 + "<\u8dce<\u8dcf<\u8ddb<\u8dc6<\u8dec<\u8df7<\u8df8"
-                 + "<\u8de3<\u8df9<\u8dfb<\u8de4<\u8e09<\u8dfd<\u8e14"
-                 + "<\u8e1d<\u8e1f<\u8e2c<\u8e2e<\u8e23<\u8e2f<\u8e3a"
-                 + "<\u8e40<\u8e39<\u8e35<\u8e3d<\u8e31<\u8e49<\u8e41"
-                 + "<\u8e42<\u8e51<\u8e52<\u8e4a<\u8e70<\u8e76<\u8e7c"
-                 + "<\u8e6f<\u8e74<\u8e85<\u8e8f<\u8e94<\u8e90<\u8e9c"
-                 + "<\u8e9e<\u8c78<\u8c82<\u8c8a<\u8c85<\u8c98<\u8c94"
-                 + "<\u659b<\u89d6<\u89de<\u89da<\u89dc<\u89e5<\u89eb"
-                 + "<\u89ef<\u8a3e<\u8b26<\u9753<\u96e9<\u96f3<\u96ef"
-                 + "<\u9706<\u9701<\u9708<\u970f<\u970e<\u972a<\u972d"
-                 + "<\u9730<\u973e<\u9f80<\u9f83<\u9f85<\u9f86<\u9f87"
-                 + "<\u9f88<\u9f89<\u9f8a<\u9f8c<\u9efe<\u9f0b<\u9f0d"
-                 + "<\u96b9<\u96bc<\u96bd<\u96ce<\u96d2<\u77bf<\u96e0"
-                 + "<\u928e<\u92ae<\u92c8<\u933e<\u936a<\u93ca<\u938f"
-                 + "<\u943e<\u946b<\u9c7f<\u9c82<\u9c85<\u9c86<\u9c87"
-                 + "<\u9c88<\u7a23<\u9c8b<\u9c8e<\u9c90<\u9c91<\u9c92"
-                 + "<\u9c94<\u9c95<\u9c9a<\u9c9b<\u9c9e<\u9c9f<\u9ca0"
-                 + "<\u9ca1<\u9ca2<\u9ca3<\u9ca5<\u9ca6<\u9ca7<\u9ca8"
-                 + "<\u9ca9<\u9cab<\u9cad<\u9cae<\u9cb0<\u9cb1<\u9cb2"
-                 + "<\u9cb3<\u9cb4<\u9cb5<\u9cb6<\u9cb7<\u9cba<\u9cbb"
-                 + "<\u9cbc<\u9cbd<\u9cc4<\u9cc5<\u9cc6<\u9cc7<\u9cca"
-                 + "<\u9ccb<\u9ccc<\u9ccd<\u9cce<\u9ccf<\u9cd0<\u9cd3"
-                 + "<\u9cd4<\u9cd5<\u9cd7<\u9cd8<\u9cd9<\u9cdc<\u9cdd"
-                 + "<\u9cdf<\u9ce2<\u977c<\u9785<\u9791<\u9792<\u9794"
-                 + "<\u97af<\u97ab<\u97a3<\u97b2<\u97b4<\u9ab1<\u9ab0"
-                 + "<\u9ab7<\u9e58<\u9ab6<\u9aba<\u9abc<\u9ac1<\u9ac0"
-                 + "<\u9ac5<\u9ac2<\u9acb<\u9acc<\u9ad1<\u9b45<\u9b43"
-                 + "<\u9b47<\u9b49<\u9b48<\u9b4d<\u9b51<\u98e8<\u990d"
-                 + "<\u992e<\u9955<\u9954<\u9adf<\u9ae1<\u9ae6<\u9aef"
-                 + "<\u9aeb<\u9afb<\u9aed<\u9af9<\u9b08<\u9b0f<\u9b13"
-                 + "<\u9b1f<\u9b23<\u9ebd<\u9ebe<\u7e3b<\u9e82<\u9e87"
-                 + "<\u9e88<\u9e8b<\u9e92<\u93d6<\u9e9d<\u9e9f<\u9edb"
-                 + "<\u9edc<\u9edd<\u9ee0<\u9edf<\u9ee2<\u9ee9<\u9ee7"
-                 + "<\u9ee5<\u9eea<\u9eef<\u9f22<\u9f2c<\u9f2f<\u9f39"
-                 + "<\u9f37<\u9f3d<\u9f3e<\u9f44"
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_zh_HK.java b/ojluni/src/main/java/sun/text/resources/CollationData_zh_HK.java
deleted file mode 100755
index 8366589..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_zh_HK.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.Locale;
-import java.util.ResourceBundle;
-import sun.util.EmptyListResourceBundle;
-import sun.util.resources.LocaleData;
-
-public class CollationData_zh_HK extends EmptyListResourceBundle {
-
-    // reparent to zh_TW for traditional Chinese collation sequence
-    public CollationData_zh_HK() {
-        ResourceBundle bundle = LocaleData.getCollationData(Locale.TAIWAN);
-        setParent(bundle);
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/CollationData_zh_TW.java b/ojluni/src/main/java/sun/text/resources/CollationData_zh_TW.java
deleted file mode 100755
index 93a0c50..0000000
--- a/ojluni/src/main/java/sun/text/resources/CollationData_zh_TW.java
+++ /dev/null
@@ -1,2017 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class CollationData_zh_TW extends ListResourceBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Rule",
-                // BIG 5
-                  " & Z "
-                + "<\u3000<\uff0c<\u3001<\u3002<\uff0e<\u2022<\uff1b"
-                + "<\uff1a<\uff1f<\uff01<\ufe30<\u2026<\u2025<\ufe50"
-                + "<\uff64<\ufe52<\u00b7<\ufe54<\ufe55<\ufe56<\ufe57"
-                + "<\uff5c<\u2013<\ufe31<\u2014<\ufe33<\ufe34"
-                + "<\ufe4f<\uff08<\uff09<\ufe35<\ufe36<\uff5b<\uff5d"
-                + "<\ufe37<\ufe38<\u3014<\u3015<\ufe39<\ufe3a<\u3010"
-                + "<\u3011<\ufe3b<\ufe3c<\u300a<\u300b<\ufe3d<\ufe3e"
-                + "<\u3008<\u3009<\ufe3f<\ufe40<\u300c<\u300d<\ufe41"
-                + "<\ufe42<\u300e<\u300f<\ufe43<\ufe44<\ufe59<\ufe5a"
-                + "<\ufe5b<\ufe5c<\ufe5d<\ufe5e<\u2018<\u2019<\u201c"
-                + "<\u201d<\u301d<\u301e<\u2035<\u2032<\uff03<\uff06"
-                + "<\uff0a<\u203b<\u00a7<\u3003<\u25cb<\u25cf<\u25b3"
-                + "<\u25b2<\u25ce<\u2606<\u2605<\u25c7<\u25c6<\u25a1"
-                + "<\u25a0<\u25bd<\u25bc<\u32a3<\u2105<\u203e"
-                + "<\uff3f<\ufe49<\ufe4a<\ufe4d<\ufe4e<\ufe4b"
-                + "<\ufe4c<\ufe5f<\ufe60<\ufe61<\uff0b<\uff0d<\u00d7"
-                + "<\u00f7<\u00b1<\u221a<\uff1c<\uff1e<\uff1d<\u2266"
-                + "<\u2267<\u2260<\u221e<\u2252<\u2261<\ufe62<\ufe63"
-                + "<\ufe64<\ufe65<\ufe66<\u223c<\u2229<\u222a<\u22a5"
-                + "<\u2220<\u221f<\u22bf<\u33d2<\u33d1<\u222b<\u222e"
-                + "<\u2235<\u2234<\u2640<\u2642<\u2641<\u2609<\u2191"
-                + "<\u2193<\u2190<\u2192<\u2196<\u2197<\u2199<\u2198"
-                + "<\u2225<\u2223<\uff0f<\uff3c<\uff04"
-                + "<\u00a5<\u3012<\u00a2<\u00a3<\uff05<\uff20<\u2103"
-                + "<\u2109<\ufe69<\ufe6a<\ufe6b<\u33d5<\u339c<\u339d"
-                + "<\u339e<\u33ce<\u33a1<\u338e<\u338f<\u33c4<\u00b0"
-                + "<\u5159<\u515b<\u515e<\u515d<\u5161<\u5163<\u55e7"
-                + "<\u74e9<\u7cce<\u2581<\u2582<\u2583<\u2584<\u2585"
-                + "<\u2586<\u2587<\u2588<\u258f<\u258e<\u258d<\u258c"
-                + "<\u258b<\u258a<\u2589<\u253c<\u2534<\u252c<\u2524"
-                + "<\u251c<\u2594<\u2500<\u2502<\u2595<\u250c<\u2510"
-                + "<\u2514<\u2518<\u256d<\u256e<\u2570<\u256f<\u2550"
-                + "<\u255e<\u256a<\u2561<\u25e2<\u25e3<\u25e5<\u25e4"
-                + "<\u2571<\u2572<\u2573<\uff10<\uff11<\uff12<\uff13"
-                + "<\uff14<\uff15<\uff16<\uff17<\uff18<\uff19<\u2160"
-                + "<\u2161<\u2162<\u2163<\u2164<\u2165<\u2166<\u2167"
-                + "<\u2168<\u2169<\u3021<\u3022<\u3023<\u3024<\u3025"
-                + "<\u3026<\u3027<\u3028<\u3029<\u5344"
-                + "<\uff21<\uff22<\uff23<\uff24<\uff25<\uff26<\uff27"
-                + "<\uff28<\uff29<\uff2a<\uff2b<\uff2c<\uff2d<\uff2e"
-                + "<\uff2f<\uff30<\uff31<\uff32<\uff33<\uff34<\uff35"
-                + "<\uff36<\uff37<\uff38<\uff39<\uff3a<\uff41<\uff42"
-                + "<\uff43<\uff44<\uff45<\uff46<\uff47<\uff48<\uff49"
-                + "<\uff4a<\uff4b<\uff4c<\uff4d<\uff4e<\uff4f<\uff50"
-                + "<\uff51<\uff52<\uff53<\uff54<\uff55<\uff56<\uff57"
-                + "<\uff58<\uff59<\uff5a<\u0391<\u0392<\u0393<\u0394"
-                + "<\u0395<\u0396<\u0397<\u0398<\u0399<\u039a<\u039b"
-                + "<\u039c<\u039d<\u039e<\u039f<\u03a0<\u03a1<\u03a3"
-                + "<\u03a4<\u03a5<\u03a6<\u03a7<\u03a8<\u03a9<\u03b1"
-                + "<\u03b2<\u03b3<\u03b4<\u03b5<\u03b6<\u03b7<\u03b8"
-                + "<\u03b9<\u03ba<\u03bb<\u03bc<\u03bd<\u03be<\u03bf"
-                + "<\u03c0<\u03c1<\u03c3<\u03c4<\u03c5<\u03c6<\u03c7"
-                + "<\u03c8<\u03c9<\u3105<\u3106<\u3107<\u3108<\u3109"
-                + "<\u310a<\u310b<\u310c<\u310d<\u310e<\u310f<\u3110"
-                + "<\u3111<\u3112<\u3113<\u3114<\u3115<\u3116<\u3117"
-                + "<\u3118<\u3119<\u311a<\u311b<\u311c<\u311d<\u311e"
-                + "<\u311f<\u3120<\u3121<\u3122<\u3123<\u3124<\u3125"
-                + "<\u3126<\u3127<\u3128<\u3129<\u02d9<\u02c9<\u02ca"
-                + "<\u02c7<\u02cb<\u4e00<\u4e59<\u4e01<\u4e03<\u4e43"
-                + "<\u4e5d<\u4e86<\u4e8c<\u4eba<\u513f<\u5165<\u516b"
-                + "<\u51e0<\u5200<\u5201<\u529b<\u5315<\u5341<\u535c"
-                + "<\u53c8<\u4e09<\u4e0b<\u4e08<\u4e0a<\u4e2b<\u4e38"
-                + "<\u51e1<\u4e45<\u4e48<\u4e5f<\u4e5e<\u4e8e<\u4ea1"
-                + "<\u5140<\u5203<\u52fa<\u5343<\u53c9<\u53e3<\u571f"
-                + "<\u58eb<\u5915<\u5927<\u5973<\u5b50<\u5b51<\u5b53"
-                + "<\u5bf8<\u5c0f<\u5c22<\u5c38<\u5c71<\u5ddd<\u5de5"
-                + "<\u5df1<\u5df2<\u5df3<\u5dfe<\u5e72<\u5efe<\u5f0b"
-                + "<\u5f13<\u624d<\u4e11<\u4e10<\u4e0d<\u4e2d<\u4e30"
-                + "<\u4e39<\u4e4b<\u5c39<\u4e88<\u4e91<\u4e95<\u4e92"
-                + "<\u4e94<\u4ea2<\u4ec1<\u4ec0<\u4ec3<\u4ec6<\u4ec7"
-                + "<\u4ecd<\u4eca<\u4ecb<\u4ec4<\u5143<\u5141<\u5167"
-                + "<\u516d<\u516e<\u516c<\u5197<\u51f6<\u5206<\u5207"
-                + "<\u5208<\u52fb<\u52fe<\u52ff<\u5316<\u5339<\u5348"
-                + "<\u5347<\u5345<\u535e<\u5384<\u53cb<\u53ca<\u53cd"
-                + "<\u58ec<\u5929<\u592b<\u592a<\u592d<\u5b54<\u5c11"
-                + "<\u5c24<\u5c3a<\u5c6f<\u5df4<\u5e7b<\u5eff<\u5f14"
-                + "<\u5f15<\u5fc3<\u6208<\u6236<\u624b<\u624e<\u652f"
-                + "<\u6587<\u6597<\u65a4<\u65b9<\u65e5<\u66f0<\u6708"
-                + "<\u6728<\u6b20<\u6b62<\u6b79<\u6bcb<\u6bd4<\u6bdb"
-                + "<\u6c0f<\u6c34<\u706b<\u722a<\u7236<\u723b<\u7247"
-                + "<\u7259<\u725b<\u72ac<\u738b<\u4e19<\u4e16<\u4e15"
-                + "<\u4e14<\u4e18<\u4e3b<\u4e4d<\u4e4f<\u4e4e<\u4ee5"
-                + "<\u4ed8<\u4ed4<\u4ed5<\u4ed6<\u4ed7<\u4ee3<\u4ee4"
-                + "<\u4ed9<\u4ede<\u5145<\u5144<\u5189<\u518a<\u51ac"
-                + "<\u51f9<\u51fa<\u51f8<\u520a<\u52a0<\u529f<\u5305"
-                + "<\u5306<\u5317<\u531d<\u4edf<\u534a<\u5349<\u5361"
-                + "<\u5360<\u536f<\u536e<\u53bb<\u53ef<\u53e4<\u53f3"
-                + "<\u53ec<\u53ee<\u53e9<\u53e8<\u53fc<\u53f8<\u53f5"
-                + "<\u53eb<\u53e6<\u53ea<\u53f2<\u53f1<\u53f0<\u53e5"
-                + "<\u53ed<\u53fb<\u56db<\u56da<\u5916<\u592e<\u5931"
-                + "<\u5974<\u5976<\u5b55<\u5b83<\u5c3c<\u5de8<\u5de7"
-                + "<\u5de6<\u5e02<\u5e03<\u5e73<\u5e7c<\u5f01<\u5f18"
-                + "<\u5f17<\u5fc5<\u620a<\u6253<\u6254<\u6252<\u6251"
-                + "<\u65a5<\u65e6<\u672e<\u672c<\u672a<\u672b<\u672d"
-                + "<\u6b63<\u6bcd<\u6c11<\u6c10<\u6c38<\u6c41<\u6c40"
-                + "<\u6c3e<\u72af<\u7384<\u7389<\u74dc<\u74e6<\u7518"
-                + "<\u751f<\u7528<\u7529<\u7530<\u7531<\u7532<\u7533"
-                + "<\u758b<\u767d<\u76ae<\u76bf<\u76ee<\u77db<\u77e2"
-                + "<\u77f3<\u793a<\u79be<\u7a74<\u7acb<\u4e1e<\u4e1f"
-                + "<\u4e52<\u4e53<\u4e69<\u4e99<\u4ea4<\u4ea6<\u4ea5"
-                + "<\u4eff<\u4f09<\u4f19<\u4f0a<\u4f15<\u4f0d<\u4f10"
-                + "<\u4f11<\u4f0f<\u4ef2<\u4ef6<\u4efb<\u4ef0<\u4ef3"
-                + "<\u4efd<\u4f01<\u4f0b<\u5149<\u5147<\u5146<\u5148"
-                + "<\u5168<\u5171<\u518d<\u51b0<\u5217<\u5211<\u5212"
-                + "<\u520e<\u5216<\u52a3<\u5308<\u5321<\u5320<\u5370"
-                + "<\u5371<\u5409<\u540f<\u540c<\u540a<\u5410<\u5401"
-                + "<\u540b<\u5404<\u5411<\u540d<\u5408<\u5403<\u540e"
-                + "<\u5406<\u5412<\u56e0<\u56de<\u56dd<\u5733<\u5730"
-                + "<\u5728<\u572d<\u572c<\u572f<\u5729<\u5919<\u591a"
-                + "<\u5937<\u5938<\u5984<\u5978<\u5983<\u597d<\u5979"
-                + "<\u5982<\u5981<\u5b57<\u5b58<\u5b87<\u5b88<\u5b85"
-                + "<\u5b89<\u5bfa<\u5c16<\u5c79<\u5dde<\u5e06<\u5e76"
-                + "<\u5e74<\u5f0f<\u5f1b<\u5fd9<\u5fd6<\u620e<\u620c"
-                + "<\u620d<\u6210<\u6263<\u625b<\u6258<\u6536<\u65e9"
-                + "<\u65e8<\u65ec<\u65ed<\u66f2<\u66f3<\u6709<\u673d"
-                + "<\u6734<\u6731<\u6735<\u6b21<\u6b64<\u6b7b<\u6c16"
-                + "<\u6c5d<\u6c57<\u6c59<\u6c5f<\u6c60<\u6c50<\u6c55"
-                + "<\u6c61<\u6c5b<\u6c4d<\u6c4e<\u7070<\u725f<\u725d"
-                + "<\u767e<\u7af9<\u7c73<\u7cf8<\u7f36<\u7f8a<\u7fbd"
-                + "<\u8001<\u8003<\u800c<\u8012<\u8033<\u807f<\u8089"
-                + "<\u808b<\u808c<\u81e3<\u81ea<\u81f3<\u81fc<\u820c"
-                + "<\u821b<\u821f<\u826e<\u8272<\u827e<\u866b<\u8840"
-                + "<\u884c<\u8863<\u897f<\u9621<\u4e32<\u4ea8<\u4f4d"
-                + "<\u4f4f<\u4f47<\u4f57<\u4f5e<\u4f34<\u4f5b<\u4f55"
-                + "<\u4f30<\u4f50<\u4f51<\u4f3d<\u4f3a<\u4f38<\u4f43"
-                + "<\u4f54<\u4f3c<\u4f46<\u4f63<\u4f5c<\u4f60<\u4f2f"
-                + "<\u4f4e<\u4f36<\u4f59<\u4f5d<\u4f48<\u4f5a<\u514c"
-                + "<\u514b<\u514d<\u5175<\u51b6<\u51b7<\u5225<\u5224"
-                + "<\u5229<\u522a<\u5228<\u52ab<\u52a9<\u52aa<\u52ac"
-                + "<\u5323<\u5373<\u5375<\u541d<\u542d<\u541e<\u543e"
-                + "<\u5426<\u544e<\u5427<\u5446<\u5443<\u5433<\u5448"
-                + "<\u5442<\u541b<\u5429<\u544a<\u5439<\u543b<\u5438"
-                + "<\u542e<\u5435<\u5436<\u5420<\u543c<\u5440<\u5431"
-                + "<\u542b<\u541f<\u542c<\u56ea<\u56f0<\u56e4<\u56eb"
-                + "<\u574a<\u5751<\u5740<\u574d<\u5747<\u574e<\u573e"
-                + "<\u5750<\u574f<\u573b<\u58ef<\u593e<\u599d<\u5992"
-                + "<\u59a8<\u599e<\u59a3<\u5999<\u5996<\u598d<\u59a4"
-                + "<\u5993<\u598a<\u59a5<\u5b5d<\u5b5c<\u5b5a<\u5b5b"
-                + "<\u5b8c<\u5b8b<\u5b8f<\u5c2c<\u5c40<\u5c41<\u5c3f"
-                + "<\u5c3e<\u5c90<\u5c91<\u5c94<\u5c8c<\u5deb<\u5e0c"
-                + "<\u5e8f<\u5e87<\u5e8a<\u5ef7<\u5f04<\u5f1f<\u5f64"
-                + "<\u5f62<\u5f77<\u5f79<\u5fd8<\u5fcc<\u5fd7<\u5fcd"
-                + "<\u5ff1<\u5feb<\u5ff8<\u5fea<\u6212<\u6211<\u6284"
-                + "<\u6297<\u6296<\u6280<\u6276<\u6289<\u626d<\u628a"
-                + "<\u627c<\u627e<\u6279<\u6273<\u6292<\u626f<\u6298"
-                + "<\u626e<\u6295<\u6293<\u6291<\u6286<\u6539<\u653b"
-                + "<\u6538<\u65f1<\u66f4<\u675f<\u674e<\u674f<\u6750"
-                + "<\u6751<\u675c<\u6756<\u675e<\u6749<\u6746<\u6760"
-                + "<\u6753<\u6757<\u6b65<\u6bcf<\u6c42<\u6c5e<\u6c99"
-                + "<\u6c81<\u6c88<\u6c89<\u6c85<\u6c9b<\u6c6a<\u6c7a"
-                + "<\u6c90<\u6c70<\u6c8c<\u6c68<\u6c96<\u6c92<\u6c7d"
-                + "<\u6c83<\u6c72<\u6c7e<\u6c74<\u6c86<\u6c76<\u6c8d"
-                + "<\u6c94<\u6c98<\u6c82<\u7076<\u707c<\u707d<\u7078"
-                + "<\u7262<\u7261<\u7260<\u72c4<\u72c2<\u7396<\u752c"
-                + "<\u752b<\u7537<\u7538<\u7682<\u76ef<\u77e3<\u79c1"
-                + "<\u79c0<\u79bf<\u7a76<\u7cfb<\u7f55<\u8096<\u8093"
-                + "<\u809d<\u8098<\u809b<\u809a<\u80b2<\u826f<\u8292"
-                + "<\u828b<\u828d<\u898b<\u89d2<\u8a00<\u8c37<\u8c46"
-                + "<\u8c55<\u8c9d<\u8d64<\u8d70<\u8db3<\u8eab<\u8eca"
-                + "<\u8f9b<\u8fb0<\u8fc2<\u8fc6<\u8fc5<\u8fc4<\u5de1"
-                + "<\u9091<\u90a2<\u90aa<\u90a6<\u90a3<\u9149<\u91c6"
-                + "<\u91cc<\u9632<\u962e<\u9631<\u962a<\u962c<\u4e26"
-                + "<\u4e56<\u4e73<\u4e8b<\u4e9b<\u4e9e<\u4eab<\u4eac"
-                + "<\u4f6f<\u4f9d<\u4f8d<\u4f73<\u4f7f<\u4f6c<\u4f9b"
-                + "<\u4f8b<\u4f86<\u4f83<\u4f70<\u4f75<\u4f88<\u4f69"
-                + "<\u4f7b<\u4f96<\u4f7e<\u4f8f<\u4f91<\u4f7a<\u5154"
-                + "<\u5152<\u5155<\u5169<\u5177<\u5176<\u5178<\u51bd"
-                + "<\u51fd<\u523b<\u5238<\u5237<\u523a<\u5230<\u522e"
-                + "<\u5236<\u5241<\u52be<\u52bb<\u5352<\u5354<\u5353"
-                + "<\u5351<\u5366<\u5377<\u5378<\u5379<\u53d6<\u53d4"
-                + "<\u53d7<\u5473<\u5475<\u5496<\u5478<\u5495<\u5480"
-                + "<\u547b<\u5477<\u5484<\u5492<\u5486<\u547c<\u5490"
-                + "<\u5471<\u5476<\u548c<\u549a<\u5462<\u5468<\u548b"
-                + "<\u547d<\u548e<\u56fa<\u5783<\u5777<\u576a<\u5769"
-                + "<\u5761<\u5766<\u5764<\u577c<\u591c<\u5949<\u5947"
-                + "<\u5948<\u5944<\u5954<\u59be<\u59bb<\u59d4<\u59b9"
-                + "<\u59ae<\u59d1<\u59c6<\u59d0<\u59cd<\u59cb<\u59d3"
-                + "<\u59ca<\u59af<\u59b3<\u59d2<\u59c5<\u5b5f<\u5b64"
-                + "<\u5b63<\u5b97<\u5b9a<\u5b98<\u5b9c<\u5b99<\u5b9b"
-                + "<\u5c1a<\u5c48<\u5c45<\u5c46<\u5cb7<\u5ca1<\u5cb8"
-                + "<\u5ca9<\u5cab<\u5cb1<\u5cb3<\u5e18<\u5e1a<\u5e16"
-                + "<\u5e15<\u5e1b<\u5e11<\u5e78<\u5e9a<\u5e97<\u5e9c"
-                + "<\u5e95<\u5e96<\u5ef6<\u5f26<\u5f27<\u5f29<\u5f80"
-                + "<\u5f81<\u5f7f<\u5f7c<\u5fdd<\u5fe0<\u5ffd<\u5ff5"
-                + "<\u5fff<\u600f<\u6014<\u602f<\u6035<\u6016<\u602a"
-                + "<\u6015<\u6021<\u6027<\u6029<\u602b<\u601b<\u6216"
-                + "<\u6215<\u623f<\u623e<\u6240<\u627f<\u62c9<\u62cc"
-                + "<\u62c4<\u62bf<\u62c2<\u62b9<\u62d2<\u62db<\u62ab"
-                + "<\u62d3<\u62d4<\u62cb<\u62c8<\u62a8<\u62bd<\u62bc"
-                + "<\u62d0<\u62d9<\u62c7<\u62cd<\u62b5<\u62da<\u62b1"
-                + "<\u62d8<\u62d6<\u62d7<\u62c6<\u62ac<\u62ce<\u653e"
-                + "<\u65a7<\u65bc<\u65fa<\u6614<\u6613<\u660c<\u6606"
-                + "<\u6602<\u660e<\u6600<\u660f<\u6615<\u660a<\u6607"
-                + "<\u670d<\u670b<\u676d<\u678b<\u6795<\u6771<\u679c"
-                + "<\u6773<\u6777<\u6787<\u679d<\u6797<\u676f<\u6770"
-                + "<\u677f<\u6789<\u677e<\u6790<\u6775<\u679a<\u6793"
-                + "<\u677c<\u676a<\u6772<\u6b23<\u6b66<\u6b67<\u6b7f"
-                + "<\u6c13<\u6c1b<\u6ce3<\u6ce8<\u6cf3<\u6cb1<\u6ccc"
-                + "<\u6ce5<\u6cb3<\u6cbd<\u6cbe<\u6cbc<\u6ce2<\u6cab"
-                + "<\u6cd5<\u6cd3<\u6cb8<\u6cc4<\u6cb9<\u6cc1<\u6cae"
-                + "<\u6cd7<\u6cc5<\u6cf1<\u6cbf<\u6cbb<\u6ce1<\u6cdb"
-                + "<\u6cca<\u6cac<\u6cef<\u6cdc<\u6cd6<\u6ce0<\u7095"
-                + "<\u708e<\u7092<\u708a<\u7099<\u722c<\u722d<\u7238"
-                + "<\u7248<\u7267<\u7269<\u72c0<\u72ce<\u72d9<\u72d7"
-                + "<\u72d0<\u73a9<\u73a8<\u739f<\u73ab<\u73a5<\u753d"
-                + "<\u759d<\u7599<\u759a<\u7684<\u76c2<\u76f2<\u76f4"
-                + "<\u77e5<\u77fd<\u793e<\u7940<\u7941<\u79c9<\u79c8"
-                + "<\u7a7a<\u7a79<\u7afa<\u7cfe<\u7f54<\u7f8c<\u7f8b"
-                + "<\u8005<\u80ba<\u80a5<\u80a2<\u80b1<\u80a1<\u80ab"
-                + "<\u80a9<\u80b4<\u80aa<\u80af<\u81e5<\u81fe<\u820d"
-                + "<\u82b3<\u829d<\u8299<\u82ad<\u82bd<\u829f<\u82b9"
-                + "<\u82b1<\u82ac<\u82a5<\u82af<\u82b8<\u82a3<\u82b0"
-                + "<\u82be<\u82b7<\u864e<\u8671<\u521d<\u8868<\u8ecb"
-                + "<\u8fce<\u8fd4<\u8fd1<\u90b5<\u90b8<\u90b1<\u90b6"
-                + "<\u91c7<\u91d1<\u9577<\u9580<\u961c<\u9640<\u963f"
-                + "<\u963b<\u9644<\u9642<\u96b9<\u96e8<\u9752<\u975e"
-                + "<\u4e9f<\u4ead<\u4eae<\u4fe1<\u4fb5<\u4faf<\u4fbf"
-                + "<\u4fe0<\u4fd1<\u4fcf<\u4fdd<\u4fc3<\u4fb6<\u4fd8"
-                + "<\u4fdf<\u4fca<\u4fd7<\u4fae<\u4fd0<\u4fc4<\u4fc2"
-                + "<\u4fda<\u4fce<\u4fde<\u4fb7<\u5157<\u5192<\u5191"
-                + "<\u51a0<\u524e<\u5243<\u524a<\u524d<\u524c<\u524b"
-                + "<\u5247<\u52c7<\u52c9<\u52c3<\u52c1<\u530d<\u5357"
-                + "<\u537b<\u539a<\u53db<\u54ac<\u54c0<\u54a8<\u54ce"
-                + "<\u54c9<\u54b8<\u54a6<\u54b3<\u54c7<\u54c2<\u54bd"
-                + "<\u54aa<\u54c1<\u54c4<\u54c8<\u54af<\u54ab<\u54b1"
-                + "<\u54bb<\u54a9<\u54a7<\u54bf<\u56ff<\u5782<\u578b"
-                + "<\u57a0<\u57a3<\u57a2<\u57ce<\u57ae<\u5793<\u5955"
-                + "<\u5951<\u594f<\u594e<\u5950<\u59dc<\u59d8<\u59ff"
-                + "<\u59e3<\u59e8<\u5a03<\u59e5<\u59ea<\u59da<\u59e6"
-                + "<\u5a01<\u59fb<\u5b69<\u5ba3<\u5ba6<\u5ba4<\u5ba2"
-                + "<\u5ba5<\u5c01<\u5c4e<\u5c4f<\u5c4d<\u5c4b<\u5cd9"
-                + "<\u5cd2<\u5df7<\u5e1d<\u5e25<\u5e1f<\u5e7d<\u5ea0"
-                + "<\u5ea6<\u5efa<\u5f08<\u5f2d<\u5f65<\u5f88<\u5f85"
-                + "<\u5f8a<\u5f8b<\u5f87<\u5f8c<\u5f89<\u6012<\u601d"
-                + "<\u6020<\u6025<\u600e<\u6028<\u604d<\u6070<\u6068"
-                + "<\u6062<\u6046<\u6043<\u606c<\u606b<\u606a<\u6064"
-                + "<\u6241<\u62dc<\u6316<\u6309<\u62fc<\u62ed<\u6301"
-                + "<\u62ee<\u62fd<\u6307<\u62f1<\u62f7<\u62ef<\u62ec"
-                + "<\u62fe<\u62f4<\u6311<\u6302<\u653f<\u6545<\u65ab"
-                + "<\u65bd<\u65e2<\u6625<\u662d<\u6620<\u6627<\u662f"
-                + "<\u661f<\u6628<\u6631<\u6624<\u66f7<\u67ff<\u67d3"
-                + "<\u67f1<\u67d4<\u67d0<\u67ec<\u67b6<\u67af<\u67f5"
-                + "<\u67e9<\u67ef<\u67c4<\u67d1<\u67b4<\u67da<\u67e5"
-                + "<\u67b8<\u67cf<\u67de<\u67f3<\u67b0<\u67d9<\u67e2"
-                + "<\u67dd<\u67d2<\u6b6a<\u6b83<\u6b86<\u6bb5<\u6bd2"
-                + "<\u6bd7<\u6c1f<\u6cc9<\u6d0b<\u6d32<\u6d2a<\u6d41"
-                + "<\u6d25<\u6d0c<\u6d31<\u6d1e<\u6d17<\u6d3b<\u6d3d"
-                + "<\u6d3e<\u6d36<\u6d1b<\u6cf5<\u6d39<\u6d27<\u6d38"
-                + "<\u6d29<\u6d2e<\u6d35<\u6d0e<\u6d2b<\u70ab<\u70ba"
-                + "<\u70b3<\u70ac<\u70af<\u70ad<\u70b8<\u70ae<\u70a4"
-                + "<\u7230<\u7272<\u726f<\u7274<\u72e9<\u72e0<\u72e1"
-                + "<\u73b7<\u73ca<\u73bb<\u73b2<\u73cd<\u73c0<\u73b3"
-                + "<\u751a<\u752d<\u754f<\u754c<\u754e<\u754b<\u75ab"
-                + "<\u75a4<\u75a5<\u75a2<\u75a3<\u7678<\u7686<\u7687"
-                + "<\u7688<\u76c8<\u76c6<\u76c3<\u76c5<\u7701<\u76f9"
-                + "<\u76f8<\u7709<\u770b<\u76fe<\u76fc<\u7707<\u77dc"
-                + "<\u7802<\u7814<\u780c<\u780d<\u7946<\u7949<\u7948"
-                + "<\u7947<\u79b9<\u79ba<\u79d1<\u79d2<\u79cb<\u7a7f"
-                + "<\u7a81<\u7aff<\u7afd<\u7c7d<\u7d02<\u7d05<\u7d00"
-                + "<\u7d09<\u7d07<\u7d04<\u7d06<\u7f38<\u7f8e<\u7fbf"
-                + "<\u8004<\u8010<\u800d<\u8011<\u8036<\u80d6<\u80e5"
-                + "<\u80da<\u80c3<\u80c4<\u80cc<\u80e1<\u80db<\u80ce"
-                + "<\u80de<\u80e4<\u80dd<\u81f4<\u8222<\u82e7<\u8303"
-                + "<\u8305<\u82e3<\u82db<\u82e6<\u8304<\u82e5<\u8302"
-                + "<\u8309<\u82d2<\u82d7<\u82f1<\u8301<\u82dc<\u82d4"
-                + "<\u82d1<\u82de<\u82d3<\u82df<\u82ef<\u8306<\u8650"
-                + "<\u8679<\u867b<\u867a<\u884d<\u886b<\u8981<\u89d4"
-                + "<\u8a08<\u8a02<\u8a03<\u8c9e<\u8ca0<\u8d74<\u8d73"
-                + "<\u8db4<\u8ecd<\u8ecc<\u8ff0<\u8fe6<\u8fe2<\u8fea"
-                + "<\u8fe5<\u8fed<\u8feb<\u8fe4<\u8fe8<\u90ca<\u90ce"
-                + "<\u90c1<\u90c3<\u914b<\u914a<\u91cd<\u9582<\u9650"
-                + "<\u964b<\u964c<\u964d<\u9762<\u9769<\u97cb<\u97ed"
-                + "<\u97f3<\u9801<\u98a8<\u98db<\u98df<\u9996<\u9999"
-                + "<\u4e58<\u4eb3<\u500c<\u500d<\u5023<\u4fef<\u5026"
-                + "<\u5025<\u4ff8<\u5029<\u5016<\u5006<\u503c<\u501f"
-                + "<\u501a<\u5012<\u5011<\u4ffa<\u5000<\u5014<\u5028"
-                + "<\u4ff1<\u5021<\u500b<\u5019<\u5018<\u4ff3<\u4fee"
-                + "<\u502d<\u502a<\u4ffe<\u502b<\u5009<\u517c<\u51a4"
-                + "<\u51a5<\u51a2<\u51cd<\u51cc<\u51c6<\u51cb<\u5256"
-                + "<\u525c<\u5254<\u525b<\u525d<\u532a<\u537f<\u539f"
-                + "<\u539d<\u53df<\u54e8<\u5510<\u5501<\u5537<\u54fc"
-                + "<\u54e5<\u54f2<\u5506<\u54fa<\u5514<\u54e9<\u54ed"
-                + "<\u54e1<\u5509<\u54ee<\u54ea<\u54e6<\u5527<\u5507"
-                + "<\u54fd<\u550f<\u5703<\u5704<\u57c2<\u57d4<\u57cb"
-                + "<\u57c3<\u5809<\u590f<\u5957<\u5958<\u595a<\u5a11"
-                + "<\u5a18<\u5a1c<\u5a1f<\u5a1b<\u5a13<\u59ec<\u5a20"
-                + "<\u5a23<\u5a29<\u5a25<\u5a0c<\u5a09<\u5b6b<\u5c58"
-                + "<\u5bb0<\u5bb3<\u5bb6<\u5bb4<\u5bae<\u5bb5<\u5bb9"
-                + "<\u5bb8<\u5c04<\u5c51<\u5c55<\u5c50<\u5ced<\u5cfd"
-                + "<\u5cfb<\u5cea<\u5ce8<\u5cf0<\u5cf6<\u5d01<\u5cf4"
-                + "<\u5dee<\u5e2d<\u5e2b<\u5eab<\u5ead<\u5ea7<\u5f31"
-                + "<\u5f92<\u5f91<\u5f90<\u6059<\u6063<\u6065<\u6050"
-                + "<\u6055<\u606d<\u6069<\u606f<\u6084<\u609f<\u609a"
-                + "<\u608d<\u6094<\u608c<\u6085<\u6096<\u6247<\u62f3"
-                + "<\u6308<\u62ff<\u634e<\u633e<\u632f<\u6355<\u6342"
-                + "<\u6346<\u634f<\u6349<\u633a<\u6350<\u633d<\u632a"
-                + "<\u632b<\u6328<\u634d<\u634c<\u6548<\u6549<\u6599"
-                + "<\u65c1<\u65c5<\u6642<\u6649<\u664f<\u6643<\u6652"
-                + "<\u664c<\u6645<\u6641<\u66f8<\u6714<\u6715<\u6717"
-                + "<\u6821<\u6838<\u6848<\u6846<\u6853<\u6839<\u6842"
-                + "<\u6854<\u6829<\u68b3<\u6817<\u684c<\u6851<\u683d"
-                + "<\u67f4<\u6850<\u6840<\u683c<\u6843<\u682a<\u6845"
-                + "<\u6813<\u6818<\u6841<\u6b8a<\u6b89<\u6bb7<\u6c23"
-                + "<\u6c27<\u6c28<\u6c26<\u6c24<\u6cf0<\u6d6a<\u6d95"
-                + "<\u6d88<\u6d87<\u6d66<\u6d78<\u6d77<\u6d59<\u6d93"
-                + "<\u6d6c<\u6d89<\u6d6e<\u6d5a<\u6d74<\u6d69<\u6d8c"
-                + "<\u6d8a<\u6d79<\u6d85<\u6d65<\u6d94<\u70ca<\u70d8"
-                + "<\u70e4<\u70d9<\u70c8<\u70cf<\u7239<\u7279<\u72fc"
-                + "<\u72f9<\u72fd<\u72f8<\u72f7<\u7386<\u73ed<\u7409"
-                + "<\u73ee<\u73e0<\u73ea<\u73de<\u7554<\u755d<\u755c"
-                + "<\u755a<\u7559<\u75be<\u75c5<\u75c7<\u75b2<\u75b3"
-                + "<\u75bd<\u75bc<\u75b9<\u75c2<\u75b8<\u768b<\u76b0"
-                + "<\u76ca<\u76cd<\u76ce<\u7729<\u771f<\u7720<\u7728"
-                + "<\u77e9<\u7830<\u7827<\u7838<\u781d<\u7834<\u7837"
-                + "<\u7825<\u782d<\u7820<\u781f<\u7832<\u7955<\u7950"
-                + "<\u7960<\u795f<\u7956<\u795e<\u795d<\u7957<\u795a"
-                + "<\u79e4<\u79e3<\u79e7<\u79df<\u79e6<\u79e9<\u79d8"
-                + "<\u7a84<\u7a88<\u7ad9<\u7b06<\u7b11<\u7c89<\u7d21"
-                + "<\u7d17<\u7d0b<\u7d0a<\u7d20<\u7d22<\u7d14<\u7d10"
-                + "<\u7d15<\u7d1a<\u7d1c<\u7d0d<\u7d19<\u7d1b<\u7f3a"
-                + "<\u7f5f<\u7f94<\u7fc5<\u7fc1<\u8006<\u8018<\u8015"
-                + "<\u8019<\u8017<\u803d<\u803f<\u80f1<\u8102<\u80f0"
-                + "<\u8105<\u80ed<\u80f4<\u8106<\u80f8<\u80f3<\u8108"
-                + "<\u80fd<\u810a<\u80fc<\u80ef<\u81ed<\u81ec<\u8200"
-                + "<\u8210<\u822a<\u822b<\u8228<\u822c<\u82bb<\u832b"
-                + "<\u8352<\u8354<\u834a<\u8338<\u8350<\u8349<\u8335"
-                + "<\u8334<\u834f<\u8332<\u8339<\u8336<\u8317<\u8340"
-                + "<\u8331<\u8328<\u8343<\u8654<\u868a<\u86aa<\u8693"
-                + "<\u86a4<\u86a9<\u868c<\u86a3<\u869c<\u8870<\u8877"
-                + "<\u8881<\u8882<\u887d<\u8879<\u8a18<\u8a10<\u8a0e"
-                + "<\u8a0c<\u8a15<\u8a0a<\u8a17<\u8a13<\u8a16<\u8a0f"
-                + "<\u8a11<\u8c48<\u8c7a<\u8c79<\u8ca1<\u8ca2<\u8d77"
-                + "<\u8eac<\u8ed2<\u8ed4<\u8ecf<\u8fb1<\u9001<\u9006"
-                + "<\u8ff7<\u9000<\u8ffa<\u8ff4<\u9003<\u8ffd<\u9005"
-                + "<\u8ff8<\u9095<\u90e1<\u90dd<\u90e2<\u9152<\u914d"
-                + "<\u914c<\u91d8<\u91dd<\u91d7<\u91dc<\u91d9<\u9583"
-                + "<\u9662<\u9663<\u9661<\u965b<\u965d<\u9664<\u9658"
-                + "<\u965e<\u96bb<\u98e2<\u99ac<\u9aa8<\u9ad8<\u9b25"
-                + "<\u9b32<\u9b3c<\u4e7e<\u507a<\u507d<\u505c<\u5047"
-                + "<\u5043<\u504c<\u505a<\u5049<\u5065<\u5076<\u504e"
-                + "<\u5055<\u5075<\u5074<\u5077<\u504f<\u500f<\u506f"
-                + "<\u506d<\u515c<\u5195<\u51f0<\u526a<\u526f<\u52d2"
-                + "<\u52d9<\u52d8<\u52d5<\u5310<\u530f<\u5319<\u533f"
-                + "<\u5340<\u533e<\u53c3<\u66fc<\u5546<\u556a<\u5566"
-                + "<\u5544<\u555e<\u5561<\u5543<\u554a<\u5531<\u5556"
-                + "<\u554f<\u5555<\u552f<\u5564<\u5538<\u552e<\u555c"
-                + "<\u552c<\u5563<\u5533<\u5541<\u5557<\u5708<\u570b"
-                + "<\u5709<\u57df<\u5805<\u580a<\u5806<\u57e0<\u57e4"
-                + "<\u57fa<\u5802<\u5835<\u57f7<\u57f9<\u5920<\u5962"
-                + "<\u5a36<\u5a41<\u5a49<\u5a66<\u5a6a<\u5a40<\u5a3c"
-                + "<\u5a62<\u5a5a<\u5a46<\u5a4a<\u5b70<\u5bc7<\u5bc5"
-                + "<\u5bc4<\u5bc2<\u5bbf<\u5bc6<\u5c09<\u5c08<\u5c07"
-                + "<\u5c60<\u5c5c<\u5c5d<\u5d07<\u5d06<\u5d0e<\u5d1b"
-                + "<\u5d16<\u5d22<\u5d11<\u5d29<\u5d14<\u5d19<\u5d24"
-                + "<\u5d27<\u5d17<\u5de2<\u5e38<\u5e36<\u5e33<\u5e37"
-                + "<\u5eb7<\u5eb8<\u5eb6<\u5eb5<\u5ebe<\u5f35<\u5f37"
-                + "<\u5f57<\u5f6c<\u5f69<\u5f6b<\u5f97<\u5f99<\u5f9e"
-                + "<\u5f98<\u5fa1<\u5fa0<\u5f9c<\u607f<\u60a3<\u6089"
-                + "<\u60a0<\u60a8<\u60cb<\u60b4<\u60e6<\u60bd<\u60c5"
-                + "<\u60bb<\u60b5<\u60dc<\u60bc<\u60d8<\u60d5<\u60c6"
-                + "<\u60df<\u60b8<\u60da<\u60c7<\u621a<\u621b<\u6248"
-                + "<\u63a0<\u63a7<\u6372<\u6396<\u63a2<\u63a5<\u6377"
-                + "<\u6367<\u6398<\u63aa<\u6371<\u63a9<\u6389<\u6383"
-                + "<\u639b<\u636b<\u63a8<\u6384<\u6388<\u6399<\u63a1"
-                + "<\u63ac<\u6392<\u638f<\u6380<\u637b<\u6369<\u6368"
-                + "<\u637a<\u655d<\u6556<\u6551<\u6559<\u6557<\u555f"
-                + "<\u654f<\u6558<\u6555<\u6554<\u659c<\u659b<\u65ac"
-                + "<\u65cf<\u65cb<\u65cc<\u65ce<\u665d<\u665a<\u6664"
-                + "<\u6668<\u6666<\u665e<\u66f9<\u52d7<\u671b<\u6881"
-                + "<\u68af<\u68a2<\u6893<\u68b5<\u687f<\u6876<\u68b1"
-                + "<\u68a7<\u6897<\u68b0<\u6883<\u68c4<\u68ad<\u6886"
-                + "<\u6885<\u6894<\u689d<\u68a8<\u689f<\u68a1<\u6882"
-                + "<\u6b32<\u6bba<\u6beb<\u6bec<\u6c2b<\u6d8e<\u6dbc"
-                + "<\u6df3<\u6dd9<\u6db2<\u6de1<\u6dcc<\u6de4<\u6dfb"
-                + "<\u6dfa<\u6e05<\u6dc7<\u6dcb<\u6daf<\u6dd1<\u6dae"
-                + "<\u6dde<\u6df9<\u6db8<\u6df7<\u6df5<\u6dc5<\u6dd2"
-                + "<\u6e1a<\u6db5<\u6dda<\u6deb<\u6dd8<\u6dea<\u6df1"
-                + "<\u6dee<\u6de8<\u6dc6<\u6dc4<\u6daa<\u6dec<\u6dbf"
-                + "<\u6de6<\u70f9<\u7109<\u710a<\u70fd<\u70ef<\u723d"
-                + "<\u727d<\u7281<\u731c<\u731b<\u7316<\u7313<\u7319"
-                + "<\u7387<\u7405<\u740a<\u7403<\u7406<\u73fe<\u740d"
-                + "<\u74e0<\u74f6<\u74f7<\u751c<\u7522<\u7565<\u7566"
-                + "<\u7562<\u7570<\u758f<\u75d4<\u75d5<\u75b5<\u75ca"
-                + "<\u75cd<\u768e<\u76d4<\u76d2<\u76db<\u7737<\u773e"
-                + "<\u773c<\u7736<\u7738<\u773a<\u786b<\u7843<\u784e"
-                + "<\u7965<\u7968<\u796d<\u79fb<\u7a92<\u7a95<\u7b20"
-                + "<\u7b28<\u7b1b<\u7b2c<\u7b26<\u7b19<\u7b1e<\u7b2e"
-                + "<\u7c92<\u7c97<\u7c95<\u7d46<\u7d43<\u7d71<\u7d2e"
-                + "<\u7d39<\u7d3c<\u7d40<\u7d30<\u7d33<\u7d44<\u7d2f"
-                + "<\u7d42<\u7d32<\u7d31<\u7f3d<\u7f9e<\u7f9a<\u7fcc"
-                + "<\u7fce<\u7fd2<\u801c<\u804a<\u8046<\u812f<\u8116"
-                + "<\u8123<\u812b<\u8129<\u8130<\u8124<\u8202<\u8235"
-                + "<\u8237<\u8236<\u8239<\u838e<\u839e<\u8398<\u8378"
-                + "<\u83a2<\u8396<\u83bd<\u83ab<\u8392<\u838a<\u8393"
-                + "<\u8389<\u83a0<\u8377<\u837b<\u837c<\u8386<\u83a7"
-                + "<\u8655<\u5f6a<\u86c7<\u86c0<\u86b6<\u86c4<\u86b5"
-                + "<\u86c6<\u86cb<\u86b1<\u86af<\u86c9<\u8853<\u889e"
-                + "<\u8888<\u88ab<\u8892<\u8896<\u888d<\u888b<\u8993"
-                + "<\u898f<\u8a2a<\u8a1d<\u8a23<\u8a25<\u8a31<\u8a2d"
-                + "<\u8a1f<\u8a1b<\u8a22<\u8c49<\u8c5a<\u8ca9<\u8cac"
-                + "<\u8cab<\u8ca8<\u8caa<\u8ca7<\u8d67<\u8d66<\u8dbe"
-                + "<\u8dba<\u8edb<\u8edf<\u9019<\u900d<\u901a<\u9017"
-                + "<\u9023<\u901f<\u901d<\u9010<\u9015<\u901e<\u9020"
-                + "<\u900f<\u9022<\u9016<\u901b<\u9014<\u90e8<\u90ed"
-                + "<\u90fd<\u9157<\u91ce<\u91f5<\u91e6<\u91e3<\u91e7"
-                + "<\u91ed<\u91e9<\u9589<\u966a<\u9675<\u9673<\u9678"
-                + "<\u9670<\u9674<\u9676<\u9677<\u966c<\u96c0<\u96ea"
-                + "<\u96e9<\u7ae0<\u7adf<\u9802<\u9803<\u9b5a<\u9ce5"
-                + "<\u9e75<\u9e7f<\u9ea5<\u9ebb<\u50a2<\u508d<\u5085"
-                + "<\u5099<\u5091<\u5080<\u5096<\u5098<\u509a<\u6700"
-                + "<\u51f1<\u5272<\u5274<\u5275<\u5269<\u52de<\u52dd"
-                + "<\u52db<\u535a<\u53a5<\u557b<\u5580<\u55a7<\u557c"
-                + "<\u558a<\u559d<\u5598<\u5582<\u559c<\u55aa<\u5594"
-                + "<\u5587<\u558b<\u5583<\u55b3<\u55ae<\u559f<\u553e"
-                + "<\u55b2<\u559a<\u55bb<\u55ac<\u55b1<\u557e<\u5589"
-                + "<\u55ab<\u5599<\u570d<\u582f<\u582a<\u5834<\u5824"
-                + "<\u5830<\u5831<\u5821<\u581d<\u5820<\u58f9<\u58fa"
-                + "<\u5960<\u5a77<\u5a9a<\u5a7f<\u5a92<\u5a9b<\u5aa7"
-                + "<\u5b73<\u5b71<\u5bd2<\u5bcc<\u5bd3<\u5bd0<\u5c0a"
-                + "<\u5c0b<\u5c31<\u5d4c<\u5d50<\u5d34<\u5d47<\u5dfd"
-                + "<\u5e45<\u5e3d<\u5e40<\u5e43<\u5e7e<\u5eca<\u5ec1"
-                + "<\u5ec2<\u5ec4<\u5f3c<\u5f6d<\u5fa9<\u5faa<\u5fa8"
-                + "<\u60d1<\u60e1<\u60b2<\u60b6<\u60e0<\u611c<\u6123"
-                + "<\u60fa<\u6115<\u60f0<\u60fb<\u60f4<\u6168<\u60f1"
-                + "<\u610e<\u60f6<\u6109<\u6100<\u6112<\u621f<\u6249"
-                + "<\u63a3<\u638c<\u63cf<\u63c0<\u63e9<\u63c9<\u63c6"
-                + "<\u63cd<\u63d2<\u63e3<\u63d0<\u63e1<\u63d6<\u63ed"
-                + "<\u63ee<\u6376<\u63f4<\u63ea<\u63db<\u6452<\u63da"
-                + "<\u63f9<\u655e<\u6566<\u6562<\u6563<\u6591<\u6590"
-                + "<\u65af<\u666e<\u6670<\u6674<\u6676<\u666f<\u6691"
-                + "<\u667a<\u667e<\u6677<\u66fe<\u66ff<\u671f<\u671d"
-                + "<\u68fa<\u68d5<\u68e0<\u68d8<\u68d7<\u6905<\u68df"
-                + "<\u68f5<\u68ee<\u68e7<\u68f9<\u68d2<\u68f2<\u68e3"
-                + "<\u68cb<\u68cd<\u690d<\u6912<\u690e<\u68c9<\u68da"
-                + "<\u696e<\u68fb<\u6b3e<\u6b3a<\u6b3d<\u6b98<\u6b96"
-                + "<\u6bbc<\u6bef<\u6c2e<\u6c2f<\u6c2c<\u6e2f<\u6e38"
-                + "<\u6e54<\u6e21<\u6e32<\u6e67<\u6e4a<\u6e20<\u6e25"
-                + "<\u6e23<\u6e1b<\u6e5b<\u6e58<\u6e24<\u6e56<\u6e6e"
-                + "<\u6e2d<\u6e26<\u6e6f<\u6e34<\u6e4d<\u6e3a<\u6e2c"
-                + "<\u6e43<\u6e1d<\u6e3e<\u6ecb<\u6e89<\u6e19<\u6e4e"
-                + "<\u6e63<\u6e44<\u6e72<\u6e69<\u6e5f<\u7119<\u711a"
-                + "<\u7126<\u7130<\u7121<\u7136<\u716e<\u711c<\u724c"
-                + "<\u7284<\u7280<\u7336<\u7325<\u7334<\u7329<\u743a"
-                + "<\u742a<\u7433<\u7422<\u7425<\u7435<\u7436<\u7434"
-                + "<\u742f<\u741b<\u7426<\u7428<\u7525<\u7526<\u756b"
-                + "<\u756a<\u75e2<\u75db<\u75e3<\u75d9<\u75d8<\u75de"
-                + "<\u75e0<\u767b<\u767c<\u7696<\u7693<\u76b4<\u76dc"
-                + "<\u774f<\u77ed<\u785d<\u786c<\u786f<\u7a0d<\u7a08"
-                + "<\u7a0b<\u7a05<\u7a00<\u7a98<\u7a97<\u7a96<\u7ae5"
-                + "<\u7ae3<\u7b49<\u7b56<\u7b46<\u7b50<\u7b52<\u7b54"
-                + "<\u7b4d<\u7b4b<\u7b4f<\u7b51<\u7c9f<\u7ca5<\u7d5e"
-                + "<\u7d50<\u7d68<\u7d55<\u7d2b<\u7d6e<\u7d72<\u7d61"
-                + "<\u7d66<\u7d62<\u7d70<\u7d73<\u5584<\u7fd4<\u7fd5"
-                + "<\u800b<\u8052<\u8085<\u8155<\u8154<\u814b<\u8151"
-                + "<\u814e<\u8139<\u8146<\u813e<\u814c<\u8153<\u8174"
-                + "<\u8212<\u821c<\u83e9<\u8403<\u83f8<\u840d<\u83e0"
-                + "<\u83c5<\u840b<\u83c1<\u83ef<\u83f1<\u83f4<\u8457"
-                + "<\u840a<\u83f0<\u840c<\u83cc<\u83fd<\u83f2<\u83ca"
-                + "<\u8438<\u840e<\u8404<\u83dc<\u8407<\u83d4<\u83df"
-                + "<\u865b<\u86df<\u86d9<\u86ed<\u86d4<\u86db<\u86e4"
-                + "<\u86d0<\u86de<\u8857<\u88c1<\u88c2<\u88b1<\u8983"
-                + "<\u8996<\u8a3b<\u8a60<\u8a55<\u8a5e<\u8a3c<\u8a41"
-                + "<\u8a54<\u8a5b<\u8a50<\u8a46<\u8a34<\u8a3a<\u8a36"
-                + "<\u8a56<\u8c61<\u8c82<\u8caf<\u8cbc<\u8cb3<\u8cbd"
-                + "<\u8cc1<\u8cbb<\u8cc0<\u8cb4<\u8cb7<\u8cb6<\u8cbf"
-                + "<\u8cb8<\u8d8a<\u8d85<\u8d81<\u8dce<\u8ddd<\u8dcb"
-                + "<\u8dda<\u8dd1<\u8dcc<\u8ddb<\u8dc6<\u8efb<\u8ef8"
-                + "<\u8efc<\u8f9c<\u902e<\u9035<\u9031<\u9038<\u9032"
-                + "<\u9036<\u9102<\u90f5<\u9109<\u90fe<\u9163<\u9165"
-                + "<\u91cf<\u9214<\u9215<\u9223<\u9209<\u921e<\u920d"
-                + "<\u9210<\u9207<\u9211<\u9594<\u958f<\u958b<\u9591"
-                + "<\u9593<\u9592<\u958e<\u968a<\u968e<\u968b<\u967d"
-                + "<\u9685<\u9686<\u968d<\u9672<\u9684<\u96c1<\u96c5"
-                + "<\u96c4<\u96c6<\u96c7<\u96ef<\u96f2<\u97cc<\u9805"
-                + "<\u9806<\u9808<\u98e7<\u98ea<\u98ef<\u98e9<\u98f2"
-                + "<\u98ed<\u99ae<\u99ad<\u9ec3<\u9ecd<\u9ed1<\u4e82"
-                + "<\u50ad<\u50b5<\u50b2<\u50b3<\u50c5<\u50be<\u50ac"
-                + "<\u50b7<\u50bb<\u50af<\u50c7<\u527f<\u5277<\u527d"
-                + "<\u52df<\u52e6<\u52e4<\u52e2<\u52e3<\u532f<\u55df"
-                + "<\u55e8<\u55d3<\u55e6<\u55ce<\u55dc<\u55c7<\u55d1"
-                + "<\u55e3<\u55e4<\u55ef<\u55da<\u55e1<\u55c5<\u55c6"
-                + "<\u55e5<\u55c9<\u5712<\u5713<\u585e<\u5851<\u5858"
-                + "<\u5857<\u585a<\u5854<\u586b<\u584c<\u586d<\u584a"
-                + "<\u5862<\u5852<\u584b<\u5967<\u5ac1<\u5ac9<\u5acc"
-                + "<\u5abe<\u5abd<\u5abc<\u5ab3<\u5ac2<\u5ab2<\u5d69"
-                + "<\u5d6f<\u5e4c<\u5e79<\u5ec9<\u5ec8<\u5f12<\u5f59"
-                + "<\u5fac<\u5fae<\u611a<\u610f<\u6148<\u611f<\u60f3"
-                + "<\u611b<\u60f9<\u6101<\u6108<\u614e<\u614c<\u6144"
-                + "<\u614d<\u613e<\u6134<\u6127<\u610d<\u6106<\u6137"
-                + "<\u6221<\u6222<\u6413<\u643e<\u641e<\u642a<\u642d"
-                + "<\u643d<\u642c<\u640f<\u641c<\u6414<\u640d<\u6436"
-                + "<\u6416<\u6417<\u6406<\u656c<\u659f<\u65b0<\u6697"
-                + "<\u6689<\u6687<\u6688<\u6696<\u6684<\u6698<\u668d"
-                + "<\u6703<\u6994<\u696d<\u695a<\u6977<\u6960<\u6954"
-                + "<\u6975<\u6930<\u6982<\u694a<\u6968<\u696b<\u695e"
-                + "<\u6953<\u6979<\u6986<\u695d<\u6963<\u695b<\u6b47"
-                + "<\u6b72<\u6bc0<\u6bbf<\u6bd3<\u6bfd<\u6ea2<\u6eaf"
-                + "<\u6ed3<\u6eb6<\u6ec2<\u6e90<\u6e9d<\u6ec7<\u6ec5"
-                + "<\u6ea5<\u6e98<\u6ebc<\u6eba<\u6eab<\u6ed1<\u6e96"
-                + "<\u6e9c<\u6ec4<\u6ed4<\u6eaa<\u6ea7<\u6eb4<\u714e"
-                + "<\u7159<\u7169<\u7164<\u7149<\u7167<\u715c<\u716c"
-                + "<\u7166<\u714c<\u7165<\u715e<\u7146<\u7168<\u7156"
-                + "<\u723a<\u7252<\u7337<\u7345<\u733f<\u733e<\u746f"
-                + "<\u745a<\u7455<\u745f<\u745e<\u7441<\u743f<\u7459"
-                + "<\u745b<\u745c<\u7576<\u7578<\u7600<\u75f0<\u7601"
-                + "<\u75f2<\u75f1<\u75fa<\u75ff<\u75f4<\u75f3<\u76de"
-                + "<\u76df<\u775b<\u776b<\u7766<\u775e<\u7763<\u7779"
-                + "<\u776a<\u776c<\u775c<\u7765<\u7768<\u7762<\u77ee"
-                + "<\u788e<\u78b0<\u7897<\u7898<\u788c<\u7889<\u787c"
-                + "<\u7891<\u7893<\u787f<\u797a<\u797f<\u7981<\u842c"
-                + "<\u79bd<\u7a1c<\u7a1a<\u7a20<\u7a14<\u7a1f<\u7a1e"
-                + "<\u7a9f<\u7aa0<\u7b77<\u7bc0<\u7b60<\u7b6e<\u7b67"
-                + "<\u7cb1<\u7cb3<\u7cb5<\u7d93<\u7d79<\u7d91<\u7d81"
-                + "<\u7d8f<\u7d5b<\u7f6e<\u7f69<\u7f6a<\u7f72<\u7fa9"
-                + "<\u7fa8<\u7fa4<\u8056<\u8058<\u8086<\u8084<\u8171"
-                + "<\u8170<\u8178<\u8165<\u816e<\u8173<\u816b<\u8179"
-                + "<\u817a<\u8166<\u8205<\u8247<\u8482<\u8477<\u843d"
-                + "<\u8431<\u8475<\u8466<\u846b<\u8449<\u846c<\u845b"
-                + "<\u843c<\u8435<\u8461<\u8463<\u8469<\u846d<\u8446"
-                + "<\u865e<\u865c<\u865f<\u86f9<\u8713<\u8708<\u8707"
-                + "<\u8700<\u86fe<\u86fb<\u8702<\u8703<\u8706<\u870a"
-                + "<\u8859<\u88df<\u88d4<\u88d9<\u88dc<\u88d8<\u88dd"
-                + "<\u88e1<\u88ca<\u88d5<\u88d2<\u899c<\u89e3<\u8a6b"
-                + "<\u8a72<\u8a73<\u8a66<\u8a69<\u8a70<\u8a87<\u8a7c"
-                + "<\u8a63<\u8aa0<\u8a71<\u8a85<\u8a6d<\u8a62<\u8a6e"
-                + "<\u8a6c<\u8a79<\u8a7b<\u8a3e<\u8a68<\u8c62<\u8c8a"
-                + "<\u8c89<\u8cca<\u8cc7<\u8cc8<\u8cc4<\u8cb2<\u8cc3"
-                + "<\u8cc2<\u8cc5<\u8de1<\u8ddf<\u8de8<\u8def<\u8df3"
-                + "<\u8dfa<\u8dea<\u8de4<\u8de6<\u8eb2<\u8f03<\u8f09"
-                + "<\u8efe<\u8f0a<\u8f9f<\u8fb2<\u904b<\u904a<\u9053"
-                + "<\u9042<\u9054<\u903c<\u9055<\u9050<\u9047<\u904f"
-                + "<\u904e<\u904d<\u9051<\u903e<\u9041<\u9112<\u9117"
-                + "<\u916c<\u916a<\u9169<\u91c9<\u9237<\u9257<\u9238"
-                + "<\u923d<\u9240<\u923e<\u925b<\u924b<\u9264<\u9251"
-                + "<\u9234<\u9249<\u924d<\u9245<\u9239<\u923f<\u925a"
-                + "<\u9598<\u9698<\u9694<\u9695<\u96cd<\u96cb<\u96c9"
-                + "<\u96ca<\u96f7<\u96fb<\u96f9<\u96f6<\u9756<\u9774"
-                + "<\u9776<\u9810<\u9811<\u9813<\u980a<\u9812<\u980c"
-                + "<\u98fc<\u98f4<\u98fd<\u98fe<\u99b3<\u99b1<\u99b4"
-                + "<\u9ae1<\u9ce9<\u9e82<\u9f0e<\u9f13<\u9f20<\u50e7"
-                + "<\u50ee<\u50e5<\u50d6<\u50ed<\u50da<\u50d5<\u50cf"
-                + "<\u50d1<\u50f1<\u50ce<\u50e9<\u5162<\u51f3<\u5283"
-                + "<\u5282<\u5331<\u53ad<\u55fe<\u5600<\u561b<\u5617"
-                + "<\u55fd<\u5614<\u5606<\u5609<\u560d<\u560e<\u55f7"
-                + "<\u5616<\u561f<\u5608<\u5610<\u55f6<\u5718<\u5716"
-                + "<\u5875<\u587e<\u5883<\u5893<\u588a<\u5879<\u5885"
-                + "<\u587d<\u58fd<\u5925<\u5922<\u5924<\u596a<\u5969"
-                + "<\u5ae1<\u5ae6<\u5ae9<\u5ad7<\u5ad6<\u5ad8<\u5ae3"
-                + "<\u5b75<\u5bde<\u5be7<\u5be1<\u5be5<\u5be6<\u5be8"
-                + "<\u5be2<\u5be4<\u5bdf<\u5c0d<\u5c62<\u5d84<\u5d87"
-                + "<\u5e5b<\u5e63<\u5e55<\u5e57<\u5e54<\u5ed3<\u5ed6"
-                + "<\u5f0a<\u5f46<\u5f70<\u5fb9<\u6147<\u613f<\u614b"
-                + "<\u6177<\u6162<\u6163<\u615f<\u615a<\u6158<\u6175"
-                + "<\u622a<\u6487<\u6458<\u6454<\u64a4<\u6478<\u645f"
-                + "<\u647a<\u6451<\u6467<\u6434<\u646d<\u647b<\u6572"
-                + "<\u65a1<\u65d7<\u65d6<\u66a2<\u66a8<\u669d<\u699c"
-                + "<\u69a8<\u6995<\u69c1<\u69ae<\u69d3<\u69cb<\u699b"
-                + "<\u69b7<\u69bb<\u69ab<\u69b4<\u69d0<\u69cd<\u69ad"
-                + "<\u69cc<\u69a6<\u69c3<\u69a3<\u6b49<\u6b4c<\u6c33"
-                + "<\u6f33<\u6f14<\u6efe<\u6f13<\u6ef4<\u6f29<\u6f3e"
-                + "<\u6f20<\u6f2c<\u6f0f<\u6f02<\u6f22<\u6eff<\u6eef"
-                + "<\u6f06<\u6f31<\u6f38<\u6f32<\u6f23<\u6f15<\u6f2b"
-                + "<\u6f2f<\u6f88<\u6f2a<\u6eec<\u6f01<\u6ef2<\u6ecc"
-                + "<\u6ef7<\u7194<\u7199<\u717d<\u718a<\u7184<\u7192"
-                + "<\u723e<\u7292<\u7296<\u7344<\u7350<\u7464<\u7463"
-                + "<\u746a<\u7470<\u746d<\u7504<\u7591<\u7627<\u760d"
-                + "<\u760b<\u7609<\u7613<\u76e1<\u76e3<\u7784<\u777d"
-                + "<\u777f<\u7761<\u78c1<\u789f<\u78a7<\u78b3<\u78a9"
-                + "<\u78a3<\u798e<\u798f<\u798d<\u7a2e<\u7a31<\u7aaa"
-                + "<\u7aa9<\u7aed<\u7aef<\u7ba1<\u7b95<\u7b8b<\u7b75"
-                + "<\u7b97<\u7b9d<\u7b94<\u7b8f<\u7bb8<\u7b87<\u7b84"
-                + "<\u7cb9<\u7cbd<\u7cbe<\u7dbb<\u7db0<\u7d9c<\u7dbd"
-                + "<\u7dbe<\u7da0<\u7dca<\u7db4<\u7db2<\u7db1<\u7dba"
-                + "<\u7da2<\u7dbf<\u7db5<\u7db8<\u7dad<\u7dd2<\u7dc7"
-                + "<\u7dac<\u7f70<\u7fe0<\u7fe1<\u7fdf<\u805e<\u805a"
-                + "<\u8087<\u8150<\u8180<\u818f<\u8188<\u818a<\u817f"
-                + "<\u8182<\u81e7<\u81fa<\u8207<\u8214<\u821e<\u824b"
-                + "<\u84c9<\u84bf<\u84c6<\u84c4<\u8499<\u849e<\u84b2"
-                + "<\u849c<\u84cb<\u84b8<\u84c0<\u84d3<\u8490<\u84bc"
-                + "<\u84d1<\u84ca<\u873f<\u871c<\u873b<\u8722<\u8725"
-                + "<\u8734<\u8718<\u8755<\u8737<\u8729<\u88f3<\u8902"
-                + "<\u88f4<\u88f9<\u88f8<\u88fd<\u88e8<\u891a<\u88ef"
-                + "<\u8aa6<\u8a8c<\u8a9e<\u8aa3<\u8a8d<\u8aa1<\u8a93"
-                + "<\u8aa4<\u8aaa<\u8aa5<\u8aa8<\u8a98<\u8a91<\u8a9a"
-                + "<\u8aa7<\u8c6a<\u8c8d<\u8c8c<\u8cd3<\u8cd1<\u8cd2"
-                + "<\u8d6b<\u8d99<\u8d95<\u8dfc<\u8f14<\u8f12<\u8f15"
-                + "<\u8f13<\u8fa3<\u9060<\u9058<\u905c<\u9063<\u9059"
-                + "<\u905e<\u9062<\u905d<\u905b<\u9119<\u9118<\u911e"
-                + "<\u9175<\u9178<\u9177<\u9174<\u9278<\u9280<\u9285"
-                + "<\u9298<\u9296<\u927b<\u9293<\u929c<\u92a8<\u927c"
-                + "<\u9291<\u95a1<\u95a8<\u95a9<\u95a3<\u95a5<\u95a4"
-                + "<\u9699<\u969c<\u969b<\u96cc<\u96d2<\u9700<\u977c"
-                + "<\u9785<\u97f6<\u9817<\u9818<\u98af<\u98b1<\u9903"
-                + "<\u9905<\u990c<\u9909<\u99c1<\u9aaf<\u9ab0<\u9ae6"
-                + "<\u9b41<\u9b42<\u9cf4<\u9cf6<\u9cf3<\u9ebc<\u9f3b"
-                + "<\u9f4a<\u5104<\u5100<\u50fb<\u50f5<\u50f9<\u5102"
-                + "<\u5108<\u5109<\u5105<\u51dc<\u5287<\u5288<\u5289"
-                + "<\u528d<\u528a<\u52f0<\u53b2<\u562e<\u563b<\u5639"
-                + "<\u5632<\u563f<\u5634<\u5629<\u5653<\u564e<\u5657"
-                + "<\u5674<\u5636<\u562f<\u5630<\u5880<\u589f<\u589e"
-                + "<\u58b3<\u589c<\u58ae<\u58a9<\u58a6<\u596d<\u5b09"
-                + "<\u5afb<\u5b0b<\u5af5<\u5b0c<\u5b08<\u5bee<\u5bec"
-                + "<\u5be9<\u5beb<\u5c64<\u5c65<\u5d9d<\u5d94<\u5e62"
-                + "<\u5e5f<\u5e61<\u5ee2<\u5eda<\u5edf<\u5edd<\u5ee3"
-                + "<\u5ee0<\u5f48<\u5f71<\u5fb7<\u5fb5<\u6176<\u6167"
-                + "<\u616e<\u615d<\u6155<\u6182<\u617c<\u6170<\u616b"
-                + "<\u617e<\u61a7<\u6190<\u61ab<\u618e<\u61ac<\u619a"
-                + "<\u61a4<\u6194<\u61ae<\u622e<\u6469<\u646f<\u6479"
-                + "<\u649e<\u64b2<\u6488<\u6490<\u64b0<\u64a5<\u6493"
-                + "<\u6495<\u64a9<\u6492<\u64ae<\u64ad<\u64ab<\u649a"
-                + "<\u64ac<\u6499<\u64a2<\u64b3<\u6575<\u6577<\u6578"
-                + "<\u66ae<\u66ab<\u66b4<\u66b1<\u6a23<\u6a1f<\u69e8"
-                + "<\u6a01<\u6a1e<\u6a19<\u69fd<\u6a21<\u6a13<\u6a0a"
-                + "<\u69f3<\u6a02<\u6a05<\u69ed<\u6a11<\u6b50<\u6b4e"
-                + "<\u6ba4<\u6bc5<\u6bc6<\u6f3f<\u6f7c<\u6f84<\u6f51"
-                + "<\u6f66<\u6f54<\u6f86<\u6f6d<\u6f5b<\u6f78<\u6f6e"
-                + "<\u6f8e<\u6f7a<\u6f70<\u6f64<\u6f97<\u6f58<\u6ed5"
-                + "<\u6f6f<\u6f60<\u6f5f<\u719f<\u71ac<\u71b1<\u71a8"
-                + "<\u7256<\u729b<\u734e<\u7357<\u7469<\u748b<\u7483"
-                + "<\u747e<\u7480<\u757f<\u7620<\u7629<\u761f<\u7624"
-                + "<\u7626<\u7621<\u7622<\u769a<\u76ba<\u76e4<\u778e"
-                + "<\u7787<\u778c<\u7791<\u778b<\u78cb<\u78c5<\u78ba"
-                + "<\u78ca<\u78be<\u78d5<\u78bc<\u78d0<\u7a3f<\u7a3c"
-                + "<\u7a40<\u7a3d<\u7a37<\u7a3b<\u7aaf<\u7aae<\u7bad"
-                + "<\u7bb1<\u7bc4<\u7bb4<\u7bc6<\u7bc7<\u7bc1<\u7ba0"
-                + "<\u7bcc<\u7cca<\u7de0<\u7df4<\u7def<\u7dfb<\u7dd8"
-                + "<\u7dec<\u7ddd<\u7de8<\u7de3<\u7dda<\u7dde<\u7de9"
-                + "<\u7d9e<\u7dd9<\u7df2<\u7df9<\u7f75<\u7f77<\u7faf"
-                + "<\u7fe9<\u8026<\u819b<\u819c<\u819d<\u81a0<\u819a"
-                + "<\u8198<\u8517<\u853d<\u851a<\u84ee<\u852c<\u852d"
-                + "<\u8513<\u8511<\u8523<\u8521<\u8514<\u84ec<\u8525"
-                + "<\u84ff<\u8506<\u8782<\u8774<\u8776<\u8760<\u8766"
-                + "<\u8778<\u8768<\u8759<\u8757<\u874c<\u8753<\u885b"
-                + "<\u885d<\u8910<\u8907<\u8912<\u8913<\u8915<\u890a"
-                + "<\u8abc<\u8ad2<\u8ac7<\u8ac4<\u8a95<\u8acb<\u8af8"
-                + "<\u8ab2<\u8ac9<\u8ac2<\u8abf<\u8ab0<\u8ad6<\u8acd"
-                + "<\u8ab6<\u8ab9<\u8adb<\u8c4c<\u8c4e<\u8c6c<\u8ce0"
-                + "<\u8cde<\u8ce6<\u8ce4<\u8cec<\u8ced<\u8ce2<\u8ce3"
-                + "<\u8cdc<\u8cea<\u8ce1<\u8d6d<\u8d9f<\u8da3<\u8e2b"
-                + "<\u8e10<\u8e1d<\u8e22<\u8e0f<\u8e29<\u8e1f<\u8e21"
-                + "<\u8e1e<\u8eba<\u8f1d<\u8f1b<\u8f1f<\u8f29<\u8f26"
-                + "<\u8f2a<\u8f1c<\u8f1e<\u8f25<\u9069<\u906e<\u9068"
-                + "<\u906d<\u9077<\u9130<\u912d<\u9127<\u9131<\u9187"
-                + "<\u9189<\u918b<\u9183<\u92c5<\u92bb<\u92b7<\u92ea"
-                + "<\u92ac<\u92e4<\u92c1<\u92b3<\u92bc<\u92d2<\u92c7"
-                + "<\u92f0<\u92b2<\u95ad<\u95b1<\u9704<\u9706<\u9707"
-                + "<\u9709<\u9760<\u978d<\u978b<\u978f<\u9821<\u982b"
-                + "<\u981c<\u98b3<\u990a<\u9913<\u9912<\u9918<\u99dd"
-                + "<\u99d0<\u99df<\u99db<\u99d1<\u99d5<\u99d2<\u99d9"
-                + "<\u9ab7<\u9aee<\u9aef<\u9b27<\u9b45<\u9b44<\u9b77"
-                + "<\u9b6f<\u9d06<\u9d09<\u9d03<\u9ea9<\u9ebe<\u9ece"
-                + "<\u58a8<\u9f52<\u5112<\u5118<\u5114<\u5110<\u5115"
-                + "<\u5180<\u51aa<\u51dd<\u5291<\u5293<\u52f3<\u5659"
-                + "<\u566b<\u5679<\u5669<\u5664<\u5678<\u566a<\u5668"
-                + "<\u5665<\u5671<\u566f<\u566c<\u5662<\u5676<\u58c1"
-                + "<\u58be<\u58c7<\u58c5<\u596e<\u5b1d<\u5b34<\u5b78"
-                + "<\u5bf0<\u5c0e<\u5f4a<\u61b2<\u6191<\u61a9<\u618a"
-                + "<\u61cd<\u61b6<\u61be<\u61ca<\u61c8<\u6230<\u64c5"
-                + "<\u64c1<\u64cb<\u64bb<\u64bc<\u64da<\u64c4<\u64c7"
-                + "<\u64c2<\u64cd<\u64bf<\u64d2<\u64d4<\u64be<\u6574"
-                + "<\u66c6<\u66c9<\u66b9<\u66c4<\u66c7<\u66b8<\u6a3d"
-                + "<\u6a38<\u6a3a<\u6a59<\u6a6b<\u6a58<\u6a39<\u6a44"
-                + "<\u6a62<\u6a61<\u6a4b<\u6a47<\u6a35<\u6a5f<\u6a48"
-                + "<\u6b59<\u6b77<\u6c05<\u6fc2<\u6fb1<\u6fa1<\u6fc3"
-                + "<\u6fa4<\u6fc1<\u6fa7<\u6fb3<\u6fc0<\u6fb9<\u6fb6"
-                + "<\u6fa6<\u6fa0<\u6fb4<\u71be<\u71c9<\u71d0<\u71d2"
-                + "<\u71c8<\u71d5<\u71b9<\u71ce<\u71d9<\u71dc<\u71c3"
-                + "<\u71c4<\u7368<\u749c<\u74a3<\u7498<\u749f<\u749e"
-                + "<\u74e2<\u750c<\u750d<\u7634<\u7638<\u763a<\u76e7"
-                + "<\u76e5<\u77a0<\u779e<\u779f<\u77a5<\u78e8<\u78da"
-                + "<\u78ec<\u78e7<\u79a6<\u7a4d<\u7a4e<\u7a46<\u7a4c"
-                + "<\u7a4b<\u7aba<\u7bd9<\u7c11<\u7bc9<\u7be4<\u7bdb"
-                + "<\u7be1<\u7be9<\u7be6<\u7cd5<\u7cd6<\u7e0a<\u7e11"
-                + "<\u7e08<\u7e1b<\u7e23<\u7e1e<\u7e1d<\u7e09<\u7e10"
-                + "<\u7f79<\u7fb2<\u7ff0<\u7ff1<\u7fee<\u8028<\u81b3"
-                + "<\u81a9<\u81a8<\u81fb<\u8208<\u8258<\u8259<\u854a"
-                + "<\u8559<\u8548<\u8568<\u8569<\u8543<\u8549<\u856d"
-                + "<\u856a<\u855e<\u8783<\u879f<\u879e<\u87a2<\u878d"
-                + "<\u8861<\u892a<\u8932<\u8925<\u892b<\u8921<\u89aa"
-                + "<\u89a6<\u8ae6<\u8afa<\u8aeb<\u8af1<\u8b00<\u8adc"
-                + "<\u8ae7<\u8aee<\u8afe<\u8b01<\u8b02<\u8af7<\u8aed"
-                + "<\u8af3<\u8af6<\u8afc<\u8c6b<\u8c6d<\u8c93<\u8cf4"
-                + "<\u8e44<\u8e31<\u8e34<\u8e42<\u8e39<\u8e35<\u8f3b"
-                + "<\u8f2f<\u8f38<\u8f33<\u8fa8<\u8fa6<\u9075<\u9074"
-                + "<\u9078<\u9072<\u907c<\u907a<\u9134<\u9192<\u9320"
-                + "<\u9336<\u92f8<\u9333<\u932f<\u9322<\u92fc<\u932b"
-                + "<\u9304<\u931a<\u9310<\u9326<\u9321<\u9315<\u932e"
-                + "<\u9319<\u95bb<\u96a7<\u96a8<\u96aa<\u96d5<\u970e"
-                + "<\u9711<\u9716<\u970d<\u9713<\u970f<\u975b<\u975c"
-                + "<\u9766<\u9798<\u9830<\u9838<\u983b<\u9837<\u982d"
-                + "<\u9839<\u9824<\u9910<\u9928<\u991e<\u991b<\u9921"
-                + "<\u991a<\u99ed<\u99e2<\u99f1<\u9ab8<\u9abc<\u9afb"
-                + "<\u9aed<\u9b28<\u9b91<\u9d15<\u9d23<\u9d26<\u9d28"
-                + "<\u9d12<\u9d1b<\u9ed8<\u9ed4<\u9f8d<\u9f9c<\u512a"
-                + "<\u511f<\u5121<\u5132<\u52f5<\u568e<\u5680<\u5690"
-                + "<\u5685<\u5687<\u568f<\u58d5<\u58d3<\u58d1<\u58ce"
-                + "<\u5b30<\u5b2a<\u5b24<\u5b7a<\u5c37<\u5c68<\u5dbc"
-                + "<\u5dba<\u5dbd<\u5db8<\u5e6b<\u5f4c<\u5fbd<\u61c9"
-                + "<\u61c2<\u61c7<\u61e6<\u61cb<\u6232<\u6234<\u64ce"
-                + "<\u64ca<\u64d8<\u64e0<\u64f0<\u64e6<\u64ec<\u64f1"
-                + "<\u64e2<\u64ed<\u6582<\u6583<\u66d9<\u66d6<\u6a80"
-                + "<\u6a94<\u6a84<\u6aa2<\u6a9c<\u6adb<\u6aa3<\u6a7e"
-                + "<\u6a97<\u6a90<\u6aa0<\u6b5c<\u6bae<\u6bda<\u6c08"
-                + "<\u6fd8<\u6ff1<\u6fdf<\u6fe0<\u6fdb<\u6fe4<\u6feb"
-                + "<\u6fef<\u6f80<\u6fec<\u6fe1<\u6fe9<\u6fd5<\u6fee"
-                + "<\u6ff0<\u71e7<\u71df<\u71ee<\u71e6<\u71e5<\u71ed"
-                + "<\u71ec<\u71f4<\u71e0<\u7235<\u7246<\u7370<\u7372"
-                + "<\u74a9<\u74b0<\u74a6<\u74a8<\u7646<\u7642<\u764c"
-                + "<\u76ea<\u77b3<\u77aa<\u77b0<\u77ac<\u77a7<\u77ad"
-                + "<\u77ef<\u78f7<\u78fa<\u78f4<\u78ef<\u7901<\u79a7"
-                + "<\u79aa<\u7a57<\u7abf<\u7c07<\u7c0d<\u7bfe<\u7bf7"
-                + "<\u7c0c<\u7be0<\u7ce0<\u7cdc<\u7cde<\u7ce2<\u7cdf"
-                + "<\u7cd9<\u7cdd<\u7e2e<\u7e3e<\u7e46<\u7e37<\u7e32"
-                + "<\u7e43<\u7e2b<\u7e3d<\u7e31<\u7e45<\u7e41<\u7e34"
-                + "<\u7e39<\u7e48<\u7e35<\u7e3f<\u7e2f<\u7f44<\u7ff3"
-                + "<\u7ffc<\u8071<\u8072<\u8070<\u806f<\u8073<\u81c6"
-                + "<\u81c3<\u81ba<\u81c2<\u81c0<\u81bf<\u81bd<\u81c9"
-                + "<\u81be<\u81e8<\u8209<\u8271<\u85aa<\u8584<\u857e"
-                + "<\u859c<\u8591<\u8594<\u85af<\u859b<\u8587<\u85a8"
-                + "<\u858a<\u8667<\u87c0<\u87d1<\u87b3<\u87d2<\u87c6"
-                + "<\u87ab<\u87bb<\u87ba<\u87c8<\u87cb<\u893b<\u8936"
-                + "<\u8944<\u8938<\u893d<\u89ac<\u8b0e<\u8b17<\u8b19"
-                + "<\u8b1b<\u8b0a<\u8b20<\u8b1d<\u8b04<\u8b10<\u8c41"
-                + "<\u8c3f<\u8c73<\u8cfa<\u8cfd<\u8cfc<\u8cf8<\u8cfb"
-                + "<\u8da8<\u8e49<\u8e4b<\u8e48<\u8e4a<\u8f44<\u8f3e"
-                + "<\u8f42<\u8f45<\u8f3f<\u907f<\u907d<\u9084<\u9081"
-                + "<\u9082<\u9080<\u9139<\u91a3<\u919e<\u919c<\u934d"
-                + "<\u9382<\u9328<\u9375<\u934a<\u9365<\u934b<\u9318"
-                + "<\u937e<\u936c<\u935b<\u9370<\u935a<\u9354<\u95ca"
-                + "<\u95cb<\u95cc<\u95c8<\u95c6<\u96b1<\u96b8<\u96d6"
-                + "<\u971c<\u971e<\u97a0<\u97d3<\u9846<\u98b6<\u9935"
-                + "<\u9a01<\u99ff<\u9bae<\u9bab<\u9baa<\u9bad<\u9d3b"
-                + "<\u9d3f<\u9e8b<\u9ecf<\u9ede<\u9edc<\u9edd<\u9edb"
-                + "<\u9f3e<\u9f4b<\u53e2<\u5695<\u56ae<\u58d9<\u58d8"
-                + "<\u5b38<\u5f5d<\u61e3<\u6233<\u64f4<\u64f2<\u64fe"
-                + "<\u6506<\u64fa<\u64fb<\u64f7<\u65b7<\u66dc<\u6726"
-                + "<\u6ab3<\u6aac<\u6ac3<\u6abb<\u6ab8<\u6ac2<\u6aae"
-                + "<\u6aaf<\u6b5f<\u6b78<\u6baf<\u7009<\u700b<\u6ffe"
-                + "<\u7006<\u6ffa<\u7011<\u700f<\u71fb<\u71fc<\u71fe"
-                + "<\u71f8<\u7377<\u7375<\u74a7<\u74bf<\u7515<\u7656"
-                + "<\u7658<\u7652<\u77bd<\u77bf<\u77bb<\u77bc<\u790e"
-                + "<\u79ae<\u7a61<\u7a62<\u7a60<\u7ac4<\u7ac5<\u7c2b"
-                + "<\u7c27<\u7c2a<\u7c1e<\u7c23<\u7c21<\u7ce7<\u7e54"
-                + "<\u7e55<\u7e5e<\u7e5a<\u7e61<\u7e52<\u7e59<\u7f48"
-                + "<\u7ff9<\u7ffb<\u8077<\u8076<\u81cd<\u81cf<\u820a"
-                + "<\u85cf<\u85a9<\u85cd<\u85d0<\u85c9<\u85b0<\u85ba"
-                + "<\u85b9<\u85a6<\u87ef<\u87ec<\u87f2<\u87e0<\u8986"
-                + "<\u89b2<\u89f4<\u8b28<\u8b39<\u8b2c<\u8b2b<\u8c50"
-                + "<\u8d05<\u8e59<\u8e63<\u8e66<\u8e64<\u8e5f<\u8e55"
-                + "<\u8ec0<\u8f49<\u8f4d<\u9087<\u9083<\u9088<\u91ab"
-                + "<\u91ac<\u91d0<\u9394<\u938a<\u9396<\u93a2<\u93b3"
-                + "<\u93ae<\u93ac<\u93b0<\u9398<\u939a<\u9397<\u95d4"
-                + "<\u95d6<\u95d0<\u95d5<\u96e2<\u96dc<\u96d9<\u96db"
-                + "<\u96de<\u9724<\u97a3<\u97a6<\u97ad<\u97f9<\u984d"
-                + "<\u984f<\u984c<\u984e<\u9853<\u98ba<\u993e<\u993f"
-                + "<\u993d<\u992e<\u99a5<\u9a0e<\u9ac1<\u9b03<\u9b06"
-                + "<\u9b4f<\u9b4e<\u9b4d<\u9bca<\u9bc9<\u9bfd<\u9bc8"
-                + "<\u9bc0<\u9d51<\u9d5d<\u9d60<\u9ee0<\u9f15<\u9f2c"
-                + "<\u5133<\u56a5<\u58de<\u58df<\u58e2<\u5bf5<\u9f90"
-                + "<\u5eec<\u61f2<\u61f7<\u61f6<\u61f5<\u6500<\u650f"
-                + "<\u66e0<\u66dd<\u6ae5<\u6add<\u6ada<\u6ad3<\u701b"
-                + "<\u701f<\u7028<\u701a<\u701d<\u7015<\u7018<\u7206"
-                + "<\u720d<\u7258<\u72a2<\u7378<\u737a<\u74bd<\u74ca"
-                + "<\u74e3<\u7587<\u7586<\u765f<\u7661<\u77c7<\u7919"
-                + "<\u79b1<\u7a6b<\u7a69<\u7c3e<\u7c3f<\u7c38<\u7c3d"
-                + "<\u7c37<\u7c40<\u7e6b<\u7e6d<\u7e79<\u7e69<\u7e6a"
-                + "<\u7f85<\u7e73<\u7fb6<\u7fb9<\u7fb8<\u81d8<\u85e9"
-                + "<\u85dd<\u85ea<\u85d5<\u85e4<\u85e5<\u85f7<\u87fb"
-                + "<\u8805<\u880d<\u87f9<\u87fe<\u8960<\u895f<\u8956"
-                + "<\u895e<\u8b41<\u8b5c<\u8b58<\u8b49<\u8b5a<\u8b4e"
-                + "<\u8b4f<\u8b46<\u8b59<\u8d08<\u8d0a<\u8e7c<\u8e72"
-                + "<\u8e87<\u8e76<\u8e6c<\u8e7a<\u8e74<\u8f54<\u8f4e"
-                + "<\u8fad<\u908a<\u908b<\u91b1<\u91ae<\u93e1<\u93d1"
-                + "<\u93df<\u93c3<\u93c8<\u93dc<\u93dd<\u93d6<\u93e2"
-                + "<\u93cd<\u93d8<\u93e4<\u93d7<\u93e8<\u95dc<\u96b4"
-                + "<\u96e3<\u972a<\u9727<\u9761<\u97dc<\u97fb<\u985e"
-                + "<\u9858<\u985b<\u98bc<\u9945<\u9949<\u9a16<\u9a19"
-                + "<\u9b0d<\u9be8<\u9be7<\u9bd6<\u9bdb<\u9d89<\u9d61"
-                + "<\u9d72<\u9d6a<\u9d6c<\u9e92<\u9e97<\u9e93<\u9eb4"
-                + "<\u52f8<\u56a8<\u56b7<\u56b6<\u56b4<\u56bc<\u58e4"
-                + "<\u5b40<\u5b43<\u5b7d<\u5bf6<\u5dc9<\u61f8<\u61fa"
-                + "<\u6518<\u6514<\u6519<\u66e6<\u6727<\u6aec<\u703e"
-                + "<\u7030<\u7032<\u7210<\u737b<\u74cf<\u7662<\u7665"
-                + "<\u7926<\u792a<\u792c<\u792b<\u7ac7<\u7af6<\u7c4c"
-                + "<\u7c43<\u7c4d<\u7cef<\u7cf0<\u8fae<\u7e7d<\u7e7c"
-                + "<\u7e82<\u7f4c<\u8000<\u81da<\u8266<\u85fb<\u85f9"
-                + "<\u8611<\u85fa<\u8606<\u860b<\u8607<\u860a<\u8814"
-                + "<\u8815<\u8964<\u89ba<\u89f8<\u8b70<\u8b6c<\u8b66"
-                + "<\u8b6f<\u8b5f<\u8b6b<\u8d0f<\u8d0d<\u8e89<\u8e81"
-                + "<\u8e85<\u8e82<\u91b4<\u91cb<\u9418<\u9403<\u93fd"
-                + "<\u95e1<\u9730<\u98c4<\u9952<\u9951<\u99a8<\u9a2b"
-                + "<\u9a30<\u9a37<\u9a35<\u9c13<\u9c0d<\u9e79<\u9eb5"
-                + "<\u9ee8<\u9f2f<\u9f5f<\u9f63<\u9f61<\u5137<\u5138"
-                + "<\u56c1<\u56c0<\u56c2<\u5914<\u5c6c<\u5dcd<\u61fc"
-                + "<\u61fe<\u651d<\u651c<\u6595<\u66e9<\u6afb<\u6b04"
-                + "<\u6afa<\u6bb2<\u704c<\u721b<\u72a7<\u74d6<\u74d4"
-                + "<\u7669<\u77d3<\u7c50<\u7e8f<\u7e8c<\u7fbc<\u8617"
-                + "<\u862d<\u861a<\u8823<\u8822<\u8821<\u881f<\u896a"
-                + "<\u896c<\u89bd<\u8b74<\u8b77<\u8b7d<\u8d13<\u8e8a"
-                + "<\u8e8d<\u8e8b<\u8f5f<\u8faf<\u91ba<\u942e<\u9433"
-                + "<\u9435<\u943a<\u9438<\u9432<\u942b<\u95e2<\u9738"
-                + "<\u9739<\u9732<\u97ff<\u9867<\u9865<\u9957<\u9a45"
-                + "<\u9a43<\u9a40<\u9a3e<\u9acf<\u9b54<\u9b51<\u9c2d"
-                + "<\u9c25<\u9daf<\u9db4<\u9dc2<\u9db8<\u9e9d<\u9eef"
-                + "<\u9f19<\u9f5c<\u9f66<\u9f67<\u513c<\u513b<\u56c8"
-                + "<\u56ca<\u56c9<\u5b7f<\u5dd4<\u5dd2<\u5f4e<\u61ff"
-                + "<\u6524<\u6b0a<\u6b61<\u7051<\u7058<\u7380<\u74e4"
-                + "<\u758a<\u766e<\u766c<\u79b3<\u7c60<\u7c5f<\u807e"
-                + "<\u807d<\u81df<\u8972<\u896f<\u89fc<\u8b80<\u8d16"
-                + "<\u8d17<\u8e91<\u8e93<\u8f61<\u9148<\u9444<\u9451"
-                + "<\u9452<\u973d<\u973e<\u97c3<\u97c1<\u986b<\u9955"
-                + "<\u9a55<\u9a4d<\u9ad2<\u9b1a<\u9c49<\u9c31<\u9c3e"
-                + "<\u9c3b<\u9dd3<\u9dd7<\u9f34<\u9f6c<\u9f6a<\u9f94"
-                + "<\u56cc<\u5dd6<\u6200<\u6523<\u652b<\u652a<\u66ec"
-                + "<\u6b10<\u74da<\u7aca<\u7c64<\u7c63<\u7c65<\u7e93"
-                + "<\u7e96<\u7e94<\u81e2<\u8638<\u863f<\u8831<\u8b8a"
-                + "<\u9090<\u908f<\u9463<\u9460<\u9464<\u9768<\u986f"
-                + "<\u995c<\u9a5a<\u9a5b<\u9a57<\u9ad3<\u9ad4<\u9ad1"
-                + "<\u9c54<\u9c57<\u9c56<\u9de5<\u9e9f<\u9ef4<\u56d1"
-                + "<\u58e9<\u652c<\u705e<\u7671<\u7672<\u77d7<\u7f50"
-                + "<\u7f88<\u8836<\u8839<\u8862<\u8b93<\u8b92<\u8b96"
-                + "<\u8277<\u8d1b<\u91c0<\u946a<\u9742<\u9748<\u9744"
-                + "<\u97c6<\u9870<\u9a5f<\u9b22<\u9b58<\u9c5f<\u9df9"
-                + "<\u9dfa<\u9e7c<\u9e7d<\u9f07<\u9f77<\u9f72<\u5ef3"
-                + "<\u6b16<\u7063<\u7c6c<\u7c6e<\u883b<\u89c0<\u8ea1"
-                + "<\u91c1<\u9472<\u9470<\u9871<\u995e<\u9ad6<\u9b23"
-                + "<\u9ecc<\u7064<\u77da<\u8b9a<\u9477<\u97c9<\u9a62"
-                + "<\u9a65<\u7e9c<\u8b9c<\u8eaa<\u91c5<\u947d<\u947e"
-                + "<\u947c<\u9c77<\u9c78<\u9ef7<\u8c54<\u947f<\u9e1a"
-                + "<\u7228<\u9a6a<\u9b31<\u9e1b<\u9e1e<\u7c72<\u30fe"
-                + "<\u309d<\u309e<\u3005<\u3041<\u3042<\u3043<\u3044"
-                + "<\u3045<\u3046<\u3047<\u3048<\u3049<\u304a<\u304b"
-                + "<\u304c<\u304d<\u304e<\u304f<\u3050<\u3051<\u3052"
-                + "<\u3053<\u3054<\u3055<\u3056<\u3057<\u3058<\u3059"
-                + "<\u305a<\u305b<\u305c<\u305d<\u305e<\u305f<\u3060"
-                + "<\u3061<\u3062<\u3063<\u3064<\u3065<\u3066<\u3067"
-                + "<\u3068<\u3069<\u306a<\u306b<\u306c<\u306d<\u306e"
-                + "<\u306f<\u3070<\u3071<\u3072<\u3073<\u3074<\u3075"
-                + "<\u3076<\u3077<\u3078<\u3079<\u307a<\u307b<\u307c"
-                + "<\u307d<\u307e<\u307f<\u3080<\u3081<\u3082<\u3083"
-                + "<\u3084<\u3085<\u3086<\u3087<\u3088<\u3089<\u308a"
-                + "<\u308b<\u308c<\u308d<\u308e<\u308f<\u3090<\u3091"
-                + "<\u3092<\u3093<\u30a1<\u30a2<\u30a3<\u30a4<\u30a5"
-                + "<\u30a6<\u30a7<\u30a8<\u30a9<\u30aa<\u30ab<\u30ac"
-                + "<\u30ad<\u30ae<\u30af<\u30b0<\u30b1<\u30b2<\u30b3"
-                + "<\u30b4<\u30b5<\u30b6<\u30b7<\u30b8<\u30b9<\u30ba"
-                + "<\u30bb<\u30bc<\u30bd<\u30be<\u30bf<\u30c0<\u30c1"
-                + "<\u30c2<\u30c3<\u30c4<\u30c5<\u30c6<\u30c7<\u30c8"
-                + "<\u30c9<\u30ca<\u30cb<\u30cc<\u30cd<\u30ce<\u30cf"
-                + "<\u30d0<\u30d1<\u30d2<\u30d3<\u30d4<\u30d5<\u30d6"
-                + "<\u30d7<\u30d8<\u30d9<\u30da<\u30db<\u30dc<\u30dd"
-                + "<\u30de<\u30df<\u30e0<\u30e1<\u30e2<\u30e3<\u30e4"
-                + "<\u30e5<\u30e6<\u30e7<\u30e8<\u30e9<\u30ea<\u30eb"
-                + "<\u30ec<\u30ed<\u30ee<\u30ef<\u30f0<\u30f1<\u30f2"
-                + "<\u30f3<\u30f4<\u30f5<\u30f6<\u0414<\u0415<\u0401"
-                + "<\u0416<\u0417<\u0418<\u0419<\u041a<\u041b<\u041c"
-                + "<\u0423<\u0424<\u0425<\u0426<\u0427<\u0428<\u0429"
-                + "<\u042a<\u042b<\u042c<\u042d<\u042e<\u042f<\u0430"
-                + "<\u0431<\u0432<\u0433<\u0434<\u0435<\u0451<\u0436"
-                + "<\u0437<\u0438<\u0439<\u043a<\u043b<\u043c<\u043d"
-                + "<\u043e<\u043f<\u0440<\u0441<\u0442<\u0443<\u0444"
-                + "<\u0445<\u0446<\u0447<\u0448<\u0449<\u044a<\u044b"
-                + "<\u044c<\u044d<\u044e<\u044f<\u2460<\u2461<\u2462"
-                + "<\u2463<\u2464<\u2465<\u2466<\u2467<\u2468<\u2469"
-                + "<\u2474<\u2475<\u2476<\u2477<\u2478<\u2479<\u247a"
-                + "<\u247b<\u247c<\u247d<\u4e42<\u4e5c<\u51f5<\u531a"
-                + "<\u5382<\u4e07<\u4e0c<\u4e47<\u4e8d<\u56d7<\ufa0c"
-                + "<\u5c6e<\u5f73<\u4e0f<\u5187<\u4e0e<\u4e2e<\u4e93"
-                + "<\u4ec2<\u4ec9<\u4ec8<\u5198<\u52fc<\u536c<\u53b9"
-                + "<\u5720<\u5903<\u592c<\u5c10<\u5dff<\u65e1<\u6bb3"
-                + "<\u6bcc<\u6c14<\u723f<\u4e31<\u4e3c<\u4ee8<\u4edc"
-                + "<\u4ee9<\u4ee1<\u4edd<\u4eda<\u520c<\u531c<\u534c"
-                + "<\u5722<\u5723<\u5917<\u592f<\u5b81<\u5b84<\u5c12"
-                + "<\u5c3b<\u5c74<\u5c73<\u5e04<\u5e80<\u5e82<\u5fc9"
-                + "<\u6209<\u6250<\u6c15<\u6c36<\u6c43<\u6c3f<\u6c3b"
-                + "<\u72ae<\u72b0<\u738a<\u79b8<\u808a<\u961e<\u4f0e"
-                + "<\u4f18<\u4f2c<\u4ef5<\u4f14<\u4ef1<\u4f00<\u4ef7"
-                + "<\u4f08<\u4f1d<\u4f02<\u4f05<\u4f22<\u4f13<\u4f04"
-                + "<\u4ef4<\u4f12<\u51b1<\u5213<\u5209<\u5210<\u52a6"
-                + "<\u5322<\u531f<\u534d<\u538a<\u5407<\u56e1<\u56df"
-                + "<\u572e<\u572a<\u5734<\u593c<\u5980<\u597c<\u5985"
-                + "<\u597b<\u597e<\u5977<\u597f<\u5b56<\u5c15<\u5c25"
-                + "<\u5c7c<\u5c7a<\u5c7b<\u5c7e<\u5ddf<\u5e75<\u5e84"
-                + "<\u5f02<\u5f1a<\u5f74<\u5fd5<\u5fd4<\u5fcf<\u625c"
-                + "<\u625e<\u6264<\u6261<\u6266<\u6262<\u6259<\u6260"
-                + "<\u625a<\u6265<\u65ef<\u65ee<\u673e<\u6739<\u6738"
-                + "<\u673b<\u673a<\u673f<\u673c<\u6733<\u6c18<\u6c46"
-                + "<\u6c52<\u6c5c<\u6c4f<\u6c4a<\u6c54<\u6c4b<\u6c4c"
-                + "<\u7071<\u725e<\u72b4<\u72b5<\u738e<\u752a<\u767f"
-                + "<\u7a75<\u7f51<\u8278<\u827c<\u8280<\u827d<\u827f"
-                + "<\u864d<\u897e<\u9099<\u9097<\u9098<\u909b<\u9094"
-                + "<\u9622<\u9624<\u9620<\u9623<\u4f56<\u4f3b<\u4f62"
-                + "<\u4f49<\u4f53<\u4f64<\u4f3e<\u4f67<\u4f52<\u4f5f"
-                + "<\u4f41<\u4f58<\u4f2d<\u4f33<\u4f3f<\u4f61<\u518f"
-                + "<\u51b9<\u521c<\u521e<\u5221<\u52ad<\u52ae<\u5309"
-                + "<\u5363<\u5372<\u538e<\u538f<\u5430<\u5437<\u542a"
-                + "<\u5454<\u5445<\u5419<\u541c<\u5425<\u5418<\u543d"
-                + "<\u544f<\u5441<\u5428<\u5424<\u5447<\u56ee<\u56e7"
-                + "<\u56e5<\u5741<\u5745<\u574c<\u5749<\u574b<\u5752"
-                + "<\u5906<\u5940<\u59a6<\u5998<\u59a0<\u5997<\u598e"
-                + "<\u59a2<\u5990<\u598f<\u59a7<\u59a1<\u5b8e<\u5b92"
-                + "<\u5c28<\u5c2a<\u5c8d<\u5c8f<\u5c88<\u5c8b<\u5c89"
-                + "<\u5c92<\u5c8a<\u5c86<\u5c93<\u5c95<\u5de0<\u5e0a"
-                + "<\u5e0e<\u5e8b<\u5e89<\u5e8c<\u5e88<\u5e8d<\u5f05"
-                + "<\u5f1d<\u5f78<\u5f76<\u5fd2<\u5fd1<\u5fd0<\u5fed"
-                + "<\u5fe8<\u5fee<\u5ff3<\u5fe1<\u5fe4<\u5fe3<\u5ffa"
-                + "<\u5fef<\u5ff7<\u5ffb<\u6000<\u5ff4<\u623a<\u6283"
-                + "<\u628c<\u628e<\u628f<\u6294<\u6287<\u6271<\u627b"
-                + "<\u627a<\u6270<\u6281<\u6288<\u6277<\u627d<\u6272"
-                + "<\u6274<\u6537<\u65f0<\u65f4<\u65f3<\u65f2<\u65f5"
-                + "<\u6745<\u6747<\u6759<\u6755<\u674c<\u6748<\u675d"
-                + "<\u674d<\u675a<\u674b<\u6bd0<\u6c19<\u6c1a<\u6c78"
-                + "<\u6c67<\u6c6b<\u6c84<\u6c8b<\u6c8f<\u6c71<\u6c6f"
-                + "<\u6c69<\u6c9a<\u6c6d<\u6c87<\u6c95<\u6c9c<\u6c66"
-                + "<\u6c73<\u6c65<\u6c7b<\u6c8e<\u7074<\u707a<\u7263"
-                + "<\u72bf<\u72bd<\u72c3<\u72c6<\u72c1<\u72ba<\u72c5"
-                + "<\u7395<\u7397<\u7393<\u7394<\u7392<\u753a<\u7539"
-                + "<\u7594<\u7595<\u7681<\u793d<\u8034<\u8095<\u8099"
-                + "<\u8090<\u8092<\u809c<\u8290<\u828f<\u8285<\u828e"
-                + "<\u8291<\u8293<\u828a<\u8283<\u8284<\u8c78<\u8fc9"
-                + "<\u8fbf<\u909f<\u90a1<\u90a5<\u909e<\u90a7<\u90a0"
-                + "<\u9630<\u9628<\u962f<\u962d<\u4e33<\u4f98<\u4f7c"
-                + "<\u4f85<\u4f7d<\u4f80<\u4f87<\u4f76<\u4f74<\u4f89"
-                + "<\u4f84<\u4f77<\u4f4c<\u4f97<\u4f6a<\u4f9a<\u4f79"
-                + "<\u4f81<\u4f78<\u4f90<\u4f9c<\u4f94<\u4f9e<\u4f92"
-                + "<\u4f82<\u4f95<\u4f6b<\u4f6e<\u519e<\u51bc<\u51be"
-                + "<\u5235<\u5232<\u5233<\u5246<\u5231<\u52bc<\u530a"
-                + "<\u530b<\u533c<\u5392<\u5394<\u5487<\u547f<\u5481"
-                + "<\u5491<\u5482<\u5488<\u546b<\u547a<\u547e<\u5465"
-                + "<\u546c<\u5474<\u5466<\u548d<\u546f<\u5461<\u5460"
-                + "<\u5498<\u5463<\u5467<\u5464<\u56f7<\u56f9<\u576f"
-                + "<\u5772<\u576d<\u576b<\u5771<\u5770<\u5776<\u5780"
-                + "<\u5775<\u577b<\u5773<\u5774<\u5762<\u5768<\u577d"
-                + "<\u590c<\u5945<\u59b5<\u59ba<\u59cf<\u59ce<\u59b2"
-                + "<\u59cc<\u59c1<\u59b6<\u59bc<\u59c3<\u59d6<\u59b1"
-                + "<\u59bd<\u59c0<\u59c8<\u59b4<\u59c7<\u5b62<\u5b65"
-                + "<\u5b93<\u5b95<\u5c44<\u5c47<\u5cae<\u5ca4<\u5ca0"
-                + "<\u5cb5<\u5caf<\u5ca8<\u5cac<\u5c9f<\u5ca3<\u5cad"
-                + "<\u5ca2<\u5caa<\u5ca7<\u5c9d<\u5ca5<\u5cb6<\u5cb0"
-                + "<\u5ca6<\u5e17<\u5e14<\u5e19<\u5f28<\u5f22<\u5f23"
-                + "<\u5f24<\u5f54<\u5f82<\u5f7e<\u5f7d<\u5fde<\u5fe5"
-                + "<\u602d<\u6026<\u6019<\u6032<\u600b<\u6034<\u600a"
-                + "<\u6017<\u6033<\u601a<\u601e<\u602c<\u6022<\u600d"
-                + "<\u6010<\u602e<\u6013<\u6011<\u600c<\u6009<\u601c"
-                + "<\u6214<\u623d<\u62ad<\u62b4<\u62d1<\u62be<\u62aa"
-                + "<\u62b6<\u62ca<\u62ae<\u62b3<\u62af<\u62bb<\u62a9"
-                + "<\u62b0<\u62b8<\u653d<\u65a8<\u65bb<\u6609<\u65fc"
-                + "<\u6604<\u6612<\u6608<\u65fb<\u6603<\u660b<\u660d"
-                + "<\u6605<\u65fd<\u6611<\u6610<\u66f6<\u670a<\u6785"
-                + "<\u676c<\u678e<\u6792<\u6776<\u677b<\u6798<\u6786"
-                + "<\u6784<\u6774<\u678d<\u678c<\u677a<\u679f<\u6791"
-                + "<\u6799<\u6783<\u677d<\u6781<\u6778<\u6779<\u6794"
-                + "<\u6b25<\u6b80<\u6b7e<\u6bde<\u6c1d<\u6c93<\u6cec"
-                + "<\u6ceb<\u6cee<\u6cd9<\u6cb6<\u6cd4<\u6cad<\u6ce7"
-                + "<\u6cb7<\u6cd0<\u6cc2<\u6cba<\u6cc3<\u6cc6<\u6ced"
-                + "<\u6cf2<\u6cd2<\u6cdd<\u6cb4<\u6c8a<\u6c9d<\u6c80"
-                + "<\u6cde<\u6cc0<\u6d30<\u6ccd<\u6cc7<\u6cb0<\u6cf9"
-                + "<\u6ccf<\u6ce9<\u6cd1<\u7094<\u7098<\u7085<\u7093"
-                + "<\u7086<\u7084<\u7091<\u7096<\u7082<\u709a<\u7083"
-                + "<\u726a<\u72d6<\u72cb<\u72d8<\u72c9<\u72dc<\u72d2"
-                + "<\u72d4<\u72da<\u72cc<\u72d1<\u73a4<\u73a1<\u73ad"
-                + "<\u73a6<\u73a2<\u73a0<\u73ac<\u739d<\u74dd<\u74e8"
-                + "<\u753f<\u7540<\u753e<\u758c<\u7598<\u76af<\u76f3"
-                + "<\u76f1<\u76f0<\u76f5<\u77f8<\u77fc<\u77f9<\u77fb"
-                + "<\u77fa<\u77f7<\u7942<\u793f<\u79c5<\u7a78<\u7a7b"
-                + "<\u7afb<\u7c75<\u7cfd<\u8035<\u808f<\u80ae<\u80a3"
-                + "<\u80b8<\u80b5<\u80ad<\u8220<\u82a0<\u82c0<\u82ab"
-                + "<\u829a<\u8298<\u829b<\u82b5<\u82a7<\u82ae<\u82bc"
-                + "<\u829e<\u82ba<\u82b4<\u82a8<\u82a1<\u82a9<\u82c2"
-                + "<\u82a4<\u82c3<\u82b6<\u82a2<\u8670<\u866f<\u866d"
-                + "<\u866e<\u8c56<\u8fd2<\u8fcb<\u8fd3<\u8fcd<\u8fd6"
-                + "<\u8fd5<\u8fd7<\u90b2<\u90b4<\u90af<\u90b3<\u90b0"
-                + "<\u9639<\u963d<\u963c<\u963a<\u9643<\u4fcd<\u4fc5"
-                + "<\u4fd3<\u4fb2<\u4fc9<\u4fcb<\u4fc1<\u4fd4<\u4fdc"
-                + "<\u4fd9<\u4fbb<\u4fb3<\u4fdb<\u4fc7<\u4fd6<\u4fba"
-                + "<\u4fc0<\u4fb9<\u4fec<\u5244<\u5249<\u52c0<\u52c2"
-                + "<\u533d<\u537c<\u5397<\u5396<\u5399<\u5398<\u54ba"
-                + "<\u54a1<\u54ad<\u54a5<\u54cf<\u54c3<\u830d<\u54b7"
-                + "<\u54ae<\u54d6<\u54b6<\u54c5<\u54c6<\u54a0<\u5470"
-                + "<\u54bc<\u54a2<\u54be<\u5472<\u54de<\u54b0<\u57b5"
-                + "<\u579e<\u579f<\u57a4<\u578c<\u5797<\u579d<\u579b"
-                + "<\u5794<\u5798<\u578f<\u5799<\u57a5<\u579a<\u5795"
-                + "<\u58f4<\u590d<\u5953<\u59e1<\u59de<\u59ee<\u5a00"
-                + "<\u59f1<\u59dd<\u59fa<\u59fd<\u59fc<\u59f6<\u59e4"
-                + "<\u59f2<\u59f7<\u59db<\u59e9<\u59f3<\u59f5<\u59e0"
-                + "<\u59fe<\u59f4<\u59ed<\u5ba8<\u5c4c<\u5cd0<\u5cd8"
-                + "<\u5ccc<\u5cd7<\u5ccb<\u5cdb<\u5cde<\u5cda<\u5cc9"
-                + "<\u5cc7<\u5cca<\u5cd6<\u5cd3<\u5cd4<\u5ccf<\u5cc8"
-                + "<\u5cc6<\u5cce<\u5cdf<\u5cf8<\u5df9<\u5e21<\u5e22"
-                + "<\u5e23<\u5e20<\u5e24<\u5eb0<\u5ea4<\u5ea2<\u5e9b"
-                + "<\u5ea3<\u5ea5<\u5f07<\u5f2e<\u5f56<\u5f86<\u6037"
-                + "<\u6039<\u6054<\u6072<\u605e<\u6045<\u6053<\u6047"
-                + "<\u6049<\u605b<\u604c<\u6040<\u6042<\u605f<\u6024"
-                + "<\u6044<\u6058<\u6066<\u606e<\u6242<\u6243<\u62cf"
-                + "<\u630d<\u630b<\u62f5<\u630e<\u6303<\u62eb<\u62f9"
-                + "<\u630f<\u630c<\u62f8<\u62f6<\u6300<\u6313<\u6314"
-                + "<\u62fa<\u6315<\u62fb<\u62f0<\u6541<\u6543<\u65aa"
-                + "<\u65bf<\u6636<\u6621<\u6632<\u6635<\u661c<\u6626"
-                + "<\u6622<\u6633<\u662b<\u663a<\u661d<\u6634<\u6639"
-                + "<\u662e<\u670f<\u6710<\u67c1<\u67f2<\u67c8<\u67ba"
-                + "<\u67dc<\u67bb<\u67f8<\u67d8<\u67c0<\u67b7<\u67c5"
-                + "<\u67eb<\u67e4<\u67df<\u67b5<\u67cd<\u67b3<\u67f7"
-                + "<\u67f6<\u67ee<\u67e3<\u67c2<\u67b9<\u67ce<\u67e7"
-                + "<\u67f0<\u67b2<\u67fc<\u67c6<\u67ed<\u67cc<\u67ae"
-                + "<\u67e6<\u67db<\u67fa<\u67c9<\u67ca<\u67c3<\u67ea"
-                + "<\u67cb<\u6b28<\u6b82<\u6b84<\u6bb6<\u6bd6<\u6bd8"
-                + "<\u6be0<\u6c20<\u6c21<\u6d28<\u6d34<\u6d2d<\u6d1f"
-                + "<\u6d3c<\u6d3f<\u6d12<\u6d0a<\u6cda<\u6d33<\u6d04"
-                + "<\u6d19<\u6d3a<\u6d1a<\u6d11<\u6d00<\u6d1d<\u6d42"
-                + "<\u6d01<\u6d18<\u6d37<\u6d03<\u6d0f<\u6d40<\u6d07"
-                + "<\u6d20<\u6d2c<\u6d08<\u6d22<\u6d09<\u6d10<\u70b7"
-                + "<\u709f<\u70be<\u70b1<\u70b0<\u70a1<\u70b4<\u70b5"
-                + "<\u70a9<\u7241<\u7249<\u724a<\u726c<\u7270<\u7273"
-                + "<\u726e<\u72ca<\u72e4<\u72e8<\u72eb<\u72df<\u72ea"
-                + "<\u72e6<\u72e3<\u7385<\u73cc<\u73c2<\u73c8<\u73c5"
-                + "<\u73b9<\u73b6<\u73b5<\u73b4<\u73eb<\u73bf<\u73c7"
-                + "<\u73be<\u73c3<\u73c6<\u73b8<\u73cb<\u74ec<\u74ee"
-                + "<\u752e<\u7547<\u7548<\u75a7<\u75aa<\u7679<\u76c4"
-                + "<\u7708<\u7703<\u7704<\u7705<\u770a<\u76f7<\u76fb"
-                + "<\u76fa<\u77e7<\u77e8<\u7806<\u7811<\u7812<\u7805"
-                + "<\u7810<\u780f<\u780e<\u7809<\u7803<\u7813<\u794a"
-                + "<\u794c<\u794b<\u7945<\u7944<\u79d5<\u79cd<\u79cf"
-                + "<\u79d6<\u79ce<\u7a80<\u7a7e<\u7ad1<\u7b00<\u7b01"
-                + "<\u7c7a<\u7c78<\u7c79<\u7c7f<\u7c80<\u7c81<\u7d03"
-                + "<\u7d08<\u7d01<\u7f58<\u7f91<\u7f8d<\u7fbe<\u8007"
-                + "<\u800e<\u800f<\u8014<\u8037<\u80d8<\u80c7<\u80e0"
-                + "<\u80d1<\u80c8<\u80c2<\u80d0<\u80c5<\u80e3<\u80d9"
-                + "<\u80dc<\u80ca<\u80d5<\u80c9<\u80cf<\u80d7<\u80e6"
-                + "<\u80cd<\u81ff<\u8221<\u8294<\u82d9<\u82fe<\u82f9"
-                + "<\u8307<\u82e8<\u8300<\u82d5<\u833a<\u82eb<\u82d6"
-                + "<\u82f4<\u82ec<\u82e1<\u82f2<\u82f5<\u830c<\u82fb"
-                + "<\u82f6<\u82f0<\u82ea<\u82e4<\u82e0<\u82fa<\u82f3"
-                + "<\u82ed<\u8677<\u8674<\u867c<\u8673<\u8841<\u884e"
-                + "<\u8867<\u886a<\u8869<\u89d3<\u8a04<\u8a07<\u8d72"
-                + "<\u8fe3<\u8fe1<\u8fee<\u8fe0<\u90f1<\u90bd<\u90bf"
-                + "<\u90d5<\u90c5<\u90be<\u90c7<\u90cb<\u90c8<\u91d4"
-                + "<\u91d3<\u9654<\u964f<\u9651<\u9653<\u964a<\u964e"
-                + "<\u501e<\u5005<\u5007<\u5013<\u5022<\u5030<\u501b"
-                + "<\u4ff5<\u4ff4<\u5033<\u5037<\u502c<\u4ff6<\u4ff7"
-                + "<\u5017<\u501c<\u5020<\u5027<\u5035<\u502f<\u5031"
-                + "<\u500e<\u515a<\u5194<\u5193<\u51ca<\u51c4<\u51c5"
-                + "<\u51c8<\u51ce<\u5261<\u525a<\u5252<\u525e<\u525f"
-                + "<\u5255<\u5262<\u52cd<\u530e<\u539e<\u5526<\u54e2"
-                + "<\u5517<\u5512<\u54e7<\u54f3<\u54e4<\u551a<\u54ff"
-                + "<\u5504<\u5508<\u54eb<\u5511<\u5505<\u54f1<\u550a"
-                + "<\u54fb<\u54f7<\u54f8<\u54e0<\u550e<\u5503<\u550b"
-                + "<\u5701<\u5702<\u57cc<\u5832<\u57d5<\u57d2<\u57ba"
-                + "<\u57c6<\u57bd<\u57bc<\u57b8<\u57b6<\u57bf<\u57c7"
-                + "<\u57d0<\u57b9<\u57c1<\u590e<\u594a<\u5a19<\u5a16"
-                + "<\u5a2d<\u5a2e<\u5a15<\u5a0f<\u5a17<\u5a0a<\u5a1e"
-                + "<\u5a33<\u5b6c<\u5ba7<\u5bad<\u5bac<\u5c03<\u5c56"
-                + "<\u5c54<\u5cec<\u5cff<\u5cee<\u5cf1<\u5cf7<\u5d00"
-                + "<\u5cf9<\u5e29<\u5e28<\u5ea8<\u5eae<\u5eaa<\u5eac"
-                + "<\u5f33<\u5f30<\u5f67<\u605d<\u605a<\u6067<\u6041"
-                + "<\u60a2<\u6088<\u6080<\u6092<\u6081<\u609d<\u6083"
-                + "<\u6095<\u609b<\u6097<\u6087<\u609c<\u608e<\u6219"
-                + "<\u6246<\u62f2<\u6310<\u6356<\u632c<\u6344<\u6345"
-                + "<\u6336<\u6343<\u63e4<\u6339<\u634b<\u634a<\u633c"
-                + "<\u6329<\u6341<\u6334<\u6358<\u6354<\u6359<\u632d"
-                + "<\u6347<\u6333<\u635a<\u6351<\u6338<\u6357<\u6340"
-                + "<\u6348<\u654a<\u6546<\u65c6<\u65c3<\u65c4<\u65c2"
-                + "<\u664a<\u665f<\u6647<\u6651<\u6712<\u6713<\u681f"
-                + "<\u681a<\u6849<\u6832<\u6833<\u683b<\u684b<\u684f"
-                + "<\u6816<\u6831<\u681c<\u6835<\u682b<\u682d<\u682f"
-                + "<\u684e<\u6844<\u6834<\u681d<\u6812<\u6814<\u6826"
-                + "<\u6828<\u682e<\u684d<\u683a<\u6825<\u6820<\u6b2c"
-                + "<\u6b2f<\u6b2d<\u6b31<\u6b34<\u6b6d<\u8082<\u6b88"
-                + "<\u6be6<\u6be4<\u6be8<\u6be3<\u6be2<\u6be7<\u6c25"
-                + "<\u6d7a<\u6d63<\u6d64<\u6d76<\u6d0d<\u6d61<\u6d92"
-                + "<\u6d58<\u6d62<\u6d6d<\u6d6f<\u6d91<\u6d8d<\u6def"
-                + "<\u6d7f<\u6d86<\u6d5e<\u6d67<\u6d60<\u6d97<\u6d70"
-                + "<\u6d7c<\u6d5f<\u6d82<\u6d98<\u6d2f<\u6d68<\u6d8b"
-                + "<\u6d7e<\u6d80<\u6d84<\u6d16<\u6d83<\u6d7b<\u6d7d"
-                + "<\u6d75<\u6d90<\u70dc<\u70d3<\u70d1<\u70dd<\u70cb"
-                + "<\u7f39<\u70e2<\u70d7<\u70d2<\u70de<\u70e0<\u70d4"
-                + "<\u70cd<\u70c5<\u70c6<\u70c7<\u70da<\u70ce<\u70e1"
-                + "<\u7242<\u7278<\u7277<\u7276<\u7300<\u72fa<\u72f4"
-                + "<\u72fe<\u72f6<\u72f3<\u72fb<\u7301<\u73d3<\u73d9"
-                + "<\u73e5<\u73d6<\u73bc<\u73e7<\u73e3<\u73e9<\u73dc"
-                + "<\u73d2<\u73db<\u73d4<\u73dd<\u73da<\u73d7<\u73d8"
-                + "<\u73e8<\u74de<\u74df<\u74f4<\u74f5<\u7521<\u755b"
-                + "<\u755f<\u75b0<\u75c1<\u75bb<\u75c4<\u75c0<\u75bf"
-                + "<\u75b6<\u75ba<\u768a<\u76c9<\u771d<\u771b<\u7710"
-                + "<\u7713<\u7712<\u7723<\u7711<\u7715<\u7719<\u771a"
-                + "<\u7722<\u7727<\u7823<\u782c<\u7822<\u7835<\u782f"
-                + "<\u7828<\u782e<\u782b<\u7821<\u7829<\u7833<\u782a"
-                + "<\u7831<\u7954<\u795b<\u794f<\u795c<\u7953<\u7952"
-                + "<\u7951<\u79eb<\u79ec<\u79e0<\u79ee<\u79ed<\u79ea"
-                + "<\u79dc<\u79de<\u79dd<\u7a86<\u7a89<\u7a85<\u7a8b"
-                + "<\u7a8c<\u7a8a<\u7a87<\u7ad8<\u7b10<\u7b04<\u7b13"
-                + "<\u7b05<\u7b0f<\u7b08<\u7b0a<\u7b0e<\u7b09<\u7b12"
-                + "<\u7c84<\u7c91<\u7c8a<\u7c8c<\u7c88<\u7c8d<\u7c85"
-                + "<\u7d1e<\u7d1d<\u7d11<\u7d0e<\u7d18<\u7d16<\u7d13"
-                + "<\u7d1f<\u7d12<\u7d0f<\u7d0c<\u7f5c<\u7f61<\u7f5e"
-                + "<\u7f60<\u7f5d<\u7f5b<\u7f96<\u7f92<\u7fc3<\u7fc2"
-                + "<\u7fc0<\u8016<\u803e<\u8039<\u80fa<\u80f2<\u80f9"
-                + "<\u80f5<\u8101<\u80fb<\u8100<\u8201<\u822f<\u8225"
-                + "<\u8333<\u832d<\u8344<\u8319<\u8351<\u8325<\u8356"
-                + "<\u833f<\u8341<\u8326<\u831c<\u8322<\u8342<\u834e"
-                + "<\u831b<\u832a<\u8308<\u833c<\u834d<\u8316<\u8324"
-                + "<\u8320<\u8337<\u832f<\u8329<\u8347<\u8345<\u834c"
-                + "<\u8353<\u831e<\u832c<\u834b<\u8327<\u8348<\u8653"
-                + "<\u8652<\u86a2<\u86a8<\u8696<\u868d<\u8691<\u869e"
-                + "<\u8687<\u8697<\u8686<\u868b<\u869a<\u8685<\u86a5"
-                + "<\u8699<\u86a1<\u86a7<\u8695<\u8698<\u868e<\u869d"
-                + "<\u8690<\u8694<\u8843<\u8844<\u886d<\u8875<\u8876"
-                + "<\u8872<\u8880<\u8871<\u887f<\u886f<\u8883<\u887e"
-                + "<\u8874<\u887c<\u8a12<\u8c47<\u8c57<\u8c7b<\u8ca4"
-                + "<\u8ca3<\u8d76<\u8d78<\u8db5<\u8db7<\u8db6<\u8ed1"
-                + "<\u8ed3<\u8ffe<\u8ff5<\u9002<\u8fff<\u8ffb<\u9004"
-                + "<\u8ffc<\u8ff6<\u90d6<\u90e0<\u90d9<\u90da<\u90e3"
-                + "<\u90df<\u90e5<\u90d8<\u90db<\u90d7<\u90dc<\u90e4"
-                + "<\u9150<\u914e<\u914f<\u91d5<\u91e2<\u91da<\u965c"
-                + "<\u965f<\u96bc<\u98e3<\u9adf<\u9b2f<\u4e7f<\u5070"
-                + "<\u506a<\u5061<\u505e<\u5060<\u5053<\u504b<\u505d"
-                + "<\u5072<\u5048<\u504d<\u5041<\u505b<\u504a<\u5062"
-                + "<\u5015<\u5045<\u505f<\u5069<\u506b<\u5063<\u5064"
-                + "<\u5046<\u5040<\u506e<\u5073<\u5057<\u5051<\u51d0"
-                + "<\u526b<\u526d<\u526c<\u526e<\u52d6<\u52d3<\u532d"
-                + "<\u539c<\u5575<\u5576<\u553c<\u554d<\u5550<\u5534"
-                + "<\u552a<\u5551<\u5562<\u5536<\u5535<\u5530<\u5552"
-                + "<\u5545<\u550c<\u5532<\u5565<\u554e<\u5539<\u5548"
-                + "<\u552d<\u553b<\u5540<\u554b<\u570a<\u5707<\u57fb"
-                + "<\u5814<\u57e2<\u57f6<\u57dc<\u57f4<\u5800<\u57ed"
-                + "<\u57fd<\u5808<\u57f8<\u580b<\u57f3<\u57cf<\u5807"
-                + "<\u57ee<\u57e3<\u57f2<\u57e5<\u57ec<\u57e1<\u580e"
-                + "<\u57fc<\u5810<\u57e7<\u5801<\u580c<\u57f1<\u57e9"
-                + "<\u57f0<\u580d<\u5804<\u595c<\u5a60<\u5a58<\u5a55"
-                + "<\u5a67<\u5a5e<\u5a38<\u5a35<\u5a6d<\u5a50<\u5a5f"
-                + "<\u5a65<\u5a6c<\u5a53<\u5a64<\u5a57<\u5a43<\u5a5d"
-                + "<\u5a52<\u5a44<\u5a5b<\u5a48<\u5a8e<\u5a3e<\u5a4d"
-                + "<\u5a39<\u5a4c<\u5a70<\u5a69<\u5a47<\u5a51<\u5a56"
-                + "<\u5a42<\u5a5c<\u5b72<\u5b6e<\u5bc1<\u5bc0<\u5c59"
-                + "<\u5d1e<\u5d0b<\u5d1d<\u5d1a<\u5d20<\u5d0c<\u5d28"
-                + "<\u5d0d<\u5d26<\u5d25<\u5d0f<\u5d30<\u5d12<\u5d23"
-                + "<\u5d1f<\u5d2e<\u5e3e<\u5e34<\u5eb1<\u5eb4<\u5eb9"
-                + "<\u5eb2<\u5eb3<\u5f36<\u5f38<\u5f9b<\u5f96<\u5f9f"
-                + "<\u608a<\u6090<\u6086<\u60be<\u60b0<\u60ba<\u60d3"
-                + "<\u60d4<\u60cf<\u60e4<\u60d9<\u60dd<\u60c8<\u60b1"
-                + "<\u60db<\u60b7<\u60ca<\u60bf<\u60c3<\u60cd<\u60c0"
-                + "<\u6332<\u6365<\u638a<\u6382<\u637d<\u63bd<\u639e"
-                + "<\u63ad<\u639d<\u6397<\u63ab<\u638e<\u636f<\u6387"
-                + "<\u6390<\u636e<\u63af<\u6375<\u639c<\u636d<\u63ae"
-                + "<\u637c<\u63a4<\u633b<\u639f<\u6378<\u6385<\u6381"
-                + "<\u6391<\u638d<\u6370<\u6553<\u65cd<\u6665<\u6661"
-                + "<\u665b<\u6659<\u665c<\u6662<\u6718<\u6879<\u6887"
-                + "<\u6890<\u689c<\u686d<\u686e<\u68ae<\u68ab<\u6956"
-                + "<\u686f<\u68a3<\u68ac<\u68a9<\u6875<\u6874<\u68b2"
-                + "<\u688f<\u6877<\u6892<\u687c<\u686b<\u6872<\u68aa"
-                + "<\u6880<\u6871<\u687e<\u689b<\u6896<\u688b<\u68a0"
-                + "<\u6889<\u68a4<\u6878<\u687b<\u6891<\u688c<\u688a"
-                + "<\u687d<\u6b36<\u6b33<\u6b37<\u6b38<\u6b91<\u6b8f"
-                + "<\u6b8d<\u6b8e<\u6b8c<\u6c2a<\u6dc0<\u6dab<\u6db4"
-                + "<\u6db3<\u6e74<\u6dac<\u6de9<\u6de2<\u6db7<\u6df6"
-                + "<\u6dd4<\u6e00<\u6dc8<\u6de0<\u6ddf<\u6dd6<\u6dbe"
-                + "<\u6de5<\u6ddc<\u6ddd<\u6ddb<\u6df4<\u6dca<\u6dbd"
-                + "<\u6ded<\u6df0<\u6dba<\u6dd5<\u6dc2<\u6dcf<\u6dc9"
-                + "<\u6dd0<\u6df2<\u6dd3<\u6dfd<\u6dd7<\u6dcd<\u6de3"
-                + "<\u6dbb<\u70fa<\u710d<\u70f7<\u7117<\u70f4<\u710c"
-                + "<\u70f0<\u7104<\u70f3<\u7110<\u70fc<\u70ff<\u7106"
-                + "<\u7113<\u7100<\u70f8<\u70f6<\u710b<\u7102<\u710e"
-                + "<\u727e<\u727b<\u727c<\u727f<\u731d<\u7317<\u7307"
-                + "<\u7311<\u7318<\u730a<\u7308<\u72ff<\u730f<\u731e"
-                + "<\u7388<\u73f6<\u73f8<\u73f5<\u7404<\u7401<\u73fd"
-                + "<\u7407<\u7400<\u73fa<\u73fc<\u73ff<\u740c<\u740b"
-                + "<\u73f4<\u7408<\u7564<\u7563<\u75ce<\u75d2<\u75cf"
-                + "<\u75cb<\u75cc<\u75d1<\u75d0<\u768f<\u7689<\u76d3"
-                + "<\u7739<\u772f<\u772d<\u7731<\u7732<\u7734<\u7733"
-                + "<\u773d<\u7725<\u773b<\u7735<\u7848<\u7852<\u7849"
-                + "<\u784d<\u784a<\u784c<\u7826<\u7845<\u7850<\u7964"
-                + "<\u7967<\u7969<\u796a<\u7963<\u796b<\u7961<\u79bb"
-                + "<\u79fa<\u79f8<\u79f6<\u79f7<\u7a8f<\u7a94<\u7a90"
-                + "<\u7b35<\u7b47<\u7b34<\u7b25<\u7b30<\u7b22<\u7b24"
-                + "<\u7b33<\u7b18<\u7b2a<\u7b1d<\u7b31<\u7b2b<\u7b2d"
-                + "<\u7b2f<\u7b32<\u7b38<\u7b1a<\u7b23<\u7c94<\u7c98"
-                + "<\u7c96<\u7ca3<\u7d35<\u7d3d<\u7d38<\u7d36<\u7d3a"
-                + "<\u7d45<\u7d2c<\u7d29<\u7d41<\u7d47<\u7d3e<\u7d3f"
-                + "<\u7d4a<\u7d3b<\u7d28<\u7f63<\u7f95<\u7f9c<\u7f9d"
-                + "<\u7f9b<\u7fca<\u7fcb<\u7fcd<\u7fd0<\u7fd1<\u7fc7"
-                + "<\u7fcf<\u7fc9<\u801f<\u801e<\u801b<\u8047<\u8043"
-                + "<\u8048<\u8118<\u8125<\u8119<\u811b<\u812d<\u811f"
-                + "<\u812c<\u811e<\u8121<\u8115<\u8127<\u811d<\u8122"
-                + "<\u8211<\u8238<\u8233<\u823a<\u8234<\u8232<\u8274"
-                + "<\u8390<\u83a3<\u83a8<\u838d<\u837a<\u8373<\u83a4"
-                + "<\u8374<\u838f<\u8381<\u8395<\u8399<\u8375<\u8394"
-                + "<\u83a9<\u837d<\u8383<\u838c<\u839d<\u839b<\u83aa"
-                + "<\u838b<\u837e<\u83a5<\u83af<\u8388<\u8397<\u83b0"
-                + "<\u837f<\u83a6<\u8387<\u83ae<\u8376<\u839a<\u8659"
-                + "<\u8656<\u86bf<\u86b7<\u86c2<\u86c1<\u86c5<\u86ba"
-                + "<\u86b0<\u86c8<\u86b9<\u86b3<\u86b8<\u86cc<\u86b4"
-                + "<\u86bb<\u86bc<\u86c3<\u86bd<\u86be<\u8852<\u8889"
-                + "<\u8895<\u88a8<\u88a2<\u88aa<\u889a<\u8891<\u88a1"
-                + "<\u889f<\u8898<\u88a7<\u8899<\u889b<\u8897<\u88a4"
-                + "<\u88ac<\u888c<\u8893<\u888e<\u8982<\u89d6<\u89d9"
-                + "<\u89d5<\u8a30<\u8a27<\u8a2c<\u8a1e<\u8c39<\u8c3b"
-                + "<\u8c5c<\u8c5d<\u8c7d<\u8ca5<\u8d7d<\u8d7b<\u8d79"
-                + "<\u8dbc<\u8dc2<\u8db9<\u8dbf<\u8dc1<\u8ed8<\u8ede"
-                + "<\u8edd<\u8edc<\u8ed7<\u8ee0<\u8ee1<\u9024<\u900b"
-                + "<\u9011<\u901c<\u900c<\u9021<\u90ef<\u90ea<\u90f0"
-                + "<\u90f4<\u90f2<\u90f3<\u90d4<\u90eb<\u90ec<\u90e9"
-                + "<\u9156<\u9158<\u915a<\u9153<\u9155<\u91ec<\u91f4"
-                + "<\u91f1<\u91f3<\u91f8<\u91e4<\u91f9<\u91ea<\u91eb"
-                + "<\u91f7<\u91e8<\u91ee<\u957a<\u9586<\u9588<\u967c"
-                + "<\u966d<\u966b<\u9671<\u966f<\u96bf<\u976a<\u9804"
-                + "<\u98e5<\u9997<\u509b<\u5095<\u5094<\u509e<\u508b"
-                + "<\u50a3<\u5083<\u508c<\u508e<\u509d<\u5068<\u509c"
-                + "<\u5092<\u5082<\u5087<\u515f<\u51d4<\u5312<\u5311"
-                + "<\u53a4<\u53a7<\u5591<\u55a8<\u55a5<\u55ad<\u5577"
-                + "<\u5645<\u55a2<\u5593<\u5588<\u558f<\u55b5<\u5581"
-                + "<\u55a3<\u5592<\u55a4<\u557d<\u558c<\u55a6<\u557f"
-                + "<\u5595<\u55a1<\u558e<\u570c<\u5829<\u5837<\u5819"
-                + "<\u581e<\u5827<\u5823<\u5828<\u57f5<\u5848<\u5825"
-                + "<\u581c<\u581b<\u5833<\u583f<\u5836<\u582e<\u5839"
-                + "<\u5838<\u582d<\u582c<\u583b<\u5961<\u5aaf<\u5a94"
-                + "<\u5a9f<\u5a7a<\u5aa2<\u5a9e<\u5a78<\u5aa6<\u5a7c"
-                + "<\u5aa5<\u5aac<\u5a95<\u5aae<\u5a37<\u5a84<\u5a8a"
-                + "<\u5a97<\u5a83<\u5a8b<\u5aa9<\u5a7b<\u5a7d<\u5a8c"
-                + "<\u5a9c<\u5a8f<\u5a93<\u5a9d<\u5bea<\u5bcd<\u5bcb"
-                + "<\u5bd4<\u5bd1<\u5bca<\u5bce<\u5c0c<\u5c30<\u5d37"
-                + "<\u5d43<\u5d6b<\u5d41<\u5d4b<\u5d3f<\u5d35<\u5d51"
-                + "<\u5d4e<\u5d55<\u5d33<\u5d3a<\u5d52<\u5d3d<\u5d31"
-                + "<\u5d59<\u5d42<\u5d39<\u5d49<\u5d38<\u5d3c<\u5d32"
-                + "<\u5d36<\u5d40<\u5d45<\u5e44<\u5e41<\u5f58<\u5fa6"
-                + "<\u5fa5<\u5fab<\u60c9<\u60b9<\u60cc<\u60e2<\u60ce"
-                + "<\u60c4<\u6114<\u60f2<\u610a<\u6116<\u6105<\u60f5"
-                + "<\u6113<\u60f8<\u60fc<\u60fe<\u60c1<\u6103<\u6118"
-                + "<\u611d<\u6110<\u60ff<\u6104<\u610b<\u624a<\u6394"
-                + "<\u63b1<\u63b0<\u63ce<\u63e5<\u63e8<\u63ef<\u63c3"
-                + "<\u649d<\u63f3<\u63ca<\u63e0<\u63f6<\u63d5<\u63f2"
-                + "<\u63f5<\u6461<\u63df<\u63be<\u63dd<\u63dc<\u63c4"
-                + "<\u63d8<\u63d3<\u63c2<\u63c7<\u63cc<\u63cb<\u63c8"
-                + "<\u63f0<\u63d7<\u63d9<\u6532<\u6567<\u656a<\u6564"
-                + "<\u655c<\u6568<\u6565<\u658c<\u659d<\u659e<\u65ae"
-                + "<\u65d0<\u65d2<\u667c<\u666c<\u667b<\u6680<\u6671"
-                + "<\u6679<\u666a<\u6672<\u6701<\u690c<\u68d3<\u6904"
-                + "<\u68dc<\u692a<\u68ec<\u68ea<\u68f1<\u690f<\u68d6"
-                + "<\u68f7<\u68eb<\u68e4<\u68f6<\u6913<\u6910<\u68f3"
-                + "<\u68e1<\u6907<\u68cc<\u6908<\u6970<\u68b4<\u6911"
-                + "<\u68ef<\u68c6<\u6914<\u68f8<\u68d0<\u68fd<\u68fc"
-                + "<\u68e8<\u690b<\u690a<\u6917<\u68ce<\u68c8<\u68dd"
-                + "<\u68de<\u68e6<\u68f4<\u68d1<\u6906<\u68d4<\u68e9"
-                + "<\u6915<\u6925<\u68c7<\u6b39<\u6b3b<\u6b3f<\u6b3c"
-                + "<\u6b94<\u6b97<\u6b99<\u6b95<\u6bbd<\u6bf0<\u6bf2"
-                + "<\u6bf3<\u6c30<\u6dfc<\u6e46<\u6e47<\u6e1f<\u6e49"
-                + "<\u6e88<\u6e3c<\u6e3d<\u6e45<\u6e62<\u6e2b<\u6e3f"
-                + "<\u6e41<\u6e5d<\u6e73<\u6e1c<\u6e33<\u6e4b<\u6e40"
-                + "<\u6e51<\u6e3b<\u6e03<\u6e2e<\u6e5e<\u6e68<\u6e5c"
-                + "<\u6e61<\u6e31<\u6e28<\u6e60<\u6e71<\u6e6b<\u6e39"
-                + "<\u6e22<\u6e30<\u6e53<\u6e65<\u6e27<\u6e78<\u6e64"
-                + "<\u6e77<\u6e55<\u6e79<\u6e52<\u6e66<\u6e35<\u6e36"
-                + "<\u6e5a<\u7120<\u711e<\u712f<\u70fb<\u712e<\u7131"
-                + "<\u7123<\u7125<\u7122<\u7132<\u711f<\u7128<\u713a"
-                + "<\u711b<\u724b<\u725a<\u7288<\u7289<\u7286<\u7285"
-                + "<\u728b<\u7312<\u730b<\u7330<\u7322<\u7331<\u7333"
-                + "<\u7327<\u7332<\u732d<\u7326<\u7323<\u7335<\u730c"
-                + "<\u742e<\u742c<\u7430<\u742b<\u7416<\u741a<\u7421"
-                + "<\u742d<\u7431<\u7424<\u7423<\u741d<\u7429<\u7420"
-                + "<\u7432<\u74fb<\u752f<\u756f<\u756c<\u75e7<\u75da"
-                + "<\u75e1<\u75e6<\u75dd<\u75df<\u75e4<\u75d7<\u7695"
-                + "<\u7692<\u76da<\u7746<\u7747<\u7744<\u774d<\u7745"
-                + "<\u774a<\u774e<\u774b<\u774c<\u77de<\u77ec<\u7860"
-                + "<\u7864<\u7865<\u785c<\u786d<\u7871<\u786a<\u786e"
-                + "<\u7870<\u7869<\u7868<\u785e<\u7862<\u7974<\u7973"
-                + "<\u7972<\u7970<\u7a02<\u7a0a<\u7a03<\u7a0c<\u7a04"
-                + "<\u7a99<\u7ae6<\u7ae4<\u7b4a<\u7b3b<\u7b44<\u7b48"
-                + "<\u7b4c<\u7b4e<\u7b40<\u7b58<\u7b45<\u7ca2<\u7c9e"
-                + "<\u7ca8<\u7ca1<\u7d58<\u7d6f<\u7d63<\u7d53<\u7d56"
-                + "<\u7d67<\u7d6a<\u7d4f<\u7d6d<\u7d5c<\u7d6b<\u7d52"
-                + "<\u7d54<\u7d69<\u7d51<\u7d5f<\u7d4e<\u7f3e<\u7f3f"
-                + "<\u7f65<\u7f66<\u7fa2<\u7fa0<\u7fa1<\u7fd7<\u8051"
-                + "<\u804f<\u8050<\u80fe<\u80d4<\u8143<\u814a<\u8152"
-                + "<\u814f<\u8147<\u813d<\u814d<\u813a<\u81e6<\u81ee"
-                + "<\u81f7<\u81f8<\u81f9<\u8204<\u823c<\u823d<\u823f"
-                + "<\u8275<\u833b<\u83cf<\u83f9<\u8423<\u83c0<\u83e8"
-                + "<\u8412<\u83e7<\u83e4<\u83fc<\u83f6<\u8410<\u83c6"
-                + "<\u83c8<\u83eb<\u83e3<\u83bf<\u8401<\u83dd<\u83e5"
-                + "<\u83d8<\u83ff<\u83e1<\u83cb<\u83ce<\u83d6<\u83f5"
-                + "<\u83c9<\u8409<\u840f<\u83de<\u8411<\u8406<\u83c2"
-                + "<\u83f3<\u83d5<\u83fa<\u83c7<\u83d1<\u83ea<\u8413"
-                + "<\u83c3<\u83ec<\u83ee<\u83c4<\u83fb<\u83d7<\u83e2"
-                + "<\u841b<\u83db<\u83fe<\u86d8<\u86e2<\u86e6<\u86d3"
-                + "<\u86e3<\u86da<\u86ea<\u86dd<\u86eb<\u86dc<\u86ec"
-                + "<\u86e9<\u86d7<\u86e8<\u86d1<\u8848<\u8856<\u8855"
-                + "<\u88ba<\u88d7<\u88b9<\u88b8<\u88c0<\u88be<\u88b6"
-                + "<\u88bc<\u88b7<\u88bd<\u88b2<\u8901<\u88c9<\u8995"
-                + "<\u8998<\u8997<\u89dd<\u89da<\u89db<\u8a4e<\u8a4d"
-                + "<\u8a39<\u8a59<\u8a40<\u8a57<\u8a58<\u8a44<\u8a45"
-                + "<\u8a52<\u8a48<\u8a51<\u8a4a<\u8a4c<\u8a4f<\u8c5f"
-                + "<\u8c81<\u8c80<\u8cba<\u8cbe<\u8cb0<\u8cb9<\u8cb5"
-                + "<\u8d84<\u8d80<\u8d89<\u8dd8<\u8dd3<\u8dcd<\u8dc7"
-                + "<\u8dd6<\u8ddc<\u8dcf<\u8dd5<\u8dd9<\u8dc8<\u8dd7"
-                + "<\u8dc5<\u8eef<\u8ef7<\u8efa<\u8ef9<\u8ee6<\u8eee"
-                + "<\u8ee5<\u8ef5<\u8ee7<\u8ee8<\u8ef6<\u8eeb<\u8ef1"
-                + "<\u8eec<\u8ef4<\u8ee9<\u902d<\u9034<\u902f<\u9106"
-                + "<\u912c<\u9104<\u90ff<\u90fc<\u9108<\u90f9<\u90fb"
-                + "<\u9101<\u9100<\u9107<\u9105<\u9103<\u9161<\u9164"
-                + "<\u915f<\u9162<\u9160<\u9201<\u920a<\u9225<\u9203"
-                + "<\u921a<\u9226<\u920f<\u920c<\u9200<\u9212<\u91ff"
-                + "<\u91fd<\u9206<\u9204<\u9227<\u9202<\u921c<\u9224"
-                + "<\u9219<\u9217<\u9205<\u9216<\u957b<\u958d<\u958c"
-                + "<\u9590<\u9687<\u967e<\u9688<\u9689<\u9683<\u9680"
-                + "<\u96c2<\u96c8<\u96c3<\u96f1<\u96f0<\u976c<\u9770"
-                + "<\u976e<\u9807<\u98a9<\u98eb<\u9ce6<\u9ef9<\u4e83"
-                + "<\u4e84<\u4eb6<\u50bd<\u50bf<\u50c6<\u50ae<\u50c4"
-                + "<\u50ca<\u50b4<\u50c8<\u50c2<\u50b0<\u50c1<\u50ba"
-                + "<\u50b1<\u50cb<\u50c9<\u50b6<\u50b8<\u51d7<\u527a"
-                + "<\u5278<\u527b<\u527c<\u55c3<\u55db<\u55cc<\u55d0"
-                + "<\u55cb<\u55ca<\u55dd<\u55c0<\u55d4<\u55c4<\u55e9"
-                + "<\u55bf<\u55d2<\u558d<\u55cf<\u55d5<\u55e2<\u55d6"
-                + "<\u55c8<\u55f2<\u55cd<\u55d9<\u55c2<\u5714<\u5853"
-                + "<\u5868<\u5864<\u584f<\u584d<\u5849<\u586f<\u5855"
-                + "<\u584e<\u585d<\u5859<\u5865<\u585b<\u583d<\u5863"
-                + "<\u5871<\u58fc<\u5ac7<\u5ac4<\u5acb<\u5aba<\u5ab8"
-                + "<\u5ab1<\u5ab5<\u5ab0<\u5abf<\u5ac8<\u5abb<\u5ac6"
-                + "<\u5ab7<\u5ac0<\u5aca<\u5ab4<\u5ab6<\u5acd<\u5ab9"
-                + "<\u5a90<\u5bd6<\u5bd8<\u5bd9<\u5c1f<\u5c33<\u5d71"
-                + "<\u5d63<\u5d4a<\u5d65<\u5d72<\u5d6c<\u5d5e<\u5d68"
-                + "<\u5d67<\u5d62<\u5df0<\u5e4f<\u5e4e<\u5e4a<\u5e4d"
-                + "<\u5e4b<\u5ec5<\u5ecc<\u5ec6<\u5ecb<\u5ec7<\u5f40"
-                + "<\u5faf<\u5fad<\u60f7<\u6149<\u614a<\u612b<\u6145"
-                + "<\u6136<\u6132<\u612e<\u6146<\u612f<\u614f<\u6129"
-                + "<\u6140<\u6220<\u9168<\u6223<\u6225<\u6224<\u63c5"
-                + "<\u63f1<\u63eb<\u6410<\u6412<\u6409<\u6420<\u6424"
-                + "<\u6433<\u6443<\u641f<\u6415<\u6418<\u6439<\u6437"
-                + "<\u6422<\u6423<\u640c<\u6426<\u6430<\u6428<\u6441"
-                + "<\u6435<\u642f<\u640a<\u641a<\u6440<\u6425<\u6427"
-                + "<\u640b<\u63e7<\u641b<\u642e<\u6421<\u640e<\u656f"
-                + "<\u6592<\u65d3<\u6686<\u668c<\u6695<\u6690<\u668b"
-                + "<\u668a<\u6699<\u6694<\u6678<\u6720<\u6966<\u695f"
-                + "<\u6938<\u694e<\u6962<\u6971<\u693f<\u6945<\u696a"
-                + "<\u6939<\u6942<\u6957<\u6959<\u697a<\u6948<\u6949"
-                + "<\u6935<\u696c<\u6933<\u693d<\u6965<\u68f0<\u6978"
-                + "<\u6934<\u6969<\u6940<\u696f<\u6944<\u6976<\u6958"
-                + "<\u6941<\u6974<\u694c<\u693b<\u694b<\u6937<\u695c"
-                + "<\u694f<\u6951<\u6932<\u6952<\u692f<\u697b<\u693c"
-                + "<\u6b46<\u6b45<\u6b43<\u6b42<\u6b48<\u6b41<\u6b9b"
-                + "<\ufa0d<\u6bfb<\u6bfc<\u6bf9<\u6bf7<\u6bf8<\u6e9b"
-                + "<\u6ed6<\u6ec8<\u6e8f<\u6ec0<\u6e9f<\u6e93<\u6e94"
-                + "<\u6ea0<\u6eb1<\u6eb9<\u6ec6<\u6ed2<\u6ebd<\u6ec1"
-                + "<\u6e9e<\u6ec9<\u6eb7<\u6eb0<\u6ecd<\u6ea6<\u6ecf"
-                + "<\u6eb2<\u6ebe<\u6ec3<\u6edc<\u6ed8<\u6e99<\u6e92"
-                + "<\u6e8e<\u6e8d<\u6ea4<\u6ea1<\u6ebf<\u6eb3<\u6ed0"
-                + "<\u6eca<\u6e97<\u6eae<\u6ea3<\u7147<\u7154<\u7152"
-                + "<\u7163<\u7160<\u7141<\u715d<\u7162<\u7172<\u7178"
-                + "<\u716a<\u7161<\u7142<\u7158<\u7143<\u714b<\u7170"
-                + "<\u715f<\u7150<\u7153<\u7144<\u714d<\u715a<\u724f"
-                + "<\u728d<\u728c<\u7291<\u7290<\u728e<\u733c<\u7342"
-                + "<\u733b<\u733a<\u7340<\u734a<\u7349<\u7444<\u744a"
-                + "<\u744b<\u7452<\u7451<\u7457<\u7440<\u744f<\u7450"
-                + "<\u744e<\u7442<\u7446<\u744d<\u7454<\u74e1<\u74ff"
-                + "<\u74fe<\u74fd<\u751d<\u7579<\u7577<\u6983<\u75ef"
-                + "<\u760f<\u7603<\u75f7<\u75fe<\u75fc<\u75f9<\u75f8"
-                + "<\u7610<\u75fb<\u75f6<\u75ed<\u75f5<\u75fd<\u7699"
-                + "<\u76b5<\u76dd<\u7755<\u775f<\u7760<\u7752<\u7756"
-                + "<\u775a<\u7769<\u7767<\u7754<\u7759<\u776d<\u77e0"
-                + "<\u7887<\u789a<\u7894<\u788f<\u7884<\u7895<\u7885"
-                + "<\u7886<\u78a1<\u7883<\u7879<\u7899<\u7880<\u7896"
-                + "<\u787b<\u797c<\u7982<\u797d<\u7979<\u7a11<\u7a18"
-                + "<\u7a19<\u7a12<\u7a17<\u7a15<\u7a22<\u7a13<\u7a1b"
-                + "<\u7a10<\u7aa3<\u7aa2<\u7a9e<\u7aeb<\u7b66<\u7b64"
-                + "<\u7b6d<\u7b74<\u7b69<\u7b72<\u7b65<\u7b73<\u7b71"
-                + "<\u7b70<\u7b61<\u7b78<\u7b76<\u7b63<\u7cb2<\u7cb4"
-                + "<\u7caf<\u7d88<\u7d86<\u7d80<\u7d8d<\u7d7f<\u7d85"
-                + "<\u7d7a<\u7d8e<\u7d7b<\u7d83<\u7d7c<\u7d8c<\u7d94"
-                + "<\u7d84<\u7d7d<\u7d92<\u7f6d<\u7f6b<\u7f67<\u7f68"
-                + "<\u7f6c<\u7fa6<\u7fa5<\u7fa7<\u7fdb<\u7fdc<\u8021"
-                + "<\u8164<\u8160<\u8177<\u815c<\u8169<\u815b<\u8162"
-                + "<\u8172<\u6721<\u815e<\u8176<\u8167<\u816f<\u8144"
-                + "<\u8161<\u821d<\u8249<\u8244<\u8240<\u8242<\u8245"
-                + "<\u84f1<\u843f<\u8456<\u8476<\u8479<\u848f<\u848d"
-                + "<\u8465<\u8451<\u8440<\u8486<\u8467<\u8430<\u844d"
-                + "<\u847d<\u845a<\u8459<\u8474<\u8473<\u845d<\u8507"
-                + "<\u845e<\u8437<\u843a<\u8434<\u847a<\u8443<\u8478"
-                + "<\u8432<\u8445<\u8429<\u83d9<\u844b<\u842f<\u8442"
-                + "<\u842d<\u845f<\u8470<\u8439<\u844e<\u844c<\u8452"
-                + "<\u846f<\u84c5<\u848e<\u843b<\u8447<\u8436<\u8433"
-                + "<\u8468<\u847e<\u8444<\u842b<\u8460<\u8454<\u846e"
-                + "<\u8450<\u870b<\u8704<\u86f7<\u870c<\u86fa<\u86d6"
-                + "<\u86f5<\u874d<\u86f8<\u870e<\u8709<\u8701<\u86f6"
-                + "<\u870d<\u8705<\u88d6<\u88cb<\u88cd<\u88ce<\u88de"
-                + "<\u88db<\u88da<\u88cc<\u88d0<\u8985<\u899b<\u89df"
-                + "<\u89e5<\u89e4<\u89e1<\u89e0<\u89e2<\u89dc<\u89e6"
-                + "<\u8a76<\u8a86<\u8a7f<\u8a61<\u8a3f<\u8a77<\u8a82"
-                + "<\u8a84<\u8a75<\u8a83<\u8a81<\u8a74<\u8a7a<\u8c3c"
-                + "<\u8c4b<\u8c4a<\u8c65<\u8c64<\u8c66<\u8c86<\u8c84"
-                + "<\u8c85<\u8ccc<\u8d68<\u8d69<\u8d91<\u8d8c<\u8d8e"
-                + "<\u8d8f<\u8d8d<\u8d93<\u8d94<\u8d90<\u8d92<\u8df0"
-                + "<\u8de0<\u8dec<\u8df1<\u8dee<\u8dd0<\u8de9<\u8de3"
-                + "<\u8de2<\u8de7<\u8df2<\u8deb<\u8df4<\u8f06<\u8eff"
-                + "<\u8f01<\u8f00<\u8f05<\u8f07<\u8f08<\u8f02<\u8f0b"
-                + "<\u9052<\u903f<\u9044<\u9049<\u903d<\u9110<\u910d"
-                + "<\u910f<\u9111<\u9116<\u9114<\u910b<\u910e<\u916e"
-                + "<\u916f<\u9248<\u9252<\u9230<\u923a<\u9266<\u9233"
-                + "<\u9265<\u925e<\u9283<\u922e<\u924a<\u9246<\u926d"
-                + "<\u926c<\u924f<\u9260<\u9267<\u926f<\u9236<\u9261"
-                + "<\u9270<\u9231<\u9254<\u9263<\u9250<\u9272<\u924e"
-                + "<\u9253<\u924c<\u9256<\u9232<\u959f<\u959c<\u959e"
-                + "<\u959b<\u9692<\u9693<\u9691<\u9697<\u96ce<\u96fa"
-                + "<\u96fd<\u96f8<\u96f5<\u9773<\u9777<\u9778<\u9772"
-                + "<\u980f<\u980d<\u980e<\u98ac<\u98f6<\u98f9<\u99af"
-                + "<\u99b2<\u99b0<\u99b5<\u9aad<\u9aab<\u9b5b<\u9cea"
-                + "<\u9ced<\u9ce7<\u9e80<\u9efd<\u50e6<\u50d4<\u50d7"
-                + "<\u50e8<\u50f3<\u50db<\u50ea<\u50dd<\u50e4<\u50d3"
-                + "<\u50ec<\u50f0<\u50ef<\u50e3<\u50e0<\u51d8<\u5280"
-                + "<\u5281<\u52e9<\u52eb<\u5330<\u53ac<\u5627<\u5615"
-                + "<\u560c<\u5612<\u55fc<\u560f<\u561c<\u5601<\u5613"
-                + "<\u5602<\u55fa<\u561d<\u5604<\u55ff<\u55f9<\u5889"
-                + "<\u587c<\u5890<\u5898<\u5886<\u5881<\u587f<\u5874"
-                + "<\u588b<\u587a<\u5887<\u5891<\u588e<\u5876<\u5882"
-                + "<\u5888<\u587b<\u5894<\u588f<\u58fe<\u596b<\u5adc"
-                + "<\u5aee<\u5ae5<\u5ad5<\u5aea<\u5ada<\u5aed<\u5aeb"
-                + "<\u5af3<\u5ae2<\u5ae0<\u5adb<\u5aec<\u5ade<\u5add"
-                + "<\u5ad9<\u5ae8<\u5adf<\u5b77<\u5be0<\u5be3<\u5c63"
-                + "<\u5d82<\u5d80<\u5d7d<\u5d86<\u5d7a<\u5d81<\u5d77"
-                + "<\u5d8a<\u5d89<\u5d88<\u5d7e<\u5d7c<\u5d8d<\u5d79"
-                + "<\u5d7f<\u5e58<\u5e59<\u5e53<\u5ed8<\u5ed1<\u5ed7"
-                + "<\u5ece<\u5edc<\u5ed5<\u5ed9<\u5ed2<\u5ed4<\u5f44"
-                + "<\u5f43<\u5f6f<\u5fb6<\u612c<\u6128<\u6141<\u615e"
-                + "<\u6171<\u6173<\u6152<\u6153<\u6172<\u616c<\u6180"
-                + "<\u6174<\u6154<\u617a<\u615b<\u6165<\u613b<\u616a"
-                + "<\u6161<\u6156<\u6229<\u6227<\u622b<\u642b<\u644d"
-                + "<\u645b<\u645d<\u6474<\u6476<\u6472<\u6473<\u647d"
-                + "<\u6475<\u6466<\u64a6<\u644e<\u6482<\u645e<\u645c"
-                + "<\u644b<\u6453<\u6460<\u6450<\u647f<\u643f<\u646c"
-                + "<\u646b<\u6459<\u6465<\u6477<\u6573<\u65a0<\u66a1"
-                + "<\u66a0<\u669f<\u6705<\u6704<\u6722<\u69b1<\u69b6"
-                + "<\u69c9<\u69a0<\u69ce<\u6996<\u69b0<\u69ac<\u69bc"
-                + "<\u6991<\u6999<\u698e<\u69a7<\u698d<\u69a9<\u69be"
-                + "<\u69af<\u69bf<\u69c4<\u69bd<\u69a4<\u69d4<\u69b9"
-                + "<\u69ca<\u699a<\u69cf<\u69b3<\u6993<\u69aa<\u69a1"
-                + "<\u699e<\u69d9<\u6997<\u6990<\u69c2<\u69b5<\u69a5"
-                + "<\u69c6<\u6b4a<\u6b4d<\u6b4b<\u6b9e<\u6b9f<\u6ba0"
-                + "<\u6bc3<\u6bc4<\u6bfe<\u6ece<\u6ef5<\u6ef1<\u6f03"
-                + "<\u6f25<\u6ef8<\u6f37<\u6efb<\u6f2e<\u6f09<\u6f4e"
-                + "<\u6f19<\u6f1a<\u6f27<\u6f18<\u6f3b<\u6f12<\u6eed"
-                + "<\u6f0a<\u6f36<\u6f73<\u6ef9<\u6eee<\u6f2d<\u6f40"
-                + "<\u6f30<\u6f3c<\u6f35<\u6eeb<\u6f07<\u6f0e<\u6f43"
-                + "<\u6f05<\u6efd<\u6ef6<\u6f39<\u6f1c<\u6efc<\u6f3a"
-                + "<\u6f1f<\u6f0d<\u6f1e<\u6f08<\u6f21<\u7187<\u7190"
-                + "<\u7189<\u7180<\u7185<\u7182<\u718f<\u717b<\u7186"
-                + "<\u7181<\u7197<\u7244<\u7253<\u7297<\u7295<\u7293"
-                + "<\u7343<\u734d<\u7351<\u734c<\u7462<\u7473<\u7471"
-                + "<\u7475<\u7472<\u7467<\u746e<\u7500<\u7502<\u7503"
-                + "<\u757d<\u7590<\u7616<\u7608<\u760c<\u7615<\u7611"
-                + "<\u760a<\u7614<\u76b8<\u7781<\u777c<\u7785<\u7782"
-                + "<\u776e<\u7780<\u776f<\u777e<\u7783<\u78b2<\u78aa"
-                + "<\u78b4<\u78ad<\u78a8<\u787e<\u78ab<\u789e<\u78a5"
-                + "<\u78a0<\u78ac<\u78a2<\u78a4<\u7998<\u798a<\u798b"
-                + "<\u7996<\u7995<\u7994<\u7993<\u7997<\u7988<\u7992"
-                + "<\u7990<\u7a2b<\u7a4a<\u7a30<\u7a2f<\u7a28<\u7a26"
-                + "<\u7aa8<\u7aab<\u7aac<\u7aee<\u7b88<\u7b9c<\u7b8a"
-                + "<\u7b91<\u7b90<\u7b96<\u7b8d<\u7b8c<\u7b9b<\u7b8e"
-                + "<\u7b85<\u7b98<\u5284<\u7b99<\u7ba4<\u7b82<\u7cbb"
-                + "<\u7cbf<\u7cbc<\u7cba<\u7da7<\u7db7<\u7dc2<\u7da3"
-                + "<\u7daa<\u7dc1<\u7dc0<\u7dc5<\u7d9d<\u7dce<\u7dc4"
-                + "<\u7dc6<\u7dcb<\u7dcc<\u7daf<\u7db9<\u7d96<\u7dbc"
-                + "<\u7d9f<\u7da6<\u7dae<\u7da9<\u7da1<\u7dc9<\u7f73"
-                + "<\u7fe2<\u7fe3<\u7fe5<\u7fde<\u8024<\u805d<\u805c"
-                + "<\u8189<\u8186<\u8183<\u8187<\u818d<\u818c<\u818b"
-                + "<\u8215<\u8497<\u84a4<\u84a1<\u849f<\u84ba<\u84ce"
-                + "<\u84c2<\u84ac<\u84ae<\u84ab<\u84b9<\u84b4<\u84c1"
-                + "<\u84cd<\u84aa<\u849a<\u84b1<\u84d0<\u849d<\u84a7"
-                + "<\u84bb<\u84a2<\u8494<\u84c7<\u84cc<\u849b<\u84a9"
-                + "<\u84af<\u84a8<\u84d6<\u8498<\u84b6<\u84cf<\u84a0"
-                + "<\u84d7<\u84d4<\u84d2<\u84db<\u84b0<\u8491<\u8661"
-                + "<\u8733<\u8723<\u8728<\u876b<\u8740<\u872e<\u871e"
-                + "<\u8721<\u8719<\u871b<\u8743<\u872c<\u8741<\u873e"
-                + "<\u8746<\u8720<\u8732<\u872a<\u872d<\u873c<\u8712"
-                + "<\u873a<\u8731<\u8735<\u8742<\u8726<\u8727<\u8738"
-                + "<\u8724<\u871a<\u8730<\u8711<\u88f7<\u88e7<\u88f1"
-                + "<\u88f2<\u88fa<\u88fe<\u88ee<\u88fc<\u88f6<\u88fb"
-                + "<\u88f0<\u88ec<\u88eb<\u899d<\u89a1<\u899f<\u899e"
-                + "<\u89e9<\u89eb<\u89e8<\u8aab<\u8a99<\u8a8b<\u8a92"
-                + "<\u8a8f<\u8a96<\u8c3d<\u8c68<\u8c69<\u8cd5<\u8ccf"
-                + "<\u8cd7<\u8d96<\u8e09<\u8e02<\u8dff<\u8e0d<\u8dfd"
-                + "<\u8e0a<\u8e03<\u8e07<\u8e06<\u8e05<\u8dfe<\u8e00"
-                + "<\u8e04<\u8f10<\u8f11<\u8f0e<\u8f0d<\u9123<\u911c"
-                + "<\u9120<\u9122<\u911f<\u911d<\u911a<\u9124<\u9121"
-                + "<\u911b<\u917a<\u9172<\u9179<\u9173<\u92a5<\u92a4"
-                + "<\u9276<\u929b<\u927a<\u92a0<\u9294<\u92aa<\u928d"
-                + "<\u92a6<\u929a<\u92ab<\u9279<\u9297<\u927f<\u92a3"
-                + "<\u92ee<\u928e<\u9282<\u9295<\u92a2<\u927d<\u9288"
-                + "<\u92a1<\u928a<\u9286<\u928c<\u9299<\u92a7<\u927e"
-                + "<\u9287<\u92a9<\u929d<\u928b<\u922d<\u969e<\u96a1"
-                + "<\u96ff<\u9758<\u977d<\u977a<\u977e<\u9783<\u9780"
-                + "<\u9782<\u977b<\u9784<\u9781<\u977f<\u97ce<\u97cd"
-                + "<\u9816<\u98ad<\u98ae<\u9902<\u9900<\u9907<\u999d"
-                + "<\u999c<\u99c3<\u99b9<\u99bb<\u99ba<\u99c2<\u99bd"
-                + "<\u99c7<\u9ab1<\u9ae3<\u9ae7<\u9b3e<\u9b3f<\u9b60"
-                + "<\u9b61<\u9b5f<\u9cf1<\u9cf2<\u9cf5<\u9ea7<\u50ff"
-                + "<\u5103<\u5130<\u50f8<\u5106<\u5107<\u50f6<\u50fe"
-                + "<\u510b<\u510c<\u50fd<\u510a<\u528b<\u528c<\u52f1"
-                + "<\u52ef<\u5648<\u5642<\u564c<\u5635<\u5641<\u564a"
-                + "<\u5649<\u5646<\u5658<\u565a<\u5640<\u5633<\u563d"
-                + "<\u562c<\u563e<\u5638<\u562a<\u563a<\u571a<\u58ab"
-                + "<\u589d<\u58b1<\u58a0<\u58a3<\u58af<\u58ac<\u58a5"
-                + "<\u58a1<\u58ff<\u5aff<\u5af4<\u5afd<\u5af7<\u5af6"
-                + "<\u5b03<\u5af8<\u5b02<\u5af9<\u5b01<\u5b07<\u5b05"
-                + "<\u5b0f<\u5c67<\u5d99<\u5d97<\u5d9f<\u5d92<\u5da2"
-                + "<\u5d93<\u5d95<\u5da0<\u5d9c<\u5da1<\u5d9a<\u5d9e"
-                + "<\u5e69<\u5e5d<\u5e60<\u5e5c<\u7df3<\u5edb<\u5ede"
-                + "<\u5ee1<\u5f49<\u5fb2<\u618b<\u6183<\u6179<\u61b1"
-                + "<\u61b0<\u61a2<\u6189<\u619b<\u6193<\u61af<\u61ad"
-                + "<\u619f<\u6192<\u61aa<\u61a1<\u618d<\u6166<\u61b3"
-                + "<\u622d<\u646e<\u6470<\u6496<\u64a0<\u6485<\u6497"
-                + "<\u649c<\u648f<\u648b<\u648a<\u648c<\u64a3<\u649f"
-                + "<\u6468<\u64b1<\u6498<\u6576<\u657a<\u6579<\u657b"
-                + "<\u65b2<\u65b3<\u66b5<\u66b0<\u66a9<\u66b2<\u66b7"
-                + "<\u66aa<\u66af<\u6a00<\u6a06<\u6a17<\u69e5<\u69f8"
-                + "<\u6a15<\u69f1<\u69e4<\u6a20<\u69ff<\u69ec<\u69e2"
-                + "<\u6a1b<\u6a1d<\u69fe<\u6a27<\u69f2<\u69ee<\u6a14"
-                + "<\u69f7<\u69e7<\u6a40<\u6a08<\u69e6<\u69fb<\u6a0d"
-                + "<\u69fc<\u69eb<\u6a09<\u6a04<\u6a18<\u6a25<\u6a0f"
-                + "<\u69f6<\u6a26<\u6a07<\u69f4<\u6a16<\u6b51<\u6ba5"
-                + "<\u6ba3<\u6ba2<\u6ba6<\u6c01<\u6c00<\u6bff<\u6c02"
-                + "<\u6f41<\u6f26<\u6f7e<\u6f87<\u6fc6<\u6f92<\u6f8d"
-                + "<\u6f89<\u6f8c<\u6f62<\u6f4f<\u6f85<\u6f5a<\u6f96"
-                + "<\u6f76<\u6f6c<\u6f82<\u6f55<\u6f72<\u6f52<\u6f50"
-                + "<\u6f57<\u6f94<\u6f93<\u6f5d<\u6f00<\u6f61<\u6f6b"
-                + "<\u6f7d<\u6f67<\u6f90<\u6f53<\u6f8b<\u6f69<\u6f7f"
-                + "<\u6f95<\u6f63<\u6f77<\u6f6a<\u6f7b<\u71b2<\u71af"
-                + "<\u719b<\u71b0<\u71a0<\u719a<\u71a9<\u71b5<\u719d"
-                + "<\u71a5<\u719e<\u71a4<\u71a1<\u71aa<\u719c<\u71a7"
-                + "<\u71b3<\u7298<\u729a<\u7358<\u7352<\u735e<\u735f"
-                + "<\u7360<\u735d<\u735b<\u7361<\u735a<\u7359<\u7362"
-                + "<\u7487<\u7489<\u748a<\u7486<\u7481<\u747d<\u7485"
-                + "<\u7488<\u747c<\u7479<\u7508<\u7507<\u757e<\u7625"
-                + "<\u761e<\u7619<\u761d<\u761c<\u7623<\u761a<\u7628"
-                + "<\u761b<\u769c<\u769d<\u769e<\u769b<\u778d<\u778f"
-                + "<\u7789<\u7788<\u78cd<\u78bb<\u78cf<\u78cc<\u78d1"
-                + "<\u78ce<\u78d4<\u78c8<\u78c3<\u78c4<\u78c9<\u799a"
-                + "<\u79a1<\u79a0<\u799c<\u79a2<\u799b<\u6b76<\u7a39"
-                + "<\u7ab2<\u7ab4<\u7ab3<\u7bb7<\u7bcb<\u7bbe<\u7bac"
-                + "<\u7bce<\u7baf<\u7bb9<\u7bca<\u7bb5<\u7cc5<\u7cc8"
-                + "<\u7ccc<\u7ccb<\u7df7<\u7ddb<\u7dea<\u7de7<\u7dd7"
-                + "<\u7de1<\u7e03<\u7dfa<\u7de6<\u7df6<\u7df1<\u7df0"
-                + "<\u7dee<\u7ddf<\u7f76<\u7fac<\u7fb0<\u7fad<\u7fed"
-                + "<\u7feb<\u7fea<\u7fec<\u7fe6<\u7fe8<\u8064<\u8067"
-                + "<\u81a3<\u819f<\u819e<\u8195<\u81a2<\u8199<\u8197"
-                + "<\u8216<\u824f<\u8253<\u8252<\u8250<\u824e<\u8251"
-                + "<\u8524<\u853b<\u850f<\u8500<\u8529<\u850e<\u8509"
-                + "<\u850d<\u851f<\u850a<\u8527<\u851c<\u84fb<\u852b"
-                + "<\u84fa<\u8508<\u850c<\u84f4<\u852a<\u84f2<\u8515"
-                + "<\u84f7<\u84eb<\u84f3<\u84fc<\u8512<\u84ea<\u84e9"
-                + "<\u8516<\u84fe<\u8528<\u851d<\u852e<\u8502<\u84fd"
-                + "<\u851e<\u84f6<\u8531<\u8526<\u84e7<\u84e8<\u84f0"
-                + "<\u84ef<\u84f9<\u8518<\u8520<\u8530<\u850b<\u8519"
-                + "<\u852f<\u8662<\u8756<\u8763<\u8764<\u8777<\u87e1"
-                + "<\u8773<\u8758<\u8754<\u875b<\u8752<\u8761<\u875a"
-                + "<\u8751<\u875e<\u876d<\u876a<\u8750<\u874e<\u875f"
-                + "<\u875d<\u876f<\u876c<\u877a<\u876e<\u875c<\u8765"
-                + "<\u874f<\u877b<\u8775<\u8762<\u8767<\u8769<\u885a"
-                + "<\u8905<\u890c<\u8914<\u890b<\u8917<\u8918<\u8919"
-                + "<\u8906<\u8916<\u8911<\u890e<\u8909<\u89a2<\u89a4"
-                + "<\u89a3<\u89ed<\u89f0<\u89ec<\u8acf<\u8ac6<\u8ab8"
-                + "<\u8ad3<\u8ad1<\u8ad4<\u8ad5<\u8abb<\u8ad7<\u8abe"
-                + "<\u8ac0<\u8ac5<\u8ad8<\u8ac3<\u8aba<\u8abd<\u8ad9"
-                + "<\u8c3e<\u8c4d<\u8c8f<\u8ce5<\u8cdf<\u8cd9<\u8ce8"
-                + "<\u8cda<\u8cdd<\u8ce7<\u8da0<\u8d9c<\u8da1<\u8d9b"
-                + "<\u8e20<\u8e23<\u8e25<\u8e24<\u8e2e<\u8e15<\u8e1b"
-                + "<\u8e16<\u8e11<\u8e19<\u8e26<\u8e27<\u8e14<\u8e12"
-                + "<\u8e18<\u8e13<\u8e1c<\u8e17<\u8e1a<\u8f2c<\u8f24"
-                + "<\u8f18<\u8f1a<\u8f20<\u8f23<\u8f16<\u8f17<\u9073"
-                + "<\u9070<\u906f<\u9067<\u906b<\u912f<\u912b<\u9129"
-                + "<\u912a<\u9132<\u9126<\u912e<\u9185<\u9186<\u918a"
-                + "<\u9181<\u9182<\u9184<\u9180<\u92d0<\u92c3<\u92c4"
-                + "<\u92c0<\u92d9<\u92b6<\u92cf<\u92f1<\u92df<\u92d8"
-                + "<\u92e9<\u92d7<\u92dd<\u92cc<\u92ef<\u92c2<\u92e8"
-                + "<\u92ca<\u92c8<\u92ce<\u92e6<\u92cd<\u92d5<\u92c9"
-                + "<\u92e0<\u92de<\u92e7<\u92d1<\u92d3<\u92b5<\u92e1"
-                + "<\u92c6<\u92b4<\u957c<\u95ac<\u95ab<\u95ae<\u95b0"
-                + "<\u96a4<\u96a2<\u96d3<\u9705<\u9708<\u9702<\u975a"
-                + "<\u978a<\u978e<\u9788<\u97d0<\u97cf<\u981e<\u981d"
-                + "<\u9826<\u9829<\u9828<\u9820<\u981b<\u9827<\u98b2"
-                + "<\u9908<\u98fa<\u9911<\u9914<\u9916<\u9917<\u9915"
-                + "<\u99dc<\u99cd<\u99cf<\u99d3<\u99d4<\u99ce<\u99c9"
-                + "<\u99d6<\u99d8<\u99cb<\u99d7<\u99cc<\u9ab3<\u9aec"
-                + "<\u9aeb<\u9af3<\u9af2<\u9af1<\u9b46<\u9b43<\u9b67"
-                + "<\u9b74<\u9b71<\u9b66<\u9b76<\u9b75<\u9b70<\u9b68"
-                + "<\u9b64<\u9b6c<\u9cfc<\u9cfa<\u9cfd<\u9cff<\u9cf7"
-                + "<\u9d07<\u9d00<\u9cf9<\u9cfb<\u9d08<\u9d05<\u9d04"
-                + "<\u9e83<\u9ed3<\u9f0f<\u9f10<\u511c<\u5113<\u5117"
-                + "<\u511a<\u5111<\u51de<\u5334<\u53e1<\u5670<\u5660"
-                + "<\u566e<\u5673<\u5666<\u5663<\u566d<\u5672<\u565e"
-                + "<\u5677<\u571c<\u571b<\u58c8<\u58bd<\u58c9<\u58bf"
-                + "<\u58ba<\u58c2<\u58bc<\u58c6<\u5b17<\u5b19<\u5b1b"
-                + "<\u5b21<\u5b14<\u5b13<\u5b10<\u5b16<\u5b28<\u5b1a"
-                + "<\u5b20<\u5b1e<\u5bef<\u5dac<\u5db1<\u5da9<\u5da7"
-                + "<\u5db5<\u5db0<\u5dae<\u5daa<\u5da8<\u5db2<\u5dad"
-                + "<\u5daf<\u5db4<\u5e67<\u5e68<\u5e66<\u5e6f<\u5ee9"
-                + "<\u5ee7<\u5ee6<\u5ee8<\u5ee5<\u5f4b<\u5fbc<\u619d"
-                + "<\u61a8<\u6196<\u61c5<\u61b4<\u61c6<\u61c1<\u61cc"
-                + "<\u61ba<\u61bf<\u61b8<\u618c<\u64d7<\u64d6<\u64d0"
-                + "<\u64cf<\u64c9<\u64bd<\u6489<\u64c3<\u64db<\u64f3"
-                + "<\u64d9<\u6533<\u657f<\u657c<\u65a2<\u66c8<\u66be"
-                + "<\u66c0<\u66ca<\u66cb<\u66cf<\u66bd<\u66bb<\u66ba"
-                + "<\u66cc<\u6723<\u6a34<\u6a66<\u6a49<\u6a67<\u6a32"
-                + "<\u6a68<\u6a3e<\u6a5d<\u6a6d<\u6a76<\u6a5b<\u6a51"
-                + "<\u6a28<\u6a5a<\u6a3b<\u6a3f<\u6a41<\u6a6a<\u6a64"
-                + "<\u6a50<\u6a4f<\u6a54<\u6a6f<\u6a69<\u6a60<\u6a3c"
-                + "<\u6a5e<\u6a56<\u6a55<\u6a4d<\u6a4e<\u6a46<\u6b55"
-                + "<\u6b54<\u6b56<\u6ba7<\u6baa<\u6bab<\u6bc8<\u6bc7"
-                + "<\u6c04<\u6c03<\u6c06<\u6fad<\u6fcb<\u6fa3<\u6fc7"
-                + "<\u6fbc<\u6fce<\u6fc8<\u6f5e<\u6fc4<\u6fbd<\u6f9e"
-                + "<\u6fca<\u6fa8<\u7004<\u6fa5<\u6fae<\u6fba<\u6fac"
-                + "<\u6faa<\u6fcf<\u6fbf<\u6fb8<\u6fa2<\u6fc9<\u6fab"
-                + "<\u6fcd<\u6faf<\u6fb2<\u6fb0<\u71c5<\u71c2<\u71bf"
-                + "<\u71b8<\u71d6<\u71c0<\u71c1<\u71cb<\u71d4<\u71ca"
-                + "<\u71c7<\u71cf<\u71bd<\u71d8<\u71bc<\u71c6<\u71da"
-                + "<\u71db<\u729d<\u729e<\u7369<\u7366<\u7367<\u736c"
-                + "<\u7365<\u736b<\u736a<\u747f<\u749a<\u74a0<\u7494"
-                + "<\u7492<\u7495<\u74a1<\u750b<\u7580<\u762f<\u762d"
-                + "<\u7631<\u763d<\u7633<\u763c<\u7635<\u7632<\u7630"
-                + "<\u76bb<\u76e6<\u779a<\u779d<\u77a1<\u779c<\u779b"
-                + "<\u77a2<\u77a3<\u7795<\u7799<\u7797<\u78dd<\u78e9"
-                + "<\u78e5<\u78ea<\u78de<\u78e3<\u78db<\u78e1<\u78e2"
-                + "<\u78ed<\u78df<\u78e0<\u79a4<\u7a44<\u7a48<\u7a47"
-                + "<\u7ab6<\u7ab8<\u7ab5<\u7ab1<\u7ab7<\u7bde<\u7be3"
-                + "<\u7be7<\u7bdd<\u7bd5<\u7be5<\u7bda<\u7be8<\u7bf9"
-                + "<\u7bd4<\u7bea<\u7be2<\u7bdc<\u7beb<\u7bd8<\u7bdf"
-                + "<\u7cd2<\u7cd4<\u7cd7<\u7cd0<\u7cd1<\u7e12<\u7e21"
-                + "<\u7e17<\u7e0c<\u7e1f<\u7e20<\u7e13<\u7e0e<\u7e1c"
-                + "<\u7e15<\u7e1a<\u7e22<\u7e0b<\u7e0f<\u7e16<\u7e0d"
-                + "<\u7e14<\u7e25<\u7e24<\u7f43<\u7f7b<\u7f7c<\u7f7a"
-                + "<\u7fb1<\u7fef<\u802a<\u8029<\u806c<\u81b1<\u81a6"
-                + "<\u81ae<\u81b9<\u81b5<\u81ab<\u81b0<\u81ac<\u81b4"
-                + "<\u81b2<\u81b7<\u81a7<\u81f2<\u8255<\u8256<\u8257"
-                + "<\u8556<\u8545<\u856b<\u854d<\u8553<\u8561<\u8558"
-                + "<\u8540<\u8546<\u8564<\u8541<\u8562<\u8544<\u8551"
-                + "<\u8547<\u8563<\u853e<\u855b<\u8571<\u854e<\u856e"
-                + "<\u8575<\u8555<\u8567<\u8560<\u858c<\u8566<\u855d"
-                + "<\u8554<\u8565<\u856c<\u8663<\u8665<\u8664<\u879b"
-                + "<\u878f<\u8797<\u8793<\u8792<\u8788<\u8781<\u8796"
-                + "<\u8798<\u8779<\u8787<\u87a3<\u8785<\u8790<\u8791"
-                + "<\u879d<\u8784<\u8794<\u879c<\u879a<\u8789<\u891e"
-                + "<\u8926<\u8930<\u892d<\u892e<\u8927<\u8931<\u8922"
-                + "<\u8929<\u8923<\u892f<\u892c<\u891f<\u89f1<\u8ae0"
-                + "<\u8ae2<\u8af2<\u8af4<\u8af5<\u8add<\u8b14<\u8ae4"
-                + "<\u8adf<\u8af0<\u8ac8<\u8ade<\u8ae1<\u8ae8<\u8aff"
-                + "<\u8aef<\u8afb<\u8c91<\u8c92<\u8c90<\u8cf5<\u8cee"
-                + "<\u8cf1<\u8cf0<\u8cf3<\u8d6c<\u8d6e<\u8da5<\u8da7"
-                + "<\u8e33<\u8e3e<\u8e38<\u8e40<\u8e45<\u8e36<\u8e3c"
-                + "<\u8e3d<\u8e41<\u8e30<\u8e3f<\u8ebd<\u8f36<\u8f2e"
-                + "<\u8f35<\u8f32<\u8f39<\u8f37<\u8f34<\u9076<\u9079"
-                + "<\u907b<\u9086<\u90fa<\u9133<\u9135<\u9136<\u9193"
-                + "<\u9190<\u9191<\u918d<\u918f<\u9327<\u931e<\u9308"
-                + "<\u931f<\u9306<\u930f<\u937a<\u9338<\u933c<\u931b"
-                + "<\u9323<\u9312<\u9301<\u9346<\u932d<\u930e<\u930d"
-                + "<\u92cb<\u931d<\u92fa<\u9325<\u9313<\u92f9<\u92f7"
-                + "<\u9334<\u9302<\u9324<\u92ff<\u9329<\u9339<\u9335"
-                + "<\u932a<\u9314<\u930c<\u930b<\u92fe<\u9309<\u9300"
-                + "<\u92fb<\u9316<\u95bc<\u95cd<\u95be<\u95b9<\u95ba"
-                + "<\u95b6<\u95bf<\u95b5<\u95bd<\u96a9<\u96d4<\u970b"
-                + "<\u9712<\u9710<\u9799<\u9797<\u9794<\u97f0<\u97f8"
-                + "<\u9835<\u982f<\u9832<\u9924<\u991f<\u9927<\u9929"
-                + "<\u999e<\u99ee<\u99ec<\u99e5<\u99e4<\u99f0<\u99e3"
-                + "<\u99ea<\u99e9<\u99e7<\u9ab9<\u9abf<\u9ab4<\u9abb"
-                + "<\u9af6<\u9afa<\u9af9<\u9af7<\u9b33<\u9b80<\u9b85"
-                + "<\u9b87<\u9b7c<\u9b7e<\u9b7b<\u9b82<\u9b93<\u9b92"
-                + "<\u9b90<\u9b7a<\u9b95<\u9b7d<\u9b88<\u9d25<\u9d17"
-                + "<\u9d20<\u9d1e<\u9d14<\u9d29<\u9d1d<\u9d18<\u9d22"
-                + "<\u9d10<\u9d19<\u9d1f<\u9e88<\u9e86<\u9e87<\u9eae"
-                + "<\u9ead<\u9ed5<\u9ed6<\u9efa<\u9f12<\u9f3d<\u5126"
-                + "<\u5125<\u5122<\u5124<\u5120<\u5129<\u52f4<\u5693"
-                + "<\u568c<\u568d<\u5686<\u5684<\u5683<\u567e<\u5682"
-                + "<\u567f<\u5681<\u58d6<\u58d4<\u58cf<\u58d2<\u5b2d"
-                + "<\u5b25<\u5b32<\u5b23<\u5b2c<\u5b27<\u5b26<\u5b2f"
-                + "<\u5b2e<\u5b7b<\u5bf1<\u5bf2<\u5db7<\u5e6c<\u5e6a"
-                + "<\u5fbe<\u5fbb<\u61c3<\u61b5<\u61bc<\u61e7<\u61e0"
-                + "<\u61e5<\u61e4<\u61e8<\u61de<\u64ef<\u64e9<\u64e3"
-                + "<\u64eb<\u64e4<\u64e8<\u6581<\u6580<\u65b6<\u65da"
-                + "<\u66d2<\u6a8d<\u6a96<\u6a81<\u6aa5<\u6a89<\u6a9f"
-                + "<\u6a9b<\u6aa1<\u6a9e<\u6a87<\u6a93<\u6a8e<\u6a95"
-                + "<\u6a83<\u6aa8<\u6aa4<\u6a91<\u6a7f<\u6aa6<\u6a9a"
-                + "<\u6a85<\u6a8c<\u6a92<\u6b5b<\u6bad<\u6c09<\u6fcc"
-                + "<\u6fa9<\u6ff4<\u6fd4<\u6fe3<\u6fdc<\u6fed<\u6fe7"
-                + "<\u6fe6<\u6fde<\u6ff2<\u6fdd<\u6fe2<\u6fe8<\u71e1"
-                + "<\u71f1<\u71e8<\u71f2<\u71e4<\u71f0<\u71e2<\u7373"
-                + "<\u736e<\u736f<\u7497<\u74b2<\u74ab<\u7490<\u74aa"
-                + "<\u74ad<\u74b1<\u74a5<\u74af<\u7510<\u7511<\u7512"
-                + "<\u750f<\u7584<\u7643<\u7648<\u7649<\u7647<\u76a4"
-                + "<\u76e9<\u77b5<\u77ab<\u77b2<\u77b7<\u77b6<\u77b4"
-                + "<\u77b1<\u77a8<\u77f0<\u78f3<\u78fd<\u7902<\u78fb"
-                + "<\u78fc<\u78f2<\u7905<\u78f9<\u78fe<\u7904<\u79ab"
-                + "<\u79a8<\u7a5c<\u7a5b<\u7a56<\u7a58<\u7a54<\u7a5a"
-                + "<\u7abe<\u7ac0<\u7ac1<\u7c05<\u7c0f<\u7bf2<\u7c00"
-                + "<\u7bff<\u7bfb<\u7c0e<\u7bf4<\u7c0b<\u7bf3<\u7c02"
-                + "<\u7c09<\u7c03<\u7c01<\u7bf8<\u7bfd<\u7c06<\u7bf0"
-                + "<\u7bf1<\u7c10<\u7c0a<\u7ce8<\u7e2d<\u7e3c<\u7e42"
-                + "<\u7e33<\u9848<\u7e38<\u7e2a<\u7e49<\u7e40<\u7e47"
-                + "<\u7e29<\u7e4c<\u7e30<\u7e3b<\u7e36<\u7e44<\u7e3a"
-                + "<\u7f45<\u7f7f<\u7f7e<\u7f7d<\u7ff4<\u7ff2<\u802c"
-                + "<\u81bb<\u81c4<\u81cc<\u81ca<\u81c5<\u81c7<\u81bc"
-                + "<\u81e9<\u825b<\u825a<\u825c<\u8583<\u8580<\u858f"
-                + "<\u85a7<\u8595<\u85a0<\u858b<\u85a3<\u857b<\u85a4"
-                + "<\u859a<\u859e<\u8577<\u857c<\u8589<\u85a1<\u857a"
-                + "<\u8578<\u8557<\u858e<\u8596<\u8586<\u858d<\u8599"
-                + "<\u859d<\u8581<\u85a2<\u8582<\u8588<\u8585<\u8579"
-                + "<\u8576<\u8598<\u8590<\u859f<\u8668<\u87be<\u87aa"
-                + "<\u87ad<\u87c5<\u87b0<\u87ac<\u87b9<\u87b5<\u87bc"
-                + "<\u87ae<\u87c9<\u87c3<\u87c2<\u87cc<\u87b7<\u87af"
-                + "<\u87c4<\u87ca<\u87b4<\u87b6<\u87bf<\u87b8<\u87bd"
-                + "<\u87de<\u87b2<\u8935<\u8933<\u893c<\u893e<\u8941"
-                + "<\u8952<\u8937<\u8942<\u89ad<\u89af<\u89ae<\u89f2"
-                + "<\u89f3<\u8b1e<\u8b18<\u8b16<\u8b11<\u8b05<\u8b0b"
-                + "<\u8b22<\u8b0f<\u8b12<\u8b15<\u8b07<\u8b0d<\u8b08"
-                + "<\u8b06<\u8b1c<\u8b13<\u8b1a<\u8c4f<\u8c70<\u8c72"
-                + "<\u8c71<\u8c6f<\u8c95<\u8c94<\u8cf9<\u8d6f<\u8e4e"
-                + "<\u8e4d<\u8e53<\u8e50<\u8e4c<\u8e47<\u8f43<\u8f40"
-                + "<\u9085<\u907e<\u9138<\u919a<\u91a2<\u919b<\u9199"
-                + "<\u919f<\u91a1<\u919d<\u91a0<\u93a1<\u9383<\u93af"
-                + "<\u9364<\u9356<\u9347<\u937c<\u9358<\u935c<\u9376"
-                + "<\u9349<\u9350<\u9351<\u9360<\u936d<\u938f<\u934c"
-                + "<\u936a<\u9379<\u9357<\u9355<\u9352<\u934f<\u9371"
-                + "<\u9377<\u937b<\u9361<\u935e<\u9363<\u9367<\u9380"
-                + "<\u934e<\u9359<\u95c7<\u95c0<\u95c9<\u95c3<\u95c5"
-                + "<\u95b7<\u96ae<\u96b0<\u96ac<\u9720<\u971f<\u9718"
-                + "<\u971d<\u9719<\u979a<\u97a1<\u979c<\u979e<\u979d"
-                + "<\u97d5<\u97d4<\u97f1<\u9841<\u9844<\u984a<\u9849"
-                + "<\u9845<\u9843<\u9925<\u992b<\u992c<\u992a<\u9933"
-                + "<\u9932<\u992f<\u992d<\u9931<\u9930<\u9998<\u99a3"
-                + "<\u99a1<\u9a02<\u99fa<\u99f4<\u99f7<\u99f9<\u99f8"
-                + "<\u99f6<\u99fb<\u99fd<\u99fe<\u99fc<\u9a03<\u9abe"
-                + "<\u9afe<\u9afd<\u9b01<\u9afc<\u9b48<\u9b9a<\u9ba8"
-                + "<\u9b9e<\u9b9b<\u9ba6<\u9ba1<\u9ba5<\u9ba4<\u9b86"
-                + "<\u9ba2<\u9ba0<\u9baf<\u9d33<\u9d41<\u9d67<\u9d36"
-                + "<\u9d2e<\u9d2f<\u9d31<\u9d38<\u9d30<\u9d45<\u9d42"
-                + "<\u9d43<\u9d3e<\u9d37<\u9d40<\u9d3d<\u7ff5<\u9d2d"
-                + "<\u9e8a<\u9e89<\u9e8d<\u9eb0<\u9ec8<\u9eda<\u9efb"
-                + "<\u9eff<\u9f24<\u9f23<\u9f22<\u9f54<\u9fa0<\u5131"
-                + "<\u512d<\u512e<\u5698<\u569c<\u5697<\u569a<\u569d"
-                + "<\u5699<\u5970<\u5b3c<\u5c69<\u5c6a<\u5dc0<\u5e6d"
-                + "<\u5e6e<\u61d8<\u61df<\u61ed<\u61ee<\u61f1<\u61ea"
-                + "<\u61f0<\u61eb<\u61d6<\u61e9<\u64ff<\u6504<\u64fd"
-                + "<\u64f8<\u6501<\u6503<\u64fc<\u6594<\u65db<\u66da"
-                + "<\u66db<\u66d8<\u6ac5<\u6ab9<\u6abd<\u6ae1<\u6ac6"
-                + "<\u6aba<\u6ab6<\u6ab7<\u6ac7<\u6ab4<\u6aad<\u6b5e"
-                + "<\u6bc9<\u6c0b<\u7007<\u700c<\u700d<\u7001<\u7005"
-                + "<\u7014<\u700e<\u6fff<\u7000<\u6ffb<\u7026<\u6ffc"
-                + "<\u6ff7<\u700a<\u7201<\u71ff<\u71f9<\u7203<\u71fd"
-                + "<\u7376<\u74b8<\u74c0<\u74b5<\u74c1<\u74be<\u74b6"
-                + "<\u74bb<\u74c2<\u7514<\u7513<\u765c<\u7664<\u7659"
-                + "<\u7650<\u7653<\u7657<\u765a<\u76a6<\u76bd<\u76ec"
-                + "<\u77c2<\u77ba<\u78ff<\u790c<\u7913<\u7914<\u7909"
-                + "<\u7910<\u7912<\u7911<\u79ad<\u79ac<\u7a5f<\u7c1c"
-                + "<\u7c29<\u7c19<\u7c20<\u7c1f<\u7c2d<\u7c1d<\u7c26"
-                + "<\u7c28<\u7c22<\u7c25<\u7c30<\u7e5c<\u7e50<\u7e56"
-                + "<\u7e63<\u7e58<\u7e62<\u7e5f<\u7e51<\u7e60<\u7e57"
-                + "<\u7e53<\u7fb5<\u7fb3<\u7ff7<\u7ff8<\u8075<\u81d1"
-                + "<\u81d2<\u81d0<\u825f<\u825e<\u85b4<\u85c6<\u85c0"
-                + "<\u85c3<\u85c2<\u85b3<\u85b5<\u85bd<\u85c7<\u85c4"
-                + "<\u85bf<\u85cb<\u85ce<\u85c8<\u85c5<\u85b1<\u85b6"
-                + "<\u85d2<\u8624<\u85b8<\u85b7<\u85be<\u8669<\u87e7"
-                + "<\u87e6<\u87e2<\u87db<\u87eb<\u87ea<\u87e5<\u87df"
-                + "<\u87f3<\u87e4<\u87d4<\u87dc<\u87d3<\u87ed<\u87d8"
-                + "<\u87e3<\u87a4<\u87d7<\u87d9<\u8801<\u87f4<\u87e8"
-                + "<\u87dd<\u8953<\u894b<\u894f<\u894c<\u8946<\u8950"
-                + "<\u8951<\u8949<\u8b2a<\u8b27<\u8b23<\u8b33<\u8b30"
-                + "<\u8b35<\u8b47<\u8b2f<\u8b3c<\u8b3e<\u8b31<\u8b25"
-                + "<\u8b37<\u8b26<\u8b36<\u8b2e<\u8b24<\u8b3b<\u8b3d"
-                + "<\u8b3a<\u8c42<\u8c75<\u8c99<\u8c98<\u8c97<\u8cfe"
-                + "<\u8d04<\u8d02<\u8d00<\u8e5c<\u8e62<\u8e60<\u8e57"
-                + "<\u8e56<\u8e5e<\u8e65<\u8e67<\u8e5b<\u8e5a<\u8e61"
-                + "<\u8e5d<\u8e69<\u8e54<\u8f46<\u8f47<\u8f48<\u8f4b"
-                + "<\u9128<\u913a<\u913b<\u913e<\u91a8<\u91a5<\u91a7"
-                + "<\u91af<\u91aa<\u93b5<\u938c<\u9392<\u93b7<\u939b"
-                + "<\u939d<\u9389<\u93a7<\u938e<\u93aa<\u939e<\u93a6"
-                + "<\u9395<\u9388<\u9399<\u939f<\u938d<\u93b1<\u9391"
-                + "<\u93b2<\u93a4<\u93a8<\u93b4<\u93a3<\u93a5<\u95d2"
-                + "<\u95d3<\u95d1<\u96b3<\u96d7<\u96da<\u5dc2<\u96df"
-                + "<\u96d8<\u96dd<\u9723<\u9722<\u9725<\u97ac<\u97ae"
-                + "<\u97a8<\u97ab<\u97a4<\u97aa<\u97a2<\u97a5<\u97d7"
-                + "<\u97d9<\u97d6<\u97d8<\u97fa<\u9850<\u9851<\u9852"
-                + "<\u98b8<\u9941<\u993c<\u993a<\u9a0f<\u9a0b<\u9a09"
-                + "<\u9a0d<\u9a04<\u9a11<\u9a0a<\u9a05<\u9a07<\u9a06"
-                + "<\u9ac0<\u9adc<\u9b08<\u9b04<\u9b05<\u9b29<\u9b35"
-                + "<\u9b4a<\u9b4c<\u9b4b<\u9bc7<\u9bc6<\u9bc3<\u9bbf"
-                + "<\u9bc1<\u9bb5<\u9bb8<\u9bd3<\u9bb6<\u9bc4<\u9bb9"
-                + "<\u9bbd<\u9d5c<\u9d53<\u9d4f<\u9d4a<\u9d5b<\u9d4b"
-                + "<\u9d59<\u9d56<\u9d4c<\u9d57<\u9d52<\u9d54<\u9d5f"
-                + "<\u9d58<\u9d5a<\u9e8e<\u9e8c<\u9edf<\u9f01<\u9f00"
-                + "<\u9f16<\u9f25<\u9f2b<\u9f2a<\u9f29<\u9f28<\u9f4c"
-                + "<\u9f55<\u5134<\u5135<\u5296<\u52f7<\u53b4<\u56ab"
-                + "<\u56ad<\u56a6<\u56a7<\u56aa<\u56ac<\u58da<\u58dd"
-                + "<\u58db<\u5912<\u5b3d<\u5b3e<\u5b3f<\u5dc3<\u5e70"
-                + "<\u5fbf<\u61fb<\u6507<\u6510<\u650d<\u6509<\u650c"
-                + "<\u650e<\u6584<\u65de<\u65dd<\u66de<\u6ae7<\u6ae0"
-                + "<\u6acc<\u6ad1<\u6ad9<\u6acb<\u6adf<\u6adc<\u6ad0"
-                + "<\u6aeb<\u6acf<\u6acd<\u6ade<\u6b60<\u6bb0<\u6c0c"
-                + "<\u7019<\u7027<\u7020<\u7016<\u702b<\u7021<\u7022"
-                + "<\u7023<\u7029<\u7017<\u7024<\u701c<\u702a<\u720c"
-                + "<\u720a<\u7207<\u7202<\u7205<\u72a5<\u72a6<\u72a4"
-                + "<\u72a3<\u72a1<\u74cb<\u74c5<\u74b7<\u74c3<\u7516"
-                + "<\u7660<\u77c9<\u77ca<\u77c4<\u77f1<\u791d<\u791b"
-                + "<\u7921<\u791c<\u7917<\u791e<\u79b0<\u7a67<\u7a68"
-                + "<\u7c33<\u7c3c<\u7c39<\u7c2c<\u7c3b<\u7cec<\u7cea"
-                + "<\u7e76<\u7e75<\u7e78<\u7e70<\u7e77<\u7e6f<\u7e7a"
-                + "<\u7e72<\u7e74<\u7e68<\u7f4b<\u7f4a<\u7f83<\u7f86"
-                + "<\u7fb7<\u7ffd<\u7ffe<\u8078<\u81d7<\u81d5<\u8264"
-                + "<\u8261<\u8263<\u85eb<\u85f1<\u85ed<\u85d9<\u85e1"
-                + "<\u85e8<\u85da<\u85d7<\u85ec<\u85f2<\u85f8<\u85d8"
-                + "<\u85df<\u85e3<\u85dc<\u85d1<\u85f0<\u85e6<\u85ef"
-                + "<\u85de<\u85e2<\u8800<\u87fa<\u8803<\u87f6<\u87f7"
-                + "<\u8809<\u880c<\u880b<\u8806<\u87fc<\u8808<\u87ff"
-                + "<\u880a<\u8802<\u8962<\u895a<\u895b<\u8957<\u8961"
-                + "<\u895c<\u8958<\u895d<\u8959<\u8988<\u89b7<\u89b6"
-                + "<\u89f6<\u8b50<\u8b48<\u8b4a<\u8b40<\u8b53<\u8b56"
-                + "<\u8b54<\u8b4b<\u8b55<\u8b51<\u8b42<\u8b52<\u8b57"
-                + "<\u8c43<\u8c77<\u8c76<\u8c9a<\u8d06<\u8d07<\u8d09"
-                + "<\u8dac<\u8daa<\u8dad<\u8dab<\u8e6d<\u8e78<\u8e73"
-                + "<\u8e6a<\u8e6f<\u8e7b<\u8ec2<\u8f52<\u8f51<\u8f4f"
-                + "<\u8f50<\u8f53<\u8fb4<\u9140<\u913f<\u91b0<\u91ad"
-                + "<\u93de<\u93c7<\u93cf<\u93c2<\u93da<\u93d0<\u93f9"
-                + "<\u93ec<\u93cc<\u93d9<\u93a9<\u93e6<\u93ca<\u93d4"
-                + "<\u93ee<\u93e3<\u93d5<\u93c4<\u93ce<\u93c0<\u93d2"
-                + "<\u93e7<\u957d<\u95da<\u95db<\u96e1<\u9729<\u972b"
-                + "<\u972c<\u9728<\u9726<\u97b3<\u97b7<\u97b6<\u97dd"
-                + "<\u97de<\u97df<\u985c<\u9859<\u985d<\u9857<\u98bf"
-                + "<\u98bd<\u98bb<\u98be<\u9948<\u9947<\u9943<\u99a6"
-                + "<\u99a7<\u9a1a<\u9a15<\u9a25<\u9a1d<\u9a24<\u9a1b"
-                + "<\u9a22<\u9a20<\u9a27<\u9a23<\u9a1e<\u9a1c<\u9a14"
-                + "<\u9ac2<\u9b0b<\u9b0a<\u9b0e<\u9b0c<\u9b37<\u9bea"
-                + "<\u9beb<\u9be0<\u9bde<\u9be4<\u9be6<\u9be2<\u9bf0"
-                + "<\u9bd4<\u9bd7<\u9bec<\u9bdc<\u9bd9<\u9be5<\u9bd5"
-                + "<\u9be1<\u9bda<\u9d77<\u9d81<\u9d8a<\u9d84<\u9d88"
-                + "<\u9d71<\u9d80<\u9d78<\u9d86<\u9d8b<\u9d8c<\u9d7d"
-                + "<\u9d6b<\u9d74<\u9d75<\u9d70<\u9d69<\u9d85<\u9d73"
-                + "<\u9d7b<\u9d82<\u9d6f<\u9d79<\u9d7f<\u9d87<\u9d68"
-                + "<\u9e94<\u9e91<\u9ec0<\u9efc<\u9f2d<\u9f40<\u9f41"
-                + "<\u9f4d<\u9f56<\u9f57<\u9f58<\u5337<\u56b2<\u56b5"
-                + "<\u56b3<\u58e3<\u5b45<\u5dc6<\u5dc7<\u5eee<\u5eef"
-                + "<\u5fc0<\u5fc1<\u61f9<\u6517<\u6516<\u6515<\u6513"
-                + "<\u65df<\u66e8<\u66e3<\u66e4<\u6af3<\u6af0<\u6aea"
-                + "<\u6ae8<\u6af9<\u6af1<\u6aee<\u6aef<\u703c<\u7035"
-                + "<\u702f<\u7037<\u7034<\u7031<\u7042<\u7038<\u703f"
-                + "<\u703a<\u7039<\u7040<\u703b<\u7033<\u7041<\u7213"
-                + "<\u7214<\u72a8<\u737d<\u737c<\u74ba<\u76ab<\u76aa"
-                + "<\u76be<\u76ed<\u77cc<\u77ce<\u77cf<\u77cd<\u77f2"
-                + "<\u7925<\u7923<\u7927<\u7928<\u7924<\u7929<\u79b2"
-                + "<\u7a6e<\u7a6c<\u7a6d<\u7af7<\u7c49<\u7c48<\u7c4a"
-                + "<\u7c47<\u7c45<\u7cee<\u7e7b<\u7e7e<\u7e81<\u7e80"
-                + "<\u7fba<\u7fff<\u8079<\u81db<\u81d9<\u820b<\u8268"
-                + "<\u8269<\u8622<\u85ff<\u8601<\u85fe<\u861b<\u8600"
-                + "<\u85f6<\u8604<\u8609<\u8605<\u860c<\u85fd<\u8819"
-                + "<\u8810<\u8811<\u8817<\u8813<\u8816<\u8963<\u8966"
-                + "<\u89b9<\u89f7<\u8b60<\u8b6a<\u8b5d<\u8b68<\u8b63"
-                + "<\u8b65<\u8b67<\u8b6d<\u8dae<\u8e86<\u8e88<\u8e84"
-                + "<\u8f59<\u8f56<\u8f57<\u8f55<\u8f58<\u8f5a<\u908d"
-                + "<\u9143<\u9141<\u91b7<\u91b5<\u91b2<\u91b3<\u940b"
-                + "<\u9413<\u93fb<\u9420<\u940f<\u9414<\u93fe<\u9415"
-                + "<\u9410<\u9428<\u9419<\u940d<\u93f5<\u9400<\u93f7"
-                + "<\u9407<\u940e<\u9416<\u9412<\u93fa<\u9409<\u93f8"
-                + "<\u940a<\u93ff<\u93fc<\u940c<\u93f6<\u9411<\u9406"
-                + "<\u95de<\u95e0<\u95df<\u972e<\u972f<\u97b9<\u97bb"
-                + "<\u97fd<\u97fe<\u9860<\u9862<\u9863<\u985f<\u98c1"
-                + "<\u98c2<\u9950<\u994e<\u9959<\u994c<\u994b<\u9953"
-                + "<\u9a32<\u9a34<\u9a31<\u9a2c<\u9a2a<\u9a36<\u9a29"
-                + "<\u9a2e<\u9a38<\u9a2d<\u9ac7<\u9aca<\u9ac6<\u9b10"
-                + "<\u9b12<\u9b11<\u9c0b<\u9c08<\u9bf7<\u9c05<\u9c12"
-                + "<\u9bf8<\u9c40<\u9c07<\u9c0e<\u9c06<\u9c17<\u9c14"
-                + "<\u9c09<\u9d9f<\u9d99<\u9da4<\u9d9d<\u9d92<\u9d98"
-                + "<\u9d90<\u9d9b<\u9da0<\u9d94<\u9d9c<\u9daa<\u9d97"
-                + "<\u9da1<\u9d9a<\u9da2<\u9da8<\u9d9e<\u9da3<\u9dbf"
-                + "<\u9da9<\u9d96<\u9da6<\u9da7<\u9e99<\u9e9b<\u9e9a"
-                + "<\u9ee5<\u9ee4<\u9ee7<\u9ee6<\u9f30<\u9f2e<\u9f5b"
-                + "<\u9f60<\u9f5e<\u9f5d<\u9f59<\u9f91<\u513a<\u5139"
-                + "<\u5298<\u5297<\u56c3<\u56bd<\u56be<\u5b48<\u5b47"
-                + "<\u5dcb<\u5dcf<\u5ef1<\u61fd<\u651b<\u6b02<\u6afc"
-                + "<\u6b03<\u6af8<\u6b00<\u7043<\u7044<\u704a<\u7048"
-                + "<\u7049<\u7045<\u7046<\u721d<\u721a<\u7219<\u737e"
-                + "<\u7517<\u766a<\u77d0<\u792d<\u7931<\u792f<\u7c54"
-                + "<\u7c53<\u7cf2<\u7e8a<\u7e87<\u7e88<\u7e8b<\u7e86"
-                + "<\u7e8d<\u7f4d<\u7fbb<\u8030<\u81dd<\u8618<\u862a"
-                + "<\u8626<\u861f<\u8623<\u861c<\u8619<\u8627<\u862e"
-                + "<\u8621<\u8620<\u8629<\u861e<\u8625<\u8829<\u881d"
-                + "<\u881b<\u8820<\u8824<\u881c<\u882b<\u884a<\u896d"
-                + "<\u8969<\u896e<\u896b<\u89fa<\u8b79<\u8b78<\u8b45"
-                + "<\u8b7a<\u8b7b<\u8d10<\u8d14<\u8daf<\u8e8e<\u8e8c"
-                + "<\u8f5e<\u8f5b<\u8f5d<\u9146<\u9144<\u9145<\u91b9"
-                + "<\u943f<\u943b<\u9436<\u9429<\u943d<\u943c<\u9430"
-                + "<\u9439<\u942a<\u9437<\u942c<\u9440<\u9431<\u95e5"
-                + "<\u95e4<\u95e3<\u9735<\u973a<\u97bf<\u97e1<\u9864"
-                + "<\u98c9<\u98c6<\u98c0<\u9958<\u9956<\u9a39<\u9a3d"
-                + "<\u9a46<\u9a44<\u9a42<\u9a41<\u9a3a<\u9a3f<\u9acd"
-                + "<\u9b15<\u9b17<\u9b18<\u9b16<\u9b3a<\u9b52<\u9c2b"
-                + "<\u9c1d<\u9c1c<\u9c2c<\u9c23<\u9c28<\u9c29<\u9c24"
-                + "<\u9c21<\u9db7<\u9db6<\u9dbc<\u9dc1<\u9dc7<\u9dca"
-                + "<\u9dcf<\u9dbe<\u9dc5<\u9dc3<\u9dbb<\u9db5<\u9dce"
-                + "<\u9db9<\u9dba<\u9dac<\u9dc8<\u9db1<\u9dad<\u9dcc"
-                + "<\u9db3<\u9dcd<\u9db2<\u9e7a<\u9e9c<\u9eeb<\u9eee"
-                + "<\u9eed<\u9f1b<\u9f18<\u9f1a<\u9f31<\u9f4e<\u9f65"
-                + "<\u9f64<\u9f92<\u4eb9<\u56c6<\u56c5<\u56cb<\u5971"
-                + "<\u5b4b<\u5b4c<\u5dd5<\u5dd1<\u5ef2<\u6521<\u6520"
-                + "<\u6526<\u6522<\u6b0b<\u6b08<\u6b09<\u6c0d<\u7055"
-                + "<\u7056<\u7057<\u7052<\u721e<\u721f<\u72a9<\u737f"
-                + "<\u74d8<\u74d5<\u74d9<\u74d7<\u766d<\u76ad<\u7935"
-                + "<\u79b4<\u7a70<\u7a71<\u7c57<\u7c5c<\u7c59<\u7c5b"
-                + "<\u7c5a<\u7cf4<\u7cf1<\u7e91<\u7f4f<\u7f87<\u81de"
-                + "<\u826b<\u8634<\u8635<\u8633<\u862c<\u8632<\u8636"
-                + "<\u882c<\u8828<\u8826<\u882a<\u8825<\u8971<\u89bf"
-                + "<\u89be<\u89fb<\u8b7e<\u8b84<\u8b82<\u8b86<\u8b85"
-                + "<\u8b7f<\u8d15<\u8e95<\u8e94<\u8e9a<\u8e92<\u8e90"
-                + "<\u8e96<\u8e97<\u8f60<\u8f62<\u9147<\u944c<\u9450"
-                + "<\u944a<\u944b<\u944f<\u9447<\u9445<\u9448<\u9449"
-                + "<\u9446<\u973f<\u97e3<\u986a<\u9869<\u98cb<\u9954"
-                + "<\u995b<\u9a4e<\u9a53<\u9a54<\u9a4c<\u9a4f<\u9a48"
-                + "<\u9a4a<\u9a49<\u9a52<\u9a50<\u9ad0<\u9b19<\u9b2b"
-                + "<\u9b3b<\u9b56<\u9b55<\u9c46<\u9c48<\u9c3f<\u9c44"
-                + "<\u9c39<\u9c33<\u9c41<\u9c3c<\u9c37<\u9c34<\u9c32"
-                + "<\u9c3d<\u9c36<\u9ddb<\u9dd2<\u9dde<\u9dda<\u9dcb"
-                + "<\u9dd0<\u9ddc<\u9dd1<\u9ddf<\u9de9<\u9dd9<\u9dd8"
-                + "<\u9dd6<\u9df5<\u9dd5<\u9ddd<\u9eb6<\u9ef0<\u9f35"
-                + "<\u9f33<\u9f32<\u9f42<\u9f6b<\u9f95<\u9fa2<\u513d"
-                + "<\u5299<\u58e8<\u58e7<\u5972<\u5b4d<\u5dd8<\u882f"
-                + "<\u5f4f<\u6201<\u6203<\u6204<\u6529<\u6525<\u6596"
-                + "<\u66eb<\u6b11<\u6b12<\u6b0f<\u6bca<\u705b<\u705a"
-                + "<\u7222<\u7382<\u7381<\u7383<\u7670<\u77d4<\u7c67"
-                + "<\u7c66<\u7e95<\u826c<\u863a<\u8640<\u8639<\u863c"
-                + "<\u8631<\u863b<\u863e<\u8830<\u8832<\u882e<\u8833"
-                + "<\u8976<\u8974<\u8973<\u89fe<\u8b8c<\u8b8e<\u8b8b"
-                + "<\u8b88<\u8c45<\u8d19<\u8e98<\u8f64<\u8f63<\u91bc"
-                + "<\u9462<\u9455<\u945d<\u9457<\u945e<\u97c4<\u97c5"
-                + "<\u9800<\u9a56<\u9a59<\u9b1e<\u9b1f<\u9b20<\u9c52"
-                + "<\u9c58<\u9c50<\u9c4a<\u9c4d<\u9c4b<\u9c55<\u9c59"
-                + "<\u9c4c<\u9c4e<\u9dfb<\u9df7<\u9def<\u9de3<\u9deb"
-                + "<\u9df8<\u9de4<\u9df6<\u9de1<\u9dee<\u9de6<\u9df2"
-                + "<\u9df0<\u9de2<\u9dec<\u9df4<\u9df3<\u9de8<\u9ded"
-                + "<\u9ec2<\u9ed0<\u9ef2<\u9ef3<\u9f06<\u9f1c<\u9f38"
-                + "<\u9f37<\u9f36<\u9f43<\u9f4f<\u9f71<\u9f70<\u9f6e"
-                + "<\u9f6f<\u56d3<\u56cd<\u5b4e<\u5c6d<\u652d<\u66ed"
-                + "<\u66ee<\u6b13<\u705f<\u7061<\u705d<\u7060<\u7223"
-                + "<\u74db<\u74e5<\u77d5<\u7938<\u79b7<\u79b6<\u7c6a"
-                + "<\u7e97<\u7f89<\u826d<\u8643<\u8838<\u8837<\u8835"
-                + "<\u884b<\u8b94<\u8b95<\u8e9e<\u8e9f<\u8ea0<\u8e9d"
-                + "<\u91be<\u91bd<\u91c2<\u946b<\u9468<\u9469<\u96e5"
-                + "<\u9746<\u9743<\u9747<\u97c7<\u97e5<\u9a5e<\u9ad5"
-                + "<\u9b59<\u9c63<\u9c67<\u9c66<\u9c62<\u9c5e<\u9c60"
-                + "<\u9e02<\u9dfe<\u9e07<\u9e03<\u9e06<\u9e05<\u9e00"
-                + "<\u9e01<\u9e09<\u9dff<\u9dfd<\u9e04<\u9ea0<\u9f1e"
-                + "<\u9f46<\u9f74<\u9f75<\u9f76<\u56d4<\u652e<\u65b8"
-                + "<\u6b18<\u6b19<\u6b17<\u6b1a<\u7062<\u7226<\u72aa"
-                + "<\u77d8<\u77d9<\u7939<\u7c69<\u7c6b<\u7cf6<\u7e9a"
-                + "<\u7e98<\u7e9b<\u7e99<\u81e0<\u81e1<\u8646<\u8647"
-                + "<\u8648<\u8979<\u897a<\u897c<\u897b<\u89ff<\u8b98"
-                + "<\u8b99<\u8ea5<\u8ea4<\u8ea3<\u946e<\u946d<\u946f"
-                + "<\u9471<\u9473<\u9749<\u9872<\u995f<\u9c68<\u9c6e"
-                + "<\u9c6d<\u9e0b<\u9e0d<\u9e10<\u9e0f<\u9e12<\u9e11"
-                + "<\u9ea1<\u9ef5<\u9f09<\u9f47<\u9f78<\u9f7b<\u9f7a"
-                + "<\u9f79<\u571e<\u7066<\u7c6f<\u883c<\u8db2<\u8ea6"
-                + "<\u91c3<\u9474<\u9478<\u9476<\u9475<\u9a60<\u9c74"
-                + "<\u9c73<\u9c71<\u9c75<\u9e14<\u9e13<\u9ef6<\u9f0a"
-                + "<\u9fa4<\u7068<\u7065<\u7cf7<\u866a<\u883e<\u883d"
-                + "<\u883f<\u8b9e<\u8c9c<\u8ea9<\u8ec9<\u974b<\u9873"
-                + "<\u9874<\u98cc<\u9961<\u99ab<\u9a64<\u9a66<\u9a67"
-                + "<\u9b24<\u9e15<\u9e17<\u9f48<\u6207<\u6b1e<\u7227"
-                + "<\u864c<\u8ea8<\u9482<\u9480<\u9481<\u9a69<\u9a68"
-                + "<\u9b2e<\u9e19<\u7229<\u864b<\u8b9f<\u9483<\u9c79"
-                + "<\u9eb7<\u7675<\u9a6b<\u9c7a<\u9e1d<\u7069<\u706a"
-                + "<\u9ea4<\u9f7e<\u9f49<\u9f98"
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData.java b/ojluni/src/main/java/sun/text/resources/FormatData.java
deleted file mode 100755
index 2d07d0f..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "January", // january
-                    "February", // february
-                    "March", // march
-                    "April", // april
-                    "May", // may
-                    "June", // june
-                    "July", // july
-                    "August", // august
-                    "September", // september
-                    "October", // october
-                    "November", // november
-                    "December", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "Jan", // abb january
-                    "Feb", // abb february
-                    "Mar", // abb march
-                    "Apr", // abb april
-                    "May", // abb may
-                    "Jun", // abb june
-                    "Jul", // abb july
-                    "Aug", // abb august
-                    "Sep", // abb september
-                    "Oct", // abb october
-                    "Nov", // abb november
-                    "Dec", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "Sunday", // Sunday
-                    "Monday", // Monday
-                    "Tuesday", // Tuesday
-                    "Wednesday", // Wednesday
-                    "Thursday", // Thursday
-                    "Friday", // Friday
-                    "Saturday" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "Sun", // abb Sunday
-                    "Mon", // abb Monday
-                    "Tue", // abb Tuesday
-                    "Wed", // abb Wednesday
-                    "Thu", // abb Thursday
-                    "Fri", // abb Friday
-                    "Sat" // abb Saturday
-                }
-            },
-            { "AmPmMarkers",
-                new String[] {
-                    "AM", // am marker
-                    "PM" // pm marker
-                }
-            },
-            { "Eras",
-                new String[] { // era strings for GregorianCalendar
-                    "BC",
-                    "AD"
-                }
-            },
-            { "sun.util.BuddhistCalendar.Eras",
-                new String[] { // Thai Buddhist calendar era strings
-                    "BC",     // BC
-                    "B.E."    // Buddhist Era
-                }
-            },
-            { "sun.util.BuddhistCalendar.short.Eras",
-                new String[] { // Thai Buddhist calendar era strings
-                    "BC",     // BC
-                    "B.E."    // Buddhist Era
-                }
-            },
-            { "java.util.JapaneseImperialCalendar.Eras",
-                new String[] { // Japanese imperial calendar era strings
-                    "",
-                    "Meiji",
-                    "Taisho",
-                    "Showa",
-                    "Heisei",
-                }
-            },
-            { "java.util.JapaneseImperialCalendar.short.Eras",
-                new String[] { // Japanese imperial calendar era abbreviations
-                    "",
-                    "M",
-                    "T",
-                    "S",
-                    "H",
-                }
-            },
-            { "java.util.JapaneseImperialCalendar.FirstYear",
-                new String[] { // Japanese imperial calendar year name
-                    // empty in English
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00a4 #,##0.00;-\u00a4 #,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ".", // decimal separator
-                    ",", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "h:mm:ss a z",        // full time pattern
-                    "h:mm:ss a z",        // long time pattern
-                    "h:mm:ss a",          // medium time pattern
-                    "h:mm a",             // short time pattern
-                    "EEEE, MMMM d, yyyy", // full date pattern
-                    "MMMM d, yyyy",       // long date pattern
-                    "MMM d, yyyy",        // medium date pattern
-                    "M/d/yy",             // short date pattern
-                    "{1} {0}"             // date-time pattern
-                }
-            },
-            { "sun.util.BuddhistCalendar.DateTimePatterns",
-                new String[] {
-                    "H:mm:ss z",          // full time pattern
-                    "H:mm:ss z",          // long time pattern
-                    "H:mm:ss",            // medium time pattern
-                    "H:mm",               // short time pattern
-                    "EEEE d MMMM G yyyy", // full date pattern
-                    "d MMMM yyyy",        // long date pattern
-                    "d MMM yyyy",         // medium date pattern
-                    "d/M/yyyy",           // short date pattern
-                    "{1}, {0}"            // date-time pattern
-                }
-            },
-            { "java.util.JapaneseImperialCalendar.DateTimePatterns",
-                new String[] {
-                    "h:mm:ss a z",             // full time pattern
-                    "h:mm:ss a z",             // long time pattern
-                    "h:mm:ss a",               // medium time pattern
-                    "h:mm a",                  // short time pattern
-                    "GGGG yyyy MMMM d (EEEE)", // full date pattern
-                    "GGGG yyyy MMMM d",        // long date pattern
-                    "GGGG yyyy MMM d",         // medium date pattern
-                    "Gy.MM.dd",                // short date pattern
-                    "{1} {0}"                  // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar.java
deleted file mode 100755
index d041575..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ar extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u064a\u0646\u0627\u064a\u0631", // january
-                    "\u0641\u0628\u0631\u0627\u064a\u0631", // february
-                    "\u0645\u0627\u0631\u0633", // march
-                    "\u0623\u0628\u0631\u064a\u0644", // april
-                    "\u0645\u0627\u064a\u0648", // may
-                    "\u064a\u0648\u0646\u064a\u0648", // june
-                    "\u064a\u0648\u0644\u064a\u0648", // july
-                    "\u0623\u063a\u0633\u0637\u0633", // august
-                    "\u0633\u0628\u062a\u0645\u0628\u0631", // september
-                    "\u0623\u0643\u062a\u0648\u0628\u0631", // october
-                    "\u0646\u0648\u0641\u0645\u0628\u0631", // november
-                    "\u062f\u064a\u0633\u0645\u0628\u0631", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "\u064a\u0646\u0627", // abb january
-                    "\u0641\u0628\u0631", // abb february
-                    "\u0645\u0627\u0631", // abb march
-                    "\u0623\u0628\u0631", // abb april
-                    "\u0645\u0627\u064a", // abb may
-                    "\u064a\u0648\u0646", // abb june
-                    "\u064a\u0648\u0644", // abb july
-                    "\u0623\u063a\u0633", // abb august
-                    "\u0633\u0628\u062a", // abb september
-                    "\u0623\u0643\u062a", // abb october
-                    "\u0646\u0648\u0641", // abb november
-                    "\u062f\u064a\u0633", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "\u0627\u0644\u0623\u062d\u062f", // Sunday
-                    "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", // Monday
-                    "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", // Tuesday
-                    "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", // Wednesday
-                    "\u0627\u0644\u062e\u0645\u064a\u0633", // Thursday
-                    "\u0627\u0644\u062c\u0645\u0639\u0629", // Friday
-                    "\u0627\u0644\u0633\u0628\u062a" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u062d", // abb Sunday
-                    "\u0646", // abb Monday
-                    "\u062b", // abb Tuesday
-                    "\u0631", // abb Wednesday
-                    "\u062e", // abb Thursday
-                    "\u062c", // abb Friday
-                    "\u0633" // abb Saturday
-                }
-            },
-            { "AmPmMarkers",
-                new String[] {
-                    "\u0635", // am marker
-                    "\u0645" // pm marker
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "\u0642.\u0645",
-                    "\u0645"
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;#,##0.###-", // decimal pattern
-                    "\u00A4 #,##0.###;\u00A4 #,##0.###-", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "z hh:mm:ss a", // full time pattern
-                    "z hh:mm:ss a", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "dd MMMM, yyyy", // full date pattern
-                    "dd MMMM, yyyy", // long date pattern
-                    "dd/MM/yyyy", // medium date pattern
-                    "dd/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_AE.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_AE.java
deleted file mode 100755
index c620d7e..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_AE.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_ar_AE extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_BH.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_BH.java
deleted file mode 100755
index 2e491e1..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_BH.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_ar_BH extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_DZ.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_DZ.java
deleted file mode 100755
index 3386887..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_DZ.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_ar_DZ extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_EG.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_EG.java
deleted file mode 100755
index 22c632e..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_EG.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_ar_EG extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_IQ.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_IQ.java
deleted file mode 100755
index 9d1bfc4..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_IQ.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_ar_IQ extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_JO.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_JO.java
deleted file mode 100755
index 095cc5e..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_JO.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ar_JO extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u0643\u0627\u0646\u0648\u0646\u0020\u0627\u0644\u062b\u0627\u0646\u064a", // january
-                    "\u0634\u0628\u0627\u0637", // february
-                    "\u0622\u0630\u0627\u0631", // march
-                    "\u0646\u064a\u0633\u0627\u0646", // april
-                    "\u0646\u0648\u0627\u0631", // may
-                    "\u062d\u0632\u064a\u0631\u0627\u0646", // june
-                    "\u062a\u0645\u0648\u0632", // july
-                    "\u0622\u0628", // august
-                    "\u0623\u064a\u0644\u0648\u0644", // september
-                    "\u062a\u0634\u0631\u064a\u0646\u0020\u0627\u0644\u0623\u0648\u0644", // october
-                    "\u062a\u0634\u0631\u064a\u0646\u0020\u0627\u0644\u062b\u0627\u0646\u064a", // november
-                    "\u0643\u0627\u0646\u0648\u0646\u0020\u0627\u0644\u0623\u0648\u0644", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "\u0643\u0627\u0646\u0648\u0646\u0020\u0627\u0644\u062b\u0627\u0646\u064a", // abb january
-                    "\u0634\u0628\u0627\u0637", // abb february
-                    "\u0622\u0630\u0627\u0631", // abb march
-                    "\u0646\u064a\u0633\u0627\u0646", // abb april
-                    "\u0646\u0648\u0627\u0631", // abb may
-                    "\u062d\u0632\u064a\u0631\u0627\u0646", // abb june
-                    "\u062a\u0645\u0648\u0632", // abb july
-                    "\u0622\u0628", // abb august
-                    "\u0623\u064a\u0644\u0648\u0644", // abb september
-                    "\u062a\u0634\u0631\u064a\u0646\u0020\u0627\u0644\u0623\u0648\u0644", // abb october
-                    "\u062a\u0634\u0631\u064a\u0646\u0020\u0627\u0644\u062b\u0627\u0646\u064a", // abb november
-                    "\u0643\u0627\u0646\u0648\u0646\u0020\u0627\u0644\u0623\u0648\u0644", // abb december
-                    "" // month 13 if applicable
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u0627\u0644\u0623\u062d\u062f", // abb Sunday
-                    "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", // abb Monday
-                    "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", // abb Tuesday
-                    "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", // abb Wednesday
-                    "\u0627\u0644\u062e\u0645\u064a\u0633", // abb Thursday
-                    "\u0627\u0644\u062c\u0645\u0639\u0629", // abb Friday
-                    "\u0627\u0644\u0633\u0628\u062a" // abb Saturday
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_KW.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_KW.java
deleted file mode 100755
index 764c3ef..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_KW.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_ar_KW extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_LB.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_LB.java
deleted file mode 100755
index 2b539a3..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_LB.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ar_LB extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u0643\u0627\u0646\u0648\u0646\u0020\u0627\u0644\u062b\u0627\u0646\u064a", // january
-                    "\u0634\u0628\u0627\u0637", // february
-                    "\u0622\u0630\u0627\u0631", // march
-                    "\u0646\u064a\u0633\u0627\u0646", // april
-                    "\u0646\u0648\u0627\u0631", // may
-                    "\u062d\u0632\u064a\u0631\u0627\u0646", // june
-                    "\u062a\u0645\u0648\u0632", // july
-                    "\u0622\u0628", // august
-                    "\u0623\u064a\u0644\u0648\u0644", // september
-                    "\u062a\u0634\u0631\u064a\u0646\u0020\u0627\u0644\u0623\u0648\u0644", // october
-                    "\u062a\u0634\u0631\u064a\u0646\u0020\u0627\u0644\u062b\u0627\u0646\u064a", // november
-                    "\u0643\u0627\u0646\u0648\u0646\u0020\u0627\u0644\u0623\u0648\u0644", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "\u0643\u0627\u0646\u0648\u0646\u0020\u0627\u0644\u062b\u0627\u0646\u064a", // abb january
-                    "\u0634\u0628\u0627\u0637", // abb february
-                    "\u0622\u0630\u0627\u0631", // abb march
-                    "\u0646\u064a\u0633\u0627\u0646", // abb april
-                    "\u0646\u0648\u0627\u0631", // abb may
-                    "\u062d\u0632\u064a\u0631\u0627\u0646", // abb june
-                    "\u062a\u0645\u0648\u0632", // abb july
-                    "\u0622\u0628", // abb august
-                    "\u0623\u064a\u0644\u0648\u0644", // abb september
-                    "\u062a\u0634\u0631\u064a\u0646\u0020\u0627\u0644\u0623\u0648\u0644", // abb october
-                    "\u062a\u0634\u0631\u064a\u0646\u0020\u0627\u0644\u062b\u0627\u0646\u064a", // abb november
-                    "\u0643\u0627\u0646\u0648\u0646\u0020\u0627\u0644\u0623\u0648\u0644", // abb december
-                    "" // month 13 if applicable
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u0627\u0644\u0623\u062d\u062f", // abb Sunday
-                    "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", // abb Monday
-                    "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", // abb Tuesday
-                    "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", // abb Wednesday
-                    "\u0627\u0644\u062e\u0645\u064a\u0633", // abb Thursday
-                    "\u0627\u0644\u062c\u0645\u0639\u0629", // abb Friday
-                    "\u0627\u0644\u0633\u0628\u062a" // abb Saturday
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_LY.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_LY.java
deleted file mode 100755
index 7d6f732..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_LY.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_ar_LY extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_MA.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_MA.java
deleted file mode 100755
index c2ffa8a..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_MA.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_ar_MA extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_OM.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_OM.java
deleted file mode 100755
index a60b308..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_OM.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_ar_OM extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_QA.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_QA.java
deleted file mode 100755
index f7f25db..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_QA.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_ar_QA extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_SA.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_SA.java
deleted file mode 100755
index 6caeb06..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_SA.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_ar_SA extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_SD.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_SD.java
deleted file mode 100755
index 963f4661..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_SD.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_ar_SD extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_SY.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_SY.java
deleted file mode 100755
index 3c3c5cb..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_SY.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ar_SY extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u0643\u0627\u0646\u0648\u0646\u0020\u0627\u0644\u062b\u0627\u0646\u064a", // january
-                    "\u0634\u0628\u0627\u0637", // february
-                    "\u0622\u0630\u0627\u0631", // march
-                    "\u0646\u064a\u0633\u0627\u0646", // april
-                    "\u0646\u0648\u0627\u0631\u0627\u0646", // may
-                    "\u062d\u0632\u064a\u0631", // june
-                    "\u062a\u0645\u0648\u0632", // july
-                    "\u0622\u0628", // august
-                    "\u0623\u064a\u0644\u0648\u0644", // september
-                    "\u062a\u0634\u0631\u064a\u0646\u0020\u0627\u0644\u0623\u0648\u0644", // october
-                    "\u062a\u0634\u0631\u064a\u0646\u0020\u0627\u0644\u062b\u0627\u0646\u064a", // november
-                    "\u0643\u0627\u0646\u0648\u0646\u0020\u0627\u0644\u0623\u0648\u0644", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "\u0643\u0627\u0646\u0648\u0646\u0020\u0627\u0644\u062b\u0627\u0646\u064a", // abb january
-                    "\u0634\u0628\u0627\u0637", // abb february
-                    "\u0622\u0630\u0627\u0631", // abb march
-                    "\u0646\u064a\u0633\u0627\u0646", // abb april
-                    "\u0646\u0648\u0627\u0631", // abb may
-                    "\u062d\u0632\u064a\u0631\u0627\u0646", // abb june
-                    "\u062a\u0645\u0648\u0632", // abb july
-                    "\u0622\u0628", // abb august
-                    "\u0623\u064a\u0644\u0648\u0644", // abb september
-                    "\u062a\u0634\u0631\u064a\u0646\u0020\u0627\u0644\u0623\u0648\u0644", // abb october
-                    "\u062a\u0634\u0631\u064a\u0646\u0020\u0627\u0644\u062b\u0627\u0646\u064a", // abb november
-                    "\u0643\u0627\u0646\u0648\u0646\u0020\u0627\u0644\u0623\u0648\u0644", // abb december
-                    "" // month 13 if applicable
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u0627\u0644\u0623\u062d\u062f", // abb Sunday
-                    "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", // abb Monday
-                    "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", // abb Tuesday
-                    "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", // abb Wednesday
-                    "\u0627\u0644\u062e\u0645\u064a\u0633", // abb Thursday
-                    "\u0627\u0644\u062c\u0645\u0639\u0629", // abb Friday
-                    "\u0627\u0644\u0633\u0628\u062a" // abb Saturday
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_TN.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_TN.java
deleted file mode 100755
index cfe62ef..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_TN.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_ar_TN extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ar_YE.java b/ojluni/src/main/java/sun/text/resources/FormatData_ar_YE.java
deleted file mode 100755
index f52f5da..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ar_YE.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_ar_YE extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_be.java b/ojluni/src/main/java/sun/text/resources/FormatData_be.java
deleted file mode 100755
index c402ba2..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_be.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (c) 1997, 2010, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_be extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f", // january
-                    "\u043b\u044e\u0442\u0430\u0433\u0430", // february
-                    "\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430", // march
-                    "\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430", // april
-                    "\u043c\u0430\u044f", // may
-                    "\u0447\u0440\u0432\u0435\u043d\u044f", // june
-                    "\u043b\u0456\u043f\u0435\u043d\u044f", // july
-                    "\u0436\u043d\u0456\u045e\u043d\u044f", // august
-                    "\u0432\u0435\u0440\u0430\u0441\u043d\u044f", // september
-                    "\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430", // october
-                    "\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430", // november
-                    "\u0441\u043d\u0435\u0436\u043d\u044f", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "\u0441\u0442\u0434", // abb january
-                    "\u043b\u044e\u0442", // abb february
-                    "\u0441\u043a\u0432", // abb march
-                    "\u043a\u0440\u0441", // abb april
-                    "\u043c\u0430\u0439", // abb may
-                    "\u0447\u0440\u0432", // abb june
-                    "\u043b\u043f\u043d", // abb july
-                    "\u0436\u043d\u0432", // abb august
-                    "\u0432\u0440\u0441", // abb september
-                    "\u043a\u0441\u0442", // abb october
-                    "\u043b\u0456\u0441", // abb november
-                    "\u0441\u043d\u0436", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "\u043d\u044f\u0434\u0437\u0435\u043b\u044f", // Sunday
-                    "\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a", // Monday
-                    "\u0430\u045e\u0442\u043e\u0440\u0430\u043a", // Tuesday
-                    "\u0441\u0435\u0440\u0430\u0434\u0430", // Wednesday
-                    "\u0447\u0430\u0446\u0432\u0435\u0440", // Thursday
-                    "\u043f\u044f\u0442\u043d\u0456\u0446\u0430", // Friday
-                    "\u0441\u0443\u0431\u043e\u0442\u0430" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u043d\u0434", // abb Sunday
-                    "\u043f\u043d", // abb Monday
-                    "\u0430\u0442", // abb Tuesday
-                    "\u0441\u0440", // abb Wednesday
-                    "\u0447\u0446", // abb Thursday
-                    "\u043f\u0442", // abb Friday
-                    "\u0441\u0431" // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "\u0434\u0430 \u043d.\u0435.",
-                    "\u043d.\u0435."
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    "\u00a0", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "H.mm.ss z", // full time pattern
-                    "H.mm.ss z", // long time pattern
-                    "H.mm.ss", // medium time pattern
-                    "H.mm", // short time pattern
-                    "EEEE, d, MMMM yyyy", // full date pattern
-                    "EEEE, d, MMMM yyyy", // long date pattern
-                    "d.M.yyyy", // medium date pattern
-                    "d.M.yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_be_BY.java b/ojluni/src/main/java/sun/text/resources/FormatData_be_BY.java
deleted file mode 100755
index 72ae6d2..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_be_BY.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_be_BY extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4#,##0.##;-\u00A4#,##0.##", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_bg.java b/ojluni/src/main/java/sun/text/resources/FormatData_bg.java
deleted file mode 100755
index e812aaf..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_bg.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_bg extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u042f\u043d\u0443\u0430\u0440\u0438", // january
-                    "\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438", // february
-                    "\u041c\u0430\u0440\u0442", // march
-                    "\u0410\u043f\u0440\u0438\u043b", // april
-                    "\u041c\u0430\u0439", // may
-                    "\u042e\u043d\u0438", // june
-                    "\u042e\u043b\u0438", // july
-                    "\u0410\u0432\u0433\u0443\u0441\u0442", // august
-                    "\u0421\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438", // september
-                    "\u041e\u043a\u0442\u043e\u043c\u0432\u0440\u0438", // october
-                    "\u041d\u043e\u0435\u043c\u0432\u0440\u0438", // november
-                    "\u0414\u0435\u043a\u0435\u043c\u0432\u0440\u0438", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "I", // abb january
-                    "II", // abb february
-                    "III", // abb march
-                    "IV", // abb april
-                    "V", // abb may
-                    "VI", // abb june
-                    "VII", // abb july
-                    "VIII", // abb august
-                    "IX", // abb september
-                    "X", // abb october
-                    "XI", // abb november
-                    "XII", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "\u041d\u0435\u0434\u0435\u043b\u044f", // Sunday
-                    "\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", // Monday
-                    "\u0412\u0442\u043e\u0440\u043d\u0438\u043a", // Tuesday
-                    "\u0421\u0440\u044f\u0434\u0430", // Wednesday
-                    "\u0427\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a", // Thursday
-                    "\u041f\u0435\u0442\u044a\u043a", // Friday
-                    "\u0421\u044a\u0431\u043e\u0442\u0430" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u041d\u0434", // abb Sunday
-                    "\u041f\u043d", // abb Monday
-                    "\u0412\u0442", // abb Tuesday
-                    "\u0421\u0440", // abb Wednesday
-                    "\u0427\u0442", // abb Thursday
-                    "\u041f\u0442", // abb Friday
-                    "\u0421\u0431" // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "\u043f\u0440.\u043d.\u0435.",
-                    "\u043d.\u0435."
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    "\u00a0", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "H:mm:ss", // medium time pattern
-                    "H:mm", // short time pattern
-                    "EEEE, yyyy, MMMM d", // full date pattern
-                    "EEEE, yyyy, MMMM d", // long date pattern
-                    "yyyy-M-d", // medium date pattern
-                    "yy-M-d", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_bg_BG.java b/ojluni/src/main/java/sun/text/resources/FormatData_bg_BG.java
deleted file mode 100755
index 1e74fbb..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_bg_BG.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_bg_BG extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4#,##0.##;-\u00A4#,##0.##", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ca.java b/ojluni/src/main/java/sun/text/resources/FormatData_ca.java
deleted file mode 100755
index 444dde0..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ca.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ca extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "gener", // january
-                    "febrer", // february
-                    "mar\u00e7", // march
-                    "abril", // april
-                    "maig", // may
-                    "juny", // june
-                    "juliol", // july
-                    "agost", // august
-                    "setembre", // september
-                    "octubre", // october
-                    "novembre", // november
-                    "desembre", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "gen.", // abb january
-                    "feb.", // abb february
-                    "mar\u00e7", // abb march
-                    "abr.", // abb april
-                    "maig", // abb may
-                    "juny", // abb june
-                    "jul.", // abb july
-                    "ag.", // abb august
-                    "set.", // abb september
-                    "oct.", // abb october
-                    "nov.", // abb november
-                    "des.", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "diumenge", // Sunday
-                    "dilluns", // Monday
-                    "dimarts", // Tuesday
-                    "dimecres", // Wednesday
-                    "dijous", // Thursday
-                    "divendres", // Friday
-                    "dissabte" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "dg.", // abb Sunday
-                    "dl.", // abb Monday
-                    "dt.", // abb Tuesday
-                    "dc.", // abb Wednesday
-                    "dj.", // abb Thursday
-                    "dv.", // abb Friday
-                    "ds." // abb Saturday
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "EEEE, d' / 'MMMM' / 'yyyy", // full date pattern
-                    "d' / 'MMMM' / 'yyyy", // long date pattern
-                    "dd/MM/yyyy", // medium date pattern
-                    "dd/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GuMtkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ca_ES.java b/ojluni/src/main/java/sun/text/resources/FormatData_ca_ES.java
deleted file mode 100755
index 204aa8e..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ca_ES.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ca_ES extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4 #,##0;-\u00A4 #,##0", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_cs.java b/ojluni/src/main/java/sun/text/resources/FormatData_cs.java
deleted file mode 100755
index e847aaf..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_cs.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_cs extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "leden", // january
-                    "\u00fanor", // february
-                    "b\u0159ezen", // march
-                    "duben", // april
-                    "kv\u011bten", // may
-                    "\u010derven", // june
-                    "\u010dervenec", // july
-                    "srpen", // august
-                    "z\u00e1\u0159\u00ed", // september
-                    "\u0159\u00edjen", // october
-                    "listopad", // november
-                    "prosinec", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "I", // abb january
-                    "II", // abb february
-                    "III", // abb march
-                    "IV", // abb april
-                    "V", // abb may
-                    "VI", // abb june
-                    "VII", // abb july
-                    "VIII", // abb august
-                    "IX", // abb september
-                    "X", // abb october
-                    "XI", // abb november
-                    "XII", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "Ned\u011ble", // Sunday
-                    "Pond\u011bl\u00ed", // Monday
-                    "\u00dater\u00fd", // Tuesday
-                    "St\u0159eda", // Wednesday
-                    "\u010ctvrtek", // Thursday
-                    "P\u00e1tek", // Friday
-                    "Sobota" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "Ne", // abb Sunday
-                    "Po", // abb Monday
-                    "\u00dat", // abb Tuesday
-                    "St", // abb Wednesday
-                    "\u010ct", // abb Thursday
-                    "P\u00e1", // abb Friday
-                    "So" // abb Saturday
-                }
-            },
-            { "AmPmMarkers",
-                new String[] {
-                    "dop.", // am marker
-                    "odp." // pm marker
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "p\u0159.Kr.",
-                    "po Kr."
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    "\u00a0", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "H:mm:ss z", // full time pattern
-                    "H:mm:ss z", // long time pattern
-                    "H:mm:ss", // medium time pattern
-                    "H:mm", // short time pattern
-                    "EEEE, d. MMMM yyyy", // full date pattern
-                    "d. MMMM yyyy", // long date pattern
-                    "d.M.yyyy", // medium date pattern
-                    "d.M.yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GuMtkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_cs_CZ.java b/ojluni/src/main/java/sun/text/resources/FormatData_cs_CZ.java
deleted file mode 100755
index 27d56ac..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_cs_CZ.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_cs_CZ extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.##;-#,##0.##", // decimal pattern
-                    "#,##0.## \u00A4;-#,##0.## \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_da.java b/ojluni/src/main/java/sun/text/resources/FormatData_da.java
deleted file mode 100755
index aed0bf9..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_da.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_da extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "januar", // january
-                    "februar", // february
-                    "marts", // march
-                    "april", // april
-                    "maj", // may
-                    "juni", // june
-                    "juli", // july
-                    "august", // august
-                    "september", // september
-                    "oktober", // october
-                    "november", // november
-                    "december", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "jan", // abb january
-                    "feb", // abb february
-                    "mar", // abb march
-                    "apr", // abb april
-                    "maj", // abb may
-                    "jun", // abb june
-                    "jul", // abb july
-                    "aug", // abb august
-                    "sep", // abb september
-                    "okt", // abb october
-                    "nov", // abb november
-                    "dec", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "s\u00f8ndag", // Sunday
-                    "mandag", // Monday
-                    "tirsdag", // Tuesday
-                    "onsdag", // Wednesday
-                    "torsdag", // Thursday
-                    "fredag", // Friday
-                    "l\u00f8rdag" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "s\u00f8", // abb Sunday
-                    "ma", // abb Monday
-                    "ti", // abb Tuesday
-                    "on", // abb Wednesday
-                    "to", // abb Thursday
-                    "fr", // abb Friday
-                    "l\u00f8" // abb Saturday
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "d. MMMM yyyy", // full date pattern
-                    "d. MMMM yyyy", // long date pattern
-                    "dd-MM-yyyy", // medium date pattern
-                    "dd-MM-yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GuMtkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_da_DK.java b/ojluni/src/main/java/sun/text/resources/FormatData_da_DK.java
deleted file mode 100755
index 24e1772..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_da_DK.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_da_DK extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4 #,##0.00;\u00A4 -#,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_de.java b/ojluni/src/main/java/sun/text/resources/FormatData_de.java
deleted file mode 100755
index ef9fae0..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_de.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_de extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "Januar", // january
-                    "Februar", // february
-                    "M\u00e4rz", // march
-                    "April", // april
-                    "Mai", // may
-                    "Juni", // june
-                    "Juli", // july
-                    "August", // august
-                    "September", // september
-                    "Oktober", // october
-                    "November", // november
-                    "Dezember", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "Jan", // abb january
-                    "Feb", // abb february
-                    "Mrz", // abb march
-                    "Apr", // abb april
-                    "Mai", // abb may
-                    "Jun", // abb june
-                    "Jul", // abb july
-                    "Aug", // abb august
-                    "Sep", // abb september
-                    "Okt", // abb october
-                    "Nov", // abb november
-                    "Dez", // abb december
-                    "" // abb month 13 if appliclicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "Sonntag", // Sunday
-                    "Montag", // Monday
-                    "Dienstag", // Tuesday
-                    "Mittwoch", // Wednesday
-                    "Donnerstag", // Thursday
-                    "Freitag", // Friday
-                    "Samstag" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "So", // abb Sunday
-                    "Mo", // abb Monday
-                    "Di", // abb Tuesday
-                    "Mi", // abb Wednesday
-                    "Do", // abb Thursday
-                    "Fr", // abb Friday
-                    "Sa" // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "v. Chr.",
-                    "n. Chr."
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm' Uhr 'z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "EEEE, d. MMMM yyyy", // full date pattern
-                    "d. MMMM yyyy", // long date pattern
-                    "dd.MM.yyyy", // medium date pattern
-                    "dd.MM.yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GuMtkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_de_AT.java b/ojluni/src/main/java/sun/text/resources/FormatData_de_AT.java
deleted file mode 100755
index f572d57..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_de_AT.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_de_AT extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "J\u00e4nner", // january
-                    "Februar", // february
-                    "M\u00e4rz", // march
-                    "April", // april
-                    "Mai", // may
-                    "Juni", // june
-                    "Juli", // july
-                    "August", // august
-                    "September", // september
-                    "Oktober", // october
-                    "November", // november
-                    "Dezember", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "J\u00e4n", // abb january
-                    "Feb", // abb february
-                    "M\u00e4r", // abb march
-                    "Apr", // abb april
-                    "Mai", // abb may
-                    "Jun", // abb june
-                    "Jul", // abb july
-                    "Aug", // abb august
-                    "Sep", // abb september
-                    "Okt", // abb october
-                    "Nov", // abb november
-                    "Dez", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4 #,##0.00;-\u00A4 #,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm' Uhr 'z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "EEEE, dd. MMMM yyyy", // full date pattern
-                    "dd. MMMM yyyy", // long date pattern
-                    "dd.MM.yyyy", // medium date pattern
-                    "dd.MM.yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GuMtkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_de_CH.java b/ojluni/src/main/java/sun/text/resources/FormatData_de_CH.java
deleted file mode 100755
index f0b03da..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_de_CH.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_de_CH extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4 #,##0.00;\u00A4-#,##0.00", // currency pattern
-                    "#,##0 %" // percent pattern
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ".", // decimal separator
-                    "'", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatternChars", "GuMtkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_de_DE.java b/ojluni/src/main/java/sun/text/resources/FormatData_de_DE.java
deleted file mode 100755
index a5b9ad3..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_de_DE.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_de_DE extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.00 \u00A4;-#,##0.00 \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_de_LU.java b/ojluni/src/main/java/sun/text/resources/FormatData_de_LU.java
deleted file mode 100755
index b81d22f..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_de_LU.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by IBM. These materials are provided under
- * terms of a License Agreement between IBM and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to IBM may not be removed.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_de_LU extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.00 \u00A4;-#,##0.00 \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_el.java b/ojluni/src/main/java/sun/text/resources/FormatData_el.java
deleted file mode 100755
index 0b15e84..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_el.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_el extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2", // january
-                    "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2", // february
-                    "\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2", // march
-                    "\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2", // april
-                    "\u039c\u03ac\u03ca\u03bf\u03c2", // may
-                    "\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2", // june
-                    "\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2", // july
-                    "\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2", // august
-                    "\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2", // september
-                    "\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2", // october
-                    "\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2", // november
-                    "\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "\u0399\u03b1\u03bd", // abb january
-                    "\u03a6\u03b5\u03b2", // abb february
-                    "\u039c\u03b1\u03c1", // abb march
-                    "\u0391\u03c0\u03c1", // abb april
-                    "\u039c\u03b1\u03ca", // abb may
-                    "\u0399\u03bf\u03c5\u03bd", // abb june
-                    "\u0399\u03bf\u03c5\u03bb", // abb july
-                    "\u0391\u03c5\u03b3", // abb august
-                    "\u03a3\u03b5\u03c0", // abb september
-                    "\u039f\u03ba\u03c4", // abb october
-                    "\u039d\u03bf\u03b5", // abb november
-                    "\u0394\u03b5\u03ba", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae", // Sunday
-                    "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1", // Monday
-                    "\u03a4\u03c1\u03af\u03c4\u03b7", // Tuesday
-                    "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7", // Wednesday
-                    "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7", // Thursday
-                    "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae", // Friday
-                    "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u039a\u03c5\u03c1", // abb Sunday
-                    "\u0394\u03b5\u03c5", // abb Monday
-                    "\u03a4\u03c1\u03b9", // abb Tuesday
-                    "\u03a4\u03b5\u03c4", // abb Wednesday
-                    "\u03a0\u03b5\u03bc", // abb Thursday
-                    "\u03a0\u03b1\u03c1", // abb Friday
-                    "\u03a3\u03b1\u03b2" // abb Saturday
-                }
-            },
-            { "AmPmMarkers",
-                new String[] {
-                    "\u03c0\u03bc", // am marker
-                    "\u03bc\u03bc" // pm marker
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "h:mm:ss a z", // full time pattern
-                    "h:mm:ss a z", // long time pattern
-                    "h:mm:ss a", // medium time pattern
-                    "h:mm a", // short time pattern
-                    "EEEE, d MMMM yyyy", // full date pattern
-                    "d MMMM yyyy", // long date pattern
-                    "d MMM yyyy", // medium date pattern
-                    "d/M/yyyy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_el_CY.java b/ojluni/src/main/java/sun/text/resources/FormatData_el_CY.java
deleted file mode 100755
index 9ee1f8f..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_el_CY.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_el_CY extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2",
-                    "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2",
-                    "\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2",
-                    "\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2",
-                    "\u039c\u03ac\u03b9\u03bf\u03c2",
-                    "\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2",
-                    "\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2",
-                    "\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2",
-                    "\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2",
-                    "\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2",
-                    "\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2",
-                    "\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2",
-                    "",
-                }
-            },
-            { "AmPmMarkers",
-                new String[] {
-                    "\u03a0\u039c",
-                    "\u039c\u039c",
-                }
-            },
-            { "Eras",
-                new String[] {
-                    "\u03c0.\u03a7.",
-                    "\u03bc.\u03a7.",
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###",
-                    "\u00a4#,##0.00",
-                    "#,##0%",
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",",
-                    ".",
-                    ";",
-                    "%",
-                    "0",
-                    "#",
-                    "-",
-                    "E",
-                    "\u2030",
-                    "\u221e",
-                    "NaN",
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "h:mm:ss a z",
-                    "h:mm:ss a z",
-                    "h:mm:ss a",
-                    "h:mm a",
-                    "EEEE, dd MMMM yyyy",
-                    "dd MMMM yyyy",
-                    "dd MMM yyyy",
-                    "dd/MM/yyyy",
-                    "{1} {0}",
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_el_GR.java b/ojluni/src/main/java/sun/text/resources/FormatData_el_GR.java
deleted file mode 100755
index d6599ec..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_el_GR.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_el_GR extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.00 \u00A4;-#,##0.00 \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_en.java b/ojluni/src/main/java/sun/text/resources/FormatData_en.java
deleted file mode 100755
index ceccd2e..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_en.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_en extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        // This locale inherits almost everything from the root default locale.  However,
-        // even if it inherited everything, we would still need this locale to exist
-        // to make the resource-bundle lookup mechanism work right.  In that case, we'd
-        // define this method as follows:
-        //    return new Object[][] { };
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4#,##0.00;-\u00A4#,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_en_AU.java b/ojluni/src/main/java/sun/text/resources/FormatData_en_AU.java
deleted file mode 100755
index e90978e..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_en_AU.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_en_AU extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "DateTimePatterns",
-                new String[] {
-                    "h:mm:ss a z", // full time pattern
-                    "h:mm:ss a", // long time pattern
-                    "h:mm:ss a", // medium time pattern
-                    "h:mm a", // short time pattern
-                    "EEEE, d MMMM yyyy", // full date pattern
-                    "d MMMM yyyy", // long date pattern
-                    "dd/MM/yyyy", // medium date pattern
-                    "d/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_en_CA.java b/ojluni/src/main/java/sun/text/resources/FormatData_en_CA.java
deleted file mode 100755
index 3b0ec9f..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_en_CA.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_en_CA extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "DateTimePatterns",
-                new String[] {
-                    "h:mm:ss 'o''clock' a z", // full time pattern
-                    "h:mm:ss z a", // long time pattern
-                    "h:mm:ss a", // medium time pattern
-                    "h:mm a", // short time pattern
-                    "EEEE, MMMM d, yyyy", // full date pattern
-                    "MMMM d, yyyy", // long date pattern
-                    "d-MMM-yyyy", // medium date pattern
-                    "dd/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_en_GB.java b/ojluni/src/main/java/sun/text/resources/FormatData_en_GB.java
deleted file mode 100755
index 199c32f..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_en_GB.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1996, 2006, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_en_GB extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss 'o''clock' z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "EEEE, d MMMM yyyy", // full date pattern
-                    "dd MMMM yyyy", // long date pattern
-                    "dd-MMM-yyyy", // medium date pattern
-                    "dd/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_en_IE.java b/ojluni/src/main/java/sun/text/resources/FormatData_en_IE.java
deleted file mode 100755
index 4f6dd66..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_en_IE.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_en_IE extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss 'o''clock' z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "dd MMMM yyyy", // full date pattern
-                    "dd MMMM yyyy", // long date pattern
-                    "dd-MMM-yyyy", // medium date pattern
-                    "dd/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_en_IN.java b/ojluni/src/main/java/sun/text/resources/FormatData_en_IN.java
deleted file mode 100755
index b611982..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_en_IN.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 1999, 2005, 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.
- */
-
-/*
- * Copyright (c) 1999 International Business Machines.
- * All Rights Reserved.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-
-/**
- * The locale elements for English in India.
- *
- */
-public class FormatData_en_IN extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberElements",
-                new String[] {
-                    ".", // decimal separator
-                    ",", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "\u0030", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "h:mm:ss a z", // full time pattern
-                    "h:mm:ss a z", // long time pattern
-                    "h:mm:ss a", // medium time pattern
-                    "h:mm a", // short time pattern
-                    "EEEE, d MMMM, yyyy", // full date pattern
-                    "d MMMM, yyyy", // long date pattern
-                    "d MMM, yyyy", // medium date pattern
-                    "d/M/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_en_MT.java b/ojluni/src/main/java/sun/text/resources/FormatData_en_MT.java
deleted file mode 100755
index 83436d6..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_en_MT.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_en_MT extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###",
-                    "\u00a4#,##0.00",
-                    "#,##0%",
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ".",
-                    ",",
-                    ";",
-                    "%",
-                    "0",
-                    "#",
-                    "-",
-                    "E",
-                    "\u2030",
-                    "\u221e",
-                    "NaN",
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z",
-                    "HH:mm:ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                    "EEEE, d MMMM yyyy",
-                    "dd MMMM yyyy",
-                    "dd MMM yyyy",
-                    "dd/MM/yyyy",
-                    "{1} {0}",
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_en_NZ.java b/ojluni/src/main/java/sun/text/resources/FormatData_en_NZ.java
deleted file mode 100755
index ebd450c..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_en_NZ.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_en_NZ extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "DateTimePatterns",
-                new String[] {
-                    "h:mm:ss a z", // full time pattern
-                    "h:mm:ss a", // long time pattern
-                    "h:mm:ss a", // medium time pattern
-                    "h:mm a", // short time pattern
-                    "EEEE, d MMMM yyyy", // full date pattern
-                    "d MMMM yyyy", // long date pattern
-                    "d/MM/yyyy", // medium date pattern
-                    "d/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_en_PH.java b/ojluni/src/main/java/sun/text/resources/FormatData_en_PH.java
deleted file mode 100755
index 3c02fa0..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_en_PH.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_en_PH extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###",
-                    "\u00a4#,##0.00;(\u00a4#,##0.00)",
-                    "#,##0%",
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ".",
-                    ",",
-                    ";",
-                    "%",
-                    "0",
-                    "#",
-                    "-",
-                    "E",
-                    "\u2030",
-                    "\u221e",
-                    "NaN",
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "h:mm:ss a z",
-                    "h:mm:ss a z",
-                    "h:mm:ss a",
-                    "h:mm a",
-                    "EEEE, MMMM d, yyyy",
-                    "MMMM d, yyyy",
-                    "MM d, yy",
-                    "M/d/yy",
-                    "{1} {0}",
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_en_SG.java b/ojluni/src/main/java/sun/text/resources/FormatData_en_SG.java
deleted file mode 100755
index 7e5a903..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_en_SG.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_en_SG extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###",
-                    "\u00a4#,##0.00",
-                    "#,##0%",
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ".",
-                    ",",
-                    ";",
-                    "%",
-                    "0",
-                    "#",
-                    "-",
-                    "E",
-                    "\u2030",
-                    "\u221e",
-                    "NaN",
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_en_US.java b/ojluni/src/main/java/sun/text/resources/FormatData_en_US.java
deleted file mode 100755
index bf966e5..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_en_US.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_en_US extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00a4#,##0.00;(\u00a4#,##0.00)", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_en_ZA.java b/ojluni/src/main/java/sun/text/resources/FormatData_en_ZA.java
deleted file mode 100755
index abd1283..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_en_ZA.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_en_ZA extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4 #,##0.00;\u00A4-#,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "h:mm:ss a", // full time pattern
-                    "h:mm:ss a", // long time pattern
-                    "h:mm:ss a", // medium time pattern
-                    "h:mm a", // short time pattern
-                    "EEEE dd MMMM yyyy", // full date pattern
-                    "dd MMMM yyyy", // long date pattern
-                    "dd MMM yyyy", // medium date pattern
-                    "yyyy/MM/dd", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es.java b/ojluni/src/main/java/sun/text/resources/FormatData_es.java
deleted file mode 100755
index a643f46..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "enero", // january
-                    "febrero", // february
-                    "marzo", // march
-                    "abril", // april
-                    "mayo", // may
-                    "junio", // june
-                    "julio", // july
-                    "agosto", // august
-                    "septiembre", // september
-                    "octubre", // october
-                    "noviembre", // november
-                    "diciembre", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "ene", // abb january
-                    "feb", // abb february
-                    "mar", // abb march
-                    "abr", // abb april
-                    "may", // abb may
-                    "jun", // abb june
-                    "jul", // abb july
-                    "ago", // abb august
-                    "sep", // abb september
-                    "oct", // abb october
-                    "nov", // abb november
-                    "dic", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "domingo", // Sunday
-                    "lunes", // Monday
-                    "martes", // Tuesday
-                    "mi\u00e9rcoles", // Wednesday
-                    "jueves", // Thursday
-                    "viernes", // Friday
-                    "s\u00e1bado" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "dom", // abb Sunday
-                    "lun", // abb Monday
-                    "mar", // abb Tuesday
-                    "mi\u00e9", // abb Wednesday
-                    "jue", // abb Thursday
-                    "vie", // abb Friday
-                    "s\u00e1b" // abb Saturday
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4#,##0.00;(\u00A4#,##0.00)", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH'H'mm'' z", // full time pattern
-                    "H:mm:ss z", // long time pattern
-                    "H:mm:ss", // medium time pattern
-                    "H:mm", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "dd-MMM-yyyy", // medium date pattern
-                    "d/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_AR.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_AR.java
deleted file mode 100755
index f811add..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_AR.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_AR extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4#,##0.00;\u00A4-#,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH'h'''mm z", // full time pattern
-                    "H:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "dd/MM/yyyy", // medium date pattern
-                    "dd/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_BO.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_BO.java
deleted file mode 100755
index 16958f8..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_BO.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_BO extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "dd-MM-yyyy", // medium date pattern
-                    "dd-MM-yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_CL.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_CL.java
deleted file mode 100755
index 8fd65e6..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_CL.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_CL extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4#,##0.00;\u00A4-#,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "dd-MM-yyyy", // medium date pattern
-                    "dd-MM-yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_CO.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_CO.java
deleted file mode 100755
index 3aa5e01..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_CO.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_CO extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "d/MM/yyyy", // medium date pattern
-                    "d/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_CR.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_CR.java
deleted file mode 100755
index e3bd256..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_CR.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_CR extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberElements",
-                new String[] {
-                    ".", // decimal separator
-                    ",", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "dd/MM/yyyy", // medium date pattern
-                    "dd/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_DO.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_DO.java
deleted file mode 100755
index f5a705c..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_DO.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_DO extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberElements",
-                new String[] {
-                    ".", // decimal separator
-                    ",", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "MM/dd/yyyy", // medium date pattern
-                    "MM/dd/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_EC.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_EC.java
deleted file mode 100755
index 35fab4c..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_EC.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_EC extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4#,##0.00;\u00A4-#,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "dd/MM/yyyy", // medium date pattern
-                    "dd/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_ES.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_ES.java
deleted file mode 100755
index 2afa572..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_ES.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_ES extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0 \u00A4;-#,##0 \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_GT.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_GT.java
deleted file mode 100755
index c0f693c..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_GT.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_GT extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberElements",
-                new String[] {
-                    ".", // decimal separator
-                    ",", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "d/MM/yyyy", // medium date pattern
-                    "d/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_HN.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_HN.java
deleted file mode 100755
index c225090..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_HN.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_HN extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberElements",
-                new String[] {
-                    ".", // decimal separator
-                    ",", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE dd' de 'MMMM' de 'yyyy", // full date pattern
-                    "dd' de 'MMMM' de 'yyyy", // long date pattern
-                    "MM-dd-yyyy", // medium date pattern
-                    "MM-dd-yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_MX.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_MX.java
deleted file mode 100755
index c039b5c..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_MX.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_MX extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberElements",
-                new String[] {
-                    ".", // decimal separator
-                    ",", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4#,##0.00;-\u00A4#,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "d/MM/yyyy", // medium date pattern
-                    "d/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_NI.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_NI.java
deleted file mode 100755
index 9b789a3..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_NI.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_NI extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberElements",
-                new String[] {
-                    ".", // decimal separator
-                    ",", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE dd' de 'MMMM' de 'yyyy", // full date pattern
-                    "dd' de 'MMMM' de 'yyyy", // long date pattern
-                    "MM-dd-yyyy", // medium date pattern
-                    "MM-dd-yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_PA.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_PA.java
deleted file mode 100755
index b541feb..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_PA.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_PA extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberElements",
-                new String[] {
-                    ".", // decimal separator
-                    ",", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "MM/dd/yyyy", // medium date pattern
-                    "MM/dd/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_PE.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_PE.java
deleted file mode 100755
index 93fb956..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_PE.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_PE extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4#,##0.00;\u00A4-#,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "dd/MM/yyyy", // medium date pattern
-                    "dd/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_PR.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_PR.java
deleted file mode 100755
index d50cf12..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_PR.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_PR extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberElements",
-                new String[] {
-                    ".", // decimal separator
-                    ",", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "MM-dd-yyyy", // medium date pattern
-                    "MM-dd-yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_PY.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_PY.java
deleted file mode 100755
index 39028db..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_PY.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_PY extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "dd/MM/yyyy", // medium date pattern
-                    "dd/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_SV.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_SV.java
deleted file mode 100755
index fee3f53..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_SV.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_SV extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberElements",
-                new String[] {
-                    ".", // decimal separator
-                    ",", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "MM-dd-yyyy", // medium date pattern
-                    "MM-dd-yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_US.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_US.java
deleted file mode 100755
index bca0739..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_US.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_US extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "AmPmMarkers",
-                new String[] {
-                    "a.m.",
-                    "p.m.",
-                }
-            },
-            { "Eras",
-                new String[] {
-                    "a.C.",
-                    "d.C.",
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###",
-                    "\u00a4#,##0.00;(\u00a4#,##0.00)",
-                    "#,##0%",
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ".",
-                    ",",
-                    ";",
-                    "%",
-                    "0",
-                    "#",
-                    "-",
-                    "E",
-                    "\u2030",
-                    "\u221e",
-                    "NaN",
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "h:mm:ss a z",
-                    "h:mm:ss a z",
-                    "h:mm:ss a",
-                    "h:mm a",
-                    "EEEE d' de 'MMMM' de 'yyyy",
-                    "d' de 'MMMM' de 'yyyy",
-                    "MMM d, yyyy",
-                    "M/d/yy",
-                    "{1} {0}",
-                }
-            },
-            { "DateTimePatternChars", "GuMtkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_UY.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_UY.java
deleted file mode 100755
index 3f183d84..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_UY.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_UY extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4 #,##0.00;(\u00A4#,##0.00)", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "dd/MM/yyyy", // medium date pattern
-                    "dd/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_es_VE.java b/ojluni/src/main/java/sun/text/resources/FormatData_es_VE.java
deleted file mode 100755
index 521cdea..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_es_VE.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_es_VE extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4#,##0.00;\u00A4 -#,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "hh:mm:ss a z", // full time pattern
-                    "hh:mm:ss a z", // long time pattern
-                    "hh:mm:ss a", // medium time pattern
-                    "hh:mm a", // short time pattern
-                    "EEEE d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "dd/MM/yyyy", // medium date pattern
-                    "dd/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_et.java b/ojluni/src/main/java/sun/text/resources/FormatData_et.java
deleted file mode 100755
index 54a6afe..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_et.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_et extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "jaanuar", // january
-                    "veebruar", // february
-                    "m\u00e4rts", // march
-                    "aprill", // april
-                    "mai", // may
-                    "juuni", // june
-                    "juuli", // july
-                    "august", // august
-                    "september", // september
-                    "oktoober", // october
-                    "november", // november
-                    "detsember", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "jaan", // abb january
-                    "veebr", // abb february
-                    "m\u00e4rts", // abb march
-                    "apr", // abb april
-                    "mai", // abb may
-                    "juuni", // abb june
-                    "juuli", // abb july
-                    "aug", // abb august
-                    "sept", // abb september
-                    "okt", // abb october
-                    "nov", // abb november
-                    "dets", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "p\u00fchap\u00e4ev", // Sunday
-                    "esmasp\u00e4ev", // Monday
-                    "teisip\u00e4ev", // Tuesday
-                    "kolmap\u00e4ev", // Wednesday
-                    "neljap\u00e4ev", // Thursday
-                    "reede", // Friday
-                    "laup\u00e4ev" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "P", // abb Sunday
-                    "E", // abb Monday
-                    "T", // abb Tuesday
-                    "K", // abb Wednesday
-                    "N", // abb Thursday
-                    "R", // abb Friday
-                    "L" // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "e.m.a.",
-                    "m.a.j."
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    "\u00a0", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "H:mm:ss z", // full time pattern
-                    "H:mm:ss z", // long time pattern
-                    "H:mm:ss", // medium time pattern
-                    "H:mm", // short time pattern
-                    "EEEE, d. MMMM yyyy", // full date pattern
-                    "EEEE, d. MMMM yyyy. 'a'", // long date pattern
-                    "d.MM.yyyy", // medium date pattern
-                    "d.MM.yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_et_EE.java b/ojluni/src/main/java/sun/text/resources/FormatData_et_EE.java
deleted file mode 100755
index 89596ae..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_et_EE.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_et_EE extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.## \u00A4;-#,##0.## \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_fi.java b/ojluni/src/main/java/sun/text/resources/FormatData_fi.java
deleted file mode 100755
index b77372c..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_fi.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 1996, 2006, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_fi extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "tammikuu", // january
-                    "helmikuu", // february
-                    "maaliskuu", // march
-                    "huhtikuu", // april
-                    "toukokuu", // may
-                    "kes\u00e4kuu", // june
-                    "hein\u00e4kuu", // july
-                    "elokuu", // august
-                    "syyskuu", // september
-                    "lokakuu", // october
-                    "marraskuu", // november
-                    "joulukuu", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "tammi", // abb january
-                    "helmi", // abb february
-                    "maalis", // abb march
-                    "huhti", // abb april
-                    "touko", // abb may
-                    "kes\u00e4", // abb june
-                    "hein\u00e4", // abb july
-                    "elo", // abb august
-                    "syys", // abb september
-                    "loka", // abb october
-                    "marras", // abb november
-                    "joulu", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "sunnuntai", // Sunday
-                    "maanantai", // Monday
-                    "tiistai", // Tuesday
-                    "keskiviikko", // Wednesday
-                    "torstai", // Thursday
-                    "perjantai", // Friday
-                    "lauantai" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "su", // abb Sunday
-                    "ma", // abb Monday
-                    "ti", // abb Tuesday
-                    "ke", // abb Wednesday
-                    "to", // abb Thursday
-                    "pe", // abb Friday
-                    "la" // abb Saturday
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    "\u00a0", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "H.mm.ss z", // full time pattern
-                    "'klo 'H.mm.ss", // long time pattern
-                    "H:mm:ss", // medium time pattern
-                    "H:mm", // short time pattern
-                    "d. MMMM'ta 'yyyy", // full date pattern
-                    "d. MMMM'ta 'yyyy", // long date pattern
-                    "d.M.yyyy", // medium date pattern
-                    "d.M.yyyy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-            { "AmPmMarkers",
-                new String[] {
-                    "ap.", // am marker
-                    "ip."  // pm marker
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_fi_FI.java b/ojluni/src/main/java/sun/text/resources/FormatData_fi_FI.java
deleted file mode 100755
index cea6a35..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_fi_FI.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_fi_FI extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.00 \u00A4;-#,##0.00 \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_fr.java b/ojluni/src/main/java/sun/text/resources/FormatData_fr.java
deleted file mode 100755
index 5fba629..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_fr.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_fr extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "janvier", // january
-                    "f\u00e9vrier", // february
-                    "mars", // march
-                    "avril", // april
-                    "mai", // may
-                    "juin", // june
-                    "juillet", // july
-                    "ao\u00fbt", // august
-                    "septembre", // september
-                    "octobre", // october
-                    "novembre", // november
-                    "d\u00e9cembre", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "janv.", // abb january
-                    "f\u00e9vr.", // abb february
-                    "mars", // abb march
-                    "avr.", // abb april
-                    "mai", // abb may
-                    "juin", // abb june
-                    "juil.", // abb july
-                    "ao\u00fbt", // abb august
-                    "sept.", // abb september
-                    "oct.", // abb october
-                    "nov.", // abb november
-                    "d\u00e9c.", // abb december
-                    "" // abb mo month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "dimanche", // Sunday
-                    "lundi", // Monday
-                    "mardi", // Tuesday
-                    "mercredi", // Wednesday
-                    "jeudi", // Thursday
-                    "vendredi", // Friday
-                    "samedi" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "dim.", // abb Sunday
-                    "lun.", // abb Monday
-                    "mar.", // abb Tuesday
-                    "mer.", // abb Wednesday
-                    "jeu.", // abb Thursday
-                    "ven.", // abb Friday
-                    "sam." // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "BC",
-                    "ap. J.-C."
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.00 \u00A4;-#,##0.00 \u00A4", // currency pattern
-                    "#,##0 %" // percent pattern
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    "\u00a0", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH' h 'mm z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "EEEE d MMMM yyyy", // full date pattern
-                    "d MMMM yyyy", // long date pattern
-                    "d MMM yyyy", // medium date pattern
-                    "dd/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GaMjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_fr_BE.java b/ojluni/src/main/java/sun/text/resources/FormatData_fr_BE.java
deleted file mode 100755
index 574f54a..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_fr_BE.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_fr_BE extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "H' h 'mm' min 'ss' s 'z", // full time pattern
-                    "H:mm:ss z", // long time pattern
-                    "H:mm:ss", // medium time pattern
-                    "H:mm", // short time pattern
-                    "EEEE d MMMM yyyy", // full date pattern
-                    "d MMMM yyyy", // long date pattern
-                    "dd-MMM-yyyy", // medium date pattern
-                    "d/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GaMjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_fr_CA.java b/ojluni/src/main/java/sun/text/resources/FormatData_fr_CA.java
deleted file mode 100755
index ffd2c9b..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_fr_CA.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_fr_CA extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.00 \u00A4;(#,##0.00\u00A4)", // currency pattern
-                    "#,##0 %" // percent pattern
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "H' h 'mm z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "EEEE d MMMM yyyy", // full date pattern
-                    "d MMMM yyyy", // long date pattern
-                    "yyyy-MM-dd", // medium date pattern
-                    "yy-MM-dd", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GaMjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_fr_CH.java b/ojluni/src/main/java/sun/text/resources/FormatData_fr_CH.java
deleted file mode 100755
index f3287d6..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_fr_CH.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 1996, 2010, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_fr_CH extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4 #,##0.00;\u00A4-#,##0.00", // currency pattern
-                    "#,##0 %" // percent pattern
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ".", // decimal separator
-                    "'", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH.mm.' h' z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "EEEE, d. MMMM yyyy", // full date pattern
-                    "d. MMMM yyyy", // long date pattern
-                    "d MMM yyyy", // medium date pattern
-                    "dd.MM.yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GaMjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_fr_FR.java b/ojluni/src/main/java/sun/text/resources/FormatData_fr_FR.java
deleted file mode 100755
index 1cd50a7..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_fr_FR.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_fr_FR extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_fr_LU.java b/ojluni/src/main/java/sun/text/resources/FormatData_fr_LU.java
deleted file mode 100755
index da41ab0..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_fr_LU.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1998, 2007, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by IBM. These materials are provided under
- * terms of a License Agreement between IBM and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to IBM may not be removed.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_fr_LU extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ga.java b/ojluni/src/main/java/sun/text/resources/FormatData_ga.java
deleted file mode 100755
index 518c4f5..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ga.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ga extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "Ean\u00e1ir",
-                    "Feabhra",
-                    "M\u00e1rta",
-                    "Aibre\u00e1n",
-                    "Bealtaine",
-                    "Meitheamh",
-                    "I\u00fail",
-                    "L\u00fanasa",
-                    "Me\u00e1n F\u00f3mhair",
-                    "Deireadh F\u00f3mhair",
-                    "Samhain",
-                    "Nollaig",
-                    "",
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "Ean",
-                    "Feabh",
-                    "M\u00e1rta",
-                    "Aib",
-                    "Beal",
-                    "Meith",
-                    "I\u00fail",
-                    "L\u00fan",
-                    "MF\u00f3mh",
-                    "DF\u00f3mh",
-                    "Samh",
-                    "Noll",
-                    "",
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "D\u00e9 Domhnaigh",
-                    "D\u00e9 Luain",
-                    "D\u00e9 M\u00e1irt",
-                    "D\u00e9 C\u00e9adaoin",
-                    "D\u00e9ardaoin",
-                    "D\u00e9 hAoine",
-                    "D\u00e9 Sathairn",
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "Domh",
-                    "Luan",
-                    "M\u00e1irt",
-                    "C\u00e9ad",
-                    "D\u00e9ar",
-                    "Aoine",
-                    "Sath",
-                }
-            },
-            { "AmPmMarkers",
-                new String[] {
-                    "a.m.",
-                    "p.m.",
-                }
-            },
-            { "Eras",
-                new String[] {
-                    "RC",
-                    "AD",
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###",
-                    "\u00a4 #,##0.00",
-                    "#,##0%",
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ".",
-                    ",",
-                    ";",
-                    "%",
-                    "0",
-                    "#",
-                    "-",
-                    "E",
-                    "\u2030",
-                    "\u221e",
-                    "NaN",
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z",
-                    "HH:mm:ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                    "EEEE, yyyy MMMM dd",
-                    "yyyy MMMM d",
-                    "yyyy MMM d",
-                    "yy/MM/dd",
-                    "{1} {0}",
-                }
-            },
-            { "DateTimePatternChars", "RbMLkUnsSElFtTauKcZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ga_IE.java b/ojluni/src/main/java/sun/text/resources/FormatData_ga_IE.java
deleted file mode 100755
index 052cf7a..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ga_IE.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ga_IE extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###",
-                    "\u00a4#,##0.00",
-                    "#,##0%",
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z",
-                    "HH:mm:ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                    "EEEE d MMMM yyyy",
-                    "d MMMM yyyy",
-                    "d MMM yyyy",
-                    "dd/MM/yyyy",
-                    "{1} {0}",
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_hi_IN.java b/ojluni/src/main/java/sun/text/resources/FormatData_hi_IN.java
deleted file mode 100755
index 8b0efaa..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_hi_IN.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 1999, 2007, 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.
- */
-
-/*
- * Copyright (c) 1998 International Business Machines.
- * All Rights Reserved.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-/**
- * The locale elements for Hindi.
- *
- */
-public class FormatData_hi_IN extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u091c\u0928\u0935\u0930\u0940", // january
-                    "\u092b\u093c\u0930\u0935\u0930\u0940", // february
-                    "\u092e\u093e\u0930\u094d\u091a", // march
-                    "\u0905\u092a\u094d\u0930\u0948\u0932", // april
-                    "\u092e\u0908", // may
-                    "\u091c\u0942\u0928", // june
-                    "\u091c\u0941\u0932\u093e\u0908", // july
-                    "\u0905\u0917\u0938\u094d\u0924", // august
-                    "\u0938\u093f\u0924\u0902\u092c\u0930", // september
-                    "\u0905\u0915\u094d\u200d\u0924\u0942\u092c\u0930", // october
-                    "\u0928\u0935\u0902\u092c\u0930", // november
-                    "\u0926\u093f\u0938\u0902\u092c\u0930", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",   // These are same as the long ones.
-                new String[] {
-                    "\u091c\u0928\u0935\u0930\u0940", // abb january
-                    "\u092b\u093c\u0930\u0935\u0930\u0940", // abb february
-                    "\u092e\u093e\u0930\u094d\u091a", // abb march
-                    "\u0905\u092a\u094d\u0930\u0948\u0932", // abb april
-                    "\u092e\u0908", // abb may
-                    "\u091c\u0942\u0928", // abb june
-                    "\u091c\u0941\u0932\u093e\u0908", // abb july
-                    "\u0905\u0917\u0938\u094d\u0924", // abb august
-                    "\u0938\u093f\u0924\u0902\u092c\u0930", // abb september
-                    "\u0905\u0915\u094d\u200d\u0924\u0942\u092c\u0930", // abb october
-                    "\u0928\u0935\u0902\u092c\u0930", // abb november
-                    "\u0926\u093f\u0938\u0902\u092c\u0930", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "\u0930\u0935\u093f\u0935\u093e\u0930", // Sunday
-                    "\u0938\u094b\u092e\u0935\u093e\u0930", // Monday
-                    "\u092e\u0902\u0917\u0932\u0935\u093e\u0930", // Tuesday
-                    "\u092c\u0941\u0927\u0935\u093e\u0930", // Wednesday
-                    "\u0917\u0941\u0930\u0941\u0935\u093e\u0930", // Thursday
-                    "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", // Friday
-                    "\u0936\u0928\u093f\u0935\u093e\u0930" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u0930\u0935\u093f", // abb Sunday
-                    "\u0938\u094b\u092e", // abb Monday
-                    "\u092e\u0902\u0917\u0932", // abb Tuesday
-                    "\u092c\u0941\u0927", // abb Wednesday
-                    "\u0917\u0941\u0930\u0941", // abb Thursday
-                    "\u0936\u0941\u0915\u094d\u0930", // abb Friday
-                    "\u0936\u0928\u093f" // abb Saturday
-                }
-            },
-            { "AmPmMarkers",
-                new String[] {
-                    "\u092a\u0942\u0930\u094d\u0935\u093e\u0939\u094d\u0928", // am marker
-                    "\u0905\u092a\u0930\u093e\u0939\u094d\u0928" // pm marker
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "\u0908\u0938\u093e\u092a\u0942\u0930\u094d\u0935",
-                    "\u0938\u0928"
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ".", // decimal separator
-                    ",", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "\u0966", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "h:mm:ss a z", // full time pattern
-                    "h:mm:ss a z", // long time pattern
-                    "h:mm:ss a", // medium time pattern
-                    "h:mm a", // short time pattern
-                    "EEEE, d MMMM, yyyy", // full date pattern
-                    "d MMMM, yyyy", // long date pattern
-                    "d MMM, yyyy", // medium date pattern
-                    "d/M/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_hr.java b/ojluni/src/main/java/sun/text/resources/FormatData_hr.java
deleted file mode 100755
index b3c8c6a..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_hr.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_hr extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "sije\u010danj", // january
-                    "velja\u010da", // february
-                    "o\u017eujak", // march
-                    "travanj", // april
-                    "svibanj", // may
-                    "lipanj", // june
-                    "srpanj", // july
-                    "kolovoz", // august
-                    "rujan", // september
-                    "listopad", // october
-                    "studeni", // november
-                    "prosinac", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "sij", // abb january
-                    "vel", // abb february
-                    "o\u017eu", // abb march
-                    "tra", // abb april
-                    "svi", // abb may
-                    "lip", // abb june
-                    "srp", // abb july
-                    "kol", // abb august
-                    "ruj", // abb september
-                    "lis", // abb october
-                    "stu", // abb november
-                    "pro", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "nedjelja", // Sunday
-                    "ponedjeljak", // Monday
-                    "utorak", // Tuesday
-                    "srijeda", // Wednesday
-                    "\u010detvrtak", // Thursday
-                    "petak", // Friday
-                    "subota" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "ned", // abb Sunday
-                    "pon", // abb Monday
-                    "uto", // abb Tuesday
-                    "sri", // abb Wednesday
-                    "\u010det", // abb Thursday
-                    "pet", // abb Friday
-                    "sub" // abb Saturday
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "yyyy. MMMM dd", // full date pattern
-                    "yyyy. MMMM dd", // long date pattern
-                    "yyyy.MM.dd", // medium date pattern
-                    "yyyy.MM.dd", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_hr_HR.java b/ojluni/src/main/java/sun/text/resources/FormatData_hr_HR.java
deleted file mode 100755
index 1893456..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_hr_HR.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_hr_HR extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4 #,##0.##;-\u00A4 #,##0.##", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "yyyy. MMMM dd", // full date pattern
-                    "yyyy. MMMM dd", // long date pattern
-                    "dd.MM.yyyy.", // medium date pattern
-                    "dd.MM.yy.", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_hu.java b/ojluni/src/main/java/sun/text/resources/FormatData_hu.java
deleted file mode 100755
index 9852c7d..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_hu.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_hu extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "janu\u00e1r", // january
-                    "febru\u00e1r", // february
-                    "m\u00e1rcius", // march
-                    "\u00e1prilis", // april
-                    "m\u00e1jus", // may
-                    "j\u00fanius", // june
-                    "j\u00falius", // july
-                    "augusztus", // august
-                    "szeptember", // september
-                    "okt\u00f3ber", // october
-                    "november", // november
-                    "december", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "jan.", // abb january
-                    "febr.", // abb february
-                    "m\u00e1rc.", // abb march
-                    "\u00e1pr.", // abb april
-                    "m\u00e1j.", // abb may
-                    "j\u00fan.", // abb june
-                    "j\u00fal.", // abb july
-                    "aug.", // abb august
-                    "szept.", // abb september
-                    "okt.", // abb october
-                    "nov.", // abb november
-                    "dec.", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "vas\u00e1rnap", // Sunday
-                    "h\u00e9tf\u0151", // Monday
-                    "kedd", // Tuesday
-                    "szerda", // Wednesday
-                    "cs\u00fct\u00f6rt\u00f6k", // Thursday
-                    "p\u00e9ntek", // Friday
-                    "szombat" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "V", // abb Sunday
-                    "H", // abb Monday
-                    "K", // abb Tuesday
-                    "Sze", // abb Wednesday
-                    "Cs", // abb Thursday
-                    "P", // abb Friday
-                    "Szo" // abb Saturday
-                }
-            },
-            { "AmPmMarkers",
-                new String[] {
-                    "DE", // am marker
-                    "DU" // pm marker
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "i.e.",
-                    "i.u."
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    "\u00a0", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "H:mm:ss z", // full time pattern
-                    "H:mm:ss z", // long time pattern
-                    "H:mm:ss", // medium time pattern
-                    "H:mm", // short time pattern
-                    "yyyy. MMMM d.", // full date pattern
-                    "yyyy. MMMM d.", // long date pattern
-                    "yyyy.MM.dd.", // medium date pattern
-                    "yyyy.MM.dd.", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_hu_HU.java b/ojluni/src/main/java/sun/text/resources/FormatData_hu_HU.java
deleted file mode 100755
index cf276c0..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_hu_HU.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_hu_HU extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.## \u00A4;-#,##0.## \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_in.java b/ojluni/src/main/java/sun/text/resources/FormatData_in.java
deleted file mode 100755
index 69c3989..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_in.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_in extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "Januari",
-                    "Februari",
-                    "Maret",
-                    "April",
-                    "Mei",
-                    "Juni",
-                    "Juli",
-                    "Agustus",
-                    "September",
-                    "Oktober",
-                    "November",
-                    "Desember",
-                    "",
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "Jan",
-                    "Feb",
-                    "Mar",
-                    "Apr",
-                    "Mei",
-                    "Jun",
-                    "Jul",
-                    "Agu",
-                    "Sep",
-                    "Okt",
-                    "Nov",
-                    "Des",
-                    "",
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "Minggu",
-                    "Senin",
-                    "Selasa",
-                    "Rabu",
-                    "Kamis",
-                    "Jumat",
-                    "Sabtu",
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "Min",
-                    "Sen",
-                    "Sel",
-                    "Rab",
-                    "Kam",
-                    "Jum",
-                    "Sab",
-                }
-            },
-            { "Eras",
-                new String[] {
-                    "BCE",
-                    "CE",
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###",
-                    "\u00a4#,##0.00",
-                    "#,##0%",
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",",
-                    ".",
-                    ";",
-                    "%",
-                    "0",
-                    "#",
-                    "-",
-                    "E",
-                    "\u2030",
-                    "\u221e",
-                    "NaN",
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z",
-                    "HH:mm:ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                    "EEEE, yyyy MMMM dd",
-                    "yyyy MMMM d",
-                    "yyyy MMM d",
-                    "yy/MM/dd",
-                    "{1} {0}",
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_in_ID.java b/ojluni/src/main/java/sun/text/resources/FormatData_in_ID.java
deleted file mode 100755
index f574cdf..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_in_ID.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_in_ID extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "DateTimePatterns",
-                new String[] {
-                    "H:mm:ss",
-                    "H:mm:ss",
-                    "H:mm:ss",
-                    "H:mm",
-                    "EEEE dd MMMM yyyy",
-                    "dd MMMM yyyy",
-                    "dd MMM yy",
-                    "dd/MM/yy",
-                    "{1} {0}",
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_is.java b/ojluni/src/main/java/sun/text/resources/FormatData_is.java
deleted file mode 100755
index 2a71373..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_is.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_is extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "jan\u00faar", // january
-                    "febr\u00faar", // february
-                    "mars", // march
-                    "apr\u00edl", // april
-                    "ma\u00ed", // may
-                    "j\u00fan\u00ed", // june
-                    "j\u00fal\u00ed", // july
-                    "\u00e1g\u00fast", // august
-                    "september", // september
-                    "okt\u00f3ber", // october
-                    "n\u00f3vember", // november
-                    "desember", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "jan.", // abb january
-                    "feb.", // abb february
-                    "mar.", // abb march
-                    "apr.", // abb april
-                    "ma\u00ed", // abb may
-                    "j\u00fan.", // abb june
-                    "j\u00fal.", // abb july
-                    "\u00e1g\u00fa.", // abb august
-                    "sep.", // abb september
-                    "okt.", // abb october
-                    "n\u00f3v.", // abb november
-                    "des.", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "sunnudagur", // Sunday
-                    "m\u00e1nudagur", // Monday
-                    "\u00feri\u00f0judagur", // Tuesday
-                    "mi\u00f0vikudagur", // Wednesday
-                    "fimmtudagur", // Thursday
-                    "f\u00f6studagur", // Friday
-                    "laugardagur" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "sun.", // abb Sunday
-                    "m\u00e1n.", // abb Monday
-                    "\u00feri.", // abb Tuesday
-                    "mi\u00f0.", // abb Wednesday
-                    "fim.", // abb Thursday
-                    "f\u00f6s.", // abb Friday
-                    "lau." // abb Saturday
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "d. MMMM yyyy", // full date pattern
-                    "d. MMMM yyyy", // long date pattern
-                    "d.M.yyyy", // medium date pattern
-                    "d.M.yyyy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_is_IS.java b/ojluni/src/main/java/sun/text/resources/FormatData_is_IS.java
deleted file mode 100755
index 55a4c28..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_is_IS.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_is_IS extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0. \u00A4;-#,##0. \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_it.java b/ojluni/src/main/java/sun/text/resources/FormatData_it.java
deleted file mode 100755
index 9b5fed7..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_it.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_it extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "gennaio", // january
-                    "febbraio", // february
-                    "marzo", // march
-                    "aprile", // april
-                    "maggio", // may
-                    "giugno", // june
-                    "luglio", // july
-                    "agosto", // august
-                    "settembre", // september
-                    "ottobre", // october
-                    "novembre", // november
-                    "dicembre", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "gen", // abb january
-                    "feb", // abb february
-                    "mar", // abb march
-                    "apr", // abb april
-                    "mag", // abb may
-                    "giu", // abb june
-                    "lug", // abb july
-                    "ago", // abb august
-                    "set", // abb september
-                    "ott", // abb october
-                    "nov", // abb november
-                    "dic", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "domenica", // Sunday
-                    "luned\u00ec", // Monday
-                    "marted\u00ec", // Tuesday
-                    "mercoled\u00ec", // Wednesday
-                    "gioved\u00ec", // Thursday
-                    "venerd\u00ec", // Friday
-                    "sabato" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "dom", // abb Sunday
-                    "lun", // abb Monday
-                    "mar", // abb Tuesday
-                    "mer", // abb Wednesday
-                    "gio", // abb Thursday
-                    "ven", // abb Friday
-                    "sab" // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "BC",
-                    "dopo Cristo"
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "H.mm.ss z", // full time pattern
-                    "H.mm.ss z", // long time pattern
-                    "H.mm.ss", // medium time pattern
-                    "H.mm", // short time pattern
-                    "EEEE d MMMM yyyy", // full date pattern
-                    "d MMMM yyyy", // long date pattern
-                    "d-MMM-yyyy", // medium date pattern
-                    "dd/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_it_CH.java b/ojluni/src/main/java/sun/text/resources/FormatData_it_CH.java
deleted file mode 100755
index 2d43eab..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_it_CH.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_it_CH extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4 #,##0.00;\u00A4-#,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ".", // decimal separator
-                    "'", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "H.mm' h' z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "EEEE, d. MMMM yyyy", // full date pattern
-                    "d. MMMM yyyy", // long date pattern
-                    "d-MMM-yyyy", // medium date pattern
-                    "dd.MM.yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GuMtkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_it_IT.java b/ojluni/src/main/java/sun/text/resources/FormatData_it_IT.java
deleted file mode 100755
index 4c1da08..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_it_IT.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_it_IT extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4 #,##0.00;-\u00A4 #,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_iw.java b/ojluni/src/main/java/sun/text/resources/FormatData_iw.java
deleted file mode 100755
index c538fc5..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_iw.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_iw extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u05d9\u05e0\u05d5\u05d0\u05e8", // january
-                    "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8", // february
-                    "\u05de\u05e8\u05e5", // march
-                    "\u05d0\u05e4\u05e8\u05d9\u05dc", // april
-                    "\u05de\u05d0\u05d9", // may
-                    "\u05d9\u05d5\u05e0\u05d9", // june
-                    "\u05d9\u05d5\u05dc\u05d9", // july
-                    "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8", // august
-                    "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8", // september
-                    "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8", // october
-                    "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8", // november
-                    "\u05d3\u05e6\u05de\u05d1\u05e8", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "\u05d9\u05e0\u05d5", // abb january
-                    "\u05e4\u05d1\u05e8", // abb february
-                    "\u05de\u05e8\u05e5", // abb march
-                    "\u05d0\u05e4\u05e8", // abb april
-                    "\u05de\u05d0\u05d9", // abb may
-                    "\u05d9\u05d5\u05e0", // abb june
-                    "\u05d9\u05d5\u05dc", // abb july
-                    "\u05d0\u05d5\u05d2", // abb august
-                    "\u05e1\u05e4\u05d8", // abb september
-                    "\u05d0\u05d5\u05e7", // abb october
-                    "\u05e0\u05d5\u05d1", // abb november
-                    "\u05d3\u05e6\u05de", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", // Sunday
-                    "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", // Monday
-                    "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", // Tuesday
-                    "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9", // Wednesday
-                    "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", // Thursday
-                    "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", // Friday
-                    "\u05e9\u05d1\u05ea" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u05d0", // abb Sunday
-                    "\u05d1", // abb Monday
-                    "\u05d2", // abb Tuesday
-                    "\u05d3", // abb Wednesday
-                    "\u05d4", // abb Thursday
-                    "\u05d5", // abb Friday
-                    "\u05e9" // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "\u05dc\u05e1\u05d4\"\u05e0",
-                    "\u05dc\u05e4\u05e1\u05d4\"\u05e0"
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "EEEE d MMMM yyyy", // full date pattern
-                    "d MMMM yyyy", // long date pattern
-                    "dd/MM/yyyy", // medium date pattern
-                    "dd/MM/yy", // short date pattern
-                    "{0} {1}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_iw_IL.java b/ojluni/src/main/java/sun/text/resources/FormatData_iw_IL.java
deleted file mode 100755
index 40d2440..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_iw_IL.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_iw_IL extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.## \u00A4;-#,##0.## \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ja.java b/ojluni/src/main/java/sun/text/resources/FormatData_ja.java
deleted file mode 100755
index c4ce174..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ja.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ja extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "1\u6708", // january
-                    "2\u6708", // february
-                    "3\u6708", // march
-                    "4\u6708", // april
-                    "5\u6708", // may
-                    "6\u6708", // june
-                    "7\u6708", // july
-                    "8\u6708", // august
-                    "9\u6708", // september
-                    "10\u6708", // october
-                    "11\u6708", // november
-                    "12\u6708", // december
-                    ""          // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "1", // abb january
-                    "2", // abb february
-                    "3", // abb march
-                    "4", // abb april
-                    "5", // abb may
-                    "6", // abb june
-                    "7", // abb july
-                    "8", // abb august
-                    "9", // abb september
-                    "10", // abb october
-                    "11", // abb november
-                    "12", // abb december
-                    ""    // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "\u65e5\u66dc\u65e5", // Sunday
-                    "\u6708\u66dc\u65e5", // Monday
-                    "\u706b\u66dc\u65e5", // Tuesday
-                    "\u6c34\u66dc\u65e5", // Wednesday
-                    "\u6728\u66dc\u65e5", // Thursday
-                    "\u91d1\u66dc\u65e5", // Friday
-                    "\u571f\u66dc\u65e5"  // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u65e5", // abb Sunday
-                    "\u6708", // abb Monday
-                    "\u706b", // abb Tuesday
-                    "\u6c34", // abb Wednesday
-                    "\u6728", // abb Thursday
-                    "\u91d1", // abb Friday
-                    "\u571f"  // abb Saturday
-                }
-            },
-            { "AmPmMarkers",
-                new String[] {
-                    "\u5348\u524d", // am marker
-                    "\u5348\u5f8c" // pm marker
-                }
-            },
-            { "Eras",
-                new String[] { // era strings for GregorianCalendar
-                    "\u7d00\u5143\u524d",
-                    "\u897f\u66a6"
-                }
-            },
-            { "sun.util.BuddhistCalendar.Eras",
-                new String[] { // era strings for Thai Buddhist calendar
-                    "\u7d00\u5143\u524d", // Kigenzen
-                    "\u4ecf\u66a6",       // Butsureki
-                }
-            },
-            { "java.util.JapaneseImperialCalendar.Eras",
-                new String[] { // era strings for Japanese imperial calendar
-                    "\u897f\u66a6",     // Seireki (Gregorian)
-                    "\u660e\u6cbb",     // Meiji
-                    "\u5927\u6b63",     // Taisho
-                    "\u662d\u548c",     // Showa
-                    "\u5e73\u6210",     // Heisei
-                }
-            },
-            { "java.util.JapaneseImperialCalendar.FirstYear",
-                new String[] {  // first year name
-                    "\u5143",   // "Gan"-nen
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ".",        // decimal separator
-                    ",",        // group (thousands) separator
-                    ";",        // list separator
-                    "%",        // percent sign
-                    "0",        // native 0 digit
-                    "#",        // pattern digit
-                    "-",        // minus sign
-                    "E",        // exponential
-                    "\u2030",   // per mille
-                    "\u221e",   // infinity
-                    "\ufffd"    // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "H'\u6642'mm'\u5206'ss'\u79d2' z", // full time pattern
-                    "H:mm:ss z",                       // long time pattern
-                    "H:mm:ss",                         // medium time pattern
-                    "H:mm",                            // short time pattern
-                    "yyyy'\u5e74'M'\u6708'd'\u65e5'",  // full date pattern
-                    "yyyy/MM/dd",                      // long date pattern
-                    "yyyy/MM/dd",                      // medium date pattern
-                    "yy/MM/dd",                        // short date pattern
-                    "{1} {0}"                          // date-time pattern
-                }
-            },
-            { "java.util.JapaneseImperialCalendar.DateTimePatterns",
-                new String[] {
-                    "H'\u6642'mm'\u5206'ss'\u79d2' z", // full time pattern
-                    "H:mm:ss z", // long time pattern
-                    "H:mm:ss",   // medium time pattern
-                    "H:mm",      // short time pattern
-                    "GGGGyyyy'\u5e74'M'\u6708'd'\u65e5'", // full date pattern
-                    "Gy.MM.dd",  // long date pattern
-                    "Gy.MM.dd",  // medium date pattern
-                    "Gy.MM.dd",  // short date pattern
-                    "{1} {0}"    // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ja_JP.java b/ojluni/src/main/java/sun/text/resources/FormatData_ja_JP.java
deleted file mode 100755
index fd9f9c8..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ja_JP.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ja_JP extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4#,##0;-\u00A4#,##0", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ja_JP_JP.java b/ojluni/src/main/java/sun/text/resources/FormatData_ja_JP_JP.java
deleted file mode 100755
index 200b5fb..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ja_JP_JP.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-/*
- * (C) Copyright IBM Corp. 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_ja_JP_JP extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ko.java b/ojluni/src/main/java/sun/text/resources/FormatData_ko.java
deleted file mode 100755
index c9f8cda..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ko.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ko extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "1\uc6d4", // january
-                    "2\uc6d4", // february
-                    "3\uc6d4", // march
-                    "4\uc6d4", // april
-                    "5\uc6d4", // may
-                    "6\uc6d4", // june
-                    "7\uc6d4", // july
-                    "8\uc6d4", // august
-                    "9\uc6d4", // september
-                    "10\uc6d4", // october
-                    "11\uc6d4", // november
-                    "12\uc6d4", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "1\uc6d4", // abb january
-                    "2\uc6d4", // abb february
-                    "3\uc6d4", // abb march
-                    "4\uc6d4", // abb april
-                    "5\uc6d4", // abb may
-                    "6\uc6d4", // abb june
-                    "7\uc6d4", // abb july
-                    "8\uc6d4", // abb august
-                    "9\uc6d4", // abb september
-                    "10\uc6d4", // abb october
-                    "11\uc6d4", // abb november
-                    "12\uc6d4", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "\uc77c\uc694\uc77c", // Sunday
-                    "\uc6d4\uc694\uc77c", // Monday
-                    "\ud654\uc694\uc77c", // Tuesday
-                    "\uc218\uc694\uc77c", // Wednesday
-                    "\ubaa9\uc694\uc77c", // Thursday
-                    "\uae08\uc694\uc77c", // Friday
-                    "\ud1a0\uc694\uc77c" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\uc77c", // abb Sunday
-                    "\uc6d4", // abb Monday
-                    "\ud654", // abb Tuesday
-                    "\uc218", // abb Wednesday
-                    "\ubaa9", // abb Thursday
-                    "\uae08", // abb Friday
-                    "\ud1a0" // abb Saturday
-                }
-            },
-            { "AmPmMarkers",
-                new String[] {
-                    "\uc624\uc804", // am marker
-                    "\uc624\ud6c4" // pm marker
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "a h'\uc2dc' mm'\ubd84' ss'\ucd08' z", // full time pattern
-                    "a h'\uc2dc' mm'\ubd84' ss'\ucd08'", // long time pattern
-                    "a h:mm:ss", // medium time pattern
-                    "a h:mm", // short time pattern
-                    "yyyy'\ub144' M'\uc6d4' d'\uc77c' EEEE", // full date pattern
-                    "yyyy'\ub144' M'\uc6d4' d'\uc77c' '('EE')'", // long date pattern
-                    "yyyy. M. d", // medium date pattern
-                    "yy. M. d", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ko_KR.java b/ojluni/src/main/java/sun/text/resources/FormatData_ko_KR.java
deleted file mode 100755
index 9a3c36a..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ko_KR.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ko_KR extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4#,##0;-\u00A4#,##0", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_lt.java b/ojluni/src/main/java/sun/text/resources/FormatData_lt.java
deleted file mode 100755
index 81a3ad7..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_lt.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_lt extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "Sausio", // january
-                    "Vasario", // february
-                    "Kovo", // march
-                    "Baland\u017eio", // april
-                    "Gegu\u017e\u0117s", // may
-                    "Bir\u017eelio", // june
-                    "Liepos", // july
-                    "Rugpj\u016b\u010dio", // august
-                    "Rugs\u0117jo", // september
-                    "Spalio", // october
-                    "Lapkri\u010dio", // november
-                    "Gruod\u017eio", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "Sau", // abb january
-                    "Vas", // abb february
-                    "Kov", // abb march
-                    "Bal", // abb april
-                    "Geg", // abb may
-                    "Bir", // abb june
-                    "Lie", // abb july
-                    "Rgp", // abb august
-                    "Rgs", // abb september
-                    "Spa", // abb october
-                    "Lap", // abb november
-                    "Grd", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "Sekmadienis", // Sunday
-                    "Pirmadienis", // Monday
-                    "Antradienis", // Tuesday
-                    "Tre\u010diadienis", // Wednesday
-                    "Ketvirtadienis", // Thursday
-                    "Penktadienis", // Friday
-                    "\u0160e\u0161tadienis" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "Sk", // abb Sunday
-                    "Pr", // abb Monday
-                    "An", // abb Tuesday
-                    "Tr", // abb Wednesday
-                    "Kt", // abb Thursday
-                    "Pn", // abb Friday
-                    "\u0160t" // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "pr.Kr.",
-                    "po.Kr."
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    "\u00a0", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH.mm.ss z", // full time pattern
-                    "HH.mm.ss z", // long time pattern
-                    "HH.mm.ss", // medium time pattern
-                    "HH.mm", // short time pattern
-                    "EEEE, yyyy, MMMM d", // full date pattern
-                    "EEEE, yyyy, MMMM d", // long date pattern
-                    "yyyy-MM-dd", // medium date pattern
-                    "yy.M.d", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_lt_LT.java b/ojluni/src/main/java/sun/text/resources/FormatData_lt_LT.java
deleted file mode 100755
index 2229f08..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_lt_LT.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_lt_LT extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "##,##0.##;-##,##0.##", // decimal pattern
-                    "#,##0.## \u00A4;-#,##0.## \u00A4", // currency pattern
-                    "#,##%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_lv.java b/ojluni/src/main/java/sun/text/resources/FormatData_lv.java
deleted file mode 100755
index 5e1278f..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_lv.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_lv extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "janv\u0101ris", // january
-                    "febru\u0101ris", // february
-                    "marts", // march
-                    "apr\u012blis", // april
-                    "maijs", // may
-                    "j\u016bnijs", // june
-                    "j\u016blijs", // july
-                    "augusts", // august
-                    "septembris", // september
-                    "oktobris", // october
-                    "novembris", // november
-                    "decembris", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "Jan", // abb january
-                    "Feb", // abb february
-                    "Mar", // abb march
-                    "Apr", // abb april
-                    "Maijs", // abb may
-                    "J\u016bn", // abb june
-                    "J\u016bl", // abb july
-                    "Aug", // abb august
-                    "Sep", // abb september
-                    "Okt", // abb october
-                    "Nov", // abb november
-                    "Dec", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "sv\u0113tdiena", // Sunday
-                    "pirmdiena", // Monday
-                    "otrdiena", // Tuesday
-                    "tre\u0161diena", // Wednesday
-                    "ceturtdiena", // Thursday
-                    "piektdiena", // Friday
-                    "sestdiena" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "Sv", // abb Sunday
-                    "P", // abb Monday
-                    "O", // abb Tuesday
-                    "T", // abb Wednesday
-                    "C", // abb Thursday
-                    "Pk", // abb Friday
-                    "S" // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "pm\u0113",
-                    "m\u0113"
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    "\u00a0", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "EEEE, yyyy, d MMMM", // full date pattern
-                    "EEEE, yyyy, d MMMM", // long date pattern
-                    "yyyy.d.M", // medium date pattern
-                    "yy.d.M", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_lv_LV.java b/ojluni/src/main/java/sun/text/resources/FormatData_lv_LV.java
deleted file mode 100755
index 57c2bc5..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_lv_LV.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_lv_LV extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.## \u00A4;-#,##0.## \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_mk.java b/ojluni/src/main/java/sun/text/resources/FormatData_mk.java
deleted file mode 100755
index 494eea1..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_mk.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_mk extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u0458\u0430\u043d\u0443\u0430\u0440\u0438", // january
-                    "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438", // february
-                    "\u043c\u0430\u0440\u0442", // march
-                    "\u0430\u043f\u0440\u0438\u043b", // april
-                    "\u043c\u0430\u0458", // may
-                    "\u0458\u0443\u043d\u0438", // june
-                    "\u0458\u0443\u043b\u0438", // july
-                    "\u0430\u0432\u0433\u0443\u0441\u0442", // august
-                    "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438", // september
-                    "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438", // october
-                    "\u043d\u043e\u0435\u043c\u0432\u0440\u0438", // november
-                    "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "\u0458\u0430\u043d.", // abb january
-                    "\u0444\u0435\u0432.", // abb february
-                    "\u043c\u0430\u0440.", // abb march
-                    "\u0430\u043f\u0440.", // abb april
-                    "\u043c\u0430\u0458.", // abb may
-                    "\u0458\u0443\u043d.", // abb june
-                    "\u0458\u0443\u043b.", // abb july
-                    "\u0430\u0432\u0433.", // abb august
-                    "\u0441\u0435\u043f\u0442.", // abb september
-                    "\u043e\u043a\u0442.", // abb october
-                    "\u043d\u043e\u0435\u043c.", // abb november
-                    "\u0434\u0435\u043a\u0435\u043c.", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "\u043d\u0435\u0434\u0435\u043b\u0430", // Sunday
-                    "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", // Monday
-                    "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", // Tuesday
-                    "\u0441\u0440\u0435\u0434\u0430", // Wednesday
-                    "\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a", // Thursday
-                    "\u043f\u0435\u0442\u043e\u043a", // Friday
-                    "\u0441\u0430\u0431\u043e\u0442\u0430" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u043d\u0435\u0434.", // abb Sunday
-                    "\u043f\u043e\u043d.", // abb Monday
-                    "\u0432\u0442.", // abb Tuesday
-                    "\u0441\u0440\u0435.", // abb Wednesday
-                    "\u0447\u0435\u0442.", // abb Thursday
-                    "\u043f\u0435\u0442.", // abb Friday
-                    "\u0441\u0430\u0431." // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "\u043f\u0440.\u043d.\u0435.",
-                    "\u0430\u0435."
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "EEEE, d, MMMM yyyy", // full date pattern
-                    "d, MMMM yyyy", // long date pattern
-                    "d.M.yyyy", // medium date pattern
-                    "d.M.yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GuMtkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_mk_MK.java b/ojluni/src/main/java/sun/text/resources/FormatData_mk_MK.java
deleted file mode 100755
index 006813c..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_mk_MK.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_mk_MK extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;(#,##0.###)", // decimal pattern
-                    "\u00A4 #,##0.##;-\u00A4 #,##0.##", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ms.java b/ojluni/src/main/java/sun/text/resources/FormatData_ms.java
deleted file mode 100755
index 019863d..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ms.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ms extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "Januari",
-                    "Februari",
-                    "Mac",
-                    "April",
-                    "Mei",
-                    "Jun",
-                    "Julai",
-                    "Ogos",
-                    "September",
-                    "Oktober",
-                    "November",
-                    "Disember",
-                    "",
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "Jan",
-                    "Feb",
-                    "Mac",
-                    "Apr",
-                    "Mei",
-                    "Jun",
-                    "Jul",
-                    "Ogos",
-                    "Sep",
-                    "Okt",
-                    "Nov",
-                    "Dis",
-                    "",
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "Ahad",
-                    "Isnin",
-                    "Selasa",
-                    "Rabu",
-                    "Khamis",
-                    "Jumaat",
-                    "Sabtu",
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "Ahd",
-                    "Isn",
-                    "Sel",
-                    "Rab",
-                    "Kha",
-                    "Jum",
-                    "Sab",
-                }
-            },
-            { "Eras",
-                new String[] {
-                    "BCE",
-                    "CE",
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###",
-                    "\u00a4 #,##0.00",
-                    "#,##0%",
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ".",
-                    ",",
-                    ";",
-                    "%",
-                    "0",
-                    "#",
-                    "-",
-                    "E",
-                    "\u2030",
-                    "\u221e",
-                    "NaN",
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z",
-                    "HH:mm:ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                    "EEEE, yyyy MMMM dd",
-                    "yyyy MMMM d",
-                    "yyyy MMM d",
-                    "yy/MM/dd",
-                    "{1} {0}",
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ms_MY.java b/ojluni/src/main/java/sun/text/resources/FormatData_ms_MY.java
deleted file mode 100755
index af66000..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ms_MY.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ms_MY extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###",
-                    "\u00a4#,##0.00;(\u00a4#,##0.00)",
-                    "#,##0%",
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "h:mm:ss a z",
-                    "h:mm:ss a z",
-                    "h:mm:ss a",
-                    "h:mm",
-                    "EEEE dd MMM yyyy",
-                    "dd MMMM yyyy",
-                    "dd MMMM yyyy",
-                    "dd/MM/yyyy",
-                    "{1} {0}",
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_mt.java b/ojluni/src/main/java/sun/text/resources/FormatData_mt.java
deleted file mode 100755
index 910ac31..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_mt.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_mt extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "Jannar",
-                    "Frar",
-                    "Marzu",
-                    "April",
-                    "Mejju",
-                    "\u0120unju",
-                    "Lulju",
-                    "Awissu",
-                    "Settembru",
-                    "Ottubru",
-                    "Novembru",
-                    "Di\u010bembru",
-                    "",
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "Jan",
-                    "Fra",
-                    "Mar",
-                    "Apr",
-                    "Mej",
-                    "\u0120un",
-                    "Lul",
-                    "Awi",
-                    "Set",
-                    "Ott",
-                    "Nov",
-                    "Di\u010b",
-                    "",
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "Il-\u0126add",
-                    "It-Tnejn",
-                    "It-Tlieta",
-                    "L-Erbg\u0127a",
-                    "Il-\u0126amis",
-                    "Il-\u0120img\u0127a",
-                    "Is-Sibt",
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u0126ad",
-                    "Tne",
-                    "Tli",
-                    "Erb",
-                    "\u0126am",
-                    "\u0120im",
-                    "Sib",
-                }
-            },
-            { "AmPmMarkers",
-                new String[] {
-                    "QN",
-                    "WN",
-                }
-            },
-            { "Eras",
-                new String[] {
-                    "QK",
-                    "WK",
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###",
-                    "\u00a4 #,##0.00",
-                    "#,##0%",
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ".",
-                    ",",
-                    ";",
-                    "%",
-                    "0",
-                    "#",
-                    "-",
-                    "E",
-                    "\u2030",
-                    "\u221e",
-                    "NaN",
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z",
-                    "HH:mm:ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                    "EEEE, d 'ta\u2019' MMMM yyyy",
-                    "d 'ta\u2019' MMMM yyyy",
-                    "dd MMM yyyy",
-                    "dd/MM/yyyy",
-                    "{1} {0}",
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_mt_MT.java b/ojluni/src/main/java/sun/text/resources/FormatData_mt_MT.java
deleted file mode 100755
index 033600e..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_mt_MT.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_mt_MT extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###",
-                    "\u00a4#,##0.00",
-                    "#,##0%",
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_nl.java b/ojluni/src/main/java/sun/text/resources/FormatData_nl.java
deleted file mode 100755
index d135134..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_nl.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_nl extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "januari", // january
-                    "februari", // february
-                    "maart", // march
-                    "april", // april
-                    "mei", // may
-                    "juni", // june
-                    "juli", // july
-                    "augustus", // august
-                    "september", // september
-                    "oktober", // october
-                    "november", // november
-                    "december", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "jan", // abb january
-                    "feb", // abb february
-                    "mrt", // abb march
-                    "apr", // abb april
-                    "mei", // abb may
-                    "jun", // abb june
-                    "jul", // abb july
-                    "aug", // abb august
-                    "sep", // abb september
-                    "okt", // abb october
-                    "nov", // abb november
-                    "dec", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "zondag", // Sunday
-                    "maandag", // Monday
-                    "dinsdag", // Tuesday
-                    "woensdag", // Wednesday
-                    "donderdag", // Thursday
-                    "vrijdag", // Friday
-                    "zaterdag" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "zo", // abb Sunday
-                    "ma", // abb Monday
-                    "di", // abb Tuesday
-                    "wo", // abb Wednesday
-                    "do", // abb Thursday
-                    "vr", // abb Friday
-                    "za" // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings for GregorianCalendar
-                    "v. Chr.",
-                    "n. Chr."
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousandsnds) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "H:mm:ss' uur' z", // full time pattern
-                    "H:mm:ss z", // long time pattern
-                    "H:mm:ss", // medium time pattern
-                    "H:mm", // short time pattern
-                    "EEEE d MMMM yyyy", // full date pattern
-                    "d MMMM yyyy", // long date pattern
-                    "d-MMM-yyyy", // medium date pattern
-                    "d-M-yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_nl_BE.java b/ojluni/src/main/java/sun/text/resources/FormatData_nl_BE.java
deleted file mode 100755
index 3fc8a0c..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_nl_BE.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_nl_BE extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.00 \u00A4;-#,##0.00 \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "H.mm' u. 'z", // full time pattern
-                    "H:mm:ss z", // long time pattern
-                    "H:mm:ss", // medium time pattern
-                    "H:mm", // short time pattern
-                    "EEEE d MMMM yyyy", // full date pattern
-                    "d MMMM yyyy", // long date pattern
-                    "d-MMM-yyyy", // medium date pattern
-                    "d/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_nl_NL.java b/ojluni/src/main/java/sun/text/resources/FormatData_nl_NL.java
deleted file mode 100755
index 0f2796a..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_nl_NL.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_nl_NL extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4 #,##0.00;\u00A4 #,##0.00-", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_no.java b/ojluni/src/main/java/sun/text/resources/FormatData_no.java
deleted file mode 100755
index 88bba11..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_no.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (c) 1996, 2006, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_no extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "januar", // january
-                    "februar", // february
-                    "mars", // march
-                    "april", // april
-                    "mai", // may
-                    "juni", // june
-                    "juli", // july
-                    "august", // august
-                    "september", // september
-                    "oktober", // october
-                    "november", // november
-                    "desember", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "jan", // abb january
-                    "feb", // abb february
-                    "mar", // abb march
-                    "apr", // abb april
-                    "mai", // abb may
-                    "jun", // abb june
-                    "jul", // abb july
-                    "aug", // abb august
-                    "sep", // abb september
-                    "okt", // abb october
-                    "nov", // abb november
-                    "des", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "s\u00f8ndag", // Sunday
-                    "mandag", // Monday
-                    "tirsdag", // Tuesday
-                    "onsdag", // Wednesday
-                    "torsdag", // Thursday
-                    "fredag", // Friday
-                    "l\u00f8rdag" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "s\u00f8", // abb Sunday
-                    "ma", // abb Monday
-                    "ti", // abb Tuesday
-                    "on", // abb Wednesday
-                    "to", // abb Thursday
-                    "fr", // abb Friday
-                    "l\u00f8" // abb Saturday
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    "\u00a0", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "'kl 'HH.mm z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "d. MMMM yyyy", // full date pattern
-                    "d. MMMM yyyy", // long date pattern
-                    "dd.MMM.yyyy", // medium date pattern
-                    "dd.MM.yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_no_NO.java b/ojluni/src/main/java/sun/text/resources/FormatData_no_NO.java
deleted file mode 100755
index 07f1796..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_no_NO.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2006, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_no_NO extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4 #,##0.00;\u00A4 -#,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_no_NO_NY.java b/ojluni/src/main/java/sun/text/resources/FormatData_no_NO_NY.java
deleted file mode 100755
index ba3811e..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_no_NO_NY.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_no_NO_NY extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "januar", // january
-                    "februar", // february
-                    "mars", // march
-                    "april", // april
-                    "mai", // may
-                    "juni", // june
-                    "juli", // july
-                    "august", // august
-                    "september", // september
-                    "oktober", // october
-                    "november", // november
-                    "desember", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "jan", // abb january
-                    "feb", // abb february
-                    "mar", // abb march
-                    "apr", // abb april
-                    "mai", // abb may
-                    "jun", // abb june
-                    "jul", // abb july
-                    "aug", // abb august
-                    "sep", // abb september
-                    "okt", // abb october
-                    "nov", // abb november
-                    "des", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "sundag", // Sunday
-                    "m\u00e5ndag", // Monday
-                    "tysdag", // Tuesday
-                    "onsdag", // Wednesday
-                    "torsdag", // Thursday
-                    "fredag", // Friday
-                    "laurdag" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "su", // abb Sunday
-                    "m\u00e5", // abb Monday
-                    "ty", // abb Tuesday
-                    "on", // abb Wednesday
-                    "to", // abb Thursday
-                    "fr", // abb Friday
-                    "lau" // abb Saturday
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    "\u00a0", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "'kl 'HH.mm z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "d. MMMM yyyy", // full date pattern
-                    "d. MMMM yyyy", // long date pattern
-                    "dd.MMM.yyyy", // medium date pattern
-                    "dd.MM.yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_pl.java b/ojluni/src/main/java/sun/text/resources/FormatData_pl.java
deleted file mode 100755
index dae967f..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_pl.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_pl extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "stycze\u0144", // january
-                    "luty", // february
-                    "marzec", // march
-                    "kwiecie\u0144", // april
-                    "maj", // may
-                    "czerwiec", // june
-                    "lipiec", // july
-                    "sierpie\u0144", // august
-                    "wrzesie\u0144", // september
-                    "pa\u017adziernik", // october
-                    "listopad", // november
-                    "grudzie\u0144", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "sty", // abb january
-                    "lut", // abb february
-                    "mar", // abb march
-                    "kwi", // abb april
-                    "maj", // abb may
-                    "cze", // abb june
-                    "lip", // abb july
-                    "sie", // abb august
-                    "wrz", // abb september
-                    "pa\u017a", // abb october
-                    "lis", // abb november
-                    "gru", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "niedziela", // Sunday
-                    "poniedzia\u0142ek", // Monday
-                    "wtorek", // Tuesday
-                    "\u015broda", // Wednesday
-                    "czwartek", // Thursday
-                    "pi\u0105tek", // Friday
-                    "sobota" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "N", // abb Sunday
-                    "Pn", // abb Monday
-                    "Wt", // abb Tuesday
-                    "\u015ar", // abb Wednesday
-                    "Cz", // abb Thursday
-                    "Pt", // abb Friday
-                    "So" // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "p.n.e.",
-                    "n.e."
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    "\u00a0", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "EEEE, d MMMM yyyy", // full date pattern
-                    "d MMMM yyyy", // long date pattern
-                    "yyyy-MM-dd", // medium date pattern
-                    "yy-MM-dd", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_pl_PL.java b/ojluni/src/main/java/sun/text/resources/FormatData_pl_PL.java
deleted file mode 100755
index c0f932a..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_pl_PL.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_pl_PL extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.## \u00A4;-#,##0.## \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "EEEE, d MMMM yyyy", // full date pattern
-                    "d MMMM yyyy", // long date pattern
-                    "yyyy-MM-dd", // medium date pattern
-                    "dd.MM.yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_pt.java b/ojluni/src/main/java/sun/text/resources/FormatData_pt.java
deleted file mode 100755
index cc51884..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_pt.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_pt extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "Janeiro", // january
-                    "Fevereiro", // february
-                    "Mar\u00e7o", // march
-                    "Abril", // april
-                    "Maio", // may
-                    "Junho", // june
-                    "Julho", // july
-                    "Agosto", // august
-                    "Setembro", // september
-                    "Outubro", // october
-                    "Novembro", // november
-                    "Dezembro", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "Jan", // abb january
-                    "Fev", // abb february
-                    "Mar", // abb march
-                    "Abr", // abb april
-                    "Mai", // abb may
-                    "Jun", // abb june
-                    "Jul", // abb july
-                    "Ago", // abb august
-                    "Set", // abb september
-                    "Out", // abb october
-                    "Nov", // abb november
-                    "Dez", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "Domingo", // Sunday
-                    "Segunda-feira", // Monday
-                    "Ter\u00e7a-feira", // Tuesday
-                    "Quarta-feira", // Wednesday
-                    "Quinta-feira", // Thursday
-                    "Sexta-feira", // Friday
-                    "S\u00e1bado" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "Dom", // abb Sunday
-                    "Seg", // abb Monday
-                    "Ter", // abb Tuesday
-                    "Qua", // abb Wednesday
-                    "Qui", // abb Thursday
-                    "Sex", // abb Friday
-                    "S\u00e1b" // abb Saturday
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal al separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH'H'mm'm' z", // full time pattern
-                    "H:mm:ss z", // long time pattern
-                    "H:mm:ss", // medium time pattern
-                    "H:mm", // short time pattern
-                    "EEEE, d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "d/MMM/yyyy", // medium date pattern
-                    "dd-MM-yyyy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_pt_BR.java b/ojluni/src/main/java/sun/text/resources/FormatData_pt_BR.java
deleted file mode 100755
index 56667f0..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_pt_BR.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_pt_BR extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4 #,##0.00;-\u00A4 #,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH'h'mm'min'ss's' z", // full time pattern
-                    "H'h'm'min's's' z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "EEEE, d' de 'MMMM' de 'yyyy", // full date pattern
-                    "d' de 'MMMM' de 'yyyy", // long date pattern
-                    "dd/MM/yyyy", // medium date pattern
-                    "dd/MM/yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_pt_PT.java b/ojluni/src/main/java/sun/text/resources/FormatData_pt_PT.java
deleted file mode 100755
index 3513107..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_pt_PT.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_pt_PT extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.00 \u00A4;-#,##0.00 \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ro.java b/ojluni/src/main/java/sun/text/resources/FormatData_ro.java
deleted file mode 100755
index 188ddfa..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ro.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ro extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "ianuarie", // january
-                    "februarie", // february
-                    "martie", // march
-                    "aprilie", // april
-                    "mai", // may
-                    "iunie", // june
-                    "iulie", // july
-                    "august", // august
-                    "septembrie", // september
-                    "octombrie", // october
-                    "noiembrie", // november
-                    "decembrie", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "Ian", // abb january
-                    "Feb", // abb february
-                    "Mar", // abb march
-                    "Apr", // abb april
-                    "Mai", // abb may
-                    "Iun", // abb june
-                    "Iul", // abb july
-                    "Aug", // abb august
-                    "Sep", // abb september
-                    "Oct", // abb october
-                    "Nov", // abb november
-                    "Dec", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "duminic\u0103", // Sunday
-                    "luni", // Monday
-                    "mar\u0163i", // Tuesday
-                    "miercuri", // Wednesday
-                    "joi", // Thursday
-                    "vineri", // Friday
-                    "s\u00e2mb\u0103t\u0103" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "D", // abb Sunday
-                    "L", // abb Monday
-                    "Ma", // abb Tuesday
-                    "Mi", // abb Wednesday
-                    "J", // abb Thursday
-                    "V", // abb Friday
-                    "S" // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "d.C.",
-                    "\u00ee.d.C."
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "dd MMMM yyyy", // full date pattern
-                    "dd MMMM yyyy", // long date pattern
-                    "dd.MM.yyyy", // medium date pattern
-                    "dd.MM.yyyy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ro_RO.java b/ojluni/src/main/java/sun/text/resources/FormatData_ro_RO.java
deleted file mode 100755
index 61e5b9b..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ro_RO.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ro_RO extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.00 \u00A4;-#,##0.00 \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ru.java b/ojluni/src/main/java/sun/text/resources/FormatData_ru.java
deleted file mode 100755
index 109a4d6..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ru.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ru extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u042f\u043d\u0432\u0430\u0440\u044c", // january
-                    "\u0424\u0435\u0432\u0440\u0430\u043b\u044c", // february
-                    "\u041c\u0430\u0440\u0442", // march
-                    "\u0410\u043f\u0440\u0435\u043b\u044c", // april
-                    "\u041c\u0430\u0439", // may
-                    "\u0418\u044e\u043d\u044c", // june
-                    "\u0418\u044e\u043b\u044c", // july
-                    "\u0410\u0432\u0433\u0443\u0441\u0442", // august
-                    "\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c", // september
-                    "\u041e\u043a\u0442\u044f\u0431\u0440\u044c", // october
-                    "\u041d\u043e\u044f\u0431\u0440\u044c", // november
-                    "\u0414\u0435\u043a\u0430\u0431\u0440\u044c", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "\u044f\u043d\u0432", // abb january
-                    "\u0444\u0435\u0432", // abb february
-                    "\u043c\u0430\u0440", // abb march
-                    "\u0430\u043f\u0440", // abb april
-                    "\u043c\u0430\u0439", // abb may
-                    "\u0438\u044e\u043d", // abb june
-                    "\u0438\u044e\u043b", // abb july
-                    "\u0430\u0432\u0433", // abb august
-                    "\u0441\u0435\u043d", // abb september
-                    "\u043e\u043a\u0442", // abb october
-                    "\u043d\u043e\u044f", // abb november
-                    "\u0434\u0435\u043a", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", // Sunday
-                    "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", // Monday
-                    "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", // Tuesday
-                    "\u0441\u0440\u0435\u0434\u0430", // Wednesday
-                    "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", // Thursday
-                    "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", // Friday
-                    "\u0441\u0443\u0431\u0431\u043e\u0442\u0430" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u0412\u0441", // abb Sunday
-                    "\u041f\u043d", // abb Monday
-                    "\u0412\u0442", // abb Tuesday
-                    "\u0421\u0440", // abb Wednesday
-                    "\u0427\u0442", // abb Thursday
-                    "\u041f\u0442", // abb Friday
-                    "\u0421\u0431" // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "\u0434\u043e \u043d.\u044d.",
-                    "\u043d.\u044d."
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    "\u00a0", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "H:mm:ss z", // full time pattern
-                    "H:mm:ss z", // long time pattern
-                    "H:mm:ss", // medium time pattern
-                    "H:mm", // short time pattern
-                    "d MMMM yyyy '\u0433.'", // full date pattern
-                    "d MMMM yyyy '\u0433.'", // long date pattern
-                    "dd.MM.yyyy", // medium date pattern
-                    "dd.MM.yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_ru_RU.java b/ojluni/src/main/java/sun/text/resources/FormatData_ru_RU.java
deleted file mode 100755
index 0fd6f43..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_ru_RU.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_ru_RU extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.## \u00A4;-#,##0.## \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sk.java b/ojluni/src/main/java/sun/text/resources/FormatData_sk.java
deleted file mode 100755
index 0edcba4..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sk.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_sk extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "janu\u00e1r", // january
-                    "febru\u00e1r", // february
-                    "marec", // march
-                    "apr\u00edl", // april
-                    "m\u00e1j", // may
-                    "j\u00fan", // june
-                    "j\u00fal", // july
-                    "august", // august
-                    "september", // september
-                    "okt\u00f3ber", // october
-                    "november", // november
-                    "december", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "jan", // abb january
-                    "feb", // abb february
-                    "mar", // abb march
-                    "apr", // abb april
-                    "m\u00e1j", // abb may
-                    "j\u00fan", // abb june
-                    "j\u00fal", // abb july
-                    "aug", // abb august
-                    "sep", // abb september
-                    "okt", // abb october
-                    "nov", // abb november
-                    "dec", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "Nede\u013ea", // Sunday
-                    "Pondelok", // Monday
-                    "Utorok", // Tuesday
-                    "Streda", // Wednesday
-                    "\u0160tvrtok", // Thursday
-                    "Piatok", // Friday
-                    "Sobota" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "Ne", // abb Sunday
-                    "Po", // abb Monday
-                    "Ut", // abb Tuesday
-                    "St", // abb Wednesday
-                    "\u0160t", // abb Thursday
-                    "Pi", // abb Friday
-                    "So" // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "pred n.l.",
-                    "n.l."
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    "\u00a0", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "H:mm:ss z", // full time pattern
-                    "H:mm:ss z", // long time pattern
-                    "H:mm:ss", // medium time pattern
-                    "H:mm", // short time pattern
-                    "EEEE, yyyy, MMMM d", // full date pattern
-                    "EEEE, yyyy, MMMM d", // long date pattern
-                    "d.M.yyyy", // medium date pattern
-                    "d.M.yyyy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sk_SK.java b/ojluni/src/main/java/sun/text/resources/FormatData_sk_SK.java
deleted file mode 100755
index ce87cb9..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sk_SK.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_sk_SK extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.00 \u00A4;-#,##0.00 \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sl.java b/ojluni/src/main/java/sun/text/resources/FormatData_sl.java
deleted file mode 100755
index 949d750..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sl.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_sl extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "januar", // january
-                    "februar", // february
-                    "marec", // march
-                    "april", // april
-                    "maj", // may
-                    "junij", // june
-                    "julij", // july
-                    "avgust", // august
-                    "september", // september
-                    "oktober", // october
-                    "november", // november
-                    "december", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "jan", // abb january
-                    "feb", // abb february
-                    "mar", // abb march
-                    "apr", // abb april
-                    "maj", // abb may
-                    "jun", // abb june
-                    "jul", // abb july
-                    "avg", // abb august
-                    "sep", // abb september
-                    "okt", // abb october
-                    "nov", // abb november
-                    "dec", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "Nedelja", // Sunday
-                    "Ponedeljek", // Monday
-                    "Torek", // Tuesday
-                    "Sreda", // Wednesday
-                    "\u010cetrtek", // Thursday
-                    "Petek", // Friday
-                    "Sobota" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "Ned", // abb Sunday
-                    "Pon", // abb Monday
-                    "Tor", // abb Tuesday
-                    "Sre", // abb Wednesday
-                    "\u010cet", // abb Thursday
-                    "Pet", // abb Friday
-                    "Sob" // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "pr.n.\u0161.",
-                    "po Kr."
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "H:mm:ss z", // full time pattern
-                    "H:mm:ss z", // long time pattern
-                    "H:mm:ss", // medium time pattern
-                    "H:mm", // short time pattern
-                    "EEEE, dd. MMMM y", // full date pattern
-                    "dd. MMMM y", // long date pattern
-                    "d.M.yyyy", // medium date pattern
-                    "d.M.y", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sl_SI.java b/ojluni/src/main/java/sun/text/resources/FormatData_sl_SI.java
deleted file mode 100755
index 59572b2..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sl_SI.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_sl_SI extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4 #,##0.##;-\u00A4 #,##0.##", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sq.java b/ojluni/src/main/java/sun/text/resources/FormatData_sq.java
deleted file mode 100755
index 337813a..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sq.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_sq extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "janar", // january
-                    "shkurt", // february
-                    "mars", // march
-                    "prill", // april
-                    "maj", // may
-                    "qershor", // june
-                    "korrik", // july
-                    "gusht", // august
-                    "shtator", // september
-                    "tetor", // october
-                    "n\u00ebntor", // november
-                    "dhjetor", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "Jan", // abb january
-                    "Shk", // abb february
-                    "Mar", // abb march
-                    "Pri", // abb april
-                    "Maj", // abb may
-                    "Qer", // abb june
-                    "Kor", // abb july
-                    "Gsh", // abb august
-                    "Sht", // abb september
-                    "Tet", // abb october
-                    "N\u00ebn", // abb november
-                    "Dhj", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "e diel", // Sunday
-                    "e h\u00ebn\u00eb", // Monday
-                    "e mart\u00eb", // Tuesday
-                    "e m\u00ebrkur\u00eb", // Wednesday
-                    "e enjte", // Thursday
-                    "e premte", // Friday
-                    "e shtun\u00eb" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "Die", // abb Sunday
-                    "H\u00ebn", // abb Monday
-                    "Mar", // abb Tuesday
-                    "M\u00ebr", // abb Wednesday
-                    "Enj", // abb Thursday
-                    "Pre", // abb Friday
-                    "Sht" // abb Saturday
-                }
-            },
-            { "AmPmMarkers",
-                new String[] {
-                    "PD", // am marker
-                    "MD" // pm marker
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "p.e.r.",
-                    "n.e.r."
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "h.mm.ss.a z", // full time pattern
-                    "h.mm.ss.a z", // long time pattern
-                    "h:mm:ss.a", // medium time pattern
-                    "h.mm.a", // short time pattern
-                    "yyyy-MM-dd", // full date pattern
-                    "yyyy-MM-dd", // long date pattern
-                    "yyyy-MM-dd", // medium date pattern
-                    "yy-MM-dd", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sq_AL.java b/ojluni/src/main/java/sun/text/resources/FormatData_sq_AL.java
deleted file mode 100755
index 17a4e46..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sq_AL.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_sq_AL extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4#,##0.###;-\u00A4#,##0.###", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sr.java b/ojluni/src/main/java/sun/text/resources/FormatData_sr.java
deleted file mode 100755
index 9e3ea5c..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sr.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_sr extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u0458\u0430\u043d\u0443\u0430\u0440",
-                    "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
-                    "\u043c\u0430\u0440\u0442",
-                    "\u0430\u043f\u0440\u0438\u043b",
-                    "\u043c\u0430\u0458",
-                    "\u0458\u0443\u043d",
-                    "\u0458\u0443\u043b",
-                    "\u0430\u0432\u0433\u0443\u0441\u0442",
-                    "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
-                    "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
-                    "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
-                    "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440",
-                    "",
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "\u0458\u0430\u043d",
-                    "\u0444\u0435\u0431",
-                    "\u043c\u0430\u0440",
-                    "\u0430\u043f\u0440",
-                    "\u043c\u0430\u0458",
-                    "\u0458\u0443\u043d",
-                    "\u0458\u0443\u043b",
-                    "\u0430\u0432\u0433",
-                    "\u0441\u0435\u043f",
-                    "\u043e\u043a\u0442",
-                    "\u043d\u043e\u0432",
-                    "\u0434\u0435\u0446",
-                    "",
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "\u043d\u0435\u0434\u0435\u0459\u0430",
-                    "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a",
-                    "\u0443\u0442\u043e\u0440\u0430\u043a",
-                    "\u0441\u0440\u0435\u0434\u0430",
-                    "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a",
-                    "\u043f\u0435\u0442\u0430\u043a",
-                    "\u0441\u0443\u0431\u043e\u0442\u0430",
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u043d\u0435\u0434",
-                    "\u043f\u043e\u043d",
-                    "\u0443\u0442\u043e",
-                    "\u0441\u0440\u0435",
-                    "\u0447\u0435\u0442",
-                    "\u043f\u0435\u0442",
-                    "\u0441\u0443\u0431",
-                }
-            },
-            { "Eras",
-                new String[] {
-                    "\u043f. \u043d. \u0435.",
-                    "\u043d. \u0435",
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###",
-                    "\u00a4 #,##0.00",
-                    "#,##0%",
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",",
-                    ".",
-                    ";",
-                    "%",
-                    "0",
-                    "#",
-                    "-",
-                    "E",
-                    "\u2030",
-                    "\u221e",
-                    "NaN",
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH.mm.ss z",
-                    "HH.mm.ss z",
-                    "HH.mm.ss",
-                    "HH.mm",
-                    "EEEE, dd.MMMM.yyyy.",
-                    "dd.MM.yyyy.",
-                    "dd.MM.yyyy.",
-                    "d.M.yy.",
-                    "{1} {0}",
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sr_BA.java b/ojluni/src/main/java/sun/text/resources/FormatData_sr_BA.java
deleted file mode 100755
index 34f1230..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sr_BA.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_sr_BA extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u0458\u0430\u043d\u0443\u0430\u0440",
-                    "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
-                    "\u043c\u0430\u0440\u0442",
-                    "\u0430\u043f\u0440\u0438\u043b",
-                    "\u043c\u0430\u0458",
-                    "\u0458\u0443\u043d\u0438",
-                    "\u0458\u0443\u043b\u0438",
-                    "\u0430\u0432\u0433\u0443\u0441\u0442",
-                    "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440",
-                    "\u043e\u043a\u0442\u043e\u0431\u0430\u0440",
-                    "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440",
-                    "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440",
-                    "",
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "\u043d\u0435\u0434\u0435\u0459\u0430",
-                    "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a",
-                    "\u0443\u0442\u043e\u0440\u0430\u043a",
-                    "\u0441\u0440\u0438\u0458\u0435\u0434\u0430",
-                    "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a",
-                    "\u043f\u0435\u0442\u0430\u043a",
-                    "\u0441\u0443\u0431\u043e\u0442\u0430",
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u043d\u0435\u0434",
-                    "\u043f\u043e\u043d",
-                    "\u0443\u0442\u043e",
-                    "\u0441\u0440\u0438",
-                    "\u0447\u0435\u0442",
-                    "\u043f\u0435\u0442",
-                    "\u0441\u0443\u0431",
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH '\u0447\u0430\u0441\u043e\u0432\u0430', mm '\u043c\u0438\u043d\u0443\u0442\u0430', ss' \u0441\u0435\u043a\u0443\u043d\u0434\u0438'",
-                    "HH.mm.ss z",
-                    "HH:mm:ss",
-                    "HH:mm",
-                    "EEEE, dd. MMMM yyyy.",
-                    "dd. MMMM yyyy.",
-                    "yyyy-MM-dd",
-                    "yy-MM-dd",
-                    "{1} {0}",
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sr_CS.java b/ojluni/src/main/java/sun/text/resources/FormatData_sr_CS.java
deleted file mode 100755
index 03cf7ee..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sr_CS.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_sr_CS extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sr_Latn.java b/ojluni/src/main/java/sun/text/resources/FormatData_sr_Latn.java
deleted file mode 100755
index aa9bca8..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sr_Latn.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (c) 1997, 2011, 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.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2011 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_sr_Latn extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "januar",
-                    "februar",
-                    "mart",
-                    "april",
-                    "maj",
-                    "jun",
-                    "jul",
-                    "avgust",
-                    "septembar",
-                    "oktobar",
-                    "novembar",
-                    "decembar",
-                    "",
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "jan",
-                    "feb",
-                    "mar",
-                    "apr",
-                    "maj",
-                    "jun",
-                    "jul",
-                    "avg",
-                    "sep",
-                    "okt",
-                    "nov",
-                    "dec",
-                    "",
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "nedelja",
-                    "ponedeljak",
-                    "utorak",
-                    "sreda",
-                    "\u010detvrtak",
-                    "petak",
-                    "subota",
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "ned",
-                    "pon",
-                    "uto",
-                    "sre",
-                    "\u010det",
-                    "pet",
-                    "sub",
-                }
-            },
-            { "Eras",
-                new String[] {
-                    "p. n. e.",
-                    "n. e",
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###",
-                    "\u00a4\u00a0#,##0.00",
-                    "#,##0%",
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ".",
-                    ",",
-                    ";",
-                    "%",
-                    "0",
-                    "#",
-                    "-",
-                    "E",
-                    "\u2030",
-                    "\u221e",
-                    "NaN",
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH.mm.ss zzzz",
-                    "HH.mm.ss z",
-                    "HH.mm.ss",
-                    "HH.mm",
-                    "EEEE, dd. MMMM y.",
-                    "dd. MMMM y.",
-                    "dd.MM.y.",
-                    "d.M.yy.",
-                    "{1} {0}",
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sr_Latn_BA.java b/ojluni/src/main/java/sun/text/resources/FormatData_sr_Latn_BA.java
deleted file mode 100755
index 0bdc006..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sr_Latn_BA.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 1997, 2011, 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.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2011 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_sr_Latn_BA extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sr_Latn_ME.java b/ojluni/src/main/java/sun/text/resources/FormatData_sr_Latn_ME.java
deleted file mode 100755
index dcd5058..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sr_Latn_ME.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 1997, 2011, 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.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2011 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_sr_Latn_ME extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "DateTimePatterns",
-                new String[] {
-                    "HH.mm.ss zzzz",
-                    "HH.mm.ss z",
-                    "HH.mm.ss",
-                    "HH.mm",
-                    "EEEE, dd. MMMM y.",
-                    "d.MM.yyyy.",
-                    "dd.MM.y.",
-                    "d.M.yy.",
-                    "{1} {0}",
-                }
-            }
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sr_Latn_RS.java b/ojluni/src/main/java/sun/text/resources/FormatData_sr_Latn_RS.java
deleted file mode 100755
index 80fba9f..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sr_Latn_RS.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 1997, 2011, 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.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2011 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-package sun.text.resources;
-
-import sun.util.EmptyListResourceBundle;
-
-public class FormatData_sr_Latn_RS extends EmptyListResourceBundle {
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sr_ME.java b/ojluni/src/main/java/sun/text/resources/FormatData_sr_ME.java
deleted file mode 100755
index ca92348..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sr_ME.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_sr_ME extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sr_RS.java b/ojluni/src/main/java/sun/text/resources/FormatData_sr_RS.java
deleted file mode 100755
index 70266bc..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sr_RS.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_sr_RS extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sv.java b/ojluni/src/main/java/sun/text/resources/FormatData_sv.java
deleted file mode 100755
index ab99094..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sv.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 1997, 2008, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_sv extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "januari", // january
-                    "februari", // february
-                    "mars", // march
-                    "april", // april
-                    "maj", // may
-                    "juni", // june
-                    "juli", // july
-                    "augusti", // august
-                    "september", // september
-                    "oktober", // october
-                    "november", // november
-                    "december", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "jan", // abb january
-                    "feb", // abb february
-                    "mar", // abb march
-                    "apr", // abb april
-                    "maj", // abb may
-                    "jun", // abb june
-                    "jul", // abb july
-                    "aug", // abb august
-                    "sep", // abb september
-                    "okt", // abb october
-                    "nov", // abb november
-                    "dec", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "s\u00f6ndag", // Sunday
-                    "m\u00e5ndag", // Monday
-                    "tisdag", // Tuesday
-                    "onsdag", // Wednesday
-                    "torsdag", // Thursday
-                    "fredag", // Friday
-                    "l\u00f6rdag" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "s\u00f6", // abb Sunday
-                    "m\u00e5", // abb Monday
-                    "ti", // abb Tuesday
-                    "on", // abb Wednesday
-                    "to", // abb Thursday
-                    "fr", // abb Friday
-                    "l\u00f6" // abb Saturday
-                }
-            },
-            { "AmPmMarkers",
-                new String[] {
-                    "fm", // am marker
-                    "em" // pm marker
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    "\u00a0", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "'kl 'H:mm z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "'den 'd MMMM yyyy", // full date pattern
-                    "'den 'd MMMM yyyy", // long date pattern
-                    "yyyy-MMM-dd", // medium date pattern
-                    "yyyy-MM-dd", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_sv_SE.java b/ojluni/src/main/java/sun/text/resources/FormatData_sv_SE.java
deleted file mode 100755
index fdc6a07..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_sv_SE.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_sv_SE extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.00 \u00A4;-#,##0.00 \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_th.java b/ojluni/src/main/java/sun/text/resources/FormatData_th.java
deleted file mode 100755
index 362278d..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_th.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_th extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        String[] dateTimePatterns = new String[] {
-            "H' \u0e19\u0e32\u0e2c\u0e34\u0e01\u0e32 'm' \u0e19\u0e32\u0e17\u0e35 'ss' \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35'", // full time pattern
-            "H' \u0e19\u0e32\u0e2c\u0e34\u0e01\u0e32 'm' \u0e19\u0e32\u0e17\u0e35'", // long time pattern
-            "H:mm:ss", // medium time pattern
-            "H:mm' \u0e19.'",  // short time pattern (modified)  -- add ' \u0e19.'
-                               // (it means something like "o'clock" in english)
-            "EEEE'\u0e17\u0e35\u0e48 'd MMMM G yyyy", // full date pattern
-            "d MMMM yyyy", // long date pattern
-            "d MMM yyyy", // medium date pattern
-            "d/M/yyyy", // short date pattern
-            "{1}, {0}" // date-time pattern
-        };
-
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21", // january
-                    "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c", // february
-                    "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21", // march
-                    "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19", // april
-                    "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21", // may
-                    "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19", // june
-                    "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21", // july
-                    "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21", // august
-                    "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19", // september
-                    "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21", // october
-                    "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19", // november
-                    "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "\u0e21.\u0e04.", // abb january
-                    "\u0e01.\u0e1e.", // abb february
-                    "\u0e21\u0e35.\u0e04.", // abb march
-                    "\u0e40\u0e21.\u0e22.", // abb april
-                    "\u0e1e.\u0e04.", // abb may
-                    "\u0e21\u0e34.\u0e22.", // abb june
-                    "\u0e01.\u0e04.", // abb july
-                    "\u0e2a.\u0e04.", // abb august
-                    "\u0e01.\u0e22.", // abb september
-                    "\u0e15.\u0e04.", // abb october
-                    "\u0e1e.\u0e22.", // abb november
-                    "\u0e18.\u0e04.", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c", // Sunday
-                    "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c", // Monday
-                    "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23", // Tuesday
-                    "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18", // Wednesday
-                    "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35", // Thursday
-                    "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c", // Friday
-                    "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u0e2d\u0e32.", // abb Sunday
-                    "\u0e08.", // abb Monday
-                    "\u0e2d.", // abb Tuesday
-                    "\u0e1e.", // abb Wednesday
-                    "\u0e1e\u0e24.", // abb Thursday
-                    "\u0e28.", // abb Friday
-                    "\u0e2a." // abb Saturday
-                }
-            },
-            { "AmPmMarkers",
-                new String[] {
-                    "\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", // am marker
-                    "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07" // pm marker
-                }
-            },
-            { "sun.util.BuddhistCalendar.Eras",
-                new String[] { // era strings
-                    "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e04\u0e23\u0e34\u0e2a\u0e15\u0e4c\u0e01\u0e32\u0e25\u0e17\u0e35\u0e48",
-                    "\u0E1E.\u0E28." // Thai calendar requires equivalent of B.E., Buddhist Era
-                }
-            },
-            { "sun.util.BuddhistCalendar.short.Eras",
-                new String[] { // era strings
-                    "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e04\u0e23\u0e34\u0e2a\u0e15\u0e4c\u0e01\u0e32\u0e25\u0e17\u0e35\u0e48",
-                    "\u0E1E.\u0E28." // Thai calendar requires equivalent of B.E., Buddhist Era
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e04\u0e23\u0e34\u0e2a\u0e15\u0e4c\u0e01\u0e32\u0e25\u0e17\u0e35\u0e48",
-                    "\u0e04.\u0e28."
-                }
-            },
-            { "sun.util.BuddhistCalendar.DateTimePatterns",
-                dateTimePatterns
-            },
-            { "DateTimePatterns",
-                dateTimePatterns
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_th_TH.java b/ojluni/src/main/java/sun/text/resources/FormatData_th_TH.java
deleted file mode 100755
index c9b3041..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_th_TH.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_th_TH extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00a4#,##0.00;\u00a4-#,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_th_TH_TH.java b/ojluni/src/main/java/sun/text/resources/FormatData_th_TH_TH.java
deleted file mode 100755
index cdf5ff0..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_th_TH_TH.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, 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.
- */
-
-/*
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-/*
- * This class implements the th_TH_TH requirement that native Thai
- * digits be used in the corresponding locale.
- *
- * @author John O'Conner
- * @since 1.4.1
- *
- */
-
-public class FormatData_th_TH_TH extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-
-            { "NumberElements",
-                new String[] {
-                    ".", // decimal separator
-                    ",", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "\u0E50", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_tr.java b/ojluni/src/main/java/sun/text/resources/FormatData_tr.java
deleted file mode 100755
index e8fae86..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_tr.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_tr extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "Ocak", // january
-                    "\u015eubat", // february
-                    "Mart", // march
-                    "Nisan", // april
-                    "May\u0131s", // may
-                    "Haziran", // june
-                    "Temmuz", // july
-                    "A\u011fustos", // august
-                    "Eyl\u00fcl", // september
-                    "Ekim", // october
-                    "Kas\u0131m", // november
-                    "Aral\u0131k", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "Oca", // abb january
-                    "\u015eub", // abb february
-                    "Mar", // abb march
-                    "Nis", // abb april
-                    "May", // abb may
-                    "Haz", // abb june
-                    "Tem", // abb july
-                    "A\u011fu", // abb august
-                    "Eyl", // abb september
-                    "Eki", // abb october
-                    "Kas", // abb november
-                    "Ara", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "Pazar", // Sunday
-                    "Pazartesi", // Monday
-                    "Sal\u0131", // Tuesday
-                    "\u00c7ar\u015famba", // Wednesday
-                    "Per\u015fembe", // Thursday
-                    "Cuma", // Friday
-                    "Cumartesi" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "Paz", // abb Sunday
-                    "Pzt", // abb Monday
-                    "Sal", // abb Tuesday
-                    "\u00c7ar", // abb Wednesday
-                    "Per", // abb Thursday
-                    "Cum", // abb Friday
-                    "Cmt" // abb Saturday
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.00 \u00a4;-#,##0.00 \u00a4", // currency pattern
-                    "% #,##0" // percent pattern
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "dd MMMM yyyy EEEE", // full date pattern
-                    "dd MMMM yyyy EEEE", // long date pattern
-                    "dd.MMM.yyyy", // medium date pattern
-                    "dd.MM.yyyy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_tr_TR.java b/ojluni/src/main/java/sun/text/resources/FormatData_tr_TR.java
deleted file mode 100755
index d088935..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_tr_TR.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_tr_TR extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_uk.java b/ojluni/src/main/java/sun/text/resources/FormatData_uk.java
deleted file mode 100755
index 62952d5..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_uk.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 1997, 2006, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_uk extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u0441\u0456\u0447\u043d\u044f", // january
-                    "\u043b\u044e\u0442\u043e\u0433\u043e", // february
-                    "\u0431\u0435\u0440\u0435\u0437\u043d\u044f", // march
-                    "\u043a\u0432\u0456\u0442\u043d\u044f", // april
-                    "\u0442\u0440\u0430\u0432\u043d\u044f", // may
-                    "\u0447\u0435\u0440\u0432\u043d\u044f", // june
-                    "\u043b\u0438\u043f\u043d\u044f", // july
-                    "\u0441\u0435\u0440\u043f\u043d\u044f", // august
-                    "\u0432\u0435\u0440\u0435\u0441\u043d\u044f", // september
-                    "\u0436\u043e\u0432\u0442\u043d\u044f", // october
-                    "\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430", // november
-                    "\u0433\u0440\u0443\u0434\u043d\u044f", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "\u0441\u0456\u0447", // abb january
-                    "\u043b\u044e\u0442", // abb february
-                    "\u0431\u0435\u0440", // abb march
-                    "\u043a\u0432\u0456\u0442", // abb april
-                    "\u0442\u0440\u0430\u0432", // abb may
-                    "\u0447\u0435\u0440\u0432", // abb june
-                    "\u043b\u0438\u043f", // abb july
-                    "\u0441\u0435\u0440\u043f", // abb august
-                    "\u0432\u0435\u0440", // abb september
-                    "\u0436\u043e\u0432\u0442", // abb october
-                    "\u043b\u0438\u0441\u0442", // abb november
-                    "\u0433\u0440\u0443\u0434", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "\u043d\u0435\u0434\u0456\u043b\u044f", // Sunday
-                    "\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a", // Monday
-                    "\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a", // Tuesday
-                    "\u0441\u0435\u0440\u0435\u0434\u0430", // Wednesday
-                    "\u0447\u0435\u0442\u0432\u0435\u0440", // Thursday
-                    "\u043f'\u044f\u0442\u043d\u0438\u0446\u044f", // Friday
-                    "\u0441\u0443\u0431\u043e\u0442\u0430" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u043d\u0434", // abb Sunday
-                    "\u043f\u043d", // abb Monday
-                    "\u0432\u0442", // abb Tuesday
-                    "\u0441\u0440", // abb Wednesday
-                    "\u0447\u0442", // abb Thursday
-                    "\u043f\u0442", // abb Friday
-                    "\u0441\u0431" // abb Saturday
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "\u0434\u043e \u043d.\u0435.",
-                    "\u043f\u0456\u0441\u043b\u044f \u043d.\u0435."
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    "\u00a0", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "H:mm:ss z", // full time pattern
-                    "H:mm:ss z", // long time pattern
-                    "H:mm:ss", // medium time pattern
-                    "H:mm", // short time pattern
-                    "EEEE, d MMMM yyyy \u0440.", // full date pattern
-                    "d MMMM yyyy", // long date pattern
-                    "d MMM yyyy", // medium date pattern
-                    "dd.MM.yy", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_uk_UA.java b/ojluni/src/main/java/sun/text/resources/FormatData_uk_UA.java
deleted file mode 100755
index a5278ab..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_uk_UA.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_uk_UA extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.## \u00A4;-#,##0.## \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_vi.java b/ojluni/src/main/java/sun/text/resources/FormatData_vi.java
deleted file mode 100755
index 1be3779..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_vi.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 2003, 2005, 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.
- */
-
-/*
- *******************************************************************************
- * (C) Copyright IBM Corp. 1996-2003 - All Rights Reserved                     *
- *                                                                             *
- * The original version of this source code and documentation is copyrighted   *
- * and owned by IBM, These materials are provided under terms of a License     *
- * Agreement between IBM and Sun. This technology is protected by multiple     *
- * US and International patents. This notice and attribution to IBM may not    *
- * to removed.                                                                 *
- *******************************************************************************
- *
- * This locale data is based on the ICU's Vietnamese locale data (rev. 1.38)
- * found at:
- *
- * http://oss.software.ibm.com/cvs/icu/icu/source/data/locales/vi.txt?rev=1.38
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_vi extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "th\u00e1ng m\u1ed9t", // january
-                    "th\u00e1ng hai", // february
-                    "th\u00e1ng ba", // march
-                    "th\u00e1ng t\u01b0", // april
-                    "th\u00e1ng n\u0103m", // may
-                    "th\u00e1ng s\u00e1u", // june
-                    "th\u00e1ng b\u1ea3y", // july
-                    "th\u00e1ng t\u00e1m", // august
-                    "th\u00e1ng ch\u00edn", // september
-                    "th\u00e1ng m\u01b0\u1eddi", // october
-                    "th\u00e1ng m\u01b0\u1eddi m\u1ed9t", // november
-                    "th\u00e1ng m\u01b0\u1eddi hai", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "thg 1", // abb january
-                    "thg 2", // abb february
-                    "thg 3", // abb march
-                    "thg 4", // abb april
-                    "thg 5", // abb may
-                    "thg 6", // abb june
-                    "thg 7", // abb july
-                    "thg 8", // abb august
-                    "thg 9", // abb september
-                    "thg 10", // abb october
-                    "thg 11", // abb november
-                    "thg 12", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "Ch\u1ee7 nh\u1eadt", // Sunday
-                    "Th\u1ee9 hai", // Monday
-                    "Th\u1ee9 ba",  // Tuesday
-                    "Th\u1ee9 t\u01b0", // Wednesday
-                    "Th\u1ee9 n\u0103m", // Thursday
-                    "Th\u1ee9 s\u00e1u", // Friday
-                    "Th\u1ee9 b\u1ea3y" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "CN", // abb Sunday
-                    "Th 2", // abb Monday
-                    "Th 3", // abb Tuesday
-                    "Th 4", // abb Wednesday
-                    "Th 5", // abb Thursday
-                    "Th 6", // abb Friday
-                    "Th 7" // abb Saturday
-                }
-            },
-            { "AmPmMarkers",
-                new String[] {
-                    "SA", // am marker
-                    "CH" // pm marker
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "tr. CN",
-                    "sau CN"
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ",", // decimal separator
-                    ".", // group (thousands) separator
-                    ";", // list separator
-                    "%", // percent sign
-                    "0", // native 0 digit
-                    "#", // pattern digit
-                    "-", // minus sign
-                    "E", // exponential
-                    "\u2030", // per mille
-                    "\u221e", // infinity
-                    "\ufffd" // NaN
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "HH:mm:ss z", // full time pattern
-                    "HH:mm:ss z", // long time pattern
-                    "HH:mm:ss", // medium time pattern
-                    "HH:mm", // short time pattern
-                    "EEEE, 'ng\u00E0y' dd MMMM 'n\u0103m' yyyy", // full date pattern
-                    "'Ng\u00E0y' dd 'th\u00E1ng' M 'n\u0103m' yyyy", // long date pattern
-                    "dd-MM-yyyy", // medium date pattern
-                    "dd/MM/yyyy", // short date pattern
-                    "{0} {1}" // date-time pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_vi_VN.java b/ojluni/src/main/java/sun/text/resources/FormatData_vi_VN.java
deleted file mode 100755
index 412a6fe..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_vi_VN.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2003, 2005, 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.
- */
-
-/*
- *******************************************************************************
- * (C) Copyright IBM Corp. 1996-2003 - All Rights Reserved                     *
- *                                                                             *
- * The original version of this source code and documentation is copyrighted   *
- * and owned by IBM, These materials are provided under terms of a License     *
- * Agreement between IBM and Sun. This technology is protected by multiple     *
- * US and International patents. This notice and attribution to IBM may not    *
- * to removed.                                                                 *
- *******************************************************************************
- *
- * This locale data is based on the ICU's Vietnamese locale data (rev. 1.38)
- * found at:
- *
- * http://oss.software.ibm.com/cvs/icu/icu/source/data/locales/vi.txt?rev=1.38
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_vi_VN extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "#,##0.00 \u00A4;-#,##0.00 \u00A4", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_zh.java b/ojluni/src/main/java/sun/text/resources/FormatData_zh.java
deleted file mode 100755
index 299ed0f..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_zh.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_zh extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthNames",
-                new String[] {
-                    "\u4e00\u6708", // january
-                    "\u4e8c\u6708", // february
-                    "\u4e09\u6708", // march
-                    "\u56db\u6708", // april
-                    "\u4e94\u6708", // may
-                    "\u516d\u6708", // june
-                    "\u4e03\u6708", // july
-                    "\u516b\u6708", // august
-                    "\u4e5d\u6708", // september
-                    "\u5341\u6708", // october
-                    "\u5341\u4e00\u6708", // november
-                    "\u5341\u4e8c\u6708", // december
-                    "" // month 13 if applicable
-                }
-            },
-            { "MonthAbbreviations",
-                new String[] {
-                    "\u4e00\u6708", // abb january
-                    "\u4e8c\u6708", // abb february
-                    "\u4e09\u6708", // abb march
-                    "\u56db\u6708", // abb april
-                    "\u4e94\u6708", // abb may
-                    "\u516d\u6708", // abb june
-                    "\u4e03\u6708", // abb july
-                    "\u516b\u6708", // abb august
-                    "\u4e5d\u6708", // abb september
-                    "\u5341\u6708", // abb october
-                    "\u5341\u4e00\u6708", // abb november
-                    "\u5341\u4e8c\u6708", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayNames",
-                new String[] {
-                    "\u661f\u671f\u65e5", // Sunday
-                    "\u661f\u671f\u4e00", // Monday
-                    "\u661f\u671f\u4e8c", // Tuesday
-                    "\u661f\u671f\u4e09", // Wednesday
-                    "\u661f\u671f\u56db", // Thursday
-                    "\u661f\u671f\u4e94", // Friday
-                    "\u661f\u671f\u516d" // Saturday
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u661f\u671f\u65e5", // abb Sunday
-                    "\u661f\u671f\u4e00", // abb Monday
-                    "\u661f\u671f\u4e8c", // abb Tuesday
-                    "\u661f\u671f\u4e09", // abb Wednesday
-                    "\u661f\u671f\u56db", // abb Thursday
-                    "\u661f\u671f\u4e94", // abb Friday
-                    "\u661f\u671f\u516d" // abb Saturday
-                }
-            },
-            { "AmPmMarkers",
-                new String[] {
-                    "\u4e0a\u5348", // am marker
-                    "\u4e0b\u5348" // pm marker
-                }
-            },
-            { "Eras",
-                new String[] { // era strings
-                    "\u516c\u5143\u524d",
-                    "\u516c\u5143"
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "ahh'\u65f6'mm'\u5206'ss'\u79d2' z", // full time pattern
-                    "ahh'\u65f6'mm'\u5206'ss'\u79d2'", // long time pattern
-                    "H:mm:ss", // medium time pattern
-                    "ah:mm", // short time pattern
-                    "yyyy'\u5e74'M'\u6708'd'\u65e5' EEEE", // full date pattern
-                    "yyyy'\u5e74'M'\u6708'd'\u65e5'", // long date pattern
-                    "yyyy-M-d", // medium date pattern
-                    "yy-M-d", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_zh_CN.java b/ojluni/src/main/java/sun/text/resources/FormatData_zh_CN.java
deleted file mode 100755
index 7a7a9e4..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_zh_CN.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_zh_CN extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4#,##0.00;-\u00A4#,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_zh_HK.java b/ojluni/src/main/java/sun/text/resources/FormatData_zh_HK.java
deleted file mode 100755
index 47e9682..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_zh_HK.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 1998, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-import java.util.Locale;
-import java.util.ResourceBundle;
-import sun.util.resources.LocaleData;
-
-public class FormatData_zh_HK extends ListResourceBundle {
-
-    // reparent to zh_TW for traditional Chinese names
-    public FormatData_zh_HK() {
-        ResourceBundle bundle = LocaleData.getDateFormatData(Locale.TAIWAN);
-        setParent(bundle);
-    }
-
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "MonthAbbreviations",
-                new String[] {
-                    "1\u6708", // abb january
-                    "2\u6708", // abb february
-                    "3\u6708", // abb march
-                    "4\u6708", // abb april
-                    "5\u6708", // abb may
-                    "6\u6708", // abb june
-                    "7\u6708", // abb july
-                    "8\u6708", // abb august
-                    "9\u6708", // abb september
-                    "10\u6708", // abb october
-                    "11\u6708", // abb november
-                    "12\u6708", // abb december
-                    "" // abb month 13 if applicable
-                }
-            },
-            { "DayAbbreviations",
-                new String[] {
-                    "\u65e5", // abb Sunday
-                    "\u4e00", // abb Monday
-                    "\u4e8c", // abb Tuesday
-                    "\u4e09", // abb Wednesday
-                    "\u56db", // abb Thursday
-                    "\u4e94", // abb Friday
-                    "\u516d" // abb Saturday
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4#,##0.00;(\u00A4#,##0.00)", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "ahh'\u6642'mm'\u5206'ss'\u79d2' z", // full time pattern
-                    "ahh'\u6642'mm'\u5206'ss'\u79d2'", // long time pattern
-                    "ahh:mm:ss", // medium time pattern
-                    "ah:mm", // short time pattern
-                    "yyyy'\u5e74'MM'\u6708'dd'\u65e5' EEEE", // full date pattern
-                    "yyyy'\u5e74'MM'\u6708'dd'\u65e5' EEEE", // long date pattern
-                    "yyyy'\u5e74'M'\u6708'd'\u65e5'", // medium date pattern
-                    "yy'\u5e74'M'\u6708'd'\u65e5'", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_zh_SG.java b/ojluni/src/main/java/sun/text/resources/FormatData_zh_SG.java
deleted file mode 100755
index fc6ccf3..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_zh_SG.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2007 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.
- */
-
-// Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_zh_SG extends ListResourceBundle {
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "DayAbbreviations",
-                new String[] {
-                    "\u5468\u65e5",
-                    "\u5468\u4e00",
-                    "\u5468\u4e8c",
-                    "\u5468\u4e09",
-                    "\u5468\u56db",
-                    "\u5468\u4e94",
-                    "\u5468\u516d",
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###",
-                    "\u00a4#,##0.00",
-                    "#,##0%",
-                }
-            },
-            { "NumberElements",
-                new String[] {
-                    ".",
-                    ",",
-                    ";",
-                    "%",
-                    "0",
-                    "#",
-                    "-",
-                    "E",
-                    "\u2030",
-                    "\u221e",
-                    "NaN",
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "a hh:mm:ss",
-                    "a hh:mm:ss",
-                    "a hh:mm",
-                    "a hh:mm",
-                    "dd MMMM yyyy",
-                    "dd MMM yyyy",
-                    "dd-MMM-yy",
-                    "dd/MM/yy",
-                    "{1} {0}",
-                }
-            },
-            { "DateTimePatternChars", "GanjkHmsSEDFwWxhKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/text/resources/FormatData_zh_TW.java b/ojluni/src/main/java/sun/text/resources/FormatData_zh_TW.java
deleted file mode 100755
index a39efa0..0000000
--- a/ojluni/src/main/java/sun/text/resources/FormatData_zh_TW.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.text.resources;
-
-import java.util.ListResourceBundle;
-
-public class FormatData_zh_TW extends ListResourceBundle {
-    /**
-     * Overrides ListResourceBundle
-     */
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            { "Eras",
-                new String[] { // era strings
-                    "\u897f\u5143\u524d",
-                    "\u897f\u5143"
-                }
-            },
-            { "NumberPatterns",
-                new String[] {
-                    "#,##0.###;-#,##0.###", // decimal pattern
-                    "\u00A4#,##0.00;-\u00A4#,##0.00", // currency pattern
-                    "#,##0%" // percent pattern
-                }
-            },
-            { "DateTimePatterns",
-                new String[] {
-                    "ahh'\u6642'mm'\u5206'ss'\u79d2' z", // full time pattern
-                    "ahh'\u6642'mm'\u5206'ss'\u79d2'", // long time pattern
-                    "a hh:mm:ss", // medium time pattern
-                    "a h:mm", // short time pattern
-                    "yyyy'\u5e74'M'\u6708'd'\u65e5' EEEE", // full date pattern
-                    "yyyy'\u5e74'M'\u6708'd'\u65e5'", // long date pattern
-                    "yyyy/M/d", // medium date pattern
-                    "yyyy/M/d", // short date pattern
-                    "{1} {0}" // date-time pattern
-                }
-            },
-            { "DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ" },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/BuddhistCalendar.java b/ojluni/src/main/java/sun/util/BuddhistCalendar.java
deleted file mode 100755
index e6a1b77..0000000
--- a/ojluni/src/main/java/sun/util/BuddhistCalendar.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * Copyright (c) 2000, 2010, 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.
- */
-
-package sun.util;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-import java.util.TimeZone;
-import sun.util.resources.LocaleData;
-
-public class BuddhistCalendar extends GregorianCalendar {
-
-//////////////////
-// Class Variables
-//////////////////
-
-    private static final long serialVersionUID = -8527488697350388578L;
-
-    private static final int BUDDHIST_YEAR_OFFSET = 543;
-
-///////////////
-// Constructors
-///////////////
-
-    /**
-     * Constructs a default BuddhistCalendar using the current time
-     * in the default time zone with the default locale.
-     */
-    public BuddhistCalendar() {
-        super();
-    }
-
-    /**
-     * Constructs a BuddhistCalendar based on the current time
-     * in the given time zone with the default locale.
-     * @param zone the given time zone.
-     */
-    public BuddhistCalendar(TimeZone zone) {
-        super(zone);
-    }
-
-    /**
-     * Constructs a BuddhistCalendar based on the current time
-     * in the default time zone with the given locale.
-     * @param aLocale the given locale.
-     */
-    public BuddhistCalendar(Locale aLocale) {
-        super(aLocale);
-    }
-
-    /**
-     * Constructs a BuddhistCalendar based on the current time
-     * in the given time zone with the given locale.
-     * @param zone the given time zone.
-     * @param aLocale the given locale.
-     */
-    public BuddhistCalendar(TimeZone zone, Locale aLocale) {
-        super(zone, aLocale);
-    }
-
-/////////////////
-// Public methods
-/////////////////
-
-    /**
-     * Compares this BuddhistCalendar to an object reference.
-     * @param obj the object reference with which to compare
-     * @return true if this object is equal to <code>obj</code>; false otherwise
-     */
-    public boolean equals(Object obj) {
-        return obj instanceof BuddhistCalendar
-            && super.equals(obj);
-    }
-
-    /**
-     * Override hashCode.
-     * Generates the hash code for the BuddhistCalendar object
-     */
-    public int hashCode() {
-        return super.hashCode() ^ BUDDHIST_YEAR_OFFSET;
-    }
-
-    /**
-     * Gets the value for a given time field.
-     * @param field the given time field.
-     * @return the value for the given time field.
-     */
-    public int get(int field)
-    {
-        if (field == YEAR) {
-            return super.get(field) + yearOffset;
-        }
-        return super.get(field);
-    }
-
-    /**
-     * Sets the time field with the given value.
-     * @param field the given time field.
-     * @param value the value to be set for the given time field.
-     */
-    public void set(int field, int value)
-    {
-        if (field == YEAR) {
-            super.set(field, value - yearOffset);
-        } else {
-            super.set(field, value);
-        }
-    }
-
-    /**
-     * Adds the specified (signed) amount of time to the given time field.
-     * @param field the time field.
-     * @param amount the amount of date or time to be added to the field.
-     */
-    public void add(int field, int amount)
-    {
-        int savedYearOffset = yearOffset;
-        // To let the superclass calculate date-time values correctly,
-        // temporarily make this GregorianCalendar.
-        yearOffset = 0;
-        try {
-            super.add(field, amount);
-        } finally {
-            yearOffset = savedYearOffset;
-        }
-    }
-
-    /**
-     * Add to field a signed amount without changing larger fields.
-     * A negative roll amount means to subtract from field without changing
-     * larger fields.
-     * @param field the time field.
-     * @param amount the signed amount to add to <code>field</code>.
-     */
-    public void roll(int field, int amount)
-    {
-        int savedYearOffset = yearOffset;
-        // To let the superclass calculate date-time values correctly,
-        // temporarily make this GregorianCalendar.
-        yearOffset = 0;
-        try {
-            super.roll(field, amount);
-        } finally {
-            yearOffset = savedYearOffset;
-        }
-    }
-
-    public String getDisplayName(int field, int style, Locale locale) {
-        if (field != ERA) {
-            return super.getDisplayName(field, style, locale);
-        }
-
-        // Handle Thai BuddhistCalendar specific era names
-        if (field < 0 || field >= fields.length ||
-            style < SHORT || style > LONG) {
-            throw new IllegalArgumentException();
-        }
-        if (locale == null) {
-            throw new NullPointerException();
-        }
-        ResourceBundle rb = LocaleData.getDateFormatData(locale);
-        String[] eras = rb.getStringArray(getKey(style));
-        return eras[get(field)];
-    }
-
-    public Map<String,Integer> getDisplayNames(int field, int style, Locale locale) {
-        if (field != ERA) {
-            return super.getDisplayNames(field, style, locale);
-        }
-
-        // Handle Thai BuddhistCalendar specific era names
-        if (field < 0 || field >= fields.length ||
-            style < ALL_STYLES || style > LONG) {
-            throw new IllegalArgumentException();
-        }
-        if (locale == null) {
-            throw new NullPointerException();
-        }
-        // ALL_STYLES
-        if (style == ALL_STYLES) {
-            Map<String,Integer> shortNames = getDisplayNamesImpl(field, SHORT, locale);
-            Map<String,Integer> longNames = getDisplayNamesImpl(field, LONG, locale);
-            if (shortNames == null) {
-                return longNames;
-            }
-            if (longNames != null) {
-                shortNames.putAll(longNames);
-            }
-            return shortNames;
-        }
-
-        // SHORT or LONG
-        return getDisplayNamesImpl(field, style, locale);
-    }
-
-    private Map<String,Integer> getDisplayNamesImpl(int field, int style, Locale locale) {
-        ResourceBundle rb = LocaleData.getDateFormatData(locale);
-        String[] eras = rb.getStringArray(getKey(style));
-        Map<String,Integer> map = new HashMap<String,Integer>(4);
-        for (int i = 0; i < eras.length; i++) {
-            map.put(eras[i], i);
-        }
-        return map;
-    }
-
-    private String getKey(int style) {
-        StringBuilder key = new StringBuilder();
-        key.append(BuddhistCalendar.class.getName());
-        if (style == SHORT) {
-            key.append(".short");
-        }
-        key.append(".Eras");
-        return key.toString();
-    }
-
-    /**
-     * Returns the maximum value that this field could have, given the
-     * current date.  For example, with the date "Feb 3, 2540" and the
-     * <code>DAY_OF_MONTH</code> field, the actual maximum is 28; for
-     * "Feb 3, 2539" it is 29.
-     *
-     * @param field the field to determine the maximum of
-     * @return the maximum of the given field for the current date of this Calendar
-     */
-    public int getActualMaximum(int field) {
-        int savedYearOffset = yearOffset;
-        // To let the superclass calculate date-time values correctly,
-        // temporarily make this GregorianCalendar.
-        yearOffset = 0;
-        try {
-            return super.getActualMaximum(field);
-        } finally {
-            yearOffset = savedYearOffset;
-        }
-    }
-
-    public String toString() {
-        // The super class produces a String with the Gregorian year
-        // value (or '?')
-        String s = super.toString();
-        // If the YEAR field is UNSET, then return the Gregorian string.
-        if (!isSet(YEAR)) {
-            return s;
-        }
-
-        final String yearField = "YEAR=";
-        int p = s.indexOf(yearField);
-        // If the string doesn't include the year value for some
-        // reason, then return the Gregorian string.
-        if (p == -1) {
-            return s;
-        }
-        p += yearField.length();
-        StringBuilder sb = new StringBuilder(s.substring(0, p));
-        // Skip the year number
-        while (Character.isDigit(s.charAt(p++)))
-            ;
-        int year = internalGet(YEAR) + BUDDHIST_YEAR_OFFSET;
-        sb.append(year).append(s.substring(p - 1));
-        return sb.toString();
-    }
-
-    private transient int yearOffset = BUDDHIST_YEAR_OFFSET;
-
-    private void readObject(ObjectInputStream stream)
-        throws IOException, ClassNotFoundException {
-        stream.defaultReadObject();
-        yearOffset = BUDDHIST_YEAR_OFFSET;
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/EmptyListResourceBundle.java b/ojluni/src/main/java/sun/util/EmptyListResourceBundle.java
deleted file mode 100755
index 579e2a6..0000000
--- a/ojluni/src/main/java/sun/util/EmptyListResourceBundle.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, 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.
- */
-
-package sun.util;
-
-import java.util.ListResourceBundle;
-
-public class EmptyListResourceBundle extends ListResourceBundle {
-    @Override
-    protected final Object[][] getContents() {
-        return new Object[][] {};
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/TimeZoneNameUtility.java b/ojluni/src/main/java/sun/util/TimeZoneNameUtility.java
deleted file mode 100755
index 80d7fa1..0000000
--- a/ojluni/src/main/java/sun/util/TimeZoneNameUtility.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.util;
-
-import java.lang.ref.SoftReference;
-import java.util.Enumeration;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.MissingResourceException;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.spi.TimeZoneNameProvider;
-import sun.util.calendar.ZoneInfo;
-import sun.util.resources.LocaleData;
-import sun.util.resources.OpenListResourceBundle;
-
-/**
- * Utility class that deals with the localized time zone names
- */
-public final class TimeZoneNameUtility {
-
-    /**
-     * cache to hold time zone resource bundles. Keyed by Locale
-     */
-    private static ConcurrentHashMap<Locale, SoftReference<OpenListResourceBundle>> cachedBundles =
-        new ConcurrentHashMap<Locale, SoftReference<OpenListResourceBundle>>();
-
-    /**
-     * cache to hold time zone localized strings. Keyed by Locale
-     */
-    private static ConcurrentHashMap<Locale, SoftReference<String[][]>> cachedZoneData =
-        new ConcurrentHashMap<Locale, SoftReference<String[][]>>();
-
-    /**
-     * get time zone localized strings. Enumerate all keys.
-     */
-    public static final String[][] getZoneStrings(Locale locale) {
-        String[][] zones;
-        SoftReference<String[][]> data = cachedZoneData.get(locale);
-
-        if (data == null || ((zones = data.get()) == null)) {
-            zones = loadZoneStrings(locale);
-            data = new SoftReference<String[][]>(zones);
-            cachedZoneData.put(locale, data);
-        }
-
-        return zones;
-    }
-
-    private static final String[][] loadZoneStrings(Locale locale) {
-        List<String[]> zones = new LinkedList<String[]>();
-        OpenListResourceBundle rb = getBundle(locale);
-        Enumeration<String> keys = rb.getKeys();
-        String[] names = null;
-
-        while(keys.hasMoreElements()) {
-            String key = keys.nextElement();
-
-            names = retrieveDisplayNames(rb, key, locale);
-            if (names != null) {
-                zones.add(names);
-            }
-        }
-
-        String[][] zonesArray = new String[zones.size()][];
-        return zones.toArray(zonesArray);
-    }
-
-    /**
-     * Retrieve display names for a time zone ID.
-     */
-    public static final String[] retrieveDisplayNames(String id, Locale locale) {
-        OpenListResourceBundle rb = getBundle(locale);
-        return retrieveDisplayNames(rb, id, locale);
-    }
-
-    private static final String[] retrieveDisplayNames(OpenListResourceBundle rb,
-                                                String id, Locale locale) {
-        LocaleServiceProviderPool pool =
-            LocaleServiceProviderPool.getPool(TimeZoneNameProvider.class);
-        String[] names = null;
-
-        // Check whether a provider can provide an implementation that's closer
-        // to the requested locale than what the Java runtime itself can provide.
-        if (pool.hasProviders()) {
-            names = pool.getLocalizedObject(
-                            TimeZoneNameGetter.INSTANCE,
-                            locale, rb, id);
-        }
-
-        if (names == null) {
-            try {
-                names = rb.getStringArray(id);
-            } catch (MissingResourceException mre) {
-                // fall through
-            }
-        }
-
-        return names;
-    }
-
-    private static final OpenListResourceBundle getBundle(Locale locale) {
-        OpenListResourceBundle rb;
-        SoftReference<OpenListResourceBundle> data = cachedBundles.get(locale);
-
-        if (data == null || ((rb = data.get()) == null)) {
-            rb = LocaleData.getTimeZoneNames(locale);
-            data = new SoftReference<OpenListResourceBundle>(rb);
-            cachedBundles.put(locale, data);
-        }
-
-        return rb;
-    }
-
-    /**
-     * Obtains a localized time zone strings from a TimeZoneNameProvider
-     * implementation.
-     */
-    private static class TimeZoneNameGetter
-        implements LocaleServiceProviderPool.LocalizedObjectGetter<TimeZoneNameProvider,
-                                                                   String[]>{
-        private static final TimeZoneNameGetter INSTANCE =
-            new TimeZoneNameGetter();
-
-        public String[] getObject(TimeZoneNameProvider timeZoneNameProvider,
-                                Locale locale,
-                                String requestID,
-                                Object... params) {
-            assert params.length == 0;
-            String[] names = null;
-            String queryID = requestID;
-
-            if (queryID.equals("GMT")) {
-                names = buildZoneStrings(timeZoneNameProvider, locale, queryID);
-            } else {
-                Map<String, String> aliases = ZoneInfo.getAliasTable();
-
-                if (aliases != null) {
-                    // Check whether this id is an alias, if so,
-                    // look for the standard id.
-                    if (aliases.containsKey(queryID)) {
-                        String prevID = queryID;
-                        while ((queryID = aliases.get(queryID)) != null) {
-                            prevID = queryID;
-                        }
-                        queryID = prevID;
-                    }
-
-                    names = buildZoneStrings(timeZoneNameProvider, locale, queryID);
-
-                    if (names == null) {
-                        // There may be a case that a standard id has become an
-                        // alias.  so, check the aliases backward.
-                        names = examineAliases(timeZoneNameProvider, locale,
-                                               queryID, aliases, aliases.entrySet());
-                    }
-                }
-            }
-
-            if (names != null) {
-                names[0] = requestID;
-            }
-
-            return names;
-        }
-
-        private static String[] examineAliases(TimeZoneNameProvider tznp, Locale locale,
-                                               String id,
-                                               Map<String, String> aliases,
-                                               Set<Map.Entry<String, String>> aliasesSet) {
-            if (aliases.containsValue(id)) {
-                for (Map.Entry<String, String> entry : aliasesSet) {
-                    if (entry.getValue().equals(id)) {
-                        String alias = entry.getKey();
-                        String[] names = buildZoneStrings(tznp, locale, alias);
-                        if (names != null) {
-                            return names;
-                        } else {
-                            names = examineAliases(tznp, locale, alias, aliases, aliasesSet);
-                            if (names != null) {
-                                return names;
-                            }
-                        }
-                    }
-                }
-            }
-
-            return null;
-        }
-
-        private static String[] buildZoneStrings(TimeZoneNameProvider tznp,
-                                    Locale locale, String id) {
-            String[] names = new String[5];
-
-            for (int i = 1; i <= 4; i ++) {
-                names[i] = tznp.getDisplayName(id, i>=3, i%2, locale);
-                if (i >= 3 && names[i] == null) {
-                    names[i] = names[i-2];
-                }
-            }
-
-            if (names[1] == null) {
-                // this id seems not localized by this provider
-                names = null;
-            }
-
-            return names;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/calendar/ZoneInfo.java b/ojluni/src/main/java/sun/util/calendar/ZoneInfo.java
deleted file mode 100755
index 339c045..0000000
--- a/ojluni/src/main/java/sun/util/calendar/ZoneInfo.java
+++ /dev/null
@@ -1,859 +0,0 @@
-/*
- * Copyright (c) 2000, 2012, 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.
- */
-
-package sun.util.calendar;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.lang.ref.SoftReference;
-import java.security.AccessController;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.SimpleTimeZone;
-import java.util.TimeZone;
-
-/**
- * <code>ZoneInfo</code> is an implementation subclass of {@link
- * java.util.TimeZone TimeZone} that represents GMT offsets and
- * daylight saving time transitions of a time zone.
- * <p>
- * The daylight saving time transitions are described in the {@link
- * #transitions transitions} table consisting of a chronological
- * sequence of transitions of GMT offset and/or daylight saving time
- * changes. Since all transitions are represented in UTC, in theory,
- * <code>ZoneInfo</code> can be used with any calendar systems except
- * for the {@link #getOffset(int,int,int,int,int,int) getOffset}
- * method that takes Gregorian calendar date fields.
- * <p>
- * This table covers transitions from 1900 until 2037 (as of version
- * 1.4), Before 1900, it assumes that there was no daylight saving
- * time and the <code>getOffset</code> methods always return the
- * {@link #getRawOffset} value. No Local Mean Time is supported. If a
- * specified date is beyond the transition table and this time zone is
- * supposed to observe daylight saving time in 2037, it delegates
- * operations to a {@link java.util.SimpleTimeZone SimpleTimeZone}
- * object created using the daylight saving time schedule as of 2037.
- * <p>
- * The date items, transitions, GMT offset(s), etc. are read from a database
- * file. See {@link ZoneInfoFile} for details.
- * @see java.util.SimpleTimeZone
- * @since 1.4
- */
-
-public class ZoneInfo extends TimeZone {
-
-    private static final int UTC_TIME = 0;
-    private static final int STANDARD_TIME = 1;
-    private static final int WALL_TIME = 2;
-
-    private static final long OFFSET_MASK = 0x0fL;
-    private static final long DST_MASK = 0xf0L;
-    private static final int DST_NSHIFT = 4;
-    // this bit field is reserved for abbreviation support
-    private static final long ABBR_MASK = 0xf00L;
-    private static final int TRANSITION_NSHIFT = 12;
-
-    // Flag for supporting JDK backward compatible IDs, such as "EST".
-    static final boolean USE_OLDMAPPING;
-    static {
-      String oldmapping = AccessController.doPrivileged(
-          new sun.security.action.GetPropertyAction("sun.timezone.ids.oldmapping", "false")).toLowerCase(Locale.ROOT);
-      USE_OLDMAPPING = (oldmapping.equals("yes") || oldmapping.equals("true"));
-    }
-
-    // IDs having conflicting data between Olson and JDK 1.1
-    static final String[] conflictingIDs = {
-        "EST", "MST", "HST"
-    };
-
-    private static final CalendarSystem gcal = CalendarSystem.getGregorianCalendar();
-
-    /**
-     * The raw GMT offset in milliseconds between this zone and GMT.
-     * Negative offsets are to the west of Greenwich.  To obtain local
-     * <em>standard</em> time, add the offset to GMT time.
-     * @serial
-     */
-    private int rawOffset;
-
-    /**
-     * Difference in milliseconds from the original GMT offset in case
-     * the raw offset value has been modified by calling {@link
-     * #setRawOffset}. The initial value is 0.
-     * @serial
-     */
-    private int rawOffsetDiff = 0;
-
-    /**
-     * A CRC32 value of all pairs of transition time (in milliseconds
-     * in <code>long</code>) in local time and its GMT offset (in
-     * seconds in <code>int</code>) in the chronological order. Byte
-     * values of each <code>long</code> and <code>int</code> are taken
-     * in the big endian order (i.e., MSB to LSB).
-     * @serial
-     */
-    private int checksum;
-
-    /**
-     * The amount of time in milliseconds saved during daylight saving
-     * time. If <code>useDaylight</code> is false, this value is 0.
-     * @serial
-     */
-    private int dstSavings;
-
-    /**
-     * This array describes transitions of GMT offsets of this time
-     * zone, including both raw offset changes and daylight saving
-     * time changes.
-     * A long integer consists of four bit fields.
-     * <ul>
-     * <li>The most significant 52-bit field represents transition
-     * time in milliseconds from Gregorian January 1 1970, 00:00:00
-     * GMT.</li>
-     * <li>The next 4-bit field is reserved and must be 0.</li>
-     * <li>The next 4-bit field is an index value to {@link #offsets
-     * offsets[]} for the amount of daylight saving at the
-     * transition. If this value is zero, it means that no daylight
-     * saving, not the index value zero.</li>
-     * <li>The least significant 4-bit field is an index value to
-     * {@link #offsets offsets[]} for <em>total</em> GMT offset at the
-     * transition.</li>
-     * </ul>
-     * If this time zone doesn't observe daylight saving time and has
-     * never changed any GMT offsets in the past, this value is null.
-     * @serial
-     */
-    private long[] transitions;
-
-    /**
-     * This array holds all unique offset values in
-     * milliseconds. Index values to this array are stored in the
-     * transitions array elements.
-     * @serial
-     */
-    private int[] offsets;
-
-    /**
-     * SimpleTimeZone parameter values. It has to have either 8 for
-     * {@link java.util.SimpleTimeZone#SimpleTimeZone(int, String,
-     * int, int , int , int , int , int , int , int , int) the
-     * 11-argument SimpleTimeZone constructor} or 10 for {@link
-     * java.util.SimpleTimeZone#SimpleTimeZone(int, String, int, int,
-     * int , int , int , int , int , int , int, int, int) the
-     * 13-argument SimpleTimeZone constructor} parameters.
-     * @serial
-     */
-    private int[] simpleTimeZoneParams;
-
-    /**
-     * True if the raw GMT offset value would change after the time
-     * zone data has been generated; false, otherwise. The default
-     * value is false.
-     * @serial
-     */
-    private boolean willGMTOffsetChange = false;
-
-    /**
-     * True if the object has been modified after its instantiation.
-     */
-    transient private boolean dirty = false;
-
-    private static final long serialVersionUID = 2653134537216586139L;
-
-    /**
-     * A constructor.
-     */
-    public ZoneInfo() {
-    }
-
-    /**
-     * A Constructor for CustomID.
-     */
-    public ZoneInfo(String ID, int rawOffset) {
-        this(ID, rawOffset, 0, 0, null, null, null, false);
-    }
-
-    /**
-     * Constructs a ZoneInfo instance.
-     *
-     * @param ID time zone name
-     * @param rawOffset GMT offset in milliseconds
-     * @param dstSavings daylight saving value in milliseconds or 0
-     * (zero) if this time zone doesn't observe Daylight Saving Time.
-     * @param checksum CRC32 value with all transitions table entry
-     * values
-     * @param transitions transition table
-     * @param offsets offset value table
-     * @param simpleTimeZoneParams parameter values for constructing
-     * SimpleTimeZone
-     * @param willGMTOffsetChange the value of willGMTOffsetChange
-     */
-    ZoneInfo(String ID,
-             int rawOffset,
-             int dstSavings,
-             int checksum,
-             long[] transitions,
-             int[] offsets,
-             int[] simpleTimeZoneParams,
-             boolean willGMTOffsetChange) {
-        setID(ID);
-        this.rawOffset = rawOffset;
-        this.dstSavings = dstSavings;
-        this.checksum = checksum;
-        this.transitions = transitions;
-        this.offsets = offsets;
-        this.simpleTimeZoneParams = simpleTimeZoneParams;
-        this.willGMTOffsetChange = willGMTOffsetChange;
-    }
-
-    /**
-     * Returns the difference in milliseconds between local time and UTC
-     * of given time, taking into account both the raw offset and the
-     * effect of daylight savings.
-     *
-     * @param date the milliseconds in UTC
-     * @return the milliseconds to add to UTC to get local wall time
-     */
-    public int getOffset(long date) {
-        return getOffsets(date, null, UTC_TIME);
-    }
-
-    public int getOffsets(long utc, int[] offsets) {
-        return getOffsets(utc, offsets, UTC_TIME);
-    }
-
-    public int getOffsetsByStandard(long standard, int[] offsets) {
-        return getOffsets(standard, offsets, STANDARD_TIME);
-    }
-
-    public int getOffsetsByWall(long wall, int[] offsets) {
-        return getOffsets(wall, offsets, WALL_TIME);
-    }
-
-    private int getOffsets(long date, int[] offsets, int type) {
-        // if dst is never observed, there is no transition.
-        if (transitions == null) {
-            int offset = getLastRawOffset();
-            if (offsets != null) {
-                offsets[0] = offset;
-                offsets[1] = 0;
-            }
-            return offset;
-        }
-
-        date -= rawOffsetDiff;
-        int index = getTransitionIndex(date, type);
-
-        // prior to the transition table, returns the raw offset.
-        // FIXME: should support LMT.
-        if (index < 0) {
-            int offset = getLastRawOffset();
-            if (offsets != null) {
-                offsets[0] = offset;
-                offsets[1] = 0;
-            }
-            return offset;
-        }
-
-        if (index < transitions.length) {
-            long val = transitions[index];
-            int offset = this.offsets[(int)(val & OFFSET_MASK)] + rawOffsetDiff;
-            if (offsets != null) {
-                int dst = (int)((val >>> DST_NSHIFT) & 0xfL);
-                int save = (dst == 0) ? 0 : this.offsets[dst];
-                offsets[0] = offset - save;
-                offsets[1] = save;
-            }
-            return offset;
-        }
-
-        // beyond the transitions, delegate to SimpleTimeZone if there
-        // is a rule; otherwise, return rawOffset.
-        SimpleTimeZone tz = getLastRule();
-        if (tz != null) {
-            int rawoffset = tz.getRawOffset();
-            long msec = date;
-            if (type != UTC_TIME) {
-                msec -= rawOffset;
-            }
-            int dstoffset = tz.getOffset(msec) - rawOffset;
-
-            // Check if it's in a standard-to-daylight transition.
-            if (dstoffset > 0 && tz.getOffset(msec - dstoffset) == rawoffset) {
-                dstoffset = 0;
-            }
-
-            if (offsets != null) {
-                offsets[0] = rawoffset;
-                offsets[1] = dstoffset;
-            }
-            return rawoffset + dstoffset;
-        }
-        int offset = getLastRawOffset();
-        if (offsets != null) {
-            offsets[0] = offset;
-            offsets[1] = 0;
-        }
-        return offset;
-    }
-
-    private final int getTransitionIndex(long date, int type) {
-        int low = 0;
-        int high = transitions.length - 1;
-
-        while (low <= high) {
-            int mid = (low + high) / 2;
-            long val = transitions[mid];
-            long midVal = val >> TRANSITION_NSHIFT; // sign extended
-            if (type != UTC_TIME) {
-                midVal += offsets[(int)(val & OFFSET_MASK)]; // wall time
-            }
-            if (type == STANDARD_TIME) {
-                int dstIndex = (int)((val >>> DST_NSHIFT) & 0xfL);
-                if (dstIndex != 0) {
-                    midVal -= offsets[dstIndex]; // make it standard time
-                }
-            }
-
-            if (midVal < date) {
-                low = mid + 1;
-            } else if (midVal > date) {
-                high = mid - 1;
-            } else {
-                return mid;
-            }
-        }
-
-        // if beyond the transitions, returns that index.
-        if (low >= transitions.length) {
-            return low;
-        }
-        return low - 1;
-    }
-
-   /**
-     * Returns the difference in milliseconds between local time and
-     * UTC, taking into account both the raw offset and the effect of
-     * daylight savings, for the specified date and time.  This method
-     * assumes that the start and end month are distinct.  This method
-     * assumes a Gregorian calendar for calculations.
-     * <p>
-     * <em>Note: In general, clients should use
-     * {@link Calendar#ZONE_OFFSET Calendar.get(ZONE_OFFSET)} +
-     * {@link Calendar#DST_OFFSET Calendar.get(DST_OFFSET)}
-     * instead of calling this method.</em>
-     *
-     * @param era       The era of the given date. The value must be either
-     *                  GregorianCalendar.AD or GregorianCalendar.BC.
-     * @param year      The year in the given date.
-     * @param month     The month in the given date. Month is 0-based. e.g.,
-     *                  0 for January.
-     * @param day       The day-in-month of the given date.
-     * @param dayOfWeek The day-of-week of the given date.
-     * @param millis    The milliseconds in day in <em>standard</em> local time.
-     * @return The milliseconds to add to UTC to get local time.
-     */
-    public int getOffset(int era, int year, int month, int day,
-                         int dayOfWeek, int milliseconds) {
-        if (milliseconds < 0 || milliseconds >= AbstractCalendar.DAY_IN_MILLIS) {
-            throw new IllegalArgumentException();
-        }
-
-        if (era == java.util.GregorianCalendar.BC) { // BC
-            year = 1 - year;
-        } else if (era != java.util.GregorianCalendar.AD) {
-            throw new IllegalArgumentException();
-        }
-
-        CalendarDate date = gcal.newCalendarDate(null);
-        date.setDate(year, month + 1, day);
-        if (gcal.validate(date) == false) {
-            throw new IllegalArgumentException();
-        }
-
-        // bug-for-bug compatible argument checking
-        if (dayOfWeek < java.util.GregorianCalendar.SUNDAY
-            || dayOfWeek > java.util.GregorianCalendar.SATURDAY) {
-            throw new IllegalArgumentException();
-        }
-
-        if (transitions == null) {
-            return getLastRawOffset();
-        }
-
-        long dateInMillis = gcal.getTime(date) + milliseconds;
-        dateInMillis -= (long) rawOffset; // make it UTC
-        return getOffsets(dateInMillis, null, UTC_TIME);
-    }
-
-    /**
-     * Sets the base time zone offset from GMT. This operation
-     * modifies all the transitions of this ZoneInfo object, including
-     * historical ones, if applicable.
-     *
-     * @param offsetMillis the base time zone offset to GMT.
-     * @see getRawOffset
-     */
-    public synchronized void setRawOffset(int offsetMillis) {
-        if (offsetMillis == rawOffset + rawOffsetDiff) {
-            return;
-        }
-        rawOffsetDiff = offsetMillis - rawOffset;
-        if (lastRule != null) {
-            lastRule.setRawOffset(offsetMillis);
-        }
-        dirty = true;
-    }
-
-    /**
-     * Returns the GMT offset of the current date. This GMT offset
-     * value is not modified during Daylight Saving Time.
-     *
-     * @return the GMT offset value in milliseconds to add to UTC time
-     * to get local standard time
-     */
-    public int getRawOffset() {
-        if (!willGMTOffsetChange) {
-            return rawOffset + rawOffsetDiff;
-        }
-
-        int[] offsets = new int[2];
-        getOffsets(System.currentTimeMillis(), offsets, UTC_TIME);
-        return offsets[0];
-    }
-
-    public boolean isDirty() {
-        return dirty;
-    }
-
-    private int getLastRawOffset() {
-        return rawOffset + rawOffsetDiff;
-    }
-
-    /**
-     * Queries if this time zone uses Daylight Saving Time in the last known rule.
-     */
-    public boolean useDaylightTime() {
-        return (simpleTimeZoneParams != null);
-    }
-
-    @Override
-    public boolean observesDaylightTime() {
-        if (simpleTimeZoneParams != null) {
-            return true;
-        }
-        if (transitions == null) {
-            return false;
-        }
-
-        // Look up the transition table to see if it's in DST right
-        // now or if there's any standard-to-daylight transition at
-        // any future.
-        long utc = System.currentTimeMillis() - rawOffsetDiff;
-        int index = getTransitionIndex(utc, UTC_TIME);
-
-        // before transitions in the transition table
-        if (index < 0) {
-            return false;
-        }
-
-        // the time is in the table range.
-        for (int i = index; i < transitions.length; i++) {
-            if ((transitions[i] & DST_MASK) != 0) {
-                return true;
-            }
-        }
-        // No further DST is observed.
-        return false;
-    }
-
-    /**
-     * Queries if the specified date is in Daylight Saving Time.
-     */
-    public boolean inDaylightTime(Date date) {
-        if (date == null) {
-            throw new NullPointerException();
-        }
-
-        if (transitions == null) {
-            return false;
-        }
-
-        long utc = date.getTime() - rawOffsetDiff;
-        int index = getTransitionIndex(utc, UTC_TIME);
-
-        // before transitions in the transition table
-        if (index < 0) {
-            return false;
-        }
-
-        // the time is in the table range.
-        if (index < transitions.length) {
-            return (transitions[index] & DST_MASK) != 0;
-        }
-
-        // beyond the transition table
-        SimpleTimeZone tz = getLastRule();
-        if (tz != null) {
-            return tz.inDaylightTime(date);
-        }
-        return false;
-    }
-
-    /**
-     * Returns the amount of time in milliseconds that the clock is advanced
-     * during daylight saving time is in effect in its last daylight saving time rule.
-     *
-     * @return the number of milliseconds the time is advanced with respect to
-     * standard time when daylight saving time is in effect.
-     */
-    public int getDSTSavings() {
-        return dstSavings;
-    }
-
-//    /**
-//     * @return the last year in the transition table or -1 if this
-//     * time zone doesn't observe any daylight saving time.
-//     */
-//    public int getMaxTransitionYear() {
-//      if (transitions == null) {
-//          return -1;
-//      }
-//      long val = transitions[transitions.length - 1];
-//      int offset = this.offsets[(int)(val & OFFSET_MASK)] + rawOffsetDiff;
-//      val = (val >> TRANSITION_NSHIFT) + offset;
-//      CalendarDate lastDate = Gregorian.getCalendarDate(val);
-//      return lastDate.getYear();
-//    }
-
-    /**
-     * Returns a string representation of this time zone.
-     * @return the string
-     */
-    public String toString() {
-        return getClass().getName() +
-            "[id=\"" + getID() + "\"" +
-            ",offset=" + getLastRawOffset() +
-            ",dstSavings=" + dstSavings +
-            ",useDaylight=" + useDaylightTime() +
-            ",transitions=" + ((transitions != null) ? transitions.length : 0) +
-            ",lastRule=" + (lastRule == null ? getLastRuleInstance() : lastRule) +
-            "]";
-    }
-
-    /**
-     * Gets all available IDs supported in the Java run-time.
-     *
-     * @return an array of time zone IDs.
-     */
-    public static String[] getAvailableIDs() {
-        List<String> idList = ZoneInfoFile.getZoneIDs();
-        List<String> excluded = ZoneInfoFile.getExcludedZones();
-        if (excluded != null) {
-            // List all zones from the idList and excluded lists
-            List<String> list = new ArrayList<String>(idList.size() + excluded.size());
-            list.addAll(idList);
-            list.addAll(excluded);
-            idList = list;
-        }
-        String[] ids = new String[idList.size()];
-        return idList.toArray(ids);
-    }
-
-    /**
-     * Gets all available IDs that have the same value as the
-     * specified raw GMT offset.
-     *
-     * @param rawOffset the GMT offset in milliseconds. This
-     * value should not include any daylight saving time.
-     *
-     * @return an array of time zone IDs.
-     */
-    public static String[] getAvailableIDs(int rawOffset) {
-        String[] result;
-        List<String> matched = new ArrayList<String>();
-        List<String> IDs = ZoneInfoFile.getZoneIDs();
-        int[] rawOffsets = ZoneInfoFile.getRawOffsets();
-
-    loop:
-        for (int index = 0; index < rawOffsets.length; index++) {
-            if (rawOffsets[index] == rawOffset) {
-                byte[] indices = ZoneInfoFile.getRawOffsetIndices();
-                for (int i = 0; i < indices.length; i++) {
-                    if (indices[i] == index) {
-                        matched.add(IDs.get(i++));
-                        while (i < indices.length && indices[i] == index) {
-                            matched.add(IDs.get(i++));
-                        }
-                        break loop;
-                    }
-                }
-            }
-        }
-
-        // We need to add any zones from the excluded zone list that
-        // currently have the same GMT offset as the specified
-        // rawOffset. The zones returned by this method may not be
-        // correct as of return to the caller if any GMT offset
-        // transition is happening during this GMT offset checking...
-        List<String> excluded = ZoneInfoFile.getExcludedZones();
-        if (excluded != null) {
-            for (String id : excluded) {
-                TimeZone zi = getTimeZone(id);
-                if (zi != null && zi.getRawOffset() == rawOffset) {
-                    matched.add(id);
-                }
-            }
-        }
-
-        result = new String[matched.size()];
-        matched.toArray(result);
-        return result;
-    }
-
-    /**
-     * Gets the ZoneInfo for the given ID.
-     *
-     * @param ID the ID for a ZoneInfo. See TimeZone for detail.
-     *
-     * @return the specified ZoneInfo object, or null if there is no
-     * time zone of the ID.
-     */
-    public static TimeZone getTimeZone(String ID) {
-        String givenID = null;
-
-        /*
-         * If old JDK compatibility is specified, get the old alias
-         * name.
-         */
-        if (USE_OLDMAPPING) {
-            String compatibleID = TzIDOldMapping.MAP.get(ID);
-            if (compatibleID != null) {
-                givenID = ID;
-                ID = compatibleID;
-            }
-        }
-
-        ZoneInfo zi = ZoneInfoFile.getZoneInfo(ID);
-        if (zi == null) {
-            // if we can't create an object for the ID, try aliases.
-            try {
-                Map<String, String> map = getAliasTable();
-                String alias = ID;
-                while ((alias = map.get(alias)) != null) {
-                    zi = ZoneInfoFile.getZoneInfo(alias);
-                    if (zi != null) {
-                        zi.setID(ID);
-                        zi = ZoneInfoFile.addToCache(ID, zi);
-                        zi = (ZoneInfo) zi.clone();
-                        break;
-                    }
-                }
-            } catch (Exception e) {
-                // ignore exceptions
-            }
-        }
-
-        if (givenID != null && zi != null) {
-            zi.setID(givenID);
-        }
-        return zi;
-    }
-
-    private transient SimpleTimeZone lastRule;
-
-    /**
-     * Returns a SimpleTimeZone object representing the last GMT
-     * offset and DST schedule or null if this time zone doesn't
-     * observe DST.
-     */
-    private synchronized SimpleTimeZone getLastRule() {
-        if (lastRule == null) {
-            lastRule = getLastRuleInstance();
-        }
-        return lastRule;
-    }
-
-    /**
-     * Returns a SimpleTimeZone object that represents the last
-     * known daylight saving time rules.
-     *
-     * @return a SimpleTimeZone object or null if this time zone
-     * doesn't observe DST.
-     */
-    public SimpleTimeZone getLastRuleInstance() {
-        if (simpleTimeZoneParams == null) {
-            return null;
-        }
-        if (simpleTimeZoneParams.length == 10) {
-            return new SimpleTimeZone(getLastRawOffset(), getID(),
-                                      simpleTimeZoneParams[0],
-                                      simpleTimeZoneParams[1],
-                                      simpleTimeZoneParams[2],
-                                      simpleTimeZoneParams[3],
-                                      simpleTimeZoneParams[4],
-                                      simpleTimeZoneParams[5],
-                                      simpleTimeZoneParams[6],
-                                      simpleTimeZoneParams[7],
-                                      simpleTimeZoneParams[8],
-                                      simpleTimeZoneParams[9],
-                                      dstSavings);
-        }
-        return new SimpleTimeZone(getLastRawOffset(), getID(),
-                                  simpleTimeZoneParams[0],
-                                  simpleTimeZoneParams[1],
-                                  simpleTimeZoneParams[2],
-                                  simpleTimeZoneParams[3],
-                                  simpleTimeZoneParams[4],
-                                  simpleTimeZoneParams[5],
-                                  simpleTimeZoneParams[6],
-                                  simpleTimeZoneParams[7],
-                                  dstSavings);
-    }
-
-    /**
-     * Returns a copy of this <code>ZoneInfo</code>.
-     */
-    public Object clone() {
-        ZoneInfo zi = (ZoneInfo) super.clone();
-        zi.lastRule = null;
-        return zi;
-    }
-
-    /**
-     * Returns a hash code value calculated from the GMT offset and
-     * transitions.
-     * @return a hash code of this time zone
-     */
-    public int hashCode() {
-        return getLastRawOffset() ^ checksum;
-    }
-
-    /**
-     * Compares the equity of two ZoneInfo objects.
-     *
-     * @param obj the object to be compared with
-     * @return true if given object is same as this ZoneInfo object,
-     * false otherwise.
-     */
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (!(obj instanceof ZoneInfo)) {
-            return false;
-        }
-        ZoneInfo that = (ZoneInfo) obj;
-        return (getID().equals(that.getID())
-                && (getLastRawOffset() == that.getLastRawOffset())
-                && (checksum == that.checksum));
-    }
-
-    /**
-     * Returns true if this zone has the same raw GMT offset value and
-     * transition table as another zone info. If the specified
-     * TimeZone object is not a ZoneInfo instance, this method returns
-     * true if the specified TimeZone object has the same raw GMT
-     * offset value with no daylight saving time.
-     *
-     * @param other the ZoneInfo object to be compared with
-     * @return true if the given <code>TimeZone</code> has the same
-     * GMT offset and transition information; false, otherwise.
-     */
-    public boolean hasSameRules(TimeZone other) {
-        if (this == other) {
-            return true;
-        }
-        if (other == null) {
-            return false;
-        }
-        if (!(other instanceof ZoneInfo)) {
-            if (getRawOffset() != other.getRawOffset()) {
-                return false;
-            }
-            // if both have the same raw offset and neither observes
-            // DST, they have the same rule.
-            if ((transitions == null)
-                && (useDaylightTime() == false)
-                && (other.useDaylightTime() == false)) {
-                return true;
-            }
-            return false;
-        }
-        if (getLastRawOffset() != ((ZoneInfo)other).getLastRawOffset()) {
-            return false;
-        }
-        return (checksum == ((ZoneInfo)other).checksum);
-    }
-
-    private static SoftReference<Map<String, String>> aliasTable;
-
-    static Map<String, String> getCachedAliasTable() {
-        Map<String, String> aliases = null;
-
-        SoftReference<Map<String, String>> cache = aliasTable;
-        if (cache != null) {
-            aliases = cache.get();
-        }
-        return aliases;
-    }
-
-    /**
-     * Returns a Map from alias time zone IDs to their standard
-     * time zone IDs.
-     *
-     * @return the Map that holds the mappings from alias time zone IDs
-     *    to their standard time zone IDs, or null if
-     *    <code>ZoneInfoMappings</code> file is not available.
-     */
-    public synchronized static Map<String, String> getAliasTable() {
-        Map<String, String> aliases = getCachedAliasTable();
-        if (aliases == null) {
-            aliases = ZoneInfoFile.getZoneAliases();
-            if (aliases != null) {
-                if (!USE_OLDMAPPING) {
-                    // Remove the conflicting IDs from the alias table.
-                    for (String key : conflictingIDs) {
-                        aliases.remove(key);
-                    }
-                }
-                aliasTable = new SoftReference<Map<String, String>>(aliases);
-            }
-        }
-        return aliases;
-    }
-
-    private void readObject(ObjectInputStream stream)
-            throws IOException, ClassNotFoundException {
-        stream.defaultReadObject();
-        // We don't know how this object from 1.4.x or earlier has
-        // been mutated. So it should always be marked as `dirty'.
-        dirty = true;
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/calendar/ZoneInfoFile.java b/ojluni/src/main/java/sun/util/calendar/ZoneInfoFile.java
deleted file mode 100755
index ef5d136..0000000
--- a/ojluni/src/main/java/sun/util/calendar/ZoneInfoFile.java
+++ /dev/null
@@ -1,1074 +0,0 @@
-/*
- * Copyright (c) 2000, 2012, 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.
- */
-
-package sun.util.calendar;
-
-import  java.io.File;
-import  java.io.FileInputStream;
-import  java.io.FileNotFoundException;
-import  java.io.IOException;
-import  java.lang.ref.SoftReference;
-import  java.security.AccessController;
-import  java.security.PrivilegedAction;
-import  java.security.PrivilegedActionException;
-import  java.security.PrivilegedExceptionAction;
-import  java.util.ArrayList;
-import  java.util.HashMap;
-import  java.util.List;
-import  java.util.Map;
-
-/**
- * <code>ZoneInfoFile</code> reads Zone information files in the
- * &lt;java.home&gt;/lib/zi directory and provides time zone
- * information in the form of a {@link ZoneInfo} object. Also, it
- * reads the ZoneInfoMappings file to obtain time zone IDs information
- * that is used by the {@link ZoneInfo} class. The directory layout
- * and data file formats are as follows.
- *
- * <p><strong>Directory layout</strong><p>
- *
- * All zone data files and ZoneInfoMappings are put under the
- * &lt;java.home&gt;/lib/zi directory. A path name for a given time
- * zone ID is a concatenation of &lt;java.home&gt;/lib/zi/ and the
- * time zone ID. (The file separator is replaced with the platform
- * dependent value. e.g., '\' for Win32.) An example layout will look
- * like as follows.
- * <blockquote>
- * <pre>
- * &lt;java.home&gt;/lib/zi/Africa/Addis_Ababa
- *                   /Africa/Dakar
- *                   /America/Los_Angeles
- *                   /Asia/Singapore
- *                   /EET
- *                   /Europe/Oslo
- *                   /GMT
- *                   /Pacific/Galapagos
- *                       ...
- *                   /ZoneInfoMappings
- * </pre>
- * </blockquote>
- *
- * A zone data file has specific information of each zone.
- * <code>ZoneInfoMappings</code> has global information of zone IDs so
- * that the information can be obtained without instantiating all time
- * zones.
- *
- * <p><strong>File format</strong><p>
- *
- * Two binary-file formats based on a simple Tag-Length-Value format are used
- * to describe TimeZone information. The generic format of a data file is:
- * <blockquote>
- * <pre>
- *    DataFile {
- *      u1              magic[7];
- *      u1              version;
- *      data_item       data[];
- *    }
- * </pre>
- * </blockquote>
- * where <code>magic</code> is a magic number identifying a file
- * format, <code>version</code> is the format version number, and
- * <code>data</code> is one or more <code>data_item</code>s. The
- * <code>data_item</code> structure is:
- * <blockquote>
- * <pre>
- *    data_item {
- *      u1              tag;
- *      u2              length;
- *      u1              value[length];
- *    }
- * </pre>
- * </blockquote>
- * where <code>tag</code> indicates the data type of the item,
- * <code>length</code> is a byte count of the following
- * <code>value</code> that is the content of item data.
- * <p>
- * All data is stored in the big-endian order. There is no boundary
- * alignment between date items.
- *
- * <p><strong>1. ZoneInfo data file</strong><p>
- *
- * Each ZoneInfo data file consists of the following members.
- * <br>
- * <blockquote>
- * <pre>
- *    ZoneInfoDataFile {
- *      u1              magic[7];
- *      u1              version;
- *      SET OF<sup>1</sup> {
- *        transition            transitions<sup>2</sup>;
- *        offset_table          offsets<sup>2</sup>;
- *        simpletimezone        stzparams<sup>2</sup>;
- *        raw_offset            rawoffset;
- *        dstsaving             dst;
- *        checksum              crc32;
- *        gmtoffsetwillchange   gmtflag<sup>2</sup>;
- *      }
- *   }
- *   1: an unordered collection of zero or one occurrences of each item
- *   2: optional item
- * </pre>
- * </blockquote>
- * <code>magic</code> is a byte-string constant identifying the
- * ZoneInfo data file.  This field must be <code>"javazi&#92;0"</code>
- * defined as {@link #JAVAZI_LABEL}.
- * <p>
- * <code>version</code> is the version number of the file format. This
- * will be used for compatibility check. This field must be
- * <code>0x01</code> in this version.
- * <p>
- * <code>transition</code>, <code>offset_table</code> and
- * <code>simpletimezone</code> have information of time transition
- * from the past to the future.  Therefore, these structures don't
- * exist if the zone didn't change zone names and haven't applied DST in
- * the past, and haven't planned to apply it.  (e.g. Asia/Tokyo zone)
- * <p>
- * <code>raw_offset</code>, <code>dstsaving</code> and <code>checksum</code>
- * exist in every zoneinfo file. They are used by TimeZone.class indirectly.
- *
- * <p><strong>1.1 <code>transition</code> structure</strong><p><a name="transition"></a>
- * <blockquote>
- * <pre>
- *    transition {
- *      u1      tag;              // 0x04 : constant
- *      u2      length;           // byte length of whole values
- *      s8      value[length/8];  // transitions in `long'
- *    }
- * </pre>
- * </blockquote>
- * See {@link ZoneInfo#transitions ZoneInfo.transitions} about the value.
- *
- * <p><strong>1.2 <code>offset_table</code> structure</strong><p>
- * <blockquote>
- * <pre>
- *    offset_table {
- *      u1      tag;              // 0x05 : constant
- *      u2      length;           // byte length of whole values
- *      s4      value[length/4];  // offset values in `int'
- *    }
- * </pre>
- * </blockquote>
- *
- * <p><strong>1.3 <code>simpletimezone</code> structure</strong><p>
- * See {@link ZoneInfo#simpleTimeZoneParams ZoneInfo.simpleTimeZoneParams}
- * about the value.
- * <blockquote>
- * <pre>
- *    simpletimezone {
- *      u1      tag;              // 0x06 : constant
- *      u2      length;           // byte length of whole values
- *      s4      value[length/4];  // SimpleTimeZone parameters
- *    }
- * </pre>
- * </blockquote>
- * See {@link ZoneInfo#offsets ZoneInfo.offsets} about the value.
- *
- * <p><strong>1.4 <code>raw_offset</code> structure</strong><p>
- * <blockquote>
- * <pre>
- *    raw_offset {
- *      u1      tag;              // 0x01 : constant
- *      u2      length;           // must be 4.
- *      s4      value;            // raw GMT offset [millisecond]
- *    }
- * </pre>
- * </blockquote>
- * See {@link ZoneInfo#rawOffset ZoneInfo.rawOffset} about the value.
- *
- * <p><strong>1.5 <code>dstsaving</code> structure</strong><p>
- * Value has dstSaving in seconds.
- * <blockquote>
- * <pre>
- *    dstsaving {
- *      u1      tag;              // 0x02 : constant
- *      u2      length;           // must be 2.
- *      s2      value;            // DST save value [second]
- *    }
- * </pre>
- * </blockquote>
- * See {@link ZoneInfo#dstSavings ZoneInfo.dstSavings} about value.
- *
- * <p><strong>1.6 <code>checksum</code> structure</strong><p>
- * <blockquote>
- * <pre>
- *    checksum {
- *      u1      tag;              // 0x03 : constant
- *      u2      length;           // must be 4.
- *      s4      value;            // CRC32 value of transitions
- *    }
- * </pre>
- * </blockquote>
- * See {@link ZoneInfo#checksum ZoneInfo.checksum}.
- *
- * <p><strong>1.7 <code>gmtoffsetwillchange</code> structure</strong><p>
- * This record has a flag value for {@link ZoneInfo#rawOffsetWillChange}.
- * If this record is not present in a zoneinfo file, 0 is assumed for
- * the value.
- * <blockquote>
- * <pre>
- *    gmtoffsetwillchange {
- *      u1      tag;             // 0x07 : constant
- *      u2      length;          // must be 1.
- *      u1      value;           // 1: if the GMT raw offset will change
- *                               // in the future, 0, otherwise.
- *     }
- * </pre>
- * </blockquote>
- *
- *
- * <p><strong>2. ZoneInfoMappings file</strong><p>
- *
- * The ZoneInfoMappings file consists of the following members.
- * <br>
- * <blockquote>
- * <pre>
- *    ZoneInfoMappings {
- *      u1      magic[7];
- *      u1      version;
- *      SET OF {
- *        versionName                   version;
- *        zone_id_table                 zoneIDs;
- *        raw_offset_table              rawoffsets;
- *        raw_offset_index_table        rawoffsetindices;
- *        alias_table                   aliases;
- *        excluded_list                 excludedList;
- *      }
- *   }
- * </pre>
- * </blockquote>
- *
- * <code>magic</code> is a byte-string constant which has the file type.
- * This field must be <code>"javazm&#92;0"</code> defined as {@link #JAVAZM_LABEL}.
- * <p>
- * <code>version</code> is the version number of this file
- * format. This will be used for compatibility check. This field must
- * be <code>0x01</code> in this version.
- * <p>
- * <code>versionName</code> shows which version of Olson's data has been used
- * to generate this ZoneInfoMappings. (e.g. <code>tzdata2000g</code>) <br>
- * This field is for trouble-shooting and isn't usually used in runtime.
- * <p>
- * <code>zone_id_table</code>, <code>raw_offset_index_table</code> and
- * <code>alias_table</code> are general information of supported
- * zones.
- *
- * <p><strong>2.1 <code>zone_id_table</code> structure</strong><p>
- * The list of zone IDs included in the zi database. The list does
- * <em>not</em> include zone IDs, if any, listed in excludedList.
- * <br>
- * <blockquote>
- * <pre>
- *    zone_id_table {
- *      u1      tag;              // 0x40 : constant
- *      u2      length;           // byte length of whole values
- *      u2      zone_id_count;
- *      zone_id value[zone_id_count];
- *    }
- *
- *    zone_id {
- *      u1      byte_length;      // byte length of id
- *      u1      id[byte_length];  // zone name string
- *    }
- * </pre>
- * </blockquote>
- *
- * <p><strong>2.2 <code>raw_offset_table</code> structure</strong><p>
- * <br>
- * <blockquote>
- * <pre>
- *    raw_offset_table {
- *      u1      tag;              // 0x41 : constant
- *      u2      length;           // byte length of whole values
- *      s4      value[length/4];  // raw GMT offset in milliseconds
- *   }
- * </pre>
- * </blockquote>
- *
- * <p><strong>2.3 <code>raw_offset_index_table</code> structure</strong><p>
- * <br>
- * <blockquote>
- * <pre>
- *    raw_offset_index_table {
- *      u1      tag;              // 0x42 : constant
- *      u2      length;           // byte length of whole values
- *      u1      value[length];
- *    }
- * </pre>
- * </blockquote>
- *
- * <p><strong>2.4 <code>alias_table</code> structure</strong><p>
- * <br>
- * <blockquote>
- * <pre>
- *   alias_table {
- *      u1      tag;              // 0x43 : constant
- *      u2      length;           // byte length of whole values
- *      u2      nentries;         // number of id-pairs
- *      id_pair value[nentries];
- *   }
- *
- *   id_pair {
- *      zone_id aliasname;
- *      zone_id ID;
- *   }
- * </pre>
- * </blockquote>
- *
- * <p><strong>2.5 <code>versionName</code> structure</strong><p>
- * <br>
- * <blockquote>
- * <pre>
- *   versionName {
- *      u1      tag;              // 0x44 : constant
- *      u2      length;           // byte length of whole values
- *      u1      value[length];
- *   }
- * </pre>
- * </blockquote>
- *
- * <p><strong>2.6 <code>excludeList</code> structure</strong><p>
- * The list of zone IDs whose zones will change their GMT offsets
- * (a.k.a. raw offsets) some time in the future. Those IDs must be
- * added to the list of zone IDs for getAvailableIDs(). Also they must
- * be examined for getAvailableIDs(int) to determine the
- * <em>current</em> GMT offsets.
- * <br>
- * <blockquote>
- * <pre>
- *   excluded_list {
- *      u1      tag;              // 0x45 : constant
- *      u2      length;           // byte length of whole values
- *      u2      nentries;         // number of zone_ids
- *      zone_id value[nentries];  // excluded zone IDs
- *   }
- * </pre>
- * </blockquote>
- *
- * @since 1.4
- */
-
-public class ZoneInfoFile {
-
-    /**
-     * The magic number for the ZoneInfo data file format.
-     */
-    public static final byte[]  JAVAZI_LABEL = {
-        (byte)'j', (byte)'a', (byte)'v', (byte)'a', (byte)'z', (byte)'i', (byte)'\0'
-    };
-    private static final int    JAVAZI_LABEL_LENGTH = JAVAZI_LABEL.length;
-
-    /**
-     * The ZoneInfo data file format version number. Must increase
-     * one when any incompatible change has been made.
-     */
-    public static final byte    JAVAZI_VERSION = 0x01;
-
-    /**
-     * Raw offset data item tag.
-     */
-    public static final byte    TAG_RawOffset = 1;
-
-    /**
-     * Known last Daylight Saving Time save value data item tag.
-     */
-    public static final byte    TAG_LastDSTSaving = 2;
-
-    /**
-     * Checksum data item tag.
-     */
-    public static final byte    TAG_CRC32 = 3;
-
-    /**
-     * Transition data item tag.
-     */
-    public static final byte    TAG_Transition = 4;
-
-    /**
-     * Offset table data item tag.
-     */
-    public static final byte    TAG_Offset = 5;
-
-    /**
-     * SimpleTimeZone parameters data item tag.
-     */
-    public static final byte    TAG_SimpleTimeZone = 6;
-
-    /**
-     * Raw GMT offset will change in the future.
-     */
-    public static final byte    TAG_GMTOffsetWillChange = 7;
-
-
-    /**
-     * The ZoneInfoMappings file name.
-     */
-    public static final String  JAVAZM_FILE_NAME = "ZoneInfoMappings";
-
-    /**
-     * The magic number for the ZoneInfoMappings file format.
-     */
-    public static final byte[]  JAVAZM_LABEL = {
-        (byte)'j', (byte)'a', (byte)'v', (byte)'a', (byte)'z', (byte)'m', (byte)'\0'
-    };
-    private static final int    JAVAZM_LABEL_LENGTH = JAVAZM_LABEL.length;
-
-    /**
-     * The ZoneInfoMappings file format version number. Must increase
-     * one when any incompatible change has been made.
-     */
-    public static final byte    JAVAZM_VERSION = 0x01;
-
-    /**
-     * Time zone IDs data item tag.
-     */
-    public static final byte    TAG_ZoneIDs = 64;
-
-    /**
-     * Raw GMT offsets table data item tag.
-     */
-    public static final byte    TAG_RawOffsets = 65;
-
-    /**
-     * Indices to the raw GMT offset table data item tag.
-     */
-    public static final byte    TAG_RawOffsetIndices = 66;
-
-    /**
-     * Time zone aliases table data item tag.
-     */
-    public static final byte    TAG_ZoneAliases = 67;
-
-    /**
-     * Olson's public zone information version tag.
-     */
-    public static final byte    TAG_TZDataVersion = 68;
-
-    /**
-     * Excluded zones item tag. (Added in Mustang)
-     */
-    public static final byte    TAG_ExcludedZones = 69;
-
-    private static Map<String, ZoneInfo> zoneInfoObjects = null;
-    private static final ZoneInfo GMT = new ZoneInfo("GMT", 0);
-
-    private static final String ziDir = AccessController.doPrivileged(
-        new PrivilegedAction<String>() {
-            public String run() {
-                String zi = System.getProperty("java.home") +
-                    File.separator + "lib" + File.separator + "zi";
-                try {
-                    zi = new File(zi).getCanonicalPath();
-                } catch(Exception e) {
-                }
-                return zi;
-            }
-        });
-
-    /**
-     * Converts the given time zone ID to a platform dependent path
-     * name. For example, "America/Los_Angeles" is converted to
-     * "America\Los_Angeles" on Win32.
-     * @return a modified ID replacing '/' with {@link
-     * java.io.File#separatorChar File.separatorChar} if needed.
-     */
-    public static String getFileName(String ID) {
-        if (File.separatorChar == '/') {
-            return ID;
-        }
-        return ID.replace('/', File.separatorChar);
-    }
-
-    /**
-     * Gets a ZoneInfo with the given GMT offset. The object
-     * has its ID in the format of GMT{+|-}hh:mm.
-     *
-     * @param originalId the given custom id (before normalized such as "GMT+9")
-     * @param gmtOffset GMT offset <em>in milliseconds</em>
-     * @return a ZoneInfo constructed with the given GMT offset
-     */
-    public static ZoneInfo getCustomTimeZone(String originalId, int gmtOffset) {
-        String id = toCustomID(gmtOffset);
-
-        ZoneInfo zi = getFromCache(id);
-        if (zi == null) {
-            zi = new ZoneInfo(id, gmtOffset);
-            zi = addToCache(id, zi);
-            if (!id.equals(originalId)) {
-                zi = addToCache(originalId, zi);
-            }
-        }
-        return (ZoneInfo) zi.clone();
-    }
-
-    public static String toCustomID(int gmtOffset) {
-        char sign;
-        int offset = gmtOffset / 60000;
-
-        if (offset >= 0) {
-            sign = '+';
-        } else {
-            sign = '-';
-            offset = -offset;
-        }
-        int hh = offset / 60;
-        int mm = offset % 60;
-
-        char[] buf = new char[] { 'G', 'M', 'T', sign, '0', '0', ':', '0', '0' };
-        if (hh >= 10) {
-            buf[4] += hh / 10;
-        }
-        buf[5] += hh % 10;
-        if (mm != 0) {
-            buf[7] += mm / 10;
-            buf[8] += mm % 10;
-        }
-        return new String(buf);
-    }
-
-    /**
-     * @return a ZoneInfo instance created for the specified id, or
-     * null if there is no time zone data file found for the specified
-     * id.
-     */
-    public static ZoneInfo getZoneInfo(String id) {
-        //treat GMT zone as special
-        if ("GMT".equals(id))
-            return (ZoneInfo) GMT.clone();
-        ZoneInfo zi = getFromCache(id);
-        if (zi == null) {
-            Map<String, String> aliases = ZoneInfo.getCachedAliasTable();
-            if (aliases != null && aliases.get(id) != null) {
-                return null;
-            }
-            zi = createZoneInfo(id);
-            if (zi == null) {
-                return null;
-            }
-            zi = addToCache(id, zi);
-        }
-        return (ZoneInfo) zi.clone();
-    }
-
-    synchronized static ZoneInfo getFromCache(String id) {
-        if (zoneInfoObjects == null) {
-            return null;
-        }
-        return zoneInfoObjects.get(id);
-    }
-
-    synchronized static ZoneInfo addToCache(String id, ZoneInfo zi) {
-        if (zoneInfoObjects == null) {
-            zoneInfoObjects = new HashMap<String, ZoneInfo>();
-        } else {
-            ZoneInfo zone = zoneInfoObjects.get(id);
-            if (zone != null) {
-                return zone;
-            }
-        }
-        zoneInfoObjects.put(id, zi);
-        return zi;
-    }
-
-    private static ZoneInfo createZoneInfo(String id) {
-        byte[] buf = readZoneInfoFile(getFileName(id));
-        if (buf == null) {
-            return null;
-        }
-
-        int index = 0;
-        int filesize = buf.length;
-        int rawOffset = 0;
-        int dstSavings = 0;
-        int checksum = 0;
-        boolean willGMTOffsetChange = false;
-        long[] transitions = null;
-        int[] offsets = null;
-        int[] simpleTimeZoneParams = null;
-
-        try {
-            for (index = 0; index < JAVAZI_LABEL.length; index++) {
-                if (buf[index] != JAVAZI_LABEL[index]) {
-                    System.err.println("ZoneInfo: wrong magic number: " + id);
-                    return null;
-                }
-            }
-            if (buf[index++] > JAVAZI_VERSION) {
-                System.err.println("ZoneInfo: incompatible version ("
-                                   + buf[index - 1] + "): " + id);
-                return null;
-            }
-
-            while (index < filesize) {
-                byte tag = buf[index++];
-                int  len = ((buf[index++] & 0xFF) << 8) + (buf[index++] & 0xFF);
-
-                if (filesize < index+len) {
-                    break;
-                }
-
-                switch (tag) {
-                case TAG_CRC32:
-                    {
-                        int val = buf[index++] & 0xff;
-                        val = (val << 8) + (buf[index++] & 0xff);
-                        val = (val << 8) + (buf[index++] & 0xff);
-                        val = (val << 8) + (buf[index++] & 0xff);
-                        checksum = val;
-                    }
-                    break;
-
-                case TAG_LastDSTSaving:
-                    {
-                        short val = (short)(buf[index++] & 0xff);
-                        val = (short)((val << 8) + (buf[index++] & 0xff));
-                        dstSavings = val * 1000;
-                    }
-                    break;
-
-                case TAG_RawOffset:
-                    {
-                        int val = buf[index++] & 0xff;
-                        val = (val << 8) + (buf[index++] & 0xff);
-                        val = (val << 8) + (buf[index++] & 0xff);
-                        val = (val << 8) + (buf[index++] & 0xff);
-                        rawOffset = val;
-                    }
-                    break;
-
-                case TAG_Transition:
-                    {
-                        int n = len / 8;
-                        transitions = new long[n];
-                        for (int i = 0; i < n; i ++) {
-                            long val = buf[index++] & 0xff;
-                            val = (val << 8) + (buf[index++] & 0xff);
-                            val = (val << 8) + (buf[index++] & 0xff);
-                            val = (val << 8) + (buf[index++] & 0xff);
-                            val = (val << 8) + (buf[index++] & 0xff);
-                            val = (val << 8) + (buf[index++] & 0xff);
-                            val = (val << 8) + (buf[index++] & 0xff);
-                            val = (val << 8) + (buf[index++] & 0xff);
-                            transitions[i] = val;
-                        }
-                    }
-                    break;
-
-                case TAG_Offset:
-                    {
-                        int n = len / 4;
-                        offsets = new int[n];
-                        for (int i = 0; i < n; i ++) {
-                            int val = buf[index++] & 0xff;
-                            val = (val << 8) + (buf[index++] & 0xff);
-                            val = (val << 8) + (buf[index++] & 0xff);
-                            val = (val << 8) + (buf[index++] & 0xff);
-                            offsets[i] = val;
-                        }
-                    }
-                    break;
-
-                case TAG_SimpleTimeZone:
-                    {
-                        if (len != 32 && len != 40) {
-                            System.err.println("ZoneInfo: wrong SimpleTimeZone parameter size");
-                            return null;
-                        }
-                        int n = len / 4;
-                        simpleTimeZoneParams = new int[n];
-                        for (int i = 0; i < n; i++) {
-                            int val = buf[index++] & 0xff;
-                            val = (val << 8) + (buf[index++] & 0xff);
-                            val = (val << 8) + (buf[index++] & 0xff);
-                            val = (val << 8) + (buf[index++] & 0xff);
-                            simpleTimeZoneParams[i] = val;
-                        }
-                    }
-                    break;
-
-                case TAG_GMTOffsetWillChange:
-                    {
-                        if (len != 1) {
-                            System.err.println("ZoneInfo: wrong byte length for TAG_GMTOffsetWillChange");
-                        }
-                        willGMTOffsetChange = buf[index++] == 1;
-                    }
-                    break;
-
-                default:
-                    System.err.println("ZoneInfo: unknown tag < " + tag + ">. ignored.");
-                    index += len;
-                    break;
-                }
-            }
-        } catch (Exception e) {
-            System.err.println("ZoneInfo: corrupted zoneinfo file: " + id);
-            return null;
-        }
-
-        if (index != filesize) {
-            System.err.println("ZoneInfo: wrong file size: " + id);
-            return null;
-        }
-
-        return new ZoneInfo(id, rawOffset, dstSavings, checksum,
-                            transitions, offsets, simpleTimeZoneParams,
-                            willGMTOffsetChange);
-    }
-
-    private volatile static SoftReference<List<String>> zoneIDs = null;
-
-    static List<String> getZoneIDs() {
-        List<String> ids = null;
-
-        SoftReference<List<String>> cache = zoneIDs;
-        if (cache != null) {
-            ids = cache.get();
-            if (ids != null) {
-                return ids;
-            }
-        }
-
-        byte[] buf = null;
-        buf = getZoneInfoMappings();
-        int index = JAVAZM_LABEL_LENGTH + 1;
-        int filesize = buf.length;
-
-        try {
-        loop:
-            while (index < filesize) {
-                byte tag = buf[index++];
-                int     len = ((buf[index++] & 0xFF) << 8) + (buf[index++] & 0xFF);
-
-                switch (tag) {
-                case TAG_ZoneIDs:
-                    {
-                        int n = (buf[index++] << 8) + (buf[index++] & 0xFF);
-                        ids = new ArrayList<String>(n);
-
-                        for (int i = 0; i < n; i++) {
-                            byte m = buf[index++];
-                            ids.add(new String(buf, index, m, "UTF-8"));
-                            index += m;
-                        }
-                    }
-                    break loop;
-
-                default:
-                    index += len;
-                    break;
-                }
-            }
-        } catch (Exception e) {
-            System.err.println("ZoneInfo: corrupted " + JAVAZM_FILE_NAME);
-        }
-
-        zoneIDs = new SoftReference<List<String>>(ids);
-        return ids;
-    }
-
-    /**
-     * @return an alias table in HashMap where a key is an alias ID
-     * (e.g., "PST") and its value is a real time zone ID (e.g.,
-     * "America/Los_Angeles").
-     */
-    static Map<String, String> getZoneAliases() {
-        byte[] buf = getZoneInfoMappings();
-        int index = JAVAZM_LABEL_LENGTH + 1;
-        int filesize = buf.length;
-        Map<String, String> aliases = null;
-
-        try {
-        loop:
-            while (index < filesize) {
-                byte tag = buf[index++];
-                int     len = ((buf[index++] & 0xFF) << 8) + (buf[index++] & 0xFF);
-
-                switch (tag) {
-                case TAG_ZoneAliases:
-                    {
-                        int n = (buf[index++] << 8) + (buf[index++] & 0xFF);
-                        aliases = new HashMap<String, String>(n);
-                        for (int i = 0; i < n; i++) {
-                            byte m = buf[index++];
-                            String name = new String(buf, index, m, "UTF-8");
-                            index += m;
-                            m = buf[index++];
-                            String realName = new String(buf, index, m, "UTF-8");
-                            index += m;
-                            aliases.put(name, realName);
-                        }
-                    }
-                    break loop;
-
-                default:
-                    index += len;
-                    break;
-                }
-            }
-        } catch (Exception e) {
-            System.err.println("ZoneInfo: corrupted " + JAVAZM_FILE_NAME);
-            return null;
-        }
-        return aliases;
-    }
-
-    private volatile static SoftReference<List<String>> excludedIDs = null;
-    private volatile static boolean hasNoExcludeList = false;
-
-    /**
-     * @return a List of zone IDs for zones that will change their GMT
-     * offsets in some future time.
-     *
-     * @since 1.6
-     */
-    static List<String> getExcludedZones() {
-        if (hasNoExcludeList) {
-            return null;
-        }
-
-        List<String> excludeList = null;
-
-        SoftReference<List<String>> cache = excludedIDs;
-        if (cache != null) {
-            excludeList = cache.get();
-            if (excludeList != null) {
-                return excludeList;
-            }
-        }
-
-        byte[] buf = getZoneInfoMappings();
-        int index = JAVAZM_LABEL_LENGTH + 1;
-        int filesize = buf.length;
-
-        try {
-          loop:
-            while (index < filesize) {
-                byte tag = buf[index++];
-                int     len = ((buf[index++] & 0xFF) << 8) + (buf[index++] & 0xFF);
-
-                switch (tag) {
-                case TAG_ExcludedZones:
-                    {
-                        int n = (buf[index++] << 8) + (buf[index++] & 0xFF);
-                        excludeList = new ArrayList<String>();
-                        for (int i = 0; i < n; i++) {
-                            byte m = buf[index++];
-                            String name = new String(buf, index, m, "UTF-8");
-                            index += m;
-                            excludeList.add(name);
-                        }
-                    }
-                    break loop;
-
-                default:
-                    index += len;
-                    break;
-                }
-            }
-        } catch (Exception e) {
-            System.err.println("ZoneInfo: corrupted " + JAVAZM_FILE_NAME);
-            return null;
-        }
-
-        if (excludeList != null) {
-            excludedIDs = new SoftReference<List<String>>(excludeList);
-        } else {
-            hasNoExcludeList = true;
-        }
-        return excludeList;
-    }
-
-    private volatile static SoftReference<byte[]> rawOffsetIndices = null;
-
-    static byte[] getRawOffsetIndices() {
-        byte[] indices = null;
-
-        SoftReference<byte[]> cache = rawOffsetIndices;
-        if (cache != null) {
-            indices = cache.get();
-            if (indices != null) {
-                return indices;
-            }
-        }
-
-        byte[] buf = getZoneInfoMappings();
-        int index = JAVAZM_LABEL_LENGTH + 1;
-        int filesize = buf.length;
-
-        try {
-        loop:
-            while (index < filesize) {
-                byte tag = buf[index++];
-                int     len = ((buf[index++] & 0xFF) << 8) + (buf[index++] & 0xFF);
-
-                switch (tag) {
-                case TAG_RawOffsetIndices:
-                    {
-                        indices = new byte[len];
-                        for (int i = 0; i < len; i++) {
-                            indices[i] = buf[index++];
-                        }
-                    }
-                    break loop;
-
-                default:
-                    index += len;
-                    break;
-                }
-            }
-        } catch (ArrayIndexOutOfBoundsException e) {
-            System.err.println("ZoneInfo: corrupted " + JAVAZM_FILE_NAME);
-        }
-
-        rawOffsetIndices = new SoftReference<byte[]>(indices);
-        return indices;
-    }
-
-    private volatile static SoftReference<int[]> rawOffsets = null;
-
-    static int[] getRawOffsets() {
-        int[] offsets = null;
-
-        SoftReference<int[]> cache = rawOffsets;
-        if (cache != null) {
-            offsets = cache.get();
-            if (offsets != null) {
-                return offsets;
-            }
-        }
-
-        byte[] buf = getZoneInfoMappings();
-        int index = JAVAZM_LABEL_LENGTH + 1;
-        int filesize = buf.length;
-
-        try {
-        loop:
-            while (index < filesize) {
-                byte tag = buf[index++];
-                int     len = ((buf[index++] & 0xFF) << 8) + (buf[index++] & 0xFF);
-
-                switch (tag) {
-                case TAG_RawOffsets:
-                    {
-                        int n = len/4;
-                        offsets = new int[n];
-                        for (int i = 0; i < n; i++) {
-                            int val = buf[index++] & 0xff;
-                            val = (val << 8) + (buf[index++] & 0xff);
-                            val = (val << 8) + (buf[index++] & 0xff);
-                            val = (val << 8) + (buf[index++] & 0xff);
-                            offsets[i] = val;
-                        }
-                    }
-                    break loop;
-
-                default:
-                    index += len;
-                    break;
-                }
-            }
-        } catch (ArrayIndexOutOfBoundsException e) {
-            System.err.println("ZoneInfo: corrupted " + JAVAZM_FILE_NAME);
-        }
-
-        rawOffsets = new SoftReference<int[]>(offsets);
-        return offsets;
-    }
-
-    private volatile static SoftReference<byte[]> zoneInfoMappings = null;
-
-    private static byte[] getZoneInfoMappings() {
-        byte[] data;
-
-        SoftReference<byte[]> cache = zoneInfoMappings;
-        if (cache != null) {
-            data = cache.get();
-            if (data != null) {
-                return data;
-            }
-        }
-
-        data = readZoneInfoFile(JAVAZM_FILE_NAME);
-
-        if (data == null) {
-            return null;
-        }
-
-        int index;
-        for (index = 0; index < JAVAZM_LABEL.length; index++) {
-            if (data[index] != JAVAZM_LABEL[index]) {
-                System.err.println("ZoneInfo: wrong magic number: " + JAVAZM_FILE_NAME);
-                return null;
-            }
-        }
-        if (data[index++] > JAVAZM_VERSION) {
-            System.err.println("ZoneInfo: incompatible version ("
-                               + data[index - 1] + "): " + JAVAZM_FILE_NAME);
-            return null;
-        }
-
-        zoneInfoMappings = new SoftReference<byte[]>(data);
-        return data;
-    }
-
-    /**
-     * Reads the specified file under &lt;java.home&gt;/lib/zi into a buffer.
-     * @return the buffer, or null if any I/O error occurred.
-     */
-    private static byte[] readZoneInfoFile(final String fileName) {
-        if (fileName.indexOf("..") >= 0) {
-            return null;
-        }
-        byte[] buffer = null;
-
-        try {
-            buffer = (byte[]) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-                public Object run() throws IOException {
-                    File file = new File(ziDir, fileName);
-                    byte[] buf = null;
-                    int filesize = (int)file.length();
-                    if (filesize > 0) {
-                        FileInputStream fis = new FileInputStream(file);
-                        buf = new byte[filesize];
-                        try {
-                            if (fis.read(buf) != filesize) {
-                                throw new IOException("read error on " + fileName);
-                            }
-                        } finally {
-                            fis.close();
-                        }
-                    }
-                    return buf;
-                }
-            });
-        } catch (PrivilegedActionException e) {
-            Exception ex = e.getException();
-            if (!(ex instanceof FileNotFoundException) || JAVAZM_FILE_NAME.equals(fileName)) {
-                System.err.println("ZoneInfo: " + ex.getMessage());
-            }
-        }
-        return buffer;
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/locale/AsciiUtil.java b/ojluni/src/main/java/sun/util/locale/AsciiUtil.java
deleted file mode 100755
index b122292..0000000
--- a/ojluni/src/main/java/sun/util/locale/AsciiUtil.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Copyright (c) 2010, 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.
- */
-
-/*
- *******************************************************************************
- * Copyright (C) 2009, International Business Machines Corporation and         *
- * others. All Rights Reserved.                                                *
- *******************************************************************************
- */
-package sun.util.locale;
-
-public final class AsciiUtil {
-    public static boolean caseIgnoreMatch(String s1, String s2) {
-        if (s1 == s2) {
-            return true;
-        }
-        int len = s1.length();
-        if (len != s2.length()) {
-            return false;
-        }
-        int i = 0;
-        while (i < len) {
-            char c1 = s1.charAt(i);
-            char c2 = s2.charAt(i);
-            if (c1 != c2 && toLower(c1) != toLower(c2)) {
-                break;
-            }
-            i++;
-        }
-        return (i == len);
-    }
-
-    public static int caseIgnoreCompare(String s1, String s2) {
-        if (s1 == s2) {
-            return 0;
-        }
-        return AsciiUtil.toLowerString(s1).compareTo(AsciiUtil.toLowerString(s2));
-    }
-
-
-    public static char toUpper(char c) {
-        if (c >= 'a' && c <= 'z') {
-            c -= 0x20;
-        }
-        return c;
-    }
-
-    public static char toLower(char c) {
-        if (c >= 'A' && c <= 'Z') {
-            c += 0x20;
-        }
-        return c;
-    }
-
-    public static String toLowerString(String s) {
-        int idx = 0;
-        for (; idx < s.length(); idx++) {
-            char c = s.charAt(idx);
-            if (c >= 'A' && c <= 'Z') {
-                break;
-            }
-        }
-        if (idx == s.length()) {
-            return s;
-        }
-        StringBuilder buf = new StringBuilder(s.substring(0, idx));
-        for (; idx < s.length(); idx++) {
-            buf.append(toLower(s.charAt(idx)));
-        }
-        return buf.toString();
-    }
-
-    public static String toUpperString(String s) {
-        int idx = 0;
-        for (; idx < s.length(); idx++) {
-            char c = s.charAt(idx);
-            if (c >= 'a' && c <= 'z') {
-                break;
-            }
-        }
-        if (idx == s.length()) {
-            return s;
-        }
-        StringBuilder buf = new StringBuilder(s.substring(0, idx));
-        for (; idx < s.length(); idx++) {
-            buf.append(toUpper(s.charAt(idx)));
-        }
-        return buf.toString();
-    }
-
-    public static String toTitleString(String s) {
-        if (s.length() == 0) {
-            return s;
-        }
-        int idx = 0;
-        char c = s.charAt(idx);
-        if (!(c >= 'a' && c <= 'z')) {
-            for (idx = 1; idx < s.length(); idx++) {
-                if (c >= 'A' && c <= 'Z') {
-                    break;
-                }
-            }
-        }
-        if (idx == s.length()) {
-            return s;
-        }
-        StringBuilder buf = new StringBuilder(s.substring(0, idx));
-        if (idx == 0) {
-            buf.append(toUpper(s.charAt(idx)));
-            idx++;
-        }
-        for (; idx < s.length(); idx++) {
-            buf.append(toLower(s.charAt(idx)));
-        }
-        return buf.toString();
-    }
-
-    public static boolean isAlpha(char c) {
-        return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
-    }
-
-    public static boolean isAlphaString(String s) {
-        boolean b = true;
-        for (int i = 0; i < s.length(); i++) {
-            if (!isAlpha(s.charAt(i))) {
-                b = false;
-                break;
-            }
-        }
-        return b;
-    }
-
-    public static boolean isNumeric(char c) {
-        return (c >= '0' && c <= '9');
-    }
-
-    public static boolean isNumericString(String s) {
-        boolean b = true;
-        for (int i = 0; i < s.length(); i++) {
-            if (!isNumeric(s.charAt(i))) {
-                b = false;
-                break;
-            }
-        }
-        return b;
-    }
-
-    public static boolean isAlphaNumeric(char c) {
-        return isAlpha(c) || isNumeric(c);
-    }
-
-    public static boolean isAlphaNumericString(String s) {
-        boolean b = true;
-        for (int i = 0; i < s.length(); i++) {
-            if (!isAlphaNumeric(s.charAt(i))) {
-                b = false;
-                break;
-            }
-        }
-        return b;
-    }
-
-    public static class CaseInsensitiveKey {
-        private String _key;
-        private int _hash;
-
-        public CaseInsensitiveKey(String key) {
-            _key = key;
-            _hash = AsciiUtil.toLowerString(key).hashCode();
-        }
-
-        public boolean equals(Object o) {
-            if (this == o) {
-                return true;
-            }
-            if (o instanceof CaseInsensitiveKey) {
-                return AsciiUtil.caseIgnoreMatch(_key, ((CaseInsensitiveKey)o)._key);
-            }
-            return false;
-        }
-
-        public int hashCode() {
-            return _hash;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/CurrencyNames_zh_HK.java b/ojluni/src/main/java/sun/util/resources/CurrencyNames_zh_HK.java
deleted file mode 100755
index 924c4f6..0000000
--- a/ojluni/src/main/java/sun/util/resources/CurrencyNames_zh_HK.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, 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.
- */
-
-/*
- * Derived from Common Locale Data Repository data.
- * COPYRIGHT AND PERMISSION NOTICE
- *
- * Copyright (C) 1991-2005 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-public final class CurrencyNames_zh_HK extends OpenListResourceBundle {
-
-    // reparent to zh_TW for traditional Chinese names
-    public CurrencyNames_zh_HK() {
-        ResourceBundle bundle = LocaleData.getCurrencyNames(Locale.TAIWAN);
-        setParent(bundle);
-    }
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            {"HKD", "HK$"},
-            {"TWD", "TWD"},
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/CurrencyNames_zh_SG.java b/ojluni/src/main/java/sun/util/resources/CurrencyNames_zh_SG.java
deleted file mode 100755
index 290788d..0000000
--- a/ojluni/src/main/java/sun/util/resources/CurrencyNames_zh_SG.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2007, 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.
- */
-
-package sun.util.resources;
-
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-public final class CurrencyNames_zh_SG extends OpenListResourceBundle {
-
-    // reparent to zh_CN for simplified Chinese names
-    public CurrencyNames_zh_SG() {
-        ResourceBundle bundle = LocaleData.getCurrencyNames(Locale.CHINA);
-        setParent(bundle);
-    }
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            {"CNY", "CNY"},
-            {"SGD", "S$"},
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/LocaleData.java b/ojluni/src/main/java/sun/util/resources/LocaleData.java
deleted file mode 100755
index ac8fdd2..0000000
--- a/ojluni/src/main/java/sun/util/resources/LocaleData.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Copyright (c) 1996, 2011, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-import java.io.File;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.ResourceBundle;
-import java.util.StringTokenizer;
-
-import sun.util.LocaleDataMetaInfo;
-
-/**
- * Provides information about and access to resource bundles in the
- * sun.text.resources and sun.util.resources package.
- *
- * @author Asmus Freytag
- * @author Mark Davis
- */
-
-public class LocaleData {
-
-    private static final String localeDataJarName = "localedata.jar";
-
-    /**
-     * Lazy load available locales.
-     */
-    private static class AvailableLocales {
-         static final Locale[] localeList = createLocaleList();
-    }
-
-    /**
-     * Returns a list of the installed locales. Currently, this simply returns
-     * the list of locales for which a sun.text.resources.FormatData bundle
-     * exists. This bundle family happens to be the one with the broadest
-     * locale coverage in the JRE.
-     */
-    public static Locale[] getAvailableLocales() {
-        return AvailableLocales.localeList.clone();
-    }
-
-    /**
-     * Gets a calendar data resource bundle, using privileges
-     * to allow accessing a sun.* package.
-     */
-    public static ResourceBundle getCalendarData(Locale locale) {
-        return getBundle("sun.util.resources.CalendarData", locale);
-    }
-
-    /**
-     * Gets a currency names resource bundle, using privileges
-     * to allow accessing a sun.* package.
-     */
-    public static OpenListResourceBundle getCurrencyNames(Locale locale) {
-        return (OpenListResourceBundle)getBundle("sun.util.resources.CurrencyNames", locale);
-    }
-
-    /**
-     * Gets a locale names resource bundle, using privileges
-     * to allow accessing a sun.* package.
-     */
-    public static OpenListResourceBundle getLocaleNames(Locale locale) {
-        return (OpenListResourceBundle)getBundle("sun.util.resources.LocaleNames", locale);
-    }
-
-    /**
-     * Gets a time zone names resource bundle, using privileges
-     * to allow accessing a sun.* package.
-     */
-    public static OpenListResourceBundle getTimeZoneNames(Locale locale) {
-        return (OpenListResourceBundle)getBundle("sun.util.resources.TimeZoneNames", locale);
-    }
-
-    /**
-     * Gets a collation data resource bundle, using privileges
-     * to allow accessing a sun.* package.
-     */
-    public static ResourceBundle getCollationData(Locale locale) {
-        return getBundle("sun.text.resources.CollationData", locale);
-    }
-
-    /**
-     * Gets a date format data resource bundle, using privileges
-     * to allow accessing a sun.* package.
-     */
-    public static ResourceBundle getDateFormatData(Locale locale) {
-        return getBundle("sun.text.resources.FormatData", locale);
-    }
-
-    /**
-     * Gets a number format data resource bundle, using privileges
-     * to allow accessing a sun.* package.
-     */
-    public static ResourceBundle getNumberFormatData(Locale locale) {
-        return getBundle("sun.text.resources.FormatData", locale);
-    }
-
-    private static ResourceBundle getBundle(final String baseName, final Locale locale) {
-        return AccessController.doPrivileged(new PrivilegedAction<ResourceBundle>() {
-                public ResourceBundle run() {
-                    return ResourceBundle.
-                        getBundle(baseName, locale,
-                                  LocaleDataResourceBundleControl.getRBControlInstance());
-                }
-            });
-    }
-
-    static class LocaleDataResourceBundleControl extends ResourceBundle.Control {
-        /* Singlton instance of ResourceBundle.Control. */
-        private static LocaleDataResourceBundleControl rbControlInstance =
-            new LocaleDataResourceBundleControl();
-
-        public static LocaleDataResourceBundleControl getRBControlInstance() {
-            return rbControlInstance;
-        }
-
-        /*
-         * This method overrides the default implementation to search
-         * from a prebaked locale string list to determin the candidate
-         * locale list.
-         *
-         * @param baseName the resource bundle base name.
-         *        locale   the requested locale for the resource bundle.
-         * @returns a list of candidate locales to search from.
-         * @exception NullPointerException if baseName or locale is null.
-         */
-        @Override
-         public List<Locale> getCandidateLocales(String baseName, Locale locale) {
-            List<Locale> candidates = super.getCandidateLocales(baseName, locale);
-            /* Get the locale string list from LocaleDataMetaInfo class. */
-            String localeString = LocaleDataMetaInfo.getSupportedLocaleString(baseName);
-
-      if (localeString.length() == 0) {
-                return candidates;
-            }
-
-            for (Iterator<Locale> l = candidates.iterator(); l.hasNext(); ) {
-                Locale loc = l.next();
-                String lstr = null;
-                if (loc.getScript().length() > 0) {
-                    lstr = loc.toLanguageTag().replace('-', '_');
-                } else {
-                    lstr = loc.toString();
-                    int idx = lstr.indexOf("_#");
-                    if (idx >= 0) {
-                        lstr = lstr.substring(0, idx);
-                    }
-                }
-                /* Every locale string in the locale string list returned from
-                   the above getSupportedLocaleString is enclosed
-                   within two white spaces so that we could check some locale
-                   such as "en".
-                */
-                if (lstr.length() != 0 && localeString.indexOf(" " + lstr + " ") == -1) {
-                    l.remove();
-                }
-            }
-            return candidates;
-        }
-
-        /*
-         * Overrides "getFallbackLocale" to return null so
-         * that the fallback locale will be null.
-         * @param baseName the resource bundle base name.
-         *        locale   the requested locale for the resource bundle.
-         * @return null for the fallback locale.
-         * @exception NullPointerException if baseName or locale is null.
-         */
-        @Override
-        public Locale getFallbackLocale(String baseName, Locale locale) {
-            if (baseName == null || locale == null) {
-                throw new NullPointerException();
-            }
-            return null;
-        }
-    }
-
-    /*
-     * Returns true if the non European resources jar file exists in jre
-     * extension directory.
-     * @returns true if the jar file is there. Otherwise, returns false.
-     */
-    private static boolean isNonEuroLangSupported() {
-        final String sep = File.separator;
-        String localeDataJar =
-            java.security.AccessController.doPrivileged(
-             new sun.security.action.GetPropertyAction("java.home")) +
-            sep + "lib" + sep + "ext" + sep + localeDataJarName;
-
-        /* Peek at the installed extension directory to see if
-           localedata.jar is installed or not.
-        */
-        final File f = new File(localeDataJar);
-        boolean isNonEuroResJarExist =
-            AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
-                    public Boolean run() {
-                        return Boolean.valueOf(f.exists());
-                    }
-                }).booleanValue();
-
-        return isNonEuroResJarExist;
-    }
-
-    /*
-     * This method gets the locale string list from LocaleDataMetaInfo class and
-     * then contructs the Locale array based on the locale string returned above.
-     * @returns the Locale array for the supported locale of JRE.
-     *
-     */
-    private static Locale[] createLocaleList() {
-        String supportedLocaleString = LocaleDataMetaInfo.
-            getSupportedLocaleString("sun.text.resources.FormatData");
-
-        if (supportedLocaleString.length() == 0) {
-            return null;
-        }
-
-        /* Look for "|" and construct a new locale string list. */
-        int barIndex = supportedLocaleString.indexOf("|");
-        StringTokenizer localeStringTokenizer = null;
-        if (isNonEuroLangSupported()) {
-            localeStringTokenizer = new
-                StringTokenizer(supportedLocaleString.substring(0, barIndex) +
-                                supportedLocaleString.substring(barIndex + 1));
-        } else {
-            localeStringTokenizer = new
-                StringTokenizer(supportedLocaleString.substring(0, barIndex));
-        }
-
-        Locale[] locales = new Locale[localeStringTokenizer.countTokens()];
-        for (int i = 0; i < locales.length; i++) {
-            String currentToken = localeStringTokenizer.nextToken().replace('_','-');
-            if (currentToken.equals("ja-JP-JP")) {
-                currentToken = "ja-JP-u-ca-japanese-x-lvariant-JP";
-            } else if (currentToken.equals("th-TH-TH")) {
-                currentToken = "th-TH-u-nu-thai-x-lvariant-TH";
-            } else if (currentToken.equals("no-NO-NY")) {
-                currentToken = "no-NO-x-lvariant-NY";
-            }
-            locales[i] = Locale.forLanguageTag(currentToken);
-        }
-        return locales;
-    }
-
-}
diff --git a/ojluni/src/main/java/sun/util/resources/LocaleNamesBundle.java b/ojluni/src/main/java/sun/util/resources/LocaleNamesBundle.java
deleted file mode 100755
index a58af3c..0000000
--- a/ojluni/src/main/java/sun/util/resources/LocaleNamesBundle.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.util.resources;
-
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-/**
- * Implements ResourceBundle for LocaleNames bundles that don't provide
- * the complete set of locale names.
- */
-public abstract class LocaleNamesBundle extends OpenListResourceBundle {
-
-    protected LocaleNamesBundle() {
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/LocaleNames_zh_HK.java b/ojluni/src/main/java/sun/util/resources/LocaleNames_zh_HK.java
deleted file mode 100755
index e63f98c..0000000
--- a/ojluni/src/main/java/sun/util/resources/LocaleNames_zh_HK.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2005, 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.
- */
-
-package sun.util.resources;
-
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-public final class LocaleNames_zh_HK extends OpenListResourceBundle {
-
-    // reparent to zh_TW for traditional Chinese names
-    public LocaleNames_zh_HK() {
-        ResourceBundle bundle = LocaleData.getLocaleNames(Locale.TAIWAN);
-        setParent(bundle);
-    }
-
-    protected final Object[][] getContents() {
-        return new Object[][] {};
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames.java
deleted file mode 100755
index a29ea68..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames.java
+++ /dev/null
@@ -1,876 +0,0 @@
-/*
- * Copyright (c) 1996, 2011, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-public final class TimeZoneNames extends TimeZoneNamesBundle {
-
-    protected final Object[][] getContents() {
-        String ACT[] = new String[] {"Acre Time", "ACT",
-                                     "Acre Summer Time", "ACST"};
-        String ADELAIDE[] = new String[] {"Central Standard Time (South Australia)", "CST",
-                                          "Central Summer Time (South Australia)", "CST"};
-        String AGT[] = new String[] {"Argentine Time", "ART",
-                                     "Argentine Summer Time", "ARST"};
-        String AKST[] = new String[] {"Alaska Standard Time", "AKST",
-                                      "Alaska Daylight Time", "AKDT"};
-        String AMT[] = new String[] {"Amazon Time", "AMT",
-                                     "Amazon Summer Time", "AMST"};
-        String ARAST[] = new String[] {"Arabia Standard Time", "AST",
-                                       "Arabia Daylight Time", "ADT"};
-        String ARMT[] = new String[] {"Armenia Time", "AMT",
-                                      "Armenia Summer Time", "AMST"};
-        String AST[] = new String[] {"Atlantic Standard Time", "AST",
-                                     "Atlantic Daylight Time", "ADT"};
-        String BDT[] = new String[] {"Bangladesh Time", "BDT",
-                                     "Bangladesh Summer Time", "BDST"};
-        String BRISBANE[] = new String[] {"Eastern Standard Time (Queensland)", "EST",
-                                          "Eastern Summer Time (Queensland)", "EST"};
-        String BROKEN_HILL[] = new String[] {"Central Standard Time (South Australia/New South Wales)", "CST",
-                                             "Central Summer Time (South Australia/New South Wales)", "CST"};
-        String BRT[] = new String[] {"Brasilia Time", "BRT",
-                                     "Brasilia Summer Time", "BRST"};
-        String BTT[] = new String[] {"Bhutan Time", "BTT",
-                                     "Bhutan Summer Time", "BTST"};
-        String CAT[] = new String[] {"Central African Time", "CAT",
-                                     "Central African Summer Time", "CAST"};
-        String CET[] = new String[] {"Central European Time", "CET",
-                                     "Central European Summer Time", "CEST"};
-        String CHAST[] = new String[] {"Chatham Standard Time", "CHAST",
-                                       "Chatham Daylight Time", "CHADT"};
-        String ChST[] = new String[] {"Chamorro Standard Time", "ChST",
-                                      "Chamorro Daylight Time", "ChDT"};
-        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
-                                      "Chuuk Summer Time", "CHUST"};
-        String CIT[] = new String[] {"Central Indonesia Time", "CIT",
-                                     "Central Indonesia Summer Time", "CIST"};
-        String CLT[] = new String[] {"Chile Time", "CLT",
-                                     "Chile Summer Time", "CLST"};
-        String CST[] = new String[] {"Central Standard Time", "CST",
-                                     "Central Daylight Time", "CDT"};
-        String CTT[] = new String[] {"China Standard Time", "CST",
-                                     "China Daylight Time", "CDT"};
-        String CUBA[] = new String[] {"Cuba Standard Time", "CST",
-                                      "Cuba Daylight Time", "CDT"};
-        String DARWIN[] = new String[] {"Central Standard Time (Northern Territory)", "CST",
-                                        "Central Summer Time (Northern Territory)", "CST"};
-        String DUBLIN[] = new String[] {"Greenwich Mean Time", "GMT",
-                                        "Irish Summer Time", "IST"};
-        String EAT[] = new String[] {"Eastern African Time", "EAT",
-                                     "Eastern African Summer Time", "EAST"};
-        String EASTER[] = new String[] {"Easter Is. Time", "EAST",
-                                        "Easter Is. Summer Time", "EASST"};
-        String EET[] = new String[] {"Eastern European Time", "EET",
-                                     "Eastern European Summer Time", "EEST"};
-        String EGT[] = new String[] {"Eastern Greenland Time", "EGT",
-                                     "Eastern Greenland Summer Time", "EGST"};
-        String EST[] = new String[] {"Eastern Standard Time", "EST",
-                                     "Eastern Daylight Time", "EDT"};
-        String EST_NSW[] = new String[] {"Eastern Standard Time (New South Wales)", "EST",
-                                         "Eastern Summer Time (New South Wales)", "EST"};
-        String FET[] = new String[] {"Further-eastern European Time", "FET",
-                                     "Further-eastern European Summer Time", "FEST"};
-        String GHMT[] = new String[] {"Ghana Mean Time", "GMT",
-                                     "Ghana Summer Time", "GHST"};
-        String GAMBIER[] =  new String[] {"Gambier Time", "GAMT",
-                                          "Gambier Summer Time", "GAMST"};
-        String GMT[] = new String[] {"Greenwich Mean Time", "GMT",
-                                     "Greenwich Mean Time", "GMT"};
-        String GMTBST[] = new String[] {"Greenwich Mean Time", "GMT",
-                                        "British Summer Time", "BST"};
-        String GST[] = new String[] {"Gulf Standard Time", "GST",
-                                     "Gulf Daylight Time", "GDT"};
-        String HAST[] = new String[] {"Hawaii-Aleutian Standard Time", "HAST",
-                                      "Hawaii-Aleutian Daylight Time", "HADT"};
-        String HKT[] =  new String[] {"Hong Kong Time", "HKT",
-                                      "Hong Kong Summer Time", "HKST"};
-        String HST[] = new String[] {"Hawaii Standard Time", "HST",
-                                     "Hawaii Daylight Time", "HDT"};
-        String ICT[] = new String[] {"Indochina Time", "ICT",
-                                     "Indochina Summer Time", "ICST"};
-        String IRT[] = new String[] {"Iran Standard Time", "IRST",
-                                     "Iran Daylight Time", "IRDT"};
-        String ISRAEL[] = new String[] {"Israel Standard Time", "IST",
-                                        "Israel Daylight Time", "IDT"};
-        String IST[] = new String[] {"India Standard Time", "IST",
-                                     "India Daylight Time", "IDT"};
-        String JST[] = new String[] {"Japan Standard Time", "JST",
-                                     "Japan Daylight Time", "JDT"};
-        String KST[] = new String[] {"Korea Standard Time", "KST",
-                                     "Korea Daylight Time", "KDT"};
-        String LORD_HOWE[] = new String[] {"Lord Howe Standard Time", "LHST",
-                                           "Lord Howe Summer Time", "LHST"};
-        String MHT[] = new String[] {"Marshall Islands Time", "MHT",
-                                     "Marshall Islands Summer Time", "MHST"};
-        String MSK[] = new String[] {"Moscow Standard Time", "MSK",
-                                     "Moscow Daylight Time", "MSD"};
-        String MST[] = new String[] {"Mountain Standard Time", "MST",
-                                     "Mountain Daylight Time", "MDT"};
-        String MYT[] = new String[] {"Malaysia Time", "MYT",
-                                     "Malaysia Summer Time", "MYST"};
-        String NORONHA[] = new String[] {"Fernando de Noronha Time", "FNT",
-                                         "Fernando de Noronha Summer Time", "FNST"};
-        String NOVT[] = new String[] {"Novosibirsk Time", "NOVT",
-                                      "Novosibirsk Summer Time", "NOVST"};
-        String NPT[] = new String[] {"Nepal Time", "NPT",
-                                     "Nepal Summer Time", "NPST"};
-        String NST[] = new String[] {"Newfoundland Standard Time", "NST",
-                                     "Newfoundland Daylight Time", "NDT"};
-        String NZST[] = new String[] {"New Zealand Standard Time", "NZST",
-                                      "New Zealand Daylight Time", "NZDT"};
-        String PITCAIRN[] = new String[] {"Pitcairn Standard Time", "PST",
-                                          "Pitcairn Daylight Time", "PDT"};
-        String PKT[] = new String[] {"Pakistan Time", "PKT",
-                                     "Pakistan Summer Time", "PKST"};
-        String PONT[] = new String[] {"Pohnpei Time", "PONT",
-                                      "Pohnpei Summer Time", "PONST"};
-        String PST[] = new String[] {"Pacific Standard Time", "PST",
-                                     "Pacific Daylight Time", "PDT"};
-        String SAMOA[] = new String[] {"Samoa Standard Time", "SST",
-                                       "Samoa Daylight Time", "SDT"};
-        String SAST[] = new String[] {"South Africa Standard Time", "SAST",
-                                      "South Africa Summer Time", "SAST"};
-        String SBT[] = new String[] {"Solomon Is. Time", "SBT",
-                                     "Solomon Is. Summer Time", "SBST"};
-        String SGT[] = new String[] {"Singapore Time", "SGT",
-                                     "Singapore Summer Time", "SGST"};
-        String SLST[] = new String[] {"Greenwich Mean Time", "GMT",
-                                      "Sierra Leone Summer Time", "SLST"};
-        String TASMANIA[] = new String[] {"Eastern Standard Time (Tasmania)", "EST",
-                                          "Eastern Summer Time (Tasmania)", "EST"};
-        String TMT[] = new String[] {"Turkmenistan Time", "TMT",
-                                     "Turkmenistan Summer Time", "TMST"};
-        String ULAT[]= new String[] {"Ulaanbaatar Time", "ULAT",
-                                     "Ulaanbaatar Summer Time", "ULAST"};
-        String UTC[] = new String[] {"Coordinated Universal Time", "UTC",
-                                     "Coordinated Universal Time", "UTC"};
-        String UZT[] = new String[] {"Uzbekistan Time", "UZT",
-                                     "Uzbekistan Summer Time", "UZST"};
-        String VICTORIA[] = new String[] {"Eastern Standard Time (Victoria)", "EST",
-                                          "Eastern Summer Time (Victoria)", "EST"};
-        String VLAT[] = new String[] {"Vladivostok Time", "VLAT",
-                                      "Vladivostok Summer Time", "VLAST"};
-        String WART[] = new String[] {"Western Argentine Time", "WART",
-                                      "Western Argentine Summer Time", "WARST"};
-        String WAT[] = new String[] {"Western African Time", "WAT",
-                                     "Western African Summer Time", "WAST"};
-        String WET[] = new String[] {"Western European Time", "WET",
-                                     "Western European Summer Time", "WEST"};
-        String WIT[] = new String[] {"West Indonesia Time", "WIT",
-                                     "West Indonesia Summer Time", "WIST"};
-        String WST_AUS[] = new String[] {"Western Standard Time (Australia)", "WST",
-                                         "Western Summer Time (Australia)", "WST"};
-        String WST_SAMOA[] = new String[] {"West Samoa Time", "WST",
-                                           "West Samoa Daylight Time", "WSDT"};
-        String YAKT[] = new String[] {"Yakutsk Time", "YAKT",
-                                      "Yakutsk Summer Time", "YAKST"};
-
-        return new Object[][] {
-            {"America/Los_Angeles", PST},
-            {"PST", PST},
-            {"America/Denver", MST},
-            {"MST", MST},
-            {"America/Phoenix", MST},
-            {"PNT", MST},
-            {"America/Chicago", CST},
-            {"CST", CST},
-            {"America/New_York", EST},
-            {"EST", EST},
-            {"America/Indianapolis", EST},
-            {"IET", EST},
-            {"Pacific/Honolulu", HST},
-            {"HST", HST},
-            {"America/Anchorage", AKST},
-            {"AST", AKST},
-            {"America/Halifax", AST},
-            {"America/Sitka", AKST},
-            {"America/St_Johns", NST},
-            {"CNT", NST},
-            {"Europe/Paris", CET},
-            {"ECT", CET},
-            {"GMT", GMT},
-            {"Africa/Casablanca", WET},
-            {"Asia/Jerusalem", ISRAEL},
-            {"Asia/Tokyo", JST},
-            {"JST", JST},
-            {"Europe/Bucharest", EET},
-            {"Asia/Shanghai", CTT},
-            {"CTT", CTT},
-            /* Don't change the order of the above zones
-             * to keep compatibility with the previous version.
-             */
-
-            {"ACT", DARWIN},
-            {"AET", EST_NSW},
-            {"AGT", AGT},
-            {"ART", EET},
-            {"Africa/Abidjan", GMT},
-            {"Africa/Accra", GHMT},
-            {"Africa/Addis_Ababa", EAT},
-            {"Africa/Algiers", CET},
-            {"Africa/Asmara", EAT},
-            {"Africa/Asmera", EAT},
-            {"Africa/Bamako", GMT},
-            {"Africa/Bangui", WAT},
-            {"Africa/Banjul", GMT},
-            {"Africa/Bissau", GMT},
-            {"Africa/Blantyre", CAT},
-            {"Africa/Brazzaville", WAT},
-            {"Africa/Bujumbura", CAT},
-            {"Africa/Cairo", EET},
-            {"Africa/Ceuta", CET},
-            {"Africa/Conakry", GMT},
-            {"Africa/Dakar", GMT},
-            {"Africa/Dar_es_Salaam", EAT},
-            {"Africa/Djibouti", EAT},
-            {"Africa/Douala", WAT},
-            {"Africa/El_Aaiun", WET},
-            {"Africa/Freetown", SLST},
-            {"Africa/Gaborone", CAT},
-            {"Africa/Harare", CAT},
-            {"Africa/Johannesburg", SAST},
-            {"Africa/Juba", EAT},
-            {"Africa/Kampala", EAT},
-            {"Africa/Khartoum", EAT},
-            {"Africa/Kigali", CAT},
-            {"Africa/Kinshasa", WAT},
-            {"Africa/Lagos", WAT},
-            {"Africa/Libreville", WAT},
-            {"Africa/Lome", GMT},
-            {"Africa/Luanda", WAT},
-            {"Africa/Lubumbashi", CAT},
-            {"Africa/Lusaka", CAT},
-            {"Africa/Malabo", WAT},
-            {"Africa/Maputo", CAT},
-            {"Africa/Maseru", SAST},
-            {"Africa/Mbabane", SAST},
-            {"Africa/Mogadishu", EAT},
-            {"Africa/Monrovia", GMT},
-            {"Africa/Nairobi", EAT},
-            {"Africa/Ndjamena", WAT},
-            {"Africa/Niamey", WAT},
-            {"Africa/Nouakchott", GMT},
-            {"Africa/Ouagadougou", GMT},
-            {"Africa/Porto-Novo", WAT},
-            {"Africa/Sao_Tome", GMT},
-            {"Africa/Timbuktu", GMT},
-            {"Africa/Tripoli", CET},
-            {"Africa/Tunis", CET},
-            {"Africa/Windhoek", WAT},
-            {"America/Adak", HAST},
-            {"America/Anguilla", AST},
-            {"America/Antigua", AST},
-            {"America/Araguaina", BRT},
-            {"America/Argentina/Buenos_Aires", AGT},
-            {"America/Argentina/Catamarca", AGT},
-            {"America/Argentina/ComodRivadavia", AGT},
-            {"America/Argentina/Cordoba", AGT},
-            {"America/Argentina/Jujuy", AGT},
-            {"America/Argentina/La_Rioja", AGT},
-            {"America/Argentina/Mendoza", AGT},
-            {"America/Argentina/Rio_Gallegos", AGT},
-            {"America/Argentina/Salta", AGT},
-            {"America/Argentina/San_Juan", AGT},
-            {"America/Argentina/San_Luis", WART},
-            {"America/Argentina/Tucuman", AGT},
-            {"America/Argentina/Ushuaia", AGT},
-            {"America/Aruba", AST},
-            {"America/Asuncion", new String[] {"Paraguay Time", "PYT",
-                                               "Paraguay Summer Time", "PYST"}},
-            {"America/Atikokan", EST},
-            {"America/Atka", HAST},
-            {"America/Bahia", BRT},
-            {"America/Bahia_Banderas", CST},
-            {"America/Barbados", AST},
-            {"America/Belem", BRT},
-            {"America/Belize", CST},
-            {"America/Blanc-Sablon", AST},
-            {"America/Boa_Vista", AMT},
-            {"America/Bogota", new String[] {"Colombia Time", "COT",
-                                             "Colombia Summer Time", "COST"}},
-            {"America/Boise", MST},
-            {"America/Buenos_Aires", AGT},
-            {"America/Cambridge_Bay", MST},
-            {"America/Campo_Grande", AMT},
-            {"America/Cancun", CST},
-            {"America/Caracas", new String[] {"Venezuela Time", "VET",
-                                              "Venezuela Summer Time", "VEST"}},
-            {"America/Catamarca", AGT},
-            {"America/Cayenne", new String[] {"French Guiana Time", "GFT",
-                                              "French Guiana Summer Time", "GFST"}},
-            {"America/Cayman", EST},
-            {"America/Chihuahua", MST},
-            {"America/Creston", MST},
-            {"America/Coral_Harbour", EST},
-            {"America/Cordoba", AGT},
-            {"America/Costa_Rica", CST},
-            {"America/Cuiaba", AMT},
-            {"America/Curacao", AST},
-            {"America/Danmarkshavn", GMT},
-            {"America/Dawson", PST},
-            {"America/Dawson_Creek", MST},
-            {"America/Detroit", EST},
-            {"America/Dominica", AST},
-            {"America/Edmonton", MST},
-            {"America/Eirunepe", AMT},
-            {"America/El_Salvador", CST},
-            {"America/Ensenada", PST},
-            {"America/Fort_Wayne", EST},
-            {"America/Fortaleza", BRT},
-            {"America/Glace_Bay", AST},
-            {"America/Godthab", new String[] {"Western Greenland Time", "WGT",
-                                              "Western Greenland Summer Time", "WGST"}},
-            {"America/Goose_Bay", AST},
-            {"America/Grand_Turk", EST},
-            {"America/Grenada", AST},
-            {"America/Guadeloupe", AST},
-            {"America/Guatemala", CST},
-            {"America/Guayaquil", new String[] {"Ecuador Time", "ECT",
-                                                "Ecuador Summer Time", "ECST"}},
-            {"America/Guyana", new String[] {"Guyana Time", "GYT",
-                                             "Guyana Summer Time", "GYST"}},
-            {"America/Havana", CUBA},
-            {"America/Hermosillo", MST},
-            {"America/Indiana/Indianapolis", EST},
-            {"America/Indiana/Knox", CST},
-            {"America/Indiana/Marengo", EST},
-            {"America/Indiana/Petersburg", EST},
-            {"America/Indiana/Tell_City", CST},
-            {"America/Indiana/Vevay", EST},
-            {"America/Indiana/Vincennes", EST},
-            {"America/Indiana/Winamac", EST},
-            {"America/Inuvik", MST},
-            {"America/Iqaluit", EST},
-            {"America/Jamaica", EST},
-            {"America/Jujuy", AGT},
-            {"America/Juneau", AKST},
-            {"America/Kentucky/Louisville", EST},
-            {"America/Kentucky/Monticello", EST},
-            {"America/Knox_IN", CST},
-            {"America/Kralendijk", AST},
-            {"America/La_Paz", new String[] {"Bolivia Time", "BOT",
-                                             "Bolivia Summer Time", "BOST"}},
-            {"America/Lima", new String[] {"Peru Time", "PET",
-                                           "Peru Summer Time", "PEST"}},
-            {"America/Louisville", EST},
-            {"America/Lower_Princes", AST},
-            {"America/Maceio", BRT},
-            {"America/Managua", CST},
-            {"America/Manaus", AMT},
-            {"America/Marigot", AST},
-            {"America/Martinique", AST},
-            {"America/Matamoros", CST},
-            {"America/Mazatlan", MST},
-            {"America/Mendoza", AGT},
-            {"America/Menominee", CST},
-            {"America/Merida", CST},
-            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
-                                                 "Metlakatla Daylight Time", "MeDT"}},
-            {"America/Mexico_City", CST},
-            {"America/Miquelon", new String[] {"Pierre & Miquelon Standard Time", "PMST",
-                                               "Pierre & Miquelon Daylight Time", "PMDT"}},
-            {"America/Moncton", AST},
-            {"America/Montevideo", new String[] {"Uruguay Time", "UYT",
-                                                 "Uruguay Summer Time", "UYST"}},
-            {"America/Monterrey", CST},
-            {"America/Montreal", EST},
-            {"America/Montserrat", AST},
-            {"America/Nassau", EST},
-            {"America/Nipigon", EST},
-            {"America/Nome", AKST},
-            {"America/Noronha", NORONHA},
-            {"America/North_Dakota/Beulah", CST},
-            {"America/North_Dakota/Center", CST},
-            {"America/North_Dakota/New_Salem", CST},
-            {"America/Ojinaga", MST},
-            {"America/Panama", EST},
-            {"America/Pangnirtung", EST},
-            {"America/Paramaribo", new String[] {"Suriname Time", "SRT",
-                                                 "Suriname Summer Time", "SRST"}},
-            {"America/Port-au-Prince", EST},
-            {"America/Port_of_Spain", AST},
-            {"America/Porto_Acre", AMT},
-            {"America/Porto_Velho", AMT},
-            {"America/Puerto_Rico", AST},
-            {"America/Rainy_River", CST},
-            {"America/Rankin_Inlet", CST},
-            {"America/Recife", BRT},
-            {"America/Regina", CST},
-            {"America/Resolute", CST},
-            {"America/Rio_Branco", AMT},
-            {"America/Rosario", AGT},
-            {"America/Santa_Isabel", PST},
-            {"America/Santarem", BRT},
-            {"America/Santiago", CLT},
-            {"America/Santo_Domingo", AST},
-            {"America/Sao_Paulo", BRT},
-            {"America/Scoresbysund", EGT},
-            {"America/Shiprock", MST},
-            {"America/St_Barthelemy", AST},
-            {"America/St_Kitts", AST},
-            {"America/St_Lucia", AST},
-            {"America/St_Thomas", AST},
-            {"America/St_Vincent", AST},
-            {"America/Swift_Current", CST},
-            {"America/Tegucigalpa", CST},
-            {"America/Thule", AST},
-            {"America/Thunder_Bay", EST},
-            {"America/Tijuana", PST},
-            {"America/Toronto", EST},
-            {"America/Tortola", AST},
-            {"America/Vancouver", PST},
-            {"America/Virgin", AST},
-            {"America/Whitehorse", PST},
-            {"America/Winnipeg", CST},
-            {"America/Yakutat", AKST},
-            {"America/Yellowknife", MST},
-            {"Antarctica/Casey", WST_AUS},
-            {"Antarctica/Davis", new String[] {"Davis Time", "DAVT",
-                                               "Davis Summer Time", "DAVST"}},
-            {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville Time", "DDUT",
-                                                        "Dumont-d'Urville Summer Time", "DDUST"}},
-            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
-                                                   "Macquarie Island Summer Time", "MIST"}},
-            {"Antarctica/Mawson", new String[] {"Mawson Time", "MAWT",
-                                                "Mawson Summer Time", "MAWST"}},
-            {"Antarctica/McMurdo", NZST},
-            {"Antarctica/Palmer", CLT},
-            {"Antarctica/Rothera", new String[] {"Rothera Time", "ROTT",
-                                                 "Rothera Summer Time", "ROTST"}},
-            {"Antarctica/South_Pole", NZST},
-            {"Antarctica/Syowa", new String[] {"Syowa Time", "SYOT",
-                                               "Syowa Summer Time", "SYOST"}},
-            {"Antarctica/Vostok", new String[] {"Vostok Time", "VOST",
-                                                "Vostok Summer Time", "VOSST"}},
-            {"Arctic/Longyearbyen", CET},
-            {"Asia/Aden", ARAST},
-            {"Asia/Almaty", new String[] {"Alma-Ata Time", "ALMT",
-                                          "Alma-Ata Summer Time", "ALMST"}},
-            {"Asia/Amman", EET},
-            {"Asia/Anadyr", new String[] {"Anadyr Time", "ANAT",
-                                          "Anadyr Summer Time", "ANAST"}},
-            {"Asia/Aqtau", new String[] {"Aqtau Time", "AQTT",
-                                         "Aqtau Summer Time", "AQTST"}},
-            {"Asia/Aqtobe", new String[] {"Aqtobe Time", "AQTT",
-                                          "Aqtobe Summer Time", "AQTST"}},
-            {"Asia/Ashgabat", TMT},
-            {"Asia/Ashkhabad", TMT},
-            {"Asia/Baghdad", ARAST},
-            {"Asia/Bahrain", ARAST},
-            {"Asia/Baku", new String[] {"Azerbaijan Time", "AZT",
-                                        "Azerbaijan Summer Time", "AZST"}},
-            {"Asia/Bangkok", ICT},
-            {"Asia/Beirut", EET},
-            {"Asia/Bishkek", new String[] {"Kirgizstan Time", "KGT",
-                                           "Kirgizstan Summer Time", "KGST"}},
-            {"Asia/Brunei", new String[] {"Brunei Time", "BNT",
-                                          "Brunei Summer Time", "BNST"}},
-            {"Asia/Calcutta", IST},
-            {"Asia/Choibalsan", new String[] {"Choibalsan Time", "CHOT",
-                                              "Choibalsan Summer Time", "CHOST"}},
-            {"Asia/Chongqing", CTT},
-            {"Asia/Chungking", CTT},
-            {"Asia/Colombo", IST},
-            {"Asia/Dacca", BDT},
-            {"Asia/Dhaka", BDT},
-            {"Asia/Dili", new String[] {"Timor-Leste Time", "TLT",
-                                        "Timor-Leste Summer Time", "TLST"}},
-            {"Asia/Damascus", EET},
-            {"Asia/Dubai", GST},
-            {"Asia/Dushanbe", new String[] {"Tajikistan Time", "TJT",
-                                            "Tajikistan Summer Time", "TJST"}},
-            {"Asia/Gaza", EET},
-            {"Asia/Harbin", CTT},
-            {"Asia/Hebron", EET},
-            {"Asia/Ho_Chi_Minh", ICT},
-            {"Asia/Hong_Kong", HKT},
-            {"Asia/Hovd", new String[] {"Hovd Time", "HOVT",
-                                        "Hovd Summer Time", "HOVST"}},
-            {"Asia/Irkutsk", new String[] {"Irkutsk Time", "IRKT",
-                                           "Irkutsk Summer Time", "IRKST"}},
-            {"Asia/Istanbul", EET},
-            {"Asia/Jakarta", WIT},
-            {"Asia/Jayapura", new String[] {"East Indonesia Time", "EIT",
-                                            "East Indonesia Summer Time", "EIST"}},
-            {"Asia/Kabul", new String[] {"Afghanistan Time", "AFT",
-                                         "Afghanistan Summer Time", "AFST"}},
-            {"Asia/Kamchatka", new String[] {"Petropavlovsk-Kamchatski Time", "PETT",
-                                             "Petropavlovsk-Kamchatski Summer Time", "PETST"}},
-            {"Asia/Karachi", PKT},
-            {"Asia/Kashgar", CTT},
-            {"Asia/Kathmandu", NPT},
-            {"Asia/Katmandu", NPT},
-            {"Asia/Khandyga", YAKT},
-            {"Asia/Kolkata", IST},
-            {"Asia/Krasnoyarsk", new String[] {"Krasnoyarsk Time", "KRAT",
-                                               "Krasnoyarsk Summer Time", "KRAST"}},
-            {"Asia/Kuala_Lumpur", MYT},
-            {"Asia/Kuching", MYT},
-            {"Asia/Kuwait", ARAST},
-            {"Asia/Macao", CTT},
-            {"Asia/Macau", CTT},
-            {"Asia/Magadan", new String[] {"Magadan Time", "MAGT",
-                                           "Magadan Summer Time", "MAGST"}},
-            {"Asia/Makassar", CIT},
-            {"Asia/Manila", new String[] {"Philippines Time", "PHT",
-                                          "Philippines Summer Time", "PHST"}},
-            {"Asia/Muscat", GST},
-            {"Asia/Nicosia", EET},
-            {"Asia/Novokuznetsk", NOVT},
-            {"Asia/Novosibirsk", NOVT},
-            {"Asia/Oral", new String[] {"Oral Time", "ORAT",
-                                        "Oral Summer Time", "ORAST"}},
-            {"Asia/Omsk", new String[] {"Omsk Time", "OMST",
-                                        "Omsk Summer Time", "OMSST"}},
-            {"Asia/Phnom_Penh", ICT},
-            {"Asia/Pontianak", WIT},
-            {"Asia/Pyongyang", KST},
-            {"Asia/Qatar", ARAST},
-            {"Asia/Qyzylorda", new String[] {"Qyzylorda Time", "QYZT",
-                                             "Qyzylorda Summer Time", "QYZST"}},
-            {"Asia/Rangoon", new String[] {"Myanmar Time", "MMT",
-                                           "Myanmar Summer Time", "MMST"}},
-            {"Asia/Riyadh", ARAST},
-            {"Asia/Saigon", ICT},
-            {"Asia/Sakhalin", new String[] {"Sakhalin Time", "SAKT",
-                                            "Sakhalin Summer Time", "SAKST"}},
-            {"Asia/Samarkand", UZT},
-            {"Asia/Seoul", KST},
-            {"Asia/Singapore", SGT},
-            {"Asia/Taipei", CTT},
-            {"Asia/Tel_Aviv", ISRAEL},
-            {"Asia/Tashkent", UZT},
-            {"Asia/Tbilisi", new String[] {"Georgia Time", "GET",
-                                           "Georgia Summer Time", "GEST"}},
-            {"Asia/Tehran", IRT},
-            {"Asia/Thimbu", BTT},
-            {"Asia/Thimphu", BTT},
-            {"Asia/Ujung_Pandang", CIT},
-            {"Asia/Ulaanbaatar", ULAT},
-            {"Asia/Ulan_Bator", ULAT},
-            {"Asia/Urumqi", CTT},
-            {"Asia/Ust-Nera", VLAT},
-            {"Asia/Vientiane", ICT},
-            {"Asia/Vladivostok", VLAT},
-            {"Asia/Yakutsk", YAKT},
-            {"Asia/Yekaterinburg", new String[] {"Yekaterinburg Time", "YEKT",
-                                                 "Yekaterinburg Summer Time", "YEKST"}},
-            {"Asia/Yerevan", ARMT},
-            {"Atlantic/Azores", new String[] {"Azores Time", "AZOT",
-                                              "Azores Summer Time", "AZOST"}},
-            {"Atlantic/Bermuda", AST},
-            {"Atlantic/Canary", WET},
-            {"Atlantic/Cape_Verde", new String[] {"Cape Verde Time", "CVT",
-                                                  "Cape Verde Summer Time", "CVST"}},
-            {"Atlantic/Faeroe", WET},
-            {"Atlantic/Faroe", WET},
-            {"Atlantic/Jan_Mayen", CET},
-            {"Atlantic/Madeira", WET},
-            {"Atlantic/Reykjavik", GMT},
-            {"Atlantic/South_Georgia", new String[] {"South Georgia Standard Time", "GST",
-                                                     "South Georgia Daylight Time", "GDT"}},
-            {"Atlantic/St_Helena", GMT},
-            {"Atlantic/Stanley", new String[] {"Falkland Is. Time", "FKT",
-                                               "Falkland Is. Summer Time", "FKST"}},
-            {"Australia/ACT", EST_NSW},
-            {"Australia/Adelaide", ADELAIDE},
-            {"Australia/Brisbane", BRISBANE},
-            {"Australia/Broken_Hill", BROKEN_HILL},
-            {"Australia/Canberra", EST_NSW},
-            {"Australia/Currie", EST_NSW},
-            {"Australia/Darwin", DARWIN},
-            {"Australia/Eucla", new String[] {"Central Western Standard Time (Australia)", "CWST",
-                                              "Central Western Summer Time (Australia)", "CWST"}},
-            {"Australia/Hobart", TASMANIA},
-            {"Australia/LHI", LORD_HOWE},
-            {"Australia/Lindeman", BRISBANE},
-            {"Australia/Lord_Howe", LORD_HOWE},
-            {"Australia/Melbourne", VICTORIA},
-            {"Australia/North", DARWIN},
-            {"Australia/NSW", EST_NSW},
-            {"Australia/Perth", WST_AUS},
-            {"Australia/Queensland", BRISBANE},
-            {"Australia/South", ADELAIDE},
-            {"Australia/Sydney", EST_NSW},
-            {"Australia/Tasmania", TASMANIA},
-            {"Australia/Victoria", VICTORIA},
-            {"Australia/West", WST_AUS},
-            {"Australia/Yancowinna", BROKEN_HILL},
-            {"BET", BRT},
-            {"BST", BDT},
-            {"Brazil/Acre", AMT},
-            {"Brazil/DeNoronha", NORONHA},
-            {"Brazil/East", BRT},
-            {"Brazil/West", AMT},
-            {"Canada/Atlantic", AST},
-            {"Canada/Central", CST},
-            {"Canada/East-Saskatchewan", CST},
-            {"Canada/Eastern", EST},
-            {"Canada/Mountain", MST},
-            {"Canada/Newfoundland", NST},
-            {"Canada/Pacific", PST},
-            {"Canada/Yukon", PST},
-            {"Canada/Saskatchewan", CST},
-            {"CAT", CAT},
-            {"CET", CET},
-            {"Chile/Continental", CLT},
-            {"Chile/EasterIsland", EASTER},
-            {"CST6CDT", CST},
-            {"Cuba", CUBA},
-            {"EAT", EAT},
-            {"EET", EET},
-            {"Egypt", EET},
-            {"Eire", DUBLIN},
-            {"EST5EDT", EST},
-            {"Etc/Greenwich", GMT},
-            {"Etc/UCT", UTC},
-            {"Etc/Universal", UTC},
-            {"Etc/UTC", UTC},
-            {"Etc/Zulu", UTC},
-            {"Europe/Amsterdam", CET},
-            {"Europe/Andorra", CET},
-            {"Europe/Athens", EET},
-            {"Europe/Belfast", GMTBST},
-            {"Europe/Belgrade", CET},
-            {"Europe/Berlin", CET},
-            {"Europe/Bratislava", CET},
-            {"Europe/Brussels", CET},
-            {"Europe/Budapest", CET},
-            {"Europe/Busingen", CET},
-            {"Europe/Chisinau", EET},
-            {"Europe/Copenhagen", CET},
-            {"Europe/Dublin", DUBLIN},
-            {"Europe/Gibraltar", CET},
-            {"Europe/Guernsey", GMTBST},
-            {"Europe/Helsinki", EET},
-            {"Europe/Isle_of_Man", GMTBST},
-            {"Europe/Istanbul", EET},
-            {"Europe/Jersey", GMTBST},
-            {"Europe/Kaliningrad", FET},
-            {"Europe/Kiev", EET},
-            {"Europe/Lisbon", WET},
-            {"Europe/Ljubljana", CET},
-            {"Europe/London", GMTBST},
-            {"Europe/Luxembourg", CET},
-            {"Europe/Madrid", CET},
-            {"Europe/Malta", CET},
-            {"Europe/Mariehamn", EET},
-            {"Europe/Minsk", FET},
-            {"Europe/Monaco", CET},
-            {"Europe/Moscow", MSK},
-            {"Europe/Nicosia", EET},
-            {"Europe/Oslo", CET},
-            {"Europe/Podgorica", CET},
-            {"Europe/Prague", CET},
-            {"Europe/Riga", EET},
-            {"Europe/Rome", CET},
-            {"Europe/Samara", new String[] {"Samara Time", "SAMT",
-                                            "Samara Summer Time", "SAMST"}},
-            {"Europe/San_Marino", CET},
-            {"Europe/Sarajevo", CET},
-            {"Europe/Simferopol", EET},
-            {"Europe/Skopje", CET},
-            {"Europe/Sofia", EET},
-            {"Europe/Stockholm", CET},
-            {"Europe/Tallinn", EET},
-            {"Europe/Tirane", CET},
-            {"Europe/Tiraspol", EET},
-            {"Europe/Uzhgorod", EET},
-            {"Europe/Vaduz", CET},
-            {"Europe/Vatican", CET},
-            {"Europe/Vienna", CET},
-            {"Europe/Vilnius", EET},
-            {"Europe/Volgograd", new String[] {"Volgograd Time", "VOLT",
-                                               "Volgograd Summer Time", "VOLST"}},
-            {"Europe/Warsaw", CET},
-            {"Europe/Zagreb", CET},
-            {"Europe/Zaporozhye", EET},
-            {"Europe/Zurich", CET},
-            {"GB", GMTBST},
-            {"GB-Eire", GMTBST},
-            {"Greenwich", GMT},
-            {"Hongkong", HKT},
-            {"Iceland", GMT},
-            {"Iran", IRT},
-            {"IST", IST},
-            {"Indian/Antananarivo", EAT},
-            {"Indian/Chagos", new String[] {"Indian Ocean Territory Time", "IOT",
-                                            "Indian Ocean Territory Summer Time", "IOST"}},
-            {"Indian/Christmas", new String[] {"Christmas Island Time", "CXT",
-                                               "Christmas Island Summer Time", "CXST"}},
-            {"Indian/Cocos", new String[] {"Cocos Islands Time", "CCT",
-                                           "Cocos Islands Summer Time", "CCST"}},
-            {"Indian/Comoro", EAT},
-            {"Indian/Kerguelen", new String[] {"French Southern & Antarctic Lands Time", "TFT",
-                                               "French Southern & Antarctic Lands Summer Time", "TFST"}},
-            {"Indian/Mahe", new String[] {"Seychelles Time", "SCT",
-                                          "Seychelles Summer Time", "SCST"}},
-            {"Indian/Maldives", new String[] {"Maldives Time", "MVT",
-                                              "Maldives Summer Time", "MVST"}},
-            {"Indian/Mauritius", new String[] {"Mauritius Time", "MUT",
-                                               "Mauritius Summer Time", "MUST"}},
-            {"Indian/Mayotte", EAT},
-            {"Indian/Reunion", new String[] {"Reunion Time", "RET",
-                                             "Reunion Summer Time", "REST"}},
-            {"Israel", ISRAEL},
-            {"Jamaica", EST},
-            {"Japan", JST},
-            {"Kwajalein", MHT},
-            {"Libya", CET},
-            {"MET", new String[] {"Middle Europe Time", "MET",
-                                  "Middle Europe Summer Time", "MEST"}},
-            {"Mexico/BajaNorte", PST},
-            {"Mexico/BajaSur", MST},
-            {"Mexico/General", CST},
-            {"MIT", WST_SAMOA},
-            {"MST7MDT", MST},
-            {"Navajo", MST},
-            {"NET", ARMT},
-            {"NST", NZST},
-            {"NZ", NZST},
-            {"NZ-CHAT", CHAST},
-            {"PLT", PKT},
-            {"Portugal", WET},
-            {"PRT", AST},
-            {"Pacific/Apia", WST_SAMOA},
-            {"Pacific/Auckland", NZST},
-            {"Pacific/Chatham", CHAST},
-            {"Pacific/Chuuk", CHUT},
-            {"Pacific/Easter", EASTER},
-            {"Pacific/Efate", new String[] {"Vanuatu Time", "VUT",
-                                            "Vanuatu Summer Time", "VUST"}},
-            {"Pacific/Enderbury", new String[] {"Phoenix Is. Time", "PHOT",
-                                                "Phoenix Is. Summer Time", "PHOST"}},
-            {"Pacific/Fakaofo", new String[] {"Tokelau Time", "TKT",
-                                              "Tokelau Summer Time", "TKST"}},
-            {"Pacific/Fiji", new String[] {"Fiji Time", "FJT",
-                                           "Fiji Summer Time", "FJST"}},
-            {"Pacific/Funafuti", new String[] {"Tuvalu Time", "TVT",
-                                               "Tuvalu Summer Time", "TVST"}},
-            {"Pacific/Galapagos", new String[] {"Galapagos Time", "GALT",
-                                                "Galapagos Summer Time", "GALST"}},
-            {"Pacific/Gambier", GAMBIER},
-            {"Pacific/Guadalcanal", SBT},
-            {"Pacific/Guam", ChST},
-            {"Pacific/Johnston", HST},
-            {"Pacific/Kiritimati", new String[] {"Line Is. Time", "LINT",
-                                                 "Line Is. Summer Time", "LINST"}},
-            {"Pacific/Kosrae", new String[] {"Kosrae Time", "KOST",
-                                             "Kosrae Summer Time", "KOSST"}},
-            {"Pacific/Kwajalein", MHT},
-            {"Pacific/Majuro", MHT},
-            {"Pacific/Marquesas", new String[] {"Marquesas Time", "MART",
-                                                "Marquesas Summer Time", "MARST"}},
-            {"Pacific/Midway", SAMOA},
-            {"Pacific/Nauru", new String[] {"Nauru Time", "NRT",
-                                            "Nauru Summer Time", "NRST"}},
-            {"Pacific/Niue", new String[] {"Niue Time", "NUT",
-                                           "Niue Summer Time", "NUST"}},
-            {"Pacific/Norfolk", new String[] {"Norfolk Time", "NFT",
-                                              "Norfolk Summer Time", "NFST"}},
-            {"Pacific/Noumea", new String[] {"New Caledonia Time", "NCT",
-                                             "New Caledonia Summer Time", "NCST"}},
-            {"Pacific/Pago_Pago", SAMOA},
-            {"Pacific/Palau", new String[] {"Palau Time", "PWT",
-                                            "Palau Summer Time", "PWST"}},
-            {"Pacific/Pitcairn", PITCAIRN},
-            {"Pacific/Pohnpei", PONT},
-            {"Pacific/Ponape", PONT},
-            {"Pacific/Port_Moresby", new String[] {"Papua New Guinea Time", "PGT",
-                                                   "Papua New Guinea Summer Time", "PGST"}},
-            {"Pacific/Rarotonga", new String[] {"Cook Is. Time", "CKT",
-                                                "Cook Is. Summer Time", "CKHST"}},
-            {"Pacific/Saipan", ChST},
-            {"Pacific/Samoa", SAMOA},
-            {"Pacific/Tahiti", new String[] {"Tahiti Time", "TAHT",
-                                             "Tahiti Summer Time", "TAHST"}},
-            {"Pacific/Tarawa", new String[] {"Gilbert Is. Time", "GILT",
-                                             "Gilbert Is. Summer Time", "GILST"}},
-            {"Pacific/Tongatapu", new String[] {"Tonga Time", "TOT",
-                                                "Tonga Summer Time", "TOST"}},
-            {"Pacific/Truk", CHUT},
-            {"Pacific/Wake", new String[] {"Wake Time", "WAKT",
-                                           "Wake Summer Time", "WAKST"}},
-            {"Pacific/Wallis", new String[] {"Wallis & Futuna Time", "WFT",
-                                             "Wallis & Futuna Summer Time", "WFST"}},
-            {"Pacific/Yap", CHUT},
-            {"Poland", CET},
-            {"PRC", CTT},
-            {"PST8PDT", PST},
-            {"ROK", KST},
-            {"Singapore", SGT},
-            {"SST", SBT},
-            {"SystemV/AST4", AST},
-            {"SystemV/AST4ADT", AST},
-            {"SystemV/CST6", CST},
-            {"SystemV/CST6CDT", CST},
-            {"SystemV/EST5", EST},
-            {"SystemV/EST5EDT", EST},
-            {"SystemV/HST10", HST},
-            {"SystemV/MST7", MST},
-            {"SystemV/MST7MDT", MST},
-            {"SystemV/PST8", PST},
-            {"SystemV/PST8PDT", PST},
-            {"SystemV/YST9", AKST},
-            {"SystemV/YST9YDT", AKST},
-            {"Turkey", EET},
-            {"UCT", UTC},
-            {"Universal", UTC},
-            {"US/Alaska", AKST},
-            {"US/Aleutian", HAST},
-            {"US/Arizona", MST},
-            {"US/Central", CST},
-            {"US/Eastern", EST},
-            {"US/Hawaii", HST},
-            {"US/Indiana-Starke", CST},
-            {"US/East-Indiana", EST},
-            {"US/Michigan", EST},
-            {"US/Mountain", MST},
-            {"US/Pacific", PST},
-            {"US/Pacific-New", PST},
-            {"US/Samoa", SAMOA},
-            {"UTC", UTC},
-            {"VST", ICT},
-            {"W-SU", MSK},
-            {"WET", WET},
-            {"Zulu", UTC},
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNamesBundle.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNamesBundle.java
deleted file mode 100755
index 6360125..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNamesBundle.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-import java.util.Map;
-import java.util.LinkedHashMap;
-
-/**
- * Subclass of <code>ResourceBundle</code> with special
- * functionality for time zone names. The additional functionality:
- * <ul>
- * <li>Preserves the order of entries in the <code>getContents</code>
- *     array for the enumeration returned by <code>getKeys</code>.
- * <li>Inserts the time zone ID (the key of the bundle entries) into
- *     the string arrays returned by <code>handleGetObject</code>.
- * <ul>
- * All <code>TimeZoneNames</code> resource bundles must extend this
- * class and implement the <code>getContents</code> method.
- */
-public abstract class TimeZoneNamesBundle extends OpenListResourceBundle {
-
-    /**
-     * Maps time zone IDs to locale-specific names.
-     * The value returned is an array of five strings:
-     * <ul>
-     * <li>The time zone ID (same as the key, not localized).
-     * <li>The long name of the time zone in standard time (localized).
-     * <li>The short name of the time zone in standard time (localized).
-     * <li>The long name of the time zone in daylight savings time (localized).
-     * <li>The short name of the time zone in daylight savings time (localized).
-     * </ul>
-     * The localized names come from the subclasses's
-     * <code>getContents</code> implementations, while the time zone
-     * ID is inserted into the returned array by this method.
-     */
-    public Object handleGetObject(String key) {
-        String[] contents = (String[]) super.handleGetObject(key);
-        if (contents == null) {
-            return null;
-        }
-
-        int clen = contents.length;
-        String[] tmpobj = new String[clen+1];
-        tmpobj[0] = key;
-        for (int i = 0; i < clen; i++) {
-            tmpobj[i+1] = contents[i];
-        }
-        return tmpobj;
-    }
-
-    /**
-     * Use LinkedHashMap to preserve order of bundle entries.
-     */
-    protected Map createMap(int size) {
-        return new LinkedHashMap(size);
-    }
-
-    /**
-     * Provides key/value mappings for a specific
-     * resource bundle. Each entry of the array
-     * returned must be an array with two elements:
-     * <ul>
-     * <li>The key, which must be a string.
-     * <li>The value, which must be an array of
-     *     four strings:
-     *     <ul>
-     *     <li>The long name of the time zone in standard time.
-     *     <li>The short name of the time zone in standard time.
-     *     <li>The long name of the time zone in daylight savings time.
-     *     <li>The short name of the time zone in daylight savings time.
-     *     </ul>
-     * </ul>
-     */
-    protected abstract Object[][] getContents();
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_de.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames_de.java
deleted file mode 100755
index 5c7c20d..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_de.java
+++ /dev/null
@@ -1,876 +0,0 @@
-/*
- * Copyright (c) 1997, 2011, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-public final class TimeZoneNames_de extends TimeZoneNamesBundle {
-
-    protected final Object[][] getContents() {
-        String ACT[] = new String[] {"Acre Normalzeit", "ACT",
-                                     "Acre Sommerzeit", "ACST"};
-        String ADELAIDE[] = new String[] {"Zentrale Normalzeit (S\u00fcdaustralien)", "CST",
-                                          "Zentrale Sommerzeit (S\u00fcdaustralien)", "CST"};
-        String AGT[] = new String[] {"Argentinische Zeit", "ART",
-                                     "Argentinische Sommerzeit", "ARST"};
-        String AKST[] = new String[] {"Alaska Normalzeit", "AKST",
-                                      "Alaska Sommerzeit", "AKDT"};
-        String AMT[] = new String[] {"Amazonas Normalzeit", "AMT",
-                                     "Amazonas Sommerzeit", "AMST"};
-        String ARAST[] = new String[] {"Arabische Normalzeit", "AST",
-                                       "Arabische Sommerzeit", "ADT"};
-        String ARMT[] = new String[] {"Armenische Zeit", "AMT",
-                                      "Armenische Sommerzeit", "AMST"};
-        String AST[] = new String[] {"Atlantik Normalzeit", "AST",
-                                     "Atlantik Sommerzeit", "ADT"};
-        String BDT[] = new String[] {"Bangladesch Zeit", "BDT",
-                                     "Bangladesch Sommerzeit", "BDST"};
-        String BRISBANE[] = new String[] {"\u00d6stliche Normalzeit (Queensland)", "EST",
-                                          "\u00d6stliche Sommerzeit (Queensland)", "EST"};
-        String BROKEN_HILL[] = new String[] {"Zentrale Normalzeit (S\u00fcdaustralien/New South Wales)", "CST",
-                                             "Zentrale Sommerzeit (S\u00fcdaustralien/New South Wales)", "CST"};
-        String BRT[] = new String[] {"Brasilianische Zeit", "BRT",
-                                     "Brasilianische Sommerzeit", "BRST"};
-        String BTT[] = new String[] {"Bhutanische Zeit", "BTT",
-                                     "Bhutanische Sommerzeit", "BTST"};
-        String CAT[] = new String[] {"Zentralafrikanische Zeit", "CAT",
-                                     "Zentralafrikanische Sommerzeit", "CAST"};
-        String CET[] = new String[] {"Mitteleurop\u00e4ische Zeit", "MEZ",
-                                     "Mitteleurop\u00e4ische Sommerzeit", "MESZ"};
-        String CHAST[] = new String[] {"Chatham Normalzeit", "CHAST",
-                                       "Chatham Sommerzeit", "CHADT"};
-        String ChST[] = new String[] {"Chamorro Normalzeit", "ChST",
-                      "Chamorro Sommerzeit", "ChDT"};
-        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
-                                      "Chuuk Summer Time", "CHUST"};
-        String CIT[] = new String[] {"Zentralindonesische Zeit", "CIT",
-                                     "Zentralindonesische Sommerzeit", "CIST"};
-        String CLT[] = new String[] {"Chilenische Zeit", "CLT",
-                                     "Chilenische Sommerzeit", "CLST"};
-        String CST[] = new String[] {"Zentrale Normalzeit", "CST",
-                                     "Zentrale Sommerzeit", "CDT"};
-        String CTT[] = new String[] {"Chinesische Normalzeit", "CST",
-                                     "Chinesische Sommerzeit", "CDT"};
-        String CUBA[] = new String[] {"Kubanische Normalzeit", "CST",
-                                      "Kubanische Sommerzeit", "CDT"};
-        String DARWIN[] = new String[] {"Zentrale Normalzeit (Northern Territory)", "CST",
-                                        "Zentrale Sommerzeit (Northern Territory)", "CST"};
-        String DUBLIN[] = new String[] {"Greenwich Zeit", "GMT",
-                                        "Irische Sommerzeit", "IST"};
-        String EAT[] = new String[] {"Ostafrikanische Zeit", "EAT",
-                                     "Ostafrikanische Sommerzeit", "EAST"};
-        String EASTER[] = new String[] {"Osterinseln Zeit", "EAST",
-                                        "Osterinseln Sommerzeit", "EASST"};
-        String EET[] = new String[] {"Osteurop\u00e4ische Zeit", "OEZ",
-                                     "Osteurop\u00e4ische Sommerzeit", "OESZ"};
-        String EGT[] = new String[] {"Ostgr\u00f6nl\u00e4ndische Zeit", "EGT",
-                                     "Ostgr\u00f6nl\u00e4ndische Sommerzeit", "EGST"};
-        String EST[] = new String[] {"\u00d6stliche Normalzeit", "EST",
-                                     "\u00d6stliche Sommerzeit", "EDT"};
-        String EST_NSW[] = new String[] {"\u00d6stliche Normalzeit (New South Wales)", "EST",
-                                         "\u00d6stliche Sommerzeit (New South Wales)", "EST"};
-        String FET[] = new String[] {"Further-eastern European Time", "FET",
-                                     "Further-eastern European Summer Time", "FEST"};
-        String GHMT[] = new String[] {"Ghanaische Normalzeit", "GMT",
-                                      "Ghanaische Sommerzeit", "GHST"};
-        String GAMBIER[] =  new String[] {"Gambier Zeit", "GAMT",
-                                          "Gambier Sommerzeit", "GAMST"};
-        String GMT[] = new String[] {"Greenwich Zeit", "GMT",
-                                   "Greenwich Zeit", "GMT"};
-        String GMTBST[] = new String[] {"Greenwich Zeit", "GMT",
-                                        "Britische Sommerzeit", "BST"};
-        String GST[] = new String[] {"Golf Normalzeit", "GST",
-                                     "Golf Sommerzeit", "GDT"};
-        String HAST[] = new String[] {"Hawaii-Aleutische Normalzeit", "HAST",
-                                      "Hawaii-Aleutische Sommerzeit", "HADT"};
-        String HKT[] =  new String[] {"Hongkong Zeit", "HKT",
-                                      "Hongkong Sommerzeit", "HKST"};
-        String HST[] = new String[] {"Hawaii Normalzeit", "HST",
-                                     "Hawaii Sommerzeit", "HDT"};
-        String ICT[] = new String[] {"Indochina Zeit", "ICT",
-                                     "Indochina Sommerzeit", "ICST"};
-        String IRT[] = new String[] {"Iranische Normalzeit", "IRST",
-                                     "Iranische Sommerzeit", "IRDT"};
-        String ISRAEL[] = new String[] {"Israelische Normalzeit", "IST",
-                                        "Israelische Sommerzeit", "IDT"};
-        String IST[] = new String[] {"Indische Normalzeit", "IST",
-                                     "Indische Sommerzeit", "IDT"};
-        String JST[] = new String[] {"Japanische Normalzeit", "JST",
-                                     "Japanische Sommerzeit", "JDT"};
-        String KST[] = new String[] {"Koreanische Normalzeit", "KST",
-                                     "Koreanische Sommerzeit", "KDT"};
-        String LORD_HOWE[] = new String[] {"Lord Howe Normalzeit", "LHST",
-                                           "Lord Howe Sommerzeit", "LHST"};
-        String MHT[] = new String[] {"Marshallinseln Zeit", "MHT",
-                                     "Marshallinseln Sommerzeit", "MHST"};
-        String MSK[] = new String[] {"Moskauer Normalzeit", "MSK",
-                                     "Moskauer Sommerzeit", "MSD"};
-        String MST[] = new String[] {"Rocky Mountains Normalzeit", "MST",
-                                     "Rocky Mountains Sommerzeit", "MDT"};
-        String MYT[] = new String[] {"Malaysische Zeit", "MYT",
-                                     "Malaysische Sommerzeit", "MYST"};
-        String NORONHA[] = new String[] {"Fernando de Noronha Zeit", "FNT",
-                                         "Fernando de Noronha Sommerzeit", "FNST"};
-        String NOVT[] = new String[] {"Nowosibirsker Zeit", "NOVT",
-                                      "Nowosibirsker Sommerzeit", "NOVST"};
-        String NPT[] = new String[] {"Nepalesische Zeit", "NPT",
-                                     "Nepalesische Sommerzeit", "NPST"};
-        String NST[] = new String[] {"Neufundland Normalzeit", "NST",
-                                     "Neufundland Sommerzeit", "NDT"};
-        String NZST[] = new String[] {"Neuseeland Normalzeit", "NZST",
-                                      "Neuseeland Sommerzeit", "NZDT"};
-        String PITCAIRN[] = new String[] {"Pitcairn Normalzeit", "PST",
-                                          "Pitcairn Sommerzeit", "PDT"};
-        String PKT[] = new String[] {"Pakistanische Zeit", "PKT",
-                                     "Pakistanische Sommerzeit", "PKST"};
-        String PONT[] = new String[] {"Pohnpei Time", "PONT",
-                                      "Pohnpei Summer Time", "PONST"};
-        String PST[] = new String[] {"Pazifische Normalzeit", "PST",
-                                     "Pazifische Sommerzeit", "PDT"};
-        String SAMOA[] = new String[] {"Samoa Normalzeit", "SST",
-                                       "Samoa Sommerzeit", "SDT"};
-        String SAST[] = new String[] {"S\u00fcdafrikanische Normalzeit", "SAST",
-                                      "S\u00fcdafrikanische Sommerzeit", "SAST"};
-        String SBT[] = new String[] {"Salomoninseln Zeit", "SBT",
-                                     "Salomoninseln Sommerzeit", "SBST"};
-        String SGT[] = new String[] {"Singapur Zeit", "SGT",
-                                     "Singapur Sommerzeit", "SGST"};
-        String SLST[] = new String[] {"Greenwich Normalzeit", "GMT",
-                                      "Sierra Leone Sommerzeit", "SLST"};
-        String TASMANIA[] = new String[] {"\u00d6stliche Normalzeit (Tasmanien)", "EST",
-                                          "\u00d6stliche Sommerzeit (Tasmanien)", "EST"};
-        String TMT[] = new String[] {"Turkmenische Zeit", "TMT",
-                                     "Turkmenische Sommerzeit", "TMST"};
-        String ULAT[]= new String[] {"Ulaanbaatar Zeit", "ULAT",
-                                     "Ulaanbaatar Sommerzeit", "ULAST"};
-        String UTC[] = new String[] {"Koordinierte Universalzeit", "UTC",
-                                     "Koordinierte Universalzeit", "UTC"};
-        String UZT[] = new String[] {"Usbekistan Zeit", "UZT",
-                                     "Usbekistan Sommerzeit", "UZST"};
-        String VICTORIA[] = new String[] {"\u00d6stliche Normalzeit (Victoria)", "EST",
-                                          "\u00d6stliche Sommerzeit (Victoria)", "EST"};
-        String VLAT[] = new String[] {"Wladiwostok Zeit", "VLAT",
-                                      "Wladiwostok Sommerzeit", "VLAST"};
-        String WART[] = new String[] {"Westargentinische Zeit", "WART",
-                                      "Westargentinische Sommerzeit", "WARST"};
-        String WAT[] = new String[] {"Westafrikanische Zeit", "WAT",
-                                     "Westafrikanische Sommerzeit", "WAST"};
-        String WET[] = new String[] {"Westeurop\u00e4ische Zeit", "WEZ",
-                                     "Westeurop\u00e4ische Sommerzeit", "WESZ"};
-        String WIT[] = new String[] {"Westindonesische Zeit", "WIT",
-                                     "Westindonesische Sommerzeit", "WIST"};
-        String WST_AUS[] = new String[] {"Westliche Normalzeit (Australien)", "WST",
-                                         "Westliche Sommerzeit (Australien)", "WST"};
-        String WST_SAMOA[] = new String[] {"West Samoa Zeit", "WST",
-                                           "West Samoa Sommerzeit", "WSDT"};
-        String YAKT[] = new String[] {"Jakutsk Zeit", "YAKT",
-                                      "Jakutsk Sommerzeit", "YAKST"};
-
-        return new Object[][] {
-            {"America/Los_Angeles", PST},
-            {"PST", PST},
-            {"America/Denver", MST},
-            {"MST", MST},
-            {"America/Phoenix", MST},
-            {"PNT", MST},
-            {"America/Chicago", CST},
-            {"CST", CST},
-            {"America/New_York", EST},
-            {"EST", EST},
-            {"America/Indianapolis", EST},
-            {"IET", EST},
-            {"Pacific/Honolulu", HST},
-            {"HST", HST},
-            {"America/Anchorage", AKST},
-            {"AST", AKST},
-            {"America/Halifax", AST},
-            {"America/Sitka", AKST},
-            {"America/St_Johns", NST},
-            {"CNT", NST},
-            {"Europe/Paris", CET},
-            {"ECT", CET},
-            {"GMT", GMT},
-            {"Africa/Casablanca", WET},
-            {"Asia/Jerusalem", ISRAEL},
-            {"Asia/Tokyo", JST},
-            {"JST", JST},
-            {"Europe/Bucharest", EET},
-            {"Asia/Shanghai", CTT},
-            {"CTT", CTT},
-            /* Don't change the order of the above zones
-             * to keep compatibility with the previous version.
-             */
-
-            {"ACT", DARWIN},
-            {"AET", EST_NSW},
-            {"AGT", AGT},
-            {"ART", EET},
-            {"Africa/Abidjan", GMT},
-            {"Africa/Accra", GHMT},
-            {"Africa/Addis_Ababa", EAT},
-            {"Africa/Algiers", CET},
-            {"Africa/Asmara", EAT},
-            {"Africa/Asmera", EAT},
-            {"Africa/Bamako", GMT},
-            {"Africa/Bangui", WAT},
-            {"Africa/Banjul", GMT},
-            {"Africa/Bissau", GMT},
-            {"Africa/Blantyre", CAT},
-            {"Africa/Brazzaville", WAT},
-            {"Africa/Bujumbura", CAT},
-            {"Africa/Cairo", EET},
-            {"Africa/Ceuta", CET},
-            {"Africa/Conakry", GMT},
-            {"Africa/Dakar", GMT},
-            {"Africa/Dar_es_Salaam", EAT},
-            {"Africa/Djibouti", EAT},
-            {"Africa/Douala", WAT},
-            {"Africa/El_Aaiun", WET},
-            {"Africa/Freetown", SLST},
-            {"Africa/Gaborone", CAT},
-            {"Africa/Harare", CAT},
-            {"Africa/Johannesburg", SAST},
-            {"Africa/Juba", EAT},
-            {"Africa/Kampala", EAT},
-            {"Africa/Khartoum", EAT},
-            {"Africa/Kigali", CAT},
-            {"Africa/Kinshasa", WAT},
-            {"Africa/Lagos", WAT},
-            {"Africa/Libreville", WAT},
-            {"Africa/Lome", GMT},
-            {"Africa/Luanda", WAT},
-            {"Africa/Lubumbashi", CAT},
-            {"Africa/Lusaka", CAT},
-            {"Africa/Malabo", WAT},
-            {"Africa/Maputo", CAT},
-            {"Africa/Maseru", SAST},
-            {"Africa/Mbabane", SAST},
-            {"Africa/Mogadishu", EAT},
-            {"Africa/Monrovia", GMT},
-            {"Africa/Nairobi", EAT},
-            {"Africa/Ndjamena", WAT},
-            {"Africa/Niamey", WAT},
-            {"Africa/Nouakchott", GMT},
-            {"Africa/Ouagadougou", GMT},
-            {"Africa/Porto-Novo", WAT},
-            {"Africa/Sao_Tome", GMT},
-            {"Africa/Timbuktu", GMT},
-            {"Africa/Tripoli", CET},
-            {"Africa/Tunis", CET},
-            {"Africa/Windhoek", WAT},
-            {"America/Adak", HAST},
-            {"America/Anguilla", AST},
-            {"America/Antigua", AST},
-            {"America/Araguaina", BRT},
-            {"America/Argentina/Buenos_Aires", AGT},
-            {"America/Argentina/Catamarca", AGT},
-            {"America/Argentina/ComodRivadavia", AGT},
-            {"America/Argentina/Cordoba", AGT},
-            {"America/Argentina/Jujuy", AGT},
-            {"America/Argentina/La_Rioja", AGT},
-            {"America/Argentina/Mendoza", AGT},
-            {"America/Argentina/Rio_Gallegos", AGT},
-            {"America/Argentina/Salta", AGT},
-            {"America/Argentina/San_Juan", AGT},
-            {"America/Argentina/San_Luis", WART},
-            {"America/Argentina/Tucuman", AGT},
-            {"America/Argentina/Ushuaia", AGT},
-            {"America/Aruba", AST},
-            {"America/Asuncion", new String[] {"Paraguay Zeit", "PYT",
-                                               "Paraguay Sommerzeit", "PYST"}},
-            {"America/Atikokan", EST},
-            {"America/Atka", HAST},
-            {"America/Bahia", BRT},
-            {"America/Bahia_Banderas", CST},
-            {"America/Barbados", AST},
-            {"America/Belem", BRT},
-            {"America/Belize", CST},
-            {"America/Blanc-Sablon", AST},
-            {"America/Boa_Vista", AMT},
-            {"America/Bogota", new String[] {"Kolumbianische Zeit", "COT",
-                                             "Kolumbianische Sommerzeit", "COST"}},
-            {"America/Boise", MST},
-            {"America/Buenos_Aires", AGT},
-            {"America/Cambridge_Bay", MST},
-            {"America/Campo_Grande", AMT},
-            {"America/Cancun", CST},
-            {"America/Caracas", new String[] {"Venezuelanische Zeit", "VET",
-                                              "Venezuelanische Sommerzeit", "VEST"}},
-            {"America/Catamarca", AGT},
-            {"America/Cayenne", new String[] {"Franz\u00f6sisch-Guiana Zeit", "GFT",
-                                              "Franz\u00f6sisch-Guiana Sommerzeit", "GFST"}},
-            {"America/Cayman", EST},
-            {"America/Chihuahua", MST},
-            {"America/Creston", MST},
-            {"America/Coral_Harbour", EST},
-            {"America/Cordoba", AGT},
-            {"America/Costa_Rica", CST},
-            {"America/Cuiaba", AMT},
-            {"America/Curacao", AST},
-            {"America/Danmarkshavn", GMT},
-            {"America/Dawson", PST},
-            {"America/Dawson_Creek", MST},
-            {"America/Detroit", EST},
-            {"America/Dominica", AST},
-            {"America/Edmonton", MST},
-            {"America/Eirunepe", AMT},
-            {"America/El_Salvador", CST},
-            {"America/Ensenada", PST},
-            {"America/Fort_Wayne", EST},
-            {"America/Fortaleza", BRT},
-            {"America/Glace_Bay", AST},
-            {"America/Godthab", new String[] {"Westgr\u00f6nl\u00e4ndische Zeit", "WGT",
-                                              "Westgr\u00f6nl\u00e4ndische Sommerzeit", "WGST"}},
-            {"America/Goose_Bay", AST},
-            {"America/Grand_Turk", EST},
-            {"America/Grenada", AST},
-            {"America/Guadeloupe", AST},
-            {"America/Guatemala", CST},
-            {"America/Guayaquil", new String[] {"Ecuadorianische Zeit", "ECT",
-                                                "Ecuadorianische Sommerzeit", "ECST"}},
-            {"America/Guyana", new String[] {"Guyanische Zeit", "GYT",
-                                             "Guyanische Sommerzeit", "GYST"}},
-            {"America/Havana", CUBA},
-            {"America/Hermosillo", MST},
-            {"America/Indiana/Indianapolis", EST},
-            {"America/Indiana/Knox", CST},
-            {"America/Indiana/Marengo", EST},
-            {"America/Indiana/Petersburg", EST},
-            {"America/Indiana/Tell_City", CST},
-            {"America/Indiana/Vevay", EST},
-            {"America/Indiana/Vincennes", EST},
-            {"America/Indiana/Winamac", EST},
-            {"America/Inuvik", MST},
-            {"America/Iqaluit", EST},
-            {"America/Jamaica", EST},
-            {"America/Jujuy", AGT},
-            {"America/Juneau", AKST},
-            {"America/Kentucky/Louisville", EST},
-            {"America/Kentucky/Monticello", EST},
-            {"America/Knox_IN", CST},
-            {"America/Kralendijk", AST},
-            {"America/La_Paz", new String[] {"Bolivianische Zeit", "BOT",
-                                             "Bolivianische Sommerzeit", "BOST"}},
-            {"America/Lima", new String[] {"Peruanische Zeit", "PET",
-                                           "Peruanische Sommerzeit", "PEST"}},
-            {"America/Louisville", EST},
-            {"America/Lower_Princes", AST},
-            {"America/Maceio", BRT},
-            {"America/Managua", CST},
-            {"America/Manaus", AMT},
-            {"America/Marigot", AST},
-            {"America/Martinique", AST},
-            {"America/Matamoros", CST},
-            {"America/Mazatlan", MST},
-            {"America/Mendoza", AGT},
-            {"America/Menominee", CST},
-            {"America/Merida", CST},
-            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
-                                                 "Metlakatla Daylight Time", "MeDT"}},
-            {"America/Mexico_City", CST},
-            {"America/Miquelon", new String[] {"Pierre & Miquelon Normalzeit", "PMST",
-                                               "Pierre & Miquelon Sommerzeit", "PMDT"}},
-            {"America/Moncton", AST},
-            {"America/Montevideo", new String[] {"Uruguayische Zeit", "UYT",
-                                                 "Uruguayische Sommerzeit", "UYST"}},
-            {"America/Monterrey", CST},
-            {"America/Montreal", EST},
-            {"America/Montserrat", AST},
-            {"America/Nassau", EST},
-            {"America/Nipigon", EST},
-            {"America/Nome", AKST},
-            {"America/Noronha", NORONHA},
-            {"America/North_Dakota/Beulah", CST},
-            {"America/North_Dakota/Center", CST},
-            {"America/North_Dakota/New_Salem", CST},
-            {"America/Ojinaga", MST},
-            {"America/Panama", EST},
-            {"America/Pangnirtung", EST},
-            {"America/Paramaribo", new String[] {"Suriname Zeit", "SRT",
-                                                 "Suriname Sommerzeit", "SRST"}},
-            {"America/Port-au-Prince", EST},
-            {"America/Port_of_Spain", AST},
-            {"America/Porto_Acre", AMT},
-            {"America/Porto_Velho", AMT},
-            {"America/Puerto_Rico", AST},
-            {"America/Rainy_River", CST},
-            {"America/Rankin_Inlet", CST},
-            {"America/Recife", BRT},
-            {"America/Regina", CST},
-            {"America/Resolute", CST},
-            {"America/Rio_Branco", AMT},
-            {"America/Rosario", AGT},
-            {"America/Santa_Isabel", PST},
-            {"America/Santarem", BRT},
-            {"America/Santiago", CLT},
-            {"America/Santo_Domingo", AST},
-            {"America/Sao_Paulo", BRT},
-            {"America/Scoresbysund", EGT},
-            {"America/Shiprock", MST},
-            {"America/St_Barthelemy", AST},
-            {"America/St_Kitts", AST},
-            {"America/St_Lucia", AST},
-            {"America/St_Thomas", AST},
-            {"America/St_Vincent", AST},
-            {"America/Swift_Current", CST},
-            {"America/Tegucigalpa", CST},
-            {"America/Thule", AST},
-            {"America/Thunder_Bay", EST},
-            {"America/Tijuana", PST},
-            {"America/Toronto", EST},
-            {"America/Tortola", AST},
-            {"America/Vancouver", PST},
-            {"America/Virgin", AST},
-            {"America/Whitehorse", PST},
-            {"America/Winnipeg", CST},
-            {"America/Yakutat", AKST},
-            {"America/Yellowknife", MST},
-            {"Antarctica/Casey", WST_AUS},
-            {"Antarctica/Davis", new String[] {"Davis Zeit", "DAVT",
-                                               "Davis Sommerzeit", "DAVST"}},
-            {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville Zeit", "DDUT",
-                                                        "Dumont-d'Urville Sommerzeit", "DDUST"}},
-            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
-                                                   "Macquarie Island Summer Time", "MIST"}},
-            {"Antarctica/Mawson", new String[] {"Mawson Zeit", "MAWT",
-                                                "Mawson Sommerzeit", "MAWST"}},
-            {"Antarctica/McMurdo", NZST},
-            {"Antarctica/Palmer", CLT},
-            {"Antarctica/Rothera", new String[] {"Rothera Zeit", "ROTT",
-                                                 "Rothera Sommerzeit", "ROTST"}},
-            {"Antarctica/South_Pole", NZST},
-            {"Antarctica/Syowa", new String[] {"Syowa Zeit", "SYOT",
-                                               "Syowa Sommerzeit", "SYOST"}},
-            {"Antarctica/Vostok", new String[] {"Vostok Zeit", "VOST",
-                                                "Vostok Sommerzeit", "VOSST"}},
-            {"Arctic/Longyearbyen", CET},
-            {"Asia/Aden", ARAST},
-            {"Asia/Almaty", new String[] {"Alma Ata Zeit", "ALMT",
-                                          "Alma-Ata Sommerzeit", "ALMST"}},
-            {"Asia/Amman", EET},
-            {"Asia/Anadyr", new String[] {"Anadyr Zeit", "ANAT",
-                                          "Anadyr Sommerzeit", "ANAST"}},
-            {"Asia/Aqtau", new String[] {"Aqtau Zeit", "AQTT",
-                                         "Aqtau Sommerzeit", "AQTST"}},
-            {"Asia/Aqtobe", new String[] {"Aqtobe Zeit", "AQTT",
-                                          "Aqtobe Sommerzeit", "AQTST"}},
-            {"Asia/Ashgabat", TMT},
-            {"Asia/Ashkhabad", TMT},
-            {"Asia/Baghdad", ARAST},
-            {"Asia/Bahrain", ARAST},
-            {"Asia/Baku", new String[] {"Aserbaidschanische Zeit", "AZT",
-                                        "Aserbaidschanische Sommerzeit", "AZST"}},
-            {"Asia/Bangkok", ICT},
-            {"Asia/Beirut", EET},
-            {"Asia/Bishkek", new String[] {"Kirgisische Zeit", "KGT",
-                                           "Kirgisische Sommerzeit", "KGST"}},
-            {"Asia/Brunei", new String[] {"Brunei Zeit", "BNT",
-                                          "Brunei Sommerzeit", "BNST"}},
-            {"Asia/Calcutta", IST},
-            {"Asia/Choibalsan", new String[] {"Choibalsan Zeit", "CHOT",
-                                              "Choibalsan Sommerzeit", "CHOST"}},
-            {"Asia/Chongqing", CTT},
-            {"Asia/Chungking", CTT},
-            {"Asia/Colombo", IST},
-            {"Asia/Dacca", BDT},
-            {"Asia/Dhaka", BDT},
-            {"Asia/Dili", new String[] {"Timor-Leste Normalzeit", "TLT",
-                                        "Timor-Leste Sommerzeit", "TLST"}},
-            {"Asia/Damascus", EET},
-            {"Asia/Dubai", GST},
-            {"Asia/Dushanbe", new String[] {"Tadschikische Zeit", "TJT",
-                                            "Tadschikische Sommerzeit", "TJST"}},
-            {"Asia/Gaza", EET},
-            {"Asia/Harbin", CTT},
-            {"Asia/Hebron", EET},
-            {"Asia/Ho_Chi_Minh", ICT},
-            {"Asia/Hong_Kong", HKT},
-            {"Asia/Hovd", new String[] {"Hovd Zeit", "HOVT",
-                                        "Hovd Sommerzeit", "HOVST"}},
-            {"Asia/Irkutsk", new String[] {"Irkutsk Zeit", "IRKT",
-                                           "Irkutsk Sommerzeit", "IRKST"}},
-            {"Asia/Istanbul", EET},
-            {"Asia/Jakarta", WIT},
-            {"Asia/Jayapura", new String[] {"Ostindonesische Zeit", "EIT",
-                                            "Ostindonesische Sommerzeit", "EIST"}},
-            {"Asia/Kabul", new String[] {"Afghanistanische Zeit", "AFT",
-                                         "Afghanistanische Sommerzeit", "AFST"}},
-            {"Asia/Kamchatka", new String[] {"Petropawlowsk-Kamtschatkische Zeit", "PETT",
-                                             "Petropawlowsk-Kamtschatkische Sommerzeit", "PETST"}},
-            {"Asia/Karachi", PKT},
-            {"Asia/Kashgar", CTT},
-            {"Asia/Kathmandu", NPT},
-            {"Asia/Katmandu", NPT},
-            {"Asia/Khandyga", YAKT},
-            {"Asia/Kolkata", IST},
-            {"Asia/Krasnoyarsk", new String[] {"Krasnojarsker Zeit", "KRAT",
-                                               "Krasnojarsker Sommerzeit", "KRAST"}},
-            {"Asia/Kuala_Lumpur", MYT},
-            {"Asia/Kuching", MYT},
-            {"Asia/Kuwait", ARAST},
-            {"Asia/Macao", CTT},
-            {"Asia/Macau", CTT},
-            {"Asia/Magadan", new String[] {"Magadanische Zeit", "MAGT",
-                                           "Magadanische Sommerzeit", "MAGST"}},
-            {"Asia/Makassar", CIT},
-            {"Asia/Manila", new String[] {"Philippinische Zeit", "PHT",
-                                          "Philippinische Sommerzeit", "PHST"}},
-            {"Asia/Muscat", GST},
-            {"Asia/Nicosia", EET},
-            {"Asia/Novokuznetsk", NOVT},
-            {"Asia/Novosibirsk", NOVT},
-            {"Asia/Oral", new String[] {"Oral Zeit", "ORAT",
-                                        "Oral Sommerzeit", "ORAST"}},
-            {"Asia/Omsk", new String[] {"Omsk Zeit", "OMST",
-                                        "Omsk Sommerzeit", "OMSST"}},
-            {"Asia/Phnom_Penh", ICT},
-            {"Asia/Pontianak", WIT},
-            {"Asia/Pyongyang", KST},
-            {"Asia/Qatar", ARAST},
-            {"Asia/Qyzylorda", new String[] {"Qyzylorda Zeit", "QYZT",
-                                             "Qyzylorda Sommerzeit", "QYZST"}},
-            {"Asia/Rangoon", new String[] {"Myanmar Zeit", "MMT",
-                                           "Myanmar Sommerzeit", "MMST"}},
-            {"Asia/Riyadh", ARAST},
-            {"Asia/Saigon", ICT},
-            {"Asia/Sakhalin", new String[] {"Sakhalin Zeit", "SAKT",
-                                            "Sakhalin Sommerzeit", "SAKST"}},
-            {"Asia/Samarkand", UZT},
-            {"Asia/Seoul", KST},
-            {"Asia/Singapore", SGT},
-            {"Asia/Taipei", CTT},
-            {"Asia/Tel_Aviv", ISRAEL},
-            {"Asia/Tashkent", UZT},
-            {"Asia/Tbilisi", new String[] {"Georgische Zeit", "GET",
-                                           "Georgische Sommerzeit", "GEST"}},
-            {"Asia/Tehran", IRT},
-            {"Asia/Thimbu", BTT},
-            {"Asia/Thimphu", BTT},
-            {"Asia/Ujung_Pandang", CIT},
-            {"Asia/Ulaanbaatar", ULAT},
-            {"Asia/Ulan_Bator", ULAT},
-            {"Asia/Urumqi", CTT},
-            {"Asia/Ust-Nera", VLAT},
-            {"Asia/Vientiane", ICT},
-            {"Asia/Vladivostok", VLAT},
-            {"Asia/Yakutsk", YAKT},
-            {"Asia/Yekaterinburg", new String[] {"Jekaterinburger Zeit", "YEKT",
-                                                 "Jekaterinburger Sommerzeit", "YEKST"}},
-            {"Asia/Yerevan", ARMT},
-            {"Atlantic/Azores", new String[] {"Azoren Zeit", "AZOT",
-                                              "Azoren Sommerzeit", "AZOST"}},
-            {"Atlantic/Bermuda", AST},
-            {"Atlantic/Canary", WET},
-            {"Atlantic/Cape_Verde", new String[] {"Kap Verde Zeit", "CVT",
-                                                  "Kap Verde Sommerzeit", "CVST"}},
-            {"Atlantic/Faeroe", WET},
-            {"Atlantic/Faroe", WET},
-            {"Atlantic/Jan_Mayen", CET},
-            {"Atlantic/Madeira", WET},
-            {"Atlantic/Reykjavik", GMT},
-            {"Atlantic/South_Georgia", new String[] {"South Georgia Normalzeit", "GST",
-                                                     "South Georgia Sommerzeit", "GDT"}},
-            {"Atlantic/St_Helena", GMT},
-            {"Atlantic/Stanley", new String[] {"Falkland Inseln Zeit", "FKT",
-                                               "Falkland Inseln Sommerzeit", "FKST"}},
-            {"Australia/ACT", EST_NSW},
-            {"Australia/Adelaide", ADELAIDE},
-            {"Australia/Brisbane", BRISBANE},
-            {"Australia/Broken_Hill", BROKEN_HILL},
-            {"Australia/Canberra", EST_NSW},
-            {"Australia/Currie", EST_NSW},
-            {"Australia/Darwin", DARWIN},
-            {"Australia/Eucla", new String[] {"Zentral-Westliche Normalzeit (Australien)", "CWST",
-                                              "Zentral-Westliche Sommerzeit (Australien)", "CWST"}},
-            {"Australia/Hobart", TASMANIA},
-            {"Australia/LHI", LORD_HOWE},
-            {"Australia/Lindeman", BRISBANE},
-            {"Australia/Lord_Howe", LORD_HOWE},
-            {"Australia/Melbourne", VICTORIA},
-            {"Australia/North", DARWIN},
-            {"Australia/NSW", EST_NSW},
-            {"Australia/Perth", WST_AUS},
-            {"Australia/Queensland", BRISBANE},
-            {"Australia/South", ADELAIDE},
-            {"Australia/Sydney", EST_NSW},
-            {"Australia/Tasmania", TASMANIA},
-            {"Australia/Victoria", VICTORIA},
-            {"Australia/West", WST_AUS},
-            {"Australia/Yancowinna", BROKEN_HILL},
-            {"BET", BRT},
-            {"BST", BDT},
-            {"Brazil/Acre", AMT},
-            {"Brazil/DeNoronha", NORONHA},
-            {"Brazil/East", BRT},
-            {"Brazil/West", AMT},
-            {"Canada/Atlantic", AST},
-            {"Canada/Central", CST},
-            {"Canada/East-Saskatchewan", CST},
-            {"Canada/Eastern", EST},
-            {"Canada/Mountain", MST},
-            {"Canada/Newfoundland", NST},
-            {"Canada/Pacific", PST},
-            {"Canada/Yukon", PST},
-            {"Canada/Saskatchewan", CST},
-            {"CAT", CAT},
-            {"CET", CET},
-            {"Chile/Continental", CLT},
-            {"Chile/EasterIsland", EASTER},
-            {"CST6CDT", CST},
-            {"Cuba", CUBA},
-            {"EAT", EAT},
-            {"EET", EET},
-            {"Egypt", EET},
-            {"Eire", DUBLIN},
-            {"EST5EDT", EST},
-            {"Etc/Greenwich", GMT},
-            {"Etc/UCT", UTC},
-            {"Etc/Universal", UTC},
-            {"Etc/UTC", UTC},
-            {"Etc/Zulu", UTC},
-            {"Europe/Amsterdam", CET},
-            {"Europe/Andorra", CET},
-            {"Europe/Athens", EET},
-            {"Europe/Belfast", GMTBST},
-            {"Europe/Belgrade", CET},
-            {"Europe/Berlin", CET},
-            {"Europe/Bratislava", CET},
-            {"Europe/Brussels", CET},
-            {"Europe/Budapest", CET},
-            {"Europe/Busingen", CET},
-            {"Europe/Chisinau", EET},
-            {"Europe/Copenhagen", CET},
-            {"Europe/Dublin", DUBLIN},
-            {"Europe/Gibraltar", CET},
-            {"Europe/Guernsey", GMTBST},
-            {"Europe/Helsinki", EET},
-            {"Europe/Isle_of_Man", GMTBST},
-            {"Europe/Istanbul", EET},
-            {"Europe/Jersey", GMTBST},
-            {"Europe/Kaliningrad", FET},
-            {"Europe/Kiev", EET},
-            {"Europe/Lisbon", WET},
-            {"Europe/Ljubljana", CET},
-            {"Europe/London", GMTBST},
-            {"Europe/Luxembourg", CET},
-            {"Europe/Madrid", CET},
-            {"Europe/Malta", CET},
-            {"Europe/Mariehamn", EET},
-            {"Europe/Minsk", FET},
-            {"Europe/Monaco", CET},
-            {"Europe/Moscow", MSK},
-            {"Europe/Nicosia", EET},
-            {"Europe/Oslo", CET},
-            {"Europe/Podgorica", CET},
-            {"Europe/Prague", CET},
-            {"Europe/Riga", EET},
-            {"Europe/Rome", CET},
-            {"Europe/Samara", new String[] {"Samarische Zeit", "SAMT",
-                                            "Samarische Sommerzeit", "SAMST"}},
-            {"Europe/San_Marino", CET},
-            {"Europe/Sarajevo", CET},
-            {"Europe/Simferopol", EET},
-            {"Europe/Skopje", CET},
-            {"Europe/Sofia", EET},
-            {"Europe/Stockholm", CET},
-            {"Europe/Tallinn", EET},
-            {"Europe/Tirane", CET},
-            {"Europe/Tiraspol", EET},
-            {"Europe/Uzhgorod", EET},
-            {"Europe/Vaduz", CET},
-            {"Europe/Vatican", CET},
-            {"Europe/Vienna", CET},
-            {"Europe/Vilnius", EET},
-            {"Europe/Volgograd", new String[] {"Wolgograder Zeit", "VOLT",
-                                               "Wolgograder Sommerzeit", "VOLST"}},
-            {"Europe/Warsaw", CET},
-            {"Europe/Zagreb", CET},
-            {"Europe/Zaporozhye", EET},
-            {"Europe/Zurich", CET},
-            {"GB", GMTBST},
-            {"GB-Eire", GMTBST},
-            {"Greenwich", GMT},
-            {"Hongkong", HKT},
-            {"Iceland", GMT},
-            {"Iran", IRT},
-            {"IST", IST},
-            {"Indian/Antananarivo", EAT},
-            {"Indian/Chagos", new String[] {"Indischer Ozean Territorium Zeit", "IOT",
-                                            "Indischer Ozean Territorium Sommerzeit", "IOST"}},
-            {"Indian/Christmas", new String[] {"Christmas Island Zeit", "CXT",
-                                               "Christmas Island Sommerzeit", "CXST"}},
-            {"Indian/Cocos", new String[] {"Cocos Islands Zeit", "CCT",
-                                           "Cocos Islands Sommerzeit", "CCST"}},
-            {"Indian/Comoro", EAT},
-            {"Indian/Kerguelen", new String[] {"Franz\u00f6sisch S\u00fcd- u. Antarktische Landzeit", "TFT",
-                                               "Franz\u00f6sisch S\u00fcd- u. Antarktische Landsommerzeit", "TFST"}},
-            {"Indian/Mahe", new String[] {"Seychellen Zeit", "SCT",
-                                          "Seychellen Sommerzeit", "SCST"}},
-            {"Indian/Maldives", new String[] {"Maledivische Zeit", "MVT",
-                                              "Maledivische Sommerzeit", "MVST"}},
-            {"Indian/Mauritius", new String[] {"Mauritius Zeit", "MUT",
-                                               "Mauritius Sommerzeit", "MUST"}},
-            {"Indian/Mayotte", EAT},
-            {"Indian/Reunion", new String[] {"Reunion Zeit", "RET",
-                                             "Reunion Sommerzeit", "REST"}},
-            {"Israel", ISRAEL},
-            {"Jamaica", EST},
-            {"Japan", JST},
-            {"Kwajalein", MHT},
-            {"Libya", CET},
-            {"MET", new String[] {"Zentraleurop\u00e4ische Zeit", "MET",
-                                  "Zentraleurop\u00e4ische Sommerzeit", "MEST"}},
-            {"Mexico/BajaNorte", PST},
-            {"Mexico/BajaSur", MST},
-            {"Mexico/General", CST},
-            {"MIT", WST_SAMOA},
-            {"MST7MDT", MST},
-            {"Navajo", MST},
-            {"NET", ARMT},
-            {"NST", NZST},
-            {"NZ", NZST},
-            {"NZ-CHAT", CHAST},
-            {"PLT", PKT},
-            {"Portugal", WET},
-            {"PRT", AST},
-            {"Pacific/Apia", WST_SAMOA},
-            {"Pacific/Auckland", NZST},
-            {"Pacific/Chatham", CHAST},
-            {"Pacific/Chuuk", CHUT},
-            {"Pacific/Easter", EASTER},
-            {"Pacific/Efate", new String[] {"Vanuatu Zeit", "VUT",
-                                            "Vanuatu Sommerzeit", "VUST"}},
-            {"Pacific/Enderbury", new String[] {"Phoenix Inseln Zeit", "PHOT",
-                                                "Phoenix Inseln Sommerzeit", "PHOST"}},
-            {"Pacific/Fakaofo", new String[] {"Tokelau Zeit", "TKT",
-                                              "Tokelau Sommerzeit", "TKST"}},
-            {"Pacific/Fiji", new String[] {"Fidschi Zeit", "FJT",
-                                           "Fidschi Sommerzeit", "FJST"}},
-            {"Pacific/Funafuti", new String[] {"Tuvalu Zeit", "TVT",
-                                               "Tuvalu Sommerzeit", "TVST"}},
-            {"Pacific/Galapagos", new String[] {"Galapagos Zeit", "GALT",
-                                                "Galapagos Sommerzeit", "GALST"}},
-            {"Pacific/Gambier", GAMBIER},
-            {"Pacific/Guadalcanal", SBT},
-            {"Pacific/Guam", ChST},
-            {"Pacific/Johnston", HST},
-            {"Pacific/Kiritimati", new String[] {"Line Inseln Zeit", "LINT",
-                                                 "Line Inseln Sommerzeit", "LINST"}},
-            {"Pacific/Kosrae", new String[] {"Kosrae Zeit", "KOST",
-                                             "Kosrae Sommerzeit", "KOSST"}},
-            {"Pacific/Kwajalein", MHT},
-            {"Pacific/Majuro", MHT},
-            {"Pacific/Marquesas", new String[] {"Marquesas Zeit", "MART",
-                                                "Marquesas Sommerzeit", "MARST"}},
-            {"Pacific/Midway", SAMOA},
-            {"Pacific/Nauru", new String[] {"Nauru Zeit", "NRT",
-                                            "Nauru Sommerzeit", "NRST"}},
-            {"Pacific/Niue", new String[] {"Niue Zeit", "NUT",
-                                           "Niue Sommerzeit", "NUST"}},
-            {"Pacific/Norfolk", new String[] {"Norfolk Zeit", "NFT",
-                                              "Norfolk Sommerzeit", "NFST"}},
-            {"Pacific/Noumea", new String[] {"Neukaledonische Zeit", "NCT",
-                                             "Neukaledonische Sommerzeit", "NCST"}},
-            {"Pacific/Pago_Pago", SAMOA},
-            {"Pacific/Palau", new String[] {"Palau Zeit", "PWT",
-                                            "Palau Sommerzeit", "PWST"}},
-            {"Pacific/Pitcairn", PITCAIRN},
-            {"Pacific/Pohnpei", PONT},
-            {"Pacific/Ponape", PONT},
-            {"Pacific/Port_Moresby", new String[] {"Papua-Neuguinea Zeit", "PGT",
-                                                   "Papua-Neuguinea Sommerzeit", "PGST"}},
-            {"Pacific/Rarotonga", new String[] {"Cook-Inseln Zeit", "CKT",
-                                                "Cook-Inseln Sommerzeit", "CKHST"}},
-            {"Pacific/Saipan", ChST},
-            {"Pacific/Samoa", SAMOA},
-            {"Pacific/Tahiti", new String[] {"Tahiti Zeit", "TAHT",
-                                             "Tahiti Sommerzeit", "TAHST"}},
-            {"Pacific/Tarawa", new String[] {"Gilbert-Inseln Zeit", "GILT",
-                                             "Gilbert-Inseln Sommerzeit", "GILST"}},
-            {"Pacific/Tongatapu", new String[] {"Tonga Zeit", "TOT",
-                                                "Tonga Sommerzeit", "TOST"}},
-            {"Pacific/Truk", CHUT},
-            {"Pacific/Wake", new String[] {"Wake Zeit", "WAKT",
-                                           "Wake Sommerzeit", "WAKST"}},
-            {"Pacific/Wallis", new String[] {"Wallis u. Futuna Zeit", "WFT",
-                                             "Wallis u. Futuna Sommerzeit", "WFST"}},
-            {"Pacific/Yap", CHUT},
-            {"Poland", CET},
-            {"PRC", CTT},
-            {"PST8PDT", PST},
-            {"ROK", KST},
-            {"Singapore", SGT},
-            {"SST", SBT},
-            {"SystemV/AST4", AST},
-            {"SystemV/AST4ADT", AST},
-            {"SystemV/CST6", CST},
-            {"SystemV/CST6CDT", CST},
-            {"SystemV/EST5", EST},
-            {"SystemV/EST5EDT", EST},
-            {"SystemV/HST10", HST},
-            {"SystemV/MST7", MST},
-            {"SystemV/MST7MDT", MST},
-            {"SystemV/PST8", PST},
-            {"SystemV/PST8PDT", PST},
-            {"SystemV/YST9", AKST},
-            {"SystemV/YST9YDT", AKST},
-            {"Turkey", EET},
-            {"UCT", UTC},
-            {"Universal", UTC},
-            {"US/Alaska", AKST},
-            {"US/Aleutian", HAST},
-            {"US/Arizona", MST},
-            {"US/Central", CST},
-            {"US/Eastern", EST},
-            {"US/Hawaii", HST},
-            {"US/Indiana-Starke", CST},
-            {"US/East-Indiana", EST},
-            {"US/Michigan", EST},
-            {"US/Mountain", MST},
-            {"US/Pacific", PST},
-            {"US/Pacific-New", PST},
-            {"US/Samoa", SAMOA},
-            {"UTC", UTC},
-            {"VST", ICT},
-            {"W-SU", MSK},
-            {"WET", WET},
-            {"Zulu", UTC},
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_en.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames_en.java
deleted file mode 100755
index 5dfebd9..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_en.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, 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.
- */
-
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-public final class TimeZoneNames_en extends TimeZoneNamesBundle {
-
-    // This bundle is empty because the root bundle's content
-    // is adequate for this locale.
-    // The bundle is necessary to prevent the resource
-    // bundle lookup from falling back to the default
-    // locale.
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_en_CA.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames_en_CA.java
deleted file mode 100755
index 26f12a9..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_en_CA.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1996, 2007, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-public final class TimeZoneNames_en_CA extends TimeZoneNamesBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_en_GB.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames_en_GB.java
deleted file mode 100755
index 42d57b1..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_en_GB.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1996, 2007, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-public final class TimeZoneNames_en_GB extends TimeZoneNamesBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            {"Europe/London", new String[] {"Greenwich Mean Time", "GMT",
-                                            "British Summer Time", "BST"}},
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_en_IE.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames_en_IE.java
deleted file mode 100755
index fb12aee..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_en_IE.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1997, 2007, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-public final class TimeZoneNames_en_IE extends TimeZoneNamesBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            {"Europe/London", new String[] {"Greenwich Mean Time", "GMT",
-                                    "Irish Summer Time", "IST" /*Dublin*/}},
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_es.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames_es.java
deleted file mode 100755
index 4e36f05..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_es.java
+++ /dev/null
@@ -1,876 +0,0 @@
-/*
- * Copyright (c) 1997, 2011, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-public final class TimeZoneNames_es extends TimeZoneNamesBundle {
-
-    protected final Object[][] getContents() {
-        String ACT[] = new String[] {"Hora de Acre", "ACT",
-                                     "Hora de verano de Acre", "ACST"};
-        String ADELAIDE[] = new String[] {"Hora est\u00e1ndar Central (Sur de Australia)", "CST",
-                                          "Hora de verano Central (Sur de Australia)", "CST"};
-        String AGT[] = new String[] {"Hora de Argentina", "ART",
-                                     "Hora de verano de Argentina", "ARST"};
-        String AKST[] = new String[] {"Hora est\u00e1ndar de Alaska", "AKST",
-                                      "Hora de verano de Alaska", "AKDT"};
-        String AMT[] = new String[] {"Hora est\u00e1ndar de Amazonia", "AMT",
-                                     "Hora de verano de Amazonia", "AMST"};
-        String ARAST[] = new String[] {"Hora est\u00e1ndar de Arabia", "AST",
-                                       "Hora de verano de Arabia", "ADT"};
-        String ARMT[] = new String[] {"Hora de Armenia", "AMT",
-                                      "Hora de verano de Armenia", "AMST"};
-        String AST[] = new String[] {"Hora est\u00e1ndar Atl\u00e1ntico", "AST",
-                                     "Hora de verano Atl\u00e1ntico", "ADT"};
-        String BDT[] = new String[] {"Hora de Bangladesh", "BDT",
-                                     "Hora de verano de Bangladesh", "BDST"};
-        String BRISBANE[] = new String[] {"Hora est\u00e1ndar del Este (Queensland)", "EST",
-                                          "Hora de verano del Este (Queensland)", "EST"};
-        String BROKEN_HILL[] = new String[] {"Hora est\u00e1ndar Central (Sur de Australia/Nueva Gales del Sur)", "CST",
-                                             "Hora de verano Central (Sur de Australia/Nueva Gales del Sur)", "CST"};
-        String BRT[] = new String[] {"Hora de Brasil", "BRT",
-                                     "Hora de verano de Brasil", "BRST"};
-        String BTT[] = new String[] {"Hora de But\u00e1n", "BTT",
-                                     "Hora de verano de But\u00e1n", "BTST"};
-        String CAT[] = new String[] {"Hora de \u00c1frica Central", "CAT",
-                                     "Hora de verano de \u00c1frica Central", "CAST"};
-        String CET[] = new String[] {"Hora de Europa Central", "CET",
-                                     "Hora de verano de Europa Central", "CEST"};
-        String CHAST[] = new String[] {"Hora est\u00e1ndar de Chatham", "CHAST",
-                                       "Hora de verano de Chatham", "CHADT"};
-        String ChST[] = new String[] {"Hora est\u00e1ndar de Chamorro", "ChST",
-                                      "Hora de verano de Chamorro", "ChDT"};
-        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
-                                      "Chuuk Summer Time", "CHUST"};
-        String CIT[] = new String[] {"Hora de Indonesia Central", "CIT",
-                                     "Hora de verano de Indonesia Central", "CIST"};
-        String CLT[] = new String[] {"Hora de Chile", "CLT",
-                                     "Hora de verano de Chile", "CLST"};
-        String CST[] = new String[] {"Hora est\u00e1ndar Central", "CST",
-                                     "Hora de verano Central", "CDT"};
-        String CTT[] = new String[] {"Hora est\u00e1ndar de China", "CST",
-                                     "Hora de verano de China", "CDT"};
-        String CUBA[] = new String[] {"Hora est\u00e1ndar de Cuba", "CST",
-                                      "Hora de verano de Cuba", "CDT"};
-        String DARWIN[] = new String[] {"Hora est\u00e1ndar Central (territorio del Norte)", "CST",
-                                        "Hora de verano Central (territorio del Norte)", "CST"};
-        String DUBLIN[] = new String[] {"Hora del Meridiano de Greenwich", "GMT",
-                                        "Hora de verano de Irlanda", "IST"};
-        String EAT[] = new String[] {"Hora de \u00c1frica Oriental", "EAT",
-                                     "Hora de verano de \u00c1frica Oriental", "EAST"};
-        String EASTER[] = new String[] {"Hora de la Isla de Pascua", "EAST",
-                                        "Hora de verano de la Isla de Pascua", "EASST"};
-        String EET[] = new String[] {"Hora de Europa Oriental", "EET",
-                                     "Hora de verano de Europa Oriental", "EEST"};
-        String EGT[] = new String[] {"Hora de Groenlandia Oriental", "EGT",
-                                     "Hora de verano de Groenlandia Oriental", "EGST"};
-        String EST[] = new String[] {"Hora est\u00e1ndar Oriental", "EST",
-                                     "Hora de verano Oriental", "EDT"};
-        String EST_NSW[] = new String[] {"Hora est\u00e1ndar Oriental (Nueva Gales del Sur)", "EST",
-                                         "Hora de verano Oriental (Nueva Gales del Sur)", "EST"};
-        String FET[] = new String[] {"Further-eastern European Time", "FET",
-                                     "Further-eastern European Summer Time", "FEST"};
-        String GHMT[] = new String[] {"Hora central de Ghana", "GMT",
-                                      "Hora de verano de Ghana", "GHST"};
-        String GAMBIER[] =  new String[] {"Hora de Gambier", "GAMT",
-                                          "Hora de verano de Gambier", "GAMST"};
-        String GMT[] = new String[] {"Hora del Meridiano de Greenwich", "GMT",
-                                     "Hora del Meridiano de Greenwich", "GMT"};
-        String GMTBST[] = new String[] {"Hora del Meridiano de Greenwich", "GMT",
-                                        "Hora de verano de Gran Breta\u00f1a", "BST"};
-        String GST[] = new String[] {"Hora est\u00e1ndar del Golfo", "GST",
-                                     "Hora de verano del Golfo", "GDT"};
-        String HAST[] = new String[] {"Hora est\u00e1ndar de Hawaii-Aleutianas", "HAST",
-                                      "Hora de verano de Hawaii-Aleutianas", "HADT"};
-        String HKT[] =  new String[] {"Hora de Hong Kong", "HKT",
-                                      "Hora de verano de Hong Kong", "HKST"};
-        String HST[] = new String[] {"Hora est\u00e1ndar de Hawaii", "HST",
-                                     "Hora de verano de Hawaii", "HDT"};
-        String ICT[] = new String[] {"Hora de Indochina", "ICT",
-                                     "Hora de verano de Indochina", "ICST"};
-        String IRT[] = new String[] {"Hora est\u00e1ndar de Ir\u00e1n", "IRST",
-                                     "Hora de verano de Ir\u00e1n", "IRDT"};
-        String ISRAEL[] = new String[] {"Hora est\u00e1ndar de Israel", "IST",
-                                        "Hora de verano de Israel", "IDT"};
-        String IST[] = new String[] {"Hora est\u00e1ndar de India", "IST",
-                                     "Hora de verano de India", "IDT"};
-        String JST[] = new String[] {"Hora est\u00e1ndar de Jap\u00f3n", "JST",
-                                     "Hora de verano de Jap\u00f3n", "JDT"};
-        String KST[] = new String[] {"Hora est\u00e1ndar de Corea", "KST",
-                                     "Hora de verano de Corea", "KDT"};
-        String LORD_HOWE[] = new String[] {"Hora est\u00e1ndar de Lord Howe", "LHST",
-                                           "Hora de verano de Lord Howe", "LHST"};
-        String MHT[] = new String[] {"Hora de las Islas Marshall", "MHT",
-                                     "Hora de verano de las Islas Marshall", "MHST"};
-        String MSK[] = new String[] {"Hora est\u00e1ndar de Mosc\u00fa", "MSK",
-                                     "Hora de verano de Mosc\u00fa", "MSD"};
-        String MST[] = new String[] {"Hora est\u00e1ndar de las Rocosas", "MST",
-                                     "Hora de verano de las Rocosas", "MDT"};
-        String MYT[] = new String[] {"Hora de Malasia", "MYT",
-                                     "Hora de verano de Malasia", "MYST"};
-        String NORONHA[] = new String[] {"Hora de Fernando de Noronha", "FNT",
-                                         "Hora de verano de Fernando de Noronha", "FNST"};
-        String NOVT[] = new String[] {"Hora de Novosibirsk", "NOVT",
-                                      "Hora de verano de Novosibirsk", "NOVST"};
-        String NPT[] = new String[] {"Hora de Nepal", "NPT",
-                                     "Hora de verano de Nepal", "NPST"};
-        String NST[] = new String[] {"Hora est\u00e1ndar de Terranova", "NST",
-                                     "Hora de verano de Terranova", "NDT"};
-        String NZST[] = new String[] {"Hora est\u00e1ndar de Nueva Zelanda", "NZST",
-                                      "Hora de verano de Nueva Zelanda", "NZDT"};
-        String PITCAIRN[] = new String[] {"Hora est\u00e1ndar de Pitcairn", "PST",
-                                          "Hora de verano de Pitcairn", "PDT"};
-        String PKT[] = new String[] {"Hora de Pakist\u00e1n", "PKT",
-                                     "Hora de verano de Pakist\u00e1n", "PKST"};
-        String PONT[] = new String[] {"Pohnpei Time", "PONT",
-                                      "Pohnpei Summer Time", "PONST"};
-        String PST[] = new String[] {"Hora est\u00e1ndar del Pac\u00edfico", "PST",
-                                     "Hora de verano del Pac\u00edfico", "PDT"};
-        String SAMOA[] = new String[] {"Hora est\u00e1ndar de Samoa", "SST",
-                                       "Hora de verano de Samoa", "SDT"};
-        String SAST[] = new String[] {"Hora est\u00e1ndar de Sud\u00e1frica", "SAST",
-                                      "Hora de verano de Sud\u00e1frica", "SAST"};
-        String SBT[] = new String[] {"Hora de las Islas Solomon", "SBT",
-                                     "Hora de verano de las Islas Solomon", "SBST"};
-        String SGT[] = new String[] {"Hora de Singapur", "SGT",
-                                     "Hora de verano de  Singapur", "SGST"};
-        String SLST[] = new String[] {"Hora del Meridiano de Greenwich", "GMT",
-                                      "Hora de verano de Sierra Leona", "SLST"};
-        String TASMANIA[] = new String[] {"Hora est\u00e1ndar del Este (Tasmania)", "EST",
-                                          "Hora de verano del Este (Tasmania)", "EST"};
-        String TMT[] = new String[] {"Hora de Turkmenist\u00e1n", "TMT",
-                                     "Hora de verano de Turkmenist\u00e1n", "TMST"};
-        String ULAT[]= new String[] {"Hora de Ulan Bator", "ULAT",
-                                     "Hora de verano de Ulan Bator", "ULAST"};
-        String UTC[] = new String[] {"Hora Universal Coordinada", "UTC",
-                                     "Hora Universal Coordinada", "UTC"};
-        String UZT[] = new String[] {"Hora de Uzbekist\u00e1n", "UZT",
-                                     "Hora de verano de Uzbekist\u00e1n", "UZST"};
-        String VICTORIA[] = new String[] {"Hora est\u00e1ndar del Este (Victoria)", "EST",
-                                          "Hora de verano del Este (Victoria)", "EST"};
-        String VLAT[] = new String[] {"Hora de Vladivostok", "VLAT",
-                                      "Hora de verano de Vladivostok", "VLAST"};
-        String WART[] = new String[] {"Hora de Argentina Occidental", "WART",
-                                      "Hora de verano de Argentina Occidental", "WARST"};
-        String WAT[] = new String[] {"Hora de \u00c1frica Occidental", "WAT",
-                                     "Hora de verano de \u00c1frica Occidental", "WAST"};
-        String WET[] = new String[] {"Hora de Europa Occidental", "WET",
-                                     "Hora de verano de Europa Occidental", "WEST"};
-        String WIT[] = new String[] {"Hora de Indonesia Occidental", "WIT",
-                                     "Indonesia Hora de verano de Indonesia Occidental", "WIST"};
-        String WST_AUS[] = new String[] {"Hora est\u00e1ndar Occidental (Australia)", "WST",
-                                         "Hora de verano Occidental (Australia)", "WST"};
-        String WST_SAMOA[] = new String[] {"Hora de Samoa Occidental", "WST",
-                                           "Hora de verano de Samoa Occidental", "WSDT"};
-        String YAKT[] = new String[] {"Hora de Yakutsk", "YAKT",
-                                      "Hora de verano de Yakutsk", "YAKST"};
-
-        return new Object[][] {
-            {"America/Los_Angeles", PST},
-            {"PST", PST},
-            {"America/Denver", MST},
-            {"MST", MST},
-            {"America/Phoenix", MST},
-            {"PNT", MST},
-            {"America/Chicago", CST},
-            {"CST", CST},
-            {"America/New_York", EST},
-            {"EST", EST},
-            {"America/Indianapolis", EST},
-            {"IET", EST},
-            {"Pacific/Honolulu", HST},
-            {"HST", HST},
-            {"America/Anchorage", AKST},
-            {"AST", AKST},
-            {"America/Halifax", AST},
-            {"America/Sitka", AKST},
-            {"America/St_Johns", NST},
-            {"CNT", NST},
-            {"Europe/Paris", CET},
-            {"ECT", CET},
-            {"GMT", GMT},
-            {"Africa/Casablanca", WET},
-            {"Asia/Jerusalem", ISRAEL},
-            {"Asia/Tokyo", JST},
-            {"JST", JST},
-            {"Europe/Bucharest", EET},
-            {"Asia/Shanghai", CTT},
-            {"CTT", CTT},
-            /* Don't change the order of the above zones
-             * to keep compatibility with the previous version.
-             */
-
-            {"ACT", DARWIN},
-            {"AET", EST_NSW},
-            {"AGT", AGT},
-            {"ART", EET},
-            {"Africa/Abidjan", GMT},
-            {"Africa/Accra", GHMT},
-            {"Africa/Addis_Ababa", EAT},
-            {"Africa/Algiers", CET},
-            {"Africa/Asmara", EAT},
-            {"Africa/Asmera", EAT},
-            {"Africa/Bamako", GMT},
-            {"Africa/Bangui", WAT},
-            {"Africa/Banjul", GMT},
-            {"Africa/Bissau", GMT},
-            {"Africa/Blantyre", CAT},
-            {"Africa/Brazzaville", WAT},
-            {"Africa/Bujumbura", CAT},
-            {"Africa/Cairo", EET},
-            {"Africa/Ceuta", CET},
-            {"Africa/Conakry", GMT},
-            {"Africa/Dakar", GMT},
-            {"Africa/Dar_es_Salaam", EAT},
-            {"Africa/Djibouti", EAT},
-            {"Africa/Douala", WAT},
-            {"Africa/El_Aaiun", WET},
-            {"Africa/Freetown", SLST},
-            {"Africa/Gaborone", CAT},
-            {"Africa/Harare", CAT},
-            {"Africa/Johannesburg", SAST},
-            {"Africa/Juba", EAT},
-            {"Africa/Kampala", EAT},
-            {"Africa/Khartoum", EAT},
-            {"Africa/Kigali", CAT},
-            {"Africa/Kinshasa", WAT},
-            {"Africa/Lagos", WAT},
-            {"Africa/Libreville", WAT},
-            {"Africa/Lome", GMT},
-            {"Africa/Luanda", WAT},
-            {"Africa/Lubumbashi", CAT},
-            {"Africa/Lusaka", CAT},
-            {"Africa/Malabo", WAT},
-            {"Africa/Maputo", CAT},
-            {"Africa/Maseru", SAST},
-            {"Africa/Mbabane", SAST},
-            {"Africa/Mogadishu", EAT},
-            {"Africa/Monrovia", GMT},
-            {"Africa/Nairobi", EAT},
-            {"Africa/Ndjamena", WAT},
-            {"Africa/Niamey", WAT},
-            {"Africa/Nouakchott", GMT},
-            {"Africa/Ouagadougou", GMT},
-            {"Africa/Porto-Novo", WAT},
-            {"Africa/Sao_Tome", GMT},
-            {"Africa/Timbuktu", GMT},
-            {"Africa/Tripoli", CET},
-            {"Africa/Tunis", CET},
-            {"Africa/Windhoek", WAT},
-            {"America/Adak", HAST},
-            {"America/Anguilla", AST},
-            {"America/Antigua", AST},
-            {"America/Araguaina", BRT},
-            {"America/Argentina/Buenos_Aires", AGT},
-            {"America/Argentina/Catamarca", AGT},
-            {"America/Argentina/ComodRivadavia", AGT},
-            {"America/Argentina/Cordoba", AGT},
-            {"America/Argentina/Jujuy", AGT},
-            {"America/Argentina/La_Rioja", AGT},
-            {"America/Argentina/Mendoza", AGT},
-            {"America/Argentina/Rio_Gallegos", AGT},
-            {"America/Argentina/Salta", AGT},
-            {"America/Argentina/San_Juan", AGT},
-            {"America/Argentina/San_Luis", WART},
-            {"America/Argentina/Tucuman", AGT},
-            {"America/Argentina/Ushuaia", AGT},
-            {"America/Aruba", AST},
-            {"America/Asuncion", new String[] {"Hora de Paraguay", "PYT",
-                                               "Hora de verano de Paraguay", "PYST"}},
-            {"America/Atikokan", EST},
-            {"America/Atka", HAST},
-            {"America/Bahia", BRT},
-            {"America/Bahia_Banderas", CST},
-            {"America/Barbados", AST},
-            {"America/Belem", BRT},
-            {"America/Belize", CST},
-            {"America/Blanc-Sablon", AST},
-            {"America/Boa_Vista", AMT},
-            {"America/Bogota", new String[] {"Hora de Colombia", "COT",
-                                             "Hora de verano de Colombia", "COST"}},
-            {"America/Boise", MST},
-            {"America/Buenos_Aires", AGT},
-            {"America/Cambridge_Bay", MST},
-            {"America/Campo_Grande", AMT},
-            {"America/Cancun", CST},
-            {"America/Caracas", new String[] {"Hora de Venezuela", "VET",
-                                              "Hora de verano de Venezuela", "VEST"}},
-            {"America/Catamarca", AGT},
-            {"America/Cayenne", new String[] {"Hora de la Guayana Francesa", "GFT",
-                                              "Hora de verano de la Guayana Francesa", "GFST"}},
-            {"America/Cayman", EST},
-            {"America/Chihuahua", MST},
-            {"America/Creston", MST},
-            {"America/Coral_Harbour", EST},
-            {"America/Cordoba", AGT},
-            {"America/Costa_Rica", CST},
-            {"America/Cuiaba", AMT},
-            {"America/Curacao", AST},
-            {"America/Danmarkshavn", GMT},
-            {"America/Dawson", PST},
-            {"America/Dawson_Creek", MST},
-            {"America/Detroit", EST},
-            {"America/Dominica", AST},
-            {"America/Edmonton", MST},
-            {"America/Eirunepe", AMT},
-            {"America/El_Salvador", CST},
-            {"America/Ensenada", PST},
-            {"America/Fort_Wayne", EST},
-            {"America/Fortaleza", BRT},
-            {"America/Glace_Bay", AST},
-            {"America/Godthab", new String[] {"Hora de Groenlandia Occidental", "WGT",
-                                              "Hora de verano de Groenlandia Occidental", "WGST"}},
-            {"America/Goose_Bay", AST},
-            {"America/Grand_Turk", EST},
-            {"America/Grenada", AST},
-            {"America/Guadeloupe", AST},
-            {"America/Guatemala", CST},
-            {"America/Guayaquil", new String[] {"Hora de Ecuador", "ECT",
-                                                "Hora de verano de Ecuador", "ECST"}},
-            {"America/Guyana", new String[] {"Hora de Guyana", "GYT",
-                                             "Hora de verano de Guyana", "GYST"}},
-            {"America/Havana", CUBA},
-            {"America/Hermosillo", MST},
-            {"America/Indiana/Indianapolis", EST},
-            {"America/Indiana/Knox", CST},
-            {"America/Indiana/Marengo", EST},
-            {"America/Indiana/Petersburg", EST},
-            {"America/Indiana/Tell_City", CST},
-            {"America/Indiana/Vevay", EST},
-            {"America/Indiana/Vincennes", EST},
-            {"America/Indiana/Winamac", EST},
-            {"America/Inuvik", MST},
-            {"America/Iqaluit", EST},
-            {"America/Jamaica", EST},
-            {"America/Jujuy", AGT},
-            {"America/Juneau", AKST},
-            {"America/Kentucky/Louisville", EST},
-            {"America/Kentucky/Monticello", EST},
-            {"America/Knox_IN", CST},
-            {"America/Kralendijk", AST},
-            {"America/La_Paz", new String[] {"Hora de Bolivia", "BOT",
-                                             "Hora de verano de Bolivia", "BOST"}},
-            {"America/Lima", new String[] {"Hora de Per\u00fa", "PET",
-                                           "Hora de verano de Per\u00fa", "PEST"}},
-            {"America/Louisville", EST},
-            {"America/Lower_Princes", AST},
-            {"America/Maceio", BRT},
-            {"America/Managua", CST},
-            {"America/Manaus", AMT},
-            {"America/Marigot", AST},
-            {"America/Martinique", AST},
-            {"America/Matamoros", CST},
-            {"America/Mazatlan", MST},
-            {"America/Mendoza", AGT},
-            {"America/Menominee", CST},
-            {"America/Merida", CST},
-            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
-                                                 "Metlakatla Daylight Time", "MeDT"}},
-            {"America/Mexico_City", CST},
-            {"America/Miquelon", new String[] {"Hora est\u00e1ndar de Pierre & Miquelon", "PMST",
-                                               "Hora de verano de Pierre & Miquelon", "PMDT"}},
-            {"America/Moncton", AST},
-            {"America/Montevideo", new String[] {"Hora de Uruguay", "UYT",
-                                                 "Hora de verano de Uruguay", "UYST"}},
-            {"America/Monterrey", CST},
-            {"America/Montreal", EST},
-            {"America/Montserrat", AST},
-            {"America/Nassau", EST},
-            {"America/Nipigon", EST},
-            {"America/Nome", AKST},
-            {"America/Noronha", NORONHA},
-            {"America/North_Dakota/Beulah", CST},
-            {"America/North_Dakota/Center", CST},
-            {"America/North_Dakota/New_Salem", CST},
-            {"America/Ojinaga", MST},
-            {"America/Panama", EST},
-            {"America/Pangnirtung", EST},
-            {"America/Paramaribo", new String[] {"Hora de Surinam", "SRT",
-                                                 "Hora de verano de Surinam", "SRST"}},
-            {"America/Port-au-Prince", EST},
-            {"America/Port_of_Spain", AST},
-            {"America/Porto_Acre", AMT},
-            {"America/Porto_Velho", AMT},
-            {"America/Puerto_Rico", AST},
-            {"America/Rainy_River", CST},
-            {"America/Rankin_Inlet", CST},
-            {"America/Recife", BRT},
-            {"America/Regina", CST},
-            {"America/Resolute", CST},
-            {"America/Rio_Branco", AMT},
-            {"America/Rosario", AGT},
-            {"America/Santa_Isabel", PST},
-            {"America/Santarem", BRT},
-            {"America/Santiago", CLT},
-            {"America/Santo_Domingo", AST},
-            {"America/Sao_Paulo", BRT},
-            {"America/Scoresbysund", EGT},
-            {"America/Shiprock", MST},
-            {"America/St_Barthelemy", AST},
-            {"America/St_Kitts", AST},
-            {"America/St_Lucia", AST},
-            {"America/St_Thomas", AST},
-            {"America/St_Vincent", AST},
-            {"America/Swift_Current", CST},
-            {"America/Tegucigalpa", CST},
-            {"America/Thule", AST},
-            {"America/Thunder_Bay", EST},
-            {"America/Tijuana", PST},
-            {"America/Toronto", EST},
-            {"America/Tortola", AST},
-            {"America/Vancouver", PST},
-            {"America/Virgin", AST},
-            {"America/Whitehorse", PST},
-            {"America/Winnipeg", CST},
-            {"America/Yakutat", AKST},
-            {"America/Yellowknife", MST},
-            {"Antarctica/Casey", WST_AUS},
-            {"Antarctica/Davis", new String[] {"Hora de Davis", "DAVT",
-                                               "Hora de verano de Davis", "DAVST"}},
-            {"Antarctica/DumontDUrville", new String[] {"Hora de Dumont-d'Urville", "DDUT",
-                                                        "Hora de verano de Dumont-d'Urville", "DDUST"}},
-            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
-                                                   "Macquarie Island Summer Time", "MIST"}},
-            {"Antarctica/Mawson", new String[] {"Hora de Mawson", "MAWT",
-                                                "Hora de verano de Mawson", "MAWST"}},
-            {"Antarctica/McMurdo", NZST},
-            {"Antarctica/Palmer", CLT},
-            {"Antarctica/Rothera", new String[] {"Hora de Rothera", "ROTT",
-                                                 "Hora de verano de Rothera", "ROTST"}},
-            {"Antarctica/South_Pole", NZST},
-            {"Antarctica/Syowa", new String[] {"Hora de Syowa", "SYOT",
-                                               "Hora de verano de Syowa", "SYOST"}},
-            {"Antarctica/Vostok", new String[] {"Hora de Vostok", "VOST",
-                                                "Hora de verano de Vostok", "VOSST"}},
-            {"Arctic/Longyearbyen", CET},
-            {"Asia/Aden", ARAST},
-            {"Asia/Almaty", new String[] {"Hora de Alma-Ata", "ALMT",
-                                          "Hora de verano de Alma-Ata", "ALMST"}},
-            {"Asia/Amman", EET},
-            {"Asia/Anadyr", new String[] {"Hora de Anadyr", "ANAT",
-                                          "Hora de verano de Anadyr", "ANAST"}},
-            {"Asia/Aqtau", new String[] {"Hora de Aqtau", "AQTT",
-                                         "Hora de verano de Aqtau", "AQTST"}},
-            {"Asia/Aqtobe", new String[] {"Hora de Aqtobe", "AQTT",
-                                          "Hora de verano de Aqtobe", "AQTST"}},
-            {"Asia/Ashgabat", TMT},
-            {"Asia/Ashkhabad", TMT},
-            {"Asia/Baghdad", ARAST},
-            {"Asia/Bahrain", ARAST},
-            {"Asia/Baku", new String[] {"Hora de Azerbaiy\u00e1n", "AZT",
-                                        "Hora de verano de Azerbaiy\u00e1n", "AZST"}},
-            {"Asia/Bangkok", ICT},
-            {"Asia/Beirut", EET},
-            {"Asia/Bishkek", new String[] {"Hora de Kirguizist\u00e1n", "KGT",
-                                           "Hora de verano de Kirguizist\u00e1n", "KGST"}},
-            {"Asia/Brunei", new String[] {"Hora de Brunei", "BNT",
-                                          "Hora de verano de Brunei", "BNST"}},
-            {"Asia/Calcutta", IST},
-            {"Asia/Choibalsan", new String[] {"Hora de Choibalsan", "CHOT",
-                                              "Hora de verano de Choibalsan", "CHOST"}},
-            {"Asia/Chongqing", CTT},
-            {"Asia/Chungking", CTT},
-            {"Asia/Colombo", IST},
-            {"Asia/Dacca", BDT},
-            {"Asia/Dhaka", BDT},
-            {"Asia/Dili", new String[] {"Hora de Timor Leste", "TLT",
-                                        "Hora de verano de Timor Leste", "TLST"}},
-            {"Asia/Damascus", EET},
-            {"Asia/Dubai", GST},
-            {"Asia/Dushanbe", new String[] {"Hora de Tajikist\u00e1n", "TJT",
-                                            "Hora de verano de Tajikist\u00e1n", "TJST"}},
-            {"Asia/Gaza", EET},
-            {"Asia/Harbin", CTT},
-            {"Asia/Hebron", EET},
-            {"Asia/Ho_Chi_Minh", ICT},
-            {"Asia/Hong_Kong", HKT},
-            {"Asia/Hovd", new String[] {"Hora de Hovd", "HOVT",
-                                        "Hora de verano de Hovd", "HOVST"}},
-            {"Asia/Irkutsk", new String[] {"Hora de Irkutsk", "IRKT",
-                                           "Hora de verano de Irkutsk", "IRKST"}},
-            {"Asia/Istanbul", EET},
-            {"Asia/Jakarta", WIT},
-            {"Asia/Jayapura", new String[] {"Hora de Indonesia Oriental", "EIT",
-                                            "Hora de verano de Indonesia Oriental", "EIST"}},
-            {"Asia/Kabul", new String[] {"Hora de Afganist\u00e1n", "AFT",
-                                         "Hora de verano de Afganist\u00e1n", "AFST"}},
-            {"Asia/Kamchatka", new String[] {"Hora de Petropavlovsk-Kamchatski", "PETT",
-                                             "Hora de verano de Petropavlovsk-Kamchatski", "PETST"}},
-            {"Asia/Karachi", PKT},
-            {"Asia/Kashgar", CTT},
-            {"Asia/Kathmandu", NPT},
-            {"Asia/Katmandu", NPT},
-            {"Asia/Khandyga", YAKT},
-            {"Asia/Kolkata", IST},
-            {"Asia/Krasnoyarsk", new String[] {"Hora de Krasnoyarsk", "KRAT",
-                                               "Hora de verano de Krasnoyarsk", "KRAST"}},
-            {"Asia/Kuala_Lumpur", MYT},
-            {"Asia/Kuching", MYT},
-            {"Asia/Kuwait", ARAST},
-            {"Asia/Macao", CTT},
-            {"Asia/Macau", CTT},
-            {"Asia/Magadan", new String[] {"Hora de Magad\u00e1n", "MAGT",
-                                           "Hora de verano de Magad\u00e1n", "MAGST"}},
-            {"Asia/Makassar", CIT},
-            {"Asia/Manila", new String[] {"Hora de Filipinas", "PHT",
-                                          "Hora de verano de Filipinas", "PHST"}},
-            {"Asia/Muscat", GST},
-            {"Asia/Nicosia", EET},
-            {"Asia/Novokuznetsk", NOVT},
-            {"Asia/Novosibirsk", NOVT},
-            {"Asia/Oral", new String[] {"Hora de Uralsk", "ORAT",
-                                        "Hora de verano de Uralsk", "ORAST"}},
-            {"Asia/Omsk", new String[] {"Hora de Omsk", "OMST",
-                                        "Hora de verano de Omsk", "OMSST"}},
-            {"Asia/Phnom_Penh", ICT},
-            {"Asia/Pontianak", WIT},
-            {"Asia/Pyongyang", KST},
-            {"Asia/Qatar", ARAST},
-            {"Asia/Qyzylorda", new String[] {"Hora de Qyzylorda", "QYZT",
-                                             "Hora de verano de Qyzylorda", "QYZST"}},
-            {"Asia/Rangoon", new String[] {"Hora de Myanmar", "MMT",
-                                           "Hora de verano de Myanmar", "MMST"}},
-            {"Asia/Riyadh", ARAST},
-            {"Asia/Saigon", ICT},
-            {"Asia/Sakhalin", new String[] {"Hora de Sajalin", "SAKT",
-                                            "Hora de verano de Sajalin", "SAKST"}},
-            {"Asia/Samarkand", UZT},
-            {"Asia/Seoul", KST},
-            {"Asia/Singapore", SGT},
-            {"Asia/Taipei", CTT},
-            {"Asia/Tel_Aviv", ISRAEL},
-            {"Asia/Tashkent", UZT},
-            {"Asia/Tbilisi", new String[] {"Hora de Georgia", "GET",
-                                           "Hora de verano de Georgia", "GEST"}},
-            {"Asia/Tehran", IRT},
-            {"Asia/Thimbu", BTT},
-            {"Asia/Thimphu", BTT},
-            {"Asia/Ujung_Pandang", CIT},
-            {"Asia/Ulaanbaatar", ULAT},
-            {"Asia/Ulan_Bator", ULAT},
-            {"Asia/Urumqi", CTT},
-            {"Asia/Ust-Nera", VLAT},
-            {"Asia/Vientiane", ICT},
-            {"Asia/Vladivostok", VLAT},
-            {"Asia/Yakutsk", YAKT},
-            {"Asia/Yekaterinburg", new String[] {"Hora de Ekaterinburgo", "YEKT",
-                                                 "Hora de verano de Ekaterinburgo", "YEKST"}},
-            {"Asia/Yerevan", ARMT},
-            {"Atlantic/Azores", new String[] {"Hora de Azores", "AZOT",
-                                              "Hora de verano de Azores", "AZOST"}},
-            {"Atlantic/Bermuda", AST},
-            {"Atlantic/Canary", WET},
-            {"Atlantic/Cape_Verde", new String[] {"Hora de Cabo Verde", "CVT",
-                                                  "Hora de verano de Cabo Verde", "CVST"}},
-            {"Atlantic/Faeroe", WET},
-            {"Atlantic/Faroe", WET},
-            {"Atlantic/Jan_Mayen", CET},
-            {"Atlantic/Madeira", WET},
-            {"Atlantic/Reykjavik", GMT},
-            {"Atlantic/South_Georgia", new String[] {"Hora est\u00e1ndar de Georgia del Sur", "GST",
-                                                     "Hora de verano de Georgia del Sur", "GDT"}},
-            {"Atlantic/St_Helena", GMT},
-            {"Atlantic/Stanley", new String[] {"Hora de las islas Malvinas", "FKT",
-                                               "Hora de verano de las islas Malvinas", "FKST"}},
-            {"Australia/ACT", EST_NSW},
-            {"Australia/Adelaide", ADELAIDE},
-            {"Australia/Brisbane", BRISBANE},
-            {"Australia/Broken_Hill", BROKEN_HILL},
-            {"Australia/Canberra", EST_NSW},
-            {"Australia/Currie", EST_NSW},
-            {"Australia/Darwin", DARWIN},
-            {"Australia/Eucla", new String[] {"Hora est\u00e1ndar de Australia Central y Occidental", "CWST",
-                                              "Hora de verano de Australia Central y Occidental", "CWST"}},
-            {"Australia/Hobart", TASMANIA},
-            {"Australia/LHI", LORD_HOWE},
-            {"Australia/Lindeman", BRISBANE},
-            {"Australia/Lord_Howe", LORD_HOWE},
-            {"Australia/Melbourne", VICTORIA},
-            {"Australia/North", DARWIN},
-            {"Australia/NSW", EST_NSW},
-            {"Australia/Perth", WST_AUS},
-            {"Australia/Queensland", BRISBANE},
-            {"Australia/South", ADELAIDE},
-            {"Australia/Sydney", EST_NSW},
-            {"Australia/Tasmania", TASMANIA},
-            {"Australia/Victoria", VICTORIA},
-            {"Australia/West", WST_AUS},
-            {"Australia/Yancowinna", BROKEN_HILL},
-            {"BET", BRT},
-            {"BST", BDT},
-            {"Brazil/Acre", AMT},
-            {"Brazil/DeNoronha", NORONHA},
-            {"Brazil/East", BRT},
-            {"Brazil/West", AMT},
-            {"Canada/Atlantic", AST},
-            {"Canada/Central", CST},
-            {"Canada/East-Saskatchewan", CST},
-            {"Canada/Eastern", EST},
-            {"Canada/Mountain", MST},
-            {"Canada/Newfoundland", NST},
-            {"Canada/Pacific", PST},
-            {"Canada/Yukon", PST},
-            {"Canada/Saskatchewan", CST},
-            {"CAT", CAT},
-            {"CET", CET},
-            {"Chile/Continental", CLT},
-            {"Chile/EasterIsland", EASTER},
-            {"CST6CDT", CST},
-            {"Cuba", CUBA},
-            {"EAT", EAT},
-            {"EET", EET},
-            {"Egypt", EET},
-            {"Eire", DUBLIN},
-            {"EST5EDT", EST},
-            {"Etc/Greenwich", GMT},
-            {"Etc/UCT", UTC},
-            {"Etc/Universal", UTC},
-            {"Etc/UTC", UTC},
-            {"Etc/Zulu", UTC},
-            {"Europe/Amsterdam", CET},
-            {"Europe/Andorra", CET},
-            {"Europe/Athens", EET},
-            {"Europe/Belfast", GMTBST},
-            {"Europe/Belgrade", CET},
-            {"Europe/Berlin", CET},
-            {"Europe/Bratislava", CET},
-            {"Europe/Brussels", CET},
-            {"Europe/Budapest", CET},
-            {"Europe/Busingen", CET},
-            {"Europe/Chisinau", EET},
-            {"Europe/Copenhagen", CET},
-            {"Europe/Dublin", DUBLIN},
-            {"Europe/Gibraltar", CET},
-            {"Europe/Guernsey", GMTBST},
-            {"Europe/Helsinki", EET},
-            {"Europe/Isle_of_Man", GMTBST},
-            {"Europe/Istanbul", EET},
-            {"Europe/Jersey", GMTBST},
-            {"Europe/Kaliningrad", FET},
-            {"Europe/Kiev", EET},
-            {"Europe/Lisbon", WET},
-            {"Europe/Ljubljana", CET},
-            {"Europe/London", GMTBST},
-            {"Europe/Luxembourg", CET},
-            {"Europe/Madrid", CET},
-            {"Europe/Malta", CET},
-            {"Europe/Mariehamn", EET},
-            {"Europe/Minsk", FET},
-            {"Europe/Monaco", CET},
-            {"Europe/Moscow", MSK},
-            {"Europe/Nicosia", EET},
-            {"Europe/Oslo", CET},
-            {"Europe/Podgorica", CET},
-            {"Europe/Prague", CET},
-            {"Europe/Riga", EET},
-            {"Europe/Rome", CET},
-            {"Europe/Samara", new String[] {"Hora de Samara", "SAMT",
-                                            "Hora de verano de Samara", "SAMST"}},
-            {"Europe/San_Marino", CET},
-            {"Europe/Sarajevo", CET},
-            {"Europe/Simferopol", EET},
-            {"Europe/Skopje", CET},
-            {"Europe/Sofia", EET},
-            {"Europe/Stockholm", CET},
-            {"Europe/Tallinn", EET},
-            {"Europe/Tirane", CET},
-            {"Europe/Tiraspol", EET},
-            {"Europe/Uzhgorod", EET},
-            {"Europe/Vaduz", CET},
-            {"Europe/Vatican", CET},
-            {"Europe/Vienna", CET},
-            {"Europe/Vilnius", EET},
-            {"Europe/Volgograd", new String[] {"Hora de Volgogrado", "VOLT",
-                                               "Hora de verano de Volgogrado", "VOLST"}},
-            {"Europe/Warsaw", CET},
-            {"Europe/Zagreb", CET},
-            {"Europe/Zaporozhye", EET},
-            {"Europe/Zurich", CET},
-            {"GB", GMTBST},
-            {"GB-Eire", GMTBST},
-            {"Greenwich", GMT},
-            {"Hongkong", HKT},
-            {"Iceland", GMT},
-            {"Iran", IRT},
-            {"IST", IST},
-            {"Indian/Antananarivo", EAT},
-            {"Indian/Chagos", new String[] {"Hora del Territorio del Oc\u00e9ano \u00cdndico", "IOT",
-                                            "Hora de verano del Territorio del Oc\u00e9ano \u00cdndico", "IOST"}},
-            {"Indian/Christmas", new String[] {"Hora de la isla de Christmas", "CXT",
-                                               "Hora de verano de la isla de Christmas", "CXST"}},
-            {"Indian/Cocos", new String[] {"Hora de las islas Cocos", "CCT",
-                                           "Hora de verano de las islas Cocos", "CCST"}},
-            {"Indian/Comoro", EAT},
-            {"Indian/Kerguelen", new String[] {"Hora de los Territorios Franceses del Sur y de la Ant\u00e1rtida", "TFT",
-                                               "Hora de verano de los Territorios Franceses del Sur y de la Ant\u00e1rtida", "TFST"}},
-            {"Indian/Mahe", new String[] {"Hora de Seychelles", "SCT",
-                                          "Hora de verano de Seychelles", "SCST"}},
-            {"Indian/Maldives", new String[] {"Hora de Maldivas", "MVT",
-                                              "Hora de verano de Maldivas", "MVST"}},
-            {"Indian/Mauritius", new String[] {"Hora de Mauricio", "MUT",
-                                               "Hora de verano de Mauricio", "MUST"}},
-            {"Indian/Mayotte", EAT},
-            {"Indian/Reunion", new String[] {"Hora de Reuni\u00f3n", "RET",
-                                             "Hora de verano de Reuni\u00f3n", "REST"}},
-            {"Israel", ISRAEL},
-            {"Jamaica", EST},
-            {"Japan", JST},
-            {"Kwajalein", MHT},
-            {"Libya", CET},
-            {"MET", new String[] {"Hora de Europa Central", "MET",
-                                  "Hora de verano de Europa Central", "MEST"}},
-            {"Mexico/BajaNorte", PST},
-            {"Mexico/BajaSur", MST},
-            {"Mexico/General", CST},
-            {"MIT", WST_SAMOA},
-            {"MST7MDT", MST},
-            {"Navajo", MST},
-            {"NET", ARMT},
-            {"NST", NZST},
-            {"NZ", NZST},
-            {"NZ-CHAT", CHAST},
-            {"PLT", PKT},
-            {"Portugal", WET},
-            {"PRT", AST},
-            {"Pacific/Apia", WST_SAMOA},
-            {"Pacific/Auckland", NZST},
-            {"Pacific/Chatham", CHAST},
-            {"Pacific/Chuuk", CHUT},
-            {"Pacific/Easter", EASTER},
-            {"Pacific/Efate", new String[] {"Hora de Vanuatu", "VUT",
-                                            "Hora de verano de Vanuatu", "VUST"}},
-            {"Pacific/Enderbury", new String[] {"Hora de la isla Phoenix", "PHOT",
-                                                "Hora de verano de la isla Phoenix", "PHOST"}},
-            {"Pacific/Fakaofo", new String[] {"Hora de Tokelau", "TKT",
-                                              "Hora de verano de Tokelau", "TKST"}},
-            {"Pacific/Fiji", new String[] {"Hora de Fiji", "FJT",
-                                           "Hora de verano de Fiji", "FJST"}},
-            {"Pacific/Funafuti", new String[] {"Hora de Tuvalu", "TVT",
-                                               "Hora de verano de Tuvalu", "TVST"}},
-            {"Pacific/Galapagos", new String[] {"Hora de Gal\u00e1pagos", "GALT",
-                                                "Hora de verano de Gal\u00e1pagos", "GALST"}},
-            {"Pacific/Gambier", GAMBIER},
-            {"Pacific/Guadalcanal", SBT},
-            {"Pacific/Guam", ChST},
-            {"Pacific/Johnston", HST},
-            {"Pacific/Kiritimati", new String[] {"Hora de las islas Line", "LINT",
-                                                 "Hora de verano de las islas Line", "LINST"}},
-            {"Pacific/Kosrae", new String[] {"Hora de Kosrae", "KOST",
-                                             "Hora de verano de Kosrae", "KOSST"}},
-            {"Pacific/Kwajalein", MHT},
-            {"Pacific/Majuro", MHT},
-            {"Pacific/Marquesas", new String[] {"Hora de Marquesas", "MART",
-                                                "Hora de verano de Marquesas", "MARST"}},
-            {"Pacific/Midway", SAMOA},
-            {"Pacific/Nauru", new String[] {"Hora de Nauru", "NRT",
-                                            "Hora de verano de Nauru", "NRST"}},
-            {"Pacific/Niue", new String[] {"Hora de Niue", "NUT",
-                                           "Hora de verano de Niue", "NUST"}},
-            {"Pacific/Norfolk", new String[] {"Hora de Norfolk", "NFT",
-                                              "Hora de verano de Norfolk", "NFST"}},
-            {"Pacific/Noumea", new String[] {"Hora de Nueva Caledonia", "NCT",
-                                             "Hora de verano de Nueva Caledonia", "NCST"}},
-            {"Pacific/Pago_Pago", SAMOA},
-            {"Pacific/Palau", new String[] {"Hora de Palau", "PWT",
-                                            "Hora de verano de Palau", "PWST"}},
-            {"Pacific/Pitcairn", PITCAIRN},
-            {"Pacific/Pohnpei", PONT},
-            {"Pacific/Ponape", PONT},
-            {"Pacific/Port_Moresby", new String[] {"Hora de Pap\u00faa-Nueva Guinea", "PGT",
-                                                   "Hora de verano de Pap\u00faa-Nueva Guinea", "PGST"}},
-            {"Pacific/Rarotonga", new String[] {"Hora de las islas Cook", "CKT",
-                                                "Hora de verano de las islas Cook", "CKHST"}},
-            {"Pacific/Saipan", ChST},
-            {"Pacific/Samoa", SAMOA},
-            {"Pacific/Tahiti", new String[] {"Hora de Tahit\u00ed", "TAHT",
-                                             "Hora de verano de Tahit\u00ed", "TAHST"}},
-            {"Pacific/Tarawa", new String[] {"Hora de las islas Gilbert", "GILT",
-                                             "Hora de verano de las islas Gilbert", "GILST"}},
-            {"Pacific/Tongatapu", new String[] {"Hora de Tonga", "TOT",
-                                                "Hora de verano de Tonga", "TOST"}},
-            {"Pacific/Truk", CHUT},
-            {"Pacific/Wake", new String[] {"Hora de Wake", "WAKT",
-                                           "Hora de verano de Wake", "WAKST"}},
-            {"Pacific/Wallis", new String[] {"Hora de Wallis y Futuna", "WFT",
-                                             "Hora de verano de Wallis y Futuna", "WFST"}},
-            {"Pacific/Yap", CHUT},
-            {"Poland", CET},
-            {"PRC", CTT},
-            {"PST8PDT", PST},
-            {"ROK", KST},
-            {"Singapore", SGT},
-            {"SST", SBT},
-            {"SystemV/AST4", AST},
-            {"SystemV/AST4ADT", AST},
-            {"SystemV/CST6", CST},
-            {"SystemV/CST6CDT", CST},
-            {"SystemV/EST5", EST},
-            {"SystemV/EST5EDT", EST},
-            {"SystemV/HST10", HST},
-            {"SystemV/MST7", MST},
-            {"SystemV/MST7MDT", MST},
-            {"SystemV/PST8", PST},
-            {"SystemV/PST8PDT", PST},
-            {"SystemV/YST9", AKST},
-            {"SystemV/YST9YDT", AKST},
-            {"Turkey", EET},
-            {"UCT", UTC},
-            {"Universal", UTC},
-            {"US/Alaska", AKST},
-            {"US/Aleutian", HAST},
-            {"US/Arizona", MST},
-            {"US/Central", CST},
-            {"US/Eastern", EST},
-            {"US/Hawaii", HST},
-            {"US/Indiana-Starke", CST},
-            {"US/East-Indiana", EST},
-            {"US/Michigan", EST},
-            {"US/Mountain", MST},
-            {"US/Pacific", PST},
-            {"US/Pacific-New", PST},
-            {"US/Samoa", SAMOA},
-            {"UTC", UTC},
-            {"VST", ICT},
-            {"W-SU", MSK},
-            {"WET", WET},
-            {"Zulu", UTC},
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_fr.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames_fr.java
deleted file mode 100755
index 411c94a..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_fr.java
+++ /dev/null
@@ -1,876 +0,0 @@
-/*
- * Copyright (c) 1997, 2011, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-public final class TimeZoneNames_fr extends TimeZoneNamesBundle {
-
-    protected final Object[][] getContents() {
-        String ACT[] = new String[] {"Heure de l'Acre", "ACT",
-                                     "Heure d'\u00e9t\u00e9 de l'Acre", "ACST"};
-        String ADELAIDE[] = new String[] {"Heure standard d'Australie centrale (Australie du sud)", "CST",
-                                          "Heure d'\u00e9t\u00e9 d'Australie centrale (Australie du sud)", "CST"};
-        String AGT[] = new String[] {"Heure D'Argentine", "ART",
-                                     "Heure d'\u00e9t\u00e9 D'Argentine", "ARST"};
-        String AKST[] = new String[] {"Heure normale d'Alaska", "AKST",
-                                      "Heure avanc\u00e9e d'Alaska", "AKDT"};
-        String AMT[] = new String[] {"Heure normale d'Amazonie", "AMT",
-                                     "Heure d'\u00e9t\u00e9 d'Amazonie", "AMST"};
-        String ARAST[] = new String[] {"Heure normale d'Arabie", "AST",
-                                       "Heure avanc\u00e9e d'Arabie", "ADT"};
-        String ARMT[] = new String[] {"Heure d'Arm\u00e9nie", "AMT",
-                                      "Heure d'\u00e9t\u00e9 d'Arm\u00e9nie", "AMST"};
-        String AST[] = new String[] {"Heure normale de l'Atlantique", "AST",
-                                     "Heure avanc\u00e9e de l'Atlantique", "ADT"};
-        String BDT[] = new String[] {"Heure du Bangladesh", "BDT",
-                                     "Heure d'\u00e9t\u00e9 du Bangladesh", "BDST"};
-        String BRISBANE[] = new String[] {"Heure standard d'Australie orientale (Queensland)", "EST",
-                                          "Heure d'\u00e9t\u00e9 d'Australie orientale (Queensland)", "EST"};
-        String BROKEN_HILL[] = new String[] {"Heure standard d'Australie centrale (Australie du sud/Nouvelle-Galles du sud)", "CST",
-                                             "Heure d'\u00e9t\u00e9 d'Australie centrale(Australie du sud/Nouvelle-Galles du sud)", "CST"};
-        String BRT[] = new String[] {"Heure du Br\u00e9sil", "BRT",
-                                     "Heure d'\u00e9t\u00e9 du Br\u00e9sil", "BRST"};
-        String BTT[] = new String[] {"Heure du Bhoutan", "BTT",
-                                     "Heure d'\u00e9t\u00e9 du Bhoutan", "BTST"};
-        String CAT[] = new String[] {"Heure d'Afrique centrale", "CAT",
-                                     "Heure d'\u00e9t\u00e9 d'Afrique centrale", "CAST"};
-        String CET[] = new String[] {"Heure d'Europe centrale", "CET",
-                                     "Heure d'\u00e9t\u00e9 d'Europe centrale", "CEST"};
-        String CHAST[] = new String[] {"Heure standard de Chatham", "CHAST",
-                                       "Heure avanc\u00e9e de Chatham", "CHADT"};
-        String ChST[] = new String[] {"Heure normale des \u00eeles Mariannes", "ChST",
-                      "Heure d'\u00e9t\u00e9 des \u00eeles Mariannes", "ChDT"};
-        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
-                                      "Chuuk Summer Time", "CHUST"};
-        String CIT[] = new String[] {"Heure d'Indon\u00e9sie centrale", "CIT",
-                                     "Heure d'\u00e9t\u00e9 d'Indon\u00e9sie centrale", "CIST"};
-        String CLT[] = new String[] {"Heure du Chili", "CLT",
-                                     "Heure d'\u00e9t\u00e9 du Chili", "CLST"};
-        String CST[] = new String[] {"Heure normale du Centre", "CST",
-                                     "Heure avanc\u00e9e du Centre", "CDT"};
-        String CTT[] = new String[] {"Heure normale de Chine", "CST",
-                                     "Heure avanc\u00e9e de Chine", "CDT"};
-        String CUBA[] = new String[] {"Heure standard de Cuba", "CST",
-                                      "Heure d'\u00e9t\u00e9 de Cuba", "CDT"};
-        String DARWIN[] = new String[] {"Heure standard d'Australie centrale (Territoire du Nord)", "CST",
-                                        "Heure d'\u00e9t\u00e9 d'Australie centrale (Territoire du Nord)", "CST"};
-        String DUBLIN[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT",
-                                        "Heure d'\u00e9t\u00e9 irlandaise", "IST"};
-        String EAT[] = new String[] {"Heure d'Afrique de l'Est", "EAT",
-                                     "Heure d'\u00e9t\u00e9 d'Afrique de l'Est", "EAST"};
-        String EASTER[] = new String[] {"Heure de l'Ile de P\u00e2ques", "EAST",
-                                        "Heure d'\u00e9t\u00e9 de l'Ile de P\u00e2ques", "EASST"};
-        String EET[] = new String[] {"Heure d'Europe de l'Est", "EET",
-                                     "Heure d'\u00e9t\u00e9 d'Europe de l'Est", "EEST"};
-        String EGT[] = new String[] {"Heure du Groenland de l'Est", "EGT",
-                                     "Heure d'\u00e9t\u00e9 du Groenland de l'Est", "EGST"};
-        String EST[] = new String[] {"Heure normale de l'Est", "EST",
-                                     "Heure avanc\u00e9e de l'Est", "EDT"};
-        String EST_NSW[] = new String[] {"Heure normale de l'Est (Nouvelle-Galles du Sud)", "EST",
-                                         "Heure d'\u00e9t\u00e9 de l'Est (Nouvelle-Galles du Sud)", "EST"};
-        String FET[] = new String[] {"Further-eastern European Time", "FET",
-                                     "Further-eastern European Summer Time", "FEST"};
-        String GHMT[] = new String[] {"Heure du Ghana", "GMT",
-                                      "Heure d'\u00e9t\u00e9 du Ghana", "GHST"};
-        String GAMBIER[] =  new String[] {"Heure de Gambi", "GAMT",
-                                          "Heure d'\u00e9t\u00e9 de Gambi", "GAMST"};
-        String GMT[] = new String[] {"Heure de Greenwich", "GMT",
-                                   "Heure de Greenwich", "GMT"};
-        String GMTBST[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT",
-                                        "Heure d'\u00e9t\u00e9 britannique", "BST"};
-        String GST[] = new String[] {"Heure normale du Golfe", "GST",
-                                     "Heure avanc\u00e9e du Golfe", "GDT"};
-        String HAST[] = new String[] {"Heure normale d'Hawa\u00ef-Al\u00e9outiennes", "HAST",
-                                      "Heure avanc\u00e9e d'Hawa\u00ef-Al\u00e9outiennes", "HADT"};
-        String HKT[] =  new String[] {"Heure de Hong Kong", "HKT",
-                                      "Heure d'\u00e9t\u00e9 de Hong Kong", "HKST"};
-        String HST[] = new String[] {"Heure normale d'Hawa\u00ef", "HST",
-                                     "Heure avanc\u00e9e d'Hawa\u00ef", "HDT"};
-        String ICT[] = new String[] {"Heure d'Indochine", "ICT",
-                                     "Heure d'\u00e9t\u00e9 d'Indochine", "ICST"};
-        String IRT[] = new String[] {"Heure normale d'Iran", "IRST",
-                                     "Heure avanc\u00e9e d'Iran", "IRDT"};
-        String ISRAEL[] = new String[] {"Heure standard d'Isra\u00ebl", "IST",
-                                        "Heure avanc\u00e9e d'Isra\u00ebl", "IDT"};
-        String IST[] = new String[] {"Heure normale d'Inde", "IST",
-                                     "Heure avanc\u00e9e d'Inde", "IDT"};
-        String JST[] = new String[] {"Heure normale du Japon", "JST",
-                                     "Heure avanc\u00e9e du Japon", "JDT"};
-        String KST[] = new String[] {"Heure normale de Cor\u00e9e", "KST",
-                                     "Heure avanc\u00e9e de Cor\u00e9e", "KDT"};
-        String LORD_HOWE[] = new String[] {"Heure standard de Lord Howe", "LHST",
-                                           "Heure d'\u00e9t\u00e9 de Lord Howe", "LHST"};
-        String MHT[] = new String[] {"Heure des Iles Marshall", "MHT",
-                                     "Heure d'\u00e9t\u00e9 des Iles Marshall", "MHST"};
-        String MSK[] = new String[] {"Heure standard de Moscou", "MSK",
-                                     "Heure avanc\u00e9e de Moscou", "MSD"};
-        String MST[] = new String[] {"Heure normale des Rocheuses", "MST",
-                                     "Heure avanc\u00e9e des Rocheuses", "MDT"};
-        String MYT[] = new String[] {"Heure de Malaisie", "MYT",
-                                     "Heure d'\u00e9t\u00e9 de Malaisie", "MYST"};
-        String NORONHA[] = new String[] {"Heure de Fernando de Noronha", "FNT",
-                                         "Heure d'\u00e9t\u00e9 de Fernando de Noronha", "FNST"};
-        String NOVT[] = new String[] {"Heure de Novossibirsk", "NOVT",
-                                      "Heure d'\u00e9t\u00e9 de Novossibirsk", "NOVST"};
-        String NPT[] = new String[] {"Heure du N\u00e9pal", "NPT",
-                                     "Heure d'\u00e9t\u00e9 du N\u00e9pal", "NPST"};
-        String NST[] = new String[] {"Heure normale de Terre-Neuve", "NST",
-                                     "Heure avanc\u00e9e de Terre-Neuve", "NDT"};
-        String NZST[] = new String[] {"Heure normale de Nouvelle-Z\u00e9lande", "NZST",
-                                      "Heure avanc\u00e9e de Nouvelle-Z\u00e9lande", "NZDT"};
-        String PITCAIRN[] = new String[] {"Heure standard des Pitcairn", "PST",
-                                          "heure avanc\u00e9e des Pitcairn", "PDT"};
-        String PKT[] = new String[] {"Heure du Pakistan", "PKT",
-                                     "Heure d'\u00e9t\u00e9 du Pakistan", "PKST"};
-        String PONT[] = new String[] {"Pohnpei Time", "PONT",
-                                      "Pohnpei Summer Time", "PONST"};
-        String PST[] = new String[] {"Heure normale du Pacifique", "PST",
-                                     "Heure avanc\u00e9e du Pacifique", "PDT"};
-        String SAMOA[] = new String[] {"Heure standard de Samoa", "SST",
-                                       "Heure avanc\u00e9e de Samoa", "SDT"};
-        String SAST[] = new String[] {"Heure normale d'Afrique du Sud", "SAST",
-                                      "Heure d'\u00e9t\u00e9 d'Afrique du Sud", "SAST"};
-        String SBT[] = new String[] {"Heure des \u00celes Salomon", "SBT",
-                                     "Heure d'\u00e9t\u00e9 des \u00celes Salomon", "SBST"};
-        String SGT[] = new String[] {"Heure de Singapour", "SGT",
-                                     "Heure d'\u00e9t\u00e9 de Singapour", "SGST"};
-        String SLST[] = new String[] {"Heure du m\u00e9ridien de Greenwich", "GMT",
-                                      "Heure d'\u00e9t\u00e9 de Sierra Leone", "SLST"};
-        String TASMANIA[] = new String[] {"Heure standard d'Australie orientale (Tasmanie)", "EST",
-                                          "Heure d'\u00e9t\u00e9 d'Australie orientale (Tasmanie)", "EST"};
-        String TMT[] = new String[] {"Heure du Turkm\u00e9nistan", "TMT",
-                                     "Heure d'\u00e9t\u00e9 du Turkm\u00e9nistan", "TMST"};
-        String ULAT[]= new String[] {"Heure de l'Ulaanbaatar", "ULAT",
-                                     "Heure d'\u00e9t\u00e9 de l'Ulaanbaatar", "ULAST"};
-        String UTC[] = new String[] {"Temps universel coordonn\u00e9", "UTC",
-                                     "Temps universel coordonn\u00e9", "UTC"};
-        String UZT[] = new String[] {"Heure de l'Ouzb\u00e9kistan", "UZT",
-                                     "Heure d'\u00e9t\u00e9 de l'Ouzb\u00e9kistan", "UZST"};
-        String VICTORIA[] = new String[] {"Heure standard d'Australie orientale (Victoria)", "EST",
-                                          "Heure d'\u00e9t\u00e9 d'Australie orientale (Victoria)", "EST"};
-        String VLAT[] = new String[] {"Heure de Vladivostok", "VLAT",
-                                      "Heure d'\u00e9t\u00e9 de Vladivostok", "VLAST"};
-        String WART[] = new String[] {"Heure D'Argentine de l'Ouest", "WART",
-                                      "Heure d'\u00e9t\u00e9 D'Argentine de l'Ouest", "WARST"};
-        String WAT[] = new String[] {"Heure d'Afrique de l'Ouest", "WAT",
-                                     "Heure d'\u00e9t\u00e9 d'Afrique de l'Ouest", "WAST"};
-        String WET[] = new String[] {"Heure d'Europe de l'Ouest", "WET",
-                                     "Heure d'\u00e9t\u00e9 d'Europe de l'Ouest", "WEST"};
-        String WIT[] = new String[] {"Heure de l'Indon\u00e9sie occidentale", "WIT",
-                                     "Heure d'\u00e9t\u00e9 de l'Indon\u00e9sie occidentale", "WIST"};
-        String WST_AUS[] = new String[] {"Heure normale de l'Ouest (Australie)", "WST",
-                                         "Heure d'\u00e9t\u00e9 de l'Ouest (Australie)", "WST"};
-        String WST_SAMOA[] = new String[] {"Heure des Samoas occidentales", "WST",
-                                           "Heure d'\u00e9t\u00e9 des Samoas occidentales", "WSDT"};
-        String YAKT[] = new String[] {"Heure du Iakoutsk", "YAKT",
-                                      "Heure d'\u00e9t\u00e9 du Iakoutsk", "YAKST"};
-
-        return new Object[][] {
-            {"America/Los_Angeles", PST},
-            {"PST", PST},
-            {"America/Denver", MST},
-            {"MST", MST},
-            {"America/Phoenix", MST},
-            {"PNT", MST},
-            {"America/Chicago", CST},
-            {"CST", CST},
-            {"America/New_York", EST},
-            {"EST", EST},
-            {"America/Indianapolis", EST},
-            {"IET", EST},
-            {"Pacific/Honolulu", HST},
-            {"HST", HST},
-            {"America/Anchorage", AKST},
-            {"AST", AKST},
-            {"America/Halifax", AST},
-            {"America/Sitka", AKST},
-            {"America/St_Johns", NST},
-            {"CNT", NST},
-            {"Europe/Paris", CET},
-            {"ECT", CET},
-            {"GMT", GMT},
-            {"Africa/Casablanca", WET},
-            {"Asia/Jerusalem", ISRAEL},
-            {"Asia/Tokyo", JST},
-            {"JST", JST},
-            {"Europe/Bucharest", EET},
-            {"Asia/Shanghai", CTT},
-            {"CTT", CTT},
-            /* Don't change the order of the above zones
-             * to keep compatibility with the previous version.
-             */
-
-            {"ACT", DARWIN},
-            {"AET", EST_NSW},
-            {"AGT", AGT},
-            {"ART", EET},
-            {"Africa/Abidjan", GMT},
-            {"Africa/Accra", GHMT},
-            {"Africa/Addis_Ababa", EAT},
-            {"Africa/Algiers", CET},
-            {"Africa/Asmara", EAT},
-            {"Africa/Asmera", EAT},
-            {"Africa/Bamako", GMT},
-            {"Africa/Bangui", WAT},
-            {"Africa/Banjul", GMT},
-            {"Africa/Bissau", GMT},
-            {"Africa/Blantyre", CAT},
-            {"Africa/Brazzaville", WAT},
-            {"Africa/Bujumbura", CAT},
-            {"Africa/Cairo", EET},
-            {"Africa/Ceuta", CET},
-            {"Africa/Conakry", GMT},
-            {"Africa/Dakar", GMT},
-            {"Africa/Dar_es_Salaam", EAT},
-            {"Africa/Djibouti", EAT},
-            {"Africa/Douala", WAT},
-            {"Africa/El_Aaiun", WET},
-            {"Africa/Freetown", SLST},
-            {"Africa/Gaborone", CAT},
-            {"Africa/Harare", CAT},
-            {"Africa/Johannesburg", SAST},
-            {"Africa/Juba", EAT},
-            {"Africa/Kampala", EAT},
-            {"Africa/Khartoum", EAT},
-            {"Africa/Kigali", CAT},
-            {"Africa/Kinshasa", WAT},
-            {"Africa/Lagos", WAT},
-            {"Africa/Libreville", WAT},
-            {"Africa/Lome", GMT},
-            {"Africa/Luanda", WAT},
-            {"Africa/Lubumbashi", CAT},
-            {"Africa/Lusaka", CAT},
-            {"Africa/Malabo", WAT},
-            {"Africa/Maputo", CAT},
-            {"Africa/Maseru", SAST},
-            {"Africa/Mbabane", SAST},
-            {"Africa/Mogadishu", EAT},
-            {"Africa/Monrovia", GMT},
-            {"Africa/Nairobi", EAT},
-            {"Africa/Ndjamena", WAT},
-            {"Africa/Niamey", WAT},
-            {"Africa/Nouakchott", GMT},
-            {"Africa/Ouagadougou", GMT},
-            {"Africa/Porto-Novo", WAT},
-            {"Africa/Sao_Tome", GMT},
-            {"Africa/Timbuktu", GMT},
-            {"Africa/Tripoli", CET},
-            {"Africa/Tunis", CET},
-            {"Africa/Windhoek", WAT},
-            {"America/Adak", HAST},
-            {"America/Anguilla", AST},
-            {"America/Antigua", AST},
-            {"America/Araguaina", BRT},
-            {"America/Argentina/Buenos_Aires", AGT},
-            {"America/Argentina/Catamarca", AGT},
-            {"America/Argentina/ComodRivadavia", AGT},
-            {"America/Argentina/Cordoba", AGT},
-            {"America/Argentina/Jujuy", AGT},
-            {"America/Argentina/La_Rioja", AGT},
-            {"America/Argentina/Mendoza", AGT},
-            {"America/Argentina/Rio_Gallegos", AGT},
-            {"America/Argentina/Salta", AGT},
-            {"America/Argentina/San_Juan", AGT},
-            {"America/Argentina/San_Luis", WART},
-            {"America/Argentina/Tucuman", AGT},
-            {"America/Argentina/Ushuaia", AGT},
-            {"America/Aruba", AST},
-            {"America/Asuncion", new String[] {"Heure du Paraguay", "PYT",
-                                               "Heure d'\u00e9t\u00e9 du Paraguay", "PYST"}},
-            {"America/Atikokan", EST},
-            {"America/Atka", HAST},
-            {"America/Bahia", BRT},
-            {"America/Bahia_Banderas", CST},
-            {"America/Barbados", AST},
-            {"America/Belem", BRT},
-            {"America/Belize", CST},
-            {"America/Blanc-Sablon", AST},
-            {"America/Boa_Vista", AMT},
-            {"America/Bogota", new String[] {"Heure de Colombie", "COT",
-                                             "Heure d'\u00e9t\u00e9 de Colombie", "COST"}},
-            {"America/Boise", MST},
-            {"America/Buenos_Aires", AGT},
-            {"America/Cambridge_Bay", MST},
-            {"America/Campo_Grande", AMT},
-            {"America/Cancun", CST},
-            {"America/Caracas", new String[] {"Heure du Venezuela", "VET",
-                                              "Heure d'\u00e9t\u00e9 du Venezuela", "VEST"}},
-            {"America/Catamarca", AGT},
-            {"America/Cayenne", new String[] {"Heure de Guyane fran\u00e7aise", "GFT",
-                                              "Heure d'\u00e9t\u00e9 de Guyane fran\u00e7aise", "GFST"}},
-            {"America/Cayman", EST},
-            {"America/Chihuahua", MST},
-            {"America/Creston", MST},
-            {"America/Coral_Harbour", EST},
-            {"America/Cordoba", AGT},
-            {"America/Costa_Rica", CST},
-            {"America/Cuiaba", AMT},
-            {"America/Curacao", AST},
-            {"America/Danmarkshavn", GMT},
-            {"America/Dawson", PST},
-            {"America/Dawson_Creek", MST},
-            {"America/Detroit", EST},
-            {"America/Dominica", AST},
-            {"America/Edmonton", MST},
-            {"America/Eirunepe", AMT},
-            {"America/El_Salvador", CST},
-            {"America/Ensenada", PST},
-            {"America/Fort_Wayne", EST},
-            {"America/Fortaleza", BRT},
-            {"America/Glace_Bay", AST},
-            {"America/Godthab", new String[] {"Heure du Groenland de l'Ouest", "WGT",
-                                              "Heure d'\u00e9t\u00e9 du Groenland de l'Ouest", "WGST"}},
-            {"America/Goose_Bay", AST},
-            {"America/Grand_Turk", EST},
-            {"America/Grenada", AST},
-            {"America/Guadeloupe", AST},
-            {"America/Guatemala", CST},
-            {"America/Guayaquil", new String[] {"Heure de l'\u00c9quateur", "ECT",
-                                                "Heure d'\u00e9t\u00e9 de l'\u00c9quateur", "ECST"}},
-            {"America/Guyana", new String[] {"Heure de Guyana", "GYT",
-                                             "Heure d'\u00e9t\u00e9 de Guyana", "GYST"}},
-            {"America/Havana", CUBA},
-            {"America/Hermosillo", MST},
-            {"America/Indiana/Indianapolis", EST},
-            {"America/Indiana/Knox", CST},
-            {"America/Indiana/Marengo", EST},
-            {"America/Indiana/Petersburg", EST},
-            {"America/Indiana/Tell_City", CST},
-            {"America/Indiana/Vevay", EST},
-            {"America/Indiana/Vincennes", EST},
-            {"America/Indiana/Winamac", EST},
-            {"America/Inuvik", MST},
-            {"America/Iqaluit", EST},
-            {"America/Jamaica", EST},
-            {"America/Jujuy", AGT},
-            {"America/Juneau", AKST},
-            {"America/Kentucky/Louisville", EST},
-            {"America/Kentucky/Monticello", EST},
-            {"America/Knox_IN", CST},
-            {"America/Kralendijk", AST},
-            {"America/La_Paz", new String[] {"Heure de Bolivie", "BOT",
-                                             "Heure d'\u00e9t\u00e9 de Bolivie", "BOST"}},
-            {"America/Lima", new String[] {"Heure du P\u00e9rou", "PET",
-                                           "Heure d'\u00e9t\u00e9 du P\u00e9rou", "PEST"}},
-            {"America/Louisville", EST},
-            {"America/Lower_Princes", AST},
-            {"America/Maceio", BRT},
-            {"America/Managua", CST},
-            {"America/Manaus", AMT},
-            {"America/Marigot", AST},
-            {"America/Martinique", AST},
-            {"America/Matamoros", CST},
-            {"America/Mazatlan", MST},
-            {"America/Mendoza", AGT},
-            {"America/Menominee", CST},
-            {"America/Merida", CST},
-            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
-                                                 "Metlakatla Daylight Time", "MeDT"}},
-            {"America/Mexico_City", CST},
-            {"America/Miquelon", new String[] {"Heure normale de Saint-Pierre et Miquelon", "PMST",
-                                               "Heure avanc\u00e9e de Saint-Pierre et Miquelon", "PMDT"}},
-            {"America/Moncton", AST},
-            {"America/Montevideo", new String[] {"Heure de l'Uruguay", "UYT",
-                                                 "Heure d'\u00e9t\u00e9 de l'Uruguay", "UYST"}},
-            {"America/Monterrey", CST},
-            {"America/Montreal", EST},
-            {"America/Montserrat", AST},
-            {"America/Nassau", EST},
-            {"America/Nipigon", EST},
-            {"America/Nome", AKST},
-            {"America/Noronha", NORONHA},
-            {"America/North_Dakota/Beulah", CST},
-            {"America/North_Dakota/Center", CST},
-            {"America/North_Dakota/New_Salem", CST},
-            {"America/Ojinaga", MST},
-            {"America/Panama", EST},
-            {"America/Pangnirtung", EST},
-            {"America/Paramaribo", new String[] {"Heure du Surinam", "SRT",
-                                                 "Heure d'\u00e9t\u00e9 du Surinam", "SRST"}},
-            {"America/Port-au-Prince", EST},
-            {"America/Port_of_Spain", AST},
-            {"America/Porto_Acre", AMT},
-            {"America/Porto_Velho", AMT},
-            {"America/Puerto_Rico", AST},
-            {"America/Rainy_River", CST},
-            {"America/Rankin_Inlet", CST},
-            {"America/Recife", BRT},
-            {"America/Regina", CST},
-            {"America/Resolute", CST},
-            {"America/Rio_Branco", AMT},
-            {"America/Rosario", AGT},
-            {"America/Santa_Isabel", PST},
-            {"America/Santarem", BRT},
-            {"America/Santiago", CLT},
-            {"America/Santo_Domingo", AST},
-            {"America/Sao_Paulo", BRT},
-            {"America/Scoresbysund", EGT},
-            {"America/Shiprock", MST},
-            {"America/St_Barthelemy", AST},
-            {"America/St_Kitts", AST},
-            {"America/St_Lucia", AST},
-            {"America/St_Thomas", AST},
-            {"America/St_Vincent", AST},
-            {"America/Swift_Current", CST},
-            {"America/Tegucigalpa", CST},
-            {"America/Thule", AST},
-            {"America/Thunder_Bay", EST},
-            {"America/Tijuana", PST},
-            {"America/Toronto", EST},
-            {"America/Tortola", AST},
-            {"America/Vancouver", PST},
-            {"America/Virgin", AST},
-            {"America/Whitehorse", PST},
-            {"America/Winnipeg", CST},
-            {"America/Yakutat", AKST},
-            {"America/Yellowknife", MST},
-            {"Antarctica/Casey", WST_AUS},
-            {"Antarctica/Davis", new String[] {"Heure de Davis", "DAVT",
-                                               "Heure d'\u00e9t\u00e9 de Davis", "DAVST"}},
-            {"Antarctica/DumontDUrville", new String[] {"Heure de Dumont-d'Urville", "DDUT",
-                                                        "Heure d'\u00e9t\u00e9 de Dumont-d'Urville", "DDUST"}},
-            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
-                                                   "Macquarie Island Summer Time", "MIST"}},
-            {"Antarctica/Mawson", new String[] {"Heure de Mawson", "MAWT",
-                                                "Heure d'\u00e9t\u00e9 de Mawson", "MAWST"}},
-            {"Antarctica/McMurdo", NZST},
-            {"Antarctica/Palmer", CLT},
-            {"Antarctica/Rothera", new String[] {"Heure de Rothera", "ROTT",
-                                                 "Heure d'\u00e9t\u00e9 de Rothera", "ROTST"}},
-            {"Antarctica/South_Pole", NZST},
-            {"Antarctica/Syowa", new String[] {"Heure de Syowa", "SYOT",
-                                               "Heure d'\u00e9t\u00e9 de Syowa", "SYOST"}},
-            {"Antarctica/Vostok", new String[] {"Heure de Vostok", "VOST",
-                                                "Heure d'\u00e9t\u00e9 de Vostok", "VOSST"}},
-            {"Arctic/Longyearbyen", CET},
-            {"Asia/Aden", ARAST},
-            {"Asia/Almaty", new String[] {"Heure d'Alma-Ata", "ALMT",
-                                          "Heure d'\u00e9t\u00e9 d'Alma-Ata", "ALMST"}},
-            {"Asia/Amman", EET},
-            {"Asia/Anadyr", new String[] {"Heure d'Anadyr", "ANAT",
-                                          "Heure d'\u00e9t\u00e9 d'Anadyr", "ANAST"}},
-            {"Asia/Aqtau", new String[] {"Heure d'Aqtau", "AQTT",
-                                         "Heure d'\u00e9t\u00e9 d'Aqtau", "AQTST"}},
-            {"Asia/Aqtobe", new String[] {"Heure d'Aqtobe", "AQTT",
-                                          "Heure d'\u00e9t\u00e9 d'Aqtobe", "AQTST"}},
-            {"Asia/Ashgabat", TMT},
-            {"Asia/Ashkhabad", TMT},
-            {"Asia/Baghdad", ARAST},
-            {"Asia/Bahrain", ARAST},
-            {"Asia/Baku", new String[] {"Heure d'Azerba\u00efdjan", "AZT",
-                                        "Heure d'\u00e9t\u00e9 d'Azerba\u00efdjan", "AZST"}},
-            {"Asia/Bangkok", ICT},
-            {"Asia/Beirut", EET},
-            {"Asia/Bishkek", new String[] {"Heure du Kirghizistan", "KGT",
-                                           "Heure d'\u00e9t\u00e9 du Kirghizistan", "KGST"}},
-            {"Asia/Brunei", new String[] {"Heure du Brunei", "BNT",
-                                          "Heure d'\u00e9t\u00e9 du Brunei", "BNST"}},
-            {"Asia/Calcutta", IST},
-            {"Asia/Choibalsan", new String[] {"Heure de Choibalsan", "CHOT",
-                                              "Heure d'\u00e9t\u00e9 de Choibalsan", "CHOST"}},
-            {"Asia/Chongqing", CTT},
-            {"Asia/Chungking", CTT},
-            {"Asia/Colombo", IST},
-            {"Asia/Dacca", BDT},
-            {"Asia/Dhaka", BDT},
-            {"Asia/Dili", new String[] {"Heure de Timor-Leste", "TLT",
-                                        "Heure d'\u00e9t\u00e9 de Timor-Leste", "TLST"}},
-            {"Asia/Damascus", EET},
-            {"Asia/Dubai", GST},
-            {"Asia/Dushanbe", new String[] {"Heure du Tadjikistan", "TJT",
-                                            "Heure d'\u00e9t\u00e9 du Tadjikistan", "TJST"}},
-            {"Asia/Gaza", EET},
-            {"Asia/Harbin", CTT},
-            {"Asia/Hebron", EET},
-            {"Asia/Ho_Chi_Minh", ICT},
-            {"Asia/Hong_Kong", HKT},
-            {"Asia/Hovd", new String[] {"Heure de Hovd", "HOVT",
-                                        "Heure d'\u00e9t\u00e9 de Hovd", "HOVST"}},
-            {"Asia/Irkutsk", new String[] {"Heure d'Irkutsk", "IRKT",
-                                           "Heure d'\u00e9t\u00e9 d'Irkutsk", "IRKST"}},
-            {"Asia/Istanbul", EET},
-            {"Asia/Jakarta", WIT},
-            {"Asia/Jayapura", new String[] {"Heure d'Indon\u00e9sie orientale", "EIT",
-                                            "Heure d'\u00e9t\u00e9 d'Indon\u00e9sie orientale", "EIST"}},
-            {"Asia/Kabul", new String[] {"Heure d'Afghanistan", "AFT",
-                                         "Heure d'\u00e9t\u00e9 d'Afghanistan", "AFST"}},
-            {"Asia/Kamchatka", new String[] {"Heure de Petropavlovsk-Kamchatski", "PETT",
-                                             "Heure d'\u00e9t\u00e9 de Petropavlovsk-Kamchatski", "PETST"}},
-            {"Asia/Karachi", PKT},
-            {"Asia/Kashgar", CTT},
-            {"Asia/Kathmandu", NPT},
-            {"Asia/Katmandu", NPT},
-            {"Asia/Khandyga", YAKT},
-            {"Asia/Kolkata", IST},
-            {"Asia/Krasnoyarsk", new String[] {"Heure de Krasno\u00efarsk", "KRAT",
-                                               "Heure d'\u00e9t\u00e9 de Krasno\u00efarsk", "KRAST"}},
-            {"Asia/Kuala_Lumpur", MYT},
-            {"Asia/Kuching", MYT},
-            {"Asia/Kuwait", ARAST},
-            {"Asia/Macao", CTT},
-            {"Asia/Macau", CTT},
-            {"Asia/Magadan", new String[] {"Heure de Magadan", "MAGT",
-                                           "Heure d'\u00e9t\u00e9 de Magadan", "MAGST"}},
-            {"Asia/Makassar", CIT},
-            {"Asia/Manila", new String[] {"Heure des Philippines", "PHT",
-                                          "Heure d'\u00e9t\u00e9 des Philippines", "PHST"}},
-            {"Asia/Muscat", GST},
-            {"Asia/Nicosia", EET},
-            {"Asia/Novokuznetsk", NOVT},
-            {"Asia/Novosibirsk", NOVT},
-            {"Asia/Oral", new String[] {"Heure d'Oral", "ORAT",
-                                        "Heure d'\u00e9t\u00e9 d'Oral", "ORAST"}},
-            {"Asia/Omsk", new String[] {"Heure d'Omsk", "OMST",
-                                        "Heure d'\u00e9t\u00e9 d'Omsk", "OMSST"}},
-            {"Asia/Phnom_Penh", ICT},
-            {"Asia/Pontianak", WIT},
-            {"Asia/Pyongyang", KST},
-            {"Asia/Qatar", ARAST},
-            {"Asia/Qyzylorda", new String[] {"Heure de Kyzylorda", "QYZT",
-                                             "Heure d'\u00e9t\u00e9 de Kyzylorda", "QYZST"}},
-            {"Asia/Rangoon", new String[] {"Heure de Myanmar", "MMT",
-                                           "Heure d'\u00e9t\u00e9 de Myanmar", "MMST"}},
-            {"Asia/Riyadh", ARAST},
-            {"Asia/Saigon", ICT},
-            {"Asia/Sakhalin", new String[] {"Heure de Sakhalin", "SAKT",
-                                            "Heure d'\u00e9t\u00e9 de Sakhalin", "SAKST"}},
-            {"Asia/Samarkand", UZT},
-            {"Asia/Seoul", KST},
-            {"Asia/Singapore", SGT},
-            {"Asia/Taipei", CTT},
-            {"Asia/Tel_Aviv", ISRAEL},
-            {"Asia/Tashkent", UZT},
-            {"Asia/Tbilisi", new String[] {"Heure de G\u00e9orgie", "GET",
-                                           "Heure d'\u00e9t\u00e9 de G\u00e9orgie", "GEST"}},
-            {"Asia/Tehran", IRT},
-            {"Asia/Thimbu", BTT},
-            {"Asia/Thimphu", BTT},
-            {"Asia/Ujung_Pandang", CIT},
-            {"Asia/Ulaanbaatar", ULAT},
-            {"Asia/Ulan_Bator", ULAT},
-            {"Asia/Urumqi", CTT},
-            {"Asia/Ust-Nera", VLAT},
-            {"Asia/Vientiane", ICT},
-            {"Asia/Vladivostok", VLAT},
-            {"Asia/Yakutsk", YAKT},
-            {"Asia/Yekaterinburg", new String[] {"Heure de Yekaterinburg", "YEKT",
-                                                 "Heure d'\u00e9t\u00e9 de Yekaterinburg", "YEKST"}},
-            {"Asia/Yerevan", ARMT},
-            {"Atlantic/Azores", new String[] {"Heure des A\u00e7ores", "AZOT",
-                                              "Heure d'\u00e9t\u00e9 des A\u00e7ores", "AZOST"}},
-            {"Atlantic/Bermuda", AST},
-            {"Atlantic/Canary", WET},
-            {"Atlantic/Cape_Verde", new String[] {"Heure de Cap-Vert", "CVT",
-                                                  "Heure d'\u00e9t\u00e9 de Cap-Vert", "CVST"}},
-            {"Atlantic/Faeroe", WET},
-            {"Atlantic/Faroe", WET},
-            {"Atlantic/Jan_Mayen", CET},
-            {"Atlantic/Madeira", WET},
-            {"Atlantic/Reykjavik", GMT},
-            {"Atlantic/South_Georgia", new String[] {"Heure normale de G\u00e9orgie du Sud", "GST",
-                                                     "Heure avanc\u00e9e de G\u00e9orgie du Sud", "GDT"}},
-            {"Atlantic/St_Helena", GMT},
-            {"Atlantic/Stanley", new String[] {"Heure des \u00eeles Falkland", "FKT",
-                                               "Heure d'\u00e9t\u00e9 des \u00eeles Falkland", "FKST"}},
-            {"Australia/ACT", EST_NSW},
-            {"Australia/Adelaide", ADELAIDE},
-            {"Australia/Brisbane", BRISBANE},
-            {"Australia/Broken_Hill", BROKEN_HILL},
-            {"Australia/Canberra", EST_NSW},
-            {"Australia/Currie", EST_NSW},
-            {"Australia/Darwin", DARWIN},
-            {"Australia/Eucla", new String[] {"Heure standard de l'Australie occidentale (centre)", "CWST",
-                                              "Heure d'\u00e9t\u00e9 de l'Australie occidentale (centre)", "CWST"}},
-            {"Australia/Hobart", TASMANIA},
-            {"Australia/LHI", LORD_HOWE},
-            {"Australia/Lindeman", BRISBANE},
-            {"Australia/Lord_Howe", LORD_HOWE},
-            {"Australia/Melbourne", VICTORIA},
-            {"Australia/North", DARWIN},
-            {"Australia/NSW", EST_NSW},
-            {"Australia/Perth", WST_AUS},
-            {"Australia/Queensland", BRISBANE},
-            {"Australia/South", ADELAIDE},
-            {"Australia/Sydney", EST_NSW},
-            {"Australia/Tasmania", TASMANIA},
-            {"Australia/Victoria", VICTORIA},
-            {"Australia/West", WST_AUS},
-            {"Australia/Yancowinna", BROKEN_HILL},
-            {"BET", BRT},
-            {"BST", BDT},
-            {"Brazil/Acre", AMT},
-            {"Brazil/DeNoronha", NORONHA},
-            {"Brazil/East", BRT},
-            {"Brazil/West", AMT},
-            {"Canada/Atlantic", AST},
-            {"Canada/Central", CST},
-            {"Canada/East-Saskatchewan", CST},
-            {"Canada/Eastern", EST},
-            {"Canada/Mountain", MST},
-            {"Canada/Newfoundland", NST},
-            {"Canada/Pacific", PST},
-            {"Canada/Yukon", PST},
-            {"Canada/Saskatchewan", CST},
-            {"CAT", CAT},
-            {"CET", CET},
-            {"Chile/Continental", CLT},
-            {"Chile/EasterIsland", EASTER},
-            {"CST6CDT", CST},
-            {"Cuba", CUBA},
-            {"EAT", EAT},
-            {"EET", EET},
-            {"Egypt", EET},
-            {"Eire", DUBLIN},
-            {"EST5EDT", EST},
-            {"Etc/Greenwich", GMT},
-            {"Etc/UCT", UTC},
-            {"Etc/Universal", UTC},
-            {"Etc/UTC", UTC},
-            {"Etc/Zulu", UTC},
-            {"Europe/Amsterdam", CET},
-            {"Europe/Andorra", CET},
-            {"Europe/Athens", EET},
-            {"Europe/Belfast", GMTBST},
-            {"Europe/Belgrade", CET},
-            {"Europe/Berlin", CET},
-            {"Europe/Bratislava", CET},
-            {"Europe/Brussels", CET},
-            {"Europe/Budapest", CET},
-            {"Europe/Busingen", CET},
-            {"Europe/Chisinau", EET},
-            {"Europe/Copenhagen", CET},
-            {"Europe/Dublin", DUBLIN},
-            {"Europe/Gibraltar", CET},
-            {"Europe/Guernsey", GMTBST},
-            {"Europe/Helsinki", EET},
-            {"Europe/Isle_of_Man", GMTBST},
-            {"Europe/Istanbul", EET},
-            {"Europe/Jersey", GMTBST},
-            {"Europe/Kaliningrad", FET},
-            {"Europe/Kiev", EET},
-            {"Europe/Lisbon", WET},
-            {"Europe/Ljubljana", CET},
-            {"Europe/London", GMTBST},
-            {"Europe/Luxembourg", CET},
-            {"Europe/Madrid", CET},
-            {"Europe/Malta", CET},
-            {"Europe/Mariehamn", EET},
-            {"Europe/Minsk", FET},
-            {"Europe/Monaco", CET},
-            {"Europe/Moscow", MSK},
-            {"Europe/Nicosia", EET},
-            {"Europe/Oslo", CET},
-            {"Europe/Podgorica", CET},
-            {"Europe/Prague", CET},
-            {"Europe/Riga", EET},
-            {"Europe/Rome", CET},
-            {"Europe/Samara", new String[] {"Heure normale de Samara", "SAMT",
-                                            "Heure d'\u00e9t\u00e9 de Samara", "SAMST"}},
-            {"Europe/San_Marino", CET},
-            {"Europe/Sarajevo", CET},
-            {"Europe/Simferopol", EET},
-            {"Europe/Skopje", CET},
-            {"Europe/Sofia", EET},
-            {"Europe/Stockholm", CET},
-            {"Europe/Tallinn", EET},
-            {"Europe/Tirane", CET},
-            {"Europe/Tiraspol", EET},
-            {"Europe/Uzhgorod", EET},
-            {"Europe/Vaduz", CET},
-            {"Europe/Vatican", CET},
-            {"Europe/Vienna", CET},
-            {"Europe/Vilnius", EET},
-            {"Europe/Volgograd", new String[] {"Heure de Volgograd", "VOLT",
-                                               "Heure d'\u00e9t\u00e9 de Volgograd", "VOLST"}},
-            {"Europe/Warsaw", CET},
-            {"Europe/Zagreb", CET},
-            {"Europe/Zaporozhye", EET},
-            {"Europe/Zurich", CET},
-            {"GB", GMTBST},
-            {"GB-Eire", GMTBST},
-            {"Greenwich", GMT},
-            {"Hongkong", HKT},
-            {"Iceland", GMT},
-            {"Iran", IRT},
-            {"IST", IST},
-            {"Indian/Antananarivo", EAT},
-            {"Indian/Chagos", new String[] {"Heure de l'oc\u00e9an Indien", "IOT",
-                                            "Heure d'\u00e9t\u00e9 de l'oc\u00e9an Indien", "IOST"}},
-            {"Indian/Christmas", new String[] {"Heure de l'\u00cele Christmas", "CXT",
-                                               "Heure d'\u00e9t\u00e9 de l'\u00cele Christmas", "CXST"}},
-            {"Indian/Cocos", new String[] {"Heure des \u00celes Cocos", "CCT",
-                                           "Heure d'\u00e9t\u00e9 des \u00celes Cocos", "CCST"}},
-            {"Indian/Comoro", EAT},
-            {"Indian/Kerguelen", new String[] {"Heure des Terres australes antartiques fran\u00e7aises", "TFT",
-                                               "Heure d'\u00e9t\u00e9 des Terres australes antartiques fran\u00e7aises", "TFST"}},
-            {"Indian/Mahe", new String[] {"Heure des Seychelles", "SCT",
-                                          "Heure d'\u00e9t\u00e9 des Seychelles", "SCST"}},
-            {"Indian/Maldives", new String[] {"Heure des Maldives", "MVT",
-                                              "Heure d'\u00e9t\u00e9 des Maldives", "MVST"}},
-            {"Indian/Mauritius", new String[] {"Heure de Maurice", "MUT",
-                                               "Heure d'\u00e9t\u00e9 de Maurice", "MUST"}},
-            {"Indian/Mayotte", EAT},
-            {"Indian/Reunion", new String[] {"Heure de la R\u00e9union", "RET",
-                                             "Heure d'\u00e9t\u00e9 de la R\u00e9union", "REST"}},
-            {"Israel", ISRAEL},
-            {"Jamaica", EST},
-            {"Japan", JST},
-            {"Kwajalein", MHT},
-            {"Libya", CET},
-            {"MET", new String[] {"Heure de l'Europe centrale", "MET",
-                                  "Heure d'\u00e9t\u00e9 de l'Europe centrale", "MEST"}},
-            {"Mexico/BajaNorte", PST},
-            {"Mexico/BajaSur", MST},
-            {"Mexico/General", CST},
-            {"MIT", WST_SAMOA},
-            {"MST7MDT", MST},
-            {"Navajo", MST},
-            {"NET", ARMT},
-            {"NST", NZST},
-            {"NZ", NZST},
-            {"NZ-CHAT", CHAST},
-            {"PLT", PKT},
-            {"Portugal", WET},
-            {"PRT", AST},
-            {"Pacific/Apia", WST_SAMOA},
-            {"Pacific/Auckland", NZST},
-            {"Pacific/Chatham", CHAST},
-            {"Pacific/Chuuk", CHUT},
-            {"Pacific/Easter", EASTER},
-            {"Pacific/Efate", new String[] {"Heure du Vanuatu", "VUT",
-                                            "Heure d'\u00e9t\u00e9 du Vanuatu", "VUST"}},
-            {"Pacific/Enderbury", new String[] {"Heure de l'\u00cele de Phoenix", "PHOT",
-                                                "Heure d'\u00e9t\u00e9 de l'\u00cele de Phoenix", "PHOST"}},
-            {"Pacific/Fakaofo", new String[] {"Heure de Tokelau", "TKT",
-                                              "Heure d'\u00e9t\u00e9 de Tokelau", "TKST"}},
-            {"Pacific/Fiji", new String[] {"Heure de Fidji", "FJT",
-                                           "Heure d'\u00e9t\u00e9 de Fidji", "FJST"}},
-            {"Pacific/Funafuti", new String[] {"Heure de Tuvalu", "TVT",
-                                               "Heure d'\u00e9t\u00e9 de Tuvalu", "TVST"}},
-            {"Pacific/Galapagos", new String[] {"Heure des Galapagos", "GALT",
-                                                "Heure d'\u00e9t\u00e9 des Galapagos", "GALST"}},
-            {"Pacific/Gambier", GAMBIER},
-            {"Pacific/Guadalcanal", SBT},
-            {"Pacific/Guam", ChST},
-            {"Pacific/Johnston", HST},
-            {"Pacific/Kiritimati", new String[] {"Heure de l'\u00cele de Line", "LINT",
-                                                 "Heure d'\u00e9t\u00e9 de l'\u00cele de Line", "LINST"}},
-            {"Pacific/Kosrae", new String[] {"Heure de Kusaie", "KOST",
-                                             "Heure d'\u00e9t\u00e9 de Kusaie", "KOSST"}},
-            {"Pacific/Kwajalein", MHT},
-            {"Pacific/Majuro", MHT},
-            {"Pacific/Marquesas", new String[] {"Heure des Marquises", "MART",
-                                                "Heure d'\u00e9t\u00e9 des Marquises", "MARST"}},
-            {"Pacific/Midway", SAMOA},
-            {"Pacific/Nauru", new String[] {"Heure de Nauru", "NRT",
-                                            "Heure d'\u00e9t\u00e9 de Nauru", "NRST"}},
-            {"Pacific/Niue", new String[] {"Heure de Niue", "NUT",
-                                           "Heure d'\u00e9t\u00e9 de Niue", "NUST"}},
-            {"Pacific/Norfolk", new String[] {"Heure de Norfolk", "NFT",
-                                              "Heure d'\u00e9t\u00e9 de Norfolk", "NFST"}},
-            {"Pacific/Noumea", new String[] {"Heure de Nouvelle-Cal\u00e9donie", "NCT",
-                                             "Heure d'\u00e9t\u00e9 de Nouvelle-Cal\u00e9donie", "NCST"}},
-            {"Pacific/Pago_Pago", SAMOA},
-            {"Pacific/Palau", new String[] {"Heure de Palaos", "PWT",
-                                            "Heure d'\u00e9t\u00e9 de Palaos", "PWST"}},
-            {"Pacific/Pitcairn", PITCAIRN},
-            {"Pacific/Pohnpei", PONT},
-            {"Pacific/Ponape", PONT},
-            {"Pacific/Port_Moresby", new String[] {"Heure de Papouasie-Nouvelle-Guin\u00e9e", "PGT",
-                                                   "Heure d'\u00e9t\u00e9 de de Papouasie-Nouvelle-Guin\u00e9e", "PGST"}},
-            {"Pacific/Rarotonga", new String[] {"Heure des \u00celes Cook", "CKT",
-                                                "Heure d'\u00e9t\u00e9 des \u00celes Cook", "CKHST"}},
-            {"Pacific/Saipan", ChST},
-            {"Pacific/Samoa", SAMOA},
-            {"Pacific/Tahiti", new String[] {"Heure de Tahiti", "TAHT",
-                                             "Heure d'\u00e9t\u00e9 de Tahiti", "TAHST"}},
-            {"Pacific/Tarawa", new String[] {"Heure de Kiribati", "GILT",
-                                             "Heure d'\u00e9t\u00e9 de Kiribati", "GILST"}},
-            {"Pacific/Tongatapu", new String[] {"Heure de Tonga", "TOT",
-                                                "Heure d'\u00e9t\u00e9 de Tonga", "TOST"}},
-            {"Pacific/Truk", CHUT},
-            {"Pacific/Wake", new String[] {"Heure de Wake", "WAKT",
-                                           "Heure d'\u00e9t\u00e9 de Wake", "WAKST"}},
-            {"Pacific/Wallis", new String[] {"Heure de Wallis et Futuna", "WFT",
-                                             "Heure d'\u00e9t\u00e9 de Wallis et Futuna", "WFST"}},
-            {"Pacific/Yap", CHUT},
-            {"Poland", CET},
-            {"PRC", CTT},
-            {"PST8PDT", PST},
-            {"ROK", KST},
-            {"Singapore", SGT},
-            {"SST", SBT},
-            {"SystemV/AST4", AST},
-            {"SystemV/AST4ADT", AST},
-            {"SystemV/CST6", CST},
-            {"SystemV/CST6CDT", CST},
-            {"SystemV/EST5", EST},
-            {"SystemV/EST5EDT", EST},
-            {"SystemV/HST10", HST},
-            {"SystemV/MST7", MST},
-            {"SystemV/MST7MDT", MST},
-            {"SystemV/PST8", PST},
-            {"SystemV/PST8PDT", PST},
-            {"SystemV/YST9", AKST},
-            {"SystemV/YST9YDT", AKST},
-            {"Turkey", EET},
-            {"UCT", UTC},
-            {"Universal", UTC},
-            {"US/Alaska", AKST},
-            {"US/Aleutian", HAST},
-            {"US/Arizona", MST},
-            {"US/Central", CST},
-            {"US/Eastern", EST},
-            {"US/Hawaii", HST},
-            {"US/Indiana-Starke", CST},
-            {"US/East-Indiana", EST},
-            {"US/Michigan", EST},
-            {"US/Mountain", MST},
-            {"US/Pacific", PST},
-            {"US/Pacific-New", PST},
-            {"US/Samoa", SAMOA},
-            {"UTC", UTC},
-            {"VST", ICT},
-            {"W-SU", MSK},
-            {"WET", WET},
-            {"Zulu", UTC},
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_hi.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames_hi.java
deleted file mode 100755
index 17af124..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_hi.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 1999, 2005, 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.
- */
-
-/*
- * Copyright (c) 1998 International Business Machines.
- * All Rights Reserved.
- *
- */
-
-package sun.util.resources;
-
-public final class TimeZoneNames_hi extends TimeZoneNamesBundle {
-
-    protected final Object[][] getContents() {
-        return new Object[][] {
-            {"Asia/Calcutta",
-                new String[] {
-                    "\u092d\u093e\u0930\u0924\u0940\u092f \u0938\u092e\u092f", "IST",
-                    "\u092d\u093e\u0930\u0924\u0940\u092f \u0938\u092e\u092f", "IST"
-                }
-            },
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_it.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames_it.java
deleted file mode 100755
index ae28b07..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_it.java
+++ /dev/null
@@ -1,876 +0,0 @@
-/*
- * Copyright (c) 1997, 2011, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-public final class TimeZoneNames_it extends TimeZoneNamesBundle {
-
-    protected final Object[][] getContents() {
-        String ACT[] = new String[] {"Ora di Acre", "ACT",
-                                     "Ora estiva di Acre", "ACST"};
-        String ADELAIDE[] = new String[] {"Ora centrale standard (Australia del Sud)", "CST",
-                                          "Ora estiva standard (Australia del Sud)", "CST"};
-        String AGT[] = new String[] {"Ora dell'Argentina", "ART",
-                                     "Ora estiva dell'Argentina", "ARST"};
-        String AKST[] = new String[] {"Ora solare dell'Alaska", "AKST",
-                                      "Ora legale dell'Alaska", "AKDT"};
-        String AMT[] = new String[] {"Ora solare dell'Amazzonia", "AMT",
-                                     "Ora estiva dell'Amazzonia", "AMST"};
-        String ARAST[] = new String[] {"Ora solare dell'Arabia", "AST",
-                                       "Ora legale dell'Arabia", "ADT"};
-        String ARMT[] = new String[] {"Ora dell'Armenia", "AMT",
-                                      "Ora estiva dell'Armenia", "AMST"};
-        String AST[] = new String[] {"Ora solare dell'Atlantico occidentale", "AST",
-                                     "Ora legale dell'Atlantico occidentale", "ADT"};
-        String BDT[] = new String[] {"Ora del Bangladesh", "BDT",
-                                     "Ora estiva del Bangladesh", "BDST"};
-        String BRISBANE[] = new String[] {"Ora orientale standard (Queensland)", "EST",
-                                          "Ora estiva orientale (Queensland)", "EST"};
-        String BROKEN_HILL[] = new String[] {"Ora centrale standard (Australia del Sud/Nuovo Galles del Sud)", "CST",
-                                             "Ora estiva centrale (Australia del Sud/Nuovo Galles del Sud)", "CST"};
-        String BRT[] = new String[] {"Ora del Brasile", "BRT",
-                                     "Ora estiva del Brasile", "BRST"};
-        String BTT[] = new String[] {"Ora del Bhutan", "BTT",
-                                     "Ora estiva del Bhutan", "BTST"};
-        String CAT[] = new String[] {"Ora dell'Africa centrale", "CAT",
-                                     "Ora estiva dell'Africa centrale", "CAST"};
-        String CET[] = new String[] {"Ora dell'Europa centrale", "CET",
-                                     "Ora estiva dell'Europa centrale", "CEST"};
-        String CHAST[] = new String[] {"Ora di Chatham standard", "CHAST",
-                                       "Ora legale di Chatham", "CHADT"};
-        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
-                                      "Chuuk Summer Time", "CHUST"};
-        String ChST[] = new String[] {"Ora standard di Chamorro", "ChST",
-                              "Ora legale di Chamorro", "ChDT"};
-        String CIT[] = new String[] {"Ora dell'Indonesia centrale", "CIT",
-                                     "Ora estiva dell'Indonesia centrale", "CIST"};
-        String CLT[] = new String[] {"Ora del Cile", "CLT",
-                                     "Ora estiva del Cile", "CLST"};
-        String CST[] = new String[] {"Ora solare USA centrale", "CST",
-                                     "Ora legale USA centrale", "CDT"};
-        String CTT[] = new String[] {"Ora solare della Cina", "CST",
-                                     "Ora legale della Cina", "CDT"};
-        String CUBA[] = new String[] {"Ora solare Cuba", "CST",
-                                      "Ora legale Cuba", "CDT"};
-        String DARWIN[] = new String[] {"Ora centrale standard (Territori del Nord)", "CST",
-                                        "Ora estiva centrale (Territori del Nord)", "CST"};
-        String DUBLIN[] = new String[] {"Ora media di Greenwich", "GMT",
-                                        "Ora estiva irlandese", "IST"};
-        String EAT[] = new String[] {"Ora dell'Africa orientale", "EAT",
-                                     "Ora estiva dell'Africa orientale", "EAST"};
-        String EASTER[] = new String[] {"Ora dell'Isola di Pasqua", "EAST",
-                                        "Ora estiva dell'Isola di Pasqua", "EASST"};
-        String EET[] = new String[] {"Ora dell'Europa orientale", "EET",
-                                     "Ora estiva dell'Europa orientale", "EEST"};
-        String EGT[] = new String[] {"Ora della Groenlandia orientale", "EGT",
-                                     "Ora estiva della Groenlandia orientale", "EGST"};
-        String EST[] = new String[] {"Ora solare USA orientale", "EST",
-                                     "Ora legale USA orientale", "EDT"};
-        String EST_NSW[] = new String[] {"Ora solare dell'Australia orientale (Nuovo Galles del Sud)", "EST",
-                                         "Ora estiva dell'Australia orientale (Nuovo Galles del Sud)", "EST"};
-        String FET[] = new String[] {"Further-eastern European Time", "FET",
-                                     "Further-eastern European Summer Time", "FEST"};
-        String GHMT[] = new String[] {"Ora media del Ghana", "GMT",
-                                      "Ora legale del Ghana", "GHST"};
-        String GAMBIER[] =  new String[] {"Ora di Gambier", "GAMT",
-                                          "Ora estiva di Gambier", "GAMST"};
-        String GMT[] = new String[] {"Ora media di Greenwich", "GMT",
-                                   "Ora media di Greenwich", "GMT"};
-        String GMTBST[] = new String[] {"Ora media di Greenwich", "GMT",
-                                        "Ora estiva britannica", "BST"};
-        String GST[] = new String[] {"Ora solare del golfo", "GST",
-                                     "Ora legale del golfo", "GDT"};
-        String HAST[] = new String[] {"Ora solare delle Isole Hawaii-Aleutine", "HAST",
-                                      "Ora solare delle Isole Hawaii-Aleutine", "HADT"};
-        String HKT[] =  new String[] {"Ora di Hong Kong", "HKT",
-                                      "Ora estiva di Hong Kong", "HKST"};
-        String HST[] = new String[] {"Ora solare delle Isole Hawaii", "HST",
-                                     "Ora legale delle Isole Hawaii", "HDT"};
-        String ICT[] = new String[] {"Ora dell'Indocina", "ICT",
-                                     "Ora estiva dell'Indocina", "ICST"};
-        String IRT[] = new String[] {"Ora solare Iran", "IRST",
-                                     "Ora legale Iran", "IRDT"};
-        String ISRAEL[] = new String[] {"Ora standard di Israele", "IST",
-                                        "Ora legale di Israele", "IDT"};
-        String IST[] = new String[] {"Ora solare dell'India", "IST",
-                                     "Ora legale dell'India", "IDT"};
-        String JST[] = new String[] {"Ora solare del Giappone", "JST",
-                                     "Ora legale del Giappone", "JDT"};
-        String KST[] = new String[] {"Ora solare della Corea", "KST",
-                                     "Ora legale della Corea", "KDT"};
-        String LORD_HOWE[] = new String[] {"Ora standard di Lord Howe", "LHST",
-                                           "Ora estiva di Lord Howe", "LHST"};
-        String MHT[] = new String[] {"Ora delle Isole Marshall", "MHT",
-                                     "Ora estiva delle Isole Marshall", "MHST"};
-        String MSK[] = new String[] {"Ora standard di Mosca", "MSK",
-                                     "Ora legale di Mosca", "MSD"};
-        String MST[] = new String[] {"Ora solare USA occidentale", "MST",
-                                     "Ora legale USA occidentale", "MDT"};
-        String MYT[] = new String[] {"Ora della Malaysia", "MYT",
-                                     "Ora estiva della Malaysia", "MYST"};
-        String NORONHA[] = new String[] {"Ora di Fernando de Noronha", "FNT",
-                                         "Ora estiva di Fernando de Noronha", "FNST"};
-        String NOVT[] = new String[] {"Ora di Novosibirsk", "NOVT",
-                                      "Ora estiva di Novosibirsk", "NOVST"};
-        String NPT[] = new String[] {"Ora del Nepal", "NPT",
-                                     "Ora estiva del Nepal", "NPST"};
-        String NST[] = new String[] {"Ora solare di Terranova", "NST",
-                                     "Ora legale di Terranova", "NDT"};
-        String NZST[] = new String[] {"Ora solare della Nuova Zelanda", "NZST",
-                                      "Ora legale della Nuova Zelanda", "NZDT"};
-        String PITCAIRN[] = new String[] {"Ora standard di Pitcairn", "PST",
-                                          "Ora legale di Pitcairn", "PDT"};
-        String PKT[] = new String[] {"Ora del Pakistan", "PKT",
-                                     "Ora estiva del Pakistan", "PKST"};
-        String PONT[] = new String[] {"Pohnpei Time", "PONT",
-                                      "Pohnpei Summer Time", "PONST"};
-        String PST[] = new String[] {"Ora solare della costa occidentale USA", "PST",
-                                     "Ora legale della costa occidentale USA", "PDT"};
-        String SAMOA[] = new String[] {"Ora standard di Samoa", "SST",
-                                       "Ora legale di Samoa", "SDT"};
-        String SAST[] = new String[] {"Ora solare del Sudafrica", "SAST",
-                                      "Ora estiva del Sudafrica", "SAST"};
-        String SBT[] = new String[] {"Ora delle Isole Salomone", "SBT",
-                                     "Ora estiva delle Isole Salomone", "SBST"};
-        String SGT[] = new String[] {"Ora di Singapore", "SGT",
-                                     "Ora estiva di Singapore", "SGST"};
-        String SLST[] = new String[] {"Ora media di Greenwich", "GMT",
-                                      "Ora legale della Sierra Leone", "SLST"};
-        String TASMANIA[] = new String[] {"Ora orientale standard (Tasmania)", "EST",
-                                          "Ora estiva orientale (Tasmania)", "EST"};
-        String TMT[] = new String[] {"Ora del Turkmenistan", "TMT",
-                                     "Ora estiva del Turkmenistan", "TMST"};
-        String ULAT[]= new String[] {"Ora di Ulaanbaatar", "ULAT",
-                                     "Ora estiva di Ulaanbaatar", "ULAST"};
-        String UTC[] = new String[] {"Tempo universale coordinato", "UTC",
-                                     "Tempo universale coordinato", "UTC"};
-        String UZT[] = new String[] {"Ora dell'Uzbekistan", "UZT",
-                                     "Ora estiva dell'Uzbekistan", "UZST"};
-        String VICTORIA[] = new String[] {"Ora orientale standard (Victoria)", "EST",
-                                          "Ora estiva orientale (Victoria)", "EST"};
-        String VLAT[] = new String[] {"Ora di Vladivostok", "VLAT",
-                                      "Ora estiva di Vladivostok", "VLAST"};
-        String WART[] = new String[] {"Ora dell'Argentina occidentale", "WART",
-                                      "Ora estiva dell'Argentina occidentale", "WARST"};
-        String WAT[] = new String[] {"Ora dell'Africa occidentale", "WAT",
-                                     "Ora estiva dell'Africa occidentale", "WAST"};
-        String WET[] = new String[] {"Ora dell'Europa occidentale", "WET",
-                                     "Ora estiva dell'Europa occidentale", "WEST"};
-        String WIT[] = new String[] {"Ora dell'Indonesia occidentale", "WIT",
-                                     "Ora estiva dell'Indonesia occidentale", "WIST"};
-        String WST_AUS[] = new String[] {"Ora solare dell'Australia occidentale", "WST",
-                                         "Ora estiva dell'Australia occidentale", "WST"};
-        String WST_SAMOA[] = new String[] {"Ora di Samoa", "WST",
-                                           "Ora estiva di Samoa", "WSDT"};
-        String YAKT[] = new String[] {"Ora di Jakutsk", "YAKT",
-                                      "Ora estiva di Jakutsk", "YAKST"};
-
-        return new Object[][] {
-            {"America/Los_Angeles", PST},
-            {"PST", PST},
-            {"America/Denver", MST},
-            {"MST", MST},
-            {"America/Phoenix", MST},
-            {"PNT", MST},
-            {"America/Chicago", CST},
-            {"CST", CST},
-            {"America/New_York", EST},
-            {"EST", EST},
-            {"America/Indianapolis", EST},
-            {"IET", EST},
-            {"Pacific/Honolulu", HST},
-            {"HST", HST},
-            {"America/Anchorage", AKST},
-            {"AST", AKST},
-            {"America/Halifax", AST},
-            {"America/Sitka", AKST},
-            {"America/St_Johns", NST},
-            {"CNT", NST},
-            {"Europe/Paris", CET},
-            {"ECT", CET},
-            {"GMT", GMT},
-            {"Africa/Casablanca", WET},
-            {"Asia/Jerusalem", ISRAEL},
-            {"Asia/Tokyo", JST},
-            {"JST", JST},
-            {"Europe/Bucharest", EET},
-            {"Asia/Shanghai", CTT},
-            {"CTT", CTT},
-            /* Don't change the order of the above zones
-             * to keep compatibility with the previous version.
-             */
-
-            {"ACT", DARWIN},
-            {"AET", EST_NSW},
-            {"AGT", AGT},
-            {"ART", EET},
-            {"Africa/Abidjan", GMT},
-            {"Africa/Accra", GHMT},
-            {"Africa/Addis_Ababa", EAT},
-            {"Africa/Algiers", CET},
-            {"Africa/Asmara", EAT},
-            {"Africa/Asmera", EAT},
-            {"Africa/Bamako", GMT},
-            {"Africa/Bangui", WAT},
-            {"Africa/Banjul", GMT},
-            {"Africa/Bissau", GMT},
-            {"Africa/Blantyre", CAT},
-            {"Africa/Brazzaville", WAT},
-            {"Africa/Bujumbura", CAT},
-            {"Africa/Cairo", EET},
-            {"Africa/Ceuta", CET},
-            {"Africa/Conakry", GMT},
-            {"Africa/Dakar", GMT},
-            {"Africa/Dar_es_Salaam", EAT},
-            {"Africa/Djibouti", EAT},
-            {"Africa/Douala", WAT},
-            {"Africa/El_Aaiun", WET},
-            {"Africa/Freetown", SLST},
-            {"Africa/Gaborone", CAT},
-            {"Africa/Harare", CAT},
-            {"Africa/Johannesburg", SAST},
-            {"Africa/Juba", EAT},
-            {"Africa/Kampala", EAT},
-            {"Africa/Khartoum", EAT},
-            {"Africa/Kigali", CAT},
-            {"Africa/Kinshasa", WAT},
-            {"Africa/Lagos", WAT},
-            {"Africa/Libreville", WAT},
-            {"Africa/Lome", GMT},
-            {"Africa/Luanda", WAT},
-            {"Africa/Lubumbashi", CAT},
-            {"Africa/Lusaka", CAT},
-            {"Africa/Malabo", WAT},
-            {"Africa/Maputo", CAT},
-            {"Africa/Maseru", SAST},
-            {"Africa/Mbabane", SAST},
-            {"Africa/Mogadishu", EAT},
-            {"Africa/Monrovia", GMT},
-            {"Africa/Nairobi", EAT},
-            {"Africa/Ndjamena", WAT},
-            {"Africa/Niamey", WAT},
-            {"Africa/Nouakchott", GMT},
-            {"Africa/Ouagadougou", GMT},
-            {"Africa/Porto-Novo", WAT},
-            {"Africa/Sao_Tome", GMT},
-            {"Africa/Timbuktu", GMT},
-            {"Africa/Tripoli", CET},
-            {"Africa/Tunis", CET},
-            {"Africa/Windhoek", WAT},
-            {"America/Adak", HAST},
-            {"America/Anguilla", AST},
-            {"America/Antigua", AST},
-            {"America/Araguaina", BRT},
-            {"America/Argentina/Buenos_Aires", AGT},
-            {"America/Argentina/Catamarca", AGT},
-            {"America/Argentina/ComodRivadavia", AGT},
-            {"America/Argentina/Cordoba", AGT},
-            {"America/Argentina/Jujuy", AGT},
-            {"America/Argentina/La_Rioja", AGT},
-            {"America/Argentina/Mendoza", AGT},
-            {"America/Argentina/Rio_Gallegos", AGT},
-            {"America/Argentina/Salta", AGT},
-            {"America/Argentina/San_Juan", AGT},
-            {"America/Argentina/San_Luis", WART},
-            {"America/Argentina/Tucuman", AGT},
-            {"America/Argentina/Ushuaia", AGT},
-            {"America/Aruba", AST},
-            {"America/Asuncion", new String[] {"Ora del Paraguay", "PYT",
-                                               "Ora estiva del Paraguay", "PYST"}},
-            {"America/Atikokan", EST},
-            {"America/Atka", HAST},
-            {"America/Bahia", BRT},
-            {"America/Bahia_Banderas", CST},
-            {"America/Barbados", AST},
-            {"America/Belem", BRT},
-            {"America/Belize", CST},
-            {"America/Blanc-Sablon", AST},
-            {"America/Boa_Vista", AMT},
-            {"America/Bogota", new String[] {"Ora della Colombia", "COT",
-                                             "Ora estiva della Colombia", "COST"}},
-            {"America/Boise", MST},
-            {"America/Buenos_Aires", AGT},
-            {"America/Cambridge_Bay", MST},
-            {"America/Campo_Grande", AMT},
-            {"America/Cancun", CST},
-            {"America/Caracas", new String[] {"Ora del Venezuela", "VET",
-                                              "Ora estiva del Venezuela", "VEST"}},
-            {"America/Catamarca", AGT},
-            {"America/Cayenne", new String[] {"Ora della Guyana Francese", "GFT",
-                                              "Ora estiva della Guyana Francese", "GFST"}},
-            {"America/Cayman", EST},
-            {"America/Chihuahua", MST},
-            {"America/Creston", MST},
-            {"America/Coral_Harbour", EST},
-            {"America/Cordoba", AGT},
-            {"America/Costa_Rica", CST},
-            {"America/Cuiaba", AMT},
-            {"America/Curacao", AST},
-            {"America/Danmarkshavn", GMT},
-            {"America/Dawson", PST},
-            {"America/Dawson_Creek", MST},
-            {"America/Detroit", EST},
-            {"America/Dominica", AST},
-            {"America/Edmonton", MST},
-            {"America/Eirunepe", AMT},
-            {"America/El_Salvador", CST},
-            {"America/Ensenada", PST},
-            {"America/Fort_Wayne", EST},
-            {"America/Fortaleza", BRT},
-            {"America/Glace_Bay", AST},
-            {"America/Godthab", new String[] {"Ora della Groenlandia occidentale", "WGT",
-                                              "Ora estiva della Groenlandia occidentale", "WGST"}},
-            {"America/Goose_Bay", AST},
-            {"America/Grand_Turk", EST},
-            {"America/Grenada", AST},
-            {"America/Guadeloupe", AST},
-            {"America/Guatemala", CST},
-            {"America/Guayaquil", new String[] {"Ora dell'Ecuador", "ECT",
-                                                "Ora estiva dell'Ecuador", "ECST"}},
-            {"America/Guyana", new String[] {"Ora della Guyana", "GYT",
-                                             "Ora estiva della Guyana", "GYST"}},
-            {"America/Havana", CUBA},
-            {"America/Hermosillo", MST},
-            {"America/Indiana/Indianapolis", EST},
-            {"America/Indiana/Knox", CST},
-            {"America/Indiana/Marengo", EST},
-            {"America/Indiana/Petersburg", EST},
-            {"America/Indiana/Tell_City", CST},
-            {"America/Indiana/Vevay", EST},
-            {"America/Indiana/Vincennes", EST},
-            {"America/Indiana/Winamac", EST},
-            {"America/Inuvik", MST},
-            {"America/Iqaluit", EST},
-            {"America/Jamaica", EST},
-            {"America/Jujuy", AGT},
-            {"America/Juneau", AKST},
-            {"America/Kentucky/Louisville", EST},
-            {"America/Kentucky/Monticello", EST},
-            {"America/Knox_IN", CST},
-            {"America/Kralendijk", AST},
-            {"America/La_Paz", new String[] {"Ora della Bolivia", "BOT",
-                                             "Ora estiva della Bolivia", "BOST"}},
-            {"America/Lima", new String[] {"Ora del Per\u00f9", "PET",
-                                           "Ora estiva del Per\u00f9", "PEST"}},
-            {"America/Louisville", EST},
-            {"America/Lower_Princes", AST},
-            {"America/Maceio", BRT},
-            {"America/Managua", CST},
-            {"America/Manaus", AMT},
-            {"America/Marigot", AST},
-            {"America/Martinique", AST},
-            {"America/Matamoros", CST},
-            {"America/Mazatlan", MST},
-            {"America/Mendoza", AGT},
-            {"America/Menominee", CST},
-            {"America/Merida", CST},
-            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
-                                                 "Metlakatla Daylight Time", "MeDT"}},
-            {"America/Mexico_City", CST},
-            {"America/Miquelon", new String[] {"Ora solare di Saint-Pierre e Miquelon", "PMST",
-                                               "Ora legale di Saint-Pierre e Miquelon", "PMDT"}},
-            {"America/Moncton", AST},
-            {"America/Montevideo", new String[] {"Ora dell'Uruguay", "UYT",
-                                                 "Ora estiva dell'Uruguay", "UYST"}},
-            {"America/Monterrey", CST},
-            {"America/Montreal", EST},
-            {"America/Montserrat", AST},
-            {"America/Nassau", EST},
-            {"America/Nipigon", EST},
-            {"America/Nome", AKST},
-            {"America/Noronha", NORONHA},
-            {"America/North_Dakota/Beulah", CST},
-            {"America/North_Dakota/Center", CST},
-            {"America/North_Dakota/New_Salem", CST},
-            {"America/Ojinaga", MST},
-            {"America/Panama", EST},
-            {"America/Pangnirtung", EST},
-            {"America/Paramaribo", new String[] {"Ora di Suriname", "SRT",
-                                                 "Ora estiva di Suriname", "SRST"}},
-            {"America/Port-au-Prince", EST},
-            {"America/Port_of_Spain", AST},
-            {"America/Porto_Acre", AMT},
-            {"America/Porto_Velho", AMT},
-            {"America/Puerto_Rico", AST},
-            {"America/Rainy_River", CST},
-            {"America/Rankin_Inlet", CST},
-            {"America/Recife", BRT},
-            {"America/Regina", CST},
-            {"America/Resolute", CST},
-            {"America/Rio_Branco", AMT},
-            {"America/Rosario", AGT},
-            {"America/Santa_Isabel", PST},
-            {"America/Santarem", BRT},
-            {"America/Santiago", CLT},
-            {"America/Santo_Domingo", AST},
-            {"America/Sao_Paulo", BRT},
-            {"America/Scoresbysund", EGT},
-            {"America/Shiprock", MST},
-            {"America/St_Barthelemy", AST},
-            {"America/St_Kitts", AST},
-            {"America/St_Lucia", AST},
-            {"America/St_Thomas", AST},
-            {"America/St_Vincent", AST},
-            {"America/Swift_Current", CST},
-            {"America/Tegucigalpa", CST},
-            {"America/Thule", AST},
-            {"America/Thunder_Bay", EST},
-            {"America/Tijuana", PST},
-            {"America/Toronto", EST},
-            {"America/Tortola", AST},
-            {"America/Vancouver", PST},
-            {"America/Virgin", AST},
-            {"America/Whitehorse", PST},
-            {"America/Winnipeg", CST},
-            {"America/Yakutat", AKST},
-            {"America/Yellowknife", MST},
-            {"Antarctica/Casey", WST_AUS},
-            {"Antarctica/Davis", new String[] {"Ora di Davis", "DAVT",
-                                               "Ora estiva di Davis", "DAVST"}},
-            {"Antarctica/DumontDUrville", new String[] {"Ora di Dumont-d'Urville", "DDUT",
-                                                        "Ora estiva di Dumont-d'Urville", "DDUST"}},
-            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
-                                                   "Macquarie Island Summer Time", "MIST"}},
-            {"Antarctica/Mawson", new String[] {"Ora di Mawson", "MAWT",
-                                                "Ora estiva di Mawson", "MAWST"}},
-            {"Antarctica/McMurdo", NZST},
-            {"Antarctica/Palmer", CLT},
-            {"Antarctica/Rothera", new String[] {"Ora di Rothera", "ROTT",
-                                                 "Ora estiva di Rothera", "ROTST"}},
-            {"Antarctica/South_Pole", NZST},
-            {"Antarctica/Syowa", new String[] {"Ora di Syowa", "SYOT",
-                                               "Ora estiva di Syowa", "SYOST"}},
-            {"Antarctica/Vostok", new String[] {"Ora di Vostok", "VOST",
-                                                "Ora estiva di Vostok", "VOSST"}},
-            {"Arctic/Longyearbyen", CET},
-            {"Asia/Aden", ARAST},
-            {"Asia/Almaty", new String[] {"Ora di Alma-Ata", "ALMT",
-                                          "Ora estiva di Alma-Ata", "ALMST"}},
-            {"Asia/Amman", EET},
-            {"Asia/Anadyr", new String[] {"Ora di Anadyr", "ANAT",
-                                          "Ora estiva di Anadyr", "ANAST"}},
-            {"Asia/Aqtau", new String[] {"Ora di Aqtau", "AQTT",
-                                         "Ora estiva di Aqtau", "AQTST"}},
-            {"Asia/Aqtobe", new String[] {"Ora di Aqtobe", "AQTT",
-                                          "Ora estiva di Aqtobe", "AQTST"}},
-            {"Asia/Ashgabat", TMT},
-            {"Asia/Ashkhabad", TMT},
-            {"Asia/Baghdad", ARAST},
-            {"Asia/Bahrain", ARAST},
-            {"Asia/Baku", new String[] {"Ora dell'Azerbaigian", "AZT",
-                                        "Ora estiva dell'Azerbaigian", "AZST"}},
-            {"Asia/Bangkok", ICT},
-            {"Asia/Beirut", EET},
-            {"Asia/Bishkek", new String[] {"Ora del Kirghizistan", "KGT",
-                                           "Ora estiva del Kirghizistan", "KGST"}},
-            {"Asia/Brunei", new String[] {"Ora del Brunei", "BNT",
-                                          "Ora estiva del Brunei", "BNST"}},
-            {"Asia/Calcutta", IST},
-            {"Asia/Choibalsan", new String[] {"Ora di Choibalsan", "CHOT",
-                                              "Ora estiva di Choibalsan", "CHOST"}},
-            {"Asia/Chongqing", CTT},
-            {"Asia/Chungking", CTT},
-            {"Asia/Colombo", IST},
-            {"Asia/Dacca", BDT},
-            {"Asia/Dhaka", BDT},
-            {"Asia/Dili", new String[] {"Ora di Timor Leste", "TLT",
-                                        "Ora estiva di Timor Leste", "TLST"}},
-            {"Asia/Damascus", EET},
-            {"Asia/Dubai", GST},
-            {"Asia/Dushanbe", new String[] {"Ora del Tagikistan", "TJT",
-                                            "Ora estiva del Tagikistan", "TJST"}},
-            {"Asia/Gaza", EET},
-            {"Asia/Harbin", CTT},
-            {"Asia/Hebron", EET},
-            {"Asia/Ho_Chi_Minh", ICT},
-            {"Asia/Hong_Kong", HKT},
-            {"Asia/Hovd", new String[] {"Ora di Hovd", "HOVT",
-                                        "Ora estiva di Hovd", "HOVST"}},
-            {"Asia/Irkutsk", new String[] {"Ora di Irkutsk", "IRKT",
-                                           "Ora estiva di Irkutsk", "IRKST"}},
-            {"Asia/Istanbul", EET},
-            {"Asia/Jakarta", WIT},
-            {"Asia/Jayapura", new String[] {"Ora dell'Indonesia orientale", "EIT",
-                                            "Ora estiva dell'Indonesia orientale", "EIST"}},
-            {"Asia/Kabul", new String[] {"Ora dell'Afghanistan", "AFT",
-                                         "Ora estiva dell'Afghanistan", "AFST"}},
-            {"Asia/Kamchatka", new String[] {"Ora di Petropavlovsk-Kamchatski", "PETT",
-                                             "Ora estiva di Petropavlovsk-Kamchatski", "PETST"}},
-            {"Asia/Karachi", PKT},
-            {"Asia/Kashgar", CTT},
-            {"Asia/Kathmandu", NPT},
-            {"Asia/Katmandu", NPT},
-            {"Asia/Khandyga", YAKT},
-            {"Asia/Kolkata", IST},
-            {"Asia/Krasnoyarsk", new String[] {"Ora di Krasnojarsk", "KRAT",
-                                               "Ora estiva di Krasnojarsk", "KRAST"}},
-            {"Asia/Kuala_Lumpur", MYT},
-            {"Asia/Kuching", MYT},
-            {"Asia/Kuwait", ARAST},
-            {"Asia/Macao", CTT},
-            {"Asia/Macau", CTT},
-            {"Asia/Magadan", new String[] {"Ora di Magadan", "MAGT",
-                                           "Ora estiva di Magadan", "MAGST"}},
-            {"Asia/Makassar", CIT},
-            {"Asia/Manila", new String[] {"Ora delle Filippine", "PHT",
-                                          "Ora estiva delle Filippine", "PHST"}},
-            {"Asia/Muscat", GST},
-            {"Asia/Nicosia", EET},
-            {"Asia/Novokuznetsk", NOVT},
-            {"Asia/Novosibirsk", NOVT},
-            {"Asia/Oral", new String[] {"Ora di Oral", "ORAT",
-                                        "Ora estiva di Oral", "ORAST"}},
-            {"Asia/Omsk", new String[] {"Ora di Omsk", "OMST",
-                                        "Ora estiva di Omsk", "OMSST"}},
-            {"Asia/Phnom_Penh", ICT},
-            {"Asia/Pontianak", WIT},
-            {"Asia/Pyongyang", KST},
-            {"Asia/Qatar", ARAST},
-            {"Asia/Qyzylorda", new String[] {"Ora di Qyzylorda", "QYZT",
-                                             "Ora estiva di Qyzylorda", "QYZST"}},
-            {"Asia/Rangoon", new String[] {"Ora della Birmania/Myanmar", "MMT",
-                                           "Ora estiva della Birmania/Myanmar", "MMST"}},
-            {"Asia/Riyadh", ARAST},
-            {"Asia/Saigon", ICT},
-            {"Asia/Sakhalin", new String[] {"Ora di Sakhalin", "SAKT",
-                                            "Ora estiva di Sakhalin", "SAKST"}},
-            {"Asia/Samarkand", UZT},
-            {"Asia/Seoul", KST},
-            {"Asia/Singapore", SGT},
-            {"Asia/Taipei", CTT},
-            {"Asia/Tel_Aviv", ISRAEL},
-            {"Asia/Tashkent", UZT},
-            {"Asia/Tbilisi", new String[] {"Ora della Georgia", "GET",
-                                           "Ora estiva della Georgia", "GEST"}},
-            {"Asia/Tehran", IRT},
-            {"Asia/Thimbu", BTT},
-            {"Asia/Thimphu", BTT},
-            {"Asia/Ujung_Pandang", CIT},
-            {"Asia/Ulaanbaatar", ULAT},
-            {"Asia/Ulan_Bator", ULAT},
-            {"Asia/Urumqi", CTT},
-            {"Asia/Ust-Nera", VLAT},
-            {"Asia/Vientiane", ICT},
-            {"Asia/Vladivostok", VLAT},
-            {"Asia/Yakutsk", YAKT},
-            {"Asia/Yekaterinburg", new String[] {"Ora di Ekaterinburg", "YEKT",
-                                                 "Ora estiva di Ekaterinburg", "YEKST"}},
-            {"Asia/Yerevan", ARMT},
-            {"Atlantic/Azores", new String[] {"Ora delle Azzorre", "AZOT",
-                                              "Ora estiva delle Azzorre", "AZOST"}},
-            {"Atlantic/Bermuda", AST},
-            {"Atlantic/Canary", WET},
-            {"Atlantic/Cape_Verde", new String[] {"Ora di Capo Verde", "CVT",
-                                                  "Ora estiva di Capo Verde", "CVST"}},
-            {"Atlantic/Faroe", WET},
-            {"Atlantic/Faeroe", WET},
-            {"Atlantic/Jan_Mayen", CET},
-            {"Atlantic/Madeira", WET},
-            {"Atlantic/Reykjavik", GMT},
-            {"Atlantic/South_Georgia", new String[] {"Ora solare della Georgia Australe", "GST",
-                                                     "Ora legale della Georgia Australe", "GDT"}},
-            {"Atlantic/St_Helena", GMT},
-            {"Atlantic/Stanley", new String[] {"Ora delle Falkland", "FKT",
-                                               "Ora estiva delle Falkland", "FKST"}},
-            {"Australia/ACT", EST_NSW},
-            {"Australia/Adelaide", ADELAIDE},
-            {"Australia/Brisbane", BRISBANE},
-            {"Australia/Broken_Hill", BROKEN_HILL},
-            {"Australia/Canberra", EST_NSW},
-            {"Australia/Currie", EST_NSW},
-            {"Australia/Darwin", DARWIN},
-            {"Australia/Eucla", new String[] {"Ora solare Australia centrorientale", "CWST",
-                                              "Ora estiva Australia centrorientale", "CWST"}},
-            {"Australia/Hobart", TASMANIA},
-            {"Australia/LHI", LORD_HOWE},
-            {"Australia/Lindeman", BRISBANE},
-            {"Australia/Lord_Howe", LORD_HOWE},
-            {"Australia/Melbourne", VICTORIA},
-            {"Australia/North", DARWIN},
-            {"Australia/NSW", EST_NSW},
-            {"Australia/Perth", WST_AUS},
-            {"Australia/Queensland", BRISBANE},
-            {"Australia/South", ADELAIDE},
-            {"Australia/Sydney", EST_NSW},
-            {"Australia/Tasmania", TASMANIA},
-            {"Australia/Victoria", VICTORIA},
-            {"Australia/West", WST_AUS},
-            {"Australia/Yancowinna", BROKEN_HILL},
-            {"BET", BRT},
-            {"BST", BDT},
-            {"Brazil/Acre", AMT},
-            {"Brazil/DeNoronha", NORONHA},
-            {"Brazil/East", BRT},
-            {"Brazil/West", AMT},
-            {"Canada/Atlantic", AST},
-            {"Canada/Central", CST},
-            {"Canada/East-Saskatchewan", CST},
-            {"Canada/Eastern", EST},
-            {"Canada/Mountain", MST},
-            {"Canada/Newfoundland", NST},
-            {"Canada/Pacific", PST},
-            {"Canada/Yukon", PST},
-            {"Canada/Saskatchewan", CST},
-            {"CAT", CAT},
-            {"CET", CET},
-            {"Chile/Continental", CLT},
-            {"Chile/EasterIsland", EASTER},
-            {"CST6CDT", CST},
-            {"Cuba", CUBA},
-            {"EAT", EAT},
-            {"EET", EET},
-            {"Egypt", EET},
-            {"Eire", DUBLIN},
-            {"EST5EDT", EST},
-            {"Etc/Greenwich", GMT},
-            {"Etc/UCT", UTC},
-            {"Etc/Universal", UTC},
-            {"Etc/UTC", UTC},
-            {"Etc/Zulu", UTC},
-            {"Europe/Amsterdam", CET},
-            {"Europe/Andorra", CET},
-            {"Europe/Athens", EET},
-            {"Europe/Belfast", GMTBST},
-            {"Europe/Belgrade", CET},
-            {"Europe/Berlin", CET},
-            {"Europe/Bratislava", CET},
-            {"Europe/Brussels", CET},
-            {"Europe/Budapest", CET},
-            {"Europe/Busingen", CET},
-            {"Europe/Chisinau", EET},
-            {"Europe/Copenhagen", CET},
-            {"Europe/Dublin", DUBLIN},
-            {"Europe/Gibraltar", CET},
-            {"Europe/Guernsey", GMTBST},
-            {"Europe/Helsinki", EET},
-            {"Europe/Isle_of_Man", GMTBST},
-            {"Europe/Istanbul", EET},
-            {"Europe/Jersey", GMTBST},
-            {"Europe/Kaliningrad", FET},
-            {"Europe/Kiev", EET},
-            {"Europe/Lisbon", WET},
-            {"Europe/Ljubljana", CET},
-            {"Europe/London", GMTBST},
-            {"Europe/Luxembourg", CET},
-            {"Europe/Madrid", CET},
-            {"Europe/Malta", CET},
-            {"Europe/Mariehamn", EET},
-            {"Europe/Minsk", FET},
-            {"Europe/Monaco", CET},
-            {"Europe/Moscow", MSK},
-            {"Europe/Nicosia", EET},
-            {"Europe/Oslo", CET},
-            {"Europe/Podgorica", CET},
-            {"Europe/Prague", CET},
-            {"Europe/Riga", EET},
-            {"Europe/Rome", CET},
-            {"Europe/Samara", new String[] {"Ora di Samara", "SAMT",
-                                            "Ora estiva di Samara", "SAMST"}},
-            {"Europe/San_Marino", CET},
-            {"Europe/Sarajevo", CET},
-            {"Europe/Simferopol", EET},
-            {"Europe/Skopje", CET},
-            {"Europe/Sofia", EET},
-            {"Europe/Stockholm", CET},
-            {"Europe/Tallinn", EET},
-            {"Europe/Tirane", CET},
-            {"Europe/Tiraspol", EET},
-            {"Europe/Uzhgorod", EET},
-            {"Europe/Vaduz", CET},
-            {"Europe/Vatican", CET},
-            {"Europe/Vienna", CET},
-            {"Europe/Vilnius", EET},
-            {"Europe/Volgograd", new String[] {"Ora di Volgograd", "VOLT",
-                                               "Ora estiva di Volgograd", "VOLST"}},
-            {"Europe/Warsaw", CET},
-            {"Europe/Zagreb", CET},
-            {"Europe/Zaporozhye", EET},
-            {"Europe/Zurich", CET},
-            {"GB", GMTBST},
-            {"GB-Eire", GMTBST},
-            {"Greenwich", GMT},
-            {"Hongkong", HKT},
-            {"Iceland", GMT},
-            {"Iran", IRT},
-            {"IST", IST},
-            {"Indian/Antananarivo", EAT},
-            {"Indian/Chagos", new String[] {"Ora del Terr. Britannico dell'Oceano Indiano", "IOT",
-                                            "Ora estiva del Terr. Britannico dell'Oceano Indiano", "IOST"}},
-            {"Indian/Christmas", new String[] {"Ora dell'Isola Christmas", "CXT",
-                                               "Ora estiva dell'Isola Christmas", "CXST"}},
-            {"Indian/Cocos", new String[] {"Ora delle Isole Cocos", "CCT",
-                                           "Ora estiva delle Isole Cocos", "CCST"}},
-            {"Indian/Comoro", EAT},
-            {"Indian/Kerguelen", new String[] {"Ora delle Terre Australi e Antartiche Francesi", "TFT",
-                                               "Ora estiva delle Terre Australi Antartiche Francesi", "TFST"}},
-            {"Indian/Mahe", new String[] {"Ora delle Seychelles", "SCT",
-                                          "Ora estiva delle Seychelles", "SCST"}},
-            {"Indian/Maldives", new String[] {"Ora delle Maldive", "MVT",
-                                              "Ora estiva delle Maldive", "MVST"}},
-            {"Indian/Mauritius", new String[] {"Ora di Mauritius", "MUT",
-                                               "Ora estiva di Mauritius", "MUST"}},
-            {"Indian/Mayotte", EAT},
-            {"Indian/Reunion", new String[] {"Ora di Reunion", "RET",
-                                             "Ora estiva di Reunion", "REST"}},
-            {"Israel", ISRAEL},
-            {"Jamaica", EST},
-            {"Japan", JST},
-            {"Kwajalein", MHT},
-            {"Libya", CET},
-            {"MET", new String[] {"Ora dell'Europa centrale", "MET",
-                                  "Ora estiva dell'Europa centrale", "MEST"}},
-            {"Mexico/BajaNorte", PST},
-            {"Mexico/BajaSur", MST},
-            {"Mexico/General", CST},
-            {"MIT", WST_SAMOA},
-            {"MST7MDT", MST},
-            {"Navajo", MST},
-            {"NET", ARMT},
-            {"NST", NZST},
-            {"NZ", NZST},
-            {"NZ-CHAT", CHAST},
-            {"PLT", PKT},
-            {"Portugal", WET},
-            {"PRT", AST},
-            {"Pacific/Apia", WST_SAMOA},
-            {"Pacific/Auckland", NZST},
-            {"Pacific/Chatham", CHAST},
-            {"Pacific/Chuuk", CHUT},
-            {"Pacific/Easter", EASTER},
-            {"Pacific/Efate", new String[] {"Ora di Vanuatu", "VUT",
-                                            "Ora estiva di Vanuatu", "VUST"}},
-            {"Pacific/Enderbury", new String[] {"Ora dell'Isola della Fenice", "PHOT",
-                                                "Ora estiva dell'Isola della Fenice", "PHOST"}},
-            {"Pacific/Fakaofo", new String[] {"Ora di Tokelau", "TKT",
-                                              "Ora estiva di Tokelau", "TKST"}},
-            {"Pacific/Fiji", new String[] {"Ora di Figi", "FJT",
-                                           "Ora estiva di Figi", "FJST"}},
-            {"Pacific/Funafuti", new String[] {"Ora di Tuvalu", "TVT",
-                                               "Ora estiva di Tuvalu", "TVST"}},
-            {"Pacific/Galapagos", new String[] {"Ora delle Galapagos", "GALT",
-                                                "Ora estiva delle Galapagos", "GALST"}},
-            {"Pacific/Gambier", GAMBIER},
-            {"Pacific/Guadalcanal", SBT},
-            {"Pacific/Guam", ChST},
-            {"Pacific/Johnston", HST},
-            {"Pacific/Kiritimati", new String[] {"Ora delle Line Islands", "LINT",
-                                                 "Ora estiva delle Line Islands", "LINST"}},
-            {"Pacific/Kosrae", new String[] {"Ora di Kosrae", "KOST",
-                                             "Ora estiva di Kosrae", "KOSST"}},
-            {"Pacific/Kwajalein", MHT},
-            {"Pacific/Majuro", MHT},
-            {"Pacific/Marquesas", new String[] {"Ora delle Isole Marchesi", "MART",
-                                                "Ora estiva delle Isole Marchesi", "MARST"}},
-            {"Pacific/Midway", SAMOA},
-            {"Pacific/Nauru", new String[] {"Ora di Nauru", "NRT",
-                                            "Ora estiva di Nauru", "NRST"}},
-            {"Pacific/Niue", new String[] {"Ora di Niue", "NUT",
-                                           "Ora estiva di Niue", "NUST"}},
-            {"Pacific/Norfolk", new String[] {"Ora di Norfolk", "NFT",
-                                              "Ora estiva di Norfolk", "NFST"}},
-            {"Pacific/Noumea", new String[] {"Ora della Nuova Caledonia", "NCT",
-                                             "Ora estiva della Nuova Caledonia", "NCST"}},
-            {"Pacific/Pago_Pago", SAMOA},
-            {"Pacific/Palau", new String[] {"Ora di Palau", "PWT",
-                                            "Ora estiva di Palau", "PWST"}},
-            {"Pacific/Pitcairn", PITCAIRN},
-            {"Pacific/Pohnpei", PONT},
-            {"Pacific/Ponape", PONT},
-            {"Pacific/Port_Moresby", new String[] {"Ora di Papua Nuova Guinea", "PGT",
-                                                   "Ora estiva di Papua Nuova Guinea", "PGST"}},
-            {"Pacific/Rarotonga", new String[] {"Ora delle Isole Cook", "CKT",
-                                                "Ora estiva delle Isole Cook", "CKHST"}},
-            {"Pacific/Saipan", ChST},
-            {"Pacific/Samoa", SAMOA},
-            {"Pacific/Tahiti", new String[] {"Ora di Tahiti", "TAHT",
-                                             "Ora estiva di Tahiti", "TAHST"}},
-            {"Pacific/Tarawa", new String[] {"Ora delle Isole Gilbert", "GILT",
-                                             "Ora estiva delle Isole Gilbert", "GILST"}},
-            {"Pacific/Tongatapu", new String[] {"Ora di Tonga", "TOT",
-                                                "Ora estiva di Tonga", "TOST"}},
-            {"Pacific/Truk", CHUT},
-            {"Pacific/Wake", new String[] {"Ora di Wake", "WAKT",
-                                           "Ora estiva di Wake", "WAKST"}},
-            {"Pacific/Wallis", new String[] {"Ora di Wallis e Futuna", "WFT",
-                                             "Ora estiva di Wallis e Futuna", "WFST"}},
-            {"Pacific/Yap", CHUT},
-            {"Poland", CET},
-            {"PRC", CTT},
-            {"PST8PDT", PST},
-            {"ROK", KST},
-            {"Singapore", SGT},
-            {"SST", SBT},
-            {"SystemV/AST4", AST},
-            {"SystemV/AST4ADT", AST},
-            {"SystemV/CST6", CST},
-            {"SystemV/CST6CDT", CST},
-            {"SystemV/EST5", EST},
-            {"SystemV/EST5EDT", EST},
-            {"SystemV/HST10", HST},
-            {"SystemV/MST7", MST},
-            {"SystemV/MST7MDT", MST},
-            {"SystemV/PST8", PST},
-            {"SystemV/PST8PDT", PST},
-            {"SystemV/YST9", AKST},
-            {"SystemV/YST9YDT", AKST},
-            {"Turkey", EET},
-            {"UCT", UTC},
-            {"Universal", UTC},
-            {"US/Alaska", AKST},
-            {"US/Aleutian", HAST},
-            {"US/Arizona", MST},
-            {"US/Central", CST},
-            {"US/Eastern", EST},
-            {"US/Hawaii", HST},
-            {"US/Indiana-Starke", CST},
-            {"US/East-Indiana", EST},
-            {"US/Michigan", EST},
-            {"US/Mountain", MST},
-            {"US/Pacific", PST},
-            {"US/Pacific-New", PST},
-            {"US/Samoa", SAMOA},
-            {"UTC", UTC},
-            {"VST", ICT},
-            {"W-SU", MSK},
-            {"WET", WET},
-            {"Zulu", UTC},
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_ja.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames_ja.java
deleted file mode 100755
index a961429..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_ja.java
+++ /dev/null
@@ -1,876 +0,0 @@
-/*
- * Copyright (c) 1997, 2011, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-public final class TimeZoneNames_ja extends TimeZoneNamesBundle {
-
-    protected final Object[][] getContents() {
-        String ACT[] = new String[] {"\u30a2\u30af\u30ec\u6642\u9593", "ACT",
-                                     "\u30a2\u30af\u30ec\u590f\u6642\u9593", "ACST"};
-        String ADELAIDE[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642 (\u5357\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "CST",
-                                          "\u4e2d\u90e8\u590f\u6642\u9593 (\u5357\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "CST"};
-        String AGT[] = new String[] {"\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "ART",
-                                     "\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "ARST"};
-        String AKST[] = new String[] {"\u30a2\u30e9\u30b9\u30ab\u6a19\u6e96\u6642", "AKST",
-                                      "\u30a2\u30e9\u30b9\u30ab\u590f\u6642\u9593", "AKDT"};
-        String AMT[] = new String[] {"\u30a2\u30de\u30be\u30f3\u6642\u9593", "AMT",
-                                     "\u30a2\u30de\u30be\u30f3\u590f\u6642\u9593", "AMST"};
-        String ARAST[] = new String[] {"\u30a2\u30e9\u30d3\u30a2\u6a19\u6e96\u6642", "AST",
-                                       "\u30a2\u30e9\u30d3\u30a2\u590f\u6642\u9593", "ADT"};
-        String ARMT[] = new String[] {"\u30a2\u30eb\u30e1\u30cb\u30a2\u6642\u9593", "AMT",
-                                      "\u30a2\u30eb\u30e1\u30cb\u30a2\u590f\u6642\u9593", "AMST"};
-        String AST[] = new String[] {"\u5927\u897f\u6d0b\u6a19\u6e96\u6642", "AST",
-                                     "\u5927\u897f\u6d0b\u590f\u6642\u9593", "ADT"};
-        String BDT[] = new String[] {"\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5\u6642\u9593", "BDT",
-                                     "\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5\u590f\u6642\u9593", "BDST"};
-        String BRISBANE[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30af\u30a4\u30fc\u30f3\u30ba\u30e9\u30f3\u30c9)", "EST",
-                                          "\u6771\u90e8\u590f\u6642\u9593 (\u30af\u30a4\u30fc\u30f3\u30ba\u30e9\u30f3\u30c9)", "EST"};
-        String BROKEN_HILL[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642 (\u5357\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2/\u30cb\u30e5\u30fc\u30b5\u30a6\u30b9\u30a6\u30a7\u30fc\u30eb\u30ba)", "CST",
-                                             "\u4e2d\u90e8\u590f\u6642\u9593 (\u5357\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2/\u30cb\u30e5\u30fc\u30b5\u30a6\u30b9\u30a6\u30a7\u30fc\u30eb\u30ba)", "CST"};
-        String BRT[] = new String[] {"\u30d6\u30e9\u30b8\u30eb\u6642\u9593", "BRT",
-                                     "\u30d6\u30e9\u30b8\u30eb\u590f\u6642\u9593", "BRST"};
-        String BTT[] = new String[] {"\u30d6\u30fc\u30bf\u30f3\u6642\u9593", "BTT",
-                                     "\u30d6\u30fc\u30bf\u30f3\u590f\u6642\u9593", "BTST"};
-        String CAT[] = new String[] {"\u4e2d\u90e8\u30a2\u30d5\u30ea\u30ab\u6642\u9593", "CAT",
-                                     "\u4e2d\u90e8\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "CAST"};
-        String CET[] = new String[] {"\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593", "CET",
-                                     "\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "CEST"};
-        String CHAST[] = new String[] {"\u30c1\u30e3\u30bf\u30e0\u6a19\u6e96\u6642", "CHAST",
-                                       "\u30c1\u30e3\u30bf\u30e0\u590f\u6642\u9593", "CHADT"};
-        String ChST[] = new String[] {"\u30b0\u30a2\u30e0\u6a19\u6e96\u6642", "ChST",
-                                      "\u30b0\u30a2\u30e0\u590f\u6642\u9593", "ChDT"};
-        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
-                                      "Chuuk Summer Time", "CHUST"};
-        String CIT[] = new String[] {"\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "CIT",
-                                     "\u4e2d\u592e\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "CIST"};
-        String CLT[] = new String[] {"\u30c1\u30ea\u6642\u9593", "CLT",
-                                     "\u30c1\u30ea\u590f\u6642\u9593", "CLST"};
-        String CST[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642", "CST",
-                                     "\u4e2d\u90e8\u590f\u6642\u9593", "CDT"};
-        String CTT[] = new String[] {"\u4e2d\u56fd\u6a19\u6e96\u6642", "CST",
-                                     "\u4e2d\u56fd\u590f\u6642\u9593", "CDT"};
-        String CUBA[] = new String[] {"\u30ad\u30e5\u30fc\u30d0\u6a19\u6e96\u6642", "CST",
-                                      "\u30ad\u30e5\u30fc\u30d0\u590f\u6642\u9593", "CDT"};
-        String DARWIN[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642 (\u30ce\u30fc\u30b6\u30f3\u30c6\u30ea\u30c8\u30ea\u30fc)", "CST",
-                                        "\u4e2d\u90e8\u590f\u6642\u9593 (\u30ce\u30fc\u30b6\u30f3\u30c6\u30ea\u30c8\u30ea\u30fc)", "CST"};
-        String DUBLIN[] = new String[] {"\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT",
-                                        "\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\u590f\u6642\u9593", "IST"};
-        String EAT[] = new String[] {"\u6771\u30a2\u30d5\u30ea\u30ab\u6642\u9593", "EAT",
-                                     "\u6771\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "EAST"};
-        String EASTER[] = new String[] {"\u30a4\u30fc\u30b9\u30bf\u30fc\u5cf6\u6642\u9593", "EAST",
-                                        "\u30a4\u30fc\u30b9\u30bf\u30fc\u5cf6\u590f\u6642\u9593", "EASST"};
-        String EET[] = new String[] {"\u6771\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593", "EET",
-                                     "\u6771\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "EEST"};
-        String EGT[] = new String[] {"\u6771\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u6642\u9593", "EGT",
-                                     "\u6771\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u590f\u6642\u9593", "EGST"};
-        String EST[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642", "EST",
-                                     "\u6771\u90e8\u590f\u6642\u9593", "EDT"};
-        String EST_NSW[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30cb\u30e5\u30fc\u30b5\u30a6\u30b9\u30a6\u30a7\u30fc\u30eb\u30ba)", "EST",
-                                         "\u6771\u90e8\u590f\u6642\u9593 (\u30cb\u30e5\u30fc\u30b5\u30a6\u30b9\u30a6\u30a7\u30fc\u30eb\u30ba)", "EST"};
-        String FET[] = new String[] {"Further-eastern European Time", "FET",
-                                     "Further-eastern European Summer Time", "FEST"};
-        String GHMT[] = new String[] {"\u30ac\u30fc\u30ca\u6a19\u6e96\u6642", "GMT",
-                                     "\u30ac\u30fc\u30ca\u590f\u6642\u9593", "GHST"};
-        String GAMBIER[] =  new String[] {"\u30ac\u30f3\u30d3\u30a2\u6642\u9593", "GAMT",
-                                          "\u30ac\u30f3\u30d3\u30a2\u590f\u6642\u9593", "GAMST"};
-        String GMT[] = new String[] {"\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT",
-                                     "\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT"};
-        String GMTBST[] = new String[] {"\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT",
-                                        "\u82f1\u56fd\u590f\u6642\u9593", "BST"};
-        String GST[] = new String[] {"\u6e7e\u5cb8\u6a19\u6e96\u6642", "GST",
-                                     "\u6e7e\u5cb8\u590f\u6642\u9593", "GDT"};
-        String HAST[] = new String[] {"\u30cf\u30ef\u30a4 - \u30a2\u30ea\u30e5\u30fc\u30b7\u30e3\u30f3\u6a19\u6e96\u6642", "HAST",
-                                      "\u30cf\u30ef\u30a4 - \u30a2\u30ea\u30e5\u30fc\u30b7\u30e3\u30f3\u590f\u6642\u9593", "HADT"};
-        String HKT[] =  new String[] {"\u9999\u6e2f\u6642\u9593", "HKT",
-                                      "\u9999\u6e2f\u590f\u6642\u9593", "HKST"};
-        String HST[] = new String[] {"\u30cf\u30ef\u30a4\u6a19\u6e96\u6642", "HST",
-                                     "\u30cf\u30ef\u30a4\u590f\u6642\u9593", "HDT"};
-        String ICT[] = new String[] {"\u30a4\u30f3\u30c9\u30b7\u30ca\u6642\u9593", "ICT",
-                                     "\u30a4\u30f3\u30c9\u30b7\u30ca\u590f\u6642\u9593", "ICST"};
-        String IRT[] = new String[] {"\u30a4\u30e9\u30f3\u6a19\u6e96\u6642", "IRST",
-                                     "\u30a4\u30e9\u30f3\u590f\u6642\u9593", "IRDT"};
-        String ISRAEL[] = new String[] {"\u30a4\u30b9\u30e9\u30a8\u30eb\u6a19\u6e96\u6642", "IST",
-                                        "\u30a4\u30b9\u30e9\u30a8\u30eb\u590f\u6642\u9593", "IDT"};
-        String IST[] = new String[] {"\u30a4\u30f3\u30c9\u6a19\u6e96\u6642", "IST",
-                                     "\u30a4\u30f3\u30c9\u590f\u6642\u9593", "IDT"};
-        String JST[] = new String[] {"\u65e5\u672c\u6a19\u6e96\u6642", "JST",
-                                     "\u65e5\u672c\u590f\u6642\u9593", "JDT"};
-        String KST[] = new String[] {"\u97d3\u56fd\u6a19\u6e96\u6642", "KST",
-                                     "\u97d3\u56fd\u590f\u6642\u9593", "KDT"};
-        String LORD_HOWE[] = new String[] {"\u30ed\u30fc\u30c9\u30cf\u30a6\u5cf6\u6a19\u6e96\u6642", "LHST",
-                                           "\u30ed\u30fc\u30c9\u30cf\u30a6\u5cf6\u590f\u6642\u9593", "LHST"};
-        String MHT[] = new String[] {"\u30de\u30fc\u30b7\u30e3\u30eb\u5cf6\u6642\u9593", "MHT",
-                                     "\u30de\u30fc\u30b7\u30e3\u30eb\u5cf6\u590f\u6642\u9593", "MHST"};
-        String MSK[] = new String[] {"\u30e2\u30b9\u30af\u30ef\u6a19\u6e96\u6642", "MSK",
-                                     "\u30e2\u30b9\u30af\u30ef\u590f\u6642\u9593", "MSD"};
-        String MST[] = new String[] {"\u5c71\u5730\u6a19\u6e96\u6642", "MST",
-                                     "\u5c71\u5730\u590f\u6642\u9593", "MDT"};
-        String MYT[] = new String[] {"\u30de\u30ec\u30fc\u30b7\u30a2\u6642\u9593", "MYT",
-                                     "\u30de\u30ec\u30fc\u30b7\u30a2\u590f\u6642\u9593", "MYST"};
-        String NORONHA[] = new String[] {"\u30d5\u30a7\u30eb\u30ca\u30f3\u30c9\u30fb\u30c7\u30fb\u30ce\u30ed\u30fc\u30cb\u30e3\u6642\u9593", "FNT",
-                                         "\u30d5\u30a7\u30eb\u30ca\u30f3\u30c9\u30fb\u30c7\u30fb\u30ce\u30ed\u30fc\u30cb\u30e3\u590f\u6642\u9593", "FNST"};
-        String NOVT[] = new String[] {"\u30ce\u30dc\u30b7\u30d3\u30eb\u30b9\u30af\u6642\u9593", "NOVT",
-                                      "\u30ce\u30dc\u30b7\u30d3\u30eb\u30b9\u30af\u590f\u6642\u9593", "NOVST"};
-        String NPT[] = new String[] {"\u30cd\u30d1\u30fc\u30eb\u6642\u9593", "NPT",
-                                      "\u30cd\u30d1\u30fc\u30eb\u590f\u6642\u9593", "NPST"};
-        String NST[] = new String[] {"\u30cb\u30e5\u30fc\u30d5\u30a1\u30f3\u30c9\u30e9\u30f3\u30c9\u6a19\u6e96\u6642", "NST",
-                                     "\u30cb\u30e5\u30fc\u30d5\u30a1\u30f3\u30c9\u30e9\u30f3\u30c9\u590f\u6642\u9593", "NDT"};
-        String NZST[] = new String[] {"\u30cb\u30e5\u30fc\u30b8\u30fc\u30e9\u30f3\u30c9\u6a19\u6e96\u6642", "NZST",
-                                      "\u30cb\u30e5\u30fc\u30b8\u30fc\u30e9\u30f3\u30c9\u590f\u6642\u9593", "NZDT"};
-        String PITCAIRN[] = new String[] {"\u30d4\u30c8\u30b1\u30eb\u30f3\u5cf6\u6a19\u6e96\u6642", "PST",
-                                          "\u30d4\u30c8\u30b1\u30eb\u30f3\u5cf6\u590f\u6642\u9593", "PDT"};
-        String PKT[] = new String[] {"\u30d1\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "PKT",
-                                     "\u30d1\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "PKST"};
-        String PONT[] = new String[] {"Pohnpei Time", "PONT",
-                                      "Pohnpei Summer Time", "PONST"};
-        String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642", "PST",
-                                     "\u592a\u5e73\u6d0b\u590f\u6642\u9593", "PDT"};
-        String SAMOA[] = new String[] {"\u30b5\u30e2\u30a2\u6a19\u6e96\u6642", "SST",
-                                       "\u30b5\u30e2\u30a2\u590f\u6642\u9593", "SDT"};
-        String SAST[] = new String[] {"\u5357\u30a2\u30d5\u30ea\u30ab\u6a19\u6e96\u6642", "SAST",
-                                      "\u5357\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "SAST"};
-        String SBT[] = new String[] {"\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6\u6642\u9593", "SBT",
-                                     "\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6\u590f\u6642\u9593", "SBST"};
-        String SGT[] = new String[] {"\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb\u6642\u9593", "SGT",
-                                     "\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb\u590f\u6642\u9593", "SGST"};
-        String SLST[] = new String[] {"\u30b0\u30ea\u30cb\u30c3\u30b8\u6a19\u6e96\u6642", "GMT",
-                                      "\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd\u590f\u6642\u9593", "SLST"};
-        String TASMANIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30bf\u30b9\u30de\u30cb\u30a2)", "EST",
-                                          "\u6771\u90e8\u590f\u6642\u9593 (\u30bf\u30b9\u30de\u30cb\u30a2)", "EST"};
-        String TMT[] = new String[] {"\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u6642\u9593", "TMT",
-                                     "\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TMST"};
-        String ULAT[]= new String[] {"\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u6642\u9593", "ULAT",
-                                     "\u30a6\u30e9\u30fc\u30f3\u30d0\u30fc\u30c8\u30eb\u590f\u6642\u9593", "ULAST"};
-        String UTC[] = new String[] {"\u5354\u5b9a\u4e16\u754c\u6642", "UTC",
-                                     "\u5354\u5b9a\u4e16\u754c\u6642", "UTC"};
-        String UZT[] = new String[] {"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "UZT",
-                                     "\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "UZST"};
-        String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST",
-                                          "\u6771\u90e8\u590f\u6642\u9593 (\u30d3\u30af\u30c8\u30ea\u30a2)", "EST"};
-        String VLAT[] = new String[] {"\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u6642\u9593", "VLAT",
-                                      "\u30a6\u30e9\u30b8\u30aa\u30b9\u30c8\u30af\u590f\u6642\u9593", "VLAST"};
-        String WART[] = new String[] {"\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u6642\u9593", "WART",
-                                      "\u897f\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3\u590f\u6642\u9593", "WARST"};
-        String WAT[] = new String[] {"\u897f\u30a2\u30d5\u30ea\u30ab\u6642\u9593", "WAT",
-                                     "\u897f\u30a2\u30d5\u30ea\u30ab\u590f\u6642\u9593", "WAST"};
-        String WET[] = new String[] {"\u897f\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593", "WET",
-                                     "\u897f\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "WEST"};
-        String WIT[] = new String[] {"\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "WIT",
-                                     "\u897f\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "WIST"};
-        String WST_AUS[] = new String[] {"\u897f\u90e8\u6a19\u6e96\u6642 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "WST",
-                                         "\u897f\u90e8\u590f\u6642\u9593 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "WST"};
-        String WST_SAMOA[] = new String[] {"\u897f\u30b5\u30e2\u30a2\u6642\u9593", "WST",
-                                           "\u897f\u30b5\u30e2\u30a2\u590f\u6642\u9593", "WSDT"};
-        String YAKT[] = new String[] {"\u30e4\u30af\u30fc\u30c4\u30af\u6642\u9593", "YAKT",
-                                      "\u30e4\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "YAKST"};
-
-        return new Object[][] {
-            {"America/Los_Angeles", PST},
-            {"PST", PST},
-            {"America/Denver", MST},
-            {"MST", MST},
-            {"America/Phoenix", MST},
-            {"PNT", MST},
-            {"America/Chicago", CST},
-            {"CST", CST},
-            {"America/New_York", EST},
-            {"EST", EST},
-            {"America/Indianapolis", EST},
-            {"IET", EST},
-            {"Pacific/Honolulu", HST},
-            {"HST", HST},
-            {"America/Anchorage", AKST},
-            {"AST", AKST},
-            {"America/Halifax", AST},
-            {"America/Sitka", AKST},
-            {"America/St_Johns", NST},
-            {"CNT", NST},
-            {"Europe/Paris", CET},
-            {"ECT", CET},
-            {"GMT", GMT},
-            {"Africa/Casablanca", WET},
-            {"Asia/Jerusalem", ISRAEL},
-            {"Asia/Tokyo", JST},
-            {"JST", JST},
-            {"Europe/Bucharest", EET},
-            {"Asia/Shanghai", CTT},
-            {"CTT", CTT},
-            /* Don't change the order of the above zones
-             * to keep compatibility with the previous version.
-             */
-
-            {"ACT", DARWIN},
-            {"AET", EST_NSW},
-            {"AGT", AGT},
-            {"ART", EET},
-            {"Africa/Abidjan", GMT},
-            {"Africa/Accra", GHMT},
-            {"Africa/Addis_Ababa", EAT},
-            {"Africa/Algiers", CET},
-            {"Africa/Asmara", EAT},
-            {"Africa/Asmera", EAT},
-            {"Africa/Bamako", GMT},
-            {"Africa/Bangui", WAT},
-            {"Africa/Banjul", GMT},
-            {"Africa/Bissau", GMT},
-            {"Africa/Blantyre", CAT},
-            {"Africa/Brazzaville", WAT},
-            {"Africa/Bujumbura", CAT},
-            {"Africa/Cairo", EET},
-            {"Africa/Ceuta", CET},
-            {"Africa/Conakry", GMT},
-            {"Africa/Dakar", GMT},
-            {"Africa/Dar_es_Salaam", EAT},
-            {"Africa/Djibouti", EAT},
-            {"Africa/Douala", WAT},
-            {"Africa/El_Aaiun", WET},
-            {"Africa/Freetown", SLST},
-            {"Africa/Gaborone", CAT},
-            {"Africa/Harare", CAT},
-            {"Africa/Johannesburg", SAST},
-            {"Africa/Juba", EAT},
-            {"Africa/Kampala", EAT},
-            {"Africa/Khartoum", EAT},
-            {"Africa/Kigali", CAT},
-            {"Africa/Kinshasa", WAT},
-            {"Africa/Lagos", WAT},
-            {"Africa/Libreville", WAT},
-            {"Africa/Lome", GMT},
-            {"Africa/Luanda", WAT},
-            {"Africa/Lubumbashi", CAT},
-            {"Africa/Lusaka", CAT},
-            {"Africa/Malabo", WAT},
-            {"Africa/Maputo", CAT},
-            {"Africa/Maseru", SAST},
-            {"Africa/Mbabane", SAST},
-            {"Africa/Mogadishu", EAT},
-            {"Africa/Monrovia", GMT},
-            {"Africa/Nairobi", EAT},
-            {"Africa/Ndjamena", WAT},
-            {"Africa/Niamey", WAT},
-            {"Africa/Nouakchott", GMT},
-            {"Africa/Ouagadougou", GMT},
-            {"Africa/Porto-Novo", WAT},
-            {"Africa/Sao_Tome", GMT},
-            {"Africa/Timbuktu", GMT},
-            {"Africa/Tripoli", CET},
-            {"Africa/Tunis", CET},
-            {"Africa/Windhoek", WAT},
-            {"America/Adak", HAST},
-            {"America/Anguilla", AST},
-            {"America/Antigua", AST},
-            {"America/Araguaina", BRT},
-            {"America/Argentina/Buenos_Aires", AGT},
-            {"America/Argentina/Catamarca", AGT},
-            {"America/Argentina/ComodRivadavia", AGT},
-            {"America/Argentina/Cordoba", AGT},
-            {"America/Argentina/Jujuy", AGT},
-            {"America/Argentina/La_Rioja", AGT},
-            {"America/Argentina/Mendoza", AGT},
-            {"America/Argentina/Rio_Gallegos", AGT},
-            {"America/Argentina/Salta", AGT},
-            {"America/Argentina/San_Juan", AGT},
-            {"America/Argentina/San_Luis", WART},
-            {"America/Argentina/Tucuman", AGT},
-            {"America/Argentina/Ushuaia", AGT},
-            {"America/Aruba", AST},
-            {"America/Asuncion", new String[] {"\u30d1\u30e9\u30b0\u30a2\u30a4\u6642\u9593", "PYT",
-                                               "\u30d1\u30e9\u30b0\u30a2\u30a4\u590f\u6642\u9593", "PYST"}},
-            {"America/Atikokan", EST},
-            {"America/Atka", HAST},
-            {"America/Bahia", BRT},
-            {"America/Bahia_Banderas", CST},
-            {"America/Barbados", AST},
-            {"America/Belem", BRT},
-            {"America/Belize", CST},
-            {"America/Blanc-Sablon", AST},
-            {"America/Boa_Vista", AMT},
-            {"America/Bogota", new String[] {"\u30b3\u30ed\u30f3\u30d3\u30a2\u6642\u9593", "COT",
-                                             "\u30b3\u30ed\u30f3\u30d3\u30a2\u590f\u6642\u9593", "COST"}},
-            {"America/Boise", MST},
-            {"America/Buenos_Aires", AGT},
-            {"America/Cambridge_Bay", MST},
-            {"America/Campo_Grande", AMT},
-            {"America/Cancun", CST},
-            {"America/Caracas", new String[] {"\u30d9\u30cd\u30ba\u30a8\u30e9\u6642\u9593", "VET",
-                                              "\u30d9\u30cd\u30ba\u30a8\u30e9\u590f\u6642\u9593", "VEST"}},
-            {"America/Catamarca", AGT},
-            {"America/Cayenne", new String[] {"\u4ecf\u9818\u30ae\u30a2\u30ca\u6642\u9593", "GFT",
-                                              "\u4ecf\u9818\u30ae\u30a2\u30ca\u590f\u6642\u9593", "GFST"}},
-            {"America/Cayman", EST},
-            {"America/Chihuahua", MST},
-            {"America/Creston", MST},
-            {"America/Coral_Harbour", EST},
-            {"America/Cordoba", AGT},
-            {"America/Costa_Rica", CST},
-            {"America/Cuiaba", AMT},
-            {"America/Curacao", AST},
-            {"America/Danmarkshavn", GMT},
-            {"America/Dawson", PST},
-            {"America/Dawson_Creek", MST},
-            {"America/Detroit", EST},
-            {"America/Dominica", AST},
-            {"America/Edmonton", MST},
-            {"America/Eirunepe", AMT},
-            {"America/El_Salvador", CST},
-            {"America/Ensenada", PST},
-            {"America/Fort_Wayne", EST},
-            {"America/Fortaleza", BRT},
-            {"America/Glace_Bay", AST},
-            {"America/Godthab", new String[] {"\u897f\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u6642\u9593", "WGT",
-                                              "\u897f\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u590f\u6642\u9593", "WGST"}},
-            {"America/Goose_Bay", AST},
-            {"America/Grand_Turk", EST},
-            {"America/Grenada", AST},
-            {"America/Guadeloupe", AST},
-            {"America/Guatemala", CST},
-            {"America/Guayaquil", new String[] {"\u30a8\u30af\u30a2\u30c9\u30eb\u6642\u9593", "ECT",
-                                                "\u30a8\u30af\u30a2\u30c9\u30eb\u590f\u6642\u9593", "ECST"}},
-            {"America/Guyana", new String[] {"\u30ac\u30a4\u30a2\u30ca\u6642\u9593", "GYT",
-                                             "\u30ac\u30a4\u30a2\u30ca\u590f\u6642\u9593", "GYST"}},
-            {"America/Havana", CUBA},
-            {"America/Hermosillo", MST},
-            {"America/Indiana/Indianapolis", EST},
-            {"America/Indiana/Knox", CST},
-            {"America/Indiana/Marengo", EST},
-            {"America/Indiana/Petersburg", EST},
-            {"America/Indiana/Tell_City", CST},
-            {"America/Indiana/Vevay", EST},
-            {"America/Indiana/Vincennes", EST},
-            {"America/Indiana/Winamac", EST},
-            {"America/Inuvik", MST},
-            {"America/Iqaluit", EST},
-            {"America/Jamaica", EST},
-            {"America/Jujuy", AGT},
-            {"America/Juneau", AKST},
-            {"America/Kentucky/Louisville", EST},
-            {"America/Kentucky/Monticello", EST},
-            {"America/Knox_IN", CST},
-            {"America/Kralendijk", AST},
-            {"America/La_Paz", new String[] {"\u30dc\u30ea\u30d3\u30a2\u6642\u9593", "BOT",
-                                             "\u30dc\u30ea\u30d3\u30a2\u590f\u6642\u9593", "BOST"}},
-            {"America/Lima", new String[] {"\u30da\u30eb\u30fc\u6642\u9593", "PET",
-                                           "\u30da\u30eb\u30fc\u590f\u6642\u9593", "PEST"}},
-            {"America/Louisville", EST},
-            {"America/Lower_Princes", AST},
-            {"America/Maceio", BRT},
-            {"America/Managua", CST},
-            {"America/Manaus", AMT},
-            {"America/Marigot", AST},
-            {"America/Martinique", AST},
-            {"America/Matamoros", CST},
-            {"America/Mazatlan", MST},
-            {"America/Mendoza", AGT},
-            {"America/Menominee", CST},
-            {"America/Merida", CST},
-            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
-                                                 "Metlakatla Daylight Time", "MeDT"}},
-            {"America/Mexico_City", CST},
-            {"America/Miquelon", new String[] {"\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u6a19\u6e96\u6642", "PMST",
-                                               "\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u30fb\u30df\u30af\u30ed\u30f3\u8af8\u5cf6\u590f\u6642\u9593", "PMDT"}},
-            {"America/Moncton", AST},
-            {"America/Montevideo", new String[] {"\u30a6\u30eb\u30b0\u30a2\u30a4\u6642\u9593", "UYT",
-                                                 "\u30a6\u30eb\u30b0\u30a2\u30a4\u590f\u6642\u9593", "UYST"}},
-            {"America/Monterrey", CST},
-            {"America/Montreal", EST},
-            {"America/Montserrat", AST},
-            {"America/Nassau", EST},
-            {"America/Nipigon", EST},
-            {"America/Nome", AKST},
-            {"America/Noronha", NORONHA},
-            {"America/North_Dakota/Beulah", CST},
-            {"America/North_Dakota/Center", CST},
-            {"America/North_Dakota/New_Salem", CST},
-            {"America/Ojinaga", MST},
-            {"America/Panama", EST},
-            {"America/Pangnirtung", EST},
-            {"America/Paramaribo", new String[] {"\u30b9\u30ea\u30ca\u30e0\u6642\u9593", "SRT",
-                                                 "\u30b9\u30ea\u30ca\u30e0\u590f\u6642\u9593", "SRST"}},
-            {"America/Port-au-Prince", EST},
-            {"America/Port_of_Spain", AST},
-            {"America/Porto_Acre", AMT},
-            {"America/Porto_Velho", AMT},
-            {"America/Puerto_Rico", AST},
-            {"America/Rainy_River", CST},
-            {"America/Rankin_Inlet", CST},
-            {"America/Recife", BRT},
-            {"America/Regina", CST},
-            {"America/Resolute", CST},
-            {"America/Rio_Branco", AMT},
-            {"America/Rosario", AGT},
-            {"America/Santa_Isabel", PST},
-            {"America/Santarem", BRT},
-            {"America/Santiago", CLT},
-            {"America/Santo_Domingo", AST},
-            {"America/Sao_Paulo", BRT},
-            {"America/Scoresbysund", EGT},
-            {"America/Shiprock", MST},
-            {"America/St_Barthelemy", AST},
-            {"America/St_Kitts", AST},
-            {"America/St_Lucia", AST},
-            {"America/St_Thomas", AST},
-            {"America/St_Vincent", AST},
-            {"America/Swift_Current", CST},
-            {"America/Tegucigalpa", CST},
-            {"America/Thule", AST},
-            {"America/Thunder_Bay", EST},
-            {"America/Tijuana", PST},
-            {"America/Toronto", EST},
-            {"America/Tortola", AST},
-            {"America/Vancouver", PST},
-            {"America/Virgin", AST},
-            {"America/Whitehorse", PST},
-            {"America/Winnipeg", CST},
-            {"America/Yakutat", AKST},
-            {"America/Yellowknife", MST},
-            {"Antarctica/Casey", WST_AUS},
-            {"Antarctica/Davis", new String[] {"\u30c7\u30a4\u30d3\u30b9\u6642\u9593", "DAVT",
-                                               "\u30c7\u30a4\u30d3\u30b9\u590f\u6642\u9593", "DAVST"}},
-            {"Antarctica/DumontDUrville", new String[] {"\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u6642\u9593", "DDUT",
-                                                        "\u30c7\u30e5\u30e2\u30f3\u30c7\u30e5\u30eb\u30f4\u30a3\u30eb\u590f\u6642\u9593", "DDUST"}},
-            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
-                                                   "Macquarie Island Summer Time", "MIST"}},
-            {"Antarctica/Mawson", new String[] {"\u30e2\u30fc\u30bd\u30f3\u6642\u9593", "MAWT",
-                                                "\u30e2\u30fc\u30bd\u30f3\u590f\u6642\u9593", "MAWST"}},
-            {"Antarctica/McMurdo", NZST},
-            {"Antarctica/Palmer", CLT},
-            {"Antarctica/Rothera", new String[] {"\u30ed\u30bc\u30e9\u6642\u9593", "ROTT",
-                                                 "\u30ed\u30bc\u30e9\u590f\u6642\u9593", "ROTST"}},
-            {"Antarctica/South_Pole", NZST},
-            {"Antarctica/Syowa", new String[] {"\u662d\u548c\u57fa\u5730\u6642\u9593", "SYOT",
-                                               "\u662d\u548c\u57fa\u5730\u590f\u6642\u9593", "SYOST"}},
-            {"Antarctica/Vostok", new String[] {"\u30dc\u30b9\u30c8\u30fc\u30af\u57fa\u5730\u6642\u9593", "VOST",
-                                                "\u30dc\u30b9\u30c8\u30fc\u30af\u57fa\u5730\u590f\u6642\u9593", "VOSST"}},
-            {"Arctic/Longyearbyen", CET},
-            {"Asia/Aden", ARAST},
-            {"Asia/Almaty", new String[] {"\u30a2\u30eb\u30de\u30a2\u30bf\u6642\u9593", "ALMT",
-                                          "\u30a2\u30eb\u30de\u30a2\u30bf\u590f\u6642\u9593", "ALMST"}},
-            {"Asia/Amman", EET},
-            {"Asia/Anadyr", new String[] {"\u30a2\u30ca\u30c9\u30a5\u30a4\u30ea\u6642\u9593", "ANAT",
-                                          "\u30a2\u30ca\u30c9\u30a5\u30a4\u30ea\u590f\u6642\u9593", "ANAST"}},
-            {"Asia/Aqtau", new String[] {"\u30a2\u30af\u30bf\u30a6\u6642\u9593", "AQTT",
-                                         "\u30a2\u30af\u30bf\u30a6\u590f\u6642\u9593", "AQTST"}},
-            {"Asia/Aqtobe", new String[] {"\u30a2\u30af\u30c8\u30d9\u6642\u9593", "AQTT",
-                                          "\u30a2\u30af\u30c8\u30d9\u590f\u6642\u9593", "AQTST"}},
-            {"Asia/Ashgabat", TMT},
-            {"Asia/Ashkhabad", TMT},
-            {"Asia/Baghdad", ARAST},
-            {"Asia/Bahrain", ARAST},
-            {"Asia/Baku", new String[] {"\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3\u6642\u9593", "AZT",
-                                        "\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3\u590f\u6642\u9593", "AZST"}},
-            {"Asia/Bangkok", ICT},
-            {"Asia/Beirut", EET},
-            {"Asia/Bishkek", new String[] {"\u30ad\u30eb\u30ae\u30b9\u30bf\u30f3\u6642\u9593", "KGT",
-                                           "\u30ad\u30eb\u30ae\u30b9\u30bf\u30f3\u590f\u6642\u9593", "KGST"}},
-            {"Asia/Brunei", new String[] {"\u30d6\u30eb\u30cd\u30a4\u6642\u9593", "BNT",
-                                          "\u30d6\u30eb\u30cd\u30a4\u590f\u6642\u9593", "BNST"}},
-            {"Asia/Calcutta", IST},
-            {"Asia/Choibalsan", new String[] {"\u30c1\u30e7\u30a4\u30d0\u30eb\u30b5\u30f3\u6642\u9593", "CHOT",
-                                              "\u30c1\u30e7\u30a4\u30d0\u30eb\u30b5\u30f3\u590f\u6642\u9593", "CHOST"}},
-            {"Asia/Chongqing", CTT},
-            {"Asia/Chungking", CTT},
-            {"Asia/Colombo", IST},
-            {"Asia/Dacca", BDT},
-            {"Asia/Dhaka", BDT},
-            {"Asia/Dili", new String[] {"\u6771\u30c6\u30a3\u30e2\u30fc\u30eb\u6642\u9593", "TLT",
-                                        "\u6771\u30c6\u30a3\u30e2\u30fc\u30eb\u590f\u6642\u9593", "TLST"}},
-            {"Asia/Damascus", EET},
-            {"Asia/Dubai", GST},
-            {"Asia/Dushanbe", new String[] {"\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3\u6642\u9593", "TJT",
-                                            "\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3\u590f\u6642\u9593", "TJST"}},
-            {"Asia/Gaza", EET},
-            {"Asia/Harbin", CTT},
-            {"Asia/Hebron", EET},
-            {"Asia/Ho_Chi_Minh", ICT},
-            {"Asia/Hong_Kong", HKT},
-            {"Asia/Hovd", new String[] {"\u30db\u30d6\u30c9\u6642\u9593", "HOVT",
-                                        "\u30db\u30d6\u30c9\u590f\u6642\u9593", "HOVST"}},
-            {"Asia/Irkutsk", new String[] {"\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u6642\u9593", "IRKT",
-                                           "\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "IRKST"}},
-            {"Asia/Istanbul", EET},
-            {"Asia/Jakarta", WIT},
-            {"Asia/Jayapura", new String[] {"\u6771\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u6642\u9593", "EIT",
-                                            "\u6771\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "EIST" }},
-            {"Asia/Kabul", new String[] {"\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3\u6642\u9593", "AFT",
-                                         "\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "AFST"}},
-            {"Asia/Kamchatka", new String[] {"\u30da\u30c8\u30ed\u30d1\u30d6\u30ed\u30d5\u30b9\u30af\u30ab\u30e0\u30c1\u30e3\u30c4\u30ad\u30fc\u6642\u9593", "PETT",
-                                             "\u30da\u30c8\u30ed\u30d1\u30d6\u30ed\u30d5\u30b9\u30af\u30ab\u30e0\u30c1\u30e3\u30c4\u30ad\u30fc\u590f\u6642\u9593", "PETST"}},
-            {"Asia/Karachi", PKT},
-            {"Asia/Kashgar", CTT},
-            {"Asia/Kathmandu", NPT},
-            {"Asia/Katmandu", NPT},
-            {"Asia/Khandyga", YAKT},
-            {"Asia/Kolkata", IST},
-            {"Asia/Krasnoyarsk", new String[] {"\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u6642\u9593", "KRAT",
-                                               "\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u590f\u6642\u9593", "KRAST"}},
-            {"Asia/Kuala_Lumpur", MYT},
-            {"Asia/Kuching", MYT},
-            {"Asia/Kuwait", ARAST},
-            {"Asia/Macao", CTT},
-            {"Asia/Macau", CTT},
-            {"Asia/Magadan", new String[] {"\u30de\u30ac\u30c0\u30f3\u6642\u9593", "MAGT",
-                                           "\u30de\u30ac\u30c0\u30f3\u590f\u6642\u9593", "MAGST"}},
-            {"Asia/Makassar", CIT},
-            {"Asia/Manila", new String[] {"\u30d5\u30a3\u30ea\u30d4\u30f3\u6642\u9593", "PHT",
-                                          "\u30d5\u30a3\u30ea\u30d4\u30f3\u590f\u6642\u9593", "PHST"}},
-            {"Asia/Muscat", GST},
-            {"Asia/Nicosia", EET},
-            {"Asia/Novokuznetsk", NOVT},
-            {"Asia/Novosibirsk", NOVT},
-            {"Asia/Oral", new String[] {"\u30aa\u30e9\u30eb\u6642\u9593", "ORAT",
-                                        "\u30aa\u30e9\u30eb\u590f\u6642\u9593", "ORAST"}},
-            {"Asia/Omsk", new String[] {"\u30aa\u30e0\u30b9\u30af\u6642\u9593", "OMST",
-                                        "\u30aa\u30e0\u30b9\u30af\u590f\u6642\u9593", "OMSST"}},
-            {"Asia/Phnom_Penh", ICT},
-            {"Asia/Pontianak", WIT},
-            {"Asia/Pyongyang", KST},
-            {"Asia/Qatar", ARAST},
-            {"Asia/Qyzylorda", new String[] {"\u30ad\u30b8\u30eb\u30aa\u30eb\u30c0\u6642\u9593", "QYZT",
-                                             "\u30ad\u30b8\u30eb\u30aa\u30eb\u30c0\u590f\u6642\u9593", "QYZST"}},
-            {"Asia/Rangoon", new String[] {"\u30df\u30e3\u30f3\u30de\u30fc\u6642\u9593", "MMT",
-                                           "\u30df\u30e3\u30f3\u30de\u30fc\u590f\u6642\u9593", "MMST"}},
-            {"Asia/Riyadh", ARAST},
-            {"Asia/Saigon", ICT},
-            {"Asia/Sakhalin", new String[] {"\u6a3a\u592a\u6642\u9593", "SAKT",
-                                            "\u6a3a\u592a\u590f\u6642\u9593", "SAKST"}},
-            {"Asia/Samarkand", UZT},
-            {"Asia/Seoul", KST},
-            {"Asia/Singapore", SGT},
-            {"Asia/Taipei", CTT},
-            {"Asia/Tel_Aviv", ISRAEL},
-            {"Asia/Tashkent", UZT},
-            {"Asia/Tbilisi", new String[] {"\u30b0\u30eb\u30b8\u30a2\u6642\u9593", "GET",
-                                           "\u30b0\u30eb\u30b8\u30a2\u590f\u6642\u9593", "GEST"}},
-            {"Asia/Tehran", IRT},
-            {"Asia/Thimbu", BTT},
-            {"Asia/Thimphu", BTT},
-            {"Asia/Ujung_Pandang", CIT},
-            {"Asia/Ulaanbaatar", ULAT},
-            {"Asia/Ulan_Bator", ULAT},
-            {"Asia/Urumqi", CTT},
-            {"Asia/Ust-Nera", VLAT},
-            {"Asia/Vientiane", ICT},
-            {"Asia/Vladivostok", VLAT},
-            {"Asia/Yakutsk", YAKT},
-            {"Asia/Yekaterinburg", new String[] {"\u30a8\u30ab\u30c6\u30ea\u30f3\u30d6\u30eb\u30b0\u6642\u9593", "YEKT",
-                                                 "\u30a8\u30ab\u30c6\u30ea\u30f3\u30d6\u30eb\u30b0\u590f\u6642\u9593", "YEKST"}},
-            {"Asia/Yerevan", ARMT},
-            {"Atlantic/Azores", new String[] {"\u30a2\u30be\u30ec\u30b9\u6642\u9593", "AZOT",
-                                              "\u30a2\u30be\u30ec\u30b9\u590f\u6642\u9593", "AZOST"}},
-            {"Atlantic/Bermuda", AST},
-            {"Atlantic/Canary", WET},
-            {"Atlantic/Cape_Verde", new String[] {"\u30ab\u30fc\u30dc\u30d9\u30eb\u30c7\u6642\u9593", "CVT",
-                                                  "\u30ab\u30fc\u30dc\u30d9\u30eb\u30c7\u590f\u6642\u9593", "CVST"}},
-            {"Atlantic/Faeroe", WET},
-            {"Atlantic/Faroe", WET},
-            {"Atlantic/Jan_Mayen", CET},
-            {"Atlantic/Madeira", WET},
-            {"Atlantic/Reykjavik", GMT},
-            {"Atlantic/South_Georgia", new String[] {"\u5357\u30b8\u30e7\u30fc\u30b8\u30a2\u5cf6\u6a19\u6e96\u6642", "GST",
-                                                     "\u5357\u30b8\u30e7\u30fc\u30b8\u30a2\u5cf6\u590f\u6642\u9593", "GDT"}},
-            {"Atlantic/St_Helena", GMT},
-            {"Atlantic/Stanley", new String[] {"\u30d5\u30a9\u30fc\u30af\u30e9\u30f3\u30c9\u8af8\u5cf6\u6642\u9593", "FKT",
-                                               "\u30d5\u30a9\u30fc\u30af\u30e9\u30f3\u30c9\u8af8\u5cf6\u590f\u6642\u9593", "FKST"}},
-            {"Australia/ACT", EST_NSW},
-            {"Australia/Adelaide", ADELAIDE},
-            {"Australia/Brisbane", BRISBANE},
-            {"Australia/Broken_Hill", BROKEN_HILL},
-            {"Australia/Canberra", EST_NSW},
-            {"Australia/Currie", EST_NSW},
-            {"Australia/Darwin", DARWIN},
-            {"Australia/Eucla", new String[] {"\u4e2d\u897f\u90e8\u6a19\u6e96\u6642 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "CWST",
-                                              "\u4e2d\u897f\u90e8\u590f\u6642\u9593 (\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2)", "CWST"}},
-            {"Australia/Hobart", TASMANIA},
-            {"Australia/LHI", LORD_HOWE},
-            {"Australia/Lindeman", BRISBANE},
-            {"Australia/Lord_Howe", LORD_HOWE},
-            {"Australia/Melbourne", VICTORIA},
-            {"Australia/North", DARWIN},
-            {"Australia/NSW", EST_NSW},
-            {"Australia/Perth", WST_AUS},
-            {"Australia/Queensland", BRISBANE},
-            {"Australia/South", ADELAIDE},
-            {"Australia/Sydney", EST_NSW},
-            {"Australia/Tasmania", TASMANIA},
-            {"Australia/Victoria", VICTORIA},
-            {"Australia/West", WST_AUS},
-            {"Australia/Yancowinna", BROKEN_HILL},
-            {"BET", BRT},
-            {"BST", BDT},
-            {"Brazil/Acre", AMT},
-            {"Brazil/DeNoronha", NORONHA},
-            {"Brazil/East", BRT},
-            {"Brazil/West", AMT},
-            {"Canada/Atlantic", AST},
-            {"Canada/Central", CST},
-            {"Canada/East-Saskatchewan", CST},
-            {"Canada/Eastern", EST},
-            {"Canada/Mountain", MST},
-            {"Canada/Newfoundland", NST},
-            {"Canada/Pacific", PST},
-            {"Canada/Yukon", PST},
-            {"Canada/Saskatchewan", CST},
-            {"CAT", CAT},
-            {"CET", CET},
-            {"Chile/Continental", CLT},
-            {"Chile/EasterIsland", EASTER},
-            {"CST6CDT", CST},
-            {"Cuba", CUBA},
-            {"EAT", EAT},
-            {"EET", EET},
-            {"Egypt", EET},
-            {"Eire", DUBLIN},
-            {"EST5EDT", EST},
-            {"Etc/Greenwich", GMT},
-            {"Etc/UCT", UTC},
-            {"Etc/Universal", UTC},
-            {"Etc/UTC", UTC},
-            {"Etc/Zulu", UTC},
-            {"Europe/Amsterdam", CET},
-            {"Europe/Andorra", CET},
-            {"Europe/Athens", EET},
-            {"Europe/Belfast", GMTBST},
-            {"Europe/Belgrade", CET},
-            {"Europe/Berlin", CET},
-            {"Europe/Bratislava", CET},
-            {"Europe/Brussels", CET},
-            {"Europe/Budapest", CET},
-            {"Europe/Busingen", CET},
-            {"Europe/Chisinau", EET},
-            {"Europe/Copenhagen", CET},
-            {"Europe/Dublin", DUBLIN},
-            {"Europe/Gibraltar", CET},
-            {"Europe/Guernsey", GMTBST},
-            {"Europe/Helsinki", EET},
-            {"Europe/Isle_of_Man", GMTBST},
-            {"Europe/Istanbul", EET},
-            {"Europe/Jersey", GMTBST},
-            {"Europe/Kaliningrad", FET},
-            {"Europe/Kiev", EET},
-            {"Europe/Lisbon", WET},
-            {"Europe/Ljubljana", CET},
-            {"Europe/London", GMTBST},
-            {"Europe/Luxembourg", CET},
-            {"Europe/Madrid", CET},
-            {"Europe/Malta", CET},
-            {"Europe/Mariehamn", EET},
-            {"Europe/Minsk", FET},
-            {"Europe/Monaco", CET},
-            {"Europe/Moscow", MSK},
-            {"Europe/Nicosia", EET},
-            {"Europe/Oslo", CET},
-            {"Europe/Podgorica", CET},
-            {"Europe/Prague", CET},
-            {"Europe/Riga", EET},
-            {"Europe/Rome", CET},
-            {"Europe/Samara", new String[] {"\u30b5\u30de\u30e9\u6642\u9593", "SAMT",
-                                            "\u30b5\u30de\u30e9\u590f\u6642\u9593", "SAMST"}},
-            {"Europe/San_Marino", CET},
-            {"Europe/Sarajevo", CET},
-            {"Europe/Simferopol", EET},
-            {"Europe/Skopje", CET},
-            {"Europe/Sofia", EET},
-            {"Europe/Stockholm", CET},
-            {"Europe/Tallinn", EET},
-            {"Europe/Tirane", CET},
-            {"Europe/Tiraspol", EET},
-            {"Europe/Uzhgorod", EET},
-            {"Europe/Vaduz", CET},
-            {"Europe/Vatican", CET},
-            {"Europe/Vienna", CET},
-            {"Europe/Vilnius", EET},
-            {"Europe/Volgograd", new String[] {"\u30dc\u30eb\u30b4\u30b0\u30e9\u30fc\u30c9\u6642\u9593", "VOLT",
-                                               "\u30dc\u30eb\u30b4\u30b0\u30e9\u30fc\u30c9\u590f\u6642\u9593", "VOLST"}},
-            {"Europe/Warsaw", CET},
-            {"Europe/Zagreb", CET},
-            {"Europe/Zaporozhye", EET},
-            {"Europe/Zurich", CET},
-            {"GB", GMTBST},
-            {"GB-Eire", GMTBST},
-            {"Greenwich", GMT},
-            {"Hongkong", HKT},
-            {"Iceland", GMT},
-            {"Iran", IRT},
-            {"IST", IST},
-            {"Indian/Antananarivo", EAT},
-            {"Indian/Chagos", new String[] {"\u30a4\u30f3\u30c9\u6d0b\u5730\u57df\u6642\u9593", "IOT",
-                                            "\u30a4\u30f3\u30c9\u6d0b\u5730\u57df\u590f\u6642\u9593", "IOST"}},
-            {"Indian/Christmas", new String[] {"\u30af\u30ea\u30b9\u30de\u30b9\u8af8\u5cf6\u6642\u9593", "CXT",
-                                               "\u30af\u30ea\u30b9\u30de\u30b9\u8af8\u5cf6\u590f\u6642\u9593", "CXST"}},
-            {"Indian/Cocos", new String[] {"\u30b3\u30b3\u30b9\u8af8\u5cf6\u6642\u9593", "CCT",
-                                           "\u30b3\u30b3\u30b9\u8af8\u5cf6\u590f\u6642\u9593", "CCST"}},
-            {"Indian/Comoro", EAT},
-            {"Indian/Kerguelen", new String[] {"\u4ecf\u5357\u65b9\u9818\u304a\u3088\u3073\u5357\u6975\u6642\u9593", "TFT",
-                                               "\u4ecf\u5357\u65b9\u9818\u304a\u3088\u3073\u5357\u6975\u590f\u6642\u9593", "TFST"}},
-            {"Indian/Mahe", new String[] {"\u30bb\u30a4\u30b7\u30a7\u30eb\u6642\u9593", "SCT",
-                                          "\u30bb\u30a4\u30b7\u30a7\u30eb\u590f\u6642\u9593", "SCST"}},
-            {"Indian/Maldives", new String[] {"\u30e2\u30eb\u30b8\u30d6\u6642\u9593", "MVT",
-                                              "\u30e2\u30eb\u30b8\u30d6\u590f\u6642\u9593", "MVST"}},
-            {"Indian/Mauritius", new String[] {"\u30e2\u30fc\u30ea\u30b7\u30e3\u30b9\u6642\u9593", "MUT",
-                                               "\u30e2\u30fc\u30ea\u30b7\u30e3\u30b9\u590f\u6642\u9593", "MUST"}},
-            {"Indian/Mayotte", EAT},
-            {"Indian/Reunion", new String[] {"\u30ec\u30e6\u30cb\u30aa\u30f3\u6642\u9593", "RET",
-                                             "\u30ec\u30e6\u30cb\u30aa\u30f3\u590f\u6642\u9593", "REST"}},
-            {"Israel", ISRAEL},
-            {"Jamaica", EST},
-            {"Japan", JST},
-            {"Kwajalein", MHT},
-            {"Libya", CET},
-            {"MET", new String[] {"\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593", "MET",
-                                  "\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "MEST"}},
-            {"Mexico/BajaNorte", PST},
-            {"Mexico/BajaSur", MST},
-            {"Mexico/General", CST},
-            {"MIT", WST_SAMOA},
-            {"MST7MDT", MST},
-            {"Navajo", MST},
-            {"NET", ARMT},
-            {"NST", NZST},
-            {"NZ", NZST},
-            {"NZ-CHAT", CHAST},
-            {"PLT", PKT},
-            {"Portugal", WET},
-            {"PRT", AST},
-            {"Pacific/Apia", WST_SAMOA},
-            {"Pacific/Auckland", NZST},
-            {"Pacific/Chatham", CHAST},
-            {"Pacific/Chuuk", CHUT},
-            {"Pacific/Easter", EASTER},
-            {"Pacific/Efate", new String[] {"\u30d0\u30cc\u30a2\u30c4\u6642\u9593", "VUT",
-                                            "\u30d0\u30cc\u30a2\u30c4\u590f\u6642\u9593", "VUST"}},
-            {"Pacific/Enderbury", new String[] {"\u30d5\u30a7\u30cb\u30c3\u30af\u30b9\u8af8\u5cf6\u6642\u9593", "PHOT",
-                                                "\u30d5\u30a7\u30cb\u30c3\u30af\u30b9\u8af8\u5cf6\u590f\u6642\u9593", "PHOST"}},
-            {"Pacific/Fakaofo", new String[] {"\u30c8\u30b1\u30e9\u30a6\u8af8\u5cf6\u6642\u9593", "TKT",
-                                              "\u30c8\u30b1\u30e9\u30a6\u8af8\u5cf6\u590f\u6642\u9593", "TKST"}},
-            {"Pacific/Fiji", new String[] {"\u30d5\u30a3\u30b8\u30fc\u6642\u9593", "FJT",
-                                           "\u30d5\u30a3\u30b8\u30fc\u590f\u6642\u9593", "FJST"}},
-            {"Pacific/Funafuti", new String[] {"\u30c4\u30d0\u30eb\u6642\u9593", "TVT",
-                                               "\u30c4\u30d0\u30eb\u590f\u6642\u9593", "TVST"}},
-            {"Pacific/Galapagos", new String[] {"\u30ac\u30e9\u30d1\u30b4\u30b9\u6642\u9593", "GALT",
-                                                "\u30ac\u30e9\u30d1\u30b4\u30b9\u590f\u6642\u9593", "GALST"}},
-            {"Pacific/Gambier", GAMBIER},
-            {"Pacific/Guadalcanal", SBT},
-            {"Pacific/Guam", ChST},
-            {"Pacific/Johnston", HST},
-            {"Pacific/Kiritimati", new String[] {"\u30e9\u30a4\u30f3\u8af8\u5cf6\u6642\u9593", "LINT",
-                                                 "\u30e9\u30a4\u30f3\u8af8\u5cf6\u590f\u6642\u9593", "LINST"}},
-            {"Pacific/Kosrae", new String[] {"\u30b3\u30b9\u30e9\u30a8\u6642\u9593", "KOST",
-                                             "\u30b3\u30b9\u30e9\u30a8\u590f\u6642\u9593", "KOSST"}},
-            {"Pacific/Kwajalein", MHT},
-            {"Pacific/Majuro", MHT},
-            {"Pacific/Marquesas", new String[] {"\u30de\u30eb\u30b1\u30b5\u30b9\u6642\u9593", "MART",
-                                                "\u30de\u30eb\u30b1\u30b5\u30b9\u590f\u6642\u9593", "MARST"}},
-            {"Pacific/Midway", SAMOA},
-            {"Pacific/Nauru", new String[] {"\u30ca\u30a6\u30eb\u6642\u9593", "NRT",
-                                            "\u30ca\u30a6\u30eb\u590f\u6642\u9593", "NRST"}},
-            {"Pacific/Niue", new String[] {"\u30cb\u30a6\u30a8\u5cf6\u6642\u9593", "NUT",
-                                           "\u30cb\u30a6\u30a8\u5cf6\u590f\u6642\u9593", "NUST"}},
-            {"Pacific/Norfolk", new String[] {"\u30ce\u30fc\u30d5\u30a9\u30fc\u30af\u6642\u9593", "NFT",
-                                              "\u30ce\u30fc\u30d5\u30a9\u30fc\u30af\u590f\u6642\u9593", "NFST"}},
-            {"Pacific/Noumea", new String[] {"\u30cb\u30e5\u30fc\u30ab\u30ec\u30c9\u30cb\u30a2\u6642\u9593", "NCT",
-                                             "\u30cb\u30e5\u30fc\u30ab\u30ec\u30c9\u30cb\u30a2\u590f\u6642\u9593", "NCST"}},
-            {"Pacific/Pago_Pago", SAMOA},
-            {"Pacific/Palau", new String[] {"\u30d1\u30e9\u30aa\u6642\u9593", "PWT",
-                                            "\u30d1\u30e9\u30aa\u590f\u6642\u9593", "PWST"}},
-            {"Pacific/Pitcairn", PITCAIRN},
-            {"Pacific/Pohnpei", PONT},
-            {"Pacific/Ponape", PONT},
-            {"Pacific/Port_Moresby", new String[] {"\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2\u6642\u9593", "PGT",
-                                                   "\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2\u590f\u6642\u9593", "PGST"}},
-            {"Pacific/Rarotonga", new String[] {"\u30af\u30c3\u30af\u8af8\u5cf6\u6642\u9593", "CKT",
-                                                "\u30af\u30c3\u30af\u8af8\u5cf6\u590f\u6642\u9593", "CKHST"}},
-            {"Pacific/Saipan", ChST},
-            {"Pacific/Samoa", SAMOA},
-            {"Pacific/Tahiti", new String[] {"\u30bf\u30d2\u30c1\u6642\u9593", "TAHT",
-                                             "\u30bf\u30d2\u30c1\u590f\u6642\u9593", "TAHST"}},
-            {"Pacific/Tarawa", new String[] {"\u30ae\u30eb\u30d0\u30fc\u30c8\u8af8\u5cf6\u6642\u9593", "GILT",
-                                             "\u30ae\u30eb\u30d0\u30fc\u30c8\u8af8\u5cf6\u590f\u6642\u9593", "GILST"}},
-            {"Pacific/Tongatapu", new String[] {"\u30c8\u30f3\u30ac\u6642\u9593", "TOT",
-                                                "\u30c8\u30f3\u30ac\u590f\u6642\u9593", "TOST"}},
-            {"Pacific/Truk", CHUT},
-            {"Pacific/Wake", new String[] {"\u30a6\u30a7\u30fc\u30af\u6642\u9593", "WAKT",
-                                           "\u30a6\u30a7\u30fc\u30af\u590f\u6642\u9593", "WAKST"}},
-            {"Pacific/Wallis", new String[] {"\u30ef\u30ea\u30b9\u53ca\u3073\u30d5\u30c4\u30ca\u6642\u9593", "WFT",
-                                             "\u30ef\u30ea\u30b9\u53ca\u3073\u30d5\u30c4\u30ca\u590f\u6642\u9593", "WFST"}},
-            {"Pacific/Yap", CHUT},
-            {"Poland", CET},
-            {"PRC", CTT},
-            {"PST8PDT", PST},
-            {"ROK", KST},
-            {"Singapore", SGT},
-            {"SST", SBT},
-            {"SystemV/AST4", AST},
-            {"SystemV/AST4ADT", AST},
-            {"SystemV/CST6", CST},
-            {"SystemV/CST6CDT", CST},
-            {"SystemV/EST5", EST},
-            {"SystemV/EST5EDT", EST},
-            {"SystemV/HST10", HST},
-            {"SystemV/MST7", MST},
-            {"SystemV/MST7MDT", MST},
-            {"SystemV/PST8", PST},
-            {"SystemV/PST8PDT", PST},
-            {"SystemV/YST9", AKST},
-            {"SystemV/YST9YDT", AKST},
-            {"Turkey", EET},
-            {"UCT", UTC},
-            {"Universal", UTC},
-            {"US/Alaska", AKST},
-            {"US/Aleutian", HAST},
-            {"US/Arizona", MST},
-            {"US/Central", CST},
-            {"US/Eastern", EST},
-            {"US/Hawaii", HST},
-            {"US/Indiana-Starke", CST},
-            {"US/East-Indiana", EST},
-            {"US/Michigan", EST},
-            {"US/Mountain", MST},
-            {"US/Pacific", PST},
-            {"US/Pacific-New", PST},
-            {"US/Samoa", SAMOA},
-            {"UTC", UTC},
-            {"VST", ICT},
-            {"W-SU", MSK},
-            {"WET", WET},
-            {"Zulu", UTC},
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_ko.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames_ko.java
deleted file mode 100755
index 8b82a5b..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_ko.java
+++ /dev/null
@@ -1,876 +0,0 @@
-/*
- * Copyright (c) 1997, 2011, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-public final class TimeZoneNames_ko extends TimeZoneNamesBundle {
-
-    protected final Object[][] getContents() {
-        String ACT[] = new String[] {"\uc5d0\uc774\ucee4 \uc2dc\uac04", "ACT",
-                                     "\uc5d0\uc774\ucee4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ACST"};
-        String ADELAIDE[] = new String[] {"\uc911\ubd80 \ud45c\uc900\uc2dc(\uc0ac\uc6b0\uc2a4 \uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544)", "CST",
-                                          "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\uc0ac\uc6b0\uc2a4 \uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544)", "CST"};
-        String AGT[] = new String[] {"\uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "ART",
-                                     "\uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ARST"};
-        String AKST[] = new String[] {"\uc54c\ub798\uc2a4\uce74 \ud45c\uc900\uc2dc", "AKST",
-                                      "\uc54c\ub798\uc2a4\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "AKDT"};
-        String AMT[] = new String[] {"\uc544\ub9c8\uc874 \uc2dc\uac04", "AMT",
-                                     "\uc544\ub9c8\uc874 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "AMST"};
-        String ARAST[] = new String[] {"\uc544\ub78d \ud45c\uc900\uc2dc", "AST",
-                                       "\uc544\ub78d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ADT"};
-        String ARMT[] = new String[] {"\uc544\ub974\uba54\ub2c8\uc544 \uc2dc\uac04", "AMT",
-                                      "\uc544\ub974\uba54\ub2c8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "AMST"};
-        String AST[] = new String[] {"\ub300\uc11c\uc591 \ud45c\uc900\uc2dc", "AST",
-                                     "\ub300\uc11c\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ADT"};
-        String BDT[] = new String[] {"\ubc29\uae00\ub77c\ub370\uc2dc \uc2dc\uac04", "BDT",
-                                     "\ubc29\uae00\ub77c\ub370\uc2dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BDST"};
-        String BRISBANE[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ud038\uc990\ub79c\ub4dc)", "EST",
-                                          "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ud038\uc990\ub79c\ub4dc)", "EST"};
-        String BROKEN_HILL[] = new String[] {"\uc911\ubd80 \ud45c\uc900\uc2dc(\uc0ac\uc6b0\uc2a4 \uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544/\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)", "CST",
-                                             "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\uc0ac\uc6b0\uc2a4 \uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544/\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)", "CST"};
-        String BRT[] = new String[] {"\ube0c\ub77c\uc9c8\ub9ac\uc544 \uc2dc\uac04", "BRT",
-                                     "\ube0c\ub77c\uc9c8\ub9ac\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BRST"};
-        String BTT[] = new String[] {"\ubd80\ud0c4 \uc2dc\uac04", "BTT",
-                                     "\ubd80\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BTST"};
-        String CAT[] = new String[] {"\uc911\uc559 \uc544\ud504\ub9ac\uce74 \uc2dc\uac04", "CAT",
-                                     "\uc911\uc559 \uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CAST"};
-        String CET[] = new String[] {"\uc911\uc559 \uc720\ub7fd \uc2dc\uac04", "CET",
-                                     "\uc911\uc559 \uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CEST"};
-        String CHAST[] = new String[] {"Chatham \ud45c\uc900\uc2dc", "CHAST",
-                                       "Chatham \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CHADT"};
-        String ChST[] = new String[] {"\ucc28\ubaa8\ub85c \ud45c\uc900\uc2dc", "ChST",
-                                      "\ucc28\ubaa8\ub85c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ChDT"};
-        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
-                                      "Chuuk Summer Time", "CHUST"};
-        String CIT[] = new String[] {"\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "CIT",
-                                     "\uc911\uc559 \uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CIST"};
-        String CLT[] = new String[] {"\uce60\ub808 \uc2dc\uac04", "CLT",
-                                     "\uce60\ub808 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CLST"};
-        String CST[] = new String[] {"\uc911\ubd80 \ud45c\uc900\uc2dc", "CST",
-                                     "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"};
-        String CTT[] = new String[] {"\uc911\uad6d \ud45c\uc900\uc2dc", "CST",
-                                     "\uc911\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"};
-        String CUBA[] = new String[] {"\ucfe0\ubc14 \ud45c\uc900\uc2dc", "CST",
-                                      "\ucfe0\ubc14 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CDT"};
-        String DARWIN[] = new String[] {"\uc911\ubd80 \ud45c\uc900\uc2dc(\ub178\ub358 \uc9c0\uc5ed)", "CST",
-                                        "\uc911\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ub178\ub358 \uc9c0\uc5ed)", "CST"};
-        String DUBLIN[] = new String[] {"\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT",
-                                        "\uc544\uc77c\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IST"};
-        String EAT[] = new String[] {"\ub3d9\ubd80 \uc544\ud504\ub9ac\uce74 \uc2dc\uac04", "EAT",
-                                     "\ub3d9\ubd80 \uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EAST"};
-        String EASTER[] = new String[] {"Easter Is. \uc2dc\uac04", "EAST",
-                                        "Easter Is. \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EASST"};
-        String EET[] = new String[] {"\ub3d9\uc720\ub7fd \uc2dc\uac04", "EET",
-                                     "\ub3d9\uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EEST"};
-        String EGT[] = new String[] {"\ub3d9\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc2dc\uac04", "EGT",
-                                     "\ub3d9\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EGST"};
-        String EST[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc", "EST",
-                                     "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EDT"};
-        String EST_NSW[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)", "EST",
-                                         "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ub274 \uc0ac\uc6b0\uc2a4 \uc6e8\uc77c\uc988)", "EST"};
-        String FET[] = new String[] {"Further-eastern European Time", "FET",
-                                     "Further-eastern European Summer Time", "FEST"};
-        String GHMT[] = new String[] {"\uac00\ub098 \ud45c\uc900\uc2dc", "GMT",
-                                     "\uac00\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GHST"};
-        String GAMBIER[] =  new String[] {"\uac10\ube44\uc544 \uc2dc\uac04", "GAMT",
-                                          "\uac10\ube44\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GAMST"};
-        String GMT[] = new String[] {"\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT",
-                                     "\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT"};
-        String GMTBST[] = new String[] {"\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT",
-                                        "\uc601\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BST"};
-        String GST[] = new String[] {"\uac78\ud504\ub9cc \ud45c\uc900\uc2dc", "GST",
-                                     "\uac78\ud504\ub9cc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GDT"};
-        String HAST[] = new String[] {"\ud558\uc640\uc774 \uc54c\ub958\uc0e8 \ud45c\uc900\uc2dc", "HAST",
-                                      "\ud558\uc640\uc774 \uc54c\ub958\uc0e8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "HADT"};
-        String HKT[] =  new String[] {"\ud64d\ucf69 \uc2dc\uac04", "HKT",
-                                      "\ud64d\ucf69 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "HKST"};
-        String HST[] = new String[] {"\ud558\uc640\uc774 \ud45c\uc900\uc2dc", "HST",
-                                     "\ud558\uc640\uc774 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "HDT"};
-        String ICT[] = new String[] {"\uc778\ub3c4\ucc28\uc774\ub098 \ubc18\ub3c4 \uc2dc\uac04", "ICT",
-                                     "\uc778\ub3c4\ucc28\uc774\ub098 \ubc18\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ICST"};
-        String IRT[] = new String[] {"\uc774\ub780 \ud45c\uc900\uc2dc", "IRST",
-                                     "\uc774\ub780 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IRDT"};
-        String ISRAEL[] = new String[] {"\uc774\uc2a4\ub77c\uc5d8 \ud45c\uc900\uc2dc", "IST",
-                                        "\uc774\uc2a4\ub77c\uc5d8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IDT"};
-        String IST[] = new String[] {"\uc778\ub3c4 \ud45c\uc900\uc2dc", "IST",
-                                     "\uc778\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IDT"};
-        String JST[] = new String[] {"\uc77c\ubcf8 \ud45c\uc900\uc2dc", "JST",
-                                     "\uc77c\ubcf8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "JDT"};
-        String KST[] = new String[] {"\ud55c\uad6d \ud45c\uc900\uc2dc", "KST",
-                                     "\ud55c\uad6d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KDT"};
-        String LORD_HOWE[] = new String[] {"\ub85c\ub4dc \ud558\uc6b0 \ud45c\uc900\uc2dc", "LHST",
-                                           "\ub85c\ub4dc \ud558\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "LHST"};
-        String MHT[] = new String[] {"\ub9c8\uc15c\uc81c\ub3c4 \uc2dc\uac04", "MHT",
-                                     "\ub9c8\uc15c\uc81c\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MHST"};
-        String MSK[] = new String[] {"\ubaa8\uc2a4\ud06c\ubc14 \ud45c\uc900\uc2dc", "MSK",
-                                     "\ubaa8\uc2a4\ud06c\ubc14 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MSD"};
-        String MST[] = new String[] {"\uc0b0\uc9c0 \ud45c\uc900\uc2dc", "MST",
-                                     "\uc0b0\uc9c0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MDT"};
-        String MYT[] = new String[] {"\ub9d0\ub808\uc774\uc2dc\uc544 \uc2dc\uac04", "MYT",
-                                     "\ub9d0\ub808\uc774\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MYST"};
-        String NORONHA[] = new String[] {"Fernando de Noronha \uc2dc\uac04", "FNT",
-                                         "Fernando de Noronha \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "FNST"};
-        String NOVT[] = new String[] {"\ub178\ube0c\uc2dc\ube4c\uc2a4\ud06c \uc2dc\uac04", "NOVT",
-                                      "\ub178\ube0c\uc2dc\ube4c\uc2a4\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "NOVST"};
-        String NPT[] = new String[] {"\ub124\ud314 \uc2dc\uac04", "NPT",
-                                      "\ub124\ud314 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "NPST"};
-        String NST[] = new String[] {"\ub274\ud380\ub4e4\ub79c\ub4dc \ud45c\uc900\uc2dc", "NST",
-                                     "\ub274\ud380\ub4e4\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "NDT"};
-        String NZST[] = new String[] {"\ub274\uc9c8\ub79c\ub4dc \ud45c\uc900\uc2dc", "NZST",
-                                      "\ub274\uc9c8\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "NZDT"};
-        String PITCAIRN[] = new String[] {"Pitcairn \ud45c\uc900\uc2dc", "PST",
-                                          "Pitcairn \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"};
-        String PKT[] = new String[] {"\ud30c\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "PKT",
-                                     "\ud30c\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PKST"};
-        String PONT[] = new String[] {"Pohnpei Time", "PONT",
-                                      "Pohnpei Summer Time", "PONST"};
-        String PST[] = new String[] {"\ud0dc\ud3c9\uc591 \ud45c\uc900\uc2dc", "PST",
-                                     "\ud0dc\ud3c9\uc591 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PDT"};
-        String SAMOA[] = new String[] {"\uc0ac\ubaa8\uc544 \ud45c\uc900\uc2dc", "SST",
-                                       "\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SDT"};
-        String SAST[] = new String[] {"\ub0a8\uc544\ud504\ub9ac\uce74 \ud45c\uc900\uc2dc", "SAST",
-                                      "\ub0a8\uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAST"};
-        String SBT[] = new String[] {"\uc194\ub85c\ubaac \uad70\ub3c4 \uc2dc\uac04", "SBT",
-                                     "\uc194\ub85c\ubaac \uad70\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SBST"};
-        String SGT[] = new String[] {"\uc2f1\uac00\ud3ec\ub974 \uc2dc\uac04", "SGT",
-                                     "\uc2f1\uac00\ud3ec\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SGST"};
-        String SLST[] = new String[] {"\uadf8\ub9ac\ub2c8\uce58 \ud45c\uc900\uc2dc", "GMT",
-                                      "\uc2dc\uc5d0\ub77c\ub9ac\uc628 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SLST"};
-        String TASMANIA[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ud0dc\uc988\uba54\uc774\ub2c8\uc544)", "EST",
-                                          "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ud0dc\uc988\uba54\uc774\ub2c8\uc544)", "EST"};
-        String TMT[] = new String[] {"\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc2dc\uac04", "TMT",
-                                     "\ud22c\ub974\ud06c\uba54\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TMST"};
-        String ULAT[]= new String[] {"\uc6b8\ub780\ubc14\ud0c0\ub974 \uc2dc\uac04", "ULAT",
-                                     "\uc6b8\ub780\ubc14\ud0c0\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ULAST"};
-        String UTC[] = new String[] {"\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC",
-                                     "\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC"};
-        String UZT[] = new String[] {"\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "UZT",
-                                     "\uc6b0\uc988\ubca0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "UZST"};
-        String VICTORIA[] = new String[] {"\ub3d9\ubd80 \ud45c\uc900\uc2dc(\ube45\ud1a0\ub9ac\uc544)", "EST",
-                                          "\ub3d9\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ube45\ud1a0\ub9ac\uc544)", "EST"};
-        String VLAT[] = new String[] {"\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc2dc\uac04", "VLAT",
-                                      "\ube14\ub77c\ub514\ubcf4\uc2a4\ud1a1 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VLAST"};
-        String WART[] = new String[] {"\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc2dc\uac04", "WART",
-                                      "\uc11c\ubd80 \uc544\ub974\ud5e8\ud2f0\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WARST"};
-        String WAT[] = new String[] {"\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc2dc\uac04", "WAT",
-                                     "\uc11c\ubd80 \uc544\ud504\ub9ac\uce74 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WAST"};
-        String WET[] = new String[] {"\uc11c\uc720\ub7fd \uc2dc\uac04", "WET",
-                                     "\uc11c\uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WEST"};
-        String WIT[] = new String[] {"\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "WIT",
-                                     "\uc11c\uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WIST"};
-        String WST_AUS[] = new String[] {"\uc11c\ubd80 \ud45c\uc900\uc2dc(\ud638\uc8fc)", "WST",
-                                         "\uc11c\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\ud638\uc8fc)", "WST"};
-        String WST_SAMOA[] = new String[] {"\uc11c\uc0ac\ubaa8\uc544 \uc2dc\uac04", "WST",
-                                           "\uc11c\uc0ac\ubaa8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WSDT"};
-        String YAKT[] = new String[] {"\uc57c\uce20\ud06c \uc2dc\uac04", "YAKT",
-                                      "\uc57c\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YAKST"};
-
-        return new Object[][] {
-            {"America/Los_Angeles", PST},
-            {"PST", PST},
-            {"America/Denver", MST},
-            {"MST", MST},
-            {"America/Phoenix", MST},
-            {"PNT", MST},
-            {"America/Chicago", CST},
-            {"CST", CST},
-            {"America/New_York", EST},
-            {"EST", EST},
-            {"America/Indianapolis", EST},
-            {"IET", EST},
-            {"Pacific/Honolulu", HST},
-            {"HST", HST},
-            {"America/Anchorage", AKST},
-            {"AST", AKST},
-            {"America/Halifax", AST},
-            {"America/Sitka", AKST},
-            {"America/St_Johns", NST},
-            {"CNT", NST},
-            {"Europe/Paris", CET},
-            {"ECT", CET},
-            {"GMT", GMT},
-            {"Africa/Casablanca", WET},
-            {"Asia/Jerusalem", ISRAEL},
-            {"Asia/Tokyo", JST},
-            {"JST", JST},
-            {"Europe/Bucharest", EET},
-            {"Asia/Shanghai", CTT},
-            {"CTT", CTT},
-            /* Don't change the order of the above zones
-             * to keep compatibility with the previous version.
-             */
-
-            {"ACT", DARWIN},
-            {"AET", EST_NSW},
-            {"AGT", AGT},
-            {"ART", EET},
-            {"Africa/Abidjan", GMT},
-            {"Africa/Accra", GHMT},
-            {"Africa/Addis_Ababa", EAT},
-            {"Africa/Algiers", CET},
-            {"Africa/Asmara", EAT},
-            {"Africa/Asmera", EAT},
-            {"Africa/Bamako", GMT},
-            {"Africa/Bangui", WAT},
-            {"Africa/Banjul", GMT},
-            {"Africa/Bissau", GMT},
-            {"Africa/Blantyre", CAT},
-            {"Africa/Brazzaville", WAT},
-            {"Africa/Bujumbura", CAT},
-            {"Africa/Cairo", EET},
-            {"Africa/Ceuta", CET},
-            {"Africa/Conakry", GMT},
-            {"Africa/Dakar", GMT},
-            {"Africa/Dar_es_Salaam", EAT},
-            {"Africa/Djibouti", EAT},
-            {"Africa/Douala", WAT},
-            {"Africa/El_Aaiun", WET},
-            {"Africa/Freetown", SLST},
-            {"Africa/Gaborone", CAT},
-            {"Africa/Harare", CAT},
-            {"Africa/Johannesburg", SAST},
-            {"Africa/Juba", EAT},
-            {"Africa/Kampala", EAT},
-            {"Africa/Khartoum", EAT},
-            {"Africa/Kigali", CAT},
-            {"Africa/Kinshasa", WAT},
-            {"Africa/Lagos", WAT},
-            {"Africa/Libreville", WAT},
-            {"Africa/Lome", GMT},
-            {"Africa/Luanda", WAT},
-            {"Africa/Lubumbashi", CAT},
-            {"Africa/Lusaka", CAT},
-            {"Africa/Malabo", WAT},
-            {"Africa/Maputo", CAT},
-            {"Africa/Maseru", SAST},
-            {"Africa/Mbabane", SAST},
-            {"Africa/Mogadishu", EAT},
-            {"Africa/Monrovia", GMT},
-            {"Africa/Nairobi", EAT},
-            {"Africa/Ndjamena", WAT},
-            {"Africa/Niamey", WAT},
-            {"Africa/Nouakchott", GMT},
-            {"Africa/Ouagadougou", GMT},
-            {"Africa/Porto-Novo", WAT},
-            {"Africa/Sao_Tome", GMT},
-            {"Africa/Timbuktu", GMT},
-            {"Africa/Tripoli", CET},
-            {"Africa/Tunis", CET},
-            {"Africa/Windhoek", WAT},
-            {"America/Adak", HAST},
-            {"America/Anguilla", AST},
-            {"America/Antigua", AST},
-            {"America/Araguaina", BRT},
-            {"America/Argentina/Buenos_Aires", AGT},
-            {"America/Argentina/Catamarca", AGT},
-            {"America/Argentina/ComodRivadavia", AGT},
-            {"America/Argentina/Cordoba", AGT},
-            {"America/Argentina/Jujuy", AGT},
-            {"America/Argentina/La_Rioja", AGT},
-            {"America/Argentina/Mendoza", AGT},
-            {"America/Argentina/Rio_Gallegos", AGT},
-            {"America/Argentina/Salta", AGT},
-            {"America/Argentina/San_Juan", AGT},
-            {"America/Argentina/San_Luis", WART},
-            {"America/Argentina/Tucuman", AGT},
-            {"America/Argentina/Ushuaia", AGT},
-            {"America/Aruba", AST},
-            {"America/Asuncion", new String[] {"\ud30c\ub77c\uacfc\uc774 \uc2dc\uac04", "PYT",
-                                               "\ud30c\ub77c\uacfc\uc774 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PYST"}},
-            {"America/Atikokan", EST},
-            {"America/Atka", HAST},
-            {"America/Bahia", BRT},
-            {"America/Bahia_Banderas", CST},
-            {"America/Barbados", AST},
-            {"America/Belem", BRT},
-            {"America/Belize", CST},
-            {"America/Blanc-Sablon", AST},
-            {"America/Boa_Vista", AMT},
-            {"America/Bogota", new String[] {"\ucf5c\ub86c\ube44\uc544 \uc2dc\uac04", "COT",
-                                              "\ucf5c\ub86c\ube44\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "COST"}},
-            {"America/Boise", MST},
-            {"America/Buenos_Aires", AGT},
-            {"America/Cambridge_Bay", MST},
-            {"America/Campo_Grande", AMT},
-            {"America/Cancun", CST},
-            {"America/Caracas", new String[] {"\ubca0\ub124\uc218\uc5d8\ub77c \uc2dc\uac04", "VET",
-                                              "\ubca0\ub124\uc218\uc5d8\ub77c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VEST"}},
-            {"America/Catamarca", AGT},
-            {"America/Cayenne", new String[] {"\ud504\ub791\uc2a4\ub839 \uae30\uc544\ub098 \uc2dc\uac04", "GFT",
-                                              "\ud504\ub791\uc2a4\ub839 \uae30\uc544\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GFST"}},
-            {"America/Cayman", EST},
-            {"America/Chihuahua", MST},
-            {"America/Creston", MST},
-            {"America/Coral_Harbour", EST},
-            {"America/Cordoba", AGT},
-            {"America/Costa_Rica", CST},
-            {"America/Cuiaba", AMT},
-            {"America/Curacao", AST},
-            {"America/Danmarkshavn", GMT},
-            {"America/Dawson", PST},
-            {"America/Dawson_Creek", MST},
-            {"America/Detroit", EST},
-            {"America/Dominica", AST},
-            {"America/Edmonton", MST},
-            {"America/Eirunepe", AMT},
-            {"America/El_Salvador", CST},
-            {"America/Ensenada", PST},
-            {"America/Fort_Wayne", EST},
-            {"America/Fortaleza", BRT},
-            {"America/Glace_Bay", AST},
-            {"America/Godthab", new String[] {"\uc11c\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc2dc\uac04", "WGT",
-                                              "\uc11c\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WGST"}},
-            {"America/Goose_Bay", AST},
-            {"America/Grand_Turk", EST},
-            {"America/Grenada", AST},
-            {"America/Guadeloupe", AST},
-            {"America/Guatemala", CST},
-            {"America/Guayaquil", new String[] {"\uc5d0\ucfe0\uc544\ub3c4\ub974 \uc2dc\uac04", "ECT",
-                                                "\uc5d0\ucfe0\uc544\ub3c4\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ECST"}},
-            {"America/Guyana", new String[] {"\uac00\uc774\uc544\ub098 \uc2dc\uac04", "GYT",
-                                             "\uac00\uc774\uc544\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GYST"}},
-            {"America/Havana", CUBA},
-            {"America/Hermosillo", MST},
-            {"America/Indiana/Indianapolis", EST},
-            {"America/Indiana/Knox", CST},
-            {"America/Indiana/Marengo", EST},
-            {"America/Indiana/Petersburg", EST},
-            {"America/Indiana/Tell_City", CST},
-            {"America/Indiana/Vevay", EST},
-            {"America/Indiana/Vincennes", EST},
-            {"America/Indiana/Winamac", EST},
-            {"America/Inuvik", MST},
-            {"America/Iqaluit", EST},
-            {"America/Jamaica", EST},
-            {"America/Jujuy", AGT},
-            {"America/Juneau", AKST},
-            {"America/Kentucky/Louisville", EST},
-            {"America/Kentucky/Monticello", EST},
-            {"America/Knox_IN", CST},
-            {"America/Kralendijk", AST},
-            {"America/La_Paz", new String[] {"\ubcfc\ub9ac\ube44\uc544 \uc2dc\uac04", "BOT",
-                                            "\ubcfc\ub9ac\ube44\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BOST"}},
-            {"America/Lima", new String[] {"\ud398\ub8e8 \uc2dc\uac04", "PET",
-                                            "\ud398\ub8e8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PEST"}},
-            {"America/Louisville", EST},
-            {"America/Lower_Princes", AST},
-            {"America/Maceio", BRT},
-            {"America/Managua", CST},
-            {"America/Manaus", AMT},
-            {"America/Marigot", AST},
-            {"America/Martinique", AST},
-            {"America/Matamoros", CST},
-            {"America/Mazatlan", MST},
-            {"America/Mendoza", AGT},
-            {"America/Menominee", CST},
-            {"America/Merida", CST},
-            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
-                                                 "Metlakatla Daylight Time", "MeDT"}},
-            {"America/Mexico_City", CST},
-            {"America/Miquelon", new String[] {"\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \ud45c\uc900\uc2dc", "PMST",
-                                               "\ud53c\uc5d0\ub974 \ubbf8\ud06c\ub860 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PMDT"}},
-            {"America/Moncton", AST},
-            {"America/Montevideo", new String[] {"\uc6b0\ub8e8\uacfc\uc774 \uc2dc\uac04", "UYT",
-                                                 "\uc6b0\ub8e8\uacfc\uc774 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "UYST"}},
-            {"America/Monterrey", CST},
-            {"America/Montreal", EST},
-            {"America/Montserrat", AST},
-            {"America/Nassau", EST},
-            {"America/Nipigon", EST},
-            {"America/Nome", AKST},
-            {"America/Noronha", NORONHA},
-            {"America/North_Dakota/Beulah", CST},
-            {"America/North_Dakota/Center", CST},
-            {"America/North_Dakota/New_Salem", CST},
-            {"America/Ojinaga", MST},
-            {"America/Panama", EST},
-            {"America/Pangnirtung", EST},
-            {"America/Paramaribo", new String[] {"\uc218\ub9ac\ub0a8 \uc2dc\uac04", "SRT",
-                                                 "\uc218\ub9ac\ub0a8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SRST"}},
-            {"America/Port-au-Prince", EST},
-            {"America/Port_of_Spain", AST},
-            {"America/Porto_Acre", AMT},
-            {"America/Porto_Velho", AMT},
-            {"America/Puerto_Rico", AST},
-            {"America/Rainy_River", CST},
-            {"America/Rankin_Inlet", CST},
-            {"America/Recife", BRT},
-            {"America/Regina", CST},
-            {"America/Resolute", CST},
-            {"America/Rio_Branco", AMT},
-            {"America/Rosario", AGT},
-            {"America/Santa_Isabel", PST},
-            {"America/Santarem", BRT},
-            {"America/Santiago", CLT},
-            {"America/Santo_Domingo", AST},
-            {"America/Sao_Paulo", BRT},
-            {"America/Scoresbysund", EGT},
-            {"America/Shiprock", MST},
-            {"America/St_Barthelemy", AST},
-            {"America/St_Kitts", AST},
-            {"America/St_Lucia", AST},
-            {"America/St_Thomas", AST},
-            {"America/St_Vincent", AST},
-            {"America/Swift_Current", CST},
-            {"America/Tegucigalpa", CST},
-            {"America/Thule", AST},
-            {"America/Thunder_Bay", EST},
-            {"America/Tijuana", PST},
-            {"America/Toronto", EST},
-            {"America/Tortola", AST},
-            {"America/Vancouver", PST},
-            {"America/Virgin", AST},
-            {"America/Whitehorse", PST},
-            {"America/Winnipeg", CST},
-            {"America/Yakutat", AKST},
-            {"America/Yellowknife", MST},
-            {"Antarctica/Casey", WST_AUS},
-            {"Antarctica/Davis", new String[] {"Davis \uc2dc\uac04", "DAVT",
-                                               "Davis \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "DAVST"}},
-            {"Antarctica/DumontDUrville", new String[] {"\ub4a4\ubabd \ub4a4\ub974\ube4c \uc2dc\uac04", "DDUT",
-                                                        "\ub4a4\ubabd \ub4a4\ub974\ube4c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "DDUST"}},
-            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
-                                                   "Macquarie Island Summer Time", "MIST"}},
-            {"Antarctica/Mawson", new String[] {"\ubaa8\uc2a8 \uc2dc\uac04", "MAWT",
-                                                "\ubaa8\uc2a8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MAWST"}},
-            {"Antarctica/McMurdo", NZST},
-            {"Antarctica/Palmer", CLT},
-            {"Antarctica/Rothera", new String[] {"\ub85c\uc81c\ub77c \ud45c\uc900\uc2dc", "ROTT",
-                                                 "\ub85c\uc81c\ub77c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ROTST"}},
-            {"Antarctica/South_Pole", NZST},
-            {"Antarctica/Syowa", new String[] {"Syowa \uc2dc\uac04", "SYOT",
-                                               "Syowa \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SYOST"}},
-            {"Antarctica/Vostok", new String[] {"Vostok \uc2dc\uac04", "VOST",
-                                                "Vostok \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VOSST"}},
-            {"Arctic/Longyearbyen", CET},
-            {"Asia/Aden", ARAST},
-            {"Asia/Almaty", new String[] {"\uc54c\ub9c8\uc544\ud0c0 \uc2dc\uac04", "ALMT",
-                                          "\uc54c\ub9c8\uc544\ud0c0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ALMST"}},
-            {"Asia/Amman", EET},
-            {"Asia/Anadyr", new String[] {"\uc544\ub098\ub514\ub974 \uc2dc\uac04", "ANAT",
-                                          "\uc544\ub098\ub514\ub974 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ANAST"}},
-            {"Asia/Aqtau", new String[] {"\uc545\ud0c0\uc6b0 \uc2dc\uac04", "AQTT",
-                                         "\uc545\ud0c0\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "AQTST"}},
-            {"Asia/Aqtobe", new String[] {"\uc545\ud1a0\ube0c \uc2dc\uac04", "AQTT",
-                                          "\uc545\ud1a0\ube0c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "AQTST"}},
-            {"Asia/Ashgabat", TMT},
-            {"Asia/Ashkhabad", TMT},
-            {"Asia/Baghdad", ARAST},
-            {"Asia/Bahrain", ARAST},
-            {"Asia/Baku", new String[] {"\uc544\uc81c\ub974\ubc14\uc774\uc794 \uc2dc\uac04", "AZT",
-                                        "\uc544\uc81c\ub974\ubc14\uc774\uc794 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "AZST"}},
-            {"Asia/Bangkok", ICT},
-            {"Asia/Beirut", EET},
-            {"Asia/Bishkek", new String[] {"\ud0a4\ub974\ud0a4\uc988\uc2a4\ud0c4 \uc2dc\uac04", "KGT",
-                                           "\ud0a4\ub974\uae30\uc988\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KGST"}},
-            {"Asia/Brunei", new String[] {"\ube0c\ub8e8\ub098\uc774 \uc2dc\uac04", "BNT",
-                                          "\ube0c\ub8e8\ub098\uc774 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "BNST"}},
-            {"Asia/Calcutta", IST},
-            {"Asia/Choibalsan", new String[] {"Choibalsan \uc2dc\uac04", "CHOT",
-                                              "Choibalsan \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CHOST"}},
-            {"Asia/Chongqing", CTT},
-            {"Asia/Chungking", CTT},
-            {"Asia/Colombo", IST},
-            {"Asia/Dacca", BDT},
-            {"Asia/Dhaka", BDT},
-            {"Asia/Dili", new String[] {"\ud2f0\ubaa8\ub974-\ub808\uc2a4\ud14c \uc2dc\uac04", "TLT",
-                                        "\ud2f0\ubaa8\ub974-\ub808\uc2a4\ud14c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TLST"}},
-            {"Asia/Damascus", EET},
-            {"Asia/Dubai", GST},
-            {"Asia/Dushanbe", new String[] {"\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4 \uc2dc\uac04", "TJT",
-                                            "\ud0c0\uc9c0\ud0a4\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TJST"}},
-            {"Asia/Gaza", EET},
-            {"Asia/Harbin", CTT},
-            {"Asia/Hebron", EET},
-            {"Asia/Ho_Chi_Minh", ICT},
-            {"Asia/Hong_Kong", HKT},
-            {"Asia/Hovd", new String[] {"Hovd \uc2dc\uac04", "HOVT",
-                                        "Hovd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "HOVST"}},
-            {"Asia/Irkutsk", new String[] {"\uc774\ub974\ucfe0\uce20\ud06c \uc2dc\uac04", "IRKT",
-                                            "\uc774\ub974\ucfe0\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IRKST"}},
-            {"Asia/Istanbul", EET},
-            {"Asia/Jakarta", WIT},
-            {"Asia/Jayapura", new String[] {"\ub3d9\ubd80 \uc778\ub3c4\ub124\uc2dc\uc544 \uc2dc\uac04", "EIT",
-                                            "\ub3d9\ubd80 \uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EIST"}},
-            {"Asia/Kabul", new String[] {"\uc544\ud504\uac00\ub2c8\uc2a4\ud0c4 \uc2dc\uac04", "AFT",
-                                         "\uc544\ud504\uac00\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "AFST"}},
-            {"Asia/Kamchatka", new String[] {"\ud398\ud2b8\ub85c\ud30c\ube14\ub85c\ud504\uc2a4\ud06c-\uce84\ucc28\uce20\ud0a4 \uc2dc\uac04", "PETT",
-                                            "\ud398\ud2b8\ub85c\ud30c\ube14\ub85c\ud504\uc2a4\ud06c-\uce84\ucc28\uce20\ud0a4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PETST"}},
-            {"Asia/Karachi", PKT},
-            {"Asia/Kashgar", CTT},
-            {"Asia/Kathmandu", NPT},
-            {"Asia/Katmandu", NPT},
-            {"Asia/Khandyga", YAKT},
-            {"Asia/Kolkata", IST},
-            {"Asia/Krasnoyarsk", new String[] {"\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc2dc\uac04", "KRAT",
-                                               "\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KRAST"}},
-            {"Asia/Kuala_Lumpur", MYT},
-            {"Asia/Kuching", MYT},
-            {"Asia/Kuwait", ARAST},
-            {"Asia/Macao", CTT},
-            {"Asia/Macau", CTT},
-            {"Asia/Magadan", new String[] {"\ub9c8\uac00\ub2e8 \uc2dc\uac04", "MAGT",
-                                           "\ub9c8\uac00\ub2e8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MAGST"}},
-            {"Asia/Makassar", CIT},
-            {"Asia/Manila", new String[] {"\ud544\ub9ac\ud540 \uc2dc\uac04", "PHT",
-                                          "\ud544\ub9ac\ud540 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PHST"}},
-            {"Asia/Muscat", GST},
-            {"Asia/Nicosia", EET},
-            {"Asia/Novokuznetsk", NOVT},
-            {"Asia/Novosibirsk", NOVT},
-            {"Asia/Oral", new String[] {"Oral \ud45c\uc900\uc2dc", "ORAT",
-                                        "Oral \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "ORAST"}},
-            {"Asia/Omsk", new String[] {"Omsk \uc2dc\uac04", "OMST",
-                                        "Omsk \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "OMSST"}},
-            {"Asia/Phnom_Penh", ICT},
-            {"Asia/Pontianak", WIT},
-            {"Asia/Pyongyang", KST},
-            {"Asia/Qatar", ARAST},
-            {"Asia/Qyzylorda", new String[] {"Qyzylorda \ud45c\uc900\uc2dc", "QYZT",
-                                             "Qyzylorda \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "QYZST"}},
-            {"Asia/Rangoon", new String[] {"\ubbf8\uc580\ub9c8 \uc2dc\uac04", "MMT",
-                                           "\ubbf8\uc580\ub9c8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MMST"}},
-            {"Asia/Riyadh", ARAST},
-            {"Asia/Saigon", ICT},
-            {"Asia/Sakhalin", new String[] {"\uc0ac\ud560\ub9b0 \uc2dc\uac04", "SAKT",
-                                            "\uc0ac\ud560\ub9b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAKST"}},
-            {"Asia/Samarkand", UZT},
-            {"Asia/Seoul", KST},
-            {"Asia/Singapore", SGT},
-            {"Asia/Taipei", CTT},
-            {"Asia/Tel_Aviv", ISRAEL},
-            {"Asia/Tashkent", UZT},
-            {"Asia/Tbilisi", new String[] {"\uadf8\ub8e8\uc9c0\uc57c \uc2dc\uac04", "GET",
-                                          "\uadf8\ub8e8\uc9c0\uc57c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GEST"}},
-            {"Asia/Tehran", IRT},
-            {"Asia/Thimbu", BTT},
-            {"Asia/Thimphu", BTT},
-            {"Asia/Ujung_Pandang", CIT},
-            {"Asia/Ulaanbaatar", ULAT},
-            {"Asia/Ulan_Bator", ULAT},
-            {"Asia/Urumqi", CTT},
-            {"Asia/Ust-Nera", VLAT},
-            {"Asia/Vientiane", ICT},
-            {"Asia/Vladivostok", VLAT},
-            {"Asia/Yakutsk", YAKT},
-            {"Asia/Yekaterinburg", new String[] {"\uc608\uce74\ud14c\ub9b0\ubc84\uadf8 \uc2dc\uac04", "YEKT",
-                                                 "\uc608\uce74\ud14c\ub9b0\ubc84\uadf8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "YEKST"}},
-            {"Asia/Yerevan", ARMT},
-            {"Atlantic/Azores", new String[] {"\uc544\uc870\ub808\uc2a4 \uc2dc\uac04", "AZOT",
-                                              "\uc544\uc870\ub808\uc2a4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "AZOST"}},
-            {"Atlantic/Bermuda", AST},
-            {"Atlantic/Canary", WET},
-            {"Atlantic/Cape_Verde", new String[] {"\uae4c\ubf40\ubca0\ub974\ub370 \uc2dc\uac04", "CVT",
-                                                  "\uae4c\ubf40\ubca0\ub974\ub370 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CVST"}},
-            {"Atlantic/Faeroe", WET},
-            {"Atlantic/Faroe", WET},
-            {"Atlantic/Jan_Mayen", CET},
-            {"Atlantic/Madeira", WET},
-            {"Atlantic/Reykjavik", GMT},
-            {"Atlantic/South_Georgia", new String[] {"\uc0ac\uc6b0\uc2a4 \uc870\uc9c0\uc544 \ud45c\uc900\uc2dc", "GST",
-                                                     "\uc0ac\uc6b0\uc2a4 \uc870\uc9c0\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GDT"}},
-            {"Atlantic/St_Helena", GMT},
-            {"Atlantic/Stanley", new String[] {"\ud3ec\ud074\ub79c\ub4dc \uad70\ub3c4 \uc2dc\uac04", "FKT",
-                                               "\ud3ec\ud074\ub79c\ub4dc \uad70\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "FKST"}},
-            {"Australia/ACT", EST_NSW},
-            {"Australia/Adelaide", ADELAIDE},
-            {"Australia/Brisbane", BRISBANE},
-            {"Australia/Broken_Hill", BROKEN_HILL},
-            {"Australia/Canberra", EST_NSW},
-            {"Australia/Currie", EST_NSW},
-            {"Australia/Darwin", DARWIN},
-            {"Australia/Eucla", new String[] {"\uc911\uc11c\ubd80 \ud45c\uc900\uc2dc(\uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544)", "CWST",
-                                              "\uc911\uc11c\ubd80 \uc77c\uad11\uc808\uc57d\uc2dc\uac04(\uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544)", "CWST"}},
-            {"Australia/Hobart", TASMANIA},
-            {"Australia/LHI", LORD_HOWE},
-            {"Australia/Lindeman", BRISBANE},
-            {"Australia/Lord_Howe", LORD_HOWE},
-            {"Australia/Melbourne", VICTORIA},
-            {"Australia/North", DARWIN},
-            {"Australia/NSW", EST_NSW},
-            {"Australia/Perth", WST_AUS},
-            {"Australia/Queensland", BRISBANE},
-            {"Australia/South", ADELAIDE},
-            {"Australia/Sydney", EST_NSW},
-            {"Australia/Tasmania", TASMANIA},
-            {"Australia/Victoria", VICTORIA},
-            {"Australia/West", WST_AUS},
-            {"Australia/Yancowinna", BROKEN_HILL},
-            {"BET", BRT},
-            {"BST", BDT},
-            {"Brazil/Acre", AMT},
-            {"Brazil/DeNoronha", NORONHA},
-            {"Brazil/East", BRT},
-            {"Brazil/West", AMT},
-            {"Canada/Atlantic", AST},
-            {"Canada/Central", CST},
-            {"Canada/East-Saskatchewan", CST},
-            {"Canada/Eastern", EST},
-            {"Canada/Mountain", MST},
-            {"Canada/Newfoundland", NST},
-            {"Canada/Pacific", PST},
-            {"Canada/Yukon", PST},
-            {"Canada/Saskatchewan", CST},
-            {"CAT", CAT},
-            {"CET", CET},
-            {"Chile/Continental", CLT},
-            {"Chile/EasterIsland", EASTER},
-            {"CST6CDT", CST},
-            {"Cuba", CUBA},
-            {"EAT", EAT},
-            {"EET", EET},
-            {"Egypt", EET},
-            {"Eire", DUBLIN},
-            {"EST5EDT", EST},
-            {"Etc/Greenwich", GMT},
-            {"Etc/UCT", UTC},
-            {"Etc/Universal", UTC},
-            {"Etc/UTC", UTC},
-            {"Etc/Zulu", UTC},
-            {"Europe/Amsterdam", CET},
-            {"Europe/Andorra", CET},
-            {"Europe/Athens", EET},
-            {"Europe/Belfast", GMTBST},
-            {"Europe/Belgrade", CET},
-            {"Europe/Berlin", CET},
-            {"Europe/Bratislava", CET},
-            {"Europe/Brussels", CET},
-            {"Europe/Budapest", CET},
-            {"Europe/Busingen", CET},
-            {"Europe/Chisinau", EET},
-            {"Europe/Copenhagen", CET},
-            {"Europe/Dublin", DUBLIN},
-            {"Europe/Gibraltar", CET},
-            {"Europe/Guernsey", GMTBST},
-            {"Europe/Helsinki", EET},
-            {"Europe/Isle_of_Man", GMTBST},
-            {"Europe/Istanbul", EET},
-            {"Europe/Jersey", GMTBST},
-            {"Europe/Kaliningrad", FET},
-            {"Europe/Kiev", EET},
-            {"Europe/Lisbon", WET},
-            {"Europe/Ljubljana", CET},
-            {"Europe/London", GMTBST},
-            {"Europe/Luxembourg", CET},
-            {"Europe/Madrid", CET},
-            {"Europe/Malta", CET},
-            {"Europe/Mariehamn", EET},
-            {"Europe/Minsk", FET},
-            {"Europe/Monaco", CET},
-            {"Europe/Moscow", MSK},
-            {"Europe/Nicosia", EET},
-            {"Europe/Oslo", CET},
-            {"Europe/Podgorica", CET},
-            {"Europe/Prague", CET},
-            {"Europe/Riga", EET},
-            {"Europe/Rome", CET},
-            {"Europe/Samara", new String[] {"\uc0ac\ub9c8\ub77c \uc2dc\uac04", "SAMT",
-                                            "\uc0ac\ub9c8\ub77c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAMST"}},
-            {"Europe/San_Marino", CET},
-            {"Europe/Sarajevo", CET},
-            {"Europe/Simferopol", EET},
-            {"Europe/Skopje", CET},
-            {"Europe/Sofia", EET},
-            {"Europe/Stockholm", CET},
-            {"Europe/Tallinn", EET},
-            {"Europe/Tirane", CET},
-            {"Europe/Tiraspol", EET},
-            {"Europe/Uzhgorod", EET},
-            {"Europe/Vaduz", CET},
-            {"Europe/Vatican", CET},
-            {"Europe/Vienna", CET},
-            {"Europe/Vilnius", EET},
-            {"Europe/Volgograd", new String[] {"\ubcfc\uace0\uadf8\ub77c\ub4dc \uc2dc\uac04", "VOLT",
-                                               "\ubcfc\uace0\uadf8\ub77c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VOLST"}},
-            {"Europe/Warsaw", CET},
-            {"Europe/Zagreb", CET},
-            {"Europe/Zaporozhye", EET},
-            {"Europe/Zurich", CET},
-            {"GB", GMTBST},
-            {"GB-Eire", GMTBST},
-            {"Greenwich", GMT},
-            {"Hongkong", HKT},
-            {"Iceland", GMT},
-            {"Iran", IRT},
-            {"IST", IST},
-            {"Indian/Antananarivo", EAT},
-            {"Indian/Chagos", new String[] {"\uc601\uc778\ub3c4 \uc81c\ub3c4 \uc2dc\uac04", "IOT",
-                                            "\uc601\uc778\ub3c4 \uc81c\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IOST"}},
-            {"Indian/Christmas", new String[] {"\ud06c\ub9ac\uc2a4\ub9c8\uc2a4\uc12c \uc2dc\uac04", "CXT",
-                                               "\ud06c\ub9ac\uc2a4\ub9c8\uc2a4\uc12c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CXST"}},
-            {"Indian/Cocos", new String[] {"\ucf54\ucf54\uc2a4 \uad70\ub3c4 \uc2dc\uac04", "CCT",
-                                           "\ucf54\ucf54\uc2a4 \uad70\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CCST"}},
-            {"Indian/Comoro", EAT},
-            {"Indian/Kerguelen", new String[] {"\ud504\ub791\uc2a4 \ub0a8\ubd80 \uc9c0\ubc29 \ubc0f \ub0a8\uadf9 \uc9c0\uc5ed \uc2dc\uac04", "TFT",
-                                               "\ud504\ub791\uc2a4 \ub0a8\ubd80 \uc9c0\ubc29 \ubc0f \ub0a8\uadf9 \uc9c0\uc5ed \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TFST"}},
-            {"Indian/Mahe", new String[] {"\uc138\uc774\uc140 \uc2dc\uac04", "SCT",
-                                          "\uc138\uc774\uc258 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SCST"}},
-            {"Indian/Maldives", new String[] {"\ubab0\ub514\ube0c \uc2dc\uac04", "MVT",
-                                              "\ubab0\ub514\ube0c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MVST"}},
-            {"Indian/Mauritius", new String[] {"\ubaa8\ub9ac\uc154\uc2a4 \uc2dc\uac04", "MUT",
-                                               "\ubaa8\ub9ac\uc154\uc2a4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MUST"}},
-            {"Indian/Mayotte", EAT},
-            {"Indian/Reunion", new String[] {"\ub9ac\uc720\ub2c8\uc5b8 \uc2dc\uac04", "RET",
-                                             "\ub9ac\uc720\ub2c8\uc5b8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "REST"}},
-            {"Israel", ISRAEL},
-            {"Jamaica", EST},
-            {"Japan", JST},
-            {"Kwajalein", MHT},
-            {"Libya", CET},
-            {"MET", new String[] {"\uc911\ubd80 \uc720\ub7fd \uc2dc\uac04", "MET",
-                                  "\uc911\ubd80 \uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MEST"}},
-            {"Mexico/BajaNorte", PST},
-            {"Mexico/BajaSur", MST},
-            {"Mexico/General", CST},
-            {"MIT", WST_SAMOA},
-            {"MST7MDT", MST},
-            {"Navajo", MST},
-            {"NET", ARMT},
-            {"NST", NZST},
-            {"NZ", NZST},
-            {"NZ-CHAT", CHAST},
-            {"PLT", PKT},
-            {"Portugal", WET},
-            {"PRT", AST},
-            {"Pacific/Apia", WST_SAMOA},
-            {"Pacific/Auckland", NZST},
-            {"Pacific/Chatham", CHAST},
-            {"Pacific/Chuuk", CHUT},
-            {"Pacific/Easter", EASTER},
-            {"Pacific/Efate", new String[] {"\ube44\ub204\uc544\ud22c \uc2dc\uac04", "VUT",
-                                            "\ubc14\ub204\uc544\ud22c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VUST"}},
-            {"Pacific/Enderbury", new String[] {"\ud53c\ub2c9\uc2a4 \uad70\ub3c4 \uc2dc\uac04", "PHOT",
-                                                "\ud53c\ub2c9\uc2a4 \uad70\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PHOST"}},
-            {"Pacific/Fakaofo", new String[] {"\ud1a0\ucf08\ub77c\uc6b0 \uc2dc\uac04", "TKT",
-                                              "\ud1a0\ucf08\ub77c\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TKST"}},
-            {"Pacific/Fiji", new String[] {"\ud53c\uc9c0 \uc2dc\uac04", "FJT",
-                                          "\ud53c\uc9c0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "FJST"}},
-            {"Pacific/Funafuti", new String[] {"\ud22c\ubc1c\ub8e8 \uc2dc\uac04", "TVT",
-                                             "\ud22c\ubc1c\ub8e8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TVST"}},
-            {"Pacific/Galapagos", new String[] {"\uac08\ub77c\ud30c\uace0\uc2a4 \uc2dc\uac04", "GALT",
-                                                "\uac08\ub77c\ud30c\uace0\uc2a4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GALST"}},
-            {"Pacific/Gambier", GAMBIER},
-            {"Pacific/Guadalcanal", SBT},
-            {"Pacific/Guam", ChST},
-            {"Pacific/Johnston", HST},
-            {"Pacific/Kiritimati", new String[] {"\ub77c\uc778 \uad70\ub3c4 \uc2dc\uac04", "LINT",
-                                                 "\ub77c\uc778 \uad70\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "LINST"}},
-            {"Pacific/Kosrae", new String[] {"\ucf54\uc2a4\ub798 \uc2dc\uac04", "KOST",
-                                             "\ucf54\uc2a4\ub798 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KOSST"}},
-            {"Pacific/Kwajalein", MHT},
-            {"Pacific/Majuro", MHT},
-            {"Pacific/Marquesas", new String[] {"\ub9c8\ub974\ucf00\uc0ac\uc2a4 \uc2dc\uac04", "MART",
-                                                "\ub9c8\ub974\ucf00\uc0ac\uc2a4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MARST"}},
-            {"Pacific/Midway", SAMOA},
-            {"Pacific/Nauru", new String[] {"\ub098\uc6b0\ub8e8 \uc2dc\uac04", "NRT",
-                                           "\ub098\uc6b0\ub8e8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "NRST"}},
-            {"Pacific/Niue", new String[] {"\ub2c8\uc6b0\uc5d0 \uc2dc\uac04", "NUT",
-                                           "\ub2c8\uc6b0\uc5d0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "NUST"}},
-            {"Pacific/Norfolk", new String[] {"\ub178\ud37d \uc2dc\uac04", "NFT",
-                                              "\ub178\ud37d \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "NFST"}},
-            {"Pacific/Noumea", new String[] {"\ub274 \uce7c\ub808\ub3c4\ub2c8\uc544 \uc2dc\uac04", "NCT",
-                                             "\ub274 \uce7c\ub808\ub3c4\ub2c8\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "NCST"}},
-            {"Pacific/Pago_Pago", SAMOA},
-            {"Pacific/Palau", new String[] {"\ud314\ub77c\uc6b0 \uc2dc\uac04", "PWT",
-                                            "\ud314\ub77c\uc6b0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PWST"}},
-            {"Pacific/Pitcairn", PITCAIRN},
-            {"Pacific/Pohnpei", PONT},
-            {"Pacific/Ponape", PONT},
-            {"Pacific/Port_Moresby", new String[] {"\ud30c\ud478\uc544\ub274\uae30\ub2c8 \uc2dc\uac04", "PGT",
-                                                  "\ud30c\ud478\uc544\ub274\uae30\ub2c8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "PGST"}},
-            {"Pacific/Rarotonga", new String[] {"\ucfe0\ud06c \uad70\ub3c4 \uc2dc\uac04", "CKT",
-                                                "\ucfe0\ud06c \uad70\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CKHST"}},
-            {"Pacific/Saipan", ChST},
-            {"Pacific/Samoa", SAMOA},
-            {"Pacific/Tahiti", new String[] {"\ud0c0\ud788\ud2f0 \uc2dc\uac04", "TAHT",
-                                             "\ud0c0\ud788\ud2f0 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TAHST"}},
-            {"Pacific/Tarawa", new String[] {"\uae38\ubc84\ud2b8 \uad70\ub3c4 \uc2dc\uac04", "GILT",
-                                             "\uae38\ubc84\ud2b8 \uad70\ub3c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "GILST"}},
-            {"Pacific/Tongatapu", new String[] {"\ud1b5\uac00 \uc2dc\uac04", "TOT",
-                                                "\ud1b5\uac00 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "TOST"}},
-            {"Pacific/Truk", CHUT},
-            {"Pacific/Wake", new String[] {"\uc6e8\uc774\ud06c \uc2dc\uac04", "WAKT",
-                                           "\uc6e8\uc774\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WAKST"}},
-            {"Pacific/Wallis", new String[] {"\uc6d4\ub9ac\uc2a4 \ud6c4\ud22c\ub098 \uc2dc\uac04", "WFT",
-                                             "\uc6d4\ub9ac\uc2a4 \ud6c4\ud2b8\ub098 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WFST"}},
-            {"Pacific/Yap", CHUT},
-            {"Poland", CET},
-            {"PRC", CTT},
-            {"PST8PDT", PST},
-            {"ROK", KST},
-            {"Singapore", SGT},
-            {"SST", SBT},
-            {"SystemV/AST4", AST},
-            {"SystemV/AST4ADT", AST},
-            {"SystemV/CST6", CST},
-            {"SystemV/CST6CDT", CST},
-            {"SystemV/EST5", EST},
-            {"SystemV/EST5EDT", EST},
-            {"SystemV/HST10", HST},
-            {"SystemV/MST7", MST},
-            {"SystemV/MST7MDT", MST},
-            {"SystemV/PST8", PST},
-            {"SystemV/PST8PDT", PST},
-            {"SystemV/YST9", AKST},
-            {"SystemV/YST9YDT", AKST},
-            {"Turkey", EET},
-            {"UCT", UTC},
-            {"Universal", UTC},
-            {"US/Alaska", AKST},
-            {"US/Aleutian", HAST},
-            {"US/Arizona", MST},
-            {"US/Central", CST},
-            {"US/Eastern", EST},
-            {"US/Hawaii", HST},
-            {"US/Indiana-Starke", CST},
-            {"US/East-Indiana", EST},
-            {"US/Michigan", EST},
-            {"US/Mountain", MST},
-            {"US/Pacific", PST},
-            {"US/Pacific-New", PST},
-            {"US/Samoa", SAMOA},
-            {"UTC", UTC},
-            {"VST", ICT},
-            {"W-SU", MSK},
-            {"WET", WET},
-            {"Zulu", UTC},
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_pt_BR.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames_pt_BR.java
deleted file mode 100755
index 8d5874a..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_pt_BR.java
+++ /dev/null
@@ -1,876 +0,0 @@
-/*
- * Copyright (c) 1997, 2011, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-public final class TimeZoneNames_pt_BR extends TimeZoneNamesBundle {
-
-    protected final Object[][] getContents() {
-        String ACT[] = new String[] {"Fuso hor\u00e1rio do Acre", "ACT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o do Acre", "ACST"};
-        String ADELAIDE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central (Austr\u00e1lia do Sul)", "CST",
-                                          "Fuso hor\u00e1rio de ver\u00e3o central (Austr\u00e1lia do Sul)", "CST"};
-        String AGT[] = new String[] {"Fuso hor\u00e1rio da Argentina", "ART",
-                                     "Fuso hor\u00e1rio de ver\u00e3o da Argentina", "ARST"};
-        String AKST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Alaska", "AKST",
-                                      "Hor\u00e1rio de luz natural do Alaska", "AKDT"};
-        String AMT[] = new String[] {"Fuso hor\u00e1rio do Amazonas", "AMT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o do Amazonas", "AMST"};
-        String ARAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Ar\u00e1bia", "AST",
-                                       "Hor\u00e1rio de luz natural da Ar\u00e1bia", "ADT"};
-        String ARMT[] = new String[] {"Fuso hor\u00e1rio da Arm\u00eania", "AMT",
-                                      "Fuso hor\u00e1rio de ver\u00e3o da Arm\u00eania", "AMST"};
-        String AST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Atl\u00e2ntico", "AST",
-                                     "Hor\u00e1rio de luz natural do Atl\u00e2ntico", "ADT"};
-        String BDT[] = new String[] {"Fuso hor\u00e1rio de Bangladesh", "BDT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o de Bangladesh", "BDST"};
-        String BRISBANE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Queensland)", "EST",
-                                          "Fuso hor\u00e1rio de ver\u00e3o oriental (Queensland)", "EST"};
-        String BROKEN_HILL[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central (Austr\u00e1lia do Sul/Nova Gales do Sul)", "CST",
-                                             "Fuso hor\u00e1rio de ver\u00e3o central (Austr\u00e1lia do Sul/Nova Gales do Sul)", "CST"};
-        String BRT[] = new String[] {"Fuso hor\u00e1rio de Bras\u00edlia", "BRT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o de Bras\u00edlia", "BRST"};
-        String BTT[] = new String[] {"Fuso hor\u00e1rio de But\u00e3o", "BTT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o de But\u00e3o", "BTST"};
-        String CAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Central", "CAT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica Central", "CAST"};
-        String CET[] = new String[] {"Fuso hor\u00e1rio da Europa Central", "CET",
-                                     "Fuso hor\u00e1rio de ver\u00e3o da Europa Central", "CEST"};
-        String CHAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chatham", "CHAST",
-                                       "Hor\u00e1rio de luz natural de Chatham", "CHADT"};
-        String ChST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Chamorro", "ChST",
-                                      "Hor\u00e1rio de luz natural de Chamorro", "ChDT"};
-        String CIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Central", "CIT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Central", "CIST"};
-        String CLT[] = new String[] {"Fuso hor\u00e1rio do Chile", "CLT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o do Chile", "CLST"};
-        String CST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central", "CST",
-                                     "Hor\u00e1rio de luz natural central", "CDT"};
-        String CTT[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da China", "CST",
-                                     "Hor\u00e1rio de luz natural da China", "CDT"};
-        String CUBA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Cuba", "CST",
-                                      "Hor\u00e1rio de luz natural de Cuba", "CDT"};
-        String DARWIN[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o central (Territ\u00f3rio do Norte)", "CST",
-                                        "Fuso hor\u00e1rio de ver\u00e3o central (Territ\u00f3rio do Norte)", "CST"};
-        String DUBLIN[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT",
-                                        "Fuso hor\u00e1rio de ver\u00e3o da Irlanda", "IST"};
-        String EAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Oriental", "EAT",
-                                     "Fuso hor\u00e1rio padr\u00e3o da \u00c1frica Oriental", "EAST"};
-        String EASTER[] = new String[] {"Fuso hor\u00e1rio da Ilha de P\u00e1scoa", "EAST",
-                                        "Fuso hor\u00e1rio de ver\u00e3o da Ilha de P\u00e1scoa", "EASST"};
-        String EET[] = new String[] {"Fuso hor\u00e1rio da Europa Oriental", "EET",
-                                     "Fuso hor\u00e1rio de ver\u00e3o da Europa Oriental", "EEST"};
-        String EGT[] = new String[] {"Fuso hor\u00e1rio da Groenl\u00e2ndia Oriental", "EGT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Oriental", "EGST"};
-        String EST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental", "EST",
-                                     "Hor\u00e1rio de luz natural oriental", "EDT"};
-        String EST_NSW[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Nova Gales do Sul)", "EST",
-                                         "Fuso hor\u00e1rio de ver\u00e3o oriental (Nova Gales do Sul)", "EST"};
-        String FET[] = new String[] {"Further-eastern European Time", "FET",
-                                     "Further-eastern European Summer Time", "FEST"};
-        String GHMT[] = new String[] {"Fuso hor\u00e1rio do meridiano de Gana", "GMT",
-                                      "Fuso hor\u00e1rio de ver\u00e3o de Gana", "GHST"};
-        String GAMBIER[] =  new String[] {"Fuso hor\u00e1rio de Gambier", "GAMT",
-                                          "Fuso hor\u00e1rio de ver\u00e3o de Gambier", "GAMST"};
-        String GMT[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT",
-                                     "Fuso hor\u00e1rio do meridiano de Greenwich", "GMT"};
-        String GMTBST[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT",
-                                        "Fuso hor\u00e1rio de ver\u00e3o da Gr\u00e3-Bretanha", "BST"};
-        String GST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do golfo", "GST",
-                                     "Hor\u00e1rio de luz natural do golfo", "GDT"};
-        String HAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Hava\u00ed-Aleutian", "HAST",
-                                      "Hor\u00e1rio de luz natural do Hava\u00ed-Aleutian", "HADT"};
-        String HKT[] =  new String[] {"Fuso hor\u00e1rio de Hong Kong", "HKT",
-                                      "Fuso hor\u00e1rio de ver\u00e3o de Hong Kong", "HKST"};
-        String HST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Hava\u00ed", "HST",
-                                     "Hor\u00e1rio de luz natural do Hava\u00ed", "HDT"};
-        String ICT[] = new String[] {"Fuso hor\u00e1rio da Indochina", "ICT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o da Indochina", "ICST"};
-        String IRT[] = new String[] {"Fuso hor\u00e1rio do Ir\u00e3", "IRST",
-                                     "Hor\u00e1rio de luz natural do Ir\u00e3", "IRDT"};
-        String ISRAEL[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Israel", "IST",
-                                        "Hor\u00e1rio de luz natural de Israel", "IDT"};
-        String IST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da \u00cdndia", "IST",
-                                     "Hor\u00e1rio de luz natural da \u00cdndia", "IDT"};
-        String JST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Jap\u00e3o", "JST",
-                                     "Hor\u00e1rio de luz natural do Jap\u00e3o", "JDT"};
-        String KST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Coreia", "KST",
-                                     "Hor\u00e1rio de luz natural da Coreia", "KDT"};
-        String LORD_HOWE[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Lord Howe", "LHST",
-                                           "Fuso hor\u00e1rio de ver\u00e3o de Lord Howe", "LHST"};
-        String MHT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Marshall", "MHT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Marshall", "MHST"};
-        String MSK[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Moscou", "MSK",
-                                     "Hor\u00e1rio de luz natural de Moscou", "MSD"};
-        String MST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o das montanhas", "MST",
-                                     "Hor\u00e1rio de luz natural das montanhas", "MDT"};
-        String MYT[] = new String[] {"Fuso hor\u00e1rio da Mal\u00e1sia", "MYT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o da Mal\u00e1sia", "MYST"};
-        String NORONHA[] = new String[] {"Fuso hor\u00e1rio de Fernando de Noronha", "FNT",
-                                         "Fuso hor\u00e1rio de ver\u00e3o de Fernando de Noronha", "FNST"};
-        String NOVT[] = new String[] {"Fuso hor\u00e1rio de Novosibirsk", "NOVT",
-                                      "Fuso hor\u00e1rio de ver\u00e3o de Novosibirsk", "NOVST"};
-        String NPT[] = new String[] {"Fuso hor\u00e1rio do Nepal", "NPT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o do Nepal", "NPST"};
-        String NST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Terra Nova", "NST",
-                                     "Hor\u00e1rio de luz natural de Terra Nova", "NDT"};
-        String NZST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da Nova Zel\u00e2ndia", "NZST",
-                                      "Hor\u00e1rio de luz natural da Nova Zel\u00e2ndia", "NZDT"};
-        String PITCAIRN[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Pitcairn", "PST",
-                                          "Hor\u00e1rio de luz natural de Pitcairn", "PDT"};
-        String PKT[] = new String[] {"Fuso hor\u00e1rio do Paquist\u00e3o", "PKT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o do Paquist\u00e3o", "PKST"};
-        String PONT[] = new String[] {"Fuso hor\u00e1rio de Pohnpei", "PONT",
-                                      "Fuso hor\u00e1rio de ver\u00e3o de Pohnpei", "PONST"};
-        String PST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o do Pac\u00edfico", "PST",
-                                     "Hor\u00e1rio de luz natural do Pac\u00edfico", "PDT"};
-        String SAMOA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o de Samoa", "SST",
-                                       "Hor\u00e1rio de luz natural de Samoa", "SDT"};
-        String SAST[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o da \u00c1frica do Sul", "SAST",
-                                      "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica do Sul", "SAST"};
-        String SBT[] = new String[] {"Fuso hor\u00e1rio das Ilhas Salom\u00e3o", "SBT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Salom\u00e3o", "SBST"};
-        String SGT[] = new String[] {"Fuso hor\u00e1rio de Cingapura", "SGT",
-                                     "Fuso hor\u00e1rio de ver\u00e1 de Cingapura", "SGST"};
-        String SLST[] = new String[] {"Fuso hor\u00e1rio do meridiano de Greenwich", "GMT",
-                                      "Fuso hor\u00e1rio de ver\u00e3o de Serra Leoa", "SLST"};
-        String TASMANIA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Tasm\u00e2nia)", "EST",
-                                          "Fuso hor\u00e1rio de ver\u00e3o oriental (Tasm\u00e2nia)", "EST"};
-        String TMT[] = new String[] {"Fuso hor\u00e1rio do Turcomenist\u00e3o", "TMT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o do Turcomenist\u00e3o", "TMST"};
-        String TRUT[] = new String[] {"Fuso hor\u00e1rio de Chuuk", "CHUT",
-                                      "Fuso hor\u00e1rio de ver\u00e3o de Chuuk", "CHUST"};
-        String ULAT[]= new String[] {"Fuso hor\u00e1rio de Ulan Bator", "ULAT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o de Ulan Bator", "ULAST"};
-        String UTC[] = new String[] {"Tempo universal coordenado", "UTC",
-                                     "Tempo universal coordenado", "UTC"};
-        String UZT[] = new String[] {"Fuso hor\u00e1rio do Uzbequist\u00e3o", "UZT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o do Uzbequist\u00e3o", "UZST"};
-        String VICTORIA[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o oriental (Victoria)", "EST",
-                                          "Fuso hor\u00e1rio de ver\u00e3o oriental (Victoria)", "EST"};
-        String VLAT[] = new String[] {"Fuso hor\u00e1rio de Vladivostok", "VLAT",
-                                      "Fuso hor\u00e1rio de ver\u00e3o de Vladivostok", "VLAST"};
-        String WART[] = new String[] {"Fuso hor\u00e1rio da Argentina Ocidental", "WART",
-                                      "Fuso hor\u00e1rio de ver\u00e3o da Argentina Ocidental", "WARST"};
-        String WAT[] = new String[] {"Fuso hor\u00e1rio da \u00c1frica Ocidental", "WAT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o da \u00c1frica Ocidental", "WAST"};
-        String WET[] = new String[] {"Fuso hor\u00e1rio da Europa Ocidental", "WET",
-                                     "Fuso hor\u00e1rio de ver\u00e3o da Europa Ocidental", "WEST"};
-        String WIT[] = new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Ocidental", "WIT",
-                                     "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Ocidental", "WIST"};
-        String WST_AUS[] = new String[] {"Fuso hor\u00e1rio padr\u00e3o ocidental (Austr\u00e1lia)", "WST",
-                                         "Fuso hor\u00e1rio de ver\u00e3o ocidental (Austr\u00e1lia)", "WST"};
-        String WST_SAMOA[] = new String[] {"Fuso hor\u00e1rio de Samoa Ocidental", "WST",
-                                           "Fuso hor\u00e1rio de ver\u00e3o de Samoa Ocidental", "WSDT"};
-        String YAKT[] = new String[] {"Fuso hor\u00e1rio de Yakutsk", "YAKT",
-                                      "Fuso hor\u00e1rio de ver\u00e3o de Yakutsk", "YAKST"};
-
-        return new Object[][] {
-            {"America/Los_Angeles", PST},
-            {"PST", PST},
-            {"America/Denver", MST},
-            {"MST", MST},
-            {"America/Phoenix", MST},
-            {"PNT", MST},
-            {"America/Chicago", CST},
-            {"CST", CST},
-            {"America/New_York", EST},
-            {"EST", EST},
-            {"America/Indianapolis", EST},
-            {"IET", EST},
-            {"Pacific/Honolulu", HST},
-            {"HST", HST},
-            {"America/Anchorage", AKST},
-            {"AST", AKST},
-            {"America/Halifax", AST},
-            {"America/Sitka", AKST},
-            {"America/St_Johns", NST},
-            {"CNT", NST},
-            {"Europe/Paris", CET},
-            {"ECT", CET},
-            {"GMT", GMT},
-            {"Africa/Casablanca", WET},
-            {"Asia/Jerusalem", ISRAEL},
-            {"Asia/Tokyo", JST},
-            {"JST", JST},
-            {"Europe/Bucharest", EET},
-            {"Asia/Shanghai", CTT},
-            {"CTT", CTT},
-            /* Don't change the order of the above zones
-             * to keep compatibility with the previous version.
-             */
-
-            {"ACT", DARWIN},
-            {"AET", EST_NSW},
-            {"AGT", AGT},
-            {"ART", EET},
-            {"Africa/Abidjan", GMT},
-            {"Africa/Accra", GHMT},
-            {"Africa/Addis_Ababa", EAT},
-            {"Africa/Algiers", CET},
-            {"Africa/Asmara", EAT},
-            {"Africa/Asmera", EAT},
-            {"Africa/Bamako", GMT},
-            {"Africa/Bangui", WAT},
-            {"Africa/Banjul", GMT},
-            {"Africa/Bissau", GMT},
-            {"Africa/Blantyre", CAT},
-            {"Africa/Brazzaville", WAT},
-            {"Africa/Bujumbura", CAT},
-            {"Africa/Cairo", EET},
-            {"Africa/Ceuta", CET},
-            {"Africa/Conakry", GMT},
-            {"Africa/Dakar", GMT},
-            {"Africa/Dar_es_Salaam", EAT},
-            {"Africa/Djibouti", EAT},
-            {"Africa/Douala", WAT},
-            {"Africa/El_Aaiun", WET},
-            {"Africa/Freetown", SLST},
-            {"Africa/Gaborone", CAT},
-            {"Africa/Harare", CAT},
-            {"Africa/Johannesburg", SAST},
-            {"Africa/Juba", EAT},
-            {"Africa/Kampala", EAT},
-            {"Africa/Khartoum", EAT},
-            {"Africa/Kigali", CAT},
-            {"Africa/Kinshasa", WAT},
-            {"Africa/Lagos", WAT},
-            {"Africa/Libreville", WAT},
-            {"Africa/Lome", GMT},
-            {"Africa/Luanda", WAT},
-            {"Africa/Lubumbashi", CAT},
-            {"Africa/Lusaka", CAT},
-            {"Africa/Malabo", WAT},
-            {"Africa/Maputo", CAT},
-            {"Africa/Maseru", SAST},
-            {"Africa/Mbabane", SAST},
-            {"Africa/Mogadishu", EAT},
-            {"Africa/Monrovia", GMT},
-            {"Africa/Nairobi", EAT},
-            {"Africa/Ndjamena", WAT},
-            {"Africa/Niamey", WAT},
-            {"Africa/Nouakchott", GMT},
-            {"Africa/Ouagadougou", GMT},
-            {"Africa/Porto-Novo", WAT},
-            {"Africa/Sao_Tome", GMT},
-            {"Africa/Timbuktu", GMT},
-            {"Africa/Tripoli", CET},
-            {"Africa/Tunis", CET},
-            {"Africa/Windhoek", WAT},
-            {"America/Adak", HAST},
-            {"America/Anguilla", AST},
-            {"America/Antigua", AST},
-            {"America/Araguaina", BRT},
-            {"America/Argentina/Buenos_Aires", AGT},
-            {"America/Argentina/Catamarca", AGT},
-            {"America/Argentina/ComodRivadavia", AGT},
-            {"America/Argentina/Cordoba", AGT},
-            {"America/Argentina/Jujuy", AGT},
-            {"America/Argentina/La_Rioja", AGT},
-            {"America/Argentina/Mendoza", AGT},
-            {"America/Argentina/Rio_Gallegos", AGT},
-            {"America/Argentina/Salta", AGT},
-            {"America/Argentina/San_Juan", AGT},
-            {"America/Argentina/San_Luis", WART},
-            {"America/Argentina/Tucuman", AGT},
-            {"America/Argentina/Ushuaia", AGT},
-            {"America/Aruba", AST},
-            {"America/Asuncion", new String[] {"Fuso hor\u00e1rio do Paraguai", "PYT",
-                                               "Fuso hor\u00e1rio de ver\u00e3o do Paraguai", "PYST"}},
-            {"America/Atikokan", EST},
-            {"America/Atka", HAST},
-            {"America/Bahia", BRT},
-            {"America/Bahia_Banderas", CST},
-            {"America/Barbados", AST},
-            {"America/Belem", BRT},
-            {"America/Belize", CST},
-            {"America/Blanc-Sablon", AST},
-            {"America/Boa_Vista", AMT},
-            {"America/Bogota", new String[] {"Fuso hor\u00e1rio da Col\u00f4mbia", "COT",
-                                             "Fuso hor\u00e1rio de ver\u00e3o da Col\u00f4mbia", "COST"}},
-            {"America/Boise", MST},
-            {"America/Buenos_Aires", AGT},
-            {"America/Cambridge_Bay", MST},
-            {"America/Campo_Grande", AMT},
-            {"America/Cancun", CST},
-            {"America/Caracas", new String[] {"Fuso hor\u00e1rio da Venezuela", "VET",
-                                              "Fuso hor\u00e1rio de ver\u00e3o da Venezuela", "VEST"}},
-            {"America/Catamarca", AGT},
-            {"America/Cayenne", new String[] {"Fuso hor\u00e1rio da Guiana Francesa", "GFT",
-                                              "Fuso hor\u00e1rio de ver\u00e3o da Guiana Francesa", "GFST"}},
-            {"America/Cayman", EST},
-            {"America/Chihuahua", MST},
-            {"America/Creston", MST},
-            {"America/Coral_Harbour", EST},
-            {"America/Cordoba", AGT},
-            {"America/Costa_Rica", CST},
-            {"America/Cuiaba", AMT},
-            {"America/Curacao", AST},
-            {"America/Danmarkshavn", GMT},
-            {"America/Dawson", PST},
-            {"America/Dawson_Creek", MST},
-            {"America/Detroit", EST},
-            {"America/Dominica", AST},
-            {"America/Edmonton", MST},
-            {"America/Eirunepe", AMT},
-            {"America/El_Salvador", CST},
-            {"America/Ensenada", PST},
-            {"America/Fort_Wayne", EST},
-            {"America/Fortaleza", BRT},
-            {"America/Glace_Bay", AST},
-            {"America/Godthab", new String[] {"Fuso hor\u00e1rio da Groenl\u00e2ndia Ocidental", "WGT",
-                                              "Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Ocidental", "WGST"}},
-            {"America/Goose_Bay", AST},
-            {"America/Grand_Turk", EST},
-            {"America/Grenada", AST},
-            {"America/Guadeloupe", AST},
-            {"America/Guatemala", CST},
-            {"America/Guayaquil", new String[] {"Fuso hor\u00e1rio do Equador", "ECT",
-                                                "Fuso hor\u00e1rio de ver\u00e3o do Equador", "ECST"}},
-            {"America/Guyana", new String[] {"Fuso hor\u00e1rio da Guiana", "GYT",
-                                             "Fuso hor\u00e1rio de ver\u00e3o da Guiana", "GYST"}},
-            {"America/Havana", CUBA},
-            {"America/Hermosillo", MST},
-            {"America/Indiana/Indianapolis", EST},
-            {"America/Indiana/Knox", CST},
-            {"America/Indiana/Marengo", EST},
-            {"America/Indiana/Petersburg", EST},
-            {"America/Indiana/Tell_City", CST},
-            {"America/Indiana/Vevay", EST},
-            {"America/Indiana/Vincennes", EST},
-            {"America/Indiana/Winamac", EST},
-            {"America/Inuvik", MST},
-            {"America/Iqaluit", EST},
-            {"America/Jamaica", EST},
-            {"America/Jujuy", AGT},
-            {"America/Juneau", AKST},
-            {"America/Kentucky/Louisville", EST},
-            {"America/Kentucky/Monticello", EST},
-            {"America/Knox_IN", CST},
-            {"America/Kralendijk", AST},
-            {"America/La_Paz", new String[] {"Fuso hor\u00e1rio da Bol\u00edvia", "BOT",
-                                             "Fuso hor\u00e1rio de ver\u00e3o da Bol\u00edvia", "BOST"}},
-            {"America/Lima", new String[] {"Fuso hor\u00e1rio do Peru", "PET",
-                                           "Fuso hor\u00e1rio de ver\u00e3o do Peru", "PEST"}},
-            {"America/Louisville", EST},
-            {"America/Lower_Princes", AST},
-            {"America/Maceio", BRT},
-            {"America/Managua", CST},
-            {"America/Manaus", AMT},
-            {"America/Marigot", AST},
-            {"America/Martinique", AST},
-            {"America/Matamoros", CST},
-            {"America/Mazatlan", MST},
-            {"America/Mendoza", AGT},
-            {"America/Menominee", CST},
-            {"America/Merida", CST},
-            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
-                                                 "Metlakatla Daylight Time", "MeDT"}},
-            {"America/Mexico_City", CST},
-            {"America/Miquelon", new String[] {"Fuso hor\u00e1rio padr\u00e3o de S\u00e3o Pedro e Miquelon", "PMST",
-                                               "Hor\u00e1rio de luz natural de S\u00e3o Pedro e Miquelon", "PMDT"}},
-            {"America/Moncton", AST},
-            {"America/Montevideo", new String[] {"Fuso hor\u00e1rio do Uruguai", "UYT",
-                                                 "Fuso hor\u00e1rio de ver\u00e3o do Uruguai", "UYST"}},
-            {"America/Monterrey", CST},
-            {"America/Montreal", EST},
-            {"America/Montserrat", AST},
-            {"America/Nassau", EST},
-            {"America/Nipigon", EST},
-            {"America/Nome", AKST},
-            {"America/Noronha", NORONHA},
-            {"America/North_Dakota/Beulah", CST},
-            {"America/North_Dakota/Center", CST},
-            {"America/North_Dakota/New_Salem", CST},
-            {"America/Ojinaga", MST},
-            {"America/Panama", EST},
-            {"America/Pangnirtung", EST},
-            {"America/Paramaribo", new String[] {"Fuso hor\u00e1rio do Suriname", "SRT",
-                                                 "Fuso hor\u00e1rio de ver\u00e3o do Suriname", "SRST"}},
-            {"America/Port-au-Prince", EST},
-            {"America/Port_of_Spain", AST},
-            {"America/Porto_Acre", AMT},
-            {"America/Porto_Velho", AMT},
-            {"America/Puerto_Rico", AST},
-            {"America/Rainy_River", CST},
-            {"America/Rankin_Inlet", CST},
-            {"America/Recife", BRT},
-            {"America/Regina", CST},
-            {"America/Resolute", CST},
-            {"America/Rio_Branco", AMT},
-            {"America/Rosario", AGT},
-            {"America/Santa_Isabel", PST},
-            {"America/Santarem", BRT},
-            {"America/Santiago", CLT},
-            {"America/Santo_Domingo", AST},
-            {"America/Sao_Paulo", BRT},
-            {"America/Scoresbysund", EGT},
-            {"America/Shiprock", MST},
-            {"America/St_Barthelemy", AST},
-            {"America/St_Kitts", AST},
-            {"America/St_Lucia", AST},
-            {"America/St_Thomas", AST},
-            {"America/St_Vincent", AST},
-            {"America/Swift_Current", CST},
-            {"America/Tegucigalpa", CST},
-            {"America/Thule", AST},
-            {"America/Thunder_Bay", EST},
-            {"America/Tijuana", PST},
-            {"America/Toronto", EST},
-            {"America/Tortola", AST},
-            {"America/Vancouver", PST},
-            {"America/Virgin", AST},
-            {"America/Whitehorse", PST},
-            {"America/Winnipeg", CST},
-            {"America/Yakutat", AKST},
-            {"America/Yellowknife", MST},
-            {"Antarctica/Casey", WST_AUS},
-            {"Antarctica/Davis", new String[] {"Fuso hor\u00e1rio de Davis", "DAVT",
-                                               "Fuso hor\u00e1rio de ver\u00e3o de Davis", "DAVST"}},
-            {"Antarctica/DumontDUrville", new String[] {"Fuso hor\u00e1rio de Dumont-d'Urville", "DDUT",
-                                                        "Fuso hor\u00e1rio de ver\u00e3o de Dumont-d'Urville", "DDUST"}},
-            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
-                                                   "Macquarie Island Summer Time", "MIST"}},
-            {"Antarctica/Mawson", new String[] {"Fuso hor\u00e1rio de Mawson", "MAWT",
-                                                "Fuso hor\u00e1rio de ver\u00e3o de Mawson", "MAWST"}},
-            {"Antarctica/McMurdo", NZST},
-            {"Antarctica/Palmer", CLT},
-            {"Antarctica/Rothera", new String[] {"Fuso hor\u00e1rio de Rothera", "ROTT",
-                                                 "Fuso hor\u00e1rio de ver\u00e3o de Rothera", "ROTST"}},
-            {"Antarctica/South_Pole", NZST},
-            {"Antarctica/Syowa", new String[] {"Fuso hor\u00e1rio de Syowa", "SYOT",
-                                               "Fuso hor\u00e1rio de ver\u00e3o de Syowa", "SYOST"}},
-            {"Antarctica/Vostok", new String[] {"Fuso hor\u00e1rio de Vostok", "VOST",
-                                                "Fuso hor\u00e1rio de ver\u00e3o de Vostok", "VOSST"}},
-            {"Arctic/Longyearbyen", CET},
-            {"Asia/Aden", ARAST},
-            {"Asia/Almaty", new String[] {"Fuso hor\u00e1rio de Alma-Ata", "ALMT",
-                                          "Fuso hor\u00e1rio de ver\u00e3o de Alma-Ata", "ALMST"}},
-            {"Asia/Amman", EET},
-            {"Asia/Anadyr", new String[] {"Fuso hor\u00e1rio de Anadyr", "ANAT",
-                                          "Fuso hor\u00e1rio de ver\u00e3o de Anadyr", "ANAST"}},
-            {"Asia/Aqtau", new String[] {"Fuso hor\u00e1rio de Aqtau", "AQTT",
-                                         "Fuso hor\u00e1rio de ver\u00e3o de Aqtau", "AQTST"}},
-            {"Asia/Aqtobe", new String[] {"Fuso hor\u00e1rio de Aqtobe", "AQTT",
-                                          "Fuso hor\u00e1rio de ver\u00e3o de Aqtobe", "AQTST"}},
-            {"Asia/Ashgabat", TMT},
-            {"Asia/Ashkhabad", TMT},
-            {"Asia/Baghdad", ARAST},
-            {"Asia/Bahrain", ARAST},
-            {"Asia/Baku", new String[] {"Fuso hor\u00e1rio do Azerbaij\u00e3o", "AZT",
-                                        "Fuso hor\u00e1rio de ver\u00e3o do Azerbaij\u00e3o", "AZST"}},
-            {"Asia/Bangkok", ICT},
-            {"Asia/Beirut", EET},
-            {"Asia/Bishkek", new String[] {"Fuso hor\u00e1rio do Quirguist\u00e3o", "KGT",
-                                           "Fuso hor\u00e1rio de ver\u00e3o do Quirguist\u00e3o", "KGST"}},
-            {"Asia/Brunei", new String[] {"Fuso hor\u00e1rio de Brunei", "BNT",
-                                          "Fuso hor\u00e1rio de ver\u00e3o de Brunei", "BNST"}},
-            {"Asia/Calcutta", IST},
-            {"Asia/Choibalsan", new String[] {"Fuso hor\u00e1rio de Choibalsan", "CHOT",
-                                              "Fuso hor\u00e1rio de ver\u00e3o de Choibalsan", "CHOST"}},
-            {"Asia/Chongqing", CTT},
-            {"Asia/Chungking", CTT},
-            {"Asia/Colombo", IST},
-            {"Asia/Dacca", BDT},
-            {"Asia/Dhaka", BDT},
-            {"Asia/Dili", new String[] {"Fuso hor\u00e1rio do Timor-Leste", "TLT",
-                                        "Fuso hor\u00e1rio de ver\u00e3o do Timor-Leste", "TLST"}},
-            {"Asia/Damascus", EET},
-            {"Asia/Dubai", GST},
-            {"Asia/Dushanbe", new String[] {"Fuso hor\u00e1rio do Tadjiquist\u00e3o", "TJT",
-                                            "Fuso hor\u00e1rio de ver\u00e3o do Tadjiquist\u00e3o", "TJST"}},
-            {"Asia/Gaza", EET},
-            {"Asia/Harbin", CTT},
-            {"Asia/Hebron", EET},
-            {"Asia/Ho_Chi_Minh", ICT},
-            {"Asia/Hong_Kong", HKT},
-            {"Asia/Hovd", new String[] {"Fuso hor\u00e1rio de Hovd", "HOVT",
-                                        "Fuso hor\u00e1rio de ver\u00e3o de Hovd", "HOVST"}},
-            {"Asia/Irkutsk", new String[] {"Fuso hor\u00e1rio de Irkutsk", "IRKT",
-                                           "Fuso hor\u00e1rio de ver\u00e3o de Irkutsk", "IRKST"}},
-            {"Asia/Istanbul", EET},
-            {"Asia/Jakarta", WIT},
-            {"Asia/Jayapura", new String[] {"Fuso hor\u00e1rio da Indon\u00e9sia Oriental", "EIT",
-                                            "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Oriental", "EIST"}},
-            {"Asia/Kabul", new String[] {"Fuso hor\u00e1rio do Afeganist\u00e3o", "AFT",
-                                         "Fuso hor\u00e1rio de ver\u00e3o do Afeganist\u00e3o", "AFST"}},
-            {"Asia/Kamchatka", new String[] {"Fuso hor\u00e1rio de Petropavlovsk-Kamchatski", "PETT",
-                                             "Fuso hor\u00e1rio de ver\u00e3o de Petropavlovsk-Kamchatski", "PETST"}},
-            {"Asia/Karachi", PKT},
-            {"Asia/Kashgar", CTT},
-            {"Asia/Kathmandu", NPT},
-            {"Asia/Katmandu", NPT},
-            {"Asia/Khandyga", YAKT},
-            {"Asia/Kolkata", IST},
-            {"Asia/Krasnoyarsk", new String[] {"Fuso hor\u00e1rio de Krasnoyarsk", "KRAT",
-                                               "Fuso hor\u00e1rio de ver\u00e3o de Krasnoyarsk", "KRAST"}},
-            {"Asia/Kuala_Lumpur", MYT},
-            {"Asia/Kuching", MYT},
-            {"Asia/Kuwait", ARAST},
-            {"Asia/Macao", CTT},
-            {"Asia/Macau", CTT},
-            {"Asia/Magadan", new String[] {"Fuso hor\u00e1rio de Magadan", "MAGT",
-                                           "Fuso hor\u00e1rio de ver\u00e3o de Magadan", "MAGST"}},
-            {"Asia/Makassar", CIT},
-            {"Asia/Manila", new String[] {"Fuso hor\u00e1rio das Filipinas", "PHT",
-                                          "Fuso hor\u00e1rio de ver\u00e3o das Filipinas", "PHST"}},
-            {"Asia/Muscat", GST},
-            {"Asia/Nicosia", EET},
-            {"Asia/Novokuznetsk", NOVT},
-            {"Asia/Novosibirsk", NOVT},
-            {"Asia/Oral", new String[] {"Fuso hor\u00e1rio de Uralsk", "ORAT",
-                                        "Fuso hor\u00e1rio de ver\u00e3o de Uralsk", "ORAST"}},
-            {"Asia/Omsk", new String[] {"Fuso hor\u00e1rio de Omsk", "OMST",
-                                        "Fuso hor\u00e1rio de ver\u00e3o de Omsk", "OMSST"}},
-            {"Asia/Phnom_Penh", ICT},
-            {"Asia/Pontianak", WIT},
-            {"Asia/Pyongyang", KST},
-            {"Asia/Qatar", ARAST},
-            {"Asia/Qyzylorda", new String[] {"Fuso hor\u00e1rio de Kizil-Orda", "QYZT",
-                                             "Fuso hor\u00e1rio de ver\u00e3o de Kizil-Orda", "QYZST"}},
-            {"Asia/Rangoon", new String[] {"Fuso hor\u00e1rio de Mianmar", "MMT",
-                                           "Fuso hor\u00e1rio de ver\u00e3o de Mianmar", "MMST"}},
-            {"Asia/Riyadh", ARAST},
-            {"Asia/Saigon", ICT},
-            {"Asia/Sakhalin", new String[] {"Fuso hor\u00e1rio de Sakhalina", "SAKT",
-                                            "Fuso hor\u00e1rio de ver\u00e3o de Sakhalina", "SAKST"}},
-            {"Asia/Samarkand", UZT},
-            {"Asia/Seoul", KST},
-            {"Asia/Singapore", SGT},
-            {"Asia/Taipei", CTT},
-            {"Asia/Tel_Aviv", ISRAEL},
-            {"Asia/Tashkent", UZT},
-            {"Asia/Tbilisi", new String[] {"Fuso hor\u00e1rio da Ge\u00f3rgia", "GET",
-                                           "Fuso hor\u00e1rio de ver\u00e3o da Ge\u00f3rgia", "GEST"}},
-            {"Asia/Tehran", IRT},
-            {"Asia/Thimbu", BTT},
-            {"Asia/Thimphu", BTT},
-            {"Asia/Ujung_Pandang", CIT},
-            {"Asia/Ulaanbaatar", ULAT},
-            {"Asia/Ulan_Bator", ULAT},
-            {"Asia/Urumqi", CTT},
-            {"Asia/Ust-Nera", VLAT},
-            {"Asia/Vientiane", ICT},
-            {"Asia/Vladivostok", VLAT},
-            {"Asia/Yakutsk", YAKT},
-            {"Asia/Yekaterinburg", new String[] {"Fuso hor\u00e1rio de Yekaterinburgo", "YEKT",
-                                                 "Fuso hor\u00e1rio de ver\u00e3o de Yekaterinburgo", "YEKST"}},
-            {"Asia/Yerevan", ARMT},
-            {"Atlantic/Azores", new String[] {"Fuso hor\u00e1rio das A\u00e7ores", "AZOT",
-                                              "Fuso hor\u00e1rio de ver\u00e3o das A\u00e7ores", "AZOST"}},
-            {"Atlantic/Bermuda", AST},
-            {"Atlantic/Canary", WET},
-            {"Atlantic/Cape_Verde", new String[] {"Fuso hor\u00e1rio de Cabo Verde", "CVT",
-                                                  "Fuso hor\u00e1rio de ver\u00e3o de Cabo Verde", "CVST"}},
-            {"Atlantic/Faeroe", WET},
-            {"Atlantic/Faroe", WET},
-            {"Atlantic/Jan_Mayen", CET},
-            {"Atlantic/Madeira", WET},
-            {"Atlantic/Reykjavik", GMT},
-            {"Atlantic/South_Georgia", new String[] {"Fuso hor\u00e1rio padr\u00e3o da Ge\u00f3rgia do Sul", "GST",
-                                                     "Hor\u00e1rio de luz natural da Ge\u00f3rgia do Sul", "GDT"}},
-            {"Atlantic/St_Helena", GMT},
-            {"Atlantic/Stanley", new String[] {"Fuso hor\u00e1rio das Ilhas Falkland", "FKT",
-                                               "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Falkland", "FKST"}},
-            {"Australia/ACT", EST_NSW},
-            {"Australia/Adelaide", ADELAIDE},
-            {"Australia/Brisbane", BRISBANE},
-            {"Australia/Broken_Hill", BROKEN_HILL},
-            {"Australia/Canberra", EST_NSW},
-            {"Australia/Currie", EST_NSW},
-            {"Australia/Darwin", DARWIN},
-            {"Australia/Eucla", new String[] {"Fuso hor\u00e1rio ocidental central (Austr\u00e1lia)", "CWST",
-                                              "Fuso hor\u00e1rio de ver\u00e3o ocidental central (Austr\u00e1lia)", "CWST"}},
-            {"Australia/Hobart", TASMANIA},
-            {"Australia/LHI", LORD_HOWE},
-            {"Australia/Lindeman", BRISBANE},
-            {"Australia/Lord_Howe", LORD_HOWE},
-            {"Australia/Melbourne", VICTORIA},
-            {"Australia/North", DARWIN},
-            {"Australia/NSW", EST_NSW},
-            {"Australia/Perth", WST_AUS},
-            {"Australia/Queensland", BRISBANE},
-            {"Australia/South", ADELAIDE},
-            {"Australia/Sydney", EST_NSW},
-            {"Australia/Tasmania", TASMANIA},
-            {"Australia/Victoria", VICTORIA},
-            {"Australia/West", WST_AUS},
-            {"Australia/Yancowinna", BROKEN_HILL},
-            {"BET", BRT},
-            {"BST", BDT},
-            {"Brazil/Acre", AMT},
-            {"Brazil/DeNoronha", NORONHA},
-            {"Brazil/East", BRT},
-            {"Brazil/West", AMT},
-            {"Canada/Atlantic", AST},
-            {"Canada/Central", CST},
-            {"Canada/East-Saskatchewan", CST},
-            {"Canada/Eastern", EST},
-            {"Canada/Mountain", MST},
-            {"Canada/Newfoundland", NST},
-            {"Canada/Pacific", PST},
-            {"Canada/Yukon", PST},
-            {"Canada/Saskatchewan", CST},
-            {"CAT", CAT},
-            {"CET", CET},
-            {"Chile/Continental", CLT},
-            {"Chile/EasterIsland", EASTER},
-            {"CST6CDT", CST},
-            {"Cuba", CUBA},
-            {"EAT", EAT},
-            {"EET", EET},
-            {"Egypt", EET},
-            {"Eire", DUBLIN},
-            {"EST5EDT", EST},
-            {"Etc/Greenwich", GMT},
-            {"Etc/UCT", UTC},
-            {"Etc/Universal", UTC},
-            {"Etc/UTC", UTC},
-            {"Etc/Zulu", UTC},
-            {"Europe/Amsterdam", CET},
-            {"Europe/Andorra", CET},
-            {"Europe/Athens", EET},
-            {"Europe/Belfast", GMTBST},
-            {"Europe/Belgrade", CET},
-            {"Europe/Berlin", CET},
-            {"Europe/Bratislava", CET},
-            {"Europe/Brussels", CET},
-            {"Europe/Budapest", CET},
-            {"Europe/Busingen", CET},
-            {"Europe/Chisinau", EET},
-            {"Europe/Copenhagen", CET},
-            {"Europe/Dublin", DUBLIN},
-            {"Europe/Gibraltar", CET},
-            {"Europe/Guernsey", GMTBST},
-            {"Europe/Helsinki", EET},
-            {"Europe/Isle_of_Man", GMTBST},
-            {"Europe/Istanbul", EET},
-            {"Europe/Jersey", GMTBST},
-            {"Europe/Kaliningrad", FET},
-            {"Europe/Kiev", EET},
-            {"Europe/Lisbon", WET},
-            {"Europe/Ljubljana", CET},
-            {"Europe/London", GMTBST},
-            {"Europe/Luxembourg", CET},
-            {"Europe/Madrid", CET},
-            {"Europe/Malta", CET},
-            {"Europe/Mariehamn", EET},
-            {"Europe/Minsk", FET},
-            {"Europe/Monaco", CET},
-            {"Europe/Moscow", MSK},
-            {"Europe/Nicosia", EET},
-            {"Europe/Oslo", CET},
-            {"Europe/Podgorica", CET},
-            {"Europe/Prague", CET},
-            {"Europe/Riga", EET},
-            {"Europe/Rome", CET},
-            {"Europe/Samara", new String[] {"Fuso hor\u00e1rio de Samara", "SAMT",
-                                            "Fuso hor\u00e1rio de ver\u00e3o de Samara", "SAMST"}},
-            {"Europe/San_Marino", CET},
-            {"Europe/Sarajevo", CET},
-            {"Europe/Simferopol", EET},
-            {"Europe/Skopje", CET},
-            {"Europe/Sofia", EET},
-            {"Europe/Stockholm", CET},
-            {"Europe/Tallinn", EET},
-            {"Europe/Tirane", CET},
-            {"Europe/Tiraspol", EET},
-            {"Europe/Uzhgorod", EET},
-            {"Europe/Vaduz", CET},
-            {"Europe/Vatican", CET},
-            {"Europe/Vienna", CET},
-            {"Europe/Vilnius", EET},
-            {"Europe/Volgograd", new String[] {"Fuso hor\u00e1rio de Volgogrado", "VOLT",
-                                               "Fuso hor\u00e1rio de ver\u00e3o de Volgogrado", "VOLST"}},
-            {"Europe/Warsaw", CET},
-            {"Europe/Zagreb", CET},
-            {"Europe/Zaporozhye", EET},
-            {"Europe/Zurich", CET},
-            {"GB", GMTBST},
-            {"GB-Eire", GMTBST},
-            {"Greenwich", GMT},
-            {"Hongkong", HKT},
-            {"Iceland", GMT},
-            {"Iran", IRT},
-            {"IST", IST},
-            {"Indian/Antananarivo", EAT},
-            {"Indian/Chagos", new String[] {"Fuso hor\u00e1rio dos territ\u00f3rios do Oceano \u00cdndico", "IOT",
-                                            "Fuso hor\u00e1rio de ver\u00e3o dos territ\u00f3rios do Oceano \u00cdndico", "IOST"}},
-            {"Indian/Christmas", new String[] {"Fuso hor\u00e1rio das Ilhas Christmas", "CXT",
-                                               "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Christmas", "CXST"}},
-            {"Indian/Cocos", new String[] {"Fuso hor\u00e1rio das Ilhas Cocos", "CCT",
-                                           "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Cocos", "CCST"}},
-            {"Indian/Comoro", EAT},
-            {"Indian/Kerguelen", new String[] {"Fuso hor\u00e1rio das Terras Austrais e Ant\u00e1rticas Francesas", "TFT",
-                                               "Fuso hor\u00e1rio de ver\u00e3o das Terras Austrais e Ant\u00e1rticas Francesas", "TFST"}},
-            {"Indian/Mahe", new String[] {"Fuso hor\u00e1rio das Seychelles", "SCT",
-                                          "Fuso hor\u00e1rio de ver\u00e3o das Seychelles", "SCST"}},
-            {"Indian/Maldives", new String[] {"Fuso hor\u00e1rio das Maldivas", "MVT",
-                                              "Fuso hor\u00e1rio de ver\u00e3o das Maldivas", "MVST"}},
-            {"Indian/Mauritius", new String[] {"Fuso hor\u00e1rio das Ilhas Maur\u00edcio", "MUT",
-                                               "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Maur\u00edcio", "MUST"}},
-            {"Indian/Mayotte", EAT},
-            {"Indian/Reunion", new String[] {"Fuso hor\u00e1rio de Reuni\u00e3o", "RET",
-                                             "Fuso hor\u00e1rio de ver\u00e3o de Reuni\u00e3o", "REST"}},
-            {"Israel", ISRAEL},
-            {"Jamaica", EST},
-            {"Japan", JST},
-            {"Kwajalein", MHT},
-            {"Libya", CET},
-            {"MET", new String[] {"Fuso hor\u00e1rio da Europa M\u00e9dia", "MET",
-                                  "Fuso hor\u00e1rio de ver\u00e3o da Europa M\u00e9dia", "MEST"}},
-            {"Mexico/BajaNorte", PST},
-            {"Mexico/BajaSur", MST},
-            {"Mexico/General", CST},
-            {"MIT", WST_SAMOA},
-            {"MST7MDT", MST},
-            {"Navajo", MST},
-            {"NET", ARMT},
-            {"NST", NZST},
-            {"NZ", NZST},
-            {"NZ-CHAT", CHAST},
-            {"PLT", PKT},
-            {"Portugal", WET},
-            {"PRT", AST},
-            {"Pacific/Apia", WST_SAMOA},
-            {"Pacific/Auckland", NZST},
-            {"Pacific/Chatham", CHAST},
-            {"Pacific/Chuuk", TRUT},
-            {"Pacific/Easter", EASTER},
-            {"Pacific/Efate", new String[] {"Fuso hor\u00e1rio de Vanuatu", "VUT",
-                                            "Fuso hor\u00e1rio de ver\u00e3o de Vanuatu", "VUST"}},
-            {"Pacific/Enderbury", new String[] {"Fuso hor\u00e1rio das Ilhas F\u00e9nix", "PHOT",
-                                                "Fuso hor\u00e1rio de ver\u00e3o das Ilhas F\u00e9nix", "PHOST"}},
-            {"Pacific/Fakaofo", new String[] {"Fuso hor\u00e1rio de Tokelau", "TKT",
-                                              "Fuso hor\u00e1rio de ver\u00e3o de Tokelau", "TKST"}},
-            {"Pacific/Fiji", new String[] {"Fuso hor\u00e1rio de Fiji", "FJT",
-                                           "Fuso hor\u00e1rio de ver\u00e3o de Fiji", "FJST"}},
-            {"Pacific/Funafuti", new String[] {"Fuso hor\u00e1rio de Tuvalu", "TVT",
-                                               "Fuso hor\u00e1rio de ver\u00e3o de Tuvalu", "TVST"}},
-            {"Pacific/Galapagos", new String[] {"Fuso hor\u00e1rio das Ilhas Gal\u00e1pagos", "GALT",
-                                                "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Gal\u00e1pagos", "GALST"}},
-            {"Pacific/Gambier", GAMBIER},
-            {"Pacific/Guadalcanal", SBT},
-            {"Pacific/Guam", ChST},
-            {"Pacific/Johnston", HST},
-            {"Pacific/Kiritimati", new String[] {"Fuso hor\u00e1rio das Esp\u00f3rades Equatoriais", "LINT",
-                                                 "Fuso hor\u00e1rio de ver\u00e3o das Esp\u00f3rades Equatoriais", "LINST"}},
-            {"Pacific/Kosrae", new String[] {"Fuso hor\u00e1rio de Kosrae", "KOST",
-                                             "Fuso hor\u00e1rio de ver\u00e3o de Kosrae", "KOSST"}},
-            {"Pacific/Kwajalein", MHT},
-            {"Pacific/Majuro", MHT},
-            {"Pacific/Marquesas", new String[] {"Fuso hor\u00e1rio das Ilhas Marquesas", "MART",
-                                                "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Marquesas", "MARST"}},
-            {"Pacific/Midway", SAMOA},
-            {"Pacific/Nauru", new String[] {"Fuso hor\u00e1rio de Nauru", "NRT",
-                                            "Fuso hor\u00e1rio de ver\u00e3o de Nauru", "NRST"}},
-            {"Pacific/Niue", new String[] {"Fuso hor\u00e1rio de Niue", "NUT",
-                                           "Fuso hor\u00e1rio de ver\u00e3o de Niue", "NUST"}},
-            {"Pacific/Norfolk", new String[] {"Fuso hor\u00e1rio da Ilha de Norfolk", "NFT",
-                                              "Fuso hor\u00e1rio de ver\u00e3o da Ilha de Norfolk", "NFST"}},
-            {"Pacific/Noumea", new String[] {"Fuso hor\u00e1rio da Nova Caled\u00f4nia", "NCT",
-                                             "Fuso hor\u00e1rio de ver\u00e3o da Nova Caled\u00f4nia", "NCST"}},
-            {"Pacific/Pago_Pago", SAMOA},
-            {"Pacific/Palau", new String[] {"Fuso hor\u00e1rio de Palau", "PWT",
-                                            "Fuso hor\u00e1rio de ver\u00e3o de Palau", "PWST"}},
-            {"Pacific/Pitcairn", PITCAIRN},
-            {"Pacific/Pohnpei", PONT},
-            {"Pacific/Ponape", PONT},
-            {"Pacific/Port_Moresby", new String[] {"Fuso hor\u00e1rio de Papua-Nova Guin\u00e9", "PGT",
-                                                   "Fuso hor\u00e1rio de ver\u00e3o de Papua-Nova Guin\u00e9", "PGST"}},
-            {"Pacific/Rarotonga", new String[] {"Fuso hor\u00e1rio das Ilhas Cook", "CKT",
-                                                "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Cook", "CKHST"}},
-            {"Pacific/Saipan", ChST},
-            {"Pacific/Samoa", SAMOA},
-            {"Pacific/Tahiti", new String[] {"Fuso hor\u00e1rio do Taiti", "TAHT",
-                                             "Fuso hor\u00e1rio de ver\u00e3o do Taiti", "TAHST"}},
-            {"Pacific/Tarawa", new String[] {"Fuso hor\u00e1rio das Ilhas Gilbert", "GILT",
-                                             "Fuso hor\u00e1rio de ver\u00e3o das Ilhas Gilbert", "GILST"}},
-            {"Pacific/Tongatapu", new String[] {"Fuso hor\u00e1rio de Tonga", "TOT",
-                                                "Fuso hor\u00e1rio de ver\u00e3o de Tonga", "TOST"}},
-            {"Pacific/Truk", TRUT},
-            {"Pacific/Wake", new String[] {"Fuso hor\u00e1rio de Wake", "WAKT",
-                                           "Fuso hor\u00e1rio de ver\u00e3o de Wake", "WAKST"}},
-            {"Pacific/Wallis", new String[] {"Fuso hor\u00e1rio de Wallis e Futuna", "WFT",
-                                             "Fuso hor\u00e1rio de ver\u00e3o de Wallis e Futuna", "WFST"}},
-            {"Pacific/Yap", TRUT},
-            {"Poland", CET},
-            {"PRC", CTT},
-            {"PST8PDT", PST},
-            {"ROK", KST},
-            {"Singapore", SGT},
-            {"SST", SBT},
-            {"SystemV/AST4", AST},
-            {"SystemV/AST4ADT", AST},
-            {"SystemV/CST6", CST},
-            {"SystemV/CST6CDT", CST},
-            {"SystemV/EST5", EST},
-            {"SystemV/EST5EDT", EST},
-            {"SystemV/HST10", HST},
-            {"SystemV/MST7", MST},
-            {"SystemV/MST7MDT", MST},
-            {"SystemV/PST8", PST},
-            {"SystemV/PST8PDT", PST},
-            {"SystemV/YST9", AKST},
-            {"SystemV/YST9YDT", AKST},
-            {"Turkey", EET},
-            {"UCT", UTC},
-            {"Universal", UTC},
-            {"US/Alaska", AKST},
-            {"US/Aleutian", HAST},
-            {"US/Arizona", MST},
-            {"US/Central", CST},
-            {"US/Eastern", EST},
-            {"US/Hawaii", HST},
-            {"US/Indiana-Starke", CST},
-            {"US/East-Indiana", EST},
-            {"US/Michigan", EST},
-            {"US/Mountain", MST},
-            {"US/Pacific", PST},
-            {"US/Pacific-New", PST},
-            {"US/Samoa", SAMOA},
-            {"UTC", UTC},
-            {"VST", ICT},
-            {"W-SU", MSK},
-            {"WET", WET},
-            {"Zulu", UTC},
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_sv.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames_sv.java
deleted file mode 100755
index 8ccbd37..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_sv.java
+++ /dev/null
@@ -1,876 +0,0 @@
-/*
- * Copyright (c) 1997, 2011, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-public final class TimeZoneNames_sv extends TimeZoneNamesBundle {
-
-    protected final Object[][] getContents() {
-        String ACT[] = new String[] {"Acre, normaltid", "ACT",
-                                     "Acre, sommartid", "ACST"};
-        String ADELAIDE[] = new String[] {"Central normaltid (S\u00f6dra Australien)", "CST",
-                                          "Central sommartid (S\u00f6dra Australien)", "CST"};
-        String AGT[] = new String[] {"Argentina, normaltid", "ART",
-                                     "Argentina, sommartid", "ARST"};
-        String AKST[] = new String[] {"Alaska, normaltid", "AKST",
-                                      "Alaska, sommartid", "AKDT"};
-        String AMT[] = new String[] {"Amazonas, normaltid", "AMT",
-                                     "Amazonas, sommartid", "AMST"};
-        String ARAST[] = new String[] {"Arabisk normaltid", "AST",
-                                       "Arabisk sommartid", "ADT"};
-        String ARMT[] = new String[] {"Armenien, normaltid", "AMT",
-                                      "Armenien, sommartid", "AMST"};
-        String AST[] = new String[] {"Atlantisk normaltid", "AST",
-                                     "Atlantisk sommartid", "ADT"};
-        String BDT[] = new String[] {"Bangladesh, normaltid", "BDT",
-                                     "Bangladesh, sommartid", "BDST"};
-        String BRISBANE[] = new String[] {"\u00d6stlig normaltid (Queensland)", "EST",
-                                          "\u00d6stlig sommartid (Queensland)", "EST"};
-        String BROKEN_HILL[] = new String[] {"Central normaltid (S\u00f6dra Australien/Nya Sydwales)", "CST",
-                                             "Central sommartid (S\u00f6dra Australien/Nya Sydwales)", "CST"};
-        String BRT[] = new String[] {"Brasilien, normaltid", "BRT",
-                                     "Brasilien, sommartid", "BRST"};
-        String BTT[] = new String[] {"Bhutan, normaltid", "BTT",
-                                     "Bhutan, sommartid", "BTST"};
-        String CAT[] = new String[] {"Centralafrikansk tid", "CAT",
-                                     "Centralafrikansk sommartid", "CAST"};
-        String CET[] = new String[] {"Centraleuropeisk tid", "CET",
-                                     "Centraleuropeisk sommartid", "CEST"};
-        String CHAST[] = new String[] {"Chatham, normaltid", "CHAST",
-                                       "Chatham, sommartid", "CHADT"};
-        String ChST[] = new String[] {"Chamorro, normaltid", "ChST",
-                                      "Chamorro, sommartid", "ChDT"};
-        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
-                                      "Chuuk Summer Time", "CHUST"};
-        String CIT[] = new String[] {"Centralindonesisk tid", "CIT",
-                                     "Centralindonesisk sommartid", "CIST"};
-        String CLT[] = new String[] {"Chile, normaltid", "CLT",
-                                     "Chile, sommartid", "CLST"};
-        String CST[] = new String[] {"Central normaltid", "CST",
-                                     "Central sommartid", "CDT"};
-        String CTT[] = new String[] {"Kina, normaltid", "CST",
-                                     "Kina, sommartid", "CDT"};
-        String CUBA[] = new String[] {"Kuba, normaltid", "CST",
-                                      "Kuba, sommartid", "CDT"};
-        String DARWIN[] = new String[] {"Central normaltid (Nordterritoriet)", "CST",
-                                        "Central sommartid (Nordterritoriet)", "CST"};
-        String DUBLIN[] = new String[] {"Greenwichtid", "GMT",
-                                        "Irland, sommartid", "IST"};
-        String EAT[] = new String[] {"\u00d6stafrikansk tid", "EAT",
-                                     "\u00d6stafrikansk sommartid", "EAST"};
-        String EASTER[] = new String[] {"P\u00e5sk\u00f6n, normaltid", "EAST",
-                                        "P\u00e5sk\u00f6n, sommartid", "EASST"};
-        String EET[] = new String[] {"\u00d6steuropeisk tid", "EET",
-                                     "\u00d6steuropeisk sommartid", "EEST"};
-        String EGT[] = new String[] {"\u00d6stgr\u00f6nl\u00e4ndsk tid", "EGT",
-                                     "\u00d6stgr\u00f6nl\u00e4ndsk sommartid", "EGST"};
-        String EST[] = new String[] {"Eastern, normaltid", "EST",
-                                     "Eastern, sommartid", "EDT"};
-        String EST_NSW[] = new String[] {"Eastern, normaltid (Nya Sydwales)", "EST",
-                                         "Eastern, sommartid (Nya Sydwales)", "EST"};
-        String FET[] = new String[] {"Further-eastern European Time", "FET",
-                                     "Further-eastern European Summer Time", "FEST"};
-        String GHMT[] = new String[] {"Ghana, normaltid", "GMT",
-                                      "Ghana, sommartid", "GHST"};
-        String GAMBIER[] =  new String[] {"Gambier, normaltid", "GAMT",
-                                          "Gambier, sommartid", "GAMST"};
-        String GMT[] = new String[] {"Greenwichtid", "GMT",
-                                     "Greenwichtid", "GMT"};
-        String GMTBST[] = new String[] {"Greenwichtid", "GMT",
-                                        "Brittisk sommartid", "BST"};
-        String GST[] = new String[] {"Gulf-normaltid", "GST",
-                                     "Gulf-sommartid", "GDT"};
-        String HAST[] = new String[] {"Hawaii-Aleuterna, normaltid", "HAST",
-                                      "Hawaii-Aleuterna, sommartid", "HADT"};
-        String HKT[] =  new String[] {"Hong Kong, normaltid", "HKT",
-                                      "Hong Kong, sommartid", "HKST"};
-        String HST[] = new String[] {"Hawaii, normaltid", "HST",
-                                     "Hawaii, sommartid", "HDT"};
-        String ICT[] = new String[] {"Indokinesisk tid", "ICT",
-                                     "Indokinesisk sommartid", "ICST"};
-        String IRT[] = new String[] {"Iran, normaltid", "IRST",
-                                     "Iran, sommartid", "IRDT"};
-        String ISRAEL[] = new String[] {"Israel, normaltid", "IST",
-                                        "Israel, sommartid", "IDT"};
-        String IST[] = new String[] {"Indien, normaltid", "IST",
-                                     "Indien, sommartid", "IDT"};
-        String JST[] = new String[] {"Japan, normaltid", "JST",
-                                     "Japan, sommartid", "JDT"};
-        String KST[] = new String[] {"Korea, normaltid", "KST",
-                                     "Korea, sommartid", "KDT"};
-        String LORD_HOWE[] = new String[] {"Lord Howe, normaltid", "LHST",
-                                           "Lord Howe, sommartid", "LHST"};
-        String MHT[] = new String[] {"Marshall\u00f6arna, normaltid", "MHT",
-                                     "Marshall\u00f6arna, sommartid", "MHST"};
-        String MSK[] = new String[] {"Moskva, normaltid", "MSK",
-                                     "Moskva, sommartid", "MSD"};
-        String MST[] = new String[] {"Mountain, normaltid", "MST",
-                                     "Mountain, sommartid", "MDT"};
-        String MYT[] = new String[] {"Malaysia, normaltid", "MYT",
-                                     "Malaysia, sommartid", "MYST"};
-        String NORONHA[] = new String[] {"Fernando de Noronha, normaltid", "FNT",
-                                         "Fernando de Noronha, sommartid", "FNST"};
-        String NOVT[] = new String[] {"Novosibirsk, normaltid", "NOVT",
-                                      "Novosibirsk, sommartid", "NOVST"};
-        String NPT[] = new String[] {"Nepal, normaltid", "NPT",
-                                     "Nepal, sommartid", "NPST"};
-        String NST[] = new String[] {"Newfoundland, normaltid", "NST",
-                                     "Newfoundland, sommartid", "NDT"};
-        String NZST[] = new String[] {"Nya Zeeland, normaltid", "NZST",
-                                      "Nya Zeeland, sommartid", "NZDT"};
-        String PITCAIRN[] = new String[] {"Pitcairn, normaltid", "PST",
-                                          "Pitcairn, sommartid", "PDT"};
-        String PKT[] = new String[] {"Pakistan, normaltid", "PKT",
-                                     "Pakistan, sommartid", "PKST"};
-        String PONT[] = new String[] {"Pohnpei Time", "PONT",
-                                      "Pohnpei Summer Time", "PONST"};
-        String PST[] = new String[] {"Stilla havet, normaltid", "PST",
-                                     "Stilla havet, sommartid", "PDT"};
-        String SAMOA[] = new String[] {"Samoa, normaltid", "SST",
-                                       "Samoa, sommartid", "SDT"};
-        String SAST[] = new String[] {"Sydafrika, normaltid", "SAST",
-                                      "Sydafrika, sommartid", "SAST"};
-        String SBT[] = new String[] {"Salomon\u00f6arna, normaltid", "SBT",
-                                     "Salomon\u00f6arna, sommartid", "SBST"};
-        String SGT[] = new String[] {"Singapore, normaltid", "SGT",
-                                     "Singapore, sommartid", "SGST"};
-        String SLST[] = new String[] {"Greenwichtid", "GMT",
-                                      "Sierra Leone, sommartid", "SLST"};
-        String TASMANIA[] = new String[] {"Eastern, normaltid (Tasmanien)", "EST",
-                                          "Eastern, sommartid (Tasmanien)", "EST"};
-        String TMT[] = new String[] {"Turkmenistan, normaltid", "TMT",
-                                     "Turkmenistan, sommartid", "TMST"};
-        String ULAT[]= new String[] {"Ulaanbaatar, normaltid", "ULAT",
-                                     "Ulaanbaatar, sommartid", "ULAST"};
-        String UTC[] = new String[] {"Koordinerad universell tid", "UTC",
-                                     "Koordinerad universell tid", "UTC"};
-        String UZT[] = new String[] {"Uzbekistan, normaltid", "UZT",
-                                     "Uzbekistan, sommartid", "UZST"};
-        String VICTORIA[] = new String[] {"\u00d6stlig normaltid (Victoria)", "EST",
-                                          "\u00d6stlig sommartid (Victoria)", "EST"};
-        String VLAT[] = new String[] {"Vladivostok, normaltid", "VLAT",
-                                      "Vladivostok, sommartid", "VLAST"};
-        String WART[] = new String[] {"V\u00e4stargentina, normaltid", "WART",
-                                      "V\u00e4stargentina, sommartid", "WARST"};
-        String WAT[] = new String[] {"V\u00e4stafrikansk tid", "WAT",
-                                     "V\u00e4stafrikansk sommartid", "WAST"};
-        String WET[] = new String[] {"V\u00e4steuropeisk tid", "WET",
-                                     "V\u00e4steuropeisk sommartid", "WEST"};
-        String WIT[] = new String[] {"V\u00e4stindonesisk tid", "WIT",
-                                     "V\u00e4stindonesisk sommartid", "WIST"};
-        String WST_AUS[] = new String[] {"V\u00e4stlig normaltid (Australien)", "WST",
-                                         "V\u00e4stlig sommartid (Australien)", "WST"};
-        String WST_SAMOA[] = new String[] {"V\u00e4stsamoansk tid", "WST",
-                                           "V\u00e4stsamoansk sommartid", "WSDT"};
-        String YAKT[] = new String[] {"Jakutsk, normaltid", "YAKT",
-                                      "Jakutsk, sommartid", "YAKST"};
-
-        return new Object[][] {
-            {"America/Los_Angeles", PST},
-            {"PST", PST},
-            {"America/Denver", MST},
-            {"MST", MST},
-            {"America/Phoenix", MST},
-            {"PNT", MST},
-            {"America/Chicago", CST},
-            {"CST", CST},
-            {"America/New_York", EST},
-            {"EST", EST},
-            {"America/Indianapolis", EST},
-            {"IET", EST},
-            {"Pacific/Honolulu", HST},
-            {"HST", HST},
-            {"America/Anchorage", AKST},
-            {"AST", AKST},
-            {"America/Halifax", AST},
-            {"America/Sitka", AKST},
-            {"America/St_Johns", NST},
-            {"CNT", NST},
-            {"Europe/Paris", CET},
-            {"ECT", CET},
-            {"GMT", GMT},
-            {"Africa/Casablanca", WET},
-            {"Asia/Jerusalem", ISRAEL},
-            {"Asia/Tokyo", JST},
-            {"JST", JST},
-            {"Europe/Bucharest", EET},
-            {"Asia/Shanghai", CTT},
-            {"CTT", CTT},
-            /* Don't change the order of the above zones
-             * to keep compatibility with the previous version.
-             */
-
-            {"ACT", DARWIN},
-            {"AET", EST_NSW},
-            {"AGT", AGT},
-            {"ART", EET},
-            {"Africa/Abidjan", GMT},
-            {"Africa/Accra", GHMT},
-            {"Africa/Addis_Ababa", EAT},
-            {"Africa/Algiers", CET},
-            {"Africa/Asmara", EAT},
-            {"Africa/Asmera", EAT},
-            {"Africa/Bamako", GMT},
-            {"Africa/Bangui", WAT},
-            {"Africa/Banjul", GMT},
-            {"Africa/Bissau", GMT},
-            {"Africa/Blantyre", CAT},
-            {"Africa/Brazzaville", WAT},
-            {"Africa/Bujumbura", CAT},
-            {"Africa/Cairo", EET},
-            {"Africa/Ceuta", CET},
-            {"Africa/Conakry", GMT},
-            {"Africa/Dakar", GMT},
-            {"Africa/Dar_es_Salaam", EAT},
-            {"Africa/Djibouti", EAT},
-            {"Africa/Douala", WAT},
-            {"Africa/El_Aaiun", WET},
-            {"Africa/Freetown", SLST},
-            {"Africa/Gaborone", CAT},
-            {"Africa/Harare", CAT},
-            {"Africa/Johannesburg", SAST},
-            {"Africa/Juba", EAT},
-            {"Africa/Kampala", EAT},
-            {"Africa/Khartoum", EAT},
-            {"Africa/Kigali", CAT},
-            {"Africa/Kinshasa", WAT},
-            {"Africa/Lagos", WAT},
-            {"Africa/Libreville", WAT},
-            {"Africa/Lome", GMT},
-            {"Africa/Luanda", WAT},
-            {"Africa/Lubumbashi", CAT},
-            {"Africa/Lusaka", CAT},
-            {"Africa/Malabo", WAT},
-            {"Africa/Maputo", CAT},
-            {"Africa/Maseru", SAST},
-            {"Africa/Mbabane", SAST},
-            {"Africa/Mogadishu", EAT},
-            {"Africa/Monrovia", GMT},
-            {"Africa/Nairobi", EAT},
-            {"Africa/Ndjamena", WAT},
-            {"Africa/Niamey", WAT},
-            {"Africa/Nouakchott", GMT},
-            {"Africa/Ouagadougou", GMT},
-            {"Africa/Porto-Novo", WAT},
-            {"Africa/Sao_Tome", GMT},
-            {"Africa/Timbuktu", GMT},
-            {"Africa/Tripoli", CET},
-            {"Africa/Tunis", CET},
-            {"Africa/Windhoek", WAT},
-            {"America/Adak", HAST},
-            {"America/Anguilla", AST},
-            {"America/Antigua", AST},
-            {"America/Araguaina", BRT},
-            {"America/Argentina/Buenos_Aires", AGT},
-            {"America/Argentina/Catamarca", AGT},
-            {"America/Argentina/ComodRivadavia", AGT},
-            {"America/Argentina/Cordoba", AGT},
-            {"America/Argentina/Jujuy", AGT},
-            {"America/Argentina/La_Rioja", AGT},
-            {"America/Argentina/Mendoza", AGT},
-            {"America/Argentina/Rio_Gallegos", AGT},
-            {"America/Argentina/Salta", AGT},
-            {"America/Argentina/San_Juan", AGT},
-            {"America/Argentina/San_Luis", WART},
-            {"America/Argentina/Tucuman", AGT},
-            {"America/Argentina/Ushuaia", AGT},
-            {"America/Aruba", AST},
-            {"America/Asuncion", new String[] {"Paraguay, normaltid", "PYT",
-                                               "Paraguay, sommartid", "PYST"}},
-            {"America/Atikokan", EST},
-            {"America/Atka", HAST},
-            {"America/Bahia", BRT},
-            {"America/Bahia_Banderas", CST},
-            {"America/Barbados", AST},
-            {"America/Belem", BRT},
-            {"America/Belize", CST},
-            {"America/Blanc-Sablon", AST},
-            {"America/Boa_Vista", AMT},
-            {"America/Bogota", new String[] {"Colombia, normaltid", "COT",
-                                             "Colombia, sommartid", "COST"}},
-            {"America/Boise", MST},
-            {"America/Buenos_Aires", AGT},
-            {"America/Cambridge_Bay", MST},
-            {"America/Campo_Grande", AMT},
-            {"America/Cancun", CST},
-            {"America/Caracas", new String[] {"Venezuela, normaltid", "VET",
-                                              "Venezuela, sommartid", "VEST"}},
-            {"America/Catamarca", AGT},
-            {"America/Cayenne", new String[] {"Franska Guyana, normaltid", "GFT",
-                                              "Franska Guyana, sommartid", "GFST"}},
-            {"America/Cayman", EST},
-            {"America/Chihuahua", MST},
-            {"America/Creston", MST},
-            {"America/Coral_Harbour", EST},
-            {"America/Cordoba", AGT},
-            {"America/Costa_Rica", CST},
-            {"America/Cuiaba", AMT},
-            {"America/Curacao", AST},
-            {"America/Danmarkshavn", GMT},
-            {"America/Dawson", PST},
-            {"America/Dawson_Creek", MST},
-            {"America/Detroit", EST},
-            {"America/Dominica", AST},
-            {"America/Edmonton", MST},
-            {"America/Eirunepe", AMT},
-            {"America/El_Salvador", CST},
-            {"America/Ensenada", PST},
-            {"America/Fort_Wayne", EST},
-            {"America/Fortaleza", BRT},
-            {"America/Glace_Bay", AST},
-            {"America/Godthab", new String[] {"V\u00e4stra Gr\u00f6nland, normaltid", "WGT",
-                                              "V\u00e4stra Gr\u00f6nland, sommartid", "WGST"}},
-            {"America/Goose_Bay", AST},
-            {"America/Grand_Turk", EST},
-            {"America/Grenada", AST},
-            {"America/Guadeloupe", AST},
-            {"America/Guatemala", CST},
-            {"America/Guayaquil", new String[] {"Ecuador, normaltid", "ECT",
-                                                "Ecuador, sommartid", "ECST"}},
-            {"America/Guyana", new String[] {"Guyana, normaltid", "GYT",
-                                             "Guyana, sommartid", "GYST"}},
-            {"America/Havana", CUBA},
-            {"America/Hermosillo", MST},
-            {"America/Indiana/Indianapolis", EST},
-            {"America/Indiana/Knox", CST},
-            {"America/Indiana/Marengo", EST},
-            {"America/Indiana/Petersburg", EST},
-            {"America/Indiana/Tell_City", CST},
-            {"America/Indiana/Vevay", EST},
-            {"America/Indiana/Vincennes", EST},
-            {"America/Indiana/Winamac", EST},
-            {"America/Inuvik", MST},
-            {"America/Iqaluit", EST},
-            {"America/Jamaica", EST},
-            {"America/Jujuy", AGT},
-            {"America/Juneau", AKST},
-            {"America/Kentucky/Louisville", EST},
-            {"America/Kentucky/Monticello", EST},
-            {"America/Knox_IN", CST},
-            {"America/Kralendijk", AST},
-            {"America/La_Paz", new String[] {"Bolivia, normaltid", "BOT",
-                                             "Bolivia, sommartid", "BOST"}},
-            {"America/Lima", new String[] {"Peru, normaltid", "PET",
-                                           "Peru, sommartid", "PEST"}},
-            {"America/Louisville", EST},
-            {"America/Lower_Princes", AST},
-            {"America/Maceio", BRT},
-            {"America/Managua", CST},
-            {"America/Manaus", AMT},
-            {"America/Marigot", AST},
-            {"America/Martinique", AST},
-            {"America/Matamoros", CST},
-            {"America/Mazatlan", MST},
-            {"America/Mendoza", AGT},
-            {"America/Menominee", CST},
-            {"America/Merida", CST},
-            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
-                                                 "Metlakatla Daylight Time", "MeDT"}},
-            {"America/Mexico_City", CST},
-            {"America/Miquelon", new String[] {"Saint-Pierre-et-Miquelon, normaltid", "PMST",
-                                               "Saint-Pierre-et-Miquelon, sommartid", "PMDT"}},
-            {"America/Moncton", AST},
-            {"America/Montevideo", new String[] {"Uruguay, normaltid", "UYT",
-                                                 "Uruguay, sommartid", "UYST"}},
-            {"America/Monterrey", CST},
-            {"America/Montreal", EST},
-            {"America/Montserrat", AST},
-            {"America/Nassau", EST},
-            {"America/Nipigon", EST},
-            {"America/Nome", AKST},
-            {"America/Noronha", NORONHA},
-            {"America/North_Dakota/Beulah", CST},
-            {"America/North_Dakota/Center", CST},
-            {"America/North_Dakota/New_Salem", CST},
-            {"America/Ojinaga", MST},
-            {"America/Panama", EST},
-            {"America/Pangnirtung", EST},
-            {"America/Paramaribo", new String[] {"Surinam, normaltid", "SRT",
-                                                 "Surinam, sommartid", "SRST"}},
-            {"America/Port-au-Prince", EST},
-            {"America/Port_of_Spain", AST},
-            {"America/Porto_Acre", AMT},
-            {"America/Porto_Velho", AMT},
-            {"America/Puerto_Rico", AST},
-            {"America/Rainy_River", CST},
-            {"America/Rankin_Inlet", CST},
-            {"America/Recife", BRT},
-            {"America/Regina", CST},
-            {"America/Resolute", CST},
-            {"America/Rio_Branco", AMT},
-            {"America/Rosario", AGT},
-            {"America/Santa_Isabel", PST},
-            {"America/Santarem", BRT},
-            {"America/Santiago", CLT},
-            {"America/Santo_Domingo", AST},
-            {"America/Sao_Paulo", BRT},
-            {"America/Scoresbysund", EGT},
-            {"America/Shiprock", MST},
-            {"America/St_Barthelemy", AST},
-            {"America/St_Kitts", AST},
-            {"America/St_Lucia", AST},
-            {"America/St_Thomas", AST},
-            {"America/St_Vincent", AST},
-            {"America/Swift_Current", CST},
-            {"America/Tegucigalpa", CST},
-            {"America/Thule", AST},
-            {"America/Thunder_Bay", EST},
-            {"America/Tijuana", PST},
-            {"America/Toronto", EST},
-            {"America/Tortola", AST},
-            {"America/Vancouver", PST},
-            {"America/Virgin", AST},
-            {"America/Whitehorse", PST},
-            {"America/Winnipeg", CST},
-            {"America/Yakutat", AKST},
-            {"America/Yellowknife", MST},
-            {"Antarctica/Casey", WST_AUS},
-            {"Antarctica/Davis", new String[] {"Davis, normaltid", "DAVT",
-                                               "Davis, sommartid", "DAVST"}},
-            {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville, normaltid", "DDUT",
-                                                        "Dumont-d'Urville, sommartid", "DDUST"}},
-            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
-                                                   "Macquarie Island Summer Time", "MIST"}},
-            {"Antarctica/Mawson", new String[] {"Mawson, normaltid", "MAWT",
-                                                "Mawson, sommartid", "MAWST"}},
-            {"Antarctica/McMurdo", NZST},
-            {"Antarctica/Palmer", CLT},
-            {"Antarctica/Rothera", new String[] {"Rothera, normaltid", "ROTT",
-                                                 "Rothera, sommartid", "ROTST"}},
-            {"Antarctica/South_Pole", NZST},
-            {"Antarctica/Syowa", new String[] {"Syowa, normaltid", "SYOT",
-                                               "Syowa, sommartid", "SYOST"}},
-            {"Antarctica/Vostok", new String[] {"Vostok, normaltid", "VOST",
-                                                "Vostok, sommartid", "VOSST"}},
-            {"Arctic/Longyearbyen", CET},
-            {"Asia/Aden", ARAST},
-            {"Asia/Almaty", new String[] {"Alma-Ata, normaltid", "ALMT",
-                                          "Alma-Ata, sommartid", "ALMST"}},
-            {"Asia/Amman", EET},
-            {"Asia/Anadyr", new String[] {"Anadyr, normaltid", "ANAT",
-                                          "Anadyr, sommartid", "ANAST"}},
-            {"Asia/Aqtau", new String[] {"Aqtau, normaltid", "AQTT",
-                                         "Aqtau, sommartid", "AQTST"}},
-            {"Asia/Aqtobe", new String[] {"Aqtobe, normaltid", "AQTT",
-                                          "Aqtobe, sommartid", "AQTST"}},
-            {"Asia/Ashgabat", TMT},
-            {"Asia/Ashkhabad", TMT},
-            {"Asia/Baghdad", ARAST},
-            {"Asia/Bahrain", ARAST},
-            {"Asia/Baku", new String[] {"Azerbajdzjan, normaltid", "AZT",
-                                        "Azerbajdzjan, sommartid", "AZST"}},
-            {"Asia/Bangkok", ICT},
-            {"Asia/Beirut", EET},
-            {"Asia/Bishkek", new String[] {"Kirgizstan, normaltid", "KGT",
-                                           "Kirgizstan, sommartid", "KGST"}},
-            {"Asia/Brunei", new String[] {"Brunei, normaltid", "BNT",
-                                          "Brunei, sommartid", "BNST"}},
-            {"Asia/Calcutta", IST},
-            {"Asia/Choibalsan", new String[] {"Choibalsan, normaltid", "CHOT",
-                                              "Choibalsan, sommartid", "CHOST"}},
-            {"Asia/Chongqing", CTT},
-            {"Asia/Chungking", CTT},
-            {"Asia/Colombo", IST},
-            {"Asia/Dacca", BDT},
-            {"Asia/Dhaka", BDT},
-            {"Asia/Dili", new String[] {"Timor-Leste, normaltid", "TLT",
-                                        "Timor-Leste, sommartid", "TLST"}},
-            {"Asia/Damascus", EET},
-            {"Asia/Dubai", GST},
-            {"Asia/Dushanbe", new String[] {"Tadzjikistan, normaltid", "TJT",
-                                            "Tadzjikistan, sommartid", "TJST"}},
-            {"Asia/Gaza", EET},
-            {"Asia/Harbin", CTT},
-            {"Asia/Hebron", EET},
-            {"Asia/Ho_Chi_Minh", ICT},
-            {"Asia/Hong_Kong", HKT},
-            {"Asia/Hovd", new String[] {"Hovd, normaltid", "HOVT",
-                                        "Hovd, sommartid", "HOVST"}},
-            {"Asia/Irkutsk", new String[] {"Irkutsk, normaltid", "IRKT",
-                                           "Irkutsk, sommartid", "IRKST"}},
-            {"Asia/Istanbul", EET},
-            {"Asia/Jakarta", WIT},
-            {"Asia/Jayapura", new String[] {"\u00d6stindonesisk tid", "EIT",
-                                            "\u00d6stindonesisk sommartid", "EIST"}},
-            {"Asia/Kabul", new String[] {"Afghanistan, normaltid", "AFT",
-                                         "Afghanistan, sommartid", "AFST"}},
-            {"Asia/Kamchatka", new String[] {"Petropavlovsk-Kamtjatka, normaltid", "PETT",
-                                             "Petropavlovsk-Kamtjatka, sommartid", "PETST"}},
-            {"Asia/Karachi", PKT},
-            {"Asia/Kashgar", CTT},
-            {"Asia/Kathmandu", NPT},
-            {"Asia/Katmandu", NPT},
-            {"Asia/Khandyga", YAKT},
-            {"Asia/Kolkata", IST},
-            {"Asia/Krasnoyarsk", new String[] {"Krasnojarsk, normaltid", "KRAT",
-                                               "Krasnojarsk, sommartid", "KRAST"}},
-            {"Asia/Kuala_Lumpur", MYT},
-            {"Asia/Kuching", MYT},
-            {"Asia/Kuwait", ARAST},
-            {"Asia/Macao", CTT},
-            {"Asia/Macau", CTT},
-            {"Asia/Magadan", new String[] {"Magadan, normaltid", "MAGT",
-                                           "Magadan, sommartid", "MAGST"}},
-            {"Asia/Makassar", CIT},
-            {"Asia/Manila", new String[] {"Filippinerna, normaltid", "PHT",
-                                          "Filippinerna, sommartid", "PHST"}},
-            {"Asia/Muscat", GST},
-            {"Asia/Nicosia", EET},
-            {"Asia/Novokuznetsk", NOVT},
-            {"Asia/Novosibirsk", NOVT},
-            {"Asia/Oral", new String[] {"Oral, normaltid", "ORAT",
-                                        "Oral, sommartid", "ORAST"}},
-            {"Asia/Omsk", new String[] {"Omsk, normaltid", "OMST",
-                                        "Omsk, sommartid", "OMSST"}},
-            {"Asia/Phnom_Penh", ICT},
-            {"Asia/Pontianak", WIT},
-            {"Asia/Pyongyang", KST},
-            {"Asia/Qatar", ARAST},
-            {"Asia/Qyzylorda", new String[] {"Qyzylorda, normaltid", "QYZT",
-                                             "Qyzylorda, sommartid", "QYZST"}},
-            {"Asia/Rangoon", new String[] {"Myanmar, normaltid", "MMT",
-                                           "Myanmar, sommartid", "MMST"}},
-            {"Asia/Riyadh", ARAST},
-            {"Asia/Saigon", ICT},
-            {"Asia/Sakhalin", new String[] {"Sakhalin, normaltid", "SAKT",
-                                            "Sakhalin, sommartid", "SAKST"}},
-            {"Asia/Samarkand", UZT},
-            {"Asia/Seoul", KST},
-            {"Asia/Singapore", SGT},
-            {"Asia/Taipei", CTT},
-            {"Asia/Tel_Aviv", ISRAEL},
-            {"Asia/Tashkent", UZT},
-            {"Asia/Tbilisi", new String[] {"Georgien, normaltid", "GET",
-                                           "Georgien, sommartid", "GEST"}},
-            {"Asia/Tehran", IRT},
-            {"Asia/Thimbu", BTT},
-            {"Asia/Thimphu", BTT},
-            {"Asia/Ujung_Pandang", CIT},
-            {"Asia/Ulaanbaatar", ULAT},
-            {"Asia/Ulan_Bator", ULAT},
-            {"Asia/Urumqi", CTT},
-            {"Asia/Ust-Nera", VLAT},
-            {"Asia/Vientiane", ICT},
-            {"Asia/Vladivostok", VLAT},
-            {"Asia/Yakutsk", YAKT},
-            {"Asia/Yekaterinburg", new String[] {"Jekaterinburg, normaltid", "YEKT",
-                                                 "Jekaterinburg, sommartid", "YEKST"}},
-            {"Asia/Yerevan", ARMT},
-            {"Atlantic/Azores", new String[] {"Azorerna, normaltid", "AZOT",
-                                              "Azorerna, sommartid", "AZOST"}},
-            {"Atlantic/Bermuda", AST},
-            {"Atlantic/Canary", WET},
-            {"Atlantic/Cape_Verde", new String[] {"Kap Verde, normaltid", "CVT",
-                                                  "Kap Verde, sommartid", "CVST"}},
-            {"Atlantic/Faeroe", WET},
-            {"Atlantic/Faroe", WET},
-            {"Atlantic/Jan_Mayen", CET},
-            {"Atlantic/Madeira", WET},
-            {"Atlantic/Reykjavik", GMT},
-            {"Atlantic/South_Georgia", new String[] {"Sydgeorgien, normaltid", "GST",
-                                                     "Sydgeorgien, sommartid", "GDT"}},
-            {"Atlantic/St_Helena", GMT},
-            {"Atlantic/Stanley", new String[] {"Falklands\u00f6arna, normaltid", "FKT",
-                                               "Falklands\u00f6arna, sommartid", "FKST"}},
-            {"Australia/ACT", EST_NSW},
-            {"Australia/Adelaide", ADELAIDE},
-            {"Australia/Brisbane", BRISBANE},
-            {"Australia/Broken_Hill", BROKEN_HILL},
-            {"Australia/Canberra", EST_NSW},
-            {"Australia/Currie", EST_NSW},
-            {"Australia/Darwin", DARWIN},
-            {"Australia/Eucla", new String[] {"Central v\u00e4stlig normaltid (Australien)", "CWST",
-                                              "Central v\u00e4stlig sommartid (Australien)", "CWST"}},
-            {"Australia/Hobart", TASMANIA},
-            {"Australia/LHI", LORD_HOWE},
-            {"Australia/Lindeman", BRISBANE},
-            {"Australia/Lord_Howe", LORD_HOWE},
-            {"Australia/Melbourne", VICTORIA},
-            {"Australia/North", DARWIN},
-            {"Australia/NSW", EST_NSW},
-            {"Australia/Perth", WST_AUS},
-            {"Australia/Queensland", BRISBANE},
-            {"Australia/South", ADELAIDE},
-            {"Australia/Sydney", EST_NSW},
-            {"Australia/Tasmania", TASMANIA},
-            {"Australia/Victoria", VICTORIA},
-            {"Australia/West", WST_AUS},
-            {"Australia/Yancowinna", BROKEN_HILL},
-            {"BET", BRT},
-            {"BST", BDT},
-            {"Brazil/Acre", AMT},
-            {"Brazil/DeNoronha", NORONHA},
-            {"Brazil/East", BRT},
-            {"Brazil/West", AMT},
-            {"Canada/Atlantic", AST},
-            {"Canada/Central", CST},
-            {"Canada/East-Saskatchewan", CST},
-            {"Canada/Eastern", EST},
-            {"Canada/Mountain", MST},
-            {"Canada/Newfoundland", NST},
-            {"Canada/Pacific", PST},
-            {"Canada/Yukon", PST},
-            {"Canada/Saskatchewan", CST},
-            {"CAT", CAT},
-            {"CET", CET},
-            {"Chile/Continental", CLT},
-            {"Chile/EasterIsland", EASTER},
-            {"CST6CDT", CST},
-            {"Cuba", CUBA},
-            {"EAT", EAT},
-            {"EET", EET},
-            {"Egypt", EET},
-            {"Eire", DUBLIN},
-            {"EST5EDT", EST},
-            {"Etc/Greenwich", GMT},
-            {"Etc/UCT", UTC},
-            {"Etc/Universal", UTC},
-            {"Etc/UTC", UTC},
-            {"Etc/Zulu", UTC},
-            {"Europe/Amsterdam", CET},
-            {"Europe/Andorra", CET},
-            {"Europe/Athens", EET},
-            {"Europe/Belfast", GMTBST},
-            {"Europe/Belgrade", CET},
-            {"Europe/Berlin", CET},
-            {"Europe/Bratislava", CET},
-            {"Europe/Brussels", CET},
-            {"Europe/Budapest", CET},
-            {"Europe/Busingen", CET},
-            {"Europe/Chisinau", EET},
-            {"Europe/Copenhagen", CET},
-            {"Europe/Dublin", DUBLIN},
-            {"Europe/Gibraltar", CET},
-            {"Europe/Guernsey", GMTBST},
-            {"Europe/Helsinki", EET},
-            {"Europe/Isle_of_Man", GMTBST},
-            {"Europe/Istanbul", EET},
-            {"Europe/Jersey", GMTBST},
-            {"Europe/Kaliningrad", FET},
-            {"Europe/Kiev", EET},
-            {"Europe/Lisbon", WET},
-            {"Europe/Ljubljana", CET},
-            {"Europe/London", GMTBST},
-            {"Europe/Luxembourg", CET},
-            {"Europe/Madrid", CET},
-            {"Europe/Malta", CET},
-            {"Europe/Mariehamn", EET},
-            {"Europe/Minsk", FET},
-            {"Europe/Monaco", CET},
-            {"Europe/Moscow", MSK},
-            {"Europe/Nicosia", EET},
-            {"Europe/Oslo", CET},
-            {"Europe/Podgorica", CET},
-            {"Europe/Prague", CET},
-            {"Europe/Riga", EET},
-            {"Europe/Rome", CET},
-            {"Europe/Samara", new String[] {"Samara, normaltid", "SAMT",
-                                            "Samara, sommartid", "SAMST"}},
-            {"Europe/San_Marino", CET},
-            {"Europe/Sarajevo", CET},
-            {"Europe/Simferopol", EET},
-            {"Europe/Skopje", CET},
-            {"Europe/Sofia", EET},
-            {"Europe/Stockholm", CET},
-            {"Europe/Tallinn", EET},
-            {"Europe/Tirane", CET},
-            {"Europe/Tiraspol", EET},
-            {"Europe/Uzhgorod", EET},
-            {"Europe/Vaduz", CET},
-            {"Europe/Vatican", CET},
-            {"Europe/Vienna", CET},
-            {"Europe/Vilnius", EET},
-            {"Europe/Volgograd", new String[] {"Volgograd-tid", "VOLT",
-                                               "Volgograd, sommartid", "VOLST"}},
-            {"Europe/Warsaw", CET},
-            {"Europe/Zagreb", CET},
-            {"Europe/Zaporozhye", EET},
-            {"Europe/Zurich", CET},
-            {"GB", GMTBST},
-            {"GB-Eire", GMTBST},
-            {"Greenwich", GMT},
-            {"Hongkong", HKT},
-            {"Iceland", GMT},
-            {"Iran", IRT},
-            {"IST", IST},
-            {"Indian/Antananarivo", EAT},
-            {"Indian/Chagos", new String[] {"Indiska oceanen, normaltid", "IOT",
-                                            "Indiska oceanen, sommartid", "IOST"}},
-            {"Indian/Christmas", new String[] {"Jul\u00f6n, normaltid", "CXT",
-                                               "Jul\u00f6n, sommartid", "CXST"}},
-            {"Indian/Cocos", new String[] {"Cocos-Keeling\u00f6arna, normaltid", "CCT",
-                                           "Cocos-Keeling\u00f6arna, sommartid", "CCST"}},
-            {"Indian/Comoro", EAT},
-            {"Indian/Kerguelen", new String[] {"Franska s\u00f6dra och antarktiska omr\u00e5dena, normaltid", "TFT",
-                                               "Franska s\u00f6dra och antarktiska omr\u00e5dena, sommartid", "TFST"}},
-            {"Indian/Mahe", new String[] {"Seychellerna, normaltid", "SCT",
-                                          "Seychellerna, sommartid", "SCST"}},
-            {"Indian/Maldives", new String[] {"Maldiverna, normaltid", "MVT",
-                                              "Maldiverna, sommartid", "MVST"}},
-            {"Indian/Mauritius", new String[] {"Mauritius, normaltid", "MUT",
-                                               "Mauritius, sommartid", "MUST"}},
-            {"Indian/Mayotte", EAT},
-            {"Indian/Reunion", new String[] {"Reunion, normaltid", "RET",
-                                             "Reunion, sommartid", "REST"}},
-            {"Israel", ISRAEL},
-            {"Jamaica", EST},
-            {"Japan", JST},
-            {"Kwajalein", MHT},
-            {"Libya", CET},
-            {"MET", new String[] {"Mellaneuropeisk tid", "MET",
-                                  "Mellaneuropeisk sommartid", "MEST"}},
-            {"Mexico/BajaNorte", PST},
-            {"Mexico/BajaSur", MST},
-            {"Mexico/General", CST},
-            {"MIT", WST_SAMOA},
-            {"MST7MDT", MST},
-            {"Navajo", MST},
-            {"NET", ARMT},
-            {"NST", NZST},
-            {"NZ", NZST},
-            {"NZ-CHAT", CHAST},
-            {"PLT", PKT},
-            {"Portugal", WET},
-            {"PRT", AST},
-            {"Pacific/Apia", WST_SAMOA},
-            {"Pacific/Auckland", NZST},
-            {"Pacific/Chatham", CHAST},
-            {"Pacific/Chuuk", CHUT},
-            {"Pacific/Easter", EASTER},
-            {"Pacific/Efate", new String[] {"Vanuatu, normaltid", "VUT",
-                                            "Vanuatu, sommartid", "VUST"}},
-            {"Pacific/Enderbury", new String[] {"Phoenix-\u00f6arna, normaltid", "PHOT",
-                                                "Phoenix-\u00f6arna, sommartid", "PHOST"}},
-            {"Pacific/Fakaofo", new String[] {"Tokelau, normaltid", "TKT",
-                                              "Tokelau, sommartid", "TKST"}},
-            {"Pacific/Fiji", new String[] {"Fiji, normaltid", "FJT",
-                                           "Fiji, sommartid", "FJST"}},
-            {"Pacific/Funafuti", new String[] {"Tuvalu, normaltid", "TVT",
-                                               "Tuvalu, sommartid", "TVST"}},
-            {"Pacific/Galapagos", new String[] {"Galapagos, normaltid", "GALT",
-                                                "Galapagos, sommartid", "GALST"}},
-            {"Pacific/Gambier", GAMBIER},
-            {"Pacific/Guadalcanal", SBT},
-            {"Pacific/Guam", ChST},
-            {"Pacific/Johnston", HST},
-            {"Pacific/Kiritimati", new String[] {"Line-\u00f6arna, normaltid", "LINT",
-                                                 "Line-\u00f6arna, sommartid", "LINST"}},
-            {"Pacific/Kosrae", new String[] {"Kosrae, normaltid", "KOST",
-                                             "Kosrae, sommartid", "KOSST"}},
-            {"Pacific/Kwajalein", MHT},
-            {"Pacific/Majuro", MHT},
-            {"Pacific/Marquesas", new String[] {"Marquesas, normaltid", "MART",
-                                                "Marquesas, sommartid", "MARST"}},
-            {"Pacific/Midway", SAMOA},
-            {"Pacific/Nauru", new String[] {"Nauru, normaltid", "NRT",
-                                            "Nauru, sommartid", "NRST"}},
-            {"Pacific/Niue", new String[] {"Niue, normaltid", "NUT",
-                                           "Niue, sommartid", "NUST"}},
-            {"Pacific/Norfolk", new String[] {"Norfolk, normaltid", "NFT",
-                                              "Norfolk, sommartid", "NFST"}},
-            {"Pacific/Noumea", new String[] {"Nya Caledonien, normaltid", "NCT",
-                                             "Nya Caledonien, sommartid", "NCST"}},
-            {"Pacific/Pago_Pago", SAMOA},
-            {"Pacific/Palau", new String[] {"Palau, normaltid", "PWT",
-                                            "Palau, sommartid", "PWST"}},
-            {"Pacific/Pitcairn", PITCAIRN},
-            {"Pacific/Pohnpei", PONT},
-            {"Pacific/Ponape", PONT},
-            {"Pacific/Port_Moresby", new String[] {"Papua Nya Guinea, normaltid", "PGT",
-                                                   "Papua Nya Guinea, sommartid", "PGST"}},
-            {"Pacific/Rarotonga", new String[] {"Cook\u00f6arna, normaltid", "CKT",
-                                                "Cook\u00f6arna, sommartid", "CKHST"}},
-            {"Pacific/Saipan", ChST},
-            {"Pacific/Samoa", SAMOA},
-            {"Pacific/Tahiti", new String[] {"Tahiti, normaltid", "TAHT",
-                                             "Tahiti, sommartid", "TAHST"}},
-            {"Pacific/Tarawa", new String[] {"Gilbert\u00f6arna, normaltid", "GILT",
-                                             "Gilbert\u00f6arna, sommartid", "GILST"}},
-            {"Pacific/Tongatapu", new String[] {"Tonga, normaltid", "TOT",
-                                                "Tonga, sommartid", "TOST"}},
-            {"Pacific/Truk", CHUT},
-            {"Pacific/Wake", new String[] {"Wake, normaltid", "WAKT",
-                                           "Wake, sommartid", "WAKST"}},
-            {"Pacific/Wallis", new String[] {"Wallis & Futuna, normaltid", "WFT",
-                                             "Wallis & Futuna, sommartid", "WFST"}},
-            {"Pacific/Yap", CHUT},
-            {"Poland", CET},
-            {"PRC", CTT},
-            {"PST8PDT", PST},
-            {"ROK", KST},
-            {"Singapore", SGT},
-            {"SST", SBT},
-            {"SystemV/AST4", AST},
-            {"SystemV/AST4ADT", AST},
-            {"SystemV/CST6", CST},
-            {"SystemV/CST6CDT", CST},
-            {"SystemV/EST5", EST},
-            {"SystemV/EST5EDT", EST},
-            {"SystemV/HST10", HST},
-            {"SystemV/MST7", MST},
-            {"SystemV/MST7MDT", MST},
-            {"SystemV/PST8", PST},
-            {"SystemV/PST8PDT", PST},
-            {"SystemV/YST9", AKST},
-            {"SystemV/YST9YDT", AKST},
-            {"Turkey", EET},
-            {"UCT", UTC},
-            {"Universal", UTC},
-            {"US/Alaska", AKST},
-            {"US/Aleutian", HAST},
-            {"US/Arizona", MST},
-            {"US/Central", CST},
-            {"US/Eastern", EST},
-            {"US/Hawaii", HST},
-            {"US/Indiana-Starke", CST},
-            {"US/East-Indiana", EST},
-            {"US/Michigan", EST},
-            {"US/Mountain", MST},
-            {"US/Pacific", PST},
-            {"US/Pacific-New", PST},
-            {"US/Samoa", SAMOA},
-            {"UTC", UTC},
-            {"VST", ICT},
-            {"W-SU", MSK},
-            {"WET", WET},
-            {"Zulu", UTC},
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_zh_CN.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames_zh_CN.java
deleted file mode 100755
index 657faf5..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_zh_CN.java
+++ /dev/null
@@ -1,876 +0,0 @@
-/*
- * Copyright (c) 1997, 2011, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-public final class TimeZoneNames_zh_CN extends TimeZoneNamesBundle {
-
-    protected final Object[][] getContents() {
-        String ACT[] = new String[] {"Acre \u65f6\u95f4", "ACT",
-                                     "Acre \u590f\u4ee4\u65f6", "ACST"};
-        String ADELAIDE[] = new String[] {"\u4e2d\u592e\u6807\u51c6\u65f6\u95f4\uff08\u5357\u6fb3\u5927\u5229\u4e9a\uff09", "CST",
-                                          "\u4e2d\u592e\u590f\u4ee4\u65f6\uff08\u5357\u6fb3\u5927\u5229\u4e9a\uff09", "CST"};
-        String AGT[] = new String[] {"\u963f\u6839\u5ef7\u65f6\u95f4", "ART",
-                                     "\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "ARST"};
-        String AKST[] = new String[] {"\u963f\u62c9\u65af\u52a0\u6807\u51c6\u65f6\u95f4", "AKST",
-                                      "\u963f\u62c9\u65af\u52a0\u590f\u4ee4\u65f6", "AKDT"};
-        String AMT[] = new String[] {"\u4e9a\u9a6c\u900a\u65f6\u95f4", "AMT",
-                                     "\u4e9a\u9a6c\u900a\u590f\u4ee4\u65f6", "AMST"};
-        String ARAST[] = new String[] {"\u963f\u62c9\u4f2f\u6807\u51c6\u65f6\u95f4", "AST",
-                                       "\u963f\u62c9\u4f2f\u590f\u4ee4\u65f6", "ADT"};
-        String ARMT[] = new String[] {"\u4e9a\u7f8e\u5c3c\u4e9a\u65f6\u95f4", "AMT",
-                                      "\u4e9a\u7f8e\u5c3c\u4e9a\u590f\u4ee4\u65f6", "AMST"};
-        String AST[] = new String[] {"\u5927\u897f\u6d0b\u6807\u51c6\u65f6\u95f4", "AST",
-                                     "\u5927\u897f\u6d0b\u590f\u4ee4\u65f6", "ADT"};
-        String BDT[] = new String[] {"\u5b5f\u52a0\u62c9\u65f6\u95f4", "BDT",
-                                     "\u5b5f\u52a0\u62c9\u590f\u4ee4\u65f6", "BDST"};
-        String BRISBANE[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u6606\u58eb\u5170\uff09", "EST",
-                                          "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u6606\u58eb\u5170\uff09", "EST"};
-        String BROKEN_HILL[] = new String[] {"\u4e2d\u592e\u6807\u51c6\u65f6\u95f4\uff08\u5357\u6fb3\u5927\u5229\u4e9a/\u65b0\u5357\u5a01\u5c14\u65af\uff09", "CST",
-                                             "\u4e2d\u592e\u590f\u4ee4\u65f6\uff08\u5357\u6fb3\u5927\u5229\u4e9a/\u65b0\u5357\u5a01\u5c14\u65af\uff09", "CST"};
-        String BRT[] = new String[] {"\u5df4\u897f\u5229\u4e9a\u65f6\u95f4", "BRT",
-                                     "\u5df4\u897f\u5229\u4e9a\u590f\u4ee4\u65f6", "BRST"};
-        String BTT[] = new String[] {"\u4e0d\u4e39\u65f6\u95f4", "BTT",
-                                     "\u4e0d\u4e39\u590f\u4ee4\u65f6", "BTST"};
-        String CAT[] = new String[] {"\u4e2d\u975e\u65f6\u95f4", "CAT",
-                                     "\u4e2d\u975e\u590f\u4ee4\u65f6", "CAST"};
-        String CET[] = new String[] {"\u4e2d\u6b27\u65f6\u95f4", "CET",
-                                     "\u4e2d\u6b27\u590f\u4ee4\u65f6", "CEST"};
-        String CHAST[] = new String[] {"\u67e5\u8428\u59c6\u6807\u51c6\u65f6\u95f4", "CHAST",
-                                       "\u67e5\u8428\u59c6\u590f\u4ee4\u65f6", "CHADT"};
-        String ChST[] = new String[] {"Chamorro \u6807\u51c6\u65f6\u95f4", "ChST",
-                                      "Chamorro \u590f\u4ee4\u65f6", "ChDT"};
-        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
-                                      "Chuuk Summer Time", "CHUST"};
-        String CIT[] = new String[] {"\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "CIT",
-                                     "\u4e2d\u90e8\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "CIST"};
-        String CLT[] = new String[] {"\u667a\u5229\u65f6\u95f4", "CLT",
-                                     "\u667a\u5229\u590f\u4ee4\u65f6", "CLST"};
-        String CST[] = new String[] {"\u4e2d\u592e\u6807\u51c6\u65f6\u95f4", "CST",
-                                     "\u4e2d\u592e\u590f\u4ee4\u65f6", "CDT"};
-        String CTT[] = new String[] {"\u4e2d\u56fd\u6807\u51c6\u65f6\u95f4", "CST",
-                                     "\u4e2d\u56fd\u590f\u4ee4\u65f6", "CDT"};
-        String CUBA[] = new String[] {"\u53e4\u5df4\u6807\u51c6\u65f6\u95f4", "CST",
-                                      "\u53e4\u5df4\u590f\u4ee4\u65f6", "CDT"};
-        String DARWIN[] = new String[] {"\u4e2d\u592e\u6807\u51c6\u65f6\u95f4\uff08\u5317\u9886\u5730\uff09", "CST",
-                                        "\u4e2d\u592e\u590f\u4ee4\u65f6\uff08\u5317\u9886\u5730\uff09", "CST"};
-        String DUBLIN[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT",
-                                        "\u7231\u5c14\u5170\u590f\u4ee4\u65f6", "IST"};
-        String EAT[] = new String[] {"\u4e1c\u975e\u65f6\u95f4", "EAT",
-                                     "\u4e1c\u975e\u590f\u4ee4\u65f6", "EAST"};
-        String EASTER[] = new String[] {"\u590d\u6d3b\u5c9b\u65f6\u95f4", "EAST",
-                                        "\u590d\u6d3b\u5c9b\u590f\u4ee4\u65f6", "EASST"};
-        String EET[] = new String[] {"\u4e1c\u6b27\u65f6\u95f4", "EET",
-                                     "\u4e1c\u6b27\u590f\u4ee4\u65f6", "EEST"};
-        String EGT[] = new String[] {"\u4e1c\u683c\u6797\u5c9b\u65f6\u95f4", "EGT",
-                                     "\u4e1c\u683c\u6797\u5c9b\u590f\u4ee4\u65f6", "EGST"};
-        String EST[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4", "EST",
-                                     "\u4e1c\u90e8\u590f\u4ee4\u65f6", "EDT"};
-        String EST_NSW[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u65b0\u5357\u5a01\u5c14\u65af\uff09", "EST",
-                                         "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u65b0\u5357\u5a01\u5c14\u65af\uff09", "EST"};
-        String FET[] = new String[] {"Further-eastern European Time", "FET",
-                                     "Further-eastern European Summer Time", "FEST"};
-        String GHMT[] = new String[] {"\u52a0\u7eb3\u65f6\u95f4", "GMT",
-                                     "\u52a0\u7eb3\u590f\u4ee4\u65f6", "GHST"};
-        String GAMBIER[] =  new String[] {"\u5188\u6bd4\u4e9a\u65f6\u95f4", "GAMT",
-                                          "\u5188\u6bd4\u4e9a\u590f\u4ee4\u65f6", "GAMST"};
-        String GMT[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT",
-                                     "\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT"};
-        String GMTBST[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT",
-                                        "\u82f1\u56fd\u590f\u4ee4\u65f6", "BST"};
-        String GST[] = new String[] {"\u6ce2\u65af\u6e7e\u6807\u51c6\u65f6\u95f4", "GST",
-                                     "\u6ce2\u65af\u6e7e\u590f\u4ee4\u65f6", "GDT"};
-        String HAST[] = new String[] {"\u590f\u5a01\u5937-\u963f\u7559\u7533\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "HAST",
-                                      "\u590f\u5a01\u5937-\u963f\u7559\u7533\u7fa4\u5c9b\u590f\u4ee4\u65f6", "HADT"};
-        String HKT[] =  new String[] {"\u9999\u6e2f\u65f6\u95f4", "HKT",
-                                      "\u9999\u6e2f\u590f\u4ee4\u65f6", "HKST"};
-        String HST[] = new String[] {"\u590f\u5a01\u5937\u6807\u51c6\u65f6\u95f4", "HST",
-                                     "\u590f\u5a01\u5937\u590f\u4ee4\u65f6", "HDT"};
-        String ICT[] = new String[] {"\u5370\u5ea6\u652f\u90a3\u65f6\u95f4", "ICT",
-                                     "\u5370\u5ea6\u652f\u90a3\u590f\u4ee4\u65f6", "ICST"};
-        String IRT[] = new String[] {"\u4f0a\u6717\u6807\u51c6\u65f6\u95f4", "IRST",
-                                     "\u4f0a\u6717\u590f\u4ee4\u65f6", "IRDT"};
-        String ISRAEL[] = new String[] {"\u4ee5\u8272\u5217\u6807\u51c6\u65f6\u95f4", "IST",
-                                        "\u4ee5\u8272\u5217\u590f\u4ee4\u65f6", "IDT"};
-        String IST[] = new String[] {"\u5370\u5ea6\u6807\u51c6\u65f6\u95f4", "IST",
-                                     "\u5370\u5ea6\u590f\u4ee4\u65f6", "IDT"};
-        String JST[] = new String[] {"\u65e5\u672c\u6807\u51c6\u65f6\u95f4", "JST",
-                                     "\u65e5\u672c\u590f\u4ee4\u65f6", "JDT"};
-        String KST[] = new String[] {"\u97e9\u56fd\u6807\u51c6\u65f6\u95f4", "KST",
-                                     "\u97e9\u56fd\u590f\u4ee4\u65f6", "KDT"};
-        String LORD_HOWE[] = new String[] {"\u8c6a\u516c\u6807\u51c6\u65f6\u95f4", "LHST",
-                                           "\u8c6a\u516c\u590f\u4ee4\u65f6", "LHST"};
-        String MHT[] = new String[] {"\u9a6c\u7ecd\u5c14\u7fa4\u5c9b\u65f6\u95f4", "MHT",
-                                     "\u9a6c\u7ecd\u5c14\u7fa4\u5c9b\u590f\u4ee4\u65f6", "MHST"};
-        String MSK[] = new String[] {"\u83ab\u65af\u79d1\u6807\u51c6\u65f6\u95f4", "MSK",
-                                     "\u83ab\u65af\u79d1\u590f\u4ee4\u65f6", "MSD"};
-        String MST[] = new String[] {"Mountain \u6807\u51c6\u65f6\u95f4", "MST",
-                                     "Mountain \u590f\u4ee4\u65f6", "MDT"};
-        String MYT[] = new String[] {"\u9a6c\u6765\u897f\u4e9a\u65f6\u95f4", "MYT",
-                                     "\u9a6c\u6765\u897f\u4e9a\u590f\u4ee4\u65f6", "MYST"};
-        String NORONHA[] = new String[] {"\u8d39\u5c14\u5357\u591a\u5fb7\u8bfa\u7f57\u5c3c\u4e9a\u65f6\u95f4", "FNT",
-                                         "\u8d39\u5c14\u5357\u591a\u5fb7\u8bfa\u7f57\u5c3c\u4e9a\u590f\u4ee4\u65f6", "FNST"};
-        String NOVT[] = new String[] {"Novosibirsk \u65f6\u95f4", "NOVT",
-                                      "Novosibirsk \u590f\u4ee4\u65f6", "NOVST"};
-        String NPT[] = new String[] {"\u5c3c\u6cca\u5c14\u65f6\u95f4", "NPT",
-                                     "\u5c3c\u6cca\u5c14\u590f\u4ee4\u65f6", "NPST"};
-        String NST[] = new String[] {"\u7ebd\u82ac\u5170\u6807\u51c6\u65f6\u95f4", "NST",
-                                     "\u7ebd\u82ac\u5170\u590f\u4ee4\u65f6", "NDT"};
-        String NZST[] = new String[] {"\u65b0\u897f\u5170\u6807\u51c6\u65f6\u95f4", "NZST",
-                                      "\u65b0\u897f\u5170\u590f\u4ee4\u65f6", "NZDT"};
-        String PITCAIRN[] = new String[] {"\u76ae\u7279\u5eb7\u5c9b\u6807\u51c6\u65f6\u95f4", "PST",
-                                          "\u76ae\u7279\u5eb7\u5c9b\u590f\u4ee4\u65f6", "PDT"};
-        String PKT[] = new String[] {"\u5df4\u57fa\u65af\u5766\u65f6\u95f4", "PKT",
-                                     "\u5df4\u57fa\u65af\u5766\u590f\u4ee4\u65f6", "PKST"};
-        String PONT[] = new String[] {"Pohnpei Time", "PONT",
-                                      "Pohnpei Summer Time", "PONST"};
-        String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4", "PST",
-                                     "\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6", "PDT"};
-        String SAMOA[] = new String[] {"\u8428\u6469\u4e9a\u7fa4\u5c9b\u6807\u51c6\u65f6\u95f4", "SST",
-                                       "\u8428\u6469\u4e9a\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SDT"};
-        String SAST[] = new String[] {"\u5357\u975e\u6807\u51c6\u65f6\u95f4", "SAST",
-                                      "\u5357\u975e\u590f\u4ee4\u65f6", "SAST"};
-        String SBT[] = new String[] {"\u6240\u7f57\u95e8\u7fa4\u5c9b\u65f6\u95f4", "SBT",
-                                     "\u6240\u7f57\u95e8\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SBST"};
-        String SGT[] = new String[] {"\u65b0\u52a0\u5761\u65f6\u95f4", "SGT",
-                                     "\u65b0\u52a0\u5761\u590f\u4ee4\u65f6", "SGST"};
-        String SLST[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u65f6\u95f4", "GMT",
-                                      "\u585e\u62c9\u5229\u6602\u590f\u4ee4\u65f6", "SLST"};
-        String TASMANIA[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u5854\u65af\u9a6c\u5c3c\u4e9a\uff09", "EST",
-                                          "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u5854\u65af\u9a6c\u5c3c\u4e9a\uff09", "EST"};
-        String TMT[] = new String[] {"\u571f\u5e93\u66fc\u65f6\u95f4", "TMT",
-                                     "\u571f\u5e93\u66fc\u590f\u4ee4\u65f6", "TMST"};
-        String ULAT[]= new String[] {"\u5e93\u4f26\u65f6\u95f4", "ULAT",
-                                     "\u5e93\u4f26\u590f\u4ee4\u65f6", "ULAST"};
-        String UTC[] = new String[] {"\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC",
-                                     "\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC"};
-        String UZT[] = new String[] {"\u4e4c\u5179\u522b\u514b\u65af\u5766\u65f6\u95f4", "UZT",
-                                     "\u4e4c\u5179\u522b\u514b\u65af\u5766\u590f\u4ee4\u65f6", "UZST"};
-        String VICTORIA[] = new String[] {"\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST",
-                                          "\u4e1c\u90e8\u590f\u4ee4\u65f6\uff08\u7ef4\u591a\u5229\u4e9a\uff09", "EST"};
-        String VLAT[] = new String[] {"\u6d77\u53c2\u5d34\u65f6\u95f4", "VLAT",
-                                      "\u6d77\u53c2\u5d34\u590f\u4ee4\u65f6", "VLAST"};
-        String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u65f6\u95f4", "WART",
-                                      "\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u65f6", "WARST"};
-        String WAT[] = new String[] {"\u897f\u975e\u65f6\u95f4", "WAT",
-                                     "\u897f\u975e\u590f\u4ee4\u65f6", "WAST"};
-        String WET[] = new String[] {"\u897f\u6b27\u65f6\u95f4", "WET",
-                                     "\u897f\u6b27\u590f\u4ee4\u65f6", "WEST"};
-        String WIT[] = new String[] {"\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "WIT",
-                                     "\u897f\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "WIST"};
-        String WST_AUS[] = new String[] {"\u897f\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "WST",
-                                         "\u897f\u90e8\u590f\u4ee4\u65f6\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "WST"};
-        String WST_SAMOA[] = new String[] {"\u897f\u8428\u6469\u4e9a\u65f6\u95f4", "WST",
-                                           "\u897f\u8428\u6469\u4e9a\u590f\u4ee4\u65f6", "WSDT"};
-        String YAKT[] = new String[] {"\u4e9a\u5e93\u6b21\u514b\u65f6\u95f4", "YAKT",
-                                      "\u4e9a\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "YAKST"};
-
-        return new Object[][] {
-            {"America/Los_Angeles", PST},
-            {"PST", PST},
-            {"America/Denver", MST},
-            {"MST", MST},
-            {"America/Phoenix", MST},
-            {"PNT", MST},
-            {"America/Chicago", CST},
-            {"CST", CST},
-            {"America/New_York", EST},
-            {"EST", EST},
-            {"America/Indianapolis", EST},
-            {"IET", EST},
-            {"Pacific/Honolulu", HST},
-            {"HST", HST},
-            {"America/Anchorage", AKST},
-            {"AST", AKST},
-            {"America/Halifax", AST},
-            {"America/Sitka", AKST},
-            {"America/St_Johns", NST},
-            {"CNT", NST},
-            {"Europe/Paris", CET},
-            {"ECT", CET},
-            {"GMT", GMT},
-            {"Africa/Casablanca", WET},
-            {"Asia/Jerusalem", ISRAEL},
-            {"Asia/Tokyo", JST},
-            {"JST", JST},
-            {"Europe/Bucharest", EET},
-            {"Asia/Shanghai", CTT},
-            {"CTT", CTT},
-            /* Don't change the order of the above zones
-             * to keep compatibility with the previous version.
-             */
-
-            {"ACT", DARWIN},
-            {"AET", EST_NSW},
-            {"AGT", AGT},
-            {"ART", EET},
-            {"Africa/Abidjan", GMT},
-            {"Africa/Accra", GHMT},
-            {"Africa/Addis_Ababa", EAT},
-            {"Africa/Algiers", CET},
-            {"Africa/Asmara", EAT},
-            {"Africa/Asmera", EAT},
-            {"Africa/Bamako", GMT},
-            {"Africa/Bangui", WAT},
-            {"Africa/Banjul", GMT},
-            {"Africa/Bissau", GMT},
-            {"Africa/Blantyre", CAT},
-            {"Africa/Brazzaville", WAT},
-            {"Africa/Bujumbura", CAT},
-            {"Africa/Cairo", EET},
-            {"Africa/Ceuta", CET},
-            {"Africa/Conakry", GMT},
-            {"Africa/Dakar", GMT},
-            {"Africa/Dar_es_Salaam", EAT},
-            {"Africa/Djibouti", EAT},
-            {"Africa/Douala", WAT},
-            {"Africa/El_Aaiun", WET},
-            {"Africa/Freetown", SLST},
-            {"Africa/Gaborone", CAT},
-            {"Africa/Harare", CAT},
-            {"Africa/Johannesburg", SAST},
-            {"Africa/Juba", EAT},
-            {"Africa/Kampala", EAT},
-            {"Africa/Khartoum", EAT},
-            {"Africa/Kigali", CAT},
-            {"Africa/Kinshasa", WAT},
-            {"Africa/Lagos", WAT},
-            {"Africa/Libreville", WAT},
-            {"Africa/Lome", GMT},
-            {"Africa/Luanda", WAT},
-            {"Africa/Lubumbashi", CAT},
-            {"Africa/Lusaka", CAT},
-            {"Africa/Malabo", WAT},
-            {"Africa/Maputo", CAT},
-            {"Africa/Maseru", SAST},
-            {"Africa/Mbabane", SAST},
-            {"Africa/Mogadishu", EAT},
-            {"Africa/Monrovia", GMT},
-            {"Africa/Nairobi", EAT},
-            {"Africa/Ndjamena", WAT},
-            {"Africa/Niamey", WAT},
-            {"Africa/Nouakchott", GMT},
-            {"Africa/Ouagadougou", GMT},
-            {"Africa/Porto-Novo", WAT},
-            {"Africa/Sao_Tome", GMT},
-            {"Africa/Timbuktu", GMT},
-            {"Africa/Tripoli", CET},
-            {"Africa/Tunis", CET},
-            {"Africa/Windhoek", WAT},
-            {"America/Adak", HAST},
-            {"America/Anguilla", AST},
-            {"America/Antigua", AST},
-            {"America/Araguaina", BRT},
-            {"America/Argentina/Buenos_Aires", AGT},
-            {"America/Argentina/Catamarca", AGT},
-            {"America/Argentina/ComodRivadavia", AGT},
-            {"America/Argentina/Cordoba", AGT},
-            {"America/Argentina/Jujuy", AGT},
-            {"America/Argentina/La_Rioja", AGT},
-            {"America/Argentina/Mendoza", AGT},
-            {"America/Argentina/Rio_Gallegos", AGT},
-            {"America/Argentina/Salta", AGT},
-            {"America/Argentina/San_Juan", AGT},
-            {"America/Argentina/San_Luis", WART},
-            {"America/Argentina/Tucuman", AGT},
-            {"America/Argentina/Ushuaia", AGT},
-            {"America/Aruba", AST},
-            {"America/Asuncion", new String[] {"\u5df4\u62c9\u572d\u65f6\u95f4", "PYT",
-                                               "\u5df4\u62c9\u572d\u590f\u4ee4\u65f6", "PYST"}},
-            {"America/Atikokan", EST},
-            {"America/Atka", HAST},
-            {"America/Bahia", BRT},
-            {"America/Bahia_Banderas", CST},
-            {"America/Barbados", AST},
-            {"America/Belem", BRT},
-            {"America/Belize", CST},
-            {"America/Blanc-Sablon", AST},
-            {"America/Boa_Vista", AMT},
-            {"America/Bogota", new String[] {"\u54e5\u4f26\u6bd4\u4e9a\u65f6\u95f4", "COT",
-                                             "\u54e5\u4f26\u6bd4\u4e9a\u590f\u4ee4\u65f6", "COST"}},
-            {"America/Boise", MST},
-            {"America/Buenos_Aires", AGT},
-            {"America/Cambridge_Bay", MST},
-            {"America/Campo_Grande", AMT},
-            {"America/Cancun", CST},
-            {"America/Caracas", new String[] {"\u59d4\u5185\u745e\u62c9\u65f6\u95f4", "VET",
-                                              "\u59d4\u5185\u745e\u62c9\u590f\u4ee4\u65f6", "VEST"}},
-            {"America/Catamarca", AGT},
-            {"America/Cayenne", new String[] {"\u6cd5\u5c5e\u572d\u4e9a\u90a3\u65f6\u95f4", "GFT",
-                                              "\u6cd5\u5c5e\u572d\u4e9a\u90a3\u590f\u4ee4\u65f6", "GFST"}},
-            {"America/Cayman", EST},
-            {"America/Chihuahua", MST},
-            {"America/Creston", MST},
-            {"America/Coral_Harbour", EST},
-            {"America/Cordoba", AGT},
-            {"America/Costa_Rica", CST},
-            {"America/Cuiaba", AMT},
-            {"America/Curacao", AST},
-            {"America/Danmarkshavn", GMT},
-            {"America/Dawson", PST},
-            {"America/Dawson_Creek", MST},
-            {"America/Detroit", EST},
-            {"America/Dominica", AST},
-            {"America/Edmonton", MST},
-            {"America/Eirunepe", AMT},
-            {"America/El_Salvador", CST},
-            {"America/Ensenada", PST},
-            {"America/Fort_Wayne", EST},
-            {"America/Fortaleza", BRT},
-            {"America/Glace_Bay", AST},
-            {"America/Godthab", new String[] {"\u897f\u683c\u6797\u5170\u5c9b\u65f6\u95f4", "WGT",
-                                              "\u897f\u683c\u6797\u5170\u5c9b\u590f\u4ee4\u65f6", "WGST"}},
-            {"America/Goose_Bay", AST},
-            {"America/Grand_Turk", EST},
-            {"America/Grenada", AST},
-            {"America/Guadeloupe", AST},
-            {"America/Guatemala", CST},
-            {"America/Guayaquil", new String[] {"\u5384\u74dc\u591a\u5c14\u65f6\u95f4", "ECT",
-                                                "\u5384\u74dc\u591a\u5c14\u590f\u4ee4\u65f6", "ECST"}},
-            {"America/Guyana", new String[] {"\u572d\u4e9a\u90a3\u65f6\u95f4", "GYT",
-                                             "\u572d\u4e9a\u90a3\u590f\u4ee4\u65f6", "GYST"}},
-            {"America/Havana", CUBA},
-            {"America/Hermosillo", MST},
-            {"America/Indiana/Indianapolis", EST},
-            {"America/Indiana/Knox", CST},
-            {"America/Indiana/Marengo", EST},
-            {"America/Indiana/Petersburg", EST},
-            {"America/Indiana/Tell_City", CST},
-            {"America/Indiana/Vevay", EST},
-            {"America/Indiana/Vincennes", EST},
-            {"America/Indiana/Winamac", EST},
-            {"America/Inuvik", MST},
-            {"America/Iqaluit", EST},
-            {"America/Jamaica", EST},
-            {"America/Jujuy", AGT},
-            {"America/Juneau", AKST},
-            {"America/Kentucky/Louisville", EST},
-            {"America/Kentucky/Monticello", EST},
-            {"America/Knox_IN", CST},
-            {"America/Kralendijk", AST},
-            {"America/La_Paz", new String[] {"\u73bb\u5229\u7ef4\u4e9a\u65f6\u95f4", "BOT",
-                                             "\u73bb\u5229\u7ef4\u4e9a\u590f\u4ee4\u65f6", "BOST"}},
-            {"America/Lima", new String[] {"\u79d8\u9c81\u65f6\u95f4", "PET",
-                                           "\u79d8\u9c81\u590f\u4ee4\u65f6", "PEST"}},
-            {"America/Louisville", EST},
-            {"America/Lower_Princes", AST},
-            {"America/Maceio", BRT},
-            {"America/Managua", CST},
-            {"America/Manaus", AMT},
-            {"America/Marigot", AST},
-            {"America/Martinique", AST},
-            {"America/Matamoros", CST},
-            {"America/Mazatlan", MST},
-            {"America/Mendoza", AGT},
-            {"America/Menominee", CST},
-            {"America/Merida", CST},
-            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
-                                                 "Metlakatla Daylight Time", "MeDT"}},
-            {"America/Mexico_City", CST},
-            {"America/Miquelon", new String[] {"\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u6807\u51c6\u65f6\u95f4", "PMST",
-                                               "\u76ae\u57c3\u5c14\u5c9b\u53ca\u5bc6\u514b\u9686\u5c9b\u590f\u4ee4\u65f6", "PMDT"}},
-            {"America/Moncton", AST},
-            {"America/Montevideo", new String[] {"\u4e4c\u62c9\u572d\u65f6\u95f4", "UYT",
-                                                 "\u4e4c\u62c9\u572d\u590f\u4ee4\u65f6", "UYST"}},
-            {"America/Monterrey", CST},
-            {"America/Montreal", EST},
-            {"America/Montserrat", AST},
-            {"America/Nassau", EST},
-            {"America/Nipigon", EST},
-            {"America/Nome", AKST},
-            {"America/Noronha", NORONHA},
-            {"America/North_Dakota/Beulah", CST},
-            {"America/North_Dakota/Center", CST},
-            {"America/North_Dakota/New_Salem", CST},
-            {"America/Ojinaga", MST},
-            {"America/Panama", EST},
-            {"America/Pangnirtung", EST},
-            {"America/Paramaribo", new String[] {"\u82cf\u5229\u5357\u65f6\u95f4", "SRT",
-                                                 "\u82cf\u5229\u5357\u590f\u4ee4\u65f6", "SRST"}},
-            {"America/Port-au-Prince", EST},
-            {"America/Port_of_Spain", AST},
-            {"America/Porto_Acre", AMT},
-            {"America/Porto_Velho", AMT},
-            {"America/Puerto_Rico", AST},
-            {"America/Rainy_River", CST},
-            {"America/Rankin_Inlet", CST},
-            {"America/Recife", BRT},
-            {"America/Regina", CST},
-            {"America/Resolute", CST},
-            {"America/Rio_Branco", AMT},
-            {"America/Rosario", AGT},
-            {"America/Santa_Isabel", PST},
-            {"America/Santarem", BRT},
-            {"America/Santiago", CLT},
-            {"America/Santo_Domingo", AST},
-            {"America/Sao_Paulo", BRT},
-            {"America/Scoresbysund", EGT},
-            {"America/Shiprock", MST},
-            {"America/St_Barthelemy", AST},
-            {"America/St_Kitts", AST},
-            {"America/St_Lucia", AST},
-            {"America/St_Thomas", AST},
-            {"America/St_Vincent", AST},
-            {"America/Swift_Current", CST},
-            {"America/Tegucigalpa", CST},
-            {"America/Thule", AST},
-            {"America/Thunder_Bay", EST},
-            {"America/Tijuana", PST},
-            {"America/Toronto", EST},
-            {"America/Tortola", AST},
-            {"America/Vancouver", PST},
-            {"America/Virgin", AST},
-            {"America/Whitehorse", PST},
-            {"America/Winnipeg", CST},
-            {"America/Yakutat", AKST},
-            {"America/Yellowknife", MST},
-            {"Antarctica/Casey", WST_AUS},
-            {"Antarctica/Davis", new String[] {"\u6234\u7ef4\u65af\u65f6\u95f4", "DAVT",
-                                               "\u6234\u7ef4\u65af\u590f\u4ee4\u65f6", "DAVST"}},
-            {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u65f6\u95f4", "DDUT",
-                                                        "Dumont-d'Urville \u590f\u4ee4\u65f6", "DDUST"}},
-            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
-                                                   "Macquarie Island Summer Time", "MIST"}},
-            {"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u65f6\u95f4", "MAWT",
-                                                "\u83ab\u68ee\u590f\u4ee4\u65f6", "MAWST"}},
-            {"Antarctica/McMurdo", NZST},
-            {"Antarctica/Palmer", CLT},
-            {"Antarctica/Rothera", new String[] {"\u7f57\u745f\u62c9\u65f6\u95f4", "ROTT",
-                                                 "\u7f57\u745f\u62c9\u590f\u4ee4\u65f6", "ROTST"}},
-            {"Antarctica/South_Pole", NZST},
-            {"Antarctica/Syowa", new String[] {"Syowa \u65f6\u95f4", "SYOT",
-                                               "Syowa \u590f\u4ee4\u65f6", "SYOST"}},
-            {"Antarctica/Vostok", new String[] {"\u83ab\u65af\u6258\u514b\u65f6\u95f4", "VOST",
-                                                "\u83ab\u65af\u6258\u514b\u590f\u4ee4\u65f6", "VOSST"}},
-            {"Arctic/Longyearbyen", CET},
-            {"Asia/Aden", ARAST},
-            {"Asia/Almaty", new String[] {"Alma-Ata \u65f6\u95f4", "ALMT",
-                                          "Alma-Ata \u590f\u4ee4\u65f6", "ALMST"}},
-            {"Asia/Amman", EET},
-            {"Asia/Anadyr", new String[] {"\u963f\u90a3\u5e95\u6cb3\u65f6\u95f4", "ANAT",
-                                          "\u963f\u90a3\u5e95\u6cb3\u590f\u4ee4\u65f6", "ANAST"}},
-            {"Asia/Aqtau", new String[] {"Aqtau \u65f6\u95f4", "AQTT",
-                                         "Aqtau \u590f\u4ee4\u65f6", "AQTST"}},
-            {"Asia/Aqtobe", new String[] {"Aqtobe \u65f6\u95f4", "AQTT",
-                                          "Aqtobe \u590f\u4ee4\u65f6", "AQTST"}},
-            {"Asia/Ashgabat", TMT},
-            {"Asia/Ashkhabad", TMT},
-            {"Asia/Baghdad", ARAST},
-            {"Asia/Bahrain", ARAST},
-            {"Asia/Baku", new String[] {"\u4e9a\u585e\u62dc\u7136\u65f6\u95f4", "AZT",
-                                        "\u4e9a\u585e\u62dc\u7136\u590f\u4ee4\u65f6", "AZST"}},
-            {"Asia/Bangkok", ICT},
-            {"Asia/Beirut", EET},
-            {"Asia/Bishkek", new String[] {"\u5409\u5c14\u5409\u65af\u65af\u5766\u65f6\u95f4", "KGT",
-                                           "\u5409\u5c14\u5409\u65af\u65af\u5766\u590f\u4ee4\u65f6", "KGST"}},
-            {"Asia/Brunei", new String[] {"\u6587\u83b1\u65f6\u95f4", "BNT",
-                                          "\u6587\u83b1\u590f\u4ee4\u65f6", "BNST"}},
-            {"Asia/Calcutta", IST},
-            {"Asia/Choibalsan", new String[] {"Choibalsan \u65f6\u95f4", "CHOT",
-                                              "Choibalsan \u590f\u4ee4\u65f6", "CHOST"}},
-            {"Asia/Chongqing", CTT},
-            {"Asia/Chungking", CTT},
-            {"Asia/Colombo", IST},
-            {"Asia/Dacca", BDT},
-            {"Asia/Dhaka", BDT},
-            {"Asia/Dili", new String[] {"\u4e1c\u5e1d\u6c76\u65f6\u95f4", "TLT",
-                                        "\u4e1c\u5e1d\u6c76\u590f\u4ee4\u65f6", "TLST"}},
-            {"Asia/Damascus", EET},
-            {"Asia/Dubai", GST},
-            {"Asia/Dushanbe", new String[] {"\u5854\u5409\u514b\u65af\u5766\u65f6\u95f4", "TJT",
-                                            "\u5854\u5409\u514b\u65af\u5766\u590f\u4ee4\u65f6", "TJST"}},
-            {"Asia/Gaza", EET},
-            {"Asia/Harbin", CTT},
-            {"Asia/Hebron", EET},
-            {"Asia/Ho_Chi_Minh", ICT},
-            {"Asia/Hong_Kong", HKT},
-            {"Asia/Hovd", new String[] {"\u79d1\u5e03\u591a\u65f6\u95f4", "HOVT",
-                                        "\u79d1\u5e03\u591a\u590f\u4ee4\u65f6", "HOVST"}},
-            {"Asia/Irkutsk", new String[] {"\u4f0a\u5c14\u5e93\u6b21\u514b\u65f6\u95f4", "IRKT",
-                                           "\u4f0a\u5c14\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "IRKST"}},
-            {"Asia/Istanbul", EET},
-            {"Asia/Jakarta", WIT},
-            {"Asia/Jayapura", new String[] {"\u4e1c\u5370\u5ea6\u5c3c\u897f\u4e9a\u65f6\u95f4", "EIT",
-                                            "\u4e1c\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "EIST"}},
-            {"Asia/Kabul", new String[] {"\u963f\u5bcc\u6c57\u65f6\u95f4", "AFT",
-                                         "\u963f\u5bcc\u6c57\u590f\u4ee4\u65f6", "AFST"}},
-            {"Asia/Kamchatka", new String[] {"\u5f7c\u5f97\u7f57\u5df4\u752b\u6d1b\u592b\u65af\u514b\u65f6\u95f4", "PETT",
-                                             "\u5f7c\u5f97\u7f57\u5df4\u752b\u6d1b\u592b\u65af\u514b\u590f\u4ee4\u65f6", "PETST"}},
-            {"Asia/Karachi", PKT},
-            {"Asia/Kashgar", CTT},
-            {"Asia/Kathmandu", NPT},
-            {"Asia/Katmandu", NPT},
-            {"Asia/Khandyga", YAKT},
-            {"Asia/Kolkata", IST},
-            {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u65f6\u95f4", "KRAT",
-                                               "\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u590f\u4ee4\u65f6", "KRAST"}},
-            {"Asia/Kuala_Lumpur", MYT},
-            {"Asia/Kuching", MYT},
-            {"Asia/Kuwait", ARAST},
-            {"Asia/Macao", CTT},
-            {"Asia/Macau", CTT},
-            {"Asia/Magadan", new String[] {"Magadan \u65f6\u95f4", "MAGT",
-                                           "Magadan \u590f\u4ee4\u65f6", "MAGST"}},
-            {"Asia/Makassar", CIT},
-            {"Asia/Manila", new String[] {"\u83f2\u5f8b\u5bbe\u65f6\u95f4", "PHT",
-                                          "\u83f2\u5f8b\u5bbe\u590f\u4ee4\u65f6", "PHST"}},
-            {"Asia/Muscat", GST},
-            {"Asia/Nicosia", EET},
-            {"Asia/Novokuznetsk", NOVT},
-            {"Asia/Novosibirsk", NOVT},
-            {"Asia/Oral", new String[] {"Oral \u65f6\u95f4", "ORAT",
-                                        "Oral \u590f\u4ee4\u65f6", "ORAST"}},
-            {"Asia/Omsk", new String[] {"\u9102\u6728\u65af\u514b\u65f6\u95f4", "OMST",
-                                        "\u9102\u6728\u65af\u514b\u590f\u4ee4\u65f6", "OMSST"}},
-            {"Asia/Phnom_Penh", ICT},
-            {"Asia/Pontianak", WIT},
-            {"Asia/Pyongyang", KST},
-            {"Asia/Qatar", ARAST},
-            {"Asia/Qyzylorda", new String[] {"Qyzylorda \u65f6\u95f4", "QYZT",
-                                             "Qyzylorda \u590f\u4ee4\u65f6", "QYZST"}},
-            {"Asia/Rangoon", new String[] {"\u7f05\u7538\u65f6\u95f4", "MMT",
-                                           "\u7f05\u7538\u590f\u4ee4\u65f6", "MMST"}},
-            {"Asia/Riyadh", ARAST},
-            {"Asia/Saigon", ICT},
-            {"Asia/Sakhalin", new String[] {"\u5e93\u9875\u5c9b\u65f6\u95f4", "SAKT",
-                                            "\u5e93\u9875\u5c9b\u590f\u4ee4\u65f6", "SAKST"}},
-            {"Asia/Samarkand", UZT},
-            {"Asia/Seoul", KST},
-            {"Asia/Singapore", SGT},
-            {"Asia/Taipei", CTT},
-            {"Asia/Tel_Aviv", ISRAEL},
-            {"Asia/Tashkent", UZT},
-            {"Asia/Tbilisi", new String[] {"\u4e54\u6cbb\u4e9a\u65f6\u95f4", "GET",
-                                           "\u4e54\u6cbb\u4e9a\u590f\u4ee4\u65f6", "GEST"}},
-            {"Asia/Tehran", IRT},
-            {"Asia/Thimbu", BTT},
-            {"Asia/Thimphu", BTT},
-            {"Asia/Ujung_Pandang", CIT},
-            {"Asia/Ulaanbaatar", ULAT},
-            {"Asia/Ulan_Bator", ULAT},
-            {"Asia/Urumqi", CTT},
-            {"Asia/Ust-Nera", VLAT},
-            {"Asia/Vientiane", ICT},
-            {"Asia/Vladivostok", VLAT},
-            {"Asia/Yakutsk", YAKT},
-            {"Asia/Yekaterinburg", new String[] {"Yekaterinburg \u65f6\u95f4", "YEKT",
-                                                 "Yekaterinburg \u590f\u4ee4\u65f6", "YEKST"}},
-            {"Asia/Yerevan", ARMT},
-            {"Atlantic/Azores", new String[] {"\u4e9a\u901f\u5c14\u7fa4\u5c9b\u65f6\u95f4", "AZOT",
-                                              "\u4e9a\u901f\u5c14\u7fa4\u5c9b\u590f\u4ee4\u65f6", "AZOST"}},
-            {"Atlantic/Bermuda", AST},
-            {"Atlantic/Canary", WET},
-            {"Atlantic/Cape_Verde", new String[] {"\u4f5b\u5fb7\u89d2\u65f6\u95f4", "CVT",
-                                                  "\u4f5b\u5fb7\u89d2\u590f\u4ee4\u65f6", "CVST"}},
-            {"Atlantic/Faeroe", WET},
-            {"Atlantic/Faroe", WET},
-            {"Atlantic/Jan_Mayen", CET},
-            {"Atlantic/Madeira", WET},
-            {"Atlantic/Reykjavik", GMT},
-            {"Atlantic/South_Georgia", new String[] {"\u5357\u4e54\u6cbb\u4e9a\u6807\u51c6\u65f6\u95f4", "GST",
-                                                     "\u5357\u4e54\u6cbb\u4e9a\u590f\u4ee4\u65f6", "GDT"}},
-            {"Atlantic/St_Helena", GMT},
-            {"Atlantic/Stanley", new String[] {"\u798f\u514b\u5170\u7fa4\u5c9b\u65f6\u95f4", "FKT",
-                                               "\u798f\u514b\u5170\u7fa4\u5c9b\u590f\u4ee4\u65f6", "FKST"}},
-            {"Australia/ACT", EST_NSW},
-            {"Australia/Adelaide", ADELAIDE},
-            {"Australia/Brisbane", BRISBANE},
-            {"Australia/Broken_Hill", BROKEN_HILL},
-            {"Australia/Canberra", EST_NSW},
-            {"Australia/Currie", EST_NSW},
-            {"Australia/Darwin", DARWIN},
-            {"Australia/Eucla", new String[] {"\u4e2d\u897f\u90e8\u6807\u51c6\u65f6\u95f4\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "CWST",
-                                              "\u4e2d\u897f\u90e8\u590f\u4ee4\u65f6\uff08\u6fb3\u5927\u5229\u4e9a\uff09", "CWST"}},
-            {"Australia/Hobart", TASMANIA},
-            {"Australia/LHI", LORD_HOWE},
-            {"Australia/Lindeman", BRISBANE},
-            {"Australia/Lord_Howe", LORD_HOWE},
-            {"Australia/Melbourne", VICTORIA},
-            {"Australia/North", DARWIN},
-            {"Australia/NSW", EST_NSW},
-            {"Australia/Perth", WST_AUS},
-            {"Australia/Queensland", BRISBANE},
-            {"Australia/South", ADELAIDE},
-            {"Australia/Sydney", EST_NSW},
-            {"Australia/Tasmania", TASMANIA},
-            {"Australia/Victoria", VICTORIA},
-            {"Australia/West", WST_AUS},
-            {"Australia/Yancowinna", BROKEN_HILL},
-            {"BET", BRT},
-            {"BST", BDT},
-            {"Brazil/Acre", AMT},
-            {"Brazil/DeNoronha", NORONHA},
-            {"Brazil/East", BRT},
-            {"Brazil/West", AMT},
-            {"Canada/Atlantic", AST},
-            {"Canada/Central", CST},
-            {"Canada/East-Saskatchewan", CST},
-            {"Canada/Eastern", EST},
-            {"Canada/Mountain", MST},
-            {"Canada/Newfoundland", NST},
-            {"Canada/Pacific", PST},
-            {"Canada/Yukon", PST},
-            {"Canada/Saskatchewan", CST},
-            {"CAT", CAT},
-            {"CET", CET},
-            {"Chile/Continental", CLT},
-            {"Chile/EasterIsland", EASTER},
-            {"CST6CDT", CST},
-            {"Cuba", CUBA},
-            {"EAT", EAT},
-            {"EET", EET},
-            {"Egypt", EET},
-            {"Eire", DUBLIN},
-            {"EST5EDT", EST},
-            {"Etc/Greenwich", GMT},
-            {"Etc/UCT", UTC},
-            {"Etc/Universal", UTC},
-            {"Etc/UTC", UTC},
-            {"Etc/Zulu", UTC},
-            {"Europe/Amsterdam", CET},
-            {"Europe/Andorra", CET},
-            {"Europe/Athens", EET},
-            {"Europe/Belfast", GMTBST},
-            {"Europe/Belgrade", CET},
-            {"Europe/Berlin", CET},
-            {"Europe/Bratislava", CET},
-            {"Europe/Brussels", CET},
-            {"Europe/Budapest", CET},
-            {"Europe/Busingen", CET},
-            {"Europe/Chisinau", EET},
-            {"Europe/Copenhagen", CET},
-            {"Europe/Dublin", DUBLIN},
-            {"Europe/Gibraltar", CET},
-            {"Europe/Guernsey", GMTBST},
-            {"Europe/Helsinki", EET},
-            {"Europe/Isle_of_Man", GMTBST},
-            {"Europe/Istanbul", EET},
-            {"Europe/Jersey", GMTBST},
-            {"Europe/Kaliningrad", FET},
-            {"Europe/Kiev", EET},
-            {"Europe/Lisbon", WET},
-            {"Europe/Ljubljana", CET},
-            {"Europe/London", GMTBST},
-            {"Europe/Luxembourg", CET},
-            {"Europe/Madrid", CET},
-            {"Europe/Malta", CET},
-            {"Europe/Mariehamn", EET},
-            {"Europe/Minsk", FET},
-            {"Europe/Monaco", CET},
-            {"Europe/Moscow", MSK},
-            {"Europe/Nicosia", EET},
-            {"Europe/Oslo", CET},
-            {"Europe/Podgorica", CET},
-            {"Europe/Prague", CET},
-            {"Europe/Riga", EET},
-            {"Europe/Rome", CET},
-            {"Europe/Samara", new String[] {"\u6c99\u9a6c\u62c9\u65f6\u95f4", "SAMT",
-                                            "\u6c99\u9a6c\u62c9\u590f\u4ee4\u65f6", "SAMST"}},
-            {"Europe/San_Marino", CET},
-            {"Europe/Sarajevo", CET},
-            {"Europe/Simferopol", EET},
-            {"Europe/Skopje", CET},
-            {"Europe/Sofia", EET},
-            {"Europe/Stockholm", CET},
-            {"Europe/Tallinn", EET},
-            {"Europe/Tirane", CET},
-            {"Europe/Tiraspol", EET},
-            {"Europe/Uzhgorod", EET},
-            {"Europe/Vaduz", CET},
-            {"Europe/Vatican", CET},
-            {"Europe/Vienna", CET},
-            {"Europe/Vilnius", EET},
-            {"Europe/Volgograd", new String[] {"\u4f0f\u5c14\u52a0\u683c\u52d2\u65f6\u95f4", "VOLT",
-                                               "\u4f0f\u5c14\u52a0\u683c\u52d2\u590f\u4ee4\u65f6", "VOLST"}},
-            {"Europe/Warsaw", CET},
-            {"Europe/Zagreb", CET},
-            {"Europe/Zaporozhye", EET},
-            {"Europe/Zurich", CET},
-            {"GB", GMTBST},
-            {"GB-Eire", GMTBST},
-            {"Greenwich", GMT},
-            {"Hongkong", HKT},
-            {"Iceland", GMT},
-            {"Iran", IRT},
-            {"IST", IST},
-            {"Indian/Antananarivo", EAT},
-            {"Indian/Chagos", new String[] {"\u5370\u5ea6\u6d0b\u5730\u5e26\u65f6\u95f4", "IOT",
-                                            "\u5370\u5ea6\u6d0b\u5730\u5e26\u590f\u4ee4\u65f6", "IOST"}},
-            {"Indian/Christmas", new String[] {"\u5723\u8bde\u5c9b\u65f6\u95f4", "CXT",
-                                               "\u5723\u8bde\u5c9b\u590f\u4ee4\u65f6", "CXST"}},
-            {"Indian/Cocos", new String[] {"\u53ef\u53ef\u65af\u7fa4\u5c9b\u65f6\u95f4", "CCT",
-                                           "\u53ef\u53ef\u65af\u7fa4\u5c9b\u590f\u4ee4\u65f6", "CCST"}},
-            {"Indian/Comoro", EAT},
-            {"Indian/Kerguelen", new String[] {"\u6cd5\u5c5e\u5357\u6781\u65f6\u95f4", "TFT",
-                                               "\u6cd5\u5c5e\u5357\u6781\u590f\u4ee4\u65f6", "TFST"}},
-            {"Indian/Mahe", new String[] {"\u585e\u5e2d\u5c14\u7fa4\u5c9b\u65f6\u95f4", "SCT",
-                                          "\u585e\u5e2d\u5c14\u7fa4\u5c9b\u590f\u4ee4\u65f6", "SCST"}},
-            {"Indian/Maldives", new String[] {"\u9a6c\u5c14\u4ee3\u592b\u65f6\u95f4", "MVT",
-                                              "\u9a6c\u5c14\u4ee3\u592b\u590f\u4ee4\u65f6", "MVST"}},
-            {"Indian/Mauritius", new String[] {"\u6469\u91cc\u897f\u65af\u65f6\u95f4", "MUT",
-                                               "\u6469\u91cc\u897f\u65af\u590f\u4ee4\u65f6", "MUST"}},
-            {"Indian/Mayotte", EAT},
-            {"Indian/Reunion", new String[] {"\u7559\u5c3c\u65fa\u5c9b\u65f6\u95f4", "RET",
-                                             "\u7559\u5c3c\u65fa\u5c9b\u590f\u4ee4\u65f6", "REST"}},
-            {"Israel", ISRAEL},
-            {"Jamaica", EST},
-            {"Japan", JST},
-            {"Kwajalein", MHT},
-            {"Libya", CET},
-            {"MET", new String[] {"\u4e2d\u6b27\u65f6\u95f4", "MET",
-                                  "\u4e2d\u6b27\u590f\u4ee4\u65f6", "MEST"}},
-            {"Mexico/BajaNorte", PST},
-            {"Mexico/BajaSur", MST},
-            {"Mexico/General", CST},
-            {"MIT", WST_SAMOA},
-            {"MST7MDT", MST},
-            {"Navajo", MST},
-            {"NET", ARMT},
-            {"NST", NZST},
-            {"NZ", NZST},
-            {"NZ-CHAT", CHAST},
-            {"PLT", PKT},
-            {"Portugal", WET},
-            {"PRT", AST},
-            {"Pacific/Apia", WST_SAMOA},
-            {"Pacific/Auckland", NZST},
-            {"Pacific/Chatham", CHAST},
-            {"Pacific/Chuuk", CHUT},
-            {"Pacific/Easter", EASTER},
-            {"Pacific/Efate", new String[] {"\u74e6\u5974\u963f\u56fe\u65f6\u95f4", "VUT",
-                                            "\u74e6\u5974\u963f\u56fe\u590f\u4ee4\u65f6", "VUST"}},
-            {"Pacific/Enderbury", new String[] {"\u83f2\u5c3c\u514b\u65af\u7fa4\u5c9b\u65f6\u95f4", "PHOT",
-                                                "\u83f2\u5c3c\u514b\u65af\u7fa4\u5c9b\u590f\u4ee4\u65f6", "PHOST"}},
-            {"Pacific/Fakaofo", new String[] {"\u6258\u514b\u52b3\u7fa4\u5c9b\u65f6\u95f4", "TKT",
-                                              "\u6258\u514b\u52b3\u7fa4\u5c9b\u590f\u4ee4\u65f6", "TKST"}},
-            {"Pacific/Fiji", new String[] {"\u6590\u6d4e\u65f6\u95f4", "FJT",
-                                           "\u6590\u6d4e\u590f\u4ee4\u65f6", "FJST"}},
-            {"Pacific/Funafuti", new String[] {"\u5410\u9c81\u74e6\u65f6\u95f4", "TVT",
-                                               "\u5410\u9c81\u74e6\u590f\u4ee4\u65f6", "TVST"}},
-            {"Pacific/Galapagos", new String[] {"\u52a0\u62c9\u5df4\u54e5\u65f6\u95f4", "GALT",
-                                                "\u52a0\u62c9\u5df4\u54e5\u590f\u4ee4\u65f6", "GALST"}},
-            {"Pacific/Gambier", GAMBIER},
-            {"Pacific/Guadalcanal", SBT},
-            {"Pacific/Guam", ChST},
-            {"Pacific/Johnston", HST},
-            {"Pacific/Kiritimati", new String[] {"Line \u5c9b\u65f6\u95f4", "LINT",
-                                                 "Line \u5c9b\u590f\u4ee4\u65f6", "LINST"}},
-            {"Pacific/Kosrae", new String[] {"Kosrae \u65f6\u95f4", "KOST",
-                                             "Kosrae \u590f\u4ee4\u65f6", "KOSST"}},
-            {"Pacific/Kwajalein", MHT},
-            {"Pacific/Majuro", MHT},
-            {"Pacific/Marquesas", new String[] {"\u9a6c\u514b\u8428\u65af\u65f6\u95f4", "MART",
-                                                "\u9a6c\u514b\u8428\u65af\u590f\u4ee4\u65f6", "MARST"}},
-            {"Pacific/Midway", SAMOA},
-            {"Pacific/Nauru", new String[] {"\u8bfa\u9c81\u65f6\u95f4", "NRT",
-                                            "\u8bfa\u9c81\u590f\u4ee4\u65f6", "NRST"}},
-            {"Pacific/Niue", new String[] {"\u7ebd\u5a01\u5c9b\u65f6\u95f4", "NUT",
-                                           "\u7ebd\u5a01\u5c9b\u590f\u4ee4\u65f6", "NUST"}},
-            {"Pacific/Norfolk", new String[] {"\u8bfa\u798f\u514b\u65f6\u95f4", "NFT",
-                                              "\u8bfa\u798f\u514b\u590f\u4ee4\u65f6", "NFST"}},
-            {"Pacific/Noumea", new String[] {"\u65b0\u52a0\u52d2\u591a\u5c3c\u4e9a\u65f6\u95f4", "NCT",
-                                             "\u65b0\u52a0\u52d2\u591a\u5c3c\u4e9a\u590f\u4ee4\u65f6", "NCST"}},
-            {"Pacific/Pago_Pago", SAMOA},
-            {"Pacific/Palau", new String[] {"\u5e1b\u7409\u65f6\u95f4", "PWT",
-                                            "\u5e1b\u7409\u590f\u4ee4\u65f6", "PWST"}},
-            {"Pacific/Pitcairn", PITCAIRN},
-            {"Pacific/Pohnpei", PONT},
-            {"Pacific/Ponape", PONT},
-            {"Pacific/Port_Moresby", new String[] {"\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a\u65f6\u95f4", "PGT",
-                                                   "\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a\u590f\u4ee4\u65f6", "PGST"}},
-            {"Pacific/Rarotonga", new String[] {"\u5e93\u514b\u7fa4\u5c9b\u65f6\u95f4", "CKT",
-                                                "\u5e93\u514b\u7fa4\u5c9b\u590f\u4ee4\u65f6", "CKHST"}},
-            {"Pacific/Saipan", ChST},
-            {"Pacific/Samoa", SAMOA},
-            {"Pacific/Tahiti", new String[] {"\u5927\u6eaa\u5730\u5c9b\u65f6\u95f4", "TAHT",
-                                             "\u5927\u6eaa\u5730\u5c9b\u590f\u4ee4\u65f6", "TAHST"}},
-            {"Pacific/Tarawa", new String[] {"\u5409\u4f2f\u7279\u7fa4\u5c9b\u65f6\u95f4", "GILT",
-                                             "\u5409\u4f2f\u7279\u7fa4\u5c9b\u590f\u4ee4\u65f6", "GILST"}},
-            {"Pacific/Tongatapu", new String[] {"\u4e1c\u52a0\u65f6\u95f4", "TOT",
-                                                "\u4e1c\u52a0\u590f\u4ee4\u65f6", "TOST"}},
-            {"Pacific/Truk", CHUT},
-            {"Pacific/Wake", new String[] {"\u5a01\u514b\u65f6\u95f4", "WAKT",
-                                           "\u5a01\u514b\u590f\u4ee4\u65f6", "WAKST"}},
-            {"Pacific/Wallis", new String[] {"\u74e6\u5229\u65af\u53ca\u798f\u675c\u7eb3\u7fa4\u5c9b\u65f6\u95f4", "WFT",
-                                             "\u74e6\u5229\u65af\u53ca\u798f\u675c\u7eb3\u7fa4\u5c9b\u590f\u4ee4\u65f6", "WFST"}},
-            {"Pacific/Yap", CHUT},
-            {"Poland", CET},
-            {"PRC", CTT},
-            {"PST8PDT", PST},
-            {"ROK", KST},
-            {"Singapore", SGT},
-            {"SST", SBT},
-            {"SystemV/AST4", AST},
-            {"SystemV/AST4ADT", AST},
-            {"SystemV/CST6", CST},
-            {"SystemV/CST6CDT", CST},
-            {"SystemV/EST5", EST},
-            {"SystemV/EST5EDT", EST},
-            {"SystemV/HST10", HST},
-            {"SystemV/MST7", MST},
-            {"SystemV/MST7MDT", MST},
-            {"SystemV/PST8", PST},
-            {"SystemV/PST8PDT", PST},
-            {"SystemV/YST9", AKST},
-            {"SystemV/YST9YDT", AKST},
-            {"Turkey", EET},
-            {"UCT", UTC},
-            {"Universal", UTC},
-            {"US/Alaska", AKST},
-            {"US/Aleutian", HAST},
-            {"US/Arizona", MST},
-            {"US/Central", CST},
-            {"US/Eastern", EST},
-            {"US/Hawaii", HST},
-            {"US/Indiana-Starke", CST},
-            {"US/East-Indiana", EST},
-            {"US/Michigan", EST},
-            {"US/Mountain", MST},
-            {"US/Pacific", PST},
-            {"US/Pacific-New", PST},
-            {"US/Samoa", SAMOA},
-            {"UTC", UTC},
-            {"VST", ICT},
-            {"W-SU", MSK},
-            {"WET", WET},
-            {"Zulu", UTC},
-        };
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_zh_HK.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames_zh_HK.java
deleted file mode 100755
index 66dc21c..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_zh_HK.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 1998, 2007, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - All Rights Reserved
- *
- *   The original version of this source code and documentation is copyrighted
- * and owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These
- * materials are provided under terms of a License Agreement between Taligent
- * and Sun. This technology is protected by multiple US and International
- * patents. This notice and attribution to Taligent may not be removed.
- *   Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-public final class TimeZoneNames_zh_HK extends TimeZoneNamesBundle {
-
-    // reparent to zh_TW for traditional Chinese names
-    public TimeZoneNames_zh_HK() {
-        ResourceBundle bundle = LocaleData.getTimeZoneNames(Locale.TAIWAN);
-        setParent(bundle);
-    }
-
-    protected final Object[][] getContents() {
-        return new Object[][] {};
-    }
-}
diff --git a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_zh_TW.java b/ojluni/src/main/java/sun/util/resources/TimeZoneNames_zh_TW.java
deleted file mode 100755
index 6317044..0000000
--- a/ojluni/src/main/java/sun/util/resources/TimeZoneNames_zh_TW.java
+++ /dev/null
@@ -1,877 +0,0 @@
-/*
- * Copyright (c) 1997, 2011, 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.
- */
-
-/*
- * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
- * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
- *
- * The original version of this source code and documentation
- * is copyrighted and owned by Taligent, Inc., a wholly-owned
- * subsidiary of IBM. These materials are provided under terms
- * of a License Agreement between Taligent and Sun. This technology
- * is protected by multiple US and International patents.
- *
- * This notice and attribution to Taligent may not be removed.
- * Taligent is a registered trademark of Taligent, Inc.
- *
- */
-
-package sun.util.resources;
-
-public final class TimeZoneNames_zh_TW extends TimeZoneNamesBundle {
-
-    protected final Object[][] getContents() {
-        String ACT[] = new String[] {"Acre \u6642\u9593", "ACT",
-                                     "Acre \u590f\u4ee4\u6642\u9593", "ACST"};
-        String ADELAIDE[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e\u5357\u5340)", "CST",
-                                          "\u4e2d\u90e8\u590f\u4ee4\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e\u5357\u5340)", "CST"};
-        String AGT[] = new String[] {"\u963f\u6839\u5ef7\u6642\u9593", "ART",
-                                     "\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "ARST"};
-        String AKST[] = new String[] {"\u963f\u62c9\u65af\u52a0\u6a19\u6e96\u6642\u9593", "AKST",
-                                      "\u963f\u62c9\u65af\u52a0\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "AKDT"};
-        String AMT[] = new String[] {"\u4e9e\u99ac\u905c\u6642\u9593", "AMT",
-                                     "\u4e9e\u99ac\u905c\u590f\u4ee4\u6642\u9593", "AMST"};
-        String ARAST[] = new String[] {"\u963f\u62c9\u4f2f\u6a19\u6e96\u6642\u9593", "AST",
-                                       "\u963f\u62c9\u4f2f\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ADT"};
-        String ARMT[] = new String[] {"\u4e9e\u7f8e\u5c3c\u4e9e\u6642\u9593", "AMT",
-                                      "\u4e9e\u7f8e\u5c3c\u4e9e\u590f\u4ee4\u6642\u9593", "AMST"};
-        String AST[] = new String[] {"\u5927\u897f\u6d0b\u6a19\u6e96\u6642\u9593", "AST",
-                                     "\u5927\u897f\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ADT"};
-        String BDT[] = new String[] {"\u5b5f\u52a0\u62c9\u6642\u9593", "BDT",
-                                     "\u5b5f\u52a0\u62c9\u590f\u4ee4\u6642\u9593", "BDST"};
-        String BRISBANE[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u6606\u58eb\u862d)", "EST",
-                                          "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u6606\u58eb\u862d)", "EST"};
-        String BROKEN_HILL[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e\u5357\u5340/\u65b0\u5357\u5a01\u723e\u65af)", "CST",
-                                             "\u4e2d\u90e8\u590f\u4ee4\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e\u5357\u5340/\u65b0\u5357\u5a01\u723e\u65af)", "CST"};
-        String BRT[] = new String[] {"\u5df4\u897f\u5229\u4e9e\u6642\u9593", "BRT",
-                                     "\u5df4\u897f\u5229\u4e9e\u590f\u4ee4\u6642\u9593", "BRST"};
-        String BTT[] = new String[] {"\u4e0d\u4e39\u6642\u9593", "BTT",
-                                     "\u4e0d\u4e39\u590f\u4ee4\u6642\u9593", "BTST"};
-        String CAT[] = new String[] {"\u4e2d\u975e\u6642\u9593", "CAT",
-                                     "\u4e2d\u975e\u590f\u4ee4\u6642\u9593", "CAST"};
-        String CET[] = new String[] {"\u4e2d\u6b50\u6642\u9593", "CET",
-                                     "\u4e2d\u6b50\u590f\u4ee4\u6642\u9593", "CEST"};
-        String CHAST[] = new String[] {"\u67e5\u5766\u6a19\u6e96\u6642\u9593", "CHAST",
-                                       "\u67e5\u5766\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CHADT"};
-        String ChST[] = new String[] {"\u67e5\u83ab\u6d1b\u6a19\u6e96\u6642\u9593", "ChST",
-                                     "\u67e5\u83ab\u6d1b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "ChDT"};
-        String CHUT[] = new String[] {"Chuuk Time", "CHUT",
-                                      "Chuuk Summer Time", "CHUST"};
-        String CIT[] = new String[] {"\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "CIT",
-                                     "\u4e2d\u5370\u5ea6\u5c3c\u897f\u4e9e\u590f\u4ee4\u6642\u9593", "CIST"};
-        String CLT[] = new String[] {"\u667a\u5229\u6642\u9593", "CLT",
-                                     "\u667a\u5229\u590f\u4ee4\u6642\u9593", "CLST"};
-        String CST[] = new String[] {"\u4e2d\u592e\u6a19\u6e96\u6642\u9593", "CST",
-                                     "\u4e2d\u592e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"};
-        String CTT[] = new String[] {"\u4e2d\u570b\u6a19\u6e96\u6642\u9593", "CST",
-                                     "\u4e2d\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"};
-        String CUBA[] = new String[] {"\u53e4\u5df4\u6a19\u6e96\u6642\u9593", "CST",
-                                      "\u53e4\u5df4\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "CDT"};
-        String DARWIN[] = new String[] {"\u4e2d\u90e8\u6a19\u6e96\u6642\u9593 (\u5317\u90e8\u5404\u5730\u5340)", "CST",
-                                        "\u4e2d\u90e8\u590f\u4ee4\u6642\u9593 (\u5317\u90e8\u5404\u5730\u5340)", "CST"};
-        String DUBLIN[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u5e73\u5747\u6642\u9593", "GMT",
-                                        "\u611b\u723e\u862d\u590f\u4ee4\u6642\u9593", "IST"};
-        String EAT[] = new String[] {"\u6771\u975e\u6642\u9593", "EAT",
-                                     "\u6771\u975e\u590f\u4ee4\u6642\u9593", "EAST"};
-        String EASTER[] = new String[] {"\u5fa9\u6d3b\u5cf6\u6642\u9593", "EAST",
-                                        "\u5fa9\u6d3b\u5cf6\u590f\u4ee4\u6642\u9593", "EASST"};
-        String EET[] = new String[] {"\u6771\u6b50\u6642\u9593", "EET",
-                                     "\u6771\u6b50\u590f\u4ee4\u6642\u9593", "EEST"};
-        String EGT[] = new String[] {"\u6771\u683c\u6797\u5cf6\u6642\u9593", "EGT",
-                                     "\u6771\u683c\u6797\u5cf6\u590f\u4ee4\u6642\u9593", "EGST"};
-        String EST[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593", "EST",
-                                     "\u6771\u65b9\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "EDT"};
-        String EST_NSW[] = new String[] {"\u6771\u65b9\u6a19\u6e96\u6642\u9593 (\u65b0\u5357\u5a01\u723e\u65af)", "EST",
-                                         "\u6771\u65b9\u590f\u4ee4\u6642\u9593 (\u65b0\u5357\u5a01\u723e\u65af)", "EST"};
-        String FET[] = new String[] {"Further-eastern European Time", "FET",
-                                     "Further-eastern European Summer Time", "FEST"};
-        String GHMT[] = new String[] {"\u8fe6\u7d0d\u5e73\u5747\u6642\u9593", "GMT",
-                                      "\u8fe6\u7d0d\u590f\u4ee4\u6642\u9593", "GHST"};
-        String GAMBIER[] =  new String[] {"\u7518\u6bd4\u723e\u6642\u9593", "GAMT",
-                                          "\u7518\u6bd4\u723e\u590f\u4ee4\u6642\u9593", "GAMST"};
-        String GMT[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u6642\u9593", "GMT",
-                                   "\u683c\u6797\u5a01\u6cbb\u6642\u9593", "GMT"};
-        String GMTBST[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u5e73\u5747\u6642\u9593", "GMT",
-                                        "\u82f1\u570b\u590f\u4ee4\u6642\u9593", "BST"};
-        String GST[] = new String[] {"\u6ce2\u65af\u7063\u6a19\u6e96\u6642\u9593", "GST",
-                                     "\u6ce2\u65af\u7063\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "GDT"};
-        String HAST[] = new String[] {"\u590f\u5a01\u5937-\u963f\u7559\u7533\u7fa4\u5cf6\u6a19\u6e96\u6642\u9593", "HAST",
-                                      "\u590f\u5a01\u5937-\u963f\u7559\u7533\u7fa4\u5cf6\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "HADT"};
-        String HKT[] =  new String[] {"\u9999\u6e2f\u6642\u9593", "HKT",
-                                      "\u9999\u6e2f\u590f\u4ee4\u6642\u9593", "HKST"};
-        String HST[] = new String[] {"\u590f\u5a01\u5937\u6a19\u6e96\u6642\u9593", "HST",
-                                     "\u590f\u5a01\u5937\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "HDT"};
-        String ICT[] = new String[] {"\u5370\u5ea6\u652f\u90a3\u6642\u9593", "ICT",
-                                     "\u5370\u5ea6\u652f\u90a3\u590f\u4ee4\u6642\u9593", "ICST"};
-        String IRT[] = new String[] {"\u4f0a\u6717\u6a19\u6e96\u6642\u9593", "IRST",
-                                     "\u4f0a\u6717\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "IRDT"};
-        String ISRAEL[] = new String[] {"\u4ee5\u8272\u5217\u6a19\u6e96\u6642\u9593", "IST",
-                                        "\u4ee5\u8272\u5217\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "IDT"};
-        String IST[] = new String[] {"\u5370\u5ea6\u6a19\u6e96\u6642\u9593", "IST",
-                                     "\u5370\u5ea6\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "IDT"};
-        String JST[] = new String[] {"\u65e5\u672c\u6a19\u6e96\u6642\u9593", "JST",
-                                     "\u65e5\u672c\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "JDT"};
-        String KST[] = new String[] {"\u97d3\u570b\u6a19\u6e96\u6642\u9593", "KST",
-                                     "\u97d3\u570b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "KDT"};
-        String LORD_HOWE[] = new String[] {"\u8c6a\u52f3\u7235\u5cf6\u6a19\u6e96\u6642\u9593", "LHST",
-                                           "\u8c6a\u52f3\u7235\u5cf6\u590f\u4ee4\u6642\u9593", "LHST"};
-        String MHT[] = new String[] {"\u99ac\u7d39\u723e\u7fa4\u5cf6\u6642\u9593", "MHT",
-                                     "\u99ac\u7d39\u723e\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "MHST"};
-        String MSK[] = new String[] {"\u83ab\u65af\u79d1\u6a19\u6e96\u6642\u9593", "MSK",
-                                     "\u83ab\u65af\u79d1\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "MSD"};
-        String MST[] = new String[] {"\u5c71\u5340\u6a19\u6e96\u6642\u9593", "MST",
-                                     "\u5c71\u5340\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "MDT"};
-        String MYT[] = new String[] {"\u99ac\u4f86\u897f\u4e9e\u6642\u9593", "MYT",
-                                     "\u99ac\u4f86\u897f\u4e9e\u590f\u4ee4\u6642\u9593", "MYST"};
-        String NORONHA[] = new String[] {"\u8cbb\u723e\u5357\u591a-\u8fea\u8afe\u7f85\u5c3c\u4e9e\u6642\u9593", "FNT",
-                                         "\u8cbb\u723e\u5357\u591a-\u8fea\u8afe\u7f85\u5c3c\u4e9e\u590f\u4ee4\u6642\u9593", "FNST"};
-        String NOVT[] = new String[] {"Novosibirsk \u6642\u9593", "NOVT",
-                                      "Novosibirsk \u590f\u4ee4\u6642\u9593", "NOVST"};
-        String NPT[] = new String[] {"\u5c3c\u6cca\u723e\u6642\u9593", "NPT",
-                                     "\u5c3c\u6cca\u723e\u590f\u4ee4\u6642\u9593", "NPST"};
-        String NST[] = new String[] {"\u7d10\u82ac\u862d\u6a19\u6e96\u6642\u9593", "NST",
-                                     "\u7d10\u82ac\u862d\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "NDT"};
-        String NZST[] = new String[] {"\u7d10\u897f\u862d\u6a19\u6e96\u6642\u9593", "NZST",
-                                      "\u7d10\u897f\u862d\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "NZDT"};
-        String PITCAIRN[] = new String[] {"\u76ae\u7279\u5eb7\u6a19\u6e96\u6642\u9593", "PST",
-                                        "\u76ae\u7279\u5eb7\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"};
-        String PKT[] = new String[] {"\u5df4\u57fa\u65af\u5766\u6642\u9593", "PKT",
-                                     "\u5df4\u57fa\u65af\u5766\u590f\u4ee4\u6642\u9593", "PKST"};
-        String PONT[] = new String[] {"Pohnpei Time", "PONT",
-                                      "Pohnpei Summer Time", "PONST"};
-        String PST[] = new String[] {"\u592a\u5e73\u6d0b\u6a19\u6e96\u6642\u9593", "PST",
-                                     "\u592a\u5e73\u6d0b\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PDT"};
-        String SAMOA[] = new String[] {"\u85a9\u6469\u4e9e\u6a19\u6e96\u6642\u9593", "SST",
-                                       "\u85a9\u6469\u4e9e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "SDT"};
-        String SAST[] = new String[] {"\u5357\u975e\u6a19\u6e96\u6642\u9593", "SAST",
-                                      "\u5357\u975e\u590f\u4ee4\u6642\u9593", "SAST"};
-        String SBT[] = new String[] {"\u6240\u7f85\u9580\u7fa4\u5cf6\u6642\u9593", "SBT",
-                                     "\u6240\u7f85\u9580\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "SBST"};
-        String SGT[] = new String[] {"\u65b0\u52a0\u5761\u6642\u9593", "SGT",
-                                     "\u65b0\u52a0\u5761\u590f\u4ee4\u6642\u9593", "SGST"};
-        String SLST[] = new String[] {"\u683c\u6797\u5a01\u6cbb\u5e73\u5747\u6642\u9593", "GMT",
-                                      "\u7345\u5b50\u5c71\u590f\u4ee4\u6642\u9593", "SLST"};
-        String TASMANIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u5854\u65af\u6885\u5c3c\u4e9e\u5cf6)", "EST",
-                                          "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u5854\u65af\u6885\u5c3c\u4e9e\u5cf6)", "EST"};
-        String TMT[] = new String[] {"\u571f\u5eab\u66fc\u6642\u9593", "TMT",
-                                     "\u571f\u5eab\u66fc\u590f\u4ee4\u6642\u9593", "TMST"};
-        String ULAT[]= new String[] {"\u5eab\u502b\u6642\u9593", "ULAT",
-                                     "\u5eab\u502b\u590f\u4ee4\u6642\u9593", "ULAST"};
-        String UTC[] = new String[] {"\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC",
-                                     "\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC"};
-        String UZT[] = new String[] {"\u70cf\u8332\u5225\u514b\u65af\u5766\u6642\u9593", "UZT",
-                                     "\u70cf\u8332\u5225\u514b\u65af\u5766\u590f\u4ee4\u6642\u9593", "UZST"};
-        String VICTORIA[] = new String[] {"\u6771\u90e8\u6a19\u6e96\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST",
-                                          "\u6771\u90e8\u590f\u4ee4\u6642\u9593 (\u7dad\u591a\u5229\u4e9e\u90a6)", "EST"};
-        String VLAT[] = new String[] {"\u6d77\u53c3\u5d34\u6642\u9593", "VLAT",
-                                      "\u6d77\u53c3\u5d34\u590f\u4ee4\u6642\u9593", "VLAST"};
-        String WART[] = new String[] {"\u897f\u963f\u6839\u5ef7\u6642\u9593", "WART",
-                                      "\u897f\u963f\u6839\u5ef7\u590f\u4ee4\u6642\u9593", "WARST"};
-        String WAT[] = new String[] {"\u897f\u975e\u6642\u9593", "WAT",
-                                     "\u897f\u975e\u590f\u4ee4\u6642\u9593", "WAST"};
-        String WET[] = new String[] {"\u897f\u6b50\u6642\u9593", "WET",
-                                     "\u897f\u6b50\u590f\u4ee4\u6642\u9593", "WEST"};
-        String WIT[] = new String[] {"\u897f\u5370\u5c3c\u6642\u9593", "WIT",
-                                     "\u897f\u5370\u5c3c\u590f\u4ee4\u6642\u9593", "WIST"};
-        String WST_AUS[] = new String[] {"\u897f\u65b9\u6a19\u6e96\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "WST",
-                                         "\u897f\u65b9\u590f\u4ee4\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "WST"};
-        String WST_SAMOA[] = new String[] {"\u897f\u85a9\u6469\u4e9e\u6642\u9593", "WST",
-                                           "\u897f\u85a9\u6469\u4e9e\u590f\u4ee4\u6642\u9593", "WSDT"};
-        String YAKT[] = new String[] {"\u4e9e\u5eab\u6b21\u514b\u6642\u9593", "YAKT",
-                                      "\u4e9e\u5eab\u6b21\u514b\u590f\u4ee4\u6642\u9593", "YAKST"};
-
-        return new Object[][] {
-            {"America/Los_Angeles", PST},
-            {"PST", PST},
-            {"America/Denver", MST},
-            {"MST", MST},
-            {"America/Phoenix", MST},
-            {"PNT", MST},
-            {"America/Chicago", CST},
-            {"CST", CST},
-            {"America/New_York", EST},
-            {"EST", EST},
-            {"America/Indianapolis", EST},
-            {"IET", EST},
-            {"Pacific/Honolulu", HST},
-            {"HST", HST},
-            {"America/Anchorage", AKST},
-            {"AST", AKST},
-            {"America/Halifax", AST},
-            {"America/Sitka", AKST},
-            {"America/St_Johns", NST},
-            {"CNT", NST},
-            {"Europe/Paris", CET},
-            {"ECT", CET},
-            {"GMT", GMT},
-            {"Africa/Casablanca", WET},
-            {"Asia/Jerusalem", ISRAEL},
-            {"Asia/Tokyo", JST},
-            {"JST", JST},
-            {"Europe/Bucharest", EET},
-            {"Asia/Shanghai", CTT},
-            {"CTT", CTT},
-            /* Don't change the order of the above zones
-             * to keep compatibility with the previous version.
-             */
-
-            {"ACT", DARWIN},
-            {"AET", EST_NSW},
-            {"AGT", AGT},
-            {"ART", EET},
-            {"Africa/Abidjan", GMT},
-            {"Africa/Accra", GHMT},
-            {"Africa/Addis_Ababa", EAT},
-            {"Africa/Algiers", CET},
-            {"Africa/Asmara", EAT},
-            {"Africa/Asmera", EAT},
-            {"Africa/Bamako", GMT},
-            {"Africa/Bangui", WAT},
-            {"Africa/Banjul", GMT},
-            {"Africa/Bissau", GMT},
-            {"Africa/Blantyre", CAT},
-            {"Africa/Brazzaville", WAT},
-            {"Africa/Bujumbura", CAT},
-            {"Africa/Cairo", EET},
-            {"Africa/Ceuta", CET},
-            {"Africa/Conakry", GMT},
-            {"Africa/Dakar", GMT},
-            {"Africa/Dar_es_Salaam", EAT},
-            {"Africa/Djibouti", EAT},
-            {"Africa/Douala", WAT},
-            {"Africa/El_Aaiun", WET},
-            {"Africa/Freetown", SLST},
-            {"Africa/Gaborone", CAT},
-            {"Africa/Harare", CAT},
-            {"Africa/Johannesburg", SAST},
-            {"Africa/Juba", EAT},
-            {"Africa/Kampala", EAT},
-            {"Africa/Khartoum", EAT},
-            {"Africa/Kigali", CAT},
-            {"Africa/Kinshasa", WAT},
-            {"Africa/Lagos", WAT},
-            {"Africa/Libreville", WAT},
-            {"Africa/Lome", GMT},
-            {"Africa/Luanda", WAT},
-            {"Africa/Lubumbashi", CAT},
-            {"Africa/Lusaka", CAT},
-            {"Africa/Malabo", WAT},
-            {"Africa/Maputo", CAT},
-            {"Africa/Maseru", SAST},
-            {"Africa/Mbabane", SAST},
-            {"Africa/Mogadishu", EAT},
-            {"Africa/Monrovia", GMT},
-            {"Africa/Nairobi", EAT},
-            {"Africa/Ndjamena", WAT},
-            {"Africa/Niamey", WAT},
-            {"Africa/Nouakchott", GMT},
-            {"Africa/Ouagadougou", GMT},
-            {"Africa/Porto-Novo", WAT},
-            {"Africa/Sao_Tome", GMT},
-            {"Africa/Timbuktu", GMT},
-            {"Africa/Tripoli", CET},
-            {"Africa/Tunis", CET},
-            {"Africa/Windhoek", WAT},
-            {"America/Adak", HAST},
-            {"America/Anguilla", AST},
-            {"America/Antigua", AST},
-            {"America/Araguaina", BRT},
-            {"America/Argentina/Buenos_Aires", AGT},
-            {"America/Argentina/Catamarca", AGT},
-            {"America/Argentina/ComodRivadavia", AGT},
-            {"America/Argentina/Cordoba", AGT},
-            {"America/Argentina/Jujuy", AGT},
-            {"America/Argentina/La_Rioja", AGT},
-            {"America/Argentina/Mendoza", AGT},
-            {"America/Argentina/Rio_Gallegos", AGT},
-            {"America/Argentina/Salta", AGT},
-            {"America/Argentina/San_Juan", AGT},
-            {"America/Argentina/San_Luis", WART},
-            {"America/Argentina/Tucuman", AGT},
-            {"America/Argentina/Ushuaia", AGT},
-            {"America/Aruba", AST},
-            {"America/Asuncion", new String[] {"\u5df4\u62c9\u572d\u6642\u9593", "PYT",
-                                               "\u5df4\u62c9\u572d\u590f\u4ee4\u6642\u9593", "PYST"}},
-            {"America/Atikokan", EST},
-            {"America/Atka", HAST},
-            {"America/Bahia", BRT},
-            {"America/Bahia_Banderas", CST},
-            {"America/Barbados", AST},
-            {"America/Belem", BRT},
-            {"America/Belize", CST},
-            {"America/Blanc-Sablon", AST},
-            {"America/Boa_Vista", AMT},
-            {"America/Bogota", new String[] {"\u54e5\u502b\u6bd4\u4e9e\u6642\u9593", "COT",
-                                             "\u54e5\u502b\u6bd4\u4e9e\u590f\u4ee4\u6642\u9593", "COST"}},
-            {"America/Boise", MST},
-            {"America/Buenos_Aires", AGT},
-            {"America/Cambridge_Bay", MST},
-            {"America/Campo_Grande", AMT},
-            {"America/Cancun", CST},
-            {"America/Caracas", new String[] {"\u59d4\u5167\u745e\u62c9\u6642\u9593", "VET",
-                                              "\u59d4\u5167\u745e\u62c9\u590f\u4ee4\u6642\u9593", "VEST"}},
-            {"America/Catamarca", AGT},
-            {"America/Cayenne", new String[] {"\u6cd5\u5c6c\u572d\u4e9e\u90a3\u6642\u9593", "GFT",
-                                              "\u6cd5\u5c6c\u572d\u4e9e\u90a3\u590f\u4ee4\u6642\u9593", "GFST"}},
-            {"America/Cayman", EST},
-            {"America/Chihuahua", MST},
-            {"America/Creston", MST},
-            {"America/Coral_Harbour", EST},
-            {"America/Cordoba", AGT},
-            {"America/Costa_Rica", CST},
-            {"America/Cuiaba", AMT},
-            {"America/Curacao", AST},
-            {"America/Danmarkshavn", GMT},
-            {"America/Dawson", PST},
-            {"America/Dawson_Creek", MST},
-            {"America/Detroit", EST},
-            {"America/Dominica", AST},
-            {"America/Edmonton", MST},
-            {"America/Eirunepe", AMT},
-            {"America/El_Salvador", CST},
-            {"America/Ensenada", PST},
-            {"America/Fort_Wayne", EST},
-            {"America/Fortaleza", BRT},
-            {"America/Glace_Bay", AST},
-            {"America/Godthab", new String[] {"\u897f\u683c\u6797\u862d\u5cf6\u6642\u9593", "WGT",
-                                              "\u897f\u683c\u6797\u862d\u5cf6\u590f\u4ee4\u6642\u9593", "WGST"}},
-            {"America/Goose_Bay", AST},
-            {"America/Grand_Turk", EST},
-            {"America/Grenada", AST},
-            {"America/Guadeloupe", AST},
-            {"America/Guatemala", CST},
-            {"America/Guayaquil", new String[] {"\u5384\u74dc\u591a\u723e\u6642\u9593", "ECT",
-                                                "\u5384\u74dc\u591a\u723e\u590f\u4ee4\u6642\u9593", "ECST"}},
-            {"America/Guyana", new String[] {"\u84cb\u4e9e\u90a3\u6642\u9593", "GYT",
-                                             "\u84cb\u4e9e\u90a3\u590f\u4ee4\u6642\u9593", "GYST"}},
-            {"America/Havana", CUBA},
-            {"America/Hermosillo", MST},
-            {"America/Indiana/Indianapolis", EST},
-            {"America/Indiana/Knox", CST},
-            {"America/Indiana/Marengo", EST},
-            {"America/Indiana/Petersburg", EST},
-            {"America/Indiana/Tell_City", CST},
-            {"America/Indiana/Vevay", EST},
-            {"America/Indiana/Vincennes", EST},
-            {"America/Indiana/Winamac", EST},
-            {"America/Inuvik", MST},
-            {"America/Iqaluit", EST},
-            {"America/Jamaica", EST},
-            {"America/Jujuy", AGT},
-            {"America/Juneau", AKST},
-            {"America/Kentucky/Louisville", EST},
-            {"America/Kentucky/Monticello", EST},
-            {"America/Knox_IN", CST},
-            {"America/Kralendijk", AST},
-            {"America/La_Paz", new String[] {"\u73bb\u5229\u7dad\u4e9e\u6642\u9593", "BOT",
-                                             "\u73bb\u5229\u7dad\u4e9e\u590f\u4ee4\u6642\u9593", "BOST"}},
-            {"America/Lima", new String[] {"\u7955\u9b6f\u6642\u9593", "PET",
-                                           "\u7955\u9b6f\u590f\u4ee4\u6642\u9593", "PEST"}},
-            {"America/Louisville", EST},
-            {"America/Lower_Princes", AST},
-            {"America/Maceio", BRT},
-            {"America/Managua", CST},
-            {"America/Manaus", AMT},
-            {"America/Marigot", AST},
-            {"America/Martinique", AST},
-            {"America/Matamoros", CST},
-            {"America/Mazatlan", MST},
-            {"America/Mendoza", AGT},
-            {"America/Menominee", CST},
-            {"America/Merida", CST},
-            {"America/Metlakatla", new String[] {"Metlakatla Standard Time", "MeST",
-                                                 "Metlakatla Daylight Time", "MeDT"}},
-            {"America/Mexico_City", CST},
-            {"America/Miquelon", new String[] {"\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u6a19\u6e96\u6642\u9593", "PMST",
-                                               "\u76ae\u57c3\u723e\u5cf6\u53ca\u5bc6\u514b\u9686\u5cf6\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "PMDT"}},
-            {"America/Moncton", AST},
-            {"America/Montevideo", new String[] {"\u70cf\u62c9\u572d\u6642\u9593", "UYT",
-                                                 "\u70cf\u62c9\u572d\u590f\u4ee4\u6642\u9593", "UYST"}},
-            {"America/Monterrey", CST},
-            {"America/Montreal", EST},
-            {"America/Montserrat", AST},
-            {"America/Nassau", EST},
-            {"America/Nipigon", EST},
-            {"America/Nome", AKST},
-            {"America/Noronha", NORONHA},
-            {"America/North_Dakota/Beulah", CST},
-            {"America/North_Dakota/Center", CST},
-            {"America/North_Dakota/New_Salem", CST},
-            {"America/Ojinaga", MST},
-            {"America/Panama", EST},
-            {"America/Pangnirtung", EST},
-            {"America/Paramaribo", new String[] {"\u8607\u5229\u5357\u6642\u9593", "SRT",
-                                                 "\u8607\u5229\u5357\u590f\u4ee4\u6642\u9593", "SRST"}},
-            {"America/Port-au-Prince", EST},
-            {"America/Port_of_Spain", AST},
-            {"America/Porto_Acre", AMT},
-            {"America/Porto_Velho", AMT},
-            {"America/Puerto_Rico", AST},
-            {"America/Rainy_River", CST},
-            {"America/Rankin_Inlet", CST},
-            {"America/Recife", BRT},
-            {"America/Regina", CST},
-            {"America/Resolute", CST},
-            {"America/Rio_Branco", AMT},
-            {"America/Rosario", AGT},
-            {"America/Santa_Isabel", PST},
-            {"America/Santarem", BRT},
-            {"America/Santiago", CLT},
-            {"America/Santo_Domingo", AST},
-            {"America/Sao_Paulo", BRT},
-            {"America/Scoresbysund", EGT},
-            {"America/Shiprock", MST},
-            {"America/St_Barthelemy", AST},
-            {"America/St_Kitts", AST},
-            {"America/St_Lucia", AST},
-            {"America/St_Thomas", AST},
-            {"America/St_Vincent", AST},
-            {"America/Swift_Current", CST},
-            {"America/Tegucigalpa", CST},
-            {"America/Thule", AST},
-            {"America/Thunder_Bay", EST},
-            {"America/Tijuana", PST},
-            {"America/Toronto", EST},
-            {"America/Tortola", AST},
-            {"America/Vancouver", PST},
-            {"America/Virgin", AST},
-            {"America/Whitehorse", PST},
-            {"America/Winnipeg", CST},
-            {"America/Yakutat", AKST},
-            {"America/Yellowknife", MST},
-            {"Antarctica/Casey", WST_AUS},
-            {"Antarctica/Davis", new String[] {"\u81fa\u7dad\u65af\u6642\u9593", "DAVT",
-                                               "\u81fa\u7dad\u65af\u590f\u4ee4\u6642\u9593", "DAVST"}},
-            {"Antarctica/DumontDUrville", new String[] {"Dumont-d'Urville \u6642\u9593", "DDUT",
-                                                        "Dumont-d'Urville \u590f\u4ee4\u6642\u9593", "DDUST"}},
-            {"Antarctica/Macquarie", new String[] {"Macquarie Island Time", "MIST",
-                                                   "Macquarie Island Summer Time", "MIST"}},
-            {"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u6642\u9593", "MAWT",
-                                                "\u83ab\u68ee\u590f\u4ee4\u6642\u9593", "MAWST"}},
-            {"Antarctica/McMurdo", NZST},
-            {"Antarctica/Palmer", CLT},
-            {"Antarctica/Rothera", new String[] {"\u7f85\u897f\u62c9\u6642\u9593", "ROTT",
-                                                 "\u7f85\u897f\u62c9\u590f\u4ee4\u6642\u9593", "ROTST"}},
-            {"Antarctica/South_Pole", NZST},
-            {"Antarctica/Syowa", new String[] {"\u5915\u6b50\u74e6 (Syowa) \u6642\u9593", "SYOT",
-                                               "\u5915\u6b50\u74e6 (Syowa) \u590f\u4ee4\u6642\u9593", "SYOST"}},
-            {"Antarctica/Vostok", new String[] {"\u4f5b\u65af\u6258 (Vostok) \u6642\u9593", "VOST",
-                                                "\u4f5b\u65af\u6258 (Vostok) \u590f\u4ee4\u6642\u9593", "VOSST"}},
-            {"Arctic/Longyearbyen", CET},
-            {"Asia/Aden", ARAST},
-            {"Asia/Almaty", new String[] {"Alma-Ata \u6642\u9593", "ALMT",
-                                          "Alma-Ata \u590f\u4ee4\u6642\u9593", "ALMST"}},
-            {"Asia/Amman", EET},
-            {"Asia/Anadyr", new String[] {"\u963f\u90a3\u5e95\u6cb3\u6642\u9593", "ANAT",
-                                          "\u963f\u90a3\u5e95\u6cb3\u590f\u4ee4\u6642\u9593", "ANAST"}},
-            {"Asia/Aqtau", new String[] {"Aqtau \u6642\u9593", "AQTT",
-                                         "Aqtau \u590f\u4ee4\u6642\u9593", "AQTST"}},
-            {"Asia/Aqtobe", new String[] {"Aqtobe \u6642\u9593", "AQTT",
-                                          "Aqtobe \u590f\u4ee4\u6642\u9593", "AQTST"}},
-            {"Asia/Ashgabat", TMT},
-            {"Asia/Ashkhabad", TMT},
-            {"Asia/Baghdad", ARAST},
-            {"Asia/Bahrain", ARAST},
-            {"Asia/Baku", new String[] {"\u4e9e\u585e\u62dc\u7136\u6642\u9593", "AZT",
-                                        "\u4e9e\u585e\u62dc\u7136\u590f\u4ee4\u6642\u9593", "AZST"}},
-            {"Asia/Bangkok", ICT},
-            {"Asia/Beirut", EET},
-            {"Asia/Bishkek", new String[] {"Kirgizstan \u6642\u9593", "KGT",
-                                           "Kirgizstan \u590f\u4ee4\u6642\u9593", "KGST"}},
-            {"Asia/Brunei", new String[] {"\u6c76\u840a\u6642\u9593", "BNT",
-                                          "\u6c76\u840a\u590f\u4ee4\u6642\u9593", "BNST"}},
-            {"Asia/Calcutta", IST},
-            {"Asia/Choibalsan", new String[] {"\u5de7\u5df4\u5c71 (Choibalsan) \u6642\u9593", "CHOT",
-                                              "\u5de7\u5df4\u5c71 (Choibalsan) \u590f\u4ee4\u6642\u9593", "CHOST"}},
-            {"Asia/Chongqing", CTT},
-            {"Asia/Chungking", CTT},
-            {"Asia/Colombo", IST},
-            {"Asia/Dacca", BDT},
-            {"Asia/Dhaka", BDT},
-            {"Asia/Dili", new String[] {"\u6771\u5e1d\u6c76\u6642\u9593", "TLT",
-                                        "\u6771\u5e1d\u6c76\u590f\u4ee4\u6642\u9593", "TLST"}},
-            {"Asia/Damascus", EET},
-            {"Asia/Dubai", GST},
-            {"Asia/Dushanbe", new String[] {"\u5854\u5409\u514b\u6642\u9593", "TJT",
-                                            "\u5854\u5409\u514b\u590f\u4ee4\u6642\u9593", "TJST"}},
-            {"Asia/Gaza", EET},
-            {"Asia/Harbin", CTT},
-            {"Asia/Hebron", EET},
-            {"Asia/Ho_Chi_Minh", ICT},
-            {"Asia/Hong_Kong", HKT},
-            {"Asia/Hovd", new String[] {"\u4faf\u5fb7 (Hovd) \u6642\u9593", "HOVT",
-                                        "\u4faf\u5fb7 (Hovd) \u590f\u4ee4\u6642\u9593", "HOVST"}},
-            {"Asia/Irkutsk", new String[] {"Irkutsk \u6642\u9593", "IRKT",
-                                           "Irkutsk \u590f\u4ee4\u6642\u9593", "IRKST"}},
-            {"Asia/Istanbul", EET},
-            {"Asia/Jakarta", WIT},
-            {"Asia/Jayapura", new String[] {"\u6771\u5370\u5ea6\u5c3c\u897f\u4e9e\u6642\u9593", "EIT",
-                                            "\u6771\u5370\u5ea6\u5c3c\u897f\u4e9e\u590f\u65e5\u6642\u9593", "EIST"}},
-            {"Asia/Kabul", new String[] {"\u963f\u5bcc\u6c57\u6642\u9593", "AFT",
-                                         "\u963f\u5bcc\u6c57\u590f\u4ee4\u6642\u9593", "AFST"}},
-            {"Asia/Kamchatka", new String[] {"Petropavlovsk-Kamchatski \u6642\u9593", "PETT",
-                                             "Petropavlovsk-Kamchatski \u590f\u4ee4\u6642\u9593", "PETST"}},
-            {"Asia/Karachi", PKT},
-            {"Asia/Kashgar", CTT},
-            {"Asia/Kathmandu", NPT},
-            {"Asia/Katmandu", NPT},
-            {"Asia/Khandyga", YAKT},
-            {"Asia/Kolkata", IST},
-            {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u6642\u9593", "KRAT",
-                                               "\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u590f\u4ee4\u6642\u9593", "KRAST"}},
-            {"Asia/Kuala_Lumpur", MYT},
-            {"Asia/Kuching", MYT},
-            {"Asia/Kuwait", ARAST},
-            {"Asia/Macao", CTT},
-            {"Asia/Macau", CTT},
-            {"Asia/Magadan", new String[] {"Magadan \u6642\u9593", "MAGT",
-                                           "Magadan \u590f\u4ee4\u6642\u9593", "MAGST"}},
-            {"Asia/Makassar", CIT},
-            {"Asia/Manila", new String[] {"\u83f2\u5f8b\u8cd3\u6642\u9593", "PHT",
-                                          "\u83f2\u5f8b\u8cd3\u590f\u4ee4\u6642\u9593", "PHST"}},
-            {"Asia/Muscat", GST},
-            {"Asia/Nicosia", EET},
-            {"Asia/Novokuznetsk", NOVT},
-            {"Asia/Novosibirsk", NOVT},
-            {"Asia/Oral", new String[] {"\u6b50\u4f5b\u6642\u9593", "ORAT",
-                                        "\u6b50\u4f5b\u590f\u4ee4\u6642\u9593", "ORAST"}},
-            {"Asia/Omsk", new String[] {"\u6b50\u59c6\u65af\u514b (Omsk) \u6642\u9593", "OMST",
-                                        "\u6b50\u59c6\u65af\u514b (Omsk) \u590f\u4ee4\u6642\u9593", "OMSST"}},
-            {"Asia/Phnom_Penh", ICT},
-            {"Asia/Pontianak", WIT},
-            {"Asia/Pyongyang", KST},
-            {"Asia/Qatar", ARAST},
-            {"Asia/Qyzylorda", new String[] {"Qyzylorda \u6642\u9593", "QYZT",
-                                             "Qyzylorda \u590f\u4ee4\u6642\u9593", "QYZST"}},
-            {"Asia/Rangoon", new String[] {"\u7dec\u7538\u6642\u9593", "MMT",
-                                           "\u7dec\u7538\u590f\u4ee4\u6642\u9593", "MMST"}},
-            {"Asia/Riyadh", ARAST},
-            {"Asia/Saigon", ICT},
-            {"Asia/Sakhalin", new String[] {"\u5eab\u9801\u5cf6\u6642\u9593", "SAKT",
-                                            "\u5eab\u9801\u5cf6\u590f\u4ee4\u6642\u9593", "SAKST"}},
-            {"Asia/Samarkand", UZT},
-            {"Asia/Seoul", KST},
-            {"Asia/Singapore", SGT},
-            {"Asia/Taipei", new String[] {"\u53f0\u7063\u6a19\u6e96\u6642\u9593", "TST",
-                                          "\u53f0\u7063\u590f\u4ee4\u6642\u9593", "TDT"}},
-            {"Asia/Tel_Aviv", ISRAEL},
-            {"Asia/Tashkent", UZT},
-            {"Asia/Tbilisi", new String[] {"\u55ac\u6cbb\u4e9e\u6642\u9593", "GET",
-                                           "\u55ac\u6cbb\u4e9e\u590f\u4ee4\u6642\u9593", "GEST"}},
-            {"Asia/Tehran", IRT},
-            {"Asia/Thimbu", BTT},
-            {"Asia/Thimphu", BTT},
-            {"Asia/Ujung_Pandang", CIT},
-            {"Asia/Ulaanbaatar", ULAT},
-            {"Asia/Ulan_Bator", ULAT},
-            {"Asia/Urumqi", CTT},
-            {"Asia/Ust-Nera", VLAT},
-            {"Asia/Vientiane", ICT},
-            {"Asia/Vladivostok", VLAT},
-            {"Asia/Yakutsk", YAKT},
-            {"Asia/Yekaterinburg", new String[] {"Yekaterinburg \u6642\u9593", "YEKT",
-                                                 "Yekaterinburg \u590f\u4ee4\u6642\u9593", "YEKST"}},
-            {"Asia/Yerevan", ARMT},
-            {"Atlantic/Azores", new String[] {"\u4e9e\u901f\u723e\u7fa4\u5cf6\u6642\u9593", "AZOT",
-                                              "\u4e9e\u901f\u723e\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "AZOST"}},
-            {"Atlantic/Bermuda", AST},
-            {"Atlantic/Canary", WET},
-            {"Atlantic/Cape_Verde", new String[] {"\u4f5b\u5fb7\u89d2\u6642\u9593", "CVT",
-                                                  "\u4f5b\u5fb7\u89d2\u590f\u4ee4\u6642\u9593", "CVST"}},
-            {"Atlantic/Faeroe", WET},
-            {"Atlantic/Faroe", WET},
-            {"Atlantic/Jan_Mayen", CET},
-            {"Atlantic/Madeira", WET},
-            {"Atlantic/Reykjavik", GMT},
-            {"Atlantic/South_Georgia", new String[] {"\u5357\u55ac\u6cbb\u4e9e\u6a19\u6e96\u6642\u9593", "GST",
-                                                     "\u5357\u55ac\u6cbb\u4e9e\u65e5\u5149\u7bc0\u7d04\u6642\u9593", "GDT"}},
-            {"Atlantic/St_Helena", GMT},
-            {"Atlantic/Stanley", new String[] {"\u798f\u514b\u862d\u7fa4\u5cf6\u6642\u9593", "FKT",
-                                               "\u798f\u514b\u862d\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "FKST"}},
-            {"Australia/ACT", EST_NSW},
-            {"Australia/Adelaide", ADELAIDE},
-            {"Australia/Brisbane", BRISBANE},
-            {"Australia/Broken_Hill", BROKEN_HILL},
-            {"Australia/Canberra", EST_NSW},
-            {"Australia/Currie", EST_NSW},
-            {"Australia/Darwin", DARWIN},
-            {"Australia/Eucla", new String[] {"\u4e2d\u897f\u90e8\u6a19\u6e96\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "CWST",
-                                              "\u4e2d\u897f\u90e8\u65e5\u5149\u7bc0\u7d04\u6642\u9593 (\u6fb3\u5927\u5229\u4e9e)", "CWST"}},
-            {"Australia/Hobart", TASMANIA},
-            {"Australia/LHI", LORD_HOWE},
-            {"Australia/Lindeman", BRISBANE},
-            {"Australia/Lord_Howe", LORD_HOWE},
-            {"Australia/Melbourne", VICTORIA},
-            {"Australia/North", DARWIN},
-            {"Australia/NSW", EST_NSW},
-            {"Australia/Perth", WST_AUS},
-            {"Australia/Queensland", BRISBANE},
-            {"Australia/South", ADELAIDE},
-            {"Australia/Sydney", EST_NSW},
-            {"Australia/Tasmania", TASMANIA},
-            {"Australia/Victoria", VICTORIA},
-            {"Australia/West", WST_AUS},
-            {"Australia/Yancowinna", BROKEN_HILL},
-            {"BET", BRT},
-            {"BST", BDT},
-            {"Brazil/Acre", AMT},
-            {"Brazil/DeNoronha", NORONHA},
-            {"Brazil/East", BRT},
-            {"Brazil/West", AMT},
-            {"Canada/Atlantic", AST},
-            {"Canada/Central", CST},
-            {"Canada/East-Saskatchewan", CST},
-            {"Canada/Eastern", EST},
-            {"Canada/Mountain", MST},
-            {"Canada/Newfoundland", NST},
-            {"Canada/Pacific", PST},
-            {"Canada/Yukon", PST},
-            {"Canada/Saskatchewan", CST},
-            {"CAT", CAT},
-            {"CET", CET},
-            {"Chile/Continental", CLT},
-            {"Chile/EasterIsland", EASTER},
-            {"CST6CDT", CST},
-            {"Cuba", CUBA},
-            {"EAT", EAT},
-            {"EET", EET},
-            {"Egypt", EET},
-            {"Eire", DUBLIN},
-            {"EST5EDT", EST},
-            {"Etc/Greenwich", GMT},
-            {"Etc/UCT", UTC},
-            {"Etc/Universal", UTC},
-            {"Etc/UTC", UTC},
-            {"Etc/Zulu", UTC},
-            {"Europe/Amsterdam", CET},
-            {"Europe/Andorra", CET},
-            {"Europe/Athens", EET},
-            {"Europe/Belfast", GMTBST},
-            {"Europe/Belgrade", CET},
-            {"Europe/Berlin", CET},
-            {"Europe/Bratislava", CET},
-            {"Europe/Brussels", CET},
-            {"Europe/Budapest", CET},
-            {"Europe/Busingen", CET},
-            {"Europe/Chisinau", EET},
-            {"Europe/Copenhagen", CET},
-            {"Europe/Dublin", DUBLIN},
-            {"Europe/Gibraltar", CET},
-            {"Europe/Guernsey", GMTBST},
-            {"Europe/Helsinki", EET},
-            {"Europe/Isle_of_Man", GMTBST},
-            {"Europe/Istanbul", EET},
-            {"Europe/Jersey", GMTBST},
-            {"Europe/Kaliningrad", FET},
-            {"Europe/Kiev", EET},
-            {"Europe/Lisbon", WET},
-            {"Europe/Ljubljana", CET},
-            {"Europe/London", GMTBST},
-            {"Europe/Luxembourg", CET},
-            {"Europe/Madrid", CET},
-            {"Europe/Malta", CET},
-            {"Europe/Mariehamn", EET},
-            {"Europe/Minsk", FET},
-            {"Europe/Monaco", CET},
-            {"Europe/Moscow", MSK},
-            {"Europe/Nicosia", EET},
-            {"Europe/Oslo", CET},
-            {"Europe/Podgorica", CET},
-            {"Europe/Prague", CET},
-            {"Europe/Riga", EET},
-            {"Europe/Rome", CET},
-            {"Europe/Samara", new String[] {"\u6c99\u99ac\u62c9\u6642\u9593", "SAMT",
-                                            "\u6c99\u99ac\u62c9\u590f\u4ee4\u6642\u9593", "SAMST"}},
-            {"Europe/San_Marino", CET},
-            {"Europe/Sarajevo", CET},
-            {"Europe/Simferopol", EET},
-            {"Europe/Skopje", CET},
-            {"Europe/Sofia", EET},
-            {"Europe/Stockholm", CET},
-            {"Europe/Tallinn", EET},
-            {"Europe/Tirane", CET},
-            {"Europe/Tiraspol", EET},
-            {"Europe/Uzhgorod", EET},
-            {"Europe/Vaduz", CET},
-            {"Europe/Vatican", CET},
-            {"Europe/Vienna", CET},
-            {"Europe/Vilnius", EET},
-            {"Europe/Volgograd", new String[] {"\u4f0f\u723e\u52a0\u683c\u52d2\u6642\u9593", "VOLT",
-                                               "\u4f0f\u723e\u52a0\u683c\u52d2\u590f\u4ee4\u6642\u9593", "VOLST"}},
-            {"Europe/Warsaw", CET},
-            {"Europe/Zagreb", CET},
-            {"Europe/Zaporozhye", EET},
-            {"Europe/Zurich", CET},
-            {"GB", GMTBST},
-            {"GB-Eire", GMTBST},
-            {"Greenwich", GMT},
-            {"Hongkong", HKT},
-            {"Iceland", GMT},
-            {"Iran", IRT},
-            {"IST", IST},
-            {"Indian/Antananarivo", EAT},
-            {"Indian/Chagos", new String[] {"\u5370\u5ea6\u6d0b\u5730\u5340\u6642\u9593", "IOT",
-                                            "\u5370\u5ea6\u6d0b\u5730\u5340\u590f\u4ee4\u6642\u9593", "IOST"}},
-            {"Indian/Christmas", new String[] {"\u8056\u8a95\u5cf6\u6642\u9593", "CXT",
-                                               "\u8056\u8a95\u5cf6\u590f\u4ee4\u6642\u9593", "CXST"}},
-            {"Indian/Cocos", new String[] {"\u53ef\u53ef\u65af\u7fa4\u5cf6\u6642\u9593", "CCT",
-                                           "\u53ef\u53ef\u65af\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "CCST"}},
-            {"Indian/Comoro", EAT},
-            {"Indian/Kerguelen", new String[] {"\u6cd5\u570b\u5357\u534a\u7403\u53ca\u5357\u6975\u5c6c\u5730\u6642\u9593", "TFT",
-                                               "\u6cd5\u570b\u5357\u534a\u7403\u53ca\u5357\u6975\u5c6c\u5730\u590f\u4ee4\u6642\u9593", "TFST"}},
-            {"Indian/Mahe", new String[] {"\u585e\u5e2d\u723e\u7fa4\u5cf6\u6642\u9593", "SCT",
-                                          "\u585e\u5e2d\u723e\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "SCST"}},
-            {"Indian/Maldives", new String[] {"\u99ac\u723e\u5730\u592b\u6642\u9593", "MVT",
-                                              "\u99ac\u723e\u5730\u592b\u590f\u4ee4\u6642\u9593", "MVST"}},
-            {"Indian/Mauritius", new String[] {"\u6469\u91cc\u897f\u65af\u6642\u9593", "MUT",
-                                               "\u6469\u91cc\u897f\u65af\u590f\u4ee4\u6642\u9593", "MUST"}},
-            {"Indian/Mayotte", EAT},
-            {"Indian/Reunion", new String[] {"\u7559\u5c3c\u65fa\u5cf6\u6642\u9593", "RET",
-                                             "\u7559\u5c3c\u65fa\u5cf6\u590f\u4ee4\u6642\u9593", "REST"}},
-            {"Israel", ISRAEL},
-            {"Jamaica", EST},
-            {"Japan", JST},
-            {"Kwajalein", MHT},
-            {"Libya", CET},
-            {"MET", new String[] {"\u4e2d\u6b50\u6642\u9593", "MET",
-                                  "\u4e2d\u6b50\u590f\u4ee4\u6642\u9593", "MEST"}},
-            {"Mexico/BajaNorte", PST},
-            {"Mexico/BajaSur", MST},
-            {"Mexico/General", CST},
-            {"MIT", WST_SAMOA},
-            {"MST7MDT", MST},
-            {"Navajo", MST},
-            {"NET", ARMT},
-            {"NST", NZST},
-            {"NZ", NZST},
-            {"NZ-CHAT", CHAST},
-            {"PLT", PKT},
-            {"Portugal", WET},
-            {"PRT", AST},
-            {"Pacific/Apia", WST_SAMOA},
-            {"Pacific/Auckland", NZST},
-            {"Pacific/Chatham", CHAST},
-            {"Pacific/Chuuk", CHUT},
-            {"Pacific/Easter", EASTER},
-            {"Pacific/Efate", new String[] {"\u74e6\u5974\u963f\u5716\u6642\u9593", "VUT",
-                                            "\u74e6\u5974\u963f\u5716\u590f\u4ee4\u6642\u9593", "VUST"}},
-            {"Pacific/Enderbury", new String[] {"\u83f2\u5c3c\u514b\u65af\u7fa4\u5cf6\u6642\u9593", "PHOT",
-                                                "\u83f2\u5c3c\u514b\u65af\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "PHOST"}},
-            {"Pacific/Fakaofo", new String[] {"\u6258\u514b\u52de\u7fa4\u5cf6\u6642\u9593", "TKT",
-                                              "\u6258\u514b\u52de\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "TKST"}},
-            {"Pacific/Fiji", new String[] {"\u6590\u6fdf\u6642\u9593", "FJT",
-                                           "\u6590\u6fdf\u590f\u4ee4\u6642\u9593", "FJST"}},
-            {"Pacific/Funafuti", new String[] {"\u5410\u9b6f\u74e6\u6642\u9593", "TVT",
-                                               "\u5410\u9b6f\u74e6\u590f\u4ee4\u6642\u9593", "TVST"}},
-            {"Pacific/Galapagos", new String[] {"\u52a0\u62c9\u5df4\u54e5\u6642\u9593", "GALT",
-                                                "\u52a0\u62c9\u5df4\u54e5\u590f\u4ee4\u6642\u9593", "GALST"}},
-            {"Pacific/Gambier", GAMBIER},
-            {"Pacific/Guadalcanal", SBT},
-            {"Pacific/Guam", ChST},
-            {"Pacific/Johnston", HST},
-            {"Pacific/Kiritimati", new String[] {"Line Is. \u6642\u9593", "LINT",
-                                                 "Line Is. \u590f\u4ee4\u6642\u9593", "LINST"}},
-            {"Pacific/Kosrae", new String[] {"Kosrae \u6642\u9593", "KOST",
-                                             "Kosrae \u590f\u4ee4\u6642\u9593", "KOSST"}},
-            {"Pacific/Kwajalein", MHT},
-            {"Pacific/Majuro", MHT},
-            {"Pacific/Marquesas", new String[] {"\u99ac\u514b\u85a9\u65af\u6642\u9593", "MART",
-                                                "\u99ac\u514b\u85a9\u65af\u590f\u4ee4\u6642\u9593", "MARST"}},
-            {"Pacific/Midway", SAMOA},
-            {"Pacific/Nauru", new String[] {"\u8afe\u9b6f\u6642\u9593", "NRT",
-                                            "\u8afe\u9b6f\u590f\u4ee4\u6642\u9593", "NRST"}},
-            {"Pacific/Niue", new String[] {"\u7d10\u5a01\u5cf6\u6642\u9593", "NUT",
-                                           "\u7d10\u5a01\u5cf6\u590f\u4ee4\u6642\u9593", "NUST"}},
-            {"Pacific/Norfolk", new String[] {"\u8afe\u798f\u514b\u6642\u9593", "NFT",
-                                              "\u8afe\u798f\u514b\u590f\u4ee4\u6642\u9593", "NFST"}},
-            {"Pacific/Noumea", new String[] {"\u65b0\u52a0\u52d2\u591a\u5c3c\u4e9e\u6642\u9593", "NCT",
-                                             "\u65b0\u52a0\u52d2\u591a\u5c3c\u4e9e\u590f\u4ee4\u6642\u9593", "NCST"}},
-            {"Pacific/Pago_Pago", SAMOA},
-            {"Pacific/Palau", new String[] {"\u5e1b\u7409\u6642\u9593", "PWT",
-                                            "\u5e1b\u7409\u590f\u4ee4\u6642\u9593", "PWST"}},
-            {"Pacific/Pitcairn", PITCAIRN},
-            {"Pacific/Pohnpei", PONT},
-            {"Pacific/Ponape", PONT},
-            {"Pacific/Port_Moresby", new String[] {"\u5df4\u5e03\u4e9e\u65b0\u5e7e\u5167\u4e9e\u6642\u9593", "PGT",
-                                                   "\u5df4\u5e03\u4e9e\u65b0\u5e7e\u5167\u4e9e\u590f\u4ee4\u6642\u9593", "PGST"}},
-            {"Pacific/Rarotonga", new String[] {"\u5eab\u514b\u7fa4\u5cf6\u6642\u9593", "CKT",
-                                                "\u5eab\u514b\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "CKHST"}},
-            {"Pacific/Saipan", ChST},
-            {"Pacific/Samoa", SAMOA},
-            {"Pacific/Tahiti", new String[] {"\u5927\u6eaa\u5730\u5cf6\u6642\u9593", "TAHT",
-                                             "\u5927\u6eaa\u5730\u5cf6\u590f\u4ee4\u6642\u9593", "TAHST"}},
-            {"Pacific/Tarawa", new String[] {"\u5409\u4f2f\u7279\u7fa4\u5cf6\u6642\u9593", "GILT",
-                                             "\u5409\u4f2f\u7279\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "GILST"}},
-            {"Pacific/Tongatapu", new String[] {"\u6771\u52a0\u6642\u9593", "TOT",
-                                                "\u6771\u52a0\u590f\u4ee4\u6642\u9593", "TOST"}},
-            {"Pacific/Truk", CHUT},
-            {"Pacific/Wake", new String[] {"\u5a01\u514b\u6642\u9593", "WAKT",
-                                           "\u5a01\u514b\u590f\u4ee4\u6642\u9593", "WAKST"}},
-            {"Pacific/Wallis", new String[] {"\u74e6\u5229\u65af\u53ca\u798f\u675c\u7d0d\u7fa4\u5cf6\u6642\u9593", "WFT",
-                                             "\u74e6\u5229\u65af\u53ca\u798f\u675c\u7d0d\u7fa4\u5cf6\u590f\u4ee4\u6642\u9593", "WFST"}},
-            {"Pacific/Yap", CHUT},
-            {"Poland", CET},
-            {"PRC", CTT},
-            {"PST8PDT", PST},
-            {"ROK", KST},
-            {"Singapore", SGT},
-            {"SST", SBT},
-            {"SystemV/AST4", AST},
-            {"SystemV/AST4ADT", AST},
-            {"SystemV/CST6", CST},
-            {"SystemV/CST6CDT", CST},
-            {"SystemV/EST5", EST},
-            {"SystemV/EST5EDT", EST},
-            {"SystemV/HST10", HST},
-            {"SystemV/MST7", MST},
-            {"SystemV/MST7MDT", MST},
-            {"SystemV/PST8", PST},
-            {"SystemV/PST8PDT", PST},
-            {"SystemV/YST9", AKST},
-            {"SystemV/YST9YDT", AKST},
-            {"Turkey", EET},
-            {"UCT", UTC},
-            {"Universal", UTC},
-            {"US/Alaska", AKST},
-            {"US/Aleutian", HAST},
-            {"US/Arizona", MST},
-            {"US/Central", CST},
-            {"US/Eastern", EST},
-            {"US/Hawaii", HST},
-            {"US/Indiana-Starke", CST},
-            {"US/East-Indiana", EST},
-            {"US/Michigan", EST},
-            {"US/Mountain", MST},
-            {"US/Pacific", PST},
-            {"US/Pacific-New", PST},
-            {"US/Samoa", SAMOA},
-            {"UTC", UTC},
-            {"VST", ICT},
-            {"W-SU", MSK},
-            {"WET", WET},
-            {"Zulu", UTC},
-        };
-    }
-}